diff --git a/Gruntfile.js b/Gruntfile.js index 71cec956c9c..08e71e4ab10 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -75,7 +75,8 @@ module.exports = function (grunt) { '!extensibility/node/node_modules/**/{test,tst}/**/*', '!extensibility/node/node_modules/**/examples/**/*', 'filesystem/impls/appshell/node/**', - '!filesystem/impls/appshell/node/spec/**' + '!filesystem/impls/appshell/node/spec/**', + 'search/node/**' ] }, /* extensions and CodeMirror modes */ diff --git a/samples/cs/Getting Started/index.html b/samples/cs/Getting Started/index.html index bf00a0aae7c..53653e18880 100644 --- a/samples/cs/Getting Started/index.html +++ b/samples/cs/Getting Started/index.html @@ -206,4 +206,4 @@

Zapojte se

--> - \ No newline at end of file + \ No newline at end of file diff --git a/samples/es/Primeros Pasos/index.html b/samples/es/Primeros Pasos/index.html index 668811ddc9a..2fa954f304f 100644 --- a/samples/es/Primeros Pasos/index.html +++ b/samples/es/Primeros Pasos/index.html @@ -32,7 +32,7 @@

¡Ésta es tu guía!

más que no vas a encontrar en otros editores. Además, Brackets está escrito en JavaScript, HTML y CSS. Esto significa que la mayoría de quienes usan Brackets tienen las habilidades necesarias para modificar y extender el editor. De hecho, nosotros usamos Brackets todos los días para desarrollar Brackets. Para - saber más sobre cómo utilizar estas características únicas, continua leyendo. + saber más sobre cómo utilizar estas características únicas, continúa leyendo.

Edición rápida de CSS y JavaScript

- Se acabó el estar saltando de documento en documento perdiendo de vista lo que estás haciendo. Mientras + Se acabó aquello de estar saltando de documento en documento perdiendo de vista lo que estás haciendo. Mientras estás escribiendo HTML, usa el atajo de teclado Cmd/Ctrl + E para abrir un editor rápido en línea con todo el contenido CSS relacionado. Ajusta tu CSS y oprime ESC para volver a tu HTML, o simplemente mantenga las reglas CSS abiertas para que pasen a formar parte de tu editor de HTML. Si pulsas ESC fuera de un editor rápido, todos se cerrarán a la vez. La edición rápida también - funciona con archivos LESS y SCSS files, incluyendo las reglas anidadas. + funciona con archivos LESS y SCSS, incluyendo las reglas anidadas.

¿Quieres verlo funcionando? Coloca tu cursor sobre la etiqueta y oprime Cmd/Ctrl + E. Deberías ver aparecer un editor rápido de CSS más arriba, mostrando la regla de - CSS que le afecta. La edición rápida funciona también en atributos de de tipo clase e id. También puedes + CSS que le afecta. La edición rápida funciona también en atributos de tipo clase e id. También puedes utilizarlo en tus archivos LESS o SCSS. Puedes crear nuevas reglas de la misma manera. Haz clic en una de las etiquetas de más arriba @@ -101,7 +101,7 @@

Edición rápida de CSS y JavaScript

Visualiza cambios en archivos HTML y CSS en vivo en el navegador

¿Conoces ese baile de "guardar/recargar" que llevamos años haciendo? ¿Ése en el que haces cambios en tu - editor, oprimes guardar, cambias al navegador y recargas para por fin poder ver el resultado? Con + editor, oprimes guardar, cambias al navegador y recargas para por fin poder ver el resultado? Con Brackets, ya no tienes que hacerlo.

@@ -161,7 +161,7 @@

¿Necesitas algo más? ¡Prueba una extensión!

Además de todas las bondades naturales de Brackets, nuestra amplia y creciente comunidad de desarrolladores de extensiones ha creado cientos de extensiones que añaden útiles funcionalidades. Si hay algo que - necesitas que Brackets no soporte, es bastante probable que alguien haya construido una extensión para + necesitas que Brackets no soporta, es bastante probable que alguien haya construido una extensión para ello. Para navegar o buscar en la lista de extensiones disponibles, selecciona Archivo > Gestionar extensiones... y haz clic en la pestaña "Disponibles". Cuando encuentres una que quieras, simplemente presiona el botón "Instalar" a su derecha. diff --git a/samples/root/Getting Started/index.html b/samples/root/Getting Started/index.html index 276e7446c49..28cd3fb7116 100644 --- a/samples/root/Getting Started/index.html +++ b/samples/root/Getting Started/index.html @@ -157,7 +157,7 @@

Need something else? Try an extension!

extension developers has built hundreds of extensions that add useful functionality. If there's something you need that Brackets doesn't offer, more than likely someone has built an extension for it. To browse or search the list of available extensions, choose File > Extension - Manager and click on the "Available" tab. When you find an extension you want, just click + Manager… and click on the "Available" tab. When you find an extension you want, just click the "Install" button next to it.

