From 1bf526124d5e7f8949504b7f2ed225b201f66178 Mon Sep 17 00:00:00 2001 From: John McLear Date: Sun, 20 Jan 2013 22:34:27 +0000 Subject: [PATCH 01/67] resolve #1349 --- src/static/js/admin/plugins.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/static/js/admin/plugins.js b/src/static/js/admin/plugins.js index ddff767b..2682d97d 100644 --- a/src/static/js/admin/plugins.js +++ b/src/static/js/admin/plugins.js @@ -124,9 +124,16 @@ $(document).ready(function () { var version = '0.0.0'; // hack to access "versions" property of the npm package object for (version in data.results[plugin_name].versions) break; - for (attr in plugin) { - row.find("." + attr).html(plugin[attr]); + if(attr != "name"){ // Hack to rewrite URLS into name + row.find("." + attr).html(plugin[attr]); + }else{ + if(plugin['url']){ + row.find(".name").html(""+plugin[attr]+""); + }else{ + row.find(".name").html(plugin["name"]); + } + } } row.find(".version").html(version); From 4cbf3869c69f71730e7d298bb42802d9c312a8b0 Mon Sep 17 00:00:00 2001 From: John McLear Date: Sun, 20 Jan 2013 22:36:58 +0000 Subject: [PATCH 02/67] open in external window --- src/static/js/admin/plugins.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/static/js/admin/plugins.js b/src/static/js/admin/plugins.js index 2682d97d..2758290d 100644 --- a/src/static/js/admin/plugins.js +++ b/src/static/js/admin/plugins.js @@ -129,7 +129,7 @@ $(document).ready(function () { row.find("." + attr).html(plugin[attr]); }else{ if(plugin['url']){ - row.find(".name").html(""+plugin[attr]+""); + row.find(".name").html(""+plugin[attr]+""); }else{ row.find(".name").html(plugin["name"]); } From 8bfa8a7e73143270df84fa180ce5656bfa404ed9 Mon Sep 17 00:00:00 2001 From: John McLear Date: Sun, 20 Jan 2013 22:42:32 +0000 Subject: [PATCH 03/67] better urls --- src/static/js/admin/plugins.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/static/js/admin/plugins.js b/src/static/js/admin/plugins.js index 2758290d..b1387aa7 100644 --- a/src/static/js/admin/plugins.js +++ b/src/static/js/admin/plugins.js @@ -129,6 +129,7 @@ $(document).ready(function () { row.find("." + attr).html(plugin[attr]); }else{ if(plugin['url']){ + plugin['url'] = plugin['url'].replace("registry.",""); row.find(".name").html(""+plugin[attr]+""); }else{ row.find(".name").html(plugin["name"]); From 441dd3785a59a3cd508dd5cf2f3709ce14dd5580 Mon Sep 17 00:00:00 2001 From: John McLear Date: Sun, 20 Jan 2013 23:11:59 +0000 Subject: [PATCH 04/67] fix issue #1110 --- src/static/js/admin/plugins.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/static/js/admin/plugins.js b/src/static/js/admin/plugins.js index b1387aa7..8d1901d9 100644 --- a/src/static/js/admin/plugins.js +++ b/src/static/js/admin/plugins.js @@ -114,7 +114,11 @@ $(document).ready(function () { widget.data('total', data.total); widget.find('.offset').html(data.query.offset); - widget.find('.limit').html(data.query.offset + data.query.limit); + if (data.query.offset + data.query.limit > data.total){ + widget.find('.limit').html(data.total); + }else{ + widget.find('.limit').html(data.query.offset + data.query.limit); + } widget.find('.total').html(data.total); widget.find(".results *").remove(); From 7066ed183dbb8ebc0fc8f1520c4da835543d495e Mon Sep 17 00:00:00 2001 From: Manuel Knitza Date: Tue, 22 Jan 2013 00:56:39 +0100 Subject: [PATCH 05/67] Update bin/convert.js 'lil typo --- bin/convert.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bin/convert.js b/bin/convert.js index 4bbdd667..a2f3bdd4 100644 --- a/bin/convert.js +++ b/bin/convert.js @@ -1,4 +1,3 @@ - var startTime = new Date().getTime(); var fs = require("fs"); var ueberDB = require("../src/node_modules/ueberDB"); @@ -403,7 +402,7 @@ function convertPad(padId, callback) } catch(e) { - console.error("Error while converting pad " + padId + ", pad skiped"); + console.error("Error while converting pad " + padId + ", pad skipped"); console.error(e.stack ? e.stack : JSON.stringify(e)); callback(); return; From 7869a543dd5ce36b64ab96c5410b6b9762dbe538 Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Tue, 22 Jan 2013 06:14:31 +0000 Subject: [PATCH 06/67] Localisation updates from http://translatewiki.net. --- src/locales/ca.json | 18 ++++++++ src/locales/el.json | 44 +++++++++---------- src/locales/es.json | 5 ++- src/locales/fr.json | 1 + src/locales/gl.json | 1 + src/locales/he.json | 14 ++++++- src/locales/ja.json | 1 + src/locales/ko.json | 1 + src/locales/mk.json | 1 + src/locales/ml.json | 19 ++++++++- src/locales/nl.json | 1 + src/locales/oc.json | 95 ++++++++++++++++++++++++++++++++++++++++++ src/locales/os.json | 32 +++++++++++--- src/locales/pt-br.json | 12 +++--- src/locales/sl.json | 12 +++--- src/locales/sv.json | 1 + 16 files changed, 216 insertions(+), 42 deletions(-) create mode 100644 src/locales/oc.json diff --git a/src/locales/ca.json b/src/locales/ca.json index 3eb84020..ca4d3f19 100644 --- a/src/locales/ca.json +++ b/src/locales/ca.json @@ -8,31 +8,49 @@ }, "pad.toolbar.bold.title": "Negreta (Ctrl-B)", "pad.toolbar.italic.title": "Cursiva (Ctrl-I)", + "pad.toolbar.underline.title": "Subratllat (Ctrl-U)", + "pad.toolbar.strikethrough.title": "Ratllat", "pad.toolbar.ol.title": "Llista ordenada", "pad.toolbar.ul.title": "Llista sense ordenar", + "pad.toolbar.indent.title": "Sagnat", + "pad.toolbar.unindent.title": "Sagnat invers", "pad.toolbar.undo.title": "Desf\u00e9s (Ctrl-Z)", "pad.toolbar.redo.title": "Ref\u00e9s (Ctrl-Y)", + "pad.toolbar.clearAuthorship.title": "Neteja els colors d'autoria", + "pad.toolbar.savedRevision.title": "Revisions desades", "pad.toolbar.settings.title": "Configuraci\u00f3", + "pad.toolbar.showusers.title": "Mostra els usuaris d\u2019aquest pad", "pad.colorpicker.save": "Desa", "pad.colorpicker.cancel": "Cancel\u00b7la", "pad.loading": "S'est\u00e0 carregant...", + "pad.wrongPassword": "La contrasenya \u00e9s incorrecta", + "pad.settings.myView": "La meva vista", "pad.settings.linenocheck": "N\u00fameros de l\u00ednia", "pad.settings.fontType": "Tipus de lletra:", "pad.settings.fontType.normal": "Normal", + "pad.settings.globalView": "Vista global", "pad.settings.language": "Llengua:", "pad.importExport.import_export": "Importaci\u00f3\/exportaci\u00f3", + "pad.importExport.import": "Puja qualsevol fitxer de text o document", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Text net", + "pad.modals.connected": "Connectat.", + "pad.modals.forcereconnect": "For\u00e7a tornar a connectar", + "pad.modals.unauth": "No autoritzat", "pad.modals.looping": "Desconnectat.", + "pad.modals.initsocketfail": "El servidor no \u00e9s accessible.", + "pad.modals.initsocketfail.explanation": "No s'ha pogut connectar amb el servidor de sincronitzaci\u00f3.", "pad.modals.slowcommit": "Desconnectat.", "pad.modals.slowcommit.explanation": "El servidor no respon.", "pad.modals.deleted": "Suprimit.", + "pad.modals.disconnected": "Heu estat desconnectat.", "pad.share.readonly": "Nom\u00e9s de lectura", "pad.share.link": "Enlla\u00e7", "pad.chat": "Xat", "timeslider.toolbar.authors": "Autors:", "timeslider.toolbar.authorsList": "No hi ha autors", "timeslider.toolbar.exportlink.title": "Exporta", + "timeslider.exportCurrent": "Exporta la versi\u00f3 actual com a:", "timeslider.version": "Versi\u00f3 {{version}}", "timeslider.month.january": "Gener", "timeslider.month.february": "Febrer", diff --git a/src/locales/el.json b/src/locales/el.json index dced1d4f..33cb6c21 100644 --- a/src/locales/el.json +++ b/src/locales/el.json @@ -8,23 +8,23 @@ ] }, "index.newPad": "\u039d\u03ad\u03bf Pad", - "index.createOpenPad": "\u03ae \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1\/\u03ac\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03b5\u03bd\u03cc\u03c2 Pad \u03bc\u03b5 \u03c4\u03bf \u03cc\u03bd\u03bf\u03bc\u03b1:", + "index.createOpenPad": "\u03ae \u03b4\u03b7\u03bc\u03b9\u03bf\u03c5\u03c1\u03b3\u03af\u03b1\/\u03ac\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03b5\u03bd\u03cc\u03c2 Pad \u03bc\u03b5 \u03cc\u03bd\u03bf\u03bc\u03b1:", "pad.toolbar.bold.title": "\u0388\u03bd\u03c4\u03bf\u03bd\u03b1 (Ctrl-B)", "pad.toolbar.italic.title": "\u03a0\u03bb\u03ac\u03b3\u03b9\u03b1 (Ctrl-I)", "pad.toolbar.underline.title": "\u03a5\u03c0\u03bf\u03b3\u03c1\u03ac\u03bc\u03bc\u03b9\u03c3\u03b7 (Ctrl-U)", "pad.toolbar.strikethrough.title": "\u0394\u03b9\u03b1\u03ba\u03c1\u03b9\u03c4\u03ae \u03b4\u03b9\u03b1\u03b3\u03c1\u03b1\u03c6\u03ae", "pad.toolbar.ol.title": "\u03a4\u03b1\u03be\u03b9\u03bd\u03bf\u03bc\u03b7\u03bc\u03ad\u03bd\u03b7 \u03bb\u03af\u03c3\u03c4\u03b1", "pad.toolbar.ul.title": "\u039b\u03af\u03c3\u03c4\u03b1 \u03c7\u03c9\u03c1\u03af\u03c2 \u03c3\u03b5\u03b9\u03c1\u03ac", - "pad.toolbar.indent.title": "\u0395\u03c3\u03bf\u03c7\u03ae", - "pad.toolbar.unindent.title": "\u0395\u03c3\u03bf\u03c7\u03ae", + "pad.toolbar.indent.title": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b5\u03c3\u03bf\u03c7\u03ae\u03c2", + "pad.toolbar.unindent.title": "\u0391\u03c6\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 \u03b5\u03c3\u03bf\u03c7\u03ae\u03c2", "pad.toolbar.undo.title": "\u0391\u03bd\u03b1\u03af\u03c1\u03b5\u03c3\u03b7 (Ctrl-Z)", "pad.toolbar.redo.title": "\u0395\u03c0\u03b1\u03bd\u03ac\u03bb\u03b7\u03c8\u03b7 (Ctrl-Y)", "pad.toolbar.clearAuthorship.title": "\u039a\u03b1\u03b8\u03b1\u03c1\u03b9\u03c3\u03bc\u03cc\u03c2 \u03a7\u03c1\u03c9\u03bc\u03ac\u03c4\u03c9\u03bd \u03a3\u03c5\u03bd\u03c4\u03b1\u03ba\u03c4\u03ce\u03bd", "pad.toolbar.import_export.title": "\u0395\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae\/\u0395\u03be\u03b1\u03b3\u03c9\u03b3\u03ae \u03b1\u03c0\u03cc\/\u03c3\u03b5 \u03b4\u03b9\u03b1\u03c6\u03bf\u03c1\u03b5\u03c4\u03b9\u03ba\u03bf\u03cd\u03c2 \u03c4\u03cd\u03c0\u03bf\u03c5\u03c2 \u03b1\u03c1\u03c7\u03b5\u03af\u03c9\u03bd", "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\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03b5\u03c2 \u0395\u03ba\u03b4\u03cc\u03c3\u03b5\u03b9\u03c2", + "pad.toolbar.savedRevision.title": "\u0391\u03c0\u03bf\u03b8\u03ae\u03ba\u03b5\u03c5\u03c3\u03b7 \u0388\u03ba\u03b4\u03bf\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\u03b1\u03c4\u03ce\u03c3\u03c4\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf pad", + "pad.toolbar.embed.title": "\u0395\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7 \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", @@ -78,7 +78,7 @@ "pad.share": "\u039c\u03bf\u03b9\u03c1\u03b1\u03c3\u03c4\u03b5\u03af\u03c4\u03b5 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf pad", "pad.share.readonly": "\u039c\u03cc\u03bd\u03bf \u03b3\u03b9\u03b1 \u03b1\u03bd\u03ac\u03b3\u03bd\u03c9\u03c3\u03b7", "pad.share.link": "\u03a3\u03cd\u03bd\u03b4\u03b5\u03c3\u03bc\u03bf\u03c2", - "pad.share.emebdcode": "\u0395\u03bd\u03c3\u03c9\u03bc\u03b1\u03c4\u03ce\u03c3\u03c4\u03b5 URL", + "pad.share.emebdcode": "URL \u03b5\u03bd\u03c3\u03c9\u03bc\u03ac\u03c4\u03c9\u03c3\u03b7\u03c2", "pad.chat": "\u03a3\u03c5\u03bd\u03bf\u03bc\u03b9\u03bb\u03af\u03b1", "pad.chat.title": "\u0386\u03bd\u03bf\u03b9\u03b3\u03bc\u03b1 \u03c4\u03b7\u03c2 \u03c3\u03c5\u03bd\u03bf\u03bc\u03b9\u03bb\u03af\u03b1\u03c2 \u03b3\u03b9\u03b1 \u03b1\u03c5\u03c4\u03cc \u03c4\u03bf pad.", "timeslider.pageTitle": "{{appTitle}} \u03a7\u03c1\u03bf\u03bd\u03bf\u03b4\u03b9\u03ac\u03b3\u03c1\u03b1\u03bc\u03bc\u03b1", @@ -88,23 +88,23 @@ "timeslider.toolbar.exportlink.title": "\u0395\u03be\u03b1\u03b3\u03c9\u03b3\u03ae", "timeslider.exportCurrent": "\u0395\u03be\u03b1\u03b3\u03c9\u03b3\u03ae \u03c4\u03c1\u03ad\u03c7\u03bf\u03c5\u03c3\u03b1\u03c2 \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7\u03c2 \u03c9\u03c2:", "timeslider.version": "\u0388\u03ba\u03b4\u03bf\u03c3\u03b7 {{version}}", - "timeslider.saved": "\u0391\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03bf\u03c2 {{month}} {{day}}, {{year}}", - "timeslider.dateformat": "{{month}} {{day}}, {{year}} {{hours}}:{{minutes}}:{{seconds}}", - "timeslider.month.january": "\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2", - "timeslider.month.february": "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2", - "timeslider.month.march": "\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2", - "timeslider.month.april": "\u0391\u03c0\u03c1\u03af\u03bb\u03b9\u03bf\u03c2", - "timeslider.month.may": "\u039c\u03ac\u03b9\u03bf\u03c2", - "timeslider.month.june": "\u0399\u03bf\u03cd\u03bd\u03b9\u03bf\u03c2", - "timeslider.month.july": "\u0399\u03bf\u03cd\u03bb\u03b9\u03bf\u03c2", - "timeslider.month.august": "\u0391\u03cd\u03b3\u03bf\u03c5\u03c3\u03c4\u03bf\u03c2", - "timeslider.month.september": "\u03a3\u03b5\u03c0\u03c4\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2", - "timeslider.month.october": "\u039f\u03ba\u03c4\u03ce\u03b2\u03c1\u03b9\u03bf\u03c2", - "timeslider.month.november": "\u039d\u03bf\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2", - "timeslider.month.december": "\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2", - "pad.savedrevs.marked": "\u0391\u03c5\u03c4\u03ae \u03b7 \u03b1\u03bd\u03b1\u03b8\u03b5\u03ce\u03c1\u03b7\u03c3\u03b7 \u03b5\u03c0\u03b9\u03c3\u03b7\u03bc\u03ac\u03bd\u03b8\u03b7\u03ba\u03b5 \u03c9\u03c2 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03b7 \u03b1\u03bd\u03b1\u03b8\u03b5\u03ce\u03c1\u03b7\u03c3\u03b7", + "timeslider.saved": "\u0391\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03cd\u03c4\u03b7\u03ba\u03b5 {{day}} {{month}}, {{year}}", + "timeslider.dateformat": "{{day}}\/{{month}}\/{{year}} {{hours}}:{{minutes}}:{{seconds}}", + "timeslider.month.january": "\u0399\u03b1\u03bd\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5", + "timeslider.month.february": "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03b1\u03c1\u03af\u03bf\u03c5", + "timeslider.month.march": "\u039c\u03b1\u03c1\u03c4\u03af\u03bf\u03c5", + "timeslider.month.april": "\u0391\u03c0\u03c1\u03b9\u03bb\u03af\u03bf\u03c5", + "timeslider.month.may": "\u039c\u03b1\u0390\u03bf\u03c5", + "timeslider.month.june": "\u0399\u03bf\u03c5\u03bd\u03af\u03bf\u03c5", + "timeslider.month.july": "\u0399\u03bf\u03c5\u03bb\u03af\u03bf\u03c5", + "timeslider.month.august": "\u0391\u03c5\u03b3\u03bf\u03cd\u03c3\u03c4\u03bf\u03c5", + "timeslider.month.september": "\u03a3\u03b5\u03c0\u03c4\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5", + "timeslider.month.october": "\u039f\u03ba\u03c4\u03c9\u03b2\u03c1\u03af\u03bf\u03c5", + "timeslider.month.november": "\u039d\u03bf\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5", + "timeslider.month.december": "\u0394\u03b5\u03ba\u03b5\u03bc\u03b2\u03c1\u03af\u03bf\u03c5", + "pad.savedrevs.marked": "\u0391\u03c5\u03c4\u03ae \u03b7 \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7 \u03b5\u03c0\u03b9\u03c3\u03b7\u03bc\u03ac\u03bd\u03b8\u03b7\u03ba\u03b5 \u03c9\u03c2 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03b7 \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7", "pad.userlist.entername": "\u0395\u03b9\u03c3\u03ac\u03b3\u03b5\u03c4\u03b5 \u03c4\u03bf \u03cc\u03bd\u03bf\u03bc\u03ac \u03c3\u03b1\u03c2", - "pad.userlist.unnamed": "\u03b1\u03bd\u03ce\u03bd\u03c5\u03bc\u03bf", + "pad.userlist.unnamed": "\u03b1\u03bd\u03ce\u03bd\u03c5\u03bc\u03bf\u03c2", "pad.userlist.guest": "\u0395\u03c0\u03b9\u03c3\u03ba\u03ad\u03c0\u03c4\u03b7\u03c2", "pad.userlist.deny": "\u0386\u03c1\u03bd\u03b7\u03c3\u03b7", "pad.userlist.approve": "\u0388\u03b3\u03ba\u03c1\u03b9\u03c3\u03b7", diff --git a/src/locales/es.json b/src/locales/es.json index 71d201a4..57bc35a8 100644 --- a/src/locales/es.json +++ b/src/locales/es.json @@ -4,7 +4,8 @@ "0": "Armando-Martin", "1": "Jacobo", "2": "Joker", - "4": "Xuacu" + "4": "Vivaelcelta", + "5": "Xuacu" } }, "index.newPad": "Nuevo Pad", @@ -56,6 +57,7 @@ "pad.modals.connected": "Conectado.", "pad.modals.reconnecting": "Reconectando a tu pad..", "pad.modals.forcereconnect": "Reconexi\u00f3n forzosa", + "pad.modals.userdup": "Abierto en otra ventana", "pad.modals.userdup.explanation": "Este pad parece estar abierto en m\u00e1s de una ventana de tu navegador.", "pad.modals.userdup.advice": "Reconectar para usar esta ventana.", "pad.modals.unauth": "No autorizado.", @@ -84,6 +86,7 @@ "timeslider.toolbar.returnbutton": "Volver al pad", "timeslider.toolbar.authors": "Autores:", "timeslider.toolbar.authorsList": "Sin autores", + "timeslider.toolbar.exportlink.title": "Exportar", "timeslider.exportCurrent": "Exportar la versi\u00f3n actual como:", "timeslider.version": "Versi\u00f3n {{version}}", "timeslider.saved": "Guardado el {{day}} de {{month}} de {{year}}", diff --git a/src/locales/fr.json b/src/locales/fr.json index f861150d..05ec1ab3 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -87,6 +87,7 @@ "pad.share.emebdcode": "Lien \u00e0 int\u00e9grer", "pad.chat": "Chat", "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.authors": "Auteurs :", diff --git a/src/locales/gl.json b/src/locales/gl.json index 2cd30e33..7f2e5a56 100644 --- a/src/locales/gl.json +++ b/src/locales/gl.json @@ -78,6 +78,7 @@ "pad.share.emebdcode": "Incorporar o URL", "pad.chat": "Chat", "pad.chat.title": "Abrir o chat deste documento.", + "pad.chat.loadmessages": "Cargar m\u00e1is mensaxes", "timeslider.pageTitle": "Li\u00f1a do tempo de {{appTitle}}", "timeslider.toolbar.returnbutton": "Volver ao documento", "timeslider.toolbar.authors": "Autores:", diff --git a/src/locales/he.json b/src/locales/he.json index 2a265791..75ebff1b 100644 --- a/src/locales/he.json +++ b/src/locales/he.json @@ -42,6 +42,7 @@ "pad.settings.language": "\u05e9\u05e4\u05d4:", "pad.importExport.import_export": "\u05d9\u05d9\u05d1\u05d5\u05d0\/\u05d9\u05d9\u05e6\u05d5\u05d0", "pad.importExport.import": "\u05d4\u05e2\u05dc\u05d0\u05ea \u05db\u05dc \u05e7\u05d5\u05d1\u05e5 \u05d8\u05e7\u05e1\u05d8 \u05d0\u05d5 \u05de\u05e1\u05de\u05da", + "pad.importExport.importSuccessful": "\u05d6\u05d4 \u05e2\u05d1\u05d3!", "pad.importExport.export": "\u05d9\u05d9\u05e6\u05d5\u05d0 \u05d4\u05e4\u05e0\u05e7\u05e1 \u05d4\u05e0\u05d5\u05db\u05d7\u05d9 \u05d1\u05ea\u05d5\u05e8:", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "\u05d8\u05e7\u05e1\u05d8 \u05e8\u05d2\u05d9\u05dc", @@ -53,6 +54,7 @@ "pad.modals.connected": "\u05de\u05d7\u05d5\u05d1\u05db\u05e8.", "pad.modals.reconnecting": "\u05de\u05ea\u05d1\u05e6\u05e2 \u05d7\u05d9\u05d1\u05d5\u05e8 \u05de\u05d7\u05d3\u05e9...", "pad.modals.forcereconnect": "\u05d7\u05d9\u05d1\u05d5\u05e8 \u05db\u05e4\u05d5\u05d9 \u05de\u05d7\u05d3\u05e9", + "pad.modals.userdup": "\u05e4\u05ea\u05d5\u05d7 \u05d1\u05d7\u05dc\u05d5\u05df \u05d0\u05d7\u05e8", "pad.modals.userdup.explanation": "\u05e0\u05e8\u05d0\u05d4 \u05e9\u05d4\u05e4\u05e0\u05e7\u05e1 \u05d4\u05d6\u05d4 \u05e4\u05ea\u05d5\u05d7 \u05d1\u05d9\u05d5\u05ea\u05e8 \u05de\u05d7\u05dc\u05d5\u05df \u05d3\u05e4\u05d3\u05e4\u05df \u05d0\u05d7\u05d3 \u05d1\u05de\u05d7\u05e9\u05d1 \u05d4\u05d6\u05d4.", "pad.modals.userdup.advice": "\u05dc\u05d4\u05ea\u05d7\u05d1\u05e8 \u05de\u05d7\u05d3\u05e9 \u05d1\u05d0\u05de\u05e6\u05e2\u05d5\u05ea \u05d4\u05d7\u05dc\u05d5\u05df \u05d4\u05d6\u05d4.", "pad.modals.unauth": "\u05d0\u05d9\u05df \u05d4\u05e8\u05e9\u05d0\u05d4", @@ -99,8 +101,18 @@ "timeslider.month.november": "\u05e0\u05d5\u05d1\u05de\u05d1\u05e8", "timeslider.month.december": "\u05d3\u05e6\u05de\u05d1\u05e8", "pad.savedrevs.marked": "\u05d2\u05e8\u05e1\u05d4 \u05d6\u05d5 \u05de\u05e1\u05d5\u05de\u05e0\u05ea \u05db\u05d2\u05e8\u05e1\u05d4 \u05e9\u05de\u05d5\u05e8\u05d4", + "pad.userlist.entername": "\u05e0\u05d0 \u05dc\u05d4\u05d6\u05d9\u05df \u05d0\u05ea \u05e9\u05de\u05da", "pad.userlist.unnamed": "\u05dc\u05dc\u05d0 \u05e9\u05dd", "pad.userlist.guest": "\u05d0\u05d5\u05e8\u05d7", + "pad.userlist.deny": "\u05dc\u05d3\u05d7\u05d5\u05ea", + "pad.userlist.approve": "\u05dc\u05d0\u05e9\u05e8", + "pad.editbar.clearcolors": "\u05dc\u05e0\u05e7\u05d5\u05ea \u05e6\u05d1\u05e2\u05d9\u05dd \u05dc\u05e1\u05d9\u05de\u05d5\u05df \u05db\u05d5\u05ea\u05d1\u05d9\u05dd \u05d1\u05db\u05dc \u05d4\u05de\u05e1\u05de\u05da?", "pad.impexp.importbutton": "\u05dc\u05d9\u05d9\u05d1\u05d0 \u05db\u05e2\u05ea", - "pad.impexp.confirmimport": "\u05d9\u05d1\u05d5\u05d0 \u05e9\u05dc \u05e7\u05d5\u05d1\u05e5 \u05d9\u05d1\u05d8\u05dc \u05d0\u05ea \u05d4\u05d8\u05e7\u05e1\u05d8 \u05d4\u05e0\u05d5\u05db\u05d7\u05d9 \u05d1\u05e4\u05e0\u05e7\u05e1. \u05d4\u05d0\u05dd \u05d0\u05ea\u05dd \u05d1\u05d8\u05d5\u05d7\u05d9\u05dd \u05e9\u05d1\u05e8\u05e6\u05d5\u05e0\u05db\u05dd \u05dc\u05d4\u05de\u05e9\u05d9\u05da?" + "pad.impexp.importing": "\u05d9\u05d9\u05d1\u05d5\u05d0...", + "pad.impexp.confirmimport": "\u05d9\u05d1\u05d5\u05d0 \u05e9\u05dc \u05e7\u05d5\u05d1\u05e5 \u05d9\u05d1\u05d8\u05dc \u05d0\u05ea \u05d4\u05d8\u05e7\u05e1\u05d8 \u05d4\u05e0\u05d5\u05db\u05d7\u05d9 \u05d1\u05e4\u05e0\u05e7\u05e1. \u05d4\u05d0\u05dd \u05d0\u05ea\u05dd \u05d1\u05d8\u05d5\u05d7\u05d9\u05dd \u05e9\u05d1\u05e8\u05e6\u05d5\u05e0\u05db\u05dd \u05dc\u05d4\u05de\u05e9\u05d9\u05da?", + "pad.impexp.convertFailed": "\u05dc\u05d0 \u05d4\u05ea\u05d7\u05dc\u05dc\u05d0 \u05d4\u05e6\u05dc\u05d7\u05e0\u05d5 \u05dc\u05d9\u05d9\u05d1\u05d0 \u05d0\u05ea \u05d4\u05e7\u05d5\u05d1\u05e5 \u05d4\u05d6\u05d4. \u05e0\u05d0 \u05dc\u05d4\u05e9\u05ea\u05de\u05e9 \u05d1\u05ea\u05e1\u05d3\u05d9\u05e8 \u05de\u05e1\u05de\u05da \u05e9\u05d5\u05e0\u05d4 \u05d0\u05d5 \u05dc\u05d4\u05e2\u05ea\u05d9\u05e7 \u05d5\u05dc\u05d4\u05d3\u05d1\u05d9\u05e7 \u05d9\u05d3\u05e0\u05d9\u05ea", + "pad.impexp.uploadFailed": "\u05d4\u05d4\u05e2\u05dc\u05d0\u05d4 \u05e0\u05db\u05e9\u05dc\u05d4, \u05e0\u05d0 \u05dc\u05e0\u05e1\u05d5\u05ea \u05e9\u05d5\u05d1", + "pad.impexp.importfailed": "\u05d4\u05d9\u05d9\u05d1\u05d5\u05d0 \u05e0\u05db\u05e9\u05dc", + "pad.impexp.copypaste": "\u05e0\u05d0 \u05dc\u05d4\u05e2\u05ea\u05d9\u05e7 \u05d5\u05dc\u05d4\u05d3\u05d1\u05d9\u05e7", + "pad.impexp.exportdisabled": "\u05d9\u05d9\u05e6\u05d5\u05d0 \u05d1\u05ea\u05e1\u05d3\u05d9\u05e8 {{type}} \u05d0\u05d9\u05e0\u05d5 \u05e4\u05e2\u05d9\u05dc. \u05de\u05e0\u05d4\u05dc \u05d4\u05de\u05e2\u05e8\u05db\u05ea \u05e9\u05dc\u05da \u05d9\u05d5\u05db\u05dc \u05dc\u05e1\u05e4\u05e8 \u05dc\u05da \u05e2\u05dc \u05d6\u05d4 \u05e2\u05d5\u05d3 \u05e4\u05e8\u05d8\u05d9\u05dd." } \ No newline at end of file diff --git a/src/locales/ja.json b/src/locales/ja.json index 36c2328c..1954b979 100644 --- a/src/locales/ja.json +++ b/src/locales/ja.json @@ -78,6 +78,7 @@ "pad.share.emebdcode": "\u57cb\u3081\u8fbc\u307f\u7528 URL", "pad.chat": "\u30c1\u30e3\u30c3\u30c8", "pad.chat.title": "\u3053\u306e\u30d1\u30c3\u30c9\u306e\u30c1\u30e3\u30c3\u30c8\u3092\u958b\u304d\u307e\u3059\u3002", + "pad.chat.loadmessages": "\u305d\u306e\u4ed6\u306e\u30e1\u30c3\u30bb\u30fc\u30b8\u3092\u8aad\u307f\u8fbc\u3080", "timeslider.pageTitle": "{{appTitle}} \u30bf\u30a4\u30e0\u30b9\u30e9\u30a4\u30c0\u30fc", "timeslider.toolbar.returnbutton": "\u30d1\u30c3\u30c9\u306b\u623b\u308b", "timeslider.toolbar.authors": "\u4f5c\u8005:", diff --git a/src/locales/ko.json b/src/locales/ko.json index f9e69695..9e436b0c 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -78,6 +78,7 @@ "pad.share.emebdcode": "URL \ud3ec\ud568", "pad.chat": "\ub300\ud654", "pad.chat.title": "\uc774 \ud328\ub4dc\uc5d0 \ub300\ud654\ub97c \uc5fd\ub2c8\ub2e4.", + "pad.chat.loadmessages": "\ub354 \ub9ce\uc740 \uba54\uc2dc\uc9c0 \ubd88\ub7ec\uc624\uae30", "timeslider.pageTitle": "{{appTitle}} \uc2dc\uac04\uc2ac\ub77c\uc774\ub354", "timeslider.toolbar.returnbutton": "\ud328\ub4dc\ub85c \ub3cc\uc544\uac00\uae30", "timeslider.toolbar.authors": "\uc800\uc790:", diff --git a/src/locales/mk.json b/src/locales/mk.json index 1ed2a47d..9dd5e725 100644 --- a/src/locales/mk.json +++ b/src/locales/mk.json @@ -79,6 +79,7 @@ "pad.share.emebdcode": "\u0412\u043c\u0435\u0442\u043d\u0438 URL", "pad.chat": "\u0420\u0430\u0437\u0433\u043e\u0432\u043e\u0440", "pad.chat.title": "\u041e\u0442\u0432\u043e\u0440\u0438 \u0433\u043e \u0440\u0430\u0437\u0433\u043e\u0432\u043e\u0440\u043e\u0442 \u0437\u0430 \u043e\u0432\u0430\u0430 \u0442\u0435\u0442\u0440\u0430\u0442\u043a\u0430.", + "pad.chat.loadmessages": "\u0412\u0447\u0438\u0442\u0430\u0458 \u0443\u0448\u0442\u0435 \u043f\u043e\u0440\u0430\u043a\u0438", "timeslider.pageTitle": "{{appTitle}} \u0418\u0441\u0442\u043e\u0440\u0438\u0441\u043a\u0438 \u043f\u0440\u0435\u0433\u043b\u0435\u0434", "timeslider.toolbar.returnbutton": "\u041d\u0430\u0437\u0430\u0434 \u043d\u0430 \u0442\u0435\u0442\u0440\u0430\u0442\u043a\u0430\u0442\u0430", "timeslider.toolbar.authors": "\u0410\u0432\u0442\u043e\u0440\u0438:", diff --git a/src/locales/ml.json b/src/locales/ml.json index 0c39d6f8..79c66bc6 100644 --- a/src/locales/ml.json +++ b/src/locales/ml.json @@ -1,6 +1,7 @@ { "@metadata": { "authors": [ + "Hrishikesh.kb", "Praveenp", "Santhosh.thottingal" ] @@ -27,6 +28,9 @@ "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", "pad.loading": "\u0d36\u0d47\u0d16\u0d30\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d41...", + "pad.passwordRequired": "\u0d08 \u0d2a\u0d3e\u0d21\u0d4d \u0d09\u0d2a\u0d2f\u0d4b\u0d17\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d24\u0d3f\u0d28\u0d3e\u0d2f\u0d3f \u0d12\u0d30\u0d41 \u0d30\u0d39\u0d38\u0d4d\u0d2f\u0d35\u0d3e\u0d15\u0d4d\u0d15\u0d4d \u0d28\u0d7d\u0d15\u0d47\u0d23\u0d4d\u0d1f\u0d24\u0d3e\u0d23\u0d4d", + "pad.permissionDenied": "\u0d08 \u0d2a\u0d3e\u0d21\u0d4d \u0d15\u0d3e\u0d23\u0d41\u0d35\u0d3e\u0d7b \u0d24\u0d3e\u0d19\u0d4d\u0d15\u0d7e\u0d15\u0d4d\u0d15\u0d4d \u0d05\u0d28\u0d41\u0d2e\u0d24\u0d3f\u0d2f\u0d3f\u0d32\u0d4d\u0d32", + "pad.wrongPassword": "\u0d24\u0d3e\u0d19\u0d4d\u0d15\u0d7e \u0d28\u0d32\u0d4d\u0d15\u0d3f\u0d2f \u0d30\u0d39\u0d38\u0d4d\u0d2f\u0d35\u0d3e\u0d15\u0d4d\u0d15\u0d4d \u0d24\u0d46\u0d31\u0d4d\u0d31\u0d3e\u0d2f\u0d3f\u0d30\u0d41\u0d28\u0d4d\u0d28\u0d41", "pad.settings.padSettings": "\u0d2a\u0d3e\u0d21\u0d4d \u0d38\u0d1c\u0d4d\u0d1c\u0d40\u0d15\u0d30\u0d23\u0d19\u0d4d\u0d19\u0d7e", "pad.settings.myView": "\u0d0e\u0d28\u0d4d\u0d31\u0d46 \u0d15\u0d3e\u0d34\u0d4d\u0d1a", "pad.settings.stickychat": "\u0d24\u0d24\u0d4d\u0d38\u0d2e\u0d2f\u0d02 \u0d38\u0d02\u0d35\u0d3e\u0d26\u0d02 \u0d0e\u0d2a\u0d4d\u0d2a\u0d4b\u0d34\u0d41\u0d02 \u0d38\u0d4d\u0d15\u0d4d\u0d30\u0d40\u0d28\u0d3f\u0d7d \u0d15\u0d3e\u0d23\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15", @@ -50,6 +54,7 @@ "pad.modals.connected": "\u0d2c\u0d28\u0d4d\u0d27\u0d3f\u0d2a\u0d4d\u0d2a\u0d3f\u0d1a\u0d4d\u0d1a\u0d3f\u0d30\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d41.", "pad.modals.reconnecting": "\u0d24\u0d3e\u0d19\u0d4d\u0d15\u0d33\u0d41\u0d1f\u0d46 \u0d2a\u0d3e\u0d21\u0d3f\u0d32\u0d47\u0d2f\u0d4d\u0d15\u0d4d\u0d15\u0d4d \u0d35\u0d40\u0d23\u0d4d\u0d1f\u0d41\u0d02 \u0d2c\u0d28\u0d4d\u0d27\u0d3f\u0d2a\u0d4d\u0d2a\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d41...", "pad.modals.forcereconnect": "\u0d0e\u0d28\u0d4d\u0d24\u0d3e\u0d2f\u0d3e\u0d32\u0d41\u0d02 \u0d2c\u0d28\u0d4d\u0d27\u0d3f\u0d2a\u0d4d\u0d2a\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15", + "pad.modals.userdup": "\u0d2e\u0d31\u0d4d\u0d31\u0d4a\u0d30\u0d41 \u0d1c\u0d3e\u0d32\u0d15\u0d24\u0d4d\u0d24\u0d3f\u0d7d \u0d24\u0d41\u0d31\u0d28\u0d4d\u0d28\u0d3f\u0d30\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d41", "pad.modals.userdup.explanation": "\u0d08 \u0d15\u0d2e\u0d4d\u0d2a\u0d4d\u0d2f\u0d42\u0d1f\u0d4d\u0d1f\u0d31\u0d3f\u0d7d \u0d08 \u0d2a\u0d3e\u0d21\u0d4d \u0d12\u0d28\u0d4d\u0d28\u0d3f\u0d32\u0d27\u0d3f\u0d15\u0d02 \u0d2c\u0d4d\u0d30\u0d57\u0d38\u0d7c \u0d1c\u0d3e\u0d32\u0d15\u0d19\u0d4d\u0d19\u0d33\u0d3f\u0d7d \u0d24\u0d41\u0d31\u0d28\u0d4d\u0d28\u0d24\u0d3e\u0d2f\u0d3f \u0d15\u0d3e\u0d23\u0d41\u0d28\u0d4d\u0d28\u0d41.", "pad.modals.userdup.advice": "\u0d08 \u0d1c\u0d3e\u0d32\u0d15\u0d02 \u0d24\u0d28\u0d4d\u0d28\u0d46 \u0d09\u0d2a\u0d2f\u0d4b\u0d17\u0d3f\u0d15\u0d4d\u0d15\u0d3e\u0d28\u0d3e\u0d2f\u0d3f \u0d2c\u0d28\u0d4d\u0d27\u0d3f\u0d2a\u0d4d\u0d2a\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15", "pad.modals.unauth": "\u0d05\u0d28\u0d41\u0d35\u0d3e\u0d26\u0d2e\u0d3f\u0d32\u0d4d\u0d32", @@ -78,9 +83,11 @@ "timeslider.toolbar.returnbutton": "\u0d2a\u0d3e\u0d21\u0d3f\u0d32\u0d47\u0d15\u0d4d\u0d15\u0d4d \u0d24\u0d3f\u0d30\u0d3f\u0d1a\u0d4d\u0d1a\u0d41\u0d2a\u0d4b\u0d35\u0d41\u0d15", "timeslider.toolbar.authors": "\u0d30\u0d1a\u0d2f\u0d3f\u0d24\u0d3e\u0d15\u0d4d\u0d15\u0d7e:", "timeslider.toolbar.authorsList": "\u0d06\u0d30\u0d41\u0d02 \u0d0e\u0d34\u0d41\u0d24\u0d3f\u0d2f\u0d3f\u0d1f\u0d4d\u0d1f\u0d3f\u0d32\u0d4d\u0d32", + "timeslider.toolbar.exportlink.title": "\u0d15\u0d2f\u0d31\u0d4d\u0d31\u0d41\u0d2e\u0d24\u0d3f", "timeslider.exportCurrent": "\u0d08 \u0d2a\u0d24\u0d3f\u0d2a\u0d4d\u0d2a\u0d4d \u0d07\u0d19\u0d4d\u0d19\u0d28\u0d46 \u0d0e\u0d1f\u0d41\u0d15\u0d4d\u0d15\u0d41\u0d15:", "timeslider.version": "\u0d2a\u0d24\u0d3f\u0d2a\u0d4d\u0d2a\u0d4d {{version}}", "timeslider.saved": "\u0d38\u0d47\u0d35\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d24\u0d24\u0d4d {{month}} {{day}}, {{year}}", + "timeslider.dateformat": "{{month}}\/{{day}}\/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "\u0d1c\u0d28\u0d41\u0d35\u0d30\u0d3f", "timeslider.month.february": "\u0d2b\u0d46\u0d2c\u0d4d\u0d30\u0d41\u0d35\u0d30\u0d3f", "timeslider.month.march": "\u0d2e\u0d3e\u0d7c\u0d1a\u0d4d\u0d1a\u0d4d", @@ -93,9 +100,19 @@ "timeslider.month.october": "\u0d12\u0d15\u0d4d\u0d1f\u0d4b\u0d2c\u0d7c", "timeslider.month.november": "\u0d28\u0d35\u0d02\u0d2c\u0d7c", "timeslider.month.december": "\u0d21\u0d3f\u0d38\u0d02\u0d2c\u0d7c", + "pad.savedrevs.marked": "\u0d08 \u0d2a\u0d24\u0d3f\u0d2a\u0d4d\u0d2a\u0d4d \u0d38\u0d02\u0d30\u0d15\u0d4d\u0d37\u0d3f\u0d1a\u0d4d\u0d1a\u0d24\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": "\u0d28\u0d3f\u0d19\u0d4d\u0d19\u0d33\u0d41\u0d1f\u0d46 \u0d2a\u0d47\u0d30\u0d4d", "pad.userlist.unnamed": "\u0d2a\u0d47\u0d30\u0d3f\u0d32\u0d4d\u0d32\u0d3e\u0d24\u0d4d\u0d24", "pad.userlist.guest": "\u0d05\u0d24\u0d3f\u0d25\u0d3f", "pad.userlist.deny": "\u0d24\u0d33\u0d4d\u0d33\u0d3f\u0d15\u0d4d\u0d15\u0d33\u0d2f\u0d41\u0d15", - "pad.userlist.approve": "\u0d05\u0d02\u0d17\u0d40\u0d15\u0d30\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15" + "pad.userlist.approve": "\u0d05\u0d02\u0d17\u0d40\u0d15\u0d30\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15", + "pad.editbar.clearcolors": "\u0d30\u0d1a\u0d2f\u0d3f\u0d24\u0d3e\u0d35\u0d3f\u0d28\u0d46 \u0d38\u0d42\u0d1a\u0d3f\u0d2a\u0d4d\u0d2a\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d28\u0d4d\u0d28 \u0d28\u0d3f\u0d31\u0d19\u0d4d\u0d19\u0d33\u0d46\u0d32\u0d4d\u0d32\u0d3e\u0d02 \u0d15\u0d33\u0d2f\u0d23\u0d4b?", + "pad.impexp.importbutton": "\u0d07\u0d31\u0d15\u0d4d\u0d15\u0d41\u0d2e\u0d24\u0d3f \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15", + "pad.impexp.importing": "\u0d07\u0d31\u0d15\u0d4d\u0d15\u0d41\u0d2e\u0d24\u0d3f \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d28\u0d4d\u0d28\u0d41...", + "pad.impexp.confirmimport": "\u0d12\u0d30\u0d41 \u0d2a\u0d4d\u0d30\u0d2e\u0d3e\u0d23\u0d02 \u0d07\u0d31\u0d15\u0d4d\u0d15\u0d41\u0d2e\u0d24\u0d3f \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d28\u0d4d\u0d28\u0d24\u0d4d \u0d28\u0d3f\u0d32\u0d35\u0d3f\u0d32\u0d41\u0d33\u0d4d\u0d33 \u0d0e\u0d34\u0d41\u0d24\u0d4d\u0d24\u0d41\u0d15\u0d7e \u0d28\u0d37\u0d4d\u0d1f\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d3e\u0d28\u0d3f\u0d1f\u0d2f\u0d3e\u0d15\u0d4d\u0d15\u0d41\u0d02, \u0d24\u0d41\u0d1f\u0d30\u0d23\u0d2e\u0d46\u0d28\u0d4d\u0d28\u0d4d \u0d09\u0d31\u0d2a\u0d4d\u0d2a\u0d3e\u0d23\u0d4b?", + "pad.impexp.convertFailed": "\u0d08 \u0d2a\u0d4d\u0d30\u0d2e\u0d3e\u0d23\u0d02 \u0d07\u0d31\u0d15\u0d4d\u0d15\u0d41\u0d2e\u0d24\u0d3f \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d3e\u0d7b \u0d38\u0d3e\u0d27\u0d3f\u0d1a\u0d4d\u0d1a\u0d3f\u0d32\u0d4d\u0d32. \u0d26\u0d2f\u0d35\u0d3e\u0d2f\u0d3f \u0d2e\u0d31\u0d4d\u0d31\u0d4a\u0d30\u0d41 \u0d21\u0d4b\u0d15\u0d4d\u0d2f\u0d41\u0d2e\u0d46\u0d28\u0d4d\u0d31\u0d4d \u0d2b\u0d4b\u0d7c\u0d2e\u0d3e\u0d31\u0d4d\u0d31\u0d4d \u0d09\u0d2a\u0d2f\u0d4b\u0d17\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15\u0d2f\u0d4b, \u0d38\u0d4d\u0d35\u0d28\u0d4d\u0d24\u0d2e\u0d3e\u0d2f\u0d3f \u0d15\u0d4b\u0d2a\u0d4d\u0d2a\u0d3f \u0d2a\u0d47\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15\u0d2f\u0d4b \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d42", + "pad.impexp.uploadFailed": "\u0d05\u0d2a\u0d4d\u200c\u200c\u0d32\u0d4b\u0d21\u0d4d \u0d2a\u0d30\u0d3e\u0d1c\u0d2f\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d4d\u0d1f\u0d41. \u0d26\u0d2f\u0d35\u0d3e\u0d2f\u0d3f \u0d35\u0d40\u0d23\u0d4d\u0d1f\u0d41\u0d02 \u0d36\u0d4d\u0d30\u0d2e\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d15", + "pad.impexp.importfailed": "\u0d07\u0d31\u0d15\u0d4d\u0d15\u0d41\u0d2e\u0d24\u0d3f \u0d2a\u0d30\u0d3e\u0d1c\u0d2f\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d4d\u0d1f\u0d41", + "pad.impexp.copypaste": "\u0d26\u0d2f\u0d35\u0d3e\u0d2f\u0d3f \u0d15\u0d4b\u0d2a\u0d4d\u0d2a\u0d3f \u0d2a\u0d47\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d15", + "pad.impexp.exportdisabled": "{{type}} \u0d2b\u0d4b\u0d7c\u0d2e\u0d3e\u0d31\u0d4d\u0d31\u0d3f\u0d7d \u0d15\u0d2f\u0d31\u0d4d\u0d31\u0d41\u0d2e\u0d24\u0d3f \u0d1a\u0d46\u0d2f\u0d4d\u0d2f\u0d41\u0d28\u0d4d\u0d28\u0d24\u0d4d \u0d24\u0d1f\u0d1e\u0d4d\u0d1e\u0d3f\u0d30\u0d3f\u0d15\u0d4d\u0d15\u0d41\u0d28\u0d4d\u0d28\u0d41. \u0d26\u0d2f\u0d35\u0d3e\u0d2f\u0d3f \u0d24\u0d3e\u0d19\u0d4d\u0d15\u0d33\u0d41\u0d1f\u0d46 \u0d38\u0d3f\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d02 \u0d05\u0d21\u0d4d\u0d2e\u0d3f\u0d28\u0d3f\u0d38\u0d4d\u0d31\u0d4d\u0d31\u0d4d\u0d30\u0d47\u0d31\u0d4d\u0d31\u0d31\u0d41\u0d2e\u0d3e\u0d2f\u0d3f \u0d2c\u0d28\u0d4d\u0d27\u0d2a\u0d4d\u0d2a\u0d46\u0d1f\u0d41\u0d15" } \ No newline at end of file diff --git a/src/locales/nl.json b/src/locales/nl.json index 14ba42c0..01806053 100644 --- a/src/locales/nl.json +++ b/src/locales/nl.json @@ -78,6 +78,7 @@ "pad.share.emebdcode": "URL insluiten", "pad.chat": "Chatten", "pad.chat.title": "Chat voor dit pad opnenen", + "pad.chat.loadmessages": "Meer berichten laden", "timeslider.pageTitle": "Tijdlijn voor {{appTitle}}", "timeslider.toolbar.returnbutton": "Terug naar pad", "timeslider.toolbar.authors": "Auteurs:", diff --git a/src/locales/oc.json b/src/locales/oc.json new file mode 100644 index 00000000..79e94db7 --- /dev/null +++ b/src/locales/oc.json @@ -0,0 +1,95 @@ +{ + "index.newPad": "Pad nov\u00e8l", + "index.createOpenPad": "o crear\/dobrir un Pad intitulat :", + "pad.toolbar.bold.title": "Gras (Ctrl-B)", + "pad.toolbar.italic.title": "Italica (Ctrl-I)", + "pad.toolbar.underline.title": "Soslinhat (Ctrl-U)", + "pad.toolbar.strikethrough.title": "Raiat", + "pad.toolbar.ol.title": "Lista ordenada", + "pad.toolbar.ul.title": "Lista amb de piuses", + "pad.toolbar.indent.title": "Indentar", + "pad.toolbar.unindent.title": "Desindentar", + "pad.toolbar.undo.title": "Anullar (Ctrl-Z)", + "pad.toolbar.redo.title": "Restablir (Ctrl-Y)", + "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.settings.title": "Param\u00e8tres", + "pad.toolbar.embed.title": "Integrar aqueste Pad", + "pad.toolbar.showusers.title": "Afichar los utilizaires del Pad", + "pad.colorpicker.save": "Enregistrar", + "pad.colorpicker.cancel": "Anullar", + "pad.loading": "Cargament...", + "pad.passwordRequired": "Av\u00e8tz besonh d'un senhal per accedir a aqueste Pad", + "pad.permissionDenied": "Vos es pas perm\u00e9s d\u2019accedir a aqueste Pad.", + "pad.wrongPassword": "Senhal incorr\u00e8cte", + "pad.settings.padSettings": "Param\u00e8tres del Pad", + "pad.settings.myView": "Ma vista", + "pad.settings.stickychat": "Afichar totjorn lo chat", + "pad.settings.colorcheck": "Colors d\u2019identificacion", + "pad.settings.linenocheck": "Num\u00e8ros de linhas", + "pad.settings.fontType": "Tipe de poli\u00e7a :", + "pad.settings.fontType.normal": "Normal", + "pad.settings.fontType.monospaced": "Monospace", + "pad.settings.globalView": "Vista d\u2019ensemble", + "pad.settings.language": "Lenga :", + "pad.importExport.import_export": "Importar\/Exportar", + "pad.importExport.import": "Cargar un t\u00e8xte o un document", + "pad.importExport.importSuccessful": "Capitat !", + "pad.importExport.export": "Exportar lo Pad actual coma :", + "pad.importExport.exporthtml": "HTML", + "pad.importExport.exportplain": "T\u00e8xte brut", + "pad.importExport.exportword": "Microsoft Word", + "pad.importExport.exportpdf": "PDF", + "pad.importExport.exportopen": "ODF (Open Document Format)", + "pad.importExport.exportdokuwiki": "DokuWiki", + "pad.modals.connected": "Connectat.", + "pad.modals.reconnecting": "Reconnexion cap a v\u00f2stre Pad...", + "pad.modals.forcereconnect": "For\u00e7ar la reconnexion.", + "pad.modals.userdup": "Dob\u00e8rt dins una autra fen\u00e8stra", + "pad.modals.unauth": "Pas autorizat", + "pad.modals.looping": "Desconnectat", + "pad.modals.slowcommit": "Desconnectat", + "pad.modals.slowcommit.explanation": "Lo servidor respond pas.", + "pad.modals.deleted": "Suprimit.", + "pad.share": "Partejar aqueste Pad", + "pad.share.readonly": "Lectura sola", + "pad.share.link": "Ligam", + "pad.share.emebdcode": "Ligam d'integrar", + "pad.chat": "Chat", + "pad.chat.title": "Dobrir lo chat associat a aqueste pad.", + "pad.chat.loadmessages": "Cargar mai de messatges.", + "timeslider.toolbar.authors": "Autors :", + "timeslider.toolbar.authorsList": "Pas cap d'autor", + "timeslider.toolbar.exportlink.title": "Exportar", + "timeslider.version": "Version {{version}}", + "timeslider.saved": "Enregistrat lo {{day}} {{month}} {{year}}", + "timeslider.dateformat": "{{month}}\/{{day}}\/{{year}} {{hours}}:{{minutes}}:{{seconds}}", + "timeslider.month.january": "Geni\u00e8r", + "timeslider.month.february": "Febri\u00e8r", + "timeslider.month.march": "Mar\u00e7", + "timeslider.month.april": "Abril", + "timeslider.month.may": "Mai", + "timeslider.month.june": "Junh", + "timeslider.month.july": "Julhet", + "timeslider.month.august": "Agost", + "timeslider.month.september": "Setembre", + "timeslider.month.october": "Octobre", + "timeslider.month.november": "Novembre", + "timeslider.month.december": "Decembre", + "pad.userlist.entername": "Entratz v\u00f2stre nom", + "pad.userlist.unnamed": "sens nom", + "pad.userlist.guest": "Convidat", + "pad.userlist.deny": "Refusar", + "pad.userlist.approve": "Aprovar", + "pad.impexp.importbutton": "Importar ara", + "pad.impexp.importing": "Imp\u00f2rt en cors...", + "pad.impexp.importfailed": "Frac\u00e0s de l'importacion", + "pad.impexp.copypaste": "Copiatz\/pegatz", + "@metadata": { + "authors": [ + "Cedric31" + ] + } +} \ No newline at end of file diff --git a/src/locales/os.json b/src/locales/os.json index c2a289bd..4acfad7e 100644 --- a/src/locales/os.json +++ b/src/locales/os.json @@ -1,4 +1,9 @@ { + "@metadata": { + "authors": [ + "Bouron" + ] + }, "index.newPad": "\u041d\u043e\u0433", "index.createOpenPad": "\u043a\u04d5\u043d\u04d5 \u0441\u0430\u0440\u0430\u0437\/\u0431\u0430\u043a\u04d5\u043d \u043d\u043e\u0433 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0430\u0445\u04d5\u043c \u043d\u043e\u043c\u0438\u043c\u04d5:", "pad.toolbar.bold.title": "\u0411\u04d5\u0437\u0434\u0436\u044b\u043d (Ctrl-B)", @@ -44,15 +49,30 @@ "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (Open Document Format)", "pad.importExport.exportdokuwiki": "DokuWiki", + "pad.importExport.abiword.innerHTML": "\u0414\u04d5 \u0431\u043e\u043d \u0443 \u0438\u043c\u043f\u043e\u0440\u0442 \u043a\u04d5\u043d\u044b\u043d \u04d5\u0440\u043c\u04d5\u0441\u0442 \u0445\u0443\u044b\u043c\u04d5\u0442\u04d5\u0433 \u0442\u0435\u043a\u0441\u0442 \u043a\u04d5\u043d\u04d5 html \u0444\u043e\u0440\u043c\u0430\u0442\u04d5\u0439. \u041b\u04d5\u043c\u0431\u044b\u043d\u04d5\u0433 \u0438\u043c\u043f\u043e\u0440\u0442\u044b \u043c\u0438\u043d\u0438\u0443\u0434\u0436\u044b\u0442\u04d5\u043d, \u0434\u04d5 \u0445\u043e\u0440\u0437\u04d5\u0445\u04d5\u0439, \u0441\u04d5\u0432\u04d5\u0440 abiword<\/a>.", "pad.modals.connected": "\u0418\u0443\u0433\u043e\u043d\u0434.", "pad.modals.reconnecting": "\u0414\u04d5 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u043c\u04d5 \u043d\u043e\u0433\u04d5\u0439 \u0438\u0443\u0433\u043e\u043d\u0434 \u0446\u04d5\u0443\u044b..", "pad.modals.forcereconnect": "\u0422\u044b\u0445\u0445\u04d5\u0439 \u0431\u0430\u0438\u0443 \u043a\u04d5\u043d\u044b\u043d", "pad.modals.userdup": "\u041d\u043e\u0433 \u0440\u0443\u0434\u0437\u044b\u043d\u0434\u0436\u044b \u0431\u0430\u043a\u04d5\u043d\u044b\u043d", "pad.modals.userdup.explanation": "\u0410\u0446\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u04d5\u0432\u04d5\u0446\u0446\u04d5\u0433\u04d5\u043d \u0430\u0446\u044b \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u044b \u0438\u0443\u04d5\u0439 \u0444\u044b\u043b\u0434\u04d5\u0440 \u0440\u0443\u0434\u0437\u044b\u043d\u0434\u0436\u044b \u0443 \u0433\u043e\u043c.", "pad.modals.userdup.advice": "\u041d\u043e\u0433\u04d5\u0439 \u0431\u0430\u0438\u0443 \u0443\u044b\u043d, \u0430\u0446\u044b \u0440\u0443\u0434\u0437\u044b\u043d\u0433\u04d5\u0439 \u0430\u0440\u0445\u0430\u0439\u044b\u043d\u044b \u0431\u04d5\u0441\u0442\u044b.", + "pad.modals.unauth": "\u041d\u04d5 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u0430\u0446\u0438\u0433\u043e\u043d\u0434", "pad.modals.unauth.explanation": "\u0414\u04d5 \u0431\u0430\u0440\u0442\u04d5 \u0444\u04d5\u0438\u0432\u0442\u043e\u0439, \u0446\u0430\u043b\u044b\u043d\u043c\u04d5 \u0434\u044b \u0430\u0446\u044b \u0444\u0430\u0440\u0441 \u043a\u0430\u0441\u0442\u04d5. \u0411\u0430\u0444\u04d5\u043b\u0432\u0430\u0440 \u043d\u043e\u0433\u04d5\u0439 \u0431\u0430\u0438\u0443 \u0443\u044b\u043d.", "pad.modals.looping": "\u0425\u0438\u0446\u04d5\u043d.", + "pad.modals.looping.explanation": "\u0421\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0439\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u0438\u043c\u04d5 \u0431\u0430\u0438\u0443 \u043a\u04d5\u043d\u044b\u043d\u044b \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u04d5.", + "pad.modals.looping.cause": "\u0423\u04d5\u0446\u0446\u04d5\u0433\u04d5\u043d \u0434\u044b \u0431\u0430\u0438\u0443 \u0434\u04d5 \u04d5\u043d\u04d5\u043c\u0431\u04d5\u043b\u0433\u04d5 \u0444\u0430\u0439\u0440\u0432\u043e\u043b \u043a\u04d5\u043d\u04d5 \u043f\u0440\u043e\u043a\u0441\u0438\u0439\u044b \u0443\u044b\u043b\u0442\u044b.", + "pad.modals.initsocketfail": "\u0421\u0435\u0440\u0432\u0435\u0440\u043c\u04d5 \u0431\u0430\u0438\u0443\u0433\u04d5\u043d\u04d5\u043d \u043d\u04d5\u0439.", + "pad.modals.initsocketfail.explanation": "\u041d\u04d5 \u0440\u0430\u0443\u0430\u0434\u0438\u0441 \u0441\u0438\u043d\u0445\u0440\u043e\u043d\u0438\u0437\u0430\u0446\u0438\u0439\u044b \u0441\u0435\u0440\u0432\u0435\u0440\u043c\u04d5 \u0431\u0430\u0438\u0443 \u0443\u044b\u043d.", + "pad.modals.initsocketfail.cause": "\u0410\u0439 \u0443\u04d5\u0446\u0446\u04d5\u0433\u04d5\u043d \u0434\u04d5 \u0441\u0433\u0430\u0440\u04d5\u043d \u043a\u04d5\u043d\u04d5 \u0434\u04d5 \u0438\u043d\u0442\u0435\u0440\u043d\u0435\u0442\u044b \u0442\u044b\u0445\u0445\u04d5\u0439 \u0443.", + "pad.modals.slowcommit": "\u0425\u0438\u0446\u04d5\u043d\u0433\u043e\u043d\u0434.", + "pad.modals.slowcommit.explanation": "\u0421\u0435\u0440\u0432\u0435\u0440 \u043d\u04d5 \u0434\u0437\u0443\u0430\u043f\u043f \u043a\u04d5\u043d\u044b.", + "pad.modals.slowcommit.cause": "\u0410\u0439 \u0433\u04d5\u043d\u04d5\u043d \u0438\u0441 \u0443 \u0445\u044b\u0437\u044b \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u04d5\u0439\u044b \u0442\u044b\u0445\u0445\u04d5\u0439.", "pad.modals.deleted": "\u0425\u0430\u0444\u0442.", + "pad.modals.deleted.explanation": "\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0445\u0430\u0444\u0442 \u04d5\u0440\u0446\u044b\u0434.", + "pad.modals.disconnected": "\u0414\u044b \u0445\u0438\u0446\u04d5\u043d\u0433\u043e\u043d\u0434 \u04d5\u0440\u0446\u044b\u0434\u0442\u04d5.", + "pad.modals.disconnected.explanation": "\u0421\u0435\u0440\u0432\u0435\u0440\u0438\u043c\u04d5 \u0438\u0443\u0433\u043e\u043d\u0434 \u0444\u0435\u0441\u04d5\u0444\u0442\u0438\u0441", + "pad.modals.disconnected.cause": "\u0421\u0435\u0440\u0432\u0435\u0440\u043c\u04d5 \u0433\u04d5\u043d\u04d5\u043d \u0438\u0441 \u0431\u0430\u0438\u0443\u0433\u04d5\u043d\u04d5\u043d \u043d\u04d5\u0439. \u0414\u04d5 \u0445\u043e\u0440\u0437\u04d5\u0445\u04d5\u0439, \u0444\u0435\u0445\u044a\u0443\u0441\u044b\u043d \u043d\u044b\u043d \u04d5\u0439 \u043a\u04d5\u043d, \u043a\u04d5\u0434 \u0430\u0444\u0442\u04d5 \u0434\u0430\u0440\u0434\u0434\u04d5\u0440 \u043a\u04d5\u043d\u0430.", + "pad.share": "\u0410\u0446\u044b \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442 \u0440\u0430\u0439\u0443\u0430\u0440\u044b\u043d", "pad.share.readonly": "\u04d4\u0440\u043c\u04d5\u0441\u0442 \u0444\u04d5\u0440\u0441\u044b\u043d\u04d5\u043d", "pad.share.link": "\u04d4\u0440\u0432\u0438\u0442\u04d5\u043d", "pad.share.emebdcode": "URL \u0431\u0430\u0432\u04d5\u0440\u044b\u043d", @@ -83,13 +103,15 @@ "pad.userlist.entername": "\u0414\u04d5 \u043d\u043e\u043c \u0431\u0430\u0444\u044b\u0441\u0441", "pad.userlist.unnamed": "\u04d5\u043d\u04d5\u043d\u043e\u043c", "pad.userlist.guest": "\u0423\u0430\u0437\u04d5\u0433", + "pad.userlist.deny": "\u041d\u044b\u0443\u0443\u0430\u0434\u0437\u044b\u043d", "pad.userlist.approve": "\u0421\u0431\u04d5\u043b\u0432\u044b\u0440\u0434 \u043a\u04d5\u043d\u044b\u043d", "pad.editbar.clearcolors": "\u04d4\u043d\u04d5\u0445\u044a\u04d5\u043d \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u04d5\u0439 \u0445\u044a\u04d5\u0443\u044b \u0430\u0439\u0441\u044b\u043d \u0444\u044b\u0441\u0441\u04d5\u0434\u0436\u044b\u0442\u044b \u043d\u044b\u0441\u04d5\u043d\u0442\u0442\u04d5?", "pad.impexp.importbutton": "\u0415\u043d\u044b\u0440 \u0441\u0438\u043c\u043f\u043e\u0440\u0442 \u043a\u04d5\u043d\u044b\u043d", "pad.impexp.importing": "\u0418\u043c\u043f\u043e\u0440\u0442 \u0446\u04d5\u0443\u044b...", - "@metadata": { - "authors": [ - "Bouron" - ] - } + "pad.impexp.confirmimport": "\u0424\u0430\u0439\u043b\u044b \u0438\u043c\u043f\u043e\u0440\u0442 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u044b \u043d\u044b\u0440\u044b \u0442\u0435\u043a\u0441\u0442 \u0431\u044b\u043d\u0442\u043e\u043d \u0444\u04d5\u0438\u0432\u0434\u0437\u04d5\u043d\u0438\u0441. \u04d4\u0446\u04d5\u0433 \u0434\u04d5 \u0444\u04d5\u043d\u0434\u044b \u0443\u044b\u0439 \u0441\u0430\u0440\u0430\u0437\u044b\u043d?", + "pad.impexp.convertFailed": "\u041c\u0430\u0445\u04d5\u043d \u043d\u04d5 \u0431\u043e\u043d \u043d\u0435 \u0441\u0441\u0438\u0441 \u0430\u0446\u044b \u0444\u0430\u0439\u043b \u0441\u0438\u043c\u043f\u043e\u0440\u0442 \u043a\u04d5\u043d\u044b\u043d. \u0414\u04d5 \u0445\u043e\u0440\u0437\u04d5\u0445\u04d5\u0439, \u0441\u043f\u0430\u0439\u0434\u0430 \u043a\u04d5\u043d \u04d5\u043d\u0434\u04d5\u0440 \u0444\u0430\u0439\u043b\u044b \u0444\u043e\u0440\u043c\u0430\u0442\u04d5\u0439, \u043a\u04d5\u043d\u04d5 \u0441\u043a\u044a\u043e\u043f\u0438 \u043a\u04d5\u043d \u04d5\u043c\u04d5 \u0431\u0430\u0442\u044b\u0441\u0441 \u0442\u0435\u043a\u0441\u0442 \u0434\u04d5\u0445\u04d5\u0434\u04d5\u0433.", + "pad.impexp.uploadFailed": "\u0411\u0430\u0432\u0433\u04d5\u043d\u044b\u043d \u043d\u04d5 \u0440\u0430\u0443\u0430\u0434, \u0434\u04d5 \u0445\u043e\u0440\u0437\u04d5\u0445\u04d5\u0439, \u0444\u04d5\u0441\u0442\u04d5\u0434\u04d5\u0440 \u0431\u0430\u0444\u04d5\u043b\u0432\u0430\u0440", + "pad.impexp.importfailed": "\u0418\u043c\u043f\u043e\u0440\u0442 \u043d\u04d5 \u0440\u0430\u0443\u0430\u0434", + "pad.impexp.copypaste": "\u0414\u04d5 \u0445\u043e\u0440\u0437\u04d5\u0445\u04d5\u0439, \u043a\u044a\u043e\u043f\u0438 \u043a\u04d5\u043d \u04d5\u043c\u04d5 \u04d5\u0432\u04d5\u0440", + "pad.impexp.exportdisabled": "{{type}} \u0444\u043e\u0440\u043c\u0430\u0442\u044b \u044d\u043a\u0441\u043f\u043e\u0440\u0442 \u0445\u0438\u0446\u04d5\u043d \u0443. \u0414\u04d5 \u0445\u043e\u0440\u0437\u04d5\u0445\u04d5\u0439, \u0431\u0430\u0434\u0437\u0443\u0440 \u0434\u04d5 \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u043d \u0430\u0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440\u0442\u04d5\u043c \u0444\u044b\u043b\u0434\u04d5\u0440 \u0431\u0430\u0437\u043e\u043d\u044b\u043d\u04d5\u043d." } \ No newline at end of file diff --git a/src/locales/pt-br.json b/src/locales/pt-br.json index a7df38fa..78c9ed3f 100644 --- a/src/locales/pt-br.json +++ b/src/locales/pt-br.json @@ -1,4 +1,9 @@ { + "@metadata": { + "authors": [ + "Tuliouel" + ] + }, "index.newPad": "Nova Nota", "index.createOpenPad": "ou criar-abrir uma Nota com o nome:", "pad.toolbar.bold.title": "Negrito (Ctrl-B)", @@ -108,10 +113,5 @@ "pad.impexp.uploadFailed": "O envio falhou. Tente outra vez", "pad.impexp.importfailed": "A importa\u00e7\u00e3o falhou", "pad.impexp.copypaste": "Copie e cole", - "pad.impexp.exportdisabled": "A exposta\u00e7\u00e3o em formato {{type}} est\u00e1 desativada. Comunique-se com o administrador do sistema para detalhes.", - "@metadata": { - "authors": [ - "Tuliouel" - ] - } + "pad.impexp.exportdisabled": "A exposta\u00e7\u00e3o em formato {{type}} est\u00e1 desativada. Comunique-se com o administrador do sistema para detalhes." } \ No newline at end of file diff --git a/src/locales/sl.json b/src/locales/sl.json index 9cec99f7..bf834206 100644 --- a/src/locales/sl.json +++ b/src/locales/sl.json @@ -1,4 +1,9 @@ { + "@metadata": { + "authors": [ + "Mateju" + ] + }, "index.newPad": "Nov dokument", "index.createOpenPad": "ali pa odpri dokument z imenom:", "pad.toolbar.bold.title": "Krepko (Ctrl-B)", @@ -108,10 +113,5 @@ "pad.impexp.uploadFailed": "Nalaganje je spodletelo, poskusite znova.", "pad.impexp.importfailed": "Uvoz je spodletel.", "pad.impexp.copypaste": "Vsebino kopirajte in prilepite.", - "pad.impexp.exportdisabled": "Izvoz v zapis {{type}} je onemogo\u010den. Za ve\u010d podrobnosti stopite v stik s skrbnikom.", - "@metadata": { - "authors": [ - "Mateju" - ] - } + "pad.impexp.exportdisabled": "Izvoz v zapis {{type}} je onemogo\u010den. Za ve\u010d podrobnosti stopite v stik s skrbnikom." } \ No newline at end of file diff --git a/src/locales/sv.json b/src/locales/sv.json index 54dc2513..fa493bfe 100644 --- a/src/locales/sv.json +++ b/src/locales/sv.json @@ -78,6 +78,7 @@ "pad.share.emebdcode": "B\u00e4dda in URL", "pad.chat": "Chatt", "pad.chat.title": "\u00d6ppna chatten f\u00f6r detta block.", + "pad.chat.loadmessages": "L\u00e4s in fler meddelanden", "timeslider.pageTitle": "Tidsreglage f\u00f6r {{appTitle}}", "timeslider.toolbar.returnbutton": "\u00c5terv\u00e4nd till blocket", "timeslider.toolbar.authors": "F\u00f6rfattare:", From 666c0adcd270e442a252b68274cac2bcdc1682fb Mon Sep 17 00:00:00 2001 From: goldquest Date: Tue, 22 Jan 2013 16:42:56 +0100 Subject: [PATCH 07/67] script tag didn't link to right location --- src/node/handler/ImportHandler.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/node/handler/ImportHandler.js b/src/node/handler/ImportHandler.js index 5ec07390..b8700141 100644 --- a/src/node/handler/ImportHandler.js +++ b/src/node/handler/ImportHandler.js @@ -176,7 +176,7 @@ exports.doImport = function(req, res, padId) ERR(err); //close the connection - res.send("", 200); + res.send("", 200); }); } From e23108d1993256507ced03a906c888e1967722d6 Mon Sep 17 00:00:00 2001 From: John McLear Date: Tue, 22 Jan 2013 16:03:00 +0000 Subject: [PATCH 08/67] fix issue #1369 where params would break import --- src/static/js/pad_impexp.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/static/js/pad_impexp.js b/src/static/js/pad_impexp.js index c7a26fbe..257dfa66 100644 --- a/src/static/js/pad_impexp.js +++ b/src/static/js/pad_impexp.js @@ -211,9 +211,11 @@ var padimpexp = (function() pad = _pad; //get /p/padname - var pad_root_path = new RegExp(/.*\/p\/[^\/]+/).exec(document.location.pathname) + var pad_root_path = new RegExp(/.*\/p\/[^\/]+/).exec(document.location.pathname); //get http://example.com/p/padname - var pad_root_url = document.location.href.replace(document.location.pathname, pad_root_path) + var pad_root_url = document.location.href.replace(document.location.pathname, pad_root_path); + //strip out params IE ?noColor=true + pad_root_url = pad_root_url.substring(0, pad_root_url.indexOf('?')); //i10l buttom import $('#importsubmitinput').val(html10n.get("pad.impexp.importbutton")); From 159feceb2024b31308e98ad54551aa200dd360c8 Mon Sep 17 00:00:00 2001 From: John McLear Date: Tue, 22 Jan 2013 18:17:15 +0000 Subject: [PATCH 09/67] fix import without params --- src/static/js/pad_impexp.js | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/static/js/pad_impexp.js b/src/static/js/pad_impexp.js index 257dfa66..74564256 100644 --- a/src/static/js/pad_impexp.js +++ b/src/static/js/pad_impexp.js @@ -212,10 +212,8 @@ var padimpexp = (function() //get /p/padname var pad_root_path = new RegExp(/.*\/p\/[^\/]+/).exec(document.location.pathname); - //get http://example.com/p/padname - var pad_root_url = document.location.href.replace(document.location.pathname, pad_root_path); - //strip out params IE ?noColor=true - pad_root_url = pad_root_url.substring(0, pad_root_url.indexOf('?')); + //get http://example.com/p/padname without Params + var pad_root_url = document.location.protocol + '//' + document.location.host + document.location.pathname; //i10l buttom import $('#importsubmitinput').val(html10n.get("pad.impexp.importbutton")); From 6ae46ea8e33f40a8f98056f8ce37945e8a3f3a5b Mon Sep 17 00:00:00 2001 From: John McLear Date: Tue, 22 Jan 2013 18:28:38 +0000 Subject: [PATCH 10/67] fix issue where url was wrong for install --- src/static/js/admin/plugins.js | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) diff --git a/src/static/js/admin/plugins.js b/src/static/js/admin/plugins.js index 8d1901d9..a8b06304 100644 --- a/src/static/js/admin/plugins.js +++ b/src/static/js/admin/plugins.js @@ -47,13 +47,13 @@ $(document).ready(function () { $(".do-install").unbind('click').click(function (e) { var row = $(e.target).closest("tr"); doUpdate = true; - socket.emit("install", row.find(".name").html()); + socket.emit("install", row.find(".name").text()); }); $(".do-uninstall").unbind('click').click(function (e) { var row = $(e.target).closest("tr"); doUpdate = true; - socket.emit("uninstall", row.find(".name").html()); + socket.emit("uninstall", row.find(".name").text()); }); $(".do-prev-page").unbind('click').click(function (e) { @@ -129,15 +129,10 @@ $(document).ready(function () { // hack to access "versions" property of the npm package object for (version in data.results[plugin_name].versions) break; for (attr in plugin) { - if(attr != "name"){ // Hack to rewrite URLS into name - row.find("." + attr).html(plugin[attr]); + if(attr == "name"){ // Hack to rewrite URLS into name + row.find(".name").html(""+plugin[attr]+""); }else{ - if(plugin['url']){ - plugin['url'] = plugin['url'].replace("registry.",""); - row.find(".name").html(""+plugin[attr]+""); - }else{ - row.find(".name").html(plugin["name"]); - } + row.find("." + attr).html(plugin[attr]); } } row.find(".version").html(version); From 5d416579ee3a0943ee258625cc0de4c7a56e49e3 Mon Sep 17 00:00:00 2001 From: John McLear Date: Tue, 22 Jan 2013 22:33:51 +0000 Subject: [PATCH 11/67] bring in some padDiff stuff that doesnt suck --- src/node/db/API.js | 81 ++++++++++++++++++++++++++++++++++ src/node/handler/APIHandler.js | 38 ++++++++++++++++ src/node/utils/padDiff.js | 72 ++++++++++++++++++++++++++++++ 3 files changed, 191 insertions(+) create mode 100644 src/node/utils/padDiff.js diff --git a/src/node/db/API.js b/src/node/db/API.js index 9cad415d..9cecdbd3 100644 --- a/src/node/db/API.js +++ b/src/node/db/API.js @@ -568,6 +568,87 @@ exports.checkToken = function(callback) } +/** +createDiff(padID, startRev, endRev) returns an object of diffs from 2 points in a pad + +Example returns: + +TODO {"code":0,"message":"ok","data":null} +TODO {"code":4,"message":"no or wrong API Key","data":null} +*/ +exports.createDiff = function(padID, startRev, endRev, callback){ + //check if rev is a number + if(startRev !== undefined && typeof startRev != "number") + { + //try to parse the number + if(!isNaN(parseInt(startRev))) + { + startRev = parseInt(startRev, 10); + } + else + { + callback({stop: "startRev is not a number"}); + return; + } + } + + //check if rev is a number + if(endRev !== undefined && typeof endRev != "number") + { + //try to parse the number + if(!isNaN(parseInt(endRev))) + { + endRev = parseInt(endRev, 10); + } + else + { + callback({stop: "endRev is not a number"}); + return; + } + } + + //get the pad + getPadSafe(padID, true, function(err, pad) + { + if(err){ + return callback(err); + } + + try { + var padDiff = new PadDiff(pad, startRev, endRev); + } catch(e) { + return callback({stop:e.message}); + } + + var html, authors; + + async.series([ + function(callback){ + padDiff.getHtml(function(err, _html){ + if(err){ + return callback(err); + } + + html = _html; + callback(); + }); + }, + function(callback){ + padDiff.getAuthors(function(err, _authors){ + if(err){ + return callback(err); + } + + authors = _authors; + callback(); + }); + } + ], function(err){ + callback(err, {html: html, authors: authors}) + }); + }); +} + /******************************/ /** INTERNAL HELPER FUNCTIONS */ /******************************/ diff --git a/src/node/handler/APIHandler.js b/src/node/handler/APIHandler.js index ae93e933..ec7e9f8d 100644 --- a/src/node/handler/APIHandler.js +++ b/src/node/handler/APIHandler.js @@ -24,6 +24,7 @@ var fs = require("fs"); var api = require("../db/API"); var padManager = require("../db/PadManager"); var randomString = require('ep_etherpad-lite/static/js/pad_utils').randomString; +var padDiff = require("../utils/padDiff"); //ensure we have an apikey var apikey = null; @@ -174,6 +175,43 @@ var version = , "listAllGroups" : [] , "checkToken" : [] } +, "1.2.2": + { "createGroup" : [] + , "createGroupIfNotExistsFor" : ["groupMapper"] + , "deleteGroup" : ["groupID"] + , "listPads" : ["groupID"] + , "listAllPads" : [] + , "createDiff" : ["padID", "startRev", "endRev"] + , "createPad" : ["padID", "text"] + , "createGroupPad" : ["groupID", "padName", "text"] + , "createAuthor" : ["name"] + , "createAuthorIfNotExistsFor": ["authorMapper" , "name"] + , "listPadsOfAuthor" : ["authorID"] + , "createSession" : ["groupID", "authorID", "validUntil"] + , "deleteSession" : ["sessionID"] + , "getSessionInfo" : ["sessionID"] + , "listSessionsOfGroup" : ["groupID"] + , "listSessionsOfAuthor" : ["authorID"] + , "getText" : ["padID", "rev"] + , "setText" : ["padID", "text"] + , "getHTML" : ["padID", "rev"] + , "setHTML" : ["padID", "html"] + , "getRevisionsCount" : ["padID"] + , "getLastEdited" : ["padID"] + , "deletePad" : ["padID"] + , "getReadOnlyID" : ["padID"] + , "setPublicStatus" : ["padID", "publicStatus"] + , "getPublicStatus" : ["padID"] + , "setPassword" : ["padID", "password"] + , "isPasswordProtected" : ["padID"] + , "listAuthorsOfPad" : ["padID"] + , "padUsersCount" : ["padID"] + , "getAuthorName" : ["authorID"] + , "padUsers" : ["padID"] + , "sendClientsMessage" : ["padID", "msg"] + , "listAllGroups" : [] + , "checkToken" : [] + } }; /** diff --git a/src/node/utils/padDiff.js b/src/node/utils/padDiff.js new file mode 100644 index 00000000..15957b82 --- /dev/null +++ b/src/node/utils/padDiff.js @@ -0,0 +1,72 @@ +exports.createDiff = function(padID, startRev, endRev, callback){ + //check if rev is a number + if(startRev !== undefined && typeof startRev != "number") + { + //try to parse the number + if(!isNaN(parseInt(startRev))) + { + startRev = parseInt(startRev, 10); + } + else + { + callback({stop: "startRev is not a number"}); + return; + } + } + + //check if rev is a number + if(endRev !== undefined && typeof endRev != "number") + { + //try to parse the number + if(!isNaN(parseInt(endRev))) + { + endRev = parseInt(endRev, 10); + } + else + { + callback({stop: "endRev is not a number"}); + return; + } + } + + //get the pad + getPadSafe(padID, true, function(err, pad) + { + if(err){ + return callback(err); + } + + try { + var padDiff = new PadDiff(pad, startRev, endRev); + } catch(e) { + return callback({stop:e.message}); + } + + var html, authors; + + async.series([ + function(callback){ + padDiff.getHtml(function(err, _html){ + if(err){ + return callback(err); + } + + html = _html; + callback(); + }); + }, + function(callback){ + padDiff.getAuthors(function(err, _authors){ + if(err){ + return callback(err); + } + + authors = _authors; + callback(); + }); + } + ], function(err){ + callback(err, {html: html, authors: authors}) + }); + }); +} From 205d9832253b9d62e7726178e2d6c5a14c3f64ac Mon Sep 17 00:00:00 2001 From: John McLear Date: Tue, 22 Jan 2013 22:48:05 +0000 Subject: [PATCH 12/67] make it crash --- src/node/db/API.js | 1 + src/node/handler/APIHandler.js | 1 - src/node/utils/padDiff.js | 1 + 3 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/node/db/API.js b/src/node/db/API.js index 9cecdbd3..72ca1632 100644 --- a/src/node/db/API.js +++ b/src/node/db/API.js @@ -30,6 +30,7 @@ var async = require("async"); var exportHtml = require("../utils/ExportHtml"); var importHtml = require("../utils/ImportHtml"); var cleanText = require("./Pad").cleanText; +var padDiff = require("../utils/padDiff"); /**********************/ /**GROUP FUNCTIONS*****/ diff --git a/src/node/handler/APIHandler.js b/src/node/handler/APIHandler.js index ec7e9f8d..31b4b187 100644 --- a/src/node/handler/APIHandler.js +++ b/src/node/handler/APIHandler.js @@ -24,7 +24,6 @@ var fs = require("fs"); var api = require("../db/API"); var padManager = require("../db/PadManager"); var randomString = require('ep_etherpad-lite/static/js/pad_utils').randomString; -var padDiff = require("../utils/padDiff"); //ensure we have an apikey var apikey = null; diff --git a/src/node/utils/padDiff.js b/src/node/utils/padDiff.js index 15957b82..230668eb 100644 --- a/src/node/utils/padDiff.js +++ b/src/node/utils/padDiff.js @@ -1,4 +1,5 @@ exports.createDiff = function(padID, startRev, endRev, callback){ +console.warn("WTF"); //check if rev is a number if(startRev !== undefined && typeof startRev != "number") { From d21585b8807b831e51a689bab6769d0ebfc1544b Mon Sep 17 00:00:00 2001 From: John McLear Date: Tue, 22 Jan 2013 23:06:52 +0000 Subject: [PATCH 13/67] mheh --- src/node/db/API.js | 8 ++++++-- src/node/utils/padDiff.js | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/src/node/db/API.js b/src/node/db/API.js index 72ca1632..50c4a6c5 100644 --- a/src/node/db/API.js +++ b/src/node/db/API.js @@ -30,7 +30,7 @@ var async = require("async"); var exportHtml = require("../utils/ExportHtml"); var importHtml = require("../utils/ImportHtml"); var cleanText = require("./Pad").cleanText; -var padDiff = require("../utils/padDiff"); +var PadDiff = require("../utils/padDiff"); /**********************/ /**GROUP FUNCTIONS*****/ @@ -611,16 +611,19 @@ exports.createDiff = function(padID, startRev, endRev, callback){ //get the pad getPadSafe(padID, true, function(err, pad) { +console.warn(padID); if(err){ return callback(err); } try { +console.warn(pad); var padDiff = new PadDiff(pad, startRev, endRev); +console.warn("AFTER"); } catch(e) { return callback({stop:e.message}); } - +/* var html, authors; async.series([ @@ -647,6 +650,7 @@ exports.createDiff = function(padID, startRev, endRev, callback){ ], function(err){ callback(err, {html: html, authors: authors}) }); + */ }); } diff --git a/src/node/utils/padDiff.js b/src/node/utils/padDiff.js index 230668eb..645c2e2d 100644 --- a/src/node/utils/padDiff.js +++ b/src/node/utils/padDiff.js @@ -1,5 +1,6 @@ exports.createDiff = function(padID, startRev, endRev, callback){ console.warn("WTF"); + //check if rev is a number if(startRev !== undefined && typeof startRev != "number") { From 3fb2f02875bfd0da7097a3fa021c7959bde1811b Mon Sep 17 00:00:00 2001 From: John McLear Date: Tue, 22 Jan 2013 23:16:49 +0000 Subject: [PATCH 14/67] semi working --- src/node/db/API.js | 6 +- src/node/utils/padDiff.js | 596 ++++++++++++++++++++++++++++++++++---- 2 files changed, 539 insertions(+), 63 deletions(-) diff --git a/src/node/db/API.js b/src/node/db/API.js index 50c4a6c5..2c8b91ab 100644 --- a/src/node/db/API.js +++ b/src/node/db/API.js @@ -611,19 +611,16 @@ exports.createDiff = function(padID, startRev, endRev, callback){ //get the pad getPadSafe(padID, true, function(err, pad) { -console.warn(padID); if(err){ return callback(err); } try { -console.warn(pad); var padDiff = new PadDiff(pad, startRev, endRev); -console.warn("AFTER"); } catch(e) { + // console.warn(e.stack); return callback({stop:e.message}); } -/* var html, authors; async.series([ @@ -650,7 +647,6 @@ console.warn("AFTER"); ], function(err){ callback(err, {html: html, authors: authors}) }); - */ }); } diff --git a/src/node/utils/padDiff.js b/src/node/utils/padDiff.js index 645c2e2d..f898cbe1 100644 --- a/src/node/utils/padDiff.js +++ b/src/node/utils/padDiff.js @@ -1,74 +1,554 @@ -exports.createDiff = function(padID, startRev, endRev, callback){ -console.warn("WTF"); - - //check if rev is a number - if(startRev !== undefined && typeof startRev != "number") +var Changeset = require("../../static/js/Changeset"); +var async = require("async"); +var exportHtml = require('./ExportHtml'); + +function PadDiff (pad, fromRev, toRev){ + //check parameters + if(!pad || !pad.id || !pad.atext || !pad.pool) { - //try to parse the number - if(!isNaN(parseInt(startRev))) - { - startRev = parseInt(startRev, 10); - } - else - { - callback({stop: "startRev is not a number"}); - return; - } + throw new Error('Invalid pad'); } - //check if rev is a number - if(endRev !== undefined && typeof endRev != "number") - { - //try to parse the number - if(!isNaN(parseInt(endRev))) - { - endRev = parseInt(endRev, 10); - } - else - { - callback({stop: "endRev is not a number"}); - return; - } + var range = pad.getValidRevisionRange(fromRev, toRev); + if(!range) { throw new Error('Invalid revision range.' + + ' startRev: ' + fromRev + + ' endRev: ' + toRev); } + + this._pad = pad; + this._fromRev = range.startRev; + this._toRev = range.endRev; + this._html = null; + this._authors = []; +} + +PadDiff.prototype._isClearAuthorship = function(changeset){ + //unpack + var unpacked = Changeset.unpack(changeset); + + //check if there is nothing in the charBank + if(unpacked.charBank !== "") + return false; + + //check if oldLength == newLength + if(unpacked.oldLen !== unpacked.newLen) + return false; + + //lets iterator over the operators + var iterator = Changeset.opIterator(unpacked.ops); + + //get the first operator, this should be a clear operator + var clearOperator = iterator.next(); + + //check if there is only one operator + if(iterator.hasNext() === true) + return false; + + //check if this operator doesn't change text + if(clearOperator.opcode !== "=") + return false; + + //check that this operator applys to the complete text + //if the text ends with a new line, its exactly one character less, else it has the same length + if(clearOperator.chars !== unpacked.oldLen-1 && clearOperator.chars !== unpacked.oldLen) + return false; + + var attributes = []; + Changeset.eachAttribNumber(changeset, function(attrNum){ + attributes.push(attrNum); + }); + + //check that this changeset uses only one attribute + if(attributes.length !== 1) + return false; + + var appliedAttribute = this._pad.pool.getAttrib(attributes[0]); + + //check if the applied attribute is an anonymous author attribute + if(appliedAttribute[0] !== "author" || appliedAttribute[1] !== "") + return false; + + return true; +} + +PadDiff.prototype._createClearAuthorship = function(rev, callback){ + var self = this; + this._pad.getInternalRevisionAText(rev, function(err, atext){ + if(err){ + return callback(err); + } + + //build clearAuthorship changeset + var builder = Changeset.builder(atext.text.length); + builder.keepText(atext.text, [['author','']], self._pad.pool); + var changeset = builder.toString(); + + callback(null, changeset); + }); +} + +PadDiff.prototype._createClearStartAtext = function(rev, callback){ + var self = this; + + //get the atext of this revision + this._pad.getInternalRevisionAText(rev, function(err, atext){ + if(err){ + return callback(err); + } + + //create the clearAuthorship changeset + self._createClearAuthorship(rev, function(err, changeset){ + if(err){ + return callback(err); + } + + //apply the clearAuthorship changeset + var newAText = Changeset.applyToAText(changeset, atext, self._pad.pool); + + callback(null, newAText); + }); + }); +} + +PadDiff.prototype._getChangesetsInBulk = function(startRev, count, callback) { + var self = this; + + //find out which revisions we need + var revisions = []; + for(var i=startRev;i<(startRev+count) && i<=this._pad.head;i++){ + revisions.push(i); } + + var changesets = [], authors = []; + + //get all needed revisions + async.forEach(revisions, function(rev, callback){ + self._pad.getRevision(rev, function(err, revision){ + if(err){ + return callback(err) + } + + var arrayNum = rev-startRev; + + changesets[arrayNum] = revision.changeset; + authors[arrayNum] = revision.meta.author; + + callback(); + }); + }, function(err){ + callback(err, changesets, authors); + }); +} - //get the pad - getPadSafe(padID, true, function(err, pad) - { - if(err){ - return callback(err); +PadDiff.prototype._addAuthors = function(authors) { + var self = this; + //add to array if not in the array + authors.forEach(function(author){ + if(self._authors.indexOf(author) == -1){ + self._authors.push(author); } + }); +} - try { - var padDiff = new PadDiff(pad, startRev, endRev); - } catch(e) { - return callback({stop:e.message}); - } +PadDiff.prototype._createDiffAtext = function(callback) { + var self = this; + var bulkSize = 100; + + //get the cleaned startAText + self._createClearStartAtext(self._fromRev, function(err, atext){ + if(err) { return callback(err); } + + var superChangeset = null; + + var rev = self._fromRev + 1; - var html, authors; - - async.series([ - function(callback){ - padDiff.getHtml(function(err, _html){ - if(err){ - return callback(err); + //async while loop + async.whilst( + //loop condition + function () { return rev <= self._toRev; }, + + //loop body + function (callback) { + //get the bulk + self._getChangesetsInBulk(rev,bulkSize,function(err, changesets, authors){ + var addedAuthors = []; + + //run trough all changesets + for(var i=0;i= curChar) { + curLineNextOp.chars -= (curChar - indexIntoLine); + done = true; + } else { + indexIntoLine += curLineNextOp.chars; + } + } + } + + while (numChars > 0) { + if ((!curLineNextOp.chars) && (!curLineOpIter.hasNext())) { + curLine++; + curChar = 0; + curLineOpIterLine = curLine; + curLineNextOp.chars = 0; + curLineOpIter = Changeset.opIterator(alines_get(curLine)); + } + if (!curLineNextOp.chars) { + curLineOpIter.next(curLineNextOp); + } + var charsToUse = Math.min(numChars, curLineNextOp.chars); + func(charsToUse, curLineNextOp.attribs, charsToUse == curLineNextOp.chars && curLineNextOp.lines > 0); + numChars -= charsToUse; + curLineNextOp.chars -= charsToUse; + curChar += charsToUse; + } + + if ((!curLineNextOp.chars) && (!curLineOpIter.hasNext())) { + curLine++; + curChar = 0; + } + } + + function skip(N, L) { + if (L) { + curLine += L; + curChar = 0; + } else { + if (curLineOpIter && curLineOpIterLine == curLine) { + consumeAttribRuns(N, function () {}); + } else { + curChar += N; + } + } + } + + function nextText(numChars) { + var len = 0; + var assem = Changeset.stringAssembler(); + var firstString = lines_get(curLine).substring(curChar); + len += firstString.length; + assem.append(firstString); + + var lineNum = curLine + 1; + while (len < numChars) { + var nextString = lines_get(lineNum); + len += nextString.length; + assem.append(nextString); + lineNum++; + } + + return assem.toString().substring(0, numChars); + } + + function cachedStrFunc(func) { + var cache = {}; + return function (s) { + if (!cache[s]) { + cache[s] = func(s); + } + return cache[s]; + }; + } + + var attribKeys = []; + var attribValues = []; + + //iterate over all operators of this changeset + while (csIter.hasNext()) { + var csOp = csIter.next(); + + if (csOp.opcode == '=') { + var textBank = nextText(csOp.chars); + + // decide if this equal operator is an attribution change or not. We can see this by checkinf if attribs is set. + // If the text this operator applies to is only a star, than this is a false positive and should be ignored + if (csOp.attribs && textBank != "*") { + var deletedAttrib = apool.putAttrib(["removed", true]); + var authorAttrib = apool.putAttrib(["author", ""]);; + + attribKeys.length = 0; + attribValues.length = 0; + Changeset.eachAttribNumber(csOp.attribs, function (n) { + attribKeys.push(apool.getAttribKey(n)); + attribValues.push(apool.getAttribValue(n)); + + if(apool.getAttribKey(n) === "author"){ + authorAttrib = n; + }; + }); + + var undoBackToAttribs = cachedStrFunc(function (attribs) { + var backAttribs = []; + for (var i = 0; i < attribKeys.length; i++) { + var appliedKey = attribKeys[i]; + var appliedValue = attribValues[i]; + var oldValue = Changeset.attribsAttributeValue(attribs, appliedKey, apool); + if (appliedValue != oldValue) { + backAttribs.push([appliedKey, oldValue]); + } + } + return Changeset.makeAttribsString('=', backAttribs, apool); + }); + + var oldAttribsAddition = "*" + Changeset.numToString(deletedAttrib) + "*" + Changeset.numToString(authorAttrib); + + var textLeftToProcess = textBank; + + while(textLeftToProcess.length > 0){ + //process till the next line break or process only one line break + var lengthToProcess = textLeftToProcess.indexOf("\n"); + var lineBreak = false; + switch(lengthToProcess){ + case -1: + lengthToProcess=textLeftToProcess.length; + break; + case 0: + lineBreak = true; + lengthToProcess=1; + break; + } + + //get the text we want to procceed in this step + var processText = textLeftToProcess.substr(0, lengthToProcess); + textLeftToProcess = textLeftToProcess.substr(lengthToProcess); + + if(lineBreak){ + builder.keep(1, 1); //just skip linebreaks, don't do a insert + keep for a linebreak + + //consume the attributes of this linebreak + consumeAttribRuns(1, function(){}); + } else { + //add the old text via an insert, but add a deletion attribute + the author attribute of the author who deleted it + var textBankIndex = 0; + consumeAttribRuns(lengthToProcess, function (len, attribs, endsLine) { + //get the old attributes back + var attribs = (undoBackToAttribs(attribs) || "") + oldAttribsAddition; + + builder.insert(processText.substr(textBankIndex, len), attribs); + textBankIndex += len; + }); + + builder.keep(lengthToProcess, 0); + } + } + } else { + skip(csOp.chars, csOp.lines); + builder.keep(csOp.chars, csOp.lines); + } + } else if (csOp.opcode == '+') { + builder.keep(csOp.chars, csOp.lines); + } else if (csOp.opcode == '-') { + var textBank = nextText(csOp.chars); + var textBankIndex = 0; + + consumeAttribRuns(csOp.chars, function (len, attribs, endsLine) { + builder.insert(textBank.substr(textBankIndex, len), attribs + csOp.attribs); + textBankIndex += len; + }); + } + } + + return Changeset.checkRep(builder.toString()); +}; + +//export the constructor +module.exports = PadDiff; From f1b9c213eef910f7f4b94e40b526206aa9763b35 Mon Sep 17 00:00:00 2001 From: John McLear Date: Tue, 22 Jan 2013 23:37:53 +0000 Subject: [PATCH 15/67] and semi working --- src/node/db/Pad.js | 41 ++++++++++++++++++++++++++++++++++++ src/node/utils/ExportHtml.js | 2 +- src/node/utils/padDiff.js | 7 ++++-- 3 files changed, 47 insertions(+), 3 deletions(-) diff --git a/src/node/db/Pad.js b/src/node/db/Pad.js index da1ce9e1..037886ea 100644 --- a/src/node/db/Pad.js +++ b/src/node/db/Pad.js @@ -213,6 +213,47 @@ Pad.prototype.getInternalRevisionAText = function getInternalRevisionAText(targe }); }; +Pad.prototype.getRevision = function getRevisionChangeset(revNum, callback) { + db.get("pad:"+this.id+":revs:"+revNum, callback); +}; + +Pad.prototype.getAllAuthorColors = function getAllAuthorColors(callback){ + var authors = this.getAllAuthors(); + var returnTable = {}; + var colorPalette = authorManager.getColorPalette(); + + async.forEach(authors, function(author, callback){ + authorManager.getAuthorColorId(author, function(err, colorId){ + if(err){ + return callback(err); + } + returnTable[author]=colorPalette[colorId]; + + callback(); + }); + }, function(err){ + callback(err, returnTable); + }); +}; + +Pad.prototype.getValidRevisionRange = function getValidRevisionRange(startRev, endRev) { + startRev = parseInt(startRev, 10); + var head = this.getHeadRevisionNumber(); + endRev = endRev ? parseInt(endRev, 10) : head; + if(isNaN(startRev) || startRev < 0 || startRev > head) { + startRev = null; + } + if(isNaN(endRev) || endRev < startRev) { + endRev = null; + } else if(endRev > head) { + endRev = head; + } + if(startRev !== null && endRev !== null) { + return { startRev: startRev , endRev: endRev } + } + return null; +}; + Pad.prototype.getKeyRevisionNumber = function getKeyRevisionNumber(revNum) { return Math.floor(revNum / 100) * 100; }; diff --git a/src/node/utils/ExportHtml.js b/src/node/utils/ExportHtml.js index 35403013..f385d470 100644 --- a/src/node/utils/ExportHtml.js +++ b/src/node/utils/ExportHtml.js @@ -92,7 +92,7 @@ function getPadHTML(pad, revNum, callback) exports.getPadHTML = getPadHTML; -function getHTMLFromAtext(pad, atext) +exports.getHTMLFromAtext = function(pad, atext) { var apool = pad.apool(); var textLines = atext.text.slice(0, -1).split('\n'); diff --git a/src/node/utils/padDiff.js b/src/node/utils/padDiff.js index f898cbe1..b1fa9277 100644 --- a/src/node/utils/padDiff.js +++ b/src/node/utils/padDiff.js @@ -244,14 +244,17 @@ PadDiff.prototype.getHtml = function(callback){ }, //get the authorColor table function(callback){ - self._pad.getAllAuthorColors(function(err, _authorColors){ + /* + self._pad.getAllAuthorColors(function(err, _authorColors){ // TODO if(err){ return callback(err); } authorColors = _authorColors; - callback(); }); + */ + authorColors = {}; + callback(); }, //convert the atext to html function(callback){ From b76f084f3a84df7199050acd3f11100c6a824040 Mon Sep 17 00:00:00 2001 From: John McLear Date: Wed, 23 Jan 2013 01:01:35 +0000 Subject: [PATCH 16/67] add eejs block for disconnect --- src/templates/pad.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/templates/pad.html b/src/templates/pad.html index 274a3b1a..a2f0ffce 100644 --- a/src/templates/pad.html +++ b/src/templates/pad.html @@ -328,10 +328,12 @@

+ <% e.begin_block("disconnected"); %>

+ <% e.end_block(); %>