Merge branch 'develop' of github.com:ether/etherpad-lite into custom-obj-msg

This commit is contained in:
John McLear 2013-03-19 13:59:07 +00:00
commit d0e656d0a6
39 changed files with 287 additions and 177 deletions

View file

@ -1,3 +1,15 @@
# 1.2.9
* Fix: MAJOR Security issue, where a hacker could submit content as another user
* Fix: security issue due to unescaped user input
* Fix: Admin page at /admin redirects to /admin/ now to prevent breaking relative links
* Fix: indentation in chrome on linux
* Fix: PadUsers API endpoint
* NEW: A script to import data to all dbms
* NEW: Add authorId to chat and userlist as a data attribute
* NEW Refactor and fix our frontend tests
* NEW: Localisation updates
# 1.2.81 # 1.2.81
* Fix: CtrlZ-Y for Undo Redo * Fix: CtrlZ-Y for Undo Redo
* Fix: RTL functionality on contents & fix RTL/LTR tests and RTL in Safari * Fix: RTL functionality on contents & fix RTL/LTR tests and RTL in Safari

View file

@ -11,8 +11,8 @@ To make sure everybody is going in the same direction:
* easy to install for admins and easy to use for people * easy to install for admins and easy to use for people
* easy to integrate into other apps, but also usable as standalone * easy to integrate into other apps, but also usable as standalone
* using less resources on server side * using less resources on server side
* extensible, as much functionality should be extendable with plugins so changes don't have to be done in core * extensible, as much functionality should be extendable with plugins so changes don't have to be done in core.
Also, keep it maintainable. We don't wanna end ob as the monster Etherpad was! Also, keep it maintainable. We don't wanna end up as the monster Etherpad was!
## How to work with git? ## How to work with git?
* Don't work in your master branch. * Don't work in your master branch.

View file