diff --git a/src/extensions/default/HealthData/HealthDataManager.js b/src/extensions/default/HealthData/HealthDataManager.js index 9562a61a51e..09afbf15ff5 100644 --- a/src/extensions/default/HealthData/HealthDataManager.js +++ b/src/extensions/default/HealthData/HealthDataManager.js @@ -36,7 +36,6 @@ define(function (require, exports, module) { uuid = require("thirdparty/uuid"); var prefs = PreferencesManager.getExtensionPrefs("healthData"); - var themesPref = PreferencesManager.getExtensionPrefs("themes"); prefs.definePreference("healthDataTracking", "boolean", true, { description: Strings.DESCRIPTION_HEALTH_DATA_TRACKING @@ -71,7 +70,6 @@ define(function (require, exports, module) { oneTimeHealthData.osLanguage = brackets.app.language; oneTimeHealthData.bracketsLanguage = brackets.getLocale(); oneTimeHealthData.bracketsVersion = brackets.metadata.version; - oneTimeHealthData.bracketsTheme = themesPref.get("theme"); $.extend(oneTimeHealthData, HealthLogger.getAggregatedHealthData()); HealthDataUtils.getUserInstalledExtensions() @@ -79,7 +77,14 @@ define(function (require, exports, module) { oneTimeHealthData.installedExtensions = userInstalledExtensions; }) .always(function () { - return result.resolve(oneTimeHealthData); + HealthDataUtils.getUserInstalledTheme() + .done(function (bracketsTheme) { + oneTimeHealthData.bracketsTheme = bracketsTheme; + }) + .always(function () { + return result.resolve(oneTimeHealthData); + }); + }); return result.promise(); diff --git a/src/extensions/default/HealthData/HealthDataUtils.js b/src/extensions/default/HealthData/HealthDataUtils.js index 5ea7110db9f..2b7678fb091 100644 --- a/src/extensions/default/HealthData/HealthDataUtils.js +++ b/src/extensions/default/HealthData/HealthDataUtils.js @@ -27,8 +27,11 @@ define(function (require, exports, module) { "use strict"; - var ExtensionManager = brackets.getModule("extensibility/ExtensionManager"), - _ = brackets.getModule("thirdparty/lodash"); + var _ = brackets.getModule("thirdparty/lodash"), + ExtensionManager = brackets.getModule("extensibility/ExtensionManager"), + PreferencesManager = brackets.getModule("preferences/PreferencesManager"); + + var themesPref = PreferencesManager.getExtensionPrefs("themes"); /** @@ -67,5 +70,43 @@ define(function (require, exports, module) { return result.promise(); } - exports.getUserInstalledExtensions = getUserInstalledExtensions; -}); \ No newline at end of file + /** + * Utility function to get the user installed theme which are present in the registry + */ + function getUserInstalledTheme() { + var result = new $.Deferred(); + + var installedTheme = themesPref.get("theme"), + bracketsTheme; + + if (installedTheme === "light-theme" || installedTheme === "dark-theme") { + return result.resolve(installedTheme); + } + + if (!ExtensionManager.hasDownloadedRegistry) { + ExtensionManager.downloadRegistry().done(function () { + bracketsTheme = ExtensionManager.extensions[installedTheme]; + if (bracketsTheme && bracketsTheme.installInfo && bracketsTheme.installInfo.locationType === ExtensionManager.LOCATION_USER && bracketsTheme.registryInfo) { + result.resolve(installedTheme); + } else { + result.reject(); + } + }) + .fail(function () { + result.reject(); + }); + } else { + bracketsTheme = ExtensionManager.extensions[installedTheme]; + if (bracketsTheme && bracketsTheme.installInfo && bracketsTheme.installInfo.locationType === ExtensionManager.LOCATION_USER && bracketsTheme.registryInfo) { + result.resolve(installedTheme); + } else { + result.reject(); + } + } + + return result.promise(); + } + + exports.getUserInstalledExtensions = getUserInstalledExtensions; + exports.getUserInstalledTheme = getUserInstalledTheme; +}); diff --git a/src/extensions/default/PrefsCodeHints/main.js b/src/extensions/default/PrefsCodeHints/main.js index 367f6f5a0b9..7a210106f25 100644 --- a/src/extensions/default/PrefsCodeHints/main.js +++ b/src/extensions/default/PrefsCodeHints/main.js @@ -281,6 +281,13 @@ define(function (require, exports, module) { return null; } + // Convert integers to strings, so StringMatch.stringMatch can match it. + if (option.type === "number" || option.valueType === "number") { + values = values.map(function (val) { + return val.toString(); + }); + } + // filter through the values. hints = $.map(values, function (value) { var match = StringMatch.stringMatch(value, query, stringMatcherOptions); @@ -332,8 +339,7 @@ define(function (require, exports, module) { } // Put quotes around completion. - completion = quoteChar + completion; - completion = completion + quoteChar; + completion = quoteChar + completion + quoteChar; // Append colon and braces, brackets and quotes. if (!ctxInfo.shouldReplace) { diff --git a/src/htmlContent/extension-manager-view-item.html b/src/htmlContent/extension-manager-view-item.html index 9e299e280b7..bb3782e5ed1 100644 --- a/src/htmlContent/extension-manager-view-item.html +++ b/src/htmlContent/extension-manager-view-item.html @@ -91,7 +91,7 @@ {{Strings.MARKED_FOR_REMOVAL}} ({{Strings.UNDO_REMOVE}}) {{/isMarkedForRemoval}} {{#isMarkedForDisabling}} - Marked for disabling ({{Strings.UNDO_DISABLE}}) + {{Strings.MARKED_FOR_DISABLING}} ({{Strings.UNDO_DISABLE}}) {{/isMarkedForDisabling}} {{#isMarkedForUpdate}} {{Strings.MARKED_FOR_UPDATE}} ({{Strings.UNDO_UPDATE}}) diff --git a/src/nls/cs/strings.js b/src/nls/cs/strings.js index fa6e93e8f90..a3e4860b7f8 100644 --- a/src/nls/cs/strings.js +++ b/src/nls/cs/strings.js @@ -194,6 +194,7 @@ define({ "FIND_IN_FILES_PAGING" : "{0}—{1}", "FIND_IN_FILES_FILE_PATH" : "Soubor {0} ve složce {1}", "FIND_IN_FILES_EXPAND_COLLAPSE" : "Ctrl/Cmd klik pro rozbalení/sbalení všeho", + "FIND_IN_FILES_INDEXING" : "Indexování pro okamžité vyhledávání\u2026", "REPLACE_IN_FILES_ERRORS_TITLE" : "Nahradit chyby", "REPLACE_IN_FILES_ERRORS" : "Následující soubory nebyly změněny, protože se změnily po hledání nebo do nich nelze zapisovat.", @@ -741,7 +742,7 @@ define({ "DESCRIPTION_STATIC_SERVER_PORT" : "Síťový port, který by zabudovaný server měl použít pro živý náhled", "DESCRIPTION_STYLE_ACTIVE_LINE" : "true ke zvýraznění řádku, na kterém se nachází kurzor, barvou na pozadí", "DESCRIPTION_TAB_SIZE" : "Počet zobrazených mezer místo tabulátoru", - "DESCRIPTION_USE_TAB_CHAR" : "true k použití tabulátorů místo mezer", + "DESCRIPTION_USE_TAB_CHAR" : "true k používání tabulátorů místo mezer", "DESCRIPTION_UPPERCASE_COLORS" : "true k vygenerování hex barev velkými písmeny v Inline Color Editor", "DESCRIPTION_WORD_WRAP" : "Zalomit řádky přesahující šířku viewportu", "DESCRIPTION_DETECTED_EXCLUSIONS" : "Seznam souborů, u kterých bylo zjištěno, že způsobují, že se Tern vymkne kontrole", @@ -754,6 +755,8 @@ define({ "DESCRIPTION_LINTING_COLLAPSED" : "true ke skrytí panelu linteru", "DESCRIPTION_FONT_FAMILY" : "Změnit písmo", "DESCRIPTION_FONT_SIZE" : "Změnit velikost písma, např. 13px", + "DESCRIPTION_FIND_IN_FILES_NODE" : "true k povolení vyhledávání založeného na Node", + "DESCRIPTION_FIND_IN_FILES_INSTANT" : "true k povolení okamžitého vyhledávání", "DESCRIPTION_FONT_SMOOTHING" : "Pouze pro Mac: \"subpixel-antialiased\" k povolení sub-pixel vyhlazování nebo \"antialiased\" k vyhlazování v odstínech šedi", "DESCRIPTION_OPEN_PREFS_IN_SPLIT_VIEW" : "false k zamezení otevírání souboru s preferencemi v rozděleném editoru", "DESCRIPTION_OPEN_USER_PREFS_IN_SECOND_PANE" : "false k otevření souboru s preferencemi v levém/horním panelu", @@ -761,4 +764,4 @@ define({ "DEFAULT_PREFERENCES_JSON_DEFAULT" : "Výchozí" }); -/* Last translated for 473f8f059728c813073732676de6832d04bc94b8 */ +/* Last translated for ed57a2cfd8132224ebee91365ba50f8f718f165f */ \ No newline at end of file diff --git a/src/nls/cs/urls.js b/src/nls/cs/urls.js index ec3aba4b050..bf2d21bb100 100644 --- a/src/nls/cs/urls.js +++ b/src/nls/cs/urls.js @@ -29,4 +29,4 @@ define({ "GETTING_STARTED" : "cs/Getting Started", "ADOBE_THIRD_PARTY" : "http://www.adobe.com/go/thirdparty_cz/", "WEB_PLATFORM_DOCS_LICENSE" : "http://creativecommons.org/licenses/by/3.0/deed.cs" -}); +}); \ No newline at end of file diff --git a/src/nls/es/strings.js b/src/nls/es/strings.js index 5764735fc70..04a5724d6f5 100644 --- a/src/nls/es/strings.js +++ b/src/nls/es/strings.js @@ -88,6 +88,7 @@ define({ // Application preferences corrupt error strings "ERROR_PREFS_CORRUPT_TITLE" : "Error leyendo las preferencias", "ERROR_PREFS_CORRUPT" : "El archivo de preferencias no tiene un formato JSON válido. El archivo se abrirá para que puedas corregir el formato. Luego deberás reiniciar {APP_NAME} para que los cambios surtan efecto.", + "ERROR_PROJ_PREFS_CORRUPT" : "El archivo de preferencias para el proyecto no tiene un formato JSON válido. El archivo se abrirá para que puedas corregir el formato. Luego deberás recargar el proyecto para que los cambios surtan efecto.", // Application error strings "ERROR_IN_BROWSER_TITLE" : "Vaya... parece que {APP_NAME} todavía no funciona en navegadores.", @@ -104,13 +105,13 @@ define({ "LIVE_DEVELOPMENT_ERROR_TITLE" : "Error en la Vista previa dinámica", "LIVE_DEVELOPMENT_RELAUNCH_TITLE" : "Conectando con el navegador", - "LIVE_DEVELOPMENT_ERROR_MESSAGE" : "Para poder iniciar el modo de Vista previa dinámica, Chrome debe ser iniciado habilitando la depuración remota.

¿Quieres reiniciar Chrome y habilitar la depuración remota?

", + "LIVE_DEVELOPMENT_ERROR_MESSAGE" : "Para poder iniciar el modo de Vista previa dinámica, Chrome debe ser iniciado habilitando la depuración remota.

¿Quieres reiniciar Chrome y habilitar la depuración remota?

", "LIVE_DEV_LOADING_ERROR_MESSAGE" : "No se pudo cargar la página para la Vista previa dinámica.", "LIVE_DEV_NEED_HTML_MESSAGE" : "Abra un archivo HTML o asegúrate de que haya un index.html en tu proyecto para poder iniciar el modo de Vista previa dinámica.", "LIVE_DEV_NEED_BASEURL_MESSAGE" : "Necesitas especificar una URL base en este proyecto para poder iniciar la Vista previa dinámica con archivos de servidor.", "LIVE_DEV_SERVER_NOT_READY_MESSAGE" : "Error iniciando el servidor HTTP para la Vista previa dinámica. Vuelve a intentarlo, por favor.", "LIVE_DEVELOPMENT_INFO_TITLE" : "¡Bienvenido a la Vista previa dinámica!", - "LIVE_DEVELOPMENT_INFO_MESSAGE" : "Vista previa dinámica conecta {APP_NAME} con tu navegador. Lanza una vista previa de tu archivo HTML en el navegador y la actualiza a medida que modificas tu código.

En esta versión preliminar de {APP_NAME}, el modo de Vista previa dinámica sólo funciona para cambios de archivos CSS o HTML y únicamente con Google Chrome. Los cambios en los archivos Javascript son recargados automáticamente cuando se guardan.

(No volverás a ver este mensaje.)", + "LIVE_DEVELOPMENT_INFO_MESSAGE" : "Vista previa dinámica conecta {APP_NAME} con tu navegador. Lanza una vista previa de tu archivo HTML en el navegador y la actualiza a medida que modificas tu código.

En esta versión preliminar de {APP_NAME}, el modo de Vista previa dinámica sólo funciona para cambios de archivos CSS o HTML y únicamente con Google Chrome. Los cambios en los archivos Javascript son recargados automáticamente cuando se guardan.

(No volverás a ver este mensaje.)", "LIVE_DEVELOPMENT_TROUBLESHOOTING" : "Para más información, consulta Resolución de Problemas de conexión en Vista previa dinámica.", "LIVE_DEV_STATUS_TIP_NOT_CONNECTED" : "Vista previa dinámica", @@ -132,9 +133,9 @@ define({ "CONFIRM_FOLDER_DELETE_TITLE" : "Confirmar eliminación", "CONFIRM_FOLDER_DELETE" : "¿Estás seguro que deseas eliminar el directorio {0}?", "FILE_DELETED_TITLE" : "Archivo eliminado", - "EXT_MODIFIED_WARNING" : "{0} ha sido modificado en el disco.

¿Deseas guardar el archivo y sobrescribir esos cambios?", - "EXT_MODIFIED_MESSAGE" : "{0} ha sido modificado, pero también tiene cambios en {APP_NAME}.

¿Qué versión quieres conservar?", - "EXT_DELETED_MESSAGE" : "{0} ha sido eliminado, pero tiene cambios sin guardar en {APP_NAME}.

¿Quieres conservar tus cambios?", + "EXT_MODIFIED_WARNING" : "{0} ha sido modificado en el disco fuera de {APP_NAME}.

¿Deseas guardar el archivo y sobrescribir esos cambios?", + "EXT_MODIFIED_MESSAGE" : "{0} ha sido modificado en el disco fuera de {APP_NAME}, pero también tiene cambios en {APP_NAME}.

¿Qué versión quieres conservar?", + "EXT_DELETED_MESSAGE" : "{0} ha sido eliminado en el disco fuera de {APP_NAME}, pero tiene cambios sin guardar en {APP_NAME}.

¿Quieres conservar tus cambios?", // Generic dialog/button labels "DONE" : "Aceptar", @@ -163,7 +164,7 @@ define({ "BUTTON_CASESENSITIVE_HINT" : "Sensible a mayúsculas", "BUTTON_REGEXP_HINT" : "Expresión regular", "REPLACE_WITHOUT_UNDO_WARNING_TITLE": "Reemplazar sin deshacer", - "REPLACE_WITHOUT_UNDO_WARNING" : "Dado que hay más de {0} archivos que necesitan ser modificados, {APP_NAME} modificará los archivos no abiertos en el disco.
Por lo tanto, no será posible deshacer los reemplazos en esos archivos.", + "REPLACE_WITHOUT_UNDO_WARNING" : "Dado que hay más de {0} archivos que necesitan ser modificados, {APP_NAME} modificará los archivos no abiertos en el disco.
Por lo tanto, no será posible deshacer los reemplazos en esos archivos.", "BUTTON_REPLACE_WITHOUT_UNDO" : "Reemplazar sin deshacer", "OPEN_FILE" : "Abrir archivo", @@ -192,12 +193,13 @@ define({ "FIND_IN_FILES_MORE_THAN" : "Más de ", "FIND_IN_FILES_PAGING" : "{0}—{1}", "FIND_IN_FILES_FILE_PATH" : "{0} {2} {1}", + "FIND_IN_FILES_INDEXING" : "Indexando archivos para la Búsqueda instantánea\u2026", "FIND_IN_FILES_EXPAND_COLLAPSE" : "Ctrl/Cmd clic para expandir/colapsar todo", "REPLACE_IN_FILES_ERRORS_TITLE" : "Errores al reemplazar", "REPLACE_IN_FILES_ERRORS" : "Los siguientes archivos no fueron modificados porque cambiaron después de realizar la búsqueda o no pueden ser escritos.", "ERROR_FETCHING_UPDATE_INFO_TITLE" : "Error obteniendo información sobre actualizaciones", - "ERROR_FETCHING_UPDATE_INFO_MSG" : "Ocurrió un problema al obtener la información sobre las últimas actualizaciones desde el servidor. Por favor, asegúrate de estar conectado a internet y vuelve a intentarlo.", + "ERROR_FETCHING_UPDATE_INFO_MSG" : "Ocurrió un problema al obtener la información sobre las últimas actualizaciones desde el servidor. Por favor, asegúrate de estar conectado a Internet y vuelve a intentarlo.", // File exclusion filters "NEW_FILE_FILTER" : "Nuevo conjunto de filtros\u2026", @@ -247,7 +249,7 @@ define({ "GEAR_MENU_TOOLTIP" : "Configurar el área de trabajo", "SPLITVIEW_INFO_TITLE" : "Ya está abierto", - "SPLITVIEW_MULTIPANE_WARNING" : "El archivo ya está abierto en otro panel. Próximamente {APP_NAME} soportará abrir el mismo archivo en más de un panel. Hasta entonces, el archivo se mostrará en el panel en el cual ya está abierto.

(Sólo verá este mensaje una vez.)", + "SPLITVIEW_MULTIPANE_WARNING" : "El archivo ya está abierto en otro panel. Próximamente {APP_NAME} soportará abrir el mismo archivo en más de un panel. Hasta entonces, el archivo se mostrará en el panel en el cual ya está abierto.

(Sólo verá este mensaje una vez.)", /** * Keyboard modifier names @@ -317,6 +319,7 @@ define({ "CMD_FILE_SAVE_ALL" : "Guardar todo", "CMD_FILE_SAVE_AS" : "Guardar como\u2026", "CMD_LIVE_FILE_PREVIEW" : "Vista previa dinámica", + "CMD_TOGGLE_LIVE_PREVIEW_MB_MODE" : "Habilitar la Vista previa dinámica experimental", "CMD_RELOAD_LIVE_PREVIEW" : "Recargar la Vista previa dinámica", "CMD_PROJECT_SETTINGS" : "Configuración del proyecto\u2026", "CMD_FILE_RENAME" : "Renombrar", @@ -362,11 +365,9 @@ define({ "CMD_ADD_NEXT_MATCH" : "Agregar la siguiente coincidencia a la selección", "CMD_SKIP_CURRENT_MATCH" : "Omitir y agregar la siguiente coincidencia", "CMD_FIND_IN_FILES" : "Buscar en archivos", - "CMD_FIND_IN_SELECTED" : "Buscar en el archivo/directorio seleccionado", "CMD_FIND_IN_SUBTREE" : "Buscar en\u2026", "CMD_REPLACE" : "Reemplazar", "CMD_REPLACE_IN_FILES" : "Reemplazar en archivos", - "CMD_REPLACE_IN_SELECTED" : "Reemplazar en el archivo/directorio seleccionado", "CMD_REPLACE_IN_SUBTREE" : "Reemplazar en\u2026", // View menu commands @@ -389,7 +390,7 @@ define({ "CMD_WORKING_SORT_TOGGLE_AUTO" : "Ordenación automática", "CMD_THEMES" : "Temas\u2026", - // Navigate menu Commands + // Navigate menu commands "NAVIGATE_MENU" : "Navegación", "CMD_QUICK_OPEN" : "Apertura rápida", "CMD_GOTO_LINE" : "Ir a la línea", @@ -402,6 +403,8 @@ define({ "CMD_CSS_QUICK_EDIT_NEW_RULE" : "Nueva regla", "CMD_NEXT_DOC" : "Documento siguiente", "CMD_PREV_DOC" : "Documento anterior", + "CMD_NEXT_DOC_LIST_ORDER" : "Document siguiente en la lista", + "CMD_PREV_DOC_LIST_ORDER" : "Document anterior en la lista", "CMD_SHOW_IN_TREE" : "Mostrar en el árbol de directorios", "CMD_SHOW_IN_EXPLORER" : "Mostrar en el Explorador", "CMD_SHOW_IN_FINDER" : "Mostrar en Finder", @@ -416,6 +419,7 @@ define({ "CMD_RELEASE_NOTES" : "Notas de la versión", "CMD_GET_INVOLVED" : "Involúcrese", "CMD_SHOW_EXTENSIONS_FOLDER" : "Abrir carpeta de extensiones", + "CMD_HEALTH_DATA_STATISTICS" : "Reporte de estadísticas", "CMD_HOMEPAGE" : "Página principal de {APP_TITLE}", "CMD_TWITTER" : "{TWITTER_NAME} en Twitter", "CMD_ABOUT" : "Acerca de {APP_TITLE}", @@ -445,7 +449,7 @@ define({ "GET_IT_NOW" : "¡Consíguelo ahora!", "PROJECT_SETTINGS_TITLE" : "Configuración del proyecto para: {0}", "PROJECT_SETTING_BASE_URL" : "URL base para Vista previa dinámica", - "PROJECT_SETTING_BASE_URL_HINT" : "(deja en blanco para urls de tipo \"file\")", + "PROJECT_SETTING_BASE_URL_HINT" : "Para usar un servidor local, ingresa una URL como http://localhost:8000/", "BASEURL_ERROR_INVALID_PROTOCOL" : "El protocolo {0} no está soportado por la Vista previa dinámica. Por favor, utiliza http: o https: .", "BASEURL_ERROR_SEARCH_DISALLOWED" : "La URL base no puede contener parámetros de búsqueda como \"{0}\".", "BASEURL_ERROR_HASH_DISALLOWED" : "La URL base no puede contener hashes como \"{0}\".", @@ -467,6 +471,8 @@ define({ "INSTALL" : "Instalar", "UPDATE" : "Actualizar", "REMOVE" : "Eliminar", + "DISABLE" : "Deshabilitar", + "ENABLE" : "Habilitar", "OVERWRITE" : "Sobrescribir", "CANT_REMOVE_DEV" : "Las extensiones en la carpeta \"dev\" se deben eliminar manualmente.", "CANT_UPDATE" : "La actualización no es compatible con esta versión de {APP_NAME}.", @@ -520,7 +526,7 @@ define({ "EXTENSION_LATEST_INCOMPATIBLE_NEWER" : "La versión {0} de esta extensión necesita una versión superior de {APP_NAME}. Puedes instalar la versión anterior {1}.", "EXTENSION_LATEST_INCOMPATIBLE_OLDER" : "La versión {0} de esta extensión sólo funciona con versiones anteriores de {APP_NAME}. Puedes instalar la versión anterior {1}.", "EXTENSION_NO_DESCRIPTION" : "Sin descripción", - "EXTENSION_MORE_INFO" : "Más información...", + "EXTENSION_MORE_INFO" : "Más información\u2026", "EXTENSION_ERROR" : "Error en la extensión", "EXTENSION_KEYWORDS" : "Palabras clave", "EXTENSION_INSTALLED" : "Instalada", @@ -535,15 +541,20 @@ define({ "EXTENSION_MANAGER_REMOVE_ERROR" : "No se pudo eliminar una o más extensiones: {0}. {APP_NAME} se recargará igualmente.", "EXTENSION_MANAGER_UPDATE" : "Actualizar extensión", "EXTENSION_MANAGER_UPDATE_ERROR" : "No se pudo actualizar una o más extensiones: {0}. {APP_NAME} se recargará igualmente.", + "EXTENSION_MANAGER_DISABLE" : "Deshabilitar extensiones", + "EXTENSION_MANAGER_DISABLE_ERROR" : "No se pudo deshabilitar una o más extensiones: {0}. {APP_NAME} se recargará igualmente.", "MARKED_FOR_REMOVAL" : "Marcada para eliminar", "UNDO_REMOVE" : "Deshacer", "MARKED_FOR_UPDATE" : "Marcada para actualizar", "UNDO_UPDATE" : "Deshacer", + "MARKED_FOR_DISABLING" : "Marcada para deshabilitar", + "UNDO_DISABLE" : "Deshacer", "CHANGE_AND_RELOAD_TITLE" : "Cambiar extensiones", "CHANGE_AND_RELOAD_MESSAGE" : "Para actualizar o eliminar las extensiones marcadas, necesitas recargar {APP_NAME}. Se solicitará confirmación para guardar los cambios pendientes.", "REMOVE_AND_RELOAD" : "Eliminar extensiones y recargar", "CHANGE_AND_RELOAD" : "Cambiar extensiones y recargar", "UPDATE_AND_RELOAD" : "Actualizar extensiones y recargar", + "DISABLE_AND_RELOAD" : "Deshabilitar extensiones y recargar", "PROCESSING_EXTENSIONS" : "Procesando los cambios en las extensiones\u2026", "EXTENSION_NOT_INSTALLED" : "No se pudo eliminar la extensión {0} porque no se encuentra instalada.", "NO_EXTENSIONS" : "Todavía no hay ninguna extensión instalada.
Haz clic en la pestaña Disponibles para empezar.", @@ -565,7 +576,6 @@ define({ /** * Unit names */ - "UNIT_PIXELS" : "píxeles", // extensions/default/DebugCommands @@ -575,6 +585,7 @@ define({ "CMD_REFRESH_WINDOW" : "Recargar con extensiones", "CMD_RELOAD_WITHOUT_USER_EXTS" : "Recargar sin extensiones", "CMD_NEW_BRACKETS_WINDOW" : "Nueva ventana de {APP_NAME}", + "CMD_LAUNCH_SCRIPT_MAC" : "Instalar acceso directo por línea de comandos", "CMD_SWITCH_LANGUAGE" : "Cambiar idioma", "CMD_RUN_UNIT_TESTS" : "Ejecutar tests", "CMD_SHOW_PERF_DATA" : "Mostrar información de rendimiento", @@ -582,7 +593,16 @@ define({ "CMD_LOG_NODE_STATE" : "Mostrar estado de Node en Consola", "CMD_RESTART_NODE" : "Reiniciar Node", "CMD_SHOW_ERRORS_IN_STATUS_BAR" : "Mostrar errores en la barra de estado", - "CMD_OPEN_BRACKETS_SOURCE" : "Abrir el código fuente de Brackets", + "CMD_OPEN_BRACKETS_SOURCE" : "Abrir el código fuente de {APP_NAME}", + + "CREATING_LAUNCH_SCRIPT_TITLE" : "Acceso directo a {APP_NAME} por línea de comandos", + "ERROR_CREATING_LAUNCH_SCRIPT" : "Ocurrió un error al instalar el acceso directo por línea de comandos. Por favor probá estas sugerencias de solución de problemas.

Razón: {0}", + "ERROR_CLTOOLS_RMFAILED" : "No se pudó eliminar el enlace simbólico existente /usr/local/bin/brackets.", + "ERROR_CLTOOLS_MKDIRFAILED" : "No se pudó crear el directorio /usr/local/bin.", + "ERROR_CLTOOLS_LNFAILED" : "No se pudó crear elenlace simbólico /usr/local/bin/brackets.", + "ERROR_CLTOOLS_SERVFAILED" : "Error interno.", + "ERROR_CLTOOLS_NOTSUPPORTED" : "El acceso directo por línea de comandos no es compatible con este sistema operativo.", + "LAUNCH_SCRIPT_CREATE_SUCCESS" : "¡Éxito! Ahora puedes abrir fácilmente {APP_NAME} desde la línea de comandos: brackets myFile.txt para abrir un archivo o brackets myFolder para cambiar de proyecto.

Aprende más acerca de como usar {APP_NAME} desde la línea de comandos.", "LANGUAGE_TITLE" : "Cambiar idioma", "LANGUAGE_MESSAGE" : "Idioma:", @@ -590,6 +610,14 @@ define({ "LANGUAGE_CANCEL" : "Cancelar", "LANGUAGE_SYSTEM_DEFAULT" : "Idioma predeterminado", + // extensions/default/HealthData + "HEALTH_DATA_NOTIFICATION" : "Preferencias del reporte de estadísticas", + "HEALTH_FIRST_POPUP_TITLE" : "Reporte de estadísticas de {APP_NAME}", + "HEALTH_DATA_DO_TRACK" : "Compartir información anónima sobre cómo utilizo {APP_NAME}", + "HEALTH_DATA_NOTIFICATION_MESSAGE" : "Para poder mejorar {APP_NAME}, enviamos periódicamente limitadas estadísticas anónimas a Adobe acerca de cómo se utiliza {APP_NAME}. Esta información ayuda a priorizar características a desarrollar, encontrar errores y problemas de usabilidad.

Puedes ver tus datos o elegir no compartir datos seleccionando Ayuda > Reporte de estadísticas.

Aprende más sobre el reporte de estadísticas de {APP_NAME}", + "HEALTH_DATA_PREVIEW" : "Reporte de estadísticas de {APP_NAME}", + "HEALTH_DATA_PREVIEW_INTRO" : "

Para poder mejorar {APP_NAME}, enviamos periódicamente limitadas estadísticas anónimas a Adobe acerca de cómo se utiliza {APP_NAME}. Esta información ayuda a priorizar características a desarrollar, encontrar errores y problemas de usabilidad. Aprende más sobre el Reporte de estadísticas de {APP_NAME} y cómo beneficia a la comunidad de {APP_NAME} mientras protege tu privacidad.

A continuación hay una vista previa de la información que será enviada en el siguiente Reporte de estadísticas si está habilitado.

", + // extensions/default/InlineTimingFunctionEditor "INLINE_TIMING_EDITOR_TIME" : "Tiempo", "INLINE_TIMING_EDITOR_PROGRESSION" : "Progresión", @@ -611,7 +639,7 @@ define({ "CMD_SHOW_PARAMETER_HINT" : "Mostrar sugerencias de parámetros", "NO_ARGUMENTS" : "", "DETECTED_EXCLUSION_TITLE" : "Problema de inferencia con un archivo JavaScript", - "DETECTED_EXCLUSION_INFO" : "Brackets se encontró con problemas procesando: {0}.

Este archivo no volverá a ser procesado para las sugerencias de código, saltar a la definición o para la edición rápida. Para reactivar este archivo, abra el archivo .brackets.json en su proyecto y edite jscodehints.detectedExclusions

Esto es probablemente un error en Brackets. Si puede proporcionar una copia de este archivo, por favor envíe un informe con un vínculo a dicho archivo.", + "DETECTED_EXCLUSION_INFO" : "{APP_NAME} se encontró con problemas procesando: {0}.

Este archivo no volverá a ser procesado para las sugerencias de código, saltar a la definición o para la edición rápida. Para reactivar este archivo, abra el archivo .brackets.json en su proyecto y edite jscodehints.detectedExclusions

Esto es probablemente un error en {APP_NAME}. Si puede proporcionar una copia de este archivo, por favor envíe un informe con un vínculo a dicho archivo.", // extensions/default/JSLint "JSLINT_NAME" : "JSLint", @@ -623,7 +651,117 @@ define({ "CMD_TOGGLE_RECENT_PROJECTS" : "Proyectos recientes", // extensions/default/WebPlatformDocs - "DOCS_MORE_LINK" : "Más" + "DOCS_MORE_LINK" : "Más", + + // extensions/default/CodeFolding + "COLLAPSE_ALL" : "Colapsar todo", + "EXPAND_ALL" : "Expandir todo", + "COLLAPSE_CURRENT" : "Colapsar actual", + "EXPAND_CURRENT" : "Expandir actual", + + // Descriptions of core preferences + "DESCRIPTION_CLOSE_BRACKETS" : "true para cerrar automáticamente las llaves, los corchetes y los paréntesis", + "DESCRIPTION_CLOSE_OTHERS_ABOVE" : "false para eliminar \"Cerrar otros por encima\" del menú contextual del Área de trabajo", + "DESCRIPTION_CLOSE_OTHERS_BELOW" : "false para eliminar \"Cerrar otros por debajo\" del menú contextual del Área de trabajo", + "DESCRIPTION_CLOSE_OTHERS" : "false para eliminar \"Cerrar otros\" del menú contextual del Área de trabajo", + "DESCRIPTION_CLOSE_TAGS" : "Configura las opciones de cierre de etiquetas automático", + "DESCRIPTION_CLOSE_TAGS_DONT_CLOSE_TAGS" : "Un vector de etiquetas que no deben cerrarse automáticamente", + "DESCRIPTION_CLOSE_TAGS_WHEN_OPENING" : "Cerrar cuando \">\" de la etiqueta de apertura es tipeado", + "DESCRIPTION_CLOSE_TAGS_WHEN_CLOSING" : "Cerrar cuando \"/\" de la etiqueta de clausura es tipeado", + "DESCRIPTION_CLOSE_TAGS_INDENT_TAGS" : "Un vector de etiquetas que cuando se cierran generan una linea en blanco entre las etiquetas", + "DESCRIPTION_CODE_FOLDING_ALWAY_USE_INDENT_FOLD" : "true para siempre generar marcadores plegables cuando cambia el nivel de indentación", + "DESCRIPTION_CODE_FOLDING_ENABLED" : "true para habilitar el colapsado del código", + "DESCRIPTION_CODE_FOLDING_HIDE_UNTIL_MOUSEOVER" : "true para hacer marcadores de sección plegables visible sólo cuando se mueve el cursor sobre el espacio a la izquierda del código", + "DESCRIPTION_CODE_FOLDING_MAX_FOLD_LEVEL" : "Limita a cuántos niveles de profundidad Colapsar todo aplica", + "DESCRIPTION_CODE_FOLDING_MIN_FOLD_SIZE" : "Mínima cantidad de líneas antes de que aparezca un icono de sección plegable", + "DESCRIPTION_CODE_FOLDING_SAVE_FOLD_STATES" : "true para recordar la secciones colapsadas luego de cerrar y abrir un archivo o proyecto", + "DESCRIPTION_ATTR_HINTS" : "Activar/desactivar las sugerencias de código para los atributos en HTML", + "DESCRIPTION_CSS_PROP_HINTS" : "Activar/desactivar las sugerencias de código para las propiedades en CSS/LESS/SCSS", + "DESCRIPTION_JS_HINTS" : "Activar/desactivar las sugerencias de código en JavaScript", + "DESCRIPTION_PREF_HINTS" : "Activar/desactivar las sugerencias de código para las Preferences", + "DESCRIPTION_SPECIAL_CHAR_HINTS" : "Activar/desactivar las sugerencias de código para las entidades en HTML", + "DESCRIPTION_SVG_HINTS" : "Activar/desactivar las sugerencias de código en SVG", + "DESCRIPTION_HTML_TAG_HINTS" : "Activar/desactivar las sugerencias de código para las etiquetas en HTML", + "DESCRIPTION_URL_CODE_HINTS" : "Activar/desactivar las sugerencias de código para las URLs en HTML & CSS/LESS/SCSS", + "DESCRIPTION_DRAG_DROP_TEXT" : "Activar/desactivar la funcionalidad de arrastrar y soltar", + "DESCRIPTION_HEALTH_DATA_TRACKING" : "Habilitar el seguimiento de los Reportes de estadísticas", + "DESCRIPTION_HIGHLIGHT_MATCHES" : "Habilita el resaltado automático de cadenas que coinciden en el documento", + "DESCRIPTION_HIGHLIGHT_MATCHES_SHOW_TOKEN" : "Resaltar todas las cadenas que coincidan con la cadena donde el cursor se encuentra (ninguna selección es necesaria)", + "DESCRIPTION_HIGHLIGHT_MATCHES_WORDS_ONLY" : "Resaltar sólo cuando la selección es una cadena completa", + "DESCRIPTION_INSERT_HINT_ON_TAB" : "true para insertar la sugerencia de código al presionar tab", + "DESCRIPTION_NO_HINTS_ON_DOT" : "true para no mostrar sugerencias de código automáticamente en JS cuando \".\" es tipeado", + "DESCRIPTION_JSLINT_OPTIONS" : "Un objeto con las opciones por defecto de JSLint", + "DESCRIPTION_JSLINT_OPTIONS_ASS" : "true para permitir expresiones de asignación", + "DESCRIPTION_JSLINT_OPTIONS_BITWISE" : "true para permitir los operadores bit a bit", + "DESCRIPTION_JSLINT_OPTIONS_BROWSER" : "true si las variables/funciones globales del navegador deben estar predefinidas", + "DESCRIPTION_JSLINT_OPTIONS_CLOSURE" : "true para permitir modismos de Google Closure", + "DESCRIPTION_JSLINT_OPTIONS_CONTINUE" : "true para permitir la declaración \"continue\"", + "DESCRIPTION_JSLINT_OPTIONS_COUCH" : "true si las variables/funciones globales de CouchDB deben estar predefinidas", + "DESCRIPTION_JSLINT_OPTIONS_DEBUG" : "true para permitir declaraciones del depurador", + "DESCRIPTION_JSLINT_OPTIONS_DEVEL" : "true si las variables/funciones globales del navegador para el desarrollo deben estar predefinidas", + "DESCRIPTION_JSLINT_OPTIONS_EQEQ" : "true para permitir == y !=", + "DESCRIPTION_JSLINT_OPTIONS_ES6" : "true si las variables/funciones globales de ES6 deben estar predefinidas", + "DESCRIPTION_JSLINT_OPTIONS_EVIL" : "true para permitir eval", + "DESCRIPTION_JSLINT_OPTIONS_FORIN" : "true para permitir \"for ... in\" sin filtrar", + "DESCRIPTION_JSLINT_OPTIONS_INDENT" : "Establece un ancho para el tab", + "DESCRIPTION_JSLINT_OPTIONS_MAXERR" : "La cantidad máxima de advertencias reportadas", + "DESCRIPTION_JSLINT_OPTIONS_MAXLEN" : "La cantidad máxima de caracters por línea", + "DESCRIPTION_JSLINT_OPTIONS_NEWCAP" : "true para permitir constructores sin mayúsculas", + "DESCRIPTION_JSLINT_OPTIONS_NODE" : "true si las variables/funciones globales de Node.js deben estar predefinidas", + "DESCRIPTION_JSLINT_OPTIONS_NOMEN" : "true para permitir el guión bajo delante de los identificadores", + "DESCRIPTION_JSLINT_OPTIONS_PASSFAIL" : "true para parar en el primer error", + "DESCRIPTION_JSLINT_OPTIONS_PLUSPLUS" : "true para permitir ++ y --", + "DESCRIPTION_JSLINT_OPTIONS_REGEXP" : "true para permitir . y [^...]. en RegExp", + "DESCRIPTION_JSLINT_OPTIONS_RHINO" : "true si las variables/funciones globales de Rhino deben estar predefinidas", + "DESCRIPTION_JSLINT_OPTIONS_SLOPPY" : "true para permitir que falte el pragma `use strict`", + "DESCRIPTION_JSLINT_OPTIONS_STUPID" : "true si los métodos bloqueantes ('...Sync') se pueden usar", + "DESCRIPTION_JSLINT_OPTIONS_SUB" : "true para permitir subíndices ineficiente", + "DESCRIPTION_JSLINT_OPTIONS_TODO" : "true para permitir comentarios TODO", + "DESCRIPTION_JSLINT_OPTIONS_UNPARAM" : "true para permitir parámetros no usados", + "DESCRIPTION_JSLINT_OPTIONS_VARS" : "true para permitir más de 1 var en una función", + "DESCRIPTION_JSLINT_OPTIONS_WHITE" : "true para ignorar las reglas espaciado", + "DESCRIPTION_LANGUAGE" : "Preferencias específicas de un lenguaje", + "DESCRIPTION_LANGUAGE_FILE_EXTENSIONS" : "Asignaciones adicionales de extensión de archivo a nombre del lenguaje", + "DESCRIPTION_LANGUAGE_FILE_NAMES" : "Asignaciones adicionales de nombre de archivo a nombre del lenguaje", + "DESCRIPTION_LINTING_ENABLED" : "true para habilitar la inspección del código", + "DESCRIPTION_ASYNC_TIMEOUT" : "El tiempo en milisegundos para esperar a los inspectores de código asincrónicos", + "DESCRIPTION_LINTING_PREFER" : "Vector de inspectores de código para ejecutar primero", + "DESCRIPTION_LIVE_DEV_MULTIBROWSER" : "true para habilitar la Vista previa dinámica experimental", + "DESCRIPTION_USE_PREFERED_ONLY" : "true para ejecutar solo los proveedores especificados en linting.prefer", + "DESCRIPTION_MAX_CODE_HINTS" : "Máxima cantidad de sugerencias de código mostradas", + "DESCRIPTION_PATH" : "Preferencias especificas para una ruta de archivo", + "DESCRIPTION_PROXY" : "La URL del servidor proxy utilizada para la instalación de extensiones", + "DESCRIPTION_SCROLL_PAST_END" : "true permitir el desplazamiento más allá del final del documento", + "DESCRIPTION_SHOW_CODE_HINTS" : "false para deshabilitar todas las sugerencias de código", + "DESCRIPTION_SHOW_CURSOR_WHEN_SELECTING" : "Mantiene el cursor intermitente visible cuando se tiene una selección de texto", + "DESCRIPTION_SHOW_LINE_NUMBERS" : "true para mostrar los números de líne a la izquierda del código", + "DESCRIPTION_SMART_INDENT" : "Indentar automáticamente cuando se crea un nuevo bloque", + "DESCRIPTION_SOFT_TABS" : "false para deshabilitar el comportamiento de \"soft tabs\"", + "DESCRIPTION_SORT_DIRECTORIES_FIRST" : "true para ordenar los directorios primero en el árbol del proyecto", + "DESCRIPTION_SPACE_UNITS" : "Cantidad de espacios para utilizar en la indentación basada en espacios", + "DESCRIPTION_STATIC_SERVER_PORT" : "Número de puerto que el servidor utilizará para la Vista previa dinámica", + "DESCRIPTION_STYLE_ACTIVE_LINE" : "true para resaltar la línea en la que se encuentra el cursor", + "DESCRIPTION_TAB_SIZE" : "Cantidad de espacios utilizados para el tab", + "DESCRIPTION_USE_TAB_CHAR" : "true para usar tabs en vez de espacios", + "DESCRIPTION_UPPERCASE_COLORS" : "true para generar color en mayúsculas en el editor de colores", + "DESCRIPTION_WORD_WRAP" : "Ajustar líneas que sobrepasen el ancho de la ventana", + "DESCRIPTION_DETECTED_EXCLUSIONS" : "Una lista de los archivos que se ha detectado que causan que Tern no funcione correctamente", + "DESCRIPTION_INFERENCE_TIMEOUT" : "La cantidad de veces después de la cual Tern dejara de intentar entender los archivos", + "DESCRIPTION_SHOW_ERRORS_IN_STATUS_BAR" : "true para mostrar errores en la barra de estado", + "DESCRIPTION_QUICK_VIEW_ENABLED" : "true para habilitar la Vista rápida", + "DESCRIPTION_EXTENSION_LESS_IMAGE_PREVIEW" : "true para mostrar vistas previas de imágenes para URLs sin extensión", + "DESCRIPTION_THEME" : "Seleccionar un tema para {APP_NAME}", + "DESCRIPTION_USE_THEME_SCROLLBARS" : "true para habilitar la barra de desplazamiento customizada", + "DESCRIPTION_LINTING_COLLAPSED" : "true para colapsar el panel de inspección de código", + "DESCRIPTION_FONT_FAMILY" : "Cambiar la fuente", + "DESCRIPTION_FONT_SIZE" : "Cambiar el tamaño de la fuente; ej., 13px", + "DESCRIPTION_FIND_IN_FILES_NODE" : "True to para habilitar búsquedas basadas en node", + "DESCRIPTION_FIND_IN_FILES_INSTANT" : "True to para habilitar la búsqueda instantánea", + "DESCRIPTION_FONT_SMOOTHING" : "Sólo para Mac: \"subpixel-antialiased\" para habilitar sub-pixel antialiasing o \"antialiased\" para antialiasing en escala de grises", + "DESCRIPTION_OPEN_PREFS_IN_SPLIT_VIEW" : "false para deshabilitar la apertura del archivo de preferencias en la vista dividida", + "DESCRIPTION_OPEN_USER_PREFS_IN_SECOND_PANE" : "false para abrir el archivo de preferencias en el panel de la izquierda/arriba", + "DEFAULT_PREFERENCES_JSON_HEADER_COMMENT" : "/*\n * Éste es un archivo únicamente de lectura con las preferencias soportadas\n * por {APP_NAME}.\n * Podes usar este archivo como referencia para modificar tu archivo de\n * preferencias \"brackets.json\" abierto en el otro panel.\n * Para más información sobre como usar las preferencias dentro de\n * {APP_NAME}, podes consultar la página web https://github.com/adobe/brackets/wiki/How-to-Use-Brackets#preferences\n */", + "DEFAULT_PREFERENCES_JSON_DEFAULT" : "Por defecto" }); -/* Last translated for c292e896761bc7d451a9e3b95bedd20d6b355d77 */ +/* Last translated for 1e5ba8f612dcf983d3cbffbbf1bfe455a90788c8 */ diff --git a/src/nls/fr/strings.js b/src/nls/fr/strings.js index 53c417b303a..714b1888254 100644 --- a/src/nls/fr/strings.js +++ b/src/nls/fr/strings.js @@ -194,6 +194,7 @@ define({ "FIND_IN_FILES_PAGING": "{0}—{1}", "FIND_IN_FILES_FILE_PATH": "{0} {2} {1}", "FIND_IN_FILES_EXPAND_COLLAPSE": "Cliquer tout en appuyant sur Ctrl/Cmd pour tout développer/tout réduire", + "FIND_IN_FILES_INDEXING": "Indexing for Instant Search\u2026", "REPLACE_IN_FILES_ERRORS_TITLE": "Erreurs de remplacement", "REPLACE_IN_FILES_ERRORS": "Les fichiers suivants n’ont pas été traités car ils ont été modifiés après l’opération de recherche ou ne sont pas accessibles en écriture.", @@ -657,7 +658,7 @@ define({ "EXPAND_ALL": "Développer tout", "COLLAPSE_CURRENT": "Réduire l’élément actif", "EXPAND_CURRENT": "Développer l’élément actif", - + // Descriptions of core preferences "DESCRIPTION_CLOSE_BRACKETS": "vrai pour fermer automatiquement les accolades, les crochets et les parenthèses", "DESCRIPTION_CLOSE_OTHERS_ABOVE": "faux pour supprimer l’option « Fermer les autres au-dessus » du menu contextuel Fichiers de travail", @@ -753,7 +754,9 @@ define({ "DESCRIPTION_USE_THEME_SCROLLBARS": "vrai pour autoriser les barres de défilement personnalisées", "DESCRIPTION_LINTING_COLLAPSED": "vrai pour réduire le panneau d’analyse lint", "DESCRIPTION_FONT_FAMILY": "Changer de famille de polices", - "DESCRIPTION_FONT_SIZE": "Modifier la taille de police, par ex. 13px", + "DESCRIPTION_FONT_SIZE": "Change font size; e.g. 13px", + "DESCRIPTION_FIND_IN_FILES_NODE": "true to enable node based search", + "DESCRIPTION_FIND_IN_FILES_INSTANT": "true to enable instant search", "DESCRIPTION_FONT_SMOOTHING": "Mac uniquement : « subpixel-antialiased » pour activer l’anticrénelage (lissage) des sous-pixels ou « antialiased » pour l’anticrénelage des niveaux de gris", "DESCRIPTION_OPEN_PREFS_IN_SPLIT_VIEW": "faux pour désactiver l’ouverture du fichier de préférences en mode fractionné", "DESCRIPTION_OPEN_USER_PREFS_IN_SECOND_PANE": "faux pour ouvrir le fichier de préférences de l’utilisateur dans le volet gauche/supérieur", diff --git a/src/nls/ja/strings.js b/src/nls/ja/strings.js index b26c82ab464..1bc13594201 100644 --- a/src/nls/ja/strings.js +++ b/src/nls/ja/strings.js @@ -194,6 +194,7 @@ define({ "FIND_IN_FILES_PAGING": "{0}—{1}", "FIND_IN_FILES_FILE_PATH": "{0} {2} {1}", "FIND_IN_FILES_EXPAND_COLLAPSE": "Ctrl / Command キーをクリックしてすべて展開 / 折りたたみ", + "FIND_IN_FILES_INDEXING": "Indexing for Instant Search\u2026", "REPLACE_IN_FILES_ERRORS_TITLE": "置換エラー", "REPLACE_IN_FILES_ERRORS": "次のファイルは検索の後で変更されているか、書き込むことができないため、変更されていません。", @@ -402,8 +403,8 @@ define({ "CMD_CSS_QUICK_EDIT_NEW_RULE": "新規ルール", "CMD_NEXT_DOC": "次の文書", "CMD_PREV_DOC": "前の文書", - "CMD_NEXT_DOC_LIST_ORDER": "リストの次のドキュメント", - "CMD_PREV_DOC_LIST_ORDER": "リストの前のドキュメント", + "CMD_NEXT_DOC_LIST_ORDER": "リストの次の文書", + "CMD_PREV_DOC_LIST_ORDER": "リストの前の文書", "CMD_SHOW_IN_TREE": "ファイルツリー内で表示", "CMD_SHOW_IN_EXPLORER": "エクスプローラーで表示", "CMD_SHOW_IN_FINDER": "Finder で表示", @@ -657,7 +658,7 @@ define({ "EXPAND_ALL": "すべて展開", "COLLAPSE_CURRENT": "現在のコードをたたむ", "EXPAND_CURRENT": "現在のコードを展開", - + // Descriptions of core preferences "DESCRIPTION_CLOSE_BRACKETS": "中括弧、角括弧、丸括弧を自動的に閉じるには true", "DESCRIPTION_CLOSE_OTHERS_ABOVE": "「作業中ファイル」コンテキストメニューから「上をすべて閉じる」を削除するには false", @@ -753,7 +754,9 @@ define({ "DESCRIPTION_USE_THEME_SCROLLBARS": "カスタムスクロールバーを許可するには true", "DESCRIPTION_LINTING_COLLAPSED": "構文チェックパネルを閉じるには true", "DESCRIPTION_FONT_FAMILY": "フォントファミリーを変更", - "DESCRIPTION_FONT_SIZE": "フォントサイズを変更 (例 : 13 px)", + "DESCRIPTION_FONT_SIZE": "Change font size; e.g. 13px", + "DESCRIPTION_FIND_IN_FILES_NODE": "true to enable node based search", + "DESCRIPTION_FIND_IN_FILES_INSTANT": "true to enable instant search", "DESCRIPTION_FONT_SMOOTHING": "Mac のみ : サブピクセルアンチエイリアスを有効にするには subpixel-antialiased、グレースケールアンチエイリアスの場合は antialiased", "DESCRIPTION_OPEN_PREFS_IN_SPLIT_VIEW": "分割ビューで環境設定ファイルを開けないようにするには false", "DESCRIPTION_OPEN_USER_PREFS_IN_SECOND_PANE": "左側/上部のペインでユーザーの環境設定ファイルを開くには false", diff --git a/src/nls/root/strings.js b/src/nls/root/strings.js index ffab1ae375f..c3728ca8067 100644 --- a/src/nls/root/strings.js +++ b/src/nls/root/strings.js @@ -194,7 +194,7 @@ define({ "FIND_IN_FILES_PAGING" : "{0}—{1}", "FIND_IN_FILES_FILE_PATH" : "{0} {2} {1}", // We should use normal dashes on Windows instead of em dash eventually "FIND_IN_FILES_EXPAND_COLLAPSE" : "Ctrl/Cmd click to expand/collapse all", - "FIND_IN_FILES_INDEXING" : "Indexing for Instant Search...", + "FIND_IN_FILES_INDEXING" : "Indexing for Instant Search\u2026", "REPLACE_IN_FILES_ERRORS_TITLE" : "Replace Errors", "REPLACE_IN_FILES_ERRORS" : "The following files weren't modified because they changed after the search or couldn't be written.", @@ -754,9 +754,9 @@ define({ "DESCRIPTION_USE_THEME_SCROLLBARS" : "true to allow custom scroll bars", "DESCRIPTION_LINTING_COLLAPSED" : "true to collapse linting panel", "DESCRIPTION_FONT_FAMILY" : "Change font family", - "DESCRIPTION_FONT_SIZE" : "Change font size; e.g, 13px", - "DESCRIPTION_FIND_IN_FILES_NODE" : "True to enable node based search", - "DESCRIPTION_FIND_IN_FILES_INSTANT" : "True to enable instant search", + "DESCRIPTION_FONT_SIZE" : "Change font size; e.g. 13px", + "DESCRIPTION_FIND_IN_FILES_NODE" : "true to enable node based search", + "DESCRIPTION_FIND_IN_FILES_INSTANT" : "true to enable instant search", "DESCRIPTION_FONT_SMOOTHING" : "Mac-only: \"subpixel-antialiased\" to enable sub-pixel antialiasing or \"antialiased\" for gray scale antialiasing", "DESCRIPTION_OPEN_PREFS_IN_SPLIT_VIEW" : "false to disable opening preferences file in split view", "DESCRIPTION_OPEN_USER_PREFS_IN_SECOND_PANE" : "false to open user preferences file in left/top pane", diff --git a/src/search/FindInFiles.js b/src/search/FindInFiles.js index 4f99f34d67c..0a0bb6ce9cd 100644 --- a/src/search/FindInFiles.js +++ b/src/search/FindInFiles.js @@ -45,7 +45,8 @@ define(function (require, exports, module) { PerfUtils = require("utils/PerfUtils"), NodeDomain = require("utils/NodeDomain"), FileUtils = require("file/FileUtils"), - FindUtils = require("search/FindUtils"); + FindUtils = require("search/FindUtils"), + HealthLogger = require("utils/HealthLogger"); var _bracketsPath = FileUtils.getNativeBracketsDirectoryPath(), _modulePath = FileUtils.getNativeModuleDirectoryPath(module), @@ -94,13 +95,15 @@ define(function (require, exports, module) { DocumentManager.on("fileNameChange", _fileNameChangeHandler); } - function nodeFileCacheComplete() { + function nodeFileCacheComplete(event, numFiles, cacheSize) { + var projectName = ProjectManager.getProjectRoot().name || "noName00"; FindUtils.setInstantSearchDisabled(false); // Node search could be disabled if some error has happened in node. But upon // project change, if we get this message, then it means that node search is working, // we re-enable node search. If a search fails, node search will be switched off eventually. FindUtils.setNodeSearchDisabled(false); FindUtils.notifyIndexingFinished(); + HealthLogger.setProjectDetail(projectName, numFiles, cacheSize); } /** @@ -853,7 +856,7 @@ define(function (require, exports, module) { /** * Gets the next page of search recults to append to the result set. - * @returns {object} A promise that's resolved with the search results or rejected when the find competes. + * @return {object} A promise that's resolved with the search results or rejected when the find competes. */ function getNextPageofSearchResults() { var searchDeferred = $.Deferred(); diff --git a/src/search/FindUtils.js b/src/search/FindUtils.js index caaf6854fd1..c55b487eb9e 100644 --- a/src/search/FindUtils.js +++ b/src/search/FindUtils.js @@ -58,7 +58,7 @@ define(function (require, exports, module) { /** * returns true if the used disabled node based search in his preferences - * @returns {boolean} + * @return {boolean} */ function _prefNodeSearchDisabled() { return !PreferencesManager.get("findInFiles.nodeSearch"); @@ -66,7 +66,7 @@ define(function (require, exports, module) { /** * returns true if the used instant search in his preferences - * @returns {boolean} + * @return {boolean} */ function _prefInstantSearchDisabled() { return !PreferencesManager.get("findInFiles.instantSearch"); @@ -449,7 +449,7 @@ define(function (require, exports, module) { /** * if instant search is disabled, this will return true we can only do instant search through node - * @returns {boolean} + * @return {boolean} */ function isInstantSearchDisabled() { return _prefNodeSearchDisabled() || _prefInstantSearchDisabled() || nodeSearchDisabled || instantSearchDisabled; @@ -469,7 +469,7 @@ define(function (require, exports, module) { /** * if node search is disabled, this will return true - * @returns {boolean} + * @return {boolean} */ function isNodeSearchDisabled() { return _prefNodeSearchDisabled() || nodeSearchDisabled; @@ -477,7 +477,7 @@ define(function (require, exports, module) { /** * check if a search is progressing in node - * @returns {Boolean} true if search is processing in node + * @return {Boolean} true if search is processing in node */ function isNodeSearchInProgress() { if (nodeSearchCount === 0) { @@ -536,7 +536,7 @@ define(function (require, exports, module) { /** * Return true if indexing is in pregress in node - * @returns {boolean} true if files are being indexed in node + * @return {boolean} true if files are being indexed in node */ function isIndexingInProgress() { return indexingInProgress; @@ -553,12 +553,22 @@ define(function (require, exports, module) { /** * check if results should be collapsed - * @returns {boolean} true if results should be collapsed + * @return {boolean} true if results should be collapsed */ function isCollapsedResults() { return collapseResults; } + /** + * Returns the health data pertaining to Find in files + */ + function getHealthReport() { + return { + prefNodeSearchDisabled : _prefNodeSearchDisabled(), + prefInstantSearchDisabled : _prefInstantSearchDisabled() + }; + } + exports.parseDollars = parseDollars; exports.getInitialQuery = getInitialQuery; exports.hasCheckedMatches = hasCheckedMatches; @@ -575,6 +585,7 @@ define(function (require, exports, module) { exports.isIndexingInProgress = isIndexingInProgress; exports.setCollapseResults = setCollapseResults; exports.isCollapsedResults = isCollapsedResults; + exports.getHealthReport = getHealthReport; exports.ERROR_FILE_CHANGED = "fileChanged"; // event notification functions diff --git a/src/search/node/FindInFilesDomain.js b/src/search/node/FindInFilesDomain.js index c3195226507..4561d1a41d0 100644 --- a/src/search/node/FindInFilesDomain.js +++ b/src/search/node/FindInFilesDomain.js @@ -48,7 +48,8 @@ maxerr: 50, node: true */ lastSearchedIndex = 0, crawlComplete = false, crawlEventSent = false, - collapseResults = false; + collapseResults = false, + cacheSize = 0; /** * Copied from StringUtils.js @@ -189,7 +190,7 @@ maxerr: 50, node: true */ /** * Get the contents of a file given the path * @param {string} filePath full file path - * @returns {string} contents or null if no contents + * @return {string} contents or null if no contents */ function getFileContentsForFile(filePath) { if (projectCache[filePath] || projectCache[filePath] === "") { @@ -324,9 +325,13 @@ maxerr: 50, node: true */ setTimeout(fileCrawler, 1000); return; } - var i = 0; + var i = 0, + contents = ""; for (i = 0; i < 10 && currentCrawlIndex < files.length; i++) { - getFileContentsForFile(files[currentCrawlIndex]); + contents = getFileContentsForFile(files[currentCrawlIndex]); + if (contents) { + cacheSize += contents.length; + } currentCrawlIndex++; } if (currentCrawlIndex < files.length) { @@ -336,7 +341,7 @@ maxerr: 50, node: true */ crawlComplete = true; if (!crawlEventSent) { crawlEventSent = true; - _domainManager.emitEvent("FindInFiles", "crawlComplete"); + _domainManager.emitEvent("FindInFiles", "crawlComplete", [files.length, cacheSize]); } setTimeout(fileCrawler, 1000); } @@ -350,6 +355,7 @@ maxerr: 50, node: true */ function initCache(fileList) { files = fileList; currentCrawlIndex = 0; + cacheSize = 0; clearProjectCache(); crawlEventSent = false; } @@ -358,7 +364,7 @@ maxerr: 50, node: true */ * Counts the number of matches matching the queryExpr in the given contents * @param {String} contents The contents to search on * @param {Object} queryExpr - * @returns {number} number of matches + * @return {number} number of matches */ function countNumMatches(contents, queryExpr) { if (!contents) { @@ -372,7 +378,7 @@ maxerr: 50, node: true */ * Get the total number of matches from all the files in fileList * @param {array} fileList file path array * @param {Object} queryExpr - * @returns {Number} total number of matches + * @return {Number} total number of matches */ function getNumMatches(fileList, queryExpr) { var i, @@ -395,7 +401,7 @@ maxerr: 50, node: true */ * Do a search with the searchObject context and return the results * @param {Object} searchObject * @param {boolean} nextPages set to true if to indicate that next page of an existing page is being fetched - * @returns {Object} search results + * @return {Object} search results */ function doSearch(searchObject, nextPages) { @@ -496,7 +502,7 @@ maxerr: 50, node: true */ /** * Gets the next page of results of the ongoing search - * @returns {Object} search results + * @return {Object} search results */ function getNextPage() { var send_object = { @@ -514,7 +520,7 @@ maxerr: 50, node: true */ /** * Gets all the results for the saved search query if present or empty search results - * @returns {Object} The results object + * @return {Object} The results object */ function getAllResults() { var send_object = { @@ -641,7 +647,18 @@ maxerr: 50, node: true */ domainManager.registerEvent( "FindInFiles", // domain name "crawlComplete", // event name - [] + [ + { + name: "numFiles", + type: "number", + description: "number of files cached" + }, + { + name: "cacheSize", + type: "number", + description: "The size of the file cache epressesd as string length of files" + } + ] ); setTimeout(fileCrawler, 5000); } diff --git a/src/utils/HealthLogger.js b/src/utils/HealthLogger.js index b7454184d75..5828817be8e 100644 --- a/src/utils/HealthLogger.js +++ b/src/utils/HealthLogger.js @@ -34,6 +34,8 @@ define(function (require, exports, module) { LanguageManager = require("language/LanguageManager"), FileUtils = require("file/FileUtils"), PerfUtils = require("utils/PerfUtils"), + FindUtils = require("search/FindUtils"), + StringUtils = require("utils/StringUtils"), HEALTH_DATA_STATE_KEY = "HealthData.Logs", logHealthData = true; @@ -47,35 +49,29 @@ define(function (require, exports, module) { /** * All the logging functions should be disabled if this returns false - * @returns {boolean} true if health data can be logged + * @return {boolean} true if health data can be logged */ function shouldLogHealthData() { return logHealthData; } - /** - * Return the Performance related data - * @returns {Object} Performance Data aggregated till now - */ - function getPerformanceData() { - return PerfUtils.getHealthReport(); - } - /** * Return all health data logged till now stored in the state prefs - * @returns {Object} Health Data aggregated till now + * @return {Object} Health Data aggregated till now */ function getStoredHealthData() { - return PreferencesManager.getViewState(HEALTH_DATA_STATE_KEY); + var storedData = PreferencesManager.getViewState(HEALTH_DATA_STATE_KEY) || {}; + return storedData; } /** * Return the aggregate of all health data logged till now from all sources - * @returns {Object} Health Data aggregated till now + * @return {Object} Health Data aggregated till now */ function getAggregatedHealthData() { var healthData = getStoredHealthData(); - $.extend(healthData, getPerformanceData()); + $.extend(healthData, PerfUtils.getHealthReport()); + $.extend(healthData, FindUtils.getHealthReport()); return healthData; } @@ -92,7 +88,7 @@ define(function (require, exports, module) { /** * Returns health data logged for the given key - * @returns {Object} Health Data object for the key or undefined if no health data stored + * @return {Object} Health Data object for the key or undefined if no health data stored */ function getHealthDataLog(key) { var healthData = getStoredHealthData(); @@ -158,12 +154,33 @@ define(function (require, exports, module) { } } + /** + * Sets the project details(a probably unique prjID, number of files in the project and the node cache size) in the health log + * The name of the project is never saved into the health data log, only the hash(name) is for privacy requirements. + * @param {string} projectName The name of the project + * @param {number} numFiles The number of file in the project + * @param {number} cacheSize The node file cache memory consumed by the project + */ + function setProjectDetail(projectName, numFiles, cacheSize) { + var projectNameHash = StringUtils.hashCode(projectName), + FIFLog = getHealthDataLog("ProjectDetails"); + if (!FIFLog) { + FIFLog = {}; + } + FIFLog["prj" + projectNameHash] = { + numFiles : numFiles, + cacheSize : cacheSize + }; + setHealthDataLog("ProjectDetails", FIFLog); + } + // Define public API exports.getHealthDataLog = getHealthDataLog; exports.setHealthDataLog = setHealthDataLog; exports.getAggregatedHealthData = getAggregatedHealthData; exports.clearHealthData = clearHealthData; exports.fileOpened = fileOpened; + exports.setProjectDetail = setProjectDetail; exports.setHealthLogsEnabled = setHealthLogsEnabled; exports.shouldLogHealthData = shouldLogHealthData; exports.init = init; diff --git a/src/utils/PerfUtils.js b/src/utils/PerfUtils.js index 57a4e54fcf7..06d046d57f5 100644 --- a/src/utils/PerfUtils.js +++ b/src/utils/PerfUtils.js @@ -309,7 +309,7 @@ define(function (require, exports, module) { * @param {Array} entry An array or a single value * @param {Boolean} aggregateStats If set, the returned value will be aggregated in the form - * - * @returns {String} a single value, or comma separated values in an array or + * @return {String} a single value, or comma separated values in an array or * if aggregateStats is set */ function getValueAsString(entry, aggregateStats) { @@ -366,7 +366,7 @@ define(function (require, exports, module) { /** * Returns the Performance metrics to be logged for health report - * @returns {Object} An object with the health data logs to be sent + * @return {Object} An object with the health data logs to be sent */ function getHealthReport() { var healthReport = { diff --git a/src/utils/StringUtils.js b/src/utils/StringUtils.js index 35529174d3f..2378a8dd195 100644 --- a/src/utils/StringUtils.js +++ b/src/utils/StringUtils.js @@ -21,7 +21,11 @@ * */ -/*jslint vars: true, plusplus: true, devel: true, nomen: true, regexp: true, indent: 4, maxerr: 50 */ +/* The hash code routne is taken from http://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript-jquery + @CC wiki attribution: esmiralha +*/ + +/*jslint vars: true, plusplus: true, devel: true, nomen: true, regexp: true, indent: 4, maxerr: 50, bitwise: true */ /*global define, brackets */ /** @@ -116,7 +120,7 @@ define(function (require, exports, module) { * Returns true if the given string starts with the given prefix. * @param {String} str * @param {String} prefix - * @returns {Boolean} + * @return {Boolean} */ function startsWith(str, prefix) { return str.slice(0, prefix.length) === prefix; @@ -221,6 +225,26 @@ define(function (require, exports, module) { } } + /** + * Computes a 32bit hash from the given string + * Taken from http://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript-jquery + * @CC wiki attribution: esmiralha + * @param {string} str The string for which hash is to be computed + * @return {number} The 32-bit hash + */ + function hashCode(str) { + var hash = 0, i, chr, len; + if (str.length === 0) { + return hash; + } + for (i = 0, len = str.length; i < len; i++) { + chr = str.charCodeAt(i); + hash = ((hash << 5) - hash) + chr; + hash |= 0; // Convert to 32bit integer + } + return hash; + } + // Define public API exports.format = format; exports.regexEscape = regexEscape; @@ -233,4 +257,5 @@ define(function (require, exports, module) { exports.endsWith = endsWith; exports.prettyPrintBytes = prettyPrintBytes; exports.truncate = truncate; + exports.hashCode = hashCode; }); diff --git a/test/spec/FileFilters-test.js b/test/spec/FileFilters-test.js index b4241ca7b61..7051e04e33c 100644 --- a/test/spec/FileFilters-test.js +++ b/test/spec/FileFilters-test.js @@ -533,12 +533,6 @@ define(function (require, exports, module) { // it's just these few functions it's probably okay to just keep them in sync manually, // but if this gets more complicated we should probably figure out how to break them out. function openSearchBar(scope) { - // Make sure search bar from previous test has animated out fully - runs(function () { - waitsFor(function () { - return $(".modal-bar").length === 0; - }, "search bar close"); - }); runs(function () { FindInFiles._searchDone = false; FindInFilesUI._showFindBar(scope); diff --git a/test/spec/FindInFiles-test.js b/test/spec/FindInFiles-test.js index c19077198d2..ccfe912e6fc 100644 --- a/test/spec/FindInFiles-test.js +++ b/test/spec/FindInFiles-test.js @@ -38,7 +38,9 @@ define(function (require, exports, module) { StringUtils = require("utils/StringUtils"), Strings = require("strings"), _ = require("thirdparty/lodash"); - + + var PreferencesManager; + var promisify = Async.promisify; // for convenience describe("FindInFiles", function () { @@ -70,32 +72,36 @@ define(function (require, exports, module) { testWindow = w; // Load module instances from brackets.test - CommandManager = testWindow.brackets.test.CommandManager; - DocumentManager = testWindow.brackets.test.DocumentManager; - EditorManager = testWindow.brackets.test.EditorManager; - FileFilters = testWindow.brackets.test.FileFilters; - FileSystem = testWindow.brackets.test.FileSystem; - File = testWindow.brackets.test.File; - FindInFiles = testWindow.brackets.test.FindInFiles; - FindInFilesUI = testWindow.brackets.test.FindInFilesUI; - ProjectManager = testWindow.brackets.test.ProjectManager; - MainViewManager = testWindow.brackets.test.MainViewManager; - $ = testWindow.$; + CommandManager = testWindow.brackets.test.CommandManager; + DocumentManager = testWindow.brackets.test.DocumentManager; + EditorManager = testWindow.brackets.test.EditorManager; + FileFilters = testWindow.brackets.test.FileFilters; + FileSystem = testWindow.brackets.test.FileSystem; + File = testWindow.brackets.test.File; + FindInFiles = testWindow.brackets.test.FindInFiles; + FindInFilesUI = testWindow.brackets.test.FindInFilesUI; + ProjectManager = testWindow.brackets.test.ProjectManager; + MainViewManager = testWindow.brackets.test.MainViewManager; + $ = testWindow.$; + PreferencesManager = testWindow.brackets.test.PreferencesManager; + PreferencesManager.set("findInFiles.nodeSearch", false); + PreferencesManager.set("findInFiles.instantSearch", false); }); }); afterLast(function () { - CommandManager = null; - DocumentManager = null; - EditorManager = null; - FileSystem = null; - File = null; - FindInFiles = null; - FindInFilesUI = null; - ProjectManager = null; - MainViewManager = null; - $ = null; - testWindow = null; + CommandManager = null; + DocumentManager = null; + EditorManager = null; + FileSystem = null; + File = null; + FindInFiles = null; + FindInFilesUI = null; + ProjectManager = null; + MainViewManager = null; + $ = null; + testWindow = null; + PreferencesManager = null; SpecRunnerUtils.closeTestWindow(); SpecRunnerUtils.removeTempDirectory(); }); @@ -118,7 +124,6 @@ define(function (require, exports, module) { } function openSearchBar(scope, showReplace) { - waitForSearchBarClose(); runs(function () { FindInFiles._searchDone = false; FindInFilesUI._showFindBar(scope, showReplace); @@ -425,22 +430,19 @@ define(function (require, exports, module) { }); }); - it("should dismiss dialog and show panel when there are results", function () { + it("should keep dialog and show panel when there are results", function () { var filePath = testPath + "/foo.js", fileEntry = FileSystem.getFileForPath(filePath); openSearchBar(fileEntry); executeSearch("callFoo"); - waitsFor(function () { - return ($(".modal-bar").length === 0); - }, "search bar close"); - + // With instant search, the Search Bar should not close on a search runs(function () { var fileResults = FindInFiles.searchModel.results[filePath]; expect(fileResults).toBeTruthy(); expect($("#find-in-files-results").is(":visible")).toBeTruthy(); - expect($(".modal-bar").length).toBe(0); + expect($(".modal-bar").length).toBe(1); }); }); @@ -503,13 +505,15 @@ define(function (require, exports, module) { expect($firstHit.hasClass("file-section")).toBeFalsy(); $firstHit.click(); - // Verify current document - editor = EditorManager.getActiveEditor(); - expect(editor.document.file.fullPath).toEqual(filePath); + setTimeout(function () { + // Verify current document + editor = EditorManager.getActiveEditor(); + expect(editor.document.file.fullPath).toEqual(filePath); - // Verify selection - expect(editor.getSelectedText().toLowerCase() === "foo"); - waitsForDone(CommandManager.execute(Commands.FILE_CLOSE_ALL), "closing all files"); + // Verify selection + expect(editor.getSelectedText().toLowerCase() === "foo"); + waitsForDone(CommandManager.execute(Commands.FILE_CLOSE_ALL), "closing all files"); + }, 500); }); }); @@ -746,7 +750,6 @@ define(function (require, exports, module) { it("should jump to last page, then page backward, displaying correct contents at each step", function () { openProject(SpecRunnerUtils.getTestPath("/spec/FindReplace-test-files-manyhits")); - openSearchBar(); executeSearch("find this"); diff --git a/test/spec/ProjectModel-test.js b/test/spec/ProjectModel-test.js index bde96115ac5..f0faf8e863b 100644 --- a/test/spec/ProjectModel-test.js +++ b/test/spec/ProjectModel-test.js @@ -128,7 +128,7 @@ define(function (require, exports, module) { rootPath = rootPath || "/"; var root = { fullPath: rootPath, - visit: function (visitor, errorHandler) { + visit: function (visitor, options, errorHandler) { visited = true; if (!filelist && error) { errorHandler(error); @@ -1450,4 +1450,4 @@ define(function (require, exports, module) { }); }); }); -}); \ No newline at end of file +}); diff --git a/test/spec/UpdateNotification-test.js b/test/spec/UpdateNotification-test.js index fac6045e09e..f9a28374317 100644 --- a/test/spec/UpdateNotification-test.js +++ b/test/spec/UpdateNotification-test.js @@ -234,7 +234,7 @@ define(function (require, exports, module) { } it("should fall back to de.json when de-ch.json is not available", function () { - var defaultUpdateUrl = testWindow.brackets.config.update_info_url + "de.json"; + var defaultUpdateUrl = testWindow.brackets.config.update_info_url + "?locale=de"; setupAjaxSpy(defaultUpdateUrl); @@ -243,7 +243,7 @@ define(function (require, exports, module) { runs(function () { var promise = UpdateNotification.checkForUpdate(true, updateInfo); - waitsForDone(promise, "Check for updates"); + waitsForDone(promise, "Check for updates", 10000); }); runs(function () { @@ -253,7 +253,7 @@ define(function (require, exports, module) { }); it("should fall back to en.json when it.json is not available", function () { - var defaultUpdateUrl = testWindow.brackets.config.update_info_url + "en.json"; + var defaultUpdateUrl = testWindow.brackets.config.update_info_url + "?locale=en"; setupAjaxSpy(defaultUpdateUrl); @@ -262,7 +262,7 @@ define(function (require, exports, module) { runs(function () { var promise = UpdateNotification.checkForUpdate(true, updateInfo); - waitsForDone(promise, "Check for updates"); + waitsForDone(promise, "Check for updates", 10000); }); runs(function () {