Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Matheus Faustino 2018-09-10 23:15:24 -03:00
commit 59e494c0eb
No known key found for this signature in database
GPG Key ID: A132F02D41D2F4A6
60 changed files with 1285 additions and 203 deletions

View File

@ -121,6 +121,12 @@
"cm_resizeGripHint": { "cm_resizeGripHint": {
"message": "Dvojklikem maximalizujete/obnovíte výšku" "message": "Dvojklikem maximalizujete/obnovíte výšku"
}, },
"cm_selectByTokens": {
"message": "Poklepáním vybírat tokeny"
},
"cm_selectByTokensTooltip": {
"message": "Příklad tokenů: .foo-bar-2 #aabbcc 0.32 !important\nJe-li vypnuto, jsou vybírána slova oddělená interpunkcí."
},
"cm_smartIndent": { "cm_smartIndent": {
"message": "Použít chytré odsazení" "message": "Použít chytré odsazení"
}, },
@ -275,6 +281,12 @@
"findStylesInlineTooltip": { "findStylesInlineTooltip": {
"message": "Zobrazit výsledky vyhledávání v tomto okně." "message": "Zobrazit výsledky vyhledávání v tomto okně."
}, },
"genericAdd": {
"message": "Přidat"
},
"genericClone": {
"message": "Duplikovat"
},
"genericDisabledLabel": { "genericDisabledLabel": {
"message": "Zakázáno" "message": "Zakázáno"
}, },
@ -394,6 +406,9 @@
"linkGetStyles": { "linkGetStyles": {
"message": "Získat styly" "message": "Získat styly"
}, },
"linkTranslate": {
"message": "Pomoci s překladem"
},
"linterCSSLintIncompatible": { "linterCSSLintIncompatible": {
"message": "CSSLint nepodporuje předprocesor $preprocessorname$", "message": "CSSLint nepodporuje předprocesor $preprocessorname$",
"placeholders": { "placeholders": {
@ -442,6 +457,9 @@
"liveReloadError": { "liveReloadError": {
"message": "Při sledování souboru došlo k chybě" "message": "Při sledování souboru došlo k chybě"
}, },
"liveReloadInstallHint": {
"message": "Živá aktualizace je povolena, takže nainstalovaný styl bude automaticky aktualizován při externích změnách, dokud budou tento list a list zdrojového souboru otevřeny."
},
"liveReloadLabel": { "liveReloadLabel": {
"message": "Živá aktualizace" "message": "Živá aktualizace"
}, },
@ -625,6 +643,12 @@
"prefShowBadge": { "prefShowBadge": {
"message": "Počet aktivních stylů pro současnou stránku" "message": "Počet aktivních stylů pro současnou stránku"
}, },
"previewLabel": {
"message": "Živý náhled"
},
"previewTooltip": {
"message": "Dočasně použije změny bez uložení.\nUložte styl pro trvalé zachování změn."
},
"replace": { "replace": {
"message": "Nahradit" "message": "Nahradit"
}, },
@ -682,6 +706,9 @@
"sectionRemove": { "sectionRemove": {
"message": "Odstranit sekci" "message": "Odstranit sekci"
}, },
"sectionRestore": {
"message": "Obnovit odstraněnou sekci"
},
"shortcuts": { "shortcuts": {
"message": "Zkratky" "message": "Zkratky"
}, },
@ -938,6 +965,9 @@
"usercssReplaceTemplateName": { "usercssReplaceTemplateName": {
"message": "Prázdné @name nahrazuje výchozí šablonu" "message": "Prázdné @name nahrazuje výchozí šablonu"
}, },
"usercssReplaceTemplateSectionBody": {
"message": "Sem vložte kód…"
},
"versionInvalidOlder": { "versionInvalidOlder": {
"message": "Tato verze je starší než verze nainstalovaného stylu." "message": "Tato verze je starší než verze nainstalovaného stylu."
}, },

View File

@ -38,7 +38,7 @@
"message": "Funktioniert nicht mit minified CSS" "message": "Funktioniert nicht mit minified CSS"
}, },
"appliesRegexpOption": { "appliesRegexpOption": {
"message": "URLs, die mit dem Regulären Ausdruck übereinstimmen" "message": "URLs, die mit der RegExp übereinstimmen"
}, },
"appliesRemove": { "appliesRemove": {
"message": "Löschen" "message": "Löschen"
@ -74,7 +74,7 @@
"message": "Nach Updates suchen" "message": "Nach Updates suchen"
}, },
"checkAllUpdatesForce": { "checkAllUpdatesForce": {
"message": "Nochmals überprüfen, ich habe keine Styles bearbeitet!" "message": "Nochmal prüfen, ich habe keine Styles bearbeitet!"
}, },
"checkForUpdate": { "checkForUpdate": {
"message": "Nach Update suchen" "message": "Nach Update suchen"
@ -241,7 +241,7 @@
"message": "zur Supportseite" "message": "zur Supportseite"
}, },
"externalUsercssDocument": { "externalUsercssDocument": {
"message": "Dokumentation für Usercss" "message": "Dokumentation für UserCSS"
}, },
"filteredStyles": { "filteredStyles": {
"message": "$numShown$ von $numTotal$ gesamt", "message": "$numShown$ von $numTotal$ gesamt",
@ -476,7 +476,7 @@
"message": "Anzahl der \"Gilt für\" Elemente" "message": "Anzahl der \"Gilt für\" Elemente"
}, },
"manageNewStyleAsUsercss": { "manageNewStyleAsUsercss": {
"message": "als Usercss" "message": "als UserCSS"
}, },
"manageNewUI": { "manageNewUI": {
"message": "Neues Verwaltungs-Layout" "message": "Neues Verwaltungs-Layout"
@ -497,13 +497,13 @@
"message": "(Diese Styles wurden nicht durch userstyles.org installiert)" "message": "(Diese Styles wurden nicht durch userstyles.org installiert)"
}, },
"manageOnlyNonUsercss": { "manageOnlyNonUsercss": {
"message": "Keine Usercss Styles" "message": "Keine UserCSS Styles"
}, },
"manageOnlyUpdates": { "manageOnlyUpdates": {
"message": "Nur mit Updates oder Problemen" "message": "Nur mit Updates oder Problemen"
}, },
"manageOnlyUsercss": { "manageOnlyUsercss": {
"message": "Nur Usercss Styles" "message": "Nur UserCSS Styles"
}, },
"menuShowBadge": { "menuShowBadge": {
"message": "Anzahl der aktiven Styles anzeigen" "message": "Anzahl der aktiven Styles anzeigen"
@ -539,7 +539,7 @@
"message": "Style wirkt sich auch auf iframes der anvisierten Domain aus.\nIframe-spezifisches CSS ist dann möglich wie folgt:\nhtml[stylus-iframe$=\"twitter.com\"] h1 { display:none }" "message": "Style wirkt sich auch auf iframes der anvisierten Domain aus.\nIframe-spezifisches CSS ist dann möglich wie folgt:\nhtml[stylus-iframe$=\"twitter.com\"] h1 { display:none }"
}, },
"optionsAdvancedNewStyleAsUsercss": { "optionsAdvancedNewStyleAsUsercss": {
"message": "Schreibe neuen Style als Usercss" "message": "Schreibe neuen Style als UserCSS"
}, },
"optionsBadgeDisabled": { "optionsBadgeDisabled": {
"message": "Hintergrundfarbe wenn deaktiviert" "message": "Hintergrundfarbe wenn deaktiviert"
@ -608,7 +608,7 @@
"message": "Gesamtzahl der Seiten" "message": "Gesamtzahl der Seiten"
}, },
"parseUsercssError": { "parseUsercssError": {
"message": "Usercss parsen fehlgeschlagen:" "message": "UserCSS parsen fehlgeschlagen:"
}, },
"popupBorders": { "popupBorders": {
"message": "Weiße Rahmen an den Seiten hinzufügen" "message": "Weiße Rahmen an den Seiten hinzufügen"
@ -668,7 +668,7 @@
"message": "Trefferanzahl im Code und in \"Gilt für\" Feldern" "message": "Trefferanzahl im Code und in \"Gilt für\" Feldern"
}, },
"searchRegexp": { "searchRegexp": {
"message": "Verwende die /re/ Syntax zur Suche als Regulärer Ausdruck" "message": "Verwende die /re/ Syntax zur Suche als RegExp"
}, },
"searchResultInstallCount": { "searchResultInstallCount": {
"message": "Gesamte Installationen" "message": "Gesamte Installationen"
@ -689,7 +689,7 @@
"message": "Inhalte durchsuchen" "message": "Inhalte durchsuchen"
}, },
"searchStylesHelp": { "searchStylesHelp": {
"message": "Die </>-Taste (Numpad) fokussiert das Suchfeld.\nEinfacher Text: Sucht im Namen, Quelltext, Homepage und anvisierten URLs. Wörter mit weniger als 3 Buchstaben werden ignoriert.\nStyles, die auf eine URL passen: Stelle der Suche <url:> voran, z.B. <url:https://github.com/openstyles/stylus>\nReguläre Ausdrücke: Nutze Slash und Flags, z.B. </body.*?\\ba\\b/simguy>\nSuche nach genauem Ausdruck: Anführungszeichen verwenden, z.B. <\".header ~ div\"> " "message": "Die </>-Taste (Numpad) fokussiert das Suchfeld.\nEinfacher Text: Sucht im Namen, Quelltext, Homepage und anvisierten URLs. Wörter mit weniger als 3 Buchstaben werden ignoriert.\nStyles, die auf eine URL passen: Stelle der Suche <url:> voran, z.B. <url:https://github.com/openstyles/stylus>\nRegExp: Nutze Slash und Flags, z.B. </body.*?\\ba\\b/simguy>\nSuche nach genauem Ausdruck: Anführungszeichen verwenden, z.B. <\".header ~ div\"> "
}, },
"sectionAdd": { "sectionAdd": {
"message": "Weiteren Bereich hinzufügen" "message": "Weiteren Bereich hinzufügen"
@ -731,7 +731,7 @@
"message": "Inhalte sortieren" "message": "Inhalte sortieren"
}, },
"styleBadRegexp": { "styleBadRegexp": {
"message": "Regulärer Ausdruck ist ungültig." "message": "Regulärer Ausdruck (RegExp) ist ungültig."
}, },
"styleBeautify": { "styleBeautify": {
"message": "Code formatieren" "message": "Code formatieren"
@ -821,25 +821,25 @@
"message": "Bitte Namen eingeben" "message": "Bitte Namen eingeben"
}, },
"styleNotAppliedRegexpProblemTooltip": { "styleNotAppliedRegexpProblemTooltip": {
"message": "Der Style wurde aufgrund ungültiger Regulärer Ausdrücke nicht angewandt." "message": "Der Style wurde aufgrund ungültiger RegExp nicht angewandt."
}, },
"styleRegexpInvalidExplanation": { "styleRegexpInvalidExplanation": {
"message": "Einige Regeln der Regulären Ausdrücke konnten nicht überprüft werden." "message": "Einige RegExp konnten nicht kompiliert werden."
}, },
"styleRegexpPartialExplanation": { "styleRegexpPartialExplanation": {
"message": "Dieser Style verwendet teilweise Übereinstimmende Reguläre Ausdrücke unter Missachtung der <a href='https://developer.mozilla.org/docs/Web/CSS/@document'>CSS4 @document Spezifikationen</a>, welche eine vollständig Übereinstimmende URL benötigen. Der betroffene CSS Bereich wurde nicht auf die Website angewandt. Dieser Style wurde wahrscheinlich unter Stylish für Chrome erstellt, in der seit der ersten Version eine inkorrekte Überprüfung der Regulären Ausdrücke vorhanden ist (bekannter Fehler)." "message": "Dieser Style verwendet nur teilweise übereinstimmende RegExp unter Missachtung der <a href='https://developer.mozilla.org/docs/Web/CSS/@document'>CSS4 @document Spezifikationen</a>, welche eine vollständig übereinstimmende URL benötigen. Die betroffenen CSS-Bereiche wurde nicht auf die Website angewandt. Dieser Style wurde wahrscheinlich unter Stylish für Chrome erstellt, in der seit der ersten Version eine fehlerhafte Überprüfung der RegExp besteht (bekannter Fehler)."
}, },
"styleRegexpProblemTooltip": { "styleRegexpProblemTooltip": {
"message": "Anzahl der Bereiche, welche aufgrund nicht korrekt verwendeter Regulärer Ausdrücke nicht angewendet wurden." "message": "Anzahl der Bereiche, welche aufgrund nicht korrekt verwendeter RegExp nicht angewendet wurden"
}, },
"styleRegexpTestButton": { "styleRegexpTestButton": {
"message": "Reguläre Ausdrücke testen" "message": "RegExp testen"
}, },
"styleRegexpTestFull": { "styleRegexpTestFull": {
"message": "Zutreffende Tabs" "message": "Zutreffende Tabs"
}, },
"styleRegexpTestInvalid": { "styleRegexpTestInvalid": {
"message": "Ungültige Reguläre Ausdrücke übersprungen" "message": "Übersprungene ungültige RegExp"
}, },
"styleRegexpTestNone": { "styleRegexpTestNone": {
"message": "Keine zutreffenden Tabs" "message": "Keine zutreffenden Tabs"
@ -963,7 +963,7 @@
"message": "Gib @name im Code an" "message": "Gib @name im Code an"
}, },
"usercssReplaceTemplateConfirmation": { "usercssReplaceTemplateConfirmation": {
"message": "Ersetze das vorgegebene Template für neue Usercss styles mit dem vorliegenden Code?" "message": "Ersetze das vorgegebene Template für neue UserCSS styles mit dem vorliegenden Code?"
}, },
"usercssReplaceTemplateName": { "usercssReplaceTemplateName": {
"message": "Ein leeres @name ersetzt das vorgegebene Template" "message": "Ein leeres @name ersetzt das vorgegebene Template"

View File

@ -1185,7 +1185,7 @@
"description": "Note in the popup when opened on addons.mozilla.org in Firefox >= 59" "description": "Note in the popup when opened on addons.mozilla.org in Firefox >= 59"
}, },
"unreachableAMOHintNewFF": { "unreachableAMOHintNewFF": {
"message": "In Firefox 60 and newer you'll also have to to remove AMO domain from <extensions.webextensions.restrictedDomains> in <about:config>.", "message": "In Firefox 60 and newer you'll also have to remove AMO domain from <extensions.webextensions.restrictedDomains> in <about:config>.",
"description": "Note in the popup when opened on addons.mozilla.org in Firefox >= 59" "description": "Note in the popup when opened on addons.mozilla.org in Firefox >= 59"
}, },
"unreachableAMOHintOldFF": { "unreachableAMOHintOldFF": {

View File

@ -2,9 +2,6 @@
"appliesRemoveError": { "appliesRemoveError": {
"message": "Cannot remove last 'applies to' entry" "message": "Cannot remove last 'applies to' entry"
}, },
"applyAllUpdates": {
"message": "Apply all updates"
},
"checkAllUpdatesForce": { "checkAllUpdatesForce": {
"message": "Check again—I didn't edit any styles!" "message": "Check again—I didn't edit any styles!"
}, },
@ -20,18 +17,9 @@
"colorpickerTooltip": { "colorpickerTooltip": {
"message": "Open colour picker" "message": "Open colour picker"
}, },
"confirmDiscardChanges": {
"message": "Discard the changes?"
},
"deleteStyleConfirm": {
"message": "Are you sure you want to delete this style?"
},
"description": { "description": {
"message": "Redesign the web with Stylus, a user-style manager. Stylus allows you to easily install themes and skins for many popular sites." "message": "Redesign the web with Stylus, a user-style manager. Stylus allows you to easily install themes and skins for many popular sites."
}, },
"dragDropMessage": {
"message": "Drop your backup file anywhere on this page to import."
},
"editGotoLine": { "editGotoLine": {
"message": "Go to line (or line:col)" "message": "Go to line (or line:col)"
}, },

View File

@ -281,6 +281,9 @@
"genericAdd": { "genericAdd": {
"message": "Agregar" "message": "Agregar"
}, },
"genericClone": {
"message": "Clonar"
},
"genericDisabledLabel": { "genericDisabledLabel": {
"message": "Desactivado" "message": "Desactivado"
}, },
@ -388,6 +391,9 @@
"installUpdateFromLabel": { "installUpdateFromLabel": {
"message": "Buscar actualizaciones" "message": "Buscar actualizaciones"
}, },
"installUpdateUnavailable": {
"message": "Para habilitar la búsqueda de actualizaciones, suelte el archivo en la pestaña o especifique @updateURL en los metadatos del estilo."
},
"license": { "license": {
"message": "Licencia" "message": "Licencia"
}, },
@ -397,6 +403,9 @@
"linkGetStyles": { "linkGetStyles": {
"message": "Obtener estilos" "message": "Obtener estilos"
}, },
"linkTranslate": {
"message": "Traducir"
},
"linterCSSLintIncompatible": { "linterCSSLintIncompatible": {
"message": "CSSLint no soporta el preprocesador $preprocessorname$", "message": "CSSLint no soporta el preprocesador $preprocessorname$",
"placeholders": { "placeholders": {
@ -451,6 +460,9 @@
"liveReloadLabel": { "liveReloadLabel": {
"message": "Recarga en tiempo real" "message": "Recarga en tiempo real"
}, },
"liveReloadUnavailable": {
"message": "Para habilitar la recarga en tiempo real, suelte el archivo en la pestaña (el área donde se muestran los títulos de las pestañas)."
},
"manageFavicons": { "manageFavicons": {
"message": "Favicons en la columna 'Se aplica a'" "message": "Favicons en la columna 'Se aplica a'"
}, },
@ -742,6 +754,9 @@
"styleBeautifyIndentConditional": { "styleBeautifyIndentConditional": {
"message": "Sangrar @media, @supports" "message": "Sangrar @media, @supports"
}, },
"styleBeautifyPreserveNewlines": {
"message": "Conservar nuevas líneas"
},
"styleCancelEditLabel": { "styleCancelEditLabel": {
"message": "Volver al administrador" "message": "Volver al administrador"
}, },
@ -956,6 +971,9 @@
"updatesCurrentlyInstalled": { "updatesCurrentlyInstalled": {
"message": "Actualizaciones instaladas:" "message": "Actualizaciones instaladas:"
}, },
"usercssAvoidOverwriting": {
"message": "Por favor, cambie el valor de @name o @namespace para no sobrescribir un estilo existente."
},
"usercssConfigIncomplete": { "usercssConfigIncomplete": {
"message": "El estilo se actualizó o borró después de que se mostrara el cuadro de diálogo de configuración. Estas variables no se guardaron para evitar corromper los metadatos del estilo:" "message": "El estilo se actualizó o borró después de que se mostrara el cuadro de diálogo de configuración. Estas variables no se guardaron para evitar corromper los metadatos del estilo:"
}, },

View File

@ -394,6 +394,9 @@
"installUpdateFromLabel": { "installUpdateFromLabel": {
"message": "Kontrolli uuendusi" "message": "Kontrolli uuendusi"
}, },
"installUpdateUnavailable": {
"message": "Uuenduste kontrollimise lubamiseks lohista failid kaartide ribale või määratle stiili metaandmetes @updateURL."
},
"license": { "license": {
"message": "Litsents" "message": "Litsents"
}, },
@ -406,6 +409,9 @@
"linkStylusWiki": { "linkStylusWiki": {
"message": "Viki" "message": "Viki"
}, },
"linkTranslate": {
"message": "Tõlgi"
},
"linterCSSLintIncompatible": { "linterCSSLintIncompatible": {
"message": "CSSLint ei toeta eeltöötlejat $preprocessorname$", "message": "CSSLint ei toeta eeltöötlejat $preprocessorname$",
"placeholders": { "placeholders": {
@ -536,7 +542,7 @@
"message": "Lisa \"Kustuta\" redaktori kontekstmenüüsse" "message": "Lisa \"Kustuta\" redaktori kontekstmenüüsse"
}, },
"optionsAdvancedExposeIframes": { "optionsAdvancedExposeIframes": {
"message": "Paljasta iframe-id HTML [stylus-iframe] kaudu" "message": "Paljasta iframe-id HTML[stylus-iframe] kaudu"
}, },
"optionsAdvancedExposeIframesNote": { "optionsAdvancedExposeIframesNote": {
"message": "Paljastab tipp-domeeni igas iframe'is.\nVõimaldab iframe'i-põhise CSS-koodi kirjutamise näiteks selliselt:\nhtml[stylus-iframe$=\"twitter.com\"] h1 { display:none }" "message": "Paljastab tipp-domeeni igas iframe'is.\nVõimaldab iframe'i-põhise CSS-koodi kirjutamise näiteks selliselt:\nhtml[stylus-iframe$=\"twitter.com\"] h1 { display:none }"
@ -968,6 +974,9 @@
"updatesCurrentlyInstalled": { "updatesCurrentlyInstalled": {
"message": "Uuendused paigaldatud:" "message": "Uuendused paigaldatud:"
}, },
"usercssAvoidOverwriting": {
"message": "Olemasoleva stiili ülekirjutamise vältimiseks palun muuda @name või @namespace väärtused."
},
"usercssConfigIncomplete": { "usercssConfigIncomplete": {
"message": "Stiili uuendati või eemaldati pärast seadistusdialoogi kuvamist. Neid muutujaid ei salvestatud, et vältida stiili metaandmete korrumpeerumist:" "message": "Stiili uuendati või eemaldati pärast seadistusdialoogi kuvamist. Neid muutujaid ei salvestatud, et vältida stiili metaandmete korrumpeerumist:"
}, },

View File

@ -44,7 +44,7 @@
"message": "Supprimer" "message": "Supprimer"
}, },
"appliesRemoveError": { "appliesRemoveError": {
"message": "Impossible de supprimer la dernière entrée « sapplique à »" "message": "Impossible de supprimer la dernière entrée « sapplique à »"
}, },
"appliesSpecify": { "appliesSpecify": {
"message": "Préciser" "message": "Préciser"
@ -62,7 +62,7 @@
"message": "Auteur" "message": "Auteur"
}, },
"backupButtons": { "backupButtons": {
"message": "Sauvergarde" "message": "Sauvegarde"
}, },
"backupMessage": { "backupMessage": {
"message": "Sélectionner un fichier ou le glisser-déposer sur cette page" "message": "Sélectionner un fichier ou le glisser-déposer sur cette page"
@ -74,7 +74,7 @@
"message": "Rechercher des mises à jour pour tous les styles" "message": "Rechercher des mises à jour pour tous les styles"
}, },
"checkAllUpdatesForce": { "checkAllUpdatesForce": {
"message": "Vérifiez à nouveau, je nai modifié aucun style !" "message": "Vérifiez à nouveau, je nai modifié aucun style !"
}, },
"checkForUpdate": { "checkForUpdate": {
"message": "Rechercher des mises à jour" "message": "Rechercher des mises à jour"
@ -241,7 +241,7 @@
"message": "Activer" "message": "Activer"
}, },
"exportLabel": { "exportLabel": {
"message": "Exportez" "message": "Exporter"
}, },
"externalFeedback": { "externalFeedback": {
"message": "Commentaires" "message": "Commentaires"
@ -321,7 +321,7 @@
"message": "Aide" "message": "Aide"
}, },
"helpKeyMapCommand": { "helpKeyMapCommand": {
"message": "Tapez un nom de commande" "message": "Saisissez un nom de commande"
}, },
"helpKeyMapHotkey": { "helpKeyMapHotkey": {
"message": "Pressez un raccourci clavier" "message": "Pressez un raccourci clavier"
@ -336,10 +336,10 @@
"message": "Importer" "message": "Importer"
}, },
"importReplaceLabel": { "importReplaceLabel": {
"message": "Écraser le style" "message": "Remplacer le style"
}, },
"importReplaceTooltip": { "importReplaceTooltip": {
"message": "Abandonner le contenu du style actuel et lécraser avec le style importé" "message": "Abandonner le contenu du style actuel et le remplacer par le style importé"
}, },
"importReportLegendAdded": { "importReportLegendAdded": {
"message": "ajouté(s)" "message": "ajouté(s)"
@ -357,7 +357,7 @@
"message": "codes mis à jour" "message": "codes mis à jour"
}, },
"importReportLegendUpdatedMeta": { "importReportLegendUpdatedMeta": {
"message": "méta-informations mis à jour" "message": "méta-informations mises à jour"
}, },
"importReportTitle": { "importReportTitle": {
"message": "Import des styles terminé" "message": "Import des styles terminé"
@ -599,7 +599,7 @@
"message": "Quand vous importez des sauvegardes de style dune ancienne version ou de Stylish, faites une vérification manuellement pour vous assurez que tous les styles sont à jour." "message": "Quand vous importez des sauvegardes de style dune ancienne version ou de Stylish, faites une vérification manuellement pour vous assurez que tous les styles sont à jour."
}, },
"optionsUpdateInterval": { "optionsUpdateInterval": {
"message": "Intervalle de mise à jour automatique des Userstyles en heures (spécifier 0 pour désactiver)" "message": "Intervalle de mise à jour automatique des styles utilisateur en heures (spécifier 0 pour désactiver)"
}, },
"paginationCurrent": { "paginationCurrent": {
"message": "Page courante" "message": "Page courante"
@ -775,7 +775,7 @@
} }
}, },
"styleInstallFailed": { "styleInstallFailed": {
"message": "Échec de linstallation de luserstyle\n$error$", "message": "Échec de linstallation du style utilisateur !\n$error$",
"placeholders": { "placeholders": {
"error": { "error": {
"content": "$1" "content": "$1"
@ -869,7 +869,7 @@
"message": "Enregistrer" "message": "Enregistrer"
}, },
"styleToMozillaFormatHelp": { "styleToMozillaFormatHelp": {
"message": "Le code au format Mozilla peut être utilisé dans Stylish for Firefox et envoyé à userstyles.org." "message": "Le code au format Mozilla peut être utilisé dans Stylish for Firefox et envoyé à userstyles.org."
}, },
"styleToMozillaFormatTitle": { "styleToMozillaFormatTitle": {
"message": "Style au format Mozilla" "message": "Style au format Mozilla"
@ -962,6 +962,9 @@
"updatesCurrentlyInstalled": { "updatesCurrentlyInstalled": {
"message": "Mises à jour installées :" "message": "Mises à jour installées :"
}, },
"usercssAvoidOverwriting": {
"message": "Veuillez changer la valeur de @name ou @namespace afin d'éviter d'écraser un style pré-existant."
},
"usercssConfigIncomplete": { "usercssConfigIncomplete": {
"message": "Le style a été mis à jour ou supprimer après lapparition du dialogue de confirmation. Ces variables nont pas été sauvegardées pour éviter de corrompre les métadonnées du style :" "message": "Le style a été mis à jour ou supprimer après lapparition du dialogue de confirmation. Ces variables nont pas été sauvegardées pour éviter de corrompre les métadonnées du style :"
}, },

767
_locales/he/messages.json Normal file
View File

@ -0,0 +1,767 @@
{
"addStyleLabel": {
"message": "כתוב עיצוב חדש"
},
"addStyleTitle": {
"message": "הוספת עיצוב"
},
"alphaChannel": {
"message": "שקיפות"
},
"appliesAdd": {
"message": "הוספה"
},
"appliesDisplay": {
"message": "מוחל על: $applies$",
"placeholders": {
"applies": {
"content": "$1"
}
}
},
"appliesDisplayTruncatedSuffix": {
"message": "עוד"
},
"appliesDomainOption": {
"message": "קישורים תחת הדומיין"
},
"appliesLabel": {
"message": "מוחל על"
},
"appliesLineWidgetLabel": {
"message": "הצג אינפורמציית 'חל על'"
},
"appliesLineWidgetWarning": {
"message": "לא עובד עם CSS מוקטן (minified)"
},
"appliesRegexpOption": {
"message": "קישורים התואמים regexp"
},
"appliesRemove": {
"message": "הסרה"
},
"appliesRemoveError": {
"message": "לא ניתן להסיר את הערך 'חל על' האחרון"
},
"appliesSpecify": {
"message": "פרט"
},
"appliesToEverything": {
"message": "כל האתרים"
},
"appliesUrlOption": {
"message": "קישור (URL)"
},
"appliesUrlPrefixOption": {
"message": "קישורים המתחילים ב"
},
"applyAllUpdates": {
"message": "החל את כל העדכונים"
},
"author": {
"message": "כותב"
},
"backupButtons": {
"message": "גיבוי"
},
"backupMessage": {
"message": "בחר קובץ או גרור ושחרר אותו בדף זה."
},
"bckpInstStyles": {
"message": "ייצא עיצובים"
},
"checkAllUpdates": {
"message": "בדוקים עדכונים עבור כל העיצובים"
},
"checkAllUpdatesForce": {
"message": "בדוק שוב, לא ערכתי אף עיצוב!"
},
"checkForUpdate": {
"message": "בדוק עדכונים"
},
"checkingForUpdate": {
"message": "בודק..."
},
"clickToUninstall": {
"message": "הקלק להסרה"
},
"cm_autoCloseBrackets": {
"message": "סגור באופן אוטומטי סוגריים וגרשיים"
},
"cm_autoCloseBracketsTooltip": {
"message": "הוסף סוגר באופן אוטומטי כשמקלידים את אחת מהפותחים של ()[]{}''\"\""
},
"cm_autocompleteOnTyping": {
"message": "השלמה אוטומטית בזמן הכתיבה"
},
"cm_colorpicker": {
"message": "פלטות בחירת צבעים עבור צבעי CSS"
},
"cm_indentWithTabs": {
"message": "השתמש בטאבים יחד עם הזחה חכמה"
},
"cm_keyMap": {
"message": "מפת מקשים"
},
"cm_lineWrapping": {
"message": "עטיפת מילים"
},
"cm_matchHighlight": {
"message": "הדגש"
},
"cm_matchHighlightSelection": {
"message": "בחירה בלבד"
},
"cm_resizeGripHint": {
"message": "דאבל קליק להגדלה מירבית/איפוס הגובה"
},
"cm_selectByTokens": {
"message": "דאבל קליק בוחר tokens"
},
"cm_smartIndent": {
"message": "השתמש בהזחה חכמה"
},
"cm_tabSize": {
"message": "גודל הכרטיסייה"
},
"cm_theme": {
"message": "ערכת נושא"
},
"colorpickerTooltip": {
"message": "פתח את פלטת בחירת הצבעים"
},
"configOnChange": {
"message": "בעת שינוי"
},
"configOnChangeTooltip": {
"message": "שמור והחל שינויים באופן אוטומטי"
},
"configureStyle": {
"message": "הגדר"
},
"configureStyleOnHomepage": {
"message": "הגדר בדף הבית"
},
"confirmCancel": {
"message": "ביטול"
},
"confirmClose": {
"message": "סגור"
},
"confirmDefault": {
"message": "השתמש בברירת מחדל"
},
"confirmDelete": {
"message": "מחיקה"
},
"confirmDiscardChanges": {
"message": "למחוק את השינויים?"
},
"confirmNo": {
"message": "לא"
},
"confirmOK": {
"message": "אוקיי"
},
"confirmSave": {
"message": "שמור"
},
"confirmStop": {
"message": "עצור"
},
"confirmYes": {
"message": "כן"
},
"dateInstalled": {
"message": "תאריך התקנה"
},
"dateUpdated": {
"message": "תאריך עדכון"
},
"defaultTheme": {
"message": "ברירת מחדל"
},
"deleteStyleConfirm": {
"message": "האם אתה בטוח שברצונך למחוק עיצוב זה?"
},
"deleteStyleLabel": {
"message": "מחק"
},
"disableAllStyles": {
"message": "השבת את כל העיצובים"
},
"disableStyleLabel": {
"message": "השבת"
},
"dragDropMessage": {
"message": "שחרר את קובץ הגיבוי שלך בכל מקום בדף זה על־מנת לייבא אותו."
},
"editDeleteText": {
"message": "מחק"
},
"editGotoLine": {
"message": "Goto לשורה (או line:col)"
},
"editStyleHeading": {
"message": "עריכת עיצוב"
},
"editStyleLabel": {
"message": "עריכה"
},
"editStyleTitle": {
"message": "עריכת העיצוב $stylename$",
"placeholders": {
"stylename": {
"content": "$1"
}
}
},
"editorStylesButton": {
"message": "מצא עיצובים לעורך"
},
"enableStyleLabel": {
"message": "אפשר"
},
"exportLabel": {
"message": "ייצא"
},
"externalFeedback": {
"message": "חוות דעת"
},
"externalHomepage": {
"message": "דף הבית"
},
"externalLink": {
"message": "קישור חיצוני"
},
"externalSupport": {
"message": "תמיכה"
},
"findStyles": {
"message": "מצא עיצובים"
},
"findStylesInline": {
"message": "מוטבע"
},
"genericAdd": {
"message": "הוספה"
},
"genericClone": {
"message": "שכפול"
},
"genericDisabledLabel": {
"message": "מושבת"
},
"genericEnabledLabel": {
"message": "מאופשר"
},
"genericError": {
"message": "שגיאה"
},
"genericHistoryLabel": {
"message": "היסטוריה"
},
"genericNext": {
"message": "הבא"
},
"genericPrevious": {
"message": "הקודם"
},
"genericResetLabel": {
"message": "איפוס"
},
"genericSavedMessage": {
"message": "נשמר"
},
"genericTitle": {
"message": "כותרת"
},
"genericUnknown": {
"message": "לא ידוע"
},
"helpAlt": {
"message": "עזרה"
},
"helpKeyMapCommand": {
"message": "הקלד שם פקודה"
},
"helpKeyMapHotkey": {
"message": "לחץ על המקש החם"
},
"importAppendLabel": {
"message": "צרף לעיצוב"
},
"importAppendTooltip": {
"message": "צרף את העיצוב המיובא לעיצוב הנוכחי"
},
"importLabel": {
"message": "ייבא"
},
"importReplaceLabel": {
"message": "דרוס עיצוב"
},
"importReportLegendAdded": {
"message": "נוספו"
},
"importReportLegendUpdatedCode": {
"message": "קודים עודכנו"
},
"importReportLegendUpdatedMeta": {
"message": "מידע meta עודכנו"
},
"importReportTitle": {
"message": "סיום ייבוא עיצובים"
},
"importReportUnchanged": {
"message": "שום דבר לא השתנה."
},
"importReportUndone": {
"message": "עיצובים הוחזרו"
},
"importReportUndoneTitle": {
"message": "הייבוא בוטל"
},
"installButton": {
"message": "התקן עיצוב"
},
"installButtonInstalled": {
"message": "העיצוב הותקן בהצלחה"
},
"installButtonReinstall": {
"message": "התקן עיצוב מחדש"
},
"installButtonUpdate": {
"message": "עדכן עיצוב"
},
"installUpdate": {
"message": "התקן עדכון"
},
"installUpdateFromLabel": {
"message": "בדוק עדכונים"
},
"installUpdateUnavailable": {
"message": "על־מנת לאפשר בדיקת עדכונים, אנא שחרר את הקובץ על רצועת הכרטיסיות או ציין @updateURL ב־metadata של העיצוב."
},
"license": {
"message": "רישיון"
},
"linkGetHelp": {
"message": "קבל עזרה"
},
"linkGetStyles": {
"message": "מצא עיצובים"
},
"linkTranslate": {
"message": "תרגום"
},
"linterCSSLintSettings": {
"message": "(הגדר כלל כ: 0 = מושבת; 1 = אזהרה; 2 = שגיאה)"
},
"linterConfigPopupTitle": {
"message": "הגדר $linter$ כללי תצורה",
"placeholders": {
"linter": {
"content": "$1"
}
}
},
"linterConfigTooltip": {
"message": "לחץ להגדרת linter זה"
},
"linterIssues": {
"message": "תקלות"
},
"linterIssuesHelp": {
"message": "התקלות האלו נמצאו על־ידי $link$:",
"placeholders": {
"link": {
"content": "$1"
}
}
},
"linterJSONError": {
"message": "פורמט JSON לא תקין"
},
"linterResetMessage": {
"message": "על־מנת לבטל איפוסים לא רצוניים, לחץ Ctrl-Z (או Cmd-Z) בתיבת הטקסט"
},
"linterRulesLink": {
"message": "ראה רשימת חוקים מלאה"
},
"liveReloadError": {
"message": "התרחשה שגיאה בזמן הצפייה בקובץ"
},
"liveReloadLabel": {
"message": "רענון לייב (live)"
},
"liveReloadUnavailable": {
"message": "על־מנת לאפשר רענון לייב (live), אנא שחרר את הקובץ על רצועת הכרטיסיות (האזור בו כותרות הכרטיסיות מוצגות)."
},
"manageFavicons": {
"message": "הצגת אייקונים בעמודת 'חל על'"
},
"manageFaviconsGray": {
"message": "האפרת האייקונים"
},
"manageFaviconsHelp": {
"message": "Stylus משתמש בשירות חיצוני https://www.google.com/s2/favicons"
},
"manageFilters": {
"message": "מסננים"
},
"manageHeading": {
"message": "עיצובים מותקנים"
},
"manageMaxTargets": {
"message": "מספר הפריטים ה־'מוחלים על'"
},
"manageNewStyleAsUsercss": {
"message": "כ־Usercss"
},
"manageOnlyDisabled": {
"message": "רק עיצובים מושבתים"
},
"manageOnlyEnabled": {
"message": "רק עיצובים מאופשרים"
},
"manageOnlyExternal": {
"message": "רק עיצובים חיצוניים"
},
"manageOnlyLocal": {
"message": "רק עיצובים שנוצרו באופן מקומי"
},
"manageOnlyNonUsercss": {
"message": "רק לא עיצובי Usercss"
},
"manageOnlyUpdates": {
"message": "רק עם עדכונים או תקלות"
},
"manageOnlyUsercss": {
"message": "רק עיצובי Usercss"
},
"menuShowBadge": {
"message": "הצג כמות עיצובים מאופשרים"
},
"noStylesForSite": {
"message": "לא הותקנו עיצובים עבור אתר זה."
},
"openManage": {
"message": "ניהול"
},
"openOptionsManage": {
"message": "אפשרויות UI"
},
"openOptionsPopup": {
"message": "אפשרויות"
},
"openStylesManager": {
"message": "פתח את מנהל העיצובים"
},
"optionsActions": {
"message": "פעולות"
},
"optionsAdvanced": {
"message": "מתקדם"
},
"optionsAdvancedContextDelete": {
"message": "הוספת 'מחיקה' בתפריט העורך"
},
"optionsBadgeDisabled": {
"message": "צבע רקע בעת השבתה"
},
"optionsBadgeNormal": {
"message": "צבע רקע"
},
"optionsCheck": {
"message": "עדכן עיצובים"
},
"optionsCheckUpdate": {
"message": "בדוק והתקן את כל העדכונים הזמינים"
},
"optionsCustomizeBadge": {
"message": "תג על האייקון בסרגל הכלים"
},
"optionsCustomizeIcon": {
"message": "אייקון בסרגל הכלים"
},
"optionsCustomizePopup": {
"message": "חלון קופץ"
},
"optionsCustomizeUpdate": {
"message": "עדכונים"
},
"optionsHeading": {
"message": "אפשרויות"
},
"optionsIconDark": {
"message": "ערכות נושא כהות לדפדפן"
},
"optionsIconLight": {
"message": "ערכות נושא בהירות לדפדפן"
},
"optionsOpen": {
"message": "פתח"
},
"optionsOpenManager": {
"message": "נהל עיצובים"
},
"optionsPopupWidth": {
"message": "רוחב החלון הקופץ (בפיקסלים)"
},
"optionsReset": {
"message": "איפוס האפשרויות לערכי ברירת המחדל"
},
"optionsResetButton": {
"message": "איפוס האפשרויות"
},
"optionsSubheading": {
"message": "אפשרויות נוספות"
},
"optionsUpdateInterval": {
"message": "עדכון אוטומטי של Userstyle בשעות (הגדר 0 להשבתה)"
},
"paginationCurrent": {
"message": "הדף הנוכחי"
},
"paginationEstimated": {
"message": "מספר דפים משוער"
},
"paginationNext": {
"message": "הדף הבא"
},
"paginationPrevious": {
"message": "הדף הקודם"
},
"paginationTotal": {
"message": "סה״כ דפים"
},
"popupBorders": {
"message": "הוספת שוליים לבנים בצדדים"
},
"popupHotkeysTooltip": {
"message": "לחץ על־מנת לצפות במקשים החמים הזמינים"
},
"popupOpenEditInWindow": {
"message": "פתח את העורך בחלון חדש"
},
"popupStylesFirst": {
"message": "עיצובים לפני הפקודות"
},
"prefShowBadge": {
"message": "מֿמספר העיצובים המאופשרים באתר הנוכחי"
},
"previewLabel": {
"message": "תצוגת לייב (live)"
},
"previewTooltip": {
"message": "החלת השינויים באופן זמני ללא שמירה.\nשמור את העיצוב על־מנת להפוך את השינויים לקבועים."
},
"replace": {
"message": "החלף"
},
"replaceAll": {
"message": "החלף הכל"
},
"replaceWith": {
"message": "החלף עם"
},
"retrieveBckp": {
"message": "ייבוא עיצובים"
},
"search": {
"message": "חיפוש"
},
"searchCaseSensitive": {
"message": "רגיש לאותיות גדולות/קטנות"
},
"searchNumberOfResults": {
"message": "מספר ההתאמות"
},
"searchNumberOfResults2": {
"message": "מספר ההתאמות בקוד ובערכים ה'מוחלים על'"
},
"searchRegexp": {
"message": "השתמש ב־/re/ לחיפוש באמצעות ביטוי regexp"
},
"searchResultInstallCount": {
"message": "סה״כ התקנות"
},
"searchResultNoneFound": {
"message": "לא נמצאו עיצובים לאתר זה."
},
"searchResultRating": {
"message": "דירוג"
},
"searchResultUpdated": {
"message": "עודכן"
},
"searchResultWeeklyCount": {
"message": "התקנות שבועיות"
},
"sectionRemove": {
"message": "הסר סעיף"
},
"sectionRestore": {
"message": "שחזר סעיף שהוסר"
},
"shortcuts": {
"message": "קיצורי מקשים"
},
"shortcutsNote": {
"message": "הגדר קיצורי מקשים"
},
"sortDateNewestFirst": {
"message": "החדש ביותר ראשון"
},
"sortDateOldestFirst": {
"message": "הישן ביותר ראשון"
},
"sortLabel": {
"message": "בחר שיטת מיון להחלה על העיצובים המותקנים"
},
"styleBadRegexp": {
"message": "ביטוי ה־Regexp לא תקין."
},
"styleBeautify": {
"message": "ייפה CSS"
},
"styleCancelEditLabel": {
"message": "חזרה לניהול"
},
"styleEnabledLabel": {
"message": "מאופשר"
},
"styleFromMozillaFormatPrompt": {
"message": "הדבק את הקוד ב־Mozilla-format"
},
"styleMetaErrorColor": {
"message": "$color$ הוא צבע לא תקין",
"placeholders": {
"color": {
"content": "$1"
}
}
},
"styleMetaErrorPreprocessor": {
"message": "@preprocessor לא נתמך: $preprocessor$",
"placeholders": {
"preprocessor": {
"content": "$1"
}
}
},
"styleMetaErrorSelectValueMismatch": {
"message": "הערך @select: לא קיים ברשימה"
},
"styleMissingMeta": {
"message": "@$key$ metadata חסרים",
"placeholders": {
"key": {
"content": "$1"
}
}
},
"styleMissingName": {
"message": "אנא הזן שם"
},
"styleRegexpTestButton": {
"message": "בדוק RegExp"
},
"styleRegexpTestFull": {
"message": "כרטיסיות תואמות"
},
"styleRegexpTestInvalid": {
"message": "ביטוי regrxp לא תקין"
},
"styleRegexpTestNone": {
"message": "לא תואם אף כרטיסייה"
},
"styleSaveLabel": {
"message": "שמור"
},
"styleSectionsTitle": {
"message": "סעיפים"
},
"styleToMozillaFormatTitle": {
"message": "עיצוב ב־Mozilla format"
},
"styleUpdate": {
"message": "האם אתה בטוח שברצונך לעדכן את '$stylename$'?",
"placeholders": {
"stylename": {
"content": "$1"
}
}
},
"stylusUnavailableForURL": {
"message": "Stylus לא עובד על דפים כמו זה."
},
"syncStorageErrorSaving": {
"message": "הערך לא יכול להשמר. אנא נסה להקטין את גודל הטקסט."
},
"toggleStyle": {
"message": "אפשר או השבת עיצוב"
},
"undo": {
"message": "בטל"
},
"undoGlobal": {
"message": "בטל בכל הסעיפים"
},
"unreachableAMO": {
"message": "Firefox לא מאפשרת גישה לאתר זה."
},
"unreachableContentScript": {
"message": "לא ניתן לתקשר עם הדף. אנא טען מחדש את הכרטיסייה."
},
"updateAllCheckSucceededNoUpdate": {
"message": "לא נמצאו עדכונים."
},
"updateCheckFailBadResponseCode": {
"message": "העדכון נכשל: השרת החזיר תגובה עם הקוד $code$.",
"placeholders": {
"code": {
"content": "$1"
}
}
},
"updateCheckFailServerUnreachable": {
"message": "העדכון נכשל: השרת לא זמין."
},
"updateCheckHistory": {
"message": "היסטוריה של בדיקת עדכונים"
},
"updateCheckSkippedLocallyEdited": {
"message": "עיצוב זה נערך באופן מקומי."
},
"updateCheckSkippedMaybeLocallyEdited": {
"message": "ייתכן כי עיצוב זה נערך באופן מקומי."
},
"updateCheckSucceededNoUpdate": {
"message": "העיצוב מעודכן."
},
"updateCompleted": {
"message": "העדכון הושלם."
},
"updatesCurrentlyInstalled": {
"message": "העדכונים הותקנו."
},
"usercssAvoidOverwriting": {
"message": "אנא שנה את הערך של @name or @namespace על־מנת להמנע מדריסה של עיצוב קיים."
},
"usercssEditorNamePlaceholder": {
"message": "ציין @name בקוד"
},
"usercssReplaceTemplateSectionBody": {
"message": "הכנס כאן קוד..."
},
"versionInvalidOlder": {
"message": "הגרסה ישנה יותר מהעיצוב המותקן."
},
"writeStyleFor": {
"message": "כתוב עיצוב עבור: "
},
"writeStyleForURL": {
"message": "הקישור הנוכחי"
}
}

View File

@ -3,7 +3,7 @@
"message": "Scrivi nuovo stile" "message": "Scrivi nuovo stile"
}, },
"addStyleTitle": { "addStyleTitle": {
"message": "Aggiunta di stili" "message": "Aggiungi stili"
}, },
"alphaChannel": { "alphaChannel": {
"message": "Opacità" "message": "Opacità"
@ -31,6 +31,9 @@
"appliesLabel": { "appliesLabel": {
"message": "Vale per" "message": "Vale per"
}, },
"appliesLineWidgetLabel": {
"message": "Visualizza info 'Applica a'"
},
"appliesLineWidgetWarning": { "appliesLineWidgetWarning": {
"message": "Non funziona con CSS minificato" "message": "Non funziona con CSS minificato"
}, },
@ -88,6 +91,9 @@
"cm_keyMap": { "cm_keyMap": {
"message": "Mappa caratteri" "message": "Mappa caratteri"
}, },
"cm_matchHighlight": {
"message": "Evidenzia"
},
"cm_matchHighlightSelection": { "cm_matchHighlightSelection": {
"message": "Solo selezione" "message": "Solo selezione"
}, },
@ -103,9 +109,18 @@
"colorpickerTooltip": { "colorpickerTooltip": {
"message": "Apri selettore colore" "message": "Apri selettore colore"
}, },
"configOnChange": {
"message": "su modifica"
},
"configOnChangeTooltip": {
"message": "Salva e applica modifiche automaticamente"
},
"configureStyle": { "configureStyle": {
"message": "Configura" "message": "Configura"
}, },
"configureStyleOnHomepage": {
"message": "Configura su homepage"
},
"confirmCancel": { "confirmCancel": {
"message": "Annulla" "message": "Annulla"
}, },
@ -130,6 +145,9 @@
"dateInstalled": { "dateInstalled": {
"message": "Data installazione" "message": "Data installazione"
}, },
"dateUpdated": {
"message": "Data aggiornata"
},
"dbError": { "dbError": {
"message": "Si è verificato un errore durante l'utilizzo del database Stylus. Vuoi visitare una pagina web con le possibili soluzioni?" "message": "Si è verificato un errore durante l'utilizzo del database Stylus. Vuoi visitare una pagina web con le possibili soluzioni?"
}, },
@ -183,6 +201,9 @@
"externalSupport": { "externalSupport": {
"message": "Supporto" "message": "Supporto"
}, },
"externalUsercssDocument": {
"message": "Documentazione per Usercss"
},
"filteredStyles": { "filteredStyles": {
"message": "$numShown$ mostrati di $numTotal$ totali", "message": "$numShown$ mostrati di $numTotal$ totali",
"placeholders": { "placeholders": {
@ -203,6 +224,12 @@
"findStylesInlineTooltip": { "findStylesInlineTooltip": {
"message": "Visualizza risultati in questa finestra." "message": "Visualizza risultati in questa finestra."
}, },
"genericAdd": {
"message": "Aggiungi"
},
"genericClone": {
"message": "Clona"
},
"genericDisabledLabel": { "genericDisabledLabel": {
"message": "Disattivato" "message": "Disattivato"
}, },
@ -257,9 +284,21 @@
"importReportLegendAdded": { "importReportLegendAdded": {
"message": "aggiunto" "message": "aggiunto"
}, },
"importReportLegendIdentical": {
"message": "identico saltato"
},
"importReportLegendInvalid": {
"message": "invalido saltato"
},
"importReportLegendUpdatedBoth": {
"message": "info meta e codice aggiornati"
},
"importReportLegendUpdatedCode": { "importReportLegendUpdatedCode": {
"message": "codice aggiornato" "message": "codice aggiornato"
}, },
"importReportLegendUpdatedMeta": {
"message": "info meta aggiornate"
},
"importReportTitle": { "importReportTitle": {
"message": "Importazione stili terminata" "message": "Importazione stili terminata"
}, },
@ -307,6 +346,9 @@
"linkGetStyles": { "linkGetStyles": {
"message": "Ottieni stili" "message": "Ottieni stili"
}, },
"linkTranslate": {
"message": "Traduci"
},
"linterInvalidConfigError": { "linterInvalidConfigError": {
"message": "Non salvato a causa di queste impostazioni di configurazione non valide:" "message": "Non salvato a causa di queste impostazioni di configurazione non valide:"
}, },
@ -331,6 +373,9 @@
"manageHeading": { "manageHeading": {
"message": "Stili installati" "message": "Stili installati"
}, },
"manageNewStyleAsUsercss": {
"message": "come Usercss"
},
"manageNewUI": { "manageNewUI": {
"message": "Nuovo layout Gestione UI" "message": "Nuovo layout Gestione UI"
}, },
@ -346,9 +391,18 @@
"manageOnlyLocal": { "manageOnlyLocal": {
"message": "Solo stili creati localmente" "message": "Solo stili creati localmente"
}, },
"manageOnlyNonUsercss": {
"message": "Solo stili non-Usercss"
},
"manageOnlyUpdates": { "manageOnlyUpdates": {
"message": "Solo con aggiornamenti o problemi" "message": "Solo con aggiornamenti o problemi"
}, },
"manageOnlyUsercss": {
"message": "Solo stili Usercss"
},
"menuShowBadge": {
"message": "Mostra contatore stili attivi"
},
"noStylesForSite": { "noStylesForSite": {
"message": "Nessuno stile installato per questo sito." "message": "Nessuno stile installato per questo sito."
}, },
@ -421,6 +475,9 @@
"paginationCurrent": { "paginationCurrent": {
"message": "Pagina corrente" "message": "Pagina corrente"
}, },
"paginationEstimated": {
"message": "Numero stimato di pagine"
},
"paginationNext": { "paginationNext": {
"message": "Pagine successiva" "message": "Pagine successiva"
}, },

View File

@ -406,6 +406,9 @@
"linkGetStyles": { "linkGetStyles": {
"message": "スタイルを取得" "message": "スタイルを取得"
}, },
"linkStylusWiki": {
"message": "ウィキ"
},
"linkTranslate": { "linkTranslate": {
"message": "翻訳" "message": "翻訳"
}, },
@ -593,10 +596,10 @@
"message": "ポップアップの幅(ピクセル単位)" "message": "ポップアップの幅(ピクセル単位)"
}, },
"optionsReset": { "optionsReset": {
"message": "設定をデフォルト値にリセットする" "message": "オプションをデフォルト値にリセットする"
}, },
"optionsResetButton": { "optionsResetButton": {
"message": "設定をリセット" "message": "オプションをリセット"
}, },
"optionsSubheading": { "optionsSubheading": {
"message": "その他のオプション" "message": "その他のオプション"
@ -971,6 +974,9 @@
"updatesCurrentlyInstalled": { "updatesCurrentlyInstalled": {
"message": "更新がインストールされました:" "message": "更新がインストールされました:"
}, },
"usercssAvoidOverwriting": {
"message": "既存のスタイルの上書きを避けるために、@name または @namespace の値を変更してください。"
},
"usercssConfigIncomplete": { "usercssConfigIncomplete": {
"message": "設定ダイアログの表示後に、スタイルが更新または削除されました。スタイルのメタデータの破損を避けるため、これらの変数は保存されませんでした:" "message": "設定ダイアログの表示後に、スタイルが更新または削除されました。スタイルのメタデータの破損を避けるため、これらの変数は保存されませんでした:"
}, },

View File

@ -980,6 +980,9 @@
"updatesCurrentlyInstalled": { "updatesCurrentlyInstalled": {
"message": "Zainstalowane aktualizacje:" "message": "Zainstalowane aktualizacje:"
}, },
"usercssAvoidOverwriting": {
"message": "Proszę zmienić wartość @name lub @namespace, aby uniknąć nadpisania istniejącego stylu."
},
"usercssConfigIncomplete": { "usercssConfigIncomplete": {
"message": "Styl został zaktualizowany lub usunięty po wyświetleniu okna dialogowego konfiguracji. Te zmienne nie zostały zapisane, aby uniknąć uszkodzenia metadanych stylu:" "message": "Styl został zaktualizowany lub usunięty po wyświetleniu okna dialogowego konfiguracji. Te zmienne nie zostały zapisane, aby uniknąć uszkodzenia metadanych stylu:"
}, },

View File

@ -962,6 +962,9 @@
"updatesCurrentlyInstalled": { "updatesCurrentlyInstalled": {
"message": "Atualizações instaladas:" "message": "Atualizações instaladas:"
}, },
"usercssAvoidOverwriting": {
"message": "Por favor modifique o valor de @name ou @namespace para evitar sobrescrever um estilo existente."
},
"usercssConfigIncomplete": { "usercssConfigIncomplete": {
"message": "O estilo foi atualizado ou eliminado após a exibição do diálogo de configuração. Essas variáveis não foram guardadas para evitar corromper os metadados do estilo:" "message": "O estilo foi atualizado ou eliminado após a exibição do diálogo de configuração. Essas variáveis não foram guardadas para evitar corromper os metadados do estilo:"
}, },

View File

@ -106,6 +106,12 @@
"cm_resizeGripHint": { "cm_resizeGripHint": {
"message": "Dublu click pentru a maximiza sau restaura înălțimea" "message": "Dublu click pentru a maximiza sau restaura înălțimea"
}, },
"cm_selectByTokens": {
"message": "Dublu-click pentru a selecta simbolurile"
},
"cm_selectByTokensTooltip": {
"message": "Exemple de simboluri: .foo-bar-2 #aabbcc 0.32 !important\nCand inactiv: cuvinte delimitate cu punctuatie sunt selectate."
},
"cm_smartIndent": { "cm_smartIndent": {
"message": "Folosiți indentare inteligentă" "message": "Folosiți indentare inteligentă"
}, },
@ -236,6 +242,12 @@
"findStylesInlineTooltip": { "findStylesInlineTooltip": {
"message": "Arătați rezultatele căutării în această pagină." "message": "Arătați rezultatele căutării în această pagină."
}, },
"genericAdd": {
"message": "Adaugă"
},
"genericClone": {
"message": "Clonează"
},
"genericDisabledLabel": { "genericDisabledLabel": {
"message": "Dezactivat" "message": "Dezactivat"
}, },
@ -340,6 +352,9 @@
"installUpdateFromLabel": { "installUpdateFromLabel": {
"message": "Verificați update-urile" "message": "Verificați update-urile"
}, },
"installUpdateUnavailable": {
"message": "Pentru a activa verificarea de updates. trage fișierul pe taburi (zona cu titluri) sau specifica @updateURL în metadata temei."
},
"license": { "license": {
"message": "Licență" "message": "Licență"
}, },
@ -349,6 +364,9 @@
"linkGetStyles": { "linkGetStyles": {
"message": "Căutați teme" "message": "Căutați teme"
}, },
"linkTranslate": {
"message": "Traduce"
},
"linterCSSLintIncompatible": { "linterCSSLintIncompatible": {
"message": "CSSLint nu suportă preprocesorul $preprocessorname$ ", "message": "CSSLint nu suportă preprocesorul $preprocessorname$ ",
"placeholders": { "placeholders": {
@ -394,6 +412,12 @@
"liveReloadError": { "liveReloadError": {
"message": "A avut loc o eroare în timpul monitorizării acestui fișier" "message": "A avut loc o eroare în timpul monitorizării acestui fișier"
}, },
"liveReloadInstallHint": {
"message": "Reload automat este activat deci tema instalată va fi updatată automat când acest tab si fișierul surca sunt deschise."
},
"liveReloadUnavailable": {
"message": "Pentru a activa live reload (refresh automat), trage fișierul pe taburi (zona unde titlurile temelor sunt afișate) "
},
"manageFavicons": { "manageFavicons": {
"message": "Favicons în coloana 'se aplică la'" "message": "Favicons în coloana 'se aplică la'"
}, },
@ -469,6 +493,9 @@
"optionsAdvancedExposeIframes": { "optionsAdvancedExposeIframes": {
"message": "Expuneți iframes via HTML[stylus-iframe]" "message": "Expuneți iframes via HTML[stylus-iframe]"
}, },
"optionsAdvancedExposeIframesNote": {
"message": "Expune domain-ul site-ului in fiecare iframe.\nActivează scrierea de CSS specific pentru iframe precum:\nhtml[stylus-iframe$=\"twitter.com\"] h1 { display:none }"
},
"optionsAdvancedNewStyleAsUsercss": { "optionsAdvancedNewStyleAsUsercss": {
"message": "Scrieți temă nouă în formatul usercss" "message": "Scrieți temă nouă în formatul usercss"
}, },
@ -568,6 +595,9 @@
"prefShowBadge": { "prefShowBadge": {
"message": "Numărul de teme active pentru site-ul curent" "message": "Numărul de teme active pentru site-ul curent"
}, },
"previewTooltip": {
"message": "Aplică temporar modificările fără a salva.\nSalvează tema pentru a face schimbările permanente."
},
"replace": { "replace": {
"message": "Înlocuiți" "message": "Înlocuiți"
}, },
@ -622,6 +652,9 @@
"sectionRemove": { "sectionRemove": {
"message": "Ștergeți secțiunea" "message": "Ștergeți secțiunea"
}, },
"sectionRestore": {
"message": "Restaurează o secțiune ștearsă"
},
"shortcutsNote": { "shortcutsNote": {
"message": "Creeați keyboard shortcuts" "message": "Creeați keyboard shortcuts"
}, },
@ -655,6 +688,9 @@
"styleBeautifyIndentConditional": { "styleBeautifyIndentConditional": {
"message": "Indentare @media, @supports" "message": "Indentare @media, @supports"
}, },
"styleBeautifyPreserveNewlines": {
"message": "Menține linii noi"
},
"styleCancelEditLabel": { "styleCancelEditLabel": {
"message": "Înapoi la manager" "message": "Înapoi la manager"
}, },
@ -810,6 +846,9 @@
"unreachableAMOHint": { "unreachableAMOHint": {
"message": "Pentru a permite accesul deschideți <about:config>, right-click pe listă, click 'New', apoi 'Boolean', paste <privacy.resistFingerprinting.block_mozAddonManager> și click OK, <true>, OK, reâncărcați pagina <addons.mozilla.org>." "message": "Pentru a permite accesul deschideți <about:config>, right-click pe listă, click 'New', apoi 'Boolean', paste <privacy.resistFingerprinting.block_mozAddonManager> și click OK, <true>, OK, reâncărcați pagina <addons.mozilla.org>."
}, },
"unreachableAMOHintNewFF": {
"message": "În Firefox 60+ va trebui sa fie șters domain-ul AMO din <extensions.webextensions.restrictedDomains> din <about:config>."
},
"unreachableAMOHintOldFF": { "unreachableAMOHintOldFF": {
"message": "Doar Firefox 59 sau mai nou poate fi configurat să permită WebExtension-urilor să adauge elemente la site-uri CSP-protected precum acesta." "message": "Doar Firefox 59 sau mai nou poate fi configurat să permită WebExtension-urilor să adauge elemente la site-uri CSP-protected precum acesta."
}, },
@ -860,6 +899,9 @@
"updatesCurrentlyInstalled": { "updatesCurrentlyInstalled": {
"message": "Update-uri instalate:" "message": "Update-uri instalate:"
}, },
"usercssAvoidOverwriting": {
"message": "Vă rugăm să modificați valoarea @name și @namespace pentru a împiedica scrierea peste o temă existentă."
},
"usercssConfigIncomplete": { "usercssConfigIncomplete": {
"message": "Tema a fost updatată sau ștearsă după ce configurațiile au fost afișate. Aceste variabile nu au fost salvate pentru a nu corupe metadata temei." "message": "Tema a fost updatată sau ștearsă după ce configurațiile au fost afișate. Aceste variabile nu au fost salvate pentru a nu corupe metadata temei."
}, },
@ -872,6 +914,9 @@
"usercssReplaceTemplateName": { "usercssReplaceTemplateName": {
"message": "@name este gol și înlocuiețte valoarea de bază" "message": "@name este gol și înlocuiețte valoarea de bază"
}, },
"usercssReplaceTemplateSectionBody": {
"message": "Introduce cod aici..."
},
"versionInvalidOlder": { "versionInvalidOlder": {
"message": "Versiunea este mai veche decât cea instalată." "message": "Versiunea este mai veche decât cea instalată."
}, },

View File

@ -5,6 +5,9 @@
"addStyleTitle": { "addStyleTitle": {
"message": "Lägg till stil" "message": "Lägg till stil"
}, },
"alphaChannel": {
"message": "Opacitet"
},
"appliesAdd": { "appliesAdd": {
"message": "Lägg till" "message": "Lägg till"
}, },
@ -46,6 +49,9 @@
"applyAllUpdates": { "applyAllUpdates": {
"message": "Verkställ alla uppdateringar" "message": "Verkställ alla uppdateringar"
}, },
"bckpInstStyles": {
"message": "Exportera stilar"
},
"checkAllUpdates": { "checkAllUpdates": {
"message": "Sök efter uppdateringar" "message": "Sök efter uppdateringar"
}, },
@ -129,9 +135,15 @@
"externalUsercssDocument": { "externalUsercssDocument": {
"message": "Dokumentation för Usercss" "message": "Dokumentation för Usercss"
}, },
"findStyles": {
"message": "Hitta stilar"
},
"findStylesForSite": { "findStylesForSite": {
"message": "Hitta fler stilar för denna sida" "message": "Hitta fler stilar för denna sida"
}, },
"genericAdd": {
"message": "Lägg till"
},
"genericDisabledLabel": { "genericDisabledLabel": {
"message": "Inaktiverad" "message": "Inaktiverad"
}, },
@ -141,6 +153,15 @@
"genericHistoryLabel": { "genericHistoryLabel": {
"message": "Historik" "message": "Historik"
}, },
"genericNext": {
"message": "Nästa"
},
"genericPrevious": {
"message": "Föregående"
},
"genericResetLabel": {
"message": "Återställ"
},
"helpAlt": { "helpAlt": {
"message": "Hjälp" "message": "Hjälp"
}, },
@ -165,6 +186,18 @@
"linkGetStyles": { "linkGetStyles": {
"message": "Skaffa stilar" "message": "Skaffa stilar"
}, },
"linkTranslate": {
"message": "Översätt"
},
"manageFavicons": {
"message": "Ikoner i 'Gäller för' kolumnen"
},
"manageFaviconsGray": {
"message": "Nedtonade"
},
"manageFaviconsHelp": {
"message": "Stylus använder en extern tjänst https://www.google.com/s2/favicons"
},
"manageFilters": { "manageFilters": {
"message": "Filter" "message": "Filter"
}, },
@ -201,12 +234,39 @@
"openManage": { "openManage": {
"message": "Hantera installerade stilar" "message": "Hantera installerade stilar"
}, },
"openOptionsPopup": {
"message": "Alternativ"
},
"openStylesManager": {
"message": "Öppna stilhanteraren"
},
"optionsAdvancedNewStyleAsUsercss": { "optionsAdvancedNewStyleAsUsercss": {
"message": "Skriv ny stil som Usercss" "message": "Skriv ny stil som Usercss"
}, },
"optionsCheck": {
"message": "Uppdatera stilar"
},
"optionsCheckUpdate": {
"message": "Leta efter och installera alla tillgängliga uppdateringar"
},
"optionsHeading": { "optionsHeading": {
"message": "Alternativ" "message": "Alternativ"
}, },
"optionsOpenManager": {
"message": "Hantera stilar"
},
"optionsReset": {
"message": "Återställ alternativen till standard"
},
"optionsResetButton": {
"message": "Återställ alternativ"
},
"paginationNext": {
"message": "Nästa sida"
},
"paginationPrevious": {
"message": "Föregående sida"
},
"popupStylesFirst": { "popupStylesFirst": {
"message": "Lista stilar före kommandon i verktygsfältets knappmeny" "message": "Lista stilar före kommandon i verktygsfältets knappmeny"
}, },
@ -222,6 +282,9 @@
"replaceWith": { "replaceWith": {
"message": "Ersätt med" "message": "Ersätt med"
}, },
"retrieveBckp": {
"message": "Importera stilar"
},
"search": { "search": {
"message": "Sök" "message": "Sök"
}, },
@ -243,6 +306,15 @@
"sectionRemove": { "sectionRemove": {
"message": "Ta bort sektion" "message": "Ta bort sektion"
}, },
"sectionRestore": {
"message": "Återställ borttagen sektion"
},
"shortcuts": {
"message": "Genvägar"
},
"shortcutsNote": {
"message": "Ställ in tangentbordsgenvägar"
},
"styleBadRegexp": { "styleBadRegexp": {
"message": "Regexp:en är ogiltig" "message": "Regexp:en är ogiltig"
}, },

View File

@ -703,6 +703,9 @@
"sectionRemove": { "sectionRemove": {
"message": "删除此部分" "message": "删除此部分"
}, },
"sectionRestore": {
"message": "撤销删除"
},
"shortcuts": { "shortcuts": {
"message": "快捷键" "message": "快捷键"
}, },

View File

@ -153,9 +153,8 @@ global API_METHODS
case 0: case 0:
// re-install is invalid in a soft upgrade // re-install is invalid in a soft upgrade
if (!ignoreDigest) { if (!ignoreDigest) {
return Promise.reject(STATES.SAME_VERSION); const sameCode = text === style.sourceCode;
} else if (text === style.sourceCode) { return Promise.reject(sameCode ? STATES.SAME_CODE : STATES.SAME_VERSION);
return Promise.reject(STATES.SAME_CODE);
} }
break; break;
case 1: case 1:
@ -186,10 +185,14 @@ global API_METHODS
json.originalName = json.name; json.originalName = json.name;
} }
if (styleSectionsEqual(json, style)) { if (styleSectionsEqual(json, style, {checkSource: true})) {
// update digest even if save === false as there might be just a space added etc. // update digest even if save === false as there might be just a space added etc.
saveStyle(Object.assign(json, {reason: 'update-digest'})); json.reason = 'update-digest';
return saveStyle(json)
.then(saved => {
style.originalDigest = saved.originalDigest;
return Promise.reject(STATES.SAME_CODE); return Promise.reject(STATES.SAME_CODE);
});
} }
if (!style.originalDigest && !ignoreDigest) { if (!style.originalDigest && !ignoreDigest) {

View File

@ -18,6 +18,13 @@
var docRewriteObserver; var docRewriteObserver;
var docRootObserver; var docRootObserver;
// FF59+ bug workaround
// See https://github.com/openstyles/stylus/issues/461
// Since it's easy to spoof the browser version in pre-Quantum FF we're checking
// for getPreventDefault which got removed in FF59 https://bugzil.la/691151
const FF_BUG461 = !CHROME && !isOwnPage && !Event.prototype.getPreventDefault;
const pageContextQueue = [];
requestStyles(); requestStyles();
chrome.runtime.onMessage.addListener(applyOnMessage); chrome.runtime.onMessage.addListener(applyOnMessage);
window.applyOnMessage = applyOnMessage; window.applyOnMessage = applyOnMessage;
@ -262,6 +269,10 @@
docRootObserver.firstStart(); docRootObserver.firstStart();
} }
if (FF_BUG461 && (gotNewStyles || styles.needTransitionPatch)) {
setContentsInPageContext();
}
if (!isOwnPage && !docRewriteObserver && styleElements.size) { if (!isOwnPage && !docRewriteObserver && styleElements.size) {
initDocRewriteObserver(); initDocRewriteObserver();
} }
@ -284,6 +295,8 @@
// workaround for Chrome devtools bug fixed in v65 // workaround for Chrome devtools bug fixed in v65
el.remove(); el.remove();
el = null; el = null;
} else if (FF_BUG461) {
pageContextQueue.push({id: el.id, el, code});
} else { } else {
el.textContent = code; el.textContent = code;
} }
@ -299,13 +312,15 @@
// HTML document style; also works on HTML-embedded SVG // HTML document style; also works on HTML-embedded SVG
el = document.createElement('style'); el = document.createElement('style');
} }
Object.assign(el, { el.id = id;
id, el.type = 'text/css';
type: 'text/css',
textContent: code,
});
// SVG className is not a string, but an instance of SVGAnimatedString // SVG className is not a string, but an instance of SVGAnimatedString
el.classList.add('stylus'); el.classList.add('stylus');
if (FF_BUG461) {
pageContextQueue.push({id: el.id, el, code});
} else {
el.textContent = code;
}
addStyleElement(el); addStyleElement(el);
} }
styleElements.set(id, el); styleElements.set(id, el);
@ -313,6 +328,33 @@
return el; return el;
} }
function setContentsInPageContext() {
try {
(document.head || ROOT).appendChild(document.createElement('script')).text = `
document.currentScript.remove();
for (const {id, code} of ${JSON.stringify(pageContextQueue)}) {
(
document.getElementById(id) ||
document.querySelector('style.stylus[id="' + id + '"]') ||
{}
).textContent = code;
}
`;
} catch (e) {}
let failedSome;
for (const {el, code} of pageContextQueue) {
if (el.textContent !== code) {
el.textContent = code;
failedSome = true;
}
}
if (failedSome) {
console.debug('Could not set code of some styles in page context, ' +
'see https://github.com/openstyles/stylus/issues/461');
}
pageContextQueue.length = 0;
}
function addStyleElement(newElement) { function addStyleElement(newElement) {
if (!ROOT) { if (!ROOT) {
return; return;
@ -443,7 +485,6 @@
function initDocRootObserver() { function initDocRootObserver() {
let lastRestorationTime = 0; let lastRestorationTime = 0;
let restorationCounter = 0; let restorationCounter = 0;
let scheduledSort = false;
let observing = false; let observing = false;
let sorting = false; let sorting = false;
let observer; let observer;
@ -504,24 +545,13 @@
return true; return true;
} }
} }
function sortStyleElements({force} = {}) { function sortStyleElements() {
if (!observing || if (!observing) return;
!force && scheduledSort) {
return;
}
scheduledSort = false;
let prevExpected = document.documentElement.lastElementChild; let prevExpected = document.documentElement.lastElementChild;
while (prevExpected && isSkippable(prevExpected, true)) { while (prevExpected && isSkippable(prevExpected, true)) {
prevExpected = prevExpected.previousElementSibling; prevExpected = prevExpected.previousElementSibling;
} }
if (!prevExpected) { if (!prevExpected) return;
return;
}
if (!CHROME && !force && window !== top) {
requestAnimationFrame(() => sortStyleElements({force: true}));
scheduledSort = true;
return;
}
for (const el of styleElements.values()) { for (const el of styleElements.values()) {
if (!isMovable(el)) { if (!isMovable(el)) {
continue; continue;

View File

@ -40,7 +40,8 @@ function beautify(event) {
$create('.buttons', [ $create('.buttons', [
$create('button', { $create('button', {
attributes: {role: 'close'}, attributes: {role: 'close'},
onclick: showHelp.close, // showHelp.close will be defined after showHelp() is invoked
onclick: () => showHelp.close(),
}, t('confirmClose')), }, t('confirmClose')),
$create('button', { $create('button', {
attributes: {role: 'undo'}, attributes: {role: 'undo'},

View File

@ -43,6 +43,9 @@ onDOMscriptReady('/codemirror.js').then(() => {
}); });
CodeMirror.defineInitHook(cm => { CodeMirror.defineInitHook(cm => {
if (!cm.display.wrapper.closest('#sections')) {
return;
}
if (prefs.get('editor.livePreview') && styleId) { if (prefs.get('editor.livePreview') && styleId) {
cm.on('changes', updatePreview); cm.on('changes', updatePreview);
} }

View File

@ -13,7 +13,7 @@ function createSourceEditor(style) {
$('#save-button').disabled = true; $('#save-button').disabled = true;
$('#mozilla-format-container').remove(); $('#mozilla-format-container').remove();
$('#save-button').onclick = save; $('#save-button').onclick = save;
$('#header').addEventListener('wheel', headerOnScroll, {passive: true}); $('#header').addEventListener('wheel', headerOnScroll);
$('#sections').textContent = ''; $('#sections').textContent = '';
$('#sections').appendChild($create('.single-editor')); $('#sections').appendChild($create('.single-editor'));
@ -340,7 +340,7 @@ function createSourceEditor(style) {
} }
cm.display.scroller.scrollTop += cm.display.scroller.scrollTop +=
// WheelEvent.DOM_DELTA_LINE // WheelEvent.DOM_DELTA_LINE
deltaMode === 1 ? deltaY * cm.display.cachedTextHeight : deltaMode === 1 ? deltaY * cm.defaultTextHeight() :
// WheelEvent.DOM_DELTA_PAGE // WheelEvent.DOM_DELTA_PAGE
deltaMode === 2 || shiftKey ? Math.sign(deltaY) * cm.display.scroller.clientHeight : deltaMode === 2 || shiftKey ? Math.sign(deltaY) * cm.display.scroller.clientHeight :
// WheelEvent.DOM_DELTA_PIXEL // WheelEvent.DOM_DELTA_PIXEL

View File

@ -313,20 +313,31 @@ function initCollapsibles({bindClickOn = 'h2'} = {}) {
} }
} }
// Makes the focus outline appear on keyboard tabbing, but not on mouse clicks.
function focusAccessibility() { function focusAccessibility() {
// Makes the focus outline appear on keyboard tabbing, but not on mouse clicks. // last event's focusedViaClick
// Since we don't want full layout recalc, we modify only the closest focusable element, focusAccessibility.lastFocusedViaClick = false;
// which we try to find in DOM for this many parentElement jumps: // tags of focusable elements;
const focusables = focusAccessibility.ELEMENTS = // to avoid a full layout recalc we modify the closest one
['a', 'button', 'input', 'textarea', 'label', 'select', 'summary']; focusAccessibility.ELEMENTS = [
'a',
'button',
'input',
'textarea',
'label',
'select',
'summary',
];
// try to find a focusable parent for this many parentElement jumps:
const GIVE_UP_DEPTH = 4; const GIVE_UP_DEPTH = 4;
addEventListener('mousedown', suppressOutlineOnClick, {passive: true}); addEventListener('mousedown', suppressOutlineOnClick, {passive: true});
addEventListener('keydown', keepOutlineOnTab, {passive: true}); addEventListener('keydown', keepOutlineOnTab, {passive: true});
function suppressOutlineOnClick({target}) { function suppressOutlineOnClick({target}) {
for (let el = target, i = 0; el && i++ < GIVE_UP_DEPTH; el = el.parentElement) { for (let el = target, i = 0; el && i++ < GIVE_UP_DEPTH; el = el.parentElement) {
if (focusables.includes(el.localName)) { if (focusAccessibility.ELEMENTS.includes(el.localName)) {
focusAccessibility.lastFocusedViaClick = true;
if (el.dataset.focusedViaClick === undefined) { if (el.dataset.focusedViaClick === undefined) {
el.dataset.focusedViaClick = ''; el.dataset.focusedViaClick = '';
} }
@ -337,13 +348,14 @@ function focusAccessibility() {
function keepOutlineOnTab(event) { function keepOutlineOnTab(event) {
if (event.which === 9) { if (event.which === 9) {
focusAccessibility.lastFocusedViaClick = false;
setTimeout(keepOutlineOnTab, 0, true); setTimeout(keepOutlineOnTab, 0, true);
return; return;
} else if (event !== true) { } else if (event !== true) {
return; return;
} }
let el = document.activeElement; let el = document.activeElement;
if (!el || !focusables.includes(el.localName)) { if (!el || !focusAccessibility.ELEMENTS.includes(el.localName)) {
return; return;
} }
if (el.dataset.focusedViaClick !== undefined) { if (el.dataset.focusedViaClick !== undefined) {
@ -360,18 +372,23 @@ function focusAccessibility() {
* Switches to the next/previous keyboard-focusable element * Switches to the next/previous keyboard-focusable element
* @param {HTMLElement} rootElement * @param {HTMLElement} rootElement
* @param {Number} step - for exmaple 1 or -1 * @param {Number} step - for exmaple 1 or -1
* @returns {HTMLElement|false|undefined} -
* HTMLElement: focus changed,
* false: focus unchanged,
* undefined: nothing to focus
*/ */
function moveFocus(rootElement, step) { function moveFocus(rootElement, step) {
const elements = [...rootElement.getElementsByTagName('*')]; const elements = [...rootElement.getElementsByTagName('*')];
const activeIndex = Math.max(0, elements.indexOf(document.activeElement)); const activeIndex = Math.max(0, elements.indexOf(document.activeElement));
const num = elements.length; const num = elements.length;
const {activeElement} = document;
for (let i = 1; i < num; i++) { for (let i = 1; i < num; i++) {
const elementIndex = (activeIndex + i * step + num) % num; const elementIndex = (activeIndex + i * step + num) % num;
// we don't use positive tabindex so we stop at any valid value // we don't use positive tabindex so we stop at any valid value
const el = elements[elementIndex]; const el = elements[elementIndex];
if (!el.disabled && el.tabIndex >= 0) { if (!el.disabled && el.tabIndex >= 0) {
el.focus(); el.focus();
return; return activeElement !== el && el;
} }
} }
} }

View File

@ -1,7 +1,24 @@
'use strict'; 'use strict';
// ignoreCode=true is used by invalidateCache to determine if cached filters should be cleared /**
function styleSectionsEqual({sections: a}, {sections: b}, {ignoreCode = false} = {}) { * @param {Style} a - first style object
* @param {Style} b - second style object
* @param {Object} options
* @param {Boolean=} options.ignoreCode -
* true used by invalidateCache to determine if cached filters should be cleared
* @param {Boolean=} options.checkSource -
* true used by update check to compare the server response
* instead of sections that depend on @preprocessor
* @returns {Boolean|undefined}
*/
function styleSectionsEqual(a, b, {ignoreCode, checkSource} = {}) {
if (checkSource &&
typeof a.sourceCode === 'string' &&
typeof b.sourceCode === 'string') {
return a.sourceCode === b.sourceCode;
}
a = a.sections;
b = b.sections;
if (!a || !b) { if (!a || !b) {
return undefined; return undefined;
} }

View File

@ -203,7 +203,7 @@ function importFromString(jsonString, oldStyles) {
messageBox({ messageBox({
title: t('importReportTitle'), title: t('importReportTitle'),
contents: report.length ? report : t('importReportUnchanged'), contents: report.length ? report : t('importReportUnchanged'),
buttons: [t('confirmOK'), numChanged && t('undo')], buttons: [t('confirmClose'), numChanged && t('undo')],
onshow: bindClick, onshow: bindClick,
}).then(({button}) => { }).then(({button}) => {
if (button === 1) { if (button === 1) {
@ -241,7 +241,7 @@ function importFromString(jsonString, oldStyles) {
.then(() => messageBox({ .then(() => messageBox({
title: t('importReportUndoneTitle'), title: t('importReportUndoneTitle'),
contents: newIds.length + ' ' + t('importReportUndone'), contents: newIds.length + ' ' + t('importReportUndone'),
buttons: [t('confirmOK')], buttons: [t('confirmClose')],
})); }));
} }

View File

@ -71,6 +71,11 @@ a:hover {
max-width: calc(100% - 30px); max-width: calc(100% - 30px);
} }
#check-all-updates-force {
white-space: normal;
text-align: left;
}
#header h1 { #header h1 {
margin-top: 0; margin-top: 0;
margin-bottom: .3em; margin-bottom: .3em;
@ -474,7 +479,7 @@ a:hover {
cursor: pointer; cursor: pointer;
} }
.newUI .entry .style-name::before { .newUI .entry .style-name:hover::before {
content: ""; content: "";
position: absolute; position: absolute;
top: 0; top: 0;
@ -483,13 +488,6 @@ a:hover {
bottom: 0; bottom: 0;
background: linear-gradient(to right, hsla(180, 50%, 30%, 0.2), hsla(180, 20%, 10%, 0.05) 50%, transparent); background: linear-gradient(to right, hsla(180, 50%, 30%, 0.2), hsla(180, 20%, 10%, 0.05) 50%, transparent);
pointer-events: none; pointer-events: none;
opacity: 0;
transition: opacity .1s;
will-change: opacity;
}
.newUI .entry .style-name:hover::before {
opacity: 1;
} }
.newUI .entry.enabled .style-name:hover .style-name-link { .newUI .entry.enabled .style-name:hover .style-name-link {
@ -817,6 +815,15 @@ input[id^="manage.newUI"] {
margin-top: 1ex; margin-top: 1ex;
} }
#update-all-no-updates[data-skipped-edited="true"] {
font-weight: bold;
}
#update-all-no-updates[data-skipped-edited="true"]::after {
font-weight: normal;
display: block;
}
/* highlight updated/added styles */ /* highlight updated/added styles */
.highlight { .highlight {
animation: highlight 10s cubic-bezier(0,.82,.47,.98); animation: highlight 10s cubic-bezier(0,.82,.47,.98);

View File

@ -106,10 +106,10 @@ function initGlobalEvents() {
.disabled h2::after { .disabled h2::after {
content: "${t('genericDisabledLabel')}"; content: "${t('genericDisabledLabel')}";
} }
#update-all-no-updates[data-skipped-edited="true"]:after { #update-all-no-updates[data-skipped-edited="true"]::after {
content: " ${t('updateAllCheckSucceededSomeEdited')}"; content: " ${t('updateAllCheckSucceededSomeEdited')}";
} }
body.all-styles-hidden-by-filters:after { body.all-styles-hidden-by-filters::after {
content: "${t('filteredStylesAllHidden')}"; content: "${t('filteredStylesAllHidden')}";
} }
`)); `));
@ -153,17 +153,16 @@ function showStyles(styles = [], matchUrlIds) {
filterAndAppend({container: renderBin}).then(sorter.updateStripes); filterAndAppend({container: renderBin}).then(sorter.updateStripes);
if (index < sorted.length) { if (index < sorted.length) {
requestAnimationFrame(renderStyles); requestAnimationFrame(renderStyles);
if (firstRun) setTimeout(recreateStyleTargets, 0, {styles, iconsOnly: true}); if (firstRun) setTimeout(getFaviconImgSrc);
firstRun = false; firstRun = false;
return; return;
} }
if (newUI.enabled && newUI.favicons) { setTimeout(getFaviconImgSrc);
setTimeout(recreateStyleTargets, 0, {iconsOnly: true}); if (sessionStorage.justEditedStyleId) {
} highlightEditedStyle();
if ('scrollY' in (history.state || {}) && !sessionStorage.justEditedStyleId) { } else if ('scrollY' in (history.state || {})) {
setTimeout(window.scrollTo, 0, 0, history.state.scrollY); setTimeout(window.scrollTo, 0, 0, history.state.scrollY);
} }
highlightEditedStyle();
} }
} }
@ -238,10 +237,10 @@ function createStyleElement({style, name}) {
} }
function createStyleTargetsElement({entry, style, iconsOnly}) { function createStyleTargetsElement({entry, style}) {
const parts = createStyleElement.parts; const parts = createStyleElement.parts;
const entryTargets = $('.targets', entry); const entryTargets = $('.targets', entry);
const targets = iconsOnly ? entryTargets : parts.targets.cloneNode(true); const targets = parts.targets.cloneNode(true);
let container = targets; let container = targets;
let numTargets = 0; let numTargets = 0;
const displayed = new Set(); const displayed = new Set();
@ -252,15 +251,14 @@ function createStyleTargetsElement({entry, style, iconsOnly}) {
continue; continue;
} }
displayed.add(targetValue); displayed.add(targetValue);
const element = iconsOnly ? targets.children[numTargets] : template.appliesToTarget.cloneNode(true); const element = template.appliesToTarget.cloneNode(true);
if (!newUI.enabled) { if (!newUI.enabled) {
if (numTargets === 10) { if (numTargets === 10) {
container = container.appendChild(template.extraAppliesTo.cloneNode(true)); container = container.appendChild(template.extraAppliesTo.cloneNode(true));
} else if (numTargets > 1) { } else if (numTargets > 0) {
container.appendChild(template.appliesToSeparator.cloneNode(true)); container.appendChild(template.appliesToSeparator.cloneNode(true));
} }
} }
if (!iconsOnly) {
element.dataset.type = type; element.dataset.type = type;
element.appendChild( element.appendChild(
document.createTextNode( document.createTextNode(
@ -268,7 +266,6 @@ function createStyleTargetsElement({entry, style, iconsOnly}) {
targetValue + targetValue +
(parts.decorations[type + 'After'] || ''))); (parts.decorations[type + 'After'] || '')));
container.appendChild(element); container.appendChild(element);
}
numTargets++; numTargets++;
} }
} }
@ -279,9 +276,7 @@ function createStyleTargetsElement({entry, style, iconsOnly}) {
} }
} }
if (numTargets) { if (numTargets) {
if (!iconsOnly) {
entryTargets.parentElement.replaceChild(targets, entryTargets); entryTargets.parentElement.replaceChild(targets, entryTargets);
}
} else if (!entry.classList.contains('global') || } else if (!entry.classList.contains('global') ||
!entryTargets.firstElementChild) { !entryTargets.firstElementChild) {
if (entryTargets.firstElementChild) { if (entryTargets.firstElementChild) {
@ -293,25 +288,8 @@ function createStyleTargetsElement({entry, style, iconsOnly}) {
} }
function recreateStyleTargets({styles, iconsOnly = false} = {}) {
Promise.resolve(styles || API.getStyles()).then(styles => {
for (const style of styles) {
const entry = $(ENTRY_ID_PREFIX + style.id);
if (entry) {
createStyleTargetsElement({
entry,
style,
iconsOnly,
});
}
}
if (newUI.enabled && newUI.favicons) {
debounce(getFaviconImgSrc);
}
});
}
function getFaviconImgSrc(container = installed) { function getFaviconImgSrc(container = installed) {
if (!newUI.enabled || !newUI.favicons) return;
const regexpRemoveNegativeLookAhead = /(\?!([^)]+\))|\(\?![\w(]+[^)]+[\w|)]+)/g; const regexpRemoveNegativeLookAhead = /(\?!([^)]+\))|\(\?![\w(]+[^)]+[\w|)]+)/g;
// replace extra characters & all but the first group entry "(abc|def|ghi)xyz" => abcxyz // replace extra characters & all but the first group entry "(abc|def|ghi)xyz" => abcxyz
const regexpReplaceExtraCharacters = /[\\(]|((\|\w+)+\))/g; const regexpReplaceExtraCharacters = /[\\(]|((\|\w+)+\))/g;
@ -557,9 +535,7 @@ function handleUpdate(style, {reason, method} = {}) {
animateElement(entry); animateElement(entry);
requestAnimationFrame(() => scrollElementIntoView(entry)); requestAnimationFrame(() => scrollElementIntoView(entry));
} }
if (newUI.enabled && newUI.favicons) {
getFaviconImgSrc(entry); getFaviconImgSrc(entry);
}
function handleToggledOrCodeOnly() { function handleToggledOrCodeOnly() {
const newStyleMeta = getStyleWithNoCode(style); const newStyleMeta = getStyleWithNoCode(style);
@ -673,7 +649,7 @@ function switchUI({styleOnly} = {}) {
return; return;
} }
if (missingFavicons) { if (missingFavicons) {
recreateStyleTargets(); debounce(getFaviconImgSrc);
return; return;
} }
} }
@ -682,8 +658,15 @@ function switchUI({styleOnly} = {}) {
function onVisibilityChange() { function onVisibilityChange() {
switch (document.visibilityState) { switch (document.visibilityState) {
// page restored without reloading via history navigation (currently only in FF) // page restored without reloading via history navigation (currently only in FF)
// the catch here is that DOM may be outdated so we'll at least refresh the just edited style
// assuming other changes aren't important enough to justify making a complicated DOM sync
case 'visible': case 'visible':
highlightEditedStyle(); if (sessionStorage.justEditedStyleId) {
API.getStyles({id: sessionStorage.justEditedStyleId}).then(([style]) => {
handleUpdate(style, {method: 'styleUpdated'});
});
delete sessionStorage.justEditedStyleId;
}
break; break;
// going away // going away
case 'hidden': case 'hidden':

View File

@ -155,6 +155,16 @@ function reportUpdateState({updated, style, error, STATES}) {
$('.update-note', entry).textContent = message; $('.update-note', entry).textContent = message;
$('.check-update', entry).title = newUI.enabled ? message : ''; $('.check-update', entry).title = newUI.enabled ? message : '';
$('.update', entry).title = t(edited ? 'updateCheckManualUpdateForce' : 'installUpdate'); $('.update', entry).title = t(edited ? 'updateCheckManualUpdateForce' : 'installUpdate');
// digest may change silently when forcing an update of a locally edited style
// so we need to update it in entry's styleMeta in all open manager tabs
if (error === STATES.SAME_CODE) {
for (const view of chrome.extension.getViews({type: 'tab'})) {
if (view.location.pathname === location.pathname) {
const entry = view.$(ENTRY_ID_PREFIX + style.id);
if (entry) entry.styleMeta.originalDigest = style.originalDigest;
}
}
}
if (!isCheckAll) { if (!isCheckAll) {
renderUpdatesOnlyFilter({show: $('.can-update, .update-problem')}); renderUpdatesOnlyFilter({show: $('.can-update, .update-problem')});
} }

View File

@ -1,6 +1,6 @@
{ {
"name": "Stylus", "name": "Stylus",
"version": "1.4.20", "version": "1.4.21",
"minimum_chrome_version": "49", "minimum_chrome_version": "49",
"description": "__MSG_description__", "description": "__MSG_description__",
"homepage_url": "https://add0n.com/stylus.html", "homepage_url": "https://add0n.com/stylus.html",

View File

@ -34,7 +34,12 @@ function messageBox({
document.body.appendChild(messageBox.element); document.body.appendChild(messageBox.element);
messageBox.originalFocus = document.activeElement; messageBox.originalFocus = document.activeElement;
moveFocus(messageBox.element, 1); // skip external links like feedback
while ((moveFocus(messageBox.element, 1) || {}).target === '_blank') {/*NOP*/}
// suppress focus outline when invoked via click
if (focusAccessibility.lastFocusedViaClick && document.activeElement) {
document.activeElement.dataset.focusedViaClick = '';
}
if (typeof onshow === 'function') { if (typeof onshow === 'function') {
onshow(messageBox.element); onshow(messageBox.element);

View File

@ -1,14 +1,14 @@
{ {
"name": "Stylus", "name": "Stylus",
"version": "1.4.20", "version": "1.4.21",
"description": "Redesign the web with Stylus, a user styles manager", "description": "Redesign the web with Stylus, a user styles manager",
"license": "GPL-3.0-only", "license": "GPL-3.0-only",
"repository": "openstyles/stylus", "repository": "openstyles/stylus",
"author": "Stylus Team", "author": "Stylus Team",
"devDependencies": { "devDependencies": {
"archiver": "^2.1.1", "archiver": "^3.0.0",
"codemirror": "^5.39.2", "codemirror": "^5.40.0",
"eslint": "^5.3.0", "eslint": "^5.4.0",
"fs-extra": "^7.0.0", "fs-extra": "^7.0.0",
"jsonlint": "^1.6.3", "jsonlint": "^1.6.3",
"less": "^3.8.1", "less": "^3.8.1",
@ -17,7 +17,7 @@
"semver-bundle": "^0.1.1", "semver-bundle": "^0.1.1",
"stylelint-bundle": "^8.0.0", "stylelint-bundle": "^8.0.0",
"stylus-lang-bundle": "^0.54.5", "stylus-lang-bundle": "^0.54.5",
"updates": "^4.1.2" "updates": "^4.2.1"
}, },
"scripts": { "scripts": {
"lint": "eslint **/*.js || true", "lint": "eslint **/*.js || true",

View File

@ -129,7 +129,7 @@ function initPopup() {
$('label', info).textContent = t('unreachableAMO'); $('label', info).textContent = t('unreachableAMO');
const note = (FIREFOX < 59 ? t('unreachableAMOHintOldFF') : t('unreachableAMOHint')) + const note = (FIREFOX < 59 ? t('unreachableAMOHintOldFF') : t('unreachableAMOHint')) +
(FIREFOX < 60 ? '' : '\n' + t('unreachableAMOHintNewFF')); (FIREFOX < 60 ? '' : '\n' + t('unreachableAMOHintNewFF'));
const renderToken = s => s[0] === '<' ? $create('b', s.slice(1, -1)) : s; const renderToken = s => s[0] === '<' ? $create('b', tWordBreak(s.slice(1, -1))) : s;
const renderLine = line => $create('p', line.split(/(<.*?>)/).map(renderToken)); const renderLine = line => $create('p', line.split(/(<.*?>)/).map(renderToken));
const noteNode = $create('fragment', note.split('\n').map(renderLine)); const noteNode = $create('fragment', note.split('\n').map(renderLine));
const target = $('p', info); const target = $('p', info);

View File

@ -60,10 +60,7 @@ function updateExisting(lib) {
const folderRoot = `${vendorRoot}${folder}`; const folderRoot = `${vendorRoot}${folder}`;
const entries = fs.readdirSync(folderRoot); const entries = fs.readdirSync(folderRoot);
entries.forEach(entry => { entries.forEach(entry => {
// Remove $1 from "CodeMirror$1" in codemirror.js if (entry !== 'README.md' && entry !== 'LICENSE') {
if (entry === 'codemirror.js') {
renameCodeMirrorVariable(`${folderRoot}/${entry}`);
} else if (entry !== 'README.md' && entry !== 'LICENSE') {
// Ignore README.md & LICENSE files // Ignore README.md & LICENSE files
const entryPath = `${folderRoot}/${entry}`; const entryPath = `${folderRoot}/${entry}`;
try { try {
@ -72,6 +69,10 @@ function updateExisting(lib) {
folders.push(`${folder}/${entry}`); folders.push(`${folder}/${entry}`);
} else { } else {
fs.copySync(`${libRoot}${folder}/${entry}`, entryPath); fs.copySync(`${libRoot}${folder}/${entry}`, entryPath);
// Remove $1 from "CodeMirror$1" in codemirror.js
if (entry === 'codemirror.js') {
renameCodeMirrorVariable(entryPath);
}
} }
} }
} catch (err) { } catch (err) {

View File

@ -222,11 +222,9 @@
} }
} }
function hide({notify = true} = {}) { function hide() {
if (shown) { if (shown) {
if (notify) {
colorpickerCallback(''); colorpickerCallback('');
}
unregisterEvents(); unregisterEvents();
focusNoScroll(prevFocusedElement); focusNoScroll(prevFocusedElement);
$root.remove(); $root.remove();
@ -623,7 +621,7 @@
case 27: case 27:
e.preventDefault(); e.preventDefault();
e.stopPropagation(); e.stopPropagation();
hide({notify: false}); hide();
break; break;
} }
} }
@ -643,19 +641,22 @@
//region Event utilities //region Event utilities
function colorpickerCallback(colorString = currentColorToString()) { function colorpickerCallback(colorString = currentColorToString()) {
// Esc pressed? const isCallable = typeof options.callback === 'function';
if (!colorString) { // hiding
if (!colorString && isCallable) {
options.callback(''); options.callback('');
return;
} }
if ( if (
userActivity && userActivity &&
$inputs[currentFormat].every(el => el.checkValidity()) && $inputs[currentFormat].every(el => el.checkValidity())
typeof options.callback === 'function'
) { ) {
lastOutputColor = colorString.replace(/\b0\./g, '.'); lastOutputColor = colorString.replace(/\b0\./g, '.');
if (isCallable) {
options.callback(lastOutputColor); options.callback(lastOutputColor);
} }
} }
}
function captureMouse({button}, mode) { function captureMouse({button}, mode) {
if (button !== 0) { if (button !== 0) {

View File

@ -59,6 +59,7 @@ self.parserlib = (() => {
vmax: 'length', vmax: 'length',
vmin: 'length', vmin: 'length',
fr: 'length', fr: 'length',
q: 'length',
deg: 'angle', deg: 'angle',
rad: 'angle', rad: 'angle',
@ -756,7 +757,7 @@ self.parserlib = (() => {
'<gradient>': part => '<gradient>': part =>
part.type === 'function' && part.type === 'function' &&
/^(?:-(?:ms|moz|o|webkit)-)?(?:repeating-)?(?:radial-|linear-)?gradient/i.test(part), /^(?:-(?:ms|moz|o|webkit)-)?(?:repeating-)?(?:radial-|linear-|conic-)?gradient/i.test(part),
//eslint-disable-next-line no-use-before-define //eslint-disable-next-line no-use-before-define
'<hex-color>': part => part.tokenType === Tokens.HASH, '<hex-color>': part => part.tokenType === Tokens.HASH,

View File

@ -1,3 +1,3 @@
## CodeMirror v5.39.2 ## CodeMirror v5.40.0
Only files & folders that exist in the `vendor/codemirror` folder are copied from the `node_modules/codemirror` folder. Except all theme files are copied, in case new themes have been added. Only files & folders that exist in the `vendor/codemirror` folder are copied from the `node_modules/codemirror` folder. Except all theme files are copied, in case new themes have been added.

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) { (function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS if (typeof exports == "object" && typeof module == "object") // CommonJS

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
// Open simple dialogs on top of an editor. Relies on dialog.css. // Open simple dialogs on top of an editor. Relies on dialog.css.

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) { (function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS if (typeof exports == "object" && typeof module == "object") // CommonJS
@ -136,9 +136,7 @@
var prev = cur.ch == 0 ? " " : cm.getRange(Pos(cur.line, cur.ch - 1), cur) var prev = cur.ch == 0 ? " " : cm.getRange(Pos(cur.line, cur.ch - 1), cur)
if (!CodeMirror.isWordChar(next) && prev != ch && !CodeMirror.isWordChar(prev)) curType = "both"; if (!CodeMirror.isWordChar(next) && prev != ch && !CodeMirror.isWordChar(prev)) curType = "both";
else return CodeMirror.Pass; else return CodeMirror.Pass;
} else if (opening && (cm.getLine(cur.line).length == cur.ch || } else if (opening) {
isClosingBracket(next, pairs) ||
/\s/.test(next))) {
curType = "both"; curType = "both";
} else { } else {
return CodeMirror.Pass; return CodeMirror.Pass;
@ -175,11 +173,6 @@
}); });
} }
function isClosingBracket(ch, pairs) {
var pos = pairs.lastIndexOf(ch);
return pos > -1 && pos % 2 == 1;
}
function charsAround(cm, pos) { function charsAround(cm, pos) {
var str = cm.getRange(Pos(pos.line, pos.ch - 1), var str = cm.getRange(Pos(pos.line, pos.ch - 1),
Pos(pos.line, pos.ch + 1)); Pos(pos.line, pos.ch + 1));

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) { (function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS if (typeof exports == "object" && typeof module == "object") // CommonJS

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) { (function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS if (typeof exports == "object" && typeof module == "object") // CommonJS

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) { (function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS if (typeof exports == "object" && typeof module == "object") // CommonJS

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) { (function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS if (typeof exports == "object" && typeof module == "object") // CommonJS

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) { (function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS if (typeof exports == "object" && typeof module == "object") // CommonJS

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) { (function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS if (typeof exports == "object" && typeof module == "object") // CommonJS

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) { (function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS if (typeof exports == "object" && typeof module == "object") // CommonJS

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) { (function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS if (typeof exports == "object" && typeof module == "object") // CommonJS

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
// Depends on csslint.js from https://github.com/stubbornella/csslint // Depends on csslint.js from https://github.com/stubbornella/csslint

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
// Depends on jsonlint.js from https://github.com/zaach/jsonlint // Depends on jsonlint.js from https://github.com/zaach/jsonlint

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) { (function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS if (typeof exports == "object" && typeof module == "object") // CommonJS

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) { (function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS if (typeof exports == "object" && typeof module == "object") // CommonJS

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
// Highlighting text that matches the selection // Highlighting text that matches the selection
// //

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) { (function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS if (typeof exports == "object" && typeof module == "object") // CommonJS

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) { (function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS if (typeof exports == "object" && typeof module == "object") // CommonJS

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) { (function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS if (typeof exports == "object" && typeof module == "object") // CommonJS

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) { (function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS if (typeof exports == "object" && typeof module == "object") // CommonJS

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
// A rough approximation of Sublime Text's keybindings // A rough approximation of Sublime Text's keybindings
// Depends on addon/search/searchcursor.js and optionally addon/dialog/dialogs.js // Depends on addon/search/searchcursor.js and optionally addon/dialog/dialogs.js

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
/** /**
* Supported keybindings: * Supported keybindings:

View File

@ -1,7 +1,7 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
// This is CodeMirror (http://codemirror.net), a code editor // This is CodeMirror (https://codemirror.net), a code editor
// implemented in JavaScript on top of the browser's DOM. // implemented in JavaScript on top of the browser's DOM.
// //
// You can find some technical background for some of the code below // You can find some technical background for some of the code below
@ -7734,6 +7734,7 @@ function defineOptions(CodeMirror) {
option("tabindex", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || ""; }); option("tabindex", null, function (cm, val) { return cm.display.input.getField().tabIndex = val || ""; });
option("autofocus", null); option("autofocus", null);
option("direction", "ltr", function (cm, val) { return cm.doc.setDirection(val); }, true); option("direction", "ltr", function (cm, val) { return cm.doc.setDirection(val); }, true);
option("phrases", null);
} }
function guttersChanged(cm) { function guttersChanged(cm) {
@ -8572,6 +8573,11 @@ var addEditorMethods = function(CodeMirror) {
return old return old
}), }),
phrase: function(phraseText) {
var phrases = this.options.phrases;
return phrases && Object.prototype.hasOwnProperty.call(phrases, phraseText) ? phrases[phraseText] : phraseText
},
getInputField: function(){return this.display.input.getField()}, getInputField: function(){return this.display.input.getField()},
getWrapperElement: function(){return this.display.wrapper}, getWrapperElement: function(){return this.display.wrapper},
getScrollerElement: function(){return this.display.scroller}, getScrollerElement: function(){return this.display.scroller},
@ -9689,7 +9695,7 @@ CodeMirror.fromTextArea = fromTextArea;
addLegacyProps(CodeMirror); addLegacyProps(CodeMirror);
CodeMirror.version = "5.39.2"; CodeMirror.version = "5.40.0";
return CodeMirror; return CodeMirror;

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) { (function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS if (typeof exports == "object" && typeof module == "object") // CommonJS

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
(function(mod) { (function(mod) {
if (typeof exports == "object" && typeof module == "object") // CommonJS if (typeof exports == "object" && typeof module == "object") // CommonJS

View File

@ -1,5 +1,5 @@
// CodeMirror, copyright (c) by Marijn Haverbeke and others // CodeMirror, copyright (c) by Marijn Haverbeke and others
// Distributed under an MIT license: http://codemirror.net/LICENSE // Distributed under an MIT license: https://codemirror.net/LICENSE
// Stylus mode created by Dmitry Kiselyov http://git.io/AaRB // Stylus mode created by Dmitry Kiselyov http://git.io/AaRB