From cadb83ac5af0911e722812d934d3133735d46ced Mon Sep 17 00:00:00 2001 From: John McLear Date: Mon, 19 Jan 2015 02:51:32 +0000 Subject: [PATCH 01/19] bumpage --- src/node/db/API.js | 11 ++++- src/node/handler/ImportHandler.js | 8 ++-- src/node/utils/ImportHtml.js | 2 +- tests/backend/specs/api/pad.js | 67 +++++++++++++++++++++++++++++++ 4 files changed, 81 insertions(+), 7 deletions(-) diff --git a/src/node/db/API.js b/src/node/db/API.js index a9df2a12..07127309 100644 --- a/src/node/db/API.js +++ b/src/node/db/API.js @@ -410,7 +410,16 @@ exports.setHTML = function(padID, html, callback) if(ERR(err, callback)) return; // add a new changeset with the new html to the pad - importHtml.setPadHTML(pad, cleanText(html), callback); + importHtml.setPadHTML(pad, cleanText(html), function(e){ + if(e){ + callback(new customError("HTML is malformed","apierror")); + return; + }else{ + //update the clients on the pad + padMessageHandler.updatePadClients(pad, callback); + return; + } + }); //update the clients on the pad padMessageHandler.updatePadClients(pad, callback); diff --git a/src/node/handler/ImportHandler.js b/src/node/handler/ImportHandler.js index a511637c..67698651 100644 --- a/src/node/handler/ImportHandler.js +++ b/src/node/handler/ImportHandler.js @@ -232,11 +232,9 @@ exports.doImport = function(req, res, padId) if(!directDatabaseAccess){ var fileEnding = path.extname(srcFile).toLowerCase(); if (abiword || fileEnding == ".htm" || fileEnding == ".html") { - try{ - importHtml.setPadHTML(pad, text); - }catch(e){ - apiLogger.warn("Error importing, possibly caused by malformed HTML"); - } + importHtml.setPadHTML(pad, text, function(e){ + if(e) apiLogger.warn("Error importing, possibly caused by malformed HTML"); + }); } else { pad.setText(text); } diff --git a/src/node/utils/ImportHtml.js b/src/node/utils/ImportHtml.js index 59802f9b..652e7fcc 100644 --- a/src/node/utils/ImportHtml.js +++ b/src/node/utils/ImportHtml.js @@ -40,7 +40,7 @@ function setPadHTML(pad, html, callback) cc.collectContent(doc); }catch(e){ apiLogger.warn("HTML was not properly formed", e); - return; // We don't process the HTML because it was bad.. + return callback(e); // We don't process the HTML because it was bad.. } var result = cc.finish(); diff --git a/tests/backend/specs/api/pad.js b/tests/backend/specs/api/pad.js index 52e7c917..012ce423 100644 --- a/tests/backend/specs/api/pad.js +++ b/tests/backend/specs/api/pad.js @@ -12,6 +12,7 @@ var apiVersion = 1; var testPadId = makeid(); var lastEdited = ""; var text = generateLongText(); +var ULhtml = '
'; describe('Connectivity', function(){ it('errors if can not connect', function(done) { @@ -71,6 +72,9 @@ describe('Permission', function(){ -> movePad(newPadID, originalPadId) -- Should provide consistant pad data -> getText(originalPadId) -- Should be "hello world" -> getLastEdited(padID) -- Should not be 0 + -> setHTML(padID) -- Should fail on invalid HTML + -> setHTML(padID) *3 -- Should fail on invalid HTML + -> getHTML(padID) -- Should return HTML close to posted HTML */ @@ -390,6 +394,69 @@ describe('getLastEdited', function(){ }); }) + +describe('setHTML', function(){ + it('Sets the HTML of a Pad attempting to pass ugly HTML', function(done) { + var html = "
Hello HTML
"; + api.get(endPoint('setHTML')+"&padID="+testPadId+"&html="+html) + .expect(function(res){ + if(res.body.code !== 1) throw new Error("Allowing crappy HTML to be imported") + }) + .expect('Content-Type', /json/) + .expect(200, done) + }); +}) + +describe('setHTML', function(){ + it('Sets the HTML of a Pad with a bunch of weird unordered lists inserted', function(done) { + api.get(endPoint('setHTML')+"&padID=test&html="+ULhtml) + .expect(function(res){ + if(res.body.code !== 0) throw new Error("List HTML cant be imported") + }) + .expect('Content-Type', /json/) + .expect(200, done) + }); +}) + +describe('getHTML', function(){ + // will fail due to https://github.com/ether/etherpad-lite/issues/1604 + // reminder to self this is how the HTML looks + // + //
+ // + // It will look right in the browser but the export will get it horriby wrong + + // This is what the export puts out + // + //
+ // + //
+ + it('Gets the HTML of a Pad with a bunch of weird unordered lists inserted', function(done) { + api.get(endPoint('getHTML')+"&padID=test") + .expect(function(res){ + console.log(res.body.data.html); + if(res.body.data !== ULhtml) throw new Error("Imported HTML does not match served HTML") + }) + .expect('Content-Type', /json/) + .expect(200, done) + }); +}) + + /* -> movePadForce Test From 85fffbe14ce5ca6f205434ce42b98eb4de12b6d6 Mon Sep 17 00:00:00 2001 From: John McLear Date: Mon, 19 Jan 2015 02:57:10 +0000 Subject: [PATCH 02/19] more handling --- src/node/utils/ImportHtml.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/node/utils/ImportHtml.js b/src/node/utils/ImportHtml.js index 652e7fcc..33fd91c6 100644 --- a/src/node/utils/ImportHtml.js +++ b/src/node/utils/ImportHtml.js @@ -91,6 +91,7 @@ function setPadHTML(pad, html, callback) apiLogger.debug('The changeset: ' + theChangeset); pad.setText(""); pad.appendRevision(theChangeset); + callback(null); } exports.setPadHTML = setPadHTML; From 4f637befeb449fc7e401b8a2a6624d288da86633 Mon Sep 17 00:00:00 2001 From: John McLear Date: Mon, 19 Jan 2015 02:59:17 +0000 Subject: [PATCH 03/19] more fixing --- src/node/db/API.js | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/node/db/API.js b/src/node/db/API.js index 07127309..81dedcfe 100644 --- a/src/node/db/API.js +++ b/src/node/db/API.js @@ -420,10 +420,6 @@ exports.setHTML = function(padID, html, callback) return; } }); - - //update the clients on the pad - padMessageHandler.updatePadClients(pad, callback); - }); } From 7958f3b7232cd72e848b8922ac1ca7e2c0681515 Mon Sep 17 00:00:00 2001 From: John McLear Date: Mon, 19 Jan 2015 03:02:34 +0000 Subject: [PATCH 04/19] nearly fully working --- tests/backend/specs/api/pad.js | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/tests/backend/specs/api/pad.js b/tests/backend/specs/api/pad.js index 012ce423..05f6bdd1 100644 --- a/tests/backend/specs/api/pad.js +++ b/tests/backend/specs/api/pad.js @@ -394,7 +394,6 @@ describe('getLastEdited', function(){ }); }) - describe('setHTML', function(){ it('Sets the HTML of a Pad attempting to pass ugly HTML', function(done) { var html = "
Hello HTML
"; @@ -409,7 +408,7 @@ describe('setHTML', function(){ describe('setHTML', function(){ it('Sets the HTML of a Pad with a bunch of weird unordered lists inserted', function(done) { - api.get(endPoint('setHTML')+"&padID=test&html="+ULhtml) + api.get(endPoint('setHTML')+"&padID="+testPadId+"&html="+ULhtml) .expect(function(res){ if(res.body.code !== 0) throw new Error("List HTML cant be imported") }) @@ -446,9 +445,9 @@ describe('getHTML', function(){ //
it('Gets the HTML of a Pad with a bunch of weird unordered lists inserted', function(done) { - api.get(endPoint('getHTML')+"&padID=test") + api.get(endPoint('getHTML')+"&padID="+testPadId) .expect(function(res){ - console.log(res.body.data.html); + console.log("foo", res.body.data.html); if(res.body.data !== ULhtml) throw new Error("Imported HTML does not match served HTML") }) .expect('Content-Type', /json/) From 3463b16d1aab4277c24aef11fcb93c15f30b35da Mon Sep 17 00:00:00 2001 From: John McLear Date: Mon, 19 Jan 2015 03:04:23 +0000 Subject: [PATCH 05/19] nearly there... --- tests/backend/specs/api/pad.js | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/tests/backend/specs/api/pad.js b/tests/backend/specs/api/pad.js index 05f6bdd1..49800e6f 100644 --- a/tests/backend/specs/api/pad.js +++ b/tests/backend/specs/api/pad.js @@ -433,16 +433,19 @@ describe('getHTML', function(){ // It will look right in the browser but the export will get it horriby wrong // This is what the export puts out + // //
    - //
  • one
  • - //
  • 2
  • + //
  • one
  • + //
  • 2
  • //
//
- //
    - // NOTE THIS IS WHAT'S MISSING - //
  • UL2
  • + //
      + //
        + //
      • UL2
      • + //
      //
    //
    + // it('Gets the HTML of a Pad with a bunch of weird unordered lists inserted', function(done) { api.get(endPoint('getHTML')+"&padID="+testPadId) From 3649118194f8441b84ada355f4fe432e34d14d21 Mon Sep 17 00:00:00 2001 From: Cetra Free Date: Mon, 19 Jan 2015 14:25:06 +1030 Subject: [PATCH 06/19] Update to timeslider to include base path for easier proxying --- src/static/js/timeslider.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/static/js/timeslider.js b/src/static/js/timeslider.js index b3c10b8a..9cb274be 100644 --- a/src/static/js/timeslider.js +++ b/src/static/js/timeslider.js @@ -60,10 +60,12 @@ function init() { var url = loc.protocol + "//" + loc.hostname + ":" + port + "/"; //find out in which subfolder we are var resource = exports.baseURL.substring(1) + 'socket.io'; + + console.log(exports.baseURL); //build up the socket io connection - socket = io.connect(url, {resource: resource}); - + socket = io.connect(url, {path: exports.baseURL + 'socket.io', resource: resource}); + //send the ready message once we're connected socket.on('connect', function() { From f1c9c58c2db481925e11c63fc7ac727802573530 Mon Sep 17 00:00:00 2001 From: Cetra Free Date: Mon, 19 Jan 2015 14:28:30 +1030 Subject: [PATCH 07/19] Update to timeslider to include base path for easier proxying --- src/static/js/timeslider.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/static/js/timeslider.js b/src/static/js/timeslider.js index 9cb274be..ec237df5 100644 --- a/src/static/js/timeslider.js +++ b/src/static/js/timeslider.js @@ -60,8 +60,6 @@ function init() { var url = loc.protocol + "//" + loc.hostname + ":" + port + "/"; //find out in which subfolder we are var resource = exports.baseURL.substring(1) + 'socket.io'; - - console.log(exports.baseURL); //build up the socket io connection socket = io.connect(url, {path: exports.baseURL + 'socket.io', resource: resource}); From 28aeeff154adf67e92735398a1e7625066b3133d Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Mon, 19 Jan 2015 09:28:03 +0100 Subject: [PATCH 08/19] Localisation updates from https://translatewiki.net. --- src/locales/ar.json | 12 ++++---- src/locales/az.json | 61 ++++++++++++++++++++------------------ src/locales/be-tarask.json | 3 ++ src/locales/ca.json | 9 ++++-- src/locales/cs.json | 1 + src/locales/de.json | 3 ++ src/locales/el.json | 3 ++ src/locales/es.json | 3 ++ src/locales/fa.json | 3 ++ src/locales/fi.json | 4 ++- src/locales/fr.json | 3 ++ src/locales/gl.json | 3 ++ src/locales/hu.json | 1 + src/locales/ia.json | 3 ++ src/locales/lb.json | 1 + src/locales/mk.json | 3 ++ src/locales/ms.json | 3 ++ src/locales/nap.json | 38 +++++++++++++++++++++++- src/locales/pl.json | 4 ++- src/locales/pt-br.json | 6 +++- src/locales/pt.json | 4 ++- src/locales/sv.json | 3 ++ src/locales/zh-hans.json | 5 +++- src/locales/zh-hant.json | 4 +-- 24 files changed, 138 insertions(+), 45 deletions(-) diff --git a/src/locales/ar.json b/src/locales/ar.json index b4ea58dd..b0d19fcc 100644 --- a/src/locales/ar.json +++ b/src/locales/ar.json @@ -3,7 +3,8 @@ "authors": [ "Ali1", "Tux-tn", - "Alami" + "Alami", + "Meno25" ] }, "index.newPad": "باد جديد", @@ -11,14 +12,14 @@ "pad.toolbar.bold.title": "سميك (Ctrl-B)", "pad.toolbar.italic.title": "مائل (Ctrl-I)", "pad.toolbar.underline.title": "تسطير (Ctrl-U)", - "pad.toolbar.strikethrough.title": "شطب", - "pad.toolbar.ol.title": "قائمة مرتبة", - "pad.toolbar.ul.title": "قائمة غير مرتبة", + "pad.toolbar.strikethrough.title": "شطب (Ctrl+5)", + "pad.toolbar.ol.title": "قائمة مرتبة (Ctrl+Shift+N)", + "pad.toolbar.ul.title": "قائمة غير مرتبة (Ctrl+Shift+L)", "pad.toolbar.indent.title": "إزاحة", "pad.toolbar.unindent.title": "حذف الإزاحة", "pad.toolbar.undo.title": "فك (Ctrl-Z)", "pad.toolbar.redo.title": "تكرار (Ctrl-Y)", - "pad.toolbar.clearAuthorship.title": "مسح ألوان التأليف", + "pad.toolbar.clearAuthorship.title": "مسح ألوان التأليف (Ctrl+Shift+C)", "pad.toolbar.import_export.title": "استيراد/تصدير من/إلى تنسيقات ملفات مختلفة", "pad.toolbar.timeslider.title": "متصفح التاريخ", "pad.toolbar.savedRevision.title": "حفظ المراجعة", @@ -46,6 +47,7 @@ "pad.importExport.import": "تحميل أي ملف نصي أو وثيقة", "pad.importExport.importSuccessful": "ناجح!", "pad.importExport.export": "تصدير الباد الحالي بصفة:", + "pad.importExport.exportetherpad": "إيثرباد", "pad.importExport.exporthtml": "إتش تي إم إل", "pad.importExport.exportplain": "نص عادي", "pad.importExport.exportword": "مايكروسوفت وورد", diff --git a/src/locales/az.json b/src/locales/az.json index 25a8ecc2..99d3216a 100644 --- a/src/locales/az.json +++ b/src/locales/az.json @@ -3,35 +3,36 @@ "authors": [ "AZISS", "Khan27", - "Mushviq Abdulla" + "Mushviq Abdulla", + "Wertuose" ] }, - "index.newPad": "Yeni Pad", - "index.createOpenPad": "və ya Pad-ı adı ilə yarat/aç:", + "index.newPad": "Yeni lövhə", + "index.createOpenPad": "və ya lövhəni bu adla yarat/aç:", "pad.toolbar.bold.title": "Qalın (Ctrl-B)", "pad.toolbar.italic.title": "Kursiv (Ctrl-I)", "pad.toolbar.underline.title": "Altından xətt çəkmə (Ctrl-U)", - "pad.toolbar.strikethrough.title": "Pozulma", - "pad.toolbar.ol.title": "Qaydaya salınmış siyahı", - "pad.toolbar.ul.title": "Qaydaya salınmamış siyahı", - "pad.toolbar.indent.title": "Abzas", - "pad.toolbar.unindent.title": "Çıxıntı", - "pad.toolbar.undo.title": "Geri Al (Ctrl-Z)", - "pad.toolbar.redo.title": "Qaytarmaq (Ctrl-Y)", + "pad.toolbar.strikethrough.title": "Üstdən xətləmək (Ctrl+5)", + "pad.toolbar.ol.title": "Sıralanmış siyahı (Ctrl+Shift+N)", + "pad.toolbar.ul.title": "Sırasız siyahı (Ctrl+Shift+L)", + "pad.toolbar.indent.title": "Abzas (TAB)", + "pad.toolbar.unindent.title": "Çıxıntı (Shift+TAB)", + "pad.toolbar.undo.title": "Geri qaytar (Ctrl+Z)", + "pad.toolbar.redo.title": "Qaytar (Ctrl+Y)", "pad.toolbar.clearAuthorship.title": "Müəlliflik Rənglərini Təmizlə", "pad.toolbar.import_export.title": "Müxtəlif fayl formatların(a/dan) idxal/ixrac", "pad.toolbar.timeslider.title": "Vaxt cədvəli", "pad.toolbar.savedRevision.title": "Saxlanılan Düzəlişlər", "pad.toolbar.settings.title": "Tənzimləmələr", - "pad.toolbar.embed.title": "Bu pad-ı yayımla", - "pad.toolbar.showusers.title": "Pad-da istifadəçiləri göstər", + "pad.toolbar.embed.title": "Bu lövhəni paylaş və qur", + "pad.toolbar.showusers.title": "Lövhədəki istifadəçiləri göstər", "pad.colorpicker.save": "Saxla", "pad.colorpicker.cancel": "İmtina", "pad.loading": "Yüklənir...", - "pad.passwordRequired": "Bu pad-a daxil olmaq üçün parol lazımdır", - "pad.permissionDenied": "Bu pad-a daxil olmaq üçün icazəniz yoxdur", + "pad.passwordRequired": "Bu lövhəyə daxil olmaq üçün parol lazımdır", + "pad.permissionDenied": "Bu lövhəyə daxil olmaq üçün icazəniz yoxdur", "pad.wrongPassword": "Sizin parolunuz səhvdir", - "pad.settings.padSettings": "Pad Tənzimləmələri", + "pad.settings.padSettings": "Lövhə nizamlamaları", "pad.settings.myView": "Mənim Görüntüm", "pad.settings.stickychat": "Söhbət həmişə ekranda", "pad.settings.colorcheck": "Müəlliflik rəngləri", @@ -45,18 +46,19 @@ "pad.importExport.import_export": "İdxal/İxrac", "pad.importExport.import": "Hər hansı bir mətn faylı və ya sənəd yüklə", "pad.importExport.importSuccessful": "Uğurlu!", - "pad.importExport.export": "Hazırki pad-ı ixrac etmək kimi:", + "pad.importExport.export": "Hazırkı lövhəni bu şəkildə ixrac et:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Adi mətn", "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "PDF", - "pad.importExport.exportopen": "ODF (Açıq Sənəd Formatı)", + "pad.importExport.exportopen": "ODF (açıq sənəd formatı)", "pad.importExport.abiword.innerHTML": "Siz yalnız adi mətndən və ya HTML-dən idxal edə bilərsiniz. İdxalın daha mürəkkəb funksiyaları üçün, zəhmət olmasa, AbiWord-i quraşdırın.", "pad.modals.connected": "Bağlandı.", - "pad.modals.reconnecting": "Sizin pad yenidən qoşulur..", + "pad.modals.reconnecting": "Sizin lövhə yenidən qoşulur..", "pad.modals.forcereconnect": "Məcbur təkrarən bağlan", "pad.modals.userdup": "Başqa pəncərədə artıq açıqdır", - "pad.modals.userdup.explanation": "Sənəd, ola bilsin ki, bu kompyuterdə, brauzerin bir neçə pəncərəsində açılmışdır.", + "pad.modals.userdup.explanation": "Bu lövhə, ola bilsin ki, bu kompüterdəki brauzerin bir neçə pəncərəsində açılmışdır.", "pad.modals.userdup.advice": "Bu pəncərədən istifadəylə yenidən qoşulun.", "pad.modals.unauth": "İcazəli deyil", "pad.modals.unauth.explanation": "Bu səhifəyə baxdığınız vaxt sizin icazəniz dəyişilib. Bərpa etmək üşün yenidən cəhd edin.", @@ -69,22 +71,22 @@ "pad.modals.slowcommit.cause": "Bu şəbəkə bağlantısında problemlər yarana bilər.", "pad.modals.badChangeset.explanation": "Etdiyiniz bir redaktə sinxronizasiya serveri tərəfindən qeyri-leqal/qanundan kənar olaraq təsbit edildi.", "pad.modals.badChangeset.cause": "Bu, yanlış server tərtibatı ya da başqa bir gözlənilməyən davranışlar nəticəsində ola bilər. Bu sizə bir xəta imiş kimi görünürsə lütfən servis nəzarətçisi ilə əlaqə yaradın. Redaktəyə davam etmək üçün yenidən qoşulmanı yoxlayın.", - "pad.modals.corruptPad.explanation": "Əldə etməyə çalışdığınız sənəd zədəlidir.", + "pad.modals.corruptPad.explanation": "Daxil olmağa çalışdığınız lövhə zədəlidir.", "pad.modals.corruptPad.cause": "Bu, yanlış server tərtibatı ya da başqa bir gözlənilməyən davranışlardan əmələ gələ bilər. Lütfən servis nəzarətçisi ilə əlaqə yaradın.", "pad.modals.deleted": "Silindi.", - "pad.modals.deleted.explanation": "Bu pad silindi.", + "pad.modals.deleted.explanation": "Bu lövhə silindi.", "pad.modals.disconnected": "Əlaqə kəsilib.", "pad.modals.disconnected.explanation": "Serverə qoşulma itirilib", "pad.modals.disconnected.cause": "Server istifadə olunmur. Əgər problem təkrarlanacaqsa, bizə bildirin.", - "pad.share": "Bu pad-ı yayımla", + "pad.share": "Bu lövhəni paylaş", "pad.share.readonly": "Yalnız oxuyun", "pad.share.link": "Keçid", "pad.share.emebdcode": "URL-ni yayımla", "pad.chat": "Söhbət", - "pad.chat.title": "Bu pad üçün chat açın.", + "pad.chat.title": "Bu lövhə üçün çat açın.", "pad.chat.loadmessages": "Daha çox mesaj yüklə", "timeslider.pageTitle": "{{appTitle}} Vaxt cədvəli", - "timeslider.toolbar.returnbutton": "Pad-a qayıt", + "timeslider.toolbar.returnbutton": "Lövhəyə qayıt", "timeslider.toolbar.authors": "Müəlliflər:", "timeslider.toolbar.authorsList": "Müəllif yoxdur", "timeslider.toolbar.exportlink.title": "İxrac", @@ -104,18 +106,19 @@ "timeslider.month.october": "Oktyabr", "timeslider.month.november": "Noyabr", "timeslider.month.december": "Dekabr", - "timeslider.unnamedauthors": "{{num}} adsız müəlliflər", + "timeslider.unnamedauthors": "{{num}} adsız {[plural(num) one: müəllif, other: müəllif]}", "pad.savedrevs.marked": "Bu versiya indi yaddaşa saxlanmış kimi nişanlandı", - "pad.userlist.entername": "Adınızı daxil et", + "pad.userlist.entername": "Adınızı daxil edin", "pad.userlist.unnamed": "adsız", "pad.userlist.guest": "Qonaq", "pad.userlist.deny": "İnkar etmək", "pad.userlist.approve": "Təsdiqləmək", - "pad.editbar.clearcolors": "Bütün sənədlərdə müəlliflik rənglərini təmizlə?", - "pad.impexp.importbutton": "İndi idxal edin", + "pad.editbar.clearcolors": "Bütün sənədlərdə müəllif rəngləri təmizlənsin?", + "pad.impexp.importbutton": "İndi idxal et", "pad.impexp.importing": "İdxal...", - "pad.impexp.confirmimport": "Faylın idxalı cari mətni yeniləyəcək. Siz əminsinizmi ki, davam etmək istəyirsiniz?", + "pad.impexp.confirmimport": "Faylın idxalı lövhədəki cari mətni yeniləyəcək. Davam etmək istədiyinizə əminsinizmi?", "pad.impexp.convertFailed": "Biz bu fayl idxal etmək mümkün deyil idi. Xahiş olunur müxtəlif sənəddən istifadə edin və ya kopyalayıb yapışdırmaq yolundan istifadə edin", + "pad.impexp.padHasData": "Biz bu faylı idxal edə bilmədik, çünki bu lövhədə düzəlişlər edilib, lütfən yeni lövhə idxal edin", "pad.impexp.uploadFailed": "Yükləmədə səhv, xahiş olunur yenə cəhd edin", "pad.impexp.importfailed": "İdxal zamanı səhv", "pad.impexp.copypaste": "Xahiş edirik kopyalayıb yapışdırın", diff --git a/src/locales/be-tarask.json b/src/locales/be-tarask.json index 61a78539..f67d10fe 100644 --- a/src/locales/be-tarask.json +++ b/src/locales/be-tarask.json @@ -28,6 +28,7 @@ "pad.colorpicker.save": "Захаваць", "pad.colorpicker.cancel": "Скасаваць", "pad.loading": "Загрузка...", + "pad.noCookie": "Кукі ня знойдзеныя. Калі ласка, дазвольце кукі ў вашым браўзэры!", "pad.passwordRequired": "Для доступу да гэтага дакумэнта патрэбны пароль", "pad.permissionDenied": "Вы ня маеце дазволу на доступ да гэтага дакумэнта", "pad.wrongPassword": "Вы ўвялі няслушны пароль", @@ -46,6 +47,7 @@ "pad.importExport.import": "Загрузіжайце любыя тэкставыя файлы або дакумэнты", "pad.importExport.importSuccessful": "Пасьпяхова!", "pad.importExport.export": "Экспартаваць бягучы дакумэнт як:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Просты тэкст", "pad.importExport.exportword": "Microsoft Word", @@ -116,6 +118,7 @@ "pad.impexp.importing": "Імпартаваньне…", "pad.impexp.confirmimport": "Імпарт файла перазапіша цяперашні тэкст дакумэнту. Вы ўпэўненыя, што хочаце працягваць?", "pad.impexp.convertFailed": "Не атрымалася імпартаваць гэты файл. Калі ласка, выкарыстайце іншы фармат дакумэнту або скапіюйце ўручную.", + "pad.impexp.padHasData": "Мы не змаглі імпартаваць гэты файл, бо дакумэнт ужо мае зьмены, калі ласка, імпартуйце ў новы дакумэнт", "pad.impexp.uploadFailed": "Загрузка не атрымалася, калі ласка, паспрабуйце яшчэ раз", "pad.impexp.importfailed": "Памылка імпарту", "pad.impexp.copypaste": "Калі ласка, скапіюйце і ўстаўце", diff --git a/src/locales/ca.json b/src/locales/ca.json index 92da9d02..b7edc65b 100644 --- a/src/locales/ca.json +++ b/src/locales/ca.json @@ -13,9 +13,9 @@ "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.strikethrough.title": "Ratllat (Ctrl+5)", + "pad.toolbar.ol.title": "Llista ordenada (Ctrl+Shift+N)", + "pad.toolbar.ul.title": "Llista sense ordenar (Ctrl+Shift+L)", "pad.toolbar.indent.title": "Sagnat (TAB)", "pad.toolbar.unindent.title": "Sagnat invers (Majúsc+TAB)", "pad.toolbar.undo.title": "Desfés (Ctrl-Z)", @@ -30,6 +30,7 @@ "pad.colorpicker.save": "Desa", "pad.colorpicker.cancel": "Cancel·la", "pad.loading": "S'està carregant...", + "pad.noCookie": "No s'ha trobat la galeta. Permeteu les galetes en el navegador!", "pad.passwordRequired": "Us cal una contrasenya per a accedir a aquest pad", "pad.permissionDenied": "No teniu permisos per a accedir a aquest pad", "pad.wrongPassword": "La contrasenya és incorrecta", @@ -48,6 +49,7 @@ "pad.importExport.import": "Puja qualsevol fitxer de text o document", "pad.importExport.importSuccessful": "Hi ha hagut èxit!", "pad.importExport.export": "Exporta el pad actual com a:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Text net", "pad.importExport.exportword": "Microsoft Word", @@ -118,6 +120,7 @@ "pad.impexp.importing": "Important...", "pad.impexp.confirmimport": "En importar un fitxer se sobreescriurà el text actual del pad. Esteu segur que voleu continuar?", "pad.impexp.convertFailed": "No és possible d'importar aquest fitxer. Si us plau, podeu provar d'utilitzar un format diferent o copiar i enganxar manualment.", + "pad.impexp.padHasData": "No vam poder importar el fitxer perquè el pad ja tenia canvis. Importeu-lo a un nou pad", "pad.impexp.uploadFailed": "Ha fallat la càrrega. Torneu-ho a provar", "pad.impexp.importfailed": "Ha fallat la importació", "pad.impexp.copypaste": "Si us plau, copieu i enganxeu", diff --git a/src/locales/cs.json b/src/locales/cs.json index 1c1357c4..2a6b5fec 100644 --- a/src/locales/cs.json +++ b/src/locales/cs.json @@ -48,6 +48,7 @@ "pad.importExport.import": "Nahrát libovolný textový soubor nebo dokument", "pad.importExport.importSuccessful": "Úspěšně!", "pad.importExport.export": "Exportovat stávající Pad jako:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Prostý text", "pad.importExport.exportword": "Microsoft Word", diff --git a/src/locales/de.json b/src/locales/de.json index f05d43c3..a2bca723 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -29,6 +29,7 @@ "pad.colorpicker.save": "Speichern", "pad.colorpicker.cancel": "Abbrechen", "pad.loading": "Laden …", + "pad.noCookie": "Das Cookie konnte nicht gefunden werden. Bitte erlaube Cookies in deinem Browser!", "pad.passwordRequired": "Sie benötigen ein Passwort, um auf dieses Pad zuzugreifen", "pad.permissionDenied": "Sie haben keine Berechtigung, um auf dieses Pad zuzugreifen", "pad.wrongPassword": "Ihr Passwort war falsch", @@ -47,6 +48,7 @@ "pad.importExport.import": "Text-Datei oder Dokument hochladen", "pad.importExport.importSuccessful": "Erfolgreich!", "pad.importExport.export": "Aktuelles Pad exportieren als:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Textdatei", "pad.importExport.exportword": "Microsoft Word", @@ -117,6 +119,7 @@ "pad.impexp.importing": "Importiere …", "pad.impexp.confirmimport": "Das Importieren einer Datei überschreibt den aktuellen Text des Pads. Wollen Sie wirklich fortfahren?", "pad.impexp.convertFailed": "Wir können diese Datei nicht importieren. Bitte verwenden Sie ein anderes Dokumentformat oder übertragen Sie den Text manuell.", + "pad.impexp.padHasData": "Wir konnten diese Datei nicht importieren, da dieses Pad bereits Änderungen hat. Bitte importiere zu einem neuen Pad.", "pad.impexp.uploadFailed": "Der Upload ist fehlgeschlagen. Bitte versuchen Sie es erneut.", "pad.impexp.importfailed": "Import fehlgeschlagen", "pad.impexp.copypaste": "Bitte kopieren und einfügen", diff --git a/src/locales/el.json b/src/locales/el.json index f20e1e87..740da95c 100644 --- a/src/locales/el.json +++ b/src/locales/el.json @@ -30,6 +30,7 @@ "pad.colorpicker.save": "Αποθήκευση", "pad.colorpicker.cancel": "Άκυρο", "pad.loading": "Φόρτωση...", + "pad.noCookie": "Το cookie δεν βρέθηκε. Παρακαλώ επιτρέψτε τα cookies στον περιηγητή σας!", "pad.passwordRequired": "Χρειάζεστε κωδικό πρόσβασης για πρόσβαση σε αυτό το pad", "pad.permissionDenied": "Δεν έχετε δικαίωμα πρόσβασης σε αυτό το pad", "pad.wrongPassword": "Ο κωδικός σας ήταν λανθασμένος", @@ -48,6 +49,7 @@ "pad.importExport.import": "Αποστολή οποιουδήποτε αρχείου κειμένου ή εγγράφου", "pad.importExport.importSuccessful": "Επιτυχής!", "pad.importExport.export": "Εξαγωγή τρέχοντος pad ως:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Απλό κείμενο", "pad.importExport.exportword": "Microsoft Word", @@ -118,6 +120,7 @@ "pad.impexp.importing": "Εισάγεται...", "pad.impexp.confirmimport": "Η εισαγωγή ενός αρχείου θα αντικαταστήσει το κείμενο του pad. Είστε βέβαιοι ότι θέλετε να συνεχίσετε;", "pad.impexp.convertFailed": "Δεν καταφέραμε να εισάγουμε αυτό το αρχείο. Παρακαλώ χρησιμοποιήστε διαφορετικό τύπο αρχείου ή αντιγράψτε και επικολλήστε χειροκίνητα", + "pad.impexp.padHasData": "Δεν μπορέσαμε να εισάγουμε το αρχείο επειδή το Pad είχε ήδη αλλαγές. Παρακαλούμε εισαγάγετε το αρχείο σε νέο pad", "pad.impexp.uploadFailed": "Η αποστολή απέτυχε, παρακαλώ προσπαθήστε ξανά", "pad.impexp.importfailed": "Η εισαγωγή απέτυχε", "pad.impexp.copypaste": "Παρακαλώ αντιγράψτε και επικολλήστε", diff --git a/src/locales/es.json b/src/locales/es.json index df9a415e..5547d327 100644 --- a/src/locales/es.json +++ b/src/locales/es.json @@ -35,6 +35,7 @@ "pad.colorpicker.save": "Guardar", "pad.colorpicker.cancel": "Cancelar", "pad.loading": "Cargando...", + "pad.noCookie": "La cookie no se pudo encontrar. ¡Por favor, habilita las cookies en tu navegador!", "pad.passwordRequired": "Necesitas una contraseña para acceder a este pad", "pad.permissionDenied": "No tienes permiso para acceder a este pad", "pad.wrongPassword": "La contraseña era incorrecta", @@ -53,6 +54,7 @@ "pad.importExport.import": "Subir cualquier texto o documento", "pad.importExport.importSuccessful": "¡Éxito!", "pad.importExport.export": "Exporta el pad actual como:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Texto plano", "pad.importExport.exportword": "Microsoft Word", @@ -123,6 +125,7 @@ "pad.impexp.importing": "Importando...", "pad.impexp.confirmimport": "Al importar un archivo se borrará el contenido actual del pad. ¿Estás seguro de que quieres continuar?", "pad.impexp.convertFailed": "No pudimos importar este archivo. Inténtalo con un formato diferente o copia y pega manualmente.", + "pad.impexp.padHasData": "No hemos podido importar este archivo porque esta almohadilla ya ha tenido cambios, por favor, importa a una nueva almohadilla", "pad.impexp.uploadFailed": "El envío falló. Intentalo de nuevo.", "pad.impexp.importfailed": "Fallo al importar", "pad.impexp.copypaste": "Intenta copiar y pegar", diff --git a/src/locales/fa.json b/src/locales/fa.json index 94f2d69f..53fb55b2 100644 --- a/src/locales/fa.json +++ b/src/locales/fa.json @@ -31,6 +31,7 @@ "pad.colorpicker.save": "ذخیره", "pad.colorpicker.cancel": "لغو", "pad.loading": "در حال بارگذاری...", + "pad.noCookie": "کوکی یافت نشد. لطفاً اجازهٔ اجرای کوکی در مروگرتان را بدهید!", "pad.passwordRequired": "برای دسترسی به این دفترچه یادداشت نیاز به یک گذرواژه دارید", "pad.permissionDenied": "شما اجازه‌ی دسترسی به این دفترچه یادداشت را ندارید", "pad.wrongPassword": "گذرواژه‌ی شما درست نیست", @@ -49,6 +50,7 @@ "pad.importExport.import": "بارگذاری پرونده‌ی متنی یا سند", "pad.importExport.importSuccessful": "موفقیت آمیز بود!", "pad.importExport.export": "برون‌ریزی این دفترچه یادداشت با قالب:", + "pad.importExport.exportetherpad": "اترپد", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "متن ساده", "pad.importExport.exportword": "Microsoft Word", @@ -119,6 +121,7 @@ "pad.impexp.importing": "در حال درون‌ریزی...", "pad.impexp.confirmimport": "با درون‌ریزی یک پرونده نوشتهٔ کنونی دفترچه پاک می‌شود. آیا می‌خواهید ادامه دهید؟", "pad.impexp.convertFailed": "ما نمی‌توانیم این پرونده را درون‌ریزی کنیم. خواهشمندیم قالب دیگری برای سندتان انتخاب کرده یا بصورت دستی آنرا کپی کنید", + "pad.impexp.padHasData": "امکان درون‌ریز این پرونده نیست زیرا این پد تغییر کرده‌است. لطفاً در پد جدید درون‌ریزی کنید.", "pad.impexp.uploadFailed": "آپلود انجام نشد، دوباره تلاش کنید", "pad.impexp.importfailed": "درون‌ریزی انجام نشد", "pad.impexp.copypaste": "کپی پیست کنید", diff --git a/src/locales/fi.json b/src/locales/fi.json index ee1775dc..25e4d084 100644 --- a/src/locales/fi.json +++ b/src/locales/fi.json @@ -10,7 +10,8 @@ "Tomi Toivio", "Veikk0.ma", "VezonThunder", - "Macofe" + "Macofe", + "MrTapsa" ] }, "index.newPad": "Uusi muistio", @@ -35,6 +36,7 @@ "pad.colorpicker.save": "Tallenna", "pad.colorpicker.cancel": "Peru", "pad.loading": "Ladataan…", + "pad.noCookie": "Evästettä ei löytynyt. Ole hyvä, ja salli evästeet selaimessasi!", "pad.passwordRequired": "Tämä muistio on suojattu salasanalla.", "pad.permissionDenied": "Käyttöoikeutesi eivät riitä tämän muistion käyttämiseen.", "pad.wrongPassword": "Väärä salasana", diff --git a/src/locales/fr.json b/src/locales/fr.json index 921d1eeb..92fcb193 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -43,6 +43,7 @@ "pad.colorpicker.save": "Enregistrer", "pad.colorpicker.cancel": "Annuler", "pad.loading": "Chargement…", + "pad.noCookie": "Le cookie n’a pas pu être trouvé. Veuillez autoriser les cookies dans votre navigateur !", "pad.passwordRequired": "Vous avez besoin d'un mot de passe pour accéder à ce pad", "pad.permissionDenied": "Il ne vous est pas permis d’accéder à ce pad", "pad.wrongPassword": "Votre mot de passe est incorrect", @@ -61,6 +62,7 @@ "pad.importExport.import": "Charger un texte ou un document", "pad.importExport.importSuccessful": "Réussi !", "pad.importExport.export": "Exporter le pad actuel comme :", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Texte brut", "pad.importExport.exportword": "Microsoft Word", @@ -131,6 +133,7 @@ "pad.impexp.importing": "Import en cours...", "pad.impexp.confirmimport": "Importer un fichier écrasera le texte actuel du pad. Êtes-vous sûr de vouloir le faire ?", "pad.impexp.convertFailed": "Nous ne pouvons pas importer ce fichier. Veuillez utiliser un autre format de document ou faire un copier/coller manuel", + "pad.impexp.padHasData": "Nous n’avons pas pu importer ce fichier parce que ce bloc a déjà eu des modifications ; veuillez importer vers un nouveau bloc", "pad.impexp.uploadFailed": "Le téléchargement a échoué, veuillez réessayer", "pad.impexp.importfailed": "Échec de l'importation", "pad.impexp.copypaste": "Veuillez copier/coller", diff --git a/src/locales/gl.json b/src/locales/gl.json index a14fbb12..b0ca6532 100644 --- a/src/locales/gl.json +++ b/src/locales/gl.json @@ -27,6 +27,7 @@ "pad.colorpicker.save": "Gardar", "pad.colorpicker.cancel": "Cancelar", "pad.loading": "Cargando...", + "pad.noCookie": "A cookie non se puido atopar. Por favor, habilite as cookies no seu navegador!", "pad.passwordRequired": "Cómpre un contrasinal para acceder a este documento", "pad.permissionDenied": "Non ten permiso para acceder a este documento", "pad.wrongPassword": "O contrasinal era incorrecto", @@ -45,6 +46,7 @@ "pad.importExport.import": "Cargar un ficheiro de texto ou documento", "pad.importExport.importSuccessful": "Correcto!", "pad.importExport.export": "Exportar o documento actual en formato:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Texto simple", "pad.importExport.exportword": "Microsoft Word", @@ -115,6 +117,7 @@ "pad.impexp.importing": "Importando...", "pad.impexp.confirmimport": "A importación dun ficheiro ha sobrescribir o texto actual do documento. Está seguro de querer continuar?", "pad.impexp.convertFailed": "Non somos capaces de importar o ficheiro. Utilice un formato de documento diferente ou copie e pegue manualmente", + "pad.impexp.padHasData": "Non puidemos importar este ficheiro porque este Pad xa tivo cambios, por favor, importe a un novo pad.", "pad.impexp.uploadFailed": "Houbo un erro ao cargar o ficheiro; inténteo de novo", "pad.impexp.importfailed": "Fallou a importación", "pad.impexp.copypaste": "Copie e pegue", diff --git a/src/locales/hu.json b/src/locales/hu.json index 7efac2df..3102790d 100644 --- a/src/locales/hu.json +++ b/src/locales/hu.json @@ -118,6 +118,7 @@ "pad.impexp.importing": "Importálás…", "pad.impexp.confirmimport": "Egy fájl importálása felülírja a jelenlegi szöveget a noteszben. Biztos hogy folytatod?", "pad.impexp.convertFailed": "Nem tudtuk importálni ezt a fájlt. Kérjük, használj másik dokumentum formátumot, vagy kézzel másold és illeszd be a tartalmat", + "pad.impexp.padHasData": "Nem tudjuk importálni ezt a fájlt, mert ez a Pad már megváltozott, kérjük, importálj egy új padra", "pad.impexp.uploadFailed": "A feltöltés sikertelen, próbáld meg újra", "pad.impexp.importfailed": "Az importálás nem sikerült", "pad.impexp.copypaste": "Kérjük másold be", diff --git a/src/locales/ia.json b/src/locales/ia.json index 50a0690c..e7f5cc2b 100644 --- a/src/locales/ia.json +++ b/src/locales/ia.json @@ -26,6 +26,7 @@ "pad.colorpicker.save": "Salveguardar", "pad.colorpicker.cancel": "Cancellar", "pad.loading": "Cargamento…", + "pad.noCookie": "Le cookie non pote esser trovate. Per favor permitte le cookies in tu navigator!", "pad.passwordRequired": "Un contrasigno es necessari pro acceder a iste pad", "pad.permissionDenied": "Tu non ha le permission de acceder a iste pad", "pad.wrongPassword": "Le contrasigno es incorrecte", @@ -44,6 +45,7 @@ "pad.importExport.import": "Incargar qualcunque file de texto o documento", "pad.importExport.importSuccessful": "Succedite!", "pad.importExport.export": "Exportar le pad actual como:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Texto simple", "pad.importExport.exportword": "Microsoft Word", @@ -114,6 +116,7 @@ "pad.impexp.importing": "Importation in curso…", "pad.impexp.confirmimport": "Le importation de un file superscribera le texto actual del pad. Es tu secur de voler continuar?", "pad.impexp.convertFailed": "Nos non ha potite importar iste file. Per favor usa un altere formato de documento o copia e colla le texto manualmente.", + "pad.impexp.padHasData": "Nos non ha potite importar iste file perque iste Pad ha jam habite cambiamentos. Per favor importa lo a un nove pad.", "pad.impexp.uploadFailed": "Le incargamento ha fallite. Per favor reproba.", "pad.impexp.importfailed": "Importation fallite", "pad.impexp.copypaste": "Per favor copia e colla", diff --git a/src/locales/lb.json b/src/locales/lb.json index 841add75..68bdb418 100644 --- a/src/locales/lb.json +++ b/src/locales/lb.json @@ -15,6 +15,7 @@ "pad.colorpicker.save": "Späicheren", "pad.colorpicker.cancel": "Ofbriechen", "pad.loading": "Lueden...", + "pad.noCookie": "Cookie gouf net fonnt. Erlaabt w.e.g. Cookien an Ärem Browser!", "pad.wrongPassword": "Äert Passwuert ass falsch", "pad.settings.fontType.normal": "Normal", "pad.settings.language": "Sprooch:", diff --git a/src/locales/mk.json b/src/locales/mk.json index fc18533f..9fc6b817 100644 --- a/src/locales/mk.json +++ b/src/locales/mk.json @@ -27,6 +27,7 @@ "pad.colorpicker.save": "Зачувај", "pad.colorpicker.cancel": "Откажи", "pad.loading": "Вчитувам...", + "pad.noCookie": "Не можев да го најдам колачето. Овозможете колачиња во вашиот прелистувач!", "pad.passwordRequired": "Потребна е лозинка за пристап", "pad.permissionDenied": "За овде не е потребна дозвола за пристап", "pad.wrongPassword": "Погрешна лозинка", @@ -45,6 +46,7 @@ "pad.importExport.import": "Подигање на било каква текстуална податотека или документ", "pad.importExport.importSuccessful": "Успешно!", "pad.importExport.export": "Извези ја тековната тетратка како", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Прост текст", "pad.importExport.exportword": "Microsoft Word", @@ -115,6 +117,7 @@ "pad.impexp.importing": "Увезувам...", "pad.impexp.confirmimport": "Увезувајќи ја податотеката ќе го замените целиот досегашен текст во тетратката. Дали сте сигурни дека сакате да продолжите?", "pad.impexp.convertFailed": "Не можев да ја увезам податотеката. Послужете се со поинаков формат или прекопирајте го текстот рачно.", + "pad.impexp.padHasData": "Не можевме да ја увеземе оваа податотека бидејќи оваа тетратка веќе има промени. Увезете ја во нова тетратка.", "pad.impexp.uploadFailed": "Подигањето не успеа. Обидете се повторно.", "pad.impexp.importfailed": "Увозот не успеа", "pad.impexp.copypaste": "Прекопирајте", diff --git a/src/locales/ms.json b/src/locales/ms.json index cf15be6e..d099de06 100644 --- a/src/locales/ms.json +++ b/src/locales/ms.json @@ -26,6 +26,7 @@ "pad.colorpicker.save": "Simpan", "pad.colorpicker.cancel": "Batalkan", "pad.loading": "Sedang dimuatkan...", + "pad.noCookie": "Cookie tidak dapat dijumpai. Tolong benarkan cookie dalam pelayar anda!", "pad.passwordRequired": "Anda memerlukan kata laluan untuk mengakses pad ini", "pad.permissionDenied": "Anda tiada kebenaran untuk mengakses pad ini", "pad.wrongPassword": "Kata laluan anda salah", @@ -44,6 +45,7 @@ "pad.importExport.import": "Muat naik sebarang fail teks atau dokumen", "pad.importExport.importSuccessful": "Berjaya!", "pad.importExport.export": "Eksport pad semasa sebagai:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Teks biasa", "pad.importExport.exportword": "Microsoft Word", @@ -114,6 +116,7 @@ "pad.impexp.importing": "Sedang mengimport...", "pad.impexp.confirmimport": "Mengimport fail akan menulis ganti teks semasa pada pad ini. Adakah anda benar-benar ingin teruskan?", "pad.impexp.convertFailed": "Fail tidak dapat diimport. Sila gunakan format dokumen yang lain atau salin tampal secara manual", + "pad.impexp.padHasData": "Kami tidak dapat mengimport fail ini kerana Pad ini sudah mengalami perubahan. Sila import ke pad yang baru", "pad.impexp.uploadFailed": "Muat naik gagal, sila cuba lagi", "pad.impexp.importfailed": "Import gagal", "pad.impexp.copypaste": "Sila salin tampal", diff --git a/src/locales/nap.json b/src/locales/nap.json index ffc7b740..6cd1651b 100644 --- a/src/locales/nap.json +++ b/src/locales/nap.json @@ -1,7 +1,8 @@ { "@metadata": { "authors": [ - "Chelin" + "Chelin", + "C.R." ] }, "index.newPad": "Novo Pad", @@ -21,23 +22,58 @@ "pad.toolbar.timeslider.title": "Presentazzione cronologgia", "pad.toolbar.savedRevision.title": "Sarva revisione", "pad.toolbar.settings.title": "Mpustaziune", + "pad.toolbar.embed.title": "Sparte e nzerta stu Pad", + "pad.toolbar.showusers.title": "Mmusta ll'utente ncopp'a stu Pad", "pad.colorpicker.save": "Sarva", "pad.colorpicker.cancel": "Canciella", "pad.loading": "Carecamiento 'n curso…", + "pad.noCookie": "Cookie nun truvata. Pe' piacere premmettete 'e cookies dint' 'o navigatóre vuosto!", "pad.passwordRequired": "Pe' accede a chisto Pad è necessaria 'na password", "pad.permissionDenied": "Nun se dispunne d\"e permisse necessare pe' accede a chisto Pad", "pad.wrongPassword": "'A password è sbagliata", "pad.settings.padSettings": "Mpostazzione d\"o pad", + "pad.settings.myView": "Mia Veruta", + "pad.settings.stickychat": "Chat sempe ncopp' 'o schermo", + "pad.settings.colorcheck": "Auturevolezza pe' culure", + "pad.settings.linenocheck": "Nummere 'e riga", + "pad.settings.rtlcheck": "Lieggere 'e cuntenute 'a destra a smerza?", + "pad.settings.fontType": "Tipo 'e funte:", "pad.settings.fontType.normal": "Nurmale", + "pad.settings.fontType.monospaced": "Monospace", + "pad.settings.globalView": "Visualizzazione globbale", + "pad.settings.language": "Llengua:", + "pad.importExport.import_export": "Mpurtaziune/sportaziune", + "pad.importExport.import": "Carreca coccherunto testo o documento", + "pad.importExport.importSuccessful": "Ngarrata!", + "pad.importExport.export": "Sportà stu Pad comme:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", + "pad.importExport.exportplain": "Testo nurmale", + "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (Open Document Format)", + "pad.importExport.abiword.innerHTML": "Putite surtanto mpurtà testo chiano o furmatte HTML. Pe n'avé sisteme cchiù annanze 'e mpurtazione pe' piacere installate Abiword.", "pad.modals.connected": "Cunnesso.", "pad.modals.reconnecting": "Ricunnessione ô pad 'n curso...", "pad.modals.forcereconnect": "Forza 'a ricunnessione", "pad.modals.userdup": "Aprito 'n n'ata fenesta", + "pad.modals.userdup.explanation": "Stu Pad pare fosse araputo dint'a cchiù 'e na fenesta 'e navigatore dint'a stu computer.", + "pad.modals.userdup.advice": "Riconnettateve pe' putè ausà mmece sta fenesta.", "pad.modals.unauth": "Nun autorizzato", + "pad.modals.unauth.explanation": "'E premmesse vuoste so' cagnate pe' tramente ca se vereva sta paggena. Tentate 'e ve riconnettà.", + "pad.modals.looping.explanation": "Ce stanno probbleme 'e comunicazione c' 'o server 'e sincronizzaziona.", + "pad.modals.looping.cause": "Può darse ca ve site cullegato pe' mmiez' 'e nu firewall incompatibbele o proxy.", + "pad.modals.initsocketfail": "Nun se può arrevà 'o server.", + "pad.modals.initsocketfail.explanation": "Nun se può cunnettà 'o server e sincronizzaziona.", + "pad.modals.initsocketfail.cause": "Stu fatto è succiesso, probabbilmente pe' bbìa 'e nu probblema c' 'o navigatóre 'o ll'internet.", + "pad.modals.slowcommit.explanation": "'O server nun risponne.", + "pad.modals.slowcommit.cause": "Stu fatto può darse ca è causato pe' bbìa 'e prubbleme 'e connettività 'e rezza.", + "pad.modals.badChangeset.explanation": "Nu cagnamento ca stavate facenno è stato classeficato comme illegale p' 'o server 'e sincronizzaziona.", + "pad.modals.badChangeset.cause": "Chistu fatto può darse ca è causato pe' bbìa 'e na mpustazione errata d' 'o server o cocch'atu comportamento nun preveduto. Pe' piacere cuntattate l'ammenistratore d' 'o servizio, si se pienza ca chist'è n'errore. Tentate a ve riconnettà pe' cuntinuà 'a edità.", + "pad.modals.corruptPad.explanation": "'O pad addò vulevate trasì è scassato.", "pad.modals.deleted": "Canciellato.", + "pad.share.link": "Jonta", + "pad.chat": "Chiàcchiera", "timeslider.pageTitle": "Cronologgia {{appTitle}}", "timeslider.toolbar.returnbutton": "Ritorna ô Pad", "timeslider.toolbar.authors": "Auture:", diff --git a/src/locales/pl.json b/src/locales/pl.json index 7e68ca84..bcd7a0ef 100644 --- a/src/locales/pl.json +++ b/src/locales/pl.json @@ -5,7 +5,8 @@ "Ty221", "WTM", "Woytecr", - "Macofe" + "Macofe", + "Pan Cube" ] }, "index.newPad": "Nowy dokument", @@ -48,6 +49,7 @@ "pad.importExport.import": "Prześlij dowolny plik tekstowy lub dokument", "pad.importExport.importSuccessful": "Sukces!", "pad.importExport.export": "Eksportuj bieżący dokument jako:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Zwykły tekst", "pad.importExport.exportword": "Microsoft Word", diff --git a/src/locales/pt-br.json b/src/locales/pt-br.json index 204d7792..e8eb79ee 100644 --- a/src/locales/pt-br.json +++ b/src/locales/pt-br.json @@ -10,7 +10,8 @@ "Rafaelff", "Dianakc", "Macofe", - "Rodrigo codignoli" + "Rodrigo codignoli", + "Webysther" ] }, "index.newPad": "Nova Nota", @@ -35,6 +36,7 @@ "pad.colorpicker.save": "Salvar", "pad.colorpicker.cancel": "Cancelar", "pad.loading": "Carregando...", + "pad.noCookie": "Cookie não foi encontrado. Por favor, habilite cookies no seu navegador!", "pad.passwordRequired": "Você precisa de uma senha para acessar esta Nota", "pad.permissionDenied": "Você não tem permissão para acessar esta Nota", "pad.wrongPassword": "Senha incorreta", @@ -53,6 +55,7 @@ "pad.importExport.import": "Enviar um arquivo texto ou documento", "pad.importExport.importSuccessful": "Completo!", "pad.importExport.export": "Exportar a presente nota como:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Texto puro", "pad.importExport.exportword": "Microsoft Word", @@ -123,6 +126,7 @@ "pad.impexp.importing": "Importando...", "pad.impexp.confirmimport": "Importar um arquivo sobrescreverá o atual texto da nota. Tem certeza de que deseja prosseguir?", "pad.impexp.convertFailed": "Não foi possível importar este arquivo. Use outro formato ou copie e cole manualmente", + "pad.impexp.padHasData": "Não foi possível importar este arquivo porque este bloco de notas já tinha alterações, consulte como importar para um novo bloco de notas", "pad.impexp.uploadFailed": "O envio falhou. Tente outra vez", "pad.impexp.importfailed": "A importação falhou", "pad.impexp.copypaste": "Copie e cole", diff --git a/src/locales/pt.json b/src/locales/pt.json index c7cfcb5c..473980fd 100644 --- a/src/locales/pt.json +++ b/src/locales/pt.json @@ -6,7 +6,8 @@ "Tuliouel", "Waldir", "Imperadeiro98", - "Macofe" + "Macofe", + "Ti4goc" ] }, "index.newPad": "Nova Nota", @@ -105,6 +106,7 @@ "pad.impexp.importbutton": "Importar agora", "pad.impexp.importing": "Importando...", "pad.impexp.confirmimport": "A importação de um ficheiro irá substituir o texto atual do pad. Tem certeza que deseja continuar?", + "pad.impexp.padHasData": "Não fomos capazes de importar este ficheiro porque esta Almofada já tinha alterações, consulte importar para um novo bloco", "pad.impexp.uploadFailed": "O upload falhou. Por favor, tente novamente", "pad.impexp.importfailed": "A importação falhou", "pad.impexp.copypaste": "Por favor, copie e cole" diff --git a/src/locales/sv.json b/src/locales/sv.json index bda3cb83..a53146bf 100644 --- a/src/locales/sv.json +++ b/src/locales/sv.json @@ -28,6 +28,7 @@ "pad.colorpicker.save": "Spara", "pad.colorpicker.cancel": "Avbryt", "pad.loading": "Läser in...", + "pad.noCookie": "Kunde inte hitta några kakor. Var god tillåt kakor i din webbläsare!", "pad.passwordRequired": "Du behöver ett lösenord för att få tillgång till detta block", "pad.permissionDenied": "Du har inte åtkomstbehörighet för detta block", "pad.wrongPassword": "Ditt lösenord var fel", @@ -46,6 +47,7 @@ "pad.importExport.import": "Ladda upp textfiler eller dokument", "pad.importExport.importSuccessful": "Åtgärden slutfördes!", "pad.importExport.export": "Export aktuellt block som:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Oformaterad text", "pad.importExport.exportword": "Microsoft Word", @@ -116,6 +118,7 @@ "pad.impexp.importing": "Importerar...", "pad.impexp.confirmimport": "Att importera en fil kommer att skriva över den aktuella texten i blocket. Är du säker på att du vill fortsätta?", "pad.impexp.convertFailed": "Vi kunde inte importera denna fil. Var god använd ett annat dokumentformat eller kopiera och klistra in den manuellt", + "pad.impexp.padHasData": "Vi kunde inte importera denna fil eftersom detta block redan har redigerats. Importera den till ett nytt block.", "pad.impexp.uploadFailed": "Uppladdningen misslyckades, var god försök igen", "pad.impexp.importfailed": "Importering misslyckades", "pad.impexp.copypaste": "Var god kopiera och klistra in", diff --git a/src/locales/zh-hans.json b/src/locales/zh-hans.json index 104e850b..bc1c97b5 100644 --- a/src/locales/zh-hans.json +++ b/src/locales/zh-hans.json @@ -24,7 +24,7 @@ "pad.toolbar.indent.title": "增加缩进(TAB)", "pad.toolbar.unindent.title": "减少缩进(Shift+TAB)", "pad.toolbar.undo.title": "撤消 (Ctrl-Z)", - "pad.toolbar.redo.title": "重做 (Ctrl-Y)", + "pad.toolbar.redo.title": "重做(Ctrl+Y)", "pad.toolbar.clearAuthorship.title": "清除作者颜色(Ctrl+Shift+C)", "pad.toolbar.import_export.title": "从不同的文件格式导入/导出", "pad.toolbar.timeslider.title": "时间轴", @@ -35,6 +35,7 @@ "pad.colorpicker.save": "保存", "pad.colorpicker.cancel": "取消", "pad.loading": "载入中……", + "pad.noCookie": "无法找到Cookie。请在您的浏览器中允许Cookie!", "pad.passwordRequired": "您需要密码才能访问这个记事本", "pad.permissionDenied": "您没有访问这个记事本的权限", "pad.wrongPassword": "您的密码错了", @@ -53,6 +54,7 @@ "pad.importExport.import": "上载任何文本文件或档案", "pad.importExport.importSuccessful": "成功!", "pad.importExport.export": "当前记事本导出为:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "纯文本", "pad.importExport.exportword": "Microsoft Word", @@ -123,6 +125,7 @@ "pad.impexp.importing": "正在导入...", "pad.impexp.confirmimport": "导入的文件将覆盖记事本的当前文本。你确定要继续吗?", "pad.impexp.convertFailed": "我们无法导入此文档。请使用他文档格式或手动复制贴上。", + "pad.impexp.padHasData": "我们无法导入此文件,因为此记事本已经变更,请导入到一个新的记事本", "pad.impexp.uploadFailed": "上载失败,请重试", "pad.impexp.importfailed": "导入失败", "pad.impexp.copypaste": "请复制粘贴", diff --git a/src/locales/zh-hant.json b/src/locales/zh-hant.json index 6d79268c..a692d0ca 100644 --- a/src/locales/zh-hant.json +++ b/src/locales/zh-hant.json @@ -96,13 +96,13 @@ "timeslider.saved": "{{year}}年{{month}}{{day}}日儲存", "timeslider.dateformat": "{{year}}年{{month}}月{{day}}日 {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "1月", - "timeslider.month.february": "2月", + "timeslider.month.february": "二月", "timeslider.month.march": "3月", "timeslider.month.april": "4月", "timeslider.month.may": "5月", "timeslider.month.june": "6月", "timeslider.month.july": "7月", - "timeslider.month.august": "8月", + "timeslider.month.august": "八月", "timeslider.month.september": "9月", "timeslider.month.october": "10月", "timeslider.month.november": "11月", From 44d1d6cc13e1742fd6424e8ecb9cb914ae2e0b83 Mon Sep 17 00:00:00 2001 From: John McLear Date: Mon, 19 Jan 2015 14:32:58 +0000 Subject: [PATCH 09/19] fix ie editing --- src/static/js/domline.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/static/js/domline.js b/src/static/js/domline.js index b1927b16..b8e6eb14 100644 --- a/src/static/js/domline.js +++ b/src/static/js/domline.js @@ -225,7 +225,7 @@ domline.createDomLine = function(nonEmpty, doesWrap, optBrowser, optDocument) { newHTML += ' '; } - else if (!browser.msie) + else { newHTML += '
    '; } From ab71bc7c205e6944fcdc46b09cb8e603c433540e Mon Sep 17 00:00:00 2001 From: John McLear Date: Mon, 19 Jan 2015 14:45:49 +0000 Subject: [PATCH 10/19] hrm --- src/static/js/ace2_inner.js | 7 +++++-- src/static/js/contentcollector.js | 2 -- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/static/js/ace2_inner.js b/src/static/js/ace2_inner.js index bd1f0053..ebc03ca4 100644 --- a/src/static/js/ace2_inner.js +++ b/src/static/js/ace2_inner.js @@ -1605,7 +1605,7 @@ function Ace2Inner(){ if (linesWrapped > 0) { - if(!browser.ie){ + if(!browser.msie){ // chrome decides in it's infinite wisdom that its okay to put the browsers visisble window in the middle of the span // an outcome of this is that the first chars of the string are no longer visible to the user.. Yay chrome.. // Move the browsers visible area to the left hand side of the span @@ -2905,6 +2905,7 @@ function Ace2Inner(){ { if (browser.msie && (!nonEmpty)) { +top.console.log("here"); var result = { node: null, appendSpan: noop, @@ -3583,6 +3584,7 @@ function Ace2Inner(){ // On Mac and Linux, move right moves to end of word and move left moves to start; // on Windows, always move to start of word. // On Windows, Firefox and IE disagree on whether to stop for punctuation (FF says no). + /* if (browser.windows && forwardNotBack) { while ((!isDone()) && isWordChar(nextChar())) @@ -3605,6 +3607,7 @@ function Ace2Inner(){ advance(); } } + */ return i; } @@ -4867,7 +4870,7 @@ function Ace2Inner(){ }) // CompositionEvent is not implemented below IE version 8 - if ( !(browser.msie && browser.version < 9) && document.documentElement) + if ( !(browser.msie && parseInt(browser.version) < 9) && document.documentElement) { $(document.documentElement).on("compositionstart", handleCompositionEvent); $(document.documentElement).on("compositionend", handleCompositionEvent); diff --git a/src/static/js/contentcollector.js b/src/static/js/contentcollector.js index b7b3c568..1759d865 100644 --- a/src/static/js/contentcollector.js +++ b/src/static/js/contentcollector.js @@ -625,13 +625,11 @@ function makeContentCollector(collectStyles, browser, apool, domInterface, class _ensureColumnZero(state); } } - if (browser.msie) { // in IE, a point immediately after a DIV appears on the next line _reachBlockPoint(node, 1, state); } - state.localAttribs = localAttribs; }; // can pass a falsy value for end of doc From c315defc3124b44e9c5300e93952f124f7e1d82f Mon Sep 17 00:00:00 2001 From: John McLear Date: Mon, 19 Jan 2015 15:15:52 +0000 Subject: [PATCH 11/19] temp bodge fix --- src/static/js/ace2_inner.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/static/js/ace2_inner.js b/src/static/js/ace2_inner.js index ebc03ca4..5204e2a1 100644 --- a/src/static/js/ace2_inner.js +++ b/src/static/js/ace2_inner.js @@ -1910,6 +1910,7 @@ function Ace2Inner(){ if (charsLeft === 0) { var index = 0; + browser.msie = false; // Temp fix to resolve enter and backspace issues.. if (browser.msie && line == (rep.lines.length() - 1) && lineNode.childNodes.length === 0) { // best to stay at end of last empty div in IE @@ -2905,7 +2906,6 @@ function Ace2Inner(){ { if (browser.msie && (!nonEmpty)) { -top.console.log("here"); var result = { node: null, appendSpan: noop, From 5967e085b7bc7efe8ab9ab1be8c728763b3f876a Mon Sep 17 00:00:00 2001 From: John McLear Date: Mon, 19 Jan 2015 15:37:29 +0000 Subject: [PATCH 12/19] fix ul tests --- tests/backend/specs/api/pad.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/tests/backend/specs/api/pad.js b/tests/backend/specs/api/pad.js index 49800e6f..3527f95a 100644 --- a/tests/backend/specs/api/pad.js +++ b/tests/backend/specs/api/pad.js @@ -12,7 +12,7 @@ var apiVersion = 1; var testPadId = makeid(); var lastEdited = ""; var text = generateLongText(); -var ULhtml = '
    • one
    • 2

      • UL2
    '; +var ULhtml = '
    • one
    • 2

      • UL2
    '; describe('Connectivity', function(){ it('errors if can not connect', function(done) { @@ -450,8 +450,9 @@ describe('getHTML', function(){ it('Gets the HTML of a Pad with a bunch of weird unordered lists inserted', function(done) { api.get(endPoint('getHTML')+"&padID="+testPadId) .expect(function(res){ - console.log("foo", res.body.data.html); - if(res.body.data !== ULhtml) throw new Error("Imported HTML does not match served HTML") + var ehtml = res.body.data.html.replace("
    ", "").toLowerCase(); + var uhtml = ULhtml.toLowerCase(); + if(ehtml !== uhtml) throw new Error("Imported HTML does not match served HTML") }) .expect('Content-Type', /json/) .expect(200, done) From 860c584b425b88ba504e4cbe50c2420a375987aa Mon Sep 17 00:00:00 2001 From: John McLear Date: Mon, 19 Jan 2015 15:44:16 +0000 Subject: [PATCH 13/19] remove pointless comments --- tests/backend/specs/api/pad.js | 30 +----------------------------- 1 file changed, 1 insertion(+), 29 deletions(-) diff --git a/tests/backend/specs/api/pad.js b/tests/backend/specs/api/pad.js index 3527f95a..6010a11c 100644 --- a/tests/backend/specs/api/pad.js +++ b/tests/backend/specs/api/pad.js @@ -399,6 +399,7 @@ describe('setHTML', function(){ var html = "
    Hello HTML
    "; api.get(endPoint('setHTML')+"&padID="+testPadId+"&html="+html) .expect(function(res){ +console.log(res.body.code); if(res.body.code !== 1) throw new Error("Allowing crappy HTML to be imported") }) .expect('Content-Type', /json/) @@ -418,35 +419,6 @@ describe('setHTML', function(){ }) describe('getHTML', function(){ - // will fail due to https://github.com/ether/etherpad-lite/issues/1604 - // reminder to self this is how the HTML looks - //
      - //
    • one
    • - //
    • 2
    • - //
    - //
    - //
      - //
        - //
      • UL2
      • - //
      - //
    - // It will look right in the browser but the export will get it horriby wrong - - // This is what the export puts out - // - //
      - //
    • one
    • - //
    • 2
    • - //
    - //
    - //
      - //
        - //
      • UL2
      • - //
      - //
    - //
    - // - it('Gets the HTML of a Pad with a bunch of weird unordered lists inserted', function(done) { api.get(endPoint('getHTML')+"&padID="+testPadId) .expect(function(res){ From 531d25ab84d34f89e9b147ffd3f2628a90ab6c8a Mon Sep 17 00:00:00 2001 From: John McLear Date: Tue, 20 Jan 2015 23:50:55 +0000 Subject: [PATCH 14/19] freeze deps --- src/package.json | 65 ++++++++++++++++++++++++------------------------ 1 file changed, 33 insertions(+), 32 deletions(-) diff --git a/src/package.json b/src/package.json index 97a2dd6a..9259b50f 100644 --- a/src/package.json +++ b/src/package.json @@ -1,48 +1,49 @@ { "name" : "ep_etherpad-lite", "description" : "A Etherpad based on node.js", - "homepage" : "https://github.com/ether/etherpad-lite", + "homepage" : "http://etherpad.org", "keywords" : ["etherpad", "realtime", "collaborative", "editor"], - "author" : "Peter 'Pita' Martischka - Primary Technology Ltd", + "author" : "Etherpad Foundation", "contributors" : [ { "name": "John McLear" }, { "name": "Hans Pinckaers" }, { "name": "Robin Buse" }, - { "name": "Marcel Klehr" } + { "name": "Marcel Klehr" }, + { "name": "Peter Martischka" } ], "dependencies" : { - "etherpad-yajsml" : ">=0.0.2", - "request" : ">=2.48.0", - "etherpad-require-kernel" : ">=1.0.7", - "resolve" : ">=1.0.0", - "socket.io" : ">=1.2.0", - "ueberDB" : ">=0.2.9", - "express" : ">3.1.0 <3.9.0", - "async" : ">=0.9.0", - "connect" : "2.7.x", + "etherpad-yajsml" : "0.0.2", + "request" : "2.51.0", + "etherpad-require-kernel" : "1.0.7", + "resolve" : "1.0.0", + "socket.io" : "1.3.2", + "ueberDB" : "0.2.10", + "express" : "3.8.1", + "async" : "0.9.0", + "connect" : "2.7.11", "clean-css" : "0.3.2", - "uglify-js" : ">=2.4.15", - "formidable" : ">=1.0.15", - "log4js" : ">=0.6.21", - "nodemailer" : "0.3.x", - "cheerio" : ">=0.18.0", - "async-stacktrace" : ">=0.0.2", - "npm" : ">=2.1.x", - "ejs" : "~1.0.0", - "graceful-fs" : ">=3.0.4", - "slide" : ">=1.1.6", - "semver" : ">=2.3.0", + "uglify-js" : "2.4.16", + "formidable" : "1.0.16", + "log4js" : "0.6.22", + "nodemailer" : "0.3.44", + "cheerio" : "0.18.0", + "async-stacktrace" : "0.0.2", + "npm" : "2.2.0", + "ejs" : "1.0.0", + "graceful-fs" : "3.0.5", + "slide" : "1.1.6", + "semver" : "4.2.0", "security" : "1.0.0", - "tinycon" : ">=0.0.1", + "tinycon" : "0.0.1", "underscore" : "1.5.1", - "unorm" : ">=1.3.3", - "languages4translatewiki" : ">=0.1.3", - "swagger-node-express" : ">=2.1.0", - "channels" : "0.0.x", - "jsonminify" : ">=0.2.3", - "measured" : ">=0.1.6", - "mocha" : ">=2.0.1", - "supertest" : ">=0.15.0" + "unorm" : "1.3.3", + "languages4translatewiki" : "0.1.3", + "swagger-node-express" : "2.1.3", + "channels" : "0.0.4", + "jsonminify" : "0.2.3", + "measured" : "0.1.6", + "mocha" : "2.1.0", + "supertest" : "0.15.0" }, "bin": { "etherpad-lite": "./node/server.js" }, "devDependencies": { From 5f9bbd0666026253beb4eb6e8f95d54fcbc573d0 Mon Sep 17 00:00:00 2001 From: John McLear Date: Wed, 21 Jan 2015 00:03:39 +0000 Subject: [PATCH 15/19] restrict expor4t to only expose this pad ID --- src/node/utils/ExportEtherpad.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/node/utils/ExportEtherpad.js b/src/node/utils/ExportEtherpad.js index 36df452d..4f91e4e3 100644 --- a/src/node/utils/ExportEtherpad.js +++ b/src/node/utils/ExportEtherpad.js @@ -48,6 +48,7 @@ exports.getPadRaw = function(padId, callback){ // Get the author info db.get("globalAuthor:"+authorId, function(e, authorEntry){ + authorEntry.padIDs = padId; if(!e) data["globalAuthor:"+authorId] = authorEntry; }); From cb6522499734afe156d1e5b660858d93645fb8c6 Mon Sep 17 00:00:00 2001 From: John McLear Date: Wed, 21 Jan 2015 00:28:00 +0000 Subject: [PATCH 16/19] better logic for author handling --- src/node/utils/ImportEtherpad.js | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/node/utils/ImportEtherpad.js b/src/node/utils/ImportEtherpad.js index 8daeb536..1574a3a9 100644 --- a/src/node/utils/ImportEtherpad.js +++ b/src/node/utils/ImportEtherpad.js @@ -24,12 +24,25 @@ exports.setPadRaw = function(padId, records, callback){ async.eachSeries(Object.keys(records), function(key, cb){ var value = records[key] - // we know its an author + // Author data if(value.padIDs){ // rewrite author pad ids value.padIDs[padId] = 1; var newKey = key; + // Does this author already exist? + db.get(key, function(err, author){ + if(author){ + // Yes, add the padID to the author.. + author.padIDs.push(padId); + value = author; + }else{ + // No, create a new array with the author info in + value.padIDs = [padId]; + } + }); + + // Not author data, probably pad data }else{ // we can split it to look to see if its pad data var oldPadId = key.split(":"); From cbeb464358c231b204751e580184365e0a1467f1 Mon Sep 17 00:00:00 2001 From: John McLear Date: Wed, 21 Jan 2015 01:16:12 +0000 Subject: [PATCH 17/19] ie now uses keydown --- tests/frontend/specs/bold.js | 3 +-- tests/frontend/specs/caret.js | 2 +- tests/frontend/specs/indentation.js | 2 +- tests/frontend/specs/italic.js | 2 +- tests/frontend/specs/redo.js | 2 +- 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/tests/frontend/specs/bold.js b/tests/frontend/specs/bold.js index 703d0815..bffb281b 100644 --- a/tests/frontend/specs/bold.js +++ b/tests/frontend/specs/bold.js @@ -43,9 +43,8 @@ describe("bold button", function(){ //select this text element $firstTextElement.sendkeys('{selectall}'); - console.log(inner$(window)[0].bowser); - if(inner$(window)[0].bowser.firefox){ // if it's a mozilla browser + if(inner$(window)[0].bowser.firefox || inner$(window)[0].bowser.msie){ // if it's a mozilla or IE var evtType = "keypress"; }else{ var evtType = "keydown"; diff --git a/tests/frontend/specs/caret.js b/tests/frontend/specs/caret.js index 48dd94a6..6e68b6f5 100644 --- a/tests/frontend/specs/caret.js +++ b/tests/frontend/specs/caret.js @@ -297,7 +297,7 @@ function prepareDocument(n, target){ // generates a random document with random } function keyEvent(target, charCode, ctrl, shift){ // sends a charCode to the window - if(inner$(window)[0].bowser.firefox){ // if it's a mozilla browser + if(inner$(window)[0].bowser.firefox || inner$(window)[0].bowser.msie){ // if it's a mozilla or IE var evtType = "keypress"; }else{ var evtType = "keydown"; diff --git a/tests/frontend/specs/indentation.js b/tests/frontend/specs/indentation.js index 3730f6bf..c8f2cee8 100644 --- a/tests/frontend/specs/indentation.js +++ b/tests/frontend/specs/indentation.js @@ -15,7 +15,7 @@ describe("indentation button", function(){ //select this text element $firstTextElement.sendkeys('{selectall}'); - if(inner$(window)[0].bowser.firefox){ // if it's a mozilla browser + if(inner$(window)[0].bowser.firefox || inner$(window)[0].bowser.msie){ // if it's a mozilla or IE var evtType = "keypress"; }else{ var evtType = "keydown"; diff --git a/tests/frontend/specs/italic.js b/tests/frontend/specs/italic.js index 955cec0f..4ef4b408 100644 --- a/tests/frontend/specs/italic.js +++ b/tests/frontend/specs/italic.js @@ -44,7 +44,7 @@ describe("italic some text", function(){ //select this text element $firstTextElement.sendkeys('{selectall}'); - if(inner$(window)[0].bowser.firefox){ // if it's a mozilla browser + if(inner$(window)[0].bowser.firefox || inner$(window)[0].bowser.msie){ // if it's a mozilla or IE var evtType = "keypress"; }else{ var evtType = "keydown"; diff --git a/tests/frontend/specs/redo.js b/tests/frontend/specs/redo.js index 99056fb7..00873d14 100644 --- a/tests/frontend/specs/redo.js +++ b/tests/frontend/specs/redo.js @@ -47,7 +47,7 @@ describe("undo button then redo button", function(){ var modifiedValue = $firstTextElement.text(); // get the modified value expect(modifiedValue).not.to.be(originalValue); // expect the value to change - if(inner$(window)[0].bowser.firefox){ // if it's a mozilla browser + if(inner$(window)[0].bowser.firefox || inner$(window)[0].bowser.msie){ // if it's a mozilla or IE var evtType = "keypress"; }else{ var evtType = "keydown"; From f880b0feb7df9c05d78f4c320ece1b846f4fe27a Mon Sep 17 00:00:00 2001 From: John McLear Date: Wed, 21 Jan 2015 12:18:38 +0000 Subject: [PATCH 18/19] clean up iojs --- bin/installDeps.sh | 30 ++++++++++++++++-------------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/bin/installDeps.sh b/bin/installDeps.sh index 00575845..fcf213e4 100755 --- a/bin/installDeps.sh +++ b/bin/installDeps.sh @@ -10,29 +10,29 @@ fi #Is gnu-grep (ggrep) installed on SunOS (Solaris) if [ $(uname) = "SunOS" ]; then - hash ggrep > /dev/null 2>&1 || { + hash ggrep > /dev/null 2>&1 || { echo "Please install ggrep (pkg install gnu-grep)" >&2 - exit 1 + exit 1 } fi #Is curl installed? -hash curl > /dev/null 2>&1 || { +hash curl > /dev/null 2>&1 || { echo "Please install curl" >&2 - exit 1 + exit 1 } #Is node installed? #not checking io.js, default installation creates a symbolic link to node -hash node > /dev/null 2>&1 || { +hash node > /dev/null 2>&1 || { echo "Please install node.js ( http://nodejs.org )" >&2 - exit 1 + exit 1 } #Is npm installed? -hash npm > /dev/null 2>&1 || { +hash npm > /dev/null 2>&1 || { echo "Please install npm ( http://npmjs.org )" >&2 - exit 1 + exit 1 } #check npm version @@ -40,18 +40,20 @@ NPM_VERSION=$(npm --version) NPM_MAIN_VERSION=$(echo $NPM_VERSION | cut -d "." -f 1) if [ $(echo $NPM_MAIN_VERSION) = "0" ]; then echo "You're running a wrong version of npm, you're using $NPM_VERSION, we need 1.x or higher" >&2 - exit 1 + exit 1 fi #check node version NODE_VERSION=$(node --version) NODE_V_MINOR=$(echo $NODE_VERSION | cut -d "." -f 1-2) #iojs version checking added -IOJS_VERSION=$(iojs --version) +if hash iojs 2>/dev/null; then + IOJS_VERSION=$(iojs --version) +fi if [ ! $NODE_V_MINOR = "v0.8" ] && [ ! $NODE_V_MINOR = "v0.10" ] && [ ! $NODE_V_MINOR = "v0.11" ]; then if [ ! $IOJS_VERSION ]; then echo "You're running a wrong version of node, or io.js is not installed. You're using $NODE_VERSION, we need v0.8.x, v0.10.x or v0.11.x" >&2 - exit 1 + exit 1 fi fi @@ -76,9 +78,9 @@ echo "Ensure that all dependencies are up to date... If this is the first time [ -e ep_etherpad-lite ] || ln -s ../src ep_etherpad-lite cd ep_etherpad-lite npm install --loglevel warn -) || { +) || { rm -rf node_modules - exit 1 + exit 1 } echo "Ensure jQuery is downloaded and up to date..." @@ -111,7 +113,7 @@ do if [ ! -f "src/static/custom/$f.js" ]; then cp "src/static/custom/js.template" "src/static/custom/$f.js" || exit 1 fi - + if [ ! -f "src/static/custom/$f.css" ]; then cp "src/static/custom/css.template" "src/static/custom/$f.css" || exit 1 fi From 7237a3b7cc8c43fb206846b6e0492c9d021c7da4 Mon Sep 17 00:00:00 2001 From: John McLear Date: Wed, 21 Jan 2015 14:58:47 +0000 Subject: [PATCH 19/19] bump ueberdb --- src/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/package.json b/src/package.json index 9259b50f..0598a4b6 100644 --- a/src/package.json +++ b/src/package.json @@ -17,7 +17,7 @@ "etherpad-require-kernel" : "1.0.7", "resolve" : "1.0.0", "socket.io" : "1.3.2", - "ueberDB" : "0.2.10", + "ueberDB" : "0.2.11", "express" : "3.8.1", "async" : "0.9.0", "connect" : "2.7.11", @@ -55,5 +55,5 @@ "repository" : { "type" : "git", "url" : "http://github.com/ether/etherpad-lite.git" }, - "version" : "1.5.0" + "version" : "1.5.1" }