/
githubmirror
/
brackets
Обзор
Документация
Войти
/
githubmirror
/
brackets
Код
Запросы
0
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
src/extensions/samples/InlineImageViewer/main.js
134 строки
5 KB
Chen-Heng Chang
fix InlineImageViewer example extension (#9191)
30 окт 2016, 12:00
30 окт 2016, 12:00
4697485
Код
Авторство
О чём код?
/* * Copyright (c) 2012 - present Adobe Systems Incorporated. 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. * */ /*jslint regexp: true */ define(function (require, exports, module) { "use strict"; // Brackets modules var EditorManager = brackets.getModule("editor/EditorManager"), ExtensionUtils = brackets.getModule("utils/ExtensionUtils"), ProjectManager = brackets.getModule("project/ProjectManager"); // Local modules var InlineImageViewer = require("InlineImageViewer"); /** * Return the token string that is at the specified position. * * @param hostEditor {!Editor} editor * @param {!{line:Number, ch:Number}} pos * @return {String} token string at the specified position */ function _getStringAtPos(hostEditor, pos) { var token = hostEditor._codeMirror.getTokenAt(pos, true); // If the pos is at the beginning of a name, token will be the // preceding whitespace or dot. In that case, try the next pos. if (!/\S/.test(token.string) || token.string === ".") { token = hostEditor._codeMirror.getTokenAt({line: pos.line, ch: pos.ch + 1}, true); } if (token.type === "string") { var string = token.string; // Strip quotes var ch = string[0]; if (ch === "\"" || ch === "'") { string = string.substr(1); } ch = string[string.length - 1]; if (ch === "\"" || ch === "'") { string = string.substr(0, string.length - 1); } return string; } else { // Check for url(...); var line = hostEditor._codeMirror.getLine(pos.line); var match = /url\s*\(([^)]*)\)/.exec(line); if (match && match[1]) { // URLs are relative to the doc var docPath = hostEditor.document.file.fullPath; docPath = docPath.substr(0, docPath.lastIndexOf("/")); return docPath + "/" + match[1]; } } return ""; } /** * This function is registered with EditManager as an inline editor provider. It creates an inline editor * when cursor is on a JavaScript function name, find all functions that match the name * and show (one/all of them) in an inline editor. * * @param {!Editor} editor * @param {!{line:Number, ch:Number}} pos * @return {$.Promise} a promise that will be resolved with an InlineWidget * or null if we're not going to provide anything. */ function inlineImageViewerProvider(hostEditor, pos) { // Only provide image viewer if the selection is within a single line var sel = hostEditor.getSelection(false); if (sel.start.line !== sel.end.line) { return null; } // Always use the selection start for determining the image file name. The pos // parameter is usually the selection end. var fileName = _getStringAtPos(hostEditor, hostEditor.getSelection(false).start); if (fileName === "") { return null; } // Check for valid file extensions if (!/(\.png|\.jpg|\.jpeg|\.gif|\.webp|\.svg)$/i.test(fileName)) { return null; } // TODO: Check for relative path var projectPath = ProjectManager.getProjectRoot().fullPath; if (fileName.indexOf(projectPath) !== 0) { fileName = projectPath + fileName; } var result = new $.Deferred(); var imageViewer = new InlineImageViewer(fileName.substr(fileName.lastIndexOf("/")), fileName); imageViewer.load(hostEditor); result.resolve(imageViewer); return result.promise(); } ExtensionUtils.loadStyleSheet(module, "style.css"); EditorManager.registerInlineEditProvider(inlineImageViewerProvider); });