/
githubmirror
/
brackets
Обзор
Документация
Войти
/
githubmirror
/
brackets
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/features/FindReferencesManager.js
221 строка
8 KB
Sietse Brouwer
Public methods for closing Search Results and References bottom panel
20 янв 2020, 18:25
20 янв 2020, 18:25
75d3947
Код
Авторство
О чём код?
/* * Copyright (c) 2019 - present Adobe. All rights reserved. * * Permission is hereby granted, free of charge, to any person obtaining a * copy of this software and associated documentation files (the "Software"), * to deal in the Software without restriction, including without limitation * the rights to use, copy, modify, merge, publish, distribute, sublicense, * and/or sell copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER * DEALINGS IN THE SOFTWARE. * */ define(function (require, exports, module) { "use strict"; var AppInit = require("utils/AppInit"), CommandManager = require("command/CommandManager"), MainViewManager = require("view/MainViewManager"), LanguageManager = require("language/LanguageManager"), DocumentManager = require("document/DocumentManager"), Commands = require("command/Commands"), EditorManager = require("editor/EditorManager"), ProjectManager = require("project/ProjectManager"), ProviderRegistrationHandler = require("features/PriorityBasedRegistration").RegistrationHandler, SearchResultsView = require("search/SearchResultsView").SearchResultsView, SearchModel = require("search/SearchModel").SearchModel, Strings = require("strings"); var _providerRegistrationHandler = new ProviderRegistrationHandler(), registerFindReferencesProvider = _providerRegistrationHandler.registerProvider.bind( _providerRegistrationHandler ), removeFindReferencesProvider = _providerRegistrationHandler.removeProvider.bind(_providerRegistrationHandler); var searchModel = new SearchModel(), _resultsView; function _getReferences(provider, hostEditor, pos) { var result = new $.Deferred(); if(!provider) { return result.reject(); } provider.getReferences(hostEditor, pos) .done(function (rcvdObj) { searchModel.results = rcvdObj.results; searchModel.numFiles = rcvdObj.numFiles; searchModel.numMatches = rcvdObj.numMatches; searchModel.allResultsAvailable = true; searchModel.setQueryInfo({query: rcvdObj.queryInfo, caseSensitive: true, isRegExp: false}); result.resolve(); }).fail(function (){ result.reject(); }); return result.promise(); } function _openReferencesPanel() { var editor = EditorManager.getActiveEditor(), pos = editor ? editor.getCursorPos() : null, referencesPromise, result = new $.Deferred(), errorMsg = Strings.REFERENCES_NO_RESULTS, referencesProvider; var language = editor.getLanguageForSelection(), enabledProviders = _providerRegistrationHandler.getProvidersForLanguageId(language.getId()); enabledProviders.some(function (item, index) { if (item.provider.hasReferences(editor)) { referencesProvider = item.provider; return true; } }); referencesPromise = _getReferences(referencesProvider, editor, pos); // If one of them will provide a widget, show it inline once ready if (referencesPromise) { referencesPromise.done(function () { if(_resultsView) { _resultsView.open(); } }).fail(function () { if(_resultsView) { _resultsView.close(); } editor.displayErrorMessageAtCursor(errorMsg); result.reject(); }); } else { if(_resultsView) { _resultsView.close(); } editor.displayErrorMessageAtCursor(errorMsg); result.reject(); } return result.promise(); } /** * @private * Clears any previous search information, removing update listeners and clearing the model. */ function _clearSearch() { searchModel.clear(); } /** * @public * Closes the references panel */ function closeReferencesPanel() { if (_resultsView) { _resultsView.close(); } } function setMenuItemStateForLanguage(languageId) { CommandManager.get(Commands.CMD_FIND_ALL_REFERENCES).setEnabled(false); if (!languageId) { var editor = EditorManager.getActiveEditor(); if (editor) { languageId = LanguageManager.getLanguageForPath(editor.document.file._path).getId(); } } var enabledProviders = _providerRegistrationHandler.getProvidersForLanguageId(languageId), referencesProvider; enabledProviders.some(function (item, index) { if (item.provider.hasReferences()) { referencesProvider = item.provider; return true; } }); if (referencesProvider) { CommandManager.get(Commands.CMD_FIND_ALL_REFERENCES).setEnabled(true); } } MainViewManager.on("currentFileChange", function (event, newFile, newPaneId, oldFile, oldPaneId) { if (!newFile) { CommandManager.get(Commands.CMD_FIND_ALL_REFERENCES).setEnabled(false); return; } var newFilePath = newFile.fullPath, newLanguageId = LanguageManager.getLanguageForPath(newFilePath).getId(); setMenuItemStateForLanguage(newLanguageId); DocumentManager.getDocumentForPath(newFilePath) .done(function (newDoc) { newDoc.on("languageChanged.reference-in-files", function () { var changedLanguageId = LanguageManager.getLanguageForPath(newDoc.file.fullPath).getId(); setMenuItemStateForLanguage(changedLanguageId); }); }); if (!oldFile) { return; } var oldFilePath = oldFile.fullPath; DocumentManager.getDocumentForPath(oldFilePath) .done(function (oldDoc) { oldDoc.off("languageChanged.reference-in-files"); }); }); AppInit.htmlReady(function () { _resultsView = new SearchResultsView( searchModel, "reference-in-files-results", "reference-in-files.results", "reference" ); if(_resultsView) { _resultsView .on("close", function () { _clearSearch(); }) .on("getNextPage", function () { if (searchModel.hasResults()) { _resultsView.showNextPage(); } }) .on("getLastPage", function () { if (searchModel.hasResults()) { _resultsView.showLastPage(); } }); } }); // Initialize: register listeners ProjectManager.on("beforeProjectClose", function () { if (_resultsView) { _resultsView.close(); } }); CommandManager.register(Strings.FIND_ALL_REFERENCES, Commands.CMD_FIND_ALL_REFERENCES, _openReferencesPanel); CommandManager.get(Commands.CMD_FIND_ALL_REFERENCES).setEnabled(false); exports.registerFindReferencesProvider = registerFindReferencesProvider; exports.removeFindReferencesProvider = removeFindReferencesProvider; exports.setMenuItemStateForLanguage = setMenuItemStateForLanguage; exports.closeReferencesPanel = closeReferencesPanel; });