From 3fb695a7a0f93904fab48d5ad4ffd5f9131ba436 Mon Sep 17 00:00:00 2001 From: Luiza Pagliari Date: Wed, 30 Mar 2016 11:51:18 -0300 Subject: [PATCH 01/79] Create hook to register events that won't scroll editor after aceEditEvt --- doc/api/hooks_client-side.md | 11 +++++++++-- src/static/js/ace2_inner.js | 15 ++++++++++++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/doc/api/hooks_client-side.md b/doc/api/hooks_client-side.md index b22db5dad..9d9cae250 100644 --- a/doc/api/hooks_client-side.md +++ b/doc/api/hooks_client-side.md @@ -134,6 +134,13 @@ Things in context: This hook is made available to edit the edit events that might occur when changes are made. Currently you can change the editor information, some of the meanings of the edit, and so on. You can also make internal changes (internal to your plugin) that use the information provided by the edit event. +## aceRegisterNonScrollableEditEvents +Called from: src/static/js/ace2_inner.js + +Things in context: None + +When aceEditEvent (documented above) finishes processing the event, it scrolls the viewport to make caret visible to the user, but if you don't want that behavior to happen you can use this hook to register which edit events should not scroll viewport. The return value of this hook should be a list of event names. + ## aceRegisterBlockElements Called from: src/static/js/ace2_inner.js @@ -166,11 +173,11 @@ Called from: src/static/js/pad_editbar.js Things in context: 1. ace - the ace object that is applied to this editor. -2. toolbar - Editbar instance. See below for the Editbar documentation. +2. toolbar - Editbar instance. See below for the Editbar documentation. Can be used to register custom actions to the toolbar. -Usage examples: +Usage examples: * [https://github.com/tiblu/ep_authorship_toggle]() diff --git a/src/static/js/ace2_inner.js b/src/static/js/ace2_inner.js index 8576ee336..24684b6d0 100644 --- a/src/static/js/ace2_inner.js +++ b/src/static/js/ace2_inner.js @@ -369,6 +369,19 @@ function Ace2Inner(){ return thisAuthor; } + var _nonScrollableEditEvents = { + "applyChangesToBase": 1 + }; + + _.each(hooks.callAll('aceRegisterNonScrollableEditEvents'), function(eventType) { + _nonScrollableEditEvents[eventType] = 1; + }); + + function isScrollableEditEvent(eventType) + { + return !_nonScrollableEditEvents[eventType]; + } + var currentCallStack = null; function inCallStack(type, action) @@ -506,7 +519,7 @@ function Ace2Inner(){ { updateBrowserSelectionFromRep(); } - if ((cs.docTextChanged || cs.userChangedSelection) && cs.type != "applyChangesToBase") + if ((cs.docTextChanged || cs.userChangedSelection) && isScrollableEditEvent(cs.type)) { scrollSelectionIntoView(); } From 14e1f3bf222947401b78147764e889bb446893af Mon Sep 17 00:00:00 2001 From: Stefan Date: Tue, 26 Apr 2016 18:55:58 +0200 Subject: [PATCH 02/79] Update socket.io to version 1.4.5 --- src/node/handler/PadMessageHandler.js | 111 +++++++++----------------- src/package.json | 2 +- 2 files changed, 40 insertions(+), 73 deletions(-) diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js index f48be604b..279a44e10 100644 --- a/src/node/handler/PadMessageHandler.js +++ b/src/node/handler/PadMessageHandler.js @@ -98,14 +98,7 @@ exports.kickSessionsFromPad = function(padID) return; //skip if there is nobody on this pad - var roomClients = [], room = socketio.sockets.adapter.rooms[padID]; - if (room) { - for (var id in room) { - roomClients.push(socketio.sockets.adapter.nsp.connected[id]); - } - } - - if(roomClients.length == 0) + if(_getRoomClients(padID).length == 0) return; //disconnect everyone from this pad @@ -519,21 +512,16 @@ function handleSuggestUserName(client, message) } var padId = sessioninfos[client.id].padId; - var roomClients = [], room = socketio.sockets.adapter.rooms[padId]; - if (room) { - for (var id in room) { - roomClients.push(socketio.sockets.adapter.nsp.connected[id]); - } - } + var roomClients = _getRoomClients(padId); //search the author and send him this message - for(var i = 0; i < roomClients.length; i++) { - var session = sessioninfos[roomClients[i].id]; + roomClients.forEach(function(client) { + var session = sessioninfos[client.id]; if(session && session.author == message.data.payload.unnamedId) { - roomClients[i].json.send(message); - break; + client.json.send(message); + return; } - } + }); } /** @@ -821,12 +809,7 @@ function handleUserChanges(data, cb) exports.updatePadClients = function(pad, callback) { //skip this step if noone is on this pad - var roomClients = [], room = socketio.sockets.adapter.rooms[pad.id]; - if (room) { - for (var id in room) { - roomClients.push(socketio.sockets.adapter.nsp.connected[id]); - } - } + var roomClients = _getRoomClients(pad.id); if(roomClients.length==0) return callback(); @@ -952,21 +935,16 @@ function handleSwitchToPad(client, message) // clear the session and leave the room var currentSession = sessioninfos[client.id]; var padId = currentSession.padId; - var roomClients = [], room = socketio.sockets.adapter.rooms[padId]; - if (room) { - for (var id in room) { - roomClients.push(socketio.sockets.adapter.nsp.connected[id]); - } - } - - for(var i = 0; i < roomClients.length; i++) { - var sinfo = sessioninfos[roomClients[i].id]; + var roomClients = _getRoomClients(padId); + + async.forEach(roomClients, function(client, callback) { + var sinfo = sessioninfos[client.id]; if(sinfo && sinfo.author == currentSession.author) { // fix user's counter, works on page refresh or if user closes browser window and then rejoins - sessioninfos[roomClients[i].id] = {}; - roomClients[i].leave(padId); + sessioninfos[client.id] = {}; + client.leave(padId); } - } + }); // start up the new pad createSessionInfo(client, message); @@ -1136,22 +1114,17 @@ function handleClientReady(client, message) return callback(); //Check if this author is already on the pad, if yes, kick the other sessions! - var roomClients = [], room = socketio.sockets.adapter.rooms[pad.id]; - if (room) { - for (var id in room) { - roomClients.push(socketio.sockets.adapter.nsp.connected[id]); - } - } - - for(var i = 0; i < roomClients.length; i++) { - var sinfo = sessioninfos[roomClients[i].id]; + var roomClients = _getRoomClients(pad.id); + + async.forEach(roomClients, function(client, callback) { + var sinfo = sessioninfos[client.id]; if(sinfo && sinfo.author == author) { // fix user's counter, works on page refresh or if user closes browser window and then rejoins - sessioninfos[roomClients[i].id] = {}; - roomClients[i].leave(padIds.padId); - roomClients[i].json.send({disconnect:"userdup"}); + sessioninfos[client.id] = {}; + client.leave(padIds.padId); + client.json.send({disconnect:"userdup"}); } - } + }); //Save in sessioninfos that this session belonges to this pad sessioninfos[client.id].padId = padIds.padId; @@ -1295,13 +1268,8 @@ function handleClientReady(client, message) // notify all existing users about new user client.broadcast.to(padIds.padId).json.send(messageToTheOtherUsers); - //Run trough all sessions of this pad - var roomClients = [], room = socketio.sockets.adapter.rooms[pad.id]; - if (room) { - for (var id in room) { - roomClients.push(socketio.sockets.adapter.nsp.connected[id]); - } - } + //Get sessions for this pad + var roomClients = _getRoomClients(pad.id); async.forEach(roomClients, function(roomClient, callback) { @@ -1706,20 +1674,24 @@ function composePadChangesets(padId, startNum, endNum, callback) }); } +function _getRoomClients(padID) { + var roomClients = []; var room = socketio.sockets.adapter.rooms[padID]; + + if (room) { + for (var id in room.sockets) { + roomClients.push(socketio.sockets.sockets[id]); + } + } + + return roomClients; +} + /** * Get the number of users in a pad */ exports.padUsersCount = function (padID, callback) { - - var roomClients = [], room = socketio.sockets.adapter.rooms[padID]; - if (room) { - for (var id in room) { - roomClients.push(socketio.sockets.adapter.nsp.connected[id]); - } - } - callback(null, { - padUsersCount: roomClients.length + padUsersCount: _getRoomClients(padID).length }); } @@ -1729,12 +1701,7 @@ exports.padUsersCount = function (padID, callback) { exports.padUsers = function (padID, callback) { var result = []; - var roomClients = [], room = socketio.sockets.adapter.rooms[padID]; - if (room) { - for (var id in room) { - roomClients.push(socketio.sockets.adapter.nsp.connected[id]); - } - } + var roomClients = _getRoomClients(padID); async.forEach(roomClients, function(roomClient, callback) { var s = sessioninfos[roomClient.id]; diff --git a/src/package.json b/src/package.json index fe98e2971..4e3eb857f 100644 --- a/src/package.json +++ b/src/package.json @@ -16,7 +16,7 @@ "request" : "2.55.0", "etherpad-require-kernel" : "1.0.9", "resolve" : "1.1.6", - "socket.io" : "1.3.7", + "socket.io" : "1.4.5", "ueberdb2" : "0.3.0", "express" : "4.12.3", "express-session" : "1.11.1", From c5638dd7e520b26ea6f05e7ca34edaa7b466d62a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Mon, 2 May 2016 07:25:28 +0200 Subject: [PATCH 03/79] Localisation updates from https://translatewiki.net. --- src/locales/azb.json | 2 +- src/locales/diq.json | 3 +++ src/locales/pl.json | 1 + 3 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/locales/azb.json b/src/locales/azb.json index 995e85397..8e2040f37 100644 --- a/src/locales/azb.json +++ b/src/locales/azb.json @@ -27,7 +27,7 @@ "pad.toolbar.embed.title": "بو یادداشت دفترچه سین یئرلتمک", "pad.toolbar.showusers.title": "بو دفترچه یادداشت دا اولان کاربرلری گوستر", "pad.colorpicker.save": "ذخیره ائت", - "pad.colorpicker.cancel": "لغو ائت", + "pad.colorpicker.cancel": "وازگئچ", "pad.loading": "یوکلنیر...", "pad.settings.padSettings": "یادداشت دفترچه سینین تنظیملر", "pad.settings.myView": "منیم گورنتوم", diff --git a/src/locales/diq.json b/src/locales/diq.json index c69d62447..2b37004d6 100644 --- a/src/locales/diq.json +++ b/src/locales/diq.json @@ -29,14 +29,17 @@ "pad.wrongPassword": "Parola şıma ğeleta", "pad.settings.padSettings": "Sazkerdışê Pedi", "pad.settings.myView": "Asayışê mı", + "pad.settings.chatandusers": "Werênayış û Karberan bımocne", "pad.settings.colorcheck": "Rengê nuştekariye", "pad.settings.linenocheck": "Nımreyê xeter", + "pad.settings.rtlcheck": "Zerrek heto raşt ra be heto çep bıwaniyo?", "pad.settings.fontType": "Babeta nuşti:", "pad.settings.fontType.normal": "Normal", "pad.settings.fontType.monospaced": "Yewca", "pad.settings.globalView": "Asayışo Global", "pad.settings.language": "Zıwan:", "pad.importExport.import_export": "Zeredayış/Teberdayış", + "pad.importExport.import": "Dosya ya zi dokumanê meqaleyê de tesadufi bar ke", "pad.importExport.importSuccessful": "Mıwafaq biye", "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", diff --git a/src/locales/pl.json b/src/locales/pl.json index 3d9170baa..85bbf4745 100644 --- a/src/locales/pl.json +++ b/src/locales/pl.json @@ -98,6 +98,7 @@ "timeslider.exportCurrent": "Eksportuj bieżącą wersję jako:", "timeslider.version": "Wersja {{version}}", "timeslider.saved": "Zapisano {{day}} {{month}} {{year}}", + "timeslider.playPause": "Odtwarzaj / pauzuj zawartość dokumentu", "timeslider.backRevision": "Przejdź do poprzedniej wersji dokumentu", "timeslider.forwardRevision": "Przejdź do następnej wersji dokumentu", "timeslider.dateformat": "{{year}}-{{month}}-{{day}} {{hours}}:{{minutes}}:{{seconds}}", From 2c177f553a9415e18ec84d7b57c5dca2271bc03f Mon Sep 17 00:00:00 2001 From: Stefan Date: Mon, 2 May 2016 19:46:36 +0200 Subject: [PATCH 04/79] Updated several dependencies to latest version --- src/package.json | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/src/package.json b/src/package.json index 4e3eb857f..bdbf35c24 100644 --- a/src/package.json +++ b/src/package.json @@ -15,35 +15,35 @@ "etherpad-yajsml" : "0.0.2", "request" : "2.55.0", "etherpad-require-kernel" : "1.0.9", - "resolve" : "1.1.6", + "resolve" : "1.1.7", "socket.io" : "1.4.5", "ueberdb2" : "0.3.0", - "express" : "4.12.3", - "express-session" : "1.11.1", + "express" : "4.13.4", + "express-session" : "1.13.0", "cookie-parser" : "1.3.4", "async" : "0.9.0", - "clean-css" : "3.1.9", - "uglify-js" : "2.4.19", + "clean-css" : "3.4.12", + "uglify-js" : "2.6.2", "formidable" : "1.0.17", - "log4js" : "0.6.22", - "cheerio" : "0.19.0", + "log4js" : "0.6.35", + "cheerio" : "0.20.0", "async-stacktrace" : "0.0.2", "npm" : "2.7.6", - "ejs" : "2.3.1", - "graceful-fs" : "3.0.6", + "ejs" : "2.4.1", + "graceful-fs" : "4.1.3", "slide" : "1.1.6", - "semver" : "4.3.3", + "semver" : "5.1.0", "security" : "1.0.0", "tinycon" : "0.0.1", "underscore" : "1.8.3", - "unorm" : "1.3.3", + "unorm" : "1.4.1", "languages4translatewiki" : "0.1.3", "swagger-node-express" : "2.1.3", "channels" : "0.0.4", - "jsonminify" : "0.2.3", - "measured" : "1.0.0", - "mocha" : "2.2.4", - "supertest" : "0.15.0" + "jsonminify" : "0.4.1", + "measured" : "1.1.0", + "mocha" : "2.4.5", + "supertest" : "1.2.0" }, "bin": { "etherpad-lite": "./node/server.js" }, "devDependencies": { From b94fb2b54d3a79e2060bb1a1262941959ad87536 Mon Sep 17 00:00:00 2001 From: Max Schaefer Date: Thu, 5 May 2016 11:50:39 +0100 Subject: [PATCH 05/79] Fix useless comparison in sussonsAndGroups test. --- tests/backend/specs/api/sessionsAndGroups.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/backend/specs/api/sessionsAndGroups.js b/tests/backend/specs/api/sessionsAndGroups.js index 4089656ac..961cb2df9 100644 --- a/tests/backend/specs/api/sessionsAndGroups.js +++ b/tests/backend/specs/api/sessionsAndGroups.js @@ -156,7 +156,7 @@ describe('getAuthorName', function(){ it('Gets the author name', function(done) { api.get(endPoint('getAuthorName')+"&authorID="+authorID) .expect(function(res){ - if(res.body.code !== 0 || !res.body.data === "john") throw new Error("Unable to get Author Name from Author ID"); + if(res.body.code !== 0 || res.body.data !== "john") throw new Error("Unable to get Author Name from Author ID"); }) .expect('Content-Type', /json/) .expect(200, done) From 56b851a46f4ed0aae537c2c3b7058d76d42a73d8 Mon Sep 17 00:00:00 2001 From: Xavid Date: Fri, 18 Mar 2016 15:11:29 -0400 Subject: [PATCH 06/79] Pass through the "item" parameter to registerAceCommand callbacks. --- doc/api/editbar.md | 2 +- src/static/js/pad_editbar.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/api/editbar.md b/doc/api/editbar.md index ce89c0b7c..d4ad4c64d 100644 --- a/doc/api/editbar.md +++ b/doc/api/editbar.md @@ -12,7 +12,7 @@ Shows the dropdown `div.popup` whose `id` equals `dropdown`. Register a handler for a specific command. Commands are fired if the corresponding button is clicked or the corresponding select is changed. ## registerAceCommand(cmd, callback) -Creates an ace callstack and calls the callback with an ace instance: `callback(cmd, ace)`. +Creates an ace callstack and calls the callback with an ace instance (and a toolbar item, if applicable): `callback(cmd, ace, item)`. Example: ``` diff --git a/src/static/js/pad_editbar.js b/src/static/js/pad_editbar.js index d44e5d661..dd1c377a3 100644 --- a/src/static/js/pad_editbar.js +++ b/src/static/js/pad_editbar.js @@ -242,9 +242,9 @@ var padeditbar = (function() }); }, registerAceCommand: function (cmd, callback) { - this.registerCommand(cmd, function (cmd, ace) { + this.registerCommand(cmd, function (cmd, ace, item) { ace.callWithAce(function (ace) { - callback(cmd, ace); + callback(cmd, ace, item); }, cmd, true); }); }, From 9022877cc60efb694578506771c294c25793415e Mon Sep 17 00:00:00 2001 From: Xavid Date: Fri, 6 May 2016 22:01:56 -0400 Subject: [PATCH 07/79] Remove [ and ] from the regexp used by the URL filter. These characters are rarely used in URLs, and including them leads to mislinkifying when editing various formats, such as wiki markup formats that use [] around links. --- src/static/js/linestylefilter.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/static/js/linestylefilter.js b/src/static/js/linestylefilter.js index 936805151..3cf7a510a 100644 --- a/src/static/js/linestylefilter.js +++ b/src/static/js/linestylefilter.js @@ -265,7 +265,7 @@ linestylefilter.getRegexpFilter = function(regExp, tag) linestylefilter.REGEX_WORDCHAR = /[\u0030-\u0039\u0041-\u005A\u0061-\u007A\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\u1FFF\u3040-\u9FFF\uF900-\uFDFF\uFE70-\uFEFE\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFDC]/; -linestylefilter.REGEX_URLCHAR = new RegExp('(' + /[-:@a-zA-Z0-9_.,~%+\/\\?=&#!;()\[\]$]/.source + '|' + linestylefilter.REGEX_WORDCHAR.source + ')'); +linestylefilter.REGEX_URLCHAR = new RegExp('(' + /[-:@a-zA-Z0-9_.,~%+\/\\?=&#!;()$]/.source + '|' + linestylefilter.REGEX_WORDCHAR.source + ')'); linestylefilter.REGEX_URL = new RegExp(/(?:(?:https?|s?ftp|ftps|file|nfs):\/\/|(about|geo|mailto|tel):|www\.)/.source + linestylefilter.REGEX_URLCHAR.source + '*(?![:.,;])' + linestylefilter.REGEX_URLCHAR.source, 'g'); linestylefilter.getURLFilter = linestylefilter.getRegexpFilter( linestylefilter.REGEX_URL, 'url'); From b24e62f90a79eb333773993cc20bc676835baf79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Thu, 12 May 2016 08:59:06 +0200 Subject: [PATCH 08/79] Localisation updates from https://translatewiki.net. --- src/locales/azb.json | 39 ++++++++++++++++++++------------------- src/locales/vi.json | 2 +- 2 files changed, 21 insertions(+), 20 deletions(-) diff --git a/src/locales/azb.json b/src/locales/azb.json index 8e2040f37..84f6cad87 100644 --- a/src/locales/azb.json +++ b/src/locales/azb.json @@ -4,7 +4,8 @@ "Amir a57", "Mousa", "Koroğlu", - "Alp Er Tunqa" + "Alp Er Tunqa", + "Ilğım" ] }, "index.newPad": "یئنی یادداشت دفترچه سی", @@ -19,14 +20,14 @@ "pad.toolbar.unindent.title": "ائشیگه چیخدیغی (Shift+TAB)", "pad.toolbar.undo.title": "باطل ائتمک", "pad.toolbar.redo.title": "یئنی دن", - "pad.toolbar.clearAuthorship.title": "یازیچی رنگ لری پوزماق (Ctrl+Shift+C)", + "pad.toolbar.clearAuthorship.title": "یازیچی بوْیالارینی سیلمک (Ctrl+Shift+C)", "pad.toolbar.import_export.title": "آیری قالیب لردن /ایچری توکمه / ائشیگه توکمه", "pad.toolbar.timeslider.title": "زمان اسلایدی", - "pad.toolbar.savedRevision.title": "نۆسخه‌نی ذخیره ائت", + "pad.toolbar.savedRevision.title": "نۆسخه‌نی قئید ائت", "pad.toolbar.settings.title": "تنظیملر", "pad.toolbar.embed.title": "بو یادداشت دفترچه سین یئرلتمک", "pad.toolbar.showusers.title": "بو دفترچه یادداشت دا اولان کاربرلری گوستر", - "pad.colorpicker.save": "ذخیره ائت", + "pad.colorpicker.save": "قئید ائت", "pad.colorpicker.cancel": "وازگئچ", "pad.loading": "یوکلنیر...", "pad.settings.padSettings": "یادداشت دفترچه سینین تنظیملر", @@ -47,35 +48,35 @@ "pad.importExport.exportword": "مایکروسافت وورد", "pad.importExport.exportpdf": "پی دی اف", "pad.importExport.exportopen": "او دی اف", - "pad.modals.connected": "متصل اولدی", - "pad.modals.reconnecting": "سیزین یادداشت دفترچه سینه یئنی دن متصیل اولدی", - "pad.modals.forcereconnect": "یئنی اتصال اوچون زورلاما", + "pad.modals.connected": "باغلاندی.", + "pad.modals.reconnecting": "یادداشت دفترچه‌نیزه یئنی‌دن باغلانمایا چالیشیلیر...", + "pad.modals.forcereconnect": "تکرار باغلانماق اوچون زوْرلاما", "pad.modals.userdup.advice": "بو پئنجره دن ایستفاده ائتمک اوچون یئنی دن متصیل اول", - "pad.modals.unauth": "اولماز", + "pad.modals.unauth": "اوْلماز", "pad.modals.unauth.explanation": "سیزین ال چتما مسئله سی بو صفحه نین گورونوش زمانیندا دییشیلیب دیر .\nسعی ائدین یئنی دن متصیل اولاسینیز", "pad.modals.looping.explanation": "ارتیباطی موشکیل بیر ائتمه سرور ده وار دیر", "pad.modals.looping.cause": "بلکه سیز دوز دئمیین بیر فایروال یادا پروکسی طریقی ایله متصیل اولوب سینیز", - "pad.modals.initsocketfail": "دسترسی اولمویان سرور دیر", + "pad.modals.initsocketfail": "سرور الده دئییلدیر.", "pad.modals.initsocketfail.explanation": "بیرلشدیریلمه سرور لرینه متصیل اولا بیلمه دی", "pad.modals.deleted": "سیلیندی.", - "pad.modals.deleted.explanation": "بو یادداشت دفترچه سی سیلینیب دیر.", - "pad.modals.disconnected": "سیزین اتصالینیز قطع اولوب دور.", - "pad.modals.disconnected.explanation": "سروره اتصال قطع اولوب دور.", - "pad.share.readonly": "اوخومالی فقط", + "pad.modals.deleted.explanation": "بۇ یادداشت دفترچه‌سی سیلینیبدیر.", + "pad.modals.disconnected": "سیزین باغلانتینیز کسیلیبدیر.", + "pad.modals.disconnected.explanation": "سروره باغلانتی کسیلیبدیر.", + "pad.share.readonly": "ساده‌جه اوْخومالی", "pad.share.link": "باغلانتی", - "pad.share.emebdcode": "نشانی نی یئرلتمک", + "pad.share.emebdcode": "یۇآرالی یئرلشدیرمک", "pad.chat": "چت", - "pad.chat.title": "بو یادداشت دفترچه نی چت اوچون آچ", + "pad.chat.title": "بو یادداشت دفترچه‌سینه چتی آچ.", "timeslider.pageTitle": "{{appTitle}}زمان اسلایدری", - "timeslider.toolbar.returnbutton": "یادداشت دفترچه سینه قاییت", + "timeslider.toolbar.returnbutton": "یادداشت دفترچه‌سینه قاییت.", "timeslider.toolbar.authors": "یازیچیلار", - "timeslider.toolbar.authorsList": "یازیچی سیز", + "timeslider.toolbar.authorsList": "یازیچی‌سیز", "timeslider.toolbar.exportlink.title": "ائشیگه آپارماق", "timeslider.month.january": "ژانویه", "timeslider.month.february": "فوریه", "timeslider.month.march": "مارس", - "timeslider.month.april": "آپریل", - "timeslider.month.may": "مای", + "timeslider.month.april": "آوریل", + "timeslider.month.may": "مئی", "timeslider.month.june": "ژوئن", "timeslider.month.july": "جولای", "timeslider.month.august": "آقوست", diff --git a/src/locales/vi.json b/src/locales/vi.json index da0baf501..57f58e0cb 100644 --- a/src/locales/vi.json +++ b/src/locales/vi.json @@ -19,7 +19,7 @@ "pad.toolbar.unindent.title": "Giảm lề (Shift+TAB)", "pad.toolbar.undo.title": "Hoàn tác (Ctrl-Z)", "pad.toolbar.redo.title": "Làm lại (Ctrl-Y)", - "pad.toolbar.clearAuthorship.title": "Xóa Màu chỉ Tác giả", + "pad.toolbar.clearAuthorship.title": "Xóa Màu chỉ Tác giả (Ctrl+Shift+C)", "pad.toolbar.import_export.title": "Xuất/Nhập từ/đến các định dạng file khác nhau", "pad.toolbar.timeslider.title": "Thanh thời gian", "pad.toolbar.savedRevision.title": "Lưu Phiên bản", From 835bca7967473dc21fa6de4eb56357c92e4f43a3 Mon Sep 17 00:00:00 2001 From: Stefan Date: Mon, 16 May 2016 16:51:12 +0200 Subject: [PATCH 09/79] Use fs.statSync instead of fs.existsSync (deprecated) --- src/node/hooks/i18n.js | 2 +- src/node/utils/caching_middleware.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/node/hooks/i18n.js b/src/node/hooks/i18n.js index 1d28b5447..d0be2d6f5 100644 --- a/src/node/hooks/i18n.js +++ b/src/node/hooks/i18n.js @@ -5,7 +5,7 @@ var languages = require('languages4translatewiki') , npm = require('npm') , plugins = require('ep_etherpad-lite/static/js/pluginfw/plugins.js').plugins , semver = require('semver') - , existsSync = semver.gt(process.version, '0.7.0') ? fs.existsSync : path.existsSync + , existsSync = fs.statSync || fs.existsSync || path.existsSync ; diff --git a/src/node/utils/caching_middleware.js b/src/node/utils/caching_middleware.js index 971343561..91b8143bd 100644 --- a/src/node/utils/caching_middleware.js +++ b/src/node/utils/caching_middleware.js @@ -22,7 +22,7 @@ var zlib = require('zlib'); var settings = require('./Settings'); var semver = require('semver'); -var existsSync = (semver.satisfies(process.version, '>=0.8.0')) ? fs.existsSync : path.existsSync; +var existsSync = fs.statSync || fs.existsSync || path.existsSync; var CACHE_DIR = path.normalize(path.join(settings.root, 'var/')); CACHE_DIR = existsSync(CACHE_DIR) ? CACHE_DIR : undefined; From 1349cfd486f77bbea0ffde1e7d514035238e83ae Mon Sep 17 00:00:00 2001 From: Stefan Date: Mon, 16 May 2016 16:58:58 +0200 Subject: [PATCH 10/79] Fix error if whitespace in etherpad path --- bin/run.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/run.sh b/bin/run.sh index 08cd1da71..c50845ec9 100755 --- a/bin/run.sh +++ b/bin/run.sh @@ -35,5 +35,5 @@ bin/installDeps.sh $* || exit 1 echo "Started Etherpad..." SCRIPTPATH=`pwd -P` -exec node $SCRIPTPATH/node_modules/ep_etherpad-lite/node/server.js $* +exec node "$SCRIPTPATH/node_modules/ep_etherpad-lite/node/server.js" $* From 94920e5552b875f110bac8dbd72e15573da2a0b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Thu, 19 May 2016 09:25:51 +0200 Subject: [PATCH 11/79] Localisation updates from https://translatewiki.net. --- src/locales/zh-hant.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/locales/zh-hant.json b/src/locales/zh-hant.json index 01aa4215a..a66ec4161 100644 --- a/src/locales/zh-hant.json +++ b/src/locales/zh-hant.json @@ -7,7 +7,8 @@ "Shirayuki", "Simon Shek", "LNDDYL", - "Wehwei" + "Wehwei", + "Kly" ] }, "index.newPad": "新Pad", @@ -98,6 +99,9 @@ "timeslider.exportCurrent": "匯出當前版本為:", "timeslider.version": "版本{{version}}", "timeslider.saved": "{{year}}年{{month}}{{day}}日儲存", + "timeslider.playPause": "放送 / 暫停Pad內容", + "timeslider.backRevision": "返回此Pad的前一次修訂", + "timeslider.forwardRevision": "前往此Pad的前一次修訂", "timeslider.dateformat": "{{year}}年{{month}}月{{day}}日 {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "1月", "timeslider.month.february": "二月", @@ -113,6 +117,7 @@ "timeslider.month.december": "12月", "timeslider.unnamedauthors": "{{num}}匿名{[plural(num) 作者]}", "pad.savedrevs.marked": "標記此修訂版本為已儲存修訂版本。", + "pad.savedrevs.timeslider": "您可使用時段滑標來查看先前保存的版本內容", "pad.userlist.entername": "輸入您的姓名", "pad.userlist.unnamed": "未命名", "pad.userlist.guest": "訪客", @@ -123,6 +128,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": "請複製貼上", From a8487dd5dc4f7de91c829d6a6db496fb47ef9d43 Mon Sep 17 00:00:00 2001 From: John McLear Date: Fri, 20 May 2016 14:42:05 +0100 Subject: [PATCH 12/79] client Var value for disabling scripts --- src/static/js/ace.js | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/static/js/ace.js b/src/static/js/ace.js index a5e365ce0..ac288e6f5 100644 --- a/src/static/js/ace.js +++ b/src/static/js/ace.js @@ -226,8 +226,13 @@ function Ace2Editor() var includedCSS = []; var $$INCLUDE_CSS = function(filename) {includedCSS.push(filename)}; $$INCLUDE_CSS("../static/css/iframe_editor.css"); - $$INCLUDE_CSS("../static/css/pad.css"); - $$INCLUDE_CSS("../static/custom/pad.css"); + + // disableCustomScriptsAndStyles can be used to disable loading of custom scripts + if(!clientVars.disableCustomScriptsAndStyles){ + console.log("loading custom shit"); // cake remove me + $$INCLUDE_CSS("../static/css/pad.css"); + $$INCLUDE_CSS("../static/custom/pad.css"); + } var additionalCSS = _(hooks.callAll("aceEditorCSS")).map(function(path){ if (path.match(/\/\//)) { // Allow urls to external CSS - http(s):// and //some/path.css From 73414df3c76e831bb5e3ead2c65a09185904dc4a Mon Sep 17 00:00:00 2001 From: John McLear Date: Fri, 20 May 2016 14:43:01 +0100 Subject: [PATCH 13/79] heh whoops :) --- src/static/js/ace.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/static/js/ace.js b/src/static/js/ace.js index ac288e6f5..9f219e6c2 100644 --- a/src/static/js/ace.js +++ b/src/static/js/ace.js @@ -229,7 +229,6 @@ function Ace2Editor() // disableCustomScriptsAndStyles can be used to disable loading of custom scripts if(!clientVars.disableCustomScriptsAndStyles){ - console.log("loading custom shit"); // cake remove me $$INCLUDE_CSS("../static/css/pad.css"); $$INCLUDE_CSS("../static/custom/pad.css"); } From a8d5dc0693504671126abcf8680a3a3aa6acaebb Mon Sep 17 00:00:00 2001 From: LokeshN Date: Sun, 22 May 2016 20:58:51 +0530 Subject: [PATCH 14/79] Issue #2960 - deactivate settings.json Deactivate settings.json in Admin dashboard --- settings.json.template | 3 +++ src/node/hooks/express/adminsettings.js | 8 +++++++- src/node/utils/Settings.js | 5 +++++ src/static/css/admin.css | 6 ++++++ src/static/js/admin/settings.js | 10 +++++++++- src/templates/admin/settings.html | 5 +++++ 6 files changed, 35 insertions(+), 2 deletions(-) diff --git a/settings.json.template b/settings.json.template index 9eaec478b..9dec7c670 100644 --- a/settings.json.template +++ b/settings.json.template @@ -18,6 +18,9 @@ "ip": "0.0.0.0", "port" : 9001, + // Option to hide/show the settings.json in admin page, default option is set to true + "showSettingsInAdminPage" : true, + /* // Node native SSL support // this is disabled by default diff --git a/src/node/hooks/express/adminsettings.js b/src/node/hooks/express/adminsettings.js index 4986f093c..73691837a 100644 --- a/src/node/hooks/express/adminsettings.js +++ b/src/node/hooks/express/adminsettings.js @@ -30,7 +30,13 @@ exports.socketio = function (hook_name, args, cb) { } else { - socket.emit("settings", {results: data}); + //if showSettingsInAdminPage is set to false, then return NOT_ALLOWED in the result + if(settings.showSettingsInAdminPage === false) { + socket.emit("settings", {results:'NOT_ALLOWED'}); + } + else { + socket.emit("settings", {results: data}); + } } }); }); diff --git a/src/node/utils/Settings.js b/src/node/utils/Settings.js index b765670a6..24bc25c39 100644 --- a/src/node/utils/Settings.js +++ b/src/node/utils/Settings.js @@ -209,6 +209,11 @@ exports.requireAuthentication = false; exports.requireAuthorization = false; exports.users = {}; +/* +* Show settings in admin page, by default it is true +*/ +exports.showSettingsInAdminPage = true; + //checks if abiword is avaiable exports.abiwordAvailable = function() { diff --git a/src/static/css/admin.css b/src/static/css/admin.css index 97104de93..e9ba6014b 100644 --- a/src/static/css/admin.css +++ b/src/static/css/admin.css @@ -38,6 +38,12 @@ div.innerwrapper { padding-left: 265px; } +div.innerwrapper-err { + padding: 15px; + padding-left: 265px; + display: none; +} + #wrapper { background: none repeat scroll 0px 0px #FFFFFF; box-shadow: 0px 1px 10px rgba(0, 0, 0, 0.2); diff --git a/src/static/js/admin/settings.js b/src/static/js/admin/settings.js index 42b038d52..6c1f5e236 100644 --- a/src/static/js/admin/settings.js +++ b/src/static/js/admin/settings.js @@ -14,12 +14,20 @@ $(document).ready(function () { socket.on('settings', function (settings) { + /* Check whether the settings.json is authorized to be viewed */ + if(settings.results === 'NOT_ALLOWED') { + $('.innerwrapper').hide(); + $('.innerwrapper-err').show(); + $('.err-message').html("Settings json is not authorized to be viewed in Admin page!!"); + return; + } + /* Check to make sure the JSON is clean before proceeding */ if(isJSONClean(settings.results)) { $('.settings').append(settings.results); $('.settings').focus(); - $('.settings').autosize(); + $('.settings').autosize(); } else{ alert("YOUR JSON IS BAD AND YOU SHOULD FEEL BAD"); diff --git a/src/templates/admin/settings.html b/src/templates/admin/settings.html index 3b8615fc6..560ac507c 100644 --- a/src/templates/admin/settings.html +++ b/src/templates/admin/settings.html @@ -44,6 +44,11 @@ Example production settings template Example development settings template + +
+

