mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-12-22 08:20:36 +01:00
ESlint one-var, fix comma-dangle
This commit is contained in:
@@ -3,10 +3,17 @@
|
||||
|
||||
"rules": {
|
||||
"handle-callback-err": [ "error","^(e$|(e|(.*(_e|E)))rr)" ],
|
||||
"comma-dangle": ["error", {
|
||||
"arrays": "always-multiline",
|
||||
"objects": "always-multiline",
|
||||
"imports": "always-multiline",
|
||||
"exports": "always-multiline",
|
||||
"functions": "never"
|
||||
}],
|
||||
// "linebreak-style": "off",
|
||||
"import/no-unresolved": "off",
|
||||
"import/no-extraneous-dependencies": "off",
|
||||
"one-var": "off",
|
||||
// "one-var": "off",
|
||||
"no-undef": "off",
|
||||
"max-len": "off",
|
||||
"no-new": "off",
|
||||
|
||||
19
Gruntfile.js
19
Gruntfile.js
@@ -1,10 +1,11 @@
|
||||
"use strict";
|
||||
|
||||
var fork = require('child_process').fork,
|
||||
env = process.env,
|
||||
worker, updateWorker,
|
||||
incomplete = [],
|
||||
running = 0;
|
||||
var fork = require('child_process').fork;
|
||||
var env = process.env;
|
||||
var worker;
|
||||
var updateWorker;
|
||||
var incomplete = [];
|
||||
var running = 0;
|
||||
|
||||
|
||||
module.exports = function (grunt) {
|
||||
@@ -14,10 +15,10 @@ module.exports = function (grunt) {
|
||||
}
|
||||
|
||||
function update(action, filepath, target) {
|
||||
var updateArgs = args.slice(),
|
||||
fromFile = '',
|
||||
compiling = '',
|
||||
time = Date.now();
|
||||
var updateArgs = args.slice();
|
||||
var fromFile = '';
|
||||
var compiling = '';
|
||||
var time = Date.now();
|
||||
|
||||
if (target === 'lessUpdated_Client') {
|
||||
compiling = 'clientCSS';
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
var bcrypt = require('bcryptjs'),
|
||||
async = require('async');
|
||||
var bcrypt = require('bcryptjs');
|
||||
var async = require('async');
|
||||
|
||||
|
||||
process.on('message', function (msg) {
|
||||
|
||||
34
loader.js
34
loader.js
@@ -1,29 +1,27 @@
|
||||
'use strict';
|
||||
|
||||
var nconf = require('nconf'),
|
||||
fs = require('fs'),
|
||||
url = require('url'),
|
||||
path = require('path'),
|
||||
fork = require('child_process').fork,
|
||||
|
||||
async = require('async'),
|
||||
logrotate = require('logrotate-stream'),
|
||||
file = require('./src/file'),
|
||||
pkg = require('./package.json');
|
||||
var nconf = require('nconf');
|
||||
var fs = require('fs');
|
||||
var url = require('url');
|
||||
var path = require('path');
|
||||
var fork = require('child_process').fork;
|
||||
var async = require('async');
|
||||
var logrotate = require('logrotate-stream');
|
||||
var file = require('./src/file');
|
||||
var pkg = require('./package.json');
|
||||
|
||||
nconf.argv().env().file({
|
||||
file: path.join(__dirname, '/config.json'),
|
||||
});
|
||||
|
||||
var pidFilePath = __dirname + '/pidfile',
|
||||
output = logrotate({ file: __dirname + '/logs/output.log', size: '1m', keep: 3, compress: true }),
|
||||
silent = nconf.get('silent') === 'false' ? false : nconf.get('silent') !== false,
|
||||
numProcs,
|
||||
workers = [],
|
||||
|
||||
Loader = {
|
||||
var pidFilePath = __dirname + '/pidfile';
|
||||
var output = logrotate({ file: __dirname + '/logs/output.log', size: '1m', keep: 3, compress: true });
|
||||
var silent = nconf.get('silent') === 'false' ? false : nconf.get('silent') !== false;
|
||||
var numProcs;
|
||||
var workers = [];
|
||||
var Loader = {
|
||||
timesStarted: 0,
|
||||
};
|
||||
};
|
||||
|
||||
Loader.init = function (callback) {
|
||||
if (silent) {
|
||||
|
||||
@@ -26,9 +26,9 @@ define('admin/advanced/errors', ['Chart', 'translator'], function (Chart, transl
|
||||
};
|
||||
|
||||
Errors.setupCharts = function () {
|
||||
var notFoundCanvas = document.getElementById('not-found'),
|
||||
tooBusyCanvas = document.getElementById('toobusy'),
|
||||
dailyLabels = utils.getDaysArray();
|
||||
var notFoundCanvas = document.getElementById('not-found');
|
||||
var tooBusyCanvas = document.getElementById('toobusy');
|
||||
var dailyLabels = utils.getDaysArray();
|
||||
|
||||
dailyLabels = dailyLabels.slice(-7);
|
||||
|
||||
|
||||
@@ -11,8 +11,8 @@ define('admin/advanced/logs', function () {
|
||||
$('.affix').affix();
|
||||
|
||||
$('.logs').find('button[data-action]').on('click', function (event) {
|
||||
var btnEl = $(this),
|
||||
action = btnEl.attr('data-action');
|
||||
var btnEl = $(this);
|
||||
var action = btnEl.attr('data-action');
|
||||
|
||||
switch(action) {
|
||||
case 'reload':
|
||||
|
||||
@@ -9,8 +9,8 @@ define('admin/appearance/customise', ['admin/settings'], function (Settings) {
|
||||
$('#customCSS').text($('#customCSS-holder').val());
|
||||
$('#customHTML').text($('#customHTML-holder').val());
|
||||
|
||||
var customCSS = ace.edit("customCSS"),
|
||||
customHTML = ace.edit("customHTML");
|
||||
var customCSS = ace.edit("customCSS");
|
||||
var customHTML = ace.edit("customHTML");
|
||||
|
||||
customCSS.setTheme("ace/theme/twilight");
|
||||
customCSS.getSession().setMode("ace/mode/css");
|
||||
|
||||
@@ -21,10 +21,10 @@ define('admin/appearance/skins', ['translator'], function (translator) {
|
||||
var action = target.attr('data-action');
|
||||
|
||||
if (action && action === 'use') {
|
||||
var parentEl = target.parents('[data-theme]'),
|
||||
themeType = parentEl.attr('data-type'),
|
||||
cssSrc = parentEl.attr('data-css'),
|
||||
themeId = parentEl.attr('data-theme');
|
||||
var parentEl = target.parents('[data-theme]');
|
||||
var themeType = parentEl.attr('data-type');
|
||||
var cssSrc = parentEl.attr('data-css');
|
||||
var themeId = parentEl.attr('data-theme');
|
||||
|
||||
|
||||
socket.emit('admin.themes.set', {
|
||||
|
||||
@@ -6,14 +6,14 @@ define('admin/appearance/themes', ['translator'], function (translator) {
|
||||
|
||||
Themes.init = function () {
|
||||
$('#installed_themes').on('click', function (e) {
|
||||
var target = $(e.target),
|
||||
action = target.attr('data-action');
|
||||
var target = $(e.target);
|
||||
var action = target.attr('data-action');
|
||||
|
||||
if (action && action === 'use') {
|
||||
var parentEl = target.parents('[data-theme]'),
|
||||
themeType = parentEl.attr('data-type'),
|
||||
cssSrc = parentEl.attr('data-css'),
|
||||
themeId = parentEl.attr('data-theme');
|
||||
var parentEl = target.parents('[data-theme]');
|
||||
var themeType = parentEl.attr('data-type');
|
||||
var cssSrc = parentEl.attr('data-css');
|
||||
var themeId = parentEl.attr('data-theme');
|
||||
|
||||
socket.emit('admin.themes.set', {
|
||||
type: themeType,
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
define('admin/extend/plugins', ['jqueryui', 'translator'], function (jqueryui, translator) {
|
||||
var Plugins = {};
|
||||
Plugins.init = function () {
|
||||
var pluginsList = $('.plugins'),
|
||||
numPlugins = pluginsList[0].querySelectorAll('li').length,
|
||||
pluginID;
|
||||
var pluginsList = $('.plugins');
|
||||
var numPlugins = pluginsList[0].querySelectorAll('li').length;
|
||||
var pluginID;
|
||||
|
||||
if (!numPlugins) {
|
||||
translator.translate('<li><p><i>[[admin/extend/plugins:none-found]]</i></p></li>', function (html) {
|
||||
|
||||
@@ -5,10 +5,10 @@ define('admin/extend/rewards', ['translator'], function (translator) {
|
||||
var rewards = {};
|
||||
|
||||
|
||||
var available,
|
||||
active,
|
||||
conditions,
|
||||
conditionals;
|
||||
var available;
|
||||
var active;
|
||||
var conditions;
|
||||
var conditionals;
|
||||
|
||||
rewards.init = function () {
|
||||
available = ajaxify.data.rewards;
|
||||
@@ -25,8 +25,8 @@ define('admin/extend/rewards', ['translator'], function (translator) {
|
||||
update($(this));
|
||||
})
|
||||
.on('click', '.delete', function () {
|
||||
var parent = $(this).parents('[data-id]'),
|
||||
id = parent.attr('data-id');
|
||||
var parent = $(this).parents('[data-id]');
|
||||
var id = parent.attr('data-id');
|
||||
|
||||
socket.emit('admin.rewards.delete', {id: id}, function (err) {
|
||||
if (err) {
|
||||
@@ -40,9 +40,9 @@ define('admin/extend/rewards', ['translator'], function (translator) {
|
||||
return false;
|
||||
})
|
||||
.on('click', '.toggle', function () {
|
||||
var btn = $(this),
|
||||
disabled = btn.hasClass('btn-success'),
|
||||
id = $(this).parents('[data-id]').attr('data-id');
|
||||
var btn = $(this);
|
||||
var disabled = btn.hasClass('btn-success');
|
||||
var id = $(this).parents('[data-id]').attr('data-id');
|
||||
btn.toggleClass('btn-warning').toggleClass('btn-success').translateHtml('[[admin/extend/rewards:' + disabled ? 'disable' : 'enable' + ']]');
|
||||
// send disable api call
|
||||
return false;
|
||||
@@ -73,10 +73,10 @@ define('admin/extend/rewards', ['translator'], function (translator) {
|
||||
}
|
||||
|
||||
function selectReward(el) {
|
||||
var parent = el.parents('[data-rid]'),
|
||||
div = parent.find('.inputs'),
|
||||
inputs,
|
||||
html = '';
|
||||
var parent = el.parents('[data-rid]');
|
||||
var div = parent.find('.inputs');
|
||||
var inputs;
|
||||
var html = '';
|
||||
|
||||
for (var reward in available) {
|
||||
if (available.hasOwnProperty(reward)) {
|
||||
@@ -113,8 +113,8 @@ define('admin/extend/rewards', ['translator'], function (translator) {
|
||||
|
||||
function populateInputs() {
|
||||
$('[data-rid]').each(function (i) {
|
||||
var div = $(this).find('.inputs'),
|
||||
rewards = active[i].rewards;
|
||||
var div = $(this).find('.inputs');
|
||||
var rewards = active[i].rewards;
|
||||
|
||||
for (var reward in rewards) {
|
||||
if (rewards.hasOwnProperty(reward)) {
|
||||
@@ -153,9 +153,9 @@ define('admin/extend/rewards', ['translator'], function (translator) {
|
||||
var activeRewards = [];
|
||||
|
||||
$('#active li').each(function () {
|
||||
var data = {rewards: {}},
|
||||
main = $(this).find('form.main').serializeArray(),
|
||||
rewards = $(this).find('form.rewards').serializeArray();
|
||||
var data = {rewards: {}};
|
||||
var main = $(this).find('form.main').serializeArray();
|
||||
var rewards = $(this).find('form.rewards').serializeArray();
|
||||
|
||||
main.forEach(function (obj) {
|
||||
data[obj.name] = obj.value;
|
||||
|
||||
@@ -80,14 +80,14 @@ define('admin/extend/widgets', ['jqueryui'], function (jqueryui) {
|
||||
$('#widgets [data-template][data-location]').each(function (i, el) {
|
||||
el = $(el);
|
||||
|
||||
var template = el.attr('data-template'),
|
||||
location = el.attr('data-location'),
|
||||
area = el.children('.widget-area'),
|
||||
widgets = [];
|
||||
var template = el.attr('data-template');
|
||||
var location = el.attr('data-location');
|
||||
var area = el.children('.widget-area');
|
||||
var widgets = [];
|
||||
|
||||
area.find('.widget-panel[data-widget]').each(function () {
|
||||
var widgetData = {},
|
||||
data = $(this).find('form').serializeArray();
|
||||
var widgetData = {};
|
||||
var data = $(this).find('form').serializeArray();
|
||||
|
||||
for (var d in data) {
|
||||
if (data.hasOwnProperty(d)) {
|
||||
@@ -136,10 +136,10 @@ define('admin/extend/widgets', ['jqueryui'], function (jqueryui) {
|
||||
}
|
||||
|
||||
$('.color-selector').on('click', '.btn', function () {
|
||||
var btn = $(this),
|
||||
selector = btn.parents('.color-selector'),
|
||||
container = selector.parents('[data-container-html]'),
|
||||
classList = [];
|
||||
var btn = $(this);
|
||||
var selector = btn.parents('.color-selector');
|
||||
var container = selector.parents('[data-container-html]');
|
||||
var classList = [];
|
||||
|
||||
selector.children().each(function () {
|
||||
classList.push($(this).attr('data-class'));
|
||||
@@ -150,7 +150,7 @@ define('admin/extend/widgets', ['jqueryui'], function (jqueryui) {
|
||||
.addClass(btn.attr('data-class'));
|
||||
|
||||
container.attr('data-container-html', container.attr('data-container-html')
|
||||
.replace(/class="[a-zA-Z0-9-\s]+"/, 'class="' + container[0].className.replace(' pointer ui-draggable', '') + '"'),
|
||||
.replace(/class="[a-zA-Z0-9-\s]+"/, 'class="' + container[0].className.replace(' pointer ui-draggable', '') + '"')
|
||||
);
|
||||
});
|
||||
}
|
||||
@@ -191,8 +191,8 @@ define('admin/extend/widgets', ['jqueryui'], function (jqueryui) {
|
||||
}
|
||||
|
||||
widget.find('input, textarea, select').each(function () {
|
||||
var input = $(this),
|
||||
value = data[input.attr('name')];
|
||||
var input = $(this);
|
||||
var value = data[input.attr('name')];
|
||||
|
||||
if (input.attr('type') === 'checkbox') {
|
||||
input.prop('checked', !!value).trigger('change');
|
||||
@@ -208,14 +208,14 @@ define('admin/extend/widgets', ['jqueryui'], function (jqueryui) {
|
||||
var areas = data.areas;
|
||||
|
||||
for(var i = 0; i < areas.length; ++i) {
|
||||
var area = areas[i],
|
||||
widgetArea = $('#widgets .area[data-template="' + area.template + '"][data-location="' + area.location + '"]').find('.widget-area');
|
||||
var area = areas[i];
|
||||
var widgetArea = $('#widgets .area[data-template="' + area.template + '"][data-location="' + area.location + '"]').find('.widget-area');
|
||||
|
||||
widgetArea.html('');
|
||||
|
||||
for (var k = 0; k < area.data.length; ++k) {
|
||||
var widgetData = area.data[k],
|
||||
widgetEl = $('.available-widgets [data-widget="' + widgetData.widget + '"]').clone(true).removeClass('hide');
|
||||
var widgetData = area.data[k];
|
||||
var widgetEl = $('.available-widgets [data-widget="' + widgetData.widget + '"]').clone(true).removeClass('hide');
|
||||
|
||||
widgetArea.append(populateWidget(widgetEl, widgetData.data));
|
||||
appendToggle(widgetEl);
|
||||
|
||||
@@ -51,10 +51,10 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator'], function (s
|
||||
return !isPrerelease.test(version.name); // filter out automated prerelease versions
|
||||
});
|
||||
|
||||
var version = $('#version').html(),
|
||||
latestVersion = releases[0].name.slice(1),
|
||||
checkEl = $('.version-check'),
|
||||
text;
|
||||
var version = $('#version').html();
|
||||
var latestVersion = releases[0].name.slice(1);
|
||||
var checkEl = $('.version-check');
|
||||
var text;
|
||||
|
||||
// Alter box colour accordingly
|
||||
if (semver.eq(latestVersion, version)) {
|
||||
@@ -159,15 +159,15 @@ define('admin/general/dashboard', ['semver', 'Chart', 'translator'], function (s
|
||||
}
|
||||
|
||||
function setupGraphs() {
|
||||
var trafficCanvas = document.getElementById('analytics-traffic'),
|
||||
registeredCanvas = document.getElementById('analytics-registered'),
|
||||
presenceCanvas = document.getElementById('analytics-presence'),
|
||||
topicsCanvas = document.getElementById('analytics-topics'),
|
||||
trafficCtx = trafficCanvas.getContext('2d'),
|
||||
registeredCtx = registeredCanvas.getContext('2d'),
|
||||
presenceCtx = presenceCanvas.getContext('2d'),
|
||||
topicsCtx = topicsCanvas.getContext('2d'),
|
||||
trafficLabels = utils.getHoursArray();
|
||||
var trafficCanvas = document.getElementById('analytics-traffic');
|
||||
var registeredCanvas = document.getElementById('analytics-registered');
|
||||
var presenceCanvas = document.getElementById('analytics-presence');
|
||||
var topicsCanvas = document.getElementById('analytics-topics');
|
||||
var trafficCtx = trafficCanvas.getContext('2d');
|
||||
var registeredCtx = registeredCanvas.getContext('2d');
|
||||
var presenceCtx = presenceCanvas.getContext('2d');
|
||||
var topicsCtx = topicsCanvas.getContext('2d');
|
||||
var trafficLabels = utils.getHoursArray();
|
||||
|
||||
if (isMobile) {
|
||||
Chart.defaults.global.tooltips.enabled = false;
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
/* global define, app, ajaxify, socket, templates */
|
||||
|
||||
define('admin/general/navigation', ['translator', 'iconSelect', 'jqueryui'], function (translator, iconSelect, jqueryui) {
|
||||
var navigation = {},
|
||||
available;
|
||||
var navigation = {};
|
||||
var available;
|
||||
|
||||
navigation.init = function () {
|
||||
available = ajaxify.data.available;
|
||||
@@ -61,9 +61,9 @@ define('admin/general/navigation', ['translator', 'iconSelect', 'jqueryui'], fun
|
||||
}
|
||||
|
||||
function drop(ev, ui) {
|
||||
var id = ui.helper.attr('data-id'),
|
||||
el = $('#active-navigation [data-id="' + id + '"]'),
|
||||
data = id === 'custom' ? {iconClass: 'fa-navicon'} : available[id];
|
||||
var id = ui.helper.attr('data-id');
|
||||
var el = $('#active-navigation [data-id="' + id + '"]');
|
||||
var data = id === 'custom' ? {iconClass: 'fa-navicon'} : available[id];
|
||||
|
||||
data.enabled = false;
|
||||
data.index = (parseInt($('#enabled').children().last().attr('data-index'), 10) || 0) + 1;
|
||||
@@ -95,9 +95,9 @@ define('admin/general/navigation', ['translator', 'iconSelect', 'jqueryui'], fun
|
||||
|
||||
indices.forEach(function (index) {
|
||||
var el = $('#enabled').children('[data-index="' + index + '"]');
|
||||
var form = el.find('form').serializeArray(),
|
||||
data = {},
|
||||
properties = {};
|
||||
var form = el.find('form').serializeArray();
|
||||
var data = {};
|
||||
var properties = {};
|
||||
|
||||
form.forEach(function (input) {
|
||||
if (input.name.slice(0, 9) === 'property:' && input.value === 'on') {
|
||||
@@ -135,8 +135,8 @@ define('admin/general/navigation', ['translator', 'iconSelect', 'jqueryui'], fun
|
||||
}
|
||||
|
||||
function toggle() {
|
||||
var btn = $(this),
|
||||
disabled = btn.hasClass('btn-success');
|
||||
var btn = $(this);
|
||||
var disabled = btn.hasClass('btn-success');
|
||||
translator.translate(disabled ? '[[admin/general/navigation:btn.disable]]' : '[[admin/general/navigation:btn.enable]]', function (html) {
|
||||
btn.toggleClass('btn-warning').toggleClass('btn-success').html(html);
|
||||
btn.parents('li').find('[name="enabled"]').val(disabled ? 'on' : '');
|
||||
|
||||
@@ -2,7 +2,9 @@
|
||||
/*global define, socket, app, bootbox, templates, ajaxify, Sortable */
|
||||
|
||||
define('admin/manage/categories', ['vendor/jquery/serializeObject/jquery.ba-serializeobject.min', 'translator'], function (serialize, translator) {
|
||||
var Categories = {}, newCategoryId = -1, sortables;
|
||||
var Categories = {};
|
||||
var newCategoryId = -1;
|
||||
var sortables;
|
||||
|
||||
Categories.init = function () {
|
||||
socket.emit('admin.categories.getAll', function (error, payload) {
|
||||
@@ -17,10 +19,10 @@ define('admin/manage/categories', ['vendor/jquery/serializeObject/jquery.ba-seri
|
||||
|
||||
// Enable/Disable toggle events
|
||||
$('.categories').on('click', 'button[data-action="toggle"]', function () {
|
||||
var $this = $(this),
|
||||
cid = $this.attr('data-cid'),
|
||||
parentEl = $this.parents('li[data-cid="' + cid + '"]'),
|
||||
disabled = parentEl.hasClass('disabled');
|
||||
var $this = $(this);
|
||||
var cid = $this.attr('data-cid');
|
||||
var parentEl = $this.parents('li[data-cid="' + cid + '"]');
|
||||
var disabled = parentEl.hasClass('disabled');
|
||||
|
||||
var children = parentEl.find('li[data-cid]').map(function () {
|
||||
return $(this).attr('data-cid');
|
||||
@@ -127,8 +129,11 @@ define('admin/manage/categories', ['vendor/jquery/serializeObject/jquery.ba-seri
|
||||
|
||||
//Update needed?
|
||||
if((e.newIndex != undefined && e.oldIndex != e.newIndex) || isCategoryUpdate) {
|
||||
var parentCategory = isCategoryUpdate ? sortables[newCategoryId] : sortables[e.from.dataset.cid],
|
||||
modified = {}, i = 0, list = parentCategory.toArray(), len = list.length;
|
||||
var parentCategory = isCategoryUpdate ? sortables[newCategoryId] : sortables[e.from.dataset.cid];
|
||||
var modified = {};
|
||||
var i = 0;
|
||||
var list = parentCategory.toArray();
|
||||
var len = list.length;
|
||||
|
||||
for(i; i < len; ++i) {
|
||||
modified[list[i]] = {
|
||||
|
||||
@@ -41,7 +41,7 @@ define('admin/manage/category', [
|
||||
title: '[[admin/manage/categories:alert.updated]]',
|
||||
message: translator.compile(
|
||||
'admin/manage/categories:alert.updated-success',
|
||||
results.join(', '),
|
||||
results.join(', ')
|
||||
),
|
||||
type: 'success',
|
||||
timeout: 2000,
|
||||
@@ -58,8 +58,8 @@ define('admin/manage/category', [
|
||||
});
|
||||
|
||||
function enableColorPicker(idx, inputEl) {
|
||||
var $inputEl = $(inputEl),
|
||||
previewEl = $inputEl.parents('[data-cid]').find('.category-preview');
|
||||
var $inputEl = $(inputEl);
|
||||
var previewEl = $inputEl.parents('[data-cid]').find('.category-preview');
|
||||
|
||||
colorpicker.enable($inputEl, function (hsb, hex) {
|
||||
if ($inputEl.attr('data-name') === 'bgColor') {
|
||||
@@ -117,7 +117,7 @@ define('admin/manage/category', [
|
||||
|
||||
bootbox.confirm(translator.compile(
|
||||
'admin/manage/categories:alert.confirm-purge',
|
||||
$('form.category').find('input[data-name="name"]').val(),
|
||||
$('form.category').find('input[data-name="name"]').val()
|
||||
), function (confirm) {
|
||||
if (!confirm) {
|
||||
return;
|
||||
@@ -233,13 +233,13 @@ define('admin/manage/category', [
|
||||
|
||||
Category.setupPrivilegeTable = function () {
|
||||
$('.privilege-table-container').on('change', 'input[type="checkbox"]', function () {
|
||||
var checkboxEl = $(this),
|
||||
privilege = checkboxEl.parent().attr('data-privilege'),
|
||||
state = checkboxEl.prop('checked'),
|
||||
rowEl = checkboxEl.parents('tr'),
|
||||
member = rowEl.attr('data-group-name') || rowEl.attr('data-uid'),
|
||||
isPrivate = parseInt(rowEl.attr('data-private') || 0, 10),
|
||||
isGroup = rowEl.attr('data-group-name') !== undefined;
|
||||
var checkboxEl = $(this);
|
||||
var privilege = checkboxEl.parent().attr('data-privilege');
|
||||
var state = checkboxEl.prop('checked');
|
||||
var rowEl = checkboxEl.parents('tr');
|
||||
var member = rowEl.attr('data-group-name') || rowEl.attr('data-uid');
|
||||
var isPrivate = parseInt(rowEl.attr('data-private') || 0, 10);
|
||||
var isGroup = rowEl.attr('data-group-name') !== undefined;
|
||||
|
||||
if (member) {
|
||||
if (isGroup && privilege === 'groups:moderate' && !isPrivate && state) {
|
||||
@@ -340,8 +340,8 @@ define('admin/manage/category', [
|
||||
});
|
||||
|
||||
modal.find('li[data-cid]').on('click', function () {
|
||||
var parentCid = $(this).attr('data-cid'),
|
||||
payload = {};
|
||||
var parentCid = $(this).attr('data-cid');
|
||||
var payload = {};
|
||||
|
||||
payload[ajaxify.data.category.cid] = {
|
||||
parentCid: parentCid,
|
||||
|
||||
@@ -10,13 +10,13 @@ define('admin/manage/group', [
|
||||
var Groups = {};
|
||||
|
||||
Groups.init = function () {
|
||||
var groupDetailsSearch = $('#group-details-search'),
|
||||
groupDetailsSearchResults = $('#group-details-search-results'),
|
||||
groupIcon = $('#group-icon'),
|
||||
changeGroupUserTitle = $('#change-group-user-title'),
|
||||
changeGroupLabelColor = $('#change-group-label-color'),
|
||||
groupLabelPreview = $('#group-label-preview'),
|
||||
searchDelay;
|
||||
var groupDetailsSearch = $('#group-details-search');
|
||||
var groupDetailsSearchResults = $('#group-details-search-results');
|
||||
var groupIcon = $('#group-icon');
|
||||
var changeGroupUserTitle = $('#change-group-user-title');
|
||||
var changeGroupLabelColor = $('#change-group-label-color');
|
||||
var groupLabelPreview = $('#group-label-preview');
|
||||
var searchDelay;
|
||||
|
||||
|
||||
var groupName = ajaxify.data.group.name;
|
||||
@@ -38,12 +38,13 @@ define('admin/manage/group', [
|
||||
}
|
||||
|
||||
searchDelay = setTimeout(function () {
|
||||
var searchText = groupDetailsSearch.val(),
|
||||
foundUser;
|
||||
var searchText = groupDetailsSearch.val();
|
||||
var foundUser;
|
||||
|
||||
socket.emit('admin.user.search', {query: searchText}, function (err, results) {
|
||||
if (!err && results && results.users.length > 0) {
|
||||
var numResults = results.users.length, x;
|
||||
var numResults = results.users.length;
|
||||
var x;
|
||||
if (numResults > 20) {
|
||||
numResults = 20;
|
||||
}
|
||||
@@ -76,8 +77,8 @@ define('admin/manage/group', [
|
||||
});
|
||||
|
||||
groupDetailsSearchResults.on('click', 'li[data-uid]', function () {
|
||||
var userLabel = $(this),
|
||||
uid = parseInt(userLabel.attr('data-uid'), 10);
|
||||
var userLabel = $(this);
|
||||
var uid = parseInt(userLabel.attr('data-uid'), 10);
|
||||
|
||||
socket.emit('admin.groups.join', {
|
||||
groupName: groupName,
|
||||
@@ -105,12 +106,12 @@ define('admin/manage/group', [
|
||||
});
|
||||
|
||||
$('[component="groups/members"]').on('click', '[data-action]', function () {
|
||||
var btnEl = $(this),
|
||||
userRow = btnEl.parents('[data-uid]'),
|
||||
ownerFlagEl = userRow.find('.member-name i'),
|
||||
isOwner = !ownerFlagEl.hasClass('invisible') ? true : false,
|
||||
uid = userRow.attr('data-uid'),
|
||||
action = btnEl.attr('data-action');
|
||||
var btnEl = $(this);
|
||||
var userRow = btnEl.parents('[data-uid]');
|
||||
var ownerFlagEl = userRow.find('.member-name i');
|
||||
var isOwner = !ownerFlagEl.hasClass('invisible') ? true : false;
|
||||
var uid = userRow.attr('data-uid');
|
||||
var action = btnEl.attr('data-action');
|
||||
|
||||
switch(action) {
|
||||
case 'toggleOwnership':
|
||||
|
||||
@@ -7,10 +7,10 @@ define('admin/manage/groups', ['translator'], function (translator) {
|
||||
var intervalId = 0;
|
||||
|
||||
Groups.init = function () {
|
||||
var createModal = $('#create-modal'),
|
||||
createGroupName = $('#create-group-name'),
|
||||
createModalGo = $('#create-modal-go'),
|
||||
createModalError = $('#create-modal-error');
|
||||
var createModal = $('#create-modal');
|
||||
var createGroupName = $('#create-group-name');
|
||||
var createModalGo = $('#create-modal-go');
|
||||
var createModalError = $('#create-modal-error');
|
||||
|
||||
handleSearch();
|
||||
|
||||
@@ -31,8 +31,8 @@ define('admin/manage/groups', ['translator'], function (translator) {
|
||||
var submitObj = {
|
||||
name: createGroupName.val(),
|
||||
description: $('#create-group-desc').val(),
|
||||
},
|
||||
errorText;
|
||||
};
|
||||
var errorText;
|
||||
|
||||
socket.emit('admin.groups.create', submitObj, function (err) {
|
||||
if (err) {
|
||||
@@ -52,9 +52,9 @@ define('admin/manage/groups', ['translator'], function (translator) {
|
||||
});
|
||||
|
||||
$('.groups-list').on('click', 'button[data-action]', function () {
|
||||
var el = $(this),
|
||||
action = el.attr('data-action'),
|
||||
groupName = el.parents('tr[data-groupname]').attr('data-groupname');
|
||||
var el = $(this);
|
||||
var action = el.attr('data-action');
|
||||
var groupName = el.parents('tr[data-groupname]').attr('data-groupname');
|
||||
|
||||
switch (action) {
|
||||
case 'delete':
|
||||
|
||||
@@ -30,9 +30,9 @@ define('admin/manage/registration', function () {
|
||||
var method = 'admin.user.deleteInvitation';
|
||||
|
||||
var removeRow = function () {
|
||||
var nextRow = parent.next(),
|
||||
thisRowinvitedBy = parent.find('.invited-by'),
|
||||
nextRowInvitedBy = nextRow.find('.invited-by');
|
||||
var nextRow = parent.next();
|
||||
var thisRowinvitedBy = parent.find('.invited-by');
|
||||
var nextRowInvitedBy = nextRow.find('.invited-by');
|
||||
if (nextRowInvitedBy.html() !== undefined && nextRowInvitedBy.html().length < 2) {
|
||||
nextRowInvitedBy.html(thisRowinvitedBy.html());
|
||||
}
|
||||
|
||||
@@ -6,8 +6,8 @@ define('admin/manage/tags', [
|
||||
'admin/modules/selectable',
|
||||
'admin/modules/colorpicker',
|
||||
], function (infinitescroll, selectable, colorpicker) {
|
||||
var Tags = {},
|
||||
timeoutId = 0;
|
||||
var Tags = {};
|
||||
var timeoutId = 0;
|
||||
|
||||
Tags.init = function () {
|
||||
selectable.enable('.tag-management', '.tag-row');
|
||||
@@ -85,8 +85,8 @@ define('admin/manage/tags', [
|
||||
return;
|
||||
}
|
||||
|
||||
var firstTag = $(tagsToModify[0]),
|
||||
title = tagsToModify.length > 1 ? '[[admin/manage/tags:alerts.editing-multiple]]' : '[[admin/manage/tags:alerts.editing-x, ' + firstTag.find('.tag-item').text() + ']]';
|
||||
var firstTag = $(tagsToModify[0]);
|
||||
var title = tagsToModify.length > 1 ? '[[admin/manage/tags:alerts.editing-multiple]]' : '[[admin/manage/tags:alerts.editing-x, ' + firstTag.find('.tag-item').text() + ']]';
|
||||
|
||||
var modal = bootbox.dialog({
|
||||
title: title,
|
||||
@@ -96,9 +96,9 @@ define('admin/manage/tags', [
|
||||
label: "Save",
|
||||
className: "btn-primary save",
|
||||
callback: function () {
|
||||
var modal = $('.bootbox'),
|
||||
bgColor = modal.find('[data-name="bgColor"]').val(),
|
||||
color = modal.find('[data-name="color"]').val();
|
||||
var modal = $('.bootbox');
|
||||
var bgColor = modal.find('[data-name="bgColor"]').val();
|
||||
var color = modal.find('[data-name="color"]').val();
|
||||
|
||||
tagsToModify.each(function (idx, tag) {
|
||||
tag = $(tag);
|
||||
|
||||
@@ -21,7 +21,7 @@ define('admin/modules/search', ['mousetrap'], function (mousetrap) {
|
||||
// and wrap the match in a `.search-match` element
|
||||
.replace(
|
||||
new RegExp('^[\\s\\S]*?(.{0,25})(' + term + ')(.{0,25})[\\s\\S]*?$', 'gmi'),
|
||||
'...$1<span class="search-match">$2</span>$3...<br>',
|
||||
'...$1<span class="search-match">$2</span>$3...<br>'
|
||||
)
|
||||
// collapse whitespace
|
||||
.replace(/(?:\n ?)+/g, '\n')
|
||||
@@ -29,7 +29,7 @@ define('admin/modules/search', ['mousetrap'], function (mousetrap) {
|
||||
|
||||
title = title.replace(
|
||||
new RegExp('(^.*?)(' + term + ')(.*?$)', 'gi'),
|
||||
'$1<span class="search-match">$2</span>$3',
|
||||
'$1<span class="search-match">$2</span>$3'
|
||||
);
|
||||
|
||||
return '<li role="presentation" class="result">' +
|
||||
|
||||
@@ -11,8 +11,8 @@ define('admin/settings', ['uploader'], function (uploader) {
|
||||
|
||||
Settings.populateTOC = function () {
|
||||
$('.settings-header').each(function () {
|
||||
var header = $(this).text(),
|
||||
anchor = header.toLowerCase().replace(/ /g, '-').trim();
|
||||
var header = $(this).text();
|
||||
var anchor = header.toLowerCase().replace(/ /g, '-').trim();
|
||||
|
||||
$(this).prepend('<a name="' + anchor + '"></a>');
|
||||
$('.section-content ul').append('<li><a href="#' + anchor + '">' + header + '</a></li>');
|
||||
@@ -21,11 +21,14 @@ define('admin/settings', ['uploader'], function (uploader) {
|
||||
|
||||
Settings.prepare = function (callback) {
|
||||
// Populate the fields on the page from the config
|
||||
var fields = $('#content [data-field]'),
|
||||
numFields = fields.length,
|
||||
saveBtn = $('#save'),
|
||||
revertBtn = $('#revert'),
|
||||
x, key, inputType, field;
|
||||
var fields = $('#content [data-field]');
|
||||
var numFields = fields.length;
|
||||
var saveBtn = $('#save');
|
||||
var revertBtn = $('#revert');
|
||||
var x;
|
||||
var key;
|
||||
var inputType;
|
||||
var field;
|
||||
|
||||
// Handle unsaved changes
|
||||
$(fields).on('change', function () {
|
||||
@@ -148,8 +151,9 @@ define('admin/settings', ['uploader'], function (uploader) {
|
||||
|
||||
fields.each(function () {
|
||||
var field = $(this);
|
||||
var key = field.attr('data-field'),
|
||||
value, inputType;
|
||||
var key = field.attr('data-field');
|
||||
var value;
|
||||
var inputType;
|
||||
|
||||
if (field.is('input')) {
|
||||
inputType = field.attr('type');
|
||||
|
||||
@@ -2,8 +2,8 @@
|
||||
/* global define, socket, app, ajaxify, ace */
|
||||
|
||||
define('admin/settings/email', ['admin/settings'], function (settings) {
|
||||
var module = {},
|
||||
emailEditor;
|
||||
var module = {};
|
||||
var emailEditor;
|
||||
|
||||
module.init = function () {
|
||||
configureEmailTester();
|
||||
|
||||
@@ -462,9 +462,9 @@ app.cacheBuster = null;
|
||||
}
|
||||
|
||||
app.handleSearch = function () {
|
||||
var searchButton = $("#search-button"),
|
||||
searchFields = $("#search-fields"),
|
||||
searchInput = $('#search-fields input');
|
||||
var searchButton = $("#search-button");
|
||||
var searchFields = $("#search-fields");
|
||||
var searchInput = $('#search-fields input');
|
||||
|
||||
$('#search-form .advanced-search-link').on('mousedown', function () {
|
||||
ajaxify.go('/search');
|
||||
|
||||
@@ -91,7 +91,7 @@ define('forum/account/header', [
|
||||
components.get('account/cover').css('background-image', 'url(' + imageUrlOnServer + '?' + config['cache-buster'] + ')');
|
||||
});
|
||||
},
|
||||
removeCover,
|
||||
removeCover
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
|
||||
define('forum/account/posts', ['forum/account/header', 'forum/infinitescroll'], function (header, infinitescroll) {
|
||||
var AccountPosts = {};
|
||||
var method, template;
|
||||
var method;
|
||||
var template;
|
||||
|
||||
AccountPosts.init = function () {
|
||||
header.init();
|
||||
|
||||
@@ -4,7 +4,8 @@
|
||||
|
||||
define('forum/account/topics', ['forum/account/header', 'forum/infinitescroll'], function (header, infinitescroll) {
|
||||
var AccountTopics = {};
|
||||
var template, set;
|
||||
var template;
|
||||
var set;
|
||||
|
||||
AccountTopics.init = function () {
|
||||
header.init();
|
||||
|
||||
@@ -211,10 +211,10 @@ define('forum/category', [
|
||||
template: {category: true},
|
||||
}, function (html) {
|
||||
translator.translate(html, function (translatedHTML) {
|
||||
var topic = $(translatedHTML),
|
||||
container = $('[component="category"]'),
|
||||
topics = $('[component="category/topic"]'),
|
||||
numTopics = topics.length;
|
||||
var topic = $(translatedHTML);
|
||||
var container = $('[component="category"]');
|
||||
var topics = $('[component="category/topic"]');
|
||||
var numTopics = topics.length;
|
||||
|
||||
$('[component="category"]').removeClass('hidden');
|
||||
$('.category-sidebar').removeClass('hidden');
|
||||
@@ -319,7 +319,8 @@ define('forum/category', [
|
||||
|
||||
data.showSelect = data.privileges.editable;
|
||||
|
||||
var after, before;
|
||||
var after;
|
||||
var before;
|
||||
var topics = $('[component="category/topic"]');
|
||||
|
||||
if (direction > 0 && topics.length) {
|
||||
@@ -337,8 +338,8 @@ define('forum/category', [
|
||||
if (after) {
|
||||
html.insertAfter(after);
|
||||
} else if (before) {
|
||||
var height = $(document).height(),
|
||||
scrollTop = $(window).scrollTop();
|
||||
var height = $(document).height();
|
||||
var scrollTop = $(window).scrollTop();
|
||||
|
||||
html.insertBefore(before);
|
||||
|
||||
|
||||
@@ -134,16 +134,16 @@ define('forum/chats', [
|
||||
|
||||
Chats.addHotkeys = function () {
|
||||
mousetrap.bind('ctrl+up', function () {
|
||||
var activeContact = $('.chats-list .bg-primary'),
|
||||
prev = activeContact.prev();
|
||||
var activeContact = $('.chats-list .bg-primary');
|
||||
var prev = activeContact.prev();
|
||||
|
||||
if (prev.length) {
|
||||
Chats.switchChat(prev.attr('data-roomid'));
|
||||
}
|
||||
});
|
||||
mousetrap.bind('ctrl+down', function () {
|
||||
var activeContact = $('.chats-list .bg-primary'),
|
||||
next = activeContact.next();
|
||||
var activeContact = $('.chats-list .bg-primary');
|
||||
var next = activeContact.next();
|
||||
|
||||
if (next.length) {
|
||||
Chats.switchChat(next.attr('data-roomid'));
|
||||
|
||||
@@ -91,7 +91,7 @@ define('forum/chats/messages', ['components', 'sounds', 'translator'], function
|
||||
messages.scrollToBottom = function (containerEl) {
|
||||
if (containerEl.length) {
|
||||
containerEl.scrollTop(
|
||||
containerEl[0].scrollHeight - containerEl.height(),
|
||||
containerEl[0].scrollHeight - containerEl.height()
|
||||
);
|
||||
}
|
||||
};
|
||||
|
||||
@@ -41,7 +41,7 @@ define('forum/groups/details', [
|
||||
components.get('groups/cover').css('background-image', 'url(' + imageUrlOnServer + ')');
|
||||
});
|
||||
},
|
||||
removeCover,
|
||||
removeCover
|
||||
);
|
||||
}
|
||||
|
||||
@@ -52,12 +52,12 @@ define('forum/groups/details', [
|
||||
components.get('groups/activity').find('.content img:not(.not-responsive)').addClass('img-responsive');
|
||||
|
||||
detailsPage.on('click', '[data-action]', function () {
|
||||
var btnEl = $(this),
|
||||
userRow = btnEl.parents('[data-uid]'),
|
||||
ownerFlagEl = userRow.find('.member-name > i'),
|
||||
isOwner = !ownerFlagEl.hasClass('invisible') ? true : false,
|
||||
uid = userRow.attr('data-uid'),
|
||||
action = btnEl.attr('data-action');
|
||||
var btnEl = $(this);
|
||||
var userRow = btnEl.parents('[data-uid]');
|
||||
var ownerFlagEl = userRow.find('.member-name > i');
|
||||
var isOwner = !ownerFlagEl.hasClass('invisible') ? true : false;
|
||||
var uid = userRow.attr('data-uid');
|
||||
var action = btnEl.attr('data-action');
|
||||
|
||||
switch(action) {
|
||||
case 'toggleOwnership':
|
||||
@@ -120,15 +120,15 @@ define('forum/groups/details', [
|
||||
};
|
||||
|
||||
Details.prepareSettings = function () {
|
||||
var settingsFormEl = components.get('groups/settings'),
|
||||
colorBtn = settingsFormEl.find('[data-action="color-select"]'),
|
||||
colorValueEl = settingsFormEl.find('[name="labelColor"]'),
|
||||
iconBtn = settingsFormEl.find('[data-action="icon-select"]'),
|
||||
previewEl = settingsFormEl.find('.label'),
|
||||
previewIcon = previewEl.find('i'),
|
||||
userTitleEl = settingsFormEl.find('[name="userTitle"]'),
|
||||
userTitleEnabledEl = settingsFormEl.find('[name="userTitleEnabled"]'),
|
||||
iconValueEl = settingsFormEl.find('[name="icon"]');
|
||||
var settingsFormEl = components.get('groups/settings');
|
||||
var colorBtn = settingsFormEl.find('[data-action="color-select"]');
|
||||
var colorValueEl = settingsFormEl.find('[name="labelColor"]');
|
||||
var iconBtn = settingsFormEl.find('[data-action="icon-select"]');
|
||||
var previewEl = settingsFormEl.find('.label');
|
||||
var previewIcon = previewEl.find('i');
|
||||
var userTitleEl = settingsFormEl.find('[name="userTitle"]');
|
||||
var userTitleEnabledEl = settingsFormEl.find('[name="userTitleEnabled"]');
|
||||
var iconValueEl = settingsFormEl.find('[name="icon"]');
|
||||
|
||||
// Add color picker to settings form
|
||||
colorBtn.ColorPicker({
|
||||
@@ -171,8 +171,8 @@ define('forum/groups/details', [
|
||||
};
|
||||
|
||||
Details.update = function () {
|
||||
var settingsFormEl = components.get('groups/settings'),
|
||||
checkboxes = settingsFormEl.find('input[type="checkbox"][name]');
|
||||
var settingsFormEl = components.get('groups/settings');
|
||||
var checkboxes = settingsFormEl.find('input[type="checkbox"][name]');
|
||||
|
||||
if (settingsFormEl.length) {
|
||||
require(['vendor/jquery/serializeObject/jquery.ba-serializeobject.min'], function () {
|
||||
|
||||
@@ -63,9 +63,9 @@ define('forum/groups/list', ['forum/infinitescroll'], function (infinitescroll)
|
||||
};
|
||||
|
||||
Groups.search = function () {
|
||||
var groupsEl = $('#groups-list'),
|
||||
queryEl = $('#search-text'),
|
||||
sortEl = $('#search-sort');
|
||||
var groupsEl = $('#groups-list');
|
||||
var queryEl = $('#search-text');
|
||||
var sortEl = $('#search-sort');
|
||||
|
||||
socket.emit('groups.search', {
|
||||
query: queryEl.val(),
|
||||
|
||||
@@ -34,7 +34,8 @@ define('forum/infinitescroll', function () {
|
||||
var offsetTop = container.offset() ? container.offset().top : 0;
|
||||
var scrollPercent = 100 * (currentScrollTop - offsetTop) / (viewportHeight <= 0 ? wh : viewportHeight);
|
||||
|
||||
var top = 20, bottom = 80;
|
||||
var top = 20;
|
||||
var bottom = 80;
|
||||
|
||||
var direction = currentScrollTop > previousScrollTop ? 1 : -1;
|
||||
|
||||
@@ -76,8 +77,8 @@ define('forum/infinitescroll', function () {
|
||||
|
||||
var removeCount = els.length - count;
|
||||
if (direction > 0) {
|
||||
var height = $(document).height(),
|
||||
scrollTop = $(window).scrollTop();
|
||||
var height = $(document).height();
|
||||
var scrollTop = $(window).scrollTop();
|
||||
|
||||
els.slice(0, removeCount).remove();
|
||||
|
||||
|
||||
@@ -5,9 +5,9 @@ define('forum/login', ['translator'], function (translator) {
|
||||
var Login = {};
|
||||
|
||||
Login.init = function () {
|
||||
var errorEl = $('#login-error-notify'),
|
||||
submitEl = $('#login'),
|
||||
formEl = $('#login-form');
|
||||
var errorEl = $('#login-error-notify');
|
||||
var submitEl = $('#login');
|
||||
var formEl = $('#login-form');
|
||||
|
||||
submitEl.on('click', function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
@@ -4,16 +4,16 @@
|
||||
|
||||
|
||||
define('forum/register', ['translator'], function (translator) {
|
||||
var Register = {},
|
||||
validationError = false,
|
||||
successIcon = '';
|
||||
var Register = {};
|
||||
var validationError = false;
|
||||
var successIcon = '';
|
||||
|
||||
Register.init = function () {
|
||||
var email = $('#email'),
|
||||
username = $('#username'),
|
||||
password = $('#password'),
|
||||
password_confirm = $('#password-confirm'),
|
||||
register = $('#register');
|
||||
var email = $('#email');
|
||||
var username = $('#username');
|
||||
var password = $('#password');
|
||||
var password_confirm = $('#password-confirm');
|
||||
var register = $('#register');
|
||||
|
||||
handleLanguageOverride();
|
||||
|
||||
@@ -170,8 +170,8 @@ define('forum/register', ['translator'], function (translator) {
|
||||
}
|
||||
|
||||
function validatePassword(password, password_confirm) {
|
||||
var password_notify = $('#password-notify'),
|
||||
password_confirm_notify = $('#password-confirm-notify');
|
||||
var password_notify = $('#password-notify');
|
||||
var password_confirm_notify = $('#password-confirm-notify');
|
||||
|
||||
if (password.length < ajaxify.data.minimumPasswordLength) {
|
||||
showError(password_notify, '[[user:change_password_error_length]]');
|
||||
@@ -193,8 +193,8 @@ define('forum/register', ['translator'], function (translator) {
|
||||
}
|
||||
|
||||
function validatePasswordConfirm(password, password_confirm) {
|
||||
var password_notify = $('#password-notify'),
|
||||
password_confirm_notify = $('#password-confirm-notify');
|
||||
var password_notify = $('#password-notify');
|
||||
var password_confirm_notify = $('#password-confirm-notify');
|
||||
|
||||
if (!password || password_notify.hasClass('alert-error')) {
|
||||
return;
|
||||
@@ -230,8 +230,8 @@ define('forum/register', ['translator'], function (translator) {
|
||||
|
||||
function handleLanguageOverride() {
|
||||
if (!app.user.uid && config.defaultLang !== config.userLang) {
|
||||
var formEl = $('[component="register/local"]'),
|
||||
langEl = $('<input type="hidden" name="userLang" value="' + config.userLang + '" />');
|
||||
var formEl = $('[component="register/local"]');
|
||||
var langEl = $('<input type="hidden" name="userLang" value="' + config.userLang + '" />');
|
||||
|
||||
formEl.append(langEl);
|
||||
}
|
||||
|
||||
@@ -5,9 +5,9 @@ define('forum/reset', function () {
|
||||
var ResetPassword = {};
|
||||
|
||||
ResetPassword.init = function () {
|
||||
var inputEl = $('#email'),
|
||||
errorEl = $('#error'),
|
||||
successEl = $('#success');
|
||||
var inputEl = $('#email');
|
||||
var errorEl = $('#error');
|
||||
var successEl = $('#success');
|
||||
|
||||
$('#reset').on('click', function () {
|
||||
if (inputEl.val() && inputEl.val().indexOf('@') !== -1) {
|
||||
|
||||
@@ -128,7 +128,8 @@ define('forum/search', ['search', 'autocomplete'], function (searchModule, autoc
|
||||
var regex = new RegExp('(' + regexStr + ')', 'gi');
|
||||
|
||||
$('.search-result-text p, .search-result-text h4').each(function () {
|
||||
var result = $(this), nested = [];
|
||||
var result = $(this);
|
||||
var nested = [];
|
||||
|
||||
result.find('*').each(function () {
|
||||
$(this).after('<!-- ' + nested.length + ' -->');
|
||||
|
||||
@@ -14,8 +14,8 @@ define('forum/topic', [
|
||||
'sort',
|
||||
'components',
|
||||
], function (infinitescroll, threadTools, postTools, events, posts, replies, navigator, sort, components) {
|
||||
var Topic = {},
|
||||
currentUrl = '';
|
||||
var Topic = {};
|
||||
var currentUrl = '';
|
||||
|
||||
$(window).on('action:ajaxify.start', function (ev, data) {
|
||||
if (Topic.replaceURLTimeout) {
|
||||
@@ -112,8 +112,8 @@ define('forum/topic', [
|
||||
mousetrap.bind('ctrl+f', function (e) {
|
||||
if (config.topicSearchEnabled) {
|
||||
// If in topic, open search window and populate, otherwise regular behaviour
|
||||
var match = ajaxify.currentPage.match(/^topic\/([\d]+)/),
|
||||
tid;
|
||||
var match = ajaxify.currentPage.match(/^topic\/([\d]+)/);
|
||||
var tid;
|
||||
if (match) {
|
||||
e.preventDefault();
|
||||
tid = match[1];
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
|
||||
define('forum/topic/flag', [], function () {
|
||||
|
||||
var Flag = {},
|
||||
flagModal,
|
||||
flagCommit;
|
||||
var Flag = {};
|
||||
var flagModal;
|
||||
var flagCommit;
|
||||
|
||||
Flag.showFlagModal = function (pid, username, userslug) {
|
||||
parseModal({
|
||||
|
||||
@@ -11,8 +11,8 @@ define('forum/topic/move-post', [], function () {
|
||||
app.parseAndTranslate('partials/move_post_modal', {}, function (html) {
|
||||
var moveModal = $(html);
|
||||
|
||||
var moveBtn = moveModal.find('#move_post_commit'),
|
||||
topicId = moveModal.find('#topicId');
|
||||
var moveBtn = moveModal.find('#move_post_commit');
|
||||
var topicId = moveModal.find('#topicId');
|
||||
|
||||
moveModal.on('hidden.bs.modal', function () {
|
||||
moveModal.remove();
|
||||
|
||||
@@ -4,9 +4,9 @@
|
||||
|
||||
define('forum/topic/move', function () {
|
||||
|
||||
var Move = {},
|
||||
modal,
|
||||
selectedEl;
|
||||
var Move = {};
|
||||
var modal;
|
||||
var selectedEl;
|
||||
|
||||
Move.init = function (tids, currentCid, onComplete) {
|
||||
Move.tids = tids;
|
||||
|
||||
@@ -165,7 +165,8 @@ define('forum/topic/posts', [
|
||||
return callback();
|
||||
}
|
||||
|
||||
var after, before;
|
||||
var after;
|
||||
var before;
|
||||
|
||||
if (direction > 0 && repliesSelector.length) {
|
||||
after = repliesSelector.last();
|
||||
@@ -188,8 +189,8 @@ define('forum/topic/posts', [
|
||||
html.insertAfter(after);
|
||||
} else if (before) {
|
||||
// Save document height and position for future reference (about 5 lines down)
|
||||
var height = $(document).height(),
|
||||
scrollTop = $(window).scrollTop();
|
||||
var height = $(document).height();
|
||||
var scrollTop = $(window).scrollTop();
|
||||
|
||||
html.insertBefore(before);
|
||||
|
||||
@@ -290,17 +291,20 @@ define('forum/topic/posts', [
|
||||
default
|
||||
*/
|
||||
|
||||
var images = components.get('post/content').find('img[data-state="unloaded"]'),
|
||||
visible = images.filter(function () {
|
||||
var images = components.get('post/content').find('img[data-state="unloaded"]');
|
||||
var visible = images.filter(function () {
|
||||
return utils.isElementInViewport(this);
|
||||
}),
|
||||
posts = $.unique(visible.map(function () {
|
||||
});
|
||||
var posts = $.unique(visible.map(function () {
|
||||
return $(this).parents('[component="post"]').get(0);
|
||||
})),
|
||||
scrollTop = $(window).scrollTop(),
|
||||
adjusting = false,
|
||||
adjustQueue = [],
|
||||
adjustPosition = function () {
|
||||
}));
|
||||
var scrollTop = $(window).scrollTop();
|
||||
var adjusting = false;
|
||||
var adjustQueue = [];
|
||||
var oldHeight;
|
||||
var newHeight;
|
||||
|
||||
function adjustPosition() {
|
||||
adjusting = true;
|
||||
oldHeight = document.body.clientHeight;
|
||||
|
||||
@@ -322,8 +326,7 @@ define('forum/topic/posts', [
|
||||
Posts.wrapImagesInLinks(posts);
|
||||
posts.length = 0;
|
||||
}
|
||||
},
|
||||
oldHeight, newHeight;
|
||||
};
|
||||
|
||||
// For each image, reset the source and adjust scrollTop when loaded
|
||||
visible.attr('data-state', 'loading');
|
||||
@@ -346,9 +349,9 @@ define('forum/topic/posts', [
|
||||
|
||||
Posts.wrapImagesInLinks = function (posts) {
|
||||
posts.find('[component="post/content"] img:not(.emoji)').each(function () {
|
||||
var $this = $(this),
|
||||
src = $this.attr('src'),
|
||||
suffixRegex = /-resized(\.[\w]+)?$/;
|
||||
var $this = $(this);
|
||||
var src = $this.attr('src');
|
||||
var suffixRegex = /-resized(\.[\w]+)?$/;
|
||||
|
||||
if (src === 'about:blank') {
|
||||
return;
|
||||
|
||||
@@ -64,8 +64,8 @@ define('forum/topic/votes', ['components', 'translator'], function (components,
|
||||
|
||||
|
||||
Votes.toggleVote = function (button, className, method) {
|
||||
var post = button.parents('[data-pid]'),
|
||||
currentState = post.find(className).length;
|
||||
var post = button.parents('[data-pid]');
|
||||
var currentState = post.find(className).length;
|
||||
|
||||
socket.emit(currentState ? 'posts.unvote' : method , {
|
||||
pid: post.attr('data-pid'),
|
||||
|
||||
@@ -52,9 +52,9 @@ $('document').ready(function () {
|
||||
}
|
||||
|
||||
function activate(type, el) {
|
||||
var field = el.val(),
|
||||
parent = el.parents('.input-row'),
|
||||
help = parent.children('.help-text');
|
||||
var field = el.val();
|
||||
var parent = el.parents('.input-row');
|
||||
var help = parent.children('.help-text');
|
||||
|
||||
function validateUsername(field) {
|
||||
if (!utils.isUserNameValid(field) || !utils.slugify(field)) {
|
||||
|
||||
@@ -38,8 +38,8 @@ define('coverPhoto', [
|
||||
e.stopPropagation();
|
||||
e.preventDefault();
|
||||
|
||||
var files = e.originalEvent.dataTransfer.files,
|
||||
reader = new FileReader();
|
||||
var files = e.originalEvent.dataTransfer.files;
|
||||
var reader = new FileReader();
|
||||
|
||||
if (files.length && files[0].type.match('image.*')) {
|
||||
reader.onload = function (e) {
|
||||
|
||||
@@ -37,19 +37,19 @@
|
||||
};
|
||||
|
||||
helpers.buildMetaTag = function (tag) {
|
||||
var name = tag.name ? 'name="' + tag.name + '" ' : '',
|
||||
property = tag.property ? 'property="' + tag.property + '" ' : '',
|
||||
content = tag.content ? 'content="' + tag.content.replace(/\n/g, ' ') + '" ' : '';
|
||||
var name = tag.name ? 'name="' + tag.name + '" ' : '';
|
||||
var property = tag.property ? 'property="' + tag.property + '" ' : '';
|
||||
var content = tag.content ? 'content="' + tag.content.replace(/\n/g, ' ') + '" ' : '';
|
||||
|
||||
return '<meta ' + name + property + content + '/>\n\t';
|
||||
};
|
||||
|
||||
helpers.buildLinkTag = function (tag) {
|
||||
var link = tag.link ? 'link="' + tag.link + '" ' : '',
|
||||
rel = tag.rel ? 'rel="' + tag.rel + '" ' : '',
|
||||
type = tag.type ? 'type="' + tag.type + '" ' : '',
|
||||
href = tag.href ? 'href="' + tag.href + '" ' : '',
|
||||
sizes = tag.sizes ? 'sizes="' + tag.sizes + '" ' : '';
|
||||
var link = tag.link ? 'link="' + tag.link + '" ' : '';
|
||||
var rel = tag.rel ? 'rel="' + tag.rel + '" ' : '';
|
||||
var type = tag.type ? 'type="' + tag.type + '" ' : '';
|
||||
var href = tag.href ? 'href="' + tag.href + '" ' : '';
|
||||
var sizes = tag.sizes ? 'sizes="' + tag.sizes + '" ' : '';
|
||||
|
||||
return '<link ' + link + rel + type + sizes + href + '/>\n\t';
|
||||
};
|
||||
@@ -285,5 +285,5 @@
|
||||
}(
|
||||
typeof exports === 'object' ? exports :
|
||||
typeof define === 'function' && define.amd ? {} :
|
||||
helpers = {},
|
||||
helpers = {}
|
||||
));
|
||||
|
||||
@@ -62,8 +62,8 @@ define('iconSelect', function () {
|
||||
});
|
||||
|
||||
picker.on('show.bs.modal', function () {
|
||||
var modalEl = $(this),
|
||||
searchEl = modalEl.find('input');
|
||||
var modalEl = $(this);
|
||||
var searchEl = modalEl.find('input');
|
||||
|
||||
if (selected) {
|
||||
modalEl.find('.' + selected).addClass('selected');
|
||||
@@ -72,10 +72,10 @@ define('iconSelect', function () {
|
||||
}).modal('show');
|
||||
|
||||
picker.on('shown.bs.modal', function () {
|
||||
var modalEl = $(this),
|
||||
searchEl = modalEl.find('input'),
|
||||
icons = modalEl.find('.fa-icons i'),
|
||||
submitEl = modalEl.find('button.btn-primary');
|
||||
var modalEl = $(this);
|
||||
var searchEl = modalEl.find('input');
|
||||
var icons = modalEl.find('.fa-icons i');
|
||||
var submitEl = modalEl.find('button.btn-primary');
|
||||
|
||||
function changeSelection(newSelection) {
|
||||
modalEl.find('i.selected').removeClass('selected');
|
||||
|
||||
@@ -8,10 +8,10 @@ define('notifications', ['sounds', 'translator', 'components'], function (sound,
|
||||
var unreadNotifs = {};
|
||||
|
||||
Notifications.prepareDOM = function () {
|
||||
var notifContainer = components.get('notifications'),
|
||||
notifTrigger = notifContainer.children('a'),
|
||||
notifList = components.get('notifications/list'),
|
||||
notifIcon = components.get('notifications/icon');
|
||||
var notifContainer = components.get('notifications');
|
||||
var notifTrigger = notifContainer.children('a');
|
||||
var notifList = components.get('notifications/list');
|
||||
var notifIcon = components.get('notifications/icon');
|
||||
|
||||
notifTrigger
|
||||
.on('click', function (e) {
|
||||
|
||||
@@ -13,10 +13,10 @@ define('settings', function () {
|
||||
'settings/object',
|
||||
];
|
||||
|
||||
var Settings,
|
||||
onReady = [],
|
||||
waitingJobs = 0,
|
||||
helper;
|
||||
var Settings;
|
||||
var onReady = [];
|
||||
var waitingJobs = 0;
|
||||
var helper;
|
||||
|
||||
/**
|
||||
Returns the hook of given name that matches the given type or element.
|
||||
@@ -24,7 +24,8 @@ define('settings', function () {
|
||||
@param name The name of the hook.
|
||||
*/
|
||||
function getHook(type, name) {
|
||||
var hook, plugin;
|
||||
var hook;
|
||||
var plugin;
|
||||
if (typeof type !== 'string') {
|
||||
type = $(type);
|
||||
type = type.data('type') || type.attr('type') || type.prop('tagName');
|
||||
@@ -99,7 +100,8 @@ define('settings', function () {
|
||||
@returns JQuery The created element.
|
||||
*/
|
||||
createElementOfType: function (type, tagName, data) {
|
||||
var element, hook = getHook(type, 'create');
|
||||
var element;
|
||||
var hook = getHook(type, 'create');
|
||||
if (hook != null) {
|
||||
element = $(hook.call(Settings, type, tagName, data));
|
||||
} else {
|
||||
@@ -151,11 +153,11 @@ define('settings', function () {
|
||||
@returns Object The value of the element.
|
||||
*/
|
||||
readValue: function (element) {
|
||||
var empty = !helper.isFalse(element.data('empty')),
|
||||
trim = !helper.isFalse(element.data('trim')),
|
||||
split = element.data('split'),
|
||||
hook = getHook(element, 'get'),
|
||||
value;
|
||||
var empty = !helper.isFalse(element.data('empty'));
|
||||
var trim = !helper.isFalse(element.data('trim'));
|
||||
var split = element.data('split');
|
||||
var hook = getHook(element, 'get');
|
||||
var value;
|
||||
if (hook != null) {
|
||||
return hook.call(Settings, element, trim, empty);
|
||||
}
|
||||
@@ -183,8 +185,8 @@ define('settings', function () {
|
||||
@param value The value to set.
|
||||
*/
|
||||
fillField: function (element, value) {
|
||||
var hook = getHook(element, 'set'),
|
||||
trim = element.data('trim');
|
||||
var hook = getHook(element, 'set');
|
||||
var trim = element.data('trim');
|
||||
trim = trim !== 'false' && +trim !== 0;
|
||||
if (hook != null) {
|
||||
return hook.call(Settings, element, value, trim);
|
||||
@@ -218,9 +220,9 @@ define('settings', function () {
|
||||
initFields: function (wrapper) {
|
||||
$('[data-key]', wrapper).each(function (ignored, field) {
|
||||
field = $(field);
|
||||
var hook = getHook(field, 'init'),
|
||||
keyParts = field.data('key').split('.'),
|
||||
value = Settings.get();
|
||||
var hook = getHook(field, 'init');
|
||||
var keyParts = field.data('key').split('.');
|
||||
var value = Settings.get();
|
||||
if (hook != null) {
|
||||
hook.call(Settings, field);
|
||||
}
|
||||
@@ -408,17 +410,17 @@ define('settings', function () {
|
||||
@param notify Whether to send notification when settings got saved.
|
||||
*/
|
||||
persist: function (hash, wrapper, callback, notify) {
|
||||
var notSaved = [],
|
||||
fields = $('[data-key]', wrapper || 'form').toArray();
|
||||
var notSaved = [];
|
||||
var fields = $('[data-key]', wrapper || 'form').toArray();
|
||||
if (notify == null) {
|
||||
notify = true;
|
||||
}
|
||||
for (var i = 0; i < fields.length; i++) {
|
||||
var field = $(fields[i]),
|
||||
value = helper.readValue(field),
|
||||
parentCfg = Settings.get(),
|
||||
keyParts = field.data('key').split('.'),
|
||||
lastKey = keyParts[keyParts.length - 1];
|
||||
var field = $(fields[i]);
|
||||
var value = helper.readValue(field);
|
||||
var parentCfg = Settings.get();
|
||||
var keyParts = field.data('key').split('.');
|
||||
var lastKey = keyParts[keyParts.length - 1];
|
||||
if (keyParts.length > 1) {
|
||||
for (var j = 0; j < keyParts.length - 1; j++) {
|
||||
var part = keyParts[j];
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
define('settings/array', function () {
|
||||
|
||||
var Settings = null,
|
||||
SettingsArray,
|
||||
helper = null;
|
||||
var Settings = null;
|
||||
var SettingsArray;
|
||||
var helper = null;
|
||||
|
||||
/**
|
||||
Creates a new button that removes itself and the given elements on click.
|
||||
@@ -41,8 +41,8 @@ define('settings/array', function () {
|
||||
*/
|
||||
function addArrayChildElement(field, key, attributes, value, separator, insertCb) {
|
||||
attributes = helper.deepClone(attributes);
|
||||
var type = attributes['data-type'] || attributes.type || 'text',
|
||||
element = $(helper.createElementOfType(type, attributes.tagName, attributes));
|
||||
var type = attributes['data-type'] || attributes.type || 'text';
|
||||
var element = $(helper.createElementOfType(type, attributes.tagName, attributes));
|
||||
element.attr('data-parent', '_' + key);
|
||||
delete attributes['data-type'];
|
||||
delete attributes['tagName'];
|
||||
@@ -72,9 +72,9 @@ define('settings/array', function () {
|
||||
@param separator The separator to forward to {@link addArrayChildElement}.
|
||||
*/
|
||||
function addAddButton(element, key, attributes, separator) {
|
||||
var addSpace = $(document.createTextNode(' ')),
|
||||
newValue = element.data('new') || '',
|
||||
add = $(helper.createElement('button', {
|
||||
var addSpace = $(document.createTextNode(' '));
|
||||
var newValue = element.data('new') || '';
|
||||
var add = $(helper.createElement('button', {
|
||||
"class": 'btn btn-sm btn-primary add',
|
||||
title: 'Expand Array',
|
||||
}, '+'));
|
||||
@@ -98,9 +98,9 @@ define('settings/array', function () {
|
||||
return helper.createElement(tagName || 'div');
|
||||
},
|
||||
set: function (element, value) {
|
||||
var attributes = element.data('attributes'),
|
||||
key = element.data('key') || element.data('parent'),
|
||||
separator = element.data('split') || ', ';
|
||||
var attributes = element.data('attributes');
|
||||
var key = element.data('key') || element.data('parent');
|
||||
var separator = element.data('split') || ', ';
|
||||
separator = (function () {
|
||||
try {
|
||||
return $(separator);
|
||||
@@ -123,13 +123,13 @@ define('settings/array', function () {
|
||||
addAddButton(element, key, attributes, separator);
|
||||
},
|
||||
get: function (element, trim, empty) {
|
||||
var key = element.data('key') || element.data('parent'),
|
||||
children = $("[data-parent=\"_" + key + "\"]", element),
|
||||
values = [];
|
||||
var key = element.data('key') || element.data('parent');
|
||||
var children = $("[data-parent=\"_" + key + "\"]", element);
|
||||
var values = [];
|
||||
children.each(function (i, child) {
|
||||
child = $(child);
|
||||
var val = helper.readValue(child),
|
||||
empty = helper.isTrue(child.data('empty'));
|
||||
var val = helper.readValue(child);
|
||||
var empty = helper.isTrue(child.data('empty'));
|
||||
if (empty || val !== void 0 && (val == null || val.length !== 0)) {
|
||||
return values.push(val);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
define('settings/checkbox', function () {
|
||||
|
||||
var Settings = null,
|
||||
SettingsCheckbox;
|
||||
var Settings = null;
|
||||
var SettingsCheckbox;
|
||||
|
||||
SettingsCheckbox = {
|
||||
types: ['checkbox'],
|
||||
|
||||
@@ -1,11 +1,11 @@
|
||||
define('settings/key', function () {
|
||||
|
||||
var Settings = null,
|
||||
SettingsKey,
|
||||
helper = null,
|
||||
lastKey = null,
|
||||
oldKey = null,
|
||||
keyMap = Object.freeze({
|
||||
var Settings = null;
|
||||
var SettingsKey;
|
||||
var helper = null;
|
||||
var lastKey = null;
|
||||
var oldKey = null;
|
||||
var keyMap = Object.freeze({
|
||||
0: '',
|
||||
8: 'Backspace',
|
||||
9: 'Tab',
|
||||
@@ -42,9 +42,9 @@ define('settings/key', function () {
|
||||
@returns Key | null The Key-Object the focused element should be set to.
|
||||
*/
|
||||
function getKey(event) {
|
||||
var anyModChange = event.ctrlKey !== lastKey.c || event.altKey !== lastKey.a || event.shiftKey !== lastKey.s || event.metaKey !== lastKey.m,
|
||||
modChange = event.ctrlKey + event.altKey + event.shiftKey + event.metaKey - lastKey.c - lastKey.a - lastKey.s - lastKey.m,
|
||||
key = new Key();
|
||||
var anyModChange = event.ctrlKey !== lastKey.c || event.altKey !== lastKey.a || event.shiftKey !== lastKey.s || event.metaKey !== lastKey.m;
|
||||
var modChange = event.ctrlKey + event.altKey + event.shiftKey + event.metaKey - lastKey.c - lastKey.a - lastKey.s - lastKey.m;
|
||||
var key = new Key();
|
||||
key.c = event.ctrlKey;
|
||||
key.a = event.altKey;
|
||||
key.s = event.shiftKey;
|
||||
@@ -128,9 +128,9 @@ define('settings/key', function () {
|
||||
if (str instanceof Key) {
|
||||
return str;
|
||||
}
|
||||
var key = new Key(),
|
||||
sep = /([^CtrlAShifMea#\d]+)(?:#|\d)/.exec(str),
|
||||
parts = sep != null ? str.split(sep[1]) : [str];
|
||||
var key = new Key();
|
||||
var sep = /([^CtrlAShifMea#\d]+)(?:#|\d)/.exec(str);
|
||||
var parts = sep != null ? str.split(sep[1]) : [str];
|
||||
for (var i = 0; i < parts.length; i++) {
|
||||
var part = parts[i];
|
||||
switch (part) {
|
||||
@@ -199,9 +199,9 @@ define('settings/key', function () {
|
||||
element.val(getKeyString(key, true, false, ' + '));
|
||||
},
|
||||
get: function (element, trim, empty) {
|
||||
var key = element.data('keyData'),
|
||||
separator = element.data('split') || element.data('separator') || '+',
|
||||
short = !helper.isFalse(element.data('short'));
|
||||
var key = element.data('keyData');
|
||||
var separator = element.data('split') || element.data('separator') || '+';
|
||||
var short = !helper.isFalse(element.data('short'));
|
||||
if (trim) {
|
||||
if (empty || (key != null && key.char)) {
|
||||
return getKeyString(key, false, short, separator);
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
define('settings/object', function () {
|
||||
|
||||
var Settings = null,
|
||||
SettingsObject,
|
||||
helper = null;
|
||||
var Settings = null;
|
||||
var SettingsObject;
|
||||
var helper = null;
|
||||
|
||||
/**
|
||||
Creates a new child-element of given property with given data and calls given callback with elements to add.
|
||||
@@ -15,9 +15,10 @@ define('settings/object', function () {
|
||||
@param insertCb The callback to insert the elements.
|
||||
*/
|
||||
function addObjectPropertyElement(field, key, attributes, prop, value, separator, insertCb) {
|
||||
var prepend = attributes['data-prepend'],
|
||||
append = attributes['data-append'],
|
||||
type, element;
|
||||
var prepend = attributes['data-prepend'];
|
||||
var append = attributes['data-append'];
|
||||
var type;
|
||||
var element;
|
||||
delete attributes['data-prepend'];
|
||||
delete attributes['data-append'];
|
||||
attributes = helper.deepClone(attributes);
|
||||
@@ -59,10 +60,12 @@ define('settings/object', function () {
|
||||
return helper.createElement(tagName || 'div');
|
||||
},
|
||||
set: function (element, value) {
|
||||
var properties = element.data('attributes') || element.data('properties'),
|
||||
key = element.data('key') || element.data('parent'),
|
||||
separator = element.data('split') || ', ',
|
||||
propertyIndex, propertyName, attributes;
|
||||
var properties = element.data('attributes') || element.data('properties');
|
||||
var key = element.data('key') || element.data('parent');
|
||||
var separator = element.data('split') || ', ';
|
||||
var propertyIndex;
|
||||
var propertyName;
|
||||
var attributes;
|
||||
separator = (function () {
|
||||
try {
|
||||
return $(separator);
|
||||
@@ -91,14 +94,14 @@ define('settings/object', function () {
|
||||
}
|
||||
},
|
||||
get: function (element, trim, empty) {
|
||||
var key = element.data('key') || element.data('parent'),
|
||||
properties = $('[data-parent="_' + key + '"]', element),
|
||||
value = {};
|
||||
var key = element.data('key') || element.data('parent');
|
||||
var properties = $('[data-parent="_' + key + '"]', element);
|
||||
var value = {};
|
||||
properties.each(function (i, property) {
|
||||
property = $(property);
|
||||
var val = helper.readValue(property),
|
||||
prop = property.data('prop'),
|
||||
empty = helper.isTrue(property.data('empty'));
|
||||
var val = helper.readValue(property);
|
||||
var prop = property.data('prop');
|
||||
var empty = helper.isTrue(property.data('empty'));
|
||||
if (empty || val !== void 0 && (val == null || val.length !== 0)) {
|
||||
return value[prop] = val;
|
||||
}
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
define('settings/select', function () {
|
||||
|
||||
var Settings = null,
|
||||
SettingsSelect;
|
||||
var Settings = null;
|
||||
var SettingsSelect;
|
||||
|
||||
function addOptions(element, options) {
|
||||
for (var i = 0; i < options.length; i++) {
|
||||
var optionData = options[i],
|
||||
value = optionData.text || optionData.value;
|
||||
var optionData = options[i];
|
||||
var value = optionData.text || optionData.value;
|
||||
delete optionData.text;
|
||||
element.append($(Settings.helper.createElement('option', optionData)).text(value));
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
define('settings/textarea', function () {
|
||||
|
||||
var Settings = null,
|
||||
SettingsArea;
|
||||
var Settings = null;
|
||||
var SettingsArea;
|
||||
|
||||
SettingsArea = {
|
||||
types: ['textarea'],
|
||||
|
||||
@@ -13,9 +13,9 @@ define('taskbar', function () {
|
||||
$(document.body).append(self.taskbar);
|
||||
|
||||
self.taskbar.on('click', 'li', function () {
|
||||
var $btn = $(this),
|
||||
module = $btn.attr('data-module'),
|
||||
uuid = $btn.attr('data-uuid');
|
||||
var $btn = $(this);
|
||||
var module = $btn.attr('data-module');
|
||||
var uuid = $btn.attr('data-uuid');
|
||||
|
||||
require([module], function (module) {
|
||||
if (!$btn.hasClass('active')) {
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
(function (module) {
|
||||
'use strict';
|
||||
|
||||
var utils, fs, XRegExp;
|
||||
var utils;
|
||||
var fs;
|
||||
var XRegExp;
|
||||
|
||||
if ('undefined' === typeof window) {
|
||||
fs = require('fs');
|
||||
@@ -24,8 +26,8 @@
|
||||
module.exports = utils = {
|
||||
generateUUID: function () {
|
||||
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
|
||||
var r = Math.random() * 16 | 0,
|
||||
v = c === 'x' ? r : (r & 0x3 | 0x8);
|
||||
var r = Math.random() * 16 | 0;
|
||||
var v = c === 'x' ? r : (r & 0x3 | 0x8);
|
||||
return v.toString(16);
|
||||
});
|
||||
},
|
||||
@@ -143,7 +145,9 @@
|
||||
|
||||
// shallow objects merge
|
||||
merge: function () {
|
||||
var result = {}, obj, keys;
|
||||
var result = {};
|
||||
var obj;
|
||||
var keys;
|
||||
for (var i = 0; i < arguments.length; i++) {
|
||||
obj = arguments[i] || {};
|
||||
keys = Object.keys(obj);
|
||||
@@ -268,8 +272,8 @@
|
||||
|
||||
findBootstrapEnvironment: function () {
|
||||
//http://stackoverflow.com/questions/14441456/how-to-detect-which-device-view-youre-on-using-twitter-bootstrap-api
|
||||
var envs = ['xs', 'sm', 'md', 'lg'],
|
||||
$el = $('<div>');
|
||||
var envs = ['xs', 'sm', 'md', 'lg'];
|
||||
var $el = $('<div>');
|
||||
|
||||
$el.appendTo($('body'));
|
||||
|
||||
@@ -292,8 +296,8 @@
|
||||
},
|
||||
|
||||
getHoursArray: function () {
|
||||
var currentHour = new Date().getHours(),
|
||||
labels = [];
|
||||
var currentHour = new Date().getHours();
|
||||
var labels = [];
|
||||
|
||||
for (var i = currentHour, ii = currentHour - 24; i > ii; i--) {
|
||||
var hour = i < 0 ? 24 + i : i;
|
||||
@@ -304,10 +308,10 @@
|
||||
},
|
||||
|
||||
getDaysArray: function (from) {
|
||||
var currentDay = new Date(from || Date.now()).getTime(),
|
||||
months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],
|
||||
labels = [],
|
||||
tmpDate;
|
||||
var currentDay = new Date(from || Date.now()).getTime();
|
||||
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
||||
var labels = [];
|
||||
var tmpDate;
|
||||
|
||||
for(var x = 29; x >= 0; x--) {
|
||||
tmpDate = new Date(currentDay - (1000 * 60 * 60 * 24 * x));
|
||||
@@ -336,7 +340,9 @@
|
||||
|
||||
// get all the url params in a single key/value hash
|
||||
params: function (options) {
|
||||
var a, hash = {}, params;
|
||||
var a;
|
||||
var hash = {};
|
||||
var params;
|
||||
|
||||
options = options || {};
|
||||
options.skipToType = options.skipToType || {};
|
||||
@@ -347,9 +353,9 @@
|
||||
params = (a ? a.search : window.location.search).substring(1).split("&");
|
||||
|
||||
params.forEach(function (param) {
|
||||
var val = param.split('='),
|
||||
key = decodeURI(val[0]),
|
||||
value = options.skipToType[key] ? decodeURI(val[1]) : utils.toType(decodeURI(val[1]));
|
||||
var val = param.split('=');
|
||||
var key = decodeURI(val[0]);
|
||||
var value = options.skipToType[key] ? decodeURI(val[1]) : utils.toType(decodeURI(val[1]));
|
||||
|
||||
if (key) {
|
||||
if (key.substr(-2, 2) === '[]') {
|
||||
@@ -423,8 +429,8 @@
|
||||
}
|
||||
return obj[props];
|
||||
}
|
||||
var prop = props.slice(0, i),
|
||||
newProps = props.slice(i + 1);
|
||||
var prop = props.slice(0, i);
|
||||
var newProps = props.slice(i + 1);
|
||||
|
||||
if(props !== undefined && !(obj[prop] instanceof Object) ) {
|
||||
obj[prop] = {};
|
||||
|
||||
@@ -50,8 +50,8 @@ Analytics.pageView = function (payload) {
|
||||
}
|
||||
|
||||
if (payload.path) {
|
||||
var categoryMatch = payload.path.match(isCategory),
|
||||
cid = categoryMatch ? parseInt(categoryMatch[1], 10) : null;
|
||||
var categoryMatch = payload.path.match(isCategory);
|
||||
var cid = categoryMatch ? parseInt(categoryMatch[1], 10) : null;
|
||||
|
||||
if (cid) {
|
||||
Analytics.increment(['pageviews:byCid:' + cid]);
|
||||
@@ -103,8 +103,8 @@ Analytics.writeData = function (callback) {
|
||||
};
|
||||
|
||||
Analytics.getHourlyStatsForSet = function (set, hour, numHours, callback) {
|
||||
var terms = {},
|
||||
hoursArr = [];
|
||||
var terms = {};
|
||||
var hoursArr = [];
|
||||
|
||||
hour = new Date(hour);
|
||||
hour.setHours(hour.getHours(), 0, 0, 0);
|
||||
|
||||
@@ -57,7 +57,7 @@ exports.processSortedSet = function (setKey, process, options, callback) {
|
||||
});
|
||||
});
|
||||
},
|
||||
callback,
|
||||
callback
|
||||
);
|
||||
};
|
||||
|
||||
@@ -105,6 +105,6 @@ exports.processArray = function (array, process, options, callback) {
|
||||
},
|
||||
function (err) {
|
||||
callback(err);
|
||||
},
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
@@ -293,7 +293,10 @@ var privileges = require('./privileges');
|
||||
* @param parentCid {number} start from 0 to build full tree
|
||||
*/
|
||||
Categories.getTree = function (categories, parentCid) {
|
||||
var tree = [], i = 0, len = categories.length, category;
|
||||
var tree = [];
|
||||
var i = 0;
|
||||
var len = categories.length;
|
||||
var category;
|
||||
|
||||
for (i; i < len; ++i) {
|
||||
category = categories[i];
|
||||
|
||||
@@ -120,7 +120,7 @@ profileController.get = function (req, res, callback) {
|
||||
property: "og:image:url",
|
||||
content: userData.picture,
|
||||
noEscape: true,
|
||||
},
|
||||
}
|
||||
);
|
||||
}
|
||||
userData.selectedGroup = userData.groups.find(function (group) {
|
||||
|
||||
@@ -12,8 +12,8 @@ themesController.get = function (req, res, next) {
|
||||
return next();
|
||||
}
|
||||
|
||||
var themeConfig = require(path.join(themeDir, 'theme.json')),
|
||||
screenshotPath = path.join(themeDir, themeConfig.screenshot);
|
||||
var themeConfig = require(path.join(themeDir, 'theme.json'));
|
||||
var screenshotPath = path.join(themeDir, themeConfig.screenshot);
|
||||
if (themeConfig.screenshot && file.existsSync(screenshotPath)) {
|
||||
res.sendFile(screenshotPath);
|
||||
} else {
|
||||
|
||||
@@ -55,9 +55,9 @@ uploadsController.uploadFavicon = function (req, res, next) {
|
||||
};
|
||||
|
||||
uploadsController.uploadTouchIcon = function (req, res, next) {
|
||||
var uploadedFile = req.files.files[0],
|
||||
allowedTypes = ['image/png'],
|
||||
sizes = [36, 48, 72, 96, 144, 192];
|
||||
var uploadedFile = req.files.files[0];
|
||||
var allowedTypes = ['image/png'];
|
||||
var sizes = [36, 48, 72, 96, 144, 192];
|
||||
|
||||
if (validateUpload(req, res, next, uploadedFile, allowedTypes)) {
|
||||
file.saveFileToLocal('touchicon-orig.png', 'system', uploadedFile.path, function (err, imageObj) {
|
||||
@@ -105,8 +105,8 @@ uploadsController.uploadSound = function (req, res, next) {
|
||||
return next(err);
|
||||
}
|
||||
|
||||
var soundsPath = path.join(__dirname, '../../../build/public/sounds'),
|
||||
filePath = path.join(nconf.get('upload_path'), 'sounds', uploadedFile.name);
|
||||
var soundsPath = path.join(__dirname, '../../../build/public/sounds');
|
||||
var filePath = path.join(nconf.get('upload_path'), 'sounds', uploadedFile.name);
|
||||
|
||||
file.link(filePath, path.join(soundsPath, path.basename(filePath)));
|
||||
|
||||
|
||||
@@ -343,7 +343,8 @@ authenticationController.localLogin = function (req, username, password, next) {
|
||||
}
|
||||
|
||||
var userslug = utils.slugify(username);
|
||||
var uid, userData = {};
|
||||
var uid;
|
||||
var userData = {};
|
||||
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
|
||||
@@ -259,9 +259,9 @@ module.exports = function (db, module) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
var map = helpers.toMap(result),
|
||||
returnData = [],
|
||||
item;
|
||||
var map = helpers.toMap(result);
|
||||
var returnData = [];
|
||||
var item;
|
||||
|
||||
for(var i = 0; i < keys.length; ++i) {
|
||||
item = map[keys[i]];
|
||||
@@ -500,7 +500,7 @@ module.exports = function (db, module) {
|
||||
});
|
||||
});
|
||||
},
|
||||
callback,
|
||||
callback
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
@@ -198,7 +198,8 @@ module.exports = function (redisClient, module) {
|
||||
function sortedSetLex(method, reverse, key, min, max, start, count, callback) {
|
||||
callback = callback || start;
|
||||
|
||||
var minmin, maxmax;
|
||||
var minmin;
|
||||
var maxmax;
|
||||
if (reverse) {
|
||||
minmin = '+';
|
||||
maxmax = '-';
|
||||
|
||||
@@ -20,9 +20,9 @@ var utils = require('../public/src/utils');
|
||||
require('./groups/search')(Groups);
|
||||
require('./groups/cover')(Groups);
|
||||
|
||||
var ephemeralGroups = ['guests'],
|
||||
var ephemeralGroups = ['guests'];
|
||||
|
||||
internals = {
|
||||
var internals = {
|
||||
getEphemeralGroup: function (groupName) {
|
||||
return {
|
||||
name: groupName,
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
'use strict';
|
||||
|
||||
var async = require('async'),
|
||||
db = require('../database'),
|
||||
plugins = require('../plugins');
|
||||
var async = require('async');
|
||||
var db = require('../database');
|
||||
var plugins = require('../plugins');
|
||||
|
||||
module.exports = function (Groups) {
|
||||
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
"use strict";
|
||||
|
||||
var HotSwap = {},
|
||||
winston = require('winston'),
|
||||
stack;
|
||||
var HotSwap = {};
|
||||
var winston = require('winston');
|
||||
var stack;
|
||||
|
||||
HotSwap.prepare = function (app) {
|
||||
stack = app._router.stack;
|
||||
|
||||
14
src/image.js
14
src/image.js
@@ -24,13 +24,13 @@ image.resizeImage = function (data, callback) {
|
||||
return callback(err);
|
||||
}
|
||||
|
||||
var w = image.bitmap.width,
|
||||
h = image.bitmap.height,
|
||||
origRatio = w / h,
|
||||
desiredRatio = data.width && data.height ? data.width / data.height : origRatio,
|
||||
x = 0,
|
||||
y = 0,
|
||||
crop;
|
||||
var w = image.bitmap.width;
|
||||
var h = image.bitmap.height;
|
||||
var origRatio = w / h;
|
||||
var desiredRatio = data.width && data.height ? data.width / data.height : origRatio;
|
||||
var x = 0;
|
||||
var y = 0;
|
||||
var crop;
|
||||
|
||||
if (origRatio !== desiredRatio) {
|
||||
if (desiredRatio > origRatio) {
|
||||
|
||||
@@ -237,8 +237,8 @@ function createAdmin(callback) {
|
||||
description: 'Administrator email address',
|
||||
pattern: /.+@.+/,
|
||||
required: true,
|
||||
}],
|
||||
passwordQuestions = [{
|
||||
}];
|
||||
var passwordQuestions = [{
|
||||
name: 'password',
|
||||
description: 'Password',
|
||||
required: true,
|
||||
@@ -250,8 +250,8 @@ function createAdmin(callback) {
|
||||
required: true,
|
||||
hidden: true,
|
||||
type: 'string',
|
||||
}],
|
||||
success = function (err, results) {
|
||||
}];
|
||||
function success(err, results) {
|
||||
if (err) {
|
||||
return callback(err);
|
||||
}
|
||||
@@ -290,8 +290,8 @@ function createAdmin(callback) {
|
||||
}
|
||||
callback(null, password ? results : undefined);
|
||||
});
|
||||
},
|
||||
retryPassword = function (originalResults) {
|
||||
}
|
||||
function retryPassword(originalResults) {
|
||||
// Ask only the password questions
|
||||
prompt.get(passwordQuestions, function (err, results) {
|
||||
if (!results) {
|
||||
@@ -305,7 +305,7 @@ function createAdmin(callback) {
|
||||
// Send back to success to handle
|
||||
success(err, originalResults);
|
||||
});
|
||||
};
|
||||
}
|
||||
|
||||
// Add the password questions
|
||||
questions = questions.concat(passwordQuestions);
|
||||
@@ -389,16 +389,16 @@ function createMenuItems(next) {
|
||||
if (err || exists) {
|
||||
return next(err);
|
||||
}
|
||||
var navigation = require('./navigation/admin'),
|
||||
data = require('../install/data/navigation.json');
|
||||
var navigation = require('./navigation/admin');
|
||||
var data = require('../install/data/navigation.json');
|
||||
|
||||
navigation.save(data, next);
|
||||
});
|
||||
}
|
||||
|
||||
function createWelcomePost(next) {
|
||||
var db = require('./database'),
|
||||
Topics = require('./topics');
|
||||
var db = require('./database');
|
||||
var Topics = require('./topics');
|
||||
|
||||
async.parallel([
|
||||
function (next) {
|
||||
@@ -412,8 +412,8 @@ function createWelcomePost(next) {
|
||||
return next(err);
|
||||
}
|
||||
|
||||
var content = results[0],
|
||||
numTopics = results[1];
|
||||
var content = results[0];
|
||||
var numTopics = results[1];
|
||||
|
||||
if (!parseInt(numTopics, 10)) {
|
||||
process.stdout.write('Creating welcome post!\n');
|
||||
@@ -442,8 +442,8 @@ function enableDefaultPlugins(next) {
|
||||
'nodebb-plugin-soundpack-default',
|
||||
'nodebb-plugin-emoji-extended',
|
||||
'nodebb-plugin-emoji-one',
|
||||
],
|
||||
customDefaults = nconf.get('defaultPlugins');
|
||||
];
|
||||
var customDefaults = nconf.get('defaultPlugins');
|
||||
|
||||
winston.info('[install/defaultPlugins] customDefaults', customDefaults);
|
||||
|
||||
|
||||
@@ -4,14 +4,14 @@
|
||||
* Logger module: ability to dynamically turn on/off logging for http requests & socket.io events
|
||||
*/
|
||||
|
||||
var fs = require('fs'),
|
||||
path = require('path'),
|
||||
winston = require('winston'),
|
||||
util = require('util'),
|
||||
var fs = require('fs');
|
||||
var path = require('path');
|
||||
var winston = require('winston');
|
||||
var util = require('util');
|
||||
|
||||
file = require('./file'),
|
||||
meta = require('./meta'),
|
||||
morgan = require('morgan');
|
||||
var file = require('./file');
|
||||
var meta = require('./meta');
|
||||
var morgan = require('morgan');
|
||||
|
||||
var opts = {
|
||||
/*
|
||||
|
||||
@@ -78,9 +78,9 @@ Blacklist.validate = function (rules, callback) {
|
||||
var cidr = [];
|
||||
var invalid = [];
|
||||
|
||||
var isCidrSubnet = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/([0-9]|[1-2][0-9]|3[0-2]))$/,
|
||||
inlineCommentMatch = /#.*$/,
|
||||
whitelist = ['127.0.0.1', '::1', '::ffff:0:127.0.0.1'];
|
||||
var isCidrSubnet = /^(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])(\/([0-9]|[1-2][0-9]|3[0-2]))$/;
|
||||
var inlineCommentMatch = /#.*$/;
|
||||
var whitelist = ['127.0.0.1', '::1', '::ffff:0:127.0.0.1'];
|
||||
|
||||
// Filter out blank lines and lines starting with the hash character (comments)
|
||||
// Also trim inputs and remove inline comments
|
||||
|
||||
@@ -90,8 +90,8 @@ module.exports = function (Meta) {
|
||||
};
|
||||
|
||||
function getStyleSource(files, prefix, extension, callback) {
|
||||
var pluginDirectories = [],
|
||||
source = '';
|
||||
var pluginDirectories = [];
|
||||
var source = '';
|
||||
|
||||
files.forEach(function (styleFile) {
|
||||
if (styleFile.endsWith(extension)) {
|
||||
|
||||
@@ -38,7 +38,8 @@ function getTranslationTree(callback) {
|
||||
|
||||
// generate list of languages and namespaces
|
||||
function (plugins, next) {
|
||||
var languages = [], namespaces = [];
|
||||
var languages = [];
|
||||
namespaces = [];
|
||||
|
||||
// pull languages and namespaces from paths
|
||||
function extrude(languageDir, paths) {
|
||||
|
||||
@@ -21,8 +21,9 @@ Templates.compile = function (callback) {
|
||||
|
||||
|
||||
function getBaseTemplates(theme) {
|
||||
var baseTemplatesPaths = [],
|
||||
baseThemePath, baseThemeConfig;
|
||||
var baseTemplatesPaths = [];
|
||||
var baseThemePath;
|
||||
var baseThemeConfig;
|
||||
|
||||
while (theme) {
|
||||
baseThemePath = path.join(nconf.get('themes_path'), theme);
|
||||
@@ -78,9 +79,9 @@ function preparePaths(baseTemplatesPaths, callback) {
|
||||
}, next);
|
||||
},
|
||||
}, function (err, data) {
|
||||
var baseThemes = data.baseThemes,
|
||||
coreTpls = data.coreTpls,
|
||||
paths = {};
|
||||
var baseThemes = data.baseThemes;
|
||||
var coreTpls = data.coreTpls;
|
||||
var paths = {};
|
||||
|
||||
coreTpls.forEach(function (el, i) {
|
||||
paths[coreTpls[i].replace(coreTemplatesPath, '')] = coreTpls[i];
|
||||
@@ -104,9 +105,9 @@ function preparePaths(baseTemplatesPaths, callback) {
|
||||
}
|
||||
|
||||
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');
|
||||
var themeConfig = require(nconf.get('theme_config'));
|
||||
var baseTemplatesPaths = themeConfig.baseTheme ? getBaseTemplates(themeConfig.baseTheme) : [nconf.get('base_templates_path')];
|
||||
var viewsPath = nconf.get('views_dir');
|
||||
|
||||
|
||||
preparePaths(baseTemplatesPaths, function (err, paths) {
|
||||
@@ -115,9 +116,9 @@ function compile(callback) {
|
||||
}
|
||||
|
||||
async.each(Object.keys(paths), function (relativePath, next) {
|
||||
var file = fs.readFileSync(paths[relativePath]).toString(),
|
||||
matches = null,
|
||||
regex = /[ \t]*<!-- IMPORT ([\s\S]*?)? -->[ \t]*/;
|
||||
var file = fs.readFileSync(paths[relativePath]).toString();
|
||||
var matches = null;
|
||||
var regex = /[ \t]*<!-- IMPORT ([\s\S]*?)? -->[ \t]*/;
|
||||
|
||||
while((matches = file.match(regex)) !== null) {
|
||||
var partial = "/" + matches[1];
|
||||
|
||||
@@ -153,8 +153,8 @@ module.exports = function (Meta) {
|
||||
|
||||
Meta.themes.setPath = function (themeObj) {
|
||||
// Theme's templates path
|
||||
var themePath = nconf.get('base_templates_path'),
|
||||
fallback = path.join(nconf.get('themes_path'), themeObj.id, 'templates');
|
||||
var themePath = nconf.get('base_templates_path');
|
||||
var fallback = path.join(nconf.get('themes_path'), themeObj.id, 'templates');
|
||||
|
||||
if (themeObj.templates) {
|
||||
themePath = path.join(nconf.get('themes_path'), themeObj.id, themeObj.templates);
|
||||
|
||||
@@ -184,9 +184,9 @@ middleware.applyBlacklist = function (req, res, next) {
|
||||
};
|
||||
|
||||
middleware.processTimeagoLocales = function (req, res, next) {
|
||||
var fallback = req.path.indexOf('-short') === -1 ? 'jquery.timeago.en.js' : 'jquery.timeago.en-short.js',
|
||||
localPath = path.join(__dirname, '../../public/vendor/jquery/timeago/locales', req.path),
|
||||
exists;
|
||||
var fallback = req.path.indexOf('-short') === -1 ? 'jquery.timeago.en.js' : 'jquery.timeago.en-short.js';
|
||||
var localPath = path.join(__dirname, '../../public/vendor/jquery/timeago/locales', req.path);
|
||||
var exists;
|
||||
|
||||
try {
|
||||
exists = fs.accessSync(localPath, fs.F_OK | fs.R_OK);
|
||||
|
||||
@@ -373,8 +373,8 @@ var utils = require('../public/src/utils');
|
||||
};
|
||||
|
||||
Notifications.prune = function () {
|
||||
var week = 604800000,
|
||||
numPruned = 0;
|
||||
var week = 604800000;
|
||||
var numPruned = 0;
|
||||
|
||||
var cutoffTime = Date.now() - week;
|
||||
|
||||
@@ -416,8 +416,12 @@ var utils = require('../public/src/utils');
|
||||
'notifications:user_posted_to',
|
||||
'notifications:user_flagged_post_in',
|
||||
'new_register',
|
||||
],
|
||||
isolated, differentiators, differentiator, modifyIndex, set;
|
||||
];
|
||||
var isolated;
|
||||
var differentiators;
|
||||
var differentiator;
|
||||
var modifyIndex;
|
||||
var set;
|
||||
|
||||
notifications = mergeIds.reduce(function (notifications, mergeId) {
|
||||
isolated = notifications.filter(function (notifObj) {
|
||||
|
||||
@@ -147,8 +147,8 @@ var middleware;
|
||||
};
|
||||
|
||||
Plugins.getTemplates = function (callback) {
|
||||
var templates = {},
|
||||
tplName;
|
||||
var templates = {};
|
||||
var tplName;
|
||||
|
||||
async.waterfall([
|
||||
async.apply(db.getSortedSetRange, 'plugins:active', 0, -1),
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
'use strict';
|
||||
|
||||
var winston = require('winston'),
|
||||
async = require('async');
|
||||
var winston = require('winston');
|
||||
var async = require('async');
|
||||
|
||||
module.exports = function (Plugins) {
|
||||
Plugins.deprecatedHooks = {
|
||||
@@ -36,7 +36,7 @@ module.exports = function (Plugins) {
|
||||
(Plugins.deprecatedHooks[data.hook] ?
|
||||
'please use `' + Plugins.deprecatedHooks[data.hook] + '` instead.' :
|
||||
'there is no alternative.'
|
||||
),
|
||||
)
|
||||
);
|
||||
} else {
|
||||
// handle hook's startsWith, i.e. action:homepage.get
|
||||
|
||||
@@ -49,7 +49,9 @@ module.exports = function (Posts) {
|
||||
|
||||
Posts.relativeToAbsolute = function (content) {
|
||||
// Turns relative links in post body to absolute urls
|
||||
var parsed, current, absolute;
|
||||
var parsed;
|
||||
var current;
|
||||
var absolute;
|
||||
|
||||
while ((current = urlRegex.exec(content)) !== null) {
|
||||
if (current[1]) {
|
||||
@@ -76,8 +78,8 @@ module.exports = function (Posts) {
|
||||
};
|
||||
|
||||
function sanitizeSignature(signature) {
|
||||
var string = S(signature),
|
||||
tagsToStrip = [];
|
||||
var string = S(signature);
|
||||
var tagsToStrip = [];
|
||||
|
||||
if (parseInt(meta.config['signatures:disableLinks'], 10) === 1) {
|
||||
tagsToStrip.push('a');
|
||||
|
||||
@@ -158,9 +158,9 @@ module.exports = function (Posts) {
|
||||
return callback(new Error('[[error:not-enough-reputation-to-downvote]]'));
|
||||
}
|
||||
|
||||
var voteStatus = results.voteStatus,
|
||||
hook,
|
||||
current = voteStatus.upvoted ? 'upvote' : 'downvote';
|
||||
var voteStatus = results.voteStatus;
|
||||
var hook;
|
||||
var current = voteStatus.upvoted ? 'upvote' : 'downvote';
|
||||
|
||||
if (voteStatus.upvoted && command === 'downvote' || voteStatus.downvoted && command === 'upvote') { // e.g. User *has* upvoted, and clicks downvote
|
||||
hook = command;
|
||||
|
||||
@@ -31,7 +31,8 @@ function isUserAllowedToCids(privilege, uid, cids, callback) {
|
||||
return isGuestAllowedToCids(privilege, cids, callback);
|
||||
}
|
||||
|
||||
var userKeys = [], groupKeys = [];
|
||||
var userKeys = [];
|
||||
var groupKeys = [];
|
||||
for (var i = 0; i < cids.length; ++i) {
|
||||
userKeys.push('cid:' + cids[i] + ':privileges:' + privilege);
|
||||
groupKeys.push('cid:' + cids[i] + ':privileges:groups:' + privilege);
|
||||
@@ -63,7 +64,8 @@ function isUserAllowedToPrivileges(privileges, uid, cid, callback) {
|
||||
return isGuestAllowedToPrivileges(privileges, cid, callback);
|
||||
}
|
||||
|
||||
var userKeys = [], groupKeys = [];
|
||||
var userKeys = [];
|
||||
var groupKeys = [];
|
||||
for (var i = 0; i < privileges.length; ++i) {
|
||||
userKeys.push('cid:' + cid + ':privileges:' + privileges[i]);
|
||||
groupKeys.push('cid:' + cid + ':privileges:groups:' + privileges[i]);
|
||||
|
||||
@@ -74,8 +74,8 @@ module.exports = function (privileges) {
|
||||
|
||||
var isMembers = checks.user.map(function (isMember, idx) {
|
||||
return isMember || checks.group[idx];
|
||||
}),
|
||||
map = {};
|
||||
});
|
||||
var map = {};
|
||||
|
||||
uniqueCids.forEach(function (cid, index) {
|
||||
map[cid] = isMembers[index];
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
var nconf = require('nconf'),
|
||||
util = require('util'),
|
||||
winston = require('winston'),
|
||||
EventEmitter = require('events').EventEmitter;
|
||||
var nconf = require('nconf');
|
||||
var util = require('util');
|
||||
var winston = require('winston');
|
||||
var EventEmitter = require('events').EventEmitter;
|
||||
|
||||
var channelName;
|
||||
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
(function (Auth) {
|
||||
"use strict";
|
||||
|
||||
var passport = require('passport'),
|
||||
passportLocal = require('passport-local').Strategy,
|
||||
nconf = require('nconf'),
|
||||
winston = require('winston'),
|
||||
express = require('express'),
|
||||
var passport = require('passport');
|
||||
var passportLocal = require('passport-local').Strategy;
|
||||
var nconf = require('nconf');
|
||||
var winston = require('winston');
|
||||
var express = require('express');
|
||||
|
||||
controllers = require('../controllers'),
|
||||
plugins = require('../plugins'),
|
||||
hotswap = require('../hotswap'),
|
||||
var controllers = require('../controllers');
|
||||
var plugins = require('../plugins');
|
||||
var hotswap = require('../hotswap');
|
||||
|
||||
loginStrategies = [];
|
||||
var loginStrategies = [];
|
||||
|
||||
Auth.initialize = function (app, middleware) {
|
||||
app.use(passport.initialize());
|
||||
|
||||
@@ -3,7 +3,11 @@
|
||||
var meta = require('./meta');
|
||||
|
||||
function expandObjBy(obj1, obj2) {
|
||||
var key, val1, val2, xorValIsArray, changed = false;
|
||||
var key;
|
||||
var val1;
|
||||
var val2;
|
||||
var xorValIsArray;
|
||||
var changed = false;
|
||||
for (key in obj2) {
|
||||
if (obj2.hasOwnProperty(key)) {
|
||||
val2 = obj2[key];
|
||||
@@ -23,7 +27,8 @@ function expandObjBy(obj1, obj2) {
|
||||
}
|
||||
|
||||
function trim(obj1, obj2) {
|
||||
var key, val1;
|
||||
var key;
|
||||
var val1;
|
||||
for (key in obj1) {
|
||||
if (obj1.hasOwnProperty(key)) {
|
||||
val1 = obj1[key];
|
||||
@@ -106,8 +111,8 @@ Settings.prototype.sync = function (callback) {
|
||||
@param callback Gets called when done.
|
||||
*/
|
||||
Settings.prototype.persist = function (callback) {
|
||||
var conf = this.cfg._,
|
||||
_this = this;
|
||||
var conf = this.cfg._;
|
||||
var _this = this;
|
||||
if (typeof conf === 'object') {
|
||||
conf = JSON.stringify(conf);
|
||||
}
|
||||
@@ -126,9 +131,9 @@ Settings.prototype.persist = function (callback) {
|
||||
@returns Object The setting to be used.
|
||||
*/
|
||||
Settings.prototype.get = function (key, def) {
|
||||
var obj = this.cfg._,
|
||||
parts = (key || '').split('.'),
|
||||
part;
|
||||
var obj = this.cfg._;
|
||||
var parts = (key || '').split('.');
|
||||
var part;
|
||||
for (var i = 0; i < parts.length; i++) {
|
||||
part = parts[i];
|
||||
if (part && obj != null) {
|
||||
@@ -183,7 +188,9 @@ Settings.prototype.createDefaultWrapper = function () {
|
||||
@param val The value to set.
|
||||
*/
|
||||
Settings.prototype.set = function (key, val) {
|
||||
var part, obj, parts;
|
||||
var part;
|
||||
var obj;
|
||||
var parts;
|
||||
this.cfg.v = this.version;
|
||||
if (val == null || !key) {
|
||||
this.cfg._ = val || key;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
"use strict";
|
||||
|
||||
var navigationAdmin = require('../../navigation/admin'),
|
||||
SocketNavigation = {};
|
||||
var navigationAdmin = require('../../navigation/admin');
|
||||
var SocketNavigation = {};
|
||||
|
||||
SocketNavigation.save = function (socket, data, callback) {
|
||||
navigationAdmin.save(data, callback);
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
"use strict";
|
||||
|
||||
var social = require('../../social'),
|
||||
SocketSocial = {};
|
||||
var social = require('../../social');
|
||||
var SocketSocial = {};
|
||||
|
||||
SocketSocial.savePostSharingNetworks = function (socket, data, callback) {
|
||||
social.setActivePostSharingNetworks(data, callback);
|
||||
|
||||
@@ -89,7 +89,9 @@ var social = require('./social');
|
||||
return callback(null, []);
|
||||
}
|
||||
|
||||
var uids, cids, topics;
|
||||
var uids;
|
||||
var cids;
|
||||
var topics;
|
||||
|
||||
async.waterfall([
|
||||
function (next) {
|
||||
|
||||
@@ -70,7 +70,8 @@ module.exports = function (Topics) {
|
||||
postData = postData.filter(function (post) {
|
||||
return post && parseInt(post.deleted, 10) !== 1;
|
||||
});
|
||||
var pidsToAdd = [], scores = [];
|
||||
var pidsToAdd = [];
|
||||
var scores = [];
|
||||
postData.forEach(function (post) {
|
||||
pidsToAdd.push(post.pid);
|
||||
scores.push(post.timestamp);
|
||||
|
||||
@@ -263,7 +263,7 @@ module.exports = function (Topics) {
|
||||
},
|
||||
function (err) {
|
||||
callback(err, latestPid);
|
||||
},
|
||||
}
|
||||
);
|
||||
};
|
||||
|
||||
|
||||
@@ -78,8 +78,8 @@ module.exports = function (User) {
|
||||
});
|
||||
|
||||
// Revoke any sessions that have expired, return filtered list
|
||||
var expiredSids = [],
|
||||
expired;
|
||||
var expiredSids = [];
|
||||
var expired;
|
||||
|
||||
sessions = sessions.filter(function (sessionObj, idx) {
|
||||
expired = !sessionObj || !sessionObj.hasOwnProperty('passport') ||
|
||||
|
||||
@@ -11,7 +11,9 @@ var topics = require('../topics');
|
||||
module.exports = function (User) {
|
||||
User.getLatestBanInfo = function (uid, callback) {
|
||||
// Simply retrieves the last record of the user's ban, even if they've been unbanned since then.
|
||||
var timestamp, expiry, reason;
|
||||
var timestamp;
|
||||
var expiry;
|
||||
var reason;
|
||||
|
||||
async.waterfall([
|
||||
async.apply(db.getSortedSetRevRangeWithScores, 'uid:' + uid + ':bans', 0, 0),
|
||||
|
||||
@@ -126,7 +126,8 @@ module.exports = function (User) {
|
||||
|
||||
User.updateCoverPicture = function (data, callback) {
|
||||
var keepAllVersions = parseInt(meta.config['profile:keepAllUserImages'], 10) === 1;
|
||||
var url, md5sum;
|
||||
var url;
|
||||
var md5sum;
|
||||
|
||||
if (!data.imageData && data.position) {
|
||||
return User.updateCoverPosition(data.uid, data.position, callback);
|
||||
@@ -224,7 +225,8 @@ module.exports = function (User) {
|
||||
|
||||
User.uploadCroppedPicture = function (data, callback) {
|
||||
var keepAllVersions = parseInt(meta.config['profile:keepAllUserImages'], 10) === 1;
|
||||
var url, md5sum;
|
||||
var url;
|
||||
var md5sum;
|
||||
|
||||
if (!data.imageData) {
|
||||
return callback(new Error('[[error:invalid-data]]'));
|
||||
|
||||
@@ -1,16 +1,16 @@
|
||||
'use strict';
|
||||
|
||||
var async = require('async'),
|
||||
nconf = require('nconf'),
|
||||
winston = require('winston'),
|
||||
var async = require('async');
|
||||
var nconf = require('nconf');
|
||||
var winston = require('winston');
|
||||
|
||||
user = require('../user'),
|
||||
utils = require('../../public/src/utils'),
|
||||
translator = require('../../public/src/modules/translator'),
|
||||
var user = require('../user');
|
||||
var utils = require('../../public/src/utils');
|
||||
var translator = require('../../public/src/modules/translator');
|
||||
|
||||
db = require('../database'),
|
||||
meta = require('../meta'),
|
||||
emailer = require('../emailer');
|
||||
var db = require('../database');
|
||||
var meta = require('../meta');
|
||||
var emailer = require('../emailer');
|
||||
|
||||
(function (UserReset) {
|
||||
var twoHours = 7200000;
|
||||
|
||||
@@ -48,8 +48,9 @@ admin.get = function (callback) {
|
||||
w.content += widgetData.adminTemplate;
|
||||
});
|
||||
|
||||
var templates = [],
|
||||
list = {}, index = 0;
|
||||
var templates = [];
|
||||
var list = {};
|
||||
var index = 0;
|
||||
|
||||
widgetData.areas.forEach(function (area) {
|
||||
if (typeof list[area.template] === 'undefined') {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
'use strict';
|
||||
/*global require, after, before*/
|
||||
|
||||
var async = require('async'),
|
||||
assert = require('assert'),
|
||||
db = require('../mocks/databasemock');
|
||||
var async = require('async');
|
||||
var assert = require('assert');
|
||||
var db = require('../mocks/databasemock');
|
||||
|
||||
describe('Hash methods', function () {
|
||||
var testData = {
|
||||
|
||||
@@ -1,9 +1,9 @@
|
||||
'use strict';
|
||||
/*global require, after*/
|
||||
|
||||
var async = require('async'),
|
||||
assert = require('assert'),
|
||||
db = require('../mocks/databasemock');
|
||||
var async = require('async');
|
||||
var assert = require('assert');
|
||||
var db = require('../mocks/databasemock');
|
||||
|
||||
describe('Key methods', function () {
|
||||
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user