@yuebai008/cli
Version:
Command line interface for rapid qg-minigame development
1 lines • 9.75 kB
JavaScript
import*as Common from"../../core/common/common.js";import*as Host from"../../core/host/host.js";import*as i18n from"../../core/i18n/i18n.js";import*as Workspace from"../../models/workspace/workspace.js";import*as UI from"../../ui/legacy/legacy.js";import searchViewStyles from"./searchView.css.js";import{SearchResultsPane}from"./SearchResultsPane.js";const UIStrings={search:"Search",searchQuery:"Search Query",matchCase:"Match Case",useRegularExpression:"Use Regular Expression",refresh:"Refresh",clear:"Clear",indexing:"Indexing…",searching:"Searching…",indexingInterrupted:"Indexing interrupted.",foundMatchingLineInFile:"Found 1 matching line in 1 file.",foundDMatchingLinesInFile:"Found {PH1} matching lines in 1 file.",foundDMatchingLinesInDFiles:"Found {PH1} matching lines in {PH2} files.",noMatchesFound:"No matches found.",searchFinished:"Search finished.",searchInterrupted:"Search interrupted."},str_=i18n.i18n.registerUIStrings("panels/search/SearchView.ts",UIStrings),i18nString=i18n.i18n.getLocalizedString.bind(void 0,str_);export class SearchView extends UI.Widget.VBox{focusOnShow;isIndexing;searchId;searchMatchesCount;searchResultsCount;nonEmptySearchResultsCount;searchingView;notFoundView;searchConfig;pendingSearchConfig;searchResultsPane;progressIndicator;visiblePane;searchPanelElement;searchResultsElement;search;matchCaseButton;regexButton;searchMessageElement;searchProgressPlaceholderElement;searchResultsMessageElement;advancedSearchConfig;searchScope;constructor(e){super(!0),this.setMinimumSize(0,40),this.focusOnShow=!1,this.isIndexing=!1,this.searchId=1,this.searchMatchesCount=0,this.searchResultsCount=0,this.nonEmptySearchResultsCount=0,this.searchingView=null,this.notFoundView=null,this.searchConfig=null,this.pendingSearchConfig=null,this.searchResultsPane=null,this.progressIndicator=null,this.visiblePane=null,this.contentElement.classList.add("search-view"),this.contentElement.addEventListener("keydown",(e=>{this.onKeyDownOnPanel(e)})),this.searchPanelElement=this.contentElement.createChild("div","search-drawer-header"),this.searchResultsElement=this.contentElement.createChild("div"),this.searchResultsElement.className="search-results";const s=document.createElement("div");s.style.flex="auto",s.style.justifyContent="start",s.style.maxWidth="300px",s.style.overflow="revert",this.search=UI.HistoryInput.HistoryInput.create(),this.search.addEventListener("keydown",(e=>{this.onKeyDown(e)})),s.appendChild(this.search),this.search.placeholder=i18nString(UIStrings.search),this.search.setAttribute("type","text"),this.search.setAttribute("results","0"),this.search.setAttribute("size","100"),UI.ARIAUtils.setLabel(this.search,i18nString(UIStrings.searchQuery));const t=new UI.Toolbar.ToolbarItem(s),n=new UI.Toolbar.Toolbar("search-toolbar",this.searchPanelElement);this.matchCaseButton=SearchView.appendToolbarToggle(n,"Aa",i18nString(UIStrings.matchCase)),this.regexButton=SearchView.appendToolbarToggle(n,".*",i18nString(UIStrings.useRegularExpression)),n.appendToolbarItem(t);const i=new UI.Toolbar.ToolbarButton(i18nString(UIStrings.refresh),"refresh"),r=new UI.Toolbar.ToolbarButton(i18nString(UIStrings.clear),"clear");n.appendToolbarItem(i),n.appendToolbarItem(r),i.addEventListener(UI.Toolbar.ToolbarButton.Events.Click,(()=>this.onAction())),r.addEventListener(UI.Toolbar.ToolbarButton.Events.Click,(()=>{this.resetSearch(),this.onSearchInputClear()}));const h=this.contentElement.createChild("div","search-toolbar-summary");this.searchMessageElement=h.createChild("div","search-message"),this.searchProgressPlaceholderElement=h.createChild("div","flex-centered"),this.searchResultsMessageElement=h.createChild("div","search-message"),this.advancedSearchConfig=Common.Settings.Settings.instance().createLocalSetting(e+"SearchConfig",new Workspace.SearchConfig.SearchConfig("",!0,!1).toPlainObject()),this.load(),this.searchScope=null}static appendToolbarToggle(e,s,t){const n=new UI.Toolbar.ToolbarToggle(t);return n.setText(s),n.addEventListener(UI.Toolbar.ToolbarButton.Events.Click,(()=>n.setToggled(!n.toggled()))),e.appendToolbarItem(n),n}buildSearchConfig(){return new Workspace.SearchConfig.SearchConfig(this.search.value,!this.matchCaseButton.toggled(),this.regexButton.toggled())}async toggle(e,s){e&&(this.search.value=e),this.isShowing()?this.focus():this.focusOnShow=!0,this.initScope(),s?this.onAction():this.startIndexing()}createScope(){throw new Error("Not implemented")}initScope(){this.searchScope=this.createScope()}wasShown(){this.focusOnShow&&(this.focus(),this.focusOnShow=!1),this.registerCSSFiles([searchViewStyles])}onIndexingFinished(){if(!this.progressIndicator)return;const e=!this.progressIndicator.isCanceled();if(this.progressIndicator.done(),this.progressIndicator=null,this.isIndexing=!1,this.indexingFinished(e),e||(this.pendingSearchConfig=null),!this.pendingSearchConfig)return;const s=this.pendingSearchConfig;this.pendingSearchConfig=null,this.innerStartSearch(s)}startIndexing(){this.isIndexing=!0,this.progressIndicator&&this.progressIndicator.done(),this.progressIndicator=new UI.ProgressIndicator.ProgressIndicator,this.searchMessageElement.textContent=i18nString(UIStrings.indexing),this.progressIndicator.show(this.searchProgressPlaceholderElement),this.searchScope&&this.searchScope.performIndexing(new Common.Progress.ProgressProxy(this.progressIndicator,this.onIndexingFinished.bind(this)))}onSearchInputClear(){this.search.value="",this.save(),this.focus()}onSearchResult(e,s){e===this.searchId&&this.progressIndicator&&(this.progressIndicator&&this.progressIndicator.isCanceled()?this.onIndexingFinished():(this.addSearchResult(s),s.matchesCount()&&(this.searchResultsPane||(this.searchResultsPane=new SearchResultsPane(this.searchConfig),this.showPane(this.searchResultsPane)),this.searchResultsPane.addSearchResult(s))))}onSearchFinished(e,s){e===this.searchId&&this.progressIndicator&&(this.searchResultsPane||this.nothingFound(),this.searchFinished(s),this.searchConfig=null,UI.ARIAUtils.alert(this.searchMessageElement.textContent+" "+this.searchResultsMessageElement.textContent))}async startSearch(e){this.resetSearch(),++this.searchId,this.initScope(),this.isIndexing||this.startIndexing(),this.pendingSearchConfig=e}innerStartSearch(e){this.searchConfig=e,this.progressIndicator&&this.progressIndicator.done(),this.progressIndicator=new UI.ProgressIndicator.ProgressIndicator,this.searchStarted(this.progressIndicator),this.searchScope&&this.searchScope.performSearch(e,this.progressIndicator,this.onSearchResult.bind(this,this.searchId),this.onSearchFinished.bind(this,this.searchId))}resetSearch(){this.stopSearch(),this.showPane(null),this.searchResultsPane=null,this.clearSearchMessage()}clearSearchMessage(){this.searchMessageElement.textContent="",this.searchResultsMessageElement.textContent=""}stopSearch(){this.progressIndicator&&!this.isIndexing&&this.progressIndicator.cancel(),this.searchScope&&this.searchScope.stopSearch(),this.searchConfig=null}searchStarted(e){this.resetCounters(),this.searchingView||(this.searchingView=new UI.EmptyWidget.EmptyWidget(i18nString(UIStrings.searching))),this.showPane(this.searchingView),this.searchMessageElement.textContent=i18nString(UIStrings.searching),e.show(this.searchProgressPlaceholderElement),this.updateSearchResultsMessage()}indexingFinished(e){this.searchMessageElement.textContent=e?"":i18nString(UIStrings.indexingInterrupted)}updateSearchResultsMessage(){this.searchMatchesCount&&this.searchResultsCount?1===this.searchMatchesCount&&1===this.nonEmptySearchResultsCount?this.searchResultsMessageElement.textContent=i18nString(UIStrings.foundMatchingLineInFile):this.searchMatchesCount>1&&1===this.nonEmptySearchResultsCount?this.searchResultsMessageElement.textContent=i18nString(UIStrings.foundDMatchingLinesInFile,{PH1:this.searchMatchesCount}):this.searchResultsMessageElement.textContent=i18nString(UIStrings.foundDMatchingLinesInDFiles,{PH1:this.searchMatchesCount,PH2:this.nonEmptySearchResultsCount}):this.searchResultsMessageElement.textContent=""}showPane(e){this.visiblePane&&this.visiblePane.detach(),e&&e.show(this.searchResultsElement),this.visiblePane=e}resetCounters(){this.searchMatchesCount=0,this.searchResultsCount=0,this.nonEmptySearchResultsCount=0}nothingFound(){this.notFoundView||(this.notFoundView=new UI.EmptyWidget.EmptyWidget(i18nString(UIStrings.noMatchesFound))),this.showPane(this.notFoundView),this.searchResultsMessageElement.textContent=i18nString(UIStrings.noMatchesFound)}addSearchResult(e){const s=e.matchesCount();this.searchMatchesCount+=s,this.searchResultsCount++,s&&this.nonEmptySearchResultsCount++,this.updateSearchResultsMessage()}searchFinished(e){this.searchMessageElement.textContent=i18nString(e?UIStrings.searchFinished:UIStrings.searchInterrupted)}focus(){this.search.focus(),this.search.select()}willHide(){this.stopSearch()}onKeyDown(e){if(this.save(),e.keyCode===UI.KeyboardShortcut.Keys.Enter.code)this.onAction()}onKeyDownOnPanel(e){const s=Host.Platform.isMac(),t=s&&e.metaKey&&!e.ctrlKey&&e.altKey&&"BracketRight"===e.code,n=!s&&e.ctrlKey&&!e.metaKey&&e.shiftKey&&"BracketRight"===e.code,i=s&&e.metaKey&&!e.ctrlKey&&e.altKey&&"BracketLeft"===e.code,r=!s&&e.ctrlKey&&!e.metaKey&&e.shiftKey&&"BracketLeft"===e.code;t||n?this.searchResultsPane?.showAllMatches():(i||r)&&this.searchResultsPane?.collapseAllResults()}save(){this.advancedSearchConfig.set(this.buildSearchConfig().toPlainObject())}load(){const e=Workspace.SearchConfig.SearchConfig.fromPlainObject(this.advancedSearchConfig.get());this.search.value=e.query(),this.matchCaseButton.setToggled(!e.ignoreCase()),this.regexButton.setToggled(e.isRegex())}onAction(){const e=this.buildSearchConfig();e.query()&&e.query().length&&this.startSearch(e)}}