+
+ From a7405825a8fa011bdea2a50fd6b0f2756abd674d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Thu, 26 May 2016 07:57:20 +0200 Subject: [PATCH 15/79] Localisation updates from https://translatewiki.net. --- src/locales/qqq.json | 122 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 src/locales/qqq.json diff --git a/src/locales/qqq.json b/src/locales/qqq.json new file mode 100644 index 000000000..39389924c --- /dev/null +++ b/src/locales/qqq.json @@ -0,0 +1,122 @@ +{ + "@metadata": { + "authors": [ + "Liuxinyu970226", + "Mklehr", + "Nemo bis", + "Shirayuki", + "Siebrand" + ] + }, + "index.newPad": "Used as button text.\nA pad, in the context of Etherpad, is a notepad, something to write on.", + "index.createOpenPad": "label for an input field that allows the user to choose a custom name for his new pad. In case the pad already exists the user will be redirected to its url.", + "pad.toolbar.bold.title": "Used as tooltip of button", + "pad.toolbar.italic.title": "Used as tooltip of button", + "pad.toolbar.underline.title": "Used as tooltip of button", + "pad.toolbar.strikethrough.title": "Used as tooltip of button.\n{{Identical|Strikethrough}}", + "pad.toolbar.ol.title": "Used as tooltip for button", + "pad.toolbar.ul.title": "Used as tooltip for button", + "pad.toolbar.indent.title": "Used as tooltip of button.\n\n\"TAB\" refers to \"Tab key\".\n\nSee also:\n* {{msg-etherpadlite|Pad.toolbar.unindent.title}}\n{{Identical|Indent}}", + "pad.toolbar.unindent.title": "Used as tooltip of button.\n\n\"TAB\" refers to \"Tab key\".\n\nSee also:\n* {{msg-etherpadlite|Pad.toolbar.indent.title}}", + "pad.toolbar.undo.title": "Used as tooltip of button", + "pad.toolbar.redo.title": "Used as tooltip of button\n{{Identical|Redo}}", + "pad.toolbar.clearAuthorship.title": "Used as tooltip of button", + "pad.toolbar.import_export.title": "Used as tooltip of button", + "pad.toolbar.timeslider.title": "The timeslider is a separate \"page\" that allows you to browse through the history of your pad's contents", + "pad.toolbar.savedRevision.title": "Used as tooltip for button.", + "pad.toolbar.settings.title": "settings that determine how the pad content is displayed\n{{Identical|Settings}}", + "pad.toolbar.embed.title": "Used as tooltip for button", + "pad.toolbar.showusers.title": "Used as tooltip for button", + "pad.colorpicker.save": "Used as button text in the \"Color picker\" window.\n\nSee also:\n* {{msg-etherpadlite|Pad.colorpicker.cancel}}\n{{Identical|Save}}", + "pad.colorpicker.cancel": "Used as button text in the \"Color picker\" window.\n\nSee also:\n* {{msg-etherpadlite|Pad.colorpicker.save}}\n{{Identical|Cancel}}", + "pad.loading": "Used to indicate the pad is being loaded.\n{{Identical|Loading}}", + "pad.passwordRequired": "Followed by the \"Password\" input box.", + "pad.permissionDenied": "Used as error message.", + "pad.wrongPassword": "Used as error message if the specified password is wrong.", + "pad.settings.padSettings": "Used as heading of settings window", + "pad.settings.myView": "Section heading for a users personal settings, meaning changes to the settings in this section will only affect the current view (this browser window) of the pad.", + "pad.settings.stickychat": "Used as checkbox label", + "pad.settings.colorcheck": "Used as checkbox label", + "pad.settings.linenocheck": "Used as checkbox label", + "pad.settings.rtlcheck": "Used as label for checkbox for RTL (right-to-left) languages", + "pad.settings.fontType": "Used as label for the \"Font type\" select box which has the following options:\n* {{msg-etherpadlite|Pad.settings.fontType.normal}}\n* {{msg-etherpadlite|Pad.settings.fontType.monospaced}}", + "pad.settings.fontType.normal": "Used as an option in the \"Font type\" select box which is labeled {{msg-etherpadlite|Pad.settings.fontType}}.\n{{Identical|Normal}}", + "pad.settings.fontType.monospaced": "Used as an option in the \"Font type\" select box which is labeled {{msg-etherpadlite|Pad.settings.fontType}}.", + "pad.settings.globalView": "Section heading for global view settings, meaning the settings in this section will affect everyone viewing the pad.", + "pad.settings.language": "This is a label for a select list of languages.\n{{Identical|Language}}", + "pad.importExport.import_export": "Used as HTML

heading of window.\n\nFollowed by the child heading {{msg-etherpadlite|Pad.importExport.import}}.", + "pad.importExport.import": "Used as HTML

heading.\n\nPreceded by the parent heading {{msg-etherpadlite|Pad.importExport.import_export}}.", + "pad.importExport.importSuccessful": "Used as success message to indicate that the pad has been imported successfully.\n{{Identical|Successful}}", + "pad.importExport.export": "Used as HTML

heading.\n\nFollowed by the following link texts:\n* {{msg-etherpadlite|Pad.importExport.exporthtml}}\n* {{msg-etherpadlite|Pad.importExport.exportplain}}\n* {{msg-etherpadlite|Pad.importExport.exportword}}\n* {{msg-etherpadlite|Pad.importExport.exportpdf}}\n* {{msg-etherpadlite|Pad.importExport.exportopen}}\n* {{msg-etherpadlite|Pad.importExport.exportdokuwiki}}", + "pad.importExport.exportetherpad": "{{Identical|Etherpad}}", + "pad.importExport.exporthtml": "Used as link text, preceded by {{msg-etherpadlite|Pad.importExport.export}}.\n{{Related|Pad.importExport.export}}\n{{Identical|HTML}}", + "pad.importExport.exportplain": "Used as link text, preceded by {{msg-etherpadlite|Pad.importExport.export}}.\n{{Related|Pad.importExport.export}}\n{{Identical|Plain text}}", + "pad.importExport.exportword": "Used as link text, preceded by {{msg-etherpadlite|Pad.importExport.export}}.\n{{Related|Pad.importExport.export}}", + "pad.importExport.exportpdf": "Used as link text, preceded by {{msg-etherpadlite|Pad.importExport.export}}.\n{{Related|Pad.importExport.export}}", + "pad.importExport.exportopen": "Used as link text, preceded by {{msg-etherpadlite|Pad.importExport.export}}.\n{{Related|Pad.importExport.export}}", + "pad.importExport.abiword.innerHTML": "Used as intro text for the \"Import file\" form.\n\nPreceded by the heading {{msg-etherpadlite|pad.importExport.import}}.", + "pad.modals.connected": "Used as HTML

heading to indicate the status.\n\nSee also:\n* {{msg-etherpadlite|Pad.modals.reconnecting}}\n{{Identical|Connected}}", + "pad.modals.reconnecting": "Used as HTML

heading to indicate the status.\n\nSee also:\n* {{msg-etherpadlite|Pad.modals.connected}}", + "pad.modals.forcereconnect": "Label of a button that will make the browser reconnect to the synchronization server.", + "pad.modals.userdup": "Used as HTML

heading to indicate that the pad is opened in another window on this computer.\n\nFollowed by the following messages:\n* {{msg-etherpadlite|Pad.modals.userdup.explanation}} -

heading\n* {{msg-etherpadlite|Pad.modals.userdup.advice}}", + "pad.modals.userdup.explanation": "Used as HTML

heading.\n\nPreceded by the parent heading {{msg-etherpadlite|Pad.modals.userdup}}.\n\nFollowed by the message {{msg-etherpadlite|Pad.modals.userdup.advice}}.", + "pad.modals.userdup.advice": "Preceded by the following headings:\n* {{msg-etherpadlite|Pad.modals.userdup}}\n* {{msg-etherpadlite|Pad.modals.userdup.explanation}}", + "pad.modals.unauth": "Used as HTML

heading to indicate that the user is not authorized.\n\nFollowed by the explanation {{msg-etherpadlite|Pad.modals.unauth.explanation}}.\n{{Identical|Not authorized}}", + "pad.modals.unauth.explanation": "Used to indicate that the user is not authorized.\n\nPreceded by the heading {{msg-etherpadlite|Pad.modals.unauth}}.", + "pad.modals.looping.explanation": "Used as HTML

heading.\n\nPreceded by the parent heading {{msg-etherpadlite|Pad.modals.looping}}.\n\nFollowed by the message {{msg-etherpadlite|Pad.modals.looping.cause}}.", + "pad.modals.looping.cause": "Preceded by the following messages:\n* {{msg-etherpadlite|Pad.modals.looping}}\n* {{msg-etherpadlite|Pad.modals.looping.explanation}}", + "pad.modals.initsocketfail": "Used as HTML

heading.", + "pad.modals.initsocketfail.explanation": "Used as HTML

heading.", + "pad.modals.initsocketfail.cause": "Preceded by the following headings:\n* {{msg-etherpadlite|Pad.modals.initsocketfail}}\n* {{msg-etherpadlite|Pad.modals.initsocketfail.explanation}}", + "pad.modals.slowcommit.explanation": "Used as HTML

heading.", + "pad.modals.slowcommit.cause": "Preceded by the following headings:\n* {{msg-etherpadlite|Pad.modals.slowcommit}}\n* {{msg-etherpadlite|Pad.modals.slowcommit.explanation}}\nFollowed by the Submit button which is labeled {{msg-etherpadlite|Pad.modals.forcereconnect}}.", + "pad.modals.deleted": "Used as HTML

heading.\n{{Identical|Deleted}}", + "pad.modals.deleted.explanation": "Preceded by the heading {{msg-etherpadlite|Pad.modals.deleted}}.", + "pad.modals.disconnected": "Used as HTML

heading.", + "pad.modals.disconnected.explanation": "Used as HTML

