From 76e50e2c4d5caf4f95ea42c06957fdd62d73e48f Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Mon, 15 Apr 2013 20:29:06 +0200 Subject: [PATCH 01/36] Refactor SocketIORouter --- src/node/handler/SocketIORouter.js | 103 ++++++++++++----------------- 1 file changed, 43 insertions(+), 60 deletions(-) diff --git a/src/node/handler/SocketIORouter.js b/src/node/handler/SocketIORouter.js index 483bb1d17..e87370028 100644 --- a/src/node/handler/SocketIORouter.js +++ b/src/node/handler/SocketIORouter.js @@ -48,88 +48,56 @@ exports.addComponent = function(moduleName, module) /** * sets the socket.io and adds event functions for routing */ -exports.setSocketIO = function(_socket) -{ +exports.setSocketIO = function(_socket) { //save this socket internaly socket = _socket; - socket.sockets.on('connection', function(client) - { + socket.sockets.on('connection', function(client) { client.set('remoteAddress', client.handshake.address.address); var clientAuthorized = false; //wrap the original send function to log the messages client._send = client.send; - client.send = function(message) - { + client.send = function(message) { messageLogger.debug("to " + client.id + ": " + stringifyWithoutPassword(message)); client._send(message); } //tell all components about this connect - for(var i in components) - { + for(var i in components) { components[i].handleConnect(client); - } - - //try to handle the message of this client - function handleMessage(message) - { - if(message.component && components[message.component]) - { - //check if component is registered in the components array - if(components[message.component]) - { - messageLogger.debug("from " + client.id + ": " + stringifyWithoutPassword(message)); - components[message.component].handleMessage(client, message); - } - } - else - { - messageLogger.error("Can't route the message:" + stringifyWithoutPassword(message)); - } - } - + } + client.on('message', function(message) { - if(message.protocolVersion && message.protocolVersion != 2) - { + if(message.protocolVersion && message.protocolVersion != 2) { messageLogger.warn("Protocolversion header is not correct:" + stringifyWithoutPassword(message)); return; } //client is authorized, everything ok - if(clientAuthorized) - { - handleMessage(message); - } - //try to authorize the client - else - { - //this message has everything to try an authorization - if(message.padId !== undefined && message.sessionID !== undefined && message.token !== undefined && message.password !== undefined) - { - securityManager.checkAccess (message.padId, message.sessionID, message.token, message.password, function(err, statusObject) - { - ERR(err); - - //access was granted, mark the client as authorized and handle the message - if(statusObject.accessStatus == "grant") - { - clientAuthorized = true; - handleMessage(message); + if(clientAuthorized) { + handleMessage(client, message); + } else { //try to authorize the client + if(message.padId !== undefined && message.sessionID !== undefined && message.token !== undefined && message.password !== undefined) { + //this message has everything to try an authorization + securityManager.checkAccess (message.padId, message.sessionID, message.token, message.password, + function(err, statusObject) { + ERR(err); + + //access was granted, mark the client as authorized and handle the message + if(statusObject.accessStatus == "grant") { + clientAuthorized = true; + handleMessage(client, message); + } + //no access, send the client a message that tell him why + else { + messageLogger.warn("Authentication try failed:" + stringifyWithoutPassword(message)); + client.json.send({accessStatus: statusObject.accessStatus}); + } } - //no access, send the client a message that tell him why - else - { - messageLogger.warn("Authentication try failed:" + stringifyWithoutPassword(message)); - client.json.send({accessStatus: statusObject.accessStatus}); - } - }); - } - //drop message - else - { + ); + } else { //drop message messageLogger.warn("Dropped message cause of bad permissions:" + stringifyWithoutPassword(message)); } } @@ -146,6 +114,21 @@ exports.setSocketIO = function(_socket) }); } +//try to handle the message of this client +function handleMessage(client, message) +{ + + if(message.component && components[message.component]) { + //check if component is registered in the components array + if(components[message.component]) { + messageLogger.debug("from " + client.id + ": " + stringifyWithoutPassword(message)); + components[message.component].handleMessage(client, message); + } + } else { + messageLogger.error("Can't route the message:" + stringifyWithoutPassword(message)); + } +} + //returns a stringified representation of a message, removes the password //this ensures there are no passwords in the log function stringifyWithoutPassword(message) From 1c8b7a3661ce7239b33a0e91fc010022303f7ba6 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Wed, 17 Apr 2013 14:25:23 +0200 Subject: [PATCH 02/36] Add a server-side changeset queue per pad fixes #1573 --- src/node/handler/PadMessageHandler.js | 20 +++++++++++++++----- src/package.json | 3 ++- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js index 85efb0083..b6d22c14d 100644 --- a/src/node/handler/PadMessageHandler.js +++ b/src/node/handler/PadMessageHandler.js @@ -35,6 +35,7 @@ var messageLogger = log4js.getLogger("message"); var accessLogger = log4js.getLogger("access"); var _ = require('underscore'); var hooks = require("ep_etherpad-lite/static/js/pluginfw/hooks.js"); +var channels = require("channels"); /** * A associative array that saves informations about a session @@ -48,6 +49,11 @@ var hooks = require("ep_etherpad-lite/static/js/pluginfw/hooks.js"); */ var sessioninfos = {}; +/** + * A changeset queue per pad that is processed by handleUserChanges() + */ +var padChannels = new channels.channels(handleUserChanges); + /** * Saves the Socket class we need to send and recieve data from the client */ @@ -176,7 +182,7 @@ exports.handleMessage = function(client, message) if (sessioninfos[client.id].readonly) { messageLogger.warn("Dropped message, COLLABROOM for readonly pad"); } else if (message.data.type == "USER_CHANGES") { - handleUserChanges(client, message); + padChannels.emit(message.padId, {client: client, message: message});// add to pad queue } else if (message.data.type == "USERINFO_UPDATE") { handleUserInfoUpdate(client, message); } else if (message.data.type == "CHAT_MESSAGE") { @@ -522,23 +528,26 @@ function handleUserInfoUpdate(client, message) * @param client the client that send this message * @param message the message from the client */ -function handleUserChanges(client, message) +function handleUserChanges(data, cb) { + var client = data.client + , message = data.message + // Make sure all required fields are present if(message.data.baseRev == null) { messageLogger.warn("Dropped message, USER_CHANGES Message has no baseRev!"); - return; + return cb(); } if(message.data.apool == null) { messageLogger.warn("Dropped message, USER_CHANGES Message has no apool!"); - return; + return cb(); } if(message.data.changeset == null) { messageLogger.warn("Dropped message, USER_CHANGES Message has no changeset!"); - return; + return cb(); } //get all Vars we need @@ -679,6 +688,7 @@ function handleUserChanges(client, message) } ], function(err) { + cb(); ERR(err); }); } diff --git a/src/package.json b/src/package.json index e7c56549f..900308def 100644 --- a/src/package.json +++ b/src/package.json @@ -37,7 +37,8 @@ "underscore" : "1.3.1", "unorm" : "1.0.0", "languages4translatewiki" : "0.1.3", - "swagger-node-express" : "1.2.3" + "swagger-node-express" : "1.2.3", + "channels" : "0.0.x" }, "bin": { "etherpad-lite": "./node/server.js" }, "devDependencies": { From cd288c70cb6bc738014cae9315170b238e0898a1 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Wed, 17 Apr 2013 14:26:11 +0200 Subject: [PATCH 03/36] Don't block changeset queue with delivering changeset --- src/node/handler/PadMessageHandler.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js index b6d22c14d..a24390a6a 100644 --- a/src/node/handler/PadMessageHandler.js +++ b/src/node/handler/PadMessageHandler.js @@ -684,7 +684,10 @@ function handleUserChanges(data, cb) pad.appendRevision(nlChangeset); } - exports.updatePadClients(pad, callback); + exports.updatePadClients(pad, function(er) { + ERR(er) + }); + callback(); } ], function(err) { From 560fd55bf2503e047bfdcf8f7c8f5e30cd692a26 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Wed, 17 Apr 2013 15:24:40 +0200 Subject: [PATCH 04/36] Fix authorship sanitization author colors wouldn't get disttributed, if their id was greater than 9 (due to apool encoding them to base 36) --- src/static/js/changesettracker.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/static/js/changesettracker.js b/src/static/js/changesettracker.js index d0c91e3d3..dde4f5c74 100644 --- a/src/static/js/changesettracker.js +++ b/src/static/js/changesettracker.js @@ -163,19 +163,20 @@ function makeChangesetTracker(scheduler, apool, aceCallbacksProvider) { // Get my authorID var authorId = parent.parent.pad.myUserInfo.userId; - // Rewrite apool authors with my author information - // We need to replace all new author attribs with thisSession.author, in case someone copy/pasted or otherwise inserted other peoples changes + // Sanitize authorship + // We need to replace all author attribs with thisSession.author, in case they copy/pasted or otherwise inserted other peoples changes if(apool.numToAttrib){ for (var attr in apool.numToAttrib){ - if (apool.numToAttrib[attr][0] == 'author' && apool.numToAttrib[attr][1] == authorId) authorAttr = attr + if (apool.numToAttrib[attr][0] == 'author' && apool.numToAttrib[attr][1] == authorId) authorAttr = Number(attr).toString(36) } - + // Replace all added 'author' attribs with the value of the current user var cs = Changeset.unpack(userChangeset) , iterator = Changeset.opIterator(cs.ops) , op , assem = Changeset.mergingOpAssembler(); + while(iterator.hasNext()) { op = iterator.next() if(op.opcode == '+') { @@ -183,13 +184,13 @@ function makeChangesetTracker(scheduler, apool, aceCallbacksProvider) op.attribs.split('*').forEach(function(attrNum) { if(!attrNum) return - attr = apool.getAttrib(attrNum) + var attr = apool.getAttrib(parseInt(attrNum, 36)) if(!attr) return - if('author' == attr[0] && !~newAttrs.indexOf(authorAttr)) { + if('author' == attr[0]) { + // replace that author with the current one newAttrs += '*'+authorAttr; - // console.log('replacing author attribute ', attrNum, '(', attr[1], ') with', authorAttr) } - else newAttrs += '*'+attrNum + else newAttrs += '*'+attrNum // overtake all other attribs as is }) op.attribs = newAttrs } From 146c75e7032125b3b7d448d22dd1075fd1e982fa Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Wed, 17 Apr 2013 16:37:45 +0300 Subject: [PATCH 05/36] Remove console.log in content collector fixes #1731 --- src/static/js/contentcollector.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/static/js/contentcollector.js b/src/static/js/contentcollector.js index 645b7fce4..95efe9c4b 100644 --- a/src/static/js/contentcollector.js +++ b/src/static/js/contentcollector.js @@ -311,7 +311,6 @@ function makeContentCollector(collectStyles, browser, apool, domInterface, class ['insertorder', 'first'] ].concat( _.map(state.lineAttributes,function(value,key){ - if (typeof(window)!= 'undefined' && window.console) console.log([key, value]) return [key, value]; }) ); From b08a6e522f3c98c81377ac10e58fd4020b3b47e6 Mon Sep 17 00:00:00 2001 From: goldquest Date: Wed, 17 Apr 2013 16:51:21 +0200 Subject: [PATCH 06/36] IE8 complains, if catch block is missing --- src/static/js/changesettracker.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/static/js/changesettracker.js b/src/static/js/changesettracker.js index d0c91e3d3..92d550928 100644 --- a/src/static/js/changesettracker.js +++ b/src/static/js/changesettracker.js @@ -57,6 +57,7 @@ function makeChangesetTracker(scheduler, apool, aceCallbacksProvider) { changeCallback(); } + catch(pseudoError) {} finally { changeCallbackTimeout = null; From 566034ddf0d3ede031389b58253939967a170343 Mon Sep 17 00:00:00 2001 From: goldquest Date: Wed, 17 Apr 2013 16:51:43 +0200 Subject: [PATCH 07/36] IE8 don't knows the Array.forEach function (simple version fix) --- src/static/js/changesettracker.js | 10 ++++++++++ src/static/js/html10n.js | 9 +++++++++ 2 files changed, 19 insertions(+) diff --git a/src/static/js/changesettracker.js b/src/static/js/changesettracker.js index 92d550928..b93fcc174 100644 --- a/src/static/js/changesettracker.js +++ b/src/static/js/changesettracker.js @@ -162,6 +162,16 @@ function makeChangesetTracker(scheduler, apool, aceCallbacksProvider) } else { + + // add forEach function to Array.prototype for IE8 + if (!('forEach' in Array.prototype)) { + Array.prototype.forEach= function(action, that /*opt*/) { + for (var i= 0, n= this.length; i Date: Wed, 17 Apr 2013 16:51:54 +0200 Subject: [PATCH 08/36] use document, not doc --- src/static/js/pad.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/static/js/pad.js b/src/static/js/pad.js index 504bc21e4..9a42bccce 100644 --- a/src/static/js/pad.js +++ b/src/static/js/pad.js @@ -463,7 +463,7 @@ var pad = { { try { - doc.execCommand("BackgroundImageCache", false, true); + document.execCommand("BackgroundImageCache", false, true); } catch (e) {} From 98c43aff43535ed8d05e4c073590c77d4be4d9c6 Mon Sep 17 00:00:00 2001 From: goldquest Date: Wed, 17 Apr 2013 18:17:14 +0200 Subject: [PATCH 09/36] fixed spacing --- src/static/js/changesettracker.js | 16 ++++++++-------- src/static/js/html10n.js | 10 +++++----- 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/static/js/changesettracker.js b/src/static/js/changesettracker.js index b93fcc174..7e95cc75f 100644 --- a/src/static/js/changesettracker.js +++ b/src/static/js/changesettracker.js @@ -163,14 +163,14 @@ function makeChangesetTracker(scheduler, apool, aceCallbacksProvider) else { - // add forEach function to Array.prototype for IE8 - if (!('forEach' in Array.prototype)) { - Array.prototype.forEach= function(action, that /*opt*/) { - for (var i= 0, n= this.length; i Date: Wed, 17 Apr 2013 19:50:05 +0100 Subject: [PATCH 10/36] dont crash on no auth, ust a bandaid --- src/node/handler/PadMessageHandler.js | 37 +++++++++++++++++---------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js index 85efb0083..3da5057d7 100644 --- a/src/node/handler/PadMessageHandler.js +++ b/src/node/handler/PadMessageHandler.js @@ -224,22 +224,31 @@ exports.handleMessage = function(client, message) // FIXME: Call our "sessions" "connections". // FIXME: Use a hook instead // FIXME: Allow to override readwrite access with readonly - var auth = sessioninfos[client.id].auth; - securityManager.checkAccess(auth.padID, auth.sessionID, auth.token, auth.password, function(err, statusObject) - { - if(ERR(err, callback)) return; - //access was granted - if(statusObject.accessStatus == "grant") + // FIXME: A message might arrive but wont have an auth object, this is obviously bad so we should deny it + // Simulate using the load testing tool + if(!sessioninfos[client.id].auth){ + console.error("Auth was never applied to a session", sessioninfos[client.id]) + client.json.send({accessStatus: "deny"}); + callback(); + }else{ + var auth = sessioninfos[client.id].auth; + securityManager.checkAccess(auth.padID, auth.sessionID, auth.token, auth.password, function(err, statusObject) { - callback(); - } - //no access, send the client a message that tell him why - else - { - client.json.send({accessStatus: statusObject.accessStatus}) - } - }); + if(ERR(err, callback)) return; + + //access was granted + if(statusObject.accessStatus == "grant") + { + callback(); + } + //no access, send the client a message that tell him why + else + { + client.json.send({accessStatus: statusObject.accessStatus}) + } + }); + } }, finalHandler ]); From bf4c86ed94b33f74902eab04abc1d2538c7e2001 Mon Sep 17 00:00:00 2001 From: John McLear Date: Wed, 17 Apr 2013 23:48:11 +0100 Subject: [PATCH 11/36] better message for admins --- src/node/handler/PadMessageHandler.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js index f051b9ed3..1e079b522 100644 --- a/src/node/handler/PadMessageHandler.js +++ b/src/node/handler/PadMessageHandler.js @@ -234,8 +234,7 @@ exports.handleMessage = function(client, message) // FIXME: A message might arrive but wont have an auth object, this is obviously bad so we should deny it // Simulate using the load testing tool if(!sessioninfos[client.id].auth){ - console.error("Auth was never applied to a session", sessioninfos[client.id]) - client.json.send({accessStatus: "deny"}); + console.error("Auth was never applied to a session. If you are using the stress-test tool then restart Etherpad and the Stress test tool.") callback(); }else{ var auth = sessioninfos[client.id].auth; From b527c6ead25e8056aa3ccd20c80e255e4afd06cd Mon Sep 17 00:00:00 2001 From: Timo Welde Date: Thu, 18 Apr 2013 12:54:09 +0300 Subject: [PATCH 12/36] Just a missing character --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a42c94bd3..147e6637d 100644 --- a/README.md +++ b/README.md @@ -21,7 +21,7 @@ Also, check out the **[FAQ](https://github.com/ether/etherpad-lite/wiki/FAQ)**, # Installation -Etherpad works with node v0.8 and v0.10, only. (We don't suppot v0.6) +Etherpad works with node v0.8 and v0.10, only. (We don't support v0.6) ## Windows From f0f98b41fef0dde86e7f6b00d9a3a7cec3e501dc Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Sun, 21 Apr 2013 12:29:25 +0000 Subject: [PATCH 13/36] Localisation updates from http://translatewiki.net. --- src/locales/cs.json | 29 ++++++++++-- src/locales/de.json | 2 +- src/locales/el.json | 2 +- src/locales/lb.json | 12 ++--- src/locales/pa.json | 107 ++++++++++++++++++++++++++++++++++++++++++++ src/locales/ps.json | 14 ++++++ 6 files changed, 155 insertions(+), 11 deletions(-) create mode 100644 src/locales/pa.json diff --git a/src/locales/cs.json b/src/locales/cs.json index 905ccf367..bd2b99d67 100644 --- a/src/locales/cs.json +++ b/src/locales/cs.json @@ -1,6 +1,7 @@ { "@metadata": { "authors": [ + "Jezevec", "Quinn" ] }, @@ -19,9 +20,9 @@ "pad.toolbar.clearAuthorship.title": "Vymazat barvy autorstv\u00ed", "pad.toolbar.import_export.title": "Importovat/Exportovat z/do jin\u00fdch form\u00e1t\u016f", "pad.toolbar.timeslider.title": "Osa \u010dasu", - "pad.toolbar.savedRevision.title": "Ulo\u017een\u00e9 revize", + "pad.toolbar.savedRevision.title": "Ulo\u017eit revizi", "pad.toolbar.settings.title": "Nastaven\u00ed", - "pad.toolbar.embed.title": "Um\u00edstit tento Pad", + "pad.toolbar.embed.title": "Um\u00edstit a nasd\u00edlet tento Pad", "pad.toolbar.showusers.title": "Zobrazit u\u017eivatele u tohoto Padu", "pad.colorpicker.save": "Ulo\u017eit", "pad.colorpicker.cancel": "Zru\u0161it", @@ -34,6 +35,7 @@ "pad.settings.stickychat": "Chat v\u017edy na obrazovce", "pad.settings.colorcheck": "Barvy autorstv\u00ed", "pad.settings.linenocheck": "\u010c\u00edsla \u0159\u00e1dk\u016f", + "pad.settings.rtlcheck": "\u010c\u00edst obsah zprava doleva?", "pad.settings.fontType": "Typ p\u00edsma:", "pad.settings.fontType.normal": "Norm\u00e1ln\u00ed", "pad.settings.fontType.monospaced": "Monospace", @@ -41,6 +43,7 @@ "pad.settings.language": "Jazyk:", "pad.importExport.import_export": "Import/Export", "pad.importExport.import": "Nahr\u00e1t libovoln\u00fd textov\u00fd soubor nebo dokument", + "pad.importExport.importSuccessful": "\u00dasp\u011bch!", "pad.importExport.export": "Exportovat st\u00e1vaj\u00edc\u00ed Pad jako:", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Prost\u00fd text", @@ -52,6 +55,7 @@ "pad.modals.connected": "P\u0159ipojeno.", "pad.modals.reconnecting": "Znovup\u0159ipojov\u00e1n\u00ed k tv\u00e9mu Padu\u2026", "pad.modals.forcereconnect": "Vynutit znovup\u0159ipojen\u00ed", + "pad.modals.userdup": "Otev\u0159eno v jin\u00e9m okn\u011b", "pad.modals.userdup.explanation": "Zd\u00e1 se, \u017ee tento Pad je na tomto po\u010d\u00edta\u010di otev\u0159en ve v\u00edce ne\u017e jednom okn\u011b.", "pad.modals.userdup.advice": "Pro pou\u017eit\u00ed tohoto okna se mus\u00ed\u0161 znovu p\u0159ipojit.", "pad.modals.unauth": "Nem\u00e1te autorizaci", @@ -76,10 +80,12 @@ "pad.share.emebdcode": "Vlo\u017eit URL", "pad.chat": "Chat", "pad.chat.title": "Otev\u0159\u00edt chat tohoto Padu.", + "pad.chat.loadmessages": "Na\u010d\u00edst v\u00edce zpr\u00e1v", "timeslider.pageTitle": "Osa \u010dasu {{appTitle}}", "timeslider.toolbar.returnbutton": "N\u00e1vrat do Padu", "timeslider.toolbar.authors": "Auto\u0159i:", "timeslider.toolbar.authorsList": "Bez autor\u016f", + "timeslider.toolbar.exportlink.title": "Exportovat", "timeslider.exportCurrent": "Exportovat nyn\u011bj\u0161\u00ed verzi jako:", "timeslider.version": "Verze {{version}}", "timeslider.saved": "Ulo\u017eeno {{day}} {{month}} {{year}}", @@ -95,5 +101,22 @@ "timeslider.month.september": "z\u00e1\u0159\u00ed", "timeslider.month.october": "\u0159\u00edjen", "timeslider.month.november": "listopad", - "timeslider.month.december": "prosinec" + "timeslider.month.december": "prosinec", + "timeslider.unnamedauthor": "{{num}} nejmenovan\u00fd autor", + "timeslider.unnamedauthors": "{{num}} nejmenovan\u00fdch autor\u016f", + "pad.savedrevs.marked": "Tato revize je nyn\u00ed ozna\u010dena jako ulo\u017een\u00e1", + "pad.userlist.entername": "Zadejte sv\u00e9 jm\u00e9no", + "pad.userlist.unnamed": "nejmenovan\u00fd", + "pad.userlist.guest": "Host", + "pad.userlist.deny": "Zak\u00e1zat", + "pad.userlist.approve": "Povolit", + "pad.editbar.clearcolors": "Odstranit autorsk\u00e9 barvy z cel\u00e9ho dokumentu?", + "pad.impexp.importbutton": "Importovat", + "pad.impexp.importing": "Importov\u00e1n\u00ed\u2026", + "pad.impexp.confirmimport": "Import souboru p\u0159ep\u00ed\u0161e aktu\u00e1ln\u00ed text v padu. Opravdu chcete tuto akci prov\u00e9st?", + "pad.impexp.convertFailed": "Tento soubor nelze importovat. Pou\u017eijte pros\u00edm jin\u00fd form\u00e1t dokumentu nebo nakop\u00edrujte text ru\u010dn\u011b", + "pad.impexp.uploadFailed": "Nahr\u00e1v\u00e1n\u00ed selhalo, zkuste to znovu", + "pad.impexp.importfailed": "Import selhal", + "pad.impexp.copypaste": "Vlo\u017ete pros\u00edm kopii", + "pad.impexp.exportdisabled": "Export do form\u00e1tu {{type}} je zak\u00e1z\u00e1n. Kontaktujte sv\u00e9ho administr\u00e1tora pro zji\u0161t\u011bn\u00ed detail\u016f." } \ No newline at end of file diff --git a/src/locales/de.json b/src/locales/de.json index 380ee625e..d7be7b901 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -24,7 +24,7 @@ "pad.toolbar.timeslider.title": "Pad-Versionsgeschichte anzeigen", "pad.toolbar.savedRevision.title": "Version speichern", "pad.toolbar.settings.title": "Einstellungen", - "pad.toolbar.embed.title": "Dieses Pad teilen oder einbetten", + "pad.toolbar.embed.title": "Dieses Pad teilen und einbetten", "pad.toolbar.showusers.title": "Aktuell verbundene Benutzer anzeigen", "pad.colorpicker.save": "Speichern", "pad.colorpicker.cancel": "Abbrechen", diff --git a/src/locales/el.json b/src/locales/el.json index 78b8a7535..4dd3067ac 100644 --- a/src/locales/el.json +++ b/src/locales/el.json @@ -24,7 +24,7 @@ "pad.toolbar.timeslider.title": "\u03a7\u03c1\u03bf\u03bd\u03bf\u03b4\u03b9\u03ac\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1", "pad.toolbar.savedRevision.title": "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u0391\u03bd\u03b1\u03b8\u03b5\u03ce\u03c1\u03b7\u03c3\u03b7\u03c2", "pad.toolbar.settings.title": "\u03a1\u03c5\u03b8\u03bc\u03af\u03c3\u03b5\u03b9\u03c2", - "pad.toolbar.embed.title": "\u0395\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7 \u03c4\u03bf\u03c5 pad", + "pad.toolbar.embed.title": "\u0394\u03b9\u03b1\u03bc\u03bf\u03af\u03c1\u03b1\u03c3\u03b7 \u03ba\u03b1\u03b9 \u0395\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7 \u03b1\u03c5\u03c4\u03bf\u03cd \u03c4\u03bf\u03c5 pad", "pad.toolbar.showusers.title": "\u0395\u03bc\u03c6\u03ac\u03bd\u03b9\u03c3\u03b7 \u03c4\u03c9\u03bd \u03c7\u03c1\u03b7\u03c3\u03c4\u03ce\u03bd \u03b1\u03c5\u03c4\u03bf\u03cd \u03c4\u03bf\u03c5 pad", "pad.colorpicker.save": "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7", "pad.colorpicker.cancel": "\u0386\u03ba\u03c5\u03c1\u03bf", diff --git a/src/locales/lb.json b/src/locales/lb.json index 27a43fcfd..bd73d7ecd 100644 --- a/src/locales/lb.json +++ b/src/locales/lb.json @@ -1,4 +1,9 @@ { + "@metadata": { + "authors": [ + "Robby" + ] + }, "index.newPad": "Neie Pad", "pad.toolbar.ol.title": "Numer\u00e9iert L\u00ebscht", "pad.toolbar.ul.title": "Net-numer\u00e9iert L\u00ebscht", @@ -44,10 +49,5 @@ "pad.userlist.entername": "Gitt \u00c4ren Numm an", "pad.userlist.guest": "Gaascht", "pad.impexp.importbutton": "Elo import\u00e9ieren", - "pad.impexp.importing": "Import\u00e9ieren...", - "@metadata": { - "authors": [ - "Robby" - ] - } + "pad.impexp.importing": "Import\u00e9ieren..." } \ No newline at end of file diff --git a/src/locales/pa.json b/src/locales/pa.json new file mode 100644 index 000000000..65c81fb7e --- /dev/null +++ b/src/locales/pa.json @@ -0,0 +1,107 @@ +{ + "index.newPad": "\u0a28\u0a35\u0a3e\u0a02 \u0a2a\u0a48\u0a21", + "index.createOpenPad": "\u0a1c\u0a3e\u0a02 \u0a28\u0a3e\u0a02 \u0a28\u0a3e\u0a32 \u0a28\u0a35\u0a3e\u0a02 \u0a2a\u0a48\u0a21 \u0a2c\u0a23\u0a3e\u0a13/\u0a16\u0a4b\u0a32\u0a4d\u0a39\u0a4b:", + "pad.toolbar.bold.title": "\u0a17\u0a42\u0a5c\u0a4d\u0a39\u0a3e (Ctrl-B)", + "pad.toolbar.italic.title": "\u0a24\u0a3f\u0a30\u0a1b\u0a3e (Ctrl-I)", + "pad.toolbar.underline.title": "\u0a39\u0a47\u0a20\u0a3e\u0a02-\u0a30\u0a47\u0a16\u0a3e (Ctrl-U)", + "pad.toolbar.strikethrough.title": "\u0a35\u0a3f\u0a70\u0a28\u0a4d\u0a39\u0a4b \u0a35\u0a3f\u0a28\u0a4b", + "pad.toolbar.ol.title": "\u0a32\u0a5c\u0a40\u0a35\u0a3e\u0a30 \u0a32\u0a3f\u0a38\u0a1f", + "pad.toolbar.ul.title": "\u0a2c\u0a3f\u0a28-\u0a32\u0a5c\u0a40\u0a2c\u0a71\u0a27 \u0a38\u0a42\u0a1a\u0a40", + "pad.toolbar.indent.title": "\u0a39\u0a3e\u0a38\u0a3c\u0a40\u0a0f \u0a24\u0a4b\u0a02 \u0a26\u0a42\u0a30", + "pad.toolbar.undo.title": "\u0a35\u0a3e\u0a2a\u0a38 (Ctrl-Z)", + "pad.toolbar.redo.title": "\u0a2a\u0a30\u0a24\u0a3e\u0a13 (Ctrl-Y)", + "pad.toolbar.clearAuthorship.title": "\u0a2a\u0a30\u0a2e\u0a3e\u0a23\u0a15\u0a3f\u0a24\u0a3e \u0a30\u0a70\u0a17 \u0a38\u0a3e\u0a2b\u0a3c \u0a15\u0a30\u0a4b", + "pad.toolbar.import_export.title": "\u0a35\u0a71\u0a16-\u0a35\u0a71\u0a16 \u0a2b\u0a3e\u0a07\u0a32 \u0a2b\u0a3e\u0a30\u0a2e\u0a48\u0a1f \u0a24\u0a4b\u0a02/\u0a35\u0a3f\u0a71\u0a1a \u0a07\u0a70\u0a2a\u0a4b\u0a30\u0a1f/\u0a10\u0a15\u0a38\u0a2a\u0a4b\u0a30\u0a1f \u0a15\u0a30\u0a4b", + "pad.toolbar.timeslider.title": "\u0a38\u0a2e\u0a3e\u0a02-\u0a32\u0a15\u0a40\u0a30", + "pad.toolbar.savedRevision.title": "\u0a30\u0a40\u0a35\u0a3f\u0a1c\u0a3c\u0a28 \u0a38\u0a70\u0a2d\u0a3e\u0a32\u0a4b", + "pad.toolbar.settings.title": "\u0a38\u0a48\u0a1f\u0a3f\u0a70\u0a17", + "pad.toolbar.embed.title": "\u0a07\u0a39 \u0a2a\u0a48\u0a21 \u0a38\u0a3e\u0a02\u0a1d\u0a3e \u0a24\u0a47 \u0a07\u0a70\u0a2c\u0a48\u0a71\u0a21 \u0a15\u0a30\u0a4b", + "pad.toolbar.showusers.title": "\u0a07\u0a39 \u0a2a\u0a48\u0a21 \u0a09\u0a71\u0a24\u0a47 \u0a2f\u0a42\u0a1c\u0a3c\u0a30 \u0a35\u0a47\u0a16\u0a3e\u0a13", + "pad.colorpicker.save": "\u0a38\u0a70\u0a2d\u0a3e\u0a32\u0a4b", + "pad.colorpicker.cancel": "\u0a30\u0a71\u0a26 \u0a15\u0a30\u0a4b", + "pad.loading": "\u2026\u0a32\u0a4b\u0a21 \u0a15\u0a40\u0a24\u0a3e \u0a1c\u0a3e \u0a30\u0a3f\u0a39\u0a3e \u0a39\u0a48", + "pad.passwordRequired": "\u0a07\u0a39 \u0a2a\u0a48\u0a21 \u0a26\u0a40 \u0a35\u0a30\u0a24\u0a4b\u0a02 \u0a15\u0a30\u0a28 \u0a32\u0a08 \u0a24\u0a41\u0a39\u0a3e\u0a28\u0a42\u0a70 \u0a2a\u0a3e\u0a38\u0a35\u0a30\u0a21 \u0a1a\u0a3e\u0a39\u0a40\u0a26\u0a3e \u0a39\u0a48", + "pad.permissionDenied": "\u0a07\u0a39 \u0a2a\u0a48\u0a21 \u0a35\u0a30\u0a24\u0a28 \u0a32\u0a08 \u0a24\u0a41\u0a39\u0a3e\u0a28\u0a42\u0a70 \u0a05\u0a27\u0a3f\u0a15\u0a3e\u0a30 \u0a28\u0a39\u0a40\u0a02 \u0a39\u0a28", + "pad.wrongPassword": "\u0a24\u0a41\u0a39\u0a3e\u0a21\u0a3e \u0a2a\u0a3e\u0a38\u0a35\u0a30\u0a21 \u0a17\u0a32\u0a24\u0a40 \u0a38\u0a40", + "pad.settings.padSettings": "\u0a2a\u0a48\u0a21 \u0a38\u0a48\u0a1f\u0a3f\u0a70\u0a17", + "pad.settings.myView": "\u0a2e\u0a47\u0a30\u0a40 \u0a1d\u0a32\u0a15", + "pad.settings.stickychat": "\u0a39\u0a2e\u0a47\u0a38\u0a3c\u0a3e \u0a38\u0a15\u0a30\u0a40\u0a28 \u0a09\u0a71\u0a24\u0a47 \u0a17\u0a71\u0a32 \u0a15\u0a30\u0a4b", + "pad.settings.linenocheck": "\u0a32\u0a3e\u0a08\u0a28 \u0a28\u0a70\u0a2c\u0a30", + "pad.settings.rtlcheck": "\u0a38\u0a2e\u0a71\u0a17\u0a30\u0a40 \u0a38\u0a71\u0a1c\u0a47 \u0a24\u0a4b\u0a02 \u0a16\u0a71\u0a2c\u0a47 \u0a2a\u0a5c\u0a4d\u0a39\u0a28\u0a40 \u0a39\u0a48?", + "pad.settings.fontType": "\u0a2b\u0a4b\u0a02\u0a1f \u0a15\u0a3f\u0a38\u0a2e:", + "pad.settings.fontType.normal": "\u0a38\u0a27\u0a3e\u0a30\u0a28", + "pad.settings.fontType.monospaced": "\u0a2e\u0a4b\u0a28\u0a4b\u0a38\u0a2a\u0a47\u0a38", + "pad.settings.globalView": "\u0a17\u0a32\u0a4b\u0a2c\u0a32 \u0a1d\u0a32\u0a15", + "pad.settings.language": "\u0a2d\u0a3e\u0a38\u0a3c\u0a3e:", + "pad.importExport.import_export": "\u0a07\u0a70\u0a2a\u0a4b\u0a30\u0a1f/\u0a10\u0a15\u0a38\u0a2a\u0a4b\u0a30\u0a1f", + "pad.importExport.import": "\u0a15\u0a4b\u0a08 \u0a35\u0a40 \u0a1f\u0a48\u0a15\u0a38\u0a1f \u0a2b\u0a3e\u0a07\u0a32 \u0a1c\u0a3e\u0a02 \u0a26\u0a38\u0a24\u0a3e\u0a35\u0a47\u0a1c\u0a3c \u0a05\u0a71\u0a2a\u0a32\u0a4b\u0a21 \u0a15\u0a30\u0a4b", + "pad.importExport.importSuccessful": "\u0a38\u0a2b\u0a3c\u0a32!", + "pad.importExport.export": "\u0a2e\u0a4c\u0a1c\u0a42\u0a26\u0a3e \u0a2a\u0a48\u0a21 \u0a28\u0a42\u0a70 \u0a10\u0a15\u0a38\u0a2a\u0a4b\u0a30\u0a1f \u0a15\u0a30\u0a4b:", + "pad.importExport.exporthtml": "HTML", + "pad.importExport.exportplain": "\u0a38\u0a27\u0a3e\u0a30\u0a28 \u0a1f\u0a48\u0a15\u0a38\u0a1f", + "pad.importExport.exportword": "\u0a2e\u0a3e\u0a08\u0a15\u0a30\u0a4b\u0a38\u0a3e\u0a2b\u0a1f \u0a35\u0a30\u0a21", + "pad.importExport.exportpdf": "\u0a2a\u0a40\u0a21\u0a40\u0a10\u0a2b", + "pad.importExport.exportopen": "ODF (\u0a13\u0a2a\u0a28 \u0a21\u0a4c\u0a15\u0a42\u0a2e\u0a48\u0a02\u0a1f \u0a2b\u0a3e\u0a30\u0a2e\u0a48\u0a1f)", + "pad.importExport.exportdokuwiki": "DokuWiki", + "pad.modals.connected": "\u0a15\u0a41\u0a28\u0a48\u0a15\u0a1f \u0a39\u0a48\u0964", + "pad.modals.reconnecting": "..\u0a24\u0a41\u0a39\u0a3e\u0a21\u0a47 \u0a2a\u0a48\u0a21 \u0a28\u0a3e\u0a32 \u0a2e\u0a41\u0a5c-\u0a15\u0a41\u0a28\u0a48\u0a15\u0a1f \u0a15\u0a40\u0a24\u0a3e \u0a1c\u0a3e \u0a30\u0a3f\u0a39\u0a3e \u0a39\u0a48", + "pad.modals.forcereconnect": "\u0a27\u0a71\u0a15\u0a47 \u0a28\u0a3e\u0a32 \u0a2e\u0a41\u0a5c-\u0a15\u0a41\u0a28\u0a48\u0a15\u0a1f \u0a15\u0a30\u0a4b", + "pad.modals.userdup": "\u0a39\u0a4b\u0a30 \u0a35\u0a3f\u0a70\u0a21\u0a4b \u0a35\u0a3f\u0a71\u0a1a \u0a16\u0a41\u0a71\u0a32\u0a4d\u0a39\u0a3f\u0a06 \u0a39\u0a48", + "pad.modals.unauth": "\u0a2a\u0a30\u0a2e\u0a3e\u0a23\u0a3f\u0a24 \u0a28\u0a39\u0a40\u0a02 \u0a39\u0a48", + "pad.modals.looping": "\u0a15\u0a41\u0a28\u0a15\u0a48\u0a1f \u0a16\u0a24\u0a2e \u0a39\u0a4b\u0a07\u0a06\u0964", + "pad.modals.initsocketfail": "\u0a38\u0a30\u0a35\u0a30 \u0a2a\u0a39\u0a41\u0a70\u0a1a \u0a35\u0a3f\u0a71\u0a1a \u0a28\u0a39\u0a40\u0a02 \u0a39\u0a48\u0964", + "pad.modals.slowcommit": "\u0a15\u0a41\u0a28\u0a15\u0a48\u0a1f \u0a16\u0a24\u0a2e \u0a39\u0a4b\u0a07\u0a06\u0964", + "pad.modals.slowcommit.explanation": "\u0a38\u0a30\u0a35\u0a30 \u0a1c\u0a35\u0a3e\u0a2c \u0a28\u0a39\u0a40\u0a02 \u0a26\u0a47 \u0a30\u0a3f\u0a39\u0a3e \u0a39\u0a48\u0964", + "pad.modals.slowcommit.cause": "\u0a07\u0a39 \u0a28\u0a48\u0a71\u0a1f\u0a35\u0a30\u0a15 \u0a15\u0a41\u0a28\u0a48\u0a15\u0a38\u0a3c\u0a28 \u0a28\u0a3e\u0a32 \u0a38\u0a2e\u0a71\u0a38\u0a3f\u0a06 \u0a15\u0a30\u0a15\u0a47 \u0a39\u0a4b \u0a38\u0a15\u0a26\u0a3e \u0a39\u0a48\u0964", + "pad.modals.deleted": "\u0a39\u0a1f\u0a3e\u0a07\u0a06\u0964", + "pad.modals.deleted.explanation": "\u0a07\u0a39 \u0a2a\u0a48\u0a21 \u0a39\u0a1f\u0a3e\u0a07\u0a06 \u0a1c\u0a3e \u0a1a\u0a41\u0a71\u0a15\u0a3e \u0a39\u0a48\u0964", + "pad.modals.disconnected": "\u0a24\u0a41\u0a38\u0a40\u0a02 \u0a21\u0a3f\u0a38-\u0a15\u0a41\u0a28\u0a48\u0a15\u0a1f \u0a39\u0a4b \u0a1a\u0a41\u0a71\u0a15\u0a47 \u0a39\u0a4b\u0964", + "pad.modals.disconnected.explanation": "\u0a38\u0a30\u0a35\u0a30 \u0a28\u0a3e\u0a32 \u0a15\u0a41\u0a28\u0a48\u0a15\u0a38\u0a3c\u0a28 \u0a16\u0a24\u0a2e \u0a39\u0a4b\u0a07\u0a06 \u0a39\u0a48", + "pad.share": "\u0a07\u0a39 \u0a2a\u0a48\u0a21 \u0a38\u0a3e\u0a02\u0a1d\u0a3e \u0a15\u0a30\u0a4b", + "pad.share.readonly": "\u0a15\u0a47\u0a35\u0a32 \u0a2a\u0a5c\u0a4d\u0a39\u0a28 \u0a32\u0a08", + "pad.share.link": "\u0a32\u0a3f\u0a70\u0a15", + "pad.share.emebdcode": "\u0a07\u0a70\u0a2c\u0a48\u0a71\u0a21 URL", + "pad.chat": "\u0a17\u0a71\u0a32\u0a2c\u0a3e\u0a24", + "pad.chat.title": "\u0a07\u0a39 \u0a2a\u0a48\u0a21 \u0a32\u0a08 \u0a17\u0a71\u0a32\u0a2c\u0a3e\u0a24 \u0a16\u0a4b\u0a32\u0a4d\u0a39\u0a4b\u0964", + "pad.chat.loadmessages": "\u0a39\u0a4b\u0a30 \u0a38\u0a41\u0a28\u0a47\u0a39\u0a47 \u0a32\u0a4b\u0a21 \u0a15\u0a30\u0a4b", + "timeslider.pageTitle": "{{appTitle}} \u0a38\u0a2e\u0a3e\u0a02-\u0a32\u0a15\u0a40\u0a30", + "timeslider.toolbar.returnbutton": "\u0a2a\u0a48\u0a21 \u0a09\u0a71\u0a24\u0a47 \u0a35\u0a3e\u0a2a\u0a38", + "timeslider.toolbar.authors": "\u0a32\u0a47\u0a16\u0a15:", + "timeslider.toolbar.authorsList": "\u0a15\u0a4b\u0a08 \u0a32\u0a47\u0a16\u0a15 \u0a28\u0a39\u0a40\u0a02", + "timeslider.toolbar.exportlink.title": "\u0a10\u0a15\u0a38\u0a2a\u0a4b\u0a30\u0a1f", + "timeslider.exportCurrent": "\u0a2e\u0a4c\u0a1c\u0a42\u0a26\u0a3e \u0a35\u0a30\u0a1c\u0a28 \u0a07\u0a70\u0a1d \u0a10\u0a15\u0a38\u0a2a\u0a4b\u0a30\u0a1f \u0a15\u0a30\u0a4b:", + "timeslider.version": "\u0a35\u0a30\u0a1c\u0a28 {{version}}", + "timeslider.saved": "{{day}} {{month}} {{year}} \u0a28\u0a42\u0a70 \u0a38\u0a70\u0a2d\u0a3e\u0a32\u0a3f\u0a06", + "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", + "timeslider.month.january": "\u0a1c\u0a28\u0a35\u0a30\u0a40", + "timeslider.month.february": "\u0a2b\u0a3c\u0a30\u0a35\u0a30\u0a40", + "timeslider.month.march": "\u0a2e\u0a3e\u0a30\u0a1a", + "timeslider.month.april": "\u0a05\u0a2a\u0a30\u0a48\u0a32", + "timeslider.month.may": "\u0a2e\u0a08", + "timeslider.month.june": "\u0a1c\u0a42\u0a28", + "timeslider.month.july": "\u0a1c\u0a41\u0a32\u0a3e\u0a08", + "timeslider.month.august": "\u0a05\u0a17\u0a38\u0a24", + "timeslider.month.september": "\u0a38\u0a24\u0a70\u0a2c\u0a30", + "timeslider.month.october": "\u0a05\u0a15\u0a24\u0a42\u0a2c\u0a30", + "timeslider.month.november": "\u0a28\u0a35\u0a70\u0a2c\u0a30", + "timeslider.month.december": "\u0a26\u0a38\u0a70\u0a2c\u0a30", + "timeslider.unnamedauthor": "{{num}} \u0a2c\u0a47\u0a28\u0a3e\u0a2e \u0a32\u0a47\u0a16\u0a15", + "timeslider.unnamedauthors": "{{num}} \u0a2c\u0a47\u0a28\u0a3e\u0a2e \u0a32\u0a47\u0a16\u0a15", + "pad.savedrevs.marked": "\u0a07\u0a39 \u0a30\u0a40\u0a35\u0a3f\u0a1c\u0a3c\u0a28 \u0a28\u0a42\u0a70 \u0a39\u0a41\u0a23 \u0a38\u0a70\u0a2d\u0a3e\u0a32\u0a47 \u0a39\u0a4b\u0a0f \u0a30\u0a40\u0a35\u0a3f\u0a1c\u0a3c\u0a28 \u0a35\u0a1c\u0a4b\u0a02 \u0a2e\u0a70\u0a28\u0a3f\u0a06 \u0a17\u0a3f\u0a06 \u0a39\u0a48", + "pad.userlist.entername": "\u0a06\u0a2a\u0a23\u0a3e \u0a28\u0a3e\u0a02 \u0a26\u0a3f\u0a09", + "pad.userlist.unnamed": "\u0a2c\u0a47\u0a28\u0a3e\u0a2e", + "pad.userlist.guest": "\u0a2e\u0a39\u0a3f\u0a2e\u0a3e\u0a28", + "pad.userlist.deny": "\u0a2a\u0a3e\u0a2c\u0a70\u0a26\u0a40", + "pad.userlist.approve": "\u0a2e\u0a28\u0a1c\u0a3c\u0a42\u0a30", + "pad.editbar.clearcolors": "\u0a2a\u0a42\u0a30\u0a47 \u0a26\u0a38\u0a3e\u0a24\u0a35\u0a47\u0a1c\u0a3c \u0a09\u0a71\u0a24\u0a47 \u0a2a\u0a30\u0a2e\u0a3e\u0a23\u0a15\u0a3f\u0a24\u0a3e \u0a30\u0a70\u0a17 \u0a38\u0a3e\u0a2b\u0a3c \u0a15\u0a30\u0a28\u0a47 \u0a39\u0a28?", + "pad.impexp.importbutton": "\u0a39\u0a41\u0a23\u0a47 \u0a07\u0a70\u0a2a\u0a4b\u0a30\u0a1f \u0a15\u0a30\u0a4b", + "pad.impexp.importing": "...\u0a07\u0a70\u0a2a\u0a4b\u0a30\u0a1f \u0a15\u0a40\u0a24\u0a3e \u0a1c\u0a3e \u0a30\u0a3f\u0a39\u0a3e \u0a39\u0a48", + "pad.impexp.uploadFailed": "\u0a05\u0a71\u0a2a\u0a32\u0a4b\u0a21 \u0a32\u0a08 \u0a2b\u0a47\u0a32\u0a4d\u0a39 \u0a39\u0a48, \u0a2b\u0a47\u0a30 \u0a15\u0a4b\u0a38\u0a3c\u0a3f\u0a38\u0a3c \u0a15\u0a30\u0a4b \u0a1c\u0a40\u0964", + "pad.impexp.importfailed": "\u0a07\u0a70\u0a2a\u0a4b\u0a30\u0a1f \u0a2b\u0a47\u0a32\u0a4d\u0a39 \u0a39\u0a48", + "pad.impexp.copypaste": "\u0a15\u0a3e\u0a2a\u0a40 \u0a15\u0a30\u0a4b \u0a1a\u0a47\u0a2a\u0a4b \u0a1c\u0a40", + "@metadata": { + "authors": [ + "Aalam" + ] + } +} \ No newline at end of file diff --git a/src/locales/ps.json b/src/locales/ps.json index 07dd4375c..2de36396b 100644 --- a/src/locales/ps.json +++ b/src/locales/ps.json @@ -4,16 +4,23 @@ "Ahmed-Najib-Biabani-Ibrahimkhel" ] }, + "index.newPad": "\u0646\u0648\u06d0 \u0644\u064a\u06a9\u0686\u0647", + "index.createOpenPad": "\u064a\u0627 \u067e\u0647 \u0647\u0645\u062f\u06d0 \u0646\u0648\u0645 \u064a\u0648\u0647 \u0646\u0648\u06d0 \u0644\u064a\u06a9\u0686\u0647 \u062c\u0648\u0693\u0648\u0644/\u067e\u0631\u0627\u0646\u064a\u0633\u062a\u0644:", "pad.toolbar.bold.title": "\u0632\u063a\u0631\u062f (Ctrl-B)", "pad.toolbar.italic.title": "\u0631\u06d0\u0648\u0646\u062f (Ctrl-I)", "pad.toolbar.undo.title": "\u0646\u0627\u06a9\u0693\u0644 (Ctrl-Z)", "pad.toolbar.redo.title": "\u0628\u064a\u0627\u06a9\u0693\u0644 (Ctrl-Y)", + "pad.toolbar.clearAuthorship.title": "\u062f \u0644\u064a\u06a9\u0648\u0627\u0644\u06cd \u0631\u0646\u06ab\u0648\u0646\u0647 \u0633\u067e\u064a\u0646\u0648\u0644", + "pad.toolbar.savedRevision.title": "\u0645\u062e\u06a9\u062a\u0646\u0647 \u062e\u0648\u0646\u062f\u064a \u06a9\u0648\u0644", "pad.toolbar.settings.title": "\u0627\u0645\u0633\u062a\u0646\u06d0", "pad.colorpicker.save": "\u062e\u0648\u0646\u062f\u064a \u06a9\u0648\u0644", "pad.colorpicker.cancel": "\u0646\u0627\u06ab\u0627\u0631\u0644", "pad.loading": "\u0628\u0631\u0633\u06d0\u0631\u06d0\u062f\u0646\u06d0 \u06a9\u06d0 \u062f\u06cc...", + "pad.passwordRequired": "\u062f\u06d0 \u0644\u064a\u06a9\u0686\u06d0 \u062a\u0647 \u062f \u0644\u0627\u0633\u0631\u0633\u064a \u0644\u067e\u0627\u0631\u0647 \u062a\u0627\u0633\u06d0 \u064a\u0648 \u067e\u067c\u0646\u0648\u0645 \u062a\u0647 \u0627\u0693\u062a\u064a\u0627 \u0644\u0631\u06cd", "pad.wrongPassword": "\u067e\u067c\u0646\u0648\u0645 \u0645\u0648 \u0633\u0645 \u0646\u0647 \u0648", + "pad.settings.padSettings": "\u062f \u0644\u064a\u06a9\u0686\u06d0 \u0627\u0645\u0633\u062a\u0646\u06d0", "pad.settings.myView": "\u0632\u0645\u0627 \u06a9\u062a\u0646\u0647", + "pad.settings.colorcheck": "\u062f \u0644\u064a\u06a9\u0648\u0627\u0644\u06cd \u0631\u0646\u06ab\u0648\u0646\u0647", "pad.settings.fontType": "\u0644\u064a\u06a9\u0628\u06bc\u06d0 \u0689\u0648\u0644:", "pad.settings.fontType.normal": "\u0646\u0648\u0631\u0645\u0627\u0644", "pad.settings.fontType.monospaced": "\u0645\u0648\u0646\u0648\u0633\u067e\u06d0\u0633", @@ -33,6 +40,10 @@ "pad.chat.loadmessages": "\u0646\u0648\u0631 \u067e\u064a\u063a\u0627\u0645\u0648\u0646\u0647 \u0628\u0631\u0633\u06d0\u0631\u0648\u0644", "timeslider.toolbar.authors": "\u0644\u064a\u06a9\u0648\u0627\u0644:", "timeslider.toolbar.authorsList": "\u0628\u06d0 \u0644\u064a\u06a9\u0648\u0627\u0644\u0647", + "timeslider.toolbar.exportlink.title": "\u0635\u0627\u062f\u0631\u0648\u0644", + "timeslider.version": "\u0628\u06bc\u0647 {{version}}", + "timeslider.saved": "\u062e\u0648\u0646\u062f\u064a \u0634\u0648 {{month}} {{day}}, {{year}}", + "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "\u062c\u0646\u0648\u0631\u064a", "timeslider.month.february": "\u0641\u0628\u0631\u0648\u0631\u064a", "timeslider.month.march": "\u0645\u0627\u0631\u0686", @@ -45,6 +56,9 @@ "timeslider.month.october": "\u0627\u06a9\u062a\u0648\u0628\u0631", "timeslider.month.november": "\u0646\u0648\u0645\u0628\u0631", "timeslider.month.december": "\u0689\u064a\u0633\u0645\u0628\u0631", + "timeslider.unnamedauthor": "{{num}} \u0628\u06d0\u0646\u0648\u0645 \u0644\u064a\u06a9\u0648\u0627\u0644", + "timeslider.unnamedauthors": "{{num}} \u0628\u06d0\u0646\u0648\u0645\u0647 \u0644\u064a\u06a9\u0648\u0627\u0644\u0627\u0646", + "pad.savedrevs.marked": "\u0627\u0648\u0633 \u062f\u0627 \u0645\u062e\u06a9\u062a\u0646\u0647 \u062f \u064a\u0648\u06d0 \u062e\u0648\u0646\u062f\u064a \u0634\u0648\u06d0 \u0645\u062e\u06a9\u062a\u0646\u06d0 \u067e\u0647 \u062a\u0648\u06ab\u0647 \u067e\u0647 \u0646\u069a\u0647 \u0634\u0648\u0647", "pad.userlist.entername": "\u0646\u0648\u0645 \u0645\u0648 \u0648\u0631\u06a9\u0693\u06cd", "pad.userlist.unnamed": "\u0628\u06d0 \u0646\u0648\u0645\u0647", "pad.userlist.guest": "\u0645\u06d0\u0644\u0645\u0647", From e7d8f124ad303c5d2ea9284b2d92f6246eab3d89 Mon Sep 17 00:00:00 2001 From: Brian Emerick Date: Wed, 24 Apr 2013 15:02:58 -0700 Subject: [PATCH 14/36] Issue #1625: Fix to client-side-induced changeset spamming. THE BUG - HIGH LEVEL: - When client A sends out an attribute change, client B applies that change to itself but also thinks that it made the change itself, which is incorrect. This means that when client B next makes a change, he will send out that he made the attrib change that A actually made. - Ex: Have 2 clients on the same pad. Have A apply bold on some text. Next, have B type a character. B will broadcast that it both added a character AND applied bold, when in reality it did NOT apply bold at all, that change was done by the other client and this client incorrectly adopted it as its own. - This root bug behavior results in clients continuing to think that they each made the other client's change, thus resulting in an infinite loop of changeset spamming that bogs down clients and harms server stability. THE BUG - IN DEPTH: - The root issue is in the way that Changesets are combined in Changeset.follow(). Specifically, in the case of a changeset with ONLY new attrib changes (no text changes) being merged with an identity changeset (has no ops). - In this case, Changeset.follow() copies the ops of the new CS and fully overrides the other CS. - applyChangesToBase invokes Changeset.follow to determine the final client document CS state after applying the new CS. If the final client document CS state is NOT the identity CS, then the client broadcasts that it made a change. - When client A changes just attribs, client B's applyChangesToBase calls Changeset.follow() and passes client A's changeset (attrib change) and Client B's current changeset state (identity). - As per the noted bug, Changeset.follow() returns client A's changeset as a result, causing client B to adopt client A's changeset as its own document state. Thus, client A ends up thinking it has made client B's changes. THE FIX: - Changeset.follow() should NOT copy the ops of the new CS passed in if those changes are only attrib changes. This allows applyChangesToBase to properly set the client's CS back to the identity after applying an external attrib change, instead of incorrectly adopting the external client's changes. --- src/static/js/Changeset.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/static/js/Changeset.js b/src/static/js/Changeset.js index b16042126..f92703851 100644 --- a/src/static/js/Changeset.js +++ b/src/static/js/Changeset.js @@ -2105,7 +2105,9 @@ exports.follow = function (cs1, cs2, reverseInsertOrder, pool) { exports.copyOp(op2, opOut); op2.opcode = ''; } else if (!op2.opcode) { - exports.copyOp(op1, opOut); + // @NOTE: Critical bugfix for EPL issue #1625. We do not copy op1 here + // in order to prevent attributes from leaking into result changesets. + // exports.copyOp(op1, opOut); op1.opcode = ''; } else { // both keeps From 2c855de6f6986b963a36b1370f421c43ce00f8e2 Mon Sep 17 00:00:00 2001 From: Marcel Klehr Date: Sat, 27 Apr 2013 23:04:42 +0200 Subject: [PATCH 15/36] Add a server-side changeset queue per pad fixes #1573 --- src/node/handler/PadMessageHandler.js | 20 +++++++++++++++----- src/package.json | 3 ++- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js index 85efb0083..b6d22c14d 100644 --- a/src/node/handler/PadMessageHandler.js +++ b/src/node/handler/PadMessageHandler.js @@ -35,6 +35,7 @@ var messageLogger = log4js.getLogger("message"); var accessLogger = log4js.getLogger("access"); var _ = require('underscore'); var hooks = require("ep_etherpad-lite/static/js/pluginfw/hooks.js"); +var channels = require("channels"); /** * A associative array that saves informations about a session @@ -48,6 +49,11 @@ var hooks = require("ep_etherpad-lite/static/js/pluginfw/hooks.js"); */ var sessioninfos = {}; +/** + * A changeset queue per pad that is processed by handleUserChanges() + */ +var padChannels = new channels.channels(handleUserChanges); + /** * Saves the Socket class we need to send and recieve data from the client */ @@ -176,7 +182,7 @@ exports.handleMessage = function(client, message) if (sessioninfos[client.id].readonly) { messageLogger.warn("Dropped message, COLLABROOM for readonly pad"); } else if (message.data.type == "USER_CHANGES") { - handleUserChanges(client, message); + padChannels.emit(message.padId, {client: client, message: message});// add to pad queue } else if (message.data.type == "USERINFO_UPDATE") { handleUserInfoUpdate(client, message); } else if (message.data.type == "CHAT_MESSAGE") { @@ -522,23 +528,26 @@ function handleUserInfoUpdate(client, message) * @param client the client that send this message * @param message the message from the client */ -function handleUserChanges(client, message) +function handleUserChanges(data, cb) { + var client = data.client + , message = data.message + // Make sure all required fields are present if(message.data.baseRev == null) { messageLogger.warn("Dropped message, USER_CHANGES Message has no baseRev!"); - return; + return cb(); } if(message.data.apool == null) { messageLogger.warn("Dropped message, USER_CHANGES Message has no apool!"); - return; + return cb(); } if(message.data.changeset == null) { messageLogger.warn("Dropped message, USER_CHANGES Message has no changeset!"); - return; + return cb(); } //get all Vars we need @@ -679,6 +688,7 @@ function handleUserChanges(client, message) } ], function(err) { + cb(); ERR(err); }); } diff --git a/src/package.json b/src/package.json index e7c56549f..900308def 100644 --- a/src/package.json +++ b/src/package.json @@ -37,7 +37,8 @@ "underscore" : "1.3.1", "unorm" : "1.0.0", "languages4translatewiki" : "0.1.3", - "swagger-node-express" : "1.2.3" + "swagger-node-express" : "1.2.3", + "channels" : "0.0.x" }, "bin": { "etherpad-lite": "./node/server.js" }, "devDependencies": { From 702a30016460ba3ab72eb08d3dbc9ea7cbc45b38 Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Sun, 28 Apr 2013 17:48:19 +0000 Subject: [PATCH 16/36] Localisation updates from http://translatewiki.net. --- src/locales/lv.json | 54 +++++++++++++++++++++++++++++++++++++++++++++ src/locales/mk.json | 2 +- src/locales/ml.json | 2 +- src/locales/pa.json | 12 +++++----- 4 files changed, 62 insertions(+), 8 deletions(-) create mode 100644 src/locales/lv.json diff --git a/src/locales/lv.json b/src/locales/lv.json new file mode 100644 index 000000000..1bfc19801 --- /dev/null +++ b/src/locales/lv.json @@ -0,0 +1,54 @@ +{ + "pad.toolbar.bold.title": "Treknrakst\u0101 (CTRL + B)", + "pad.toolbar.italic.title": "Sl\u012bpraksta (Ctrl-es)", + "pad.toolbar.underline.title": "Pasv\u012btrojuma (CTRL + U)", + "pad.toolbar.strikethrough.title": "P\u0101rsv\u012btrojums", + "pad.toolbar.ol.title": "Sak\u0101rtots saraksts", + "pad.toolbar.ul.title": "Nesak\u0101rtots saraksts", + "pad.toolbar.indent.title": "Atk\u0101pe", + "pad.toolbar.unindent.title": "Izk\u0101pe", + "pad.toolbar.undo.title": "Atsaukt (CTRL + Z)", + "pad.toolbar.redo.title": "Atcelt atsauk\u0161anu (CTRL + Y)", + "pad.toolbar.clearAuthorship.title": "Not\u012brit autoru kr\u0101sas", + "pad.toolbar.import_export.title": "Import\u0113\u0161anas/eksport\u0113\u0161anas no un uz citu failu form\u0101tiem", + "pad.toolbar.settings.title": "Iestat\u012bjumi", + "pad.colorpicker.save": "Saglab\u0101t", + "pad.colorpicker.cancel": "Atcelt", + "pad.loading": "Iel\u0101d\u0113\u2026", + "pad.passwordRequired": "Ir nepiecie\u0161ama parole, lai piek\u013c\u016btu \u0161im pad", + "pad.permissionDenied": "Atvaino, bet tev nav pieejas \u0161im pad.", + "pad.wrongPassword": "J\u016bsu parole bija nepareiza", + "pad.settings.linenocheck": "Rindi\u0146u numurus", + "pad.settings.rtlcheck": "Las\u012bt saturu no lab\u0101s puses uz kreiso?", + "pad.settings.fontType": "Fonta tips:", + "pad.settings.fontType.normal": "Norm\u0101ls", + "pad.settings.globalView": "Glob\u0101lu skat\u012bjumu", + "pad.settings.language": "Valoda:", + "pad.importExport.importSuccessful": "Veiksm\u012bgi!", + "pad.importExport.exporthtml": "HTML", + "pad.importExport.exportplain": "Vienk\u0101r\u0161a teksta", + "pad.importExport.exportword": "Programma Microsoft Word", + "pad.importExport.exportpdf": "PDF", + "pad.importExport.exportopen": "ODF (Open dokumenta form\u0101ts)", + "pad.importExport.exportdokuwiki": "DokuWiki", + "pad.modals.userdup": "Atv\u0113rts cit\u0101 log\u0101", + "pad.modals.unauth": "Nav at\u013cauts", + "pad.modals.looping": "Atvienots.", + "pad.modals.looping.explanation": "Past\u0101v sakaru probl\u0113mas ar sinhroniz\u0101cijas servera.", + "pad.modals.initsocketfail": "Serveris nav sasniedzams.", + "pad.modals.initsocketfail.explanation": "Nevar\u0113ja izveidot savienojumu ar sinhroniz\u0101cijas serveri.", + "pad.modals.slowcommit": "Atvienots.", + "pad.modals.slowcommit.explanation": "Serveris nerea\u0123\u0113.", + "pad.modals.deleted": "Dz\u0113sts", + "pad.modals.disconnected": "J\u016bs esat atvienots.", + "pad.modals.disconnected.explanation": "Tika zaud\u0113ts savienojums ar serveri", + "pad.modals.disconnected.cause": "Iesp\u0113jams, ka serveris nav pieejams. L\u016bgums pazi\u0146ot mums, ja tas turpina notikt.", + "pad.share": "Koplietot \u0161o pad", + "pad.share.readonly": "Tikai las\u0101ms", + "pad.share.link": "Saite", + "@metadata": { + "authors": [ + "Admresdeserv." + ] + } +} \ No newline at end of file diff --git a/src/locales/mk.json b/src/locales/mk.json index c95e69402..b0f9b848a 100644 --- a/src/locales/mk.json +++ b/src/locales/mk.json @@ -22,7 +22,7 @@ "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\u0458 \u0440\u0435\u0432\u0438\u0437\u0438\u0458\u0430", "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": "\u0421\u043f\u043e\u0434\u0435\u043b\u0435\u0442\u0435 \u0438 \u0432\u043c\u0435\u0442\u043d\u0435\u0442\u0435 \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.colorpicker.save": "\u0417\u0430\u0447\u0443\u0432\u0430\u0458", "pad.colorpicker.cancel": "\u041e\u0442\u043a\u0430\u0436\u0438", diff --git a/src/locales/ml.json b/src/locales/ml.json index be71c23be..5902ea37c 100644 --- a/src/locales/ml.json +++ b/src/locales/ml.json @@ -23,7 +23,7 @@ "pad.toolbar.timeslider.title": "\u0d38\u0d2e\u0d2f\u0d30\u0d47\u0d16", "pad.toolbar.savedRevision.title": "\u0d28\u0d3e\u0d7e\u0d2a\u0d4d\u0d2a\u0d24\u0d3f\u0d2a\u0d4d\u0d2a\u0d4d \u0d38\u0d47\u0d35\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15", "pad.toolbar.settings.title": "\u0d38\u0d1c\u0d4d\u0d1c\u0d40\u0d15\u0d30\u0d23\u0d19\u0d4d\u0d19\u0d7e", - "pad.toolbar.embed.title": "\u0d08 \u0d2a\u0d3e\u0d21\u0d4d \u0d0e\u0d02\u0d2c\u0d46\u0d21\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15", + "pad.toolbar.embed.title": "\u0d08 \u0d2a\u0d3e\u0d21\u0d4d \u0d2a\u0d19\u0d4d\u0d15\u0d4d \u0d35\u0d46\u0d2f\u0d4d\u0d15\u0d4d\u0d15\u0d41\u0d15, \u0d0e\u0d02\u0d2c\u0d46\u0d21\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15", "pad.toolbar.showusers.title": "\u0d08 \u0d2a\u0d3e\u0d21\u0d3f\u0d32\u0d41\u0d33\u0d4d\u0d33 \u0d09\u0d2a\u0d2f\u0d4b\u0d15\u0d4d\u0d24\u0d3e\u0d15\u0d4d\u0d15\u0d33\u0d46 \u0d2a\u0d4d\u0d30\u0d26\u0d7c\u0d36\u0d3f\u0d2a\u0d4d\u0d2a\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15", "pad.colorpicker.save": "\u0d38\u0d47\u0d35\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15", "pad.colorpicker.cancel": "\u0d31\u0d26\u0d4d\u0d26\u0d3e\u0d15\u0d4d\u0d15\u0d41\u0d15", diff --git a/src/locales/pa.json b/src/locales/pa.json index 65c81fb7e..03f2b1adf 100644 --- a/src/locales/pa.json +++ b/src/locales/pa.json @@ -1,4 +1,9 @@ { + "@metadata": { + "authors": [ + "Aalam" + ] + }, "index.newPad": "\u0a28\u0a35\u0a3e\u0a02 \u0a2a\u0a48\u0a21", "index.createOpenPad": "\u0a1c\u0a3e\u0a02 \u0a28\u0a3e\u0a02 \u0a28\u0a3e\u0a32 \u0a28\u0a35\u0a3e\u0a02 \u0a2a\u0a48\u0a21 \u0a2c\u0a23\u0a3e\u0a13/\u0a16\u0a4b\u0a32\u0a4d\u0a39\u0a4b:", "pad.toolbar.bold.title": "\u0a17\u0a42\u0a5c\u0a4d\u0a39\u0a3e (Ctrl-B)", @@ -98,10 +103,5 @@ "pad.impexp.importing": "...\u0a07\u0a70\u0a2a\u0a4b\u0a30\u0a1f \u0a15\u0a40\u0a24\u0a3e \u0a1c\u0a3e \u0a30\u0a3f\u0a39\u0a3e \u0a39\u0a48", "pad.impexp.uploadFailed": "\u0a05\u0a71\u0a2a\u0a32\u0a4b\u0a21 \u0a32\u0a08 \u0a2b\u0a47\u0a32\u0a4d\u0a39 \u0a39\u0a48, \u0a2b\u0a47\u0a30 \u0a15\u0a4b\u0a38\u0a3c\u0a3f\u0a38\u0a3c \u0a15\u0a30\u0a4b \u0a1c\u0a40\u0964", "pad.impexp.importfailed": "\u0a07\u0a70\u0a2a\u0a4b\u0a30\u0a1f \u0a2b\u0a47\u0a32\u0a4d\u0a39 \u0a39\u0a48", - "pad.impexp.copypaste": "\u0a15\u0a3e\u0a2a\u0a40 \u0a15\u0a30\u0a4b \u0a1a\u0a47\u0a2a\u0a4b \u0a1c\u0a40", - "@metadata": { - "authors": [ - "Aalam" - ] - } + "pad.impexp.copypaste": "\u0a15\u0a3e\u0a2a\u0a40 \u0a15\u0a30\u0a4b \u0a1a\u0a47\u0a2a\u0a4b \u0a1c\u0a40" } \ No newline at end of file From 97bbff05d41e510c8dc1b29d42400ac4bface3ef Mon Sep 17 00:00:00 2001 From: Peter 'Pita' Martischka Date: Sat, 4 May 2013 13:14:39 +0100 Subject: [PATCH 17/36] Let travis use sauce labs key of the etherpad user --- .travis.yml | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9060d94f7..1c40a4eca 100644 --- a/.travis.yml +++ b/.travis.yml @@ -10,14 +10,11 @@ script: - "tests/frontend/travis/runner.sh" env: global: - - secure: "OxZ2s724S96xu02746LUN+4lBckAe1BOICJjfA4jnFPNpiNU6XoMH52f+LgG\nZzAwu6xMTv+NsaLGp6Avm3cx4GZ+jIiHe4NB9XOgYPa0r0TBIi3ueWYPDyVv\nCniS/4qX68DoFNV4lh7zMBXn0IIPxT4Wppm3desBpjWDP/SdoRs=" + - secure: "gVR70BdAh093qBS5P5+V5NzmCYnLFFeIZn3XdgTpgpGRm7UE8GP53TEobtPf\neqpEpbWRTsEbdf+QPisVWrBZcNPFU4I3nucIqdyVobIcQD0TbBQYudm0yLQd\n3Ocqck0BIx9Ni9hBklJupmKt89LDQxNvkEb+uJJqlQwo2RZd36U=" - SAUCE_USER=etherpad jdk: - oraclejdk6 notifications: - email: - - petermartischka@googlemail.com - - contact@etherpad.org irc: channels: - "irc.freenode.org#etherpad-lite-dev" From 923c01745b3bf233000f4c22f382aab345c87c7d Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Thu, 9 May 2013 13:39:04 +0000 Subject: [PATCH 18/36] Localisation updates from http://translatewiki.net. --- src/locales/ca.json | 2 +- src/locales/fr.json | 18 +++---- src/locales/lv.json | 12 ++--- src/locales/os.json | 2 +- src/locales/pt-br.json | 3 +- src/locales/pt.json | 20 ++++++-- src/locales/vi.json | 106 +++++++++++++++++++++++++++++++++++++++++ 7 files changed, 143 insertions(+), 20 deletions(-) create mode 100644 src/locales/vi.json diff --git a/src/locales/ca.json b/src/locales/ca.json index 17a022087..6771730fe 100644 --- a/src/locales/ca.json +++ b/src/locales/ca.json @@ -23,7 +23,7 @@ "pad.toolbar.timeslider.title": "L\u00ednia temporal", "pad.toolbar.savedRevision.title": "Desa la revisi\u00f3", "pad.toolbar.settings.title": "Configuraci\u00f3", - "pad.toolbar.embed.title": "Incrusta aquest pad", + "pad.toolbar.embed.title": "Comparteix i incrusta aquest pad", "pad.toolbar.showusers.title": "Mostra els usuaris d\u2019aquest pad", "pad.colorpicker.save": "Desa", "pad.colorpicker.cancel": "Cancel\u00b7la", diff --git a/src/locales/fr.json b/src/locales/fr.json index 703f1da2b..228f5884c 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -9,9 +9,11 @@ "5": "Jean-Fr\u00e9d\u00e9ric", "6": "Leviathan", "7": "McDutchie", - "8": "Od1n", - "9": "Peter17", - "11": "Tux-tn" + "8": "Metroitendo", + "9": "Od1n", + "10": "Peter17", + "11": "Quenenni", + "13": "Tux-tn" } }, "index.newPad": "Nouveau Pad", @@ -44,8 +46,8 @@ "pad.settings.stickychat": "Toujours afficher le chat", "pad.settings.colorcheck": "Couleurs d\u2019identification", "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.rtlcheck": "Lire le contenu de droite \u00e0 gauche ?", + "pad.settings.fontType": "Police :", "pad.settings.fontType.normal": "Normal", "pad.settings.fontType.monospaced": "Monospace", "pad.settings.globalView": "Vue d\u2019ensemble", @@ -91,14 +93,14 @@ "pad.chat.title": "Ouvrir le chat associ\u00e9 \u00e0 ce pad.", "pad.chat.loadmessages": "Charger davantage de messages", "timeslider.pageTitle": "Historique dynamique de {{appTitle}}", - "timeslider.toolbar.returnbutton": "Retour \u00e0 ce Pad.", + "timeslider.toolbar.returnbutton": "Retour au Pad.", "timeslider.toolbar.authors": "Auteurs :", "timeslider.toolbar.authorsList": "Aucun auteur", "timeslider.toolbar.exportlink.title": "Exporter", "timeslider.exportCurrent": "Exporter la version actuelle en\u00a0:", "timeslider.version": "Version {{version}}", "timeslider.saved": "Enregistr\u00e9 le {{day}} {{month}} {{year}}", - "timeslider.dateformat": "{{day}} {{month}} {{year}} {{hours}}:{{minutes}}:{{secondes}}", + "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{secondes}}", "timeslider.month.january": "Janvier", "timeslider.month.february": "F\u00e9vrier", "timeslider.month.march": "Mars", @@ -115,7 +117,7 @@ "timeslider.unnamedauthors": "{{num}} auteurs anonymes", "pad.savedrevs.marked": "Cette r\u00e9vision est maintenant marqu\u00e9e comme r\u00e9vision enregistr\u00e9e", "pad.userlist.entername": "Entrez votre nom", - "pad.userlist.unnamed": "sans nom", + "pad.userlist.unnamed": "anonyme", "pad.userlist.guest": "Invit\u00e9", "pad.userlist.deny": "Refuser", "pad.userlist.approve": "Approuver", diff --git a/src/locales/lv.json b/src/locales/lv.json index 1bfc19801..32d178d8f 100644 --- a/src/locales/lv.json +++ b/src/locales/lv.json @@ -1,4 +1,9 @@ { + "@metadata": { + "authors": [ + "Admresdeserv." + ] + }, "pad.toolbar.bold.title": "Treknrakst\u0101 (CTRL + B)", "pad.toolbar.italic.title": "Sl\u012bpraksta (Ctrl-es)", "pad.toolbar.underline.title": "Pasv\u012btrojuma (CTRL + U)", @@ -45,10 +50,5 @@ "pad.modals.disconnected.cause": "Iesp\u0113jams, ka serveris nav pieejams. L\u016bgums pazi\u0146ot mums, ja tas turpina notikt.", "pad.share": "Koplietot \u0161o pad", "pad.share.readonly": "Tikai las\u0101ms", - "pad.share.link": "Saite", - "@metadata": { - "authors": [ - "Admresdeserv." - ] - } + "pad.share.link": "Saite" } \ No newline at end of file diff --git a/src/locales/os.json b/src/locales/os.json index 3f6d0d24a..209f7f558 100644 --- a/src/locales/os.json +++ b/src/locales/os.json @@ -21,7 +21,7 @@ "pad.toolbar.timeslider.title": "\u0420\u04d5\u0441\u0442\u04d5\u0434\u0436\u044b \u0445\u0430\u0445\u0445", "pad.toolbar.savedRevision.title": "\u0424\u04d5\u043b\u0442\u04d5\u0440 \u0431\u0430\u0432\u04d5\u0440\u044b\u043d\u04d5\u043d", "pad.toolbar.settings.title": "\u0423\u0430\u0433\u04d5\u0432\u04d5\u0440\u0434\u0442\u04d5", - "pad.toolbar.embed.title": "\u0410\u0446\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0431\u0430\u0444\u0442\u0430\u0443\u044b\u043d", + "pad.toolbar.embed.title": "\u0410\u0446\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0431\u0430\u0444\u0442\u0430\u0443 \u00e6\u043c\u00e6 \u0439\u00e6 \u0442\u044b\u0445\u0445\u00e6\u0439 \u0430\u0445\u044a\u00e6\u0440 \u043a\u00e6\u043d", "pad.toolbar.showusers.title": "\u0410\u0446\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u0430\u0440\u0445\u0430\u0439\u0434\u0436\u044b\u0442\u044b \u0440\u0430\u0432\u0434\u0438\u0441\u044b\u043d", "pad.colorpicker.save": "\u041d\u044b\u0432\u00e6\u0440\u044b\u043d", "pad.colorpicker.cancel": "\u041d\u044b\u0443\u0443\u0430\u0434\u0437\u044b\u043d", diff --git a/src/locales/pt-br.json b/src/locales/pt-br.json index 6ea65f476..1e67c6ef9 100644 --- a/src/locales/pt-br.json +++ b/src/locales/pt-br.json @@ -2,6 +2,7 @@ "@metadata": { "authors": [ "Gusta", + "Luckas", "Tuliouel" ] }, @@ -60,7 +61,7 @@ "pad.modals.userdup.advice": "Reconectar para usar esta janela.", "pad.modals.unauth": "N\u00e3o autorizado", "pad.modals.unauth.explanation": "Suas permiss\u00f5es foram mudadas enquanto visualizava esta p\u00e1gina. Tente reconectar.", - "pad.modals.looping": "Reconectado.", + "pad.modals.looping": "Desconectado.", "pad.modals.looping.explanation": "H\u00e1 problemas de comunica\u00e7\u00e3o com o servidor de sincroniza\u00e7\u00e3o.", "pad.modals.looping.cause": "Talvez voc\u00ea tenha conectado por um firewall ou proxy incompat\u00edvel.", "pad.modals.initsocketfail": "Servidor \u00e9 inalcan\u00e7\u00e1vel.", diff --git a/src/locales/pt.json b/src/locales/pt.json index bb6724624..9aa87d80e 100644 --- a/src/locales/pt.json +++ b/src/locales/pt.json @@ -1,7 +1,8 @@ { "@metadata": { "authors": { - "1": "Waldir" + "0": "Luckas", + "2": "Waldir" } }, "index.newPad": "Novo Pad", @@ -19,7 +20,7 @@ "pad.toolbar.clearAuthorship.title": "Limpar cores de autoria", "pad.toolbar.import_export.title": "Importar/exportar de/para diferentes formatos de ficheiro", "pad.toolbar.timeslider.title": "Linha de tempo", - "pad.toolbar.savedRevision.title": "Vers\u00f5es gravadas", + "pad.toolbar.savedRevision.title": "Salvar revis\u00e3o", "pad.toolbar.settings.title": "Configura\u00e7\u00f5es", "pad.toolbar.embed.title": "Incorporar este Pad", "pad.toolbar.showusers.title": "Mostrar os utilizadores neste Pad", @@ -47,6 +48,12 @@ "pad.modals.connected": "Ligado.", "pad.modals.reconnecting": "Reconectando-se ao seu bloco\u2026", "pad.modals.forcereconnect": "For\u00e7ar reconex\u00e3o", + "pad.modals.unauth": "N\u00e3o autorizado", + "pad.modals.looping": "Desconectado.", + "pad.modals.slowcommit": "Desconectado.", + "pad.modals.slowcommit.explanation": "O servidor n\u00e3o est\u00e1 respondendo.", + "timeslider.toolbar.authors": "Autores:", + "timeslider.toolbar.exportlink.title": "Exportar", "timeslider.month.january": "Janeiro", "timeslider.month.february": "Fevereiro", "timeslider.month.march": "Mar\u00e7o", @@ -58,5 +65,12 @@ "timeslider.month.september": "Setembro", "timeslider.month.october": "Outubro", "timeslider.month.november": "Novembro", - "timeslider.month.december": "Dezembro" + "timeslider.month.december": "Dezembro", + "pad.userlist.entername": "Insira o seu nome", + "pad.userlist.unnamed": "sem nome", + "pad.userlist.guest": "Convidado", + "pad.userlist.deny": "Negar", + "pad.userlist.approve": "Aprovar", + "pad.impexp.importbutton": "Importar agora", + "pad.impexp.importing": "Importando..." } \ No newline at end of file diff --git a/src/locales/vi.json b/src/locales/vi.json new file mode 100644 index 000000000..ae69e355a --- /dev/null +++ b/src/locales/vi.json @@ -0,0 +1,106 @@ +{ + "index.newPad": "T\u1ea1o m\u1ed9t Pad m\u1edbi", + "index.createOpenPad": "hay t\u1ea1o/m\u1edf m\u1ed9t Pad v\u1edbi t\u00ean:", + "pad.toolbar.bold.title": "In \u0111\u1eadm (Ctrl-B)", + "pad.toolbar.italic.title": "In nghi\u00eang (Ctrl-I)", + "pad.toolbar.underline.title": "G\u1ea1ch ch\u00e2n (Ctrl-U)", + "pad.toolbar.strikethrough.title": "G\u1ea1ch b\u1ecf", + "pad.toolbar.indent.title": "T\u0103ng l\u1ec1", + "pad.toolbar.undo.title": "Ho\u00e0n t\u00e1c (Ctrl-Z)", + "pad.toolbar.import_export.title": "Xu\u1ea5t/Nh\u1eadp t\u1eeb/\u0111\u1ebfn c\u00e1c \u0111\u1ecbnh d\u1ea1ng file kh\u00e1c nhau", + "pad.toolbar.savedRevision.title": "L\u01b0u Phi\u00ean b\u1ea3n", + "pad.toolbar.settings.title": "Thi\u1ebft l\u1eadp", + "pad.toolbar.embed.title": "Chia s\u1ebb v\u00e0 Nh\u00fang pad n\u00e0y", + "pad.toolbar.showusers.title": "Hi\u1ec7n c\u00e1c ng\u01b0\u1eddi d\u00f9ng tr\u00ean pad n\u00e0y", + "pad.colorpicker.save": "L\u01b0u", + "pad.colorpicker.cancel": "H\u1ee7y b\u1ecf", + "pad.loading": "\u0110ang t\u1ea3i\u2026", + "pad.passwordRequired": "B\u1ea1n c\u1ea7n m\u1eadt kh\u1ea9u \u0111\u1ec3 truy c\u1eadp pad n\u00e0y", + "pad.permissionDenied": "B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp pad n\u00e0y.", + "pad.wrongPassword": "B\u1ea1n \u0111\u00e3 nh\u1eadp sai m\u1eadt kh\u1ea9u", + "pad.settings.padSettings": "T\u00f9y ch\u1ecdn Pad", + "pad.settings.rtlcheck": "\u0110\u1ecdc n\u1ed9i dung t\u1eeb ph\u1ea3i sang tr\u00e1i?", + "pad.settings.fontType": "Ki\u1ec3u ph\u00f4ng ch\u1eef:", + "pad.settings.fontType.normal": "Th\u01b0\u1eddng", + "pad.settings.language": "Ng\u00f4n ng\u1eef:", + "pad.importExport.import_export": "Xu\u1ea5t/Nh\u1eadp", + "pad.importExport.import": "T\u1ea3i l\u00ean b\u1ea5t k\u1ef3 t\u1eadp tin v\u0103n b\u1ea3n ho\u1eb7c t\u00e0i li\u1ec7u", + "pad.importExport.importSuccessful": "Th\u00e0nh c\u00f4ng!", + "pad.importExport.export": "Xu\u1ea5t pad hi\u1ec7n t\u1ea1i ra \u0111\u1ecbnh d\u1ea1ng:", + "pad.importExport.exporthtml": "HTML", + "pad.importExport.exportplain": "V\u0103n b\u1ea3n thu\u1ea7n t\u00fay", + "pad.importExport.exportword": "Microsoft Word", + "pad.importExport.exportpdf": "PDF", + "pad.importExport.exportopen": "ODF", + "pad.importExport.exportdokuwiki": "DokuWiki", + "pad.importExport.abiword.innerHTML": "B\u1ea1n ch\u1ec9 c\u00f3 th\u1ec3 nh\u1eadp v\u00e0o t\u1eeb v\u0103n b\u1ea3n thu\u1ea7n t\u00fay hay \u0111\u1ecbnh d\u1ea1ng HTML. N\u1ebfu mu\u1ed1n c\u00f3 nhi\u1ec1u ch\u1ee9c n\u0103ng nh\u1eadp h\u01a1n xin h\u00e3y \u003Ca href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\"\u003Ec\u00e0i \u0111\u1eb7t abiword\u003C/a\u003E.", + "pad.modals.connected": "\u0110\u00e3 k\u1ebft n\u1ed1i l\u1ea1i.", + "pad.modals.reconnecting": "K\u1ebft n\u1ed1i l\u1ea1i t\u1edbi pad c\u1ee7a b\u1ea1n", + "pad.modals.forcereconnect": "\u00c9p k\u1ebft n\u1ed1i l\u1ea1i", + "pad.modals.userdup": "M\u1edf trong c\u1eeda s\u1ed5 kh\u00e1c", + "pad.modals.userdup.explanation": "Pad n\u00e0y d\u01b0\u1eddng nh\u01b0 \u0111\u01b0\u1ee3c m\u1edf tr\u00ean h\u01a1n m\u1ed9t c\u1eeda s\u1ed5 tr\u00ecnh duy\u1ec7t tr\u00ean m\u00e1y t\u00ednh n\u00e0y.", + "pad.modals.userdup.advice": "K\u1ebft n\u1ed1i l\u1ea1i \u0111\u1ec3 s\u1eed d\u1ee5ng c\u1eeda s\u1ed5 n\u00e0y.", + "pad.modals.unauth": "Kh\u00f4ng c\u00f3 quy\u1ec1n", + "pad.modals.unauth.explanation": "Quy\u1ec1n c\u1ee7a b\u1ea1n \u0111\u00e3 thay \u0111\u1ed5i trong khi b\u1ea1n \u0111ang xem trang n\u00e0y. H\u00e3y th\u1eed k\u1ebft n\u1ed1i l\u1ea1i.", + "pad.modals.looping": "\u0110\u00e3 ng\u1eaft k\u1ebft n\u1ed1i", + "pad.modals.looping.explanation": "C\u00f3 v\u1ea5n \u0111\u1ec1 khi giao ti\u1ebfp v\u1edbi m\u00e1y ch\u1ee7 \u0111\u1ed3ng b\u1ed9", + "pad.modals.looping.cause": "C\u00f3 th\u1ec3 b\u1ea1n \u0111\u00e3 k\u1ebft n\u1ed1i th\u00f4ng qua m\u1ed9t t\u01b0\u1eddng l\u1eeda hay proxy kh\u00f4ng th\u00edch h\u1ee3p", + "pad.modals.initsocketfail": "Kh\u00f4ng th\u1ec3 ti\u1ebfp c\u1eadn m\u00e1y ch\u1ee7", + "pad.modals.initsocketfail.explanation": "Kh\u00f4ng th\u1ec3 k\u1ebft n\u1ed1i \u0111\u1ebfn m\u00e1y ch\u1ee7 \u0111\u1ed3ng b\u1ed9.", + "pad.modals.initsocketfail.cause": "\u0110i\u1ec1u n\u00e0y c\u00f3 th\u1ec3 l\u00e0 do m\u1ed9t v\u1ea5n \u0111\u1ec1 v\u1edbi tr\u00ecnh duy\u1ec7t c\u1ee7a b\u1ea1n hay \u0111\u01b0\u1eddng truy\u1ec1n internet c\u1ee7a b\u1ea1n.", + "pad.modals.slowcommit": "\u0110\u00e3 ng\u1eaft k\u1ebft n\u1ed1i", + "pad.modals.slowcommit.explanation": "M\u00e1y ch\u1ee7 kh\u00f4ng ph\u1ea3n h\u1ed3i.", + "pad.modals.slowcommit.cause": "\u0110i\u1ec1u n\u00e0y c\u00f3 th\u1ec3 l\u00e0 do v\u1ea5n \u0111\u1ec1 v\u1ec1 k\u1ebft n\u1ed1i m\u1ea1ng.", + "pad.modals.deleted": "\u0110\u00e3 x\u00f3a", + "pad.modals.deleted.explanation": "Pad n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c g\u1ee1", + "pad.modals.disconnected": "B\u1ea1n \u0111\u00e3 ng\u1eaft k\u1ebft n\u1ed1i", + "pad.modals.disconnected.explanation": "K\u1ebft n\u1ed1i t\u1edbi m\u00e1y ch\u1ee7 \u0111\u00e3 b\u1ecb m\u1ea5t", + "pad.modals.disconnected.cause": "C\u00e1c m\u00e1y ch\u1ee7 c\u00f3 th\u1ec3 kh\u00f4ng s\u1eb5n d\u00f9ng. Xin vui l\u00f2ng th\u00f4ng b\u00e1o cho ch\u00fang t\u00f4i n\u1ebfu \u0111i\u1ec1u n\u00e0y ti\u1ebfp t\u1ee5c x\u1ea3y ra.", + "pad.share": "Chia s\u1ebb pad n\u00e0y", + "pad.share.readonly": "Ch\u1ec9 \u0111\u1ecdc", + "pad.share.link": "Li\u00ean k\u1ebft", + "pad.share.emebdcode": "URL nh\u00fang", + "pad.chat": "Tr\u00f2 chuy\u1ec7n", + "pad.chat.title": "M\u1edf tr\u00f2 chuy\u1ec7n cho pad n\u00e0y.", + "pad.chat.loadmessages": "T\u1ea3i th\u00eam tin nh\u1eafn", + "timeslider.toolbar.returnbutton": "Tr\u1edf v\u1ec1 pad", + "timeslider.toolbar.authors": "T\u00e1c gi\u1ea3:", + "timeslider.toolbar.authorsList": "Kh\u00f4ng c\u00f3 t\u00e1c gi\u1ea3", + "timeslider.toolbar.exportlink.title": "Xu\u1ea5t", + "timeslider.exportCurrent": "Xu\u1ea5t phi\u00ean b\u1ea3n hi\u1ec7n t\u1ea1i th\u00e0nh:", + "timeslider.version": "Phi\u00ean b\u1ea3n {{version}}", + "timeslider.saved": "\u0110\u00e3 l\u01b0u v\u00e0o ng\u00e0y {{day}} {{month}} n\u0103m {{year}}", + "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", + "timeslider.month.january": "Th\u00e1ng Gi\u00eang", + "timeslider.month.february": "Th\u00e1ng Hai", + "timeslider.month.march": "Th\u00e1ng Ba", + "timeslider.month.april": "Th\u00e1ng T\u01b0", + "timeslider.month.may": "Th\u00e1ng N\u0103m", + "timeslider.month.june": "Th\u00e1ng S\u00e1u", + "timeslider.month.july": "Th\u00e1ng B\u1ea3y", + "timeslider.month.august": "Th\u00e1ng T\u00e1m", + "timeslider.month.september": "Th\u00e1ng Ch\u00edn", + "timeslider.month.october": "Th\u00e1ng M\u01b0\u1eddi", + "timeslider.month.november": "Th\u00e1ng M\u01b0\u1eddi M\u1ed9t", + "timeslider.month.december": "Th\u00e1ng M\u01b0\u1eddi Hai", + "timeslider.unnamedauthor": "{{num}} t\u00e1c gi\u1ea3 kh\u00f4ng t\u00ean", + "pad.savedrevs.marked": "Phi\u00ean b\u1ea3n n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u00e1nh d\u1ea5u l\u00e0 m\u1ed9t phi\u00ean b\u1ea3n \u0111\u00e3 l\u01b0u", + "pad.userlist.entername": "Nh\u1eadp t\u00ean c\u1ee7a b\u1ea1n", + "pad.userlist.unnamed": "Kh\u00f4ng t\u00ean", + "pad.userlist.guest": "Kh\u00e1ch", + "pad.userlist.deny": "Ch\u1eb7n", + "pad.userlist.approve": "Ch\u1ea5p nh\u1eadn", + "pad.impexp.importbutton": "Nh\u1eadp ngay b\u00e2y gi\u1edd", + "pad.impexp.importing": "\u0110ang nh\u1eadp\u2026", + "pad.impexp.confirmimport": "Nh\u1eadp m\u1ed9t t\u1eadp tin s\u1ebd ghi \u0111\u00e8 n\u1ed9i dung hi\u1ec7n t\u1ea1i c\u1ee7a pad. B\u1ea1n c\u00f3 mu\u1ed1n l\u00e0m nh\u01b0 v\u1eady kh\u00f4ng?", + "pad.impexp.convertFailed": "Ch\u00fang t\u00f4i kh\u00f4ng th\u1ec3 nh\u1eadp t\u1eadp tin n\u00e0y. H\u00e3y s\u1eed d\u1ee5ng \u0111\u1ecbnh d\u1ea1ng t\u1eadp tin kh\u00e1c hay sao ch\u00e9o v\u00e0 d\u00e1n m\u1ed9t c\u00e1ch th\u1ee7 c\u00f4ng.", + "pad.impexp.uploadFailed": "T\u1ea3i l\u00ean kh\u00f4ng th\u00e0nh c\u00f4ng, vui l\u00f2ng th\u1eed l\u1ea1i", + "pad.impexp.importfailed": "Nh\u1eadp th\u1ea5t b\u1ea1i", + "pad.impexp.copypaste": "Xin vui l\u00f2ng sao ch\u00e9p v\u00e0 d\u00e1n", + "pad.impexp.exportdisabled": "Xu\u1ea5t ra \u0111\u1ecbnh d\u1ea1ng {{type}} \u0111\u00e3 b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a. Xin h\u00e3y li\u00ean h\u1ec7 v\u1edbi qu\u1ea3n tr\u1ecb vi\u00ean h\u1ec7 th\u1ed1ng \u0111\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin chi ti\u1ebft.", + "@metadata": { + "authors": [ + "Tuankiet65" + ] + } +} \ No newline at end of file From 8ee15d40034e74cd3c9786f328b3c0624798d124 Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Sun, 12 May 2013 18:40:40 +0000 Subject: [PATCH 19/36] Localisation updates from http://translatewiki.net. --- src/locales/vi.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/locales/vi.json b/src/locales/vi.json index ae69e355a..2d118bc42 100644 --- a/src/locales/vi.json +++ b/src/locales/vi.json @@ -1,4 +1,9 @@ { + "@metadata": { + "authors": [ + "Tuankiet65" + ] + }, "index.newPad": "T\u1ea1o m\u1ed9t Pad m\u1edbi", "index.createOpenPad": "hay t\u1ea1o/m\u1edf m\u1ed9t Pad v\u1edbi t\u00ean:", "pad.toolbar.bold.title": "In \u0111\u1eadm (Ctrl-B)", @@ -97,10 +102,5 @@ "pad.impexp.uploadFailed": "T\u1ea3i l\u00ean kh\u00f4ng th\u00e0nh c\u00f4ng, vui l\u00f2ng th\u1eed l\u1ea1i", "pad.impexp.importfailed": "Nh\u1eadp th\u1ea5t b\u1ea1i", "pad.impexp.copypaste": "Xin vui l\u00f2ng sao ch\u00e9p v\u00e0 d\u00e1n", - "pad.impexp.exportdisabled": "Xu\u1ea5t ra \u0111\u1ecbnh d\u1ea1ng {{type}} \u0111\u00e3 b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a. Xin h\u00e3y li\u00ean h\u1ec7 v\u1edbi qu\u1ea3n tr\u1ecb vi\u00ean h\u1ec7 th\u1ed1ng \u0111\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin chi ti\u1ebft.", - "@metadata": { - "authors": [ - "Tuankiet65" - ] - } + "pad.impexp.exportdisabled": "Xu\u1ea5t ra \u0111\u1ecbnh d\u1ea1ng {{type}} \u0111\u00e3 b\u1ecb v\u00f4 hi\u1ec7u h\u00f3a. Xin h\u00e3y li\u00ean h\u1ec7 v\u1edbi qu\u1ea3n tr\u1ecb vi\u00ean h\u1ec7 th\u1ed1ng \u0111\u1ec3 bi\u1ebft th\u00eam th\u00f4ng tin chi ti\u1ebft." } \ No newline at end of file From 9c69753a3570487dd8ac46b81c0a9872450ff7b6 Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Mon, 20 May 2013 09:30:23 +0000 Subject: [PATCH 20/36] Localisation updates from http://translatewiki.net. --- src/locales/ml.json | 2 +- src/locales/pt-br.json | 3 ++- src/locales/vi.json | 3 +++ 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/locales/ml.json b/src/locales/ml.json index 5902ea37c..4567dc7c2 100644 --- a/src/locales/ml.json +++ b/src/locales/ml.json @@ -107,7 +107,7 @@ "timeslider.unnamedauthors": "{{num}} \u0d2a\u0d47\u0d30\u0d3f\u0d32\u0d4d\u0d32\u0d3e\u0d24\u0d4d\u0d24 \u0d30\u0d1a\u0d2f\u0d3f\u0d24\u0d3e\u0d15\u0d4d\u0d15\u0d7e", "pad.savedrevs.marked": "\u0d08 \u0d28\u0d3e\u0d7e\u0d2a\u0d4d\u0d2a\u0d24\u0d3f\u0d2a\u0d4d\u0d2a\u0d4d \u0d38\u0d47\u0d35\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d24\u0d3f\u0d1f\u0d4d\u0d1f\u0d41\u0d33\u0d4d\u0d33 \u0d28\u0d3e\u0d7e\u0d2a\u0d4d\u0d2a\u0d24\u0d3f\u0d2a\u0d4d\u0d2a\u0d3e\u0d2f\u0d3f \u0d05\u0d1f\u0d2f\u0d3e\u0d33\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d41\u0d24\u0d4d\u0d24\u0d3f\u0d2f\u0d3f\u0d30\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d41", "pad.userlist.entername": "\u0d24\u0d3e\u0d19\u0d4d\u0d15\u0d33\u0d41\u0d1f\u0d46 \u0d2a\u0d47\u0d30\u0d4d \u0d28\u0d7d\u0d15\u0d41\u0d15", - "pad.userlist.unnamed": "\u0d2a\u0d47\u0d30\u0d3f\u0d32\u0d4d\u0d32\u0d3e\u0d24\u0d4d\u0d24", + "pad.userlist.unnamed": "\u0d2a\u0d47\u0d30\u0d3f\u0d32\u0d4d\u0d32\u0d3e\u0d24\u0d4d\u0d24\u0d35", "pad.userlist.guest": "\u0d05\u0d24\u0d3f\u0d25\u0d3f", "pad.userlist.deny": "\u0d28\u0d3f\u0d30\u0d38\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15", "pad.userlist.approve": "\u0d05\u0d02\u0d17\u0d40\u0d15\u0d30\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15", diff --git a/src/locales/pt-br.json b/src/locales/pt-br.json index 1e67c6ef9..55ea017e2 100644 --- a/src/locales/pt-br.json +++ b/src/locales/pt-br.json @@ -3,6 +3,7 @@ "authors": [ "Gusta", "Luckas", + "TheGabrielZaum", "Tuliouel" ] }, @@ -23,7 +24,7 @@ "pad.toolbar.timeslider.title": "Linha do tempo", "pad.toolbar.savedRevision.title": "Salvar revis\u00e3o", "pad.toolbar.settings.title": "Configura\u00e7\u00f5es", - "pad.toolbar.embed.title": "Compartilhar e mencionar esta nota", + "pad.toolbar.embed.title": "Compartilhar e incorporar esta nota", "pad.toolbar.showusers.title": "Mostrar os usuarios nesta Nota", "pad.colorpicker.save": "Salvar", "pad.colorpicker.cancel": "Cancelar", diff --git a/src/locales/vi.json b/src/locales/vi.json index 2d118bc42..bb763877c 100644 --- a/src/locales/vi.json +++ b/src/locales/vi.json @@ -12,6 +12,7 @@ "pad.toolbar.strikethrough.title": "G\u1ea1ch b\u1ecf", "pad.toolbar.indent.title": "T\u0103ng l\u1ec1", "pad.toolbar.undo.title": "Ho\u00e0n t\u00e1c (Ctrl-Z)", + "pad.toolbar.redo.title": "L\u00e0m l\u1ea1i (Ctrl-Y)", "pad.toolbar.import_export.title": "Xu\u1ea5t/Nh\u1eadp t\u1eeb/\u0111\u1ebfn c\u00e1c \u0111\u1ecbnh d\u1ea1ng file kh\u00e1c nhau", "pad.toolbar.savedRevision.title": "L\u01b0u Phi\u00ean b\u1ea3n", "pad.toolbar.settings.title": "Thi\u1ebft l\u1eadp", @@ -24,6 +25,8 @@ "pad.permissionDenied": "B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp pad n\u00e0y.", "pad.wrongPassword": "B\u1ea1n \u0111\u00e3 nh\u1eadp sai m\u1eadt kh\u1ea9u", "pad.settings.padSettings": "T\u00f9y ch\u1ecdn Pad", + "pad.settings.stickychat": "Lu\u00e2n hi\u1ec7n c\u1eeda s\u1ed5 tr\u00f2 chuy\u1ec7n tr\u00ean m\u00e0n h\u00ecnh", + "pad.settings.linenocheck": "S\u1ed1 d\u00f2ng", "pad.settings.rtlcheck": "\u0110\u1ecdc n\u1ed9i dung t\u1eeb ph\u1ea3i sang tr\u00e1i?", "pad.settings.fontType": "Ki\u1ec3u ph\u00f4ng ch\u1eef:", "pad.settings.fontType.normal": "Th\u01b0\u1eddng", From 7d81a6d04275c4fb98ea662cff57ddc6dd1be46f Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Sun, 26 May 2013 09:36:03 +0000 Subject: [PATCH 21/36] Localisation updates from http://translatewiki.net. --- src/locales/fr.json | 7 ++++--- src/locales/pt.json | 13 +++++++------ src/locales/vi.json | 12 ++++++++++++ 3 files changed, 23 insertions(+), 9 deletions(-) diff --git a/src/locales/fr.json b/src/locales/fr.json index 228f5884c..5b14619c2 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -13,7 +13,8 @@ "9": "Od1n", "10": "Peter17", "11": "Quenenni", - "13": "Tux-tn" + "13": "Stephane Cottin", + "14": "Tux-tn" } }, "index.newPad": "Nouveau Pad", @@ -46,7 +47,7 @@ "pad.settings.stickychat": "Toujours afficher le chat", "pad.settings.colorcheck": "Couleurs d\u2019identification", "pad.settings.linenocheck": "Num\u00e9ros de lignes", - "pad.settings.rtlcheck": "Lire le contenu de droite \u00e0 gauche ?", + "pad.settings.rtlcheck": "Lecture de droite \u00e0 gauche", "pad.settings.fontType": "Police :", "pad.settings.fontType.normal": "Normal", "pad.settings.fontType.monospaced": "Monospace", @@ -84,7 +85,7 @@ "pad.modals.deleted.explanation": "Ce Pad a \u00e9t\u00e9 supprim\u00e9.", "pad.modals.disconnected": "Vous avez \u00e9t\u00e9 d\u00e9connect\u00e9.", "pad.modals.disconnected.explanation": "La connexion au serveur a \u00e9chou\u00e9.", - "pad.modals.disconnected.cause": "Il se peut que le serveur soit indisponible. Veuillez nous en informer si le probl\u00e8me persiste.", + "pad.modals.disconnected.cause": "Il se peut que le serveur soit indisponible. Si le probl\u00e8me persiste, veuillez nous en informer.", "pad.share": "Partager ce Pad", "pad.share.readonly": "Lecture seule", "pad.share.link": "Lien", diff --git a/src/locales/pt.json b/src/locales/pt.json index 9aa87d80e..472fa69a8 100644 --- a/src/locales/pt.json +++ b/src/locales/pt.json @@ -2,11 +2,12 @@ "@metadata": { "authors": { "0": "Luckas", - "2": "Waldir" + "2": "Tuliouel", + "3": "Waldir" } }, - "index.newPad": "Novo Pad", - "index.createOpenPad": "ou criar/abrir um Pad com o nome:", + "index.newPad": "Nova Nota", + "index.createOpenPad": "ou crie/abra uma Nota com o nome:", "pad.toolbar.bold.title": "Negrito (Ctrl-B)", "pad.toolbar.italic.title": "It\u00e1lico (Ctrl-I)", "pad.toolbar.underline.title": "Sublinhado (Ctrl-U)", @@ -23,11 +24,11 @@ "pad.toolbar.savedRevision.title": "Salvar revis\u00e3o", "pad.toolbar.settings.title": "Configura\u00e7\u00f5es", "pad.toolbar.embed.title": "Incorporar este Pad", - "pad.toolbar.showusers.title": "Mostrar os utilizadores neste Pad", + "pad.toolbar.showusers.title": "Mostrar os utilizadores nesta Nota", "pad.colorpicker.save": "Gravar", "pad.colorpicker.cancel": "Cancelar", "pad.loading": "A carregar\u2026", - "pad.settings.padSettings": "Configura\u00e7\u00f5es do Pad", + "pad.settings.padSettings": "Configura\u00e7\u00f5es da Nota", "pad.settings.myView": "Minha vista", "pad.settings.colorcheck": "Cores de autoria", "pad.settings.linenocheck": "N\u00fameros de linha", @@ -38,7 +39,7 @@ "pad.settings.language": "L\u00edngua:", "pad.importExport.import_export": "Importar/Exportar", "pad.importExport.import": "Carregar qualquer ficheiro de texto ou documento", - "pad.importExport.export": "Exportar o Pad actual como:", + "pad.importExport.export": "Exportar a Nota atual como:", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Texto simples", "pad.importExport.exportword": "Microsoft Word", diff --git a/src/locales/vi.json b/src/locales/vi.json index bb763877c..5abbb1a0a 100644 --- a/src/locales/vi.json +++ b/src/locales/vi.json @@ -10,10 +10,15 @@ "pad.toolbar.italic.title": "In nghi\u00eang (Ctrl-I)", "pad.toolbar.underline.title": "G\u1ea1ch ch\u00e2n (Ctrl-U)", "pad.toolbar.strikethrough.title": "G\u1ea1ch b\u1ecf", + "pad.toolbar.ol.title": "Danh s\u00e1ch C\u00f3 \u0110\u00e1nh s\u1ed1", + "pad.toolbar.ul.title": "Danh s\u00e1ch Kh\u00f4ng \u0110\u00e1nh s\u1ed1", "pad.toolbar.indent.title": "T\u0103ng l\u1ec1", + "pad.toolbar.unindent.title": "Gi\u1ea3m l\u1ec1", "pad.toolbar.undo.title": "Ho\u00e0n t\u00e1c (Ctrl-Z)", "pad.toolbar.redo.title": "L\u00e0m l\u1ea1i (Ctrl-Y)", + "pad.toolbar.clearAuthorship.title": "X\u00f3a M\u00e0u ch\u1ec9 T\u00e1c gi\u1ea3", "pad.toolbar.import_export.title": "Xu\u1ea5t/Nh\u1eadp t\u1eeb/\u0111\u1ebfn c\u00e1c \u0111\u1ecbnh d\u1ea1ng file kh\u00e1c nhau", + "pad.toolbar.timeslider.title": "Thanh th\u1eddi gian", "pad.toolbar.savedRevision.title": "L\u01b0u Phi\u00ean b\u1ea3n", "pad.toolbar.settings.title": "Thi\u1ebft l\u1eadp", "pad.toolbar.embed.title": "Chia s\u1ebb v\u00e0 Nh\u00fang pad n\u00e0y", @@ -25,11 +30,15 @@ "pad.permissionDenied": "B\u1ea1n kh\u00f4ng c\u00f3 quy\u1ec1n truy c\u1eadp pad n\u00e0y.", "pad.wrongPassword": "B\u1ea1n \u0111\u00e3 nh\u1eadp sai m\u1eadt kh\u1ea9u", "pad.settings.padSettings": "T\u00f9y ch\u1ecdn Pad", + "pad.settings.myView": "Ch\u1ec9 c\u00f3 t\u00f4i", "pad.settings.stickychat": "Lu\u00e2n hi\u1ec7n c\u1eeda s\u1ed5 tr\u00f2 chuy\u1ec7n tr\u00ean m\u00e0n h\u00ecnh", + "pad.settings.colorcheck": "M\u00e0u ch\u1ec9 t\u00e1c gi\u1ea3", "pad.settings.linenocheck": "S\u1ed1 d\u00f2ng", "pad.settings.rtlcheck": "\u0110\u1ecdc n\u1ed9i dung t\u1eeb ph\u1ea3i sang tr\u00e1i?", "pad.settings.fontType": "Ki\u1ec3u ph\u00f4ng ch\u1eef:", "pad.settings.fontType.normal": "Th\u01b0\u1eddng", + "pad.settings.fontType.monospaced": "Monospace", + "pad.settings.globalView": "To\u00e0n c\u1ea7u", "pad.settings.language": "Ng\u00f4n ng\u1eef:", "pad.importExport.import_export": "Xu\u1ea5t/Nh\u1eadp", "pad.importExport.import": "T\u1ea3i l\u00ean b\u1ea5t k\u1ef3 t\u1eadp tin v\u0103n b\u1ea3n ho\u1eb7c t\u00e0i li\u1ec7u", @@ -71,6 +80,7 @@ "pad.chat": "Tr\u00f2 chuy\u1ec7n", "pad.chat.title": "M\u1edf tr\u00f2 chuy\u1ec7n cho pad n\u00e0y.", "pad.chat.loadmessages": "T\u1ea3i th\u00eam tin nh\u1eafn", + "timeslider.pageTitle": "Thanh th\u1eddi gian c\u1ee7a {{appTitle}}", "timeslider.toolbar.returnbutton": "Tr\u1edf v\u1ec1 pad", "timeslider.toolbar.authors": "T\u00e1c gi\u1ea3:", "timeslider.toolbar.authorsList": "Kh\u00f4ng c\u00f3 t\u00e1c gi\u1ea3", @@ -92,12 +102,14 @@ "timeslider.month.november": "Th\u00e1ng M\u01b0\u1eddi M\u1ed9t", "timeslider.month.december": "Th\u00e1ng M\u01b0\u1eddi Hai", "timeslider.unnamedauthor": "{{num}} t\u00e1c gi\u1ea3 kh\u00f4ng t\u00ean", + "timeslider.unnamedauthors": "{{num}} t\u00e1c gi\u1ea3 kh\u00f4ng t\u00ean", "pad.savedrevs.marked": "Phi\u00ean b\u1ea3n n\u00e0y \u0111\u00e3 \u0111\u01b0\u1ee3c \u0111\u00e1nh d\u1ea5u l\u00e0 m\u1ed9t phi\u00ean b\u1ea3n \u0111\u00e3 l\u01b0u", "pad.userlist.entername": "Nh\u1eadp t\u00ean c\u1ee7a b\u1ea1n", "pad.userlist.unnamed": "Kh\u00f4ng t\u00ean", "pad.userlist.guest": "Kh\u00e1ch", "pad.userlist.deny": "Ch\u1eb7n", "pad.userlist.approve": "Ch\u1ea5p nh\u1eadn", + "pad.editbar.clearcolors": "X\u00f3a m\u00e0u ch\u1ec9 t\u00e1c gi\u1ea3 tr\u00ean to\u00e0n b\u1ed9 t\u00e0i li\u1ec7u?", "pad.impexp.importbutton": "Nh\u1eadp ngay b\u00e2y gi\u1edd", "pad.impexp.importing": "\u0110ang nh\u1eadp\u2026", "pad.impexp.confirmimport": "Nh\u1eadp m\u1ed9t t\u1eadp tin s\u1ebd ghi \u0111\u00e8 n\u1ed9i dung hi\u1ec7n t\u1ea1i c\u1ee7a pad. B\u1ea1n c\u00f3 mu\u1ed1n l\u00e0m nh\u01b0 v\u1eady kh\u00f4ng?", From cbbf9a82ac11d74f60d4f726cb7c5eee50d6c3a1 Mon Sep 17 00:00:00 2001 From: Jens Herrmann Date: Sun, 26 May 2013 23:06:15 +0200 Subject: [PATCH 22/36] Pass arguments from safeRun.sh to run.sh --- bin/safeRun.sh | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/bin/safeRun.sh b/bin/safeRun.sh index b060f5d19..02e448d18 100755 --- a/bin/safeRun.sh +++ b/bin/safeRun.sh @@ -16,6 +16,7 @@ TIME_BETWEEN_EMAILS=600 # 10 minutes # DON'T EDIT AFTER THIS LINE LAST_EMAIL_SEND=0 +LOG="$1" #Move to the folder where ep-lite is installed cd `dirname $0` @@ -26,7 +27,7 @@ if [ -d "../bin" ]; then fi #check if a logfile parameter is set -if [ -z "$1" ]; then +if [ -z "${LOG}" ]; then echo "Set a logfile as the first parameter" exit 1 fi @@ -34,18 +35,19 @@ fi while [ 1 ] do #try to touch the file if it doesn't exist - if [ ! -f $1 ]; then - touch $1 || ( echo "Logfile '$1' is not writeable" && exit 1 ) + if [ ! -f ${LOG} ]; then + touch ${LOG} || ( echo "Logfile '${LOG}' is not writeable" && exit 1 ) fi #check if the file is writeable - if [ ! -w $1 ]; then - echo "Logfile '$1' is not writeable" + if [ ! -w ${LOG} ]; then + echo "Logfile '${LOG}' is not writeable" exit 1 fi #start the application - bin/run.sh >>$1 2>>$1 + shift + bin/run.sh $@ >>${LOG} 2>>${LOG} #Send email if [ $ERROR_HANDLING = 1 ]; then @@ -53,13 +55,13 @@ do TIME_SINCE_LAST_SEND=$(($TIME_NOW - $LAST_EMAIL_SEND)) if [ $TIME_SINCE_LAST_SEND -gt $TIME_BETWEEN_EMAILS ]; then - printf "Server was restared at: $(date)\nThe last 50 lines of the log before the error happens:\n $(tail -n 50 $1)" | mail -s "Pad Server was restarted" $EMAIL_ADDRESS + printf "Server was restared at: $(date)\nThe last 50 lines of the log before the error happens:\n $(tail -n 50 ${LOG})" | mail -s "Pad Server was restarted" $EMAIL_ADDRESS LAST_EMAIL_SEND=$TIME_NOW fi fi - echo "RESTART!" >>$1 + echo "RESTART!" >>${LOG} #Sleep 10 seconds before restart sleep 10 From 67b513216a3644495da797a4b4ee206505104dac Mon Sep 17 00:00:00 2001 From: Chia-liang Kao Date: Wed, 29 May 2013 10:40:30 +0800 Subject: [PATCH 23/36] Fix safeRun that tries to shift on subsequent restarts --- bin/safeRun.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/safeRun.sh b/bin/safeRun.sh index 02e448d18..4b3485ba4 100755 --- a/bin/safeRun.sh +++ b/bin/safeRun.sh @@ -32,6 +32,7 @@ if [ -z "${LOG}" ]; then exit 1 fi +shift while [ 1 ] do #try to touch the file if it doesn't exist @@ -46,7 +47,6 @@ do fi #start the application - shift bin/run.sh $@ >>${LOG} 2>>${LOG} #Send email From eae9faa28c75a642f503f40ea53fcd909feaa09b Mon Sep 17 00:00:00 2001 From: Chia-liang Kao Date: Thu, 6 Jun 2013 12:30:48 +0800 Subject: [PATCH 24/36] refactor setAuthorStyle --- src/static/js/ace2_inner.js | 97 ++++++++++++++++++++----------------- 1 file changed, 52 insertions(+), 45 deletions(-) diff --git a/src/static/js/ace2_inner.js b/src/static/js/ace2_inner.js index 0d54d7251..f53e5004d 100644 --- a/src/static/js/ace2_inner.js +++ b/src/static/js/ace2_inner.js @@ -208,6 +208,57 @@ function Ace2Inner(){ }; editorInfo.ace_getAuthorInfos= getAuthorInfos; + function setAuthorStyle(author, info) + { + if (!dynamicCSS) { + return; + } + + var authorSelector = getAuthorColorClassSelector(getAuthorClassName(author)); + if (!info) + { + dynamicCSS.removeSelectorStyle(authorSelector); + parentDynamicCSS.removeSelectorStyle(authorSelector); + } + else + { + if (info.bgcolor) + { + var bgcolor = info.bgcolor; + if ((typeof info.fade) == "number") + { + bgcolor = fadeColor(bgcolor, info.fade); + } + + var authorStyle = dynamicCSS.selectorStyle(authorSelector); + var parentAuthorStyle = parentDynamicCSS.selectorStyle(authorSelector); + var anchorStyle = dynamicCSS.selectorStyle(authorSelector + ' > a') + + // author color + authorStyle.backgroundColor = bgcolor; + parentAuthorStyle.backgroundColor = bgcolor; + + // text contrast + if(colorutils.luminosity(colorutils.css2triple(bgcolor)) < 0.5) + { + authorStyle.color = '#ffffff'; + parentAuthorStyle.color = '#ffffff'; + }else{ + authorStyle.color = null; + parentAuthorStyle.color = null; + } + + // anchor text contrast + if(colorutils.luminosity(colorutils.css2triple(bgcolor)) < 0.55) + { + anchorStyle.color = colorutils.triple2css(colorutils.complementary(colorutils.css2triple(bgcolor))); + }else{ + anchorStyle.color = null; + } + } + } + } + function setAuthorInfo(author, info) { if ((typeof author) != "string") @@ -217,56 +268,12 @@ function Ace2Inner(){ if (!info) { delete authorInfos[author]; - if (dynamicCSS) - { - dynamicCSS.removeSelectorStyle(getAuthorColorClassSelector(getAuthorClassName(author))); - parentDynamicCSS.removeSelectorStyle(getAuthorColorClassSelector(getAuthorClassName(author))); - } } else { authorInfos[author] = info; - if (info.bgcolor) - { - if (dynamicCSS) - { - var bgcolor = info.bgcolor; - if ((typeof info.fade) == "number") - { - bgcolor = fadeColor(bgcolor, info.fade); - } - - var authorStyle = dynamicCSS.selectorStyle(getAuthorColorClassSelector( - getAuthorClassName(author))); - var parentAuthorStyle = parentDynamicCSS.selectorStyle(getAuthorColorClassSelector( - getAuthorClassName(author))); - var anchorStyle = dynamicCSS.selectorStyle(getAuthorColorClassSelector( - getAuthorClassName(author))+' > a') - - // author color - authorStyle.backgroundColor = bgcolor; - parentAuthorStyle.backgroundColor = bgcolor; - - // text contrast - if(colorutils.luminosity(colorutils.css2triple(bgcolor)) < 0.5) - { - authorStyle.color = '#ffffff'; - parentAuthorStyle.color = '#ffffff'; - }else{ - authorStyle.color = null; - parentAuthorStyle.color = null; - } - - // anchor text contrast - if(colorutils.luminosity(colorutils.css2triple(bgcolor)) < 0.55) - { - anchorStyle.color = colorutils.triple2css(colorutils.complementary(colorutils.css2triple(bgcolor))); - }else{ - anchorStyle.color = null; - } - } - } } + setAuthorStyle(author, info); } function getAuthorClassName(author) From 548f31a46a685860c73376261f39e502d680cedd Mon Sep 17 00:00:00 2001 From: Chia-liang Kao Date: Thu, 6 Jun 2013 12:59:56 +0800 Subject: [PATCH 25/36] new hook: aceSetAuthorStyle --- src/static/js/ace2_inner.js | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/static/js/ace2_inner.js b/src/static/js/ace2_inner.js index f53e5004d..f8b266b4e 100644 --- a/src/static/js/ace2_inner.js +++ b/src/static/js/ace2_inner.js @@ -213,8 +213,22 @@ function Ace2Inner(){ if (!dynamicCSS) { return; } - var authorSelector = getAuthorColorClassSelector(getAuthorClassName(author)); + + var authorStyleSet = hooks.callAll('aceSetAuthorStyle', { + dynamicCSS: dynamicCSS, + parentDynamicCSS: parentDynamicCSS, + info: info, + author: author, + authorSelector: authorSelector, + }); + + // Prevent default behaviour if any hook says so + if (_.any(authorStyleSet, function(it) { return it })) + { + return + } + if (!info) { dynamicCSS.removeSelectorStyle(authorSelector); From f8729d2188d05e9ca3c0d55b465c2c8b1180b05b Mon Sep 17 00:00:00 2001 From: Chia-liang Kao Date: Fri, 7 Jun 2013 00:58:06 +0800 Subject: [PATCH 26/36] use SAUCE_ACCESS_KEY --- tests/frontend/travis/remote_runner.js | 2 +- tests/frontend/travis/sauce_tunnel.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/frontend/travis/remote_runner.js b/tests/frontend/travis/remote_runner.js index a4f1dac1e..f7edae223 100644 --- a/tests/frontend/travis/remote_runner.js +++ b/tests/frontend/travis/remote_runner.js @@ -6,7 +6,7 @@ var config = { host: "ondemand.saucelabs.com" , port: 80 , username: process.env.SAUCE_USER - , accessKey: process.env.SAUCE_KEY + , accessKey: process.env.SAUCE_ACCESS_KEY } var allTestsPassed = true; diff --git a/tests/frontend/travis/sauce_tunnel.sh b/tests/frontend/travis/sauce_tunnel.sh index ac8f7ac71..21ff3ff5a 100755 --- a/tests/frontend/travis/sauce_tunnel.sh +++ b/tests/frontend/travis/sauce_tunnel.sh @@ -4,7 +4,7 @@ curl http://saucelabs.com/downloads/Sauce-Connect-latest.zip > /tmp/sauce.zip unzip /tmp/sauce.zip -d /tmp # start the sauce connector in background and make sure it doesn't output the secret key -(java -jar /tmp/Sauce-Connect.jar $SAUCE_USER $SAUCE_KEY -f /tmp/tunnel > /dev/null )& +(java -jar /tmp/Sauce-Connect.jar $SAUCE_USER $SAUCE_ACCESS_KEY -f /tmp/tunnel > /dev/null )& # save the sauce pid in a file echo $! > /tmp/sauce.pid From 4c264aec4d717cf4946a38f928cc245bca3a02c8 Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Mon, 10 Jun 2013 08:45:19 +0000 Subject: [PATCH 27/36] Localisation updates from http://translatewiki.net. --- src/locales/fa.json | 7 +-- src/locales/fo.json | 97 ++++++++++++++++++++++++++++++++++++++++ src/locales/km.json | 52 +++++++++++++++++++++ src/locales/lt.json | 72 +++++++++++++++++++++++++++++ src/locales/oc.json | 7 ++- src/locales/pl.json | 2 +- src/locales/zh-hans.json | 3 ++ src/locales/zh-hant.json | 37 +++++++-------- 8 files changed, 253 insertions(+), 24 deletions(-) create mode 100644 src/locales/fo.json create mode 100644 src/locales/km.json create mode 100644 src/locales/lt.json diff --git a/src/locales/fa.json b/src/locales/fa.json index 4d2c448f3..48220dab4 100644 --- a/src/locales/fa.json +++ b/src/locales/fa.json @@ -3,8 +3,9 @@ "authors": { "0": "BMRG14", "1": "Dalba", - "3": "ZxxZxxZ", - "4": "\u0627\u0644\u0646\u0627\u0632" + "2": "Ebraminio", + "4": "ZxxZxxZ", + "5": "\u0627\u0644\u0646\u0627\u0632" } }, "index.newPad": "\u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u062a\u0627\u0632\u0647", @@ -22,7 +23,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.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.savedRevision.title": "\u0630\u062e\u06cc\u0631\u0647\u200c\u06cc \u0628\u0627\u0632\u0646\u0648\u06cc\u0633\u06cc", + "pad.toolbar.savedRevision.title": "\u0630\u062e\u06cc\u0631\u0647\u200c\u0633\u0627\u0632\u06cc \u0646\u0633\u062e\u0647", "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.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", diff --git a/src/locales/fo.json b/src/locales/fo.json new file mode 100644 index 000000000..45f6548c0 --- /dev/null +++ b/src/locales/fo.json @@ -0,0 +1,97 @@ +{ + "index.newPad": "N\u00fdggjur teldil", + "pad.toolbar.bold.title": "Vi\u00f0 feitum (Ctrl-B)", + "pad.toolbar.italic.title": "Skr\u00e1skrift (Ctrl-I)", + "pad.toolbar.underline.title": "Undirstrika\u00f0 (Ctrl-U)", + "pad.toolbar.strikethrough.title": "Gj\u00f8gnumstrika\u00f0", + "pad.toolbar.ol.title": "B\u00edleggingarlisti", + "pad.toolbar.undo.title": "Angra (Ctrl-Z)", + "pad.toolbar.redo.title": "Ger umaftur (Ctrl-Y)", + "pad.toolbar.import_export.title": "Innflyt/\u00datflyt fr\u00e1/til ymiskar f\u00edlust\u00f8ddir", + "pad.toolbar.savedRevision.title": "Goym Endursko\u00f0an", + "pad.toolbar.settings.title": "Innstillingar", + "pad.toolbar.embed.title": "Deil og Innset henda pad'in", + "pad.toolbar.showusers.title": "V\u00eds br\u00fakarar \u00e1 hesum paddi", + "pad.colorpicker.save": "Goym", + "pad.colorpicker.cancel": "\u00d3gilda", + "pad.loading": "L\u00f8\u00f0ir...", + "pad.passwordRequired": "T\u00fa hevur br\u00fak fyri einum loynior\u00f0i fyri at f\u00e1a atgongd til henda paddin", + "pad.permissionDenied": "T\u00fa hevur ikki loyvi til at f\u00e1a atgongd til henda paddin", + "pad.wrongPassword": "T\u00edtt loynior\u00f0 var skeivt", + "pad.settings.padSettings": "Pad innstillingar", + "pad.settings.myView": "M\u00edn s\u00fdning", + "pad.settings.stickychat": "Kjatta alt\u00ed\u00f0 \u00e1 skerminum", + "pad.settings.colorcheck": "Litir hj\u00e1 rith\u00f8vundaskapinum", + "pad.settings.linenocheck": "Linjunummur", + "pad.settings.rtlcheck": "Vil t\u00fa lesa innihaldi\u00f0 fr\u00e1 h\u00f8gru til vinstu?", + "pad.settings.fontType": "Skriftslag:", + "pad.settings.fontType.normal": "Vanligt", + "pad.settings.fontType.monospaced": "F\u00f8st breidd", + "pad.settings.globalView": "Global s\u00fdning", + "pad.settings.language": "M\u00e1l:", + "pad.importExport.import_export": "Innflyt/\u00datflyt", + "pad.importExport.import": "Legg \u00fat onkra tekstf\u00edlu ella dokument", + "pad.importExport.importSuccessful": "Ta\u00f0 eydna\u00f0ist!", + "pad.importExport.export": "\u00datflyt verandi pad sum:", + "pad.importExport.exporthtml": "HTML", + "pad.importExport.exportplain": "Einfaldur tekstur", + "pad.importExport.exportword": "Microsoft Word", + "pad.importExport.exportpdf": "PDF", + "pad.importExport.exportopen": "ODF (Opi\u00f0 Dokument Format)", + "pad.importExport.exportdokuwiki": "DokuWiki", + "pad.importExport.abiword.innerHTML": "T\u00fa kanst bert innflyta fr\u00e1 einf\u00f8ldum teksti ella html formatum. Fyri funksj\u00f3nir til innflytan fyri v\u00ed\u00f0arikomin vinarliga \u003Ca href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\"\u003Einstallera abiword\u003C/a\u003E.", + "pad.modals.connected": "T\u00fa hevur samband.", + "pad.modals.reconnecting": "Roynir aftur at f\u00e1a samband vi\u00f0 t\u00edn pad..", + "pad.modals.forcereconnect": "Tvinga endurstovnan av sambandi.", + "pad.modals.userdup": "Er lati\u00f0 upp \u00ed \u00f8\u00f0rum vindeyga", + "pad.modals.userdup.explanation": "Ta\u00f0 s\u00e6r \u00fat til at hesin paddurin er latin upp \u00ed meira enn einum brovsara vindeyga \u00e1 hesari telduni.", + "pad.modals.userdup.advice": "Endurstovna sambandi fyri at n\u00fdta hetta vindeyga \u00ed sta\u00f0in.", + "pad.modals.unauth": "Er ikki loyvt", + "pad.modals.unauth.explanation": "T\u00edni loyvi eru broytt, me\u00f0an t\u00fa hevur hugt at hesi s\u00ed\u00f0uni. Royn og endurstovna sambandi.", + "pad.modals.looping": "T\u00fa misti sambandi.", + "pad.modals.initsocketfail": "Amb\u00e6tarin er \u00f3atkomuligur.", + "pad.modals.initsocketfail.cause": "Hetta skyldast mest sannl\u00edkt ein trupulleika vi\u00f0 t\u00ednum kaga/brovsara ella vi\u00f0 t\u00ednum internetsambandi.", + "pad.modals.slowcommit": "T\u00fa misti sambandi.", + "pad.modals.slowcommit.explanation": "Amb\u00e6tarin (servarin) svarar ikki.", + "pad.modals.slowcommit.cause": "Hetta kann skyldast trupulleikar vi\u00f0 netverkssambandinum.", + "pad.modals.deleted": "Er strika\u00f0.", + "pad.modals.deleted.explanation": "Hesin paddurin er fluttur.", + "pad.modals.disconnected": "T\u00fa hevur mist sambandi.", + "pad.modals.disconnected.explanation": "Sambandi\u00f0 til amb\u00e6tarin er avbroti\u00f0", + "pad.share": "Deil henda paddin", + "pad.share.readonly": "Vart fyri skriving", + "pad.share.link": "Sl\u00f3\u00f0", + "timeslider.toolbar.returnbutton": "Vend aftur til pad'in", + "timeslider.toolbar.authors": "H\u00f8vundar:", + "timeslider.toolbar.authorsList": "Ongir h\u00f8vundar", + "timeslider.toolbar.exportlink.title": "\u00datflyt", + "timeslider.exportCurrent": "\u00datflyt hesa versj\u00f3na sum:", + "timeslider.version": "Versj\u00f3n {{version}}", + "timeslider.saved": "Goymt {{month}} {{day}}, {{year}}", + "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", + "timeslider.month.january": "Januar", + "timeslider.month.february": "Februar", + "timeslider.month.march": "Mars", + "timeslider.month.april": "Apr\u00edl", + "timeslider.month.may": "Mai", + "timeslider.month.june": "Juni", + "timeslider.month.july": "Juli", + "timeslider.month.august": "August", + "timeslider.month.september": "September", + "timeslider.month.october": "October", + "timeslider.month.november": "November", + "timeslider.month.december": "Desember", + "timeslider.unnamedauthor": "{{num}} \u00f3nevndur h\u00f8vundur", + "timeslider.unnamedauthors": "{{num}} \u00f3nevndir h\u00f8vundar", + "pad.savedrevs.marked": "Henda endursko\u00f0anin er n\u00fa merkt sum ein goymd endursko\u00f0an", + "pad.userlist.entername": "Skriva t\u00edtt navn", + "pad.userlist.unnamed": "ikki-navngivi\u00f0", + "pad.userlist.guest": "Gestur", + "pad.userlist.deny": "Nokta", + "pad.userlist.approve": "G\u00f3\u00f0kenn", + "@metadata": { + "authors": [ + "EileenSanda" + ] + } +} \ No newline at end of file diff --git a/src/locales/km.json b/src/locales/km.json new file mode 100644 index 000000000..e32a26f72 --- /dev/null +++ b/src/locales/km.json @@ -0,0 +1,52 @@ +{ + "index.newPad": "\u1795\u17c1\u178f\u1790\u17d2\u1798\u17b8", + "index.createOpenPad": "\u17ac\u1794\u1784\u17d2\u1780\u17be\u178f/\u1794\u17be\u1780\u1795\u17c1\u178f\u178a\u17c2\u179b\u1798\u17b6\u1793\u1788\u17d2\u1798\u17c4\u17c7\u17d6", + "pad.toolbar.bold.title": "\u178a\u17b7\u178f (Ctrl-B)", + "pad.toolbar.italic.title": "\u1791\u17d2\u179a\u17c1\u178f (Ctrl-I)", + "pad.toolbar.underline.title": "\u1782\u17bc\u179f\u1794\u1793\u17d2\u1791\u17b6\u178f\u17cb (Ctrl-U)", + "pad.toolbar.strikethrough.title": "\u1786\u17bc\u178f\u1785\u17c4\u179b", + "pad.toolbar.ol.title": "\u1794\u1789\u17d2\u1787\u17b8\u178f\u17b6\u1798\u178f\u1798\u17d2\u179a\u17c0\u1794", + "pad.toolbar.ul.title": "\u1794\u1789\u17d2\u1787\u17b8\u1798\u17b7\u1793\u178f\u17b6\u1798\u178f\u1798\u17d2\u179a\u17c0\u1794", + "pad.toolbar.indent.title": "\u1781\u17b7\u178f\u1785\u17bc\u179b\u1780\u17d2\u1793\u17bb\u1784", + "pad.toolbar.unindent.title": "\u1781\u17b7\u178f\u1785\u17c1\u1789\u1780\u17d2\u179a\u17c5", + "pad.toolbar.undo.title": "\u17a2\u17b6\u1793\u17cb\u178c\u17bc (Ctrl-Z)", + "pad.toolbar.redo.title": "\u179a\u17b8\u178c\u17bc (Ctrl-Y)", + "pad.toolbar.import_export.title": "\u1793\u17b6\u17c6\u1785\u17bc\u179b/\u1793\u17b6\u17c6\u1785\u17c1\u1789 \u1796\u17b8/\u1791\u17c5\u1794\u17d2\u179a\u1797\u17c1\u1791\u17af\u1780\u179f\u17b6\u179a\u1795\u17d2\u179f\u17c1\u1784\u1791\u17c0\u178f", + "pad.toolbar.settings.title": "\u1780\u17b6\u179a\u1780\u17c6\u178e\u178f\u17cb\u200b", + "pad.colorpicker.save": "\u179a\u1780\u17d2\u179f\u17b6\u1791\u17bb\u1780", + "pad.colorpicker.cancel": "\u1794\u17c4\u17c7\u1794\u1784\u17cb", + "pad.loading": "\u1780\u17c6\u1796\u17bb\u1784\u1795\u17d2\u1791\u17bb\u1780\u2026", + "pad.settings.fontType": "\u1794\u17d2\u179a\u1797\u17c1\u1791\u1796\u17bb\u1798\u17d2\u1796\u17a2\u1780\u17d2\u179f\u179a\u17d6", + "pad.settings.fontType.normal": "\u1792\u1798\u17d2\u1798\u178f\u17b6", + "pad.settings.language": "\u1797\u17b6\u179f\u17b6\u17d6", + "pad.importExport.import_export": "\u1793\u17b6\u17c6\u1785\u17bc\u179b/\u1793\u17b6\u17c6\u1785\u17c1\u1789", + "pad.importExport.importSuccessful": "\u178a\u17c4\u1799\u1787\u17c4\u1782\u1787\u17d0\u1799!", + "pad.importExport.exporthtml": "HTML", + "pad.importExport.exportplain": "Plain text", + "pad.importExport.exportword": "Microsoft Word", + "pad.importExport.exportpdf": "PDF", + "pad.importExport.exportopen": "ODF (Open Document Format)", + "pad.importExport.exportdokuwiki": "DokuWiki", + "pad.modals.connected": "\u1794\u17b6\u1793\u200b\u178f\u1797\u17d2\u1787\u17b6\u1794\u17cb\u200b\u17d4", + "pad.share.link": "\u178f\u17c6\u178e\u200b\u1797\u17d2\u1787\u17b6\u1794\u17cb", + "timeslider.month.january": "\u1798\u1780\u179a\u17b6", + "timeslider.month.february": "\u1780\u17bb\u1798\u17d2\u1797\u17c8", + "timeslider.month.march": "\u1798\u17b7\u1793\u17b6", + "timeslider.month.april": "\u1798\u17c1\u179f\u17b6", + "timeslider.month.may": "\u17a7\u179f\u1797\u17b6", + "timeslider.month.june": "\u1798\u17b7\u1790\u17bb\u1793\u17b6\u200b", + "timeslider.month.july": "\u1780\u1780\u17d2\u178a\u178a\u17b6\u200b", + "timeslider.month.august": "\u179f\u17b8\u17a0\u17b6", + "timeslider.month.september": "\u1780\u1789\u17d2\u1789\u17b6", + "timeslider.month.october": "\u178f\u17bb\u179b\u17b6", + "timeslider.month.november": "\u179c\u17b7\u1785\u17d2\u1786\u17b7\u1780\u17b6", + "timeslider.month.december": "\u1792\u17d2\u1793\u17bc", + "pad.userlist.guest": "\u1797\u17d2\u1789\u17c0\u179c", + "pad.impexp.importbutton": "\u1793\u17b6\u17c6\u1785\u17bc\u179b\u17a5\u17a1\u17bc\u179c\u1793\u17c1\u17c7", + "pad.impexp.importing": "\u1780\u17c6\u1796\u17bb\u1784\u1793\u17b6\u17c6\u1785\u17bc\u179b\u200b...", + "@metadata": { + "authors": [ + "\u179c\u17d0\u178e\u1790\u17b6\u179a\u17b7\u1791\u17d2\u1792" + ] + } +} \ No newline at end of file diff --git a/src/locales/lt.json b/src/locales/lt.json new file mode 100644 index 000000000..db40b306d --- /dev/null +++ b/src/locales/lt.json @@ -0,0 +1,72 @@ +{ + "pad.toolbar.bold.title": "Pary\u0161kintasis (Ctrl-B)", + "pad.toolbar.italic.title": "Pasvirasis (Ctrl-I)", + "pad.toolbar.underline.title": "Pabraukimas (Ctrl-U)", + "pad.toolbar.undo.title": "Anuliuoti (Ctrl-Z)", + "pad.toolbar.redo.title": "Perdaryti (Ctrl-Y)", + "pad.toolbar.clearAuthorship.title": "Tvarkyti autoryst\u0117s spalvas", + "pad.toolbar.settings.title": "Nustatymai", + "pad.colorpicker.save": "I\u0161saugoti", + "pad.colorpicker.cancel": "At\u0161aukti", + "pad.loading": "\u012ekraunama...", + "pad.settings.fontType.normal": "Normalus", + "pad.settings.language": "Kalba:", + "pad.importExport.import_export": "Importuoti/Eksportuoti", + "pad.importExport.import": "\u012ekelkite bet kok\u012f tekstin\u012f fail\u0105 arba dokument\u0105", + "pad.importExport.importSuccessful": "Pavyko!", + "pad.importExport.exporthtml": "HTML", + "pad.importExport.exportplain": "Paprastasis tekstas", + "pad.importExport.exportword": "Microsoft Word", + "pad.importExport.exportpdf": "PDF", + "pad.importExport.exportopen": "ODF (Atvirasis dokumento formatas)", + "pad.importExport.exportdokuwiki": "DokuWiki", + "pad.modals.connected": "Prisijungta.", + "pad.modals.unauth": "Neleid\u017eiama", + "pad.modals.looping": "Atjungtas.", + "pad.modals.initsocketfail": "Serveris yra nepasiekiamas.", + "pad.modals.slowcommit": "Atjungtas.", + "pad.modals.slowcommit.explanation": "Serveris neatsako.", + "pad.modals.deleted": "I\u0161trintas.", + "pad.modals.disconnected": "J\u016bs atsijung\u0117te.", + "pad.share.readonly": "Tik skaityti", + "pad.share.link": "Nuoroda", + "pad.share.emebdcode": "\u012eterptasis URL", + "pad.chat": "Pokalbiai", + "pad.chat.loadmessages": "\u012ekrauti daugiau prane\u0161im\u0173", + "timeslider.toolbar.authors": "Autoriai:", + "timeslider.toolbar.authorsList": "N\u0117ra autori\u0173", + "timeslider.toolbar.exportlink.title": "Eksportuoti", + "timeslider.exportCurrent": "Eksportuoti dabartin\u0119 versij\u0105 kaip:", + "timeslider.version": "Versija {{version}}", + "timeslider.saved": "I\u0161saugota {{year}},{{month}} {{day}}", + "timeslider.dateformat": "{{year}}-{{month}}-{{day}} {{hours}}:{{minutes}}:{{seconds}}", + "timeslider.month.january": "Sausis", + "timeslider.month.february": "Vasaris", + "timeslider.month.march": "Kovas", + "timeslider.month.april": "Balandis", + "timeslider.month.may": "Gegu\u017e\u0117", + "timeslider.month.june": "Bir\u017eelis", + "timeslider.month.july": "Liepa", + "timeslider.month.august": "Rugpj\u016btis", + "timeslider.month.september": "Rugs\u0117jis", + "timeslider.month.october": "Spalis", + "timeslider.month.november": "Lapkritis", + "timeslider.month.december": "Gruodis", + "timeslider.unnamedauthor": "{{num}} bevardis autorius", + "timeslider.unnamedauthors": "{{num}} bevard\u017eiai(-i\u0173) autoriai(-i\u0173)", + "pad.userlist.entername": "\u012eveskite savo vard\u0105", + "pad.userlist.unnamed": "bevardis", + "pad.userlist.guest": "Sve\u010dias", + "pad.userlist.deny": "Neigti", + "pad.userlist.approve": "Patvirtinti", + "pad.impexp.importbutton": "Importuoti dabar", + "pad.impexp.importing": "Importuojama...", + "pad.impexp.uploadFailed": "\u012ek\u0117limas nepavyko, bandykite dar kart\u0105", + "pad.impexp.importfailed": "Importuoti nepavyko", + "pad.impexp.copypaste": "Pra\u0161ome nukopijuoti ir \u012fklijuoti", + "@metadata": { + "authors": [ + "Mantak111" + ] + } +} \ No newline at end of file diff --git a/src/locales/oc.json b/src/locales/oc.json index be4da3cd7..46979150d 100644 --- a/src/locales/oc.json +++ b/src/locales/oc.json @@ -19,9 +19,9 @@ "pad.toolbar.clearAuthorship.title": "Escafar las colors qu'identifican los autors", "pad.toolbar.import_export.title": "Importar/Exportar de/cap a un format de fichi\u00e8r diferent", "pad.toolbar.timeslider.title": "Istoric dinamic", - "pad.toolbar.savedRevision.title": "Versions enregistradas", + "pad.toolbar.savedRevision.title": "Enregistrar la revision", "pad.toolbar.settings.title": "Param\u00e8tres", - "pad.toolbar.embed.title": "Integrar aqueste Pad", + "pad.toolbar.embed.title": "Partejar e integrar aqueste Pad", "pad.toolbar.showusers.title": "Afichar los utilizaires del Pad", "pad.colorpicker.save": "Enregistrar", "pad.colorpicker.cancel": "Anullar", @@ -34,6 +34,7 @@ "pad.settings.stickychat": "Afichar totjorn lo chat", "pad.settings.colorcheck": "Colors d\u2019identificacion", "pad.settings.linenocheck": "Num\u00e8ros de linhas", + "pad.settings.rtlcheck": "Lectura de drecha a esqu\u00e8rra", "pad.settings.fontType": "Tipe de poli\u00e7a :", "pad.settings.fontType.normal": "Normal", "pad.settings.fontType.monospaced": "Monospace", @@ -100,6 +101,8 @@ "timeslider.month.october": "Octobre", "timeslider.month.november": "Novembre", "timeslider.month.december": "Decembre", + "timeslider.unnamedauthor": "{{num}} autor anonime", + "timeslider.unnamedauthors": "{{num}} autors anonimes", "pad.savedrevs.marked": "Aquesta revision es ara marcada coma revision enregistrada", "pad.userlist.entername": "Entratz v\u00f2stre nom", "pad.userlist.unnamed": "sens nom", diff --git a/src/locales/pl.json b/src/locales/pl.json index 0b285b2e9..c16fd5a85 100644 --- a/src/locales/pl.json +++ b/src/locales/pl.json @@ -79,7 +79,7 @@ "pad.share": "Udost\u0119pnij ten dokument", "pad.share.readonly": "Tylko do odczytu", "pad.share.link": "Link", - "pad.share.emebdcode": "Kod do umieszczenia", + "pad.share.emebdcode": "URL do umieszczenia", "pad.chat": "Czat", "pad.chat.title": "Otw\u00f3rz czat dla tego dokumentu.", "pad.chat.loadmessages": "Za\u0142aduj wi\u0119cej wiadomo\u015bci", diff --git a/src/locales/zh-hans.json b/src/locales/zh-hans.json index a7f0f81c2..43975328b 100644 --- a/src/locales/zh-hans.json +++ b/src/locales/zh-hans.json @@ -3,6 +3,7 @@ "authors": [ "Dimension", "Hydra", + "Shangkuanlc", "Yfdyh000", "\u4e4c\u62c9\u8de8\u6c2a", "\u71c3\u7389" @@ -37,6 +38,7 @@ "pad.settings.stickychat": "\u603b\u662f\u5728\u5c4f\u5e55\u4e0a\u663e\u793a\u804a\u5929", "pad.settings.colorcheck": "\u4f5c\u8005\u989c\u8272", "pad.settings.linenocheck": "\u884c\u53f7", + "pad.settings.rtlcheck": "\u4ece\u53f3\u5230\u5de6\u7684\u8bfb\u53d6\u5185\u5bb9\u5417\uff1f", "pad.settings.fontType": "\u5b57\u4f53\u7c7b\u578b\uff1a", "pad.settings.fontType.normal": "\u6b63\u5e38", "pad.settings.fontType.monospaced": "\u7b49\u5bbd\u5b57\u4f53", @@ -85,6 +87,7 @@ "timeslider.exportCurrent": "\u5bfc\u51fa\u76ee\u524d\u7248\u672c\u4e3a\uff1a", "timeslider.version": "\u7b2c {{version}} \u7248\u672c", "timeslider.saved": "\u5728{{year}}\u5e74{{month}}{{day}}\u65e5\u4fdd\u5b58", + "timeslider.dateformat": "{{year}} \u5e74 {{month}} \u6708 {{day}} \u65e5 {{hours}}\u65f6:{{minutes}}\u5206:{{seconds}}\u79d2", "timeslider.month.january": "\u4e00\u6708", "timeslider.month.february": "\u4e8c\u6708", "timeslider.month.march": "\u4e09\u6708", diff --git a/src/locales/zh-hant.json b/src/locales/zh-hant.json index c194545ce..bb48b348f 100644 --- a/src/locales/zh-hant.json +++ b/src/locales/zh-hant.json @@ -1,8 +1,9 @@ { "@metadata": { "authors": { - "0": "Shirayuki", - "2": "Simon Shek" + "0": "Shangkuanlc", + "1": "Shirayuki", + "3": "Simon Shek" } }, "index.newPad": "\u65b0Pad", @@ -17,8 +18,8 @@ "pad.toolbar.unindent.title": "\u51f8\u6392", "pad.toolbar.undo.title": "\u64a4\u92b7\uff08Ctrl-Z\uff09", "pad.toolbar.redo.title": "\u91cd\u505a\uff08Ctrl-Y\uff09", - "pad.toolbar.clearAuthorship.title": "\u6e05\u9664\u4f5c\u540d\u984f\u8272", - "pad.toolbar.import_export.title": "\u4ee5\u5176\u4ed6\u6a94\u6848\u683c\u5f0f\u5c0e\u5165\uff0f\u532f\u51fa", + "pad.toolbar.clearAuthorship.title": "\u6e05\u9664\u5354\u4f5c\u8005\u984f\u8272\u5340\u5225", + "pad.toolbar.import_export.title": "\u4ee5\u5176\u4ed6\u6a94\u6848\u683c\u5f0f\u532f\u5165\uff0f\u532f\u51fa", "pad.toolbar.timeslider.title": "\u6642\u9593\u8ef8", "pad.toolbar.savedRevision.title": "\u5132\u5b58\u4fee\u8a02", "pad.toolbar.settings.title": "\u8a2d\u5b9a", @@ -33,7 +34,7 @@ "pad.settings.padSettings": "Pad\u8a2d\u5b9a", "pad.settings.myView": "\u6211\u7684\u8996\u7a97", "pad.settings.stickychat": "\u6c38\u9060\u5728\u5c4f\u5e55\u4e0a\u986f\u793a\u804a\u5929", - "pad.settings.colorcheck": "\u4f5c\u8005\u984f\u8272", + "pad.settings.colorcheck": "\u5354\u4f5c\u8005\u984f\u8272", "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", @@ -41,7 +42,7 @@ "pad.settings.fontType.monospaced": "\u7b49\u5bec", "pad.settings.globalView": "\u6240\u6709\u4eba\u7684\u8996\u7a97", "pad.settings.language": "\u8a9e\u8a00\uff1a", - "pad.importExport.import_export": "\u5c0e\u5165\uff0f\u532f\u51fa", + "pad.importExport.import_export": "\u532f\u5165\uff0f\u532f\u51fa", "pad.importExport.import": "\u4e0a\u8f09\u4efb\u4f55\u6587\u5b57\u6a94\u6216\u6587\u6a94", "pad.importExport.importSuccessful": "\u5b8c\u6210\uff01", "pad.importExport.export": "\u532f\u51fa\u7576\u524dpad\u70ba\uff1a", @@ -62,13 +63,13 @@ "pad.modals.unauth.explanation": "\u60a8\u7684\u6b0a\u9650\u5728\u67e5\u770b\u6b64\u9801\u6642\u767c\u751f\u66f4\u6539\u3002\u8acb\u5617\u8a66\u91cd\u65b0\u9023\u63a5\u3002", "pad.modals.looping": "\u5df2\u96e2\u7dda\u3002", "pad.modals.looping.explanation": "\u8207\u540c\u6b65\u4f3a\u670d\u5668\u9593\u6709\u901a\u4fe1\u554f\u984c\u3002", - "pad.modals.looping.cause": "\u4e5f\u8a31\u60a8\u901a\u904e\u4e00\u500b\u4e0d\u76f8\u5bb9\u7684\u9632\u706b\u7246\u6216\u4ee3\u7406\u4f3a\u670d\u5668\u9023\u63a5\u3002", + "pad.modals.looping.cause": "\u4e5f\u8a31\u60a8\u662f\u901a\u904e\u4e0d\u76f8\u5bb9\u7684\u9632\u706b\u7246\u6216\u4ee3\u7406\u4f3a\u670d\u5668\u9023\u7dda\u3002", "pad.modals.initsocketfail": "\u7121\u6cd5\u8a2a\u554f\u4f3a\u670d\u5668\u3002", "pad.modals.initsocketfail.explanation": "\u7121\u6cd5\u9023\u63a5\u5230\u540c\u6b65\u4f3a\u670d\u5668\u3002", - "pad.modals.initsocketfail.cause": "\u53ef\u80fd\u662f\u7531\u65bc\u60a8\u7684\u700f\u89bd\u5668\u6216\u60a8\u7684\u4e92\u806f\u7db2\u9023\u63a5\u7684\u554f\u984c\u3002", + "pad.modals.initsocketfail.cause": "\u9019\u53ef\u80fd\u662f\u56e0\u70ba\u700f\u89bd\u5668\u6216\u7db2\u969b\u7db2\u8def\u9023\u7dda\u554f\u984c\u6240\u9020\u6210\u3002", "pad.modals.slowcommit": "\u5df2\u96e2\u7dda\u3002", "pad.modals.slowcommit.explanation": "\u4f3a\u670d\u5668\u6c92\u6709\u56de\u61c9\u3002", - "pad.modals.slowcommit.cause": "\u53ef\u80fd\u662f\u7531\u65bc\u7db2\u8def\u9023\u63a5\u554f\u984c\u3002", + "pad.modals.slowcommit.cause": "\u9019\u53ef\u80fd\u662f\u56e0\u70ba\u7db2\u8def\u9023\u7dda\u554f\u984c\u6240\u9020\u6210\u3002", "pad.modals.deleted": "\u5df2\u522a\u9664\u3002", "pad.modals.deleted.explanation": "\u6b64pad\u5df2\u88ab\u79fb\u9664\u3002", "pad.modals.disconnected": "\u60a8\u5df2\u4e2d\u65b7\u9023\u7dda\u3002", @@ -78,17 +79,17 @@ "pad.share.readonly": "\u552f\u8b80", "pad.share.link": "\u9023\u7d50", "pad.share.emebdcode": "\u5d4c\u5165\u7db2\u5740", - "pad.chat": "\u804a\u5929", - "pad.chat.title": "\u6253\u958b\u6b64pad\u7684\u804a\u5929\u3002", + "pad.chat": "\u804a\u5929\u529f\u80fd", + "pad.chat.title": "\u6253\u958bpad\u804a\u5929\u529f\u80fd", "pad.chat.loadmessages": "\u8f09\u5165\u66f4\u591a\u8a0a\u606f", "timeslider.pageTitle": "{{appTitle}}\u6642\u9593\u8ef8", "timeslider.toolbar.returnbutton": "\u8fd4\u56de\u5230pad", - "timeslider.toolbar.authors": "\u4f5c\u8005\uff1a", - "timeslider.toolbar.authorsList": "\u7121\u4f5c\u8005", + "timeslider.toolbar.authors": "\u5354\u4f5c\u8005\uff1a", + "timeslider.toolbar.authorsList": "\u7121\u5354\u4f5c\u8005", "timeslider.toolbar.exportlink.title": "\u532f\u51fa", "timeslider.exportCurrent": "\u532f\u51fa\u7576\u524d\u7248\u672c\u70ba\uff1a", "timeslider.version": "\u7248\u672c{{version}}", - "timeslider.saved": "{{year}}\u5e74{{month}}{{day}}\u65e5\u4fdd\u5b58", + "timeslider.saved": "{{year}}\u5e74{{month}}\u6708{{day}}\u65e5\u5132\u5b58", "timeslider.dateformat": "{{year}}\u5e74{{month}}\u6708{{day}}\u65e5 {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "1\u6708", "timeslider.month.february": "2\u6708", @@ -102,15 +103,15 @@ "timeslider.month.october": "10\u6708", "timeslider.month.november": "11\u6708", "timeslider.month.december": "12\u6708", - "timeslider.unnamedauthor": "{{num}} \u533f\u540d\u4f5c\u8005", - "timeslider.unnamedauthors": "{{num}} \u533f\u540d\u4f5c\u8005", - "pad.savedrevs.marked": "\u6b64\u4fee\u8a02\u5df2\u6a19\u8a18\u70ba\u5df2\u4fdd\u5b58\u3002", + "timeslider.unnamedauthor": "{{num}} \u533f\u540d\u5354\u4f5c\u8005", + "timeslider.unnamedauthors": "{{num}} \u533f\u540d\u5354\u4f5c\u8005", + "pad.savedrevs.marked": "\u6a19\u8a18\u6b64\u4fee\u8a02\u7248\u672c\u70ba\u5df2\u5132\u5b58\u4fee\u8a02\u7248\u672c\u3002", "pad.userlist.entername": "\u8f38\u5165\u60a8\u7684\u59d3\u540d", "pad.userlist.unnamed": "\u672a\u547d\u540d", "pad.userlist.guest": "\u8a2a\u5ba2", "pad.userlist.deny": "\u62d2\u7d55", "pad.userlist.approve": "\u6279\u51c6", - "pad.editbar.clearcolors": "\u6e05\u9664\u6574\u500b\u6587\u6a94\u7684\u4f5c\u8005\u984f\u8272\u55ce\uff1f", + "pad.editbar.clearcolors": "\u6e05\u9664\u6574\u500b\u6587\u6a94\u7684\u5354\u4f5c\u8005\u984f\u8272\u5340\u5225\u55ce\uff1f", "pad.impexp.importbutton": "\u73fe\u5728\u532f\u5165", "pad.impexp.importing": "\u532f\u5165\u4e2d...", "pad.impexp.confirmimport": "\u532f\u5165\u7684\u6a94\u6848\u5c07\u6703\u8986\u84cbpad\u5167\u76ee\u524d\u7684\u6587\u5b57\u3002\u60a8\u78ba\u5b9a\u8981\u7e7c\u7e8c\u55ce\uff1f", From b4f155c02851de25a718684c4d2fbc99566c6117 Mon Sep 17 00:00:00 2001 From: Kyle Kelley Date: Wed, 12 Jun 2013 11:20:36 -0500 Subject: [PATCH 28/36] Cleanup gophers --- src/static/js/linestylefilter.js | 2 +- src/static/js/pad_utils.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/static/js/linestylefilter.js b/src/static/js/linestylefilter.js index e6fbc2096..af3d09d97 100644 --- a/src/static/js/linestylefilter.js +++ b/src/static/js/linestylefilter.js @@ -260,7 +260,7 @@ linestylefilter.getRegexpFilter = function(regExp, tag) linestylefilter.REGEX_WORDCHAR = /[\u0030-\u0039\u0041-\u005A\u0061-\u007A\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\u1FFF\u3040-\u9FFF\uF900-\uFDFF\uFE70-\uFEFE\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFDC]/; linestylefilter.REGEX_URLCHAR = new RegExp('(' + /[-:@a-zA-Z0-9_.,~%+\/\\?=&#!;()$]/.source + '|' + linestylefilter.REGEX_WORDCHAR.source + ')'); -linestylefilter.REGEX_URL = new RegExp(/(?:(?:https?|s?ftp|ftps|file|smb|afp|nfs|(x-)?man|gopher|txmt):\/\/|mailto:|www\.)/.source + linestylefilter.REGEX_URLCHAR.source + '*(?![:.,;])' + linestylefilter.REGEX_URLCHAR.source, 'g'); +linestylefilter.REGEX_URL = new RegExp(/(?:(?:https?|s?ftp|ftps|file|smb|afp|nfs|(x-)?man|txmt):\/\/|mailto:|www\.)/.source + linestylefilter.REGEX_URLCHAR.source + '*(?![:.,;])' + linestylefilter.REGEX_URLCHAR.source, 'g'); linestylefilter.getURLFilter = linestylefilter.getRegexpFilter( linestylefilter.REGEX_URL, 'url'); diff --git a/src/static/js/pad_utils.js b/src/static/js/pad_utils.js index deee2dfd4..07e7463a2 100644 --- a/src/static/js/pad_utils.js +++ b/src/static/js/pad_utils.js @@ -176,7 +176,7 @@ var padutils = { // copied from ACE var _REGEX_WORDCHAR = /[\u0030-\u0039\u0041-\u005A\u0061-\u007A\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\u1FFF\u3040-\u9FFF\uF900-\uFDFF\uFE70-\uFEFE\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFDC]/; var _REGEX_URLCHAR = new RegExp('(' + /[-:@a-zA-Z0-9_.,~%+\/?=&#;()$]/.source + '|' + _REGEX_WORDCHAR.source + ')'); - var _REGEX_URL = new RegExp(/(?:(?:https?|s?ftp|ftps|file|smb|afp|nfs|(x-)?man|gopher|txmt):\/\/|mailto:)/.source + _REGEX_URLCHAR.source + '*(?![:.,;])' + _REGEX_URLCHAR.source, 'g'); + var _REGEX_URL = new RegExp(/(?:(?:https?|s?ftp|ftps|file|smb|afp|nfs|(x-)?man|txmt):\/\/|mailto:)/.source + _REGEX_URLCHAR.source + '*(?![:.,;])' + _REGEX_URLCHAR.source, 'g'); // returns null if no URLs, or [[startIndex1, url1], [startIndex2, url2], ...] From 82de797642dbf18b93b8183466ec0494ca8dcb57 Mon Sep 17 00:00:00 2001 From: Kyle Kelley Date: Wed, 12 Jun 2013 12:31:38 -0500 Subject: [PATCH 29/36] Only kept URL schemes which have an RFC standard --- src/static/js/linestylefilter.js | 2 +- src/static/js/pad_utils.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/static/js/linestylefilter.js b/src/static/js/linestylefilter.js index af3d09d97..dc8078851 100644 --- a/src/static/js/linestylefilter.js +++ b/src/static/js/linestylefilter.js @@ -260,7 +260,7 @@ linestylefilter.getRegexpFilter = function(regExp, tag) linestylefilter.REGEX_WORDCHAR = /[\u0030-\u0039\u0041-\u005A\u0061-\u007A\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\u1FFF\u3040-\u9FFF\uF900-\uFDFF\uFE70-\uFEFE\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFDC]/; linestylefilter.REGEX_URLCHAR = new RegExp('(' + /[-:@a-zA-Z0-9_.,~%+\/\\?=&#!;()$]/.source + '|' + linestylefilter.REGEX_WORDCHAR.source + ')'); -linestylefilter.REGEX_URL = new RegExp(/(?:(?:https?|s?ftp|ftps|file|smb|afp|nfs|(x-)?man|txmt):\/\/|mailto:|www\.)/.source + linestylefilter.REGEX_URLCHAR.source + '*(?![:.,;])' + linestylefilter.REGEX_URLCHAR.source, 'g'); +linestylefilter.REGEX_URL = new RegExp(/(?:(?:https?|s?ftp|ftps|file|nfs):\/\/|mailto:|www\.)/.source + linestylefilter.REGEX_URLCHAR.source + '*(?![:.,;])' + linestylefilter.REGEX_URLCHAR.source, 'g'); linestylefilter.getURLFilter = linestylefilter.getRegexpFilter( linestylefilter.REGEX_URL, 'url'); diff --git a/src/static/js/pad_utils.js b/src/static/js/pad_utils.js index 07e7463a2..50525e0c6 100644 --- a/src/static/js/pad_utils.js +++ b/src/static/js/pad_utils.js @@ -176,7 +176,7 @@ var padutils = { // copied from ACE var _REGEX_WORDCHAR = /[\u0030-\u0039\u0041-\u005A\u0061-\u007A\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\u1FFF\u3040-\u9FFF\uF900-\uFDFF\uFE70-\uFEFE\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFDC]/; var _REGEX_URLCHAR = new RegExp('(' + /[-:@a-zA-Z0-9_.,~%+\/?=&#;()$]/.source + '|' + _REGEX_WORDCHAR.source + ')'); - var _REGEX_URL = new RegExp(/(?:(?:https?|s?ftp|ftps|file|smb|afp|nfs|(x-)?man|txmt):\/\/|mailto:)/.source + _REGEX_URLCHAR.source + '*(?![:.,;])' + _REGEX_URLCHAR.source, 'g'); + var _REGEX_URL = new RegExp(/(?:(?:https?|s?ftp|ftps|file|nfs):\/\/|mailto:)/.source + _REGEX_URLCHAR.source + '*(?![:.,;])' + _REGEX_URLCHAR.source, 'g'); // returns null if no URLs, or [[startIndex1, url1], [startIndex2, url2], ...] From 8278ef3c7c01b1f6f9cafc2d5b8e64ca729f8390 Mon Sep 17 00:00:00 2001 From: dummys Date: Thu, 13 Jun 2013 15:10:32 +0200 Subject: [PATCH 30/36] added log4js 0.6.6 --- src/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/package.json b/src/package.json index 281a79292..c63cbbc25 100644 --- a/src/package.json +++ b/src/package.json @@ -23,7 +23,7 @@ "clean-css" : "0.3.2", "uglify-js" : "1.2.5", "formidable" : "1.0.9", - "log4js" : "0.5.x", + "log4js" : "0.6.6", "nodemailer" : "0.3.x", "jsdom-nocontextifiy" : "0.2.10", "async-stacktrace" : "0.0.2", From f31db205dafd8a8711db583975b8b2aab568303a Mon Sep 17 00:00:00 2001 From: Chia-liang Kao Date: Sat, 15 Jun 2013 01:37:41 +0800 Subject: [PATCH 31/36] allow cssmanager to manage outer_ace --- src/static/js/ace.js | 26 +++---- src/static/js/ace2_inner.js | 141 ++++++++++++++++++------------------ src/static/js/cssmanager.js | 32 ++++++-- 3 files changed, 110 insertions(+), 89 deletions(-) diff --git a/src/static/js/ace.js b/src/static/js/ace.js index 83ad9447b..db0d596b8 100644 --- a/src/static/js/ace.js +++ b/src/static/js/ace.js @@ -1,5 +1,5 @@ /** - * This code is mostly from the old Etherpad. Please help us to comment this code. + * This code is mostly from the old Etherpad. Please help us to comment this code. * This helps other people to understand this code better and helps them to improve it. * TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED */ @@ -86,7 +86,7 @@ function Ace2Editor() }); actionsPendingInit = []; } - + ace2.registry[info.id] = info; // The following functions (prefixed by 'ace_') are exposed by editor, but @@ -97,7 +97,7 @@ function Ace2Editor() 'applyChangesToBase', 'applyPreparedChangesetToBase', 'setUserChangeNotificationCallback', 'setAuthorInfo', 'setAuthorSelectionRange', 'callWithAce', 'execCommand', 'replaceRange']; - + _.each(aceFunctionsPendingInit, function(fnName,i){ var prefix = 'ace_'; var name = prefix + fnName; @@ -105,18 +105,18 @@ function Ace2Editor() info[prefix + fnName].apply(this, arguments); }); }); - + editor.exportText = function() { if (!loaded) return "(awaiting init)\n"; return info.ace_exportText(); }; - + editor.getFrame = function() { return info.frame || null; }; - + editor.getDebugProperty = function(prop) { return info.ace_getDebugProperty(prop); @@ -221,16 +221,16 @@ function Ace2Editor() // calls to these functions ($$INCLUDE_...) are replaced when this file is processed // and compressed, putting the compressed code from the named file directly into the // source here. - // these lines must conform to a specific format because they are passed by the build script: + // these lines must conform to a specific format because they are passed by the build script: var includedCSS = []; var $$INCLUDE_CSS = function(filename) {includedCSS.push(filename)}; $$INCLUDE_CSS("../static/css/iframe_editor.css"); $$INCLUDE_CSS("../static/css/pad.css"); $$INCLUDE_CSS("../static/custom/pad.css"); - + var additionalCSS = _(hooks.callAll("aceEditorCSS")).map(function(path){ return '../static/plugins/' + path }); includedCSS = includedCSS.concat(additionalCSS); - + pushStyleTagsFor(iframeHTML, includedCSS); if (!Ace2Editor.EMBEDED && Ace2Editor.EMBEDED[KERNEL_SOURCE]) { @@ -304,16 +304,16 @@ window.onload = function () {\n\ $$INCLUDE_CSS("../static/css/iframe_editor.css"); $$INCLUDE_CSS("../static/css/pad.css"); $$INCLUDE_CSS("../static/custom/pad.css"); - - + + var additionalCSS = _(hooks.callAll("aceEditorCSS")).map(function(path){ return '../static/plugins/' + path }); includedCSS = includedCSS.concat(additionalCSS); - + pushStyleTagsFor(outerHTML, includedCSS); // bizarrely, in FF2, a file with no "external" dependencies won't finish loading properly // (throbs busy while typing) - outerHTML.push('', scriptTag(outerScript), '
x
'); + outerHTML.push('', '', scriptTag(outerScript), '
x
'); var outerFrame = document.createElement("IFRAME"); outerFrame.name = "ace_outer"; diff --git a/src/static/js/ace2_inner.js b/src/static/js/ace2_inner.js index f8b266b4e..97540191a 100644 --- a/src/static/js/ace2_inner.js +++ b/src/static/js/ace2_inner.js @@ -1,5 +1,5 @@ /** - * This code is mostly from the old Etherpad. Please help us to comment this code. + * This code is mostly from the old Etherpad. Please help us to comment this code. * This helps other people to understand this code better and helps them to improve it. * TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED */ @@ -36,10 +36,10 @@ var isNodeText = Ace2Common.isNodeText, htmlPrettyEscape = Ace2Common.htmlPrettyEscape, noop = Ace2Common.noop; var hooks = require('./pluginfw/hooks'); - + function Ace2Inner(){ - + var makeChangesetTracker = require('./changesettracker').makeChangesetTracker; var colorutils = require('./colorutils').colorutils; var makeContentCollector = require('./contentcollector').makeContentCollector; @@ -53,9 +53,9 @@ function Ace2Inner(){ var undoModule = require('./undomodule').undoModule; var makeVirtualLineView = require('./virtual_lines').makeVirtualLineView; var AttributeManager = require('./AttributeManager'); - + var DEBUG = false; //$$ build script replaces the string "var DEBUG=true;//$$" with "var DEBUG=false;" - // changed to false + // changed to false var isSetUp = false; var THE_TAB = ' '; //4 @@ -83,9 +83,9 @@ function Ace2Inner(){ initLineNumbers(); var outsideKeyDown = noop; - + var outsideKeyPress = function(){return true;}; - + var outsideNotifyDirty = noop; // selFocusAtStart -- determines whether the selection extends "backwards", so that the focus @@ -101,7 +101,7 @@ function Ace2Inner(){ alines: [], apool: new AttribPool() }; - + // lines, alltext, alines, and DOM are set up in setup() if (undoModule.enabled) { @@ -113,7 +113,7 @@ function Ace2Inner(){ var doesWrap = true; var hasLineNumbers = true; var isStyled = true; - + // space around the innermost iframe element var iframePadLeft = MIN_LINEDIV_WIDTH + LINE_NUMBER_PADDING_RIGHT + EDIT_BODY_PADDING_LEFT; var iframePadTop = EDIT_BODY_PADDING_TOP; @@ -122,7 +122,7 @@ function Ace2Inner(){ var console = (DEBUG && window.console); var documentAttributeManager; - + if (!window.console) { var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"]; @@ -159,7 +159,7 @@ function Ace2Inner(){ var textFace = 'monospace'; var textSize = 12; - + function textLineHeight() { @@ -167,12 +167,14 @@ function Ace2Inner(){ } var dynamicCSS = null; + var outerDynamicCSS = null; var parentDynamicCSS = null; function initDynamicCSS() { dynamicCSS = makeCSSManager("dynamicsyntax"); - parentDynamicCSS = makeCSSManager("dynamicsyntax", true); + outerDynamicCSS = makeCSSManager("dynamicsyntax", "outer"); + parentDynamicCSS = makeCSSManager("dynamicsyntax", "parent"); } var changesetTracker = makeChangesetTracker(scheduler, rep.apool, { @@ -218,6 +220,7 @@ function Ace2Inner(){ var authorStyleSet = hooks.callAll('aceSetAuthorStyle', { dynamicCSS: dynamicCSS, parentDynamicCSS: parentDynamicCSS, + outerDynamicCSS: outerDynamicCSS, info: info, author: author, authorSelector: authorSelector, @@ -562,8 +565,8 @@ function Ace2Inner(){ { return rep.lines.atOffset(charOffset).key; } - - + + function dispose() { disposed = true; @@ -918,14 +921,14 @@ function Ace2Inner(){ editorInfo.ace_doReturnKey = doReturnKey; editorInfo.ace_isBlockElement = isBlockElement; editorInfo.ace_getLineListType = getLineListType; - + editorInfo.ace_callWithAce = function(fn, callStack, normalize) { var wrapper = function() { return fn(editorInfo); }; - + if (normalize !== undefined) { var wrapper1 = wrapper; @@ -951,14 +954,14 @@ function Ace2Inner(){ // @param value the value to set to editorInfo.ace_setProperty = function(key, value) { - - // Convinience function returning a setter for a class on an element + + // Convinience function returning a setter for a class on an element var setClassPresenceNamed = function(element, cls){ return function(value){ setClassPresence(element, cls, !! value) } }; - + // These properties are exposed var setters = { wraps: setWraps, @@ -973,7 +976,7 @@ function Ace2Inner(){ }, grayedout: setClassPresenceNamed(outerWin.document.body, "grayedout"), dmesg: function(){ dmesg = window.dmesg = value; }, - userauthor: function(value){ + userauthor: function(value){ thisAuthor = String(value); documentAttributeManager.author = thisAuthor; }, @@ -986,10 +989,10 @@ function Ace2Inner(){ document.documentElement.dir = value? 'rtl' : 'ltr' } }; - + var setter = setters[key.toLowerCase()]; - - // check if setter is present + + // check if setter is present if(setter !== undefined){ setter(value) } @@ -1098,7 +1101,7 @@ function Ace2Inner(){ return false; } }; - + isTimeUp.elapsed = function() { return now() - startTime; @@ -1479,7 +1482,7 @@ function Ace2Inner(){ var p = PROFILER("getSelection", false); var selection = getSelection(); p.end(); - + function topLevel(n) { if ((!n) || n == root) return null; @@ -1489,7 +1492,7 @@ function Ace2Inner(){ } return n; } - + if (selection) { var node1 = topLevel(selection.startPoint.node); @@ -1747,7 +1750,7 @@ function Ace2Inner(){ root:root, point:selection.startPoint, documentAttributeManager: documentAttributeManager - }); + }); selStart = (selStartFromHook==null||selStartFromHook.length==0)?getLineAndCharForPoint(selection.startPoint):selStartFromHook; } if (selection && !selEnd) @@ -1760,7 +1763,7 @@ function Ace2Inner(){ point:selection.endPoint, documentAttributeManager: documentAttributeManager }); - selEnd = (selEndFromHook==null||selEndFromHook.length==0)?getLineAndCharForPoint(selection.endPoint):selEndFromHook; + selEnd = (selEndFromHook==null||selEndFromHook.length==0)?getLineAndCharForPoint(selection.endPoint):selEndFromHook; } // selection from content collection can, in various ways, extend past final @@ -1781,7 +1784,7 @@ function Ace2Inner(){ // update rep if we have a new selection // NOTE: IE loses the selection when you click stuff in e.g. the // editbar, so removing the selection when it's lost is not a good - // idea. + // idea. if (selection) repSelectionChange(selStart, selEnd, selection && selection.focusAtStart); // update browser selection p.mark("browsel"); @@ -1916,19 +1919,19 @@ function Ace2Inner(){ return rep.selStart[0]; } editorInfo.ace_caretLine = caretLine; - + function caretColumn() { return rep.selStart[1]; } editorInfo.ace_caretColumn = caretColumn; - + function caretDocChar() { return rep.lines.offsetOfIndex(caretLine()) + caretColumn(); } editorInfo.ace_caretDocChar = caretDocChar; - + function handleReturnIndentation() { // on return, indent to level of previous line @@ -2357,8 +2360,8 @@ function Ace2Inner(){ documentAttributeManager.setAttributesOnRange(lineAndColumnFromChar(start), lineAndColumnFromChar(end), attribs); } editorInfo.ace_performDocumentApplyAttributesToCharRange = performDocumentApplyAttributesToCharRange; - - + + function setAttributeOnSelection(attributeName, attributeValue) { if (!(rep.selStart && rep.selEnd)) return; @@ -2921,7 +2924,7 @@ function Ace2Inner(){ { if (lineClass !== null) lineElem.className = lineClass; }; - + result.prepareForAdd = writeClass; result.finishUpdate = writeClass; result.getInnerHTML = function() @@ -3283,7 +3286,7 @@ function Ace2Inner(){ { return (n.tagName || '').toLowerCase() == "a" && n.href; } - + // only want to catch left-click if ((!evt.ctrlKey) && (evt.button != 2) && (evt.button != 3)) { @@ -3319,7 +3322,7 @@ function Ace2Inner(){ { return; } - + var lineNum = rep.selStart[0]; var listType = getLineListType(lineNum); @@ -3444,9 +3447,9 @@ function Ace2Inner(){ var thisLineListType = getLineListType(theLine); var prevLineEntry = (theLine > 0 && rep.lines.atIndex(theLine - 1)); var prevLineBlank = (prevLineEntry && prevLineEntry.text.length == prevLineEntry.lineMarker); - + var thisLineHasMarker = documentAttributeManager.lineHasMarker(theLine); - + if (thisLineListType) { // this line is a list @@ -3521,7 +3524,7 @@ function Ace2Inner(){ return !!REGEX_WORDCHAR.exec(c); } editorInfo.ace_isWordChar = isWordChar; - + function isSpaceChar(c) { return !!REGEX_SPACE.exec(c); @@ -4151,7 +4154,7 @@ function Ace2Inner(){ maxIndex: tn.nodeValue.length }; }; - + var selection = {}; if (origSelectionRange.compareEndPoints("StartToEnd", origSelectionRange) === 0) { @@ -4255,7 +4258,7 @@ function Ace2Inner(){ selection.startPoint = pointFromRangeBound(range.startContainer, range.startOffset); selection.endPoint = pointFromRangeBound(range.endContainer, range.endOffset); selection.focusAtStart = (((range.startContainer != range.endContainer) || (range.startOffset != range.endOffset)) && browserSelection.anchorNode && (browserSelection.anchorNode == range.endContainer) && (browserSelection.anchorOffset == range.endOffset)); - + if(selection.startPoint.node.ownerDocument !== window.document){ return null; } @@ -5020,9 +5023,9 @@ function Ace2Inner(){ } } } - + var listAttributeName = 'list'; - + function getLineListType(lineNum) { return documentAttributeManager.getAttributeOnLine(lineNum, listAttributeName) @@ -5035,7 +5038,7 @@ function Ace2Inner(){ }else{ documentAttributeManager.setAttributeOnLine(lineNum, listAttributeName, listType); } - + //if the list has been removed, it is necessary to renumber //starting from the *next* line because the list may have been //separated. If it returns null, it means that the list was not cut, try @@ -5045,7 +5048,7 @@ function Ace2Inner(){ renumberList(lineNum); } } - + function renumberList(lineNum){ //1-check we are in a list var type = getLineListType(lineNum); @@ -5058,7 +5061,7 @@ function Ace2Inner(){ { return null; } - + //2-find the first line of the list while(lineNum-1 >= 0 && (type=getLineListType(lineNum-1))) { @@ -5067,7 +5070,7 @@ function Ace2Inner(){ break; lineNum--; } - + //3-renumber every list item of the same level from the beginning, level 1 //IMPORTANT: never skip a level because there imbrication may be arbitrary var builder = Changeset.builder(rep.lines.totalWidth()); @@ -5094,7 +5097,7 @@ function Ace2Inner(){ ChangesetUtils.buildKeepRange(rep, builder, loc, (loc = [line, 1]), [ ['start', position] ], rep.apool); - + position++; line++; } @@ -5109,19 +5112,19 @@ function Ace2Inner(){ } return line; } - + applyNumberList(lineNum, 1); var cs = builder.toString(); if (!Changeset.isIdentity(cs)) { performDocumentApplyChangeset(cs); } - + //4-apply the modifications - - + + } - + function doInsertList(type) { @@ -5159,7 +5162,7 @@ function Ace2Inner(){ var t = getLineListType(n); mods.push([n, allLinesAreList ? 'indent' + level : (t ? type + level : type + '1')]); } - + _.each(mods, function(mod){ setLineListType(mod[0], mod[1]); }); @@ -5173,7 +5176,7 @@ function Ace2Inner(){ } editorInfo.ace_doInsertUnorderedList = doInsertUnorderedList; editorInfo.ace_doInsertOrderedList = doInsertOrderedList; - + var lineNumbersShown; var sideDivInner; @@ -5189,11 +5192,11 @@ function Ace2Inner(){ var newNumLines = rep.lines.length(); if (newNumLines < 1) newNumLines = 1; //update height of all current line numbers - + var a = sideDivInner.firstChild; var b = doc.body.firstChild; var n = 0; - + if (currentCallStack && currentCallStack.domClean) { @@ -5222,8 +5225,8 @@ function Ace2Inner(){ b = b.nextSibling; n++; } - } - + } + if (newNumLines != lineNumbersShown) { var container = sideDivInner; @@ -5233,27 +5236,27 @@ function Ace2Inner(){ { lineNumbersShown++; var n = lineNumbersShown; - var div = odoc.createElement("DIV"); + var div = odoc.createElement("DIV"); //calculate height for new line number if(b){ var h = (b.clientHeight || b.offsetHeight); - + if (b.nextSibling){ h = b.nextSibling.offsetTop - b.offsetTop; } } - + if(h){ // apply style to div div.style.height = h +"px"; } - + div.appendChild(odoc.createTextNode(String(n))); fragment.appendChild(div); if(b){ b = b.nextSibling; } } - + container.appendChild(fragment); while (lineNumbersShown > newNumLines) { @@ -5262,8 +5265,8 @@ function Ace2Inner(){ } } } - - + + // Init documentAttributeManager documentAttributeManager = new AttributeManager(rep, performDocumentApplyChangeset); editorInfo.ace_performDocumentApplyAttributesToRange = function () { @@ -5309,13 +5312,13 @@ function Ace2Inner(){ bindTheEventHandlers(); }); - + hooks.callAll('aceInitialized', { editorInfo: editorInfo, rep: rep, documentAttributeManager: documentAttributeManager }); - + scheduler.setTimeout(function() { parent.readyFunc(); // defined in code that sets up the inner iframe diff --git a/src/static/js/cssmanager.js b/src/static/js/cssmanager.js index 62f17496f..710cdbe56 100644 --- a/src/static/js/cssmanager.js +++ b/src/static/js/cssmanager.js @@ -1,5 +1,5 @@ /** - * This code is mostly from the old Etherpad. Please help us to comment this code. + * This code is mostly from the old Etherpad. Please help us to comment this code. * This helps other people to understand this code better and helps them to improve it. * TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED */ @@ -20,14 +20,32 @@ * limitations under the License. */ -function makeCSSManager(emptyStylesheetTitle, parentCss) +function makeCSSManager(emptyStylesheetTitle, doc) { + if (doc === true) + { + doc = 'parent'; + } else if (!doc) { + doc = 'inner'; + } function getSheetByTitle(title) { - if (parentCss) var allSheets = window.parent.parent.document.styleSheets; - else var allSheets = document.styleSheets; - + if (doc === 'parent') + { + win = window.parent.parent; + } + else if (doc === 'inner') { + win = window; + } + else if (doc === 'outer') { + win = window.parent; + } + else { + throw "Unknown dynamic style container"; + } + var allSheets = win.document.styleSheets; + for (var i = 0; i < allSheets.length; i++) { var s = allSheets[i]; @@ -38,8 +56,8 @@ function makeCSSManager(emptyStylesheetTitle, parentCss) } return null; } - - var browserSheet = getSheetByTitle(emptyStylesheetTitle, parentCss); + + var browserSheet = getSheetByTitle(emptyStylesheetTitle); function browserRules() { From 8f262d0eded8798967efb8d1b2d6ec414316a9e9 Mon Sep 17 00:00:00 2001 From: Chia-liang Kao Date: Sat, 15 Jun 2013 11:07:13 +0800 Subject: [PATCH 32/36] document aceSetAuthorStyle --- doc/api/hooks_client-side.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/doc/api/hooks_client-side.md b/doc/api/hooks_client-side.md index 919859417..80dcc52ac 100644 --- a/doc/api/hooks_client-side.md +++ b/doc/api/hooks_client-side.md @@ -261,3 +261,18 @@ This hook is provided to allow whether a given line should be deliniated with mu Multiple authors in one line cause the creation of magic span lines. This might not suit you and now you can disable it and handle your own deliniation. The return value should be either true(disable) or false. + +## aceSetAuthorStyle +Called from: src/static/js/ace2_inner.js + +Things in context: + +1. dynamicCSS - css manger for inner ace +2. outerDynamicCSS - css manager for outer ace +3. parentDynamicCSS - css manager for parent document +4. info - author style info +5. author - author info +6. authorSelector - css selector for author span in inner ace + +This hook is provided to allow author highlight style to be modified. +Registered hooks should return 1 if the plugin handles highlighting. If no plugin returns 1, the core will use the default background-based highlighting. From 837d3bcfbffd6af980e823a31a3a65af750708d5 Mon Sep 17 00:00:00 2001 From: Chia-liang Kao Date: Fri, 7 Jun 2013 01:16:04 +0800 Subject: [PATCH 33/36] Update sauce key --- .travis.yml | 6 +++--- tests/frontend/travis/sauce_tunnel.sh | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.travis.yml b/.travis.yml index 1c40a4eca..74f68f862 100644 --- a/.travis.yml +++ b/.travis.yml @@ -4,14 +4,14 @@ node_js: install: - "bin/installDeps.sh" - "export GIT_HASH=$(cat .git/HEAD | head -c 7)" -before_script: +before_script: - "tests/frontend/travis/sauce_tunnel.sh" script: - "tests/frontend/travis/runner.sh" env: global: - - secure: "gVR70BdAh093qBS5P5+V5NzmCYnLFFeIZn3XdgTpgpGRm7UE8GP53TEobtPf\neqpEpbWRTsEbdf+QPisVWrBZcNPFU4I3nucIqdyVobIcQD0TbBQYudm0yLQd\n3Ocqck0BIx9Ni9hBklJupmKt89LDQxNvkEb+uJJqlQwo2RZd36U=" - - SAUCE_USER=etherpad + - secure: "WMGxFkOeTTlhWB+ChMucRtIqVmMbwzYdNHuHQjKCcj8HBEPdZLfCuK/kf4rG\nVLcLQiIsyllqzNhBGVHG1nyqWr0/LTm8JRqSCDDVIhpyzp9KpCJQQJG2Uwjk\n6/HIJJh/wbxsEdLNV2crYU/EiVO3A4Bq0YTHUlbhUqG3mSCr5Ec=" + - secure: "gejXUAHYscbR6Bodw35XexpToqWkv2ifeECsbeEmjaLkYzXmUUNWJGknKSu7\nEUsSfQV8w+hxApr1Z+jNqk9aX3K1I4btL3cwk2trnNI8XRAvu1c1Iv60eerI\nkE82Rsd5lwUaMEh+/HoL8ztFCZamVndoNgX7HWp5J/NRZZMmh4g=" jdk: - oraclejdk6 notifications: diff --git a/tests/frontend/travis/sauce_tunnel.sh b/tests/frontend/travis/sauce_tunnel.sh index 21ff3ff5a..f519f8d95 100755 --- a/tests/frontend/travis/sauce_tunnel.sh +++ b/tests/frontend/travis/sauce_tunnel.sh @@ -4,7 +4,7 @@ curl http://saucelabs.com/downloads/Sauce-Connect-latest.zip > /tmp/sauce.zip unzip /tmp/sauce.zip -d /tmp # start the sauce connector in background and make sure it doesn't output the secret key -(java -jar /tmp/Sauce-Connect.jar $SAUCE_USER $SAUCE_ACCESS_KEY -f /tmp/tunnel > /dev/null )& +(java -jar /tmp/Sauce-Connect.jar $SAUCE_USERNAME $SAUCE_ACCESS_KEY -f /tmp/tunnel > /dev/null )& # save the sauce pid in a file echo $! > /tmp/sauce.pid From 315e229c8364cff7713e6b5ea8c3ba3b7a46179a Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Mon, 17 Jun 2013 11:28:14 +0000 Subject: [PATCH 34/36] Localisation updates from http://translatewiki.net. --- src/locales/ar.json | 34 ++++++++++++- src/locales/eu.json | 121 ++++++++++++++++++++++++++++++++++++++++++++ src/locales/fo.json | 12 ++--- src/locales/fr.json | 2 +- src/locales/km.json | 12 ++--- src/locales/lt.json | 12 ++--- 6 files changed, 172 insertions(+), 21 deletions(-) create mode 100644 src/locales/eu.json diff --git a/src/locales/ar.json b/src/locales/ar.json index 43d3bb07f..339a7fde8 100644 --- a/src/locales/ar.json +++ b/src/locales/ar.json @@ -5,6 +5,8 @@ "Tux-tn" ] }, + "index.newPad": "\u0628\u0627\u062f \u062c\u062f\u064a\u062f", + "index.createOpenPad": "\u0623\u0648 \u0635\u0646\u0639/\u0641\u062a\u062d \u0628\u0627\u062f \u0628\u0648\u0636\u0639 \u0625\u0633\u0645\u0647:", "pad.toolbar.bold.title": "\u0633\u0645\u064a\u0643 (Ctrl-B)", "pad.toolbar.italic.title": "\u0645\u0627\u0626\u0644 (Ctrl-I)", "pad.toolbar.underline.title": "\u062a\u0633\u0637\u064a\u0631 (Ctrl-U)", @@ -17,20 +19,31 @@ "pad.toolbar.redo.title": "\u062a\u0643\u0631\u0627\u0631 (Ctrl-Y)", "pad.toolbar.import_export.title": "\u0627\u0633\u062a\u064a\u0631\u0627\u062f/\u062a\u0635\u062f\u064a\u0631 \u0645\u0646/\u0625\u0644\u0649 \u062a\u0646\u0633\u064a\u0642\u0627\u062a \u0645\u0644\u0641\u0627\u062a \u0645\u062e\u062a\u0644\u0641\u0629", "pad.toolbar.timeslider.title": "\u0645\u062a\u0635\u0641\u062d \u0627\u0644\u062a\u0627\u0631\u064a\u062e", - "pad.toolbar.savedRevision.title": "\u0627\u0644\u062a\u0646\u0642\u064a\u062d\u0627\u062a \u0627\u0644\u0645\u062d\u0641\u0648\u0638\u0629", + "pad.toolbar.savedRevision.title": "\u062d\u0641\u0638 \u0627\u0644\u0645\u0631\u0627\u062c\u0639\u0629", "pad.toolbar.settings.title": "\u0627\u0644\u0625\u0639\u062f\u0627\u062f\u0627\u062a", + "pad.toolbar.embed.title": "\u062a\u0628\u0627\u062f\u0644 \u0648 \u062a\u0636\u0645\u064a\u0646 \u0647\u0630\u0627 \u0627\u0644\u0628\u0627\u062f", + "pad.toolbar.showusers.title": "\u0639\u0631\u0636 \u0627\u0644\u0645\u0633\u062a\u062e\u062f\u0645\u064a\u0646 \u0639\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u0628\u0627\u062f", "pad.colorpicker.save": "\u062a\u0633\u062c\u064a\u0644", "pad.colorpicker.cancel": "\u0625\u0644\u063a\u0627\u0621", "pad.loading": "\u062c\u0627\u0631\u064a \u0627\u0644\u062a\u062d\u0645\u064a\u0644...", + "pad.passwordRequired": "\u062a\u062d\u062a\u0627\u062c \u0625\u0644\u0649 \u0643\u0644\u0645\u0629 \u0645\u0631\u0648\u0631 \u0644\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0647\u0630\u0627 \u0627\u0644\u0628\u0627\u062f", + "pad.permissionDenied": "\u0644\u064a\u0633 \u0644\u062f\u064a\u0643 \u0625\u0630\u0646 \u0644\u062f\u062e\u0648\u0644 \u0647\u0630\u0627 \u0627\u0644\u0628\u0627\u062f", + "pad.wrongPassword": "\u0643\u0627\u0646\u062a \u0643\u0644\u0645\u0629 \u0627\u0644\u0645\u0631\u0648\u0631 \u062e\u0627\u0637\u0626\u0629", + "pad.settings.padSettings": "\u0625\u0639\u062f\u0627\u062f\u0627\u062a \u0627\u0644\u0628\u0627\u062f", + "pad.settings.myView": "\u0631\u0624\u064a\u062a\u064a", "pad.settings.stickychat": "\u0627\u0644\u062f\u0631\u062f\u0634\u0629 \u062f\u0627\u0626\u0645\u0627 \u0639\u0644\u0649 \u0627\u0644\u0634\u0627\u0634\u0629", + "pad.settings.colorcheck": "\u0623\u0644\u0648\u0627\u0646 \u0627\u0644\u062a\u0623\u0644\u064a\u0641", "pad.settings.linenocheck": "\u0623\u0631\u0642\u0627\u0645 \u0627\u0644\u0623\u0633\u0637\u0631", + "pad.settings.rtlcheck": "\u0642\u0631\u0627\u0621\u0629 \u0627\u0644\u0645\u062d\u062a\u0648\u064a\u0627\u062a \u0645\u0646 \u0627\u0644\u064a\u0645\u064a\u0646 \u0625\u0644\u0649 \u0627\u0644\u064a\u0633\u0627\u0631\u061f", "pad.settings.fontType": "\u0646\u0648\u0639 \u0627\u0644\u062e\u0637:", "pad.settings.fontType.normal": "\u0639\u0627\u062f\u064a", "pad.settings.fontType.monospaced": "\u062b\u0627\u0628\u062a \u0627\u0644\u0639\u0631\u0636", + "pad.settings.globalView": "\u0627\u0644\u0631\u0624\u064a\u0629 \u0627\u0644\u0634\u0627\u0645\u0644\u0629", "pad.settings.language": "\u0627\u0644\u0644\u063a\u0629:", "pad.importExport.import_export": "\u0627\u0633\u062a\u064a\u0631\u0627\u062f/\u062a\u0635\u062f\u064a\u0631", "pad.importExport.import": "\u062a\u062d\u0645\u064a\u0644 \u0623\u064a \u0645\u0644\u0641 \u0646\u0635\u064a \u0623\u0648 \u0648\u062b\u064a\u0642\u0629", "pad.importExport.importSuccessful": "\u0646\u0627\u062c\u062d!", + "pad.importExport.export": "\u062a\u0635\u062f\u064a\u0631 \u0627\u0644\u0628\u0627\u062f \u0627\u0644\u062d\u0627\u0644\u064a \u0628\u0635\u0641\u0629:", "pad.importExport.exporthtml": "\u0625\u062a\u0634 \u062a\u064a \u0625\u0645 \u0625\u0644", "pad.importExport.exportplain": "\u0646\u0635 \u0639\u0627\u062f\u064a", "pad.importExport.exportword": "\u0645\u0627\u064a\u0643\u0631\u0648\u0633\u0648\u0641\u062a \u0648\u0648\u0631\u062f", @@ -38,7 +51,11 @@ "pad.importExport.exportopen": "ODF (\u0646\u0633\u0642 \u0627\u0644\u0645\u0633\u062a\u0646\u062f \u0627\u0644\u0645\u0641\u062a\u0648\u062d)", "pad.importExport.exportdokuwiki": "\u062f\u0648\u06a9\u0648\u0648\u064a\u0643\u064a", "pad.modals.connected": "\u0645\u062a\u0635\u0644.", + "pad.modals.reconnecting": "\u0625\u0639\u0627\u062f\u0629 \u0627\u0644\u0627\u062a\u0635\u0627\u0644 \u0628\u0628\u0627\u062f\u0643", "pad.modals.forcereconnect": "\u0641\u0631\u0636 \u0625\u0639\u0627\u062f\u0629 \u0627\u0644\u0627\u062a\u0635\u0627\u0644", + "pad.modals.userdup": "\u0645\u0641\u062a\u0648\u062d \u0641\u064a \u0646\u0627\u0641\u0630\u0629 \u0623\u062e\u0631\u0649", + "pad.modals.userdup.explanation": "\u064a\u0628\u062f\u0648 \u0623\u0646 \u0647\u0630\u0627 \u0627\u0644\u0628\u0627\u062f \u062a\u0645 \u0641\u062a\u062d\u0647 \u0641\u064a \u0623\u0643\u062b\u0631 \u0645\u0646 \u0646\u0627\u0641\u0630\u0629 \u0645\u062a\u0635\u0641\u062d \u0641\u064a \u0647\u0630\u0627 \u0627\u0644\u062d\u0627\u0633\u0648\u0628.", + "pad.modals.userdup.advice": "\u0625\u0639\u0627\u062f\u0629 \u0627\u0644\u0627\u062a\u0635\u0627\u0644 \u0644\u0625\u0633\u062a\u0639\u0645\u0627\u0644 \u0647\u0630\u0647 \u0627\u0644\u0646\u0627\u0641\u0630\u0629 \u0628\u062f\u0644\u0627\u064b \u0645\u0646 \u0627\u0644\u0627\u062e\u0631\u0649.", "pad.modals.unauth": "\u063a\u064a\u0631 \u0645\u062e\u0648\u0644", "pad.modals.looping": "\u062a\u0645 \u0642\u0637\u0639 \u0627\u0644\u0627\u062a\u0635\u0627\u0644.", "pad.modals.initsocketfail": "\u0644\u0627 \u064a\u0645\u0643\u0646 \u0627\u0644\u0648\u0635\u0648\u0644 \u0625\u0644\u0649 \u0627\u0644\u062e\u0627\u062f\u0645", @@ -47,16 +64,24 @@ "pad.modals.slowcommit.explanation": "\u0627\u0644\u062e\u0627\u062f\u0645 \u0644\u0627 \u064a\u0633\u062a\u062c\u064a\u0628.", "pad.modals.slowcommit.cause": "\u064a\u0645\u0643\u0646 \u0623\u0646 \u064a\u0643\u0648\u0646 \u0647\u0630\u0627 \u0628\u0633\u0628\u0628 \u0645\u0634\u0627\u0643\u0644 \u0641\u064a \u0627\u0644\u0627\u062a\u0635\u0627\u0644 \u0628\u0627\u0644\u0634\u0628\u0643\u0629.", "pad.modals.deleted": "\u0645\u062d\u0630\u0648\u0641.", + "pad.modals.deleted.explanation": "\u062a\u0645\u062a \u0625\u0632\u0627\u0644\u0629 \u0647\u0630\u0627 \u0627\u0644\u0628\u0627\u062f", "pad.modals.disconnected": "\u0644\u0645 \u062a\u0639\u062f \u0645\u062a\u0651\u0635\u0644.", "pad.modals.disconnected.explanation": "\u062a\u0645 \u0641\u0642\u062f\u0627\u0646 \u0627\u0644\u0625\u062a\u0635\u0627\u0644 \u0628\u0627\u0644\u062e\u0627\u062f\u0645", "pad.modals.disconnected.cause": "\u0642\u062f \u064a\u0643\u0648\u0646 \u0627\u0644\u062e\u0627\u062f\u0645 \u063a\u064a\u0631 \u0645\u062a\u0648\u0641\u0631. \u0627\u0644\u0631\u062c\u0627\u0621 \u0625\u0639\u0644\u0627\u0645\u0646\u0627 \u0625\u0630\u0627 \u062a\u0643\u0631\u0631 \u0647\u0630\u0627.", "pad.share.readonly": "\u0644\u0644\u0642\u0631\u0627\u0621\u0629 \u0641\u0642\u0637", "pad.share.link": "\u0631\u0627\u0628\u0637", + "pad.share.emebdcode": "URL \u0644\u0644\u062a\u0636\u0645\u064a\u0646", "pad.chat": "\u062f\u0631\u062f\u0634\u0629", + "pad.chat.title": "\u0641\u062a\u062d \u0627\u0644\u062f\u0631\u062f\u0634\u0629 \u0644\u0647\u0630\u0627 \u0627\u0644\u0628\u0627\u062f", + "pad.chat.loadmessages": "\u062a\u062d\u0645\u064a\u0644 \u0627\u0644\u0645\u0632\u064a\u062f \u0645\u0646 \u0627\u0644\u0631\u0633\u0627\u0626\u0644", + "timeslider.toolbar.returnbutton": "\u0627\u0644\u0639\u0648\u062f\u0629 \u0625\u0644\u0649 \u0627\u0644\u0628\u0627\u062f", "timeslider.toolbar.authors": "\u0627\u0644\u0645\u0624\u0644\u0641\u0648\u0646:", "timeslider.toolbar.authorsList": "\u0628\u062f\u0648\u0646 \u0645\u0624\u0644\u0641\u064a\u0646", + "timeslider.toolbar.exportlink.title": "\u062a\u0635\u062f\u064a\u0631", "timeslider.exportCurrent": "\u062a\u0635\u062f\u064a\u0631 \u0627\u0644\u0646\u0633\u062e\u0629 \u0627\u0644\u062d\u0627\u0644\u064a\u0629 \u0643:", "timeslider.version": "\u0625\u0635\u062f\u0627\u0631 {{version}}", + "timeslider.saved": "\u0645\u062d\u0641\u0648\u0638 {{month}} {{day}}, {{year}}", + "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "\u064a\u0646\u0627\u064a\u0631", "timeslider.month.february": "\u0641\u0628\u0631\u0627\u064a\u0631", "timeslider.month.march": "\u0645\u0627\u0631\u0633", @@ -73,5 +98,10 @@ "pad.userlist.unnamed": "\u063a\u064a\u0631 \u0645\u0633\u0645\u0649", "pad.userlist.guest": "\u0636\u064a\u0641", "pad.userlist.deny": "\u0631\u0641\u0636", - "pad.userlist.approve": "\u0645\u0648\u0627\u0641\u0642\u0629" + "pad.userlist.approve": "\u0645\u0648\u0627\u0641\u0642\u0629", + "pad.impexp.importbutton": "\u0627\u0644\u0627\u0633\u062a\u064a\u0631\u0627\u062f \u0627\u0644\u0622\u0646", + "pad.impexp.importing": "\u0627\u0644\u0627\u0633\u062a\u064a\u0631\u0627\u062f...", + "pad.impexp.uploadFailed": "\u0641\u0634\u0644 \u0627\u0644\u062a\u062d\u0645\u064a\u0644\u060c \u0627\u0644\u0631\u062c\u0627\u0621 \u0627\u0644\u0645\u062d\u0627\u0648\u0644\u0629 \u0645\u0631\u0629 \u0623\u062e\u0631\u0649", + "pad.impexp.importfailed": "\u0641\u0634\u0644 \u0627\u0644\u0627\u0633\u062a\u064a\u0631\u0627\u062f", + "pad.impexp.copypaste": "\u0627\u0644\u0631\u062c\u0627\u0621 \u0646\u0633\u062e/\u0644\u0635\u0642" } \ No newline at end of file diff --git a/src/locales/eu.json b/src/locales/eu.json new file mode 100644 index 000000000..99a76e0d1 --- /dev/null +++ b/src/locales/eu.json @@ -0,0 +1,121 @@ +{ + "@metadata": { + "authors": [ + "Theklan" + ] + }, + "index.newPad": "Pad berria", + "index.createOpenPad": "edo sortu/ireki Pad bat honako izenarekin:", + "pad.toolbar.bold.title": "Lodia (Ctrl-B)", + "pad.toolbar.italic.title": "Etzana (Ctrl-I)", + "pad.toolbar.underline.title": "Azpimarratua (Ctrl-U)", + "pad.toolbar.strikethrough.title": "Ezabatua", + "pad.toolbar.ol.title": "Zerrenda ordenatua", + "pad.toolbar.ul.title": "Zerrenda ez-ordenatua", + "pad.toolbar.indent.title": "Koska", + "pad.toolbar.unindent.title": "Koska kendu", + "pad.toolbar.undo.title": "Desegin (Ctrl-Z)", + "pad.toolbar.redo.title": "Berregin (Ctrl-Y)", + "pad.toolbar.clearAuthorship.title": "Ezabatu Egiletza Koloreak", + "pad.toolbar.import_export.title": "Inportatu/Esportatu fitxategi formatu ezberdinetara/ezberdinetatik", + "pad.toolbar.timeslider.title": "Denbora lerroa", + "pad.toolbar.savedRevision.title": "Gorde berrikuspena", + "pad.toolbar.settings.title": "Hobespenak", + "pad.toolbar.embed.title": "Partekatu eta Txertatu pad hau", + "pad.toolbar.showusers.title": "Erakutsi pad honetako erabiltzaileak", + "pad.colorpicker.save": "Gorde", + "pad.colorpicker.cancel": "Utzi", + "pad.loading": "Kargatzen...", + "pad.passwordRequired": "Pasahitza behar duzu pad honetara sartzeko", + "pad.permissionDenied": "Ez duzu bamienik pad honetara sartzeko", + "pad.wrongPassword": "Zure pasahitza oker zegoen", + "pad.settings.padSettings": "Pad hobespenak", + "pad.settings.myView": "Nire ikusmoldea", + "pad.settings.stickychat": "Txata beti pantailan", + "pad.settings.colorcheck": "Egiletzaren koloreak", + "pad.settings.linenocheck": "Lerro zenbakiak", + "pad.settings.rtlcheck": "Edukia eskubitik ezkerrera irakurri?", + "pad.settings.fontType": "Tipografia:", + "pad.settings.fontType.normal": "Arrunta", + "pad.settings.fontType.monospaced": "Monospace", + "pad.settings.globalView": "Ikuspegi Globala", + "pad.settings.language": "Hizkuntza:", + "pad.importExport.import_export": "Inportatu/Esportatu", + "pad.importExport.import": "Igo edozein testu fitxategi edo dokumentu", + "pad.importExport.importSuccessful": "Arrakastatsua!", + "pad.importExport.export": "Oraingo pad hau honela esportatu:", + "pad.importExport.exporthtml": "HTML", + "pad.importExport.exportplain": "Testu laua", + "pad.importExport.exportword": "Microsoft Word", + "pad.importExport.exportpdf": "PDF", + "pad.importExport.exportopen": "ODF (Open Document Format)", + "pad.importExport.exportdokuwiki": "DocuWiki", + "pad.importExport.abiword.innerHTML": "Testu laua edo html formatudun testuak bakarrik inporta ditzakezu. Aurreratuagoak diren inportazio aukerak izateko \u003Ca href=\"https://github.com/ether/etherpad-lite/wiki/How-to-enable-importing-and-exporting-different-file-formats-in-Ubuntu-or-OpenSuse-or-SLES-with-AbiWord\"\u003Eabiword instala ezazu\u003C/a\u003E.", + "pad.modals.connected": "Konektatuta.", + "pad.modals.reconnecting": "Zure pad-era birkonektatu...", + "pad.modals.forcereconnect": "Berkonexioa fortzatu", + "pad.modals.userdup": "Beste leiho batean ireki da", + "pad.modals.userdup.explanation": "Pad hau zure nabigatzailearen beste leiho batean irekita dagoela ematen du.", + "pad.modals.userdup.advice": "Berriro konektatu beste leiho hau erabiltzeko.", + "pad.modals.unauth": "Baimenik gabe", + "pad.modals.unauth.explanation": "Orrialdea ikusten ari zinela zure baimenak aldatu dira. Saia zaitez berriro konektatzen.", + "pad.modals.looping": "Deskonektatua.", + "pad.modals.looping.explanation": "Sinkronizazio zerbitzariarekin komunikazioa arazoak daude.", + "pad.modals.looping.cause": "Agian firewall edo proxy ez-bateragarri baten bidez konektatu zara.", + "pad.modals.initsocketfail": "Zerbitzarira ezin da iritsi.", + "pad.modals.initsocketfail.explanation": "Ezin izan da konektatu sinkronizazio zerbitzarira.", + "pad.modals.initsocketfail.cause": "Ziurrenik hau zure nabigatzailea edo internet konexioaren arazo bat dela eta izango da.", + "pad.modals.slowcommit": "Deskonektatu.", + "pad.modals.slowcommit.explanation": "Zerbitzariak ez du erantzuten.", + "pad.modals.slowcommit.cause": "Baliteke hau sarearen konexio arazoak direla eta izatea.", + "pad.modals.deleted": "Ezabatua.", + "pad.modals.deleted.explanation": "Pad hau ezabatua izan da.", + "pad.modals.disconnected": "Deskonektatua izan zara.", + "pad.modals.disconnected.explanation": "Zerbitzariaren konexioa galdu da", + "pad.modals.disconnected.cause": "Baliteke zerbitzaria irisgarria ez izatea. Mesedez, esaiguzu hau gertatzen jarraitzen badu.", + "pad.share": "Pad hau partekatu", + "pad.share.readonly": "Irakurtzeko bakarrik", + "pad.share.link": "Lotura", + "pad.share.emebdcode": "URLa txertatu", + "pad.chat": "Txata", + "pad.chat.title": "Pad honetarako txata ireki.", + "pad.chat.loadmessages": "Mezu gehiago kargatu", + "timeslider.pageTitle": "{{appTitle}} denbora lerroa", + "timeslider.toolbar.returnbutton": "Padera itzuli", + "timeslider.toolbar.authors": "Egileak:", + "timeslider.toolbar.authorsList": "Egilerik gabe", + "timeslider.toolbar.exportlink.title": "Esportatu", + "timeslider.exportCurrent": "Gorde bertsio hau honela:", + "timeslider.version": "Bertsioa {{version}}", + "timeslider.saved": "{{year}}ko {{month}}ren {{day}}an gordeta", + "timeslider.dateformat": "{{year}}/{{month}}/{{day}} {{hours}}:{{minutes}}:{{seconds}}", + "timeslider.month.january": "Urtarrila", + "timeslider.month.february": "Otsaila", + "timeslider.month.march": "Martxoa", + "timeslider.month.april": "Apirila", + "timeslider.month.may": "Maiatza", + "timeslider.month.june": "Ekaina", + "timeslider.month.july": "Uztaila", + "timeslider.month.august": "Abuztua", + "timeslider.month.september": "Iraila", + "timeslider.month.october": "Urria", + "timeslider.month.november": "Azaroa", + "timeslider.month.december": "Abendua", + "timeslider.unnamedauthor": "{{num}} izenik gabeko egilea", + "timeslider.unnamedauthors": "{{num}} izenik gabeko egileak", + "pad.savedrevs.marked": "Berrikuspen hau markatua dago gordetako berrikuspen gisa", + "pad.userlist.entername": "Sartu zure erabiltzaile izena", + "pad.userlist.unnamed": "izenik gabe", + "pad.userlist.guest": "Gonbidatua", + "pad.userlist.deny": "Ukatu", + "pad.userlist.approve": "Onartu", + "pad.editbar.clearcolors": "Ezabatu egile koloreak dokumentu osoan?", + "pad.impexp.importbutton": "Inportatu orain", + "pad.impexp.importing": "Inportatzen...", + "pad.impexp.confirmimport": "Fitxategi bat inportatzen baduzu oraingo pad honen testua ezabatuko da. Ziur zaude jarraitu nahi duzula?", + "pad.impexp.convertFailed": "Ez gara gai fitxategi hau inportatzeko. Erabil ezazu, mesedez, beste dokumentu formatu bat edo kopiatu eta itsasi eskuz.", + "pad.impexp.uploadFailed": "Igotzean akatsa egon da, saia zaitez berriro", + "pad.impexp.importfailed": "Inportazioak akatsa egin du", + "pad.impexp.copypaste": "Mesedez kopiatu eta pegatu", + "pad.impexp.exportdisabled": "{{type}} formatuarekin esportatzea desgaituta dago. Kontakta ezazu administratzailea detaile gehiagorako." +} \ No newline at end of file diff --git a/src/locales/fo.json b/src/locales/fo.json index 45f6548c0..93b467888 100644 --- a/src/locales/fo.json +++ b/src/locales/fo.json @@ -1,4 +1,9 @@ { + "@metadata": { + "authors": [ + "EileenSanda" + ] + }, "index.newPad": "N\u00fdggjur teldil", "pad.toolbar.bold.title": "Vi\u00f0 feitum (Ctrl-B)", "pad.toolbar.italic.title": "Skr\u00e1skrift (Ctrl-I)", @@ -88,10 +93,5 @@ "pad.userlist.unnamed": "ikki-navngivi\u00f0", "pad.userlist.guest": "Gestur", "pad.userlist.deny": "Nokta", - "pad.userlist.approve": "G\u00f3\u00f0kenn", - "@metadata": { - "authors": [ - "EileenSanda" - ] - } + "pad.userlist.approve": "G\u00f3\u00f0kenn" } \ No newline at end of file diff --git a/src/locales/fr.json b/src/locales/fr.json index 5b14619c2..272faf93f 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -101,7 +101,7 @@ "timeslider.exportCurrent": "Exporter la version actuelle en\u00a0:", "timeslider.version": "Version {{version}}", "timeslider.saved": "Enregistr\u00e9 le {{day}} {{month}} {{year}}", - "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{secondes}}", + "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Janvier", "timeslider.month.february": "F\u00e9vrier", "timeslider.month.march": "Mars", diff --git a/src/locales/km.json b/src/locales/km.json index e32a26f72..095a8b53e 100644 --- a/src/locales/km.json +++ b/src/locales/km.json @@ -1,4 +1,9 @@ { + "@metadata": { + "authors": [ + "\u179c\u17d0\u178e\u1790\u17b6\u179a\u17b7\u1791\u17d2\u1792" + ] + }, "index.newPad": "\u1795\u17c1\u178f\u1790\u17d2\u1798\u17b8", "index.createOpenPad": "\u17ac\u1794\u1784\u17d2\u1780\u17be\u178f/\u1794\u17be\u1780\u1795\u17c1\u178f\u178a\u17c2\u179b\u1798\u17b6\u1793\u1788\u17d2\u1798\u17c4\u17c7\u17d6", "pad.toolbar.bold.title": "\u178a\u17b7\u178f (Ctrl-B)", @@ -43,10 +48,5 @@ "timeslider.month.december": "\u1792\u17d2\u1793\u17bc", "pad.userlist.guest": "\u1797\u17d2\u1789\u17c0\u179c", "pad.impexp.importbutton": "\u1793\u17b6\u17c6\u1785\u17bc\u179b\u17a5\u17a1\u17bc\u179c\u1793\u17c1\u17c7", - "pad.impexp.importing": "\u1780\u17c6\u1796\u17bb\u1784\u1793\u17b6\u17c6\u1785\u17bc\u179b\u200b...", - "@metadata": { - "authors": [ - "\u179c\u17d0\u178e\u1790\u17b6\u179a\u17b7\u1791\u17d2\u1792" - ] - } + "pad.impexp.importing": "\u1780\u17c6\u1796\u17bb\u1784\u1793\u17b6\u17c6\u1785\u17bc\u179b\u200b..." } \ No newline at end of file diff --git a/src/locales/lt.json b/src/locales/lt.json index db40b306d..f75ff214a 100644 --- a/src/locales/lt.json +++ b/src/locales/lt.json @@ -1,4 +1,9 @@ { + "@metadata": { + "authors": [ + "Mantak111" + ] + }, "pad.toolbar.bold.title": "Pary\u0161kintasis (Ctrl-B)", "pad.toolbar.italic.title": "Pasvirasis (Ctrl-I)", "pad.toolbar.underline.title": "Pabraukimas (Ctrl-U)", @@ -63,10 +68,5 @@ "pad.impexp.importing": "Importuojama...", "pad.impexp.uploadFailed": "\u012ek\u0117limas nepavyko, bandykite dar kart\u0105", "pad.impexp.importfailed": "Importuoti nepavyko", - "pad.impexp.copypaste": "Pra\u0161ome nukopijuoti ir \u012fklijuoti", - "@metadata": { - "authors": [ - "Mantak111" - ] - } + "pad.impexp.copypaste": "Pra\u0161ome nukopijuoti ir \u012fklijuoti" } \ No newline at end of file From 306c4047eab6128d23143f035cae0cba4006c5a2 Mon Sep 17 00:00:00 2001 From: John McLear Date: Sun, 23 Jun 2013 16:09:08 +0200 Subject: [PATCH 35/36] Fix broken git guide link --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 147e6637d..75be57534 100644 --- a/README.md +++ b/README.md @@ -81,7 +81,7 @@ Documentation can be found in `docs/`. # Development ## Things you should know -Read this [git guide](http://learn.github.com/p/intro.html) and watch this [video on getting started with Etherpad Development](http://youtu.be/67-Q26YH97E). +Read this [git guide](http://learn.github.com/p/index.html) and watch this [video on getting started with Etherpad Development](http://youtu.be/67-Q26YH97E). If you're new to node.js, start with Ryan Dahl's [Introduction to Node.js](http://youtu.be/jo_B4LTHi3I). From ba1a5da76dea1051435bca4fadd9fb0721e8d38d Mon Sep 17 00:00:00 2001 From: John McLear Date: Mon, 24 Jun 2013 13:35:17 +0100 Subject: [PATCH 36/36] bump and changelog --- CHANGELOG.md | 13 +++++++++++++ src/package.json | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8abebf814..0d25d5b44 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ +# 1.2.11 + * NEW: New Hook for outer_ace dynamic css manager and author style hook + * NEW: Bump log4js for improved logging + * Fix: Remove URL schemes which don't have RFC standard + * Fix: Fix safeRun subsequent restarts issue + * Fix: Allow safeRun to pass arguements to run.sh + * Fix: Include script for more efficient import + * Fix: Fix sysv comptibile script + * Fix: Fix client side changeset spamming + * Fix: Don't crash on no-auth + * Fix: Fix some IE8 errors + * Fix: Fix authorship sanitation + # 1.2.10 * NEW: Broadcast slider is exposed in timeslider so plugins can interact with it * Fix: IE issue where pads wouldn't load due to missing console from i18n diff --git a/src/package.json b/src/package.json index c63cbbc25..2dd9ac8ec 100644 --- a/src/package.json +++ b/src/package.json @@ -47,5 +47,5 @@ "engines" : { "node" : ">=0.6.3", "npm" : ">=1.0" }, - "version" : "1.2.10" + "version" : "1.2.11" }