From fd854b134deb51464900d96cb45aee381d1d0d18 Mon Sep 17 00:00:00 2001 From: RaceProUK Date: Mon, 21 Mar 2016 19:49:35 +0000 Subject: [PATCH 01/81] Allow for a little scrolling before dismissing bookmark alert This is just in case someone scrolls a little accidentally; the alert remains so they can still follow it if they want to --- public/src/client/topic.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/public/src/client/topic.js b/public/src/client/topic.js index c3e228f9ae..7a989f96aa 100644 --- a/public/src/client/topic.js +++ b/public/src/client/topic.js @@ -221,7 +221,9 @@ define('forum/topic', [ } else { span.html('').hide(); } - app.removeAlert('bookmark'); + if ($(window).scrollTop() > 300) { + app.removeAlert('bookmark'); + } } Topic.calculateIndex = function(index, elementCount) { From be4aa5ac948a4bdbe65c488cf88f135c89e57383 Mon Sep 17 00:00:00 2001 From: pichalite Date: Mon, 21 Mar 2016 21:13:36 +0000 Subject: [PATCH 02/81] add title length check to topic fork process --- src/topics/fork.js | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/src/topics/fork.js b/src/topics/fork.js index fa4633fdd6..948cb3207e 100644 --- a/src/topics/fork.js +++ b/src/topics/fork.js @@ -1,14 +1,14 @@ 'use strict'; -var async = require('async'), - winston = require('winston'), - - db = require('../database'), - user = require('../user'), - posts = require('../posts'), - privileges = require('../privileges'), - plugins = require('../plugins'); +var async = require('async'); +var winston = require('winston'); +var db = require('../database'); +var user = require('../user'); +var posts = require('../posts'); +var privileges = require('../privileges'); +var plugins = require('../plugins'); +var meta = require('../meta'); module.exports = function(Topics) { @@ -18,8 +18,10 @@ module.exports = function(Topics) { title = title.trim(); } - if (!title) { - return callback(new Error('[[error:invalid-title]]')); + if (title.length < parseInt(meta.config.minimumTitleLength, 10)) { + return callback(new Error('[[error:title-too-short, ' + meta.config.minimumTitleLength + ']]')); + } else if (title.length > parseInt(meta.config.maximumTitleLength, 10)) { + return callback(new Error('[[error:title-too-long, ' + meta.config.maximumTitleLength + ']]')); } if (!pids || !pids.length) { From e0155534d53a81fa74b24830ab6f6f05f2c52717 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 22 Mar 2016 09:41:49 +0200 Subject: [PATCH 03/81] up dbsearch --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 3b4fd8d652..b6542e1060 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "morgan": "^1.3.2", "nconf": "~0.8.2", "nodebb-plugin-composer-default": "3.0.11", - "nodebb-plugin-dbsearch": "1.0.0", + "nodebb-plugin-dbsearch": "1.0.1", "nodebb-plugin-emoji-extended": "1.0.3", "nodebb-plugin-markdown": "4.0.17", "nodebb-plugin-mentions": "1.0.20", From e694bd8ab595bc88509af68fea8a95aeb6887a5e Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 22 Mar 2016 09:47:29 +0200 Subject: [PATCH 04/81] closes #4431 --- src/controllers/tags.js | 3 +++ src/socket.io/topics/tags.js | 8 +++++--- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/src/controllers/tags.js b/src/controllers/tags.js index 60f4c1d028..af8f6058c0 100644 --- a/src/controllers/tags.js +++ b/src/controllers/tags.js @@ -65,6 +65,9 @@ tagsController.getTags = function(req, res, next) { if (err) { return next(err); } + tags = tags.filter(function(tag) { + return tag && tag.score > 0; + }); var data = { tags: tags, nextStart: 100, diff --git a/src/socket.io/topics/tags.js b/src/socket.io/topics/tags.js index 535fdc3027..f55ec377fb 100644 --- a/src/socket.io/topics/tags.js +++ b/src/socket.io/topics/tags.js @@ -20,14 +20,16 @@ module.exports = function(SocketTopics) { return callback(new Error('[[error:invalid-data]]')); } - var start = parseInt(data.after, 10), - stop = start + 99; + var start = parseInt(data.after, 10); + var stop = start + 99; topics.getTags(start, stop, function(err, tags) { if (err) { return callback(err); } - + tags = tags.filter(function(tag) { + return tag && tag.score > 0; + }); callback(null, {tags: tags, nextStart: stop + 1}); }); }; From e0f3ac8cb718a49a7922591e346d95434463ed17 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 22 Mar 2016 09:49:25 +0200 Subject: [PATCH 05/81] change to editedISO --- public/src/client/topic/events.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/src/client/topic/events.js b/public/src/client/topic/events.js index d65a1c7c47..6c8f58b55b 100644 --- a/public/src/client/topic/events.js +++ b/public/src/client/topic/events.js @@ -124,7 +124,7 @@ define('forum/topic/events', [ var editData = { editor: data.editor, - relativeEditTime: utils.toISOString(data.post.edited) + editedISO: utils.toISOString(data.post.edited) }; templates.parse('partials/topic/post-editor', editData, function(html) { From 6f7cc36c214132459bf639159f09297d17314e07 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 22 Mar 2016 09:52:14 +0200 Subject: [PATCH 06/81] up persona --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index b6542e1060..cc8b2727f0 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "nodebb-plugin-spam-be-gone": "0.4.5", "nodebb-rewards-essentials": "0.0.8", "nodebb-theme-lavender": "3.0.9", - "nodebb-theme-persona": "4.0.104", + "nodebb-theme-persona": "4.0.105", "nodebb-theme-vanilla": "5.0.58", "nodebb-widget-essentials": "2.0.8", "nodemailer": "2.0.0", From fd932462f6931be5a7489e81447cb8dce362859a Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 22 Mar 2016 10:27:12 +0200 Subject: [PATCH 07/81] edit profile language key --- public/language/en_GB/user.json | 1 + 1 file changed, 1 insertion(+) diff --git a/public/language/en_GB/user.json b/public/language/en_GB/user.json index d76e82b5b3..07c85aa19f 100644 --- a/public/language/en_GB/user.json +++ b/public/language/en_GB/user.json @@ -42,6 +42,7 @@ "change_username": "Change Username", "change_email": "Change Email", "edit": "Edit", + "edit-profile": "Edit Profile", "default_picture": "Default Icon", "uploaded_picture": "Uploaded Picture", "upload_new_picture": "Upload New Picture", From 6644c66f94a574b225f3d5290cbefb7bd2259a83 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 22 Mar 2016 10:34:35 +0200 Subject: [PATCH 08/81] up persona --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index cc8b2727f0..193425279b 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "nodebb-plugin-spam-be-gone": "0.4.5", "nodebb-rewards-essentials": "0.0.8", "nodebb-theme-lavender": "3.0.9", - "nodebb-theme-persona": "4.0.105", + "nodebb-theme-persona": "4.0.106", "nodebb-theme-vanilla": "5.0.58", "nodebb-widget-essentials": "2.0.8", "nodemailer": "2.0.0", From e2f78a958509a38c1381f582e6e187428a0ee3f2 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 22 Mar 2016 11:19:33 +0200 Subject: [PATCH 09/81] closes #4432 --- public/src/app.js | 5 ++++- public/src/modules/translator.js | 13 +++++++------ src/controllers/helpers.js | 6 +++++- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/public/src/app.js b/public/src/app.js index 65276bc798..2d37b53a41 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -326,7 +326,10 @@ app.cacheBuster = null; return; } require(['translator'], function(translator) { - title = config.titleLayout.replace(/{/g, '{').replace(/}/g, '}').replace('{pageTitle}', title).replace('{browserTitle}', config.browserTitle); + title = config.titleLayout.replace(/{/g, '{').replace(/}/g, '}') + .replace('{pageTitle}', function() { return title; }) + .replace('{browserTitle}', function() { return config.browserTitle; }); + translator.translate(title, function(translated) { titleObj.titles[0] = translated; app.alternatingTitle(''); diff --git a/public/src/modules/translator.js b/public/src/modules/translator.js index 5892f6dde8..b208a0af48 100644 --- a/public/src/modules/translator.js +++ b/public/src/modules/translator.js @@ -213,13 +213,14 @@ function insertLanguage(text, key, value, variables) { if (value) { - var variable; - for (var i = 1, ii = variables.length; i < ii; i++) { - variable = S(variables[i]).chompRight(']]').collapseWhitespace().decodeHTMLEntities().escapeHTML().s; - value = value.replace('%' + i, variable); - } + variables.forEach(function(variable, index) { + if (index > 0) { + variable = S(variable).chompRight(']]').collapseWhitespace().decodeHTMLEntities().escapeHTML().s; + value = value.replace('%' + index, function() { return variable; }); + } + }); - text = text.replace(key, value); + text = text.replace(key, function() { return value; }); } else { var string = key.split(':'); text = text.replace(key, string[string.length-1].replace(regexes.replace, '')); diff --git a/src/controllers/helpers.js b/src/controllers/helpers.js index 3962e2036b..058a1849b1 100644 --- a/src/controllers/helpers.js +++ b/src/controllers/helpers.js @@ -105,7 +105,11 @@ helpers.buildTitle = function(pageTitle) { var browserTitle = validator.escape(meta.config.browserTitle || meta.config.title || 'NodeBB'); pageTitle = pageTitle || ''; - var title = titleLayout.replace('{pageTitle}', pageTitle).replace('{browserTitle}', browserTitle); + var title = titleLayout.replace('{pageTitle}', function() { + return pageTitle; + }).replace('{browserTitle}', function() { + return browserTitle; + }); return title; }; From f246c5e1ee9f43f7e3a2ee8c4f550c91664a3f9f Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 22 Mar 2016 11:39:28 +0200 Subject: [PATCH 10/81] closes https://github.com/NodeBB/nodebb-theme-persona/issues/259 --- src/topics/posts.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/topics/posts.js b/src/topics/posts.js index 0c9722f801..445eab4637 100644 --- a/src/topics/posts.js +++ b/src/topics/posts.js @@ -148,6 +148,9 @@ module.exports = function(Topics) { if (post.deleted && !(topicPrivileges.isAdminOrMod || post.selfPost)) { post.content = '[[topic:post_is_deleted]]'; + if (post.user) { + post.user.signature = ''; + } } } }); From 7d96a1c130ac003f86e6e433a26ec3f27f93fec4 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 22 Mar 2016 16:36:54 +0200 Subject: [PATCH 11/81] up spam-be-gone --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 193425279b..ff63f54864 100644 --- a/package.json +++ b/package.json @@ -50,7 +50,7 @@ "nodebb-plugin-markdown": "4.0.17", "nodebb-plugin-mentions": "1.0.20", "nodebb-plugin-soundpack-default": "0.1.6", - "nodebb-plugin-spam-be-gone": "0.4.5", + "nodebb-plugin-spam-be-gone": "0.4.6", "nodebb-rewards-essentials": "0.0.8", "nodebb-theme-lavender": "3.0.9", "nodebb-theme-persona": "4.0.106", From 7e6e3b3a4034687c01af5d8027753746c09fb421 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 22 Mar 2016 16:47:30 +0200 Subject: [PATCH 12/81] closes #4383 --- public/src/admin/manage/category.js | 6 ------ src/controllers/admin/categories.js | 15 ++++++++------- 2 files changed, 8 insertions(+), 13 deletions(-) diff --git a/public/src/admin/manage/category.js b/public/src/admin/manage/category.js index 26238f1101..c6da11cd88 100644 --- a/public/src/admin/manage/category.js +++ b/public/src/admin/manage/category.js @@ -155,12 +155,6 @@ define('admin/manage/category', [ } else { $('a[href="#analytics"]').on('shown.bs.tab', Category.setupGraphs); } - - // Fix the input field for the category name, as it can contain a translation key - var nameInput = $('#cid-' + ajaxify.data.cid + '-name'); - if (ajaxify.data.category.name !== nameInput.val()) { - $('#cid-' + ajaxify.data.category.cid + '-name').val(ajaxify.data.category.name); - } }; Category.setupPrivilegeTable = function() { diff --git a/src/controllers/admin/categories.js b/src/controllers/admin/categories.js index 704dc21a2c..31bd44bd49 100644 --- a/src/controllers/admin/categories.js +++ b/src/controllers/admin/categories.js @@ -1,11 +1,12 @@ "use strict"; -var async = require('async'), - - categories = require('../../categories'), - privileges = require('../../privileges'), - analytics = require('../../analytics'), - plugins = require('../../plugins'); +var async = require('async'); + +var categories = require('../../categories'); +var privileges = require('../../privileges'); +var analytics = require('../../analytics'); +var plugins = require('../../plugins'); +var translator = require('../../../public/src/modules/translator') var categoriesController = {}; @@ -24,7 +25,7 @@ categoriesController.get = function(req, res, next) { if (err) { return next(err); } - + data.category.name = translator.escape(data.category.name); res.render('admin/manage/category', { category: data.category, privileges: data.privileges, From 7d31810df039ef3a77407d6f3d711a19ef877dc1 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Tue, 22 Mar 2016 11:09:32 -0400 Subject: [PATCH 13/81] up tjs --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ff63f54864..1f84f919dc 100644 --- a/package.json +++ b/package.json @@ -75,7 +75,7 @@ "socket.io-redis": "^1.0.0", "socketio-wildcard": "~0.3.0", "string": "^3.0.0", - "templates.js": "0.3.3", + "templates.js": "0.3.4", "toobusy-js": "^0.4.2", "uglify-js": "^2.6.0", "underscore": "^1.8.3", From 4460588e9541c8f3b873a41f8762b5f530ac7e36 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 22 Mar 2016 17:19:14 +0200 Subject: [PATCH 14/81] up persona --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 1f84f919dc..33e4d20c8a 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "nodebb-plugin-spam-be-gone": "0.4.6", "nodebb-rewards-essentials": "0.0.8", "nodebb-theme-lavender": "3.0.9", - "nodebb-theme-persona": "4.0.106", + "nodebb-theme-persona": "4.0.107", "nodebb-theme-vanilla": "5.0.58", "nodebb-widget-essentials": "2.0.8", "nodemailer": "2.0.0", From 0bf05a17bff24d29953eb00af657b0b5735b7f88 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 22 Mar 2016 18:22:42 +0200 Subject: [PATCH 15/81] closes #4378 --- public/src/utils.js | 17 +++++++++++ .../bootstrap-tagsinput.css | 22 +++++++++++--- .../bootstrap-tagsinput.min.js | 4 +-- src/topics/tags.js | 29 ++++++------------- 4 files changed, 46 insertions(+), 26 deletions(-) diff --git a/public/src/utils.js b/public/src/utils.js index 2c821c1701..68de6a3506 100644 --- a/public/src/utils.js +++ b/public/src/utils.js @@ -92,6 +92,23 @@ return str; }, + cleanUpTag: function(tag, maxLength) { + if (typeof tag !== 'string' || !tag.length ) { + return ''; + } + + tag = tag.trim().toLowerCase(); + // see https://github.com/NodeBB/NodeBB/issues/4378 + tag = tag.replace(/\u202E/gi, ''); + tag = tag.replace(/[,\/#!$%\^\*;:{}=_`<>'"~()?\|]/g, ''); + tag = tag.substr(0, maxLength || 15).trim(); + var matches = tag.match(/^[.-]*(.+?)[.-]*$/); + if (matches && matches.length > 1) { + tag = matches[1]; + } + return tag; + }, + removePunctuation: function(str) { return str.replace(/[\.,-\/#!$%\^&\*;:{}=\-_`<>'"~()?]/g, ''); }, diff --git a/public/vendor/jquery/bootstrap-tagsinput/bootstrap-tagsinput.css b/public/vendor/jquery/bootstrap-tagsinput/bootstrap-tagsinput.css index 55f7c09df0..f08e955b17 100644 --- a/public/vendor/jquery/bootstrap-tagsinput/bootstrap-tagsinput.css +++ b/public/vendor/jquery/bootstrap-tagsinput/bootstrap-tagsinput.css @@ -1,10 +1,14 @@ +/* + * bootstrap-tagsinput v0.8.0 + * + */ + .bootstrap-tagsinput { background-color: #fff; border: 1px solid #ccc; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); display: inline-block; padding: 4px 6px; - margin-bottom: 10px; color: #555; vertical-align: middle; border-radius: 4px; @@ -17,11 +21,21 @@ box-shadow: none; outline: none; background-color: transparent; - padding: 0; + padding: 0 6px; margin: 0; - width: auto !important; + width: auto; max-width: inherit; } +.bootstrap-tagsinput.form-control input::-moz-placeholder { + color: #777; + opacity: 1; +} +.bootstrap-tagsinput.form-control input:-ms-input-placeholder { + color: #777; +} +.bootstrap-tagsinput.form-control input::-webkit-input-placeholder { + color: #777; +} .bootstrap-tagsinput input:focus { border: none; box-shadow: none; @@ -43,4 +57,4 @@ } .bootstrap-tagsinput .tag [data-role="remove"]:hover:active { box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); -} +} \ No newline at end of file diff --git a/public/vendor/jquery/bootstrap-tagsinput/bootstrap-tagsinput.min.js b/public/vendor/jquery/bootstrap-tagsinput/bootstrap-tagsinput.min.js index 4cbe2ae178..49db4041a6 100644 --- a/public/vendor/jquery/bootstrap-tagsinput/bootstrap-tagsinput.min.js +++ b/public/vendor/jquery/bootstrap-tagsinput/bootstrap-tagsinput.min.js @@ -1,6 +1,6 @@ /* - * bootstrap-tagsinput v0.7.1 by Tim Schlechter + * bootstrap-tagsinput v0.8.0 * */ -!function(a){"use strict";function b(b,c){this.isInit=!0,this.itemsArray=[],this.$element=a(b),this.$element.hide(),this.isSelect="SELECT"===b.tagName,this.multiple=this.isSelect&&b.hasAttribute("multiple"),this.objectItems=c&&c.itemValue,this.placeholderText=b.hasAttribute("placeholder")?this.$element.attr("placeholder"):"",this.inputSize=Math.max(1,this.placeholderText.length),this.$container=a('
'),this.$input=a('').appendTo(this.$container),this.$element.before(this.$container),this.build(c),this.isInit=!1}function c(a,b){if("function"!=typeof a[b]){var c=a[b];a[b]=function(a){return a[c]}}}function d(a,b){if("function"!=typeof a[b]){var c=a[b];a[b]=function(){return c}}}function e(a){return a?i.text(a).html():""}function f(a){var b=0;if(document.selection){a.focus();var c=document.selection.createRange();c.moveStart("character",-a.value.length),b=c.text.length}else(a.selectionStart||"0"==a.selectionStart)&&(b=a.selectionStart);return b}function g(b,c){var d=!1;return a.each(c,function(a,c){if("number"==typeof c&&b.which===c)return d=!0,!1;if(b.which===c.which){var e=!c.hasOwnProperty("altKey")||b.altKey===c.altKey,f=!c.hasOwnProperty("shiftKey")||b.shiftKey===c.shiftKey,g=!c.hasOwnProperty("ctrlKey")||b.ctrlKey===c.ctrlKey;if(e&&f&&g)return d=!0,!1}}),d}var h={tagClass:function(a){return"label label-info"},focusClass:"focus",itemValue:function(a){return a?a.toString():a},itemText:function(a){return this.itemValue(a)},itemTitle:function(a){return null},freeInput:!0,addOnBlur:!0,maxTags:void 0,maxChars:void 0,confirmKeys:[13,44],delimiter:",",delimiterRegex:null,cancelConfirmKeysOnEmpty:!1,onTagExists:function(a,b){b.hide().fadeIn()},trimValue:!1,allowDuplicates:!1};b.prototype={constructor:b,add:function(b,c,d){var f=this;if(!(f.options.maxTags&&f.itemsArray.length>=f.options.maxTags)&&(b===!1||b)){if("string"==typeof b&&f.options.trimValue&&(b=a.trim(b)),"object"==typeof b&&!f.objectItems)throw"Can't add objects when itemValue option is not set";if(!b.toString().match(/^\s*$/)){if(f.isSelect&&!f.multiple&&f.itemsArray.length>0&&f.remove(f.itemsArray[0]),"string"==typeof b&&"INPUT"===this.$element[0].tagName){var g=f.options.delimiterRegex?f.options.delimiterRegex:f.options.delimiter,h=b.split(g);if(h.length>1){for(var i=0;if.options.maxInputLength)){var o=a.Event("beforeItemAdd",{item:b,cancel:!1,options:d});if(f.$element.trigger(o),!o.cancel){f.itemsArray.push(b);var p=a(''+e(k)+'');p.data("item",b),f.findInputWrapper().before(p),p.after(" ");var q=a('option[value="'+encodeURIComponent(j)+'"]',f.$element).length||a('option[value="'+e(j)+'"]',f.$element).length;if(f.isSelect&&!q){var r=a("");r.data("item",b),r.attr("value",j),f.$element.append(r)}c||f.pushVal(),(f.options.maxTags===f.itemsArray.length||f.items().toString().length===f.options.maxInputLength)&&f.$container.addClass("bootstrap-tagsinput-max"),a(".typeahead, .twitter-typeahead",f.$container).length&&f.$input.typeahead("val",""),this.isInit?f.$element.trigger(a.Event("itemAddedOnInit",{item:b,options:d})):f.$element.trigger(a.Event("itemAdded",{item:b,options:d}))}}}else if(f.options.onTagExists){var s=a(".tag",f.$container).filter(function(){return a(this).data("item")===n});f.options.onTagExists(b,s)}}}},remove:function(b,c,d){var e=this;if(e.objectItems&&(b="object"==typeof b?a.grep(e.itemsArray,function(a){return e.options.itemValue(a)==e.options.itemValue(b)}):a.grep(e.itemsArray,function(a){return e.options.itemValue(a)==b}),b=b[b.length-1]),b){var f=a.Event("beforeItemRemove",{item:b,cancel:!1,options:d});if(e.$element.trigger(f),f.cancel)return;a(".tag",e.$container).filter(function(){return a(this).data("item")===b}).remove(),a("option",e.$element).filter(function(){return a(this).data("item")===b}).remove(),-1!==a.inArray(b,e.itemsArray)&&e.itemsArray.splice(a.inArray(b,e.itemsArray),1)}c||e.pushVal(),e.options.maxTags>e.itemsArray.length&&e.$container.removeClass("bootstrap-tagsinput-max"),e.$element.trigger(a.Event("itemRemoved",{item:b,options:d}))},removeAll:function(){var b=this;for(a(".tag",b.$container).remove(),a("option",b.$element).remove();b.itemsArray.length>0;)b.itemsArray.pop();b.pushVal()},refresh:function(){var b=this;a(".tag",b.$container).each(function(){var c=a(this),d=c.data("item"),f=b.options.itemValue(d),g=b.options.itemText(d),h=b.options.tagClass(d);if(c.attr("class",null),c.addClass("tag "+e(h)),c.contents().filter(function(){return 3==this.nodeType})[0].nodeValue=e(g),b.isSelect){var i=a("option",b.$element).filter(function(){return a(this).data("item")===d});i.attr("value",f)}})},items:function(){return this.itemsArray},pushVal:function(){var b=this,c=a.map(b.items(),function(a){return b.options.itemValue(a).toString()});b.$element.val(c,!0).trigger("change")},build:function(b){var e=this;if(e.options=a.extend({},h,b),e.objectItems&&(e.options.freeInput=!1),c(e.options,"itemValue"),c(e.options,"itemText"),d(e.options,"tagClass"),e.options.typeahead){var i=e.options.typeahead||{};d(i,"source"),e.$input.typeahead(a.extend({},i,{source:function(b,c){function d(a){for(var b=[],d=0;d$1")}}))}if(e.options.typeaheadjs){var j=null,k={},l=e.options.typeaheadjs;a.isArray(l)?(j=l[0],k=l[1]):k=l,e.$input.typeahead(j,k).on("typeahead:selected",a.proxy(function(a,b){k.valueKey?e.add(b[k.valueKey]):e.add(b),e.$input.typeahead("val","")},e))}e.$container.on("click",a.proxy(function(a){e.$element.attr("disabled")||e.$input.removeAttr("disabled"),e.$input.focus()},e)),e.options.addOnBlur&&e.options.freeInput&&e.$input.on("focusout",a.proxy(function(b){0===a(".typeahead, .twitter-typeahead",e.$container).length&&(e.add(e.$input.val()),e.$input.val(""))},e)),e.$container.on({focusin:function(){e.$container.addClass(e.options.focusClass)},focusout:function(){e.$container.removeClass(e.options.focusClass)}}),e.$container.on("keydown","input",a.proxy(function(b){var c=a(b.target),d=e.findInputWrapper();if(e.$element.attr("disabled"))return void e.$input.attr("disabled","disabled");switch(b.which){case 8:if(0===f(c[0])){var g=d.prev();g.length&&e.remove(g.data("item"))}break;case 46:if(0===f(c[0])){var h=d.next();h.length&&e.remove(h.data("item"))}break;case 37:var i=d.prev();0===c.val().length&&i[0]&&(i.before(d),c.focus());break;case 39:var j=d.next();0===c.val().length&&j[0]&&(j.after(d),c.focus())}var k=c.val().length;Math.ceil(k/5);c.attr("size",Math.max(this.inputSize,c.val().length))},e)),e.$container.on("keypress","input",a.proxy(function(b){var c=a(b.target);if(e.$element.attr("disabled"))return void e.$input.attr("disabled","disabled");var d=c.val(),f=e.options.maxChars&&d.length>=e.options.maxChars;e.options.freeInput&&(g(b,e.options.confirmKeys)||f)&&(0!==d.length&&(e.add(f?d.substr(0,e.options.maxChars):d),c.val("")),e.options.cancelConfirmKeysOnEmpty===!1&&b.preventDefault());var h=c.val().length;Math.ceil(h/5);c.attr("size",Math.max(this.inputSize,c.val().length))},e)),e.$container.on("click","[data-role=remove]",a.proxy(function(b){e.$element.attr("disabled")||e.remove(a(b.target).closest(".tag").data("item"))},e)),e.options.itemValue===h.itemValue&&("INPUT"===e.$element[0].tagName?e.add(e.$element.val()):a("option",e.$element).each(function(){e.add(a(this).attr("value"),!0)}))},destroy:function(){var a=this;a.$container.off("keypress","input"),a.$container.off("click","[role=remove]"),a.$container.remove(),a.$element.removeData("tagsinput"),a.$element.show()},focus:function(){this.$input.focus()},input:function(){return this.$input},findInputWrapper:function(){for(var b=this.$input[0],c=this.$container[0];b&&b.parentNode!==c;)b=b.parentNode;return a(b)}},a.fn.tagsinput=function(c,d,e){var f=[];return this.each(function(){var g=a(this).data("tagsinput");if(g)if(c||d){if(void 0!==g[c]){if(3===g[c].length&&void 0!==e)var h=g[c](d,null,e);else var h=g[c](d);void 0!==h&&f.push(h)}}else f.push(g);else g=new b(this,c),a(this).data("tagsinput",g),f.push(g),"SELECT"===this.tagName&&a("option",a(this)).attr("selected","selected"),a(this).val(a(this).val())}),"string"==typeof c?f.length>1?f:f[0]:f},a.fn.tagsinput.Constructor=b;var i=a("
");a(function(){a("input[data-role=tagsinput], select[multiple][data-role=tagsinput]").tagsinput()})}(window.jQuery); +!function(a){"use strict";function b(b,c){this.isInit=!0,this.itemsArray=[],this.$element=a(b),this.$element.hide(),this.isSelect="SELECT"===b.tagName,this.multiple=this.isSelect&&b.hasAttribute("multiple"),this.objectItems=c&&c.itemValue,this.placeholderText=b.hasAttribute("placeholder")?this.$element.attr("placeholder"):"",this.inputSize=Math.max(1,this.placeholderText.length),this.$container=a('
'),this.$input=a('').appendTo(this.$container),this.$element.before(this.$container),this.build(c),this.isInit=!1}function c(a,b){if("function"!=typeof a[b]){var c=a[b];a[b]=function(a){return a[c]}}}function d(a,b){if("function"!=typeof a[b]){var c=a[b];a[b]=function(){return c}}}function e(a){return a?i.text(a).html():""}function f(a){var b=0;if(document.selection){a.focus();var c=document.selection.createRange();c.moveStart("character",-a.value.length),b=c.text.length}else(a.selectionStart||"0"==a.selectionStart)&&(b=a.selectionStart);return b}function g(b,c){var d=!1;return a.each(c,function(a,c){if("number"==typeof c&&b.which===c)return d=!0,!1;if(b.which===c.which){var e=!c.hasOwnProperty("altKey")||b.altKey===c.altKey,f=!c.hasOwnProperty("shiftKey")||b.shiftKey===c.shiftKey,g=!c.hasOwnProperty("ctrlKey")||b.ctrlKey===c.ctrlKey;if(e&&f&&g)return d=!0,!1}}),d}var h={tagClass:function(a){return"label label-info"},focusClass:"focus",itemValue:function(a){return a?a.toString():a},itemText:function(a){return this.itemValue(a)},itemTitle:function(a){return null},freeInput:!0,addOnBlur:!0,maxTags:void 0,maxChars:void 0,confirmKeys:[13,44],delimiter:",",delimiterRegex:null,cancelConfirmKeysOnEmpty:!1,onTagExists:function(a,b){b.hide().fadeIn()},trimValue:!1,allowDuplicates:!1,triggerChange:!0};b.prototype={constructor:b,add:function(b,c,d){var f=this;if(!(f.options.maxTags&&f.itemsArray.length>=f.options.maxTags)&&(b===!1||b)){if("string"==typeof b&&f.options.trimValue&&(b=a.trim(b)),"object"==typeof b&&!f.objectItems)throw"Can't add objects when itemValue option is not set";if(!b.toString().match(/^\s*$/)){if(f.isSelect&&!f.multiple&&f.itemsArray.length>0&&f.remove(f.itemsArray[0]),"string"==typeof b&&"INPUT"===this.$element[0].tagName){var g=f.options.delimiterRegex?f.options.delimiterRegex:f.options.delimiter,h=b.split(g);if(h.length>1){for(var i=0;if.options.maxInputLength)){var o=a.Event("beforeItemAdd",{item:b,cancel:!1,options:d});if(f.$element.trigger(o),!o.cancel){f.itemsArray.push(b);var p=a(''+e(k)+'');p.data("item",b),f.findInputWrapper().before(p),p.after(" ");var q=a('option[value="'+encodeURIComponent(j)+'"]',f.$element).length||a('option[value="'+e(j)+'"]',f.$element).length;if(f.isSelect&&!q){var r=a("");r.data("item",b),r.attr("value",j),f.$element.append(r)}c||f.pushVal(f.options.triggerChange),(f.options.maxTags===f.itemsArray.length||f.items().toString().length===f.options.maxInputLength)&&f.$container.addClass("bootstrap-tagsinput-max"),a(".typeahead, .twitter-typeahead",f.$container).length&&f.$input.typeahead("val",""),this.isInit?f.$element.trigger(a.Event("itemAddedOnInit",{item:b,options:d})):f.$element.trigger(a.Event("itemAdded",{item:b,options:d}))}}}else if(f.options.onTagExists){var s=a(".tag",f.$container).filter(function(){return a(this).data("item")===n});f.options.onTagExists(b,s)}}}},remove:function(b,c,d){var e=this;if(e.objectItems&&(b="object"==typeof b?a.grep(e.itemsArray,function(a){return e.options.itemValue(a)==e.options.itemValue(b)}):a.grep(e.itemsArray,function(a){return e.options.itemValue(a)==b}),b=b[b.length-1]),b){var f=a.Event("beforeItemRemove",{item:b,cancel:!1,options:d});if(e.$element.trigger(f),f.cancel)return;a(".tag",e.$container).filter(function(){return a(this).data("item")===b}).remove(),a("option",e.$element).filter(function(){return a(this).data("item")===b}).remove(),-1!==a.inArray(b,e.itemsArray)&&e.itemsArray.splice(a.inArray(b,e.itemsArray),1)}c||e.pushVal(e.options.triggerChange),e.options.maxTags>e.itemsArray.length&&e.$container.removeClass("bootstrap-tagsinput-max"),e.$element.trigger(a.Event("itemRemoved",{item:b,options:d}))},removeAll:function(){var b=this;for(a(".tag",b.$container).remove(),a("option",b.$element).remove();b.itemsArray.length>0;)b.itemsArray.pop();b.pushVal(b.options.triggerChange)},refresh:function(){var b=this;a(".tag",b.$container).each(function(){var c=a(this),d=c.data("item"),f=b.options.itemValue(d),g=b.options.itemText(d),h=b.options.tagClass(d);if(c.attr("class",null),c.addClass("tag "+e(h)),c.contents().filter(function(){return 3==this.nodeType})[0].nodeValue=e(g),b.isSelect){var i=a("option",b.$element).filter(function(){return a(this).data("item")===d});i.attr("value",f)}})},items:function(){return this.itemsArray},pushVal:function(){var b=this,c=a.map(b.items(),function(a){return b.options.itemValue(a).toString()});b.$element.val(c,!0),b.options.triggerChange&&b.$element.trigger("change")},build:function(b){var e=this;if(e.options=a.extend({},h,b),e.objectItems&&(e.options.freeInput=!1),c(e.options,"itemValue"),c(e.options,"itemText"),d(e.options,"tagClass"),e.options.typeahead){var i=e.options.typeahead||{};d(i,"source"),e.$input.typeahead(a.extend({},i,{source:function(b,c){function d(a){for(var b=[],d=0;d$1")}}))}if(e.options.typeaheadjs){var j=null,k={},l=e.options.typeaheadjs;a.isArray(l)?(j=l[0],k=l[1]):k=l,e.$input.typeahead(j,k).on("typeahead:selected",a.proxy(function(a,b){k.valueKey?e.add(b[k.valueKey]):e.add(b),e.$input.typeahead("val","")},e))}e.$container.on("click",a.proxy(function(a){e.$element.attr("disabled")||e.$input.removeAttr("disabled"),e.$input.focus()},e)),e.options.addOnBlur&&e.options.freeInput&&e.$input.on("focusout",a.proxy(function(b){0===a(".typeahead, .twitter-typeahead",e.$container).length&&(e.add(e.$input.val()),e.$input.val(""))},e)),e.$container.on({focusin:function(){e.$container.addClass(e.options.focusClass)},focusout:function(){e.$container.removeClass(e.options.focusClass)}}),e.$container.on("keydown","input",a.proxy(function(b){var c=a(b.target),d=e.findInputWrapper();if(e.$element.attr("disabled"))return void e.$input.attr("disabled","disabled");switch(b.which){case 8:if(0===f(c[0])){var g=d.prev();g.length&&e.remove(g.data("item"))}break;case 46:if(0===f(c[0])){var h=d.next();h.length&&e.remove(h.data("item"))}break;case 37:var i=d.prev();0===c.val().length&&i[0]&&(i.before(d),c.focus());break;case 39:var j=d.next();0===c.val().length&&j[0]&&(j.after(d),c.focus())}var k=c.val().length;Math.ceil(k/5);c.attr("size",Math.max(this.inputSize,c.val().length))},e)),e.$container.on("keypress","input",a.proxy(function(b){var c=a(b.target);if(e.$element.attr("disabled"))return void e.$input.attr("disabled","disabled");var d=c.val(),f=e.options.maxChars&&d.length>=e.options.maxChars;e.options.freeInput&&(g(b,e.options.confirmKeys)||f)&&(0!==d.length&&(e.add(f?d.substr(0,e.options.maxChars):d),c.val("")),e.options.cancelConfirmKeysOnEmpty===!1&&b.preventDefault());var h=c.val().length;Math.ceil(h/5);c.attr("size",Math.max(this.inputSize,c.val().length))},e)),e.$container.on("click","[data-role=remove]",a.proxy(function(b){e.$element.attr("disabled")||e.remove(a(b.target).closest(".tag").data("item"))},e)),e.options.itemValue===h.itemValue&&("INPUT"===e.$element[0].tagName?e.add(e.$element.val()):a("option",e.$element).each(function(){e.add(a(this).attr("value"),!0)}))},destroy:function(){var a=this;a.$container.off("keypress","input"),a.$container.off("click","[role=remove]"),a.$container.remove(),a.$element.removeData("tagsinput"),a.$element.show()},focus:function(){this.$input.focus()},input:function(){return this.$input},findInputWrapper:function(){for(var b=this.$input[0],c=this.$container[0];b&&b.parentNode!==c;)b=b.parentNode;return a(b)}},a.fn.tagsinput=function(c,d,e){var f=[];return this.each(function(){var g=a(this).data("tagsinput");if(g)if(c||d){if(void 0!==g[c]){if(3===g[c].length&&void 0!==e)var h=g[c](d,null,e);else var h=g[c](d);void 0!==h&&f.push(h)}}else f.push(g);else g=new b(this,c),a(this).data("tagsinput",g),f.push(g),"SELECT"===this.tagName&&a("option",a(this)).attr("selected","selected"),a(this).val(a(this).val())}),"string"==typeof c?f.length>1?f:f[0]:f},a.fn.tagsinput.Constructor=b;var i=a("
");a(function(){a("input[data-role=tagsinput], select[multiple][data-role=tagsinput]").tagsinput()})}(window.jQuery); diff --git a/src/topics/tags.js b/src/topics/tags.js index 1b47a5d0e6..83702331b7 100644 --- a/src/topics/tags.js +++ b/src/topics/tags.js @@ -1,12 +1,13 @@ 'use strict'; -var async = require('async'), +var async = require('async'); - db = require('../database'), - meta = require('../meta'), - _ = require('underscore'), - plugins = require('../plugins'); +var db = require('../database'); +var meta = require('../meta'); +var _ = require('underscore'); +var plugins = require('../plugins'); +var utils = require('../../public/src/utils'); module.exports = function(Topics) { @@ -24,7 +25,9 @@ module.exports = function(Topics) { }, function (data, next) { tags = data.tags.slice(0, meta.config.maximumTagsPerTopic || 5); - tags = tags.map(Topics.cleanUpTag).filter(function(tag, index, array) { + tags = tags.map(function(tag) { + return utils.cleanUpTag(tag, meta.config.maximumTagLength); + }).filter(function(tag, index, array) { return tag && tag.length >= (meta.config.minimumTagLength || 3) && array.indexOf(tag) === index; }); @@ -45,20 +48,6 @@ module.exports = function(Topics) { ], callback); }; - Topics.cleanUpTag = function(tag) { - if (typeof tag !== 'string' || !tag.length ) { - return ''; - } - tag = tag.trim().toLowerCase(); - tag = tag.replace(/[,\/#!$%\^\*;:{}=_`<>'"~()?\|]/g, ''); - tag = tag.substr(0, meta.config.maximumTagLength || 15).trim(); - var matches = tag.match(/^[.-]*(.+?)[.-]*$/); - if (matches && matches.length > 1) { - tag = matches[1]; - } - return tag; - }; - Topics.updateTag = function(tag, data, callback) { db.setObject('tag:' + tag, data, callback); }; From e4fb4c04691f541bc5971ca8a56a30cad44e4364 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 22 Mar 2016 18:24:29 +0200 Subject: [PATCH 16/81] up composer --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 33e4d20c8a..d442a1d33c 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "mongodb": "~2.1.3", "morgan": "^1.3.2", "nconf": "~0.8.2", - "nodebb-plugin-composer-default": "3.0.11", + "nodebb-plugin-composer-default": "3.0.12", "nodebb-plugin-dbsearch": "1.0.1", "nodebb-plugin-emoji-extended": "1.0.3", "nodebb-plugin-markdown": "4.0.17", From f4dd3d2082f690ddfc926f2b19fedc79a959a6dd Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 22 Mar 2016 18:32:25 +0200 Subject: [PATCH 17/81] up users per page to 50 --- src/controllers/admin/users.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/admin/users.js b/src/controllers/admin/users.js index 3651767153..b711998e1a 100644 --- a/src/controllers/admin/users.js +++ b/src/controllers/admin/users.js @@ -124,7 +124,7 @@ usersController.registrationQueue = function(req, res, next) { function getUsers(set, section, req, res, next) { var page = parseInt(req.query.page, 10) || 1; - var resultsPerPage = 25; + var resultsPerPage = 50; var start = Math.max(0, page - 1) * resultsPerPage; var stop = start + resultsPerPage - 1; From 9b1dab8ef9bb95f1d2c95c446a9ecefe7f680a29 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 22 Mar 2016 18:33:35 +0200 Subject: [PATCH 18/81] up default to 50 --- src/controllers/users.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/users.js b/src/controllers/users.js index 1eb5989c1c..31ac0bd1cc 100644 --- a/src/controllers/users.js +++ b/src/controllers/users.js @@ -103,7 +103,7 @@ usersController.getUsers = function(set, uid, page, callback) { } page = parseInt(page, 10) || 1; - var resultsPerPage = parseInt(meta.config.userSearchResultsPerPage, 10) || 20; + var resultsPerPage = parseInt(meta.config.userSearchResultsPerPage, 10) || 50; var start = Math.max(0, page - 1) * resultsPerPage; var stop = start + resultsPerPage - 1; From 931dedf7f1808effd3915a200a5e6576fb2b3d83 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Tue, 22 Mar 2016 18:41:18 +0200 Subject: [PATCH 19/81] revert 50 change on admin --- src/controllers/admin/users.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/controllers/admin/users.js b/src/controllers/admin/users.js index b711998e1a..3651767153 100644 --- a/src/controllers/admin/users.js +++ b/src/controllers/admin/users.js @@ -124,7 +124,7 @@ usersController.registrationQueue = function(req, res, next) { function getUsers(set, section, req, res, next) { var page = parseInt(req.query.page, 10) || 1; - var resultsPerPage = 50; + var resultsPerPage = 25; var start = Math.max(0, page - 1) * resultsPerPage; var stop = start + resultsPerPage - 1; From 1423b1443d4f5b1b44b18bde59788a0cf58b3f58 Mon Sep 17 00:00:00 2001 From: RaceProUK Date: Tue, 22 Mar 2016 19:32:29 +0000 Subject: [PATCH 20/81] Fixing 'Go to last read' popup text Since clicking the popup goes to the last _read_ post, not the last unread --- public/language/ar/topic.json | 2 +- public/language/bn/topic.json | 2 +- public/language/cs/topic.json | 2 +- public/language/el/topic.json | 2 +- public/language/en@pirate/topic.json | 2 +- public/language/en_GB/topic.json | 2 +- public/language/en_US/topic.json | 2 +- public/language/fi/topic.json | 2 +- public/language/hu/topic.json | 2 +- public/language/id/topic.json | 2 +- public/language/lt/topic.json | 2 +- public/language/ro/topic.json | 2 +- public/language/rw/topic.json | 2 +- public/language/sc/topic.json | 2 +- public/language/sk/topic.json | 2 +- public/language/sl/topic.json | 2 +- public/language/sr/topic.json | 2 +- public/language/th/topic.json | 2 +- public/language/zh_TW/topic.json | 2 +- 19 files changed, 19 insertions(+), 19 deletions(-) diff --git a/public/language/ar/topic.json b/public/language/ar/topic.json index 1e66ad91eb..81cf19d677 100644 --- a/public/language/ar/topic.json +++ b/public/language/ar/topic.json @@ -26,7 +26,7 @@ "tools": "أدوات", "flag": "تبليغ", "locked": "مقفل", - "bookmark_instructions": "Click here to return to the last unread post in this thread.", + "bookmark_instructions": "Click here to return to the last read post in this thread.", "flag_title": "إشعار بمشاركة مخلة.", "flag_success": "تم الإشعار بهذه المشاركة على أنها مخلة", "deleted_message": "هذه المشاركة محذوفة. فقط من لهم صلاحية الإشراف على ا لمشاركات يمكنهم معاينتها.", diff --git a/public/language/bn/topic.json b/public/language/bn/topic.json index 9fea972e71..053cff1d7e 100644 --- a/public/language/bn/topic.json +++ b/public/language/bn/topic.json @@ -26,7 +26,7 @@ "tools": "টুলস", "flag": "ফ্ল্যাগ", "locked": "বন্ধ", - "bookmark_instructions": "Click here to return to the last unread post in this thread.", + "bookmark_instructions": "Click here to return to the last read post in this thread.", "flag_title": "মডারেশনের জন্য এই পোস্টটি ফ্ল্যাগ করুন", "flag_success": "এই পোস্টটি মডারেশনের জন্য ফ্ল্যাগ করা হয়েছে।", "deleted_message": "এই টপিকটি মুছে ফেলা হয়েছে। শুধুমাত্র টপিক ব্যবস্থাপনার ক্ষমতাপ্রাপ্ত সদস্যগণ এটি দেখতে পারবেন।", diff --git a/public/language/cs/topic.json b/public/language/cs/topic.json index 3bced7f182..8bdef36acc 100644 --- a/public/language/cs/topic.json +++ b/public/language/cs/topic.json @@ -26,7 +26,7 @@ "tools": "Nástroje", "flag": "Flag", "locked": "Locked", - "bookmark_instructions": "Click here to return to the last unread post in this thread.", + "bookmark_instructions": "Click here to return to the last read post in this thread.", "flag_title": "Flag this post for moderation", "flag_success": "This post has been flagged for moderation.", "deleted_message": "This topic has been deleted. Only users with topic management privileges can see it.", diff --git a/public/language/el/topic.json b/public/language/el/topic.json index a2f1d0fcd7..67ac6e5ef7 100644 --- a/public/language/el/topic.json +++ b/public/language/el/topic.json @@ -26,7 +26,7 @@ "tools": "Εργαλεία", "flag": "Σημαία", "locked": "Κλειδωμένο", - "bookmark_instructions": "Click here to return to the last unread post in this thread.", + "bookmark_instructions": "Click here to return to the last read post in this thread.", "flag_title": "Επισήμανση αυτής της δημοσίευσης για συντονισμό", "flag_success": "Αυτή η δημοσίευση έχει επισημανθεί για συντονισμό.", "deleted_message": "Το θέμα αυτό έχει διαγραφεί. Μόνο οι χρήστες με δικαιώματα διαχειριστή θεμάτων μπορούν να το δουν.", diff --git a/public/language/en@pirate/topic.json b/public/language/en@pirate/topic.json index c7ce76e07b..bdf6d77f91 100644 --- a/public/language/en@pirate/topic.json +++ b/public/language/en@pirate/topic.json @@ -26,7 +26,7 @@ "tools": "Tools", "flag": "Flag", "locked": "Locked", - "bookmark_instructions": "Click here to return to the last unread post in this thread.", + "bookmark_instructions": "Click here to return to the last read post in this thread.", "flag_title": "Flag this post for moderation", "flag_success": "This post has been flagged for moderation.", "deleted_message": "This topic has been deleted. Only users with topic management privileges can see it.", diff --git a/public/language/en_GB/topic.json b/public/language/en_GB/topic.json index e99e90b96c..6299b8aac1 100644 --- a/public/language/en_GB/topic.json +++ b/public/language/en_GB/topic.json @@ -30,7 +30,7 @@ "flag": "Flag", "locked": "Locked", - "bookmark_instructions" : "Click here to return to the last unread post in this thread.", + "bookmark_instructions" : "Click here to return to the last read post in this thread.", "flag_title": "Flag this post for moderation", "flag_success": "This post has been flagged for moderation.", diff --git a/public/language/en_US/topic.json b/public/language/en_US/topic.json index c7ce76e07b..bdf6d77f91 100644 --- a/public/language/en_US/topic.json +++ b/public/language/en_US/topic.json @@ -26,7 +26,7 @@ "tools": "Tools", "flag": "Flag", "locked": "Locked", - "bookmark_instructions": "Click here to return to the last unread post in this thread.", + "bookmark_instructions": "Click here to return to the last read post in this thread.", "flag_title": "Flag this post for moderation", "flag_success": "This post has been flagged for moderation.", "deleted_message": "This topic has been deleted. Only users with topic management privileges can see it.", diff --git a/public/language/fi/topic.json b/public/language/fi/topic.json index 37b9b98e80..ce37bb1954 100644 --- a/public/language/fi/topic.json +++ b/public/language/fi/topic.json @@ -26,7 +26,7 @@ "tools": "Työkalut", "flag": "Ilmianna", "locked": "Lukittu", - "bookmark_instructions": "Click here to return to the last unread post in this thread.", + "bookmark_instructions": "Click here to return to the last read post in this thread.", "flag_title": "Ilmianna tämä viesti moderaattoreille", "flag_success": "Tämä viesti ilmiannettiin moderaattoreille.", "deleted_message": "Tämä aihe on poistettu. Vain käyttäjät, joilla on aiheen hallintaoikeudet, voivat nähdä sen.", diff --git a/public/language/hu/topic.json b/public/language/hu/topic.json index 189f065bde..be4895f558 100644 --- a/public/language/hu/topic.json +++ b/public/language/hu/topic.json @@ -26,7 +26,7 @@ "tools": "Eszközök", "flag": "Jelentés", "locked": "Locked", - "bookmark_instructions": "Click here to return to the last unread post in this thread.", + "bookmark_instructions": "Click here to return to the last read post in this thread.", "flag_title": "A hozzászólás jelentése a moderátoroknál", "flag_success": "This post has been flagged for moderation.", "deleted_message": "This topic has been deleted. Only users with topic management privileges can see it.", diff --git a/public/language/id/topic.json b/public/language/id/topic.json index 6ba52cacce..07a4b79bcd 100644 --- a/public/language/id/topic.json +++ b/public/language/id/topic.json @@ -26,7 +26,7 @@ "tools": "Perangkat", "flag": "Tandai", "locked": "Terkunci", - "bookmark_instructions": "Click here to return to the last unread post in this thread.", + "bookmark_instructions": "Click here to return to the last read post in this thread.", "flag_title": "Tandai posting ini untuk moderasi", "flag_success": "Posting ini telah ditandai untuk moderasi", "deleted_message": "Topik ini telah dihapus. Hanya pengguna dengan hak manajemen topik yang dapat melihatnya.", diff --git a/public/language/lt/topic.json b/public/language/lt/topic.json index a12bdd4c4e..d6094a6e83 100644 --- a/public/language/lt/topic.json +++ b/public/language/lt/topic.json @@ -26,7 +26,7 @@ "tools": "Įrankiai", "flag": "Pažymėti", "locked": "Užrakinta", - "bookmark_instructions": "Click here to return to the last unread post in this thread.", + "bookmark_instructions": "Click here to return to the last read post in this thread.", "flag_title": "Pažymėti ši pranešimą moderatoriams", "flag_success": "Šis pranešimas buvo pažymėtas moderatorių patikrinimui.", "deleted_message": "Ši tema buvo ištrinta. Tik Vartotojai su temos redagavimo privilegijomis gali matyti ja", diff --git a/public/language/ro/topic.json b/public/language/ro/topic.json index 5503fa8c3d..e67e9d7cbf 100644 --- a/public/language/ro/topic.json +++ b/public/language/ro/topic.json @@ -26,7 +26,7 @@ "tools": "Unelte", "flag": "Semnalizează", "locked": "Închis", - "bookmark_instructions": "Click here to return to the last unread post in this thread.", + "bookmark_instructions": "Click here to return to the last read post in this thread.", "flag_title": "Semnalizează acest mesaj pentru moderare", "flag_success": "Acest mesaj a fost semnalizat pentru moderare.", "deleted_message": "Acest subiect a fost șters. Doar utilizatorii cu privilegii pentru moderarea subiectelor îl poate vedea.", diff --git a/public/language/rw/topic.json b/public/language/rw/topic.json index 81574d5241..8640719f95 100644 --- a/public/language/rw/topic.json +++ b/public/language/rw/topic.json @@ -26,7 +26,7 @@ "tools": "Ibikoresho", "flag": "Tambikana", "locked": "Birafungiranye", - "bookmark_instructions": "Click here to return to the last unread post in this thread.", + "bookmark_instructions": "Click here to return to the last read post in this thread.", "flag_title": "Bimenyeshe ubuyobozi", "flag_success": "Bimaze kumenyeshwa ubuyobozi ngo bikurikiranwe. ", "deleted_message": "Iki kiganiro cyamaze gukurwaho. Abantu babifitiye uburenganzira ni bo bonyine bashobora kukibona. ", diff --git a/public/language/sc/topic.json b/public/language/sc/topic.json index 1f58d8582d..074062ecb6 100644 --- a/public/language/sc/topic.json +++ b/public/language/sc/topic.json @@ -26,7 +26,7 @@ "tools": "Ainas", "flag": "Signala", "locked": "Locked", - "bookmark_instructions": "Click here to return to the last unread post in this thread.", + "bookmark_instructions": "Click here to return to the last read post in this thread.", "flag_title": "Signala custu arresonu pro sa moderatzione", "flag_success": "This post has been flagged for moderation.", "deleted_message": "This topic has been deleted. Only users with topic management privileges can see it.", diff --git a/public/language/sk/topic.json b/public/language/sk/topic.json index 39f4ca03d8..df1ecdd198 100644 --- a/public/language/sk/topic.json +++ b/public/language/sk/topic.json @@ -26,7 +26,7 @@ "tools": "Nástroje", "flag": "Označiť", "locked": "Locked", - "bookmark_instructions": "Click here to return to the last unread post in this thread.", + "bookmark_instructions": "Click here to return to the last read post in this thread.", "flag_title": "Označiť príspevok pre moderáciu", "flag_success": "Tento príspevok bol označený na úpravu. ", "deleted_message": "This topic has been deleted. Only users with topic management privileges can see it.", diff --git a/public/language/sl/topic.json b/public/language/sl/topic.json index 503f7ee250..705f9564ec 100644 --- a/public/language/sl/topic.json +++ b/public/language/sl/topic.json @@ -26,7 +26,7 @@ "tools": "Orodja", "flag": "Prijavi", "locked": "Zaklenjeno", - "bookmark_instructions": "Click here to return to the last unread post in this thread.", + "bookmark_instructions": "Click here to return to the last read post in this thread.", "flag_title": "Prijavi to objavo v pregled administratorju", "flag_success": "Ta objava je bila prijavljena v pregled administratorju.", "deleted_message": "Ta tema je bila izbrisana. Le uporabniki s pravicami teme jo lahko vidijo.", diff --git a/public/language/sr/topic.json b/public/language/sr/topic.json index 37e042c18f..a5ae516c6f 100644 --- a/public/language/sr/topic.json +++ b/public/language/sr/topic.json @@ -26,7 +26,7 @@ "tools": "Алатке", "flag": "Означи", "locked": "Закључан", - "bookmark_instructions": "Click here to return to the last unread post in this thread.", + "bookmark_instructions": "Click here to return to the last read post in this thread.", "flag_title": "Flag this post for moderation", "flag_success": "This post has been flagged for moderation.", "deleted_message": "This topic has been deleted. Only users with topic management privileges can see it.", diff --git a/public/language/th/topic.json b/public/language/th/topic.json index 19cecadf9d..7ad792070d 100644 --- a/public/language/th/topic.json +++ b/public/language/th/topic.json @@ -26,7 +26,7 @@ "tools": "เครื่องมือ", "flag": "ปักธง", "locked": "Locked", - "bookmark_instructions": "Click here to return to the last unread post in this thread.", + "bookmark_instructions": "Click here to return to the last read post in this thread.", "flag_title": "ปักธงโพสต์นี้เพื่อดำเนินการ", "flag_success": "This post has been flagged for moderation.", "deleted_message": "Topic นี้ถูกลบไปแล้ว เฉพาะผู้ใช้งานที่มีสิทธิ์ในการจัดการ Topic เท่านั้นที่จะมีสิทธิ์ในการเข้าชม", diff --git a/public/language/zh_TW/topic.json b/public/language/zh_TW/topic.json index 62f48e9523..4b344c6a31 100644 --- a/public/language/zh_TW/topic.json +++ b/public/language/zh_TW/topic.json @@ -26,7 +26,7 @@ "tools": "工具", "flag": "檢舉", "locked": "已鎖定", - "bookmark_instructions": "Click here to return to the last unread post in this thread.", + "bookmark_instructions": "Click here to return to the last read post in this thread.", "flag_title": "檢舉這篇文章, 交給仲裁者來審閱.", "flag_success": "這文章已經被檢舉要求仲裁.", "deleted_message": "此主題已被刪除。只有具有主題管理權限的用戶才能看到它。", From 25f44005691de0682dac85b11bff221dab5569eb Mon Sep 17 00:00:00 2001 From: RaceProUK Date: Tue, 22 Mar 2016 20:57:32 +0000 Subject: [PATCH 21/81] Reverting all but en-GB --- public/language/ar/topic.json | 2 +- public/language/bn/topic.json | 2 +- public/language/cs/topic.json | 2 +- public/language/el/topic.json | 2 +- public/language/en@pirate/topic.json | 2 +- public/language/en_US/topic.json | 2 +- public/language/fi/topic.json | 2 +- public/language/hu/topic.json | 2 +- public/language/id/topic.json | 2 +- public/language/lt/topic.json | 2 +- public/language/ro/topic.json | 2 +- public/language/rw/topic.json | 2 +- public/language/sc/topic.json | 2 +- public/language/sk/topic.json | 2 +- public/language/sl/topic.json | 2 +- public/language/sr/topic.json | 2 +- public/language/th/topic.json | 2 +- public/language/zh_TW/topic.json | 2 +- 18 files changed, 18 insertions(+), 18 deletions(-) diff --git a/public/language/ar/topic.json b/public/language/ar/topic.json index 81cf19d677..1e66ad91eb 100644 --- a/public/language/ar/topic.json +++ b/public/language/ar/topic.json @@ -26,7 +26,7 @@ "tools": "أدوات", "flag": "تبليغ", "locked": "مقفل", - "bookmark_instructions": "Click here to return to the last read post in this thread.", + "bookmark_instructions": "Click here to return to the last unread post in this thread.", "flag_title": "إشعار بمشاركة مخلة.", "flag_success": "تم الإشعار بهذه المشاركة على أنها مخلة", "deleted_message": "هذه المشاركة محذوفة. فقط من لهم صلاحية الإشراف على ا لمشاركات يمكنهم معاينتها.", diff --git a/public/language/bn/topic.json b/public/language/bn/topic.json index 053cff1d7e..9fea972e71 100644 --- a/public/language/bn/topic.json +++ b/public/language/bn/topic.json @@ -26,7 +26,7 @@ "tools": "টুলস", "flag": "ফ্ল্যাগ", "locked": "বন্ধ", - "bookmark_instructions": "Click here to return to the last read post in this thread.", + "bookmark_instructions": "Click here to return to the last unread post in this thread.", "flag_title": "মডারেশনের জন্য এই পোস্টটি ফ্ল্যাগ করুন", "flag_success": "এই পোস্টটি মডারেশনের জন্য ফ্ল্যাগ করা হয়েছে।", "deleted_message": "এই টপিকটি মুছে ফেলা হয়েছে। শুধুমাত্র টপিক ব্যবস্থাপনার ক্ষমতাপ্রাপ্ত সদস্যগণ এটি দেখতে পারবেন।", diff --git a/public/language/cs/topic.json b/public/language/cs/topic.json index 8bdef36acc..3bced7f182 100644 --- a/public/language/cs/topic.json +++ b/public/language/cs/topic.json @@ -26,7 +26,7 @@ "tools": "Nástroje", "flag": "Flag", "locked": "Locked", - "bookmark_instructions": "Click here to return to the last read post in this thread.", + "bookmark_instructions": "Click here to return to the last unread post in this thread.", "flag_title": "Flag this post for moderation", "flag_success": "This post has been flagged for moderation.", "deleted_message": "This topic has been deleted. Only users with topic management privileges can see it.", diff --git a/public/language/el/topic.json b/public/language/el/topic.json index 67ac6e5ef7..a2f1d0fcd7 100644 --- a/public/language/el/topic.json +++ b/public/language/el/topic.json @@ -26,7 +26,7 @@ "tools": "Εργαλεία", "flag": "Σημαία", "locked": "Κλειδωμένο", - "bookmark_instructions": "Click here to return to the last read post in this thread.", + "bookmark_instructions": "Click here to return to the last unread post in this thread.", "flag_title": "Επισήμανση αυτής της δημοσίευσης για συντονισμό", "flag_success": "Αυτή η δημοσίευση έχει επισημανθεί για συντονισμό.", "deleted_message": "Το θέμα αυτό έχει διαγραφεί. Μόνο οι χρήστες με δικαιώματα διαχειριστή θεμάτων μπορούν να το δουν.", diff --git a/public/language/en@pirate/topic.json b/public/language/en@pirate/topic.json index bdf6d77f91..c7ce76e07b 100644 --- a/public/language/en@pirate/topic.json +++ b/public/language/en@pirate/topic.json @@ -26,7 +26,7 @@ "tools": "Tools", "flag": "Flag", "locked": "Locked", - "bookmark_instructions": "Click here to return to the last read post in this thread.", + "bookmark_instructions": "Click here to return to the last unread post in this thread.", "flag_title": "Flag this post for moderation", "flag_success": "This post has been flagged for moderation.", "deleted_message": "This topic has been deleted. Only users with topic management privileges can see it.", diff --git a/public/language/en_US/topic.json b/public/language/en_US/topic.json index bdf6d77f91..c7ce76e07b 100644 --- a/public/language/en_US/topic.json +++ b/public/language/en_US/topic.json @@ -26,7 +26,7 @@ "tools": "Tools", "flag": "Flag", "locked": "Locked", - "bookmark_instructions": "Click here to return to the last read post in this thread.", + "bookmark_instructions": "Click here to return to the last unread post in this thread.", "flag_title": "Flag this post for moderation", "flag_success": "This post has been flagged for moderation.", "deleted_message": "This topic has been deleted. Only users with topic management privileges can see it.", diff --git a/public/language/fi/topic.json b/public/language/fi/topic.json index ce37bb1954..37b9b98e80 100644 --- a/public/language/fi/topic.json +++ b/public/language/fi/topic.json @@ -26,7 +26,7 @@ "tools": "Työkalut", "flag": "Ilmianna", "locked": "Lukittu", - "bookmark_instructions": "Click here to return to the last read post in this thread.", + "bookmark_instructions": "Click here to return to the last unread post in this thread.", "flag_title": "Ilmianna tämä viesti moderaattoreille", "flag_success": "Tämä viesti ilmiannettiin moderaattoreille.", "deleted_message": "Tämä aihe on poistettu. Vain käyttäjät, joilla on aiheen hallintaoikeudet, voivat nähdä sen.", diff --git a/public/language/hu/topic.json b/public/language/hu/topic.json index be4895f558..189f065bde 100644 --- a/public/language/hu/topic.json +++ b/public/language/hu/topic.json @@ -26,7 +26,7 @@ "tools": "Eszközök", "flag": "Jelentés", "locked": "Locked", - "bookmark_instructions": "Click here to return to the last read post in this thread.", + "bookmark_instructions": "Click here to return to the last unread post in this thread.", "flag_title": "A hozzászólás jelentése a moderátoroknál", "flag_success": "This post has been flagged for moderation.", "deleted_message": "This topic has been deleted. Only users with topic management privileges can see it.", diff --git a/public/language/id/topic.json b/public/language/id/topic.json index 07a4b79bcd..6ba52cacce 100644 --- a/public/language/id/topic.json +++ b/public/language/id/topic.json @@ -26,7 +26,7 @@ "tools": "Perangkat", "flag": "Tandai", "locked": "Terkunci", - "bookmark_instructions": "Click here to return to the last read post in this thread.", + "bookmark_instructions": "Click here to return to the last unread post in this thread.", "flag_title": "Tandai posting ini untuk moderasi", "flag_success": "Posting ini telah ditandai untuk moderasi", "deleted_message": "Topik ini telah dihapus. Hanya pengguna dengan hak manajemen topik yang dapat melihatnya.", diff --git a/public/language/lt/topic.json b/public/language/lt/topic.json index d6094a6e83..a12bdd4c4e 100644 --- a/public/language/lt/topic.json +++ b/public/language/lt/topic.json @@ -26,7 +26,7 @@ "tools": "Įrankiai", "flag": "Pažymėti", "locked": "Užrakinta", - "bookmark_instructions": "Click here to return to the last read post in this thread.", + "bookmark_instructions": "Click here to return to the last unread post in this thread.", "flag_title": "Pažymėti ši pranešimą moderatoriams", "flag_success": "Šis pranešimas buvo pažymėtas moderatorių patikrinimui.", "deleted_message": "Ši tema buvo ištrinta. Tik Vartotojai su temos redagavimo privilegijomis gali matyti ja", diff --git a/public/language/ro/topic.json b/public/language/ro/topic.json index e67e9d7cbf..5503fa8c3d 100644 --- a/public/language/ro/topic.json +++ b/public/language/ro/topic.json @@ -26,7 +26,7 @@ "tools": "Unelte", "flag": "Semnalizează", "locked": "Închis", - "bookmark_instructions": "Click here to return to the last read post in this thread.", + "bookmark_instructions": "Click here to return to the last unread post in this thread.", "flag_title": "Semnalizează acest mesaj pentru moderare", "flag_success": "Acest mesaj a fost semnalizat pentru moderare.", "deleted_message": "Acest subiect a fost șters. Doar utilizatorii cu privilegii pentru moderarea subiectelor îl poate vedea.", diff --git a/public/language/rw/topic.json b/public/language/rw/topic.json index 8640719f95..81574d5241 100644 --- a/public/language/rw/topic.json +++ b/public/language/rw/topic.json @@ -26,7 +26,7 @@ "tools": "Ibikoresho", "flag": "Tambikana", "locked": "Birafungiranye", - "bookmark_instructions": "Click here to return to the last read post in this thread.", + "bookmark_instructions": "Click here to return to the last unread post in this thread.", "flag_title": "Bimenyeshe ubuyobozi", "flag_success": "Bimaze kumenyeshwa ubuyobozi ngo bikurikiranwe. ", "deleted_message": "Iki kiganiro cyamaze gukurwaho. Abantu babifitiye uburenganzira ni bo bonyine bashobora kukibona. ", diff --git a/public/language/sc/topic.json b/public/language/sc/topic.json index 074062ecb6..1f58d8582d 100644 --- a/public/language/sc/topic.json +++ b/public/language/sc/topic.json @@ -26,7 +26,7 @@ "tools": "Ainas", "flag": "Signala", "locked": "Locked", - "bookmark_instructions": "Click here to return to the last read post in this thread.", + "bookmark_instructions": "Click here to return to the last unread post in this thread.", "flag_title": "Signala custu arresonu pro sa moderatzione", "flag_success": "This post has been flagged for moderation.", "deleted_message": "This topic has been deleted. Only users with topic management privileges can see it.", diff --git a/public/language/sk/topic.json b/public/language/sk/topic.json index df1ecdd198..39f4ca03d8 100644 --- a/public/language/sk/topic.json +++ b/public/language/sk/topic.json @@ -26,7 +26,7 @@ "tools": "Nástroje", "flag": "Označiť", "locked": "Locked", - "bookmark_instructions": "Click here to return to the last read post in this thread.", + "bookmark_instructions": "Click here to return to the last unread post in this thread.", "flag_title": "Označiť príspevok pre moderáciu", "flag_success": "Tento príspevok bol označený na úpravu. ", "deleted_message": "This topic has been deleted. Only users with topic management privileges can see it.", diff --git a/public/language/sl/topic.json b/public/language/sl/topic.json index 705f9564ec..503f7ee250 100644 --- a/public/language/sl/topic.json +++ b/public/language/sl/topic.json @@ -26,7 +26,7 @@ "tools": "Orodja", "flag": "Prijavi", "locked": "Zaklenjeno", - "bookmark_instructions": "Click here to return to the last read post in this thread.", + "bookmark_instructions": "Click here to return to the last unread post in this thread.", "flag_title": "Prijavi to objavo v pregled administratorju", "flag_success": "Ta objava je bila prijavljena v pregled administratorju.", "deleted_message": "Ta tema je bila izbrisana. Le uporabniki s pravicami teme jo lahko vidijo.", diff --git a/public/language/sr/topic.json b/public/language/sr/topic.json index a5ae516c6f..37e042c18f 100644 --- a/public/language/sr/topic.json +++ b/public/language/sr/topic.json @@ -26,7 +26,7 @@ "tools": "Алатке", "flag": "Означи", "locked": "Закључан", - "bookmark_instructions": "Click here to return to the last read post in this thread.", + "bookmark_instructions": "Click here to return to the last unread post in this thread.", "flag_title": "Flag this post for moderation", "flag_success": "This post has been flagged for moderation.", "deleted_message": "This topic has been deleted. Only users with topic management privileges can see it.", diff --git a/public/language/th/topic.json b/public/language/th/topic.json index 7ad792070d..19cecadf9d 100644 --- a/public/language/th/topic.json +++ b/public/language/th/topic.json @@ -26,7 +26,7 @@ "tools": "เครื่องมือ", "flag": "ปักธง", "locked": "Locked", - "bookmark_instructions": "Click here to return to the last read post in this thread.", + "bookmark_instructions": "Click here to return to the last unread post in this thread.", "flag_title": "ปักธงโพสต์นี้เพื่อดำเนินการ", "flag_success": "This post has been flagged for moderation.", "deleted_message": "Topic นี้ถูกลบไปแล้ว เฉพาะผู้ใช้งานที่มีสิทธิ์ในการจัดการ Topic เท่านั้นที่จะมีสิทธิ์ในการเข้าชม", diff --git a/public/language/zh_TW/topic.json b/public/language/zh_TW/topic.json index 4b344c6a31..62f48e9523 100644 --- a/public/language/zh_TW/topic.json +++ b/public/language/zh_TW/topic.json @@ -26,7 +26,7 @@ "tools": "工具", "flag": "檢舉", "locked": "已鎖定", - "bookmark_instructions": "Click here to return to the last read post in this thread.", + "bookmark_instructions": "Click here to return to the last unread post in this thread.", "flag_title": "檢舉這篇文章, 交給仲裁者來審閱.", "flag_success": "這文章已經被檢舉要求仲裁.", "deleted_message": "此主題已被刪除。只有具有主題管理權限的用戶才能看到它。", From 89aa06526dd8b06e8c0268aca00571364118b97c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Wed, 23 Mar 2016 00:05:07 +0200 Subject: [PATCH 22/81] fix indent --- src/privileges/topics.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/privileges/topics.js b/src/privileges/topics.js index 6cc66483e1..83e635fde9 100644 --- a/src/privileges/topics.js +++ b/src/privileges/topics.js @@ -37,7 +37,7 @@ module.exports = function(privileges) { var disabled = parseInt(results.disabled, 10) === 1; var locked = parseInt(topic.locked, 10) === 1; - var isAdminOrMod = results.isAdministrator || results.isModerator; + var isAdminOrMod = results.isAdministrator || results.isModerator; var editable = isAdminOrMod; var deletable = isAdminOrMod || results.isOwner; From 969e7fdbbe339315ba3487b28f880f401a9020e8 Mon Sep 17 00:00:00 2001 From: Ben Lubar Date: Tue, 22 Mar 2016 18:40:42 -0500 Subject: [PATCH 23/81] include bookmarks with topic lists --- src/topics.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/topics.js b/src/topics.js index ea9ac41830..4fe894145b 100644 --- a/src/topics.js +++ b/src/topics.js @@ -131,6 +131,14 @@ var social = require('./social'); hasRead: function(next) { Topics.hasReadTopics(tids, uid, next); }, + bookmarks: function(next) { + if (!parseInt(uid, 10)) { + return next(null, tids.map(function() { + return null; + })); + } + Topics.getUserBookmarks(tids, uid, next); + }, teasers: function(next) { Topics.getTeasers(topics, next); }, @@ -155,6 +163,7 @@ var social = require('./social'); topics[i].locked = parseInt(topics[i].locked, 10) === 1; topics[i].deleted = parseInt(topics[i].deleted, 10) === 1; topics[i].unread = !results.hasRead[i]; + topics[i].bookmark = results.bookmarks[i]; topics[i].unreplied = !topics[i].teaser; } } @@ -292,6 +301,12 @@ var social = require('./social'); db.sortedSetScore('tid:' + tid + ':bookmarks', uid, callback); }; + Topics.getUserBookmarks = function(tids, uid, callback) { + db.sortedSetsScore(tids.map(function(tid) { + return 'tid:' + tid + ':bookmarks'; + }), uid, callback); + }; + Topics.setUserBookmark = function(tid, uid, index, callback) { db.sortedSetAdd('tid:' + tid + ':bookmarks', index, uid, callback); }; From 1d9ff2bc7016d16e1f91d390bb7e4a620d5d96dc Mon Sep 17 00:00:00 2001 From: Ben Lubar Date: Tue, 22 Mar 2016 19:51:31 -0500 Subject: [PATCH 24/81] save slug correctly on edit --- src/posts/edit.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/posts/edit.js b/src/posts/edit.js index d4c3a3c732..fece8aa640 100644 --- a/src/posts/edit.js +++ b/src/posts/edit.js @@ -118,7 +118,7 @@ module.exports = function(Posts) { if (title) { topicData.title = title; - topicData.slug = tid + '/' + utils.slugify(title); + topicData.slug = tid + '/' + (utils.slugify(title) || 'topic'); } if (data.topic_thumb) { From c7cfe45d0b408a2991efd3bbd05b845e964cc345 Mon Sep 17 00:00:00 2001 From: Ben Lubar Date: Tue, 22 Mar 2016 19:54:27 -0500 Subject: [PATCH 25/81] fix double-URL-encoding causing redirect loops --- src/controllers/category.js | 2 +- src/controllers/topics.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/controllers/category.js b/src/controllers/category.js index e3adde496f..f80ad122a7 100644 --- a/src/controllers/category.js +++ b/src/controllers/category.js @@ -52,7 +52,7 @@ categoryController.get = function(req, res, callback) { } if (!res.locals.isAPI && (!req.params.slug || results.categoryData.slug !== cid + '/' + req.params.slug) && (results.categoryData.slug && results.categoryData.slug !== cid + '/')) { - return helpers.redirect(res, '/category/' + encodeURI(results.categoryData.slug)); + return helpers.redirect(res, '/category/' + results.categoryData.slug); } var settings = results.userSettings; diff --git a/src/controllers/topics.js b/src/controllers/topics.js index cb30caf4d3..c3c2847778 100644 --- a/src/controllers/topics.js +++ b/src/controllers/topics.js @@ -55,7 +55,7 @@ topicsController.get = function(req, res, callback) { } if (!res.locals.isAPI && (!req.params.slug || results.topic.slug !== tid + '/' + req.params.slug) && (results.topic.slug && results.topic.slug !== tid + '/')) { - var url = '/topic/' + encodeURI(results.topic.slug); + var url = '/topic/' + results.topic.slug; if (req.params.post_index){ url += '/'+req.params.post_index; } From d79b30ad274c73414974baab5157db58430483fd Mon Sep 17 00:00:00 2001 From: barisusakli Date: Wed, 23 Mar 2016 10:01:40 +0200 Subject: [PATCH 26/81] moved uid check to function --- src/topics.js | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/topics.js b/src/topics.js index 4fe894145b..1541bd3fbb 100644 --- a/src/topics.js +++ b/src/topics.js @@ -132,11 +132,6 @@ var social = require('./social'); Topics.hasReadTopics(tids, uid, next); }, bookmarks: function(next) { - if (!parseInt(uid, 10)) { - return next(null, tids.map(function() { - return null; - })); - } Topics.getUserBookmarks(tids, uid, next); }, teasers: function(next) { @@ -302,6 +297,11 @@ var social = require('./social'); }; Topics.getUserBookmarks = function(tids, uid, callback) { + if (!parseInt(uid, 10)) { + return callback(null, tids.map(function() { + return null; + })); + } db.sortedSetsScore(tids.map(function(tid) { return 'tid:' + tid + ':bookmarks'; }), uid, callback); From bfd6d1c0d16e57aba13c8b28b31245174c36425d Mon Sep 17 00:00:00 2001 From: barisusakli Date: Wed, 23 Mar 2016 10:04:31 +0200 Subject: [PATCH 27/81] up persona --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d442a1d33c..bc264797c3 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "nodebb-plugin-spam-be-gone": "0.4.6", "nodebb-rewards-essentials": "0.0.8", "nodebb-theme-lavender": "3.0.9", - "nodebb-theme-persona": "4.0.107", + "nodebb-theme-persona": "4.0.108", "nodebb-theme-vanilla": "5.0.58", "nodebb-widget-essentials": "2.0.8", "nodemailer": "2.0.0", From 56ef1e9869a4a9fb316d3d22bf617eb28d944b3b Mon Sep 17 00:00:00 2001 From: barisusakli Date: Wed, 23 Mar 2016 10:10:24 +0200 Subject: [PATCH 28/81] closes #4444 --- public/src/modules/navigator.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/src/modules/navigator.js b/public/src/modules/navigator.js index b17db23a14..3ac5fc16e2 100644 --- a/public/src/modules/navigator.js +++ b/public/src/modules/navigator.js @@ -225,7 +225,7 @@ define('navigator', ['forum/pagination', 'components'], function(pagination, com scrollTo.parents('[component="post"]').addClass('highlight'); setTimeout(function() { scrollTo.parents('[component="post"]').removeClass('highlight'); - }, 3000); + }, 10000); } } From 46de2ca134f00615bbbdb59cf5052fa00276f458 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Wed, 23 Mar 2016 10:21:57 +0200 Subject: [PATCH 29/81] closes #4441 --- src/topics/teaser.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/topics/teaser.js b/src/topics/teaser.js index c772b271d4..5d730de74d 100644 --- a/src/topics/teaser.js +++ b/src/topics/teaser.js @@ -74,7 +74,7 @@ module.exports = function(Topics) { tidToPost[topic.tid].index = meta.config.teaserPost === 'first' ? 1 : counts[index]; if (tidToPost[topic.tid].content) { var s = S(tidToPost[topic.tid].content); - tidToPost[topic.tid].content = s.stripTags.apply(s, utils.stripTags).s; + tidToPost[topic.tid].content = s.stripTags.apply(s, utils.stripTags.concat(['img'])).s; } } return tidToPost[topic.tid]; From 91efab3c6d25e21a0f7a0a3a0efc6a6be0740e3c Mon Sep 17 00:00:00 2001 From: barisusakli Date: Wed, 23 Mar 2016 11:17:17 +0200 Subject: [PATCH 30/81] closes #4437 --- src/meta/templates.js | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) diff --git a/src/meta/templates.js b/src/meta/templates.js index 04d9d31009..88578b235e 100644 --- a/src/meta/templates.js +++ b/src/meta/templates.js @@ -21,10 +21,10 @@ Templates.compile = function(callback) { if (nconf.get('isPrimary') === 'false' || fromFile.match('tpl')) { if (fromFile.match('tpl')) { + emitter.emit('templates:compiled'); winston.info('[minifier] Compiling templates skipped'); } - emitter.emit('templates:compiled'); return callback(); } @@ -48,20 +48,28 @@ function getBaseTemplates(theme) { } function preparePaths(baseTemplatesPaths, callback) { - var coreTemplatesPath = nconf.get('core_templates_path'), - viewsPath = nconf.get('views_dir'); + var coreTemplatesPath = nconf.get('core_templates_path'); + var viewsPath = nconf.get('views_dir'); async.waterfall([ - async.apply(plugins.fireHook, 'static:templates.precompile', {}), - async.apply(plugins.getTemplates) + function (next) { + rimraf(viewsPath, next); + }, + function (next) { + mkdirp(viewsPath, next); + }, + function(viewsPath, next) { + plugins.fireHook('static:templates.precompile', {}, next); + }, + function(next) { + plugins.getTemplates(next); + } ], function(err, pluginTemplates) { if (err) { return callback(err); } winston.verbose('[meta/templates] Compiling templates'); - rimraf.sync(viewsPath); - mkdirp.sync(viewsPath); async.parallel({ coreTpls: function(next) { @@ -111,7 +119,7 @@ function compile(callback) { var themeConfig = require(nconf.get('theme_config')), baseTemplatesPaths = themeConfig.baseTheme ? getBaseTemplates(themeConfig.baseTheme) : [nconf.get('base_templates_path')], viewsPath = nconf.get('views_dir'); - + preparePaths(baseTemplatesPaths, function(err, paths) { if (err) { From 7ab55b0e95cbb69eb0e2175319670a2f4e7a7342 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Wed, 23 Mar 2016 12:19:29 +0200 Subject: [PATCH 31/81] closes #4392 --- src/controllers/uploads.js | 79 +++++++++++++++++++------------------- 1 file changed, 39 insertions(+), 40 deletions(-) diff --git a/src/controllers/uploads.js b/src/controllers/uploads.js index 8dff27b47c..59253c5666 100644 --- a/src/controllers/uploads.js +++ b/src/controllers/uploads.js @@ -45,11 +45,26 @@ uploadsController.upload = function(req, res, filesIterator, next) { uploadsController.uploadPost = function(req, res, next) { uploadsController.upload(req, res, function(uploadedFile, next) { - if (uploadedFile.type.match(/image./)) { - uploadImage(req.uid, uploadedFile, next); - } else { - uploadFile(req.uid, uploadedFile, next); + var isImage = uploadedFile.type.match(/image./); + if (isImage && plugins.hasListeners('filter:uploadImage')) { + return plugins.fireHook('filter:uploadImage', {image: uploadedFile, uid: req.uid}, next); } + + async.waterfall([ + function(next) { + if (isImage) { + file.isFileTypeAllowed(uploadedFile.path, next); + } else { + next(); + } + }, + function (next) { + if (parseInt(meta.config.allowFileUploads, 10) !== 1) { + return next(new Error('[[error:uploads-are-disabled]]')); + } + uploadFile(req.uid, uploadedFile, next); + } + ], next); }, next); }; @@ -65,22 +80,27 @@ uploadsController.uploadThumb = function(req, res, next) { return next(err); } - if (uploadedFile.type.match(/image./)) { - var size = parseInt(meta.config.topicThumbSize, 10) || 120; - image.resizeImage({ - path: uploadedFile.path, - extension: path.extname(uploadedFile.name), - width: size, - height: size - }, function(err) { - if (err) { - return next(err); - } - uploadImage(req.uid, uploadedFile, next); - }); - } else { - next(new Error('[[error:invalid-file]]')); + if (!uploadedFile.type.match(/image./)) { + return next(new Error('[[error:invalid-file]]')); } + + var size = parseInt(meta.config.topicThumbSize, 10) || 120; + image.resizeImage({ + path: uploadedFile.path, + extension: path.extname(uploadedFile.name), + width: size, + height: size + }, function(err) { + if (err) { + return next(err); + } + + if (plugins.hasListeners('filter:uploadImage')) { + return plugins.fireHook('filter:uploadImage', {image: uploadedFile, uid: req.uid}, next); + } + + uploadFile(req.uid, uploadedFile, next); + }); }); }, next); }; @@ -102,32 +122,11 @@ uploadsController.uploadGroupCover = function(uid, uploadedFile, callback) { }); }; -function uploadImage(uid, image, callback) { - if (plugins.hasListeners('filter:uploadImage')) { - return plugins.fireHook('filter:uploadImage', {image: image, uid: uid}, callback); - } - - file.isFileTypeAllowed(image.path, function(err) { - if (err) { - return callback(err); - } - if (parseInt(meta.config.allowFileUploads, 10)) { - uploadFile(uid, image, callback); - } else { - callback(new Error('[[error:uploads-are-disabled]]')); - } - }); -} - function uploadFile(uid, uploadedFile, callback) { if (plugins.hasListeners('filter:uploadFile')) { return plugins.fireHook('filter:uploadFile', {file: uploadedFile, uid: uid}, callback); } - if (parseInt(meta.config.allowFileUploads, 10) !== 1) { - return callback(new Error('[[error:uploads-are-disabled]]')); - } - if (!uploadedFile) { return callback(new Error('[[error:invalid-file]]')); } From 71cd6b39d2926e844f81aa260bd82b54a0a39e52 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Wed, 23 Mar 2016 12:21:38 +0200 Subject: [PATCH 32/81] up composer --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bc264797c3..dad104ab05 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "mongodb": "~2.1.3", "morgan": "^1.3.2", "nconf": "~0.8.2", - "nodebb-plugin-composer-default": "3.0.12", + "nodebb-plugin-composer-default": "3.0.13", "nodebb-plugin-dbsearch": "1.0.1", "nodebb-plugin-emoji-extended": "1.0.3", "nodebb-plugin-markdown": "4.0.17", From 5d77e37a3c21fa16b6f6ba29a789c59389d63b7d Mon Sep 17 00:00:00 2001 From: psychobunny Date: Wed, 23 Mar 2016 09:14:35 -0400 Subject: [PATCH 33/81] closes #4403 --- public/src/client/topic/postTools.js | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/public/src/client/topic/postTools.js b/public/src/client/topic/postTools.js index 101df3c646..b16a05a067 100644 --- a/public/src/client/topic/postTools.js +++ b/public/src/client/topic/postTools.js @@ -64,17 +64,21 @@ define('forum/topic/postTools', ['share', 'navigator', 'components', 'translator }; function addVoteHandler() { - components.get('topic').on('mouseenter', '[data-pid] [component="post/vote-count"]', function() { - loadDataAndCreateTooltip($(this).parent()); - }); + components.get('topic').on('mouseenter', '[data-pid] [component="post/vote-count"]', loadDataAndCreateTooltip); } - function loadDataAndCreateTooltip(el) { - var pid = el.parents('[data-pid]').attr('data-pid'); + function loadDataAndCreateTooltip() { + var $this = $(this), + el = $this.parent(), + pid = el.parents('[data-pid]').attr('data-pid'); + + $this.off('mouseenter', loadDataAndCreateTooltip); socket.emit('posts.getUpvoters', [pid], function(err, data) { if (!err && data.length) { createTooltip(el, data[0]); } + + $this.on('mouseenter', loadDataAndCreateTooltip); }); } From 09415d435a0c2aede74f445a5c592dc6ca243bd9 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Wed, 23 Mar 2016 18:29:46 +0200 Subject: [PATCH 34/81] up persona --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index dad104ab05..543d01efff 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "nodebb-plugin-spam-be-gone": "0.4.6", "nodebb-rewards-essentials": "0.0.8", "nodebb-theme-lavender": "3.0.9", - "nodebb-theme-persona": "4.0.108", + "nodebb-theme-persona": "4.0.109", "nodebb-theme-vanilla": "5.0.58", "nodebb-widget-essentials": "2.0.8", "nodemailer": "2.0.0", From 493816476e7dfacab9aff1a754df16bc840a563f Mon Sep 17 00:00:00 2001 From: psychobunny Date: Wed, 23 Mar 2016 12:48:46 -0400 Subject: [PATCH 35/81] closes https://github.com/NodeBB/nodebb-theme-persona/issues/262 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 543d01efff..23d231eea4 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "mongodb": "~2.1.3", "morgan": "^1.3.2", "nconf": "~0.8.2", - "nodebb-plugin-composer-default": "3.0.13", + "nodebb-plugin-composer-default": "3.0.14", "nodebb-plugin-dbsearch": "1.0.1", "nodebb-plugin-emoji-extended": "1.0.3", "nodebb-plugin-markdown": "4.0.17", @@ -53,7 +53,7 @@ "nodebb-plugin-spam-be-gone": "0.4.6", "nodebb-rewards-essentials": "0.0.8", "nodebb-theme-lavender": "3.0.9", - "nodebb-theme-persona": "4.0.109", + "nodebb-theme-persona": "4.0.110", "nodebb-theme-vanilla": "5.0.58", "nodebb-widget-essentials": "2.0.8", "nodemailer": "2.0.0", From 0c1376c884fd3eee181ce9bcafe910b7a0dfee30 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Wed, 23 Mar 2016 13:08:15 -0400 Subject: [PATCH 36/81] closes #4390 --- install/data/navigation.json | 4 +--- public/src/modules/helpers.js | 2 +- src/views/admin/general/navigation.tpl | 9 +++++++++ 3 files changed, 11 insertions(+), 4 deletions(-) diff --git a/install/data/navigation.json b/install/data/navigation.json index 5956c6b05f..0ec72805de 100644 --- a/install/data/navigation.json +++ b/install/data/navigation.json @@ -79,9 +79,7 @@ "textClass": "visible-xs-inline", "text": "\\[\\[global:header.search\\]\\]", "properties": { - "installed": { - "search": true - } + "searchInstalled": true } } ] \ No newline at end of file diff --git a/public/src/modules/helpers.js b/public/src/modules/helpers.js index 8d6b213a1d..dd15d0dab6 100644 --- a/public/src/modules/helpers.js +++ b/public/src/modules/helpers.js @@ -20,7 +20,7 @@ if ((properties.loggedIn && !data.config.loggedIn) || (properties.globalMod && !data.isGlobalMod && !data.isAdmin) || (properties.adminOnly && !data.isAdmin) || - (properties.installed && properties.installed.search && !data.searchEnabled)) { + (properties.searchInstalled && !data.searchEnabled)) { return false; } } diff --git a/src/views/admin/general/navigation.tpl b/src/views/admin/general/navigation.tpl index 116a0fd0f5..c36f08a693 100644 --- a/src/views/admin/general/navigation.tpl +++ b/src/views/admin/general/navigation.tpl @@ -84,6 +84,15 @@
+ Installed Plugins Required: + +
+ +
+ From f55b26282a731e04b58034350303e4773d2d0c9a Mon Sep 17 00:00:00 2001 From: barisusakli Date: Wed, 23 Mar 2016 19:24:02 +0200 Subject: [PATCH 37/81] added category image --- src/topics.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/topics.js b/src/topics.js index 1541bd3fbb..385d3ae558 100644 --- a/src/topics.js +++ b/src/topics.js @@ -126,7 +126,7 @@ var social = require('./social'); user.getUsersFields(uids, ['uid', 'username', 'fullname', 'userslug', 'reputation', 'postcount', 'picture', 'signature', 'banned', 'status'], next); }, categories: function(next) { - categories.getCategoriesFields(cids, ['cid', 'name', 'slug', 'icon', 'bgColor', 'color', 'disabled'], next); + categories.getCategoriesFields(cids, ['cid', 'name', 'slug', 'icon', 'image', 'bgColor', 'color', 'disabled'], next); }, hasRead: function(next) { Topics.hasReadTopics(tids, uid, next); From c5e62f9a5844d206f5551363a073176d6126f1e6 Mon Sep 17 00:00:00 2001 From: pichalite Date: Wed, 23 Mar 2016 21:41:04 +0000 Subject: [PATCH 38/81] fixes #4454 --- src/middleware/header.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/middleware/header.js b/src/middleware/header.js index 5d981ffeda..c1ed6d60c2 100644 --- a/src/middleware/header.js +++ b/src/middleware/header.js @@ -107,7 +107,7 @@ module.exports = function(app, middleware) { results.user.uid = parseInt(results.user.uid, 10); results.user['email:confirmed'] = parseInt(results.user['email:confirmed'], 10) === 1; - if (res.locals.config.bootswatchSkin !== 'default') { + if (parseInt(meta.config.disableCustomUserSkins, 10) !== 1 && res.locals.config.bootswatchSkin !== 'default') { templateValues.bootswatchCSS = '//maxcdn.bootstrapcdn.com/bootswatch/latest/' + res.locals.config.bootswatchSkin + '/bootstrap.min.css'; } From 6aa0f8eb8a22b4354eab6fb2c6b1eb7e1240aa28 Mon Sep 17 00:00:00 2001 From: boomzillawtf Date: Wed, 23 Mar 2016 21:37:48 -0400 Subject: [PATCH 39/81] fix #4452: default to scroll to my post --- public/src/client/topic/posts.js | 8 ++++---- src/user/settings.js | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/public/src/client/topic/posts.js b/public/src/client/topic/posts.js index dbe2eddf16..3256f4d2f0 100644 --- a/public/src/client/topic/posts.js +++ b/public/src/client/topic/posts.js @@ -50,7 +50,7 @@ define('forum/topic/posts', [ function onNewPostPagination(data) { function scrollToPost() { - if (config.scrollToMyPost) { + if (ajaxify.data.scrollToMyPost) { scrollToPostIfSelf(data.posts[0]); } } @@ -64,7 +64,7 @@ define('forum/topic/posts', [ if (isPostVisible) { createNewPosts(data, components.get('post').not('[data-index=0]'), direction, scrollToPost); - } else if (config.scrollToMyPost && parseInt(posts[0].uid, 10) === parseInt(app.user.uid, 10)) { + } else if (ajaxify.data.scrollToMyPost && parseInt(posts[0].uid, 10) === parseInt(app.user.uid, 10)) { pagination.loadPage(ajaxify.data.pagination.pageCount, scrollToPost); } } @@ -81,7 +81,7 @@ define('forum/topic/posts', [ } function scrollToPostIfSelf(post) { - if (!config.scrollToMyPost) { + if (!ajaxify.data.scrollToMyPost) { return; } var isSelfPost = parseInt(post.uid, 10) === parseInt(app.user.uid, 10); @@ -265,4 +265,4 @@ define('forum/topic/posts', [ return Posts; -}); \ No newline at end of file +}); diff --git a/src/user/settings.js b/src/user/settings.js index fc72342bf9..ee8bcb0189 100644 --- a/src/user/settings.js +++ b/src/user/settings.js @@ -76,7 +76,7 @@ module.exports = function(User) { settings.restrictChat = parseInt(getSetting(settings, 'restrictChat', 0), 10) === 1; settings.topicSearchEnabled = parseInt(getSetting(settings, 'topicSearchEnabled', 0), 10) === 1; settings.bootswatchSkin = settings.bootswatchSkin || 'default'; - settings.scrollToMyPost = parseInt(getSetting(settings, 'scrollToMyPost', 1), 10) ===1; + settings.scrollToMyPost = parseInt(getSetting(settings, 'scrollToMyPost', 1), 10) != 0; callback(null, settings); }); From 38c560019f73590f8cc35f0bd81d4f23412034a2 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 24 Mar 2016 12:53:29 +0200 Subject: [PATCH 40/81] #4403 --- public/src/client/topic/postTools.js | 35 +++++++++++++++++++--------- 1 file changed, 24 insertions(+), 11 deletions(-) diff --git a/public/src/client/topic/postTools.js b/public/src/client/topic/postTools.js index b16a05a067..3fa13e22e6 100644 --- a/public/src/client/topic/postTools.js +++ b/public/src/client/topic/postTools.js @@ -65,30 +65,43 @@ define('forum/topic/postTools', ['share', 'navigator', 'components', 'translator function addVoteHandler() { components.get('topic').on('mouseenter', '[data-pid] [component="post/vote-count"]', loadDataAndCreateTooltip); + components.get('topic').on('mouseout', '[data-pid] [component="post/vote-count"]', function() { + var el = $(this).parent(); + el.on('shown.bs.tooltip', function() { + $('.tooltip').tooltip('destroy'); + el.off('shown.bs.tooltip'); + }); + + $('.tooltip').tooltip('destroy'); + }); } - function loadDataAndCreateTooltip() { - var $this = $(this), - el = $this.parent(), - pid = el.parents('[data-pid]').attr('data-pid'); + function loadDataAndCreateTooltip(e) { + e.stopPropagation(); + var $this = $(this); + var el = $this.parent(); + var pid = el.parents('[data-pid]').attr('data-pid'); + + $('.tooltip').tooltip('destroy'); $this.off('mouseenter', loadDataAndCreateTooltip); + socket.emit('posts.getUpvoters', [pid], function(err, data) { - if (!err && data.length) { - createTooltip(el, data[0]); + if (err) { + return app.alertError(err.message); } - $this.on('mouseenter', loadDataAndCreateTooltip); + if (data.length) { + createTooltip(el, data[0]); + } + $this.off('mouseenter').on('mouseenter', loadDataAndCreateTooltip); }); + return false; } function createTooltip(el, data) { function doCreateTooltip(title) { el.attr('title', title).tooltip('fixTitle').tooltip('show'); - el.on('hidden.bs.tooltip', function() { - el.tooltip('destroy'); - el.off('hidden.bs.tooltip'); - }); } var usernames = data.usernames; if (!usernames.length) { From 76fcc9ec35b9c5b57ed325c05bd730db226aeae3 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 24 Mar 2016 12:53:44 +0200 Subject: [PATCH 41/81] this is fine --- src/user/settings.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/user/settings.js b/src/user/settings.js index ee8bcb0189..04e23e1152 100644 --- a/src/user/settings.js +++ b/src/user/settings.js @@ -76,7 +76,7 @@ module.exports = function(User) { settings.restrictChat = parseInt(getSetting(settings, 'restrictChat', 0), 10) === 1; settings.topicSearchEnabled = parseInt(getSetting(settings, 'topicSearchEnabled', 0), 10) === 1; settings.bootswatchSkin = settings.bootswatchSkin || 'default'; - settings.scrollToMyPost = parseInt(getSetting(settings, 'scrollToMyPost', 1), 10) != 0; + settings.scrollToMyPost = parseInt(getSetting(settings, 'scrollToMyPost', 1), 10) === 1; callback(null, settings); }); From c6c1e2e217e79ee0b470967093827ede8c46063a Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 24 Mar 2016 13:21:05 +0200 Subject: [PATCH 42/81] closes #4289 --- public/src/ajaxify.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index 8450f1c2ab..b72447a980 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -103,7 +103,7 @@ $(document).ready(function() { app.previousUrl = window.location.href; } - ajaxify.currentPage = url; + ajaxify.currentPage = url.split(/[?#]/)[0]; if (window.history && window.history.pushState) { window.history[!quiet ? 'pushState' : 'replaceState']({ @@ -202,7 +202,7 @@ $(document).ready(function() { e.preventDefault(); } - ajaxify.go(ajaxify.currentPage, callback, true); + ajaxify.go(ajaxify.currentPage + window.location.search + window.location.hash, callback, true); }; ajaxify.loadScript = function(tpl_url, callback) { From d7b5ede3a7eaa2e6dadc472c04d6311f6acb078b Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 24 Mar 2016 14:12:03 +0200 Subject: [PATCH 43/81] up composer --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 23d231eea4..ec505b952e 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "mongodb": "~2.1.3", "morgan": "^1.3.2", "nconf": "~0.8.2", - "nodebb-plugin-composer-default": "3.0.14", + "nodebb-plugin-composer-default": "3.0.15", "nodebb-plugin-dbsearch": "1.0.1", "nodebb-plugin-emoji-extended": "1.0.3", "nodebb-plugin-markdown": "4.0.17", From ae7dc134e3175a22ac7f97ff2822024fec3c18d6 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Thu, 24 Mar 2016 09:06:55 -0400 Subject: [PATCH 44/81] latest translations and fallbacks --- public/language/ar/error.json | 4 ++- public/language/ar/groups.json | 1 + public/language/ar/modules.json | 1 + public/language/ar/user.json | 2 ++ public/language/bg/error.json | 8 ++++-- public/language/bg/groups.json | 1 + public/language/bg/modules.json | 1 + public/language/bg/notifications.json | 2 +- public/language/bg/user.json | 2 ++ public/language/bn/error.json | 4 ++- public/language/bn/groups.json | 1 + public/language/bn/modules.json | 1 + public/language/bn/user.json | 2 ++ public/language/cs/error.json | 4 ++- public/language/cs/groups.json | 1 + public/language/cs/modules.json | 1 + public/language/cs/user.json | 2 ++ public/language/da/error.json | 4 ++- public/language/da/groups.json | 1 + public/language/da/modules.json | 1 + public/language/da/user.json | 2 ++ public/language/de/error.json | 6 ++-- public/language/de/groups.json | 3 +- public/language/de/modules.json | 3 +- public/language/de/notifications.json | 6 ++-- public/language/de/user.json | 22 ++++++++------- public/language/el/error.json | 4 ++- public/language/el/groups.json | 1 + public/language/el/modules.json | 1 + public/language/el/user.json | 2 ++ public/language/en@pirate/error.json | 4 ++- public/language/en@pirate/groups.json | 1 + public/language/en@pirate/modules.json | 1 + public/language/en@pirate/user.json | 2 ++ public/language/en_US/error.json | 4 ++- public/language/en_US/groups.json | 1 + public/language/en_US/modules.json | 1 + public/language/en_US/user.json | 2 ++ public/language/es/error.json | 4 ++- public/language/es/groups.json | 1 + public/language/es/modules.json | 1 + public/language/es/user.json | 2 ++ public/language/et/error.json | 4 ++- public/language/et/groups.json | 1 + public/language/et/modules.json | 1 + public/language/et/user.json | 2 ++ public/language/fa_IR/error.json | 4 ++- public/language/fa_IR/groups.json | 1 + public/language/fa_IR/modules.json | 1 + public/language/fa_IR/user.json | 2 ++ public/language/fi/category.json | 2 +- public/language/fi/email.json | 32 ++++++++++----------- public/language/fi/error.json | 24 ++++++++-------- public/language/fi/groups.json | 1 + public/language/fi/modules.json | 3 +- public/language/fi/notifications.json | 8 +++--- public/language/fi/pages.json | 26 ++++++++--------- public/language/fi/user.json | 2 ++ public/language/fi/users.json | 2 +- public/language/fr/error.json | 8 ++++-- public/language/fr/global.json | 8 +++--- public/language/fr/groups.json | 3 +- public/language/fr/modules.json | 1 + public/language/fr/notifications.json | 8 +++--- public/language/fr/pages.json | 4 +-- public/language/fr/topic.json | 6 ++-- public/language/fr/user.json | 8 ++++-- public/language/gl/error.json | 4 ++- public/language/gl/groups.json | 1 + public/language/gl/modules.json | 1 + public/language/gl/user.json | 2 ++ public/language/he/error.json | 4 ++- public/language/he/groups.json | 1 + public/language/he/modules.json | 1 + public/language/he/user.json | 2 ++ public/language/hu/error.json | 4 ++- public/language/hu/groups.json | 1 + public/language/hu/modules.json | 1 + public/language/hu/user.json | 2 ++ public/language/id/error.json | 4 ++- public/language/id/groups.json | 1 + public/language/id/modules.json | 1 + public/language/id/user.json | 2 ++ public/language/it/error.json | 4 ++- public/language/it/groups.json | 1 + public/language/it/modules.json | 1 + public/language/it/user.json | 2 ++ public/language/ja/error.json | 4 ++- public/language/ja/groups.json | 1 + public/language/ja/modules.json | 1 + public/language/ja/user.json | 2 ++ public/language/ko/error.json | 4 ++- public/language/ko/groups.json | 1 + public/language/ko/modules.json | 1 + public/language/ko/notifications.json | 2 +- public/language/ko/user.json | 2 ++ public/language/lt/error.json | 4 ++- public/language/lt/groups.json | 1 + public/language/lt/modules.json | 1 + public/language/lt/user.json | 2 ++ public/language/ms/error.json | 28 +++++++++--------- public/language/ms/groups.json | 1 + public/language/ms/modules.json | 3 +- public/language/ms/pages.json | 14 ++++----- public/language/ms/user.json | 2 ++ public/language/nb/error.json | 4 ++- public/language/nb/groups.json | 1 + public/language/nb/modules.json | 1 + public/language/nb/user.json | 2 ++ public/language/nl/email.json | 22 +++++++-------- public/language/nl/error.json | 36 +++++++++++++----------- public/language/nl/global.json | 18 ++++++------ public/language/nl/groups.json | 5 ++-- public/language/nl/login.json | 4 +-- public/language/nl/modules.json | 7 +++-- public/language/nl/notifications.json | 6 ++-- public/language/nl/register.json | 12 ++++---- public/language/nl/reset_password.json | 2 +- public/language/nl/search.json | 2 +- public/language/nl/success.json | 2 +- public/language/nl/topic.json | 18 ++++++------ public/language/nl/user.json | 10 ++++--- public/language/nl/users.json | 2 +- public/language/pl/error.json | 4 ++- public/language/pl/groups.json | 1 + public/language/pl/modules.json | 1 + public/language/pl/user.json | 2 ++ public/language/pt_BR/error.json | 14 +++++---- public/language/pt_BR/global.json | 8 +++--- public/language/pt_BR/groups.json | 3 +- public/language/pt_BR/modules.json | 1 + public/language/pt_BR/notifications.json | 8 +++--- public/language/pt_BR/pages.json | 8 +++--- public/language/pt_BR/topic.json | 8 +++--- public/language/pt_BR/user.json | 8 ++++-- public/language/pt_BR/users.json | 2 +- public/language/ro/error.json | 4 ++- public/language/ro/groups.json | 1 + public/language/ro/modules.json | 1 + public/language/ro/user.json | 2 ++ public/language/ru/error.json | 6 ++-- public/language/ru/global.json | 10 +++---- public/language/ru/groups.json | 3 +- public/language/ru/modules.json | 1 + public/language/ru/pages.json | 4 +-- public/language/ru/topic.json | 8 +++--- public/language/ru/user.json | 24 ++++++++-------- public/language/rw/error.json | 4 ++- public/language/rw/groups.json | 1 + public/language/rw/modules.json | 1 + public/language/rw/user.json | 2 ++ public/language/sc/error.json | 4 ++- public/language/sc/groups.json | 1 + public/language/sc/modules.json | 1 + public/language/sc/user.json | 2 ++ public/language/sk/error.json | 4 ++- public/language/sk/groups.json | 1 + public/language/sk/modules.json | 1 + public/language/sk/user.json | 2 ++ public/language/sl/error.json | 4 ++- public/language/sl/groups.json | 1 + public/language/sl/modules.json | 1 + public/language/sl/user.json | 2 ++ public/language/sr/error.json | 4 ++- public/language/sr/groups.json | 1 + public/language/sr/modules.json | 1 + public/language/sr/user.json | 2 ++ public/language/sv/error.json | 4 ++- public/language/sv/groups.json | 1 + public/language/sv/modules.json | 1 + public/language/sv/user.json | 2 ++ public/language/th/error.json | 4 ++- public/language/th/groups.json | 1 + public/language/th/modules.json | 1 + public/language/th/user.json | 2 ++ public/language/tr/error.json | 4 ++- public/language/tr/groups.json | 1 + public/language/tr/modules.json | 1 + public/language/tr/user.json | 2 ++ public/language/vi/error.json | 4 ++- public/language/vi/groups.json | 1 + public/language/vi/modules.json | 1 + public/language/vi/user.json | 2 ++ public/language/zh_CN/error.json | 14 +++++---- public/language/zh_CN/global.json | 14 ++++----- public/language/zh_CN/groups.json | 1 + public/language/zh_CN/modules.json | 1 + public/language/zh_CN/notifications.json | 8 +++--- public/language/zh_CN/pages.json | 4 +-- public/language/zh_CN/topic.json | 8 +++--- public/language/zh_CN/user.json | 14 +++++---- public/language/zh_CN/users.json | 2 +- public/language/zh_TW/error.json | 4 ++- public/language/zh_TW/groups.json | 1 + public/language/zh_TW/modules.json | 1 + public/language/zh_TW/user.json | 2 ++ 196 files changed, 533 insertions(+), 293 deletions(-) diff --git a/public/language/ar/error.json b/public/language/ar/error.json index cd567d1636..635f404c8c 100644 --- a/public/language/ar/error.json +++ b/public/language/ar/error.json @@ -27,6 +27,7 @@ "password-too-long": "Password too long", "user-banned": "المستخدم محظور", "user-too-new": "عذرا, يجب أن تنتظر 1% ثواني قبل قيامك بأول مشاركة", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "قائمة غير موجودة", "no-topic": "موضوع غير موجود", "no-post": "رد غير موجود", @@ -97,5 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/ar/groups.json b/public/language/ar/groups.json index 61c95d5799..673fba23e2 100644 --- a/public/language/ar/groups.json +++ b/public/language/ar/groups.json @@ -41,6 +41,7 @@ "details.hidden": "مخفي", "details.hidden_help": "في حالة تفعيل الخيار، لن تظهر المجموعة للعموم والإنضمام إليها سيتلزم دعوة.", "details.delete_group": "حذف المجموعة", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "تم تحديث بيانات المجموعة", "event.deleted": "تم حذف المجموعة %1", "membership.accept-invitation": "اقبل الدعوة", diff --git a/public/language/ar/modules.json b/public/language/ar/modules.json index 1c55a5c1db..1c23da87ad 100644 --- a/public/language/ar/modules.json +++ b/public/language/ar/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 يكتب رسالة...", "chat.user_has_messaged_you": "%1 أرسل لك رسالة.", "chat.see_all": "عرض كل المحادثات", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "المرجو اختيار مرسل إليه لمعاينة تاريخ الدردشات", "chat.no-users-in-room": "No users in this room", "chat.recent-chats": "آخر الدردشات", diff --git a/public/language/ar/user.json b/public/language/ar/user.json index e3c9502a93..23519da3a5 100644 --- a/public/language/ar/user.json +++ b/public/language/ar/user.json @@ -39,6 +39,7 @@ "change_username": "Change Username", "change_email": "Change Email", "edit": "تعديل", + "edit-profile": "Edit Profile", "default_picture": "Default Icon", "uploaded_picture": "الصورة المرفوعة", "upload_new_picture": "رفع صورة جديدة", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "فتح الروابط الخارجية في نافدة جديدة", "enable_topic_searching": "تفعيل خاصية البحث داخل المواضيع", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "متابعة المواضيع التي تقوم بالرد فيها", "follow_topics_you_create": "متابعة المواضيع التي تنشئها", "grouptitle": "حدد عنوان المجموعة الذي تريد عرضه", diff --git a/public/language/bg/error.json b/public/language/bg/error.json index 823de79421..e7f49c6baf 100644 --- a/public/language/bg/error.json +++ b/public/language/bg/error.json @@ -27,6 +27,7 @@ "password-too-long": "Паролата е твърде дълга", "user-banned": "Потребителят е блокиран", "user-too-new": "Съжаляваме, но трябва да изчакате поне %1 секунда/и, преди да направите първата си публикация", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Категорията не съществува", "no-topic": "Темата не съществува", "no-post": "Публикацията не съществува", @@ -60,8 +61,8 @@ "group-name-too-short": "Името на групата е твърде кратко", "group-already-exists": "Вече съществува такава група", "group-name-change-not-allowed": "Промяната на името на групата не е разрешено", - "group-already-member": "Вече членувате в тази група", - "group-not-member": "Не членувате в тази група", + "group-already-member": "Потребителят вече членува в тази група", + "group-not-member": "Потребителят не членува в тази група", "group-needs-owner": "Тази група се нуждае от поне един собственик", "group-already-invited": "Този потребител вече е бил поканен", "group-already-requested": "Вашата заявка за членство вече е била изпратена", @@ -97,5 +98,6 @@ "invite-maximum-met": "Вие сте поканили максимално позволения брой хора (%1 от %2).", "no-session-found": "Не е открита сесия за вход!", "not-in-room": "Потребителят не е в стаята", - "no-users-in-room": "Няма потребители в тази стая" + "no-users-in-room": "Няма потребители в тази стая", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/bg/groups.json b/public/language/bg/groups.json index 017239f5a0..48df626a17 100644 --- a/public/language/bg/groups.json +++ b/public/language/bg/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Скрита", "details.hidden_help": "Ако е включено, тази група няма да бъде извеждана в списъка от групи и потребителите ще трябва да бъдат поканени лично", "details.delete_group": "Изтриване на групата", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Подробностите за групата бяха обновени", "event.deleted": "Групата „%1“ беше изтрита", "membership.accept-invitation": "Приемане на поканата", diff --git a/public/language/bg/modules.json b/public/language/bg/modules.json index 1ed5cb50ef..1be800b077 100644 --- a/public/language/bg/modules.json +++ b/public/language/bg/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 пише...", "chat.user_has_messaged_you": "%1 Ви написа съобщение.", "chat.see_all": "Вижте всички разговори", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Моля, изберете получател, за да видите историята на съобщенията", "chat.no-users-in-room": "Няма потребители в тази стая", "chat.recent-chats": "Скорошни разговори", diff --git a/public/language/bg/notifications.json b/public/language/bg/notifications.json index 4a6228288d..d621942a50 100644 --- a/public/language/bg/notifications.json +++ b/public/language/bg/notifications.json @@ -30,7 +30,7 @@ "user_started_following_you_dual": "%1 и %2 започнаха да Ви следват.", "user_started_following_you_multiple": "%1 и %2 започнаха да Ви следват.", "new_register": "%1 изпрати заявка за регистрация.", - "new_register_multiple": "There are %1 registration requests awaiting review.", + "new_register_multiple": "Има %1 заявки за регистрация, които очакват да бъдат прегледани.", "email-confirmed": "Е-пощата беше потвърдена", "email-confirmed-message": "Благодарим Ви, че потвърдихте е-пощата си. Акаунтът Ви е вече напълно активиран.", "email-confirm-error-message": "Възникна проблем при потвърждаването на е-пощата Ви. Може кодът да е грешен или давността му да е изтекла.", diff --git a/public/language/bg/user.json b/public/language/bg/user.json index ea9e5c7961..ed8eab5261 100644 --- a/public/language/bg/user.json +++ b/public/language/bg/user.json @@ -39,6 +39,7 @@ "change_username": "Промяна на потребителското име", "change_email": "Промяна на е-пощата", "edit": "Редактиране", + "edit-profile": "Edit Profile", "default_picture": "Иконка по подразбиране", "uploaded_picture": "Качена снимка", "upload_new_picture": "Качване на нова снимка", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Отваряне на външните връзки в нов подпрозорец", "enable_topic_searching": "Включване на търсенето в темите", "topic_search_help": "Ако е включено, търсенето в темата ще замени стандартното поведение на браузъра при търсене в страницата и ще Ви позволи да претърсвате цялата тема, а не само това, което се вижда на екрана", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Следване на темите, на които отговаряте", "follow_topics_you_create": "Следване на темите, които създавате", "grouptitle": "Изберете заглавието на групата, което искате да се показва", diff --git a/public/language/bn/error.json b/public/language/bn/error.json index bb003ce9a0..7f363517cc 100644 --- a/public/language/bn/error.json +++ b/public/language/bn/error.json @@ -27,6 +27,7 @@ "password-too-long": "Password too long", "user-banned": "ব্যবহারকারী নিষিদ্ধ", "user-too-new": "Sorry, you are required to wait %1 second(s) before making your first post", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "বিভাগটি খুজে পাওয়া যায় নি", "no-topic": "এই টপিক নেই", "no-post": "এই পোষ্ট নেই", @@ -97,5 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/bn/groups.json b/public/language/bn/groups.json index 92cb098261..d2752a71e8 100644 --- a/public/language/bn/groups.json +++ b/public/language/bn/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Hidden", "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", "details.delete_group": "Delete Group", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Group details have been updated", "event.deleted": "The group \"%1\" has been deleted", "membership.accept-invitation": "Accept Invitation", diff --git a/public/language/bn/modules.json b/public/language/bn/modules.json index beff4cf9cb..51c65a2a6a 100644 --- a/public/language/bn/modules.json +++ b/public/language/bn/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 লিখছেন", "chat.user_has_messaged_you": "%1 আপনাকে বার্তা পাঠিয়েছেন", "chat.see_all": "See all chats", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "মেসেজ হিস্টোরী দেখতে প্রাপক নির্বাচন করুন", "chat.no-users-in-room": "No users in this room", "chat.recent-chats": "সাম্প্রতিক চ্যাটসমূহ", diff --git a/public/language/bn/user.json b/public/language/bn/user.json index b4e66060e5..9e26660f70 100644 --- a/public/language/bn/user.json +++ b/public/language/bn/user.json @@ -39,6 +39,7 @@ "change_username": "ইউজারনেম পরিবর্তন করুন", "change_email": "ইমেইল পরিবর্তন করুন", "edit": "সম্পাদনা", + "edit-profile": "Edit Profile", "default_picture": "ডিফল্ট আইকন", "uploaded_picture": "ছবি আপলোড করুন", "upload_new_picture": "নতুন ছবি আপলোড করুন", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "আউটগোয়িং লিংকগুলো নতুন ট্যাবে খুলুন", "enable_topic_searching": "In-Topic সার্চ সক্রীয় করো", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Follow topics that you reply to", "follow_topics_you_create": "Follow topics you create", "grouptitle": "Select the group title you would like to display", diff --git a/public/language/cs/error.json b/public/language/cs/error.json index 2bf902b874..dfec525151 100644 --- a/public/language/cs/error.json +++ b/public/language/cs/error.json @@ -27,6 +27,7 @@ "password-too-long": "Password too long", "user-banned": "Uživatel byl zakázán", "user-too-new": "Sorry, you are required to wait %1 second(s) before making your first post", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Kategorie neexistuje", "no-topic": "Téma neexistuje", "no-post": "Příspěvek neexistuje", @@ -97,5 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/cs/groups.json b/public/language/cs/groups.json index 2cffe0b3b0..5bfd7ed3ec 100644 --- a/public/language/cs/groups.json +++ b/public/language/cs/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Hidden", "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", "details.delete_group": "Delete Group", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Group details have been updated", "event.deleted": "The group \"%1\" has been deleted", "membership.accept-invitation": "Accept Invitation", diff --git a/public/language/cs/modules.json b/public/language/cs/modules.json index e47a5b1d83..cb37aa7539 100644 --- a/public/language/cs/modules.json +++ b/public/language/cs/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 píše ...", "chat.user_has_messaged_you": "%1 has messaged you.", "chat.see_all": "See all chats", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Please select a recipient to view chat message history", "chat.no-users-in-room": "No users in this room", "chat.recent-chats": "Recent Chats", diff --git a/public/language/cs/user.json b/public/language/cs/user.json index 9222a733e2..35fdc4db9b 100644 --- a/public/language/cs/user.json +++ b/public/language/cs/user.json @@ -39,6 +39,7 @@ "change_username": "Change Username", "change_email": "Change Email", "edit": "Upravit", + "edit-profile": "Edit Profile", "default_picture": "Default Icon", "uploaded_picture": "Nahraný obrázek", "upload_new_picture": "Nahrát nový obrázek", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Follow topics that you reply to", "follow_topics_you_create": "Follow topics you create", "grouptitle": "Select the group title you would like to display", diff --git a/public/language/da/error.json b/public/language/da/error.json index da51315fd6..148f312c98 100644 --- a/public/language/da/error.json +++ b/public/language/da/error.json @@ -27,6 +27,7 @@ "password-too-long": "Kodeord er for langt", "user-banned": "Bruger er bortvist", "user-too-new": "Beklager, du er nødt til at vente %1 sekund(er) før du opretter dit indlæg", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Kategorien eksisterer ikke", "no-topic": "Tråden eksisterer ikke", "no-post": "Indlægget eksisterer ikke", @@ -97,5 +98,6 @@ "invite-maximum-met": "Du har inviteret det maksimale antal personer (%1 ud af %2)", "no-session-found": "Ingen login session kan findes!", "not-in-room": "Bruger er ikke i rummet", - "no-users-in-room": "Ingen brugere i rummet" + "no-users-in-room": "Ingen brugere i rummet", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/da/groups.json b/public/language/da/groups.json index 4e6340ab6e..f02ec79938 100644 --- a/public/language/da/groups.json +++ b/public/language/da/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Skjult", "details.hidden_help": "Hvis aktiveret, så vil denne gruppe ikke kunne ses i gruppelisten og bruhere skal inviteres manuelt", "details.delete_group": "Slet Gruppe", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Gruppe detaljer er blevet opdateret", "event.deleted": "Gruppen \"%1\" er blevet slettet", "membership.accept-invitation": "Acceptér Invitation", diff --git a/public/language/da/modules.json b/public/language/da/modules.json index e8e62c7d66..31ea913abe 100644 --- a/public/language/da/modules.json +++ b/public/language/da/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 skriver ...", "chat.user_has_messaged_you": "1% har skrevet til dig.", "chat.see_all": "Se alle chats", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Vælg en modtager for at se beskedhistorikken", "chat.no-users-in-room": "Ingen brugere i rummet", "chat.recent-chats": "Seneste chats", diff --git a/public/language/da/user.json b/public/language/da/user.json index 1488fbf056..ebc1cba887 100644 --- a/public/language/da/user.json +++ b/public/language/da/user.json @@ -39,6 +39,7 @@ "change_username": "Ændre brugernavn", "change_email": "Ændre email", "edit": "Rediger", + "edit-profile": "Edit Profile", "default_picture": "Standard ikon", "uploaded_picture": "Upload billede", "upload_new_picture": "Upload nyt billede", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Åben udgående link i en ny tab", "enable_topic_searching": "Slå In-Topic søgning til", "topic_search_help": "Hvis slået til, så vil in-topic søgning overskrive browserens almindelige søge function og tillade dig at søge hele emnet, istedet for kun det der er vist på skærmen", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Følg emner du har skrevet indlæg i", "follow_topics_you_create": "Følg emner du opretter", "grouptitle": "Vælg gruppe titlen du gerne vil fremvise", diff --git a/public/language/de/error.json b/public/language/de/error.json index 5e8e785fd6..6c4af25efe 100644 --- a/public/language/de/error.json +++ b/public/language/de/error.json @@ -27,6 +27,7 @@ "password-too-long": "Passwort ist zu lang", "user-banned": "Benutzer ist gesperrt", "user-too-new": "Entschuldigung, du musst %1 Sekunde(n) warten, bevor du deinen ersten Beitrag schreiben kannst.", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Die Kategorie existiert nicht", "no-topic": "Das Thema existiert nicht", "no-post": "Der Beitrag existiert nicht", @@ -60,7 +61,7 @@ "group-name-too-short": "Gruppenname zu kurz", "group-already-exists": "Gruppe existiert bereits", "group-name-change-not-allowed": "Du kannst den Namen der Gruppe nicht ändern", - "group-already-member": "Du bist bereits Teil dieser Gruppe", + "group-already-member": "Bereits Teil dieser Gruppe", "group-not-member": "Du bist kein Mitglied dieser Gruppe", "group-needs-owner": "Diese Gruppe muss mindestens einen Besitzer vorweisen", "group-already-invited": "Dieser Benutzer wurde bereits eingeladen", @@ -97,5 +98,6 @@ "invite-maximum-met": "Du hast bereits die maximale Anzahl an Personen eingeladen (%1 von %2).", "no-session-found": "Keine Login-Sitzung gefunden!", "not-in-room": "Benutzer nicht in Raum", - "no-users-in-room": "In diesem Raum befinden sich keine Benutzer." + "no-users-in-room": "In diesem Raum befinden sich keine Benutzer.", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/de/groups.json b/public/language/de/groups.json index 18d0489284..d2d12b2813 100644 --- a/public/language/de/groups.json +++ b/public/language/de/groups.json @@ -8,7 +8,7 @@ "pending.reject": "Abweisen", "pending.accept_all": "Alle annehmen", "pending.reject_all": "Alle ablehnen", - "pending.none": "Es sind zur Zeit keine unvearbeiteten Mitglieder vorhanden", + "pending.none": "Es gibt zur Zeit keine ausstehende Mitglieder", "invited.none": "Es sind zur Zeit keine weiteren Mitglieder eingeladen", "invited.uninvite": "Einladung zurücknehmen", "invited.search": "Suche nach einem Benutzer um ihn in diese Gruppe aufzunehmen", @@ -41,6 +41,7 @@ "details.hidden": "Versteckt", "details.hidden_help": "Wenn aktiviert, wird diese Gruppe in der Gruppenliste nicht zu finden sein, und Benutzer werden manuell eingeladen werden müssen.", "details.delete_group": "Gruppe löschen", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Gruppendetails wurden aktualisiert", "event.deleted": "Die Gruppe \"%1\" wurde gelöscht.", "membership.accept-invitation": "Einladung akzeptieren", diff --git a/public/language/de/modules.json b/public/language/de/modules.json index 339bb00f68..6640d8d546 100644 --- a/public/language/de/modules.json +++ b/public/language/de/modules.json @@ -5,7 +5,8 @@ "chat.no_active": "Du hast keine aktiven Chats.", "chat.user_typing": "%1 tippt gerade ...", "chat.user_has_messaged_you": "%1 hat dir geschrieben.", - "chat.see_all": "Alle Chats sehen", + "chat.see_all": "Alle Chats anzeigen", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Bitte wähle einen Empfänger, um den jeweiligen Nachrichtenverlauf anzuzeigen.", "chat.no-users-in-room": "In diesem Raum befinden sich keine Benutzer.", "chat.recent-chats": "Aktuelle Chats", diff --git a/public/language/de/notifications.json b/public/language/de/notifications.json index faaeb28215..51cb09b719 100644 --- a/public/language/de/notifications.json +++ b/public/language/de/notifications.json @@ -1,8 +1,8 @@ { "title": "Benachrichtigungen", "no_notifs": "Keine neuen Benachrichtigungen", - "see_all": "Alle Benachrichtigungen zeigen", - "mark_all_read": "Alle Benachrichtigungen als gelesen markieren", + "see_all": "Alle Benachrichtigungen anzeigen", + "mark_all_read": "Alle als gelesen markieren", "back_to_home": "Zurück zu %1", "outgoing_link": "Externer Link", "outgoing_link_message": "Du verlässt nun %1", @@ -30,7 +30,7 @@ "user_started_following_you_dual": "%1 und %2 folgen dir jetzt.", "user_started_following_you_multiple": "%1 und %2 andere Nutzer folgen dir jetzt.", "new_register": "%1 hat eine Registrationsanfrage geschickt.", - "new_register_multiple": "There are %1 registration requests awaiting review.", + "new_register_multiple": "Es erwarten %1 Registrierungsanfragen eine Überprüfung.", "email-confirmed": "E-Mail bestätigt", "email-confirmed-message": "Vielen Dank für Ihre E-Mail-Validierung. Ihr Konto ist nun vollständig aktiviert.", "email-confirm-error-message": "Es gab ein Problem bei der Validierung Ihrer E-Mail-Adresse. Möglicherweise ist der Code ungültig oder abgelaufen.", diff --git a/public/language/de/user.json b/public/language/de/user.json index e2cf854439..9af4a45399 100644 --- a/public/language/de/user.json +++ b/public/language/de/user.json @@ -1,7 +1,7 @@ { "banned": "Gesperrt", "offline": "offline", - "username": "Nutzername", + "username": "Benutzername", "joindate": "Registriert vor", "postcount": "Beiträge", "email": "E-Mail", @@ -39,6 +39,7 @@ "change_username": "Benutzernamen ändern", "change_email": "E-Mail ändern", "edit": "Ändern", + "edit-profile": "Edit Profile", "default_picture": "Standardsymbol", "uploaded_picture": "Hochgeladene Bilder", "upload_new_picture": "Neues Bild hochladen", @@ -73,35 +74,36 @@ "send_chat_notifications": "Sende eine E-Mail, wenn eine neue Chat-Nachricht eingeht und ich nicht online bin", "send_post_notifications": "Sende eine E-Mail wenn auf Themen die ich abonniert habe geantwortet wird", "settings-require-reload": "Einige Einstellungsänderung benötigen eine Aktualisierung. Hier klicken um die Seite neu zu laden.", - "has_no_follower": "Dieser User hat noch keine Follower.", - "follows_no_one": "Dieser User folgt noch niemandem :(", - "has_no_posts": "Dieser Nutzer hat noch nichts gepostet.", - "has_no_topics": "Dieser Nutzer hat noch keine Themen gepostet.", - "has_no_watched_topics": "Dieser Nutzer beobachtet keine Themen.", + "has_no_follower": "Dieser Benutzer hat noch keine Follower. :(", + "follows_no_one": "Dieser Benutzer folgt noch niemandem. :(", + "has_no_posts": "Dieser Benutzer hat noch nichts gepostet.", + "has_no_topics": "Dieser Benutzer hat noch keine Themen gepostet.", + "has_no_watched_topics": "Dieser Benutzer beobachtet keine Themen.", "has_no_upvoted_posts": "Dieser Benutzer hat bisher keine Beiträge positiv bewertet.", "has_no_downvoted_posts": "Dieser Benutzer hat bisher keine Beiträge negativ bewertet.", - "has_no_voted_posts": "Dieser Benutzer hat keine bewerteten Beiträge", + "has_no_voted_posts": "Dieser Benutzer hat keine bewerteten Beiträge.", "email_hidden": "E-Mail Adresse versteckt", "hidden": "versteckt", "paginate_description": "Themen und Beiträge in Seiten aufteilen, anstelle unendlich zu scrollen", "topics_per_page": "Themen pro Seite", "posts_per_page": "Beiträge pro Seite", "notification_sounds": "Ton abspielen, wenn du eine Benachrichtigung erhältst", - "browsing": "Stöbereinstellungen", + "browsing": "Browsing", "open_links_in_new_tab": "Ausgehende Links in neuem Tab öffnen", "enable_topic_searching": "Suchen innerhalb von Themen aktivieren", "topic_search_help": "Wenn aktiviert, ersetzt die im-Thema-Suche die Standardsuche des Browsers. Dadurch kannst du im ganzen Thema suchen, nicht nur im sichtbaren Abschnitt.", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Themen folgen, in denen auf dich geantwortet wird", "follow_topics_you_create": "Themen folgen, die du erstellst", "grouptitle": "Wähle den anzuzeigenden Gruppen Titel aus", "no-group-title": "Kein Gruppentitel", "select-skin": "Einen Skin auswählen", - "select-homepage": "Eine Startseite auswählen", + "select-homepage": "Startseite", "homepage": "Startseite", "homepage_description": "Wähle eine Seite die als Forumstartseite benutzt werden soll aus oder 'Keine' um die Standardstartseite zu verwenden.", "custom_route": "Eigener Startseitenpfad", "custom_route_help": "Gib hier einen Pfadnamen ohne vorangehenden Slash ein (z.B. \"recent\" oder \"popular\")", - "sso.title": "Einmalanmeldungsdienste", + "sso.title": "Single Sign-on Dienste", "sso.associated": "Verbunden mit", "sso.not-associated": "Verbinde dich mit" } \ No newline at end of file diff --git a/public/language/el/error.json b/public/language/el/error.json index dc22ae8c4d..388ec06c89 100644 --- a/public/language/el/error.json +++ b/public/language/el/error.json @@ -27,6 +27,7 @@ "password-too-long": "Password too long", "user-banned": "Ο Χρήστης είναι αποκλεισμένος/η", "user-too-new": "Sorry, you are required to wait %1 second(s) before making your first post", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Category does not exist", "no-topic": "Topic does not exist", "no-post": "Post does not exist", @@ -97,5 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/el/groups.json b/public/language/el/groups.json index 7cfcfb976f..29ae716a22 100644 --- a/public/language/el/groups.json +++ b/public/language/el/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Hidden", "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", "details.delete_group": "Delete Group", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Group details have been updated", "event.deleted": "The group \"%1\" has been deleted", "membership.accept-invitation": "Accept Invitation", diff --git a/public/language/el/modules.json b/public/language/el/modules.json index 82c747f628..4b1dc9e48a 100644 --- a/public/language/el/modules.json +++ b/public/language/el/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "Ο/Η %1 πληκτρολογεί...", "chat.user_has_messaged_you": "Ο/Η %1 σου έστειλε μήνυμα.", "chat.see_all": "See all chats", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Παρακαλώ επέλεξε έναν παραλήπτη για να δείς το ιστορικό της συνομιλίας", "chat.no-users-in-room": "No users in this room", "chat.recent-chats": "Πρόσφατες Συνομιλίες", diff --git a/public/language/el/user.json b/public/language/el/user.json index d6959816b3..7b6eed3269 100644 --- a/public/language/el/user.json +++ b/public/language/el/user.json @@ -39,6 +39,7 @@ "change_username": "Change Username", "change_email": "Change Email", "edit": "Επεξεργασία", + "edit-profile": "Edit Profile", "default_picture": "Default Icon", "uploaded_picture": "Ανεβασμένη Φωτογραφία", "upload_new_picture": "Ανέβασμα Νέας Φωτογραφίας", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Follow topics that you reply to", "follow_topics_you_create": "Follow topics you create", "grouptitle": "Select the group title you would like to display", diff --git a/public/language/en@pirate/error.json b/public/language/en@pirate/error.json index f9199f193e..0709e823b6 100644 --- a/public/language/en@pirate/error.json +++ b/public/language/en@pirate/error.json @@ -27,6 +27,7 @@ "password-too-long": "Password too long", "user-banned": "User banned", "user-too-new": "Sorry, you are required to wait %1 second(s) before making your first post", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Category does not exist", "no-topic": "Topic does not exist", "no-post": "Post does not exist", @@ -97,5 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/en@pirate/groups.json b/public/language/en@pirate/groups.json index 6138ea22ff..3c4f6ce638 100644 --- a/public/language/en@pirate/groups.json +++ b/public/language/en@pirate/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Hidden", "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", "details.delete_group": "Delete Group", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Group details have been updated", "event.deleted": "The group \"%1\" has been deleted", "membership.accept-invitation": "Accept Invitation", diff --git a/public/language/en@pirate/modules.json b/public/language/en@pirate/modules.json index ceb094e5a2..0ae551df59 100644 --- a/public/language/en@pirate/modules.json +++ b/public/language/en@pirate/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 is typing ...", "chat.user_has_messaged_you": "%1 has messaged you.", "chat.see_all": "See all chats", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Please select a recipient to view chat message history", "chat.no-users-in-room": "No users in this room", "chat.recent-chats": "Recent Chats", diff --git a/public/language/en@pirate/user.json b/public/language/en@pirate/user.json index e907bc2200..0b5959462f 100644 --- a/public/language/en@pirate/user.json +++ b/public/language/en@pirate/user.json @@ -39,6 +39,7 @@ "change_username": "Change Username", "change_email": "Change Email", "edit": "Edit", + "edit-profile": "Edit Profile", "default_picture": "Default Icon", "uploaded_picture": "Uploaded Picture", "upload_new_picture": "Upload New Picture", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Follow topics that you reply to", "follow_topics_you_create": "Follow topics you create", "grouptitle": "Select the group title you would like to display", diff --git a/public/language/en_US/error.json b/public/language/en_US/error.json index f9199f193e..0709e823b6 100644 --- a/public/language/en_US/error.json +++ b/public/language/en_US/error.json @@ -27,6 +27,7 @@ "password-too-long": "Password too long", "user-banned": "User banned", "user-too-new": "Sorry, you are required to wait %1 second(s) before making your first post", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Category does not exist", "no-topic": "Topic does not exist", "no-post": "Post does not exist", @@ -97,5 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/en_US/groups.json b/public/language/en_US/groups.json index f3b661977f..ffc0224c5e 100644 --- a/public/language/en_US/groups.json +++ b/public/language/en_US/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Hidden", "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", "details.delete_group": "Delete Group", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Group details have been updated", "event.deleted": "The group \"%1\" has been deleted", "membership.accept-invitation": "Accept Invitation", diff --git a/public/language/en_US/modules.json b/public/language/en_US/modules.json index 474b5fc7e2..eb5e513640 100644 --- a/public/language/en_US/modules.json +++ b/public/language/en_US/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 is typing ...", "chat.user_has_messaged_you": "%1 has messaged you.", "chat.see_all": "See all chats", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Please select a recipient to view chat message history", "chat.no-users-in-room": "No users in this room", "chat.recent-chats": "Recent Chats", diff --git a/public/language/en_US/user.json b/public/language/en_US/user.json index 4be38f5a9e..86d31e818d 100644 --- a/public/language/en_US/user.json +++ b/public/language/en_US/user.json @@ -39,6 +39,7 @@ "change_username": "Change Username", "change_email": "Change Email", "edit": "Edit", + "edit-profile": "Edit Profile", "default_picture": "Default Icon", "uploaded_picture": "Uploaded Picture", "upload_new_picture": "Upload New Picture", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behavior and allow you to search through the entire topic, instead of what is only shown on screen", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Follow topics that you reply to", "follow_topics_you_create": "Follow topics you create", "grouptitle": "Select the group title you would like to display", diff --git a/public/language/es/error.json b/public/language/es/error.json index bcf1fa0131..14620522d4 100644 --- a/public/language/es/error.json +++ b/public/language/es/error.json @@ -27,6 +27,7 @@ "password-too-long": "Contraseña muy corta", "user-banned": "Usuario baneado", "user-too-new": "Lo sentimos, es necesario que esperes %1 segundo(s) antes poder hacer tu primera publicación", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "La categoría no existe", "no-topic": "El tema no existe", "no-post": "La publicación no existe", @@ -97,5 +98,6 @@ "invite-maximum-met": "Has alcanzado el número máximo de personas invitadas (%1 de %2).", "no-session-found": "¡No se ha encontrado ningún inicio de sesión!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/es/groups.json b/public/language/es/groups.json index ca0ca6e66b..1bcb9f23af 100644 --- a/public/language/es/groups.json +++ b/public/language/es/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Oculto", "details.hidden_help": "Si está habilitado, este grupo no aparecerá en los listados de grupos, y los usuarios tendrán que ser invitados manualmente", "details.delete_group": "Eliminar grupo", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Los detalles del grupo han sido actualizados", "event.deleted": "El grupo \"%1\" ha sido eliminado", "membership.accept-invitation": "Aceptar Invitación", diff --git a/public/language/es/modules.json b/public/language/es/modules.json index 917d284bd9..41d57a8fa9 100644 --- a/public/language/es/modules.json +++ b/public/language/es/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 está escribiendo...", "chat.user_has_messaged_you": "%1 te ha enviado un mensaje.", "chat.see_all": "Ver todos los chats", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Por favor, selecciona un contacto para ver el historial de mensajes", "chat.no-users-in-room": "No hay usuarios en esta sala", "chat.recent-chats": "Chats recientes", diff --git a/public/language/es/user.json b/public/language/es/user.json index fda1eb149b..b518f7c38c 100644 --- a/public/language/es/user.json +++ b/public/language/es/user.json @@ -39,6 +39,7 @@ "change_username": "Cambiar nombre de usuario", "change_email": "Cambiar email", "edit": "Editar", + "edit-profile": "Edit Profile", "default_picture": "Icono por defecto", "uploaded_picture": "Imagen subida", "upload_new_picture": "Subir nueva imagen", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Abrir los enlaces externos en una nueva pestaña", "enable_topic_searching": "Activar la búsqueda \"in-topic\"", "topic_search_help": "Si está activada, la búsqueda 'in-topic' sustituirá el comportamiento por defecto del navegador y le permitirá buscar en el tema al completo, en vez de hacer una búsqueda únicamente sobre el contenido mostrado en pantalla", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Seguir los temas en los que respondes", "follow_topics_you_create": "Seguir publicaciones que creas", "grouptitle": "Selecciona el título del grupo que deseas visualizar", diff --git a/public/language/et/error.json b/public/language/et/error.json index 68c7a28745..013db49d04 100644 --- a/public/language/et/error.json +++ b/public/language/et/error.json @@ -27,6 +27,7 @@ "password-too-long": "Parool liiga pikk", "user-banned": "Kasutaja bannitud", "user-too-new": "Vabandust, te peate ootama %1 sekund(it) enne esimese postituse loomist.", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Kategooriat ei eksisteeri", "no-topic": "Teemat ei eksisteeri", "no-post": "Postitust ei eksisteeri", @@ -97,5 +98,6 @@ "invite-maximum-met": "Sa oled kutsunud maksimaalse lubatud inimeste arvu (%1 %2 'st).", "no-session-found": "Sisse logimis sessiooni ei leitud!", "not-in-room": "Kasutaja pole ruumis", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/et/groups.json b/public/language/et/groups.json index fe3f83967d..db8dfce3d1 100644 --- a/public/language/et/groups.json +++ b/public/language/et/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Peidetud", "details.hidden_help": "Kui sisse lülitatud, siis seda gruppi ei kuvata gruppide nimekirjas ning liikmed tuleb lisada manuaalselt", "details.delete_group": "Kustuta grupp", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Grupi lisainformatsiooni on uuendatud", "event.deleted": "Grupp \"%1\" on kustutatud", "membership.accept-invitation": "Võta kutse vastu", diff --git a/public/language/et/modules.json b/public/language/et/modules.json index 10749826f7..ec23804489 100644 --- a/public/language/et/modules.json +++ b/public/language/et/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 kirjutab sõnumit...", "chat.user_has_messaged_you": "%1 saatis sulle sõnumi.", "chat.see_all": "Vaata kõiki vestluseid", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Vali sõnumisaaja, et vaadata sõnumite ajalugu.", "chat.no-users-in-room": "Ühtki kasutajat selles ruumis", "chat.recent-chats": "Hiljutised vestlused", diff --git a/public/language/et/user.json b/public/language/et/user.json index cf81a08eda..463b4c5e8e 100644 --- a/public/language/et/user.json +++ b/public/language/et/user.json @@ -39,6 +39,7 @@ "change_username": "Vaheta kasutajanime", "change_email": "Vaheta emaili", "edit": "Muuda", + "edit-profile": "Edit Profile", "default_picture": "Algne ikoon", "uploaded_picture": "Üleslaetud pilt", "upload_new_picture": "Laadi uus pilt", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Ava väljaminevad lingid uues aknas", "enable_topic_searching": "Võimalda teemasisene otsing", "topic_search_help": "Kui see on sisse lükatud, siis teemasisene otsing võtab üle brauseri tavapärase otsingu ning võimaldab otsida ainult ekraanile mahtuva teema asemel terve teema ulatuses.", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Järgi teemasid, millele olete vastanud.", "follow_topics_you_create": "Järgi teemasi, mis on teie loodud.", "grouptitle": "Vali grupile tiitel mida kuvada soovid", diff --git a/public/language/fa_IR/error.json b/public/language/fa_IR/error.json index cce6eb95dd..c6651bc9d8 100644 --- a/public/language/fa_IR/error.json +++ b/public/language/fa_IR/error.json @@ -27,6 +27,7 @@ "password-too-long": "کلمه عبور بسیار طولانیست", "user-banned": "کاربر محروم شد.", "user-too-new": "با عرض پوزش، شما باید %1 ثانیه پیش از فرستادن پست نخست خود صبر کنید", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "دسته بندی وجود ندارد", "no-topic": "موضوع وجود ندارد.", "no-post": "پست وجود ندارد", @@ -97,5 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "هیچ کاربری در این گفتگو نیست" + "no-users-in-room": "هیچ کاربری در این گفتگو نیست", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/fa_IR/groups.json b/public/language/fa_IR/groups.json index 9de831f470..2c1db5b30d 100644 --- a/public/language/fa_IR/groups.json +++ b/public/language/fa_IR/groups.json @@ -41,6 +41,7 @@ "details.hidden": "پنهان", "details.hidden_help": "اگر فعال باشد، این گروه در فهرست گروه‌ها پیدا نمی‌شود و کاربران باید دستی فراخوانده شوند", "details.delete_group": "حذف گروه", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "جزییات گروه با موفقیت به روز شد", "event.deleted": "گروه \"%1\" حدف شد", "membership.accept-invitation": "دعوت را قبول میکنم", diff --git a/public/language/fa_IR/modules.json b/public/language/fa_IR/modules.json index 6d9d92806b..cae06f83b0 100644 --- a/public/language/fa_IR/modules.json +++ b/public/language/fa_IR/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 در حال نوشتن است...", "chat.user_has_messaged_you": "%1 به شما پیام داده است.", "chat.see_all": "دیدن همه ی چت ها", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "مشخص کنید تاریخچه چتهایتان با چه کاربری را می‌خواهید ببینید", "chat.no-users-in-room": "هیچ کاربری در این گفتگو نیست", "chat.recent-chats": "چتهای اخیر", diff --git a/public/language/fa_IR/user.json b/public/language/fa_IR/user.json index b9fc631187..57d8e534b7 100644 --- a/public/language/fa_IR/user.json +++ b/public/language/fa_IR/user.json @@ -39,6 +39,7 @@ "change_username": "تغییر نام کاربری", "change_email": "تغییر ایمیل", "edit": "ویرایش", + "edit-profile": "Edit Profile", "default_picture": "آیکون پیش فرض", "uploaded_picture": "تصویر بارشده", "upload_new_picture": "بارگذاری تصویر تازه", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "پیوندهای به بیرون را در برگ جدید باز کن", "enable_topic_searching": "فعال کردن جستجوی داخل-موضوع", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "تاپیک هایی که پاسخ داده ای را دنبال کن", "follow_topics_you_create": "موضوع هایی که ایجاد کرده ای را دنبال کن", "grouptitle": "عنوان گروهی که میخواهید نشان داده شود را انتخاب کنید.", diff --git a/public/language/fi/category.json b/public/language/fi/category.json index ca4d44ca95..0083f12e8b 100644 --- a/public/language/fi/category.json +++ b/public/language/fi/category.json @@ -1,5 +1,5 @@ { - "category": "Category", + "category": "Kategoria", "subcategories": "Subcategories", "new_topic_button": "Uusi aihe", "guest-login-post": "Kirjaudu sisään voidaksesi kirjoittaa viesti", diff --git a/public/language/fi/email.json b/public/language/fi/email.json index e53ac44919..92002dae56 100644 --- a/public/language/fi/email.json +++ b/public/language/fi/email.json @@ -1,30 +1,30 @@ { "password-reset-requested": "Pyydetty salasanan palautuskoodia - %1!", "welcome-to": "%1 - Tervetuloa", - "invite": "Invitation from %1", + "invite": "Kutsu henkilöltä %1", "greeting_no_name": "Hei", "greeting_with_name": "Hei %1", "welcome.text1": "Kiitos rekisteröitymisestäsi sivustolle %1!", "welcome.text2": "Meidän täytyy varmistaa, että omistat sen sähköpostiosoitteen, jolla rekisteröidyit, ennen kuin tilisi voidaan aktivoida kokonaan.", - "welcome.text3": "An administrator has accepted your registration application. You can login with your username/password now.", + "welcome.text3": "Ylläpitäjä hyväksyi rekisteröintipyyntösi. Voit nyt kirjautua käyttäjänimelläsi ja salasanallasi.", "welcome.cta": "Napsauta tästä vahvistaaksesi sähköpostiosoitteesi", - "invitation.text1": "%1 has invited you to join %2", - "invitation.ctr": "Click here to create your account.", - "reset.text1": "We received a request to reset your password, possibly because you have forgotten it. If this is not the case, please ignore this email.", - "reset.text2": "To continue with the password reset, please click on the following link:", - "reset.cta": "Click here to reset your password", - "reset.notify.subject": "Password successfully changed", - "reset.notify.text1": "We are notifying you that on %1, your password was changed successfully.", - "reset.notify.text2": "If you did not authorise this, please notify an administrator immediately.", - "digest.notifications": "You have unread notifications from %1:", - "digest.latest_topics": "Latest topics from %1", + "invitation.text1": "%1 pyysi sinua liittymään %2", + "invitation.ctr": "Napsauta tästä luodaksesi käyttäjätilisi.", + "reset.text1": "Saimme pyynnön vaihtaa salasanasi, todennäkösesti koska olit unohtanut sen. Jos näin ei ollut käynyt, voit jättää tämän viestin huomiotta.", + "reset.text2": "Jatkaaksesi salasanan nollausta, napsauta seuraavaa linkkiä:", + "reset.cta": "Napsauta tästä vaihtaaksesi salasanasi", + "reset.notify.subject": "Salasana onnistuneesti vaihdettu", + "reset.notify.text1": "Ilmoitamme sinua että %1, salasanasi vaihdettiin onnistuneesti.", + "reset.notify.text2": "Jos et tunnista tätä toimintoa, ilmoita välittömästi ylläpitäjälle.", + "digest.notifications": "Sinulla on lukemattomia ilmoituksia: %1:", + "digest.latest_topics": "Viimeisimmät viestiketjut henkilöltä %1", "digest.cta": "Click here to visit %1", "digest.unsub.info": "This digest was sent to you due to your subscription settings.", "digest.no_topics": "There have been no active topics in the past %1", - "digest.day": "day", - "digest.week": "week", - "digest.month": "month", - "notif.chat.subject": "New chat message received from %1", + "digest.day": "päivä", + "digest.week": "viikko", + "digest.month": "kuukausi", + "notif.chat.subject": "Uusi chatviesti henkilöltä %1", "notif.chat.cta": "Click here to continue the conversation", "notif.chat.unsub.info": "This chat notification was sent to you due to your subscription settings.", "notif.post.cta": "Click here to read the full topic", diff --git a/public/language/fi/error.json b/public/language/fi/error.json index 70ff790172..dbb4fd10c2 100644 --- a/public/language/fi/error.json +++ b/public/language/fi/error.json @@ -18,7 +18,7 @@ "username-taken": "Käyttäjänimi varattu", "email-taken": "Sähköpostiosoite varattu", "email-not-confirmed": "Sähköpostiasi ei ole vielä vahvistettu, ole hyvä ja napsauta tätä vahvistaaksesi sen.", - "email-not-confirmed-chat": "You are unable to chat until your email is confirmed, please click here to confirm your email.", + "email-not-confirmed-chat": "Et voi keskustella ennen kuin sähköpostiosoitteesi on vahvistettu, ole hyvä ja paina tästä vahvistaaksesi sen.", "no-email-to-confirm": "This forum requires email confirmation, please click here to enter an email", "email-confirm-failed": "We could not confirm your email, please try again later.", "confirm-email-already-sent": "Confirmation email already sent, please wait %1 minute(s) to send another one.", @@ -26,7 +26,8 @@ "username-too-long": "Käyttäjänimi on liian pitkä", "password-too-long": "Password too long", "user-banned": "Käyttäjä on estetty", - "user-too-new": "Sorry, you are required to wait %1 second(s) before making your first post", + "user-too-new": "Anteeksi, mutta sinun täytyy odottaa %1 sekunti(a) ennen sinun ensimmäisen viestin lähettämistä", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Kategoriaa ei ole olemassa", "no-topic": "Aihetta ei ole olemassa", "no-post": "Viestiä ei ole olemassa", @@ -37,10 +38,10 @@ "category-disabled": "Kategoria ei ole käytössä", "topic-locked": "Aihe lukittu", "post-edit-duration-expired": "You are only allowed to edit posts for %1 second(s) after posting", - "content-too-short": "Please enter a longer post. Posts should contain at least %1 character(s).", - "content-too-long": "Please enter a shorter post. Posts can't be longer than %1 character(s).", - "title-too-short": "Please enter a longer title. Titles should contain at least %1 character(s).", - "title-too-long": "Please enter a shorter title. Titles can't be longer than %1 character(s).", + "content-too-short": "Ole hyvä ja syötä pidempi viesti. Sen pitäisi sisältää ainakin %1 merkki(ä).", + "content-too-long": "Ole hyvä ja syötä lyhyempi viesti. Sen voi sisältää vain %1 merkki(ä).", + "title-too-short": "Ole hyä ja syötä pidempi otsikko. Sen pitäisi sisältää anakin %1 merkki(ä).", + "title-too-long": "Ole hyvä ja syötä lyhyempi otsikko. Se voi sisältää vain %1 merkki(ä).", "too-many-posts": "You can only post once every %1 second(s) - please wait before posting again", "too-many-posts-newbie": "As a new user, you can only post once every %1 second(s) until you have earned %2 reputation - please wait before posting again", "tag-too-short": "Please enter a longer tag. Tags should contain at least %1 character(s)", @@ -77,10 +78,10 @@ "about-me-too-long": "Sorry, your about me cannot be longer than %1 character(s).", "cant-chat-with-yourself": "Et voi keskustella itsesi kanssa!", "chat-restricted": "This user has restricted their chat messages. They must follow you before you can chat with them", - "chat-disabled": "Chat system disabled", + "chat-disabled": "Keskustelujärjestelmä on pois käytöstä", "too-many-messages": "You have sent too many messages, please wait awhile.", - "invalid-chat-message": "Invalid chat message", - "chat-message-too-long": "Chat message is too long", + "invalid-chat-message": "Virheellinen keskusteluviesti", + "chat-message-too-long": "Keskusteluviesti on liian pitkä", "cant-edit-chat-message": "You are not allowed to edit this message", "cant-remove-last-user": "You can't remove the last user", "cant-delete-chat-message": "You are not allowed to delete this message", @@ -96,6 +97,7 @@ "wrong-login-type-username": "Please use your username to login", "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", - "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "not-in-room": "Käyttäjä ei ole huoneessa", + "no-users-in-room": "Ei käyttäjiä tässä huoneessa", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/fi/groups.json b/public/language/fi/groups.json index 94ec7ef69c..55e7b41f2e 100644 --- a/public/language/fi/groups.json +++ b/public/language/fi/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Hidden", "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", "details.delete_group": "Delete Group", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Group details have been updated", "event.deleted": "The group \"%1\" has been deleted", "membership.accept-invitation": "Accept Invitation", diff --git a/public/language/fi/modules.json b/public/language/fi/modules.json index 4b514d8678..978d306170 100644 --- a/public/language/fi/modules.json +++ b/public/language/fi/modules.json @@ -6,8 +6,9 @@ "chat.user_typing": "%1 kirjoittaa ...", "chat.user_has_messaged_you": "%1 lähetti sinulle viestin.", "chat.see_all": "See all chats", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Valitse vastaanottaja katsellaksesi keskusteluhistoriaa", - "chat.no-users-in-room": "No users in this room", + "chat.no-users-in-room": "Ei käyttäjiä tässä huoneessa", "chat.recent-chats": "Viimeisimmät keskustelut", "chat.contacts": "Contacts", "chat.message-history": "Viestihistoria", diff --git a/public/language/fi/notifications.json b/public/language/fi/notifications.json index 68fa97b695..427e04311e 100644 --- a/public/language/fi/notifications.json +++ b/public/language/fi/notifications.json @@ -1,11 +1,11 @@ { "title": "Ilmoitukset", "no_notifs": "Sinulla ei ole uusia ilmoituksia", - "see_all": "See all notifications", - "mark_all_read": "Mark all notifications read", - "back_to_home": "Back to %1", + "see_all": "Katso kaikki ilmoitukset", + "mark_all_read": "Merkkaa kaikki ilmoitukset luetuiksi", + "back_to_home": "Palaa takaisin %1", "outgoing_link": "Ulkopuolinen linkki", - "outgoing_link_message": "You are now leaving %1", + "outgoing_link_message": "Olet nyt poistumassa %1", "continue_to": "Continue to %1", "return_to": "Return to %1", "new_notification": "Uusi ilmoitus", diff --git a/public/language/fi/pages.json b/public/language/fi/pages.json index 9ae6d2e904..d2eba81a6c 100644 --- a/public/language/fi/pages.json +++ b/public/language/fi/pages.json @@ -1,35 +1,35 @@ { "home": "Etusivu", "unread": "Lukemattomat aiheet", - "popular-day": "Popular topics today", - "popular-week": "Popular topics this week", - "popular-month": "Popular topics this month", - "popular-alltime": "All time popular topics", + "popular-day": "Suositut aiheet tänään", + "popular-week": "Suositut aiheet tällä viikolla", + "popular-month": "Suositut aiheet tässä kuussa", + "popular-alltime": "Suositut aiheet koko ajalta", "recent": "Viimeisimmät aiheet", - "flagged-posts": "Flagged Posts", - "users/online": "Online Users", - "users/latest": "Latest Users", + "flagged-posts": "Liputetut viestit", + "users/online": "Paikalla olevat käyttäjät", + "users/latest": "Viimeisimmat käyttäjät", "users/sort-posts": "Users with the most posts", "users/sort-reputation": "Users with the most reputation", "users/banned": "Banned Users", "users/search": "User Search", "notifications": "Ilmoitukset", - "tags": "Tags", + "tags": "Tunnisteet", "tag": "Topics tagged under \"%1\"", - "register": "Register an account", - "login": "Login to your account", + "register": "Luo käyttäjät", + "login": "Kirjaudu käyttäjällesi", "reset": "Reset your account password", "categories": "Categories", "groups": "Groups", "group": "%1 group", - "chats": "Chats", + "chats": "Keskustelut", "chat": "Chatting with %1", "account/edit": "Editing \"%1\"", "account/edit/password": "Editing password of \"%1\"", "account/edit/username": "Editing username of \"%1\"", "account/edit/email": "Editing email of \"%1\"", - "account/following": "People %1 follows", - "account/followers": "People who follow %1", + "account/following": "Ihmiset, jota %1 seuraa", + "account/followers": "Ihmiset, jotka seuraavat %1", "account/posts": "Posts made by %1", "account/topics": "Topics created by %1", "account/groups": "%1's Groups", diff --git a/public/language/fi/user.json b/public/language/fi/user.json index eff54da44b..f7218528a3 100644 --- a/public/language/fi/user.json +++ b/public/language/fi/user.json @@ -39,6 +39,7 @@ "change_username": "Change Username", "change_email": "Change Email", "edit": "Muokkaa", + "edit-profile": "Edit Profile", "default_picture": "Default Icon", "uploaded_picture": "Ladattu kuva", "upload_new_picture": "Lataa uusi kuva", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Salli aiheen sisäiset haut", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Follow topics that you reply to", "follow_topics_you_create": "Follow topics you create", "grouptitle": "Select the group title you would like to display", diff --git a/public/language/fi/users.json b/public/language/fi/users.json index 1885be650e..9ebaf393e1 100644 --- a/public/language/fi/users.json +++ b/public/language/fi/users.json @@ -15,6 +15,6 @@ "popular_topics": "Popular Topics", "unread_topics": "Unread Topics", "categories": "Categories", - "tags": "Tags", + "tags": "Tunnisteet", "no-users-found": "No users found!" } \ No newline at end of file diff --git a/public/language/fr/error.json b/public/language/fr/error.json index f8542c3dad..b34f0c58c6 100644 --- a/public/language/fr/error.json +++ b/public/language/fr/error.json @@ -27,6 +27,7 @@ "password-too-long": "Mot de passe trop long", "user-banned": "Utilisateur banni", "user-too-new": "Désolé, vous devez attendre encore %1 seconde(s) avant d'envoyer votre premier message", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Cette catégorie n'existe pas", "no-topic": "Ce sujet n'existe pas", "no-post": "Ce message n'existe pas", @@ -50,8 +51,8 @@ "still-uploading": "Veuillez patienter pendant le téléchargement.", "file-too-big": "La taille maximale autorisée pour un fichier est de %1 kb. Veuillez envoyer un fichier plus petit.", "guest-upload-disabled": "Le téléversement est désactivé pour les Invités.", - "already-favourited": "You have already bookmarked this post", - "already-unfavourited": "You have already unbookmarked this post", + "already-favourited": "Vous avez déjà mis un marque-page", + "already-unfavourited": "Vous avez déjà retiré un marque-page", "cant-ban-other-admins": "Vous ne pouvez pas bannir les autres administrateurs !", "cant-remove-last-admin": "Vous seul êtes administrateur. Ajouter un autre utilisateur en tant qu'administrateur avant de vous en retirer.", "invalid-image-type": "Type d'image invalide. Les types autorisés sont: %1", @@ -97,5 +98,6 @@ "invite-maximum-met": "Vous avez invité la quantité maximale de personnes (%1 de %2).", "no-session-found": "Pas de session de connexion trouvé!", "not-in-room": "L'utilisateur n'est pas dans cette salle", - "no-users-in-room": "No users in this room" + "no-users-in-room": "Aucun utilisateur dans cette salle", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/fr/global.json b/public/language/fr/global.json index 19d556a037..f7bd29a1b6 100644 --- a/public/language/fr/global.json +++ b/public/language/fr/global.json @@ -87,8 +87,8 @@ "map": "Carte", "sessions": "Sessions de connexion", "ip_address": "Adresse IP", - "enter_page_number": "Enter page number", - "upload_file": "Upload file", - "upload": "Upload", - "allowed-file-types": "Allowed file types are %1" + "enter_page_number": "Entrer un numéro de page", + "upload_file": "Envoyer un fichier", + "upload": "Envoyer", + "allowed-file-types": "Les types de fichiers autorisés sont : %1" } \ No newline at end of file diff --git a/public/language/fr/groups.json b/public/language/fr/groups.json index b7c0f03351..05f17fbd59 100644 --- a/public/language/fr/groups.json +++ b/public/language/fr/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Masqué", "details.hidden_help": "Si cette case est cochée, ce groupe n'est pas affiché dans la liste des groupes, et les utilisateurs devront être invités manuellement.", "details.delete_group": "Supprimer le groupe", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Les détails du groupe ont été mis à jour", "event.deleted": "Le groupe \"%1\" a été supprimé", "membership.accept-invitation": "Accepter l'invitation", @@ -49,5 +50,5 @@ "membership.leave-group": "Quitter le groupe", "membership.reject": "Refuser", "new-group.group_name": "Nom du groupe :", - "upload-group-cover": "Upload group cover" + "upload-group-cover": "Envoyer une image de groupe" } \ No newline at end of file diff --git a/public/language/fr/modules.json b/public/language/fr/modules.json index 248c716be4..27ee80e92f 100644 --- a/public/language/fr/modules.json +++ b/public/language/fr/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 est en train d'écrire ...", "chat.user_has_messaged_you": "%1 vous a envoyé un message.", "chat.see_all": "Voir toutes les discussions", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Veuillez sélectionner un destinataire pour voir l'historique des discussions", "chat.no-users-in-room": "Aucun utilisateur dans cette salle", "chat.recent-chats": "Discussions récentes", diff --git a/public/language/fr/notifications.json b/public/language/fr/notifications.json index 7ce8c30d06..fadee3aa62 100644 --- a/public/language/fr/notifications.json +++ b/public/language/fr/notifications.json @@ -16,9 +16,9 @@ "upvoted_your_post_in_multiple": "%1 et %2 autres on voté pour votre message dans %3.", "moved_your_post": "%1 a déplacé votre message vers %2", "moved_your_topic": "%1 a déplacé %2.", - "favourited_your_post_in": "%1 has bookmarked your post in %2.", - "favourited_your_post_in_dual": "%1 and %2 have bookmarked your post in %3.", - "favourited_your_post_in_multiple": "%1 and %2 others have bookmarked your post in %3.", + "favourited_your_post_in": "%1 a enregistré votre message dans %2.", + "favourited_your_post_in_dual": "%1 et %2 autres ont enregistré votre message dans %3.", + "favourited_your_post_in_multiple": "%1 et %2 autres ont enregistré votre message dans %3.", "user_flagged_post_in": "%1 a signalé un message dans %2.", "user_flagged_post_in_dual": "%1 et %2 ont signalé un message dans %3", "user_flagged_post_in_multiple": "%1 et %2 autres on signalé un message dans %3", @@ -30,7 +30,7 @@ "user_started_following_you_dual": "%1 et %2 vous suivent.", "user_started_following_you_multiple": "%1 et %2 autres vous suivent.", "new_register": "%1 a envoyé une demande d'incription.", - "new_register_multiple": "There are %1 registration requests awaiting review.", + "new_register_multiple": "%1 inscription(s) est en attente de validation.", "email-confirmed": "Email vérifié", "email-confirmed-message": "Merci pour la validation de votre adresse email. Votre compte est désormais activé.", "email-confirm-error-message": "Il y a un un problème dans la vérification de votre adresse email. Le code est peut être invalide ou a expiré.", diff --git a/public/language/fr/pages.json b/public/language/fr/pages.json index c3cdfe1f55..3c0cb29b90 100644 --- a/public/language/fr/pages.json +++ b/public/language/fr/pages.json @@ -33,13 +33,13 @@ "account/posts": "Messages postés par %1", "account/topics": "Sujets créés par %1", "account/groups": "Groupes auxquels appartient %1", - "account/favourites": "%1's Bookmarked Posts", + "account/favourites": "Marques-pages de %1", "account/settings": "Paramètres d'utilisateur", "account/watched": "Sujets surveillés par %1", "account/upvoted": "Messages pour lesquels %1 a voté", "account/downvoted": "Messages contre lesquels %1 a voté", "account/best": "Meilleurs messages postés par %1", - "confirm": "Email Confirmed", + "confirm": "Email vérifié", "maintenance.text": "%1 est en maintenance. Veuillez revenir un peu plus tard.", "maintenance.messageIntro": "De plus, l'administrateur a laissé ce message:", "throttled.text": "%1 est actuellement indisponible en raison d'une charge excessive. Merci de réessayer plus tard." diff --git a/public/language/fr/topic.json b/public/language/fr/topic.json index 16a0e0628d..8a71ff511a 100644 --- a/public/language/fr/topic.json +++ b/public/language/fr/topic.json @@ -65,9 +65,9 @@ "disabled_categories_note": "Les catégories désactivées sont grisées", "confirm_move": "Déplacer", "confirm_fork": "Scinder", - "favourite": "Bookmark", - "favourites": "Bookmarks", - "favourites.has_no_favourites": "You haven't bookmarked any posts yet.", + "favourite": "Marque-page", + "favourites": "Marque-page", + "favourites.has_no_favourites": "Vous n'avez aucuns marque-page.", "loading_more_posts": "Charger plus de messages", "move_topic": "Déplacer le sujet", "move_topics": "Déplacer des sujets", diff --git a/public/language/fr/user.json b/public/language/fr/user.json index 1cb2e97861..34c1026e7e 100644 --- a/public/language/fr/user.json +++ b/public/language/fr/user.json @@ -22,7 +22,7 @@ "profile": "Profil", "profile_views": "Vues", "reputation": "Réputation", - "favourites": "Bookmarks", + "favourites": "Marque-pages", "watched": "Suivis", "followers": "Abonnés", "following": "Abonnements", @@ -39,6 +39,7 @@ "change_username": "Changer le nom d'utilisateur", "change_email": "Changer l'e-mail", "edit": "Éditer", + "edit-profile": "Edit Profile", "default_picture": "Icône par défaut", "uploaded_picture": "Image envoyée", "upload_new_picture": "Envoyer une nouvelle image", @@ -55,11 +56,11 @@ "password": "Mot de passe", "username_taken_workaround": "Le nom d'utilisateur désiré est déjà utilisé, nous l'avons donc légèrement modifié. Vous êtes maintenant connu comme %1", "password_same_as_username": "Votre mot de passe est identique à votre nom d'utilisateur. Veuillez en choisir un autre.", - "password_same_as_email": "Your password is the same as your email, please select another password.", + "password_same_as_email": "Votre mot de passe est identique à votre adresse email. Veuillez en choisir un autre.", "upload_picture": "Envoyer l'image", "upload_a_picture": "Envoyer une image", "remove_uploaded_picture": "Supprimer l'image envoyée", - "upload_cover_picture": "Upload cover picture", + "upload_cover_picture": "Envoyer une image de couverture", "settings": "Paramètres", "show_email": "Afficher mon email", "show_fullname": "Afficher mon nom complet", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Ouvrir les liens externes dans un nouvel onglet", "enable_topic_searching": "Activer la recherche dans les sujets", "topic_search_help": "Une fois activé, la recherche dans les sujets va remplacer la recherche de page du navigateur et vous permettra de rechercher dans l'intégralité d'un sujet au lieu des seuls posts affichés à l'écran.", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Suivre les sujets auxquels vous répondez", "follow_topics_you_create": "Suivre les sujets que vous créez", "grouptitle": "Sélectionnez le titre de groupe que vous souhaitez afficher", diff --git a/public/language/gl/error.json b/public/language/gl/error.json index 480abe1f63..5a5619eaf0 100644 --- a/public/language/gl/error.json +++ b/public/language/gl/error.json @@ -27,6 +27,7 @@ "password-too-long": "Contrasinal moi longa", "user-banned": "Usuario expulsado", "user-too-new": "Desculpa, agarda %1 second(s) antes de facer a túa primeira publicación.", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "A categoría non existe", "no-topic": "O tema non existe", "no-post": "A publicación non existe", @@ -97,5 +98,6 @@ "invite-maximum-met": "Convidaches á cantidade máxima de persoas (%1 de %2).", "no-session-found": "Non se atopa ningún inicio de sesión!", "not-in-room": "O usuario non se encontra nesta sala", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/gl/groups.json b/public/language/gl/groups.json index f32273ce32..d9b33b659d 100644 --- a/public/language/gl/groups.json +++ b/public/language/gl/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Oculto", "details.hidden_help": "Se está habilitado, este grupo non se poderá atopar na listaxe de grupos e os usuarios deberán ser convidados manualmente.", "details.delete_group": "Eliminar Grupo", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Os detalles do grupo foron actualizados", "event.deleted": "O grupo \"%1\" foi borrado.", "membership.accept-invitation": "Aceptar ", diff --git a/public/language/gl/modules.json b/public/language/gl/modules.json index 73ca840bdb..a50f0a5a03 100644 --- a/public/language/gl/modules.json +++ b/public/language/gl/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 está a escribir...", "chat.user_has_messaged_you": "%1 enviouche unha mensaxe.", "chat.see_all": "Ver tódalas chamadas", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Por favor, seleccione un destinatario para ver o historial das mensaxes ", "chat.no-users-in-room": "Non hai usuarios nesta sala", "chat.recent-chats": "Charlas Recentes", diff --git a/public/language/gl/user.json b/public/language/gl/user.json index 003f8ed360..014b7aead3 100644 --- a/public/language/gl/user.json +++ b/public/language/gl/user.json @@ -39,6 +39,7 @@ "change_username": "Cambia-lo nome de usuario", "change_email": "Cambia-lo correo", "edit": "Editar", + "edit-profile": "Edit Profile", "default_picture": "Icona por defecto.", "uploaded_picture": "Foto subida", "upload_new_picture": "Subir unha nova foto", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Abrir ligazóns externos nunca nova pestaña", "enable_topic_searching": "Permitir buscar dentro dun tema", "topic_search_help": "Se se activa, o buscador do NodeBB superporase ao propio do navegador dentro de cada tema, permitindo buscar en todo o tema e non só naquilo que se presenta na pantalla.", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Segui-los temas nos que respostas", "follow_topics_you_create": "Segui-los temas que ti fas", "grouptitle": "Escolle o título de grupo que che gustaría amosar", diff --git a/public/language/he/error.json b/public/language/he/error.json index a5edc06abe..33972d8246 100644 --- a/public/language/he/error.json +++ b/public/language/he/error.json @@ -27,6 +27,7 @@ "password-too-long": "הסיסמה ארוכה מדי", "user-banned": "המשתמש מושעה", "user-too-new": "אנא המתן %1 שניות לפני פרסום ההודעה", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "קטגוריה אינה קיימת", "no-topic": "נושא אינו קיים", "no-post": "פוסט אינו קיים", @@ -97,5 +98,6 @@ "invite-maximum-met": "הזמנת את הכמות המירבית של אנשים (%1 מתוך %2).", "no-session-found": "לא נמצאו סשני התחברות!", "not-in-room": "משתמש זה לא בצ'אט", - "no-users-in-room": "אין משתמש בחדר הזה" + "no-users-in-room": "אין משתמש בחדר הזה", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/he/groups.json b/public/language/he/groups.json index abd3ef14d8..fe0bb93380 100644 --- a/public/language/he/groups.json +++ b/public/language/he/groups.json @@ -41,6 +41,7 @@ "details.hidden": "מוסתר", "details.hidden_help": "אם מאופשר, הקבוצה לא תופיע ברשימת הקבוצות, ומשתמשים יצטרכו להיות מוזמנים ידנית", "details.delete_group": "מחק קבוצה", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "פרטי הקבוצה עודכנו", "event.deleted": "קבוצת \"%1\" נמחקה", "membership.accept-invitation": "קבל הזמנה", diff --git a/public/language/he/modules.json b/public/language/he/modules.json index 87b52ee8a2..6b6f8c40f3 100644 --- a/public/language/he/modules.json +++ b/public/language/he/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 מקליד ...", "chat.user_has_messaged_you": "ל%1 יש הודעה עבורך.", "chat.see_all": "צפה בכל הצ'אטים", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "אנא בחר נמען על מנת לראות את היסטוריית הצ'אט איתו", "chat.no-users-in-room": "אין משתמשים בחדר הזה", "chat.recent-chats": "צ'אטים אחרונים", diff --git a/public/language/he/user.json b/public/language/he/user.json index e830f21f58..a442d5fd10 100644 --- a/public/language/he/user.json +++ b/public/language/he/user.json @@ -39,6 +39,7 @@ "change_username": "שנה שם משתמש", "change_email": "שנה מייל", "edit": "ערוך", + "edit-profile": "Edit Profile", "default_picture": "אייקון ברירת מחדל", "uploaded_picture": "התמונה הועלתה", "upload_new_picture": "העלה תמונה חדשה", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "פתח קישורים חיצוניים בכרטיסייה חדשה", "enable_topic_searching": "הפעל חיפוש בתוך נושא", "topic_search_help": "אם מאופשר, החיפוש בתוך הנושא יעקוף את שיטת החיפוש של הדפדפן, ויאפשר לך לחפש בכל הנושא - ולא רק במה שמוצג על המסך", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "עקוב אחרת נושאים שהגבת בהם", "follow_topics_you_create": "עקוב אחר נושאים שיצרת", "grouptitle": "בחר את כותרת הקבוצה שברצונך להציג", diff --git a/public/language/hu/error.json b/public/language/hu/error.json index 156b9806a5..e0744b39ca 100644 --- a/public/language/hu/error.json +++ b/public/language/hu/error.json @@ -27,6 +27,7 @@ "password-too-long": "Password too long", "user-banned": "Kitiltott felhasználó", "user-too-new": "Sorry, you are required to wait %1 second(s) before making your first post", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Nem létező kategória", "no-topic": "Nem létező téma", "no-post": "Nem létező hozzászólás", @@ -97,5 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/hu/groups.json b/public/language/hu/groups.json index 9b6032c023..0430f698e5 100644 --- a/public/language/hu/groups.json +++ b/public/language/hu/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Hidden", "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", "details.delete_group": "Delete Group", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Group details have been updated", "event.deleted": "The group \"%1\" has been deleted", "membership.accept-invitation": "Accept Invitation", diff --git a/public/language/hu/modules.json b/public/language/hu/modules.json index 848e1d8fc2..65142c04d3 100644 --- a/public/language/hu/modules.json +++ b/public/language/hu/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 éppen ír ...", "chat.user_has_messaged_you": "%1 üzenetet küldött.", "chat.see_all": "See all chats", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Válasszuk ki a címzettet és tekintsük meg a chat előzményeket", "chat.no-users-in-room": "No users in this room", "chat.recent-chats": "Legutóbbi beszélgetések", diff --git a/public/language/hu/user.json b/public/language/hu/user.json index 0322d8a95d..fd2a183e03 100644 --- a/public/language/hu/user.json +++ b/public/language/hu/user.json @@ -39,6 +39,7 @@ "change_username": "Change Username", "change_email": "Change Email", "edit": "Szerkeszt", + "edit-profile": "Edit Profile", "default_picture": "Default Icon", "uploaded_picture": "Feltöltött kép", "upload_new_picture": "Új kép feltöltése", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Témán belüli keresés bekapcsolása", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Follow topics that you reply to", "follow_topics_you_create": "Follow topics you create", "grouptitle": "Select the group title you would like to display", diff --git a/public/language/id/error.json b/public/language/id/error.json index 39415ab992..de932ffac2 100644 --- a/public/language/id/error.json +++ b/public/language/id/error.json @@ -27,6 +27,7 @@ "password-too-long": "Password too long", "user-banned": "Pengguna dibanned", "user-too-new": "Sorry, you are required to wait %1 second(s) before making your first post", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Kategori tidak ditemukan", "no-topic": "Topik tidak ditemukan", "no-post": "Post tidak ditemukan", @@ -97,5 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/id/groups.json b/public/language/id/groups.json index 750914dd01..32f99e3fdc 100644 --- a/public/language/id/groups.json +++ b/public/language/id/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Hidden", "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", "details.delete_group": "Delete Group", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Group details have been updated", "event.deleted": "The group \"%1\" has been deleted", "membership.accept-invitation": "Accept Invitation", diff --git a/public/language/id/modules.json b/public/language/id/modules.json index c087b260a9..7ddec19b96 100644 --- a/public/language/id/modules.json +++ b/public/language/id/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 sedang menulis ...", "chat.user_has_messaged_you": "%1 telah mengirimkan pesan untukmu.", "chat.see_all": "See all chats", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Mohon pilih satu penerima untuk melihat riwayat pesan percakapan", "chat.no-users-in-room": "No users in this room", "chat.recent-chats": "Percakapan terbaru", diff --git a/public/language/id/user.json b/public/language/id/user.json index c02d4258b0..4610dd8f43 100644 --- a/public/language/id/user.json +++ b/public/language/id/user.json @@ -39,6 +39,7 @@ "change_username": "Change Username", "change_email": "Change Email", "edit": "Perbarui", + "edit-profile": "Edit Profile", "default_picture": "Default Icon", "uploaded_picture": "Gambar/Foto yang Diunggah", "upload_new_picture": "Unggah Gambar/Foto Baru", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Gunakan Pencarian Di dalam Topik", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Follow topics that you reply to", "follow_topics_you_create": "Follow topics you create", "grouptitle": "Select the group title you would like to display", diff --git a/public/language/it/error.json b/public/language/it/error.json index d7be6f572b..25358c4310 100644 --- a/public/language/it/error.json +++ b/public/language/it/error.json @@ -27,6 +27,7 @@ "password-too-long": "Password too long", "user-banned": "Utente bannato", "user-too-new": "Devi attendere %1 secondi prima di creare il tuo primo post", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "La Categoria non esiste", "no-topic": "Il Topic non esiste", "no-post": "Il Post non esiste", @@ -97,5 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/it/groups.json b/public/language/it/groups.json index 9130a2135d..ca2d7f898a 100644 --- a/public/language/it/groups.json +++ b/public/language/it/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Nascosto", "details.hidden_help": "Se abilitato, questo gruppo non sarà visibile nella lista dei gruppi e gli utenti dovranno essere invitati manualmente", "details.delete_group": "Elimina il Gruppo", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "I dettagli del Gruppo sono stati aggiornati", "event.deleted": "Il gruppo \"%1\" è stato eliminato", "membership.accept-invitation": "Accetta l'invito", diff --git a/public/language/it/modules.json b/public/language/it/modules.json index 41a6a4b6a9..fd58d80dd1 100644 --- a/public/language/it/modules.json +++ b/public/language/it/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 sta scrivendo...", "chat.user_has_messaged_you": "%1 ti ha scritto.", "chat.see_all": "Vedi tutte le chat", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Si prega di selezionare un destinatario per vedere la cronologia dei messaggi", "chat.no-users-in-room": "No users in this room", "chat.recent-chats": "Chat Recenti", diff --git a/public/language/it/user.json b/public/language/it/user.json index a5f0447305..6202ea0bd8 100644 --- a/public/language/it/user.json +++ b/public/language/it/user.json @@ -39,6 +39,7 @@ "change_username": "Change Username", "change_email": "Change Email", "edit": "Modifica", + "edit-profile": "Edit Profile", "default_picture": "Default Icon", "uploaded_picture": "Foto caricata", "upload_new_picture": "Carica una nuova foto", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Apri i link web in una nuova pagina", "enable_topic_searching": "Abilita la ricerca negli argomenti", "topic_search_help": "Se abilitata, la ricerca negli argomenti ignorerà il comportamento predefinito del browser per consentirti di cercare all'interno delle discussioni, anziché soltanto nel contenuto visibile a schermo", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Segui le discussioni a cui hai risposto", "follow_topics_you_create": "Segui le discussioni che hai iniziato", "grouptitle": "Seleziona il titolo del gruppo che vorresti vedere", diff --git a/public/language/ja/error.json b/public/language/ja/error.json index 8ff2746da8..7deddf6c53 100644 --- a/public/language/ja/error.json +++ b/public/language/ja/error.json @@ -27,6 +27,7 @@ "password-too-long": "パスワードが長すぎます", "user-banned": "ユーザーは停止されています", "user-too-new": "申し訳ありません。登録後に投稿を行うには%1秒お待ち下さい。", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "カテゴリは存在しません", "no-topic": "トピックは存在しません", "no-post": "投稿は存在しません", @@ -97,5 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/ja/groups.json b/public/language/ja/groups.json index 0277cc5abb..d108373457 100644 --- a/public/language/ja/groups.json +++ b/public/language/ja/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Hidden", "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", "details.delete_group": "Delete Group", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Group details have been updated", "event.deleted": "The group \"%1\" has been deleted", "membership.accept-invitation": "Accept Invitation", diff --git a/public/language/ja/modules.json b/public/language/ja/modules.json index 701f6aa753..204c392bbb 100644 --- a/public/language/ja/modules.json +++ b/public/language/ja/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 が入力中 ...", "chat.user_has_messaged_you": "%1さんからメッセージが届いています。", "chat.see_all": "すべてのチャットを見る", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "チャットメッセージの履歴を表示するには、受信者を選択してください", "chat.no-users-in-room": "ルームには誰も居ません", "chat.recent-chats": "最近のチャット", diff --git a/public/language/ja/user.json b/public/language/ja/user.json index 50da3ac31a..539809537d 100644 --- a/public/language/ja/user.json +++ b/public/language/ja/user.json @@ -39,6 +39,7 @@ "change_username": "ユーザー名の変更", "change_email": "メール変更", "edit": "編集", + "edit-profile": "Edit Profile", "default_picture": "元のアイコン", "uploaded_picture": "アップロード済みの画像", "upload_new_picture": "新しい画像をアップロード", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "外リンクを新しいタブに開きます", "enable_topic_searching": "インートピックの検索を有効にします", "topic_search_help": "有効にしたら、インートピックの検索はブラウザの既定機能を無視して、スクリーンに示したよりトピック内からの全部を検索します", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "返信したトピックをフォローします", "follow_topics_you_create": "投稿したトピックをフォローします", "grouptitle": "好きなグループ名を選んで下さい", diff --git a/public/language/ko/error.json b/public/language/ko/error.json index e921dba067..026ba3dfb1 100644 --- a/public/language/ko/error.json +++ b/public/language/ko/error.json @@ -27,6 +27,7 @@ "password-too-long": "패스워드가 너무 깁니다.", "user-banned": "차단된 사용자입니다.", "user-too-new": "죄송합니다, 첫 번째 게시물은 %1 초 후에 작성할 수 있습니다.", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "존재하지 않는 카테고리입니다.", "no-topic": "존재하지 않는 주제입니다.", "no-post": "존재하지 않는 게시물입니다.", @@ -97,5 +98,6 @@ "invite-maximum-met": "초대가능한 사용자를 모두 초대했습니다. (%2명 중 %1을 초대)", "no-session-found": "로그인 세션을 찾을 수 없습니다.", "not-in-room": "없는 사용자입니다.", - "no-users-in-room": "사용자가 없습니다." + "no-users-in-room": "사용자가 없습니다.", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/ko/groups.json b/public/language/ko/groups.json index e1f5fa65d0..aaba4f6565 100644 --- a/public/language/ko/groups.json +++ b/public/language/ko/groups.json @@ -41,6 +41,7 @@ "details.hidden": "숨김", "details.hidden_help": "활성 시 그룹 목록에 노출되지 않습니다. 또한 구성원은 초대를 통해서만 가입이 가능합니다.", "details.delete_group": "그룹 삭제", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "그룹 정보가 업데이트 되었습니다.", "event.deleted": "%1 그룹이 삭제되었습니다.", "membership.accept-invitation": "초대 수락", diff --git a/public/language/ko/modules.json b/public/language/ko/modules.json index 2a11ff7ae0..f815b89ef4 100644 --- a/public/language/ko/modules.json +++ b/public/language/ko/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1님이 입력 중입니다.", "chat.user_has_messaged_you": "%1님이 메시지를 보냈습니다.", "chat.see_all": "모든 대화 보기", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "대화 기록을 보려면 대화 상대를 선택하세요.", "chat.no-users-in-room": "사용자가 없습니다.", "chat.recent-chats": "최근 대화 내용", diff --git a/public/language/ko/notifications.json b/public/language/ko/notifications.json index 40a4b6af0b..cf7b14f2b0 100644 --- a/public/language/ko/notifications.json +++ b/public/language/ko/notifications.json @@ -30,7 +30,7 @@ "user_started_following_you_dual": "%1님과 %2님이 당신을 팔로우 시작했습니다.", "user_started_following_you_multiple": "%1님외 %2명이 당신을 팔로우 시작했습니다.", "new_register": "%1님이 가입요청을 했습니다.", - "new_register_multiple": "There are %1 registration requests awaiting review.", + "new_register_multiple": "%1 개의 회원가입 요청이 승인 대기중입니다.", "email-confirmed": "확인된 이메일", "email-confirmed-message": "이메일을 확인해주셔서 감사합니다. 계정이 완전히 활성화되었습니다.", "email-confirm-error-message": "이메일 주소를 검증하지 못했습니다. 코드가 올바르지 않거나 만료되었을 수 있습니다.", diff --git a/public/language/ko/user.json b/public/language/ko/user.json index afb32ac984..3ff7c3244e 100644 --- a/public/language/ko/user.json +++ b/public/language/ko/user.json @@ -39,6 +39,7 @@ "change_username": "사용자명 변경", "change_email": "이메일 변경", "edit": "프로필 수정", + "edit-profile": "Edit Profile", "default_picture": "기본 아이콘", "uploaded_picture": "사진 업로드", "upload_new_picture": "새 사진 업로드", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "외부 링크를 새로운 탭을 사용하여 열람", "enable_topic_searching": "주제 내 검색 허용", "topic_search_help": "활성화 된후 브라우저의 기본 페이지 검색 기능을 연관 주제 검색 기능으로 대신하고 화면에 보여지는 것 뿐만 아니라 주제와 연관된 모든것을 검색합니다.", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "답글 단 게시물을 팔로우 합니다.", "follow_topics_you_create": "생성한 주제를 팔로우 합니다.", "grouptitle": "표시할 그룹 이름을 선택하세요.", diff --git a/public/language/lt/error.json b/public/language/lt/error.json index c587a40803..e23088894e 100644 --- a/public/language/lt/error.json +++ b/public/language/lt/error.json @@ -27,6 +27,7 @@ "password-too-long": "Password too long", "user-banned": "Vartotojas užblokuotas", "user-too-new": "Atsiprašome, jūs įpareigoti palaukti %1 sekunde(s) prieš rašant pirmą pranešimą", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Tokios kategorijos nėra", "no-topic": "Tokios temos nėra", "no-post": "Tokio įrašo nėra", @@ -97,5 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/lt/groups.json b/public/language/lt/groups.json index 982d48e853..cbb1b4118f 100644 --- a/public/language/lt/groups.json +++ b/public/language/lt/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Paslėptas", "details.hidden_help": "Jeigu įjungta, ši grupė bus nerodo grupių sąraše, ir vartotojus reikės kviest rankiniu būdu", "details.delete_group": "Ištrinti grupe", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Grupės informacija atnaujinta", "event.deleted": "Grupė \"%1\" pašalinta", "membership.accept-invitation": "Priimti Kvietimą", diff --git a/public/language/lt/modules.json b/public/language/lt/modules.json index 241dffe7af..252dd3bfa3 100644 --- a/public/language/lt/modules.json +++ b/public/language/lt/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 dabar rašo...", "chat.user_has_messaged_you": "%1 parašė jums.", "chat.see_all": "See all chats", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Prašome pasirikti gavėją, norėdami peržiūrėti žinučių istoriją", "chat.no-users-in-room": "No users in this room", "chat.recent-chats": "Paskutiniai susirašinėjimai", diff --git a/public/language/lt/user.json b/public/language/lt/user.json index 9f4884f53b..13f3b36b7b 100644 --- a/public/language/lt/user.json +++ b/public/language/lt/user.json @@ -39,6 +39,7 @@ "change_username": "Change Username", "change_email": "Change Email", "edit": "Redaguoti", + "edit-profile": "Edit Profile", "default_picture": "Default Icon", "uploaded_picture": "Įkeltas paveikslėlis", "upload_new_picture": "Įkelti naują paveikslėlį", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Atidaryti išeinančias nuorodas naujam skirtuke", "enable_topic_searching": "Įjungti Temų Ieškojimą ", "topic_search_help": "Jeigu įjungtas, temų ieškojimas, nepaisys naršyklės puslapio ieškojimo, ir pradės ieškoti tik toje temoje kuri bus rodoma ekrane", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Sekti tas temas kur atrašai tu", "follow_topics_you_create": "Sekti tas temas kurias sukuri tu", "grouptitle": "Pasirinkite grupės pavadinimą kurį norėtumėte kad atvaizduotu", diff --git a/public/language/ms/error.json b/public/language/ms/error.json index 13c72ed7de..7840393a92 100644 --- a/public/language/ms/error.json +++ b/public/language/ms/error.json @@ -14,7 +14,7 @@ "invalid-password": "Kata laluan salah!", "invalid-username-or-password": "Sila tentukan kedua-dua nama pengguna dan kata laluan", "invalid-search-term": "Terma pencarian tak sah", - "invalid-pagination-value": "Invalid pagination value, must be at least %1 and at most %2", + "invalid-pagination-value": "Nombor halaman tidak sah, mesti tidak kurang dari %1 dan tidak lebih dari %2", "username-taken": "Nama pengguna telah digunakan", "email-taken": "Emel telah digunakan", "email-not-confirmed": "Emel anda belum disahkan lagi, sila klik sini untuk mengesahkan emel anda.", @@ -24,9 +24,10 @@ "confirm-email-already-sent": "Pengesahan emel telah dihantar, sila tunggu %1 minit() untuk menghantar yang baru.", "username-too-short": "Nama pengunna terlalu pendek", "username-too-long": "Nama pengunna terlalu panjang", - "password-too-long": "Password too long", + "password-too-long": "Kata laluan terlalu panjang", "user-banned": "Pengguna diharamkan", "user-too-new": "Maaf, anda dikehendaki menunggu %1 saat() sebelum membuat kiriman pertama anda", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Kategori tidak wujud", "no-topic": "Topik tidak wujud", "no-post": "Kiriman tidak wujud", @@ -49,9 +50,9 @@ "too-many-tags": "Tag terlalu banyak. Topik tidak boleh lebih %1 tag()", "still-uploading": "Sila tunggu muatnaik untuk siap.", "file-too-big": "Maksimum saiz fail yang dibenarkan ialah %1 kB - sila muatnaik fail yang lebih kecil", - "guest-upload-disabled": "Guest uploading has been disabled", - "already-favourited": "You have already bookmarked this post", - "already-unfavourited": "You have already unbookmarked this post", + "guest-upload-disabled": "Tetamu tidak dibenarkan memuatnaik fail", + "already-favourited": "Anda telah pun meletakkan penanda pada kiriman ini", + "already-unfavourited": "Anda telah pun membuang penanda untuk kiriman ini", "cant-ban-other-admins": "Anda tidak boleh haramkan admin / pentadbir!", "cant-remove-last-admin": "Anda satu-satunya pentadbir. Tambah pentadbir lain sebelum membuang diri anda sebagai pentadbir", "invalid-image-type": "Jenis imej tak sah. Jenis yang dibenarkan ialah: %1", @@ -77,13 +78,13 @@ "about-me-too-long": "Maaf, penerangan tentang anda tidak boleh lebih %1 aksara().", "cant-chat-with-yourself": "Anda tidak boleh sembang dengan diri sendiri!", "chat-restricted": "Pengguna ini menyekat ruangan sembangnya. Dia hendaklah mengikut anda sebelum kalian dapat bersembang", - "chat-disabled": "Chat system disabled", + "chat-disabled": "Sistem borak tidak diaktifkan", "too-many-messages": "Anda menghantar terlalu banyak pesanan, sila tunggu seketika.", "invalid-chat-message": "Mesej borak tidak sah", "chat-message-too-long": "Mesej borak terlalu panjang", - "cant-edit-chat-message": "You are not allowed to edit this message", - "cant-remove-last-user": "You can't remove the last user", - "cant-delete-chat-message": "You are not allowed to delete this message", + "cant-edit-chat-message": "Anda tidak dibenarkan menyunting mesej ini", + "cant-remove-last-user": "Anda tidak boleh membuang pengguna akhir", + "cant-delete-chat-message": "Anda tidak dibenarkan memadamkan mesej ini", "reputation-system-disabled": "Sistem reputasi dilumpuhkan.", "downvoting-disabled": "Undi turun dilumpuhkan", "not-enough-reputation-to-downvote": "Anda tidak mempunyai reputasi mencukupi untuk mengundi turun kiriman ini", @@ -94,8 +95,9 @@ "parse-error": "Sesuatu tidak kena berlaku ketika menghuraikan repson pelayan (server)", "wrong-login-type-email": "Sila guna emel anda untuk log masuk", "wrong-login-type-username": "Sila guna nama pengguna anda untuk log masuk", - "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", - "no-session-found": "No login session found!", - "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "invite-maximum-met": "Anda telah menjemput semaksima jumlah orang (%1 daripada %2).", + "no-session-found": "Tiada sesyen log masuk dijumpai", + "not-in-room": "Pengguna tiada dalam bilik", + "no-users-in-room": "Tiada pengguna dalam bilik ini", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/ms/groups.json b/public/language/ms/groups.json index 6ddfd1c2a2..3c84b65c91 100644 --- a/public/language/ms/groups.json +++ b/public/language/ms/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Sembunyi", "details.hidden_help": "Jika dibolehkan, kumpulan ini tidak akan dijumpai di senarai kumpulan, dan pengguna hendaklah di jemput secara manual", "details.delete_group": "Padam Kumpulan", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Perincian kumpulan telah dikemaskini", "event.deleted": "Kumpulan \"%1\" telah dipadam", "membership.accept-invitation": "Terima Jemputan", diff --git a/public/language/ms/modules.json b/public/language/ms/modules.json index 10b3edf2e0..996443d174 100644 --- a/public/language/ms/modules.json +++ b/public/language/ms/modules.json @@ -6,8 +6,9 @@ "chat.user_typing": "%1 menaip", "chat.user_has_messaged_you": "%1 mesej anda.", "chat.see_all": "Lihat semua", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Sila pilih penerima untuk lihat sejarah sembang", - "chat.no-users-in-room": "No users in this room", + "chat.no-users-in-room": "Tiada pengguna dalam bilik ini", "chat.recent-chats": "Sembang Terbaru", "chat.contacts": "Hubungi", "chat.message-history": "Sejarah Pesanan", diff --git a/public/language/ms/pages.json b/public/language/ms/pages.json index efc15626e0..c215ed4197 100644 --- a/public/language/ms/pages.json +++ b/public/language/ms/pages.json @@ -6,12 +6,12 @@ "popular-month": "Topik Popular Bulan Ini", "popular-alltime": "Topik Popular Sepanjang Masa", "recent": "Topik Baru", - "flagged-posts": "Flagged Posts", + "flagged-posts": "Kiriman Dipalang", "users/online": "Pengguna Atas Talian", "users/latest": "Pengguna Terkini", "users/sort-posts": "Pengguna Mengikut Kiriman Terbanyak", "users/sort-reputation": "Pengguna Mengikut Reputasi Terbanyak", - "users/banned": "Banned Users", + "users/banned": "Pengguna Diharam", "users/search": "Carian Pengguna", "notifications": "Makluman", "tags": "Tag", @@ -33,13 +33,13 @@ "account/posts": "Kiriman oleh %1", "account/topics": "Topik olej %1", "account/groups": "Kumpulan %1", - "account/favourites": "%1's Bookmarked Posts", + "account/favourites": "Kiriman Ditanda Oleh %1", "account/settings": "Tetapan Pengguna", "account/watched": "Topik Diperhati Oleh %1", - "account/upvoted": "Posts upvoted by %1", - "account/downvoted": "Posts downvoted by %1", - "account/best": "Best posts made by %1", - "confirm": "Email Confirmed", + "account/upvoted": "Kiriman diundi naik oleh %1", + "account/downvoted": "Kiriman dibuang undi oleh %1", + "account/best": "Kiriman Terbaik Oleh %1", + "confirm": "Emel Telah Disahkan", "maintenance.text": "%1 sedang berada dalam mod pembaikpulihan. Sila cuba lagi nanti.", "maintenance.messageIntro": "Tambahan, admin meninggalkan mesej ini :", "throttled.text": "%1 tiada buat masa ini kerana permintaan yang berlebihan. Sila datang lagi lain kali." diff --git a/public/language/ms/user.json b/public/language/ms/user.json index 10e3082736..39d38cc538 100644 --- a/public/language/ms/user.json +++ b/public/language/ms/user.json @@ -39,6 +39,7 @@ "change_username": "Tukar Nama Pengguna", "change_email": "Tukar Email", "edit": "Kemaskini", + "edit-profile": "Edit Profile", "default_picture": "Default Icon", "uploaded_picture": "Muatnaik gambak", "upload_new_picture": "Muatnaik gambar baru", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Buka pautan luar di tab yang baru", "enable_topic_searching": "Aktifkan Pencarian Dalam-Topik", "topic_search_help": "Jika diaktifkan, pencarian dalam-topik akan membatalkan fungsi asal pencarian pelayan dan membenarkan anda untuk mencari seluruh topik, daripada menunjukkan apa yang terdapat pada skrin sahaja", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Ikut topik yang anda balas", "follow_topics_you_create": "Ikut topik yang anda buat", "grouptitle": "Pilih nama kumpulan yang anda ingin tunjukkan", diff --git a/public/language/nb/error.json b/public/language/nb/error.json index bf16914921..773e406837 100644 --- a/public/language/nb/error.json +++ b/public/language/nb/error.json @@ -27,6 +27,7 @@ "password-too-long": "Password too long", "user-banned": "Bruker utestengt", "user-too-new": "Beklager, du må vente %1 sekund(er) før du oppretter ditt første innlegg", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Kategorien eksisterer ikke", "no-topic": "Emne eksisterer ikke", "no-post": "Innlegg eksisterer ikke", @@ -97,5 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/nb/groups.json b/public/language/nb/groups.json index 62da7c12aa..9354de5542 100644 --- a/public/language/nb/groups.json +++ b/public/language/nb/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Skjult", "details.hidden_help": "Hvis aktivert, vil ikke denne gruppen bli funnet i gruppelisten, og brukere må inviteres manuelt", "details.delete_group": "Slett gruppe", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Gruppedetaljer har blitt oppdatert", "event.deleted": "Gruppen \"%1\" har blitt slettet", "membership.accept-invitation": "Aksepter invitasjon", diff --git a/public/language/nb/modules.json b/public/language/nb/modules.json index 4427aba467..a25a971028 100644 --- a/public/language/nb/modules.json +++ b/public/language/nb/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 skriver ...", "chat.user_has_messaged_you": "%1 har sendt deg en melding", "chat.see_all": "Se alle samtaler", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Vennligst velg en mottaker for å vise chatte-melding historikk", "chat.no-users-in-room": "No users in this room", "chat.recent-chats": "Nylige chatter", diff --git a/public/language/nb/user.json b/public/language/nb/user.json index a39a1787db..48cc0e0359 100644 --- a/public/language/nb/user.json +++ b/public/language/nb/user.json @@ -39,6 +39,7 @@ "change_username": "Change Username", "change_email": "Change Email", "edit": "Endre", + "edit-profile": "Edit Profile", "default_picture": "Default Icon", "uploaded_picture": "Opplastet bilde", "upload_new_picture": "Last opp nytt bidle", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Åpne utgående lenker i en ny fane", "enable_topic_searching": "Aktiver søk-i-emne", "topic_search_help": "Hvis søk-i-emne er aktivert, overstyres nettleserens standard sidesøk og gir mulighet til å søke gjennom hele emnet, ikke bare det som vises på skjermen", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Følg emner du besvarer", "follow_topics_you_create": "Følg emner du oppretter", "grouptitle": "Velg gruppetittelen du vil vise", diff --git a/public/language/nl/email.json b/public/language/nl/email.json index 8723ae98aa..829ad4fcdc 100644 --- a/public/language/nl/email.json +++ b/public/language/nl/email.json @@ -5,26 +5,26 @@ "greeting_no_name": "Hallo", "greeting_with_name": "Hallo %1", "welcome.text1": "Bedank voor het registreren bij %1!", - "welcome.text2": "Om de account volledig te activeren, dienen de instructies uit het bevestigingsbericht opgevolgd te worden. Controleer daarom nu eerst de e-mail inbox voor de activeringscode en volg de link in het bericht.", + "welcome.text2": "Om je account volledig te activeren, moet je de instructies uit het bevestigingsbericht opvolgen. Controleer daarom nu eerst je e-mail inbox voor de activeringscode en volg de link in het bericht.", "welcome.text3": "Een administrator heeft uw registratie geaccepteerd. U kan nu inloggen met uw gebruikersnaam en wachtwoord.", - "welcome.cta": "Klik hier voor bevestigen van het e-mailadres", + "welcome.cta": "Klik hier om je e-mailadres te bevestigen", "invitation.text1": "%1 heeft u uitgenodigd voor %2 ", - "invitation.ctr": "Klik hier om uw account aan te maken.", - "reset.text1": "Wij ontvingen zojuist een verzoek om het wachtwoord van de account, bij onze website bekend als gekoppeld aan dit e-mailadres, te herstellen. Is dit verzoek niet bekend en geautoriseerd, dan kan dit bericht genegeerd worden.", - "reset.text2": "Om het wachtwoord opnieuw in te stellen, klik op deze link:", - "reset.cta": "Klik hier voor wachtwoordherstel", + "invitation.ctr": "Klik hier om je account aan te maken.", + "reset.text1": "We hebben een verzoek ontvangen om je wachtwoord te herstellen, wellicht omdat je hem bent vergeten. Indien dit niet het geval is kan je deze e-mail gewoon negeren.", + "reset.text2": "Om je wachtwoord opnieuw in te stellen klik je op deze link:", + "reset.cta": "Klik hier om je wachtwoord te resetten", "reset.notify.subject": "Wachtwoord succesvol gewijzigd", - "reset.notify.text1": "Op %1 is het wachtwoord van de bij ons geregistreerde gebruikersaccount succesvol gewijzigd.", - "reset.notify.text2": "Neem onmiddellijk contact met een beheerder op wanneer geen toestemming voor deze actie gegeven is en deze niet vanuit hier aangevraagd is.", + "reset.notify.text1": "Op %1 is het wachtwoord van je account succesvol gewijzigd.", + "reset.notify.text2": "Neem onmiddellijk contact met een beheerder op wanneer je hiervoor geen toestemming hebt gegeven.", "digest.notifications": "Er zijn ongelezen notificaties van %1:", "digest.latest_topics": "De meest recente onderwerpen van %1", "digest.cta": "Klik hier om deze website te bezoeken %1 ", - "digest.unsub.info": "Deze samenvatting is vanwege instellingen voor abonnementen van de gebruikersaccount door ons verzonden.", - "digest.no_topics": "Er zijn geen actieve onderwerpen geweest %1", + "digest.unsub.info": "Deze samenvatting hebben we naar je verzonden omdat je dat hebt ingesteld.", + "digest.no_topics": "In de afgelopen %1 zijn er geen actieve onderwerpen geweest.", "digest.day": "dag", "digest.week": "week", "digest.month": "maand", - "notif.chat.subject": "Nieuw chatbericht ontvangen van %1", + "notif.chat.subject": "Nieuw chatbericht van %1", "notif.chat.cta": "Klik hier om het gesprek te hervatten", "notif.chat.unsub.info": "Deze notificatie is verzonden vanwege de gebruikersinstellingen voor abonnementen.", "notif.post.cta": "Klik hier om het volledige bericht te lezen", diff --git a/public/language/nl/error.json b/public/language/nl/error.json index b23072f895..dba42057dd 100644 --- a/public/language/nl/error.json +++ b/public/language/nl/error.json @@ -1,10 +1,10 @@ { - "invalid-data": "Ongeldige Data", + "invalid-data": "Ongeldige data", "not-logged-in": "Het lijkt erop dat je niet ingelogd bent.", "account-locked": "Dit account is tijdelijk vergrendeld", "search-requires-login": "Zoeken vereist een account - meld je aan of registreer je om te zoeken.", "invalid-cid": "Ongeldige categoriesleutel", - "invalid-tid": "Ongeldig id voor onderwerp", + "invalid-tid": "Ongeldig onderwerp ID", "invalid-pid": "Ongeldig berichtkenmerk", "invalid-uid": "Ongeldig gebruikerskenmerk", "invalid-username": "Ongeldige gebruikersnaam", @@ -27,6 +27,7 @@ "password-too-long": "Wachtwoord is te lang", "user-banned": "Gebruiker verbannen", "user-too-new": "Helaas, het is een vereiste om %1 seconde(n) te wachten voordat het eerste bericht geplaatst kan worden.", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Categorie bestaat niet", "no-topic": "Onderwerp bestaat niet", "no-post": "Bericht bestaat niet", @@ -51,17 +52,17 @@ "file-too-big": "Maximum toegestane bestandsgrootte is %1 kB - probeer een kleiner bestand te verzenden", "guest-upload-disabled": "Uploads voor gasten zijn uitgeschaleld ", "already-favourited": "Je hebt dit bericht al als favoriet toegevoegd", - "already-unfavourited": "Je hebt dit bericht al verwijderd uit de favorieten", + "already-unfavourited": "Je hebt dit bericht al verwijderd uit je favorieten", "cant-ban-other-admins": "Het is niet toegestaan andere beheerders te verbannen!", - "cant-remove-last-admin": "U bent de enige administrator. Voeg een andere gebruiker toe als administrator voordat u uw zelf verwijderd als admin", + "cant-remove-last-admin": "Je bent de enige beheerder. Stel eerst een andere gebruiker als beheerder in voordat je jezelf geen beheerder meer maakt.", "invalid-image-type": "Ongeldig bestandstype afbeelding. Deze afbeelding is van een bestandstype dat niet ondersteund wordt. Toegestane bestandstypes voor afbeeldingsbestanden zijn: %1", "invalid-image-extension": "Ongeldig bestandstype afbeelding", "invalid-file-type": "Dit bestandstype wordt niet ondersteund. Toegestane bestandstypen zijn: %1", - "group-name-too-short": "De groepsnaam bevat niet genoeg tekens", + "group-name-too-short": "De groepsnaam is te kort", "group-already-exists": "Een groep met deze naam bestaat al", - "group-name-change-not-allowed": "Het veranderen van de groepsnaam is niet toegestaan!", + "group-name-change-not-allowed": "Het aanpassen van de groepsnaam is niet toegestaan", "group-already-member": "Deze gebruiker is al lid van deze groep", - "group-not-member": "Deze gebruiker is niet lid van deze groep", + "group-not-member": "Deze gebruiker is geen lid van deze groep", "group-needs-owner": "De groep vereist ten minste 1 eigenaar", "group-already-invited": "Deze gebruiker is al uitgenodigt", "group-already-requested": "Uw lidmaatschap aanvraag is al verstuurd", @@ -78,24 +79,25 @@ "cant-chat-with-yourself": "Het is niet mogelijk om met jezelf een chatgesprek te houden.", "chat-restricted": "Deze gebruiker heeft beperkingen aan de chatfunctie opgelegd waardoor deze eerst iemand moet volgen voordat deze persoon een nieuwe chat mag initiëren.", "chat-disabled": "Chat systeem uitgeschakeld", - "too-many-messages": "Er zijn in korte tijd teveel berichten verzonden, een moment geduld.", + "too-many-messages": "Je hebt in korte tijd veel berichten verstuurd, als je even wacht mag je weer berichten sturen.", "invalid-chat-message": "Ongeldig bericht", "chat-message-too-long": "Het chatbericht is te lang", "cant-edit-chat-message": "Het is niet toegestaan om dit bericht aan te passen", "cant-remove-last-user": "Je kan de laatste gebruiker niet verwijderen", "cant-delete-chat-message": "Het is niet toegestaan om dit bericht te verwijderen", "reputation-system-disabled": "Reputatie systeem is uitgeschakeld.", - "downvoting-disabled": "Negatief stemmen staat uitgeschakeld.", - "not-enough-reputation-to-downvote": "Dit gebruikersaccount beschikt over onvoldoende reputatie om een negatieve stem uit te mogen brengen.", - "not-enough-reputation-to-flag": "Onvoldoende reputatie om dit bericht aan beheerders te mogen melden.", - "already-flagged": "U heeft deze post al gerapporteerd", - "reload-failed": "Tijdens het herladen van \"%1\" is NodeBB een fout of probleem tegen gekomen. NodeBB blijft operationeel. Echter het is verstandig om de oorzaak te onderzoeken en wellicht de vorige actie, voor het herladen, ongedaan te maken.", + "downvoting-disabled": "Negatief stemmen is uitgeschakeld", + "not-enough-reputation-to-downvote": "Je hebt onvoldoende reputatie om een negatieve stem uit te mogen brengen", + "not-enough-reputation-to-flag": "Je hebt onvoldoende reputatie om dit bericht aan de beheerders te mogen melden", + "already-flagged": "Je hebt deze post al gerapporteerd", + "reload-failed": "Tijdens het herladen van \"%1\" is NodeBB een fout of probleem tegengekomen. NodeBB blijft operationeel. Echter het is verstandig om de oorzaak te onderzoeken en wellicht de vorige actie, voor het herladen, ongedaan te maken.", "registration-error": "Fout tijdens registratie", "parse-error": "Tijdens het verwerken van het antwoord van de server is er iets misgegaan.", - "wrong-login-type-email": "Gebruik het e-mailadres voor aanmelden", - "wrong-login-type-username": "Geef de gebruikersnaam voor aanmelden", + "wrong-login-type-email": "Gebruik je e-mailadres om in te loggen", + "wrong-login-type-username": "Gebruik je gebruikersnaam om in te loggen", "invite-maximum-met": "Je heb het maximum aantal mensen uitgenodigd (%1 van de %2).", "no-session-found": "Geen login sessie gevonden!", - "not-in-room": "Geen gebruiker in deze chat room", - "no-users-in-room": "Er zijn geen gebruikers in deze chat" + "not-in-room": "Gebruiker niet in de chat", + "no-users-in-room": "Er zijn geen gebruikers in deze chat", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/nl/global.json b/public/language/nl/global.json index 65ff6ff8f4..d1dc94a360 100644 --- a/public/language/nl/global.json +++ b/public/language/nl/global.json @@ -2,9 +2,9 @@ "home": "Home", "search": "Zoeken", "buttons.close": "Sluiten", - "403.title": "Toegang Geweigerd", - "403.message": "Deze account heeft onvoldoende systeemrechten om toegang tot de pagina te krijgen.", - "403.login": "Wellicht proberen aan te melden?", + "403.title": "Toegang geweigerd", + "403.message": "Het lijkt erop dat je op een pagina beland bent waar je geen toegang tot hebt.", + "403.login": "Je kan proberen in te loggen?", "404.title": "Niet gevonden", "404.message": "Deze pagina bestaat niet. Klik hier om naar de hoofdpagina van deze website te navigeren.", "500.title": "Interne fout.", @@ -12,8 +12,8 @@ "register": "Registeren", "login": "Login", "please_log_in": "Aanmelden", - "logout": "Afmelden", - "posting_restriction_info": "Momenteel mogen alleen geregistreerde leden reageren. Klik om naar de aanmeldpagina te gaan.", + "logout": "Uitloggen", + "posting_restriction_info": "Reageren is momenteel beperkt tot geregistreerde leden, klik hier om in te loggen.", "welcome_back": "Welkom terug", "you_have_successfully_logged_in": "Aanmelden succesvol", "save_changes": "Wijzigingen opslaan", @@ -42,7 +42,7 @@ "alert.success": "Succes", "alert.error": "Fout", "alert.banned": "Verbannen", - "alert.banned.message": "Deze account is verbannen en wordt automatisch afgemeld.", + "alert.banned.message": "Je bent verbannen en wordt automatisch uitgelogd.", "alert.unfollow": "%1 wordt niet langer gevolgd!", "alert.follow": "%1 wordt nu gevolgd!", "online": "Online", @@ -71,10 +71,10 @@ "recentposts": "Recente berichten", "recentips": "IP-adressen van recente gebruikers", "away": "Afwezig", - "dnd": "Niet Storen", + "dnd": "Niet storen", "invisible": "Onzichtbaar", "offline": "Offline", - "email": "E-mailadres", + "email": "E-mail", "language": "Taal", "guest": "Gast", "guests": "Gasten", @@ -85,7 +85,7 @@ "unfollow": "Ontvolgen", "delete_all": "Alles verwijderen", "map": "Kaart", - "sessions": "Login Sessies", + "sessions": "Login sessies", "ip_address": "IP Adres", "enter_page_number": "Voer paginanummer in", "upload_file": "Upload bestand", diff --git a/public/language/nl/groups.json b/public/language/nl/groups.json index 72702a3fe4..2bf421bd5b 100644 --- a/public/language/nl/groups.json +++ b/public/language/nl/groups.json @@ -1,9 +1,9 @@ { "groups": "Groepen", - "view_group": "Bekijk Groep", + "view_group": "Bekijk groep", "owner": "Groepseigenaar", "new_group": "Nieuwe groep aanmaken", - "no_groups_found": "Geen groepen voor weergave", + "no_groups_found": "Er zijn geen groepen om weer te geven", "pending.accept": "Accepteer", "pending.reject": "Afwijzen", "pending.accept_all": "Iedereen accepteren", @@ -41,6 +41,7 @@ "details.hidden": "Niet getoond", "details.hidden_help": "Indien geactiveerd zal deze groep niet getoond worden in de groepslijst en zullen gebruikers handmatig uitgenodigd moeten worden.", "details.delete_group": "Groep verwijderen", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Groepsdetails zijn bijgewerkt", "event.deleted": "De groep \"%1\" is verwijderd", "membership.accept-invitation": "Uitnodiging accepteren", diff --git a/public/language/nl/login.json b/public/language/nl/login.json index 0e2a65a11a..9b84acdc8a 100644 --- a/public/language/nl/login.json +++ b/public/language/nl/login.json @@ -1,11 +1,11 @@ { "username-email": "Gebruikersnaam / Email", "username": "Gebruikersnaam", - "email": "Email", + "email": "E-mail", "remember_me": "Aangemeld blijven?", "forgot_password": "Wachtwoord vergeten?", "alternative_logins": "Andere manieren van aanmelden", "failed_login_attempt": "Aanmelden niet geslaagd. Probeer het nog eens.", - "login_successful": "Aanmelden geslaagd!", + "login_successful": "Je bent succesvol ingelogd!", "dont_have_account": "Geen gebruikersaccount?" } \ No newline at end of file diff --git a/public/language/nl/modules.json b/public/language/nl/modules.json index e9649e27a2..c04af0d2fe 100644 --- a/public/language/nl/modules.json +++ b/public/language/nl/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 is aan het typen ...", "chat.user_has_messaged_you": "%1 heeft een bericht gestuurd", "chat.see_all": "Laat alle chats zien", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Selecteer een ontvanger om de chatgeschiedenis in te zien", "chat.no-users-in-room": "Geen gebruikers in deze chat room", "chat.recent-chats": "Recent gevoerde gesprekken", @@ -16,7 +17,7 @@ "chat.seven_days": "7 dagen", "chat.thirty_days": "30 dagen", "chat.three_months": "3 maanden", - "chat.delete_message_confirm": "Weet u het zeker dat u dit bericht wilt verwijderen?", + "chat.delete_message_confirm": "Weet je zeker dat je dit bericht wilt verwijderen?", "chat.roomname": "Chat Room %1", "chat.add-users-to-room": "Voeg gebruikers toe aan deze chat room", "composer.compose": "Samenstellen", @@ -25,11 +26,11 @@ "composer.user_said_in": "%1 zegt in %2:", "composer.user_said": "%1 zegt:", "composer.discard": "Bericht plaatsen annuleren?", - "composer.submit_and_lock": "Plaats een bericht en vergrendel direct het onderwerp", + "composer.submit_and_lock": "Bericht plaatsen en sluiten", "composer.toggle_dropdown": "Keuzelijst schakelen", "composer.uploading": "Uploaden van %1", "bootbox.ok": "OK", - "bootbox.cancel": "Anuleren", + "bootbox.cancel": "Annuleren", "bootbox.confirm": "Bevestig", "cover.dragging_title": "Omslag Foto Positionering", "cover.dragging_message": "Sleep de omslag foto voor de gewilde positie en klik \"Opslaan\"", diff --git a/public/language/nl/notifications.json b/public/language/nl/notifications.json index 984c39b4be..a3917e238e 100644 --- a/public/language/nl/notifications.json +++ b/public/language/nl/notifications.json @@ -8,7 +8,7 @@ "outgoing_link_message": "U verlaat nu %1", "continue_to": "Door naar %1", "return_to": "Terug naar %1", - "new_notification": "Nieuwe melding", + "new_notification": "Nieuwe notificatie", "you_have_unread_notifications": "Je hebt nieuwe notificaties.", "new_message_from": "Nieuw bericht van %1", "upvoted_your_post_in": "%1 heeft voor een bericht gestemd in %2.", @@ -30,9 +30,9 @@ "user_started_following_you_dual": "%1 en %2 volgen jou nu.", "user_started_following_you_multiple": "%1 en %2 andere volgen jou nu.", "new_register": "%1 heeft een registratie verzoek aangevraagd.", - "new_register_multiple": "There are %1 registration requests awaiting review.", + "new_register_multiple": "Er is/zijn %1 registratieverzoek(en) die wacht(en) op goedkeuring.", "email-confirmed": "E-mailadres bevestigd", - "email-confirmed-message": "Bedankt voor het bevestigen van je e-mailadres. Dit account is nu volledig geactiveerd.", + "email-confirmed-message": "Bedankt voor het bevestigen van je e-mailadres. Je account is nu volledig geactiveerd.", "email-confirm-error-message": "Er was een probleem met het bevestigen van dit e-mailadres. Misschien is de code niet goed ingevoerd of was de beschikbare tijd inmiddels verstreken.", "email-confirm-sent": "Bevestigingsmail verstuurd." } \ No newline at end of file diff --git a/public/language/nl/register.json b/public/language/nl/register.json index ed4b13a411..70d1f69af3 100644 --- a/public/language/nl/register.json +++ b/public/language/nl/register.json @@ -1,10 +1,10 @@ { "register": "Registreren", - "help.email": "Je email is standaard verborgen voor andere gebruikers.", + "help.email": "E-mailadressen zijn standaard verborgen voor andere gebruikers.", "help.username_restrictions": "Een unieke gebruikersnaam tussen %1 en %2 karakters. Anderen kunnen je vermelden met @gebruikersnaam.", "help.minimum_password_length": "Je wachtwoord moet tenminste %1 karakters lang zijn.", - "email_address": "Email Adres", - "email_address_placeholder": "Vul Email Adres in", + "email_address": "E-mailadres", + "email_address_placeholder": "Vul e-mailadres in", "username": "Gebruikersnaam", "username_placeholder": "Vul Gebruikersnaam in", "password": "Wachtwoord", @@ -12,8 +12,8 @@ "confirm_password": "Bevestig Wachtwoord", "confirm_password_placeholder": "Bevestig Wachtwoord", "register_now_button": "Nu Registreren", - "alternative_registration": "Alternatieve Registratie", + "alternative_registration": "Alternatieve registratie", "terms_of_use": "Gebruiksvoorwaarden", - "agree_to_terms_of_use": "Ik ga akkoord van de Gebruiksvoorwaarden", - "registration-added-to-queue": "Uw registratie is toegevoegd aan de wachtrij. U krijgt een email wanneer uw registratie is geaccepteerd " + "agree_to_terms_of_use": "Ik ga akkoord met de gebruiksvoorwaarden", + "registration-added-to-queue": "Het registratieverzoek is toegevoegd aan de wachtrij. Een bericht wordt naar het opgegeven emailadres gestuurd wanneer de registratie is goedgekeurd." } \ No newline at end of file diff --git a/public/language/nl/reset_password.json b/public/language/nl/reset_password.json index a156d0bf1c..c5b9ef1a9f 100644 --- a/public/language/nl/reset_password.json +++ b/public/language/nl/reset_password.json @@ -12,6 +12,6 @@ "password_reset_sent": "Het bericht met daarin een link en de vervolgstappen voor het wachtwoordherstel, is verzonden", "invalid_email": "Onbekend e-mailadres!", "password_too_short": "Het opgegeven wachtwoord bevat te weinig tekens. Kies een veiliger wachtwoord met meer tekens.", - "passwords_do_not_match": "De twee opgegeven wachtwoorden komen niet overeen`", + "passwords_do_not_match": "De twee opgegeven wachtwoorden komen niet overeen", "password_expired": "Het huidige wachtwoord is verlopen en er dient een nieuwe gekozen te worden" } \ No newline at end of file diff --git a/public/language/nl/search.json b/public/language/nl/search.json index 5e5e7224f0..5e6d54ffee 100644 --- a/public/language/nl/search.json +++ b/public/language/nl/search.json @@ -1,7 +1,7 @@ { "results_matching": "%1 overeenkomstige resultaten \"%2\", (%3 seconds)", "no-matches": "Geen overeenkomstige resultaten gevonden", - "advanced-search": "Geavanceerde Zoeken", + "advanced-search": "Geavanceerd zoeken", "in": "in", "titles": "Titels", "titles-posts": "Titels en berichten", diff --git a/public/language/nl/success.json b/public/language/nl/success.json index e418f7e610..638e1bdcf4 100644 --- a/public/language/nl/success.json +++ b/public/language/nl/success.json @@ -1,6 +1,6 @@ { "success": "Geslaagd", "topic-post": "Je bericht is met succes geplaatst.", - "authentication-successful": "Authenticatie Geslaagd", + "authentication-successful": "Aanmelden geslaagd", "settings-saved": "Instellingen opgeslagen!" } \ No newline at end of file diff --git a/public/language/nl/topic.json b/public/language/nl/topic.json index c1bcd0f1ca..90f6f2be90 100644 --- a/public/language/nl/topic.json +++ b/public/language/nl/topic.json @@ -1,7 +1,7 @@ { "topic": "Onderwerp", "topic_id": "Onderwerp ID", - "topic_id_placeholder": "Vul Onderwerp ID in", + "topic_id_placeholder": "Vul onderwerp ID in", "no_topics_found": "Geen onderwerpen gevonden!", "no_posts_found": "Geen berichten gevonden!", "post_is_deleted": "Dit bericht is verwijderd!", @@ -26,16 +26,16 @@ "tools": "Extra", "flag": "Markeren", "locked": "Gesloten", - "bookmark_instructions": "Klik hier om terug te gaan om de nieuwste bericht te bekijken in deze onderwerp", + "bookmark_instructions": "Klik hier om naar het nieuwste ongelezen bericht te gaan.", "flag_title": "Bericht aan beheerders melden", - "flag_success": "Het bericht is gerapporteerd aan beheer.", + "flag_success": "Dit bericht is gerapporteerd aan de beheerder.", "deleted_message": "Dit onderwerp is verwijderd. Alleen gebruikers met beheerrechten op onderwerpniveau kunnen dit inzien.", "following_topic.message": "Vanaf nu worden meldingen ontvangen zodra iemand een reactie op dit onderwerp geeft.", - "not_following_topic.message": "U ontvangt geen notificaties over dit onderwerp.", + "not_following_topic.message": "Je ontvangt geen notificaties meer over dit onderwerp.", "login_to_subscribe": "Log in or registreer om dit onderwerp te volgen.", - "markAsUnreadForAll.success": "Onderwerp is voor iedereen als 'gelezen' gemarkeerd.", + "markAsUnreadForAll.success": "Onderwerp is voor iedereen als ongelezen gemarkeerd.", "mark_unread": "Ongelezen markeren", - "mark_unread.success": "Onderwerp is als 'gelezen' gemarkeerd", + "mark_unread.success": "Onderwerp is als ongelezen gemarkeerd.", "watch": "Volgen", "unwatch": "Niet meer volgen", "watch.title": "Krijg meldingen van nieuwe reacties op dit onderwerp", @@ -45,7 +45,7 @@ "thread_tools.markAsUnreadForAll": "Ongelezen markeren", "thread_tools.pin": "Onderwerp vastpinnen", "thread_tools.unpin": "Onderwerp losmaken", - "thread_tools.lock": "Onderwerp op slot zetten", + "thread_tools.lock": "Onderwerp sluiten", "thread_tools.unlock": "Onderwerp openen", "thread_tools.move": "Onderwerp verplaatsen", "thread_tools.move_all": "Verplaats alles", @@ -56,7 +56,7 @@ "thread_tools.restore": "Onderwerp herstellen", "thread_tools.restore_confirm": "Zeker weten dit onderwerp te herstellen?", "thread_tools.purge": "Wis onderwerp ", - "thread_tools.purge_confirm": "Is het echt de bedoeling dit onderwerp definitief te wissen?", + "thread_tools.purge_confirm": "Weet je zeker dat je dit onderwerp wil verwijderen?", "topic_move_success": "Verplaatsen van onderwerp naar %1 succesvol", "post_delete_confirm": "Is het absoluut de bedoeling dit bericht te verwijderen?", "post_restore_confirm": "Is het de bedoeling dit bericht te herstellen?", @@ -68,7 +68,7 @@ "favourite": "Favoriet", "favourites": "Favorieten", "favourites.has_no_favourites": "Je hebt nog geen berichten aan je favorieten toegevoegd.", - "loading_more_posts": "Meer berichten...", + "loading_more_posts": "Meer berichten laden...", "move_topic": "Onderwerp verplaatsen", "move_topics": "Verplaats onderwerpen", "move_post": "Bericht verplaatsen", diff --git a/public/language/nl/user.json b/public/language/nl/user.json index d3a5a4546f..d2964b0fe3 100644 --- a/public/language/nl/user.json +++ b/public/language/nl/user.json @@ -6,9 +6,9 @@ "postcount": "Aantal geplaatste berichten", "email": "E-mail", "confirm_email": "Bevestig e-mail", - "ban_account": "Verban Account", + "ban_account": "Verban gebruiker", "ban_account_confirm": "Weet u zeker dat u deze gebruiker wilt verbannen?", - "unban_account": "Unban Account", + "unban_account": "Verbanning intrekken", "delete_account": "Account verwijderen", "delete_account_confirm": "Controleer of dat het zeker is dat deze account verwijderd moet worden.
Deze actie kan niet ongedaan gemaakt worden en herstellen van gebruiker- of profielgegevens is niet mogelijk

Typ hier de gebruikersnaam als extra controle om te bevestigen dat deze account verwijderd moet worden.", "delete_this_account_confirm": "Weet u zeker dat u deze account wilt verwijderen?
Deze actie kan niet ongedaan worden en u kunt niet de informatie herstellen

", @@ -39,6 +39,7 @@ "change_username": "Wijzig gebruikersnaam", "change_email": "Wijzig email", "edit": "Bewerken", + "edit-profile": "Edit Profile", "default_picture": "Standaard icoon", "uploaded_picture": "Geüploade afbeelding", "upload_new_picture": "Nieuwe afbeelding opsturen", @@ -61,7 +62,7 @@ "remove_uploaded_picture": "Verwijder gëuploade foto", "upload_cover_picture": "Upload je coverafbeelding", "settings": "Instellingen", - "show_email": "Inschakelen weergave van e-mailadres op profielpagina", + "show_email": "E-mailadres weergeven", "show_fullname": "Laat mijn volledige naam zien", "restrict_chats": "Sta alleen chatsessies toe van gebruikers die ik zelf volg", "digest_label": "Abonneer op een samenvatting", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Open uitgaande links naar een externe site in een nieuw tabblad", "enable_topic_searching": "Inschakelen mogelijkheid op onderwerp te kunnen zoeken", "topic_search_help": "Wanneer ingeschakeld zal de standaard zoekfunctie, met een aangepaste methode voor onderwerpen, overschreven worden", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Volg de onderwerpen waarop ik gereageerd heb", "follow_topics_you_create": "Volg de onderwerpen waarvan ik de oorspronkelijke auteur ben", "grouptitle": "Selecteer de groepstitel voor weergave", @@ -99,7 +101,7 @@ "select-homepage": "Selecteer een startpagina", "homepage": "Startpagina", "homepage_description": "Selecteer een pagina om te gebruiken als startpagina, of selecteer geen om de standaard pagina te gebruiken.", - "custom_route": "Startpagina Route", + "custom_route": "Aangepaste startpagina route", "custom_route_help": "Voer een route naam hier, zonder enige voorafgaande schuine streep (zoals, \"recente\" of \"populaire\")", "sso.title": "Single Sign-on Services", "sso.associated": "Geassocieerd met", diff --git a/public/language/nl/users.json b/public/language/nl/users.json index f282c53f6c..03dcb21bbb 100644 --- a/public/language/nl/users.json +++ b/public/language/nl/users.json @@ -1,5 +1,5 @@ { - "latest_users": "Recenste Gebruikers", + "latest_users": "Laatste gebruikers", "top_posters": "Meest actieve leden", "most_reputation": "Meeste reputatie", "search": "Zoeken", diff --git a/public/language/pl/error.json b/public/language/pl/error.json index 444dca9cf7..196a9e6c77 100644 --- a/public/language/pl/error.json +++ b/public/language/pl/error.json @@ -27,6 +27,7 @@ "password-too-long": "Password too long", "user-banned": "Użytkownik zbanowany", "user-too-new": "Przepraszamy, musisz odczekać %1 sekund(y) przed utworzeniem pierwszego posta", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Kategoria nie istnieje", "no-topic": "Temat nie istnieje", "no-post": "Post nie istnieje", @@ -97,5 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/pl/groups.json b/public/language/pl/groups.json index e8e7b370f9..845409bb43 100644 --- a/public/language/pl/groups.json +++ b/public/language/pl/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Ukryty", "details.hidden_help": "Jeśli aktywowane, ta grupa nie będzie widoczna w wykazie grup, a użytkownicy będą musieli być zapraszani manualnie.", "details.delete_group": "Usuń Grupę", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Dane grupy zostały zaktualizowane", "event.deleted": "Grupa \"%1\" została skasowana", "membership.accept-invitation": "Przyjmij Zaproszenie", diff --git a/public/language/pl/modules.json b/public/language/pl/modules.json index 4b5f8e4134..ea0d3c2c10 100644 --- a/public/language/pl/modules.json +++ b/public/language/pl/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 pisze...", "chat.user_has_messaged_you": "%1 napisał do Ciebie", "chat.see_all": "Zobacz wszystkie rozmowy", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Wybierz odbiorcę, by wyświetlić historię rozmów.", "chat.no-users-in-room": "No users in this room", "chat.recent-chats": "Ostatnie rozmowy", diff --git a/public/language/pl/user.json b/public/language/pl/user.json index ff82870ef0..a5f79daab8 100644 --- a/public/language/pl/user.json +++ b/public/language/pl/user.json @@ -39,6 +39,7 @@ "change_username": "Change Username", "change_email": "Change Email", "edit": "Edytuj", + "edit-profile": "Edit Profile", "default_picture": "Default Icon", "uploaded_picture": "Przesłane zdjęcie", "upload_new_picture": "Prześlij nowe zdjęcie", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Otwieraj linki wychodzące w nowej karcie", "enable_topic_searching": "Odblokuj szukanie w temacie", "topic_search_help": "Jeśli włączone, wyszukiwanie w tematach zastąpi przeglądarkowe przeszukiwanie strony i pozwoli na przeszukanie całego tematu, zamiast ograniczonej zawartości aktualnie wyświetlonej na ekranie", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Śledź tematy, na które odpowiadasz", "follow_topics_you_create": "Śledź tematy, które tworzysz", "grouptitle": "Wybierz tytuł grupy, który chcesz wyświetlać", diff --git a/public/language/pt_BR/error.json b/public/language/pt_BR/error.json index 76498a42fa..0701d351c6 100644 --- a/public/language/pt_BR/error.json +++ b/public/language/pt_BR/error.json @@ -14,7 +14,7 @@ "invalid-password": "Senha Inválida", "invalid-username-or-password": "Por favor especifique ambos nome de usuário e senha", "invalid-search-term": "Termo de pesquisa inválido", - "invalid-pagination-value": "Invalid pagination value, must be at least %1 and at most %2", + "invalid-pagination-value": "Valor de paginação inválido, precisa ser entre no mínimo %1 e no máximo %2", "username-taken": "Nome de usuário já existe", "email-taken": "Email já cadastrado", "email-not-confirmed": "O seu email ainda não foi confirmado, por favor clique aqui para confirmar seu email.", @@ -27,6 +27,7 @@ "password-too-long": "A senha é muito grande", "user-banned": "Usuário banido", "user-too-new": "Desculpe, é necessário que você aguarde %1 segundo(s) antes de fazer o seu primeiro post.", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "A categoria não existe", "no-topic": "O tópico não existe", "no-post": "O post não existe", @@ -50,8 +51,8 @@ "still-uploading": "Aguarde a conclusão dos uploads.", "file-too-big": "O tamanho máximo permitido de arquivo é de %1 kB - por favor faça upload de um arquivo menor", "guest-upload-disabled": "O upload por visitantes foi desabilitado", - "already-favourited": "You have already bookmarked this post", - "already-unfavourited": "You have already unbookmarked this post", + "already-favourited": "Você já favoritou este post", + "already-unfavourited": "Você já removeu este post dos favoritos", "cant-ban-other-admins": "Você não pode banir outros administradores!", "cant-remove-last-admin": "Você é o único administrador. Adicione outro usuário como administrador antes de remover a si mesmo como admin", "invalid-image-type": "Tipo inválido de imagem. Os tipos permitidos são: %1", @@ -83,7 +84,7 @@ "chat-message-too-long": "A mensagem de chat é muito longa", "cant-edit-chat-message": "Você não tem permissão para editar esta mensagem", "cant-remove-last-user": "Você não pode excluir o último usuário", - "cant-delete-chat-message": "You are not allowed to delete this message", + "cant-delete-chat-message": "Você não possui permissão para deletar esta mensagem", "reputation-system-disabled": "O sistema de reputação está desabilitado.", "downvoting-disabled": "Negativação está desabilitada", "not-enough-reputation-to-downvote": "Você não possui reputação suficiente para negativar este post", @@ -96,6 +97,7 @@ "wrong-login-type-username": "Por favor use o seu nome de usuário para fazer login", "invite-maximum-met": "Você já convidou o número máximo de pessoas (%1 de %2).", "no-session-found": "Nenhuma sessão de login encontrada!", - "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "not-in-room": "O usuário não está na sala", + "no-users-in-room": "Nenhum usuário nesta sala", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/pt_BR/global.json b/public/language/pt_BR/global.json index c241e68710..cb79fa97d5 100644 --- a/public/language/pt_BR/global.json +++ b/public/language/pt_BR/global.json @@ -65,7 +65,7 @@ "posted_in_ago_by": "postado em %1 %2 por %3", "user_posted_ago": "%1 postou %2", "guest_posted_ago": "Visitante postou %1", - "last_edited_by": "last edited by %1", + "last_edited_by": "editado por último por %1", "norecentposts": "Nenhum Post Recente", "norecenttopics": "Sem Tópicos Recentes", "recentposts": "Posts Recentes", @@ -87,8 +87,8 @@ "map": "Mapa", "sessions": "Sessões de Login", "ip_address": "Endereço IP", - "enter_page_number": "Enter page number", - "upload_file": "Upload file", + "enter_page_number": "Digite o número da página", + "upload_file": "Fazer upload de arquivo", "upload": "Upload", - "allowed-file-types": "Allowed file types are %1" + "allowed-file-types": "Os tipos de arquivo permitidos são %1" } \ No newline at end of file diff --git a/public/language/pt_BR/groups.json b/public/language/pt_BR/groups.json index 7634c801bc..bf499dfd29 100644 --- a/public/language/pt_BR/groups.json +++ b/public/language/pt_BR/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Oculto", "details.hidden_help": "Se habilitado, este grupo não se encontrará na listagem de grupos e os usuários terão de ser convivados manualmente", "details.delete_group": "Deletar Grupo", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Os detalhes do grupo foram atualizados", "event.deleted": "O grupo \"%1\" foi deletado", "membership.accept-invitation": "Aceitar Convite", @@ -49,5 +50,5 @@ "membership.leave-group": "Deixar Grupo", "membership.reject": "Rejeitar", "new-group.group_name": "Nome do Grupo:", - "upload-group-cover": "Upload group cover" + "upload-group-cover": "Fazer upload de capa do grupo" } \ No newline at end of file diff --git a/public/language/pt_BR/modules.json b/public/language/pt_BR/modules.json index 1b186bb717..08768bf900 100644 --- a/public/language/pt_BR/modules.json +++ b/public/language/pt_BR/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 está digitando ...", "chat.user_has_messaged_you": "%1 te enviou uma mensagem.", "chat.see_all": "Ver todos os chats", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Por favor, escolha um destinatário para visualizar o histórico de conversas", "chat.no-users-in-room": "Nenhum usuário nesta sala", "chat.recent-chats": "Conversas Recentes", diff --git a/public/language/pt_BR/notifications.json b/public/language/pt_BR/notifications.json index 0f099da10b..ae335eca3a 100644 --- a/public/language/pt_BR/notifications.json +++ b/public/language/pt_BR/notifications.json @@ -16,9 +16,9 @@ "upvoted_your_post_in_multiple": "%1 e %2 outros deram voto positivo ao seu post em %3.", "moved_your_post": "%1 moveu seu post para %2", "moved_your_topic": "%1 se mudou %2", - "favourited_your_post_in": "%1 has bookmarked your post in %2.", - "favourited_your_post_in_dual": "%1 and %2 have bookmarked your post in %3.", - "favourited_your_post_in_multiple": "%1 and %2 others have bookmarked your post in %3.", + "favourited_your_post_in": "%1 favoritou o teu post em %2.", + "favourited_your_post_in_dual": "%1 e %2 favoritaram o teu post em %3.", + "favourited_your_post_in_multiple": "%1 e %2 outros favoritaram o teu post em %3.", "user_flagged_post_in": "%1 sinalizou um post em %2", "user_flagged_post_in_dual": "%1 e %2 sinalizaram um post em %3", "user_flagged_post_in_multiple": "%1 e %2 outros sinalizaram um post em %3", @@ -30,7 +30,7 @@ "user_started_following_you_dual": "%1 e %2 começaram a lhe acompanhar.", "user_started_following_you_multiple": "%1 e %2 outros começaram a lhe acompanhar.", "new_register": "%1 lhe enviou um pedido de cadastro.", - "new_register_multiple": "There are %1 registration requests awaiting review.", + "new_register_multiple": "Há %1 pedidos de registro aguardando revisão.", "email-confirmed": "Email Confirmado", "email-confirmed-message": "Obrigado por validar o seu email. Agora sua conta está plenamente ativada.", "email-confirm-error-message": "Houve um problema ao validar o seu endereço de email. Talvez o código era invalido ou tenha expirado.", diff --git a/public/language/pt_BR/pages.json b/public/language/pt_BR/pages.json index 54f72ed8ce..ac5238bb22 100644 --- a/public/language/pt_BR/pages.json +++ b/public/language/pt_BR/pages.json @@ -6,12 +6,12 @@ "popular-month": "Tópicos populares deste mês", "popular-alltime": "Tópicos populares de todos os tempos", "recent": "Tópicos Recentes", - "flagged-posts": "Flagged Posts", + "flagged-posts": "Posts Sinalizados", "users/online": "Usuários Online", "users/latest": "Últimos Usuários", "users/sort-posts": "Usuários com mais posts", "users/sort-reputation": "Usuários com maior reputação", - "users/banned": "Banned Users", + "users/banned": "Usuários Banidos", "users/search": "Pesquisa de Usuários", "notifications": "Notificações", "tags": "Tags", @@ -33,13 +33,13 @@ "account/posts": "Posts feitos por %1", "account/topics": "Tópicos criados por %1", "account/groups": "Grupos de %1", - "account/favourites": "%1's Bookmarked Posts", + "account/favourites": "Posts Favoritados por %1", "account/settings": "Configurações de Usuário", "account/watched": "Tópicos assistidos por %1", "account/upvoted": "Posts votados positivamente por %1", "account/downvoted": "Posts votados negativamente por %1", "account/best": "Melhores posts de %1", - "confirm": "Email Confirmed", + "confirm": "Email Confirmado", "maintenance.text": "%1 está atualmente sob manutenção. Por favor retorne em outro momento.", "maintenance.messageIntro": "Adicionalmente, o administrador deixou esta mensagem:", "throttled.text": "%1 está atualmente indisponível devido a excesso de contingente. Por favor retorne em outro momento." diff --git a/public/language/pt_BR/topic.json b/public/language/pt_BR/topic.json index ef4df47135..5f2d6257c1 100644 --- a/public/language/pt_BR/topic.json +++ b/public/language/pt_BR/topic.json @@ -35,7 +35,7 @@ "login_to_subscribe": "Por favor se cadastre ou entre para assinar à este tópico.", "markAsUnreadForAll.success": "Tópico marcado como não lido para todos.", "mark_unread": "Marcar como não lidas", - "mark_unread.success": "Topic marked as unread.", + "mark_unread.success": "Tópico marcado como não-lido.", "watch": "Acompanhar", "unwatch": "Desacompanhar", "watch.title": "Seja notificado sobre novas respostas neste tópico", @@ -65,9 +65,9 @@ "disabled_categories_note": "Categorias desabilitadas estão em cinza", "confirm_move": "Mover", "confirm_fork": "Ramificar", - "favourite": "Bookmark", - "favourites": "Bookmarks", - "favourites.has_no_favourites": "You haven't bookmarked any posts yet.", + "favourite": "Favoritar", + "favourites": "Favoritos", + "favourites.has_no_favourites": "Você ainda não adicionou quaisquer posts aos favoritos.", "loading_more_posts": "Carregando Mais Posts", "move_topic": "Mover Tópico", "move_topics": "Mover Tópicos", diff --git a/public/language/pt_BR/user.json b/public/language/pt_BR/user.json index f3ce7cdcbf..f087c1fa2f 100644 --- a/public/language/pt_BR/user.json +++ b/public/language/pt_BR/user.json @@ -22,7 +22,7 @@ "profile": "Perfil", "profile_views": "Visualizações de perfil", "reputation": "Reputação", - "favourites": "Bookmarks", + "favourites": "Favoritos", "watched": "Acompanhado", "followers": "Seguidores", "following": "Seguindo", @@ -39,6 +39,7 @@ "change_username": "Mudar nome de usuário", "change_email": "Mudar email", "edit": "Editar", + "edit-profile": "Edit Profile", "default_picture": "Ícone Padrão", "uploaded_picture": "Foto Carregada", "upload_new_picture": "Carregar Nova Foto", @@ -55,11 +56,11 @@ "password": "Senha", "username_taken_workaround": "O nome de usuário que você escolheu já existia, então nós o alteramos um pouquinho. Agora você é conhecido como %1", "password_same_as_username": "A sua senha é igual ao seu nome de usuário, por favor escolha outra senha.", - "password_same_as_email": "Your password is the same as your email, please select another password.", + "password_same_as_email": "Tua senha é a mesma que o teu email, por favor escolha outra senha.", "upload_picture": "Carregar Foto", "upload_a_picture": "Carregue uma Foto", "remove_uploaded_picture": "Remover Foto Enviada", - "upload_cover_picture": "Upload cover picture", + "upload_cover_picture": "Fazer upload de imagem de capa ", "settings": "Configurações", "show_email": "Mostrar Meu Email", "show_fullname": "Mostrar Meu Nome Completo", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Abrir links externos em nova aba", "enable_topic_searching": "Habilitar Pesquisa dentro de Tópico", "topic_search_help": "Se habilitado, a pesquisa dentro do tópico irá substituir a pesquisa padrão do seu navegador. Assim, você poderá pesquisar pelo tópico inteiro, e não apenas pelo o que está sendo exibido na tela.", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Seguir tópicos que você responde", "follow_topics_you_create": "Seguir tópicos que você cria", "grouptitle": "Escolha o título do grupo que você deseja exibir", diff --git a/public/language/pt_BR/users.json b/public/language/pt_BR/users.json index 635d5fdb34..0cd0b190d5 100644 --- a/public/language/pt_BR/users.json +++ b/public/language/pt_BR/users.json @@ -16,5 +16,5 @@ "unread_topics": "Topicos Não-Lidos", "categories": "Categorias", "tags": "Tags", - "no-users-found": "No users found!" + "no-users-found": "Nenhum usuário encontrado!" } \ No newline at end of file diff --git a/public/language/ro/error.json b/public/language/ro/error.json index 4d1eceb05f..56750a42a0 100644 --- a/public/language/ro/error.json +++ b/public/language/ro/error.json @@ -27,6 +27,7 @@ "password-too-long": "Parola prea lunga.", "user-banned": "Utilizator banat", "user-too-new": "Imi pare rau dar trebuie sa astepti %1 secunda(e) pentru a posta prima oara.", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Categoria nu exista.", "no-topic": "Topicul nu exista.", "no-post": "Post-ul nu exista.", @@ -97,5 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/ro/groups.json b/public/language/ro/groups.json index 3e424b4085..60719c2bf9 100644 --- a/public/language/ro/groups.json +++ b/public/language/ro/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Hidden", "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", "details.delete_group": "Delete Group", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Group details have been updated", "event.deleted": "The group \"%1\" has been deleted", "membership.accept-invitation": "Accept Invitation", diff --git a/public/language/ro/modules.json b/public/language/ro/modules.json index a63e9edd7c..f1f0bdf9d6 100644 --- a/public/language/ro/modules.json +++ b/public/language/ro/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 scrie ...", "chat.user_has_messaged_you": "%1 ți-a trimis un mesaj.", "chat.see_all": "See all chats", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Selectează un recipient pentru a vedea istoria mesajelor chat", "chat.no-users-in-room": "No users in this room", "chat.recent-chats": "Conversații Recente", diff --git a/public/language/ro/user.json b/public/language/ro/user.json index 580617c4e5..8a61af9abf 100644 --- a/public/language/ro/user.json +++ b/public/language/ro/user.json @@ -39,6 +39,7 @@ "change_username": "Change Username", "change_email": "Change Email", "edit": "Editează", + "edit-profile": "Edit Profile", "default_picture": "Default Icon", "uploaded_picture": "Poză uploadată", "upload_new_picture": "Uploadează poză nouă", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Follow topics that you reply to", "follow_topics_you_create": "Follow topics you create", "grouptitle": "Select the group title you would like to display", diff --git a/public/language/ru/error.json b/public/language/ru/error.json index a29d08c816..efaab28fa9 100644 --- a/public/language/ru/error.json +++ b/public/language/ru/error.json @@ -27,6 +27,7 @@ "password-too-long": "Пароль слишком длинный", "user-banned": "Пользователь заблокирован", "user-too-new": "Вы можете написать свое первой сообщение через %1 сек.", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Категория не существует", "no-topic": "Тема не существует", "no-post": "Сообщение не существует", @@ -50,7 +51,7 @@ "still-uploading": "Пожалуйста, подождите завершения загрузки.", "file-too-big": "Слишком большой файл. Максимальный размер: %1 Кбайт.", "guest-upload-disabled": "Загрузка для гостей была отключена", - "already-favourited": "You have already bookmarked this post", + "already-favourited": "Вы уже добавили это сообщение в закладки", "already-unfavourited": "You have already unbookmarked this post", "cant-ban-other-admins": "Вы не можете забанить других администраторов!", "cant-remove-last-admin": "Вы единственный администратор. Назначьте другого пользователя администратором, прежде чем складывать с себя полномочия админа", @@ -97,5 +98,6 @@ "invite-maximum-met": "Вы пригласили максимальное количество людей (%1 из %2).", "no-session-found": "Сессия входа не найдена!", "not-in-room": "Пользователь не в комнате", - "no-users-in-room": "No users in this room" + "no-users-in-room": "В этой комнате нет пользователей", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/ru/global.json b/public/language/ru/global.json index 9c72d1db9a..3c6a09c0b5 100644 --- a/public/language/ru/global.json +++ b/public/language/ru/global.json @@ -49,7 +49,7 @@ "users": "Пользователи", "topics": "Темы", "posts": "Сообщения", - "best": "Best", + "best": "Лучшие", "upvoted": "Upvoted", "downvoted": "Downvoted", "views": "Просмотры", @@ -87,8 +87,8 @@ "map": "Карта", "sessions": "Сессии входа", "ip_address": "IP адрес", - "enter_page_number": "Enter page number", - "upload_file": "Upload file", - "upload": "Upload", - "allowed-file-types": "Allowed file types are %1" + "enter_page_number": "Введите номер страницы", + "upload_file": "Загрузить файл", + "upload": "Загрузить", + "allowed-file-types": "Разрешенные форматы файлов %1" } \ No newline at end of file diff --git a/public/language/ru/groups.json b/public/language/ru/groups.json index 4273a0e3ee..eeeca0e8fb 100644 --- a/public/language/ru/groups.json +++ b/public/language/ru/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Скрыто", "details.hidden_help": "Если включено, группа не будет показываться в списках, а пользователи должны приглашаться вручную", "details.delete_group": "Удалить группу", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Настройки группы обновлены", "event.deleted": "Группа \"%1\" удалена", "membership.accept-invitation": "Принять приглашение", @@ -49,5 +50,5 @@ "membership.leave-group": "Покинуть", "membership.reject": "Отклонить", "new-group.group_name": "Название группы:", - "upload-group-cover": "Upload group cover" + "upload-group-cover": "Загрузить обложку группы" } \ No newline at end of file diff --git a/public/language/ru/modules.json b/public/language/ru/modules.json index e6f53b3f79..07ecb488c8 100644 --- a/public/language/ru/modules.json +++ b/public/language/ru/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 печатает ...", "chat.user_has_messaged_you": "%1 отправил вам сообщение.", "chat.see_all": "Посмотреть все чаты", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Пожалуйста, выберите собеседника для просмотра истории сообщений", "chat.no-users-in-room": "В этой комнате нет пользователей", "chat.recent-chats": "Последние переписки", diff --git a/public/language/ru/pages.json b/public/language/ru/pages.json index f5b7fe7a0a..962dba881c 100644 --- a/public/language/ru/pages.json +++ b/public/language/ru/pages.json @@ -38,8 +38,8 @@ "account/watched": "Тему смотрели %1", "account/upvoted": "Posts upvoted by %1", "account/downvoted": "Posts downvoted by %1", - "account/best": "Лучшее сообщение написано %1", - "confirm": "Email Confirmed", + "account/best": "Лучшие сообщения написанные %1", + "confirm": "Email подтвержден", "maintenance.text": "%1 в настоящее время на обслуживании. Пожалуйста, возвращайтесь позже.", "maintenance.messageIntro": "Администратор оставил сообщение:", "throttled.text": "%1 is currently unavailable due to excessive load. Please come back another time." diff --git a/public/language/ru/topic.json b/public/language/ru/topic.json index 27e85f376f..00ca832430 100644 --- a/public/language/ru/topic.json +++ b/public/language/ru/topic.json @@ -35,7 +35,7 @@ "login_to_subscribe": "Пожалуйста зарегистрируйтесь, или войдите под своим аккаунтом, чтобы подписаться на эту тему.", "markAsUnreadForAll.success": "Тема помечена как непрочитанная для всех.", "mark_unread": "Отметить как непрочитанное", - "mark_unread.success": "Topic marked as unread.", + "mark_unread.success": "Тема помечена как непрочитанная.", "watch": "Следить", "unwatch": "Не следить", "watch.title": "Сообщать мне об ответах в этой теме", @@ -65,9 +65,9 @@ "disabled_categories_note": "Отключенные категории затемнены", "confirm_move": "Перенести", "confirm_fork": "Ответвление", - "favourite": "Bookmark", - "favourites": "Bookmarks", - "favourites.has_no_favourites": "You haven't bookmarked any posts yet.", + "favourite": "Закладка", + "favourites": "Закладки", + "favourites.has_no_favourites": "Вы еще не добавили ни одно сообщение в закладки.", "loading_more_posts": "Загружаем еще сообщения", "move_topic": "Перенести тему", "move_topics": "Перенести темы", diff --git a/public/language/ru/user.json b/public/language/ru/user.json index 88685f4ebe..3bd501675a 100644 --- a/public/language/ru/user.json +++ b/public/language/ru/user.json @@ -22,7 +22,7 @@ "profile": "Профиль", "profile_views": "Просмотров профиля", "reputation": "Репутация", - "favourites": "Bookmarks", + "favourites": "Закладки", "watched": "Просмотров", "followers": "Читателей", "following": "Читаемых", @@ -35,14 +35,15 @@ "unfollow": "Не читать", "more": "Ещё", "profile_update_success": "Профиль обновлен!", - "change_picture": "Изменить фотографию", + "change_picture": "Изменить аватар", "change_username": "Изменить имя пользователя", "change_email": "Изменить Email", "edit": "Редактировать", + "edit-profile": "Edit Profile", "default_picture": "Иконка по умолчанию", - "uploaded_picture": "Загруженные фотографии", - "upload_new_picture": "Загрузить новую фотографию", - "upload_new_picture_from_url": "Загрузить новое изображение с адреса URL", + "uploaded_picture": "Загруженный аватар", + "upload_new_picture": "Загрузить новый", + "upload_new_picture_from_url": "Указать по URL", "current_password": "Текущий пароль", "change_password": "Изменить пароль", "change_password_error": "Неверный пароль!", @@ -55,11 +56,11 @@ "password": "Пароль", "username_taken_workaround": "Логин, который Вы запросили, уже занят. Мы его немного изменили. Теперь Ваш логин %1", "password_same_as_username": "Ваш пароль совпадает с именем пользователя, пожалуйста выберете другой пароль.", - "password_same_as_email": "Your password is the same as your email, please select another password.", - "upload_picture": "Загрузить фотографию", - "upload_a_picture": "Загрузить фотографию", - "remove_uploaded_picture": "Удалить загруженные фотографии", - "upload_cover_picture": "Upload cover picture", + "password_same_as_email": "Ваш пароль такой же как email, пожалуйста, укажите другой пароль.", + "upload_picture": "Указать изображение", + "upload_a_picture": "Загрузить изображение", + "remove_uploaded_picture": "Удалить аватар", + "upload_cover_picture": "Загрузить обложку", "settings": "Настройки", "show_email": "Показывать мой Email", "show_fullname": "Показывать Полное Имя", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Открывать внешние ссылки в новых вкладках", "enable_topic_searching": "Активировать поиск внутри тем", "topic_search_help": "Если опция включена, поиск в теме будет осуществляться за счёт собственного поиска, который позволит искать во всей теме, а не только в загруженных сообщениях", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Следить за темами в которых вы отвечаете", "follow_topics_you_create": "Следить за темами которые вы создаёте", "grouptitle": "Выберите бейдж группы для отображения", @@ -98,7 +100,7 @@ "select-skin": "Выбрать скин", "select-homepage": "Укажите главную страницу", "homepage": "Главная страница", - "homepage_description": "Select a page to use as the forum homepage or 'None' to use the default homepage.", + "homepage_description": "Укажите страницу, которую хотите использовать как главную страницу форума или 'None', что бы использовать страницу по умолчанию.", "custom_route": "Custom Homepage Route", "custom_route_help": "Enter a route name here, without any preceding slash (e.g. \"recent\", or \"popular\")", "sso.title": "Сервис единого входа", diff --git a/public/language/rw/error.json b/public/language/rw/error.json index 91ddd6ca7d..1a224fbb60 100644 --- a/public/language/rw/error.json +++ b/public/language/rw/error.json @@ -27,6 +27,7 @@ "password-too-long": "Password too long", "user-banned": "Umuntu wirukanwe", "user-too-new": "Wihangena kuko usabwa gutegereza amasegonda (isegonda) %1 mbere yo gushyiraho ikintu cyawe cya mbere", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Icyiciro kitabaho", "no-topic": "Ikiganiro kitabaho", "no-post": "Icyashyizweho kitabaho", @@ -97,5 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/rw/groups.json b/public/language/rw/groups.json index f14eccef93..f3e7be363f 100644 --- a/public/language/rw/groups.json +++ b/public/language/rw/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Ahishe", "details.hidden_help": "Nubyemera, iri tsinda ntabwo rizajya rigaragara ku rutonde rw'andi matsinda kandi abantu bazajya basabwa kuritumirwamo buri wese ku giti cye mbere yo kurijyamo", "details.delete_group": "Senya Itsinda", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Amakuru ku itsinda yahinduweho bijyanye n'igihe", "event.deleted": "Itsinda rya \"%1\" ryakuweho", "membership.accept-invitation": "Emera Ubutumire", diff --git a/public/language/rw/modules.json b/public/language/rw/modules.json index 3f68db32b7..5c8a93b959 100644 --- a/public/language/rw/modules.json +++ b/public/language/rw/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 ari kwandika ...", "chat.user_has_messaged_you": "%1 yagusigiye ubutumwa.", "chat.see_all": "See all chats", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Hitamo umuntu ushaka kurebera ibyo mwandikiranye", "chat.no-users-in-room": "No users in this room", "chat.recent-chats": "Ubutumwa Buheruka", diff --git a/public/language/rw/user.json b/public/language/rw/user.json index 0542acc9b9..937c32576c 100644 --- a/public/language/rw/user.json +++ b/public/language/rw/user.json @@ -39,6 +39,7 @@ "change_username": "Change Username", "change_email": "Change Email", "edit": "Hinduraho", + "edit-profile": "Edit Profile", "default_picture": "Default Icon", "uploaded_picture": "Ifoto Yapakiwe", "upload_new_picture": "Pakira Ifoto Nshya", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Fungurira imirongo ijya hanze mu idirishya rishya", "enable_topic_searching": "Emerera Ugushakira mu Kiganiro", "topic_search_help": "Nibyemerwa, ugushakira mu kiganiro bizajya biba ari byo bikorwa maze bitume umuntu abasha gushakira mu kiganiro hose aho gushakira kuri paji igaragarira amaso, imbere yawe gusa", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Kurikira ibiganiro ushyiraho ibisubizo", "follow_topics_you_create": "Kurikira ibiganiro uba watangije", "grouptitle": "Hitamo umutwe w'itsinda ushaka ko uzajya ugaragara", diff --git a/public/language/sc/error.json b/public/language/sc/error.json index f9199f193e..0709e823b6 100644 --- a/public/language/sc/error.json +++ b/public/language/sc/error.json @@ -27,6 +27,7 @@ "password-too-long": "Password too long", "user-banned": "User banned", "user-too-new": "Sorry, you are required to wait %1 second(s) before making your first post", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Category does not exist", "no-topic": "Topic does not exist", "no-post": "Post does not exist", @@ -97,5 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/sc/groups.json b/public/language/sc/groups.json index 6138ea22ff..3c4f6ce638 100644 --- a/public/language/sc/groups.json +++ b/public/language/sc/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Hidden", "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", "details.delete_group": "Delete Group", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Group details have been updated", "event.deleted": "The group \"%1\" has been deleted", "membership.accept-invitation": "Accept Invitation", diff --git a/public/language/sc/modules.json b/public/language/sc/modules.json index 58a5f145fb..89b779d53e 100644 --- a/public/language/sc/modules.json +++ b/public/language/sc/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 is typing ...", "chat.user_has_messaged_you": "%1 has messaged you.", "chat.see_all": "See all chats", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Please select a recipient to view chat message history", "chat.no-users-in-room": "No users in this room", "chat.recent-chats": "Recent Chats", diff --git a/public/language/sc/user.json b/public/language/sc/user.json index 3da03f2093..2b30121863 100644 --- a/public/language/sc/user.json +++ b/public/language/sc/user.json @@ -39,6 +39,7 @@ "change_username": "Change Username", "change_email": "Change Email", "edit": "Acontza", + "edit-profile": "Edit Profile", "default_picture": "Default Icon", "uploaded_picture": "Immàgine Carrigada", "upload_new_picture": "Càrriga Immàgine Noa", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Follow topics that you reply to", "follow_topics_you_create": "Follow topics you create", "grouptitle": "Select the group title you would like to display", diff --git a/public/language/sk/error.json b/public/language/sk/error.json index c1f9cbdb12..4d99825f9e 100644 --- a/public/language/sk/error.json +++ b/public/language/sk/error.json @@ -27,6 +27,7 @@ "password-too-long": "Password too long", "user-banned": "Užívateľ je zakázaný", "user-too-new": "Sorry, you are required to wait %1 second(s) before making your first post", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Category does not exist", "no-topic": "Topic does not exist", "no-post": "Post does not exist", @@ -97,5 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/sk/groups.json b/public/language/sk/groups.json index 1073025324..ee2368b97e 100644 --- a/public/language/sk/groups.json +++ b/public/language/sk/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Hidden", "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", "details.delete_group": "Delete Group", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Group details have been updated", "event.deleted": "The group \"%1\" has been deleted", "membership.accept-invitation": "Accept Invitation", diff --git a/public/language/sk/modules.json b/public/language/sk/modules.json index 61c82e062d..b9be2fb6c3 100644 --- a/public/language/sk/modules.json +++ b/public/language/sk/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 práve píše ...", "chat.user_has_messaged_you": "%1 Vám zaslal správu.", "chat.see_all": "See all chats", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Please select a recipient to view chat message history", "chat.no-users-in-room": "No users in this room", "chat.recent-chats": "Recent Chats", diff --git a/public/language/sk/user.json b/public/language/sk/user.json index 9cfba749c8..6baaf337ce 100644 --- a/public/language/sk/user.json +++ b/public/language/sk/user.json @@ -39,6 +39,7 @@ "change_username": "Change Username", "change_email": "Change Email", "edit": "Upraviť", + "edit-profile": "Edit Profile", "default_picture": "Default Icon", "uploaded_picture": "Nahraný obrázok", "upload_new_picture": "Nahrať nový obrázok", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Follow topics that you reply to", "follow_topics_you_create": "Follow topics you create", "grouptitle": "Select the group title you would like to display", diff --git a/public/language/sl/error.json b/public/language/sl/error.json index 57aa64574d..a0453bc488 100644 --- a/public/language/sl/error.json +++ b/public/language/sl/error.json @@ -27,6 +27,7 @@ "password-too-long": "Password too long", "user-banned": "Uporabnik je blokiran", "user-too-new": "Oprostite, počakajte %1 sekund pred vašo prvo objavo", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Kategorija ne obstaja", "no-topic": "Tema ne obstaja", "no-post": "Objava ne obstaja", @@ -97,5 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/sl/groups.json b/public/language/sl/groups.json index 478bcb39d0..bb5af04f68 100644 --- a/public/language/sl/groups.json +++ b/public/language/sl/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Skrito", "details.hidden_help": "Skupina je verjetno skrita pred uporabniki, zato se lahko vanjo pridružijo zgolj tisti s povabilom", "details.delete_group": "Izbriši skupino", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Podatki o skupini so bili posodobljeni", "event.deleted": "Skupina %1 je bila izbrisana", "membership.accept-invitation": "Sprejmi povabilo", diff --git a/public/language/sl/modules.json b/public/language/sl/modules.json index c393634fd8..911a9f1588 100644 --- a/public/language/sl/modules.json +++ b/public/language/sl/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 piše sporočilo...", "chat.user_has_messaged_you": "%1 ti je napisal/a sporočilo.", "chat.see_all": "Poglej vse klepete", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Za pogled zgodovine klepeta izberi prejemnika", "chat.no-users-in-room": "No users in this room", "chat.recent-chats": "Zadnji klepeti", diff --git a/public/language/sl/user.json b/public/language/sl/user.json index 93725fc5b8..2f13808e59 100644 --- a/public/language/sl/user.json +++ b/public/language/sl/user.json @@ -39,6 +39,7 @@ "change_username": "Change Username", "change_email": "Change Email", "edit": "Uredi", + "edit-profile": "Edit Profile", "default_picture": "Default Icon", "uploaded_picture": "Naloži fotografijo", "upload_new_picture": "Naloži novo fotografijo", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Zunanje povezave odpri v novem zavihku", "enable_topic_searching": "Omogoči iskanje znotraj teme", "topic_search_help": "Če omogočite, bo iskanje prepisalo brskalnikove prevzete nastavitve in vam omogočilo iskanje skozi celotno temo.", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Spremljaj teme v katerih si sodeloval", "follow_topics_you_create": "Spremljaj teme, ki si jih ustvaril/a", "grouptitle": "Izberi ime skupine za prikaz", diff --git a/public/language/sr/error.json b/public/language/sr/error.json index d3c6ea76d6..25e4d1b130 100644 --- a/public/language/sr/error.json +++ b/public/language/sr/error.json @@ -27,6 +27,7 @@ "password-too-long": "Password too long", "user-banned": "User banned", "user-too-new": "Sorry, you are required to wait %1 second(s) before making your first post", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Категорија не постоји", "no-topic": "Тема не постоји", "no-post": "Порука не постоји", @@ -97,5 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/sr/groups.json b/public/language/sr/groups.json index 9cda34c5a7..91bd05e916 100644 --- a/public/language/sr/groups.json +++ b/public/language/sr/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Скривена", "details.hidden_help": "Уколико је укључено, група неће бити видљива на списку група, и корисницима се позивнице морају слати ручно.", "details.delete_group": "Избришите групу", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Детаљи групе су ажурирани", "event.deleted": "Група „%1“ је обрисана", "membership.accept-invitation": "Прихватите позив", diff --git a/public/language/sr/modules.json b/public/language/sr/modules.json index 73693f5f82..412f9fd207 100644 --- a/public/language/sr/modules.json +++ b/public/language/sr/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 куца ...", "chat.user_has_messaged_you": "%1 вам посла поруку.", "chat.see_all": "Погледајте сва ћаскања", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Изаберите примаоца да бисте видели историју ћаскања", "chat.no-users-in-room": "Нема корисника у овој соби", "chat.recent-chats": "Недавна ћаскања", diff --git a/public/language/sr/user.json b/public/language/sr/user.json index a1c2676cb8..66280af2d3 100644 --- a/public/language/sr/user.json +++ b/public/language/sr/user.json @@ -39,6 +39,7 @@ "change_username": "Change Username", "change_email": "Change Email", "edit": "Уређивање", + "edit-profile": "Edit Profile", "default_picture": "Default Icon", "uploaded_picture": "Послата слика", "upload_new_picture": "Слање нове слике", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Follow topics that you reply to", "follow_topics_you_create": "Follow topics you create", "grouptitle": "Select the group title you would like to display", diff --git a/public/language/sv/error.json b/public/language/sv/error.json index 4a5cfa45a1..efb83e5014 100644 --- a/public/language/sv/error.json +++ b/public/language/sv/error.json @@ -27,6 +27,7 @@ "password-too-long": "Password too long", "user-banned": "Användare bannlyst", "user-too-new": "När du är ny medlem måste du vänta %1 sekund(er) innan du gör ditt första inlägg", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Kategorin finns inte", "no-topic": "Ämnet finns inte", "no-post": "Inlägget finns inte", @@ -97,5 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/sv/groups.json b/public/language/sv/groups.json index 4515d5e0de..2fa0d40823 100644 --- a/public/language/sv/groups.json +++ b/public/language/sv/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Dold", "details.hidden_help": "Om aktiverat kommer gruppen inte synas i grupplistan och användare måste bli inbjudna manuellt", "details.delete_group": "Ta bort grupp", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Gruppdetaljerna har uppdaterats", "event.deleted": "Gruppen \"%1\" har tagits bort", "membership.accept-invitation": "Acceptera inbjudan", diff --git a/public/language/sv/modules.json b/public/language/sv/modules.json index f2a3722a31..ae9799ad2e 100644 --- a/public/language/sv/modules.json +++ b/public/language/sv/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 skriver ...", "chat.user_has_messaged_you": "%1 har skickat ett medelande till dig.", "chat.see_all": "See all chats", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Välj mottagare för att visa historik för chatmeddelande", "chat.no-users-in-room": "No users in this room", "chat.recent-chats": "Senaste chattarna", diff --git a/public/language/sv/user.json b/public/language/sv/user.json index d8aeed1d65..ab893029e1 100644 --- a/public/language/sv/user.json +++ b/public/language/sv/user.json @@ -39,6 +39,7 @@ "change_username": "Change Username", "change_email": "Change Email", "edit": "Ändra", + "edit-profile": "Edit Profile", "default_picture": "Default Icon", "uploaded_picture": "Uppladdad bild", "upload_new_picture": "Ladda upp ny bild", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Öppna utgående länkar på ny flik", "enable_topic_searching": "Aktivera Sökning Inom Ämne", "topic_search_help": "Om aktiverat kommer sökning inom ämne överskrida webbläsarens vanliga funktionen för sökning bland sidor och tillåta dig att söka genom hela ämnet istället för det som endast visas på skärmen.", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Följ ämnen som du svarat på", "follow_topics_you_create": "Följ ämnen du skapat", "grouptitle": "Välj tittel för gruppen så som du vill att den ska visas", diff --git a/public/language/th/error.json b/public/language/th/error.json index ec944b68dd..5fa5730b94 100644 --- a/public/language/th/error.json +++ b/public/language/th/error.json @@ -27,6 +27,7 @@ "password-too-long": "Password too long", "user-banned": "User banned", "user-too-new": "Sorry, you are required to wait %1 second(s) before making your first post", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "ยังไม่มี Category นี้", "no-topic": "ยังไม่มี Topic นี้", "no-post": "ยังไม่มี Post นี้", @@ -97,5 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/th/groups.json b/public/language/th/groups.json index 1ec533f3b2..ad202d2ceb 100644 --- a/public/language/th/groups.json +++ b/public/language/th/groups.json @@ -41,6 +41,7 @@ "details.hidden": "ซ่อน", "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", "details.delete_group": "Delete Group", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "ข้อมูล Group ได้รับการบันทึกแล้ว", "event.deleted": "The group \"%1\" has been deleted", "membership.accept-invitation": "Accept Invitation", diff --git a/public/language/th/modules.json b/public/language/th/modules.json index a81b6e5c04..15a7bb1fa5 100644 --- a/public/language/th/modules.json +++ b/public/language/th/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 is typing ...", "chat.user_has_messaged_you": "%1 has messaged you.", "chat.see_all": "See all chats", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Please select a recipient to view chat message history", "chat.no-users-in-room": "No users in this room", "chat.recent-chats": "Recent Chats", diff --git a/public/language/th/user.json b/public/language/th/user.json index 357aa42419..092f19cf70 100644 --- a/public/language/th/user.json +++ b/public/language/th/user.json @@ -39,6 +39,7 @@ "change_username": "Change Username", "change_email": "Change Email", "edit": "แก้ไข", + "edit-profile": "Edit Profile", "default_picture": "Default Icon", "uploaded_picture": "อัปโหลดรูป", "upload_new_picture": "อัพโหลดรูปใหม่", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "เปิดใช้การค้นหาแบบ In-Topic", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Follow topics that you reply to", "follow_topics_you_create": "Follow topics you create", "grouptitle": "Select the group title you would like to display", diff --git a/public/language/tr/error.json b/public/language/tr/error.json index e8796fbdd0..d661f5a2df 100644 --- a/public/language/tr/error.json +++ b/public/language/tr/error.json @@ -27,6 +27,7 @@ "password-too-long": "Parola çok uzun", "user-banned": "Kullanıcı Yasaklı", "user-too-new": "Özür dileriz, ilk iletinizi yapmadan önce %1 saniye beklemeniz gerekiyor", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Kategori Yok", "no-topic": "Başlık Yok", "no-post": "İleti Yok", @@ -97,5 +98,6 @@ "invite-maximum-met": "Sen maksimum miktarda insanı davet ettin (%2 üzerinden %1).", "no-session-found": "Giriş yapılmış bir oturum bulunamadı!", "not-in-room": "Odada kullanıcı yok", - "no-users-in-room": "Bu odada kullanıcı yok" + "no-users-in-room": "Bu odada kullanıcı yok", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/tr/groups.json b/public/language/tr/groups.json index 234f0a36be..88512b5cb4 100644 --- a/public/language/tr/groups.json +++ b/public/language/tr/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Gizli", "details.hidden_help": "Bu grup eğer etkinse grup listelerinde bulunmaz, ve kullanıcılar bizzat davet eder", "details.delete_group": "Grubu Sil", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Grup detayları güncellenmiştir", "event.deleted": "\"%1\" grubu silinmiş", "membership.accept-invitation": "Daveti Kabul Et", diff --git a/public/language/tr/modules.json b/public/language/tr/modules.json index c0edbdc1d8..3c02428014 100644 --- a/public/language/tr/modules.json +++ b/public/language/tr/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 yazıyor ...", "chat.user_has_messaged_you": "%1 size bir mesaj gönderdi.", "chat.see_all": "Bütün sohbetleri gör", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Lütfen sohbet geçmişini görmek için bir kontak seçin", "chat.no-users-in-room": "Bu odada hiç kullanıcı yok", "chat.recent-chats": "Güncel Sohbetler", diff --git a/public/language/tr/user.json b/public/language/tr/user.json index 2dbac92881..2229f9b6ce 100644 --- a/public/language/tr/user.json +++ b/public/language/tr/user.json @@ -39,6 +39,7 @@ "change_username": "Kullanıcı Adı Değiştir", "change_email": "Email Değiştir", "edit": "Düzenle", + "edit-profile": "Edit Profile", "default_picture": "Varsayılan İkon", "uploaded_picture": "Yüklenmiş Fotoğraflar", "upload_new_picture": "Yeni bir resim Yükle", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Dışarı giden bağlantıları yeni sekmede aç", "enable_topic_searching": "Konu içi aramayı aktive et", "topic_search_help": "Aktive edilirse, konu içi arama tarayıcının normal arama davranışını değiştirerek tüm konuyu aramanızı sağlar", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Cevap verdiğim konuları takip et", "follow_topics_you_create": "Kendi konularımı takip et", "grouptitle": "Göstermek istediğiniz gurup başlığını seçin", diff --git a/public/language/vi/error.json b/public/language/vi/error.json index db957c5b53..fd5b2a903e 100644 --- a/public/language/vi/error.json +++ b/public/language/vi/error.json @@ -27,6 +27,7 @@ "password-too-long": "Mật khẩu quá dài", "user-banned": "Tài khoản bị ban", "user-too-new": "Rất tiếc, bạn phải chờ %1 giây để đăng bài viết đầu tiên.", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "Danh mục không tồn tại", "no-topic": "Chủ đề không tồn tại", "no-post": "Bài viết không tồn tại", @@ -97,5 +98,6 @@ "invite-maximum-met": "Bạn đã sử dụng hết số lượng lời mời bạn có thể gửi (%1 đã gửi trên tổng số %2 được cho phép)", "no-session-found": "Không tìm thấy phiên đăng nhập!", "not-in-room": "Thành viên không có trong phòng", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/vi/groups.json b/public/language/vi/groups.json index 3ea795c76b..1bb89ad728 100644 --- a/public/language/vi/groups.json +++ b/public/language/vi/groups.json @@ -41,6 +41,7 @@ "details.hidden": "Đã ẩn", "details.hidden_help": "Nếu bật, nhóm này sẽ không được hiện thị trong danh sách nhóm, và thành viên phải được mời để tham gia", "details.delete_group": "Xoá nhóm", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "Thông tin nhóm đã được cập nhật", "event.deleted": "Nhóm \"%1\" đã bị xoá", "membership.accept-invitation": "Chấp nhận lời mời", diff --git a/public/language/vi/modules.json b/public/language/vi/modules.json index f53818ced6..0f5ba2fe46 100644 --- a/public/language/vi/modules.json +++ b/public/language/vi/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1b đang gõ...", "chat.user_has_messaged_you": "%1 đã gửi tin cho bạn.", "chat.see_all": "Xem tất cả", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "Hãy chọn 1 tài khoản để xem lịch sử chat", "chat.no-users-in-room": "Không có người nào trong phòng này.", "chat.recent-chats": "Vừa chat", diff --git a/public/language/vi/user.json b/public/language/vi/user.json index 188905b64b..c98cd1b9f9 100644 --- a/public/language/vi/user.json +++ b/public/language/vi/user.json @@ -39,6 +39,7 @@ "change_username": "Đổi tên đăng nhập", "change_email": "Đổi email", "edit": "Chỉnh sửa", + "edit-profile": "Edit Profile", "default_picture": "Icon mặc định", "uploaded_picture": "Ảnh đã tải lên", "upload_new_picture": "Tải lên ảnh mới", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Mở link trong tab mới.", "enable_topic_searching": "Bật In-topic Searching", "topic_search_help": "Nếu bật, tìm kiếm trong chủ đề sẽ thay thế tính năng tính năng tìm kiếm của trình duyệt và cho phép bạn tìm kiếm trong toàn bộ chủ đề, thay vì chỉ tìm kiếm nội dung đang hiện thị trên màn hình", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Theo dõi chủ đề bạn trả lời", "follow_topics_you_create": "Theo dõi chủ đề bạn tạo", "grouptitle": "Chọn tên nhóm mà bạn muốn hiển thị", diff --git a/public/language/zh_CN/error.json b/public/language/zh_CN/error.json index ab0a5b42b8..3a96f6c556 100644 --- a/public/language/zh_CN/error.json +++ b/public/language/zh_CN/error.json @@ -14,7 +14,7 @@ "invalid-password": "无效密码", "invalid-username-or-password": "请确认用户名和密码", "invalid-search-term": "无效的搜索关键字", - "invalid-pagination-value": "Invalid pagination value, must be at least %1 and at most %2", + "invalid-pagination-value": "无效的分页数值,必须介于 %1 和 %2 之间", "username-taken": "此用户名已被占用", "email-taken": "此电子邮箱已被占用", "email-not-confirmed": "您的电子邮箱尚未确认,请点击这里确认您的电子邮箱。", @@ -27,6 +27,7 @@ "password-too-long": "密码太长", "user-banned": "用户已禁止", "user-too-new": "抱歉,您需要等待 %1 秒后,才可以发帖!", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "版块不存在", "no-topic": "主题不存在", "no-post": "帖子不存在", @@ -50,8 +51,8 @@ "still-uploading": "请等待上传完成", "file-too-big": "上传文件的大小限制为 %1 KB - 请缩减文件大小", "guest-upload-disabled": "未登录用户不允许上传", - "already-favourited": "You have already bookmarked this post", - "already-unfavourited": "You have already unbookmarked this post", + "already-favourited": "您已将此贴存为了书签。", + "already-unfavourited": "您已取消了此贴的书签", "cant-ban-other-admins": "您不能封禁其他管理员!", "cant-remove-last-admin": "您是唯一的管理员。在删除您的管理员权限前,请添加另一个管理员。", "invalid-image-type": "无效的图像类型。允许的类型有:%1", @@ -83,7 +84,7 @@ "chat-message-too-long": "聊天信息太长", "cant-edit-chat-message": "您不能编辑这条信息", "cant-remove-last-user": "您不能移除这个用户", - "cant-delete-chat-message": "You are not allowed to delete this message", + "cant-delete-chat-message": "您不允许删除这条消息", "reputation-system-disabled": "威望系统已禁用。", "downvoting-disabled": "扣分功能已禁用", "not-enough-reputation-to-downvote": "您的威望不足以给此帖扣分", @@ -96,6 +97,7 @@ "wrong-login-type-username": "请输入您的用户名登录", "invite-maximum-met": "您的邀请人数超出了上限 (%1 超过了 %2)。", "no-session-found": "未登录!", - "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "not-in-room": "用户已不在聊天室中", + "no-users-in-room": "这个聊天室中没有用户", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/zh_CN/global.json b/public/language/zh_CN/global.json index e6501acb20..d6a10e614c 100644 --- a/public/language/zh_CN/global.json +++ b/public/language/zh_CN/global.json @@ -50,8 +50,8 @@ "topics": "主题", "posts": "帖子", "best": "最佳", - "upvoted": "Upvoted", - "downvoted": "Downvoted", + "upvoted": "顶", + "downvoted": "踩", "views": "浏览", "reputation": "威望", "read_more": "阅读更多", @@ -65,7 +65,7 @@ "posted_in_ago_by": "%3 于 %1 发布到 %2", "user_posted_ago": "%1 发布于 %2", "guest_posted_ago": "游客发布于 %1", - "last_edited_by": "last edited by %1", + "last_edited_by": "最后由 %1 编辑", "norecentposts": "暂无新帖", "norecenttopics": "暂无新主题", "recentposts": "新帖", @@ -87,8 +87,8 @@ "map": "地图", "sessions": "已登录的会话", "ip_address": "IP地址", - "enter_page_number": "Enter page number", - "upload_file": "Upload file", - "upload": "Upload", - "allowed-file-types": "Allowed file types are %1" + "enter_page_number": "输入页码", + "upload_file": "上传文件", + "upload": "上传", + "allowed-file-types": "允许的文件类型有 %1" } \ No newline at end of file diff --git a/public/language/zh_CN/groups.json b/public/language/zh_CN/groups.json index ae95b86cd1..fd58e3308e 100644 --- a/public/language/zh_CN/groups.json +++ b/public/language/zh_CN/groups.json @@ -41,6 +41,7 @@ "details.hidden": "隐藏", "details.hidden_help": "启用此选项后,小组将不在小组列表中展现,成员只能通过邀请加入。", "details.delete_group": "删除小组", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "小组信息已更新", "event.deleted": "小组 \"%1\" 已被删除", "membership.accept-invitation": "接受邀请", diff --git a/public/language/zh_CN/modules.json b/public/language/zh_CN/modules.json index 4dd7bd27d2..50bdd2d042 100644 --- a/public/language/zh_CN/modules.json +++ b/public/language/zh_CN/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 正在输入……", "chat.user_has_messaged_you": "%1 向您发送了消息。", "chat.see_all": "查看所有对话", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "请选择接收人,以查看聊天消息历史", "chat.no-users-in-room": "此聊天室中没有用户", "chat.recent-chats": "最近聊天", diff --git a/public/language/zh_CN/notifications.json b/public/language/zh_CN/notifications.json index 8449a4a853..6d45be4d19 100644 --- a/public/language/zh_CN/notifications.json +++ b/public/language/zh_CN/notifications.json @@ -16,9 +16,9 @@ "upvoted_your_post_in_multiple": "%1 和 %2 个其他人在 %3 赞了您的帖子。", "moved_your_post": "您的帖子已被 %1 移动到了 %2", "moved_your_topic": "%1 移动到了 %2", - "favourited_your_post_in": "%1 has bookmarked your post in %2.", - "favourited_your_post_in_dual": "%1 and %2 have bookmarked your post in %3.", - "favourited_your_post_in_multiple": "%1 and %2 others have bookmarked your post in %3.", + "favourited_your_post_in": "%1 将您在 %2 的帖子添加到了书签", + "favourited_your_post_in_dual": "%1%2 将您在 %3 的帖子添加到了书签", + "favourited_your_post_in_multiple": "%1 和其他 %2 人 将您在 %2 的帖子添加到了书签", "user_flagged_post_in": "%1%2 标记了一个帖子", "user_flagged_post_in_dual": "%1%2%3 标记了一个帖子", "user_flagged_post_in_multiple": "%1 和 %2 个其他人在 %3 标记了一个帖子", @@ -30,7 +30,7 @@ "user_started_following_you_dual": "%1%2 关注了您。", "user_started_following_you_multiple": "%1 和 %2 个其他人关注了您。", "new_register": "%1 发出了注册请求", - "new_register_multiple": "There are %1 registration requests awaiting review.", + "new_register_multiple": "有 %1 条注册申请等待批准。", "email-confirmed": "电子邮箱已确认", "email-confirmed-message": "感谢您验证您的电子邮箱。您的帐户现已全面激活。", "email-confirm-error-message": "验证您电子邮箱地址时出现了问题。可能是因为验证码无效或已过期。", diff --git a/public/language/zh_CN/pages.json b/public/language/zh_CN/pages.json index 66e705c543..728ed037b8 100644 --- a/public/language/zh_CN/pages.json +++ b/public/language/zh_CN/pages.json @@ -6,7 +6,7 @@ "popular-month": "当月热门话题", "popular-alltime": "热门主题", "recent": "最新主题", - "flagged-posts": "Flagged Posts", + "flagged-posts": "已举报的帖子", "users/online": "在线会员", "users/latest": "最新会员", "users/sort-posts": "最多发帖的会员", @@ -33,7 +33,7 @@ "account/posts": "%1 发布的帖子", "account/topics": "%1 创建的主题", "account/groups": "%1 的小组", - "account/favourites": "%1's Bookmarked Posts", + "account/favourites": "%1 收藏的帖子", "account/settings": "用户设置", "account/watched": "主题已被 %1 关注", "account/upvoted": "帖子被 %1 顶过", diff --git a/public/language/zh_CN/topic.json b/public/language/zh_CN/topic.json index 6464255b13..c123366bb0 100644 --- a/public/language/zh_CN/topic.json +++ b/public/language/zh_CN/topic.json @@ -65,9 +65,9 @@ "disabled_categories_note": "停用的版面为灰色", "confirm_move": "移动", "confirm_fork": "分割", - "favourite": "Bookmark", - "favourites": "Bookmarks", - "favourites.has_no_favourites": "You haven't bookmarked any posts yet.", + "favourite": "书签", + "favourites": "书签", + "favourites.has_no_favourites": "您还没有添加任何书签", "loading_more_posts": "正在加载更多帖子", "move_topic": "移动主题", "move_topics": "移动主题", @@ -105,7 +105,7 @@ "stale.warning": "您回复的主题已经非常老了。开个新帖,然后在新帖中引用这个老帖的内容,可以吗?", "stale.create": "创建新主题", "stale.reply_anyway": "仍然回复此帖", - "link_back": "Re: [%1](%2)", + "link_back": "回复: [%1](%2)", "spam": "垃圾帖", "offensive": "人身攻击", "custom-flag-reason": "输入举报原因" diff --git a/public/language/zh_CN/user.json b/public/language/zh_CN/user.json index 3eda0be577..f434a2f284 100644 --- a/public/language/zh_CN/user.json +++ b/public/language/zh_CN/user.json @@ -22,7 +22,7 @@ "profile": "资料", "profile_views": "资料浏览", "reputation": "威望", - "favourites": "Bookmarks", + "favourites": "书签", "watched": "已订阅", "followers": "粉丝", "following": "关注", @@ -39,6 +39,7 @@ "change_username": "更改用户名", "change_email": "更改电子邮箱", "edit": "编辑", + "edit-profile": "Edit Profile", "default_picture": "缺省图标", "uploaded_picture": "已有头像", "upload_new_picture": "上传新头像", @@ -55,11 +56,11 @@ "password": "密码", "username_taken_workaround": "您申请的用户名已被占用,所以我们稍作更改。您现在的用户名是 %1", "password_same_as_username": "您的密码与用户名相同,请选择另外的密码。", - "password_same_as_email": "Your password is the same as your email, please select another password.", + "password_same_as_email": "您的密码与邮箱相同,请选择另外的密码。", "upload_picture": "上传头像", "upload_a_picture": "上传头像", "remove_uploaded_picture": "删除已上传的头像", - "upload_cover_picture": "Upload cover picture", + "upload_cover_picture": "上传个人资料封面图片", "settings": "设置", "show_email": "显示我的电子邮箱", "show_fullname": "显示我的全名", @@ -78,9 +79,9 @@ "has_no_posts": "此用户从未发言。", "has_no_topics": "此用户还未发布任何主题。", "has_no_watched_topics": "此用户还未关注任何主题。", - "has_no_upvoted_posts": "This user hasn't upvoted any posts yet.", - "has_no_downvoted_posts": "This user hasn't downvoted any posts yet.", - "has_no_voted_posts": "This user has no voted posts", + "has_no_upvoted_posts": "此用户还未顶过任何帖子。", + "has_no_downvoted_posts": "此用户还未踩过任何帖子。", + "has_no_voted_posts": "这个用户还未评价任何帖子", "email_hidden": "电子邮箱已隐藏", "hidden": "隐藏", "paginate_description": "使用分页式版块浏览", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "在新标签打开外部链接", "enable_topic_searching": "启用主题内搜索", "topic_search_help": "如果启用此项,主题内搜索会替代浏览器默认的页面搜索,您将可以在整个主题内搜索,而不仅仅只搜索页面上展现的内容。", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "关注您回复的主题", "follow_topics_you_create": "关注您创建的主题", "grouptitle": "选择展示的小组称号", diff --git a/public/language/zh_CN/users.json b/public/language/zh_CN/users.json index 51e8d6d3d9..50d6dc0c23 100644 --- a/public/language/zh_CN/users.json +++ b/public/language/zh_CN/users.json @@ -16,5 +16,5 @@ "unread_topics": "未读主题", "categories": "版面", "tags": "话题", - "no-users-found": "No users found!" + "no-users-found": "未找到匹配的用户!" } \ No newline at end of file diff --git a/public/language/zh_TW/error.json b/public/language/zh_TW/error.json index f56559ea37..0db5a671c2 100644 --- a/public/language/zh_TW/error.json +++ b/public/language/zh_TW/error.json @@ -27,6 +27,7 @@ "password-too-long": "Password too long", "user-banned": "該使用者已被停用", "user-too-new": "抱歉,發表您第一篇文章須要等待 %1 秒", + "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", "no-category": "類別並不存在", "no-topic": "主題並不存在", "no-post": "文章並不存在", @@ -97,5 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room" + "no-users-in-room": "No users in this room", + "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/zh_TW/groups.json b/public/language/zh_TW/groups.json index 9e8658c7e1..d562fb5ccd 100644 --- a/public/language/zh_TW/groups.json +++ b/public/language/zh_TW/groups.json @@ -41,6 +41,7 @@ "details.hidden": "隱藏", "details.hidden_help": "If enabled, this group will not be found in the groups listing, and users will have to be invited manually", "details.delete_group": "Delete Group", + "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", "event.updated": "群組詳細訊息已被更新", "event.deleted": "此 \"%1\" 群組已被刪除了", "membership.accept-invitation": "Accept Invitation", diff --git a/public/language/zh_TW/modules.json b/public/language/zh_TW/modules.json index 733947b41a..c34132769a 100644 --- a/public/language/zh_TW/modules.json +++ b/public/language/zh_TW/modules.json @@ -6,6 +6,7 @@ "chat.user_typing": "%1 正在輸入中...", "chat.user_has_messaged_you": "%1 已傳送訊息給你了", "chat.see_all": "See all chats", + "chat.mark_all_read": "Mark all chats read", "chat.no-messages": "請選擇收件人來查看聊天記錄", "chat.no-users-in-room": "No users in this room", "chat.recent-chats": "最近的聊天記錄", diff --git a/public/language/zh_TW/user.json b/public/language/zh_TW/user.json index b69a38a69f..118ba2f471 100644 --- a/public/language/zh_TW/user.json +++ b/public/language/zh_TW/user.json @@ -39,6 +39,7 @@ "change_username": "Change Username", "change_email": "Change Email", "edit": "編輯", + "edit-profile": "Edit Profile", "default_picture": "Default Icon", "uploaded_picture": "已有頭像", "upload_new_picture": "上傳新頭像", @@ -91,6 +92,7 @@ "open_links_in_new_tab": "Open outgoing links in new tab", "enable_topic_searching": "Enable In-Topic Searching", "topic_search_help": "If enabled, in-topic searching will override the browser's default page search behaviour and allow you to search through the entire topic, instead of what is only shown on screen", + "scroll_to_my_post": "After posting a reply, show the new post", "follow_topics_you_reply_to": "Follow topics that you reply to", "follow_topics_you_create": "Follow topics you create", "grouptitle": "Select the group title you would like to display", From 485db7a479ee4afb09558c069496458e5193ada3 Mon Sep 17 00:00:00 2001 From: pichalite Date: Thu, 24 Mar 2016 13:33:42 +0000 Subject: [PATCH 45/81] fix for removing topic thumb on edit --- src/posts/edit.js | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/posts/edit.js b/src/posts/edit.js index fece8aa640..e8af9ae2d4 100644 --- a/src/posts/edit.js +++ b/src/posts/edit.js @@ -121,9 +121,7 @@ module.exports = function(Posts) { topicData.slug = tid + '/' + (utils.slugify(title) || 'topic'); } - if (data.topic_thumb) { - topicData.thumb = data.topic_thumb; - } + topicData.thumb = data.topic_thumb || ''; data.tags = data.tags || []; From e8b8f115b7882ec594889db92e3451b36ba2ed67 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 24 Mar 2016 16:15:22 +0200 Subject: [PATCH 46/81] closes #3652 --- public/src/admin/manage/category.js | 17 +++++++++++------ src/views/admin/manage/category.tpl | 10 +++++++++- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/public/src/admin/manage/category.js b/public/src/admin/manage/category.js index c6da11cd88..d20ffc80e9 100644 --- a/public/src/admin/manage/category.js +++ b/public/src/admin/manage/category.js @@ -100,26 +100,31 @@ define('admin/manage/category', [ }); $('.upload-button').on('click', function() { - var inputEl = $(this), - cid = inputEl.attr('data-cid'); + var inputEl = $(this); + var cid = inputEl.attr('data-cid'); uploader.show({ title: 'Upload category image', route: config.relative_path + '/api/admin/category/uploadpicture', params: {cid: cid} }, function(imageUrlOnServer) { - inputEl.val(imageUrlOnServer); + $('#category-image').val(imageUrlOnServer); var previewBox = inputEl.parent().parent().siblings('.category-preview'); previewBox.css('background', 'url(' + imageUrlOnServer + '?' + new Date().getTime() + ')'); - modified(inputEl[0]); + + modified($('#category-image')); }); }); + $('#category-image').on('change', function() { + $('.category-preview').css('background-image', $(this).val() ? ('url("' + $(this).val() + '")') : ''); + }); + $('.delete-image').on('click', function(e) { e.preventDefault(); - var inputEl = $('.upload-button'), - previewBox = inputEl.parent().parent().siblings('.category-preview'); + var inputEl = $('#category-image'); + var previewBox = $('.category-preview'); inputEl.val(''); previewBox.css('background-image', ''); diff --git a/src/views/admin/manage/category.tpl b/src/views/admin/manage/category.tpl index 1ca571010d..db765d760e 100644 --- a/src/views/admin/manage/category.tpl +++ b/src/views/admin/manage/category.tpl @@ -78,7 +78,7 @@
- +
@@ -87,6 +87,14 @@

+
+
+ +
+ +
+
+
From 382fa265a4a994c97729da409192299bc4ad88e6 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 24 Mar 2016 16:21:39 +0200 Subject: [PATCH 47/81] up persona --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ec505b952e..91c8f8cb5f 100644 --- a/package.json +++ b/package.json @@ -53,7 +53,7 @@ "nodebb-plugin-spam-be-gone": "0.4.6", "nodebb-rewards-essentials": "0.0.8", "nodebb-theme-lavender": "3.0.9", - "nodebb-theme-persona": "4.0.110", + "nodebb-theme-persona": "4.0.111", "nodebb-theme-vanilla": "5.0.58", "nodebb-widget-essentials": "2.0.8", "nodemailer": "2.0.0", From 0f959c341bba6a039c7a614a95e0a6f79022cf0b Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 24 Mar 2016 16:48:20 +0200 Subject: [PATCH 48/81] closes #4466 --- src/routes/index.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/index.js b/src/routes/index.js index 58754670d5..e26f00e38f 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -146,7 +146,7 @@ module.exports = function(app, middleware) { function handle404(app, middleware) { var relativePath = nconf.get('relative_path'); - var isLanguage = new RegExp('^' + relativePath + '/language/[\\w]{2,}/.*.json'), + var isLanguage = new RegExp('^' + relativePath + '/language/.*/.*.json'), isClientScript = new RegExp('^' + relativePath + '\\/src\\/.+\\.js'); app.use(function(req, res) { From 78f4cbc9e422de2d4857b350dc48478aae0a4450 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 24 Mar 2016 16:50:00 +0200 Subject: [PATCH 49/81] fix indents --- src/routes/index.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/routes/index.js b/src/routes/index.js index e26f00e38f..a80eb2e46a 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -146,8 +146,8 @@ module.exports = function(app, middleware) { function handle404(app, middleware) { var relativePath = nconf.get('relative_path'); - var isLanguage = new RegExp('^' + relativePath + '/language/.*/.*.json'), - isClientScript = new RegExp('^' + relativePath + '\\/src\\/.+\\.js'); + var isLanguage = new RegExp('^' + relativePath + '/language/.*/.*.json'); + var isClientScript = new RegExp('^' + relativePath + '\\/src\\/.+\\.js'); app.use(function(req, res) { if (plugins.hasListeners('action:meta.override404')) { From baeed22f20f8156d261006f0b8ac954d3bb45e4f Mon Sep 17 00:00:00 2001 From: psychobunny Date: Thu, 24 Mar 2016 12:37:03 -0400 Subject: [PATCH 50/81] grunt: only compile ACP less if that was changed, and vice versa with theme/plugin less --- Gruntfile.js | 22 ++++++++++++++-------- src/meta/css.js | 37 ++++++++++++++++--------------------- src/webserver.js | 7 +------ 3 files changed, 31 insertions(+), 35 deletions(-) diff --git a/Gruntfile.js b/Gruntfile.js index 36c054445f..fa4ceed1e9 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -17,17 +17,20 @@ module.exports = function(grunt) { args.push('--log-level=info'); } - if (target === 'lessUpdated') { - fromFile = ['js','tpl']; - compiling = 'less'; + if (target === 'lessUpdated_Client') { + fromFile = ['js', 'tpl', 'acpLess']; + compiling = 'clientLess'; + } else if (target === 'lessUpdated_Admin') { + fromFile = ['js', 'tpl', 'clientLess']; + compiling = 'acpLess'; } else if (target === 'clientUpdated') { - fromFile = ['less','tpl']; + fromFile = ['clientLess', 'acpLess', 'tpl']; compiling = 'js'; } else if (target === 'templatesUpdated') { - fromFile = ['js','less']; + fromFile = ['js', 'clientLess', 'acpLess']; compiling = 'tpl'; } else if (target === 'serverUpdated') { - fromFile = ['less','js','tpl']; + fromFile = ['clientLess', 'acpLess', 'js', 'tpl']; } fromFile = fromFile.filter(function(ext) { @@ -53,8 +56,11 @@ module.exports = function(grunt) { grunt.initConfig({ watch: { - lessUpdated: { - files: ['public/**/*.less', 'node_modules/nodebb-*/*.less', 'node_modules/nodebb-*/*/*.less', 'node_modules/nodebb-*/*/*/*.less', 'node_modules/nodebb-*/*/*/*/*.less'] + lessUpdated_Client: { + files: ['public/*.less', 'node_modules/nodebb-*/*.less', 'node_modules/nodebb-*/*/*.less', 'node_modules/nodebb-*/*/*/*.less', 'node_modules/nodebb-*/*/*/*/*.less'] + }, + lessUpdated_Admin: { + files: ['public/**/*.less'] }, clientUpdated: { files: ['public/src/**/*.js', 'node_modules/nodebb-*/*.js', 'node_modules/nodebb-*/*/*.js', 'node_modules/nodebb-*/*/*/*.js', 'node_modules/nodebb-*/*/*/*/*.js', 'node_modules/templates.js/lib/templates.js'] diff --git a/src/meta/css.js b/src/meta/css.js index 172c2bf0e6..09ed87af55 100644 --- a/src/meta/css.js +++ b/src/meta/css.js @@ -80,11 +80,22 @@ module.exports = function(Meta) { source = '@import "./theme";\n' + source; + var fromFile = nconf.get('from-file') || ''; async.parallel([ function(next) { + if (fromFile.match('clientLess')) { + winston.info('[minifier] Compiling front-end LESS files skipped'); + return Meta.css.getFromFile(path.join(__dirname, '../../public/stylesheet.css'), Meta.css.cache, next); + } + minify(source, paths, 'cache', next); }, function(next) { + if (fromFile.match('acpLess')) { + winston.info('[minifier] Compiling ACP LESS files skipped'); + return Meta.css.getFromFile(path.join(__dirname, '../../public/admin.css'), Meta.css.acpCache, next); + } + minify(acpSource, paths, 'acpCache', next); } ], function(err, minified) { @@ -151,28 +162,12 @@ module.exports = function(Meta) { }); }; - Meta.css.getFromFile = function(callback) { - var cachePath = path.join(__dirname, '../../public/stylesheet.css'), - acpCachePath = path.join(__dirname, '../../public/admin.css'); - file.exists(cachePath, function(exists) { - if (!exists) { - winston.warn('[meta/css] No stylesheets found on disk, re-minifying'); - Meta.css.minify(callback); - return; - } + Meta.css.getFromFile = function(filePath, cache, callback) { + winston.verbose('[meta/css] Reading stylesheet ' + filePath.split('/').pop() + ' from file'); - if (nconf.get('isPrimary') !== 'true') { - return callback(); - } - - winston.verbose('[meta/css] Reading stylesheets from file'); - async.map([cachePath, acpCachePath], fs.readFile, function(err, files) { - Meta.css.cache = files[0]; - Meta.css.acpCache = files[1]; - - emitter.emit('meta:css.compiled'); - callback(); - }); + fs.readFile(filePath, function(err, file) { + cache = file; + callback(); }); }; diff --git a/src/webserver.js b/src/webserver.js index 32ab6c2a59..1db202e520 100644 --- a/src/webserver.js +++ b/src/webserver.js @@ -78,11 +78,6 @@ function initializeNodeBB(callback) { skipJS = true; } - if (fromFile.match('less')) { - winston.info('[minifier] Compiling LESS files skipped'); - skipLess = true; - } - async.waterfall([ async.apply(cacheStaticFiles), async.apply(meta.themes.setupPaths), @@ -94,7 +89,7 @@ function initializeNodeBB(callback) { async.apply(meta.templates.compile), async.apply(!skipJS ? meta.js.minify : meta.js.getFromFile, 'nodebb.min.js'), async.apply(!skipJS ? meta.js.minify : meta.js.getFromFile, 'acp.min.js'), - async.apply(!skipLess ? meta.css.minify : meta.css.getFromFile), + async.apply(meta.css.minify), async.apply(meta.sounds.init), async.apply(meta.blacklist.load) ], next); From 5008e211e240d20d20d6a5d45c2ebea20540a11c Mon Sep 17 00:00:00 2001 From: psychobunny Date: Thu, 24 Mar 2016 13:23:39 -0400 Subject: [PATCH 51/81] closes #4449 --- public/less/generics.less | 17 +++++++++++++++++ public/less/mixins.less | 5 +++++ 2 files changed, 22 insertions(+) diff --git a/public/less/generics.less b/public/less/generics.less index 5337609b4f..fee1157662 100644 --- a/public/less/generics.less +++ b/public/less/generics.less @@ -1,3 +1,20 @@ +.define-if-not-set() { + @gray-base: #000; + @gray-darker: lighten(@gray-base, 13.5%); // #222 + @gray-dark: lighten(@gray-base, 20%); // #333 + @gray: lighten(@gray-base, 33.5%); // #555 + @gray-light: lighten(@gray-base, 46.7%); // #777 + @gray-lighter: lighten(@gray-base, 93.5%); // #eee + + @brand-primary: darken(#428bca, 6.5%); // #337ab7 + @brand-success: #5cb85c; + @brand-info: #5bc0de; + @brand-warning: #f0ad4e; + @brand-danger: #d9534f; +} + +.define-if-not-set(); + .category-list { padding: 0; diff --git a/public/less/mixins.less b/public/less/mixins.less index 4bee3f27bd..57a54ea32b 100644 --- a/public/less/mixins.less +++ b/public/less/mixins.less @@ -79,4 +79,9 @@ height: @size; line-height: @size; font-size: @font-size; +} + +.box-shadow(@shadow) { + -webkit-box-shadow: @shadow; + box-shadow: @shadow; } \ No newline at end of file From 000d5b61c70751edd649ac6cf8277566f8b267a1 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Thu, 24 Mar 2016 13:29:50 -0400 Subject: [PATCH 52/81] fix for retrieving css cache --- src/meta/css.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/src/meta/css.js b/src/meta/css.js index 09ed87af55..0b901c6e13 100644 --- a/src/meta/css.js +++ b/src/meta/css.js @@ -85,7 +85,7 @@ module.exports = function(Meta) { function(next) { if (fromFile.match('clientLess')) { winston.info('[minifier] Compiling front-end LESS files skipped'); - return Meta.css.getFromFile(path.join(__dirname, '../../public/stylesheet.css'), Meta.css.cache, next); + return Meta.css.getFromFile(path.join(__dirname, '../../public/stylesheet.css'), 'cache', next); } minify(source, paths, 'cache', next); @@ -93,7 +93,7 @@ module.exports = function(Meta) { function(next) { if (fromFile.match('acpLess')) { winston.info('[minifier] Compiling ACP LESS files skipped'); - return Meta.css.getFromFile(path.join(__dirname, '../../public/admin.css'), Meta.css.acpCache, next); + return Meta.css.getFromFile(path.join(__dirname, '../../public/admin.css'), 'acpCache', next); } minify(acpSource, paths, 'acpCache', next); @@ -107,8 +107,8 @@ module.exports = function(Meta) { if (process.send) { process.send({ action: 'css-propagate', - cache: minified[0], - acpCache: minified[1] + cache: fromFile.match('clientLess') ? Meta.css.cache : minified[0], + acpCache: fromFile.match('acpLess') ? Meta.css.acpCache : minified[1] }); } @@ -162,11 +162,11 @@ module.exports = function(Meta) { }); }; - Meta.css.getFromFile = function(filePath, cache, callback) { + Meta.css.getFromFile = function(filePath, filename, callback) { winston.verbose('[meta/css] Reading stylesheet ' + filePath.split('/').pop() + ' from file'); fs.readFile(filePath, function(err, file) { - cache = file; + Meta.css[filename] = file; callback(); }); }; From bb85d992540a83695b0ad336ebacfc2806d2962c Mon Sep 17 00:00:00 2001 From: psychobunny Date: Thu, 24 Mar 2016 13:46:41 -0400 Subject: [PATCH 53/81] closes #4450 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 91c8f8cb5f..feef10c369 100644 --- a/package.json +++ b/package.json @@ -44,11 +44,11 @@ "mongodb": "~2.1.3", "morgan": "^1.3.2", "nconf": "~0.8.2", - "nodebb-plugin-composer-default": "3.0.15", + "nodebb-plugin-composer-default": "3.0.16", "nodebb-plugin-dbsearch": "1.0.1", "nodebb-plugin-emoji-extended": "1.0.3", "nodebb-plugin-markdown": "4.0.17", - "nodebb-plugin-mentions": "1.0.20", + "nodebb-plugin-mentions": "1.0.21", "nodebb-plugin-soundpack-default": "0.1.6", "nodebb-plugin-spam-be-gone": "0.4.6", "nodebb-rewards-essentials": "0.0.8", From 0823cd94331a99b5c6ae5c696cd30215295f3a4c Mon Sep 17 00:00:00 2001 From: psychobunny Date: Thu, 24 Mar 2016 14:04:52 -0400 Subject: [PATCH 54/81] #4453 --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index feef10c369..d9771ca51e 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "mongodb": "~2.1.3", "morgan": "^1.3.2", "nconf": "~0.8.2", - "nodebb-plugin-composer-default": "3.0.16", + "nodebb-plugin-composer-default": "3.0.17", "nodebb-plugin-dbsearch": "1.0.1", "nodebb-plugin-emoji-extended": "1.0.3", "nodebb-plugin-markdown": "4.0.17", From 52cec92df8b91f4eb8179faacc6990f68df36392 Mon Sep 17 00:00:00 2001 From: barisusakli Date: Thu, 24 Mar 2016 20:55:10 +0200 Subject: [PATCH 55/81] some cleanup, dont send ip on newpost --- src/socket.io/helpers.js | 20 ++++++++++++++------ src/socket.io/posts.js | 2 +- src/socket.io/topics.js | 30 +++--------------------------- 3 files changed, 18 insertions(+), 34 deletions(-) diff --git a/src/socket.io/helpers.js b/src/socket.io/helpers.js index 5524faf156..12a0e9d9b5 100644 --- a/src/socket.io/helpers.js +++ b/src/socket.io/helpers.js @@ -16,6 +16,11 @@ var plugins = require('../plugins'); var SocketHelpers = {}; SocketHelpers.notifyOnlineUsers = function(uid, result) { + winston.warn('[deprecated] SocketHelpers.notifyOnlineUsers, consider using socketHelpers.notifyNew(uid, \'newPost\', result);'); + SocketHelpers.notifyNew(uid, 'newPost', result); +}; + +SocketHelpers.notifyNew = function(uid, type, result) { async.waterfall([ function(next) { user.getUidsFromSet('users:online', 0, -1, next); @@ -24,20 +29,23 @@ SocketHelpers.notifyOnlineUsers = function(uid, result) { privileges.topics.filterUids('read', result.posts[0].topic.tid, uids, next); }, function(uids, next) { - plugins.fireHook('filter:sockets.sendNewPostToUids', {uidsTo: uids, uidFrom: uid, type: 'newPost'}, next); + plugins.fireHook('filter:sockets.sendNewPostToUids', {uidsTo: uids, uidFrom: uid, type: type}, next); } ], function(err, data) { if (err) { return winston.error(err.stack); } - var uids = data.uidsTo; + result.posts[0].ip = undefined; - for(var i=0; i Date: Thu, 24 Mar 2016 21:01:20 +0200 Subject: [PATCH 56/81] retry failed upserts closes #4467 --- src/database/mongo/sorted.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/database/mongo/sorted.js b/src/database/mongo/sorted.js index 0baa08b2f6..d8a9205ce0 100644 --- a/src/database/mongo/sorted.js +++ b/src/database/mongo/sorted.js @@ -524,6 +524,13 @@ module.exports = function(db, module) { data.score = parseInt(increment, 10); db.collection('objects').findAndModify({_key: key, value: value}, {}, {$inc: data}, {new: true, upsert: true}, function(err, result) { + // if there is duplicate key error retry the upsert + // https://github.com/NodeBB/NodeBB/issues/4467 + // https://jira.mongodb.org/browse/SERVER-14322 + // https://docs.mongodb.org/manual/reference/command/findAndModify/#upsert-and-unique-index + if (err && err.message.startsWith('E11000 duplicate key error')) { + return module.sortedSetIncrBy(key, increment, value, callback); + } callback(err, result && result.value ? result.value.score : null); }); }; From f277c6608968907892656331d3f583f3f9127de0 Mon Sep 17 00:00:00 2001 From: psychobunny Date: Thu, 24 Mar 2016 15:10:11 -0400 Subject: [PATCH 57/81] closes #4459 --- src/controllers/accounts/helpers.js | 16 ++++++++-------- src/views/admin/settings/user.tpl | 6 ++++++ 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/src/controllers/accounts/helpers.js b/src/controllers/accounts/helpers.js index 1cb7bb3c77..8acbdc08c8 100644 --- a/src/controllers/accounts/helpers.js +++ b/src/controllers/accounts/helpers.js @@ -58,7 +58,7 @@ helpers.getUserDataByUserSlug = function(userslug, callerUID, callback) { var userSettings = results.userSettings; var isAdmin = results.isAdmin; var isGlobalModerator = results.isGlobalModerator; - var self = parseInt(callerUID, 10) === parseInt(userData.uid, 10); + var isSelf = parseInt(callerUID, 10) === parseInt(userData.uid, 10); userData.joindateISO = utils.toISOString(userData.joindate); userData.lastonlineISO = utils.toISOString(userData.lastonline || userData.joindate); @@ -66,17 +66,17 @@ helpers.getUserDataByUserSlug = function(userslug, callerUID, callback) { userData.emailClass = 'hide'; - if (!(isAdmin || isGlobalModerator || self || (userData.email && userSettings.showemail))) { + if (!(isAdmin || isGlobalModerator || isSelf || (userData.email && userSettings.showemail))) { userData.email = ''; } else if (!userSettings.showemail) { userData.emailClass = ''; } - if (!isAdmin && !isGlobalModerator && !self && !userSettings.showfullname) { + if (!isAdmin && !isGlobalModerator && !isSelf && !userSettings.showfullname) { userData.fullname = ''; } - if (isAdmin || isGlobalModerator || self) { + if (isAdmin || isGlobalModerator || isSelf) { userData.ips = results.ips; } @@ -86,15 +86,15 @@ helpers.getUserDataByUserSlug = function(userslug, callerUID, callback) { userData.isAdmin = isAdmin; userData.isGlobalModerator = isGlobalModerator; userData.canBan = isAdmin || isGlobalModerator; - userData.canChangePassword = isAdmin || self; - userData.isSelf = self; - userData.showHidden = self || isAdmin || isGlobalModerator; + userData.canChangePassword = isAdmin || (isSelf && parseInt(meta.config['password:disableEdit'], 10) !== 1); + userData.isSelf = isSelf; + userData.showHidden = isSelf || isAdmin || isGlobalModerator; userData.groups = Array.isArray(results.groups) && results.groups.length ? results.groups[0] : []; userData.disableSignatures = meta.config.disableSignatures !== undefined && parseInt(meta.config.disableSignatures, 10) === 1; userData['reputation:disabled'] = parseInt(meta.config['reputation:disabled'], 10) === 1; userData['downvote:disabled'] = parseInt(meta.config['downvote:disabled'], 10) === 1; userData['email:confirmed'] = !!parseInt(userData['email:confirmed'], 10); - userData.profile_links = filterLinks(results.profile_links, self); + userData.profile_links = filterLinks(results.profile_links, isSelf); userData.sso = results.sso.associations; userData.status = user.getStatus(userData); userData.banned = parseInt(userData.banned, 10) === 1; diff --git a/src/views/admin/settings/user.tpl b/src/views/admin/settings/user.tpl index 08ae01fe68..55c54149c6 100644 --- a/src/views/admin/settings/user.tpl +++ b/src/views/admin/settings/user.tpl @@ -72,6 +72,12 @@ Disable email changes
+
+ +
- -
-
-
-
-

- Figure 1 – Hourly page views for this category -

-
-
-
-

- Figure 2 – Daily page views for this category -

-
-
-
-
-
-

- Figure 3 – Daily topics created in this category -

-
-
-
-

- Figure 4 – Daily posts made in this category -

-
-
-
diff --git a/src/views/admin/partials/categories/category-rows.tpl b/src/views/admin/partials/categories/category-rows.tpl index a48ec5a327..13e902fb99 100644 --- a/src/views/admin/partials/categories/category-rows.tpl +++ b/src/views/admin/partials/categories/category-rows.tpl @@ -19,6 +19,7 @@ + Edit From 87bd0c69d7733ecd7d03f7f3d7c1c36f25266a62 Mon Sep 17 00:00:00 2001 From: NodeBB Misty Date: Fri, 25 Mar 2016 16:56:05 -0400 Subject: [PATCH 62/81] Latest translations and fallbacks --- public/language/bg/error.json | 4 ++-- public/language/bg/groups.json | 2 +- public/language/bg/modules.json | 2 +- public/language/bg/user.json | 4 ++-- public/language/de/error.json | 6 +++--- public/language/de/groups.json | 2 +- public/language/de/modules.json | 2 +- public/language/de/user.json | 4 ++-- public/language/es/error.json | 6 +++--- public/language/es/modules.json | 2 +- public/language/es/notifications.json | 8 ++++---- public/language/es/pages.json | 8 ++++---- public/language/pt_BR/error.json | 4 ++-- public/language/pt_BR/groups.json | 2 +- public/language/pt_BR/modules.json | 2 +- public/language/pt_BR/user.json | 4 ++-- public/language/tr/error.json | 4 ++-- public/language/tr/groups.json | 2 +- public/language/tr/modules.json | 2 +- public/language/tr/notifications.json | 2 +- public/language/tr/user.json | 6 +++--- 21 files changed, 39 insertions(+), 39 deletions(-) diff --git a/public/language/bg/error.json b/public/language/bg/error.json index e7f49c6baf..0eaeb842d2 100644 --- a/public/language/bg/error.json +++ b/public/language/bg/error.json @@ -27,7 +27,7 @@ "password-too-long": "Паролата е твърде дълга", "user-banned": "Потребителят е блокиран", "user-too-new": "Съжаляваме, но трябва да изчакате поне %1 секунда/и, преди да направите първата си публикация", - "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", + "blacklisted-ip": "Съжаляваме, но Вашият IP адрес е забранен за ползване в тази общност. Ако смятате, че това е грешка, моля, свържете се с администратор.", "no-category": "Категорията не съществува", "no-topic": "Темата не съществува", "no-post": "Публикацията не съществува", @@ -99,5 +99,5 @@ "no-session-found": "Не е открита сесия за вход!", "not-in-room": "Потребителят не е в стаята", "no-users-in-room": "Няма потребители в тази стая", - "cant-kick-self": "You can't kick yourself from the group" + "cant-kick-self": "Не можете да изритате себе си от групата" } \ No newline at end of file diff --git a/public/language/bg/groups.json b/public/language/bg/groups.json index 48df626a17..f5ab2262ce 100644 --- a/public/language/bg/groups.json +++ b/public/language/bg/groups.json @@ -41,7 +41,7 @@ "details.hidden": "Скрита", "details.hidden_help": "Ако е включено, тази група няма да бъде извеждана в списъка от групи и потребителите ще трябва да бъдат поканени лично", "details.delete_group": "Изтриване на групата", - "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", + "details.private_system_help": "Частните групи са забранени на системно ниво; тази възможност не върши нищо", "event.updated": "Подробностите за групата бяха обновени", "event.deleted": "Групата „%1“ беше изтрита", "membership.accept-invitation": "Приемане на поканата", diff --git a/public/language/bg/modules.json b/public/language/bg/modules.json index 1be800b077..f3afdaaa4a 100644 --- a/public/language/bg/modules.json +++ b/public/language/bg/modules.json @@ -6,7 +6,7 @@ "chat.user_typing": "%1 пише...", "chat.user_has_messaged_you": "%1 Ви написа съобщение.", "chat.see_all": "Вижте всички разговори", - "chat.mark_all_read": "Mark all chats read", + "chat.mark_all_read": "Отбелязване на всички разговори като прочетени", "chat.no-messages": "Моля, изберете получател, за да видите историята на съобщенията", "chat.no-users-in-room": "Няма потребители в тази стая", "chat.recent-chats": "Скорошни разговори", diff --git a/public/language/bg/user.json b/public/language/bg/user.json index ed8eab5261..6e16e70603 100644 --- a/public/language/bg/user.json +++ b/public/language/bg/user.json @@ -39,7 +39,7 @@ "change_username": "Промяна на потребителското име", "change_email": "Промяна на е-пощата", "edit": "Редактиране", - "edit-profile": "Edit Profile", + "edit-profile": "Редактиране на профила", "default_picture": "Иконка по подразбиране", "uploaded_picture": "Качена снимка", "upload_new_picture": "Качване на нова снимка", @@ -92,7 +92,7 @@ "open_links_in_new_tab": "Отваряне на външните връзки в нов подпрозорец", "enable_topic_searching": "Включване на търсенето в темите", "topic_search_help": "Ако е включено, търсенето в темата ще замени стандартното поведение на браузъра при търсене в страницата и ще Ви позволи да претърсвате цялата тема, а не само това, което се вижда на екрана", - "scroll_to_my_post": "After posting a reply, show the new post", + "scroll_to_my_post": "След публикуване на отговор, да се показва новата публикация", "follow_topics_you_reply_to": "Следване на темите, на които отговаряте", "follow_topics_you_create": "Следване на темите, които създавате", "grouptitle": "Изберете заглавието на групата, което искате да се показва", diff --git a/public/language/de/error.json b/public/language/de/error.json index 6c4af25efe..40615e0e2e 100644 --- a/public/language/de/error.json +++ b/public/language/de/error.json @@ -27,7 +27,7 @@ "password-too-long": "Passwort ist zu lang", "user-banned": "Benutzer ist gesperrt", "user-too-new": "Entschuldigung, du musst %1 Sekunde(n) warten, bevor du deinen ersten Beitrag schreiben kannst.", - "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", + "blacklisted-ip": "Deine IP-Adresse ist für diese Plattform gesperrt. Sollte dies ein Irrtum sein, dann kontaktiere bitte einen Administrator.", "no-category": "Die Kategorie existiert nicht", "no-topic": "Das Thema existiert nicht", "no-post": "Der Beitrag existiert nicht", @@ -97,7 +97,7 @@ "wrong-login-type-username": "Bitte nutze deinen Benutzernamen zum einloggen", "invite-maximum-met": "Du hast bereits die maximale Anzahl an Personen eingeladen (%1 von %2).", "no-session-found": "Keine Login-Sitzung gefunden!", - "not-in-room": "Benutzer nicht in Raum", + "not-in-room": "Benutzer nicht im Raum", "no-users-in-room": "In diesem Raum befinden sich keine Benutzer.", - "cant-kick-self": "You can't kick yourself from the group" + "cant-kick-self": "Du kannst dich nicht selber aus der Gruppe entfernen." } \ No newline at end of file diff --git a/public/language/de/groups.json b/public/language/de/groups.json index d2d12b2813..5d328ac70d 100644 --- a/public/language/de/groups.json +++ b/public/language/de/groups.json @@ -41,7 +41,7 @@ "details.hidden": "Versteckt", "details.hidden_help": "Wenn aktiviert, wird diese Gruppe in der Gruppenliste nicht zu finden sein, und Benutzer werden manuell eingeladen werden müssen.", "details.delete_group": "Gruppe löschen", - "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", + "details.private_system_help": "Private Gruppen wurden systemweit deaktiviert. Diese Einstellung hat keine Funktion.", "event.updated": "Gruppendetails wurden aktualisiert", "event.deleted": "Die Gruppe \"%1\" wurde gelöscht.", "membership.accept-invitation": "Einladung akzeptieren", diff --git a/public/language/de/modules.json b/public/language/de/modules.json index 6640d8d546..2210c035fd 100644 --- a/public/language/de/modules.json +++ b/public/language/de/modules.json @@ -6,7 +6,7 @@ "chat.user_typing": "%1 tippt gerade ...", "chat.user_has_messaged_you": "%1 hat dir geschrieben.", "chat.see_all": "Alle Chats anzeigen", - "chat.mark_all_read": "Mark all chats read", + "chat.mark_all_read": "Alle als gelesen markieren", "chat.no-messages": "Bitte wähle einen Empfänger, um den jeweiligen Nachrichtenverlauf anzuzeigen.", "chat.no-users-in-room": "In diesem Raum befinden sich keine Benutzer.", "chat.recent-chats": "Aktuelle Chats", diff --git a/public/language/de/user.json b/public/language/de/user.json index 9af4a45399..addf47ab8f 100644 --- a/public/language/de/user.json +++ b/public/language/de/user.json @@ -39,7 +39,7 @@ "change_username": "Benutzernamen ändern", "change_email": "E-Mail ändern", "edit": "Ändern", - "edit-profile": "Edit Profile", + "edit-profile": "Profil ändern", "default_picture": "Standardsymbol", "uploaded_picture": "Hochgeladene Bilder", "upload_new_picture": "Neues Bild hochladen", @@ -92,7 +92,7 @@ "open_links_in_new_tab": "Ausgehende Links in neuem Tab öffnen", "enable_topic_searching": "Suchen innerhalb von Themen aktivieren", "topic_search_help": "Wenn aktiviert, ersetzt die im-Thema-Suche die Standardsuche des Browsers. Dadurch kannst du im ganzen Thema suchen, nicht nur im sichtbaren Abschnitt.", - "scroll_to_my_post": "After posting a reply, show the new post", + "scroll_to_my_post": "Zeige eigene Antwort nach dem Erstellen im Thema an", "follow_topics_you_reply_to": "Themen folgen, in denen auf dich geantwortet wird", "follow_topics_you_create": "Themen folgen, die du erstellst", "grouptitle": "Wähle den anzuzeigenden Gruppen Titel aus", diff --git a/public/language/es/error.json b/public/language/es/error.json index 14620522d4..44a95c2cd6 100644 --- a/public/language/es/error.json +++ b/public/language/es/error.json @@ -27,7 +27,7 @@ "password-too-long": "Contraseña muy corta", "user-banned": "Usuario baneado", "user-too-new": "Lo sentimos, es necesario que esperes %1 segundo(s) antes poder hacer tu primera publicación", - "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", + "blacklisted-ip": "Lo sentimos, tu dirección IP ha sido baneada de esta comunidad. Si crees que debe de haber un error, por favor contacte con un administrador.", "no-category": "La categoría no existe", "no-topic": "El tema no existe", "no-post": "La publicación no existe", @@ -51,8 +51,8 @@ "still-uploading": "Por favor, espera a que terminen las subidas.", "file-too-big": "El tamaño de fichero máximo es de %1 kB - por favor, suba un fichero más pequeño", "guest-upload-disabled": "Las subidas están deshabilitadas para los invitados", - "already-favourited": "You have already bookmarked this post", - "already-unfavourited": "You have already unbookmarked this post", + "already-favourited": "Ya habías guardado este post.", + "already-unfavourited": "Ya habías desguardado este post.", "cant-ban-other-admins": "¡No puedes expulsar a otros administradores!", "cant-remove-last-admin": "Tu eres el unico administrador. Añade otro usuario como administrador antes de eliminarte a ti mismo.", "invalid-image-type": "Tipo de imagen inválido. Los tipos permitidos son: %1", diff --git a/public/language/es/modules.json b/public/language/es/modules.json index 41d57a8fa9..f0e34b04a1 100644 --- a/public/language/es/modules.json +++ b/public/language/es/modules.json @@ -6,7 +6,7 @@ "chat.user_typing": "%1 está escribiendo...", "chat.user_has_messaged_you": "%1 te ha enviado un mensaje.", "chat.see_all": "Ver todos los chats", - "chat.mark_all_read": "Mark all chats read", + "chat.mark_all_read": "Marcar todos los chats como leídos", "chat.no-messages": "Por favor, selecciona un contacto para ver el historial de mensajes", "chat.no-users-in-room": "No hay usuarios en esta sala", "chat.recent-chats": "Chats recientes", diff --git a/public/language/es/notifications.json b/public/language/es/notifications.json index 78dae1fc51..1effb38fee 100644 --- a/public/language/es/notifications.json +++ b/public/language/es/notifications.json @@ -16,9 +16,9 @@ "upvoted_your_post_in_multiple": "%1 y otras %2 personas han votado positivamente tu respuesta en %3.", "moved_your_post": "%1 su tema ha sido movido a %2", "moved_your_topic": "%1 se ha movido %2", - "favourited_your_post_in": "%1 has bookmarked your post in %2.", - "favourited_your_post_in_dual": "%1 and %2 have bookmarked your post in %3.", - "favourited_your_post_in_multiple": "%1 and %2 others have bookmarked your post in %3.", + "favourited_your_post_in": "%1 se ha guardado su post en %2.", + "favourited_your_post_in_dual": "%1 y %2 se han guardado su post en %3.", + "favourited_your_post_in_multiple": "%1 y otros %2 usuarios se han guardado su post en %3.", "user_flagged_post_in": "%1 ha reportado una respuesta en %2", "user_flagged_post_in_dual": "%1 y %2 han reportado un post en %3", "user_flagged_post_in_multiple": "%1 y otras %2 personas han reportado un post en %3", @@ -30,7 +30,7 @@ "user_started_following_you_dual": "%1 y %2 comenzaron a seguirte.", "user_started_following_you_multiple": "%1 y otras %2 personas comenzaron a seguirte.", "new_register": "%1 envió una solicitud de registro.", - "new_register_multiple": "There are %1 registration requests awaiting review.", + "new_register_multiple": "Hay %1 peticiones de registros pendientes de revisión", "email-confirmed": "Correo electrónico confirmado", "email-confirmed-message": "Gracias por validar tu correo electrónico. Tu cuenta ya está completamente activa.", "email-confirm-error-message": "Hubo un problema al validar tu cuenta de correo electrónico. Quizá el código era erróneo o expiró...", diff --git a/public/language/es/pages.json b/public/language/es/pages.json index b151e4cb21..4a79f28222 100644 --- a/public/language/es/pages.json +++ b/public/language/es/pages.json @@ -6,12 +6,12 @@ "popular-month": "Temas populares del mes", "popular-alltime": "Temas populares de siempre", "recent": "Temas recientes", - "flagged-posts": "Flagged Posts", + "flagged-posts": "Posts reportados", "users/online": "Conectados", "users/latest": "Últimos usuarios", "users/sort-posts": "Top por mensajes", "users/sort-reputation": "Más reputados", - "users/banned": "Banned Users", + "users/banned": "Usuarios baneados", "users/search": "Buscar", "notifications": "Notificaciones", "tags": "Etiquetas", @@ -33,13 +33,13 @@ "account/posts": "Publicados por %1", "account/topics": "Temas creados por %1", "account/groups": "Grupos de %1", - "account/favourites": "%1's Bookmarked Posts", + "account/favourites": "Publicaciones favoritas de %1 ", "account/settings": "Preferencias", "account/watched": "Temas seguidos por %1", "account/upvoted": "Publicaciones votadas positivamente %1", "account/downvoted": "Publicaciones votadas negativamente %1", "account/best": "Mejores publicaciones hechas por %1", - "confirm": "Email Confirmed", + "confirm": "Correo electrónico confirmado", "maintenance.text": "%1 está en mantenimiento actualmente. Por favor vuelva en otro momento.", "maintenance.messageIntro": "Además, la administración ha dejado este mensaje:", "throttled.text": "%1 no está disponible debido a una carga excesiva. Por favor vuelva en otro momento" diff --git a/public/language/pt_BR/error.json b/public/language/pt_BR/error.json index 0701d351c6..e681f5664f 100644 --- a/public/language/pt_BR/error.json +++ b/public/language/pt_BR/error.json @@ -27,7 +27,7 @@ "password-too-long": "A senha é muito grande", "user-banned": "Usuário banido", "user-too-new": "Desculpe, é necessário que você aguarde %1 segundo(s) antes de fazer o seu primeiro post.", - "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", + "blacklisted-ip": "Desculpe, o seu endereço IP foi banido desta comunidade. Se você acha que isso é um engano, por favor contate um administrador.", "no-category": "A categoria não existe", "no-topic": "O tópico não existe", "no-post": "O post não existe", @@ -99,5 +99,5 @@ "no-session-found": "Nenhuma sessão de login encontrada!", "not-in-room": "O usuário não está na sala", "no-users-in-room": "Nenhum usuário nesta sala", - "cant-kick-self": "You can't kick yourself from the group" + "cant-kick-self": "Você não pode kickar a si mesmo do grupo" } \ No newline at end of file diff --git a/public/language/pt_BR/groups.json b/public/language/pt_BR/groups.json index bf499dfd29..ed5727555f 100644 --- a/public/language/pt_BR/groups.json +++ b/public/language/pt_BR/groups.json @@ -41,7 +41,7 @@ "details.hidden": "Oculto", "details.hidden_help": "Se habilitado, este grupo não se encontrará na listagem de grupos e os usuários terão de ser convivados manualmente", "details.delete_group": "Deletar Grupo", - "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", + "details.private_system_help": "Grupos particulares estão desabilitados em escala de sistema, esta opção não é válida", "event.updated": "Os detalhes do grupo foram atualizados", "event.deleted": "O grupo \"%1\" foi deletado", "membership.accept-invitation": "Aceitar Convite", diff --git a/public/language/pt_BR/modules.json b/public/language/pt_BR/modules.json index 08768bf900..597e750246 100644 --- a/public/language/pt_BR/modules.json +++ b/public/language/pt_BR/modules.json @@ -6,7 +6,7 @@ "chat.user_typing": "%1 está digitando ...", "chat.user_has_messaged_you": "%1 te enviou uma mensagem.", "chat.see_all": "Ver todos os chats", - "chat.mark_all_read": "Mark all chats read", + "chat.mark_all_read": "Marcar todas as conversas como lidas", "chat.no-messages": "Por favor, escolha um destinatário para visualizar o histórico de conversas", "chat.no-users-in-room": "Nenhum usuário nesta sala", "chat.recent-chats": "Conversas Recentes", diff --git a/public/language/pt_BR/user.json b/public/language/pt_BR/user.json index f087c1fa2f..21df201b80 100644 --- a/public/language/pt_BR/user.json +++ b/public/language/pt_BR/user.json @@ -39,7 +39,7 @@ "change_username": "Mudar nome de usuário", "change_email": "Mudar email", "edit": "Editar", - "edit-profile": "Edit Profile", + "edit-profile": "Editar Perfil", "default_picture": "Ícone Padrão", "uploaded_picture": "Foto Carregada", "upload_new_picture": "Carregar Nova Foto", @@ -92,7 +92,7 @@ "open_links_in_new_tab": "Abrir links externos em nova aba", "enable_topic_searching": "Habilitar Pesquisa dentro de Tópico", "topic_search_help": "Se habilitado, a pesquisa dentro do tópico irá substituir a pesquisa padrão do seu navegador. Assim, você poderá pesquisar pelo tópico inteiro, e não apenas pelo o que está sendo exibido na tela.", - "scroll_to_my_post": "After posting a reply, show the new post", + "scroll_to_my_post": "Após postar uma réplica, mostre o novo post", "follow_topics_you_reply_to": "Seguir tópicos que você responde", "follow_topics_you_create": "Seguir tópicos que você cria", "grouptitle": "Escolha o título do grupo que você deseja exibir", diff --git a/public/language/tr/error.json b/public/language/tr/error.json index d661f5a2df..bb03c66177 100644 --- a/public/language/tr/error.json +++ b/public/language/tr/error.json @@ -27,7 +27,7 @@ "password-too-long": "Parola çok uzun", "user-banned": "Kullanıcı Yasaklı", "user-too-new": "Özür dileriz, ilk iletinizi yapmadan önce %1 saniye beklemeniz gerekiyor", - "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", + "blacklisted-ip": "Üzgünüz, IP adresiniz, bu toplulukta yasaklandı. Bunun bir hata olduğunu düşünüyorsanız, bir yönetici ile irtibata geçiniz.", "no-category": "Kategori Yok", "no-topic": "Başlık Yok", "no-post": "İleti Yok", @@ -99,5 +99,5 @@ "no-session-found": "Giriş yapılmış bir oturum bulunamadı!", "not-in-room": "Odada kullanıcı yok", "no-users-in-room": "Bu odada kullanıcı yok", - "cant-kick-self": "You can't kick yourself from the group" + "cant-kick-self": "Kendinizi gruptan atamazsınız." } \ No newline at end of file diff --git a/public/language/tr/groups.json b/public/language/tr/groups.json index 88512b5cb4..a67cd1b2cb 100644 --- a/public/language/tr/groups.json +++ b/public/language/tr/groups.json @@ -41,7 +41,7 @@ "details.hidden": "Gizli", "details.hidden_help": "Bu grup eğer etkinse grup listelerinde bulunmaz, ve kullanıcılar bizzat davet eder", "details.delete_group": "Grubu Sil", - "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", + "details.private_system_help": "Özel gruplar sistem seviyesinde devre dışı bırakıldı. Bu seçenek hiçbir şeyi değiştirmeyecek.", "event.updated": "Grup detayları güncellenmiştir", "event.deleted": "\"%1\" grubu silinmiş", "membership.accept-invitation": "Daveti Kabul Et", diff --git a/public/language/tr/modules.json b/public/language/tr/modules.json index 3c02428014..b896b442a0 100644 --- a/public/language/tr/modules.json +++ b/public/language/tr/modules.json @@ -6,7 +6,7 @@ "chat.user_typing": "%1 yazıyor ...", "chat.user_has_messaged_you": "%1 size bir mesaj gönderdi.", "chat.see_all": "Bütün sohbetleri gör", - "chat.mark_all_read": "Mark all chats read", + "chat.mark_all_read": "Bütün sohbetleri okundu işaretle", "chat.no-messages": "Lütfen sohbet geçmişini görmek için bir kontak seçin", "chat.no-users-in-room": "Bu odada hiç kullanıcı yok", "chat.recent-chats": "Güncel Sohbetler", diff --git a/public/language/tr/notifications.json b/public/language/tr/notifications.json index eddd9194ea..c4e7a2276b 100644 --- a/public/language/tr/notifications.json +++ b/public/language/tr/notifications.json @@ -30,7 +30,7 @@ "user_started_following_you_dual": "%1 ve %2 seni takip etmeye başladı.\n", "user_started_following_you_multiple": "%1 ve %2 kişi daha seni takip etmeye başladı.", "new_register": "%1 kayıt olma isteği gönderdi.", - "new_register_multiple": "There are %1 registration requests awaiting review.", + "new_register_multiple": "Beklemede %1 kayıt olma isteği bulunmaktadır.", "email-confirmed": "E-posta onaylandı", "email-confirmed-message": "E-postanızı onaylandığınız için teşekkürler. Hesabınız tamamen aktive edildi.", "email-confirm-error-message": "E-posta adresinizi onaylarken bir hata oluştu. Kodunuz geçersiz ya da eski olabilir.", diff --git a/public/language/tr/user.json b/public/language/tr/user.json index 2229f9b6ce..1664a6ec81 100644 --- a/public/language/tr/user.json +++ b/public/language/tr/user.json @@ -39,7 +39,7 @@ "change_username": "Kullanıcı Adı Değiştir", "change_email": "Email Değiştir", "edit": "Düzenle", - "edit-profile": "Edit Profile", + "edit-profile": "Profil Düzenle", "default_picture": "Varsayılan İkon", "uploaded_picture": "Yüklenmiş Fotoğraflar", "upload_new_picture": "Yeni bir resim Yükle", @@ -56,7 +56,7 @@ "password": "Şifre", "username_taken_workaround": "İstediğiniz kullanıcı ismi zaten alınmış, bu yüzden biraz degiştirdik. Şimdiki kullanıcı isminiz %1", "password_same_as_username": "Parolanız kullanıcı adınız ile aynı, lütfen başka bir parola seçiniz.", - "password_same_as_email": "Your password is the same as your email, please select another password.", + "password_same_as_email": "Şifreniz mail adresiniz ile aynı lütfen başka bir şifre seçin.", "upload_picture": "Resim Yükle", "upload_a_picture": "Bir Resim Yükle", "remove_uploaded_picture": "Yüklenmiş fotoğrafı kaldır", @@ -92,7 +92,7 @@ "open_links_in_new_tab": "Dışarı giden bağlantıları yeni sekmede aç", "enable_topic_searching": "Konu içi aramayı aktive et", "topic_search_help": "Aktive edilirse, konu içi arama tarayıcının normal arama davranışını değiştirerek tüm konuyu aramanızı sağlar", - "scroll_to_my_post": "After posting a reply, show the new post", + "scroll_to_my_post": "Cevap yazdıktan sonra yeni gönderiyi göster", "follow_topics_you_reply_to": "Cevap verdiğim konuları takip et", "follow_topics_you_create": "Kendi konularımı takip et", "grouptitle": "Göstermek istediğiniz gurup başlığını seçin", From c50f228accc3485fcee74e875b9316f8e65e9261 Mon Sep 17 00:00:00 2001 From: Ben Lubar Date: Fri, 25 Mar 2016 17:59:12 -0500 Subject: [PATCH 63/81] when clicking the reply button, limit the selection to the post's content. --- public/src/client/topic/postTools.js | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/public/src/client/topic/postTools.js b/public/src/client/topic/postTools.js index 3fa13e22e6..37f5e5d9cf 100644 --- a/public/src/client/topic/postTools.js +++ b/public/src/client/topic/postTools.js @@ -199,13 +199,23 @@ define('forum/topic/postTools', ['share', 'navigator', 'components', 'translator if (!proceed) { var selectionText = ''; var selection = window.getSelection ? window.getSelection() : document.selection.createRange(); - var selectionNode = $(selection.baseNode || selection.anchorNode); + var content = button.parents('[component="post"]').find('[component="post/content"]').get(0); - if (selectionNode.parents('[component="post/content"]').length > 0) { - selectionText = selection.toString(); + if (selection.containsNode(content, true)) { + var bounds = document.createRange(); + bounds.selectNodeContents(content); + var range = selection.getRangeAt(0).cloneRange(); + if (range.compareBoundaryPoints(Range.START_TO_START, bounds) < 0) { + range.setStart(bounds.startContainer, bounds.startOffset); + } + if (range.compareBoundaryPoints(Range.END_TO_END, bounds) > 0) { + range.setEnd(bounds.endContainer, bounds.endOffset); + } + bounds.detach(); + selectionText = range.toString(); + range.detach(); } - button = selectionText ? selectionNode : button; var username = getUserName(button); if (getData(button, 'data-uid') === '0' || !getData(button, 'data-userslug')) { username = ''; From 395e71feee34b5049cfa5cba657647dbeec9ae3a Mon Sep 17 00:00:00 2001 From: Ben Lubar Date: Fri, 25 Mar 2016 18:17:19 -0500 Subject: [PATCH 64/81] fix topic reply button --- public/src/client/topic/postTools.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/src/client/topic/postTools.js b/public/src/client/topic/postTools.js index 37f5e5d9cf..d1961a29a6 100644 --- a/public/src/client/topic/postTools.js +++ b/public/src/client/topic/postTools.js @@ -201,7 +201,7 @@ define('forum/topic/postTools', ['share', 'navigator', 'components', 'translator var selection = window.getSelection ? window.getSelection() : document.selection.createRange(); var content = button.parents('[component="post"]').find('[component="post/content"]').get(0); - if (selection.containsNode(content, true)) { + if (content && selection.containsNode(content, true)) { var bounds = document.createRange(); bounds.selectNodeContents(content); var range = selection.getRangeAt(0).cloneRange(); From 97e440f990c30842d53647fe30ba838f47f2ca76 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 25 Mar 2016 19:40:06 -0400 Subject: [PATCH 65/81] Upped theme versions, closes #4464 --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index d9771ca51e..ef3d95c520 100644 --- a/package.json +++ b/package.json @@ -53,8 +53,8 @@ "nodebb-plugin-spam-be-gone": "0.4.6", "nodebb-rewards-essentials": "0.0.8", "nodebb-theme-lavender": "3.0.9", - "nodebb-theme-persona": "4.0.111", - "nodebb-theme-vanilla": "5.0.58", + "nodebb-theme-persona": "4.0.112", + "nodebb-theme-vanilla": "5.0.59", "nodebb-widget-essentials": "2.0.8", "nodemailer": "2.0.0", "nodemailer-sendmail-transport": "1.0.0", From 8013f124da19d614acc08c7dd854e34dc4357326 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Fri, 25 Mar 2016 19:54:22 -0400 Subject: [PATCH 66/81] fixes #4471 --- .../textcomplete/jquery.textcomplete.css | 33 - .../textcomplete/jquery.textcomplete.js | 1381 +++++++++++++++++ .../textcomplete/jquery.textcomplete.min.js | 1 - src/meta/css.js | 1 - src/meta/js.js | 2 +- 5 files changed, 1382 insertions(+), 36 deletions(-) delete mode 100644 public/vendor/jquery/textcomplete/jquery.textcomplete.css create mode 100644 public/vendor/jquery/textcomplete/jquery.textcomplete.js delete mode 100644 public/vendor/jquery/textcomplete/jquery.textcomplete.min.js diff --git a/public/vendor/jquery/textcomplete/jquery.textcomplete.css b/public/vendor/jquery/textcomplete/jquery.textcomplete.css deleted file mode 100644 index d33f066c5a..0000000000 --- a/public/vendor/jquery/textcomplete/jquery.textcomplete.css +++ /dev/null @@ -1,33 +0,0 @@ -/* Sample */ - -/*.dropdown-menu { - border: 1px solid #ddd; - background-color: white; -} - -.dropdown-menu li { - border-top: 1px solid #ddd; - padding: 2px 5px; -} - -.dropdown-menu li:first-child { - border-top: none; -} - -.dropdown-menu li:hover, -.dropdown-menu .active { - background-color: rgb(110, 183, 219); -}*/ - - -/* SHOULD not modify */ - -/*.dropdown-menu { - list-style: none; - padding: 0; - margin: 0; -} - -.dropdown-menu a:hover { - cursor: pointer; -}*/ \ No newline at end of file diff --git a/public/vendor/jquery/textcomplete/jquery.textcomplete.js b/public/vendor/jquery/textcomplete/jquery.textcomplete.js new file mode 100644 index 0000000000..ad1d508450 --- /dev/null +++ b/public/vendor/jquery/textcomplete/jquery.textcomplete.js @@ -0,0 +1,1381 @@ +(function (factory) { + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + define(['jquery'], factory); + } else if (typeof module === "object" && module.exports) { + var $ = require('jquery'); + module.exports = factory($); + } else { + // Browser globals + factory(jQuery); + } +}(function (jQuery) { + +/*! + * jQuery.textcomplete + * + * Repository: https://github.com/yuku-t/jquery-textcomplete + * License: MIT (https://github.com/yuku-t/jquery-textcomplete/blob/master/LICENSE) + * Author: Yuku Takahashi + * Version: 1.3.1 + */ + +if (typeof jQuery === 'undefined') { + throw new Error('jQuery.textcomplete requires jQuery'); +} + ++function ($) { + 'use strict'; + + var warn = function (message) { + if (console.warn) { console.warn(message); } + }; + + var id = 1; + + $.fn.textcomplete = function (strategies, option) { + var args = Array.prototype.slice.call(arguments); + return this.each(function () { + var self = this; + var $this = $(this); + var completer = $this.data('textComplete'); + if (!completer) { + option || (option = {}); + option._oid = id++; // unique object id + completer = new $.fn.textcomplete.Completer(this, option); + $this.data('textComplete', completer); + } + if (typeof strategies === 'string') { + if (!completer) return; + args.shift() + completer[strategies].apply(completer, args); + if (strategies === 'destroy') { + $this.removeData('textComplete'); + } + } else { + // For backward compatibility. + // TODO: Remove at v0.4 + $.each(strategies, function (obj) { + $.each(['header', 'footer', 'placement', 'maxCount'], function (name) { + if (obj[name]) { + completer.option[name] = obj[name]; + warn(name + 'as a strategy param is deprecated. Use option.'); + delete obj[name]; + } + }); + }); + completer.register($.fn.textcomplete.Strategy.parse(strategies, { + el: self, + $el: $this + })); + } + }); + }; + +}(jQuery); + ++function ($) { + 'use strict'; + + // Exclusive execution control utility. + // + // func - The function to be locked. It is executed with a function named + // `free` as the first argument. Once it is called, additional + // execution are ignored until the free is invoked. Then the last + // ignored execution will be replayed immediately. + // + // Examples + // + // var lockedFunc = lock(function (free) { + // setTimeout(function { free(); }, 1000); // It will be free in 1 sec. + // console.log('Hello, world'); + // }); + // lockedFunc(); // => 'Hello, world' + // lockedFunc(); // none + // lockedFunc(); // none + // // 1 sec past then + // // => 'Hello, world' + // lockedFunc(); // => 'Hello, world' + // lockedFunc(); // none + // + // Returns a wrapped function. + var lock = function (func) { + var locked, queuedArgsToReplay; + + return function () { + // Convert arguments into a real array. + var args = Array.prototype.slice.call(arguments); + if (locked) { + // Keep a copy of this argument list to replay later. + // OK to overwrite a previous value because we only replay + // the last one. + queuedArgsToReplay = args; + return; + } + locked = true; + var self = this; + args.unshift(function replayOrFree() { + if (queuedArgsToReplay) { + // Other request(s) arrived while we were locked. + // Now that the lock is becoming available, replay + // the latest such request, then call back here to + // unlock (or replay another request that arrived + // while this one was in flight). + var replayArgs = queuedArgsToReplay; + queuedArgsToReplay = undefined; + replayArgs.unshift(replayOrFree); + func.apply(self, replayArgs); + } else { + locked = false; + } + }); + func.apply(this, args); + }; + }; + + var isString = function (obj) { + return Object.prototype.toString.call(obj) === '[object String]'; + }; + + var isFunction = function (obj) { + return Object.prototype.toString.call(obj) === '[object Function]'; + }; + + var uniqueId = 0; + + function Completer(element, option) { + this.$el = $(element); + this.id = 'textcomplete' + uniqueId++; + this.strategies = []; + this.views = []; + this.option = $.extend({}, Completer._getDefaults(), option); + + if (!this.$el.is('input[type=text]') && !this.$el.is('input[type=search]') && !this.$el.is('textarea') && !element.isContentEditable && element.contentEditable != 'true') { + throw new Error('textcomplete must be called on a Textarea or a ContentEditable.'); + } + + if (element === document.activeElement) { + // element has already been focused. Initialize view objects immediately. + this.initialize() + } else { + // Initialize view objects lazily. + var self = this; + this.$el.one('focus.' + this.id, function () { self.initialize(); }); + } + } + + Completer._getDefaults = function () { + if (!Completer.DEFAULTS) { + Completer.DEFAULTS = { + appendTo: $('body'), + zIndex: '100' + }; + } + + return Completer.DEFAULTS; + } + + $.extend(Completer.prototype, { + // Public properties + // ----------------- + + id: null, + option: null, + strategies: null, + adapter: null, + dropdown: null, + $el: null, + + // Public methods + // -------------- + + initialize: function () { + var element = this.$el.get(0); + // Initialize view objects. + this.dropdown = new $.fn.textcomplete.Dropdown(element, this, this.option); + var Adapter, viewName; + if (this.option.adapter) { + Adapter = this.option.adapter; + } else { + if (this.$el.is('textarea') || this.$el.is('input[type=text]') || this.$el.is('input[type=search]')) { + viewName = typeof element.selectionEnd === 'number' ? 'Textarea' : 'IETextarea'; + } else { + viewName = 'ContentEditable'; + } + Adapter = $.fn.textcomplete[viewName]; + } + this.adapter = new Adapter(element, this, this.option); + }, + + destroy: function () { + this.$el.off('.' + this.id); + if (this.adapter) { + this.adapter.destroy(); + } + if (this.dropdown) { + this.dropdown.destroy(); + } + this.$el = this.adapter = this.dropdown = null; + }, + + deactivate: function () { + if (this.dropdown) { + this.dropdown.deactivate(); + } + }, + + // Invoke textcomplete. + trigger: function (text, skipUnchangedTerm) { + if (!this.dropdown) { this.initialize(); } + text != null || (text = this.adapter.getTextFromHeadToCaret()); + var searchQuery = this._extractSearchQuery(text); + if (searchQuery.length) { + var term = searchQuery[1]; + // Ignore shift-key, ctrl-key and so on. + if (skipUnchangedTerm && this._term === term && term !== "") { return; } + this._term = term; + this._search.apply(this, searchQuery); + } else { + this._term = null; + this.dropdown.deactivate(); + } + }, + + fire: function (eventName) { + var args = Array.prototype.slice.call(arguments, 1); + this.$el.trigger(eventName, args); + return this; + }, + + register: function (strategies) { + Array.prototype.push.apply(this.strategies, strategies); + }, + + // Insert the value into adapter view. It is called when the dropdown is clicked + // or selected. + // + // value - The selected element of the array callbacked from search func. + // strategy - The Strategy object. + // e - Click or keydown event object. + select: function (value, strategy, e) { + this._term = null; + this.adapter.select(value, strategy, e); + this.fire('change').fire('textComplete:select', value, strategy); + this.adapter.focus(); + }, + + // Private properties + // ------------------ + + _clearAtNext: true, + _term: null, + + // Private methods + // --------------- + + // Parse the given text and extract the first matching strategy. + // + // Returns an array including the strategy, the query term and the match + // object if the text matches an strategy; otherwise returns an empty array. + _extractSearchQuery: function (text) { + for (var i = 0; i < this.strategies.length; i++) { + var strategy = this.strategies[i]; + var context = strategy.context(text); + if (context || context === '') { + var matchRegexp = isFunction(strategy.match) ? strategy.match(text) : strategy.match; + if (isString(context)) { text = context; } + var match = text.match(matchRegexp); + if (match) { return [strategy, match[strategy.index], match]; } + } + } + return [] + }, + + // Call the search method of selected strategy.. + _search: lock(function (free, strategy, term, match) { + var self = this; + strategy.search(term, function (data, stillSearching) { + if (!self.dropdown.shown) { + self.dropdown.activate(); + } + if (self._clearAtNext) { + // The first callback in the current lock. + self.dropdown.clear(); + self._clearAtNext = false; + } + self.dropdown.setPosition(self.adapter.getCaretPosition()); + self.dropdown.render(self._zip(data, strategy, term)); + if (!stillSearching) { + // The last callback in the current lock. + free(); + self._clearAtNext = true; // Call dropdown.clear at the next time. + } + }, match); + }), + + // Build a parameter for Dropdown#render. + // + // Examples + // + // this._zip(['a', 'b'], 's'); + // //=> [{ value: 'a', strategy: 's' }, { value: 'b', strategy: 's' }] + _zip: function (data, strategy, term) { + return $.map(data, function (value) { + return { value: value, strategy: strategy, term: term }; + }); + } + }); + + $.fn.textcomplete.Completer = Completer; +}(jQuery); + ++function ($) { + 'use strict'; + + var $window = $(window); + + var include = function (zippedData, datum) { + var i, elem; + var idProperty = datum.strategy.idProperty + for (i = 0; i < zippedData.length; i++) { + elem = zippedData[i]; + if (elem.strategy !== datum.strategy) continue; + if (idProperty) { + if (elem.value[idProperty] === datum.value[idProperty]) return true; + } else { + if (elem.value === datum.value) return true; + } + } + return false; + }; + + var dropdownViews = {}; + $(document).on('click', function (e) { + var id = e.originalEvent && e.originalEvent.keepTextCompleteDropdown; + $.each(dropdownViews, function (key, view) { + if (key !== id) { view.deactivate(); } + }); + }); + + var commands = { + SKIP_DEFAULT: 0, + KEY_UP: 1, + KEY_DOWN: 2, + KEY_ENTER: 3, + KEY_PAGEUP: 4, + KEY_PAGEDOWN: 5, + KEY_ESCAPE: 6 + }; + + // Dropdown view + // ============= + + // Construct Dropdown object. + // + // element - Textarea or contenteditable element. + function Dropdown(element, completer, option) { + this.$el = Dropdown.createElement(option); + this.completer = completer; + this.id = completer.id + 'dropdown'; + this._data = []; // zipped data. + this.$inputEl = $(element); + this.option = option; + + // Override setPosition method. + if (option.listPosition) { this.setPosition = option.listPosition; } + if (option.height) { this.$el.height(option.height); } + var self = this; + $.each(['maxCount', 'placement', 'footer', 'header', 'noResultsMessage', 'className'], function (_i, name) { + if (option[name] != null) { self[name] = option[name]; } + }); + this._bindEvents(element); + dropdownViews[this.id] = this; + } + + $.extend(Dropdown, { + // Class methods + // ------------- + + createElement: function (option) { + var $parent = option.appendTo; + if (!($parent instanceof $)) { $parent = $($parent); } + var $el = $('
    ') + .addClass('dropdown-menu textcomplete-dropdown') + .attr('id', 'textcomplete-dropdown-' + option._oid) + .css({ + display: 'none', + left: 0, + position: 'absolute', + zIndex: option.zIndex + }) + .appendTo($parent); + return $el; + } + }); + + $.extend(Dropdown.prototype, { + // Public properties + // ----------------- + + $el: null, // jQuery object of ul.dropdown-menu element. + $inputEl: null, // jQuery object of target textarea. + completer: null, + footer: null, + header: null, + id: null, + maxCount: 10, + placement: '', + shown: false, + data: [], // Shown zipped data. + className: '', + + // Public methods + // -------------- + + destroy: function () { + // Don't remove $el because it may be shared by several textcompletes. + this.deactivate(); + + this.$el.off('.' + this.id); + this.$inputEl.off('.' + this.id); + this.clear(); + this.$el.remove(); + this.$el = this.$inputEl = this.completer = null; + delete dropdownViews[this.id] + }, + + render: function (zippedData) { + var contentsHtml = this._buildContents(zippedData); + var unzippedData = $.map(this.data, function (d) { return d.value; }); + if (this.data.length) { + var strategy = zippedData[0].strategy; + if (strategy.id) { + this.$el.attr('data-strategy', strategy.id); + } else { + this.$el.removeAttr('data-strategy'); + } + this._renderHeader(unzippedData); + this._renderFooter(unzippedData); + if (contentsHtml) { + this._renderContents(contentsHtml); + this._fitToBottom(); + this._fitToRight(); + this._activateIndexedItem(); + } + this._setScroll(); + } else if (this.noResultsMessage) { + this._renderNoResultsMessage(unzippedData); + } else if (this.shown) { + this.deactivate(); + } + }, + + setPosition: function (pos) { + // Make the dropdown fixed if the input is also fixed + // This can't be done during init, as textcomplete may be used on multiple elements on the same page + // Because the same dropdown is reused behind the scenes, we need to recheck every time the dropdown is showed + var position = 'absolute'; + // Check if input or one of its parents has positioning we need to care about + this.$inputEl.add(this.$inputEl.parents()).each(function() { + if($(this).css('position') === 'absolute') // The element has absolute positioning, so it's all OK + return false; + if($(this).css('position') === 'fixed') { + pos.top -= $window.scrollTop(); + pos.left -= $window.scrollLeft(); + position = 'fixed'; + return false; + } + }); + this.$el.css(this._applyPlacement(pos)); + this.$el.css({ position: position }); // Update positioning + + return this; + }, + + clear: function () { + this.$el.html(''); + this.data = []; + this._index = 0; + this._$header = this._$footer = this._$noResultsMessage = null; + }, + + activate: function () { + if (!this.shown) { + this.clear(); + this.$el.show(); + if (this.className) { this.$el.addClass(this.className); } + this.completer.fire('textComplete:show'); + this.shown = true; + } + return this; + }, + + deactivate: function () { + if (this.shown) { + this.$el.hide(); + if (this.className) { this.$el.removeClass(this.className); } + this.completer.fire('textComplete:hide'); + this.shown = false; + } + return this; + }, + + isUp: function (e) { + return e.keyCode === 38 || (e.ctrlKey && e.keyCode === 80); // UP, Ctrl-P + }, + + isDown: function (e) { + return e.keyCode === 40 || (e.ctrlKey && e.keyCode === 78); // DOWN, Ctrl-N + }, + + isEnter: function (e) { + var modifiers = e.ctrlKey || e.altKey || e.metaKey || e.shiftKey; + return !modifiers && (e.keyCode === 13 || e.keyCode === 9 || (this.option.completeOnSpace === true && e.keyCode === 32)) // ENTER, TAB + }, + + isPageup: function (e) { + return e.keyCode === 33; // PAGEUP + }, + + isPagedown: function (e) { + return e.keyCode === 34; // PAGEDOWN + }, + + isEscape: function (e) { + return e.keyCode === 27; // ESCAPE + }, + + // Private properties + // ------------------ + + _data: null, // Currently shown zipped data. + _index: null, + _$header: null, + _$noResultsMessage: null, + _$footer: null, + + // Private methods + // --------------- + + _bindEvents: function () { + this.$el.on('mousedown.' + this.id, '.textcomplete-item', $.proxy(this._onClick, this)); + this.$el.on('touchstart.' + this.id, '.textcomplete-item', $.proxy(this._onClick, this)); + this.$el.on('mouseover.' + this.id, '.textcomplete-item', $.proxy(this._onMouseover, this)); + this.$inputEl.on('keydown.' + this.id, $.proxy(this._onKeydown, this)); + }, + + _onClick: function (e) { + var $el = $(e.target); + e.preventDefault(); + e.originalEvent.keepTextCompleteDropdown = this.id; + if (!$el.hasClass('textcomplete-item')) { + $el = $el.closest('.textcomplete-item'); + } + var datum = this.data[parseInt($el.data('index'), 10)]; + this.completer.select(datum.value, datum.strategy, e); + var self = this; + // Deactive at next tick to allow other event handlers to know whether + // the dropdown has been shown or not. + setTimeout(function () { + self.deactivate(); + if (e.type === 'touchstart') { + self.$inputEl.focus(); + } + }, 0); + }, + + // Activate hovered item. + _onMouseover: function (e) { + var $el = $(e.target); + e.preventDefault(); + if (!$el.hasClass('textcomplete-item')) { + $el = $el.closest('.textcomplete-item'); + } + this._index = parseInt($el.data('index'), 10); + this._activateIndexedItem(); + }, + + _onKeydown: function (e) { + if (!this.shown) { return; } + + var command; + + if ($.isFunction(this.option.onKeydown)) { + command = this.option.onKeydown(e, commands); + } + + if (command == null) { + command = this._defaultKeydown(e); + } + + switch (command) { + case commands.KEY_UP: + e.preventDefault(); + this._up(); + break; + case commands.KEY_DOWN: + e.preventDefault(); + this._down(); + break; + case commands.KEY_ENTER: + e.preventDefault(); + this._enter(e); + break; + case commands.KEY_PAGEUP: + e.preventDefault(); + this._pageup(); + break; + case commands.KEY_PAGEDOWN: + e.preventDefault(); + this._pagedown(); + break; + case commands.KEY_ESCAPE: + e.preventDefault(); + this.deactivate(); + break; + } + }, + + _defaultKeydown: function (e) { + if (this.isUp(e)) { + return commands.KEY_UP; + } else if (this.isDown(e)) { + return commands.KEY_DOWN; + } else if (this.isEnter(e)) { + return commands.KEY_ENTER; + } else if (this.isPageup(e)) { + return commands.KEY_PAGEUP; + } else if (this.isPagedown(e)) { + return commands.KEY_PAGEDOWN; + } else if (this.isEscape(e)) { + return commands.KEY_ESCAPE; + } + }, + + _up: function () { + if (this._index === 0) { + this._index = this.data.length - 1; + } else { + this._index -= 1; + } + this._activateIndexedItem(); + this._setScroll(); + }, + + _down: function () { + if (this._index === this.data.length - 1) { + this._index = 0; + } else { + this._index += 1; + } + this._activateIndexedItem(); + this._setScroll(); + }, + + _enter: function (e) { + var datum = this.data[parseInt(this._getActiveElement().data('index'), 10)]; + this.completer.select(datum.value, datum.strategy, e); + this.deactivate(); + }, + + _pageup: function () { + var target = 0; + var threshold = this._getActiveElement().position().top - this.$el.innerHeight(); + this.$el.children().each(function (i) { + if ($(this).position().top + $(this).outerHeight() > threshold) { + target = i; + return false; + } + }); + this._index = target; + this._activateIndexedItem(); + this._setScroll(); + }, + + _pagedown: function () { + var target = this.data.length - 1; + var threshold = this._getActiveElement().position().top + this.$el.innerHeight(); + this.$el.children().each(function (i) { + if ($(this).position().top > threshold) { + target = i; + return false + } + }); + this._index = target; + this._activateIndexedItem(); + this._setScroll(); + }, + + _activateIndexedItem: function () { + this.$el.find('.textcomplete-item.active').removeClass('active'); + this._getActiveElement().addClass('active'); + }, + + _getActiveElement: function () { + return this.$el.children('.textcomplete-item:nth(' + this._index + ')'); + }, + + _setScroll: function () { + var $activeEl = this._getActiveElement(); + var itemTop = $activeEl.position().top; + var itemHeight = $activeEl.outerHeight(); + var visibleHeight = this.$el.innerHeight(); + var visibleTop = this.$el.scrollTop(); + if (this._index === 0 || this._index == this.data.length - 1 || itemTop < 0) { + this.$el.scrollTop(itemTop + visibleTop); + } else if (itemTop + itemHeight > visibleHeight) { + this.$el.scrollTop(itemTop + itemHeight + visibleTop - visibleHeight); + } + }, + + _buildContents: function (zippedData) { + var datum, i, index; + var html = ''; + for (i = 0; i < zippedData.length; i++) { + if (this.data.length === this.maxCount) break; + datum = zippedData[i]; + if (include(this.data, datum)) { continue; } + index = this.data.length; + this.data.push(datum); + html += '
  • '; + html += datum.strategy.template(datum.value, datum.term); + html += '
  • '; + } + return html; + }, + + _renderHeader: function (unzippedData) { + if (this.header) { + if (!this._$header) { + this._$header = $('
  • ').prependTo(this.$el); + } + var html = $.isFunction(this.header) ? this.header(unzippedData) : this.header; + this._$header.html(html); + } + }, + + _renderFooter: function (unzippedData) { + if (this.footer) { + if (!this._$footer) { + this._$footer = $('').appendTo(this.$el); + } + var html = $.isFunction(this.footer) ? this.footer(unzippedData) : this.footer; + this._$footer.html(html); + } + }, + + _renderNoResultsMessage: function (unzippedData) { + if (this.noResultsMessage) { + if (!this._$noResultsMessage) { + this._$noResultsMessage = $('
  • ').appendTo(this.$el); + } + var html = $.isFunction(this.noResultsMessage) ? this.noResultsMessage(unzippedData) : this.noResultsMessage; + this._$noResultsMessage.html(html); + } + }, + + _renderContents: function (html) { + if (this._$footer) { + this._$footer.before(html); + } else { + this.$el.append(html); + } + }, + + _fitToBottom: function() { + var windowScrollBottom = $window.scrollTop() + $window.height(); + var height = this.$el.height(); + if ((this.$el.position().top + height) > windowScrollBottom) { + this.$el.offset({top: windowScrollBottom - height}); + } + }, + + _fitToRight: function() { + // We don't know how wide our content is until the browser positions us, and at that point it clips us + // to the document width so we don't know if we would have overrun it. As a heuristic to avoid that clipping + // (which makes our elements wrap onto the next line and corrupt the next item), if we're close to the right + // edge, move left. We don't know how far to move left, so just keep nudging a bit. + var tolerance = 30; // pixels. Make wider than vertical scrollbar because we might not be able to use that space. + while (this.$el.offset().left + this.$el.width() > $window.width() - tolerance) { + this.$el.offset({left: this.$el.offset().left - tolerance}); + } + }, + + _applyPlacement: function (position) { + // If the 'placement' option set to 'top', move the position above the element. + if (this.placement.indexOf('top') !== -1) { + // Overwrite the position object to set the 'bottom' property instead of the top. + position = { + top: 'auto', + bottom: this.$el.parent().height() - position.top + position.lineHeight, + left: position.left + }; + } else { + position.bottom = 'auto'; + delete position.lineHeight; + } + if (this.placement.indexOf('absleft') !== -1) { + position.left = 0; + } else if (this.placement.indexOf('absright') !== -1) { + position.right = 0; + position.left = 'auto'; + } + return position; + } + }); + + $.fn.textcomplete.Dropdown = Dropdown; + $.extend($.fn.textcomplete, commands); +}(jQuery); + ++function ($) { + 'use strict'; + + // Memoize a search function. + var memoize = function (func) { + var memo = {}; + return function (term, callback) { + if (memo[term]) { + callback(memo[term]); + } else { + func.call(this, term, function (data) { + memo[term] = (memo[term] || []).concat(data); + callback.apply(null, arguments); + }); + } + }; + }; + + function Strategy(options) { + $.extend(this, options); + if (this.cache) { this.search = memoize(this.search); } + } + + Strategy.parse = function (strategiesArray, params) { + return $.map(strategiesArray, function (strategy) { + var strategyObj = new Strategy(strategy); + strategyObj.el = params.el; + strategyObj.$el = params.$el; + return strategyObj; + }); + }; + + $.extend(Strategy.prototype, { + // Public properties + // ----------------- + + // Required + match: null, + replace: null, + search: null, + + // Optional + id: null, + cache: false, + context: function () { return true; }, + index: 2, + template: function (obj) { return obj; }, + idProperty: null + }); + + $.fn.textcomplete.Strategy = Strategy; + +}(jQuery); + ++function ($) { + 'use strict'; + + var now = Date.now || function () { return new Date().getTime(); }; + + // Returns a function, that, as long as it continues to be invoked, will not + // be triggered. The function will be called after it stops being called for + // `wait` msec. + // + // This utility function was originally implemented at Underscore.js. + var debounce = function (func, wait) { + var timeout, args, context, timestamp, result; + var later = function () { + var last = now() - timestamp; + if (last < wait) { + timeout = setTimeout(later, wait - last); + } else { + timeout = null; + result = func.apply(context, args); + context = args = null; + } + }; + + return function () { + context = this; + args = arguments; + timestamp = now(); + if (!timeout) { + timeout = setTimeout(later, wait); + } + return result; + }; + }; + + function Adapter () {} + + $.extend(Adapter.prototype, { + // Public properties + // ----------------- + + id: null, // Identity. + completer: null, // Completer object which creates it. + el: null, // Textarea element. + $el: null, // jQuery object of the textarea. + option: null, + + // Public methods + // -------------- + + initialize: function (element, completer, option) { + this.el = element; + this.$el = $(element); + this.id = completer.id + this.constructor.name; + this.completer = completer; + this.option = option; + + if (this.option.debounce) { + this._onKeyup = debounce(this._onKeyup, this.option.debounce); + } + + this._bindEvents(); + }, + + destroy: function () { + this.$el.off('.' + this.id); // Remove all event handlers. + this.$el = this.el = this.completer = null; + }, + + // Update the element with the given value and strategy. + // + // value - The selected object. It is one of the item of the array + // which was callbacked from the search function. + // strategy - The Strategy associated with the selected value. + select: function (/* value, strategy */) { + throw new Error('Not implemented'); + }, + + // Returns the caret's relative coordinates from body's left top corner. + getCaretPosition: function () { + var position = this._getCaretRelativePosition(); + var offset = this.$el.offset(); + + // Calculate the left top corner of `this.option.appendTo` element. + var $parent = this.option.appendTo; + if ($parent) { + if (!($parent instanceof $)) { $parent = $($parent); } + var parentOffset = $parent.offsetParent().offset(); + offset.top -= parentOffset.top; + offset.left -= parentOffset.left; + } + + position.top += offset.top; + position.left += offset.left; + return position; + }, + + // Focus on the element. + focus: function () { + this.$el.focus(); + }, + + // Private methods + // --------------- + + _bindEvents: function () { + this.$el.on('keyup.' + this.id, $.proxy(this._onKeyup, this)); + }, + + _onKeyup: function (e) { + if (this._skipSearch(e)) { return; } + this.completer.trigger(this.getTextFromHeadToCaret(), true); + }, + + // Suppress searching if it returns true. + _skipSearch: function (clickEvent) { + switch (clickEvent.keyCode) { + case 9: // TAB + case 13: // ENTER + case 40: // DOWN + case 38: // UP + return true; + } + if (clickEvent.ctrlKey) switch (clickEvent.keyCode) { + case 78: // Ctrl-N + case 80: // Ctrl-P + return true; + } + } + }); + + $.fn.textcomplete.Adapter = Adapter; +}(jQuery); + ++function ($) { + 'use strict'; + + // Textarea adapter + // ================ + // + // Managing a textarea. It doesn't know a Dropdown. + function Textarea(element, completer, option) { + this.initialize(element, completer, option); + } + + $.extend(Textarea.prototype, $.fn.textcomplete.Adapter.prototype, { + // Public methods + // -------------- + + // Update the textarea with the given value and strategy. + select: function (value, strategy, e) { + var pre = this.getTextFromHeadToCaret(); + var post = this.el.value.substring(this.el.selectionEnd); + var newSubstr = strategy.replace(value, e); + if (typeof newSubstr !== 'undefined') { + if ($.isArray(newSubstr)) { + post = newSubstr[1] + post; + newSubstr = newSubstr[0]; + } + pre = pre.replace(strategy.match, newSubstr); + this.$el.val(pre + post); + this.el.selectionStart = this.el.selectionEnd = pre.length; + } + }, + + getTextFromHeadToCaret: function () { + return this.el.value.substring(0, this.el.selectionEnd); + }, + + // Private methods + // --------------- + + _getCaretRelativePosition: function () { + var p = $.fn.textcomplete.getCaretCoordinates(this.el, this.el.selectionStart); + return { + top: p.top + parseInt(this.$el.css('line-height'), 10) - this.$el.scrollTop(), + left: p.left - this.$el.scrollLeft() + }; + } + }); + + $.fn.textcomplete.Textarea = Textarea; +}(jQuery); + ++function ($) { + 'use strict'; + + var sentinelChar = '吶'; + + function IETextarea(element, completer, option) { + this.initialize(element, completer, option); + $('' + sentinelChar + '').css({ + position: 'absolute', + top: -9999, + left: -9999 + }).insertBefore(element); + } + + $.extend(IETextarea.prototype, $.fn.textcomplete.Textarea.prototype, { + // Public methods + // -------------- + + select: function (value, strategy, e) { + var pre = this.getTextFromHeadToCaret(); + var post = this.el.value.substring(pre.length); + var newSubstr = strategy.replace(value, e); + if (typeof newSubstr !== 'undefined') { + if ($.isArray(newSubstr)) { + post = newSubstr[1] + post; + newSubstr = newSubstr[0]; + } + pre = pre.replace(strategy.match, newSubstr); + this.$el.val(pre + post); + this.el.focus(); + var range = this.el.createTextRange(); + range.collapse(true); + range.moveEnd('character', pre.length); + range.moveStart('character', pre.length); + range.select(); + } + }, + + getTextFromHeadToCaret: function () { + this.el.focus(); + var range = document.selection.createRange(); + range.moveStart('character', -this.el.value.length); + var arr = range.text.split(sentinelChar) + return arr.length === 1 ? arr[0] : arr[1]; + } + }); + + $.fn.textcomplete.IETextarea = IETextarea; +}(jQuery); + +// NOTE: TextComplete plugin has contenteditable support but it does not work +// fine especially on old IEs. +// Any pull requests are REALLY welcome. + ++function ($) { + 'use strict'; + + // ContentEditable adapter + // ======================= + // + // Adapter for contenteditable elements. + function ContentEditable (element, completer, option) { + this.initialize(element, completer, option); + } + + $.extend(ContentEditable.prototype, $.fn.textcomplete.Adapter.prototype, { + // Public methods + // -------------- + + // Update the content with the given value and strategy. + // When an dropdown item is selected, it is executed. + select: function (value, strategy, e) { + var pre = this.getTextFromHeadToCaret(); + var sel = window.getSelection() + var range = sel.getRangeAt(0); + var selection = range.cloneRange(); + selection.selectNodeContents(range.startContainer); + var content = selection.toString(); + var post = content.substring(range.startOffset); + var newSubstr = strategy.replace(value, e); + if (typeof newSubstr !== 'undefined') { + if ($.isArray(newSubstr)) { + post = newSubstr[1] + post; + newSubstr = newSubstr[0]; + } + pre = pre.replace(strategy.match, newSubstr); + range.selectNodeContents(range.startContainer); + range.deleteContents(); + + // create temporary elements + var preWrapper = document.createElement("div"); + preWrapper.innerHTML = pre; + var postWrapper = document.createElement("div"); + postWrapper.innerHTML = post; + + // create the fragment thats inserted + var fragment = document.createDocumentFragment(); + var childNode; + var lastOfPre; + while (childNode = preWrapper.firstChild) { + lastOfPre = fragment.appendChild(childNode); + } + while (childNode = postWrapper.firstChild) { + fragment.appendChild(childNode); + } + + // insert the fragment & jump behind the last node in "pre" + range.insertNode(fragment); + range.setStartAfter(lastOfPre); + + range.collapse(true); + sel.removeAllRanges(); + sel.addRange(range); + } + }, + + // Private methods + // --------------- + + // Returns the caret's relative position from the contenteditable's + // left top corner. + // + // Examples + // + // this._getCaretRelativePosition() + // //=> { top: 18, left: 200, lineHeight: 16 } + // + // Dropdown's position will be decided using the result. + _getCaretRelativePosition: function () { + var range = window.getSelection().getRangeAt(0).cloneRange(); + var node = document.createElement('span'); + range.insertNode(node); + range.selectNodeContents(node); + range.deleteContents(); + var $node = $(node); + var position = $node.offset(); + position.left -= this.$el.offset().left; + position.top += $node.height() - this.$el.offset().top; + position.lineHeight = $node.height(); + $node.remove(); + return position; + }, + + // Returns the string between the first character and the caret. + // Completer will be triggered with the result for start autocompleting. + // + // Example + // + // // Suppose the html is 'hello wor|ld' and | is the caret. + // this.getTextFromHeadToCaret() + // // => ' wor' // not 'hello wor' + getTextFromHeadToCaret: function () { + var range = window.getSelection().getRangeAt(0); + var selection = range.cloneRange(); + selection.selectNodeContents(range.startContainer); + return selection.toString().substring(0, range.startOffset); + } + }); + + $.fn.textcomplete.ContentEditable = ContentEditable; +}(jQuery); + +// The MIT License (MIT) +// +// Copyright (c) 2015 Jonathan Ong me@jongleberry.com +// +// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +// associated documentation files (the "Software"), to deal in the Software without restriction, +// including without limitation the rights to use, copy, modify, merge, publish, distribute, +// sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is +// furnished to do so, subject to the following conditions: +// +// The above copyright notice and this permission notice shall be included in all copies or +// substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT +// NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. +// +// https://github.com/component/textarea-caret-position + +(function () { + +// The properties that we copy into a mirrored div. +// Note that some browsers, such as Firefox, +// do not concatenate properties, i.e. padding-top, bottom etc. -> padding, +// so we have to do every single property specifically. +var properties = [ + 'direction', // RTL support + 'boxSizing', + 'width', // on Chrome and IE, exclude the scrollbar, so the mirror div wraps exactly as the textarea does + 'height', + 'overflowX', + 'overflowY', // copy the scrollbar for IE + + 'borderTopWidth', + 'borderRightWidth', + 'borderBottomWidth', + 'borderLeftWidth', + 'borderStyle', + + 'paddingTop', + 'paddingRight', + 'paddingBottom', + 'paddingLeft', + + // https://developer.mozilla.org/en-US/docs/Web/CSS/font + 'fontStyle', + 'fontVariant', + 'fontWeight', + 'fontStretch', + 'fontSize', + 'fontSizeAdjust', + 'lineHeight', + 'fontFamily', + + 'textAlign', + 'textTransform', + 'textIndent', + 'textDecoration', // might not make a difference, but better be safe + + 'letterSpacing', + 'wordSpacing', + + 'tabSize', + 'MozTabSize' + +]; + +var isBrowser = (typeof window !== 'undefined'); +var isFirefox = (isBrowser && window.mozInnerScreenX != null); + +function getCaretCoordinates(element, position, options) { + if(!isBrowser) { + throw new Error('textarea-caret-position#getCaretCoordinates should only be called in a browser'); + } + + var debug = options && options.debug || false; + if (debug) { + var el = document.querySelector('#input-textarea-caret-position-mirror-div'); + if ( el ) { el.parentNode.removeChild(el); } + } + + // mirrored div + var div = document.createElement('div'); + div.id = 'input-textarea-caret-position-mirror-div'; + document.body.appendChild(div); + + var style = div.style; + var computed = window.getComputedStyle? getComputedStyle(element) : element.currentStyle; // currentStyle for IE < 9 + + // default textarea styles + style.whiteSpace = 'pre-wrap'; + if (element.nodeName !== 'INPUT') + style.wordWrap = 'break-word'; // only for textarea-s + + // position off-screen + style.position = 'absolute'; // required to return coordinates properly + if (!debug) + style.visibility = 'hidden'; // not 'display: none' because we want rendering + + // transfer the element's properties to the div + properties.forEach(function (prop) { + style[prop] = computed[prop]; + }); + + if (isFirefox) { + // Firefox lies about the overflow property for textareas: https://bugzilla.mozilla.org/show_bug.cgi?id=984275 + if (element.scrollHeight > parseInt(computed.height)) + style.overflowY = 'scroll'; + } else { + style.overflow = 'hidden'; // for Chrome to not render a scrollbar; IE keeps overflowY = 'scroll' + } + + div.textContent = element.value.substring(0, position); + // the second special handling for input type="text" vs textarea: spaces need to be replaced with non-breaking spaces - http://stackoverflow.com/a/13402035/1269037 + if (element.nodeName === 'INPUT') + div.textContent = div.textContent.replace(/\s/g, '\u00a0'); + + var span = document.createElement('span'); + // Wrapping must be replicated *exactly*, including when a long word gets + // onto the next line, with whitespace at the end of the line before (#7). + // The *only* reliable way to do that is to copy the *entire* rest of the + // textarea's content into the created at the caret position. + // for inputs, just '.' would be enough, but why bother? + span.textContent = element.value.substring(position) || '.'; // || because a completely empty faux span doesn't render at all + div.appendChild(span); + + var coordinates = { + top: span.offsetTop + parseInt(computed['borderTopWidth']), + left: span.offsetLeft + parseInt(computed['borderLeftWidth']) + }; + + if (debug) { + span.style.backgroundColor = '#aaa'; + } else { + document.body.removeChild(div); + } + + return coordinates; +} + +if (typeof module != 'undefined' && typeof module.exports != 'undefined') { + module.exports = getCaretCoordinates; +} else if(isBrowser){ + window.$.fn.textcomplete.getCaretCoordinates = getCaretCoordinates; +} + +}()); + +return jQuery; +})); \ No newline at end of file diff --git a/public/vendor/jquery/textcomplete/jquery.textcomplete.min.js b/public/vendor/jquery/textcomplete/jquery.textcomplete.min.js deleted file mode 100644 index 5ac596b9a4..0000000000 --- a/public/vendor/jquery/textcomplete/jquery.textcomplete.min.js +++ /dev/null @@ -1 +0,0 @@ -/*! jquery-textcomplete - v0.7.3 - 2015-08-31 */!function(a){if("function"==typeof define&&define.amd)define(["jquery"],a);else if("object"==typeof module&&module.exports){var b=require("jquery");module.exports=a(b)}else a(jQuery)}(function(a){if("undefined"==typeof a)throw new Error("jQuery.textcomplete requires jQuery");return+function(a){"use strict";var b=function(a){console.warn&&console.warn(a)},c=1;a.fn.textcomplete=function(d,e){var f=Array.prototype.slice.call(arguments);return this.each(function(){var g=this,h=a(this),i=h.data("textComplete");if(i||(e||(e={}),e._oid=c++,i=new a.fn.textcomplete.Completer(this,e),h.data("textComplete",i)),"string"==typeof d){if(!i)return;f.shift(),i[d].apply(i,f),"destroy"===d&&h.removeData("textComplete")}else a.each(d,function(c){a.each(["header","footer","placement","maxCount"],function(a){c[a]&&(i.option[a]=c[a],b(a+"as a strategy param is deprecated. Use option."),delete c[a])})}),i.register(a.fn.textcomplete.Strategy.parse(d,{el:g,$el:h}))})}}(a),+function(a){"use strict";function b(c,d){if(this.$el=a(c),this.id="textcomplete"+f++,this.strategies=[],this.views=[],this.option=a.extend({},b._getDefaults(),d),!this.$el.is("input[type=text]")&&!this.$el.is("textarea")&&!c.isContentEditable&&"true"!=c.contentEditable)throw new Error("textcomplete must be called on a Textarea or a ContentEditable.");if(c===document.activeElement)this.initialize();else{var e=this;this.$el.one("focus."+this.id,function(){e.initialize()})}}var c=function(a){var b,c;return function(){var d=Array.prototype.slice.call(arguments);if(b)return c=d,void 0;b=!0;var e=this;d.unshift(function f(){if(c){var d=c;c=void 0,d.unshift(f),a.apply(e,d)}else b=!1}),a.apply(this,d)}},d=function(a){return"[object String]"===Object.prototype.toString.call(a)},e=function(a){return"[object Function]"===Object.prototype.toString.call(a)},f=0;b._getDefaults=function(){return b.DEFAULTS||(b.DEFAULTS={appendTo:a("body"),zIndex:"100"}),b.DEFAULTS},a.extend(b.prototype,{id:null,option:null,strategies:null,adapter:null,dropdown:null,$el:null,initialize:function(){var b=this.$el.get(0);this.dropdown=new a.fn.textcomplete.Dropdown(b,this,this.option);var c,d;this.option.adapter?c=this.option.adapter:(d=this.$el.is("textarea")||this.$el.is("input[type=text]")?"number"==typeof b.selectionEnd?"Textarea":"IETextarea":"ContentEditable",c=a.fn.textcomplete[d]),this.adapter=new c(b,this,this.option)},destroy:function(){this.$el.off("."+this.id),this.adapter&&this.adapter.destroy(),this.dropdown&&this.dropdown.destroy(),this.$el=this.adapter=this.dropdown=null},trigger:function(a,b){this.dropdown||this.initialize(),null!=a||(a=this.adapter.getTextFromHeadToCaret());var c=this._extractSearchQuery(a);if(c.length){var d=c[1];if(b&&this._term===d)return;this._term=d,this._search.apply(this,c)}else this._term=null,this.dropdown.deactivate()},fire:function(a){var b=Array.prototype.slice.call(arguments,1);return this.$el.trigger(a,b),this},register:function(a){Array.prototype.push.apply(this.strategies,a)},select:function(a,b,c){this._term=null,this.adapter.select(a,b,c),this.fire("change").fire("textComplete:select",a,b),this.adapter.focus()},_clearAtNext:!0,_term:null,_extractSearchQuery:function(a){for(var b=0;b").addClass("dropdown-menu textcomplete-dropdown").attr("id","textcomplete-dropdown-"+b._oid).css({display:"none",left:0,position:"absolute",zIndex:b.zIndex}).appendTo(c);return d}}),a.extend(b.prototype,{$el:null,$inputEl:null,completer:null,footer:null,header:null,id:null,maxCount:10,placement:"",shown:!1,data:[],className:"",destroy:function(){this.deactivate(),this.$el.off("."+this.id),this.$inputEl.off("."+this.id),this.clear(),this.$el=this.$inputEl=this.completer=null,delete e[this.id]},render:function(b){var c=this._buildContents(b),d=a.map(this.data,function(a){return a.value});this.data.length?(this._renderHeader(d),this._renderFooter(d),c&&(this._renderContents(c),this._fitToBottom(),this._activateIndexedItem()),this._setScroll()):this.noResultsMessage?this._renderNoResultsMessage(d):this.shown&&this.deactivate()},setPosition:function(b){this.$el.css(this._applyPlacement(b));var c="absolute";return this.$inputEl.add(this.$inputEl.parents()).each(function(){return"absolute"===a(this).css("position")?!1:"fixed"===a(this).css("position")?(c="fixed",!1):void 0}),this.$el.css({position:c}),this},clear:function(){this.$el.html(""),this.data=[],this._index=0,this._$header=this._$footer=this._$noResultsMessage=null},activate:function(){return this.shown||(this.clear(),this.$el.show(),this.className&&this.$el.addClass(this.className),this.completer.fire("textComplete:show"),this.shown=!0),this},deactivate:function(){return this.shown&&(this.$el.hide(),this.className&&this.$el.removeClass(this.className),this.completer.fire("textComplete:hide"),this.shown=!1),this},isUp:function(a){return 38===a.keyCode||a.ctrlKey&&80===a.keyCode},isDown:function(a){return 40===a.keyCode||a.ctrlKey&&78===a.keyCode},isEnter:function(a){var b=a.ctrlKey||a.altKey||a.metaKey||a.shiftKey;return!b&&(13===a.keyCode||9===a.keyCode||this.option.completeOnSpace===!0&&32===a.keyCode)},isPageup:function(a){return 33===a.keyCode},isPagedown:function(a){return 34===a.keyCode},isEscape:function(a){return 27===a.keyCode},_data:null,_index:null,_$header:null,_$noResultsMessage:null,_$footer:null,_bindEvents:function(){this.$el.on("mousedown."+this.id,".textcomplete-item",a.proxy(this._onClick,this)),this.$el.on("touchstart."+this.id,".textcomplete-item",a.proxy(this._onClick,this)),this.$el.on("mouseover."+this.id,".textcomplete-item",a.proxy(this._onMouseover,this)),this.$inputEl.on("keydown."+this.id,a.proxy(this._onKeydown,this))},_onClick:function(b){var c=a(b.target);b.preventDefault(),b.originalEvent.keepTextCompleteDropdown=this.id,c.hasClass("textcomplete-item")||(c=c.closest(".textcomplete-item"));var d=this.data[parseInt(c.data("index"),10)];this.completer.select(d.value,d.strategy,b);var e=this;setTimeout(function(){e.deactivate(),"touchstart"===b.type&&e.$inputEl.focus()},0)},_onMouseover:function(b){var c=a(b.target);b.preventDefault(),c.hasClass("textcomplete-item")||(c=c.closest(".textcomplete-item")),this._index=parseInt(c.data("index"),10),this._activateIndexedItem()},_onKeydown:function(b){if(this.shown){var c;switch(a.isFunction(this.option.onKeydown)&&(c=this.option.onKeydown(b,f)),null==c&&(c=this._defaultKeydown(b)),c){case f.KEY_UP:b.preventDefault(),this._up();break;case f.KEY_DOWN:b.preventDefault(),this._down();break;case f.KEY_ENTER:b.preventDefault(),this._enter(b);break;case f.KEY_PAGEUP:b.preventDefault(),this._pageup();break;case f.KEY_PAGEDOWN:b.preventDefault(),this._pagedown();break;case f.KEY_ESCAPE:b.preventDefault(),this.deactivate()}}},_defaultKeydown:function(a){return this.isUp(a)?f.KEY_UP:this.isDown(a)?f.KEY_DOWN:this.isEnter(a)?f.KEY_ENTER:this.isPageup(a)?f.KEY_PAGEUP:this.isPagedown(a)?f.KEY_PAGEDOWN:this.isEscape(a)?f.KEY_ESCAPE:void 0},_up:function(){0===this._index?this._index=this.data.length-1:this._index-=1,this._activateIndexedItem(),this._setScroll()},_down:function(){this._index===this.data.length-1?this._index=0:this._index+=1,this._activateIndexedItem(),this._setScroll()},_enter:function(a){var b=this.data[parseInt(this._getActiveElement().data("index"),10)];this.completer.select(b.value,b.strategy,a),this.deactivate()},_pageup:function(){var b=0,c=this._getActiveElement().position().top-this.$el.innerHeight();this.$el.children().each(function(d){return a(this).position().top+a(this).outerHeight()>c?(b=d,!1):void 0}),this._index=b,this._activateIndexedItem(),this._setScroll()},_pagedown:function(){var b=this.data.length-1,c=this._getActiveElement().position().top+this.$el.innerHeight();this.$el.children().each(function(d){return a(this).position().top>c?(b=d,!1):void 0}),this._index=b,this._activateIndexedItem(),this._setScroll()},_activateIndexedItem:function(){this.$el.find(".textcomplete-item.active").removeClass("active"),this._getActiveElement().addClass("active")},_getActiveElement:function(){return this.$el.children(".textcomplete-item:nth("+this._index+")")},_setScroll:function(){var a=this._getActiveElement(),b=a.position().top,c=a.outerHeight(),d=this.$el.innerHeight(),e=this.$el.scrollTop();0===this._index||this._index==this.data.length-1||0>b?this.$el.scrollTop(b+e):b+c>d&&this.$el.scrollTop(b+c+e-d)},_buildContents:function(a){var b,c,e,f="";for(c=0;c',f+=b.strategy.template(b.value,b.term),f+="");return f},_renderHeader:function(b){if(this.header){this._$header||(this._$header=a('
  • ').prependTo(this.$el));var c=a.isFunction(this.header)?this.header(b):this.header;this._$header.html(c)}},_renderFooter:function(b){if(this.footer){this._$footer||(this._$footer=a('').appendTo(this.$el));var c=a.isFunction(this.footer)?this.footer(b):this.footer;this._$footer.html(c)}},_renderNoResultsMessage:function(b){if(this.noResultsMessage){this._$noResultsMessage||(this._$noResultsMessage=a('
  • ').appendTo(this.$el));var c=a.isFunction(this.noResultsMessage)?this.noResultsMessage(b):this.noResultsMessage;this._$noResultsMessage.html(c)}},_renderContents:function(a){this._$footer?this._$footer.before(a):this.$el.append(a)},_fitToBottom:function(){var a=c.scrollTop()+c.height(),b=this.$el.height();this.$el.position().top+b>a&&this.$el.offset({top:a-b})},_applyPlacement:function(a){return-1!==this.placement.indexOf("top")?a={top:"auto",bottom:this.$el.parent().height()-a.top+a.lineHeight,left:a.left}:(a.bottom="auto",delete a.lineHeight),-1!==this.placement.indexOf("absleft")?a.left=0:-1!==this.placement.indexOf("absright")&&(a.right=0,a.left="auto"),a}}),a.fn.textcomplete.Dropdown=b,a.extend(a.fn.textcomplete,f)}(a),+function(a){"use strict";function b(b){a.extend(this,b),this.cache&&(this.search=c(this.search))}var c=function(a){var b={};return function(c,d){b[c]?d(b[c]):a.call(this,c,function(a){b[c]=(b[c]||[]).concat(a),d.apply(null,arguments)})}};b.parse=function(c,d){return a.map(c,function(a){var c=new b(a);return c.el=d.el,c.$el=d.$el,c})},a.extend(b.prototype,{match:null,replace:null,search:null,cache:!1,context:function(){return!0},index:2,template:function(a){return a},idProperty:null}),a.fn.textcomplete.Strategy=b}(a),+function(a){"use strict";function b(){}var c=Date.now||function(){return(new Date).getTime()},d=function(a,b){var d,e,f,g,h,i=function(){var j=c()-g;b>j?d=setTimeout(i,b-j):(d=null,h=a.apply(f,e),f=e=null)};return function(){return f=this,e=arguments,g=c(),d||(d=setTimeout(i,b)),h}};a.extend(b.prototype,{id:null,completer:null,el:null,$el:null,option:null,initialize:function(b,c,e){this.el=b,this.$el=a(b),this.id=c.id+this.constructor.name,this.completer=c,this.option=e,this.option.debounce&&(this._onKeyup=d(this._onKeyup,this.option.debounce)),this._bindEvents()},destroy:function(){this.$el.off("."+this.id),this.$el=this.el=this.completer=null},select:function(){throw new Error("Not implemented")},getCaretPosition:function(){var a=this._getCaretRelativePosition(),b=this.$el.offset();return a.top+=b.top,a.left+=b.left,a},focus:function(){this.$el.focus()},_bindEvents:function(){this.$el.on("keyup."+this.id,a.proxy(this._onKeyup,this))},_onKeyup:function(a){this._skipSearch(a)||this.completer.trigger(this.getTextFromHeadToCaret(),!0)},_skipSearch:function(a){switch(a.keyCode){case 13:case 40:case 38:return!0}if(a.ctrlKey)switch(a.keyCode){case 78:case 80:return!0}}}),a.fn.textcomplete.Adapter=b}(a),+function(a){"use strict";function b(a,b,c){this.initialize(a,b,c)}b.DIV_PROPERTIES={left:-9999,position:"absolute",top:0,whiteSpace:"pre-wrap"},b.COPY_PROPERTIES=["border-width","font-family","font-size","font-style","font-variant","font-weight","height","letter-spacing","word-spacing","line-height","text-decoration","text-align","width","padding-top","padding-right","padding-bottom","padding-left","margin-top","margin-right","margin-bottom","margin-left","border-style","box-sizing","tab-size"],a.extend(b.prototype,a.fn.textcomplete.Adapter.prototype,{select:function(b,c,d){var e=this.getTextFromHeadToCaret(),f=this.el.value.substring(this.el.selectionEnd),g=c.replace(b,d);"undefined"!=typeof g&&(a.isArray(g)&&(f=g[1]+f,g=g[0]),e=e.replace(c.match,g),this.$el.val(e+f),this.el.selectionStart=this.el.selectionEnd=e.length)},_getCaretRelativePosition:function(){var b=a("
    ").css(this._copyCss()).text(this.getTextFromHeadToCaret()),c=a("").text(".").appendTo(b);this.$el.before(b);var d=c.position();return d.top+=c.height()-this.$el.scrollTop(),d.lineHeight=c.height(),b.remove(),d},_copyCss:function(){return a.extend({overflow:this.el.scrollHeight>this.el.offsetHeight?"scroll":"auto"},b.DIV_PROPERTIES,this._getStyles())},_getStyles:function(a){var c=a("
    ").css(["color"]).color;return"undefined"!=typeof c?function(){return this.$el.css(b.COPY_PROPERTIES)}:function(){var c=this.$el,d={};return a.each(b.COPY_PROPERTIES,function(a,b){d[b]=c.css(b)}),d}}(a),getTextFromHeadToCaret:function(){return this.el.value.substring(0,this.el.selectionEnd)}}),a.fn.textcomplete.Textarea=b}(a),+function(a){"use strict";function b(b,d,e){this.initialize(b,d,e),a(""+c+"").css({position:"absolute",top:-9999,left:-9999}).insertBefore(b)}var c="?";a.extend(b.prototype,a.fn.textcomplete.Textarea.prototype,{select:function(b,c,d){var e=this.getTextFromHeadToCaret(),f=this.el.value.substring(e.length),g=c.replace(b,d);if("undefined"!=typeof g){a.isArray(g)&&(f=g[1]+f,g=g[0]),e=e.replace(c.match,g),this.$el.val(e+f),this.el.focus();var h=this.el.createTextRange();h.collapse(!0),h.moveEnd("character",e.length),h.moveStart("character",e.length),h.select()}},getTextFromHeadToCaret:function(){this.el.focus();var a=document.selection.createRange();a.moveStart("character",-this.el.value.length);var b=a.text.split(c);return 1===b.length?b[0]:b[1]}}),a.fn.textcomplete.IETextarea=b}(a),+function(a){"use strict";function b(a,b,c){this.initialize(a,b,c)}a.extend(b.prototype,a.fn.textcomplete.Adapter.prototype,{select:function(b,c,d){var e=this.getTextFromHeadToCaret(),f=window.getSelection(),g=f.getRangeAt(0),h=g.cloneRange();h.selectNodeContents(g.startContainer);var i=h.toString(),j=i.substring(g.startOffset),k=c.replace(b,d);if("undefined"!=typeof k){a.isArray(k)&&(j=k[1]+j,k=k[0]),e=e.replace(c.match,k),g.selectNodeContents(g.startContainer),g.deleteContents();var l=document.createTextNode(e+j);g.insertNode(l),g.setStart(l,e.length),g.collapse(!0),f.removeAllRanges(),f.addRange(g)}},_getCaretRelativePosition:function(){var b=window.getSelection().getRangeAt(0).cloneRange(),c=document.createElement("span");b.insertNode(c),b.selectNodeContents(c),b.deleteContents();var d=a(c),e=d.offset();return e.left-=this.$el.offset().left,e.top+=d.height()-this.$el.offset().top,e.lineHeight=d.height(),d.remove(),e},getTextFromHeadToCaret:function(){var a=window.getSelection().getRangeAt(0),b=a.cloneRange();return b.selectNodeContents(a.startContainer),b.toString().substring(0,a.startOffset)}}),a.fn.textcomplete.ContentEditable=b}(a),a}); \ No newline at end of file diff --git a/src/meta/css.js b/src/meta/css.js index 0b901c6e13..81fa0528c2 100644 --- a/src/meta/css.js +++ b/src/meta/css.js @@ -67,7 +67,6 @@ module.exports = function(Meta) { source += '\n@import (inline) "..' + path.sep + '..' + path.sep + 'public/vendor/jquery/css/smoothness/jquery-ui-1.10.4.custom.min.css";'; source += '\n@import (inline) "..' + path.sep + '..' + path.sep + 'public/vendor/jquery/bootstrap-tagsinput/bootstrap-tagsinput.css";'; - source += '\n@import (inline) "..' + path.sep + '..' + path.sep + 'public/vendor/jquery/textcomplete/jquery.textcomplete.css";'; source += '\n@import (inline) "..' + path.sep + '..' + path.sep + 'public/vendor/colorpicker/colorpicker.css";'; source += '\n@import "..' + path.sep + '..' + path.sep + 'public/less/flags.less";'; source += '\n@import "..' + path.sep + '..' + path.sep + 'public/less/blacklist.less";'; diff --git a/src/meta/js.js b/src/meta/js.js index d8e4c04143..f2fabac6ac 100644 --- a/src/meta/js.js +++ b/src/meta/js.js @@ -24,7 +24,7 @@ module.exports = function(Meta) { 'public/vendor/visibility/visibility.min.js', 'public/vendor/bootstrap/js/bootstrap.min.js', 'public/vendor/jquery/bootstrap-tagsinput/bootstrap-tagsinput.min.js', - 'public/vendor/jquery/textcomplete/jquery.textcomplete.min.js', + 'public/vendor/jquery/textcomplete/jquery.textcomplete.js', 'public/vendor/requirejs/require.js', 'public/vendor/bootbox/bootbox.min.js', 'public/vendor/tinycon/tinycon.js', From fa689250e4e7f50c38728ade8ca852d617ea31ff Mon Sep 17 00:00:00 2001 From: NodeBB Misty Date: Sat, 26 Mar 2016 09:02:20 -0400 Subject: [PATCH 67/81] Latest translations and fallbacks --- public/language/en@pirate/category.json | 6 +-- public/language/en_US/topic.json | 2 +- public/language/ru/user.json | 2 +- public/language/rw/category.json | 2 +- public/language/rw/email.json | 6 +-- public/language/rw/global.json | 30 +++++------ public/language/rw/groups.json | 10 ++-- public/language/rw/pages.json | 72 ++++++++++++------------- public/language/rw/topic.json | 32 +++++------ public/language/rw/user.json | 46 ++++++++-------- public/language/rw/users.json | 2 +- 11 files changed, 105 insertions(+), 105 deletions(-) diff --git a/public/language/en@pirate/category.json b/public/language/en@pirate/category.json index 031dc5efec..631d322e1a 100644 --- a/public/language/en@pirate/category.json +++ b/public/language/en@pirate/category.json @@ -6,11 +6,11 @@ "no_topics": "Thar be no topics in 'tis category.
    Why don't ye give a go' postin' one?", "browsing": "browsin'", "no_replies": "No one has replied to ye message", - "no_new_posts": "No new posts.", + "no_new_posts": "Thar be no new posts.", "share_this_category": "Share this category", "watch": "Watch", "ignore": "Ignore", - "watch.message": "You are now watching updates from this category", - "ignore.message": "You are now ignoring updates from this category", + "watch.message": "Ye now be watchin' updates from 'tis category", + "ignore.message": "Ye now be ignorin' updates from 'tis category", "watched-categories": "Watched categories" } \ No newline at end of file diff --git a/public/language/en_US/topic.json b/public/language/en_US/topic.json index c7ce76e07b..bdf6d77f91 100644 --- a/public/language/en_US/topic.json +++ b/public/language/en_US/topic.json @@ -26,7 +26,7 @@ "tools": "Tools", "flag": "Flag", "locked": "Locked", - "bookmark_instructions": "Click here to return to the last unread post in this thread.", + "bookmark_instructions": "Click here to return to the last read post in this thread.", "flag_title": "Flag this post for moderation", "flag_success": "This post has been flagged for moderation.", "deleted_message": "This topic has been deleted. Only users with topic management privileges can see it.", diff --git a/public/language/ru/user.json b/public/language/ru/user.json index 3bd501675a..5e14dc8004 100644 --- a/public/language/ru/user.json +++ b/public/language/ru/user.json @@ -39,7 +39,7 @@ "change_username": "Изменить имя пользователя", "change_email": "Изменить Email", "edit": "Редактировать", - "edit-profile": "Edit Profile", + "edit-profile": "Редактировать профиль", "default_picture": "Иконка по умолчанию", "uploaded_picture": "Загруженный аватар", "upload_new_picture": "Загрузить новый", diff --git a/public/language/rw/category.json b/public/language/rw/category.json index e09c8b0787..5bfd9286eb 100644 --- a/public/language/rw/category.json +++ b/public/language/rw/category.json @@ -12,5 +12,5 @@ "ignore": "Ihorere", "watch.message": "Uzajya ubu ukurikirana ibishya byongewe muri iki cyiciro", "ignore.message": "Ubu urekeye aho kuzajya ubona ibishya byongewe muri iki cyiciro", - "watched-categories": "Watched categories" + "watched-categories": "Ibyiciro Bikurikirwa" } \ No newline at end of file diff --git a/public/language/rw/email.json b/public/language/rw/email.json index 138f1f5f14..626f11dec4 100644 --- a/public/language/rw/email.json +++ b/public/language/rw/email.json @@ -21,9 +21,9 @@ "digest.cta": "Kanda hano kugirango usure %1", "digest.unsub.info": "Izi ngingo z'ingenzi zakohererejwe kuko waziyandikishijeho", "digest.no_topics": "Nta biganiro bishyushye byagaragaye mu gihe gishize cya %1", - "digest.day": "day", - "digest.week": "week", - "digest.month": "month", + "digest.day": "umunsi", + "digest.week": "icyumweru", + "digest.month": "ukwezi", "notif.chat.subject": "Ubutumwa bwo mu gikari bwaturutse kuri %1", "notif.chat.cta": "Kanda hano kugirango ukomeze", "notif.chat.unsub.info": "Iri tangazo rijyanye n'ubutumwa bwo mu gikari waryohererejwe kubera ko wabihisemo mu byo uzajya umenyeshwa", diff --git a/public/language/rw/global.json b/public/language/rw/global.json index fa7e6d6ab3..aecc3f305e 100644 --- a/public/language/rw/global.json +++ b/public/language/rw/global.json @@ -33,7 +33,7 @@ "header.notifications": "Amatangazo", "header.search": "Shaka", "header.profile": "Ishusho", - "header.navigation": "Navigation", + "header.navigation": "Ukureba", "notifications.loading": "Amatangazo Araje", "chats.loading": "Ubutumwa Buraje", "motd.welcome": "Urakaza neza kuri NodeBB, urubuga rujyanye n'ibihe bizaza", @@ -49,9 +49,9 @@ "users": "Abantu", "topics": "Ibiganiro", "posts": "Ibyashyizweho", - "best": "Best", - "upvoted": "Upvoted", - "downvoted": "Downvoted", + "best": "Byiza", + "upvoted": "Byakunzwe", + "downvoted": "Byagawe", "views": "Byarebwe", "reputation": "Amanota", "read_more": "komeza usome", @@ -59,19 +59,19 @@ "posted_ago_by_guest": "%1 bishyizweho na Umushyitsi", "posted_ago_by": "%1 bishyizweho na %2", "posted_ago": "%1 biriho", - "posted_in": "posted in %1", - "posted_in_by": "posted in %1 by %2", + "posted_in": "byashyizwe muri %1", + "posted_in_by": "byashyizwe muri %1 na %2", "posted_in_ago": "%2 bishyizwe muri %1", "posted_in_ago_by": "%2 bishyizwe muri %1 na %3", "user_posted_ago": "%2 %1 ashyizeho", "guest_posted_ago": "%1 Umushyitsi ashyizeho", - "last_edited_by": "last edited by %1", + "last_edited_by": "biheruka guhindurwaho na %1", "norecentposts": "Nta Biherutseho", "norecenttopics": "Nta Biganiro Biherutse", "recentposts": "Ibiherutseho", "recentips": "Aderesi za IP Ziheruka Gusura", "away": "Ahandi", - "dnd": "Do not disturb", + "dnd": "Nta Kurogoya", "invisible": "Nta Kugaragara", "offline": "Nta Murongo", "email": "Email", @@ -84,11 +84,11 @@ "follow": "Kurikira", "unfollow": "Reka Gukurikira", "delete_all": "Siba Byose", - "map": "Map", - "sessions": "Login Sessions", - "ip_address": "IP Address", - "enter_page_number": "Enter page number", - "upload_file": "Upload file", - "upload": "Upload", - "allowed-file-types": "Allowed file types are %1" + "map": "Ikarita", + "sessions": "Ukwinjiramo", + "ip_address": "Aderesi ya IP", + "enter_page_number": "Shyiramo nimero ya paji", + "upload_file": "Pakira ifayilo", + "upload": "Pakira", + "allowed-file-types": "Ubwoko bw'amafayilo bwemewe ni %1" } \ No newline at end of file diff --git a/public/language/rw/groups.json b/public/language/rw/groups.json index f3e7be363f..5b02814cab 100644 --- a/public/language/rw/groups.json +++ b/public/language/rw/groups.json @@ -12,9 +12,9 @@ "invited.none": "Nta banyamuryango batumiwe bahari", "invited.uninvite": "Kuraho Ubutumire", "invited.search": "Shaka umuntu wo gutumira muri iri tsinda", - "invited.notification_title": "You have been invited to join %1", - "request.notification_title": "Group Membership Request from %1", - "request.notification_text": "%1 has requested to become a member of %2", + "invited.notification_title": "Utumiwe kwinjira muri %1", + "request.notification_title": "Ubusabe bwo Kujya mu Itsinda Buturutse %1", + "request.notification_text": "%1 yasabye kuba umunyamuryango w'itsinda rya %2", "cover-save": "Bika", "cover-saving": "Kubika", "details.title": "Ibijyanye n'Itsinda", @@ -41,7 +41,7 @@ "details.hidden": "Ahishe", "details.hidden_help": "Nubyemera, iri tsinda ntabwo rizajya rigaragara ku rutonde rw'andi matsinda kandi abantu bazajya basabwa kuritumirwamo buri wese ku giti cye mbere yo kurijyamo", "details.delete_group": "Senya Itsinda", - "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", + "details.private_system_help": "Amatsinda aheza ntabwo ari kwemerera aha, hano ntabwo byahahindurirwa", "event.updated": "Amakuru ku itsinda yahinduweho bijyanye n'igihe", "event.deleted": "Itsinda rya \"%1\" ryakuweho", "membership.accept-invitation": "Emera Ubutumire", @@ -50,5 +50,5 @@ "membership.leave-group": "Va mu Itsinda", "membership.reject": "Hakanira", "new-group.group_name": "Izina ry'Itsinda:", - "upload-group-cover": "Upload group cover" + "upload-group-cover": "Shyiraho ifoto yo hejuru iranga itsinda" } \ No newline at end of file diff --git a/public/language/rw/pages.json b/public/language/rw/pages.json index e4c597f8f0..b59cebf627 100644 --- a/public/language/rw/pages.json +++ b/public/language/rw/pages.json @@ -1,46 +1,46 @@ { "home": "Imbere", "unread": "Ibiganiro Bitarasomwa", - "popular-day": "Popular topics today", - "popular-week": "Popular topics this week", - "popular-month": "Popular topics this month", - "popular-alltime": "All time popular topics", + "popular-day": "Ibiganiro bikunzwe uyu munsi", + "popular-week": "Ibiganiro bikunzwe iki cyumweru", + "popular-month": "Ibiganiro bikunzwe uku kwezi", + "popular-alltime": "Ibiganiro byakunzwe ibihe byose", "recent": "Ibiganiro Biheruka", - "flagged-posts": "Flagged Posts", - "users/online": "Online Users", - "users/latest": "Latest Users", - "users/sort-posts": "Users with the most posts", - "users/sort-reputation": "Users with the most reputation", - "users/banned": "Banned Users", - "users/search": "User Search", + "flagged-posts": "Ibyatambikanywe", + "users/online": "Abariho", + "users/latest": "Abashya", + "users/sort-posts": "Abantu bashyizeho byinshi", + "users/sort-reputation": "Abantu bafite amanota menshi", + "users/banned": "Abantu Bakumiriwe", + "users/search": "Gushaka Abantu", "notifications": "Amatangazo", "tags": "Ibimenyetso", "tag": "Ibiganiro bifite ibimenyetso bya \"%1\"", - "register": "Register an account", - "login": "Login to your account", - "reset": "Reset your account password", - "categories": "Categories", - "groups": "Groups", - "group": "%1 group", - "chats": "Chats", - "chat": "Chatting with %1", - "account/edit": "Editing \"%1\"", - "account/edit/password": "Editing password of \"%1\"", - "account/edit/username": "Editing username of \"%1\"", - "account/edit/email": "Editing email of \"%1\"", - "account/following": "People %1 follows", - "account/followers": "People who follow %1", - "account/posts": "Posts made by %1", - "account/topics": "Topics created by %1", - "account/groups": "%1's Groups", - "account/favourites": "%1's Bookmarked Posts", - "account/settings": "User Settings", - "account/watched": "Topics watched by %1", - "account/upvoted": "Posts upvoted by %1", - "account/downvoted": "Posts downvoted by %1", - "account/best": "Best posts made by %1", - "confirm": "Email Confirmed", + "register": "Fungura Konte", + "login": "Injira muri konte yawe", + "reset": "Tangiza bundi bushya konte yawe", + "categories": "Ibyiciro", + "groups": "Amatsinda", + "group": "Itsinda %1 ", + "chats": "Mu Gikari", + "chat": "Ukuganira na %1", + "account/edit": "Uguhindura \"%1\"", + "account/edit/password": "Uguhindura ijambobanga rya \"%1\"", + "account/edit/username": "Uguhindura izina rya \"%1\"", + "account/edit/email": "Uguhindura email ya \"%1\"", + "account/following": "Abantu %1 akurikira", + "account/followers": "Abantu bakurikira %1", + "account/posts": "Ibyashyizweho na %1", + "account/topics": "Ibiganiro byatangijwe na %1", + "account/groups": "Amatsinda ya %1", + "account/favourites": "Ibyazigamwe na %1", + "account/settings": "Itunganya", + "account/watched": "Ibiganiro bikurikirwa na %1", + "account/upvoted": "Ibiganiro byakunzwe na %1", + "account/downvoted": "Ibiganiro byanzwe na %1", + "account/best": "Ibihebuje byashyizweho na %1", + "confirm": "Email Yemejwe", "maintenance.text": "%1 ntiboneka kuko ubu iri gutunganywa. Muze kongera kugaruka. ", "maintenance.messageIntro": "Byongeye, kandi, umuyobozi yasize ubu butumwa: ", - "throttled.text": "%1 is currently unavailable due to excessive load. Please come back another time." + "throttled.text": "% ntibonetse kubera ukunanirwa. Uze kugaruka ikindi gihe. " } \ No newline at end of file diff --git a/public/language/rw/topic.json b/public/language/rw/topic.json index 81574d5241..b3ba723ec7 100644 --- a/public/language/rw/topic.json +++ b/public/language/rw/topic.json @@ -13,7 +13,7 @@ "notify_me": "Uzajye umenyeshwa ibisubizo bishya kuri iki kiganiro", "quote": "Terura", "reply": "Subiza", - "reply-as-topic": "Reply as topic", + "reply-as-topic": "Bishyireho nk'ikiganiro", "guest-login-reply": "Injiramo maze usubize", "edit": "Hinduraho", "delete": "Siba", @@ -26,7 +26,7 @@ "tools": "Ibikoresho", "flag": "Tambikana", "locked": "Birafungiranye", - "bookmark_instructions": "Click here to return to the last unread post in this thread.", + "bookmark_instructions": "Kanda hano kugirango usubire ahari ibitarasomwe biheruka muri iki kiganiro.", "flag_title": "Bimenyeshe ubuyobozi", "flag_success": "Bimaze kumenyeshwa ubuyobozi ngo bikurikiranwe. ", "deleted_message": "Iki kiganiro cyamaze gukurwaho. Abantu babifitiye uburenganzira ni bo bonyine bashobora kukibona. ", @@ -34,8 +34,8 @@ "not_following_topic.message": "Ntabwo uzongera kujya umenyeshwa ku bibera muri iki kiganiro. ", "login_to_subscribe": "Ba umunyamuryango cyangwa winjiremo niba ushaka kwiyandikisha kuri iki kiganiro. ", "markAsUnreadForAll.success": "Ikiganiro kigizwe nk'icyasomwe na bose", - "mark_unread": "Mark unread", - "mark_unread.success": "Topic marked as unread.", + "mark_unread": "Garagaza nk'ibyasomwe", + "mark_unread.success": "Ikiganiro cyagaragajwe nk'icyasomwe.", "watch": "Cunga", "unwatch": "Rekeraho Gucunga", "watch.title": "Ujye umenyeshwa ibyongerwaho bishya kuri iki kiganiro", @@ -51,7 +51,7 @@ "thread_tools.move_all": "Byimure Byose", "thread_tools.fork": "Gabanyaho ku Kiganiro", "thread_tools.delete": "Kuraho Ikiganiro", - "thread_tools.delete-posts": "Delete Posts", + "thread_tools.delete-posts": "Siba Icyashizweho", "thread_tools.delete_confirm": "Wiringiye neza ko ushaka gukuraho iki kiganiro?", "thread_tools.restore": "Subizaho Ikiganiro", "thread_tools.restore_confirm": "Wiringiye neza ko ushaka kugarura iki kiganiro?", @@ -65,9 +65,9 @@ "disabled_categories_note": "Ibyiciro bitagaragazwa birasa n'ibipfutse", "confirm_move": "Imura", "confirm_fork": "Gabanyaho", - "favourite": "Bookmark", - "favourites": "Bookmarks", - "favourites.has_no_favourites": "You haven't bookmarked any posts yet.", + "favourite": "Zigama", + "favourites": "Ibyazigamwe", + "favourites.has_no_favourites": "Ntabwo urazigama ikintu na kimwe.", "loading_more_posts": "Ibindi Biraje", "move_topic": "Imura Ikiganiro", "move_topics": "Imura Ibiganiro", @@ -78,7 +78,7 @@ "fork_topic_instruction": "Kanda ku byashizweho ushaka kugabanyaho", "fork_no_pids": "Nta kintu wahisemo!", "fork_success": "Umaze kugabanyaho ku kiganiro! Kanda hano ugezwe ku kiganiro cyavutse. ", - "delete_posts_instruction": "Click the posts you want to delete/purge", + "delete_posts_instruction": "Kanda ku bintu ushaka guhisha/gusiba", "composer.title_placeholder": "Shyira umutwe w'ikiganiro cyawe aha...", "composer.handle_placeholder": "Izina", "composer.discard": "Byihorere", @@ -101,12 +101,12 @@ "newest_to_oldest": "Ibya Vuba Ujya ku bya Kera", "most_votes": "Amajwi yiganje", "most_posts": "Ibyashyizweho byiganje", - "stale.title": "Create new topic instead?", - "stale.warning": "The topic you are replying to is quite old. Would you like to create a new topic instead, and reference this one in your reply?", - "stale.create": "Create a new topic", - "stale.reply_anyway": "Reply to this topic anyway", - "link_back": "Re: [%1](%2)", + "stale.title": "Urashaka gutangiza ahubwo ikiganiro gishya?", + "stale.warning": "Ikiganiro ushaka kuvugaho cyarashaje. Wahitamo gutangiza ikiganiro gishya ariko wenda ukagaragaza kino mu gisubizo uza gushyiraho?", + "stale.create": "Tangiza ikiganiro gishya", + "stale.reply_anyway": "Vuga kuri iki kiganiro nubundi", + "link_back": "Igisubizo: [%1](%2)", "spam": "Spam", - "offensive": "Offensive", - "custom-flag-reason": "Enter a flagging reason" + "offensive": "Ugukomeretsanya", + "custom-flag-reason": "Shyiramo impamvu yo gutambikana" } \ No newline at end of file diff --git a/public/language/rw/user.json b/public/language/rw/user.json index 937c32576c..9ca89d0160 100644 --- a/public/language/rw/user.json +++ b/public/language/rw/user.json @@ -12,7 +12,7 @@ "delete_account": "Siba Konte", "delete_account_confirm": "Wiringiye neza ko ushaka gusiba konte yawe?
    Numara kuyisiba ntabwo urabasha kwisubira kandi nturabasha kugarura ibyo wari ufiteho

    Shyiramo izina ryawe kugirango wemeze ko koko ushaka gusenya iyi konte.", "delete_this_account_confirm": "Wiringiye neza ko ushaka gusiba iyi konte?
    Ntabwo uri bubashe kwisubira kandi ntabwo urabasha gusubirana ibyo wari ufiteho numara kuyisiba

    ", - "account-deleted": "Account deleted", + "account-deleted": "Konte yasibwe", "fullname": "Izina Ryuzuye", "website": "Urubuga", "location": "Ahantu", @@ -22,7 +22,7 @@ "profile": "Ishusho", "profile_views": "Ishusho Yarebwe", "reputation": "Amanota", - "favourites": "Bookmarks", + "favourites": "Ibyazigamwe", "watched": "Ibikurikiranwa", "followers": "Abamukurikira", "following": "Akurikira", @@ -30,17 +30,17 @@ "signature": "Intero", "birthday": "Itariki y'Amavuko", "chat": "Mu Gikari", - "chat_with": "Chat with %1", + "chat_with": "Ganira na %1", "follow": "Kurikira", "unfollow": "Ntukurikire", "more": "Ibindi", "profile_update_success": "Ishusho yashyizwe ku gihe nta ngorane!", "change_picture": "Hindura Ifoto", - "change_username": "Change Username", - "change_email": "Change Email", + "change_username": "Hindura Izina", + "change_email": "Hindura Email", "edit": "Hinduraho", - "edit-profile": "Edit Profile", - "default_picture": "Default Icon", + "edit-profile": "Hinduraho ku Ishusho", + "default_picture": "Akamenyetso Gasanzwe", "uploaded_picture": "Ifoto Yapakiwe", "upload_new_picture": "Pakira Ifoto Nshya", "upload_new_picture_from_url": "Pakira Ifoto Nshya Ukoresheje URL", @@ -55,12 +55,12 @@ "confirm_password": "Emeza Ijambobanga", "password": "Ijambobanga", "username_taken_workaround": "Izina ushaka kujya ukoresha twasanze ryarafashwe. Ntugire impungenge kuko twakuboneye iryo byenda kumera kimwe. Uzaba uzwi ku izina rya %1", - "password_same_as_username": "Your password is the same as your username, please select another password.", - "password_same_as_email": "Your password is the same as your email, please select another password.", + "password_same_as_username": "Ijambobanga ryawe rirasa neza n'izina ukoresha; hitamo irindi jambobanga.", + "password_same_as_email": "Ijambobanga ryawe rirasa neza na email yawe; hitamo irindi jambobanga.", "upload_picture": "Gushyiraho ifoto", "upload_a_picture": "Shyiraho ifoto", - "remove_uploaded_picture": "Remove Uploaded Picture", - "upload_cover_picture": "Upload cover picture", + "remove_uploaded_picture": "Kuraho Ifoto", + "upload_cover_picture": "Pakira ifoto yo hejuru", "settings": "Itunganya", "show_email": "Hagaragazwe Email Yanjye", "show_fullname": "Hagaragazwe Izina Ryuzuye Ryanjye", @@ -79,9 +79,9 @@ "has_no_posts": "Uyu muntu nta kintu arashyiraho. ", "has_no_topics": "Uyu muntu nta kiganiro aratangiza na kimwe. ", "has_no_watched_topics": "Uyu muntu ntabwo arakurikira ikiganiro na kimwe.", - "has_no_upvoted_posts": "This user hasn't upvoted any posts yet.", - "has_no_downvoted_posts": "This user hasn't downvoted any posts yet.", - "has_no_voted_posts": "This user has no voted posts", + "has_no_upvoted_posts": "Uyu muntu ntabwo arashima icyashyizweho na kimwe.", + "has_no_downvoted_posts": "Uyu muntu ntabwo aragaya icyashizweho na kimwe. ", + "has_no_voted_posts": "Uyu muntu ntabwo aragira ikintu yashimiwe gushyiraho", "email_hidden": "Email Yahishwe", "hidden": "byahishwe", "paginate_description": "Gabanya ibiganiro n'ibyashyizweho mu ma paji aho kugirango umuntu ajye amanuka ubudahagarara ", @@ -92,18 +92,18 @@ "open_links_in_new_tab": "Fungurira imirongo ijya hanze mu idirishya rishya", "enable_topic_searching": "Emerera Ugushakira mu Kiganiro", "topic_search_help": "Nibyemerwa, ugushakira mu kiganiro bizajya biba ari byo bikorwa maze bitume umuntu abasha gushakira mu kiganiro hose aho gushakira kuri paji igaragarira amaso, imbere yawe gusa", - "scroll_to_my_post": "After posting a reply, show the new post", + "scroll_to_my_post": "Nyuma yo gushyiraho igisubizo, hagaragare icyashyizweho gishya", "follow_topics_you_reply_to": "Kurikira ibiganiro ushyiraho ibisubizo", "follow_topics_you_create": "Kurikira ibiganiro uba watangije", "grouptitle": "Hitamo umutwe w'itsinda ushaka ko uzajya ugaragara", "no-group-title": "Nta mutwe w'itsinda", - "select-skin": "Select a Skin", - "select-homepage": "Select a Homepage", - "homepage": "Homepage", - "homepage_description": "Select a page to use as the forum homepage or 'None' to use the default homepage.", - "custom_route": "Custom Homepage Route", - "custom_route_help": "Enter a route name here, without any preceding slash (e.g. \"recent\", or \"popular\")", - "sso.title": "Single Sign-on Services", - "sso.associated": "Associated with", + "select-skin": "Hitamo Uruhu", + "select-homepage": "Hitamo Paji y'Imbere", + "homepage": "Paji y'Imbere", + "homepage_description": "Hitamo paji yo kugaragaza imbere cyangwa ntuyihitemo kugirango hakoreshwe paji uru rubuga rwagennye", + "custom_route": "Umurongo Wundi wa Paji y'Imbere", + "custom_route_help": "Shyiramo izina ry'inzira, utiriwe ushyiraho akarongo (ni ukuvuga ni nko kwandika gusa \"ibiheruka\" cyangwa \"ibikunzwe\")", + "sso.title": "Kwinjiramo ukoreshe serivisi za SSO", + "sso.associated": "Bisanishijwe na", "sso.not-associated": "Click here to associate with" } \ No newline at end of file diff --git a/public/language/rw/users.json b/public/language/rw/users.json index 67afa61e34..16993f0592 100644 --- a/public/language/rw/users.json +++ b/public/language/rw/users.json @@ -16,5 +16,5 @@ "unread_topics": "Ibiganiro Bitarasomwa", "categories": "Ibyiciro", "tags": "Ibimenyetso", - "no-users-found": "No users found!" + "no-users-found": "Nta muntu wabonetse" } \ No newline at end of file From 5705681aa050115c57a3fed2b35cfd7b5af21626 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Sat, 26 Mar 2016 14:03:14 -0400 Subject: [PATCH 68/81] tweaked registration queue logic a bit - encoding inputs during url construction - limiting maximum # of parallel requests to 20 - using map instead of forEach --- src/user/approval.js | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/src/user/approval.js b/src/user/approval.js index 890d6ee2ca..41237043eb 100644 --- a/src/user/approval.js +++ b/src/user/approval.js @@ -147,13 +147,18 @@ module.exports = function(User) { db.getObjects(keys, next); }, function(users, next) { - users.forEach(function(user, index) { - if (user) { - user.timestampISO = utils.toISOString(data[index].score); + users = users.map(function(user, index) { + if (!user) { + return null; } - }); - async.map(users, function(user, next) { + user.timestampISO = utils.toISOString(data[index].score); + delete user.hashedPassword; + + return user; + }).filter(Boolean); + + async.mapLimit(users, 20, function(user, next) { if (!user) { return next(null, user); } @@ -161,18 +166,25 @@ module.exports = function(User) { // temporary: see http://www.stopforumspam.com/forum/viewtopic.php?id=6392 user.ip = user.ip.replace('::ffff:', ''); - request('http://api.stopforumspam.org/api?ip=' + user.ip + '&email=' + user.email + '&username=' + user.username + '&f=json', function (err, response, body) { + request({ + method: 'get', + url: 'http://api.stopforumspam.org/api' + + '?ip=' + encodeURIComponent(user.ip) + + '&email=' + encodeURIComponent(user.email) + + '&username=' + encodeURIComponent(user.username) + + '&f=json', + json: true + }, function (err, response, body) { if (err) { return next(null, user); } if (response.statusCode === 200) { - var data = JSON.parse(body); - user.spamData = data; - - user.usernameSpam = data.username.frequency > 0 || data.username.appears > 0; - user.emailSpam = data.email.frequency > 0 || data.email.appears > 0; - user.ipSpam = data.ip.frequency > 0 || data.ip.appears > 0; + user.spamData = body; + user.usernameSpam = body.username.frequency > 0 || body.username.appears > 0; + user.emailSpam = body.email.frequency > 0 || body.email.appears > 0; + user.ipSpam = body.ip.frequency > 0 || body.ip.appears > 0; } + next(null, user); }); }, next); From 5ebf22ca49d3f9e47d3a34dedcdeb5cda5251ecc Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Sat, 26 Mar 2016 14:17:30 -0400 Subject: [PATCH 69/81] upped composer version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index ef3d95c520..286e4e712d 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "mongodb": "~2.1.3", "morgan": "^1.3.2", "nconf": "~0.8.2", - "nodebb-plugin-composer-default": "3.0.17", + "nodebb-plugin-composer-default": "3.0.18", "nodebb-plugin-dbsearch": "1.0.1", "nodebb-plugin-emoji-extended": "1.0.3", "nodebb-plugin-markdown": "4.0.17", From 3b4b832f7570c896d3b64b94832790390fdc404b Mon Sep 17 00:00:00 2001 From: NodeBB Misty Date: Sun, 27 Mar 2016 09:02:12 -0400 Subject: [PATCH 70/81] Latest translations and fallbacks --- public/language/nl/error.json | 4 ++-- public/language/nl/modules.json | 2 +- public/language/nl/user.json | 4 ++-- public/language/rw/error.json | 2 +- public/language/rw/groups.json | 2 +- public/language/rw/modules.json | 26 +++++++++++++------------- 6 files changed, 20 insertions(+), 20 deletions(-) diff --git a/public/language/nl/error.json b/public/language/nl/error.json index dba42057dd..9b6c912a23 100644 --- a/public/language/nl/error.json +++ b/public/language/nl/error.json @@ -27,7 +27,7 @@ "password-too-long": "Wachtwoord is te lang", "user-banned": "Gebruiker verbannen", "user-too-new": "Helaas, het is een vereiste om %1 seconde(n) te wachten voordat het eerste bericht geplaatst kan worden.", - "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", + "blacklisted-ip": "Sorry, uw IP-adres is verbannen uit deze community. Als u meent dat dit onterecht is, neem dan contact op met een beheerder.", "no-category": "Categorie bestaat niet", "no-topic": "Onderwerp bestaat niet", "no-post": "Bericht bestaat niet", @@ -99,5 +99,5 @@ "no-session-found": "Geen login sessie gevonden!", "not-in-room": "Gebruiker niet in de chat", "no-users-in-room": "Er zijn geen gebruikers in deze chat", - "cant-kick-self": "You can't kick yourself from the group" + "cant-kick-self": "Je kunt jezelf niet uit een groep schoppen" } \ No newline at end of file diff --git a/public/language/nl/modules.json b/public/language/nl/modules.json index c04af0d2fe..dd7de3cc62 100644 --- a/public/language/nl/modules.json +++ b/public/language/nl/modules.json @@ -6,7 +6,7 @@ "chat.user_typing": "%1 is aan het typen ...", "chat.user_has_messaged_you": "%1 heeft een bericht gestuurd", "chat.see_all": "Laat alle chats zien", - "chat.mark_all_read": "Mark all chats read", + "chat.mark_all_read": "Markeer alle chats als gelezen", "chat.no-messages": "Selecteer een ontvanger om de chatgeschiedenis in te zien", "chat.no-users-in-room": "Geen gebruikers in deze chat room", "chat.recent-chats": "Recent gevoerde gesprekken", diff --git a/public/language/nl/user.json b/public/language/nl/user.json index d2964b0fe3..70d646156b 100644 --- a/public/language/nl/user.json +++ b/public/language/nl/user.json @@ -39,7 +39,7 @@ "change_username": "Wijzig gebruikersnaam", "change_email": "Wijzig email", "edit": "Bewerken", - "edit-profile": "Edit Profile", + "edit-profile": "Profiel wijzigen", "default_picture": "Standaard icoon", "uploaded_picture": "Geüploade afbeelding", "upload_new_picture": "Nieuwe afbeelding opsturen", @@ -92,7 +92,7 @@ "open_links_in_new_tab": "Open uitgaande links naar een externe site in een nieuw tabblad", "enable_topic_searching": "Inschakelen mogelijkheid op onderwerp te kunnen zoeken", "topic_search_help": "Wanneer ingeschakeld zal de standaard zoekfunctie, met een aangepaste methode voor onderwerpen, overschreven worden", - "scroll_to_my_post": "After posting a reply, show the new post", + "scroll_to_my_post": "Toon het nieuwe bericht na het plaatsen van een antwoord", "follow_topics_you_reply_to": "Volg de onderwerpen waarop ik gereageerd heb", "follow_topics_you_create": "Volg de onderwerpen waarvan ik de oorspronkelijke auteur ben", "grouptitle": "Selecteer de groepstitel voor weergave", diff --git a/public/language/rw/error.json b/public/language/rw/error.json index 1a224fbb60..a86168d3ef 100644 --- a/public/language/rw/error.json +++ b/public/language/rw/error.json @@ -98,6 +98,6 @@ "invite-maximum-met": "You have invited the maximum amount of people (%1 out of %2).", "no-session-found": "No login session found!", "not-in-room": "User not in room", - "no-users-in-room": "No users in this room", + "no-users-in-room": "Nta muntu uri muri iki gikari", "cant-kick-self": "You can't kick yourself from the group" } \ No newline at end of file diff --git a/public/language/rw/groups.json b/public/language/rw/groups.json index 5b02814cab..12ec0b7193 100644 --- a/public/language/rw/groups.json +++ b/public/language/rw/groups.json @@ -24,7 +24,7 @@ "details.has_no_posts": "Uyu munyamuryango ntabwo arashyiraho ikintu na kimwe", "details.latest_posts": "Ibiheruka Gushyirwaho", "details.private": "Yigenga", - "details.disableJoinRequests": "Disable join requests", + "details.disableJoinRequests": "Guhagarika ubusabe bwo kwinjira", "details.grant": "Tanga/Ambura Ubuyobozi", "details.kick": "Tera", "details.owner_options": "Ubuyobozi bw'Itsinda", diff --git a/public/language/rw/modules.json b/public/language/rw/modules.json index 5c8a93b959..e0aff84e80 100644 --- a/public/language/rw/modules.json +++ b/public/language/rw/modules.json @@ -5,10 +5,10 @@ "chat.no_active": "Nta biganiro byo mu gikari ufite. ", "chat.user_typing": "%1 ari kwandika ...", "chat.user_has_messaged_you": "%1 yagusigiye ubutumwa.", - "chat.see_all": "See all chats", - "chat.mark_all_read": "Mark all chats read", + "chat.see_all": "Reba ubutumwa bwose", + "chat.mark_all_read": "Garagaza ubutumwa nk'ubwasomwe", "chat.no-messages": "Hitamo umuntu ushaka kurebera ibyo mwandikiranye", - "chat.no-users-in-room": "No users in this room", + "chat.no-users-in-room": "Nta muntu uri muri iki gikari", "chat.recent-chats": "Ubutumwa Buheruka", "chat.contacts": "Abo Kuvugisha", "chat.message-history": "Ubutumwa Bwahise", @@ -17,9 +17,9 @@ "chat.seven_days": "Iminsi 7", "chat.thirty_days": "Iminsi 30", "chat.three_months": "Amezi 3", - "chat.delete_message_confirm": "Are you sure you wish to delete this message?", - "chat.roomname": "Chat Room %1", - "chat.add-users-to-room": "Add users to room", + "chat.delete_message_confirm": "Wiringiye neza ko ushaka gusiba ubu butumwa?", + "chat.roomname": "Igikari cya %1", + "chat.add-users-to-room": "Ongera abantu mu gikari", "composer.compose": "Andika", "composer.show_preview": "Bona Uko Biza Gusa", "composer.hide_preview": "Hisha Uko Biza Gusa", @@ -28,11 +28,11 @@ "composer.discard": "Wiringiye neza ko ushaka kureka kubishyiraho?", "composer.submit_and_lock": "Shyiraho kandi Unafungirane", "composer.toggle_dropdown": "Hindura Icyerekezo", - "composer.uploading": "Uploading %1", - "bootbox.ok": "OK", - "bootbox.cancel": "Cancel", - "bootbox.confirm": "Confirm", - "cover.dragging_title": "Cover Photo Positioning", - "cover.dragging_message": "Drag the cover photo to the desired position and click \"Save\"", - "cover.saved": "Cover photo image and position saved" + "composer.uploading": "Ugupakira %1", + "bootbox.ok": "Sawa", + "bootbox.cancel": "Isubire", + "bootbox.confirm": "Emeza", + "cover.dragging_title": "Kuringaniza Ifoto yo Hejuru", + "cover.dragging_message": "Kurura ifoto yo hejuru mu cyerekezo ushaka ubundi ubike ibirangijwe", + "cover.saved": "Ibyatunganyijwe ku ifoto yo hejuru byafashe" } \ No newline at end of file From 5d4f61ec96d4cf6bb75f4d1e74545b749ea09da3 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Sun, 27 Mar 2016 11:32:29 -0400 Subject: [PATCH 71/81] Tweaked scrollToPostIndex logic The old behaviour would scroll the post anchor to the midline, but this was inferior UX for long posts since the top half of the screen is essentially stuff you didn't want to see. The new logic is as follows: - If the target post is smaller than the browser viewport, it will scroll in such a way that the entire post is vertically centered (post midline matching viewport midline) - If the target post is larger than the browser viewport, it will scroll in such a way that the top of the post is located just under the navbar, maximizing the target post's content. - Updated themes to relocate their anchors to in between posts --- package.json | 4 ++-- public/src/modules/navigator.js | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/package.json b/package.json index 286e4e712d..016b488605 100644 --- a/package.json +++ b/package.json @@ -53,8 +53,8 @@ "nodebb-plugin-spam-be-gone": "0.4.6", "nodebb-rewards-essentials": "0.0.8", "nodebb-theme-lavender": "3.0.9", - "nodebb-theme-persona": "4.0.112", - "nodebb-theme-vanilla": "5.0.59", + "nodebb-theme-persona": "4.0.113", + "nodebb-theme-vanilla": "5.0.60", "nodebb-widget-essentials": "2.0.8", "nodemailer": "2.0.0", "nodemailer-sendmail-transport": "1.0.0", diff --git a/public/src/modules/navigator.js b/public/src/modules/navigator.js index 3ac5fc16e2..f6ac8c628a 100644 --- a/public/src/modules/navigator.js +++ b/public/src/modules/navigator.js @@ -190,7 +190,12 @@ define('navigator', ['forum/pagination', 'components'], function(pagination, com }; navigator.scrollToPostIndex = function(postIndex, highlight, duration) { - var scrollTo = components.get('post/anchor', postIndex); + var scrollTo = components.get('post/anchor', postIndex), + postEl = components.get('post', 'index', postIndex), + postHeight = postEl.height(), + viewportHeight = $(window).height(), + navbarHeight = components.get('navbar').height(); + if (!scrollTo.length) { navigator.scrollActive = false; @@ -202,7 +207,12 @@ define('navigator', ['forum/pagination', 'components'], function(pagination, com var done = false; function animateScroll() { - var scrollTop = (scrollTo.offset().top - ($(window).height() / 2)) + 'px'; + var scrollTop = 0; + if (postHeight < viewportHeight) { + scrollTop = (scrollTo.offset().top - (viewportHeight / 2) + (postHeight / 2)) + 'px'; + } else { + scrollTop = scrollTo.offset().top - navbarHeight; + } $('html, body').animate({ scrollTop: scrollTop From 3e2231d2cb8860c731649f00ef85364bfcdc8ed1 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Sun, 27 Mar 2016 15:52:26 -0400 Subject: [PATCH 72/81] Fixing viewport shuffling due to image load Introduced new method ".loadImages()" in posts client side lib to handle viewport height changes when loading images. Requires nodebb-plugin-markdown@5.0.0 @BenLubar @boomzillawtf --- package.json | 2 +- public/less/global.less | 21 +++++++++++ public/src/client/topic.js | 13 ++++--- public/src/client/topic/posts.js | 60 ++++++++++++++++++++++++++++++++ public/src/modules/navigator.js | 25 +++++++++---- public/src/utils.js | 17 +++++++++ src/meta/css.js | 1 + 7 files changed, 126 insertions(+), 13 deletions(-) create mode 100644 public/less/global.less diff --git a/package.json b/package.json index 016b488605..fab53b0d04 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "nodebb-plugin-composer-default": "3.0.18", "nodebb-plugin-dbsearch": "1.0.1", "nodebb-plugin-emoji-extended": "1.0.3", - "nodebb-plugin-markdown": "4.0.17", + "nodebb-plugin-markdown": "5.0.0", "nodebb-plugin-mentions": "1.0.21", "nodebb-plugin-soundpack-default": "0.1.6", "nodebb-plugin-spam-be-gone": "0.4.6", diff --git a/public/less/global.less b/public/less/global.less new file mode 100644 index 0000000000..80a5807ee3 --- /dev/null +++ b/public/less/global.less @@ -0,0 +1,21 @@ +/* + This stylesheet is applied to all themes and all pages. + They can be overridden by themes, though their presence (or initial settings) may be depended upon by + client-side logic in core. + + ========== +*/ + +/* Prevent viewport shuffling on image load by restricting image dimensions until viewed by the browser */ +[component="post/content"] img:not(.not-responsive) { + height: 1rem; + opacity: 0; + transition: width 500ms ease; + transition: height 500ms ease; + transition: opacity 500ms ease; + + &[data-state="loaded"] { + height: auto; + opacity: 1; + } +} \ No newline at end of file diff --git a/public/src/client/topic.js b/public/src/client/topic.js index 7a989f96aa..d5920d2118 100644 --- a/public/src/client/topic.js +++ b/public/src/client/topic.js @@ -61,12 +61,12 @@ define('forum/topic', [ addParentHandler(); - handleBookmark(tid); - handleKeys(); navigator.init('[component="post/anchor"]', ajaxify.data.postcount, Topic.toTop, Topic.toBottom, Topic.navigatorCallback, Topic.calculateIndex); + handleBookmark(tid); + $(window).on('scroll', updateTopicTitle); handleTopicSearch(); @@ -141,6 +141,7 @@ define('forum/topic', [ return navigator.scrollToPostIndex(postIndex, true); } } else if (bookmark && (!config.usePagination || (config.usePagination && ajaxify.data.pagination.currentPage === 1)) && ajaxify.data.postcount > 5) { + navigator.update(); app.alert({ alert_id: 'bookmark', message: '[[topic:bookmark_instructions]]', @@ -156,6 +157,8 @@ define('forum/topic', [ setTimeout(function() { app.removeAlert('bookmark'); }, 10000); + } else { + navigator.update(); } } @@ -233,7 +236,7 @@ define('forum/topic', [ return index; }; - Topic.navigatorCallback = function(index, elementCount) { + Topic.navigatorCallback = function(index, elementCount, threshold) { var path = ajaxify.removeRelativePath(window.location.pathname.slice(1)); if (!path.startsWith('topic')) { return 1; @@ -248,13 +251,13 @@ define('forum/topic', [ newUrl += '/' + index; } + posts.loadImages(threshold); + if (newUrl !== currentUrl) { if (Topic.replaceURLTimeout) { clearTimeout(Topic.replaceURLTimeout); } - Topic.replaceURLTimeout = setTimeout(function() { - updateUserBookmark(index); Topic.replaceURLTimeout = 0; diff --git a/public/src/client/topic/posts.js b/public/src/client/topic/posts.js index 1020edbf27..655277b704 100644 --- a/public/src/client/topic/posts.js +++ b/public/src/client/topic/posts.js @@ -231,6 +231,66 @@ define('forum/topic/posts', [ hidePostToolsForDeletedPosts(posts); }; + Posts.loadImages = function(threshold) { + /* + If threshold is defined, images loaded above this threshold will modify + the user's scroll position so they are not scrolled away from content + they were reading. Images loaded below this threshold will push down content. + + If no threshold is defined, loaded images will push down content, as per + default + */ + + var images = components.get('post/content').find('img[data-state="unloaded"]'), + visible = images.filter(function() { + return utils.isElementInViewport(this); + }), + scrollTop = $(window).scrollTop(), + adjusting = false, + adjustQueue = [], + adjustPosition = function() { + adjusting = true; + oldHeight = document.body.clientHeight; + + // Display the image + $(this).attr('data-state', 'loaded'); + newHeight = document.body.clientHeight; + + var imageRect = this.getBoundingClientRect(); + if (imageRect.top < threshold) { + scrollTop = scrollTop + (newHeight - oldHeight); + $(window).scrollTop(scrollTop); + } + + if (adjustQueue.length) { + adjustQueue.pop()(); + } else { + adjusting = false; + } + }, + oldHeight, newHeight; + + // For each image, reset the source and adjust scrollTop when loaded + visible.attr('data-state', 'loading'); + visible.each(function(index, image) { + image = $(image); + + image.on('load', function() { + if (!adjusting) { + adjustPosition.call(this); + } else { + adjustQueue.push(adjustPosition.bind(this)); + } + }); + + image.attr('src', image.attr('data-src')); + if (image.parent().attr('href')) { + image.parent().attr('href', image.attr('data-src')); + } + image.removeAttr('data-src'); + }); + }; + Posts.wrapImagesInLinks = function(posts) { posts.find('[component="post/content"] img:not(.emoji)').each(function() { var $this = $(this); diff --git a/public/src/modules/navigator.js b/public/src/modules/navigator.js index f6ac8c628a..2f6b2d8613 100644 --- a/public/src/modules/navigator.js +++ b/public/src/modules/navigator.js @@ -1,7 +1,7 @@ 'use strict'; -/* globals app, define, ajaxify, utils, config */ +/* globals define, ajaxify, utils, config */ define('navigator', ['forum/pagination', 'components'], function(pagination, components) { @@ -56,7 +56,6 @@ define('navigator', ['forum/pagination', 'components'], function(pagination, com }); navigator.setCount(count); - navigator.update(); }; function generateUrl(index) { @@ -92,7 +91,13 @@ define('navigator', ['forum/pagination', 'components'], function(pagination, com $('.pagination-block').toggleClass('ready', flag); } - navigator.update = function() { + navigator.update = function(threshold) { + threshold = typeof threshold === 'number' ? threshold : undefined; + + /* + The "threshold" is defined as the distance from the top of the page to + a spot where a user is expecting to begin reading. + */ var els = $(navigator.selector); if (els.length) { index = parseInt(els.first().attr('data-index'), 10) + 1; @@ -114,7 +119,7 @@ define('navigator', ['forum/pagination', 'components'], function(pagination, com }); if (typeof navigator.callback === 'function') { - navigator.callback(index, count); + navigator.callback(index, count, threshold); } navigator.updateTextAndProgressBar(); @@ -202,6 +207,9 @@ define('navigator', ['forum/pagination', 'components'], function(pagination, com return; } + // Temporarily disable navigator update on scroll + $(window).off('scroll', navigator.update); + duration = duration !== undefined ? duration : 400; navigator.scrollActive = true; var done = false; @@ -209,21 +217,24 @@ define('navigator', ['forum/pagination', 'components'], function(pagination, com function animateScroll() { var scrollTop = 0; if (postHeight < viewportHeight) { - scrollTop = (scrollTo.offset().top - (viewportHeight / 2) + (postHeight / 2)) + 'px'; + scrollTop = (scrollTo.offset().top - (viewportHeight / 2) + (postHeight / 2)); } else { scrollTop = scrollTo.offset().top - navbarHeight; } $('html, body').animate({ - scrollTop: scrollTop + scrollTop: scrollTop + 'px' }, duration, function() { if (done) { + // Re-enable onScroll behaviour + $(window).on('scroll', navigator.update); + var scrollToRect = scrollTo.get(0).getBoundingClientRect(); + navigator.update(scrollToRect.top); return; } done = true; navigator.scrollActive = false; - navigator.update(); highlightPost(); $('body').scrollTop($('body').scrollTop() - 1); $('html').scrollTop($('html').scrollTop() - 1); diff --git a/public/src/utils.js b/public/src/utils.js index 68de6a3506..78e0013c25 100644 --- a/public/src/utils.js +++ b/public/src/utils.js @@ -309,6 +309,23 @@ return labels; }, + /* Retrieved from http://stackoverflow.com/a/7557433 @ 27 Mar 2016 */ + isElementInViewport: function(el) { + //special bonus for those using jQuery + if (typeof jQuery === "function" && el instanceof jQuery) { + el = el[0]; + } + + var rect = el.getBoundingClientRect(); + + return ( + rect.top >= 0 && + rect.left >= 0 && + rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */ + rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */ + ); + }, + // get all the url params in a single key/value hash params: function(options) { var a, hash = {}, params; diff --git a/src/meta/css.js b/src/meta/css.js index 81fa0528c2..9dd9849d76 100644 --- a/src/meta/css.js +++ b/src/meta/css.js @@ -72,6 +72,7 @@ module.exports = function(Meta) { source += '\n@import "..' + path.sep + '..' + path.sep + 'public/less/blacklist.less";'; source += '\n@import "..' + path.sep + '..' + path.sep + 'public/less/generics.less";'; source += '\n@import "..' + path.sep + '..' + path.sep + 'public/less/mixins.less";'; + source += '\n@import "..' + path.sep + '..' + path.sep + 'public/less/global.less";'; var acpSource = '\n@import "..' + path.sep + 'public/less/admin/admin";\n' + source; acpSource += '\n@import "..' + path.sep + 'public/less/generics.less";'; From 2caae05f4b4fc4d14fed2e250bc5f3ab2bd5c719 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bar=C4=B1=C5=9F=20Soner=20U=C5=9Fakl=C4=B1?= Date: Mon, 28 Mar 2016 00:19:25 +0300 Subject: [PATCH 73/81] up themes --- package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index fab53b0d04..49219add30 100644 --- a/package.json +++ b/package.json @@ -53,8 +53,8 @@ "nodebb-plugin-spam-be-gone": "0.4.6", "nodebb-rewards-essentials": "0.0.8", "nodebb-theme-lavender": "3.0.9", - "nodebb-theme-persona": "4.0.113", - "nodebb-theme-vanilla": "5.0.60", + "nodebb-theme-persona": "4.0.114", + "nodebb-theme-vanilla": "5.0.61", "nodebb-widget-essentials": "2.0.8", "nodemailer": "2.0.0", "nodemailer-sendmail-transport": "1.0.0", From 28db642050932f83b0300e21d7763c4fb877eced Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Sun, 27 Mar 2016 18:56:21 -0400 Subject: [PATCH 74/81] Fixing regression from 3e2231d2cb8860c731649f00ef85364bfcdc8ed1 @BenLubar --- package.json | 2 +- public/js-enabled.css | 7 ++ public/less/global.less | 11 +++- public/src/app.js | 106 +++++++++++++++++-------------- public/src/client/topic/posts.js | 10 +++ 5 files changed, 83 insertions(+), 53 deletions(-) create mode 100644 public/js-enabled.css diff --git a/package.json b/package.json index 49219add30..9adf788c69 100644 --- a/package.json +++ b/package.json @@ -47,7 +47,7 @@ "nodebb-plugin-composer-default": "3.0.18", "nodebb-plugin-dbsearch": "1.0.1", "nodebb-plugin-emoji-extended": "1.0.3", - "nodebb-plugin-markdown": "5.0.0", + "nodebb-plugin-markdown": "5.0.1", "nodebb-plugin-mentions": "1.0.21", "nodebb-plugin-soundpack-default": "0.1.6", "nodebb-plugin-spam-be-gone": "0.4.6", diff --git a/public/js-enabled.css b/public/js-enabled.css new file mode 100644 index 0000000000..f59881974e --- /dev/null +++ b/public/js-enabled.css @@ -0,0 +1,7 @@ +/* + The following stylesheet is only included on pages that can execute javascript +*/ + +[component="post/content"] img:not(.not-responsive):not([data-state]) { + display: none !important; +} \ No newline at end of file diff --git a/public/less/global.less b/public/less/global.less index 80a5807ee3..d9f16c74e8 100644 --- a/public/less/global.less +++ b/public/less/global.less @@ -7,14 +7,19 @@ */ /* Prevent viewport shuffling on image load by restricting image dimensions until viewed by the browser */ -[component="post/content"] img:not(.not-responsive) { - height: 1rem; - opacity: 0; +[component="post/content"] img { transition: width 500ms ease; transition: height 500ms ease; transition: opacity 500ms ease; + &[data-state="unloaded"], &[data-state="loading"] { + display: inherit; + height: 1rem; + opacity: 0; + } + &[data-state="loaded"] { + display: inherit; height: auto; opacity: 1; } diff --git a/public/src/app.js b/public/src/app.js index 2d37b53a41..791aabd628 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -24,65 +24,65 @@ app.cacheBuster = null; }); app.load = function() { - $('document').ready(function () { - var url = ajaxify.start(window.location.pathname.slice(1) + window.location.search + window.location.hash, true); - ajaxify.end(url, app.template); + app.loadProgressiveStylesheet(); - handleStatusChange(); + var url = ajaxify.start(window.location.pathname.slice(1) + window.location.search + window.location.hash, true); + ajaxify.end(url, app.template); - if (config.searchEnabled) { - app.handleSearch(); + handleStatusChange(); + + if (config.searchEnabled) { + app.handleSearch(); + } + + $('#content').on('click', '#new_topic', function(){ + app.newTopic(); + }); + + require(['components'], function(components) { + components.get('user/logout').on('click', app.logout); + }); + + Visibility.change(function(e, state){ + if (state === 'visible') { + app.isFocused = true; + app.alternatingTitle(''); + } else if (state === 'hidden') { + app.isFocused = false; } + }); - $('#content').on('click', '#new_topic', function(){ - app.newTopic(); - }); + overrides.overrideBootbox(); + overrides.overrideTimeago(); + createHeaderTooltips(); + app.showEmailConfirmWarning(); - require(['components'], function(components) { - components.get('user/logout').on('click', app.logout); - }); + socket.removeAllListeners('event:nodebb.ready'); + socket.on('event:nodebb.ready', function(data) { + if (!app.cacheBusters || app.cacheBusters['cache-buster'] !== data['cache-buster']) { + app.cacheBusters = data; - Visibility.change(function(e, state){ - if (state === 'visible') { - app.isFocused = true; - app.alternatingTitle(''); - } else if (state === 'hidden') { - app.isFocused = false; - } - }); + app.alert({ + alert_id: 'forum_updated', + title: '[[global:updated.title]]', + message: '[[global:updated.message]]', + clickfn: function() { + window.location.reload(); + }, + type: 'warning' + }); + } + }); - overrides.overrideBootbox(); - overrides.overrideTimeago(); - createHeaderTooltips(); - app.showEmailConfirmWarning(); + require(['taskbar', 'helpers', 'forum/pagination'], function(taskbar, helpers, pagination) { + taskbar.init(); - socket.removeAllListeners('event:nodebb.ready'); - socket.on('event:nodebb.ready', function(data) { - if (!app.cacheBusters || app.cacheBusters['cache-buster'] !== data['cache-buster']) { - app.cacheBusters = data; + // templates.js helpers + helpers.register(); - app.alert({ - alert_id: 'forum_updated', - title: '[[global:updated.title]]', - message: '[[global:updated.message]]', - clickfn: function() { - window.location.reload(); - }, - type: 'warning' - }); - } - }); + pagination.init(); - require(['taskbar', 'helpers', 'forum/pagination'], function(taskbar, helpers, pagination) { - taskbar.init(); - - // templates.js helpers - helpers.register(); - - pagination.init(); - - $(window).trigger('action:app.load'); - }); + $(window).trigger('action:app.load'); }); }; @@ -539,4 +539,12 @@ app.cacheBuster = null; } }); }; + + app.loadProgressiveStylesheet = function() { + var linkEl = document.createElement('link'); + linkEl.rel = 'stylesheet'; + linkEl.href = config.relative_path + '/js-enabled.css'; + + document.head.appendChild(linkEl); + } }()); diff --git a/public/src/client/topic/posts.js b/public/src/client/topic/posts.js index 655277b704..63241fc370 100644 --- a/public/src/client/topic/posts.js +++ b/public/src/client/topic/posts.js @@ -218,6 +218,7 @@ define('forum/topic/posts', [ }; Posts.processPage = function(posts) { + Posts.unloadImages(); Posts.showBottomPostBar(); posts.find('[component="post/content"] img:not(.not-responsive)').addClass('img-responsive'); app.createUserTooltips(posts); @@ -231,6 +232,15 @@ define('forum/topic/posts', [ hidePostToolsForDeletedPosts(posts); }; + Posts.unloadImages = function() { + var images = components.get('post/content').find('img:not(.not-responsive)'); + images.each(function() { + $(this).attr('data-src', $(this).attr('src')); + $(this).attr('data-state', 'unloaded'); + $(this).attr('src', 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'); + }); + }; + Posts.loadImages = function(threshold) { /* If threshold is defined, images loaded above this threshold will modify From add82ba6c905ac6f5863708986e6153208d783d7 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 28 Mar 2016 01:53:36 -0400 Subject: [PATCH 75/81] Added threshold detection when scrolling upwards ... for less jolty upwards scrolling. --- public/src/client/topic.js | 4 ++-- public/src/client/topic/posts.js | 6 +++--- public/src/modules/navigator.js | 13 +++++++++++-- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/public/src/client/topic.js b/public/src/client/topic.js index d5920d2118..848c0f35be 100644 --- a/public/src/client/topic.js +++ b/public/src/client/topic.js @@ -141,7 +141,7 @@ define('forum/topic', [ return navigator.scrollToPostIndex(postIndex, true); } } else if (bookmark && (!config.usePagination || (config.usePagination && ajaxify.data.pagination.currentPage === 1)) && ajaxify.data.postcount > 5) { - navigator.update(); + navigator.update(0); app.alert({ alert_id: 'bookmark', message: '[[topic:bookmark_instructions]]', @@ -158,7 +158,7 @@ define('forum/topic', [ app.removeAlert('bookmark'); }, 10000); } else { - navigator.update(); + navigator.update(0); } } diff --git a/public/src/client/topic/posts.js b/public/src/client/topic/posts.js index 63241fc370..e00bf2d617 100644 --- a/public/src/client/topic/posts.js +++ b/public/src/client/topic/posts.js @@ -218,7 +218,7 @@ define('forum/topic/posts', [ }; Posts.processPage = function(posts) { - Posts.unloadImages(); + Posts.unloadImages(posts); Posts.showBottomPostBar(); posts.find('[component="post/content"] img:not(.not-responsive)').addClass('img-responsive'); app.createUserTooltips(posts); @@ -232,8 +232,8 @@ define('forum/topic/posts', [ hidePostToolsForDeletedPosts(posts); }; - Posts.unloadImages = function() { - var images = components.get('post/content').find('img:not(.not-responsive)'); + Posts.unloadImages = function(posts) { + var images = posts.find('[component="post/content"] img:not(.not-responsive)'); images.each(function() { $(this).attr('data-src', $(this).attr('src')); $(this).attr('data-state', 'unloaded'); diff --git a/public/src/modules/navigator.js b/public/src/modules/navigator.js index 2f6b2d8613..cb553962a7 100644 --- a/public/src/modules/navigator.js +++ b/public/src/modules/navigator.js @@ -92,12 +92,12 @@ define('navigator', ['forum/pagination', 'components'], function(pagination, com } navigator.update = function(threshold) { - threshold = typeof threshold === 'number' ? threshold : undefined; - /* The "threshold" is defined as the distance from the top of the page to a spot where a user is expecting to begin reading. */ + threshold = typeof threshold === 'number' ? threshold : undefined; + var els = $(navigator.selector); if (els.length) { index = parseInt(els.first().attr('data-index'), 10) + 1; @@ -118,6 +118,15 @@ define('navigator', ['forum/pagination', 'components'], function(pagination, com } }); + // If a threshold is undefined, try to determine one based on new index + if (threshold === undefined) { + var anchorEl = components.get('post/anchor', index - 1), + anchorRect = anchorEl.get(0).getBoundingClientRect(); + + threshold = anchorRect.top; + console.log('new index', index, anchorEl, threshold); + } + if (typeof navigator.callback === 'function') { navigator.callback(index, count, threshold); } From cc60767eb02baa4f39d55eb84fe2887cb58f9f9c Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 28 Mar 2016 02:06:24 -0400 Subject: [PATCH 76/81] removed console logging :dog: --- public/src/modules/navigator.js | 1 - 1 file changed, 1 deletion(-) diff --git a/public/src/modules/navigator.js b/public/src/modules/navigator.js index cb553962a7..7127f1f15c 100644 --- a/public/src/modules/navigator.js +++ b/public/src/modules/navigator.js @@ -124,7 +124,6 @@ define('navigator', ['forum/pagination', 'components'], function(pagination, com anchorRect = anchorEl.get(0).getBoundingClientRect(); threshold = anchorRect.top; - console.log('new index', index, anchorEl, threshold); } if (typeof navigator.callback === 'function') { From 6df78f8ad005ce8b92b7245d081d5389f6ba9269 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 28 Mar 2016 03:06:35 -0400 Subject: [PATCH 77/81] fixing some more jitteriness when scrolling upwards --- public/src/client/topic/posts.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/public/src/client/topic/posts.js b/public/src/client/topic/posts.js index e00bf2d617..5823d81b65 100644 --- a/public/src/client/topic/posts.js +++ b/public/src/client/topic/posts.js @@ -233,12 +233,17 @@ define('forum/topic/posts', [ }; Posts.unloadImages = function(posts) { - var images = posts.find('[component="post/content"] img:not(.not-responsive)'); + var images = posts.find('[component="post/content"] img:not(.not-responsive)'), + scrollTop = $(window).scrollTop(), + height = $(document).height(); + images.each(function() { $(this).attr('data-src', $(this).attr('src')); $(this).attr('data-state', 'unloaded'); $(this).attr('src', 'data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7'); }); + + $(window).scrollTop(scrollTop + $(document).height() - height); }; Posts.loadImages = function(threshold) { @@ -313,10 +318,13 @@ define('forum/topic/posts', [ Posts.showBottomPostBar = function() { var mainPost = components.get('post', 'index', 0); var posts = $('[component="post"]'); + var height = $(document).height(); if (!!mainPost.length && posts.length > 1 && $('.post-bar').length < 2) { $('.post-bar').clone().appendTo(mainPost); + $(window).scrollTop($(window).scrollTop() + $(document).height() - height); } else if (mainPost.length && posts.length < 2) { mainPost.find('.post-bar').remove(); + $(window).scrollTop($(window).scrollTop() - $(document).height() - height); } }; From 3b9120cd385216b2c395643c52182a02eb3ee2cf Mon Sep 17 00:00:00 2001 From: barisusakli Date: Mon, 28 Mar 2016 11:28:41 +0300 Subject: [PATCH 78/81] closes #4476 --- public/src/client/topic.js | 3 +++ 1 file changed, 3 insertions(+) diff --git a/public/src/client/topic.js b/public/src/client/topic.js index 848c0f35be..cd0464e9aa 100644 --- a/public/src/client/topic.js +++ b/public/src/client/topic.js @@ -82,6 +82,9 @@ define('forum/topic', [ function onKeyDown(ev) { if (ev.target.nodeName === 'BODY') { + if (ev.shiftKey || ev.ctrlKey || ev.altKey) { + return; + } if (ev.which === 36) { // home key Topic.toTop(); return false; From e0f6b4edf09c0ef68abcf4b65bc5e713c491fcad Mon Sep 17 00:00:00 2001 From: NodeBB Misty Date: Mon, 28 Mar 2016 09:02:18 -0400 Subject: [PATCH 79/81] Latest translations and fallbacks --- public/language/fr/error.json | 4 ++-- public/language/fr/global.json | 4 ++-- public/language/fr/groups.json | 2 +- public/language/fr/modules.json | 8 ++++---- public/language/fr/user.json | 4 ++-- public/language/fr/users.json | 2 +- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/public/language/fr/error.json b/public/language/fr/error.json index b34f0c58c6..d80c43277e 100644 --- a/public/language/fr/error.json +++ b/public/language/fr/error.json @@ -27,7 +27,7 @@ "password-too-long": "Mot de passe trop long", "user-banned": "Utilisateur banni", "user-too-new": "Désolé, vous devez attendre encore %1 seconde(s) avant d'envoyer votre premier message", - "blacklisted-ip": "Sorry, your IP address has been banned from this community. If you feel this is in error, please contact an administrator.", + "blacklisted-ip": "Désolé, votre adresse IP a été bannie de cette communauté. Si vous pensez que c'est une erreur, veuillez contacter un administrateur.", "no-category": "Cette catégorie n'existe pas", "no-topic": "Ce sujet n'existe pas", "no-post": "Ce message n'existe pas", @@ -99,5 +99,5 @@ "no-session-found": "Pas de session de connexion trouvé!", "not-in-room": "L'utilisateur n'est pas dans cette salle", "no-users-in-room": "Aucun utilisateur dans cette salle", - "cant-kick-self": "You can't kick yourself from the group" + "cant-kick-self": "Vous ne pouvez pas vous exclure vous-même du groupe" } \ No newline at end of file diff --git a/public/language/fr/global.json b/public/language/fr/global.json index f7bd29a1b6..7096b63f7c 100644 --- a/public/language/fr/global.json +++ b/public/language/fr/global.json @@ -29,13 +29,13 @@ "header.popular": "Populaire", "header.users": "Utilisateurs", "header.groups": "Groupes", - "header.chats": "Chats", + "header.chats": "Discussions", "header.notifications": "Notifications", "header.search": "Recherche", "header.profile": "Profil", "header.navigation": "Navigation", "notifications.loading": "Chargement des notifications", - "chats.loading": "Chargement des chats", + "chats.loading": "Chargement des discussions", "motd.welcome": "Bienvenue sur NodeBB, la plate-forme de discussion du futur.", "previouspage": "Page précédente", "nextpage": "Page suivante", diff --git a/public/language/fr/groups.json b/public/language/fr/groups.json index 05f17fbd59..65a5274979 100644 --- a/public/language/fr/groups.json +++ b/public/language/fr/groups.json @@ -41,7 +41,7 @@ "details.hidden": "Masqué", "details.hidden_help": "Si cette case est cochée, ce groupe n'est pas affiché dans la liste des groupes, et les utilisateurs devront être invités manuellement.", "details.delete_group": "Supprimer le groupe", - "details.private_system_help": "Private groups is disabled at system level, this option does not do anything", + "details.private_system_help": "Les groupes privés sont désactivés au niveau du système, cette option ne déclenche rien", "event.updated": "Les détails du groupe ont été mis à jour", "event.deleted": "Le groupe \"%1\" a été supprimé", "membership.accept-invitation": "Accepter l'invitation", diff --git a/public/language/fr/modules.json b/public/language/fr/modules.json index 27ee80e92f..33fd5fe494 100644 --- a/public/language/fr/modules.json +++ b/public/language/fr/modules.json @@ -1,14 +1,14 @@ { "chat.chatting_with": "Discuter avec ", - "chat.placeholder": "Tapez votre message ici, appuyez sur Entrer pour envoyer", + "chat.placeholder": "Tapez votre message ici, appuyez sur Entrée pour envoyer", "chat.send": "Envoyer", "chat.no_active": "Vous n'avez aucune discussion en cours.", "chat.user_typing": "%1 est en train d'écrire ...", "chat.user_has_messaged_you": "%1 vous a envoyé un message.", "chat.see_all": "Voir toutes les discussions", - "chat.mark_all_read": "Mark all chats read", + "chat.mark_all_read": "Marquer toutes les discussions comme lues", "chat.no-messages": "Veuillez sélectionner un destinataire pour voir l'historique des discussions", - "chat.no-users-in-room": "Aucun utilisateur dans cette salle", + "chat.no-users-in-room": "Aucun participant à cette discussion", "chat.recent-chats": "Discussions récentes", "chat.contacts": "Contacts", "chat.message-history": "Historique des messages", @@ -19,7 +19,7 @@ "chat.three_months": "3 Mois", "chat.delete_message_confirm": "Êtes-vous sûr de vouloir supprimer ce message ?", "chat.roomname": "Salle de discussion %1", - "chat.add-users-to-room": "Ajouter des utilisateurs à la salle", + "chat.add-users-to-room": "Ajouter des participants", "composer.compose": "Écrire", "composer.show_preview": "Afficher l'aperçu", "composer.hide_preview": "Masquer l'aperçu", diff --git a/public/language/fr/user.json b/public/language/fr/user.json index 34c1026e7e..0a6450fdd3 100644 --- a/public/language/fr/user.json +++ b/public/language/fr/user.json @@ -39,7 +39,7 @@ "change_username": "Changer le nom d'utilisateur", "change_email": "Changer l'e-mail", "edit": "Éditer", - "edit-profile": "Edit Profile", + "edit-profile": "Éditer le profil", "default_picture": "Icône par défaut", "uploaded_picture": "Image envoyée", "upload_new_picture": "Envoyer une nouvelle image", @@ -92,7 +92,7 @@ "open_links_in_new_tab": "Ouvrir les liens externes dans un nouvel onglet", "enable_topic_searching": "Activer la recherche dans les sujets", "topic_search_help": "Une fois activé, la recherche dans les sujets va remplacer la recherche de page du navigateur et vous permettra de rechercher dans l'intégralité d'un sujet au lieu des seuls posts affichés à l'écran.", - "scroll_to_my_post": "After posting a reply, show the new post", + "scroll_to_my_post": "Après avoir répondu, montrer le nouveau message", "follow_topics_you_reply_to": "Suivre les sujets auxquels vous répondez", "follow_topics_you_create": "Suivre les sujets que vous créez", "grouptitle": "Sélectionnez le titre de groupe que vous souhaitez afficher", diff --git a/public/language/fr/users.json b/public/language/fr/users.json index d70a54698e..fad9536811 100644 --- a/public/language/fr/users.json +++ b/public/language/fr/users.json @@ -3,7 +3,7 @@ "top_posters": "Actifs", "most_reputation": "Réputés", "search": "Rechercher", - "enter_username": "Entrer un nom d'utilisateur pour rechercher", + "enter_username": "Entrez le nom d'un utilisateur", "load_more": "Charger la suite", "users-found-search-took": "%1 utilisateur(s) trouvé(s)! La recherche a pris %2 secondes.", "filter-by": "Filtrer par", From 31e70ac5a8ef053ce3f44f0ef2207fb79cec98e6 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 28 Mar 2016 14:02:56 -0400 Subject: [PATCH 80/81] applying threshold detection only to topics re: #4477 --- public/src/modules/navigator.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/src/modules/navigator.js b/public/src/modules/navigator.js index 7127f1f15c..73ea9b8946 100644 --- a/public/src/modules/navigator.js +++ b/public/src/modules/navigator.js @@ -119,7 +119,7 @@ define('navigator', ['forum/pagination', 'components'], function(pagination, com }); // If a threshold is undefined, try to determine one based on new index - if (threshold === undefined) { + if (threshold === undefined && ajaxify.currentPage.startsWith('topic')) { var anchorEl = components.get('post/anchor', index - 1), anchorRect = anchorEl.get(0).getBoundingClientRect(); From 1783a07067dff9303ba92e753b40b46d3eb81114 Mon Sep 17 00:00:00 2001 From: Julian Lam Date: Mon, 28 Mar 2016 14:50:02 -0400 Subject: [PATCH 81/81] more tweaks to threshold --- public/less/global.less | 2 +- public/src/client/topic/posts.js | 7 +++++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/public/less/global.less b/public/less/global.less index d9f16c74e8..458fa4b8e6 100644 --- a/public/less/global.less +++ b/public/less/global.less @@ -14,7 +14,7 @@ &[data-state="unloaded"], &[data-state="loading"] { display: inherit; - height: 1rem; + height: 2rem; opacity: 0; } diff --git a/public/src/client/topic/posts.js b/public/src/client/topic/posts.js index 5823d81b65..35e7ec5d29 100644 --- a/public/src/client/topic/posts.js +++ b/public/src/client/topic/posts.js @@ -10,7 +10,9 @@ define('forum/topic/posts', [ 'components' ], function(pagination, infinitescroll, postTools, navigator, components) { - var Posts = {}; + var Posts = { + _threshold: 0 + }; Posts.onNewPost = function(data) { if (!data || !data.posts || !data.posts.length) { @@ -255,6 +257,7 @@ define('forum/topic/posts', [ If no threshold is defined, loaded images will push down content, as per default */ + Posts._threshold = threshold; var images = components.get('post/content').find('img[data-state="unloaded"]'), visible = images.filter(function() { @@ -272,7 +275,7 @@ define('forum/topic/posts', [ newHeight = document.body.clientHeight; var imageRect = this.getBoundingClientRect(); - if (imageRect.top < threshold) { + if (imageRect.top < Posts._threshold) { scrollTop = scrollTop + (newHeight - oldHeight); $(window).scrollTop(scrollTop); }