heading.", + "pad.modals.disconnected.cause": "Preceded by the following headings:\n* {{msg-etherpadlite|Pad.modals.disconnected}}\n* {{msg-etherpadlite|Pad.modals.disconnected.explanation}}\nFollowed by the Submit button which is labeled {{msg-etherpadlite|Pad.modals.forcereconnect}}.", + "pad.share": "Used as heading of window", + "pad.share.readonly": "Used as checkbox label", + "pad.share.link": "Used as label for a field providing URL of the pad.\n{{Identical|Link}}", + "pad.share.emebdcode": "Label for a field providing code that allows you to embed the pad into your website.", + "pad.chat": "Used as button text and as title of Chat window.\n{{Identical|Chat}}", + "pad.chat.title": "Used as tooltip for the Chat button", + "pad.chat.loadmessages": "chat messages", + "timeslider.pageTitle": "{{doc-important|Please leave {{appTitle}} parameter untouched. It will be replaced by app title.}}\nInserted into HTML title tag.", + "timeslider.toolbar.returnbutton": "Used as link title", + "timeslider.toolbar.authors": "A list of Authors follows after the colon.\n{{Identical|Author}}", + "timeslider.toolbar.authorsList": "Displayed when there are no authors of the currently viewed revision.", + "timeslider.toolbar.exportlink.title": "Used in Timeslider view.\n\nUsed as tooltip for the \"Export\" button which enables to export the current pad as HTML, plain text, or DokuWiki.\n\nIf the button is clicked, the following messages appear:\n* {{msg-etherpadlite|Timeslider.exportCurrent}}\n* {{msg-etherpadlite|Pad.importExport.exporthtml}}\n* {{msg-etherpadlite|Pad.importExport.exportplain}}\n* {{msg-etherpadlite|Pad.importExport.exportdokuwiki}}\n{{Identical|Export}}", + "timeslider.exportCurrent": "Used as label in the Timeslider view.\n\nFollowed by the following link texts (which are used to export the current pad):\n* {{msg-etherpadlite|Pad.importExport.exporthtml}}\n* {{msg-etherpadlite|Pad.importExport.exportplain}}\n* {{msg-etherpadlite|Pad.importExport.exportword}}\n* {{msg-etherpadlite|Pad.importExport.exportpdf}}\n* {{msg-etherpadlite|Pad.importExport.exportopen}}\n* {{msg-etherpadlite|Pad.importExport.exportdokuwiki}}", + "timeslider.version": "{{doc-important|Please leave {{version}} parameter untouched. It will be replaced with the version number}}", + "timeslider.saved": "{{doc-important|Do not translate {{month}}, {{day}} and {{year}} parameters. These will be replaced.}}\nParameters:\n* {{month}} - month name such as {{msg-etherpadlite|Timeslider.month.january}}, {{msg-etherpadlite|Timeslider.month.february}} and so on\n* {{day}} - day of the month (01-31)\n* {{year}} - year in 4 digit format", + "timeslider.dateformat": "{{doc-important|Do not translate month, day, year, hours, minutes and seconds parameters. These will be replaced.}}\n* {{month}} - a month number (01-12), NOT {{msg-etherpadlite|Timeslider.month.january}} etc.\n* {{day}} - day of the month (01-31)\n* {{year}} - year in 4 digit format\n* {{hours}} - hours (00-23)\n* {{minutes}} - minutes (00-59)\n* {{seconds}} - seconds (00-59)", + "timeslider.month.january": "Example usage: Saved on August 26, 2014. This message is substituted for:\n* {{msg-etherpadlite|Timeslider.saved|notext=1}}\n* {{msg-etherpadlite|Timeslider.dateformat|notext=1}}\n{{Identical|January}}", + "timeslider.month.february": "Example usage: Saved on August 26, 2014.\n{{Identical|February}}", + "timeslider.month.march": "Example usage: Saved on August 26, 2014.\n{{Identical|March}}", + "timeslider.month.april": "Example usage: Saved on August 26, 2014.\n{{Identical|April}}", + "timeslider.month.may": "Example usage: Saved on August 26, 2014.\n{{Identical|May}}", + "timeslider.month.june": "Example usage: Saved on August 26, 2014.\n{{Identical|June}}", + "timeslider.month.july": "Example usage: Saved on August 26, 2014.\n{{Identical|July}}", + "timeslider.month.august": "Example usage: Saved on August 26, 2014.\n{{Identical|August}}", + "timeslider.month.september": "Example usage: Saved on August 26, 2014.\n{{Identical|September}}", + "timeslider.month.october": "Example usage: Saved on August 26, 2014.\n{{Identical|October}}", + "timeslider.month.november": "Example usage: Saved on August 26, 2014.\n{{Identical|November}}", + "timeslider.month.december": "Example usage: Saved on August 26, 2014.\n{{Identical|December}}", + "timeslider.unnamedauthors": "See also:\n* {{msg-etherpadlite|Timeslider.unnamedauthor}}", + "pad.savedrevs.marked": "more like bookmarked, or tagged/starred", + "pad.userlist.entername": "Used as placeholder for the \"Name\" input box in the upper right corner of the screen.", + "pad.userlist.unnamed": "Displayed, if a user has not set a nick yet", + "pad.userlist.guest": "Preceded by the link text which is labeled {{msg-etherpadlite|Pad.userlist.approve}}.", + "pad.userlist.deny": "Used as link text.\n\nFollowed by the link which is labeled {{msg-etherpadlite|Pad.userlist.approve}}.", + "pad.userlist.approve": "Used as link text.\n\nPreceded by the link which is labeled {{msg-etherpadlite|Pad.userlist.deny}}.\n\nFollowed by the message {{msg-etherpadlite|Pad.userlist.guest}}.\n{{Identical|Approve}}", + "pad.editbar.clearcolors": "Used as confirmation message (JavaScript confirm() function).\n\nThis message means \"Are you sure you want to clear authorship colors on entire document?\".", + "pad.impexp.importbutton": "Used as label for the Submit button.", + "pad.impexp.importing": "Used to indicate that the file is being imported.\n{{Identical|Importing}}", + "pad.impexp.confirmimport": "Used as confirmation message (JavaScript confirm() function).", + "pad.impexp.convertFailed": "Used as error message when importing a file.", + "pad.impexp.uploadFailed": "Used as error message when uploading a file.\n\nThis message means \"The upload has been failed. Please try again.\".", + "pad.impexp.importfailed": "Used as error message.\n\nThis message means \"The import has been failed\".\n\nFollowed by any one of the following messages:\n* {{msg-etherpadlite|Pad.impexp.convertFailed}}\n* {{msg-etherpadlite|Pad.impexp.uploadFailed}}\n* {{msg-etherpadlite|Pad.impexp.copypaste}}", + "pad.impexp.copypaste": "Displayed in case the import failed", + "pad.impexp.exportdisabled": "{{doc-important|Please leave {{type}} parameter untouched. It will be replaced}}" +} From d5456309124e6f2f4a1ada651758ef783b1adab4 Mon Sep 17 00:00:00 2001 From: John McLear Date: Sat, 28 May 2016 22:25:44 +0100 Subject: [PATCH 16/79] fixes #2945 --- src/node/db/API.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/node/db/API.js b/src/node/db/API.js index 237bcb0a7..be3e73486 100644 --- a/src/node/db/API.js +++ b/src/node/db/API.js @@ -28,6 +28,7 @@ var authorManager = require("./AuthorManager"); var sessionManager = require("./SessionManager"); var async = require("async"); var exportHtml = require("../utils/ExportHtml"); +var exportTxt = require("../utils/ExportTxt"); var importHtml = require("../utils/ImportHtml"); var cleanText = require("./Pad").cleanText; var PadDiff = require("../utils/padDiff"); @@ -271,7 +272,8 @@ exports.getText = function(padID, rev, callback) //the client wants the latest text, lets return it to him else { - callback(null, {"text": pad.text()}); + var padText = exportTxt.getTXTFromAtext(pad, pad.atext); + callback(null, {"text": padText}); } }); } From 3ea27d26132ebec9425e37471422ed0cc751f1b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Mon, 6 Jun 2016 08:09:26 +0200 Subject: [PATCH 17/79] Localisation updates from https://translatewiki.net. --- src/locales/fr.json | 7 ++++--- src/locales/ko.json | 5 +++-- src/locales/mk.json | 4 ++-- src/locales/oc.json | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/locales/fr.json b/src/locales/fr.json index 273823542..47f490c17 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -21,7 +21,8 @@ "Macofe", "Framafan", "Fylip22", - "C13m3n7" + "C13m3n7", + "Wladek92" ] }, "index.newPad": "Nouveau pad", @@ -141,8 +142,8 @@ "pad.impexp.importing": "Import en cours...", "pad.impexp.confirmimport": "Importer un fichier écrasera le contenu 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 manuellement un copier/coller du texte brut", - "pad.impexp.padHasData": "Nous n’avons pas pu importer ce fichier parce que ce pad a déjà eu des modifications ; veuillez donc en créer un nouveau", - "pad.impexp.uploadFailed": "Le téléchargement a échoué, veuillez réessayer", + "pad.impexp.padHasData": "Nous n’avons pas pu importer ce fichier parce que ce pad a déjà eu des modifications ; veuillez donc créer un nouveau pad", + "pad.impexp.uploadFailed": "Le téléversement a échoué, veuillez réessayer", "pad.impexp.importfailed": "Échec de l'importation", "pad.impexp.copypaste": "Veuillez copier/coller", "pad.impexp.exportdisabled": "L'option d'export au format {{type}} est désactivée. Veuillez contacter votre administrateur système pour plus de détails." diff --git a/src/locales/ko.json b/src/locales/ko.json index 87f4eba7a..9d4130613 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -5,7 +5,8 @@ "아라", "Revi", "Kurousagi", - "SeoJeongHo" + "SeoJeongHo", + "Ykhwong" ] }, "index.newPad": "새 패드", @@ -125,7 +126,7 @@ "pad.impexp.importing": "가져오는 중...", "pad.impexp.confirmimport": "파일을 가져오면 패드의 현재 텍스트를 덮어쓰게 됩니다. 진행하시겠습니까?", "pad.impexp.convertFailed": "이 파일을 가져올 수 없습니다. 다른 문서 형식을 사용하거나 수동으로 복사하여 붙여넣으세요", - "pad.impexp.padHasData": "우리는 이 파일을 가져올수 없었습니다. 이 패드는 이미 수정되었으니, 새 패드를 가져와 주십시오", + "pad.impexp.padHasData": "우리는 이 파일을 가져올 수 없었습니다. 이 패드는 이미 수정되었으니, 새 패드를 가져와 주십시오", "pad.impexp.uploadFailed": "올리기를 실패했습니다. 다시 시도하세요", "pad.impexp.importfailed": "가져오기를 실패했습니다", "pad.impexp.copypaste": "복사하여 붙여넣으세요", diff --git a/src/locales/mk.json b/src/locales/mk.json index e00d47d89..e292efa60 100644 --- a/src/locales/mk.json +++ b/src/locales/mk.json @@ -13,8 +13,8 @@ "pad.toolbar.strikethrough.title": "Прецртано (Ctrl+5)", "pad.toolbar.ol.title": "Подреден список (Ctrl+Shift+N)", "pad.toolbar.ul.title": "Неподреден список (Ctrl+Shift+L)", - "pad.toolbar.indent.title": "Вовлекување (TAB)", - "pad.toolbar.unindent.title": "Отстап (Shift+TAB)", + "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.clearAuthorship.title": "Тргни ги авторските бои (Ctrl+Shift+C)", diff --git a/src/locales/oc.json b/src/locales/oc.json index bc3a44595..00944531b 100644 --- a/src/locales/oc.json +++ b/src/locales/oc.json @@ -36,7 +36,7 @@ "pad.settings.chatandusers": "Afichar la discussion e los utilizaires", "pad.settings.colorcheck": "Colors d’identificacion", "pad.settings.linenocheck": "Numèros de linhas", - "pad.settings.rtlcheck": "Lectura de drecha a esquèrra", + "pad.settings.rtlcheck": "Lectura de dreita a esquèrra", "pad.settings.fontType": "Tipe de poliça :", "pad.settings.fontType.normal": "Normal", "pad.settings.fontType.monospaced": "Monospace", From e11decc6f890fce9f690753d6730561a43a5eb5b Mon Sep 17 00:00:00 2001 From: Stefan Date: Wed, 8 Jun 2016 19:43:53 +0200 Subject: [PATCH 18/79] Fix module paths for db migration script --- bin/migrateDirtyDBtoRealDB.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/migrateDirtyDBtoRealDB.js b/bin/migrateDirtyDBtoRealDB.js index 393c3081e..c616714a0 100644 --- a/bin/migrateDirtyDBtoRealDB.js +++ b/bin/migrateDirtyDBtoRealDB.js @@ -7,8 +7,8 @@ require("ep_etherpad-lite/node_modules/npm").load({}, function(er,npm) { // file before using this script, just to be safe. var settings = require("ep_etherpad-lite/node/utils/Settings"); - var dirty = require("dirty")('var/dirty.db'); - var ueberDB = require("../src/node_modules/ueberDB"); + var dirty = require("../src/node_modules/dirty")('var/dirty.db'); + var ueberDB = require("../src/node_modules/ueberdb2"); var log4js = require("../src/node_modules/log4js"); var dbWrapperSettings = { "cache": "0", // The cache slows things down when you're mostly writing. From 3ad13eb0dfa20351642d711ef97c20ac2998968d Mon Sep 17 00:00:00 2001 From: Stefan Date: Wed, 8 Jun 2016 19:55:22 +0200 Subject: [PATCH 19/79] Change description in README for supported node versions --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index cc90800f1..afec716e9 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ Also, check out the **[FAQ](https://github.com/ether/etherpad-lite/wiki/FAQ)**, # Installation -Etherpad works with node v0.10+ and io.js. +Etherpad works with node v0.10+ (except 6.0 and 6.1). ## Windows From 93dae51cda127ca4aecf5e31d3d74ab04719d8e3 Mon Sep 17 00:00:00 2001 From: Stefan Date: Wed, 8 Jun 2016 20:08:50 +0200 Subject: [PATCH 20/79] Remove test cookie --- src/static/js/pad.js | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/static/js/pad.js b/src/static/js/pad.js index 25b1a24d5..2009d1245 100644 --- a/src/static/js/pad.js +++ b/src/static/js/pad.js @@ -502,8 +502,7 @@ var pad = { // To use etherpad you have to allow cookies. // This will check if the creation of a test-cookie has success. // Otherwise it shows up a message to the user. - createCookie("test", "test"); - if (!readCookie("test")) + if (!readCookie("prefs")) { $('#loading').hide(); $('#noCookie').show(); From 06ff0230474f9c3b5baa4e5827b897f42fe16213 Mon Sep 17 00:00:00 2001 From: Stefan Date: Wed, 8 Jun 2016 21:14:10 +0200 Subject: [PATCH 21/79] Add secure flag to cookies on client side if pad accessed through https --- src/static/js/pad_cookie.js | 7 ++++++- src/static/js/pad_utils.js | 7 +++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/static/js/pad_cookie.js b/src/static/js/pad_cookie.js index 9866dbfdd..b563a7e60 100644 --- a/src/static/js/pad_cookie.js +++ b/src/static/js/pad_cookie.js @@ -43,7 +43,8 @@ var padcookie = (function() { var expiresDate = new Date(); expiresDate.setFullYear(3000); - document.cookie = ('prefs=' + safeText + ';expires=' + expiresDate.toGMTString()); + var secure = isHttpsScheme() ? ";secure" : ""; + document.cookie = ('prefs=' + safeText + ';expires=' + expiresDate.toGMTString() + secure); } function parseCookie(text) @@ -79,6 +80,10 @@ var padcookie = (function() alreadyWarnedAboutNoCookies = true; } } + + function isHttpsScheme() { + return window.location.protocol == "https:"; + } var wasNoCookie = true; var cookieData = {}; diff --git a/src/static/js/pad_utils.js b/src/static/js/pad_utils.js index 5a7700c94..eafa14bb8 100644 --- a/src/static/js/pad_utils.js +++ b/src/static/js/pad_utils.js @@ -53,13 +53,16 @@ function createCookie(name, value, days, path){ /* Used by IE */ if(!path){ // IF the Path of the cookie isn't set then just create it on root path = "/"; } + + //Check if we accessed the pad over https + var secure = window.location.protocol == "https:" ? ";secure" : ""; //Check if the browser is IE and if so make sure the full path is set in the cookie if((navigator.appName == 'Microsoft Internet Explorer') || ((navigator.appName == 'Netscape') && (new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent) != null))){ - document.cookie = name + "=" + value + expires + "; path=/"; /* Note this bodge fix for IE is temporary until auth is rewritten */ + document.cookie = name + "=" + value + expires + "; path=/" + secure; /* Note this bodge fix for IE is temporary until auth is rewritten */ } else{ - document.cookie = name + "=" + value + expires + "; path=" + path; + document.cookie = name + "=" + value + expires + "; path=" + path + secure; } } From 4ea9c4f98ddabba231e59b9bd321ba1af0894552 Mon Sep 17 00:00:00 2001 From: Stefan Date: Wed, 8 Jun 2016 21:15:26 +0200 Subject: [PATCH 22/79] Add secure flag to express-session cookies --- src/node/hooks/express/webaccess.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/node/hooks/express/webaccess.js b/src/node/hooks/express/webaccess.js index 2cafd2718..80c218375 100644 --- a/src/node/hooks/express/webaccess.js +++ b/src/node/hooks/express/webaccess.js @@ -120,7 +120,7 @@ exports.expressConfigure = function (hook_name, args, cb) { } args.app.sessionStore = exports.sessionStore; - args.app.use(sessionModule({secret: exports.secret, store: args.app.sessionStore, resave: true, saveUninitialized: true, name: 'express_sid' })); + args.app.use(sessionModule({secret: exports.secret, store: args.app.sessionStore, resave: true, saveUninitialized: true, name: 'express_sid', proxy: true, cookie: { secure: true }})); args.app.use(cookieParser(settings.sessionKey, {})); From 25fd246091392bfd42d61fdb61ba02ccc5eb7135 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Mon, 13 Jun 2016 07:44:13 +0200 Subject: [PATCH 23/79] Localisation updates from https://translatewiki.net. --- src/locales/azb.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locales/azb.json b/src/locales/azb.json index 84f6cad87..dd7a0d2ab 100644 --- a/src/locales/azb.json +++ b/src/locales/azb.json @@ -23,11 +23,11 @@ "pad.toolbar.clearAuthorship.title": "یازیچی بوْیالارینی سیلمک (Ctrl+Shift+C)", "pad.toolbar.import_export.title": "آیری قالیب لردن /ایچری توکمه / ائشیگه توکمه", "pad.toolbar.timeslider.title": "زمان اسلایدی", - "pad.toolbar.savedRevision.title": "نۆسخه‌نی قئید ائت", + "pad.toolbar.savedRevision.title": "نۆسخه‌نی ذخیره ائت", "pad.toolbar.settings.title": "تنظیملر", "pad.toolbar.embed.title": "بو یادداشت دفترچه سین یئرلتمک", "pad.toolbar.showusers.title": "بو دفترچه یادداشت دا اولان کاربرلری گوستر", - "pad.colorpicker.save": "قئید ائت", + "pad.colorpicker.save": "ذخیره ائت", "pad.colorpicker.cancel": "وازگئچ", "pad.loading": "یوکلنیر...", "pad.settings.padSettings": "یادداشت دفترچه سینین تنظیملر", From 85cdb1cf4e188c85ba4ee4bf44796ca820e315ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Thu, 16 Jun 2016 08:11:53 +0200 Subject: [PATCH 24/79] Localisation updates from https://translatewiki.net. --- src/locales/mn.json | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/src/locales/mn.json b/src/locales/mn.json index 4b418bef4..6242d5915 100644 --- a/src/locales/mn.json +++ b/src/locales/mn.json @@ -2,7 +2,8 @@ "@metadata": { "authors": [ "MongolWiki", - "Wisdom" + "Wisdom", + "Munkhzaya.E" ] }, "pad.toolbar.bold.title": "Болд тескт (Ctrl-B)", @@ -11,13 +12,20 @@ "pad.toolbar.strikethrough.title": "Дундуураа зураастай", "pad.toolbar.ol.title": "Эрэмбэлэгдсэн жагсаалт", "pad.toolbar.ul.title": "Эрэмбэлээгүй жагсаалт", + "pad.toolbar.indent.title": "Догол мөр (TAB)", + "pad.toolbar.unindent.title": "Догол мөрийг буцаах (Shift+TAB)", "pad.toolbar.undo.title": "Буцаах (Ctrl-Z)", - "pad.toolbar.redo.title": "Undo -ын эсрэг (Ctrl-Y)", + "pad.toolbar.redo.title": "Давтах (Ctrl-Y)", + "pad.toolbar.clearAuthorship.title": "Зохиогчийн өнгийг буцаах (Ctrl+Shift+C)", + "pad.toolbar.timeslider.title": "Засварласан түүх", + "pad.toolbar.savedRevision.title": "Хувилбарыг хадгалах", "pad.toolbar.settings.title": "Тохиргоо", "pad.colorpicker.save": "Хадгалах", "pad.colorpicker.cancel": "Цуцлах", "pad.loading": "Уншиж байна...", + "pad.wrongPassword": "Таны оруулсан нууц үг буруу байна", "pad.settings.padSettings": "Падын тохиргоо", + "pad.settings.myView": "Өөрийн харагдац", "pad.settings.linenocheck": "Мөрийн дугаар", "pad.settings.fontType": "Фонтын төрөл:", "pad.settings.fontType.normal": "Ердийн", @@ -26,7 +34,10 @@ "pad.importExport.import_export": "Импорт/Экспорт", "pad.importExport.import": "Бичвэр, текст файл оруулах", "pad.importExport.importSuccessful": "Амжилттай!", + "pad.importExport.exportetherpad": "Etherpad", + "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Цулгаа бичвэр", + "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "PDF файл", "pad.importExport.exportopen": "ODF файл", "pad.modals.connected": "Холбогдсон.", From 6b9711cb70c45c67224f4a12b371559883c78f19 Mon Sep 17 00:00:00 2001 From: Stefan Date: Mon, 20 Jun 2016 00:22:29 +0200 Subject: [PATCH 25/79] Fixed path check --- src/node/hooks/i18n.js | 2 +- src/node/utils/caching_middleware.js | 3 +-- src/node/utils/path_exists.js | 15 +++++++++++++++ 3 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 src/node/utils/path_exists.js diff --git a/src/node/hooks/i18n.js b/src/node/hooks/i18n.js index d0be2d6f5..1b5b354d0 100644 --- a/src/node/hooks/i18n.js +++ b/src/node/hooks/i18n.js @@ -5,7 +5,7 @@ var languages = require('languages4translatewiki') , npm = require('npm') , plugins = require('ep_etherpad-lite/static/js/pluginfw/plugins.js').plugins , semver = require('semver') - , existsSync = fs.statSync || fs.existsSync || path.existsSync + , existsSync = require('../utils/path_exists') ; diff --git a/src/node/utils/caching_middleware.js b/src/node/utils/caching_middleware.js index 91b8143bd..65fe5d2f1 100644 --- a/src/node/utils/caching_middleware.js +++ b/src/node/utils/caching_middleware.js @@ -21,8 +21,7 @@ var path = require('path'); var zlib = require('zlib'); var settings = require('./Settings'); var semver = require('semver'); - -var existsSync = fs.statSync || fs.existsSync || path.existsSync; +var existsSync = require('./path_exists'); var CACHE_DIR = path.normalize(path.join(settings.root, 'var/')); CACHE_DIR = existsSync(CACHE_DIR) ? CACHE_DIR : undefined; diff --git a/src/node/utils/path_exists.js b/src/node/utils/path_exists.js new file mode 100644 index 000000000..c2d43f6c2 --- /dev/null +++ b/src/node/utils/path_exists.js @@ -0,0 +1,15 @@ +var fs = require('fs'); + +var check = function(path) { + var existsSync = fs.statSync || fs.existsSync || path.existsSync; + + var result; + try { + result = existsSync(path); + } catch (e) { + result = false; + } + return result; +} + +module.exports = check; From 3f4c8d35d65410c09d01eff95e19f2922a0f7044 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Mon, 20 Jun 2016 07:52:44 +0200 Subject: [PATCH 26/79] Localisation updates from https://translatewiki.net. --- src/locales/azb.json | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/locales/azb.json b/src/locales/azb.json index dd7a0d2ab..027319c50 100644 --- a/src/locales/azb.json +++ b/src/locales/azb.json @@ -42,6 +42,7 @@ "pad.settings.language": "دیل:", "pad.importExport.import_export": "ایچری توکمه /ائشیگه توکمه", "pad.importExport.import": "سند یا دا متنی پرونده یوکله", + "pad.importExport.importSuccessful": "باشاریلی اولدو!", "pad.importExport.export": "بو یادداشت دفترچه سی عنوانا ایچری توکمه", "pad.importExport.exporthtml": "اچ تی ام ال", "pad.importExport.exportplain": "ساده متن", @@ -51,6 +52,7 @@ "pad.modals.connected": "باغلاندی.", "pad.modals.reconnecting": "یادداشت دفترچه‌نیزه یئنی‌دن باغلانمایا چالیشیلیر...", "pad.modals.forcereconnect": "تکرار باغلانماق اوچون زوْرلاما", + "pad.modals.userdup": "آیری پنجره ده آچیلدی", "pad.modals.userdup.advice": "بو پئنجره دن ایستفاده ائتمک اوچون یئنی دن متصیل اول", "pad.modals.unauth": "اوْلماز", "pad.modals.unauth.explanation": "سیزین ال چتما مسئله سی بو صفحه نین گورونوش زمانیندا دییشیلیب دیر .\nسعی ائدین یئنی دن متصیل اولاسینیز", @@ -58,6 +60,7 @@ "pad.modals.looping.cause": "بلکه سیز دوز دئمیین بیر فایروال یادا پروکسی طریقی ایله متصیل اولوب سینیز", "pad.modals.initsocketfail": "سرور الده دئییلدیر.", "pad.modals.initsocketfail.explanation": "بیرلشدیریلمه سرور لرینه متصیل اولا بیلمه دی", + "pad.modals.slowcommit.explanation": "سرور جواب وئرمه ییر.", "pad.modals.deleted": "سیلیندی.", "pad.modals.deleted.explanation": "بۇ یادداشت دفترچه‌سی سیلینیبدیر.", "pad.modals.disconnected": "سیزین باغلانتینیز کسیلیبدیر.", @@ -87,5 +90,6 @@ "pad.userlist.unnamed": "آدسیز", "pad.userlist.guest": "قوْناق", "pad.userlist.deny": "دانماق", - "pad.userlist.approve": "اوْنایلا" + "pad.userlist.approve": "اوْنایلا", + "pad.impexp.importing": "ایچری گتیریلیر..." } From 69ac8e172278dd337ab61a8c0a53739db7d6a559 Mon Sep 17 00:00:00 2001 From: Luiza Pagliari Date: Mon, 20 Jun 2016 06:31:11 -0300 Subject: [PATCH 27/79] Include usage example for aceRegisterNonScrollableEditEvents --- doc/api/hooks_client-side.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/doc/api/hooks_client-side.md b/doc/api/hooks_client-side.md index 9d9cae250..9af035698 100644 --- a/doc/api/hooks_client-side.md +++ b/doc/api/hooks_client-side.md @@ -141,6 +141,13 @@ Things in context: None When aceEditEvent (documented above) finishes processing the event, it scrolls the viewport to make caret visible to the user, but if you don't want that behavior to happen you can use this hook to register which edit events should not scroll viewport. The return value of this hook should be a list of event names. +Example: +``` +exports.aceRegisterNonScrollableEditEvents = function(){ + return [ 'repaginate', 'updatePageCount' ]; +} +``` + ## aceRegisterBlockElements Called from: src/static/js/ace2_inner.js From 95dc9d031599dfa7fcf986f3ce976932049131d5 Mon Sep 17 00:00:00 2001 From: Luiza Pagliari Date: Tue, 21 Jun 2016 06:48:10 -0300 Subject: [PATCH 28/79] Enable multi-line selection on frontend tests --- tests/frontend/helper.js | 77 ++++++++++++++++++++--- tests/frontend/specs/helper.js | 97 ++++++++++++++++++++++++++++- tests/frontend/specs/indentation.js | 45 +++++++++++++ 3 files changed, 209 insertions(+), 10 deletions(-) diff --git a/tests/frontend/helper.js b/tests/frontend/helper.js index 7131119ae..d8aa096f3 100644 --- a/tests/frontend/helper.js +++ b/tests/frontend/helper.js @@ -6,11 +6,11 @@ var helper = {}; helper.init = function(cb){ $iframeContainer = $("#iframe-container"); - $.get('/static/js/jquery.js').done(function(code){ + $.get('/static/js/jquery.js').done(function(code){ // make sure we don't override existing jquery jsLibraries["jquery"] = "if(typeof $ === 'undefined') {\n" + code + "\n}"; - $.get('/tests/frontend/lib/sendkeys.js').done(function(code){ + $.get('/tests/frontend/lib/sendkeys.js').done(function(code){ jsLibraries["sendkeys"] = code; cb(); @@ -32,7 +32,7 @@ var helper = {}; var getFrameJQuery = function($iframe){ /* - I tried over 9000 ways to inject javascript into iframes. + I tried over 9000 ways to inject javascript into iframes. This is the only way I found that worked in IE 7+8+9, FF and Chrome */ @@ -45,7 +45,7 @@ var helper = {}; win.eval(jsLibraries["jquery"]); win.eval(jsLibraries["sendkeys"]); - + win.$.window = win; win.$.document = doc; @@ -73,14 +73,14 @@ var helper = {}; if(!padName) padName = "FRONTEND_TEST_" + helper.randomString(20); $iframe = $(""); - + //clean up inner iframe references helper.padChrome$ = helper.padOuter$ = helper.padInner$ = null; //clean up iframes properly to prevent IE from memoryleaking $iframeContainer.find("iframe").purgeFrame().done(function(){ $iframeContainer.append($iframe); - $iframe.one('load', function(){ + $iframe.one('load', function(){ helper.waitFor(function(){ return !$iframe.contents().find("#editorloadingbox").is(":visible"); }, 50000).done(function(){ @@ -92,13 +92,13 @@ var helper = {}; helper.padChrome$.fx.off = true; helper.padOuter$.fx.off = true; helper.padInner$.fx.off = true; - + opts.cb(); }).fail(function(){ throw new Error("Pad never loaded"); }); }); - }); + }); return padName; } @@ -108,7 +108,7 @@ var helper = {}; var intervalTime = _intervalTime || 10; var deferred = $.Deferred(); - + var _fail = deferred.fail; var listenForFail = false; deferred.fail = function(){ @@ -142,6 +142,65 @@ var helper = {}; return deferred; } + helper.selectLines = function($startLine, $endLine, startOffset, endOffset){ + // if no offset is provided, use beginning of start line and end of end line + startOffset = startOffset || 0; + endOffset = endOffset || $endLine.text().length; + + var inner$ = helper.padInner$; + var selection = inner$.document.getSelection(); + var range = selection.getRangeAt(0); + + var start = getTextNodeAndOffsetOf($startLine, startOffset); + var end = getTextNodeAndOffsetOf($endLine, endOffset); + + range.setStart(start.node, start.offset); + range.setEnd(end.node, end.offset); + + selection.removeAllRanges(); + selection.addRange(range); + } + + var getTextNodeAndOffsetOf = function($targetLine, targetOffsetAtLine){ + var $textNodes = $targetLine.find('*').contents().filter(function(){ + return this.nodeType === Node.TEXT_NODE; + }); + + // search node where targetOffsetAtLine is reached, and its 'inner offset' + var textNodeWhereOffsetIs = null; + var offsetBeforeTextNode = 0; + var offsetInsideTextNode = 0; + $textNodes.each(function(index, element){ + var elementTotalOffset = element.textContent.length; + textNodeWhereOffsetIs = element; + offsetInsideTextNode = targetOffsetAtLine - offsetBeforeTextNode; + + var foundTextNode = offsetBeforeTextNode + elementTotalOffset >= targetOffsetAtLine; + if (foundTextNode){ + return false; //stop .each by returning false + } + + offsetBeforeTextNode += elementTotalOffset; + }); + + // edge cases + if (textNodeWhereOffsetIs === null){ + // there was no text node inside $targetLine, so it is an empty line (
). + // Use beginning of line + textNodeWhereOffsetIs = $targetLine.get(0); + offsetInsideTextNode = 0; + } + // avoid errors if provided targetOffsetAtLine is higher than line offset (maxOffset). + // Use max allowed instead + var maxOffset = textNodeWhereOffsetIs.textContent.length; + offsetInsideTextNode = Math.min(offsetInsideTextNode, maxOffset); + + return { + node: textNodeWhereOffsetIs, + offset: offsetInsideTextNode, + }; + } + /* Ensure console.log doesn't blow up in IE, ugly but ok for a test framework imho*/ window.console = window.console || {}; window.console.log = window.console.log || function(){} diff --git a/tests/frontend/specs/helper.js b/tests/frontend/specs/helper.js index d5bff6290..d460a02bc 100644 --- a/tests/frontend/specs/helper.js +++ b/tests/frontend/specs/helper.js @@ -55,7 +55,7 @@ describe("the test helper", function(){ it("takes an interval and checks on every interval", function(done){ this.timeout(4000); var checks = 0; - + helper.waitFor(function(){ checks++; return false; @@ -96,4 +96,99 @@ describe("the test helper", function(){ }); }); }); + + describe("the selectLines method", function(){ + // function to support tests, use a single way to represent whitespaces + var cleanText = function(text){ + return text + .replace(/\n/gi, "\\\\n") // avoid \n to be replaced by \s on next line + .replace(/\s/gi, " ") + .replace(/\\\\n/gi, "\n"); // move back \n to its original state + } + + before(function(done){ + helper.newPad(function() { + // create some lines to be used on the tests + var $firstLine = helper.padInner$("div").first(); + $firstLine.sendkeys("{selectall}some{enter}short{enter}lines{enter}to test{enter}"); + + // wait for lines to be split + helper.waitFor(function(){ + var $fourthLine = helper.padInner$("div").slice(3,4); + return $fourthLine.text() === "to test"; + }).done(done); + }); + + this.timeout(60000); + }); + + it("changes editor selection to be between startOffset of $startLine and endOffset of $endLine", function(done){ + var inner$ = helper.padInner$; + + var startOffset = 2; + var endOffset = 4; + + var $lines = inner$("div"); + var $startLine = $lines.slice(1,2); + var $endLine = $lines.slice(3,4); + + helper.selectLines($startLine, $endLine, startOffset, endOffset); + + var selection = inner$.document.getSelection(); + expect(cleanText(selection.toString())).to.be("ort \nlines \nto t"); + + done(); + }); + + it("ends selection at beginning of $endLine when it is an empty line", function(done){ + var inner$ = helper.padInner$; + + var startOffset = 2; + var endOffset = 1; + + var $lines = inner$("div"); + var $startLine = $lines.slice(1,2); + var $endLine = $lines.slice(4,5); + + helper.selectLines($startLine, $endLine, startOffset, endOffset); + + var selection = inner$.document.getSelection(); + expect(cleanText(selection.toString())).to.be("ort \nlines \nto test\n"); + + done(); + }); + + it("selects full line when offset is longer than line content", function(done){ + var inner$ = helper.padInner$; + + var startOffset = 2; + var endOffset = 50; + + var $lines = inner$("div"); + var $startLine = $lines.slice(1,2); + var $endLine = $lines.slice(3,4); + + helper.selectLines($startLine, $endLine, startOffset, endOffset); + + var selection = inner$.document.getSelection(); + expect(cleanText(selection.toString())).to.be("ort \nlines \nto test"); + + done(); + }); + + it("selects all text between beginning of $startLine and end of $endLine when no offset is provided", function(done){ + var inner$ = helper.padInner$; + + var $lines = inner$("div"); + var $startLine = $lines.slice(1,2); + var $endLine = $lines.slice(3,4); + + helper.selectLines($startLine, $endLine); + + var selection = inner$.document.getSelection(); + expect(cleanText(selection.toString())).to.be("short \nlines \nto test"); + + done(); + }); + }); }); diff --git a/tests/frontend/specs/indentation.js b/tests/frontend/specs/indentation.js index de92cc8fe..9294cefbd 100644 --- a/tests/frontend/specs/indentation.js +++ b/tests/frontend/specs/indentation.js @@ -142,6 +142,51 @@ describe("indentation button", function(){ }); }); + it("issue #2772 shows '*' when multiple indented lines receive a style and are outdented", function(done){ + var inner$ = helper.padInner$; + var chrome$ = helper.padChrome$; + + // make sure pad has more than one line + inner$("div").first().sendkeys("First{enter}Second{enter}"); + helper.waitFor(function(){ + return inner$("div").first().text().trim() === "First"; + }).done(function(){ + // indent first 2 lines + var $lines = inner$("div"); + var $firstLine = $lines.first(); + var $secondLine = $lines.slice(1,2); + helper.selectLines($firstLine, $secondLine); + + var $indentButton = chrome$(".buttonicon-indent"); + $indentButton.click(); + + helper.waitFor(function(){ + return inner$("div").first().find("ul li").length === 1; + }).done(function(){ + // apply bold + var $boldButton = chrome$(".buttonicon-bold"); + $boldButton.click(); + + helper.waitFor(function(){ + return inner$("div").first().find("b").length === 1; + }).done(function(){ + // outdent first 2 lines + var $outdentButton = chrome$(".buttonicon-outdent"); + $outdentButton.click(); + helper.waitFor(function(){ + return inner$("div").first().find("ul li").length === 0; + }).done(function(){ + // check if '*' is displayed + var $secondLine = inner$("div").slice(1,2); + expect($secondLine.text().trim()).to.be("Second"); + + done(); + }); + }); + }); + }); + }); + /* it("makes text indented and outdented", function() { From 3f15ff91eb1ea29b5d39ccebf2daa1e6634e0330 Mon Sep 17 00:00:00 2001 From: Luiza Pagliari Date: Tue, 21 Jun 2016 11:07:57 -0300 Subject: [PATCH 29/79] Select beginning of end line when offset is 0 on frontend tests --- tests/frontend/helper.js | 2 +- tests/frontend/specs/helper.js | 18 ++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/tests/frontend/helper.js b/tests/frontend/helper.js index d8aa096f3..7a8d19b60 100644 --- a/tests/frontend/helper.js +++ b/tests/frontend/helper.js @@ -145,7 +145,7 @@ var helper = {}; helper.selectLines = function($startLine, $endLine, startOffset, endOffset){ // if no offset is provided, use beginning of start line and end of end line startOffset = startOffset || 0; - endOffset = endOffset || $endLine.text().length; + endOffset = endOffset === undefined ? $endLine.text().length : endOffset; var inner$ = helper.padInner$; var selection = inner$.document.getSelection(); diff --git a/tests/frontend/specs/helper.js b/tests/frontend/specs/helper.js index d460a02bc..bb47f4dcd 100644 --- a/tests/frontend/specs/helper.js +++ b/tests/frontend/specs/helper.js @@ -158,6 +158,24 @@ describe("the test helper", function(){ done(); }); + it("ends selection at beginning of $endLine when its offset is zero", function(done){ + var inner$ = helper.padInner$; + + var startOffset = 2; + var endOffset = 0; + + var $lines = inner$("div"); + var $startLine = $lines.slice(1,2); + var $endLine = $lines.slice(3,4); + + helper.selectLines($startLine, $endLine, startOffset, endOffset); + + var selection = inner$.document.getSelection(); + expect(cleanText(selection.toString())).to.be("ort \nlines \n"); + + done(); + }); + it("selects full line when offset is longer than line content", function(done){ var inner$ = helper.padInner$; From a18d40df6bccda35595adae63791a03590e417e7 Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Wed, 22 Jun 2016 16:38:16 +0200 Subject: [PATCH 30/79] Localisation updates from https://translatewiki.net. --- src/locales/diq.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/locales/diq.json b/src/locales/diq.json index 2b37004d6..ebb32e98a 100644 --- a/src/locales/diq.json +++ b/src/locales/diq.json @@ -3,7 +3,8 @@ "authors": [ "Erdemaslancan", "Gorizon", - "Mirzali" + "Mirzali", + "Kumkumuk" ] }, "index.newPad": "Pedo newe", @@ -73,7 +74,7 @@ "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Çele", "timeslider.month.february": "Zemherı", - "timeslider.month.march": "Mert", + "timeslider.month.march": "Adar", "timeslider.month.april": "Nisane", "timeslider.month.may": "Gúlan", "timeslider.month.june": "Heziran", From 28aa3b28d624d5085d49073ab7c2d6b00ff7450e Mon Sep 17 00:00:00 2001 From: Xavid Date: Mon, 27 Jun 2016 16:20:12 -0400 Subject: [PATCH 31/79] Add a frontend test for URLs followed by a ]. --- tests/frontend/specs/urls_become_clickable.js | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/tests/frontend/specs/urls_become_clickable.js b/tests/frontend/specs/urls_become_clickable.js index 2de60bf9c..b989717e2 100644 --- a/tests/frontend/specs/urls_become_clickable.js +++ b/tests/frontend/specs/urls_become_clickable.js @@ -44,4 +44,27 @@ describe("urls", function(){ }, 2000).done(done); }); + it("when you enter a url followed by a ], the ] is not included in the URL", function(done) { + var inner$ = helper.padInner$; + var chrome$ = helper.padChrome$; + + //get the first text element out of the inner iframe + var firstTextElement = inner$("div").first(); + var url = "http://etherpad.org/"; + + // simulate key presses to delete content + firstTextElement.sendkeys('{selectall}'); // select all + firstTextElement.sendkeys('{del}'); // clear the first line + firstTextElement.sendkeys(url); // insert a URL + firstTextElement.sendkeys(']'); // put a ] after it + + helper.waitFor(function(){ + if(inner$("div").first().find("a").length === 1){ // if it contains an A link + if(inner$("div").first().find("a")[0].href === url){ + return true; + } + }; + }, 2000).done(done); + }); + }); From 728ab9307ed9318c74c9ecbea43132670c409793 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Thu, 7 Jul 2016 07:52:57 +0200 Subject: [PATCH 32/79] Localisation updates from https://translatewiki.net. --- src/locales/azb.json | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/locales/azb.json b/src/locales/azb.json index 027319c50..15d2e14b2 100644 --- a/src/locales/azb.json +++ b/src/locales/azb.json @@ -25,16 +25,21 @@ "pad.toolbar.timeslider.title": "زمان اسلایدی", "pad.toolbar.savedRevision.title": "نۆسخه‌نی ذخیره ائت", "pad.toolbar.settings.title": "تنظیملر", - "pad.toolbar.embed.title": "بو یادداشت دفترچه سین یئرلتمک", + "pad.toolbar.embed.title": "بو یادداشت دفترچه سین یئرلشدیر و پایلاش", "pad.toolbar.showusers.title": "بو دفترچه یادداشت دا اولان کاربرلری گوستر", "pad.colorpicker.save": "ذخیره ائت", "pad.colorpicker.cancel": "وازگئچ", "pad.loading": "یوکلنیر...", + "pad.passwordRequired": "بو نوت دفترچه سینه ال تاپماق اوچون بیر رمزه احتیاجینیز واردیر.", + "pad.permissionDenied": "بو نوت دفترچه سینه ال تاپماق اوچون ایجازه نیز یوخدور.", + "pad.wrongPassword": "سیزین رمزینیز دوز دئییل", "pad.settings.padSettings": "یادداشت دفترچه سینین تنظیملر", "pad.settings.myView": "منیم گورنتوم", "pad.settings.stickychat": "نمایش صفحه سینده همیشه چت اولسون", + "pad.settings.chatandusers": "چت ایله ایشلدنلری گؤستر", "pad.settings.colorcheck": "یازیچی رنگ لری", "pad.settings.linenocheck": "خطوط شماره سی", + "pad.settings.rtlcheck": "ایچینده کیلری ساغدان یوخسا سولدان اوخوسون؟", "pad.settings.fontType": "قلم نوعی", "pad.settings.fontType.normal": "نورمال", "pad.settings.fontType.monospaced": "مونو اسپئیس", @@ -44,6 +49,7 @@ "pad.importExport.import": "سند یا دا متنی پرونده یوکله", "pad.importExport.importSuccessful": "باشاریلی اولدو!", "pad.importExport.export": "بو یادداشت دفترچه سی عنوانا ایچری توکمه", + "pad.importExport.exportetherpad": "اترپد", "pad.importExport.exporthtml": "اچ تی ام ال", "pad.importExport.exportplain": "ساده متن", "pad.importExport.exportword": "مایکروسافت وورد", @@ -65,6 +71,7 @@ "pad.modals.deleted.explanation": "بۇ یادداشت دفترچه‌سی سیلینیبدیر.", "pad.modals.disconnected": "سیزین باغلانتینیز کسیلیبدیر.", "pad.modals.disconnected.explanation": "سروره باغلانتی کسیلیبدیر.", + "pad.share": "بو نوت دفترچه سینی پایلاش", "pad.share.readonly": "ساده‌جه اوْخومالی", "pad.share.link": "باغلانتی", "pad.share.emebdcode": "یۇآرالی یئرلشدیرمک", @@ -75,6 +82,7 @@ "timeslider.toolbar.authors": "یازیچیلار", "timeslider.toolbar.authorsList": "یازیچی‌سیز", "timeslider.toolbar.exportlink.title": "ائشیگه آپارماق", + "timeslider.version": "{{version}} ورژنی", "timeslider.month.january": "ژانویه", "timeslider.month.february": "فوریه", "timeslider.month.march": "مارس", @@ -87,6 +95,7 @@ "timeslider.month.october": "اوْکتوبر", "timeslider.month.november": "نوْوامبر", "timeslider.month.december": "دسامبر", + "pad.userlist.entername": "آدینیزی یازین", "pad.userlist.unnamed": "آدسیز", "pad.userlist.guest": "قوْناق", "pad.userlist.deny": "دانماق", From 009b61b33843a5c03587b7e12e7d411dea0ca51e Mon Sep 17 00:00:00 2001 From: Stefan Date: Sun, 10 Jul 2016 12:44:45 +0200 Subject: [PATCH 33/79] Make express-session cookie scheme dependent --- src/node/hooks/express/webaccess.js | 2 +- src/static/js/pad.js | 39 +---------------------------- 2 files changed, 2 insertions(+), 39 deletions(-) diff --git a/src/node/hooks/express/webaccess.js b/src/node/hooks/express/webaccess.js index 80c218375..c53eb1d1a 100644 --- a/src/node/hooks/express/webaccess.js +++ b/src/node/hooks/express/webaccess.js @@ -120,7 +120,7 @@ exports.expressConfigure = function (hook_name, args, cb) { } args.app.sessionStore = exports.sessionStore; - args.app.use(sessionModule({secret: exports.secret, store: args.app.sessionStore, resave: true, saveUninitialized: true, name: 'express_sid', proxy: true, cookie: { secure: true }})); + args.app.use(sessionModule({secret: exports.secret, store: args.app.sessionStore, resave: true, saveUninitialized: true, name: 'express_sid', proxy: true, cookie: { secure: !!settings.ssl }})); args.app.use(cookieParser(settings.sessionKey, {})); diff --git a/src/static/js/pad.js b/src/static/js/pad.js index 2009d1245..597d084da 100644 --- a/src/static/js/pad.js +++ b/src/static/js/pad.js @@ -52,43 +52,6 @@ var hooks = require('./pluginfw/hooks'); var receivedClientVars = false; -function createCookie(name, value, days, path){ /* Warning Internet Explorer doesn't use this it uses the one from pad_utils.js */ - if (days) - { - var date = new Date(); - date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000)); - var expires = "; expires=" + date.toGMTString(); - } - else{ - var expires = ""; - } - - if(!path){ // If the path isn't set then just whack the cookie on the root path - path = "/"; - } - - //Check if the browser is IE and if so make sure the full path is set in the cookie - if((navigator.appName == 'Microsoft Internet Explorer') || ((navigator.appName == 'Netscape') && (new RegExp("Trident/.*rv:([0-9]{1,}[\.0-9]{0,})").exec(navigator.userAgent) != null))){ - document.cookie = name + "=" + value + expires + "; path="+document.location; - } - else{ - document.cookie = name + "=" + value + expires + "; path=" + path; - } -} - -function readCookie(name) -{ - var nameEQ = name + "="; - var ca = document.cookie.split(';'); - for (var i = 0; i < ca.length; i++) - { - var c = ca[i]; - while (c.charAt(0) == ' ') c = c.substring(1, c.length); - if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length, c.length); - } - return null; -} - function randomString() { var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"; @@ -500,7 +463,7 @@ var pad = { handshake(); // To use etherpad you have to allow cookies. - // This will check if the creation of a test-cookie has success. + // This will check if the prefs-cookie is set. // Otherwise it shows up a message to the user. if (!readCookie("prefs")) { From 3fcc7aa19017edc9407eecc6bf04c0a61c81088a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Mon, 18 Jul 2016 08:48:25 +0200 Subject: [PATCH 34/79] Localisation updates from https://translatewiki.net. --- src/locales/ku-latn.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/ku-latn.json b/src/locales/ku-latn.json index 2aa4fda7c..725a84d72 100644 --- a/src/locales/ku-latn.json +++ b/src/locales/ku-latn.json @@ -22,7 +22,7 @@ "pad.toolbar.savedRevision.title": "Sererastkirinê tomar bike", "pad.toolbar.settings.title": "Eyar", "pad.colorpicker.save": "Tomar bike", - "pad.colorpicker.cancel": "Beta bike", + "pad.colorpicker.cancel": "Betal bike", "pad.loading": "Tê barkirin...", "pad.settings.padSettings": "Eyarên bloknotê", "pad.settings.myView": "Dîmena min", From c92e3e4b5e58237047adc79d2dd64f2ac5d47ba9 Mon Sep 17 00:00:00 2001 From: Luiza Pagliari Date: Thu, 21 Jul 2016 15:23:14 -0300 Subject: [PATCH 35/79] Fix #2918. Re-enable editor after user is reconnected to server --- src/static/js/pad.js | 1 + src/static/js/pad_editor.js | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/src/static/js/pad.js b/src/static/js/pad.js index 25b1a24d5..f8ff85780 100644 --- a/src/static/js/pad.js +++ b/src/static/js/pad.js @@ -769,6 +769,7 @@ var pad = { var wasConnecting = (padconnectionstatus.getStatus().what == 'connecting'); if (newState == "CONNECTED") { + padeditor.enable(); padconnectionstatus.connected(); } else if (newState == "RECONNECTING") diff --git a/src/static/js/pad_editor.js b/src/static/js/pad_editor.js index 6616ebe88..3e6b49d31 100644 --- a/src/static/js/pad_editor.js +++ b/src/static/js/pad_editor.js @@ -198,6 +198,13 @@ var padeditor = (function() self.ace = null; } }, + enable: function() + { + if (self.ace) + { + self.ace.setEditable(true); + } + }, disable: function() { if (self.ace) From 17726856c6370df275e6587af0b2f1138d3b4f33 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Mon, 25 Jul 2016 07:56:41 +0200 Subject: [PATCH 36/79] Localisation updates from https://translatewiki.net. --- src/locales/diq.json | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/locales/diq.json b/src/locales/diq.json index ebb32e98a..3cbba2e41 100644 --- a/src/locales/diq.json +++ b/src/locales/diq.json @@ -8,6 +8,7 @@ ] }, "index.newPad": "Pedo newe", + "index.createOpenPad": "Yana eno bamaeya bloknot vıraz/ak:", "pad.toolbar.bold.title": "Qalın (Ctrl-B)", "pad.toolbar.italic.title": "Namıte (Ctrl-I)", "pad.toolbar.underline.title": "Bınxetın (Ctrl-U)", @@ -19,6 +20,7 @@ "pad.toolbar.undo.title": "Meke (Ctrl-Z)", "pad.toolbar.redo.title": "Fına bıke (Ctrl-Y)", "pad.toolbar.clearAuthorship.title": "Rengê Nuştoğiê Arıstey (Ctrl+Shift+C)", + "pad.toolbar.import_export.title": "Babaetna tewranê dosyaya azere/ateber ke", "pad.toolbar.timeslider.title": "Ğızagê zemani", "pad.toolbar.savedRevision.title": "Çımraviyarnayışi qeyd ke", "pad.toolbar.settings.title": "Sazkerdışi", @@ -27,9 +29,13 @@ "pad.colorpicker.save": "Qeyd ke", "pad.colorpicker.cancel": "Bıtexelne", "pad.loading": "Bar beno...", + "pad.noCookie": "Çerez nêvibeya. Rovıter de çereza aktiv kerê", + "pad.passwordRequired": "Ena bloknot resayışi rê parola icab krna", + "pad.permissionDenied": "Ena bloknot resayışi rê icazeta şıma çıni ya", "pad.wrongPassword": "Parola şıma ğeleta", "pad.settings.padSettings": "Sazkerdışê Pedi", "pad.settings.myView": "Asayışê mı", + "pad.settings.stickychat": "Ekran de tım mıhebet bıkerê", "pad.settings.chatandusers": "Werênayış û Karberan bımocne", "pad.settings.colorcheck": "Rengê nuştekariye", "pad.settings.linenocheck": "Nımreyê xeter", From cf3aaa334fa5b3d38661f16c0ceea9afb31cf04e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Thu, 28 Jul 2016 07:59:29 +0200 Subject: [PATCH 37/79] Localisation updates from https://translatewiki.net. --- src/locales/hsb.json | 3 +++ src/locales/lt.json | 6 +++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/locales/hsb.json b/src/locales/hsb.json index d4d3ef76a..798c596e6 100644 --- a/src/locales/hsb.json +++ b/src/locales/hsb.json @@ -92,6 +92,9 @@ "timeslider.exportCurrent": "Aktualnu wersiju eksportować jako:", "timeslider.version": "Wersija {{version}}", "timeslider.saved": "Składowany {{day}}. {{month}} {{year}}", + "timeslider.playPause": "Wobdźěłanje wothrać/pawzować", + "timeslider.backRevision": "Wo jednu wersiju w tutym dokumenće wróćo hić", + "timeslider.forwardRevision": "Wo jednu wersiju w tutym dokumenće doprědka hić", "timeslider.dateformat": "{{day}}. {{month}} {{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "januara", "timeslider.month.february": "februara", diff --git a/src/locales/lt.json b/src/locales/lt.json index 524146dec..aa1d91d69 100644 --- a/src/locales/lt.json +++ b/src/locales/lt.json @@ -3,9 +3,11 @@ "authors": [ "Eitvys200", "Mantak111", - "I-svetaines" + "I-svetaines", + "Zygimantus" ] }, + "index.newPad": "Naujas bloknotas", "pad.toolbar.bold.title": "Paryškintasis (Ctrl-B)", "pad.toolbar.italic.title": "Pasvirasis (Ctrl-I)", "pad.toolbar.underline.title": "Pabraukimas (Ctrl-U)", @@ -62,11 +64,13 @@ "pad.modals.slowcommit.explanation": "Serveris neatsako.", "pad.modals.deleted": "Ištrintas.", "pad.modals.disconnected": "Jūs atsijungėte.", + "pad.share": "Dalintis šiuo bloknotu", "pad.share.readonly": "Tik skaityti", "pad.share.link": "Nuoroda", "pad.share.emebdcode": "Įterptasis URL", "pad.chat": "Pokalbiai", "pad.chat.loadmessages": "Įkrauti daugiau pranešimų", + "timeslider.toolbar.returnbutton": "Grįžti į bloknotą", "timeslider.toolbar.authors": "Autoriai:", "timeslider.toolbar.authorsList": "Nėra autorių", "timeslider.toolbar.exportlink.title": "Eksportuoti", From 08b90437c1fdcb62609f03c6b75a9dcb43865deb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Mon, 1 Aug 2016 08:08:45 +0200 Subject: [PATCH 38/79] Localisation updates from https://translatewiki.net. --- src/locales/diq.json | 29 ++++++++++++++++++++++++++++- src/locales/ko.json | 2 +- src/locales/pa.json | 5 ++++- 3 files changed, 33 insertions(+), 3 deletions(-) diff --git a/src/locales/diq.json b/src/locales/diq.json index 3cbba2e41..e1546e941 100644 --- a/src/locales/diq.json +++ b/src/locales/diq.json @@ -48,20 +48,38 @@ "pad.importExport.import_export": "Zeredayış/Teberdayış", "pad.importExport.import": "Dosya ya zi dokumanê meqaleyê de tesadufi bar ke", "pad.importExport.importSuccessful": "Mıwafaq biye", + "pad.importExport.export": "Mewcud bloknoti ateberd:", "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Metno pan", "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (Open Document Format)", + "pad.importExport.abiword.innerHTML": "Teyna duz metini yana html formati şıma şenê azete dê. Dehana vêşi xısusiyetanê azere kerdışi rê grey AbiWord'i bar kerên.", "pad.modals.connected": "Gırediya.", + "pad.modals.reconnecting": "Bloknot da şıma rê fına irtibat kewê no", "pad.modals.forcereconnect": "Mecbur anciya gırê de", "pad.modals.userdup": "Zewbina pençere de bi a", + "pad.modals.userdup.explanation": "Ena bloknot ena komputer de yew ra zeder penceran dı akerde asena", + "pad.modals.userdup.advice": "Ena pencera ra kar finayışi rê fına irtibat kewê", "pad.modals.unauth": "Selahiyetdar niyo", + "pad.modals.unauth.explanation": "Ena pela asenayış de mısadey şıma vuriyay. Fına irtibat kewtışi bıcerebne", + "pad.modals.looping.explanation": "Bahdê takêş kerdışi problemê irtibati esta", + "pad.modals.looping.cause": "Belki zi dêsê emeley hewl niyo yana şımayê proksi ya kenê dekewê de", "pad.modals.initsocketfail": "Nêresneyêno ciyageyroği.", + "pad.modals.initsocketfail.explanation": "Rovıterê takêş kerdışi ya irtibato nêbeno.", + "pad.modals.initsocketfail.cause": "Ena probleme muhtemelen komputer yana grebıyayışa ibter da şıma ra bıya", "pad.modals.slowcommit.explanation": "Server cewab nêdano.", + "pad.modals.slowcommit.cause": "Ena xeta gındık ta greyan de şıma ameya meydan", + "pad.modals.badChangeset.explanation": "Ena vurriyayışa şıma tereftê rovıterê tekêş kerdışi ra bêkaide deyne liste biya", + "pad.modals.badChangeset.cause": "Eno, xırab vıraziyena rovıteri yana nezanaye xırab yew faktori ra amrya meydan. Ena şıma çımdı xeta yena se idarekaran de sisteniya irtibat kewê. Dewam kerdışi re fına grebıyayışi bıcerebne", + "pad.modals.corruptPad.explanation": "Bloknota ke şımayê kenê cıresê xerpiyayi ya", + "pad.modals.corruptPad.cause": "Eno, xırab vıraziyena rovıteri yana nezanaye xırab yew faktori ra amrya meydan. Ena şıma çımdı xeta yena se idarekaran de sisteniya irtibat kewê", "pad.modals.deleted": "Esteriya.", "pad.modals.deleted.explanation": "Ena ped wedariye", + "pad.modals.disconnected": "İrtibata şıma reyê", + "pad.modals.disconnected.explanation": "Rovıteri ya irtibata şıma reyyê", + "pad.modals.disconnected.cause": "Qay rovıtero nêkarên o. Ena xerpey deqam kena se idarekaranê sistemiya irtibat kewê", "pad.share": "Na ped vıla ke", "pad.share.readonly": "Tenya bıwane", "pad.share.link": "Gıre", @@ -77,6 +95,9 @@ "timeslider.exportCurrent": "Versiyonê enewki teber de:", "timeslider.version": "Versiyonê {{version}}", "timeslider.saved": "{{day}} {{month}}, {{year}} de biyo qeyd", + "timeslider.playPause": "Zerrekê bloknoti kayfi/vındarn", + "timeslider.backRevision": "Peyser şo revizyona ena bloknoter", + "timeslider.forwardRevision": "Ena bloknot de şo revizyonê bini", "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Çele", "timeslider.month.february": "Zemherı", @@ -91,6 +112,8 @@ "timeslider.month.november": "Tışrino Peyên", "timeslider.month.december": "Kanun", "timeslider.unnamedauthors": "{{num}} unnamed {[plural(num) zu: nuştoğ, zewbi: nustoği ]}", + "pad.savedrevs.marked": "Eno vurriyayış henda qeyd bıyaye yew vurriyayış deyne nışan bıyo", + "pad.savedrevs.timeslider": "Xızberê zemani ziyer kerdış ra şıma şenê revizyonanê qeyd bıyayan bıvinê", "pad.userlist.entername": "Nameyê xo cıkewe", "pad.userlist.unnamed": "Name nébıyo", "pad.userlist.guest": "Meyman", @@ -99,7 +122,11 @@ "pad.editbar.clearcolors": "Wesiqa de renge nuştoğey bıesterneye?", "pad.impexp.importbutton": "Nıka miyan ke", "pad.impexp.importing": "Deyeno azere...", + "pad.impexp.confirmimport": "Yu dosya azere kerdış de mewcud bloknoti sero nuşiye no. Şıma qayılê dewam bıkerê?", + "pad.impexp.convertFailed": "Ena dosya azere kerdış mıkum niyo. Babetna namey dokumani weçinê yana xo desti kopya kerê u pronê.", + "pad.impexp.padHasData": "Ma nêşa dosya azere kem, çıkı ena bloknot xora vurriya ya. Xorê yewna bloknot azere kerê", "pad.impexp.uploadFailed": "Barkerdış nêbi, kerem ke anciya bıcerebne", "pad.impexp.importfailed": "Zer kerdış mıwafaq nebı", - "pad.impexp.copypaste": "Reca keme kopya pronayış bıkeri" + "pad.impexp.copypaste": "Reca keme kopya pronayış bıkeri", + "pad.impexp.exportdisabled": "Formatta {{type}} ya ateber kerdış dewra vıciya yo. Qandé teferruati idarekarana irtibat kewê" } diff --git a/src/locales/ko.json b/src/locales/ko.json index 9d4130613..8790239d1 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -11,7 +11,7 @@ }, "index.newPad": "새 패드", "index.createOpenPad": "또는 다음 이름으로 패드 만들기/열기:", - "pad.toolbar.bold.title": "굵은꼴 (Ctrl+B)", + "pad.toolbar.bold.title": "굵게 (Ctrl+B)", "pad.toolbar.italic.title": "기울임꼴 (Ctrl+I)", "pad.toolbar.underline.title": "밑줄 (Ctrl+U)", "pad.toolbar.strikethrough.title": "취소선 (Ctrl+5)", diff --git a/src/locales/pa.json b/src/locales/pa.json index 531e4ac8e..f1e8ffc92 100644 --- a/src/locales/pa.json +++ b/src/locales/pa.json @@ -3,7 +3,8 @@ "authors": [ "Aalam", "Babanwalia", - "ਪ੍ਰਚਾਰਕ" + "ਪ੍ਰਚਾਰਕ", + "Tow" ] }, "index.newPad": "ਨਵਾਂ ਪੈਡ", @@ -112,6 +113,7 @@ "timeslider.month.december": "ਦਸੰਬਰ", "timeslider.unnamedauthors": "{{num}} ਬੇਨਾਮ {[plural(num) one: ਲੇਖਕ, other: ਲੇਖਕ ]}", "pad.savedrevs.marked": "ਇਹ ਰੀਵਿਜ਼ਨ ਨੂੰ ਹੁਣ ਸੰਭਾਲੇ ਹੋਏ ਰੀਵਿਜ਼ਨ ਵਜੋਂ ਮੰਨਿਆ ਗਿਆ ਹੈ", + "pad.savedrevs.timeslider": "ਤੁਸੀੰ ਸਾੰਭੀਆੰ ਹੋਈਆੰ ਵਰਜਨਾੰ ਸਮਾੰਸਲਾਈਡਰ ਤੇ ਜਾ ਕੇ ਵੇਖ ਸਕਦੇ ਹੋ", "pad.userlist.entername": "ਆਪਣਾ ਨਾਂ ਦਿਉ", "pad.userlist.unnamed": "ਬੇਨਾਮ", "pad.userlist.guest": "ਮਹਿਮਾਨ", @@ -122,6 +124,7 @@ "pad.impexp.importing": "...ਇੰਪੋਰਟ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ", "pad.impexp.confirmimport": "ਕੋਈ ਫ਼ਾਈਲ ਦਰਾਮਦ ਕਾਰਨ ਨਾਲ਼ ਪੈਡ ਦੀ ਮੌਜੂਦਾ ਲਿਖਤ ਉੱਤੇ ਲਿਖਿਆ ਜਾਵੇਗਾ। ਕੀ ਤੁਸੀਂ ਸੱਚੀਂ ਇਹ ਕਰਨਾ ਚਾਹੁੰਦੇ ਹੋ?", "pad.impexp.convertFailed": "ਅਸੀਂ ਇਸ ਫ਼ਾਈਲ ਦੀ ਦਰਾਮਦ ਨਹੀਂ ਕਰ ਸਕੇ। ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਕੋਈ ਵੱਖਰੀ ਦਸਤਾਵੇਜ਼ੀ ਰੂਪ-ਰੇਖਾ ਵਰਤੋ ਜਾਂ ਹੱਥੀਂ ਨਕਲ-ਚੇਪੀ ਕਰੋ।", + "pad.impexp.padHasData": "ਅਸੀ ਇਸ ਫਾਈਲ ਨੂੰ ਆਯਾਤ ਨਹੀੰ ਕਰ ਸਕੇ ਕਿਉੰਕਿ ਇਸ ਪੈਡ ਉੱਤੇ ਪਹਿਲਾੰ ਹੀ ਤਬਦੀਲੀਆੰ ਕੀਤੀਆੰ ਜਾ ਚੁਕੀਆੰ ਹਨ, ਕਿਰਪਾ ਕਰਕੇ ਨਵੇੰ ਪੈਡ ਵਿਚ ਆਯਾਤ ਕਰੋ", "pad.impexp.uploadFailed": "ਅੱਪਲੋਡ ਲਈ ਫੇਲ੍ਹ ਹੈ, ਫੇਰ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ।", "pad.impexp.importfailed": "ਇੰਪੋਰਟ ਫੇਲ੍ਹ ਹੈ", "pad.impexp.copypaste": "ਕਾਪੀ ਕਰੋ ਚੇਪੋ ਜੀ", From 2996f0fad7103917e8a3c36a59d3ff54ce733d3e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Thu, 4 Aug 2016 07:57:38 +0200 Subject: [PATCH 39/79] Localisation updates from https://translatewiki.net. --- src/locales/diq.json | 4 ++-- src/locales/lt.json | 33 ++++++++++++++++++++++++++++++--- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/src/locales/diq.json b/src/locales/diq.json index e1546e941..9c69c5782 100644 --- a/src/locales/diq.json +++ b/src/locales/diq.json @@ -108,8 +108,8 @@ "timeslider.month.july": "Temuz", "timeslider.month.august": "Tebaxe", "timeslider.month.september": "Keşkelun", - "timeslider.month.october": "Tışrino Verên", - "timeslider.month.november": "Tışrino Peyên", + "timeslider.month.october": "Cetan", + "timeslider.month.november": "Kelverdan", "timeslider.month.december": "Kanun", "timeslider.unnamedauthors": "{{num}} unnamed {[plural(num) zu: nuştoğ, zewbi: nustoği ]}", "pad.savedrevs.marked": "Eno vurriyayış henda qeyd bıyaye yew vurriyayış deyne nışan bıyo", diff --git a/src/locales/lt.json b/src/locales/lt.json index aa1d91d69..f0f02d1ea 100644 --- a/src/locales/lt.json +++ b/src/locales/lt.json @@ -8,6 +8,7 @@ ] }, "index.newPad": "Naujas bloknotas", + "index.createOpenPad": "arba sukurkite/atidarykite Bloknotą su pavadinimu:", "pad.toolbar.bold.title": "Paryškintasis (Ctrl-B)", "pad.toolbar.italic.title": "Pasvirasis (Ctrl-I)", "pad.toolbar.underline.title": "Pabraukimas (Ctrl-U)", @@ -15,9 +16,10 @@ "pad.toolbar.ol.title": "Numeruotas sąrašas (Ctrl+Shift+N)", "pad.toolbar.ul.title": "Nenumeruotas Sąrašas (Ctrl+Shift+L)", "pad.toolbar.indent.title": "Įtrauka", + "pad.toolbar.unindent.title": "Atvirkštinė įtrauka (Shift+TAB)", "pad.toolbar.undo.title": "Anuliuoti (Ctrl-Z)", "pad.toolbar.redo.title": "Perdaryti (Ctrl-Y)", - "pad.toolbar.clearAuthorship.title": "Tvarkyti autorystės spalvas", + "pad.toolbar.clearAuthorship.title": "Valyti Autorystės Spalvas (Ctrl+Shift+C)", "pad.toolbar.import_export.title": "Importuoti/Eksportuoti iš/į įvairius failų formatus", "pad.toolbar.timeslider.title": "Laiko slankiklis", "pad.toolbar.savedRevision.title": "Išsaugoti peržiūrą", @@ -52,24 +54,39 @@ "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (Atvirasis dokumento formatas)", + "pad.importExport.abiword.innerHTML": "Galite importuoti tik iš paprasto teksto ar HTML formato. Dėl išplėstinių importavimo funkcijų prašome įdiegti abiword.", "pad.modals.connected": "Prisijungta.", "pad.modals.reconnecting": "Iš naujo prisijungiama prie Jūsų bloknoto", "pad.modals.forcereconnect": "Priversti prisijungti iš naujo", "pad.modals.userdup": "Atidaryta kitame lange", "pad.modals.userdup.explanation": "Šis bloknotas, atrodo yra atidarytas daugiau nei viename šio kompiuterio naršyklės lange.", + "pad.modals.userdup.advice": "Prisijunkite iš naujo, kad vietoj to naudotumėte šį langą.", "pad.modals.unauth": "Neleidžiama", "pad.modals.unauth.explanation": "Jūsų teiisės pasikeitė kol žiūrėjote šį puslapį. Bandykite prisijungti iš naujo.", "pad.modals.looping.explanation": "Yra komunikacijos problemų su sinchronizacijos serveriu.", + "pad.modals.looping.cause": "Galbūt prisijungėte per nesuderinamą ugniasienę ar proxy.", "pad.modals.initsocketfail": "Serveris yra nepasiekiamas.", + "pad.modals.initsocketfail.explanation": "Nepavyko prisijungti prie sinchronizacijos serverio.", + "pad.modals.initsocketfail.cause": "Tai tikriausiai nutiko dėl problemų su jūsų naršykle ar jūsų interneto ryšiu.", "pad.modals.slowcommit.explanation": "Serveris neatsako.", + "pad.modals.slowcommit.cause": "Tai gali būti dėl problemų su tinklo ryšiu.", + "pad.modals.badChangeset.explanation": "Pakeitimas, kurį atlikote buvo klasifikuotas sinchorizacijos serverio kaip neteisėtas.", + "pad.modals.badChangeset.cause": "Tai galėjo nutikti dėl neteisingos serverio konfigūracijos ar kitos netikėtos elgsenos. Prašome susisiekti su paslaugos administratoriumi jei manote, kad tai klaida. Pabandykite prisijungti iš naujo, kad tęstumėte redagavimą.", + "pad.modals.corruptPad.explanation": "Bloknotas, kurį bandote pasiekti yra sugadintas.", + "pad.modals.corruptPad.cause": "Tai gali nutikti dėl neteisingos serverio konfigūracijos ar kitos netikėtos elgsenos. Prašome susisiekti su paslaugos administratoriumi.", "pad.modals.deleted": "Ištrintas.", + "pad.modals.deleted.explanation": "Bloknotas buvo pašalintas.", "pad.modals.disconnected": "Jūs atsijungėte.", + "pad.modals.disconnected.explanation": "Ryšys su serveriu nutrūko", + "pad.modals.disconnected.cause": "Gali būti, kad serveris yra nepasiekiamas. Prašome informuoti paslaugos administratorių jei tai tęsiasi.", "pad.share": "Dalintis šiuo bloknotu", "pad.share.readonly": "Tik skaityti", "pad.share.link": "Nuoroda", "pad.share.emebdcode": "Įterptasis URL", "pad.chat": "Pokalbiai", + "pad.chat.title": "Atverti šio bloknoto pokalbį.", "pad.chat.loadmessages": "Įkrauti daugiau pranešimų", + "timeslider.pageTitle": "{{appTitle}} Laiko slinkiklis", "timeslider.toolbar.returnbutton": "Grįžti į bloknotą", "timeslider.toolbar.authors": "Autoriai:", "timeslider.toolbar.authorsList": "Nėra autorių", @@ -77,6 +94,9 @@ "timeslider.exportCurrent": "Eksportuoti dabartinę versiją kaip:", "timeslider.version": "Versija {{version}}", "timeslider.saved": "Išsaugota {{year}},{{month}} {{day}}", + "timeslider.playPause": "Atkurti / Pristabdyti Bloknoto Turinį", + "timeslider.backRevision": "Grįžti viena Bloknoto peržiūra atgal", + "timeslider.forwardRevision": "Eiti viena Bloknoto peržiūra į priekį", "timeslider.dateformat": "{{year}}-{{month}}-{{day}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Sausis", "timeslider.month.february": "Vasaris", @@ -90,15 +110,22 @@ "timeslider.month.october": "Spalis", "timeslider.month.november": "Lapkritis", "timeslider.month.december": "Gruodis", - "timeslider.unnamedauthors": "{{num}} bevardžiai(-ių) autoriai(-ių)", + "timeslider.unnamedauthors": "{{num}} {[plural(num) one: bevardis autorius, other: bevardžiai autoriai ]}", + "pad.savedrevs.marked": "Peržiūrą dabar pažymėta kaip išsaugota peržiūra", + "pad.savedrevs.timeslider": "Galite peržiūrėti išsaugotas peržiūras apsilankydami laiko slinkiklyje", "pad.userlist.entername": "Įveskite savo vardą", "pad.userlist.unnamed": "bevardis", "pad.userlist.guest": "Svečias", "pad.userlist.deny": "Neigti", "pad.userlist.approve": "Patvirtinti", + "pad.editbar.clearcolors": "Išvalyti autorystės spalvas visame dokumente?", "pad.impexp.importbutton": "Importuoti dabar", "pad.impexp.importing": "Importuojama...", + "pad.impexp.confirmimport": "Failo importavimas pakeis dabartinį bloknoto tekstą. Ar tikrai norite tęsti?", + "pad.impexp.convertFailed": "Mums nepavyko importuoti šio failo. Prašome naudoti kitokį dokumento formatą arba nukopijuoti ir įklijuoti rankiniu būdu", + "pad.impexp.padHasData": "Mums nepavyko importuoti šio failo, nes šis Bloknotas jau turėjo pakeitimų, prašome importuoti į naują bloknotą", "pad.impexp.uploadFailed": "Įkėlimas nepavyko, bandykite dar kartą", "pad.impexp.importfailed": "Importuoti nepavyko", - "pad.impexp.copypaste": "Prašome nukopijuoti ir įklijuoti" + "pad.impexp.copypaste": "Prašome nukopijuoti ir įklijuoti", + "pad.impexp.exportdisabled": "Eksportavimas {{type}} formatu yra išjungtas. Prašome susisiekti su savo sistemos administratoriumi dėl informacijos." } From 219a1dc3e30b0a7da2b2894cf486b9103b50020b Mon Sep 17 00:00:00 2001 From: Dan Bornstein Date: Fri, 12 Aug 2016 11:05:40 -0700 Subject: [PATCH 40/79] Fix value to be valid JSON. Also fixed some errant EOL whitespace. --- settings.json.template | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/settings.json.template b/settings.json.template index 9dec7c670..418048f66 100644 --- a/settings.json.template +++ b/settings.json.template @@ -3,7 +3,7 @@ Please edit settings.json, not settings.json.template - To still commit settings without credentials you can + To still commit settings without credentials you can store any credential settings in credentials.json */ { @@ -197,7 +197,7 @@ { "type": "smtp" , "subject": "An error occured in your EPL instance!" , "recipients": "bar@blurdybloop.com, baz@blurdybloop.com" - , "sendInterval": 60*5 // in secs -- will buffer log messages; set to 0 to send a mail for every message + , "sendInterval": 300 // 60 * 5 = 5 minutes -- will buffer log messages; set to 0 to send a mail for every message , "transport": "SMTP", "SMTP": { // see https://github.com/andris9/Nodemailer#possible-transport-methods "host": "smtp.example.com", "port": 465, "secureConnection": true, From f1471465195885594fe62a799c30126a4d3ff791 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Mon, 15 Aug 2016 08:08:30 +0200 Subject: [PATCH 41/79] Localisation updates from https://translatewiki.net. --- src/locales/diq.json | 2 +- src/locales/ko.json | 2 +- src/locales/zh-hans.json | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/locales/diq.json b/src/locales/diq.json index 9c69c5782..bc137dcdc 100644 --- a/src/locales/diq.json +++ b/src/locales/diq.json @@ -108,7 +108,7 @@ "timeslider.month.july": "Temuz", "timeslider.month.august": "Tebaxe", "timeslider.month.september": "Keşkelun", - "timeslider.month.october": "Cetan", + "timeslider.month.october": "Tışrino Verên", "timeslider.month.november": "Kelverdan", "timeslider.month.december": "Kanun", "timeslider.unnamedauthors": "{{num}} unnamed {[plural(num) zu: nuştoğ, zewbi: nustoği ]}", diff --git a/src/locales/ko.json b/src/locales/ko.json index 8790239d1..d0ba7bdcb 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -38,7 +38,7 @@ "pad.settings.padSettings": "패드 설정", "pad.settings.myView": "내 보기", "pad.settings.stickychat": "화면에 항상 대화 보기", - "pad.settings.chatandusers": "채트와 사용자 보이기", + "pad.settings.chatandusers": "채트와 사용자 보기", "pad.settings.colorcheck": "저자 색", "pad.settings.linenocheck": "줄 번호", "pad.settings.rtlcheck": "우횡서(오른쪽에서 왼쪽으로)입니까?", diff --git a/src/locales/zh-hans.json b/src/locales/zh-hans.json index 15f115912..b4ff306f8 100644 --- a/src/locales/zh-hans.json +++ b/src/locales/zh-hans.json @@ -105,7 +105,7 @@ "timeslider.playPause": "回放 / 暂停Pad内容", "timeslider.backRevision": "返回此Pad的一次修订", "timeslider.forwardRevision": "前往此Pad的一次修订", - "timeslider.dateformat": "{{year}}年{{month}}月{{day}}日 {{hours}}{{minutes}}{{seconds}}", + "timeslider.dateformat": "{{year}}年{{month}}月{{day}}日 {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "1月", "timeslider.month.february": "2月", "timeslider.month.march": "3月", From bd20d44e895c004c4847daabdba28d20c54e7f0a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Thu, 18 Aug 2016 07:52:23 +0200 Subject: [PATCH 42/79] Localisation updates from https://translatewiki.net. --- src/locales/diq.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/diq.json b/src/locales/diq.json index bc137dcdc..e1546e941 100644 --- a/src/locales/diq.json +++ b/src/locales/diq.json @@ -109,7 +109,7 @@ "timeslider.month.august": "Tebaxe", "timeslider.month.september": "Keşkelun", "timeslider.month.october": "Tışrino Verên", - "timeslider.month.november": "Kelverdan", + "timeslider.month.november": "Tışrino Peyên", "timeslider.month.december": "Kanun", "timeslider.unnamedauthors": "{{num}} unnamed {[plural(num) zu: nuştoğ, zewbi: nustoği ]}", "pad.savedrevs.marked": "Eno vurriyayış henda qeyd bıyaye yew vurriyayış deyne nışan bıyo", From ea562250d9c4a5e3190c5be05b1e2fb3d6afe519 Mon Sep 17 00:00:00 2001 From: Luiza Pagliari Date: Mon, 22 Aug 2016 18:44:17 -0300 Subject: [PATCH 43/79] Perform drag and drop in one changeset, so UNDO works properly. Fix #3041 --- src/static/js/ace2_inner.js | 45 +++++--- tests/frontend/specs/drag_and_drop.js | 160 ++++++++++++++++++++++++++ 2 files changed, 189 insertions(+), 16 deletions(-) create mode 100644 tests/frontend/specs/drag_and_drop.js diff --git a/src/static/js/ace2_inner.js b/src/static/js/ace2_inner.js index f8a8d847b..def7b0900 100644 --- a/src/static/js/ace2_inner.js +++ b/src/static/js/ace2_inner.js @@ -1455,16 +1455,6 @@ function Ace2Inner(){ var selection = getSelection(); p.end(); - function topLevel(n) - { - if ((!n) || n == root) return null; - while (n.parentNode != root) - { - n = n.parentNode; - } - return n; - } - if (selection) { var node1 = topLevel(selection.startPoint.node); @@ -1486,12 +1476,8 @@ function Ace2Inner(){ var nds = root.getElementsByTagName("style"); for (var i = 0; i < nds.length; i++) { - var n = nds[i]; - while (n.parentNode && n.parentNode != root) - { - n = n.parentNode; - } - if (n.parentNode == root) + var n = topLevel(nds[i]); + if (n && n.parentNode == root) { observeChangesAroundNode(n); } @@ -5034,6 +5020,23 @@ function Ace2Inner(){ if(e.target.a || e.target.localName === "a"){ e.preventDefault(); } + + // Bug fix: when user drags some content and drop it far from its origin, we + // need to merge the changes into a single changeset. So mark origin with \n' + '\n') + - ''; - var foot = '\n\n'; getPadHTML(pad, revNum, function (err, html) { if(ERR(err, callback)) return; - callback(null, head + html + foot); + var exportedDoc = eejs.require("ep_etherpad-lite/templates/export_html.html", { + body: html, + doctype: noDocType ? '' : '', + padId: Security.escapeHTML(padId), + extraCSS: stylesForExportCSS + }); + callback(null, exportedDoc); }); }); }); diff --git a/src/templates/export_html.html b/src/templates/export_html.html new file mode 100644 index 000000000..24e83ac2c --- /dev/null +++ b/src/templates/export_html.html @@ -0,0 +1,143 @@ +<%- doctype %> + + +<%- padId %> + + + + + + + +<%- body %> + + From 8ad9d4f6ddcbdc658162e4b9635d3579556b310d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Thu, 25 Aug 2016 07:33:25 +0200 Subject: [PATCH 48/79] Localisation updates from https://translatewiki.net. --- src/locales/hu.json | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/locales/hu.json b/src/locales/hu.json index c4d06c273..f34c76caf 100644 --- a/src/locales/hu.json +++ b/src/locales/hu.json @@ -64,7 +64,7 @@ "pad.modals.userdup.explanation": "Úgy tűnik, ez a notesz több különböző böngészőablakban is meg van nyitva a számítógépeden.", "pad.modals.userdup.advice": "Kapcsolódj újra, ha ezt az ablakot akarod használni.", "pad.modals.unauth": "Nincs rá jogosultságod", - "pad.modals.unauth.explanation": "A jogosultságaid megváltoztak, miközben ezt az oldalt nézted. Próbálj meg újrakapcsolódni.", + "pad.modals.unauth.explanation": "A jogosultságaid megváltoztak, miközben ezt az oldalt nézted. Próbálj meg újrakapcsolódni!", "pad.modals.looping.explanation": "Nem sikerült a kommunikáció a szinkronizációs szerverrel.", "pad.modals.looping.cause": "Talán egy túl szigorú tűzfalon vagy proxyn keresztül kapcsolódtál az internetre.", "pad.modals.initsocketfail": "A szerver nem érhető el.", @@ -96,6 +96,9 @@ "timeslider.exportCurrent": "Jelenlegi változat exportálása így:", "timeslider.version": "{{version}} verzió", "timeslider.saved": "{{year}}. {{month}} {{day}}-n elmentve", + "timeslider.playPause": "Notesz tartalom visszajátszása / leállítása", + "timeslider.backRevision": "Egy revízióval vissza a noteszben", + "timeslider.forwardRevision": "Egy revízióval előre a noteszben", "timeslider.dateformat": "{{year}}/{{month}}/{{day}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "január", "timeslider.month.february": "február", @@ -109,8 +112,9 @@ "timeslider.month.october": "október", "timeslider.month.november": "november", "timeslider.month.december": "december", - "timeslider.unnamedauthors": "{{num}} névtelen {[plural(num), one: szerző, other: szerző]}", + "timeslider.unnamedauthors": "{{num}} névtelen {[plural(num), one: szerző, other: szerzők]}", "pad.savedrevs.marked": "Ez a revízió mostantól mentettként jelölve", + "pad.savedrevs.timeslider": "A mentett revíziókat az időcsúszkán tudod megnézni", "pad.userlist.entername": "Add meg a nevedet", "pad.userlist.unnamed": "névtelen", "pad.userlist.guest": "Vendég", @@ -121,7 +125,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.padHasData": "Nem tudjuk importálni ezt a fájlt, mert ez a notesz már megváltozott, kérjük, importálj egy új noteszba.", "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", From a3765d97853ecfe3fa608cd3b191a33cabe311ec Mon Sep 17 00:00:00 2001 From: Dan Bornstein Date: Tue, 30 Aug 2016 11:10:17 -0700 Subject: [PATCH 49/79] Account for any top margin on the first line. Without this change, a top margin on any element on the first line of pad content would throw off the alignment of line numbers. The default stylesheet doesn't define any elements with top margins, but plugins might. (This is also explained in a code comment.) In order to see the problem, add the following clause to `iframe_editor.css` (before incorporating this commit): #innerdocbody > :first-child { margin-top: 100px; } --- src/static/js/ace2_inner.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/src/static/js/ace2_inner.js b/src/static/js/ace2_inner.js index def7b0900..0970666eb 100644 --- a/src/static/js/ace2_inner.js +++ b/src/static/js/ace2_inner.js @@ -5459,7 +5459,16 @@ function Ace2Inner(){ // and the line-numbers don't line up unless we pay // attention to where the divs are actually placed... // (also: padding on TTs/SPANs in IE...) - h = b.nextSibling.offsetTop - b.offsetTop; + if (b === doc.body.firstChild) { + // It's the first line. For line number alignment purposes, its + // height is taken to be the top offset of the next line. If we + // didn't do this special case, we would miss out on any top margin + // included on the first line. The default stylesheet doesn't add + // extra margins, but plugins might. + h = b.nextSibling.offsetTop; + } else { + h = b.nextSibling.offsetTop - b.offsetTop; + } } if (h) { From fd7591c110c2420f8ed7baafb4232495f36bd62b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Mon, 5 Sep 2016 07:14:04 +0200 Subject: [PATCH 50/79] Localisation updates from https://translatewiki.net. --- src/locales/de.json | 5 +++-- src/locales/qqq.json | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/locales/de.json b/src/locales/de.json index 29387fd59..f32b8cf62 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -6,11 +6,12 @@ "Nipsky", "Wikinaut", "Thargon", - "Predatorix" + "Predatorix", + "Sebastian Wallroth" ] }, "index.newPad": "Neues Pad", - "index.createOpenPad": "oder Pad mit folgendem Namen öffnen:", + "index.createOpenPad": "oder ein Pad mit folgendem Namen erstellen/öffnen:", "pad.toolbar.bold.title": "Fett (Strg-B)", "pad.toolbar.italic.title": "Kursiv (Strg-I)", "pad.toolbar.underline.title": "Unterstrichen (Strg-U)", diff --git a/src/locales/qqq.json b/src/locales/qqq.json index 39389924c..0beec0cc2 100644 --- a/src/locales/qqq.json +++ b/src/locales/qqq.json @@ -107,7 +107,7 @@ "pad.savedrevs.marked": "more like bookmarked, or tagged/starred", "pad.userlist.entername": "Used as placeholder for the \"Name\" input box in the upper right corner of the screen.", "pad.userlist.unnamed": "Displayed, if a user has not set a nick yet", - "pad.userlist.guest": "Preceded by the link text which is labeled {{msg-etherpadlite|Pad.userlist.approve}}.", + "pad.userlist.guest": "Preceded by the link text which is labeled {{msg-etherpadlite|Pad.userlist.approve}}.\n{{Identical|Guest}}", "pad.userlist.deny": "Used as link text.\n\nFollowed by the link which is labeled {{msg-etherpadlite|Pad.userlist.approve}}.", "pad.userlist.approve": "Used as link text.\n\nPreceded by the link which is labeled {{msg-etherpadlite|Pad.userlist.deny}}.\n\nFollowed by the message {{msg-etherpadlite|Pad.userlist.guest}}.\n{{Identical|Approve}}", "pad.editbar.clearcolors": "Used as confirmation message (JavaScript confirm() function).\n\nThis message means \"Are you sure you want to clear authorship colors on entire document?\".", From b502c855d22cd209e2aa8e4a96de6c6808d279d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Thu, 8 Sep 2016 10:08:19 +0200 Subject: [PATCH 51/79] Localisation updates from https://translatewiki.net. --- src/locales/ar.json | 2 +- src/locales/dty.json | 56 ++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 55 insertions(+), 3 deletions(-) diff --git a/src/locales/ar.json b/src/locales/ar.json index 33c6beb3f..4d9eb111a 100644 --- a/src/locales/ar.json +++ b/src/locales/ar.json @@ -80,7 +80,7 @@ "pad.modals.corruptPad.cause": "قد يكون هذا بسبب تكوين ملقم خاطئ أو بسبب سلوك آخر غير متوقع. يرجى الاتصال بمسؤول الخدمة.", "pad.modals.deleted": "محذوف.", "pad.modals.deleted.explanation": "تمت إزالة هذا الباد", - "pad.modals.disconnected": "لم تعد متّصل.", + "pad.modals.disconnected": "لم تعد متصلا.", "pad.modals.disconnected.explanation": "تم فقدان الإتصال بالخادم", "pad.modals.disconnected.cause": "قد يكون الخادم غير متوفر. يرجى إعلام مسؤول الخدمة إذا كان هذا لا يزال يحدث.", "pad.share": "شارك هذه الباد", diff --git a/src/locales/dty.json b/src/locales/dty.json index fde365120..4eeef7527 100644 --- a/src/locales/dty.json +++ b/src/locales/dty.json @@ -2,7 +2,8 @@ "@metadata": { "authors": [ "रमेश सिंह बोहरा", - "राम प्रसाद जोशी" + "राम प्रसाद जोशी", + "Nirajan pant" ] }, "index.newPad": "नयाँ प्याड", @@ -18,6 +19,7 @@ "pad.toolbar.undo.title": "खारेजी (Ctrl-Z)", "pad.toolbar.redo.title": "दोसर्या:लागु (Ctrl-Y)", "pad.toolbar.clearAuthorship.title": "लेखकीय रङ्ग हटाउन्या (Ctrl+Shift+C)", + "pad.toolbar.import_export.title": "विविध फाइल फर्म्याटअन बठेइ/मी आयात/निर्यात", "pad.toolbar.timeslider.title": "टाइमस्लाइडर", "pad.toolbar.savedRevision.title": "पुनरावलोकन संग्रहा गद्य्य", "pad.toolbar.settings.title": "सेटिङ्गहरू", @@ -26,6 +28,7 @@ "pad.colorpicker.save": "सङ्ग्रह गद्या", "pad.colorpicker.cancel": "खारेजी", "pad.loading": "लोड हुन्नाछ....", + "pad.noCookie": "कुकी पाउन नाइ सकियो। तमरा ब्राउजरमी कुकी राख्दाइ अनुमति दिय!", "pad.passwordRequired": "यो प्यड खोल्लाकी पासवर्ड चाहिन्छ", "pad.permissionDenied": "तमलाईँ यै प्याड खोल्लाकी अनुमति नाइथिन", "pad.wrongPassword": "तमरो पासवर्ड गलत थ्यो", @@ -49,9 +52,17 @@ "pad.importExport.exportword": "माइक्रोसफ्ट वर्ड", "pad.importExport.exportpdf": "पिडिएफ", "pad.importExport.exportopen": "ओडिएफ(खुल्ला कागजात ढाँचा)", + "pad.importExport.abiword.innerHTML": "तम सादा पाठ या HTML ढाँचा बठेइ मात्तरी आयात अरीसकन्छऽ। विस्तारित आयात विशेषता खिलाई कृपया abiword स्थापना अरऽ।", "pad.modals.connected": "जोडीयाको", "pad.modals.reconnecting": "तमरो प्याडमि आजि: जडान हुन्नाछ", + "pad.modals.forcereconnect": "बलात् पुन:जडान", + "pad.modals.userdup": "अर्खा विण्डोमी खुलिरैछ", + "pad.modals.userdup.explanation": "यो प्याड येइ कम्प्युटरमी एक़ है बर्ता ब्राउजर सञ्झ्यालमी खोल्याऽ धेकीँछ।", + "pad.modals.userdup.advice": "बरु यो विण्डो प्रयोग अद्दाइ दोसर्‍याँ जोणिय।", + "pad.modals.unauth": "अनुमति नदियीयाऽ", "pad.modals.initsocketfail": "सर्भरमा पहुँच पुर्‍याउन नाइसकियो ।", + "pad.modals.slowcommit.explanation": "सर्भर प्रत्युत्तर दिन्नारेन।", + "pad.modals.slowcommit.cause": "यो नेटवर्क कनेक्टिविटी सङ्ङ सम्बन्धित समस्याऽ कारण ले होइसकन्छ।", "pad.modals.deleted": "मेटियाको", "pad.modals.deleted.explanation": "यो प्याड हटाइसक्याको छ ।", "pad.modals.disconnected": "तमरो जडान अवरुद्ध भयो ।", @@ -60,5 +71,46 @@ "pad.share.readonly": "पड्या मात्तरै", "pad.share.link": "लिङ्क", "pad.share.emebdcode": "URL थप्प्या", - "pad.chat": "कुरणिकानी" + "pad.chat": "कुरणिकानी", + "pad.chat.title": "येइ प्याड खिलाइ गफ खोलऽ", + "pad.chat.loadmessages": "जेदा सन्देश लोड अरऽ", + "timeslider.pageTitle": "{{appTitle}} समय स्लाइडर", + "timeslider.toolbar.returnbutton": "प्याडमी फर्कऽ", + "timeslider.toolbar.authors": "लेखकअन:", + "timeslider.toolbar.authorsList": "लेखकअन आथीनन", + "timeslider.toolbar.exportlink.title": "निर्यात", + "timeslider.exportCurrent": "हालआ शंसोधनलाई इस्याँ निर्यात अरऽ:", + "timeslider.version": "संस्करण {{version}}", + "timeslider.saved": "भँणार अरीयाऽ {{month}} {{day}}, {{year}}", + "timeslider.playPause": "प्याडआ सामाग्रीइनलाई प्लेब्याक/पउज अरऽ", + "timeslider.backRevision": "येइ प्याडमी यक शंसोधन पछा जाऽ", + "timeslider.forwardRevision": "येइ शंसोधनमी यक शंसोधन अघा जाऽ", + "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", + "timeslider.month.january": "जनवरी", + "timeslider.month.february": "फेब्रुअरी", + "timeslider.month.march": "मार्च", + "timeslider.month.april": "अप्रिल", + "timeslider.month.may": "मे", + "timeslider.month.june": "जुन", + "timeslider.month.july": "जुलाई", + "timeslider.month.august": "अगस्ट", + "timeslider.month.september": "सेप्टेम्बर", + "timeslider.month.october": "अक्टोबर", + "timeslider.month.november": "नोभेम्बर", + "timeslider.month.december": "डिसेम्बर", + "timeslider.unnamedauthors": "{{num}} बिननाउँइको {[plural(num) one: author, other: authors ]}", + "pad.savedrevs.marked": "आब येइ संशोधनलाई सङ्ग्रहित संशोधनआ रूपमी चिनो लायियो", + "pad.savedrevs.timeslider": "समयस्लाइडर भेटिबर तम भँणार अरीयाऽ शंसोधनअनलाई हेरि सकन्छऽ", + "pad.userlist.entername": "तमरो नाउँ हाल", + "pad.userlist.unnamed": "बिननाउँइको", + "pad.userlist.guest": "पाउनो", + "pad.userlist.deny": "अस्वीकार", + "pad.userlist.approve": "अनुमोदन", + "pad.editbar.clearcolors": "सङताइ कागताजमी है लेखक रङ्ङअन साप अद्द्या?", + "pad.impexp.importbutton": "ऐलै आयार अरऽ", + "pad.impexp.importing": "आयात अद्दाछ़...", + "pad.impexp.uploadFailed": "अपलोड असफल, कृपया दोसर्‍याँ प्रयास अर:", + "pad.impexp.importfailed": "आयात असफल", + "pad.impexp.copypaste": "कृपया नकल सार अर:", + "pad.impexp.exportdisabled": "{{type}} फर्म्याटमी निर्यात अक्षम अरीरैछ। विवरण खिलाइ कृपया तमरा संयन्त्र प्रशासकलाई सम्पर्क अर:।" } From 879ae7c67d6b0c7fa78e0e09435861e5509678a8 Mon Sep 17 00:00:00 2001 From: Dan Bornstein Date: Thu, 8 Sep 2016 09:41:23 -0700 Subject: [PATCH 52/79] Remove the `noDocType` argument, which was only ever passed as `false`. --- src/node/handler/ExportHandler.js | 2 +- src/node/hooks/express/padreadonly.js | 4 ++-- src/node/utils/ExportHtml.js | 3 +-- src/templates/export_html.html | 2 +- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/node/handler/ExportHandler.js b/src/node/handler/ExportHandler.js index 8f91ced23..7cce6200b 100644 --- a/src/node/handler/ExportHandler.js +++ b/src/node/handler/ExportHandler.js @@ -92,7 +92,7 @@ exports.doExport = function(req, res, padId, type) //render the html document function(callback) { - exporthtml.getPadHTMLDocument(padId, req.params.rev, false, function(err, _html) + exporthtml.getPadHTMLDocument(padId, req.params.rev, function(err, _html) { if(ERR(err, callback)) return; html = _html; diff --git a/src/node/hooks/express/padreadonly.js b/src/node/hooks/express/padreadonly.js index 66be33390..bff8adf7b 100644 --- a/src/node/hooks/express/padreadonly.js +++ b/src/node/hooks/express/padreadonly.js @@ -7,7 +7,7 @@ var exporthtml = require("../../utils/ExportHtml"); exports.expressCreateServer = function (hook_name, args, cb) { //serve read only pad args.app.get('/ro/:id', function(req, res) - { + { var html; var padId; @@ -40,7 +40,7 @@ exports.expressCreateServer = function (hook_name, args, cb) { hasPadAccess(req, res, function() { //render the html document - exporthtml.getPadHTMLDocument(padId, null, false, function(err, _html) + exporthtml.getPadHTMLDocument(padId, null, function(err, _html) { if(ERR(err, callback)) return; html = _html; diff --git a/src/node/utils/ExportHtml.js b/src/node/utils/ExportHtml.js index f2e275eea..bd177ac47 100644 --- a/src/node/utils/ExportHtml.js +++ b/src/node/utils/ExportHtml.js @@ -479,7 +479,7 @@ function getHTMLFromAtext(pad, atext, authorColors) return pieces.join(''); } -exports.getPadHTMLDocument = function (padId, revNum, noDocType, callback) +exports.getPadHTMLDocument = function (padId, revNum, callback) { padManager.getPad(padId, function (err, pad) { @@ -497,7 +497,6 @@ exports.getPadHTMLDocument = function (padId, revNum, noDocType, callback) if(ERR(err, callback)) return; var exportedDoc = eejs.require("ep_etherpad-lite/templates/export_html.html", { body: html, - doctype: noDocType ? '' : '', padId: Security.escapeHTML(padId), extraCSS: stylesForExportCSS }); diff --git a/src/templates/export_html.html b/src/templates/export_html.html index 24e83ac2c..b8893b717 100644 --- a/src/templates/export_html.html +++ b/src/templates/export_html.html @@ -1,4 +1,4 @@ -<%- doctype %> + <%- padId %> From a0403ffc22da6e94c88f89ea0ff0d65704947415 Mon Sep 17 00:00:00 2001 From: Dan Bornstein Date: Thu, 8 Sep 2016 09:46:13 -0700 Subject: [PATCH 53/79] Remove unused parameter `noDocType`. My editor also auto-stripped some EOL whitespace. --- src/node/handler/ExportHandler.js | 2 +- src/node/utils/ExportTxt.js | 12 ++++++------ 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/node/handler/ExportHandler.js b/src/node/handler/ExportHandler.js index 7cce6200b..fe7ab3db1 100644 --- a/src/node/handler/ExportHandler.js +++ b/src/node/handler/ExportHandler.js @@ -76,7 +76,7 @@ exports.doExport = function(req, res, padId, type) } else if(type == "txt") { - exporttxt.getPadTXTDocument(padId, req.params.rev, false, function(err, txt) + exporttxt.getPadTXTDocument(padId, req.params.rev, function(err, txt) { if(ERR(err)) return; res.send(txt); diff --git a/src/node/utils/ExportTxt.js b/src/node/utils/ExportTxt.js index a6bec4a58..e3ce01520 100644 --- a/src/node/utils/ExportTxt.js +++ b/src/node/utils/ExportTxt.js @@ -192,7 +192,7 @@ function getTXTFromAtext(pad, atext, authorColors) tags2close.push(i); } } - + for (var i = 0; i < propVals.length; i++) { if (propVals[i] === ENTER || propVals[i] === STAY) @@ -208,10 +208,10 @@ function getTXTFromAtext(pad, atext, authorColors) { chars--; // exclude newline at end of line, if present } - + var s = taker.take(chars); - // removes the characters with the code 12. Don't know where they come + // removes the characters with the code 12. Don't know where they come // from but they break the abiword parser and are completly useless // s = s.replace(String.fromCharCode(12), ""); @@ -221,7 +221,7 @@ function getTXTFromAtext(pad, atext, authorColors) assem.append(s); } // end iteration over spans in line - + var tags2close = []; for (var i = propVals.length - 1; i >= 0; i--) { @@ -231,7 +231,7 @@ function getTXTFromAtext(pad, atext, authorColors) propVals[i] = false; } } - + } // end processNextChars processNextChars(text.length - idx); return(assem.toString()); @@ -271,7 +271,7 @@ function getTXTFromAtext(pad, atext, authorColors) } exports.getTXTFromAtext = getTXTFromAtext; -exports.getPadTXTDocument = function (padId, revNum, noDocType, callback) +exports.getPadTXTDocument = function (padId, revNum, callback) { padManager.getPad(padId, function (err, pad) { From a5a7ebea3dab9e14240a5258ae5477e2f2c00e2a Mon Sep 17 00:00:00 2001 From: Dan Bornstein Date: Fri, 9 Sep 2016 12:32:24 -0700 Subject: [PATCH 54/79] Handle `@import` during CSS minification. This meant plumbing a callback through to `compressCSS()`, which meant that I had to alter the innards of `getFileCompressed()`. I tried to leave that function looking more understandable than when I found it; for example, I flattened out the nested `if`. I went ahead and upgraded the version of `clean-css` while I was in the territory. --- src/node/utils/Minify.js | 53 +++++++++++++++++++++++----------------- src/package.json | 2 +- 2 files changed, 31 insertions(+), 24 deletions(-) diff --git a/src/node/utils/Minify.js b/src/node/utils/Minify.js index ee8f5f455..101dc97a1 100644 --- a/src/node/utils/Minify.js +++ b/src/node/utils/Minify.js @@ -1,7 +1,7 @@ /** - * This Module manages all /minified/* requests. It controls the - * minification && compression of Javascript and CSS. - */ + * This Module manages all /minified/* requests. It controls the + * minification && compression of Javascript and CSS. + */ /* * 2011 Peter 'Pita' Martischka (Primary Technology Ltd) @@ -151,7 +151,7 @@ function minify(req, res, next) } else { res.writeHead(404, {}); res.end(); - return; + return; } /* Handle static files for plugins/libraries: @@ -371,21 +371,19 @@ function requireDefinition() { function getFileCompressed(filename, contentType, callback) { getFile(filename, function (error, content) { - if (error || !content) { + if (error || !content || !settings.minify) { callback(error, content); - } else { - if (settings.minify) { - if (contentType == 'text/javascript') { - try { - content = compressJS([content]); - } catch (error) { - // silence - } - } else if (contentType == 'text/css') { - content = compressCSS([content]); - } + } else if (contentType == 'text/javascript') { + try { + content = compressJS(content); + } catch (error) { + // silence } callback(null, content); + } else if (contentType == 'text/css') { + compressCSS(filename, content, callback); + } else { + callback(null, content); } }); } @@ -400,20 +398,29 @@ function getFile(filename, callback) { } } -function compressJS(values) +function compressJS(content) { - var complete = values.join("\n"); - var ast = jsp.parse(complete); // parse code and get the initial AST + var ast = jsp.parse(content); // parse code and get the initial AST ast = pro.ast_mangle(ast); // get a new AST with mangled names ast = pro.ast_squeeze(ast); // get an AST with compression optimizations return pro.gen_code(ast); // compressed code here } -function compressCSS(values) +function compressCSS(filename, content, callback) { - var complete = values.join("\n"); - var minimized = new CleanCSS().minify(complete).styles; - return minimized; + try { + new CleanCSS({relativeTo: ROOT_DIR}).minify(content, function (errors, minified) { + if (errors) { + // On error, just yield the un-minified original. + callback(null, content); + } else { + callback(null, minified.styles); + } + }); + } catch (error) { + // On error, just yield the un-minified original. + callback(null, content); + } } exports.minify = minify; diff --git a/src/package.json b/src/package.json index bdbf35c24..98e0fed05 100644 --- a/src/package.json +++ b/src/package.json @@ -22,7 +22,7 @@ "express-session" : "1.13.0", "cookie-parser" : "1.3.4", "async" : "0.9.0", - "clean-css" : "3.4.12", + "clean-css" : "3.4.19", "uglify-js" : "2.6.2", "formidable" : "1.0.17", "log4js" : "0.6.35", From d7940cf8c50acbd7cddef1fb1b9b6400a2a69caa Mon Sep 17 00:00:00 2001 From: Dan Bornstein Date: Fri, 9 Sep 2016 12:33:46 -0700 Subject: [PATCH 55/79] Harmonize list- and indent-related CSS in the pad editor and timeslider. * Add a new file `lists_and_indents.css` to hold the common CSS. * Remove the corresponding CSS from `iframe_editor.css`, replacing it with an `@import` of the new file. * Remove the list/indent code from `timeslider.css`, which was _unlike_ the corresponding editor CSS code, again replacing it with an `@import` of the new file. --- src/static/css/iframe_editor.css | 207 ++------------------------- src/static/css/lists_and_indents.css | 195 +++++++++++++++++++++++++ src/static/css/timeslider.css | 88 ++---------- 3 files changed, 212 insertions(+), 278 deletions(-) create mode 100644 src/static/css/lists_and_indents.css diff --git a/src/static/css/iframe_editor.css b/src/static/css/iframe_editor.css index 451ce807d..5eb94cf79 100644 --- a/src/static/css/iframe_editor.css +++ b/src/static/css/iframe_editor.css @@ -1,6 +1,9 @@ /* These CSS rules are included in both the outer and inner ACE iframe. Also see inner.css, included only in the inner one. */ + +@import url('css/lists_and_indents.css'); + html { cursor: text; } /* in Safari, produces text cursor for whole doc (inc. below body) */ span { cursor: auto; } @@ -11,75 +14,11 @@ span { cursor: auto; } background: #acf; } -a { - cursor: pointer !important; +a { + cursor: pointer !important; white-space:pre-wrap; } -ul, ol, li { - padding: 0; - margin: 0; -} - -ul { margin-left: 1.5em; } -ul ul { margin-left: 0 !important; } -ul.list-bullet1 { margin-left: 1.5em; } -ul.list-bullet2 { margin-left: 3em; } -ul.list-bullet3 { margin-left: 4.5em; } -ul.list-bullet4 { margin-left: 6em; } -ul.list-bullet5 { margin-left: 7.5em; } -ul.list-bullet6 { margin-left: 9em; } -ul.list-bullet7 { margin-left: 10.5em; } -ul.list-bullet8 { margin-left: 12em; } -ul.list-bullet9 { margin-left: 13.5em; } -ul.list-bullet10 { margin-left: 15em; } -ul.list-bullet11 { margin-left: 16.5em; } -ul.list-bullet12 { margin-left: 18em; } -ul.list-bullet13 { margin-left: 19.5em; } -ul.list-bullet14 { margin-left: 21em; } -ul.list-bullet15 { margin-left: 22.5em; } -ul.list-bullet16 { margin-left: 24em; } - -ul { list-style-type: disc; } -ul.list-bullet1 { list-style-type: disc; } -ul.list-bullet2 { list-style-type: circle; } -ul.list-bullet3 { list-style-type: square; } -ul.list-bullet4 { list-style-type: disc; } -ul.list-bullet5 { list-style-type: circle; } -ul.list-bullet6 { list-style-type: square; } -ul.list-bullet7 { list-style-type: disc; } -ul.list-bullet8 { list-style-type: circle; } -ul.list-bullet9 { list-style-type: disc; } -ul.list-bullet10 { list-style-type: circle; } -ul.list-bullet11 { list-style-type: square; } -ul.list-bullet12 { list-style-type: disc; } -ul.list-bullet13 { list-style-type: circle; } -ul.list-bullet14 { list-style-type: square; } -ul.list-bullet15 { list-style-type: disc; } -ul.list-bullet16 { list-style-type: circle; } - -ul.list-indent1 { margin-left: 1.5em; } -ul.list-indent2 { margin-left: 3em; } -ul.list-indent3 { margin-left: 4.5em; } -ul.list-indent4 { margin-left: 6em; } -ul.list-indent5 { margin-left: 7.5em; } -ul.list-indent6 { margin-left: 9em; } -ul.list-indent7 { margin-left: 10.5em; } -ul.list-indent8 { margin-left: 12em; } -ul.list-indent9 { margin-left: 13.5em; } -ul.list-indent10 { margin-left: 15em; } -ul.list-indent11 { margin-left: 16.5em; } -ul.list-indent12 { margin-left: 18em; } -ul.list-indent13 { margin-left: 19.5em; } -ul.list-indent14 { margin-left: 21em; } -ul.list-indent15 { margin-left: 22.5em; } -ul.list-indent16 { margin-left: 24em; } - -ul.list-indent1, ul.list-indent2, ul.list-indent3, ul.list-indent4, ul.list-indent5, -ul.list-indent6, ul.list-indent7, ul.list-indent8, ul.list-indent9, ul.list-indent10, -ul.list-indent11, ul.list-indent12, ul.list-indent13, -ul.list-indent14, ul.list-indent15, ul.list-indent16 { list-style-type: none; } - body { margin: 0; white-space: nowrap; @@ -102,11 +41,11 @@ body.grayedout { background-color: #eee !important } body.doesWrap { /* white-space: pre-wrap; */ - /* - Must be pre-wrap to keep trailing spaces. Otherwise you get a zombie caret, + /* + Must be pre-wrap to keep trailing spaces. Otherwise you get a zombie caret, walking around your screen (see #1766). WARNING: Enabling this causes Paste as plain text in Chrome to remove line breaks - this is probably undesirable + this is probably undesirable WARNING: This causes copy & paste events to lose bold etc. attributes NOTE: The walking-zombie caret issue seems to have been fixed in FF upstream so let's try diabling pre-wrap and see how we get on now. @@ -208,134 +147,6 @@ p { Commented out because it stops IE from being able to render the document, crazy IE bug is crazy. */ /* .ace-line{ - overflow:hidden; + overflow:hidden; } */ - -ol { - list-style-type: decimal; -} - -/* Fixes #2223 and #1836 */ -ol > li { - display:block; -} - -/* Set the indentation */ -ol.list-number1{ text-indent: 0px; } -ol.list-number2{ text-indent: 10px; } -ol.list-number3{ text-indent: 20px; } -ol.list-number4{ text-indent: 30px; } -ol.list-number5{ text-indent: 40px; } -ol.list-number6{ text-indent: 50px; } -ol.list-number7{ text-indent: 60px; } -ol.list-number8{ text-indent: 70px; } -ol.list-number9{ text-indent: 80px; } -ol.list-number10{ text-indent: 90px; } -ol.list-number11{ text-indent: 100px; } -ol.list-number12{ text-indent: 110px; } -ol.list-number13{ text-indent: 120px; } -ol.list-number14{ text-indent: 130px; } -ol.list-number15{ text-indent: 140px; } -ol.list-number16{ text-indent: 150px; } - -/* Add styling to the first item in a list */ - -.list-start-number1 { counter-reset: first second; } -.list-start-number2 { counter-reset: second; } -.list-start-number3 { counter-reset: third; } -.list-start-number4 { counter-reset: fourth; } -.list-start-number5 { counter-reset: fifth; } -.list-start-number6 { counter-reset: sixth; } -.list-start-number7 { counter-reset: seventh; } -.list-start-number8 { counter-reset: eighth; } -.list-start-number9 { counter-reset: ninth; } -.list-start-number10 { counter-reset: tenth; } -.list-start-number11 { counter-reset: eleventh; } -.list-start-number12 { counter-reset: twelth; } -.list-start-number13 { counter-reset: thirteenth; } -.list-start-number14 { counter-reset: fourteenth; } -.list-start-number15 { counter-reset: fifteenth; } -.list-start-number16 { counter-reset: sixteenth; } - -/* The behavior for incrementing and the prefix */ -.list-number1 li:before { - content: counter(first) ". " ; - counter-increment: first; -} - -.list-number2 li:before { - content: counter(first) "." counter(second) ". "; - counter-increment: second; -} - -.list-number3 li:before { - content: counter(first) "." counter(second) "." counter(third) ". "; - counter-increment: third 1; -} - -.list-number4 li:before { - content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) ". "; - counter-increment: fourth 1; -} - -.list-number5 li:before { - content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) ". "; - counter-increment: fifth 1; -} - -.list-number6 li:before { - content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) ". "; - counter-increment: sixth 1; -} - -.list-number7 li:before { - content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(seventh) ". "; - counter-increment: seventh 1; -} - -.list-number8 li:before { - content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(seventh) "." counter(eighth) ". " ; - counter-increment: eighth 1; -} - -.list-number9 li:before { - content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(seventh) "." counter(eighth) "." counter(ninth) ". "; - counter-increment: ninth 1; -} - -.list-number10 li:before { - content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(seventh) "." counter(eighth) "." counter(ninth) "." counter(tenth) ". "; - counter-increment: tenth 1; -} - -.list-number11 li:before { - content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(seventh) "." counter(eighth) "." counter(ninth) "." counter(tenth) "." counter(eleventh) ". "; - counter-increment: eleventh 1; -} - -.list-number12 li:before { - content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(seventh) "." counter(eighth) "." counter(ninth) "." counter(tenth) "." counter(eleventh) "." counter(twelth) ". "; - counter-increment: twelth 1; -} - -.list-number13 li:before { - content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(seventh) "." counter(eighth) "." counter(ninth) "." counter(tenth) "." counter(eleventh) "." counter(twelth) "." counter(thirteenth) ". "; - counter-increment: thirteenth 1; -} - -.list-number14 li:before { - content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(eighth) "." counter(ninth) "." counter(tenth) "." counter(eleventh) "." counter(twelth) "." counter(thirteenth) "." counter(fourteenth) ". "; - counter-increment: fourteenth 1; -} - -.list-number15 li:before { - content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(eighth) "." counter(ninth) "." counter(tenth) "." counter(eleventh) "." counter(twelth) "." counter(thirteenth) "." counter(fourteenth) "." counter(fifteenth) ". "; - counter-increment: fifteenth 1; -} - -.list-number16 li:before { - content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(eighth) "." counter(ninth) "." counter(tenth) "." counter(eleventh) "." counter(twelth) "." counter(thirteenth) "." counter(fourteenth) "." counter(fifteenth) "." counter(sixteenth) ". "; - counter-increment: fixteenth 1; -} - diff --git a/src/static/css/lists_and_indents.css b/src/static/css/lists_and_indents.css new file mode 100644 index 000000000..c6348efaa --- /dev/null +++ b/src/static/css/lists_and_indents.css @@ -0,0 +1,195 @@ +/* + * These are the common definitions for the styling of bulleted lists, numbered + * lists, and plain indented blocks, shared by the editor and timeslider pages. + */ + +ul, ol, li { + padding: 0; + margin: 0; +} + +ul { margin-left: 1.5em; } +ul ul { margin-left: 0 !important; } +ul.list-bullet1 { margin-left: 1.5em; } +ul.list-bullet2 { margin-left: 3em; } +ul.list-bullet3 { margin-left: 4.5em; } +ul.list-bullet4 { margin-left: 6em; } +ul.list-bullet5 { margin-left: 7.5em; } +ul.list-bullet6 { margin-left: 9em; } +ul.list-bullet7 { margin-left: 10.5em; } +ul.list-bullet8 { margin-left: 12em; } +ul.list-bullet9 { margin-left: 13.5em; } +ul.list-bullet10 { margin-left: 15em; } +ul.list-bullet11 { margin-left: 16.5em; } +ul.list-bullet12 { margin-left: 18em; } +ul.list-bullet13 { margin-left: 19.5em; } +ul.list-bullet14 { margin-left: 21em; } +ul.list-bullet15 { margin-left: 22.5em; } +ul.list-bullet16 { margin-left: 24em; } + +ul { list-style-type: disc; } +ul.list-bullet1 { list-style-type: disc; } +ul.list-bullet2 { list-style-type: circle; } +ul.list-bullet3 { list-style-type: square; } +ul.list-bullet4 { list-style-type: disc; } +ul.list-bullet5 { list-style-type: circle; } +ul.list-bullet6 { list-style-type: square; } +ul.list-bullet7 { list-style-type: disc; } +ul.list-bullet8 { list-style-type: circle; } +ul.list-bullet9 { list-style-type: disc; } +ul.list-bullet10 { list-style-type: circle; } +ul.list-bullet11 { list-style-type: square; } +ul.list-bullet12 { list-style-type: disc; } +ul.list-bullet13 { list-style-type: circle; } +ul.list-bullet14 { list-style-type: square; } +ul.list-bullet15 { list-style-type: disc; } +ul.list-bullet16 { list-style-type: circle; } + +ul.list-indent1 { margin-left: 1.5em; } +ul.list-indent2 { margin-left: 3em; } +ul.list-indent3 { margin-left: 4.5em; } +ul.list-indent4 { margin-left: 6em; } +ul.list-indent5 { margin-left: 7.5em; } +ul.list-indent6 { margin-left: 9em; } +ul.list-indent7 { margin-left: 10.5em; } +ul.list-indent8 { margin-left: 12em; } +ul.list-indent9 { margin-left: 13.5em; } +ul.list-indent10 { margin-left: 15em; } +ul.list-indent11 { margin-left: 16.5em; } +ul.list-indent12 { margin-left: 18em; } +ul.list-indent13 { margin-left: 19.5em; } +ul.list-indent14 { margin-left: 21em; } +ul.list-indent15 { margin-left: 22.5em; } +ul.list-indent16 { margin-left: 24em; } + +ul.list-indent1, ul.list-indent2, ul.list-indent3, ul.list-indent4, ul.list-indent5, +ul.list-indent6, ul.list-indent7, ul.list-indent8, ul.list-indent9, ul.list-indent10, +ul.list-indent11, ul.list-indent12, ul.list-indent13, +ul.list-indent14, ul.list-indent15, ul.list-indent16 { list-style-type: none; } + +ol { + list-style-type: decimal; +} + +/* Fixes #2223 and #1836 */ +ol > li { + display:block; +} + +/* Set the indentation */ +ol.list-number1{ text-indent: 0px; } +ol.list-number2{ text-indent: 10px; } +ol.list-number3{ text-indent: 20px; } +ol.list-number4{ text-indent: 30px; } +ol.list-number5{ text-indent: 40px; } +ol.list-number6{ text-indent: 50px; } +ol.list-number7{ text-indent: 60px; } +ol.list-number8{ text-indent: 70px; } +ol.list-number9{ text-indent: 80px; } +ol.list-number10{ text-indent: 90px; } +ol.list-number11{ text-indent: 100px; } +ol.list-number12{ text-indent: 110px; } +ol.list-number13{ text-indent: 120px; } +ol.list-number14{ text-indent: 130px; } +ol.list-number15{ text-indent: 140px; } +ol.list-number16{ text-indent: 150px; } + +/* Add styling to the first item in a list */ + +.list-start-number1 { counter-reset: first second; } +.list-start-number2 { counter-reset: second; } +.list-start-number3 { counter-reset: third; } +.list-start-number4 { counter-reset: fourth; } +.list-start-number5 { counter-reset: fifth; } +.list-start-number6 { counter-reset: sixth; } +.list-start-number7 { counter-reset: seventh; } +.list-start-number8 { counter-reset: eighth; } +.list-start-number9 { counter-reset: ninth; } +.list-start-number10 { counter-reset: tenth; } +.list-start-number11 { counter-reset: eleventh; } +.list-start-number12 { counter-reset: twelfth; } +.list-start-number13 { counter-reset: thirteenth; } +.list-start-number14 { counter-reset: fourteenth; } +.list-start-number15 { counter-reset: fifteenth; } +.list-start-number16 { counter-reset: sixteenth; } + +/* The behavior for incrementing and the prefix */ +.list-number1 li:before { + content: counter(first) ". " ; + counter-increment: first; +} + +.list-number2 li:before { + content: counter(first) "." counter(second) ". "; + counter-increment: second; +} + +.list-number3 li:before { + content: counter(first) "." counter(second) "." counter(third) ". "; + counter-increment: third 1; +} + +.list-number4 li:before { + content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) ". "; + counter-increment: fourth 1; +} + +.list-number5 li:before { + content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) ". "; + counter-increment: fifth 1; +} + +.list-number6 li:before { + content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) ". "; + counter-increment: sixth 1; +} + +.list-number7 li:before { + content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(seventh) ". "; + counter-increment: seventh 1; +} + +.list-number8 li:before { + content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(seventh) "." counter(eighth) ". " ; + counter-increment: eighth 1; +} + +.list-number9 li:before { + content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(seventh) "." counter(eighth) "." counter(ninth) ". "; + counter-increment: ninth 1; +} + +.list-number10 li:before { + content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(seventh) "." counter(eighth) "." counter(ninth) "." counter(tenth) ". "; + counter-increment: tenth 1; +} + +.list-number11 li:before { + content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(seventh) "." counter(eighth) "." counter(ninth) "." counter(tenth) "." counter(eleventh) ". "; + counter-increment: eleventh 1; +} + +.list-number12 li:before { + content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(seventh) "." counter(eighth) "." counter(ninth) "." counter(tenth) "." counter(eleventh) "." counter(twelfth) ". "; + counter-increment: twelfth 1; +} + +.list-number13 li:before { + content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(seventh) "." counter(eighth) "." counter(ninth) "." counter(tenth) "." counter(eleventh) "." counter(twelfth) "." counter(thirteenth) ". "; + counter-increment: thirteenth 1; +} + +.list-number14 li:before { + content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(eighth) "." counter(ninth) "." counter(tenth) "." counter(eleventh) "." counter(twelfth) "." counter(thirteenth) "." counter(fourteenth) ". "; + counter-increment: fourteenth 1; +} + +.list-number15 li:before { + content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(eighth) "." counter(ninth) "." counter(tenth) "." counter(eleventh) "." counter(twelfth) "." counter(thirteenth) "." counter(fourteenth) "." counter(fifteenth) ". "; + counter-increment: fifteenth 1; +} + +.list-number16 li:before { + content: counter(first) "." counter(second) "." counter(third) "." counter(fourth) "." counter(fifth) "." counter(sixth) "." counter(eighth) "." counter(ninth) "." counter(tenth) "." counter(eleventh) "." counter(twelfth) "." counter(thirteenth) "." counter(fourteenth) "." counter(fifteenth) "." counter(sixteenth) ". "; + counter-increment: sixteenth 1; +} diff --git a/src/static/css/timeslider.css b/src/static/css/timeslider.css index 2756a0064..c2e8aea7a 100644 --- a/src/static/css/timeslider.css +++ b/src/static/css/timeslider.css @@ -1,3 +1,9 @@ +@import url('css/lists_and_indents.css'); + +p.pblort { + height: 100px; +} + #editorcontainerbox { overflow: auto; top: 40px; @@ -90,7 +96,7 @@ cursor:hand; } #playpause_button_icon:before { - line-height:44px; + line-height:44px; padding-left:2px; font-family: fontawesome-etherpad; content: "\e82c"; @@ -105,7 +111,7 @@ border: solid 1px #666; } .pause:before { - line-height:44px; + line-height:44px; padding-left:2px; font-family: fontawesome-etherpad; content: "\e82e" !important; @@ -256,83 +262,6 @@ stepper:active{ #padeditor { position: static } -/* lists */ -.list-bullet2, -.list-indent2, -.list-number2 { - margin-left: 3em -} -.list-bullet3, -.list-indent3, -.list-number3 { - margin-left: 4.5em -} -.list-bullet4, -.list-indent4, -.list-number4 { - margin-left: 6em -} -.list-bullet5, -.list-indent5, -.list-number5 { - margin-left: 7.5em -} -.list-bullet6, -.list-indent6, -.list-number6 { - margin-left: 9em -} -.list-bullet7, -.list-indent7, -.list-number7 { - margin-left: 10.5em -} -.list-bullet8, -.list-indent8, -.list-number8 { - margin-left: 12em -} -/* unordered lists */ -UL { - list-style-type: disc; - margin-left: 1.5em; -} -UL UL { - margin-left: 0 !important -} -.list-bullet2, -.list-bullet5, -.list-bullet8 { - list-style-type: circle -} -.list-bullet3, -.list-bullet6 { - list-style-type: square -} -.list-indent1, -.list-indent2, -.list-indent3, -.list-indent5, -.list-indent5, -.list-indent6, -.list-indent7, -.list-indent8 { - list-style-type: none -} -/* ordered lists */ -OL { - list-style-type: decimal; - margin-left: 1.5em; -} -.list-number2, -.list-number5, -.list-number8 { - list-style-type: lower-latin -} -.list-number3, -.list-number6 { - list-style-type: lower-roman -} button{ margin:0; @@ -348,4 +277,3 @@ button::-moz-focus-inner { button:focus{ border: 1px solid #666; } - From 0a9d02562d7e14ecc9f9f1d929a65cc64924857a Mon Sep 17 00:00:00 2001 From: Dan Bornstein Date: Fri, 9 Sep 2016 12:59:02 -0700 Subject: [PATCH 56/79] Handle relative paths properly, when `@import`ing. --- src/node/utils/Minify.js | 3 ++- src/static/css/iframe_editor.css | 2 +- src/static/css/timeslider.css | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/node/utils/Minify.js b/src/node/utils/Minify.js index 101dc97a1..806523105 100644 --- a/src/node/utils/Minify.js +++ b/src/node/utils/Minify.js @@ -409,7 +409,8 @@ function compressJS(content) function compressCSS(filename, content, callback) { try { - new CleanCSS({relativeTo: ROOT_DIR}).minify(content, function (errors, minified) { + var base = path.join(ROOT_DIR, path.dirname(filename)); + new CleanCSS({relativeTo: base}).minify(content, function (errors, minified) { if (errors) { // On error, just yield the un-minified original. callback(null, content); diff --git a/src/static/css/iframe_editor.css b/src/static/css/iframe_editor.css index 5eb94cf79..9aa003aaf 100644 --- a/src/static/css/iframe_editor.css +++ b/src/static/css/iframe_editor.css @@ -2,7 +2,7 @@ Also see inner.css, included only in the inner one. */ -@import url('css/lists_and_indents.css'); +@import url('./lists_and_indents.css'); html { cursor: text; } /* in Safari, produces text cursor for whole doc (inc. below body) */ span { cursor: auto; } diff --git a/src/static/css/timeslider.css b/src/static/css/timeslider.css index c2e8aea7a..0311b10ee 100644 --- a/src/static/css/timeslider.css +++ b/src/static/css/timeslider.css @@ -1,4 +1,4 @@ -@import url('css/lists_and_indents.css'); +@import url('./lists_and_indents.css'); p.pblort { height: 100px; From 7ecf240d9e46ac41259100bf83242ca7b8fc205b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Tue, 13 Sep 2016 07:44:27 +0200 Subject: [PATCH 57/79] Localisation updates from https://translatewiki.net. --- src/locales/dty.json | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/locales/dty.json b/src/locales/dty.json index 4eeef7527..ad8633c21 100644 --- a/src/locales/dty.json +++ b/src/locales/dty.json @@ -60,7 +60,12 @@ "pad.modals.userdup.explanation": "यो प्याड येइ कम्प्युटरमी एक़ है बर्ता ब्राउजर सञ्झ्यालमी खोल्याऽ धेकीँछ।", "pad.modals.userdup.advice": "बरु यो विण्डो प्रयोग अद्दाइ दोसर्‍याँ जोणिय।", "pad.modals.unauth": "अनुमति नदियीयाऽ", + "pad.modals.unauth.explanation": "येइ पन्ना हेरनज्याँ तमरा अधिकार बदेलिया। दोसर्‍याँ जोणिन्या प्रयास अरऽ।", + "pad.modals.looping.explanation": "सिक्रोनाइजेसन सर्भर सित सञ्चार समस्या धेकिन्नाछ़।", + "pad.modals.looping.cause": "शायद तम यक असंगत फायरवाल या प्रोक्सी का माध्यम बठेइ जोणीरैछऽ।", "pad.modals.initsocketfail": "सर्भरमा पहुँच पुर्‍याउन नाइसकियो ।", + "pad.modals.initsocketfail.explanation": "सिङ्क्रोनाइजेसन सर्भर सित जोणीन नाइ सकियो?", + "pad.modals.initsocketfail.cause": "यो शायद तमरा ब्राउजर या इन्टरनेट जडान सित सम्बन्धित समस्याऽ कारणले होइ सकन्छ़।", "pad.modals.slowcommit.explanation": "सर्भर प्रत्युत्तर दिन्नारेन।", "pad.modals.slowcommit.cause": "यो नेटवर्क कनेक्टिविटी सङ्ङ सम्बन्धित समस्याऽ कारण ले होइसकन्छ।", "pad.modals.deleted": "मेटियाको", From 32eb6a2288ae4fc6ba0dc36482ff1fdc8c1b101e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Thu, 15 Sep 2016 08:18:13 +0200 Subject: [PATCH 58/79] Localisation updates from https://translatewiki.net. --- src/locales/dty.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/locales/dty.json b/src/locales/dty.json index ad8633c21..f179edfb1 100644 --- a/src/locales/dty.json +++ b/src/locales/dty.json @@ -68,6 +68,9 @@ "pad.modals.initsocketfail.cause": "यो शायद तमरा ब्राउजर या इन्टरनेट जडान सित सम्बन्धित समस्याऽ कारणले होइ सकन्छ़।", "pad.modals.slowcommit.explanation": "सर्भर प्रत्युत्तर दिन्नारेन।", "pad.modals.slowcommit.cause": "यो नेटवर्क कनेक्टिविटी सङ्ङ सम्बन्धित समस्याऽ कारण ले होइसकन्छ।", + "pad.modals.badChangeset.explanation": "तमले अर्‍याऽ यक सम्पादन समक्रमण सर्भर हताँ अवैध वर्गीकृत अरियाऽ थ्यो।", + "pad.modals.badChangeset.cause": "यो यक गलत सर्भर विन्यास या केइ और अप्रत्याशित चालचलनाऽ कारण़ ले होइसकन्छ। यदि तमलाई यो गल्ती हो भण्ण्या लागन्छ भँण्या, कृपया सेवा व्यवस्थापकलाई सम्पर्क अरऽ। सम्पादन चालु राख्दाइ दोसर्‍याँ जोणिन्या प्रयास अरऽ।", + "pad.modals.corruptPad.explanation": "तमले उपयोग अद्द़ खोज्याऽ प्याड बिगण्योऽ छ।", "pad.modals.deleted": "मेटियाको", "pad.modals.deleted.explanation": "यो प्याड हटाइसक्याको छ ।", "pad.modals.disconnected": "तमरो जडान अवरुद्ध भयो ।", From 97fd1ab2feffa92494d837d2aefd842853d9f816 Mon Sep 17 00:00:00 2001 From: Nobody Really Date: Tue, 20 Sep 2016 09:06:07 +0200 Subject: [PATCH 59/79] Added LibreJS support --- src/node/hooks/express/specialpages.js | 7 +++ src/templates/admin/index.html | 1 + src/templates/admin/plugins-info.html | 1 + src/templates/admin/plugins.html | 1 + src/templates/admin/settings.html | 1 + src/templates/export_html.html | 1 + src/templates/index.html | 34 ++++++------ src/templates/javascript.html | 73 ++++++++++++++++++++++++++ src/templates/pad.html | 5 ++ src/templates/timeslider.html | 4 +- 10 files changed, 111 insertions(+), 17 deletions(-) create mode 100644 src/templates/javascript.html diff --git a/src/node/hooks/express/specialpages.js b/src/node/hooks/express/specialpages.js index e8d7795a6..2840f82ca 100644 --- a/src/node/hooks/express/specialpages.js +++ b/src/node/hooks/express/specialpages.js @@ -16,6 +16,13 @@ exports.expressCreateServer = function (hook_name, args, cb) { res.send(eejs.require("ep_etherpad-lite/templates/index.html")); }); + //serve javascript.html + args.app.get('/javascript', function(req, res) + { + res.send(eejs.require("ep_etherpad-lite/templates/javascript.html")); + }); + + //serve robots.txt args.app.get('/robots.txt', function(req, res) { diff --git a/src/templates/admin/index.html b/src/templates/admin/index.html index f6e9e29ef..45755a490 100644 --- a/src/templates/admin/index.html +++ b/src/templates/admin/index.html @@ -20,5 +20,6 @@ + diff --git a/src/templates/admin/plugins-info.html b/src/templates/admin/plugins-info.html index 5d39c3889..8dd0bf88e 100644 --- a/src/templates/admin/plugins-info.html +++ b/src/templates/admin/plugins-info.html @@ -41,5 +41,6 @@ + diff --git a/src/templates/admin/plugins.html b/src/templates/admin/plugins.html index 71c4dbcc5..0fff78437 100644 --- a/src/templates/admin/plugins.html +++ b/src/templates/admin/plugins.html @@ -112,5 +112,6 @@ + diff --git a/src/templates/admin/settings.html b/src/templates/admin/settings.html index 560ac507c..74f35521a 100644 --- a/src/templates/admin/settings.html +++ b/src/templates/admin/settings.html @@ -50,5 +50,6 @@ + diff --git a/src/templates/export_html.html b/src/templates/export_html.html index b8893b717..b29941c9f 100644 --- a/src/templates/export_html.html +++ b/src/templates/export_html.html @@ -139,5 +139,6 @@ ol > ol > ol > ol > ol > ol > ol > ol > ol > ol > ol > ol > ol > ol > ol > ol { <%- body %> + diff --git a/src/templates/index.html b/src/templates/index.html index 0b0be79b9..70478ea3e 100644 --- a/src/templates/index.html +++ b/src/templates/index.html @@ -29,7 +29,7 @@ */ - + @@ -121,7 +121,7 @@ input[type="text"] { border-radius: 3px; box-sizing: border-box; - -moz-box-sizing: border-box; + -moz-box-sizing: border-box; line-height:36px; /* IE8 hack */ padding: 0px 45px 0 10px; *padding: 0; /* IE7 hack */ @@ -148,22 +148,22 @@ margin-top: 0; } #inner { - width: 95%; + width: 95%; } #label { text-align: center; } } - +
<% e.begin_block("indexWrapper"); %>
- -
- + + +
@@ -171,33 +171,35 @@
- + diff --git a/src/templates/javascript.html b/src/templates/javascript.html new file mode 100644 index 000000000..29031c4b8 --- /dev/null +++ b/src/templates/javascript.html @@ -0,0 +1,73 @@ + + + + JavaScript license information + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
jquery-2.1.1.min.jsExpatjquery.js
html10n.jsExpathtml10n.js
l10n.jsApache-2.0-onlyl10n.js
socket.io.jsExpatsocket.io.js
require-kernel.jsExpatrequire-kernel.js
index.jsApache-2.0-onlyindex.js
timeslider.jsApache-2.0-onlytimeslider.js
pad.jsApache-2.0-onlypad.js
plugins.jsApache-2.0-onlyplugins.js
minify.json.jsExpatminify.json.js
settings.jsApache-2.0-onlysettings.js
jquery.autosize.jsExpatjquery.autosize.js
+ + diff --git a/src/templates/pad.html b/src/templates/pad.html index 767c1ec9b..5f2d0328e 100644 --- a/src/templates/pad.html +++ b/src/templates/pad.html @@ -350,6 +350,7 @@ <% e.begin_block("scripts"); %> @@ -378,6 +380,7 @@ + <% e.end_block(); %> diff --git a/src/templates/timeslider.html b/src/templates/timeslider.html index f52c0c508..f3fde6a4c 100644 --- a/src/templates/timeslider.html +++ b/src/templates/timeslider.html @@ -230,6 +230,7 @@ <% e.end_block(); %> + - From b6e5a2283b8cd6c6d06c6ddf4d8467dc80610242 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Thu, 22 Sep 2016 07:27:50 +0200 Subject: [PATCH 60/79] Localisation updates from https://translatewiki.net. --- src/locales/dty.json | 5 +++++ src/locales/eo.json | 5 +++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/locales/dty.json b/src/locales/dty.json index f179edfb1..c0d439e6a 100644 --- a/src/locales/dty.json +++ b/src/locales/dty.json @@ -71,10 +71,12 @@ "pad.modals.badChangeset.explanation": "तमले अर्‍याऽ यक सम्पादन समक्रमण सर्भर हताँ अवैध वर्गीकृत अरियाऽ थ्यो।", "pad.modals.badChangeset.cause": "यो यक गलत सर्भर विन्यास या केइ और अप्रत्याशित चालचलनाऽ कारण़ ले होइसकन्छ। यदि तमलाई यो गल्ती हो भण्ण्या लागन्छ भँण्या, कृपया सेवा व्यवस्थापकलाई सम्पर्क अरऽ। सम्पादन चालु राख्दाइ दोसर्‍याँ जोणिन्या प्रयास अरऽ।", "pad.modals.corruptPad.explanation": "तमले उपयोग अद्द़ खोज्याऽ प्याड बिगण्योऽ छ।", + "pad.modals.corruptPad.cause": "यो गलत सर्भर विन्यास या केइ और नसोच्याऽ चालचलनले होइसकन्छ। कृपया सेवा व्यवस्थापकलाई सम्पर्क अरऽ।", "pad.modals.deleted": "मेटियाको", "pad.modals.deleted.explanation": "यो प्याड हटाइसक्याको छ ।", "pad.modals.disconnected": "तमरो जडान अवरुद्ध भयो ।", "pad.modals.disconnected.explanation": "तमरो सर्भरसितको जडान अवरुद्ध भयो", + "pad.modals.disconnected.cause": "सर्भर अनुपलब्ध होइसकन्छ। यदि यो हुनोइ रयाबर कृपया सेवा व्यवस्थापकलाई सूचित अरऽ।", "pad.share": "यस प्यडलाई बाड्न्या", "pad.share.readonly": "पड्या मात्तरै", "pad.share.link": "लिङ्क", @@ -117,6 +119,9 @@ "pad.editbar.clearcolors": "सङताइ कागताजमी है लेखक रङ्ङअन साप अद्द्या?", "pad.impexp.importbutton": "ऐलै आयार अरऽ", "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/eo.json b/src/locales/eo.json index c45267282..786d3bbed 100644 --- a/src/locales/eo.json +++ b/src/locales/eo.json @@ -3,7 +3,8 @@ "authors": [ "Eliovir", "Mschmitt", - "Objectivesea" + "Objectivesea", + "Robin van der Vliet" ] }, "index.newPad": "Nova Teksto", @@ -120,7 +121,7 @@ "pad.userlist.approve": "Aprobi", "pad.editbar.clearcolors": "Forigi kolorojn de aŭtoreco en la tuta dokumento?", "pad.impexp.importbutton": "Enporti Nun", - "pad.impexp.importing": "Enportanta...", + "pad.impexp.importing": "Enportante...", "pad.impexp.confirmimport": "Enporti dosieron superskribos la nunan tekston en la redaktilo. Ĉu vi certe volas daŭrigi?", "pad.impexp.convertFailed": "Ni ne kapablis enporti tiun dosieron. Bonvolu uzi alian dokumentformaton aŭ permane kopii kaj alglui.", "pad.impexp.padHasData": "Ni ne kapablis enporti tiun dosieron ĉar la teksto jam estas ŝanĝita. Bonvolu enporti en novan tekston.", From 93ca44f00593c4e9d2bc37a996f264c8a0cd3adf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Tue, 27 Sep 2016 13:58:36 +0200 Subject: [PATCH 61/79] Localisation updates from https://translatewiki.net. --- src/locales/lb.json | 10 ++++++++++ src/locales/sl.json | 9 ++++++--- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/locales/lb.json b/src/locales/lb.json index 99bfe0b51..535d778f2 100644 --- a/src/locales/lb.json +++ b/src/locales/lb.json @@ -8,10 +8,14 @@ }, "index.newPad": "Neie Pad", "index.createOpenPad": "oder maacht ee Pad mat dësem Numm op:", + "pad.toolbar.bold.title": "Fett (Strg-B)", + "pad.toolbar.italic.title": "Schréi (Ctrl+I)", "pad.toolbar.underline.title": "Ënnerstrach (Ctrl+U)", "pad.toolbar.strikethrough.title": "Duerchgestrach (Ctrl+5)", "pad.toolbar.ol.title": "Numeréiert Lëscht (Ctrl+Shift+N)", "pad.toolbar.ul.title": "Net-numeréiert Lëscht (Ctrl+Shift+L)", + "pad.toolbar.indent.title": "Aréckelen (TAB)", + "pad.toolbar.unindent.title": "Erausréckelen (Shift+TAB)", "pad.toolbar.undo.title": "Réckgängeg (Ctrl-Z)", "pad.toolbar.redo.title": "Widderhuelen (Ctrl-Y)", "pad.toolbar.savedRevision.title": "Versioun späicheren", @@ -29,14 +33,19 @@ "pad.settings.language": "Sprooch:", "pad.importExport.import_export": "Import/Export", "pad.importExport.importSuccessful": "Erfollegräich", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", + "pad.importExport.exportplain": "Kloertext", "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (Open Document Format)", "pad.modals.connected": "Verbonnen.", + "pad.modals.userdup": "An enger anerer Fënster opgemaach", "pad.modals.unauth": "Net autoriséiert", "pad.modals.slowcommit.explanation": "De Server äntwert net.", "pad.modals.deleted": "Geläscht.", + "pad.modals.disconnected": "Äre Verbindung ass ofgebrach.", + "pad.modals.disconnected.explanation": "D'Verbindung mam Server ass verluergaang.", "pad.share.readonly": "Nëmme liesen", "pad.share.link": "Link", "pad.chat.loadmessages": "Méi Message lueden", @@ -58,6 +67,7 @@ "timeslider.month.october": "Oktober", "timeslider.month.november": "November", "timeslider.month.december": "Dezember", + "pad.savedrevs.marked": "Dës Versioun ass elo als gespäichert Versioun markéiert", "pad.userlist.entername": "Gitt Ären Numm an", "pad.userlist.guest": "Gaascht", "pad.userlist.approve": "Zoustëmmen", diff --git a/src/locales/sl.json b/src/locales/sl.json index a51cb53d6..5d2dd85ee 100644 --- a/src/locales/sl.json +++ b/src/locales/sl.json @@ -6,7 +6,7 @@ "Skalcaa" ] }, - "index.newPad": "Nova Ploščica", + "index.newPad": "Nov dokument", "index.createOpenPad": "ali pa odpri dokument z imenom:", "pad.toolbar.bold.title": "Krepko (Ctrl-B)", "pad.toolbar.italic.title": "Ležeče (Ctrl-I)", @@ -72,7 +72,7 @@ "pad.modals.slowcommit.cause": "Najverjetneje je prišlo do napake med vzpostavitvijo povezave.", "pad.modals.badChangeset.explanation": "Urejanje, ki ste ga naredili, je sinhronizacijski strežnik označil kot nelegalno.", "pad.modals.badChangeset.cause": "Razlog za to je morda napačna konfiguracija strežnika ali neko drugo nepričakovano vedenje. Prosimo, stopite v stik z upravljavcem storitve, če menite, da gre za napako. Poskusite se ponovno povezati, da nadaljujete z urejanjem.", - "pad.modals.corruptPad.explanation": "Blok, do katerega želite dostopati, je poškodovan.", + "pad.modals.corruptPad.explanation": "Dokument, do katerega želite dostopati, je poškodovan.", "pad.modals.corruptPad.cause": "Razlog za to je morda napačna konfiguracija strežnika ali neko drugo nepričakovano vedenje. Prosimo, stopite v stik z upravljavcem storitve.", "pad.modals.deleted": "Izbrisano.", "pad.modals.deleted.explanation": "Dokument je odstranjen.", @@ -94,6 +94,9 @@ "timeslider.exportCurrent": "Izvozi trenutno različico kot:", "timeslider.version": "Različica {{version}}", "timeslider.saved": "Shranjeno {{day}}.{{month}}.{{year}}", + "timeslider.playPause": "Predvajaj/začasno ustavi vsebino dokumenta", + "timeslider.backRevision": "Pojdi eno redakcijo nazaj v tem dokumentu", + "timeslider.forwardRevision": "Pojdi redakcijo naprej v tem dokumentu", "timeslider.dateformat": "{{day}}.{{month}}.{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Januar", "timeslider.month.february": "Februar", @@ -120,7 +123,7 @@ "pad.impexp.importing": "Poteka uvažanje ...", "pad.impexp.confirmimport": "Uvoz datoteke prepiše obstoječe besedilo dokumenta. Ali ste prepričani, da želite nadaljevati?", "pad.impexp.convertFailed": "Datoteke ni mogoče uvoziti. Uporabiti je treba enega izmed podprtih zapisov dokumentov ali pa vsebino prilepiti ročno.", - "pad.impexp.padHasData": "Nismo mogli uvoziti datoteke, ker ta Ploščica že vsebuje spremembe. Prosimo, uvozite datoteko v novo ploščico", + "pad.impexp.padHasData": "Nismo mogli uvoziti datoteke, ker dokument že vsebuje spremembe. Prosimo, uvozite datoteko v nov dokument", "pad.impexp.uploadFailed": "Nalaganje je spodletelo, poskusite znova.", "pad.impexp.importfailed": "Uvoz je spodletel.", "pad.impexp.copypaste": "Vsebino kopirajte in prilepite.", From 965af5a40ba72cf91734f1f7dfa8634b78c1daa0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Thu, 6 Oct 2016 07:41:01 +0200 Subject: [PATCH 62/79] Localisation updates from https://translatewiki.net. --- src/locales/lb.json | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/locales/lb.json b/src/locales/lb.json index 535d778f2..50cebaf2c 100644 --- a/src/locales/lb.json +++ b/src/locales/lb.json @@ -29,9 +29,14 @@ "pad.permissionDenied": "Dir hutt net déi néideg Rechter fir dëse Pad opzemaachen", "pad.wrongPassword": "Äert Passwuert ass falsch", "pad.settings.myView": "Méng Usiicht", + "pad.settings.linenocheck": "Zeilennummeren", + "pad.settings.rtlcheck": "Inhalt vu riets no lénks liesen?", + "pad.settings.fontType": "Schrëftart:", "pad.settings.fontType.normal": "Normal", + "pad.settings.globalView": "Global Vue", "pad.settings.language": "Sprooch:", "pad.importExport.import_export": "Import/Export", + "pad.importExport.import": "Text-Fichier oder Dokument eroplueden", "pad.importExport.importSuccessful": "Erfollegräich", "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", @@ -42,15 +47,20 @@ "pad.modals.connected": "Verbonnen.", "pad.modals.userdup": "An enger anerer Fënster opgemaach", "pad.modals.unauth": "Net autoriséiert", + "pad.modals.unauth.explanation": "Är Rechter hu geännert während deem Dir dës säit gekuckt hutt. Probéiert fir Iech nei ze connectéieren.", + "pad.modals.looping.explanation": "Et gëtt Kommunikatiounsproblemer mam Synchronisatiouns-Server.", + "pad.modals.initsocketfail": "De Server kann net erreecht ginn.", "pad.modals.slowcommit.explanation": "De Server äntwert net.", "pad.modals.deleted": "Geläscht.", "pad.modals.disconnected": "Äre Verbindung ass ofgebrach.", "pad.modals.disconnected.explanation": "D'Verbindung mam Server ass verluergaang.", "pad.share.readonly": "Nëmme liesen", "pad.share.link": "Link", + "pad.chat": "Chat", "pad.chat.loadmessages": "Méi Message lueden", "timeslider.toolbar.authors": "Auteuren:", "timeslider.toolbar.authorsList": "Keng Auteuren", + "timeslider.toolbar.exportlink.title": "Exportéieren", "timeslider.exportCurrent": "Exportéiert déi aktuell Versioun als:", "timeslider.version": "Versioun {{version}}", "timeslider.saved": "Gespäichert de(n) {{day}} {{month}} {{year}}", @@ -69,8 +79,12 @@ "timeslider.month.december": "Dezember", "pad.savedrevs.marked": "Dës Versioun ass elo als gespäichert Versioun markéiert", "pad.userlist.entername": "Gitt Ären Numm an", + "pad.userlist.unnamed": "anonym", "pad.userlist.guest": "Gaascht", + "pad.userlist.deny": "Refuséieren", "pad.userlist.approve": "Zoustëmmen", "pad.impexp.importbutton": "Elo importéieren", - "pad.impexp.importing": "Importéieren..." + "pad.impexp.importing": "Importéieren...", + "pad.impexp.uploadFailed": "D'Eroplueden huet net funktionéiert, probéiert w.e.g. nach eng Kéier", + "pad.impexp.importfailed": "Den Import huet net funktionéiert" } From 2c69511c621a20ee484d1a5a53cff14b7763c371 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Thu, 13 Oct 2016 08:00:32 +0200 Subject: [PATCH 63/79] Localisation updates from https://translatewiki.net. --- src/locales/ne.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/ne.json b/src/locales/ne.json index 1179c93b5..45a4fafc4 100644 --- a/src/locales/ne.json +++ b/src/locales/ne.json @@ -28,7 +28,7 @@ "pad.colorpicker.cancel": "रद्द", "pad.loading": "लोड हुदैछ...", "pad.passwordRequired": "यो प्यड खोल्न पासवर्ड चाहिन्छ", - "pad.permissionDenied": "तपाईँलाई यस प्याड खोल्न अनुमति छैन", + "pad.permissionDenied": "तपाईंलाई यो प्याड खोल्न अनुमति छैन", "pad.wrongPassword": "तपाईँको पासवर्ड गलत थियो", "pad.settings.padSettings": "प्याड सेटिङ्गहरू", "pad.settings.myView": "मेरो दृष्य", From 7dd934f71481f2f1bd810b55519b238c664a372b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Mon, 17 Oct 2016 20:19:22 +0200 Subject: [PATCH 64/79] Localisation updates from https://translatewiki.net. --- src/locales/ne.json | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/locales/ne.json b/src/locales/ne.json index 45a4fafc4..3e23659a5 100644 --- a/src/locales/ne.json +++ b/src/locales/ne.json @@ -29,7 +29,7 @@ "pad.loading": "लोड हुदैछ...", "pad.passwordRequired": "यो प्यड खोल्न पासवर्ड चाहिन्छ", "pad.permissionDenied": "तपाईंलाई यो प्याड खोल्न अनुमति छैन", - "pad.wrongPassword": "तपाईँको पासवर्ड गलत थियो", + "pad.wrongPassword": "तपाईंको पासवर्ड गलत थियो", "pad.settings.padSettings": "प्याड सेटिङ्गहरू", "pad.settings.myView": "मेरो दृष्य", "pad.settings.stickychat": "पर्दामा सधै च्याट गर्ने", @@ -53,7 +53,7 @@ "pad.importExport.exportpdf": "पिडिएफ", "pad.importExport.exportopen": "ओडिएफ(खुल्ला कागजात ढाँचा)", "pad.modals.connected": "जोडीएको।", - "pad.modals.reconnecting": "तपाईँको प्याडमा पुन: जडान गर्दै", + "pad.modals.reconnecting": "तपाईंको प्याडमा पुन: जडान गर्दै", "pad.modals.forcereconnect": "जडानको लागि जोडगर्ने", "pad.modals.userdup": "अर्को सन्झ्यालमा खोल्ने", "pad.modals.unauth": "अनुमती नदिइएको", @@ -61,8 +61,8 @@ "pad.modals.slowcommit.explanation": "सर्भरसँग सम्पर्क हुने सकेन ।", "pad.modals.deleted": "मेटिएको ।", "pad.modals.deleted.explanation": "यो प्याड हटाइसकेको छ ।", - "pad.modals.disconnected": "तपाईँको जडान अवरुद्ध भयो ।", - "pad.modals.disconnected.explanation": "तपाईँको सर्भरसँगको जडान अवरुद्ध भयो", + "pad.modals.disconnected": "तपाईंको जडान अवरुद्ध भयो ।", + "pad.modals.disconnected.explanation": "तपाईंको सर्भरसँगको जडान अवरुद्ध भयो", "pad.share": "यस प्यडलाई बाड्ने", "pad.share.readonly": "पढ्ने मात्र", "pad.share.link": "लिङ्क", @@ -96,7 +96,7 @@ "timeslider.month.december": "डिसेम्बर", "timeslider.unnamedauthors": "{{num}} unnamed {[plural(num) one: author, other: authors ]}", "pad.savedrevs.marked": "यस संस्करणलाई संग्रहितको रुपमा चिनो लगाइएको छैन", - "pad.userlist.entername": "तपाईँको नाम लेख्नुहोस्", + "pad.userlist.entername": "तपाईंको नाम लेख्नुहोस्", "pad.userlist.unnamed": "नाम नखुलाइएको", "pad.userlist.guest": "पाहुना", "pad.userlist.deny": "अस्वीकार गर्ने", From 223127bf39d2ba431d9c1965a7f2aadadc73d77a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Tue, 1 Nov 2016 07:59:29 +0100 Subject: [PATCH 65/79] Localisation updates from https://translatewiki.net. --- src/locales/ar.json | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/locales/ar.json b/src/locales/ar.json index 4d9eb111a..1b9271d1c 100644 --- a/src/locales/ar.json +++ b/src/locales/ar.json @@ -7,11 +7,12 @@ "Meno25", "Test Create account", "محمد أحمد عبد الفتاح", - "Haytham morsy" + "Haytham morsy", + "ديفيد" ] }, "index.newPad": "باد جديد", - "index.createOpenPad": "أو صنع/فتح باد بوضع إسمه:", + "index.createOpenPad": "أو صنع/فتح باد بوضع اسمه:", "pad.toolbar.bold.title": "سميك (Ctrl-B)", "pad.toolbar.italic.title": "مائل (Ctrl-I)", "pad.toolbar.underline.title": "تسطير (Ctrl-U)", @@ -31,7 +32,7 @@ "pad.toolbar.showusers.title": "عرض المستخدمين على هذا الباد", "pad.colorpicker.save": "تسجيل", "pad.colorpicker.cancel": "إلغاء", - "pad.loading": "جاري التحميل...", + "pad.loading": "جارٍ التحميل...", "pad.noCookie": "الكوكيز غير متاحة. الرجاء السماح بتحميل الكوكيز على متصفحك!", "pad.passwordRequired": "تحتاج إلى كلمة مرور للوصول إلى هذا الباد", "pad.permissionDenied": "ليس لديك إذن لدخول هذا الباد", @@ -64,24 +65,24 @@ "pad.modals.forcereconnect": "فرض إعادة الاتصال", "pad.modals.userdup": "مفتوح في نافذة أخرى", "pad.modals.userdup.explanation": "يبدو أن هذا الباد تم فتحه في أكثر من نافذة متصفح في هذا الحاسوب.", - "pad.modals.userdup.advice": "إعادة الاتصال لإستعمال هذه النافذة بدلاً من الاخرى.", + "pad.modals.userdup.advice": "إعادة الاتصال لاستعمال هذه النافذة بدلاً من الأخرى.", "pad.modals.unauth": "غير مخول", - "pad.modals.unauth.explanation": "لقد تغيرت الأذونات الخاصة بك أثناء عرض هذه الصفحة. حاول إعادة الاتصال.", + "pad.modals.unauth.explanation": "لقد تغيرت الأذونات الخاصة بك أثناء عرض هذه الصفحة. أعد محاولة الاتصال.", "pad.modals.looping.explanation": "هناك مشاكل في الاتصال مع ملقم التزامن.", "pad.modals.looping.cause": "ربما كنت متصلاً من خلال وكيل أو جدار حماية غير متوافق.", "pad.modals.initsocketfail": "لا يمكن الوصول إلى الخادم", "pad.modals.initsocketfail.explanation": "تعذر الاتصال بخادم المزامنة.", - "pad.modals.initsocketfail.cause": "وهذا على الأرجح بسبب مشكلة في المستعرض الخاص بك أو الاتصال بإنترنت.", + "pad.modals.initsocketfail.cause": "هذا على الأرجح بسبب مشكلة في المستعرض الخاص بك أو الاتصال بإنترنت.", "pad.modals.slowcommit.explanation": "الخادم لا يستجيب.", "pad.modals.slowcommit.cause": "يمكن أن يكون هذا بسبب مشاكل في الاتصال بالشبكة.", - "pad.modals.badChangeset.explanation": "لقد صنفت إحدى عمليات التحرير التي قمت بها كعملية غير مسموح بها من قبل ملقم التزامن.", + "pad.modals.badChangeset.explanation": "لقد صُنفَت إحدى عمليات التحرير التي قمت بها كعملية غير مسموح بها من قبل ملقم التزامن.", "pad.modals.badChangeset.cause": "يمكن أن يكون هذا بسبب تكوين ملقم خاطئ أو بسبب سلوك آخر غير متوقع. يرجى الاتصال بمسؤول الخدمة إذا كنت تعتقد بأن هناك خطأ ما. حاول إعادة الاتصال لمتابعة التحرير.", "pad.modals.corruptPad.explanation": "الباد الذي تحاول الوصول إليه تالف.", "pad.modals.corruptPad.cause": "قد يكون هذا بسبب تكوين ملقم خاطئ أو بسبب سلوك آخر غير متوقع. يرجى الاتصال بمسؤول الخدمة.", "pad.modals.deleted": "محذوف.", "pad.modals.deleted.explanation": "تمت إزالة هذا الباد", "pad.modals.disconnected": "لم تعد متصلا.", - "pad.modals.disconnected.explanation": "تم فقدان الإتصال بالخادم", + "pad.modals.disconnected.explanation": "تم فقدان الاتصال بالخادم", "pad.modals.disconnected.cause": "قد يكون الخادم غير متوفر. يرجى إعلام مسؤول الخدمة إذا كان هذا لا يزال يحدث.", "pad.share": "شارك هذه الباد", "pad.share.readonly": "للقراءة فقط", @@ -98,7 +99,7 @@ "timeslider.exportCurrent": "تصدير النسخة الحالية ك:", "timeslider.version": "إصدار {{version}}", "timeslider.saved": "محفوظ {{month}} {{day}}, {{year}}", - "timeslider.playPause": "تشغيل / إيقاف مؤقت محتويات الباد", + "timeslider.playPause": "تشغيل / إيقاف مؤقت لمحتويات الباد", "timeslider.backRevision": "عد إلى مراجعة في هذه الباد", "timeslider.forwardRevision": "انطلق إلى مراجعة في هذه الباد", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", @@ -127,7 +128,7 @@ "pad.impexp.importing": "الاستيراد...", "pad.impexp.confirmimport": "استيراد ملف سيؤدي للكتابة فوق النص الحالي بالباد. هل أنت متأكد من أنك تريد المتابعة؟", "pad.impexp.convertFailed": "لم نتمكن من استيراد هذا الملف. يرجى استخدام تنسيق مستند مختلف، أو النسخ واللصق يدوياً", - "pad.impexp.padHasData": "لا يمكننا استيراد هذا الملف لأن هذه اللوحة تم بالفعل تغييره, الرجاء استيراد لوحة جديد", + "pad.impexp.padHasData": "لا يمكننا استيراد هذا الملف لأن هذا الباد تم بالفعل تغييره; الرجاء استيراد باد جديد", "pad.impexp.uploadFailed": "فشل التحميل، الرجاء المحاولة مرة أخرى", "pad.impexp.importfailed": "فشل الاستيراد", "pad.impexp.copypaste": "الرجاء نسخ/لصق", From 573b55af8b04a5d08eb013e5152c7fae1e33de96 Mon Sep 17 00:00:00 2001 From: Paul Carver Date: Fri, 11 Nov 2016 12:46:40 -0500 Subject: [PATCH 66/79] Correct the spelling of occured to occurred The correct spelling is occurred. See http://www.gingersoftware.com/english-online/spelling-book/misspelling/occurred-occured-ocurred or other dictionary search results. --- settings.json.template | 2 +- src/static/js/admin/plugins.js | 4 ++-- src/static/js/pad_utils.js | 2 +- src/templates/pad.html | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/settings.json.template b/settings.json.template index 418048f66..6af5f78ad 100644 --- a/settings.json.template +++ b/settings.json.template @@ -195,7 +195,7 @@ , "level": "error" // filters out all log messages that have a lower level than "error" , "appender": { "type": "smtp" - , "subject": "An error occured in your EPL instance!" + , "subject": "An error occurred in your EPL instance!" , "recipients": "bar@blurdybloop.com, baz@blurdybloop.com" , "sendInterval": 300 // 60 * 5 = 5 minutes -- will buffer log messages; set to 0 to send a mail for every message , "transport": "SMTP", "SMTP": { // see https://github.com/andris9/Nodemailer#possible-transport-methods diff --git a/src/static/js/admin/plugins.js b/src/static/js/admin/plugins.js index 48d1ab70a..3f88d9b11 100644 --- a/src/static/js/admin/plugins.js +++ b/src/static/js/admin/plugins.js @@ -228,7 +228,7 @@ $(document).ready(function () { if(data.code === "EPEERINVALID"){ alert("This plugin requires that you update Etherpad so it can operate in it's true glory"); } - alert('An error occured while installing '+data.plugin+' \n'+data.error) + alert('An error occurred while installing '+data.plugin+' \n'+data.error) $('#installed-plugins .'+data.plugin).remove() } @@ -241,7 +241,7 @@ $(document).ready(function () { }) socket.on('finished:uninstall', function(data) { - if(data.error) alert('An error occured while uninstalling the '+data.plugin+' \n'+data.error) + if(data.error) alert('An error occurred while uninstalling the '+data.plugin+' \n'+data.error) // remove plugin from installed list $('#installed-plugins .'+data.plugin).remove() diff --git a/src/static/js/pad_utils.js b/src/static/js/pad_utils.js index 5a7700c94..7166e0fb5 100644 --- a/src/static/js/pad_utils.js +++ b/src/static/js/pad_utils.js @@ -520,7 +520,7 @@ function setupGlobalExceptionHandler() { //show javascript errors to the user $("#editorloadingbox").css("padding", "10px"); $("#editorloadingbox").css("padding-top", "45px"); - $("#editorloadingbox").html("
An error occured
The error was reported with the following id: '" + errorId + "'

