From c370f779cc8fdf4b1f80396dfcfed5e5164df709 Mon Sep 17 00:00:00 2001 From: John McLear Date: Wed, 2 Jan 2013 14:01:39 +0000 Subject: [PATCH 01/37] stop enter reloading new page on search result request --- src/static/js/admin/plugins.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/static/js/admin/plugins.js b/src/static/js/admin/plugins.js index 618520282..0e492025e 100644 --- a/src/static/js/admin/plugins.js +++ b/src/static/js/admin/plugins.js @@ -29,6 +29,14 @@ $(document).ready(function () { $("#progress.dialog").hide(); }); + $("form").submit(function(){ + var query = $('.search-results').data('query'); + query.pattern = $("#search-query")[0].value; + query.offset = 0; + search(); + return false; + }); + $("#do-search").unbind('click').click(function () { var query = $('.search-results').data('query'); query.pattern = $("#search-query")[0].value; From 9f9f7a627e742c772344d55f048c7245ca03ebcd Mon Sep 17 00:00:00 2001 From: Stephan Jauernick Date: Wed, 2 Jan 2013 15:14:46 +0100 Subject: [PATCH 02/37] corrected a documentation glitch for checkToken - clarified which token is validated --- doc/api/http_api.md | 2 +- src/node/db/API.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/api/http_api.md b/doc/api/http_api.md index 61daeaa39..b9b5fedbb 100644 --- a/doc/api/http_api.md +++ b/doc/api/http_api.md @@ -414,7 +414,7 @@ sends a custom message of type `msg` to the pad #### checkToken() * API >= 1.2 -returns ok when api token is valid +returns ok when the current api token is valid *Example returns:* * `{"code":0,"message":"ok","data":null}` diff --git a/src/node/db/API.js b/src/node/db/API.js index ea58d8599..a26055a79 100644 --- a/src/node/db/API.js +++ b/src/node/db/API.js @@ -549,7 +549,7 @@ exports.sendClientsMessage = function (padID, msg, callback) { } /** -checkToken() returns ok when api token is valid +checkToken() returns ok when the current api token is valid Example returns: From c56c7b8ca96568a9d93b6dd1b79b60b6e19a6bf8 Mon Sep 17 00:00:00 2001 From: mluto Date: Sun, 6 Jan 2013 12:19:56 +0100 Subject: [PATCH 03/37] Load CSS before JS According to google this is more efficent https://developers.google.com/speed/docs/best-practices/rtt?hl=en#PutSty lesBeforeScripts --- src/templates/pad.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/templates/pad.html b/src/templates/pad.html index a9313a1be..92f6c1ae0 100644 --- a/src/templates/pad.html +++ b/src/templates/pad.html @@ -34,16 +34,16 @@ - - - - <% e.begin_block("styles"); %> <% e.end_block(); %> + + + + <% e.begin_block("body"); %> From 77315aa1d4c0026ee267dca684acb27ecfef0069 Mon Sep 17 00:00:00 2001 From: mluto Date: Sun, 6 Jan 2013 12:26:00 +0100 Subject: [PATCH 04/37] Load CSS before JS, in timeslider --- src/templates/timeslider.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/templates/timeslider.html b/src/templates/timeslider.html index 16579942b..6cddfc15a 100644 --- a/src/templates/timeslider.html +++ b/src/templates/timeslider.html @@ -33,14 +33,14 @@ - - - - + + + + From 6a27a547274c1d4ad57dac994720285ed36c3c95 Mon Sep 17 00:00:00 2001 From: mluto Date: Sun, 6 Jan 2013 12:48:32 +0100 Subject: [PATCH 05/37] Added --root argument to run.sh to bypass the root-check, fix for #1324 --- bin/run.sh | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/bin/run.sh b/bin/run.sh index 82e89a946..41a8090d2 100755 --- a/bin/run.sh +++ b/bin/run.sh @@ -8,10 +8,18 @@ if [ -d "../bin" ]; then cd "../" fi +ignoreRoot=0 +for ARG in $* +do + if [ $ARG == '--root' ]; then + ignoreRoot=1 + fi +done + #Stop the script if its started as root -if [ "$(id -u)" -eq 0 ]; then +if [ "$(id -u)" -eq 0 ] && [ $ignoreRoot -eq 0 ]; then echo "You shouldn't start Etherpad-Lite as root!" - echo "Please type 'Etherpad Lite rocks my socks' if you still want to start it as root" + echo "Please type 'Etherpad Lite rocks my socks' or supply the '--root' argument if you still want to start it as root" read rocks if [ ! $rocks = "Etherpad Lite rocks my socks" ] then From 9484b92ae236888fc72a181adf3248816b52b7f0 Mon Sep 17 00:00:00 2001 From: mluto Date: Sun, 6 Jan 2013 14:55:33 +0100 Subject: [PATCH 06/37] fixed and unified indenting, added comments in handleClientReady --- src/node/handler/PadMessageHandler.js | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js index a0bccfc51..ef70d604e 100644 --- a/src/node/handler/PadMessageHandler.js +++ b/src/node/handler/PadMessageHandler.js @@ -782,15 +782,15 @@ function handleClientReady(client, message) var padIds; async.series([ - // Get ro/rw id:s - function (callback) { + //Get ro/rw id:s + function (callback) + { readOnlyManager.getIds(message.padId, function(err, value) { if(ERR(err, callback)) return; padIds = value; callback(); }); }, - //check permissions function(callback) { @@ -816,7 +816,7 @@ function handleClientReady(client, message) } }); }, - //get all authordata of this new user + //get all authordata of this new user, and load the pad-object from the database function(callback) { async.parallel([ @@ -840,6 +840,7 @@ function handleClientReady(client, message) callback(); }); }, + //get pad function(callback) { padManager.getPad(padIds.padId, function(err, value) @@ -851,7 +852,7 @@ function handleClientReady(client, message) } ], callback); }, - //these db requests all need the pad object + //these db requests all need the pad object (timestamp of latest revission, author data, chat messages) function(callback) { var authors = pad.getAllAuthors(); @@ -894,6 +895,7 @@ function handleClientReady(client, message) ], callback); }, + //glue the clientVars together, send them and tell the other clients that a new one is there function(callback) { //Check that the client is still here. It might have disconnected between callbacks. @@ -980,11 +982,10 @@ function handleClientReady(client, message) }, "abiwordAvailable": settings.abiwordAvailable(), "plugins": { - "plugins": plugins.plugins, - "parts": plugins.parts, - }, - "initialChangesets": [] // FIXME: REMOVE THIS SHIT - + "plugins": plugins.plugins, + "parts": plugins.parts, + }, + "initialChangesets": [] // FIXME: REMOVE THIS SHIT } //Add a username to the clientVars if one avaiable From 5592c4b0feb42082ab50e1c90753c28e5cd79334 Mon Sep 17 00:00:00 2001 From: mluto Date: Sun, 6 Jan 2013 16:11:48 +0100 Subject: [PATCH 07/37] client loads messages using the new client loads messages using new method, getChatMessages restructured and renamed to getLastChatMessages, added GET_CHAT_MESSAGES, getChatMessages restructured and renamed to getLastChatMessages --- src/node/db/Pad.js | 26 ++------ src/node/handler/PadMessageHandler.js | 87 +++++++++++++++++++++++---- src/static/js/chat.js | 23 +++---- src/static/js/collab_client.js | 14 ++++- src/static/js/pad.js | 5 ++ 5 files changed, 108 insertions(+), 47 deletions(-) diff --git a/src/node/db/Pad.js b/src/node/db/Pad.js index dba791fd2..0914c175b 100644 --- a/src/node/db/Pad.js +++ b/src/node/db/Pad.js @@ -281,27 +281,7 @@ Pad.prototype.getChatMessage = function getChatMessage(entryNum, callback) { }); }; -Pad.prototype.getLastChatMessages = function getLastChatMessages(count, callback) { - //return an empty array if there are no chat messages - if(this.chatHead == -1) - { - callback(null, []); - return; - } - - var _this = this; - - //works only if we decrement the amount, for some reason - count--; - - //set the startpoint - var start = this.chatHead-count; - if(start < 0) - start = 0; - - //set the endpoint - var end = this.chatHead; - +Pad.prototype.getChatMessages = function getChatMessages(start, end, callback) { //collect the numbers of chat entries and in which order we need them var neededEntries = []; var order = 0; @@ -310,7 +290,9 @@ Pad.prototype.getLastChatMessages = function getLastChatMessages(count, callback neededEntries.push({entryNum:i, order: order}); order++; } - + + var _this = this; + //get all entries out of the database var entries = []; async.forEach(neededEntries, function(entryObject, callback) diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js index ef70d604e..00eb234e4 100644 --- a/src/node/handler/PadMessageHandler.js +++ b/src/node/handler/PadMessageHandler.js @@ -205,6 +205,8 @@ exports.handleMessage = function(client, message) handleUserInfoUpdate(client, message); } else if (message.data.type == "CHAT_MESSAGE") { handleChatMessage(client, message); + } else if (message.data.type == "GET_CHAT_MESSAGES") { + handleGetChatMessages(client, message); } else if (message.data.type == "SAVE_REVISION") { handleSaveRevisionMessage(client, message); } else if (message.data.type == "CLIENT_MESSAGE" && @@ -362,6 +364,74 @@ function handleChatMessage(client, message) }); } +/** + * Handles the clients requets for more chat-messages + * @param client the client that send this message + * @param message the message from the client + */ +function handleGetChatMessages(client, message) +{ + if(message.data.start == null) + { + messageLogger.warn("Dropped message, GetChatMessages Message has no start!"); + return; + } + if(message.data.end == null) + { + messageLogger.warn("Dropped message, GetChatMessages Message has no start!"); + return; + } + + var start = message.data.start; + var end = message.data.end; + var count = start - count; + + if(count < 0 && count > 100) + { + messageLogger.warn("Dropped message, GetChatMessages Message, client requested invalid amout of messages!"); + return; + } + + var padId = sessioninfos[client.id].padId; + var pad; + + async.series([ + //get the pad + function(callback) + { + padManager.getPad(padId, function(err, _pad) + { + if(ERR(err, callback)) return; + pad = _pad; + callback(); + }); + }, + function(callback) + { + pad.getChatMessages(start, end, function(err, chatMessages) + { + if(ERR(err, callback)) return; + + var infoMsg = { + type: "COLLABROOM", + data: { + type: "CHAT_MESSAGES", + messages: chatMessages + } + }; + + // send the messages back to the client + for(var i in pad2sessions[padId]) + { + if(pad2sessions[padId][i] == client.id) + { + socketio.sockets.sockets[pad2sessions[padId][i]].json.send(infoMsg); + break; + } + } + }); + }]); +} /** * Handles a handleSuggestUserName, that means a user have suggest a userName for a other user @@ -778,7 +848,6 @@ function handleClientReady(client, message) var pad; var historicalAuthorData = {}; var currentTime; - var chatMessages; var padIds; async.series([ @@ -852,7 +921,7 @@ function handleClientReady(client, message) } ], callback); }, - //these db requests all need the pad object (timestamp of latest revission, author data, chat messages) + //these db requests all need the pad object (timestamp of latest revission, author data) function(callback) { var authors = pad.getAllAuthors(); @@ -881,16 +950,6 @@ function handleClientReady(client, message) callback(); }); }, callback); - }, - //get the latest chat messages - function(callback) - { - pad.getLastChatMessages(100, function(err, _chatMessages) - { - if(ERR(err, callback)) return; - chatMessages = _chatMessages; - callback(); - }); } ], callback); @@ -968,7 +1027,9 @@ function handleClientReady(client, message) "padId": message.padId, "initialTitle": "Pad: " + message.padId, "opts": {}, - "chatHistory": chatMessages, + // tell the client the number of the latest chat-message, which will be + // used to request the latest 100 chat-messages later (GET_CHAT_MESSAGES) + "chatHead": pad.chatHead, "numConnectedUsers": pad2sessions[padIds.padId].length, "isProPad": false, "readOnlyId": padIds.readOnlyPadId, diff --git a/src/static/js/chat.js b/src/static/js/chat.js index 79224e80c..19c4cba80 100644 --- a/src/static/js/chat.js +++ b/src/static/js/chat.js @@ -28,6 +28,7 @@ var Tinycon = require('tinycon/tinycon'); var chat = (function() { var isStuck = false; + var gotInitialMessages = false; var chatMentions = 0; var self = { show: function () @@ -76,7 +77,7 @@ var chat = (function() this._pad.collabClient.sendMessage({"type": "CHAT_MESSAGE", "text": text}); $("#chatinput").val(""); }, - addMessage: function(msg, increment) + addMessage: function(msg, increment, isHistoryAdd) { //correct the time msg.time += this._pad.clientTimeOffset; @@ -112,7 +113,10 @@ var chat = (function() var authorName = msg.userName == null ? _('pad.userlist.unnamed') : padutils.escapeHtml(msg.userName); var html = "

" + authorName + ":" + timeStr + " " + text + "

"; - $("#chattext").append(html); + if(isHistoryAdd) + $("#chattext").prepend(html); + else + $("#chattext").append(html); //should we increment the counter?? if(increment) @@ -125,7 +129,7 @@ var chat = (function() $("#chatcounter").text(count); // chat throb stuff -- Just make it throw for twice as long - if(wasMentioned && !alreadyFocused) + if(wasMentioned && !alreadyFocused && !isHistoryAdd) { // If the user was mentioned show for twice as long and flash the browser window $('#chatthrob').html(""+authorName+"" + ": " + text).show().delay(4000).hide(400); chatMentions++; @@ -141,8 +145,8 @@ var chat = (function() chatMentions = 0; Tinycon.setBubble(0); }); - self.scrollDown(); - + if(!isHistoryAdd) + self.scrollDown(); }, init: function(pad) { @@ -157,12 +161,9 @@ var chat = (function() } }); - var that = this; - $.each(clientVars.chatHistory, function(i, o){ - that.addMessage(o, false); - }) - - $("#chatcounter").text(clientVars.chatHistory.length); + // initial messages are loaded in pad.js' _afterHandshake + + $("#chatcounter").text(0); } } diff --git a/src/static/js/collab_client.js b/src/static/js/collab_client.js index b700fc490..29c404828 100644 --- a/src/static/js/collab_client.js +++ b/src/static/js/collab_client.js @@ -400,7 +400,19 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad) } else if (msg.type == "CHAT_MESSAGE") { - chat.addMessage(msg, true); + chat.addMessage(msg, true, false); + } + else if (msg.type == "CHAT_MESSAGES") + { + for(var i = msg.messages.length - 1; i >= 0; i--) + { + chat.addMessage(msg.messages[i], true, true); + } + if(!chat.gotInitalMessages) + { + chat.scrollDown(); + chat.gotInitalMessages = true; + } } else if (msg.type == "SERVER_MESSAGE") { diff --git a/src/static/js/pad.js b/src/static/js/pad.js index a02d7abbc..56a1dad7c 100644 --- a/src/static/js/pad.js +++ b/src/static/js/pad.js @@ -555,6 +555,11 @@ var pad = { pad.collabClient.setOnChannelStateChange(pad.handleChannelStateChange); pad.collabClient.setOnInternalAction(pad.handleCollabAction); + // load initial chat-messages + var chatHead = clientVars.chatHead; + var start = Math.max(chatHead - 100, 0); + pad.collabClient.sendMessage({"type": "GET_CHAT_MESSAGES", "start": start, "end": chatHead}); + function postAceInit() { padeditbar.init(); From c57ecf06ca9856b501dba2c2ed925aecc3df2100 Mon Sep 17 00:00:00 2001 From: mluto Date: Sun, 6 Jan 2013 18:50:52 +0100 Subject: [PATCH 08/37] fixed broken placeholders in locales --- src/locales/az.json | 6 +++--- src/locales/el.json | 6 +++--- src/locales/fr.json | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/locales/az.json b/src/locales/az.json index f28558e42..dd95f733a 100644 --- a/src/locales/az.json +++ b/src/locales/az.json @@ -75,9 +75,9 @@ "timeslider.toolbar.authors": "M\u00fc\u0259llifl\u0259r:", "timeslider.toolbar.authorsList": "M\u00fc\u0259llif yoxdur", "timeslider.exportCurrent": "Cari versiyan\u0131 ixrac etm\u0259k kimi:", - "timeslider.version": "Versiya {{versiya}}", - "timeslider.saved": "Saxlan\u0131ld\u0131 {{ay}} {{g\u00fcn}}, {{il}}", - "timeslider.dateformat": "{{ay}}\/{{g\u00fcn}}\/{{il}} {{saat}}:{{d\u0259qiq\u0259}}:{{saniy\u0259}}", + "timeslider.version": "Versiya {{version}}", + "timeslider.saved": "Saxlan\u0131ld\u0131 {{day}} {{month}}, {{year}}", + "timeslider.dateformat": "{{day}} {{month}}, {{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "Yanvar", "timeslider.month.february": "Fevral", "timeslider.month.march": "Mart", diff --git a/src/locales/el.json b/src/locales/el.json index 593d66640..869aebba3 100644 --- a/src/locales/el.json +++ b/src/locales/el.json @@ -86,9 +86,9 @@ "timeslider.toolbar.authorsList": "\u039a\u03b1\u03bd\u03ad\u03bd\u03b1\u03c2 \u03a3\u03c5\u03bd\u03c4\u03ac\u03ba\u03c4\u03b7\u03c2", "timeslider.toolbar.exportlink.title": "\u0395\u03be\u03b1\u03b3\u03c9\u03b3\u03ae", "timeslider.exportCurrent": "\u0395\u03be\u03b1\u03b3\u03c9\u03b3\u03ae \u03c4\u03c1\u03ad\u03c7\u03bf\u03c5\u03c3\u03b1\u03c2 \u03ad\u03ba\u03b4\u03bf\u03c3\u03b7\u03c2 \u03c9\u03c2:", - "timeslider.version": "\u0388\u03ba\u03b4\u03bf\u03c3\u03b7 {{\u03ad\u03ba\u03b4\u03bf\u03c3\u03b7}}", - "timeslider.saved": "\u0391\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03bf\u03c2 {{\u03bc\u03ae\u03bd\u03b1\u03c2}} {{\u03b7\u03bc\u03ad\u03c1\u03b1}}, {{\u03ad\u03c4\u03bf\u03c2}}", - "timeslider.dateformat": "{{\u03bc\u03ae\u03bd\u03b1\u03c2}}\/{{\u03b7\u03bc\u03ad\u03c1\u03b1}}\/{{\u03ad\u03c4\u03bf\u03c2}} {{\u03ce\u03c1\u03b5\u03c2}}:{{\u03bb\u03b5\u03c0\u03c4\u03ac}}:{{\u03b4\u03b5\u03c5\u03c4\u03b5\u03c1\u03cc\u03bb\u03b5\u03c0\u03c4\u03b1}}", + "timeslider.version": "\u0388\u03ba\u03b4\u03bf\u03c3\u03b7 {{version}}", + "timeslider.saved": "\u0391\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03bf\u03c2 {{month}} {{day}}, {{year}}", + "timeslider.dateformat": "{{month}} {{day}}, {{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "\u0399\u03b1\u03bd\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2", "timeslider.month.february": "\u03a6\u03b5\u03b2\u03c1\u03bf\u03c5\u03ac\u03c1\u03b9\u03bf\u03c2", "timeslider.month.march": "\u039c\u03ac\u03c1\u03c4\u03b9\u03bf\u03c2", diff --git a/src/locales/fr.json b/src/locales/fr.json index f914dc05b..f861150df 100644 --- a/src/locales/fr.json +++ b/src/locales/fr.json @@ -95,7 +95,7 @@ "timeslider.exportCurrent": "Exporter la version actuelle en\u00a0:", "timeslider.version": "Version {{version}}", "timeslider.saved": "Enregistr\u00e9 le {{day}} {{month}} {{year}}", - "timeslider.dateformat": "{{j}}\/{{mois}}\/{{ann\u00e9e}} {{h}}:{{minutes}}:{{secondes}}", + "timeslider.dateformat": "{{day}} {{month}} {{year}} {{hours}}:{{minutes}}:{{secondes}}", "timeslider.month.january": "Janvier", "timeslider.month.february": "F\u00e9vrier", "timeslider.month.march": "Mars", From 7ec7ccc4022dc565dba43d7bc22953844b9f4f91 Mon Sep 17 00:00:00 2001 From: mluto Date: Sun, 6 Jan 2013 19:25:32 +0100 Subject: [PATCH 09/37] Fixed extractPadData.js, #1320 --- bin/extractPadData.js | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/bin/extractPadData.js b/bin/extractPadData.js index 061a2e3f9..18f1f76c1 100644 --- a/bin/extractPadData.js +++ b/bin/extractPadData.js @@ -10,17 +10,26 @@ if(process.argv.length != 3) //get the padID var padId = process.argv[2]; -//initalize the database -var log4js = require("log4js"); -log4js.setGlobalLogLevel("INFO"); -var async = require("async"); -var db = require('../node/db/DB'); -var dirty = require("dirty")(padId + ".db"); -var padManager; -var pad; +var db, dirty, padManager, pad; var neededDBValues = ["pad:"+padId]; +var npm = require("../src/node_modules/npm"); +var async = require("../src/node_modules/async"); +var log4js = require("../src/node_modules/log4js"); +log4js.setGlobalLogLevel("INFO"); + async.series([ + // load npm + function(callback) { + npm.load({}, function(er) { + callback(er) + }) + }, + // load modules + function(callback) { + db = require('../src/node/db/DB'); + dirty = require("../src/node_modules/ueberDB/node_modules/dirty")(padId + ".db"); + }, //intallize the database function (callback) { From e7d9359737d40aa2168b60ac02c14b88a4e8cc8e Mon Sep 17 00:00:00 2001 From: mluto Date: Sun, 6 Jan 2013 20:20:46 +0100 Subject: [PATCH 10/37] Added error-handling for npm --- bin/extractPadData.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/bin/extractPadData.js b/bin/extractPadData.js index 18f1f76c1..f79b964af 100644 --- a/bin/extractPadData.js +++ b/bin/extractPadData.js @@ -22,7 +22,15 @@ async.series([ // load npm function(callback) { npm.load({}, function(er) { - callback(er) + if(er) + { + console.error("Could not load NPM: " + er) + process.exit(1); + } + else + { + callback(); + } }) }, // load modules From 1782c68d4d864473bf103677f7d5507c21e6e0af Mon Sep 17 00:00:00 2001 From: Siebrand Mazeland Date: Mon, 7 Jan 2013 10:18:02 +0000 Subject: [PATCH 11/37] Localisation updates from http://translatewiki.net. --- src/locales/ca.json | 3 + src/locales/diq.json | 19 ++++--- src/locales/el.json | 6 +- src/locales/fa.json | 118 ++++++++++++++++++++++++--------------- src/locales/fi.json | 15 +++-- src/locales/it.json | 13 +++-- src/locales/ksh.json | 11 +++- src/locales/nl.json | 2 +- src/locales/pl.json | 7 ++- src/locales/uk.json | 2 + src/locales/zh-hans.json | 16 +++--- 11 files changed, 132 insertions(+), 80 deletions(-) diff --git a/src/locales/ca.json b/src/locales/ca.json index 7c29ae980..b809d8695 100644 --- a/src/locales/ca.json +++ b/src/locales/ca.json @@ -31,6 +31,8 @@ "pad.chat": "Xat", "timeslider.toolbar.authors": "Autors:", "timeslider.toolbar.authorsList": "No hi ha autors", + "timeslider.toolbar.exportlink.title": "Exporta", + "timeslider.version": "Versi\u00f3 {{version}}", "timeslider.month.january": "Gener", "timeslider.month.february": "Febrer", "timeslider.month.march": "Mar\u00e7", @@ -44,6 +46,7 @@ "timeslider.month.november": "Novembre", "timeslider.month.december": "Desembre", "pad.userlist.entername": "Introdu\u00efu el vostre nom", + "pad.userlist.unnamed": "sense nom", "pad.userlist.guest": "Convidat", "pad.userlist.deny": "Refusa", "pad.userlist.approve": "Aprova", diff --git a/src/locales/diq.json b/src/locales/diq.json index 8039d19b7..62079d78b 100644 --- a/src/locales/diq.json +++ b/src/locales/diq.json @@ -8,20 +8,21 @@ "index.newPad": "Pedo newe", "pad.toolbar.bold.title": "Qal\u0131n (Ctrl-B)", "pad.toolbar.italic.title": "Nam\u0131te (Ctrl-I)", - "pad.toolbar.underline.title": "B\u0131n xizkerden (Ctrl-U)", - "pad.toolbar.strikethrough.title": "Ser\u00ea c\u0131 xiz\u0131n", - "pad.toolbar.ol.title": "Lista ratnayi", - "pad.toolbar.indent.title": "Serinya sat\u0131r", + "pad.toolbar.underline.title": "B\u0131nxet\u0131n (Ctrl-U)", + "pad.toolbar.strikethrough.title": "Serxet\u0131n", + "pad.toolbar.ol.title": "Lista r\u00eazkerdiye", + "pad.toolbar.ul.title": "Lista r\u00eazn\u00eakerdiye", + "pad.toolbar.indent.title": "Ser\u00ea r\u00eaze", "pad.toolbar.unindent.title": "V\u0131cente", - "pad.toolbar.undo.title": "Peyser b\u00ea (Ctrl-Z)", - "pad.toolbar.redo.title": "Ver \u015fo (Ctrl-Y)", - "pad.toolbar.clearAuthorship.title": "Pak Reng\u00ea Nu\u015fto\u011fey", + "pad.toolbar.undo.title": "Meke (Ctrl-Z)", + "pad.toolbar.redo.title": "F\u0131na b\u0131ke (Ctrl-Y)", + "pad.toolbar.clearAuthorship.title": "Reng\u00ea Nu\u015fto\u011fi\u00ea Ar\u0131stey", "pad.toolbar.timeslider.title": "\u011e\u0131zag\u00ea zemani", "pad.toolbar.savedRevision.title": "Rewizyon\u00ea Qeydbiyayey", "pad.toolbar.settings.title": "Sazkerd\u0131\u015fi", "pad.toolbar.embed.title": "Na ped degusnayiya", "pad.colorpicker.save": "Qeyd ke", - "pad.colorpicker.cancel": "B\u0131terkne", + "pad.colorpicker.cancel": "B\u0131texelne", "pad.loading": "Bar beno...", "pad.settings.padSettings": "Sazkerd\u0131\u015f\u00ea Pedi", "pad.settings.myView": "Asay\u0131\u015f\u00ea m\u0131", @@ -39,7 +40,7 @@ "pad.importExport.exportpdf": "PDF", "pad.importExport.exportopen": "ODF (Open Document Format)", "pad.importExport.exportdokuwiki": "DokuWiki", - "pad.modals.connected": "Gredeya", + "pad.modals.connected": "G\u0131rediya.", "pad.modals.unauth": "Selahiyetdar niyo", "pad.modals.looping": "B\u00eag\u0131rey\u0131n.", "pad.modals.initsocketfail": "N\u00earesney\u00eano ciyageyro\u011fi.", diff --git a/src/locales/el.json b/src/locales/el.json index 869aebba3..dced1d4f5 100644 --- a/src/locales/el.json +++ b/src/locales/el.json @@ -3,7 +3,8 @@ "authors": [ "Evropi", "Glavkos", - "Monopatis" + "Monopatis", + "Protnet" ] }, "index.newPad": "\u039d\u03ad\u03bf Pad", @@ -103,6 +104,7 @@ "timeslider.month.december": "\u0394\u03b5\u03ba\u03ad\u03bc\u03b2\u03c1\u03b9\u03bf\u03c2", "pad.savedrevs.marked": "\u0391\u03c5\u03c4\u03ae \u03b7 \u03b1\u03bd\u03b1\u03b8\u03b5\u03ce\u03c1\u03b7\u03c3\u03b7 \u03b5\u03c0\u03b9\u03c3\u03b7\u03bc\u03ac\u03bd\u03b8\u03b7\u03ba\u03b5 \u03c9\u03c2 \u03b1\u03c0\u03bf\u03b8\u03b7\u03ba\u03b5\u03c5\u03bc\u03ad\u03bd\u03b7 \u03b1\u03bd\u03b1\u03b8\u03b5\u03ce\u03c1\u03b7\u03c3\u03b7", "pad.userlist.entername": "\u0395\u03b9\u03c3\u03ac\u03b3\u03b5\u03c4\u03b5 \u03c4\u03bf \u03cc\u03bd\u03bf\u03bc\u03ac \u03c3\u03b1\u03c2", + "pad.userlist.unnamed": "\u03b1\u03bd\u03ce\u03bd\u03c5\u03bc\u03bf", "pad.userlist.guest": "\u0395\u03c0\u03b9\u03c3\u03ba\u03ad\u03c0\u03c4\u03b7\u03c2", "pad.userlist.deny": "\u0386\u03c1\u03bd\u03b7\u03c3\u03b7", "pad.userlist.approve": "\u0388\u03b3\u03ba\u03c1\u03b9\u03c3\u03b7", @@ -114,5 +116,5 @@ "pad.impexp.uploadFailed": "\u0397 \u03b1\u03c0\u03bf\u03c3\u03c4\u03bf\u03bb\u03ae \u03b1\u03c0\u03ad\u03c4\u03c5\u03c7\u03b5, \u03c0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce \u03c0\u03c1\u03bf\u03c3\u03c0\u03b1\u03b8\u03ae\u03c3\u03c4\u03b5 \u03be\u03b1\u03bd\u03ac", "pad.impexp.importfailed": "\u0397 \u03b5\u03b9\u03c3\u03b1\u03b3\u03c9\u03b3\u03ae \u03b1\u03c0\u03ad\u03c4\u03c5\u03c7\u03b5", "pad.impexp.copypaste": "\u03a0\u03b1\u03c1\u03b1\u03ba\u03b1\u03bb\u03ce \u03b1\u03bd\u03c4\u03b9\u03b3\u03c1\u03ac\u03c8\u03c4\u03b5 \u03ba\u03b1\u03b9 \u03b5\u03c0\u03b9\u03ba\u03bf\u03bb\u03bb\u03ae\u03c3\u03c4\u03b5", - "pad.impexp.exportdisabled": "\u0397 \u03b5\u03be\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03b5 \u03c4\u03cd\u03c0\u03bf \u03b1\u03c1\u03c7\u03b5\u03af\u03bf {{type}} \u03ad\u03c7\u03b5\u03b9 \u03b1\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03b8\u03b5\u03af. \u0395\u03c0\u03b9\u03ba\u03bf\u03b9\u03bd\u03c9\u03bd\u03ae\u03c3\u03c4\u03b5 \u03bc\u03b5 \u03c4\u03bf\u03bd \u03b4\u03b9\u03b1\u03c7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03ae \u03c4\u03bf\u03c5 \u03c3\u03c5\u03c3\u03c4\u03ae\u03bc\u03b1\u03c4\u03cc\u03c2 \u03c3\u03b1\u03c2 \u03b3\u03b9\u03b1 \u03bb\u03b5\u03c0\u03c4\u03bf\u03bc\u03ad\u03c1\u03b5\u03b9\u03b5\u03c2." + "pad.impexp.exportdisabled": "\u0397 \u03b5\u03be\u03b1\u03b3\u03c9\u03b3\u03ae \u03c3\u03b5 \u03bc\u03bf\u03c1\u03c6\u03ae {{type}} \u03ad\u03c7\u03b5\u03b9 \u03b1\u03c0\u03b5\u03bd\u03b5\u03c1\u03b3\u03bf\u03c0\u03bf\u03b9\u03b7\u03b8\u03b5\u03af. \u0395\u03c0\u03b9\u03ba\u03bf\u03b9\u03bd\u03c9\u03bd\u03ae\u03c3\u03c4\u03b5 \u03bc\u03b5 \u03c4\u03bf\u03bd \u03b4\u03b9\u03b1\u03c7\u03b5\u03b9\u03c1\u03b9\u03c3\u03c4\u03ae \u03c4\u03bf\u03c5 \u03c3\u03c5\u03c3\u03c4\u03ae\u03bc\u03b1\u03c4\u03cc\u03c2 \u03c3\u03b1\u03c2 \u03b3\u03b9\u03b1 \u03bb\u03b5\u03c0\u03c4\u03bf\u03bc\u03ad\u03c1\u03b5\u03b9\u03b5\u03c2." } \ No newline at end of file diff --git a/src/locales/fa.json b/src/locales/fa.json index 600ebae35..437b8da09 100644 --- a/src/locales/fa.json +++ b/src/locales/fa.json @@ -1,92 +1,118 @@ { "@metadata": { "authors": { - "1": "ZxxZxxZ" + "0": "BMRG14", + "2": "ZxxZxxZ" } }, - "index.newPad": "\u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u062c\u062f\u06cc\u062f", - "index.createOpenPad": "\u06cc\u0627 \u0627\u06cc\u062c\u0627\u062f\/\u0628\u0627\u0632\u06a9\u0631\u062f\u0646 \u06cc\u06a9 \u067e\u062f \u0628\u0627 \u0646\u0627\u0645:", + "index.newPad": "\u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u062a\u0627\u0632\u0647", + "index.createOpenPad": "\u06cc\u0627 \u0627\u06cc\u062c\u0627\u062f\/\u0628\u0627\u0632\u06a9\u0631\u062f\u0646 \u06cc\u06a9 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0628\u0627 \u0646\u0627\u0645:", "pad.toolbar.bold.title": "\u067e\u0631\u0631\u0646\u06af (Ctrl-B)", - "pad.toolbar.italic.title": "\u0645\u0648\u0631\u0628 (Ctrl-I)", + "pad.toolbar.italic.title": "\u06a9\u062c (Ctrl-I)", "pad.toolbar.underline.title": "\u0632\u06cc\u0631\u062e\u0637 (Ctrl-U)", - "pad.toolbar.strikethrough.title": "\u062e\u0637\u200c\u062e\u0648\u0631\u062f\u0647", - "pad.toolbar.ol.title": "\u0641\u0647\u0631\u0633\u062a \u0645\u0631\u062a\u0628\u200c\u0634\u062f\u0647", - "pad.toolbar.ul.title": "\u0641\u0647\u0631\u0633\u062a \u0645\u0631\u062a\u0628\u200c\u0646\u0634\u062f\u0647", + "pad.toolbar.strikethrough.title": "\u062e\u0637 \u062e\u0648\u0631\u062f\u0647", + "pad.toolbar.ol.title": "\u0641\u0647\u0631\u0633\u062a \u0645\u0631\u062a\u0628 \u0634\u062f\u0647", + "pad.toolbar.ul.title": "\u0641\u0647\u0631\u0633\u062a \u0645\u0631\u062a\u0628 \u0646\u0634\u062f\u0647", "pad.toolbar.indent.title": "\u062a\u0648\u0631\u0641\u062a\u06af\u06cc", - "pad.toolbar.unindent.title": "\u0628\u06cc\u0631\u0648\u0646\u200c\u0631\u0641\u062a\u06af\u06cc", + "pad.toolbar.unindent.title": "\u0628\u06cc\u0631\u0648\u0646 \u0631\u0641\u062a\u06af\u06cc", "pad.toolbar.undo.title": "\u0628\u0627\u0637\u0644\u200c\u06a9\u0631\u062f\u0646 (Ctrl-Z)", "pad.toolbar.redo.title": "\u0627\u0632 \u0646\u0648 (Ctrl-Y)", - "pad.toolbar.clearAuthorship.title": "\u067e\u0627\u06a9\u200c\u06a9\u0631\u062f\u0646 \u0631\u0646\u06af\u200c\u0647\u0627\u06cc \u0646\u0648\u06cc\u0633\u0646\u062f\u06af\u06cc", + "pad.toolbar.clearAuthorship.title": "\u067e\u0627\u06a9 \u06a9\u0631\u062f\u0646 \u0631\u0646\u06af\u200c\u0647\u0627\u06cc \u0646\u0648\u06cc\u0633\u0646\u062f\u06af\u06cc", "pad.toolbar.import_export.title": "\u062f\u0631\u0648\u0646\u200c\u0631\u06cc\u0632\u06cc\/\u0628\u0631\u0648\u0646\u200c\u0631\u06cc\u0632\u06cc \u0627\u0632\/\u0628\u0647 \u0642\u0627\u0644\u0628\u200c\u0647\u0627\u06cc \u0645\u062e\u062a\u0644\u0641", "pad.toolbar.timeslider.title": "\u0627\u0633\u0644\u0627\u06cc\u062f\u0631 \u0632\u0645\u0627\u0646", - "pad.toolbar.savedRevision.title": "\u0646\u0633\u062e\u0647\u200c\u0647\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647\u200c\u0634\u062f\u0647", + "pad.toolbar.savedRevision.title": "\u0628\u0627\u0632\u0646\u0648\u06cc\u0633\u06cc\u200c\u0647\u0627\u06cc \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0647", "pad.toolbar.settings.title": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a", "pad.toolbar.embed.title": "\u062c\u0627\u0633\u0627\u0632\u06cc \u0627\u06cc\u0646 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a", "pad.toolbar.showusers.title": "\u0646\u0645\u0627\u06cc\u0634 \u06a9\u0627\u0631\u0628\u0631\u0627\u0646 \u062f\u0631 \u0627\u06cc\u0646 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a", "pad.colorpicker.save": "\u0630\u062e\u06cc\u0631\u0647", "pad.colorpicker.cancel": "\u0644\u063a\u0648", - "pad.loading": "\u062f\u0631 \u062d\u0627\u0644 \u0628\u0627\u0631\u06af\u06cc\u0631\u06cc...", + "pad.loading": "\u062f\u0631 \u062d\u0627\u0644 \u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc...", + "pad.passwordRequired": "\u0628\u0631\u0627\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0627\u06cc\u0646 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0646\u06cc\u0627\u0632 \u0628\u0647 \u06cc\u06a9 \u06af\u0630\u0631\u0648\u0627\u0698\u0647 \u062f\u0627\u0631\u06cc\u062f", + "pad.permissionDenied": "\u0634\u0645\u0627 \u0627\u062c\u0627\u0632\u0647\u200c\u06cc \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0627\u06cc\u0646 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0631\u0627 \u0646\u062f\u0627\u0631\u06cc\u062f", + "pad.wrongPassword": "\u06af\u0630\u0631\u0648\u0627\u0698\u0647\u200c\u06cc \u0634\u0645\u0627 \u062f\u0631\u0633\u062a \u0646\u06cc\u0633\u062a", "pad.settings.padSettings": "\u062a\u0646\u0638\u06cc\u0645\u0627\u062a \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a", "pad.settings.myView": "\u0646\u0645\u0627\u06cc \u0645\u0646", - "pad.settings.stickychat": "\u0686\u062a \u0647\u0645\u06cc\u0634\u0647 \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u0646\u0645\u0627\u06cc\u0634", + "pad.settings.stickychat": "\u06af\u0641\u062a\u06af\u0648 \u0647\u0645\u06cc\u0634\u0647 \u0631\u0648\u06cc \u0635\u0641\u062d\u0647 \u0646\u0645\u0627\u06cc\u0634 \u0628\u0627\u0634\u062f", "pad.settings.colorcheck": "\u0631\u0646\u06af\u200c\u0647\u0627\u06cc \u0646\u0648\u06cc\u0633\u0646\u062f\u06af\u06cc", - "pad.settings.linenocheck": "\u0634\u0645\u0627\u0631\u0647\u0654 \u062e\u0637\u0648\u0637", + "pad.settings.linenocheck": "\u0634\u0645\u0627\u0631\u0647\u200c\u06cc \u062e\u0637\u0648\u0637", "pad.settings.fontType": "\u0646\u0648\u0639 \u0642\u0644\u0645:", - "pad.settings.fontType.normal": "\u0639\u0627\u062f\u06cc", - "pad.settings.fontType.monospaced": "\u0645\u0648\u0646\u0648\u0627\u0633\u067e\u06cc\u0633", + "pad.settings.fontType.normal": "\u0633\u0627\u062f\u0647", + "pad.settings.fontType.monospaced": "Monospace", "pad.settings.globalView": "\u0646\u0645\u0627\u06cc \u0633\u0631\u0627\u0633\u0631\u06cc", "pad.settings.language": "\u0632\u0628\u0627\u0646:", "pad.importExport.import_export": "\u062f\u0631\u0648\u0646\u200c\u0631\u06cc\u0632\u06cc\/\u0628\u0631\u0648\u0646\u200c\u0631\u06cc\u0632\u06cc", - "pad.importExport.import": "\u0628\u0631\u06af\u0630\u0627\u0631\u06cc \u067e\u0631\u0648\u0646\u062f\u0647\u0654 \u0645\u062a\u0646\u06cc \u06cc\u0627 \u0633\u0646\u062f", - "pad.importExport.export": "\u0628\u0631\u0648\u0646\u200c\u0631\u06cc\u0632\u06cc \u0627\u06cc\u0646 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0628\u0647 \u0639\u0646\u0648\u0627\u0646:", - "pad.importExport.exporthtml": "\u0627\u0686\u200c\u062a\u06cc\u200c\u0627\u0645\u200c\u0627\u0644", - "pad.importExport.exportplain": "\u0645\u062a\u0646\u06cc \u0633\u0627\u062f\u0647", - "pad.importExport.exportword": "\u0645\u0627\u06cc\u06a9\u0631\u0648\u0633\u0627\u0641\u062a \u0648\u0631\u062f", - "pad.importExport.exportpdf": "\u067e\u06cc\u200c\u062f\u06cc\u200c\u0627\u0641", - "pad.importExport.exportopen": "\u0627\u0648\u062f\u06cc\u200c\u0627\u0641 (\u0642\u0627\u0644\u0628 \u0633\u0646\u062f \u0628\u0627\u0632)", - "pad.importExport.exportdokuwiki": "\u062f\u0648\u06a9\u0648\u0648\u06cc\u06a9\u06cc (DokuWiki)", + "pad.importExport.import": "\u0628\u0627\u0631\u06af\u0630\u0627\u0631\u06cc \u067e\u0631\u0648\u0646\u062f\u0647\u200c\u06cc \u0645\u062a\u0646\u06cc \u06cc\u0627 \u0633\u0646\u062f", + "pad.importExport.importSuccessful": "\u0645\u0648\u0641\u0642\u06cc\u062a \u0622\u0645\u06cc\u0632 \u0628\u0648\u062f!", + "pad.importExport.export": "\u0628\u0631\u0648\u0646\u200c\u0631\u06cc\u0632\u06cc \u0627\u06cc\u0646 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0628\u0627 \u0642\u0627\u0644\u0628:", + "pad.importExport.exporthtml": "HTML", + "pad.importExport.exportplain": "\u0645\u062a\u0646 \u0633\u0627\u062f\u0647", + "pad.importExport.exportword": "Microsoft Word", + "pad.importExport.exportpdf": "PDF", + "pad.importExport.exportopen": "ODF (\u0642\u0627\u0644\u0628 \u0633\u0646\u062f \u0628\u0627\u0632)", + "pad.importExport.exportdokuwiki": "DokuWiki", + "pad.importExport.abiword.innerHTML": "\u0634\u0645\u0627 \u062a\u0646\u0647\u0627 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u062f \u0627\u0632 \u0642\u0627\u0644\u0628 \u0645\u062a\u0646 \u0633\u0627\u062f\u0647 \u06cc\u0627 \u0627\u0686\u200c\u062a\u06cc\u200c\u0627\u0645\u200c\u0627\u0644 \u062f\u0631\u0648\u0646\u200c\u0631\u06cc\u0632\u06cc \u06a9\u0646\u06cc\u062f. \u0628\u0631\u0627\u06cc \u0628\u06cc\u0634\u062a\u0631 \u0634\u062f\u0646 \u0648\u06cc\u0698\u06af\u06cc\u200c\u0647\u0627\u06cc \u062f\u0631\u0648\u0646\u200c\u0631\u06cc\u0632\u06cc \u067e\u06cc\u0634\u0631\u0641\u062a\u0647 AbiWord<\/a> \u0631\u0627 \u0646\u0635\u0628 \u06a9\u0646\u06cc\u062f.", "pad.modals.connected": "\u0645\u062a\u0635\u0644 \u0634\u062f.", - "pad.modals.reconnecting": "\u0627\u062a\u0635\u0627\u0644 \u0645\u062c\u062f\u062f \u0628\u0647 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0634\u0645\u0627..", - "pad.modals.forcereconnect": "\u0627\u062c\u0628\u0627\u0631 \u0628\u0647 \u0627\u062a\u0635\u0627\u0644 \u0645\u062c\u062f\u062f", - "pad.modals.userdup.explanation": "\u0628\u0647 \u0646\u0638\u0631 \u0645\u06cc\u200c\u0631\u0633\u062f \u0627\u06cc\u0646 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u062f\u0631 \u0628\u06cc\u0634 \u0627\u0632 \u06cc\u06a9 \u067e\u0646\u062c\u0631\u0647\u0654 \u0645\u0631\u0648\u0631\u06af\u0631 \u0627\u0632 \u0627\u06cc\u0646 \u0631\u0627\u06cc\u0627\u0646\u0647 \u0628\u0627\u0632 \u0634\u062f\u0647\u200c\u0627\u0633\u062a.", - "pad.modals.userdup.advice": "\u0627\u062a\u0635\u0627\u0644 \u0645\u062c\u062f\u062f \u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u067e\u0646\u062c\u0631\u0647", + "pad.modals.reconnecting": "\u062f\u0631 \u062d\u0627\u0644 \u0627\u062a\u0635\u0627\u0644 \u062f\u0648\u0628\u0627\u0631\u0647 \u0628\u0647 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u0634\u0645\u0627..", + "pad.modals.forcereconnect": "\u0648\u0627\u062f\u0627\u0634\u062a\u0646 \u0628\u0647 \u0627\u062a\u0635\u0627\u0644 \u062f\u0648\u0628\u0627\u0631\u0647", + "pad.modals.userdup": "\u062f\u0631 \u067e\u0646\u062c\u0631\u0647\u200c\u0627\u06cc \u062f\u06cc\u06af\u0631 \u0628\u0627\u0632 \u0634\u062f", + "pad.modals.userdup.explanation": "\u06af\u0645\u0627\u0646 \u0645\u06cc\u200c\u0631\u0648\u062f \u0627\u06cc\u0646 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u062f\u0631 \u0628\u06cc\u0634 \u0627\u0632 \u06cc\u06a9 \u067e\u0646\u062c\u0631\u0647\u200c\u06cc \u0645\u0631\u0648\u0631\u06af\u0631 \u0628\u0627\u0632 \u0634\u062f\u0647\u200c\u0627\u0633\u062a.", + "pad.modals.userdup.advice": "\u0628\u0631\u0627\u06cc \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u0627\u06cc\u0646 \u067e\u0646\u062c\u0631\u0647 \u062f\u0648\u0628\u0627\u0631\u0647 \u0648\u0635\u0644 \u0634\u0648\u06cc\u062f.", "pad.modals.unauth": "\u0645\u062c\u0627\u0632 \u0646\u06cc\u0633\u062a", - "pad.modals.unauth.explanation": "\u062f\u0633\u062a\u0631\u0633\u06cc \u0634\u0645\u0627 \u062f\u0631 \u062d\u06cc\u0646 \u0645\u0634\u0627\u0647\u062f\u0647\u0654 \u0627\u06cc\u0646 \u0635\u0641\u062d\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u06cc\u0627\u0641\u062a\u0647\u200c\u0627\u0633\u062a.\n\u0633\u0639\u06cc \u06a9\u0646\u06cc\u062f \u062f\u0648\u0628\u0627\u0631\u0647 \u0645\u062a\u0635\u0644 \u0634\u0648\u06cc\u062f.", + "pad.modals.unauth.explanation": "\u062f\u0633\u062a\u0631\u0633\u06cc \u0634\u0645\u0627 \u062f\u0631 \u062d\u06cc\u0646 \u0645\u0634\u0627\u0647\u062f\u0647\u200c\u06cc \u0627\u06cc\u0646 \u0628\u0631\u06af\u0647 \u062a\u063a\u06cc\u06cc\u0631 \u06cc\u0627\u0641\u062a\u0647\u200c\u0627\u0633\u062a. \u062f\u0648\u0628\u0627\u0631\u0647 \u0645\u062a\u0635\u0644 \u0634\u0648\u06cc\u062f.", "pad.modals.looping": "\u0627\u062a\u0635\u0627\u0644 \u0642\u0637\u0639 \u0634\u062f.", "pad.modals.looping.explanation": "\u0645\u0634\u06a9\u0644\u0627\u062a\u06cc \u0627\u0631\u062a\u0628\u0627\u0637\u06cc \u0628\u0627 \u0633\u0631\u0648\u0631 \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0648\u062c\u0648\u062f \u062f\u0627\u0631\u062f.", "pad.modals.looping.cause": "\u0634\u0627\u06cc\u062f \u0634\u0645\u0627 \u0627\u0632 \u0637\u0631\u06cc\u0642 \u06cc\u06a9 \u0641\u0627\u06cc\u0631\u0648\u0627\u0644 \u06cc\u0627 \u067e\u0631\u0648\u06a9\u0633\u06cc \u0646\u0627\u0633\u0627\u0632\u06af\u0627\u0631 \u0645\u062a\u0635\u0644 \u0634\u062f\u0647\u200c\u0627\u06cc\u062f.", - "pad.modals.initsocketfail": "\u0633\u0631\u0648\u0631 \u063a\u06cc\u0631 \u0642\u0627\u0628\u0644 \u062f\u0633\u062a\u0631\u0633\u06cc \u0627\u0633\u062a.", - "pad.modals.initsocketfail.explanation": "\u0646\u062a\u0648\u0627\u0646\u0633\u062a \u0628\u0647 \u0633\u0631\u0648\u0631 \u0647\u0645\u06af\u0627\u0645\u200c\u0633\u0627\u0632\u06cc \u0645\u062a\u0635\u0644 \u0634\u0648\u062f.", - "pad.modals.initsocketfail.cause": "\u0627\u06cc\u0646 \u0627\u062d\u062a\u0645\u0627\u0644\u0627\u064b \u0628\u0647 \u062e\u0627\u0637\u0631 \u0645\u0634\u06a9\u0644\u06cc \u062f\u0631 \u0645\u0631\u0648\u0631\u06af\u0631 \u06cc\u0627 \u0627\u062a\u0635\u0627\u0644 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a\u06cc\u200c\u062a\u0627\u0646 \u0627\u0633\u062a.", + "pad.modals.initsocketfail": "\u0633\u0631\u0648\u0631 \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0646\u06cc\u0633\u062a.", + "pad.modals.initsocketfail.explanation": "\u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0647\u0645\u06af\u0627\u0645 \u0633\u0627\u0632\u06cc \u0648\u0635\u0644 \u0634\u062f.", + "pad.modals.initsocketfail.cause": "\u0634\u0627\u06cc\u062f \u0627\u06cc\u0646 \u0628\u0647 \u062e\u0627\u0637\u0631 \u0645\u0634\u06a9\u0644\u06cc \u062f\u0631 \u0645\u0631\u0648\u0631\u06af\u0631 \u06cc\u0627 \u0627\u062a\u0635\u0627\u0644 \u0627\u06cc\u0646\u062a\u0631\u0646\u062a\u06cc \u0634\u0645\u0627 \u0628\u0627\u0634\u062f.", "pad.modals.slowcommit": "\u0627\u062a\u0635\u0627\u0644 \u0642\u0637\u0639 \u0634\u062f.", "pad.modals.slowcommit.explanation": "\u0633\u0631\u0648\u0631 \u067e\u0627\u0633\u062e \u0646\u0645\u06cc\u200c\u062f\u0647\u062f.", "pad.modals.slowcommit.cause": "\u0627\u06cc\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u062f \u0628\u0647 \u062e\u0627\u0637\u0631 \u0645\u0634\u06a9\u0644\u0627\u062a\u06cc \u062f\u0631 \u0627\u062a\u0635\u0627\u0644 \u0628\u0647 \u0634\u0628\u06a9\u0647 \u0628\u0627\u0634\u062f.", - "pad.modals.deleted": "\u062d\u0630\u0641 \u0634\u062f.", - "pad.modals.deleted.explanation": "\u0627\u06cc\u0646 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u062d\u0630\u0641 \u0634\u062f\u0647\u200c\u0627\u0633\u062a.", + "pad.modals.deleted": "\u067e\u0627\u06a9 \u0634\u062f.", + "pad.modals.deleted.explanation": "\u0627\u06cc\u0646 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a \u067e\u0627\u06a9 \u0634\u062f\u0647\u200c\u0627\u0633\u062a.", "pad.modals.disconnected": "\u0627\u062a\u0635\u0627\u0644 \u0634\u0645\u0627 \u0642\u0637\u0639 \u0634\u062f\u0647\u200c\u0627\u0633\u062a.", "pad.modals.disconnected.explanation": "\u0627\u062a\u0635\u0627\u0644 \u0628\u0647 \u0633\u0631\u0648\u0631 \u0642\u0637\u0639 \u0634\u062f\u0647\u200c\u0627\u0633\u062a.", - "pad.modals.disconnected.cause": "\u0633\u0631\u0648\u0631 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u063a\u06cc\u0631 \u0642\u0627\u0628\u0644 \u062f\u0633\u062a\u0631\u0633 \u0628\u0627\u0634\u062f. \u0627\u06af\u0631 \u0627\u06cc\u0646 \u0645\u0634\u06a9\u0644 \u0628\u0627\u0632 \u0647\u0645 \u0631\u062e \u062f\u0627\u062f \u0644\u0637\u0641\u0627\u064b \u0628\u0647 \u0645\u0627 \u0627\u0637\u0644\u0627\u0639 \u062f\u0647\u06cc\u062f.", - "pad.share": "\u0628\u0647\u200c\u0627\u0634\u062a\u0631\u0627\u06a9\u200c\u06af\u0630\u0627\u0631\u06cc \u0627\u06cc\u0646 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a", + "pad.modals.disconnected.cause": "\u0633\u0631\u0648\u0631 \u0634\u0627\u06cc\u062f \u062f\u0631 \u062f\u0633\u062a\u0631\u0633 \u0646\u0628\u0627\u0634\u062f. \u0627\u06af\u0631 \u0627\u06cc\u0646 \u0645\u0634\u06a9\u0644 \u0628\u0627\u0632 \u0647\u0645 \u0631\u062e \u062f\u0627\u062f \u0645\u0627 \u0631\u0627 \u0622\u06af\u0627\u0647 \u0633\u0627\u0632\u06cc\u062f.", + "pad.share": "\u0628\u0647 \u0627\u0634\u062a\u0631\u0627\u06a9 \u06af\u0630\u0627\u0631\u06cc \u0627\u06cc\u0646 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a", "pad.share.readonly": "\u0641\u0642\u0637 \u062e\u0648\u0627\u0646\u062f\u0646\u06cc", "pad.share.link": "\u067e\u06cc\u0648\u0646\u062f", "pad.share.emebdcode": "\u062c\u0627\u0633\u0627\u0632\u06cc \u0646\u0634\u0627\u0646\u06cc", - "pad.chat": "\u0686\u062a", - "pad.chat.title": "\u0628\u0627\u0632\u06a9\u0631\u062f\u0646 \u0686\u062a \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a", - "timeslider.pageTitle": "{{appTitle}} \u0627\u0633\u0644\u0627\u06cc\u062f\u0631 \u0632\u0645\u0627\u0646", + "pad.chat": "\u06af\u0641\u062a\u06af\u0648", + "pad.chat.title": "\u0628\u0627\u0632\u06a9\u0631\u062f\u0646 \u06af\u0641\u062a\u06af\u0648 \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a", + "timeslider.pageTitle": "\u0627\u0633\u0644\u0627\u06cc\u062f\u0631 \u0632\u0645\u0627\u0646 {{appTitle}}", "timeslider.toolbar.returnbutton": "\u0628\u0627\u0632\u06af\u0634\u062a \u0628\u0647 \u062f\u0641\u062a\u0631\u0686\u0647 \u06cc\u0627\u062f\u062f\u0627\u0634\u062a", "timeslider.toolbar.authors": "\u0646\u0648\u06cc\u0633\u0646\u062f\u06af\u0627\u0646:", "timeslider.toolbar.authorsList": "\u0628\u062f\u0648\u0646 \u0646\u0648\u06cc\u0633\u0646\u062f\u0647", - "timeslider.exportCurrent": "\u0628\u0631\u0648\u0646\u200c\u0631\u06cc\u0632\u06cc \u0646\u0633\u062e\u0647\u0654 \u06a9\u0646\u0648\u0646\u06cc \u0628\u0647 \u0639\u0646\u0648\u0627\u0646:", + "timeslider.toolbar.exportlink.title": "\u0628\u0631\u0648\u0646\u200c\u0631\u06cc\u0632\u06cc", + "timeslider.exportCurrent": "\u0628\u0631\u0648\u0646\u200c\u0631\u06cc\u0632\u06cc \u0646\u06af\u0627\u0631\u0634 \u06a9\u0646\u0648\u0646\u06cc \u0628\u0647 \u0639\u0646\u0648\u0627\u0646:", + "timeslider.version": "\u0646\u06af\u0627\u0631\u0634 {{version}}", + "timeslider.saved": "{{month}} {{day}}\u060c {{year}} \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f", + "timeslider.dateformat": "{{month}}\/{{day}}\/{{year}} {{hours}}:{{minutes}}:{{seconds}}", "timeslider.month.january": "\u0698\u0627\u0646\u0648\u06cc\u0647", - "timeslider.month.february": "\u0641\u0648\u0631\u06cc\u0647", - "timeslider.month.march": "\u0645\u0627\u0631\u0633", - "timeslider.month.april": "\u0622\u0648\u0631\u06cc\u0644", - "timeslider.month.may": "\u0645\u0647", + "timeslider.month.february": "\u0641\u0628\u0631\u06cc\u0647", + "timeslider.month.march": "\u0645\u0627\u0631\u0686", + "timeslider.month.april": "\u0622\u067e\u0631\u06cc\u0644", + "timeslider.month.may": "\u0645\u06cc", "timeslider.month.june": "\u0698\u0648\u0626\u0646", - "timeslider.month.july": "\u0698\u0648\u0626\u06cc\u0647", - "timeslider.month.august": "\u0627\u0648\u062a", + "timeslider.month.july": "\u062c\u0648\u0644\u0627\u06cc", + "timeslider.month.august": "\u0622\u06af\u0648\u0633\u062a", "timeslider.month.september": "\u0633\u067e\u062a\u0627\u0645\u0628\u0631", "timeslider.month.october": "\u0627\u06a9\u062a\u0628\u0631", "timeslider.month.november": "\u0646\u0648\u0627\u0645\u0628\u0631", - "timeslider.month.december": "\u062f\u0633\u0627\u0645\u0628\u0631" + "timeslider.month.december": "\u062f\u0633\u0627\u0645\u0628\u0631", + "pad.savedrevs.marked": "\u0627\u06cc\u0646 \u0628\u0627\u0632\u0646\u0648\u06cc\u0633\u06cc \u0647\u0645 \u0627\u06a9\u0646\u0648\u0646 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0630\u062e\u06cc\u0631\u0647 \u0634\u062f\u0647 \u0639\u0644\u0627\u0645\u062a\u200c\u06af\u0630\u0627\u0631\u06cc \u0634\u062f", + "pad.userlist.entername": "\u0646\u0627\u0645 \u062e\u0648\u062f \u0631\u0627 \u0628\u0646\u0648\u06cc\u0633\u06cc\u062f", + "pad.userlist.unnamed": "\u0628\u062f\u0648\u0646 \u0646\u0627\u0645", + "pad.userlist.guest": "\u0645\u0647\u0645\u0627\u0646", + "pad.userlist.deny": "\u0631\u062f \u06a9\u0631\u062f\u0646", + "pad.userlist.approve": "\u067e\u0630\u06cc\u0631\u0641\u062a\u0646", + "pad.editbar.clearcolors": "\u0631\u0646\u06af \u0646\u0648\u06cc\u0633\u0646\u062f\u06af\u06cc \u0627\u0632 \u0647\u0645\u0647\u200c\u06cc \u0633\u0646\u062f \u067e\u0627\u06a9 \u0634\u0648\u062f\u061f", + "pad.impexp.importbutton": "\u0647\u0645 \u0627\u06a9\u0646\u0648\u0646 \u062f\u0631\u0648\u0646\u200c\u0631\u06cc\u0632\u06cc \u06a9\u0646", + "pad.impexp.importing": "\u062f\u0631 \u062d\u0627\u0644 \u062f\u0631\u0648\u0646\u200c\u0631\u06cc\u0632\u06cc...", + "pad.impexp.confirmimport": "\u0628\u0627 \u062f\u0631\u0648\u0646\u200c\u0631\u06cc\u0632\u06cc \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0646\u0648\u0634\u062a\u0647\u200c\u06cc \u06a9\u0646\u0648\u0646\u06cc \u062f\u0641\u062a\u0631\u0686\u0647 \u067e\u0627\u06a9 \u0645\u06cc\u200c\u0634\u0648\u062f. \u0622\u06cc\u0627 \u0645\u06cc\u200c\u062e\u0648\u0627\u0647\u06cc\u062f \u0627\u062f\u0627\u0645\u0647 \u062f\u0647\u06cc\u062f\u061f", + "pad.impexp.convertFailed": "\u0645\u0627 \u0646\u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u06cc\u0646 \u0641\u0627\u06cc\u0644 \u0631\u0627 \u062f\u0631\u0648\u0646\u200c\u0631\u06cc\u0632\u06cc \u06a9\u0646\u06cc\u0645. \u062e\u0648\u0627\u0647\u0634\u0645\u0646\u062f\u06cc\u0645 \u0642\u0627\u0644\u0628 \u062f\u06cc\u06af\u0631\u06cc \u0628\u0631\u0627\u06cc \u0633\u0646\u062f\u062a\u0627\u0646 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0631\u062f\u0647 \u06cc\u0627 \u0628\u0635\u0648\u0631\u062a \u062f\u0633\u062a\u06cc \u0622\u0646\u0631\u0627 \u06a9\u067e\u06cc \u06a9\u0646\u06cc\u062f", + "pad.impexp.uploadFailed": "\u0622\u067e\u0644\u0648\u062f \u0627\u0646\u062c\u0627\u0645 \u0646\u0634\u062f\u060c \u062f\u0648\u0628\u0627\u0631\u0647 \u062a\u0644\u0627\u0634 \u06a9\u0646\u06cc\u062f", + "pad.impexp.importfailed": "\u062f\u0631\u0648\u0646\u200c\u0631\u06cc\u0632\u06cc \u0627\u0646\u062c\u0627\u0645 \u0646\u0634\u062f", + "pad.impexp.copypaste": "\u06a9\u067e\u06cc \u067e\u06cc\u0633\u062a \u06a9\u0646\u06cc\u062f", + "pad.impexp.exportdisabled": "\u0628\u0631\u0648\u0646\u200c\u0631\u06cc\u0632\u06cc \u0628\u0627 \u0642\u0627\u0644\u0628 {{type}} \u0627\u0632 \u06a9\u0627\u0631 \u0627\u0641\u062a\u0627\u062f\u0647 \u0627\u0633\u062a. \u0628\u0631\u0627\u06cc \u062c\u0632\u0626\u06cc\u0627\u062a \u0628\u06cc\u0634\u062a\u0631 \u0628\u0627 \u0645\u062f\u06cc\u0631 \u0633\u06cc\u0633\u062a\u0645\u062a\u0627\u0646 \u062a\u0645\u0627\u0633 \u0628\u06af\u06cc\u0631\u06cc\u062f." } \ No newline at end of file diff --git a/src/locales/fi.json b/src/locales/fi.json index 762e5bfc6..9a644bda4 100644 --- a/src/locales/fi.json +++ b/src/locales/fi.json @@ -1,11 +1,12 @@ { "@metadata": { - "authors": [ - "Artnay", - "Jl", - "Nedergard", - "Nike" - ] + "authors": { + "0": "Artnay", + "1": "Jl", + "2": "Nedergard", + "3": "Nike", + "5": "VezonThunder" + } }, "index.newPad": "Uusi muistio", "index.createOpenPad": "tai luo tai avaa muistio nimell\u00e4:", @@ -56,6 +57,7 @@ "pad.modals.connected": "Yhdistetty.", "pad.modals.reconnecting": "Muodostetaan yhteytt\u00e4 muistioon uudelleen...", "pad.modals.forcereconnect": "Pakota yhdist\u00e4m\u00e4\u00e4n uudelleen", + "pad.modals.userdup": "Avattu toisessa ikkunassa", "pad.modals.userdup.explanation": "T\u00e4m\u00e4 muistio vaikuttaa olevan avoinna useammassa eri selainikkunassa t\u00e4ll\u00e4 koneella.", "pad.modals.userdup.advice": "Yhdist\u00e4 uudelleen, jos haluat k\u00e4ytt\u00e4\u00e4 t\u00e4t\u00e4 ikkunaa.", "pad.modals.unauth": "Oikeudet eiv\u00e4t riit\u00e4", @@ -84,6 +86,7 @@ "timeslider.toolbar.returnbutton": "Palaa muistioon", "timeslider.toolbar.authors": "Tekij\u00e4t:", "timeslider.toolbar.authorsList": "Ei tekij\u00f6it\u00e4", + "timeslider.toolbar.exportlink.title": "Vie", "timeslider.exportCurrent": "Vie nykyinen versio muodossa:", "timeslider.version": "Versio {{version}}", "timeslider.saved": "Tallennettu {{day}}. {{month}}ta {{year}}", diff --git a/src/locales/it.json b/src/locales/it.json index 4b6a95fe5..8f2a9c995 100644 --- a/src/locales/it.json +++ b/src/locales/it.json @@ -1,10 +1,11 @@ { "@metadata": { - "authors": [ - "Beta16", - "Gianfranco", - "Muxator" - ] + "authors": { + "0": "Beta16", + "1": "Gianfranco", + "2": "Muxator", + "4": "Vituzzu" + } }, "index.newPad": "Nuovo Pad", "index.createOpenPad": "o creare o aprire un Pad con il nome:", @@ -55,6 +56,7 @@ "pad.modals.connected": "Connesso.", "pad.modals.reconnecting": "Riconnessione al pad in corso...", "pad.modals.forcereconnect": "Forza la riconnessione", + "pad.modals.userdup": "Aperto in un'altra finestra", "pad.modals.userdup.explanation": "Questo Pad sembra essere aperto in pi\u00f9 di una finestra del browser su questo computer.", "pad.modals.userdup.advice": "Riconnettiti per utilizzare invece questa finestra.", "pad.modals.unauth": "Non autorizzato", @@ -83,6 +85,7 @@ "timeslider.toolbar.returnbutton": "Ritorna al Pad", "timeslider.toolbar.authors": "Autori:", "timeslider.toolbar.authorsList": "Nessun autore", + "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/ksh.json b/src/locales/ksh.json index 5093c0142..e4557e855 100644 --- a/src/locales/ksh.json +++ b/src/locales/ksh.json @@ -91,5 +91,14 @@ "timeslider.month.september": "S\u00e4pt\u00e4mber", "timeslider.month.october": "Oktoober", "timeslider.month.november": "Nov\u00e4mber", - "timeslider.month.december": "Dez\u00e4mber" + "timeslider.month.december": "Dez\u00e4mber", + "pad.userlist.entername": "Jif Dinge Naame en", + "pad.userlist.unnamed": "naamelo\u00df\u00df", + "pad.userlist.guest": "Ja\u00df\u00df", + "pad.userlist.deny": "Aflehne", + "pad.impexp.importing": "Ben aam Empotteere …", + "pad.impexp.uploadFailed": "Et Huhlaade es don\u00e4vve jejange, bes esu jood un probeer et norr_ens", + "pad.impexp.importfailed": "Et Empoteere es don\u00e4vve jejange", + "pad.impexp.copypaste": "Bes esu jood un donn et koppeere un enf\u00f6\u00f6je", + "pad.impexp.exportdisabled": "Et \u00c4xpotteere em {{type}}-Formmaat es affjeschalldt. De Verwallder vun heh d\u00e4 Sigge k\u00fcnne doh velleisch wiggerh\u00e4llefe." } \ No newline at end of file diff --git a/src/locales/nl.json b/src/locales/nl.json index fc5411e86..14ba42c0a 100644 --- a/src/locales/nl.json +++ b/src/locales/nl.json @@ -74,7 +74,7 @@ "pad.modals.disconnected.cause": "De server is mogelijk niet beschikbaar. Stel alstublieft de beheerder op de hoogte.", "pad.share": "Pad delen", "pad.share.readonly": "Alleen-lezen", - "pad.share.link": "Verwijzing", + "pad.share.link": "Koppeling", "pad.share.emebdcode": "URL insluiten", "pad.chat": "Chatten", "pad.chat.title": "Chat voor dit pad opnenen", diff --git a/src/locales/pl.json b/src/locales/pl.json index 387757994..e52f7c32a 100644 --- a/src/locales/pl.json +++ b/src/locales/pl.json @@ -1,8 +1,9 @@ { "@metadata": { "authors": { - "1": "WTM", - "2": "Woytecr" + "0": "Rezonansowy", + "2": "WTM", + "3": "Woytecr" } }, "index.newPad": "Nowy Dokument", @@ -54,6 +55,7 @@ "pad.modals.connected": "Po\u0142\u0105czony.", "pad.modals.reconnecting": "Ponowne \u0142\u0105czenie z dokumentem...", "pad.modals.forcereconnect": "Wymu\u015b ponowne po\u0142\u0105czenie", + "pad.modals.userdup": "Otwarty w innym oknie", "pad.modals.userdup.explanation": "Ten dokument prawdopodobnie zosta\u0142 otwarty w wi\u0119cej ni\u017c jednym oknie przegl\u0105darki.", "pad.modals.userdup.advice": "Po\u0142\u0105cz ponownie przy u\u017cyciu tego okna.", "pad.modals.unauth": "Brak autoryzacji", @@ -82,6 +84,7 @@ "timeslider.toolbar.returnbutton": "Powr\u00f3\u0107 do dokumentu", "timeslider.toolbar.authors": "Autorzy:", "timeslider.toolbar.authorsList": "Brak autor\u00f3w", + "timeslider.toolbar.exportlink.title": "Eksportuj", "timeslider.exportCurrent": "Eksportuj bie\u017c\u0105c\u0105 wersj\u0119 jako:", "timeslider.version": "Wersja {{version}}", "timeslider.saved": "Zapisano {{day}} {{month}} {{year}}", diff --git a/src/locales/uk.json b/src/locales/uk.json index dc2b201ab..a8a58eb98 100644 --- a/src/locales/uk.json +++ b/src/locales/uk.json @@ -54,6 +54,7 @@ "pad.modals.connected": "\u0417'\u0454\u0434\u043d\u0430\u043d\u043e.", "pad.modals.reconnecting": "\u041f\u0435\u0440\u0435\u043f\u0456\u0434\u043b\u044e\u0447\u0435\u043d\u043d\u044f \u0434\u043e \u0412\u0430\u0448\u043e\u0433\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0443..", "pad.modals.forcereconnect": "\u041f\u0440\u0438\u043c\u0443\u0441\u043e\u0432\u0435 \u043f\u0435\u0440\u0435\u043f\u0456\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u044f", + "pad.modals.userdup": "\u0412\u0456\u0434\u043a\u0440\u0438\u0442\u043e \u0443 \u0456\u043d\u0448\u043e\u043c\u0443 \u0432\u0456\u043a\u043d\u0456", "pad.modals.userdup.explanation": "\u0414\u043e\u043a\u0443\u043c\u0435\u043d\u0442, \u043c\u043e\u0436\u043b\u0438\u0432\u043e, \u0432\u0456\u0434\u043a\u0440\u0438\u0442\u043e \u0431\u0456\u043b\u044c\u0448 \u043d\u0456\u0436 \u0432 \u043e\u0434\u043d\u043e\u043c\u0443 \u0432\u0456\u043a\u043d\u0456 \u0431\u0440\u0430\u0443\u0437\u0435\u0440\u0430 \u043d\u0430 \u0446\u044c\u043e\u043c\u0443 \u043a\u043e\u043c\u043f'\u044e\u0442\u0435\u0440\u0456.", "pad.modals.userdup.advice": "\u041f\u0435\u0440\u0435\u043f\u0456\u0434\u043a\u043b\u044e\u0447\u0438\u0442\u0438\u0441\u044c \u0432\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u043e\u0432\u0443\u044e\u0447\u0438 \u0446\u0435 \u0432\u0456\u043a\u043d\u043e.", "pad.modals.unauth": "\u041d\u0435 \u0430\u0432\u0442\u043e\u0440\u0438\u0437\u043e\u0432\u0430\u043d\u043e", @@ -82,6 +83,7 @@ "timeslider.toolbar.returnbutton": "\u041f\u043e\u0432\u0435\u0440\u043d\u0443\u0442\u0438\u0441\u044c \u0434\u043e \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0443", "timeslider.toolbar.authors": "\u0410\u0432\u0442\u043e\u0440\u0438:", "timeslider.toolbar.authorsList": "\u041d\u0435\u043c\u0430\u0454 \u0430\u0432\u0442\u043e\u0440\u0456\u0432", + "timeslider.toolbar.exportlink.title": "\u0415\u043a\u0441\u043f\u043e\u0440\u0442", "timeslider.exportCurrent": "\u0415\u043a\u0441\u043f\u043e\u0440\u0442\u0443\u0432\u0430\u0442\u0438 \u043f\u043e\u0442\u043e\u0447\u043d\u0443 \u0432\u0435\u0440\u0441\u0456\u044e \u044f\u043a:", "timeslider.version": "\u0412\u0435\u0440\u0441\u0456\u044f {{version}}", "timeslider.saved": "\u0417\u0431\u0435\u0440\u0435\u0436\u0435\u043d\u043e {{month}} {{day}}, {{year}}", diff --git a/src/locales/zh-hans.json b/src/locales/zh-hans.json index 349aed90a..4e394e911 100644 --- a/src/locales/zh-hans.json +++ b/src/locales/zh-hans.json @@ -1,4 +1,11 @@ { + "@metadata": { + "authors": [ + "Dimension", + "Hydra", + "\u71c3\u7389" + ] + }, "index.newPad": "\u65b0\u8bb0\u4e8b\u672c", "pad.toolbar.bold.title": "\u7c97\u4f53\uff08Ctrl-B\uff09", "pad.toolbar.italic.title": "\u659c\u4f53 (Ctrl-I)", @@ -73,12 +80,5 @@ "pad.impexp.importbutton": "\u73b0\u5728\u5bfc\u5165", "pad.impexp.importing": "\u6b63\u5728\u5bfc\u5165...", "pad.impexp.uploadFailed": "\u4e0a\u8f7d\u5931\u8d25\uff0c\u8bf7\u91cd\u8bd5", - "pad.impexp.importfailed": "\u5bfc\u5165\u5931\u8d25", - "@metadata": { - "authors": [ - "Dimension", - "Hydra", - "\u71c3\u7389" - ] - } + "pad.impexp.importfailed": "\u5bfc\u5165\u5931\u8d25" } \ No newline at end of file From 8e366da82ed6a8c549b2e71dafe4a2ffab2fea4c Mon Sep 17 00:00:00 2001 From: John McLear Date: Mon, 7 Jan 2013 11:27:40 +0000 Subject: [PATCH 12/37] use .val() instead of [0] --- src/static/js/admin/plugins.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/static/js/admin/plugins.js b/src/static/js/admin/plugins.js index 0e492025e..ddff767bf 100644 --- a/src/static/js/admin/plugins.js +++ b/src/static/js/admin/plugins.js @@ -31,7 +31,7 @@ $(document).ready(function () { $("form").submit(function(){ var query = $('.search-results').data('query'); - query.pattern = $("#search-query")[0].value; + query.pattern = $("#search-query").val(); query.offset = 0; search(); return false; @@ -39,7 +39,7 @@ $(document).ready(function () { $("#do-search").unbind('click').click(function () { var query = $('.search-results').data('query'); - query.pattern = $("#search-query")[0].value; + query.pattern = $("#search-query").val(); query.offset = 0; search(); }); From 7a2f16f2880121132a172cf2ca32e2faa01fe0aa Mon Sep 17 00:00:00 2001 From: John McLear Date: Mon, 7 Jan 2013 11:49:04 +0000 Subject: [PATCH 13/37] dont run timeslider test for now --- tests/frontend/specs/timeslider_revisions.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/frontend/specs/timeslider_revisions.js b/tests/frontend/specs/timeslider_revisions.js index cf5790749..af59051ab 100644 --- a/tests/frontend/specs/timeslider_revisions.js +++ b/tests/frontend/specs/timeslider_revisions.js @@ -5,7 +5,7 @@ describe("timeslider", function(){ this.timeout(6000); }); - it("loads adds a hundred revisions", function(done) { + xit("loads adds a hundred revisions", function(done) { var inner$ = helper.padInner$; var chrome$ = helper.padChrome$; From a65c7e1b6a8e6e1890732fe64ea0309de281c395 Mon Sep 17 00:00:00 2001 From: mluto Date: Mon, 7 Jan 2013 16:25:43 +0100 Subject: [PATCH 14/37] fixed 'client implementations'-link in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 754e67f74..90831a0fa 100644 --- a/README.md +++ b/README.md @@ -28,7 +28,7 @@ documented codebase makes it easier for developers to improve the code and contr Etherpad Lite 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. There is also a [jQuery plugin](https://github.com/johnyma22/etherpad-lite-jquery-plugin) that helps you to embed Pads into your website. +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. There is also a [jQuery plugin](https://github.com/johnyma22/etherpad-lite-jquery-plugin) that helps you to embed Pads into your website. There's also a full-featured plugin framework, allowing you to easily add your own features. Finally, Etherpad Lite comes with translations into tons of different languages! From 5f81daed0ae9b8e147d00724516b5002dc77f289 Mon Sep 17 00:00:00 2001 From: mluto Date: Mon, 7 Jan 2013 17:36:03 +0100 Subject: [PATCH 15/37] Added link to load more chat-messages using new GET_CHAT_MESSAGES --- src/locales/de.json | 1 + src/locales/en.json | 2 +- src/static/css/pad.css | 5 +++++ src/static/js/chat.js | 16 +++++++++++++++- src/static/js/collab_client.js | 5 ++++- src/static/js/pad.js | 13 ++++++++++--- src/templates/pad.html | 2 +- 7 files changed, 37 insertions(+), 7 deletions(-) diff --git a/src/locales/de.json b/src/locales/de.json index 5ede40f08..1bdbdaf3d 100644 --- a/src/locales/de.json +++ b/src/locales/de.json @@ -81,6 +81,7 @@ "pad.share.emebdcode": "In Webseite einbetten", "pad.chat": "Chat", "pad.chat.title": "Den Chat dieses Pads \u00f6ffnen", + "pad.chat.loadmessages": "Weitere Nachrichten laden", "timeslider.pageTitle": "{{appTitle}} Pad-Versionsgeschichte", "timeslider.toolbar.returnbutton": "Zur\u00fcck zum Pad", "timeslider.toolbar.authors": "Autoren:", diff --git a/src/locales/en.json b/src/locales/en.json index c3ab8c583..37e07a154 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -1 +1 @@ -{"index.newPad":"New Pad","index.createOpenPad":"or create/open a Pad with the name:","pad.toolbar.bold.title":"Bold (Ctrl-B)","pad.toolbar.italic.title":"Italic (Ctrl-I)","pad.toolbar.underline.title":"Underline (Ctrl-U)","pad.toolbar.strikethrough.title":"Strikethrough","pad.toolbar.ol.title":"Ordered list","pad.toolbar.ul.title":"Unordered List","pad.toolbar.indent.title":"Indent","pad.toolbar.unindent.title":"Outdent","pad.toolbar.undo.title":"Undo (Ctrl-Z)","pad.toolbar.redo.title":"Redo (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Clear Authorship Colors","pad.toolbar.import_export.title":"Import/Export from/to different file formats","pad.toolbar.timeslider.title":"Timeslider","pad.toolbar.savedRevision.title":"Saved Revisions","pad.toolbar.settings.title":"Settings","pad.toolbar.embed.title":"Embed this pad","pad.toolbar.showusers.title":"Show the users on this pad","pad.colorpicker.save":"Save","pad.colorpicker.cancel":"Cancel","pad.loading":"Loading...","pad.passwordRequired":"You need a password to access this pad","pad.permissionDenied":"You do not have permission to access this pad","pad.wrongPassword":"Your password was wrong","pad.settings.padSettings":"Pad Settings","pad.settings.myView":"My View","pad.settings.stickychat":"Chat always on screen","pad.settings.colorcheck":"Authorship colors","pad.settings.linenocheck":"Line numbers","pad.settings.fontType":"Font type:","pad.settings.fontType.normal":"Normal","pad.settings.fontType.monospaced":"Monospace","pad.settings.globalView":"Global View","pad.settings.language":"Language:","pad.importExport.import_export":"Import/Export","pad.importExport.import":"Upload any text file or document","pad.importExport.importSuccessful":"Successful!","pad.importExport.export":"Export current pad as:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Plain text","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (Open Document Format)","pad.importExport.exportdokuwiki":"DokuWiki","pad.importExport.abiword.innerHTML":"You only can import from plain text or html formats. For more advanced import features please install abiword.","pad.modals.connected":"Connected.","pad.modals.reconnecting":"Reconnecting to your pad..","pad.modals.forcereconnect":"Force reconnect","pad.modals.userdup":"Opened in another window","pad.modals.userdup.explanation":"This pad seems to be opened in more than one browser window on this computer.","pad.modals.userdup.advice":"Reconnect to use this window instead.","pad.modals.unauth":"Not authorized","pad.modals.unauth.explanation":"Your permissions have changed while viewing this page. Try to reconnect.","pad.modals.looping":"Disconnected.","pad.modals.looping.explanation":"There are communication problems with the synchronization server.","pad.modals.looping.cause":"Perhaps you connected through an incompatible firewall or proxy.","pad.modals.initsocketfail":"Server is unreachable.","pad.modals.initsocketfail.explanation":"Couldn't connect to the synchronization server.","pad.modals.initsocketfail.cause":"This is probably due to a problem with your browser or your internet connection.","pad.modals.slowcommit":"Disconnected.","pad.modals.slowcommit.explanation":"The server is not responding.","pad.modals.slowcommit.cause":"This could be due to problems with network connectivity.","pad.modals.deleted":"Deleted.","pad.modals.deleted.explanation":"This pad has been removed.","pad.modals.disconnected":"You have been disconnected.","pad.modals.disconnected.explanation":"The connection to the server was lost","pad.modals.disconnected.cause":"The server may be unavailable. Please notify us if this continues to happen.","pad.share":"Share this pad","pad.share.readonly":"Read only","pad.share.link":"Link","pad.share.emebdcode":"Embed URL","pad.chat":"Chat","pad.chat.title":"Open the chat for this pad.","timeslider.pageTitle":"{{appTitle}} Timeslider","timeslider.toolbar.returnbutton":"Return to pad","timeslider.toolbar.authors":"Authors:","timeslider.toolbar.authorsList":"No Authors","timeslider.toolbar.exportlink.title":"Export","timeslider.exportCurrent":"Export current version as:","timeslider.version":"Version {{version}}","timeslider.saved":"Saved {{month}} {{day}}, {{year}}","timeslider.dateformat":"{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"January","timeslider.month.february":"February","timeslider.month.march":"March","timeslider.month.april":"April","timeslider.month.may":"May","timeslider.month.june":"June","timeslider.month.july":"July","timeslider.month.august":"August","timeslider.month.september":"September","timeslider.month.october":"October","timeslider.month.november":"November","timeslider.month.december":"December","pad.savedrevs.marked":"This revision is now marked as a saved revision","pad.userlist.entername":"Enter your name","pad.userlist.unnamed":"unnamed","pad.userlist.guest":"Guest","pad.userlist.deny":"Deny","pad.userlist.approve":"Approve","pad.editbar.clearcolors":"Clear authorship colors on entire document?","pad.impexp.importbutton":"Import Now","pad.impexp.importing":"Importing...","pad.impexp.confirmimport":"Importing a file will overwrite the current text of the pad. Are you sure you want to proceed?","pad.impexp.convertFailed":"We were not able to import this file. Please use a different document format or copy paste manually","pad.impexp.uploadFailed":"The upload failed, please try again","pad.impexp.importfailed":"Import failed","pad.impexp.copypaste":"Please copy paste","pad.impexp.exportdisabled":"Exporting as {{type}} format is disabled. Please contact your system administrator for details."} \ No newline at end of file +{"index.newPad":"New Pad","index.createOpenPad":"or create/open a Pad with the name:","pad.toolbar.bold.title":"Bold (Ctrl-B)","pad.toolbar.italic.title":"Italic (Ctrl-I)","pad.toolbar.underline.title":"Underline (Ctrl-U)","pad.toolbar.strikethrough.title":"Strikethrough","pad.toolbar.ol.title":"Ordered list","pad.toolbar.ul.title":"Unordered List","pad.toolbar.indent.title":"Indent","pad.toolbar.unindent.title":"Outdent","pad.toolbar.undo.title":"Undo (Ctrl-Z)","pad.toolbar.redo.title":"Redo (Ctrl-Y)","pad.toolbar.clearAuthorship.title":"Clear Authorship Colors","pad.toolbar.import_export.title":"Import/Export from/to different file formats","pad.toolbar.timeslider.title":"Timeslider","pad.toolbar.savedRevision.title":"Saved Revisions","pad.toolbar.settings.title":"Settings","pad.toolbar.embed.title":"Embed this pad","pad.toolbar.showusers.title":"Show the users on this pad","pad.colorpicker.save":"Save","pad.colorpicker.cancel":"Cancel","pad.loading":"Loading...","pad.passwordRequired":"You need a password to access this pad","pad.permissionDenied":"You do not have permission to access this pad","pad.wrongPassword":"Your password was wrong","pad.settings.padSettings":"Pad Settings","pad.settings.myView":"My View","pad.settings.stickychat":"Chat always on screen","pad.settings.colorcheck":"Authorship colors","pad.settings.linenocheck":"Line numbers","pad.settings.fontType":"Font type:","pad.settings.fontType.normal":"Normal","pad.settings.fontType.monospaced":"Monospace","pad.settings.globalView":"Global View","pad.settings.language":"Language:","pad.importExport.import_export":"Import/Export","pad.importExport.import":"Upload any text file or document","pad.importExport.importSuccessful":"Successful!","pad.importExport.export":"Export current pad as:","pad.importExport.exporthtml":"HTML","pad.importExport.exportplain":"Plain text","pad.importExport.exportword":"Microsoft Word","pad.importExport.exportpdf":"PDF","pad.importExport.exportopen":"ODF (Open Document Format)","pad.importExport.exportdokuwiki":"DokuWiki","pad.importExport.abiword.innerHTML":"You only can import from plain text or html formats. For more advanced import features please install abiword.","pad.modals.connected":"Connected.","pad.modals.reconnecting":"Reconnecting to your pad..","pad.modals.forcereconnect":"Force reconnect","pad.modals.userdup":"Opened in another window","pad.modals.userdup.explanation":"This pad seems to be opened in more than one browser window on this computer.","pad.modals.userdup.advice":"Reconnect to use this window instead.","pad.modals.unauth":"Not authorized","pad.modals.unauth.explanation":"Your permissions have changed while viewing this page. Try to reconnect.","pad.modals.looping":"Disconnected.","pad.modals.looping.explanation":"There are communication problems with the synchronization server.","pad.modals.looping.cause":"Perhaps you connected through an incompatible firewall or proxy.","pad.modals.initsocketfail":"Server is unreachable.","pad.modals.initsocketfail.explanation":"Couldn't connect to the synchronization server.","pad.modals.initsocketfail.cause":"This is probably due to a problem with your browser or your internet connection.","pad.modals.slowcommit":"Disconnected.","pad.modals.slowcommit.explanation":"The server is not responding.","pad.modals.slowcommit.cause":"This could be due to problems with network connectivity.","pad.modals.deleted":"Deleted.","pad.modals.deleted.explanation":"This pad has been removed.","pad.modals.disconnected":"You have been disconnected.","pad.modals.disconnected.explanation":"The connection to the server was lost","pad.modals.disconnected.cause":"The server may be unavailable. Please notify us if this continues to happen.","pad.share":"Share this pad","pad.share.readonly":"Read only","pad.share.link":"Link","pad.share.emebdcode":"Embed URL","pad.chat":"Chat","pad.chat.title":"Open the chat for this pad.","pad.chat.loadmessages": "Load more messages","timeslider.pageTitle":"{{appTitle}} Timeslider","timeslider.toolbar.returnbutton":"Return to pad","timeslider.toolbar.authors":"Authors:","timeslider.toolbar.authorsList":"No Authors","timeslider.toolbar.exportlink.title":"Export","timeslider.exportCurrent":"Export current version as:","timeslider.version":"Version {{version}}","timeslider.saved":"Saved {{month}} {{day}}, {{year}}","timeslider.dateformat":"{{month}}/{{day}}/{{year}} {{hours}}:{{minutes}}:{{seconds}}","timeslider.month.january":"January","timeslider.month.february":"February","timeslider.month.march":"March","timeslider.month.april":"April","timeslider.month.may":"May","timeslider.month.june":"June","timeslider.month.july":"July","timeslider.month.august":"August","timeslider.month.september":"September","timeslider.month.october":"October","timeslider.month.november":"November","timeslider.month.december":"December","pad.savedrevs.marked":"This revision is now marked as a saved revision","pad.userlist.entername":"Enter your name","pad.userlist.unnamed":"unnamed","pad.userlist.guest":"Guest","pad.userlist.deny":"Deny","pad.userlist.approve":"Approve","pad.editbar.clearcolors":"Clear authorship colors on entire document?","pad.impexp.importbutton":"Import Now","pad.impexp.importing":"Importing...","pad.impexp.confirmimport":"Importing a file will overwrite the current text of the pad. Are you sure you want to proceed?","pad.impexp.convertFailed":"We were not able to import this file. Please use a different document format or copy paste manually","pad.impexp.uploadFailed":"The upload failed, please try again","pad.impexp.importfailed":"Import failed","pad.impexp.copypaste":"Please copy paste","pad.impexp.exportdisabled":"Exporting as {{type}} format is disabled. Please contact your system administrator for details."} \ No newline at end of file diff --git a/src/static/css/pad.css b/src/static/css/pad.css index bb8da99b6..a36a7ff9c 100644 --- a/src/static/css/pad.css +++ b/src/static/css/pad.css @@ -488,6 +488,11 @@ table#otheruserstable { -ms-overflow-x: hidden; overflow-x: hidden; } +#chatloadmessages +{ + color: blue; + text-decoration: underline; +} #chatinputbox { padding: 3px 2px; position: absolute; diff --git a/src/static/js/chat.js b/src/static/js/chat.js index 19c4cba80..2136c56c1 100644 --- a/src/static/js/chat.js +++ b/src/static/js/chat.js @@ -29,6 +29,7 @@ var chat = (function() { var isStuck = false; var gotInitialMessages = false; + var historyPointer = 0; var chatMentions = 0; var self = { show: function () @@ -114,7 +115,7 @@ var chat = (function() var html = "

" + authorName + ":" + timeStr + " " + text + "

"; if(isHistoryAdd) - $("#chattext").prepend(html); + $(html).insertAfter('#chatloadmessages'); else $("#chattext").append(html); @@ -164,6 +165,19 @@ var chat = (function() // initial messages are loaded in pad.js' _afterHandshake $("#chatcounter").text(0); + $("#chatloadmessages").click(function() + { + var start = Math.max(self.historyPointer - 100, 0); + var end = self.historyPointer; + + if(start == end) // nothing to load + return; + if(start == 0) // reached the top + $("#chatloadmessages").css("display", "none"); + + pad.collabClient.sendMessage({"type": "GET_CHAT_MESSAGES", "start": start, "end": end}); + self.historyPointer = start; + }); } } diff --git a/src/static/js/collab_client.js b/src/static/js/collab_client.js index 29c404828..902301d50 100644 --- a/src/static/js/collab_client.js +++ b/src/static/js/collab_client.js @@ -411,7 +411,10 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad) if(!chat.gotInitalMessages) { chat.scrollDown(); - chat.gotInitalMessages = true; + chat.gotInitalMessages = true; + chat.historyPointer = clientVars.chatHead - msg.messages.length; + if(chat.historyPointer == -1) // there are less than 100 messages + $("#chatloadmessages").css("display", "none"); } } else if (msg.type == "SERVER_MESSAGE") diff --git a/src/static/js/pad.js b/src/static/js/pad.js index 56a1dad7c..57aa2834e 100644 --- a/src/static/js/pad.js +++ b/src/static/js/pad.js @@ -556,9 +556,16 @@ var pad = { pad.collabClient.setOnInternalAction(pad.handleCollabAction); // load initial chat-messages - var chatHead = clientVars.chatHead; - var start = Math.max(chatHead - 100, 0); - pad.collabClient.sendMessage({"type": "GET_CHAT_MESSAGES", "start": start, "end": chatHead}); + if(clientVars.chatHead != -1) + { + var chatHead = clientVars.chatHead; + var start = Math.max(chatHead - 100, 0); + pad.collabClient.sendMessage({"type": "GET_CHAT_MESSAGES", "start": start, "end": chatHead}); + } + else // there are no messages + { + $("#chatloadmessages").css("display", "none"); + } function postAceInit() { diff --git a/src/templates/pad.html b/src/templates/pad.html index a9313a1be..780ceaaa0 100644 --- a/src/templates/pad.html +++ b/src/templates/pad.html @@ -368,7 +368,7 @@
-
+
From 825b258d995f3c1512af20124d9c72768014ef09 Mon Sep 17 00:00:00 2001 From: mluto Date: Mon, 7 Jan 2013 17:43:03 +0100 Subject: [PATCH 16/37] only load 20 messages when pressing the load-link, fixed whitespace --- src/static/js/chat.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/static/js/chat.js b/src/static/js/chat.js index 2136c56c1..edd6c500a 100644 --- a/src/static/js/chat.js +++ b/src/static/js/chat.js @@ -167,9 +167,9 @@ var chat = (function() $("#chatcounter").text(0); $("#chatloadmessages").click(function() { - var start = Math.max(self.historyPointer - 100, 0); - var end = self.historyPointer; - + var start = Math.max(self.historyPointer - 20, 0); + var end = self.historyPointer; + if(start == end) // nothing to load return; if(start == 0) // reached the top From bc05f9eb0adf5d9f674159106644f64d363e62e1 Mon Sep 17 00:00:00 2001 From: mluto Date: Mon, 7 Jan 2013 19:15:55 +0100 Subject: [PATCH 17/37] converted load-more-link to button, added loading-gif, fixed typo --- src/node/handler/PadMessageHandler.js | 2 +- src/static/css/pad.css | 17 ++++++++++++++--- src/static/js/chat.js | 9 +++++---- src/static/js/collab_client.js | 11 +++++++++-- src/static/js/pad.js | 2 +- src/templates/pad.html | 5 ++++- 6 files changed, 34 insertions(+), 12 deletions(-) diff --git a/src/node/handler/PadMessageHandler.js b/src/node/handler/PadMessageHandler.js index 00eb234e4..a013f2203 100644 --- a/src/node/handler/PadMessageHandler.js +++ b/src/node/handler/PadMessageHandler.js @@ -365,7 +365,7 @@ function handleChatMessage(client, message) } /** - * Handles the clients requets for more chat-messages + * Handles the clients request for more chat-messages * @param client the client that send this message * @param message the message from the client */ diff --git a/src/static/css/pad.css b/src/static/css/pad.css index a36a7ff9c..bbbadbc18 100644 --- a/src/static/css/pad.css +++ b/src/static/css/pad.css @@ -488,10 +488,21 @@ table#otheruserstable { -ms-overflow-x: hidden; overflow-x: hidden; } -#chatloadmessages +.chatloadmessages { - color: blue; - text-decoration: underline; + margin-bottom: 5px; + margin-top: 5px; + margin-left: auto; + margin-right: auto; + display: block; +} +#chatloadmessagesbutton +{ + line-height: 1.8em; +} +#chatloadmessagesball +{ + display: none; } #chatinputbox { padding: 3px 2px; diff --git a/src/static/js/chat.js b/src/static/js/chat.js index edd6c500a..01adc34e8 100644 --- a/src/static/js/chat.js +++ b/src/static/js/chat.js @@ -115,7 +115,7 @@ var chat = (function() var html = "

" + authorName + ":" + timeStr + " " + text + "

"; if(isHistoryAdd) - $(html).insertAfter('#chatloadmessages'); + $(html).insertAfter('#chatloadmessagesbutton'); else $("#chattext").append(html); @@ -165,15 +165,16 @@ var chat = (function() // initial messages are loaded in pad.js' _afterHandshake $("#chatcounter").text(0); - $("#chatloadmessages").click(function() + $("#chatloadmessagesbutton").click(function() { var start = Math.max(self.historyPointer - 20, 0); var end = self.historyPointer; if(start == end) // nothing to load return; - if(start == 0) // reached the top - $("#chatloadmessages").css("display", "none"); + + $("#chatloadmessagesbutton").css("display", "none"); + $("#chatloadmessagesball").css("display", "block"); pad.collabClient.sendMessage({"type": "GET_CHAT_MESSAGES", "start": start, "end": end}); self.historyPointer = start; diff --git a/src/static/js/collab_client.js b/src/static/js/collab_client.js index 902301d50..7df0b7114 100644 --- a/src/static/js/collab_client.js +++ b/src/static/js/collab_client.js @@ -413,9 +413,16 @@ function getCollabClient(ace2editor, serverVars, initialUserInfo, options, _pad) chat.scrollDown(); chat.gotInitalMessages = true; chat.historyPointer = clientVars.chatHead - msg.messages.length; - if(chat.historyPointer == -1) // there are less than 100 messages - $("#chatloadmessages").css("display", "none"); } + + // messages are loaded, so hide the loading-ball + $("#chatloadmessagesball").css("display", "none"); + + // there are less than 100 messages or we reached the top + if(chat.historyPointer <= 0) + $("#chatloadmessagesbutton").css("display", "none"); + else // there are still more messages, re-show the load-button + $("#chatloadmessagesbutton").css("display", "block"); } else if (msg.type == "SERVER_MESSAGE") { diff --git a/src/static/js/pad.js b/src/static/js/pad.js index 57aa2834e..64d8b42b8 100644 --- a/src/static/js/pad.js +++ b/src/static/js/pad.js @@ -564,7 +564,7 @@ var pad = { } else // there are no messages { - $("#chatloadmessages").css("display", "none"); + $("#chatloadmessagesbutton").css("display", "none"); } function postAceInit() diff --git a/src/templates/pad.html b/src/templates/pad.html index 780ceaaa0..cbfdc5276 100644 --- a/src/templates/pad.html +++ b/src/templates/pad.html @@ -368,7 +368,10 @@
-
+
+ loading.. + +
From f00dddd09cbeace6d63e3b454491468158f2c30d Mon Sep 17 00:00:00 2001 From: Oscar Perez Date: Mon, 7 Jan 2013 13:24:40 -0500 Subject: [PATCH 18/37] Moved console existence check before the variable is used. This was causing a crash in Internet Explorer when the console was not enabled (console is off by default). --- src/static/js/html10n.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/static/js/html10n.js b/src/static/js/html10n.js index bb4acf819..c45f4b31b 100644 --- a/src/static/js/html10n.js +++ b/src/static/js/html10n.js @@ -23,10 +23,10 @@ window.html10n = (function(window, document, undefined) { var console = window.console function interceptConsole(method){ - var original = console[method] - if (!console) return function() {} + var original = console[method] + // do sneaky stuff if (original.bind){ // Do this for normal browsers From fadfa6772e470e285a8b69b4ede0c72760398257 Mon Sep 17 00:00:00 2001 From: John McLear Date: Mon, 7 Jan 2013 19:31:29 +0000 Subject: [PATCH 19/37] changelog and package file --- CHANGELOG.md | 8 ++++++++ src/package.json | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8e9404f10..80a6148fb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# 1.2.4 + * Fix IE console issue created in 1.2.3 + * Allow CI Tests to pass by ignoring timeslider test + * Fix broken placeholders in locales + * Fix extractPadData script + * Fix documentation for checkToken + * Fix hitting enter on form in admin/plugins + # 1.2.3 * Fix #1307: Chrome needs console.log to be called on console obj * Fix #1309: We had broken support for node v0.6 in the last release diff --git a/src/package.json b/src/package.json index 67acd1260..826db97b2 100644 --- a/src/package.json +++ b/src/package.json @@ -46,5 +46,5 @@ "engines" : { "node" : ">=0.6.0", "npm" : ">=1.0" }, - "version" : "1.2.3" + "version" : "1.2.4" } From 198754222df8345b17f9d4b61417d6e8be865817 Mon Sep 17 00:00:00 2001 From: Swen Date: Tue, 8 Jan 2013 20:14:01 +0100 Subject: [PATCH 20/37] Added functionality to list pads on this server. --- src/node/db/API.js | 6 ++++ src/node/db/Pad.js | 3 +- src/node/db/PadManager.js | 55 +++++++++++++++++++++++++++++++++- src/node/handler/APIHandler.js | 36 ++++++++++++++++++++++ 4 files changed, 97 insertions(+), 3 deletions(-) diff --git a/src/node/db/API.js b/src/node/db/API.js index ea58d8599..9bcb4eb5b 100644 --- a/src/node/db/API.js +++ b/src/node/db/API.js @@ -42,6 +42,12 @@ exports.deleteGroup = groupManager.deleteGroup; exports.listPads = groupManager.listPads; exports.createGroupPad = groupManager.createGroupPad; +/**********************/ +/**PADLIST FUNCTION****/ +/**********************/ + +exports.listAllPads = padManager.getPads; + /**********************/ /**AUTHOR FUNCTIONS****/ /**********************/ diff --git a/src/node/db/Pad.js b/src/node/db/Pad.js index dba791fd2..a420c8f9d 100644 --- a/src/node/db/Pad.js +++ b/src/node/db/Pad.js @@ -473,8 +473,7 @@ Pad.prototype.remove = function remove(callback) { //delete the pad entry and delete pad from padManager function(callback) { - db.remove("pad:"+padID); - padManager.unloadPad(padID); + padManager.removePad(padID); hooks.callAll("padRemove", {'padID':padID}); callback(); } diff --git a/src/node/db/PadManager.js b/src/node/db/PadManager.js index 5f08b1b1b..79a41ddc2 100644 --- a/src/node/db/PadManager.js +++ b/src/node/db/PadManager.js @@ -34,10 +34,52 @@ var db = require("./DB").db; */ var globalPads = { get: function (name) { return this[':'+name]; }, - set: function (name, value) { this[':'+name] = value; }, + set: function (name, value) + { + this[':'+name] = value; + padList.addPad(name); + }, remove: function (name) { delete this[':'+name]; } }; +var padList = { + list: [], + init: function() + { + db.get("pads", function(err, dbData) + { + if(ERR(err)) return; + if(dbData != null){ + dbData.forEach(function(val){ + padList.addPad(val,false); + }); + } + }); + return this; + }, + getPads: function(){ + return this.list; + }, + addPad: function(name,immediateSave) + { + if(this.list.indexOf(name) == -1){ + this.list.push(name); + if(immediateSave == undefined || immediateSave == true){ + db.set("pads", this.list); + } + } + }, + removePad: function(name) + { + var index=this.list.indexOf(name); + if(index>-1){ + this.list.splice(index,1); + db.set("pads", this.list); + } + } +}; +padList.init(); + /** * An array of padId transformations. These represent changes in pad name policy over * time, and allow us to "play back" these changes so legacy padIds can be found. @@ -109,6 +151,11 @@ exports.getPad = function(id, text, callback) } } +exports.getPads = function(callback) +{ + callback(null,padList.getPads()); +} + //checks if a pad exists exports.doesPadExists = function(padId, callback) { @@ -163,6 +210,12 @@ exports.isValidPadId = function(padId) return /^(g.[a-zA-Z0-9]{16}\$)?[^$]{1,50}$/.test(padId); } +exports.removePad = function(padId){ + db.remove("pad:"+padId); + exports.unloadPad(padId); + padList.removePad(padId); +} + //removes a pad from the array exports.unloadPad = function(padId) { diff --git a/src/node/handler/APIHandler.js b/src/node/handler/APIHandler.js index 0bcd5f0c9..ae93e933f 100644 --- a/src/node/handler/APIHandler.js +++ b/src/node/handler/APIHandler.js @@ -138,6 +138,42 @@ var version = , "listAllGroups" : [] , "checkToken" : [] } +, "1.2.1": + { "createGroup" : [] + , "createGroupIfNotExistsFor" : ["groupMapper"] + , "deleteGroup" : ["groupID"] + , "listPads" : ["groupID"] + , "listAllPads" : [] + , "createPad" : ["padID", "text"] + , "createGroupPad" : ["groupID", "padName", "text"] + , "createAuthor" : ["name"] + , "createAuthorIfNotExistsFor": ["authorMapper" , "name"] + , "listPadsOfAuthor" : ["authorID"] + , "createSession" : ["groupID", "authorID", "validUntil"] + , "deleteSession" : ["sessionID"] + , "getSessionInfo" : ["sessionID"] + , "listSessionsOfGroup" : ["groupID"] + , "listSessionsOfAuthor" : ["authorID"] + , "getText" : ["padID", "rev"] + , "setText" : ["padID", "text"] + , "getHTML" : ["padID", "rev"] + , "setHTML" : ["padID", "html"] + , "getRevisionsCount" : ["padID"] + , "getLastEdited" : ["padID"] + , "deletePad" : ["padID"] + , "getReadOnlyID" : ["padID"] + , "setPublicStatus" : ["padID", "publicStatus"] + , "getPublicStatus" : ["padID"] + , "setPassword" : ["padID", "password"] + , "isPasswordProtected" : ["padID"] + , "listAuthorsOfPad" : ["padID"] + , "padUsersCount" : ["padID"] + , "getAuthorName" : ["authorID"] + , "padUsers" : ["padID"] + , "sendClientsMessage" : ["padID", "msg"] + , "listAllGroups" : [] + , "checkToken" : [] + } }; /** From 8c3263a6ea6105ad1f2c6e2c5b09a5f88c120fb1 Mon Sep 17 00:00:00 2001 From: Swen Date: Tue, 8 Jan 2013 20:19:10 +0100 Subject: [PATCH 21/37] Added comments --- src/node/db/PadManager.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/node/db/PadManager.js b/src/node/db/PadManager.js index 79a41ddc2..fc273c56c 100644 --- a/src/node/db/PadManager.js +++ b/src/node/db/PadManager.js @@ -210,6 +210,9 @@ exports.isValidPadId = function(padId) return /^(g.[a-zA-Z0-9]{16}\$)?[^$]{1,50}$/.test(padId); } +/** + * Removes the pad from database and unloads it. + */ exports.removePad = function(padId){ db.remove("pad:"+padId); exports.unloadPad(padId); From 7a49c82e16d11604d45c84844db2bad4d6251cef Mon Sep 17 00:00:00 2001 From: Swen Date: Tue, 8 Jan 2013 20:21:14 +0100 Subject: [PATCH 22/37] Added comments --- src/node/db/PadManager.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/node/db/PadManager.js b/src/node/db/PadManager.js index fc273c56c..891f65953 100644 --- a/src/node/db/PadManager.js +++ b/src/node/db/PadManager.js @@ -78,6 +78,7 @@ var padList = { } } }; +//initialises the allknowing data structure padList.init(); /** From c9f137b2e581339b46522bf6ce70ce9b0eb5612d Mon Sep 17 00:00:00 2001 From: Swen Date: Wed, 9 Jan 2013 20:45:39 +0100 Subject: [PATCH 23/37] Added functionality to use spcsser/ueberDB findKey functionality. --- src/node/db/PadManager.js | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/src/node/db/PadManager.js b/src/node/db/PadManager.js index 891f65953..32119038a 100644 --- a/src/node/db/PadManager.js +++ b/src/node/db/PadManager.js @@ -46,12 +46,12 @@ var padList = { list: [], init: function() { - db.get("pads", function(err, dbData) + db.findKeys("pad:*", "*:*:*", function(err, dbData) { if(ERR(err)) return; if(dbData != null){ dbData.forEach(function(val){ - padList.addPad(val,false); + padList.addPad(val.replace(/pad:/,""),false); }); } }); @@ -60,13 +60,10 @@ var padList = { getPads: function(){ return this.list; }, - addPad: function(name,immediateSave) + addPad: function(name) { if(this.list.indexOf(name) == -1){ this.list.push(name); - if(immediateSave == undefined || immediateSave == true){ - db.set("pads", this.list); - } } }, removePad: function(name) @@ -74,7 +71,6 @@ var padList = { var index=this.list.indexOf(name); if(index>-1){ this.list.splice(index,1); - db.set("pads", this.list); } } }; From ac448937abd4744195bcf17003315f39ee32ba3b Mon Sep 17 00:00:00 2001 From: John McLear Date: Thu, 10 Jan 2013 00:01:38 +0000 Subject: [PATCH 24/37] fix egils fix of time delta resolves #1345 --- src/static/js/broadcast.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/static/js/broadcast.js b/src/static/js/broadcast.js index 05e4c1742..6bd135bd2 100644 --- a/src/static/js/broadcast.js +++ b/src/static/js/broadcast.js @@ -244,14 +244,14 @@ function loadBroadcastJS(socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro if (broadcasting) applyChangeset(changesetForward, revision + 1, false, timeDelta); } -/* + /* At this point, we must be certain that the changeset really does map from the current revision to the specified revision. Any mistakes here will cause the whole slider to get out of sync. */ function applyChangeset(changeset, revision, preventSliderMovement, timeDelta) - { + { // disable the next 'gotorevision' call handled by a timeslider update if (!preventSliderMovement) { @@ -271,7 +271,8 @@ function loadBroadcastJS(socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro Changeset.mutateTextLines(changeset, padContents); padContents.currentRevision = revision; - padContents.currentTime += timeDelta; + padContents.currentTime += timeDelta * 1000; + debugLog('Time Delta: ', timeDelta) updateTimer(); @@ -293,8 +294,6 @@ function loadBroadcastJS(socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro return str; } - - var date = new Date(padContents.currentTime); var dateFormat = function() { @@ -319,7 +318,6 @@ function loadBroadcastJS(socket, sendSocketMsg, fireWhenAllScriptsAreLoaded, Bro $('#timer').html(dateFormat()); - var revisionDate = html10n.get("timeslider.saved", { "day": date.getDate(), "month": [ From 730266256c9702cb5858bd75f29898e0f6d915c8 Mon Sep 17 00:00:00 2001 From: John McLear Date: Thu, 10 Jan 2013 15:14:10 +0000 Subject: [PATCH 25/37] fix #1341 by adding css to stop highlighting --- src/static/css/timeslider.css | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/static/css/timeslider.css b/src/static/css/timeslider.css index d786d89ba..b3c201847 100644 --- a/src/static/css/timeslider.css +++ b/src/static/css/timeslider.css @@ -32,6 +32,12 @@ background-image: url(../../static/img/timeslider_background.png); height: 63px; margin: 0 9px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; } #timeslider #timeslider-slider { height: 61px; @@ -140,6 +146,14 @@ #padmain { top: 0px !important } +#editbar{ + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} #editbarright { float: right } From e9726890a4aa4c80bebac2c8e6c3af29522495a5 Mon Sep 17 00:00:00 2001 From: Swen Date: Fri, 11 Jan 2013 04:43:59 +0100 Subject: [PATCH 26/37] Edited getPads function to be able to work without callback --- src/node/db/PadManager.js | 6 +++++- src/package.json | 2 +- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/node/db/PadManager.js b/src/node/db/PadManager.js index 32119038a..82bc27d0e 100644 --- a/src/node/db/PadManager.js +++ b/src/node/db/PadManager.js @@ -150,7 +150,11 @@ exports.getPad = function(id, text, callback) exports.getPads = function(callback) { - callback(null,padList.getPads()); + if(callback != null){ + callback(null,padList.getPads()); + }else{ + return padList.getPads(); + } } //checks if a pad exists diff --git a/src/package.json b/src/package.json index 67acd1260..826db97b2 100644 --- a/src/package.json +++ b/src/package.json @@ -46,5 +46,5 @@ "engines" : { "node" : ">=0.6.0", "npm" : ">=1.0" }, - "version" : "1.2.3" + "version" : "1.2.4" } From 062dbff738ac0c4a302946aaaa91537f53cf6a18 Mon Sep 17 00:00:00 2001 From: spcsser Date: Fri, 11 Jan 2013 12:59:02 +0100 Subject: [PATCH 27/37] Added listAllPads api docu --- 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 61daeaa39..65309dbc4 100644 --- a/doc/api/http_api.md +++ b/doc/api/http_api.md @@ -419,3 +419,13 @@ returns ok when api token is valid *Example returns:* * `{"code":0,"message":"ok","data":null}` * `{"code":4,"message":"no or wrong API Key","data":null}` + +### Pads + +#### listAllPads() + * API >= 1.2.1 + +lists all pads on this epl instance + +*Example returns:* + * `{code: 0, message:"ok", data: ["testPad", "thePadsOfTheOthers"]}` \ No newline at end of file From 9687ecbb829721ff6272cfbc7d4a8e3eba9a4892 Mon Sep 17 00:00:00 2001 From: spcsser Date: Fri, 11 Jan 2013 18:31:53 +0100 Subject: [PATCH 28/37] Modified pad list manager to return an ordered list. --- src/node/db/PadManager.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/node/db/PadManager.js b/src/node/db/PadManager.js index 82bc27d0e..8cd69a83e 100644 --- a/src/node/db/PadManager.js +++ b/src/node/db/PadManager.js @@ -44,6 +44,7 @@ var globalPads = { var padList = { list: [], + sorted : false, init: function() { db.findKeys("pad:*", "*:*:*", function(err, dbData) @@ -57,13 +58,21 @@ var padList = { }); return this; }, + /** + * Returns all pads in alphabetical order as array. + */ getPads: function(){ + if(!this.sorted){ + this.list=this.list.sort(); + this.sorted=true; + } return this.list; }, addPad: function(name) { if(this.list.indexOf(name) == -1){ this.list.push(name); + this.sorted=false; } }, removePad: function(name) @@ -71,6 +80,7 @@ var padList = { var index=this.list.indexOf(name); if(index>-1){ this.list.splice(index,1); + this.sorted=false; } } }; From 2786807f2f2b1884f9d7a5d8eb499b9c2be0db7a Mon Sep 17 00:00:00 2001 From: 0ip Date: Sat, 12 Jan 2013 18:41:56 +0100 Subject: [PATCH 29/37] Fix broken relative paths MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Bug introduced inĀ 53521c8732 --- src/templates/index.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/templates/index.html b/src/templates/index.html index 668b7abe2..f0e1beb3f 100644 --- a/src/templates/index.html +++ b/src/templates/index.html @@ -33,9 +33,9 @@ - - - + + + + <% e.end_block(); %> @@ -74,6 +75,7 @@
+ <% e.begin_block("timesliderEditbarRight"); %> + <% e.end_block(); %>
@@ -222,7 +225,7 @@ }); })(); - <% e.end_block(); %> + From 1e7bcdba59f821033096026b31e12298beb003c4 Mon Sep 17 00:00:00 2001 From: John McLear Date: Mon, 14 Jan 2013 03:42:09 +0000 Subject: [PATCH 37/37] more sensible timeslider blocks.. --- src/templates/timeslider.html | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/templates/timeslider.html b/src/templates/timeslider.html index 0372b66c7..4a8543c56 100644 --- a/src/templates/timeslider.html +++ b/src/templates/timeslider.html @@ -48,6 +48,7 @@
+ <% e.begin_block("timesliderTop"); %>
+ <% e.end_block(); %>