From 008d4e653c8075299444f39f1376e12571ae15fb Mon Sep 17 00:00:00 2001 From: Xavid Date: Sat, 11 Jul 2015 11:32:19 -0400 Subject: [PATCH 001/118] Add a aceSelectionChanged hook to allow plugins to react when the cursor location changes. --- doc/api/hooks_client-side.md | 11 +++++++++++ src/static/js/ace2_inner.js | 5 +++++ 2 files changed, 16 insertions(+) diff --git a/doc/api/hooks_client-side.md b/doc/api/hooks_client-side.md index fccdaf46..367e0688 100644 --- a/doc/api/hooks_client-side.md +++ b/doc/api/hooks_client-side.md @@ -339,3 +339,14 @@ Things in context: This hook is provided to allow author highlight style to be modified. Registered hooks should return 1 if the plugin handles highlighting. If no plugin returns 1, the core will use the default background-based highlighting. + +## aceSelectionChanged +Called from: src/static/js/ace2_inner.js + +Things in context: + +1. rep - information about where the user's cursor is +2. documentAttributeManager - information about attributes in the document + +This hook allows a plugin to react to a cursor or selection change, +perhaps to update a UI element based on the style at the cursor location. diff --git a/src/static/js/ace2_inner.js b/src/static/js/ace2_inner.js index 10dd0e4c..255f0290 100644 --- a/src/static/js/ace2_inner.js +++ b/src/static/js/ace2_inner.js @@ -2894,6 +2894,11 @@ function Ace2Inner(){ rep.selFocusAtStart = newSelFocusAtStart; currentCallStack.repChanged = true; + hooks.callAll('aceSelectionChanged', { + rep: rep, + documentAttributeManager: documentAttributeManager, + }); + return true; //console.log("selStart: %o, selEnd: %o, focusAtStart: %s", rep.selStart, rep.selEnd, //String(!!rep.selFocusAtStart)); From 21f0d12d31a076efe48cbf2239a4bded4d0abaf5 Mon Sep 17 00:00:00 2001 From: Emily Xie Date: Tue, 14 Jul 2015 17:08:35 -0400 Subject: [PATCH 002/118] clientReady hook- pass entire message, updated doc --- doc/api/hooks_server-side.md | 17 +++++++++++++++++ src/node/handler/PadMessageHandler.js | 2 ++ 2 files changed, 19 insertions(+) diff --git a/doc/api/hooks_server-side.md b/doc/api/hooks_server-side.md index 79879b2f..6ef65cc5 100644 --- a/doc/api/hooks_server-side.md +++ b/doc/api/hooks_server-side.md @@ -384,3 +384,20 @@ exports.userLeave = function(hook, session, callback) { console.log('%s left pad %s', session.author, session.padId); }; ``` + +### clientReady +Called from src/node/handler/PadMessageHandler.js + +This in context: + +1. message + +This hook gets called when handling a CLIENT_READY which is the first message from the client to the server. + +Example: + +``` +exports.clientReady = function(hook, message) { + console.log('Client has entered the pad' + message.padId); +}; +``` diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js index 248dc128..cc1260c2 100644 --- a/src/node/handler/PadMessageHandler.js +++ b/src/node/handler/PadMessageHandler.js @@ -1009,6 +1009,8 @@ function handleClientReady(client, message) var currentTime; var padIds; + hooks.callAll("clientReady", message); + async.series([ //Get ro/rw id:s function (callback) From 275a7d31e0949aeccc40e4412db5f76da0f06f30 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Olivier=20T=C3=A9tard?= Date: Mon, 27 Jul 2015 16:38:57 +0200 Subject: [PATCH 003/118] Avoid space removal when pasting text from word processor. Since bf380eea504662ea41aa431e30d7e30ad6a36cd3, some spaces were removed when pasting text from a word processor (at least using Libre Office). To avoid double space creations and space removal, we only remove line break which are tight to a space character. --- src/static/js/contentcollector.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/static/js/contentcollector.js b/src/static/js/contentcollector.js index 5c1e8efb..6820da07 100644 --- a/src/static/js/contentcollector.js +++ b/src/static/js/contentcollector.js @@ -100,7 +100,7 @@ function makeContentCollector(collectStyles, abrowser, apool, domInterface, clas function textify(str) { return sanitizeUnicode( - str.replace(/\n/g, '').replace(/[\n\r ]/g, ' ').replace(/\xa0/g, ' ').replace(/\t/g, ' ')); + str.replace(/(\n | \n)/g, ' ').replace(/[\n\r ]/g, ' ').replace(/\xa0/g, ' ').replace(/\t/g, ' ')); } function getAssoc(node, name) From 0677501d0bb2bf552f739599af3cd3f99682bfdd Mon Sep 17 00:00:00 2001 From: Luiza Pagliari Date: Tue, 4 Aug 2015 07:46:46 -0700 Subject: [PATCH 004/118] Removing style that makes editor scroll to the top on iOS without any action from the user --- src/static/css/pad.css | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/static/css/pad.css b/src/static/css/pad.css index 1e43ab96..5764c5e4 100644 --- a/src/static/css/pad.css +++ b/src/static/css/pad.css @@ -217,8 +217,7 @@ li[data-key=showusers] > a #online_count { bottom: 0px; z-index: 1; - /* Required to fix toolbar on top/bottom of the screen on iOS: */ - overflow: scroll; + /* Required to be able to scroll on iOS: */ -webkit-overflow-scrolling: touch; } #editorcontainer iframe { From 3b08ea61585485ad73afa84a1daa07c68e1482b0 Mon Sep 17 00:00:00 2001 From: CodeMichael Date: Fri, 7 Aug 2015 08:30:29 -0500 Subject: [PATCH 005/118] allow admin to run on a sub-directory --- src/static/js/admin/plugins.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/static/js/admin/plugins.js b/src/static/js/admin/plugins.js index d337da03..48d1ab70 100644 --- a/src/static/js/admin/plugins.js +++ b/src/static/js/admin/plugins.js @@ -11,7 +11,7 @@ $(document).ready(function () { //connect var room = url + "pluginfw/installer"; - socket = io.connect(room, {resource : resource}); + socket = io.connect(room, {path: baseURL + "socket.io", resource : resource}); function search(searchTerm, limit) { if(search.searchTerm != searchTerm) { From 6f6de64c4a14af9c191d30759a9c5706c510b754 Mon Sep 17 00:00:00 2001 From: CodeMichael Date: Fri, 7 Aug 2015 08:31:08 -0500 Subject: [PATCH 006/118] allow /admin to run on a sub-directory --- src/static/js/admin/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/static/js/admin/settings.js b/src/static/js/admin/settings.js index 8a4473d6..42b038d5 100644 --- a/src/static/js/admin/settings.js +++ b/src/static/js/admin/settings.js @@ -10,7 +10,7 @@ $(document).ready(function () { //connect var room = url + "settings"; - socket = io.connect(room, {resource : resource}); + socket = io.connect(room, {path: baseURL + "socket.io", resource : resource}); socket.on('settings', function (settings) { From 0e59e5a77f78e541b6fb6782f9204eb1487faaff Mon Sep 17 00:00:00 2001 From: gen2 Date: Sat, 8 Aug 2015 06:56:14 +0100 Subject: [PATCH 007/118] Fix typo in comment --- settings.json.template | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/settings.json.template b/settings.json.template index 6a344cb1..bfd0c7e6 100644 --- a/settings.json.template +++ b/settings.json.template @@ -66,7 +66,7 @@ "lang": "en-gb" }, - /* Shoud we suppress errors from being visible in the default Pad Text? */ + /* Should we suppress errors from being visible in the default Pad Text? */ "suppressErrorsInPadText" : false, /* Users must have a session to access pads. This effectively allows only group pads to be accessed. */ From 94cb743ca8a772edde7383b0b0567eb8104817f8 Mon Sep 17 00:00:00 2001 From: Stefan Date: Sat, 15 Aug 2015 22:05:31 +0200 Subject: [PATCH 008/118] Fix API call appendChatMessage to send new message to all connected clients --- src/node/db/API.js | 20 ++++++++++++-------- src/node/handler/PadMessageHandler.js | 11 +++++++++++ 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/src/node/db/API.js b/src/node/db/API.js index 97d5162d..7b5a7b37 100644 --- a/src/node/db/API.js +++ b/src/node/db/API.js @@ -510,15 +510,19 @@ exports.appendChatMessage = function(padID, text, authorID, time, callback) callback(new customError("text is no string","apierror")); return; } - - //get the pad - getPadSafe(padID, true, function(err, pad) + + // if time is not an integer value + if(time === undefined || !is_int(time)) { - if(ERR(err, callback)) return; - - pad.appendChatMessage(text, authorID, parseInt(time)); - callback(); - }); + // set time to current timestamp + time = new Date().getTime(); + } + + var padMessage = require("ep_etherpad-lite/node/handler/PadMessageHandler.js"); + // save chat message to database and send message to all connected clients + padMessage.sendChatMessageToPadClients(parseInt(time), authorID, text, padID); + + callback(); } /*****************/ diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js index 248dc128..91fa37e4 100644 --- a/src/node/handler/PadMessageHandler.js +++ b/src/node/handler/PadMessageHandler.js @@ -375,6 +375,17 @@ function handleChatMessage(client, message) var text = message.data.text; var padId = sessioninfos[client.id].padId; + exports.sendChatMessageToPadClients(time, userId, text, padId); +} + +/** + * Sends a chat message to all clients of this pad + * @param time the timestamp of the chat message + * @param userId the author id of the chat message + * @param text the text of the chat message + * @param padId the padId to send the chat message to + */ +exports.sendChatMessageToPadClients = function (time, userId, text, padId) { var pad; var userName; From c8d7e6e0b8f0db79b909800ae4e5393485969f72 Mon Sep 17 00:00:00 2001 From: Stefan Date: Sat, 15 Aug 2015 22:41:09 +0200 Subject: [PATCH 009/118] Add appendChatMessage API to docs --- doc/api/http_api.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/doc/api/http_api.md b/doc/api/http_api.md index 59510a75..9809814b 100644 --- a/doc/api/http_api.md +++ b/doc/api/http_api.md @@ -380,6 +380,16 @@ returns the chatHead (last number of the last chat-message) of the pad * `{code: 0, message:"ok", data: {chatHead: 42}}` * `{code: 1, message:"padID does not exist", data: null}` +#### appendChatMessage(padID, text, authorID [, time]) + * API >= 1.2.12 + +creates a chat message, saves it to the database and sends it to all connected clients of this pad + + +*Example returns:* + +* `{code: 0, message:"ok", data: null}` +* `{code: 1, message:"text is no string", data: null}` ### Pad Group pads are normal pads, but with the name schema GROUPID$PADNAME. A security manager controls access of them and its forbidden for normal pads to include a $ in the name. From f27aacc5bffa4ac3547e57e7453be963d5588199 Mon Sep 17 00:00:00 2001 From: Stefan Date: Sat, 15 Aug 2015 22:41:59 +0200 Subject: [PATCH 010/118] Fix missing bracket --- src/node/db/API.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/node/db/API.js b/src/node/db/API.js index 97d5162d..a6f5cb0d 100644 --- a/src/node/db/API.js +++ b/src/node/db/API.js @@ -499,7 +499,7 @@ appendChatMessage(padID, text, authorID, time), creates a chat message for the p Example returns: -{code: 0, message:"ok", data: null +{code: 0, message:"ok", data: null} {code: 1, message:"padID does not exist", data: null} */ exports.appendChatMessage = function(padID, text, authorID, time, callback) From 1a5985dc759c33e614eaa53ba9c4d2489c9e3495 Mon Sep 17 00:00:00 2001 From: Luiza Pagliari Date: Mon, 24 Aug 2015 07:58:45 -0700 Subject: [PATCH 011/118] Accepting Arrays on 'exportHtmlAdditionalTags' to handle attributes stored as ['key', 'value'] (and not only ['key', 'true']) --- doc/api/hooks_server-side.md | 11 ++++++++++- src/node/utils/ExportHtml.js | 22 ++++++++++++++++++++-- 2 files changed, 30 insertions(+), 3 deletions(-) diff --git a/doc/api/hooks_server-side.md b/doc/api/hooks_server-side.md index 79879b2f..4f441f58 100644 --- a/doc/api/hooks_server-side.md +++ b/doc/api/hooks_server-side.md @@ -357,7 +357,7 @@ Things in context: 1. Pad object -This hook will allow a plug-in developer to include more properties and attributes to support during HTML Export. An Array should be returned. +This hook will allow a plug-in developer to include more properties and attributes to support during HTML Export. An Array should be returned. If a value in this array is a string, the exported HTML will contain tags like `` for the content where attributes are `['tag_name', 'true']`; if a value in this array is a pair `['tag_name', 'value']`, the exported HTML will contain tags like `` for the content where attributes are `['tag_name', 'value']`. Example: ``` @@ -368,6 +368,15 @@ exports.exportHtmlAdditionalTags = function(hook, pad, cb){ }; ``` +Example when attributes are stores as `['color', 'red']` on the attribute pool: +``` +// Add the props to be supported in export +exports.exportHtmlAdditionalTags = function(hook, pad, cb){ + var padId = pad.id; + cb([["color", "red"], ["color", "blue"]]); +}; +``` + ## userLeave Called from src/node/handler/PadMessageHandler.js diff --git a/src/node/utils/ExportHtml.js b/src/node/utils/ExportHtml.js index 9e1ba124..c5936cf9 100644 --- a/src/node/utils/ExportHtml.js +++ b/src/node/utils/ExportHtml.js @@ -19,6 +19,7 @@ var async = require("async"); var Changeset = require("ep_etherpad-lite/static/js/Changeset"); var padManager = require("../db/PadManager"); var ERR = require("async-stacktrace"); +var _ = require('underscore'); var Security = require('ep_etherpad-lite/static/js/security'); var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks'); var _analyzeLine = require('./ExportHelper')._analyzeLine; @@ -78,8 +79,15 @@ function getHTMLFromAtext(pad, atext, authorColors) var props = ['heading1', 'heading2', 'bold', 'italic', 'underline', 'strikethrough']; hooks.aCallAll("exportHtmlAdditionalTags", pad, function(err, newProps){ + // newProps can be simply a string (which means it is stored as attribute in the form of ['tag', 'true']) + // or it can be a pair of values in an Array (for the case when it is stored as ['tag', 'value']). + // The later scenario will generate HTML with tags like newProps.forEach(function (propName, i){ - tags.push(propName); + if (_.isArray(propName)) { + tags.push(propName[0] + ":" + propName[1]); + } else { + tags.push(propName); + } props.push(propName); }); }); @@ -130,7 +138,12 @@ function getHTMLFromAtext(pad, atext, authorColors) // this pad, and if yes puts its attrib id->props value into anumMap props.forEach(function (propName, i) { - var propTrueNum = apool.putAttrib([propName, true], true); + var attrib = [propName, true]; + if (_.isArray(propName)) { + // propName can be in the form of ['color', 'red'] + attrib = propName; + } + var propTrueNum = apool.putAttrib(attrib, true); if (propTrueNum >= 0) { anumMap[propTrueNum] = i; @@ -154,6 +167,11 @@ function getHTMLFromAtext(pad, atext, authorColors) var property = props[i]; + // we are not insterested on properties in the form of ['color', 'red'] + if (_.isArray(property)) { + return false; + } + if(property.substr(0,6) === "author"){ return stripDotFromAuthorID(property); } From 04a26a3e2405cb0d764823869c7a5b7fafdea1ef Mon Sep 17 00:00:00 2001 From: Robin Buse <0ip@users.noreply.github.com> Date: Thu, 3 Sep 2015 23:04:40 +0200 Subject: [PATCH 012/118] Timeslider: Fix "Return to pad" button Closes #2768 --- src/static/css/timeslider.css | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/static/css/timeslider.css b/src/static/css/timeslider.css index 9f4e4683..2756a006 100644 --- a/src/static/css/timeslider.css +++ b/src/static/css/timeslider.css @@ -232,7 +232,7 @@ stepper:active{ .timeslider-bar #editbar { border-bottom: none; float: right; - width: 180px; + width: auto; } .timeslider-bar h1 { margin: 5px From ed5262650af5feeb20bab2fa6173a0fe84821492 Mon Sep 17 00:00:00 2001 From: Luiza Pagliari Date: Mon, 7 Sep 2015 03:55:56 -0700 Subject: [PATCH 013/118] Generating pad HTML with tags like instead of --- doc/api/hooks_server-side.md | 2 +- src/node/utils/ExportHtml.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doc/api/hooks_server-side.md b/doc/api/hooks_server-side.md index 4f441f58..dde61fe8 100644 --- a/doc/api/hooks_server-side.md +++ b/doc/api/hooks_server-side.md @@ -357,7 +357,7 @@ Things in context: 1. Pad object -This hook will allow a plug-in developer to include more properties and attributes to support during HTML Export. An Array should be returned. If a value in this array is a string, the exported HTML will contain tags like `` for the content where attributes are `['tag_name', 'true']`; if a value in this array is a pair `['tag_name', 'value']`, the exported HTML will contain tags like `` for the content where attributes are `['tag_name', 'value']`. +This hook will allow a plug-in developer to include more properties and attributes to support during HTML Export. An Array should be returned. If a value in this array is a string, the exported HTML will contain tags like `` for the content where attributes are `['tag_name', 'true']`; if a value in this array is a pair `['tag_name', 'value']`, the exported HTML will contain tags like `` for the content where attributes are `['tag_name', 'value']`. Example: ``` diff --git a/src/node/utils/ExportHtml.js b/src/node/utils/ExportHtml.js index c5936cf9..ccdc3a59 100644 --- a/src/node/utils/ExportHtml.js +++ b/src/node/utils/ExportHtml.js @@ -81,10 +81,10 @@ function getHTMLFromAtext(pad, atext, authorColors) hooks.aCallAll("exportHtmlAdditionalTags", pad, function(err, newProps){ // newProps can be simply a string (which means it is stored as attribute in the form of ['tag', 'true']) // or it can be a pair of values in an Array (for the case when it is stored as ['tag', 'value']). - // The later scenario will generate HTML with tags like + // The later scenario will generate HTML with tags like newProps.forEach(function (propName, i){ if (_.isArray(propName)) { - tags.push(propName[0] + ":" + propName[1]); + tags.push('span data-' + propName[0] + '="' + propName[1] + '"'); } else { tags.push(propName); } From 330d2b079d3e8eb79c77725491635c17377a8bae Mon Sep 17 00:00:00 2001 From: Luiza Pagliari Date: Tue, 8 Sep 2015 11:55:36 -0300 Subject: [PATCH 014/118] Fix 2772. Skipping line marker when applying attribs to a range --- src/static/js/AttributeManager.js | 153 ++++++++++++++++++++---------- src/static/js/ace2_inner.js | 3 + 2 files changed, 108 insertions(+), 48 deletions(-) diff --git a/src/static/js/AttributeManager.js b/src/static/js/AttributeManager.js index 3f464908..d4d20a1f 100644 --- a/src/static/js/AttributeManager.js +++ b/src/static/js/AttributeManager.js @@ -4,23 +4,23 @@ var _ = require('./underscore'); var lineMarkerAttribute = 'lmkr'; -// If one of these attributes are set to the first character of a +// If one of these attributes are set to the first character of a // line it is considered as a line attribute marker i.e. attributes -// set on this marker are applied to the whole line. +// set on this marker are applied to the whole line. // The list attribute is only maintained for compatibility reasons var lineAttributes = [lineMarkerAttribute,'list']; /* - The Attribute manager builds changesets based on a document + The Attribute manager builds changesets based on a document representation for setting and removing range or line-based attributes. - + @param rep the document representation to be used - @param applyChangesetCallback this callback will be called + @param applyChangesetCallback this callback will be called once a changeset has been built. - - - A document representation contains - - an array `alines` containing 1 attributes string for each line + + + A document representation contains + - an array `alines` containing 1 attributes string for each line - an Attribute pool `apool` - a SkipList `lines` containing the text lines of the document. */ @@ -30,7 +30,7 @@ var AttributeManager = function(rep, applyChangesetCallback) this.rep = rep; this.applyChangesetCallback = applyChangesetCallback; this.author = ''; - + // If the first char in a line has one of the following attributes // it will be considered as a line marker }; @@ -38,49 +38,106 @@ var AttributeManager = function(rep, applyChangesetCallback) AttributeManager.lineAttributes = lineAttributes; AttributeManager.prototype = _(AttributeManager.prototype).extend({ - + applyChangeset: function(changeset){ if(!this.applyChangesetCallback) return changeset; - + var cs = changeset.toString(); if (!Changeset.isIdentity(cs)) { this.applyChangesetCallback(cs); } - + return changeset; }, - + /* Sets attributes on a range @param start [row, col] tuple pointing to the start of the range @param end [row, col] tuple pointing to the end of the range - @param attribute: an array of attributes + @param attribs: an array of attributes */ setAttributesOnRange: function(start, end, attribs) { - var builder = Changeset.builder(this.rep.lines.totalWidth()); - ChangesetUtils.buildKeepToStartOfRange(this.rep, builder, start); - ChangesetUtils.buildKeepRange(this.rep, builder, start, end, attribs, this.rep.apool); - return this.applyChangeset(builder); + // instead of applying the attributes to the whole range at once, we need to apply them + // line by line, to be able to disregard the "*" used as line marker. For more details, + // see https://github.com/ether/etherpad-lite/issues/2772 + var allChangesets; + for(var row = start[0]; row <= end[0]; row++) { + var rowRange = this._findRowRange(row, start, end); + var startCol = rowRange[0]; + var endCol = rowRange[1]; + + var rowChangeset = this._setAttributesOnRangeByLine(row, startCol, endCol, attribs); + + // compose changesets of all rows into a single changeset, as the range might not be continuous + // due to the presence of line markers on the rows + if (allChangesets) { + allChangesets = Changeset.compose(allChangesets.toString(), rowChangeset.toString(), this.rep.apool); + } else { + allChangesets = rowChangeset; + } + } + + return this.applyChangeset(allChangesets); }, - /* + _findRowRange: function(row, start, end) + { + var startCol, endCol; + + var startLineOffset = this.rep.lines.offsetOfIndex(row); + var endLineOffset = this.rep.lines.offsetOfIndex(row+1); + var lineLength = endLineOffset - startLineOffset; + + // find column where range on this row starts + if (row === start[0]) { // are we on the first row of range? + startCol = start[1]; + } else { + startCol = this.lineHasMarker(row) ? 1 : 0; // remove "*" used as line marker + } + + // find column where range on this row ends + if (row === end[0]) { // are we on the last row of range? + endCol = end[1]; // if so, get the end of range, not end of row + } else { + endCol = lineLength - 1; // remove "\n" + } + + return [startCol, endCol]; + }, + + /* + Sets attributes on a range, by line + @param row the row where range is + @param startCol column where range starts + @param endCol column where range ends + @param attribs: an array of attributes + */ + _setAttributesOnRangeByLine: function(row, startCol, endCol, attribs) + { + var builder = Changeset.builder(this.rep.lines.totalWidth()); + ChangesetUtils.buildKeepToStartOfRange(this.rep, builder, [row, startCol]); + ChangesetUtils.buildKeepRange(this.rep, builder, [row, startCol], [row, endCol], attribs, this.rep.apool); + return builder; + }, + + /* Returns if the line already has a line marker @param lineNum: the number of the line */ lineHasMarker: function(lineNum){ var that = this; - + return _.find(lineAttributes, function(attribute){ - return that.getAttributeOnLine(lineNum, attribute) != ''; + return that.getAttributeOnLine(lineNum, attribute) != ''; }) !== undefined; }, - + /* Gets a specified attribute on a line @param lineNum: the number of the line to set the attribute for - @param attributeKey: the name of the attribute to get, e.g. list + @param attributeKey: the name of the attribute to get, e.g. list */ getAttributeOnLine: function(lineNum, attributeName){ // get `attributeName` attribute of first char of line @@ -95,10 +152,10 @@ AttributeManager.prototype = _(AttributeManager.prototype).extend({ } return ''; }, - + /* Gets all attributes on a line - @param lineNum: the number of the line to get the attribute for + @param lineNum: the number of the line to get the attribute for */ getAttributesOnLine: function(lineNum){ // get attributes of first char of line @@ -112,7 +169,7 @@ AttributeManager.prototype = _(AttributeManager.prototype).extend({ { op = opIter.next() if(!op.attribs) return [] - + Changeset.eachAttribNumber(op.attribs, function(n) { attributes.push([this.rep.apool.getAttribKey(n), this.rep.apool.getAttribValue(n)]) }.bind(this)) @@ -121,33 +178,33 @@ AttributeManager.prototype = _(AttributeManager.prototype).extend({ } return []; }, - + /* Gets all attributes at a position containing line number and column @param lineNumber starting with zero @param column starting with zero - returns a list of attributes in the format + returns a list of attributes in the format [ ["key","value"], ["key","value"], ... ] */ getAttributesOnPosition: function(lineNumber, column){ // get all attributes of the line var aline = this.rep.alines[lineNumber]; - + if (!aline) { return []; } // iterate through all operations of a line var opIter = Changeset.opIterator(aline); - + // we need to sum up how much characters each operations take until the wanted position var currentPointer = 0; - var attributes = []; + var attributes = []; var currentOperation; - + while (opIter.hasNext()) { currentOperation = opIter.next(); - currentPointer = currentPointer + currentOperation.chars; - + currentPointer = currentPointer + currentOperation.chars; + if (currentPointer > column) { // we got the operation of the wanted position, now collect all its attributes Changeset.eachAttribNumber(currentOperation.attribs, function (n) { @@ -156,44 +213,44 @@ AttributeManager.prototype = _(AttributeManager.prototype).extend({ this.rep.apool.getAttribValue(n) ]); }.bind(this)); - + // skip the loop return attributes; } } return attributes; - + }, - + /* - Gets all attributes at caret position + Gets all attributes at caret position if the user selected a range, the start of the selection is taken - returns a list of attributes in the format + returns a list of attributes in the format [ ["key","value"], ["key","value"], ... ] */ getAttributesOnCaret: function(){ return this.getAttributesOnPosition(this.rep.selStart[0], this.rep.selStart[1]); }, - + /* Sets a specified attribute on a line @param lineNum: the number of the line to set the attribute for @param attributeKey: the name of the attribute to set, e.g. list @param attributeValue: an optional parameter to pass to the attribute (e.g. indention level) - + */ setAttributeOnLine: function(lineNum, attributeName, attributeValue){ var loc = [0,0]; var builder = Changeset.builder(this.rep.lines.totalWidth()); var hasMarker = this.lineHasMarker(lineNum); - + ChangesetUtils.buildKeepRange(this.rep, builder, loc, (loc = [lineNum, 0])); if(hasMarker){ ChangesetUtils.buildKeepRange(this.rep, builder, loc, (loc = [lineNum, 1]), [ [attributeName, attributeValue] ], this.rep.apool); - }else{ + }else{ // add a line marker builder.insert('*', [ ['author', this.author], @@ -202,10 +259,10 @@ AttributeManager.prototype = _(AttributeManager.prototype).extend({ [attributeName, attributeValue] ], this.rep.apool); } - + return this.applyChangeset(builder); }, - + /** * Removes a specified attribute on a line * @param lineNum the number of the affected line @@ -243,7 +300,7 @@ AttributeManager.prototype = _(AttributeManager.prototype).extend({ return this.applyChangeset(builder); }, - + /* Toggles a line attribute for the specified line number If a line attribute with the specified name exists with any value it will be removed @@ -256,7 +313,7 @@ AttributeManager.prototype = _(AttributeManager.prototype).extend({ return this.getAttributeOnLine(lineNum, attributeName) ? this.removeAttributeOnLine(lineNum, attributeName) : this.setAttributeOnLine(lineNum, attributeName, attributeValue); - + } }); diff --git a/src/static/js/ace2_inner.js b/src/static/js/ace2_inner.js index 10dd0e4c..d1657a7c 100644 --- a/src/static/js/ace2_inner.js +++ b/src/static/js/ace2_inner.js @@ -2423,6 +2423,9 @@ function Ace2Inner(){ var opIter = Changeset.opIterator(rep.alines[n]); var indexIntoLine = 0; var selectionStartInLine = 0; + if (documentAttributeManager.lineHasMarker(n)) { + selectionStartInLine = 1; // ignore "*" used as line marker + } var selectionEndInLine = rep.lines.atIndex(n).text.length; // exclude newline if (n == selStartLine) { From c215795ab5da3e371bd799011710a2af3465ffa0 Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Thu, 10 Sep 2015 10:30:24 +0200 Subject: [PATCH 015/118] Localisation updates from https://translatewiki.net. --- src/locales/ca.json | 6 +- src/locales/dty.json | 12 +++- src/locales/eo.json | 3 + src/locales/es.json | 2 +- src/locales/ko.json | 20 +++++-- src/locales/ksh.json | 8 +-- src/locales/lv.json | 5 +- src/locales/ml.json | 10 +++- src/locales/nap.json | 2 +- src/locales/olo.json | 53 +++++++++++++++++ src/locales/pt-br.json | 6 +- src/locales/ro.json | 18 +++++- src/locales/ru.json | 10 +++- src/locales/shn.json | 126 +++++++++++++++++++++++++++++++++++++++++ src/locales/sr-ec.json | 83 +++++++++++++++++++++++++-- src/locales/tr.json | 3 +- src/locales/uk.json | 8 ++- 17 files changed, 347 insertions(+), 28 deletions(-) create mode 100644 src/locales/olo.json create mode 100644 src/locales/shn.json diff --git a/src/locales/ca.json b/src/locales/ca.json index 638b645f..f6526f1b 100644 --- a/src/locales/ca.json +++ b/src/locales/ca.json @@ -6,7 +6,8 @@ "Pitort", "Toniher", "Macofe", - "Joan manel" + "Joan manel", + "Eduardo Martinez" ] }, "index.newPad": "Nou pad", @@ -97,6 +98,9 @@ "timeslider.exportCurrent": "Exporta la versió actual com a:", "timeslider.version": "Versió {{version}}", "timeslider.saved": "Desat {{month}} {{day}}, {{year}}", + "timeslider.playPause": "Reproducció / Pausa els continguts del pad", + "timeslider.backRevision": "Tornar una revisió enrera en aquest Pad", + "timeslider.forwardRevision": "Anar una revisió endavant en aquest Pad", "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Gener", "timeslider.month.february": "Febrer", diff --git a/src/locales/dty.json b/src/locales/dty.json index 242b96c2..fde36512 100644 --- a/src/locales/dty.json +++ b/src/locales/dty.json @@ -50,5 +50,15 @@ "pad.importExport.exportpdf": "पिडिएफ", "pad.importExport.exportopen": "ओडिएफ(खुल्ला कागजात ढाँचा)", "pad.modals.connected": "जोडीयाको", - "pad.modals.reconnecting": "तमरो प्याडमि आजि: जडान हुन्नाछ" + "pad.modals.reconnecting": "तमरो प्याडमि आजि: जडान हुन्नाछ", + "pad.modals.initsocketfail": "सर्भरमा पहुँच पुर्‍याउन नाइसकियो ।", + "pad.modals.deleted": "मेटियाको", + "pad.modals.deleted.explanation": "यो प्याड हटाइसक्याको छ ।", + "pad.modals.disconnected": "तमरो जडान अवरुद्ध भयो ।", + "pad.modals.disconnected.explanation": "तमरो सर्भरसितको जडान अवरुद्ध भयो", + "pad.share": "यस प्यडलाई बाड्न्या", + "pad.share.readonly": "पड्या मात्तरै", + "pad.share.link": "लिङ्क", + "pad.share.emebdcode": "URL थप्प्या", + "pad.chat": "कुरणिकानी" } diff --git a/src/locales/eo.json b/src/locales/eo.json index fd7b7c1f..c4526728 100644 --- a/src/locales/eo.json +++ b/src/locales/eo.json @@ -94,6 +94,9 @@ "timeslider.exportCurrent": "Elporti la nunan version kiel:", "timeslider.version": "Versio {{version}}", "timeslider.saved": "Konservita la {{day}}an de {{month}}, {{year}}", + "timeslider.playPause": "Ludi / paŭzi la enhavojn de la teksto", + "timeslider.backRevision": "Reiri unu version en ĉi tiu teksto", + "timeslider.forwardRevision": "Antaŭeniri unu version en ĉi tiu teksto", "timeslider.dateformat": "{{day}}-{{month}}-{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "januaro", "timeslider.month.february": "februaro", diff --git a/src/locales/es.json b/src/locales/es.json index 9d4265b8..c62cacc4 100644 --- a/src/locales/es.json +++ b/src/locales/es.json @@ -75,7 +75,7 @@ "pad.modals.looping.cause": "Puede deberse a que te conectes a través de un proxy o un cortafuegos incompatible.", "pad.modals.initsocketfail": "Servidor incalcanzable.", "pad.modals.initsocketfail.explanation": "No se pudo conectar al servidor de sincronización.", - "pad.modals.initsocketfail.cause": "Probablemente debido a un problema en tu navegador o en tu conexión a internet.", + "pad.modals.initsocketfail.cause": "Probablemente debido a un problema en tu navegador o en tu conexión a Internet.", "pad.modals.slowcommit.explanation": "El servidor no responde.", "pad.modals.slowcommit.cause": "Puede deberse a problemas con tu conexión de red.", "pad.modals.badChangeset.explanation": "Has hecho una edición clasificada como ilegal por el servidor de sincronización.", diff --git a/src/locales/ko.json b/src/locales/ko.json index 4a71d8ee..87f4eba7 100644 --- a/src/locales/ko.json +++ b/src/locales/ko.json @@ -3,21 +3,23 @@ "authors": [ "Hym411", "아라", - "Revi" + "Revi", + "Kurousagi", + "SeoJeongHo" ] }, "index.newPad": "새 패드", "index.createOpenPad": "또는 다음 이름으로 패드 만들기/열기:", - "pad.toolbar.bold.title": "굵게 (Ctrl-B)", - "pad.toolbar.italic.title": "기울임 (Ctrl-I)", - "pad.toolbar.underline.title": "밑줄 (Ctrl-U)", + "pad.toolbar.bold.title": "굵은꼴 (Ctrl+B)", + "pad.toolbar.italic.title": "기울임꼴 (Ctrl+I)", + "pad.toolbar.underline.title": "밑줄 (Ctrl+U)", "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.undo.title": "실행 취소 (Ctrl-Z)", - "pad.toolbar.redo.title": "다시 실행 (Ctrl-Y)", + "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": "시간슬라이더", @@ -48,6 +50,7 @@ "pad.importExport.import": "텍스트 파일이나 문서 올리기", "pad.importExport.importSuccessful": "성공!", "pad.importExport.export": "다음으로 현재 패드 내보내기:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "일반 텍스트", "pad.importExport.exportword": "Microsoft Word", @@ -93,6 +96,9 @@ "timeslider.exportCurrent": "현재 버전으로 내보내기:", "timeslider.version": "버전 {{version}}", "timeslider.saved": "{{year}}년 {{month}} {{day}}일에 저장함", + "timeslider.playPause": "시작 / 패드 내용을 일시 중지", + "timeslider.backRevision": "패드의 수정판으로 다시 가기", + "timeslider.forwardRevision": "패드의 수정판을 앞으로 이동 시키기", "timeslider.dateformat": "{{year}}년/{{month}}/{{day}}일 {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "1월", "timeslider.month.february": "2월", @@ -108,6 +114,7 @@ "timeslider.month.december": "12월", "timeslider.unnamedauthors": "이름 없는 {[plural(num) one: 저자, other: 저자 ]} {{num}}명", "pad.savedrevs.marked": "이 판은 이제 저장한 판으로 표시합니다.", + "pad.savedrevs.timeslider": "당신은 타임슬라이더를 통해 저장된 버전을 볼 수 있습니다", "pad.userlist.entername": "이름을 입력하세요", "pad.userlist.unnamed": "이름없음", "pad.userlist.guest": "손님", @@ -118,6 +125,7 @@ "pad.impexp.importing": "가져오는 중...", "pad.impexp.confirmimport": "파일을 가져오면 패드의 현재 텍스트를 덮어쓰게 됩니다. 진행하시겠습니까?", "pad.impexp.convertFailed": "이 파일을 가져올 수 없습니다. 다른 문서 형식을 사용하거나 수동으로 복사하여 붙여넣으세요", + "pad.impexp.padHasData": "우리는 이 파일을 가져올수 없었습니다. 이 패드는 이미 수정되었으니, 새 패드를 가져와 주십시오", "pad.impexp.uploadFailed": "올리기를 실패했습니다. 다시 시도하세요", "pad.impexp.importfailed": "가져오기를 실패했습니다", "pad.impexp.copypaste": "복사하여 붙여넣으세요", diff --git a/src/locales/ksh.json b/src/locales/ksh.json index 955f9755..f6d0c3bb 100644 --- a/src/locales/ksh.json +++ b/src/locales/ksh.json @@ -14,7 +14,7 @@ "pad.toolbar.ul.title": "Leß met Pongkte (Strg+Jruhß+L)", "pad.toolbar.indent.title": "Enjerök (TAB)", "pad.toolbar.unindent.title": "Ußjerök (Jruhßschreff+TAB)", - "pad.toolbar.undo.title": "Retuur nämme (Strg-Z)", + "pad.toolbar.undo.title": "Retuhr nämme (Strg+Z)", "pad.toolbar.redo.title": "Norrens (Strg-Y)", "pad.toolbar.clearAuthorship.title": "Donn dä Schriiver ier Färve fottnämme (Strg+Jruhß+C)", "pad.toolbar.import_export.title": "Ongerscheidlijje Dattei_Fommaate empotteere udder äxpotteere", @@ -24,7 +24,7 @@ "pad.toolbar.embed.title": "Donn dat Pädd öffentlesch maache un enbenge", "pad.toolbar.showusers.title": "Verbonge Metschriiver aanzeije", "pad.colorpicker.save": "Faßhallde", - "pad.colorpicker.cancel": "Ophüüre", + "pad.colorpicker.cancel": "Ophüre", "pad.loading": "Ben aam Lahde …", "pad.noCookie": "Dat Pläzje wood nit jevonge. Don dat en Dingem Brauser zohlohße!", "pad.passwordRequired": "Do bruchs e Paßwoot för heh dat Pädd.", @@ -76,7 +76,7 @@ "pad.modals.deleted.explanation": "Dat Pädd es fottjeschmeße woode.", "pad.modals.disconnected": "Do bes nit mih verbonge.", "pad.modals.disconnected.explanation": "De Verbendong mem ẞööver es fott.", - "pad.modals.disconnected.cause": "Dä ẞööver künnt nit mieh loufe.\nSidd_esu jood und saad ons Bescheid, wann dadd esu bliiv.", + "pad.modals.disconnected.cause": "Dä ẞööver künnt nit mih loufe.\nSidd_esu jood und saad ons Bescheid, wann dadd esu bliiv.", "pad.share": "Maach heh dat Pädd öffentlesch", "pad.share.readonly": "Nor för ze Lässe", "pad.share.link": "Lengk", @@ -85,7 +85,7 @@ "pad.chat.title": "Maach dä Klaaf för heh dat Pädd op", "pad.chat.loadmessages": "Mih Nohreeschte lahde …", "timeslider.pageTitle": "{{appTitle}} - Verjangeheid affschpelle", - "timeslider.toolbar.returnbutton": "Jangk retuur nohm Pädd", + "timeslider.toolbar.returnbutton": "Jangk retuhr nohm Pädd", "timeslider.toolbar.authors": "De Schrihver:", "timeslider.toolbar.authorsList": "Kein Schriivere", "timeslider.toolbar.exportlink.title": "Äxpotteere", diff --git a/src/locales/lv.json b/src/locales/lv.json index ee402d33..b860055a 100644 --- a/src/locales/lv.json +++ b/src/locales/lv.json @@ -3,7 +3,8 @@ "authors": [ "Admresdeserv.", "Jmg.cmdi", - "Papuass" + "Papuass", + "Silraks" ] }, "pad.toolbar.bold.title": "Treknrakstā (CTRL + B)", @@ -60,6 +61,7 @@ "pad.share": "Koplietot šo pad", "pad.share.readonly": "Tikai lasāms", "pad.share.link": "Saite", + "pad.chat": "Čats", "timeslider.toolbar.authors": "Autori:", "timeslider.toolbar.authorsList": "Nav autoru", "timeslider.toolbar.exportlink.title": "Eksportēt", @@ -80,5 +82,6 @@ "pad.userlist.guest": "Viesis", "pad.impexp.importbutton": "Importēt tūlīt", "pad.impexp.importing": "Importē...", + "pad.impexp.uploadFailed": "Augšupielāde neizdevās, lūdzu, mēģiniet vēlreiz", "pad.impexp.importfailed": "Imports neizdevās" } diff --git a/src/locales/ml.json b/src/locales/ml.json index 680df0c2..371e1ceb 100644 --- a/src/locales/ml.json +++ b/src/locales/ml.json @@ -5,7 +5,8 @@ "Clockery", "Hrishikesh.kb", "Praveenp", - "Santhosh.thottingal" + "Santhosh.thottingal", + "Nesi" ] }, "index.newPad": "പുതിയ പാഡ്", @@ -30,12 +31,14 @@ "pad.colorpicker.save": "സേവ് ചെയ്യുക", "pad.colorpicker.cancel": "റദ്ദാക്കുക", "pad.loading": "ശേഖരിക്കുന്നു...", + "pad.noCookie": "കുക്കി കണ്ടെത്താനായില്ല. ദയവായി താങ്കളുടെ ബ്രൗസറിൽ കുക്കികൾ അനുവദിക്കുക!", "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": "ഉള്ളടക്കം വലത്തുനിന്ന് ഇടത്തോട്ടാണോ വായിക്കേണ്ടത്?", @@ -48,6 +51,7 @@ "pad.importExport.import": "എന്തെങ്കിലും എഴുത്തു പ്രമാണമോ രേഖയോ അപ്‌ലോഡ് ചെയ്യുക", "pad.importExport.importSuccessful": "വിജയകരം!", "pad.importExport.export": "ഇപ്പോഴത്തെ പാഡ് ഇങ്ങനെ കയറ്റുമതി ചെയ്യുക:", + "pad.importExport.exportetherpad": "ഈതർപാഡ്", "pad.importExport.exporthtml": "എച്ച്.റ്റി.എം.എൽ.", "pad.importExport.exportplain": "വെറും എഴുത്ത്", "pad.importExport.exportword": "മൈക്രോസോഫ്റ്റ് വേഡ്", @@ -93,6 +97,8 @@ "timeslider.exportCurrent": "ഈ പതിപ്പ് ഇങ്ങനെ എടുക്കുക:", "timeslider.version": "പതിപ്പ് {{version}}", "timeslider.saved": "സേവ് ചെയ്തത് {{month}} {{day}}, {{year}}", + "timeslider.backRevision": "ഈ പാഡിലെ ഒരു നാൾപ്പതിപ്പിലേക്ക് മടങ്ങുക", + "timeslider.forwardRevision": "ഈ പാഡിലെ അടുത്ത മാറ്റത്തിലേക്ക് പോവുക", "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "ജനുവരി", "timeslider.month.february": "ഫെബ്രുവരി", @@ -108,6 +114,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": "അതിഥി", @@ -118,6 +125,7 @@ "pad.impexp.importing": "ഇറക്കുമതി ചെയ്യുന്നു...", "pad.impexp.confirmimport": "ഒരു പ്രമാണം ഇറക്കുമതി ചെയ്യുന്നത് നിലവിലുള്ള എഴുത്തുകൾ നഷ്ടപ്പെടാനിടയാക്കും, തുടരണമെന്ന് ഉറപ്പാണോ?", "pad.impexp.convertFailed": "ഈ പ്രമാണം ഇറക്കുമതി ചെയ്യാൻ സാധിച്ചില്ല. ദയവായി മറ്റൊരു ഡോക്യുമെന്റ് ഫോർമാറ്റ് ഉപയോഗിക്കുകയോ, സ്വന്തമായി പകർത്തി ചേർക്കുകയോ ചെയ്യുക", + "pad.impexp.padHasData": "ഈ പാഡിൽ ഇതിനകം തന്നെ മാറ്റങ്ങൾ നടന്നിട്ടുള്ളതിനാൽ, നൽകിയ പ്രമാണം ഇതിലേക്ക് ചേർക്കാൻ സാധിച്ചില്ല. ദയവായി പുതിയ ഒരു പാഡിലേക്ക് ചേർക്കുക", "pad.impexp.uploadFailed": "അപ്‌‌ലോഡ് പരാജയപ്പെട്ടു. ദയവായി വീണ്ടും ശ്രമിക്കുക", "pad.impexp.importfailed": "ഇറക്കുമതി പരാജയപ്പെട്ടു", "pad.impexp.copypaste": "ദയവായി പകർത്തി ചേർക്കുക", diff --git a/src/locales/nap.json b/src/locales/nap.json index 22a5b262..c31d525a 100644 --- a/src/locales/nap.json +++ b/src/locales/nap.json @@ -5,7 +5,7 @@ "C.R." ] }, - "index.newPad": "Novo Pad", + "index.newPad": "Nuovo Pad", "index.createOpenPad": "o crià o arape nu Pad cu 'o nomme:", "pad.toolbar.bold.title": "Grassetto (Ctrl-B)", "pad.toolbar.italic.title": "Cursivo (Ctrl-I)", diff --git a/src/locales/olo.json b/src/locales/olo.json new file mode 100644 index 00000000..b65e8ebb --- /dev/null +++ b/src/locales/olo.json @@ -0,0 +1,53 @@ +{ + "@metadata": { + "authors": [ + "Denö", + "Mashoi7" + ] + }, + "pad.toolbar.underline.title": "Alleviivua (Ctrl+U)", + "pad.toolbar.settings.title": "Azetukset", + "pad.colorpicker.save": "Tallenda", + "pad.colorpicker.cancel": "Hylgiä", + "pad.wrongPassword": "Peittosana oli viärin", + "pad.settings.linenocheck": "Riädynoumerot", + "pad.settings.rtlcheck": "Luve syväindö oigielpäi huruale?", + "pad.settings.language": "Kieli:", + "pad.importExport.import_export": "Tuo/Vie", + "pad.importExport.importSuccessful": "Ozavui!", + "pad.importExport.exportetherpad": "Etherpad", + "pad.importExport.exporthtml": "HTML", + "pad.importExport.exportword": "Microsoft Word", + "pad.importExport.exportpdf": "PDF", + "pad.importExport.exportopen": "ODF (Open Document Format)", + "pad.modals.userdup": "Avattu toizes ikkunas", + "pad.modals.unauth": "Ei lubua", + "pad.modals.initsocketfail": "Palvelin ei ole tavattavis.", + "pad.modals.initsocketfail.explanation": "Ei suadu yhtevytty sinhronisaciipalvelimeh.", + "pad.modals.slowcommit.explanation": "Palvelin ei vastua.", + "pad.modals.disconnected.explanation": "Yhtevys palvelimeh kavotettu", + "timeslider.toolbar.authors": "Luadijat:", + "timeslider.toolbar.authorsList": "Ei luadijoi", + "timeslider.toolbar.exportlink.title": "Vie", + "timeslider.exportCurrent": "Vie nygöine versii nimel:", + "timeslider.version": "Versii {{version}}", + "timeslider.saved": "Tallendettu {{month}} {{day}}, {{year}}", + "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", + "timeslider.month.january": "pakkaskuudu", + "timeslider.month.february": "tuhukuudu", + "timeslider.month.march": "kevätkuudu", + "timeslider.month.april": "kevätkuudu", + "timeslider.month.may": "oraskuudu", + "timeslider.month.june": "kezäkuudu", + "timeslider.month.july": "heinykuudu", + "timeslider.month.august": "elokuudu", + "timeslider.month.september": "syvyskuudu", + "timeslider.month.october": "ligakuudu", + "timeslider.month.november": "kylmykuudu", + "timeslider.month.december": "talvikuudu", + "pad.userlist.entername": "Kirjuta sinun nimi", + "pad.userlist.unnamed": "nimetöi", + "pad.userlist.guest": "Gost'u", + "pad.impexp.importbutton": "Tuo nygöi", + "pad.impexp.importing": "Tuou..." +} diff --git a/src/locales/pt-br.json b/src/locales/pt-br.json index 59d679c8..d6d50458 100644 --- a/src/locales/pt-br.json +++ b/src/locales/pt-br.json @@ -13,7 +13,8 @@ "Rodrigo codignoli", "Webysther", "Fasouzafreitas", - "Lpagliari" + "Lpagliari", + "Walesson" ] }, "index.newPad": "Nova Nota", @@ -104,6 +105,9 @@ "timeslider.exportCurrent": "Exportar a versão atual em formato:", "timeslider.version": "Versão {{version}}", "timeslider.saved": "Salvo em {{day}} de {{month}} de {{year}}", + "timeslider.playPause": "Reprodução / Pause Conteúdo Pad", + "timeslider.backRevision": "Volte uma revisão neste Pad", + "timeslider.forwardRevision": "Vá em frente uma revisão neste Pad", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Janeiro", "timeslider.month.february": "Fevereiro", diff --git a/src/locales/ro.json b/src/locales/ro.json index 85436dd0..ce38d3f9 100644 --- a/src/locales/ro.json +++ b/src/locales/ro.json @@ -3,7 +3,8 @@ "authors": [ "Hedwig", "ImGelu", - "Minisarm" + "Minisarm", + "Strainu" ] }, "index.newPad": "Pad nou", @@ -15,6 +16,9 @@ "pad.toolbar.ol.title": "Listă ordonată (Ctrl+Shift+N)", "pad.toolbar.ul.title": "Listă neordonată (Ctrl+Shift+L)", "pad.toolbar.undo.title": "Anulează (Ctrl+Z)", + "pad.toolbar.redo.title": "Refă (Ctrl+Y)", + "pad.toolbar.clearAuthorship.title": "Curăță culorile autorilor (Ctrl+Shift+C)", + "pad.toolbar.import_export.title": "Importă/Exportă din/în diferite formate", "pad.toolbar.savedRevision.title": "Salvează revizia", "pad.toolbar.settings.title": "Setări", "pad.colorpicker.save": "Salvează", @@ -26,9 +30,12 @@ "pad.settings.padSettings": "Setări pentru Pad", "pad.settings.stickychat": "Chat-ul întotdeauna pe ecran", "pad.settings.chatandusers": "Afișează Chat-ul și Utilizatorii", + "pad.settings.colorcheck": "Culorile autorilor", + "pad.settings.linenocheck": "Numere de linie", "pad.settings.fontType": "Tipul fontului:", "pad.settings.globalView": "Vedere generală", "pad.settings.language": "Limbă:", + "pad.importExport.import_export": "Import/Export", "pad.importExport.import": "Încarcă orice fișier text sau document", "pad.importExport.importSuccessful": "Succes!", "pad.importExport.export": "Exportă pad-ul curent ca:", @@ -41,6 +48,7 @@ "pad.modals.connected": "Conectat.", "pad.modals.reconnecting": "Se reconectează la pad-ul tău..", "pad.modals.forcereconnect": "Forțează reconectarea", + "pad.modals.userdup": "Deschis în altă fereastră", "pad.modals.userdup.advice": "Reconectează pentru a folosi această fereastră în schimb", "pad.modals.unauth": "Nu ești autorizat", "pad.modals.initsocketfail": "Serverul nu este disponibil.", @@ -78,5 +86,11 @@ "timeslider.month.november": "noiembrie", "timeslider.month.december": "decembrie", "pad.userlist.entername": "Introdu numele tău", - "pad.userlist.unnamed": "fără nume" + "pad.userlist.unnamed": "fără nume", + "pad.userlist.guest": "Oaspete", + "pad.userlist.deny": "Respinge", + "pad.userlist.approve": "Aprobă", + "pad.impexp.importbutton": "Importă acum", + "pad.impexp.importing": "Importare...", + "pad.impexp.importfailed": "Import eșuat" } diff --git a/src/locales/ru.json b/src/locales/ru.json index 9a17dda7..2d92b1b6 100644 --- a/src/locales/ru.json +++ b/src/locales/ru.json @@ -5,7 +5,8 @@ "DCamer", "Eleferen", "Okras", - "Volkov" + "Volkov", + "Nzeemin" ] }, "index.newPad": "Создать", @@ -96,6 +97,9 @@ "timeslider.exportCurrent": "Экспортировать текущую версию как:", "timeslider.version": "Версия {{version}}", "timeslider.saved": "Сохранено {{day}}.{{month}}.{{year}}", + "timeslider.playPause": "Воспроизведение / Пауза содержимого документа", + "timeslider.backRevision": "Назад на одну версию документа", + "timeslider.forwardRevision": "Вперёд на одну версию документа", "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "январь", "timeslider.month.february": "февраль", @@ -111,6 +115,7 @@ "timeslider.month.december": "декабрь", "timeslider.unnamedauthors": "{{num}} {[plural(num) one: безымянный автор, few: безымянных автора, many: безымянных авторов, other: безымянных авторов]}", "pad.savedrevs.marked": "Эта версия теперь помечена как сохраненная", + "pad.savedrevs.timeslider": "Вы можете увидеть сохранённые версии на шкале времени", "pad.userlist.entername": "Введите ваше имя", "pad.userlist.unnamed": "безымянный", "pad.userlist.guest": "Гость", @@ -121,8 +126,9 @@ "pad.impexp.importing": "Импортирование…", "pad.impexp.confirmimport": "Импорт файла перезапишет текущий текст. Вы уверены, что вы хотите продолжить?", "pad.impexp.convertFailed": "Не удалось импортировать этот файл. Пожалуйста, используйте другой формат или скопируйте вручную", + "pad.impexp.padHasData": "Не получилось импортировать этот файл, потому что этот документ уже имеет изменения, пожалуйста, импортируйте в новый документ", "pad.impexp.uploadFailed": "Загрузка не удалась, пожалуйста, попробуйте ещё раз", - "pad.impexp.importfailed": "Ошибка при импортировании", + "pad.impexp.importfailed": "Ошибка при импорте", "pad.impexp.copypaste": "Пожалуйста, скопируйте", "pad.impexp.exportdisabled": "Экспорт в формате {{type}} отключен. Для подробной информации обратитесь к системному администратору." } diff --git a/src/locales/shn.json b/src/locales/shn.json new file mode 100644 index 00000000..434ef495 --- /dev/null +++ b/src/locales/shn.json @@ -0,0 +1,126 @@ +{ + "@metadata": { + "authors": [ + "Saosukham" + ] + }, + "index.newPad": "ၽႅတ်ႉမႂ်ႇ", + "index.createOpenPad": "ဢမ်ႇၼၼ် ၶူင်မႂ်ႇ/ပိုတ်ႇၽႅတ်ႉၵိုၵ်းၸိုဝ်ႈ", + "pad.toolbar.bold.title": "လမ် (Ctrl+B)", + "pad.toolbar.italic.title": "ၵိူင်း (Ctrl+I)", + "pad.toolbar.underline.title": "ထတ်းထႅဝ်တႂ်ႈ (Ctrl+U)", + "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.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": "ပိူင်ႁႅၼ်း", + "pad.toolbar.embed.title": "ၽႄပၼ်ၽႅတ်ႉဢၼ်ၼႆႉသေ ၽိူမ်ႉပၼ်", + "pad.toolbar.showusers.title": "ၼႄပၼ်ၵေႃႉၸႂ်ႉ တီႈၼိူဝ်ၽႅတ်ႉၼႆႉ", + "pad.colorpicker.save": "ၵဵပ်းသိမ်း", + "pad.colorpicker.cancel": "ဢမ်ႇႁဵတ်း", + "pad.loading": "တိုၵ်ႉလူတ်ႇ", + "pad.noCookie": "ၶုၵ်းၶီး ဢမ်ႇႁၼ်လႆႈ။ ၶႅၼ်းတေႃႈ ၶႂၢင်းပၼ် ၶုၵ်းၶီး တီႈၼႂ်း ပရၢဝ်ႇသႃႇၸဝ်ႈၵဝ်ႇ", + "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.globalView": "ဝိဝ်းတင်းလူၵ်ႈ", + "pad.settings.language": "ၽႃႇသႃႇၵႂၢမ်း:", + "pad.importExport.import_export": "သူင်ႇၶဝ်/သူင်ႇဢွၵ်ႇ", + "pad.importExport.import": "လူတ်ႇၶိုၼ်ႈ ၾၢႆႇလိၵ်ႈၵမ်ႈၽွင်ႈ ဢမ်ႇၼၼ် ပွင်ႈလိၵ်ႈ", + "pad.importExport.importSuccessful": "ဢွင်ႇယဝ်ႉ!", + "pad.importExport.export": "ဢဝ်ဢွၵ်ႇၽႅတ်ႉဢၼ်ပိူၼ်ႈသူင် ၸိူင်ႉၼင်ႇ:", + "pad.importExport.exportetherpad": "ၽႅတ်ႉပဝ်ႇ", + "pad.importExport.exporthtml": "HTML", + "pad.importExport.exportplain": "တူဝ်လိၵ်ႈပဝ်ႇ", + "pad.importExport.exportword": "မၢႆႇၶရူဝ်ႇသွပ်ႉဝၢတ်ႉ", + "pad.importExport.exportpdf": "ၽီႇတီႇဢႅပ်ႉၾ်", + "pad.importExport.exportopen": "ဢူဝ်တီႇဢႅပ်ႉၾ် (Open Document Format)", + "pad.importExport.abiword.innerHTML": "ၸဝ်ႈၵဝ်ႇၸၢင်ႈလုၵ်ႉတီႈ လိၵ်ႈပဝ်ႇသေ သူင်ႇၶဝ်ႈၵႂႃႇ ဢမ်ႇၼၼ် ပိူင်လၢႆႈ HTML. ပုၼ်ႈတႃႇ ၸိူဝ်းပိူင်မႂ်ႇ ဢၼ်သူင်ႇၶဝ်ႈမႃးၼၼ်ႉ ၶွပ်ႈၸႂ်သေ install 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.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.badChangeset.explanation": "ၶေႃႈထတ်း ဢၼ်ၸဝ်ႈၵဝ်ႇႁဵတ်းၼၼ်ႉ မၼ်းဢမ်ႇႁူမ်ႈၶဝ်ႈၶႂၢင်ႇ ၸွမ်းၼင်ႇ သႃႇဝႃႇဢၼ် ၸၼ်ထိင်းဝႆႉ", + "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": "ၵွင်ႉ", + "pad.share.emebdcode": "သႂ်ႇ URL", + "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) ၼိုင်ႈ: ၽူႈတႅမ်ႈလိၵ်ႈ, တၢင်ႇၸိူဝ်း: ၽူႈတႅမ်ႈလိၵ်ႈၶဝ် ]}", + "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.confirmimport": "ဢဝ်ၾၢႆႇၶဝ်ႈမႃးၼႆႉ တေမႃး တဵင်သႂ်ႇ လိၵ်ႈဢၼ်မီးဝႆႉ တီႈၼႂ်းၽႅတ်ႉၼႆႉယဝ်ႉ။ ၸွင်ႇၸဝ်ႈၵဝ်ႇ လပ်ႉလွင်းဝႃႈ ၸဝ်ႈၵဝ်ႇ တေၶႂ်ႈ ငူပ်ႉငိႁိုဝ်?", + "pad.impexp.convertFailed": "ႁဝ်းဢမ်ႇၸၢင်းႁဵတ်းႁိုဝ် ဢဝ်ၾၢႆႇၼႆႉ သူင်ႇၶဝ်ႈၵႂႃႇ။ ၶႅၼ်းတေႃႈ ၸႂ်ႉတိုဝ်း ၶေႃႈလိၵ်ႈ ဢၼ်ပႅၵ်ႇပိူင်ႈၵၼ် ဢမ်ႇၼၼ် ၵူးထုတ်ႇဝႆႉလႄႈ", + "pad.impexp.padHasData": "ႁဝ်းဢမ်ႇၸၢင်းႁဵတ်းႁိုဝ် ဢဝ်ၾၢႆႇၼႆႉ သူင်ႇၶဝ်ႈၵႂႃႇ ၵွပ်ႈပိူဝ်ႈဝႃႈ ၽႅတ်ႉဢၼ်ၼႆႉ မၼ်းလႅၵ်ႈလၢႆႈၵႂႃႇယဝ်ႉယဝ်ႈ။ ၶွပ်ႈၸႂ် သူင်ႇၶႂ်ႈၼႂ်း ၽႅတ်ႉမႂ်ႇလႄႈ", + "pad.impexp.uploadFailed": "ဢၼ်လူတ်ႇၶိုၼ်ႈ ၶၢတ်ႇတူၵ်းယဝ်ႉ။ ၶႅၼ်းတေႃႈ ၶတ်းၸႂ်ထႅင်ႈ", + "pad.impexp.importfailed": "ဢၼ်သူင်ႇၶဝ်ႈ ၶၢတ်ႇတူၵ်းယဝ်ႉ", + "pad.impexp.copypaste": "ၶႅၼ်းတေႃႈ ၵူးသေ ဢဝ်ဝႆႉတ", + "pad.impexp.exportdisabled": "ၸိူင်ႉၼင်ႇ {{type}} သူင်ႇဢွၵ်ႇ ၾေႃးမဵတ်ႉ ၼၼ်ႉ ဢမ်ႇၸၢင်ႈ။ ၶႅၼ်းတေႃႈ ၵပ်းသိုပ်ႇ ၽူႈၵုမ်းၵၢၼ်ၸၢၵ်ႈ တႃႇႁူဝ်ယွႆႈမၼ်းတ" +} diff --git a/src/locales/sr-ec.json b/src/locales/sr-ec.json index 9fd20b18..3d69d52f 100644 --- a/src/locales/sr-ec.json +++ b/src/locales/sr-ec.json @@ -3,24 +3,43 @@ "authors": [ "Aktron", "Milicevic01", - "Милан Јелисавчић" + "Милан Јелисавчић", + "Srdjan m" ] }, "index.newPad": "Нови Пад", + "index.createOpenPad": "или направите/отворите пад следећег назива:", "pad.toolbar.bold.title": "Подебљано (Ctrl-B)", "pad.toolbar.italic.title": "Искошено (Ctrl-I)", "pad.toolbar.underline.title": "Подвучено (Ctrl-U)", - "pad.toolbar.strikethrough.title": "Прецртано", - "pad.toolbar.ol.title": "Уређен списак", - "pad.toolbar.ul.title": "Неуређен списак", + "pad.toolbar.strikethrough.title": "Прецртано (Ctrl+5)", + "pad.toolbar.ol.title": "Уређен списак (Ctrl+Shift+N)", + "pad.toolbar.ul.title": "Неуређен списак (Ctrl+Shift+L)", "pad.toolbar.indent.title": "Увлачење (TAB)", + "pad.toolbar.unindent.title": "Извлачење (Shift+TAB)", "pad.toolbar.undo.title": "Опозови (Ctrl+Z)", + "pad.toolbar.redo.title": "Опозови (Ctrl+Z)", + "pad.toolbar.clearAuthorship.title": "Очисти ауторске боје (Ctrl+Shift+C)", + "pad.toolbar.import_export.title": "Увези/извези из/на друге датотечне формате", + "pad.toolbar.timeslider.title": "Временска линија", + "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.noCookie": "Колачић није пронађен. Молимо да укључите колачиће у вашем прегледавачу!", + "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": "Monospace", @@ -29,18 +48,57 @@ "pad.importExport.import_export": "Увоз/извоз", "pad.importExport.import": "Отпремите било коју текстуалну датотеку или документ", "pad.importExport.importSuccessful": "Успело!", + "pad.importExport.export": "Извези тренутни пад као:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "чист текст", + "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "PDF", + "pad.importExport.exportopen": "ODF (Open Document Format)", + "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.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.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": "Веза", + "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.saved": "Сачувано на {{day}}. {{month}}. {{year}}", + "timeslider.playPause": "Пусти/паузирај садржај пада", + "timeslider.backRevision": "Иди на претходну верзију овог пада", + "timeslider.forwardRevision": "Иди на следећу верзију овог пада", + "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "јануар", "timeslider.month.february": "фебруар", "timeslider.month.march": "март", @@ -53,7 +111,22 @@ "timeslider.month.october": "октобар", "timeslider.month.november": "новембар", "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": "Гост", + "pad.userlist.deny": "Одбиј", "pad.userlist.approve": "одобрено", + "pad.editbar.clearcolors": "Очисти ауторске боје за цели документ?", "pad.impexp.importbutton": "Увези одмах", - "pad.impexp.importing": "Увожење..." + "pad.impexp.importing": "Увожење...", + "pad.impexp.confirmimport": "Увоз датотеке ће преписати тренутни текст пада. Да ли сте сигурни да желите наставити?", + "pad.impexp.convertFailed": "Не можемо увести ову датотеку. Молимо да користите други формат документа или да документ копирате ручно", + "pad.impexp.padHasData": "Не можемо да увеземо ову датотеку зато што је већ било промена на овом паду, молимо да увезете нови пад", + "pad.impexp.uploadFailed": "Отпремање није успело, молимо да покушате поново", + "pad.impexp.importfailed": "Увоз неуспешан", + "pad.impexp.copypaste": "Молимо да ручно копирате", + "pad.impexp.exportdisabled": "Извоз у формату {{type}} није дозвољен. Контактирајте системског администратора за детаље." } diff --git a/src/locales/tr.json b/src/locales/tr.json index 2c948ef6..bed5c6ec 100644 --- a/src/locales/tr.json +++ b/src/locales/tr.json @@ -5,7 +5,8 @@ "Erdemaslancan", "Joseph", "Meelo", - "Trockya" + "Trockya", + "McAang" ] }, "index.newPad": "Yeni Bloknot", diff --git a/src/locales/uk.json b/src/locales/uk.json index 9dcde98e..d5384a55 100644 --- a/src/locales/uk.json +++ b/src/locales/uk.json @@ -6,7 +6,8 @@ "Olvin", "Steve.rusyn", "SteveR", - "Lxlalexlxl" + "Lxlalexlxl", + "Григорій Пугач" ] }, "index.newPad": "Створити", @@ -97,6 +98,9 @@ "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": "Лютий", @@ -112,6 +116,7 @@ "timeslider.month.december": "Грудень", "timeslider.unnamedauthors": "{{num}} {[plural(num) one: безіменний автор, few: безіменні автори, many: безіменних авторів, other: безіменних авторів]}", "pad.savedrevs.marked": "Цю версію помічено збереженою версією", + "pad.savedrevs.timeslider": "Ви можете побачити збережені ревізії, відвідавши \"Слайдер Змін Ревізій\"", "pad.userlist.entername": "Введіть Ваше ім'я", "pad.userlist.unnamed": "безіменний", "pad.userlist.guest": "Гість", @@ -122,6 +127,7 @@ "pad.impexp.importing": "Імпорт...", "pad.impexp.confirmimport": "Імпортування файлу перезапише поточний текст документу. Ви дійсно хочете продовжити?", "pad.impexp.convertFailed": "Ми не можемо імпортувати цей файл. Будь ласка, використайте інший формат документу, або прямо скопіюйте та вставте", + "pad.impexp.padHasData": "Ми були не в стані імпортувати цей файл, тому що ця панель, вже відредактована, будь ласка, імпортуйте на нову панель", "pad.impexp.uploadFailed": "Завантаження не вдалось, будь ласка, спробуйте знову", "pad.impexp.importfailed": "Помилка при імпортуванні", "pad.impexp.copypaste": "Будь ласка, скопіюйте та вставте", From 1d134f0b138ca23f548a2795e0c68bbc6ea17437 Mon Sep 17 00:00:00 2001 From: Luiza Pagliari Date: Thu, 17 Sep 2015 15:30:09 -0300 Subject: [PATCH 016/118] Fixing ed52626. It was closing the span with , not --- doc/api/hooks_server-side.md | 2 +- src/node/utils/ExportHtml.js | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/doc/api/hooks_server-side.md b/doc/api/hooks_server-side.md index dde61fe8..8467d057 100644 --- a/doc/api/hooks_server-side.md +++ b/doc/api/hooks_server-side.md @@ -357,7 +357,7 @@ Things in context: 1. Pad object -This hook will allow a plug-in developer to include more properties and attributes to support during HTML Export. An Array should be returned. If a value in this array is a string, the exported HTML will contain tags like `` for the content where attributes are `['tag_name', 'true']`; if a value in this array is a pair `['tag_name', 'value']`, the exported HTML will contain tags like `` for the content where attributes are `['tag_name', 'value']`. +This hook will allow a plug-in developer to include more properties and attributes to support during HTML Export. An Array should be returned. If a value in this array is a string, the exported HTML will contain tags like `` for the content where attributes are `['tag_name', 'true']`; if a value in this array is a pair `['tag_name', 'value']`, the exported HTML will contain tags like `` for the content where attributes are `['tag_name', 'value']`. Example: ``` diff --git a/src/node/utils/ExportHtml.js b/src/node/utils/ExportHtml.js index ccdc3a59..53469c9b 100644 --- a/src/node/utils/ExportHtml.js +++ b/src/node/utils/ExportHtml.js @@ -183,6 +183,11 @@ function getHTMLFromAtext(pad, atext, authorColors) return false; } + function isSpanWithData(i){ + var property = props[i]; + return _.isArray(property); + } + function emitOpenTag(i) { openTags.unshift(i); @@ -204,8 +209,9 @@ function getHTMLFromAtext(pad, atext, authorColors) { openTags.shift(); var spanClass = getSpanClassFor(i); + var spanWithData = isSpanWithData(i); - if(spanClass){ + if(spanClass || spanWithData){ assem.append(''); } else { assem.append(' Date: Fri, 25 Sep 2015 16:07:09 +0200 Subject: [PATCH 017/118] Localisation updates from https://translatewiki.net. --- src/locales/it.json | 3 +++ src/locales/nl.json | 6 +++--- src/locales/pt-br.json | 9 +++++---- src/locales/pt.json | 5 +++-- src/locales/sk.json | 12 +++++++----- src/locales/sq.json | 5 +++-- 6 files changed, 24 insertions(+), 16 deletions(-) diff --git a/src/locales/it.json b/src/locales/it.json index 082535fc..c3841e58 100644 --- a/src/locales/it.json +++ b/src/locales/it.json @@ -97,6 +97,9 @@ "timeslider.exportCurrent": "Esporta la versione corrente come:", "timeslider.version": "Versione {{version}}", "timeslider.saved": "Salvato {{day}} {{month}} {{year}}", + "timeslider.playPause": "Riproduzione / Pausa contenuti Pad", + "timeslider.backRevision": "Vai indietro di una versione in questo Pad", + "timeslider.forwardRevision": "Vai avanti di una versione in questo Pad", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "gennaio", "timeslider.month.february": "febbraio", diff --git a/src/locales/nl.json b/src/locales/nl.json index 0aa63d8e..d58fabb9 100644 --- a/src/locales/nl.json +++ b/src/locales/nl.json @@ -7,7 +7,7 @@ ] }, "index.newPad": "Nieuw pad", - "index.createOpenPad": "Maak of open pad met de naam:", + "index.createOpenPad": "Pad maken op openen met de naam:", "pad.toolbar.bold.title": "Vet (Ctrl-B)", "pad.toolbar.italic.title": "Cursief (Ctrl-I)", "pad.toolbar.underline.title": "Onderstrepen (Ctrl-U)", @@ -45,7 +45,7 @@ "pad.settings.globalView": "Globaal overzicht", "pad.settings.language": "Taal:", "pad.importExport.import_export": "Importeren/exporteren", - "pad.importExport.import": "Upload een tekstbestand of document", + "pad.importExport.import": "Tekstbestand of document uploaden", "pad.importExport.importSuccessful": "Afgerond", "pad.importExport.export": "Huidige pad exporteren als", "pad.importExport.exportetherpad": "Etherpad", @@ -65,7 +65,7 @@ "pad.modals.unauth.explanation": "Uw rechten zijn gewijzigd terwijl u de pagina aan het bekijken was. Probeer opnieuw te verbinden.", "pad.modals.looping.explanation": "Er is een probleem opgetreden tijdens de communicatie met de synchronisatieserver.", "pad.modals.looping.cause": "Mogelijk gebruikt de server een niet compatibele firewall of proxy server.", - "pad.modals.initsocketfail": "Server is niet bereikbaar.", + "pad.modals.initsocketfail": "De server is niet bereikbaar.", "pad.modals.initsocketfail.explanation": "Het was niet mogelijk te verbinden met de synchronisatieserver.", "pad.modals.initsocketfail.cause": "Mogelijk komt dit door uw browser of internetverbinding.", "pad.modals.slowcommit.explanation": "De server reageert niet.", diff --git a/src/locales/pt-br.json b/src/locales/pt-br.json index d6d50458..e356041f 100644 --- a/src/locales/pt-br.json +++ b/src/locales/pt-br.json @@ -14,7 +14,8 @@ "Webysther", "Fasouzafreitas", "Lpagliari", - "Walesson" + "Walesson", + "Cainamarques" ] }, "index.newPad": "Nova Nota", @@ -105,9 +106,9 @@ "timeslider.exportCurrent": "Exportar a versão atual em formato:", "timeslider.version": "Versão {{version}}", "timeslider.saved": "Salvo em {{day}} de {{month}} de {{year}}", - "timeslider.playPause": "Reprodução / Pause Conteúdo Pad", - "timeslider.backRevision": "Volte uma revisão neste Pad", - "timeslider.forwardRevision": "Vá em frente uma revisão neste Pad", + "timeslider.playPause": "Reproduzir / Pausar conteúdo no Pad", + "timeslider.backRevision": "Voltar a uma revisão anterior neste Pad", + "timeslider.forwardRevision": "Ir a uma revisão posterior neste Pad", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Janeiro", "timeslider.month.february": "Fevereiro", diff --git a/src/locales/pt.json b/src/locales/pt.json index 473980fd..b5cbe1d8 100644 --- a/src/locales/pt.json +++ b/src/locales/pt.json @@ -7,7 +7,8 @@ "Waldir", "Imperadeiro98", "Macofe", - "Ti4goc" + "Ti4goc", + "Cainamarques" ] }, "index.newPad": "Nova Nota", @@ -106,7 +107,7 @@ "pad.impexp.importbutton": "Importar agora", "pad.impexp.importing": "Importando...", "pad.impexp.confirmimport": "A importação de um ficheiro irá substituir o texto atual do pad. Tem certeza que deseja continuar?", - "pad.impexp.padHasData": "Não fomos capazes de importar este ficheiro porque esta Almofada já tinha alterações, consulte importar para um novo bloco", + "pad.impexp.padHasData": "Não fomos capazes de importar este arquivo porque este Pad já tinha alterações, por favor importe para um novo pad", "pad.impexp.uploadFailed": "O upload falhou. Por favor, tente novamente", "pad.impexp.importfailed": "A importação falhou", "pad.impexp.copypaste": "Por favor, copie e cole" diff --git a/src/locales/sk.json b/src/locales/sk.json index 02c5c978..445adc00 100644 --- a/src/locales/sk.json +++ b/src/locales/sk.json @@ -3,7 +3,8 @@ "authors": [ "Teslaton", "Kusavica", - "Rudko" + "Rudko", + "Mark" ] }, "index.newPad": "Nový Pad", @@ -11,14 +12,14 @@ "pad.toolbar.bold.title": "Tučné (Ctrl-B)", "pad.toolbar.italic.title": "Kurzíva (Ctrl-I)", "pad.toolbar.underline.title": "Podčiarknuté (Ctrl-U)", - "pad.toolbar.strikethrough.title": "Prečiarknuté", - "pad.toolbar.ol.title": "Číslovaný zoznam", - "pad.toolbar.ul.title": "Odrážkový zoznam", + "pad.toolbar.strikethrough.title": "Prečiarknuté (Ctrl+5)", + "pad.toolbar.ol.title": "Usporiadaný zoznam (Ctrl+Shift+N)", + "pad.toolbar.ul.title": "Nezoradený zoznam (Ctrl+Shift+L)", "pad.toolbar.indent.title": "Zväčšiť odsadenie (TAB)", "pad.toolbar.unindent.title": "Zmenšiť odsadenie (Shift+TAB)", "pad.toolbar.undo.title": "Späť (Ctrl-Z)", "pad.toolbar.redo.title": "Znova (Ctrl-Y)", - "pad.toolbar.clearAuthorship.title": "Odstrániť farby autorstva", + "pad.toolbar.clearAuthorship.title": "Odstrániť farby autorstva (Ctrl+Shift+C)", "pad.toolbar.import_export.title": "Import/export z/do rôznych formátov súborov", "pad.toolbar.timeslider.title": "Časová os", "pad.toolbar.savedRevision.title": "Uložiť revíziu", @@ -46,6 +47,7 @@ "pad.importExport.import": "Nahrať ľubovoľný textový súbor alebo dokument", "pad.importExport.importSuccessful": "Import úspešný!", "pad.importExport.export": "Exportovať aktuálny Pad ako:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Čistý text", "pad.importExport.exportword": "Microsoft Word", diff --git a/src/locales/sq.json b/src/locales/sq.json index 6374ea62..a6b3d813 100644 --- a/src/locales/sq.json +++ b/src/locales/sq.json @@ -1,7 +1,8 @@ { "@metadata": { "authors": [ - "Besnik b" + "Besnik b", + "Kosovastar" ] }, "index.newPad": "Bllok i Ri", @@ -39,7 +40,7 @@ "pad.settings.fontType.normal": "Normale", "pad.settings.fontType.monospaced": "Monospace", "pad.settings.globalView": "Pamje Globale", - "pad.settings.language": "Gjuhë:", + "pad.settings.language": "Gjuha:", "pad.importExport.import_export": "Import/Eksport", "pad.importExport.import": "Ngarkoni cilëndo kartelë teksti ose dokument", "pad.importExport.importSuccessful": "Me sukses!", From bf7930fccb37ac6d2b40115ff41c2c0b70fb1061 Mon Sep 17 00:00:00 2001 From: Stefan Date: Sat, 26 Sep 2015 12:15:54 +0200 Subject: [PATCH 018/118] Support version 4 of node.js --- bin/installDeps.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bin/installDeps.sh b/bin/installDeps.sh index f2a3aafc..fbbbbb24 100755 --- a/bin/installDeps.sh +++ b/bin/installDeps.sh @@ -46,13 +46,14 @@ fi #check node version NODE_VERSION=$(node --version) NODE_V_MINOR=$(echo $NODE_VERSION | cut -d "." -f 1-2) +NODE_V_MAIN=$(echo $NODE_VERSION | cut -d "." -f 1) #iojs version checking added if hash iojs 2>/dev/null; then IOJS_VERSION=$(iojs --version) fi -if [ ! $NODE_V_MINOR = "v0.10" ] && [ ! $NODE_V_MINOR = "v0.11" ] && [ ! $NODE_V_MINOR = "v0.12" ]; then +if [ ! $NODE_V_MINOR = "v0.10" ] && [ ! $NODE_V_MINOR = "v0.11" ] && [ ! $NODE_V_MINOR = "v0.12" ] && [ ! $NODE_V_MAIN = "v4" ]; then if [ ! $IOJS_VERSION ]; then - echo "You're running a wrong version of node, or io.js is not installed. You're using $NODE_VERSION, we need v0.10.x, v0.11.x or v0.12.x" >&2 + echo "You're running a wrong version of node, or io.js is not installed. You're using $NODE_VERSION, we need node v0.10.x or higher" >&2 exit 1 fi fi From e6b0e954b5b91f18cdeb57eab78cabaf0adb7315 Mon Sep 17 00:00:00 2001 From: Andreas Fried Date: Wed, 30 Sep 2015 00:48:15 +0200 Subject: [PATCH 019/118] Fix off-by-one: The chatHead is in fact a valid message index. This fixes #2751. --- src/node/db/API.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/node/db/API.js b/src/node/db/API.js index 3f34a8e4..87b6d747 100644 --- a/src/node/db/API.js +++ b/src/node/db/API.js @@ -473,9 +473,9 @@ exports.getChatHistory = function(padID, start, end, callback) end = pad.chatHead; } - if(start >= chatHead && chatHead > 0) + if(start > chatHead) { - callback(new customError("start is higher or equal to the current chatHead","apierror")); + callback(new customError("start is higher than the current chatHead","apierror")); return; } if(end > chatHead) From c9924ee706edca1591b1c879f8e5d593b48f254c Mon Sep 17 00:00:00 2001 From: Robin Schneider Date: Wed, 7 Oct 2015 12:42:19 +0200 Subject: [PATCH 020/118] Give better error message when rebuildPad.js hits a non-existing rev. --- bin/rebuildPad.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bin/rebuildPad.js b/bin/rebuildPad.js index c8383342..60c5f4ed 100644 --- a/bin/rebuildPad.js +++ b/bin/rebuildPad.js @@ -79,6 +79,9 @@ async.series([ newPad.pool.numToAttrib = oldPad.pool.numToAttrib; for(var curRevNum = 0; curRevNum <= newRevHead; curRevNum++) { db.db.get("pad:" + padId + ":revs:" + curRevNum, function(err, rev) { + if (rev.meta) { + throw "The specified revision number could not be found."; + } var newRevNum = ++newPad.head; var newRevId = "pad:" + newPad.id + ":revs:" + newRevNum; db.db.set(newRevId, rev); From 29441a8ae156113ebc50d8a655b3bf3a93c80db3 Mon Sep 17 00:00:00 2001 From: Robin Schneider Date: Wed, 7 Oct 2015 15:43:29 +0200 Subject: [PATCH 021/118] Get git commit hash even if the repo only points to a bare repo. * Used by https://github.com/debops/ansible-etherpad --- src/node/utils/Settings.js | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/node/utils/Settings.js b/src/node/utils/Settings.js index 2c2f90bf..e1825ef4 100644 --- a/src/node/utils/Settings.js +++ b/src/node/utils/Settings.js @@ -218,8 +218,14 @@ exports.getGitCommit = function() { try { var rootPath = path.resolve(npm.dir, '..'); - var ref = fs.readFileSync(rootPath + "/.git/HEAD", "utf-8"); - var refPath = rootPath + "/.git/" + ref.substring(5, ref.indexOf("\n")); + if (fs.lstatSync(rootPath + '/.git').isFile()) { + rootPath = fs.readFileSync(rootPath + '/.git', "utf8"); + rootPath = rootPath.split(' ').pop().trim(); + } else { + rootPath += '/.git'; + } + var ref = fs.readFileSync(rootPath + "/HEAD", "utf-8"); + var refPath = rootPath + "/" + ref.substring(5, ref.indexOf("\n")); version = fs.readFileSync(refPath, "utf-8"); version = version.substring(0, 7); } From f6cebdad9813026b2909fadc4e43adcdc4d78b10 Mon Sep 17 00:00:00 2001 From: Stefan Date: Thu, 8 Oct 2015 20:46:15 +0200 Subject: [PATCH 022/118] Fix decode error if pad name contains special characters and is sanitized --- src/node/hooks/express/padurlsanitize.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/node/hooks/express/padurlsanitize.js b/src/node/hooks/express/padurlsanitize.js index 94cbe36a..a9972220 100644 --- a/src/node/hooks/express/padurlsanitize.js +++ b/src/node/hooks/express/padurlsanitize.js @@ -16,6 +16,7 @@ exports.expressCreateServer = function (hook_name, args, cb) { if(sanitizedPadId != padId) { var real_url = sanitizedPadId; + real_url = encodeURIComponent(real_url); var query = url.parse(req.url).query; if ( query ) real_url += '?' + query; res.header('Location', real_url); From 31f7c7e0f2e31b9a0573382481841215f4f01dc8 Mon Sep 17 00:00:00 2001 From: webzwo0i Date: Fri, 9 Oct 2015 14:55:19 +0200 Subject: [PATCH 023/118] check if ChangesetRequest granularity is a number (#2796) --- src/node/handler/PadMessageHandler.js | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js index 91fa37e4..13470b52 100644 --- a/src/node/handler/PadMessageHandler.js +++ b/src/node/handler/PadMessageHandler.js @@ -1365,6 +1365,11 @@ function handleChangesetRequest(client, message) messageLogger.warn("Dropped message, changeset request has no granularity!"); return; } + if(Number(message.data.granularity) !== message.data.granularity || message.data.granularity % 1 !== 0) + { + messageLogger.warn("Dropped message, changeset request granularity is not an integer!"); + return; + } if(message.data.start == null) { messageLogger.warn("Dropped message, changeset request has no start!"); From 1ee1f818dbe29e09a4733d0248663e52451e90dc Mon Sep 17 00:00:00 2001 From: webzwo0i Date: Fri, 9 Oct 2015 14:55:59 +0200 Subject: [PATCH 024/118] if granularity is negative, endNum is negative and loop --- src/node/handler/PadMessageHandler.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js index 13470b52..6515e17e 100644 --- a/src/node/handler/PadMessageHandler.js +++ b/src/node/handler/PadMessageHandler.js @@ -1365,7 +1365,8 @@ function handleChangesetRequest(client, message) messageLogger.warn("Dropped message, changeset request has no granularity!"); return; } - if(Number(message.data.granularity) !== message.data.granularity || message.data.granularity % 1 !== 0) + //https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/isInteger#Polyfill + if(Math.floor(message.data.granularity) !== message.data.granularity) { messageLogger.warn("Dropped message, changeset request granularity is not an integer!"); return; From 5deb06d5891ce9278b74c253fd85741757b25c82 Mon Sep 17 00:00:00 2001 From: Luiza Pagliari Date: Tue, 13 Oct 2015 18:39:23 -0300 Subject: [PATCH 025/118] Create setting to control if a new line will be indented or not Currently pressing ENTER on a line that ends with ':', '[', '(' or '{' automaticaly indents the new line with 4 spaces. The variable added by this commit to settings.json allow an Etherpad instance to not have this behavior. --- settings.json.template | 5 ++ src/node/handler/PadMessageHandler.js | 7 +- src/node/utils/Settings.js | 5 ++ src/static/js/ace2_inner.js | 40 +++++----- tests/frontend/specs/indentation.js | 102 +++++++++++++++++++++++--- 5 files changed, 128 insertions(+), 31 deletions(-) diff --git a/settings.json.template b/settings.json.template index bfd0c7e6..06d388d8 100644 --- a/settings.json.template +++ b/settings.json.template @@ -131,6 +131,11 @@ // Allow Load Testing tools to hit the Etherpad Instance. Warning this will disable security on the instance. "loadTest": false, + // Disable indentation on new line when previous line ends with some special chars (':', '[', '(', '{') + /* + "indentationOnNewLine": false, + */ + /* The toolbar buttons configuration. "toolbar": { "left": [ diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js index e72625d0..9481889f 100644 --- a/src/node/handler/PadMessageHandler.js +++ b/src/node/handler/PadMessageHandler.js @@ -630,8 +630,8 @@ function handleUserChanges(data, cb) messageLogger.warn("Dropped message, USER_CHANGES Message has no changeset!"); return cb(); } - //TODO: this might happen with other messages too => find one place to copy the session - //and always use the copy. atm a message will be ignored if the session is gone even + //TODO: this might happen with other messages too => find one place to copy the session + //and always use the copy. atm a message will be ignored if the session is gone even //if the session was valid when the message arrived in the first place if(!sessioninfos[client.id]) { @@ -960,7 +960,7 @@ function handleSwitchToPad(client, message) roomClients[i].leave(padId); } } - + // start up the new pad createSessionInfo(client, message); handleClientReady(client, message); @@ -1231,6 +1231,7 @@ function handleClientReady(client, message) "plugins": plugins.plugins, "parts": plugins.parts, }, + "indentationOnNewLine": settings.indentationOnNewLine, "initialChangesets": [] // FIXME: REMOVE THIS SHIT } diff --git a/src/node/utils/Settings.js b/src/node/utils/Settings.js index 2c2f90bf..1a60860f 100644 --- a/src/node/utils/Settings.js +++ b/src/node/utils/Settings.js @@ -177,6 +177,11 @@ exports.disableIPlogging = false; */ exports.loadTest = false; +/** + * Enable indentation on new lines + */ +exports.indentationOnNewLine = true; + /* * log4js appender configuration */ diff --git a/src/static/js/ace2_inner.js b/src/static/js/ace2_inner.js index d1657a7c..bb85adcf 100644 --- a/src/static/js/ace2_inner.js +++ b/src/static/js/ace2_inner.js @@ -1894,7 +1894,11 @@ function Ace2Inner(){ var prevLine = rep.lines.prev(thisLine); var prevLineText = prevLine.text; var theIndent = /^ *(?:)/.exec(prevLineText)[0]; - if (/[\[\(\:\{]\s*$/.exec(prevLineText)) theIndent += THE_TAB; + var shouldIndent = parent.parent.clientVars.indentationOnNewLine; + if (shouldIndent && /[\[\(\:\{]\s*$/.exec(prevLineText)) + { + theIndent += THE_TAB; + } var cs = Changeset.builder(rep.lines.totalWidth()).keep( rep.lines.offsetOfIndex(lineNum), lineNum).insert( theIndent, [ @@ -2336,7 +2340,7 @@ function Ace2Inner(){ function getAttributeOnSelection(attributeName){ if (!(rep.selStart && rep.selEnd)) return - + var withIt = Changeset.makeAttribsString('+', [ [attributeName, 'true'] ], rep.apool); @@ -2347,14 +2351,14 @@ function Ace2Inner(){ } return rangeHasAttrib(rep.selStart, rep.selEnd) - + function rangeHasAttrib(selStart, selEnd) { // if range is collapsed -> no attribs in range if(selStart[1] == selEnd[1] && selStart[0] == selEnd[0]) return false - + if(selStart[0] != selEnd[0]) { // -> More than one line selected var hasAttrib = true - + // from selStart to the end of the first line hasAttrib = hasAttrib && rangeHasAttrib(selStart, [selStart[0], rep.lines.atIndex(selStart[0]).text.length]) @@ -2365,22 +2369,22 @@ function Ace2Inner(){ // for the last, potentially partial, line hasAttrib = hasAttrib && rangeHasAttrib([selEnd[0], 0], [selEnd[0], selEnd[1]]) - + return hasAttrib } - + // Logic tells us we now have a range on a single line - + var lineNum = selStart[0] , start = selStart[1] , end = selEnd[1] , hasAttrib = true - + // Iterate over attribs on this line - + var opIter = Changeset.opIterator(rep.alines[lineNum]) , indexIntoLine = 0 - + while (opIter.hasNext()) { var op = opIter.next(); var opStartInLine = indexIntoLine; @@ -2394,11 +2398,11 @@ function Ace2Inner(){ } indexIntoLine = opEndInLine; } - + return hasAttrib } } - + editorInfo.ace_getAttributeOnSelection = getAttributeOnSelection; function toggleAttributeOnSelection(attributeName) @@ -3641,7 +3645,7 @@ function Ace2Inner(){ // Is caret potentially hidden by the chat button? var myselection = document.getSelection(); // get the current caret selection var caretOffsetTop = myselection.focusNode.parentNode.offsetTop | myselection.focusNode.offsetTop; // get the carets selection offset in px IE 214 - + if(myselection.focusNode.wholeText){ // Is there any content? If not lineHeight will report wrong.. var lineHeight = myselection.focusNode.parentNode.offsetHeight; // line height of populated links }else{ @@ -3713,13 +3717,13 @@ function Ace2Inner(){ // As ubuntu cannot use Alt F10.... // Focus on the editbar. -- TODO: Move Focus back to previous state (we know it so we can use it) var firstEditbarElement = parent.parent.$('#editbar').children("ul").first().children().first().children().first().children().first(); - $(this).blur(); + $(this).blur(); firstEditbarElement.focus(); evt.preventDefault(); } if ((!specialHandled) && altKey && keyCode == 67 && type === "keydown"){ // Alt c focuses on the Chat window - $(this).blur(); + $(this).blur(); parent.parent.chat.show(); parent.parent.$("#chatinput").focus(); evt.preventDefault(); @@ -4961,7 +4965,7 @@ function Ace2Inner(){ // Disabled: https://github.com/ether/etherpad-lite/issues/2546 // Will break OL re-numbering: https://github.com/ether/etherpad-lite/pull/2533 - // $(document).on("cut", handleCut); + // $(document).on("cut", handleCut); $(root).on("blur", handleBlur); if (browser.msie) @@ -4972,7 +4976,7 @@ function Ace2Inner(){ // Don't paste on middle click of links $(root).on("paste", function(e){ - // TODO: this breaks pasting strings into URLS when using + // TODO: this breaks pasting strings into URLS when using // Control C and Control V -- the Event is never available // here.. :( if(e.target.a || e.target.localName === "a"){ diff --git a/tests/frontend/specs/indentation.js b/tests/frontend/specs/indentation.js index 8e851d87..71aafc7a 100644 --- a/tests/frontend/specs/indentation.js +++ b/tests/frontend/specs/indentation.js @@ -15,7 +15,7 @@ describe("indentation button", function(){ //select this text element $firstTextElement.sendkeys('{selectall}'); - if(inner$(window)[0].bowser.firefox || inner$(window)[0].bowser.modernIE){ // if it's a mozilla or IE + if(inner$(window)[0].bowser.firefox || inner$(window)[0].bowser.modernIE){ // if it's a mozilla or IE var evtType = "keypress"; }else{ var evtType = "keydown"; @@ -31,7 +31,7 @@ describe("indentation button", function(){ }); it("indent text with button", function(done){ - var inner$ = helper.padInner$; + var inner$ = helper.padInner$; var chrome$ = helper.padChrome$; var $indentButton = chrome$(".buttonicon-indent"); @@ -43,7 +43,7 @@ describe("indentation button", function(){ }); it("keeps the indent on enter for the new line", function(done){ - var inner$ = helper.padInner$; + var inner$ = helper.padInner$; var chrome$ = helper.padChrome$; var $indentButton = chrome$(".buttonicon-indent"); @@ -51,9 +51,9 @@ describe("indentation button", function(){ //type a bit, make a line break and type again var $firstTextElement = inner$("div span").first(); - $firstTextElement.sendkeys('line 1'); - $firstTextElement.sendkeys('{enter}'); - $firstTextElement.sendkeys('line 2'); + $firstTextElement.sendkeys('line 1'); + $firstTextElement.sendkeys('{enter}'); + $firstTextElement.sendkeys('line 2'); $firstTextElement.sendkeys('{enter}'); helper.waitFor(function(){ @@ -68,13 +68,83 @@ describe("indentation button", function(){ }); }); + it("indents text with spaces on enter if previous line ends with ':', '[', '(', or '{'", function(done){ + var inner$ = helper.padInner$; + var chrome$ = helper.padChrome$; + + //type a bit, make a line break and type again + var $firstTextElement = inner$("div").first(); + $firstTextElement.sendkeys("line with ':'{enter}"); + $firstTextElement.sendkeys("line with '['{enter}"); + $firstTextElement.sendkeys("line with '('{enter}"); + $firstTextElement.sendkeys("line with '{{}'{enter}"); + + helper.waitFor(function(){ + return inner$("div span").first().text().indexOf("line with '{'") === -1; + }).done(function(){ + // we validate bottom to top for easier implementation + + // curly braces + var $lineWithCurlyBraces = inner$("div").first().next().next().next(); + $lineWithCurlyBraces.sendkeys('{{}'); + pressEnter(); // cannot use sendkeys('{enter}') here, browser does not read the command properly + var $lineAfterCurlyBraces = inner$("div").first().next().next().next().next(); + expect($lineAfterCurlyBraces.text()).to.match(/\s{4}/); // tab === 4 spaces + + // parenthesis + var $lineWithParenthesis = inner$("div").first().next().next(); + $lineWithParenthesis.sendkeys('('); + pressEnter(); + var $lineAfterParenthesis = inner$("div").first().next().next().next(); + expect($lineAfterParenthesis.text()).to.match(/\s{4}/); + + // bracket + var $lineWithBracket = inner$("div").first().next(); + $lineWithBracket.sendkeys('['); + pressEnter(); + var $lineAfterBracket = inner$("div").first().next().next(); + expect($lineAfterBracket.text()).to.match(/\s{4}/); + + // colon + var $lineWithColon = inner$("div").first(); + $lineWithColon.sendkeys(':'); + pressEnter(); + var $lineAfterColon = inner$("div").first().next(); + expect($lineAfterColon.text()).to.match(/\s{4}/); + + done(); + }); + }); + + it("appends indentation to the indent of previous line if previous line ends with ':', '[', '(', or '{'", function(done){ + var inner$ = helper.padInner$; + var chrome$ = helper.padChrome$; + + //type a bit, make a line break and type again + var $firstTextElement = inner$("div").first(); + $firstTextElement.sendkeys(" line with some indentation and ':'{enter}"); + $firstTextElement.sendkeys("line 2{enter}"); + + helper.waitFor(function(){ + return inner$("div span").first().text().indexOf("line 2") === -1; + }).done(function(){ + var $lineWithColon = inner$("div").first(); + $lineWithColon.sendkeys(':'); + pressEnter(); + var $lineAfterColon = inner$("div").first().next(); + expect($lineAfterColon.text()).to.match(/\s{6}/); // previous line indentation + regular tab (4 spaces) + + done(); + }); + }); + /* it("makes text indented and outdented", function() { //get the inner iframe var $inner = testHelper.$getPadInner(); - + //get the first text element out of the inner iframe var firstTextElement = $inner.find("div").first(); @@ -87,7 +157,7 @@ describe("indentation button", function(){ //ace creates a new dom element when you press a button, so just get the first text element again var newFirstTextElement = $inner.find("div").first(); - + // is there a list-indent class element now? var firstChild = newFirstTextElement.children(":first"); var isUL = firstChild.is('ul'); @@ -160,12 +230,12 @@ describe("indentation button", function(){ /* this test creates the below content, both should have double indentation line1 line2 - + firstTextElement.sendkeys('{rightarrow}'); // simulate a keypress of enter firstTextElement.sendkeys('{enter}'); // simulate a keypress of enter firstTextElement.sendkeys('line 1'); // simulate writing the first line - firstTextElement.sendkeys('{enter}'); // simulate a keypress of enter + firstTextElement.sendkeys('{enter}'); // simulate a keypress of enter firstTextElement.sendkeys('line 2'); // simulate writing the second line //get the second text element out of the inner iframe @@ -203,3 +273,15 @@ describe("indentation button", function(){ });*/ }); + +function pressEnter(){ + var inner$ = helper.padInner$; + if(inner$(window)[0].bowser.firefox || inner$(window)[0].bowser.modernIE){ // if it's a mozilla or IE + var evtType = "keypress"; + }else{ + var evtType = "keydown"; + } + var e = inner$.Event(evtType); + e.keyCode = 13; // enter :| + inner$("#innerdocbody").trigger(e); +} From 0ab3f3133e4518310ad922f2849399f6993f6703 Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Wed, 14 Oct 2015 12:54:49 +0200 Subject: [PATCH 026/118] Localisation updates from https://translatewiki.net. --- src/locales/ar.json | 6 +++++- src/locales/es.json | 2 +- src/locales/pa.json | 23 +++++++++++++++-------- src/locales/ro.json | 14 ++++++++------ src/locales/sq.json | 2 +- src/locales/zh-hans.json | 2 +- 6 files changed, 31 insertions(+), 18 deletions(-) diff --git a/src/locales/ar.json b/src/locales/ar.json index 153faae8..33c6beb3 100644 --- a/src/locales/ar.json +++ b/src/locales/ar.json @@ -6,7 +6,8 @@ "Alami", "Meno25", "Test Create account", - "محمد أحمد عبد الفتاح" + "محمد أحمد عبد الفتاح", + "Haytham morsy" ] }, "index.newPad": "باد جديد", @@ -97,6 +98,9 @@ "timeslider.exportCurrent": "تصدير النسخة الحالية ك:", "timeslider.version": "إصدار {{version}}", "timeslider.saved": "محفوظ {{month}} {{day}}, {{year}}", + "timeslider.playPause": "تشغيل / إيقاف مؤقت محتويات الباد", + "timeslider.backRevision": "عد إلى مراجعة في هذه الباد", + "timeslider.forwardRevision": "انطلق إلى مراجعة في هذه الباد", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "يناير", "timeslider.month.february": "فبراير", diff --git a/src/locales/es.json b/src/locales/es.json index c62cacc4..b2659063 100644 --- a/src/locales/es.json +++ b/src/locales/es.json @@ -132,7 +132,7 @@ "pad.impexp.confirmimport": "Al importar un archivo se borrará el contenido actual del pad. ¿Estás seguro de que quieres continuar?", "pad.impexp.convertFailed": "No pudimos importar este archivo. Inténtalo con un formato diferente o copia y pega manualmente.", "pad.impexp.padHasData": "No hemos podido importar este archivo porque este pad ya ha tenido cambios. Importa a un nuevo pad.", - "pad.impexp.uploadFailed": "El envío falló. Intentalo de nuevo.", + "pad.impexp.uploadFailed": "El envío falló. Inténtalo de nuevo.", "pad.impexp.importfailed": "Fallo al importar", "pad.impexp.copypaste": "Intenta copiar y pegar", "pad.impexp.exportdisabled": "La exportación al formato {{type}} está desactivada. Contacta a tu administrador de sistemas." diff --git a/src/locales/pa.json b/src/locales/pa.json index 9e154e36..531e4ac8 100644 --- a/src/locales/pa.json +++ b/src/locales/pa.json @@ -2,7 +2,8 @@ "@metadata": { "authors": [ "Aalam", - "Babanwalia" + "Babanwalia", + "ਪ੍ਰਚਾਰਕ" ] }, "index.newPad": "ਨਵਾਂ ਪੈਡ", @@ -10,29 +11,31 @@ "pad.toolbar.bold.title": "ਗੂੜ੍ਹਾ (Ctrl-B)", "pad.toolbar.italic.title": "ਤਿਰਛਾ (Ctrl-I)", "pad.toolbar.underline.title": "ਹੇਠਾਂ-ਰੇਖਾ (Ctrl-U)", - "pad.toolbar.strikethrough.title": "ਵਿੰਨ੍ਹੋ ਵਿਨੋ", - "pad.toolbar.ol.title": "ਲੜੀਵਾਰ ਲਿਸਟ", + "pad.toolbar.strikethrough.title": "ਵਿੰਨ੍ਹੋ (Ctrl+5)", + "pad.toolbar.ol.title": "ਲੜੀਵਾਰ ਸੂਚੀ", "pad.toolbar.ul.title": "ਬਿਨ-ਲੜੀਬੱਧ ਸੂਚੀ", "pad.toolbar.indent.title": "ਹਾਸ਼ੀਏ ਤੋਂ ਪਰ੍ਹੇ (ਟੈਬ)", "pad.toolbar.unindent.title": "ਹਾਸ਼ੀਏ ਵੱਲ (ਸ਼ਿਫ਼ਟ+ਟੈਬ)", "pad.toolbar.undo.title": "ਵਾਪਸ (Ctrl-Z)", "pad.toolbar.redo.title": "ਪਰਤਾਓ (Ctrl-Y)", - "pad.toolbar.clearAuthorship.title": "ਪਰਮਾਣਕਿਤਾ ਰੰਗ ਸਾਫ਼ ਕਰੋ", + "pad.toolbar.clearAuthorship.title": "ਪਰਮਾਣਕਿਤਾ ਰੰਗ ਸਾਫ਼ ਕਰੋ (Ctrl+Shift+C)", "pad.toolbar.import_export.title": "ਵੱਖ-ਵੱਖ ਫਾਇਲ ਫਾਰਮੈਟ ਤੋਂ/ਵਿੱਚ ਇੰਪੋਰਟ/ਐਕਸਪੋਰਟ ਕਰੋ", "pad.toolbar.timeslider.title": "ਸਮਾਂ-ਲਕੀਰ", "pad.toolbar.savedRevision.title": "ਰੀਵਿਜ਼ਨ ਸੰਭਾਲੋ", "pad.toolbar.settings.title": "ਸੈਟਿੰਗ", "pad.toolbar.embed.title": "ਇਹ ਪੈਡ ਸਾਂਝਾ ਤੇ ਇੰਬੈੱਡ ਕਰੋ", "pad.toolbar.showusers.title": "ਇਹ ਪੈਡ ਉੱਤੇ ਯੂਜ਼ਰ ਵੇਖਾਓ", - "pad.colorpicker.save": "ਸਾਂਭੋ", + "pad.colorpicker.save": "ਸੰਭਾਲੋ", "pad.colorpicker.cancel": "ਰੱਦ ਕਰੋ", "pad.loading": "…ਲੋਡ ਕੀਤਾ ਜਾ ਰਿਹਾ ਹੈ", + "pad.noCookie": "ਕੂਕੀਜ਼ ਨਹੀਂ ਲੱਭੀਅਾਂ। ਕਿਰਪਾ ਕਰਕੇ ਬ੍ਰਾੳੂਜ਼ਰ ਵਿੱਚ ਕੂਕੀਜ਼ ਲਾਗੂ ਕਰੋ।", "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": "ਸਮੱਗਰੀ ਸੱਜੇ ਤੋਂ ਖੱਬੇ ਪੜ੍ਹਨੀ ਹੈ?", @@ -45,10 +48,11 @@ "pad.importExport.import": "ਕੋਈ ਵੀ ਟੈਕਸਟ ਫਾਇਲ ਜਾਂ ਦਸਤਾਵੇਜ਼ ਅੱਪਲੋਡ ਕਰੋ", "pad.importExport.importSuccessful": "ਸਫ਼ਲ!", "pad.importExport.export": "ਮੌਜੂਦਾ ਪੈਡ ਨੂੰ ਐਕਸਪੋਰਟ ਕਰੋ:", + "pad.importExport.exportetherpad": "ੲੈਥਰਪੈਡ", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "ਸਧਾਰਨ ਟੈਕਸਟ", "pad.importExport.exportword": "ਮਾਈਕਰੋਸਾਫਟ ਵਰਡ", - "pad.importExport.exportpdf": "ਪੀਡੀਐਫ", + "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (ਓਪਨ ਡੌਕੂਮੈਂਟ ਫਾਰਮੈਟ)", "pad.importExport.abiword.innerHTML": "ਤੁਸੀਂ ਸਿਰਫ਼ ਸਾਦੀਆਂ ਲਿਖਤੀ ਜਾਂ ਐੱਚ.ਟੀ.ਐੱਮ.ਐੱਲ. ਰੂਪ-ਰੇਖਾਵਾਂ ਤੋਂ ਦਰਾਮਦ ਕਰ ਸਕਦੇ ਹੋ। ਹੋਰ ਉੱਨਤ ਦਰਾਮਦੀ ਗੁਣਾਂ ਵਾਸਤੇ ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਐਬੀਵਰਡ ਥਾਪੋ।", "pad.modals.connected": "ਕੁਨੈਕਟ ਹੈ।", @@ -88,8 +92,11 @@ "timeslider.toolbar.authorsList": "ਕੋਈ ਲੇਖਕ ਨਹੀਂ", "timeslider.toolbar.exportlink.title": "ਐਕਸਪੋਰਟ", "timeslider.exportCurrent": "ਮੌਜੂਦਾ ਵਰਜਨ ਇੰਝ ਐਕਸਪੋਰਟ ਕਰੋ:", - "timeslider.version": "ਵਰਜਨ {{version}}", + "timeslider.version": "ਵਰਜ਼ਨ {{version}}", "timeslider.saved": "{{day}} {{month}} {{year}} ਨੂੰ ਸੰਭਾਲਿਆ", + "timeslider.playPause": "ਪੈਡ ਸਮੱਗਰੀ ਚਲਾਓ / ਵਿਰਾਮ ਕਰੋ", + "timeslider.backRevision": "ਇਸ ਪੈਡ ਵਿੱਚ ਪਿਛਲੇ ਰੀਵਿਜ਼ਨ ਤੇ ਜਾਓ", + "timeslider.forwardRevision": "ਇਸ ਪੈਡ ਵਿੱਚ ਅਗਲੇ ਰੀਵਿਜ਼ਨ ਤੇ ਜਾਓ", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "ਜਨਵਰੀ", "timeslider.month.february": "ਫ਼ਰਵਰੀ", @@ -118,5 +125,5 @@ "pad.impexp.uploadFailed": "ਅੱਪਲੋਡ ਲਈ ਫੇਲ੍ਹ ਹੈ, ਫੇਰ ਕੋਸ਼ਿਸ਼ ਕਰੋ ਜੀ।", "pad.impexp.importfailed": "ਇੰਪੋਰਟ ਫੇਲ੍ਹ ਹੈ", "pad.impexp.copypaste": "ਕਾਪੀ ਕਰੋ ਚੇਪੋ ਜੀ", - "pad.impexp.exportdisabled": "{{type}} ਰੂਪ-ਰੇਖਾ ਵਜੋਂ ਬਰਾਮਦ ਕਰਨਾ ਬੰਦ ਹੈ। ਵੇਰਵੇ ਵਾਸਤੇ ਮਿਹਰਬਾਨੀ ਕਰਕੇ ਆਪਣੇ ਸਿਸਟਮ ਦੇ ਪ੍ਰਬੰਧਕ ਨਾਲ਼ ਰਾਬਤਾ ਬਣਾਉ।" + "pad.impexp.exportdisabled": "{{type}} ਫਾਰਮੈਟ ਵਜੋਂ ਬਰਾਮਦ ਕਰਨਾ ਬੰਦ ਹੈ। ਵੇਰਵੇ ਵਾਸਤੇ ਆਪਣੇ ਸਿਸਟਮ ਦੇ ਪਰਬੰਧਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।" } diff --git a/src/locales/ro.json b/src/locales/ro.json index ce38d3f9..a73bfafc 100644 --- a/src/locales/ro.json +++ b/src/locales/ro.json @@ -4,7 +4,8 @@ "Hedwig", "ImGelu", "Minisarm", - "Strainu" + "Strainu", + "Wintereu" ] }, "index.newPad": "Pad nou", @@ -21,6 +22,7 @@ "pad.toolbar.import_export.title": "Importă/Exportă din/în diferite formate", "pad.toolbar.savedRevision.title": "Salvează revizia", "pad.toolbar.settings.title": "Setări", + "pad.toolbar.showusers.title": "Arată utilizatorii de pe acest pad", "pad.colorpicker.save": "Salvează", "pad.colorpicker.cancel": "Anulează", "pad.loading": "Se încarcă...", @@ -46,10 +48,10 @@ "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (Open Document Format)", "pad.modals.connected": "Conectat.", - "pad.modals.reconnecting": "Se reconectează la pad-ul tău..", + "pad.modals.reconnecting": "Se reconectează la pad-ul dumneavoastră..", "pad.modals.forcereconnect": "Forțează reconectarea", "pad.modals.userdup": "Deschis în altă fereastră", - "pad.modals.userdup.advice": "Reconectează pentru a folosi această fereastră în schimb", + "pad.modals.userdup.advice": "Reconectați-vă dacă doriți să utilizați această fereastră.", "pad.modals.unauth": "Nu ești autorizat", "pad.modals.initsocketfail": "Serverul nu este disponibil.", "pad.modals.initsocketfail.explanation": "Nu s-a putut conecta la serverul de sincronizare.", @@ -61,12 +63,12 @@ "pad.share": "Distribuie acest pad", "pad.share.readonly": "Doar în citire", "pad.share.link": "Legătură", - "pad.share.emebdcode": "Încorporează URL-ul", + "pad.share.emebdcode": "Adresa URL încorporată", "pad.chat": "Chat", "pad.chat.title": "Deschide chat-ul pentru acest pad.", "pad.chat.loadmessages": "Încarcă mai multe mesaje", "timeslider.toolbar.returnbutton": "Înapoi la pad", - "timeslider.toolbar.authors": "Aurori:", + "timeslider.toolbar.authors": "Autori:", "timeslider.toolbar.authorsList": "Niciun autor", "timeslider.toolbar.exportlink.title": "Exportă", "timeslider.exportCurrent": "Exportă versiunea curentă ca:", @@ -85,7 +87,7 @@ "timeslider.month.october": "octombrie", "timeslider.month.november": "noiembrie", "timeslider.month.december": "decembrie", - "pad.userlist.entername": "Introdu numele tău", + "pad.userlist.entername": "Introduceți numele dumneavoastră", "pad.userlist.unnamed": "fără nume", "pad.userlist.guest": "Oaspete", "pad.userlist.deny": "Respinge", diff --git a/src/locales/sq.json b/src/locales/sq.json index a6b3d813..506031cc 100644 --- a/src/locales/sq.json +++ b/src/locales/sq.json @@ -58,7 +58,7 @@ "pad.modals.userdup.explanation": "Ky bllok duket se gjendet i hapur në më shumë se një dritare shfletuesi në këtë kompjuter.", "pad.modals.userdup.advice": "Rilidhuni që të përdoret kjo dritare.", "pad.modals.unauth": "I paautorizuar", - "pad.modals.unauth.explanation": "Ndërkohë që shihnit këtë dritare, lejet tuaja kanë ndryshuar. Provoni të rilidheni.", + "pad.modals.unauth.explanation": "Ndërkohë që sheh këtë dritare, lejet e tua kanë ndryshuar. Provo të rilidhesh.", "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": "Nuk kapet dot shërbyesi.", diff --git a/src/locales/zh-hans.json b/src/locales/zh-hans.json index 080fb62d..15f11591 100644 --- a/src/locales/zh-hans.json +++ b/src/locales/zh-hans.json @@ -82,7 +82,7 @@ "pad.modals.badChangeset.cause": "这可能是因为服务器配置的错误或者其他未预料到的行为。如果您认为这是错误,请联系服务管理员。要继续编辑,请尝试重新连接。", "pad.modals.corruptPad.explanation": "您试图连接的记事本已损坏。", "pad.modals.corruptPad.cause": "这可能是因为服务器配置的错误或者其他未预料到的行为。请联系服务管理员。", - "pad.modals.deleted": "已刪除。", + "pad.modals.deleted": "已删除。", "pad.modals.deleted.explanation": "此记事本已被移除。", "pad.modals.disconnected": "您已断开连接。", "pad.modals.disconnected.explanation": "到服务器的连接已丢失", From 881996ef52880437b8194e89e4460e4dc72b3829 Mon Sep 17 00:00:00 2001 From: Luke Rogers Date: Thu, 15 Oct 2015 14:02:40 +1300 Subject: [PATCH 027/118] Pedantic Space <3 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 5ad3587c..cc90800f 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@ # About Etherpad is a really-real time collaborative editor maintained by the Etherpad Community. -Etherpad is written in JavaScript(99.9%) on both the server and client so it's easy for developers to maintain and add new features. Because of this Etherpad has tons of customizations that you can leverage. +Etherpad is written in JavaScript (99.9%) on both the server and client so it's easy for developers to maintain and add new features. Because of this Etherpad has tons of customizations that you can leverage. Etherpad is designed to be easily embeddable and provides a [HTTP API](https://github.com/ether/etherpad-lite/wiki/HTTP-API) that allows your web application to manage pads, users and groups. It is recommended to use the [available client implementations](https://github.com/ether/etherpad-lite/wiki/HTTP-API-client-libraries) in order to interact with this API. From a675659dc28b95f8ef5664ffe5d82cd7cf2b2577 Mon Sep 17 00:00:00 2001 From: Ted Mielczarek Date: Mon, 19 Oct 2015 12:58:47 -0400 Subject: [PATCH 028/118] Add an appendText API --- src/node/db/API.js | 32 ++++++++++++++++++++ src/node/db/Pad.js | 13 +++++++++ src/node/handler/APIHandler.js | 53 +++++++++++++++++++++++++++++++++- tests/backend/specs/api/pad.js | 31 ++++++++++++++++++-- 4 files changed, 126 insertions(+), 3 deletions(-) diff --git a/src/node/db/API.js b/src/node/db/API.js index 87b6d747..237bcb0a 100644 --- a/src/node/db/API.js +++ b/src/node/db/API.js @@ -307,6 +307,38 @@ exports.setText = function(padID, text, callback) }); } +/** +appendText(padID, text) appends text to a pad + +Example returns: + +{code: 0, message:"ok", data: null} +{code: 1, message:"padID does not exist", data: null} +{code: 1, message:"text too long", data: null} +*/ +exports.appendText = function(padID, text, callback) +{ + //text is required + if(typeof text != "string") + { + callback(new customError("text is no string","apierror")); + return; + } + + //get the pad + getPadSafe(padID, true, function(err, pad) + { + if(ERR(err, callback)) return; + + pad.appendText(text); + + //update the clients on the pad + padMessageHandler.updatePadClients(pad, callback); + }); +}; + + + /** getHTML(padID, [rev]) returns the html of a pad diff --git a/src/node/db/Pad.js b/src/node/db/Pad.js index eb6a3ed1..83e15e6d 100644 --- a/src/node/db/Pad.js +++ b/src/node/db/Pad.js @@ -303,6 +303,19 @@ Pad.prototype.setText = function setText(newText) { this.appendRevision(changeset); }; +Pad.prototype.appendText = function appendText(newText) { + //clean the new text + newText = exports.cleanText(newText); + + var oldText = this.text(); + + //create the changeset + var changeset = Changeset.makeSplice(oldText, oldText.length, 0, newText); + + //append the changeset + this.appendRevision(changeset); +}; + Pad.prototype.appendChatMessage = function appendChatMessage(text, userId, time) { this.chatHead++; //save the chat entry in the database diff --git a/src/node/handler/APIHandler.js b/src/node/handler/APIHandler.js index b4d24201..179c2b40 100644 --- a/src/node/handler/APIHandler.js +++ b/src/node/handler/APIHandler.js @@ -444,10 +444,61 @@ var version = , "getChatHead" : ["padID"] , "restoreRevision" : ["padID", "rev"] } +, "1.2.13": + { "createGroup" : [] + , "createGroupIfNotExistsFor" : ["groupMapper"] + , "deleteGroup" : ["groupID"] + , "listPads" : ["groupID"] + , "listAllPads" : [] + , "createDiffHTML" : ["padID", "startRev", "endRev"] + , "createPad" : ["padID", "text"] + , "createGroupPad" : ["groupID", "padName", "text"] + , "createAuthor" : ["name"] + , "createAuthorIfNotExistsFor": ["authorMapper" , "name"] + , "listPadsOfAuthor" : ["authorID"] + , "createSession" : ["groupID", "authorID", "validUntil"] + , "deleteSession" : ["sessionID"] + , "getSessionInfo" : ["sessionID"] + , "listSessionsOfGroup" : ["groupID"] + , "listSessionsOfAuthor" : ["authorID"] + , "getText" : ["padID", "rev"] + , "setText" : ["padID", "text"] + , "getHTML" : ["padID", "rev"] + , "setHTML" : ["padID", "html"] + , "getAttributePool" : ["padID"] + , "getRevisionsCount" : ["padID"] + , "getSavedRevisionsCount" : ["padID"] + , "listSavedRevisions" : ["padID"] + , "saveRevision" : ["padID", "rev"] + , "getRevisionChangeset" : ["padID", "rev"] + , "getLastEdited" : ["padID"] + , "deletePad" : ["padID"] + , "copyPad" : ["sourceID", "destinationID", "force"] + , "movePad" : ["sourceID", "destinationID", "force"] + , "getReadOnlyID" : ["padID"] + , "getPadID" : ["roID"] + , "setPublicStatus" : ["padID", "publicStatus"] + , "getPublicStatus" : ["padID"] + , "setPassword" : ["padID", "password"] + , "isPasswordProtected" : ["padID"] + , "listAuthorsOfPad" : ["padID"] + , "padUsersCount" : ["padID"] + , "getAuthorName" : ["authorID"] + , "padUsers" : ["padID"] + , "sendClientsMessage" : ["padID", "msg"] + , "listAllGroups" : [] + , "checkToken" : [] + , "appendChatMessage" : ["padID", "text", "authorID", "time"] + , "getChatHistory" : ["padID"] + , "getChatHistory" : ["padID", "start", "end"] + , "getChatHead" : ["padID"] + , "restoreRevision" : ["padID", "rev"] + , "appendText" : ["padID", "text"] + } }; // set the latest available API version here -exports.latestApiVersion = '1.2.12'; +exports.latestApiVersion = '1.2.13'; // exports the versions so it can be used by the new Swagger endpoint exports.version = version; diff --git a/tests/backend/specs/api/pad.js b/tests/backend/specs/api/pad.js index 14e99091..e04033c0 100644 --- a/tests/backend/specs/api/pad.js +++ b/tests/backend/specs/api/pad.js @@ -79,6 +79,8 @@ describe('Permission', function(){ -> movePad(newPadID, originalPadId) -- Should provide consistant pad data -> getText(originalPadId) -- Should be "hello world" -> getLastEdited(padID) -- Should not be 0 + -> appendText(padID, "hello") + -> getText(padID) -- Should be "hello worldhello" -> setHTML(padID) -- Should fail on invalid HTML -> setHTML(padID) *3 -- Should fail on invalid HTML -> getHTML(padID) -- Should return HTML close to posted HTML @@ -483,6 +485,30 @@ describe('getLastEdited', function(){ }); }) +describe('appendText', function(){ + it('Append text to a pad Id', function(done) { + api.get(endPoint('appendText', '1.2.13')+"&padID="+testPadId+"&text=hello") + .expect(function(res){ + if(res.body.code !== 0) throw new Error("Pad Append Text failed"); + }) + .expect('Content-Type', /json/) + .expect(200, done); + }); +}); + +describe('getText', function(){ + it('Gets text on a pad Id', function(done) { + api.get(endPoint('getText')+"&padID="+testPadId) + .expect(function(res){ + if(res.body.code !== 0) throw new Error("Pad Get Text failed"); + if(res.body.data.text !== text+"\nhello") throw new Error("Pad Text not set properly"); + }) + .expect('Content-Type', /json/) + .expect(200, done); + }); +}); + + describe('setHTML', function(){ it('Sets the HTML of a Pad attempting to pass ugly HTML', function(done) { var html = "
Hello HTML
"; @@ -542,8 +568,9 @@ describe('createPad', function(){ */ -var endPoint = function(point){ - return '/api/'+apiVersion+'/'+point+'?apikey='+apiKey; +var endPoint = function(point, version){ + version = version || apiVersion; + return '/api/'+version+'/'+point+'?apikey='+apiKey; } function makeid() From 2bfc3026d2e549064bd13e496d407169b2755df5 Mon Sep 17 00:00:00 2001 From: Simon Gaeremynck Date: Tue, 20 Oct 2015 19:46:08 +0100 Subject: [PATCH 029/118] Allow LibreOffice to be used when exporting a pad This commit adds support for LibreOffice when exporting a pad to doc, pdf, .. This commit also cleans up some export logic when exporting to txt --- settings.json.template | 6 +- src/node/handler/ExportHandler.js | 80 +++++--------------------- src/node/utils/ExportHtml.js | 31 ++++++----- src/node/utils/LibreOffice.js | 93 +++++++++++++++++++++++++++++++ src/node/utils/Settings.js | 5 ++ 5 files changed, 133 insertions(+), 82 deletions(-) create mode 100644 src/node/utils/LibreOffice.js diff --git a/settings.json.template b/settings.json.template index bfd0c7e6..321d21d6 100644 --- a/settings.json.template +++ b/settings.json.template @@ -86,10 +86,14 @@ may cause problems during deployment. Set to 0 to disable caching */ "maxAge" : 21600, // 60 * 60 * 6 = 6 hours - /* This is the path to the Abiword executable. Setting it to null, disables abiword. + /* This is the absolute path to the Abiword executable. Setting it to null, disables abiword. Abiword is needed to advanced import/export features of pads*/ "abiword" : null, + /* This is the absolute path to the soffice executable. Setting it to null, disables LibreOffice exporting. + LibreOffice can be used in lieu of Abiword to export pads */ + "soffice" : null, + /* This is the path to the Tidy executable. Setting it to null, disables Tidy. Tidy is used to improve the quality of exported pads*/ "tidyHtml" : null, diff --git a/src/node/handler/ExportHandler.js b/src/node/handler/ExportHandler.js index f861c82e..0a808977 100644 --- a/src/node/handler/ExportHandler.js +++ b/src/node/handler/ExportHandler.js @@ -30,9 +30,15 @@ var os = require('os'); var hooks = require("ep_etherpad-lite/static/js/pluginfw/hooks"); var TidyHtml = require('../utils/TidyHtml'); +var convertor = null; + //load abiword only if its enabled if(settings.abiword != null) - var abiword = require("../utils/Abiword"); + convertor = require("../utils/Abiword"); + +// Use LibreOffice if an executable has been defined in the settings +if(settings.soffice != null) + convertor = require("../utils/LibreOffice"); var tempDirectory = "/tmp"; @@ -70,71 +76,11 @@ exports.doExport = function(req, res, padId, type) } else if(type == "txt") { - var txt; - var randNum; - var srcFile, destFile; - - async.series([ - //render the txt document - function(callback) - { - exporttxt.getPadTXTDocument(padId, req.params.rev, false, function(err, _txt) - { - if(ERR(err, callback)) return; - txt = _txt; - callback(); - }); - }, - //decide what to do with the txt export - function(callback) - { - //if this is a txt export, we can send this from here directly - res.send(txt); - callback("stop"); - }, - //send the convert job to abiword - function(callback) - { - //ensure html can be collected by the garbage collector - txt = null; - - destFile = tempDirectory + "/etherpad_export_" + randNum + "." + type; - abiword.convertFile(srcFile, destFile, type, callback); - }, - //send the file - function(callback) - { - res.sendFile(destFile, null, callback); - }, - //clean up temporary files - function(callback) - { - async.parallel([ - function(callback) - { - fs.unlink(srcFile, callback); - }, - function(callback) - { - //100ms delay to accomidate for slow windows fs - if(os.type().indexOf("Windows") > -1) - { - setTimeout(function() - { - fs.unlink(destFile, callback); - }, 100); - } - else - { - fs.unlink(destFile, callback); - } - } - ], callback); - } - ], function(err) + exporttxt.getPadTXTDocument(padId, req.params.rev, false, function(err, txt) { - if(err && err != "stop") ERR(err); - }) + if(ERR(err)) return; + res.send(txt); + }); } else { @@ -183,11 +129,11 @@ exports.doExport = function(req, res, padId, type) TidyHtml.tidy(srcFile, callback); }, - //send the convert job to abiword + //send the convert job to the convertor (abiword, libreoffice, ..) function(callback) { destFile = tempDirectory + "/etherpad_export_" + randNum + "." + type; - abiword.convertFile(srcFile, destFile, type, callback); + convertor.convertFile(srcFile, destFile, type, callback); }, //send the file function(callback) diff --git a/src/node/utils/ExportHtml.js b/src/node/utils/ExportHtml.js index 53469c9b..fef2508c 100644 --- a/src/node/utils/ExportHtml.js +++ b/src/node/utils/ExportHtml.js @@ -123,8 +123,8 @@ function getHTMLFromAtext(pad, atext, authorColors) var newLength = props.push(propName); anumMap[a] = newLength -1; - css+=".removed {text-decoration: line-through; " + - "-ms-filter:'progid:DXImageTransform.Microsoft.Alpha(Opacity=80)'; "+ + css+=".removed {text-decoration: line-through; " + + "-ms-filter:'progid:DXImageTransform.Microsoft.Alpha(Opacity=80)'; "+ "filter: alpha(opacity=80); "+ "opacity: 0.8; "+ "}\n"; @@ -287,7 +287,7 @@ function getHTMLFromAtext(pad, atext, authorColors) 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), ""); @@ -401,7 +401,7 @@ function getHTMLFromAtext(pad, atext, authorColors) pieces.push('

'); } }*/ - else//means we are getting closer to the lowest level of indentation or are at the same level + else//means we are getting closer to the lowest level of indentation or are at the same level { var toClose = lists.length > 0 ? listLevels[listLevels.length - 2] - line.listLevel : 0 if( toClose > 0){ @@ -455,7 +455,7 @@ function getHTMLFromAtext(pad, atext, authorColors) } } } - + for (var k = lists.length - 1; k >= 0; k--) { if(lists[k][1] == "number") @@ -484,14 +484,17 @@ exports.getPadHTMLDocument = function (padId, revNum, noDocType, callback) stylesForExportCSS += css; }); // Core inclusion of head etc. - var head = - (noDocType ? '' : '\n') + - '\n' + (noDocType ? '' : '\n' + + var head = + (noDocType ? '' : '\n') + + '\n' + (noDocType ? '' : '\n' + '' + Security.escapeHTML(padId) + '\n' + - '\n' + - '\n' + '\n') + + stylesForExportCSS + + '\n' + '\n') + ''; var foot = '\n\n'; diff --git a/src/node/utils/LibreOffice.js b/src/node/utils/LibreOffice.js new file mode 100644 index 00000000..41577245 --- /dev/null +++ b/src/node/utils/LibreOffice.js @@ -0,0 +1,93 @@ +/** + * Controls the communication with LibreOffice + */ + +/* + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS-IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +var async = require("async"); +var fs = require("fs"); +var os = require("os"); +var path = require("path"); +var settings = require("./Settings"); +var spawn = require("child_process").spawn; + +// Conversion tasks will be queued up, so we don't overload the system +var queue = async.queue(doConvertTask, 1); + +/** + * Convert a file from one type to another + * + * @param {String} srcFile The path on disk to convert + * @param {String} destFile The path on disk where the converted file should be stored + * @param {String} type The type to convert into + * @param {Function} callback Standard callback function + */ +exports.convertFile = function(srcFile, destFile, type, callback) { + queue.push({"srcFile": srcFile, "destFile": destFile, "type": type, "callback": callback}); +}; + +function doConvertTask(task, callback) { + var tmpDir = os.tmpdir(); + + async.series([ + // Generate a PDF file with LibreOffice + function(callback) { + var soffice = spawn(settings.soffice, [ + '--headless', + '--invisible', + '--nologo', + '--nolockcheck', + '--convert-to', task.type, + task.srcFile, + '--outdir', tmpDir + ]); + + var stdoutBuffer = ''; + + // Delegate the processing of stdout to another function + soffice.stdout.on('data', function(data) { + stdoutBuffer += data.toString(); + }); + + // Append error messages to the buffer + soffice.stderr.on('data', function(data) { + stdoutBuffer += data.toString(); + }); + + // Throw an exception if libreoffice failed + soffice.on('exit', function(code) { + if (code != 0) { + return callback("LibreOffice died with exit code " + code + " and message: " + stdoutBuffer); + } + + callback(); + }) + }, + + // Move the PDF file to the correct place + function(callback) { + var filename = path.basename(task.srcFile); + var pdfFilename = filename.substr(0, filename.lastIndexOf('.')) + '.' + task.type; + var pdfPath = path.join(tmpDir, pdfFilename); + fs.rename(pdfPath, task.destFile, callback); + } + ], function(err) { + // Invoke the callback for the local queue + callback(); + + // Invoke the callback for the task + task.callback(err); + }); +} diff --git a/src/node/utils/Settings.js b/src/node/utils/Settings.js index 2c2f90bf..d03e2a6c 100644 --- a/src/node/utils/Settings.js +++ b/src/node/utils/Settings.js @@ -152,6 +152,11 @@ exports.minify = true; */ exports.abiword = null; +/** + * The path of the libreoffice executable + */ +exports.soffice = null; + /** * The path of the tidy executable */ From 82c7ca4ac3531da85d0a618b1d386fcc9b804b21 Mon Sep 17 00:00:00 2001 From: John McLear Date: Thu, 22 Oct 2015 01:32:02 +0100 Subject: [PATCH 030/118] add classes for bootstrap targeting, pew pew --- src/static/js/ace.js | 4 ++-- src/static/js/ace2_inner.js | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/static/js/ace.js b/src/static/js/ace.js index c446939a..455bfaa3 100644 --- a/src/static/js/ace.js +++ b/src/static/js/ace.js @@ -265,7 +265,7 @@ plugins.ensure(function () {\n\ iframeHTML: iframeHTML }); - iframeHTML.push(' '); + iframeHTML.push(' '); // Expose myself to global for my child frame. var thisFunctionsName = "ChildAccessibleAce2Editor"; @@ -315,7 +315,7 @@ window.onload = function () {\n\ // bizarrely, in FF2, a file with no "external" dependencies won't finish loading properly // (throbs busy while typing) - outerHTML.push('', '', scriptTag(outerScript), '
x
'); + outerHTML.push('', '', scriptTag(outerScript), '
x
'); var outerFrame = document.createElement("IFRAME"); outerFrame.name = "ace_outer"; diff --git a/src/static/js/ace2_inner.js b/src/static/js/ace2_inner.js index d1657a7c..00dcd4e9 100644 --- a/src/static/js/ace2_inner.js +++ b/src/static/js/ace2_inner.js @@ -5347,8 +5347,9 @@ function Ace2Inner(){ function initLineNumbers() { lineNumbersShown = 1; - sideDiv.innerHTML = '
1
'; + sideDiv.innerHTML = '
1
'; sideDivInner = outerWin.document.getElementById("sidedivinner"); + $(sideDiv).addClass("sidediv"); } function updateLineNumbers() From f57aaa62fc310d21b1d2e1477b308cf9853157ae Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Thu, 22 Oct 2015 11:32:46 +0200 Subject: [PATCH 031/118] Localisation updates from https://translatewiki.net. --- src/locales/olo.json | 5 +++-- src/locales/sq.json | 8 +++++--- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/locales/olo.json b/src/locales/olo.json index b65e8ebb..e8db16f7 100644 --- a/src/locales/olo.json +++ b/src/locales/olo.json @@ -2,7 +2,8 @@ "@metadata": { "authors": [ "Denö", - "Mashoi7" + "Mashoi7", + "Ilja.mos" ] }, "pad.toolbar.underline.title": "Alleviivua (Ctrl+U)", @@ -36,7 +37,7 @@ "timeslider.month.january": "pakkaskuudu", "timeslider.month.february": "tuhukuudu", "timeslider.month.march": "kevätkuudu", - "timeslider.month.april": "kevätkuudu", + "timeslider.month.april": "sulakuudu", "timeslider.month.may": "oraskuudu", "timeslider.month.june": "kezäkuudu", "timeslider.month.july": "heinykuudu", diff --git a/src/locales/sq.json b/src/locales/sq.json index 506031cc..a465cfaa 100644 --- a/src/locales/sq.json +++ b/src/locales/sq.json @@ -5,7 +5,7 @@ "Kosovastar" ] }, - "index.newPad": "Bllok i Ri", + "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)", @@ -13,7 +13,7 @@ "pad.toolbar.strikethrough.title": "Hequrvije (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": "Brendazi (TAB)", + "pad.toolbar.indent.title": "E dhëmbëzuar (TAB)", "pad.toolbar.unindent.title": "Jashtazi (Shift+TAB)", "pad.toolbar.undo.title": "Zhbëje (Ctrl-Z)", "pad.toolbar.redo.title": "Ribëje (Ctrl-Y)", @@ -21,7 +21,7 @@ "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.settings.title": "Rregullime", + "pad.toolbar.settings.title": "Parametrat", "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", @@ -45,6 +45,7 @@ "pad.importExport.import": "Ngarkoni cilëndo kartelë teksti ose dokument", "pad.importExport.importSuccessful": "Me sukses!", "pad.importExport.export": "Eksportojeni bllokun e tanishëm si:", + "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Tekst të thjeshtë", "pad.importExport.exportword": "Microsoft Word", @@ -90,6 +91,7 @@ "timeslider.exportCurrent": "Eksportojeni versionin e tanishëm si:", "timeslider.version": "Versioni {{version}}", "timeslider.saved": "Ruajtur më {{month}} {{day}}, {{year}}", + "timeslider.playPause": "Luaj përmbajtjet e Pad / Pauzo", "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Janar", "timeslider.month.february": "Shkurt", From 7289e8907028520fcc16d31b67827d44054145e6 Mon Sep 17 00:00:00 2001 From: Simon Gaeremynck Date: Thu, 22 Oct 2015 16:09:44 +0100 Subject: [PATCH 032/118] Use `Etherpad` rather than `Etherpad Lite` when exporting HTML --- src/node/utils/ExportHtml.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/node/utils/ExportHtml.js b/src/node/utils/ExportHtml.js index fef2508c..ffc7bc58 100644 --- a/src/node/utils/ExportHtml.js +++ b/src/node/utils/ExportHtml.js @@ -488,9 +488,9 @@ exports.getPadHTMLDocument = function (padId, revNum, noDocType, callback) (noDocType ? '' : '\n') + '\n' + (noDocType ? '' : '\n' + '' + Security.escapeHTML(padId) + '\n' + - '\n' + - '\n' + - '\n' + + '\n' + + '\n' + + '\n' + '\n' + '', '', scriptTag(outerScript), '
x
'); + var testHTML = 'WONT WORK in Chrome'; + + outerHTML.push('', '', scriptTag(outerScript), '
x
'+testHTML+''); var outerFrame = document.createElement("IFRAME"); outerFrame.name = "ace_outer"; + outerFrame.setAttribute("sandbox", "allow-same-origin allow-scripts allow-popups allow-forms allow-modals"); outerFrame.frameBorder = 0; // for IE outerFrame.title = "Ether"; info.frame = outerFrame; diff --git a/src/static/js/ace2_inner.js b/src/static/js/ace2_inner.js index ccc16668..4473126c 100644 --- a/src/static/js/ace2_inner.js +++ b/src/static/js/ace2_inner.js @@ -5006,8 +5006,14 @@ function Ace2Inner(){ }); }) +/* + $(root).on("dragend", function(e){ + top.console.log("dragend"); + }); + $(root).on("drop", function(e){ + top.console.log("DROP"); if(e.target.a || e.target.localName === "a"){ e.preventDefault(); } @@ -5020,7 +5026,7 @@ function Ace2Inner(){ e: e }); }); - +*/ // CompositionEvent is not implemented below IE version 8 if ( !(browser.msie && parseInt(browser.version <= 9)) && document.documentElement) @@ -5444,6 +5450,7 @@ function Ace2Inner(){ lineNumbersShown++; var n = lineNumbersShown; var div = odoc.createElement("DIV"); + //calculate height for new line number if(b){ var h = (b.clientHeight || b.offsetHeight); diff --git a/src/static/js/domline.js b/src/static/js/domline.js index 03f1b9c8..013f713d 100644 --- a/src/static/js/domline.js +++ b/src/static/js/domline.js @@ -70,6 +70,7 @@ domline.createDomLine = function(nonEmpty, doesWrap, optBrowser, optDocument) if (document) { result.node = document.createElement("div"); + result.node.setAttribute("contentEditable", true); // Works but doesn't allow drag n drop ;( } else { @@ -80,7 +81,7 @@ domline.createDomLine = function(nonEmpty, doesWrap, optBrowser, optDocument) } var html = []; - var preHtml = '', + var preHtml = '', postHtml = ''; var curHTML = null; diff --git a/src/static/js/pad.js b/src/static/js/pad.js index eb90a883..394d853e 100644 --- a/src/static/js/pad.js +++ b/src/static/js/pad.js @@ -513,7 +513,7 @@ var pad = { _afterHandshake: function() { pad.clientTimeOffset = new Date().getTime() - clientVars.serverTimestamp; - + //initialize the chat chat.init(this); getParams(); From 2e81b390285811fb06923d35c67c7268edc238e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Tue, 29 Dec 2015 10:44:17 +0100 Subject: [PATCH 068/118] Localisation updates from https://translatewiki.net. --- src/locales/bn.json | 31 +++++++++----- src/locales/ca.json | 7 ++-- src/locales/eu.json | 7 +++- src/locales/gu.json | 56 +++++++++++++++++++++++++ src/locales/ku-latn.json | 5 ++- src/locales/lki.json | 71 +++++++++++++++++++++++++++---- src/locales/nl.json | 3 +- src/locales/pl.json | 7 ++-- src/locales/sd.json | 91 ++++++++++++++++++++++++++++++++++++++++ src/locales/sq.json | 42 +++++++++++-------- 10 files changed, 272 insertions(+), 48 deletions(-) create mode 100644 src/locales/gu.json create mode 100644 src/locales/sd.json diff --git a/src/locales/bn.json b/src/locales/bn.json index e8bb7ac3..5c9b6848 100644 --- a/src/locales/bn.json +++ b/src/locales/bn.json @@ -10,11 +10,12 @@ }, "index.newPad": "নতুন প্যাড", "index.createOpenPad": "অথবা নাম লিখে প্যাড খুলুন/তৈরী করুন:", - "pad.toolbar.bold.title": "গাড় করা (Ctrl-B)", - "pad.toolbar.italic.title": "বাঁকা করা (Ctrl-I)", - "pad.toolbar.underline.title": "আন্ডারলাইন (Ctrl-U)", - "pad.toolbar.strikethrough.title": "স্ট্রাইক্থ্রু", - "pad.toolbar.ol.title": "সারিবদ্ধ তালিকা", + "pad.toolbar.bold.title": "গাঢ় (Ctrl-B)", + "pad.toolbar.italic.title": "বাঁকা (Ctrl+I)", + "pad.toolbar.underline.title": "নিম্নরেখা (Ctrl+U)", + "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.undo.title": "বাতিল করুন (Ctrl-Z)", @@ -27,24 +28,28 @@ "pad.toolbar.showusers.title": "এই প্যাডের ব্যবহারকারীদের দেখান", "pad.colorpicker.save": "সংরক্ষণ", "pad.colorpicker.cancel": "বাতিল", - "pad.loading": "লোডিং...", + "pad.loading": "লোড হচ্ছে...", + "pad.noCookie": "কুকি পাওয়া যায়নি। দয়া করে আপনার ব্রাউজারে কুকি অনুমতি দিন!", "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.fontType": "ফন্ট-এর প্রকার:", + "pad.settings.rtlcheck": "ডান থেকে বামে বিষয়বস্তু পড়বেন?", + "pad.settings.fontType": "ফন্টের প্রকার:", "pad.settings.fontType.normal": "সাধারণ", "pad.settings.fontType.monospaced": "Monospace", "pad.settings.globalView": "সর্বব্যাপী দৃশ্য", "pad.settings.language": "ভাষা:", "pad.importExport.import_export": "আমদানি/রপ্তানি", - "pad.importExport.import": "কোন টেক্সট ফাইল বা ডকুমেন্ট আপলোড করুন", + "pad.importExport.import": "কোন টেক্সট ফাইল বা নথি আপলোড করুন", "pad.importExport.importSuccessful": "সফল!", "pad.importExport.export": "এই প্যাডটি রপ্তানি করুন:", + "pad.importExport.exportetherpad": "ইথারপ্যাড", "pad.importExport.exporthtml": "এইচটিএমএল", "pad.importExport.exportplain": "সাধারণ লেখা", "pad.importExport.exportword": "মাইক্রোসফট ওয়ার্ড", @@ -55,9 +60,11 @@ "pad.modals.forcereconnect": "পুনরায় সংযোগস্থাপনের চেষ্টা", "pad.modals.userdup": "অন্য উইন্ডো-তে খোলা হয়েছে", "pad.modals.unauth": "আপনার অধিকার নেই", - "pad.modals.initsocketfail": "সার্ভার-এর সাথে যোগাযোগ করতে অসক্ষম।", + "pad.modals.initsocketfail": "সার্ভারে পৌঁছানো যাচ্ছে না।", + "pad.modals.slowcommit.explanation": "সার্ভার সাড়া দিচ্ছে না।", "pad.modals.deleted": "অপসারিত।", "pad.modals.deleted.explanation": "এই প্যাডটি অপসারণ করা হয়েছে।", + "pad.modals.disconnected": "আপনি সংযোগ বিচ্ছিন্ন হয়েছে গেছে।", "pad.modals.disconnected.explanation": "সার্ভারের সাথে যোগাযোগ করা যাচ্ছে না", "pad.share": "শেয়ার করুন", "pad.share.readonly": "শুধু পড়া", @@ -86,11 +93,13 @@ "timeslider.month.october": "অক্টোবর", "timeslider.month.november": "নভেম্বর", "timeslider.month.december": "ডিসেম্বর", - "pad.userlist.entername": "আপনার নাম", + "timeslider.unnamedauthors": "নামবিহীন {{num}} জন {[plural(num) one: লেখক, other: লেখক ]}", + "pad.userlist.entername": "আপনার নাম লিখুন", "pad.userlist.unnamed": "কোন নাম নির্বাচন করা হয়নি", "pad.userlist.guest": "অতিথি", "pad.userlist.approve": "অনুমোদিত", "pad.impexp.importbutton": "এখন আমদানি করুন", "pad.impexp.importing": "আমদানি হচ্ছে...", - "pad.impexp.importfailed": "আমদানি ব্যর্থ" + "pad.impexp.importfailed": "আমদানি ব্যর্থ", + "pad.impexp.copypaste": "দয়া করে অনুলিপি প্রতিলেপন করুন" } diff --git a/src/locales/ca.json b/src/locales/ca.json index f6526f1b..40a833d0 100644 --- a/src/locales/ca.json +++ b/src/locales/ca.json @@ -7,7 +7,8 @@ "Toniher", "Macofe", "Joan manel", - "Eduardo Martinez" + "Eduardo Martinez", + "Jaumeortola" ] }, "index.newPad": "Nou pad", @@ -75,7 +76,7 @@ "pad.modals.slowcommit.explanation": "El servidor no respon.", "pad.modals.slowcommit.cause": "Això podria ser a causa de problemes amb la connectivitat de la xarxa.", "pad.modals.badChangeset.explanation": "El servidor de sincronització ha classificat com a il·legat una edició que heu fet.", - "pad.modals.badChangeset.cause": "Això pot ser degut a una configuració errònia del servidor o a algun altre comportament inesperat. Si us plau, si considereu que això és un error, contacteu amb l'administrador del servei. Intenteu reconnectar-vos per tal de continuar editant.", + "pad.modals.badChangeset.cause": "Això pot ser degut a una configuració errònia del servidor o a algun altre comportament inesperat. Si considereu que és un error, contacteu amb l'administrador del servei. Intenteu reconnectar-vos per a continuar editant.", "pad.modals.corruptPad.explanation": "El pad al qual esteu intentant accedir està corrupte.", "pad.modals.corruptPad.cause": "Això pot ser degut a una configuració errònia del servidor o a algun altre comportament inesperat. Si us plau, contacteu amb l'administrador del servei.", "pad.modals.deleted": "Suprimit.", @@ -99,7 +100,7 @@ "timeslider.version": "Versió {{version}}", "timeslider.saved": "Desat {{month}} {{day}}, {{year}}", "timeslider.playPause": "Reproducció / Pausa els continguts del pad", - "timeslider.backRevision": "Tornar una revisió enrera en aquest Pad", + "timeslider.backRevision": "Tornar una revisió enrere en aquest Pad", "timeslider.forwardRevision": "Anar una revisió endavant en aquest Pad", "timeslider.dateformat": "{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Gener", diff --git a/src/locales/eu.json b/src/locales/eu.json index 5a392013..4ef45185 100644 --- a/src/locales/eu.json +++ b/src/locales/eu.json @@ -29,12 +29,14 @@ "pad.colorpicker.save": "Gorde", "pad.colorpicker.cancel": "Utzi", "pad.loading": "Kargatzen...", + "pad.noCookie": "Cookiea ez da aurkitu. Mesedez, gaitu cookieak zure nabigatzailean!", "pad.passwordRequired": "Pasahitza behar duzu pad honetara sartzeko", "pad.permissionDenied": "Ez duzu bamienik pad honetara sartzeko", "pad.wrongPassword": "Zure pasahitza oker zegoen", "pad.settings.padSettings": "Pad hobespenak", "pad.settings.myView": "Nire ikusmoldea", "pad.settings.stickychat": "Txata beti pantailan", + "pad.settings.chatandusers": "Erakutsi txata eta erabiltzaileak", "pad.settings.colorcheck": "Egiletzaren koloreak", "pad.settings.linenocheck": "Lerro zenbakiak", "pad.settings.rtlcheck": "Edukia eskubitik ezkerrera irakurri?", @@ -69,11 +71,12 @@ "pad.modals.initsocketfail.cause": "Ziurrenik hau zure nabigatzailea edo internet konexioaren arazo bat dela eta izango da.", "pad.modals.slowcommit.explanation": "Zerbitzariak ez du erantzuten.", "pad.modals.slowcommit.cause": "Baliteke hau sarearen konexio arazoak direla eta izatea.", + "pad.modals.badChangeset.explanation": "Sinkronizazio zerbitzariak, zuk egindako aldaketa bat legez kanpokotzat jo du.", "pad.modals.deleted": "Ezabatua.", "pad.modals.deleted.explanation": "Pad hau ezabatua izan da.", "pad.modals.disconnected": "Deskonektatua izan zara.", "pad.modals.disconnected.explanation": "Zerbitzariaren konexioa galdu da", - "pad.modals.disconnected.cause": "Baliteke zerbitzaria irisgarria ez izatea. Mesedez, esaiguzu hau gertatzen jarraitzen badu.", + "pad.modals.disconnected.cause": "Baliteke zerbitzaria eskuragarri ez egotea. Mesedez, jakinarazi zerbitzuko administrariari honek gertatzen jarraitzen badu.", "pad.share": "Pad hau partekatu", "pad.share.readonly": "Irakurtzeko bakarrik", "pad.share.link": "Lotura", @@ -102,7 +105,7 @@ "timeslider.month.october": "Urria", "timeslider.month.november": "Azaroa", "timeslider.month.december": "Abendua", - "timeslider.unnamedauthors": "{{num}} izenik gabeko egileak", + "timeslider.unnamedauthors": "{{num}} izenik gabeko {[plural(num) one: egilea, other: egileak]}", "pad.savedrevs.marked": "Berrikuspen hau markatua dago gordetako berrikuspen gisa", "pad.userlist.entername": "Sartu zure erabiltzaile izena", "pad.userlist.unnamed": "izenik gabe", diff --git a/src/locales/gu.json b/src/locales/gu.json new file mode 100644 index 00000000..00a1a5fa --- /dev/null +++ b/src/locales/gu.json @@ -0,0 +1,56 @@ +{ + "@metadata": { + "authors": [ + "Bhatakati aatma", + "Harsh4101991", + "KartikMistry" + ] + }, + "index.newPad": "નવું પેડ", + "pad.toolbar.bold.title": "બોલ્ડ", + "pad.toolbar.settings.title": "ગોઠવણીઓ", + "pad.colorpicker.save": "સાચવો", + "pad.colorpicker.cancel": "રદ્દ કરો", + "pad.loading": "લાવે છે...", + "pad.noCookie": "કુકી મળી નહી. આપના બ્રાઉઝર સેટિંગમાં જઇ કુકી સક્રિય કરો!", + "pad.passwordRequired": "તમારે આ પેડના ઉપયોગ માટે ગુપ્તસંજ્ઞાની જરુર પડશે", + "pad.permissionDenied": "આ પેડના ઉપયોગની આપને પરવાનગી નથી", + "pad.wrongPassword": "આપની ગુપ્તસંજ્ઞા ખોટી છે", + "pad.settings.padSettings": "પેડ ગોઠવણીઓ", + "pad.settings.myView": "મારા મતે", + "pad.settings.fontType.normal": "સામાન્ય", + "pad.settings.fontType.monospaced": "મોનોસ્પેસ", + "pad.settings.language": "ભાષા:", + "pad.importExport.import_export": "આયાત/નિકાસ", + "pad.importExport.importSuccessful": "સફળ!", + "pad.importExport.exporthtml": "HTML", + "pad.importExport.exportplain": "સાદું લખાણ", + "pad.importExport.exportword": "માઇક્રોસોફ્ટ વર્ડ", + "pad.importExport.exportpdf": "PDF", + "pad.importExport.exportopen": "ODF (ઓપન ડોક્યુમેન્ટ ફોરમેટ)", + "pad.importExport.abiword.innerHTML": "આપ માત્ર સાદુ લખાણ અથવા HTML આયાત કરી શકો છો. વધુ અધ્યતન આયાત સુવિધા માટે abiword ઇન્સ્ટોલ કરો.", + "pad.modals.connected": "જોડાયેલું", + "pad.chat": "વાતચીત", + "pad.chat.title": "આ પેડ માટે વાતચીત ખોલો.", + "pad.chat.loadmessages": "વધુ સંદેશાઓ લાવો", + "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.importing": "આયાત કરે છે..." +} diff --git a/src/locales/ku-latn.json b/src/locales/ku-latn.json index b1713b50..2aa4fda7 100644 --- a/src/locales/ku-latn.json +++ b/src/locales/ku-latn.json @@ -4,7 +4,8 @@ "Bikarhêner", "Dilyaramude", "George Animal", - "Gomada" + "Gomada", + "Mehk63" ] }, "index.newPad": "Bloknota nû", @@ -67,7 +68,7 @@ "timeslider.month.august": "gelawêj", "timeslider.month.september": "rezber", "timeslider.month.october": "kewçêr", - "timeslider.month.november": "sermawez", + "timeslider.month.november": "Mijdar", "timeslider.month.december": "berfanbar", "pad.userlist.entername": "Navê xwe têkeve", "pad.userlist.unnamed": "nenavkirî", diff --git a/src/locales/lki.json b/src/locales/lki.json index b7436298..83101eba 100644 --- a/src/locales/lki.json +++ b/src/locales/lki.json @@ -1,7 +1,8 @@ { "@metadata": { "authors": [ - "Hosseinblue" + "Hosseinblue", + "Arash71" ] }, "index.newPad": "تازۀpad", @@ -9,30 +10,34 @@ "pad.toolbar.bold.title": "پررنگ-تئژ(Ctrl-B)", "pad.toolbar.italic.title": "ایتالیک (Ctrl-I)", "pad.toolbar.underline.title": "ژئر خطی(Ctrl-U)", - "pad.toolbar.strikethrough.title": "خط هوواردئ", - "pad.toolbar.ol.title": "فئرست رزگی-مرتب", - "pad.toolbar.ul.title": "نۀچنریا-نامرتب", + "pad.toolbar.strikethrough.title": "(Ctrl+5)خط هوواردێ", + "pad.toolbar.ol.title": " (Ctrl+5)لیست مرتب بی", + "pad.toolbar.ul.title": "(Ctrl+5)لیست شؤیا/نامرتب", "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": "پاکاکردن رنگۀل تالیفی", + "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": "نیشان دائن کاربر ئۀ نؤم ئئ\npad", "pad.colorpicker.save": "ذخیرۀ", - "pad.colorpicker.cancel": "ئآهووسانن-لغو", + "pad.colorpicker.cancel": "ئآهووسانن/لغو", "pad.loading": "...(loading)بارنیائن", + "pad.noCookie": "کوکی یافت نشد. لطفاً اجازهٔ اجرای کوکی در مروگرتان را بدهید!", "pad.passwordRequired": "هؤمۀ رمزتؤنه گرۀکۀ-لازمۀ ئۀرا اتصال ئئ \npad", + "pad.permissionDenied": "شما اجازه‌ی دسترسی به این دفترچه یادداشت را ندارید", "pad.wrongPassword": "رمزۀ تؤن دؤرس نیۀ", "pad.settings.padSettings": "pad تنظیمۀل", "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": "پئنی-پهنا", @@ -41,17 +46,57 @@ "pad.importExport.import_export": "در بردن/ئه نؤم ئآووردن", "pad.importExport.import": "بارنیائن هر جور نوشته یا سندئ", "pad.importExport.importSuccessful": "! موفق بی-پیرووز بی", + "pad.importExport.export": ":برون‌ریزی این دفترچه یادداشت با قالب", + "pad.importExport.exportetherpad": "اترپد", "pad.importExport.exporthtml": "html", "pad.importExport.exportplain": "متن پئن-درئژ", "pad.importExport.exportword": "مایکروسافت وورد", "pad.importExport.exportpdf": "پی دی اف", + "pad.importExport.exportopen": " (قالب سند باز)ODF", + "pad.importExport.abiword.innerHTML": "شما تنها می‌توانید از قالب متن ساده یا اچ‌تی‌ام‌ال درون‌ریزی کنید. برای بیشتر شدن ویژگی‌های درون‌ریزی پیشرفته 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.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.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": "لینک", + "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.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": "(مانگ ئێد(اسفندگان", @@ -64,12 +109,22 @@ "timeslider.month.october": "(ماڵه ژێر دوماێنه(مهر", "timeslider.month.november": "آبان)تویل ته کن)", "timeslider.month.december": "(مانگه سێه(آذر", + "timeslider.unnamedauthors": " نویسندة بی‌ نام{{num}}", + "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.importfailed": "وارد نؤنئ-خطای واردکردن" + "pad.impexp.confirmimport": "با درون‌ریزی یک پرونده نوشتهٔ کنونی دفترچه پاک می‌شود. آیا می‌خواهید ادامه دهید؟", + "pad.impexp.convertFailed": "ما نمی‌توانیم این پرونده را درون‌ریزی کنیم. خواهشمندیم قالب دیگری برای سندتان انتخاب کرده یا بصورت دستی آنرا کپی کنید", + "pad.impexp.padHasData": "امکان درون‌ریز این پرونده نیست زیرا این پد تغییر کرده‌است. لطفاً در پد جدید درون‌ریزی کنید.", + "pad.impexp.uploadFailed": "آپلود انجام نشد، دوباره تلاش کنید", + "pad.impexp.importfailed": "وارد نؤنئ-خطای واردکردن", + "pad.impexp.copypaste": "کپی پیست کنید", + "pad.impexp.exportdisabled": "برون‌ریزی با قالب {{type}} از کار افتاده است. برای جزئیات بیشتر با مدیر سیستمتان تماس بگیرید." } diff --git a/src/locales/nl.json b/src/locales/nl.json index d58fabb9..7c83f436 100644 --- a/src/locales/nl.json +++ b/src/locales/nl.json @@ -3,7 +3,8 @@ "authors": [ "Siebrand", "Macofe", - "Robin0van0der0vliet" + "Robin0van0der0vliet", + "Robin van der Vliet" ] }, "index.newPad": "Nieuw pad", diff --git a/src/locales/pl.json b/src/locales/pl.json index bcd7a0ef..78e84ab1 100644 --- a/src/locales/pl.json +++ b/src/locales/pl.json @@ -6,7 +6,8 @@ "WTM", "Woytecr", "Macofe", - "Pan Cube" + "Pan Cube", + "Mateon1" ] }, "index.newPad": "Nowy dokument", @@ -15,8 +16,8 @@ "pad.toolbar.italic.title": "Kursywa (Ctrl-I)", "pad.toolbar.underline.title": "Podkreślenie (Ctrl-U)", "pad.toolbar.strikethrough.title": "Przekreślenie", - "pad.toolbar.ol.title": "Lista uporządkowana", - "pad.toolbar.ul.title": "Lista nieuporządkowana", + "pad.toolbar.ol.title": "Lista uporządkowana (Ctrl+Shift+N)", + "pad.toolbar.ul.title": "Lista nieuporządkowana (Ctrl+Shift+L)", "pad.toolbar.indent.title": "Wcięcie (TAB)", "pad.toolbar.unindent.title": "Wcięcie (Shift + TAB)", "pad.toolbar.undo.title": "Cofnij (Ctrl-Z)", diff --git a/src/locales/sd.json b/src/locales/sd.json new file mode 100644 index 00000000..bf8a36e5 --- /dev/null +++ b/src/locales/sd.json @@ -0,0 +1,91 @@ +{ + "@metadata": { + "authors": [ + "Mehtab ahmed" + ] + }, + "index.newPad": "نئين پٽي", + "index.createOpenPad": "يا نالي سان ڪا پٽي تخليق ڪريو\\کوليو:", + "pad.toolbar.bold.title": "وزني (Ctrl+B)", + "pad.toolbar.italic.title": "اطالوي (Ctrl+I)", + "pad.toolbar.underline.title": "هيٺان سٽ ڏيو (Ctrl+U)", + "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.undo.title": "اڻ ڪريو (Ctrl+Z)", + "pad.toolbar.redo.title": "ٻيهر ڪريو (Ctrl+Y)", + "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.stickychat": "ڳالھ ٻولھ هميشه پردي تي ڪريو", + "pad.settings.chatandusers": "ڳالھ ٻولھ ۽ يوزر ڏيکاريو", + "pad.settings.linenocheck": "سٽ جا انگ", + "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.exporthtml": "HTML", + "pad.importExport.exportplain": "سادو متن", + "pad.importExport.exportword": "مائيڪرسافٽ ورڊ", + "pad.importExport.exportpdf": "PDF", + "pad.importExport.exportopen": "ODF (کليل دستاويز فارميٽ)", + "pad.modals.connected": "ڳنڍيل.", + "pad.modals.reconnecting": "توهان جي پٽي سان ٻيهر ڳنڍي رهيو آهي...", + "pad.modals.forcereconnect": "جبري طور ٻيهر ڳنڍيو", + "pad.modals.userdup": "هڪ ٻي دري ۾ کليل", + "pad.modals.unauth": "اختيار نه آهي", + "pad.modals.initsocketfail": "سَروَرَ کي پڄي نٿو سگھجي.", + "pad.modals.slowcommit.explanation": "سَروَر جواب نٿو ڏي.", + "pad.modals.corruptPad.explanation": "جيڪا پٽي توهان حاصل ڪرڻ چاهيو ٿا اها بدعنوان آهي.", + "pad.modals.deleted": "ختم ڪيل.", + "pad.modals.deleted.explanation": "هي پٽي هٽائجي چڪي آهي.", + "pad.modals.disconnected": "توهان سان ڳانڍاپو ختم ڪيو ويو آهي.", + "pad.share": "هي پٽي ونڊيو", + "pad.share.readonly": "صرف پڙهو", + "pad.share.link": "ڳنڍڻو", + "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.version": "ورزن {{version}}", + "timeslider.saved": "شانڍيل {{مهينو}} {{ڏينهن}}, {{سال}}", + "timeslider.dateformat": "{{مهينو}}/{{ڏينهن}}/{{سال}} {{ڪلاڪ}}:{{منٽ}}:{{سيڪنڊ}}", + "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.importing": "درآمد ڪندي...", + "pad.impexp.uploadFailed": "چاڙھ ناڪام ويو، براءِ مهرباني ٻيهر ڪوشش ڪريو", + "pad.impexp.importfailed": "درآمد ناڪام", + "pad.impexp.copypaste": "براءِ مهرباني ڪاپي ڪري لڳايو" +} diff --git a/src/locales/sq.json b/src/locales/sq.json index a465cfaa..24494f79 100644 --- a/src/locales/sq.json +++ b/src/locales/sq.json @@ -6,11 +6,11 @@ ] }, "index.newPad": "Bllok i ri", - "index.createOpenPad": "ose krijoni/hapni një Bllok me emrin:", + "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": "Hequrvije (Ctrl+5)", + "pad.toolbar.strikethrough.title": "Mbivijëzuar (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)", @@ -20,26 +20,28 @@ "pad.toolbar.clearAuthorship.title": "Hiqju 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.settings.title": "Parametrat", - "pad.toolbar.embed.title": "Ndajeni me të tjerët dhe Trupëzojeni këtë bllok", + "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.showusers.title": "Shfaq përdoruesit në këtë bllok", "pad.colorpicker.save": "Ruaje", "pad.colorpicker.cancel": "Anuloje", - "pad.loading": "Po ngarkohet...", + "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": "Nuk keni leje të hyni në këtë bllok", + "pad.permissionDenied": "Ju nuk keni leje t'i qaseni këtij blloku", "pad.wrongPassword": "Fjalëkalimi juaj qe gabim", "pad.settings.padSettings": "Rregullime blloku", - "pad.settings.myView": "Pamja Ime", + "pad.settings.myView": "Pamja ime", "pad.settings.stickychat": "Fjalosje përherë në ekran", + "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 Globale", + "pad.settings.globalView": "Pamje e përgjithshme", "pad.settings.language": "Gjuha:", "pad.importExport.import_export": "Import/Eksport", "pad.importExport.import": "Ngarkoni cilëndo kartelë teksti ose dokument", @@ -51,7 +53,7 @@ "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "PDF", "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ë përparuara importimi, ju lutemi, instaloni Abiword-in.", + "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.forcereconnect": "Rilidhje e detyruar", @@ -59,11 +61,11 @@ "pad.modals.userdup.explanation": "Ky bllok duket se gjendet i hapur në më shumë se një dritare shfletuesi në këtë kompjuter.", "pad.modals.userdup.advice": "Rilidhuni që të përdoret kjo dritare.", "pad.modals.unauth": "I paautorizuar", - "pad.modals.unauth.explanation": "Ndërkohë që sheh këtë dritare, lejet e tua kanë ndryshuar. Provo të rilidhesh.", + "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": "Nuk kapet dot shërbyesi.", - "pad.modals.initsocketfail.explanation": "Nuk u lidh dot te shërbyesi i njëkohësimit.", + "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.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.", @@ -86,12 +88,14 @@ "timeslider.pageTitle": "Rrjedhë kohore e {{appTitle}}", "timeslider.toolbar.returnbutton": "Rikthehuni te blloku", "timeslider.toolbar.authors": "Autorë:", - "timeslider.toolbar.authorsList": "Pa Autorë", + "timeslider.toolbar.authorsList": "Nuk ka autorë", "timeslider.toolbar.exportlink.title": "Eksportoni", "timeslider.exportCurrent": "Eksportojeni versionin e tanishëm si:", "timeslider.version": "Versioni {{version}}", "timeslider.saved": "Ruajtur më {{month}} {{day}}, {{year}}", - "timeslider.playPause": "Luaj përmbajtjet e Pad / Pauzo", + "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.month.january": "Janar", "timeslider.month.february": "Shkurt", @@ -107,16 +111,18 @@ "timeslider.month.december": "Dhjetor", "timeslider.unnamedauthors": "{{num}} i paemërt {[plural(num) një: autor, tjetër: 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.userlist.entername": "Jepni emrin tuaj", "pad.userlist.unnamed": "pa emër", "pad.userlist.guest": "Vizitor", - "pad.userlist.deny": "Hidheni Tej", + "pad.userlist.deny": "Refuzo", "pad.userlist.approve": "Miratoje", "pad.editbar.clearcolors": "Të hiqen ngjyra autorësish në krejt dokumentin?", - "pad.impexp.importbutton": "Importoje Tani", - "pad.impexp.importing": "Po importohet...", + "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.uploadFailed": "Ngarkimi dështoi, ju lutemi, riprovoni", "pad.impexp.importfailed": "Importimi dështoi", "pad.impexp.copypaste": "Ju lutemi, kopjojeni dhe ngjiteni", From aab71864865b28d3b141153d3d52d8625cf18289 Mon Sep 17 00:00:00 2001 From: Mikk Andresen Date: Thu, 31 Dec 2015 14:19:23 +0200 Subject: [PATCH 069/118] Fix handleClientMessage_USER_* payloads not containing user info --- src/static/js/collab_client.js | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/static/js/collab_client.js b/src/static/js/collab_client.js index ad493528..fd0d9d44 100644 --- a/src/static/js/collab_client.js +++ b/src/static/js/collab_client.js @@ -1,5 +1,5 @@ /** - * This code is mostly from the old Etherpad. Please help us to comment this code. + * This code is mostly from the old Etherpad. Please help us to comment this code. * This helps other people to understand this code better and helps them to improve it. * TL;DR COMMENTS ON THIS FILE ARE HIGHLY APPRECIATED */ @@ -351,7 +351,7 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad) msg.userInfo.colorId = initialUserInfo.globalUserColor; } - + if (userSet[id]) { userSet[id] = userInfo; @@ -405,7 +405,7 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad) $("#chatloadmessagesball").css("display", "none"); // there are less than 100 messages or we reached the top - if(chat.historyPointer <= 0) + if(chat.historyPointer <= 0) $("#chatloadmessagesbutton").css("display", "none"); else // there are still more messages, re-show the load-button $("#chatloadmessagesbutton").css("display", "block"); @@ -414,6 +414,12 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad) { callbacks.onServerMessage(msg.payload); } + + //HACKISH: User messages do not have "payload" but "userInfo", so that all "handleClientMessage_USER_" hooks would work, populate payload + //FIXME: USER_* messages to have "payload" property instead of "userInfo", seems like a quite a big work + if(msg.type.indexOf("USER_") > -1) { + msg.payload = msg.userInfo; + } hooks.callAll('handleClientMessage_' + msg.type, {payload: msg.payload}); } @@ -441,7 +447,7 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad) { colorId = clientVars.colorPalette[colorId]; } - + var cssColor = colorId; if (inactive) { From 239f517afd594592461d66b242270445ba8d592f Mon Sep 17 00:00:00 2001 From: John McLear Date: Sun, 3 Jan 2016 01:03:05 +0000 Subject: [PATCH 070/118] Update package.json --- src/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/package.json b/src/package.json index 3cfd08bf..a906691d 100644 --- a/src/package.json +++ b/src/package.json @@ -17,7 +17,7 @@ "etherpad-require-kernel" : "1.0.9", "resolve" : "1.1.6", "socket.io" : "1.3.7", - "ueberDB" : "0.2.15", + "ueberdb2" : "0.3.0", "express" : "4.12.3", "express-session" : "1.11.1", "cookie-parser" : "1.3.4", From ccbcf0ddce492235117cbac9d81d52b82dcdc340 Mon Sep 17 00:00:00 2001 From: Mikk Andresen Date: Tue, 5 Jan 2016 18:22:32 +0200 Subject: [PATCH 071/118] Add usersOnline function to pad_userlist, fix a bug where several occurances of current user were pushed to users list. --- src/static/js/pad_userlist.js | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/static/js/pad_userlist.js b/src/static/js/pad_userlist.js index 22dab40a..7ac960d0 100644 --- a/src/static/js/pad_userlist.js +++ b/src/static/js/pad_userlist.js @@ -508,12 +508,18 @@ var paduserlist = (function() }); // }, - users: function(){ - // Returns an object of users who have been on this pad - // Firstly we have to get live data.. - var userList = otherUsersInfo; + usersOnline: function() + { + // Returns an object of users who are currently online on this pad + var userList = [].concat(otherUsersInfo); // Make a copy of the otherUsersInfo, otherwise every call to users modifies the referenced array // Now we need to add ourselves.. userList.push(myUserInfo); + return userList; + }, + users: function(){ + // Returns an object of users who have been on this pad + var userList = self.usersOnline(); + // Now we add historical authors var historical = clientVars.collab_client_vars.historicalAuthorData; for (var key in historical){ @@ -528,7 +534,6 @@ var paduserlist = (function() if(exists === false){ userList.push(historical[key]); } - } return userList; }, From 638757fdb5dfa86d1e7ec80f07b8baabf7012cdf Mon Sep 17 00:00:00 2001 From: John McLear Date: Wed, 6 Jan 2016 00:01:48 +0000 Subject: [PATCH 072/118] Update DB.js --- src/node/db/DB.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/node/db/DB.js b/src/node/db/DB.js index 7273c83e..3c65d5cd 100644 --- a/src/node/db/DB.js +++ b/src/node/db/DB.js @@ -19,7 +19,7 @@ * limitations under the License. */ -var ueberDB = require("ueberDB"); +var ueberDB = require("ueberdb2"); var settings = require("../utils/Settings"); var log4js = require('log4js'); From f16616d23bbbf813232bfa80f2796dca1eaf072c Mon Sep 17 00:00:00 2001 From: John McLear Date: Fri, 8 Jan 2016 13:26:46 +0000 Subject: [PATCH 073/118] seems to work --- src/node/handler/ImportHandler.js | 2 +- src/static/js/pad.js | 2 +- src/templates/pad.html | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/node/handler/ImportHandler.js b/src/node/handler/ImportHandler.js index 026ce020..9f96a926 100644 --- a/src/node/handler/ImportHandler.js +++ b/src/node/handler/ImportHandler.js @@ -292,7 +292,7 @@ exports.doImport = function(req, res, padId) " diff --git a/src/static/js/ace.js b/src/static/js/ace.js index 0e81974c..a5e365ce 100644 --- a/src/static/js/ace.js +++ b/src/static/js/ace.js @@ -286,7 +286,6 @@ window.onload = function () {\n\ iframe.name = "ace_inner";\n\ iframe.title = "pad";\n\ iframe.scrolling = "no";\n\ - iframe.setAttribute("sandbox", "allow-same-origin allow-scripts allow-popups allow-forms allow-modals");\n\ var outerdocbody = document.getElementById("outerdocbody");\n\ iframe.frameBorder = 0;\n\ iframe.allowTransparency = true; // for IE\n\ @@ -326,13 +325,10 @@ window.onload = function () {\n\ // bizarrely, in FF2, a file with no "external" dependencies won't finish loading properly // (throbs busy while typing) - var testHTML = 'WONT WORK in Chrome'; - - outerHTML.push('', '', scriptTag(outerScript), '
x
'+testHTML+''); + outerHTML.push('', '', scriptTag(outerScript), '
x
'); var outerFrame = document.createElement("IFRAME"); outerFrame.name = "ace_outer"; - outerFrame.setAttribute("sandbox", "allow-same-origin allow-scripts allow-popups allow-forms allow-modals"); outerFrame.frameBorder = 0; // for IE outerFrame.title = "Ether"; info.frame = outerFrame; diff --git a/src/static/js/ace2_inner.js b/src/static/js/ace2_inner.js index 4473126c..9586de1d 100644 --- a/src/static/js/ace2_inner.js +++ b/src/static/js/ace2_inner.js @@ -5006,12 +5006,6 @@ function Ace2Inner(){ }); }) -/* - $(root).on("dragend", function(e){ - top.console.log("dragend"); - }); - - $(root).on("drop", function(e){ top.console.log("DROP"); if(e.target.a || e.target.localName === "a"){ @@ -5026,7 +5020,6 @@ function Ace2Inner(){ e: e }); }); -*/ // CompositionEvent is not implemented below IE version 8 if ( !(browser.msie && parseInt(browser.version <= 9)) && document.documentElement) diff --git a/src/static/js/pad.js b/src/static/js/pad.js index b4f3c1b6..877ef45d 100644 --- a/src/static/js/pad.js +++ b/src/static/js/pad.js @@ -522,11 +522,6 @@ var pad = { pad.initTime = +(new Date()); pad.padOptions = clientVars.initialOptions; - if ((!browser.msie) && (!(browser.firefox && browser.version.indexOf("1.8.") == 0))) - { -// document.domain = document.domain; // for comet - } - // for IE if (browser.msie) { From ae6110919f0256192224d1a38b1819fb18bb6ee4 Mon Sep 17 00:00:00 2001 From: John McLear Date: Fri, 8 Jan 2016 13:39:59 +0000 Subject: [PATCH 075/118] removal --- src/static/js/ace2_inner.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/static/js/ace2_inner.js b/src/static/js/ace2_inner.js index 9586de1d..6728f3b9 100644 --- a/src/static/js/ace2_inner.js +++ b/src/static/js/ace2_inner.js @@ -5007,7 +5007,6 @@ function Ace2Inner(){ }) $(root).on("drop", function(e){ - top.console.log("DROP"); if(e.target.a || e.target.localName === "a"){ e.preventDefault(); } From cb874b695b35f574adb6989bb4eee0a66f478f6d Mon Sep 17 00:00:00 2001 From: John McLear Date: Fri, 8 Jan 2016 13:40:25 +0000 Subject: [PATCH 076/118] herp --- src/templates/pad.html | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/templates/pad.html b/src/templates/pad.html index ecec5a00..767c1ec9 100644 --- a/src/templates/pad.html +++ b/src/templates/pad.html @@ -391,9 +391,6 @@ $ = jQuery = require('ep_etherpad-lite/static/js/rjquery').jQuery; // Expose jQuery #HACK browser = require('ep_etherpad-lite/static/js/browser'); - if ((!browser.msie) && (!(browser.mozilla && browser.version.indexOf("1.8.") == 0))) { -// document.domain = document.domain; // for comet - } var plugins = require('ep_etherpad-lite/static/js/pluginfw/client_plugins'); var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks'); From f80407c6ffab746eeb12bedb59da622fa16aa532 Mon Sep 17 00:00:00 2001 From: John McLear Date: Fri, 8 Jan 2016 13:41:52 +0000 Subject: [PATCH 077/118] removal --- src/static/js/domline.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/static/js/domline.js b/src/static/js/domline.js index 013f713d..ed3f147a 100644 --- a/src/static/js/domline.js +++ b/src/static/js/domline.js @@ -70,7 +70,6 @@ domline.createDomLine = function(nonEmpty, doesWrap, optBrowser, optDocument) if (document) { result.node = document.createElement("div"); - result.node.setAttribute("contentEditable", true); // Works but doesn't allow drag n drop ;( } else { From 50c6b5ed61530af9946530c1c438feb7a7b06d25 Mon Sep 17 00:00:00 2001 From: John McLear Date: Sun, 10 Jan 2016 14:39:41 +0000 Subject: [PATCH 078/118] tidy up --- src/static/js/pad.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/static/js/pad.js b/src/static/js/pad.js index 877ef45d..d54f9c88 100644 --- a/src/static/js/pad.js +++ b/src/static/js/pad.js @@ -513,7 +513,6 @@ var pad = { _afterHandshake: function() { pad.clientTimeOffset = new Date().getTime() - clientVars.serverTimestamp; - //initialize the chat chat.init(this); getParams(); From 935b921c2b1a7a01c98f4ab99a36c1378c831b7d Mon Sep 17 00:00:00 2001 From: John McLear Date: Sun, 10 Jan 2016 14:40:57 +0000 Subject: [PATCH 079/118] more tidy --- src/static/js/ace2_inner.js | 1 - 1 file changed, 1 deletion(-) diff --git a/src/static/js/ace2_inner.js b/src/static/js/ace2_inner.js index 6728f3b9..0cfdec3f 100644 --- a/src/static/js/ace2_inner.js +++ b/src/static/js/ace2_inner.js @@ -5442,7 +5442,6 @@ function Ace2Inner(){ lineNumbersShown++; var n = lineNumbersShown; var div = odoc.createElement("DIV"); - //calculate height for new line number if(b){ var h = (b.clientHeight || b.offsetHeight); From 855bd270bd9cbbdc7349f8e2ac58323ad5a1d93c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Mon, 11 Jan 2016 08:28:02 +0100 Subject: [PATCH 080/118] Localisation updates from https://translatewiki.net. --- src/locales/fr.json | 15 ++++++++------- src/locales/lki.json | 5 +++-- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/locales/fr.json b/src/locales/fr.json index 11f7c1b3..1bf680fd 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -19,21 +19,22 @@ "Maxim21", "Boniface", "Macofe", - "Framafan" + "Framafan", + "Fylip22" ] }, "index.newPad": "Nouveau pad", "index.createOpenPad": "ou créer/ouvrir un pad intitulé :", - "pad.toolbar.bold.title": "Gras (Ctrl-B)", - "pad.toolbar.italic.title": "Italique (Ctrl-I)", - "pad.toolbar.underline.title": "Souligné (Ctrl-U)", + "pad.toolbar.bold.title": "Gras (Ctrl+B)", + "pad.toolbar.italic.title": "Italique (Ctrl+I)", + "pad.toolbar.underline.title": "Souligné (Ctrl+U)", "pad.toolbar.strikethrough.title": "Barré (Ctrl+5)", "pad.toolbar.ol.title": "Liste ordonnée (Ctrl+Shift+N)", "pad.toolbar.ul.title": "Liste non ordonnée (Ctrl+Shift+L)", "pad.toolbar.indent.title": "Indenter (TAB)", "pad.toolbar.unindent.title": "Désindenter (Maj+TAB)", - "pad.toolbar.undo.title": "Annuler (Ctrl-Z)", - "pad.toolbar.redo.title": "Rétablir (Ctrl-Y)", + "pad.toolbar.undo.title": "Annuler (Ctrl+Z)", + "pad.toolbar.redo.title": "Rétablir (Ctrl+Y)", "pad.toolbar.clearAuthorship.title": "Effacer les couleurs identifiant les auteurs (Ctrl+Shift+C)", "pad.toolbar.import_export.title": "Importer/Exporter de/vers un format de fichier différent", "pad.toolbar.timeslider.title": "Historique dynamique", @@ -50,7 +51,7 @@ "pad.wrongPassword": "Votre mot de passe est incorrect", "pad.settings.padSettings": "Paramètres du pad", "pad.settings.myView": "Ma vue", - "pad.settings.stickychat": "Toujours afficher le chat", + "pad.settings.stickychat": "Toujours afficher le tchat", "pad.settings.chatandusers": "Afficher la discussion et les utilisateurs", "pad.settings.colorcheck": "Couleurs d’identification", "pad.settings.linenocheck": "Numéros de lignes", diff --git a/src/locales/lki.json b/src/locales/lki.json index 83101eba..2f2ff27a 100644 --- a/src/locales/lki.json +++ b/src/locales/lki.json @@ -2,7 +2,8 @@ "@metadata": { "authors": [ "Hosseinblue", - "Arash71" + "Arash71", + "Lakzon" ] }, "index.newPad": "تازۀpad", @@ -24,7 +25,7 @@ "pad.toolbar.settings.title": "تنظیمۀل", "pad.toolbar.embed.title": "بۀشاکردن ؤ نیائن(اشتراک ونشاندن)ئۀ نؤم سایت", "pad.toolbar.showusers.title": "نیشان دائن کاربر ئۀ نؤم ئئ\npad", - "pad.colorpicker.save": "ذخیرۀ", + "pad.colorpicker.save": "هیشتن(ذخیره)", "pad.colorpicker.cancel": "ئآهووسانن/لغو", "pad.loading": "...(loading)بارنیائن", "pad.noCookie": "کوکی یافت نشد. لطفاً اجازهٔ اجرای کوکی در مروگرتان را بدهید!", From c70d655b9654acd622b39a69a5f5a8852c73c26b Mon Sep 17 00:00:00 2001 From: Ted Mielczarek Date: Wed, 13 Jan 2016 07:26:20 -0500 Subject: [PATCH 081/118] Add appendText API (from #2810) to docs. --- doc/api/http_api.md | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/doc/api/http_api.md b/doc/api/http_api.md index 9809814b..8d1b64f1 100644 --- a/doc/api/http_api.md +++ b/doc/api/http_api.md @@ -61,7 +61,7 @@ Portal submits content into new blog post ## Usage ### API version -The latest version is `1.2.12` +The latest version is `1.2.13` The current version can be queried via /api. @@ -280,6 +280,16 @@ returns the text of a pad sets the text of a pad +*Example returns:* + * `{code: 0, message:"ok", data: null}` + * `{code: 1, message:"padID does not exist", data: null}` + * `{code: 1, message:"text too long", data: null}` + +#### appendText(padID, text) + * API >= 1.2.13 + +appends text to a pad + *Example returns:* * `{code: 0, message:"ok", data: null}` * `{code: 1, message:"padID does not exist", data: null}` From f9937343c795ce56485dfe969a11f333786f89e5 Mon Sep 17 00:00:00 2001 From: John McLear Date: Sun, 17 Jan 2016 15:11:54 +0000 Subject: [PATCH 082/118] fix drop event on last char --- src/static/js/ace2_inner.js | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/static/js/ace2_inner.js b/src/static/js/ace2_inner.js index 0cfdec3f..5b7b48a0 100644 --- a/src/static/js/ace2_inner.js +++ b/src/static/js/ace2_inner.js @@ -4976,7 +4976,6 @@ function Ace2Inner(){ $(document).on("keypress", handleKeyEvent); $(document).on("keyup", handleKeyEvent); $(document).on("click", handleClick); - // Disabled: https://github.com/ether/etherpad-lite/issues/2546 // Will break OL re-numbering: https://github.com/ether/etherpad-lite/pull/2533 // $(document).on("cut", handleCut); @@ -5006,11 +5005,13 @@ function Ace2Inner(){ }); }) - $(root).on("drop", function(e){ + // We reference document here, this is because if we don't this will expose a bug + // in Google Chrome. This bug will cause the last character on the last line to + // not fire an event when dropped into.. + $(document).on("drop", function(e){ if(e.target.a || e.target.localName === "a"){ e.preventDefault(); } - // Call drop hook hooks.callAll('aceDrop', { editorInfo: editorInfo, From 295672f5987f40e7c6ee0cca05f9658374d4b2c7 Mon Sep 17 00:00:00 2001 From: Brian Lim Date: Sun, 17 Jan 2016 21:44:03 -0500 Subject: [PATCH 083/118] Set language cookie on initial load --- src/node/hooks/express/specialpages.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/node/hooks/express/specialpages.js b/src/node/hooks/express/specialpages.js index 15e853db..e8d7795a 100644 --- a/src/node/hooks/express/specialpages.js +++ b/src/node/hooks/express/specialpages.js @@ -2,6 +2,7 @@ var path = require('path'); var eejs = require('ep_etherpad-lite/node/eejs'); var toolbar = require("ep_etherpad-lite/node/utils/toolbar"); var hooks = require('ep_etherpad-lite/static/js/pluginfw/hooks'); +var settings = require('../../utils/Settings'); exports.expressCreateServer = function (hook_name, args, cb) { // expose current stats @@ -33,6 +34,13 @@ exports.expressCreateServer = function (hook_name, args, cb) { //serve pad.html under /p args.app.get('/p/:pad', function(req, res, next) { + // Set language for pad editor for the first time + // Or if language cookie doesn't exist + if (req.cookies.language === undefined) + { + res.cookie('language', settings.padOptions.lang); + } + // The below might break for pads being rewritten var isReadOnly = req.url.indexOf("/p/r.") === 0; @@ -54,7 +62,7 @@ exports.expressCreateServer = function (hook_name, args, cb) { hooks.callAll("padInitToolbar", { toolbar: toolbar }); - + res.send(eejs.require("ep_etherpad-lite/templates/timeslider.html", { req: req, toolbar: toolbar From 0b521f652846077096839d5b75d8bb1d0f70ce4f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Mon, 18 Jan 2016 08:01:50 +0100 Subject: [PATCH 084/118] Localisation updates from https://translatewiki.net. --- src/locales/de.json | 95 ++++++++++++++++++++++---------------------- src/locales/lki.json | 14 +++---- 2 files changed, 55 insertions(+), 54 deletions(-) diff --git a/src/locales/de.json b/src/locales/de.json index 1600fc74..fb269456 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -5,11 +5,12 @@ "Mklehr", "Nipsky", "Wikinaut", - "Thargon" + "Thargon", + "Predatorix" ] }, - "index.newPad": "Neues Pad", - "index.createOpenPad": "Pad mit folgendem Namen öffnen:", + "index.newPad": "Neues Dokument", + "index.createOpenPad": "oder Dokument mit folgendem Namen öffnen:", "pad.toolbar.bold.title": "Fett (Strg-B)", "pad.toolbar.italic.title": "Kursiv (Strg-I)", "pad.toolbar.underline.title": "Unterstrichen (Strg-U)", @@ -22,22 +23,22 @@ "pad.toolbar.redo.title": "Wiederholen (Strg-Y)", "pad.toolbar.clearAuthorship.title": "Autorenfarben zurücksetzen (Strg+Shift+C)", "pad.toolbar.import_export.title": "Import/Export von/zu verschiedenen Dateiformaten", - "pad.toolbar.timeslider.title": "Pad-Versionsgeschichte anzeigen", - "pad.toolbar.savedRevision.title": "Version markieren", + "pad.toolbar.timeslider.title": "Bearbeitungsverlauf", + "pad.toolbar.savedRevision.title": "Version speichern", "pad.toolbar.settings.title": "Einstellungen", - "pad.toolbar.embed.title": "Pad teilen oder einbetten", - "pad.toolbar.showusers.title": "Aktuell verbundene Benutzer anzeigen", + "pad.toolbar.embed.title": "Dieses Dokument teilen oder einbetten", + "pad.toolbar.showusers.title": "Benutzer dieses Dokumentes anzeigen", "pad.colorpicker.save": "Speichern", "pad.colorpicker.cancel": "Abbrechen", - "pad.loading": "Laden …", + "pad.loading": "Lade …", "pad.noCookie": "Das Cookie konnte nicht gefunden werden. Bitte erlaube Cookies in deinem Browser!", - "pad.passwordRequired": "Sie benötigen ein Passwort, um auf dieses Pad zuzugreifen", - "pad.permissionDenied": "Sie haben keine Berechtigung, um auf dieses Pad zuzugreifen", - "pad.wrongPassword": "Ihr Passwort war falsch", - "pad.settings.padSettings": "Pad Einstellungen", + "pad.passwordRequired": "Sie benötigen ein Kennwort, um auf dieses Dokument zuzugreifen", + "pad.permissionDenied": "Sie haben keine Berechtigung, um auf dieses Dokument zuzugreifen", + "pad.wrongPassword": "Ihr eingegebenes Kennwort war falsch", + "pad.settings.padSettings": "Dokument-Einstellungen", "pad.settings.myView": "Eigene Ansicht", - "pad.settings.stickychat": "Chat immer anzeigen", - "pad.settings.chatandusers": "Chat und Benutzer anzeigen", + "pad.settings.stickychat": "Unterhaltung immer anzeigen", + "pad.settings.chatandusers": "Unterhaltung und Benutzer anzeigen", "pad.settings.colorcheck": "Autorenfarben anzeigen", "pad.settings.linenocheck": "Zeilennummern", "pad.settings.rtlcheck": "Inhalt von rechts nach links lesen?", @@ -49,56 +50,56 @@ "pad.importExport.import_export": "Import/Export", "pad.importExport.import": "Text-Datei oder Dokument hochladen", "pad.importExport.importSuccessful": "Erfolgreich!", - "pad.importExport.export": "Aktuelles Pad exportieren als:", + "pad.importExport.export": "Aktuelles Dokument exportieren als:", "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Textdatei", "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (Open Document Format)", - "pad.importExport.abiword.innerHTML": "Sie können nur aus Klartext oder HTML-Formaten importieren. Für mehr erweiterte Importfunktionen installieren Sie bitte abiword.", + "pad.importExport.abiword.innerHTML": "Sie können nur aus reinen Text- oder HTML-Formaten importieren. Für umfangreichere Importfunktionen installieren Sie bitte abiword.", "pad.modals.connected": "Verbunden.", "pad.modals.reconnecting": "Wiederherstellen der Verbindung …", - "pad.modals.forcereconnect": "Erneut Verbinden", + "pad.modals.forcereconnect": "Erneutes Verbinden erzwingen", "pad.modals.userdup": "In einem anderen Fenster geöffnet", - "pad.modals.userdup.explanation": "Dieses Pad scheint in mehr als einem Browser-Fenster auf diesem Computer geöffnet zu sein.", - "pad.modals.userdup.advice": "Um dieses Fenster zu benutzen, verbinden Sie bitte erneut.", - "pad.modals.unauth": "Nicht authorisiert.", - "pad.modals.unauth.explanation": "Ihre Zugriffsberechtigung für dieses Pad hat sich zwischenzeitlich geändert. Sie können versuchen das Pad erneut aufzurufen.", - "pad.modals.looping.explanation": "Es gibt Probleme bei der Kommunikation mit dem Pad-Server.", - "pad.modals.looping.cause": "Möglicherweise sind Sie durch eine inkompatible Firewall oder über einen inkompatiblen Proxy mit dem Pad-Server verbunden.", - "pad.modals.initsocketfail": "Pad-Server nicht erreichbar.", - "pad.modals.initsocketfail.explanation": "Es konnte keine Verbindung zum Pad-Server hergestellt werden.", + "pad.modals.userdup.explanation": "Dieses Dokument scheint in mehr als einem Browser-Fenster auf diesem Rechner geöffnet zu sein.", + "pad.modals.userdup.advice": "Um stattdessen dieses Fenster zu verwenden, verbinden Sie sich bitte erneut.", + "pad.modals.unauth": "Nicht berechtigt", + "pad.modals.unauth.explanation": "Ihre Zugriffsberechtigung für dieses Dokument hat sich zwischenzeitlich geändert. Versuchen Sie sich erneut zu verbinden.", + "pad.modals.looping.explanation": "Es gibt Verbindungsprobleme mit dem Dokumenten-Server.", + "pad.modals.looping.cause": "Möglicherweise sind Sie durch eine inkompatible Firewall oder über einen inkompatiblen Proxy mit dem Dokumenten-Server verbunden.", + "pad.modals.initsocketfail": "Der Dokumenten-Server ist nicht erreichbar.", + "pad.modals.initsocketfail.explanation": "Es konnte keine Verbindung zum Dokumenten-Server hergestellt werden.", "pad.modals.initsocketfail.cause": "Dies könnte an Ihrem Browser oder Ihrer Internet-Verbindung liegen.", - "pad.modals.slowcommit.explanation": "Der Pad-Server reagiert nicht.", - "pad.modals.slowcommit.cause": "Dies könnte ein Netzwerkverbindungsproblem sein oder eine momentane Überlastung des Pad-Servers.", + "pad.modals.slowcommit.explanation": "Der Dokumenten-Server antwortet nicht.", + "pad.modals.slowcommit.cause": "Dies könnte ein Netzwerkverbindungsproblem sein oder eine momentane Überlastung des Dokumenten-Servers.", "pad.modals.badChangeset.explanation": "Eine von Ihnen gemachte Änderung wurde vom Pad-Server als ungültig eingestuft.", "pad.modals.badChangeset.cause": "Dies könnte aufgrund einer falschen Serverkonfiguration oder eines anderen unerwarteten Verhaltens passiert sein. Bitte kontaktiere den Diensteadministrator, falls du glaubst, dass es sich um einen Fehler handelt. Versuche dich erneut zu verbinden, um mit dem Bearbeiten fortzufahren.", - "pad.modals.corruptPad.explanation": "Das Pad, auf das du zugreifen willst, ist beschädigt.", - "pad.modals.corruptPad.cause": "Dies könnte an einer falschen Serverkonfiguration oder eines anderen unerwarteten Verhaltens liegen. Bitte kontaktiere den Diensteadministrator.", + "pad.modals.corruptPad.explanation": "Das Dokument, auf das Sie versuchen zuzugreifen, ist beschädigt.", + "pad.modals.corruptPad.cause": "Dies könnte an einer falschen Serverkonfiguration oder eines anderen unerwarteten Verhaltens liegen. Bitte kontaktieren Sie den Administrator dieses Dienstes.", "pad.modals.deleted": "Gelöscht.", - "pad.modals.deleted.explanation": "Dieses Pad wurde entfernt.", - "pad.modals.disconnected": "Deine Verbindung wurde getrennt.", - "pad.modals.disconnected.explanation": "Die Verbindung zum Pad-Server wurde unterbrochen.", + "pad.modals.deleted.explanation": "Dieses Dokument wurde entfernt.", + "pad.modals.disconnected": "Ihre Verbindung wurde getrennt.", + "pad.modals.disconnected.explanation": "Die Verbindung zum Dokumenten-Server wurde unterbrochen.", "pad.modals.disconnected.cause": "Möglicherweise ist der Pad-Server nicht erreichbar. Bitte benachrichtigen Sie den Dienstadministrator, falls dies weiterhin passiert.", - "pad.share": "Dieses Pad teilen", + "pad.share": "Dieses Dokument teilen", "pad.share.readonly": "Eingeschränkter Nur-Lese-Zugriff", - "pad.share.link": "Link", + "pad.share.link": "Verknüpfung", "pad.share.emebdcode": "In Webseite einbetten", - "pad.chat": "Chat", - "pad.chat.title": "Den Chat dieses Pads öffnen", + "pad.chat": "Unterhaltung", + "pad.chat.title": "Die Unterhaltung für dieses Dokument öffnen.", "pad.chat.loadmessages": "Weitere Nachrichten laden", - "timeslider.pageTitle": "{{appTitle}} Pad-Versionsgeschichte", - "timeslider.toolbar.returnbutton": "Zurück zum Pad", + "timeslider.pageTitle": "{{appTitle}} Bearbeitungsverlauf", + "timeslider.toolbar.returnbutton": "Zurück zum Dokument", "timeslider.toolbar.authors": "Autoren:", "timeslider.toolbar.authorsList": "keine Autoren", "timeslider.toolbar.exportlink.title": "Diese Version exportieren", "timeslider.exportCurrent": "Exportiere diese Version als:", "timeslider.version": "Version {{version}}", - "timeslider.saved": "gespeichert am {{day}}. {{month}} {{year}}", - "timeslider.playPause": "Padinhalte abspielen/pausieren", - "timeslider.backRevision": "Eine Version in diesem Pad zurück gehen", - "timeslider.forwardRevision": "Eine Version in diesem Pad vorwärts gehen", + "timeslider.saved": "Gespeichert am {{day}}. {{month}} {{year}}", + "timeslider.playPause": "Dokumentbearbeitung abspielen/pausieren", + "timeslider.backRevision": "Eine Version in diesem Dokument zurück gehen", + "timeslider.forwardRevision": "Eine Version in diesem Dokument vorwärts gehen", "timeslider.dateformat": "{{day}}.{{month}}.{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Januar", "timeslider.month.february": "Februar", @@ -114,7 +115,7 @@ "timeslider.month.december": "Dezember", "timeslider.unnamedauthors": "{{num}} {[plural(num) one: unbenannter Autor, other: unbenannte Autoren ]}", "pad.savedrevs.marked": "Diese Version wurde jetzt als gespeicherte Version gekennzeichnet", - "pad.savedrevs.timeslider": "Du kannst gespeicherte Versionen durch das Besuchen der Pad-Versionsgeschichte ansehen", + "pad.savedrevs.timeslider": "Du kannst gespeicherte Versionen durch den Aufruf des Bearbeitungsverlaufes ansehen", "pad.userlist.entername": "Geben Sie Ihren Namen ein", "pad.userlist.unnamed": "unbenannt", "pad.userlist.guest": "Gast", @@ -123,10 +124,10 @@ "pad.editbar.clearcolors": "Autorenfarben im gesamten Dokument zurücksetzen?", "pad.impexp.importbutton": "Jetzt importieren", "pad.impexp.importing": "Importiere …", - "pad.impexp.confirmimport": "Das Importieren einer Datei überschreibt den aktuellen Text des Pads. Wollen Sie wirklich fortfahren?", - "pad.impexp.convertFailed": "Wir können diese Datei nicht importieren. Bitte verwenden Sie ein anderes Dokumentformat oder übertragen Sie den Text manuell.", - "pad.impexp.padHasData": "Wir konnten diese Datei nicht importieren, da dieses Pad bereits Änderungen enthält. Bitte importiere sie in ein neues Pad.", - "pad.impexp.uploadFailed": "Der Upload ist fehlgeschlagen. Bitte versuchen Sie es erneut.", + "pad.impexp.confirmimport": "Das Importieren einer Datei überschreibt den aktuellen Text des Dokuments. Wollen Sie wirklich fortfahren?", + "pad.impexp.convertFailed": "Diese Datei konnte nicht importiert werden. Bitte verwenden Sie ein anderes Dokumentformat oder übertragen Sie den Text manuell.", + "pad.impexp.padHasData": "Diese Datei konnte nicht importiert werden, da dieses Dokument bereits Änderungen enthält. Bitte importieren Sie die Datei in ein neues Dokument.", + "pad.impexp.uploadFailed": "Das Hochladen ist fehlgeschlagen. Bitte versuchen Sie es erneut.", "pad.impexp.importfailed": "Import fehlgeschlagen", "pad.impexp.copypaste": "Bitte kopieren und einfügen", "pad.impexp.exportdisabled": "Der Export im {{type}}-Format ist deaktiviert. Für Einzelheiten kontaktieren Sie bitte Ihren Systemadministrator." diff --git a/src/locales/lki.json b/src/locales/lki.json index 2f2ff27a..eb758a13 100644 --- a/src/locales/lki.json +++ b/src/locales/lki.json @@ -14,17 +14,17 @@ "pad.toolbar.strikethrough.title": "(Ctrl+5)خط هوواردێ", "pad.toolbar.ol.title": " (Ctrl+5)لیست مرتب بی", "pad.toolbar.ul.title": "(Ctrl+5)لیست شؤیا/نامرتب", - "pad.toolbar.indent.title": "تورفتگی-ئه نؤم چئن (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)پاک‌کردن رنگةل نویسندگی", - "pad.toolbar.import_export.title": "دربردن/ئه نؤم ئآووردن ئۀ/ئِِژ فرمتۀل گوناگون", + "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": "نیشان دائن کاربر ئۀ نؤم ئئ\npad", + "pad.toolbar.showusers.title": "نیشان دائن کاربەر أنۆم اێ\nیادداشتە", "pad.colorpicker.save": "هیشتن(ذخیره)", "pad.colorpicker.cancel": "ئآهووسانن/لغو", "pad.loading": "...(loading)بارنیائن", @@ -38,13 +38,13 @@ "pad.settings.chatandusers": "نمایش چت و کاربران", "pad.settings.colorcheck": "رنگۀل تالیفی", "pad.settings.linenocheck": "شؤمارۀل خطی", - "pad.settings.rtlcheck": "خواندن محتوا از راست به چپ؟", + "pad.settings.rtlcheck": "خواندن نۆم جِک(محتوا)أژ لآ ڕاس بە چەپ؟", "pad.settings.fontType": ":شئؤۀ فؤنت", "pad.settings.fontType.normal": "عادی", "pad.settings.fontType.monospaced": "پئنی-پهنا", "pad.settings.globalView": "نمایش جئ هانی", "pad.settings.language": ":زوون", - "pad.importExport.import_export": "در بردن/ئه نؤم ئآووردن", + "pad.importExport.import_export": "دەر بردن/إنۆم آووِردن", "pad.importExport.import": "بارنیائن هر جور نوشته یا سندئ", "pad.importExport.importSuccessful": "! موفق بی-پیرووز بی", "pad.importExport.export": ":برون‌ریزی این دفترچه یادداشت با قالب", @@ -80,7 +80,7 @@ "pad.modals.disconnected.explanation": ".اتصال وة سرور قطع بیة", "pad.modals.disconnected.cause": "ممکن است سرور در دسترس نباشد. اگر این مشکل باز هم رخ داد مدیر حدمت را .آگاه کنید", "pad.share": "به اشتراک‌گذاری این دفترچه یادداشت", - "pad.share.readonly": "تنیا بخؤۀن", + "pad.share.readonly": "تەنیا(فقط)خووەنن", "pad.share.link": "لینک", "pad.share.emebdcode": "جاسازی نشانی", "pad.chat": "گپ", From ae033a1e867a722cafa49337ffbccec2e7452f6d Mon Sep 17 00:00:00 2001 From: Brian Lim Date: Mon, 18 Jan 2016 23:57:40 -0500 Subject: [PATCH 085/118] Fix for 2844 and 2812 --- src/static/js/ace2_inner.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/static/js/ace2_inner.js b/src/static/js/ace2_inner.js index 5b7b48a0..8576ee33 100644 --- a/src/static/js/ace2_inner.js +++ b/src/static/js/ace2_inner.js @@ -5365,6 +5365,12 @@ function Ace2Inner(){ level = Number(listType[2]); } var t = getLineListType(n); + + // if already a list, deindent + if (allLinesAreList && level != 1) { level = level - 1; } + // if already indented, then add a level of indentation to the list + else if (t && !allLinesAreList) { level = level + 1; } + mods.push([n, allLinesAreList ? 'indent' + level : (t ? type + level : type + '1')]); } From 843b05a6ecc44367e5872d32406d1e6a0512bb72 Mon Sep 17 00:00:00 2001 From: "Reed A. Cartwright" Date: Tue, 19 Jan 2016 16:17:16 -0700 Subject: [PATCH 086/118] Use exec to switch to node process At the end of run, `exec` should be used to switch to the node process. That way node will take over the pid of `sh run.sh`, making it easier to monitor and daemonize the server. ``` exec [command [arg ...]] Unless command is omitted, the shell process is replaced with the specified program (which must be a real program, not a shell built-in command or function). Any redirections on the exec com- mand are marked as permanent, so that they are not undone when the exec command finishes. ``` --- bin/run.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/run.sh b/bin/run.sh index 4d276632..08cd1da7 100755 --- a/bin/run.sh +++ b/bin/run.sh @@ -35,5 +35,5 @@ bin/installDeps.sh $* || exit 1 echo "Started Etherpad..." SCRIPTPATH=`pwd -P` -node $SCRIPTPATH/node_modules/ep_etherpad-lite/node/server.js $* +exec node $SCRIPTPATH/node_modules/ep_etherpad-lite/node/server.js $* From 49d38522b1c5551ee098f06ab6bae0e569dc48ac Mon Sep 17 00:00:00 2001 From: Brian Lim Date: Wed, 20 Jan 2016 02:30:25 -0500 Subject: [PATCH 087/118] Timeslider Not Translated Issue 2885 --- src/static/js/pad.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/static/js/pad.js b/src/static/js/pad.js index d54f9c88..25b1a24d 100644 --- a/src/static/js/pad.js +++ b/src/static/js/pad.js @@ -121,7 +121,7 @@ var getParameters = [ { name: "rtl", checkVal: "true", callback: function(val) { settings.rtlIsTrue = true } }, { name: "alwaysShowChat", checkVal: "true", callback: function(val) { chat.stickToScreen(); } }, { name: "chatAndUsers", checkVal: "true", callback: function(val) { chat.chatAndUsers(); } }, - { name: "lang", checkVal: null, callback: function(val) { window.html10n.localize([val, 'en']); } } + { name: "lang", checkVal: null, callback: function(val) { window.html10n.localize([val, 'en']); createCookie('language', val); } } ]; function getParams() From aaa28640cfaa7543d5cb5d31f548b0745a7c18e8 Mon Sep 17 00:00:00 2001 From: Brian Lim Date: Fri, 22 Jan 2016 19:42:06 -0500 Subject: [PATCH 088/118] CSS Default Font Colors for Issue 2853 --- src/static/css/iframe_editor.css | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/static/css/iframe_editor.css b/src/static/css/iframe_editor.css index 2824a10a..451ce807 100644 --- a/src/static/css/iframe_editor.css +++ b/src/static/css/iframe_editor.css @@ -95,6 +95,8 @@ body.grayedout { background-color: #eee !important } font-size: 12px; /* overridden by body.style */ font-family:Arial, sans-serif; /* overridden by body.style */ line-height: 16px; /* overridden by body.style */ + background-color: white; + color: black; } body.doesWrap { From b46e5db777b3480834b75c82c0050bb9c47fcc46 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Mon, 25 Jan 2016 07:38:47 +0100 Subject: [PATCH 089/118] Localisation updates from https://translatewiki.net. --- src/locales/lki.json | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/locales/lki.json b/src/locales/lki.json index eb758a13..c8b8ecc9 100644 --- a/src/locales/lki.json +++ b/src/locales/lki.json @@ -7,7 +7,7 @@ ] }, "index.newPad": "تازۀpad", - "index.createOpenPad": ":ئۀ وسیلۀ نؤمpadسازین/وآز کردن یه گلۀ", + "index.createOpenPad": ":وە نۆم Pad یا سازین/واز کردن یإگلە", "pad.toolbar.bold.title": "پررنگ-تئژ(Ctrl-B)", "pad.toolbar.italic.title": "ایتالیک (Ctrl-I)", "pad.toolbar.underline.title": "ژئر خطی(Ctrl-U)", @@ -17,13 +17,13 @@ "pad.toolbar.indent.title": "تورفتگی(إنۆم چێن)(TAB)", "pad.toolbar.unindent.title": "(Shift+TAB)بیرون آمدگی-درچئن", "pad.toolbar.undo.title": "گِلّا دائن-ئآهۀتن(Ctrl-Z)", - "pad.toolbar.redo.title": "ئۀ نوواهۀتن (Ctrl-Y)", + "pad.toolbar.redo.title": "وە نووآ هەتن (Ctrl-Y)", "pad.toolbar.clearAuthorship.title": "(Ctrl+Shift+C)پاک‌کردن رنگةل نویسندگی", "pad.toolbar.import_export.title": "دەربردن/إنۆم آووِردن إژ/وە قاڵبەل گوناگون", "pad.toolbar.timeslider.title": "اسلایدر وختی-زمانی", "pad.toolbar.savedRevision.title": "نسخە بِیل(ذخیره کە)", "pad.toolbar.settings.title": "تنظیمۀل", - "pad.toolbar.embed.title": "بۀشاکردن ؤ نیائن(اشتراک ونشاندن)ئۀ نؤم سایت", + "pad.toolbar.embed.title": "بەشآکردن ؤ نیائن(اشتراک ونشاندن)وە نۆم سایت", "pad.toolbar.showusers.title": "نیشان دائن کاربەر أنۆم اێ\nیادداشتە", "pad.colorpicker.save": "هیشتن(ذخیره)", "pad.colorpicker.cancel": "ئآهووسانن/لغو", @@ -34,7 +34,7 @@ "pad.wrongPassword": "رمزۀ تؤن دؤرس نیۀ", "pad.settings.padSettings": "pad تنظیمۀل", "pad.settings.myView": "نمایش-سئرکردن مه", - "pad.settings.stickychat": "چت همؤیشۀ ئۀ ولگۀ نمایش بوو", + "pad.settings.stickychat": "گەپ(قسە)هەمۆیشە وە وەڵگە نمایش بوو", "pad.settings.chatandusers": "نمایش چت و کاربران", "pad.settings.colorcheck": "رنگۀل تالیفی", "pad.settings.linenocheck": "شؤمارۀل خطی", @@ -42,7 +42,7 @@ "pad.settings.fontType": ":شئؤۀ فؤنت", "pad.settings.fontType.normal": "عادی", "pad.settings.fontType.monospaced": "پئنی-پهنا", - "pad.settings.globalView": "نمایش جئ هانی", + "pad.settings.globalView": "نمایش جەهانی", "pad.settings.language": ":زوون", "pad.importExport.import_export": "دەر بردن/إنۆم آووِردن", "pad.importExport.import": "بارنیائن هر جور نوشته یا سندئ", @@ -113,13 +113,13 @@ "timeslider.unnamedauthors": " نویسندة بی‌ نام{{num}}", "pad.savedrevs.marked": "این بازنویسی هم اکنون به عنوان ذخیره شده علامت‌گذاری شد", "pad.savedrevs.timeslider": "شما می‌توانید نسخه‌های ذخیره شده را با دیدن نوار زمان ببنید", - "pad.userlist.entername": "نؤم تؤن وارد کۀن", - "pad.userlist.unnamed": "بئ نؤم", + "pad.userlist.entername": "نۆم ووژت وارد کە", + "pad.userlist.unnamed": "بێ نۆم", "pad.userlist.guest": "مئمان", "pad.userlist.deny": "رد کردن", "pad.userlist.approve": "راووا داشتن-تصویب کردن", "pad.editbar.clearcolors": "رنگ نویسندگی از همه‌ی سند پاک شود؟", - "pad.impexp.importbutton": "ایسۀ وارد کۀ", + "pad.impexp.importbutton": "ایسگە وارد کە", "pad.impexp.importing": "...وارد مۀهه", "pad.impexp.confirmimport": "با درون‌ریزی یک پرونده نوشتهٔ کنونی دفترچه پاک می‌شود. آیا می‌خواهید ادامه دهید؟", "pad.impexp.convertFailed": "ما نمی‌توانیم این پرونده را درون‌ریزی کنیم. خواهشمندیم قالب دیگری برای سندتان انتخاب کرده یا بصورت دستی آنرا کپی کنید", From dde4fdfdbd041a67525930a60c88a62c9df23cc7 Mon Sep 17 00:00:00 2001 From: Roland Hieber Date: Sat, 30 Jan 2016 19:03:42 +0100 Subject: [PATCH 090/118] Highlight and link more URI schemes: about, geo, tel --- src/static/js/domline.js | 3 ++- src/static/js/linestylefilter.js | 2 +- src/static/js/pad_utils.js | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/static/js/domline.js b/src/static/js/domline.js index 03f1b9c8..84ebd30e 100644 --- a/src/static/js/domline.js +++ b/src/static/js/domline.js @@ -193,7 +193,8 @@ domline.createDomLine = function(nonEmpty, doesWrap, optBrowser, optDocument) { if (href) { - if(!~href.indexOf("://") && !~href.indexOf("mailto:")) // if the url doesn't include a protocol prefix, assume http + urn_schemes = new RegExp("^(about|geo|mailto|tel):"); + if(!~href.indexOf("://") && !urn_schemes.test(href)) // if the url doesn't include a protocol prefix, assume http { href = "http://"+href; } diff --git a/src/static/js/linestylefilter.js b/src/static/js/linestylefilter.js index 17ab993b..93680515 100644 --- a/src/static/js/linestylefilter.js +++ b/src/static/js/linestylefilter.js @@ -266,7 +266,7 @@ linestylefilter.getRegexpFilter = function(regExp, tag) linestylefilter.REGEX_WORDCHAR = /[\u0030-\u0039\u0041-\u005A\u0061-\u007A\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\u1FFF\u3040-\u9FFF\uF900-\uFDFF\uFE70-\uFEFE\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFDC]/; linestylefilter.REGEX_URLCHAR = new RegExp('(' + /[-:@a-zA-Z0-9_.,~%+\/\\?=&#!;()\[\]$]/.source + '|' + linestylefilter.REGEX_WORDCHAR.source + ')'); -linestylefilter.REGEX_URL = new RegExp(/(?:(?:https?|s?ftp|ftps|file|nfs):\/\/|mailto:|www\.)/.source + linestylefilter.REGEX_URLCHAR.source + '*(?![:.,;])' + linestylefilter.REGEX_URLCHAR.source, 'g'); +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'); diff --git a/src/static/js/pad_utils.js b/src/static/js/pad_utils.js index ff60ca7c..5a7700c9 100644 --- a/src/static/js/pad_utils.js +++ b/src/static/js/pad_utils.js @@ -176,7 +176,7 @@ var padutils = { // copied from ACE var _REGEX_WORDCHAR = /[\u0030-\u0039\u0041-\u005A\u0061-\u007A\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF\u0100-\u1FFF\u3040-\u9FFF\uF900-\uFDFF\uFE70-\uFEFE\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFDC]/; var _REGEX_URLCHAR = new RegExp('(' + /[-:@a-zA-Z0-9_.,~%+\/?=&#;()$]/.source + '|' + _REGEX_WORDCHAR.source + ')'); - var _REGEX_URL = new RegExp(/(?:(?:https?|s?ftp|ftps|file|nfs):\/\/|mailto:)/.source + _REGEX_URLCHAR.source + '*(?![:.,;])' + _REGEX_URLCHAR.source, 'g'); + var _REGEX_URL = new RegExp(/(?:(?:https?|s?ftp|ftps|file|nfs):\/\/|(about|geo|mailto|tel):)/.source + _REGEX_URLCHAR.source + '*(?![:.,;])' + _REGEX_URLCHAR.source, 'g'); // returns null if no URLs, or [[startIndex1, url1], [startIndex2, url2], ...] From 319ebb29fd4caaa1a80a4cb3d904646a96c112de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Mon, 1 Feb 2016 09:23:34 +0100 Subject: [PATCH 091/118] Localisation updates from https://translatewiki.net. --- src/locales/el.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/locales/el.json b/src/locales/el.json index f18c71e4..602b82bd 100644 --- a/src/locales/el.json +++ b/src/locales/el.json @@ -96,6 +96,9 @@ "timeslider.exportCurrent": "Εξαγωγή τρέχουσας έκδοσης ως:", "timeslider.version": "Έκδοση {{version}}", "timeslider.saved": "Αποθηκεύτηκε στις {{day}} {{month}} {{year}}", + "timeslider.playPause": "Αναπαραγωγή / Παύση των περιεχομένων αυτού του Pad", + "timeslider.backRevision": "Επιστροφή σε μια έκδοση αυτού του Pad", + "timeslider.forwardRevision": "Μια έκδοση μπροστά αυτού του Pad", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Ιανουαρίου", "timeslider.month.february": "Φεβρουαρίου", From 8b8811c7ad2e649e9de04d7cb6206be147e1147c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Mon, 8 Feb 2016 11:36:53 +0100 Subject: [PATCH 092/118] Localisation updates from https://translatewiki.net. --- src/locales/is.json | 6 +++++- src/locales/nb.json | 19 ++++++++++--------- 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/src/locales/is.json b/src/locales/is.json index dc3f3b33..61065cb7 100644 --- a/src/locales/is.json +++ b/src/locales/is.json @@ -1,7 +1,8 @@ { "@metadata": { "authors": [ - "Sveinn í Felli" + "Sveinn í Felli", + "Sveinki" ] }, "index.newPad": "Ný skrifblokk", @@ -92,6 +93,9 @@ "timeslider.exportCurrent": "Flytja út núverandi útgáfu sem:", "timeslider.version": "Útgáfa {{version}}", "timeslider.saved": "Vistað {{day}}. {{month}}, {{year}}", + "timeslider.playPause": "Afspilun / Hlé á efni skrifblokkar", + "timeslider.backRevision": "Fara til baka um eina útgáfu í þessari skrifblokk", + "timeslider.forwardRevision": "Fara áfram um eina útgáfu í þessari skrifblokk", "timeslider.dateformat": "{{day}}/{{month}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Janúar", "timeslider.month.february": "febrúar", diff --git a/src/locales/nb.json b/src/locales/nb.json index 48c96521..5c46b7de 100644 --- a/src/locales/nb.json +++ b/src/locales/nb.json @@ -3,11 +3,12 @@ "authors": [ "Laaknor", "Cocu", - "Chameleon222" + "Chameleon222", + "SuperPotato" ] }, - "index.newPad": "Ny blokk", - "index.createOpenPad": "eller opprette/åpne en ny blokk med dette navnet:", + "index.newPad": "Ny Pad", + "index.createOpenPad": "eller opprette/åpne en ny Pad med dette navnet:", "pad.toolbar.bold.title": "Fet (Ctrl+B)", "pad.toolbar.italic.title": "Kursiv (Ctrl+I)", "pad.toolbar.underline.title": "Understreking (Ctrl+U)", @@ -23,17 +24,17 @@ "pad.toolbar.timeslider.title": "Tidslinje", "pad.toolbar.savedRevision.title": "Lagre revisjoner", "pad.toolbar.settings.title": "Innstillinger", - "pad.toolbar.embed.title": "Del og sett inn denne blokken", - "pad.toolbar.showusers.title": "Vis brukerne av denne blokken", + "pad.toolbar.embed.title": "Del og sett inn denne Paden", + "pad.toolbar.showusers.title": "Vis brukerne av denne Paden", "pad.colorpicker.save": "Lagre", "pad.colorpicker.cancel": "Avbryt", "pad.loading": "Laster...", "pad.noCookie": "Kunne ikke finne informasjonskapselen. Vennligst tillat informasjonskapsler (cookies) i din webleser!", - "pad.passwordRequired": "Du trenger et passord for å få tilgang til denne blokken", - "pad.permissionDenied": "Du har ikke tilgang til denne blokken", + "pad.passwordRequired": "Du trenger et passord for å få tilgang til denne Paden", + "pad.permissionDenied": "Du har ikke tilgang til denne Paden", "pad.wrongPassword": "Feil passord", - "pad.settings.padSettings": "Blokkinnstillinger", - "pad.settings.myView": "Min visning", + "pad.settings.padSettings": "Padinnstillinger", + "pad.settings.myView": "Min Visning", "pad.settings.stickychat": "Chat alltid synlig", "pad.settings.chatandusers": "Vis chat og brukere", "pad.settings.colorcheck": "Forfatterfarger", From d88052726de45d8ee9bd7d143470f80d3bb7a67b Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Fri, 19 Feb 2016 15:05:09 +0100 Subject: [PATCH 093/118] Localisation updates from https://translatewiki.net. --- src/locales/it.json | 4 ++-- src/locales/nl.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src/locales/it.json b/src/locales/it.json index c3841e58..aab7513b 100644 --- a/src/locales/it.json +++ b/src/locales/it.json @@ -53,7 +53,7 @@ "pad.importExport.export": "Esportare il Pad corrente come:", "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", - "pad.importExport.exportplain": "Solo testo", + "pad.importExport.exportplain": "Testo normale", "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (Open Document Format)", @@ -93,7 +93,7 @@ "timeslider.toolbar.returnbutton": "Ritorna al Pad", "timeslider.toolbar.authors": "Autori:", "timeslider.toolbar.authorsList": "Nessun autore", - "timeslider.toolbar.exportlink.title": "esporta", + "timeslider.toolbar.exportlink.title": "Esporta", "timeslider.exportCurrent": "Esporta la versione corrente come:", "timeslider.version": "Versione {{version}}", "timeslider.saved": "Salvato {{day}} {{month}} {{year}}", diff --git a/src/locales/nl.json b/src/locales/nl.json index 7c83f436..b01df7a3 100644 --- a/src/locales/nl.json +++ b/src/locales/nl.json @@ -55,7 +55,7 @@ "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "Pdf", "pad.importExport.exportopen": "ODF (Open Document Format)", - "pad.importExport.abiword.innerHTML": "U kunt alleen importeren vanuit platte tekst of een HTML-opmaak. Installeer abiword om meer geavanceerde importmogelijkheden te krijgen.", + "pad.importExport.abiword.innerHTML": "U kunt alleen importeren vanuit Tekst zonder opmaak of een HTML-opmaak. Installeer abiword om meer geavanceerde importmogelijkheden te krijgen.", "pad.modals.connected": "Verbonden.", "pad.modals.reconnecting": "Opnieuw verbinding maken met uw pad...", "pad.modals.forcereconnect": "Opnieuw verbinden", From b6ab6f2b132cfd991de50676116a4641284d855c Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Wed, 9 Mar 2016 13:38:20 +0100 Subject: [PATCH 094/118] Localisation updates from https://translatewiki.net. --- src/locales/bn.json | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/locales/bn.json b/src/locales/bn.json index 5c9b6848..01027207 100644 --- a/src/locales/bn.json +++ b/src/locales/bn.json @@ -21,6 +21,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": "সেটিং", @@ -97,9 +98,13 @@ "pad.userlist.entername": "আপনার নাম লিখুন", "pad.userlist.unnamed": "কোন নাম নির্বাচন করা হয়নি", "pad.userlist.guest": "অতিথি", + "pad.userlist.deny": "প্রত্যাখ্যান", "pad.userlist.approve": "অনুমোদিত", "pad.impexp.importbutton": "এখন আমদানি করুন", "pad.impexp.importing": "আমদানি হচ্ছে...", + "pad.impexp.padHasData": "আমরা এই ফাইলটি আমদানি করতে সক্ষম হয়নি কারণ এই প্যাড ইতিমধ্যে পরিবর্তিত হয়েছে, দয়া করে একটি নতুন প্যাডে অামদানি করুন।", + "pad.impexp.uploadFailed": "আপলোড করতে ব্যর্থ, দয়া করে আবার চেষ্টা করুন", "pad.impexp.importfailed": "আমদানি ব্যর্থ", - "pad.impexp.copypaste": "দয়া করে অনুলিপি প্রতিলেপন করুন" + "pad.impexp.copypaste": "দয়া করে অনুলিপি প্রতিলেপন করুন", + "pad.impexp.exportdisabled": "{{type}} হিসেবে রপ্তানি করা নিষ্ক্রিয় আছে। বিস্তারিত জানার জন্য আপনার সিস্টেম প্রশাসকের সাথে যোগাযোগ করুন।" } From a3188cf3574234f17f927499c2f739c2bd5fd9d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Mon, 14 Mar 2016 08:09:25 +0100 Subject: [PATCH 095/118] Localisation updates from https://translatewiki.net. --- src/locales/oc.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/oc.json b/src/locales/oc.json index 637c9061..bc3a4459 100644 --- a/src/locales/oc.json +++ b/src/locales/oc.json @@ -57,7 +57,7 @@ "pad.modals.reconnecting": "Reconnexion cap a vòstre Pad...", "pad.modals.forcereconnect": "Forçar la reconnexion.", "pad.modals.userdup": "Dobèrt dins una autra fenèstra", - "pad.modals.userdup.explanation": "Sembla qu'aqueste Pad es dobèrt dins mai d'una fenèstra de vòstre navigador sus aqueste ordenador.", + "pad.modals.userdup.explanation": "Sembla qu'aqueste Pad es dobèrt dins mai d'una fenèstra de vòstre navigador sus aqueste ordinator.", "pad.modals.userdup.advice": "Se reconnectar en utilizant aquesta fenèstra.", "pad.modals.unauth": "Pas autorizat", "pad.modals.unauth.explanation": "Vòstras permissions son estadas cambiadas al moment de l'afichatge d'aquesta pagina. Ensajatz de vos reconnectar.", From bd2372def16940d6578b92a5d7accefd65ea5fb9 Mon Sep 17 00:00:00 2001 From: Stefan Date: Mon, 14 Mar 2016 21:56:02 +0100 Subject: [PATCH 096/118] Update windows build: - Update node to version 4.4.0 - Create temp folder dynamically --- bin/buildForWindows.sh | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/bin/buildForWindows.sh b/bin/buildForWindows.sh index a508cc22..57b6e5b5 100755 --- a/bin/buildForWindows.sh +++ b/bin/buildForWindows.sh @@ -1,6 +1,6 @@ #!/bin/sh -NODE_VERSION="0.12.2" +NODE_VERSION="4.4.0" #Move to the folder where ep-lite is installed cd `dirname $0` @@ -29,11 +29,11 @@ hash unzip > /dev/null 2>&1 || { } START_FOLDER=$(pwd); +TMP_FOLDER=$(mktemp -d) -echo "create a clean environment in /tmp/etherpad-lite-win..." -rm -rf /tmp/etherpad-lite-win -cp -ar . /tmp/etherpad-lite-win -cd /tmp/etherpad-lite-win +echo "create a clean environment in $TMP_FOLDER..." +cp -ar . $TMP_FOLDER +cd $TMP_FOLDER rm -rf node_modules rm -f etherpad-lite-win.zip @@ -50,21 +50,20 @@ mv node_modules_resolved node_modules echo "download windows node..." cd bin -wget "http://nodejs.org/dist/v$NODE_VERSION/node.exe" -O ../node.exe +wget "https://nodejs.org/dist/v$NODE_VERSION/win-x86/node.exe" -O ../node.exe echo "remove git history to reduce folder size" rm -rf .git/objects echo "remove windows jsdom-nocontextify/test folder" -rm -rf /tmp/etherpad-lite-win/src/node_modules/wd/node_modules/request/node_modules/form-data/node_modules/combined-stream/test -rm -rf /tmp/etherpad-lite-win/src/node_modules/nodemailer/node_modules/mailcomposer/node_modules/mimelib/node_modules/encoding/node_modules/iconv-lite/encodings/tables +rm -rf $TMP_FOLDER/src/node_modules/wd/node_modules/request/node_modules/form-data/node_modules/combined-stream/test +rm -rf $TMP_FOLDER/src/node_modules/nodemailer/node_modules/mailcomposer/node_modules/mimelib/node_modules/encoding/node_modules/iconv-lite/encodings/tables echo "create the zip..." cd /tmp -zip -9 -r etherpad-lite-win.zip etherpad-lite-win -mv etherpad-lite-win.zip $START_FOLDER +zip -9 -r $START_FOLDER/etherpad-lite-win.zip $TMP_FOLDER echo "clean up..." -rm -rf /tmp/etherpad-lite-win +rm -rf $TMP_FOLDER echo "Finished. You can find the zip in the Etherpad root folder, it's called etherpad-lite-win.zip" From 9bcf8690c063bd572afff9d70d9fc0d64a0318db Mon Sep 17 00:00:00 2001 From: Luiza Pagliari Date: Tue, 15 Mar 2016 15:44:00 -0300 Subject: [PATCH 097/118] Update author when removing line attribute from line This avoids raising error 'Trying to submit changes as another author in changeset' when 2 authors change line attributes of the same line. This fixes issue #2925. --- src/static/js/AttributeManager.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/static/js/AttributeManager.js b/src/static/js/AttributeManager.js index d4d20a1f..e3749510 100644 --- a/src/static/js/AttributeManager.js +++ b/src/static/js/AttributeManager.js @@ -278,6 +278,9 @@ AttributeManager.prototype = _(AttributeManager.prototype).extend({ if (attrib[0] === attributeName && (!attributeValue || attrib[0] === attributeValue)){ found = true; return [attributeName, '']; + }else if (attrib[0] === 'author'){ + // update last author to make changes to line attributes on this line + return [attributeName, this.author]; } return attrib; }); From 175c29ff66a043dcc4acfb0d9dce03b73d13e74b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Thu, 17 Mar 2016 08:47:38 +0100 Subject: [PATCH 098/118] Localisation updates from https://translatewiki.net. --- src/locales/az.json | 12 ++++++++---- src/locales/fr.json | 9 +++++---- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/src/locales/az.json b/src/locales/az.json index f5968ee4..e27beaf8 100644 --- a/src/locales/az.json +++ b/src/locales/az.json @@ -4,7 +4,8 @@ "AZISS", "Khan27", "Mushviq Abdulla", - "Wertuose" + "Wertuose", + "Mastizada" ] }, "index.newPad": "Yeni lövhə", @@ -19,22 +20,24 @@ "pad.toolbar.unindent.title": "Çıxıntı (Shift+TAB)", "pad.toolbar.undo.title": "Geri qaytar (Ctrl+Z)", "pad.toolbar.redo.title": "Qaytar (Ctrl+Y)", - "pad.toolbar.clearAuthorship.title": "Müəlliflik Rənglərini Təmizlə", + "pad.toolbar.clearAuthorship.title": "Müəlliflik Rənglərini Təmizlə (Ctrl+Shift+C)", "pad.toolbar.import_export.title": "Müxtəlif fayl formatların(a/dan) idxal/ixrac", "pad.toolbar.timeslider.title": "Vaxt cədvəli", - "pad.toolbar.savedRevision.title": "Saxlanılan Düzəlişlər", + "pad.toolbar.savedRevision.title": "Düzəlişləri Saxla", "pad.toolbar.settings.title": "Tənzimləmələr", "pad.toolbar.embed.title": "Bu lövhəni paylaş və qur", "pad.toolbar.showusers.title": "Lövhədəki istifadəçiləri göstər", "pad.colorpicker.save": "Saxla", "pad.colorpicker.cancel": "İmtina", "pad.loading": "Yüklənir...", + "pad.noCookie": "Çərəz tapıla bilmədi. Lütfən səyyahınızda çərəzlərə icazə verinǃ", "pad.passwordRequired": "Bu lövhəyə daxil olmaq üçün parol lazımdır", "pad.permissionDenied": "Bu lövhəyə daxil olmaq üçün icazəniz yoxdur", "pad.wrongPassword": "Sizin parolunuz səhvdir", "pad.settings.padSettings": "Lövhə nizamlamaları", "pad.settings.myView": "Mənim Görüntüm", "pad.settings.stickychat": "Söhbət həmişə ekranda", + "pad.settings.chatandusers": "Gap və İstifadəçiləri Göstər", "pad.settings.colorcheck": "Müəlliflik rəngləri", "pad.settings.linenocheck": "Sətir nömrələri", "pad.settings.rtlcheck": "Mühtəviyyat sağdan sola doğru oxunsunmu?", @@ -77,7 +80,7 @@ "pad.modals.deleted.explanation": "Bu lövhə silindi.", "pad.modals.disconnected": "Əlaqə kəsilib.", "pad.modals.disconnected.explanation": "Serverə qoşulma itirilib", - "pad.modals.disconnected.cause": "Server istifadə olunmur. Əgər problem təkrarlanacaqsa, bizə bildirin.", + "pad.modals.disconnected.cause": "Server ola bilsin, əlçatmazdır. Əgər belə davam edərsə xidmət administratorunu xəbərdar edin.", "pad.share": "Bu lövhəni paylaş", "pad.share.readonly": "Yalnız oxuyun", "pad.share.link": "Keçid", @@ -93,6 +96,7 @@ "timeslider.exportCurrent": "Cari versiyanı ixrac etmək kimi:", "timeslider.version": "Versiya {{version}}", "timeslider.saved": "Saxlanıldı {{day}} {{month}}, {{year}}", + "timeslider.playPause": "Geri oxutma / Lövhə Məzmunlarını Dayandır", "timeslider.dateformat": "{{day}} {{month}}, {{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Yanvar", "timeslider.month.february": "Fevral", diff --git a/src/locales/fr.json b/src/locales/fr.json index 1bf680fd..27382354 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -20,7 +20,8 @@ "Boniface", "Macofe", "Framafan", - "Fylip22" + "Fylip22", + "C13m3n7" ] }, "index.newPad": "Nouveau pad", @@ -71,17 +72,17 @@ "pad.importExport.exportword": "Microsoft Word", "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (Open Document Format)", - "pad.importExport.abiword.innerHTML": "Vous ne pouvez importer que des formats texte brut ou html. Pour des fonctionnalités d'importation plus évoluées, veuillez installer Abiword.", + "pad.importExport.abiword.innerHTML": "Vous ne pouvez importer que des formats texte brut ou HTML. Pour des fonctionnalités d'importation plus évoluées, veuillez installer Abiword.", "pad.modals.connected": "Connecté.", "pad.modals.reconnecting": "Reconnexion vers votre pad...", "pad.modals.forcereconnect": "Forcer la reconnexion", "pad.modals.userdup": "Ouvert dans une autre fenêtre", - "pad.modals.userdup.explanation": "Ce pad semble être ouvert dans plusieurs fenêtres de navigateur sur cet ordinateur.", + "pad.modals.userdup.explanation": "Ce pad semble être ouvert dans plusieurs fenêtres sur cet ordinateur.", "pad.modals.userdup.advice": "Se reconnecter en utilisant cette fenêtre.", "pad.modals.unauth": "Non autorisé", "pad.modals.unauth.explanation": "Vos permissions ont été changées lors de l'affichage de cette page. Essayez de vous reconnecter.", "pad.modals.looping.explanation": "Nous éprouvons un problème de communication au serveur de synchronisation.", - "pad.modals.looping.cause": "Il est possible que votre connexion soit protégée par un pare-feu ou un serveur mandataire incompatible.", + "pad.modals.looping.cause": "Il est possible que vous soyez connecté avec un pare-feu ou un proxy incompatible.", "pad.modals.initsocketfail": "Le serveur est introuvable.", "pad.modals.initsocketfail.explanation": "Impossible de se connecter au serveur de synchronisation.", "pad.modals.initsocketfail.cause": "Ceci est probablement dû à un problème avec votre navigateur ou votre connexion internet.", From 3738211fd821719091a98a35c0d660ff2f33f1bf Mon Sep 17 00:00:00 2001 From: Stefan Date: Sun, 20 Mar 2016 14:13:26 +0100 Subject: [PATCH 099/118] Do not include absolute path in windows zip --- bin/buildForWindows.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bin/buildForWindows.sh b/bin/buildForWindows.sh index 57b6e5b5..1ee080d1 100755 --- a/bin/buildForWindows.sh +++ b/bin/buildForWindows.sh @@ -60,8 +60,8 @@ rm -rf $TMP_FOLDER/src/node_modules/wd/node_modules/request/node_modules/form-da rm -rf $TMP_FOLDER/src/node_modules/nodemailer/node_modules/mailcomposer/node_modules/mimelib/node_modules/encoding/node_modules/iconv-lite/encodings/tables echo "create the zip..." -cd /tmp -zip -9 -r $START_FOLDER/etherpad-lite-win.zip $TMP_FOLDER +cd $TMP_FOLDER +zip -9 -r $START_FOLDER/etherpad-lite-win.zip ./* echo "clean up..." rm -rf $TMP_FOLDER From 18d583d92d87827b93cd0afa84ce212cd179672c Mon Sep 17 00:00:00 2001 From: Stefan Date: Sun, 20 Mar 2016 15:19:34 +0100 Subject: [PATCH 100/118] Check for node version 4 or higher and not special versions --- bin/installDeps.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bin/installDeps.sh b/bin/installDeps.sh index df6ea9fb..04aa0e53 100755 --- a/bin/installDeps.sh +++ b/bin/installDeps.sh @@ -47,11 +47,12 @@ fi NODE_VERSION=$(node --version) NODE_V_MINOR=$(echo $NODE_VERSION | cut -d "." -f 1-2) NODE_V_MAIN=$(echo $NODE_VERSION | cut -d "." -f 1) +NODE_V_MAIN=${NODE_V_MAIN#"v"} #iojs version checking added if hash iojs 2>/dev/null; then IOJS_VERSION=$(iojs --version) fi -if [ ! $NODE_V_MINOR = "v0.10" ] && [ ! $NODE_V_MINOR = "v0.11" ] && [ ! $NODE_V_MINOR = "v0.12" ] && [ ! $NODE_V_MAIN = "v4" ] && [ ! $NODE_V_MAIN = "v5" ]; then +if [ ! $NODE_V_MINOR = "v0.10" ] && [ ! $NODE_V_MINOR = "v0.11" ] && [ ! $NODE_V_MINOR = "v0.12" ] && [ ! $NODE_V_MAIN -gt 4 ]; then if [ ! $IOJS_VERSION ]; then echo "You're running a wrong version of node, or io.js is not installed. You're using $NODE_VERSION, we need node v0.10.x or higher" >&2 exit 1 From 2a81d2a57803b5ac1ff9f7c108dc619aa050f352 Mon Sep 17 00:00:00 2001 From: Stefan Date: Sun, 20 Mar 2016 15:21:56 +0100 Subject: [PATCH 101/118] Remove support for io.js --- bin/installDeps.sh | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/bin/installDeps.sh b/bin/installDeps.sh index 04aa0e53..2e1d465d 100755 --- a/bin/installDeps.sh +++ b/bin/installDeps.sh @@ -48,15 +48,9 @@ NODE_VERSION=$(node --version) NODE_V_MINOR=$(echo $NODE_VERSION | cut -d "." -f 1-2) NODE_V_MAIN=$(echo $NODE_VERSION | cut -d "." -f 1) NODE_V_MAIN=${NODE_V_MAIN#"v"} -#iojs version checking added -if hash iojs 2>/dev/null; then - IOJS_VERSION=$(iojs --version) -fi if [ ! $NODE_V_MINOR = "v0.10" ] && [ ! $NODE_V_MINOR = "v0.11" ] && [ ! $NODE_V_MINOR = "v0.12" ] && [ ! $NODE_V_MAIN -gt 4 ]; then - if [ ! $IOJS_VERSION ]; then - echo "You're running a wrong version of node, or io.js is not installed. You're using $NODE_VERSION, we need node v0.10.x or higher" >&2 - exit 1 - fi + echo "You're running a wrong version of node. You're using $NODE_VERSION, we need node v0.10.x or higher" >&2 + exit 1 fi #Get the name of the settings file From 02551d772cfeacb83afe9cf26fa3004f586a1ef8 Mon Sep 17 00:00:00 2001 From: Stefan Date: Sun, 20 Mar 2016 16:28:06 +0100 Subject: [PATCH 102/118] Fix a possible xss attack in iframe link --- src/static/js/pad_editbar.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/static/js/pad_editbar.js b/src/static/js/pad_editbar.js index 48fcaab4..d44e5d66 100644 --- a/src/static/js/pad_editbar.js +++ b/src/static/js/pad_editbar.js @@ -315,13 +315,13 @@ var padeditbar = (function() { var basePath = document.location.href.substring(0, document.location.href.indexOf("/p/")); var readonlyLink = basePath + "/p/" + clientVars.readOnlyId; - $('#embedinput').val(""); + $('#embedinput').val(''); $('#linkinput').val(readonlyLink); } else { var padurl = window.location.href.split("?")[0]; - $('#embedinput').val(""); + $('#embedinput').val(''); $('#linkinput').val(padurl); } } From 04e8b0c184f64332b69e97be173b0a7b9e6a3f86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Mon, 21 Mar 2016 07:09:41 +0100 Subject: [PATCH 103/118] Localisation updates from https://translatewiki.net. --- src/locales/de.json | 58 ++++++++++++++++++++++----------------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/src/locales/de.json b/src/locales/de.json index fb269456..29387fd5 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -9,8 +9,8 @@ "Predatorix" ] }, - "index.newPad": "Neues Dokument", - "index.createOpenPad": "oder Dokument mit folgendem Namen öffnen:", + "index.newPad": "Neues Pad", + "index.createOpenPad": "oder Pad mit folgendem Namen öffnen:", "pad.toolbar.bold.title": "Fett (Strg-B)", "pad.toolbar.italic.title": "Kursiv (Strg-I)", "pad.toolbar.underline.title": "Unterstrichen (Strg-U)", @@ -26,16 +26,16 @@ "pad.toolbar.timeslider.title": "Bearbeitungsverlauf", "pad.toolbar.savedRevision.title": "Version speichern", "pad.toolbar.settings.title": "Einstellungen", - "pad.toolbar.embed.title": "Dieses Dokument teilen oder einbetten", - "pad.toolbar.showusers.title": "Benutzer dieses Dokumentes anzeigen", + "pad.toolbar.embed.title": "Dieses Pad teilen oder einbetten", + "pad.toolbar.showusers.title": "Benutzer dieses Pads anzeigen", "pad.colorpicker.save": "Speichern", "pad.colorpicker.cancel": "Abbrechen", "pad.loading": "Lade …", "pad.noCookie": "Das Cookie konnte nicht gefunden werden. Bitte erlaube Cookies in deinem Browser!", - "pad.passwordRequired": "Sie benötigen ein Kennwort, um auf dieses Dokument zuzugreifen", - "pad.permissionDenied": "Sie haben keine Berechtigung, um auf dieses Dokument zuzugreifen", + "pad.passwordRequired": "Sie benötigen ein Kennwort, um auf dieses Pad zuzugreifen", + "pad.permissionDenied": "Sie haben keine Berechtigung, um auf dieses Pad zuzugreifen", "pad.wrongPassword": "Ihr eingegebenes Kennwort war falsch", - "pad.settings.padSettings": "Dokument-Einstellungen", + "pad.settings.padSettings": "Pad-Einstellungen", "pad.settings.myView": "Eigene Ansicht", "pad.settings.stickychat": "Unterhaltung immer anzeigen", "pad.settings.chatandusers": "Unterhaltung und Benutzer anzeigen", @@ -50,7 +50,7 @@ "pad.importExport.import_export": "Import/Export", "pad.importExport.import": "Text-Datei oder Dokument hochladen", "pad.importExport.importSuccessful": "Erfolgreich!", - "pad.importExport.export": "Aktuelles Dokument exportieren als:", + "pad.importExport.export": "Aktuelles Pad exportieren als:", "pad.importExport.exportetherpad": "Etherpad", "pad.importExport.exporthtml": "HTML", "pad.importExport.exportplain": "Textdatei", @@ -62,44 +62,44 @@ "pad.modals.reconnecting": "Wiederherstellen der Verbindung …", "pad.modals.forcereconnect": "Erneutes Verbinden erzwingen", "pad.modals.userdup": "In einem anderen Fenster geöffnet", - "pad.modals.userdup.explanation": "Dieses Dokument scheint in mehr als einem Browser-Fenster auf diesem Rechner geöffnet zu sein.", + "pad.modals.userdup.explanation": "Dieses Pad scheint in mehr als einem Browser-Fenster auf diesem Rechner geöffnet zu sein.", "pad.modals.userdup.advice": "Um stattdessen dieses Fenster zu verwenden, verbinden Sie sich bitte erneut.", "pad.modals.unauth": "Nicht berechtigt", - "pad.modals.unauth.explanation": "Ihre Zugriffsberechtigung für dieses Dokument hat sich zwischenzeitlich geändert. Versuchen Sie sich erneut zu verbinden.", - "pad.modals.looping.explanation": "Es gibt Verbindungsprobleme mit dem Dokumenten-Server.", - "pad.modals.looping.cause": "Möglicherweise sind Sie durch eine inkompatible Firewall oder über einen inkompatiblen Proxy mit dem Dokumenten-Server verbunden.", - "pad.modals.initsocketfail": "Der Dokumenten-Server ist nicht erreichbar.", - "pad.modals.initsocketfail.explanation": "Es konnte keine Verbindung zum Dokumenten-Server hergestellt werden.", + "pad.modals.unauth.explanation": "Ihre Zugriffsberechtigung für dieses Pad hat sich zwischenzeitlich geändert. Versuchen Sie sich erneut zu verbinden.", + "pad.modals.looping.explanation": "Es gibt Verbindungsprobleme mit dem Server.", + "pad.modals.looping.cause": "Möglicherweise sind Sie durch eine inkompatible Firewall oder über einen inkompatiblen Proxy mit dem Server verbunden.", + "pad.modals.initsocketfail": "Der Server ist nicht erreichbar.", + "pad.modals.initsocketfail.explanation": "Es konnte keine Verbindung zum Server hergestellt werden.", "pad.modals.initsocketfail.cause": "Dies könnte an Ihrem Browser oder Ihrer Internet-Verbindung liegen.", - "pad.modals.slowcommit.explanation": "Der Dokumenten-Server antwortet nicht.", - "pad.modals.slowcommit.cause": "Dies könnte ein Netzwerkverbindungsproblem sein oder eine momentane Überlastung des Dokumenten-Servers.", - "pad.modals.badChangeset.explanation": "Eine von Ihnen gemachte Änderung wurde vom Pad-Server als ungültig eingestuft.", + "pad.modals.slowcommit.explanation": "Der Server antwortet nicht.", + "pad.modals.slowcommit.cause": "Dies könnte ein Netzwerkverbindungsproblem sein oder eine momentane Überlastung des Servers.", + "pad.modals.badChangeset.explanation": "Eine von Ihnen gemachte Änderung wurde vom Server als ungültig eingestuft.", "pad.modals.badChangeset.cause": "Dies könnte aufgrund einer falschen Serverkonfiguration oder eines anderen unerwarteten Verhaltens passiert sein. Bitte kontaktiere den Diensteadministrator, falls du glaubst, dass es sich um einen Fehler handelt. Versuche dich erneut zu verbinden, um mit dem Bearbeiten fortzufahren.", - "pad.modals.corruptPad.explanation": "Das Dokument, auf das Sie versuchen zuzugreifen, ist beschädigt.", + "pad.modals.corruptPad.explanation": "Das Pad, auf das Sie versuchen zuzugreifen, ist beschädigt.", "pad.modals.corruptPad.cause": "Dies könnte an einer falschen Serverkonfiguration oder eines anderen unerwarteten Verhaltens liegen. Bitte kontaktieren Sie den Administrator dieses Dienstes.", "pad.modals.deleted": "Gelöscht.", - "pad.modals.deleted.explanation": "Dieses Dokument wurde entfernt.", + "pad.modals.deleted.explanation": "Dieses Pad wurde entfernt.", "pad.modals.disconnected": "Ihre Verbindung wurde getrennt.", - "pad.modals.disconnected.explanation": "Die Verbindung zum Dokumenten-Server wurde unterbrochen.", - "pad.modals.disconnected.cause": "Möglicherweise ist der Pad-Server nicht erreichbar. Bitte benachrichtigen Sie den Dienstadministrator, falls dies weiterhin passiert.", - "pad.share": "Dieses Dokument teilen", + "pad.modals.disconnected.explanation": "Die Verbindung zum Server wurde unterbrochen.", + "pad.modals.disconnected.cause": "Möglicherweise ist der Server nicht erreichbar. Bitte benachrichtigen Sie den Dienstadministrator, falls dies weiterhin passiert.", + "pad.share": "Dieses Pad teilen", "pad.share.readonly": "Eingeschränkter Nur-Lese-Zugriff", "pad.share.link": "Verknüpfung", "pad.share.emebdcode": "In Webseite einbetten", "pad.chat": "Unterhaltung", - "pad.chat.title": "Die Unterhaltung für dieses Dokument öffnen.", + "pad.chat.title": "Den Chat für dieses Pad öffnen.", "pad.chat.loadmessages": "Weitere Nachrichten laden", "timeslider.pageTitle": "{{appTitle}} Bearbeitungsverlauf", - "timeslider.toolbar.returnbutton": "Zurück zum Dokument", + "timeslider.toolbar.returnbutton": "Zurück zum Pad", "timeslider.toolbar.authors": "Autoren:", "timeslider.toolbar.authorsList": "keine Autoren", "timeslider.toolbar.exportlink.title": "Diese Version exportieren", "timeslider.exportCurrent": "Exportiere diese Version als:", "timeslider.version": "Version {{version}}", "timeslider.saved": "Gespeichert am {{day}}. {{month}} {{year}}", - "timeslider.playPause": "Dokumentbearbeitung abspielen/pausieren", - "timeslider.backRevision": "Eine Version in diesem Dokument zurück gehen", - "timeslider.forwardRevision": "Eine Version in diesem Dokument vorwärts gehen", + "timeslider.playPause": "Padbearbeitung abspielen/pausieren", + "timeslider.backRevision": "Eine Version in diesem Pad zurück gehen", + "timeslider.forwardRevision": "Eine Version in diesem Pad vorwärts gehen", "timeslider.dateformat": "{{day}}.{{month}}.{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Januar", "timeslider.month.february": "Februar", @@ -124,9 +124,9 @@ "pad.editbar.clearcolors": "Autorenfarben im gesamten Dokument zurücksetzen?", "pad.impexp.importbutton": "Jetzt importieren", "pad.impexp.importing": "Importiere …", - "pad.impexp.confirmimport": "Das Importieren einer Datei überschreibt den aktuellen Text des Dokuments. Wollen Sie wirklich fortfahren?", + "pad.impexp.confirmimport": "Das Importieren einer Datei überschreibt den aktuellen Text des Pads. Wollen Sie wirklich fortfahren?", "pad.impexp.convertFailed": "Diese Datei konnte nicht importiert werden. Bitte verwenden Sie ein anderes Dokumentformat oder übertragen Sie den Text manuell.", - "pad.impexp.padHasData": "Diese Datei konnte nicht importiert werden, da dieses Dokument bereits Änderungen enthält. Bitte importieren Sie die Datei in ein neues Dokument.", + "pad.impexp.padHasData": "Diese Datei konnte nicht importiert werden, da dieses Pad bereits Änderungen enthält. Bitte importieren Sie die Datei in ein neues Pad.", "pad.impexp.uploadFailed": "Das Hochladen ist fehlgeschlagen. Bitte versuchen Sie es erneut.", "pad.impexp.importfailed": "Import fehlgeschlagen", "pad.impexp.copypaste": "Bitte kopieren und einfügen", From d7c4cc8e65ae42eb47905b389b9afed3a90e3169 Mon Sep 17 00:00:00 2001 From: Stefan Date: Wed, 23 Mar 2016 16:47:52 +0100 Subject: [PATCH 104/118] Fix check in backend tests --- tests/backend/specs/api/pad.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/backend/specs/api/pad.js b/tests/backend/specs/api/pad.js index e04033c0..1db90580 100644 --- a/tests/backend/specs/api/pad.js +++ b/tests/backend/specs/api/pad.js @@ -501,7 +501,7 @@ describe('getText', function(){ api.get(endPoint('getText')+"&padID="+testPadId) .expect(function(res){ if(res.body.code !== 0) throw new Error("Pad Get Text failed"); - if(res.body.data.text !== text+"\nhello") throw new Error("Pad Text not set properly"); + if(res.body.data.text !== text+"hello\n") throw new Error("Pad Text not set properly"); }) .expect('Content-Type', /json/) .expect(200, done); From 7dd26bd2500edf56510eeb0784fc3b5d08a41eff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Thu, 24 Mar 2016 07:15:23 +0100 Subject: [PATCH 105/118] Localisation updates from https://translatewiki.net. --- src/locales/zh-hant.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/zh-hant.json b/src/locales/zh-hant.json index 8bdf29dc..01aa4215 100644 --- a/src/locales/zh-hant.json +++ b/src/locales/zh-hant.json @@ -21,7 +21,7 @@ "pad.toolbar.indent.title": "縮排(TAB)", "pad.toolbar.unindent.title": "凸排(Shift+TAB)", "pad.toolbar.undo.title": "撤銷(Ctrl-Z)", - "pad.toolbar.redo.title": "重做(Ctrl-Y)", + "pad.toolbar.redo.title": "重做 (Ctrl+Y)", "pad.toolbar.clearAuthorship.title": "清除協作者顏色區別 (Ctrl+Shift+C)", "pad.toolbar.import_export.title": "以其他檔案格式匯入/匯出", "pad.toolbar.timeslider.title": "時間軸", From 4846798528935abd7e83a98eaa01706d690a642a Mon Sep 17 00:00:00 2001 From: John McLear Date: Sat, 26 Mar 2016 22:00:34 +0800 Subject: [PATCH 106/118] extend attributesonselection method --- doc/api/editorInfo.md | 12 +++-- src/static/js/AttributeManager.js | 83 +++++++++++++++++++++++++++++++ 2 files changed, 92 insertions(+), 3 deletions(-) diff --git a/doc/api/editorInfo.md b/doc/api/editorInfo.md index 31361a75..afb790b9 100644 --- a/doc/api/editorInfo.md +++ b/doc/api/editorInfo.md @@ -37,13 +37,19 @@ Returns the `rep` object. ## editorInfo.ace_isCaret(?) ## editorInfo.ace_getLineAndCharForPoint(?) ## editorInfo.ace_performDocumentApplyAttributesToCharRange(?) -## editorInfo.ace_setAttributeOnSelection(?) +## editorInfo.ace_setAttributeOnSelection(attribute, enabled) +Sets an attribute on current range. +Example: `call.editorInfo.ace_setAttributeOnSelection("turkey::balls", true); // turkey is the attribute here, balls is the value +Notes: to remove the attribute pass enabled as false ## editorInfo.ace_toggleAttributeOnSelection(?) -## editorInfo.ace_getAttributeOnSelection(attribute) +## editorInfo.ace_getAttributeOnSelection(attribute, prevChar) Returns a boolean if an attribute exists on a selected range. +prevChar value should be true if you want to get the previous Character attribute instead of the current selection for example +if the caret is at position 0,1 (after first character) it's probable you want the attributes on the character at 0,0 The attribute should be the string name of the attribute applied to the selection IE subscript Example usage: Apply the activeButton Class to a button if an attribute is on a highlighted/selected caret position or range. -Example: `call.editorInfo.ace_getAttributeOnSelection("subscript");` // call here is the callstack from aceEditEvent. +Example `var isItThere = documentAttributeManager.getAttributeOnSelection("turkey::balls", true);` + See the ep_subscript plugin for an example of this function in action. Notes: Does not work on first or last character of a line. Suffers from a race condition if called with aceEditEvent. ## editorInfo.ace_performSelectionChange(?) diff --git a/src/static/js/AttributeManager.js b/src/static/js/AttributeManager.js index d4d20a1f..2bd3b6a2 100644 --- a/src/static/js/AttributeManager.js +++ b/src/static/js/AttributeManager.js @@ -179,6 +179,89 @@ AttributeManager.prototype = _(AttributeManager.prototype).extend({ return []; }, + /* + Gets a given attribute on a selection + @param attributeName + @param prevChar + returns true or false if an attribute is visible in range + */ + getAttributeOnSelection: function(attributeName, prevChar){ + var rep = this.rep; + if (!(rep.selStart && rep.selEnd)) return + // If we're looking for the caret attribute not the selection + // has the user already got a selection or is this purely a caret location? + var isNotSelection = (rep.selStart[0] == rep.selEnd[0] && rep.selEnd[1] === rep.selStart[1]); + if(isNotSelection){ + if(prevChar){ + // If it's not the start of the line + if(rep.selStart[1] !== 0){ + rep.selStart[1]--; + } + } + } + + var withIt = Changeset.makeAttribsString('+', [ + [attributeName, 'true'] + ], rep.apool); + var withItRegex = new RegExp(withIt.replace(/\*/g, '\\*') + "(\\*|$)"); + function hasIt(attribs) + { + return withItRegex.test(attribs); + } + + return rangeHasAttrib(rep.selStart, rep.selEnd) + + function rangeHasAttrib(selStart, selEnd) { + // if range is collapsed -> no attribs in range + if(selStart[1] == selEnd[1] && selStart[0] == selEnd[0]) return false + + if(selStart[0] != selEnd[0]) { // -> More than one line selected + var hasAttrib = true + + // from selStart to the end of the first line + hasAttrib = hasAttrib && rangeHasAttrib(selStart, [selStart[0], rep.lines.atIndex(selStart[0]).text.length]) + + // for all lines in between + for(var n=selStart[0]+1; n < selEnd[0]; n++) { + hasAttrib = hasAttrib && rangeHasAttrib([n, 0], [n, rep.lines.atIndex(n).text.length]) + } + + // for the last, potentially partial, line + hasAttrib = hasAttrib && rangeHasAttrib([selEnd[0], 0], [selEnd[0], selEnd[1]]) + + return hasAttrib + } + + // Logic tells us we now have a range on a single line + + var lineNum = selStart[0] + , start = selStart[1] + , end = selEnd[1] + , hasAttrib = true + + // Iterate over attribs on this line + + var opIter = Changeset.opIterator(rep.alines[lineNum]) + , indexIntoLine = 0 + + while (opIter.hasNext()) { + var op = opIter.next(); + var opStartInLine = indexIntoLine; + var opEndInLine = opStartInLine + op.chars; + if (!hasIt(op.attribs)) { + // does op overlap selection? + if (!(opEndInLine <= start || opStartInLine >= end)) { + hasAttrib = false; // since it's overlapping but hasn't got the attrib -> range hasn't got it + break; + } + } + indexIntoLine = opEndInLine; + } + + return hasAttrib + } + }, + /* Gets all attributes at a position containing line number and column @param lineNumber starting with zero From 97b971747f19c427e40e1fa64b431324da80238d Mon Sep 17 00:00:00 2001 From: John McLear Date: Sat, 26 Mar 2016 22:01:26 +0800 Subject: [PATCH 107/118] forgot this one --- 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 8576ee33..f2c45f6a 100644 --- a/src/static/js/ace2_inner.js +++ b/src/static/js/ace2_inner.js @@ -2338,8 +2338,17 @@ function Ace2Inner(){ editorInfo.ace_setAttributeOnSelection = setAttributeOnSelection; - function getAttributeOnSelection(attributeName){ + function getAttributeOnSelection(attributeName, prevChar){ if (!(rep.selStart && rep.selEnd)) return + var isNotSelection = (rep.selStart[0] == rep.selEnd[0] && rep.selEnd[1] === rep.selStart[1]); + if(isNotSelection){ + if(prevChar){ + // If it's not the start of the line + if(rep.selStart[1] !== 0){ + rep.selStart[1]--; + } + } + } var withIt = Changeset.makeAttribsString('+', [ [attributeName, 'true'] From e1999d826cd549bd2126040bf68a944413238aa2 Mon Sep 17 00:00:00 2001 From: John McLear Date: Sun, 27 Mar 2016 13:31:00 +0800 Subject: [PATCH 108/118] allow greater than or equal to v 4 --- bin/installDeps.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bin/installDeps.sh b/bin/installDeps.sh index 2e1d465d..0b41c559 100755 --- a/bin/installDeps.sh +++ b/bin/installDeps.sh @@ -48,7 +48,8 @@ NODE_VERSION=$(node --version) NODE_V_MINOR=$(echo $NODE_VERSION | cut -d "." -f 1-2) NODE_V_MAIN=$(echo $NODE_VERSION | cut -d "." -f 1) NODE_V_MAIN=${NODE_V_MAIN#"v"} -if [ ! $NODE_V_MINOR = "v0.10" ] && [ ! $NODE_V_MINOR = "v0.11" ] && [ ! $NODE_V_MINOR = "v0.12" ] && [ ! $NODE_V_MAIN -gt 4 ]; then +echo $NODE_V_MAIN +if [ ! $NODE_V_MINOR = "v0.10" ] && [ ! $NODE_V_MINOR = "v0.11" ] && [ ! $NODE_V_MINOR = "v0.12" ] && [ ! $NODE_V_MAIN -ge 4 ]; then echo "You're running a wrong version of node. You're using $NODE_VERSION, we need node v0.10.x or higher" >&2 exit 1 fi From 8f2f01dff81de3de2979e0cafd23c0e091bedb0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Mon, 28 Mar 2016 10:09:39 +0200 Subject: [PATCH 109/118] Localisation updates from https://translatewiki.net. --- src/locales/pl.json | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/src/locales/pl.json b/src/locales/pl.json index 78e84ab1..3d9170ba 100644 --- a/src/locales/pl.json +++ b/src/locales/pl.json @@ -15,7 +15,7 @@ "pad.toolbar.bold.title": "Pogrubienie (Ctrl-B)", "pad.toolbar.italic.title": "Kursywa (Ctrl-I)", "pad.toolbar.underline.title": "Podkreślenie (Ctrl-U)", - "pad.toolbar.strikethrough.title": "Przekreślenie", + "pad.toolbar.strikethrough.title": "Przekreślenie (Ctrl+5)", "pad.toolbar.ol.title": "Lista uporządkowana (Ctrl+Shift+N)", "pad.toolbar.ul.title": "Lista nieuporządkowana (Ctrl+Shift+L)", "pad.toolbar.indent.title": "Wcięcie (TAB)", @@ -32,12 +32,14 @@ "pad.colorpicker.save": "Zapisz", "pad.colorpicker.cancel": "Anuluj", "pad.loading": "Ładowanie...", + "pad.noCookie": "Nie znaleziono pliku cookie. Proszę zezwolić pliki cookie w przeglądarce!", "pad.passwordRequired": "Musisz podać hasło aby uzyskać dostęp do tego dokumentu", "pad.permissionDenied": "Nie masz uprawnień dostępu do tego dokumentu", "pad.wrongPassword": "Nieprawidłowe hasło", "pad.settings.padSettings": "Ustawienia dokumentu", "pad.settings.myView": "Mój widok", "pad.settings.stickychat": "Czat zawsze na ekranie", + "pad.settings.chatandusers": "Pokaż czat i użytkowników", "pad.settings.colorcheck": "Kolory autorstwa", "pad.settings.linenocheck": "Numery linii", "pad.settings.rtlcheck": "Czytasz treść od prawej do lewej?", @@ -69,7 +71,7 @@ "pad.modals.looping.cause": "Być może jesteś połączony przez niezgodną zaporę lub serwer proxy.", "pad.modals.initsocketfail": "Serwer jest nieosiągalny.", "pad.modals.initsocketfail.explanation": "Nie udało się połączyć z serwerem synchronizacji.", - "pad.modals.initsocketfail.cause": "Przyczyną są prawdopodobnie problemy z przeglądarka lub połączeniem z internetem.", + "pad.modals.initsocketfail.cause": "Prawdopodobnie jest to spowodowane problemami z przeglądarką lub połączeniem internetowym.", "pad.modals.slowcommit.explanation": "Serwer nie odpowiada.", "pad.modals.slowcommit.cause": "Może być to spowodowane problemami z Twoim połączeniem z siecią.", "pad.modals.badChangeset.explanation": "Edycja, którą wykonałeś, została niewłaściwie zakwalifikowana przez serwer synchronizacji.", @@ -96,6 +98,8 @@ "timeslider.exportCurrent": "Eksportuj bieżącą wersję jako:", "timeslider.version": "Wersja {{version}}", "timeslider.saved": "Zapisano {{day}} {{month}} {{year}}", + "timeslider.backRevision": "Przejdź do poprzedniej wersji dokumentu", + "timeslider.forwardRevision": "Przejdź do następnej wersji dokumentu", "timeslider.dateformat": "{{year}}-{{month}}-{{day}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Styczeń", "timeslider.month.february": "Luty", @@ -109,18 +113,20 @@ "timeslider.month.october": "Październik", "timeslider.month.november": "Listopad", "timeslider.month.december": "Grudzień", - "timeslider.unnamedauthors": "{{num}} {[plural(num) one: autor, other: autorów ]} bez nazw", + "timeslider.unnamedauthors": "{{num}} {[plural(num) one: nienazwany autor, other: nienazwanych autorów ]}", "pad.savedrevs.marked": "Ta wersja została właśnie oznaczona jako zapisana.", + "pad.savedrevs.timeslider": "Możesz zobaczyć zapisane wersje na osi czasu", "pad.userlist.entername": "Wprowadź swoją nazwę", "pad.userlist.unnamed": "bez nazwy", "pad.userlist.guest": "Gość", "pad.userlist.deny": "Zabroń", - "pad.userlist.approve": "Akceptuj", + "pad.userlist.approve": "Zezwól", "pad.editbar.clearcolors": "Wyczyścić kolory autorstwa w całym dokumencie?", "pad.impexp.importbutton": "Importuj teraz", "pad.impexp.importing": "Importowanie...", "pad.impexp.confirmimport": "Importowanie pliku spowoduje zastąpienie bieżącego tekstu. Czy na pewno chcesz kontynuować?", "pad.impexp.convertFailed": "Nie byliśmy w stanie zaimportować tego pliku. Proszę użyć innego formatu dokumentu lub skopiować i wkleić ręcznie", + "pad.impexp.padHasData": "Nie udało się zaimportować tego pliku, bo ten dokument ma już zmiany, proszę zaimportować do nowego dokumentu", "pad.impexp.uploadFailed": "Przesyłanie nie powiodło się, proszę spróbować jeszcze raz", "pad.impexp.importfailed": "Importowanie nie powiodło się", "pad.impexp.copypaste": "Proszę skopiować i wkleić", From 103e07e8287eccd312a6db4c0694c5964c9043b4 Mon Sep 17 00:00:00 2001 From: Stefan Date: Tue, 29 Mar 2016 16:16:22 +0200 Subject: [PATCH 110/118] Fix document.domain error in frontend tests --- src/templates/timeslider.html | 4 ---- tests/frontend/runner.js | 6 ------ 2 files changed, 10 deletions(-) diff --git a/src/templates/timeslider.html b/src/templates/timeslider.html index af0a8f02..f52c0c50 100644 --- a/src/templates/timeslider.html +++ b/src/templates/timeslider.html @@ -246,10 +246,6 @@ $ = jQuery = require('ep_etherpad-lite/static/js/rjquery').jQuery; // Expose jQuery #HACK browser = require('ep_etherpad-lite/static/js/browser'); - if ((!browser.msie) && (!(browser.mozilla && browser.version.indexOf("1.8.") == 0))) { - document.domain = document.domain; // for comet - } - var plugins = require('ep_etherpad-lite/static/js/pluginfw/client_plugins'); var socket = require('ep_etherpad-lite/static/js/timeslider').socket; BroadcastSlider = require('ep_etherpad-lite/static/js/timeslider').BroadcastSlider; diff --git a/tests/frontend/runner.js b/tests/frontend/runner.js index 4801b95c..e77f6707 100644 --- a/tests/frontend/runner.js +++ b/tests/frontend/runner.js @@ -161,12 +161,6 @@ $(function(){ } } - //allow cross iframe access - var browser = bowser; - if ((!browser.msie) && (!(browser.mozilla && browser.version.indexOf("1.8.") == 0))) { - document.domain = document.domain; // for comet - } - //http://stackoverflow.com/questions/1403888/get-url-parameter-with-jquery var getURLParameter = function (name) { return decodeURI( From 7637b0cd199c9bc41bcdf8219fc310e128e0eb66 Mon Sep 17 00:00:00 2001 From: Stefan Date: Sun, 3 Apr 2016 16:57:15 +0200 Subject: [PATCH 111/118] Increase version of node for windows to 4.4.2 --- bin/buildForWindows.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/buildForWindows.sh b/bin/buildForWindows.sh index 1ee080d1..1ef9e772 100755 --- a/bin/buildForWindows.sh +++ b/bin/buildForWindows.sh @@ -1,6 +1,6 @@ #!/bin/sh -NODE_VERSION="4.4.0" +NODE_VERSION="4.4.2" #Move to the folder where ep-lite is installed cd `dirname $0` From 21372c93a3522ad340a5823b81928687fa990e22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Thu, 7 Apr 2016 08:00:19 +0200 Subject: [PATCH 112/118] Localisation updates from https://translatewiki.net. --- src/locales/cs.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/locales/cs.json b/src/locales/cs.json index 1a26e7a6..cc537de7 100644 --- a/src/locales/cs.json +++ b/src/locales/cs.json @@ -6,7 +6,8 @@ "Juandev", "Leanes", "Quinn", - "Aktron" + "Aktron", + "Mormegil" ] }, "index.newPad": "Založ nový Pad", @@ -113,7 +114,7 @@ "timeslider.month.october": "říjen", "timeslider.month.november": "listopad", "timeslider.month.december": "prosinec", - "timeslider.unnamedauthors": "{{num}} {[ plural(num) one: nejmenovaný Autor, few: nejmenovaní Autoři, other: nejmenovaných Autorů ]}", + "timeslider.unnamedauthors": "{{num}} {[plural(num) one: nejmenovaný autor, few: nejmenovaní autoři, other: nejmenovaných autorů ]}", "pad.savedrevs.marked": "Tato revize je nyní označena jako uložená", "pad.savedrevs.timeslider": "Návštěvou časové osy zobrazíte uložené revize", "pad.userlist.entername": "Zadejte své jméno", From 6b6a0283554ea4b1ba0475412a55e8707148d8e8 Mon Sep 17 00:00:00 2001 From: John McLear Date: Sat, 9 Apr 2016 20:01:49 +0100 Subject: [PATCH 113/118] include the padId --- src/node/utils/ExportHtml.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/node/utils/ExportHtml.js b/src/node/utils/ExportHtml.js index 058127b3..836165b1 100644 --- a/src/node/utils/ExportHtml.js +++ b/src/node/utils/ExportHtml.js @@ -446,7 +446,8 @@ function getHTMLFromAtext(pad, atext, authorColors) lineContent: lineContent, apool: apool, attribLine: attribLines[i], - text: textLines[i] + text: textLines[i], + padId: pad.id } var lineContentFromHook = hooks.callAllStr("getLineHTMLForExport", context, " ", " ", ""); From 6e78895cddbf9e7bcfee5c6e8b922fd71ebc1780 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Mon, 11 Apr 2016 07:07:32 +0200 Subject: [PATCH 114/118] Localisation updates from https://translatewiki.net. --- src/locales/azb.json | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/locales/azb.json b/src/locales/azb.json index 799c5b6b..a27c41b9 100644 --- a/src/locales/azb.json +++ b/src/locales/azb.json @@ -3,7 +3,8 @@ "authors": [ "Amir a57", "Mousa", - "Koroğlu" + "Koroğlu", + "Alp Er Tunqa" ] }, "index.newPad": "یئنی یادداشت دفترچه سی", @@ -11,17 +12,17 @@ "pad.toolbar.bold.title": "بویوت", "pad.toolbar.italic.title": "مورب", "pad.toolbar.underline.title": "خطدین آلتی", - "pad.toolbar.strikethrough.title": "خط یئمیش", - "pad.toolbar.ol.title": "جوتدنمیش فهرست", - "pad.toolbar.ul.title": "جوتدنممیش فهرست", + "pad.toolbar.strikethrough.title": "خط یئمیش (Ctrl+5)", + "pad.toolbar.ol.title": "جوتدنمیش فهرست (Ctrl+Shift+N)", + "pad.toolbar.ul.title": "جوتدنمه‌میش لیست (Ctrl+Shift+L)", "pad.toolbar.indent.title": "ایچری باتدیگی", - "pad.toolbar.unindent.title": "ائشیگه چیخدیگی", + "pad.toolbar.unindent.title": "ائشیگه چیخدیغی (Shift+TAB)", "pad.toolbar.undo.title": "باطل ائتمک", "pad.toolbar.redo.title": "یئنی دن", - "pad.toolbar.clearAuthorship.title": "یازیچی رنگ لری پوزماق", + "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": "بو دفترچه یادداشت دا اولان کاربرلری گوستر", @@ -69,6 +70,7 @@ "timeslider.toolbar.returnbutton": "یادداشت دفترچه سینه قاییت", "timeslider.toolbar.authors": "یازیچیلار", "timeslider.toolbar.authorsList": "یازیچی سیز", + "timeslider.toolbar.exportlink.title": "ائشیگه آپارماق", "timeslider.month.january": "ژانویه", "timeslider.month.february": "فوریه", "timeslider.month.march": "مارس", From 15c9041f129c68cedade9b663fe5f8725d8264fb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niklas=20Laxstr=C3=B6m?= Date: Mon, 18 Apr 2016 07:04:42 +0200 Subject: [PATCH 115/118] Localisation updates from https://translatewiki.net. --- src/locales/azb.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/azb.json b/src/locales/azb.json index a27c41b9..995e8539 100644 --- a/src/locales/azb.json +++ b/src/locales/azb.json @@ -26,7 +26,7 @@ "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 8aa297fb40d6414aefecc09ea7654f1947f97c34 Mon Sep 17 00:00:00 2001 From: Stefan Date: Sun, 24 Apr 2016 20:29:07 +0200 Subject: [PATCH 116/118] Remove node version output on start --- bin/installDeps.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/bin/installDeps.sh b/bin/installDeps.sh index 0b41c559..ea6be38f 100755 --- a/bin/installDeps.sh +++ b/bin/installDeps.sh @@ -48,7 +48,6 @@ NODE_VERSION=$(node --version) NODE_V_MINOR=$(echo $NODE_VERSION | cut -d "." -f 1-2) NODE_V_MAIN=$(echo $NODE_VERSION | cut -d "." -f 1) NODE_V_MAIN=${NODE_V_MAIN#"v"} -echo $NODE_V_MAIN if [ ! $NODE_V_MINOR = "v0.10" ] && [ ! $NODE_V_MINOR = "v0.11" ] && [ ! $NODE_V_MINOR = "v0.12" ] && [ ! $NODE_V_MAIN -ge 4 ]; then echo "You're running a wrong version of node. You're using $NODE_VERSION, we need node v0.10.x or higher" >&2 exit 1 From fb96f32028f27d3f3f4e17b0ec397166a9f07816 Mon Sep 17 00:00:00 2001 From: Stefan Date: Sun, 24 Apr 2016 20:42:53 +0200 Subject: [PATCH 117/118] Update node for windows to version 4.4.3 --- bin/buildForWindows.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bin/buildForWindows.sh b/bin/buildForWindows.sh index 1ef9e772..8e921d84 100755 --- a/bin/buildForWindows.sh +++ b/bin/buildForWindows.sh @@ -1,6 +1,6 @@ #!/bin/sh -NODE_VERSION="4.4.2" +NODE_VERSION="4.4.3" #Move to the folder where ep-lite is installed cd `dirname $0` From ebe44b0eabe8c717d9ff2b2242054ee2d094c7ac Mon Sep 17 00:00:00 2001 From: Stefan Date: Sun, 24 Apr 2016 21:03:42 +0200 Subject: [PATCH 118/118] Release version 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 a906691d..fe98e297 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.5.7", + "version" : "1.6.0", "license" : "Apache-2.0" }