Please press and hold Ctrl and press F5 to reload this page, if the problem persists please send this error message to your webmaster:
'" + $("#editorloadingbox").html("
An error occurred
The error was reported with the following id: '" + errorId + "'

Please press and hold Ctrl and press F5 to reload this page, if the problem persists please send this error message to your webmaster:
'" + "ErrorId: " + errorId + "
URL: " + window.location.href + "
UserAgent: " + userAgent + "
" + msg + " in " + url + " at line " + linenumber + "'
"); } diff --git a/src/templates/pad.html b/src/templates/pad.html index 271bbb2d5..3d89f9d07 100644 --- a/src/templates/pad.html +++ b/src/templates/pad.html @@ -358,7 +358,7 @@ var originalHandler = window.onerror; window.onerror = function(msg, url, line) { var box = document.getElementById('editorloadingbox'); - box.innerHTML = '

An error occured while loading the pad

' + box.innerHTML = '

An error occurred while loading the pad

' + '

'+msg+' ' + 'in '+ url +' (line '+ line +')

'; // call original error handler From 2341d0980771b4c3d7e2e71a686365992d25e00a Mon Sep 17 00:00:00 2001 From: Luc Didry Date: Wed, 16 Nov 2016 10:35:38 +0100 Subject: [PATCH 67/79] Add undocumented API function restoreRevision to doc This commit is dedicated to Schoumi. Thx for supporting me on Tipeee :-) --- doc/api/http_api.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/doc/api/http_api.md b/doc/api/http_api.md index 8d1b64f1b..93a9b3992 100644 --- a/doc/api/http_api.md +++ b/doc/api/http_api.md @@ -363,6 +363,15 @@ returns an object of diffs from 2 points in a pad * `{"code":0,"message":"ok","data":{"html":"Welcome to Etherpad!

