From 7e5e4c40e43ea42ab7ed1c7afdb153b770ba3ff5 Mon Sep 17 00:00:00 2001 From: Jeff Booher Date: Tue, 5 Aug 2014 11:22:46 -0700 Subject: [PATCH 001/182] eat tab and context menu keys --- src/utils/DropdownEventHandler.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/utils/DropdownEventHandler.js b/src/utils/DropdownEventHandler.js index 14c94bf3fe4..d4119b4280d 100644 --- a/src/utils/DropdownEventHandler.js +++ b/src/utils/DropdownEventHandler.js @@ -88,7 +88,9 @@ define(function (require, exports, module) { if (event.type === "keydown") { keyCode = event.keyCode; - if (keyCode === KeyEvent.DOM_VK_UP) { + if (keyCode === KeyEvent.DOM_VK_TAB || keyCode === KeyEvent.DOM_VK_CONTEXT_MENU) { + self.close(); + } else if (keyCode === KeyEvent.DOM_VK_UP) { self._rotateSelection(-1); } else if (keyCode === KeyEvent.DOM_VK_DOWN) { self._rotateSelection(1); From 49ccbc4d84eeb5ffbb45e16286aa1de871f1050e Mon Sep 17 00:00:00 2001 From: Jeff Booher Date: Tue, 5 Aug 2014 15:48:41 -0700 Subject: [PATCH 002/182] let context menu keys trickle up --- src/utils/DropdownEventHandler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/utils/DropdownEventHandler.js b/src/utils/DropdownEventHandler.js index d4119b4280d..69307cbbb4f 100644 --- a/src/utils/DropdownEventHandler.js +++ b/src/utils/DropdownEventHandler.js @@ -88,7 +88,7 @@ define(function (require, exports, module) { if (event.type === "keydown") { keyCode = event.keyCode; - if (keyCode === KeyEvent.DOM_VK_TAB || keyCode === KeyEvent.DOM_VK_CONTEXT_MENU) { + if (keyCode === KeyEvent.DOM_VK_TAB) { self.close(); } else if (keyCode === KeyEvent.DOM_VK_UP) { self._rotateSelection(-1); From a28ffd22e78c05752f3d53cbfbb33c65f8b99746 Mon Sep 17 00:00:00 2001 From: Jason San Jose Date: Tue, 12 Aug 2014 13:47:33 -0700 Subject: [PATCH 003/182] show LESS errors in console --- src/utils/ExtensionUtils.js | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/utils/ExtensionUtils.js b/src/utils/ExtensionUtils.js index 7e08c40e950..e0f7505966e 100644 --- a/src/utils/ExtensionUtils.js +++ b/src/utils/ExtensionUtils.js @@ -122,7 +122,12 @@ define(function (require, exports, module) { if (err) { result.reject(err); } else { - result.resolve(tree.toCSS()); + try { + result.resolve(tree.toCSS()); + } catch (err) { + console.error(err.filename + ":" + err.line + " " + err.message) + result.reject(err); + } } }); From ac326e648363d4ac5cf9912da526c70162901cac Mon Sep 17 00:00:00 2001 From: Jason San Jose Date: Tue, 12 Aug 2014 13:55:29 -0700 Subject: [PATCH 004/182] jslint errors --- src/utils/ExtensionUtils.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/utils/ExtensionUtils.js b/src/utils/ExtensionUtils.js index e0f7505966e..67298d60719 100644 --- a/src/utils/ExtensionUtils.js +++ b/src/utils/ExtensionUtils.js @@ -124,9 +124,9 @@ define(function (require, exports, module) { } else { try { result.resolve(tree.toCSS()); - } catch (err) { - console.error(err.filename + ":" + err.line + " " + err.message) - result.reject(err); + } catch (toCSSError) { + console.error(toCSSError.filename + ":" + toCSSError.line + " " + toCSSError.message); + result.reject(toCSSError); } } }); From 335562d11c8c93698dbd6ef65f6e1fe3fa1c4a63 Mon Sep 17 00:00:00 2001 From: Larz Date: Mon, 25 Aug 2014 21:14:33 -0700 Subject: [PATCH 005/182] Using box-shadow to stop links for shifting a few pixels when tabbed. --- src/styles/brackets_patterns_override.less | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/styles/brackets_patterns_override.less b/src/styles/brackets_patterns_override.less index 48c821106b8..c7ed5d9e92f 100644 --- a/src/styles/brackets_patterns_override.less +++ b/src/styles/brackets_patterns_override.less @@ -54,8 +54,7 @@ a:focus { .dark & { color: @dark-bc-text-link; - border: 1px solid @dark-bc-btn-border-focused; - box-shadow: none; + box-shadow: 0 0 0 1px @dark-bc-btn-border-focused; } } From 713525ad4295363fac938d5b377fd6552bf05d2a Mon Sep 17 00:00:00 2001 From: Marcel Gerber Date: Fri, 5 Sep 2014 02:27:03 +0200 Subject: [PATCH 006/182] Sort Working Files locale-aware --- src/file/FileUtils.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/file/FileUtils.js b/src/file/FileUtils.js index c9c08dabf9e..e36d7a1c491 100644 --- a/src/file/FileUtils.js +++ b/src/file/FileUtils.js @@ -459,14 +459,15 @@ define(function (require, exports, module) { function compareFilenames(filename1, filename2, extFirst) { var ext1 = getFileExtension(filename1), ext2 = getFileExtension(filename2), - cmpExt = ext1.toLocaleLowerCase().localeCompare(ext2.toLocaleLowerCase(), undefined, {numeric: true}), + lang = brackets.getLocale() === "root" ? "en-us" : brackets.getLocale(), + cmpExt = ext1.toLocaleLowerCase().localeCompare(ext2.toLocaleLowerCase(), lang, {numeric: true}), cmpNames; if (brackets.platform === "win") { filename1 = getFilenameWithoutExtension(filename1); filename2 = getFilenameWithoutExtension(filename2); } - cmpNames = filename1.toLocaleLowerCase().localeCompare(filename2.toLocaleLowerCase(), undefined, {numeric: true}); + cmpNames = filename1.toLocaleLowerCase().localeCompare(filename2.toLocaleLowerCase(), lang, {numeric: true}); return extFirst ? (cmpExt || cmpNames) : (cmpNames || cmpExt); } From e79f51eb835924770e1cf37f09a752f00ba91ff5 Mon Sep 17 00:00:00 2001 From: Marcel Gerber Date: Fri, 5 Sep 2014 21:13:48 +0200 Subject: [PATCH 007/182] Remove unnecessary locale check --- src/extensibility/ExtensionManagerView.js | 3 +++ src/file/FileUtils.js | 2 +- src/utils/LocalizationUtils.js | 3 +-- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/src/extensibility/ExtensionManagerView.js b/src/extensibility/ExtensionManagerView.js index 40ab53b8f29..d1def90d93b 100644 --- a/src/extensibility/ExtensionManagerView.js +++ b/src/extensibility/ExtensionManagerView.js @@ -230,6 +230,9 @@ define(function (require, exports, module) { context.translated = true; context.translatedLangs = info.metadata.i18n.map(function (value) { + if (value === "root") { + value = "en"; + } return { name: LocalizationUtils.getLocalizedLabel(value), locale: value }; }) .sort(function (lang1, lang2) { diff --git a/src/file/FileUtils.js b/src/file/FileUtils.js index e36d7a1c491..834d9422ce2 100644 --- a/src/file/FileUtils.js +++ b/src/file/FileUtils.js @@ -459,7 +459,7 @@ define(function (require, exports, module) { function compareFilenames(filename1, filename2, extFirst) { var ext1 = getFileExtension(filename1), ext2 = getFileExtension(filename2), - lang = brackets.getLocale() === "root" ? "en-us" : brackets.getLocale(), + lang = brackets.getLocale(), cmpExt = ext1.toLocaleLowerCase().localeCompare(ext2.toLocaleLowerCase(), lang, {numeric: true}), cmpNames; diff --git a/src/utils/LocalizationUtils.js b/src/utils/LocalizationUtils.js index 24e41d596bf..1526b3e29c0 100644 --- a/src/utils/LocalizationUtils.js +++ b/src/utils/LocalizationUtils.js @@ -26,7 +26,6 @@ /** * Utilities functions related to localization/i18n - * */ define(function (require, exports, module) { "use strict"; @@ -37,7 +36,7 @@ define(function (require, exports, module) { * Converts a language code to its written name, if possible. * If not possible, the language code is simply returned. * - * @param {string} locale The two-char language code + * @param {string} locale The two-char language code * @return {string} The language's name or the given language code */ function getLocalizedLabel(locale) { From 258535b58c69e5cedd4ea484123f3b0d678b6ca4 Mon Sep 17 00:00:00 2001 From: Marcel Gerber Date: Sat, 6 Sep 2014 00:00:04 +0200 Subject: [PATCH 008/182] Fix unit tests for non-english locales --- src/main.js | 27 ++++++++++++------------ src/utils/Global.js | 2 +- test/spec/CodeInspection-test.js | 3 +-- test/spec/FindReplace-test.js | 3 +-- test/spec/InstallExtensionDialog-test.js | 3 +-- 5 files changed, 18 insertions(+), 20 deletions(-) diff --git a/src/main.js b/src/main.js index 3250294d869..b1a56bef8d6 100644 --- a/src/main.js +++ b/src/main.js @@ -43,22 +43,23 @@ if (window.location.search.indexOf("testEnvironment") > -1) { require.config({ paths: { "preferences/PreferencesImpl": "../test/TestPreferencesImpl" - } + }, + locale: "en" // force English (US) + }); +} else { + /** + * hack for r.js optimization, move locale to another config call + * + * Use custom brackets property until CEF sets the correct navigator.language + * NOTE: When we change to navigator.language here, we also should change to + * navigator.language in ExtensionLoader (when making require contexts for each + * extension). + */ + require.config({ + locale: window.localStorage.getItem("locale") || (typeof (brackets) !== "undefined" ? brackets.app.language : navigator.language) }); } -/** - * hack for r.js optimization, move locale to another config call - * - * Use custom brackets property until CEF sets the correct navigator.language - * NOTE: When we change to navigator.language here, we also should change to - * navigator.language in ExtensionLoader (when making require contexts for each - * extension). - */ -require.config({ - locale: window.localStorage.getItem("locale") || (typeof (brackets) !== "undefined" ? brackets.app.language : navigator.language) -}); - define(function (require) { "use strict"; diff --git a/src/utils/Global.js b/src/utils/Global.js index 550c9d4b412..5901ac5c246 100644 --- a/src/utils/Global.js +++ b/src/utils/Global.js @@ -95,7 +95,7 @@ define(function (require, exports, module) { global.brackets.getLocale = function () { // By default use the locale that was determined in brackets.js - return global.localStorage.getItem("locale") || global.require.s.contexts._.config.locale; + return params.get("testEnvironment") ? "en" : (global.localStorage.getItem("locale") || global.require.s.contexts._.config.locale); }; global.brackets.setLocale = function (locale) { diff --git a/test/spec/CodeInspection-test.js b/test/spec/CodeInspection-test.js index 82e015523bd..92af1cdb520 100644 --- a/test/spec/CodeInspection-test.js +++ b/test/spec/CodeInspection-test.js @@ -30,7 +30,7 @@ define(function (require, exports, module) { var SpecRunnerUtils = require("spec/SpecRunnerUtils"), FileSystem = require("filesystem/FileSystem"), StringUtils = require("utils/StringUtils"), - Strings; + Strings = require("strings"); describe("Code Inspection", function () { this.category = "integration"; @@ -110,7 +110,6 @@ define(function (require, exports, module) { // Load module instances from brackets.test $ = testWindow.$; brackets = testWindow.brackets; - Strings = testWindow.require("strings"); CommandManager = brackets.test.CommandManager; DocumentManager = brackets.test.DocumentManager; EditorManager = brackets.test.EditorManager; diff --git a/test/spec/FindReplace-test.js b/test/spec/FindReplace-test.js index 1af03be4ae2..37fda2ae2be 100644 --- a/test/spec/FindReplace-test.js +++ b/test/spec/FindReplace-test.js @@ -33,7 +33,7 @@ define(function (require, exports, module) { KeyEvent = require("utils/KeyEvent"), SpecRunnerUtils = require("spec/SpecRunnerUtils"), StringUtils = require("utils/StringUtils"), - Strings, + Strings = require("strings"), _ = require("thirdparty/lodash"); var defaultContent = "/* Test comment */\n" + @@ -440,7 +440,6 @@ define(function (require, exports, module) { testWindow = w; // Load module instances from brackets.test - Strings = testWindow.require("strings"); twCommandManager = testWindow.brackets.test.CommandManager; twEditorManager = testWindow.brackets.test.EditorManager; twFindInFiles = testWindow.brackets.test.FindInFiles; diff --git a/test/spec/InstallExtensionDialog-test.js b/test/spec/InstallExtensionDialog-test.js index d353af34d25..35fe524e6b7 100644 --- a/test/spec/InstallExtensionDialog-test.js +++ b/test/spec/InstallExtensionDialog-test.js @@ -32,7 +32,7 @@ define(function (require, exports, module) { KeyEvent = require("utils/KeyEvent"), NativeApp = require("utils/NativeApp"), FileSystem, - Strings; + Strings = require("strings"); describe("Install Extension Dialog", function () { var testWindow, dialog, fields, goodInstaller, badInstaller, closed, @@ -43,7 +43,6 @@ define(function (require, exports, module) { beforeFirst(function () { SpecRunnerUtils.createTestWindowAndRun(this, function (w) { testWindow = w; - Strings = testWindow.require("strings"); FileSystem = testWindow.brackets.test.FileSystem; }); }); From 2b687110f669a57c5c5c448060fdfc150b780927 Mon Sep 17 00:00:00 2001 From: cheesypoof Date: Fri, 5 Sep 2014 15:52:14 -0700 Subject: [PATCH 009/182] Add status bar error indicator clear shortcut --- .../default/DebugCommands/ErrorNotification.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/extensions/default/DebugCommands/ErrorNotification.js b/src/extensions/default/DebugCommands/ErrorNotification.js index 5af4fafff41..2f940f6444d 100644 --- a/src/extensions/default/DebugCommands/ErrorNotification.js +++ b/src/extensions/default/DebugCommands/ErrorNotification.js @@ -49,6 +49,14 @@ define(function (require, exports, module) { } } + function handleClick(event) { + if (event.shiftKey) { + window.console.clear(); + } else { + showDeveloperTools(); + } + } + function refreshIndicator() { // never show 0 errors if (!_attached || errorCount === 0) { @@ -73,7 +81,7 @@ define(function (require, exports, module) { .attr("title", Strings.CMD_SHOW_DEV_TOOLS + "\u2026") .text(Strings.ERRORS + ": ") .append($span) - .on("click", showDeveloperTools) + .on("click", handleClick) .insertBefore("#status-bar .spinner"); } From 103906df6093e394b8926ad9363bc71ea2e41a3d Mon Sep 17 00:00:00 2001 From: RaymondLim Date: Sun, 7 Sep 2014 10:14:24 -0700 Subject: [PATCH 010/182] Get out of the infinite loop by allowing to scan backwards when the current token is a comment. --- src/language/CSSUtils.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/language/CSSUtils.js b/src/language/CSSUtils.js index 87d39c667a9..18954b3d5b7 100644 --- a/src/language/CSSUtils.js +++ b/src/language/CSSUtils.js @@ -1576,7 +1576,9 @@ define(function (require, exports, module) { } } - if (ctx.token.string !== "{" && ctx.token.string !== "}" && !TokenUtils.movePrevToken(ctx)) { + if ((ctx.token.type === "comment" || + (ctx.token.string !== "{" && ctx.token.string !== "}")) && + !TokenUtils.movePrevToken(ctx)) { break; } } From 37aeb2589ab51c82e221dd3370fca8cc7fcebe7d Mon Sep 17 00:00:00 2001 From: Marcel Gerber Date: Wed, 10 Sep 2014 00:20:11 +0200 Subject: [PATCH 011/182] Make "Show Errors in Status Bar" pref more solid --- src/extensions/default/DebugCommands/main.js | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/extensions/default/DebugCommands/main.js b/src/extensions/default/DebugCommands/main.js index 6d84c4d3431..e3be5bdad66 100644 --- a/src/extensions/default/DebugCommands/main.js +++ b/src/extensions/default/DebugCommands/main.js @@ -237,7 +237,7 @@ define(function (require, exports, module) { }); } - function toggleErrorNotification(bool) { + function toggleErrorNotification(bool, doNotSave) { var val; if (typeof bool === "undefined") { @@ -250,7 +250,9 @@ define(function (require, exports, module) { // update menu CommandManager.get(DEBUG_SHOW_ERRORS_IN_STATUS_BAR).setChecked(val); - PreferencesManager.set(DEBUG_SHOW_ERRORS_IN_STATUS_BAR, val); + if (!doNotSave) { + PreferencesManager.set(DEBUG_SHOW_ERRORS_IN_STATUS_BAR, val); + } } function handleOpenBracketsSource() { @@ -287,7 +289,11 @@ define(function (require, exports, module) { CommandManager.register(Strings.CMD_RESTART_NODE, DEBUG_RESTART_NODE, NodeDebugUtils.restartNode); enableRunTestsMenuItem(); - toggleErrorNotification(PreferencesManager.get(DEBUG_SHOW_ERRORS_IN_STATUS_BAR)); + toggleErrorNotification(PreferencesManager.get(DEBUG_SHOW_ERRORS_IN_STATUS_BAR), true); + + PreferencesManager.on("change", DEBUG_SHOW_ERRORS_IN_STATUS_BAR, function () { + toggleErrorNotification(PreferencesManager.get(DEBUG_SHOW_ERRORS_IN_STATUS_BAR), true); + }); /* * Debug menu From 8a29009e12321dd49d0cdfd7ba4c9408a17cc60c Mon Sep 17 00:00:00 2001 From: Marcel Gerber Date: Wed, 10 Sep 2014 13:57:04 +0200 Subject: [PATCH 012/182] Save pref only if it's different from the old pref --- src/extensions/default/DebugCommands/main.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/extensions/default/DebugCommands/main.js b/src/extensions/default/DebugCommands/main.js index e3be5bdad66..137d55582d5 100644 --- a/src/extensions/default/DebugCommands/main.js +++ b/src/extensions/default/DebugCommands/main.js @@ -237,11 +237,12 @@ define(function (require, exports, module) { }); } - function toggleErrorNotification(bool, doNotSave) { - var val; + function toggleErrorNotification(bool) { + var val, + oldPref = !!PreferencesManager.get(DEBUG_SHOW_ERRORS_IN_STATUS_BAR); - if (typeof bool === "undefined") { - val = !PreferencesManager.get(DEBUG_SHOW_ERRORS_IN_STATUS_BAR); + if (bool === undefined) { + val = !oldPref; } else { val = !!bool; } @@ -250,7 +251,7 @@ define(function (require, exports, module) { // update menu CommandManager.get(DEBUG_SHOW_ERRORS_IN_STATUS_BAR).setChecked(val); - if (!doNotSave) { + if (val !== oldPref) { PreferencesManager.set(DEBUG_SHOW_ERRORS_IN_STATUS_BAR, val); } } @@ -289,10 +290,10 @@ define(function (require, exports, module) { CommandManager.register(Strings.CMD_RESTART_NODE, DEBUG_RESTART_NODE, NodeDebugUtils.restartNode); enableRunTestsMenuItem(); - toggleErrorNotification(PreferencesManager.get(DEBUG_SHOW_ERRORS_IN_STATUS_BAR), true); + toggleErrorNotification(PreferencesManager.get(DEBUG_SHOW_ERRORS_IN_STATUS_BAR)); PreferencesManager.on("change", DEBUG_SHOW_ERRORS_IN_STATUS_BAR, function () { - toggleErrorNotification(PreferencesManager.get(DEBUG_SHOW_ERRORS_IN_STATUS_BAR), true); + toggleErrorNotification(PreferencesManager.get(DEBUG_SHOW_ERRORS_IN_STATUS_BAR)); }); /* From 97adc6f9161ada39958957c32bd855cbc8f62bc1 Mon Sep 17 00:00:00 2001 From: Jeff Booher Date: Wed, 10 Sep 2014 11:49:14 -0700 Subject: [PATCH 013/182] cleanup one test and workingset view extensibility --- src/project/WorkingSetView.js | 68 ++++++++++++++++- test/spec/DocumentCommandHandlers-test.js | 90 +---------------------- test/spec/WorkingSetView-test.js | 49 +++++++++++- 3 files changed, 114 insertions(+), 93 deletions(-) diff --git a/src/project/WorkingSetView.js b/src/project/WorkingSetView.js index 27df0826a10..ab8b10245a8 100644 --- a/src/project/WorkingSetView.js +++ b/src/project/WorkingSetView.js @@ -55,6 +55,20 @@ define(function (require, exports, module) { */ var _views = []; + /** + * Icon Providers + * @see {@link WorkingSetView#addIconProvider()} + * @private + */ + var _iconProviders = []; + + /** + * Icon Providers + * @see {@link WorkingSetView#addClassProvider()} + * @private + */ + var _classProviders = []; + /** * Context Menu * @private @@ -609,12 +623,26 @@ define(function (require, exports, module) { // Create new list item with a link var $link = $("").html(ViewUtils.getFileEntryDisplay(file)); + + _iconProviders.forEach(function (provider) { + var icon = provider({fullPath: file.fullPath, + name: file.name, + isFile: file.isFile}); + if (icon) { + $link.prepend($(icon)); + } + }); + var $newItem = $("
  • ") .append($link) .data(_FILE_KEY, file); this.$openFilesContainer.find("ul").append($newItem); + _classProviders.forEach(function (provider) { + $newItem.addClass(provider(file)); + }); + // Update the listItem's apperance this._updateFileStatusIcon($newItem, _isOpenAndDirty(file), false); _updateListItemSelection($newItem, selectedFile); @@ -903,14 +931,48 @@ define(function (require, exports, module) { /** * Refreshes all Pane View List Views + * @param {boolean=} reconstruct - completely rebuilds the view list */ - function refresh() { - _.forEach(_views, function (workingSetListView) { - workingSetListView._redraw(); + function refresh(reconstruct) { + _.forEach(_views, function (view) { + if (reconstruct) { + view._rebuildViewList(); + } else { + view._redraw(); + } }); } + /** + * adds an icon provider to the view. + * Icon providers are called when a working set item is created + * @param {!function(!File):?string} callback - the function to call for each item + * The callback can return a string that contains and image tag to place before the filename + * if a falsy value is returned then nothing is prepended to the list item + */ + function addIconProvider(callback) { + _iconProviders.push(callback); + // build all views so the provider has a chance to add icons + // to all items that have already been created + refresh(true); + } + + /** + * adds a list item class provider to the view. + * Class providers are called when a working set item is created + * @param {!function(!File):?string} callback - the function to call for each item + * The callback can return a string that contains the class (or classes) to add to the list item + */ + function addClassProvider(callback) { + _classProviders.push(callback); + // build all views so the provider has a chance to style + // all items that have already been created + refresh(true); + } + // Public API exports.createWorkingSetViewForPane = createWorkingSetViewForPane; exports.refresh = refresh; + exports.addIconProvider = addIconProvider; + exports.addClassProvider = addClassProvider; }); diff --git a/test/spec/DocumentCommandHandlers-test.js b/test/spec/DocumentCommandHandlers-test.js index 1710e223da6..ceca0a93437 100644 --- a/test/spec/DocumentCommandHandlers-test.js +++ b/test/spec/DocumentCommandHandlers-test.js @@ -1105,96 +1105,8 @@ define(function (require, exports, module) { }); }); - -/* - TODO: Disabled until image support is added for splitview - - describe("Opens image file and validates EditorManager APIs", function () { - it("should return null after opening an image", function () { - var path = testPath + "/couz.png", - promise; - runs(function () { - promise = CommandManager.execute(Commands.FILE_OPEN, { fullPath: path }); - waitsForDone(promise, Commands.FILE_OPEN); - }); - - runs(function () { - expect(EditorManager.getActiveEditor()).toEqual(null); - expect(EditorManager.getCurrentFullEditor()).toEqual(null); - expect(EditorManager.getFocusedEditor()).toEqual(null); - expect(MainViewManager.getCurrentlyViewedPath(MainViewManager.ACTIVE_PANE)).toEqual(path); - var d = DocumentManager.getCurrentDocument(); - expect(d).toEqual(null); - }); - }); - }); - - describe("Open image file while a text file is open", function () { - it("should fire currentDocumentChange and activeEditorChange events", function () { - var promise, - docChangeListener = jasmine.createSpy(), - activeEditorChangeListener = jasmine.createSpy(); + // NOTE: Image tests moved to MainViewFactory-test.js - runs(function () { - _$(DocumentManager).on("currentDocumentChange", docChangeListener); - _$(EditorManager).on("activeEditorChange", activeEditorChangeListener); - - - promise = CommandManager.execute(Commands.FILE_OPEN, { fullPath: testPath + "/test.js" }); - waitsForDone(promise, Commands.FILE_OPEN); - }); - runs(function () { - expect(docChangeListener.callCount).toBe(1); - expect(activeEditorChangeListener.callCount).toBe(1); - }); - - runs(function () { - promise = CommandManager.execute(Commands.FILE_OPEN, { fullPath: testPath + "/couz.png" }); - waitsForDone(promise, Commands.FILE_OPEN); - }); - runs(function () { - expect(docChangeListener.callCount).toBe(2); - expect(activeEditorChangeListener.callCount).toBe(2); - _$(DocumentManager).off("currentDocumentChange", docChangeListener); - _$(EditorManager).off("activeEditorChange", activeEditorChangeListener); - }); - }); - }); - - describe("Open image file while neither text editor nor image file is open", function () { - it("should NOT fire currentDocumentChange and activeEditorChange events", function () { - - var promise, - docChangeListener = jasmine.createSpy(), - activeEditorChangeListener = jasmine.createSpy(); - - - runs(function () { - _$(DocumentManager).on("currentDocumentChange", docChangeListener); - _$(EditorManager).on("activeEditorChange", activeEditorChangeListener); - - promise = CommandManager.execute(Commands.FILE_OPEN, { fullPath: testPath + "/couz.png" }); - waitsForDone(promise, Commands.FILE_OPEN); - }); - runs(function () { - expect(docChangeListener.callCount).toBe(0); - expect(activeEditorChangeListener.callCount).toBe(0); - }); - - runs(function () { - promise = CommandManager.execute(Commands.FILE_OPEN, { fullPath: testPath + "/couz2.png" }); - waitsForDone(promise, Commands.FILE_OPEN); - }); - runs(function () { - expect(docChangeListener.callCount).toBe(0); - expect(activeEditorChangeListener.callCount).toBe(0); - _$(DocumentManager).off("currentDocumentChange", docChangeListener); - _$(EditorManager).off("activeEditorChange", activeEditorChangeListener); - }); - - }); - }); -*/ describe("Open a text file while a text file is open", function () { it("should fire currentDocumentChange and activeEditorChange events", function () { diff --git a/test/spec/WorkingSetView-test.js b/test/spec/WorkingSetView-test.js index 7ec64cf8263..c2fb89f3c35 100644 --- a/test/spec/WorkingSetView-test.js +++ b/test/spec/WorkingSetView-test.js @@ -33,6 +33,7 @@ define(function (require, exports, module) { DocumentManager, // Load from brackets.test FileViewController, // Load from brackets.test MainViewManager, // Load from brackets.test + WorkingSetView, SpecRunnerUtils = require("spec/SpecRunnerUtils"); @@ -72,7 +73,8 @@ define(function (require, exports, module) { DocumentManager = testWindow.brackets.test.DocumentManager; FileViewController = testWindow.brackets.test.FileViewController; MainViewManager = testWindow.brackets.test.MainViewManager; - + WorkingSetView = testWindow.brackets.test.WorkingSetView; + // Open a directory if (loadProject) { SpecRunnerUtils.loadProjectInTestWindow(testPath); @@ -329,6 +331,51 @@ define(function (require, exports, module) { }); }); }); + + it("should callback for icons", function () { + runs(function () { + function iconProvider(file) { + return ""; + } + + WorkingSetView.addIconProvider(iconProvider); + + runs(function () { + // Collect all icon filenames used + var $list = testWindow.$(".open-files-container > ul"); + var icons = $list.find(".icon").map(function () { + return $(this).attr("src"); + }).toArray(); + + // All directory names should be unique + expect(icons.length).toBe(2); + expect(icons[0]).toBe("file_one.js.jpg"); + expect(icons[1]).toBe("file_two.js.jpg"); + }); + }); + }); + it("should callback for class", function () { + runs(function () { + + var classes = ["one", "two"]; + + function classProvider(file) { + return classes.pop(); + } + + WorkingSetView.addClassProvider(classProvider); + + runs(function () { + // Collect all icon filenames used + var $list = testWindow.$(".open-files-container > li"), + test = ["one", "two"]; + + $list.each(function (number, el) { + expect($(el).hasClass(test.pop())).toBeTruthy(); + }); + }); + }); + }); }); }); \ No newline at end of file From e408f21a39c4399d894f1d6f49b7963bddd303b1 Mon Sep 17 00:00:00 2001 From: Jeff Booher Date: Wed, 10 Sep 2014 11:55:08 -0700 Subject: [PATCH 014/182] mutable file object for wsv item class --- src/project/WorkingSetView.js | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/src/project/WorkingSetView.js b/src/project/WorkingSetView.js index ab8b10245a8..581b4dda68a 100644 --- a/src/project/WorkingSetView.js +++ b/src/project/WorkingSetView.js @@ -619,15 +619,16 @@ define(function (require, exports, module) { */ WorkingSetView.prototype._createNewListItem = function (file) { var self = this, - selectedFile = MainViewManager.getCurrentlyViewedFile(this.paneId); + selectedFile = MainViewManager.getCurrentlyViewedFile(this.paneId), + data = {fullPath: file.fullPath, + name: file.name, + isFile: file.isFile}; // Create new list item with a link var $link = $("").html(ViewUtils.getFileEntryDisplay(file)); _iconProviders.forEach(function (provider) { - var icon = provider({fullPath: file.fullPath, - name: file.name, - isFile: file.isFile}); + var icon = provider(data); if (icon) { $link.prepend($(icon)); } @@ -640,7 +641,7 @@ define(function (require, exports, module) { this.$openFilesContainer.find("ul").append($newItem); _classProviders.forEach(function (provider) { - $newItem.addClass(provider(file)); + $newItem.addClass(provider(data)); }); // Update the listItem's apperance @@ -946,7 +947,7 @@ define(function (require, exports, module) { /** * adds an icon provider to the view. * Icon providers are called when a working set item is created - * @param {!function(!File):?string} callback - the function to call for each item + * @param {!function(!{fullPath:string, name:string, isFile:boolean}):?string} callback - the function to call for each item * The callback can return a string that contains and image tag to place before the filename * if a falsy value is returned then nothing is prepended to the list item */ @@ -960,7 +961,7 @@ define(function (require, exports, module) { /** * adds a list item class provider to the view. * Class providers are called when a working set item is created - * @param {!function(!File):?string} callback - the function to call for each item + * @param {!function(!{fullPath:string, name:string, isFile:boolean}):?string} callback - the function to call for each item * The callback can return a string that contains the class (or classes) to add to the list item */ function addClassProvider(callback) { From 502b5dff2fbd71bfca44881b323e2d956be62f7b Mon Sep 17 00:00:00 2001 From: Jeff Booher Date: Wed, 10 Sep 2014 11:58:23 -0700 Subject: [PATCH 015/182] fix comment --- test/spec/WorkingSetView-test.js | 1 - 1 file changed, 1 deletion(-) diff --git a/test/spec/WorkingSetView-test.js b/test/spec/WorkingSetView-test.js index c2fb89f3c35..55ba53ff950 100644 --- a/test/spec/WorkingSetView-test.js +++ b/test/spec/WorkingSetView-test.js @@ -367,7 +367,6 @@ define(function (require, exports, module) { WorkingSetView.addClassProvider(classProvider); runs(function () { - // Collect all icon filenames used var $list = testWindow.$(".open-files-container > li"), test = ["one", "two"]; From 79b3eae88ed882666bf8a1fcff46963b7418ec52 Mon Sep 17 00:00:00 2001 From: Jeff Booher Date: Wed, 10 Sep 2014 12:00:19 -0700 Subject: [PATCH 016/182] rework classes array --- test/spec/WorkingSetView-test.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/test/spec/WorkingSetView-test.js b/test/spec/WorkingSetView-test.js index 55ba53ff950..f79b29bcca6 100644 --- a/test/spec/WorkingSetView-test.js +++ b/test/spec/WorkingSetView-test.js @@ -358,7 +358,9 @@ define(function (require, exports, module) { it("should callback for class", function () { runs(function () { - var classes = ["one", "two"]; + var master = ["one", "two"], + classes = master.slice(0); + function classProvider(file) { return classes.pop(); @@ -368,7 +370,7 @@ define(function (require, exports, module) { runs(function () { var $list = testWindow.$(".open-files-container > li"), - test = ["one", "two"]; + test = master.slice(0); $list.each(function (number, el) { expect($(el).hasClass(test.pop())).toBeTruthy(); From c5079ff39d7ca0a6ed8cdf70c2abbb26a5151274 Mon Sep 17 00:00:00 2001 From: Miguel Castillo Date: Thu, 11 Sep 2014 10:11:55 -0400 Subject: [PATCH 017/182] Removing cursor !important so allow themes easily override cursor colors --- src/styles/brackets_theme_default.less | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/styles/brackets_theme_default.less b/src/styles/brackets_theme_default.less index de63a3d4f84..3b233addcf6 100644 --- a/src/styles/brackets_theme_default.less +++ b/src/styles/brackets_theme_default.less @@ -145,7 +145,7 @@ // border: none !important; // to make an I-cursor, use something like this: - border-left: 1px solid black !important; + border-left: 1px solid black; } From b639321dec45648232fe58a3801008930b5cfd72 Mon Sep 17 00:00:00 2001 From: Jeff Booher Date: Thu, 11 Sep 2014 09:09:00 -0700 Subject: [PATCH 018/182] allow refresh to update the class list without rebuilding the entire view --- src/project/WorkingSetView.js | 23 +++++++++++++++++++++++ test/spec/WorkingSetView-test.js | 28 ++++++++++++++++++++++++++++ 2 files changed, 51 insertions(+) diff --git a/src/project/WorkingSetView.js b/src/project/WorkingSetView.js index 581b4dda68a..3a17004b086 100644 --- a/src/project/WorkingSetView.js +++ b/src/project/WorkingSetView.js @@ -354,6 +354,8 @@ define(function (require, exports, module) { this.$workingSetListViewHeader.show(); this._checkForDuplicatesInWorkingTree(); } + + this._updateItemClasses(); this._adjustForScrollbars(); this._fireSelectionChanged(); this.updateOptionsButton(); @@ -611,6 +613,27 @@ define(function (require, exports, module) { } }; + /** + * Updates the working set item class list + * @private + */ + WorkingSetView.prototype._updateItemClasses = function () { + if (_classProviders.length > 0) { + this.$openFilesContainer.find("ul > li").each(function () { + var $li = $(this), + file = $li.data(_FILE_KEY), + data = {fullPath: file.fullPath, + name: file.name, + isFile: file.isFile}; + + $li.removeAttr("class"); + _classProviders.forEach(function (provider) { + $li.addClass(provider(data)); + }); + }); + } + }; + /** * Builds the UI for a new list item and inserts in into the end of the list * @private diff --git a/test/spec/WorkingSetView-test.js b/test/spec/WorkingSetView-test.js index f79b29bcca6..84873c882c7 100644 --- a/test/spec/WorkingSetView-test.js +++ b/test/spec/WorkingSetView-test.js @@ -378,5 +378,33 @@ define(function (require, exports, module) { }); }); }); + + it("should allow refresh to be used to update the class list", function () { + runs(function () { + + function classProvider(file) { + return "one"; + } + + WorkingSetView.addClassProvider(classProvider); + + var master = ["three", "four"], + classes = master.slice(0); + + + WorkingSetView.refresh(); + + runs(function () { + var $list = testWindow.$(".open-files-container > li"), + test = master.slice(0); + + $list.each(function (number, el) { + expect($(el).hasClass(test.pop())).toBeTruthy(); + expect($(el).hasClass("one")).toBeFalsy(); + }); + }); + }); + }); + }); }); \ No newline at end of file From 4693413877cacb9e9034552d34963ee9852f7572 Mon Sep 17 00:00:00 2001 From: Jeff Booher Date: Thu, 11 Sep 2014 09:16:48 -0700 Subject: [PATCH 019/182] update doc to support jQuery for IconProvider --- src/project/WorkingSetView.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/project/WorkingSetView.js b/src/project/WorkingSetView.js index 3a17004b086..3b2c4a09cb8 100644 --- a/src/project/WorkingSetView.js +++ b/src/project/WorkingSetView.js @@ -970,8 +970,8 @@ define(function (require, exports, module) { /** * adds an icon provider to the view. * Icon providers are called when a working set item is created - * @param {!function(!{fullPath:string, name:string, isFile:boolean}):?string} callback - the function to call for each item - * The callback can return a string that contains and image tag to place before the filename + * @param {!function(!{fullPath:string, name:string, isFile:boolean}):?string|jQuery} callback - the function to call for each item + * The callback can return a string that contains and image tag , tag or a jQuery node to place before the filename * if a falsy value is returned then nothing is prepended to the list item */ function addIconProvider(callback) { From 493815567301fbe286d57d18821fdb98881781f9 Mon Sep 17 00:00:00 2001 From: Jeff Booher Date: Thu, 11 Sep 2014 09:21:17 -0700 Subject: [PATCH 020/182] update comment --- src/project/WorkingSetView.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/project/WorkingSetView.js b/src/project/WorkingSetView.js index 3b2c4a09cb8..6ab7840acbc 100644 --- a/src/project/WorkingSetView.js +++ b/src/project/WorkingSetView.js @@ -971,7 +971,8 @@ define(function (require, exports, module) { * adds an icon provider to the view. * Icon providers are called when a working set item is created * @param {!function(!{fullPath:string, name:string, isFile:boolean}):?string|jQuery} callback - the function to call for each item - * The callback can return a string that contains and image tag , tag or a jQuery node to place before the filename + * The callback can return a string that contains the html to place before the link of each WSV item. + * The return value can be a string or a jQuery node. * if a falsy value is returned then nothing is prepended to the list item */ function addIconProvider(callback) { From 27ef543e3aea2aaa9a95817b17dcb10214c205c1 Mon Sep 17 00:00:00 2001 From: Jeff Booher Date: Thu, 11 Sep 2014 09:22:59 -0700 Subject: [PATCH 021/182] update comment again --- src/project/WorkingSetView.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/project/WorkingSetView.js b/src/project/WorkingSetView.js index 6ab7840acbc..67e3295c667 100644 --- a/src/project/WorkingSetView.js +++ b/src/project/WorkingSetView.js @@ -971,8 +971,8 @@ define(function (require, exports, module) { * adds an icon provider to the view. * Icon providers are called when a working set item is created * @param {!function(!{fullPath:string, name:string, isFile:boolean}):?string|jQuery} callback - the function to call for each item - * The callback can return a string that contains the html to place before the link of each WSV item. - * The return value can be a string or a jQuery node. + * The callback must return the html to place before the link of each WSV item. + * The return value can be a string representing the HTML, a jQuery object or undefined. * if a falsy value is returned then nothing is prepended to the list item */ function addIconProvider(callback) { From 4eec543014bfe13784b334016a98a8d7cdc1d60a Mon Sep 17 00:00:00 2001 From: RaymondLim Date: Thu, 11 Sep 2014 15:08:15 -0700 Subject: [PATCH 022/182] Rearrange the logic for clarity and add a new unit test. --- src/language/CSSUtils.js | 13 +++++++------ test/spec/CSSUtils-test.js | 9 +++++++++ 2 files changed, 16 insertions(+), 6 deletions(-) diff --git a/src/language/CSSUtils.js b/src/language/CSSUtils.js index 18954b3d5b7..1ba07ded2c2 100644 --- a/src/language/CSSUtils.js +++ b/src/language/CSSUtils.js @@ -1573,13 +1573,14 @@ define(function (require, exports, module) { if (!isPreprocessorDoc && _hasNonWhitespace(ctx.token.string)) { foundChars = true; } + if (!TokenUtils.movePrevToken(ctx)) { + break; + } + } + } else { + if (!TokenUtils.movePrevToken(ctx)) { + break; } - } - - if ((ctx.token.type === "comment" || - (ctx.token.string !== "{" && ctx.token.string !== "}")) && - !TokenUtils.movePrevToken(ctx)) { - break; } } diff --git a/test/spec/CSSUtils-test.js b/test/spec/CSSUtils-test.js index b3c20a58551..14c1bc560a2 100644 --- a/test/spec/CSSUtils-test.js +++ b/test/spec/CSSUtils-test.js @@ -396,6 +396,15 @@ define(function (require, exports, module) { expect(selector).toEqual(""); }); + // https://github.com/adobe/brackets/issues/9002 + it("should not hang when the cursor is after '{' or '}' inside comments", function () { + var selector = CSSUtils.findSelectorAtDocumentPos(editor, {line: 45, ch: 6}); // after { + expect(selector).toEqual(""); + + selector = CSSUtils.findSelectorAtDocumentPos(editor, {line: 45, ch: 23}); // after } + expect(selector).toEqual(""); + }); + it("should find rules adjacent to comments", function () { var selector = CSSUtils.findSelectorAtDocumentPos(editor, {line: 47, ch: 4}); expect(selector).toEqual("div"); From c9326d277103a879062a759169116b7f0d107a0f Mon Sep 17 00:00:00 2001 From: Jeff Booher Date: Fri, 12 Sep 2014 09:57:39 -0700 Subject: [PATCH 023/182] remove unused var in test --- test/spec/WorkingSetView-test.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/test/spec/WorkingSetView-test.js b/test/spec/WorkingSetView-test.js index 84873c882c7..c6d83aab7fe 100644 --- a/test/spec/WorkingSetView-test.js +++ b/test/spec/WorkingSetView-test.js @@ -388,9 +388,7 @@ define(function (require, exports, module) { WorkingSetView.addClassProvider(classProvider); - var master = ["three", "four"], - classes = master.slice(0); - + var master = ["three", "four"]; WorkingSetView.refresh(); From fe3852bf75d7509188763b59d3dc6858b8a0a60f Mon Sep 17 00:00:00 2001 From: Marcel Gerber Date: Sat, 13 Sep 2014 10:54:48 +0200 Subject: [PATCH 024/182] Enable UrlCodeHints for LESS/SCSS --- src/extensions/default/UrlCodeHints/main.js | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/src/extensions/default/UrlCodeHints/main.js b/src/extensions/default/UrlCodeHints/main.js index 4e4178803b3..784d9f58259 100644 --- a/src/extensions/default/UrlCodeHints/main.js +++ b/src/extensions/default/UrlCodeHints/main.js @@ -43,7 +43,8 @@ define(function (require, exports, module) { urlHints, data, - htmlAttrs; + htmlAttrs, + styleModes = ["css", "text/x-less", "text/x-scss"]; /** * @constructor @@ -264,7 +265,7 @@ define(function (require, exports, module) { var mode = editor.getModeForSelection(); if (mode === "html") { return this.hasHtmlHints(editor, implicitChar); - } else if (mode === "css") { + } else if (styleModes.indexOf(mode) > -1) { return this.hasCssHints(editor, implicitChar); } @@ -424,7 +425,7 @@ define(function (require, exports, module) { } this.info = tagInfo; - } else if (mode === "css") { + } else if (styleModes.indexOf(mode) > -1) { this.info = CSSUtils.getInfoAtPos(this.editor, cursor); var context = this.info.context; @@ -540,7 +541,7 @@ define(function (require, exports, module) { if (mode === "html") { return this.insertHtmlHint(completion); - } else if (mode === "css") { + } else if (styleModes.indexOf(mode) > -1) { return this.insertCssHint(completion); } @@ -813,7 +814,7 @@ define(function (require, exports, module) { htmlAttrs = data.htmlAttrs; urlHints = new UrlCodeHints(); - CodeHintManager.registerHintProvider(urlHints, ["css", "html"], 5); + CodeHintManager.registerHintProvider(urlHints, ["css", "html", "less", "scss"], 5); FileSystem.on("change", _clearCachedHints); FileSystem.on("rename", _clearCachedHints); From 645352e7c23f746e78404ffa6855cc6abb77afe7 Mon Sep 17 00:00:00 2001 From: Mohammad Yaghobi Date: Mon, 15 Sep 2014 00:14:23 +0430 Subject: [PATCH 025/182] Update Persian translation --- src/nls/fa-ir/strings.js | 145 ++++++++++++++++++++++++++------------- 1 file changed, 98 insertions(+), 47 deletions(-) diff --git a/src/nls/fa-ir/strings.js b/src/nls/fa-ir/strings.js index 8c43d594263..f4a6169327c 100644 --- a/src/nls/fa-ir/strings.js +++ b/src/nls/fa-ir/strings.js @@ -1,25 +1,25 @@ /* -* Copyright (c) 2012 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. -* -*/ + * Copyright (c) 2012 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 vars: true, plusplus: true, devel: true, nomen: true, indent: 4, maxerr: 50 */ /*global define */ @@ -39,9 +39,12 @@ define({ "NO_MODIFICATION_ALLOWED_ERR_FILE" : "دسترسی های تعریف شده برای شما اجازه تغییرات را نمی دهند.", "CONTENTS_MODIFIED_ERR" : "این پرونده قبل خارج از محیط این نرم افزار ویرایش شده است.", "UNSUPPORTED_ENCODING_ERR" : "{APP_NAME} فعلا تنها از پرونده ها با ساختار یونیکدی UTF-8 پشتیبانی می کند.", + "UNSUPPORTED_FILE_TYPE_ERR" : "از این نوع فایل پشتیبانی نمی شود.", "FILE_EXISTS_ERR" : "پرونده یا پوشه مد نظر موجود می باشد.", "FILE" : "پرونده", + "FILE_TITLE" : "پرونده", "DIRECTORY" : "پوشه", + "DIRECTORY_TITLE" : "پوشه", "DIRECTORY_NAMES_LEDE" : "نام های پوشه", "FILENAMES_LEDE" : "نام های پرونده", "FILENAME" : "نام پرونده", @@ -69,6 +72,7 @@ define({ "INVALID_FILENAME_MESSAGE" : "نام پرونده نمی تواند شامل مقادیر زیر باشد: {0} و همچنین نمی توانید از عبارات مورد استفاده نرم افزار استفاده نمایید.", "ENTRY_WITH_SAME_NAME_EXISTS" : "پوشه یا پروندهی با نام {0} هم اکنون موجود است.", "ERROR_CREATING_FILE_TITLE" : "خطا در ایجاد {0}", + "ERROR_CREATING_FILE" : "خطا در هنگام ایجاد {0} {1}. {2}", // Application preferences corrupt error strings "ERROR_PREFS_CORRUPT_TITLE" : "خطا در خواندن تنظیمات", @@ -119,6 +123,7 @@ define({ // Generic dialog/button labels + "DONE" : "انجام", "OK" : "تائید", "CANCEL" : "لغو", "DONT_SAVE" : "ذخیره نکن", @@ -130,11 +135,12 @@ define({ "BUTTON_NO" : "خیر", // Find, Replace, Find in Files - "FIND_RESULT_COUNT" : "{0} نتیجه", - "FIND_RESULT_COUNT_SINGLE" : "1 نتیجه", + "FIND_MATCH_INDEX" : "{0} از {1}", "FIND_NO_RESULTS" : "بدون نتیجه", + "FIND_QUERY_PLACEHOLDER" : "جستجو\u2026", "REPLACE_PLACEHOLDER" : "جایگزینی با\u2026", "BUTTON_REPLACE_ALL" : "همه\u2026", + "BUTTON_REPLACE_ALL_IN_FILES" : "جایگزینی\u2026", "BUTTON_REPLACE" : "جایگزینی", "BUTTON_NEXT" : "\u25B6", "BUTTON_PREV" : "\u25C0", @@ -142,6 +148,9 @@ define({ "BUTTON_PREV_HINT" : "مورد قبلی", "BUTTON_CASESENSITIVE_HINT" : "مورد تطبیق یافته", "BUTTON_REGEXP_HINT" : "عبارت منظم", + "REPLACE_WITHOUT_UNDO_WARNING_TITLE": "جایگزینی بدون امکان بازگشت به قبل", + "REPLACE_WITHOUT_UNDO_WARNING" : "بدلیل اعمال تغییر در تعداد {0} پرونده, {APP_NAME} پرونده های باز نشده را نیز ویرایش و تغییر خواهد داد. بهمین جهت مقادیر تغییر یافته(جایگزین شده) غیر قابل بازگشت خواهند بود.", + "BUTTON_REPLACE_WITHOUT_UNDO" : "جایگزینی بدون بازگشت", "OPEN_FILE" : "باز کردن پرونده", "SAVE_FILE_AS" : "ذخیره پرونده", "CHOOSE_FOLDER" : "انتخاب پوشه", @@ -149,15 +158,14 @@ define({ "NO_UPDATE_TITLE" : "بروز هستید!", "NO_UPDATE_MESSAGE" : "شما درحال استفاده از آخرین نسخه براکتس هستید.", - // Replace All (in single file) - "FIND_REPLACE_TITLE_PART1" : "جایگزینی \"", - "FIND_REPLACE_TITLE_PART2" : "\" با \"", - "FIND_REPLACE_TITLE_PART3" : "\" — {2} {0} {1}", + // Find and Replace + "FIND_REPLACE_TITLE_LABEL" : "جایگزینی", + "FIND_REPLACE_TITLE_WITH" : "با", + "FIND_TITLE_LABEL" : "جستجو", + "FIND_TITLE_SUMMARY" : "— {0} {1} {2} در {3}", // Find in Files - "FIND_IN_FILES_TITLE_PART1" : "\"", - "FIND_IN_FILES_TITLE_PART2" : "\" پیدا شد", - "FIND_IN_FILES_TITLE_PART3" : "— {0} {1} {2} در {3} {4}", + "FIND_NUM_FILES" : "{0} {1}", "FIND_IN_FILES_SCOPED" : "در {0}", "FIND_IN_FILES_NO_SCOPE" : "در پروژ]", "FIND_IN_FILES_ZERO_FILES" : "فیلترسازی تمامی پرونده های منع شده {0}", @@ -169,16 +177,20 @@ define({ "FIND_IN_FILES_PAGING" : "{0}—{1}", "FIND_IN_FILES_FILE_PATH" : "پرونده: {0}", "FIND_IN_FILES_EXPAND_COLLAPSE" : "جهت بازکردن/بستن منوها کلید Ctrl/Cmd را گرفته و کلیک کنید.", + "REPLACE_IN_FILES_ERRORS_TITLE" : "خطاهای جایگزینی مقادیر", + "REPLACE_IN_FILES_ERRORS" : "پرونده های زیر قابل ویرایش نبودن. علت می تواند از قابل نوشتن نبودن پرونده های و یا تغییر آن های بعد از جستجو باشد.", "ERROR_FETCHING_UPDATE_INFO_TITLE" : "درحال بروزرسانی اطلاعات خطا", "ERROR_FETCHING_UPDATE_INFO_MSG" : "بروز خطا در هنگام دستیابی به آخرین اطلاعات بروزرسانی از سرویس دهنده. اطمینان حاصل کنید که به اینترنت متصل بوده و دوباره تلاش نمایید.", // File exclusion filters - "NO_FILE_FILTER" : "این پرونده ها محروم شده نیستند", - "EXCLUDE_FILE_FILTER" : "منع {0}", + "NEW_FILE_FILTER" : "اعمال یک تصویه(فیلتر) جدید\u2026", + "CLEAR_FILE_FILTER" : "رفع نادیده گیری پرونده ها", + "NO_FILE_FILTER" : "این پرونده ها از پرونده های نادیده گرفته شده نیستند", + "EXCLUDE_FILE_FILTER" : "نادیده گیری {0}", "EDIT_FILE_FILTER" : "ویرایش\u2026", - "FILE_FILTER_DIALOG" : "ویرایش محرومیت(منعیت پرونده)", - "FILE_FILTER_INSTRUCTIONS" : "محروم سازی پرونده ها و پوشه های منطبق با عبارات زیر یا برخی نویسه های عام. هر عبارت را در یک سطر جدید وارد کنید.", - "FILE_FILTER_LIST_PREFIX" : "جز", + "FILE_FILTER_DIALOG" : "ویرایش نادیده گرفته شده ها", + "FILE_FILTER_INSTRUCTIONS" : "نادیده گیری پرونده ها و پوشه های منطبق با عبارات زیر یا برخی نویسه های عام. هر عبارت را در یک سطر جدید وارد کنید.", + "FILTER_NAME_PLACEHOLDER" : "نام منع سازی(نادیده گیری مقادیر)-اختیاری", "FILE_FILTER_CLIPPED_SUFFIX" : "و {0} بیشتر", "FILTER_COUNTING_FILES" : "شمارش پرونده ها\u2026", "FILTER_FILE_COUNT" : "همیشه {0} از {1} پرونده {2}", @@ -202,7 +214,15 @@ define({ "PROJECT_LOADING" : "درحال بارگذاری\u2026", "UNTITLED" : "عنوان گذاری نشده", "WORKING_FILES" : "پرونده های کاری", - + + /** + * MainViewManager + */ + "TOP" : "بالا", + "BOTTOM" : "پایین", + "LEFT" : "چپ", + "RIGHT" : "راست", + /** * Keyboard modifier names */ @@ -230,6 +250,11 @@ define({ "STATUSBAR_USER_EXTENSIONS_DISABLED" : "غیرفعال سازی افزونه ها", "STATUSBAR_INSERT" : "واردسازی", "STATUSBAR_OVERWRITE" : "دوباره نویسی", + "STATUSBAR_INSOVR_TOOLTIP" : "جهت تغییر حالت از وارد سازی (INS) به بازنویسی (OVR) یا برعکس، کلیک کنید", + "STATUSBAR_LANG_TOOLTIP" : "جهت تغییر نوع فایل، کلیک کنید.", + "STATUSBAR_CODE_INSPECTION_TOOLTIP" : "{0}. باز و بسته کردن پنل گزارشات.", + "STATUSBAR_DEFAULT_LANG" : "(پیش فرض)", + "STATUSBAR_SET_DEFAULT_LANG" : "اعمال بعنوان پیش فرض برای .{0} پرونده", // CodeInspection: errors/warnings "ERRORS_PANEL_TITLE_MULTIPLE" : "{0} خطا", @@ -240,8 +265,8 @@ define({ "LINT_DISABLED" : "Linting غیرفعال شد", "NO_LINT_AVAILABLE" : "linter برای {0} دردسترس نیست", "NOTHING_TO_LINT" : "احتیاج به lint وجود ندارد", - "LINTER_TIMED_OUT" : "فعالیت{0} پس از انتظار بمدت{1} ثانیه خاتمه یافت", - "LINTER_FAILED" : "{0} با خطای زیر پایان یافته: {1}", + "LINTER_TIMED_OUT" : "فعالیت{0} پس از انتظار بمدت{1} ثانیه خاتمه یافت", + "LINTER_FAILED" : "{0} با خطای زیر پایان یافته: {1}", /** * Command Name Constants @@ -253,7 +278,7 @@ define({ "CMD_FILE_NEW" : "پرونده جدید", "CMD_FILE_NEW_FOLDER" : "پوشه جدید", "CMD_FILE_OPEN" : "باز کردن\u2026", - "CMD_ADD_TO_WORKING_SET" : "افزودن به محیط کاری", + "CMD_ADD_TO_WORKINGSET_AND_OPEN" : "افزودن به محیط کاری و باز کردن آن", "CMD_OPEN_DROPPED_FILES" : "بازکردن پرونده های درنظر گرفته نشده", "CMD_OPEN_FOLDER" : "باز کردن پوشه\u2026", "CMD_FILE_CLOSE" : "بستن", @@ -266,6 +291,7 @@ define({ "CMD_FILE_SAVE_ALL" : "ذخیره همه", "CMD_FILE_SAVE_AS" : "ذخیره همه\u2026", "CMD_LIVE_FILE_PREVIEW" : "پیش نمایش زنده", + "CMD_RELOAD_LIVE_PREVIEW" : "بارگزاری مجدد پیش نمایش زنده(با فشار)", "CMD_PROJECT_SETTINGS" : "تنظیمات پروژه\u2026", "CMD_FILE_RENAME" : "تغییر نام", "CMD_FILE_DELETE" : "حذف", @@ -305,7 +331,6 @@ define({ // Search menu commands "FIND_MENU" : "جستجو", "CMD_FIND" : "جستجو", - "CMD_FIND_FIELD_PLACEHOLDER" : "جستجو\u2026", "CMD_FIND_NEXT" : "بعدی", "CMD_FIND_PREVIOUS" : "قبلی", "CMD_FIND_ALL_AND_SELECT" : "جستجو برای تمامی موارد و انتخاب آن ها", @@ -315,6 +340,9 @@ define({ "CMD_FIND_IN_SELECTED" : "جستجو در پرونده/پوشه انتخاب شده", "CMD_FIND_IN_SUBTREE" : "جستجو در\u2026", "CMD_REPLACE" : "جستجو و جایگزینی", + "CMD_REPLACE_IN_FILES" : "جایگزینی در پرونده ها", + "CMD_REPLACE_IN_SELECTED" : "جایگزینی در پرونده/پوشه های انتخاب شده", + "CMD_REPLACE_IN_SUBTREE" : "جایگزینی در\u2026", // View menu commands "VIEW_MENU" : "نمایش", @@ -330,10 +358,11 @@ define({ "CMD_TOGGLE_WORD_WRAP" : "شکستن عبارات طولانی", "CMD_LIVE_HIGHLIGHT" : "نشانه گذاری پیش نمایش", "CMD_VIEW_TOGGLE_INSPECTION" : "نشانه گذاری پرونده های تغییر یافته برای ذخیره سازی", - "CMD_SORT_WORKINGSET_BY_ADDED" : "مرتب سازی بر اساس ترتیب افزودن", - "CMD_SORT_WORKINGSET_BY_NAME" : "مرتب سازی بر اساس نام", - "CMD_SORT_WORKINGSET_BY_TYPE" : "مرتب سازی بر اساس نوع", - "CMD_SORT_WORKINGSET_AUTO" : "مرتب سازی خودکار", + "CMD_WORKINGSET_SORT_BY_ADDED" : "مرتب سازی بر اساس ترتیب افزودن", + "CMD_WORKINGSET_SORT_BY_NAME" : "مرتب سازی بر اساس نام", + "CMD_WORKINGSET_SORT_BY_TYPE" : "مرتب سازی بر اساس نوع", + "CMD_WORKING_SORT_TOGGLE_AUTO" : "مرتب سازی خودکار", + "CMD_THEMES" : "پوسته ها\u2026", // Navigate menu Commands "NAVIGATE_MENU" : "انتقال", @@ -377,6 +406,7 @@ define({ "ABOUT" : "پیرامون", "CLOSE" : "بستن", "ABOUT_TEXT_LINE1" : "پیش روی {VERSION_MINOR} {BUILD_TYPE} {VERSION}", + "ABOUT_TEXT_BUILD_TIMESTAMP" : "build timestamp: ", "ABOUT_TEXT_LINE3" : "
    یادداشتهای ها، شرایط و ضوابط مربوط به نرم افزار و حقوق شخص ثالث در آدرسhttp://www.adobe.com/go/thirdparty/ جهت تلفیق و بعنوان مرجع قرار داده شده.", "ABOUT_TEXT_LINE4" : "اسناد، نکات و منابع نرم افزار در پیوند https://github.com/adobe/brackets/ در دسترس می باشد. می توانید جهت مشاهده سریع بروزرسانی های قبل از انتشار نرم افزار بهمین لینک مراجعه فرمایید.
    ترجمه توسط محمد یعقوبی", "ABOUT_TEXT_LINE5" : "ساخته شده با \u2764 و JavaScript و بدست:", @@ -393,7 +423,15 @@ define({ "BASEURL_ERROR_SEARCH_DISALLOWED" : "URL اصلی نمی تواند شامل پارامترهای جستجو بمانند \"{0}\" باشد.", "BASEURL_ERROR_HASH_DISALLOWED" : "URL اصلی نمی تواند hashes مشابه \"{0}\" داشته باشد.", "BASEURL_ERROR_INVALID_CHAR" : "برخی کاراکتر های خاص شبیه '{0}' می بایست %-encoded.", - "BASEURL_ERROR_UNKNOWN_ERROR" : "خطای ناشناخته در URL اصلی/پایه", + "BASEURL_ERROR_UNKNOWN_ERROR" : "خطای ناشناخته در URL اصلی/پایه", + "EMPTY_VIEW_HEADER" : "Select a file while this view has focus", + + // Strings for themes-settings.html and themes-general.html + "CURRENT_THEME" : "پوسته فعلی", + "USE_THEME_SCROLLBARS" : "Use Theme Scrollbars", + "FONT_SIZE" : "اندازه قلم", + "FONT_FAMILY" : "نوع قلم", + "THEMES_SETTINGS" : "تنظیمات پوسته ها", // CSS Quick Edit "BUTTON_NEW_RULE" : "قائده جدید", @@ -416,6 +454,8 @@ define({ "CANCELING_INSTALL" : "درحال لغو\u2026", "CANCELING_HUNG" : "عملیات لغو نصب زمان طولانیی به طول خواهد کشید. خطا یا خطا های داخلی ممکن است رخ دهد.", "INSTALL_CANCELED" : "فرایند نصب لفو گردید.", + "VIEW_COMPLETE_DESCRIPTION" : "مشاهده توضیح کامل", + "VIEW_TRUNCATED_DESCRIPTION" : "مشاهده توضیح مختصر", // These must match the error codes in ExtensionsDomain.Errors.* : "INVALID_ZIP_FILE" : "محتوای دانلود شده دارای پرونده zip معتبر نمی باشد.", @@ -443,7 +483,11 @@ define({ // For NOT_FOUND_ERR, see generic strings above "EXTENSION_MANAGER_TITLE" : "مدیریت افزونه ها", "EXTENSION_MANAGER_ERROR_LOAD" : "ناتوان در دسترسی به افزونه های ثبت شده. لطفا بعدا تلاش کنید.", - "INSTALL_FROM_URL" : "نصب از URL\u2026", + "INSTALL_EXTENSION_DRAG" : "پرونده زیپ را اینجا بکشید و یا", + "INSTALL_EXTENSION_DROP" : "پرونده زیپ را رها کنید تا نصب شود", + "INSTALL_EXTENSION_DROP_ERROR" : "نصب/بروزرسانی لغو شد، لطفا خطاهای زیر را برسی کنید:", + "INSTALL_FROM_URL" : "با آدرس اینترنتی نصب کنید\u2026", + "INSTALL_EXTENSION_VALIDATING" : "برسی صحت پرونده\u2026", "EXTENSION_AUTHOR" : "مولف", "EXTENSION_DATE" : "تاریخ", "EXTENSION_INCOMPATIBLE_NEWER" : "این افزونه احتیاج به نسخه جدیدی از براکتس دارد.", @@ -454,6 +498,9 @@ define({ "EXTENSION_MORE_INFO" : "اطلاعات بیشتر...", "EXTENSION_ERROR" : "خطای افزونه", "EXTENSION_KEYWORDS" : "کلمات کلیدی", + "EXTENSION_TRANSLATED_USER_LANG" : "ترجمه شده به زبان های {0} که زبان شما را نیز در بر دارد", + "EXTENSION_TRANSLATED_GENERAL" : "ترجمه شده به زبان های {0}", + "EXTENSION_TRANSLATED_LANGS" : "این افزونه تنها برای زبان های زیر ترجمه شده است: {0}", "EXTENSION_INSTALLED" : "نصب شده", "EXTENSION_UPDATE_INSTALLED" : "این افزونه دریافت شده و بعد از ترک براکتس نصب خواهد شد.", "EXTENSION_SEARCH_PLACEHOLDER" : "جستجو", @@ -480,6 +527,7 @@ define({ "EXTENSIONS_INSTALLED_TITLE" : "نصب شده", "EXTENSIONS_AVAILABLE_TITLE" : "در دسترس", + "EXTENSIONS_THEMES_TITLE" : "پوسته ها", "EXTENSIONS_UPDATES_TITLE" : "بروزرسانی ها", "INLINE_EDITOR_NO_MATCHES" : "هیچ مورد سازگاری دردسترس نیست.", "CSS_QUICK_EDIT_NO_MATCHES" : "هیچ قائده منطبقی برای CSSها نسبت به موردی که انتخاب کردید وجود ندارد.
    از گزینه \"قائده جدید\" برای تغریف یک قائده جدید استفاده کنید.", @@ -509,6 +557,7 @@ define({ "CMD_LOG_NODE_STATE" : "ورود گره به حالت کنسول", "CMD_RESTART_NODE" : "شروع دوباره گره", "CMD_SHOW_ERRORS_IN_STATUS_BAR" : "نمایش خطاها در نوار وظیفه", + "CMD_OPEN_BRACKETS_SOURCE" : "باز کردن منبع براکتس", "LANGUAGE_TITLE" : "انتخاب زبان", "LANGUAGE_MESSAGE" : "زبان:", "LANGUAGE_SUBMIT" : "بارگذاری مجدد براکتس", @@ -536,6 +585,8 @@ define({ "CMD_JUMPTO_DEFINITION" : "پرش جهت تعریف", "CMD_SHOW_PARAMETER_HINT" : "نمایش پارامتر", "NO_ARGUMENTS" : "<بدون پارامتر>", + "DETECTED_EXCLUSION_TITLE" : "خطای منطقی در پرونده JavaScript", + "DETECTED_EXCLUSION_INFO" : "براکتس در حال انجام یک پردازه خطادار می باشد:

    {0}

    This file will no longer be processed for code hints and jump to definition. To turn this back on, open .brackets.json in your project and remove the file from jscodehints.detectedExclusions.", // extensions/default/JSLint "JSLINT_NAME" : "JSLint", @@ -550,4 +601,4 @@ define({ "DOCS_MORE_LINK" : "بیشتر" }); -/* Last translated for fda91311bc233c9ffe7c0053101e9aec00f7a920 */ +/* Last translated for 6d4de6a8e699b63ee40a06f9252c00c44b64eb19 */ From 7c95df8bb1b171a7dfecce05c7137aa62c4d5e76 Mon Sep 17 00:00:00 2001 From: Mohammad Yaghobi Date: Mon, 15 Sep 2014 00:19:05 +0430 Subject: [PATCH 026/182] Update Persian translation --- src/nls/fa-ir/strings.js | 50 ++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/src/nls/fa-ir/strings.js b/src/nls/fa-ir/strings.js index f4a6169327c..9ab27b198b0 100644 --- a/src/nls/fa-ir/strings.js +++ b/src/nls/fa-ir/strings.js @@ -39,12 +39,12 @@ define({ "NO_MODIFICATION_ALLOWED_ERR_FILE" : "دسترسی های تعریف شده برای شما اجازه تغییرات را نمی دهند.", "CONTENTS_MODIFIED_ERR" : "این پرونده قبل خارج از محیط این نرم افزار ویرایش شده است.", "UNSUPPORTED_ENCODING_ERR" : "{APP_NAME} فعلا تنها از پرونده ها با ساختار یونیکدی UTF-8 پشتیبانی می کند.", - "UNSUPPORTED_FILE_TYPE_ERR" : "از این نوع فایل پشتیبانی نمی شود.", + "UNSUPPORTED_FILE_TYPE_ERR" : "از این نوع پرونده پشتیبانی نمی شود.", "FILE_EXISTS_ERR" : "پرونده یا پوشه مد نظر موجود می باشد.", "FILE" : "پرونده", - "FILE_TITLE" : "پرونده", + "FILE_TITLE" : "پرونده", "DIRECTORY" : "پوشه", - "DIRECTORY_TITLE" : "پوشه", + "DIRECTORY_TITLE" : "پوشه", "DIRECTORY_NAMES_LEDE" : "نام های پوشه", "FILENAMES_LEDE" : "نام های پرونده", "FILENAME" : "نام پرونده", @@ -72,7 +72,7 @@ define({ "INVALID_FILENAME_MESSAGE" : "نام پرونده نمی تواند شامل مقادیر زیر باشد: {0} و همچنین نمی توانید از عبارات مورد استفاده نرم افزار استفاده نمایید.", "ENTRY_WITH_SAME_NAME_EXISTS" : "پوشه یا پروندهی با نام {0} هم اکنون موجود است.", "ERROR_CREATING_FILE_TITLE" : "خطا در ایجاد {0}", - "ERROR_CREATING_FILE" : "خطا در هنگام ایجاد {0} {1}. {2}", + "ERROR_CREATING_FILE" : "خطا در هنگام ایجاد {0} {1}. {2}", // Application preferences corrupt error strings "ERROR_PREFS_CORRUPT_TITLE" : "خطا در خواندن تنظیمات", @@ -123,7 +123,7 @@ define({ // Generic dialog/button labels - "DONE" : "انجام", + "DONE" : "انجام", "OK" : "تائید", "CANCEL" : "لغو", "DONT_SAVE" : "ذخیره نکن", @@ -135,12 +135,12 @@ define({ "BUTTON_NO" : "خیر", // Find, Replace, Find in Files - "FIND_MATCH_INDEX" : "{0} از {1}", + "FIND_MATCH_INDEX" : "{0} از {1}", "FIND_NO_RESULTS" : "بدون نتیجه", - "FIND_QUERY_PLACEHOLDER" : "جستجو\u2026", + "FIND_QUERY_PLACEHOLDER" : "جستجو\u2026", "REPLACE_PLACEHOLDER" : "جایگزینی با\u2026", "BUTTON_REPLACE_ALL" : "همه\u2026", - "BUTTON_REPLACE_ALL_IN_FILES" : "جایگزینی\u2026", + "BUTTON_REPLACE_ALL_IN_FILES" : "جایگزینی\u2026", "BUTTON_REPLACE" : "جایگزینی", "BUTTON_NEXT" : "\u25B6", "BUTTON_PREV" : "\u25C0", @@ -165,7 +165,7 @@ define({ "FIND_TITLE_SUMMARY" : "— {0} {1} {2} در {3}", // Find in Files - "FIND_NUM_FILES" : "{0} {1}", + "FIND_NUM_FILES" : "{0} {1}", "FIND_IN_FILES_SCOPED" : "در {0}", "FIND_IN_FILES_NO_SCOPE" : "در پروژ]", "FIND_IN_FILES_ZERO_FILES" : "فیلترسازی تمامی پرونده های منع شده {0}", @@ -178,19 +178,19 @@ define({ "FIND_IN_FILES_FILE_PATH" : "پرونده: {0}", "FIND_IN_FILES_EXPAND_COLLAPSE" : "جهت بازکردن/بستن منوها کلید Ctrl/Cmd را گرفته و کلیک کنید.", "REPLACE_IN_FILES_ERRORS_TITLE" : "خطاهای جایگزینی مقادیر", - "REPLACE_IN_FILES_ERRORS" : "پرونده های زیر قابل ویرایش نبودن. علت می تواند از قابل نوشتن نبودن پرونده های و یا تغییر آن های بعد از جستجو باشد.", + "REPLACE_IN_FILES_ERRORS" : "پرونده های زیر قابل ویرایش نبودن. علت می تواند از قابل نوشتن نبودن پرونده های و یا تغییر آن های بعد از جستجو باشد.", "ERROR_FETCHING_UPDATE_INFO_TITLE" : "درحال بروزرسانی اطلاعات خطا", "ERROR_FETCHING_UPDATE_INFO_MSG" : "بروز خطا در هنگام دستیابی به آخرین اطلاعات بروزرسانی از سرویس دهنده. اطمینان حاصل کنید که به اینترنت متصل بوده و دوباره تلاش نمایید.", // File exclusion filters "NEW_FILE_FILTER" : "اعمال یک تصویه(فیلتر) جدید\u2026", - "CLEAR_FILE_FILTER" : "رفع نادیده گیری پرونده ها", + "CLEAR_FILE_FILTER" : "رفع نادیده گیری پرونده ها", "NO_FILE_FILTER" : "این پرونده ها از پرونده های نادیده گرفته شده نیستند", "EXCLUDE_FILE_FILTER" : "نادیده گیری {0}", "EDIT_FILE_FILTER" : "ویرایش\u2026", "FILE_FILTER_DIALOG" : "ویرایش نادیده گرفته شده ها", "FILE_FILTER_INSTRUCTIONS" : "نادیده گیری پرونده ها و پوشه های منطبق با عبارات زیر یا برخی نویسه های عام. هر عبارت را در یک سطر جدید وارد کنید.", - "FILTER_NAME_PLACEHOLDER" : "نام منع سازی(نادیده گیری مقادیر)-اختیاری", + "FILTER_NAME_PLACEHOLDER" : "نام منع سازی(نادیده گیری مقادیر)-اختیاری", "FILE_FILTER_CLIPPED_SUFFIX" : "و {0} بیشتر", "FILTER_COUNTING_FILES" : "شمارش پرونده ها\u2026", "FILTER_FILE_COUNT" : "همیشه {0} از {1} پرونده {2}", @@ -251,10 +251,10 @@ define({ "STATUSBAR_INSERT" : "واردسازی", "STATUSBAR_OVERWRITE" : "دوباره نویسی", "STATUSBAR_INSOVR_TOOLTIP" : "جهت تغییر حالت از وارد سازی (INS) به بازنویسی (OVR) یا برعکس، کلیک کنید", - "STATUSBAR_LANG_TOOLTIP" : "جهت تغییر نوع فایل، کلیک کنید.", + "STATUSBAR_LANG_TOOLTIP" : "جهت تغییر نوع پرونده، کلیک کنید.", "STATUSBAR_CODE_INSPECTION_TOOLTIP" : "{0}. باز و بسته کردن پنل گزارشات.", "STATUSBAR_DEFAULT_LANG" : "(پیش فرض)", - "STATUSBAR_SET_DEFAULT_LANG" : "اعمال بعنوان پیش فرض برای .{0} پرونده", + "STATUSBAR_SET_DEFAULT_LANG" : "اعمال بعنوان پیش فرض برای .{0} پرونده", // CodeInspection: errors/warnings "ERRORS_PANEL_TITLE_MULTIPLE" : "{0} خطا", @@ -291,7 +291,7 @@ define({ "CMD_FILE_SAVE_ALL" : "ذخیره همه", "CMD_FILE_SAVE_AS" : "ذخیره همه\u2026", "CMD_LIVE_FILE_PREVIEW" : "پیش نمایش زنده", - "CMD_RELOAD_LIVE_PREVIEW" : "بارگزاری مجدد پیش نمایش زنده(با فشار)", + "CMD_RELOAD_LIVE_PREVIEW" : "بارگزاری مجدد پیش نمایش زنده(با فشار)", "CMD_PROJECT_SETTINGS" : "تنظیمات پروژه\u2026", "CMD_FILE_RENAME" : "تغییر نام", "CMD_FILE_DELETE" : "حذف", @@ -340,7 +340,7 @@ define({ "CMD_FIND_IN_SELECTED" : "جستجو در پرونده/پوشه انتخاب شده", "CMD_FIND_IN_SUBTREE" : "جستجو در\u2026", "CMD_REPLACE" : "جستجو و جایگزینی", - "CMD_REPLACE_IN_FILES" : "جایگزینی در پرونده ها", + "CMD_REPLACE_IN_FILES" : "جایگزینی در پرونده ها", "CMD_REPLACE_IN_SELECTED" : "جایگزینی در پرونده/پوشه های انتخاب شده", "CMD_REPLACE_IN_SUBTREE" : "جایگزینی در\u2026", @@ -362,7 +362,7 @@ define({ "CMD_WORKINGSET_SORT_BY_NAME" : "مرتب سازی بر اساس نام", "CMD_WORKINGSET_SORT_BY_TYPE" : "مرتب سازی بر اساس نوع", "CMD_WORKING_SORT_TOGGLE_AUTO" : "مرتب سازی خودکار", - "CMD_THEMES" : "پوسته ها\u2026", + "CMD_THEMES" : "پوسته ها\u2026", // Navigate menu Commands "NAVIGATE_MENU" : "انتقال", @@ -406,7 +406,7 @@ define({ "ABOUT" : "پیرامون", "CLOSE" : "بستن", "ABOUT_TEXT_LINE1" : "پیش روی {VERSION_MINOR} {BUILD_TYPE} {VERSION}", - "ABOUT_TEXT_BUILD_TIMESTAMP" : "build timestamp: ", + "ABOUT_TEXT_BUILD_TIMESTAMP" : "build timestamp: ", "ABOUT_TEXT_LINE3" : "
    یادداشتهای ها، شرایط و ضوابط مربوط به نرم افزار و حقوق شخص ثالث در آدرسhttp://www.adobe.com/go/thirdparty/ جهت تلفیق و بعنوان مرجع قرار داده شده.", "ABOUT_TEXT_LINE4" : "اسناد، نکات و منابع نرم افزار در پیوند https://github.com/adobe/brackets/ در دسترس می باشد. می توانید جهت مشاهده سریع بروزرسانی های قبل از انتشار نرم افزار بهمین لینک مراجعه فرمایید.
    ترجمه توسط محمد یعقوبی", "ABOUT_TEXT_LINE5" : "ساخته شده با \u2764 و JavaScript و بدست:", @@ -424,7 +424,7 @@ define({ "BASEURL_ERROR_HASH_DISALLOWED" : "URL اصلی نمی تواند hashes مشابه \"{0}\" داشته باشد.", "BASEURL_ERROR_INVALID_CHAR" : "برخی کاراکتر های خاص شبیه '{0}' می بایست %-encoded.", "BASEURL_ERROR_UNKNOWN_ERROR" : "خطای ناشناخته در URL اصلی/پایه", - "EMPTY_VIEW_HEADER" : "Select a file while this view has focus", + "EMPTY_VIEW_HEADER" : "Select a file while this view has focus", // Strings for themes-settings.html and themes-general.html "CURRENT_THEME" : "پوسته فعلی", @@ -487,7 +487,7 @@ define({ "INSTALL_EXTENSION_DROP" : "پرونده زیپ را رها کنید تا نصب شود", "INSTALL_EXTENSION_DROP_ERROR" : "نصب/بروزرسانی لغو شد، لطفا خطاهای زیر را برسی کنید:", "INSTALL_FROM_URL" : "با آدرس اینترنتی نصب کنید\u2026", - "INSTALL_EXTENSION_VALIDATING" : "برسی صحت پرونده\u2026", + "INSTALL_EXTENSION_VALIDATING" : "برسی صحت پرونده\u2026", "EXTENSION_AUTHOR" : "مولف", "EXTENSION_DATE" : "تاریخ", "EXTENSION_INCOMPATIBLE_NEWER" : "این افزونه احتیاج به نسخه جدیدی از براکتس دارد.", @@ -500,7 +500,7 @@ define({ "EXTENSION_KEYWORDS" : "کلمات کلیدی", "EXTENSION_TRANSLATED_USER_LANG" : "ترجمه شده به زبان های {0} که زبان شما را نیز در بر دارد", "EXTENSION_TRANSLATED_GENERAL" : "ترجمه شده به زبان های {0}", - "EXTENSION_TRANSLATED_LANGS" : "این افزونه تنها برای زبان های زیر ترجمه شده است: {0}", + "EXTENSION_TRANSLATED_LANGS" : "این افزونه تنها برای زبان های زیر ترجمه شده است: {0}", "EXTENSION_INSTALLED" : "نصب شده", "EXTENSION_UPDATE_INSTALLED" : "این افزونه دریافت شده و بعد از ترک براکتس نصب خواهد شد.", "EXTENSION_SEARCH_PLACEHOLDER" : "جستجو", @@ -527,7 +527,7 @@ define({ "EXTENSIONS_INSTALLED_TITLE" : "نصب شده", "EXTENSIONS_AVAILABLE_TITLE" : "در دسترس", - "EXTENSIONS_THEMES_TITLE" : "پوسته ها", + "EXTENSIONS_THEMES_TITLE" : "پوسته ها", "EXTENSIONS_UPDATES_TITLE" : "بروزرسانی ها", "INLINE_EDITOR_NO_MATCHES" : "هیچ مورد سازگاری دردسترس نیست.", "CSS_QUICK_EDIT_NO_MATCHES" : "هیچ قائده منطبقی برای CSSها نسبت به موردی که انتخاب کردید وجود ندارد.
    از گزینه \"قائده جدید\" برای تغریف یک قائده جدید استفاده کنید.", @@ -557,7 +557,7 @@ define({ "CMD_LOG_NODE_STATE" : "ورود گره به حالت کنسول", "CMD_RESTART_NODE" : "شروع دوباره گره", "CMD_SHOW_ERRORS_IN_STATUS_BAR" : "نمایش خطاها در نوار وظیفه", - "CMD_OPEN_BRACKETS_SOURCE" : "باز کردن منبع براکتس", + "CMD_OPEN_BRACKETS_SOURCE" : "باز کردن منبع براکتس", "LANGUAGE_TITLE" : "انتخاب زبان", "LANGUAGE_MESSAGE" : "زبان:", "LANGUAGE_SUBMIT" : "بارگذاری مجدد براکتس", @@ -585,8 +585,8 @@ define({ "CMD_JUMPTO_DEFINITION" : "پرش جهت تعریف", "CMD_SHOW_PARAMETER_HINT" : "نمایش پارامتر", "NO_ARGUMENTS" : "<بدون پارامتر>", - "DETECTED_EXCLUSION_TITLE" : "خطای منطقی در پرونده JavaScript", - "DETECTED_EXCLUSION_INFO" : "براکتس در حال انجام یک پردازه خطادار می باشد:

    {0}

    This file will no longer be processed for code hints and jump to definition. To turn this back on, open .brackets.json in your project and remove the file from jscodehints.detectedExclusions.", + "DETECTED_EXCLUSION_TITLE" : "خطای منطقی در پرونده JavaScript", + "DETECTED_EXCLUSION_INFO" : "براکتس در حال انجام یک پردازه خطادار می باشد:

    {0}

    This file will no longer be processed for code hints and jump to definition. To turn this back on, open .brackets.json in your project and remove the file from jscodehints.detectedExclusions.", // extensions/default/JSLint "JSLINT_NAME" : "JSLint", From 24c0768dd143cfd355719a494ac20fe739291ae9 Mon Sep 17 00:00:00 2001 From: Marcel Gerber Date: Tue, 16 Sep 2014 14:08:00 +0200 Subject: [PATCH 027/182] Add unit tests --- test/spec/FileUtils-test.js | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/test/spec/FileUtils-test.js b/test/spec/FileUtils-test.js index e0cd9612c18..f2ea8cdba67 100644 --- a/test/spec/FileUtils-test.js +++ b/test/spec/FileUtils-test.js @@ -22,7 +22,7 @@ */ /*jslint vars: true, plusplus: true, devel: true, nomen: true, indent: 4, maxerr: 50 */ -/*global define, describe, it, expect, beforeEach, afterEach, waitsFor, runs, window, $, jasmine, brackets */ +/*global define, describe, it, expect, beforeEach, afterEach, waitsFor, runs, window, $, jasmine, brackets, spyOn */ /*unittests: FileUtils*/ define(function (require, exports, module) { @@ -182,5 +182,23 @@ define(function (require, exports, module) { expect(FileUtils.getSmartFileExtension("foo.bar.php.scss.erb")).toBe("php.scss.erb"); }); }); + + describe("compareFilenames", function () { + + it("should compare filenames using German rules", function () { + spyOn(brackets, "getLocale").andReturn("de-DE"); + // Should be like this: Äckerman, Adler, Rossi, Xavier + expect(FileUtils.compareFilenames("Äckerman", "Adler", false)).toBeLessThan(0); + expect(FileUtils.compareFilenames("Adler", "Rossi", false)).toBeLessThan(0); + expect(FileUtils.compareFilenames("Rossi", "Xavier", false)).toBeLessThan(0); + }); + it("should compare filenames using Swedish rules", function () { + spyOn(brackets, "getLocale").andReturn("sv"); + // Should be like this: Adler, Rossie, Xavier, Äckerman + expect(FileUtils.compareFilenames("Adler", "Rossie", false)).toBeLessThan(0); + expect(FileUtils.compareFilenames("Rossie", "Xavier", false)).toBeLessThan(0); + expect(FileUtils.compareFilenames("Xavier", "Äckerman", false)).toBeLessThan(0); + }); + }); }); }); From ce058226bf25f4fed517b5cacd90fd6ccf8e1b11 Mon Sep 17 00:00:00 2001 From: Peter Flynn Date: Tue, 16 Sep 2014 22:29:03 -0700 Subject: [PATCH 028/182] Fix bug #8882 (Background flickers when opening themes dropdown) - ensure the 'select:active > option' colors exactly match the 'select > option' colors by explicitly specifying '> option' colors instead of letting them be quasi-inherited from the parent 'select'. Also, add a mousedown (:active) state for dark mode similar to the one in light mode, based on how other dark mode buttons are styled. --- src/styles/brackets_patterns_override.less | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/src/styles/brackets_patterns_override.less b/src/styles/brackets_patterns_override.less index 48c821106b8..4a1f9c37b6b 100644 --- a/src/styles/brackets_patterns_override.less +++ b/src/styles/brackets_patterns_override.less @@ -1844,12 +1844,20 @@ select { &:active { background-color: @bc-btn-bg-down; box-shadow: inset 0 1px 0 @bc-shadow-small; + + .dark & { + background-color: @dark-bc-btn-bg-down; + box-shadow: inset 0 1px 0 @dark-bc-shadow-small; + } } + + > option { // Windows (but not Mac) lets you style the dropdown items + background-color: @bc-menu-bg; + color: @bc-menu-text; - > option { // This works on windows. .dark & { - background: @dark-bc-menu-bg !important; - color: @dark-bc-menu-text !important; + background: @dark-bc-menu-bg; + color: @dark-bc-menu-text; } } From 0931ac91814219263aaa1416ab1b1f0b3bfc5e30 Mon Sep 17 00:00:00 2001 From: Marcel Gerber Date: Thu, 18 Sep 2014 19:22:38 +0200 Subject: [PATCH 029/182] Unit tests. --- .../testfiles/subfolder/test.scss | 8 +++++ .../default/UrlCodeHints/unittests.js | 30 +++++++++++++++---- 2 files changed, 32 insertions(+), 6 deletions(-) create mode 100644 src/extensions/default/UrlCodeHints/testfiles/subfolder/test.scss diff --git a/src/extensions/default/UrlCodeHints/testfiles/subfolder/test.scss b/src/extensions/default/UrlCodeHints/testfiles/subfolder/test.scss new file mode 100644 index 00000000000..bbbb0f10e64 --- /dev/null +++ b/src/extensions/default/UrlCodeHints/testfiles/subfolder/test.scss @@ -0,0 +1,8 @@ +/* test.scss */ +body { + .test { + &.brackets { + background-image: url(); + } + } +} diff --git a/src/extensions/default/UrlCodeHints/unittests.js b/src/extensions/default/UrlCodeHints/unittests.js index d471a413e92..8aeebffe32e 100644 --- a/src/extensions/default/UrlCodeHints/unittests.js +++ b/src/extensions/default/UrlCodeHints/unittests.js @@ -41,6 +41,7 @@ define(function (require, exports, module) { var extensionPath = FileUtils.getNativeModuleDirectoryPath(module), testHtmlPath = extensionPath + "/testfiles/test.html", testCssPath = extensionPath + "/testfiles/subfolder/test.css", + testScssPath = extensionPath + "/testfiles/subfolder/test.scss", testDocument, testEditor, hintsObj; @@ -50,7 +51,7 @@ define(function (require, exports, module) { // strategically so that they sort the same on all OS's (i.e. folders are listed // first, and then files), but this is not true for UrlCodeHints folder. var testfilesDirHints = [ "subfolder/", "test.html"], - subfolderDirHints = [ "chevron.png", "test.css", "test.js"], + subfolderDirHints = [ "chevron.png", "test.css", "test.js", "test.scss"], UrlCodeHintsDirHintsMac = [ "../data.json", "../main.js", "../testfiles/", "../unittests.js"], UrlCodeHintsDirHints = [ "../testfiles/", "../data.json", "../main.js", "../unittests.js"]; @@ -277,7 +278,7 @@ define(function (require, exports, module) { tearDownTests(); }); - it("should hint for background-image: url()", function () { + it("should hint for background-image: url() in CSS", function () { runs(function () { testEditor.setCursorPos({ line: 3, ch: 26 }); hintsObj = null; @@ -287,6 +288,23 @@ define(function (require, exports, module) { runs(function () { verifyUrlHints(hintsObj.hints, subfolderDirHints); }); + + runs(function () { + tearDownTests(); + setupTests(testScssPath); + }); + }); + + it("should hint for background-image: url() in SCSS", function () { + runs(function () { + testEditor.setCursorPos({ line: 4, ch: 34 }); + hintsObj = null; + expectAsyncHints(UrlCodeHints.hintProvider); + }); + + runs(function () { + verifyUrlHints(hintsObj.hints, subfolderDirHints); + }); }); }); @@ -471,7 +489,7 @@ define(function (require, exports, module) { runs(function () { expect(hintsObj).toBeTruthy(); expect(hintsObj.hints).toBeTruthy(); - expect(hintsObj.hints.length).toBe(3); + expect(hintsObj.hints.length).toBe(subfolderDirHints.length); // Complete path is displayed expect(hintsObj.hints[0]).toBe("subfolder/chevron.png"); @@ -526,7 +544,7 @@ define(function (require, exports, module) { runs(function () { expect(hintsObj).toBeTruthy(); expect(hintsObj.hints).toBeTruthy(); - expect(hintsObj.hints.length).toBe(3); + expect(hintsObj.hints.length).toBe(subfolderDirHints.length); // Complete path is displayed expect(hintsObj.hints[0]).toBe("subfolder/chevron.png"); @@ -578,7 +596,7 @@ define(function (require, exports, module) { runs(function () { expect(hintsObj).toBeTruthy(); expect(hintsObj.hints).toBeTruthy(); - expect(hintsObj.hints.length).toBe(3); + expect(hintsObj.hints.length).toBe(subfolderDirHints.length); // Complete path is displayed expect(hintsObj.hints[0]).toBe("subfolder/chevron.png"); @@ -675,7 +693,7 @@ define(function (require, exports, module) { runs(function () { expect(hintsObj).toBeTruthy(); expect(hintsObj.hints).toBeTruthy(); - expect(hintsObj.hints.length).toBe(3); + expect(hintsObj.hints.length).toBe(subfolderDirHints.length); // Complete path is displayed expect(hintsObj.hints[0]).toBe("subfolder/chevron.png"); From d339001a99da0d78b9add35dbad3235ecb144ced Mon Sep 17 00:00:00 2001 From: RaymondLim Date: Mon, 22 Sep 2014 16:00:06 -0700 Subject: [PATCH 030/182] =?UTF-8?q?Fix=20the=20unit=20test=20issue=20and?= =?UTF-8?q?=20replace=20`while=20(true)`=20loop=20with=20clearer=20logic?= =?UTF-8?q?=20in=20`do=20=E2=80=A6=20while`=20loop.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/language/CSSUtils.js | 14 +++++--------- test/spec/CSSUtils-test-files/offsets.css | 6 ++++++ test/spec/CSSUtils-test.js | 4 ++-- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/language/CSSUtils.js b/src/language/CSSUtils.js index 1ba07ded2c2..1a87456dfba 100644 --- a/src/language/CSSUtils.js +++ b/src/language/CSSUtils.js @@ -1544,7 +1544,7 @@ define(function (require, exports, module) { } // scan backwards to see if the cursor is in a rule - while (true) { + do { if (ctx.token.type !== "comment") { if (ctx.token.string === "}") { if (isPreprocessorDoc) { @@ -1573,16 +1573,12 @@ define(function (require, exports, module) { if (!isPreprocessorDoc && _hasNonWhitespace(ctx.token.string)) { foundChars = true; } - if (!TokenUtils.movePrevToken(ctx)) { - break; - } + TokenUtils.movePrevToken(ctx); } } else { - if (!TokenUtils.movePrevToken(ctx)) { - break; - } + TokenUtils.movePrevToken(ctx); } - } + } while (!(ctx.pos.line === 0 && ctx.pos.ch === 0)); selector = _stripAtRules(selector); @@ -1604,7 +1600,7 @@ define(function (require, exports, module) { // At this point if we haven't found a selector, but have seen chars when // scanning, assume we are in the middle of a selector. For a preprocessor // document we also need to collect the current selector if the cursor is - // is within the selector or whitespaces immediately before or after it. + // within the selector or whitespaces immediately before or after it. if ((!selector || isPreprocessorDoc) && foundChars) { // scan forward to see if the cursor is in a selector while (true) { diff --git a/test/spec/CSSUtils-test-files/offsets.css b/test/spec/CSSUtils-test-files/offsets.css index 18cf7539dad..c7d62260c28 100644 --- a/test/spec/CSSUtils-test-files/offsets.css +++ b/test/spec/CSSUtils-test-files/offsets.css @@ -49,3 +49,9 @@ div { /* nested comment */ /* border: none */ } +/* another rule inside a comment to test https://github.com/adobe/brackets/issues/9002 */ +/* +p { + color: "black"; +} +*/ diff --git a/test/spec/CSSUtils-test.js b/test/spec/CSSUtils-test.js index 14c1bc560a2..81ab26d8c2d 100644 --- a/test/spec/CSSUtils-test.js +++ b/test/spec/CSSUtils-test.js @@ -398,10 +398,10 @@ define(function (require, exports, module) { // https://github.com/adobe/brackets/issues/9002 it("should not hang when the cursor is after '{' or '}' inside comments", function () { - var selector = CSSUtils.findSelectorAtDocumentPos(editor, {line: 45, ch: 6}); // after { + var selector = CSSUtils.findSelectorAtDocumentPos(editor, {line: 53, ch: 3}); // after { expect(selector).toEqual(""); - selector = CSSUtils.findSelectorAtDocumentPos(editor, {line: 45, ch: 23}); // after } + selector = CSSUtils.findSelectorAtDocumentPos(editor, {line: 55, ch: 1}); // after } expect(selector).toEqual(""); }); From 1577efe9fd12b24e9af9c377fd1baa3ef5e359c0 Mon Sep 17 00:00:00 2001 From: Marcel Gerber Date: Mon, 22 Sep 2014 16:47:03 +0200 Subject: [PATCH 031/182] Fix "Install from URL" issue --- src/htmlContent/extension-manager-dialog.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/htmlContent/extension-manager-dialog.html b/src/htmlContent/extension-manager-dialog.html index 3a985284c06..abe4fee2ba7 100644 --- a/src/htmlContent/extension-manager-dialog.html +++ b/src/htmlContent/extension-manager-dialog.html @@ -1,5 +1,5 @@ -