@ -62,10 +62,11 @@ Update to the latest version with `git pull origin`, then run `bin\installOnWind
[Next steps](#next-steps). [Next steps](#next-steps).
## Linux ## Linux/Unix
You'll need gzip, git, curl, libssl develop libraries, python and gcc. You'll need gzip, git, curl, libssl develop libraries, python and gcc.
*For Debian/Ubuntu*: `apt-get install gzip git-core curl python libssl-dev pkg-config build-essential` *For Debian/Ubuntu*: `apt-get install gzip git-core curl python libssl-dev pkg-config build-essential`
*For Fedora/CentOS*: `yum install gzip git-core curl python openssl-devel && yum groupinstall "Development Tools"` *For Fedora/CentOS*: `yum install gzip git-core curl python openssl-devel && yum groupinstall "Development Tools"`
*For FreeBSD*: `portinstall node node, npm and git (optional)`
Additionally, you'll need [node.js](http://nodejs.org) installed, Ideally the latest stable version, be careful of installing nodejs from apt. Additionally, you'll need [node.js](http://nodejs.org) installed, Ideally the latest stable version, be careful of installing nodejs from apt.

View file

@ -19,7 +19,7 @@
"pad.toolbar.clearAuthorship.title": "Llimpiar los colores d'autor\u00eda", "pad.toolbar.clearAuthorship.title": "Llimpiar los colores d'autor\u00eda",
"pad.toolbar.import_export.title": "Importar\/Esportar ente distintos formatos de ficheru", "pad.toolbar.import_export.title": "Importar\/Esportar ente distintos formatos de ficheru",
"pad.toolbar.timeslider.title": "Eslizador de tiempu", "pad.toolbar.timeslider.title": "Eslizador de tiempu",
"pad.toolbar.savedRevision.title": "Revisiones guardaes", "pad.toolbar.savedRevision.title": "Guardar revisi\u00f3n",
"pad.toolbar.settings.title": "Configuraci\u00f3n", "pad.toolbar.settings.title": "Configuraci\u00f3n",
"pad.toolbar.embed.title": "Incrustar esti bloc", "pad.toolbar.embed.title": "Incrustar esti bloc",
"pad.toolbar.showusers.title": "Amosar los usuarios d'esti bloc", "pad.toolbar.showusers.title": "Amosar los usuarios d'esti bloc",
@ -34,6 +34,7 @@
"pad.settings.stickychat": "Alderique en pantalla siempres", "pad.settings.stickychat": "Alderique en pantalla siempres",
"pad.settings.colorcheck": "Colores d'autor\u00eda", "pad.settings.colorcheck": "Colores d'autor\u00eda",
"pad.settings.linenocheck": "N\u00famberos de llinia", "pad.settings.linenocheck": "N\u00famberos de llinia",
"pad.settings.rtlcheck": "\u00bfLleer el conten\u00edu de drecha a izquierda?",
"pad.settings.fontType": "Tipograf\u00eda:", "pad.settings.fontType": "Tipograf\u00eda:",
"pad.settings.fontType.normal": "Normal", "pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "Monoespaciada", "pad.settings.fontType.monospaced": "Monoespaciada",

View file

@ -0,0 +1,61 @@
{
"index.newPad": "\u0421\u0442\u0432\u0430\u0440\u044b\u0446\u044c",
"index.createOpenPad": "\u0446\u0456 \u0442\u0432\u0430\u0440\u044b\u0446\u044c\/\u0430\u0434\u043a\u0440\u044b\u0446\u044c \u0434\u0430\u043a\u0443\u043c\u044d\u043d\u0442 \u0437 \u043d\u0430\u0437\u0432\u0430\u0439:",
"pad.toolbar.bold.title": "\u0422\u043e\u045e\u0441\u0442\u044b (Ctrl-B)",
"pad.toolbar.italic.title": "\u041a\u0443\u0440\u0441\u0456\u045e (Ctrl-I)",
"pad.toolbar.underline.title": "\u041f\u0430\u0434\u043a\u0440\u044d\u0441\u044c\u043b\u0456\u0432\u0430\u043d\u044c\u043d\u0435 (Ctrl-U)",
"pad.toolbar.strikethrough.title": "\u0417\u0430\u043a\u0440\u044d\u0441\u044c\u043b\u0456\u0432\u0430\u043d\u044c\u043d\u0435",
"pad.toolbar.ol.title": "\u0423\u043f\u0430\u0440\u0430\u0434\u043a\u0430\u0432\u0430\u043d\u044b \u0441\u044c\u043f\u0456\u0441",
"pad.toolbar.ul.title": "\u041d\u0435\u045e\u043f\u0430\u0440\u0430\u0434\u043a\u0430\u0432\u0430\u043d\u044b \u0441\u044c\u043f\u0456\u0441",
"pad.toolbar.indent.title": "\u0412\u043e\u0434\u0441\u0442\u0443\u043f",
"pad.toolbar.unindent.title": "\u0412\u044b\u0441\u0442\u0443\u043f",
"pad.toolbar.undo.title": "\u0421\u043a\u0430\u0441\u0430\u0432\u0430\u0446\u044c(Ctrl-Z)",
"pad.toolbar.redo.title": "\u0412\u044f\u0440\u043d\u0443\u0446\u044c (Ctrl-Y)",
"pad.toolbar.clearAuthorship.title": "\u041f\u0440\u044b\u0431\u0440\u0430\u0446\u044c \u043a\u043e\u043b\u0435\u0440 \u0434\u0430\u043a\u0443\u043c\u044d\u043d\u0442\u0443",
"pad.toolbar.import_export.title": "\u0406\u043c\u043f\u0430\u0440\u0442\/\u042d\u043a\u0441\u043f\u0430\u0440\u0442 \u0437 \u0432\u044b\u043a\u0430\u0440\u044b\u0441\u0442\u0430\u043d\u044c\u043d\u0435 \u0440\u043e\u0437\u043d\u044b\u0445 \u0444\u0430\u0440\u043c\u0430\u0442\u0430\u045e \u0444\u0430\u0439\u043b\u0430\u045e",
"pad.toolbar.timeslider.title": "\u0428\u043a\u0430\u043b\u0430 \u0447\u0430\u0441\u0443",
"pad.toolbar.savedRevision.title": "\u0417\u0430\u0445\u0430\u0432\u0430\u0446\u044c \u0432\u044d\u0440\u0441\u0456\u044e",
"pad.toolbar.settings.title": "\u041d\u0430\u043b\u0430\u0434\u044b",
"pad.toolbar.embed.title": "\u0423\u0431\u0443\u0434\u0430\u0432\u0430\u0446\u044c \u0433\u044d\u0442\u044b \u0434\u0430\u043a\u0443\u043c\u044d\u043d\u0442",
"pad.toolbar.showusers.title": "\u041f\u0430\u043a\u0430\u0437\u0430\u0446\u044c \u043a\u0430\u0440\u044b\u0441\u0442\u0430\u043b\u044c\u043d\u0456\u043a\u0430\u045e \u0443 \u0433\u044d\u0442\u044b\u043c \u0434\u0430\u043a\u0443\u043c\u044d\u043d\u0446\u0435",
"pad.colorpicker.save": "\u0417\u0430\u0445\u0430\u0432\u0430\u0446\u044c",
"pad.colorpicker.cancel": "\u0421\u043a\u0430\u0441\u0430\u0432\u0430\u0446\u044c",
"pad.loading": "\u0417\u0430\u0433\u0440\u0443\u0437\u043a\u0430...",
"pad.passwordRequired": "\u0414\u043b\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0443 \u0434\u0430 \u0433\u044d\u0442\u0430\u0433\u0430 \u0434\u0430\u043a\u0443\u043c\u044d\u043d\u0442\u0430 \u043f\u0430\u0442\u0440\u044d\u0431\u043d\u044b \u043f\u0430\u0440\u043e\u043b\u044c",
"pad.permissionDenied": "\u0412\u044b \u043d\u044f \u043c\u0430\u0435\u0446\u0435 \u0434\u0430\u0437\u0432\u043e\u043b\u0443 \u043d\u0430 \u0434\u043e\u0441\u0442\u0443\u043f \u0434\u0430 \u0433\u044d\u0442\u0430\u0433\u0430 \u0434\u0430\u043a\u0443\u043c\u044d\u043d\u0442\u0430",
"pad.wrongPassword": "\u0412\u044b \u045e\u0432\u044f\u043b\u0456 \u043d\u044f\u0441\u043b\u0443\u0448\u043d\u044b \u043f\u0430\u0440\u043e\u043b\u044c",
"pad.settings.padSettings": "\u041d\u0430\u043b\u0430\u0434\u044b \u0434\u0430\u043a\u0443\u043c\u044d\u043d\u0442\u0430",
"pad.settings.myView": "\u041c\u043e\u0439 \u0432\u044b\u0433\u043b\u044f\u0434",
"pad.settings.stickychat": "\u0417\u0430\u045e\u0441\u0451\u0434\u044b \u043f\u0430\u043a\u0430\u0437\u0432\u0430\u0446\u044c \u0447\u0430\u0442",
"pad.settings.colorcheck": "\u041a\u043e\u043b\u0435\u0440\u044b \u0430\u045e\u0442\u0430\u0440\u0441\u0442\u0432\u0430",
"pad.settings.linenocheck": "\u041d\u0443\u043c\u0430\u0440\u044b \u0440\u0430\u0434\u043a\u043e\u045e",
"pad.settings.rtlcheck": "\u0422\u044d\u043a\u0441\u0442 \u0441\u043f\u0440\u0430\u0432\u0430-\u043d\u0430\u043b\u0435\u0432\u0430",
"pad.settings.fontType": "\u0422\u044b\u043f \u0448\u0440\u044b\u0444\u0442\u0443:",
"pad.settings.fontType.normal": "\u0417\u0432\u044b\u0447\u0430\u0439\u043d\u044b",
"pad.settings.fontType.monospaced": "\u041c\u043e\u043d\u0430\u0448\u044b\u0440\u044b\u043d\u043d\u044b",
"pad.settings.globalView": "\u0410\u0433\u0443\u043b\u044c\u043d\u044b \u0432\u044b\u0433\u043b\u044f\u0434",
"pad.settings.language": "\u041c\u043e\u0432\u0430:",
"pad.importExport.import_export": "\u0406\u043c\u043f\u0430\u0440\u0442\/\u042d\u043a\u0441\u043f\u0430\u0440\u0442",
"pad.importExport.import": "\u0417\u0430\u0433\u0440\u0443\u0437\u0456\u0436\u0430\u0439\u0446\u0435 \u043b\u044e\u0431\u044b\u044f \u0442\u044d\u043a\u0441\u0442\u0430\u0432\u044b\u044f \u0444\u0430\u0439\u043b\u044b \u0430\u0431\u043e \u0434\u0430\u043a\u0443\u043c\u044d\u043d\u0442\u044b",
"pad.importExport.importSuccessful": "\u041f\u0430\u0441\u044c\u043f\u044f\u0445\u043e\u0432\u0430!",
"pad.importExport.export": "\u042d\u043a\u0441\u043f\u0430\u0440\u0442\u0430\u0432\u0430\u0446\u044c \u0431\u044f\u0433\u0443\u0447\u044b \u0434\u0430\u043a\u0443\u043c\u044d\u043d\u0442 \u044f\u043a:",
"pad.importExport.exporthtml": "HTML",
"pad.importExport.exportplain": "\u041f\u0440\u043e\u0441\u0442\u044b \u0442\u044d\u043a\u0441\u0442",
"pad.importExport.exportword": "Microsoft Word",
"pad.importExport.exportpdf": "PDF",
"pad.importExport.exportopen": "ODF (Open Document Format)",
"pad.importExport.exportdokuwiki": "DokuWiki",
"pad.modals.connected": "\u041f\u0430\u0434\u043b\u0443\u0447\u044b\u043b\u0456\u0441\u044f.",
"pad.modals.reconnecting": "\u041f\u0435\u0440\u0430\u043f\u0430\u0434\u043b\u0443\u0447\u044d\u043d\u044c\u043d\u0435 \u0434\u0430 \u0432\u0430\u0448\u0430\u0433\u0430 \u0434\u0430\u043a\u0443\u043c\u044d\u043d\u0442\u0430...",
"pad.modals.forcereconnect": "\u041f\u0440\u044b\u043c\u0443\u0441\u043e\u0432\u0430\u0435 \u043f\u0435\u0440\u0430\u043f\u0430\u0434\u043b\u0443\u0447\u044d\u043d\u044c\u043d\u0435",
"pad.share": "\u041f\u0430\u0434\u0437\u044f\u043b\u0456\u0446\u0446\u0430 \u0434\u0430\u043a\u0443\u043c\u044d\u043d\u0442\u0430\u043c",
"pad.share.readonly": "\u0422\u043e\u043b\u044c\u043a\u0456 \u0434\u043b\u044f \u0447\u044b\u0442\u0430\u043d\u044c\u043d\u044f",
"pad.share.link": "\u0421\u043f\u0430\u0441\u044b\u043b\u043a\u0430",
"pad.chat": "\u0427\u0430\u0442",
"@metadata": {
"authors": [
"Jim-by",
"Wizardist"
]
}
}

View file

@ -37,6 +37,7 @@
"pad.settings.stickychat": "Diskwel ar flap bepred", "pad.settings.stickychat": "Diskwel ar flap bepred",
"pad.settings.colorcheck": "Livio\u00f9 anaout", "pad.settings.colorcheck": "Livio\u00f9 anaout",
"pad.settings.linenocheck": "Niverenno\u00f9 linenno\u00f9", "pad.settings.linenocheck": "Niverenno\u00f9 linenno\u00f9",
"pad.settings.rtlcheck": "Lenn an danvez a-zehou da gleiz ?",
"pad.settings.fontType": "Seurt font :", "pad.settings.fontType": "Seurt font :",
"pad.settings.fontType.normal": "Reizh", "pad.settings.fontType.normal": "Reizh",
"pad.settings.fontType.monospaced": "Monospas", "pad.settings.fontType.monospaced": "Monospas",

View file

@ -28,6 +28,7 @@
"pad.settings.stickychat": "Xateja sempre a la pantalla", "pad.settings.stickychat": "Xateja sempre a la pantalla",
"pad.settings.colorcheck": "Colors d'autoria", "pad.settings.colorcheck": "Colors d'autoria",
"pad.settings.linenocheck": "N\u00fameros de l\u00ednia", "pad.settings.linenocheck": "N\u00fameros de l\u00ednia",
"pad.settings.rtlcheck": "Llegir el contingut de dreta a esquerra?",
"pad.settings.fontType": "Tipus de lletra:", "pad.settings.fontType": "Tipus de lletra:",
"pad.settings.fontType.normal": "Normal", "pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "D'amplada fixa", "pad.settings.fontType.monospaced": "D'amplada fixa",

View file

@ -1,9 +1,10 @@
{ {
"@metadata": { "@metadata": {
"authors": [ "authors": {
"Christian List", "0": "Christian List",
"Peter Alberti" "1": "Peter Alberti",
] "3": "Steenth"
}
}, },
"index.newPad": "Ny Pad", "index.newPad": "Ny Pad",
"index.createOpenPad": "eller opret\/\u00e5bn en Pad med navnet:", "index.createOpenPad": "eller opret\/\u00e5bn en Pad med navnet:",
@ -20,7 +21,7 @@
"pad.toolbar.clearAuthorship.title": "Fjern farver for forfatterskab", "pad.toolbar.clearAuthorship.title": "Fjern farver for forfatterskab",
"pad.toolbar.import_export.title": "Import\/eksport fra\/til forskellige filformater", "pad.toolbar.import_export.title": "Import\/eksport fra\/til forskellige filformater",
"pad.toolbar.timeslider.title": "Timeslider", "pad.toolbar.timeslider.title": "Timeslider",
"pad.toolbar.savedRevision.title": "Gemte revisioner", "pad.toolbar.savedRevision.title": "Gem Revision",
"pad.toolbar.settings.title": "Indstillinger", "pad.toolbar.settings.title": "Indstillinger",
"pad.toolbar.embed.title": "Integrer denne pad", "pad.toolbar.embed.title": "Integrer denne pad",
"pad.toolbar.showusers.title": "Vis brugere p\u00e5 denne pad", "pad.toolbar.showusers.title": "Vis brugere p\u00e5 denne pad",
@ -35,6 +36,7 @@
"pad.settings.stickychat": "Chat altid p\u00e5 sk\u00e6rmen", "pad.settings.stickychat": "Chat altid p\u00e5 sk\u00e6rmen",
"pad.settings.colorcheck": "Forfatterskabsfarver", "pad.settings.colorcheck": "Forfatterskabsfarver",
"pad.settings.linenocheck": "Linjenumre", "pad.settings.linenocheck": "Linjenumre",
"pad.settings.rtlcheck": "L\u00e6se indhold fra h\u00f8jre mod venstre?",
"pad.settings.fontType": "Skrifttype:", "pad.settings.fontType": "Skrifttype:",
"pad.settings.fontType.normal": "Normal", "pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "Fastbredde", "pad.settings.fontType.monospaced": "Fastbredde",

View file

@ -37,6 +37,7 @@
"pad.settings.stickychat": "Chat immer anzeigen", "pad.settings.stickychat": "Chat immer anzeigen",
"pad.settings.colorcheck": "Autorenfarben anzeigen", "pad.settings.colorcheck": "Autorenfarben anzeigen",
"pad.settings.linenocheck": "Zeilennummern", "pad.settings.linenocheck": "Zeilennummern",
"pad.settings.rtlcheck": "Inhalt von rechts nach links lesen?",
"pad.settings.fontType": "Schriftart:", "pad.settings.fontType": "Schriftart:",
"pad.settings.fontType.normal": "Normal", "pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "Monospace", "pad.settings.fontType.monospaced": "Monospace",

View file

@ -21,7 +21,7 @@
"pad.toolbar.clearAuthorship.title": "\u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u0631\u0646\u06af\u200c\u0647\u0627\u06cc \u0646\u0648\u06cc\u0633\u0646\u062f\u06af\u06cc", "pad.toolbar.clearAuthorship.title": "\u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u0631\u0646\u06af\u200c\u0647\u0627\u06cc \u0646\u0648\u06cc\u0633\u0646\u062f\u06af\u06cc",
"pad.toolbar.import_export.title": "\u062f\u0631\u0648\u0646\u200c\u0631\u06cc\u0632\u06cc\/\u0628\u0631\u0648\u0646\u200c\u0631\u06cc\u0632\u06cc \u0627\u0632\/\u0628\u0647 \u0642\u0627\u0644\u0628\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641", "pad.toolbar.import_export.title": "\u062f\u0631\u0648\u0646\u200c\u0631\u06cc\u0632\u06cc\/\u0628\u0631\u0648\u0646\u200c\u0631\u06cc\u0632\u06cc \u0627\u0632\/\u0628\u0647 \u0642\u0627\u0644\u0628\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641",
"pad.toolbar.timeslider.title": "\u0627\u0633\u0644\u0627\u06cc\u062f\u0631 \u0632\u0645\u0627\u0646", "pad.toolbar.timeslider.title": "\u0627\u0633\u0644\u0627\u06cc\u062f\u0631 \u0632\u0645\u0627\u0646",
"pad.toolbar.savedRevision.title": "\u0630\u062e\u06cc\u0631\u0647\u200c\u0633\u0627\u0632\u06cc \u0646\u0633\u062e\u0647", "pad.toolbar.savedRevision.title": "\u0630\u062e\u06cc\u0631\u0647\u200c\u06cc \u0628\u0627\u0632\u0646\u0648\u06cc\u0633\u06cc",
"pad.toolbar.settings.title": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a", "pad.toolbar.settings.title": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a",
"pad.toolbar.embed.title": "\u062c\u0627\u0633\u0627\u0632\u06cc \u0627\u06cc\u0646 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a", "pad.toolbar.embed.title": "\u062c\u0627\u0633\u0627\u0632\u06cc \u0627\u06cc\u0646 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a",
"pad.toolbar.showusers.title": "\u0646\u0645\u0627\u06cc\u0634 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u062f\u0631 \u0627\u06cc\u0646 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a", "pad.toolbar.showusers.title": "\u0646\u0645\u0627\u06cc\u0634 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u062f\u0631 \u0627\u06cc\u0646 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a",

View file

@ -28,7 +28,7 @@
"pad.toolbar.clearAuthorship.title": "Effacer les couleurs identifiant les auteurs", "pad.toolbar.clearAuthorship.title": "Effacer les couleurs identifiant les auteurs",
"pad.toolbar.import_export.title": "Importer\/Exporter de\/vers un format de fichier diff\u00e9rent", "pad.toolbar.import_export.title": "Importer\/Exporter de\/vers un format de fichier diff\u00e9rent",
"pad.toolbar.timeslider.title": "Historique dynamique", "pad.toolbar.timeslider.title": "Historique dynamique",
"pad.toolbar.savedRevision.title": "Versions enregistr\u00e9es", "pad.toolbar.savedRevision.title": "Enregistrer la r\u00e9vision",
"pad.toolbar.settings.title": "Param\u00e8tres", "pad.toolbar.settings.title": "Param\u00e8tres",
"pad.toolbar.embed.title": "Int\u00e9grer ce Pad", "pad.toolbar.embed.title": "Int\u00e9grer ce Pad",
"pad.toolbar.showusers.title": "Afficher les utilisateurs du Pad", "pad.toolbar.showusers.title": "Afficher les utilisateurs du Pad",
@ -43,6 +43,7 @@
"pad.settings.stickychat": "Toujours afficher le chat", "pad.settings.stickychat": "Toujours afficher le chat",
"pad.settings.colorcheck": "Couleurs d\u2019identification", "pad.settings.colorcheck": "Couleurs d\u2019identification",
"pad.settings.linenocheck": "Num\u00e9ros de lignes", "pad.settings.linenocheck": "Num\u00e9ros de lignes",
"pad.settings.rtlcheck": "Lire le contenu de la droite vers la gauche?",
"pad.settings.fontType": "Type de police :", "pad.settings.fontType": "Type de police :",
"pad.settings.fontType.normal": "Normal", "pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "Monospace", "pad.settings.fontType.monospaced": "Monospace",

View file

@ -19,7 +19,7 @@
"pad.toolbar.clearAuthorship.title": "Limpar as cores de identificaci\u00f3n dos autores", "pad.toolbar.clearAuthorship.title": "Limpar as cores de identificaci\u00f3n dos autores",
"pad.toolbar.import_export.title": "Importar\/Exportar desde\/a diferentes formatos de ficheiro", "pad.toolbar.import_export.title": "Importar\/Exportar desde\/a diferentes formatos de ficheiro",
"pad.toolbar.timeslider.title": "Li\u00f1a do tempo", "pad.toolbar.timeslider.title": "Li\u00f1a do tempo",
"pad.toolbar.savedRevision.title": "Revisi\u00f3ns gardadas", "pad.toolbar.savedRevision.title": "Gardar a revisi\u00f3n",
"pad.toolbar.settings.title": "Configuraci\u00f3ns", "pad.toolbar.settings.title": "Configuraci\u00f3ns",
"pad.toolbar.embed.title": "Incorporar este documento", "pad.toolbar.embed.title": "Incorporar este documento",
"pad.toolbar.showusers.title": "Mostrar os usuarios deste documento", "pad.toolbar.showusers.title": "Mostrar os usuarios deste documento",
@ -34,6 +34,7 @@
"pad.settings.stickychat": "Chat sempre visible", "pad.settings.stickychat": "Chat sempre visible",
"pad.settings.colorcheck": "Cores de identificaci\u00f3n", "pad.settings.colorcheck": "Cores de identificaci\u00f3n",
"pad.settings.linenocheck": "N\u00fameros de li\u00f1a", "pad.settings.linenocheck": "N\u00fameros de li\u00f1a",
"pad.settings.rtlcheck": "Quere ler o contido da dereita \u00e1 esquerda?",
"pad.settings.fontType": "Tipo de letra:", "pad.settings.fontType": "Tipo de letra:",
"pad.settings.fontType.normal": "Normal", "pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "Monoespazada", "pad.settings.fontType.monospaced": "Monoespazada",

View file

@ -20,7 +20,7 @@
"pad.toolbar.clearAuthorship.title": "\u05e0\u05d9\u05e7\u05d5\u05d9 \u05e6\u05d1\u05e2\u05d9\u05dd", "pad.toolbar.clearAuthorship.title": "\u05e0\u05d9\u05e7\u05d5\u05d9 \u05e6\u05d1\u05e2\u05d9\u05dd",
"pad.toolbar.import_export.title": "\u05d9\u05d9\u05d1\u05d5\u05d0\/\u05d9\u05d9\u05e6\u05d0 \u05d1\u05ea\u05e1\u05d3\u05d9\u05e8\u05d9 \u05e7\u05d1\u05e6\u05d9\u05dd \u05e9\u05d5\u05e0\u05d9\u05dd", "pad.toolbar.import_export.title": "\u05d9\u05d9\u05d1\u05d5\u05d0\/\u05d9\u05d9\u05e6\u05d0 \u05d1\u05ea\u05e1\u05d3\u05d9\u05e8\u05d9 \u05e7\u05d1\u05e6\u05d9\u05dd \u05e9\u05d5\u05e0\u05d9\u05dd",
"pad.toolbar.timeslider.title": "\u05d2\u05d5\u05dc\u05dc \u05d6\u05de\u05df", "pad.toolbar.timeslider.title": "\u05d2\u05d5\u05dc\u05dc \u05d6\u05de\u05df",
"pad.toolbar.savedRevision.title": "\u05d2\u05e8\u05e1\u05d0\u05d5\u05ea \u05e9\u05de\u05d5\u05e8\u05d5\u05ea", "pad.toolbar.savedRevision.title": "\u05e9\u05de\u05d9\u05e8\u05ea \u05d2\u05e8\u05e1\u05d4",
"pad.toolbar.settings.title": "\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea", "pad.toolbar.settings.title": "\u05d4\u05d2\u05d3\u05e8\u05d5\u05ea",
"pad.toolbar.embed.title": "\u05d4\u05d8\u05de\u05e2\u05ea \u05d4\u05e4\u05e0\u05e7\u05e1 \u05d4\u05d6\u05d4", "pad.toolbar.embed.title": "\u05d4\u05d8\u05de\u05e2\u05ea \u05d4\u05e4\u05e0\u05e7\u05e1 \u05d4\u05d6\u05d4",
"pad.toolbar.showusers.title": "\u05d4\u05e6\u05d2\u05ea \u05d4\u05de\u05e9\u05ea\u05de\u05e9\u05d9\u05dd \u05d1\u05e4\u05e0\u05e7\u05e1 \u05d4\u05d6\u05d4", "pad.toolbar.showusers.title": "\u05d4\u05e6\u05d2\u05ea \u05d4\u05de\u05e9\u05ea\u05de\u05e9\u05d9\u05dd \u05d1\u05e4\u05e0\u05e7\u05e1 \u05d4\u05d6\u05d4",
@ -35,6 +35,7 @@
"pad.settings.stickychat": "\u05d4\u05e9\u05d9\u05d7\u05d4 \u05ea\u05de\u05d9\u05d3 \u05e2\u05dc \u05d4\u05de\u05e1\u05da", "pad.settings.stickychat": "\u05d4\u05e9\u05d9\u05d7\u05d4 \u05ea\u05de\u05d9\u05d3 \u05e2\u05dc \u05d4\u05de\u05e1\u05da",
"pad.settings.colorcheck": "\u05e6\u05d1\u05d9\u05e2\u05d4 \u05dc\u05e4\u05d9 \u05de\u05d7\u05d1\u05e8", "pad.settings.colorcheck": "\u05e6\u05d1\u05d9\u05e2\u05d4 \u05dc\u05e4\u05d9 \u05de\u05d7\u05d1\u05e8",
"pad.settings.linenocheck": "\u05de\u05e1\u05e4\u05e8\u05d9 \u05e9\u05d5\u05e8\u05d5\u05ea", "pad.settings.linenocheck": "\u05de\u05e1\u05e4\u05e8\u05d9 \u05e9\u05d5\u05e8\u05d5\u05ea",
"pad.settings.rtlcheck": "\u05dc\u05e7\u05e8\u05d5\u05d0 \u05d0\u05ea \u05d4\u05ea\u05d5\u05db\u05df \u05de\u05d9\u05de\u05d9\u05df \u05dc\u05e9\u05de\u05d0\u05dc?",
"pad.settings.fontType": "\u05e1\u05d5\u05d2 \u05d2\u05d5\u05e4\u05df:", "pad.settings.fontType": "\u05e1\u05d5\u05d2 \u05d2\u05d5\u05e4\u05df:",
"pad.settings.fontType.normal": "\u05e8\u05d2\u05d9\u05dc", "pad.settings.fontType.normal": "\u05e8\u05d2\u05d9\u05dc",
"pad.settings.fontType.monospaced": "\u05d1\u05e8\u05d5\u05d7\u05d1 \u05e7\u05d1\u05d5\u05e2", "pad.settings.fontType.monospaced": "\u05d1\u05e8\u05d5\u05d7\u05d1 \u05e7\u05d1\u05d5\u05e2",

View file

@ -34,6 +34,7 @@
"pad.settings.stickychat": "Chat sempre visibile", "pad.settings.stickychat": "Chat sempre visibile",
"pad.settings.colorcheck": "Colores de autor", "pad.settings.colorcheck": "Colores de autor",
"pad.settings.linenocheck": "Numeros de linea", "pad.settings.linenocheck": "Numeros de linea",
"pad.settings.rtlcheck": "Leger le contento de dextra a sinistra?",
"pad.settings.fontType": "Typo de litteras:", "pad.settings.fontType": "Typo de litteras:",
"pad.settings.fontType.normal": "Normal", "pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "Monospatial", "pad.settings.fontType.monospaced": "Monospatial",

View file

@ -22,7 +22,7 @@
"pad.toolbar.clearAuthorship.title": "Elimina i colori che indicano gli autori", "pad.toolbar.clearAuthorship.title": "Elimina i colori che indicano gli autori",
"pad.toolbar.import_export.title": "Importa\/esporta da\/a diversi formati di file", "pad.toolbar.import_export.title": "Importa\/esporta da\/a diversi formati di file",
"pad.toolbar.timeslider.title": "Presentazione cronologia", "pad.toolbar.timeslider.title": "Presentazione cronologia",
"pad.toolbar.savedRevision.title": "Revisioni salvate", "pad.toolbar.savedRevision.title": "Versione salvata",
"pad.toolbar.settings.title": "Impostazioni", "pad.toolbar.settings.title": "Impostazioni",
"pad.toolbar.embed.title": "Incorpora questo Pad", "pad.toolbar.embed.title": "Incorpora questo Pad",
"pad.toolbar.showusers.title": "Visualizza gli utenti su questo Pad", "pad.toolbar.showusers.title": "Visualizza gli utenti su questo Pad",
@ -37,6 +37,7 @@
"pad.settings.stickychat": "Chat sempre sullo schermo", "pad.settings.stickychat": "Chat sempre sullo schermo",
"pad.settings.colorcheck": "Colori che indicano gli autori", "pad.settings.colorcheck": "Colori che indicano gli autori",
"pad.settings.linenocheck": "Numeri di riga", "pad.settings.linenocheck": "Numeri di riga",
"pad.settings.rtlcheck": "Leggere il contenuto da destra a sinistra?",
"pad.settings.fontType": "Tipo di carattere:", "pad.settings.fontType": "Tipo di carattere:",
"pad.settings.fontType.normal": "Normale", "pad.settings.fontType.normal": "Normale",
"pad.settings.fontType.monospaced": "A larghezza fissa", "pad.settings.fontType.monospaced": "A larghezza fissa",

View file

@ -34,6 +34,7 @@
"pad.settings.stickychat": "\u753b\u9762\u306b\u30c1\u30e3\u30c3\u30c8\u3092\u5e38\u306b\u8868\u793a", "pad.settings.stickychat": "\u753b\u9762\u306b\u30c1\u30e3\u30c3\u30c8\u3092\u5e38\u306b\u8868\u793a",
"pad.settings.colorcheck": "\u4f5c\u8005\u306e\u8272\u5206\u3051", "pad.settings.colorcheck": "\u4f5c\u8005\u306e\u8272\u5206\u3051",
"pad.settings.linenocheck": "\u884c\u756a\u53f7", "pad.settings.linenocheck": "\u884c\u756a\u53f7",
"pad.settings.rtlcheck": "\u53f3\u6a2a\u66f8\u304d\u306b\u3059\u308b",
"pad.settings.fontType": "\u30d5\u30a9\u30f3\u30c8\u306e\u7a2e\u985e:", "pad.settings.fontType": "\u30d5\u30a9\u30f3\u30c8\u306e\u7a2e\u985e:",
"pad.settings.fontType.normal": "\u901a\u5e38", "pad.settings.fontType.normal": "\u901a\u5e38",
"pad.settings.fontType.monospaced": "\u56fa\u5b9a\u5e45", "pad.settings.fontType.monospaced": "\u56fa\u5b9a\u5e45",

View file

@ -19,7 +19,7 @@
"pad.toolbar.clearAuthorship.title": "\uc800\uc790\uc758 \uc0c9 \uc9c0\uc6b0\uae30", "pad.toolbar.clearAuthorship.title": "\uc800\uc790\uc758 \uc0c9 \uc9c0\uc6b0\uae30",
"pad.toolbar.import_export.title": "\ub2e4\ub978 \ud30c\uc77c \ud615\uc2dd\uc73c\ub85c \uac00\uc838\uc624\uae30\/\ub0b4\ubcf4\ub0b4\uae30", "pad.toolbar.import_export.title": "\ub2e4\ub978 \ud30c\uc77c \ud615\uc2dd\uc73c\ub85c \uac00\uc838\uc624\uae30\/\ub0b4\ubcf4\ub0b4\uae30",
"pad.toolbar.timeslider.title": "\uc2dc\uac04\uc2ac\ub77c\uc774\ub354", "pad.toolbar.timeslider.title": "\uc2dc\uac04\uc2ac\ub77c\uc774\ub354",
"pad.toolbar.savedRevision.title": "\uc800\uc7a5\ud55c \ud310", "pad.toolbar.savedRevision.title": "\ud310 \uc800\uc7a5",
"pad.toolbar.settings.title": "\uc124\uc815", "pad.toolbar.settings.title": "\uc124\uc815",
"pad.toolbar.embed.title": "\uc774 \ud328\ub4dc \ud3ec\ud568\ud558\uae30", "pad.toolbar.embed.title": "\uc774 \ud328\ub4dc \ud3ec\ud568\ud558\uae30",
"pad.toolbar.showusers.title": "\uc774 \ud328\ub4dc\uc5d0 \uc0ac\uc6a9\uc790 \ubcf4\uae30", "pad.toolbar.showusers.title": "\uc774 \ud328\ub4dc\uc5d0 \uc0ac\uc6a9\uc790 \ubcf4\uae30",
@ -34,6 +34,7 @@
"pad.settings.stickychat": "\ud654\uba74\uc5d0 \ud56d\uc0c1 \ub300\ud654 \ubcf4\uae30", "pad.settings.stickychat": "\ud654\uba74\uc5d0 \ud56d\uc0c1 \ub300\ud654 \ubcf4\uae30",
"pad.settings.colorcheck": "\uc800\uc790 \uc0c9", "pad.settings.colorcheck": "\uc800\uc790 \uc0c9",
"pad.settings.linenocheck": "\uc904 \ubc88\ud638", "pad.settings.linenocheck": "\uc904 \ubc88\ud638",
"pad.settings.rtlcheck": "\uc6b0\ud6a1\uc11c(\uc624\ub978\ucabd\uc5d0\uc11c \uc67c\ucabd\uc73c\ub85c)\uc785\ub2c8\uae4c?",
"pad.settings.fontType": "\uae00\uaf34 \uc885\ub958:", "pad.settings.fontType": "\uae00\uaf34 \uc885\ub958:",
"pad.settings.fontType.normal": "\ubcf4\ud1b5", "pad.settings.fontType.normal": "\ubcf4\ud1b5",
"pad.settings.fontType.monospaced": "\uace0\uc815 \ud3ed", "pad.settings.fontType.monospaced": "\uace0\uc815 \ud3ed",

View file

@ -20,7 +20,7 @@
"pad.toolbar.clearAuthorship.title": "\u041f\u043e\u043d\u0438\u0448\u0442\u0438 \u0433\u0438 \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0442\u0435 \u0431\u043e\u0438", "pad.toolbar.clearAuthorship.title": "\u041f\u043e\u043d\u0438\u0448\u0442\u0438 \u0433\u0438 \u0430\u0432\u0442\u043e\u0440\u0441\u043a\u0438\u0442\u0435 \u0431\u043e\u0438",
"pad.toolbar.import_export.title": "\u0423\u0432\u043e\u0437\/\u0418\u0437\u0432\u043e\u0437 \u043e\u0434\/\u0432\u043e \u0440\u0430\u0437\u043d\u0438 \u043f\u043e\u0434\u0430\u0442\u043e\u0442\u0435\u0447\u043d\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0438", "pad.toolbar.import_export.title": "\u0423\u0432\u043e\u0437\/\u0418\u0437\u0432\u043e\u0437 \u043e\u0434\/\u0432\u043e \u0440\u0430\u0437\u043d\u0438 \u043f\u043e\u0434\u0430\u0442\u043e\u0442\u0435\u0447\u043d\u0438 \u0444\u043e\u0440\u043c\u0430\u0442\u0438",
"pad.toolbar.timeslider.title": "\u0418\u0441\u0442\u043e\u0440\u0438\u0441\u043a\u0438 \u043f\u0440\u0435\u0433\u043b\u0435\u0434", "pad.toolbar.timeslider.title": "\u0418\u0441\u0442\u043e\u0440\u0438\u0441\u043a\u0438 \u043f\u0440\u0435\u0433\u043b\u0435\u0434",
"pad.toolbar.savedRevision.title": "\u0417\u0430\u0447\u0443\u0432\u0430\u043d\u0438 \u0440\u0435\u0432\u0438\u0437\u0438\u0438", "pad.toolbar.savedRevision.title": "\u0417\u0430\u0447\u0443\u0432\u0430\u0458 \u0440\u0435\u0432\u0438\u0437\u0438\u0458\u0430",
"pad.toolbar.settings.title": "\u041f\u043e\u0441\u0442\u0430\u0432\u043a\u0438", "pad.toolbar.settings.title": "\u041f\u043e\u0441\u0442\u0430\u0432\u043a\u0438",
"pad.toolbar.embed.title": "\u0412\u043c\u0435\u0442\u043d\u0438 \u0458\u0430 \u0442\u0435\u0442\u0440\u0430\u0442\u043a\u0430\u0432\u0430", "pad.toolbar.embed.title": "\u0412\u043c\u0435\u0442\u043d\u0438 \u0458\u0430 \u0442\u0435\u0442\u0440\u0430\u0442\u043a\u0430\u0432\u0430",
"pad.toolbar.showusers.title": "\u041f\u0440\u0438\u043a\u0430\u0436. \u043a\u043e\u0440\u0438\u0441\u043d\u0438\u0446\u0438\u0442\u0435 \u043d\u0430 \u0442\u0435\u0442\u0440\u0430\u0442\u043a\u0430\u0432\u0430", "pad.toolbar.showusers.title": "\u041f\u0440\u0438\u043a\u0430\u0436. \u043a\u043e\u0440\u0438\u0441\u043d\u0438\u0446\u0438\u0442\u0435 \u043d\u0430 \u0442\u0435\u0442\u0440\u0430\u0442\u043a\u0430\u0432\u0430",
@ -35,6 +35,7 @@
"pad.settings.stickychat": "\u0420\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0435 \u0441\u0435\u043a\u043e\u0433\u0430\u0448 \u043d\u0430 \u0435\u043a\u0440\u0430\u043d\u043e\u0442", "pad.settings.stickychat": "\u0420\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0435 \u0441\u0435\u043a\u043e\u0433\u0430\u0448 \u043d\u0430 \u0435\u043a\u0440\u0430\u043d\u043e\u0442",
"pad.settings.colorcheck": "\u0410\u0432\u0442\u043e\u0440\u0441\u043a\u0438 \u0431\u043e\u0438", "pad.settings.colorcheck": "\u0410\u0432\u0442\u043e\u0440\u0441\u043a\u0438 \u0431\u043e\u0438",
"pad.settings.linenocheck": "\u0411\u0440\u043e\u0435\u0432\u0438 \u043d\u0430 \u0440\u0435\u0434\u043e\u0432\u0438\u0442\u0435", "pad.settings.linenocheck": "\u0411\u0440\u043e\u0435\u0432\u0438 \u043d\u0430 \u0440\u0435\u0434\u043e\u0432\u0438\u0442\u0435",
"pad.settings.rtlcheck": "\u0421\u043e\u0434\u0440\u0436\u0438\u043d\u0438\u0442\u0435 \u0434\u0430 \u0441\u0435 \u0447\u0438\u0442\u0430\u0430\u0442 \u043e\u0434 \u0434\u0435\u0441\u043d\u043e \u043d\u0430 \u043b\u0435\u0432\u043e?",
"pad.settings.fontType": "\u0422\u0438\u043f \u043d\u0430 \u0444\u043e\u043d\u0442:", "pad.settings.fontType": "\u0422\u0438\u043f \u043d\u0430 \u0444\u043e\u043d\u0442:",
"pad.settings.fontType.normal": "\u041d\u043e\u0440\u043c\u0430\u043b\u0435\u043d", "pad.settings.fontType.normal": "\u041d\u043e\u0440\u043c\u0430\u043b\u0435\u043d",
"pad.settings.fontType.monospaced": "\u041d\u0435\u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u0435\u043d", "pad.settings.fontType.monospaced": "\u041d\u0435\u043f\u0440\u043e\u043f\u043e\u0440\u0446\u0438\u043e\u043d\u0430\u043b\u0435\u043d",

View file

@ -19,7 +19,7 @@
"pad.toolbar.clearAuthorship.title": "Padamkan Warna Pengarang", "pad.toolbar.clearAuthorship.title": "Padamkan Warna Pengarang",
"pad.toolbar.import_export.title": "Import\/Eksport dari\/ke format-format fail berbeza", "pad.toolbar.import_export.title": "Import\/Eksport dari\/ke format-format fail berbeza",
"pad.toolbar.timeslider.title": "Gelangsar masa", "pad.toolbar.timeslider.title": "Gelangsar masa",
"pad.toolbar.savedRevision.title": "Semakan Tersimpan", "pad.toolbar.savedRevision.title": "Simpan Semakan",
"pad.toolbar.settings.title": "Tetapan", "pad.toolbar.settings.title": "Tetapan",
"pad.toolbar.embed.title": "Benamkan pad ini", "pad.toolbar.embed.title": "Benamkan pad ini",
"pad.toolbar.showusers.title": "Tunjukkan pengguna pada pad ini", "pad.toolbar.showusers.title": "Tunjukkan pengguna pada pad ini",
@ -34,6 +34,7 @@
"pad.settings.stickychat": "Sentiasa bersembang pada skrin", "pad.settings.stickychat": "Sentiasa bersembang pada skrin",
"pad.settings.colorcheck": "Warna pengarang", "pad.settings.colorcheck": "Warna pengarang",
"pad.settings.linenocheck": "Nombor baris", "pad.settings.linenocheck": "Nombor baris",
"pad.settings.rtlcheck": "Membaca dari kanan ke kiri?",
"pad.settings.fontType": "Jenis fon:", "pad.settings.fontType": "Jenis fon:",
"pad.settings.fontType.normal": "Normal", "pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "Monospace", "pad.settings.fontType.monospaced": "Monospace",

View file

@ -34,6 +34,7 @@
"pad.settings.stickychat": "Chat altijd zichtbaar", "pad.settings.stickychat": "Chat altijd zichtbaar",
"pad.settings.colorcheck": "Kleuren auteurs", "pad.settings.colorcheck": "Kleuren auteurs",
"pad.settings.linenocheck": "Regelnummers", "pad.settings.linenocheck": "Regelnummers",
"pad.settings.rtlcheck": "Inhoud van rechts naar links lezen?",
"pad.settings.fontType": "Lettertype:", "pad.settings.fontType": "Lettertype:",
"pad.settings.fontType.normal": "Normaal", "pad.settings.fontType.normal": "Normaal",
"pad.settings.fontType.monospaced": "Monospace", "pad.settings.fontType.monospaced": "Monospace",

View file

@ -22,7 +22,7 @@
"pad.toolbar.clearAuthorship.title": "\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0446\u0432\u0435\u0442\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430", "pad.toolbar.clearAuthorship.title": "\u041e\u0447\u0438\u0441\u0442\u0438\u0442\u044c \u0446\u0432\u0435\u0442\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430",
"pad.toolbar.import_export.title": "\u0418\u043c\u043f\u043e\u0440\u0442\/\u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432 \u0444\u0430\u0439\u043b\u043e\u0432", "pad.toolbar.import_export.title": "\u0418\u043c\u043f\u043e\u0440\u0442\/\u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0444\u043e\u0440\u043c\u0430\u0442\u043e\u0432 \u0444\u0430\u0439\u043b\u043e\u0432",
"pad.toolbar.timeslider.title": "\u0428\u043a\u0430\u043b\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438", "pad.toolbar.timeslider.title": "\u0428\u043a\u0430\u043b\u0430 \u0432\u0440\u0435\u043c\u0435\u043d\u0438",
"pad.toolbar.savedRevision.title": "\u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u043d\u044b\u0435 \u0432\u0435\u0440\u0441\u0438\u0438", "pad.toolbar.savedRevision.title": "\u0421\u043e\u0445\u0440\u0430\u043d\u0438\u0442\u044c \u0432\u0435\u0440\u0441\u0438\u044e",
"pad.toolbar.settings.title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438", "pad.toolbar.settings.title": "\u041d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438",
"pad.toolbar.embed.title": "\u0412\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442", "pad.toolbar.embed.title": "\u0412\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u044d\u0442\u043e\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442",
"pad.toolbar.showusers.title": "\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435", "pad.toolbar.showusers.title": "\u041f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439 \u0432 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0435",
@ -37,6 +37,7 @@
"pad.settings.stickychat": "\u0412\u0441\u0435\u0433\u0434\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0447\u0430\u0442", "pad.settings.stickychat": "\u0412\u0441\u0435\u0433\u0434\u0430 \u043e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0442\u044c \u0447\u0430\u0442",
"pad.settings.colorcheck": "\u0426\u0432\u0435\u0442\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430", "pad.settings.colorcheck": "\u0426\u0432\u0435\u0442\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430",
"pad.settings.linenocheck": "\u041d\u043e\u043c\u0435\u0440\u0430 \u0441\u0442\u0440\u043e\u043a", "pad.settings.linenocheck": "\u041d\u043e\u043c\u0435\u0440\u0430 \u0441\u0442\u0440\u043e\u043a",
"pad.settings.rtlcheck": "\u0427\u0438\u0442\u0430\u0442\u044c \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0441\u043f\u0440\u0430\u0432\u0430 \u043d\u0430\u043b\u0435\u0432\u043e?",
"pad.settings.fontType": "\u0422\u0438\u043f \u0448\u0440\u0438\u0444\u0442\u0430:", "pad.settings.fontType": "\u0422\u0438\u043f \u0448\u0440\u0438\u0444\u0442\u0430:",
"pad.settings.fontType.normal": "\u041e\u0431\u044b\u0447\u043d\u044b\u0439", "pad.settings.fontType.normal": "\u041e\u0431\u044b\u0447\u043d\u044b\u0439",
"pad.settings.fontType.monospaced": "\u041c\u043e\u043d\u043e\u0448\u0438\u0440\u0438\u043d\u043d\u044b\u0439", "pad.settings.fontType.monospaced": "\u041c\u043e\u043d\u043e\u0448\u0438\u0440\u0438\u043d\u043d\u044b\u0439",

View file

@ -19,7 +19,7 @@
"pad.toolbar.clearAuthorship.title": "Po\u010disti barvo avtorstva", "pad.toolbar.clearAuthorship.title": "Po\u010disti barvo avtorstva",
"pad.toolbar.import_export.title": "Izvozi\/Uvozi razli\u010dne oblike zapisov", "pad.toolbar.import_export.title": "Izvozi\/Uvozi razli\u010dne oblike zapisov",
"pad.toolbar.timeslider.title": "Drsnik zgodovine", "pad.toolbar.timeslider.title": "Drsnik zgodovine",
"pad.toolbar.savedRevision.title": "Shranjene predelave", "pad.toolbar.savedRevision.title": "Shrani predelavo",
"pad.toolbar.settings.title": "Nastavitve", "pad.toolbar.settings.title": "Nastavitve",
"pad.toolbar.embed.title": "Vstavi dokument", "pad.toolbar.embed.title": "Vstavi dokument",
"pad.toolbar.showusers.title": "Poka\u017ei uporabnike dokumenta", "pad.toolbar.showusers.title": "Poka\u017ei uporabnike dokumenta",
@ -34,6 +34,7 @@
"pad.settings.stickychat": "Vsebina klepeta je vedno na zaslonu.", "pad.settings.stickychat": "Vsebina klepeta je vedno na zaslonu.",
"pad.settings.colorcheck": "Barve avtorstva", "pad.settings.colorcheck": "Barve avtorstva",
"pad.settings.linenocheck": "\u0160tevilke vrstic", "pad.settings.linenocheck": "\u0160tevilke vrstic",
"pad.settings.rtlcheck": "Ali naj se vsebina prebira od desne proti levi?",
"pad.settings.fontType": "Vrsta pisave:", "pad.settings.fontType": "Vrsta pisave:",
"pad.settings.fontType.normal": "Obi\u010dajno", "pad.settings.fontType.normal": "Obi\u010dajno",
"pad.settings.fontType.monospaced": "Monospace", "pad.settings.fontType.monospaced": "Monospace",

View file

@ -19,7 +19,7 @@
"pad.toolbar.clearAuthorship.title": "Rensa f\u00f6rfattarf\u00e4rger", "pad.toolbar.clearAuthorship.title": "Rensa f\u00f6rfattarf\u00e4rger",
"pad.toolbar.import_export.title": "Importera\/exportera fr\u00e5n\/till olika filformat", "pad.toolbar.import_export.title": "Importera\/exportera fr\u00e5n\/till olika filformat",
"pad.toolbar.timeslider.title": "Tidsreglage", "pad.toolbar.timeslider.title": "Tidsreglage",
"pad.toolbar.savedRevision.title": "Sparade revisioner", "pad.toolbar.savedRevision.title": "Spara revision",
"pad.toolbar.settings.title": "Inst\u00e4llningar", "pad.toolbar.settings.title": "Inst\u00e4llningar",
"pad.toolbar.embed.title": "B\u00e4dda in detta block", "pad.toolbar.embed.title": "B\u00e4dda in detta block",
"pad.toolbar.showusers.title": "Visa anv\u00e4ndarna p\u00e5 detta block", "pad.toolbar.showusers.title": "Visa anv\u00e4ndarna p\u00e5 detta block",
@ -34,6 +34,7 @@
"pad.settings.stickychat": "Chatten alltid p\u00e5 sk\u00e4rmen", "pad.settings.stickychat": "Chatten alltid p\u00e5 sk\u00e4rmen",
"pad.settings.colorcheck": "F\u00f6rfattarskapsf\u00e4rger", "pad.settings.colorcheck": "F\u00f6rfattarskapsf\u00e4rger",
"pad.settings.linenocheck": "Radnummer", "pad.settings.linenocheck": "Radnummer",
"pad.settings.rtlcheck": "Vill du l\u00e4sa inneh\u00e5llet fr\u00e5n h\u00f6ger till v\u00e4nster?",
"pad.settings.fontType": "Typsnitt:", "pad.settings.fontType": "Typsnitt:",
"pad.settings.fontType.normal": "Normal", "pad.settings.fontType.normal": "Normal",
"pad.settings.fontType.monospaced": "Fast breddsteg", "pad.settings.fontType.monospaced": "Fast breddsteg",

View file

@ -26,7 +26,7 @@
"pad.colorpicker.save": "\u0c2d\u0c26\u0c4d\u0c30\u0c2a\u0c30\u0c1a\u0c41", "pad.colorpicker.save": "\u0c2d\u0c26\u0c4d\u0c30\u0c2a\u0c30\u0c1a\u0c41",
"pad.colorpicker.cancel": "\u0c30\u0c26\u0c4d\u0c26\u0c41\u0c1a\u0c47\u0c2f\u0c3f", "pad.colorpicker.cancel": "\u0c30\u0c26\u0c4d\u0c26\u0c41\u0c1a\u0c47\u0c2f\u0c3f",
"pad.loading": "\u0c32\u0c4b\u0c21\u0c35\u0c41\u0c24\u0c4b\u0c02\u0c26\u0c3f...", "pad.loading": "\u0c32\u0c4b\u0c21\u0c35\u0c41\u0c24\u0c4b\u0c02\u0c26\u0c3f...",
"pad.wrongPassword": "\u0c2e\u0c40 \u0c30\u0c39\u0c38\u0c4d\u0c2f\u0c2a\u0c26\u0c02 \u0c24\u0c2a\u0c41", "pad.wrongPassword": "\u0c2e\u0c40 \u0c38\u0c02\u0c15\u0c47\u0c24\u0c2a\u0c26\u0c02 \u0c24\u0c2a\u0c4d\u0c2a\u0c41",
"pad.settings.padSettings": "\u0c2a\u0c32\u0c15 \u0c05\u0c2e\u0c30\u0c3f\u0c15\u0c32\u0c41", "pad.settings.padSettings": "\u0c2a\u0c32\u0c15 \u0c05\u0c2e\u0c30\u0c3f\u0c15\u0c32\u0c41",
"pad.settings.myView": "\u0c28\u0c3e \u0c09\u0c26\u0c4d\u0c26\u0c47\u0c36\u0c4d\u0c2f\u0c2e\u0c41", "pad.settings.myView": "\u0c28\u0c3e \u0c09\u0c26\u0c4d\u0c26\u0c47\u0c36\u0c4d\u0c2f\u0c2e\u0c41",
"pad.settings.stickychat": "\u0c24\u0c46\u0c30\u0c2a\u0c48\u0c28\u0c47 \u0c2e\u0c3e\u0c1f\u0c3e\u0c2e\u0c02\u0c24\u0c3f\u0c28\u0c3f \u0c0e\u0c32\u0c4d\u0c32\u0c2a\u0c41\u0c21\u0c41 \u0c1a\u0c47\u0c2f\u0c41\u0c2e\u0c41", "pad.settings.stickychat": "\u0c24\u0c46\u0c30\u0c2a\u0c48\u0c28\u0c47 \u0c2e\u0c3e\u0c1f\u0c3e\u0c2e\u0c02\u0c24\u0c3f\u0c28\u0c3f \u0c0e\u0c32\u0c4d\u0c32\u0c2a\u0c41\u0c21\u0c41 \u0c1a\u0c47\u0c2f\u0c41\u0c2e\u0c41",

View file

@ -35,6 +35,7 @@
"pad.settings.stickychat": "\u6c38\u9060\u5728\u5c4f\u5e55\u4e0a\u986f\u793a\u804a\u5929", "pad.settings.stickychat": "\u6c38\u9060\u5728\u5c4f\u5e55\u4e0a\u986f\u793a\u804a\u5929",
"pad.settings.colorcheck": "\u4f5c\u8005\u984f\u8272", "pad.settings.colorcheck": "\u4f5c\u8005\u984f\u8272",
"pad.settings.linenocheck": "\u884c\u865f", "pad.settings.linenocheck": "\u884c\u865f",
"pad.settings.rtlcheck": "\u5f9e\u53f3\u81f3\u5de6\u8b80\u53d6\u5167\u5bb9\uff1f",
"pad.settings.fontType": "\u5b57\u9ad4\u985e\u578b\uff1a", "pad.settings.fontType": "\u5b57\u9ad4\u985e\u578b\uff1a",
"pad.settings.fontType.normal": "\u6b63\u5e38", "pad.settings.fontType.normal": "\u6b63\u5e38",
"pad.settings.fontType.monospaced": "\u7b49\u5bec", "pad.settings.fontType.monospaced": "\u7b49\u5bec",

View file

@ -569,11 +569,20 @@ function handleUserChanges(client, message)
} }
}); });
// Validate all 'author' attribs to be the same value as the current user // Validate all added 'author' attribs to be the same value as the current user
wireApool.eachAttrib(function(type, value) { var iterator = Changeset.opIterator(Changeset.unpack(changeset).ops)
if('author' == type && value != thisSession.author) throw "Trying to submit changes as another author" , op
while(iterator.hasNext()) {
op = iterator.next()
if(op.opcode != '+') continue;
op.attribs.split('*').forEach(function(attr) {
if(!attr) return
attr = wireApool.getAttrib(attr)
if(!attr) return
if('author' == attr[0] && attr[1] != thisSession.author) throw "Trying to submit changes as another author"
}) })
} }
}
catch(e) catch(e)
{ {
// There is an error in this changeset, so just refuse it // There is an error in this changeset, so just refuse it

View file

@ -354,7 +354,6 @@ exports.expressCreateServer = function (hook_name, args, cb) {
// Let's put this under /rest for now // Let's put this under /rest for now
var subpath = express(); var subpath = express();
args.app.use(express.bodyParser());
args.app.use(basePath, subpath); args.app.use(basePath, subpath);
swagger.setAppHandler(subpath); swagger.setAppHandler(subpath);

View file

@ -16,7 +16,7 @@
"require-kernel" : "1.0.5", "require-kernel" : "1.0.5",
"resolve" : "0.2.x", "resolve" : "0.2.x",
"socket.io" : "0.9.x", "socket.io" : "0.9.x",
"ueberDB" : "0.1.94", "ueberDB" : "0.1.95",
"async" : "0.1.x", "async" : "0.1.x",
"express" : "3.x", "express" : "3.x",
"connect" : "2.4.x", "connect" : "2.4.x",
@ -46,5 +46,5 @@
"engines" : { "node" : ">=0.6.3", "engines" : { "node" : ">=0.6.3",
"npm" : ">=1.0" "npm" : ">=1.0"
}, },
"version" : "1.2.81" "version" : "1.2.9"
} }

View file

@ -5125,7 +5125,7 @@ function Ace2Inner(){
function initLineNumbers() function initLineNumbers()
{ {
lineNumbersShown = 1; lineNumbersShown = 1;
sideDiv.innerHTML = '<table border="0" cellpadding="0" cellspacing="0" align="right">' + '<tr><td id="sidedivinner"><div>1</div></td></tr></table>'; sideDiv.innerHTML = '<table border="0" cellpadding="0" cellspacing="0" align="right"><tr><td id="sidedivinner"><div>1</div></td></tr></table>';
sideDivInner = outerWin.document.getElementById("sidedivinner"); sideDivInner = outerWin.document.getElementById("sidedivinner");
} }

View file

@ -23,27 +23,27 @@
window.html10n = (function(window, document, undefined) { window.html10n = (function(window, document, undefined) {
// fix console // fix console
var console = window.console; var console = window.console
function interceptConsole(method){ function interceptConsole(method){
if (!console) return function() {}; if (!console) return function() {}
var original = console[method]; var original = console[method]
// do sneaky stuff // do sneaky stuff
if (original.bind){ if (original.bind){
// Do this for normal browsers // Do this for normal browsers
return original.bind(console); return original.bind(console)
}else{ }else{
return function() { return function() {
// Do this for IE // Do this for IE
var message = Array.prototype.slice.apply(arguments).join(' '); var message = Array.prototype.slice.apply(arguments).join(' ')
original(message); original(message)
} }
} }
} }
var consoleLog = interceptConsole('log') var consoleLog = interceptConsole('log')
, consoleWarn = interceptConsole('warn') , consoleWarn = interceptConsole('warn')
, consoleError = interceptConsole('warn'); , consoleError = interceptConsole('warn')
// fix Array.prototype.instanceOf in, guess what, IE! <3 // fix Array.prototype.instanceOf in, guess what, IE! <3
@ -100,7 +100,7 @@ window.html10n = (function(window, document, undefined) {
this._events = this._events || {}; this._events = this._events || {};
if( event in this._events === false ) return; if( event in this._events === false ) return;
for(var i = 0; i < this._events[event].length; i++){ for(var i = 0; i < this._events[event].length; i++){
this._events[event][i].apply(this, Array.prototype.slice.call(arguments, 1)); this._events[event][i].apply(this, Array.prototype.slice.call(arguments, 1))
} }
} }
}; };
@ -122,50 +122,50 @@ window.html10n = (function(window, document, undefined) {
* and caching all necessary resources * and caching all necessary resources
*/ */
function Loader(resources) { function Loader(resources) {
this.resources = resources; this.resources = resources
this.cache = {}; // file => contents this.cache = {} // file => contents
this.langs = {}; // lang => strings this.langs = {} // lang => strings
} }
Loader.prototype.load = function(lang, cb) { Loader.prototype.load = function(lang, cb) {
if(this.langs[lang]) return cb(); if(this.langs[lang]) return cb()
if (this.resources.length > 0) { if (this.resources.length > 0) {
var reqs = 0; var reqs = 0;
for (var i=0, n=this.resources.length; i < n; i++) { for (var i=0, n=this.resources.length; i < n; i++) {
this.fetch(this.resources[i], lang, function(e) { this.fetch(this.resources[i], lang, function(e) {
reqs++; reqs++;
if(e) return setTimeout(function(){ throw e }, 0); if(e) console.warn(e)
if (reqs < n) return;// Call back once all reqs are completed if (reqs < n) return;// Call back once all reqs are completed
cb && cb(); cb && cb()
}) })
} }
} }
} }
Loader.prototype.fetch = function(href, lang, cb) { Loader.prototype.fetch = function(href, lang, cb) {
var that = this; var that = this
if (this.cache[href]) { if (this.cache[href]) {
this.parse(lang, href, this.cache[href], cb) this.parse(lang, href, this.cache[href], cb)
return; return;
} }
var xhr = new XMLHttpRequest(); var xhr = new XMLHttpRequest()
xhr.open('GET', href, /*async: */true); xhr.open('GET', href, /*async: */true)
if (xhr.overrideMimeType) { if (xhr.overrideMimeType) {
xhr.overrideMimeType('application/json; charset=utf-8'); xhr.overrideMimeType('application/json; charset=utf-8');
} }
xhr.onreadystatechange = function() { xhr.onreadystatechange = function() {
if (xhr.readyState == 4) { if (xhr.readyState == 4) {
if (xhr.status == 200 || xhr.status === 0) { if (xhr.status == 200 || xhr.status === 0) {
var data = JSON.parse(xhr.responseText); var data = JSON.parse(xhr.responseText)
that.cache[href] = data; that.cache[href] = data
// Pass on the contents for parsing // Pass on the contents for parsing
that.parse(lang, href, data, cb); that.parse(lang, href, data, cb)
} else { } else {
cb(new Error('Failed to load '+href)); cb(new Error('Failed to load '+href))
} }
} }
}; };
@ -174,39 +174,39 @@ window.html10n = (function(window, document, undefined) {
Loader.prototype.parse = function(lang, currHref, data, cb) { Loader.prototype.parse = function(lang, currHref, data, cb) {
if ('object' != typeof data) { if ('object' != typeof data) {
cb(new Error('A file couldn\'t be parsed as json.')); cb(new Error('A file couldn\'t be parsed as json.'))
return; return
} }
if (!data[lang]) lang = lang.substr(0, lang.indexOf('-') == -1? lang.length : lang.indexOf('-')); if (!data[lang]) lang = lang.substr(0, lang.indexOf('-') == -1? lang.length : lang.indexOf('-'))
if (!data[lang]) { if (!data[lang]) {
cb(new Error('Couldn\'t find translations for '+lang)); cb(new Error('Couldn\'t find translations for '+lang))
return; return
} }
if ('string' == typeof data[lang]) { if ('string' == typeof data[lang]) {
// Import rule // Import rule
// absolute path // absolute path
var importUrl = data[lang]; var importUrl = data[lang]
// relative path // relative path
if(data[lang].indexOf("http") != 0 && data[lang].indexOf("/") != 0) { if(data[lang].indexOf("http") != 0 && data[lang].indexOf("/") != 0) {
importUrl = currHref+"/../"+data[lang]; importUrl = currHref+"/../"+data[lang]
} }
this.fetch(importUrl, lang, cb); this.fetch(importUrl, lang, cb)
return; return
} }
if ('object' != typeof data[lang]) { if ('object' != typeof data[lang]) {
cb(new Error('Translations should be specified as JSON objects!')); cb(new Error('Translations should be specified as JSON objects!'))
return; return
} }
this.langs[lang] = data[lang]; this.langs[lang] = data[lang]
// TODO: Also store accompanying langs // TODO: Also store accompanying langs
cb(); cb()
} }
@ -216,11 +216,11 @@ window.html10n = (function(window, document, undefined) {
var html10n = var html10n =
{ language : null { language : null
} }
MicroEvent.mixin(html10n); MicroEvent.mixin(html10n)
html10n.macros = {}; html10n.macros = {}
html10n.rtl = ["ar","dv","fa","ha","he","ks","ku","ps","ur","yi"]; html10n.rtl = ["ar","dv","fa","ha","he","ks","ku","ps","ur","yi"]
/** /**
* Get rules for plural forms (shared with JetPack), see: * Get rules for plural forms (shared with JetPack), see:
@ -664,14 +664,14 @@ window.html10n = (function(window, document, undefined) {
* @param langs An array of lang codes defining fallbacks * @param langs An array of lang codes defining fallbacks
*/ */
html10n.localize = function(langs) { html10n.localize = function(langs) {
var that = this; var that = this
// if only one string => create an array // if only one string => create an array
if ('string' == typeof langs) langs = [langs]; if ('string' == typeof langs) langs = [langs]
this.build(langs, function(er, translations) { this.build(langs, function(er, translations) {
html10n.translations = translations; html10n.translations = translations
html10n.translateElement(translations); html10n.translateElement(translations)
that.trigger('localized'); that.trigger('localized')
}) })
} }
@ -682,78 +682,78 @@ window.html10n = (function(window, document, undefined) {
* @param element A DOM element, if omitted, the document element will be used * @param element A DOM element, if omitted, the document element will be used
*/ */
html10n.translateElement = function(translations, element) { html10n.translateElement = function(translations, element) {
element = element || document.documentElement; element = element || document.documentElement
var children = element? getTranslatableChildren(element) : document.childNodes; var children = element? getTranslatableChildren(element) : document.childNodes;
for (var i=0, n=children.length; i < n; i++) { for (var i=0, n=children.length; i < n; i++) {
this.translateNode(translations, children[i]); this.translateNode(translations, children[i])
} }
// translate element itself if necessary // translate element itself if necessary
this.translateNode(translations, element); this.translateNode(translations, element)
} }
function asyncForEach(list, iterator, cb) { function asyncForEach(list, iterator, cb) {
var i = 0 var i = 0
, n = list.length; , n = list.length
iterator(list[i], i, function each(err) { iterator(list[i], i, function each(err) {
if(err) consoleLog(err); if(err) consoleLog(err)
i++; i++
if (i < n) return iterator(list[i],i, each); if (i < n) return iterator(list[i],i, each);
cb(); cb()
}) })
} }
function getTranslatableChildren(element) { function getTranslatableChildren(element) {
if(!document.querySelectorAll) { if(!document.querySelectorAll) {
if (!element) return []; if (!element) return []
var nodes = element.getElementsByTagName('*') var nodes = element.getElementsByTagName('*')
, l10nElements = []; , l10nElements = []
for (var i=0, n=nodes.length; i < n; i++) { for (var i=0, n=nodes.length; i < n; i++) {
if (nodes[i].getAttribute('data-l10n-id')) if (nodes[i].getAttribute('data-l10n-id'))
l10nElements.push(nodes[i]); l10nElements.push(nodes[i]);
} }
return l10nElements; return l10nElements
} }
return element.querySelectorAll('*[data-l10n-id]'); return element.querySelectorAll('*[data-l10n-id]')
} }
html10n.get = function(id, args) { html10n.get = function(id, args) {
var translations = html10n.translations; var translations = html10n.translations
if(!translations) return consoleWarn('No translations available (yet)'); if(!translations) return consoleWarn('No translations available (yet)')
if(!translations[id]) return consoleWarn('Could not find string '+id); if(!translations[id]) return consoleWarn('Could not find string '+id)
// apply args // apply args
var str = substArguments(translations[id], args); var str = substArguments(translations[id], args)
// apply macros // apply macros
return substMacros(id, str, args); return substMacros(id, str, args)
// replace {{arguments}} with their values or the // replace {{arguments}} with their values or the
// associated translation string (based on its key) // associated translation string (based on its key)
function substArguments(str, args) { function substArguments(str, args) {
var reArgs = /\{\{\s*([a-zA-Z\.]+)\s*\}\}/ var reArgs = /\{\{\s*([a-zA-Z\.]+)\s*\}\}/
, match; , match
while (match = reArgs.exec(str)) { while (match = reArgs.exec(str)) {
if (!match || match.length < 2) if (!match || match.length < 2)
return str; // argument key not found return str // argument key not found
var arg = match[1] var arg = match[1]
, sub = ''; , sub = ''
if (arg in args) { if (arg in args) {
sub = args[arg]; sub = args[arg]
} else if (arg in translations) { } else if (arg in translations) {
sub = translations[arg]; sub = translations[arg]
} else { } else {
consoleWarn('Could not find argument {{' + arg + '}}'); consoleWarn('Could not find argument {{' + arg + '}}')
return str; return str
} }
str = str.substring(0, match.index) + sub + str.substr(match.index + match[0].length); str = str.substring(0, match.index) + sub + str.substr(match.index + match[0].length)
} }
return str; return str
} }
// replace {[macros]} with their values // replace {[macros]} with their values
@ -766,21 +766,21 @@ window.html10n = (function(window, document, undefined) {
// a macro has been found // a macro has been found
// Note: at the moment, only one parameter is supported // Note: at the moment, only one parameter is supported
var macroName = reMatch[1] var macroName = reMatch[1]
, paramName = reMatch[2]; , paramName = reMatch[2]
if (!(macroName in gMacros)) return str; if (!(macroName in gMacros)) return str
var param; var param
if (args && paramName in args) { if (args && paramName in args) {
param = args[paramName]; param = args[paramName]
} else if (paramName in translations) { } else if (paramName in translations) {
param = translations[paramName]; param = translations[paramName]
} }
// there's no macro parser yet: it has to be defined in gMacros // there's no macro parser yet: it has to be defined in gMacros
var macro = html10n.macros[macroName]; var macro = html10n.macros[macroName]
str = macro(translations, key, str, param); str = macro(translations, key, str, param)
return str; return str
} }
} }
@ -788,26 +788,26 @@ window.html10n = (function(window, document, undefined) {
* Applies translations to a DOM node (recursive) * Applies translations to a DOM node (recursive)
*/ */
html10n.translateNode = function(translations, node) { html10n.translateNode = function(translations, node) {
var str = {}; var str = {}
// get id // get id
str.id = node.getAttribute('data-l10n-id'); str.id = node.getAttribute('data-l10n-id')
if (!str.id) return; if (!str.id) return
if(!translations[str.id]) return consoleWarn('Couldn\'t find translation key '+str.id); if(!translations[str.id]) return consoleWarn('Couldn\'t find translation key '+str.id)
// get args // get args
if(window.JSON) { if(window.JSON) {
str.args = JSON.parse(node.getAttribute('data-l10n-args')); str.args = JSON.parse(node.getAttribute('data-l10n-args'))
}else{ }else{
try{ try{
str.args = eval(node.getAttribute('data-l10n-args')); str.args = eval(node.getAttribute('data-l10n-args'))
}catch(e) { }catch(e) {
consoleWarn('Couldn\'t parse args for '+str.id); consoleWarn('Couldn\'t parse args for '+str.id)
} }
} }
str.str = html10n.get(str.id, str.args); str.str = html10n.get(str.id, str.args)
// get attribute name to apply str to // get attribute name to apply str to
var prop var prop
@ -817,31 +817,31 @@ window.html10n = (function(window, document, undefined) {
, "innerHTML": 1 , "innerHTML": 1
, "alt": 1 , "alt": 1
, "textContent": 1 , "textContent": 1
}; }
if (index > 0 && str.id.substr(index + 1) in attrList) { // an attribute has been specified if (index > 0 && str.id.substr(index + 1) in attrList) { // an attribute has been specified
prop = str.id.substr(index + 1); prop = str.id.substr(index + 1)
} else { // no attribute: assuming text content by default } else { // no attribute: assuming text content by default
prop = document.body.textContent ? 'textContent' : 'innerText'; prop = document.body.textContent ? 'textContent' : 'innerText'
} }
// Apply translation // Apply translation
if (node.children.length === 0 || prop != 'textContent') { if (node.children.length === 0 || prop != 'textContent') {
node[prop] = str.str; node[prop] = str.str
} else { } else {
var children = node.childNodes, var children = node.childNodes,
found = false; found = false
for (var i=0, n=children.length; i < n; i++) { for (var i=0, n=children.length; i < n; i++) {
if (children[i].nodeType === 3 && /\S/.test(children[i].textContent)) { if (children[i].nodeType === 3 && /\S/.test(children[i].textContent)) {
if (!found) { if (!found) {
children[i].nodeValue = str.str; children[i].nodeValue = str.str
found = true; found = true
} else { } else {
children[i].nodeValue = ''; children[i].nodeValue = ''
} }
} }
} }
if (!found) { if (!found) {
consoleWarn('Unexpected error: could not translate element content for key '+str.id, node); consoleWarn('Unexpected error: could not translate element content for key '+str.id, node)
} }
} }
} }
@ -852,32 +852,32 @@ window.html10n = (function(window, document, undefined) {
*/ */
html10n.build = function(langs, cb) { html10n.build = function(langs, cb) {
var that = this var that = this
, build = {}; , build = {}
asyncForEach(langs, function (lang, i, next) { asyncForEach(langs, function (lang, i, next) {
if(!lang) return next(); if(!lang) return next();
that.loader.load(lang, next); that.loader.load(lang, next)
}, function() { }, function() {
var lang; var lang
langs.reverse(); langs.reverse()
// loop through priority array... // loop through priority array...
for (var i=0, n=langs.length; i < n; i++) { for (var i=0, n=langs.length; i < n; i++) {
lang = langs[i]; lang = langs[i]
if(!lang || !(lang in that.loader.langs)) continue; if(!lang || !(lang in that.loader.langs)) continue;
// ... and apply all strings of the current lang in the list // ... and apply all strings of the current lang in the list
// to our build object // to our build object
for (var string in that.loader.langs[lang]) { for (var string in that.loader.langs[lang]) {
build[string] = that.loader.langs[lang][string]; build[string] = that.loader.langs[lang][string]
} }
// the last applied lang will be exposed as the // the last applied lang will be exposed as the
// lang the page was translated to // lang the page was translated to
that.language = lang; that.language = lang
} }
cb(null, build); cb(null, build)
}) })
} }
@ -893,8 +893,8 @@ window.html10n = (function(window, document, undefined) {
* Returns the direction of the language returned be html10n#getLanguage * Returns the direction of the language returned be html10n#getLanguage
*/ */
html10n.getDirection = function() { html10n.getDirection = function() {
var langCode = this.language.indexOf('-') == -1? this.language : this.language.substr(0, this.language.indexOf('-')); var langCode = this.language.indexOf('-') == -1? this.language : this.language.substr(0, this.language.indexOf('-'))
return html10n.rtl.indexOf(langCode) == -1? 'ltr' : 'rtl'; return html10n.rtl.indexOf(langCode) == -1? 'ltr' : 'rtl'
} }
/** /**
@ -903,28 +903,28 @@ window.html10n = (function(window, document, undefined) {
html10n.index = function () { html10n.index = function () {
// Find all <link>s // Find all <link>s
var links = document.getElementsByTagName('link') var links = document.getElementsByTagName('link')
, resources = []; , resources = []
for (var i=0, n=links.length; i < n; i++) { for (var i=0, n=links.length; i < n; i++) {
if (links[i].type != 'application/l10n+json') if (links[i].type != 'application/l10n+json')
continue; continue;
resources.push(links[i].href); resources.push(links[i].href)
} }
this.loader = new Loader(resources); this.loader = new Loader(resources)
this.trigger('indexed'); this.trigger('indexed')
} }
if (document.addEventListener) // modern browsers and IE9+ if (document.addEventListener) // modern browsers and IE9+
document.addEventListener('DOMContentLoaded', function() { document.addEventListener('DOMContentLoaded', function() {
html10n.index(); html10n.index()
}, false); }, false)
else if (window.attachEvent) else if (window.attachEvent)
window.attachEvent('onload', function() { window.attachEvent('onload', function() {
html10n.index(); html10n.index()
}, false); }, false)
// gettext-like shortcut // gettext-like shortcut
if (window._ === undefined) if (window._ === undefined)
window._ = html10n.get; window._ = html10n.get;
return html10n; return html10n
})(window, document); })(window, document)

View file

@ -470,14 +470,6 @@ var pad = {
userAgent: pad.getDisplayUserAgent() userAgent: pad.getDisplayUserAgent()
}; };
if (clientVars.specialKey)
{
pad.myUserInfo.specialKey = clientVars.specialKey;
if (clientVars.specialKeyTranslation)
{
$("#specialkeyarea").html("mode: " + String(clientVars.specialKeyTranslation).toUpperCase());
}
}
padimpexp.init(this); padimpexp.init(this);
padsavedrevs.init(this); padsavedrevs.init(this);
@ -663,8 +655,8 @@ var pad = {
{ {
alertBar.displayMessage(function(abar) alertBar.displayMessage(function(abar)
{ {
abar.find("#servermsgdate").html(" (" + padutils.simpleDateTime(new Date) + ")"); abar.find("#servermsgdate").text(" (" + padutils.simpleDateTime(new Date) + ")");
abar.find("#servermsgtext").html(m.text); abar.find("#servermsgtext").text(m.text);
}); });
} }
if (m.js) if (m.js)

View file

@ -76,7 +76,6 @@ var padconnectionstatus = (function()
}, },
isFullyConnected: function() isFullyConnected: function()
{ {
padmodals.hideOverlay();
return status.what == 'connected'; return status.what == 'connected';
}, },
getStatus: function() getStatus: function()

View file

@ -40,22 +40,10 @@ var padmodals = (function()
}); });
}, },
showOverlay: function(duration) { showOverlay: function(duration) {
$("#overlay").show().css( $("#overlay").show();
{
'opacity': 0
}).animate(
{
'opacity': 1
}, duration);
}, },
hideOverlay: function(duration) { hideOverlay: function(duration) {
$("#overlay").animate( $("#overlay").hide();
{
'opacity': 0
}, duration, function()
{
$("#modaloverlay").hide();
});
} }
}; };
return self; return self;

View file

@ -116,7 +116,7 @@ var paduserlist = (function()
nameHtml = '<input data-l10n-id="pad.userlist.unnamed" type="text" class="editempty newinput" value="'+_('pad.userlist.unnamed')+'" ' + (isNameEditable(data) ? '' : 'disabled="disabled" ') + '/>'; nameHtml = '<input data-l10n-id="pad.userlist.unnamed" type="text" class="editempty newinput" value="'+_('pad.userlist.unnamed')+'" ' + (isNameEditable(data) ? '' : 'disabled="disabled" ') + '/>';
} }
return ['<td style="height:', height, 'px" class="usertdswatch"><div class="swatch" style="background:' + data.color + '">&nbsp;</div></td>', '<td style="height:', height, 'px" class="usertdname">', nameHtml, '</td>', '<td style="height:', height, 'px" class="activity">', padutils.escapeHtml(data.activity), '</td>'].join(''); return ['<td style="height:', height, 'px" class="usertdswatch"><div class="swatch" style="background:' + padutils.escapeHtml(data.color) + '">&nbsp;</div></td>', '<td style="height:', height, 'px" class="usertdname">', nameHtml, '</td>', '<td style="height:', height, 'px" class="activity">', padutils.escapeHtml(data.activity), '</td>'].join('');
} }
function getRowHtml(id, innerHtml, authorId) function getRowHtml(id, innerHtml, authorId)

View file

@ -43,8 +43,13 @@ describe("bold button", function(){
//select this text element //select this text element
$firstTextElement.sendkeys('{selectall}'); $firstTextElement.sendkeys('{selectall}');
if(inner$.browser.mozilla){ // if it's a mozilla browser
var evtType = "keypress";
}else{
var evtType = "keydown";
}
var e = inner$.Event("keydown"); var e = inner$.Event(evtType);
e.ctrlKey = true; // Control key e.ctrlKey = true; // Control key
e.which = 66; // b e.which = 66; // b
inner$("#innerdocbody").trigger(e); inner$("#innerdocbody").trigger(e);

View file

@ -15,7 +15,13 @@ describe("indentation button", function(){
//select this text element //select this text element
$firstTextElement.sendkeys('{selectall}'); $firstTextElement.sendkeys('{selectall}');
var e = inner$.Event("keydown"); if(inner$.browser.mozilla){ // if it's a mozilla browser
var evtType = "keypress";
}else{
var evtType = "keydown";
}
var e = inner$.Event(evtType);
e.keyCode = 9; // tab :| e.keyCode = 9; // tab :|
inner$("#innerdocbody").trigger(e); inner$("#innerdocbody").trigger(e);

View file

@ -44,7 +44,13 @@ describe("italic some text", function(){
//select this text element //select this text element
$firstTextElement.sendkeys('{selectall}'); $firstTextElement.sendkeys('{selectall}');
var e = inner$.Event("keydown"); if(inner$.browser.mozilla){ // if it's a mozilla browser
var evtType = "keypress";
}else{
var evtType = "keydown";
}
var e = inner$.Event(evtType);
e.ctrlKey = true; // Control key e.ctrlKey = true; // Control key
e.which = 105; // i e.which = 105; // i
inner$("#innerdocbody").trigger(e); inner$("#innerdocbody").trigger(e);

View file

@ -47,12 +47,18 @@ describe("undo button then redo button", function(){
var modifiedValue = $firstTextElement.text(); // get the modified value var modifiedValue = $firstTextElement.text(); // get the modified value
expect(modifiedValue).not.to.be(originalValue); // expect the value to change expect(modifiedValue).not.to.be(originalValue); // expect the value to change
var e = inner$.Event("keydown"); if(inner$.browser.mozilla){ // if it's a mozilla browser
var evtType = "keypress";
}else{
var evtType = "keydown";
}
var e = inner$.Event(evtType);
e.ctrlKey = true; // Control key e.ctrlKey = true; // Control key
e.which = 90; // z e.which = 90; // z
inner$("#innerdocbody").trigger(e); inner$("#innerdocbody").trigger(e);
var e = inner$.Event("keydown"); var e = inner$.Event(evtType);
e.ctrlKey = true; // Control key e.ctrlKey = true; // Control key
e.which = 121; // y e.which = 121; // y
inner$("#innerdocbody").trigger(e); inner$("#innerdocbody").trigger(e);

View file

@ -44,7 +44,13 @@ describe("undo button", function(){
var modifiedValue = $firstTextElement.text(); // get the modified value var modifiedValue = $firstTextElement.text(); // get the modified value
expect(modifiedValue).not.to.be(originalValue); // expect the value to change expect(modifiedValue).not.to.be(originalValue); // expect the value to change
var e = inner$.Event("keydown"); if(inner$.browser.mozilla){ // if it's a mozilla browser
var evtType = "keypress";
}else{
var evtType = "keydown";
}
var e = inner$.Event(evtType);
e.ctrlKey = true; // Control key e.ctrlKey = true; // Control key
e.which = 90; // z e.which = 90; // z
inner$("#innerdocbody").trigger(e); inner$("#innerdocbody").trigger(e);