From 012de0e91bb512e1feff7b0dcdde73ba8a9c5c52 Mon Sep 17 00:00:00 2001 From: Narciso Jaramillo Date: Wed, 6 Mar 2013 16:53:42 -0800 Subject: [PATCH 0001/1140] Add way for plugin to specify label for quick open --- src/search/QuickOpen.js | 44 ++++++++++++++++++++++++++--------------- 1 file changed, 28 insertions(+), 16 deletions(-) diff --git a/src/search/QuickOpen.js b/src/search/QuickOpen.js index 358bded1342..7e394a4f2fc 100644 --- a/src/search/QuickOpen.js +++ b/src/search/QuickOpen.js @@ -97,7 +97,7 @@ define(function (require, exports, module) { /** * Defines API for new QuickOpen plug-ins */ - function QuickOpenPlugin(name, fileTypes, done, search, match, itemFocus, itemSelect, resultsFormatter) { + function QuickOpenPlugin(name, fileTypes, done, search, match, itemFocus, itemSelect, resultsFormatter, label) { this.name = name; this.fileTypes = fileTypes; this.done = done; @@ -106,6 +106,7 @@ define(function (require, exports, module) { this.itemFocus = itemFocus; this.itemSelect = itemSelect; this.resultsFormatter = resultsFormatter; + this.label = label; } /** @@ -117,25 +118,27 @@ define(function (require, exports, module) { * search: function(string, !StringMatch.StringMatcher):Array., * match: function(string):boolean, * itemFocus: function(?SearchResult|string), - * itemSelect: funciton(?SearchResult|string), - * resultsFormatter: ?function(SearchResult|string, string):string + * itemSelect: function(?SearchResult|string), + * resultsFormatter: ?function(SearchResult|string, string):string, + * label: ?string * } pluginDef * * Parameter Documentation: * * name - plug-in name, **must be unique** - * fileTypes - file types array. Example: ["js", "css", "txt"]. An empty array + * fileTypes - file types array. Example: ["js", "css", "txt"]. If unspecified or empty array, * indicates all file types. - * done - called when quick open is complete. Plug-in should clear its internal state. - * search - takes a query string and a StringMatcher (the use of which is optional but can speed up your searches) and returns an array of strings that match the query. + * done - called when quick open is complete. Plug-in should clear its internal state. Optional. + * search - takes a query string and a StringMatcher (the use of which is optional but can speed up your searches) and returns an array of strings that match the query. Required. * match - takes a query string and returns true if this plug-in wants to provide - * results for this query. + * results for this query. Required. * itemFocus - performs an action when a result has been highlighted (via arrow keys, mouseover, etc.). - * The highlighted search result item (as returned by search()) is passed as an argument. + * The highlighted search result item (as returned by search()) is passed as an argument. Optional. * itemSelect - performs an action when a result is chosen. - * The selected search result item (as returned by search()) is passed as an argument. + * The selected search result item (as returned by search()) is passed as an argument. Required. * resultFormatter - takes a query string and an item string and returns * a
  • item to insert into the displayed search results. If null, default is provided. + * label - if provided, the label to show before the query field. * * If itemFocus() makes changes to the current document or cursor/scroll position and then the user * cancels Quick Open (via Esc), those changes are automatically reverted. @@ -143,13 +146,14 @@ define(function (require, exports, module) { function addQuickOpenPlugin(pluginDef) { plugins.push(new QuickOpenPlugin( pluginDef.name, - pluginDef.fileTypes, + pluginDef.fileTypes || [], pluginDef.done, pluginDef.search, pluginDef.match, pluginDef.itemFocus, pluginDef.itemSelect, - pluginDef.resultsFormatter + pluginDef.resultsFormatter, + pluginDef.label )); } @@ -311,7 +315,7 @@ define(function (require, exports, module) { QuickNavigateDialog.prototype._handleItemFocus = function (e, selectedDOMItem) { var selectedItem = domItemToSearchResult(selectedDOMItem); - if (currentPlugin) { + if (currentPlugin && currentPlugin.itemFocus) { currentPlugin.itemFocus(selectedItem); } // TODO: Disable opening files on focus for now since this causes focus related bugs between @@ -420,7 +424,9 @@ define(function (require, exports, module) { var i; for (i = 0; i < plugins.length; i++) { var plugin = plugins[i]; - plugin.done(); + if (plugin.done) { + plugin.done(); + } } // Ty TODO: disabled for now while file switching is disabled in _handleItemFocus @@ -517,9 +523,6 @@ define(function (require, exports, module) { return getLastFilterResult(); } - // Reflect current search mode in UI - this._updateDialogLabel(query); - // "Go to line" mode is special-cased var gotoLine = extractLineNumber(query); if (!isNaN(gotoLine)) { @@ -548,11 +551,20 @@ define(function (require, exports, module) { matcher = new StringMatch.StringMatcher(); this._matchers[currentPlugin.name] = matcher; } + if (plugin.label) { + $(".find-dialog-label", this.dialog).text(plugin.label); + } else { + // Use default dialog label for the given query. + this._updateDialogLabel(query); + } return plugin.search(query, matcher); } } } + // Reflect current search mode in UI + this._updateDialogLabel(query); + // No matching plugin: use default file search mode currentPlugin = null; return searchFileList(query, this._filenameMatcher); From d36c1e9dcbd2548263cdde169f06807761d03863 Mon Sep 17 00:00:00 2001 From: sathyamoorthi Date: Sun, 28 Jul 2013 22:13:33 +0530 Subject: [PATCH 0002/1140] "close others" extension. --- src/document/DocumentCommandHandlers.js | 17 ++-- src/extensions/default/CloseOthers/main.js | 87 +++++++++++++++++++ .../default/CloseOthers/settings.json | 5 ++ 3 files changed, 103 insertions(+), 6 deletions(-) create mode 100644 src/extensions/default/CloseOthers/main.js create mode 100644 src/extensions/default/CloseOthers/settings.json diff --git a/src/document/DocumentCommandHandlers.js b/src/document/DocumentCommandHandlers.js index d516ae11010..27cf9cf6b55 100644 --- a/src/document/DocumentCommandHandlers.js +++ b/src/document/DocumentCommandHandlers.js @@ -917,12 +917,17 @@ define(function (require, exports, module) { promptOnly = commandData && commandData.promptOnly; var unsavedDocs = []; - DocumentManager.getWorkingSet().forEach(function (file) { - var doc = DocumentManager.getOpenDocumentForPath(file.fullPath); - if (doc && doc.isDirty) { - unsavedDocs.push(doc); - } - }); + + if (commandData.unsavedDocs) { + unsavedDocs = commandData.unsavedDocs; + } else { + DocumentManager.getWorkingSet().forEach(function (file) { + var doc = DocumentManager.getOpenDocumentForPath(file.fullPath); + if (doc && doc.isDirty) { + unsavedDocs.push(doc); + } + }); + } if (unsavedDocs.length === 0) { // No unsaved changes, so we can proceed without a prompt diff --git a/src/extensions/default/CloseOthers/main.js b/src/extensions/default/CloseOthers/main.js new file mode 100644 index 00000000000..ae708456e84 --- /dev/null +++ b/src/extensions/default/CloseOthers/main.js @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2013 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, regexp: true, indent: 4, maxerr: 50 */ +/*global define, $, brackets, window, document */ + +define(function (require, exports, module) { + "use strict"; + + var Menus = brackets.getModule("command/Menus"), + CommandManager = brackets.getModule("command/CommandManager"), + Commands = brackets.getModule("command/Commands"), + dm = brackets.getModule("document/DocumentManager"), + settings = JSON.parse(require("text!settings.json")), + working_set_cmenu = Menus.getContextMenu(Menus.ContextMenuIds.WORKING_SET_MENU); + + function handleClose(mode) { + + var targetIndex = dm.findInWorkingSet(dm.getCurrentDocument().file.fullPath), + workingSet = dm.getWorkingSet().slice(0), + start = (mode === "close_below") ? (targetIndex + 1) : 0, + end = (mode === "close_above") ? (targetIndex) : (workingSet.length), + unsavedDocs = [], + doc, + i; + + if (mode === "close_others") { + end--; + workingSet.splice(targetIndex, 1); + } + + for (i = start; i < end; i++) { + doc = dm.getOpenDocumentForPath(workingSet[i].fullPath); + + if (doc && doc.isDirty) { + unsavedDocs.push(doc); + } + } + + CommandManager.execute(Commands.FILE_CLOSE_ALL, {promptOnly: true, unsavedDocs: unsavedDocs}).done(function () { + for (i = start; i < end; i++) { + dm.removeFromWorkingSet(workingSet[i]); + } + }); + } + + if (settings.close_below) { + CommandManager.register("Close Others Below", "file.close_below", function () { + handleClose("close_below"); + }); + working_set_cmenu.addMenuItem("file.close_below", "", Menus.AFTER, Commands.FILE_CLOSE); + } + + if (settings.close_others) { + CommandManager.register("Close Others", "file.close_others", function () { + handleClose("close_others"); + }); + working_set_cmenu.addMenuItem("file.close_others", "", Menus.AFTER, Commands.FILE_CLOSE); + } + + if (settings.close_above) { + CommandManager.register("Close Others Above", "file.close_above", function () { + handleClose("close_above"); + }); + working_set_cmenu.addMenuItem("file.close_above", "", Menus.AFTER, Commands.FILE_CLOSE); + } +}); \ No newline at end of file diff --git a/src/extensions/default/CloseOthers/settings.json b/src/extensions/default/CloseOthers/settings.json new file mode 100644 index 00000000000..5c12eb088a1 --- /dev/null +++ b/src/extensions/default/CloseOthers/settings.json @@ -0,0 +1,5 @@ +{ + "close_others": true, + "close_above": false, + "close_below": false +} \ No newline at end of file From 01c33fb4299637413bb05d29d4ff1d94896d7697 Mon Sep 17 00:00:00 2001 From: sathyamoorthi Date: Wed, 31 Jul 2013 12:30:12 +0530 Subject: [PATCH 0003/1140] file close functions to handle list of files. --- src/document/DocumentCommandHandlers.js | 78 +++++++++-------- src/document/DocumentManager.js | 86 ++++++++++--------- src/extensions/default/CloseOthers/main.js | 46 +++++----- .../default/CloseOthers/settings.json | 4 +- src/nls/root/strings.js | 3 + 5 files changed, 113 insertions(+), 104 deletions(-) diff --git a/src/document/DocumentCommandHandlers.js b/src/document/DocumentCommandHandlers.js index 27cf9cf6b55..e3e3f2fb0b5 100644 --- a/src/document/DocumentCommandHandlers.js +++ b/src/document/DocumentCommandHandlers.js @@ -715,20 +715,12 @@ define(function (require, exports, module) { return $.Deferred().reject().promise(); } - /** - * Saves all unsaved documents. Returns a Promise that will be resolved once ALL the save - * operations have been completed. If ANY save operation fails, an error dialog is immediately - * shown and the other files wait to save until it is dismissed; after all files have been - * processed, the Promise is rejected if any ONE save operation failed. - * - * @return {$.Promise} - */ - function saveAll() { + function _saveFileList(fileList) { // Do in serial because doSave shows error UI for each file, and we don't want to stack // multiple dialogs on top of each other var userCanceled = false; return Async.doSequentially( - DocumentManager.getWorkingSet(), + fileList, function (file) { // Abort remaining saves if user canceled any Save dialog if (userCanceled) { @@ -753,6 +745,18 @@ define(function (require, exports, module) { ); } + /** + * Saves all unsaved documents. Returns a Promise that will be resolved once ALL the save + * operations have been completed. If ANY save operation fails, an error dialog is immediately + * shown and the other files wait to save until it is dismissed; after all files have been + * processed, the Promise is rejected if any ONE save operation failed. + * + * @return {$.Promise} + */ + function saveAll() { + return _saveFileList(DocumentManager.getWorkingSet()); + } + /** * Prompts user with save as dialog and saves document. * @return {$.Promise} a promise that is resolved once the save has been completed @@ -903,31 +907,17 @@ define(function (require, exports, module) { } return promise; } - - /** - * Closes all open documents; equivalent to calling handleFileClose() for each document, except - * that unsaved changes are confirmed once, in bulk. - * @param {?{promptOnly: boolean}} If true, only displays the relevant confirmation UI and does NOT - * actually close any documents. This is useful when chaining close-all together with - * other user prompts that may be cancelable. - * @return {$.Promise} a promise that is resolved when all files are closed - */ - function handleFileCloseAll(commandData) { - var result = new $.Deferred(), - promptOnly = commandData && commandData.promptOnly; - var unsavedDocs = []; + function _doCloseDocumentList(list, promptOnly) { + var result = new $.Deferred(), + unsavedDocs = []; - if (commandData.unsavedDocs) { - unsavedDocs = commandData.unsavedDocs; - } else { - DocumentManager.getWorkingSet().forEach(function (file) { - var doc = DocumentManager.getOpenDocumentForPath(file.fullPath); - if (doc && doc.isDirty) { - unsavedDocs.push(doc); - } - }); - } + list.forEach(function (file) { + var doc = DocumentManager.getOpenDocumentForPath(file.fullPath); + if (doc && doc.isDirty) { + unsavedDocs.push(doc); + } + }); if (unsavedDocs.length === 0) { // No unsaved changes, so we can proceed without a prompt @@ -985,7 +975,7 @@ define(function (require, exports, module) { result.reject(); } else if (id === Dialogs.DIALOG_BTN_OK) { // Save all unsaved files, then if that succeeds, close all - saveAll().done(function () { + _saveFileList(list).done(function () { result.resolve(); }).fail(function () { result.reject(); @@ -1002,13 +992,29 @@ define(function (require, exports, module) { // guarantees that handlers run in the order they are added. result.done(function () { if (!promptOnly) { - DocumentManager.closeAll(); + DocumentManager.closeDocuments(list); } }); return result.promise(); } + /** + * Closes all open documents; equivalent to calling handleFileClose() for each document, except + * that unsaved changes are confirmed once, in bulk. + * @param {?{promptOnly: boolean}} If true, only displays the relevant confirmation UI and does NOT + * actually close any documents. This is useful when chaining close-all together with + * other user prompts that may be cancelable. + * @return {$.Promise} a promise that is resolved when all files are closed + */ + function handleFileCloseAll(commandData) { + return _doCloseDocumentList(DocumentManager.getWorkingSet(), (commandData && commandData.promptOnly)); + } + + function handleFileCloseList(documentList) { + return _doCloseDocumentList(documentList); + } + /** * @private - tracks our closing state if we get called again */ @@ -1187,6 +1193,8 @@ define(function (require, exports, module) { // Exported for unit testing only exports._parseDecoratedPath = _parseDecoratedPath; + + exports.handleFileCloseList = handleFileCloseList; // Register global commands CommandManager.register(Strings.CMD_FILE_OPEN, Commands.FILE_OPEN, handleFileOpen); diff --git a/src/document/DocumentManager.js b/src/document/DocumentManager.js index 30523bf82a5..51b75206c31 100644 --- a/src/document/DocumentManager.js +++ b/src/document/DocumentManager.js @@ -316,19 +316,12 @@ define(function (require, exports, module) { // Dispatch event $(exports).triggerHandler("workingSetAddList", [uniqueFileList]); } - - /** - * Warning: low level API - use FILE_CLOSE command in most cases. - * Removes the given file from the working set list, if it was in the list. Does not change - * the current editor even if it's for this file. Does not prompt for unsaved changes. - * @param {!FileEntry} file - * @param {boolean=} true to suppress redraw after removal - */ - function removeFromWorkingSet(file, suppressRedraw) { + + function _removeFromArrays(file) { // If doc isn't in working set, do nothing var index = findInWorkingSet(file.fullPath); if (index === -1) { - return; + return false; } // Remove @@ -336,9 +329,29 @@ define(function (require, exports, module) { _workingSetMRUOrder.splice(findInWorkingSet(file.fullPath, _workingSetMRUOrder), 1); _workingSetAddedOrder.splice(findInWorkingSet(file.fullPath, _workingSetAddedOrder), 1); + return true; + } + + function removeFromWorkingSet(file, suppressRedraw) { + if (_removeFromArrays(file)) { + $(exports).triggerHandler("workingSetRemove", [file, suppressRedraw]); + } + } + + function closeDocuments(fileList) { + + if (!fileList) { + return; + } + + fileList.forEach(function (file) { + _removeFromArrays(file); + }); + // Dispatch event - $(exports).triggerHandler("workingSetRemove", [file, suppressRedraw]); + $(exports).triggerHandler("workingSetRemoveList", [fileList]); } + /** * Removes all files from the working set list. @@ -569,7 +582,6 @@ define(function (require, exports, module) { _removeAllFromWorkingSet(); } - /** * Cleans up any loose Documents whose only ref is its own master Editor, and that Editor is not * rooted in the UI anywhere. This can happen if the Editor is auto-created via Document APIs that @@ -817,43 +829,32 @@ define(function (require, exports, module) { * @param {boolean} isFolder True if path is a folder; False if it is a file. */ function notifyPathNameChanged(oldName, newName, isFolder) { - var i, path; - // Update open documents. This will update _currentDocument too, since // the current document is always open. var keysToDelete = []; - for (path in _openDocuments) { - if (_openDocuments.hasOwnProperty(path)) { - if (FileUtils.isAffectedWhenRenaming(path, oldName, newName, isFolder)) { - var doc = _openDocuments[path]; - - // Copy value to new key - var newKey = path.replace(oldName, newName); - _openDocuments[newKey] = doc; - - keysToDelete.push(path); - - // Update document file - FileUtils.updateFileEntryPath(doc.file, oldName, newName, isFolder); - doc._notifyFilePathChanged(); - - if (!isFolder) { - // If the path name is a file, there can only be one matched entry in the open document - // list, which we just updated. Break out of the for .. in loop. - break; - } - } + CollectionUtils.forEach(_openDocuments, function (doc, path) { + if (FileUtils.isAffectedWhenRenaming(path, oldName, newName, isFolder)) { + // Copy value to new key + var newKey = path.replace(oldName, newName); + _openDocuments[newKey] = doc; + + keysToDelete.push(path); + + // Update document file + FileUtils.updateFileEntryPath(doc.file, oldName, newName, isFolder); + doc._notifyFilePathChanged(); } - } + }); + // Delete the old keys - for (i = 0; i < keysToDelete.length; i++) { - delete _openDocuments[keysToDelete[i]]; - } + keysToDelete.forEach(function (fullPath) { + delete _openDocuments[fullPath]; + }); // Update working set - for (i = 0; i < _workingSet.length; i++) { - FileUtils.updateFileEntryPath(_workingSet[i], oldName, newName, isFolder); - } + _workingSet.forEach(function (fileEntry) { + FileUtils.updateFileEntryPath(fileEntry, oldName, newName, isFolder); + }); // Send a "fileNameChanged" event. This will trigger the views to update. $(exports).triggerHandler("fileNameChange", [oldName, newName]); @@ -951,6 +952,7 @@ define(function (require, exports, module) { exports.addToWorkingSet = addToWorkingSet; exports.addListToWorkingSet = addListToWorkingSet; exports.removeFromWorkingSet = removeFromWorkingSet; + exports.closeDocuments = closeDocuments; exports.getNextPrevFile = getNextPrevFile; exports.swapWorkingSetIndexes = swapWorkingSetIndexes; exports.sortWorkingSet = sortWorkingSet; diff --git a/src/extensions/default/CloseOthers/main.js b/src/extensions/default/CloseOthers/main.js index ae708456e84..66d1028d20d 100644 --- a/src/extensions/default/CloseOthers/main.js +++ b/src/extensions/default/CloseOthers/main.js @@ -31,57 +31,53 @@ define(function (require, exports, module) { CommandManager = brackets.getModule("command/CommandManager"), Commands = brackets.getModule("command/Commands"), dm = brackets.getModule("document/DocumentManager"), + docCH = brackets.getModule("document/DocumentCommandHandlers"), + strings = brackets.getModule("i18n!nls/strings"), settings = JSON.parse(require("text!settings.json")), - working_set_cmenu = Menus.getContextMenu(Menus.ContextMenuIds.WORKING_SET_MENU); + working_set_cmenu = Menus.getContextMenu(Menus.ContextMenuIds.WORKING_SET_MENU), + close_others = "file.close_others", + close_above = "file.close_above", + close_below = "file.close_below"; function handleClose(mode) { var targetIndex = dm.findInWorkingSet(dm.getCurrentDocument().file.fullPath), workingSet = dm.getWorkingSet().slice(0), - start = (mode === "close_below") ? (targetIndex + 1) : 0, - end = (mode === "close_above") ? (targetIndex) : (workingSet.length), - unsavedDocs = [], - doc, + start = (mode === close_below) ? (targetIndex + 1) : 0, + end = (mode === close_above) ? (targetIndex) : (workingSet.length), + docList = [], i; - if (mode === "close_others") { + if (mode === close_others) { end--; workingSet.splice(targetIndex, 1); } for (i = start; i < end; i++) { - doc = dm.getOpenDocumentForPath(workingSet[i].fullPath); - - if (doc && doc.isDirty) { - unsavedDocs.push(doc); - } + docList.push(workingSet[i]); } - CommandManager.execute(Commands.FILE_CLOSE_ALL, {promptOnly: true, unsavedDocs: unsavedDocs}).done(function () { - for (i = start; i < end; i++) { - dm.removeFromWorkingSet(workingSet[i]); - } - }); + docCH.handleFileCloseList(docList); } if (settings.close_below) { - CommandManager.register("Close Others Below", "file.close_below", function () { - handleClose("close_below"); + CommandManager.register(strings.CMD_FILE_CLOSE_BELOW, close_below, function () { + handleClose(close_below); }); - working_set_cmenu.addMenuItem("file.close_below", "", Menus.AFTER, Commands.FILE_CLOSE); + working_set_cmenu.addMenuItem(close_below, "", Menus.AFTER, Commands.FILE_CLOSE); } if (settings.close_others) { - CommandManager.register("Close Others", "file.close_others", function () { - handleClose("close_others"); + CommandManager.register(strings.CMD_FILE_CLOSE_OTHERS, close_others, function () { + handleClose(close_others); }); - working_set_cmenu.addMenuItem("file.close_others", "", Menus.AFTER, Commands.FILE_CLOSE); + working_set_cmenu.addMenuItem(close_others, "", Menus.AFTER, Commands.FILE_CLOSE); } if (settings.close_above) { - CommandManager.register("Close Others Above", "file.close_above", function () { - handleClose("close_above"); + CommandManager.register(strings.CMD_FILE_CLOSE_ABOVE, close_above, function () { + handleClose(close_above); }); - working_set_cmenu.addMenuItem("file.close_above", "", Menus.AFTER, Commands.FILE_CLOSE); + working_set_cmenu.addMenuItem(close_above, "", Menus.AFTER, Commands.FILE_CLOSE); } }); \ No newline at end of file diff --git a/src/extensions/default/CloseOthers/settings.json b/src/extensions/default/CloseOthers/settings.json index 5c12eb088a1..d2250e6e2a6 100644 --- a/src/extensions/default/CloseOthers/settings.json +++ b/src/extensions/default/CloseOthers/settings.json @@ -1,5 +1,5 @@ { "close_others": true, - "close_above": false, - "close_below": false + "close_above": true, + "close_below": true } \ No newline at end of file diff --git a/src/nls/root/strings.js b/src/nls/root/strings.js index 51ea079cd54..d14f35930b1 100644 --- a/src/nls/root/strings.js +++ b/src/nls/root/strings.js @@ -179,6 +179,9 @@ define({ "CMD_OPEN_FOLDER" : "Open Folder\u2026", "CMD_FILE_CLOSE" : "Close", "CMD_FILE_CLOSE_ALL" : "Close All", + "CMD_FILE_CLOSE_OTHERS" : "Close Others", + "CMD_FILE_CLOSE_ABOVE" : "Close Others Above", + "CMD_FILE_CLOSE_BELOW" : "Close Others Below", "CMD_FILE_SAVE" : "Save", "CMD_FILE_SAVE_ALL" : "Save All", "CMD_FILE_SAVE_AS" : "Save As\u2026", From 0f0d60e2b19698c8b79bd9f45007ee6debc57c61 Mon Sep 17 00:00:00 2001 From: larz0 Date: Sat, 24 Aug 2013 10:48:25 -0700 Subject: [PATCH 0004/1140] Applied tweaks. --- src/styles/brackets_colors.less | 3 +- src/styles/brackets_patterns_override.less | 38 ++++++++++++++++------ 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/src/styles/brackets_colors.less b/src/styles/brackets_colors.less index 9d851701399..b5cc3a7900a 100644 --- a/src/styles/brackets_colors.less +++ b/src/styles/brackets_colors.less @@ -70,6 +70,8 @@ @tc-icon-down: 0.5; @tc-disabled-opacity: 0.3; +@tc-link: #0083e8; +@tc-link-hover: #0083e8; @tc-dropdown-shadow: 0 3px 9px rgba(0, 0, 0, 0.24); @tc-gray-panel: #dfe2e2; @tc-gray-panel-border: rgba(0, 0, 0, 0.12); @@ -110,4 +112,3 @@ @tc-light-weight-quiet-text: #777; @tc-warning-background: #FDF5CC; @tc-warning-text: #635301; - diff --git a/src/styles/brackets_patterns_override.less b/src/styles/brackets_patterns_override.less index 542ddad08cd..f8751673474 100644 --- a/src/styles/brackets_patterns_override.less +++ b/src/styles/brackets_patterns_override.less @@ -31,6 +31,20 @@ * */ +// Links +// ------------------------- + +a { + color: @tc-link; + text-decoration: none; +} + +a:hover, +a:focus { + color: @tc-link-hover; + text-decoration: underline; +} + .panel { .vbox; .box-flex(1); @@ -392,6 +406,7 @@ background-color: @tc-gray-panel; border-top: 1px solid @tc-gray-panel-separator; box-shadow: none; + padding: 10px 15px 12px; white-space: nowrap; } @@ -430,6 +445,7 @@ .modal-backdrop { opacity: 0; } + .modal-backdrop:last-child { /* Only show the last modal backdrop */ opacity: 0.5; @@ -440,17 +456,17 @@ color: @tc-light-weight-text; margin-bottom: 0; margin-top: 0; - font-size: 26px; - line-height: 40px; - font-weight: @font-weight-light; + font-size: 22px; + line-height: 30px; + font-weight: normal; } .dialog-message { - color: @tc-light-weight-text; + color: @tc-text; font-size: 14px; line-height: 20px; margin-bottom: 20px; - font-weight: @font-weight-light; + font-weight: normal; } .dialog-message li { @@ -658,16 +674,16 @@ width: 220px; } .ext-name { - color: #000; + color: @tc-text; display: block; font-size: 15px; - font-weight: @font-weight-light; + font-weight: normal; .user-select(text); cursor: text; } .ext-desc { - color: #000; - font-weight: @font-weight-light; + color: @tc-text; + font-weight: normal; width: auto; .user-select(text); cursor: text; @@ -727,7 +743,7 @@ } .about-contributors { min-height: 100px; - + a { text-decoration: none; } @@ -778,6 +794,8 @@ input[type="color"], border: 1px solid @tc-input-border; color: @tc-text; font-size: @baseFontSize + 1px; + font-weight: @font-weight-semibold; + -webkit-font-smoothing: antialiased; .border-radius(@tc-control-border-radius); .box-shadow(@tc-input-inner-shadow); .transition(~"border linear 0s, box-shadow linear 0s"); From 969a4f920b6ddd7a49bbafa2bda0a570c8382858 Mon Sep 17 00:00:00 2001 From: larz0 Date: Sat, 24 Aug 2013 10:52:39 -0700 Subject: [PATCH 0005/1140] Made comment consistent with rest of the coments. --- 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 f8751673474..64678845820 100644 --- a/src/styles/brackets_patterns_override.less +++ b/src/styles/brackets_patterns_override.less @@ -31,8 +31,7 @@ * */ -// Links -// ------------------------- +/* Links */ a { color: @tc-link; From e9153193d5abd90715fef6f95a5246f795d0bb60 Mon Sep 17 00:00:00 2001 From: larz0 Date: Sat, 24 Aug 2013 11:08:45 -0700 Subject: [PATCH 0006/1140] Styled link focus state. --- src/styles/brackets_patterns_override.less | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/styles/brackets_patterns_override.less b/src/styles/brackets_patterns_override.less index 64678845820..a3f0d2455e5 100644 --- a/src/styles/brackets_patterns_override.less +++ b/src/styles/brackets_patterns_override.less @@ -38,12 +38,19 @@ a { text-decoration: none; } -a:hover, -a:focus { +a:hover { color: @tc-link-hover; text-decoration: underline; } +a:focus { + color: @tc-link-hover; + outline: 0; + border-radius: 3px; + box-shadow: @tc-input-glow; + text-decoration: none; +} + .panel { .vbox; .box-flex(1); From e8fae975c2ec09c6452f1a15574c3a178fd850ec Mon Sep 17 00:00:00 2001 From: sathyamoorthi Date: Sun, 25 Aug 2013 09:54:50 +0530 Subject: [PATCH 0007/1140] naming convention changes --- src/document/DocumentCommandHandlers.js | 2 +- src/document/DocumentManager.js | 11 +++++------ 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/src/document/DocumentCommandHandlers.js b/src/document/DocumentCommandHandlers.js index e3e3f2fb0b5..6a4d805d772 100644 --- a/src/document/DocumentCommandHandlers.js +++ b/src/document/DocumentCommandHandlers.js @@ -992,7 +992,7 @@ define(function (require, exports, module) { // guarantees that handlers run in the order they are added. result.done(function () { if (!promptOnly) { - DocumentManager.closeDocuments(list); + DocumentManager.removeFilesFromWorkingSet(list); } }); diff --git a/src/document/DocumentManager.js b/src/document/DocumentManager.js index 51b75206c31..6d7179a18fe 100644 --- a/src/document/DocumentManager.js +++ b/src/document/DocumentManager.js @@ -317,7 +317,7 @@ define(function (require, exports, module) { $(exports).triggerHandler("workingSetAddList", [uniqueFileList]); } - function _removeFromArrays(file) { + function _internalRemoveFromWorkingSet(file) { // If doc isn't in working set, do nothing var index = findInWorkingSet(file.fullPath); if (index === -1) { @@ -333,19 +333,18 @@ define(function (require, exports, module) { } function removeFromWorkingSet(file, suppressRedraw) { - if (_removeFromArrays(file)) { + if (_internalRemoveFromWorkingSet(file)) { $(exports).triggerHandler("workingSetRemove", [file, suppressRedraw]); } } - function closeDocuments(fileList) { - + function removeFilesFromWorkingSet(fileList) { if (!fileList) { return; } fileList.forEach(function (file) { - _removeFromArrays(file); + _internalRemoveFromWorkingSet(file); }); // Dispatch event @@ -952,7 +951,7 @@ define(function (require, exports, module) { exports.addToWorkingSet = addToWorkingSet; exports.addListToWorkingSet = addListToWorkingSet; exports.removeFromWorkingSet = removeFromWorkingSet; - exports.closeDocuments = closeDocuments; + exports.removeFilesFromWorkingSet = removeFilesFromWorkingSet; exports.getNextPrevFile = getNextPrevFile; exports.swapWorkingSetIndexes = swapWorkingSetIndexes; exports.sortWorkingSet = sortWorkingSet; From 9e412f06ca2145dc67d048e3397fadaf17c86d80 Mon Sep 17 00:00:00 2001 From: sathyamoorthi Date: Wed, 28 Aug 2013 12:22:18 +0530 Subject: [PATCH 0008/1140] removeFromWrokingSet() changed to handle array of files. --- src/document/DocumentCommandHandlers.js | 2 +- src/document/DocumentManager.js | 32 ++++++++++--------------- 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/src/document/DocumentCommandHandlers.js b/src/document/DocumentCommandHandlers.js index 63d34c5f416..7e7347523b6 100644 --- a/src/document/DocumentCommandHandlers.js +++ b/src/document/DocumentCommandHandlers.js @@ -992,7 +992,7 @@ define(function (require, exports, module) { // guarantees that handlers run in the order they are added. result.done(function () { if (!promptOnly) { - DocumentManager.removeFilesFromWorkingSet(list); + DocumentManager.removeFromWorkingSet(list); } }); diff --git a/src/document/DocumentManager.js b/src/document/DocumentManager.js index 6d7179a18fe..b5337ffc5a2 100644 --- a/src/document/DocumentManager.js +++ b/src/document/DocumentManager.js @@ -331,26 +331,21 @@ define(function (require, exports, module) { return true; } - - function removeFromWorkingSet(file, suppressRedraw) { - if (_internalRemoveFromWorkingSet(file)) { - $(exports).triggerHandler("workingSetRemove", [file, suppressRedraw]); - } - } - - function removeFilesFromWorkingSet(fileList) { - if (!fileList) { - return; - } - - fileList.forEach(function (file) { - _internalRemoveFromWorkingSet(file); - }); - // Dispatch event - $(exports).triggerHandler("workingSetRemoveList", [fileList]); + function removeFromWorkingSet(content, suppressRedraw) { + if (content) { + if ($.isArray(content)) { + content.forEach(function (file) { + _internalRemoveFromWorkingSet(file); + }); + + $(exports).triggerHandler("workingSetRemoveList", [content]); + + } else if (_internalRemoveFromWorkingSet(content)) { + $(exports).triggerHandler("workingSetRemove", [content, suppressRedraw]); + } + } } - /** * Removes all files from the working set list. @@ -951,7 +946,6 @@ define(function (require, exports, module) { exports.addToWorkingSet = addToWorkingSet; exports.addListToWorkingSet = addListToWorkingSet; exports.removeFromWorkingSet = removeFromWorkingSet; - exports.removeFilesFromWorkingSet = removeFilesFromWorkingSet; exports.getNextPrevFile = getNextPrevFile; exports.swapWorkingSetIndexes = swapWorkingSetIndexes; exports.sortWorkingSet = sortWorkingSet; From 6594993b51f972d55a258e20b89e80974ff4becc Mon Sep 17 00:00:00 2001 From: Lawrence Hsu Date: Wed, 28 Aug 2013 13:47:22 -0700 Subject: [PATCH 0009/1140] Fixed conflicts. --- src/styles/brackets_patterns_override.less | 13 ------------- 1 file changed, 13 deletions(-) diff --git a/src/styles/brackets_patterns_override.less b/src/styles/brackets_patterns_override.less index fe90b6f6e51..2abb5f8e983 100644 --- a/src/styles/brackets_patterns_override.less +++ b/src/styles/brackets_patterns_override.less @@ -701,31 +701,18 @@ a:focus { width: 220px; } .ext-name { -<<<<<<< HEAD color: @tc-text; -======= ->>>>>>> 60dc6b72ff1ffb22b3382475a9ffebacc1364fed display: block; - color: #000; font-size: 15px; -<<<<<<< HEAD font-weight: normal; -======= - font-weight: @font-weight-light; .less-faint-on-win(); ->>>>>>> 60dc6b72ff1ffb22b3382475a9ffebacc1364fed .user-select(text); cursor: text; } .ext-desc { -<<<<<<< HEAD color: @tc-text; font-weight: normal; -======= - color: #000; - font-weight: @font-weight-light; .less-faint-on-win(); ->>>>>>> 60dc6b72ff1ffb22b3382475a9ffebacc1364fed width: auto; .user-select(text); cursor: text; From 574b63c3d1df976760b143d04e853081f97662f4 Mon Sep 17 00:00:00 2001 From: Lawrence Hsu Date: Wed, 28 Aug 2013 13:48:16 -0700 Subject: [PATCH 0010/1140] Cleaned up spaces. --- src/styles/brackets.less | 194 ++++++++++----------- src/styles/brackets_patterns_override.less | 8 +- 2 files changed, 101 insertions(+), 101 deletions(-) diff --git a/src/styles/brackets.less b/src/styles/brackets.less index b38e9dd477b..3e3968a8633 100644 --- a/src/styles/brackets.less +++ b/src/styles/brackets.less @@ -1,28 +1,28 @@ /* * 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 + * 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, + * 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 + * 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. - * + * */ /* - * This file first imports all of the shared LESS/CSS, and then defines + * This file first imports all of the shared LESS/CSS, and then defines * version-specific layout (e.g. layout for the App shell, or layout for * the In-Browser version on Firefox). * @@ -31,7 +31,7 @@ * * Anything that is general/reusable should be pushed up into a LESS file * in the "styles" directory. See "brackets_shared.less" for the organization - * + * * Date: @DATE */ @@ -46,16 +46,16 @@ html, body { height: 100%; overflow: hidden; - + /* Turn off selection for UI elements */ .user-select(none); - + /* And make sure we get a pointer cursor even over text */ cursor: default; - + /* Turn off subpixel antialiasing on Mac since it flickers during animations. */ -webkit-font-smoothing: antialiased; - + /* This is a hack to avoid flicker when animations (like inline editors) that use the GPU complete. It seems that we have to put it here rather than on the animated element in order to prevent the entire window from flashing. @@ -75,11 +75,11 @@ body { width: 100%; height: 100%; z-index: @z-index-brackets-panel-resizer; - + &.horz-resizing { cursor: col-resize; } - + &.vert-resizing { cursor: row-resize; } @@ -115,7 +115,7 @@ a, img { #titlebar, .modal-bar { border-bottom: 1px solid @tc-gray-panel-border; box-shadow: @tc-small-shadow-bottom; - + // Make sure the bottom box-shadow goes above the editor (position: relative needed to start a new stacking group) position: relative; z-index: @z-index-brackets-toolbar; @@ -133,17 +133,17 @@ a, img { color: @tc-text; font-family: @sansFontFamily; font-size: 11px; - line-height: 25px; + line-height: 25px; height: 26px; overflow: hidden; } - + #status-info { color: @tc-text; left: 10px; position: absolute; white-space: nowrap; - + div { display: inline; } @@ -160,7 +160,7 @@ a, img { right: 0; text-align: right; white-space: nowrap; - + > div { border-left: 1px solid rgba(0, 0, 0, 0.1); float: right; @@ -171,7 +171,7 @@ a, img { margin: 6px 10px; padding: 0; } - + #status-language { border-right: 1px solid rgba(0, 0, 0, 0.1); } @@ -230,7 +230,7 @@ a, img { #editor-holder { position: relative; - + /* Placeholder shown when there is no editor open */ #not-editor { height: 100%; @@ -266,7 +266,7 @@ a, img { border-top-style: solid; border-width: 1px; border-color: @tc-gray-panel-border; - + .toolbar { background-color: @tc-gray-panel-top-bar; border-bottom: @tc-gray-panel-top-bar-shadow; @@ -286,7 +286,7 @@ a, img { top: 6px; } } - + .table-container { height: 170px; overflow: auto; @@ -296,12 +296,12 @@ a, img { padding-left: @base-padding; padding-right: @base-padding; } - + .highlight { background: #fff; border-radius: 2px; } - + tr.selected td { background-color: @tc-highlight; } @@ -313,7 +313,7 @@ a, img { } #toolbar-go-live { - // background-position is 0 0 for 24x24 icons + // background-position is 0 0 for 24x24 icons // Default icon is for the 'disconnected' state // The 'connecting failed' (.warning) state also maps here .sprite-icon(0, 0, 24px, 24px, "images/live_development_sprites.svg"); @@ -358,7 +358,7 @@ a, img { opacity: 0; cursor: col-resize; } - + #project-files-header { border-top: 1px solid #56595a; padding: 8px 0 9px 12px; @@ -372,48 +372,48 @@ a, img { padding: 0px; max-height: 200px; // TODO (Issue #276): it would be nicer to have this be 50%, but that doesn't seem to work - + ul { list-style-type: none; margin: 0; padding-bottom: 23px; } - + li { position: relative; // so that children can be positioned absolute line-height: 18px; padding: 0 0 0 8px; min-height: 18px; vertical-align: baseline; - + &.selected a { color: @open-working-file-name-highlight; } - + &.selected .extension { color: @open-working-file-ext-highlight; } } - + a { color: #fff; - + font-size: 13px; text-decoration: none; - + display: block; height: 16px; line-height: 15px; margin-left: 18px; padding: 3px (@sidebar-triangle-size * 2) 3px 0; - + cursor: default; .directory { font-size: 11px; } } - + .extension, .directory { color: @project-panel-text-2; } @@ -436,18 +436,18 @@ a, img { .sidebar-selection-triangle.triangle-visible:before { content: ""; - + border-top: @sidebar-triangle-size solid transparent; - border-bottom: (@sidebar-triangle-size - 1) solid transparent; + border-bottom: (@sidebar-triangle-size - 1) solid transparent; border-left: @sidebar-triangle-size solid #2D2E30; - + display: block; position: absolute; top: -1px; right: -9px; width: 0; height: 0; - + .scale-x(0.8, right, top); } @@ -458,15 +458,15 @@ a, img { #project-files-container { .box-flex(1); - + .jstree-brackets li > a { padding-right: @sidebar-triangle-size * 2; } - + ul { padding-left: 8px; } - + > ul { padding-bottom: 24px; } @@ -478,13 +478,13 @@ a, img { height: 5px; position: fixed; z-index: @z-index-brackets-scroller-shadow; - + &.top { #gradient > .vertical(rgba(0,0,0,0.1), rgba(0,0,0,0)); background-position: 0 -5px; background-color: transparent; /* override background-color: @endColor from #gradient.vertical */ } - + &.bottom { #gradient > .vertical(rgba(0,0,0,0), rgba(0,0,0,0.1)); background-position: 0 5px; @@ -495,7 +495,7 @@ a, img { @jstree-sprite-size: 18px; // this is hardcoded in jsTree's JS code -/** Classes for icons from jsTreeSprites.svg +/** Classes for icons from jsTreeSprites.svg */ .jstree-sprite { background-image: url("images/jsTreeSprites.svg"); @@ -520,7 +520,7 @@ a, img { -webkit-filter: drop-shadow(0 1px 1px rgba(0, 0, 0, 0.36)); } -/** Classes for icons from bracketSprites.png +/** Classes for icons from bracketSprites.png */ .bracket-sprite { background-image: url("images/close_btn.svg"); @@ -539,19 +539,19 @@ a, img { position: absolute; left: 0px; top: 1px; - + &.dirty { background-position: -30px 0; } - + &.can-close { background-position: 0 0; } - + &.can-close:hover { background-position: -15px 0; } - + &.can-close:active { background-position: -15px 0; opacity: @tc-icon-down; @@ -571,7 +571,7 @@ a, img { // Make the animation use the GPU--especially important for retina. -webkit-transform: translateZ(0); transform: translateZ(0); - + transition: height 250ms cubic-bezier(0, 1.02, 0.6, 1); } @@ -579,32 +579,32 @@ a, img { /* remove CodeMirror default height: 300px */ height: auto; } - + .inline-editor-header { padding: 10px 10px 0px 10px; - + .filename { font-family: @sansFontFamily; font-size: 1.1em; color: @inline-color-1; - + // Filename header is clickable (it's an tag, so we get underscore on hover by // default; but the hand cursor is shut off by Bootstrap's reset stylesheet) cursor: pointer; - + .dirty-indicator { .bracket-sprite; display: inline-block; background-position: -32px 0; padding-top: 3px; } - + .line-number { color: @inline-color-2; } } } - + .shadow { display: block; height: 4px; @@ -614,20 +614,20 @@ a, img { left: 0; z-index: @z-index-brackets-inline-editor-shadow; } - + .shadow.top { top: 0px; background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0.1), rgba(0, 0, 0, 0)); } - + .shadow.bottom { bottom: 0px; background-image: -webkit-linear-gradient(top, rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.1)); } - + .CodeMirror-scroll { background-color: transparent; - + .CodeMirror-linenumbers { background-color: @inline-background-color-1; } @@ -637,7 +637,7 @@ a, img { /* CSSInlineEditor rule list */ .related-container { @top-margin: 12px; - + float: right; position: relative; min-height: 100%; @@ -646,7 +646,7 @@ a, img { max-width: 50%; overflow: hidden; background: @inline-background-color-2; - + .selection { width: 100%; background: #d0d5d5; @@ -654,12 +654,12 @@ a, img { border-top: 1px solid darken(@inline-background-color-3, @bc-color-step-size); border-bottom: 1px solid lighten(@inline-background-color-3, @bc-color-step-size); top: @top-margin; - + &.animate { transition: top 0.1s ease-out; } } - + /* * CSS triangle hack with anti-alias workarounds: * (a) Use selection-background-color instead of transparent. @@ -677,20 +677,20 @@ a, img { top: 50%; .scale-x(0.9, left, top); } - + .related { font-size: 12px; position: absolute; top: 0; left: 1px; width: 100%; - + ul { margin: 0; padding: @top-margin 0px; list-style: none; } - + li { color: @inline-color-2; margin: 0; @@ -699,7 +699,7 @@ a, img { text-overflow: ellipsis; white-space: nowrap; } - + .selected { color: @inline-color-3; transition: color 0.1s ease-out .15s; @@ -828,32 +828,32 @@ a, img { position: absolute; left: 0; right: 0; - top: 0; + top: 0; -webkit-transform: translate(0, -44px); transform: translate(0, -44px); transition: -webkit-transform 266ms cubic-bezier(0, 0.56, 0, 1); transition: transform 266ms cubic-bezier(0, 0.56, 0, 1); - + body:not(.has-appshell-menus) & { top: 37px; - } + } } .modal-bar { display: block; text-align: left; - + font-family: @sansFontFamily; font-size: 14px; color: @tc-text; background: @tc-gray-panel; - overflow: hidden; + overflow: hidden; padding: 5px 4px 4px 14px; - + -webkit-transform: translate(0, 0); // Prefix still required. transition: -webkit-transform 66ms cubic-bezier(0, 0.62, 0.04, 0.99); - z-index: @z-index-brackets-modalbar; - + z-index: @z-index-brackets-modalbar; + body.in-browser &, body:not(.has-appshell-menus) & { // Separator line between us and the HTML menu/titlebar above @@ -867,10 +867,10 @@ a, img { width: 20em; margin: 5px 5px 0; position: relative; - top: -3px; + top: -3px; &.no-results { border: 1px solid #bc0023; - box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.12), 0 0 0 2px rgba(255, 0, 120, 0.5); + box-shadow: inset 0 1px 0 rgba(0, 0, 0, 0.12), 0 0 0 2px rgba(255, 0, 120, 0.5); } } @@ -879,7 +879,7 @@ a, img { } .modal-bar .error { display: none; - + .alert { padding-top: 4px; padding-bottom: 4px; @@ -910,19 +910,19 @@ a, img { /* Quick Open search bar & dropdown */ .smart_autocomplete_container { - + // the borders show up even if the container is empty, must set height to zero using JS. border: 1px solid @tc-gray-panel-border; - + background-color: @tc-gray-panel; border-radius: 0 0 4px 4px; box-shadow: @tc-normal-shadow-bottom; - + // so that border won't show when height is 0. - box-sizing: border-box; - + box-sizing: border-box; + // using this to fix the spacing that breaks item seperators and had to use !important to override inline css - width: 434px !important; + width: 434px !important; /* smart auto complete doesn't correctly position the container * so these specific padding and margin values are necessary*/ @@ -943,11 +943,11 @@ a, img { cursor: default; padding: 6px 10px; } - + li:nth-child(odd) { background-color: #e6e9e9; } - + li.smart_autocomplete_highlight { background-color: @tc-highlight; } @@ -978,7 +978,7 @@ a, img { -webkit-animation: spinner-sprites-12 1.2s steps(10) infinite; visibility: visible; } - + &.large { width: 36px; height: 36px; @@ -991,7 +991,7 @@ a, img { } } // Retina versions -@media only screen and (-webkit-min-device-pixel-ratio: 2), +@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-device-pixel-ratio: 2) { .spinner { background-image: url("images/spinner_small_sprites12@2x.png"); diff --git a/src/styles/brackets_patterns_override.less b/src/styles/brackets_patterns_override.less index 2abb5f8e983..046c9fd46f2 100644 --- a/src/styles/brackets_patterns_override.less +++ b/src/styles/brackets_patterns_override.less @@ -44,7 +44,7 @@ a:hover { } a:focus { - color: @tc-link-hover; + color: @tc-link-hover; outline: 0; border-radius: 3px; box-shadow: @tc-input-glow; @@ -163,8 +163,8 @@ a:focus { > a:active { background-color: rgba(0, 0, 0, 0.66) !important; } - } - + } + .bottom-buttons { position: absolute; bottom: 5px; @@ -503,7 +503,7 @@ a:focus { .dialog-filename { word-wrap: break-word; - + font-weight: normal; body.platform-win & { // maintain contrast next to ".less-faint-on-win()" workaround font-weight: @font-weight-semibold; From 3078fcfb8676cfba20b1e7a6370d7e7c784b422c Mon Sep 17 00:00:00 2001 From: Lawrence Hsu Date: Fri, 6 Sep 2013 14:37:43 -0700 Subject: [PATCH 0011/1140] Fixed SHAs. --- src/extensions/default/JavaScriptCodeHints/thirdparty/acorn | 2 +- src/extensions/default/JavaScriptCodeHints/thirdparty/tern | 2 +- src/thirdparty/CodeMirror2 | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/extensions/default/JavaScriptCodeHints/thirdparty/acorn b/src/extensions/default/JavaScriptCodeHints/thirdparty/acorn index a84e21e0ffc..c152be4a2e8 160000 --- a/src/extensions/default/JavaScriptCodeHints/thirdparty/acorn +++ b/src/extensions/default/JavaScriptCodeHints/thirdparty/acorn @@ -1 +1 @@ -Subproject commit a84e21e0ffc415e2eb729aad88097a1c7ecdb568 +Subproject commit c152be4a2e8383a21c573ba0b2495afc9ae84643 diff --git a/src/extensions/default/JavaScriptCodeHints/thirdparty/tern b/src/extensions/default/JavaScriptCodeHints/thirdparty/tern index fb2bb83134c..21c9f963b94 160000 --- a/src/extensions/default/JavaScriptCodeHints/thirdparty/tern +++ b/src/extensions/default/JavaScriptCodeHints/thirdparty/tern @@ -1 +1 @@ -Subproject commit fb2bb83134c1a1dec46459da7d22189974ea1ec5 +Subproject commit 21c9f963b94f6ad077f95d182e9b4568c0d3874d diff --git a/src/thirdparty/CodeMirror2 b/src/thirdparty/CodeMirror2 index a71f5fced23..c8c7fc18af5 160000 --- a/src/thirdparty/CodeMirror2 +++ b/src/thirdparty/CodeMirror2 @@ -1 +1 @@ -Subproject commit a71f5fced2348a617e49a84e3252feb8702e43f6 +Subproject commit c8c7fc18af5f025733a930fea202d98e54e12a5e From 5f406fc78f663a59c4b7177daf1d308ad5c98176 Mon Sep 17 00:00:00 2001 From: Mohammad Yaghobi Date: Tue, 10 Sep 2013 19:11:32 +0430 Subject: [PATCH 0012/1140] Persian language Translated to Persian language --- src/nls/fa-ir/strings.js | 476 +++++++++++++++++++++++++++++++++++++++ src/nls/fa-ir/urls.js | 32 +++ src/nls/strings.js | 1 + 3 files changed, 509 insertions(+) create mode 100644 src/nls/fa-ir/strings.js create mode 100644 src/nls/fa-ir/urls.js diff --git a/src/nls/fa-ir/strings.js b/src/nls/fa-ir/strings.js new file mode 100644 index 00000000000..7eac7d73d48 --- /dev/null +++ b/src/nls/fa-ir/strings.js @@ -0,0 +1,476 @@ +/* + * 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 */ +//********************* Translated by: Mohammad.Yaghobi +//********************* info@pgrammer.com --- m.yaghobi.abc@gmail.com + +define({ + + /** + * Errors + */ + + // General file io error strings + "APP_NAME" : "براکتس", + "GENERIC_ERROR" : "(خطا {0})", + "NOT_FOUND_ERR" : "پرونده پیدا نشد.", + "NOT_READABLE_ERR" : "فایل قابل خواندن نیست.", + "NO_MODIFICATION_ALLOWED_ERR" : "دایرکتوری هدف قابل ویرایش نیست.", + "NO_MODIFICATION_ALLOWED_ERR_FILE" : "دسترسی های تعریف شده برای شما اجازه تغییرات را نمی دهند.", + "FILE_EXISTS_ERR" : "پرونده یا پوشه مد نظر موجود می باشد.", + "FILE" : "پرونده", + "DIRECTORY" : "پوشه", + + // Project error strings + "ERROR_LOADING_PROJECT" : "خطا در بارگذاری پروژه", + "OPEN_DIALOG_ERROR" : "خطا در بازکردن پرونده خوان. (خطا {0})", + "REQUEST_NATIVE_FILE_SYSTEM_ERROR" : "خطا بهنگام بارگذاری پوشه {0}. (خطا {1})", + "READ_DIRECTORY_ENTRIES_ERROR" : "بروز خطا در خواندن اطلاعات پوشه {0}. (خطا {1})", + + // File open/save error string + "ERROR_OPENING_FILE_TITLE" : "خطا در بازکردن پرونده", + "ERROR_OPENING_FILE" : "خطا بهنگام تلاش برای باز کردن پرونده {0}. {1}", + "ERROR_OPENING_FILES" : "خطا بهنگام بارگذاری پرونده های زیر:", + "ERROR_RELOADING_FILE_TITLE" : "خطا در بارگذاری تغییرات از حافظه", + "ERROR_RELOADING_FILE" : "بروز خطا بهنگام تلاش برای بارگذاری پرونده {0}. {1}", + "ERROR_SAVING_FILE_TITLE" : "خطا در ذخیره سازی پرونده", + "ERROR_SAVING_FILE" : "بروز خطا بهنگام تلاش جهت ذخیره پرونده {0}. {1}", + "ERROR_RENAMING_FILE_TITLE" : "خطا در تغییر نام پرونده", + "ERROR_RENAMING_FILE" : "بروز خطا بهنگام تلاش برای تغییر نام پرونده {0}. {1}", + "ERROR_DELETING_FILE_TITLE" : "خطا در حذف پرونده", + "ERROR_DELETING_FILE" : "بروز خطا بهنگام تلاش برای جذف پرونده {0}. {1}", + "INVALID_FILENAME_TITLE" : "مقدار وارد شده {0} معتبر نمی باشد", + "INVALID_FILENAME_MESSAGE" : "نام پرونده نمی تواند شامل مقادیر زیر باشد: /?*:;{}<>\\| or use any system reserved words.", + "FILE_ALREADY_EXISTS" : "پرونده ای با نام {0} {1} وجود دارد.", + "ERROR_CREATING_FILE_TITLE" : "خطا در ایجاد {0}", + "ERROR_CREATING_FILE" : "بروز خطا بهنگام ایجاد {0} {1}. {2}", + + // Application error strings + "ERROR_IN_BROWSER_TITLE" : "!!! {APP_NAME} در مرورگرها اجرا نمی شود.", + "ERROR_IN_BROWSER" : "{APP_NAME} با HTML ساخته شده, ولی هم اکنون بعنوان یک برنامه رومیزی(desktop) اجرا می شود و شما می توانید از آن جهت ویرایش پرونده های خود استفاده نمایید.", + + // FileIndexManager error string + "ERROR_MAX_FILES_TITLE" : "خطا در فهرست بندی پرونده ها", + "ERROR_MAX_FILES" : "مقدار پرونده های قابل فهرست بندی به حداکثر رسیده بهمین علیت عملگر بهنگام فهرست بندی با خطا مواجه می شود.", + + // Live Development error strings + "ERROR_LAUNCHING_BROWSER_TITLE" : "خطا در اجرای مرورگر", + "ERROR_CANT_FIND_CHROME" : "مرورگر Google Chrome پیدا نشد. لطفا از نصب بودن آن اطمینان حاصل کنید.", + "ERROR_LAUNCHING_BROWSER" : "بروز خطا بهنگام اجرای مرورگر. (error {0})", + + "LIVE_DEVELOPMENT_ERROR_TITLE" : "خطا در پیشنمایش زنده", + "LIVE_DEVELOPMENT_RELAUNCH_TITLE" : "درحال اتصال به مرورگر", + "LIVE_DEVELOPMENT_ERROR_MESSAGE" : "به هر صورت بهنگام اتصال به حالت پیش نمایش, مرورگر Chrome احتیاج دارد به فعال بودن اشکال زدای راه دور(خطایابی راه دور).

    آیا تمایل دارید به اجرای دوباره Chrome و فعال سازی اشکال زدای راه دور(remote debugging)?", + "LIVE_DEV_LOADING_ERROR_MESSAGE" : "ناتوان در بارگذاری صفحه توسعه زنده", + "LIVE_DEV_NEED_HTML_MESSAGE" : "باز کردن پرونده HTML به منظور راه اندازی پیش نمایش زنده.", + "LIVE_DEV_NEED_BASEURL_MESSAGE" : "جهت اجرای پیش نمایش زنده بصورت پرونده در سمت سرور(server-side), می بایست یک URL پایه برای پروژه تعریف نمایید.", + "LIVE_DEV_SERVER_NOT_READY_MESSAGE" : "خطا در اجرای سرویس دهنده HTTP برای توسعه زنده پرونده ها. لطفا دوباره تلاش کنید.", + "LIVE_DEVELOPMENT_INFO_TITLE" : "به بخش پیش نمایش زنده خوش آمدید!", + "LIVE_DEVELOPMENT_INFO_MESSAGE" : "پیش نمایش زنده {APP_NAME} به مرورگر متصل شده و یک پیش نمایش از پرونده HTML شما در مرورگرتان نشان خواهد داد, و هرگونه تغییری در کدهایتان را فورا در پیش نمایش اعمال خواهد نمود.

    در این نسخه موجود {APP_NAME}, پیش نمایش تنها با مرورگر Google Chrome برای اعمال فوری مقادیر CSS files برای حالت پیش نمایش کار خواهد کرد. هرگونه تغییری در پرونده های HTML یا JavaScript بصورت خودکار بعد از ذخیر بارگذاری خواهد شد.

    (شما این پیغام را برای بار دیگر مشاهده نخواهید کرد.)", + "LIVE_DEVELOPMENT_TROUBLESHOOTING" : "برای اطلاع بیشتر, به پیوند روبرو مراجعه کنید
    Troubleshooting Live Development connection errors.", + + "LIVE_DEV_STATUS_TIP_NOT_CONNECTED" : "پیش نمایش زنده", + "LIVE_DEV_STATUS_TIP_PROGRESS1" : "پیش نمایش زنده: درحال اتصال\u2026", + "LIVE_DEV_STATUS_TIP_PROGRESS2" : "پیش نمایش زنده: درحال مقدار دهی اولیه\u2026", + "LIVE_DEV_STATUS_TIP_CONNECTED" : "قطع اتصال از پیش نمایش زنده", + "LIVE_DEV_STATUS_TIP_OUT_OF_SYNC" : "پیش نمایش زنده: جهت قطع اتصال کلیک کنید (ذخیره پرونده ها جهت بروز رسانی)", + + "LIVE_DEV_DETACHED_REPLACED_WITH_DEVTOOLS" : "پیش نمایش زنده لغو شد زیرا از برخی از ابزارهای توسعه مختص مرورگرتان استفاده کرده اید.", + "LIVE_DEV_DETACHED_TARGET_CLOSED" : "پیش نمایش زنده لغو شد زیرا پنجره یا زبانه مربوط به صفحه در مرورگر بسته شده.", + "LIVE_DEV_NAVIGATED_AWAY" : "پیش نمایش زنده لغو شد زیرا پنجره یا زبانه موجود در مرورگر آدرس دیگری را پیمایش کرده است.", + "LIVE_DEV_CLOSED_UNKNOWN_REASON" : "پیش نمایش زنده بدلیل نامشخصی لغو شد ({0})", + + "SAVE_CLOSE_TITLE" : "ذخیره تغییرات", + "SAVE_CLOSE_MESSAGE" : "آیا مایلید تغییرات داده شده در سند ذخیره گردند {0}?", + "SAVE_CLOSE_MULTI_MESSAGE" : "آیا مایلید تغییرات داده شده در پرونده های زیر، ذخیره گردند?", + "EXT_MODIFIED_TITLE" : "تغییرات خارجی", + "CONFIRM_FOLDER_DELETE_TITLE" : "تائید حذف", + "CONFIRM_FOLDER_DELETE" : "آیا مطمئنید می خواهید این پوشه حذف گردد {0}?", + "FILE_DELETED_TITLE" : "پرونده حذف گردید", + "EXT_MODIFIED_MESSAGE" : "{0} تغییراتی بر روی دیسک انجام شده, ولی تغییرات بر روی {APP_NAME} ذخیره نگردیده.

    کدام نسخه را می خواهید نگه دارید?", + "EXT_DELETED_MESSAGE" : "{0} برخی مقادیر از دیسک حذف شده, ولی تغییرات بر روی {APP_NAME} اعمال/ذخیره نشده.

    آیا می خواهید تغییرات را حفظ کنید?", + + // Find, Replace, Find in Files + "SEARCH_REGEXP_INFO" : "برای جستجوی regexp از /re/ استفاده کنید", + "FIND_RESULT_COUNT" : "{0} نتایج", + "FIND_RESULT_COUNT_SINGLE" : "1 نتیجه", + "FIND_NO_RESULTS" : "بی نتیجه", + "WITH" : "با", + "BUTTON_YES" : "بله", + "BUTTON_NO" : "خیر", + "BUTTON_REPLACE_ALL" : "همه موارد\u2026", + "BUTTON_STOP" : "ایست", + "BUTTON_REPLACE" : "جایگزینی", + + "OPEN_FILE" : "باز کردن پرونده", + "SAVE_FILE_AS" : "ذخیره پرونده", + "CHOOSE_FOLDER" : "انتخاب پوشه", + + "RELEASE_NOTES" : "نکات و یادداشت های انتشار", + "NO_UPDATE_TITLE" : "بروز هستید!", + "NO_UPDATE_MESSAGE" : "شما درحال استفاده از آخرین نسخه {APP_NAME} هستید.", + + "FIND_REPLACE_TITLE_PART1" : "جایگزینی \"", + "FIND_REPLACE_TITLE_PART2" : "\" با \"", + "FIND_REPLACE_TITLE_PART3" : "\" — {2} {0} {1}", + + "FIND_IN_FILES_TITLE_PART1" : "\"", + "FIND_IN_FILES_TITLE_PART2" : "\" پیدا شد", + "FIND_IN_FILES_TITLE_PART3" : "— {0} {1} in {2} {3}", + "FIND_IN_FILES_SCOPED" : "در {0}", + "FIND_IN_FILES_NO_SCOPE" : "در پروژ]", + "FIND_IN_FILES_FILE" : "پرونده", + "FIND_IN_FILES_FILES" : "پرونده ها", + "FIND_IN_FILES_MATCH" : "تطبیق", + "FIND_IN_FILES_MATCHES" : "تطبیق ها", + "FIND_IN_FILES_MORE_THAN" : "بیش تر از ", + "FIND_IN_FILES_PAGING" : "{0}—{1}", + "FIND_IN_FILES_FILE_PATH" : "پرونده: {0}", + "FIND_IN_FILES_LINE" : "خط: {0}", + + "ERROR_FETCHING_UPDATE_INFO_TITLE" : "خطا در دریافت اطلاعات بروز رسانی", + "ERROR_FETCHING_UPDATE_INFO_MSG" : "خطا بهنگام دریافت آخرین اطلاعات بروزرسانی از سرویس دهنده رخ داده. اطمینان حاصل کنید که به اینترنت متصلید و سپس دوباره تلاش کنید.", + + /** + * ProjectManager + */ + "PROJECT_LOADING" : "درحال بارگذاری\u2026", + "UNTITLED" : "عنوان گذاری نشده", + "WORKING_FILES" : "پرونده های کاری", + + /** + * Keyboard modifier names + */ + "KEYBOARD_CTRL" : "Ctrl", + "KEYBOARD_SHIFT" : "Shift", + "KEYBOARD_SPACE" : "Space", + + /** + * StatusBar strings + */ + "STATUSBAR_CURSOR_POSITION" : "خط {0}, ستون {1}", + "STATUSBAR_SELECTION_CH_SINGULAR" : " \u2014 {0} ستون انتخاب شده", + "STATUSBAR_SELECTION_CH_PLURAL" : " \u2014 {0} ستون انتخاب شده", + "STATUSBAR_SELECTION_LINE_SINGULAR" : " \u2014 {0} خط انتخاب شده", + "STATUSBAR_SELECTION_LINE_PLURAL" : " \u2014 {0} خط انتخاب شده", + "STATUSBAR_INDENT_TOOLTIP_SPACES" : "کلیک کنید تا به این فضاها منتقل شوید", + "STATUSBAR_INDENT_TOOLTIP_TABS" : "کلیک کنید تا به این زبانه ها منتقل شوید", + "STATUSBAR_INDENT_SIZE_TOOLTIP_SPACES" : "Click to change number of spaces used when indenting", + "STATUSBAR_INDENT_SIZE_TOOLTIP_TABS" : "کلیک کنید تا طول زبانه کاراکتر ها تغییر کند", + "STATUSBAR_SPACES" : "فاصله", + "STATUSBAR_TAB_SIZE" : "اندازه زبانه", + "STATUSBAR_LINE_COUNT_SINGULAR" : "\u2014 {0} خط", + "STATUSBAR_LINE_COUNT_PLURAL" : "\u2014 {0} خط ها", + + /** + * Command Name Constants + */ + + // File menu commands + "FILE_MENU" : "پرونده", + "CMD_FILE_NEW_UNTITLED" : "جدید", + "CMD_FILE_NEW" : "پرونده جدید", + "CMD_FILE_NEW_FOLDER" : "پوشه جدید", + "CMD_FILE_OPEN" : "باز کردن\u2026", + "CMD_ADD_TO_WORKING_SET" : "افزودن به محیط کاری", + "CMD_OPEN_FOLDER" : "باز کردن پوشه\u2026", + "CMD_FILE_CLOSE" : "بستن", + "CMD_FILE_CLOSE_ALL" : "بستن همه", + "CMD_FILE_SAVE" : "ذخیره", + "CMD_FILE_SAVE_ALL" : "ذخیره همه", + "CMD_FILE_SAVE_AS" : "ذخیره همه\u2026", + "CMD_LIVE_FILE_PREVIEW" : "پیش نمایش زنده", + "CMD_LIVE_HIGHLIGHT" : "نشانه گذاری پیش نمایش", + "CMD_PROJECT_SETTINGS" : "تنظیمات پروژه\u2026", + "CMD_FILE_RENAME" : "تغییر نام", + "CMD_FILE_DELETE" : "حذف", + "CMD_INSTALL_EXTENSION" : "نصب افزونه ها\u2026", + "CMD_EXTENSION_MANAGER" : "مدیریت افزونه ها\u2026", + "CMD_FILE_REFRESH" : "تازه سازی درختی پرونده", + "CMD_QUIT" : "رها سازی", + // Used in native File menu on Windows + "CMD_EXIT" : "خروج", + + // Edit menu commands + "EDIT_MENU" : "ویرایش", + "CMD_UNDO" : "Undo", + "CMD_REDO" : "Redo", + "CMD_CUT" : "بریدن", + "CMD_COPY" : "رونوشت", + "CMD_PASTE" : "چسباندن رو نوشت", + "CMD_SELECT_ALL" : "انتخاب همه", + "CMD_SELECT_LINE" : "انتخاب خط", + "CMD_FIND" : "جستجو", + "CMD_FIND_IN_FILES" : "جستجو در پرونده ها", + "CMD_FIND_IN_SUBTREE" : "جستجو در\u2026", + "CMD_FIND_NEXT" : "بعدی", + "CMD_FIND_PREVIOUS" : "قبلی", + "CMD_REPLACE" : "جایگزینی", + "CMD_INDENT" : "برجسته سازی", + "CMD_UNINDENT" : "حذف برجستگی", + "CMD_DUPLICATE" : "دو نسخه کردن", + "CMD_DELETE_LINES" : "حذف خط", + "CMD_COMMENT" : "تعویض خط نظر", + "CMD_BLOCK_COMMENT" : "تعویض قالب نظر", + "CMD_LINE_UP" : "خط را یکی به بالا ببر", + "CMD_LINE_DOWN" : "خط را یکی به پایین ببر", + "CMD_OPEN_LINE_ABOVE" : "باز کردن خط بالا", + "CMD_OPEN_LINE_BELOW" : "باز کردن خط زیرین", + "CMD_TOGGLE_CLOSE_BRACKETS" : "پرانتزها را خودکار ببند", + "CMD_SHOW_CODE_HINTS" : "نمایش نکات کد", + + // View menu commands + "VIEW_MENU" : "نمایش", + "CMD_HIDE_SIDEBAR" : "پنهان کردن نوار", + "CMD_SHOW_SIDEBAR" : "نمایش نوار", + "CMD_INCREASE_FONT_SIZE" : "افزایش سایز نوشته ها", + "CMD_DECREASE_FONT_SIZE" : "کاهش سایز نوشته ها", + "CMD_RESTORE_FONT_SIZE" : "پیشفرض سایز نوشته ها", + "CMD_SCROLL_LINE_UP" : "حرکت به بالا", + "CMD_SCROLL_LINE_DOWN" : "حرکت به پایین", + "CMD_TOGGLE_LINE_NUMBERS" : "شماره سطرها/خط ها", + "CMD_TOGGLE_ACTIVE_LINE" : "نشانه گذاری خط/سطر فعال", + "CMD_TOGGLE_WORD_WRAP" : "شکستن کلمات", + "CMD_SORT_WORKINGSET_BY_ADDED" : "مرتب سازی بر اساس ترتیب افزودن", + "CMD_SORT_WORKINGSET_BY_NAME" : "مرتب سازی بر اساس نام", + "CMD_SORT_WORKINGSET_BY_TYPE" : "مرتب سازی بر اساس نوع", + "CMD_SORT_WORKINGSET_AUTO" : "مرتب سازی خودکار", + + // Navigate menu Commands + "NAVIGATE_MENU" : "انتقال", + "CMD_QUICK_OPEN" : "باز کردن سریع", + "CMD_GOTO_LINE" : "برو به خط", + "CMD_GOTO_DEFINITION" : "تعریف جستجوی سریع", + "CMD_TOGGLE_QUICK_EDIT" : "ویرایش سریع", + "CMD_TOGGLE_QUICK_DOCS" : "مستند گزاری سریع", + "CMD_QUICK_EDIT_PREV_MATCH" : "تطبیق یافته قبلی", + "CMD_QUICK_EDIT_NEXT_MATCH" : "تطبیق یافته بعدی", + "CMD_NEXT_DOC" : "سند بعدی", + "CMD_PREV_DOC" : "سند قبلی", + "CMD_SHOW_IN_TREE" : "نمایش در پرونده درختی", + "CMD_SHOW_IN_OS" : "نمایش در OS", + + // Help menu commands + "HELP_MENU" : "راهنما", + "CMD_CHECK_FOR_UPDATE" : "برسی برای بروزرسانی", + "CMD_HOW_TO_USE_BRACKETS" : "چگونه از {APP_NAME} استفاده کنم", + "CMD_FORUM" : "{APP_NAME} انجمن گفت گو", + "CMD_RELEASE_NOTES" : "نکات انتشار", + "CMD_REPORT_AN_ISSUE" : "گذارش یک مورد", + "CMD_SHOW_EXTENSIONS_FOLDER" : "نمایش پوشه افزونه ها", + "CMD_TWITTER" : "{TWITTER_NAME} در تویتر", + "CMD_ABOUT" : "پیرامون {APP_TITLE}", + + + // Special commands invoked by the native shell + "CMD_CLOSE_WINDOW" : "بستن پنجره", + "CMD_ABORT_QUIT" : "لغو ترک", + "CMD_BEFORE_MENUPOPUP" : "قبل از منوی Popup", + + // Strings for main-view.html + "EXPERIMENTAL_BUILD" : "experimental build", + "DEVELOPMENT_BUILD" : "development build", + "OK" : "تائید", + "DONT_SAVE" : "ذخیره نکن", + "SAVE" : "ذخیره", + "CANCEL" : "لغو", + "DELETE" : "حذف", + "RELOAD_FROM_DISK" : "دوباره بارگذاری کن از دیسک", + "KEEP_CHANGES_IN_EDITOR" : "تغییرات در ویرایشگر را نگه دار", + "CLOSE_DONT_SAVE" : "بستن(بدون ذخیرهسازی)", + "RELAUNCH_CHROME" : "اجرای دوباره Chrome", + "ABOUT" : "پیرامون", + "CLOSE" : "بستن", + "ABOUT_TEXT_LINE1" : "sprint {VERSION_MINOR} {BUILD_TYPE} {VERSION}", + "ABOUT_TEXT_LINE3" : "
    یادداشتهای ها، شرایط و ضوابط مربوط به نرم افزار شخص ثالث در آدرسhttp://www.adobe.com/go/thirdparty/ جهت تلفیق و بعنوان مرجع قرار داده شده.", + "ABOUT_TEXT_LINE4" : "اسناد و منابع نرم افزار در پیوند https://github.com/adobe/brackets/ در دسترس می باشد.
    ترجمه توسط: محمد یعقوبی
    info@pgrammer.com

    ", + "ABOUT_TEXT_LINE5" : "ساخته شده با \u2764 و JavaScript بدست:", + "ABOUT_TEXT_LINE6" : "بسیاری از مردم", + "ABOUT_TEXT_WEB_PLATFORM_DOCS" : "Web Platform Docs and the Web Platform graphical logo are licensed under a Creative Commons Attribution license, CC-BY 3.0 Unported.", + "UPDATE_NOTIFICATION_TOOLTIP" : "Build جدیدی از{APP_NAME} هم اکنون در دسترس است! جهت مشاهده جزئیات کلیک کنید.", + "UPDATE_AVAILABLE_TITLE" : "بروزرسانی در دسترس است", + "UPDATE_MESSAGE" : "نسخه جدیدی از {APP_NAME} هم اکنون در دسترس است. برخی از مشخصه های آن:", + "GET_IT_NOW" : "هم اکنون دانلود کنید!", + "PROJECT_SETTINGS_TITLE" : "تنظیمات پروژه برای: {0}", + "PROJECT_SETTING_BASE_URL" : "پیش نمایش URL اصلی/پایه", + "PROJECT_SETTING_BASE_URL_HINT" : "جهت استفاده از سرویس دهنده داخلی, از url بمانند http://localhost:8000/ استفاده کنید.", + "BASEURL_ERROR_INVALID_PROTOCOL" : "پروتکول {0} با پیش نمایش زنده پشتیبانی نمی شود—لطفا از http: یا https: استفاده نمایید.", + "BASEURL_ERROR_SEARCH_DISALLOWED" : "URL اصلی نمی تواند شامل پارامترهای جستجو بمانند \"{0}\" باشد.", + "BASEURL_ERROR_HASH_DISALLOWED" : "URL اصلی نمی تواند hashes مشابه \"{0}\" داشته باشد.", + "BASEURL_ERROR_INVALID_CHAR" : "برخی کاراکتر های خاص شبیه '{0}' می بایست %-encoded.", + "BASEURL_ERROR_UNKOWN_ERROR" : "خطای ناشناخته در URL اصلی/پایه", + + // Extension Management strings + "INSTALL" : "نصب", + "UPDATE" : "بروزرسانی", + "REMOVE" : "حذف", + "OVERWRITE" : "دوباره نویسی", + "CANT_REMOVE_DEV" : "افزونه های موجود در پوشه \"dev\" می بایست بصورت دستی حذف گردند.", + "CANT_UPDATE" : "بروز رسانی سازگار با این نسخه از {APP_NAME} نیست.", + "INSTALL_EXTENSION_TITLE" : "نصب افزونه", + "UPDATE_EXTENSION_TITLE" : "بروز رسانی افزونه", + "INSTALL_EXTENSION_LABEL" : "URL افزونه", + "INSTALL_EXTENSION_HINT" : "URL افزونه های دارای پرونده zip یا مخازن Github", + "INSTALLING_FROM" : "نصب افزونه ها از {0}\u2026", + "INSTALL_SUCCEEDED" : "نصب با موفقیت به اتمام رسید!", + "INSTALL_FAILED" : "نصب نا موفق.", + "CANCELING_INSTALL" : "درحال لغو\u2026", + "CANCELING_HUNG" : "عملیات لغو نصب زمان طولانیی به طول خواهد کشید. خطا یا خطا های داخلی ممکن است رخ دهد.", + "INSTALL_CANCELED" : "فرایند نصب لفو گردید.", + // These must match the error codes in ExtensionsDomain.Errors.* : + "INVALID_ZIP_FILE" : "محتوای دانلود شده دارای پرونده zip معتبر نمی باشد.", + "INVALID_PACKAGE_JSON" : "پرونده package.json معتبر نمی باشد (error was: {0}).", + "MISSING_PACKAGE_NAME" : "پرونده package.json دارای خطا در نام می باشد.", + "BAD_PACKAGE_NAME" : "نام بسته {0} نامعتبر می باشد.", + "MISSING_PACKAGE_VERSION" : "پرونده package.json دارای خطا در نسخه می باشد.", + "INVALID_VERSION_NUMBER" : "عدد نسخه این بسته ({0}) نا معتبر می باشد.", + "INVALID_BRACKETS_VERSION" : "خطا در سازگاری {APP_NAME} با رشته نامعتبر({0}).", + "DISALLOWED_WORDS" : "عبارت ({1}) اجازه وارد سازی در این فیلد را ندارد {0}.", + "API_NOT_COMPATIBLE" : "افزونه با این نسخه از برنامه {APP_NAME} سازگار نیست. در پوشه افزونه های قابل نمایش نصب نشد.", + "MISSING_MAIN" : "بسته حاوی پرونده main.js نیست.", + "EXTENSION_ALREADY_INSTALLED" : "نصب این بسته سبب دوباره نویسی پرونده های افزونه قبلی می شود. دوباره نویسی صورت گیرد?", + "EXTENSION_SAME_VERSION" : "نسخه این بسته با نسخه بسته ای که هم اکنون نصب می باشد برابر است. آیا افزونه دوباره نویسی گردد?", + "EXTENSION_OLDER_VERSION" : "این بسته نسخه {0} هست قبل تر نصب شده({1}). آیا این افزونه دوباره نویسی گردد?", + "DOWNLOAD_ID_IN_USE" : "خطای داخلی: این ID دانلود هم اکنون درحال استفاده است.", + "NO_SERVER_RESPONSE" : "ناتوان در اتصال به سرویس دهنده.", + "BAD_HTTP_STATUS" : "پرونده در سرویس دهنده یافت نشد (HTTP {0}).", + "CANNOT_WRITE_TEMP" : "ناتوان در ذخیره دانلود در یک پرونده خالی.", + "ERROR_LOADING" : "این افزونه بهنگام شروع با خطا مواجه می شود.", + "MALFORMED_URL" : "آدرس URL نا معتبر است. لطفا آن را برسی کرده و آدرس معتبر وارد سازید.", + "UNSUPPORTED_PROTOCOL" : "آدرس URL می بایست http یا https باشد.", + "UNKNOWN_ERROR" : "خطای داخلی نامشخص.", + // For NOT_FOUND_ERR, see generic strings above + "EXTENSION_MANAGER_TITLE" : "مدیریت افزونه ها", + "EXTENSION_MANAGER_ERROR_LOAD" : "ناتوان در دسترسی به افزونه های ثبت شده. لطفا بعدا تلاش کنید.", + "INSTALL_FROM_URL" : "نصب از URL\u2026", + "EXTENSION_AUTHOR" : "مولف", + "EXTENSION_DATE" : "تاریخ", + "EXTENSION_INCOMPATIBLE_NEWER" : "این افزونه احتیاج به نسخه جدیدی از {APP_NAME} دارد.", + "EXTENSION_INCOMPATIBLE_OLDER" : "نسخه فعلی این افزونه فقط با نسخه های قبلی {APP_NAME} سازگار است.", + "EXTENSION_NO_DESCRIPTION" : "بدون شرح", + "EXTENSION_MORE_INFO" : "اطلاعات بیشتر...", + "EXTENSION_ERROR" : "خطای افزونه", + "EXTENSION_KEYWORDS" : "کلمات کلیدی", + "EXTENSION_INSTALLED" : "نصب شده", + "EXTENSION_UPDATE_INSTALLED" : "این افزونه دریافت شده و بعد از ترک {APP_NAME} نصب خواهد شد.", + "EXTENSION_SEARCH_PLACEHOLDER" : "جستجو", + "EXTENSION_MORE_INFO_LINK" : "بیشتر", + "BROWSE_EXTENSIONS" : "پیمایش افزونه ها", + "EXTENSION_MANAGER_REMOVE" : "حذف افزونه", + "EXTENSION_MANAGER_REMOVE_ERROR" : "ناتوان در حذف یک یا برخی از افزونه ها: {0}. {APP_NAME} درحال ترک.", + "EXTENSION_MANAGER_UPDATE" : "بروزرسانی افزونه", + "EXTENSION_MANAGER_UPDATE_ERROR" : "ناتوان در بروزرسانی یک یا برخی از افزونه ها: {0}. {APP_NAME} درحال ترک.", + "MARKED_FOR_REMOVAL" : "نشانه گذاری جهت حذف", + "UNDO_REMOVE" : "Undo", + "MARKED_FOR_UPDATE" : "انتخاب شده برای بروزرسانی", + "UNDO_UPDATE" : "Undo", + "CHANGE_AND_QUIT_TITLE" : "تغییر در افزونه ها", + "CHANGE_AND_QUIT_MESSAGE" : "جهت بروزرسانی یا حذف افزونه ها می بایست {APP_NAME} را ترک و دوباره اجرا کنید. شما می بایست تغییرات ذخیره نشده را ذخیره نمایید.", + "REMOVE_AND_QUIT" : "حذف افزونه ها و ترک(خروج)", + "CHANGE_AND_QUIT" : "تغییر افزونه ها و ترک", + "UPDATE_AND_QUIT" : "بروزرسانی افزونه ها و ترک", + "EXTENSION_NOT_INSTALLED" : "ناتوان در حذف افزونه {0} زیرا این افزونه بدرستی نصب نشده.", + "NO_EXTENSIONS" : "هیچ افزونه ای نصب نشده.
    جهت شروع بر روی زبانه در درسترس بالا کلیک کنید.", + "NO_EXTENSION_MATCHES" : "هیچ افزونه ای منطبق با جستجوی شما پیدا نشد.", + "REGISTRY_SANITY_CHECK_WARNING" : "بموقع نصب افزونه ها احتیاط جهت نصب افزونه های با منبع نا مشخص ضروری است.", + "EXTENSIONS_INSTALLED_TITLE" : "نصب شده", + "EXTENSIONS_AVAILABLE_TITLE" : "در دسترس", + "EXTENSIONS_UPDATES_TITLE" : "بروزرسانی ها", + + /** + * Unit names + */ + + "UNIT_PIXELS" : "pixels", + + // extensions/default/DebugCommands + "DEBUG_MENU" : "خطا یابی", + "CMD_SHOW_DEV_TOOLS" : "نمایش ابزار های توسعه دهندگان", + "CMD_REFRESH_WINDOW" : "بارگذاری مجدد {APP_NAME}", + "CMD_NEW_BRACKETS_WINDOW" : "پنجره {APP_NAME} جدید", + "CMD_SWITCH_LANGUAGE" : "انتخاب زبان", + "CMD_RUN_UNIT_TESTS" : "اجرای test", + "CMD_SHOW_PERF_DATA" : "نمایش داده های عملکردی", + "CMD_ENABLE_NODE_DEBUGGER" : "فعال سازی اشکال زدای گرهی", + "CMD_LOG_NODE_STATE" : "ورود گره به حالت کنسول", + "CMD_RESTART_NODE" : "شروع دوباره گره", + + "LANGUAGE_TITLE" : "انتخاب زبان", + "LANGUAGE_MESSAGE" : "زبان:", + "LANGUAGE_SUBMIT" : "بارگذاری مجدد {APP_NAME}", + "LANGUAGE_CANCEL" : "لغو", + "LANGUAGE_SYSTEM_DEFAULT" : "زبان پیش فرض", + + /** + * Locales + */ + "LOCALE_CS" : "Czech", + "LOCALE_DE" : "German", + "LOCALE_EN" : "English", + "LOCALE_ES" : "Spanish", + "LOCALE_FI" : "Finnish", + "LOCALE_FR" : "French", + "LOCALE_IT" : "Italian", + "LOCALE_JA" : "Japanese", + "LOCALE_NB" : "Norwegian", + "LOCALE_fa_ir" : "Persian-پارسی", + "LOCALE_PL" : "Polish", + "LOCALE_PT_BR" : "Portuguese, Brazil", + "LOCALE_PT_PT" : "Portuguese", + "LOCALE_RU" : "Russian", + "LOCALE_SV" : "Swedish", + "LOCALE_TR" : "Turkish", + "LOCALE_ZH_CN" : "Chinese, simplified", + "LOCALE_HU" : "Hungarian", + + // extensions/default/InlineColorEditor + "COLOR_EDITOR_CURRENT_COLOR_SWATCH_TIP" : "رنگ فعلی", + "COLOR_EDITOR_ORIGINAL_COLOR_SWATCH_TIP" : "رنگ اصلی", + "COLOR_EDITOR_RGBA_BUTTON_TIP" : "RGBa قالب", + "COLOR_EDITOR_HEX_BUTTON_TIP" : "Hex قالب", + "COLOR_EDITOR_HSLA_BUTTON_TIP" : "HSLa قالب", + "COLOR_EDITOR_USED_COLOR_TIP_SINGULAR" : "{0} ({1} بار استفاده شده)", + "COLOR_EDITOR_USED_COLOR_TIP_PLURAL" : "{0} ({1} بار استفاده شده)", + + // extensions/default/JavaScriptCodeHints + "CMD_JUMPTO_DEFINITION" : "پرش جهت تعریف", + "CMD_SHOW_PARAMETER_HINT" : "نمایش پارامتر", + "NO_ARGUMENTS" : "<بدون پارامتر>", + + // extensions/default/JSLint + "CMD_JSLINT" : "فعال سازی JSLint", + "CMD_JSLINT_FIRST_ERROR" : "رجوء به اولی خطای JSLint", + "JSLINT_ERRORS" : "خطاهای JSLint", + "JSLINT_ERROR_INFORMATION" : "یک خطای JSLint", + "JSLINT_ERRORS_INFORMATION" : "{0} خطای JSLint", + "JSLINT_NO_ERRORS" : "JSLint بدون خطای - ایول!", + "JSLINT_DISABLED" : "JSLint یا نافعال است و یا برای پرونده فعلی کار نمی کند", + + // extensions/default/QuickView + "CMD_ENABLE_QUICK_VIEW" : "نمایش سریع با اشاره", + + // extensions/default/WebPlatformDocs + "DOCS_MORE_LINK" : "بیشتر بخوانید" +}); diff --git a/src/nls/fa-ir/urls.js b/src/nls/fa-ir/urls.js new file mode 100644 index 00000000000..4882f8b76d2 --- /dev/null +++ b/src/nls/fa-ir/urls.js @@ -0,0 +1,32 @@ +/* + * 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 */ + +define({ + // Relative to the samples folder + "GETTING_STARTED" : "root/Getting Started", + "ADOBE_THIRD_PARTY" : "http://www.adobe.com/go/thirdparty/", + "WEB_PLATFORM_DOCS_LICENSE" : "http://creativecommons.org/licenses/by/3.0/", +}); diff --git a/src/nls/strings.js b/src/nls/strings.js index 0fde19effa6..24c4119e08a 100644 --- a/src/nls/strings.js +++ b/src/nls/strings.js @@ -39,6 +39,7 @@ define(function (require, exports, module) { root: true, "cs": true, "de": true, + "fa-ir": true, "fr": true, "nb": true, "es": true, From 06a626aea57b0a4be44c5139a17b6fd861630756 Mon Sep 17 00:00:00 2001 From: Rodrigo Tavares Date: Tue, 10 Sep 2013 11:54:51 -0400 Subject: [PATCH 0013/1140] Updating and improving Brazilian Portuguese translation --- src/nls/pt-br/strings.js | 440 +++++++++++++++++++++++++++++---------- 1 file changed, 335 insertions(+), 105 deletions(-) diff --git a/src/nls/pt-br/strings.js b/src/nls/pt-br/strings.js index 332d9e7c93c..1472fe1cbad 100644 --- a/src/nls/pt-br/strings.js +++ b/src/nls/pt-br/strings.js @@ -25,231 +25,461 @@ /*global define */ define({ + /** * Errors */ // General file io error strings - "GENERIC_ERROR" : "(error {0})", + "GENERIC_ERROR" : "(erro {0})", "NOT_FOUND_ERR" : "O arquivo não pôde ser encontrado.", "NOT_READABLE_ERR" : "O arquivo não pôde ser lido.", "NO_MODIFICATION_ALLOWED_ERR" : "O diretório de destino não pode ser modificado.", "NO_MODIFICATION_ALLOWED_ERR_FILE" : "As permissões não permitem que você faça modificações.", - "FILE_EXISTS_ERR" : "O arquivo já existe.", + "FILE_EXISTS_ERR" : "Arquivo ou pasta já existe.", + "FILE" : "arquivo", + "DIRECTORY" : "diretório", // Project error strings "ERROR_LOADING_PROJECT" : "Erro ao carregar o projeto", - "OPEN_DIALOG_ERROR" : "Ocorreu um erro ao mostrar o diálogo de abertura de arquivo. (error {0})", - "REQUEST_NATIVE_FILE_SYSTEM_ERROR" : "Ocorreu um erro ao tentar carregar a pasta {0}. (error {1})", - "READ_DIRECTORY_ENTRIES_ERROR" : "Ocorreu um erro ao ler o conteúdo da pasta {0}. (error {1})", + "OPEN_DIALOG_ERROR" : "Ocorreu um erro ao mostrar o diálogo de abertura de arquivo. (erro {0})", + "REQUEST_NATIVE_FILE_SYSTEM_ERROR" : "Ocorreu um erro ao tentar carregar a pasta {0}. (erro {1})", + "READ_DIRECTORY_ENTRIES_ERROR" : "Ocorreu um erro ao ler o conteúdo da pasta {0}. (erro {1})", // File open/save error string "ERROR_OPENING_FILE_TITLE" : "Erro ao abrir arquivo", "ERROR_OPENING_FILE" : "Ocorreu um erro ao tentar abrir o arquivo {0}. {1}", - "ERROR_RELOADING_FILE_TITLE" : "Erro recarregando as mudanças a partir do disco", + "ERROR_OPENING_FILES" : "Ocorreu um erro ao tentar abrir os seguintes arquivos:", + "ERROR_RELOADING_FILE_TITLE" : "Erro ao recarregar as mudanças a partir do disco", "ERROR_RELOADING_FILE" : "Ocorreu um erro ao tentar recarregar o arquivo {0}. {1}", "ERROR_SAVING_FILE_TITLE" : "Erro ao salvar arquivo", "ERROR_SAVING_FILE" : "Ocorreu um erro ao tentar salvar o arquivo {0}. {1}", "ERROR_RENAMING_FILE_TITLE" : "Erro ao renomear arquivo", "ERROR_RENAMING_FILE" : "Ocorreu um erro ao tentar renomear o arquivo {0}. {1}", - "INVALID_FILENAME_TITLE" : "Nome de arquivo inválido", - "INVALID_FILENAME_MESSAGE" : "Nomes de arquivos não podem conter os seguintes caracteres: /?*:;{}<>\\|", - "FILE_ALREADY_EXISTS" : "O arquivo {0} já existe.", - "ERROR_CREATING_FILE_TITLE" : "Erro ao criar arquivo", - "ERROR_CREATING_FILE" : "Ocorreu um erro ao tentar criar o arquivo {0}. {1}", + "ERROR_DELETING_FILE_TITLE" : "Erro ao excluir arquivo", + "ERROR_DELETING_FILE" : "Ocorreu um erro ao tentar excluir o arquivo {0}. {1}", + "INVALID_FILENAME_TITLE" : "Nome de {0} inválido", + "INVALID_FILENAME_MESSAGE" : "Nomes de arquivos não podem conter os seguintes caracteres: /?*:;{}<>\\| nem usar palavras reservadas do sistema.", + "FILE_ALREADY_EXISTS" : "Já existe um {0} chamado {1}.", + "ERROR_CREATING_FILE_TITLE" : "Erro ao criar {0}", + "ERROR_CREATING_FILE" : "Ocorreu um erro ao tentar criar o {0} {1}. {2}", // Application error strings - "ERROR_IN_BROWSER_TITLE" : "Opa! {APP_NAME} não funciona em navegadores ainda.", - "ERROR_IN_BROWSER" : "{APP_NAME} é criado em HTML, mas no momento ele é executado como um aplicativo de desktop para que você possa usá-lo para editar arquivos locais. Por favor, use o shell da aplicação no github.com/adobe/brackets-shell repo para executar {APP_NAME}.", + "ERROR_IN_BROWSER_TITLE" : "Opa! O {APP_NAME} não funciona em navegadores ainda.", + "ERROR_IN_BROWSER" : "O {APP_NAME} é criado em HTML, mas no momento ele é executado como um aplicativo de desktop para que você possa usá-lo para editar arquivos locais. Por favor, use o shell da aplicação do repositório github.com/adobe/brackets-shell para executar {APP_NAME}.", // FileIndexManager error string - "ERROR_MAX_FILES_TITLE" : "Erro indexando Arquivos", + "ERROR_MAX_FILES_TITLE" : "Erro ao indexar arquivos", "ERROR_MAX_FILES" : "O número máximo de arquivos foi indexado. Ações que procuram no índice de arquivos podem funcionar incorretamente.", // Live Development error strings - "ERROR_LAUNCHING_BROWSER_TITLE" : "Erro abrindo o navegador", + "ERROR_LAUNCHING_BROWSER_TITLE" : "Erro ao abrir o navegador", "ERROR_CANT_FIND_CHROME" : "O navegador Google Chrome não pôde ser encontrado. Por favor, verifique se ele está instalado.", - "ERROR_LAUNCHING_BROWSER" : "Ocorreu um erro ao iniciar o navegador. (error {0})", + "ERROR_LAUNCHING_BROWSER" : "Ocorreu um erro ao iniciar o navegador. (erro {0})", - "LIVE_DEVELOPMENT_ERROR_TITLE" : "Erro de Live Preview", - "LIVE_DEVELOPMENT_RELAUNCH_TITLE" : "Conectando ao navegador", - "LIVE_DEVELOPMENT_ERROR_MESSAGE" : "Para que a Live Preview conecte, Chrome deve ser aberto com a opção de depuração remota ativada.

    Gostaria de reabrir Chrome e permitir a depuração remota?", - "LIVE_DEV_NEED_HTML_MESSAGE" : "Abra um arquivo HTML a fim de lançar Live Preview.", + "LIVE_DEVELOPMENT_ERROR_TITLE" : "Erro no Live Preview", + "LIVE_DEVELOPMENT_RELAUNCH_TITLE" : "Conectando-se ao navegador", + "LIVE_DEVELOPMENT_ERROR_MESSAGE" : "Para que o Live Preview conecte-se, o Chrome deve ser reiniciado com a opção de depuração remota ativada.

    Gostaria de abrir o Chrome novamente e permitir a depuração remota?", + "LIVE_DEV_LOADING_ERROR_MESSAGE" : "Não foi possível carregar a página de Live Development", + "LIVE_DEV_NEED_HTML_MESSAGE" : "Abra um arquivo HTML para iniciar Live Preview.", + "LIVE_DEV_NEED_BASEURL_MESSAGE" : "Para iniciar um live preview com um arquivo server-side, é preciso especificar uma URL Base para este projeto.", + "LIVE_DEV_SERVER_NOT_READY_MESSAGE" : "Erro ao iniciar o servidor HTTP para os arquivos do desenvolvimento em tempo real. Por favor, tente novamente.", "LIVE_DEVELOPMENT_INFO_TITLE" : "Bem-vindo à Live Preview!", - "LIVE_DEVELOPMENT_INFO_MESSAGE" : "Live Preview se conecta {APP_NAME} ao seu navegador. Ele lança uma prévia do seu arquivo HTML no navegador, em seguida atualiza a visualização de imediato, quando você editar o código.

    Nesta versão inicial de {APP_NAME}, Live Preview só funciona para as edições de arquivos CSS e apenas com Google Chrome. Nós iremos implementá-lo para HTML e JavaScript em breve!

    (Você só vai ver esta mensagem uma vez.)", + "LIVE_DEVELOPMENT_INFO_MESSAGE" : "O Live Preview conecta o {APP_NAME} ao seu navegador. Ele abre uma prévia do seu arquivo HTML no navegador e atualiza a visualização em tempo real, enquanto você edita o código.

    Nesta versão inicial do {APP_NAME}, o Live Preview só funciona com o Google Chrome e atualiza em tempo real enquanto você edita arquivos CSS. Alterações em arquivos HTML ou JavaScript são automaticamente recarregados ao salvar.

    (Você só verá esta mensagem uma vez.)", + "LIVE_DEVELOPMENT_TROUBLESHOOTING" : "Para mais informações, veja Solucionando erros de conexão com Live Development.", "LIVE_DEV_STATUS_TIP_NOT_CONNECTED" : "Live Preview", "LIVE_DEV_STATUS_TIP_PROGRESS1" : "Live Preview: Connectando\u2026", "LIVE_DEV_STATUS_TIP_PROGRESS2" : "Live Preview: Inicializando\u2026", - "LIVE_DEV_STATUS_TIP_CONNECTED" : "Desconectando do Live Preview", + "LIVE_DEV_STATUS_TIP_CONNECTED" : "Desconectar Live Preview", "LIVE_DEV_STATUS_TIP_OUT_OF_SYNC" : "Live Preview: Clique para desconectar (Salve o arquivo para atualizar)", + "LIVE_DEV_DETACHED_REPLACED_WITH_DEVTOOLS" : "O Live Preview foi cancelado pois as ferramentas de desenvolvedor do navegador foram abertas", + "LIVE_DEV_DETACHED_TARGET_CLOSED" : "O Live Preview foi cancelado pois a página foi fechada no navegador", + "LIVE_DEV_NAVIGATED_AWAY" : "O Live Preview foi cancelado pois o navegador foi para uma página que não pertence a este projeto atual", + "LIVE_DEV_CLOSED_UNKNOWN_REASON" : "O Live Preview foi cancelado por uma razão desconhecida ({0})", + "SAVE_CLOSE_TITLE" : "Salvar alterações", "SAVE_CLOSE_MESSAGE" : "Você quer salvar as alterações feitas no documento {0}?", - "SAVE_CLOSE_MULTI_MESSAGE" : "Você quer salvar as alterações para os seguintes arquivos?", + "SAVE_CLOSE_MULTI_MESSAGE" : "Você quer salvar as alterações feitas aos seguintes arquivos?", "EXT_MODIFIED_TITLE" : "Mudanças externas", - "EXT_MODIFIED_MESSAGE" : "{0} foi modificado no disco, mas também tem alterações não salvadas em {APP_NAME}.

    Qual versão você quer manter?", - "EXT_DELETED_MESSAGE" : "{0} foi deletado no disco, mas tem alterações não salvadas em {APP_NAME}.

    Você quer manter as suas alterações?", + "CONFIRM_FOLDER_DELETE_TITLE" : "Confirmar exclusão", + "CONFIRM_FOLDER_DELETE" : "Tem certeza que deseja excluir a pasta {0}?", + "FILE_DELETED_TITLE" : "Arquivo excluído", + "EXT_MODIFIED_MESSAGE" : "{0} foi modificado no disco, mas também tem alterações não salvas em {APP_NAME}.

    Qual versão você quer manter?", + "EXT_DELETED_MESSAGE" : "{0} foi excluído no disco, mas tem alterações não salvas em {APP_NAME}.

    Deseja manter suas alterações?", // Find, Replace, Find in Files - "SEARCH_REGEXP_INFO" : "Use /re/ sintaxe para usar regexp na pesquisa", + "SEARCH_REGEXP_INFO" : "Use a sintaxe /re/ para pesquisas com regexp", + "FIND_RESULT_COUNT" : "{0} resultados", + "FIND_RESULT_COUNT_SINGLE" : "1 resultado", + "FIND_NO_RESULTS" : "Nenhum resultado", "WITH" : "Com", "BUTTON_YES" : "Sim", "BUTTON_NO" : "Não", + "BUTTON_REPLACE_ALL" : "Todos\u2026", "BUTTON_STOP" : "Pare", + "BUTTON_REPLACE" : "Substituir", + + "BUTTON_NEXT" : "\u25B6", + "BUTTON_PREV" : "\u25C0", + "BUTTON_NEXT_HINT" : "Resultado seguinte", + "BUTTON_PREV_HINT" : "Resultado ", - "OPEN_FILE" : "Abrir Arquivo", + "OPEN_FILE" : "Abrir arquivo", + "SAVE_FILE_AS" : "Savar arquivo", "CHOOSE_FOLDER" : "Escolha uma pasta", - "RELEASE_NOTES" : "Notas de Lançamento", + "RELEASE_NOTES" : "Notas da Versão", "NO_UPDATE_TITLE" : "Você está atualizado!", - "NO_UPDATE_MESSAGE" : "Você está executando a versão mais recente de {APP_NAME}.", + "NO_UPDATE_MESSAGE" : "Você está executando a versão mais recente do {APP_NAME}.", + + "FIND_REPLACE_TITLE_PART1" : "Substituir \"", + "FIND_REPLACE_TITLE_PART2" : "\" com \"", + "FIND_REPLACE_TITLE_PART3" : "\" — {2} {0} {1}", - "FIND_IN_FILES_TITLE" : "- {0} {1} em {2} {3}", + "FIND_IN_FILES_TITLE_PART1" : "\"", + "FIND_IN_FILES_TITLE_PART2" : "\" encontrado(s)", + "FIND_IN_FILES_TITLE_PART3" : "— {0} {1} em {2} {3}", + "FIND_IN_FILES_SCOPED" : "em {0}", + "FIND_IN_FILES_NO_SCOPE" : "no projeto", "FIND_IN_FILES_FILE" : "arquivo", "FIND_IN_FILES_FILES" : "arquivos", "FIND_IN_FILES_MATCH" : "resultado", "FIND_IN_FILES_MATCHES" : "resultados", - "FIND_IN_FILES_MAX" : " (Mostrando os primeiros {0} resultados)", - "FIND_IN_FILES_FILE_PATH" : "Arquivo: {0}", - "FIND_IN_FILES_LINE" : "linha: {0}", + "FIND_IN_FILES_MORE_THAN" : "Mais de ", + "FIND_IN_FILES_PAGING" : "{0}—{1}", + "FIND_IN_FILES_FILE_PATH" : "{0} {2} {1}", // We shoudl use normal dashes on Windows instead of em dash eventually + "FIND_IN_FILES_LINE" : "linha: {0}", - "ERROR_FETCHING_UPDATE_INFO_TITLE" : "Erro recebendo informações atualizadas", - "ERROR_FETCHING_UPDATE_INFO_MSG" : "Houve um problema obtendo a informação de atualização mais recente a partir do servidor. Por favor, verifique se você está conectado à Internet e tente novamente.", + "ERROR_FETCHING_UPDATE_INFO_TITLE" : "Erro ao receber informações de atualização", + "ERROR_FETCHING_UPDATE_INFO_MSG" : "Houve um problema ao obter informações sobre a última atualização do servidor. Por favor, certifique-se de estar conectado à Internet e tente novamente.", /** * ProjectManager */ - - "UNTITLED" : "Sem título", + "PROJECT_LOADING" : "Carregando\u2026", + "UNTITLED" : "Sem título", + "WORKING_FILES" : "Arquivos de trabalho", /** * Keyboard modifier names */ - "KEYBOARD_CTRL" : "Ctrl", "KEYBOARD_SHIFT" : "Shift", - "KEYBOARD_SPACE" : "Space", + "KEYBOARD_SPACE" : "Espaço", /** * StatusBar strings */ "STATUSBAR_CURSOR_POSITION" : "Linha {0}, Coluna {1}", + "STATUSBAR_SELECTION_CH_SINGULAR" : " \u2014 {0} coluna selecionada", + "STATUSBAR_SELECTION_CH_PLURAL" : " \u2014 {0} colunas selecionadas", + "STATUSBAR_SELECTION_LINE_SINGULAR" : " \u2014 {0} linha selecionada", + "STATUSBAR_SELECTION_LINE_PLURAL" : " \u2014 {0} linhas selecionadas", "STATUSBAR_INDENT_TOOLTIP_SPACES" : "Clique para alterar a indentação para espaços", "STATUSBAR_INDENT_TOOLTIP_TABS" : "Clique para alterar a indentação para tabulação", "STATUSBAR_INDENT_SIZE_TOOLTIP_SPACES" : "Clique para alterar o número de espaços usados ao indentar", "STATUSBAR_INDENT_SIZE_TOOLTIP_TABS" : "Clique para alterar a largura do caractere de tabulação", - "STATUSBAR_SPACES" : "Espaços", - "STATUSBAR_TAB_SIZE" : "Tamanho da Tabulação", - "STATUSBAR_LINE_COUNT" : "{0} Linhas", + "STATUSBAR_SPACES" : "Espaços:", + "STATUSBAR_TAB_SIZE" : "Tamanho da tabulação:", + "STATUSBAR_LINE_COUNT_SINGULAR" : "\u2014 {0} linha", + "STATUSBAR_LINE_COUNT_PLURAL" : "\u2014 {0} linhas", + // CodeInspection: errors/warnings + "ERRORS_PANEL_TITLE" : "Erros {0}", + "SINGLE_ERROR" : "1 erro {0}", + "MULTIPLE_ERRORS" : "{1} erros {0}", + "NO_ERRORS" : "Nenhum erro {0} - bom trabalho!", + "LINT_DISABLED" : "A análise de código está desativada", + "NO_LINT_AVAILABLE" : "Nenhum analisador de código disponível para {0}", + "NOTHING_TO_LINT" : "Nada para analisar", + + /** * Command Name Constants */ // File menu commands "FILE_MENU" : "Arquivo", - "CMD_FILE_NEW" : "Novo", - "CMD_FILE_NEW_FOLDER" : "Nova Pasta", + "CMD_FILE_NEW_UNTITLED" : "Novo", + "CMD_FILE_NEW" : "Novo arquivo", + "CMD_FILE_NEW_FOLDER" : "Nova pasta", "CMD_FILE_OPEN" : "Abrir\u2026", - "CMD_ADD_TO_WORKING_SET" : "Adicionar Para Conjunto de Trabalho", + "CMD_ADD_TO_WORKING_SET" : "Adicionar ao Conjunto de Trabalho", "CMD_OPEN_FOLDER" : "Abrir pasta\u2026", "CMD_FILE_CLOSE" : "Fechar", - "CMD_FILE_CLOSE_ALL" : "Fechar Tudo", + "CMD_FILE_CLOSE_ALL" : "Fechar tudo", "CMD_FILE_SAVE" : "Salvar", - "CMD_FILE_SAVE_ALL" : "Salvar Tudo", + "CMD_FILE_SAVE_ALL" : "Salvar tudo", + "CMD_FILE_SAVE_AS" : "Salvar como\u2026", "CMD_LIVE_FILE_PREVIEW" : "Live Preview", + "CMD_PROJECT_SETTINGS" : "Configurações do projeto\u2026", "CMD_FILE_RENAME" : "Renomear", - "CMD_FILE_REFRESH" : "Atualizar", + "CMD_FILE_DELETE" : "Excluir", + "CMD_INSTALL_EXTENSION" : "Instalar extensão\u2026", + "CMD_EXTENSION_MANAGER" : "Gerenciador de extensões\u2026", + "CMD_FILE_REFRESH" : "Recarregar árvore de arquivos", "CMD_QUIT" : "Sair", + // Used in native File menu on Windows + "CMD_EXIT" : "Sair", // Edit menu commands "EDIT_MENU" : "Editar", - "CMD_SELECT_ALL" : "Selecionar Tudo", - "CMD_FIND" : "Encontrar", - "CMD_FIND_IN_FILES" : "Encontrar em Arquivos", - "CMD_FIND_NEXT" : "Encontrar Próximo", - "CMD_FIND_PREVIOUS" : "Encontrar Anterior", + "CMD_UNDO" : "Desfazer", + "CMD_REDO" : "Refazer", + "CMD_CUT" : "Recortar", + "CMD_COPY" : "Copiar", + "CMD_PASTE" : "Colar", + "CMD_SELECT_ALL" : "Selecionar tudo", + "CMD_SELECT_LINE" : "Selecionar linha", + "CMD_FIND" : "Localizar", + "CMD_FIND_IN_FILES" : "Localizar em arquivos", + "CMD_FIND_IN_SUBTREE" : "Localizar em \u2026", + "CMD_FIND_NEXT" : "Localizar Próximo", + "CMD_FIND_PREVIOUS" : "Localizar Anterior", "CMD_REPLACE" : "Substituir", - "CMD_INDENT" : "Recuar", - "CMD_UNINDENT" : "Desfazer Recuo", + "CMD_INDENT" : "Indentar", + "CMD_UNINDENT" : "Diminuir indentação", "CMD_DUPLICATE" : "Duplicar", - "CMD_DELETE_LINES" : "Deletar Linha(s) Selecionadas", - "CMD_COMMENT" : "Comentar/Descomentar Linhas", - "CMD_LINE_UP" : "Mover Linha(s) para Cima", - "CMD_LINE_DOWN" : "Mover Linha(s) para Baixo", + "CMD_DELETE_LINES" : "Excluir linha", + "CMD_COMMENT" : "Alternar comentário de linha", + "CMD_BLOCK_COMMENT" : "Alternar comentário de bloco", + "CMD_LINE_UP" : "Mover linha para cima", + "CMD_LINE_DOWN" : "Mover linha para baixo", + "CMD_OPEN_LINE_ABOVE" : "Abrir linha acima", + "CMD_OPEN_LINE_BELOW" : "Abrir linha abaixo", + "CMD_TOGGLE_CLOSE_BRACKETS" : "Fechar chaves automaticamente", + "CMD_SHOW_CODE_HINTS" : "Mostrar dicas de código", // View menu commands "VIEW_MENU" : "Ver", "CMD_HIDE_SIDEBAR" : "Esconder Barra Lateral", "CMD_SHOW_SIDEBAR" : "Mostrar Barra Lateral", - "CMD_INCREASE_FONT_SIZE" : "Aumentar Tamanho da Fonte", - "CMD_DECREASE_FONT_SIZE" : "Diminuir Tamanho da Fonte", - "CMD_RESTORE_FONT_SIZE" : "Restaurar Tamanho da Fonte", + "CMD_INCREASE_FONT_SIZE" : "Aumentar tamanho da fonte", + "CMD_DECREASE_FONT_SIZE" : "Diminuir tamanho da fonte", + "CMD_RESTORE_FONT_SIZE" : "Restaurar tamanho da fonte", + "CMD_SCROLL_LINE_UP" : "Rolar linha para cima", + "CMD_SCROLL_LINE_DOWN" : "Rolar linha para baixo", + "CMD_TOGGLE_LINE_NUMBERS" : "Números de linha", + "CMD_TOGGLE_ACTIVE_LINE" : "Destacar linha ativa", + "CMD_TOGGLE_WORD_WRAP" : "Quebra automática de linha", + "CMD_LIVE_HIGHLIGHT" : "Destacar Live Preview", + "CMD_VIEW_TOGGLE_INSPECTION" : "Analisar arquivos ao salvar", + "CMD_SORT_WORKINGSET_BY_ADDED" : "Ordenar por Data de Adição", + "CMD_SORT_WORKINGSET_BY_NAME" : "Ordenar por Nome", + "CMD_SORT_WORKINGSET_BY_TYPE" : "Ordenar por Tipo", + "CMD_SORT_WORKINGSET_AUTO" : "Ordenação automática", // Navigate menu Commands "NAVIGATE_MENU" : "Navegar", - "CMD_QUICK_OPEN" : "Abertura Rápida", - "CMD_GOTO_LINE" : "Ir para a Linha", - "CMD_GOTO_DEFINITION" : "Ir para Definição", - "CMD_TOGGLE_QUICK_EDIT" : "Edição Rápida", - "CMD_QUICK_EDIT_PREV_MATCH" : "Resultado Anterior", - "CMD_QUICK_EDIT_NEXT_MATCH" : "Resultado Seguinte", - "CMD_NEXT_DOC" : "Documento Seguinte", - "CMD_PREV_DOC" : "Documento Anterior", + "CMD_QUICK_OPEN" : "Abertura rápida", + "CMD_GOTO_LINE" : "Ir para linha", + "CMD_GOTO_DEFINITION" : "Encontrar definição", + "CMD_GOTO_FIRST_PROBLEM" : "Ir ao primeiro Erro/Aviso", + "CMD_TOGGLE_QUICK_EDIT" : "Edição rápida", + "CMD_TOGGLE_QUICK_DOCS" : "Documentação rápida", + "CMD_QUICK_EDIT_PREV_MATCH" : "Resultado anterior", + "CMD_QUICK_EDIT_NEXT_MATCH" : "Resultado seguinte", + "CMD_NEXT_DOC" : "Documento seguinte", + "CMD_PREV_DOC" : "Documento anterior", + "CMD_SHOW_IN_TREE" : "Mostrar na árvore de arquivos", + "CMD_SHOW_IN_OS" : "Mostrar no sistema operacional", // Help menu commands "HELP_MENU" : "Ajuda", - "CMD_CHECK_FOR_UPDATE" : "Verificar Atualizações", - "CMD_SHOW_EXTENSIONS_FOLDER" : "Mostrar Pasta de Extensões", - "CMD_FORUM" : "{APP_NAME} Forum", - "CMD_ABOUT" : "Sobre", + "CMD_CHECK_FOR_UPDATE" : "Verificar atualizações", + "CMD_HOW_TO_USE_BRACKETS" : "Como usar o {APP_NAME}", + "CMD_FORUM" : "Fórum do {APP_NAME}", + "CMD_RELEASE_NOTES" : "Notas da versão", + "CMD_REPORT_AN_ISSUE" : "Relatar um problema", + "CMD_SHOW_EXTENSIONS_FOLDER" : "Mostrar pasta de extensões", + "CMD_TWITTER" : "{TWITTER_NAME} no Twitter", + "CMD_ABOUT" : "Sobre o {APP_TITLE}", + // Special commands invoked by the native shell - "CMD_CLOSE_WINDOW" : "Fechar Janela", - "CMD_ABORT_QUIT" : "Abortar Saída", + "CMD_CLOSE_WINDOW" : "Fechar janela", + "CMD_ABORT_QUIT" : "Abortar saída", + "CMD_BEFORE_MENUPOPUP" : "Antes do popup do menu", // Strings for main-view.html - "EXPERIMENTAL_BUILD" : "Versão Experimental", - "SEARCH_RESULTS" : "Resultados da Pesquisa", + "EXPERIMENTAL_BUILD" : "versão experimental", + "DEVELOPMENT_BUILD" : "versão de desenvolvimento", "OK" : "OK", - "DONT_SAVE" : "Não Salvar", + "DONT_SAVE" : "Não salvar", "SAVE" : "Salvar", "CANCEL" : "Cancelar", - "RELOAD_FROM_DISK" : "Atualizar a Partir do Disco", - "KEEP_CHANGES_IN_EDITOR" : "Manter Mudanças no Editor", - "CLOSE_DONT_SAVE" : "Fechar (Não Salvar)", - "RELAUNCH_CHROME" : "Abrir Chrome Novamente", + "DELETE" : "Excluir", + "RELOAD_FROM_DISK" : "Recarregar do disco", + "KEEP_CHANGES_IN_EDITOR" : "Manter alterações no editor", + "CLOSE_DONT_SAVE" : "Fechar (não salvar)", + "RELAUNCH_CHROME" : "Abrir Chrome novamente", "ABOUT" : "Sobre", "CLOSE" : "Fechar", - "ABOUT_TEXT_LINE1" : "sprint {VERSION_MINOR} versão experimental {VERSION}", - "ABOUT_TEXT_LINE3" : "Avisos, termos e condições de softwares de terceiros estão localizados em http://www.adobe.com/go/thirdparty/ e aqui incorporados por referência.", - "ABOUT_TEXT_LINE4" : "Documentação e fontes https://github.com/adobe/brackets/", - "UPDATE_NOTIFICATION_TOOLTIP" : "Há uma nova versão de {APP_NAME} disponível! Clique aqui para mais detalhes.", + "ABOUT_TEXT_LINE1" : "sprint {VERSION_MINOR} {BUILD_TYPE} {VERSION}", + "ABOUT_TEXT_LINE3" : "Avisos, termos e condições de softwares de terceiros estão localizados em {ADOBE_THIRD_PARTY} e aqui incorporados por referência.", + "ABOUT_TEXT_LINE4" : "Documentação e código-fonte em https://github.com/adobe/brackets/", + "ABOUT_TEXT_LINE5" : "Feito com \u2764 e JavaScript por:", + "ABOUT_TEXT_LINE6" : "Várias pessoas (mas não estamos conseguindo carregar estes dados no momento).", + "ABOUT_TEXT_WEB_PLATFORM_DOCS" : "Web Platform Docs e logo gráfico Web Platform são licenciados sob a licença Creative Commons Attribution, CC-BY 3.0 Unported.", + "UPDATE_NOTIFICATION_TOOLTIP" : "Há uma nova versão do {APP_NAME} disponível! Clique aqui para mais detalhes.", "UPDATE_AVAILABLE_TITLE" : "Atualização Disponível", - "UPDATE_MESSAGE" : "Opa, há uma nova versão de {APP_NAME} disponível. Aqui estão alguns dos novos recursos:", + "UPDATE_MESSAGE" : "Ei, há uma nova versão do {APP_NAME} disponível. Aqui estão alguns dos novos recursos:", "GET_IT_NOW" : "Obtenha agora!", + "PROJECT_SETTINGS_TITLE" : "Configurações do projeto para: {0}", + "PROJECT_SETTING_BASE_URL" : "URL base do Live Preview", + "PROJECT_SETTING_BASE_URL_HINT" : "Para usar um servidor local, insira uma url como http://localhost:8000/", + "BASEURL_ERROR_INVALID_PROTOCOL" : "O protocolo {0} não é suportado pelo Live Preview—por favor, use http: ou https: .", + "BASEURL_ERROR_SEARCH_DISALLOWED" : "A URL base não pode conter parâmetros de busca como \"{0}\".", + "BASEURL_ERROR_HASH_DISALLOWED" : "A URL base não pode conter hashes como \"{0}\".", + "BASEURL_ERROR_INVALID_CHAR" : "Caracteres especiais como '{0}' devem ser codificados para URL encoding.", + "BASEURL_ERROR_UNKNOWN_ERROR" : "Erro desconhecido ao parsear URL base", + + // Extension Management strings + "INSTALL" : "Instalar", + "UPDATE" : "Atualizar", + "REMOVE" : "Remover", + "OVERWRITE" : "Sobrescrever", + "CANT_REMOVE_DEV" : "Extensões na pasta \"dev\" devem ser excluídas manualmente.", + "CANT_UPDATE" : "A atualização não é compatível com esta versão do {APP_NAME}.", + "INSTALL_EXTENSION_TITLE" : "Instalar extensão", + "UPDATE_EXTENSION_TITLE" : "Atualizar extensão", + "INSTALL_EXTENSION_LABEL" : "URL da extensão", + "INSTALL_EXTENSION_HINT" : "URL do zip ou repositório GitHub da extensão", + "INSTALLING_FROM" : "Instalando extensão de {0}\u2026", + "INSTALL_SUCCEEDED" : "Instalada com sucesso!", + "INSTALL_FAILED" : "Falha na instalação.", + "CANCELING_INSTALL" : "Cancelando\u2026", + "CANCELING_HUNG" : "Cancelar a instalação está demorando muito. Um erro interno deve ter ocorrido.", + "INSTALL_CANCELED" : "Instalação cancelada.", + // These must match the error codes in ExtensionsDomain.Errors.* : + "INVALID_ZIP_FILE" : "O conteúdo baixado não é um arquivo zip válido.", + "INVALID_PACKAGE_JSON" : "O arquivo package.json não é válido (o erro foi: {0}).", + "MISSING_PACKAGE_NAME" : "O arquivo package.json não especifica um nome de pacote.", + "BAD_PACKAGE_NAME" : "{0} é um nome de pacote inválido.", + "MISSING_PACKAGE_VERSION" : "O arquivo package.json não especifica uma versão de pacote.", + "INVALID_VERSION_NUMBER" : "O número da versão do pacote ({0}) é inválido.", + "INVALID_BRACKETS_VERSION" : "A string de compatibilidade com o {APP_NAME} ({0}) é inválida.", + "DISALLOWED_WORDS" : "As palavras ({1}) não são permitidas no campo {0}.", + "API_NOT_COMPATIBLE" : "A extensão não é compatível com esta versão do {APP_NAME}. Está instalada na sua pasta de extensões desativadas.", + "MISSING_MAIN" : "O pacote não tem um arquivo main.js.", + "EXTENSION_ALREADY_INSTALLED" : "Instalar este pacote irá substituir uma extensão instalada anteriormente. Sobrescrever a exensão antiga?", + "EXTENSION_SAME_VERSION" : "Este pacote está na mesma versão que o instalado atualmente. Sobrescrever a instalação existente?", + "EXTENSION_OLDER_VERSION" : "Este pacote está na versão {0}, que é mais antiga que a instalada atualmente ({1}). Sobrescrever a instalação existente?", + "DOWNLOAD_ID_IN_USE" : "Erro interno: ID de download já em uso.", + "NO_SERVER_RESPONSE" : "Não foi possível conectar-se ao servidor.", + "BAD_HTTP_STATUS" : "Aquivo não encontrado no servidor (HTTP {0}).", + "CANNOT_WRITE_TEMP" : "Não foi possível salvar o download em um arquivo temporário.", + "ERROR_LOADING" : "A extensão encontrou um erro ao inicializar.", + "MALFORMED_URL" : "A URL é inválida. Por favor, verifique se você a inseriu corretamente.", + "UNSUPPORTED_PROTOCOL" : "A URL precisa ser um endereço http ou https.", + "UNKNOWN_ERROR" : "Erro interno desconhecido.", + // For NOT_FOUND_ERR, see generic strings above + "EXTENSION_MANAGER_TITLE" : "Gerenciador de Extensões", + "EXTENSION_MANAGER_ERROR_LOAD" : "Não foi possível acessar o registro de extensões. Por favor,tente novamente mais tarde.", + "INSTALL_FROM_URL" : "Instalar a partir de URL\u2026", + "EXTENSION_AUTHOR" : "Autor", + "EXTENSION_DATE" : "Data", + "EXTENSION_INCOMPATIBLE_NEWER" : "Esta extensão requer uma versão mais recente do {APP_NAME}.", + "EXTENSION_INCOMPATIBLE_OLDER" : "Esta extensão atualmente só funciona com versões antigas do {APP_NAME}.", + "EXTENSION_NO_DESCRIPTION" : "Sem descrição", + "EXTENSION_MORE_INFO" : "Mais informações...", + "EXTENSION_ERROR" : "Erro na extensão", + "EXTENSION_KEYWORDS" : "Palavras-chave", + "EXTENSION_INSTALLED" : "Instalada", + "EXTENSION_UPDATE_INSTALLED" : "Esta atualização foi baixada e será instalada quando você sair do {APP_NAME}.", + "EXTENSION_SEARCH_PLACEHOLDER" : "Pesquisar", + "EXTENSION_MORE_INFO_LINK" : "Mais", + "BROWSE_EXTENSIONS" : "Procurar extensões", + "EXTENSION_MANAGER_REMOVE" : "Remover extensão", + "EXTENSION_MANAGER_REMOVE_ERROR" : "Não foi possível remover uma ou mais extensões: {0}. O {APP_NAME} será encerrado mesmo assim.", + "EXTENSION_MANAGER_UPDATE" : "Atualizar extensão", + "EXTENSION_MANAGER_UPDATE_ERROR" : "Não foi possível atualizar uma ou mais extensões: {0}. O {APP_NAME} será encerrado mesmo assim.", + "MARKED_FOR_REMOVAL" : "Marcada para remoção", + "UNDO_REMOVE" : "Desfazer", + "MARKED_FOR_UPDATE" : "Marcada para atualização", + "UNDO_UPDATE" : "Desfazer", + "CHANGE_AND_QUIT_TITLE" : "Alterar extensões", + "CHANGE_AND_QUIT_MESSAGE" : "Para atualizar ou remover as extensões marcadas, você deve sair e reiniciar o {APP_NAME}. Você será solicitado a salvar alterações.", + "REMOVE_AND_QUIT" : "Remover extensões e sair", + "CHANGE_AND_QUIT" : "Alterar extensões e sair", + "UPDATE_AND_QUIT" : "Atualizar extensões e sair", + "EXTENSION_NOT_INSTALLED" : "Não foi possível remover a extensão {0} porque não estava instalada.", + "NO_EXTENSIONS" : "Nenhuma extensão instalada ainda.
    Clique na aba Disponíveis acima para começar.", + "NO_EXTENSION_MATCHES" : "Nenhuma extensão corresponde à sua pesquisa.", + "REGISTRY_SANITY_CHECK_WARNING" : "Tenha cuidado ao instalar extensões de fontes desconhecidas.", + "EXTENSIONS_INSTALLED_TITLE" : "Instaladas", + "EXTENSIONS_AVAILABLE_TITLE" : "Disponíveis", + "EXTENSIONS_UPDATES_TITLE" : "Atualizações", + + /** + * Unit names + */ + + "UNIT_PIXELS" : "pixels", // extensions/default/DebugCommands - "DEBUG_MENU" : "Depurar", - "CMD_SHOW_DEV_TOOLS" : "Mostrar Ferramentas de Desenvolvimento", - "CMD_REFRESH_WINDOW" : "Recarregar {APP_NAME}", - "CMD_NEW_BRACKETS_WINDOW" : "Nova Janela {APP_NAME}", - "CMD_SWITCH_LANGUAGE" : "Trocar Linguagem", - "CMD_RUN_UNIT_TESTS" : "Executar Testes", - "CMD_SHOW_PERF_DATA" : "Mostrar Dados de Desempenho", + "DEBUG_MENU" : "Depurar", + "CMD_SHOW_DEV_TOOLS" : "Mostrar Ferramentas do Desenvolvedor", + "CMD_REFRESH_WINDOW" : "Recarregar {APP_NAME}", + "CMD_NEW_BRACKETS_WINDOW" : "Nova janela do {APP_NAME}", + "CMD_SWITCH_LANGUAGE" : "Trocar idioma", + "CMD_RUN_UNIT_TESTS" : "Executar testes", + "CMD_SHOW_PERF_DATA" : "Mostrar dados de desempenho", + "CMD_ENABLE_NODE_DEBUGGER" : "Habilitar Depurador Node", + "CMD_LOG_NODE_STATE" : "Registrar estado do Node no Console", + "CMD_RESTART_NODE" : "Reiniciar Node", + + "LANGUAGE_TITLE" : "Trocar idioma", + "LANGUAGE_MESSAGE" : "Idioma:", + "LANGUAGE_SUBMIT" : "Recarregar {APP_NAME}", + "LANGUAGE_CANCEL" : "Cancelar", + "LANGUAGE_SYSTEM_DEFAULT" : "Padrão do sistema", + + // Locales (used by Debug > Switch Language) + "LOCALE_CS" : "Tcheco", + "LOCALE_DE" : "Alemão", + "LOCALE_EN" : "Inglês", + "LOCALE_ES" : "Espanhol", + "LOCALE_FI" : "Finlandês", + "LOCALE_FR" : "Francês", + "LOCALE_IT" : "Italiano", + "LOCALE_JA" : "Japonês", + "LOCALE_NB" : "Norueguês", + "LOCALE_PL" : "Polonês", + "LOCALE_PT_BR" : "Português do Brasil", + "LOCALE_PT_PT" : "Português", + "LOCALE_RU" : "Russo", + "LOCALE_SV" : "Sueco", + "LOCALE_TR" : "Turco", + "LOCALE_ZH_CN" : "Chinês Simplificado", + "LOCALE_HU" : "Húngaro", - "LANGUAGE_TITLE" : "Trocar Idioma", - "LANGUAGE_MESSAGE" : "Por favor, selecione o idioma desejado na lista abaixo:", - "LANGUAGE_SUBMIT" : "Recarregar {APP_NAME}", - "LANGUAGE_CANCEL" : "Cancelar", + // extensions/default/InlineColorEditor + "COLOR_EDITOR_CURRENT_COLOR_SWATCH_TIP" : "Cor atual", + "COLOR_EDITOR_ORIGINAL_COLOR_SWATCH_TIP" : "Cor original", + "COLOR_EDITOR_RGBA_BUTTON_TIP" : "Formato RGBa", + "COLOR_EDITOR_HEX_BUTTON_TIP" : "Formato Hex", + "COLOR_EDITOR_HSLA_BUTTON_TIP" : "Formato HSLa", + "COLOR_EDITOR_USED_COLOR_TIP_SINGULAR" : "{0} (Usada {1} vez)", + "COLOR_EDITOR_USED_COLOR_TIP_PLURAL" : "{0} (Usada {1} vezes)", + + // extensions/default/JavaScriptCodeHints + "CMD_JUMPTO_DEFINITION" : "Pular para definição", + "CMD_SHOW_PARAMETER_HINT" : "Mostrar dica de parâmetro", + "NO_ARGUMENTS" : "", // extensions/default/JSLint - "CMD_JSLINT" : "Habilitar JSLint", - "JSLINT_ERRORS" : "Erros JSLint", - "JSLINT_ERROR_INFORMATION" : "1 Erro JSLint", - "JSLINT_ERRORS_INFORMATION" : "{0} Erros JSLint", - "JSLINT_NO_ERRORS" : "Sem erros JSLint - bom trabalho!", - "JSLINT_DISABLED" : "JSLint desabilitado ou não funcionando para o arquivo atual" + "JSLINT_NAME" : "JSLint", + + // extensions/default/QuickView + "CMD_ENABLE_QUICK_VIEW" : "Quick View ao passar o mouse", + + // extensions/default/RecentProjects + "CMD_TOGGLE_RECENT_PROJECTS" : "Projetos Recentes", + + // extensions/default/WebPlatformDocs + "DOCS_MORE_LINK" : "Leia mais" }); From f3ece443888036b7f22eb208a28ee47a66da6a68 Mon Sep 17 00:00:00 2001 From: Mohammad Yaghobi Date: Wed, 11 Sep 2013 11:53:25 +0430 Subject: [PATCH 0014/1140] Persian translated Some improvement in translation --- src/nls/fa-ir/strings.js | 68 +++++++++++++--------------------------- src/nls/fa-ir/urls.js | 24 -------------- 2 files changed, 22 insertions(+), 70 deletions(-) diff --git a/src/nls/fa-ir/strings.js b/src/nls/fa-ir/strings.js index 7eac7d73d48..53ca6cde517 100644 --- a/src/nls/fa-ir/strings.js +++ b/src/nls/fa-ir/strings.js @@ -1,28 +1,4 @@ -/* - * 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 */ //********************* Translated by: Mohammad.Yaghobi //********************* info@pgrammer.com --- m.yaghobi.abc@gmail.com @@ -68,8 +44,8 @@ define({ "ERROR_CREATING_FILE" : "بروز خطا بهنگام ایجاد {0} {1}. {2}", // Application error strings - "ERROR_IN_BROWSER_TITLE" : "!!! {APP_NAME} در مرورگرها اجرا نمی شود.", - "ERROR_IN_BROWSER" : "{APP_NAME} با HTML ساخته شده, ولی هم اکنون بعنوان یک برنامه رومیزی(desktop) اجرا می شود و شما می توانید از آن جهت ویرایش پرونده های خود استفاده نمایید.", + "ERROR_IN_BROWSER_TITLE" : "!!! برکتس در مرورگرها اجرا نمی شود.", + "ERROR_IN_BROWSER" : "برکتس با HTML ساخته شده, ولی هم اکنون بعنوان یک برنامه رومیزی(desktop) اجرا می شود و شما می توانید از آن جهت ویرایش پرونده های خود استفاده نمایید.", // FileIndexManager error string "ERROR_MAX_FILES_TITLE" : "خطا در فهرست بندی پرونده ها", @@ -88,7 +64,7 @@ define({ "LIVE_DEV_NEED_BASEURL_MESSAGE" : "جهت اجرای پیش نمایش زنده بصورت پرونده در سمت سرور(server-side), می بایست یک URL پایه برای پروژه تعریف نمایید.", "LIVE_DEV_SERVER_NOT_READY_MESSAGE" : "خطا در اجرای سرویس دهنده HTTP برای توسعه زنده پرونده ها. لطفا دوباره تلاش کنید.", "LIVE_DEVELOPMENT_INFO_TITLE" : "به بخش پیش نمایش زنده خوش آمدید!", - "LIVE_DEVELOPMENT_INFO_MESSAGE" : "پیش نمایش زنده {APP_NAME} به مرورگر متصل شده و یک پیش نمایش از پرونده HTML شما در مرورگرتان نشان خواهد داد, و هرگونه تغییری در کدهایتان را فورا در پیش نمایش اعمال خواهد نمود.

    در این نسخه موجود {APP_NAME}, پیش نمایش تنها با مرورگر Google Chrome برای اعمال فوری مقادیر CSS files برای حالت پیش نمایش کار خواهد کرد. هرگونه تغییری در پرونده های HTML یا JavaScript بصورت خودکار بعد از ذخیر بارگذاری خواهد شد.

    (شما این پیغام را برای بار دیگر مشاهده نخواهید کرد.)", + "LIVE_DEVELOPMENT_INFO_MESSAGE" : "پیش نمایش زنده برکتس به مرورگر متصل شده و یک پیش نمایش از پرونده HTML شما در مرورگرتان نشان خواهد داد, و هرگونه تغییری در کدهایتان را فورا در پیش نمایش اعمال خواهد نمود.

    در این نسخه موجود برکتس, پیش نمایش تنها با مرورگر Google Chrome برای اعمال فوری مقادیر CSS files برای حالت پیش نمایش کار خواهد کرد. هرگونه تغییری در پرونده های HTML یا JavaScript بصورت خودکار بعد از ذخیر بارگذاری خواهد شد.

    (شما این پیغام را برای بار دیگر مشاهده نخواهید کرد.)", "LIVE_DEVELOPMENT_TROUBLESHOOTING" : "برای اطلاع بیشتر, به پیوند روبرو مراجعه کنید Troubleshooting Live Development connection errors.", "LIVE_DEV_STATUS_TIP_NOT_CONNECTED" : "پیش نمایش زنده", @@ -109,8 +85,8 @@ define({ "CONFIRM_FOLDER_DELETE_TITLE" : "تائید حذف", "CONFIRM_FOLDER_DELETE" : "آیا مطمئنید می خواهید این پوشه حذف گردد {0}?", "FILE_DELETED_TITLE" : "پرونده حذف گردید", - "EXT_MODIFIED_MESSAGE" : "{0} تغییراتی بر روی دیسک انجام شده, ولی تغییرات بر روی {APP_NAME} ذخیره نگردیده.

    کدام نسخه را می خواهید نگه دارید?", - "EXT_DELETED_MESSAGE" : "{0} برخی مقادیر از دیسک حذف شده, ولی تغییرات بر روی {APP_NAME} اعمال/ذخیره نشده.

    آیا می خواهید تغییرات را حفظ کنید?", + "EXT_MODIFIED_MESSAGE" : "{0} تغییراتی بر روی دیسک انجام شده, ولی تغییرات بر روی برکتس ذخیره نگردیده.

    کدام نسخه را می خواهید نگه دارید?", + "EXT_DELETED_MESSAGE" : "{0} برخی مقادیر از دیسک حذف شده, ولی تغییرات بر روی برکتس اعمال/ذخیره نشده.

    آیا می خواهید تغییرات را حفظ کنید?", // Find, Replace, Find in Files "SEARCH_REGEXP_INFO" : "برای جستجوی regexp از /re/ استفاده کنید", @@ -130,7 +106,7 @@ define({ "RELEASE_NOTES" : "نکات و یادداشت های انتشار", "NO_UPDATE_TITLE" : "بروز هستید!", - "NO_UPDATE_MESSAGE" : "شما درحال استفاده از آخرین نسخه {APP_NAME} هستید.", + "NO_UPDATE_MESSAGE" : "شما درحال استفاده از آخرین نسخه برکتس هستید.", "FIND_REPLACE_TITLE_PART1" : "جایگزینی \"", "FIND_REPLACE_TITLE_PART2" : "\" با \"", @@ -275,8 +251,8 @@ define({ // Help menu commands "HELP_MENU" : "راهنما", "CMD_CHECK_FOR_UPDATE" : "برسی برای بروزرسانی", - "CMD_HOW_TO_USE_BRACKETS" : "چگونه از {APP_NAME} استفاده کنم", - "CMD_FORUM" : "{APP_NAME} انجمن گفت گو", + "CMD_HOW_TO_USE_BRACKETS" : "چگونه از برکتس استفاده کنم", + "CMD_FORUM" : "برکتس انجمن گفت گو", "CMD_RELEASE_NOTES" : "نکات انتشار", "CMD_REPORT_AN_ISSUE" : "گذارش یک مورد", "CMD_SHOW_EXTENSIONS_FOLDER" : "نمایش پوشه افزونه ها", @@ -309,9 +285,9 @@ define({ "ABOUT_TEXT_LINE5" : "ساخته شده با \u2764 و JavaScript بدست:", "ABOUT_TEXT_LINE6" : "بسیاری از مردم", "ABOUT_TEXT_WEB_PLATFORM_DOCS" : "Web Platform Docs and the Web Platform graphical logo are licensed under a Creative Commons Attribution license, CC-BY 3.0 Unported.", - "UPDATE_NOTIFICATION_TOOLTIP" : "Build جدیدی از{APP_NAME} هم اکنون در دسترس است! جهت مشاهده جزئیات کلیک کنید.", + "UPDATE_NOTIFICATION_TOOLTIP" : "Build جدیدی ازبرکتس هم اکنون در دسترس است! جهت مشاهده جزئیات کلیک کنید.", "UPDATE_AVAILABLE_TITLE" : "بروزرسانی در دسترس است", - "UPDATE_MESSAGE" : "نسخه جدیدی از {APP_NAME} هم اکنون در دسترس است. برخی از مشخصه های آن:", + "UPDATE_MESSAGE" : "نسخه جدیدی از برکتس هم اکنون در دسترس است. برخی از مشخصه های آن:", "GET_IT_NOW" : "هم اکنون دانلود کنید!", "PROJECT_SETTINGS_TITLE" : "تنظیمات پروژه برای: {0}", "PROJECT_SETTING_BASE_URL" : "پیش نمایش URL اصلی/پایه", @@ -328,7 +304,7 @@ define({ "REMOVE" : "حذف", "OVERWRITE" : "دوباره نویسی", "CANT_REMOVE_DEV" : "افزونه های موجود در پوشه \"dev\" می بایست بصورت دستی حذف گردند.", - "CANT_UPDATE" : "بروز رسانی سازگار با این نسخه از {APP_NAME} نیست.", + "CANT_UPDATE" : "بروز رسانی سازگار با این نسخه از برکتس نیست.", "INSTALL_EXTENSION_TITLE" : "نصب افزونه", "UPDATE_EXTENSION_TITLE" : "بروز رسانی افزونه", "INSTALL_EXTENSION_LABEL" : "URL افزونه", @@ -346,9 +322,9 @@ define({ "BAD_PACKAGE_NAME" : "نام بسته {0} نامعتبر می باشد.", "MISSING_PACKAGE_VERSION" : "پرونده package.json دارای خطا در نسخه می باشد.", "INVALID_VERSION_NUMBER" : "عدد نسخه این بسته ({0}) نا معتبر می باشد.", - "INVALID_BRACKETS_VERSION" : "خطا در سازگاری {APP_NAME} با رشته نامعتبر({0}).", + "INVALID_BRACKETS_VERSION" : "خطا در سازگاری برکتس با رشته نامعتبر({0}).", "DISALLOWED_WORDS" : "عبارت ({1}) اجازه وارد سازی در این فیلد را ندارد {0}.", - "API_NOT_COMPATIBLE" : "افزونه با این نسخه از برنامه {APP_NAME} سازگار نیست. در پوشه افزونه های قابل نمایش نصب نشد.", + "API_NOT_COMPATIBLE" : "افزونه با این نسخه از برنامه برکتس سازگار نیست. در پوشه افزونه های قابل نمایش نصب نشد.", "MISSING_MAIN" : "بسته حاوی پرونده main.js نیست.", "EXTENSION_ALREADY_INSTALLED" : "نصب این بسته سبب دوباره نویسی پرونده های افزونه قبلی می شود. دوباره نویسی صورت گیرد?", "EXTENSION_SAME_VERSION" : "نسخه این بسته با نسخه بسته ای که هم اکنون نصب می باشد برابر است. آیا افزونه دوباره نویسی گردد?", @@ -367,27 +343,27 @@ define({ "INSTALL_FROM_URL" : "نصب از URL\u2026", "EXTENSION_AUTHOR" : "مولف", "EXTENSION_DATE" : "تاریخ", - "EXTENSION_INCOMPATIBLE_NEWER" : "این افزونه احتیاج به نسخه جدیدی از {APP_NAME} دارد.", - "EXTENSION_INCOMPATIBLE_OLDER" : "نسخه فعلی این افزونه فقط با نسخه های قبلی {APP_NAME} سازگار است.", + "EXTENSION_INCOMPATIBLE_NEWER" : "این افزونه احتیاج به نسخه جدیدی از برکتس دارد.", + "EXTENSION_INCOMPATIBLE_OLDER" : "نسخه فعلی این افزونه فقط با نسخه های قبلی برکتس سازگار است.", "EXTENSION_NO_DESCRIPTION" : "بدون شرح", "EXTENSION_MORE_INFO" : "اطلاعات بیشتر...", "EXTENSION_ERROR" : "خطای افزونه", "EXTENSION_KEYWORDS" : "کلمات کلیدی", "EXTENSION_INSTALLED" : "نصب شده", - "EXTENSION_UPDATE_INSTALLED" : "این افزونه دریافت شده و بعد از ترک {APP_NAME} نصب خواهد شد.", + "EXTENSION_UPDATE_INSTALLED" : "این افزونه دریافت شده و بعد از ترک برکتس نصب خواهد شد.", "EXTENSION_SEARCH_PLACEHOLDER" : "جستجو", "EXTENSION_MORE_INFO_LINK" : "بیشتر", "BROWSE_EXTENSIONS" : "پیمایش افزونه ها", "EXTENSION_MANAGER_REMOVE" : "حذف افزونه", - "EXTENSION_MANAGER_REMOVE_ERROR" : "ناتوان در حذف یک یا برخی از افزونه ها: {0}. {APP_NAME} درحال ترک.", + "EXTENSION_MANAGER_REMOVE_ERROR" : "ناتوان در حذف یک یا برخی از افزونه ها: {0}. برکتس درحال ترک.", "EXTENSION_MANAGER_UPDATE" : "بروزرسانی افزونه", - "EXTENSION_MANAGER_UPDATE_ERROR" : "ناتوان در بروزرسانی یک یا برخی از افزونه ها: {0}. {APP_NAME} درحال ترک.", + "EXTENSION_MANAGER_UPDATE_ERROR" : "ناتوان در بروزرسانی یک یا برخی از افزونه ها: {0}. برکتس درحال ترک.", "MARKED_FOR_REMOVAL" : "نشانه گذاری جهت حذف", "UNDO_REMOVE" : "Undo", "MARKED_FOR_UPDATE" : "انتخاب شده برای بروزرسانی", "UNDO_UPDATE" : "Undo", "CHANGE_AND_QUIT_TITLE" : "تغییر در افزونه ها", - "CHANGE_AND_QUIT_MESSAGE" : "جهت بروزرسانی یا حذف افزونه ها می بایست {APP_NAME} را ترک و دوباره اجرا کنید. شما می بایست تغییرات ذخیره نشده را ذخیره نمایید.", + "CHANGE_AND_QUIT_MESSAGE" : "جهت بروزرسانی یا حذف افزونه ها می بایست برکتس را ترک و دوباره اجرا کنید. شما می بایست تغییرات ذخیره نشده را ذخیره نمایید.", "REMOVE_AND_QUIT" : "حذف افزونه ها و ترک(خروج)", "CHANGE_AND_QUIT" : "تغییر افزونه ها و ترک", "UPDATE_AND_QUIT" : "بروزرسانی افزونه ها و ترک", @@ -408,8 +384,8 @@ define({ // extensions/default/DebugCommands "DEBUG_MENU" : "خطا یابی", "CMD_SHOW_DEV_TOOLS" : "نمایش ابزار های توسعه دهندگان", - "CMD_REFRESH_WINDOW" : "بارگذاری مجدد {APP_NAME}", - "CMD_NEW_BRACKETS_WINDOW" : "پنجره {APP_NAME} جدید", + "CMD_REFRESH_WINDOW" : "بارگذاری مجدد برکتس", + "CMD_NEW_BRACKETS_WINDOW" : "پنجره برکتس جدید", "CMD_SWITCH_LANGUAGE" : "انتخاب زبان", "CMD_RUN_UNIT_TESTS" : "اجرای test", "CMD_SHOW_PERF_DATA" : "نمایش داده های عملکردی", @@ -419,7 +395,7 @@ define({ "LANGUAGE_TITLE" : "انتخاب زبان", "LANGUAGE_MESSAGE" : "زبان:", - "LANGUAGE_SUBMIT" : "بارگذاری مجدد {APP_NAME}", + "LANGUAGE_SUBMIT" : "بارگذاری مجدد برکتس", "LANGUAGE_CANCEL" : "لغو", "LANGUAGE_SYSTEM_DEFAULT" : "زبان پیش فرض", diff --git a/src/nls/fa-ir/urls.js b/src/nls/fa-ir/urls.js index 4882f8b76d2..99d26fa439c 100644 --- a/src/nls/fa-ir/urls.js +++ b/src/nls/fa-ir/urls.js @@ -1,28 +1,4 @@ -/* - * 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 */ define({ // Relative to the samples folder From 06816eb8f04dafea34a1185f0f0202a12b12eb97 Mon Sep 17 00:00:00 2001 From: Mohammad Yaghobi Date: Wed, 11 Sep 2013 12:05:58 +0430 Subject: [PATCH 0015/1140] Persian Translated Some improvement in translation --- src/nls/fa-ir/strings.js | 44 ++++++++++++++++++++-------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/nls/fa-ir/strings.js b/src/nls/fa-ir/strings.js index 53ca6cde517..e647466af7c 100644 --- a/src/nls/fa-ir/strings.js +++ b/src/nls/fa-ir/strings.js @@ -44,8 +44,8 @@ define({ "ERROR_CREATING_FILE" : "بروز خطا بهنگام ایجاد {0} {1}. {2}", // Application error strings - "ERROR_IN_BROWSER_TITLE" : "!!! برکتس در مرورگرها اجرا نمی شود.", - "ERROR_IN_BROWSER" : "برکتس با HTML ساخته شده, ولی هم اکنون بعنوان یک برنامه رومیزی(desktop) اجرا می شود و شما می توانید از آن جهت ویرایش پرونده های خود استفاده نمایید.", + "ERROR_IN_BROWSER_TITLE" : "!!! براکتس در مرورگرها اجرا نمی شود.", + "ERROR_IN_BROWSER" : "براکتس با HTML ساخته شده, ولی هم اکنون بعنوان یک برنامه رومیزی(desktop) اجرا می شود و شما می توانید از آن جهت ویرایش پرونده های خود استفاده نمایید.", // FileIndexManager error string "ERROR_MAX_FILES_TITLE" : "خطا در فهرست بندی پرونده ها", @@ -64,7 +64,7 @@ define({ "LIVE_DEV_NEED_BASEURL_MESSAGE" : "جهت اجرای پیش نمایش زنده بصورت پرونده در سمت سرور(server-side), می بایست یک URL پایه برای پروژه تعریف نمایید.", "LIVE_DEV_SERVER_NOT_READY_MESSAGE" : "خطا در اجرای سرویس دهنده HTTP برای توسعه زنده پرونده ها. لطفا دوباره تلاش کنید.", "LIVE_DEVELOPMENT_INFO_TITLE" : "به بخش پیش نمایش زنده خوش آمدید!", - "LIVE_DEVELOPMENT_INFO_MESSAGE" : "پیش نمایش زنده برکتس به مرورگر متصل شده و یک پیش نمایش از پرونده HTML شما در مرورگرتان نشان خواهد داد, و هرگونه تغییری در کدهایتان را فورا در پیش نمایش اعمال خواهد نمود.

    در این نسخه موجود برکتس, پیش نمایش تنها با مرورگر Google Chrome برای اعمال فوری مقادیر CSS files برای حالت پیش نمایش کار خواهد کرد. هرگونه تغییری در پرونده های HTML یا JavaScript بصورت خودکار بعد از ذخیر بارگذاری خواهد شد.

    (شما این پیغام را برای بار دیگر مشاهده نخواهید کرد.)", + "LIVE_DEVELOPMENT_INFO_MESSAGE" : "پیش نمایش زنده براکتس به مرورگر متصل شده و یک پیش نمایش از پرونده HTML شما در مرورگرتان نشان خواهد داد, و هرگونه تغییری در کدهایتان را فورا در پیش نمایش اعمال خواهد نمود.

    در این نسخه موجود براکتس, پیش نمایش تنها با مرورگر Google Chrome برای اعمال فوری مقادیر CSS files برای حالت پیش نمایش کار خواهد کرد. هرگونه تغییری در پرونده های HTML یا JavaScript بصورت خودکار بعد از ذخیر بارگذاری خواهد شد.

    (شما این پیغام را برای بار دیگر مشاهده نخواهید کرد.)", "LIVE_DEVELOPMENT_TROUBLESHOOTING" : "برای اطلاع بیشتر, به پیوند روبرو مراجعه کنید Troubleshooting Live Development connection errors.", "LIVE_DEV_STATUS_TIP_NOT_CONNECTED" : "پیش نمایش زنده", @@ -85,8 +85,8 @@ define({ "CONFIRM_FOLDER_DELETE_TITLE" : "تائید حذف", "CONFIRM_FOLDER_DELETE" : "آیا مطمئنید می خواهید این پوشه حذف گردد {0}?", "FILE_DELETED_TITLE" : "پرونده حذف گردید", - "EXT_MODIFIED_MESSAGE" : "{0} تغییراتی بر روی دیسک انجام شده, ولی تغییرات بر روی برکتس ذخیره نگردیده.

    کدام نسخه را می خواهید نگه دارید?", - "EXT_DELETED_MESSAGE" : "{0} برخی مقادیر از دیسک حذف شده, ولی تغییرات بر روی برکتس اعمال/ذخیره نشده.

    آیا می خواهید تغییرات را حفظ کنید?", + "EXT_MODIFIED_MESSAGE" : "{0} تغییراتی بر روی دیسک انجام شده, ولی تغییرات بر روی براکتس ذخیره نگردیده.

    کدام نسخه را می خواهید نگه دارید?", + "EXT_DELETED_MESSAGE" : "{0} برخی مقادیر از دیسک حذف شده, ولی تغییرات بر روی براکتس اعمال/ذخیره نشده.

    آیا می خواهید تغییرات را حفظ کنید?", // Find, Replace, Find in Files "SEARCH_REGEXP_INFO" : "برای جستجوی regexp از /re/ استفاده کنید", @@ -106,7 +106,7 @@ define({ "RELEASE_NOTES" : "نکات و یادداشت های انتشار", "NO_UPDATE_TITLE" : "بروز هستید!", - "NO_UPDATE_MESSAGE" : "شما درحال استفاده از آخرین نسخه برکتس هستید.", + "NO_UPDATE_MESSAGE" : "شما درحال استفاده از آخرین نسخه براکتس هستید.", "FIND_REPLACE_TITLE_PART1" : "جایگزینی \"", "FIND_REPLACE_TITLE_PART2" : "\" با \"", @@ -251,8 +251,8 @@ define({ // Help menu commands "HELP_MENU" : "راهنما", "CMD_CHECK_FOR_UPDATE" : "برسی برای بروزرسانی", - "CMD_HOW_TO_USE_BRACKETS" : "چگونه از برکتس استفاده کنم", - "CMD_FORUM" : "برکتس انجمن گفت گو", + "CMD_HOW_TO_USE_BRACKETS" : "چگونه از براکتس استفاده کنم", + "CMD_FORUM" : "براکتس انجمن گفت گو", "CMD_RELEASE_NOTES" : "نکات انتشار", "CMD_REPORT_AN_ISSUE" : "گذارش یک مورد", "CMD_SHOW_EXTENSIONS_FOLDER" : "نمایش پوشه افزونه ها", @@ -285,9 +285,9 @@ define({ "ABOUT_TEXT_LINE5" : "ساخته شده با \u2764 و JavaScript بدست:", "ABOUT_TEXT_LINE6" : "بسیاری از مردم", "ABOUT_TEXT_WEB_PLATFORM_DOCS" : "Web Platform Docs and the Web Platform graphical logo are licensed under a Creative Commons Attribution license, CC-BY 3.0 Unported.", - "UPDATE_NOTIFICATION_TOOLTIP" : "Build جدیدی ازبرکتس هم اکنون در دسترس است! جهت مشاهده جزئیات کلیک کنید.", + "UPDATE_NOTIFICATION_TOOLTIP" : "Build جدیدی ازبراکتس هم اکنون در دسترس است! جهت مشاهده جزئیات کلیک کنید.", "UPDATE_AVAILABLE_TITLE" : "بروزرسانی در دسترس است", - "UPDATE_MESSAGE" : "نسخه جدیدی از برکتس هم اکنون در دسترس است. برخی از مشخصه های آن:", + "UPDATE_MESSAGE" : "نسخه جدیدی از براکتس هم اکنون در دسترس است. برخی از مشخصه های آن:", "GET_IT_NOW" : "هم اکنون دانلود کنید!", "PROJECT_SETTINGS_TITLE" : "تنظیمات پروژه برای: {0}", "PROJECT_SETTING_BASE_URL" : "پیش نمایش URL اصلی/پایه", @@ -304,7 +304,7 @@ define({ "REMOVE" : "حذف", "OVERWRITE" : "دوباره نویسی", "CANT_REMOVE_DEV" : "افزونه های موجود در پوشه \"dev\" می بایست بصورت دستی حذف گردند.", - "CANT_UPDATE" : "بروز رسانی سازگار با این نسخه از برکتس نیست.", + "CANT_UPDATE" : "بروز رسانی سازگار با این نسخه از براکتس نیست.", "INSTALL_EXTENSION_TITLE" : "نصب افزونه", "UPDATE_EXTENSION_TITLE" : "بروز رسانی افزونه", "INSTALL_EXTENSION_LABEL" : "URL افزونه", @@ -322,9 +322,9 @@ define({ "BAD_PACKAGE_NAME" : "نام بسته {0} نامعتبر می باشد.", "MISSING_PACKAGE_VERSION" : "پرونده package.json دارای خطا در نسخه می باشد.", "INVALID_VERSION_NUMBER" : "عدد نسخه این بسته ({0}) نا معتبر می باشد.", - "INVALID_BRACKETS_VERSION" : "خطا در سازگاری برکتس با رشته نامعتبر({0}).", + "INVALID_BRACKETS_VERSION" : "خطا در سازگاری براکتس با رشته نامعتبر({0}).", "DISALLOWED_WORDS" : "عبارت ({1}) اجازه وارد سازی در این فیلد را ندارد {0}.", - "API_NOT_COMPATIBLE" : "افزونه با این نسخه از برنامه برکتس سازگار نیست. در پوشه افزونه های قابل نمایش نصب نشد.", + "API_NOT_COMPATIBLE" : "افزونه با این نسخه از برنامه براکتس سازگار نیست. در پوشه افزونه های قابل نمایش نصب نشد.", "MISSING_MAIN" : "بسته حاوی پرونده main.js نیست.", "EXTENSION_ALREADY_INSTALLED" : "نصب این بسته سبب دوباره نویسی پرونده های افزونه قبلی می شود. دوباره نویسی صورت گیرد?", "EXTENSION_SAME_VERSION" : "نسخه این بسته با نسخه بسته ای که هم اکنون نصب می باشد برابر است. آیا افزونه دوباره نویسی گردد?", @@ -343,27 +343,27 @@ define({ "INSTALL_FROM_URL" : "نصب از URL\u2026", "EXTENSION_AUTHOR" : "مولف", "EXTENSION_DATE" : "تاریخ", - "EXTENSION_INCOMPATIBLE_NEWER" : "این افزونه احتیاج به نسخه جدیدی از برکتس دارد.", - "EXTENSION_INCOMPATIBLE_OLDER" : "نسخه فعلی این افزونه فقط با نسخه های قبلی برکتس سازگار است.", + "EXTENSION_INCOMPATIBLE_NEWER" : "این افزونه احتیاج به نسخه جدیدی از براکتس دارد.", + "EXTENSION_INCOMPATIBLE_OLDER" : "نسخه فعلی این افزونه فقط با نسخه های قبلی براکتس سازگار است.", "EXTENSION_NO_DESCRIPTION" : "بدون شرح", "EXTENSION_MORE_INFO" : "اطلاعات بیشتر...", "EXTENSION_ERROR" : "خطای افزونه", "EXTENSION_KEYWORDS" : "کلمات کلیدی", "EXTENSION_INSTALLED" : "نصب شده", - "EXTENSION_UPDATE_INSTALLED" : "این افزونه دریافت شده و بعد از ترک برکتس نصب خواهد شد.", + "EXTENSION_UPDATE_INSTALLED" : "این افزونه دریافت شده و بعد از ترک براکتس نصب خواهد شد.", "EXTENSION_SEARCH_PLACEHOLDER" : "جستجو", "EXTENSION_MORE_INFO_LINK" : "بیشتر", "BROWSE_EXTENSIONS" : "پیمایش افزونه ها", "EXTENSION_MANAGER_REMOVE" : "حذف افزونه", - "EXTENSION_MANAGER_REMOVE_ERROR" : "ناتوان در حذف یک یا برخی از افزونه ها: {0}. برکتس درحال ترک.", + "EXTENSION_MANAGER_REMOVE_ERROR" : "ناتوان در حذف یک یا برخی از افزونه ها: {0}. براکتس درحال ترک.", "EXTENSION_MANAGER_UPDATE" : "بروزرسانی افزونه", - "EXTENSION_MANAGER_UPDATE_ERROR" : "ناتوان در بروزرسانی یک یا برخی از افزونه ها: {0}. برکتس درحال ترک.", + "EXTENSION_MANAGER_UPDATE_ERROR" : "ناتوان در بروزرسانی یک یا برخی از افزونه ها: {0}. براکتس درحال ترک.", "MARKED_FOR_REMOVAL" : "نشانه گذاری جهت حذف", "UNDO_REMOVE" : "Undo", "MARKED_FOR_UPDATE" : "انتخاب شده برای بروزرسانی", "UNDO_UPDATE" : "Undo", "CHANGE_AND_QUIT_TITLE" : "تغییر در افزونه ها", - "CHANGE_AND_QUIT_MESSAGE" : "جهت بروزرسانی یا حذف افزونه ها می بایست برکتس را ترک و دوباره اجرا کنید. شما می بایست تغییرات ذخیره نشده را ذخیره نمایید.", + "CHANGE_AND_QUIT_MESSAGE" : "جهت بروزرسانی یا حذف افزونه ها می بایست براکتس را ترک و دوباره اجرا کنید. شما می بایست تغییرات ذخیره نشده را ذخیره نمایید.", "REMOVE_AND_QUIT" : "حذف افزونه ها و ترک(خروج)", "CHANGE_AND_QUIT" : "تغییر افزونه ها و ترک", "UPDATE_AND_QUIT" : "بروزرسانی افزونه ها و ترک", @@ -384,8 +384,8 @@ define({ // extensions/default/DebugCommands "DEBUG_MENU" : "خطا یابی", "CMD_SHOW_DEV_TOOLS" : "نمایش ابزار های توسعه دهندگان", - "CMD_REFRESH_WINDOW" : "بارگذاری مجدد برکتس", - "CMD_NEW_BRACKETS_WINDOW" : "پنجره برکتس جدید", + "CMD_REFRESH_WINDOW" : "بارگذاری مجدد براکتس", + "CMD_NEW_BRACKETS_WINDOW" : "پنجره براکتس جدید", "CMD_SWITCH_LANGUAGE" : "انتخاب زبان", "CMD_RUN_UNIT_TESTS" : "اجرای test", "CMD_SHOW_PERF_DATA" : "نمایش داده های عملکردی", @@ -395,7 +395,7 @@ define({ "LANGUAGE_TITLE" : "انتخاب زبان", "LANGUAGE_MESSAGE" : "زبان:", - "LANGUAGE_SUBMIT" : "بارگذاری مجدد برکتس", + "LANGUAGE_SUBMIT" : "بارگذاری مجدد براکتس", "LANGUAGE_CANCEL" : "لغو", "LANGUAGE_SYSTEM_DEFAULT" : "زبان پیش فرض", From a288ce1cbef9cf0f9aef58f52238a6544909c425 Mon Sep 17 00:00:00 2001 From: sathyamoorthi Date: Wed, 11 Sep 2013 22:32:40 +0530 Subject: [PATCH 0016/1140] Unit test added for close others --- .../default/CloseOthers/unittests.js | 174 ++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 src/extensions/default/CloseOthers/unittests.js diff --git a/src/extensions/default/CloseOthers/unittests.js b/src/extensions/default/CloseOthers/unittests.js new file mode 100644 index 00000000000..79691c73875 --- /dev/null +++ b/src/extensions/default/CloseOthers/unittests.js @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2013 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, browser: true, nomen: true, indent: 4, maxerr: 50 */ +/*global define, describe, it, expect, beforeEach, afterEach, waitsFor, runs, brackets, waitsForDone, spyOn */ + +define(function (require, exports, module) { + "use strict"; + + var SpecRunnerUtils = brackets.getModule("spec/SpecRunnerUtils"), + FileUtils = brackets.getModule("file/FileUtils"), + CommandManager, + Commands, + Dialogs, + EditorManager, + DocumentManager; + + describe("CloseOthers", function () { + var extensionPath = FileUtils.getNativeModuleDirectoryPath(module), + testPath = extensionPath + "/unittest-files/", + testWindow, + $, + docSelectIndex, + cmdToRun, + brackets; + + function createUntitled(count) { + function doCreateUntitled(content) { + runs(function () { + var promise = CommandManager.execute(Commands.FILE_NEW_UNTITLED); + promise.done(function (untitledDoc) { + untitledDoc.replaceRange(content, {line: 0, ch: 0}); + }); + waitsForDone(promise, "FILE_NEW_UNTITLED"); + }); + } + + var i; + for (i = 0; i < count; i++) { + doCreateUntitled(String(i)); + } + } + + /** Expect a file to exist (failing test if not) and then delete it */ + function expectAndDelete(fullPath) { + runs(function () { + var promise = SpecRunnerUtils.resolveNativeFileSystemPath(fullPath); + waitsForDone(promise, "Verify file exists: " + fullPath); + }); + runs(function () { + var promise = SpecRunnerUtils.deletePath(fullPath); + waitsForDone(promise, "Remove testfile " + fullPath); + }); + } + + function getFilename(i) { + return testPath + "test_closeothers" + i + ".js"; + } + + beforeEach(function () { + + runs(function () { + SpecRunnerUtils.createTestWindowAndRun(this, function (w) { + testWindow = w; + $ = testWindow.$; + brackets = testWindow.brackets; + DocumentManager = testWindow.brackets.test.DocumentManager; + CommandManager = testWindow.brackets.test.CommandManager; + EditorManager = testWindow.brackets.test.EditorManager; + Dialogs = testWindow.brackets.test.Dialogs; + Commands = testWindow.brackets.test.Commands; + }); + }); + + runs(function () { + SpecRunnerUtils.loadProjectInTestWindow(testPath); + }); + + createUntitled(5); + + runs(function () { + var fileI = 0; + spyOn(testWindow.brackets.fs, 'showSaveDialog').andCallFake(function (dialogTitle, initialPath, proposedNewName, callback) { + callback(undefined, getFilename(fileI)); + fileI++; + }); + + var promise = CommandManager.execute(Commands.FILE_SAVE_ALL); + waitsForDone(promise, "FILE_SAVE_ALL"); + }); + }); + + afterEach(function () { + // Verify files exist & clean up + [0, 1, 2, 3, 4].forEach(function (i) { + expectAndDelete(getFilename(i)); + }); + + testWindow = null; + $ = null; + brackets = null; + EditorManager = null; + SpecRunnerUtils.closeTestWindow(); + }); + + + function runCloseOthers() { + var ws = DocumentManager.getWorkingSet(), + promise; + + if (ws.length > docSelectIndex) { + DocumentManager.getDocumentForPath(ws[docSelectIndex].fullPath).done(function (doc) { + DocumentManager.setCurrentDocument(doc); + }); + + promise = CommandManager.execute(cmdToRun); + waitsForDone(promise, cmdToRun); + } + } + + it("Close others", function () { + docSelectIndex = 2; + cmdToRun = "file.close_others"; + + runs(runCloseOthers); + + runs(function () { + expect(DocumentManager.getWorkingSet().length).toEqual(1); + }); + }); + + it("Close others above", function () { + docSelectIndex = 2; + cmdToRun = "file.close_above"; + + runs(runCloseOthers); + + runs(function () { + expect(DocumentManager.getWorkingSet().length).toEqual(3); + }); + }); + + it("Close others below", function () { + docSelectIndex = 1; + cmdToRun = "file.close_below"; + + runs(runCloseOthers); + + runs(function () { + expect(DocumentManager.getWorkingSet().length).toEqual(2); + }); + }); + }); +}); From 9086c1d1c1324c20f8548b05a22b55756b1fa1e8 Mon Sep 17 00:00:00 2001 From: sathyamoorthi Date: Wed, 11 Sep 2013 22:55:56 +0530 Subject: [PATCH 0017/1140] jsHint fixes --- src/extensions/default/CloseOthers/unittests.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/extensions/default/CloseOthers/unittests.js b/src/extensions/default/CloseOthers/unittests.js index 79691c73875..452388ea905 100644 --- a/src/extensions/default/CloseOthers/unittests.js +++ b/src/extensions/default/CloseOthers/unittests.js @@ -22,7 +22,7 @@ */ /*jslint vars: true, plusplus: true, devel: true, browser: true, nomen: true, indent: 4, maxerr: 50 */ -/*global define, describe, it, expect, beforeEach, afterEach, waitsFor, runs, brackets, waitsForDone, spyOn */ +/*global define, describe, it, expect, beforeEach, afterEach, runs, brackets, waitsForDone, spyOn */ define(function (require, exports, module) { "use strict"; @@ -37,7 +37,7 @@ define(function (require, exports, module) { describe("CloseOthers", function () { var extensionPath = FileUtils.getNativeModuleDirectoryPath(module), - testPath = extensionPath + "/unittest-files/", + testPath = extensionPath + "/unittest-files/", testWindow, $, docSelectIndex, @@ -143,10 +143,10 @@ define(function (require, exports, module) { cmdToRun = "file.close_others"; runs(runCloseOthers); - - runs(function () { - expect(DocumentManager.getWorkingSet().length).toEqual(1); - }); + + runs(function () { + expect(DocumentManager.getWorkingSet().length).toEqual(1); + }); }); it("Close others above", function () { From df2c99ddd65f5bfa26c67391328cc2058e483f13 Mon Sep 17 00:00:00 2001 From: Mohammad Yaghobi Date: Thu, 12 Sep 2013 13:40:54 +0430 Subject: [PATCH 0018/1140] Fix translation to Persian --- src/nls/fa-ir/strings.js | 32 +++++++++++++++++++++++++++----- src/nls/fa-ir/urls.js | 30 ++++++++++++++++++++++++++---- 2 files changed, 53 insertions(+), 9 deletions(-) diff --git a/src/nls/fa-ir/strings.js b/src/nls/fa-ir/strings.js index e647466af7c..da0f3e6fbba 100644 --- a/src/nls/fa-ir/strings.js +++ b/src/nls/fa-ir/strings.js @@ -1,15 +1,37 @@ +/* + * 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. + * + */ -//********************* Translated by: Mohammad.Yaghobi -//********************* info@pgrammer.com --- m.yaghobi.abc@gmail.com +/*jslint vars: true, plusplus: true, devel: true, nomen: true, indent: 4, maxerr: 50 */ +/*global define */ define({ - /** + /* * Errors */ // General file io error strings - "APP_NAME" : "براکتس", + "APP_NAME" : "براکتس", "GENERIC_ERROR" : "(خطا {0})", "NOT_FOUND_ERR" : "پرونده پیدا نشد.", "NOT_READABLE_ERR" : "فایل قابل خواندن نیست.", @@ -411,7 +433,7 @@ define({ "LOCALE_IT" : "Italian", "LOCALE_JA" : "Japanese", "LOCALE_NB" : "Norwegian", - "LOCALE_fa_ir" : "Persian-پارسی", + "LOCALE_fa_ir" : "Persian-پارسی", "LOCALE_PL" : "Polish", "LOCALE_PT_BR" : "Portuguese, Brazil", "LOCALE_PT_PT" : "Portuguese", diff --git a/src/nls/fa-ir/urls.js b/src/nls/fa-ir/urls.js index 99d26fa439c..db6c9ad6274 100644 --- a/src/nls/fa-ir/urls.js +++ b/src/nls/fa-ir/urls.js @@ -1,8 +1,30 @@ +/* + * 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 */ define({ - // Relative to the samples folder - "GETTING_STARTED" : "root/Getting Started", - "ADOBE_THIRD_PARTY" : "http://www.adobe.com/go/thirdparty/", - "WEB_PLATFORM_DOCS_LICENSE" : "http://creativecommons.org/licenses/by/3.0/", + // Relative to the samples folder + "WEB_PLATFORM_DOCS_LICENSE" : "http://creativecommons.org/licenses/by/3.0/deed.fa", }); From 31a1cfbbc32730d27be274778a60f8fecfc2df27 Mon Sep 17 00:00:00 2001 From: Mohammad Yaghobi Date: Fri, 13 Sep 2013 15:19:48 +0430 Subject: [PATCH 0019/1140] Improve Persian translation --- src/nls/fa-ir/strings.js | 38 +++++++++++++++++++------------------- src/nls/fa-ir/urls.js | 2 +- 2 files changed, 20 insertions(+), 20 deletions(-) diff --git a/src/nls/fa-ir/strings.js b/src/nls/fa-ir/strings.js index da0f3e6fbba..2c6c7bdbb1e 100644 --- a/src/nls/fa-ir/strings.js +++ b/src/nls/fa-ir/strings.js @@ -130,7 +130,7 @@ define({ "NO_UPDATE_TITLE" : "بروز هستید!", "NO_UPDATE_MESSAGE" : "شما درحال استفاده از آخرین نسخه براکتس هستید.", - "FIND_REPLACE_TITLE_PART1" : "جایگزینی \"", + "FIND_REPLACE_TITLE_PART1" : "جستجو و جایگزینی \"", "FIND_REPLACE_TITLE_PART2" : "\" با \"", "FIND_REPLACE_TITLE_PART3" : "\" — {2} {0} {1}", @@ -225,13 +225,13 @@ define({ "CMD_FIND_IN_SUBTREE" : "جستجو در\u2026", "CMD_FIND_NEXT" : "بعدی", "CMD_FIND_PREVIOUS" : "قبلی", - "CMD_REPLACE" : "جایگزینی", + "CMD_REPLACE" : "جستجو و جایگزینی", "CMD_INDENT" : "برجسته سازی", "CMD_UNINDENT" : "حذف برجستگی", "CMD_DUPLICATE" : "دو نسخه کردن", "CMD_DELETE_LINES" : "حذف خط", - "CMD_COMMENT" : "تعویض خط نظر", - "CMD_BLOCK_COMMENT" : "تعویض قالب نظر", + "CMD_COMMENT" : "تعویض خط به نظر", + "CMD_BLOCK_COMMENT" : "تعویض نظر به خط", "CMD_LINE_UP" : "خط را یکی به بالا ببر", "CMD_LINE_DOWN" : "خط را یکی به پایین ببر", "CMD_OPEN_LINE_ABOVE" : "باز کردن خط بالا", @@ -241,16 +241,16 @@ define({ // View menu commands "VIEW_MENU" : "نمایش", - "CMD_HIDE_SIDEBAR" : "پنهان کردن نوار", + "CMD_HIDE_SIDEBAR" : "پنهان کردن نوار کاری", "CMD_SHOW_SIDEBAR" : "نمایش نوار", "CMD_INCREASE_FONT_SIZE" : "افزایش سایز نوشته ها", "CMD_DECREASE_FONT_SIZE" : "کاهش سایز نوشته ها", "CMD_RESTORE_FONT_SIZE" : "پیشفرض سایز نوشته ها", "CMD_SCROLL_LINE_UP" : "حرکت به بالا", "CMD_SCROLL_LINE_DOWN" : "حرکت به پایین", - "CMD_TOGGLE_LINE_NUMBERS" : "شماره سطرها/خط ها", - "CMD_TOGGLE_ACTIVE_LINE" : "نشانه گذاری خط/سطر فعال", - "CMD_TOGGLE_WORD_WRAP" : "شکستن کلمات", + "CMD_TOGGLE_LINE_NUMBERS" : "شماره گذاری خط ها", + "CMD_TOGGLE_ACTIVE_LINE" : "نشانه گذاری خط فعال", + "CMD_TOGGLE_WORD_WRAP" : "شکستن عبارات طولانی", "CMD_SORT_WORKINGSET_BY_ADDED" : "مرتب سازی بر اساس ترتیب افزودن", "CMD_SORT_WORKINGSET_BY_NAME" : "مرتب سازی بر اساس نام", "CMD_SORT_WORKINGSET_BY_TYPE" : "مرتب سازی بر اساس نوع", @@ -267,19 +267,19 @@ define({ "CMD_QUICK_EDIT_NEXT_MATCH" : "تطبیق یافته بعدی", "CMD_NEXT_DOC" : "سند بعدی", "CMD_PREV_DOC" : "سند قبلی", - "CMD_SHOW_IN_TREE" : "نمایش در پرونده درختی", + "CMD_SHOW_IN_TREE" : "نمایش پرونده در میان پرونده های کاری", "CMD_SHOW_IN_OS" : "نمایش در OS", // Help menu commands "HELP_MENU" : "راهنما", "CMD_CHECK_FOR_UPDATE" : "برسی برای بروزرسانی", "CMD_HOW_TO_USE_BRACKETS" : "چگونه از براکتس استفاده کنم", - "CMD_FORUM" : "براکتس انجمن گفت گو", + "CMD_FORUM" : "انجمن گفتگوی براکتس", "CMD_RELEASE_NOTES" : "نکات انتشار", - "CMD_REPORT_AN_ISSUE" : "گذارش یک مورد", + "CMD_REPORT_AN_ISSUE" : "گزارش یک مورد اشکال", "CMD_SHOW_EXTENSIONS_FOLDER" : "نمایش پوشه افزونه ها", "CMD_TWITTER" : "{TWITTER_NAME} در تویتر", - "CMD_ABOUT" : "پیرامون {APP_TITLE}", + "CMD_ABOUT" : "پیرامون براکتس", // Special commands invoked by the native shell @@ -297,18 +297,18 @@ define({ "DELETE" : "حذف", "RELOAD_FROM_DISK" : "دوباره بارگذاری کن از دیسک", "KEEP_CHANGES_IN_EDITOR" : "تغییرات در ویرایشگر را نگه دار", - "CLOSE_DONT_SAVE" : "بستن(بدون ذخیرهسازی)", + "CLOSE_DONT_SAVE" : "بستن(بدون ذخیره سازی)", "RELAUNCH_CHROME" : "اجرای دوباره Chrome", "ABOUT" : "پیرامون", "CLOSE" : "بستن", "ABOUT_TEXT_LINE1" : "sprint {VERSION_MINOR} {BUILD_TYPE} {VERSION}", - "ABOUT_TEXT_LINE3" : "
    یادداشتهای ها، شرایط و ضوابط مربوط به نرم افزار شخص ثالث در آدرسhttp://www.adobe.com/go/thirdparty/ جهت تلفیق و بعنوان مرجع قرار داده شده.", - "ABOUT_TEXT_LINE4" : "اسناد و منابع نرم افزار در پیوند https://github.com/adobe/brackets/ در دسترس می باشد.
    ترجمه توسط: محمد یعقوبی
    info@pgrammer.com

    ", - "ABOUT_TEXT_LINE5" : "ساخته شده با \u2764 و JavaScript بدست:", + "ABOUT_TEXT_LINE3" : "
    یادداشتهای ها، شرایط و ضوابط مربوط به نرم افزار و حقوق شخص ثالث در آدرسhttp://www.adobe.com/go/thirdparty/ جهت تلفیق و بعنوان مرجع قرار داده شده.", + "ABOUT_TEXT_LINE4" : "اسناد، نکات و منابع نرم افزار در پیوند https://github.com/adobe/brackets/ در دسترس می باشد. می توانید جهت مشاهده سریع بروزرسانی های قبل از انتشار نرم افزار بهمین لینک مراجعه فرمایید.
    ترجمه توسط محمد یعقوبی", + "ABOUT_TEXT_LINE5" : "ساخته شده با \u2764 و JavaScript و بدست:", "ABOUT_TEXT_LINE6" : "بسیاری از مردم", "ABOUT_TEXT_WEB_PLATFORM_DOCS" : "Web Platform Docs and the Web Platform graphical logo are licensed under a Creative Commons Attribution license, CC-BY 3.0 Unported.", "UPDATE_NOTIFICATION_TOOLTIP" : "Build جدیدی ازبراکتس هم اکنون در دسترس است! جهت مشاهده جزئیات کلیک کنید.", - "UPDATE_AVAILABLE_TITLE" : "بروزرسانی در دسترس است", + "UPDATE_AVAILABLE_TITLE" : "بروزرسانی جدید در دسترس است", "UPDATE_MESSAGE" : "نسخه جدیدی از براکتس هم اکنون در دسترس است. برخی از مشخصه های آن:", "GET_IT_NOW" : "هم اکنون دانلود کنید!", "PROJECT_SETTINGS_TITLE" : "تنظیمات پروژه برای: {0}", @@ -407,7 +407,7 @@ define({ "DEBUG_MENU" : "خطا یابی", "CMD_SHOW_DEV_TOOLS" : "نمایش ابزار های توسعه دهندگان", "CMD_REFRESH_WINDOW" : "بارگذاری مجدد براکتس", - "CMD_NEW_BRACKETS_WINDOW" : "پنجره براکتس جدید", + "CMD_NEW_BRACKETS_WINDOW" : "یک پنجره جدید از براکتس باز کنید", "CMD_SWITCH_LANGUAGE" : "انتخاب زبان", "CMD_RUN_UNIT_TESTS" : "اجرای test", "CMD_SHOW_PERF_DATA" : "نمایش داده های عملکردی", @@ -471,4 +471,4 @@ define({ // extensions/default/WebPlatformDocs "DOCS_MORE_LINK" : "بیشتر بخوانید" -}); +}); \ No newline at end of file diff --git a/src/nls/fa-ir/urls.js b/src/nls/fa-ir/urls.js index db6c9ad6274..5bd42f56dd3 100644 --- a/src/nls/fa-ir/urls.js +++ b/src/nls/fa-ir/urls.js @@ -27,4 +27,4 @@ define({ // Relative to the samples folder "WEB_PLATFORM_DOCS_LICENSE" : "http://creativecommons.org/licenses/by/3.0/deed.fa", -}); +}); \ No newline at end of file From 5f2c80926bcc4ccf17b619cf9aeb755c76f167bc Mon Sep 17 00:00:00 2001 From: sathyamoorthi Date: Wed, 18 Sep 2013 10:17:16 +0530 Subject: [PATCH 0020/1140] unnittest-files folder added. --- src/extensions/default/CloseOthers/unittest-files/dummy.js | 1 + 1 file changed, 1 insertion(+) create mode 100644 src/extensions/default/CloseOthers/unittest-files/dummy.js diff --git a/src/extensions/default/CloseOthers/unittest-files/dummy.js b/src/extensions/default/CloseOthers/unittest-files/dummy.js new file mode 100644 index 00000000000..7ed0ff9bdbc --- /dev/null +++ b/src/extensions/default/CloseOthers/unittest-files/dummy.js @@ -0,0 +1 @@ +//This is dummy file. To commit unnittest-files folder git needs a file. \ No newline at end of file From 21bd1d431eabfbab0014451b7531d762b0850d84 Mon Sep 17 00:00:00 2001 From: Marcel Gerber Date: Sat, 21 Sep 2013 22:28:10 +0200 Subject: [PATCH 0021/1140] Remove the ability to switch language to the current language The "Restart brackets" button will be disabled if you select the current lang in the "Switch Language" dialog. Tested on Windows 8 with Brackets 0.32 master c05cfd5 --- src/extensions/default/DebugCommands/main.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/extensions/default/DebugCommands/main.js b/src/extensions/default/DebugCommands/main.js index c28588bf8a0..328ab3a6bfe 100644 --- a/src/extensions/default/DebugCommands/main.js +++ b/src/extensions/default/DebugCommands/main.js @@ -150,9 +150,9 @@ define(function (require, exports, module) { languages = []; function setLanguage(event) { - locale = $select.val(); - $submit.prop("disabled", false); - } + locale = $select.val(); + $submit.prop("disabled", locale === (curLocale === null ? "" : curLocale)); + } // returns the localized label for the given locale // or the locale, if nothing found From 22d0c8d8f521821b681ebfe1b7951686159e43de Mon Sep 17 00:00:00 2001 From: Marcel Gerber Date: Sat, 21 Sep 2013 22:30:07 +0200 Subject: [PATCH 0022/1140] Fixed indent --- src/extensions/default/DebugCommands/main.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/extensions/default/DebugCommands/main.js b/src/extensions/default/DebugCommands/main.js index 328ab3a6bfe..dc753729414 100644 --- a/src/extensions/default/DebugCommands/main.js +++ b/src/extensions/default/DebugCommands/main.js @@ -150,9 +150,9 @@ define(function (require, exports, module) { languages = []; function setLanguage(event) { - locale = $select.val(); - $submit.prop("disabled", locale === (curLocale === null ? "" : curLocale)); - } + locale = $select.val(); + $submit.prop("disabled", locale === (curLocale === null ? "" : curLocale)); + } // returns the localized label for the given locale // or the locale, if nothing found From abf883ae3a19aba58c5aaa40ab9e60990217f931 Mon Sep 17 00:00:00 2001 From: Marcel Gerber Date: Mon, 23 Sep 2013 15:36:32 +0200 Subject: [PATCH 0023/1140] Fix #5275: $1 and so on now work with replacing with RegEx Fixes #5275 --- src/search/FindReplace.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/search/FindReplace.js b/src/search/FindReplace.js index 89f88d3a799..4b49caff897 100644 --- a/src/search/FindReplace.js +++ b/src/search/FindReplace.js @@ -564,7 +564,7 @@ define(function (require, exports, module) { }; var doReplace = function (match) { cursor.replace(typeof query === "string" ? text : - text.replace(/\$(\d)/, fnMatch)); + text.replace(/\$(\d)/, function (w, i) { return match[i]; })); advance(); }; advance(); From 15db0a455fcee82a8e81563c500aeac22ac6df09 Mon Sep 17 00:00:00 2001 From: RaymondLim Date: Mon, 23 Sep 2013 15:51:44 -0700 Subject: [PATCH 0024/1140] Don't allow drag-and-drop of files/folders when a modal dialog is showing. --- src/brackets.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/brackets.js b/src/brackets.js index a65ba1bd44e..f255e376bd3 100644 --- a/src/brackets.js +++ b/src/brackets.js @@ -299,7 +299,9 @@ define(function (require, exports, module) { if (event.originalEvent.dataTransfer.files) { event.stopPropagation(); event.preventDefault(); - if (DragAndDrop.isValidDrop(event.originalEvent.dataTransfer.items)) { + // Don't allow drag-and-drop of files/folders when a modal dialog is showing. + if ($(".modal.instance").length === 0 && + DragAndDrop.isValidDrop(event.originalEvent.dataTransfer.items)) { dropEffect = "copy"; } event.originalEvent.dataTransfer.dropEffect = dropEffect; From 3189d09b8fa6135691cb5f2ed4eb7e4b88a2c096 Mon Sep 17 00:00:00 2001 From: kvarel Date: Wed, 25 Sep 2013 00:01:59 +0200 Subject: [PATCH 0025/1140] czech language - sprint 31 updated --- src/nls/cs/strings.js | 63 ++++++++++++++++++++++++++++--------------- 1 file changed, 41 insertions(+), 22 deletions(-) diff --git a/src/nls/cs/strings.js b/src/nls/cs/strings.js index f5f629c8482..4bf9e39fba0 100644 --- a/src/nls/cs/strings.js +++ b/src/nls/cs/strings.js @@ -86,13 +86,14 @@ define({ "LIVE_DEV_SERVER_NOT_READY_MESSAGE" : "Chyba při spouštění HTTP serveru pro soubory živého náhledu. Prosím, zkuste to znovu.", "LIVE_DEVELOPMENT_INFO_TITLE" : "Vítejte v živém náhledu!", "LIVE_DEVELOPMENT_INFO_MESSAGE" : "Živý náhled připojí {APP_NAME} k vašemu prohlížeči. Spustí náhled HTML souboru, který se aktualizuje pokaždé, kdy editujete svůj kód.

    V této verzi {APP_NAME}, živý náhled funguje pouze v Google Chrome a aktualizuje změny v CSS souborech. Změny v HTML nebo JavaScript souborech jsou automaticky načteny, když soubor uložíte.

    (Tato zpráva se zobrazí pouze jednou.)", - "LIVE_DEVELOPMENT_TROUBLESHOOTING" : "Pro více informací navštivte Troubleshooting Live Development connection errors.", + "LIVE_DEVELOPMENT_TROUBLESHOOTING" : "Pro více informací navštivte Troubleshooting Live Development connection errors.", "LIVE_DEV_STATUS_TIP_NOT_CONNECTED" : "Živý náhled", "LIVE_DEV_STATUS_TIP_PROGRESS1" : "Živý náhled: Připojování\u2026", "LIVE_DEV_STATUS_TIP_PROGRESS2" : "Živý náhled: Spouštění\u2026", "LIVE_DEV_STATUS_TIP_CONNECTED" : "Zrušit živý náhled", "LIVE_DEV_STATUS_TIP_OUT_OF_SYNC" : "Živý náhled: Klikněte pro odpojení (uložte soubor)", + "LIVE_DEV_STATUS_TIP_SYNC_ERROR" : "Živý náhled (neaktulalizuje se díky syntaxové chybě)", "LIVE_DEV_DETACHED_REPLACED_WITH_DEVTOOLS" : "Živý náhled byl zrušen, protože byly otevřeny vývojářské nástroje prohlížeče", "LIVE_DEV_DETACHED_TARGET_CLOSED" : "Živý náhled byl zrušen, protože dokument byl zavřen v prohlížeči", @@ -112,10 +113,19 @@ define({ // Najít, Nahradit, Nahradit v souborech "SEARCH_REGEXP_INFO" : "Použijte /re/ syntax pro regexp hledání", "FIND_RESULT_COUNT" : "{0} výsledků", + "FIND_RESULT_COUNT_SINGLE" : "1 výsledek", + "FIND_NO_RESULTS" : "Žádné výsledky", "WITH" : "S", "BUTTON_YES" : "Ano", "BUTTON_NO" : "Ne", + "BUTTON_REPLACE_ALL" : "Vše\u2026", "BUTTON_STOP" : "Stop", + "BUTTON_REPLACE" : "Nahradit", + + "BUTTON_NEXT" : "\u25B6", + "BUTTON_PREV" : "\u25C0", + "BUTTON_NEXT_HINT" : "Další shoda", + "BUTTON_PREV_HINT" : "Předcházející shoda", "OPEN_FILE" : "Otevřít soubor", "SAVE_FILE_AS" : "Uložit soubor", @@ -125,19 +135,22 @@ define({ "NO_UPDATE_TITLE" : "Vše je aktuální!", "NO_UPDATE_MESSAGE" : "Verze {APP_NAME} je aktuální.", - "FIND_IN_FILES_TITLE" : "pro \"{4}\" {5} - {0} {1} v {2} {3}", + "FIND_REPLACE_TITLE_PART1" : "Nahradit \"", + "FIND_REPLACE_TITLE_PART2" : "\" s \"", + "FIND_REPLACE_TITLE_PART3" : "\" — {2} {0} {1}", + + "FIND_IN_FILES_TITLE_PART1" : "\"", + "FIND_IN_FILES_TITLE_PART2" : "\" nalezen", + "FIND_IN_FILES_TITLE_PART3" : "— {0} {1} v {2} {3}", "FIND_IN_FILES_SCOPED" : "v {0}", "FIND_IN_FILES_NO_SCOPE" : "v projektu", - "FIND_IN_FILES_FILE" : "soubor", + "FIND_IN_FILES_FILE" : "souboru", "FIND_IN_FILES_FILES" : "souborech", "FIND_IN_FILES_MATCH" : "výsledek", "FIND_IN_FILES_MATCHES" : "výsledků", "FIND_IN_FILES_MORE_THAN" : "více než ", "FIND_IN_FILES_PAGING" : "{0}—{1}", - "FIND_IN_FILES_LESS" : " Méně", - "FIND_IN_FILES_MORE" : " Více", "FIND_IN_FILES_FILE_PATH" : "Soubor: {0}", - "FIND_IN_FILES_LINE" : "řádek: {0}", "ERROR_FETCHING_UPDATE_INFO_TITLE" : "Chyba při získávání informací o aktualizaci", "ERROR_FETCHING_UPDATE_INFO_MSG" : "Nelze získat aktualizace. Ujistěte se, že máte připojení na internet a zkuste to znovu.", @@ -173,6 +186,15 @@ define({ "STATUSBAR_LINE_COUNT_SINGULAR" : "Řádek: {0}", "STATUSBAR_LINE_COUNT_PLURAL" : "Řádky: {0}", + // CodeInspection: chyby/varování + "ERRORS_PANEL_TITLE" : "{0} chyb", + "SINGLE_ERROR" : "1 {0} chyba", + "MULTIPLE_ERRORS" : "{1} {0} chyby", + "NO_ERRORS" : "Žádné {0} chyby - dobrá práce!", + "LINT_DISABLED" : "Lint je vypnutý", + "NO_LINT_AVAILABLE" : "Lint není dostupný pro {0}", + "NOTHING_TO_LINT" : "Nic pro lintování", + /** * Příkazy */ @@ -242,6 +264,7 @@ define({ "CMD_TOGGLE_LINE_NUMBERS" : "Čísla řádků", "CMD_TOGGLE_ACTIVE_LINE" : "Zvýraznit aktivní řádek", "CMD_TOGGLE_WORD_WRAP" : "Zalomit řádky", + "CMD_VIEW_TOGGLE_INSPECTION" : "Lint soubory pro uložení", "CMD_SORT_WORKINGSET_BY_ADDED" : "Řadit podle data", "CMD_SORT_WORKINGSET_BY_NAME" : "Řadit podle jména", "CMD_SORT_WORKINGSET_BY_TYPE" : "Řadit podle typu", @@ -252,6 +275,7 @@ define({ "CMD_QUICK_OPEN" : "Rychle otevřít", "CMD_GOTO_LINE" : "Přejít na řádek", "CMD_GOTO_DEFINITION" : "Přejít na funkci", + "CMD_GOTO_FIRST_PROBLEM" : "Přejít na první chybu/varování", "CMD_TOGGLE_QUICK_EDIT" : "Rychlá úprava", "CMD_TOGGLE_QUICK_DOCS" : "Rychlá dokumentace", "CMD_QUICK_EDIT_PREV_MATCH" : "Předchozí shoda", @@ -273,11 +297,6 @@ define({ "CMD_ABOUT" : "O aplikaci {APP_TITLE}", - // Speciální příkazy spustěné pomocí shell - "CMD_CLOSE_WINDOW" : "Zavřít okno", - "CMD_ABORT_QUIT" : "Zrušit", - "CMD_BEFORE_MENUPOPUP" : "Before Menu Popup", - // Řetězce pro main-view.html "EXPERIMENTAL_BUILD" : "experimentální verze", "DEVELOPMENT_BUILD" : "vývojová verze", @@ -293,11 +312,11 @@ define({ "ABOUT" : "O aplikaci", "CLOSE" : "Zavřít", "ABOUT_TEXT_LINE1" : "sprint {VERSION_MINOR} {BUILD_TYPE} {VERSION}", - "ABOUT_TEXT_LINE3" : "Oznámení, podmínky týkající se software třetích stran jsou umístěny na {ADOBE_THIRD_PARTY} a začleněny prostřednictvím odkazu zde.", - "ABOUT_TEXT_LINE4" : "Dokumentace a zdrojový kód na https://github.com/adobe/brackets/.", + "ABOUT_TEXT_LINE3" : "Oznámení, podmínky týkající se software třetích stran jsou umístěny na http://www.adobe.com/go/thirdparty/ a začleněny prostřednictvím odkazu zde.", + "ABOUT_TEXT_LINE4" : "Dokumentace a zdrojový kód na https://github.com/adobe/brackets/.", "ABOUT_TEXT_LINE5" : "Vytvořeno s \u2764 a pomocí JavaScript těmito lidmi:", "ABOUT_TEXT_LINE6" : "Mnoho lidí (ale momentálně máme problém s načítáním dat).", - "ABOUT_TEXT_WEB_PLATFORM_DOCS" : "Web Platform Docs a Web Platform logo využívají licenci Creative Commons Attribution, CC-BY 3.0 Unported.", + "ABOUT_TEXT_WEB_PLATFORM_DOCS" : "Web Platform Docs a Web Platform logo využívají licenci Creative Commons Attribution, CC-BY 3.0 Unported.", "UPDATE_NOTIFICATION_TOOLTIP" : "Je dostupná nová verze {APP_NAME} ! Klikněte zde pro více informací.", "UPDATE_AVAILABLE_TITLE" : "Dostupná aktualizace", "UPDATE_MESSAGE" : "Nová verze {APP_NAME} je dostupná. Seznam některých vylepšení:", @@ -309,7 +328,7 @@ define({ "BASEURL_ERROR_SEARCH_DISALLOWED" : "URL nemůže obsahovat výrazy pro hledání jako \"{0}\".", "BASEURL_ERROR_HASH_DISALLOWED" : "URL nemůže obsahovat znaky jako \"{0}\".", "BASEURL_ERROR_INVALID_CHAR" : "Zvláštní znaky jako '{0}' musí být %-enkódovány.", - "BASEURL_ERROR_UNKNOWN_ERROR" : "Neznámá chyba při zpracování URL", + "BASEURL_ERROR_UNKNOWN_ERROR" : "Neznámá chyba při analýze URL", // Řetězce pro správce doplňků "INSTALL" : "Instalovat", @@ -427,6 +446,7 @@ define({ "LOCALE_PT_BR" : "Portugalsky, Brazílie", "LOCALE_PT_PT" : "Portugalsky", "LOCALE_RU" : "Rusky", + "LOCALE_SK" : "Slovensky", "LOCALE_SV" : "Švédsky", "LOCALE_TR" : "Turecky", "LOCALE_FI" : "Finsky", @@ -444,19 +464,18 @@ define({ // extensions/default/JavaScriptCodeHints "CMD_JUMPTO_DEFINITION" : "Přejít na definici", + "CMD_SHOW_PARAMETER_HINT" : "Zobrazit nápovědu parametru", + "NO_ARGUMENTS" : "<žádné parametry>", // extensions/default/JSLint - "CMD_JSLINT" : "Povolit JSLint", - "CMD_JSLINT_FIRST_ERROR" : "Přejít na první JSLint chybu", - "JSLINT_ERRORS" : "JSLint chyby", - "JSLINT_ERROR_INFORMATION" : "1 JSLint chyba", - "JSLINT_ERRORS_INFORMATION" : "{0} JSLint chyb", - "JSLINT_NO_ERRORS" : "Žádné JSLint chyby - výborně!", - "JSLINT_DISABLED" : "JSLint je vypnut nebo nefunguje s tímto souborem.", + "JSLINT_NAME" : "JSLint", // extensions/default/QuickView "CMD_ENABLE_QUICK_VIEW" : "Rychlý náhled", + // extensions/default/RecentProjects + "CMD_TOGGLE_RECENT_PROJECTS" : "Nedávné projekty", + // extensions/default/WebPlatformDocs "DOCS_MORE_LINK" : "Více" }); From 9b1149d1aae6da9a706ddcf66bf30775d1c714a3 Mon Sep 17 00:00:00 2001 From: RafaelOlivra Date: Wed, 25 Sep 2013 18:05:06 -0300 Subject: [PATCH 0026/1140] Update index.html MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Translated the alternative image text to pt_BR. From "A screenshot showing CSS Quick Edit" to the equivalent "Uma screenshot mostrando o editor rápido de CSS" --- samples/pt-br/Primeiros Passos/index.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/samples/pt-br/Primeiros Passos/index.html b/samples/pt-br/Primeiros Passos/index.html index 4100d65e221..7a62521bce9 100644 --- a/samples/pt-br/Primeiros Passos/index.html +++ b/samples/pt-br/Primeiros Passos/index.html @@ -47,7 +47,7 @@

    Edição Rápida de CSS e JavaScript

    - A screenshot showing CSS Quick Edit + Uma screenshot mostrando o editor rápido de CSS \ No newline at end of file +--> From 7d5b253337eb1012cef8f78ccc7c262bc5ab0f62 Mon Sep 17 00:00:00 2001 From: sandeepjain88 Date: Thu, 26 Sep 2013 10:51:40 +0530 Subject: [PATCH 0027/1140] Recent Projects - Pressing delete key removes project from list --- src/extensions/default/RecentProjects/main.js | 36 +++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/src/extensions/default/RecentProjects/main.js b/src/extensions/default/RecentProjects/main.js index 654cfad26e0..793dfbc9f2f 100644 --- a/src/extensions/default/RecentProjects/main.js +++ b/src/extensions/default/RecentProjects/main.js @@ -178,6 +178,35 @@ define(function (require, exports, module) { removeDeleteButton(); } + /** + * Deletes the selected item and + * move the focus to next item in list. + * + * @return {boolean} TRUE if project is removed + */ + function removeSelectedItem(e) { + var recentProjects = getRecentProjects(), + $cacheItem = $dropdownItem, + index = recentProjects.indexOf($cacheItem.data("path")); + + // When focus is not on project item + if (index === -1) { + return false; + } + + // remove project + recentProjects.splice(index, 1); + prefs.setValue("recentProjects", recentProjects); + checkHovers(e.pageX, e.pageY); + + if (recentProjects.length === 1) { + $dropdown.find(".divider").remove(); + } + selectNextItem(+1); + $cacheItem.closest("li").remove(); + return true; + } + /** * Handles the Key Down events * @param {KeyboardEvent} event @@ -202,6 +231,13 @@ define(function (require, exports, module) { } keyHandled = true; break; + case KeyEvent.DOM_VK_BACK_SPACE: + case KeyEvent.DOM_VK_DELETE: + keyHandled = true; + if ($dropdownItem) { + removeSelectedItem(event); + } + break; } if (keyHandled) { From b17c774fd6b8f9861eaa4369f65202e0f1f0a49b Mon Sep 17 00:00:00 2001 From: Marcel Gerber Date: Thu, 26 Sep 2013 16:29:16 +0200 Subject: [PATCH 0028/1140] Update main.js Thanks for the tip ;) --- src/extensions/default/DebugCommands/main.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/extensions/default/DebugCommands/main.js b/src/extensions/default/DebugCommands/main.js index dc753729414..de2b9cc5acb 100644 --- a/src/extensions/default/DebugCommands/main.js +++ b/src/extensions/default/DebugCommands/main.js @@ -151,7 +151,7 @@ define(function (require, exports, module) { function setLanguage(event) { locale = $select.val(); - $submit.prop("disabled", locale === (curLocale === null ? "" : curLocale)); + $submit.prop("disabled", locale === (curLocale || "")); } // returns the localized label for the given locale From 48202fddf2e3a4c40855856bf4b0dd462e3803df Mon Sep 17 00:00:00 2001 From: Randy Edmunds Date: Fri, 27 Sep 2013 11:27:12 -0700 Subject: [PATCH 0029/1140] add missing timeout messages --- test/spec/LiveDevelopment-test.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/spec/LiveDevelopment-test.js b/test/spec/LiveDevelopment-test.js index 5f0029903cb..216077290bd 100644 --- a/test/spec/LiveDevelopment-test.js +++ b/test/spec/LiveDevelopment-test.js @@ -204,7 +204,7 @@ define(function (require, exports, module) { tryConnect(); }); - waitsFor(function () { return connected || failed; }, 10000); + waitsFor(function () { return connected || failed; }, "LiveDevelopmentModule.launcherUrl", 10000); runs(function () { expect(failed).toBe(false); @@ -216,7 +216,7 @@ define(function (require, exports, module) { waitsForDone(promise, "Inspector.Runtime.evaluate", 5000); }); - waitsFor(function () { return !InspectorModule.connected(); }, 10000); + waitsFor(function () { return !InspectorModule.connected(); }, "!InspectorModule.connected()", 10000); }); }); @@ -378,7 +378,7 @@ define(function (require, exports, module) { }); }); - waitsFor(function () { return (fileContent !== null); }, 1000); + waitsFor(function () { return (fileContent !== null); }, "Load fileContent", 1000); } } From 98f06b626dc12b3e55ab7d40c8285dbef8413349 Mon Sep 17 00:00:00 2001 From: Josh Parolin Date: Fri, 27 Sep 2013 22:35:49 -0700 Subject: [PATCH 0030/1140] Add Dust.js language support --- src/language/languages.json | 7 +++++++ tools/setup_for_hacking.sh | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/language/languages.json b/src/language/languages.json index 4964f40021d..99c358510c0 100644 --- a/src/language/languages.json +++ b/src/language/languages.json @@ -46,6 +46,13 @@ "fileExtensions": ["ejs"], "blockComment": [""] }, + + "dust": { + "name": "Dust.js", + "mode": ["htmlembedded", "application/x-ejs"], + "fileExtensions": ["dust"], + "blockComment": [""] + }, "erb_html": { "name": "Embedded Ruby", diff --git a/tools/setup_for_hacking.sh b/tools/setup_for_hacking.sh index fcf85693184..050658f3688 100755 --- a/tools/setup_for_hacking.sh +++ b/tools/setup_for_hacking.sh @@ -8,7 +8,7 @@ if [[ "$platform" == 'Linux' ]]; then default_app_directory='/opt/brackets'; symlink='dev'; elif [[ "$platform" == 'Darwin' ]]; then # MAC OSX - default_app_directory='/Applications/Brackets Sprint 14.app'; + default_app_directory='/Applications/Brackets Sprint 31.app'; symlink='Contents/dev'; else # Warn for unknown operating system? From ef62848df923ef0d82bac421af5bcc592430de3e Mon Sep 17 00:00:00 2001 From: Work Date: Sat, 28 Sep 2013 14:42:01 +0200 Subject: [PATCH 0031/1140] Added Dutch strings --- src/nls/nl/strings.js | 480 ++++++++++++++++++++++++++++++++++++++++ src/nls/root/strings.js | 1 + src/nls/strings.js | 1 + 3 files changed, 482 insertions(+) create mode 100644 src/nls/nl/strings.js diff --git a/src/nls/nl/strings.js b/src/nls/nl/strings.js new file mode 100644 index 00000000000..078a8a485cd --- /dev/null +++ b/src/nls/nl/strings.js @@ -0,0 +1,480 @@ +/* + * 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 */ + +define({ + + /** + * Errors + */ + + // General file io error strings + "GENERIC_ERROR" : "(error {0})", + "NOT_FOUND_ERR" : "Het bestand kon niet worden gevonden.", + "NOT_READABLE_ERR" : "Het bestand kon niet worden ingelezen.", + "NO_MODIFICATION_ALLOWED_ERR" : "De doelmap kan niet gewijzigd worden.", + "NO_MODIFICATION_ALLOWED_ERR_FILE" : "De bevoegdheden laten u niet toe enige wijzigingen aan te brengen.", + "FILE_EXISTS_ERR" : "Het bestand of de map bestaat al.", + "FILE" : "bestand", + "DIRECTORY" : "map", + + // Project error strings + "ERROR_LOADING_PROJECT" : "Probleem tijdens het laden van het project", + "OPEN_DIALOG_ERROR" : "Er is een fout opgetreden bij het tonen van het dialoogvenster om een bestand te openen. (error {0})", + "REQUEST_NATIVE_FILE_SYSTEM_ERROR" : "Er is een fout opgetreden bij het laden van map {0}. (error {1})", + "READ_DIRECTORY_ENTRIES_ERROR" : "Er is een fout opgetreden bij het lezen van de inhoud van map {0}. (error {1})", + + // File open/save error string + "ERROR_OPENING_FILE_TITLE" : "Probleem bij het openen van een bestand", + "ERROR_OPENING_FILE" : "Er is een fout opgetreden bij het openen van het bestand {0}. {1}", + "ERROR_OPENING_FILES" : "Er is een fout opgetreden bij het openen van de volgende bestanden:", + "ERROR_RELOADING_FILE_TITLE" : "Probleem bij het herladen van wijzigingen op de schijf", + "ERROR_RELOADING_FILE" : "Er is een fout opgetreden bij het herladen van het bestand {0}. {1}", + "ERROR_SAVING_FILE_TITLE" : "Probleem bij het opslaan van een bestand", + "ERROR_SAVING_FILE" : "Er is een fout opgetreden bij het opslaan van het bestand {0}. {1}", + "ERROR_RENAMING_FILE_TITLE" : "Probleem bij het hernoemen van een bestand", + "ERROR_RENAMING_FILE" : "Er is een fout opgetreden bij het hernoemen van het bestand {0}. {1}", + "ERROR_DELETING_FILE_TITLE" : "Probleem bij het verwijderen van een bestand", + "ERROR_DELETING_FILE" : "Er is een fout opgetreden bij het verwijderen van het bestand {0}. {1}", + "INVALID_FILENAME_TITLE" : "Ongeldige {0} naam", + "INVALID_FILENAME_MESSAGE" : "Bestandsnamen kunnen de volgende karakters niet bevatten: /?*:;{}<>\\| of gebruik maken van woorden die door het systeem zijn gereserveerd.", + "FILE_ALREADY_EXISTS" : "Het {0} {1} bestaat al.", + "ERROR_CREATING_FILE_TITLE" : "Probleem bij het aanmaken van een {0}", + "ERROR_CREATING_FILE" : "Er is een fout opgetreden bij het aanmaken van het {0} {1}. {2}", + + // Application error strings + "ERROR_IN_BROWSER_TITLE" : "Oeps! {APP_NAME} werkt nog niet in browsers.", + "ERROR_IN_BROWSER" : "{APP_NAME} is gebouwd in HTML, maar op dit moment werkt het als desktop applicatie zodat je het kan gebruiken om lokale bestanden te bewerken. Gebruik graag de applicatie omgeving op github.com/adobe/brackets-shell om {APP_NAME} te starten.", + + // FileIndexManager error string + "ERROR_MAX_FILES_TITLE" : "Probleem bij het indexeren van bestanden", + "ERROR_MAX_FILES" : "Het maximum aantal bestanden is geïndexeerd. Het kan zijn dat acties om bestanden op te zoeken in de index niet correct verlopen.", + + // Live Development error strings + "ERROR_LAUNCHING_BROWSER_TITLE" : "Probleem bij het starten in de browser", + "ERROR_CANT_FIND_CHROME" : "De Google Chrome browser kon niet gevonden worden. Zorg ervoor dat deze geïnstalleerd is.", + "ERROR_LAUNCHING_BROWSER" : "Er is een fout opgetreden bij het starten van de browser. (error {0})", + + "LIVE_DEVELOPMENT_ERROR_TITLE" : "Probleem met Live Voorbeeld", + "LIVE_DEVELOPMENT_RELAUNCH_TITLE" : "Bezig met verbinden met de browser", + "LIVE_DEVELOPMENT_ERROR_MESSAGE" : "Om met Live Voorbeeld te verbinden, moet Chrome opnieuw gestart worden met debugging op afstand ingeschakeld.

    Wil je Chrome herstarten en debugging op afstand inschakelen?", + "LIVE_DEV_LOADING_ERROR_MESSAGE" : "Onmogelijk om de Live Ontwikkeling pagina te laden", + "LIVE_DEV_NEED_HTML_MESSAGE" : "Open een HTML bestand om Live Voorbeeld te starten.", + "LIVE_DEV_NEED_BASEURL_MESSAGE" : "Om live voorbeeld te starten met een server-side bestand, moet je een Start URL voor dit project definiëren.", + "LIVE_DEV_SERVER_NOT_READY_MESSAGE" : "Er is een fout opgetreden bij het opstarten van de HTTP server voor live ontwikkeling bestanden. Probeer alsjeblieft opnieuw.", + "LIVE_DEVELOPMENT_INFO_TITLE" : "Welkom bij Live Voorbeeld!", + "LIVE_DEVELOPMENT_INFO_MESSAGE" : "Live Voorbeeld verbindt {APP_NAME} met je browser. Het toont een voorbeeld van je HTML bestand in de browser, vervolgens updatet het voorbeeld onmiddelijk bij het wijzigen van je code.

    In deze vroege versie van {APP_NAME}, werkt Live Voorbeeld enkel met Google Chrome en updatet live bij het wijzigen van CSS of HTML bestanden. Wijzigingen aan JavaScript bestanden worden automatisch herladen wanneer je bewaart.

    (Je zal dit bericht slechts eenmaal zien.)", + "LIVE_DEVELOPMENT_TROUBLESHOOTING" : "Voor meer informatie zie, see Oplossen van Live Ontwikkeling verbindingsproblemen.", + + "LIVE_DEV_STATUS_TIP_NOT_CONNECTED" : "Live Voorbeeld", + "LIVE_DEV_STATUS_TIP_PROGRESS1" : "Live Voorbeeld: Bezig met verbinden\u2026", + "LIVE_DEV_STATUS_TIP_PROGRESS2" : "Live Voorbeeld: Initialiseren\u2026", + "LIVE_DEV_STATUS_TIP_CONNECTED" : "Verbreek verbinding met Live Voorbeeld", + "LIVE_DEV_STATUS_TIP_OUT_OF_SYNC" : "Live Voorbeeld (slaag bestand op om te verversen)", + "LIVE_DEV_STATUS_TIP_SYNC_ERROR" : "Live Voorbeeld (niet bezig met opdaten door een verkeerde syntax)", + + "LIVE_DEV_DETACHED_REPLACED_WITH_DEVTOOLS" : "Live Voorbeeld is geannuleerd omdat de developer tools in de browser zijn geopend", + "LIVE_DEV_DETACHED_TARGET_CLOSED" : "Live Voorbeeld is geannuleerd omdat de pagina gesloten werd in de browser", + "LIVE_DEV_NAVIGATED_AWAY" : "Live Voorbeeld is geannuleerd omdat de browser navigeerde naar een pagina die geen deel uit maakt van het huidige project", + "LIVE_DEV_CLOSED_UNKNOWN_REASON" : "Live Voorbeeld is geannuleerd om een onbekende reden ({0})", + + "SAVE_CLOSE_TITLE" : "Opslaan van wijzigingen", + "SAVE_CLOSE_MESSAGE" : "Wil je de wijzigingen opslaan die je maakte in het document {0}?", + "SAVE_CLOSE_MULTI_MESSAGE" : "Wil je je wijzigingen van de volgende bestanden opslaan?", + "EXT_MODIFIED_TITLE" : "Externe Wijzigingen", + "CONFIRM_FOLDER_DELETE_TITLE" : "Bevestig Verwijdering", + "CONFIRM_FOLDER_DELETE" : "Ben je zeker dat je de map {0} wil verwijderen?", + "FILE_DELETED_TITLE" : "Bestand Verwijderd", + "EXT_MODIFIED_MESSAGE" : "{0} is gewijzigd op de schijf, maar heeft ook onbewaarde wijzigingen in {APP_NAME}.

    Welke versie wil je behouden?", + "EXT_DELETED_MESSAGE" : "{0} is verwijderd op de schijf, maar heeft onbewaarde wijzigingen in {APP_NAME}.

    Wil je je wijzigingen behouden?", + + // Find, Replace, Find in Files + "SEARCH_REGEXP_INFO" : "Gebruik de /re/ syntax voor een regexp zoekopdracht", + "FIND_RESULT_COUNT" : "{0} resultaten", + "FIND_RESULT_COUNT_SINGLE" : "1 resultaat", + "FIND_NO_RESULTS" : "Geen resultaten", + "WITH" : "Met", + "BUTTON_YES" : "Ja", + "BUTTON_NO" : "Nee", + "BUTTON_REPLACE_ALL" : "Alle\u2026", + "BUTTON_STOP" : "Stop", + "BUTTON_REPLACE" : "Vervang", + + "BUTTON_NEXT" : "\u25B6", + "BUTTON_PREV" : "\u25C0", + "BUTTON_NEXT_HINT" : "Volgende Overeenkomst", + "BUTTON_PREV_HINT" : "Vorige Overeenkomst", + + "OPEN_FILE" : "Open Bestand", + "SAVE_FILE_AS" : "Bewaar Bestand", + "CHOOSE_FOLDER" : "Kies een map", + + "RELEASE_NOTES" : "Release Notes", + "NO_UPDATE_TITLE" : "Je bent up to date!", + "NO_UPDATE_MESSAGE" : "Je werkt met de laatste versie van {APP_NAME}.", + + "FIND_REPLACE_TITLE_PART1" : "Vervang \"", + "FIND_REPLACE_TITLE_PART2" : "\" met \"", + "FIND_REPLACE_TITLE_PART3" : "\" — {2} {0} {1}", + + "FIND_IN_FILES_TITLE_PART1" : "\"", + "FIND_IN_FILES_TITLE_PART2" : "\" gevonden", + "FIND_IN_FILES_TITLE_PART3" : "— {0} {1} {2} in {3} {4}", + "FIND_IN_FILES_SCOPED" : "in {0}", + "FIND_IN_FILES_NO_SCOPE" : "in project", + "FIND_IN_FILES_FILE" : "bestand", + "FIND_IN_FILES_FILES" : "bestanden", + "FIND_IN_FILES_MATCH" : "overeenkomst", + "FIND_IN_FILES_MATCHES" : "overeenkomsten", + "FIND_IN_FILES_MORE_THAN" : "Meer dan ", + "FIND_IN_FILES_PAGING" : "{0}—{1}", + "FIND_IN_FILES_FILE_PATH" : "{0} {2} {1}", // We shoudl use normal dashes on Windows instead of em dash eventually + "ERROR_FETCHING_UPDATE_INFO_TITLE" : "Probleem bij het ophalen van update informatie", + "ERROR_FETCHING_UPDATE_INFO_MSG" : "Er is een fout opgetreden bij het ophalen van de laatste updat informatie van de server. Zorg ervoor dat je verbonden bent met het internet en probeer opnieuw.", + + /** + * ProjectManager + */ + "PROJECT_LOADING" : "Laden\u2026", + "UNTITLED" : "Naamloos", + "WORKING_FILES" : "Werkbestanden", + + /** + * Keyboard modifier names + */ + "KEYBOARD_CTRL" : "Ctrl", + "KEYBOARD_SHIFT" : "Shift", + "KEYBOARD_SPACE" : "Space", + + /** + * StatusBar strings + */ + "STATUSBAR_CURSOR_POSITION" : "Regel {0}, Kolom {1}", + "STATUSBAR_SELECTION_CH_SINGULAR" : " \u2014 {0} kolom geselecteerd", + "STATUSBAR_SELECTION_CH_PLURAL" : " \u2014 {0} kolommen geselecteerd", + "STATUSBAR_SELECTION_LINE_SINGULAR" : " \u2014 {0} regel geselecteerd", + "STATUSBAR_SELECTION_LINE_PLURAL" : " \u2014 {0} regels geselecteerd", + "STATUSBAR_INDENT_TOOLTIP_SPACES" : "Klik om de indentatie te veranderen naar spaties", + "STATUSBAR_INDENT_TOOLTIP_TABS" : "Klik om de indentatie te veranderen naar tabs", + "STATUSBAR_INDENT_SIZE_TOOLTIP_SPACES" : "Klik om het aantal spaties bij indentatie te veranderen", + "STATUSBAR_INDENT_SIZE_TOOLTIP_TABS" : "Klik om de breedte van het tab karakter te veranderen", + "STATUSBAR_SPACES" : "Spaties:", + "STATUSBAR_TAB_SIZE" : "Tab Grootte:", + "STATUSBAR_LINE_COUNT_SINGULAR" : "\u2014 {0} Regel", + "STATUSBAR_LINE_COUNT_PLURAL" : "\u2014 {0} Regels", + + // CodeInspection: errors/warnings + "ERRORS_PANEL_TITLE" : "{0} Fouten", + "SINGLE_ERROR" : "1 {0} Fout", + "MULTIPLE_ERRORS" : "{1} {0} Fouten", + "NO_ERRORS" : "Geen {0} fouten - goed zo!", + "LINT_DISABLED" : "Linting is uitgeschakeld", + "NO_LINT_AVAILABLE" : "Er is geen linter beschikbaar voor {0}", + "NOTHING_TO_LINT" : "Niets om te linten", + + + /** + * Command Name Constants + */ + + // File menu commands + "FILE_MENU" : "Bestand", + "CMD_FILE_NEW_UNTITLED" : "Nieuw", + "CMD_FILE_NEW" : "Nieuw Bestand", + "CMD_FILE_NEW_FOLDER" : "Nieuwe Map", + "CMD_FILE_OPEN" : "Open\u2026", + "CMD_ADD_TO_WORKING_SET" : "Voeg Toe Aan Werkset", + "CMD_OPEN_FOLDER" : "Open Map\u2026", + "CMD_FILE_CLOSE" : "Sluit", + "CMD_FILE_CLOSE_ALL" : "Sluit alles", + "CMD_FILE_SAVE" : "Bewaar", + "CMD_FILE_SAVE_ALL" : "Bewaar Alles", + "CMD_FILE_SAVE_AS" : "Bewaar Als\u2026", + "CMD_LIVE_FILE_PREVIEW" : "Live Voorbeeld", + "CMD_PROJECT_SETTINGS" : "Project Instellingen\u2026", + "CMD_FILE_RENAME" : "Hernoem", + "CMD_FILE_DELETE" : "Verwijder", + "CMD_INSTALL_EXTENSION" : "Installeer Uitbreiding\u2026", + "CMD_EXTENSION_MANAGER" : "Uitbreidingbeheer\u2026", + "CMD_FILE_REFRESH" : "Ververs Bestandsboom", + "CMD_QUIT" : "Stop", + // Used in native File menu on Windows + "CMD_EXIT" : "Exit", + + // Edit menu commands + "EDIT_MENU" : "Wijzig", + "CMD_UNDO" : "Herstel", + "CMD_REDO" : "Opnieuw", + "CMD_CUT" : "Knip", + "CMD_COPY" : "Kopieer", + "CMD_PASTE" : "Plak", + "CMD_SELECT_ALL" : "Selecteer Alles", + "CMD_SELECT_LINE" : "Selecteer Regel", + "CMD_FIND" : "Zoek", + "CMD_FIND_IN_FILES" : "Zoek in Mappen", + "CMD_FIND_IN_SUBTREE" : "Zoek in\u2026", + "CMD_FIND_NEXT" : "Zoek Volgende", + "CMD_FIND_PREVIOUS" : "Zoek Vorige", + "CMD_REPLACE" : "Vervang", + "CMD_INDENT" : "Inspringen", + "CMD_UNINDENT" : "Insprong Verwijderen", + "CMD_DUPLICATE" : "Dupliceer", + "CMD_DELETE_LINES" : "Verwijder Regel", + "CMD_COMMENT" : "Zet Regel Commentaar Aan/Uit", + "CMD_BLOCK_COMMENT" : "Zet Blok Commentaar Aan/Uit", + "CMD_LINE_UP" : "Verplaats Regel naar Boven", + "CMD_LINE_DOWN" : "Verplaats Regel naar Beneden", + "CMD_OPEN_LINE_ABOVE" : "Open Regel Boven", + "CMD_OPEN_LINE_BELOW" : "Open Regel Beneden", + "CMD_TOGGLE_CLOSE_BRACKETS" : "Automatisch Accolades Sluiten", + "CMD_SHOW_CODE_HINTS" : "Toon Code Hints", + + // View menu commands + "VIEW_MENU" : "Weergave", + "CMD_HIDE_SIDEBAR" : "Verberg Zijbalk", + "CMD_SHOW_SIDEBAR" : "Toon Zijbalk", + "CMD_INCREASE_FONT_SIZE" : "Vergroot Lettertype", + "CMD_DECREASE_FONT_SIZE" : "Verklein Lettertype", + "CMD_RESTORE_FONT_SIZE" : "Herstel Lettertype", + "CMD_SCROLL_LINE_UP" : "Scroll Regel naar Boven", + "CMD_SCROLL_LINE_DOWN" : "Scroll Regel naar Beneden", + "CMD_TOGGLE_LINE_NUMBERS" : "Regelnummers", + "CMD_TOGGLE_ACTIVE_LINE" : "Markeer Actieve Regel", + "CMD_TOGGLE_WORD_WRAP" : "Word Wrap", + "CMD_LIVE_HIGHLIGHT" : "Live Voorbeeld Markeren", + "CMD_VIEW_TOGGLE_INSPECTION" : "Lint Bestanden bij Opslaan", + "CMD_SORT_WORKINGSET_BY_ADDED" : "Sorteer op Toegevoegd", + "CMD_SORT_WORKINGSET_BY_NAME" : "Sorteer op Naam", + "CMD_SORT_WORKINGSET_BY_TYPE" : "Sorteer op Type", + "CMD_SORT_WORKINGSET_AUTO" : "Automatisch Sorteren", + + // Navigate menu Commands + "NAVIGATE_MENU" : "Navigeer", + "CMD_QUICK_OPEN" : "Open Snel", + "CMD_GOTO_LINE" : "Ga naar Regel", + "CMD_GOTO_DEFINITION" : "Definitie Snel Zoeken", + "CMD_GOTO_FIRST_PROBLEM" : "Ga naar de eerstvolgende Fout/Waarschuwing", + "CMD_TOGGLE_QUICK_EDIT" : "Wijzig snel", + "CMD_TOGGLE_QUICK_DOCS" : "Snel naar Documentatie", + "CMD_QUICK_EDIT_PREV_MATCH" : "Vorige Overeenkomst", + "CMD_QUICK_EDIT_NEXT_MATCH" : "Volgende Overeenkomst", + "CMD_NEXT_DOC" : "Volgend Document", + "CMD_PREV_DOC" : "Vorig Document", + "CMD_SHOW_IN_TREE" : "Toon in Bestandsboom", + "CMD_SHOW_IN_OS" : "Toon in Besturingssysteem", + + // Help menu commands + "HELP_MENU" : "Help", + "CMD_CHECK_FOR_UPDATE" : "Controleer op Updates", + "CMD_HOW_TO_USE_BRACKETS" : "Hoe gebruik je {APP_NAME}", + "CMD_FORUM" : "{APP_NAME} Forum", + "CMD_RELEASE_NOTES" : "Release Notes", + "CMD_REPORT_AN_ISSUE" : "Rapporteer een probleem", + "CMD_SHOW_EXTENSIONS_FOLDER" : "Toon de Map met Uitbreidingen", + "CMD_TWITTER" : "{TWITTER_NAME} op Twitter", + "CMD_ABOUT" : "Over {APP_TITLE}", + + // Strings for main-view.html + "EXPERIMENTAL_BUILD" : "experimentele build", + "DEVELOPMENT_BUILD" : "development build", + "OK" : "OK", + "DONT_SAVE" : "Niet opslaan", + "SAVE" : "Opslaan", + "CANCEL" : "Annuleer", + "DELETE" : "Verwijder", + "RELOAD_FROM_DISK" : "Laad opnieuw van Schijf", + "KEEP_CHANGES_IN_EDITOR" : "Behoud veranderingen in Editor", + "CLOSE_DONT_SAVE" : "Sluit (Bewaar Niet)", + "RELAUNCH_CHROME" : "Herstart Chrome", + "ABOUT" : "Over", + "CLOSE" : "Sluit", + "ABOUT_TEXT_LINE1" : "sprint {VERSION_MINOR} {BUILD_TYPE} {VERSION}", + "ABOUT_TEXT_LINE3" : "Kennisgevingen, voorwaarden en bepalingen met betrekking tot software van derden bevinden zich op {ADOBE_THIRD_PARTY} en op de pagina's, hierin door verwijzing opgenomen.", + "ABOUT_TEXT_LINE4" : "Documentatie en broncode op https://github.com/adobe/brackets/", + "ABOUT_TEXT_LINE5" : "Gemaakt met \u2764 en JavaScript door:", + "ABOUT_TEXT_LINE6" : "Veel mensen (maar we hebben problemen met het laden van die data op dit moment).", + "ABOUT_TEXT_WEB_PLATFORM_DOCS" : "Web Platform Docs en het Web Platform grafisch logo zijn gelicentieerd onder een Creative Commons Attribution licentie, CC-BY 3.0 Unported.", + "UPDATE_NOTIFICATION_TOOLTIP" : "Er is een nieuwe build van {APP_NAME} beschikbaar! Klik hier voor details.", + "UPDATE_AVAILABLE_TITLE" : "Update Beschikbaar", + "UPDATE_MESSAGE" : "Hey, er is een nieuwe build van {APP_NAME} beschikbaar. Hier zijn een aantal van de nieuwe functies:", + "GET_IT_NOW" : "Haal het nu!", + "PROJECT_SETTINGS_TITLE" : "Project Instellingen voor: {0}", + "PROJECT_SETTING_BASE_URL" : "Live Voorbeeld Start URL", + "PROJECT_SETTING_BASE_URL_HINT" : "Om een locale server te gebruiken, voor een url in zoals http://localhost:8000/", + "BASEURL_ERROR_INVALID_PROTOCOL" : "Het {0} protocol wordt niet ondersteund door Live Voorbeeld—gebruik http: of https: .", + "BASEURL_ERROR_SEARCH_DISALLOWED" : "De start URL kan geen zoekparameters bevatten zoals \"{0}\".", + "BASEURL_ERROR_HASH_DISALLOWED" : "De start URL kan geen hashes bevatten zoals \"{0}\".", + "BASEURL_ERROR_INVALID_CHAR" : "Speciale karakters zoals '{0}' moeten %-geëncodeerd zijn.", + "BASEURL_ERROR_UNKNOWN_ERROR" : "Onbekende fout bij het parsen van de Start URL", + + // Extension Management strings + "INSTALL" : "Installeer", + "UPDATE" : "Update", + "REMOVE" : "Verwijder", + "OVERWRITE" : "Overschrijf", + "CANT_REMOVE_DEV" : "Uitbreidings in de \"dev\" map moeten manueel verwijderd worden.", + "CANT_UPDATE" : "De update is niet compatibel met deze versie van {APP_NAME}.", + "INSTALL_EXTENSION_TITLE" : "Installeer Uitbreiding", + "UPDATE_EXTENSION_TITLE" : "Update Uitbreiding", + "INSTALL_EXTENSION_LABEL" : "Uitbreiding URL", + "INSTALL_EXTENSION_HINT" : "URL van het zip bestand of de GitHup repo van de uitbreiding", + "INSTALLING_FROM" : "Bezig met installeren van uitbreiding van {0}\u2026", + "INSTALL_SUCCEEDED" : "Installatie succesvol!", + "INSTALL_FAILED" : "Installatie gefaald.", + "CANCELING_INSTALL" : "Bezig met annuleren\u2026", + "CANCELING_HUNG" : "Het annularen van de installatie duurt lang. Een intern probleem kan zijn opgetreden.", + "INSTALL_CANCELED" : "Installatie geannuleerd.", + // These must match the error codes in ExtensionsDomain.Errors.* : + "INVALID_ZIP_FILE" : "De gedownloade inhoud is geen geldig zip bestand.", + "INVALID_PACKAGE_JSON" : "Het package.json bestand is niet geldig (fout was: {0}).", + "MISSING_PACKAGE_NAME" : "Het package.json specifieert geen pakket naam.", + "BAD_PACKAGE_NAME" : "{0} is een ongeldige pakket naam.", + "MISSING_PACKAGE_VERSION" : "Het package.json bestand specifieert geen geldige pakket versie.", + "INVALID_VERSION_NUMBER" : "Het pakket versienummer ({0}) is ongeldig.", + "INVALID_BRACKETS_VERSION" : "De {APP_NAME} compatibiliteit string ({0}) is ongeldig.", + "DISALLOWED_WORDS" : "De woorden ({1}) zijn niet toegelaten in het {0} veld.", + "API_NOT_COMPATIBLE" : "De uitbreiding is niet compatibel met deze versie van {APP_NAME}. Het werd geinstalleerd in de map met uitgeschakelde uitbreidingen.", + "MISSING_MAIN" : "Het pakket heeft geen main.js bestand.", + "EXTENSION_ALREADY_INSTALLED" : "Het installeren van dit pakket zal een vroeger geinstalleerde uitbreiding overschrijven. Overschrijf de oudere uitbreiding?", + "EXTENSION_SAME_VERSION" : "Dit pakket is dezelfde versie als degene die op dit moment is geinstalleerd. Overschrijf de bestaande installatie?", + "EXTENSION_OLDER_VERSION" : "Dit pakket is versie {0} dewelke ouder is dan de op dit moment geinstalleerde ({1}). Overschrijf de bestaande installatie?", + "DOWNLOAD_ID_IN_USE" : "Interne fout: download ID is reeds in gebruik.", + "NO_SERVER_RESPONSE" : "Kan niet verbinden met de server.", + "BAD_HTTP_STATUS" : "Bestand niet gevonden op server (HTTP {0}).", + "CANNOT_WRITE_TEMP" : "Onmogelijk om download op te slaan naar tijdelijk bestand.", + "ERROR_LOADING" : "De uitbreiding ondervond een probleem bij het opstarten.", + "MALFORMED_URL" : "De URL is ongeldig. Controleer of ze correct werd ingevoerd.", + "UNSUPPORTED_PROTOCOL" : "De URL moet een http of https URL zijn.", + "UNKNOWN_ERROR" : "Onbekende interne fout.", + // For NOT_FOUND_ERR, see generic strings above + "EXTENSION_MANAGER_TITLE" : "Uitbreidingbeheer", + "EXTENSION_MANAGER_ERROR_LOAD" : "Onmogelijk om toegang te verkrijgen tot het uitbreidingen register. Probeer later opnieuw.", + "INSTALL_FROM_URL" : "Installeer van URL\u2026", + "EXTENSION_AUTHOR" : "Auteur", + "EXTENSION_DATE" : "Datum", + "EXTENSION_INCOMPATIBLE_NEWER" : "Deze uitbreiding vereist een nieuwere versie van {APP_NAME}.", + "EXTENSION_INCOMPATIBLE_OLDER" : "Deze uitbreiding werkt momenteel enkel met oudere versies van {APP_NAME}.", + "EXTENSION_NO_DESCRIPTION" : "Geen beschrijving", + "EXTENSION_MORE_INFO" : "Meer info...", + "EXTENSION_ERROR" : "Uitbreiding fout", + "EXTENSION_KEYWORDS" : "Sleutelwoorden", + "EXTENSION_INSTALLED" : "Geinstalleerd", + "EXTENSION_UPDATE_INSTALLED" : "Deze uitbreiding is gedownload en zal geinstalleerd worden wanneer je {APP_NAME} stopt.", + "EXTENSION_SEARCH_PLACEHOLDER" : "Zoek", + "EXTENSION_MORE_INFO_LINK" : "Meer", + "BROWSE_EXTENSIONS" : "Blader door Uitbreidingen", + "EXTENSION_MANAGER_REMOVE" : "Verwijder Uitbreiding", + "EXTENSION_MANAGER_REMOVE_ERROR" : "Onmogelijk om een of meerdere uitbreidingen te verwijderen: {0}. {APP_NAME} zal nog steeds stoppen.", + "EXTENSION_MANAGER_UPDATE" : "Update Uitbreiding", + "EXTENSION_MANAGER_UPDATE_ERROR" : "Onmogelijk om een of meerdere uitbreidingen te updaten: {0}. {APP_NAME} zal nog steeds stoppen.", + "MARKED_FOR_REMOVAL" : "Aangeduid voor verwijdering", + "UNDO_REMOVE" : "Herstel", + "MARKED_FOR_UPDATE" : "Aangeduid voor update", + "UNDO_UPDATE" : "Herstel", + "CHANGE_AND_QUIT_TITLE" : "Wijzig Uitbreidingen", + "CHANGE_AND_QUIT_MESSAGE" : "Om de aangeduidde uitbreiding te updaten of te verwijderen, moet je {APP_NAME} stoppen en herstarten. Je zal gevraagd worden alle onbewaarde wijzigingen op te slaan.", + "REMOVE_AND_QUIT" : "Verwijder Uitbreidingen en stop", + "CHANGE_AND_QUIT" : "Wijzig Uitbreidingen en Stop", + "UPDATE_AND_QUIT" : "Update Uitbreidingen en Stop", + "EXTENSION_NOT_INSTALLED" : "Kon de uitbreiding {0} niet verwijderen omdat ze niet was geinstalleerd", + "NO_EXTENSIONS" : "Nog geen uitbreidingen geinstalleerd.
    Klik op de Beschikbaar tab hierboven om te starten.", + "NO_EXTENSION_MATCHES" : "Geen uitbreidingen komen overeen met je zoekopdracht.", + "REGISTRY_SANITY_CHECK_WARNING" : "Wees voorzichtig bij het installeren van uitbreidingen van een onbekende bron.", + "EXTENSIONS_INSTALLED_TITLE" : "Geinstalleerd", + "EXTENSIONS_AVAILABLE_TITLE" : "Beschikbaar", + "EXTENSIONS_UPDATES_TITLE" : "Updates", + + /** + * Unit names + */ + + "UNIT_PIXELS" : "pixels", + + + // extensions/default/DebugCommands + "DEBUG_MENU" : "Debug", + "CMD_SHOW_DEV_TOOLS" : "Toon Developer Tools", + "CMD_REFRESH_WINDOW" : "Herlaad {APP_NAME}", + "CMD_NEW_BRACKETS_WINDOW" : "Nieuw {APP_NAME} Venster", + "CMD_SWITCH_LANGUAGE" : "Wijzig Taal", + "CMD_RUN_UNIT_TESTS" : "Start Testen", + "CMD_SHOW_PERF_DATA" : "Toon Performantie Data", + "CMD_ENABLE_NODE_DEBUGGER" : "Schakel Node Debugger in", + "CMD_LOG_NODE_STATE" : "Log Node Status naar Console", + "CMD_RESTART_NODE" : "Herstart Node", + + "LANGUAGE_TITLE" : "Wijzig Taal", + "LANGUAGE_MESSAGE" : "Taal:", + "LANGUAGE_SUBMIT" : "Herlaad {APP_NAME}", + "LANGUAGE_CANCEL" : "Annuleer", + "LANGUAGE_SYSTEM_DEFAULT" : "Systeem Standaard", + + // Locales (used by Debug > Switch Language) + "LOCALE_CS" : "Tsjechisch", + "LOCALE_DE" : "Duits", + "LOCALE_EN" : "Engels", + "LOCALE_ES" : "Spaans", + "LOCALE_FI" : "Fins", + "LOCALE_FR" : "Frans", + "LOCALE_IT" : "Italiaan", + "LOCALE_JA" : "Japans", + "LOCALE_NB" : "Norwegian", + "LOCALE_NL" : "Nederlands", + "LOCALE_PL" : "Pools", + "LOCALE_PT_BR" : "Portugees, Brazilië", + "LOCALE_PT_PT" : "Portugees", + "LOCALE_RU" : "Russisch", + "LOCALE_SK" : "Slovaaks", + "LOCALE_SV" : "Zweeds", + "LOCALE_TR" : "Turks", + "LOCALE_ZH_CN" : "Chinees, simpel", + "LOCALE_HU" : "Hongaars", + + // extensions/default/InlineColorEditor + "COLOR_EDITOR_CURRENT_COLOR_SWATCH_TIP" : "Huidige Kleur", + "COLOR_EDITOR_ORIGINAL_COLOR_SWATCH_TIP" : "Originele Kleur", + "COLOR_EDITOR_RGBA_BUTTON_TIP" : "RGBa Formaat", + "COLOR_EDITOR_HEX_BUTTON_TIP" : "Hex Formaat", + "COLOR_EDITOR_HSLA_BUTTON_TIP" : "HSLa Formaat", + "COLOR_EDITOR_USED_COLOR_TIP_SINGULAR" : "{0} ({1} keer gebruikt)", + "COLOR_EDITOR_USED_COLOR_TIP_PLURAL" : "{0} ({1} keren gebruikt)", + + // extensions/default/JavaScriptCodeHints + "CMD_JUMPTO_DEFINITION" : "Ga naar Definitie", + "CMD_SHOW_PARAMETER_HINT" : "Toon Parameter Hint", + "NO_ARGUMENTS" : "", + + // extensions/default/JSLint + "JSLINT_NAME" : "JSLint", + + // extensions/default/QuickView + "CMD_ENABLE_QUICK_VIEW" : "Snel bekijken bij Muis Over", + + // extensions/default/RecentProjects + "CMD_TOGGLE_RECENT_PROJECTS" : "Recente Projecten", + + // extensions/default/WebPlatformDocs + "DOCS_MORE_LINK" : "Lees meer" +}); diff --git a/src/nls/root/strings.js b/src/nls/root/strings.js index 495dedcd199..384393c6199 100644 --- a/src/nls/root/strings.js +++ b/src/nls/root/strings.js @@ -441,6 +441,7 @@ define({ "LOCALE_IT" : "Italian", "LOCALE_JA" : "Japanese", "LOCALE_NB" : "Norwegian", + "LOCALE_NL" : "Dutch", "LOCALE_PL" : "Polish", "LOCALE_PT_BR" : "Portuguese, Brazil", "LOCALE_PT_PT" : "Portuguese", diff --git a/src/nls/strings.js b/src/nls/strings.js index 79ab69b3012..0f2e6460abb 100644 --- a/src/nls/strings.js +++ b/src/nls/strings.js @@ -46,6 +46,7 @@ define(function (require, exports, module) { "it": true, "ja": true, "nb": true, + "nl": true, "pl": true, "pt-br": true, "pt-pt": true, From 17afe8e054174b814a688dec3f98ea336c5cda68 Mon Sep 17 00:00:00 2001 From: Work Date: Sat, 28 Sep 2013 18:43:49 +0200 Subject: [PATCH 0032/1140] Bug fix dutch translation --- src/nls/nl/strings.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/nls/nl/strings.js b/src/nls/nl/strings.js index 078a8a485cd..701409fbf45 100644 --- a/src/nls/nl/strings.js +++ b/src/nls/nl/strings.js @@ -31,7 +31,7 @@ define({ */ // General file io error strings - "GENERIC_ERROR" : "(error {0})", + "GENERIC_ERROR" : "(fout {0})", "NOT_FOUND_ERR" : "Het bestand kon niet worden gevonden.", "NOT_READABLE_ERR" : "Het bestand kon niet worden ingelezen.", "NO_MODIFICATION_ALLOWED_ERR" : "De doelmap kan niet gewijzigd worden.", @@ -464,7 +464,7 @@ define({ // extensions/default/JavaScriptCodeHints "CMD_JUMPTO_DEFINITION" : "Ga naar Definitie", "CMD_SHOW_PARAMETER_HINT" : "Toon Parameter Hint", - "NO_ARGUMENTS" : "", + "NO_ARGUMENTS" : "", // extensions/default/JSLint "JSLINT_NAME" : "JSLint", From 48187a0ffb7f9a13278a81f07edc8dadec8b7f9d Mon Sep 17 00:00:00 2001 From: Marcel Gerber Date: Sun, 29 Sep 2013 01:24:37 +0200 Subject: [PATCH 0033/1140] German translation --- src/nls/de/strings.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/nls/de/strings.js b/src/nls/de/strings.js index 842943a15f8..dc73009830b 100644 --- a/src/nls/de/strings.js +++ b/src/nls/de/strings.js @@ -444,6 +444,7 @@ define({ "LOCALE_IT" : "Italienisch", "LOCALE_JA" : "Japanisch", "LOCALE_NB" : "Norwegisch", + "LOCALE_NL" : "Niederländisch", "LOCALE_PL" : "Polnisch", "LOCALE_PT_BR" : "Portugiesisch, Brasilien", "LOCALE_PT_PT" : "Portugiesisch", From 293c94d414e33599e55d6c2f3282024b8bd80839 Mon Sep 17 00:00:00 2001 From: Lance Campbell Date: Sat, 28 Sep 2013 17:48:38 -0700 Subject: [PATCH 0034/1140] Add Menu.removeMenuDivider() --- src/command/Menus.js | 51 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) diff --git a/src/command/Menus.js b/src/command/Menus.js index 508b21dca34..718aa520f22 100644 --- a/src/command/Menus.js +++ b/src/command/Menus.js @@ -458,6 +458,57 @@ define(function (require, exports, module) { delete menuItemMap[menuItemID]; }; + /** + * Removes the specified menu divider from this Menu. + * + * @param {!string} menuItemID - the menu item id of the divider to remove. + */ + Menu.prototype.removeMenuDivider = function (menuItemID) { + var menuItem, + $HTMLMenuItem; + + if (!menuItemID) { + console.error("removeMenuDivider(): missing required parameters: menuItemID"); + return; + } + + menuItem = getMenuItem(menuItemID); + + if (!menuItem) { + console.error("removeMenuDivider(): parameter menuItemID: %s is not a valid menu item id", menuItemID); + return; + } + + if (!menuItem.isDivider) { + console.error("removeMenuDivider(): parameter menuItemID: %s is not a menu divider", menuItemID); + return; + } + + if (_isHTMLMenu(this.id)) { + // Targeting parent to get the menu item and the
  • that contains it + $HTMLMenuItem = $(_getHTMLMenuItem(menuItemID)).parent(); + if ($HTMLMenuItem) { + $HTMLMenuItem.remove(); + } else { + console.error("removeMenuDivider(): HTML menu divider not found: %s", menuItemID); + return; + } + } else { + brackets.app.removeMenuItem(menuItemID, function (err) { + if (err) { + console.error("removeMenuDivider() -- divider not found: %s (error: %s)", menuItemID, err); + } + }); + } + + if (!menuItemMap[menuItemID]) { + console.error("removeMenuDivider(): menu divider not found in menuItemMap: %s", menuItemID); + return; + } + + delete menuItemMap[menuItemID]; + }; + /** * Adds a new menu item with the specified id and display text. The insertion position is * specified via the relativeID and position arguments which describe a position From ab444aa6beac6308976ecdf4b735a0f4ace6b9bc Mon Sep 17 00:00:00 2001 From: Theodore Keloglou Date: Sun, 29 Sep 2013 21:39:21 +0300 Subject: [PATCH 0035/1140] Add Greek Localization --- .../index.html" | 174 +++++++ .../main.css" | 42 ++ .../screenshots/quick-edit.png" | Bin 0 -> 315759 bytes src/nls/el/strings.js | 479 ++++++++++++++++++ src/nls/el/urls.js | 32 ++ src/nls/strings.js | 1 + 6 files changed, 728 insertions(+) create mode 100644 "samples/el/\316\236\316\265\316\272\316\257\316\275\317\211\316\275\317\204\316\261\317\202/index.html" create mode 100644 "samples/el/\316\236\316\265\316\272\316\257\316\275\317\211\316\275\317\204\316\261\317\202/main.css" create mode 100644 "samples/el/\316\236\316\265\316\272\316\257\316\275\317\211\316\275\317\204\316\261\317\202/screenshots/quick-edit.png" create mode 100644 src/nls/el/strings.js create mode 100644 src/nls/el/urls.js diff --git "a/samples/el/\316\236\316\265\316\272\316\257\316\275\317\211\316\275\317\204\316\261\317\202/index.html" "b/samples/el/\316\236\316\265\316\272\316\257\316\275\317\211\316\275\317\204\316\261\317\202/index.html" new file mode 100644 index 00000000000..56edf886f6a --- /dev/null +++ "b/samples/el/\316\236\316\265\316\272\316\257\316\275\317\211\316\275\317\204\316\261\317\202/index.html" @@ -0,0 +1,174 @@ + + + + + + + ΞΕΚΙΝΩΝΤΑΣ ΜΕ ΤΟ BRACKETS + + + + + +

    ΞΕΚΙΝΩΝΤΑΣ ΜΕ ΤΟ BRACKETS

    +

    Αυτός είναι ο οδηγός σας!

    + + + +

    + Καλώς ήρθατε σε μια πρώιμη προεπισκόπηση του Brackets, ένας νέος επεξεργαστής κειμένου ανοιχτού-κώδικα για τη νέα γενιά του + διαδικτύου. Είμαστε μεγάλοι οπαδοί των προτύπων και θέλουμε να φτιάξουμε καλύτερα εργαλεία για JavaScript, HTML και CSS + και σχετικές ανοιχτές τεχνολογίες του διαδικτύου. Αυτό είναι το ταπεινό μας ξεκίνημα. +

    + + +

    + Το Brackets είναι ένας διαφορετικής μορφής επεξεργαστής κειμένου. + Μία αξιοσημείωτη διαφορά είναι ότι αυτός ο επεξεργαστής κειμένου είναι γραμμένος σε JavaScript, HTML και CSS. + Αυτό σημαίνει ότι οι περισσότεροι από εσάς που χρησιμοποιούν το Brackets έχουν τις ικανότητες να τροποποιήσουν και να επεκτείνουν τον επεξεργαστή κειμένου. + Στην πραγματικότητα, χρησιμοποιούμε το Brackets κάθε μέρα για να φτιάξουμε το Brackets. Επίσης, έχει και κάποιες μοναδικές λειτουργίες όπως η Γρήγορα Επεξεργασία, + το Live Preview και άλλες που μπορεί να μην βρείτε σε άλλους επεξεργαστές. + Για να μάθετε περισσότερα για το πως να χρησιμοποιήσετε αυτές τις λειτουργίες, συνεχίστε το διάβασμα. +

    + + +

    Δοκιμάζουμε μερικά νέα πράγματα

    + + +

    Γρήγορη Επεξεργασία για CSS και JavaScript

    +

    + Όχι πια εναλλαγή μεταξύ των αρχείων και απόσπαση της προσοχής. Όταν επεξεργάζεστε HTML, χρησιμοποιήστε + την συντόμευση Cmd/Ctrl + E για να ανοίξετε έναν γρήγορο ενσωματωμένο επεξεργαστή που εμφανίζει το σχετικό CSS κώδικα. + Κάντε την αλλαγή στον κώδικα CSS, πατήστε ESC και είστε πίσω στην επεξεργασία HTML, ή απλά αφήστε τους + CSS κανόνες ανοιχτούς και αυτοί θα γίνουν μέρος του επεξεργαστή HTML. Αν πατήσεις ESC έξω από + έναν γρήγορο ενσωματωμένο επεξεργαστή, θα κρυφτούν όλα. +

    + + + Θέλετε να το δείτε στην πράξη; Βάλε τον κέρσορα στο tag από πάνω και πάτησε + Cmd/Ctrl + E. Πρέπει να δεις ένα γρήγορο ενσωματωμένο επεξεργαστή να εμφανίζετε από πάνω. Στα δεξιά θα δεις + μία λίστα με κανόνες CSS που σχετίζετε με αυτό το tag. Απλά κυλήστε τους κανόνες με + Alt + Up/Down για να βρείτε αυτόν που θέλετε να επεξεργαστείτε. + + +
    + A screenshot showing CSS Quick Edit + + +

    + Μπορείς να χρησιμοποιήσεις την ίδια συντόμευση για κώδικα JavaScript για να δεις το σώμα μιας συνάρτησης με + το να τοποθετείς τον κέρσορα στο όνομα της συνάρτησης που καλείτε. Για τώρα οι γρήγοροι ενσωματωμένοι επεξεργαστές δεν μπορούν + να γίνουν ένθετοι, άρα μπορείς να χρησιμοποιήσεις την Γρήγορη Επεξεργασία μόνο όταν ο κέρσορας είναι μέσα σε έναν «πλήρους μεγέθους» επεξεργαστή. +

    + + +

    Προεπισκόπηση αλλαγών HTML και CSS ζωντανά στον browser

    +

    + Ξέρεις αυτό το «χορό save/reload» που κάνουμε τόσα χρόνια; Αυτό που κάνεις αλλαγές στον + επεξεργαστή σου, πατάς αποθήκευση, γυρνάς στον browser και μετά κάνεις ανανέωση για να δεις επιτέλους το αποτέλεσμα; + Με το Brackets, δεν χρειάζεται να κάνεις αυτόν τον χορό. +

    +

    + Το Brackets θα ανοίξει μία ζωντανή σύνδεση στον τοπικό σου browser και θα στείλει τους ανανεωμένους κώδικες HTML και CSS καθώς εσύ + πληκτρολογείς! Μπορεί ήδη να κάνεις κάτι τέτοιο με εργαλεία που βασίζονται στον browser, αλλά με το Brackets + δεν υπάρχει ανάγκη να αντιγράφεις και να επικολλάς τον τελικό κώδικα πίσω στον επεξεργαστή. Ο κώδικας σου τρέχει στον + browser, αλλά ζει στον επεξεργαστή σου! +

    + +

    Ζωντανή επισήμανση στοιχείων HTML και κανόνων CSS

    +

    + Το Brackets κάνει εύκολο το να βλέπεις πως οι αλλαγές στους κώδικες HTML και CSS θα επηρεάσουν την σελίδα. Όταν ο κέρσορας + είναι σε έναν κανόνα CSS, το Brackets θα επισημάνει όλα τα στοιχεία στον browser που επηρεάζονται. Παρόμοια, όταν επεξεργάζεστε + ένα αρχείο HTML, το Brackets θα επισημάνει τα αντιστοιχούμενα στοιχεία HTML στον browser. +

    + + + Αν έχεις εγκατεστημένο τον Google Chrome, μπορείς να το δοκιμάσεις μόνο σου. Κάνε κλικ στο εικονίδιο της αστραπής + στην πάνω δεξιά γωνία του παραθύρου του Brackets ή πατήστε Cmd/Ctrl + Alt + P. Όταν + το Live Preview ενεργοποιηθεί σε ένα έγγραφο HTML, όλα τα συνδεόμενα αρχεία CSS μπορούν να επεξεργασθούν σε πραγματικό χρόνο. + Το εικονίδιο θα αλλάξει από γκρι σε χρυσό όταν το Brackets δημιουργήσει την σύνδεση με τον browser. + + Τώρα, τοποθέτησε τον κέρσορα του στο από πάνω tag. Παρατηρήστε την μπλε επισήμανση που εμφανίζετε + γύρω από την εικόνα στον Chrome. Έπειτα, χρησιμοποιήστε το Cmd/Ctrl + E για να ανοίξετε τους ορισμένους κανόνες CSS. + Δοκιμάστε να αλλάξετε το μέγεθος του πλαισίου από 1px σε 10px ή αλλάξτε το χρώμα του φόντου + από "dimgray" σε "hotpink". Αν έχετε το Brackets και τον browser σας να είναι δίπλα δίπλα, θα δείτε + τις αλλαγές να συμβαίνουν στιγμιαία στον. Αμάτο, έτσι; + + +

    + Σήμερα, το Brackets υποστηρίζει το Live Preview μόνο για HTML και CSS. Όμως, στην τρέχουσα έκδοση, οι αλλαγές + σε αρχεία JavaScript ανανεώνονται αυτόματα όταν κάνετε αποθήκευση. Προς το παρόν δουλεύουμε τη υποστήριξη του Live Preview + για JavaScript. Επίσης, οι άμεσες προεπισκοπήσεις του Live Preview είναι δυνατές μόνο με τον Google Chrome, αλλά ελπίζουμε + να φέρουμε αυτήν την λειτουργία σε όλους τους μεγάλους browser στο μέλλον. +

    + +

    Γρήγορη Προβολή

    +

    + Για όσους από εμάς δεν απομνημονεύσει ακόμα τις αντιστοιχίες χρωμάτων για τις τιμές HEX ή RGB, το Brackets κάνει + γρήγορο και εύκολο το να βλέπεις ακριβώς ποιο χρώμα χρησιμοποιείται. Είτε σε CSS είτε σε HTML, απλά περάστε το ποντίκι πάνω από + τα τιμές του χρώματος ή τις διαβαθμίσεις χρώματος και το Brackets θα εμφανίσει μια προβολή αυτού του χρώματος ή της διαβάθμισης αυτόματα. Το + ίδιο συμβαίνει και με τις εικόνες: απλά περάστε πάνω από τον σύνδεσμο της εικόνας στο Brackets και αυτό θα προβάλει μια + μικρογραφία αυτής της εικόνας. +

    + + + Για να δοκιμάσετε την Γρήγορη Προβολή από μόνος σας, βάλτε τον κέρσορα πάνω από το tag στην κορυφή αυτού του + αρχείου και πατήστε Cmd/Ctrl + E για να ανοίξετε έναν γρήγορο επεξεργαστή CSS. Τώρα απλά πηγαίνετε το βελάκι πάνω από οποιοδήποτε + τιμή χρώματος μέσα στο αρχείο CSS. Επίσης, μπορείτε να το δείτε στη πράξη σε διαβαθμίσεις χρώματος με το ανοίξετε έναν γρήγορο επεξεργαστή CSS + στο tag και πηγαίνοντας το βελάκι πάνω από οποιαδήποτε τιμή χρώματος του φόντου. Για να χρησιμοποιήσετε την προβολή + εικόνας, βάλτε τον κέρσορα πάνω από το screenshot που συμπεριλήφθηκε προηγουμένως σε αυτό το έγγραφο. + + + +

    Συμμετάσχετε

    +

    + Το Brackets είναι ένα project ανοιχτού κώδικα. Web developers από όλον τον κόσμο συνεισφέρουν για να φτιάξουν + έναν καλύτερο επεξεργαστή κώδικα. Πολλοί περισσότεροι φτιάχνουν επεκτάσεις που επεκτείνουν τις δυνατότητες του Brackets. + Πείτε μας τι πιστεύετε, μοιραστείτε τις ιδέες σας ή συνεισφέρετε άμεσα στο + project. +

    + + + + + diff --git "a/samples/el/\316\236\316\265\316\272\316\257\316\275\317\211\316\275\317\204\316\261\317\202/main.css" "b/samples/el/\316\236\316\265\316\272\316\257\316\275\317\211\316\275\317\204\316\261\317\202/main.css" new file mode 100644 index 00000000000..57639da2c77 --- /dev/null +++ "b/samples/el/\316\236\316\265\316\272\316\257\316\275\317\211\316\275\317\204\316\261\317\202/main.css" @@ -0,0 +1,42 @@ +html { + background-color: #eeeeee; + background-image: linear-gradient(bottom, rgb(238,238,238) 18%, rgb(153,153,153) 59%, rgb(238,238,238) 80%); + background-image: -o-linear-gradient(bottom, rgb(238,238,238) 18%, rgb(153,153,153) 59%, rgb(238,238,238) 80%); + background-image: -moz-linear-gradient(bottom, rgb(238,238,238) 18%, rgb(153,153,153) 59%, rgb(238,238,238) 80%); + background-image: -webkit-linear-gradient(bottom, rgb(238,238,238) 18%, rgb(153,153,153) 59%, rgb(238,238,238) 80%); + background-image: -ms-linear-gradient(bottom, rgb(238,238,238) 18%, rgb(153,153,153) 59%, rgb(238,238,238) 80%); +} + +body { + margin: 0 auto; + padding: 2em; + max-width: 800px; + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; + font-size: 14px; + line-height: 1.5em; + color: #333333; + background-color: #ffffff; + -webkit-box-shadow: 0 0 12px rgba(0, 0, 0, 0.4); + -moz-box-shadow: 0 0 12px rgba(0, 0, 0, 0.4); + box-shadow: 0 0 12px rgba(0, 0, 0, 0.4); +} + +h1, h2, h3, h4, h5, h6 { + line-height: 1.3em; +} + +samp +{ + /* hide from the browser so we can show cool features in Edge Code */ + display: none; +} + +img +{ + background: dimgray; + border: 1px solid black; + border-radius: 2px; + padding: 15px 10px 10px; + margin: 10px 0; + max-width: 95%; +} diff --git "a/samples/el/\316\236\316\265\316\272\316\257\316\275\317\211\316\275\317\204\316\261\317\202/screenshots/quick-edit.png" "b/samples/el/\316\236\316\265\316\272\316\257\316\275\317\211\316\275\317\204\316\261\317\202/screenshots/quick-edit.png" new file mode 100644 index 0000000000000000000000000000000000000000..2d58dc82044eb1d19ba9d49a43927471ce10f03a GIT binary patch literal 315759 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 PCc>=ls2+U~J` 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 T+}_4aen?LGs8rHHy(|9{0}. (error {1})", + "READ_DIRECTORY_ENTRIES_ERROR" : "Σφάλμα προέκυψε κατά τη διαδικασία διαβάσματος των περιεχομένων του φακέλου {0}. (error {1})", + + // File open/save error string + "ERROR_OPENING_FILE_TITLE" : "Σφάλμα ανοίγματος αρχείου", + "ERROR_OPENING_FILE" : "Σφάλμα προέκυψε κατά τη διαδικασία ανοίγματος του αρχείου {0}. {1}", + "ERROR_OPENING_FILES" : "Σφάλμα προέκυψε κατά τη διαδικασία ανοίγματος των παρακάτω αρχείων:", + "ERROR_RELOADING_FILE_TITLE" : "Σφάλμα επαναφόρτωσης αλλαγών από το δίσκο", + "ERROR_RELOADING_FILE" : "Σφάλμα προέκυψε κατά τη διαδικασία επαναφόρτωσης του αρχείου {0}. {1}", + "ERROR_SAVING_FILE_TITLE" : "Σφάλμα αποθήκευσης αρχείου", + "ERROR_SAVING_FILE" : "Σφάλμα προέκυψε κατά τη διαδικασία αποθήκευσης του αρχείου {0}. {1}", + "ERROR_RENAMING_FILE_TITLE" : "Σφάλμα μετονομασίας αρχείου", + "ERROR_RENAMING_FILE" : "Σφάλμα προέκυψε κατά τη διαδικασία μετονομασίας αρχείου {0}. {1}", + "ERROR_DELETING_FILE_TITLE" : "Σφάλμα διαγραφής αρχείου", + "ERROR_DELETING_FILE" : "Σφάλμα προέκυψε κατά τη διαδικασία διαγραφής του αρχείου {0}. {1}", + "INVALID_FILENAME_TITLE" : "Μη έγκυρο {0} όνομα", + "INVALID_FILENAME_MESSAGE" : "Τα όνομα αρχείων δεν μπορούν να περιέχουν τους ακόλουθους χαρακτήρες: /?*:;{}<>\\| ή οποιεσδήποτε system reserved λέξεις.", + "FILE_ALREADY_EXISTS" : "Το {0} {1} υπάρχει ήδη.", + "ERROR_CREATING_FILE_TITLE" : "Σφάλμα δημιουργίας {0}", + "ERROR_CREATING_FILE" : "Σφάλμα προέκυψε κατά τη διαδικασία δημιουργίας του {0} {1}. {2}", + + // Application error strings + "ERROR_IN_BROWSER_TITLE" : "Ωχ! Το {APP_NAME} δεν τρέχει ακόμα σε browsers.", + "ERROR_IN_BROWSER" : "To {APP_NAME} είναι γραμμένο σε HTML, αλλά αυτή τη στιγμή τρέχει σαν native εφαρμογή έτσι ώστε να μπορείτε να επεξεργαστείτε τοπικά αρχεία. Παρακαλούμε να χρησιμοποιήσετε το application shell στο github.com/adobe/brackets-shell repo για να τρέξετε το {APP_NAME}.", + + // FileIndexManager error string + "ERROR_MAX_FILES_TITLE" : "Σφάλμα κατά τη διαδικασία indexing των αρχείων", + "ERROR_MAX_FILES" : "Ο μέγιστος αριθμός αρχείων έχει καταχωρηθεί index. Λειτουργίες που ψάχνουν αρχεία στο index μπορεί να μην δουλεύουν σωστά.", + + // Live Development error strings + "ERROR_LAUNCHING_BROWSER_TITLE" : "Σφάλμα ανοίγματος browser", + "ERROR_CANT_FIND_CHROME" : "Ο Google Chrome browser δεν βρέθηκε. Παρακαλούμε σιγουρευτείτε ότι είναι εγκατεστημένος.", + "ERROR_LAUNCHING_BROWSER" : "Σφάλμα προέκυψε κατά τη διαδικασία ανοίγματος του browser. (error {0})", + + "LIVE_DEVELOPMENT_ERROR_TITLE" : "Σφάλμα Live Preview", + "LIVE_DEVELOPMENT_RELAUNCH_TITLE" : "Σύνδεση στον Browser", + "LIVE_DEVELOPMENT_ERROR_MESSAGE" : "Για να συνδεθεί το Live Preview, ο Chrome πρέπει να επανεκκινηθεί με το remote debugging (απομακρυσμένη αποσφαλμάτωση) ενεργοποιημένο.

    Θέλετε να επανεκκινήσετε τον Chrome και να ενεργοποιήσετε το remote debugging;", + "LIVE_DEV_LOADING_ERROR_MESSAGE" : "Αδυναμία φόρτωσης της σελίδας Live Development", + "LIVE_DEV_NEED_HTML_MESSAGE" : "Ανοίξτε ένα αρχείο HTML έτσι ώστε να ξεκινήσει η άμεση προεπισκόπηση (Live Preview).", + "LIVE_DEV_NEED_BASEURL_MESSAGE" : "Για να ανοίξετε το Live Preview με ένα αρχείο από κάποιον server, πρέπει να προσδιορίσετε μια διεύθυνση (Base URL) για αυτό το project.", + "LIVE_DEV_SERVER_NOT_READY_MESSAGE" : "Σφάλμα κατά τη διαδικασία εκκίνησης του HTTP server για την άμεση επεξεργασία αρχείων. Παρακαλούμε προσπαθήστε ξανά.", + "LIVE_DEVELOPMENT_INFO_TITLE" : "Καλώς ήρθατε στο Live Preview!", + "LIVE_DEVELOPMENT_INFO_MESSAGE" : "Το Live Preview συνδέει το {APP_NAME} με τον browser σας. Ανοίγει μια προεπισκόπηση του HTML αρχείου σας στον browser, και την ανανεώνει στιγμιαία ενώ επεξεργάζεστε τον κώδικα.

    Σε τούτη την πρώιμη έκδοση του {APP_NAME}, το Live Preview δουλεύει μόνο με Google Chrome και ανανεώνει άμεσα την σελίδα ενώ επεξεργάζεστε αρχεία CSS ή HTML. Αλλαγές σε αρχεία JavaScript ανανεώνονται αυτόματα όταν κάνετε αποθήκευση.

    (Το μήνυμα αυτό θα αυτοκαταστραφεί μετά την πρώτη εμφάνιση του.)", + "LIVE_DEVELOPMENT_TROUBLESHOOTING" : "Για περισσότερες πληροφορίες δείτε εδώ:
    Troubleshooting Live Development connection errors.", + + "LIVE_DEV_STATUS_TIP_NOT_CONNECTED" : "Live Preview", + "LIVE_DEV_STATUS_TIP_PROGRESS1" : "Live Preview: Σύνδεση\u2026", + "LIVE_DEV_STATUS_TIP_PROGRESS2" : "Live Preview: Εκκίνηση\u2026", + "LIVE_DEV_STATUS_TIP_CONNECTED" : "Αποσύνδεση Live Preview", + "LIVE_DEV_STATUS_TIP_OUT_OF_SYNC" : "Live Preview (κάντε αποθήκευση για να ανανεωθεί)", + "LIVE_DEV_STATUS_TIP_SYNC_ERROR" : "Live Preview (αδυναμία ανανέωσης λόγο συντακτικού λάθους)", + + "LIVE_DEV_DETACHED_REPLACED_WITH_DEVTOOLS" : "Το Live Preview ακυρώθηκε επειδή τα developer tools του browser ανοίχτηκαν", + "LIVE_DEV_DETACHED_TARGET_CLOSED" : "Το Live Preview ακυρώθηκε επειδή η σελίδα στον browser έκλεισε", + "LIVE_DEV_NAVIGATED_AWAY" : "Το Live Preview ακυρώθηκε επειδή ο browser πήγε σε μια σελίδα που δεν είναι μέρος του τρέχων project", + "LIVE_DEV_CLOSED_UNKNOWN_REASON" : "Το Live Preview ακυρώθηκε. Δεν ξέρουμε γιατί. ({0})", + + "SAVE_CLOSE_TITLE" : "Αποθήκευση Αλλαγών", + "SAVE_CLOSE_MESSAGE" : "Θέλετε να αποθηκεύσετε τις αλλαγές που κάνατε στο έγγραφο {0}?", + "SAVE_CLOSE_MULTI_MESSAGE" : "Θέλετε να αποθηκεύσετε τις αλλαγές σας στα παρακάτω αρχεία;", + "EXT_MODIFIED_TITLE" : "Εξωτερικές Αλλαγές", + "CONFIRM_FOLDER_DELETE_TITLE" : "Επιβεβαίωση Διαγραφής", + "CONFIRM_FOLDER_DELETE" : "Είστε σίγουρος ότι θέλετε να διαγράψετε τον φάκελο {0}?", + "FILE_DELETED_TITLE" : "Το Αρχείο Διαγράφηκε", + "EXT_MODIFIED_MESSAGE" : "Το {0} έχει τροποποιηθεί στο δίσκο, αλλά υπάρχουν και μη αποθηκευμένες αλλαγές στο {APP_NAME}.

    Ποια έκδοση θέλετε να κρατήσετε;", + "EXT_DELETED_MESSAGE" : "Το {0} έχει διαγραφεί στον δίσκο, αλλά έχει μη αποθηκευμένες αλλαγές στο {APP_NAME}.

    Θέλετε να κρατήσετε τις αλλαγές σας;", + + // Find, Replace, Find in Files + "SEARCH_REGEXP_INFO" : "Χρησιμοποιήστε την σύνταξη /re/ για αναζήτηση regexp", + "FIND_RESULT_COUNT" : "{0} αποτελέσματα", + "FIND_RESULT_COUNT_SINGLE" : "1 αποτέλεσμα", + "FIND_NO_RESULTS" : "Δεν βρέθηκαν αποτελέσματα", + "WITH" : "Με", + "BUTTON_YES" : "Ναι", + "BUTTON_NO" : "Όχι", + "BUTTON_REPLACE_ALL" : "Όλα\u2026", + "BUTTON_STOP" : "Διακοπή", + "BUTTON_REPLACE" : "Αντικατάσταση", + + "BUTTON_NEXT" : "\u25B6", + "BUTTON_PREV" : "\u25C0", + "BUTTON_NEXT_HINT" : "Επόμενη Αντιστοιχία", + "BUTTON_PREV_HINT" : "Προηγούμενη Αντιστοιχία", + + "OPEN_FILE" : "Άνοιγμα Αρχείου", + "SAVE_FILE_AS" : "Αποθήκευση Αρχείου", + "CHOOSE_FOLDER" : "Επίλεξε ένα φάκελο", + + "RELEASE_NOTES" : "Release Notes", + "NO_UPDATE_TITLE" : "Έχετε την τελευταία έκδοση!", + "NO_UPDATE_MESSAGE" : "Τρέχετε την τελευταία έκδοση του {APP_NAME}.", + + "FIND_REPLACE_TITLE_PART1" : "Αντικατάσταση \"", + "FIND_REPLACE_TITLE_PART2" : "\" με \"", + "FIND_REPLACE_TITLE_PART3" : "\" — {2} {0} {1}", + + "FIND_IN_FILES_TITLE_PART1" : "\"", + "FIND_IN_FILES_TITLE_PART2" : "\" βρέθηκε", + "FIND_IN_FILES_TITLE_PART3" : "— {0} {1} {2} in {3} {4}", + "FIND_IN_FILES_SCOPED" : "στο {0}", + "FIND_IN_FILES_NO_SCOPE" : "στο project", + "FIND_IN_FILES_FILE" : "αρχείο", + "FIND_IN_FILES_FILES" : "αρχεία", + "FIND_IN_FILES_MATCH" : "αντιστοιχία", + "FIND_IN_FILES_MATCHES" : "αντιστοιχίες", + "FIND_IN_FILES_MORE_THAN" : "Πάνω από ", + "FIND_IN_FILES_PAGING" : "{0}—{1}", + "FIND_IN_FILES_FILE_PATH" : "{0} {2} {1}", // We shoudl use normal dashes on Windows instead of em dash eventually + "ERROR_FETCHING_UPDATE_INFO_TITLE" : "Σφάλμα λήψης πληροφοριών αναβάθμισης", + "ERROR_FETCHING_UPDATE_INFO_MSG" : "Προέκυψε σφάλμα κατά τη διαδικασία λήψης πληροφοριών της τελευταίας αναβάθμισης από τον server. Παρακαλούμε βεβαιωθείτε ότι είστε συνδεδεμένος στο internet και προσπαθήστε ξανά.", + + /** + * ProjectManager + */ + "PROJECT_LOADING" : "Φόρτωση\u2026", + "UNTITLED" : "Άτιτλο", + "WORKING_FILES" : "Αρχεία Εργασίας", + + /** + * Keyboard modifier names + */ + "KEYBOARD_CTRL" : "Ctrl", + "KEYBOARD_SHIFT" : "Shift", + "KEYBOARD_SPACE" : "Space", + + /** + * StatusBar strings + */ + "STATUSBAR_CURSOR_POSITION" : "Σειρά {0}, Στήλη {1}", + "STATUSBAR_SELECTION_CH_SINGULAR" : " \u2014 επιλεγμένη {0} στήλη", + "STATUSBAR_SELECTION_CH_PLURAL" : " \u2014 επιλεγμένες {0} στήλες", + "STATUSBAR_SELECTION_LINE_SINGULAR" : " \u2014 επιλεγμένη {0} γραμμή", + "STATUSBAR_SELECTION_LINE_PLURAL" : " \u2014 επιλεγμένες {0} γραμμές", + "STATUSBAR_INDENT_TOOLTIP_SPACES" : "Κάντε κλικ για να αλλάξετε τις εσοχές (indentation) σε κενά", + "STATUSBAR_INDENT_TOOLTIP_TABS" : "Κάντε κλικ για να αλλάξετε τις εσοχές (indentation) σε tabs", + "STATUSBAR_INDENT_SIZE_TOOLTIP_SPACES" : "Κάντε κλικ για να αλλάξετε τον αριθμό των κενών στις εσοχές", + "STATUSBAR_INDENT_SIZE_TOOLTIP_TABS" : "Κάντε κλικ για να αλλάξετε το πλάτος του tab", + "STATUSBAR_SPACES" : "Κενά:", + "STATUSBAR_TAB_SIZE" : "Μέγεθος Tab:", + "STATUSBAR_LINE_COUNT_SINGULAR" : "\u2014 {0} Γραμμή", + "STATUSBAR_LINE_COUNT_PLURAL" : "\u2014 {0} Γραμμές", + + // CodeInspection: errors/warnings + "ERRORS_PANEL_TITLE" : "{0} Σφάλματα", + "SINGLE_ERROR" : "1 {0} Σφάλμα", + "MULTIPLE_ERRORS" : "{1} {0} Σφάλματα", + "NO_ERRORS" : "Κανένα {0} Σφάλμα - Λαμπρά!", + "LINT_DISABLED" : "Το Linting είναι απενεργοποιημένο", + "NO_LINT_AVAILABLE" : "Δεν υπάρχει διαθέσιμος linter για {0}", + "NOTHING_TO_LINT" : "Δεν υπάρχει τίποτα για να γίνει lint", + + + /** + * Command Name Constants + */ + + // File menu commands + "FILE_MENU" : "Αρχείο", + "CMD_FILE_NEW_UNTITLED" : "Νέο", + "CMD_FILE_NEW" : "Νέο Αρχείο", + "CMD_FILE_NEW_FOLDER" : "Νέος Φάκελος", + "CMD_FILE_OPEN" : "Άνοιγμα\u2026", + "CMD_ADD_TO_WORKING_SET" : "Πρόσθεση στα Αρχεία Εργασίας", + "CMD_OPEN_FOLDER" : "Άνοιγμα Φακέλου\u2026", + "CMD_FILE_CLOSE" : "Κλείσιμο", + "CMD_FILE_CLOSE_ALL" : "Κλείσιμο Όλων", + "CMD_FILE_SAVE" : "Αποθήκευση", + "CMD_FILE_SAVE_ALL" : "Αποθήκευση Όλων", + "CMD_FILE_SAVE_AS" : "Αποθήκευση Ως\u2026", + "CMD_LIVE_FILE_PREVIEW" : "Live Preview", + "CMD_PROJECT_SETTINGS" : "Ρυθμίσεις Project\u2026", + "CMD_FILE_RENAME" : "Μετονομασία", + "CMD_FILE_DELETE" : "Διαγραφή", + "CMD_INSTALL_EXTENSION" : "Εγκατάσταση Επέκτασης (Extension)\u2026", + "CMD_EXTENSION_MANAGER" : "Διαχειριστής Επεκτάσεων\u2026", + "CMD_FILE_REFRESH" : "Ανανέωση Δέντρου Αρχείων", + "CMD_QUIT" : "Κλείσιμο", + // Used in native File menu on Windows + "CMD_EXIT" : "΄Εξοδος", + + // Edit menu commands + "EDIT_MENU" : "Επεξεργασία", + "CMD_UNDO" : "Αναίρεση", + "CMD_REDO" : "Επανάληψη", + "CMD_CUT" : "Αποκοπή", + "CMD_COPY" : "Αντιγραφή", + "CMD_PASTE" : "Επικόλληση", + "CMD_SELECT_ALL" : "Επιλογή Όλων", + "CMD_SELECT_LINE" : "Επιλογή Γραμμής", + "CMD_FIND" : "Εύρεση", + "CMD_FIND_IN_FILES" : "Εύρεση σε Αρχεία", + "CMD_FIND_IN_SUBTREE" : "Εύρεση σε\u2026", + "CMD_FIND_NEXT" : "Εύρεση Επόμενου", + "CMD_FIND_PREVIOUS" : "Εύρεση Προηγούμενου", + "CMD_REPLACE" : "Αντικατάσταση", + "CMD_INDENT" : "Εσοχή", + "CMD_UNINDENT" : "Αφαίρεση Εσοχής", + "CMD_DUPLICATE" : "Διπλασιασμός", + "CMD_DELETE_LINES" : "Διαγραφή Γραμμής", + "CMD_COMMENT" : "Εναλλαγή Σχολίου Γραμμής", + "CMD_BLOCK_COMMENT" : "Εναλλαγή Σχολίου Block", + "CMD_LINE_UP" : "Μετακίνηση Γραμμής Πάνω", + "CMD_LINE_DOWN" : "Μετακίνηση Γραμμής Κάτω", + "CMD_OPEN_LINE_ABOVE" : "Δημιουργία Γραμμής από πάνω", + "CMD_OPEN_LINE_BELOW" : "Δημιουργία Γραμμής από κάτω", + "CMD_TOGGLE_CLOSE_BRACKETS" : "Αυτόματο Κλείσιμο Αγκίστρων", + "CMD_SHOW_CODE_HINTS" : "Προβολή Υποδείξεων Κώδικα", + + // View menu commands + "VIEW_MENU" : "Προβολή", + "CMD_HIDE_SIDEBAR" : "Απόκρυψη Πλευρικής Εργαλειοθήκης", + "CMD_SHOW_SIDEBAR" : "Προβολή Πλευρικής Εργαλειοθήκης", + "CMD_INCREASE_FONT_SIZE" : "Αύξηση Μεγέθους Γραμματοσειράς", + "CMD_DECREASE_FONT_SIZE" : "Μείωση Μεγέθους Γραμματοσειράς", + "CMD_RESTORE_FONT_SIZE" : "Επαναφορά Μεγέθους Γραμματοσειράς", + "CMD_SCROLL_LINE_UP" : "Κύλιση Γραμμής Πάνω", + "CMD_SCROLL_LINE_DOWN" : "Κύλιση Γραμμής Κάτω", + "CMD_TOGGLE_LINE_NUMBERS" : "Αριθμοί Γραμμών", + "CMD_TOGGLE_ACTIVE_LINE" : "Επισήμανση Ενεργής Γραμμής", + "CMD_TOGGLE_WORD_WRAP" : "Αναδίπλωση Λέξης", + "CMD_LIVE_HIGHLIGHT" : "Επισήμανση Live Preview", + "CMD_VIEW_TOGGLE_INSPECTION" : "Lint Αρχείων κατά την Αποθήκευση", + "CMD_SORT_WORKINGSET_BY_ADDED" : "Ταξινόμηση κατά Σειράς Πρόσθεσης", + "CMD_SORT_WORKINGSET_BY_NAME" : "Ταξινόμηση κατά Όνομα", + "CMD_SORT_WORKINGSET_BY_TYPE" : "Ταξινόμηση κατά Τύπο", + "CMD_SORT_WORKINGSET_AUTO" : "Αυτόματη Ταξινόμηση", + + // Navigate menu Commands + "NAVIGATE_MENU" : "Πλοήγηση", + "CMD_QUICK_OPEN" : "Γρήγορο Άνοιγμα", + "CMD_GOTO_LINE" : "Πήγαινε στο γραμμή", + "CMD_GOTO_DEFINITION" : "Γρήγορη Αναζήτηση Ορισμού", + "CMD_GOTO_FIRST_PROBLEM" : "Πήγαινε στο Πρώτο Σφάλμα/Προειδοποίηση", + "CMD_TOGGLE_QUICK_EDIT" : "Γρήγορη Επεξεργασία", + "CMD_TOGGLE_QUICK_DOCS" : "Γρήγορα Έγγραφα", + "CMD_QUICK_EDIT_PREV_MATCH" : "Προηγούμενη Αντιστοιχία", + "CMD_QUICK_EDIT_NEXT_MATCH" : "Επόμενη Αντιστοιχία", + "CMD_NEXT_DOC" : "Επόμενο Έγγραφο", + "CMD_PREV_DOC" : "Προηγούμενο Έγγραφο", + "CMD_SHOW_IN_TREE" : "Προβολή στο Δέντρο Αρχείων", + "CMD_SHOW_IN_OS" : "Προβολή στο Λειτουργικό Σύστημα", + + // Help menu commands + "HELP_MENU" : "Βοήθεια", + "CMD_CHECK_FOR_UPDATE" : "Έλεγχος για Αναβαθμίσεις", + "CMD_HOW_TO_USE_BRACKETS" : "Πώς να Χρησιμοποιήσετε το {APP_NAME}", + "CMD_FORUM" : "{APP_NAME} Forum", + "CMD_RELEASE_NOTES" : "Release Notes", + "CMD_REPORT_AN_ISSUE" : "Αναφορά Προβλήματος", + "CMD_SHOW_EXTENSIONS_FOLDER" : "Προβολή Φακέλου Επεκτάσεων", + "CMD_TWITTER" : "{TWITTER_NAME} στο Twitter", + "CMD_ABOUT" : "Σχετικά με το {APP_TITLE}", + + // Strings for main-view.html + "EXPERIMENTAL_BUILD" : "experimental build", + "DEVELOPMENT_BUILD" : "development build", + "OK" : "OK", + "DONT_SAVE" : "Να Μην Αποθηκευτεί", + "SAVE" : "Αποθήκευση", + "CANCEL" : "Ακύρωση", + "DELETE" : "Διαγραφή", + "RELOAD_FROM_DISK" : "Επαναφόρτωση από τον Δίσκο", + "KEEP_CHANGES_IN_EDITOR" : "Διατήρηση Αλλαγών στο Επεξεργαστή", + "CLOSE_DONT_SAVE" : "Κλείσιμο (Να Μην Αποθηκευτεί)", + "RELAUNCH_CHROME" : "Επανεκκίνηση Chrome", + "ABOUT" : "Σχετικά", + "CLOSE" : "Κλείσιμο", + "ABOUT_TEXT_LINE1" : "sprint {VERSION_MINOR} {BUILD_TYPE} {VERSION}", + "ABOUT_TEXT_LINE3" : "Πληροφορίες, όροι και οι προϋποθέσεις που αφορούν λογισμικό τρίτων κατασκευαστών βρίσκονται στο {ADOBE_THIRD_PARTY} και ενσωματώνονται εδώ με αναφορά.", + "ABOUT_TEXT_LINE4" : "Documentation και πηγαίος κώδικας στο https://github.com/adobe/brackets/", + "ABOUT_TEXT_LINE5" : "Φτιαγμένο με \u2764 και JavaScript από:", + "ABOUT_TEXT_LINE6" : "Πολλούς ανθρώπους (απλά αντιμετωπίζουμε ένα πρόβλημα με την φόρτωση των δεδομένων αυτήν την στιγμή).", + "ABOUT_TEXT_WEB_PLATFORM_DOCS" : "Τα Web Platform Docs και το Web Platform γραφικό logo είναι αδειοδοτημένα κάτω από την άδεια Creative Commons Attribution, CC-BY 3.0 Unported.", + "UPDATE_NOTIFICATION_TOOLTIP" : "Υπάρχει ένα νέο build του {APP_NAME} διαθέσιμο! Πατήστε εδώ για λεπτομέρειες.", + "UPDATE_AVAILABLE_TITLE" : "Διαθέσιμη Αναβάθμιση", + "UPDATE_MESSAGE" : "Ψιτ, υπάρχει ένα νέο build του {APP_NAME} διαθέσιμο. Μερικές από τις καινούργιες λειτουργίες:", + "GET_IT_NOW" : "Κατέβασε το τώρα!", + "PROJECT_SETTINGS_TITLE" : "Ρυθμίσεις Project για: {0}", + "PROJECT_SETTING_BASE_URL" : "Live Preview Base URL", + "PROJECT_SETTING_BASE_URL_HINT" : "Για να χρησιμοποιήσετε τοπικό server, εισάγετε μια διεύθυνση σαν και αυτή http://localhost:8000/", + "BASEURL_ERROR_INVALID_PROTOCOL" : "Το πρωτόκολλο {0} δεν υποστηρίζεται από το Live Preview—παρακαλούμε χρησιμοποιήστε http: ή https: .", + "BASEURL_ERROR_SEARCH_DISALLOWED" : "Η διεύθυνση URL δεν μπορεί να περιέχει παραμέτρους αναζήτησης όπως \"{0}\".", + "BASEURL_ERROR_HASH_DISALLOWED" : "Η διεύθυνση URL δεν μπορεί να περιέχει hashes σαν και αυτά \"{0}\".", + "BASEURL_ERROR_INVALID_CHAR" : "Οι ειδικοί χαρακτήρες όπως '{0}' πρέπει να είναι %-encoded.", + "BASEURL_ERROR_UNKNOWN_ERROR" : "Άγνωστο σφάλμα κατά την προσπέλαση της διεύθυνσης URL", + + // Extension Management strings + "INSTALL" : "Εγκατάσταση", + "UPDATE" : "Αναβάθμιση", + "REMOVE" : "Κατάργηση", + "OVERWRITE" : "Αντικατάσταση", + "CANT_REMOVE_DEV" : "Οι επεκτάσεις στο φάκελο \"dev\" πρέπει να διαγραφούν χειροκίνητα.", + "CANT_UPDATE" : "Η αναβάθμιση δεν είναι συμβατή με αυτήν την έκδοση του {APP_NAME}.", + "INSTALL_EXTENSION_TITLE" : "Εγκατάσταση Επέκτασης", + "UPDATE_EXTENSION_TITLE" : "Αναβάθμιση Επέκτασης", + "INSTALL_EXTENSION_LABEL" : "URL Επέκτασης", + "INSTALL_EXTENSION_HINT" : "URL αρχείου zip ή GitHub repo της επέκτασης", + "INSTALLING_FROM" : "Εγκατάσταση επέκτασης από {0}\u2026", + "INSTALL_SUCCEEDED" : "Εγκατάσταση επιτυχής!", + "INSTALL_FAILED" : "Εγκατάσταση ανεπιτυχής.", + "CANCELING_INSTALL" : "Ακύρωση\u2026", + "CANCELING_HUNG" : "Η ακύρωση της εγκατάστασης παίρνει πολύ ώρα. Κάποιο εσωτερικό σφάλμα μπορεί να έχει προκληθεί.", + "INSTALL_CANCELED" : "Η εγκατάσταση ακυρώθηκε.", + // These must match the error codes in ExtensionsDomain.Errors.* : + "INVALID_ZIP_FILE" : "Το περιεχόμενο που κατέβηκε δεν είναι έγκυρο αρχείο zip.", + "INVALID_PACKAGE_JSON" : "Το αρχείο package.json δεν είναι έγκυρο (error was: {0}).", + "MISSING_PACKAGE_NAME" : "Το αρχείο package.json δεν καθορίζει όνομα πακέτου.", + "BAD_PACKAGE_NAME" : "Το {0} δεν είναι έγκυρο όνομα αρχείου.", + "MISSING_PACKAGE_VERSION" : "Το αρχείο package.json δεν καθορίζει έκδοση πακέτου.", + "INVALID_VERSION_NUMBER" : "Ο αριθμός έκδοσης του πακέτου ({0}) δεν είναι έγκυρος.", + "INVALID_BRACKETS_VERSION" : "Η συμβολοσειρά συμβατότητας (compatibility string) ({0}) του {APP_NAME} δεν είναι έγκυρη.", + "DISALLOWED_WORDS" : "Οι λέξεις ({1}) δεν επιτρέπονται στο πεδίο {0}.", + "API_NOT_COMPATIBLE" : "Η επέκταση δεν είναι συμβατή με αυτήν την έκδοση του {APP_NAME}. Εγκαταστάθηκε στον φάκελο των απενεργοποιημένων επεκτάσεων.", + "MISSING_MAIN" : "Το πακέτο δεν έχει main.js αρχείο.", + "EXTENSION_ALREADY_INSTALLED" : "Η εγκατάσταση αυτού του πακέτου θα αντικαταστήσει μια προηγούμενη εγκατάσταση επέκτασης. Να αντικατασταθεί η παλιά επέκταση;", + "EXTENSION_SAME_VERSION" : "Αυτό το πακέτο είναι η ίδια έκδοση με αυτό που είναι ήδη εγκατεστημένο. Να αντικατασταθεί η υπάρχουσα εγκατάσταση;", + "EXTENSION_OLDER_VERSION" : "Αυτό το πακέτο είναι στην έκδοση {0} η οποία είναι παλιότερη από την τρέχουσα εγκατάσταση ({1}). Να αντικατασταθεί η υπάρχουσα εγκατάσταση;", + "DOWNLOAD_ID_IN_USE" : "Εσωτερικό σφάλμα: το ID που κατέβηκε χρησιμοποιείται ήδη.", + "NO_SERVER_RESPONSE" : "Αδυναμία σύνδεσης στον server.", + "BAD_HTTP_STATUS" : "Το αρχείο δεν βρέθηκε στον server (HTTP {0}).", + "CANNOT_WRITE_TEMP" : "Αδυναμία αποθήκευσης αυτού που κατέβηκε στο αρχείο temp.", + "ERROR_LOADING" : "Η επέκταση αντιμετώπισε ένα σφάλμα ενώ ξεκινούσε.", + "MALFORMED_URL" : "Η διεύθυνση URL δεν είναι έγκυρη is invalid. Please check that you entered it correctly.", + "UNSUPPORTED_PROTOCOL" : "Η διεύθυνση URL πρέπει να είναι http ή https.", + "UNKNOWN_ERROR" : "Άγνωστο εσωτερικό σφάλμα.", + // For NOT_FOUND_ERR, see generic strings above + "EXTENSION_MANAGER_TITLE" : "Διαχειριστής Επεκτάσεων", + "EXTENSION_MANAGER_ERROR_LOAD" : "Αδυναμία πρόσβασης στο μητρώο επεκτάσεων. Παρακαλώ προσπαθήστε αργότερα.", + "INSTALL_FROM_URL" : "Εγκατάσταση από διεύθυνση URL\u2026", + "EXTENSION_AUTHOR" : "Δημιουργός", + "EXTENSION_DATE" : "Ημερομηνία", + "EXTENSION_INCOMPATIBLE_NEWER" : "Αυτή η επέκταση απαιτεί νεότερη έκδοση του {APP_NAME}.", + "EXTENSION_INCOMPATIBLE_OLDER" : "Αυτή η επέκταση προς το παρόν δουλεύει μόνο με παλαιότερες εκδόσεις του {APP_NAME}.", + "EXTENSION_NO_DESCRIPTION" : "Δεν υπάρχει περιγραφή", + "EXTENSION_MORE_INFO" : "Περισσότερες Πληροφορίες...", + "EXTENSION_ERROR" : "Σφάλμα επέκτασης", + "EXTENSION_KEYWORDS" : "Λέξεις κλειδιά", + "EXTENSION_INSTALLED" : "Εγκατεστημένο", + "EXTENSION_UPDATE_INSTALLED" : "Αυτή η αναβάθμιση επέκτασης έχει κατέβει και θα εγκατασταθεί όταν κλείσει το {APP_NAME}.", + "EXTENSION_SEARCH_PLACEHOLDER" : "Αναζήτηση", + "EXTENSION_MORE_INFO_LINK" : "Περισσότερα", + "BROWSE_EXTENSIONS" : "Περιήγηση Επεκτάσεων", + "EXTENSION_MANAGER_REMOVE" : "Κατάργηση Επέκτασης", + "EXTENSION_MANAGER_REMOVE_ERROR" : "Αδυναμία κατάργησης μίας ή περισσότερων επεκτάσεων: {0}. Το {APP_NAME} θα κλείσει.", + "EXTENSION_MANAGER_UPDATE" : "Αναβάθμιση Επέκτασης", + "EXTENSION_MANAGER_UPDATE_ERROR" : "Αδυναμία αναβάθμισης μίας η περισσότερων επεκτάσεων: {0}. Το {APP_NAME} θα κλείσει.", + "MARKED_FOR_REMOVAL" : "Επιλεγμένο για κατάργηση", + "UNDO_REMOVE" : "Αναίρεση", + "MARKED_FOR_UPDATE" : "Επιλεγμένο για αναβάθμιση", + "UNDO_UPDATE" : "Αναίρεση", + "CHANGE_AND_QUIT_TITLE" : "Αλλαγή Επεκτάσεων", + "CHANGE_AND_QUIT_MESSAGE" : "Για να αναβαθμίσετε ή να καταργήσετε τις επιλεγμένες επεκτάσεις, πρέπει να κλείσετε και να επανεκκινήσετε το {APP_NAME}. Θα ερωτηθείτε για την αποθήκευση των αλλαγών.", + "REMOVE_AND_QUIT" : "Κατάργηση Επεκτάσεων και Κλείσιμο", + "CHANGE_AND_QUIT" : "Αλλαγή Επεκτάσεων και Κλείσιμο", + "UPDATE_AND_QUIT" : "Αναβάθμιση Επεκτάσεων και Κλείσιμο", + "EXTENSION_NOT_INSTALLED" : "Αδυναμία κατάργησης της επέκτασης {0} αφού δεν ήταν εγκατεστημένη.", + "NO_EXTENSIONS" : "Δεν υπάρχουν επεκτάσεις εγκατεστημένες ακόμα.
    Κάντε κλικ στην καρτέλα Διαθέσιμα για να ξεκινήσετε.", + "NO_EXTENSION_MATCHES" : "Δεν βρέθηκαν επεκτάσεις που να ικανοποιούν τα κριτήρια αναζήτησης σας.", + "REGISTRY_SANITY_CHECK_WARNING" : "Να είστε προσεκτικοί όταν εγκαθιστάτε επεκτάσεις από άγνωστες πηγές.", + "EXTENSIONS_INSTALLED_TITLE" : "Εγκατεστημένες", + "EXTENSIONS_AVAILABLE_TITLE" : "Διαθέσιμες", + "EXTENSIONS_UPDATES_TITLE" : "Αναβαθμίσεις", + + /** + * Unit names + */ + + "UNIT_PIXELS" : "pixels", + + + // extensions/default/DebugCommands + "DEBUG_MENU" : "Debug", + "CMD_SHOW_DEV_TOOLS" : "Προβολή Developer Tools", + "CMD_REFRESH_WINDOW" : "Επαναφόρτωση {APP_NAME}", + "CMD_NEW_BRACKETS_WINDOW" : "Νέο Παράθυρο {APP_NAME}", + "CMD_SWITCH_LANGUAGE" : "Αλλαγή Γλώσσας", + "CMD_RUN_UNIT_TESTS" : "Τρέξε Tests", + "CMD_SHOW_PERF_DATA" : "Προβολή Δεδομένων Επίδοσης", + "CMD_ENABLE_NODE_DEBUGGER" : "Ενεργοποίηση του Node Debugger", + "CMD_LOG_NODE_STATE" : "Καταγραφή Node State στη Console", + "CMD_RESTART_NODE" : "Επανεκκίνηση του Node", + + "LANGUAGE_TITLE" : "Αλλαγή Γλώσσας", + "LANGUAGE_MESSAGE" : "Γλώσσες:", + "LANGUAGE_SUBMIT" : "Επανεκκίνηση του {APP_NAME}", + "LANGUAGE_CANCEL" : "Ακύρωση", + "LANGUAGE_SYSTEM_DEFAULT" : "Προεπιλογή Συστήματος", + + // Locales (used by Debug > Switch Language) + "LOCALE_CS" : "Τσέχικα", + "LOCALE_DE" : "Γερμανικά", + "LOCALE_EN" : "Αγγλικά", + "LOCALE_ES" : "Ισπανικά", + "LOCALE_FI" : "Φινλανδικά", + "LOCALE_FR" : "Γαλλικά", + "LOCALE_IT" : "Ιταλικά", + "LOCALE_JA" : "Ιαπωνικά", + "LOCALE_NB" : "Νορβηγικά", + "LOCALE_PL" : "Πολωνικά", + "LOCALE_PT_BR" : "Πορτογαλικά, Βραζιλία", + "LOCALE_PT_PT" : "Πορτογαλικά", + "LOCALE_RU" : "Ρώσικα", + "LOCALE_SK" : "Σλοβακικά", + "LOCALE_SV" : "Σουηδικά", + "LOCALE_TR" : "Τούρκικα", + "LOCALE_ZH_CN" : "Κινέζικα, απλοποιημένα", + "LOCALE_HU" : "Ουγγρικά", + + // extensions/default/InlineColorEditor + "COLOR_EDITOR_CURRENT_COLOR_SWATCH_TIP" : "Τρέχων Χρώμα", + "COLOR_EDITOR_ORIGINAL_COLOR_SWATCH_TIP" : "Αρχικό Χρώμα", + "COLOR_EDITOR_RGBA_BUTTON_TIP" : "Μορφή RGBa", + "COLOR_EDITOR_HEX_BUTTON_TIP" : "Μορφή Hex", + "COLOR_EDITOR_HSLA_BUTTON_TIP" : "Μορφή HSLa", + "COLOR_EDITOR_USED_COLOR_TIP_SINGULAR" : "{0} (Χρησιμοποιήθηκε {1} φορά)", + "COLOR_EDITOR_USED_COLOR_TIP_PLURAL" : "{0} (Χρησιμοποιήθηκε {1} φορές)", + + // extensions/default/JavaScriptCodeHints + "CMD_JUMPTO_DEFINITION" : "Πήγαινε στον Ορισμό", + "CMD_SHOW_PARAMETER_HINT" : "Προβολή Υποδείξεων Παραμέτρων", + "NO_ARGUMENTS" : "<χωρίς παραμέτρους>", + + // extensions/default/JSLint + "JSLINT_NAME" : "JSLint", + + // extensions/default/QuickView + "CMD_ENABLE_QUICK_VIEW" : "Γρήγορη Προβολή στο Hover", + + // extensions/default/RecentProjects + "CMD_TOGGLE_RECENT_PROJECTS" : "Πρόσφατα Project", + + // extensions/default/WebPlatformDocs + "DOCS_MORE_LINK" : "Διαβάστε Περισσότερα" +}); diff --git a/src/nls/el/urls.js b/src/nls/el/urls.js new file mode 100644 index 00000000000..73c7feb80f8 --- /dev/null +++ b/src/nls/el/urls.js @@ -0,0 +1,32 @@ +/* + * 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 */ + +define({ + // Relative to the samples folder + "GETTING_STARTED" : "el/Ξεκινώντας", + "ADOBE_THIRD_PARTY" : "http://www.adobe.com/go/thirdparty/", + "WEB_PLATFORM_DOCS_LICENSE" : "http://creativecommons.org/licenses/by/3.0/deed.el" +}); diff --git a/src/nls/strings.js b/src/nls/strings.js index 79ab69b3012..2a01cb06660 100644 --- a/src/nls/strings.js +++ b/src/nls/strings.js @@ -39,6 +39,7 @@ define(function (require, exports, module) { root: true, "cs": true, "de": true, + "el": true, "es": true, "fi": true, "fr": true, From 27733fb45d284d32349f14c0fddd4ddc0391e924 Mon Sep 17 00:00:00 2001 From: Lawrence Hsu Date: Sun, 29 Sep 2013 16:25:11 -0700 Subject: [PATCH 0036/1140] Fixes based on @peterflynn's feedback. --- src/styles/brackets_patterns_override.less | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/styles/brackets_patterns_override.less b/src/styles/brackets_patterns_override.less index c679ea39400..7f179c8df6e 100644 --- a/src/styles/brackets_patterns_override.less +++ b/src/styles/brackets_patterns_override.less @@ -403,7 +403,7 @@ a:focus { .modal .close { cursor: default; - margin: 10px 5px 0 0; + margin: 7px 5px 0 0; } .modal-header { @@ -523,7 +523,7 @@ a:focus { .dialog-filename { word-wrap: break-word; - font-weight: normal; + font-weight: @font-weight-semibold; body.platform-win & { // maintain contrast next to ".less-faint-on-win()" workaround font-weight: @font-weight-semibold; } @@ -838,9 +838,9 @@ input[type="color"], .uneditable-input { background-color: @tc-input-background; border: 1px solid @tc-input-border; - color: @tc-text; + color: @tc-light-weight-text; font-size: (@baseFontSize + 1px); - font-weight: @font-weight-semibold; + font-weight: normal; -webkit-font-smoothing: antialiased; .border-radius(@tc-control-border-radius); .box-shadow(@tc-input-inner-shadow); @@ -855,7 +855,6 @@ input[type="color"], &:focus { outline: 0; background-color: @tc-input-background; - color: @tc-text; text-shadow: none; border: 1px solid @tc-gray-component-focused-border; box-shadow: @tc-input-inner-shadow, @tc-input-glow; From 60c890efa8c664b3d6c022a8e7ddee226e1978db Mon Sep 17 00:00:00 2001 From: Lance Campbell Date: Mon, 30 Sep 2013 12:08:36 -0700 Subject: [PATCH 0037/1140] Add Menu.removeMenuDivider unit tests --- src/command/Menus.js | 4 +-- test/spec/Menu-test.js | 62 ++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 61 insertions(+), 5 deletions(-) diff --git a/src/command/Menus.js b/src/command/Menus.js index 718aa520f22..d5cf316f09f 100644 --- a/src/command/Menus.js +++ b/src/command/Menus.js @@ -485,7 +485,7 @@ define(function (require, exports, module) { } if (_isHTMLMenu(this.id)) { - // Targeting parent to get the menu item and the

    QLtPtIgPcoqddIO#jspkJy;+Cqjb696rpch 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 Lqq80a@63Xfy!Z{D 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

  • that contains it + // Targeting parent to get the menu divider
    and the
  • that contains it $HTMLMenuItem = $(_getHTMLMenuItem(menuItemID)).parent(); if ($HTMLMenuItem) { $HTMLMenuItem.remove(); @@ -583,7 +583,7 @@ define(function (require, exports, module) { // create MenuItem DOM if (_isHTMLMenu(this.id)) { if (name === DIVIDER) { - $menuItem = $("

  • "); + $menuItem = $("

  • "); } else { // Create the HTML Menu $menuItem = $("
  • "); diff --git a/test/spec/Menu-test.js b/test/spec/Menu-test.js index bbfe63932d8..7b74d3c7cd2 100644 --- a/test/spec/Menu-test.js +++ b/test/spec/Menu-test.js @@ -647,6 +647,64 @@ define(function (require, exports, module) { }); + describe("Remove Menu Divider", function () { + + function menuDividerDOM(menuItemId) { + return testWindow.$("#" + menuItemId); + } + + it("should add then remove new menu divider to empty menu", function () { + runs(function () { + var menuId = "menu-custom-removeMenuDivider-1"; + var menu = Menus.addMenu("Custom", menuId); + + var menuDivider = menu.addMenuDivider(); + expect(menuDivider).not.toBeNull(); + expect(menuDivider).toBeDefined(); + + var $listItems = menuDividerDOM(menuDivider.id); + expect($listItems.length).toBe(1); + + menu.removeMenuDivider(menuDivider.id); + $listItems = menuDividerDOM(menuDivider.id); + expect($listItems.length).toBe(0); + }); + }); + + it("should gracefully handle someone trying to remove a menu divider without supplying the id", function () { + runs(function () { + var menuId = "menu-custom-removeMenuDivider-2"; + var menu = Menus.addMenu("Custom", menuId); + + menu.removeMenuDivider(); + expect(menu).toBeTruthy(); // Verify that we got this far... + }); + }); + + it("should gracefully handle someone trying to remove a menu divider with an invalid id", function () { + runs(function () { + var menuId = "menu-custom-removeMenuDivider-3"; + var menu = Menus.addMenu("Custom", menuId); + + menu.removeMenuDivider("foo"); + expect(menu).toBeTruthy(); // Verify that we got this far... + }); + }); + + it("should gracefully handle someone trying to remove a menu item that is not a divider", function () { + runs(function () { + var menuId = "menu-custom-removeMenuDivider-4"; + var menu = Menus.addMenu("Custom", menuId); + var menuItemId = "menu-test-removeMenuDivider1"; + var menuItem = menu.addMenuItem(menuItemId); + + menu.removeMenuDivider(menuItemId); + expect(menu).toBeTruthy(); // Verify that we got this far... + }); + }); + }); + + describe("Remove Menu", function () { function menuDOM(menuId) { @@ -675,10 +733,8 @@ define(function (require, exports, module) { }); }); - it("should gracefully handle someone trying to remove a menu without supply the id", function () { + it("should gracefully handle someone trying to remove a menu without supplying the id", function () { runs(function () { - var menuId = "Menu-test"; - Menus.removeMenu(); expect(Menus).toBeTruthy(); // Verify that we got this far... }); From 204203e555c811469de0fbd5a5ca4c9de1d6bf91 Mon Sep 17 00:00:00 2001 From: Lance Campbell Date: Mon, 30 Sep 2013 12:36:06 -0700 Subject: [PATCH 0038/1140] Remove all menu items before removing menu --- src/command/Menus.js | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/src/command/Menus.js b/src/command/Menus.js index d5cf316f09f..22f83bd8d66 100644 --- a/src/command/Menus.js +++ b/src/command/Menus.js @@ -35,7 +35,8 @@ define(function (require, exports, module) { StringUtils = require("utils/StringUtils"), CommandManager = require("command/CommandManager"), PopUpManager = require("widgets/PopUpManager"), - ViewUtils = require("utils/ViewUtils"); + ViewUtils = require("utils/ViewUtils"), + CollectionUtils = require("utils/CollectionUtils"); /** * Brackets Application Menu Constants @@ -928,6 +929,10 @@ define(function (require, exports, module) { * Extensions should use the following format: "author.myextension.mymenuname". */ function removeMenu(id) { + var menu, + commandID = "", + menuDividerID = ""; + if (!id) { console.error("removeMenu(): missing required parameter: id"); return; @@ -938,6 +943,21 @@ define(function (require, exports, module) { return; } + // Remove all of the menu items in the menu + menu = getMenu(id); + + CollectionUtils.forEach(menuItemMap, function (value, key) { + if (key.substring(0, id.length) === id) { + if (value.isDivider) { + menuDividerID = key.substring((id.length + 1), key.length); + menu.removeMenuDivider(menuDividerID); + } else { + commandID = value.getCommand(); + menu.removeMenuItem(commandID); + } + } + }); + if (_isHTMLMenu(id)) { $(_getHTMLMenu(id)).remove(); } else { From 6ef7cfd43358e8a46b792c54f07de1878e90153d Mon Sep 17 00:00:00 2001 From: Lance Campbell Date: Mon, 30 Sep 2013 14:38:49 -0700 Subject: [PATCH 0039/1140] Fix problem with removing dividers. Add remove menu (native) unit tests. --- src/command/Menus.js | 8 ++--- test/spec/Menu-test.js | 76 +++++++++++++++++++++++++++++++++++++++++- 2 files changed, 78 insertions(+), 6 deletions(-) diff --git a/src/command/Menus.js b/src/command/Menus.js index 22f83bd8d66..c986b685586 100644 --- a/src/command/Menus.js +++ b/src/command/Menus.js @@ -930,9 +930,8 @@ define(function (require, exports, module) { */ function removeMenu(id) { var menu, - commandID = "", - menuDividerID = ""; - + commandID = ""; + if (!id) { console.error("removeMenu(): missing required parameter: id"); return; @@ -949,8 +948,7 @@ define(function (require, exports, module) { CollectionUtils.forEach(menuItemMap, function (value, key) { if (key.substring(0, id.length) === id) { if (value.isDivider) { - menuDividerID = key.substring((id.length + 1), key.length); - menu.removeMenuDivider(menuDividerID); + menu.removeMenuDivider(key); } else { commandID = value.getCommand(); menu.removeMenuItem(commandID); diff --git a/test/spec/Menu-test.js b/test/spec/Menu-test.js index 7b74d3c7cd2..cc701ad0d42 100644 --- a/test/spec/Menu-test.js +++ b/test/spec/Menu-test.js @@ -66,6 +66,80 @@ define(function (require, exports, module) { SpecRunnerUtils.closeTestWindow(); }); + describe("Remove Menu", function () { + it("should add then remove new menu to menu bar with a menu id", function () { + runs(function () { + var menuId = "Menu-test"; + Menus.addMenu("Custom", menuId); + + var menu = Menus.getMenu(menuId); + expect(menu).toBeTruthy(); + + Menus.removeMenu(menuId); + menu = Menus.getMenu(menuId); + expect(menu).toBeUndefined(); + }); + }); + + it("should remove all menu items and dividers in the menu when removing the menu", function () { + runs(function () { + var menuId = "Menu-test"; + Menus.addMenu("Custom", menuId); + + var menu = Menus.getMenu(menuId); + expect(menu).toBeTruthy(); + + var commandId = "Remove-Menu-test.Item-1"; + CommandManager.register("Remove Menu Test Command", commandId, function () {}); + + var menuItem = menu.addMenuItem(commandId); + expect(menuItem).toBeTruthy(); + + var menuItemId = menuItem.id; + expect(menuItemId).toBeTruthy(); + + var menuDivider = menu.addMenuDivider(); + expect(menuDivider).toBeTruthy(); + + var menuDividerId = menuDivider.id; + expect(menuDividerId).toBeTruthy(); + + menuItem = Menus.getMenuItem(menuItemId); + expect(menuItem).toBeTruthy(); + + menuDivider = Menus.getMenuItem(menuDividerId); + expect(menuDivider).toBeTruthy(); + + Menus.removeMenu(menuId); + + menu = Menus.getMenu(menuId); + expect(menu).toBeUndefined(); + + menuItem = Menus.getMenuItem(menuItemId); + expect(menuItem).toBeUndefined(); + + menuDivider = Menus.getMenuItem(menuDividerId); + expect(menuDivider).toBeUndefined(); + }); + }); + + it("should gracefully handle someone trying to remove a menu that doesn't exist", function () { + runs(function () { + var menuId = "Menu-test"; + + Menus.removeMenu(menuId); + expect(Menus).toBeTruthy(); // Verify that we got this far... + }); + }); + + it("should gracefully handle someone trying to remove a menu without supplying the id", function () { + runs(function () { + Menus.removeMenu(); + expect(Menus).toBeTruthy(); // Verify that we got this far... + }); + }); + }); + describe("Context Menus", function () { it("register a context menu", function () { @@ -439,7 +513,7 @@ define(function (require, exports, module) { }); }); - it("should add menu items to beginnging and end of menu section", function () { + it("should add menu items to beginning and end of menu section", function () { // set up test menu and menu items CommandManager.register("Brackets Test Command Section 10", "Menu-test.command10", function () {}); CommandManager.register("Brackets Test Command Section 11", "Menu-test.command11", function () {}); From 8f1172959f80846afa6beec693c1d6e12af7adbc Mon Sep 17 00:00:00 2001 From: Oskar Karlsson Date: Tue, 1 Oct 2013 13:21:53 +0200 Subject: [PATCH 0040/1140] #5356, added HTML dialog-tag --- src/extensions/default/HTMLCodeHints/HtmlTags.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/extensions/default/HTMLCodeHints/HtmlTags.json b/src/extensions/default/HTMLCodeHints/HtmlTags.json index 0a84542784a..0ffa7997fb8 100644 --- a/src/extensions/default/HTMLCodeHints/HtmlTags.json +++ b/src/extensions/default/HTMLCodeHints/HtmlTags.json @@ -29,6 +29,7 @@ "del": { "attributes": ["cite", "datetime"] }, "details": { "attributes": ["open"] }, "dfn": { "attributes": [] }, + "dialog": { "attributes": ["open"] }, "div": { "attributes": [] }, "dl": { "attributes": [] }, "dt": { "attributes": [] }, From fabaa6bfb90f3d18a1274635e8cd7b32c5b7857a Mon Sep 17 00:00:00 2001 From: Oskar Karlsson Date: Tue, 1 Oct 2013 14:36:36 +0200 Subject: [PATCH 0041/1140] Gave searchPanel a min height --- src/search/FindInFiles.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/search/FindInFiles.js b/src/search/FindInFiles.js index d563543b07d..2155a9a6cf9 100644 --- a/src/search/FindInFiles.js +++ b/src/search/FindInFiles.js @@ -848,7 +848,7 @@ define(function (require, exports, module) { // Initialize items dependent on HTML DOM AppInit.htmlReady(function () { var panelHtml = Mustache.render(searchPanelTemplate, Strings); - searchResultsPanel = PanelManager.createBottomPanel("find-in-files.results", $(panelHtml)); + searchResultsPanel = PanelManager.createBottomPanel("find-in-files.results", $(panelHtml), 100); $searchResults = $("#search-results"); $searchSummary = $searchResults.find(".title"); From 6723f6bad37314bb98622465ab07cd745aa12551 Mon Sep 17 00:00:00 2001 From: Marcel Gerber Date: Tue, 1 Oct 2013 19:02:32 +0200 Subject: [PATCH 0042/1140] My try to improve the replace() function --- src/search/FindReplace.js | 94 ++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 56 deletions(-) diff --git a/src/search/FindReplace.js b/src/search/FindReplace.js index f605643ec24..ac536552984 100644 --- a/src/search/FindReplace.js +++ b/src/search/FindReplace.js @@ -508,7 +508,7 @@ define(function (require, exports, module) { ' '; - function replace(editor, all) { + function replace(editor) { var cm = editor._codeMirror; createModalBar(replaceQueryDialog, true); $(modalBar).on("commit", function (e, query) { @@ -524,62 +524,44 @@ define(function (require, exports, module) { createModalBar(replacementQueryDialog, true, false); $(modalBar).on("commit", function (e, text) { text = text || ""; - var match, - fnMatch = function (w, i) { return match[i]; }; - if (all) { - cm.compoundChange(function () { - cm.operation(function () { - var cursor = getSearchCursor(cm, query); - while (cursor.findNext()) { - if (typeof query !== "string") { - match = cm.getRange(cursor.from(), cursor.to()).match(query); - cursor.replace(text.replace(/\$(\d)/, fnMatch)); - } else { - cursor.replace(text); - } - } - }); - }); - } else { - clearSearch(cm); - var cursor = getSearchCursor(cm, query, cm.getCursor(true)); - var advance = function () { - var start = cursor.from(), - match = cursor.findNext(); - if (!match) { - cursor = getSearchCursor(cm, query); - match = cursor.findNext(); - if (!match || - (start && cursor.from().line === start.line && cursor.from().ch === start.ch)) { - // No more matches, so destroy modalBar - modalBar = null; - return; - } + clearSearch(cm); + var cursor = getSearchCursor(cm, query, cm.getCursor(true)); + var advance = function () { + var start = cursor.from(), + match = cursor.findNext(); + if (!match) { + cursor = getSearchCursor(cm, query); + match = cursor.findNext(); + if (!match || + (start && cursor.from().line === start.line && cursor.from().ch === start.ch)) { + // No more matches, so destroy modalBar + modalBar = null; + return; } - editor.setSelection(cursor.from(), cursor.to(), true, Editor.BOUNDARY_CHECK_NORMAL); - createModalBar(doReplaceConfirm, true, false); - modalBar.getRoot().on("click", function (e) { - var animate = (e.target.id !== "replace-yes" && e.target.id !== "replace-no"); - modalBar.close(true, animate); - if (e.target.id === "replace-yes") { - doReplace(match); - } else if (e.target.id === "replace-no") { - advance(); - } else if (e.target.id === "replace-all") { - _showReplaceAllPanel(editor, query, text, fnMatch); - } else if (e.target.id === "replace-stop") { - // Destroy modalBar on stop - modalBar = null; - } - }); - }; - var doReplace = function (match) { - cursor.replace(typeof query === "string" ? text : - text.replace(/\$(\d)/, function (w, i) { return match[i]; })); - advance(); - }; + } + editor.setSelection(cursor.from(), cursor.to(), true, Editor.BOUNDARY_CHECK_NORMAL); + createModalBar(doReplaceConfirm, true, false); + modalBar.getRoot().on("click", function (e) { + var animate = (e.target.id !== "replace-yes" && e.target.id !== "replace-no"); + modalBar.close(true, animate); + if (e.target.id === "replace-yes") { + doReplace(match); + } else if (e.target.id === "replace-no") { + advance(); + } else if (e.target.id === "replace-all") { + _showReplaceAllPanel(editor, query, text, function (w, i) { return match[i]; }); + } else if (e.target.id === "replace-stop") { + // Destroy modalBar on stop + modalBar = null; + } + }); + }; + var doReplace = function (match) { + cursor.replace(typeof query === "string" ? text : + text.replace(/\$(\d)/, function (w, i) { return match[i]; })); advance(); - } + }; + advance(); }); }); @@ -648,4 +630,4 @@ define(function (require, exports, module) { CommandManager.register(Strings.CMD_FIND_NEXT, Commands.EDIT_FIND_NEXT, _findNext); CommandManager.register(Strings.CMD_REPLACE, Commands.EDIT_REPLACE, _replace); CommandManager.register(Strings.CMD_FIND_PREVIOUS, Commands.EDIT_FIND_PREVIOUS, _findPrevious); -}); +}); \ No newline at end of file From d9e5cc9e7bb352e7dc38fe93c607ba54b2abb288 Mon Sep 17 00:00:00 2001 From: Narciso Jaramillo Date: Mon, 30 Sep 2013 19:16:23 -0700 Subject: [PATCH 0043/1140] Make MultiRangeInlineEditor test that relies on editor interaction a true integration test and wait for async functions to complete --- src/brackets.js | 1 + test/spec/MultiRangeInlineEditor-test.js | 479 +++++++++++++---------- 2 files changed, 276 insertions(+), 204 deletions(-) diff --git a/src/brackets.js b/src/brackets.js index 0a3e2ab5514..4de19159ca9 100644 --- a/src/brackets.js +++ b/src/brackets.js @@ -159,6 +159,7 @@ define(function (require, exports, module) { InstallExtensionDialog : require("extensibility/InstallExtensionDialog"), RemoteAgent : require("LiveDevelopment/Agents/RemoteAgent"), HTMLInstrumentation : require("language/HTMLInstrumentation"), + MultiRangeInlineEditor : require("editor/MultiRangeInlineEditor").MultiRangeInlineEditor, doneLoading : false }; diff --git a/test/spec/MultiRangeInlineEditor-test.js b/test/spec/MultiRangeInlineEditor-test.js index 8828e474b24..9fa6185a56d 100644 --- a/test/spec/MultiRangeInlineEditor-test.js +++ b/test/spec/MultiRangeInlineEditor-test.js @@ -23,7 +23,7 @@ /*jslint vars: true, plusplus: true, devel: true, browser: true, nomen: true, indent: 4, maxerr: 50 */ -/*global define: false, describe: false, it: false, xit: false, expect: false, beforeEach: false, afterEach: false, waitsFor: false, runs: false, $: false, HTMLElement: false */ +/*global define: false, describe: false, it: false, xit: false, expect: false, beforeEach: false, afterEach: false, waitsFor: false, runs: false, $: false, HTMLElement: false, beforeFirst: false, afterLast: false, waitsForDone: false */ define(function (require, exports, module) { 'use strict'; @@ -33,7 +33,8 @@ define(function (require, exports, module) { InlineWidget = require("editor/InlineWidget").InlineWidget, Editor = require("editor/Editor").Editor, EditorManager = require("editor/EditorManager"), - SpecRunnerUtils = require("spec/SpecRunnerUtils"); + SpecRunnerUtils = require("spec/SpecRunnerUtils"), + Commands = require("command/Commands"); describe("MultiRangeInlineEditor", function () { @@ -42,223 +43,293 @@ define(function (require, exports, module) { hostEditor, doc; - beforeEach(function () { - // create dummy Document and Editor - var mocks = SpecRunnerUtils.createMockEditor("hostEditor", ""); - doc = mocks.doc; - hostEditor = mocks.editor; - }); - - afterEach(function () { - SpecRunnerUtils.destroyMockEditor(doc); - hostEditor = null; - }); - - it("should initialize to a default state", function () { - inlineEditor = new MultiRangeInlineEditor([]); - - expect(inlineEditor instanceof InlineTextEditor).toBe(true); - expect(inlineEditor instanceof InlineWidget).toBe(true); - expect(inlineEditor.editors.length).toBe(0); - expect(inlineEditor.htmlContent instanceof HTMLElement).toBe(true); - expect(inlineEditor.height).toBe(0); - expect(inlineEditor.id).toBeNull(); - expect(inlineEditor.hostEditor).toBeNull(); - }); - - it("should load a single rule and initialize htmlContent and editor", function () { - var inlineDoc = SpecRunnerUtils.createMockDocument("inlineDoc\nstartLine\nendLine\n"); - var mockRange = { - document: inlineDoc, - lineStart: 1, - lineEnd: 2 - }; - - inlineEditor = new MultiRangeInlineEditor([mockRange]); - inlineEditor.load(hostEditor); - - expect(inlineEditor.editors.length).toBe(1); - expect(inlineEditor.editors[0].document).toBe(inlineDoc); - }); - - it("should contain a rule list widget displaying info for each rule", function () { - var inlineDoc = SpecRunnerUtils.createMockDocument("div{}\n.foo{}\n"), - inlineDocName = inlineDoc.file.name; - - var mockRanges = [ - { - document: inlineDoc, - name: "div", - lineStart: 0, - lineEnd: 0 - }, - { - document: inlineDoc, - name: ".foo", - lineStart: 1, - lineEnd: 1 - } - ]; + describe("unit", function () { - inlineEditor = new MultiRangeInlineEditor(mockRanges); - inlineEditor.load(hostEditor); + beforeEach(function () { + // create dummy Document and Editor + var mocks = SpecRunnerUtils.createMockEditor("hostEditor", ""); + doc = mocks.doc; + hostEditor = mocks.editor; + }); - var $ruleListItems = $(inlineEditor.htmlContent).find("li"); - expect($($ruleListItems.get(0)).text()).toBe("div — " + inlineDocName + " : 1"); - expect($($ruleListItems.get(1)).text()).toBe(".foo — " + inlineDocName + " : 2"); - }); - - it("should change selection to the next rule", function () { - var inlineDoc = SpecRunnerUtils.createMockDocument("div{}\n.foo{}\n"); - - var mockRanges = [ - { - document: inlineDoc, - name: "div", - lineStart: 0, - lineEnd: 0 - }, - { - document: inlineDoc, - name: ".foo", - lineStart: 1, - lineEnd: 1 - } - ]; - - inlineEditor = new MultiRangeInlineEditor(mockRanges); - inlineEditor.load(hostEditor); - inlineEditor._selectNextRange(); - - var $selection = $(inlineEditor.htmlContent).find(".selection"); - var $ruleListItems = $(inlineEditor.htmlContent).find("li"); - expect($selection.position().top).toBe($($ruleListItems.get(0)).position().top); - }); - - it("should change selection to the previous rule", function () { - var inlineDoc = SpecRunnerUtils.createMockDocument("div{}\n.foo{}\n"); - - var mockRanges = [ - { - document: inlineDoc, - name: "div", - lineStart: 0, - lineEnd: 0 - }, - { + afterEach(function () { + SpecRunnerUtils.destroyMockEditor(doc); + hostEditor = null; + }); + + it("should initialize to a default state", function () { + inlineEditor = new MultiRangeInlineEditor([]); + + expect(inlineEditor instanceof InlineTextEditor).toBe(true); + expect(inlineEditor instanceof InlineWidget).toBe(true); + expect(inlineEditor.editors.length).toBe(0); + expect(inlineEditor.htmlContent instanceof HTMLElement).toBe(true); + expect(inlineEditor.height).toBe(0); + expect(inlineEditor.id).toBeNull(); + expect(inlineEditor.hostEditor).toBeNull(); + }); + + it("should load a single rule and initialize htmlContent and editor", function () { + var inlineDoc = SpecRunnerUtils.createMockDocument("inlineDoc\nstartLine\nendLine\n"); + var mockRange = { document: inlineDoc, - name: ".foo", lineStart: 1, - lineEnd: 1 - } - ]; - - inlineEditor = new MultiRangeInlineEditor(mockRanges); - inlineEditor.load(hostEditor); - - // select .foo - inlineEditor.setSelectedIndex(1); - - // verify selection moves - var $selection = $(inlineEditor.htmlContent).find(".selection"); - var $ruleListItems = $(inlineEditor.htmlContent).find("li"); - expect($selection.position().top).toBe($($ruleListItems.get(1)).position().top); + lineEnd: 2 + }; + + inlineEditor = new MultiRangeInlineEditor([mockRange]); + inlineEditor.load(hostEditor); + + expect(inlineEditor.editors.length).toBe(1); + expect(inlineEditor.editors[0].document).toBe(inlineDoc); + }); + + it("should contain a rule list widget displaying info for each rule", function () { + var inlineDoc = SpecRunnerUtils.createMockDocument("div{}\n.foo{}\n"), + inlineDocName = inlineDoc.file.name; + + var mockRanges = [ + { + document: inlineDoc, + name: "div", + lineStart: 0, + lineEnd: 0 + }, + { + document: inlineDoc, + name: ".foo", + lineStart: 1, + lineEnd: 1 + } + ]; + + inlineEditor = new MultiRangeInlineEditor(mockRanges); + inlineEditor.load(hostEditor); + + var $ruleListItems = $(inlineEditor.htmlContent).find("li"); + expect($($ruleListItems.get(0)).text()).toBe("div — " + inlineDocName + " : 1"); + expect($($ruleListItems.get(1)).text()).toBe(".foo — " + inlineDocName + " : 2"); + }); + + it("should change selection to the next rule", function () { + var inlineDoc = SpecRunnerUtils.createMockDocument("div{}\n.foo{}\n"); + + var mockRanges = [ + { + document: inlineDoc, + name: "div", + lineStart: 0, + lineEnd: 0 + }, + { + document: inlineDoc, + name: ".foo", + lineStart: 1, + lineEnd: 1 + } + ]; + + inlineEditor = new MultiRangeInlineEditor(mockRanges); + inlineEditor.load(hostEditor); + inlineEditor._selectNextRange(); + + var $selection = $(inlineEditor.htmlContent).find(".selection"); + var $ruleListItems = $(inlineEditor.htmlContent).find("li"); + expect($selection.position().top).toBe($($ruleListItems.get(0)).position().top); + }); + + it("should change selection to the previous rule", function () { + var inlineDoc = SpecRunnerUtils.createMockDocument("div{}\n.foo{}\n"); + + var mockRanges = [ + { + document: inlineDoc, + name: "div", + lineStart: 0, + lineEnd: 0 + }, + { + document: inlineDoc, + name: ".foo", + lineStart: 1, + lineEnd: 1 + } + ]; + + inlineEditor = new MultiRangeInlineEditor(mockRanges); + inlineEditor.load(hostEditor); + + // select .foo + inlineEditor.setSelectedIndex(1); + + // verify selection moves + var $selection = $(inlineEditor.htmlContent).find(".selection"); + var $ruleListItems = $(inlineEditor.htmlContent).find("li"); + expect($selection.position().top).toBe($($ruleListItems.get(1)).position().top); + + // select div + inlineEditor._selectPreviousRange(); + + // verify selection moves again + expect($selection.position().top).toBe($($ruleListItems.get(0)).position().top); + }); - // select div - inlineEditor._selectPreviousRange(); - // verify selection moves again - expect($selection.position().top).toBe($($ruleListItems.get(0)).position().top); + function expectResultItemToEqual(resultItem, mockRange) { + expect(resultItem.name).toBe(mockRange.name); + expect(resultItem.textRange.startLine).toBe(mockRange.lineStart); + expect(resultItem.textRange.endLine).toBe(mockRange.lineEnd); + } + + it("should retrieve all rules", function () { + var inlineDoc = SpecRunnerUtils.createMockDocument("div{}\n.foo{}\n"); + var mockRanges = [ + { + document: inlineDoc, + name: "div", + lineStart: 0, + lineEnd: 0 + }, + { + document: inlineDoc, + name: ".foo", + lineStart: 1, + lineEnd: 1 + } + ]; + + inlineEditor = new MultiRangeInlineEditor(mockRanges); + + expect(inlineEditor._getRanges().length).toEqual(mockRanges.length); + expectResultItemToEqual(inlineEditor._getRanges()[0], mockRanges[0]); + expectResultItemToEqual(inlineEditor._getRanges()[1], mockRanges[1]); + }); + + it("should retreive the selected rule", function () { + var inlineDoc = SpecRunnerUtils.createMockDocument("div{}\n.foo{}\n"); + + var mockRanges = [ + { + document: inlineDoc, + name: "div", + lineStart: 0, + lineEnd: 0 + }, + { + document: inlineDoc, + name: ".foo", + lineStart: 1, + lineEnd: 1 + } + ]; + + inlineEditor = new MultiRangeInlineEditor(mockRanges); + inlineEditor.load(hostEditor); + + // "div" rule should be selected by default + expectResultItemToEqual(inlineEditor._getSelectedRange(), mockRanges[0]); + + // select ".foo" rule - should be next + inlineEditor._selectNextRange(); + expectResultItemToEqual(inlineEditor._getSelectedRange(), mockRanges[1]); + }); }); - - function expectResultItemToEqual(resultItem, mockRange) { - expect(resultItem.name).toBe(mockRange.name); - expect(resultItem.textRange.startLine).toBe(mockRange.lineStart); - expect(resultItem.textRange.endLine).toBe(mockRange.lineEnd); - } - - it("should retreive all rules", function () { - var inlineDoc = SpecRunnerUtils.createMockDocument("div{}\n.foo{}\n"); - var mockRanges = [ - { - document: inlineDoc, - name: "div", - lineStart: 0, - lineEnd: 0 - }, - { - document: inlineDoc, - name: ".foo", - lineStart: 1, - lineEnd: 1 - } - ]; + describe("integration", function () { - inlineEditor = new MultiRangeInlineEditor(mockRanges); + this.category = "integration"; - expect(inlineEditor._getRanges().length).toEqual(mockRanges.length); - expectResultItemToEqual(inlineEditor._getRanges()[0], mockRanges[0]); - expectResultItemToEqual(inlineEditor._getRanges()[1], mockRanges[1]); - }); + var testWindow, + TWCommandManager, + TWEditorManager, + TWMultiRangeInlineEditor; - it("should retreive the selected rule", function () { - var inlineDoc = SpecRunnerUtils.createMockDocument("div{}\n.foo{}\n"); - - var mockRanges = [ - { - document: inlineDoc, - name: "div", - lineStart: 0, - lineEnd: 0 - }, - { - document: inlineDoc, - name: ".foo", - lineStart: 1, - lineEnd: 1 - } - ]; - - inlineEditor = new MultiRangeInlineEditor(mockRanges); - inlineEditor.load(hostEditor); + beforeFirst(function () { + SpecRunnerUtils.createTempDirectory(); + + // Create a new window that will be shared by ALL tests in this spec. + SpecRunnerUtils.createTestWindowAndRun(this, function (w) { + testWindow = w; + + // Load module instances from brackets.test + TWCommandManager = testWindow.brackets.test.CommandManager; + TWEditorManager = testWindow.brackets.test.EditorManager; + TWMultiRangeInlineEditor = testWindow.brackets.test.MultiRangeInlineEditor; + + SpecRunnerUtils.loadProjectInTestWindow(SpecRunnerUtils.getTempDirectory()); + }); + }); - // "div" rule should be selected by default - expectResultItemToEqual(inlineEditor._getSelectedRange(), mockRanges[0]); + afterLast(function () { + testWindow = null; + TWCommandManager = null; + TWEditorManager = null; + TWMultiRangeInlineEditor = null; + SpecRunnerUtils.closeTestWindow(); + + SpecRunnerUtils.removeTempDirectory(); + }); + + beforeEach(function () { + runs(function () { + waitsForDone(TWCommandManager.execute(Commands.FILE_NEW_UNTITLED)); + }); + + runs(function () { + hostEditor = TWEditorManager.getCurrentFullEditor(); + }); + }); - // select ".foo" rule - should be next - inlineEditor._selectNextRange(); - expectResultItemToEqual(inlineEditor._getSelectedRange(), mockRanges[1]); - }); + afterEach(function () { + runs(function () { + waitsForDone(TWCommandManager.execute(Commands.FILE_CLOSE, { _forceClose: true })); + }); + + runs(function () { + hostEditor = null; + }); + }); - it("should close and return to the host editor", function () { - var inlineDoc = SpecRunnerUtils.createMockDocument("div{}\n.foo{}\n"); - - var mockRanges = [ - { - document: inlineDoc, - name: "div", - lineStart: 0, - lineEnd: 0 - } - ]; - - inlineEditor = new MultiRangeInlineEditor(mockRanges); - inlineEditor.load(hostEditor); - - // add widget directly, bypass _openInlineWidget - hostEditor.addInlineWidget({line: 0, ch: 0}, inlineEditor); - - // verify it was added - expect(hostEditor.hasFocus()).toBe(false); - expect(hostEditor.getInlineWidgets().length).toBe(1); - - // close the inline editor directly, should call EditorManager and removeInlineWidget - inlineEditor.close(); + // This needs to open in a Brackets test window because it's actually relying on + // the real Editor functions for adding an inline widget, which complete asynchronously + // after the animation is finished. That animation doesn't actually occur in the + // Jasmine window. + it("should close and return to the host editor", function () { + runs(function () { + var inlineDoc = SpecRunnerUtils.createMockDocument("div{}\n.foo{}\n"); + + var mockRanges = [ + { + document: inlineDoc, + name: "div", + lineStart: 0, + lineEnd: 0 + } + ]; + + inlineEditor = new TWMultiRangeInlineEditor(mockRanges); + inlineEditor.load(hostEditor); + + // add widget directly, bypass _openInlineWidget + waitsForDone(hostEditor.addInlineWidget({line: 0, ch: 0}, inlineEditor)); + }); + + runs(function () { + // verify it was added + expect(hostEditor.hasFocus()).toBe(false); + expect(hostEditor.getInlineWidgets().length).toBe(1); + + // close the inline editor directly, should call EditorManager and removeInlineWidget + waitsForDone(inlineEditor.close()); + }); + + runs(function () { + // verify no editors + expect(hostEditor.getInlineWidgets().length).toBe(0); + expect(hostEditor.hasFocus()).toBe(true); + }); + }); - // verify no editors - expect(hostEditor.getInlineWidgets().length).toBe(0); - expect(hostEditor.hasFocus()).toBe(true); }); }); From 1660fd58d5f0b77c82cc53ca390fa72d5d31157b Mon Sep 17 00:00:00 2001 From: Peter Flynn Date: Tue, 1 Oct 2013 13:44:58 -0700 Subject: [PATCH 0044/1140] Remove Win-specific hacks from #4568 now that desired font weight is heavier across the board. --- src/styles/brackets_patterns_override.less | 21 ++------------------- 1 file changed, 2 insertions(+), 19 deletions(-) diff --git a/src/styles/brackets_patterns_override.less b/src/styles/brackets_patterns_override.less index 7f179c8df6e..7ba6ab5a0ef 100644 --- a/src/styles/brackets_patterns_override.less +++ b/src/styles/brackets_patterns_override.less @@ -31,7 +31,7 @@ * */ -/* Variable OVerride */ +/* Variable Overrides */ @tooltipBackground: #fff; @tooltipArrowColor: @tooltipBackground; @@ -454,16 +454,6 @@ a:focus { } } -// Work around #4568: SourceSans is much fainter on Win than Mac, especially small text with "light" font-weight. -// We fix some of the most egregious cases by using a heavier font-weight only on Win (and because that's usually -// overkill, we also make the color paler to dial it back down a bit). -.less-faint-on-win() { - body.platform-win & { - font-weight: normal; - color: #2e2e2e; - } -} - .modal-body ul { /* Bootstrap's type.less defines a heavy margin-bottom on ul/ol that we don't want in dialogs since they have heavy padding instead. */ @@ -494,7 +484,6 @@ a:focus { line-height: 20px; margin-bottom: 20px; font-weight: normal; - .less-faint-on-win(); } .dialog-message li { @@ -524,9 +513,6 @@ a:focus { word-wrap: break-word; font-weight: @font-weight-semibold; - body.platform-win & { // maintain contrast next to ".less-faint-on-win()" workaround - font-weight: @font-weight-semibold; - } } /* Any Dialog text in this style is automatically turned into a link that opens in the browser. Use href for the link's target. */ @@ -724,15 +710,13 @@ a[href^="http"] { display: block; font-size: 15px; font-weight: normal; - .less-faint-on-win(); .user-select(text); cursor: text; } .ext-desc { + width: auto; color: @tc-text; font-weight: normal; - .less-faint-on-win(); - width: auto; .user-select(text); cursor: text; } @@ -811,7 +795,6 @@ a[href^="http"] { .dialog-message { font-size: 14px; line-height: 17px; - .less-faint-on-win(); // Enable text selection cursor: auto; From eb84a93fa1c34f90c198fab7ac4ab8d3143f84c0 Mon Sep 17 00:00:00 2001 From: Randy Edmunds Date: Tue, 1 Oct 2013 16:58:43 -0700 Subject: [PATCH 0045/1140] use precise=false for performance when parsing unchanging code --- src/language/HTMLUtils.js | 2 +- src/utils/TokenUtils.js | 20 ++++++++++++++++---- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/src/language/HTMLUtils.js b/src/language/HTMLUtils.js index e80768de554..405e7b48790 100644 --- a/src/language/HTMLUtils.js +++ b/src/language/HTMLUtils.js @@ -482,7 +482,7 @@ define(function (require, exports, module) { outerMode = editor._codeMirror.getMode(), tokenModeName; - while (TokenUtils.moveNextToken(ctx)) { + while (TokenUtils.moveNextToken(ctx, false)) { tokenModeName = CodeMirror.innerMode(outerMode, ctx.token.state).mode.name; if (inBlock) { if (!currentBlock.end) { diff --git a/src/utils/TokenUtils.js b/src/utils/TokenUtils.js index 625434aaefe..047e552dd5e 100644 --- a/src/utils/TokenUtils.js +++ b/src/utils/TokenUtils.js @@ -51,9 +51,15 @@ define(function (require, exports, module) { /** * Moves the given context backwards by one token. * @param {editor:{CodeMirror}, pos:{ch:{string}, line:{number}}, token:{object}} ctx + * @param {boolean=} precise If code is being edited, use true (default) for accuracy. + * If parsing unchanging code, use false to use cache for performance. * @return {boolean} whether the context changed */ - function movePrevToken(ctx) { + function movePrevToken(ctx, precise) { + if (precise === undefined) { + precise = true; + } + if (ctx.pos.ch <= 0 || ctx.token.start <= 0) { //move up a line if (ctx.pos.line <= 0) { @@ -64,17 +70,23 @@ define(function (require, exports, module) { } else { ctx.pos.ch = ctx.token.start; } - ctx.token = ctx.editor.getTokenAt(ctx.pos, true); + ctx.token = ctx.editor.getTokenAt(ctx.pos, precise); return true; } /** * Moves the given context forward by one token. * @param {editor:{CodeMirror}, pos:{ch:{string}, line:{number}}, token:{object}} ctx + * @param {boolean=} precise If code is being edited, use true (default) for accuracy. + * If parsing unchanging code, use false to use cache for performance. * @return {boolean} whether the context changed */ - function moveNextToken(ctx) { + function moveNextToken(ctx, precise) { var eol = ctx.editor.getLine(ctx.pos.line).length; + if (precise === undefined) { + precise = true; + } + if (ctx.pos.ch >= eol || ctx.token.end >= eol) { //move down a line if (ctx.pos.line >= ctx.editor.lineCount() - 1) { @@ -85,7 +97,7 @@ define(function (require, exports, module) { } else { ctx.pos.ch = ctx.token.end + 1; } - ctx.token = ctx.editor.getTokenAt(ctx.pos, true); + ctx.token = ctx.editor.getTokenAt(ctx.pos, precise); return true; } From 825a4a2d24281117771c9bf5ff754214ec6190df Mon Sep 17 00:00:00 2001 From: Narciso Jaramillo Date: Tue, 1 Oct 2013 17:46:23 -0700 Subject: [PATCH 0046/1140] Re-add check for ignored folders when validating a package --- src/extensibility/node/package-validator.js | 14 +++++++++----- src/extensibility/node/spec/Validation.spec.js | 11 ++++++++++- test/spec/extension-test-files/has-macosx.zip | Bin 0 -> 9567 bytes 3 files changed, 19 insertions(+), 6 deletions(-) create mode 100644 test/spec/extension-test-files/has-macosx.zip diff --git a/src/extensibility/node/package-validator.js b/src/extensibility/node/package-validator.js index b50db228a83..a18a6495a87 100644 --- a/src/extensibility/node/package-validator.js +++ b/src/extensibility/node/package-validator.js @@ -54,12 +54,10 @@ var Errors = { }; /* - * Directories to ignore when computing the common prefix among the entries of - * a zip file. + * Directories to ignore when determining whether the contents of an extension are + * in a subfolder. */ -var ignoredPrefixes = { - "__MACOSX": true -}; +var ignoredFolders = [ "__MACOSX" ]; /** * Returns true if the name presented is acceptable as a package name. This enforces the @@ -156,6 +154,12 @@ function containsWords(wordlist, str) { */ function findCommonPrefix(extractDir, callback) { fs.readdir(extractDir, function (err, files) { + ignoredFolders.forEach(function (folder) { + var index = files.indexOf(folder); + if (index !== -1) { + files.splice(index, 1); + } + }); if (err) { callback(err); } else if (files.length === 1) { diff --git a/src/extensibility/node/spec/Validation.spec.js b/src/extensibility/node/spec/Validation.spec.js index ccaf1371803..81cd35f7612 100644 --- a/src/extensibility/node/spec/Validation.spec.js +++ b/src/extensibility/node/spec/Validation.spec.js @@ -54,7 +54,8 @@ var basicValidExtension = path.join(testFilesDirectory, "basic-valid-extensio badname = path.join(testFilesDirectory, "badname.zip"), mainInDirectory = path.join(testFilesDirectory, "main-in-directory.zip"), invalidVersion = path.join(testFilesDirectory, "invalid-version.zip"), - invalidBracketsVersion = path.join(testFilesDirectory, "invalid-brackets-version.zip"); + invalidBracketsVersion = path.join(testFilesDirectory, "invalid-brackets-version.zip"), + ignoredFolder = path.join(testFilesDirectory, "has-macosx.zip"); describe("Package Validation", function () { @@ -291,4 +292,12 @@ describe("Package Validation", function () { expect(validateName("..")).toEqual(false); expect(validateName(".")).toEqual(false); }); + + it("should ignore the __MACOSX folder when looking for a single subfolder", function (done) { + packageValidator.validate(ignoredFolder, {}, function (err, result) { + expect(err).toBeNull(); + expect(result.errors.length).toEqual(0); + done(); + }); + }); }); \ No newline at end of file diff --git a/test/spec/extension-test-files/has-macosx.zip b/test/spec/extension-test-files/has-macosx.zip new file mode 100644 index 0000000000000000000000000000000000000000..6cb339bbeca38ec357b28e08a6ab3a72e816ef4a GIT binary patch literal 9567 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 H@4x;B44wtR literal 0 HcmV?d00001 From ac4c951cff07d6e9d019b43ebf6464b890ae664f Mon Sep 17 00:00:00 2001 From: wALF Utility Date: Tue, 1 Oct 2013 21:11:59 -0700 Subject: [PATCH 0047/1140] Updated by ALF automation. --- src/nls/fr/strings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nls/fr/strings.js b/src/nls/fr/strings.js index 9c64cd0a2b8..3ccbb063570 100644 --- a/src/nls/fr/strings.js +++ b/src/nls/fr/strings.js @@ -341,7 +341,7 @@ define({ "INSTALL_EXTENSION_LABEL": "URL de l’extension ", "INSTALL_EXTENSION_HINT": "URL du fichier zip de l’extension ou du référentiel GitHub", "INSTALLING_FROM": "Installation de l’extension depuis·{0}\u2026", - "INSTALL_SUCCEEDED": "Installation réussie.", + "INSTALL_SUCCEEDED": "Installation réussie !", "INSTALL_FAILED": "Echec de l’installation.", "CANCELING_INSTALL": "Annulation en cours\u2026", "CANCELING_HUNG": "L’annulation de l’installation prend beaucoup de temps. Il est possible qu’une erreur interne se soit produite.", From bd4018d55cd3c0efcf42c117d623243997bed696 Mon Sep 17 00:00:00 2001 From: sathyamoorthi Date: Wed, 2 Oct 2013 17:03:48 +0530 Subject: [PATCH 0048/1140] Integration test failures fixed --- src/command/Commands.js | 1 + src/document/DocumentCommandHandlers.js | 26 ++++++---- src/document/DocumentManager.js | 59 +++++++++++++++------- src/extensions/default/CloseOthers/main.js | 4 +- src/nls/root/strings.js | 1 + 5 files changed, 59 insertions(+), 32 deletions(-) diff --git a/src/command/Commands.js b/src/command/Commands.js index 85509a9e97c..89061d93e01 100644 --- a/src/command/Commands.js +++ b/src/command/Commands.js @@ -43,6 +43,7 @@ define(function (require, exports, module) { exports.FILE_SAVE_AS = "file.saveAs"; // DocumentCommandHandlers.js handleFileSaveAs() exports.FILE_CLOSE = "file.close"; // DocumentCommandHandlers.js handleFileClose() exports.FILE_CLOSE_ALL = "file.close_all"; // DocumentCommandHandlers.js handleFileCloseAll() + exports.FILE_CLOSE_LIST = "file.close_list"; // DocumentCommandHandlers.js handleFileCloseList() exports.FILE_ADD_TO_WORKING_SET = "file.addToWorkingSet"; // DocumentCommandHandlers.js handleFileAddToWorkingSet() exports.FILE_LIVE_FILE_PREVIEW = "file.liveFilePreview"; // LiveDevelopment/main.js _handleGoLiveCommand() exports.FILE_LIVE_HIGHLIGHT = "file.previewHighlight"; // LiveDevelopment/main.js _handlePreviewHighlightCommand() diff --git a/src/document/DocumentCommandHandlers.js b/src/document/DocumentCommandHandlers.js index aef34c7a068..9330f3b856f 100644 --- a/src/document/DocumentCommandHandlers.js +++ b/src/document/DocumentCommandHandlers.js @@ -730,11 +730,16 @@ define(function (require, exports, module) { var doc = DocumentManager.getOpenDocumentForPath(file.fullPath); if (doc) { var savePromise = handleFileSave({doc: doc}); - savePromise.fail(function (error) { - if (error === USER_CANCELED) { - userCanceled = true; - } - }); + savePromise + .done(function (newFile) { + file.fullPath = newFile.fullPath; + file.name = newFile.name; + }) + .fail(function (error) { + if (error === USER_CANCELED) { + userCanceled = true; + } + }); return savePromise; } else { // working set entry that was never actually opened - ignore @@ -913,7 +918,7 @@ define(function (require, exports, module) { return promise; } - function _doCloseDocumentList(list, promptOnly) { + function _doCloseDocumentList(list, promptOnly, clearCurrentDoc) { var result = new $.Deferred(), unsavedDocs = []; @@ -997,7 +1002,7 @@ define(function (require, exports, module) { // guarantees that handlers run in the order they are added. result.done(function () { if (!promptOnly) { - DocumentManager.removeFromWorkingSet(list); + DocumentManager.removeListFromWorkingSet(list, (clearCurrentDoc || true)); } }); @@ -1016,8 +1021,8 @@ define(function (require, exports, module) { return _doCloseDocumentList(DocumentManager.getWorkingSet(), (commandData && commandData.promptOnly)); } - function handleFileCloseList(documentList) { - return _doCloseDocumentList(documentList); + function handleFileCloseList(commandData) { + return _doCloseDocumentList((commandData && commandData.documentList), false); } /** @@ -1226,8 +1231,6 @@ define(function (require, exports, module) { // Exported for unit testing only exports._parseDecoratedPath = _parseDecoratedPath; - - exports.handleFileCloseList = handleFileCloseList; // Register global commands CommandManager.register(Strings.CMD_FILE_OPEN, Commands.FILE_OPEN, handleFileOpen); @@ -1246,6 +1249,7 @@ define(function (require, exports, module) { CommandManager.register(Strings.CMD_FILE_CLOSE, Commands.FILE_CLOSE, handleFileClose); CommandManager.register(Strings.CMD_FILE_CLOSE_ALL, Commands.FILE_CLOSE_ALL, handleFileCloseAll); + CommandManager.register(Strings.CMD_FILE_CLOSE_LIST, Commands.FILE_CLOSE_LIST, handleFileCloseList); if (brackets.platform === "win") { CommandManager.register(Strings.CMD_EXIT, Commands.FILE_QUIT, handleFileQuit); diff --git a/src/document/DocumentManager.js b/src/document/DocumentManager.js index b5337ffc5a2..37e1f0785f0 100644 --- a/src/document/DocumentManager.js +++ b/src/document/DocumentManager.js @@ -316,12 +316,19 @@ define(function (require, exports, module) { // Dispatch event $(exports).triggerHandler("workingSetAddList", [uniqueFileList]); } - - function _internalRemoveFromWorkingSet(file) { + + /** + * Warning: low level API - use FILE_CLOSE command in most cases. + * Removes the given file from the working set list, if it was in the list. Does not change + * the current editor even if it's for this file. Does not prompt for unsaved changes. + * @param {!FileEntry} file + * @param {boolean=} true to suppress redraw after removal + */ + function removeFromWorkingSet(file, suppressRedraw) { // If doc isn't in working set, do nothing var index = findInWorkingSet(file.fullPath); if (index === -1) { - return false; + return; } // Remove @@ -329,22 +336,8 @@ define(function (require, exports, module) { _workingSetMRUOrder.splice(findInWorkingSet(file.fullPath, _workingSetMRUOrder), 1); _workingSetAddedOrder.splice(findInWorkingSet(file.fullPath, _workingSetAddedOrder), 1); - return true; - } - - function removeFromWorkingSet(content, suppressRedraw) { - if (content) { - if ($.isArray(content)) { - content.forEach(function (file) { - _internalRemoveFromWorkingSet(file); - }); - - $(exports).triggerHandler("workingSetRemoveList", [content]); - - } else if (_internalRemoveFromWorkingSet(content)) { - $(exports).triggerHandler("workingSetRemove", [content, suppressRedraw]); - } - } + // Dispatch event + $(exports).triggerHandler("workingSetRemove", [file, suppressRedraw]); } /** @@ -575,6 +568,33 @@ define(function (require, exports, module) { _clearCurrentDocument(); _removeAllFromWorkingSet(); } + + function removeListFromWorkingSet(list, clearCurrentDocument) { + var fileList = [], index; + + if (!list) { + return; + } + + if (clearCurrentDocument) { + _clearCurrentDocument(); + } + + list.forEach(function (file) { + index = findInWorkingSet(file.fullPath); + + if (index !== -1) { + fileList.push(_workingSet[index]); + + _workingSet.splice(index, 1); + _workingSetMRUOrder.splice(findInWorkingSet(file.fullPath, _workingSetMRUOrder), 1); + _workingSetAddedOrder.splice(findInWorkingSet(file.fullPath, _workingSetAddedOrder), 1); + } + }); + + $(exports).triggerHandler("workingSetRemoveList", [fileList]); + } + /** * Cleans up any loose Documents whose only ref is its own master Editor, and that Editor is not @@ -946,6 +966,7 @@ define(function (require, exports, module) { exports.addToWorkingSet = addToWorkingSet; exports.addListToWorkingSet = addListToWorkingSet; exports.removeFromWorkingSet = removeFromWorkingSet; + exports.removeListFromWorkingSet = removeListFromWorkingSet; exports.getNextPrevFile = getNextPrevFile; exports.swapWorkingSetIndexes = swapWorkingSetIndexes; exports.sortWorkingSet = sortWorkingSet; diff --git a/src/extensions/default/CloseOthers/main.js b/src/extensions/default/CloseOthers/main.js index 66d1028d20d..a569be514f3 100644 --- a/src/extensions/default/CloseOthers/main.js +++ b/src/extensions/default/CloseOthers/main.js @@ -56,8 +56,8 @@ define(function (require, exports, module) { for (i = start; i < end; i++) { docList.push(workingSet[i]); } - - docCH.handleFileCloseList(docList); + + CommandManager.execute(Commands.FILE_CLOSE_LIST, {documentList: docList}); } if (settings.close_below) { diff --git a/src/nls/root/strings.js b/src/nls/root/strings.js index f1f5621f527..77742450379 100644 --- a/src/nls/root/strings.js +++ b/src/nls/root/strings.js @@ -209,6 +209,7 @@ define({ "CMD_OPEN_FOLDER" : "Open Folder\u2026", "CMD_FILE_CLOSE" : "Close", "CMD_FILE_CLOSE_ALL" : "Close All", + "CMD_FILE_CLOSE_LIST" : "Close List", "CMD_FILE_CLOSE_OTHERS" : "Close Others", "CMD_FILE_CLOSE_ABOVE" : "Close Others Above", "CMD_FILE_CLOSE_BELOW" : "Close Others Below", From dc0ed463f4d37a27bc260f1d5dc1ac8e45224f43 Mon Sep 17 00:00:00 2001 From: Randy Edmunds Date: Wed, 2 Oct 2013 08:15:46 -0700 Subject: [PATCH 0049/1140] performance: do not use precise token parsing --- src/extensions/default/JavaScriptCodeHints/Session.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/extensions/default/JavaScriptCodeHints/Session.js b/src/extensions/default/JavaScriptCodeHints/Session.js index 34a2a7ead5a..f8cc9fdcfc6 100644 --- a/src/extensions/default/JavaScriptCodeHints/Session.js +++ b/src/extensions/default/JavaScriptCodeHints/Session.js @@ -131,9 +131,9 @@ define(function (require, exports, module) { var cm = this.editor._codeMirror; if (cursor) { - return cm.getTokenAt(cursor, true); + return cm.getTokenAt(cursor); } else { - return cm.getTokenAt(this.getCursor(), true); + return cm.getTokenAt(this.getCursor()); } }; From 2b6c6620cb9f846e4e9b1dd29b8f52c0783d59b4 Mon Sep 17 00:00:00 2001 From: Bernhard Sirlinger Date: Wed, 2 Oct 2013 19:06:01 +0200 Subject: [PATCH 0050/1140] Fix dialog positioning --- src/styles/bootstrap/modals.less | 2 - src/styles/brackets_patterns_override.less | 50 ++++++++++++++-------- src/widgets/Dialogs.js | 33 ++++++++------ src/widgets/bootstrap-modal.js | 5 ++- 4 files changed, 55 insertions(+), 35 deletions(-) diff --git a/src/styles/bootstrap/modals.less b/src/styles/bootstrap/modals.less index ec57254b52c..6a04cec462d 100644 --- a/src/styles/bootstrap/modals.less +++ b/src/styles/bootstrap/modals.less @@ -27,10 +27,8 @@ .modal { position: fixed; top: 50%;//changed from 10% - left: 50%; z-index: @zindexModal; width: 600px; - margin: -250px 0 0 -280px;//changed from -280px background-color: @white; border: 1px solid #999; border: 1px solid rgba(0,0,0,.3); diff --git a/src/styles/brackets_patterns_override.less b/src/styles/brackets_patterns_override.less index 5fc2ac1a93e..2a20a015ecd 100644 --- a/src/styles/brackets_patterns_override.less +++ b/src/styles/brackets_patterns_override.less @@ -376,9 +376,27 @@ /* Dialog-related styles */ +.modal-wrapper { + width: 100%; + height: 100%; + position: absolute; + top: 0; + left: 0; + overflow: auto; + display: table; +} + +.modal-inner-wrapper { + display: table-cell; + vertical-align: middle; +} + .modal { background-color: @tc-gray-panel; - width: auto; + min-width: 200px; + position: relative; + top: 0; + margin: auto; } .modal .close { @@ -392,11 +410,15 @@ border-bottom: 1px solid @tc-gray-panel-separator; } -.modal-body, .modal-header { +.modal-body { + background-color: @tc-gray-panel; +} + +.modal-body, .modal-header, .modal-footer { /* See styles/bootstrap/patterns.less .modal class. Pushing this value down to .modal-header and .modal-body to allow the overall modal to take the width of the footer */ - width: 580px; + width: 100%; } .modal-footer { @@ -558,9 +580,6 @@ a[href^="http"] { width: 400px; } -.install-extension-dialog { - margin-top: -125px; -} .install-extension-dialog .modal-body input.url { margin: 10px 0; width: 550px; @@ -568,17 +587,14 @@ a[href^="http"] { /* Extension Manager dialog */ .extension-manager-dialog { - top: 50%; - left: 50%; - margin-top: -275px; - margin-left: -350px; background-color: #d4d7d7; - + width: 730px; + .modal-header { border-bottom: none; + width: 760px; padding: 0; - width: auto; - + .nav-tabs { margin: 0; border-color: #c3c6c5; @@ -663,12 +679,12 @@ a[href^="http"] { } } .modal-body { - width: 730px; height: 400px; overflow-y: scroll; - padding: 0; background-color: @tc-gray-panel; - + padding: 0; + width: 760px; + .empty-message { position: absolute; top: 50%; @@ -897,7 +913,7 @@ input[type="color"], background-color: @tc-button-background; text-shadow: @tc-text-shadow; color: @tc-text; - cursor: default; + cursor: default; font-size: (@baseFontSize + 1); font-weight: @font-weight-semibold; line-height: normal; diff --git a/src/widgets/Dialogs.js b/src/widgets/Dialogs.js index fbc788f7253..7fbb67edd8f 100644 --- a/src/widgets/Dialogs.js +++ b/src/widgets/Dialogs.js @@ -1,24 +1,24 @@ /* * 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 + * 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, + * 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 + * 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. - * + * */ @@ -69,6 +69,7 @@ define(function (require, exports, module) { function _dismissDialog($dlg, buttonId) { $dlg.data("buttonId", buttonId); $dlg.modal("hide"); + $(".modal-wrapper:last").remove(); } /** @@ -219,15 +220,18 @@ define(function (require, exports, module) { * @return {Dialog} */ function showModalDialogUsingTemplate(template, autoDismiss) { + console.log("Appended"); if (autoDismiss === undefined) { autoDismiss = true; } + $("body").append(""); + var result = $.Deferred(), promise = result.promise(), $dlg = $(template) .addClass("instance") - .appendTo(window.document.body); + .appendTo(".modal-inner-wrapper:last"); // Save the dialog promise for unit tests $dlg.data("promise", promise); @@ -282,6 +286,7 @@ define(function (require, exports, module) { .modal({ backdrop: "static", show: true, + selector: ".modal-inner-wrapper:last", keyboard: false // handle the ESC key ourselves so we can deal with nested dialogs }) // Updates the z-index of the modal dialog and the backdrop @@ -321,7 +326,7 @@ define(function (require, exports, module) { } /** - * Immediately closes any dialog instances with the given class. The dialog callback for each instance will + * Immediately closes any dialog instances with the given class. The dialog callback for each instance will * be called with the special buttonId DIALOG_CANCELED (note: callback is run asynchronously). * @param {string} dlgClass The class name identifier for the dialog. * @param {string=} buttonId The button id to use when closing the dialog. Defaults to DIALOG_CANCELED diff --git a/src/widgets/bootstrap-modal.js b/src/widgets/bootstrap-modal.js index 12abe06f17a..14a918c6dca 100755 --- a/src/widgets/bootstrap-modal.js +++ b/src/widgets/bootstrap-modal.js @@ -57,7 +57,7 @@ var transition = $.support.transition && that.$element.hasClass('fade') if (!that.$element.parent().length) { - that.$element.appendTo(document.body) //don't move modals dom position + that.$element.appendTo(this.options.selector) //don't move modals dom position } that.$element.show() @@ -160,7 +160,7 @@ var doAnimate = $.support.transition && animate this.$backdrop = $('