This pad text is synchronized as you type, so that everyone viewing this page sees the same text. This allows you to collaborate seamlessly on documents!

Get involved with Etherpad at http://etherpad.org
aw

","authors":["a.HKIv23mEbachFYfH",""]}}` * `{"code":4,"message":"no or wrong API Key","data":null}` +#### restoreRevision(padId, rev) + * API >= 1.2.11 + +Restores revision from past as new changeset + +*Example returns:* + * {code:0, message:"ok", data:null} + * {code: 1, message:"padID does not exist", data: null} + ### Chat #### getChatHistory(padID, [start, end]) * API >= 1.2.7 From 602fd4629abc45aa94013df9644d681ad088002e Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Thu, 17 Nov 2016 09:50:45 +0100 Subject: [PATCH 68/79] Localisation updates from https://translatewiki.net. --- src/locales/hy.json | 58 +++++++++++++++++++++++++++++++++++++++++++++ src/locales/sq.json | 54 ++++++++++++++++++++--------------------- 2 files changed, 85 insertions(+), 27 deletions(-) create mode 100644 src/locales/hy.json diff --git a/src/locales/hy.json b/src/locales/hy.json new file mode 100644 index 000000000..672905c5a --- /dev/null +++ b/src/locales/hy.json @@ -0,0 +1,58 @@ +{ + "@metadata": { + "authors": [ + "Kareyac" + ] + }, + "pad.toolbar.underline.title": "ընդգծելով (Ctrl-U)", + "pad.toolbar.undo.title": "Չեղարկել (Ctrl-Z)", + "pad.toolbar.redo.title": "Վերադարձնել (Ctrl-Y)", + "pad.toolbar.clearAuthorship.title": "Մաքրել փաստաթղթի գույներ (Ctrl+Shift+C)", + "pad.toolbar.savedRevision.title": "Պահպանել տարբերակը", + "pad.toolbar.settings.title": "Կարգավորումներ", + "pad.toolbar.embed.title": "Կիսվել և ներդնել այդ փաստաթուղթը", + "pad.toolbar.showusers.title": "Ցույց տալ մասնակիցներին այս փաստաթղթում", + "pad.colorpicker.save": "Պահպանել", + "pad.colorpicker.cancel": "Չեղարկել", + "pad.loading": "Բեռնվում է…", + "pad.wrongPassword": "Սխալ գաղտնաբառ", + "pad.settings.myView": "Իմ տեսարան", + "pad.settings.rtlcheck": "Կարդալ բովանդակությունը աջից ձախ", + "pad.settings.fontType": "Տառատեսակի տեսակը", + "pad.settings.globalView": "Ընդհանուր տեսքը", + "pad.settings.language": "Լեզու", + "pad.importExport.import_export": "Ներմուծում/արտահանում", + "pad.importExport.import": "Բեռնել ցանկացած տեքստային ֆայլը կամ փաստաթուղթ", + "pad.importExport.importSuccessful": "Հաջողություն", + "pad.importExport.export": "Արտահանել ընթացիկ փաստաթուղթ է որպես", + "pad.importExport.exportplain": "Պարզ տեքստ", + "pad.importExport.exportpdf": "PDF", + "pad.modals.connected": "Կապված է", + "pad.modals.forcereconnect": "Հարկադիր վերամիավորել", + "pad.modals.userdup": "Բաց է մյուս պատուհանում", + "pad.modals.initsocketfail": "Սերվերը անհասանելի է ։", + "pad.modals.slowcommit.explanation": "Սերվերը չի պատասխանում։", + "pad.modals.deleted": "Ջնջված է", + "pad.share.readonly": "Միայն կարդալու", + "pad.share.link": "Հղում", + "timeslider.toolbar.authors": "Հեղինակներ", + "timeslider.month.january": "Հունվար", + "timeslider.month.february": "Փետրվար", + "timeslider.month.march": "Մարտ", + "timeslider.month.april": "Ապրիլ", + "timeslider.month.may": "Մայիս", + "timeslider.month.june": "Հունիս", + "timeslider.month.july": "Հուլիս", + "timeslider.month.august": "Օգոստոս", + "timeslider.month.september": "Սեպտեմբեր", + "timeslider.month.october": "Հոկտեմբեր", + "timeslider.month.november": "Նոյեմբեր", + "timeslider.month.december": "Դեկտեմբեր", + "pad.userlist.entername": "Մուտքագրեք ձեր անունը", + "pad.userlist.unnamed": "անանուն", + "pad.userlist.guest": "Հյուր", + "pad.userlist.deny": "Մերժել", + "pad.userlist.approve": "Հաստատել", + "pad.impexp.importbutton": "Ներմուծել հիմա", + "pad.impexp.copypaste": "Խնդրում ենք պատճենել" +} diff --git a/src/locales/sq.json b/src/locales/sq.json index 24494f797..d6d959ee6 100644 --- a/src/locales/sq.json +++ b/src/locales/sq.json @@ -5,44 +5,44 @@ "Kosovastar" ] }, - "index.newPad": "Bllok i ri", - "index.createOpenPad": "ose krijoni/hapni një bllok me emrin:", + "index.newPad": "Bllok i Ri", + "index.createOpenPad": "ose krijoni/hapni një Bllok me emrin:", "pad.toolbar.bold.title": "Të trasha (Ctrl-B)", "pad.toolbar.italic.title": "Të pjerrëta (Ctrl-I)", "pad.toolbar.underline.title": "Të nënvizuara (Ctrl-U)", - "pad.toolbar.strikethrough.title": "Mbivijëzuar (Ctrl+5)", + "pad.toolbar.strikethrough.title": "Hequr vije (Ctrl+5)", "pad.toolbar.ol.title": "Listë e renditur (Ctrl+Shift+N)", "pad.toolbar.ul.title": "Listë e parenditur (Ctrl+Shift+L)", - "pad.toolbar.indent.title": "E dhëmbëzuar (TAB)", + "pad.toolbar.indent.title": "Brendazi (TAB)", "pad.toolbar.unindent.title": "Jashtazi (Shift+TAB)", "pad.toolbar.undo.title": "Zhbëje (Ctrl-Z)", "pad.toolbar.redo.title": "Ribëje (Ctrl-Y)", - "pad.toolbar.clearAuthorship.title": "Hiqju Ngjyra Autorësish (Ctrl+Shift+C)", + "pad.toolbar.clearAuthorship.title": "Hiqu Ngjyra Autorësish (Ctrl+Shift+C)", "pad.toolbar.import_export.title": "Importoni/Eksportoni nga/në formate të tjera kartelash", "pad.toolbar.timeslider.title": "Rrjedha kohore", - "pad.toolbar.savedRevision.title": "Ruaje rishikimin", + "pad.toolbar.savedRevision.title": "Ruaje Rishikimin", "pad.toolbar.settings.title": "Rregullime", - "pad.toolbar.embed.title": "Ndajeni me të tjerët dhe trupëzojeni këtë bllok", + "pad.toolbar.embed.title": "Ndajeni me të tjerët dhe Trupëzojeni këtë bllok", "pad.toolbar.showusers.title": "Shfaq përdoruesit në këtë bllok", "pad.colorpicker.save": "Ruaje", "pad.colorpicker.cancel": "Anuloje", "pad.loading": "Po ngarkohet…", "pad.noCookie": "S’u gjet dot cookie. Ju lutemi, lejoni cookie-t te shfletuesi juaj!", "pad.passwordRequired": "Ju duhet një fjalëkalim që të mund të përdorni këtë bllok", - "pad.permissionDenied": "Ju nuk keni leje t'i qaseni këtij blloku", + "pad.permissionDenied": "S’keni leje të hyni në këtë bllok", "pad.wrongPassword": "Fjalëkalimi juaj qe gabim", - "pad.settings.padSettings": "Rregullime blloku", + "pad.settings.padSettings": "Rregullime Blloku", "pad.settings.myView": "Pamja ime", "pad.settings.stickychat": "Fjalosje përherë në ekran", - "pad.settings.chatandusers": "Shfaq fjalosje dhe përdorues", + "pad.settings.chatandusers": "Shfaq Fjalosje dhe Përdorues", "pad.settings.colorcheck": "Ngjyra autorësish", "pad.settings.linenocheck": "Numra rreshtash", "pad.settings.rtlcheck": "Të lexohet lënda nga e djathta në të majtë?", "pad.settings.fontType": "Lloj shkronjash:", "pad.settings.fontType.normal": "Normale", "pad.settings.fontType.monospaced": "Monospace", - "pad.settings.globalView": "Pamje e përgjithshme", - "pad.settings.language": "Gjuha:", + "pad.settings.globalView": "Pamje e Përgjithshme", + "pad.settings.language": "Gjuhë:", "pad.importExport.import_export": "Import/Eksport", "pad.importExport.import": "Ngarkoni cilëndo kartelë teksti ose dokument", "pad.importExport.importSuccessful": "Me sukses!", @@ -55,7 +55,7 @@ "pad.importExport.exportopen": "ODF (Open Document Format)", "pad.importExport.abiword.innerHTML": "Mund të importoni vetëm prej formati tekst i thjeshtë ose html. Për veçori më të thelluara importimi, ju lutemi, instaloni Abiword-in.", "pad.modals.connected": "I lidhur.", - "pad.modals.reconnecting": "Po rilidheni te blloku juaj..", + "pad.modals.reconnecting": "Po rilidheni te blloku juaj…", "pad.modals.forcereconnect": "Rilidhje e detyruar", "pad.modals.userdup": "Hapur në një tjetër dritare", "pad.modals.userdup.explanation": "Ky bllok duket se gjendet i hapur në më shumë se një dritare shfletuesi në këtë kompjuter.", @@ -64,8 +64,8 @@ "pad.modals.unauth.explanation": "Lejet tuaja ndryshuan teksa shihnit këtë dritare. Provoni të rilidheni.", "pad.modals.looping.explanation": "Ka probleme komunikimi me shërbyesin e njëkohësimit.", "pad.modals.looping.cause": "Ndoshta jeni lidhur përmes një firewall-i ose ndërmjetësi të papërputhshëm.", - "pad.modals.initsocketfail": "Shërbyesi (serveri) është i pakapshëm.", - "pad.modals.initsocketfail.explanation": "Nuk u lidh dot te shërbyesi (serveri) i sinkronizimit.", + "pad.modals.initsocketfail": "Shërbyesi është i pakapshëm.", + "pad.modals.initsocketfail.explanation": "S’u lidh dot te shërbyesi i njëkohësimit.", "pad.modals.initsocketfail.cause": "Ka gjasa që kjo vjen për shkak të një problemi me shfletuesin tuaj ose lidhjen tuaj në internet.", "pad.modals.slowcommit.explanation": "Shërbyesi nuk po përgjigjet.", "pad.modals.slowcommit.cause": "Kjo mund të vijë për shkak problemesh lidhjeje me rrjetin.", @@ -88,15 +88,15 @@ "timeslider.pageTitle": "Rrjedhë kohore e {{appTitle}}", "timeslider.toolbar.returnbutton": "Rikthehuni te blloku", "timeslider.toolbar.authors": "Autorë:", - "timeslider.toolbar.authorsList": "Nuk ka autorë", - "timeslider.toolbar.exportlink.title": "Eksportoni", + "timeslider.toolbar.authorsList": "S’ka Autorë", + "timeslider.toolbar.exportlink.title": "Eksportoje", "timeslider.exportCurrent": "Eksportojeni versionin e tanishëm si:", "timeslider.version": "Versioni {{version}}", - "timeslider.saved": "Ruajtur më {{month}} {{day}}, {{year}}", - "timeslider.playPause": "Riluaj / Pusho përmbajtjet e bllokut", - "timeslider.backRevision": "Kalo një rishikim mbrapsht te ky bllok", - "timeslider.forwardRevision": "Kalo një rishikim përpara në këtë bllok", - "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", + "timeslider.saved": "Ruajtur më {{day}} {{month}}, {{year}}", + "timeslider.playPause": "Luaj / Pusho Lëndë Blloku", + "timeslider.backRevision": "Kalo një rishikim mbrapsht në këtë Bllok", + "timeslider.forwardRevision": "Kalo një rishikim përpara në këtë Bllok", + "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Janar", "timeslider.month.february": "Shkurt", "timeslider.month.march": "Mars", @@ -109,20 +109,20 @@ "timeslider.month.october": "Tetor", "timeslider.month.november": "Nëntor", "timeslider.month.december": "Dhjetor", - "timeslider.unnamedauthors": "{{num}} i paemërt {[plural(num) një: autor, tjetër: autorë ]}", + "timeslider.unnamedauthors": "{{num}} i paemër {[plural(num) një: autor, tjetër:{{num}} autorë ]}", "pad.savedrevs.marked": "Ky rishikim tani është shënuar si rishikim i ruajtur", - "pad.savedrevs.timeslider": "Rishikimet e ruajtura mund t’i shihni duke vizituar rrjedhjen kohore", + "pad.savedrevs.timeslider": "Rishikimet e ruajtura mund t’i shihni duke vizituar rrjedhën kohore", "pad.userlist.entername": "Jepni emrin tuaj", "pad.userlist.unnamed": "pa emër", "pad.userlist.guest": "Vizitor", - "pad.userlist.deny": "Refuzo", + "pad.userlist.deny": "Hidhe poshtë", "pad.userlist.approve": "Miratoje", "pad.editbar.clearcolors": "Të hiqen ngjyra autorësish në krejt dokumentin?", - "pad.impexp.importbutton": "Importoje tani", + "pad.impexp.importbutton": "Importoje Tani", "pad.impexp.importing": "Po importohet…", "pad.impexp.confirmimport": "Importimi i një kartele do të mbishkruajë tekstin e tanishëm të bllokut. Jeni i sigurt se doni të vazhdohet?", "pad.impexp.convertFailed": "Nuk qemë në gjendje ta importonim këtë kartelë. Ju lutemi, përdorni një format tjetër dokumentesh ose kopjojeni dhe hidheni dorazi", - "pad.impexp.padHasData": "Ne nuk ishim në gjendje për të importuar këtë skedë, sepse ky bllok tashmë ka pasur ndryshime, ju lutem importojeni tek një bllok i ri", + "pad.impexp.padHasData": "S’qemë në gjendje të importojmë këtë kartelë, ngaqë ky Bllok kish tashmë ndryshime, ju lutemi, importojeni tek një bllok i ri", "pad.impexp.uploadFailed": "Ngarkimi dështoi, ju lutemi, riprovoni", "pad.impexp.importfailed": "Importimi dështoi", "pad.impexp.copypaste": "Ju lutemi, kopjojeni dhe ngjiteni", From 00c9caf7a3ebbc6824a65a2b86fd0cc8391ecb9f Mon Sep 17 00:00:00 2001 From: Stefan Date: Sun, 20 Nov 2016 11:28:17 +0100 Subject: [PATCH 69/79] Updated npm to 4.0.2 and removed recursive searching for ep-plugins --- src/package.json | 2 +- src/static/js/pluginfw/plugins.js | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/package.json b/src/package.json index bdbf35c24..36f5c61f8 100644 --- a/src/package.json +++ b/src/package.json @@ -28,7 +28,7 @@ "log4js" : "0.6.35", "cheerio" : "0.20.0", "async-stacktrace" : "0.0.2", - "npm" : "2.7.6", + "npm" : "4.0.2", "ejs" : "2.4.1", "graceful-fs" : "4.1.3", "slide" : "1.1.6", diff --git a/src/static/js/pluginfw/plugins.js b/src/static/js/pluginfw/plugins.js index dfdf941e9..0d0fa1ed5 100644 --- a/src/static/js/pluginfw/plugins.js +++ b/src/static/js/pluginfw/plugins.js @@ -117,13 +117,14 @@ exports.getPackages = function (cb) { delete packages[name].parent; } - if (deps[name].dependencies !== undefined) flatten(deps[name].dependencies); + // I don't think we need recursion + //if (deps[name].dependencies !== undefined) flatten(deps[name].dependencies); }); } var tmp = {}; tmp[data.name] = data; - flatten(tmp); + flatten(tmp[undefined].dependencies); cb(null, packages); }); }; From 39a3bedb7bd6c71bbdcb052b03701611dfe514dd Mon Sep 17 00:00:00 2001 From: Stefan Date: Sun, 20 Nov 2016 12:27:27 +0100 Subject: [PATCH 70/79] Updated option parameters for socket.io to work with latest version --- src/static/js/pad.js | 33 ++++++++++----------------------- 1 file changed, 10 insertions(+), 23 deletions(-) diff --git a/src/static/js/pad.js b/src/static/js/pad.js index f8ff85780..a9eaf7d29 100644 --- a/src/static/js/pad.js +++ b/src/static/js/pad.js @@ -231,40 +231,27 @@ function handshake() // Allow deployers to host Etherpad on a non-root path 'path': exports.baseURL + "socket.io", 'resource': resource, - 'max reconnection attempts': 3, - 'sync disconnect on unload' : false + 'reconnectionAttempts': 5, + 'reconnection' : true, + 'reconnectionDelay' : 1000, + 'reconnectionDelayMax' : 5000 }); - var disconnectTimeout; - socket.once('connect', function () { sendClientReady(false); }); socket.on('reconnect', function () { - //reconnect is before the timeout, lets stop the timeout - if(disconnectTimeout) - { - clearTimeout(disconnectTimeout); - } - pad.collabClient.setChannelState("CONNECTED"); pad.sendClientReady(true); }); - socket.on('disconnect', function (reason) { - if(reason == "booted"){ - pad.collabClient.setChannelState("DISCONNECTED"); - } else { - function disconnectEvent() - { - pad.collabClient.setChannelState("DISCONNECTED", "reconnect_timeout"); - } - - pad.collabClient.setChannelState("RECONNECTING"); - - disconnectTimeout = setTimeout(disconnectEvent, 20000); - } + socket.on('reconnecting', function() { + pad.collabClient.setChannelState("RECONNECTING"); + }); + + socket.on('reconnect_failed', function(error) { + pad.collabClient.setChannelState("DISCONNECTED", "reconnect_timeout"); }); var initalized = false; From d1d2e462d04e7c5722375485a9b19aca1541a9c0 Mon Sep 17 00:00:00 2001 From: Stefan Date: Sun, 20 Nov 2016 12:32:36 +0100 Subject: [PATCH 71/79] Updated node for windows build to version 6.9.1 --- bin/buildForWindows.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/buildForWindows.sh b/bin/buildForWindows.sh index 8e921d84b..5ba4dd753 100755 --- a/bin/buildForWindows.sh +++ b/bin/buildForWindows.sh @@ -1,6 +1,6 @@ #!/bin/sh -NODE_VERSION="4.4.3" +NODE_VERSION="6.9.1" #Move to the folder where ep-lite is installed cd `dirname $0` From 352cec1811252a730199253a89cba71cb71aa390 Mon Sep 17 00:00:00 2001 From: Stefan Date: Sun, 20 Nov 2016 12:44:59 +0100 Subject: [PATCH 72/79] Updated socket.io to 1.6.0 --- src/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/package.json b/src/package.json index bdbf35c24..f8d3cf863 100644 --- a/src/package.json +++ b/src/package.json @@ -16,7 +16,7 @@ "request" : "2.55.0", "etherpad-require-kernel" : "1.0.9", "resolve" : "1.1.7", - "socket.io" : "1.4.5", + "socket.io" : "1.6.0", "ueberdb2" : "0.3.0", "express" : "4.13.4", "express-session" : "1.13.0", From b41b4726d66e5c7f64900a122fa7752206344398 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Thu, 24 Nov 2016 08:24:37 +0100 Subject: [PATCH 73/79] Localisation updates from https://translatewiki.net. --- src/locales/azb.json | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/locales/azb.json b/src/locales/azb.json index 15d2e14b2..92b6fa92c 100644 --- a/src/locales/azb.json +++ b/src/locales/azb.json @@ -16,7 +16,7 @@ "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.indent.title": "ایچری باتما (TAB)", "pad.toolbar.unindent.title": "ائشیگه چیخدیغی (Shift+TAB)", "pad.toolbar.undo.title": "باطل ائتمک", "pad.toolbar.redo.title": "یئنی دن", @@ -30,6 +30,7 @@ "pad.colorpicker.save": "ذخیره ائت", "pad.colorpicker.cancel": "وازگئچ", "pad.loading": "یوکلنیر...", + "pad.noCookie": "کوکی تاپیلمادی. لوطفن براوزرینیزده کوکیلره ایجازه وئرین!", "pad.passwordRequired": "بو نوت دفترچه سینه ال تاپماق اوچون بیر رمزه احتیاجینیز واردیر.", "pad.permissionDenied": "بو نوت دفترچه سینه ال تاپماق اوچون ایجازه نیز یوخدور.", "pad.wrongPassword": "سیزین رمزینیز دوز دئییل", @@ -77,11 +78,13 @@ "pad.share.emebdcode": "یۇآرالی یئرلشدیرمک", "pad.chat": "چت", "pad.chat.title": "بو یادداشت دفترچه‌سینه چتی آچ.", + "pad.chat.loadmessages": "داها آرتیق پیام یوکله", "timeslider.pageTitle": "{{appTitle}}زمان اسلایدری", "timeslider.toolbar.returnbutton": "یادداشت دفترچه‌سینه قاییت.", "timeslider.toolbar.authors": "یازیچیلار", "timeslider.toolbar.authorsList": "یازیچی‌سیز", "timeslider.toolbar.exportlink.title": "ائشیگه آپارماق", + "timeslider.exportCurrent": "موجود نوسخه نی بو عونوانلا ائشیگه چیخارت:", "timeslider.version": "{{version}} ورژنی", "timeslider.month.january": "ژانویه", "timeslider.month.february": "فوریه", @@ -100,5 +103,8 @@ "pad.userlist.guest": "قوْناق", "pad.userlist.deny": "دانماق", "pad.userlist.approve": "اوْنایلا", - "pad.impexp.importing": "ایچری گتیریلیر..." + "pad.impexp.importbutton": "ایندی ایچری گتیر", + "pad.impexp.importing": "ایچری گتیریلیر...", + "pad.impexp.importfailed": "ایچری گتیرمه اولونمادی", + "pad.impexp.copypaste": "لوطفن کوپی ائدیب، یاپیشدیرین" } From d13a28a1eae95e08512699f02e866cc544c96829 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Thu, 15 Dec 2016 07:31:34 +0100 Subject: [PATCH 74/79] Localisation updates from https://translatewiki.net. --- src/locales/azb.json | 1 + 1 file changed, 1 insertion(+) diff --git a/src/locales/azb.json b/src/locales/azb.json index 92b6fa92c..f8d8f93b8 100644 --- a/src/locales/azb.json +++ b/src/locales/azb.json @@ -105,6 +105,7 @@ "pad.userlist.approve": "اوْنایلا", "pad.impexp.importbutton": "ایندی ایچری گتیر", "pad.impexp.importing": "ایچری گتیریلیر...", + "pad.impexp.uploadFailed": "آپلود اولونمادی، یئنه چالیشین", "pad.impexp.importfailed": "ایچری گتیرمه اولونمادی", "pad.impexp.copypaste": "لوطفن کوپی ائدیب، یاپیشدیرین" } From db94ce9413f0904b8e82d92cf9940741e2dc3b46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Mon, 19 Dec 2016 07:36:35 +0100 Subject: [PATCH 75/79] Localisation updates from https://translatewiki.net. --- src/locales/az.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/locales/az.json b/src/locales/az.json index e27beaf81..48f0f8412 100644 --- a/src/locales/az.json +++ b/src/locales/az.json @@ -97,6 +97,8 @@ "timeslider.version": "Versiya {{version}}", "timeslider.saved": "Saxlanıldı {{day}} {{month}}, {{year}}", "timeslider.playPause": "Geri oxutma / Lövhə Məzmunlarını Dayandır", + "timeslider.backRevision": "Sənədin bundan əvvəlki bir versiyasına qayıtmaq", + "timeslider.forwardRevision": "Sənədin bundan sonrakı bir versiyasına qayıtmaq", "timeslider.dateformat": "{{day}} {{month}}, {{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Yanvar", "timeslider.month.february": "Fevral", From 8084400e13e561813aed3759fd16e4567d3bdb39 Mon Sep 17 00:00:00 2001 From: Stefan Date: Tue, 20 Dec 2016 21:57:01 +0100 Subject: [PATCH 76/79] Try to init cookies before testing if it exists --- src/static/js/pad.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/static/js/pad.js b/src/static/js/pad.js index f66426542..c967e4615 100644 --- a/src/static/js/pad.js +++ b/src/static/js/pad.js @@ -452,6 +452,7 @@ var pad = { // To use etherpad you have to allow cookies. // This will check if the prefs-cookie is set. // Otherwise it shows up a message to the user. + padcookie.init(); if (!readCookie("prefs")) { $('#loading').hide(); From be9ff4a0de3cb06a00bf2d6cb9900212c61a0b33 Mon Sep 17 00:00:00 2001 From: Stefan Date: Thu, 22 Dec 2016 23:04:06 +0100 Subject: [PATCH 77/79] Fixed crash on invalid export url --- src/node/handler/ExportHandler.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/node/handler/ExportHandler.js b/src/node/handler/ExportHandler.js index fe7ab3db1..678519fbc 100644 --- a/src/node/handler/ExportHandler.js +++ b/src/node/handler/ExportHandler.js @@ -78,8 +78,9 @@ exports.doExport = function(req, res, padId, type) { exporttxt.getPadTXTDocument(padId, req.params.rev, function(err, txt) { - if(ERR(err)) return; - res.send(txt); + if(!err) { + res.send(txt); + } }); } else From caabb4d8f71a79d2af3cef0760740cfe54dea750 Mon Sep 17 00:00:00 2001 From: Stefan Date: Thu, 22 Dec 2016 23:15:49 +0100 Subject: [PATCH 78/79] Update nodejs for windows to 6.9.2 --- bin/buildForWindows.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/buildForWindows.sh b/bin/buildForWindows.sh index 5ba4dd753..fddb96a1f 100755 --- a/bin/buildForWindows.sh +++ b/bin/buildForWindows.sh @@ -1,6 +1,6 @@ #!/bin/sh -NODE_VERSION="6.9.1" +NODE_VERSION="6.9.2" #Move to the folder where ep-lite is installed cd `dirname $0` From 6dc808ad5483f616afcd64e5058ef0e69bb0c9bd Mon Sep 17 00:00:00 2001 From: Stefan Date: Fri, 23 Dec 2016 21:59:57 +0100 Subject: [PATCH 79/79] Release version 1.6.1 --- bin/createRelease.sh | 176 +++++++++++++++++++++++++++++++++++++++++++ src/package.json | 2 +- 2 files changed, 177 insertions(+), 1 deletion(-) create mode 100755 bin/createRelease.sh diff --git a/bin/createRelease.sh b/bin/createRelease.sh new file mode 100755 index 000000000..435ec3466 --- /dev/null +++ b/bin/createRelease.sh @@ -0,0 +1,176 @@ +#!/bin/bash +# +# This script is used to publish a new release/version of etherpad on github +# +# Work that is done by this script: +# ETHER_REPO: +# - Add text to CHANGELOG.md +# - Replace version of etherpad in src/package.json +# - Create a release branch and push it to github +# - Merges this release branch into master branch +# - Creating the windows build and the docs +# ETHER_WEB_REPO: +# - Creating a new branch with the docs and the windows build +# - Replacing the version numbers in the index.html +# - Push this branch and merge it to master +# ETHER_REPO: +# - Create a new release on github + +ETHER_REPO="https://github.com/ether/etherpad-lite.git" +ETHER_WEB_REPO="https://github.com/ether/ether.github.com.git" +TMP_DIR="/tmp/" + +echo "WARNING: You can only run this script if your github api token is allowed to create and merge branches on $ETHER_REPO and $ETHER_WEB_REPO." +echo "This script automatically changes the version number in package.json and adds a text to CHANGELOG.md." +echo "When you use this script you should be in the branch that you want to release (develop probably) on latest version. Any changes that are currently not commited will be commited." +echo "-----" + +# get the latest version +LATEST_GIT_TAG=$(git tag | tail -n 1) + +# current environment +echo "Current environment: " +echo "- branch: $(git branch | grep '* ')" +echo "- last commit date: $(git show --quiet --pretty=format:%ad)" +echo "- current version: $LATEST_GIT_TAG" +echo "- temp dir: $TMP_DIR" + +# get new version number +# format: x.x.x +echo -n "Enter new version (x.x.x): " +read VERSION + +# get the message for the changelogs +read -p "Enter new changelog entries (press enter): " +tmp=$(mktemp) +"${EDITOR:-vi}" $tmp +changelogText=$(<$tmp) +echo "$changelogText" +rm $tmp + +if [ "$changelogText" != "" ]; then + changelogText="# $VERSION\n$changelogText" +fi + +# get the token for the github api +echo -n "Enter your github api token: " +read API_TOKEN + +function check_api_token { + echo "Checking if github api token is valid..." + CURL_RESPONSE=$(curl --silent -i https://api.github.com/user?access_token=$API_TOKEN | iconv -f utf8) + HTTP_STATUS=$(echo $CURL_RESPONSE | head -1 | sed -r 's/.* ([0-9]{3}) .*/\1/') + [[ $HTTP_STATUS != "200" ]] && echo "Aborting: Invalid github api token" && exit 1 +} + +function modify_files { + # Add changelog text to first line of CHANGELOG.md + sed -i "1s/^/${changelogText}\n/" CHANGELOG.md + # Replace version number of etherpad in package.json + sed -i -r "s/(\"version\"[ ]*: \").*(\")/\1$VERSION\2/" src/package.json +} + +function create_release_branch { + echo "Creating new release branch..." + git rev-parse --verify release/$VERSION 2>/dev/null + if [ $? == 0 ]; then + echo "Aborting: Release branch already present" + exit 1 + fi + git checkout -b release/$VERSION + [[ $? != 0 ]] && echo "Aborting: Error creating relase branch" && exit 1 + + echo "Commiting CHANGELOG.md and package.json" + git add CHANGELOG.md + git add src/package.json + git commit -m "Release version $VERSION" + + echo "Pushing release branch to github..." + git push -u $ETHER_REPO release/$VERSION + [[ $? != 0 ]] && echo "Aborting: Error pushing release branch to github" && exit 1 +} + +function merge_release_branch { + echo "Merging release to master branch on github..." + API_JSON=$(printf '{"base": "master","head": "release/%s","commit_message": "Merge new release into master branch!"}' $VERSION) + CURL_RESPONSE=$(curl --silent -i -N --data "$API_JSON" https://api.github.com/repos/ether/etherpad-lite/merges?access_token=$API_TOKEN | iconv -f utf8) + echo $CURL_RESPONSE + HTTP_STATUS=$(echo $CURL_RESPONSE | head -1 | sed -r 's/.* ([0-9]{3}) .*/\1/') + [[ $HTTP_STATUS != "200" ]] && echo "Aborting: Error merging release branch on github" && exit 1 +} + +function create_builds { + echo "Cloning etherpad-lite repo and ether.github.com repo..." + cd $TMP_DIR + rm -rf etherpad-lite ether.github.com + git clone $ETHER_REPO --branch master + git clone $ETHER_WEB_REPO + echo "Creating windows build..." + cd etherpad-lite + bin/buildForWindows.sh + [[ $? != 0 ]] && echo "Aborting: Error creating build for windows" && exit 1 + echo "Creating docs..." + make docs + [[ $? != 0 ]] && echo "Aborting: Error generating docs" && exit 1 +} + +function push_builds { + cd $TMP_DIR/etherpad-lite/ + echo "Copying windows build and docs to website repo..." + GIT_SHA=$(git rev-parse HEAD | cut -c1-10) + mv etherpad-lite-win.zip $TMP_DIR/ether.github.com/downloads/etherpad-lite-win-$VERSION-$GIT_SHA.zip + + mv out/doc $TMP_DIR/ether.github.com/doc/v$VERSION + + cd $TMP_DIR/ether.github.com/ + sed -i "s/etherpad-lite-win.*\.zip/etherpad-lite-win-$VERSION-$GIT_SHA.zip/" index.html + sed -i "s/$LATEST_GIT_TAG/$VERSION/g" index.html + git checkout -b release_$VERSION + [[ $? != 0 ]] && echo "Aborting: Error creating new release branch" && exit 1 + git add doc/ + git add downloads/ + git commit -a -m "Release version $VERSION" + git push -u $ETHER_WEB_REPO release_$VERSION + [[ $? != 0 ]] && echo "Aborting: Error pushing release branch to github" && exit 1 +} + +function merge_web_branch { + echo "Merging release to master branch on github..." + API_JSON=$(printf '{"base": "master","head": "release_%s","commit_message": "Release version %s"}' $VERSION $VERSION) + CURL_RESPONSE=$(curl --silent -i -N --data "$API_JSON" https://api.github.com/repos/ether/ether.github.com/merges?access_token=$API_TOKEN | iconv -f utf8) + echo $CURL_RESPONSE + HTTP_STATUS=$(echo $CURL_RESPONSE | head -1 | sed -r 's/.* ([0-9]{3}) .*/\1/') + [[ $HTTP_STATUS != "200" ]] && echo "Aborting: Error merging release branch" && exit 1 +} + +function publish_release { + echo -n "Do you want to publish a new release on github (y/n)? " + read PUBLISH_RELEASE + if [ $PUBLISH_RELEASE = "y" ]; then + # create a new release on github + API_JSON=$(printf '{"tag_name": "%s","target_commitish": "master","name": "Release %s","body": "%s","draft": false,"prerelease": false}' $VERSION $VERSION $changelogText) + CURL_RESPONSE=$(curl --silent -i -N --data "$API_JSON" https://api.github.com/repos/ether/etherpad-lite/releases?access_token=$API_TOKEN | iconv -f utf8) + HTTP_STATUS=$(echo $CURL_RESPONSE | head -1 | sed -r 's/.* ([0-9]{3}) .*/\1/') + [[ $HTTP_STATUS != "201" ]] && echo "Aborting: Error publishing release on github" && exit 1 + else + echo "No release published on github!" + fi +} + +function todo_notification { + echo "Release procedure was successful, but you have to do some steps manually:" + echo "- Update the wiki at https://github.com/ether/etherpad-lite/wiki" + echo "- Create a pull request on github to merge the master branch back to develop" + echo "- Announce the new release on the mailing list, blog.etherpad.org and Twitter" +} + +# call functions +check_api_token +modify_files +create_release_branch +merge_release_branch +create_builds +push_builds +merge_web_branch +publish_release +todo_notification diff --git a/src/package.json b/src/package.json index 73020b2d6..ca86258f5 100644 --- a/src/package.json +++ b/src/package.json @@ -55,6 +55,6 @@ "repository" : { "type" : "git", "url" : "http://github.com/ether/etherpad-lite.git" }, - "version" : "1.6.0", + "version" : "1.6.1", "license" : "Apache-2.0" }