forked from phcode-dev/staging.phcode.dev
-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathQuickOpen.js
More file actions
1 lines (1 loc) · 14.5 KB
/
QuickOpen.js
File metadata and controls
1 lines (1 loc) · 14.5 KB
1
define(function(require,exports,module){var DocumentManager=require("document/DocumentManager"),EditorManager=require("editor/EditorManager"),MainViewManager=require("view/MainViewManager"),MainViewFactory=require("view/MainViewFactory"),CommandManager=require("command/CommandManager"),Strings=require("strings"),StringUtils=require("utils/StringUtils"),Commands=require("command/Commands"),ProjectManager=require("project/ProjectManager"),LanguageManager=require("language/LanguageManager"),FileSystemError=require("filesystem/FileSystemError"),ModalBar=require("widgets/ModalBar").ModalBar,QuickSearchField=require("search/QuickSearchField").QuickSearchField,StringMatch=require("utils/StringMatch"),ProviderRegistrationHandler,_providerRegistrationHandler=new(0,require("features/PriorityBasedRegistration").RegistrationHandler),_registerQuickOpenProvider=_providerRegistrationHandler.registerProvider.bind(_providerRegistrationHandler),SymbolKind={1:"File",2:"Module",3:"Namespace",4:"Package",5:"Class",6:"Method",7:"Property",8:"Field",9:"Constructor",10:"Enum",11:"Interface",12:"Function",13:"Variable",14:"Constant",15:"String",16:"Number",17:"Boolean",18:"Array",19:"Object",20:"Key",21:"Null",22:"EnumMember",23:"Struct",24:"Event",25:"Operator",26:"TypeParameter"},CURSOR_POS_EXP=new RegExp(":([^,:]+)?([,:](.+)?)?"),currentPlugin=null,fileList,fileListPromise,_curDialog;function _getPluginsForCurrentContext(){var curDoc=DocumentManager.getCurrentDocument();if(curDoc){var languageId=curDoc.getLanguage().getId();return _providerRegistrationHandler.getProvidersForLanguageId(languageId)}return _providerRegistrationHandler.getProvidersForLanguageId()}function QuickOpenPlugin(name,languageIds,done,search,match,itemFocus,itemSelect,resultsFormatter,matcherOptions,label){this.name=name,this.languageIds=languageIds,this.done=done,this.search=search,this.match=match,this.itemFocus=itemFocus,this.itemSelect=itemSelect,this.resultsFormatter=resultsFormatter,this.matcherOptions=matcherOptions,this.label=label}function addQuickOpenPlugin(pluginDef){var quickOpenProvider=new QuickOpenPlugin(pluginDef.name,pluginDef.languageIds,pluginDef.done,pluginDef.search,pluginDef.match,pluginDef.itemFocus,pluginDef.itemSelect,pluginDef.resultsFormatter,pluginDef.matcherOptions,pluginDef.label),providerLanguageIds=pluginDef.languageIds.length?pluginDef.languageIds:["all"],providerPriority=pluginDef.priority||0;_registerQuickOpenProvider(quickOpenProvider,providerLanguageIds,providerPriority)}function QuickNavigateDialog(){this.$searchField=void 0,this._handleCloseBar=this._handleCloseBar.bind(this),this._handleItemSelect=this._handleItemSelect.bind(this),this._handleItemHighlight=this._handleItemHighlight.bind(this),this._filterCallback=this._filterCallback.bind(this),this._resultsFormatterCallback=this._resultsFormatterCallback.bind(this),this._filenameMatcher=new StringMatch.StringMatcher({segmentedSearch:!0}),this._matchers={}}function _filenameFromPath(path,includeExtension){var end;return includeExtension?end=path.length:-1===(end=path.lastIndexOf("."))&&(end=path.length),path.slice(path.lastIndexOf("/")+1,end)}function extractCursorPos(query){var regInfo=query.match(CURSOR_POS_EXP);return query.length<=1||!regInfo||regInfo[1]&&isNaN(regInfo[1])||regInfo[3]&&isNaN(regInfo[3])?null:{query:regInfo[0],local:":"===query[0],line:regInfo[1]-1||0,ch:regInfo[3]-1||0}}function _doSearchFileList(query,matcher){var cursorPos=extractCursorPos(query);cursorPos&&!cursorPos.local&&""!==cursorPos.query&&(query=query.replace(cursorPos.query,""));var filteredList=$.map(fileList,function(fileInfo){var searchResult;return(searchResult=matcher.match(ProjectManager.makeProjectRelativeIfPossible(fileInfo.fullPath),query))&&(searchResult.label=fileInfo.name,searchResult.fullPath=fileInfo.fullPath,searchResult.filenameWithoutExtension=_filenameFromPath(fileInfo.name,!1)),searchResult});return StringMatch.multiFieldSort(filteredList,{matchGoodness:0,filenameWithoutExtension:1,label:2,fullPath:3}),filteredList}function searchFileList(query,matcher){if(!fileList){var asyncResult=new $.Deferred;return fileListPromise.done(function(){asyncResult.resolve(_doSearchFileList(query,matcher))}),asyncResult.promise()}return _doSearchFileList(query,matcher)}function highlightMatch(item,matchClass,rangeFilter){var label=item.label||item;matchClass=matchClass||"quicksearch-namematch";var stringRanges=item.stringRanges;stringRanges||(stringRanges=[{text:label,matched:!1,includesLastSegment:!0}]);var displayName="";if(item.scoreDebug){var sd=item.scoreDebug;displayName+='<span title="sp:'+sd.special+", m:"+sd.match+", ls:"+sd.lastSegment+", b:"+sd.beginning+", ld:"+sd.lengthDeduction+", c:"+sd.consecutive+", nsos: "+sd.notStartingOnSpecial+", upper: "+sd.upper+'">('+item.matchGoodness+") </span>"}return stringRanges.forEach(function(range){range.matched&&(displayName+="<span class='"+matchClass+"'>");var rangeText=rangeFilter?rangeFilter(range.includesLastSegment,range.text):range.text;displayName+=StringUtils.breakableUrl(rangeText),range.matched&&(displayName+="</span>")}),displayName}function defaultResultsFormatter(item,query){var displayName;return query=query.slice(query.indexOf("@")+1,query.length),"<li>"+highlightMatch(item)+"</li>"}function _filenameResultsFormatter(item,query){function fileNameFilter(includesLastSegment,rangeText){if(includesLastSegment){var rightmostSlash=rangeText.lastIndexOf("/");return rangeText.substring(rightmostSlash+1)}return""}var displayName,displayPath;return"<li>"+highlightMatch(item,null,fileNameFilter)+"<br /><span class='quick-open-path'>"+highlightMatch(item,"quicksearch-pathmatch")+"</span></li>"}function getCurrentEditorSelectedText(){var currentEditor=EditorManager.getActiveEditor();return currentEditor&¤tEditor.getSelectedText()||""}function beginSearch(prefix,initialString){function createDialog(){(_curDialog=new QuickNavigateDialog).showDialog(prefix,initialString)}_curDialog?_curDialog.isOpen?_curDialog.setSearchFieldValue(prefix,initialString):_curDialog.close().done(createDialog):createDialog()}function doFileSearch(){beginSearch("",getCurrentEditorSelectedText())}function doGotoLine(){DocumentManager.getCurrentDocument()&&beginSearch(":","")}function doDefinitionSearch(){DocumentManager.getCurrentDocument()&&beginSearch("@",getCurrentEditorSelectedText())}function doDefinitionSearchInProject(){DocumentManager.getCurrentDocument()&&beginSearch("#",getCurrentEditorSelectedText())}function _canHandleTrigger(trigger,plugins){var retval=!1;return plugins.some(function(plugin,index){var provider;if(plugin.provider.match(trigger))return retval=!0,!0}),retval}function _setMenuItemStateForLanguage(languageId){var plugins=_providerRegistrationHandler.getProvidersForLanguageId(languageId);_canHandleTrigger("@",plugins)?CommandManager.get(Commands.NAVIGATE_GOTO_DEFINITION).setEnabled(!0):CommandManager.get(Commands.NAVIGATE_GOTO_DEFINITION).setEnabled(!1),_canHandleTrigger("#",plugins)?CommandManager.get(Commands.NAVIGATE_GOTO_DEFINITION_PROJECT).setEnabled(!0):CommandManager.get(Commands.NAVIGATE_GOTO_DEFINITION_PROJECT).setEnabled(!1)}QuickNavigateDialog.prototype.isOpen=!1,QuickNavigateDialog.prototype._filenameMatcher=null,QuickNavigateDialog.prototype._matchers=null,QuickNavigateDialog.prototype._closeDeferred=null,QuickNavigateDialog.prototype._origDocPath=null,QuickNavigateDialog.prototype._origSelections=null,QuickNavigateDialog.prototype._origScrollPos=null,QuickNavigateDialog.prototype._handleItemSelect=function(selectedItem,query){var doClose=!0,self=this;if(currentPlugin)currentPlugin.itemSelect(selectedItem,query);else{var cursorPos=extractCursorPos(query),fullPath=selectedItem&&selectedItem.fullPath;fullPath?(doClose=!1,this.modalBar.prepareClose(),CommandManager.execute(Commands.CMD_ADD_TO_WORKINGSET_AND_OPEN,{fullPath:fullPath}).done(function(){var editor;cursorPos&&EditorManager.getCurrentFullEditor().setCursorPos(cursorPos.line,cursorPos.ch,!0)}).always(function(){self.close()})):cursorPos&&EditorManager.getCurrentFullEditor().setCursorPos(cursorPos.line,cursorPos.ch,!0)}doClose&&(this.close(),MainViewManager.focusActivePane())},QuickNavigateDialog.prototype._handleItemHighlight=function(selectedItem,query,explicit){currentPlugin&¤tPlugin.itemFocus&¤tPlugin.itemFocus(selectedItem,query,explicit)},QuickNavigateDialog.prototype.close=function(){return this.isOpen?(this.modalBar.close(),this.closePromise):this.closePromise},QuickNavigateDialog.prototype._handleCloseBar=function(event,reason,modalBarClosePromise){console.assert(!this.closePromise),this.closePromise=modalBarClosePromise,this.isOpen=!1;var i,plugins=_getPluginsForCurrentContext();for(i=0;i<plugins.length;i++){var plugin=plugins[i].provider;plugin.done&&plugin.done()}if(this.searchField.destroy(),reason===ModalBar.CLOSE_ESCAPE){var editor=EditorManager.getCurrentFullEditor();editor&&this._origSelections&&editor.setSelections(this._origSelections),editor&&this._origScrollPos&&editor.setScrollPos(this._origScrollPos.x,this._origScrollPos.y)}},QuickNavigateDialog.prototype._filterCallback=function(query){currentPlugin=null;var cursorPos=extractCursorPos(query);if(cursorPos&&cursorPos.local){var editor=EditorManager.getCurrentFullEditor();if(cursorPos&&editor&&cursorPos.line>=editor.getFirstVisibleLine()&&cursorPos.line<=editor.getLastVisibleLine()){var from={line:cursorPos.line,ch:cursorPos.ch},to={line:cursorPos.line};return EditorManager.getCurrentFullEditor().setSelection(from,to,!0),{error:null}}return[]}if(":"===query)return{error:null};var i,plugins=_getPluginsForCurrentContext();for(i=0;i<plugins.length;i++){var plugin=plugins[i].provider;if(plugin.match(query)){currentPlugin=plugin;var matcher=this._matchers[currentPlugin.name];return matcher||(matcher=new StringMatch.StringMatcher(plugin.matcherOptions),this._matchers[currentPlugin.name]=matcher),this._updateDialogLabel(plugin,query),plugin.search(query,matcher)}}return this._updateDialogLabel(null,query),searchFileList(query,this._filenameMatcher)},QuickNavigateDialog.prototype._resultsFormatterCallback=function(item,query){var formatter;return(formatter=currentPlugin?currentPlugin.resultsFormatter||defaultResultsFormatter:_filenameResultsFormatter)(item,query)},QuickNavigateDialog.prototype.setSearchFieldValue=function(prefix,initialString){initialString=(prefix=prefix||"")+(initialString=initialString||""),this.searchField.setText(initialString),this.$searchField[0].setSelectionRange(prefix.length,initialString.length)},QuickNavigateDialog.prototype._updateDialogLabel=function(plugin,query){var dialogLabel="",prefix;if(plugin&&plugin.label)dialogLabel=plugin.label;else switch(query.length>0?query.charAt(0):""){case":":dialogLabel=Strings.CMD_GOTO_LINE+"…";break;case"@":dialogLabel=Strings.CMD_GOTO_DEFINITION+"…";break;case"#":dialogLabel=Strings.CMD_GOTO_DEFINITION_PROJECT+"…";break;default:dialogLabel=""}$(".find-dialog-label",this.dialog).text(dialogLabel)},QuickNavigateDialog.prototype.showDialog=function(prefix,initialString){if(!this.isOpen){this.isOpen=!0;var curDoc=DocumentManager.getCurrentDocument();this._origDocPath=curDoc?curDoc.file.fullPath:null,curDoc?(this._origSelections=EditorManager.getCurrentFullEditor().getSelections(),this._origScrollPos=EditorManager.getCurrentFullEditor().getScrollPos()):(this._origSelections=null,this._origScrollPos=null);var searchBarHTML=`<div align='right'>\n <div id="indexing-spinner" class="indexing-group">\n <div class="spinner inline spin"></div>\n <div id="indexing-spinner-message" class="indexing-message">${Strings.FIND_IN_FILES_INDEXING}</div>\n </div>\n <input type='text' autocomplete='off' spellcheck="false" id='quickOpenSearch'\n placeholder='${Strings.CMD_QUICK_OPEN}…' style='width: 30em'>\n <span class='find-dialog-label'></span>\n </div>`;this.modalBar=new ModalBar(searchBarHTML,!0),this.modalBar.on("close",this._handleCloseBar),this.$searchField=$("input#quickOpenSearch"),this.$indexingSpinner=$("#indexing-spinner"),this.searchField=new QuickSearchField(this.$searchField,{maxResults:20,firstHighlightIndex:0,verticalAdjust:this.modalBar.getRoot().outerHeight(),resultProvider:this._filterCallback,formatter:this._resultsFormatterCallback,onCommit:this._handleItemSelect,onHighlight:this._handleItemHighlight}),fileListPromise=ProjectManager.getAllFiles(_filter,!0).done(function(files){this.$indexingSpinner.addClass("forced-hidden"),fileList=files,fileListPromise=null,this._filenameMatcher.reset()}.bind(this)),this.$searchField.focus(),this.setSearchFieldValue(prefix,initialString)}function _filter(file){return!LanguageManager.getLanguageForPath(file.fullPath).isBinary()||MainViewFactory.findSuitableFactoryForPath(file.fullPath)}},ProjectManager.on("projectOpen",function(){fileList=null}),MainViewManager.on("currentFileChange",function(event,newFile,newPaneId,oldFile,oldPaneId){if(!newFile)return CommandManager.get(Commands.NAVIGATE_GOTO_DEFINITION).setEnabled(!1),void CommandManager.get(Commands.NAVIGATE_GOTO_DEFINITION_PROJECT).setEnabled(!1);var newFilePath=newFile.fullPath,newLanguage=LanguageManager.getLanguageForPath(newFilePath),newLanguageId=newLanguage.getId();if(newLanguage.isBinary())return CommandManager.get(Commands.NAVIGATE_GOTO_DEFINITION).setEnabled(!1),void CommandManager.get(Commands.NAVIGATE_GOTO_DEFINITION_PROJECT).setEnabled(!1);if(_setMenuItemStateForLanguage(newLanguageId),DocumentManager.getDocumentForPath(newFilePath).done(function(newDoc){newDoc.off("languageChanged.quickFindDefinition"),newDoc.on("languageChanged.quickFindDefinition",function(){var changedLanguageId;_setMenuItemStateForLanguage(LanguageManager.getLanguageForPath(newDoc.file.fullPath).getId())})}).fail(function(err){console.error(err)}),oldFile){var oldFilePath=oldFile.fullPath;DocumentManager.getDocumentForPath(oldFilePath).done(function(oldDoc){oldDoc.off("languageChanged.quickFindDefinition")}).fail(function(err){err!==FileSystemError.UNSUPPORTED_ENCODING&&console.error(err)})}}),CommandManager.register(Strings.CMD_QUICK_OPEN,Commands.NAVIGATE_QUICK_OPEN,doFileSearch),CommandManager.register(Strings.CMD_GOTO_DEFINITION,Commands.NAVIGATE_GOTO_DEFINITION,doDefinitionSearch),CommandManager.register(Strings.CMD_GOTO_DEFINITION_PROJECT,Commands.NAVIGATE_GOTO_DEFINITION_PROJECT,doDefinitionSearchInProject),CommandManager.register(Strings.CMD_GOTO_LINE,Commands.NAVIGATE_GOTO_LINE,doGotoLine),exports.beginSearch=beginSearch,exports.addQuickOpenPlugin=addQuickOpenPlugin,exports.highlightMatch=highlightMatch,exports.SymbolKind=SymbolKind,exports.stringMatch=StringMatch.stringMatch,exports.SearchResult=StringMatch.SearchResult,exports.basicMatchSort=StringMatch.basicMatchSort,exports.multiFieldSort=StringMatch.multiFieldSort});