' +
+ const html = '
' +
'
' + data.onlineRegisteredCount + '' +
'
[[admin/dashboard:active-users.users]]
' +
'
' +
@@ -86,38 +86,38 @@ define('admin/dashboard', ['Chart', 'translator', 'benchpress', 'bootbox'], func
$('#active-users').translateHtml(html);
};
- var graphs = {
+ const graphs = {
traffic: null,
registered: null,
presence: null,
topics: null,
};
- var topicColors = ['#bf616a', '#5B90BF', '#d08770', '#ebcb8b', '#a3be8c', '#96b5b4', '#8fa1b3', '#b48ead', '#ab7967', '#46BFBD'];
+ const topicColors = ['#bf616a', '#5B90BF', '#d08770', '#ebcb8b', '#a3be8c', '#96b5b4', '#8fa1b3', '#b48ead', '#ab7967', '#46BFBD'];
/* eslint-disable */
// from chartjs.org
function lighten(col, amt) {
- var usePound = false;
+ let usePound = false;
if (col[0] === '#') {
col = col.slice(1);
usePound = true;
}
- var num = parseInt(col, 16);
+ const num = parseInt(col, 16);
- var r = (num >> 16) + amt;
+ let r = (num >> 16) + amt;
if (r > 255) r = 255;
else if (r < 0) r = 0;
- var b = ((num >> 8) & 0x00FF) + amt;
+ let b = ((num >> 8) & 0x00FF) + amt;
if (b > 255) b = 255;
else if (b < 0) b = 0;
- var g = (num & 0x0000FF) + amt;
+ let g = (num & 0x0000FF) + amt;
if (g > 255) g = 255;
else if (g < 0) g = 0;
@@ -128,21 +128,21 @@ define('admin/dashboard', ['Chart', 'translator', 'benchpress', 'bootbox'], func
function setupGraphs(callback) {
callback = callback || function () {};
- 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();
+ const trafficCanvas = document.getElementById('analytics-traffic');
+ const registeredCanvas = document.getElementById('analytics-registered');
+ const presenceCanvas = document.getElementById('analytics-presence');
+ const topicsCanvas = document.getElementById('analytics-topics');
+ const trafficCtx = trafficCanvas.getContext('2d');
+ const registeredCtx = registeredCanvas.getContext('2d');
+ const presenceCtx = presenceCanvas.getContext('2d');
+ const topicsCtx = topicsCanvas.getContext('2d');
+ const trafficLabels = utils.getHoursArray();
if (isMobile) {
Chart.defaults.global.tooltips.enabled = false;
}
- var t = translator.Translator.create();
+ const t = translator.Translator.create();
Promise.all([
t.translateKey('admin/dashboard:graphs.page-views', []),
t.translateKey('admin/dashboard:graphs.page-views-registered', []),
@@ -157,7 +157,7 @@ define('admin/dashboard', ['Chart', 'translator', 'benchpress', 'bootbox'], func
t.translateKey('admin/dashboard:recent', []),
t.translateKey('admin/dashboard:unread', []),
]).then(function (translations) {
- var data = {
+ const data = {
labels: trafficLabels,
datasets: [
{
@@ -323,8 +323,8 @@ define('admin/dashboard', ['Chart', 'translator', 'benchpress', 'bootbox'], func
adjustPieCharts();
$('[data-action="updateGraph"]:not([data-units="custom"])').on('click', function () {
- var until = new Date();
- var amount = $(this).attr('data-amount');
+ let until = new Date();
+ const amount = $(this).attr('data-amount');
if ($(this).attr('data-units') === 'days') {
until.setHours(0, 0, 0, 0);
}
@@ -339,10 +339,10 @@ define('admin/dashboard', ['Chart', 'translator', 'benchpress', 'bootbox'], func
});
$('[data-action="updateGraph"][data-units="custom"]').on('click', function () {
- var targetEl = $(this);
+ const targetEl = $(this);
Benchpress.render('admin/partials/pageviews-range-select', {}).then(function (html) {
- var modal = bootbox.dialog({
+ const modal = bootbox.dialog({
title: '[[admin/dashboard:page-views-custom]]',
message: html,
buttons: {
@@ -353,10 +353,10 @@ define('admin/dashboard', ['Chart', 'translator', 'benchpress', 'bootbox'], func
},
},
}).on('shown.bs.modal', function () {
- var date = new Date();
- var today = date.toISOString().substr(0, 10);
+ const date = new Date();
+ const today = date.toISOString().substr(0, 10);
date.setDate(date.getDate() - 1);
- var yesterday = date.toISOString().substr(0, 10);
+ const yesterday = date.toISOString().substr(0, 10);
modal.find('#startRange').val(targetEl.attr('data-startRange') || yesterday);
modal.find('#endRange').val(targetEl.attr('data-endRange') || today);
@@ -364,8 +364,8 @@ define('admin/dashboard', ['Chart', 'translator', 'benchpress', 'bootbox'], func
function submit() {
// NEED TO ADD VALIDATION HERE FOR YYYY-MM-DD
- var formData = modal.find('form').serializeObject();
- var validRegexp = /\d{4}-\d{2}-\d{2}/;
+ const formData = modal.find('form').serializeObject();
+ const validRegexp = /\d{4}-\d{2}-\d{2}/;
// Input validation
if (!formData.startRange && !formData.endRange) {
@@ -378,10 +378,10 @@ define('admin/dashboard', ['Chart', 'translator', 'benchpress', 'bootbox'], func
return false;
}
- var until = new Date(formData.endRange);
+ let until = new Date(formData.endRange);
until.setDate(until.getDate() + 1);
until = until.getTime();
- var amount = (until - new Date(formData.startRange).getTime()) / (1000 * 60 * 60 * 24);
+ const amount = (until - new Date(formData.startRange).getTime()) / (1000 * 60 * 60 * 24);
updateTrafficGraph('days', until, amount);
@@ -401,7 +401,7 @@ define('admin/dashboard', ['Chart', 'translator', 'benchpress', 'bootbox'], func
function adjustPieCharts() {
$('.pie-chart.legend-up').each(function () {
- var $this = $(this);
+ const $this = $(this);
if ($this.width() < 320) {
$this.addClass('compact');
@@ -459,8 +459,8 @@ define('admin/dashboard', ['Chart', 'translator', 'benchpress', 'bootbox'], func
currentGraph.amount = amount;
// Update the View as JSON button url
- var apiEl = $('#view-as-json');
- var newHref = $.param({
+ const apiEl = $('#view-as-json');
+ const newHref = $.param({
units: units || 'hours',
until: until,
count: amount,
@@ -517,10 +517,10 @@ define('admin/dashboard', ['Chart', 'translator', 'benchpress', 'bootbox'], func
});
function buildTopicsLegend() {
- var html = '';
+ let html = '';
topics.forEach(function (t, i) {
- var link = t.tid ? '
' + t.title + '' : t.title;
- var label = t.count === '0' ? t.title : link;
+ const link = t.tid ? '
' + t.title + '' : t.title;
+ const label = t.count === '0' ? t.title : link;
html += '
' +
'' +
@@ -536,7 +536,7 @@ define('admin/dashboard', ['Chart', 'translator', 'benchpress', 'bootbox'], func
function setupRealtimeButton() {
$('#toggle-realtime .fa').on('click', function () {
- var $this = $(this);
+ const $this = $(this);
if ($this.hasClass('fa-toggle-on')) {
$this.removeClass('fa-toggle-on').addClass('fa-toggle-off');
$this.parent().find('strong').html('OFF');
@@ -565,11 +565,11 @@ define('admin/dashboard', ['Chart', 'translator', 'benchpress', 'bootbox'], func
}
function setupFullscreen() {
- var container = document.getElementById('analytics-panel');
- var $container = $(container);
- var btn = $container.find('.fa-expand');
- var fsMethod;
- var exitMethod;
+ const container = document.getElementById('analytics-panel');
+ const $container = $(container);
+ const btn = $container.find('.fa-expand');
+ let fsMethod;
+ let exitMethod;
if (container.requestFullscreen) {
fsMethod = 'requestFullscreen';
diff --git a/public/src/admin/extend/plugins.js b/public/src/admin/extend/plugins.js
index a81de5cb7a..36ff1fdb1d 100644
--- a/public/src/admin/extend/plugins.js
+++ b/public/src/admin/extend/plugins.js
@@ -7,11 +7,11 @@ define('admin/extend/plugins', [
'bootbox',
'jquery-ui/widgets/sortable',
], function (translator, Benchpress, bootbox) {
- var Plugins = {};
+ const Plugins = {};
Plugins.init = function () {
- var pluginsList = $('.plugins');
- var numPlugins = pluginsList[0].querySelectorAll('li').length;
- var pluginID;
+ const pluginsList = $('.plugins');
+ const numPlugins = pluginsList[0].querySelectorAll('li').length;
+ let pluginID;
if (!numPlugins) {
translator.translate('[[admin/extend/plugins:none-found]]
', function (html) {
@@ -24,11 +24,11 @@ define('admin/extend/plugins', [
searchInputEl.value = '';
pluginsList.on('click', 'button[data-action="toggleActive"]', function () {
- var pluginEl = $(this).parents('li');
+ const pluginEl = $(this).parents('li');
pluginID = pluginEl.attr('data-plugin-id');
- var btn = $('[id="' + pluginID + '"] [data-action="toggleActive"]');
+ const btn = $('[id="' + pluginID + '"] [data-action="toggleActive"]');
- var pluginData = ajaxify.data.installed[pluginEl.attr('data-plugin-index')];
+ const pluginData = ajaxify.data.installed[pluginEl.attr('data-plugin-index')];
function toggleActivate() {
socket.emit('admin.plugins.toggleActive', pluginID, function (err, status) {
@@ -94,7 +94,7 @@ define('admin/extend/plugins', [
});
pluginsList.on('click', 'button[data-action="toggleInstall"]', function () {
- var btn = $(this);
+ const btn = $(this);
btn.attr('disabled', true);
pluginID = $(this).parents('li').attr('data-plugin-id');
@@ -131,8 +131,8 @@ define('admin/extend/plugins', [
});
pluginsList.on('click', 'button[data-action="upgrade"]', function () {
- var btn = $(this);
- var parent = btn.parents('li');
+ const btn = $(this);
+ const parent = btn.parents('li');
pluginID = parent.attr('data-plugin-id');
Plugins.suggest(pluginID, function (err, payload) {
@@ -141,7 +141,7 @@ define('admin/extend/plugins', [
}
require(['compare-versions'], function (compareVersions) {
- var currentVersion = parent.find('.currentVersion').text();
+ const currentVersion = parent.find('.currentVersion').text();
if (payload.version !== 'latest' && compareVersions.compare(payload.version, currentVersion, '>')) {
upgrade(pluginID, btn, payload.version);
} else if (payload.version === 'latest') {
@@ -156,9 +156,9 @@ define('admin/extend/plugins', [
});
$(searchInputEl).on('input propertychange', function () {
- var term = $(this).val();
+ const term = $(this).val();
$('.plugins li').each(function () {
- var pluginId = $(this).attr('data-plugin-id');
+ const pluginId = $(this).attr('data-plugin-id');
$(this).toggleClass('hide', pluginId && pluginId.indexOf(term) === -1);
});
});
@@ -179,7 +179,7 @@ define('admin/extend/plugins', [
if (err) {
return app.alertError(err);
}
- var html = '';
+ let html = '';
activePlugins.forEach(function (plugin) {
html += '
' + plugin + '';
});
@@ -189,24 +189,24 @@ define('admin/extend/plugins', [
});
return;
}
- var list = $('#order-active-plugins-modal .plugin-list');
+ const list = $('#order-active-plugins-modal .plugin-list');
list.html(html).sortable();
list.find('.fa-chevron-up').on('click', function () {
- var item = $(this).parents('li');
+ const item = $(this).parents('li');
item.prev().before(item);
});
list.find('.fa-chevron-down').on('click', function () {
- var item = $(this).parents('li');
+ const item = $(this).parents('li');
item.next().after(item);
});
});
});
$('#save-plugin-order').on('click', function () {
- var plugins = $('#order-active-plugins-modal .plugin-list').children();
- var data = [];
+ const plugins = $('#order-active-plugins-modal .plugin-list').children();
+ const data = [];
plugins.each(function (index, el) {
data.push({ name: $(el).text(), order: index });
});
@@ -252,7 +252,7 @@ define('admin/extend/plugins', [
if (err) {
return app.alertError(err.message);
}
- var parent = btn.parents('li');
+ const parent = btn.parents('li');
parent.find('.fa-exclamation-triangle').remove();
parent.find('.currentVersion').text(version);
btn.remove();
@@ -274,7 +274,7 @@ define('admin/extend/plugins', [
}
Plugins.toggleInstall = function (pluginID, version, callback) {
- var btn = $('li[data-plugin-id="' + pluginID + '"] button[data-action="toggleInstall"]');
+ const btn = $('li[data-plugin-id="' + pluginID + '"] button[data-action="toggleInstall"]');
btn.find('i').attr('class', 'fa fa-refresh fa-spin');
socket.emit('admin.plugins.toggleInstall', {
@@ -303,7 +303,7 @@ define('admin/extend/plugins', [
};
Plugins.suggest = function (pluginId, callback) {
- var nbbVersion = app.config.version.match(/^\d+\.\d+\.\d+/);
+ const nbbVersion = app.config.version.match(/^\d+\.\d+\.\d+/);
$.ajax((app.config.registry || 'https://packages.nodebb.org') + '/api/v1/suggest', {
type: 'GET',
data: {
diff --git a/public/src/admin/extend/rewards.js b/public/src/admin/extend/rewards.js
index 93f6227ccd..2a07c4601f 100644
--- a/public/src/admin/extend/rewards.js
+++ b/public/src/admin/extend/rewards.js
@@ -2,13 +2,13 @@
define('admin/extend/rewards', [], function () {
- var rewards = {};
+ const rewards = {};
- var available;
- var active;
- var conditions;
- var conditionals;
+ let available;
+ let active;
+ let conditions;
+ let conditionals;
rewards.init = function () {
available = ajaxify.data.rewards;
@@ -25,8 +25,8 @@ define('admin/extend/rewards', [], function () {
update($(this));
})
.on('click', '.delete', function () {
- var parent = $(this).parents('[data-id]');
- var id = parent.attr('data-id');
+ const parent = $(this).parents('[data-id]');
+ const id = parent.attr('data-id');
socket.emit('admin.rewards.delete', { id: id }, function (err) {
if (err) {
@@ -40,8 +40,8 @@ define('admin/extend/rewards', [], function () {
return false;
})
.on('click', '.toggle', function () {
- var btn = $(this);
- var disabled = btn.hasClass('btn-success');
+ const btn = $(this);
+ const disabled = btn.hasClass('btn-success');
btn.toggleClass('btn-warning').toggleClass('btn-success').translateHtml('[[admin/extend/rewards:' + (disabled ? 'disable' : 'enable') + ']]');
// send disable api call
return false;
@@ -72,12 +72,12 @@ define('admin/extend/rewards', [], function () {
}
function selectReward(el) {
- var parent = el.parents('[data-rid]');
- var div = parent.find('.inputs');
- var inputs;
- var html = '';
+ const parent = el.parents('[data-rid]');
+ const div = parent.find('.inputs');
+ let inputs;
+ let html = '';
- for (var reward in available) {
+ for (const reward in available) {
if (available.hasOwnProperty(reward)) {
if (available[reward].rid === el.attr('data-selected')) {
inputs = available[reward].inputs;
@@ -112,10 +112,10 @@ define('admin/extend/rewards', [], function () {
function populateInputs() {
$('[data-rid]').each(function (i) {
- var div = $(this).find('.inputs');
- var rewards = active[i].rewards;
+ const div = $(this).find('.inputs');
+ const rewards = active[i].rewards;
- for (var reward in rewards) {
+ for (const reward in rewards) {
if (rewards.hasOwnProperty(reward)) {
div.find('[name="' + reward + '"]').val(rewards[reward]);
}
@@ -124,9 +124,9 @@ define('admin/extend/rewards', [], function () {
}
function newReward() {
- var ul = $('#active');
+ const ul = $('#active');
- var data = {
+ const data = {
active: [{
disabled: true,
value: '',
@@ -146,12 +146,12 @@ define('admin/extend/rewards', [], function () {
}
function saveRewards() {
- var activeRewards = [];
+ const activeRewards = [];
$('#active li').each(function () {
- var data = { rewards: {} };
- var main = $(this).find('form.main').serializeArray();
- var rewards = $(this).find('form.rewards').serializeArray();
+ const data = { rewards: {} };
+ const main = $(this).find('form.main').serializeArray();
+ const rewards = $(this).find('form.rewards').serializeArray();
main.forEach(function (obj) {
data[obj.name] = obj.value;
diff --git a/public/src/admin/extend/widgets.js b/public/src/admin/extend/widgets.js
index 31e051a09c..aad32fe7e1 100644
--- a/public/src/admin/extend/widgets.js
+++ b/public/src/admin/extend/widgets.js
@@ -8,13 +8,13 @@ define('admin/extend/widgets', [
'jquery-ui/widgets/droppable',
'jquery-ui/widgets/datepicker',
], function (bootbox) {
- var Widgets = {};
+ const Widgets = {};
Widgets.init = function () {
$('#widgets .nav-pills .dropdown-menu a').on('click', function (ev) {
- var $this = $(this);
+ const $this = $(this);
$('#widgets .tab-pane').removeClass('active');
- var templateName = $this.attr('data-template');
+ const templateName = $this.attr('data-template');
$('#widgets .tab-pane[data-template="' + templateName + '"]').addClass('active');
$('#widgets .selected-template').text(templateName);
$('#widgets .nav-pills .dropdown').trigger('click');
@@ -47,7 +47,7 @@ define('admin/extend/widgets', [
$('#widgets .available-containers .containers > [data-container-html]')
.draggable({
helper: function (e) {
- var target = $(e.target);
+ let target = $(e.target);
target = target.attr('data-container-html') ? target : target.parents('[data-container-html]');
return target.clone().addClass('block').width(target.width()).css('opacity', '0.5');
@@ -65,7 +65,7 @@ define('admin/extend/widgets', [
},
connectWith: 'div',
}).on('click', '.delete-widget', function () {
- var panel = $(this).parents('.widget-panel');
+ const panel = $(this).parents('.widget-panel');
bootbox.confirm('[[admin/extend/widgets:alert.confirm-delete]]', function (confirm) {
if (confirm) {
@@ -81,20 +81,20 @@ define('admin/extend/widgets', [
$('#save').on('click', saveWidgets);
function saveWidgets() {
- var saveData = [];
+ const saveData = [];
$('#widgets [data-template][data-location]').each(function (i, el) {
el = $(el);
- var template = el.attr('data-template');
- var location = el.attr('data-location');
- var area = el.children('.widget-area');
- var widgets = [];
+ const template = el.attr('data-template');
+ const location = el.attr('data-location');
+ const area = el.children('.widget-area');
+ const widgets = [];
area.find('.widget-panel[data-widget]').each(function () {
- var widgetData = {};
- var data = $(this).find('form').serializeArray();
+ const widgetData = {};
+ const data = $(this).find('form').serializeArray();
- for (var d in data) {
+ for (const d in data) {
if (data.hasOwnProperty(d)) {
if (data[d].name) {
if (widgetData[data[d].name]) {
@@ -140,10 +140,10 @@ define('admin/extend/widgets', [
}
$('.color-selector').on('click', '.btn', function () {
- var btn = $(this);
- var selector = btn.parents('.color-selector');
- var container = selector.parents('[data-container-html]');
- var classList = [];
+ const btn = $(this);
+ const selector = btn.parents('.color-selector');
+ const container = selector.parents('[data-container-html]');
+ const classList = [];
selector.children().each(function () {
classList.push($(this).attr('data-class'));
@@ -159,7 +159,7 @@ define('admin/extend/widgets', [
}
function createDatePicker(el) {
- var currentYear = new Date().getFullYear();
+ const currentYear = new Date().getFullYear();
el.find('.date-selector').datepicker({
changeMonth: true,
changeYear: true,
@@ -173,7 +173,7 @@ define('admin/extend/widgets', [
.droppable({
accept: '[data-container-html]',
drop: function (event, ui) {
- var el = $(this);
+ const el = $(this);
el.find('.panel-body .container-html').val(ui.draggable.attr('data-container-html'));
el.find('.panel-body').removeClass('hidden');
@@ -190,13 +190,13 @@ define('admin/extend/widgets', [
function loadWidgetData() {
function populateWidget(widget, data) {
if (data.title) {
- var title = widget.find('.panel-heading strong');
+ const title = widget.find('.panel-heading strong');
title.text(title.text() + ' - ' + data.title);
}
widget.find('input, textarea, select').each(function () {
- var input = $(this);
- var value = data[input.attr('name')];
+ const input = $(this);
+ const value = data[input.attr('name')];
if (input.attr('type') === 'checkbox') {
input.prop('checked', !!value).trigger('change');
@@ -209,17 +209,17 @@ define('admin/extend/widgets', [
}
$.get(config.relative_path + '/api/admin/extend/widgets', function (data) {
- var areas = data.areas;
+ const areas = data.areas;
- for (var i = 0; i < areas.length; i += 1) {
- var area = areas[i];
- var widgetArea = $('#widgets .area[data-template="' + area.template + '"][data-location="' + area.location + '"]').find('.widget-area');
+ for (let i = 0; i < areas.length; i += 1) {
+ const area = areas[i];
+ const 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 += 1) {
- var widgetData = area.data[k];
- var widgetEl = $('.available-widgets [data-widget="' + widgetData.widget + '"]').clone(true).removeClass('hide');
+ for (let k = 0; k < area.data.length; k += 1) {
+ const widgetData = area.data[k];
+ const widgetEl = $('.available-widgets [data-widget="' + widgetData.widget + '"]').clone(true).removeClass('hide');
widgetArea.append(populateWidget(widgetEl, widgetData.data));
appendToggle(widgetEl);
@@ -232,44 +232,44 @@ define('admin/extend/widgets', [
}
function setupCloneButton() {
- var clone = $('[component="clone"]');
- var cloneBtn = $('[component="clone/button"]');
+ const clone = $('[component="clone"]');
+ const cloneBtn = $('[component="clone/button"]');
clone.find('.dropdown-menu li').on('click', function () {
- var template = $(this).find('a').text();
+ const template = $(this).find('a').text();
cloneBtn.translateHtml('[[admin/extend/widgets:clone-from]]
' + template + '');
cloneBtn.attr('data-template', template);
});
cloneBtn.on('click', function () {
- var template = cloneBtn.attr('data-template');
+ const template = cloneBtn.attr('data-template');
if (!template) {
return app.alertError('[[admin/extend/widgets:error.select-clone]]');
}
- var currentTemplate = $('#active-widgets .active.tab-pane[data-template] .area');
- var templateToClone = $('#active-widgets .tab-pane[data-template="' + template + '"] .area');
+ const currentTemplate = $('#active-widgets .active.tab-pane[data-template] .area');
+ const templateToClone = $('#active-widgets .tab-pane[data-template="' + template + '"] .area');
- var currentAreas = currentTemplate.map(function () {
+ const currentAreas = currentTemplate.map(function () {
return $(this).attr('data-location');
}).get();
- var areasToClone = templateToClone.map(function () {
- var location = $(this).attr('data-location');
+ const areasToClone = templateToClone.map(function () {
+ const location = $(this).attr('data-location');
return currentAreas.indexOf(location) !== -1 ? location : undefined;
}).get().filter(function (i) { return i; });
function clone(location) {
$('#active-widgets .tab-pane[data-template="' + template + '"] [data-location="' + location + '"]').each(function () {
$(this).find('[data-widget]').each(function () {
- var widget = $(this).clone(true);
+ const widget = $(this).clone(true);
$('#active-widgets .active.tab-pane[data-template]:not([data-template="global"]) [data-location="' + location + '"] .widget-area').append(widget);
});
});
}
- for (var i = 0, ii = areasToClone.length; i < ii; i++) {
- var location = areasToClone[i];
+ for (let i = 0, ii = areasToClone.length; i < ii; i++) {
+ const location = areasToClone[i];
clone(location);
}
diff --git a/public/src/admin/manage/admins-mods.js b/public/src/admin/manage/admins-mods.js
index 2bceceb15e..0a8ec2dc62 100644
--- a/public/src/admin/manage/admins-mods.js
+++ b/public/src/admin/manage/admins-mods.js
@@ -3,7 +3,7 @@
define('admin/manage/admins-mods', [
'autocomplete', 'api', 'bootbox', 'categorySelector',
], function (autocomplete, api, bootbox, categorySelector) {
- var AdminsMods = {};
+ const AdminsMods = {};
AdminsMods.init = function () {
autocomplete.user($('#admin-search'), function (ev, ui) {
@@ -25,8 +25,8 @@ define('admin/manage/admins-mods', [
});
$('.administrator-area').on('click', '.remove-user-icon', function () {
- var userCard = $(this).parents('[data-uid]');
- var uid = userCard.attr('data-uid');
+ const userCard = $(this).parents('[data-uid]');
+ const uid = userCard.attr('data-uid');
if (parseInt(uid, 10) === parseInt(app.user.uid, 10)) {
return app.alertError('[[admin/manage/users:alerts.no-remove-yourself-admin]]');
}
@@ -60,8 +60,8 @@ define('admin/manage/admins-mods', [
});
$('.global-moderator-area').on('click', '.remove-user-icon', function () {
- var userCard = $(this).parents('[data-uid]');
- var uid = userCard.attr('data-uid');
+ const userCard = $(this).parents('[data-uid]');
+ const uid = userCard.attr('data-uid');
bootbox.confirm('[[admin/manage/users:alerts.confirm-remove-global-mod]]', function (confirm) {
if (confirm) {
@@ -85,8 +85,8 @@ define('admin/manage/admins-mods', [
});
autocomplete.user($('.moderator-search'), function (ev, ui) {
- var input = $(ev.target);
- var cid = $(ev.target).attr('data-cid');
+ const input = $(ev.target);
+ const cid = $(ev.target).attr('data-cid');
socket.emit('admin.categories.setPrivilege', {
cid: cid,
privilege: ajaxify.data.allPrivileges,
@@ -111,10 +111,10 @@ define('admin/manage/admins-mods', [
});
$('.moderator-area').on('click', '.remove-user-icon', function () {
- var moderatorArea = $(this).parents('[data-cid]');
- var cid = moderatorArea.attr('data-cid');
- var userCard = $(this).parents('[data-uid]');
- var uid = userCard.attr('data-uid');
+ const moderatorArea = $(this).parents('[data-cid]');
+ const cid = moderatorArea.attr('data-cid');
+ const userCard = $(this).parents('[data-uid]');
+ const uid = userCard.attr('data-uid');
bootbox.confirm('[[admin/manage/users:alerts.confirm-remove-moderator]]', function (confirm) {
if (confirm) {
diff --git a/public/src/admin/manage/categories.js b/public/src/admin/manage/categories.js
index c6d1307a4d..c8a8a10bfd 100644
--- a/public/src/admin/manage/categories.js
+++ b/public/src/admin/manage/categories.js
@@ -8,9 +8,9 @@ define('admin/manage/categories', [
'Sortable',
'bootbox',
], function (translator, Benchpress, categorySelector, api, Sortable, bootbox) {
- var Categories = {};
- var newCategoryId = -1;
- var sortables;
+ const Categories = {};
+ let newCategoryId = -1;
+ let sortables;
Categories.init = function () {
categorySelector.init($('.category [component="category-selector"]'), {
@@ -26,12 +26,12 @@ define('admin/manage/categories', [
// Enable/Disable toggle events
$('.categories').on('click', '.category-tools [data-action="toggle"]', function () {
- var $this = $(this);
- var cid = $this.attr('data-disable-cid');
- var parentEl = $this.parents('li[data-cid="' + cid + '"]');
- var disabled = parentEl.hasClass('disabled');
- var childrenEls = parentEl.find('li[data-cid]');
- var childrenCids = childrenEls.map(function () {
+ const $this = $(this);
+ const cid = $this.attr('data-disable-cid');
+ const parentEl = $this.parents('li[data-cid="' + cid + '"]');
+ const disabled = parentEl.hasClass('disabled');
+ const childrenEls = parentEl.find('li[data-cid]');
+ const childrenCids = childrenEls.map(function () {
return $(this).attr('data-cid');
}).get();
@@ -39,15 +39,15 @@ define('admin/manage/categories', [
});
$('.categories').on('click', '.toggle', function () {
- var el = $(this);
+ const el = $(this);
el.find('i').toggleClass('fa-minus').toggleClass('fa-plus');
el.closest('[data-cid]').find('> ul[data-cid]').toggleClass('hidden');
});
$('.categories').on('click', '.set-order', function () {
- var cid = $(this).attr('data-cid');
- var order = $(this).attr('data-order');
- var modal = bootbox.dialog({
+ const cid = $(this).attr('data-cid');
+ const order = $(this).attr('data-order');
+ const modal = bootbox.dialog({
title: '[[admin/manage/categories:set-order]]',
message: '
[[admin/manage/categories:set-order-help]]
',
show: true,
@@ -56,9 +56,9 @@ define('admin/manage/categories', [
label: '[[modules:bootbox.confirm]]',
className: 'btn-primary',
callback: function () {
- var val = modal.find('input').val();
+ const val = modal.find('input').val();
if (val && cid) {
- var modified = {};
+ const modified = {};
modified[cid] = { order: Math.max(1, parseInt(val, 10)) };
api.put('/categories/' + cid, modified[cid]).then(function () {
ajaxify.refresh();
@@ -81,7 +81,7 @@ define('admin/manage/categories', [
});
function toggleAll(expand) {
- var el = $('.categories .toggle');
+ const el = $('.categories .toggle');
el.find('i').toggleClass('fa-minus', expand).toggleClass('fa-plus', !expand);
el.closest('[data-cid]').find('> ul[data-cid]').toggleClass('hidden', !expand);
}
@@ -89,7 +89,7 @@ define('admin/manage/categories', [
Categories.throwCreateModal = function () {
Benchpress.render('admin/partials/categories/create', {}).then(function (html) {
- var modal = bootbox.dialog({
+ const modal = bootbox.dialog({
title: '[[admin/manage/categories:alert.create]]',
message: html,
buttons: {
@@ -100,7 +100,7 @@ define('admin/manage/categories', [
},
},
});
- var options = {
+ const options = {
localCategories: [
{
cid: 0,
@@ -109,10 +109,10 @@ define('admin/manage/categories', [
},
],
};
- var parentSelector = categorySelector.init(modal.find('#parentCidGroup [component="category-selector"]'), options);
- var cloneFromSelector = categorySelector.init(modal.find('#cloneFromCidGroup [component="category-selector"]'), options);
+ const parentSelector = categorySelector.init(modal.find('#parentCidGroup [component="category-selector"]'), options);
+ const cloneFromSelector = categorySelector.init(modal.find('#cloneFromCidGroup [component="category-selector"]'), options);
function submit() {
- var formData = modal.find('form').serializeObject();
+ const formData = modal.find('form').serializeObject();
formData.description = '';
formData.icon = 'fa-comments';
formData.uid = app.user.uid;
@@ -125,8 +125,8 @@ define('admin/manage/categories', [
}
$('#cloneChildren').on('change', function () {
- var check = $(this);
- var parentSelect = modal.find('#parentCidGroup [component="category-selector"] .dropdown-toggle');
+ const check = $(this);
+ const parentSelect = modal.find('#parentCidGroup [component="category-selector"] .dropdown-toggle');
if (check.prop('checked')) {
parentSelect.attr('disabled', 'disabled');
@@ -159,7 +159,7 @@ define('admin/manage/categories', [
};
Categories.render = function (categories) {
- var container = $('.categories');
+ const container = $('.categories');
if (!categories || !categories.length) {
translator.translate('[[admin/manage/categories:alert.none-active]]', function (text) {
@@ -190,15 +190,15 @@ define('admin/manage/categories', [
}
function itemDragDidEnd(e) {
- var isCategoryUpdate = parseInt(newCategoryId, 10) !== -1;
+ const isCategoryUpdate = parseInt(newCategoryId, 10) !== -1;
// Update needed?
if ((e.newIndex != null && parseInt(e.oldIndex, 10) !== parseInt(e.newIndex, 10)) || isCategoryUpdate) {
- var cid = e.item.dataset.cid;
- var modified = {};
+ const cid = e.item.dataset.cid;
+ const modified = {};
// on page 1 baseIndex is 0, on page n baseIndex is (n - 1) * ajaxify.data.categoriesPerPage
// this makes sure order is correct when drag & drop is used on pages > 1
- var baseIndex = (ajaxify.data.pagination.currentPage - 1) * ajaxify.data.categoriesPerPage;
+ const baseIndex = (ajaxify.data.pagination.currentPage - 1) * ajaxify.data.categoriesPerPage;
modified[cid] = {
order: baseIndex + e.newIndex + 1,
};
@@ -222,7 +222,7 @@ define('admin/manage/categories', [
*/
function renderList(categories, container, parentId) {
// Translate category names if needed
- var count = 0;
+ let count = 0;
categories.forEach(function (category, idx, parent) {
translator.translate(category.name, function (translated) {
if (category.name !== translated) {
@@ -248,7 +248,7 @@ define('admin/manage/categories', [
container.append(html);
// Handle and children categories in this level have
- for (var x = 0, numCategories = categories.length; x < numCategories; x += 1) {
+ for (let x = 0, numCategories = categories.length; x < numCategories; x += 1) {
renderList(categories[x].children, $('li[data-cid="' + categories[x].cid + '"]'), categories[x].cid);
}
diff --git a/public/src/admin/manage/category-analytics.js b/public/src/admin/manage/category-analytics.js
index 089f34ae08..6a283ef43f 100644
--- a/public/src/admin/manage/category-analytics.js
+++ b/public/src/admin/manage/category-analytics.js
@@ -2,17 +2,17 @@
define('admin/manage/category-analytics', ['Chart'], function (Chart) {
- var CategoryAnalytics = {};
+ const CategoryAnalytics = {};
CategoryAnalytics.init = function () {
- var hourlyCanvas = document.getElementById('pageviews:hourly');
- var dailyCanvas = document.getElementById('pageviews:daily');
- var topicsCanvas = document.getElementById('topics:daily');
- var postsCanvas = document.getElementById('posts:daily');
- var hourlyLabels = utils.getHoursArray().map(function (text, idx) {
+ const hourlyCanvas = document.getElementById('pageviews:hourly');
+ const dailyCanvas = document.getElementById('pageviews:daily');
+ const topicsCanvas = document.getElementById('topics:daily');
+ const postsCanvas = document.getElementById('posts:daily');
+ const hourlyLabels = utils.getHoursArray().map(function (text, idx) {
return idx % 3 ? '' : text;
});
- var dailyLabels = utils.getDaysArray().map(function (text, idx) {
+ const dailyLabels = utils.getDaysArray().map(function (text, idx) {
return idx % 3 ? '' : text;
});
@@ -20,7 +20,7 @@ define('admin/manage/category-analytics', ['Chart'], function (Chart) {
Chart.defaults.global.tooltips.enabled = false;
}
- var data = {
+ const data = {
'pageviews:hourly': {
labels: hourlyLabels,
datasets: [
diff --git a/public/src/admin/manage/category.js b/public/src/admin/manage/category.js
index 336cdacb98..10f665ecab 100644
--- a/public/src/admin/manage/category.js
+++ b/public/src/admin/manage/category.js
@@ -8,12 +8,12 @@ define('admin/manage/category', [
'api',
'bootbox',
], function (uploader, iconSelect, categorySelector, Benchpress, api, bootbox) {
- var Category = {};
- var updateHash = {};
+ const Category = {};
+ let updateHash = {};
Category.init = function () {
$('#category-settings select').each(function () {
- var $this = $(this);
+ const $this = $(this);
$this.val($this.attr('data-value'));
});
@@ -35,8 +35,8 @@ define('admin/manage/category', [
});
$('[data-name="bgColor"], [data-name="color"]').on('input', function () {
- var $inputEl = $(this);
- var previewEl = $inputEl.parents('[data-cid]').find('.category-preview');
+ const $inputEl = $(this);
+ const previewEl = $inputEl.parents('[data-cid]').find('.category-preview');
if ($inputEl.attr('data-name') === 'bgColor') {
previewEl.css('background-color', $inputEl.val());
} else if ($inputEl.attr('data-name') === 'color') {
@@ -47,12 +47,12 @@ define('admin/manage/category', [
});
$('#save').on('click', function () {
- var tags = $('#tag-whitelist').val() ? $('#tag-whitelist').val().split(',') : [];
+ const tags = $('#tag-whitelist').val() ? $('#tag-whitelist').val().split(',') : [];
if (tags.length && tags.length < parseInt($('#cid-min-tags').val(), 10)) {
return app.alertError('[[admin/manage/categories:alert.not-enough-whitelisted-tags]]');
}
- var cid = ajaxify.data.category.cid;
+ const cid = ajaxify.data.category.cid;
api.put('/categories/' + cid, updateHash).then((res) => {
app.flags._unsaved = false;
app.alert({
@@ -74,7 +74,7 @@ define('admin/manage/category', [
name: ajaxify.data.category.name,
topic_count: ajaxify.data.category.topic_count,
}).then(function (html) {
- var modal = bootbox.dialog({
+ const modal = bootbox.dialog({
title: '[[admin/manage/categories:purge]]',
message: html,
size: 'large',
@@ -85,13 +85,13 @@ define('admin/manage/category', [
callback: function () {
modal.find('.modal-footer button').prop('disabled', true);
- var intervalId = setInterval(function () {
+ const intervalId = setInterval(function () {
socket.emit('categories.getTopicCount', ajaxify.data.category.cid, function (err, count) {
if (err) {
return app.alertError(err);
}
- var percent = 0;
+ let percent = 0;
if (ajaxify.data.category.topic_count > 0) {
percent = Math.max(0, (1 - (count / ajaxify.data.category.topic_count))) * 100;
}
@@ -119,8 +119,8 @@ define('admin/manage/category', [
$('.copy-settings').on('click', function () {
Benchpress.render('admin/partials/categories/copy-settings', {}).then(function (html) {
- var selectedCid;
- var modal = bootbox.dialog({
+ let selectedCid;
+ const modal = bootbox.dialog({
title: '[[modules:composer.select_category]]',
message: html,
buttons: {
@@ -165,8 +165,8 @@ define('admin/manage/category', [
});
$('.upload-button').on('click', function () {
- var inputEl = $(this);
- var cid = inputEl.attr('data-cid');
+ const inputEl = $(this);
+ const cid = inputEl.attr('data-cid');
uploader.show({
title: '[[admin/manage/categories:alert.upload-image]]',
@@ -174,7 +174,7 @@ define('admin/manage/category', [
params: { cid: cid },
}, function (imageUrlOnServer) {
$('#category-image').val(imageUrlOnServer);
- var previewBox = inputEl.parent().parent().siblings('.category-preview');
+ const previewBox = inputEl.parent().parent().siblings('.category-preview');
previewBox.css('background', 'url(' + imageUrlOnServer + '?' + new Date().getTime() + ')');
modified($('#category-image'));
@@ -189,8 +189,8 @@ define('admin/manage/category', [
$('.delete-image').on('click', function (e) {
e.preventDefault();
- var inputEl = $('#category-image');
- var previewBox = $('.category-preview');
+ const inputEl = $('#category-image');
+ const previewBox = $('.category-preview');
inputEl.val('');
previewBox.css('background-image', '');
@@ -217,8 +217,8 @@ define('admin/manage/category', [
}).catch(app.alertError);
});
$('button[data-action="toggle"]').on('click', function () {
- var $this = $(this);
- var disabled = $this.attr('data-disabled') === '1';
+ const $this = $(this);
+ const disabled = $this.attr('data-disabled') === '1';
api.put('/categories/' + ajaxify.data.category.cid, {
disabled: disabled ? 0 : 1,
}).then(() => {
@@ -230,14 +230,14 @@ define('admin/manage/category', [
};
function modified(el) {
- var value;
+ let value;
if ($(el).is(':checkbox')) {
value = $(el).is(':checked') ? 1 : 0;
} else {
value = $(el).val();
}
- var dataName = $(el).attr('data-name');
- var fields = dataName.match(/[^\][.]+/g);
+ const dataName = $(el).attr('data-name');
+ const fields = dataName.match(/[^\][.]+/g);
function setNestedFields(obj, index) {
if (index === fields.length) {
@@ -263,7 +263,7 @@ define('admin/manage/category', [
}
function handleTags() {
- var tagEl = $('#tag-whitelist');
+ const tagEl = $('#tag-whitelist');
tagEl.tagsinput({
confirmKeys: [13, 44],
trimValue: true,
@@ -281,7 +281,7 @@ define('admin/manage/category', [
Category.launchParentSelector = function () {
categorySelector.modal({
onSubmit: function (selectedCategory) {
- var parentCid = selectedCategory.cid;
+ const parentCid = selectedCategory.cid;
if (!parentCid) {
return;
}
@@ -290,7 +290,7 @@ define('admin/manage/category', [
}).then(() => {
api.get(`/categories/${parentCid}`, {}).then(function (parent) {
if (parent && parent.icon && parent.name) {
- var buttonHtml = '
' + parent.name;
+ const buttonHtml = '
' + parent.name;
$('button[data-action="changeParent"]').html(buttonHtml).parent().removeClass('hide');
}
});
diff --git a/public/src/admin/manage/digest.js b/public/src/admin/manage/digest.js
index 85876517dd..86b19e6576 100644
--- a/public/src/admin/manage/digest.js
+++ b/public/src/admin/manage/digest.js
@@ -2,15 +2,15 @@
define('admin/manage/digest', ['bootbox'], function (bootbox) {
- var Digest = {};
+ const Digest = {};
Digest.init = function () {
$('table').on('click', '[data-action]', function () {
- var action = this.getAttribute('data-action');
- var uid = this.getAttribute('data-uid');
+ const action = this.getAttribute('data-action');
+ const uid = this.getAttribute('data-uid');
if (action.startsWith('resend-')) {
- var interval = action.slice(7);
+ const interval = action.slice(7);
bootbox.confirm('[[admin/manage/digest:resend-all-confirm]]', function (ok) {
if (ok) {
Digest.send(action, undefined, function (err) {
diff --git a/public/src/admin/manage/group.js b/public/src/admin/manage/group.js
index c873dc40b4..8e7ea9133e 100644
--- a/public/src/admin/manage/group.js
+++ b/public/src/admin/manage/group.js
@@ -10,17 +10,17 @@ define('admin/manage/group', [
'api',
'bootbox',
], function (memberList, iconSelect, translator, categorySelector, groupSearch, slugify, api, bootbox) {
- var Groups = {};
+ const Groups = {};
Groups.init = function () {
- var groupIcon = $('#group-icon');
- var changeGroupUserTitle = $('#change-group-user-title');
- var changeGroupLabelColor = $('#change-group-label-color');
- var changeGroupTextColor = $('#change-group-text-color');
- var groupLabelPreview = $('#group-label-preview');
- var groupLabelPreviewText = $('#group-label-preview-text');
+ const groupIcon = $('#group-icon');
+ const changeGroupUserTitle = $('#change-group-user-title');
+ const changeGroupLabelColor = $('#change-group-label-color');
+ const changeGroupTextColor = $('#change-group-text-color');
+ const groupLabelPreview = $('#group-label-preview');
+ const groupLabelPreviewText = $('#group-label-preview-text');
- var groupName = ajaxify.data.group.name;
+ const groupName = ajaxify.data.group.name;
$('#group-selector').on('change', function () {
ajaxify.go('admin/manage/groups/' + $(this).val() + window.location.hash);
@@ -43,9 +43,9 @@ define('admin/manage/group', [
setupGroupMembersMenu();
$('#group-icon, #group-icon-label').on('click', function () {
- var currentIcon = groupIcon.attr('value');
+ const currentIcon = groupIcon.attr('value');
iconSelect.init(groupIcon, function () {
- var newIcon = groupIcon.attr('value');
+ let newIcon = groupIcon.attr('value');
if (newIcon === currentIcon) {
return;
}
@@ -65,9 +65,9 @@ define('admin/manage/group', [
showLinks: true,
});
- var cidSelector = categorySelector.init($('.member-post-cids-selector [component="category-selector"]'), {
+ const cidSelector = categorySelector.init($('.member-post-cids-selector [component="category-selector"]'), {
onSelect: function (selectedCategory) {
- var cids = ($('#memberPostCids').val() || '').split(',').map(cid => parseInt(cid, 10));
+ let cids = ($('#memberPostCids').val() || '').split(',').map(cid => parseInt(cid, 10));
cids.push(selectedCategory.cid);
cids = cids.filter((cid, index, array) => array.indexOf(cid) === index);
$('#memberPostCids').val(cids.join(','));
@@ -97,7 +97,7 @@ define('admin/manage/group', [
disableJoinRequests: $('#group-disableJoinRequests').is(':checked'),
disableLeave: $('#group-disableLeave').is(':checked'),
}).then(() => {
- var newName = $('#change-group-name').val();
+ const newName = $('#change-group-name').val();
// If the group name changed, change url
if (groupName !== newName) {
@@ -112,12 +112,12 @@ define('admin/manage/group', [
function setupGroupMembersMenu() {
$('[component="groups/members"]').on('click', '[data-action]', function () {
- var btnEl = $(this);
- var userRow = btnEl.parents('[data-uid]');
- var ownerFlagEl = userRow.find('.member-name .user-owner-icon');
- var isOwner = !ownerFlagEl.hasClass('invisible');
- var uid = userRow.attr('data-uid');
- var action = btnEl.attr('data-action');
+ const btnEl = $(this);
+ const userRow = btnEl.parents('[data-uid]');
+ const ownerFlagEl = userRow.find('.member-name .user-owner-icon');
+ const isOwner = !ownerFlagEl.hasClass('invisible');
+ const uid = userRow.attr('data-uid');
+ const action = btnEl.attr('data-action');
switch (action) {
case 'toggleOwnership':
@@ -144,7 +144,7 @@ define('admin/manage/group', [
function navigateToCategory(cid) {
if (cid) {
- var url = 'admin/manage/privileges/' + cid + '?group=' + ajaxify.data.group.nameEncoded;
+ const url = 'admin/manage/privileges/' + cid + '?group=' + ajaxify.data.group.nameEncoded;
if (app.flags && app.flags._unsaved === true) {
translator.translate('[[global:unsaved-changes]]', function (text) {
bootbox.confirm(text, function (navigate) {
diff --git a/public/src/admin/manage/groups.js b/public/src/admin/manage/groups.js
index 9dbb204419..10867bede5 100644
--- a/public/src/admin/manage/groups.js
+++ b/public/src/admin/manage/groups.js
@@ -6,13 +6,13 @@ define('admin/manage/groups', [
'api',
'bootbox',
], function (categorySelector, slugify, api, bootbox) {
- var Groups = {};
+ const Groups = {};
Groups.init = function () {
- var createModal = $('#create-modal');
- var createGroupName = $('#create-group-name');
- var createModalGo = $('#create-modal-go');
- var createModalError = $('#create-modal-error');
+ const createModal = $('#create-modal');
+ const createGroupName = $('#create-group-name');
+ const createModalGo = $('#create-modal-go');
+ const createModalError = $('#create-modal-error');
handleSearch();
@@ -30,7 +30,7 @@ define('admin/manage/groups', [
});
createModalGo.on('click', function () {
- var submitObj = {
+ const submitObj = {
name: createGroupName.val(),
description: $('#create-group-desc').val(),
private: $('#create-group-private').is(':checked') ? 1 : 0,
@@ -53,9 +53,9 @@ define('admin/manage/groups', [
});
$('.groups-list').on('click', '[data-action]', function () {
- var el = $(this);
- var action = el.attr('data-action');
- var groupName = el.parents('tr[data-groupname]').attr('data-groupname');
+ const el = $(this);
+ const action = el.attr('data-action');
+ const groupName = el.parents('tr[data-groupname]').attr('data-groupname');
switch (action) {
case 'delete':
@@ -73,7 +73,7 @@ define('admin/manage/groups', [
function enableCategorySelectors() {
$('.groups-list [component="category-selector"]').each(function () {
- var nameEncoded = $(this).parents('[data-name-encoded]').attr('data-name-encoded');
+ const nameEncoded = $(this).parents('[data-name-encoded]').attr('data-name-encoded');
categorySelector.init($(this), {
onSelect: function (selectedCategory) {
ajaxify.go('admin/manage/privileges/' + selectedCategory.cid + '?group=' + nameEncoded);
@@ -84,14 +84,14 @@ define('admin/manage/groups', [
}
function handleSearch() {
- var queryEl = $('#group-search');
+ const queryEl = $('#group-search');
function doSearch() {
if (!queryEl.val()) {
return ajaxify.refresh();
}
$('.pagination').addClass('hide');
- var groupsEl = $('.groups-list');
+ const groupsEl = $('.groups-list');
socket.emit('groups.search', {
query: queryEl.val(),
options: {
diff --git a/public/src/admin/manage/registration.js b/public/src/admin/manage/registration.js
index 1b0f80875b..90f0387f87 100644
--- a/public/src/admin/manage/registration.js
+++ b/public/src/admin/manage/registration.js
@@ -2,14 +2,14 @@
define('admin/manage/registration', ['bootbox'], function (bootbox) {
- var Registration = {};
+ const Registration = {};
Registration.init = function () {
$('.users-list').on('click', '[data-action]', function () {
- var parent = $(this).parents('[data-username]');
- var action = $(this).attr('data-action');
- var username = parent.attr('data-username');
- var method = action === 'accept' ? 'user.acceptRegistration' : 'user.rejectRegistration';
+ const parent = $(this).parents('[data-username]');
+ const action = $(this).attr('data-action');
+ const username = parent.attr('data-username');
+ const method = action === 'accept' ? 'user.acceptRegistration' : 'user.rejectRegistration';
socket.emit(method, { username: username }, function (err) {
if (err) {
@@ -21,16 +21,16 @@ define('admin/manage/registration', ['bootbox'], function (bootbox) {
});
$('.invites-list').on('click', '[data-action]', function () {
- var parent = $(this).parents('[data-invitation-mail][data-invited-by]');
- var email = parent.attr('data-invitation-mail');
- var invitedBy = parent.attr('data-invited-by');
- var action = $(this).attr('data-action');
- var method = 'user.deleteInvitation';
+ const parent = $(this).parents('[data-invitation-mail][data-invited-by]');
+ const email = parent.attr('data-invitation-mail');
+ const invitedBy = parent.attr('data-invited-by');
+ const action = $(this).attr('data-action');
+ const method = 'user.deleteInvitation';
- var removeRow = function () {
- var nextRow = parent.next();
- var thisRowinvitedBy = parent.find('.invited-by');
- var nextRowInvitedBy = nextRow.find('.invited-by');
+ const removeRow = function () {
+ const nextRow = parent.next();
+ const thisRowinvitedBy = parent.find('.invited-by');
+ const nextRowInvitedBy = nextRow.find('.invited-by');
if (nextRowInvitedBy.html() !== undefined && nextRowInvitedBy.html().length < 2) {
nextRowInvitedBy.html(thisRowinvitedBy.html());
}
diff --git a/public/src/admin/manage/tags.js b/public/src/admin/manage/tags.js
index d2a4817158..836c8f7be9 100644
--- a/public/src/admin/manage/tags.js
+++ b/public/src/admin/manage/tags.js
@@ -6,7 +6,7 @@ define('admin/manage/tags', [
'forum/infinitescroll',
'admin/modules/selectable',
], function (bootbox, infinitescroll, selectable) {
- var Tags = {};
+ const Tags = {};
Tags.init = function () {
selectable.enable('.tag-management', '.tag-row');
@@ -18,9 +18,9 @@ define('admin/manage/tags', [
};
function handleCreate() {
- var createModal = $('#create-modal');
- var createTagName = $('#create-tag-name');
- var createModalGo = $('#create-modal-go');
+ const createModal = $('#create-modal');
+ const createTagName = $('#create-tag-name');
+ const createModalGo = $('#create-modal-go');
createModal.on('keypress', function (e) {
if (e.keyCode === 13) {
@@ -74,12 +74,12 @@ define('admin/manage/tags', [
function handleRename() {
$('#rename').on('click', function () {
- var tagsToModify = $('.tag-row.ui-selected');
+ const tagsToModify = $('.tag-row.ui-selected');
if (!tagsToModify.length) {
return;
}
- var modal = bootbox.dialog({
+ const modal = bootbox.dialog({
title: '[[admin/manage/tags:alerts.editing]]',
message: $('.rename-modal').html(),
buttons: {
@@ -87,7 +87,7 @@ define('admin/manage/tags', [
label: 'Save',
className: 'btn-primary save',
callback: function () {
- var data = [];
+ const data = [];
tagsToModify.each(function (idx, tag) {
tag = $(tag);
data.push({
@@ -112,7 +112,7 @@ define('admin/manage/tags', [
function handleDeleteSelected() {
$('#deleteSelected').on('click', function () {
- var tagsToDelete = $('.tag-row.ui-selected');
+ const tagsToDelete = $('.tag-row.ui-selected');
if (!tagsToDelete.length) {
return;
}
@@ -121,7 +121,7 @@ define('admin/manage/tags', [
if (!confirm) {
return;
}
- var tags = [];
+ const tags = [];
tagsToDelete.each(function (index, el) {
tags.push($(el).attr('data-tag'));
});
diff --git a/public/src/admin/manage/uploads.js b/public/src/admin/manage/uploads.js
index 6ed59d2f77..ef19b1aaf8 100644
--- a/public/src/admin/manage/uploads.js
+++ b/public/src/admin/manage/uploads.js
@@ -1,7 +1,7 @@
'use strict';
define('admin/manage/uploads', ['api', 'bootbox', 'uploader'], function (api, bootbox, uploader) {
- var Uploads = {};
+ const Uploads = {};
Uploads.init = function () {
$('#upload').on('click', function () {
@@ -15,7 +15,7 @@ define('admin/manage/uploads', ['api', 'bootbox', 'uploader'], function (api, bo
});
$('.delete').on('click', function () {
- var file = $(this).parents('[data-path]');
+ const file = $(this).parents('[data-path]');
bootbox.confirm('[[admin/manage/uploads:confirm-delete]]', function (ok) {
if (!ok) {
return;
diff --git a/public/src/admin/manage/users.js b/public/src/admin/manage/users.js
index 41d9a1a86d..7c6543fa75 100644
--- a/public/src/admin/manage/users.js
+++ b/public/src/admin/manage/users.js
@@ -3,13 +3,13 @@
define('admin/manage/users', [
'translator', 'benchpress', 'autocomplete', 'api', 'slugify', 'bootbox', 'accounts/invite',
], function (translator, Benchpress, autocomplete, api, slugify, bootbox, AccountInvite) {
- var Users = {};
+ const Users = {};
Users.init = function () {
$('#results-per-page').val(ajaxify.data.resultsPerPage).on('change', function () {
- var query = utils.params();
+ const query = utils.params();
query.resultsPerPage = $('#results-per-page').val();
- var qs = buildSearchQuery(query);
+ const qs = buildSearchQuery(query);
ajaxify.go(window.location.pathname + '?' + qs);
});
@@ -42,7 +42,7 @@ define('admin/manage/users', [
});
function getSelectedUids() {
- var uids = [];
+ const uids = [];
$('.users-table [component="user/select/single"]').each(function () {
if ($(this).is(':checked')) {
@@ -99,7 +99,7 @@ define('admin/manage/users', [
});
$('.manage-groups').on('click', function () {
- var uids = getSelectedUids();
+ const uids = getSelectedUids();
if (!uids.length) {
app.alertError('[[error:no-users-selected]]');
return false;
@@ -109,14 +109,14 @@ define('admin/manage/users', [
return app.alertError(err);
}
Benchpress.render('admin/partials/manage_user_groups', data).then(function (html) {
- var modal = bootbox.dialog({
+ const modal = bootbox.dialog({
message: html,
title: '[[admin/manage/users:manage-groups]]',
onEscape: true,
});
modal.on('shown.bs.modal', function () {
autocomplete.group(modal.find('.group-search'), function (ev, ui) {
- var uid = $(ev.target).attr('data-uid');
+ const uid = $(ev.target).attr('data-uid');
api.put('/groups/' + ui.item.group.slug + '/membership/' + uid, undefined).then(() => {
ui.item.group.nameEscaped = translator.escape(ui.item.group.displayName);
app.parseAndTranslate('admin/partials/manage_user_groups', { users: [{ groups: [ui.item.group] }] }, function (html) {
@@ -129,9 +129,9 @@ define('admin/manage/users', [
modal.modal('hide');
});
modal.on('click', '.remove-group-icon', function () {
- var groupCard = $(this).parents('[data-group-name]');
- var groupName = groupCard.attr('data-group-name');
- var uid = $(this).parents('[data-uid]').attr('data-uid');
+ const groupCard = $(this).parents('[data-group-name]');
+ const groupName = groupCard.attr('data-group-name');
+ const uid = $(this).parents('[data-uid]').attr('data-uid');
api.del('/groups/' + slugify(groupName) + '/membership/' + uid).then(() => {
groupCard.remove();
}).catch(app.alertError);
@@ -142,7 +142,7 @@ define('admin/manage/users', [
});
$('.ban-user').on('click', function () {
- var uids = getSelectedUids();
+ const uids = getSelectedUids();
if (!uids.length) {
app.alertError('[[error:no-users-selected]]');
return false; // specifically to keep the menu open
@@ -160,7 +160,7 @@ define('admin/manage/users', [
});
$('.ban-user-temporary').on('click', function () {
- var uids = getSelectedUids();
+ const uids = getSelectedUids();
if (!uids.length) {
app.alertError('[[error:no-users-selected]]');
return false; // specifically to keep the menu open
@@ -180,11 +180,11 @@ define('admin/manage/users', [
submit: {
label: '[[admin/manage/users:alerts.button-ban-x, ' + uids.length + ']]',
callback: function () {
- var formData = $('.ban-modal form').serializeArray().reduce(function (data, cur) {
+ const formData = $('.ban-modal form').serializeArray().reduce(function (data, cur) {
data[cur.name] = cur.value;
return data;
}, {});
- var until = formData.length > 0 ? (
+ const until = formData.length > 0 ? (
Date.now() + (formData.length * 1000 * 60 * 60 * (parseInt(formData.unit, 10) ? 24 : 1))
) : 0;
@@ -204,7 +204,7 @@ define('admin/manage/users', [
});
$('.unban-user').on('click', function () {
- var uids = getSelectedUids();
+ const uids = getSelectedUids();
if (!uids.length) {
app.alertError('[[error:no-users-selected]]');
return false; // specifically to keep the menu open
@@ -218,7 +218,7 @@ define('admin/manage/users', [
});
$('.reset-lockout').on('click', function () {
- var uids = getSelectedUids();
+ const uids = getSelectedUids();
if (!uids.length) {
return;
}
@@ -227,7 +227,7 @@ define('admin/manage/users', [
});
$('.validate-email').on('click', function () {
- var uids = getSelectedUids();
+ const uids = getSelectedUids();
if (!uids.length) {
return;
}
@@ -249,7 +249,7 @@ define('admin/manage/users', [
});
$('.send-validation-email').on('click', function () {
- var uids = getSelectedUids();
+ const uids = getSelectedUids();
if (!uids.length) {
return;
}
@@ -262,7 +262,7 @@ define('admin/manage/users', [
});
$('.password-reset-email').on('click', function () {
- var uids = getSelectedUids();
+ const uids = getSelectedUids();
if (!uids.length) {
return;
}
@@ -275,7 +275,7 @@ define('admin/manage/users', [
});
$('.force-password-reset').on('click', function () {
- var uids = getSelectedUids();
+ const uids = getSelectedUids();
if (!uids.length) {
return;
}
@@ -304,7 +304,7 @@ define('admin/manage/users', [
tableEl.addEventListener('change', (e) => {
const subselector = e.target.closest('[component="user/select/single"]') || e.target.closest('[component="user/select/all"]');
if (subselector) {
- var uids = getSelectedUids();
+ const uids = getSelectedUids();
if (uids.length) {
actionBtn.removeAttribute('disabled');
} else {
@@ -314,7 +314,7 @@ define('admin/manage/users', [
});
function handleDelete(confirmMsg, path) {
- var uids = getSelectedUids();
+ const uids = getSelectedUids();
if (!uids.length) {
return;
}
@@ -347,7 +347,7 @@ define('admin/manage/users', [
function handleUserCreate() {
$('[data-action="create"]').on('click', function () {
Benchpress.render('admin/partials/create_user_modal', {}).then(function (html) {
- var modal = bootbox.dialog({
+ const modal = bootbox.dialog({
message: html,
title: '[[admin/manage/users:alerts.create]]',
onEscape: true,
@@ -375,19 +375,19 @@ define('admin/manage/users', [
}
function createUser() {
- var modal = this;
- var username = document.getElementById('create-user-name').value;
- var email = document.getElementById('create-user-email').value;
- var password = document.getElementById('create-user-password').value;
- var passwordAgain = document.getElementById('create-user-password-again').value;
+ const modal = this;
+ const username = document.getElementById('create-user-name').value;
+ const email = document.getElementById('create-user-email').value;
+ const password = document.getElementById('create-user-password').value;
+ const passwordAgain = document.getElementById('create-user-password-again').value;
- var errorEl = $('#create-modal-error');
+ const errorEl = $('#create-modal-error');
if (password !== passwordAgain) {
return errorEl.translateHtml('[[admin/manage/users:alerts.error-x, [[admin/manage/users:alerts.error-passwords-different]]]]').removeClass('hide');
}
- var user = {
+ const user = {
username: username,
email: email,
password: password,
@@ -425,12 +425,12 @@ define('admin/manage/users', [
}
function loadSearchPage(query) {
- var params = utils.params();
+ const params = utils.params();
params.searchBy = query.searchBy;
params.query = query.query;
params.page = query.page;
params.sortBy = params.sortBy || 'lastonline';
- var qs = decodeURIComponent($.param(params));
+ const qs = decodeURIComponent($.param(params));
$.get(config.relative_path + '/api/admin/manage/users?' + qs, function (data) {
renderSearchResults(data);
const url = config.relative_path + '/admin/manage/users?' + qs;
@@ -488,12 +488,12 @@ define('admin/manage/users', [
function handleSort() {
$('.users-table thead th').on('click', function () {
- var $this = $(this);
- var sortBy = $this.attr('data-sort');
+ const $this = $(this);
+ const sortBy = $this.attr('data-sort');
if (!sortBy) {
return;
}
- var params = utils.params();
+ const params = utils.params();
params.sortBy = sortBy;
if (ajaxify.data.sortBy === sortBy) {
params.sortDirection = ajaxify.data.reverse ? 'asc' : 'desc';
@@ -501,13 +501,13 @@ define('admin/manage/users', [
params.sortDirection = 'desc';
}
- var qs = buildSearchQuery(params);
+ const qs = buildSearchQuery(params);
ajaxify.go('admin/manage/users?' + qs);
});
}
function getFilters() {
- var filters = [];
+ const filters = [];
$('#filter-by').find('[data-filter-by]').each(function () {
if ($(this).find('.fa-check').length) {
filters.push($(this).attr('data-filter-by'));
@@ -517,16 +517,16 @@ define('admin/manage/users', [
}
function handleFilter() {
- var currentFilters = getFilters();
+ let currentFilters = getFilters();
$('#filter-by').on('click', 'li', function () {
- var $this = $(this);
+ const $this = $(this);
$this.find('i').toggleClass('fa-check', !$this.find('i').hasClass('fa-check'));
return false;
});
$('#filter-by').on('hidden.bs.dropdown', function () {
- var filters = getFilters();
- var changed = filters.length !== currentFilters.length;
+ const filters = getFilters();
+ let changed = filters.length !== currentFilters.length;
if (filters.length === currentFilters.length) {
filters.forEach(function (filter, i) {
if (filter !== currentFilters[i]) {
@@ -536,9 +536,9 @@ define('admin/manage/users', [
}
currentFilters = getFilters();
if (changed) {
- var params = utils.params();
+ const params = utils.params();
params.filters = filters;
- var qs = buildSearchQuery(params);
+ const qs = buildSearchQuery(params);
ajaxify.go('admin/manage/users?' + qs);
}
});
diff --git a/public/src/admin/modules/colorpicker.js b/public/src/admin/modules/colorpicker.js
index 933067faf7..3b64164647 100644
--- a/public/src/admin/modules/colorpicker.js
+++ b/public/src/admin/modules/colorpicker.js
@@ -2,11 +2,11 @@
// TODO: no longer used remove in 1.19.0
define('admin/modules/colorpicker', function () {
- var colorpicker = {};
+ const colorpicker = {};
colorpicker.enable = function (inputEl, callback) {
(inputEl instanceof jQuery ? inputEl : $(inputEl)).each(function () {
- var $this = $(this);
+ const $this = $(this);
$this.ColorPicker({
color: $this.val() || '#000',
diff --git a/public/src/admin/modules/dashboard-line-graph.js b/public/src/admin/modules/dashboard-line-graph.js
index 246bbbe39d..38f75e62cc 100644
--- a/public/src/admin/modules/dashboard-line-graph.js
+++ b/public/src/admin/modules/dashboard-line-graph.js
@@ -18,7 +18,7 @@ define('admin/modules/dashboard-line-graph', ['Chart', 'translator', 'benchpress
Graph.handleUpdateControls({ set });
- var t = translator.Translator.create();
+ const t = translator.Translator.create();
return new Promise((resolve) => {
t.translateKey(`admin/menu:${ajaxify.data.template.name.replace('admin/', '')}`, []).then((key) => {
const data = {
@@ -81,8 +81,8 @@ define('admin/modules/dashboard-line-graph', ['Chart', 'translator', 'benchpress
Graph.handleUpdateControls = ({ set }) => {
$('[data-action="updateGraph"]:not([data-units="custom"])').on('click', function () {
- var until = new Date();
- var amount = $(this).attr('data-amount');
+ let until = new Date();
+ const amount = $(this).attr('data-amount');
if ($(this).attr('data-units') === 'days') {
until.setHours(0, 0, 0, 0);
}
@@ -97,10 +97,10 @@ define('admin/modules/dashboard-line-graph', ['Chart', 'translator', 'benchpress
});
$('[data-action="updateGraph"][data-units="custom"]').on('click', function () {
- var targetEl = $(this);
+ const targetEl = $(this);
Benchpress.render('admin/partials/pageviews-range-select', {}).then(function (html) {
- var modal = bootbox.dialog({
+ const modal = bootbox.dialog({
title: '[[admin/dashboard:page-views-custom]]',
message: html,
buttons: {
@@ -111,10 +111,10 @@ define('admin/modules/dashboard-line-graph', ['Chart', 'translator', 'benchpress
},
},
}).on('shown.bs.modal', function () {
- var date = new Date();
- var today = date.toISOString().substr(0, 10);
+ const date = new Date();
+ const today = date.toISOString().substr(0, 10);
date.setDate(date.getDate() - 1);
- var yesterday = date.toISOString().substr(0, 10);
+ const yesterday = date.toISOString().substr(0, 10);
modal.find('#startRange').val(targetEl.attr('data-startRange') || yesterday);
modal.find('#endRange').val(targetEl.attr('data-endRange') || today);
@@ -122,8 +122,8 @@ define('admin/modules/dashboard-line-graph', ['Chart', 'translator', 'benchpress
function submit() {
// NEED TO ADD VALIDATION HERE FOR YYYY-MM-DD
- var formData = modal.find('form').serializeObject();
- var validRegexp = /\d{4}-\d{2}-\d{2}/;
+ const formData = modal.find('form').serializeObject();
+ const validRegexp = /\d{4}-\d{2}-\d{2}/;
// Input validation
if (!formData.startRange && !formData.endRange) {
@@ -136,10 +136,10 @@ define('admin/modules/dashboard-line-graph', ['Chart', 'translator', 'benchpress
return false;
}
- var until = new Date(formData.endRange);
+ let until = new Date(formData.endRange);
until.setDate(until.getDate() + 1);
until = until.getTime();
- var amount = (until - new Date(formData.startRange).getTime()) / (1000 * 60 * 60 * 24);
+ const amount = (until - new Date(formData.startRange).getTime()) / (1000 * 60 * 60 * 24);
Graph.update(set, 'days', until, amount);
@@ -175,8 +175,8 @@ define('admin/modules/dashboard-line-graph', ['Chart', 'translator', 'benchpress
Graph._current.update();
// Update address bar and "View as JSON" button url
- var apiEl = $('#view-as-json');
- var newHref = $.param({
+ const apiEl = $('#view-as-json');
+ const newHref = $.param({
units: units || 'hours',
until: until,
count: amount,
diff --git a/public/src/admin/modules/instance.js b/public/src/admin/modules/instance.js
index bdb2aad21b..996e381229 100644
--- a/public/src/admin/modules/instance.js
+++ b/public/src/admin/modules/instance.js
@@ -6,7 +6,7 @@ define('admin/modules/instance', [
// the client can't fetch the template file, resulting in an error
config.relative_path + '/assets/templates/alert.js',
], function () {
- var instance = {};
+ const instance = {};
instance.rebuildAndRestart = function (callback) {
app.alert({
diff --git a/public/src/admin/modules/search.js b/public/src/admin/modules/search.js
index e2ea2a4c3d..1bb62ad2cc 100644
--- a/public/src/admin/modules/search.js
+++ b/public/src/admin/modules/search.js
@@ -1,18 +1,18 @@
'use strict';
define('admin/modules/search', ['mousetrap'], function (mousetrap) {
- var search = {};
+ const search = {};
function find(dict, term) {
- var html = dict.filter(function (elem) {
+ const html = dict.filter(function (elem) {
return elem.translations.toLowerCase().includes(term);
}).map(function (params) {
- var namespace = params.namespace;
- var translations = params.translations;
- var title = params.title;
- var escaped = utils.escapeRegexChars(term);
+ const namespace = params.namespace;
+ const translations = params.translations;
+ let title = params.title;
+ const escaped = utils.escapeRegexChars(term);
- var results = translations
+ const results = translations
// remove all lines without a match
.replace(new RegExp('^(?:(?!' + escaped + ').)*$', 'gmi'), '')
// remove lines that only match the title
@@ -60,9 +60,9 @@ define('admin/modules/search', ['mousetrap'], function (mousetrap) {
};
function setupACPSearch(dict) {
- var dropdown = $('#acp-search .dropdown');
- var menu = $('#acp-search .dropdown-menu');
- var input = $('#acp-search input');
+ const dropdown = $('#acp-search .dropdown');
+ const menu = $('#acp-search .dropdown-menu');
+ const input = $('#acp-search input');
if (!config.searchEnabled) {
menu.addClass('search-disabled');
@@ -73,11 +73,11 @@ define('admin/modules/search', ['mousetrap'], function (mousetrap) {
});
$('#acp-search').parents('form').on('submit', function (ev) {
- var selected = menu.find('li.result > a.focus').attr('href');
+ let selected = menu.find('li.result > a.focus').attr('href');
if (!selected.length) {
selected = menu.find('li.result > a').first().attr('href');
}
- var href = selected || config.relative_path + '/search?in=titlesposts&term=' + escape(input.val());
+ const href = selected || config.relative_path + '/search?in=titlesposts&term=' + escape(input.val());
ajaxify.go(href.replace(/^\//, ''));
@@ -96,7 +96,7 @@ define('admin/modules/search', ['mousetrap'], function (mousetrap) {
});
mousetrap(input[0]).bind(['up', 'down'], function (ev, key) {
- var next;
+ let next;
if (key === 'up') {
next = menu.find('li.result > a.focus').removeClass('focus').parent().prev('.result')
.children();
@@ -122,10 +122,10 @@ define('admin/modules/search', ['mousetrap'], function (mousetrap) {
ev.preventDefault();
});
- var prevValue;
+ let prevValue;
input.on('keyup focus', function () {
- var value = input.val().toLowerCase();
+ const value = input.val().toLowerCase();
if (value === prevValue) {
return;
@@ -134,8 +134,8 @@ define('admin/modules/search', ['mousetrap'], function (mousetrap) {
menu.children('.result').remove();
- var len = /\W/.test(value) ? 3 : value.length;
- var results;
+ const len = /\W/.test(value) ? 3 : value.length;
+ let results;
menu.toggleClass('state-start-typing', len === 0);
menu.toggleClass('state-keep-typing', len > 0 && len < 3);
diff --git a/public/src/admin/modules/selectable.js b/public/src/admin/modules/selectable.js
index 34949a4e10..470462d558 100644
--- a/public/src/admin/modules/selectable.js
+++ b/public/src/admin/modules/selectable.js
@@ -4,7 +4,7 @@
define('admin/modules/selectable', [
'jquery-ui/widgets/selectable',
], function () {
- var selectable = {};
+ const selectable = {};
selectable.enable = function (containerEl, targets) {
$(containerEl).selectable({
diff --git a/public/src/admin/settings.js b/public/src/admin/settings.js
index 5b5dee579e..c7166305a0 100644
--- a/public/src/admin/settings.js
+++ b/public/src/admin/settings.js
@@ -2,21 +2,21 @@
define('admin/settings', ['uploader', 'mousetrap', 'hooks'], function (uploader, mousetrap, hooks) {
- var Settings = {};
+ const Settings = {};
Settings.populateTOC = function () {
- var headers = $('.settings-header');
+ const headers = $('.settings-header');
if (headers.length > 1) {
headers.each(function () {
- var header = $(this).text();
- var anchor = header.toLowerCase().replace(/ /g, '-').trim();
+ const header = $(this).text();
+ const anchor = header.toLowerCase().replace(/ /g, '-').trim();
$(this).prepend('
');
$('.section-content ul').append('
' + header + '');
});
- var scrollTo = $('a[name="' + window.location.hash.replace('#', '') + '"]');
+ const scrollTo = $('a[name="' + window.location.hash.replace('#', '') + '"]');
if (scrollTo.length) {
$('html, body').animate({
scrollTop: (scrollTo.offset().top) + 'px',
@@ -29,28 +29,28 @@ define('admin/settings', ['uploader', 'mousetrap', 'hooks'], function (uploader,
Settings.prepare = function (callback) {
// Populate the fields on the page from the config
- var fields = $('#content [data-field]');
- var numFields = fields.length;
- var saveBtn = $('#save');
- var revertBtn = $('#revert');
- var x;
- var key;
- var inputType;
- var field;
+ const fields = $('#content [data-field]');
+ const numFields = fields.length;
+ const saveBtn = $('#save');
+ const revertBtn = $('#revert');
+ let x;
+ let key;
+ let inputType;
+ let field;
// Handle unsaved changes
fields.on('change', function () {
app.flags = app.flags || {};
app.flags._unsaved = true;
});
- var defaultInputs = ['text', 'hidden', 'password', 'textarea', 'number'];
+ const defaultInputs = ['text', 'hidden', 'password', 'textarea', 'number'];
for (x = 0; x < numFields; x += 1) {
field = fields.eq(x);
key = field.attr('data-field');
inputType = field.attr('type');
if (app.config.hasOwnProperty(key)) {
if (field.is('input') && inputType === 'checkbox') {
- var checked = parseInt(app.config[key], 10) === 1;
+ const checked = parseInt(app.config[key], 10) === 1;
field.prop('checked', checked);
field.parents('.mdl-switch').toggleClass('is-checked', checked);
} else if (field.is('textarea') || field.is('select') || (field.is('input') && defaultInputs.indexOf(inputType) !== -1)) {
@@ -117,7 +117,7 @@ define('admin/settings', ['uploader', 'mousetrap', 'hooks'], function (uploader,
function handleUploads() {
$('#content input[data-action="upload"]').each(function () {
- var uploadBtn = $(this);
+ const uploadBtn = $(this);
uploadBtn.on('click', function () {
uploader.show({
title: uploadBtn.attr('data-title'),
@@ -146,13 +146,13 @@ define('admin/settings', ['uploader', 'mousetrap', 'hooks'], function (uploader,
};
function saveFields(fields, callback) {
- var data = {};
+ const data = {};
fields.each(function () {
- var field = $(this);
- var key = field.attr('data-field');
- var value;
- var inputType;
+ const field = $(this);
+ const key = field.attr('data-field');
+ let value;
+ let inputType;
if (field.is('input')) {
inputType = field.attr('type');
@@ -181,7 +181,7 @@ define('admin/settings', ['uploader', 'mousetrap', 'hooks'], function (uploader,
return callback(err);
}
- for (var field in data) {
+ for (const field in data) {
if (data.hasOwnProperty(field)) {
app.config[field] = data[field];
}
diff --git a/public/src/admin/settings/api.js b/public/src/admin/settings/api.js
index e2a755ee6c..6f70813a76 100644
--- a/public/src/admin/settings/api.js
+++ b/public/src/admin/settings/api.js
@@ -1,7 +1,7 @@
'use strict';
define('admin/settings/api', ['settings'], function (settings) {
- var ACP = {};
+ const ACP = {};
ACP.init = function () {
settings.load('core.api', $('.core-api-settings'));
diff --git a/public/src/admin/settings/cookies.js b/public/src/admin/settings/cookies.js
index ef663aff07..886fc7ad99 100644
--- a/public/src/admin/settings/cookies.js
+++ b/public/src/admin/settings/cookies.js
@@ -1,7 +1,7 @@
'use strict';
define('admin/settings/cookies', function () {
- var Module = {};
+ const Module = {};
Module.init = function () {
$('#delete-all-sessions').on('click', function () {
diff --git a/public/src/admin/settings/email.js b/public/src/admin/settings/email.js
index 8f2f7f46ed..83a6137e77 100644
--- a/public/src/admin/settings/email.js
+++ b/public/src/admin/settings/email.js
@@ -2,8 +2,8 @@
define('admin/settings/email', ['ace/ace', 'admin/settings'], function (ace) {
- var module = {};
- var emailEditor;
+ const module = {};
+ let emailEditor;
module.init = function () {
configureEmailTester();
@@ -40,14 +40,14 @@ define('admin/settings/email', ['ace/ace', 'admin/settings'], function (ace) {
emailEditor.getSession().setMode('ace/mode/html');
emailEditor.on('change', function () {
- var emailPath = $('#email-editor-selector').val();
- var original;
+ const emailPath = $('#email-editor-selector').val();
+ let original;
ajaxify.data.emails.forEach(function (email) {
if (email.path === emailPath) {
original = email.original;
}
});
- var newEmail = emailEditor.getValue();
+ const newEmail = emailEditor.getValue();
$('#email-editor-holder').val(newEmail !== original ? newEmail : '');
});
@@ -75,7 +75,7 @@ define('admin/settings/email', ['ace/ace', 'admin/settings'], function (ace) {
}
function handleDigestHourChange() {
- var hour = parseInt($('#digestHour').val(), 10);
+ let hour = parseInt($('#digestHour').val(), 10);
if (isNaN(hour)) {
hour = 17;
@@ -88,8 +88,8 @@ define('admin/settings/email', ['ace/ace', 'admin/settings'], function (ace) {
return app.alertError(err.message);
}
- var date = new Date(now.timestamp);
- var offset = (new Date().getTimezoneOffset() - now.offset) / 60;
+ const date = new Date(now.timestamp);
+ const offset = (new Date().getTimezoneOffset() - now.offset) / 60;
date.setHours(date.getHours() + offset);
$('#serverTime').text(date.toLocaleTimeString());
@@ -106,7 +106,7 @@ define('admin/settings/email', ['ace/ace', 'admin/settings'], function (ace) {
}
function handleSmtpServiceChange() {
- var isCustom = $('[id="email:smtpTransport:service"]').val() === 'nodebb-custom-smtp';
+ const isCustom = $('[id="email:smtpTransport:service"]').val() === 'nodebb-custom-smtp';
$('[id="email:smtpTransport:custom-service"]')[isCustom ? 'slideDown' : 'slideUp'](isCustom);
}
diff --git a/public/src/admin/settings/general.js b/public/src/admin/settings/general.js
index bf88ded896..805f9f1c8f 100644
--- a/public/src/admin/settings/general.js
+++ b/public/src/admin/settings/general.js
@@ -2,7 +2,7 @@
define('admin/settings/general', ['admin/settings'], function () {
- var Module = {};
+ const Module = {};
Module.init = function () {
$('button[data-action="removeLogo"]').on('click', function () {
diff --git a/public/src/admin/settings/homepage.js b/public/src/admin/settings/homepage.js
index 87c845921e..96447d9bbb 100644
--- a/public/src/admin/settings/homepage.js
+++ b/public/src/admin/settings/homepage.js
@@ -10,7 +10,7 @@ define('admin/settings/homepage', ['admin/settings'], function () {
}
}
- var Homepage = {};
+ const Homepage = {};
Homepage.init = function () {
$('[data-field="homePageRoute"]').on('change', toggleCustomRoute);
diff --git a/public/src/admin/settings/navigation.js b/public/src/admin/settings/navigation.js
index 563709ad0b..a2fef0a0d3 100644
--- a/public/src/admin/settings/navigation.js
+++ b/public/src/admin/settings/navigation.js
@@ -9,8 +9,8 @@ define('admin/settings/navigation', [
'jquery-ui/widgets/droppable',
'jquery-ui/widgets/sortable',
], function (translator, iconSelect, Benchpress) {
- var navigation = {};
- var available;
+ const navigation = {};
+ let available;
navigation.init = function () {
available = ajaxify.data.available;
@@ -27,10 +27,10 @@ define('admin/settings/navigation', [
});
$('#enabled').on('click', '.iconPicker', function () {
- var iconEl = $(this).find('i');
+ const iconEl = $(this).find('i');
iconSelect.init(iconEl, function (el) {
- var newIconClass = el.attr('value');
- var index = iconEl.parents('[data-index]').attr('data-index');
+ const newIconClass = el.attr('value');
+ const index = iconEl.parents('[data-index]').attr('data-index');
$('#active-navigation [data-index="' + index + '"] i').attr('class', 'fa fa-fw ' + newIconClass);
iconEl.siblings('[name="iconClass"]').val(newIconClass);
iconEl.siblings('.change-icon-link').toggleClass('hidden', !!newIconClass);
@@ -47,11 +47,11 @@ define('admin/settings/navigation', [
};
function onSelect() {
- var clickedIndex = $(this).attr('data-index');
+ const clickedIndex = $(this).attr('data-index');
$('#active-navigation li').removeClass('active');
$(this).addClass('active');
- var detailsForm = $('#enabled').children('[data-index="' + clickedIndex + '"]');
+ const detailsForm = $('#enabled').children('[data-index="' + clickedIndex + '"]');
$('#enabled li').addClass('hidden');
if (detailsForm.length) {
@@ -61,9 +61,9 @@ define('admin/settings/navigation', [
}
function drop(ev, ui) {
- var id = ui.helper.attr('data-id');
- var el = $('#active-navigation [data-id="' + id + '"]');
- var data = id === 'custom' ? { iconClass: 'fa-navicon', groups: available[0].groups } : available[id];
+ const id = ui.helper.attr('data-id');
+ const el = $('#active-navigation [data-id="' + id + '"]');
+ const data = id === 'custom' ? { iconClass: 'fa-navicon', groups: available[0].groups } : available[id];
data.enabled = false;
data.index = (parseInt($('#enabled').children().last().attr('data-index'), 10) || 0) + 1;
@@ -87,18 +87,18 @@ define('admin/settings/navigation', [
}
function save() {
- var nav = [];
+ const nav = [];
- var indices = [];
+ const indices = [];
$('#active-navigation li').each(function () {
indices.push($(this).attr('data-index'));
});
indices.forEach(function (index) {
- var el = $('#enabled').children('[data-index="' + index + '"]');
- var form = el.find('form').serializeArray();
- var data = {};
- var properties = {};
+ const el = $('#enabled').children('[data-index="' + index + '"]');
+ const form = el.find('form').serializeArray();
+ const data = {};
+ const properties = {};
form.forEach(function (input) {
if (input.name.slice(0, 9) === 'property:' && input.value === 'on') {
@@ -117,7 +117,7 @@ define('admin/settings/navigation', [
data.properties = {};
- for (var prop in properties) {
+ for (const prop in properties) {
if (properties.hasOwnProperty(prop)) {
data.properties[prop] = properties[prop];
}
@@ -136,15 +136,15 @@ define('admin/settings/navigation', [
}
function remove() {
- var index = $(this).parents('[data-index]').attr('data-index');
+ const index = $(this).parents('[data-index]').attr('data-index');
$('#active-navigation [data-index="' + index + '"]').remove();
$('#enabled [data-index="' + index + '"]').remove();
return false;
}
function toggle() {
- var btn = $(this);
- var disabled = btn.hasClass('btn-success');
+ const btn = $(this);
+ const disabled = btn.hasClass('btn-success');
translator.translate(disabled ? '[[admin/settings/navigation:btn.disable]]' : '[[admin/settings/navigation:btn.enable]]', function (html) {
btn.toggleClass('btn-warning').toggleClass('btn-success').html(html);
btn.parents('li').find('[name="enabled"]').val(disabled ? 'on' : '');
diff --git a/public/src/admin/settings/notifications.js b/public/src/admin/settings/notifications.js
index e58dc4c628..9235478482 100644
--- a/public/src/admin/settings/notifications.js
+++ b/public/src/admin/settings/notifications.js
@@ -3,10 +3,10 @@
define('admin/settings/notifications', [
'autocomplete',
], function (autocomplete) {
- var Notifications = {};
+ const Notifications = {};
Notifications.init = function () {
- var searchInput = $('[data-field="welcomeUid"]');
+ const searchInput = $('[data-field="welcomeUid"]');
autocomplete.user(searchInput, function (event, selected) {
setTimeout(function () {
searchInput.val(selected.item.user.uid);
diff --git a/public/src/admin/settings/social.js b/public/src/admin/settings/social.js
index 294357eb84..32ff8d7840 100644
--- a/public/src/admin/settings/social.js
+++ b/public/src/admin/settings/social.js
@@ -2,11 +2,11 @@
define('admin/settings/social', [], function () {
- var social = {};
+ const social = {};
social.init = function () {
$('#save').on('click', function () {
- var networks = [];
+ const networks = [];
$('#postSharingNetworks input[type="checkbox"]').each(function () {
if ($(this).prop('checked')) {
networks.push($(this).attr('id'));
diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js
index bafdff456a..d42a0b89d1 100644
--- a/public/src/ajaxify.js
+++ b/public/src/ajaxify.js
@@ -4,16 +4,16 @@
ajaxify = window.ajaxify || {};
(function () {
- var apiXHR = null;
- var ajaxifyTimer;
+ let apiXHR = null;
+ let ajaxifyTimer;
- var retry = true;
- var previousBodyClass = '';
+ let retry = true;
+ let previousBodyClass = '';
ajaxify.count = 0;
ajaxify.currentPage = null;
- var hooks;
+ let hooks;
require(['hooks'], function (_hooks) {
hooks = _hooks;
});
@@ -89,7 +89,7 @@ ajaxify = window.ajaxify || {};
// this function is called just once from footer on page load
ajaxify.coldLoad = function () {
- var url = ajaxify.start(window.location.pathname.slice(1) + window.location.search + window.location.hash);
+ const url = ajaxify.start(window.location.pathname.slice(1) + window.location.search + window.location.hash);
ajaxify.updateHistory(url, true);
ajaxify.end(url, ajaxify.data.template.name);
hooks.fire('action:ajaxify.coldLoad');
@@ -101,8 +101,8 @@ ajaxify = window.ajaxify || {};
ajaxify.handleRedirects = function (url) {
url = ajaxify.removeRelativePath(url.replace(/^\/|\/$/g, '')).toLowerCase();
- var isClientToAdmin = url.startsWith('admin') && window.location.pathname.indexOf(config.relative_path + '/admin') !== 0;
- var isAdminToClient = !url.startsWith('admin') && window.location.pathname.indexOf(config.relative_path + '/admin') === 0;
+ const isClientToAdmin = url.startsWith('admin') && window.location.pathname.indexOf(config.relative_path + '/admin') !== 0;
+ const isAdminToClient = !url.startsWith('admin') && window.location.pathname.indexOf(config.relative_path + '/admin') === 0;
if (isClientToAdmin || isAdminToClient) {
window.open(config.relative_path + '/' + url, '_top');
@@ -114,7 +114,7 @@ ajaxify = window.ajaxify || {};
ajaxify.start = function (url) {
url = ajaxify.removeRelativePath(url.replace(/^\/|\/$/g, ''));
- var payload = {
+ const payload = {
url: url,
};
@@ -135,11 +135,11 @@ ajaxify = window.ajaxify || {};
};
function onAjaxError(err, url, callback, quiet) {
- var data = err.data;
- var textStatus = err.textStatus;
+ const data = err.data;
+ const textStatus = err.textStatus;
if (data) {
- var status = parseInt(data.status, 10);
+ let status = parseInt(data.status, 10);
if (status === 403 || status === 404 || status === 500 || status === 502 || status === 503) {
if (status === 502 && retry) {
retry = false;
@@ -214,7 +214,7 @@ ajaxify = window.ajaxify || {};
// Allow translation strings in title on ajaxify (#5927)
title = translator.unescape(title);
- var data = { title: title };
+ const data = { title: title };
hooks.fire('action:ajaxify.updateTitle', data);
translator.translate(data.title, function (translated) {
window.document.title = $('
').html(translated).text();
@@ -223,16 +223,16 @@ ajaxify = window.ajaxify || {};
}
function updateTags() {
- var metaWhitelist = ['title', 'description', /og:.+/, /article:.+/, 'robots'].map(function (val) {
+ const metaWhitelist = ['title', 'description', /og:.+/, /article:.+/, 'robots'].map(function (val) {
return new RegExp(val);
});
- var linkWhitelist = ['canonical', 'alternate', 'up'];
+ const linkWhitelist = ['canonical', 'alternate', 'up'];
// Delete the old meta tags
Array.prototype.slice
.call(document.querySelectorAll('head meta'))
.filter(function (el) {
- var name = el.getAttribute('property') || el.getAttribute('name');
+ const name = el.getAttribute('property') || el.getAttribute('name');
return metaWhitelist.some(function (exp) {
return !!exp.test(name);
});
@@ -244,7 +244,7 @@ ajaxify = window.ajaxify || {};
// Add new meta tags
ajaxify.data._header.tags.meta
.filter(function (tagObj) {
- var name = tagObj.name || tagObj.property;
+ const name = tagObj.name || tagObj.property;
return metaWhitelist.some(function (exp) {
return !!exp.test(name);
});
@@ -252,7 +252,7 @@ ajaxify = window.ajaxify || {};
if (tagObj.content) {
tagObj.content = await translator.translate(tagObj.content);
}
- var metaEl = document.createElement('meta');
+ const metaEl = document.createElement('meta');
Object.keys(tagObj).forEach(function (prop) {
metaEl.setAttribute(prop, tagObj[prop]);
});
@@ -264,7 +264,7 @@ ajaxify = window.ajaxify || {};
Array.prototype.slice
.call(document.querySelectorAll('head link'))
.filter(function (el) {
- var name = el.getAttribute('rel');
+ const name = el.getAttribute('rel');
return linkWhitelist.some(function (item) {
return item === name;
});
@@ -281,7 +281,7 @@ ajaxify = window.ajaxify || {};
});
})
.forEach(function (tagObj) {
- var linkEl = document.createElement('link');
+ const linkEl = document.createElement('link');
Object.keys(tagObj).forEach(function (prop) {
linkEl.setAttribute(prop, tagObj[prop]);
});
@@ -305,7 +305,7 @@ ajaxify = window.ajaxify || {};
};
ajaxify.parseData = function () {
- var dataEl = $('#ajaxify-data');
+ const dataEl = $('#ajaxify-data');
if (dataEl.length) {
ajaxify.data = JSON.parse(dataEl.text());
dataEl.remove();
@@ -324,7 +324,7 @@ ajaxify = window.ajaxify || {};
};
ajaxify.loadScript = function (tpl_url, callback) {
- var location = !app.inAdmin ? 'forum/' : '';
+ let location = !app.inAdmin ? 'forum/' : '';
if (tpl_url.startsWith('admin')) {
location = '';
@@ -338,7 +338,7 @@ ajaxify = window.ajaxify || {};
hooks.fire('action:script.load', data);
hooks.fire('filter:script.load', data).then((data) => {
// Require and parse modules
- var outstanding = data.scripts.length;
+ let outstanding = data.scripts.length;
data.scripts.map(function (script) {
if (typeof script === 'function') {
@@ -440,7 +440,7 @@ ajaxify = window.ajaxify || {};
}());
$(document).ready(function () {
- var hooks;
+ let hooks;
require(['hooks'], function (_hooks) {
hooks = _hooks;
});
@@ -466,26 +466,26 @@ $(document).ready(function () {
// eslint-disable-next-line no-script-url
return href === undefined || href === '' || href === 'javascript:;';
}
- var location = document.location || window.location;
- var rootUrl = location.protocol + '//' + (location.hostname || location.host) + (location.port ? ':' + location.port : '');
- var contentEl = document.getElementById('content');
+ const location = document.location || window.location;
+ const rootUrl = location.protocol + '//' + (location.hostname || location.host) + (location.port ? ':' + location.port : '');
+ const contentEl = document.getElementById('content');
// Enhancing all anchors to ajaxify...
$(document.body).on('click', 'a', function (e) {
- var _self = this;
+ const _self = this;
if (this.target !== '' || (this.protocol !== 'http:' && this.protocol !== 'https:')) {
return;
}
- var $this = $(this);
- var href = $this.attr('href');
- var internalLink = utils.isInternalURI(this, window.location, config.relative_path);
+ const $this = $(this);
+ const href = $this.attr('href');
+ const internalLink = utils.isInternalURI(this, window.location, config.relative_path);
const rootAndPath = new RegExp(`^${rootUrl}${config.relative_path}/?`);
- var process = function () {
+ const process = function () {
if (!e.ctrlKey && !e.shiftKey && !e.metaKey && e.which === 1) {
if (internalLink) {
- var pathname = this.href.replace(rootAndPath, '');
+ const pathname = this.href.replace(rootAndPath, '');
// Special handling for urls with hashes
if (window.location.pathname === this.pathname && this.hash.length) {
@@ -495,13 +495,13 @@ $(document).ready(function () {
}
} else if (window.location.pathname !== config.relative_path + '/outgoing') {
if (config.openOutgoingLinksInNewTab && $.contains(contentEl, this)) {
- var externalTab = window.open();
+ const externalTab = window.open();
externalTab.opener = null;
externalTab.location = this.href;
e.preventDefault();
} else if (config.useOutgoingLinksPage) {
- var safeUrls = config.outgoingLinksWhitelist.trim().split(/[\s,]+/g).filter(Boolean);
- var href = this.href;
+ const safeUrls = config.outgoingLinksWhitelist.trim().split(/[\s,]+/g).filter(Boolean);
+ const href = this.href;
if (!safeUrls.length || !safeUrls.some(function (url) { return href.indexOf(url) !== -1; })) {
ajaxify.go('outgoing?url=' + encodeURIComponent(href));
e.preventDefault();
diff --git a/public/src/app.js b/public/src/app.js
index ad153ed5db..0881a96839 100644
--- a/public/src/app.js
+++ b/public/src/app.js
@@ -10,15 +10,15 @@ app.flags = {};
app.cacheBuster = null;
(function () {
- var appLoaded = false;
- var params = utils.params();
- var showWelcomeMessage = !!params.loggedin;
- var registerMessage = params.register;
- var isTouchDevice = utils.isTouchDevice();
+ let appLoaded = false;
+ const params = utils.params();
+ let showWelcomeMessage = !!params.loggedin;
+ let registerMessage = params.register;
+ const isTouchDevice = utils.isTouchDevice();
app.cacheBuster = config['cache-buster'];
- var hooks;
+ let hooks;
require(['hooks'], function (_hooks) {
hooks = _hooks;
});
@@ -46,10 +46,10 @@ app.cacheBuster = null;
* e.g. New Topic/Reply, post tools
*/
if (document.body) {
- var earlyQueue = []; // once we can ES6, use Set instead
- var earlyClick = function (ev) {
- var btnEl = ev.target.closest('button');
- var anchorEl = ev.target.closest('a');
+ let earlyQueue = []; // once we can ES6, use Set instead
+ const earlyClick = function (ev) {
+ let btnEl = ev.target.closest('button');
+ const anchorEl = ev.target.closest('a');
if (!btnEl && anchorEl && (anchorEl.getAttribute('data-ajaxify') === 'false' || anchorEl.href === '#')) {
btnEl = anchorEl;
}
@@ -250,7 +250,7 @@ app.cacheBuster = null;
app.enterRoom = function (room, callback) {
callback = callback || function () { };
if (socket && app.user.uid && app.currentRoom !== room) {
- var previousRoom = app.currentRoom;
+ const previousRoom = app.currentRoom;
app.currentRoom = room;
socket.emit('meta.rooms.enter', {
enter: room,
@@ -269,7 +269,7 @@ app.cacheBuster = null;
if (!socket || config.maintenanceMode) {
return;
}
- var previousRoom = app.currentRoom;
+ const previousRoom = app.currentRoom;
app.currentRoom = '';
socket.emit('meta.rooms.leaveCurrent', function (err) {
if (err) {
@@ -329,7 +329,7 @@ app.cacheBuster = null;
};
app.showMessages = function () {
- var messages = {
+ const messages = {
login: {
format: 'alert',
title: '[[global:welcome_back]] ' + app.user.username + '!',
@@ -456,7 +456,7 @@ app.cacheBuster = null;
};
function createHeaderTooltips() {
- var env = utils.findBootstrapEnvironment();
+ const env = utils.findBootstrapEnvironment();
if (env === 'xs' || env === 'sm' || isTouchDevice) {
return;
}
@@ -488,17 +488,17 @@ app.cacheBuster = null;
return;
}
/* eslint-disable-next-line */
- var searchOptions = Object.assign({ in: config.searchDefaultInQuick || 'titles' }, options.searchOptions);
- var quickSearchResults = options.searchElements.resultEl;
- var inputEl = options.searchElements.inputEl;
- var oldValue = inputEl.val();
- var filterCategoryEl = quickSearchResults.find('.filter-category');
+ const searchOptions = Object.assign({ in: config.searchDefaultInQuick || 'titles' }, options.searchOptions);
+ const quickSearchResults = options.searchElements.resultEl;
+ const inputEl = options.searchElements.inputEl;
+ let oldValue = inputEl.val();
+ const filterCategoryEl = quickSearchResults.find('.filter-category');
function updateCategoryFilterName() {
if (ajaxify.data.template.category) {
require(['translator'], function (translator) {
translator.translate('[[search:search-in-category, ' + ajaxify.data.name + ']]', function (translated) {
- var name = $('
').html(translated).text();
+ const name = $('
').html(translated).text();
filterCategoryEl.find('.name').text(name);
});
});
@@ -530,8 +530,8 @@ app.cacheBuster = null;
return quickSearchResults.addClass('hidden').find('.quick-search-results-container').html('');
}
data.posts.forEach(function (p) {
- var text = $('
' + p.content + '
').text();
- var start = Math.max(0, text.toLowerCase().indexOf(inputEl.val().toLowerCase()) - 40);
+ const text = $('
' + p.content + '
').text();
+ const start = Math.max(0, text.toLowerCase().indexOf(inputEl.val().toLowerCase()) - 40);
p.snippet = utils.escapeHTML((start > 0 ? '...' : '') +
text.slice(start, start + 80) +
(text.length - start > 80 ? '...' : ''));
@@ -543,7 +543,7 @@ app.cacheBuster = null;
quickSearchResults.toggleClass('hidden', !html.length || !inputEl.is(':focus'))
.find('.quick-search-results-container')
.html(html.length ? html : '');
- var highlightEls = quickSearchResults.find(
+ const highlightEls = quickSearchResults.find(
'.quick-search-results .quick-search-title, .quick-search-results .snippet'
);
search.highlightMatches(options.searchOptions.term, highlightEls);
@@ -577,7 +577,7 @@ app.cacheBuster = null;
doSearch();
}, 250));
- var mousedownOnResults = false;
+ let mousedownOnResults = false;
quickSearchResults.on('mousedown', function () {
$(window).one('mouseup', function () {
quickSearchResults.addClass('hidden');
@@ -607,10 +607,10 @@ app.cacheBuster = null;
app.handleSearch = function (searchOptions) {
searchOptions = searchOptions || { in: config.searchDefaultInQuick || 'titles' };
- var searchButton = $('#search-button');
- var searchFields = $('#search-fields');
- var searchInput = $('#search-fields input');
- var quickSearchContainer = $('#quick-search-container');
+ const searchButton = $('#search-button');
+ const searchFields = $('#search-fields');
+ const searchInput = $('#search-fields input');
+ const quickSearchContainer = $('#quick-search-container');
$('#search-form .advanced-search-link').off('mousedown').on('mousedown', function () {
ajaxify.go('/search');
@@ -622,7 +622,7 @@ app.cacheBuster = null;
searchInput.off('blur').on('blur', dismissSearch);
searchInput.off('focus');
- var searchElements = {
+ const searchElements = {
inputEl: searchInput,
resultEl: quickSearchContainer,
};
@@ -657,9 +657,9 @@ app.cacheBuster = null;
});
$('#search-form').off('submit').on('submit', function () {
- var input = $(this).find('input');
+ const input = $(this).find('input');
require(['search'], function (search) {
- var data = search.getSearchPreferences();
+ const data = search.getSearchPreferences();
data.term = input.val();
hooks.fire('action:search.submit', {
searchOptions: data,
@@ -681,7 +681,7 @@ app.cacheBuster = null;
function handleStatusChange() {
$('[component="header/usercontrol"] [data-status]').off('click').on('click', function (e) {
- var status = $(this).attr('data-status');
+ const status = $(this).attr('data-status');
socket.emit('user.setStatus', status, function (err) {
if (err) {
return app.alertError(err.message);
@@ -758,7 +758,7 @@ app.cacheBuster = null;
if (!showModal || !app.user.uid || parseInt(storage.getItem('email-confirm-dismiss'), 10) === 1) {
return;
}
- var msg = {
+ const msg = {
alert_id: 'email_confirm',
type: 'warning',
timeout: 0,
@@ -837,8 +837,8 @@ app.cacheBuster = null;
$(document.body).append(html);
$(document.body).addClass('cookie-consent-open');
- var warningEl = $('.cookie-consent');
- var dismissEl = warningEl.find('button');
+ const warningEl = $('.cookie-consent');
+ const dismissEl = warningEl.find('button');
dismissEl.on('click', function () {
// Save consent cookie and remove warning element
storage.setItem('cookieconsent', '1');
diff --git a/public/src/client/account/best.js b/public/src/client/account/best.js
index ebd61760bc..b8327a3e39 100644
--- a/public/src/client/account/best.js
+++ b/public/src/client/account/best.js
@@ -2,7 +2,7 @@
define('forum/account/best', ['forum/account/header', 'forum/account/posts'], function (header, posts) {
- var Best = {};
+ const Best = {};
Best.init = function () {
header.init();
diff --git a/public/src/client/account/blocks.js b/public/src/client/account/blocks.js
index 0469cf957d..98bd96a8ff 100644
--- a/public/src/client/account/blocks.js
+++ b/public/src/client/account/blocks.js
@@ -5,13 +5,13 @@ define('forum/account/blocks', [
'api',
'hooks',
], function (header, api, hooks) {
- var Blocks = {};
+ const Blocks = {};
Blocks.init = function () {
header.init();
$('#user-search').on('keyup', function () {
- var username = this.value;
+ const username = this.value;
api.get('/api/users', {
query: username,
@@ -36,7 +36,7 @@ define('forum/account/blocks', [
});
$('.block-edit').on('click', '[data-action="toggle"]', function () {
- var uid = parseInt(this.getAttribute('data-uid'), 10);
+ const uid = parseInt(this.getAttribute('data-uid'), 10);
socket.emit('user.toggleBlock', {
blockeeUid: uid,
blockerUid: ajaxify.data.uid,
diff --git a/public/src/client/account/bookmarks.js b/public/src/client/account/bookmarks.js
index 56f9983e9f..4959a24d73 100644
--- a/public/src/client/account/bookmarks.js
+++ b/public/src/client/account/bookmarks.js
@@ -2,7 +2,7 @@
define('forum/account/bookmarks', ['forum/account/header', 'forum/account/posts'], function (header, posts) {
- var Bookmarks = {};
+ const Bookmarks = {};
Bookmarks.init = function () {
header.init();
diff --git a/public/src/client/account/categories.js b/public/src/client/account/categories.js
index 1522af929a..49a52b68cd 100644
--- a/public/src/client/account/categories.js
+++ b/public/src/client/account/categories.js
@@ -2,7 +2,7 @@
define('forum/account/categories', ['forum/account/header'], function (header) {
- var Categories = {};
+ const Categories = {};
Categories.init = function () {
header.init();
@@ -12,8 +12,8 @@ define('forum/account/categories', ['forum/account/header'], function (header) {
});
$('[component="category/watch/all"]').find('[component="category/watching"], [component="category/ignoring"], [component="category/notwatching"]').on('click', function () {
- var cids = [];
- var state = $(this).attr('data-state');
+ const cids = [];
+ const state = $(this).attr('data-state');
$('[data-parent-cid="0"]').each(function (index, el) {
cids.push($(el).attr('data-cid'));
});
@@ -28,10 +28,10 @@ define('forum/account/categories', ['forum/account/header'], function (header) {
};
function handleIgnoreWatch(cid) {
- var category = $('[data-cid="' + cid + '"]');
+ const category = $('[data-cid="' + cid + '"]');
category.find('[component="category/watching"], [component="category/ignoring"], [component="category/notwatching"]').on('click', function () {
- var $this = $(this);
- var state = $this.attr('data-state');
+ const $this = $(this);
+ const state = $this.attr('data-state');
socket.emit('categories.setWatchState', { cid: cid, state: state, uid: ajaxify.data.uid }, function (err, modified_cids) {
if (err) {
@@ -46,7 +46,7 @@ define('forum/account/categories', ['forum/account/header'], function (header) {
function updateDropdowns(modified_cids, state) {
modified_cids.forEach(function (cid) {
- var category = $('[data-cid="' + cid + '"]');
+ const category = $('[data-cid="' + cid + '"]');
category.find('[component="category/watching/menu"]').toggleClass('hidden', state !== 'watching');
category.find('[component="category/watching/check"]').toggleClass('fa-check', state === 'watching');
diff --git a/public/src/client/account/consent.js b/public/src/client/account/consent.js
index f53bc365b0..01e97bb4cf 100644
--- a/public/src/client/account/consent.js
+++ b/public/src/client/account/consent.js
@@ -2,7 +2,7 @@
define('forum/account/consent', ['forum/account/header'], function (header) {
- var Consent = {};
+ const Consent = {};
Consent.init = function () {
header.init();
diff --git a/public/src/client/account/downvoted.js b/public/src/client/account/downvoted.js
index 86252758d8..4ebf742237 100644
--- a/public/src/client/account/downvoted.js
+++ b/public/src/client/account/downvoted.js
@@ -2,7 +2,7 @@
define('forum/account/downvoted', ['forum/account/header', 'forum/account/posts'], function (header, posts) {
- var Downvoted = {};
+ const Downvoted = {};
Downvoted.init = function () {
header.init();
diff --git a/public/src/client/account/edit.js b/public/src/client/account/edit.js
index dc22e3ca88..6a001084fc 100644
--- a/public/src/client/account/edit.js
+++ b/public/src/client/account/edit.js
@@ -8,7 +8,7 @@ define('forum/account/edit', [
'hooks',
'bootbox',
], function (header, picture, translator, api, hooks, bootbox) {
- var AccountEdit = {};
+ const AccountEdit = {};
AccountEdit.init = function () {
header.init();
@@ -64,12 +64,12 @@ define('forum/account/edit', [
function handleAccountDelete() {
$('#deleteAccountBtn').on('click', function () {
translator.translate('[[user:delete_account_confirm]]', function (translated) {
- var modal = bootbox.confirm(translated + '
', function (confirm) {
+ const modal = bootbox.confirm(translated + '
', function (confirm) {
if (!confirm) {
return;
}
- var confirmBtn = modal.find('.btn-primary');
+ const confirmBtn = modal.find('.btn-primary');
confirmBtn.html('
');
confirmBtn.prop('disabled', true);
@@ -105,7 +105,7 @@ define('forum/account/edit', [
function handleEmailConfirm() {
$('#confirm-email').on('click', function () {
- var btn = $(this).attr('disabled', true);
+ const btn = $(this).attr('disabled', true);
socket.emit('user.emailConfirm', {}, function (err) {
btn.removeAttr('disabled');
if (err) {
@@ -121,7 +121,7 @@ define('forum/account/edit', [
}
function updateSignature() {
- var el = $('#signature');
+ const el = $('#signature');
$('#signatureCharCountLeft').html(getCharsLeft(el, ajaxify.data.maximumSignatureLength));
el.on('keyup change', function () {
@@ -130,7 +130,7 @@ define('forum/account/edit', [
}
function updateAboutMe() {
- var el = $('#aboutme');
+ const el = $('#aboutme');
$('#aboutMeCharCountLeft').html(getCharsLeft(el, ajaxify.data.maximumAboutMeLength));
el.on('keyup change', function () {
@@ -140,11 +140,11 @@ define('forum/account/edit', [
function handleGroupSort() {
function move(direction) {
- var selected = $('#groupTitle').val();
+ const selected = $('#groupTitle').val();
if (!ajaxify.data.allowMultipleBadges || (Array.isArray(selected) && selected.length > 1)) {
return;
}
- var el = $('#groupTitle').find(':selected');
+ const el = $('#groupTitle').find(':selected');
if (el.length && el.val()) {
if (direction > 0) {
el.insertAfter(el.next());
diff --git a/public/src/client/account/edit/email.js b/public/src/client/account/edit/email.js
index 824b7aaf5e..96d40877ff 100644
--- a/public/src/client/account/edit/email.js
+++ b/public/src/client/account/edit/email.js
@@ -1,14 +1,14 @@
'use strict';
define('forum/account/edit/email', ['forum/account/header', 'api'], function (header, api) {
- var AccountEditEmail = {};
+ const AccountEditEmail = {};
AccountEditEmail.init = function () {
header.init();
$('#submitBtn').on('click', function () {
- var curPasswordEl = $('#inputCurrentPassword');
- var userData = {
+ const curPasswordEl = $('#inputCurrentPassword');
+ const userData = {
uid: $('#inputUID').val(),
email: $('#inputNewEmail').val(),
password: curPasswordEl.val(),
@@ -23,7 +23,7 @@ define('forum/account/edit/email', ['forum/account/header', 'api'], function (he
return app.alertError('[[user:email_same_as_password]]');
}
- var btn = $(this);
+ const btn = $(this);
btn.addClass('disabled').find('i').removeClass('hide');
api.put('/users/' + userData.uid, userData).then((res) => {
diff --git a/public/src/client/account/edit/password.js b/public/src/client/account/edit/password.js
index 99b8cdde71..1e9257790a 100644
--- a/public/src/client/account/edit/password.js
+++ b/public/src/client/account/edit/password.js
@@ -3,7 +3,7 @@
define('forum/account/edit/password', [
'forum/account/header', 'translator', 'zxcvbn', 'api',
], function (header, translator, zxcvbn, api) {
- var AccountEditPassword = {};
+ const AccountEditPassword = {};
AccountEditPassword.init = function () {
header.init();
@@ -12,16 +12,16 @@ define('forum/account/edit/password', [
};
function handlePasswordChange() {
- var currentPassword = $('#inputCurrentPassword');
- var password_notify = $('#password-notify');
- var password_confirm_notify = $('#password-confirm-notify');
- var password = $('#inputNewPassword');
- var password_confirm = $('#inputNewPasswordAgain');
- var passwordvalid = false;
- var passwordsmatch = false;
+ const currentPassword = $('#inputCurrentPassword');
+ const password_notify = $('#password-notify');
+ const password_confirm_notify = $('#password-confirm-notify');
+ const password = $('#inputNewPassword');
+ const password_confirm = $('#inputNewPasswordAgain');
+ let passwordvalid = false;
+ let passwordsmatch = false;
function onPasswordChanged() {
- var passwordStrength = zxcvbn(password.val());
+ const passwordStrength = zxcvbn(password.val());
passwordvalid = false;
if (password.val().length < ajaxify.data.minimumPasswordLength) {
showError(password_notify, '[[reset_password:password_too_short]]');
@@ -65,7 +65,7 @@ define('forum/account/edit/password', [
onPasswordChanged();
onPasswordConfirmChanged();
- var btn = $(this);
+ const btn = $(this);
if (passwordvalid && passwordsmatch) {
btn.addClass('disabled').find('i').removeClass('hide');
api.put('/users/' + ajaxify.data.theirid + '/password', {
diff --git a/public/src/client/account/edit/username.js b/public/src/client/account/edit/username.js
index 487b7872ee..a854a4b520 100644
--- a/public/src/client/account/edit/username.js
+++ b/public/src/client/account/edit/username.js
@@ -3,13 +3,13 @@
define('forum/account/edit/username', [
'forum/account/header', 'api', 'slugify',
], function (header, api, slugify) {
- var AccountEditUsername = {};
+ const AccountEditUsername = {};
AccountEditUsername.init = function () {
header.init();
$('#submitBtn').on('click', function updateUsername() {
- var userData = {
+ const userData = {
uid: $('#inputUID').val(),
username: $('#inputNewUsername').val(),
password: $('#inputCurrentPassword').val(),
@@ -23,11 +23,11 @@ define('forum/account/edit/username', [
return app.alertError('[[user:username_same_as_password]]');
}
- var btn = $(this);
+ const btn = $(this);
btn.addClass('disabled').find('i').removeClass('hide');
api.put('/users/' + userData.uid, userData).then((response) => {
- var userslug = slugify(userData.username);
+ const userslug = slugify(userData.username);
if (userData.username && userslug && parseInt(userData.uid, 10) === parseInt(app.user.uid, 10)) {
$('[component="header/profilelink"]').attr('href', config.relative_path + '/user/' + userslug);
$('[component="header/profilelink/edit"]').attr('href', config.relative_path + '/user/' + userslug + '/edit');
diff --git a/public/src/client/account/followers.js b/public/src/client/account/followers.js
index bae7343262..89b67561d8 100644
--- a/public/src/client/account/followers.js
+++ b/public/src/client/account/followers.js
@@ -2,7 +2,7 @@
define('forum/account/followers', ['forum/account/header'], function (header) {
- var Followers = {};
+ const Followers = {};
Followers.init = function () {
header.init();
diff --git a/public/src/client/account/following.js b/public/src/client/account/following.js
index 5881ae1bec..8bc5c92614 100644
--- a/public/src/client/account/following.js
+++ b/public/src/client/account/following.js
@@ -2,7 +2,7 @@
define('forum/account/following', ['forum/account/header'], function (header) {
- var Following = {};
+ const Following = {};
Following.init = function () {
header.init();
diff --git a/public/src/client/account/groups.js b/public/src/client/account/groups.js
index ba3fb3ce7c..17c78b1aa4 100644
--- a/public/src/client/account/groups.js
+++ b/public/src/client/account/groups.js
@@ -2,15 +2,15 @@
define('forum/account/groups', ['forum/account/header'], function (header) {
- var AccountTopics = {};
+ const AccountTopics = {};
AccountTopics.init = function () {
header.init();
- var groupsEl = $('#groups-list');
+ const groupsEl = $('#groups-list');
groupsEl.on('click', '.list-cover', function () {
- var groupSlug = $(this).parents('[data-slug]').attr('data-slug');
+ const groupSlug = $(this).parents('[data-slug]').attr('data-slug');
ajaxify.go('groups/' + groupSlug);
});
diff --git a/public/src/client/account/header.js b/public/src/client/account/header.js
index 258e16246c..e46bded766 100644
--- a/public/src/client/account/header.js
+++ b/public/src/client/account/header.js
@@ -11,8 +11,8 @@ define('forum/account/header', [
'api',
'bootbox',
], function (coverPhoto, pictureCropper, components, translator, Benchpress, AccountsDelete, api, bootbox) {
- var AccountHeader = {};
- var isAdminOrSelfOrGlobalMod;
+ const AccountHeader = {};
+ let isAdminOrSelfOrGlobalMod;
AccountHeader.init = function () {
isAdminOrSelfOrGlobalMod = ajaxify.data.isAdmin || ajaxify.data.isSelf || ajaxify.data.isGlobalModerator;
@@ -78,7 +78,7 @@ define('forum/account/header', [
function selectActivePill() {
$('.account-sub-links li').removeClass('active').each(function () {
- var href = $(this).find('a').attr('href');
+ const href = $(this).find('a').attr('href');
if (decodeURIComponent(href) === decodeURIComponent(window.location.pathname)) {
$(this).addClass('active');
@@ -146,12 +146,12 @@ define('forum/account/header', [
submit: {
label: '[[user:ban_account]]',
callback: function () {
- var formData = $('.ban-modal form').serializeArray().reduce(function (data, cur) {
+ const formData = $('.ban-modal form').serializeArray().reduce(function (data, cur) {
data[cur.name] = cur.value;
return data;
}, {});
- var until = formData.length > 0 ? (
+ const until = formData.length > 0 ? (
Date.now() + (formData.length * 1000 * 60 * 60 * (parseInt(formData.unit, 10) ? 24 : 1))
) : 0;
@@ -188,7 +188,7 @@ define('forum/account/header', [
}
function toggleBlockAccount() {
- var targetEl = this;
+ const targetEl = this;
socket.emit('user.toggleBlock', {
blockeeUid: ajaxify.data.uid,
blockerUid: app.user.uid,
diff --git a/public/src/client/account/ignored.js b/public/src/client/account/ignored.js
index 0664325d8e..802985e141 100644
--- a/public/src/client/account/ignored.js
+++ b/public/src/client/account/ignored.js
@@ -1,7 +1,7 @@
'use strict';
define('forum/account/ignored', ['forum/account/header', 'forum/account/topics'], function (header, topics) {
- var AccountIgnored = {};
+ const AccountIgnored = {};
AccountIgnored.init = function () {
header.init();
diff --git a/public/src/client/account/info.js b/public/src/client/account/info.js
index 05631ffa4f..9a653fb582 100644
--- a/public/src/client/account/info.js
+++ b/public/src/client/account/info.js
@@ -2,7 +2,7 @@
define('forum/account/info', ['forum/account/header', 'components', 'forum/account/sessions'], function (header, components, sessions) {
- var Info = {};
+ const Info = {};
Info.init = function () {
header.init();
@@ -12,15 +12,15 @@ define('forum/account/info', ['forum/account/header', 'components', 'forum/accou
function handleModerationNote() {
$('[component="account/save-moderation-note"]').on('click', function () {
- var note = $('[component="account/moderation-note"]').val();
+ const note = $('[component="account/moderation-note"]').val();
socket.emit('user.setModerationNote', { uid: ajaxify.data.uid, note: note }, function (err) {
if (err) {
return app.alertError(err.message);
}
$('[component="account/moderation-note"]').val('');
app.alertSuccess('[[user:info.moderation-note.success]]');
- var timestamp = Date.now();
- var data = [{
+ const timestamp = Date.now();
+ const data = [{
note: utils.escapeHTML(note),
user: app.user,
timestamp: timestamp,
diff --git a/public/src/client/account/posts.js b/public/src/client/account/posts.js
index dbf1a6f7d8..27442e21a5 100644
--- a/public/src/client/account/posts.js
+++ b/public/src/client/account/posts.js
@@ -2,10 +2,10 @@
define('forum/account/posts', ['forum/account/header', 'forum/infinitescroll', 'hooks'], function (header, infinitescroll, hooks) {
- var AccountPosts = {};
+ const AccountPosts = {};
- var template;
- var page = 1;
+ let template;
+ let page = 1;
AccountPosts.init = function () {
header.init();
@@ -27,7 +27,7 @@ define('forum/account/posts', ['forum/account/header', 'forum/infinitescroll', '
if (direction < 0) {
return;
}
- var params = utils.params();
+ const params = utils.params();
page += 1;
params.page = page;
diff --git a/public/src/client/account/profile.js b/public/src/client/account/profile.js
index 421c108113..63024e4d04 100644
--- a/public/src/client/account/profile.js
+++ b/public/src/client/account/profile.js
@@ -5,7 +5,7 @@ define('forum/account/profile', [
'forum/account/header',
'bootbox',
], function (header, bootbox) {
- var Account = {};
+ const Account = {};
Account.init = function () {
header.init();
diff --git a/public/src/client/account/sessions.js b/public/src/client/account/sessions.js
index f9dab2419f..13414bda6a 100644
--- a/public/src/client/account/sessions.js
+++ b/public/src/client/account/sessions.js
@@ -2,7 +2,7 @@
define('forum/account/sessions', ['forum/account/header', 'components', 'api'], function (header, components, api) {
- var Sessions = {};
+ const Sessions = {};
Sessions.init = function () {
header.init();
@@ -11,8 +11,8 @@ define('forum/account/sessions', ['forum/account/header', 'components', 'api'],
Sessions.prepareSessionRevocation = function () {
components.get('user/sessions').on('click', '[data-action]', function () {
- var parentEl = $(this).parents('[data-uuid]');
- var uuid = parentEl.attr('data-uuid');
+ const parentEl = $(this).parents('[data-uuid]');
+ const uuid = parentEl.attr('data-uuid');
if (uuid) {
// This is done via DELETE because a user shouldn't be able to
@@ -21,7 +21,7 @@ define('forum/account/sessions', ['forum/account/header', 'components', 'api'],
parentEl.remove();
}).catch((err) => {
try {
- var errorObj = JSON.parse(err.responseText);
+ const errorObj = JSON.parse(err.responseText);
if (errorObj.loggedIn === false) {
window.location.href = config.relative_path + '/login?error=' + errorObj.title;
}
diff --git a/public/src/client/account/settings.js b/public/src/client/account/settings.js
index 7994e552de..995fbbd4b6 100644
--- a/public/src/client/account/settings.js
+++ b/public/src/client/account/settings.js
@@ -2,7 +2,7 @@
define('forum/account/settings', ['forum/account/header', 'components', 'translator', 'api'], function (header, components, translator, api) {
- var AccountSettings = {};
+ const AccountSettings = {};
// If page skin is changed but not saved, switch the skin back
$(window).on('action:ajaxify.start', function () {
@@ -15,7 +15,7 @@ define('forum/account/settings', ['forum/account/header', 'components', 'transla
header.init();
$('#submitBtn').on('click', function () {
- var settings = loadSettings();
+ const settings = loadSettings();
if (settings.homePageRoute === 'custom' && settings.homePageCustom) {
$.get(config.relative_path + '/' + settings.homePageCustom, function () {
@@ -42,11 +42,11 @@ define('forum/account/settings', ['forum/account/header', 'components', 'transla
};
function loadSettings() {
- var settings = {};
+ const settings = {};
$('.account').find('input, textarea, select').each(function (id, input) {
input = $(input);
- var setting = input.attr('data-property');
+ const setting = input.attr('data-property');
if (input.is('select')) {
settings[setting] = input.val();
return;
@@ -68,8 +68,8 @@ define('forum/account/settings', ['forum/account/header', 'components', 'transla
function saveSettings(settings) {
api.put(`/users/${ajaxify.data.uid}/settings`, { settings }).then((newSettings) => {
app.alertSuccess('[[success:settings-saved]]');
- var languageChanged = false;
- for (var key in newSettings) {
+ let languageChanged = false;
+ for (const key in newSettings) {
if (newSettings.hasOwnProperty(key)) {
if (key === 'userLang' && config.userLang !== newSettings.userLang) {
languageChanged = true;
@@ -82,7 +82,7 @@ define('forum/account/settings', ['forum/account/header', 'components', 'transla
if (languageChanged && parseInt(app.user.uid, 10) === parseInt(ajaxify.data.theirid, 10)) {
translator.translate('[[language:dir]]', config.userLang, function (translated) {
- var htmlEl = $('html');
+ const htmlEl = $('html');
htmlEl.attr('data-dir', translated);
htmlEl.css('direction', translated);
});
@@ -105,20 +105,20 @@ define('forum/account/settings', ['forum/account/header', 'components', 'transla
}
function reskin(skinName) {
- var clientEl = Array.prototype.filter.call(document.querySelectorAll('link[rel="stylesheet"]'), function (el) {
+ const clientEl = Array.prototype.filter.call(document.querySelectorAll('link[rel="stylesheet"]'), function (el) {
return el.href.indexOf(config.relative_path + '/assets/client') !== -1;
})[0] || null;
if (!clientEl) {
return;
}
- var currentSkinClassName = $('body').attr('class').split(/\s+/).filter(function (className) {
+ const currentSkinClassName = $('body').attr('class').split(/\s+/).filter(function (className) {
return className.startsWith('skin-');
});
if (!currentSkinClassName[0]) {
return;
}
- var currentSkin = currentSkinClassName[0].slice(5);
+ let currentSkin = currentSkinClassName[0].slice(5);
currentSkin = currentSkin !== 'noskin' ? currentSkin : '';
// Stop execution if skin didn't change
@@ -126,7 +126,7 @@ define('forum/account/settings', ['forum/account/header', 'components', 'transla
return;
}
- var linkEl = document.createElement('link');
+ const linkEl = document.createElement('link');
linkEl.rel = 'stylesheet';
linkEl.type = 'text/css';
linkEl.href = config.relative_path + '/assets/client' + (skinName ? '-' + skinName : '') + '.css';
diff --git a/public/src/client/account/topics.js b/public/src/client/account/topics.js
index de005271d9..cba3358275 100644
--- a/public/src/client/account/topics.js
+++ b/public/src/client/account/topics.js
@@ -6,10 +6,10 @@ define('forum/account/topics', [
'forum/infinitescroll',
'hooks',
], function (header, infinitescroll, hooks) {
- var AccountTopics = {};
+ const AccountTopics = {};
- var template;
- var page = 1;
+ let template;
+ let page = 1;
AccountTopics.init = function () {
header.init();
@@ -29,7 +29,7 @@ define('forum/account/topics', [
if (direction < 0) {
return;
}
- var params = utils.params();
+ const params = utils.params();
page += 1;
params.page = page;
diff --git a/public/src/client/account/uploads.js b/public/src/client/account/uploads.js
index 222e30e9a0..51fdb8a614 100644
--- a/public/src/client/account/uploads.js
+++ b/public/src/client/account/uploads.js
@@ -1,14 +1,14 @@
'use strict';
define('forum/account/uploads', ['forum/account/header'], function (header) {
- var AccountUploads = {};
+ const AccountUploads = {};
AccountUploads.init = function () {
header.init();
$('[data-action="delete"]').on('click', function () {
- var el = $(this).parents('[data-name]');
- var name = el.attr('data-name');
+ const el = $(this).parents('[data-name]');
+ const name = el.attr('data-name');
socket.emit('user.deleteUpload', { name: name, uid: ajaxify.data.uid }, function (err) {
if (err) {
diff --git a/public/src/client/account/upvoted.js b/public/src/client/account/upvoted.js
index fb14f58111..274cdfb025 100644
--- a/public/src/client/account/upvoted.js
+++ b/public/src/client/account/upvoted.js
@@ -2,7 +2,7 @@
define('forum/account/upvoted', ['forum/account/header', 'forum/account/posts'], function (header, posts) {
- var Upvoted = {};
+ const Upvoted = {};
Upvoted.init = function () {
header.init();
diff --git a/public/src/client/account/watched.js b/public/src/client/account/watched.js
index a2c22f90f7..15861122c0 100644
--- a/public/src/client/account/watched.js
+++ b/public/src/client/account/watched.js
@@ -2,7 +2,7 @@
define('forum/account/watched', ['forum/account/header', 'forum/account/topics'], function (header, topics) {
- var AccountWatched = {};
+ const AccountWatched = {};
AccountWatched.init = function () {
header.init();
diff --git a/public/src/client/categories.js b/public/src/client/categories.js
index c7a05e7af5..44025e8b8c 100644
--- a/public/src/client/categories.js
+++ b/public/src/client/categories.js
@@ -2,7 +2,7 @@
define('forum/categories', ['components', 'categorySelector', 'hooks'], function (components, categorySelector, hooks) {
- var categories = {};
+ const categories = {};
$(window).on('action:ajaxify.start', function (ev, data) {
if (ajaxify.currentPage !== data.url) {
@@ -34,8 +34,8 @@ define('forum/categories', ['components', 'categorySelector', 'hooks'], function
};
function renderNewPost(cid, post) {
- var category = components.get('categories/category', 'cid', cid);
- var numRecentReplies = category.attr('data-numRecentReplies');
+ const category = components.get('categories/category', 'cid', cid);
+ const numRecentReplies = category.attr('data-numRecentReplies');
if (!numRecentReplies || !parseInt(numRecentReplies, 10)) {
return;
}
@@ -43,7 +43,7 @@ define('forum/categories', ['components', 'categorySelector', 'hooks'], function
return;
}
- var recentPosts = category.find('[component="category/posts"]');
+ const recentPosts = category.find('[component="category/posts"]');
app.parseAndTranslate('partials/categories/lastpost', 'posts', { posts: [post] }, function (html) {
html.find('.post-content img:not(.not-responsive)').addClass('img-responsive');
diff --git a/public/src/client/category.js b/public/src/client/category.js
index 43c828a4af..92cb42e061 100644
--- a/public/src/client/category.js
+++ b/public/src/client/category.js
@@ -9,7 +9,7 @@ define('forum/category', [
'categorySelector',
'hooks',
], function (infinitescroll, share, navigator, topicList, sort, categorySelector, hooks) {
- var Category = {};
+ const Category = {};
$(window).on('action:ajaxify.start', function (ev, data) {
if (!String(data.url).startsWith('category/')) {
@@ -18,7 +18,7 @@ define('forum/category', [
});
Category.init = function () {
- var cid = ajaxify.data.cid;
+ const cid = ajaxify.data.cid;
app.enterRoom('category_' + cid);
@@ -55,7 +55,7 @@ define('forum/category', [
};
function handleScrollToTopicIndex() {
- var topicIndex = ajaxify.data.topicIndex;
+ let topicIndex = ajaxify.data.topicIndex;
if (topicIndex && utils.isNumber(topicIndex)) {
topicIndex = Math.max(0, parseInt(topicIndex, 10));
if (topicIndex && window.location.search.indexOf('page=') === -1) {
@@ -66,8 +66,8 @@ define('forum/category', [
function handleIgnoreWatch(cid) {
$('[component="category/watching"], [component="category/ignoring"], [component="category/notwatching"]').on('click', function () {
- var $this = $(this);
- var state = $this.attr('data-state');
+ const $this = $(this);
+ const state = $this.attr('data-state');
socket.emit('categories.setWatchState', { cid: cid, state: state }, function (err) {
if (err) {
@@ -90,7 +90,7 @@ define('forum/category', [
function handleLoadMoreSubcategories() {
$('[component="category/load-more-subcategories"]').on('click', function () {
- var btn = $(this);
+ const btn = $(this);
socket.emit('categories.loadMoreSubCategories', {
cid: ajaxify.data.cid,
start: ajaxify.data.nextSubCategoryStart,
@@ -138,7 +138,7 @@ define('forum/category', [
callback = callback || function () {};
hooks.fire('action:category.loading');
- var params = utils.params();
+ const params = utils.params();
infinitescroll.loadMore('categories.loadMore', {
cid: ajaxify.data.cid,
after: after,
diff --git a/public/src/client/category/tools.js b/public/src/client/category/tools.js
index a46624536c..84e2829d0c 100644
--- a/public/src/client/category/tools.js
+++ b/public/src/client/category/tools.js
@@ -10,7 +10,7 @@ define('forum/category/tools', [
'api',
'bootbox',
], function (topicSelect, threadTools, components, translator, api, bootbox) {
- var CategoryTools = {};
+ const CategoryTools = {};
CategoryTools.init = function () {
topicSelect.init(updateDropdownOptions);
@@ -54,7 +54,7 @@ define('forum/category/tools', [
// todo: should also use categoryCommand, but no write api call exists for this yet
components.get('topic/mark-unread-for-all').on('click', function () {
- var tids = topicSelect.getSelectedTids();
+ const tids = topicSelect.getSelectedTids();
if (!tids.length) {
return app.alertError('[[error:no-topics-selected]]');
}
@@ -73,7 +73,7 @@ define('forum/category/tools', [
components.get('topic/move').on('click', function () {
require(['forum/topic/move'], function (move) {
- var tids = topicSelect.getSelectedTids();
+ const tids = topicSelect.getSelectedTids();
if (!tids.length) {
return app.alertError('[[error:no-topics-selected]]');
@@ -85,7 +85,7 @@ define('forum/category/tools', [
});
components.get('topic/move-all').on('click', function () {
- var cid = ajaxify.data.cid;
+ const cid = ajaxify.data.cid;
if (!ajaxify.data.template.category) {
return app.alertError('[[error:invalid-data]]');
}
@@ -101,7 +101,7 @@ define('forum/category/tools', [
});
components.get('topic/merge').on('click', function () {
- var tids = topicSelect.getSelectedTids();
+ const tids = topicSelect.getSelectedTids();
require(['forum/topic/merge'], function (merge) {
merge.init(function () {
if (tids.length) {
@@ -185,11 +185,11 @@ define('forum/category/tools', [
}
function updateDropdownOptions() {
- var tids = topicSelect.getSelectedTids();
- var isAnyDeleted = isAny(isTopicDeleted, tids);
- var areAllDeleted = areAll(isTopicDeleted, tids);
- var isAnyPinned = isAny(isTopicPinned, tids);
- var isAnyLocked = isAny(isTopicLocked, tids);
+ const tids = topicSelect.getSelectedTids();
+ const isAnyDeleted = isAny(isTopicDeleted, tids);
+ const areAllDeleted = areAll(isTopicDeleted, tids);
+ const isAnyPinned = isAny(isTopicPinned, tids);
+ const isAnyLocked = isAny(isTopicLocked, tids);
const isAnyScheduled = isAny(isTopicScheduled, tids);
const areAllScheduled = areAll(isTopicScheduled, tids);
@@ -207,7 +207,7 @@ define('forum/category/tools', [
}
function isAny(method, tids) {
- for (var i = 0; i < tids.length; i += 1) {
+ for (let i = 0; i < tids.length; i += 1) {
if (method(tids[i])) {
return true;
}
@@ -216,7 +216,7 @@ define('forum/category/tools', [
}
function areAll(method, tids) {
- for (var i = 0; i < tids.length; i += 1) {
+ for (let i = 0; i < tids.length; i += 1) {
if (!method(tids[i])) {
return false;
}
@@ -245,20 +245,20 @@ define('forum/category/tools', [
}
function setDeleteState(data) {
- var topic = getTopicEl(data.tid);
+ const topic = getTopicEl(data.tid);
topic.toggleClass('deleted', data.isDeleted);
topic.find('[component="topic/locked"]').toggleClass('hide', !data.isDeleted);
}
function setPinnedState(data) {
- var topic = getTopicEl(data.tid);
+ const topic = getTopicEl(data.tid);
topic.toggleClass('pinned', data.isPinned);
topic.find('[component="topic/pinned"]').toggleClass('hide', !data.isPinned);
ajaxify.refresh();
}
function setLockedState(data) {
- var topic = getTopicEl(data.tid);
+ const topic = getTopicEl(data.tid);
topic.toggleClass('locked', data.isLocked);
topic.find('[component="topic/locked"]').toggleClass('hide', !data.isLocked);
}
@@ -275,20 +275,20 @@ define('forum/category/tools', [
if (!ajaxify.data.topics || !ajaxify.data.template.category) {
return;
}
- var numPinned = ajaxify.data.topics.filter(topic => topic.pinned).length;
+ const numPinned = ajaxify.data.topics.filter(topic => topic.pinned).length;
if ((!app.user.isAdmin && !app.user.isMod) || numPinned < 2) {
return;
}
app.loadJQueryUI(function () {
- var topicListEl = $('[component="category"]').filter(function (i, e) {
+ const topicListEl = $('[component="category"]').filter(function (i, e) {
return !$(e).parents('[widget-area],[data-widget-area]').length;
});
topicListEl.sortable({
handle: '[component="topic/pinned"]',
items: '[component="category/topic"].pinned',
update: function (ev, ui) {
- var baseIndex = parseInt(topicListEl.find('[component="category/topic"].pinned').first().attr('data-index'), 10);
+ const baseIndex = parseInt(topicListEl.find('[component="category/topic"].pinned').first().attr('data-index'), 10);
socket.emit('topics.orderPinnedTopics', {
tid: ui.item.attr('data-tid'),
order: baseIndex + ui.item.index() - 1,
diff --git a/public/src/client/chats.js b/public/src/client/chats.js
index eedf23cfc0..45b958e4f1 100644
--- a/public/src/client/chats.js
+++ b/public/src/client/chats.js
@@ -17,14 +17,14 @@ define('forum/chats', [
recentChats, search, messages, Benchpress,
autocomplete, hooks, bootbox
) {
- var Chats = {
+ const Chats = {
initialised: false,
};
- var newMessage = false;
+ let newMessage = false;
Chats.init = function () {
- var env = utils.findBootstrapEnvironment();
+ const env = utils.findBootstrapEnvironment();
if (!Chats.initialised) {
Chats.addSocketListeners();
@@ -75,8 +75,8 @@ define('forum/chats', [
Chats.addIPHandler = function (container) {
container.on('click', '.chat-ip-button', function () {
- var ipEl = $(this).parent();
- var mid = ipEl.parents('[data-mid]').attr('data-mid');
+ const ipEl = $(this).parent();
+ const mid = ipEl.parents('[data-mid]').attr('data-mid');
socket.emit('modules.chats.getIP', mid, function (err, ip) {
if (err) {
return app.alertError(err);
@@ -88,8 +88,8 @@ define('forum/chats', [
Chats.addPopoutHandler = function () {
$('[data-action="pop-out"]').on('click', function () {
- var text = components.get('chat/input').val();
- var roomId = ajaxify.data.roomId;
+ const text = components.get('chat/input').val();
+ const roomId = ajaxify.data.roomId;
if (app.previousUrl && app.previousUrl.match(/chats/)) {
ajaxify.go('user/' + ajaxify.data.userslug + '/chats', function () {
@@ -107,19 +107,19 @@ define('forum/chats', [
};
Chats.addScrollHandler = function (roomId, uid, el) {
- var loading = false;
+ let loading = false;
el.off('scroll').on('scroll', function () {
messages.toggleScrollUpAlert(el);
if (loading) {
return;
}
- var top = (el[0].scrollHeight - el.height()) * 0.1;
+ const top = (el[0].scrollHeight - el.height()) * 0.1;
if (el.scrollTop() >= top) {
return;
}
loading = true;
- var start = parseInt(el.children('[data-mid]').length, 10);
+ const start = parseInt(el.children('[data-mid]').length, 10);
socket.emit('modules.chats.getMessages', {
roomId: roomId,
uid: uid,
@@ -140,8 +140,8 @@ define('forum/chats', [
return;
}
messages.parseMessage(data, function (html) {
- var currentScrollTop = el.scrollTop();
- var previousHeight = el[0].scrollHeight;
+ const currentScrollTop = el.scrollTop();
+ const previousHeight = el[0].scrollHeight;
html = $(html);
el.prepend(html);
html.find('.timeago').timeago();
@@ -162,7 +162,7 @@ define('forum/chats', [
};
Chats.addCharactersLeftHandler = function (parent) {
- var element = parent.find('[component="chat/input"]');
+ const element = parent.find('[component="chat/input"]');
element.on('change keyup paste', function () {
messages.updateRemainingLength(parent);
});
@@ -170,15 +170,15 @@ define('forum/chats', [
Chats.addActionHandlers = function (element, roomId) {
element.on('click', '[data-action]', function () {
- var messageId = $(this).parents('[data-mid]').attr('data-mid');
- var action = this.getAttribute('data-action');
+ const messageId = $(this).parents('[data-mid]').attr('data-mid');
+ const action = this.getAttribute('data-action');
switch (action) {
- case 'edit':
- var inputEl = $('[data-roomid="' + roomId + '"] [component="chat/input"]');
+ case 'edit': {
+ const inputEl = $('[data-roomid="' + roomId + '"] [component="chat/input"]');
messages.prepEdit(inputEl, messageId, roomId);
break;
-
+ }
case 'delete':
messages.delete(messageId, roomId);
break;
@@ -192,16 +192,16 @@ define('forum/chats', [
Chats.addHotkeys = function () {
mousetrap.bind('ctrl+up', function () {
- var activeContact = $('.chats-list .bg-info');
- var prev = activeContact.prev();
+ const activeContact = $('.chats-list .bg-info');
+ const prev = activeContact.prev();
if (prev.length) {
Chats.switchChat(prev.attr('data-roomid'));
}
});
mousetrap.bind('ctrl+down', function () {
- var activeContact = $('.chats-list .bg-info');
- var next = activeContact.next();
+ const activeContact = $('.chats-list .bg-info');
+ const next = activeContact.next();
if (next.length) {
Chats.switchChat(next.attr('data-roomid'));
@@ -210,12 +210,12 @@ define('forum/chats', [
mousetrap.bind('up', function (e) {
if (e.target === components.get('chat/input').get(0)) {
// Retrieve message id from messages list
- var message = components.get('chat/messages').find('.chat-message[data-self="1"]').last();
+ const message = components.get('chat/messages').find('.chat-message[data-self="1"]').last();
if (!message.length) {
return;
}
- var lastMid = message.attr('data-mid');
- var inputEl = components.get('chat/input');
+ const lastMid = message.attr('data-mid');
+ const inputEl = components.get('chat/input');
messages.prepEdit(inputEl, lastMid, ajaxify.data.roomId);
}
@@ -223,7 +223,7 @@ define('forum/chats', [
};
Chats.addMemberHandler = function (roomId, buttonEl) {
- var modal;
+ let modal;
buttonEl.on('click', function () {
app.parseAndTranslate('partials/modals/manage_room', {}, function (html) {
@@ -237,8 +237,8 @@ define('forum/chats', [
Chats.refreshParticipantsList(roomId, modal);
Chats.addKickHandler(roomId, modal);
- var searchInput = modal.find('input');
- var errorEl = modal.find('.text-danger');
+ const searchInput = modal.find('input');
+ const errorEl = modal.find('.text-danger');
require(['autocomplete', 'translator'], function (autocomplete, translator) {
autocomplete.user(searchInput, function (event, selected) {
errorEl.text('');
@@ -263,7 +263,7 @@ define('forum/chats', [
Chats.addKickHandler = function (roomId, modal) {
modal.on('click', '[data-action="kick"]', function () {
- var uid = parseInt(this.getAttribute('data-uid'), 10);
+ const uid = parseInt(this.getAttribute('data-uid'), 10);
socket.emit('modules.chats.removeUserFromRoom', {
roomId: roomId,
@@ -292,7 +292,7 @@ define('forum/chats', [
}
// Return user to chats page. If modal, close modal.
- var modal = buttonEl.parents('.chat-modal');
+ const modal = buttonEl.parents('.chat-modal');
if (modal.length) {
require(['chat'], function (chatLib) {
chatLib.close(modal);
@@ -309,7 +309,7 @@ define('forum/chats', [
Chats.refreshParticipantsList = function (roomId, modal) {
socket.emit('modules.chats.getUsersInRoom', { roomId: roomId }, function (err, users) {
- var listEl = modal.find('.list-group');
+ const listEl = modal.find('.list-group');
if (err) {
return translator.translate('[[error:invalid-data]]', function (translated) {
@@ -326,7 +326,7 @@ define('forum/chats', [
};
Chats.addRenameHandler = function (roomId, buttonEl, roomName) {
- var modal;
+ let modal;
buttonEl.on('click', function () {
app.parseAndTranslate('partials/modals/rename_room', {
@@ -378,7 +378,7 @@ define('forum/chats', [
return;
}
- var data = {
+ const data = {
element: element,
strategies: [],
options: {
@@ -398,7 +398,7 @@ define('forum/chats', [
};
Chats.leave = function (el) {
- var roomId = el.attr('data-roomid');
+ const roomId = el.attr('data-roomid');
socket.emit('modules.chats.leave', roomId, function (err) {
if (err) {
return app.alertError(err.message);
@@ -409,7 +409,7 @@ define('forum/chats', [
el.remove();
}
require(['chat'], function (chat) {
- var modal = chat.getModal(roomId);
+ const modal = chat.getModal(roomId);
if (modal.length) {
chat.close(modal);
}
@@ -423,7 +423,7 @@ define('forum/chats', [
roomid = '';
}
- var url = 'user/' + ajaxify.data.userslug + '/chats/' + roomid + window.location.search;
+ const url = 'user/' + ajaxify.data.userslug + '/chats/' + roomid + window.location.search;
if (self.fetch) {
fetch(config.relative_path + '/api/' + url, { credentials: 'include' })
.then(function (response) {
@@ -475,12 +475,12 @@ define('forum/chats', [
messages.appendChatMessage($('.expanded-chat .chat-content'), data.message);
} else if (ajaxify.data.template.chats) {
- var roomEl = $('[data-roomid=' + data.roomId + ']');
+ const roomEl = $('[data-roomid=' + data.roomId + ']');
if (roomEl.length > 0) {
roomEl.addClass('unread');
} else {
- var recentEl = components.get('chat/recent');
+ const recentEl = components.get('chat/recent');
app.parseAndTranslate('partials/chats/recent_room', {
rooms: {
roomId: data.roomId,
@@ -502,8 +502,8 @@ define('forum/chats', [
messages.addSocketListeners();
socket.on('event:chats.roomRename', function (data) {
- var roomEl = components.get('chat/recent/room', data.roomId);
- var titleEl = roomEl.find('[component="chat/title"]');
+ const roomEl = components.get('chat/recent/room', data.roomId);
+ const titleEl = roomEl.find('[component="chat/title"]');
ajaxify.data.roomName = data.newName;
titleEl.text(data.newName);
@@ -511,10 +511,10 @@ define('forum/chats', [
};
Chats.resizeMainWindow = function () {
- var viewportHeight = $(window).height();
- var mainWrapper = components.get('chat/main-wrapper');
- var navWrapper = components.get('chat/nav-wrapper');
- var fromTop = 0;
+ const viewportHeight = $(window).height();
+ const mainWrapper = components.get('chat/main-wrapper');
+ const navWrapper = components.get('chat/nav-wrapper');
+ let fromTop = 0;
if (mainWrapper.length && navWrapper.length) {
fromTop = mainWrapper.offset().top || navWrapper.offset().top;
}
diff --git a/public/src/client/chats/messages.js b/public/src/client/chats/messages.js
index 7a743ce761..5d43497014 100644
--- a/public/src/client/chats/messages.js
+++ b/public/src/client/chats/messages.js
@@ -2,11 +2,11 @@
define('forum/chats/messages', ['components', 'translator', 'benchpress', 'hooks', 'bootbox'], function (components, translator, Benchpress, hooks, bootbox) {
- var messages = {};
+ const messages = {};
messages.sendMessage = function (roomId, inputEl) {
- var msg = inputEl.val();
- var mid = inputEl.attr('data-mid');
+ const msg = inputEl.val();
+ const mid = inputEl.attr('data-mid');
if (!msg.trim().length) {
return;
@@ -59,7 +59,7 @@ define('forum/chats/messages', ['components', 'translator', 'benchpress', 'hooks
};
messages.updateRemainingLength = function (parent) {
- var element = parent.find('[component="chat/input"]');
+ const element = parent.find('[component="chat/input"]');
parent.find('[component="chat/message/length"]').text(element.val().length);
parent.find('[component="chat/message/remaining"]').text(config.maximumChatMessageLength - element.val().length);
hooks.fire('action:chat.updateRemainingLength', {
@@ -68,8 +68,8 @@ define('forum/chats/messages', ['components', 'translator', 'benchpress', 'hooks
};
messages.appendChatMessage = function (chatContentEl, data) {
- var lastSpeaker = parseInt(chatContentEl.find('.chat-message').last().attr('data-uid'), 10);
- var lasttimestamp = parseInt(chatContentEl.find('.chat-message').last().attr('data-timestamp'), 10);
+ const lastSpeaker = parseInt(chatContentEl.find('.chat-message').last().attr('data-uid'), 10);
+ const lasttimestamp = parseInt(chatContentEl.find('.chat-message').last().attr('data-timestamp'), 10);
if (!Array.isArray(data)) {
data.newSet = lastSpeaker !== parseInt(data.fromuid, 10) ||
parseInt(data.timestamp, 10) > parseInt(lasttimestamp, 10) + (1000 * 60 * 3);
@@ -81,8 +81,8 @@ define('forum/chats/messages', ['components', 'translator', 'benchpress', 'hooks
};
function onMessagesParsed(chatContentEl, html) {
- var newMessage = $(html);
- var isAtBottom = messages.isAtBottom(chatContentEl);
+ const newMessage = $(html);
+ const isAtBottom = messages.isAtBottom(chatContentEl);
newMessage.appendTo(chatContentEl);
newMessage.find('.timeago').timeago();
newMessage.find('img:not(.not-responsive)').addClass('img-responsive');
@@ -114,7 +114,7 @@ define('forum/chats/messages', ['components', 'translator', 'benchpress', 'hooks
messages.isAtBottom = function (containerEl, threshold) {
if (containerEl.length) {
- var distanceToBottom = containerEl[0].scrollHeight - (
+ const distanceToBottom = containerEl[0].scrollHeight - (
containerEl.outerHeight() + containerEl.scrollTop()
);
return distanceToBottom < (threshold || 100);
@@ -131,7 +131,7 @@ define('forum/chats/messages', ['components', 'translator', 'benchpress', 'hooks
};
messages.toggleScrollUpAlert = function (containerEl) {
- var isAtBottom = messages.isAtBottom(containerEl, 300);
+ const isAtBottom = messages.isAtBottom(containerEl, 300);
containerEl.parent()
.find('[component="chat/messages/scroll-up-alert"]')
.toggleClass('hidden', isAtBottom);
@@ -171,10 +171,10 @@ define('forum/chats/messages', ['components', 'translator', 'benchpress', 'hooks
function onChatMessageEdited(data) {
data.messages.forEach(function (message) {
- var self = parseInt(message.fromuid, 10) === parseInt(app.user.uid, 10);
+ const self = parseInt(message.fromuid, 10) === parseInt(app.user.uid, 10);
message.self = self ? 1 : 0;
messages.parseMessage(message, function (html) {
- var body = components.get('chat/message', message.messageId);
+ const body = components.get('chat/message', message.messageId);
if (body.length) {
body.replaceWith(html);
components.get('chat/message', message.messageId).find('.timeago').timeago();
diff --git a/public/src/client/chats/recent.js b/public/src/client/chats/recent.js
index 32156cfc8f..de69baf45e 100644
--- a/public/src/client/chats/recent.js
+++ b/public/src/client/chats/recent.js
@@ -2,7 +2,7 @@
define('forum/chats/recent', function () {
- var recent = {};
+ const recent = {};
recent.init = function () {
require(['forum/chats'], function (Chats) {
@@ -11,8 +11,8 @@ define('forum/chats/recent', function () {
});
$('[component="chat/recent"]').on('scroll', function () {
- var $this = $(this);
- var bottom = ($this[0].scrollHeight - $this.height()) * 0.9;
+ const $this = $(this);
+ const bottom = ($this[0].scrollHeight - $this.height()) * 0.9;
if ($this.scrollTop() > bottom) {
loadMoreRecentChats();
}
@@ -21,7 +21,7 @@ define('forum/chats/recent', function () {
};
function loadMoreRecentChats() {
- var recentChats = $('[component="chat/recent"]');
+ const recentChats = $('[component="chat/recent"]');
if (recentChats.attr('loading')) {
return;
}
diff --git a/public/src/client/chats/search.js b/public/src/client/chats/search.js
index 0c83dd101f..82bfcba8cc 100644
--- a/public/src/client/chats/search.js
+++ b/public/src/client/chats/search.js
@@ -2,14 +2,14 @@
define('forum/chats/search', ['components', 'api'], function (components, api) {
- var search = {};
+ const search = {};
search.init = function () {
components.get('chat/search').on('keyup', utils.debounce(doSearch, 250));
};
function doSearch() {
- var username = components.get('chat/search').val();
+ const username = components.get('chat/search').val();
if (!username) {
return $('[component="chat/search/list"]').empty();
}
@@ -23,7 +23,7 @@ define('forum/chats/search', ['components', 'api'], function (components, api) {
}
function displayResults(data) {
- var chatsListEl = $('[component="chat/search/list"]');
+ const chatsListEl = $('[component="chat/search/list"]');
chatsListEl.empty();
data.users = data.users.filter(function (user) {
@@ -35,7 +35,7 @@ define('forum/chats/search', ['components', 'api'], function (components, api) {
}
data.users.forEach(function (userObj) {
- var chatEl = displayUser(chatsListEl, userObj);
+ const chatEl = displayUser(chatsListEl, userObj);
onUserClick(chatEl, userObj);
});
@@ -50,7 +50,7 @@ define('forum/chats/search', ['components', 'api'], function (components, api) {
'
' + userObj.username;
}
- var chatEl = $('
')
+ const chatEl = $('
')
.attr('data-uid', userObj.uid)
.appendTo(chatsListEl);
diff --git a/public/src/client/compose.js b/public/src/client/compose.js
index a7890679a5..2c0267c374 100644
--- a/public/src/client/compose.js
+++ b/public/src/client/compose.js
@@ -2,10 +2,10 @@
define('forum/compose', ['hooks'], function (hooks) {
- var Compose = {};
+ const Compose = {};
Compose.init = function () {
- var container = $('.composer');
+ const container = $('.composer');
if (container.length) {
hooks.fire('action:composer.enhance', {
diff --git a/public/src/client/flags/detail.js b/public/src/client/flags/detail.js
index 2dfb46eac8..81b1592a73 100644
--- a/public/src/client/flags/detail.js
+++ b/public/src/client/flags/detail.js
@@ -1,7 +1,7 @@
'use strict';
define('forum/flags/detail', ['forum/flags/list', 'components', 'translator', 'benchpress', 'forum/account/header', 'accounts/delete', 'api', 'bootbox'], function (FlagsList, components, translator, Benchpress, AccountHeader, AccountsDelete, api, bootbox) {
- var Detail = {};
+ const Detail = {};
Detail.init = function () {
// Update attributes
@@ -9,9 +9,9 @@ define('forum/flags/detail', ['forum/flags/list', 'components', 'translator', 'b
$('#assignee').val(ajaxify.data.assignee).removeAttr('disabled');
$('#content > div').on('click', '[data-action]', function () {
- var action = this.getAttribute('data-action');
- var uid = $(this).parents('[data-uid]').attr('data-uid');
- var noteEl = document.getElementById('note');
+ const action = this.getAttribute('data-action');
+ const uid = $(this).parents('[data-uid]').attr('data-uid');
+ const noteEl = document.getElementById('note');
switch (action) {
case 'assign':
@@ -45,8 +45,8 @@ define('forum/flags/detail', ['forum/flags/list', 'components', 'translator', 'b
}).catch(app.alertError);
break;
- case 'delete-note':
- var datetime = parseInt(this.closest('[data-datetime]').getAttribute('data-datetime'), 10);
+ case 'delete-note': {
+ const datetime = parseInt(this.closest('[data-datetime]').getAttribute('data-datetime'), 10);
bootbox.confirm('[[flags:delete-note-confirm]]', function (ok) {
if (ok) {
api.delete(`/flags/${ajaxify.data.flagId}/notes/${datetime}`, {}).then((payload) => {
@@ -57,7 +57,7 @@ define('forum/flags/detail', ['forum/flags/list', 'components', 'translator', 'b
}
});
break;
-
+ }
case 'chat':
app.newChat(uid);
break;
@@ -90,15 +90,15 @@ define('forum/flags/detail', ['forum/flags/list', 'components', 'translator', 'b
postAction('restore', ajaxify.data.target.pid, ajaxify.data.target.tid);
break;
- case 'prepare-edit':
- var selectedNoteEl = this.closest('[data-index]');
- var index = selectedNoteEl.getAttribute('data-index');
- var textareaEl = document.getElementById('note');
+ case 'prepare-edit': {
+ const selectedNoteEl = this.closest('[data-index]');
+ const index = selectedNoteEl.getAttribute('data-index');
+ const textareaEl = document.getElementById('note');
textareaEl.value = ajaxify.data.notes[index].content;
textareaEl.setAttribute('data-datetime', ajaxify.data.notes[index].datetime);
- var siblings = selectedNoteEl.parentElement.children;
- for (var el in siblings) {
+ const siblings = selectedNoteEl.parentElement.children;
+ for (const el in siblings) {
if (siblings.hasOwnProperty(el)) {
siblings[el].classList.remove('editing');
}
@@ -106,6 +106,7 @@ define('forum/flags/detail', ['forum/flags/list', 'components', 'translator', 'b
selectedNoteEl.classList.add('editing');
textareaEl.focus();
break;
+ }
}
});
};
@@ -136,7 +137,7 @@ define('forum/flags/detail', ['forum/flags/list', 'components', 'translator', 'b
Benchpress.render('flags/detail', {
notes: notes,
}, 'notes').then(function (html) {
- var wrapperEl = components.get('flag/notes');
+ const wrapperEl = components.get('flag/notes');
wrapperEl.empty();
wrapperEl.html(html);
wrapperEl.find('span.timeago').timeago();
@@ -148,7 +149,7 @@ define('forum/flags/detail', ['forum/flags/list', 'components', 'translator', 'b
app.parseAndTranslate('flags/detail', 'history', {
history: history,
}, function (html) {
- var wrapperEl = components.get('flag/history');
+ const wrapperEl = components.get('flag/history');
wrapperEl.empty();
wrapperEl.html(html);
wrapperEl.find('span.timeago').timeago();
diff --git a/public/src/client/flags/list.js b/public/src/client/flags/list.js
index a46dbade1c..2e3000c2d2 100644
--- a/public/src/client/flags/list.js
+++ b/public/src/client/flags/list.js
@@ -1,9 +1,9 @@
'use strict';
define('forum/flags/list', ['components', 'Chart', 'categoryFilter', 'autocomplete', 'api'], function (components, Chart, categoryFilter, autocomplete, api) {
- var Flags = {};
+ const Flags = {};
- var selectedCids;
+ let selectedCids;
Flags.init = function () {
Flags.enableFilterForm();
@@ -30,7 +30,7 @@ define('forum/flags/list', ['components', 'Chart', 'categoryFilter', 'autocomple
return;
}
- var flagId = this.getAttribute('data-flag-id');
+ const flagId = this.getAttribute('data-flag-id');
ajaxify.go('flags/' + flagId);
});
@@ -75,13 +75,13 @@ define('forum/flags/list', ['components', 'Chart', 'categoryFilter', 'autocomple
};
Flags.enableCheckboxes = function () {
- var flagsList = document.querySelector('[component="flags/list"]');
- var checkboxes = flagsList.querySelectorAll('[data-flag-id] input[type="checkbox"]');
- var bulkEl = document.querySelector('[component="flags/bulk-actions"] button');
- var lastClicked;
+ const flagsList = document.querySelector('[component="flags/list"]');
+ const checkboxes = flagsList.querySelectorAll('[data-flag-id] input[type="checkbox"]');
+ const bulkEl = document.querySelector('[component="flags/bulk-actions"] button');
+ let lastClicked;
document.querySelector('[data-action="toggle-all"]').addEventListener('click', function () {
- var state = this.checked;
+ const state = this.checked;
checkboxes.forEach(function (el) {
el.checked = state;
@@ -90,15 +90,15 @@ define('forum/flags/list', ['components', 'Chart', 'categoryFilter', 'autocomple
});
flagsList.addEventListener('click', function (e) {
- var subselector = e.target.closest('input[type="checkbox"]');
+ const subselector = e.target.closest('input[type="checkbox"]');
if (subselector) {
// Stop checkbox clicks from going into the flag details
e.stopImmediatePropagation();
if (lastClicked && e.shiftKey && lastClicked !== subselector) {
// Select all the checkboxes in between
- var state = subselector.checked;
- var started = false;
+ const state = subselector.checked;
+ let started = false;
checkboxes.forEach(function (el) {
if ([subselector, lastClicked].some(function (ref) {
@@ -130,16 +130,16 @@ define('forum/flags/list', ['components', 'Chart', 'categoryFilter', 'autocomple
Flags.handleBulkActions = function () {
document.querySelector('[component="flags/bulk-actions"]').addEventListener('click', function (e) {
- var subselector = e.target.closest('[data-action]');
+ const subselector = e.target.closest('[data-action]');
if (subselector) {
- var action = subselector.getAttribute('data-action');
- var flagIds = Flags.getSelected();
- var promises = [];
+ const action = subselector.getAttribute('data-action');
+ const flagIds = Flags.getSelected();
+ const promises = [];
// TODO: this can be better done with flagIds.map to return promises
flagIds.forEach(function (flagId) {
promises.push(new Promise(function (resolve, reject) {
- var handler = function (err) {
+ const handler = function (err) {
if (err) {
reject(err);
}
@@ -164,10 +164,10 @@ define('forum/flags/list', ['components', 'Chart', 'categoryFilter', 'autocomple
});
Promise.allSettled(promises).then(function (results) {
- var fulfilled = results.filter(function (res) {
+ const fulfilled = results.filter(function (res) {
return res.status === 'fulfilled';
}).length;
- var errors = results.filter(function (res) {
+ const errors = results.filter(function (res) {
return res.status === 'rejected';
});
if (fulfilled) {
@@ -184,8 +184,8 @@ define('forum/flags/list', ['components', 'Chart', 'categoryFilter', 'autocomple
};
Flags.getSelected = function () {
- var checkboxes = document.querySelectorAll('[component="flags/list"] [data-flag-id] input[type="checkbox"]');
- var payload = [];
+ const checkboxes = document.querySelectorAll('[component="flags/list"] [data-flag-id] input[type="checkbox"]');
+ const payload = [];
checkboxes.forEach(function (el) {
if (el.checked) {
payload.push(el.closest('[data-flag-id]').getAttribute('data-flag-id'));
@@ -196,15 +196,15 @@ define('forum/flags/list', ['components', 'Chart', 'categoryFilter', 'autocomple
};
Flags.handleGraphs = function () {
- var dailyCanvas = document.getElementById('flags:daily');
- var dailyLabels = utils.getDaysArray().map(function (text, idx) {
+ const dailyCanvas = document.getElementById('flags:daily');
+ const dailyLabels = utils.getDaysArray().map(function (text, idx) {
return idx % 3 ? '' : text;
});
if (utils.isMobile()) {
Chart.defaults.global.tooltips.enabled = false;
}
- var data = {
+ const data = {
'flags:daily': {
labels: dailyLabels,
datasets: [
diff --git a/public/src/client/groups/details.js b/public/src/client/groups/details.js
index 73322e2d1d..b0ed482c0c 100644
--- a/public/src/client/groups/details.js
+++ b/public/src/client/groups/details.js
@@ -23,11 +23,11 @@ define('forum/groups/details', [
categorySelector,
bootbox
) {
- var Details = {};
- var groupName;
+ const Details = {};
+ let groupName;
Details.init = function () {
- var detailsPage = components.get('groups/container');
+ const detailsPage = components.get('groups/container');
groupName = ajaxify.data.group.name;
@@ -68,12 +68,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);
- var userRow = btnEl.parents('[data-uid]');
- var ownerFlagEl = userRow.find('.member-name > i');
- var isOwner = !ownerFlagEl.hasClass('invisible');
- var uid = userRow.attr('data-uid');
- var action = btnEl.attr('data-action');
+ const btnEl = $(this);
+ const userRow = btnEl.parents('[data-uid]');
+ const ownerFlagEl = userRow.find('.member-name > i');
+ const isOwner = !ownerFlagEl.hasClass('invisible');
+ const uid = userRow.attr('data-uid');
+ const action = btnEl.attr('data-action');
switch (action) {
case 'toggleOwnership':
@@ -135,16 +135,16 @@ define('forum/groups/details', [
};
Details.prepareSettings = function () {
- var settingsFormEl = components.get('groups/settings');
- var labelColorValueEl = settingsFormEl.find('[name="labelColor"]');
- var textColorValueEl = settingsFormEl.find('[name="textColor"]');
- var iconBtn = settingsFormEl.find('[data-action="icon-select"]');
- var previewEl = settingsFormEl.find('.label');
- var previewElText = settingsFormEl.find('.label-text');
- var previewIcon = previewEl.find('i');
- var userTitleEl = settingsFormEl.find('[name="userTitle"]');
- var userTitleEnabledEl = settingsFormEl.find('[name="userTitleEnabled"]');
- var iconValueEl = settingsFormEl.find('[name="icon"]');
+ const settingsFormEl = components.get('groups/settings');
+ const labelColorValueEl = settingsFormEl.find('[name="labelColor"]');
+ const textColorValueEl = settingsFormEl.find('[name="textColor"]');
+ const iconBtn = settingsFormEl.find('[data-action="icon-select"]');
+ const previewEl = settingsFormEl.find('.label');
+ const previewElText = settingsFormEl.find('.label-text');
+ const previewIcon = previewEl.find('i');
+ const userTitleEl = settingsFormEl.find('[name="userTitle"]');
+ const userTitleEnabledEl = settingsFormEl.find('[name="userTitleEnabled"]');
+ const iconValueEl = settingsFormEl.find('[name="icon"]');
labelColorValueEl.on('input', function () {
previewEl.css('background-color', labelColorValueEl.val());
@@ -168,7 +168,7 @@ define('forum/groups/details', [
// Disable user title customisation options if the the user title itself is disabled
userTitleEnabledEl.on('change', function () {
- var customOpts = components.get('groups/userTitleOption');
+ const customOpts = components.get('groups/userTitleOption');
if (this.checked) {
customOpts.removeAttr('disabled');
@@ -179,9 +179,9 @@ define('forum/groups/details', [
}
});
- var cidSelector = categorySelector.init($('.member-post-cids-selector [component="category-selector"]'), {
+ const cidSelector = categorySelector.init($('.member-post-cids-selector [component="category-selector"]'), {
onSelect: function (selectedCategory) {
- var cids = ($('#memberPostCids').val() || '').split(',').map(cid => parseInt(cid, 10));
+ let cids = ($('#memberPostCids').val() || '').split(',').map(cid => parseInt(cid, 10));
cids.push(selectedCategory.cid);
cids = cids.filter((cid, index, array) => array.indexOf(cid) === index);
$('#memberPostCids').val(cids.join(','));
@@ -191,11 +191,11 @@ define('forum/groups/details', [
};
Details.update = function () {
- var settingsFormEl = components.get('groups/settings');
- var checkboxes = settingsFormEl.find('input[type="checkbox"][name]');
+ const settingsFormEl = components.get('groups/settings');
+ const checkboxes = settingsFormEl.find('input[type="checkbox"][name]');
if (settingsFormEl.length) {
- var settings = settingsFormEl.serializeObject();
+ const settings = settingsFormEl.serializeObject();
// serializeObject doesnt return array for multi selects if only one item is selected
if (!Array.isArray(settings.memberPostCids)) {
@@ -212,7 +212,7 @@ define('forum/groups/details', [
api.put(`/groups/${ajaxify.data.group.slug}`, settings).then(() => {
if (settings.name) {
- var pathname = window.location.pathname;
+ let pathname = window.location.pathname;
pathname = pathname.substr(1, pathname.lastIndexOf('/'));
ajaxify.go(pathname + slugify(settings.name));
} else {
@@ -244,7 +244,7 @@ define('forum/groups/details', [
return;
}
- var searchInput = $('[component="groups/members/invite"]');
+ const searchInput = $('[component="groups/members/invite"]');
require(['autocomplete'], function (autocomplete) {
autocomplete.user(searchInput, function (event, selected) {
socket.emit('groups.issueInvite', {
@@ -260,7 +260,7 @@ define('forum/groups/details', [
});
$('[component="groups/members/bulk-invite-button"]').on('click', function () {
- var usernames = $('[component="groups/members/bulk-invite"]').val();
+ const usernames = $('[component="groups/members/bulk-invite"]').val();
if (!usernames) {
return false;
}
diff --git a/public/src/client/groups/list.js b/public/src/client/groups/list.js
index e0a8ed10d4..d7645668e9 100644
--- a/public/src/client/groups/list.js
+++ b/public/src/client/groups/list.js
@@ -3,7 +3,7 @@
define('forum/groups/list', [
'forum/infinitescroll', 'benchpress', 'api', 'bootbox',
], function (infinitescroll, Benchpress, api, bootbox) {
- var Groups = {};
+ const Groups = {};
Groups.init = function () {
infinitescroll.init(Groups.loadMoreGroups);
@@ -20,7 +20,7 @@ define('forum/groups/list', [
}
});
});
- var params = utils.params();
+ const params = utils.params();
$('#search-sort').val(params.sort || 'alpha');
// Group searching
@@ -58,9 +58,9 @@ define('forum/groups/list', [
};
Groups.search = function () {
- var groupsEl = $('#groups-list');
- var queryEl = $('#search-text');
- var sortEl = $('#search-sort');
+ const groupsEl = $('#groups-list');
+ const queryEl = $('#search-text');
+ const sortEl = $('#search-sort');
socket.emit('groups.search', {
query: queryEl.val(),
diff --git a/public/src/client/groups/memberlist.js b/public/src/client/groups/memberlist.js
index 70863999e7..61f2c53334 100644
--- a/public/src/client/groups/memberlist.js
+++ b/public/src/client/groups/memberlist.js
@@ -1,10 +1,10 @@
'use strict';
define('forum/groups/memberlist', ['api', 'bootbox'], function (api, bootbox) {
- var MemberList = {};
- var searchInterval;
- var groupName;
- var templateName;
+ const MemberList = {};
+ let searchInterval;
+ let groupName;
+ let templateName;
MemberList.init = function (_templateName) {
templateName = _templateName || 'groups/details';
@@ -18,14 +18,14 @@ define('forum/groups/memberlist', ['api', 'bootbox'], function (api, bootbox) {
function handleMemberAdd() {
$('[component="groups/members/add"]').on('click', function () {
app.parseAndTranslate('admin/partials/groups/add-members', {}, function (html) {
- var foundUsers = [];
- var modal = bootbox.dialog({
+ const foundUsers = [];
+ const modal = bootbox.dialog({
title: '[[groups:details.add-member]]',
message: html,
buttons: {
ok: {
callback: function () {
- var users = [];
+ const users = [];
modal.find('[data-uid][data-selected]').each(function (index, el) {
users.push(foundUsers[$(el).attr('data-uid')]);
});
@@ -37,7 +37,7 @@ define('forum/groups/memberlist', ['api', 'bootbox'], function (api, bootbox) {
},
});
modal.on('click', '[data-username]', function () {
- var isSelected = $(this).attr('data-selected') === '1';
+ const isSelected = $(this).attr('data-selected') === '1';
if (isSelected) {
$(this).removeAttr('data-selected');
} else {
@@ -75,7 +75,7 @@ define('forum/groups/memberlist', ['api', 'bootbox'], function (api, bootbox) {
});
callback();
}
- var uids = users.map(function (user) { return user.uid; });
+ const uids = users.map(function (user) { return user.uid; });
if (groupName === 'administrators') {
socket.emit('admin.user.makeAdmins', uids, function (err) {
if (err) {
@@ -90,7 +90,7 @@ define('forum/groups/memberlist', ['api', 'bootbox'], function (api, bootbox) {
function handleMemberSearch() {
$('[component="groups/members/search"]').on('keyup', function () {
- var query = $(this).val();
+ const query = $(this).val();
if (searchInterval) {
clearInterval(searchInterval);
searchInterval = 0;
@@ -112,8 +112,8 @@ define('forum/groups/memberlist', ['api', 'bootbox'], function (api, bootbox) {
function handleMemberInfiniteScroll() {
$('[component="groups/members"] tbody').on('scroll', function () {
- var $this = $(this);
- var bottom = ($this[0].scrollHeight - $this.innerHeight()) * 0.9;
+ const $this = $(this);
+ const bottom = ($this[0].scrollHeight - $this.innerHeight()) * 0.9;
if ($this.scrollTop() > bottom && !$('[component="groups/members/search"]').val()) {
loadMoreMembers();
@@ -122,7 +122,7 @@ define('forum/groups/memberlist', ['api', 'bootbox'], function (api, bootbox) {
}
function loadMoreMembers() {
- var members = $('[component="groups/members"]');
+ const members = $('[component="groups/members"]');
if (members.attr('loading')) {
return;
}
diff --git a/public/src/client/header/chat.js b/public/src/client/header/chat.js
index 188bd4386d..8f87e2c513 100644
--- a/public/src/client/header/chat.js
+++ b/public/src/client/header/chat.js
@@ -1,11 +1,11 @@
'use strict';
define('forum/header/chat', ['components'], function (components) {
- var chat = {};
+ const chat = {};
chat.prepareDOM = function () {
- var chatsToggleEl = components.get('chat/dropdown');
- var chatsListEl = components.get('chat/list');
+ const chatsToggleEl = components.get('chat/dropdown');
+ const chatsListEl = components.get('chat/list');
chatsToggleEl.on('click', function () {
if (chatsToggleEl.parent().hasClass('open')) {
diff --git a/public/src/client/header/notifications.js b/public/src/client/header/notifications.js
index b30535f0fd..024cc5960f 100644
--- a/public/src/client/header/notifications.js
+++ b/public/src/client/header/notifications.js
@@ -1,12 +1,12 @@
'use strict';
define('forum/header/notifications', ['components'], function (components) {
- var notifications = {};
+ const notifications = {};
notifications.prepareDOM = function () {
- var notifContainer = components.get('notifications');
- var notifTrigger = notifContainer.children('a');
- var notifList = components.get('notifications/list');
+ const notifContainer = components.get('notifications');
+ const notifTrigger = notifContainer.children('a');
+ const notifList = components.get('notifications/list');
notifTrigger.on('click', function (e) {
e.preventDefault();
diff --git a/public/src/client/infinitescroll.js b/public/src/client/infinitescroll.js
index c8aebb413e..e734cf455e 100644
--- a/public/src/client/infinitescroll.js
+++ b/public/src/client/infinitescroll.js
@@ -2,12 +2,12 @@
define('forum/infinitescroll', ['hooks'], function (hooks) {
- var scroll = {};
- var callback;
- var previousScrollTop = 0;
- var loadingMore = false;
- var container;
- var scrollTimeout = 0;
+ const scroll = {};
+ let callback;
+ let previousScrollTop = 0;
+ let loadingMore = false;
+ let container;
+ let scrollTimeout = 0;
scroll.init = function (el, cb) {
const $body = $('body');
@@ -37,20 +37,20 @@ define('forum/infinitescroll', ['hooks'], function (hooks) {
}
function onScroll() {
- var bsEnv = utils.findBootstrapEnvironment();
- var mobileComposerOpen = (bsEnv === 'xs' || bsEnv === 'sm') && $('html').hasClass('composing');
+ const bsEnv = utils.findBootstrapEnvironment();
+ const mobileComposerOpen = (bsEnv === 'xs' || bsEnv === 'sm') && $('html').hasClass('composing');
if (loadingMore || mobileComposerOpen) {
return;
}
- var currentScrollTop = $(window).scrollTop();
- var wh = $(window).height();
- var viewportHeight = container.height() - wh;
- var offsetTop = container.offset() ? container.offset().top : 0;
- var scrollPercent = 100 * (currentScrollTop - offsetTop) / (viewportHeight <= 0 ? wh : viewportHeight);
+ const currentScrollTop = $(window).scrollTop();
+ const wh = $(window).height();
+ const viewportHeight = container.height() - wh;
+ const offsetTop = container.offset() ? container.offset().top : 0;
+ const scrollPercent = 100 * (currentScrollTop - offsetTop) / (viewportHeight <= 0 ? wh : viewportHeight);
- var top = 15;
- var bottom = 85;
- var direction = currentScrollTop > previousScrollTop ? 1 : -1;
+ const top = 15;
+ const bottom = 85;
+ const direction = currentScrollTop > previousScrollTop ? 1 : -1;
if (scrollPercent < top && currentScrollTop < previousScrollTop) {
callback(direction);
@@ -69,7 +69,7 @@ define('forum/infinitescroll', ['hooks'], function (hooks) {
}
loadingMore = true;
- var hookData = { method: method, data: data };
+ const hookData = { method: method, data: data };
hooks.fire('action:infinitescroll.loadmore', hookData);
socket.emit(hookData.method, hookData.data, function (err, data) {
@@ -88,8 +88,8 @@ define('forum/infinitescroll', ['hooks'], function (hooks) {
return;
}
loadingMore = true;
- var url = config.relative_path + '/api' + location.pathname.replace(new RegExp('^' + config.relative_path), '');
- var hookData = { url: url, data: data };
+ const url = config.relative_path + '/api' + location.pathname.replace(new RegExp('^' + config.relative_path), '');
+ const hookData = { url: url, data: data };
hooks.fire('action:infinitescroll.loadmore.xhr', hookData);
$.get(url, data, function (data) {
@@ -107,10 +107,10 @@ define('forum/infinitescroll', ['hooks'], function (hooks) {
return;
}
- var removeCount = els.length - count;
+ const removeCount = els.length - count;
if (direction > 0) {
- var height = $(document).height();
- var scrollTop = $(window).scrollTop();
+ const height = $(document).height();
+ const scrollTop = $(window).scrollTop();
els.slice(0, removeCount).remove();
diff --git a/public/src/client/ip-blacklist.js b/public/src/client/ip-blacklist.js
index 1d5cd4a16f..624fe70ee5 100644
--- a/public/src/client/ip-blacklist.js
+++ b/public/src/client/ip-blacklist.js
@@ -2,10 +2,10 @@
define('forum/ip-blacklist', ['Chart', 'benchpress', 'bootbox'], function (Chart, Benchpress, bootbox) {
- var Blacklist = {};
+ const Blacklist = {};
Blacklist.init = function () {
- var blacklist = $('#blacklist-rules');
+ const blacklist = $('#blacklist-rules');
blacklist.on('keyup', function () {
$('#blacklist-rules-holder').val(blacklist.val());
@@ -42,12 +42,12 @@ define('forum/ip-blacklist', ['Chart', 'benchpress', 'bootbox'], function (Chart
};
Blacklist.setupAnalytics = function () {
- var hourlyCanvas = document.getElementById('blacklist:hourly');
- var dailyCanvas = document.getElementById('blacklist:daily');
- var hourlyLabels = utils.getHoursArray().map(function (text, idx) {
+ const hourlyCanvas = document.getElementById('blacklist:hourly');
+ const dailyCanvas = document.getElementById('blacklist:daily');
+ const hourlyLabels = utils.getHoursArray().map(function (text, idx) {
return idx % 3 ? '' : text;
});
- var dailyLabels = utils.getDaysArray().slice(-7).map(function (text, idx) {
+ const dailyLabels = utils.getDaysArray().slice(-7).map(function (text, idx) {
return idx % 3 ? '' : text;
});
@@ -55,7 +55,7 @@ define('forum/ip-blacklist', ['Chart', 'benchpress', 'bootbox'], function (Chart
Chart.defaults.global.tooltips.enabled = false;
}
- var data = {
+ const data = {
'blacklist:hourly': {
labels: hourlyLabels,
datasets: [
diff --git a/public/src/client/login.js b/public/src/client/login.js
index b839c00efb..9b130a4939 100644
--- a/public/src/client/login.js
+++ b/public/src/client/login.js
@@ -2,14 +2,14 @@
define('forum/login', ['hooks', 'translator', 'jquery-form'], function (hooks, translator) {
- var Login = {
+ const Login = {
_capsState: false,
};
Login.init = function () {
- var errorEl = $('#login-error-notify');
- var submitEl = $('#login');
- var formEl = $('#login-form');
+ const errorEl = $('#login-error-notify');
+ const submitEl = $('#login');
+ const formEl = $('#login-form');
submitEl.on('click', function (e) {
e.preventDefault();
@@ -36,17 +36,17 @@ define('forum/login', ['hooks', 'translator', 'jquery-form'], function (hooks, t
},
success: function (data) {
hooks.fire('action:app.loggedIn', data);
- var pathname = utils.urlToLocation(data.next).pathname;
- var params = utils.params({ url: data.next });
+ const pathname = utils.urlToLocation(data.next).pathname;
+ const params = utils.params({ url: data.next });
params.loggedin = true;
delete params.register; // clear register message incase it exists
- var qs = decodeURIComponent($.param(params));
+ const qs = decodeURIComponent($.param(params));
window.location.href = pathname + '?' + qs;
},
error: function (data) {
- var message = data.responseText;
- var errInfo = data.responseJSON;
+ let message = data.responseText;
+ const errInfo = data.responseJSON;
if (data.status === 403 && data.responseText === 'Forbidden') {
window.location.href = config.relative_path + '/login?error=csrf-invalid';
} else if (errInfo && errInfo.hasOwnProperty('banned_until')) {
diff --git a/public/src/client/notifications.js b/public/src/client/notifications.js
index 97e7bb3129..e13da8f707 100644
--- a/public/src/client/notifications.js
+++ b/public/src/client/notifications.js
@@ -2,12 +2,12 @@
define('forum/notifications', ['components'], function (components) {
- var Notifications = {};
+ const Notifications = {};
Notifications.init = function () {
- var listEl = $('.notifications-list');
+ const listEl = $('.notifications-list');
listEl.on('click', '[component="notifications/item/link"]', function () {
- var nid = $(this).parents('[data-nid]').attr('data-nid');
+ const nid = $(this).parents('[data-nid]').attr('data-nid');
socket.emit('notifications.markRead', nid, function (err) {
if (err) {
return app.alertError(err);
diff --git a/public/src/client/pagination.js b/public/src/client/pagination.js
index 69d0294573..8055708a90 100644
--- a/public/src/client/pagination.js
+++ b/public/src/client/pagination.js
@@ -2,7 +2,7 @@
define('forum/pagination', ['bootbox'], function (bootbox) {
- var pagination = {};
+ const pagination = {};
pagination.init = function () {
$('body').on('click', '[component="pagination/select-page"]', function () {
@@ -20,10 +20,10 @@ define('forum/pagination', ['bootbox'], function (bootbox) {
return;
}
- var query = utils.params();
+ const query = utils.params();
query.page = page;
- var url = window.location.pathname + '?' + $.param(query);
+ const url = window.location.pathname + '?' + $.param(query);
ajaxify.go(url, callback);
};
diff --git a/public/src/client/popular.js b/public/src/client/popular.js
index df9a656411..0ce846b784 100644
--- a/public/src/client/popular.js
+++ b/public/src/client/popular.js
@@ -2,7 +2,7 @@
define('forum/popular', ['topicList'], function (topicList) {
- var Popular = {};
+ const Popular = {};
Popular.init = function () {
app.enterRoom('popular_topics');
diff --git a/public/src/client/post-queue.js b/public/src/client/post-queue.js
index 6551fb031b..37934b0ea8 100644
--- a/public/src/client/post-queue.js
+++ b/public/src/client/post-queue.js
@@ -4,7 +4,7 @@
define('forum/post-queue', [
'categoryFilter', 'categorySelector', 'api',
], function (categoryFilter, categorySelector, api) {
- var PostQueue = {};
+ const PostQueue = {};
PostQueue.init = function () {
$('[data-toggle="tooltip"]').tooltip();
@@ -14,10 +14,10 @@ define('forum/post-queue', [
});
$('.posts-list').on('click', '[data-action]', function () {
- var parent = $(this).parents('[data-id]');
- var action = $(this).attr('data-action');
- var id = parent.attr('data-id');
- var listContainer = parent.get(0).parentNode;
+ const parent = $(this).parents('[data-id]');
+ const action = $(this).attr('data-action');
+ const id = parent.attr('data-id');
+ const listContainer = parent.get(0).parentNode;
if (!['accept', 'reject'].some(function (valid) {
return action === valid;
@@ -42,8 +42,8 @@ define('forum/post-queue', [
handleContentEdit('.topic-title', '.topic-title-editable', 'input');
$('.posts-list').on('click', '.topic-category[data-editable]', function () {
- var $this = $(this);
- var id = $this.parents('[data-id]').attr('data-id');
+ const $this = $(this);
+ const id = $this.parents('[data-id]').attr('data-id');
categorySelector.modal({
onSubmit: function (selectedCategory) {
Promise.all([
@@ -53,7 +53,7 @@ define('forum/post-queue', [
cid: selectedCategory.cid,
}),
]).then(function (result) {
- var category = result[0];
+ const category = result[0];
app.parseAndTranslate('post-queue', 'posts', {
posts: [{
category: category,
@@ -79,8 +79,8 @@ define('forum/post-queue', [
function handleContentEdit(displayClass, editableClass, inputSelector) {
$('.posts-list').on('click', displayClass, function () {
- var el = $(this);
- var inputEl = el.parent().find(editableClass);
+ const el = $(this);
+ const inputEl = el.parent().find(editableClass);
if (inputEl.length) {
el.addClass('hidden');
inputEl.removeClass('hidden').find(inputSelector).focus();
@@ -88,10 +88,10 @@ define('forum/post-queue', [
});
$('.posts-list').on('blur', editableClass + ' ' + inputSelector, function () {
- var textarea = $(this);
- var preview = textarea.parent().parent().find(displayClass);
- var id = textarea.parents('[data-id]').attr('data-id');
- var titleEdit = displayClass === '.topic-title';
+ const textarea = $(this);
+ const preview = textarea.parent().parent().find(displayClass);
+ const id = textarea.parents('[data-id]').attr('data-id');
+ const titleEdit = displayClass === '.topic-title';
socket.emit('posts.editQueuedContent', {
id: id,
diff --git a/public/src/client/recent.js b/public/src/client/recent.js
index 93e3593039..e54415d814 100644
--- a/public/src/client/recent.js
+++ b/public/src/client/recent.js
@@ -1,7 +1,7 @@
'use strict';
define('forum/recent', ['topicList'], function (topicList) {
- var Recent = {};
+ const Recent = {};
Recent.init = function () {
app.enterRoom('recent_topics');
diff --git a/public/src/client/register.js b/public/src/client/register.js
index e0bf74b86a..758f402feb 100644
--- a/public/src/client/register.js
+++ b/public/src/client/register.js
@@ -4,21 +4,21 @@
define('forum/register', [
'translator', 'zxcvbn', 'slugify', 'api', 'bootbox', 'forum/login', 'jquery-form',
], function (translator, zxcvbn, slugify, api, bootbox, Login) {
- var Register = {};
- var validationError = false;
- var successIcon = '';
+ const Register = {};
+ let validationError = false;
+ const successIcon = '';
Register.init = function () {
- var username = $('#username');
- var password = $('#password');
- var password_confirm = $('#password-confirm');
- var register = $('#register');
+ const username = $('#username');
+ const password = $('#password');
+ const password_confirm = $('#password-confirm');
+ const register = $('#register');
handleLanguageOverride();
$('#content #noscript').val('false');
- var query = utils.params();
+ const query = utils.params();
if (query.token) {
$('#token').val(query.token);
}
@@ -57,8 +57,8 @@ define('forum/register', [
Login.capsLockCheck(document.querySelector('#password'), document.querySelector('#caps-lock-warning'));
register.on('click', function (e) {
- var registerBtn = $(this);
- var errorEl = $('#register-error-notify');
+ const registerBtn = $(this);
+ const errorEl = $('#register-error-notify');
errorEl.addClass('hidden');
e.preventDefault();
validateForm(function () {
@@ -78,11 +78,11 @@ define('forum/register', [
return;
}
if (data.next) {
- var pathname = utils.urlToLocation(data.next).pathname;
+ const pathname = utils.urlToLocation(data.next).pathname;
- var params = utils.params({ url: data.next });
+ const params = utils.params({ url: data.next });
params.registered = true;
- var qs = decodeURIComponent($.param(params));
+ const qs = decodeURIComponent($.param(params));
window.location.href = pathname + '?' + qs;
} else if (data.message) {
@@ -114,8 +114,8 @@ define('forum/register', [
function validateUsername(username, callback) {
callback = callback || function () {};
- var username_notify = $('#username-notify');
- var userslug = slugify(username);
+ const username_notify = $('#username-notify');
+ const userslug = slugify(username);
if (username.length < ajaxify.data.minimumUsernameLength || userslug.length < ajaxify.data.minimumUsernameLength) {
showError(username_notify, '[[error:username-too-short]]');
} else if (username.length > ajaxify.data.maximumUsernameLength) {
@@ -139,9 +139,9 @@ define('forum/register', [
}
function validatePassword(password, password_confirm) {
- var password_notify = $('#password-notify');
- var password_confirm_notify = $('#password-confirm-notify');
- var passwordStrength = zxcvbn(password);
+ const password_notify = $('#password-notify');
+ const password_confirm_notify = $('#password-confirm-notify');
+ const passwordStrength = zxcvbn(password);
if (password.length < ajaxify.data.minimumPasswordLength) {
showError(password_notify, '[[reset_password:password_too_short]]');
@@ -163,8 +163,8 @@ define('forum/register', [
}
function validatePasswordConfirm(password, password_confirm) {
- var password_notify = $('#password-notify');
- var password_confirm_notify = $('#password-confirm-notify');
+ const password_notify = $('#password-notify');
+ const password_confirm_notify = $('#password-confirm-notify');
if (!password || password_notify.hasClass('alert-error')) {
return;
@@ -200,8 +200,8 @@ define('forum/register', [
function handleLanguageOverride() {
if (!app.user.uid && config.defaultLang !== config.userLang) {
- var formEl = $('[component="register/local"]');
- var langEl = $('
');
+ const formEl = $('[component="register/local"]');
+ const langEl = $('
');
formEl.append(langEl);
}
diff --git a/public/src/client/reset.js b/public/src/client/reset.js
index 06bda6307a..0c2f4d6066 100644
--- a/public/src/client/reset.js
+++ b/public/src/client/reset.js
@@ -2,12 +2,12 @@
define('forum/reset', function () {
- var ResetPassword = {};
+ const ResetPassword = {};
ResetPassword.init = function () {
- var inputEl = $('#email');
- var errorEl = $('#error');
- var successEl = $('#success');
+ const inputEl = $('#email');
+ const errorEl = $('#error');
+ const successEl = $('#success');
$('#reset').on('click', function () {
if (inputEl.val() && inputEl.val().indexOf('@') !== -1) {
diff --git a/public/src/client/reset_code.js b/public/src/client/reset_code.js
index 5a27b16978..16333e8c3f 100644
--- a/public/src/client/reset_code.js
+++ b/public/src/client/reset_code.js
@@ -2,17 +2,17 @@
define('forum/reset_code', ['zxcvbn'], function (zxcvbn) {
- var ResetCode = {};
+ const ResetCode = {};
ResetCode.init = function () {
- var reset_code = ajaxify.data.code;
+ const reset_code = ajaxify.data.code;
- var resetEl = $('#reset');
- var password = $('#password');
- var repeat = $('#repeat');
+ const resetEl = $('#reset');
+ const password = $('#password');
+ const repeat = $('#repeat');
resetEl.on('click', function () {
- var strength = zxcvbn(password.val());
+ const strength = zxcvbn(password.val());
if (password.val().length < ajaxify.data.minimumPasswordLength) {
$('#notice').removeClass('hidden');
$('#notice strong').translateText('[[reset_password:password_too_short]]');
diff --git a/public/src/client/search.js b/public/src/client/search.js
index 9412acc6d8..ac0d1ccfb1 100644
--- a/public/src/client/search.js
+++ b/public/src/client/search.js
@@ -7,12 +7,12 @@ define('forum/search', [
'storage',
'hooks',
], function (searchModule, autocomplete, storage, hooks) {
- var Search = {};
+ const Search = {};
Search.init = function () {
- var searchQuery = $('#results').attr('data-search-query');
+ const searchQuery = $('#results').attr('data-search-query');
- var searchIn = $('#search-in');
+ const searchIn = $('#search-in');
searchIn.on('change', function () {
updateFormItemVisiblity(searchIn.val());
@@ -36,8 +36,8 @@ define('forum/search', [
};
function getSearchDataFromDOM() {
- var form = $('#advanced-search');
- var searchData = {
+ const form = $('#advanced-search');
+ const searchData = {
in: $('#search-in').val(),
};
searchData.term = $('#search-input').val();
@@ -65,17 +65,17 @@ define('forum/search', [
}
function updateFormItemVisiblity(searchIn) {
- var hide = searchIn.indexOf('posts') === -1 && searchIn.indexOf('titles') === -1;
+ const hide = searchIn.indexOf('posts') === -1 && searchIn.indexOf('titles') === -1;
$('.post-search-item').toggleClass('hide', hide);
}
function fillOutForm() {
- var params = utils.params({
+ const params = utils.params({
disableToType: true,
});
- var searchData = searchModule.getSearchPreferences();
- var formData = utils.merge(searchData, params);
+ const searchData = searchModule.getSearchPreferences();
+ const formData = utils.merge(searchData, params);
if (formData) {
if (ajaxify.data.term) {
@@ -127,8 +127,8 @@ define('forum/search', [
$('#post-sort-direction').val(formData.sortDirection || 'desc');
if (formData.showAs) {
- var isTopic = formData.showAs === 'topics';
- var isPost = formData.showAs === 'posts';
+ const isTopic = formData.showAs === 'topics';
+ const isPost = formData.showAs === 'posts';
$('#show-as-topics').prop('checked', isTopic).parent().toggleClass('active', isTopic);
$('#show-as-posts').prop('checked', isPost).parent().toggleClass('active', isPost);
}
@@ -148,7 +148,7 @@ define('forum/search', [
$('#clear-preferences').on('click', function () {
storage.removeItem('search-preferences');
- var query = $('#search-input').val();
+ const query = $('#search-input').val();
$('#advanced-search')[0].reset();
$('#search-input').val(query);
app.alertSuccess('[[search:search-preferences-cleared]]');
@@ -157,7 +157,7 @@ define('forum/search', [
}
function enableAutoComplete() {
- var userEl = $('#posted-by-user');
+ const userEl = $('#posted-by-user');
userEl.tagsinput({
confirmKeys: [13, 44],
trimValue: true,
@@ -166,7 +166,7 @@ define('forum/search', [
autocomplete.user(userEl.siblings('.bootstrap-tagsinput').find('input'));
}
- var tagEl = $('#has-tags');
+ const tagEl = $('#has-tags');
tagEl.tagsinput({
confirmKeys: [13, 44],
trimValue: true,
diff --git a/public/src/client/tag.js b/public/src/client/tag.js
index ce45a94aae..4d4a048a2c 100644
--- a/public/src/client/tag.js
+++ b/public/src/client/tag.js
@@ -1,7 +1,7 @@
'use strict';
define('forum/tag', ['topicList', 'forum/infinitescroll'], function (topicList) {
- var Tag = {};
+ const Tag = {};
Tag.init = function () {
app.enterRoom('tags');
diff --git a/public/src/client/tags.js b/public/src/client/tags.js
index bde065269e..b5f88d05b0 100644
--- a/public/src/client/tags.js
+++ b/public/src/client/tags.js
@@ -2,7 +2,7 @@
define('forum/tags', ['forum/infinitescroll'], function (infinitescroll) {
- var Tags = {};
+ const Tags = {};
Tags.init = function () {
app.enterRoom('tags');
diff --git a/public/src/client/top.js b/public/src/client/top.js
index 9ad2e7b886..b2eb44e99f 100644
--- a/public/src/client/top.js
+++ b/public/src/client/top.js
@@ -1,7 +1,7 @@
'use strict';
define('forum/top', ['topicList'], function (topicList) {
- var Top = {};
+ const Top = {};
Top.init = function () {
app.enterRoom('top_topics');
diff --git a/public/src/client/topic.js b/public/src/client/topic.js
index adf46848e5..edba451ae9 100644
--- a/public/src/client/topic.js
+++ b/public/src/client/topic.js
@@ -18,8 +18,8 @@ define('forum/topic', [
events, posts, images, navigator, sort,
components, storage, hooks
) {
- var Topic = {};
- var currentUrl = '';
+ const Topic = {};
+ let currentUrl = '';
$(window).on('action:ajaxify.start', function (ev, data) {
if (Topic.replaceURLTimeout) {
@@ -42,7 +42,7 @@ define('forum/topic', [
});
Topic.init = function () {
- var tid = ajaxify.data.tid;
+ const tid = ajaxify.data.tid;
currentUrl = ajaxify.currentPage;
hooks.fire('action:topic.loading');
@@ -95,8 +95,8 @@ define('forum/topic', [
if (config.topicSearchEnabled) {
require(['mousetrap'], function (mousetrap) {
mousetrap.bind(['command+f', 'ctrl+f'], function (e) {
- var match = ajaxify.currentPage.match(/^topic\/([\d]+)/);
- var tid;
+ const match = ajaxify.currentPage.match(/^topic\/([\d]+)/);
+ let tid;
if (match) {
e.preventDefault();
tid = match[1];
@@ -124,13 +124,13 @@ define('forum/topic', [
function handleBookmark(tid) {
if (window.location.hash) {
- var el = $(utils.escapeHTML(window.location.hash));
+ const el = $(utils.escapeHTML(window.location.hash));
if (el.length) {
return navigator.scrollToElement(el, true, 0);
}
}
- var bookmark = ajaxify.data.bookmark || storage.getItem('topic:' + tid + ':bookmark');
- var postIndex = ajaxify.data.postIndex;
+ const bookmark = ajaxify.data.bookmark || storage.getItem('topic:' + tid + ':bookmark');
+ const postIndex = ajaxify.data.postIndex;
if (postIndex > 1) {
if (components.get('post/anchor', postIndex - 1).length) {
@@ -160,19 +160,19 @@ define('forum/topic', [
function addBlockQuoteHandler() {
components.get('topic').on('click', 'blockquote .toggle', function () {
- var blockQuote = $(this).parent('blockquote');
- var toggle = $(this);
+ const blockQuote = $(this).parent('blockquote');
+ const toggle = $(this);
blockQuote.toggleClass('uncollapsed');
- var collapsed = !blockQuote.hasClass('uncollapsed');
+ const collapsed = !blockQuote.hasClass('uncollapsed');
toggle.toggleClass('fa-angle-down', collapsed).toggleClass('fa-angle-up', !collapsed);
});
}
function addParentHandler() {
components.get('topic').on('click', '[component="post/parent"]', function (e) {
- var toPid = $(this).attr('data-topid');
+ const toPid = $(this).attr('data-topid');
- var toPost = $('[component="topic"]>[component="post"][data-pid="' + toPid + '"]');
+ const toPost = $('[component="topic"]>[component="post"][data-pid="' + toPid + '"]');
if (toPost.length) {
e.preventDefault();
navigator.scrollToIndex(toPost.attr('data-index'), true);
@@ -183,18 +183,18 @@ define('forum/topic', [
function addDropupHandler() {
// Locate all dropdowns
- var target = $('#content .dropdown-menu').parent();
+ const target = $('#content .dropdown-menu').parent();
// Toggle dropup if past 50% of screen
$(target).on('show.bs.dropdown', function () {
- var dropUp = this.getBoundingClientRect().top > ($(window).height() / 2);
+ const dropUp = this.getBoundingClientRect().top > ($(window).height() / 2);
$(this).toggleClass('dropup', dropUp);
});
}
function addRepliesHandler() {
$('[component="topic"]').on('click', '[component="post/reply-count"]', function () {
- var btn = $(this);
+ const btn = $(this);
require(['forum/topic/replies'], function (replies) {
replies.init(btn);
});
@@ -202,7 +202,7 @@ define('forum/topic', [
}
function updateTopicTitle() {
- var span = components.get('navbar/title').find('span');
+ const span = components.get('navbar/title').find('span');
if ($(window).scrollTop() > 50 && span.hasClass('hidden')) {
span.html(ajaxify.data.title).removeClass('hidden');
} else if ($(window).scrollTop() <= 50 && !span.hasClass('hidden')) {
@@ -214,7 +214,7 @@ define('forum/topic', [
}
Topic.navigatorCallback = function (index, elementCount) {
- var path = ajaxify.removeRelativePath(window.location.pathname.slice(1));
+ const path = ajaxify.removeRelativePath(window.location.pathname.slice(1));
if (!path.startsWith('topic')) {
return;
}
@@ -223,7 +223,7 @@ define('forum/topic', [
return;
}
- var newUrl = 'topic/' + ajaxify.data.slug + (index > 1 ? ('/' + index) : '');
+ const newUrl = 'topic/' + ajaxify.data.slug + (index > 1 ? ('/' + index) : '');
if (newUrl !== currentUrl) {
if (Topic.replaceURLTimeout) {
clearTimeout(Topic.replaceURLTimeout);
@@ -239,7 +239,7 @@ define('forum/topic', [
Topic.replaceURLTimeout = 0;
if (ajaxify.data.updateUrlWithPostIndex && history.replaceState) {
- var search = window.location.search || '';
+ let search = window.location.search || '';
if (!config.usePagination) {
search = (search && !/^\?page=\d+$/.test(search) ? search : '');
}
@@ -253,8 +253,8 @@ define('forum/topic', [
};
function updateUserBookmark(index) {
- var bookmarkKey = 'topic:' + ajaxify.data.tid + ':bookmark';
- var currentBookmark = ajaxify.data.bookmark || storage.getItem(bookmarkKey);
+ const bookmarkKey = 'topic:' + ajaxify.data.tid + ':bookmark';
+ const currentBookmark = ajaxify.data.bookmark || storage.getItem(bookmarkKey);
if (config.topicPostSort === 'newest_to_oldest') {
index = Math.max(1, ajaxify.data.postcount - index + 2);
}
diff --git a/public/src/client/topic/change-owner.js b/public/src/client/topic/change-owner.js
index 04fda698f5..f11a75099c 100644
--- a/public/src/client/topic/change-owner.js
+++ b/public/src/client/topic/change-owner.js
@@ -6,11 +6,11 @@ define('forum/topic/change-owner', [
'postSelect',
'autocomplete',
], function (components, postSelect, autocomplete) {
- var ChangeOwner = {};
+ const ChangeOwner = {};
- var modal;
- var commit;
- var toUid = 0;
+ let modal;
+ let commit;
+ let toUid = 0;
ChangeOwner.init = function (postEl) {
if (modal) {
return;
diff --git a/public/src/client/topic/delete-posts.js b/public/src/client/topic/delete-posts.js
index 76cd4ed9c2..b08697c18a 100644
--- a/public/src/client/topic/delete-posts.js
+++ b/public/src/client/topic/delete-posts.js
@@ -2,11 +2,11 @@
define('forum/topic/delete-posts', ['components', 'postSelect'], function (components, postSelect) {
- var DeletePosts = {};
- var modal;
- var deleteBtn;
- var purgeBtn;
- var tid;
+ const DeletePosts = {};
+ let modal;
+ let deleteBtn;
+ let purgeBtn;
+ let tid;
DeletePosts.init = function () {
tid = ajaxify.data.tid;
diff --git a/public/src/client/topic/events.js b/public/src/client/topic/events.js
index e3ae6d82f1..fe08787232 100644
--- a/public/src/client/topic/events.js
+++ b/public/src/client/topic/events.js
@@ -12,9 +12,9 @@ define('forum/topic/events', [
'benchpress',
'hooks',
], function (postTools, threadTools, posts, images, components, translator, Benchpress, hooks) {
- var Events = {};
+ const Events = {};
- var events = {
+ const events = {
'event:user_status_change': onUserStatusChange,
'event:voted': updatePostVotesAndUserReputation,
'event:bookmarked': updateBookmarkCount,
@@ -50,7 +50,7 @@ define('forum/topic/events', [
Events.init = function () {
Events.removeListeners();
- for (var eventName in events) {
+ for (const eventName in events) {
if (events.hasOwnProperty(eventName)) {
socket.on(eventName, events[eventName]);
}
@@ -58,7 +58,7 @@ define('forum/topic/events', [
};
Events.removeListeners = function () {
- for (var eventName in events) {
+ for (const eventName in events) {
if (events.hasOwnProperty(eventName)) {
socket.removeListener(eventName, events[eventName]);
}
@@ -70,10 +70,10 @@ define('forum/topic/events', [
}
function updatePostVotesAndUserReputation(data) {
- var votes = $('[data-pid="' + data.post.pid + '"] [component="post/vote-count"]').filter(function (index, el) {
+ const votes = $('[data-pid="' + data.post.pid + '"] [component="post/vote-count"]').filter(function (index, el) {
return parseInt($(el).closest('[data-pid]').attr('data-pid'), 10) === parseInt(data.post.pid, 10);
});
- var reputationElements = $('.reputation[data-uid="' + data.post.uid + '"]');
+ const reputationElements = $('.reputation[data-uid="' + data.post.uid + '"]');
votes.html(data.post.votes).attr('data-votes', data.post.votes);
reputationElements.html(data.user.reputation).attr('data-reputation', data.user.reputation);
}
@@ -104,16 +104,16 @@ define('forum/topic/events', [
if (!data || !data.post || parseInt(data.post.tid, 10) !== parseInt(ajaxify.data.tid, 10)) {
return;
}
- var editedPostEl = components.get('post/content', data.post.pid).filter(function (index, el) {
+ const editedPostEl = components.get('post/content', data.post.pid).filter(function (index, el) {
return parseInt($(el).closest('[data-pid]').attr('data-pid'), 10) === parseInt(data.post.pid, 10);
});
- var editorEl = $('[data-pid="' + data.post.pid + '"] [component="post/editor"]').filter(function (index, el) {
+ const editorEl = $('[data-pid="' + data.post.pid + '"] [component="post/editor"]').filter(function (index, el) {
return parseInt($(el).closest('[data-pid]').attr('data-pid'), 10) === parseInt(data.post.pid, 10);
});
- var topicTitle = components.get('topic/title');
- var navbarTitle = components.get('navbar/title').find('span');
- var breadCrumb = components.get('breadcrumb/current');
+ const topicTitle = components.get('topic/title');
+ const navbarTitle = components.get('navbar/title').find('span');
+ const breadCrumb = components.get('breadcrumb/current');
if (data.topic.rescheduled) {
return ajaxify.go('topic/' + data.topic.slug, null, true);
@@ -121,7 +121,7 @@ define('forum/topic/events', [
if (topicTitle.length && data.topic.title && data.topic.renamed) {
ajaxify.data.title = data.topic.title;
- var newUrl = 'topic/' + data.topic.slug + (window.location.search ? window.location.search : '');
+ const newUrl = 'topic/' + data.topic.slug + (window.location.search ? window.location.search : '');
history.replaceState({ url: newUrl }, null, window.location.protocol + '//' + window.location.host + config.relative_path + '/' + newUrl);
topicTitle.fadeOut(250, function () {
@@ -143,7 +143,7 @@ define('forum/topic/events', [
posts.addBlockquoteEllipses(editedPostEl.parent());
editedPostEl.fadeIn(250);
- var editData = {
+ const editData = {
editor: data.editor,
editedISO: utils.toISOString(data.post.edited),
};
@@ -160,7 +160,7 @@ define('forum/topic/events', [
if (data.topic.tags && tagsUpdated(data.topic.tags)) {
Benchpress.render('partials/topic/tags', { tags: data.topic.tags }).then(function (html) {
- var tags = $('.tags');
+ const tags = $('.tags');
tags.fadeOut(250, function () {
tags.html(html).fadeIn(250);
@@ -176,7 +176,7 @@ define('forum/topic/events', [
return true;
}
- for (var i = 0; i < tags.length; i += 1) {
+ for (let i = 0; i < tags.length; i += 1) {
if (!$('.tags .tag-item[data-tag="' + tags[i].value + '"]').length) {
return true;
}
@@ -200,14 +200,14 @@ define('forum/topic/events', [
}
function togglePostDeleteState(data) {
- var postEl = components.get('post', 'pid', data.pid);
+ const postEl = components.get('post', 'pid', data.pid);
if (!postEl.length) {
return;
}
postEl.toggleClass('deleted');
- var isDeleted = postEl.hasClass('deleted');
+ const isDeleted = postEl.hasClass('deleted');
postTools.toggle(data.pid, isDeleted);
if (!ajaxify.data.privileges.isAdminOrMod && parseInt(data.uid, 10) !== parseInt(app.user.uid, 10)) {
@@ -221,7 +221,7 @@ define('forum/topic/events', [
}
function togglePostBookmark(data) {
- var el = $('[data-pid="' + data.post.pid + '"] [component="post/bookmark"]').filter(function (index, el) {
+ const el = $('[data-pid="' + data.post.pid + '"] [component="post/bookmark"]').filter(function (index, el) {
return parseInt($(el).closest('[data-pid]').attr('data-pid'), 10) === parseInt(data.post.pid, 10);
});
if (!el.length) {
@@ -235,7 +235,7 @@ define('forum/topic/events', [
}
function togglePostVote(data) {
- var post = $('[data-pid="' + data.post.pid + '"]');
+ const post = $('[data-pid="' + data.post.pid + '"]');
post.find('[component="post/upvote"]').filter(function (index, el) {
return parseInt($(el).closest('[data-pid]').attr('data-pid'), 10) === parseInt(data.post.pid, 10);
}).toggleClass('upvoted', data.upvote);
@@ -245,7 +245,7 @@ define('forum/topic/events', [
}
function onNewNotification(data) {
- var tid = ajaxify.data.tid;
+ const tid = ajaxify.data.tid;
if (data && data.tid && parseInt(data.tid, 10) === parseInt(tid, 10)) {
socket.emit('topics.markTopicNotificationsRead', [tid]);
}
diff --git a/public/src/client/topic/fork.js b/public/src/client/topic/fork.js
index 3b540e58e7..ba4e220d2c 100644
--- a/public/src/client/topic/fork.js
+++ b/public/src/client/topic/fork.js
@@ -2,10 +2,10 @@
define('forum/topic/fork', ['components', 'postSelect'], function (components, postSelect) {
- var Fork = {};
- var forkModal;
- var forkCommit;
- var fromTid;
+ const Fork = {};
+ let forkModal;
+ let forkCommit;
+ let fromTid;
Fork.init = function () {
fromTid = ajaxify.data.tid;
diff --git a/public/src/client/topic/images.js b/public/src/client/topic/images.js
index c1dc5866db..a04b22a9e9 100644
--- a/public/src/client/topic/images.js
+++ b/public/src/client/topic/images.js
@@ -2,14 +2,14 @@
define('forum/topic/images', [], function () {
- var Images = {};
+ const Images = {};
Images.wrapImagesInLinks = function (posts) {
posts.find('[component="post/content"] img:not(.emoji)').each(function () {
- var $this = $(this);
- var src = $this.attr('src') || '';
- var alt = $this.attr('alt') || '';
- var suffixRegex = /-resized(\.[\w]+)?$/;
+ const $this = $(this);
+ let src = $this.attr('src') || '';
+ const alt = $this.attr('alt') || '';
+ const suffixRegex = /-resized(\.[\w]+)?$/;
if (src === 'about:blank') {
return;
@@ -18,9 +18,9 @@ define('forum/topic/images', [], function () {
if (utils.isRelativeUrl(src) && suffixRegex.test(src)) {
src = src.replace(suffixRegex, '$1');
}
- var srcExt = src.split('.').slice(1).pop();
- var altFilename = alt.split('/').pop();
- var altExt = altFilename.split('.').slice(1).pop();
+ const srcExt = src.split('.').slice(1).pop();
+ const altFilename = alt.split('/').pop();
+ const altExt = altFilename.split('.').slice(1).pop();
if (!$this.parent().is('a')) {
$this.wrap('
1) {
message = '[[topic:topic_move_multiple_success, ' + selectedCategory.name + ']]';
} else if (!Move.tids) {
message = '[[topic:topic_move_all_success, ' + selectedCategory.name + ']]';
}
- var data = {
+ const data = {
tids: Move.tids ? Move.tids.slice() : null,
cid: selectedCategory.cid,
currentCid: Move.currentCid,
diff --git a/public/src/client/topic/postTools.js b/public/src/client/topic/postTools.js
index 793153325c..5d259257df 100644
--- a/public/src/client/topic/postTools.js
+++ b/public/src/client/topic/postTools.js
@@ -11,9 +11,9 @@ define('forum/topic/postTools', [
'bootbox',
'hooks',
], function (share, navigator, components, translator, votes, api, bootbox, hooks) {
- var PostTools = {};
+ const PostTools = {};
- var staleReplyAnyway = false;
+ let staleReplyAnyway = false;
PostTools.init = function (tid) {
staleReplyAnyway = false;
@@ -31,14 +31,14 @@ define('forum/topic/postTools', [
function renderMenu() {
$('[component="topic"]').on('show.bs.dropdown', '.moderator-tools', function () {
- var $this = $(this);
- var dropdownMenu = $this.find('.dropdown-menu');
+ const $this = $(this);
+ const dropdownMenu = $this.find('.dropdown-menu');
if (dropdownMenu.html()) {
return;
}
- var postEl = $this.parents('[data-pid]');
- var pid = postEl.attr('data-pid');
- var index = parseInt(postEl.attr('data-index'), 10);
+ const postEl = $this.parents('[data-pid]');
+ const pid = postEl.attr('data-pid');
+ const index = parseInt(postEl.attr('data-index'), 10);
socket.emit('posts.loadPostTools', { pid: pid, cid: ajaxify.data.cid }, function (err, data) {
if (err) {
@@ -58,7 +58,7 @@ define('forum/topic/postTools', [
}
PostTools.toggle = function (pid, isDeleted) {
- var postEl = components.get('post', 'pid', pid);
+ const postEl = components.get('post', 'pid', pid);
postEl.find('[component="post/quote"], [component="post/bookmark"], [component="post/reply"], [component="post/flag"], [component="user/chat"]')
.toggleClass('hidden', isDeleted);
@@ -75,14 +75,14 @@ define('forum/topic/postTools', [
};
PostTools.updatePostCount = function (postCount) {
- var postCountEl = components.get('topic/post-count');
+ const postCountEl = components.get('topic/post-count');
postCountEl.html(postCount).attr('title', postCount);
utils.makeNumbersHumanReadable(postCountEl);
navigator.setCount(postCount);
};
function addPostHandlers(tid) {
- var postContainer = components.get('topic');
+ const postContainer = components.get('topic');
postContainer.on('click', '[component="post/quote"]', function () {
onQuoteClicked($(this), tid);
@@ -123,7 +123,7 @@ define('forum/topic/postTools', [
});
postContainer.on('click', '[component="post/flag"]', function () {
- var pid = getData($(this), 'data-pid');
+ const pid = getData($(this), 'data-pid');
require(['flags'], function (flags) {
flags.showFlagModal({
type: 'post',
@@ -133,7 +133,7 @@ define('forum/topic/postTools', [
});
postContainer.on('click', '[component="post/flagUser"]', function () {
- var uid = getData($(this), 'data-uid');
+ const uid = getData($(this), 'data-uid');
require(['flags'], function (flags) {
flags.showFlagModal({
type: 'user',
@@ -143,17 +143,17 @@ define('forum/topic/postTools', [
});
postContainer.on('click', '[component="post/flagResolve"]', function () {
- var flagId = $(this).attr('data-flagId');
+ const flagId = $(this).attr('data-flagId');
require(['flags'], function (flags) {
flags.resolve(flagId);
});
});
postContainer.on('click', '[component="post/edit"]', function () {
- var btn = $(this);
+ const btn = $(this);
- var timestamp = parseInt(getData(btn, 'data-timestamp'), 10);
- var postEditDuration = parseInt(ajaxify.data.postEditDuration, 10);
+ const timestamp = parseInt(getData(btn, 'data-timestamp'), 10);
+ const postEditDuration = parseInt(ajaxify.data.postEditDuration, 10);
if (checkDuration(postEditDuration, timestamp, 'post-edit-duration-expired')) {
hooks.fire('action:composer.post.edit', {
@@ -164,7 +164,7 @@ define('forum/topic/postTools', [
if (config.enablePostHistory && ajaxify.data.privileges['posts:history']) {
postContainer.on('click', '[component="post/view-history"], [component="post/edit-indicator"]', function () {
- var btn = $(this);
+ const btn = $(this);
require(['forum/topic/diffs'], function (diffs) {
diffs.open(getData(btn, 'data-pid'));
});
@@ -172,9 +172,9 @@ define('forum/topic/postTools', [
}
postContainer.on('click', '[component="post/delete"]', function () {
- var btn = $(this);
- var timestamp = parseInt(getData(btn, 'data-timestamp'), 10);
- var postDeleteDuration = parseInt(ajaxify.data.postDeleteDuration, 10);
+ const btn = $(this);
+ const timestamp = parseInt(getData(btn, 'data-timestamp'), 10);
+ const postDeleteDuration = parseInt(ajaxify.data.postDeleteDuration, 10);
if (checkDuration(postDeleteDuration, timestamp, 'post-delete-duration-expired')) {
togglePostDelete($(this));
}
@@ -182,11 +182,11 @@ define('forum/topic/postTools', [
function checkDuration(duration, postTimestamp, languageKey) {
if (!ajaxify.data.privileges.isAdminOrMod && duration && Date.now() - postTimestamp > duration * 1000) {
- var numDays = Math.floor(duration / 86400);
- var numHours = Math.floor((duration % 86400) / 3600);
- var numMinutes = Math.floor(((duration % 86400) % 3600) / 60);
- var numSeconds = ((duration % 86400) % 3600) % 60;
- var msg = '[[error:' + languageKey + ', ' + duration + ']]';
+ const numDays = Math.floor(duration / 86400);
+ const numHours = Math.floor((duration % 86400) / 3600);
+ const numMinutes = Math.floor(((duration % 86400) % 3600) / 60);
+ const numSeconds = ((duration % 86400) % 3600) % 60;
+ let msg = '[[error:' + languageKey + ', ' + duration + ']]';
if (numDays) {
if (numHours) {
msg = '[[error:' + languageKey + '-days-hours, ' + numDays + ', ' + numHours + ']]';
@@ -221,21 +221,21 @@ define('forum/topic/postTools', [
});
postContainer.on('click', '[component="post/move"]', function () {
- var btn = $(this);
+ const btn = $(this);
require(['forum/topic/move-post'], function (movePost) {
movePost.init(btn.parents('[data-pid]'));
});
});
postContainer.on('click', '[component="post/change-owner"]', function () {
- var btn = $(this);
+ const btn = $(this);
require(['forum/topic/change-owner'], function (changeOwner) {
changeOwner.init(btn.parents('[data-pid]'));
});
});
postContainer.on('click', '[component="post/ban-ip"]', function () {
- var ip = $(this).attr('data-ip');
+ const ip = $(this).attr('data-ip');
socket.emit('blacklist.addRule', ip, function (err) {
if (err) {
return app.alertError(err.message);
@@ -250,16 +250,16 @@ define('forum/topic/postTools', [
}
function onReplyClicked(button, tid) {
- var selectedNode = getSelectedNode();
+ const selectedNode = getSelectedNode();
showStaleWarning(function () {
- var username = getUserSlug(button);
+ let username = getUserSlug(button);
if (getData(button, 'data-uid') === '0' || !getData(button, 'data-userslug')) {
username = '';
}
- var toPid = button.is('[component="post/reply"]') ? getData(button, 'data-pid') : null;
- var isQuoteToPid = !toPid || !selectedNode.pid || toPid === selectedNode.pid;
+ const toPid = button.is('[component="post/reply"]') ? getData(button, 'data-pid') : null;
+ const isQuoteToPid = !toPid || !selectedNode.pid || toPid === selectedNode.pid;
if (selectedNode.text && isQuoteToPid) {
username = username || selectedNode.username;
@@ -283,11 +283,11 @@ define('forum/topic/postTools', [
}
function onQuoteClicked(button, tid) {
- var selectedNode = getSelectedNode();
+ const selectedNode = getSelectedNode();
showStaleWarning(function () {
- var username = getUserSlug(button);
- var toPid = getData(button, 'data-pid');
+ const username = getUserSlug(button);
+ const toPid = getData(button, 'data-pid');
function quote(text) {
hooks.fire('action:composer.addQuote', {
@@ -313,12 +313,12 @@ define('forum/topic/postTools', [
}
function getSelectedNode() {
- var selectedText = '';
- var selectedPid;
- var username = '';
- var selection = window.getSelection ? window.getSelection() : document.selection.createRange();
- var postContents = $('[component="post"] [component="post/content"]');
- var content;
+ let selectedText = '';
+ let selectedPid;
+ let username = '';
+ const selection = window.getSelection ? window.getSelection() : document.selection.createRange();
+ const postContents = $('[component="post"] [component="post/content"]');
+ let content;
postContents.each(function (index, el) {
if (selection && selection.containsNode && el && selection.containsNode(el, true)) {
content = el;
@@ -326,9 +326,9 @@ define('forum/topic/postTools', [
});
if (content) {
- var bounds = document.createRange();
+ const bounds = document.createRange();
bounds.selectNodeContents(content);
- var range = selection.getRangeAt(0).cloneRange();
+ const range = selection.getRangeAt(0).cloneRange();
if (range.compareBoundaryPoints(Range.START_TO_START, bounds) < 0) {
range.setStart(bounds.startContainer, bounds.startOffset);
}
@@ -337,7 +337,7 @@ define('forum/topic/postTools', [
}
bounds.detach();
selectedText = range.toString();
- var postEl = $(content).parents('[component="post"]');
+ const postEl = $(content).parents('[component="post"]');
selectedPid = postEl.attr('data-pid');
username = getUserSlug($(content));
range.detach();
@@ -346,13 +346,13 @@ define('forum/topic/postTools', [
}
function bookmarkPost(button, pid) {
- var method = button.attr('data-bookmarked') === 'false' ? 'put' : 'del';
+ const method = button.attr('data-bookmarked') === 'false' ? 'put' : 'del';
api[method](`/posts/${pid}/bookmark`, undefined, function (err) {
if (err) {
return app.alertError(err);
}
- var type = method === 'put' ? 'bookmark' : 'unbookmark';
+ const type = method === 'put' ? 'bookmark' : 'unbookmark';
hooks.fire(`action:post.${type}`, { pid: pid });
});
return false;
@@ -363,8 +363,8 @@ define('forum/topic/postTools', [
}
function getUserSlug(button) {
- var slug = '';
- var post = button.parents('[data-pid]');
+ let slug = '';
+ const post = button.parents('[data-pid]');
if (button.attr('component') === 'topic/reply') {
return slug;
@@ -388,9 +388,9 @@ define('forum/topic/postTools', [
}
function togglePostDelete(button) {
- var pid = getData(button, 'data-pid');
- var postEl = components.get('post', 'pid', pid);
- var action = !postEl.hasClass('deleted') ? 'delete' : 'restore';
+ const pid = getData(button, 'data-pid');
+ const postEl = components.get('post', 'pid', pid);
+ const action = !postEl.hasClass('deleted') ? 'delete' : 'restore';
postAction(action, pid);
}
@@ -417,7 +417,7 @@ define('forum/topic/postTools', [
}
function openChat(button) {
- var post = button.parents('[data-pid]');
+ const post = button.parents('[data-pid]');
app.newChat(post.attr('data-uid'));
button.parents('.btn-group').find('.dropdown-toggle').click();
@@ -425,12 +425,12 @@ define('forum/topic/postTools', [
}
function showStaleWarning(callback) {
- var staleThreshold = Math.min(Date.now() - (1000 * 60 * 60 * 24 * ajaxify.data.topicStaleDays), 8640000000000000);
+ const staleThreshold = Math.min(Date.now() - (1000 * 60 * 60 * 24 * ajaxify.data.topicStaleDays), 8640000000000000);
if (staleReplyAnyway || ajaxify.data.lastposttime >= staleThreshold) {
return callback();
}
- var warning = bootbox.dialog({
+ const warning = bootbox.dialog({
title: '[[topic:stale.title]]',
message: '[[topic:stale.warning]]',
buttons: {
diff --git a/public/src/client/topic/posts.js b/public/src/client/topic/posts.js
index 7545e2199e..0914497bb2 100644
--- a/public/src/client/topic/posts.js
+++ b/public/src/client/topic/posts.js
@@ -12,7 +12,7 @@ define('forum/topic/posts', [
'hooks',
'helpers',
], function (pagination, infinitescroll, postTools, images, navigator, components, translator, hooks, helpers) {
- var Posts = { };
+ const Posts = { };
Posts.onNewPost = function (data) {
if (
@@ -68,8 +68,8 @@ define('forum/topic/posts', [
};
function updatePostCounts(posts) {
- for (var i = 0; i < posts.length; i += 1) {
- var cmp = components.get('user/postcount', posts[i].uid);
+ for (let i = 0; i < posts.length; i += 1) {
+ const cmp = components.get('user/postcount', posts[i].uid);
cmp.html(parseInt(cmp.attr('data-postcount'), 10) + 1);
utils.addCommasToNumbers(cmp);
}
@@ -79,7 +79,7 @@ define('forum/topic/posts', [
if (config.topicPostSort === 'newest_to_oldest') {
posts[0].index = 1;
components.get('post').not('[data-index=0]').each(function () {
- var newIndex = parseInt($(this).attr('data-index'), 10) + 1;
+ const newIndex = parseInt($(this).attr('data-index'), 10) + 1;
$(this).attr('data-index', newIndex);
});
}
@@ -90,18 +90,18 @@ define('forum/topic/posts', [
scrollToPostIfSelf(data.posts[0]);
}
- var posts = data.posts;
+ const posts = data.posts;
ajaxify.data.pagination.pageCount = Math.max(1, Math.ceil(posts[0].topic.postcount / config.postsPerPage));
- var direction = config.topicPostSort === 'oldest_to_newest' || config.topicPostSort === 'most_votes' ? 1 : -1;
+ const direction = config.topicPostSort === 'oldest_to_newest' || config.topicPostSort === 'most_votes' ? 1 : -1;
- var isPostVisible = (
+ const isPostVisible = (
ajaxify.data.pagination.currentPage === ajaxify.data.pagination.pageCount &&
direction === 1
) || (ajaxify.data.pagination.currentPage === 1 && direction === -1);
if (isPostVisible) {
- var repliesSelector = $('[component="post"]:not([data-index=0]), [component="topic/event"]');
+ const repliesSelector = $('[component="post"]:not([data-index=0]), [component="topic/event"]');
createNewPosts(data, repliesSelector, direction, false, scrollToPost);
} else if (ajaxify.data.scrollToMyPost && parseInt(posts[0].uid, 10) === parseInt(app.user.uid, 10)) {
// https://github.com/NodeBB/NodeBB/issues/5004#issuecomment-247157441
@@ -122,9 +122,9 @@ define('forum/topic/posts', [
}
function onNewPostInfiniteScroll(data) {
- var direction = (config.topicPostSort === 'oldest_to_newest' || config.topicPostSort === 'most_votes') ? 1 : -1;
+ const direction = (config.topicPostSort === 'oldest_to_newest' || config.topicPostSort === 'most_votes') ? 1 : -1;
- var isPreviousPostAdded = $('[component="post"][data-index="' + (data.posts[0].index - 1) + '"]').length;
+ const isPreviousPostAdded = $('[component="post"][data-index="' + (data.posts[0].index - 1) + '"]').length;
if (!isPreviousPostAdded && (!data.posts[0].selfPost || !ajaxify.data.scrollToMyPost)) {
return;
}
@@ -132,7 +132,7 @@ define('forum/topic/posts', [
if (!isPreviousPostAdded && data.posts[0].selfPost) {
return ajaxify.go('post/' + data.posts[0].pid);
}
- var repliesSelector = $('[component="post"]:not([data-index=0]), [component="topic/event"]');
+ const repliesSelector = $('[component="post"]:not([data-index=0]), [component="topic/event"]');
createNewPosts(data, repliesSelector, direction, false, function (html) {
if (html) {
html.addClass('new');
@@ -154,10 +154,10 @@ define('forum/topic/posts', [
}
function removeAlreadyAddedPosts() {
- var newPosts = $('[component="post"].new');
+ const newPosts = $('[component="post"].new');
if (newPosts.length === data.posts.length) {
- var allSamePids = true;
+ let allSamePids = true;
newPosts.each(function (index, el) {
if (parseInt($(el).attr('data-pid'), 10) !== parseInt(data.posts[index].pid, 10)) {
allSamePids = false;
@@ -175,7 +175,7 @@ define('forum/topic/posts', [
if (newPosts.length && data.posts.length > 1) {
data.posts.forEach(function (post) {
- var p = components.get('post', 'pid', post.pid);
+ const p = components.get('post', 'pid', post.pid);
if (p.hasClass('new')) {
p.remove();
}
@@ -193,8 +193,8 @@ define('forum/topic/posts', [
return callback();
}
- var after;
- var before;
+ let after;
+ let before;
if (direction > 0 && repliesSelector.length) {
after = repliesSelector.last();
@@ -206,7 +206,7 @@ define('forum/topic/posts', [
app.parseAndTranslate('topic', 'posts', Object.assign({}, ajaxify.data, data), function (html) {
html = html.filter(function () {
- var pid = $(this).attr('data-pid');
+ const pid = $(this).attr('data-pid');
return pid && $('[component="post"][data-pid="' + pid + '"]').length === 0;
});
@@ -214,8 +214,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();
- var scrollTop = $(window).scrollTop();
+ const height = $(document).height();
+ const scrollTop = $(window).scrollTop();
html.insertBefore(before);
@@ -242,16 +242,16 @@ define('forum/topic/posts', [
return;
}
- var replies = components.get('topic').find(components.get('post').not('[data-index=0]').not('.new'));
- var afterEl = direction > 0 ? replies.last() : replies.first();
- var after = parseInt(afterEl.attr('data-index'), 10) || 0;
+ const replies = components.get('topic').find(components.get('post').not('[data-index=0]').not('.new'));
+ const afterEl = direction > 0 ? replies.last() : replies.first();
+ const after = parseInt(afterEl.attr('data-index'), 10) || 0;
- var tid = ajaxify.data.tid;
+ const tid = ajaxify.data.tid;
if (!utils.isNumber(tid) || !utils.isNumber(after) || (direction < 0 && components.get('post', 'index', 0).length)) {
return;
}
- var indicatorEl = $('.loading-indicator');
+ const indicatorEl = $('.loading-indicator');
if (!indicatorEl.is(':animated')) {
indicatorEl.fadeIn();
}
@@ -266,7 +266,7 @@ define('forum/topic/posts', [
indicatorEl.fadeOut();
if (data && data.posts && data.posts.length) {
- var repliesSelector = $('[component="post"]:not([data-index=0]):not(.new), [component="topic/event"]');
+ const repliesSelector = $('[component="post"]:not([data-index=0]):not(.new), [component="topic/event"]');
createNewPosts(data, repliesSelector, direction, true, done);
} else {
navigator.update();
@@ -294,15 +294,15 @@ define('forum/topic/posts', [
};
function addNecroPostMessage(callback) {
- var necroThreshold = ajaxify.data.necroThreshold * 24 * 60 * 60 * 1000;
+ const necroThreshold = ajaxify.data.necroThreshold * 24 * 60 * 60 * 1000;
if (!necroThreshold || (config.topicPostSort !== 'newest_to_oldest' && config.topicPostSort !== 'oldest_to_newest')) {
return callback && callback();
}
- var postEls = $('[component="post"]').toArray();
+ const postEls = $('[component="post"]').toArray();
Promise.all(postEls.map(function (post) {
post = $(post);
- var prev = post.prev('[component="post"]');
+ const prev = post.prev('[component="post"]');
if (post.is(':has(.necro-post)') || !prev.length) {
return;
}
@@ -310,20 +310,20 @@ define('forum/topic/posts', [
return;
}
- var diff = post.attr('data-timestamp') - prev.attr('data-timestamp');
+ const diff = post.attr('data-timestamp') - prev.attr('data-timestamp');
return new Promise(function (resolve) {
if (Math.abs(diff) >= necroThreshold) {
- var suffixAgo = $.timeago.settings.strings.suffixAgo;
- var prefixAgo = $.timeago.settings.strings.prefixAgo;
- var suffixFromNow = $.timeago.settings.strings.suffixFromNow;
- var prefixFromNow = $.timeago.settings.strings.prefixFromNow;
+ const suffixAgo = $.timeago.settings.strings.suffixAgo;
+ const prefixAgo = $.timeago.settings.strings.prefixAgo;
+ const suffixFromNow = $.timeago.settings.strings.suffixFromNow;
+ const prefixFromNow = $.timeago.settings.strings.prefixFromNow;
$.timeago.settings.strings.suffixAgo = '';
$.timeago.settings.strings.prefixAgo = '';
$.timeago.settings.strings.suffixFromNow = '';
$.timeago.settings.strings.prefixFromNow = '';
- var translationText = (diff > 0 ? '[[topic:timeago_later,' : '[[topic:timeago_earlier,') + $.timeago.inWords(diff) + ']]';
+ const translationText = (diff > 0 ? '[[topic:timeago_later,' : '[[topic:timeago_earlier,') + $.timeago.inWords(diff) + ']]';
$.timeago.settings.strings.suffixAgo = suffixAgo;
$.timeago.settings.strings.prefixAgo = prefixAgo;
@@ -350,7 +350,7 @@ define('forum/topic/posts', [
}
// Replace all requests for uploaded images/files with a login link
- var loginEl = document.createElement('a');
+ const loginEl = document.createElement('a');
loginEl.className = 'login-required';
loginEl.href = config.relative_path + '/login';
@@ -378,9 +378,9 @@ define('forum/topic/posts', [
};
Posts.showBottomPostBar = function () {
- var mainPost = components.get('post', 'index', 0);
- var placeHolder = $('.post-bar-placeholder');
- var posts = $('[component="post"]');
+ const mainPost = components.get('post', 'index', 0);
+ const placeHolder = $('.post-bar-placeholder');
+ const posts = $('[component="post"]');
if (!!mainPost.length && posts.length > 1 && $('.post-bar').length < 2 && placeHolder.length) {
$('.post-bar').clone().insertAfter(placeHolder);
placeHolder.remove();
@@ -398,9 +398,9 @@ define('forum/topic/posts', [
}
Posts.addBlockquoteEllipses = function (posts) {
- var blockquotes = posts.find('[component="post/content"] > blockquote > blockquote');
+ const blockquotes = posts.find('[component="post/content"] > blockquote > blockquote');
blockquotes.each(function () {
- var $this = $(this);
+ const $this = $(this);
if ($this.find(':hidden:not(br)').length && !$this.find('.toggle').length) {
$this.append('');
}
diff --git a/public/src/client/topic/replies.js b/public/src/client/topic/replies.js
index bc017d25f6..51a4064f0b 100644
--- a/public/src/client/topic/replies.js
+++ b/public/src/client/topic/replies.js
@@ -2,14 +2,14 @@
define('forum/topic/replies', ['navigator', 'components', 'forum/topic/posts', 'hooks'], function (navigator, components, posts, hooks) {
- var Replies = {};
+ const Replies = {};
Replies.init = function (button) {
- var post = button.closest('[data-pid]');
- var pid = post.data('pid');
- var open = button.find('[component="post/replies/open"]');
- var loading = button.find('[component="post/replies/loading"]');
- var close = button.find('[component="post/replies/close"]');
+ const post = button.closest('[data-pid]');
+ const pid = post.data('pid');
+ const open = button.find('[component="post/replies/open"]');
+ const loading = button.find('[component="post/replies/loading"]');
+ const close = button.find('[component="post/replies/close"]');
if (open.is(':not(.hidden)') && loading.is('.hidden')) {
open.addClass('hidden');
@@ -25,7 +25,7 @@ define('forum/topic/replies', ['navigator', 'components', 'forum/topic/posts', '
close.removeClass('hidden');
posts.modifyPostsByPrivileges(data);
- var tplData = {
+ const tplData = {
posts: data,
privileges: ajaxify.data.privileges,
'downvote:disabled': ajaxify.data['downvote:disabled'],
@@ -34,7 +34,7 @@ define('forum/topic/replies', ['navigator', 'components', 'forum/topic/posts', '
hideReplies: config.hasOwnProperty('showNestedReplies') ? !config.showNestedReplies : true,
};
app.parseAndTranslate('topic', 'posts', tplData, function (html) {
- var repliesEl = $('', { component: 'post/replies' }).html(html).hide();
+ const repliesEl = $('
', { component: 'post/replies' }).html(html).hide();
if (button.attr('data-target-component')) {
post.find('[component="' + button.attr('data-target-component') + '"]').html(repliesEl);
} else {
@@ -57,14 +57,14 @@ define('forum/topic/replies', ['navigator', 'components', 'forum/topic/posts', '
};
Replies.onNewPost = function (data) {
- var post = data.posts[0];
+ const post = data.posts[0];
if (!post) {
return;
}
incrementCount(post, 1);
data.hideReplies = config.hasOwnProperty('showNestedReplies') ? !config.showNestedReplies : true;
app.parseAndTranslate('topic', 'posts', data, function (html) {
- var replies = $('[component="post"][data-pid="' + post.toPid + '"] [component="post/replies"]').first();
+ const replies = $('[component="post"][data-pid="' + post.toPid + '"] [component="post/replies"]').first();
if (replies.length) {
if (config.topicPostSort === 'newest_to_oldest') {
replies.prepend(html);
@@ -81,11 +81,11 @@ define('forum/topic/replies', ['navigator', 'components', 'forum/topic/posts', '
};
function incrementCount(post, inc) {
- var replyCount = $('[component="post"][data-pid="' + post.toPid + '"]').find('[component="post/reply-count"]').first();
- var countEl = replyCount.find('[component="post/reply-count/text"]');
- var avatars = replyCount.find('[component="post/reply-count/avatars"]');
- var count = Math.max(0, parseInt(countEl.attr('data-replies'), 10) + inc);
- var timestamp = replyCount.find('.timeago').attr('title', post.timestampISO);
+ const replyCount = $('[component="post"][data-pid="' + post.toPid + '"]').find('[component="post/reply-count"]').first();
+ const countEl = replyCount.find('[component="post/reply-count/text"]');
+ const avatars = replyCount.find('[component="post/reply-count/avatars"]');
+ const count = Math.max(0, parseInt(countEl.attr('data-replies'), 10) + inc);
+ const timestamp = replyCount.find('.timeago').attr('title', post.timestampISO);
countEl.attr('data-replies', count);
replyCount.toggleClass('hidden', count <= 0);
diff --git a/public/src/client/topic/threadTools.js b/public/src/client/topic/threadTools.js
index d7276ced56..a393b00b1d 100644
--- a/public/src/client/topic/threadTools.js
+++ b/public/src/client/topic/threadTools.js
@@ -10,7 +10,7 @@ define('forum/topic/threadTools', [
'hooks',
'bootbox',
], function (components, translator, handleBack, posts, api, hooks, bootbox) {
- var ThreadTools = {};
+ const ThreadTools = {};
ThreadTools.init = function (tid, topicContainer) {
renderMenu(topicContainer);
@@ -86,7 +86,7 @@ define('forum/topic/threadTools', [
});
topicContainer.on('click', '[component="topic/mark-unread-for-all"]', function () {
- var btn = $(this);
+ const btn = $(this);
socket.emit('topics.markAsUnreadForAll', [tid], function (err) {
if (err) {
return app.alertError(err.message);
@@ -135,7 +135,7 @@ define('forum/topic/threadTools', [
function changeWatching(type, state = 1) {
const method = state ? 'put' : 'del';
api[method](`/topics/${tid}/${type}`, {}, () => {
- var message = '';
+ let message = '';
if (type === 'follow') {
message = state ? '[[topic:following_topic.message]]' : '[[topic:not_following_topic.message]]';
} else if (type === 'ignore') {
@@ -173,8 +173,8 @@ define('forum/topic/threadTools', [
function renderMenu(container) {
container.on('show.bs.dropdown', '.thread-tools', function () {
- var $this = $(this);
- var dropdownMenu = $this.find('.dropdown-menu');
+ const $this = $(this);
+ const dropdownMenu = $this.find('.dropdown-menu');
if (dropdownMenu.html()) {
return;
}
@@ -265,17 +265,17 @@ define('forum/topic/threadTools', [
};
ThreadTools.setLockedState = function (data) {
- var threadEl = components.get('topic');
+ const threadEl = components.get('topic');
if (parseInt(data.tid, 10) !== parseInt(threadEl.attr('data-tid'), 10)) {
return;
}
- var isLocked = data.isLocked && !ajaxify.data.privileges.isAdminOrMod;
+ const isLocked = data.isLocked && !ajaxify.data.privileges.isAdminOrMod;
components.get('topic/lock').toggleClass('hidden', data.isLocked).parent().attr('hidden', data.isLocked ? '' : null);
components.get('topic/unlock').toggleClass('hidden', !data.isLocked).parent().attr('hidden', !data.isLocked ? '' : null);
- var hideReply = !!((data.isLocked || ajaxify.data.deleted) && !ajaxify.data.privileges.isAdminOrMod);
+ const hideReply = !!((data.isLocked || ajaxify.data.deleted) && !ajaxify.data.privileges.isAdminOrMod);
components.get('topic/reply/container').toggleClass('hidden', hideReply);
components.get('topic/reply/locked').toggleClass('hidden', ajaxify.data.privileges.isAdminOrMod || !data.isLocked || ajaxify.data.deleted);
@@ -293,7 +293,7 @@ define('forum/topic/threadTools', [
};
ThreadTools.setDeleteState = function (data) {
- var threadEl = components.get('topic');
+ const threadEl = components.get('topic');
if (parseInt(data.tid, 10) !== parseInt(threadEl.attr('data-tid'), 10)) {
return;
}
@@ -313,7 +313,7 @@ define('forum/topic/threadTools', [
html.find('.timeago').timeago();
});
}
- var hideReply = data.isDelete && !ajaxify.data.privileges.isAdminOrMod;
+ const hideReply = data.isDelete && !ajaxify.data.privileges.isAdminOrMod;
components.get('topic/reply/container').toggleClass('hidden', hideReply);
components.get('topic/reply/locked').toggleClass('hidden', ajaxify.data.privileges.isAdminOrMod || !ajaxify.data.locked || data.isDelete);
@@ -327,14 +327,14 @@ define('forum/topic/threadTools', [
ThreadTools.setPinnedState = function (data) {
- var threadEl = components.get('topic');
+ const threadEl = components.get('topic');
if (parseInt(data.tid, 10) !== parseInt(threadEl.attr('data-tid'), 10)) {
return;
}
components.get('topic/pin').toggleClass('hidden', data.pinned).parent().attr('hidden', data.pinned ? '' : null);
components.get('topic/unpin').toggleClass('hidden', !data.pinned).parent().attr('hidden', !data.pinned ? '' : null);
- var icon = $('.topic-header [component="topic/pinned"]');
+ const icon = $('.topic-header [component="topic/pinned"]');
icon.toggleClass('hidden', !data.pinned);
if (data.pinned) {
icon.translateAttr('title', (
@@ -349,7 +349,7 @@ define('forum/topic/threadTools', [
};
function setFollowState(state) {
- var titles = {
+ const titles = {
follow: '[[topic:watching]]',
unfollow: '[[topic:not-watching]]',
ignore: '[[topic:ignoring]]',
@@ -360,7 +360,7 @@ define('forum/topic/threadTools', [
.tooltip('fixTitle');
});
- var menu = components.get('topic/following/menu');
+ let menu = components.get('topic/following/menu');
menu.toggleClass('hidden', state !== 'follow');
components.get('topic/following/check').toggleClass('fa-check', state === 'follow');
diff --git a/public/src/client/topic/votes.js b/public/src/client/topic/votes.js
index 1a707e37cd..8c895e6ccb 100644
--- a/public/src/client/topic/votes.js
+++ b/public/src/client/topic/votes.js
@@ -4,7 +4,7 @@
define('forum/topic/votes', [
'components', 'translator', 'benchpress', 'api', 'hooks', 'bootbox',
], function (components, translator, Benchpress, api, hooks, bootbox) {
- var Votes = {};
+ const Votes = {};
Votes.addVoteHandler = function () {
components.get('topic').on('mouseenter', '[data-pid] [component="post/vote-count"]', loadDataAndCreateTooltip);
@@ -13,10 +13,10 @@ define('forum/topic/votes', [
function loadDataAndCreateTooltip(e) {
e.stopPropagation();
- var $this = $(this);
- var el = $this.parent();
+ const $this = $(this);
+ const el = $this.parent();
el.find('.tooltip').css('display', 'none');
- var pid = el.parents('[data-pid]').attr('data-pid');
+ const pid = el.parents('[data-pid]').attr('data-pid');
socket.emit('posts.getUpvoters', [pid], function (err, data) {
if (err) {
@@ -35,7 +35,7 @@ define('forum/topic/votes', [
el.attr('title', title).tooltip('fixTitle').tooltip('show');
el.parent().find('.tooltip').css('display', '');
}
- var usernames = data.usernames
+ let usernames = data.usernames
.filter(name => name !== '[[global:former_user]]');
if (!usernames.length) {
return;
@@ -54,11 +54,11 @@ define('forum/topic/votes', [
Votes.toggleVote = function (button, className, delta) {
- var post = button.closest('[data-pid]');
- var currentState = post.find(className).length;
+ const post = button.closest('[data-pid]');
+ const currentState = post.find(className).length;
const method = currentState ? 'del' : 'put';
- var pid = post.attr('data-pid');
+ const pid = post.attr('data-pid');
api[method](`/posts/${pid}/vote`, {
delta: delta,
}, function (err) {
@@ -92,7 +92,7 @@ define('forum/topic/votes', [
}
app.parseAndTranslate('partials/modals/votes_modal', data, function (html) {
- var dialog = bootbox.dialog({
+ const dialog = bootbox.dialog({
title: '[[global:voters]]',
message: html,
className: 'vote-modal',
diff --git a/public/src/client/unread.js b/public/src/client/unread.js
index 6af50e0472..43983abbac 100644
--- a/public/src/client/unread.js
+++ b/public/src/client/unread.js
@@ -4,9 +4,9 @@
define('forum/unread', [
'topicSelect', 'components', 'topicList', 'categorySelector',
], function (topicSelect, components, topicList, categorySelector) {
- var Unread = {};
+ const Unread = {};
- var watchStates = {
+ const watchStates = {
ignoring: 1,
notwatching: 2,
watching: 3,
@@ -39,7 +39,7 @@ define('forum/unread', [
}
function markSelectedRead() {
- var tids = topicSelect.getSelectedTids();
+ const tids = topicSelect.getSelectedTids();
if (!tids.length) {
return;
}
@@ -54,13 +54,13 @@ define('forum/unread', [
function markCategoryRead(cid) {
function getCategoryTids(cid) {
- var tids = [];
+ const tids = [];
components.get('category/topic', 'cid', cid).each(function () {
tids.push($(this).attr('data-tid'));
});
return tids;
}
- var tids = getCategoryTids(cid);
+ const tids = getCategoryTids(cid);
socket.emit('topics.markCategoryTopicsRead', cid, function (err) {
if (err) {
@@ -71,7 +71,7 @@ define('forum/unread', [
});
}
- var selector = categorySelector.init($('[component="category-selector"]'), {
+ const selector = categorySelector.init($('[component="category-selector"]'), {
onSelect: function (category) {
selector.selectCategory(0);
if (category.cid === 'all') {
@@ -110,7 +110,7 @@ define('forum/unread', [
}
function removeTids(tids) {
- for (var i = 0; i < tids.length; i += 1) {
+ for (let i = 0; i < tids.length; i += 1) {
components.get('category/topic', 'tid', tids[i]).remove();
}
}
@@ -126,18 +126,18 @@ define('forum/unread', [
}
Unread.initUnreadTopics = function () {
- var unreadTopics = app.user.unreadData;
+ const unreadTopics = app.user.unreadData;
function onNewPost(data) {
if (data && data.posts && data.posts.length && unreadTopics) {
- var post = data.posts[0];
+ const post = data.posts[0];
if (parseInt(post.uid, 10) === parseInt(app.user.uid, 10) ||
(!post.topic.isFollowing && post.categoryWatchState !== watchStates.watching)
) {
return;
}
- var tid = post.topic.tid;
+ const tid = post.topic.tid;
if (!unreadTopics[''][tid] || !unreadTopics.new[tid] ||
!unreadTopics.watched[tid] || !unreadTopics.unreplied[tid]) {
markTopicsUnread(tid);
@@ -147,12 +147,12 @@ define('forum/unread', [
increaseUnreadCount('');
unreadTopics[''][tid] = true;
}
- var isNewTopic = post.isMain && parseInt(post.uid, 10) !== parseInt(app.user.uid, 10);
+ const isNewTopic = post.isMain && parseInt(post.uid, 10) !== parseInt(app.user.uid, 10);
if (isNewTopic && !unreadTopics.new[tid]) {
increaseUnreadCount('new');
unreadTopics.new[tid] = true;
}
- var isUnreplied = parseInt(post.topic.postcount, 10) <= 1;
+ const isUnreplied = parseInt(post.topic.postcount, 10) <= 1;
if (isUnreplied && !unreadTopics.unreplied[tid]) {
increaseUnreadCount('unreplied');
unreadTopics.unreplied[tid] = true;
@@ -166,8 +166,8 @@ define('forum/unread', [
}
function increaseUnreadCount(filter) {
- var unreadUrl = '/unread' + (filter ? '?filter=' + filter : '');
- var newCount = 1 + parseInt($('a[href="' + config.relative_path + unreadUrl + '"].navigation-link i').attr('data-content'), 10);
+ const unreadUrl = '/unread' + (filter ? '?filter=' + filter : '');
+ const newCount = 1 + parseInt($('a[href="' + config.relative_path + unreadUrl + '"].navigation-link i').attr('data-content'), 10);
updateUnreadTopicCount(unreadUrl, newCount);
}
diff --git a/public/src/client/users.js b/public/src/client/users.js
index 794cf04e90..2b732c7632 100644
--- a/public/src/client/users.js
+++ b/public/src/client/users.js
@@ -4,14 +4,14 @@
define('forum/users', [
'translator', 'benchpress', 'api', 'accounts/invite',
], function (translator, Benchpress, api, AccountInvite) {
- var Users = {};
+ const Users = {};
- var searchResultCount = 0;
+ let searchResultCount = 0;
Users.init = function () {
app.enterRoom('user_list');
- var section = utils.params().section ? ('?section=' + utils.params().section) : '';
+ const section = utils.params().section ? ('?section=' + utils.params().section) : '';
$('.nav-pills li').removeClass('active').find('a[href="' + window.location.pathname + section + '"]').parent()
.addClass('active');
@@ -34,10 +34,10 @@ define('forum/users', [
return;
}
$('[component="user/search/icon"]').removeClass('fa-search').addClass('fa-spinner fa-spin');
- var username = $('#search-user').val();
- var activeSection = getActiveSection();
+ const username = $('#search-user').val();
+ const activeSection = getActiveSection();
- var query = {
+ const query = {
section: activeSection,
page: 1,
};
@@ -48,7 +48,7 @@ define('forum/users', [
query.query = username;
query.sortBy = getSortBy();
- var filters = [];
+ const filters = [];
if ($('.search .online-only').is(':checked') || (activeSection === 'online')) {
filters.push('online');
}
@@ -66,8 +66,8 @@ define('forum/users', [
}
function getSortBy() {
- var sortBy;
- var activeSection = getActiveSection();
+ let sortBy;
+ const activeSection = getActiveSection();
if (activeSection === 'sort-posts') {
sortBy = 'postcount';
} else if (activeSection === 'sort-reputation') {
@@ -103,7 +103,7 @@ define('forum/users', [
}
function onUserStatusChange(data) {
- var section = getActiveSection();
+ const section = getActiveSection();
if ((section.startsWith('online') || section.startsWith('users'))) {
updateUser(data);
diff --git a/public/src/installer/install.js b/public/src/installer/install.js
index a4ac88a763..48b1d1eba7 100644
--- a/public/src/installer/install.js
+++ b/public/src/installer/install.js
@@ -25,12 +25,12 @@ $('document').ready(function () {
function setupInputs() {
$('form').on('focus', '.form-control', function () {
- var parent = $(this).parents('.input-row');
+ const parent = $(this).parents('.input-row');
$('.input-row.active').removeClass('active');
parent.addClass('active').removeClass('error');
- var help = parent.find('.help-text');
+ const help = parent.find('.help-text');
help.html(help.attr('data-help'));
});
@@ -56,9 +56,9 @@ $('document').ready(function () {
}
function activate(type, el) {
- var field = el.val();
- var parent = el.parents('.input-row');
- var help = parent.children('.help-text');
+ const field = el.val();
+ const parent = el.parents('.input-row');
+ const help = parent.children('.help-text');
function validateUsername(field) {
if (!utils.isUserNameValid(field) || !slugify(field)) {
@@ -123,8 +123,8 @@ $('document').ready(function () {
function launchForum() {
$('#launch .working').removeClass('hide');
$.post('/launch', function () {
- var successCount = 0;
- var url = $('#launch').attr('data-url');
+ let successCount = 0;
+ const url = $('#launch').attr('data-url');
setInterval(function () {
$.get(url + '/admin').done(function () {
if (successCount >= 5) {
diff --git a/public/src/modules/accounts/delete.js b/public/src/modules/accounts/delete.js
index 831867fe3c..cff044cfae 100644
--- a/public/src/modules/accounts/delete.js
+++ b/public/src/modules/accounts/delete.js
@@ -1,7 +1,7 @@
'use strict';
define('accounts/delete', ['api', 'bootbox'], function (api, bootbox) {
- var Delete = {};
+ const Delete = {};
Delete.account = function (uid, callback) {
executeAction(
diff --git a/public/src/modules/accounts/invite.js b/public/src/modules/accounts/invite.js
index 621c84bcba..937ab6401f 100644
--- a/public/src/modules/accounts/invite.js
+++ b/public/src/modules/accounts/invite.js
@@ -36,10 +36,10 @@ define('accounts/invite', ['api', 'benchpress', 'bootbox'], function (api, Bench
};
Invite.send = function () {
- var $emails = $('#invite-modal-emails');
- var $groups = $('#invite-modal-groups');
+ const $emails = $('#invite-modal-emails');
+ const $groups = $('#invite-modal-groups');
- var data = {
+ const data = {
emails: $emails.val()
.split(',')
.map(m => m.trim())
diff --git a/public/src/modules/accounts/picture.js b/public/src/modules/accounts/picture.js
index 7e853a9e8f..7b62c96867 100644
--- a/public/src/modules/accounts/picture.js
+++ b/public/src/modules/accounts/picture.js
@@ -16,7 +16,7 @@ define('accounts/picture', [
}
// boolean to signify whether an uploaded picture is present in the pictures list
- var uploaded = pictures.reduce(function (memo, cur) {
+ const uploaded = pictures.reduce(function (memo, cur) {
return memo || cur.type === 'uploaded';
}, false);
@@ -35,7 +35,7 @@ define('accounts/picture', [
'icon:bgColor': ajaxify.data['icon:bgColor'],
},
}, function (html) {
- var modal = bootbox.dialog({
+ const modal = bootbox.dialog({
className: 'picture-switcher',
title: '[[user:change_picture]]',
message: html,
@@ -88,7 +88,7 @@ define('accounts/picture', [
}
function saveSelection() {
- var type = modal.find('.list-group-item.active').attr('data-type');
+ const type = modal.find('.list-group-item.active').attr('data-type');
const iconBgColor = document.querySelector('.modal.picture-switcher input[type="radio"]:checked').value || 'transparent';
changeUserPicture(type, iconBgColor).then(() => {
@@ -174,7 +174,7 @@ define('accounts/picture', [
uploadModal.modal('show');
uploadModal.find('.upload-btn').on('click', function () {
- var url = uploadModal.find('#uploadFromUrl').val();
+ const url = uploadModal.find('#uploadFromUrl').val();
if (!url) {
return false;
}
diff --git a/public/src/modules/alerts.js b/public/src/modules/alerts.js
index d9cffeb114..5bbd40bf3c 100644
--- a/public/src/modules/alerts.js
+++ b/public/src/modules/alerts.js
@@ -2,7 +2,7 @@
define('alerts', ['translator', 'components', 'hooks'], function (translator, components, hooks) {
- var module = {};
+ const module = {};
module.alert = function (params) {
params.alert_id = 'alert_button_' + (params.alert_id ? params.alert_id : new Date().getTime());
@@ -10,7 +10,7 @@ define('alerts', ['translator', 'components', 'hooks'], function (translator, co
params.message = params.message ? params.message.trim() : '';
params.type = params.type || 'info';
- var alert = $('#' + params.alert_id);
+ const alert = $('#' + params.alert_id);
if (alert.length) {
updateAlert(alert, params);
} else {
@@ -20,7 +20,7 @@ define('alerts', ['translator', 'components', 'hooks'], function (translator, co
function createNew(params) {
app.parseAndTranslate('alert', params, function (html) {
- var alert = $('#' + params.alert_id);
+ let alert = $('#' + params.alert_id);
if (alert.length) {
return updateAlert(alert, params);
}
@@ -98,9 +98,9 @@ define('alerts', ['translator', 'components', 'hooks'], function (translator, co
}
function startTimeout(alert, params) {
- var timeout = params.timeout;
+ const timeout = params.timeout;
- var timeoutId = setTimeout(function () {
+ const timeoutId = setTimeout(function () {
fadeOut(alert);
if (typeof params.timeoutfn === 'function') {
diff --git a/public/src/modules/autocomplete.js b/public/src/modules/autocomplete.js
index 7aa1d7744e..3fb216edb7 100644
--- a/public/src/modules/autocomplete.js
+++ b/public/src/modules/autocomplete.js
@@ -3,7 +3,7 @@
define('autocomplete', ['api'], function (api) {
- var module = {};
+ const module = {};
module.user = function (input, params, onselect) {
if (typeof params === 'function') {
@@ -29,8 +29,8 @@ define('autocomplete', ['api'], function (api) {
}
if (result && result.users) {
- var names = result.users.map(function (user) {
- var username = $('
').html(user.username).text();
+ const names = result.users.map(function (user) {
+ const username = $('
').html(user.username).text();
return user && {
label: username,
value: username,
@@ -75,7 +75,7 @@ define('autocomplete', ['api'], function (api) {
return app.alertError(err.message);
}
if (results && results.length) {
- var names = results.map(function (group) {
+ const names = results.map(function (group) {
return group && {
label: group.name,
value: group.name,
@@ -121,7 +121,7 @@ define('autocomplete', ['api'], function (api) {
function handleOnSelect(input, onselect, event, ui) {
onselect = onselect || function () { };
- var e = jQuery.Event('keypress');
+ const e = jQuery.Event('keypress');
e.which = 13;
e.keyCode = 13;
setTimeout(function () {
diff --git a/public/src/modules/categoryFilter.js b/public/src/modules/categoryFilter.js
index 25b9a80a96..b1593a5dec 100644
--- a/public/src/modules/categoryFilter.js
+++ b/public/src/modules/categoryFilter.js
@@ -1,7 +1,7 @@
'use strict';
define('categoryFilter', ['categorySearch', 'api', 'hooks'], function (categorySearch, api, hooks) {
- var categoryFilter = {};
+ const categoryFilter = {};
categoryFilter.init = function (el, options) {
if (!el || !el.length) {
@@ -15,8 +15,8 @@ define('categoryFilter', ['categorySearch', 'api', 'hooks'], function (categoryS
categorySearch.init(el, options);
- var selectedCids = [];
- var initialCids = [];
+ let selectedCids = [];
+ let initialCids = [];
if (Array.isArray(options.selectedCids)) {
selectedCids = options.selectedCids.map(cid => parseInt(cid, 10));
} else if (Array.isArray(ajaxify.data.selectedCids)) {
@@ -25,7 +25,7 @@ define('categoryFilter', ['categorySearch', 'api', 'hooks'], function (categoryS
initialCids = selectedCids.slice();
el.on('hidden.bs.dropdown', function () {
- var changed = initialCids.length !== selectedCids.length;
+ let changed = initialCids.length !== selectedCids.length;
initialCids.forEach(function (cid, index) {
if (cid !== selectedCids[index]) {
changed = true;
@@ -39,8 +39,8 @@ define('categoryFilter', ['categorySearch', 'api', 'hooks'], function (categoryS
return;
}
if (changed) {
- var url = window.location.pathname;
- var currentParams = utils.params();
+ let url = window.location.pathname;
+ const currentParams = utils.params();
if (selectedCids.length) {
currentParams.cid = selectedCids;
url += '?' + decodeURIComponent($.param(currentParams));
@@ -50,14 +50,14 @@ define('categoryFilter', ['categorySearch', 'api', 'hooks'], function (categoryS
});
el.on('click', '[component="category/list"] [data-cid]', function () {
- var listEl = el.find('[component="category/list"]');
- var categoryEl = $(this);
- var link = categoryEl.find('a').attr('href');
+ const listEl = el.find('[component="category/list"]');
+ const categoryEl = $(this);
+ const link = categoryEl.find('a').attr('href');
if (link && link !== '#' && link.length) {
return;
}
- var cid = parseInt(categoryEl.attr('data-cid'), 10);
- var icon = categoryEl.find('[component="category/select/icon"]');
+ const cid = parseInt(categoryEl.attr('data-cid'), 10);
+ const icon = categoryEl.find('[component="category/select/icon"]');
if (selectedCids.includes(cid)) {
selectedCids.splice(selectedCids.indexOf(cid), 1);
diff --git a/public/src/modules/categorySearch.js b/public/src/modules/categorySearch.js
index cf9a42bad4..f6453da65a 100644
--- a/public/src/modules/categorySearch.js
+++ b/public/src/modules/categorySearch.js
@@ -1,26 +1,26 @@
'use strict';
define('categorySearch', function () {
- var categorySearch = {};
+ const categorySearch = {};
categorySearch.init = function (el, options) {
- var categoriesList = null;
+ let categoriesList = null;
options = options || {};
options.privilege = options.privilege || 'topics:read';
options.states = options.states || ['watching', 'notwatching', 'ignoring'];
- var localCategories = [];
+ let localCategories = [];
if (Array.isArray(options.localCategories)) {
localCategories = options.localCategories.map(c => ({ ...c }));
}
options.selectedCids = options.selectedCids || ajaxify.data.selectedCids || [];
- var searchEl = el.find('[component="category-selector-search"]');
+ const searchEl = el.find('[component="category-selector-search"]');
if (!searchEl.length) {
return;
}
- var toggleVisibility = searchEl.parent('[component="category/dropdown"]').length > 0 ||
+ const toggleVisibility = searchEl.parent('[component="category/dropdown"]').length > 0 ||
searchEl.parent('[component="category-selector"]').length > 0;
el.on('show.bs.dropdown', function () {
@@ -30,7 +30,7 @@ define('categorySearch', function () {
}
function doSearch() {
- var val = searchEl.find('input').val();
+ const val = searchEl.find('input').val();
if (val.length > 1 || (!val && !categoriesList)) {
loadList(val, function (categories) {
categoriesList = categoriesList || categories;
diff --git a/public/src/modules/categorySelector.js b/public/src/modules/categorySelector.js
index 0ac9da7229..c0a36931a3 100644
--- a/public/src/modules/categorySelector.js
+++ b/public/src/modules/categorySelector.js
@@ -3,14 +3,14 @@
define('categorySelector', [
'categorySearch', 'bootbox', 'hooks',
], function (categorySearch, bootbox, hooks) {
- var categorySelector = {};
+ const categorySelector = {};
categorySelector.init = function (el, options) {
if (!el || !el.length) {
return;
}
options = options || {};
- var onSelect = options.onSelect || function () {};
+ const onSelect = options.onSelect || function () {};
options.states = options.states || ['watching', 'notwatching', 'ignoring'];
options.template = 'partials/category-selector';
@@ -18,12 +18,12 @@ define('categorySelector', [
categorySearch.init(el, options);
- var selector = {
+ const selector = {
el: el,
selectedCategory: null,
};
el.on('click', '[data-cid]', function () {
- var categoryEl = $(this);
+ const categoryEl = $(this);
if (categoryEl.hasClass('disabled')) {
return false;
}
@@ -32,7 +32,7 @@ define('categorySelector', [
});
const defaultSelectHtml = selector.el.find('[component="category-selector-selected"]').html();
selector.selectCategory = function (cid) {
- var categoryEl = selector.el.find('[data-cid="' + cid + '"]');
+ const categoryEl = selector.el.find('[data-cid="' + cid + '"]');
selector.selectedCategory = {
cid: cid,
name: categoryEl.attr('data-name'),
@@ -62,7 +62,7 @@ define('categorySelector', [
options.onSelect = options.onSelect || function () {};
options.onSubmit = options.onSubmit || function () {};
app.parseAndTranslate('admin/partials/categories/select-category', { message: options.message }, function (html) {
- var modal = bootbox.dialog({
+ const modal = bootbox.dialog({
title: options.title || '[[modules:composer.select_category]]',
message: html,
buttons: {
@@ -74,7 +74,7 @@ define('categorySelector', [
},
});
- var selector = categorySelector.init(modal.find('[component="category-selector"]'), options);
+ const selector = categorySelector.init(modal.find('[component="category-selector"]'), options);
function submit(ev) {
ev.preventDefault();
if (selector.selectedCategory) {
diff --git a/public/src/modules/chat.js b/public/src/modules/chat.js
index ff703a85a9..94e4764ec8 100644
--- a/public/src/modules/chat.js
+++ b/public/src/modules/chat.js
@@ -6,8 +6,8 @@ define('chat', [
'translator',
'hooks',
], function (components, taskbar, translator, hooks) {
- var module = {};
- var newMessage = false;
+ const module = {};
+ let newMessage = false;
module.loadChatsDropdown = function (chatsListEl) {
socket.emit('modules.chats.getRecentChats', {
@@ -18,12 +18,12 @@ define('chat', [
return app.alertError(err.message);
}
- var rooms = data.rooms.filter(function (room) {
+ const rooms = data.rooms.filter(function (room) {
return room.teaser;
});
translator.toggleTimeagoShorthand(function () {
- for (var i = 0; i < rooms.length; i += 1) {
+ for (let i = 0; i < rooms.length; i += 1) {
rooms[i].teaser.timeago = $.timeago(new Date(parseInt(rooms[i].teaser.timestamp, 10)));
}
translator.toggleTimeagoShorthand();
@@ -35,7 +35,7 @@ define('chat', [
if ($(ev.target).parents('.user-link').length) {
return;
}
- var roomId = $(this).attr('data-roomid');
+ const roomId = $(this).attr('data-roomid');
if (!ajaxify.currentPage.match(/^chats\//)) {
app.openChat(roomId);
} else {
@@ -57,7 +57,7 @@ define('chat', [
module.onChatMessageReceived = function (data) {
- var isSelf = data.self === 1;
+ const isSelf = data.self === 1;
data.message.self = data.self;
newMessage = data.self === 0;
@@ -83,9 +83,9 @@ define('chat', [
};
function addMessageToModal(data) {
- var modal = module.getModal(data.roomId);
- var username = data.message.fromUser.username;
- var isSelf = data.self === 1;
+ const modal = module.getModal(data.roomId);
+ const username = data.message.fromUser.username;
+ const isSelf = data.self === 1;
require(['forum/chats/messages'], function (ChatsMessages) {
// don't add if already added
if (!modal.find('[data-mid="' + data.message.messageId + '"]').length) {
@@ -113,13 +113,13 @@ define('chat', [
}
module.onUserStatusChange = function (data) {
- var modal = module.getModal(data.uid);
+ const modal = module.getModal(data.uid);
app.updateUserStatus(modal.find('[component="user/status"]'), data.status);
};
module.onRoomRename = function (data) {
- var newTitle = $('
').html(data.newName).text();
- var modal = module.getModal(data.roomId);
+ const newTitle = $('
').html(data.newName).text();
+ const modal = module.getModal(data.roomId);
modal.find('[component="chat/room/name"]').text(newTitle);
taskbar.update('chat', modal.attr('data-uuid'), {
title: newTitle,
@@ -144,8 +144,8 @@ define('chat', [
if (module.modalExists(data.roomId)) {
return callback(module.getModal(data.roomId));
}
- var uuid = utils.generateUUID();
- var dragged = false;
+ const uuid = utils.generateUUID();
+ let dragged = false;
chatModal.attr('id', 'chat-modal-' + data.roomId);
chatModal.attr('data-roomid', data.roomId);
@@ -190,7 +190,7 @@ define('chat', [
});
function gotoChats() {
- var text = components.get('chat/input').val();
+ const text = components.get('chat/input').val();
$(window).one('action:ajaxify.end', function () {
components.get('chat/input').val(text);
});
@@ -202,7 +202,7 @@ define('chat', [
chatModal.find('.modal-header').on('dblclick', gotoChats);
chatModal.find('button[data-action="maximize"]').on('click', gotoChats);
chatModal.find('button[data-action="minimize"]').on('click', function () {
- var uuid = chatModal.attr('data-uuid');
+ const uuid = chatModal.attr('data-uuid');
module.minimize(uuid);
});
@@ -265,7 +265,7 @@ define('chat', [
};
module.close = function (chatModal) {
- var uuid = chatModal.attr('data-uuid');
+ const uuid = chatModal.attr('data-uuid');
clearInterval(chatModal.attr('intervalId'));
chatModal.attr('intervalId', 0);
chatModal.remove();
@@ -284,12 +284,12 @@ define('chat', [
// TODO: see taskbar.js:44
module.closeByUUID = function (uuid) {
- var chatModal = $('.chat-modal[data-uuid="' + uuid + '"]');
+ const chatModal = $('.chat-modal[data-uuid="' + uuid + '"]');
module.close(chatModal);
};
module.center = function (chatModal) {
- var hideAfter = false;
+ let hideAfter = false;
if (chatModal.hasClass('hide')) {
chatModal.removeClass('hide');
hideAfter = true;
@@ -305,14 +305,14 @@ define('chat', [
module.load = function (uuid) {
require(['forum/chats/messages'], function (ChatsMessages) {
- var chatModal = $('.chat-modal[data-uuid="' + uuid + '"]');
+ const chatModal = $('.chat-modal[data-uuid="' + uuid + '"]');
chatModal.removeClass('hide');
taskbar.updateActive(uuid);
ChatsMessages.scrollToBottom(chatModal.find('.chat-content'));
module.focusInput(chatModal);
socket.emit('modules.chats.markRead', chatModal.attr('data-roomid'));
- var env = utils.findBootstrapEnvironment();
+ const env = utils.findBootstrapEnvironment();
if (env === 'xs' || env === 'sm') {
module.enableMobileBehaviour(chatModal);
}
@@ -322,7 +322,7 @@ define('chat', [
module.enableMobileBehaviour = function (modalEl) {
app.toggleNavbar(false);
modalEl.attr('data-mobile', '1');
- var messagesEl = modalEl.find('.modal-body');
+ const messagesEl = modalEl.find('.modal-body');
messagesEl.css('height', module.calculateChatListHeight(modalEl));
function resize() {
messagesEl.css('height', module.calculateChatListHeight(modalEl));
@@ -348,7 +348,7 @@ define('chat', [
};
module.minimize = function (uuid) {
- var chatModal = $('.chat-modal[data-uuid="' + uuid + '"]');
+ const chatModal = $('.chat-modal[data-uuid="' + uuid + '"]');
chatModal.addClass('hide');
taskbar.minimize('chat', uuid);
clearInterval(chatModal.attr('intervalId'));
diff --git a/public/src/modules/components.js b/public/src/modules/components.js
index 618ee81ee8..2ebd952f91 100644
--- a/public/src/modules/components.js
+++ b/public/src/modules/components.js
@@ -1,7 +1,7 @@
'use strict';
define('components', function () {
- var components = {};
+ const components = {};
components.core = {
'topic/teaser': function (tid) {
@@ -61,7 +61,7 @@ define('components', function () {
};
components.get = function () {
- var args = Array.prototype.slice.call(arguments, 1);
+ const args = Array.prototype.slice.call(arguments, 1);
if (components.core[arguments[0]] && args.length) {
return components.core[arguments[0]].apply(this, args);
diff --git a/public/src/modules/coverPhoto.js b/public/src/modules/coverPhoto.js
index 8cae013101..7c1a1e21e6 100644
--- a/public/src/modules/coverPhoto.js
+++ b/public/src/modules/coverPhoto.js
@@ -4,7 +4,7 @@
define('coverPhoto', [
'vendor/jquery/draggable-background/backgroundDraggable',
], function () {
- var coverPhoto = {
+ const coverPhoto = {
coverEl: null,
saveFn: null,
};
@@ -37,8 +37,8 @@ define('coverPhoto', [
e.stopPropagation();
e.preventDefault();
- var files = e.originalEvent.dataTransfer.files;
- var reader = new FileReader();
+ const files = e.originalEvent.dataTransfer.files;
+ const reader = new FileReader();
if (files.length && files[0].type.match('image.*')) {
reader.onload = function (e) {
diff --git a/public/src/modules/flags.js b/public/src/modules/flags.js
index fb6a171d9a..0e9fa13928 100644
--- a/public/src/modules/flags.js
+++ b/public/src/modules/flags.js
@@ -2,10 +2,10 @@
define('flags', ['hooks', 'components', 'api'], function (hooks, components, api) {
- var Flag = {};
- var flagModal;
- var flagCommit;
- var flagReason;
+ const Flag = {};
+ let flagModal;
+ let flagCommit;
+ let flagReason;
Flag.showFlagModal = function (data) {
app.parseAndTranslate('partials/modals/flag_modal', data, function (html) {
@@ -30,8 +30,8 @@ define('flags', ['hooks', 'components', 'api'], function (hooks, components, api
});
flagCommit.on('click', function () {
- var selected = $('input[name="flag-reason"]:checked');
- var reason = selected.val();
+ const selected = $('input[name="flag-reason"]:checked');
+ let reason = selected.val();
if (selected.attr('id') === 'flag-reason-other') {
reason = flagReason.val();
}
@@ -66,7 +66,7 @@ define('flags', ['hooks', 'components', 'api'], function (hooks, components, api
if (!type || !id || !reason) {
return;
}
- var data = { type: type, id: id, reason: reason };
+ const data = { type: type, id: id, reason: reason };
api.post('/flags', data, function (err, flagId) {
if (err) {
return app.alertError(err.message);
@@ -75,7 +75,7 @@ define('flags', ['hooks', 'components', 'api'], function (hooks, components, api
flagModal.modal('hide');
app.alertSuccess('[[flags:modal-submit-success]]');
if (type === 'post') {
- var postEl = components.get('post', 'pid', id);
+ const postEl = components.get('post', 'pid', id);
postEl.find('[component="post/flag"]').addClass('hidden').parent().attr('hidden', '');
postEl.find('[component="post/already-flagged"]').removeClass('hidden').parent().attr('hidden', null);
}
diff --git a/public/src/modules/groupSearch.js b/public/src/modules/groupSearch.js
index 6a650ac2b0..b77e559757 100644
--- a/public/src/modules/groupSearch.js
+++ b/public/src/modules/groupSearch.js
@@ -1,26 +1,26 @@
'use strict';
define('groupSearch', function () {
- var groupSearch = {};
+ const groupSearch = {};
groupSearch.init = function (el) {
if (utils.isTouchDevice()) {
return;
}
- var searchEl = el.find('[component="group-selector-search"]');
+ const searchEl = el.find('[component="group-selector-search"]');
if (!searchEl.length) {
return;
}
- var toggleVisibility = searchEl.parent('[component="group-selector"]').length > 0;
+ const toggleVisibility = searchEl.parent('[component="group-selector"]').length > 0;
- var groupEls = el.find('[component="group-list"] [data-name]');
+ const groupEls = el.find('[component="group-list"] [data-name]');
el.on('show.bs.dropdown', function () {
function updateList() {
- var val = searchEl.find('input').val().toLowerCase();
- var noMatch = true;
+ const val = searchEl.find('input').val().toLowerCase();
+ let noMatch = true;
groupEls.each(function () {
- var liEl = $(this);
- var isMatch = liEl.attr('data-name').toLowerCase().indexOf(val) !== -1;
+ const liEl = $(this);
+ const isMatch = liEl.attr('data-name').toLowerCase().indexOf(val) !== -1;
if (noMatch && isMatch) {
noMatch = false;
}
diff --git a/public/src/modules/handleBack.js b/public/src/modules/handleBack.js
index e16546b705..2df8baceda 100644
--- a/public/src/modules/handleBack.js
+++ b/public/src/modules/handleBack.js
@@ -6,8 +6,8 @@ define('handleBack', [
'navigator',
'forum/pagination',
], function (components, storage, navigator, pagination) {
- var handleBack = {};
- var loadTopicsMethod;
+ const handleBack = {};
+ let loadTopicsMethod;
handleBack.init = function (_loadTopicsMethod) {
loadTopicsMethod = _loadTopicsMethod;
@@ -19,8 +19,8 @@ define('handleBack', [
function saveClickedIndex() {
$('[component="category"]').on('click', '[component="topic/header"]', function () {
- var clickedIndex = $(this).parents('[data-index]').attr('data-index');
- var windowScrollTop = $(window).scrollTop();
+ const clickedIndex = $(this).parents('[data-index]').attr('data-index');
+ const windowScrollTop = $(window).scrollTop();
$('[component="category/topic"]').each(function (index, el) {
if ($(el).offset().top - windowScrollTop > 0) {
storage.setItem('category:bookmark', $(el).attr('data-index'));
@@ -33,15 +33,15 @@ define('handleBack', [
}
function onBackClicked(isMarkedUnread) {
- var highlightUnread = isMarkedUnread && ajaxify.data.template.unread;
+ const highlightUnread = isMarkedUnread && ajaxify.data.template.unread;
if (
ajaxify.data.template.category ||
ajaxify.data.template.recent ||
ajaxify.data.template.popular ||
highlightUnread
) {
- var bookmarkIndex = storage.getItem('category:bookmark');
- var clickedIndex = storage.getItem('category:bookmark:clicked');
+ let bookmarkIndex = storage.getItem('category:bookmark');
+ let clickedIndex = storage.getItem('category:bookmark:clicked');
storage.removeItem('category:bookmark');
storage.removeItem('category:bookmark:clicked');
@@ -53,7 +53,7 @@ define('handleBack', [
clickedIndex = Math.max(0, parseInt(clickedIndex, 10) || 0);
if (config.usePagination) {
- var page = Math.ceil((parseInt(bookmarkIndex, 10) + 1) / config.topicsPerPage);
+ const page = Math.ceil((parseInt(bookmarkIndex, 10) + 1) / config.topicsPerPage);
if (parseInt(page, 10) !== ajaxify.data.pagination.currentPage) {
pagination.loadPage(page, function () {
handleBack.scrollToTopic(bookmarkIndex, clickedIndex);
@@ -76,7 +76,7 @@ define('handleBack', [
}
handleBack.highlightTopic = function (topicIndex) {
- var highlight = components.get('category/topic', 'index', topicIndex);
+ const highlight = components.get('category/topic', 'index', topicIndex);
if (highlight.length && !highlight.hasClass('highlight')) {
highlight.addClass('highlight');
@@ -91,10 +91,10 @@ define('handleBack', [
return;
}
- var scrollTo = components.get('category/topic', 'index', bookmarkIndex);
+ const scrollTo = components.get('category/topic', 'index', bookmarkIndex);
if (scrollTo.length) {
- var offset = storage.getItem('category:bookmark:offset');
+ const offset = storage.getItem('category:bookmark:offset');
storage.removeItem('category:bookmark:offset');
$(window).scrollTop(scrollTo.offset().top - offset);
handleBack.highlightTopic(clickedIndex);
diff --git a/public/src/modules/helpers.js b/public/src/modules/helpers.js
index d34266b093..b1778c92b1 100644
--- a/public/src/modules/helpers.js
+++ b/public/src/modules/helpers.js
@@ -2,7 +2,7 @@
(function (factory) {
if (typeof module === 'object' && module.exports) {
- var relative_path = require('nconf').get('relative_path');
+ const relative_path = require('nconf').get('relative_path');
module.exports = factory(require('../utils'), require('benchpressjs'), relative_path);
} else if (typeof define === 'function' && define.amd) {
define('helpers', ['benchpress'], function (Benchpress) {
@@ -13,7 +13,7 @@
Benchpress.setGlobal('true', true);
Benchpress.setGlobal('false', false);
- var helpers = {
+ const helpers = {
displayMenuItem,
buildMetaTag,
buildLinkTag,
@@ -41,7 +41,7 @@
}
function displayMenuItem(data, index) {
- var item = data.navigation[index];
+ const item = data.navigation[index];
if (!item) {
return false;
}
@@ -62,9 +62,9 @@
}
function buildMetaTag(tag) {
- var name = tag.name ? 'name="' + tag.name + '" ' : '';
- var property = tag.property ? 'property="' + tag.property + '" ' : '';
- var content = tag.content ? 'content="' + tag.content.replace(/\n/g, ' ') + '" ' : '';
+ const name = tag.name ? 'name="' + tag.name + '" ' : '';
+ const property = tag.property ? 'property="' + tag.property + '" ' : '';
+ const content = tag.content ? 'content="' + tag.content.replace(/\n/g, ' ') + '" ' : '';
return '
\n\t';
}
@@ -94,7 +94,7 @@
if (!category) {
return '';
}
- var style = [];
+ const style = [];
if (category.bgColor) {
style.push('background-color: ' + category.bgColor);
@@ -115,13 +115,13 @@
}
function generateChildrenCategories(category) {
- var html = '';
+ let html = '';
if (!category || !category.children || !category.children.length) {
return html;
}
category.children.forEach(function (child) {
if (child && !child.isSection) {
- var link = child.link ? child.link : (relative_path + '/category/' + child.slug);
+ const link = child.link ? child.link : (relative_path + '/category/' + child.slug);
html += '
' +
'' +
'
' +
@@ -134,7 +134,7 @@
}
function generateTopicClass(topic) {
- var style = [];
+ const style = [];
if (topic.locked) {
style.push('locked');
@@ -176,8 +176,8 @@
}
function spawnPrivilegeStates(member, privileges) {
- var states = [];
- for (var priv in privileges) {
+ const states = [];
+ for (const priv in privileges) {
if (privileges.hasOwnProperty(priv)) {
states.push({
name: priv,
@@ -186,10 +186,10 @@
}
}
return states.map(function (priv) {
- var guestDisabled = ['groups:moderate', 'groups:posts:upvote', 'groups:posts:downvote', 'groups:local:login', 'groups:group:create'];
- var spidersEnabled = ['groups:find', 'groups:read', 'groups:topics:read', 'groups:view:users', 'groups:view:tags', 'groups:view:groups'];
- var globalModDisabled = ['groups:moderate'];
- var disabled =
+ const guestDisabled = ['groups:moderate', 'groups:posts:upvote', 'groups:posts:downvote', 'groups:local:login', 'groups:group:create'];
+ const spidersEnabled = ['groups:find', 'groups:read', 'groups:topics:read', 'groups:view:users', 'groups:view:tags', 'groups:view:groups'];
+ const globalModDisabled = ['groups:moderate'];
+ const disabled =
(member === 'guests' && (guestDisabled.includes(priv.name) || priv.name.startsWith('groups:admin:'))) ||
(member === 'spiders' && !spidersEnabled.includes(priv.name)) ||
(member === 'Global Moderators' && globalModDisabled.includes(priv.name));
@@ -264,7 +264,7 @@
}
function userAgentIcons(data) {
- var icons = '';
+ let icons = '';
switch (data.platform) {
case 'Linux':
@@ -330,13 +330,13 @@
userObj = this;
}
- var attributes = [
+ const attributes = [
'alt="' + userObj.username + '"',
'title="' + userObj.username + '"',
'data-uid="' + userObj.uid + '"',
'loading="lazy"',
];
- var styles = [];
+ const styles = [];
classNames = classNames || '';
// Validate sizes, handle integers, otherwise fall back to `avatar-sm`
diff --git a/public/src/modules/iconSelect.js b/public/src/modules/iconSelect.js
index 1b2ea1699a..7bbbfb7fa9 100644
--- a/public/src/modules/iconSelect.js
+++ b/public/src/modules/iconSelect.js
@@ -2,12 +2,12 @@
define('iconSelect', ['benchpress', 'bootbox'], function (Benchpress, bootbox) {
- var iconSelect = {};
+ const iconSelect = {};
iconSelect.init = function (el, onModified) {
onModified = onModified || function () {};
- var doubleSize = el.hasClass('fa-2x');
- var selected = el.attr('class').replace('fa-2x', '').replace('fa', '').replace(/\s+/g, '');
+ const doubleSize = el.hasClass('fa-2x');
+ let selected = el.attr('class').replace('fa-2x', '').replace('fa', '').replace(/\s+/g, '');
$('#icons .selected').removeClass('selected');
@@ -23,7 +23,7 @@ define('iconSelect', ['benchpress', 'bootbox'], function (Benchpress, bootbox) {
html = $(html);
html.find('.fa-icons').prepend($('
'));
- var picker = bootbox.dialog({
+ const picker = bootbox.dialog({
onEscape: true,
backdrop: true,
show: false,
@@ -45,10 +45,10 @@ define('iconSelect', ['benchpress', 'bootbox'], function (Benchpress, bootbox) {
label: 'Select',
className: 'btn-primary',
callback: function () {
- var iconClass = $('.bootbox .selected').attr('class');
- var categoryIconClass = $('
').addClass(iconClass).removeClass('fa').removeClass('selected')
+ const iconClass = $('.bootbox .selected').attr('class');
+ const categoryIconClass = $('
').addClass(iconClass).removeClass('fa').removeClass('selected')
.attr('class');
- var searchElVal = picker.find('input').val();
+ const searchElVal = picker.find('input').val();
if (categoryIconClass) {
el.attr('class', 'fa ' + (doubleSize ? 'fa-2x ' : '') + categoryIconClass);
@@ -67,8 +67,8 @@ define('iconSelect', ['benchpress', 'bootbox'], function (Benchpress, bootbox) {
});
picker.on('show.bs.modal', function () {
- var modalEl = $(this);
- var searchEl = modalEl.find('input');
+ const modalEl = $(this);
+ const searchEl = modalEl.find('input');
if (selected) {
modalEl.find('.' + selected).addClass('selected');
@@ -77,10 +77,10 @@ define('iconSelect', ['benchpress', 'bootbox'], function (Benchpress, bootbox) {
}).modal('show');
picker.on('shown.bs.modal', function () {
- var modalEl = $(this);
- var searchEl = modalEl.find('input');
- var icons = modalEl.find('.fa-icons i');
- var submitEl = modalEl.find('button.btn-primary');
+ const modalEl = $(this);
+ const searchEl = modalEl.find('input');
+ const icons = modalEl.find('.fa-icons i');
+ const submitEl = modalEl.find('button.btn-primary');
function changeSelection(newSelection) {
modalEl.find('i.selected').removeClass('selected');
diff --git a/public/src/modules/navigator.js b/public/src/modules/navigator.js
index 12922616d6..58e8a69c2d 100644
--- a/public/src/modules/navigator.js
+++ b/public/src/modules/navigator.js
@@ -1,29 +1,29 @@
'use strict';
define('navigator', ['forum/pagination', 'components', 'hooks'], function (pagination, components, hooks) {
- var navigator = {};
- var index = 0;
- var count = 0;
- var navigatorUpdateTimeoutId;
-
- var renderPostIntervalId;
- var touchX;
- var touchY;
- var renderPostIndex;
- var isNavigating = false;
- var firstMove = true;
+ const navigator = {};
+ let index = 0;
+ let count = 0;
+ let navigatorUpdateTimeoutId;
+
+ let renderPostIntervalId;
+ let touchX;
+ let touchY;
+ let renderPostIndex;
+ let isNavigating = false;
+ let firstMove = true;
navigator.scrollActive = false;
- var paginationBlockEl = $('.pagination-block');
- var paginationTextEl = paginationBlockEl.find('.pagination-text');
- var paginationBlockMeterEl = paginationBlockEl.find('meter');
- var paginationBlockProgressEl = paginationBlockEl.find('.progress-bar');
- var thumb;
- var thumbText;
- var thumbIcon;
- var thumbIconHeight;
- var thumbIconHalfHeight;
+ let paginationBlockEl = $('.pagination-block');
+ let paginationTextEl = paginationBlockEl.find('.pagination-text');
+ let paginationBlockMeterEl = paginationBlockEl.find('meter');
+ let paginationBlockProgressEl = paginationBlockEl.find('.progress-bar');
+ let thumb;
+ let thumbText;
+ let thumbIcon;
+ let thumbIconHeight;
+ let thumbIconHalfHeight;
$(window).on('action:ajaxify.start', function () {
$(window).off('keydown', onKeyDown);
@@ -66,14 +66,14 @@ define('navigator', ['forum/pagination', 'components', 'hooks'], function (pagin
paginationBlockEl.find('input').on('keydown', function (e) {
if (e.which === 13) {
- var input = $(this);
+ const input = $(this);
if (!utils.isNumber(input.val())) {
input.val('');
return;
}
- var index = parseInt(input.val(), 10);
- var url = generateUrl(index);
+ const index = parseInt(input.val(), 10);
+ const url = generateUrl(index);
input.val('');
$('.pagination-block .dropdown-toggle').trigger('click');
ajaxify.go(url);
@@ -91,8 +91,8 @@ define('navigator', ['forum/pagination', 'components', 'hooks'], function (pagin
};
function clampTop(newTop) {
- var parent = thumb.parent();
- var parentOffset = parent.offset();
+ const parent = thumb.parent();
+ const parentOffset = parent.offset();
if (newTop < parentOffset.top) {
newTop = parentOffset.top;
} else if (newTop > parentOffset.top + parent.height() - thumbIconHeight) {
@@ -105,15 +105,15 @@ define('navigator', ['forum/pagination', 'components', 'hooks'], function (pagin
if (!thumb.length || thumb.is(':hidden')) {
return;
}
- var parent = thumb.parent();
- var parentOffset = parent.offset();
- var percent = (index - 1) / ajaxify.data.postcount;
+ const parent = thumb.parent();
+ const parentOffset = parent.offset();
+ let percent = (index - 1) / ajaxify.data.postcount;
if (index === count) {
percent = 1;
}
- var newTop = clampTop(parentOffset.top + ((parent.height() - thumbIconHeight) * percent));
+ const newTop = clampTop(parentOffset.top + ((parent.height() - thumbIconHeight) * percent));
- var offset = { top: newTop, left: thumb.offset().left };
+ const offset = { top: newTop, left: thumb.offset().left };
thumb.offset(offset);
thumbText.text(index + '/' + ajaxify.data.postcount);
renderPost(index);
@@ -124,24 +124,24 @@ define('navigator', ['forum/pagination', 'components', 'hooks'], function (pagin
return;
}
- var parent = thumb.parent();
+ const parent = thumb.parent();
parent.on('click', function (ev) {
if ($(ev.target).hasClass('scroller-container')) {
- var index = calculateIndexFromY(ev.pageY);
+ const index = calculateIndexFromY(ev.pageY);
navigator.scrollToIndex(index - 1, true, 0);
return false;
}
});
function calculateIndexFromY(y) {
- var newTop = clampTop(y - thumbIconHalfHeight);
- var parentOffset = parent.offset();
- var percent = (newTop - parentOffset.top) / (parent.height() - thumbIconHeight);
+ const newTop = clampTop(y - thumbIconHalfHeight);
+ const parentOffset = parent.offset();
+ const percent = (newTop - parentOffset.top) / (parent.height() - thumbIconHeight);
index = Math.max(1, Math.ceil(ajaxify.data.postcount * percent));
return index > ajaxify.data.postcount ? ajaxify.data.count : index;
}
- var mouseDragging = false;
+ let mouseDragging = false;
hooks.on('action:ajaxify.end', function () {
renderPostIndex = null;
});
@@ -167,9 +167,9 @@ define('navigator', ['forum/pagination', 'components', 'hooks'], function (pagin
}
function mousemove(ev) {
- var newTop = clampTop(ev.pageY - thumbIconHalfHeight);
+ const newTop = clampTop(ev.pageY - thumbIconHalfHeight);
thumb.offset({ top: newTop, left: thumb.offset().left });
- var index = calculateIndexFromY(ev.pageY);
+ const index = calculateIndexFromY(ev.pageY);
navigator.updateTextAndProgressBar();
thumbText.text(index + '/' + ajaxify.data.postcount);
if (firstMove) {
@@ -198,10 +198,10 @@ define('navigator', ['forum/pagination', 'components', 'hooks'], function (pagin
});
thumb.on('touchmove', function (ev) {
- var windowWidth = $(window).width();
- var windowHeight = $(window).height();
- var deltaX = Math.abs(touchX - Math.min(windowWidth, Math.max(0, ev.touches[0].clientX)));
- var deltaY = Math.abs(touchY - Math.min(windowHeight, Math.max(0, ev.touches[0].clientY)));
+ const windowWidth = $(window).width();
+ const windowHeight = $(window).height();
+ const deltaX = Math.abs(touchX - Math.min(windowWidth, Math.max(0, ev.touches[0].clientX)));
+ const deltaY = Math.abs(touchY - Math.min(windowHeight, Math.max(0, ev.touches[0].clientY)));
touchX = Math.min(windowWidth, Math.max(0, ev.touches[0].clientX));
touchY = Math.min(windowHeight, Math.max(0, ev.touches[0].clientY));
@@ -213,9 +213,9 @@ define('navigator', ['forum/pagination', 'components', 'hooks'], function (pagin
if (isNavigating && ev.cancelable) {
ev.preventDefault();
ev.stopPropagation();
- var newTop = clampTop(touchY + $(window).scrollTop() - thumbIconHalfHeight);
+ const newTop = clampTop(touchY + $(window).scrollTop() - thumbIconHalfHeight);
thumb.offset({ top: newTop, left: thumb.offset().left });
- var index = calculateIndexFromY(touchY + $(window).scrollTop());
+ const index = calculateIndexFromY(touchY + $(window).scrollTop());
navigator.updateTextAndProgressBar();
thumbText.text(index + '/' + ajaxify.data.postcount);
if (firstMove) {
@@ -286,8 +286,8 @@ define('navigator', ['forum/pagination', 'components', 'hooks'], function (pagin
}
function generateUrl(index) {
- var pathname = window.location.pathname.replace(config.relative_path, '');
- var parts = pathname.split('/');
+ const pathname = window.location.pathname.replace(config.relative_path, '');
+ const parts = pathname.split('/');
return parts[1] + '/' + parts[2] + '/' + parts[3] + (index ? '/' + index : '');
}
@@ -315,7 +315,7 @@ define('navigator', ['forum/pagination', 'components', 'hooks'], function (pagin
};
function toggle(flag) {
- var path = ajaxify.removeRelativePath(window.location.pathname.slice(1));
+ const path = ajaxify.removeRelativePath(window.location.pathname.slice(1));
if (flag && (!path.startsWith('topic') && !path.startsWith('category'))) {
return;
}
@@ -338,22 +338,22 @@ define('navigator', ['forum/pagination', 'components', 'hooks'], function (pagin
a spot where a user is expecting to begin reading.
*/
threshold = typeof threshold === 'number' ? threshold : undefined;
- var newIndex = index;
- var els = $(navigator.selector);
+ let newIndex = index;
+ const els = $(navigator.selector);
if (els.length) {
newIndex = parseInt(els.first().attr('data-index'), 10) + 1;
}
- var scrollTop = $(window).scrollTop();
- var windowHeight = $(window).height();
- var documentHeight = $(document).height();
- var middleOfViewport = scrollTop + (windowHeight / 2);
- var previousDistance = Number.MAX_VALUE;
+ const scrollTop = $(window).scrollTop();
+ const windowHeight = $(window).height();
+ const documentHeight = $(document).height();
+ const middleOfViewport = scrollTop + (windowHeight / 2);
+ let previousDistance = Number.MAX_VALUE;
els.each(function () {
- var $this = $(this);
- var elIndex = parseInt($this.attr('data-index'), 10);
+ const $this = $(this);
+ const elIndex = parseInt($this.attr('data-index'), 10);
if (elIndex >= 0) {
- var distanceToMiddle = Math.abs(middleOfViewport - ($this.offset().top + ($this.outerHeight(true) / 2)));
+ const distanceToMiddle = Math.abs(middleOfViewport - ($this.offset().top + ($this.outerHeight(true) / 2)));
if (distanceToMiddle > previousDistance) {
return false;
}
@@ -365,8 +365,8 @@ define('navigator', ['forum/pagination', 'components', 'hooks'], function (pagin
}
});
- var atTop = scrollTop === 0 && parseInt(els.first().attr('data-index'), 10) === 0;
- var nearBottom = scrollTop + windowHeight > documentHeight - 100 && parseInt(els.last().attr('data-index'), 10) === count - 1;
+ const atTop = scrollTop === 0 && parseInt(els.first().attr('data-index'), 10) === 0;
+ const nearBottom = scrollTop + windowHeight > documentHeight - 100 && parseInt(els.last().attr('data-index'), 10) === count - 1;
if (atTop) {
newIndex = 1;
@@ -379,9 +379,9 @@ define('navigator', ['forum/pagination', 'components', 'hooks'], function (pagin
if (atTop) {
threshold = 0;
} else {
- var anchorEl = components.get('post/anchor', index - 1);
+ const anchorEl = components.get('post/anchor', index - 1);
if (anchorEl.length) {
- var anchorRect = anchorEl.get(0).getBoundingClientRect();
+ const anchorRect = anchorEl.get(0).getBoundingClientRect();
threshold = anchorRect.top;
}
}
@@ -406,16 +406,16 @@ define('navigator', ['forum/pagination', 'components', 'hooks'], function (pagin
}
index = index > count ? count : index;
paginationTextEl.translateHtml('[[global:pagination.out_of, ' + index + ', ' + count + ']]');
- var fraction = (index - 1) / (count - 1 || 1);
+ const fraction = (index - 1) / (count - 1 || 1);
paginationBlockMeterEl.val(fraction);
paginationBlockProgressEl.width((fraction * 100) + '%');
};
navigator.scrollUp = function () {
- var $window = $(window);
+ const $window = $(window);
if (config.usePagination) {
- var atTop = $window.scrollTop() <= 0;
+ const atTop = $window.scrollTop() <= 0;
if (atTop) {
return pagination.previousPage(function () {
$('body,html').scrollTop($(document).height() - $window.height());
@@ -428,10 +428,10 @@ define('navigator', ['forum/pagination', 'components', 'hooks'], function (pagin
};
navigator.scrollDown = function () {
- var $window = $(window);
+ const $window = $(window);
if (config.usePagination) {
- var atBottom = $window.scrollTop() >= $(document).height() - $window.height();
+ const atBottom = $window.scrollTop() >= $(document).height() - $window.height();
if (atBottom) {
return pagination.nextPage();
}
@@ -463,8 +463,8 @@ define('navigator', ['forum/pagination', 'components', 'hooks'], function (pagin
};
navigator.scrollToIndex = function (index, highlight, duration) {
- var inTopic = !!components.get('topic').length;
- var inCategory = !!components.get('category').length;
+ const inTopic = !!components.get('topic').length;
+ const inCategory = !!components.get('category').length;
if (!utils.isNumber(index) || (!inTopic && !inCategory)) {
return;
@@ -490,9 +490,9 @@ define('navigator', ['forum/pagination', 'components', 'hooks'], function (pagin
return;
}
- var scrollMethod = inTopic ? navigator.scrollToPostIndex : navigator.scrollToTopicIndex;
+ const scrollMethod = inTopic ? navigator.scrollToPostIndex : navigator.scrollToTopicIndex;
- var page = 1 + Math.floor(index / config.postsPerPage);
+ const page = 1 + Math.floor(index / config.postsPerPage);
if (parseInt(page, 10) !== ajaxify.data.pagination.currentPage) {
pagination.loadPage(page, function () {
scrollMethod(index, highlight, duration);
@@ -503,12 +503,12 @@ define('navigator', ['forum/pagination', 'components', 'hooks'], function (pagin
};
navigator.scrollToPostIndex = function (postIndex, highlight, duration) {
- var scrollTo = components.get('post', 'index', postIndex);
+ const scrollTo = components.get('post', 'index', postIndex);
navigator.scrollToElement(scrollTo, highlight, duration);
};
navigator.scrollToTopicIndex = function (topicIndex, highlight, duration) {
- var scrollTo = $('[component="category/topic"][data-index="' + topicIndex + '"]');
+ const scrollTo = $('[component="category/topic"][data-index="' + topicIndex + '"]');
navigator.scrollToElement(scrollTo, highlight, duration);
};
@@ -518,23 +518,23 @@ define('navigator', ['forum/pagination', 'components', 'hooks'], function (pagin
return;
}
- var postHeight = scrollTo.outerHeight(true);
- var navbarHeight = components.get('navbar').outerHeight(true);
- var topicHeaderHeight = $('.topic-header').outerHeight(true) || 0;
- var viewportHeight = $(window).height();
+ const postHeight = scrollTo.outerHeight(true);
+ const navbarHeight = components.get('navbar').outerHeight(true);
+ const topicHeaderHeight = $('.topic-header').outerHeight(true) || 0;
+ const viewportHeight = $(window).height();
// Temporarily disable navigator update on scroll
$(window).off('scroll', navigator.delayedUpdate);
duration = duration !== undefined ? duration : 400;
navigator.scrollActive = true;
- var done = false;
+ let done = false;
function animateScroll() {
function reenableScroll() {
// Re-enable onScroll behaviour
$(window).on('scroll', navigator.delayedUpdate);
- var scrollToRect = scrollTo.get(0).getBoundingClientRect();
+ const scrollToRect = scrollTo.get(0).getBoundingClientRect();
navigator.update(scrollToRect.top);
}
function onAnimateComplete() {
@@ -550,7 +550,7 @@ define('navigator', ['forum/pagination', 'components', 'hooks'], function (pagin
$('html').scrollTop($('html').scrollTop() - 1);
}
- var scrollTop = 0;
+ let scrollTop = 0;
if (postHeight < viewportHeight - navbarHeight - topicHeaderHeight) {
scrollTop = scrollTo.offset().top - (viewportHeight / 2) + (postHeight / 2);
} else {
diff --git a/public/src/modules/notifications.js b/public/src/modules/notifications.js
index 0d11293920..d7bdd25ecf 100644
--- a/public/src/modules/notifications.js
+++ b/public/src/modules/notifications.js
@@ -9,13 +9,13 @@ define('notifications', [
'tinycon',
'hooks',
], function (translator, components, navigator, Benchpress, Tinycon, hooks) {
- var Notifications = {};
+ const Notifications = {};
- var unreadNotifs = {};
+ let unreadNotifs = {};
const _addShortTimeagoString = ({ notifications: notifs }) => new Promise((resolve) => {
translator.toggleTimeagoShorthand(function () {
- for (var i = 0; i < notifs.length; i += 1) {
+ for (let i = 0; i < notifs.length; i += 1) {
notifs[i].timeago = $.timeago(new Date(parseInt(notifs[i].datetime, 10)));
}
translator.toggleTimeagoShorthand();
@@ -30,7 +30,7 @@ define('notifications', [
return app.alertError(err.message);
}
- var notifs = data.unread.concat(data.read).sort(function (a, b) {
+ const notifs = data.unread.concat(data.read).sort(function (a, b) {
return parseInt(a.datetime, 10) > parseInt(b.datetime, 10) ? -1 : 1;
});
@@ -38,26 +38,26 @@ define('notifications', [
app.parseAndTranslate('partials/notifications_list', { notifications }, function (html) {
notifList.html(html);
notifList.off('click').on('click', '[data-nid]', function (ev) {
- var notifEl = $(this);
+ const notifEl = $(this);
if (scrollToPostIndexIfOnPage(notifEl)) {
ev.stopPropagation();
ev.preventDefault();
components.get('notifications/list').dropdown('toggle');
}
- var unread = notifEl.hasClass('unread');
+ const unread = notifEl.hasClass('unread');
if (!unread) {
return;
}
- var nid = notifEl.attr('data-nid');
+ const nid = notifEl.attr('data-nid');
markNotification(nid, true);
});
components.get('notifications').on('click', '.mark-all-read', Notifications.markAllRead);
notifList.on('click', '.mark-read', function () {
- var liEl = $(this).parent();
- var unread = liEl.hasClass('unread');
- var nid = liEl.attr('data-nid');
+ const liEl = $(this).parent();
+ const unread = liEl.hasClass('unread');
+ const nid = liEl.attr('data-nid');
markNotification(nid, unread, function () {
liEl.toggleClass('unread');
});
@@ -108,9 +108,9 @@ define('notifications', [
function scrollToPostIndexIfOnPage(notifEl) {
// Scroll to index if already in topic (gh#5873)
- var pid = notifEl.attr('data-pid');
- var path = notifEl.attr('data-path');
- var postEl = components.get('post', 'pid', pid);
+ const pid = notifEl.attr('data-pid');
+ const path = notifEl.attr('data-path');
+ const postEl = components.get('post', 'pid', pid);
if (path.startsWith(config.relative_path + '/post/') && pid && postEl.length && ajaxify.data.template.topic) {
navigator.scrollToIndex(postEl.attr('data-index'), true);
return true;
@@ -119,7 +119,7 @@ define('notifications', [
}
Notifications.updateNotifCount = function (count) {
- var notifIcon = components.get('notifications/icon');
+ const notifIcon = components.get('notifications/icon');
count = Math.max(0, count);
if (count > 0) {
notifIcon.removeClass('fa-bell-o').addClass('fa-bell');
@@ -130,7 +130,7 @@ define('notifications', [
notifIcon.toggleClass('unread-count', count > 0);
notifIcon.attr('data-content', count > 99 ? '99+' : count);
- var payload = {
+ const payload = {
count: count,
updateFavicon: true,
};
diff --git a/public/src/modules/pictureCropper.js b/public/src/modules/pictureCropper.js
index f9033cd89b..cfb01b4654 100644
--- a/public/src/modules/pictureCropper.js
+++ b/public/src/modules/pictureCropper.js
@@ -1,10 +1,10 @@
'use strict';
define('pictureCropper', ['cropper'], function (Cropper) {
- var module = {};
+ const module = {};
module.show = function (data, callback) {
- var fileSize = data.hasOwnProperty('fileSize') && data.fileSize !== undefined ? parseInt(data.fileSize, 10) : false;
+ const fileSize = data.hasOwnProperty('fileSize') && data.fileSize !== undefined ? parseInt(data.fileSize, 10) : false;
app.parseAndTranslate('partials/modals/upload_file_modal', {
showHelp: data.hasOwnProperty('showHelp') && data.showHelp !== undefined ? data.showHelp : true,
fileSize: fileSize,
@@ -18,7 +18,7 @@ define('pictureCropper', ['cropper'], function (Cropper) {
uploadModal.remove();
});
- var uploadForm = uploadModal.find('#uploadForm');
+ const uploadForm = uploadModal.find('#uploadForm');
if (data.route) {
uploadForm.attr('action', data.route);
}
@@ -42,11 +42,11 @@ define('pictureCropper', ['cropper'], function (Cropper) {
}).modal('show');
// Set cropper image max-height based on viewport
- var cropBoxHeight = parseInt($(window).height() / 2, 10);
- var img = document.getElementById('cropped-image');
+ const cropBoxHeight = parseInt($(window).height() / 2, 10);
+ const img = document.getElementById('cropped-image');
$(img).css('max-height', cropBoxHeight);
- var cropperTool = new Cropper(img, {
+ let cropperTool = new Cropper(img, {
aspectRatio: data.aspectRatio,
autoCropArea: 1,
viewMode: 1,
@@ -71,8 +71,8 @@ define('pictureCropper', ['cropper'], function (Cropper) {
}
if (data.restrictImageDimension) {
- var origDimension = (img.width < img.height) ? img.width : img.height;
- var dimension = (origDimension > data.imageDimension) ? data.imageDimension : origDimension;
+ const origDimension = (img.width < img.height) ? img.width : img.height;
+ const dimension = (origDimension > data.imageDimension) ? data.imageDimension : origDimension;
cropperTool.setCropBoxData({
width: dimension,
height: dimension,
@@ -80,13 +80,13 @@ define('pictureCropper', ['cropper'], function (Cropper) {
}
cropperModal.find('.rotate').on('click', function () {
- var degrees = this.getAttribute('data-degrees');
+ const degrees = this.getAttribute('data-degrees');
cropperTool.rotate(degrees);
});
cropperModal.find('.flip').on('click', function () {
- var option = this.getAttribute('data-option');
- var method = this.getAttribute('data-method');
+ const option = this.getAttribute('data-option');
+ const method = this.getAttribute('data-method');
if (method === 'scaleX') {
cropperTool.scaleX(option);
} else {
@@ -101,7 +101,7 @@ define('pictureCropper', ['cropper'], function (Cropper) {
cropperModal.find('.crop-btn').on('click', function () {
$(this).addClass('disabled');
- var imageData = checkCORS(cropperTool, data);
+ const imageData = checkCORS(cropperTool, data);
if (!imageData) {
return;
}
@@ -144,15 +144,15 @@ define('pictureCropper', ['cropper'], function (Cropper) {
};
function socketUpload(params, callback) {
- var socketData = {};
+ const socketData = {};
socketData[params.data.paramName] = params.data.paramValue;
socketData.method = params.data.socketMethod;
socketData.size = params.imageData.length;
socketData.progress = 0;
- var chunkSize = 100000;
+ const chunkSize = 100000;
function doUpload() {
- var chunk = params.imageData.slice(socketData.progress, socketData.progress + chunkSize);
+ const chunk = params.imageData.slice(socketData.progress, socketData.progress + chunkSize);
socket.emit('uploads.upload', {
chunk: chunk,
params: socketData,
@@ -174,13 +174,13 @@ define('pictureCropper', ['cropper'], function (Cropper) {
}
function checkCORS(cropperTool, data) {
- var imageData;
+ let imageData;
try {
imageData = data.imageType ?
cropperTool.getCroppedCanvas().toDataURL(data.imageType) :
cropperTool.getCroppedCanvas().toDataURL();
} catch (err) {
- var corsErrors = [
+ const corsErrors = [
'The operation is insecure.',
'Failed to execute \'toDataURL\' on \'HTMLCanvasElement\': Tainted canvases may not be exported.',
];
@@ -201,13 +201,13 @@ define('pictureCropper', ['cropper'], function (Cropper) {
}
data.uploadModal.find('#alert-' + type).translateText(message).removeClass('hide');
}
- var fileInput = data.uploadModal.find('#fileInput');
+ const fileInput = data.uploadModal.find('#fileInput');
if (!fileInput.val()) {
return showAlert('error', '[[uploads:select-file-to-upload]]');
}
- var file = fileInput[0].files[0];
- var fileSize = data.hasOwnProperty('fileSize') && data.fileSize !== undefined ? parseInt(data.fileSize, 10) : false;
+ const file = fileInput[0].files[0];
+ const fileSize = data.hasOwnProperty('fileSize') && data.fileSize !== undefined ? parseInt(data.fileSize, 10) : false;
if (fileSize && file.size > fileSize * 1024) {
return showAlert('error', '[[error:file-too-big, ' + fileSize + ']]');
}
@@ -219,9 +219,9 @@ define('pictureCropper', ['cropper'], function (Cropper) {
return;
}
- var reader = new FileReader();
+ const reader = new FileReader();
reader.addEventListener('load', function () {
- var imageUrl = reader.result;
+ const imageUrl = reader.result;
data.uploadModal.modal('hide');
diff --git a/public/src/modules/postSelect.js b/public/src/modules/postSelect.js
index d2ca3ff81c..893d7c6142 100644
--- a/public/src/modules/postSelect.js
+++ b/public/src/modules/postSelect.js
@@ -2,12 +2,12 @@
define('postSelect', ['components'], function (components) {
- var PostSelect = {};
- var onSelect;
+ const PostSelect = {};
+ let onSelect;
PostSelect.pids = [];
- var allowMainPostSelect = false;
+ let allowMainPostSelect = false;
PostSelect.init = function (_onSelect, options) {
PostSelect.pids.length = 0;
@@ -20,8 +20,8 @@ define('postSelect', ['components'], function (components) {
function onPostClicked(ev) {
ev.stopPropagation();
- var pidClicked = $(this).attr('data-pid');
- var postEls = $('[component="topic"] [data-pid="' + pidClicked + '"]');
+ const pidClicked = $(this).attr('data-pid');
+ const postEls = $('[component="topic"] [data-pid="' + pidClicked + '"]');
if (!allowMainPostSelect && parseInt($(this).attr('data-index'), 10) === 0) {
return;
}
@@ -39,7 +39,7 @@ define('postSelect', ['components'], function (components) {
PostSelect.togglePostSelection = function (postEls, pid) {
if (pid) {
- var index = PostSelect.pids.indexOf(pid);
+ const index = PostSelect.pids.indexOf(pid);
if (index === -1) {
PostSelect.pids.push(pid);
postEls.toggleClass('bg-success', true);
diff --git a/public/src/modules/scrollStop.js b/public/src/modules/scrollStop.js
index 5e056f5fd9..c6134feefa 100644
--- a/public/src/modules/scrollStop.js
+++ b/public/src/modules/scrollStop.js
@@ -10,13 +10,13 @@
*/
define('scrollStop', function () {
- var Module = {};
+ const Module = {};
Module.apply = function (element) {
$(element).on('mousewheel', function (e) {
- var scrollTop = this.scrollTop;
- var scrollHeight = this.scrollHeight;
- var elementHeight = Math.round(this.getBoundingClientRect().height);
+ const scrollTop = this.scrollTop;
+ const scrollHeight = this.scrollHeight;
+ const elementHeight = Math.round(this.getBoundingClientRect().height);
if (
(e.originalEvent.deltaY < 0 && scrollTop === 0) || // scroll up
diff --git a/public/src/modules/search.js b/public/src/modules/search.js
index 536bebbe5d..a9e3625e9d 100644
--- a/public/src/modules/search.js
+++ b/public/src/modules/search.js
@@ -2,20 +2,20 @@
define('search', ['navigator', 'translator', 'storage', 'hooks'], function (nav, translator, storage, hooks) {
- var Search = {
+ const Search = {
current: {},
};
Search.query = function (data, callback) {
// Detect if a tid was specified
- var topicSearch = data.term.match(/^in:topic-([\d]+) /);
+ const topicSearch = data.term.match(/^in:topic-([\d]+) /);
callback = callback || function () {};
if (!topicSearch) {
ajaxify.go('search?' + createQueryString(data));
callback();
} else {
- var cleanedTerm = data.term.replace(topicSearch[0], '');
- var tid = topicSearch[1];
+ const cleanedTerm = data.term.replace(topicSearch[0], '');
+ const tid = topicSearch[1];
if (cleanedTerm.length > 0) {
Search.queryTopic(tid, cleanedTerm, callback);
@@ -24,9 +24,9 @@ define('search', ['navigator', 'translator', 'storage', 'hooks'], function (nav,
};
Search.api = function (data, callback) {
- var apiURL = config.relative_path + '/api/search?' + createQueryString(data);
+ const apiURL = config.relative_path + '/api/search?' + createQueryString(data);
data.searchOnly = undefined;
- var searchURL = config.relative_path + '/search?' + createQueryString(data);
+ const searchURL = config.relative_path + '/search?' + createQueryString(data);
$.get(apiURL, function (result) {
result.url = searchURL;
callback(result);
@@ -34,16 +34,16 @@ define('search', ['navigator', 'translator', 'storage', 'hooks'], function (nav,
};
function createQueryString(data) {
- var searchIn = data.in || 'titles';
- var postedBy = data.by || '';
- var term = data.term.replace(/^[ ?#]*/, '');
+ const searchIn = data.in || 'titles';
+ const postedBy = data.by || '';
+ let term = data.term.replace(/^[ ?#]*/, '');
try {
term = encodeURIComponent(term);
} catch (e) {
return app.alertError('[[error:invalid-search-term]]');
}
- var query = {
+ const query = {
term: term,
in: searchIn,
};
@@ -111,14 +111,14 @@ define('search', ['navigator', 'translator', 'storage', 'hooks'], function (nav,
return;
}
searchQuery = utils.escapeHTML(searchQuery.replace(/^"/, '').replace(/"$/, '').trim());
- var regexStr = searchQuery.split(' ')
+ const regexStr = searchQuery.split(' ')
.map(function (word) { return utils.escapeRegexChars(word); })
.join('|');
- var regex = new RegExp('(' + regexStr + ')', 'gi');
+ const regex = new RegExp('(' + regexStr + ')', 'gi');
els.each(function () {
- var result = $(this);
- var nested = [];
+ const result = $(this);
+ const nested = [];
result.find('*').each(function () {
$(this).after('');
@@ -186,7 +186,7 @@ define('search', ['navigator', 'translator', 'storage', 'hooks'], function (nav,
};
Search.topicDOM.update = function (index) {
- var topicSearchEl = $('.topic-search');
+ const topicSearchEl = $('.topic-search');
Search.current.index = index;
Search.topicDOM.start();
@@ -194,7 +194,7 @@ define('search', ['navigator', 'translator', 'storage', 'hooks'], function (nav,
if (Search.current.results.length > 0) {
topicSearchEl.find('.count').html((index + 1) + ' / ' + Search.current.results.length);
topicSearchEl.find('.prev, .next').removeAttr('disabled');
- var data = {
+ const data = {
pid: Search.current.results[index],
tid: Search.current.tid,
topicPostSort: config.topicPostSort,
diff --git a/public/src/modules/settings.js b/public/src/modules/settings.js
index dde0a41e22..0d6258c537 100644
--- a/public/src/modules/settings.js
+++ b/public/src/modules/settings.js
@@ -2,7 +2,7 @@
define('settings', ['hooks'], function (hooks) {
- var DEFAULT_PLUGINS = [
+ const DEFAULT_PLUGINS = [
'settings/checkbox',
'settings/number',
'settings/textarea',
@@ -13,10 +13,12 @@ define('settings', ['hooks'], function (hooks) {
'settings/sorted-list',
];
- var Settings;
- var onReady = [];
- var waitingJobs = 0;
- var helper;
+ // eslint-disable-next-line prefer-const
+ let Settings;
+ let onReady = [];
+ let waitingJobs = 0;
+ // eslint-disable-next-line prefer-const
+ let helper;
/**
Returns the hook of given name that matches the given type or element.
@@ -24,23 +26,22 @@ define('settings', ['hooks'], function (hooks) {
@param name The name of the hook.
*/
function getHook(type, name) {
- var hook;
- var plugin;
if (typeof type !== 'string') {
type = $(type);
type = type.data('type') || type.attr('type') || type.prop('tagName');
}
- plugin = Settings.plugins[type.toLowerCase()];
+ const plugin = Settings.plugins[type.toLowerCase()];
if (plugin == null) {
return;
}
- hook = plugin[name];
+ const hook = plugin[name];
if (typeof hook === 'function') {
return hook;
}
return null;
}
+ // eslint-disable-next-line prefer-const
helper = {
/**
@returns Object A deep clone of the given object.
@@ -59,8 +60,8 @@ define('settings', ['hooks'], function (hooks) {
@returns HTMLElement The created element.
*/
createElement: function (tagName, data, text) {
- var element = document.createElement(tagName);
- for (var k in data) {
+ const element = document.createElement(tagName);
+ for (const k in data) {
if (data.hasOwnProperty(k)) {
element.setAttribute(k, data[k]);
}
@@ -75,7 +76,7 @@ define('settings', ['hooks'], function (hooks) {
@param element The element to initialize.
*/
initElement: function (element) {
- var hook = getHook(element, 'init');
+ const hook = getHook(element, 'init');
if (hook != null) {
hook.call(Settings, $(element));
}
@@ -85,7 +86,7 @@ define('settings', ['hooks'], function (hooks) {
@param element The element to destruct.
*/
destructElement: function (element) {
- var hook = getHook(element, 'destruct');
+ const hook = getHook(element, 'destruct');
if (hook != null) {
hook.call(Settings, $(element));
}
@@ -98,8 +99,8 @@ define('settings', ['hooks'], function (hooks) {
@returns JQuery The created element.
*/
createElementOfType: function (type, tagName, data) {
- var element;
- var hook = getHook(type, 'create');
+ let element;
+ const hook = getHook(type, 'create');
if (hook != null) {
element = $(hook.call(Settings, type, tagName, data));
} else {
@@ -123,12 +124,12 @@ define('settings', ['hooks'], function (hooks) {
@returns Array The filtered and/or modified Array.
*/
cleanArray: function (array, trim, empty) {
- var cleaned = [];
+ const cleaned = [];
if (!trim && empty) {
return array;
}
- for (var i = 0; i < array.length; i += 1) {
- var value = array[i];
+ for (let i = 0; i < array.length; i += 1) {
+ let value = array[i];
if (trim) {
if (value === !!value) {
value = +value;
@@ -155,18 +156,18 @@ define('settings', ['hooks'], function (hooks) {
@returns Object The value of the element.
*/
readValue: function (element) {
- 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;
+ let empty = !helper.isFalse(element.data('empty'));
+ const trim = !helper.isFalse(element.data('trim'));
+ const split = element.data('split');
+ const hook = getHook(element, 'get');
+ let value;
if (hook != null) {
return hook.call(Settings, element, trim, empty);
}
if (split != null) {
empty = helper.isTrue(element.data('empty')); // default empty-value is false for arrays
value = element.val();
- var array = (value != null && value.split(split || ',')) || [];
+ const array = (value != null && value.split(split || ',')) || [];
return helper.cleanArray(array, trim, empty);
}
value = element.val();
@@ -184,8 +185,8 @@ define('settings', ['hooks'], function (hooks) {
@param value The value to set.
*/
fillField: function (element, value) {
- var hook = getHook(element, 'set');
- var trim = element.data('trim');
+ const hook = getHook(element, 'set');
+ let trim = element.data('trim');
trim = trim !== 'false' && +trim !== 0;
if (hook != null) {
return hook.call(Settings, element, value, trim);
@@ -219,14 +220,14 @@ define('settings', ['hooks'], function (hooks) {
initFields: function (wrapper) {
$('[data-key]', wrapper).each(function (ignored, field) {
field = $(field);
- var hook = getHook(field, 'init');
- var keyParts = field.data('key').split('.');
- var value = Settings.get();
+ const hook = getHook(field, 'init');
+ const keyParts = field.data('key').split('.');
+ let value = Settings.get();
if (hook != null) {
hook.call(Settings, field);
}
- for (var i = 0; i < keyParts.length; i += 1) {
- var part = keyParts[i];
+ for (let i = 0; i < keyParts.length; i += 1) {
+ const part = keyParts[i];
if (part && value != null) {
value = value[part];
}
@@ -254,7 +255,7 @@ define('settings', ['hooks'], function (hooks) {
if (waitingJobs > 0) {
waitingJobs -= amount;
if (waitingJobs <= 0) {
- for (var i = 0; i < onReady.length; i += 1) {
+ for (let i = 0; i < onReady.length; i += 1) {
onReady[i]();
}
onReady = [];
@@ -273,7 +274,7 @@ define('settings', ['hooks'], function (hooks) {
}
},
serializeForm: function (formEl) {
- var values = formEl.serializeObject();
+ const values = formEl.serializeObject();
// "Fix" checkbox values, so that unchecked options are not omitted
formEl.find('input[type="checkbox"]').each(function (idx, inputEl) {
@@ -341,7 +342,7 @@ define('settings', ['hooks'], function (hooks) {
},
};
-
+ // eslint-disable-next-line prefer-const
Settings = {
helper: helper,
plugins: {},
@@ -371,8 +372,8 @@ define('settings', ['hooks'], function (hooks) {
if (typeof service.use === 'function') {
service.use.call(Settings);
}
- for (var i = 0; i < types.length; i += 1) {
- var type = types[i].toLowerCase();
+ for (let i = 0; i < types.length; i += 1) {
+ const type = types[i].toLowerCase();
if (Settings.plugins[type] == null) {
Settings.plugins[type] = service;
}
@@ -429,20 +430,20 @@ define('settings', ['hooks'], function (hooks) {
@param notify Whether to send notification when settings got saved.
*/
persist: function (hash, wrapper, callback, notify) {
- var notSaved = [];
- var fields = $('[data-key]', wrapper || 'form').toArray();
+ const notSaved = [];
+ const fields = $('[data-key]', wrapper || 'form').toArray();
if (notify == null) {
notify = true;
}
- for (var i = 0; i < fields.length; i += 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];
+ for (let i = 0; i < fields.length; i += 1) {
+ const field = $(fields[i]);
+ const value = helper.readValue(field);
+ let parentCfg = Settings.get();
+ const keyParts = field.data('key').split('.');
+ const lastKey = keyParts[keyParts.length - 1];
if (keyParts.length > 1) {
- for (var j = 0; j < keyParts.length - 1; j += 1) {
- var part = keyParts[j];
+ for (let j = 0; j < keyParts.length - 1; j += 1) {
+ const part = keyParts[j];
if (part && parentCfg != null) {
parentCfg = parentCfg[part];
}
@@ -470,7 +471,7 @@ define('settings', ['hooks'], function (hooks) {
},
load: function (hash, formEl, callback) {
callback = callback || function () {};
- var call = formEl.attr('data-socket-get');
+ const call = formEl.attr('data-socket-get');
socket.emit(call || 'admin.settings.get', {
hash: hash,
@@ -480,7 +481,7 @@ define('settings', ['hooks'], function (hooks) {
}
// multipe selects are saved as json arrays, parse them here
$(formEl).find('select[multiple]').each(function (idx, selectEl) {
- var key = $(selectEl).attr('name');
+ const key = $(selectEl).attr('name');
if (key && values.hasOwnProperty(key)) {
try {
values[key] = JSON.parse(values[key]);
@@ -511,7 +512,7 @@ define('settings', ['hooks'], function (hooks) {
app.flags._unsaved = true;
});
- var saveEl = document.getElementById('save');
+ const saveEl = document.getElementById('save');
if (saveEl) {
require(['mousetrap'], function (mousetrap) {
mousetrap.bind('ctrl+s', function (ev) {
@@ -528,10 +529,10 @@ define('settings', ['hooks'], function (hooks) {
formEl = $(formEl);
if (formEl.length) {
- var values = helper.serializeForm(formEl);
+ const values = helper.serializeForm(formEl);
helper.whenReady(function () {
- var list = formEl.find('[data-sorted-list]');
+ const list = formEl.find('[data-sorted-list]');
if (list.length) {
list.each((idx, item) => {
getHook(item, 'set').call(Settings, $(item), values);
@@ -539,7 +540,7 @@ define('settings', ['hooks'], function (hooks) {
}
});
- var call = formEl.attr('data-socket-set');
+ const call = formEl.attr('data-socket-set');
socket.emit(call || 'admin.settings.set', {
hash: hash,
values: values,
@@ -573,7 +574,7 @@ define('settings', ['hooks'], function (hooks) {
helper.registerReadyJobs(1);
require(DEFAULT_PLUGINS, function () {
- for (var i = 0; i < arguments.length; i += 1) {
+ for (let i = 0; i < arguments.length; i += 1) {
Settings.registerPlugin(arguments[i]);
}
helper.beforeReadyJobsDecreased();
diff --git a/public/src/modules/settings/array.js b/public/src/modules/settings/array.js
index 9b51aee582..6c1ee1395e 100644
--- a/public/src/modules/settings/array.js
+++ b/public/src/modules/settings/array.js
@@ -1,8 +1,7 @@
'use strict';
define('settings/array', function () {
- var SettingsArray;
- var helper = null;
+ let helper = null;
/**
Creates a new button that removes itself and the given elements on click.
@@ -11,7 +10,7 @@ define('settings/array', function () {
@returns JQuery The created remove-button.
*/
function createRemoveButton(elements) {
- var rm = $(helper.createElement('button', {
+ const rm = $(helper.createElement('button', {
class: 'btn btn-xs btn-primary remove',
title: 'Remove Item',
}, '-'));
@@ -41,14 +40,14 @@ define('settings/array', function () {
*/
function addArrayChildElement(field, key, attributes, value, separator, insertCb) {
attributes = helper.deepClone(attributes);
- var type = attributes['data-type'] || attributes.type || 'text';
- var element = $(helper.createElementOfType(type, attributes.tagName, attributes));
+ const type = attributes['data-type'] || attributes.type || 'text';
+ const element = $(helper.createElementOfType(type, attributes.tagName, attributes));
element.attr('data-parent', '_' + key);
delete attributes['data-type'];
delete attributes.tagName;
- for (var name in attributes) {
+ for (const name in attributes) {
if (attributes.hasOwnProperty(name)) {
- var val = attributes[name];
+ const val = attributes[name];
if (name.search('data-') === 0) {
element.data(name.substring(5), val);
} else if (name.search('prop-') === 0) {
@@ -74,9 +73,9 @@ define('settings/array', function () {
@param separator The separator to forward to {@link addArrayChildElement}.
*/
function addAddButton(element, key, attributes, separator) {
- var addSpace = $(document.createTextNode(' '));
- var newValue = element.data('new') || '';
- var add = $(helper.createElement('button', {
+ const addSpace = $(document.createTextNode(' '));
+ const newValue = element.data('new') || '';
+ const add = $(helper.createElement('button', {
class: 'btn btn-sm btn-primary add',
title: 'Expand Array',
}, '+'));
@@ -91,7 +90,7 @@ define('settings/array', function () {
}
- SettingsArray = {
+ const SettingsArray = {
types: ['array', 'div'],
use: function () {
helper = this.helper;
@@ -100,9 +99,9 @@ define('settings/array', function () {
return helper.createElement(tagName || 'div');
},
set: function (element, value) {
- var attributes = element.data('attributes');
- var key = element.data('key') || element.data('parent');
- var separator = element.data('split') || ', ';
+ let attributes = element.data('attributes');
+ const key = element.data('key') || element.data('parent');
+ let separator = element.data('split') || ', ';
separator = (function () {
try {
return $(separator);
@@ -117,7 +116,7 @@ define('settings/array', function () {
if (!(value instanceof Array)) {
value = [];
}
- for (var i = 0; i < value.length; i += 1) {
+ for (let i = 0; i < value.length; i += 1) {
addArrayChildElement(element, key, attributes, value[i], separator.clone(), function (el) {
element.append(el);
});
@@ -125,13 +124,13 @@ define('settings/array', function () {
addAddButton(element, key, attributes, separator);
},
get: function (element, trim, empty) {
- var key = element.data('key') || element.data('parent');
- var children = $('[data-parent="_' + key + '"]', element);
- var values = [];
+ const key = element.data('key') || element.data('parent');
+ const children = $('[data-parent="_' + key + '"]', element);
+ const values = [];
children.each(function (i, child) {
child = $(child);
- var val = helper.readValue(child);
- var empty = helper.isTrue(child.data('empty'));
+ const val = helper.readValue(child);
+ const empty = helper.isTrue(child.data('empty'));
if (empty || (val !== undefined && (val == null || val.length !== 0))) {
return values.push(val);
}
diff --git a/public/src/modules/settings/checkbox.js b/public/src/modules/settings/checkbox.js
index d64212d4e0..8657eeda9f 100644
--- a/public/src/modules/settings/checkbox.js
+++ b/public/src/modules/settings/checkbox.js
@@ -1,10 +1,9 @@
'use strict';
define('settings/checkbox', function () {
- var Settings = null;
- var SettingsCheckbox;
+ let Settings = null;
- SettingsCheckbox = {
+ const SettingsCheckbox = {
types: ['checkbox'],
use: function () {
Settings = this;
@@ -19,7 +18,7 @@ define('settings/checkbox', function () {
element.closest('.mdl-switch').toggleClass('is-checked', element.is(':checked'));
},
get: function (element, trim, empty) {
- var value = element.prop('checked');
+ const value = element.prop('checked');
if (value == null) {
return;
}
diff --git a/public/src/modules/settings/key.js b/public/src/modules/settings/key.js
index fd0b41e926..8148ab58d7 100644
--- a/public/src/modules/settings/key.js
+++ b/public/src/modules/settings/key.js
@@ -1,11 +1,10 @@
'use strict';
define('settings/key', function () {
- var SettingsKey;
- var helper = null;
- var lastKey = null;
- var oldKey = null;
- var keyMap = Object.freeze({
+ let helper = null;
+ let lastKey = null;
+ let oldKey = null;
+ const keyMap = Object.freeze({
0: '',
8: 'Backspace',
9: 'Tab',
@@ -42,13 +41,13 @@ define('settings/key', function () {
@returns Key | null The Key-Object the focused element should be set to.
*/
function getKey(event) {
- var anyModChange = (
+ const anyModChange = (
event.ctrlKey !== lastKey.c ||
event.altKey !== lastKey.a ||
event.shiftKey !== lastKey.s ||
event.metaKey !== lastKey.m
);
- var modChange = (
+ const modChange = (
event.ctrlKey +
event.altKey +
event.shiftKey +
@@ -58,7 +57,7 @@ define('settings/key', function () {
lastKey.s -
lastKey.m
);
- var key = new Key();
+ const key = new Key();
key.c = event.ctrlKey;
key.a = event.altKey;
key.s = event.shiftKey;
@@ -104,7 +103,7 @@ define('settings/key', function () {
@returns String The string to identify the given key-object the given way.
*/
function getKeyString(key, human, short, separator) {
- var str = '';
+ let str = '';
if (!(key instanceof Key)) {
return str;
}
@@ -130,7 +129,7 @@ define('settings/key', function () {
str += (short ? 'M' : 'Meta') + separator;
}
- var out;
+ let out;
if (human) {
out = key.char;
} else if (key.code) {
@@ -149,11 +148,11 @@ define('settings/key', function () {
if (str instanceof Key) {
return 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 += 1) {
- var part = parts[i];
+ const key = new Key();
+ const sep = /([^CtrlAShifMea#\d]+)(?:#|\d)/.exec(str);
+ const parts = sep != null ? str.split(sep[1]) : [str];
+ for (let i = 0; i < parts.length; i += 1) {
+ const part = parts[i];
switch (part) {
case 'C':
case 'Ctrl':
@@ -171,28 +170,20 @@ define('settings/key', function () {
case 'Meta':
key.m = true;
break;
- default:
- var num = /\d+/.exec(part);
+ default: {
+ const num = /\d+/.exec(part);
if (num != null) {
key.code = num[0];
}
key.char = convertKeyCodeToChar(key.code);
+ }
}
}
return key;
}
- function handleEvent(element, event) {
- event = event || window.event;
- event.which = event.which || event.keyCode || event.key;
- var key = getKey(event);
- if (key != null) {
- SettingsKey.set(element, key);
- }
- }
-
- SettingsKey = {
+ const SettingsKey = {
types: ['key'],
use: function () {
helper = this.helper;
@@ -210,7 +201,7 @@ define('settings/key', function () {
return element;
},
set: function (element, value) {
- var key = getKeyFromString(value || '');
+ const key = getKeyFromString(value || '');
element.data('keyData', key);
if (key.code) {
element.removeClass('alert-danger');
@@ -220,9 +211,9 @@ define('settings/key', function () {
element.val(getKeyString(key, true, false, ' + '));
},
get: function (element, trim, empty) {
- var key = element.data('keyData');
- var separator = element.data('split') || element.data('separator') || '+';
- var short = !helper.isFalse(element.data('short'));
+ const key = element.data('keyData');
+ const separator = element.data('split') || element.data('separator') || '+';
+ const short = !helper.isFalse(element.data('short'));
if (trim) {
if (empty || (key != null && key.char)) {
return getKeyString(key, false, short, separator);
@@ -233,5 +224,14 @@ define('settings/key', function () {
},
};
+ function handleEvent(element, event) {
+ event = event || window.event;
+ event.which = event.which || event.keyCode || event.key;
+ const key = getKey(event);
+ if (key != null) {
+ SettingsKey.set(element, key);
+ }
+ }
+
return SettingsKey;
});
diff --git a/public/src/modules/settings/number.js b/public/src/modules/settings/number.js
index 12ff231076..c3eea1c8c0 100644
--- a/public/src/modules/settings/number.js
+++ b/public/src/modules/settings/number.js
@@ -4,7 +4,7 @@ define('settings/number', function () {
return {
types: ['number'],
get: function (element, trim, empty) {
- var value = element.val();
+ const value = element.val();
if (!empty) {
if (value) {
return +value;
diff --git a/public/src/modules/settings/object.js b/public/src/modules/settings/object.js
index 92c91a041f..b6a7398bbc 100644
--- a/public/src/modules/settings/object.js
+++ b/public/src/modules/settings/object.js
@@ -1,8 +1,7 @@
'use strict';
define('settings/object', function () {
- var SettingsObject;
- var helper = null;
+ let helper = null;
/**
Creates a new child-element of given property with given data and calls given callback with elements to add.
@@ -15,22 +14,20 @@ 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'];
- var append = attributes['data-append'];
- var type;
- var element;
+ const prepend = attributes['data-prepend'];
+ const append = attributes['data-append'];
delete attributes['data-prepend'];
delete attributes['data-append'];
attributes = helper.deepClone(attributes);
- type = attributes['data-type'] || attributes.type || 'text';
- element = $(helper.createElementOfType(type, attributes.tagName, attributes));
+ const type = attributes['data-type'] || attributes.type || 'text';
+ const element = $(helper.createElementOfType(type, attributes.tagName, attributes));
element.attr('data-parent', '_' + key);
element.attr('data-prop', prop);
delete attributes['data-type'];
delete attributes.tagName;
- for (var name in attributes) {
+ for (const name in attributes) {
if (attributes.hasOwnProperty(name)) {
- var val = attributes[name];
+ const val = attributes[name];
if (name.search('data-') === 0) {
element.data(name.substring(5), val);
} else if (name.search('prop-') === 0) {
@@ -53,7 +50,7 @@ define('settings/object', function () {
}
}
- SettingsObject = {
+ const SettingsObject = {
types: ['object'],
use: function () {
helper = this.helper;
@@ -62,12 +59,12 @@ define('settings/object', function () {
return helper.createElement(tagName || 'div');
},
set: function (element, value) {
- 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;
+ const properties = element.data('attributes') || element.data('properties');
+ const key = element.data('key') || element.data('parent');
+ let separator = element.data('split') || ', ';
+ let propertyIndex;
+ let propertyName;
+ let attributes;
separator = (function () {
try {
return $(separator);
@@ -104,14 +101,14 @@ define('settings/object', function () {
}
},
get: function (element, trim, empty) {
- var key = element.data('key') || element.data('parent');
- var properties = $('[data-parent="_' + key + '"]', element);
- var value = {};
+ const key = element.data('key') || element.data('parent');
+ const properties = $('[data-parent="_' + key + '"]', element);
+ const value = {};
properties.each(function (i, property) {
property = $(property);
- var val = helper.readValue(property);
- var prop = property.data('prop');
- var empty = helper.isTrue(property.data('empty'));
+ const val = helper.readValue(property);
+ const prop = property.data('prop');
+ const empty = helper.isTrue(property.data('empty'));
if (empty || (val !== undefined && (val == null || val.length !== 0))) {
value[prop] = val;
return val;
diff --git a/public/src/modules/settings/select.js b/public/src/modules/settings/select.js
index 1b28774871..27c13c2831 100644
--- a/public/src/modules/settings/select.js
+++ b/public/src/modules/settings/select.js
@@ -1,33 +1,32 @@
'use strict';
define('settings/select', function () {
- var Settings = null;
- var SettingsSelect;
+ let Settings = null;
function addOptions(element, options) {
- for (var i = 0; i < options.length; i += 1) {
- var optionData = options[i];
- var value = optionData.text || optionData.value;
+ for (let i = 0; i < options.length; i += 1) {
+ const optionData = options[i];
+ const value = optionData.text || optionData.value;
delete optionData.text;
element.append($(Settings.helper.createElement('option', optionData)).text(value));
}
}
- SettingsSelect = {
+ const SettingsSelect = {
types: ['select'],
use: function () {
Settings = this;
},
create: function (ignore, ignored, data) {
- var element = $(Settings.helper.createElement('select'));
+ const element = $(Settings.helper.createElement('select'));
// prevent data-options from being attached to DOM
addOptions(element, data['data-options']);
delete data['data-options'];
return element;
},
init: function (element) {
- var options = element.data('options');
+ const options = element.data('options');
if (options != null) {
addOptions(element, options);
}
@@ -36,7 +35,7 @@ define('settings/select', function () {
element.val(value || '');
},
get: function (element, ignored, empty) {
- var value = element.val();
+ const value = element.val();
if (empty || value) {
return value;
}
diff --git a/public/src/modules/settings/sorted-list.js b/public/src/modules/settings/sorted-list.js
index a33dec9b82..367999161e 100644
--- a/public/src/modules/settings/sorted-list.js
+++ b/public/src/modules/settings/sorted-list.js
@@ -6,50 +6,49 @@ define('settings/sorted-list', [
'hooks',
'jquery-ui/widgets/sortable',
], function (benchpress, bootbox, hooks) {
- var SortedList;
- var Settings;
+ let Settings;
- SortedList = {
+ const SortedList = {
types: ['sorted-list'],
use: function () {
Settings = this;
},
set: function ($container, values) {
- var key = $container.attr('data-sorted-list');
+ const key = $container.attr('data-sorted-list');
values[key] = [];
$container.find('[data-type="item"]').each(function (idx, item) {
- var itemUUID = $(item).attr('data-sorted-list-uuid');
+ const itemUUID = $(item).attr('data-sorted-list-uuid');
- var formData = Settings.helper.serializeForm($('[data-sorted-list-object="' + key + '"][data-sorted-list-uuid="' + itemUUID + '"]'));
+ const formData = Settings.helper.serializeForm($('[data-sorted-list-object="' + key + '"][data-sorted-list-uuid="' + itemUUID + '"]'));
stripTags(formData);
values[key].push(formData);
});
},
get: function ($container, hash) {
- var $list = $container.find('[data-type="list"]');
- var key = $container.attr('data-sorted-list');
- var formTpl = $container.attr('data-form-template');
+ const $list = $container.find('[data-type="list"]');
+ const key = $container.attr('data-sorted-list');
+ const formTpl = $container.attr('data-form-template');
benchpress.render(formTpl, {}).then(function (formHtml) {
- var addBtn = $('[data-sorted-list="' + key + '"] [data-type="add"]');
+ const addBtn = $('[data-sorted-list="' + key + '"] [data-type="add"]');
addBtn.on('click', function () {
- var modal = bootbox.confirm(formHtml, function (save) {
+ const modal = bootbox.confirm(formHtml, function (save) {
if (save) {
SortedList.addItem(modal.find('form').children(), $container);
}
});
});
- var call = $container.parents('form').attr('data-socket-get');
- var list = ajaxify.data[call ? hash : 'settings'][key];
+ const call = $container.parents('form').attr('data-socket-get');
+ const list = ajaxify.data[call ? hash : 'settings'][key];
if (Array.isArray(list) && typeof list[0] !== 'string') {
list.forEach(function (item) {
- var itemUUID = utils.generateUUID();
- var form = $(formHtml).deserialize(item);
+ const itemUUID = utils.generateUUID();
+ const form = $(formHtml).deserialize(item);
form.attr('data-sorted-list-uuid', itemUUID);
form.attr('data-sorted-list-object', key);
$('#content').append(form.hide());
@@ -77,36 +76,36 @@ define('settings/sorted-list', [
};
function setupRemoveButton($container, itemUUID) {
- var removeBtn = $container.find('[data-sorted-list-uuid="' + itemUUID + '"] [data-type="remove"]');
+ const removeBtn = $container.find('[data-sorted-list-uuid="' + itemUUID + '"] [data-type="remove"]');
removeBtn.on('click', function () {
$('[data-sorted-list-uuid="' + itemUUID + '"]').remove();
});
}
function setupEditButton($container, itemUUID) {
- var $list = $container.find('[data-type="list"]');
- var key = $container.attr('data-sorted-list');
- var itemTpl = $container.attr('data-item-template');
- var editBtn = $('[data-sorted-list-uuid="' + itemUUID + '"] [data-type="edit"]');
+ const $list = $container.find('[data-type="list"]');
+ const key = $container.attr('data-sorted-list');
+ const itemTpl = $container.attr('data-item-template');
+ const editBtn = $('[data-sorted-list-uuid="' + itemUUID + '"] [data-type="edit"]');
editBtn.on('click', function () {
- var form = $('[data-sorted-list-uuid="' + itemUUID + '"][data-sorted-list-object="' + key + '"]').clone(true).show();
+ const form = $('[data-sorted-list-uuid="' + itemUUID + '"][data-sorted-list-object="' + key + '"]').clone(true).show();
- var modal = bootbox.confirm(form, function (save) {
+ const modal = bootbox.confirm(form, function (save) {
if (save) {
- var form = $('
');
+ const form = $('
');
form.append(modal.find('form').children());
$('#content').find('[data-sorted-list-uuid="' + itemUUID + '"][data-sorted-list-object="' + key + '"]').remove();
$('#content').append(form.hide());
- var data = Settings.helper.serializeForm(form);
+ const data = Settings.helper.serializeForm(form);
stripTags(data);
app.parseAndTranslate(itemTpl, data, function (itemHtml) {
itemHtml = $(itemHtml);
- var oldItem = $list.find('[data-sorted-list-uuid="' + itemUUID + '"]');
+ const oldItem = $list.find('[data-sorted-list-uuid="' + itemUUID + '"]');
oldItem.after(itemHtml);
oldItem.remove();
itemHtml.attr('data-sorted-list-uuid', itemUUID);
@@ -120,8 +119,8 @@ define('settings/sorted-list', [
}
function parse($container, itemUUID, data) {
- var $list = $container.find('[data-type="list"]');
- var itemTpl = $container.attr('data-item-template');
+ const $list = $container.find('[data-type="list"]');
+ const itemTpl = $container.attr('data-item-template');
stripTags(data);
diff --git a/public/src/modules/settings/textarea.js b/public/src/modules/settings/textarea.js
index cc36e90762..9c6938fef3 100644
--- a/public/src/modules/settings/textarea.js
+++ b/public/src/modules/settings/textarea.js
@@ -1,10 +1,9 @@
'use strict';
define('settings/textarea', function () {
- var Settings = null;
- var SettingsArea;
+ let Settings = null;
- SettingsArea = {
+ const SettingsArea = {
types: ['textarea'],
use: function () {
Settings = this;
@@ -19,7 +18,7 @@ define('settings/textarea', function () {
element.val(value || '');
},
get: function (element, trim, empty) {
- var value = element.val();
+ let value = element.val();
if (trim) {
if (value == null) {
value = undefined;
diff --git a/public/src/modules/share.js b/public/src/modules/share.js
index 946135e986..7d414086cb 100644
--- a/public/src/modules/share.js
+++ b/public/src/modules/share.js
@@ -2,10 +2,10 @@
define('share', ['hooks'], function (hooks) {
- var module = {};
+ const module = {};
module.addShareHandlers = function (name) {
- var baseUrl = window.location.protocol + '//' + window.location.host;
+ const baseUrl = window.location.protocol + '//' + window.location.host;
function openShare(url, urlToPost, width, height) {
window.open(url + encodeURIComponent(baseUrl + config.relative_path + urlToPost), '_blank', 'width=' + width + ',height=' + height + ',scrollbars=no,status=no');
@@ -17,7 +17,7 @@ define('share', ['hooks'], function (hooks) {
}
$('#content').off('shown.bs.dropdown', '.share-dropdown').on('shown.bs.dropdown', '.share-dropdown', function () {
- var postLink = $(this).find('.post-link');
+ const postLink = $(this).find('.post-link');
postLink.val(baseUrl + getPostUrl($(this)));
// without the setTimeout can't select the text in the input
@@ -51,7 +51,7 @@ define('share', ['hooks'], function (hooks) {
}
function getPostUrl(clickedElement) {
- var pid = parseInt(clickedElement.parents('[data-pid]').attr('data-pid'), 10);
+ const pid = parseInt(clickedElement.parents('[data-pid]').attr('data-pid'), 10);
return '/post' + (pid ? '/' + (pid) : '');
}
diff --git a/public/src/modules/slugify.js b/public/src/modules/slugify.js
index 56b72bbe4a..3046ed2b94 100644
--- a/public/src/modules/slugify.js
+++ b/public/src/modules/slugify.js
@@ -10,14 +10,14 @@
window.slugify = factory(XRegExp);
}
}(function (XRegExp) {
- var invalidUnicodeChars = XRegExp('[^\\p{L}\\s\\d\\-_]', 'g');
- var invalidLatinChars = /[^\w\s\d\-_]/g;
- var trimRegex = /^\s+|\s+$/g;
- var collapseWhitespace = /\s+/g;
- var collapseDash = /-+/g;
- var trimTrailingDash = /-$/g;
- var trimLeadingDash = /^-/g;
- var isLatin = /^[\w\d\s.,\-@]+$/;
+ const invalidUnicodeChars = XRegExp('[^\\p{L}\\s\\d\\-_]', 'g');
+ const invalidLatinChars = /[^\w\s\d\-_]/g;
+ const trimRegex = /^\s+|\s+$/g;
+ const collapseWhitespace = /\s+/g;
+ const collapseDash = /-+/g;
+ const trimTrailingDash = /-$/g;
+ const trimLeadingDash = /^-/g;
+ const isLatin = /^[\w\d\s.,\-@]+$/;
// http://dense13.com/blog/2009/05/03/converting-string-to-slug-javascript/
return function slugify(str, preserveCase) {
diff --git a/public/src/modules/sort.js b/public/src/modules/sort.js
index de83eb49d1..783b7185ae 100644
--- a/public/src/modules/sort.js
+++ b/public/src/modules/sort.js
@@ -2,12 +2,12 @@
define('sort', ['components', 'api'], function (components, api) {
- var module = {};
+ const module = {};
module.handleSort = function (field, gotoOnSave) {
- var threadSort = components.get('thread/sort');
+ const threadSort = components.get('thread/sort');
threadSort.find('i').removeClass('fa-check');
- var currentSetting = threadSort.find('a[data-sort="' + config[field] + '"]');
+ const currentSetting = threadSort.find('a[data-sort="' + config[field] + '"]');
currentSetting.find('i').addClass('fa-check');
$('body')
@@ -15,10 +15,10 @@ define('sort', ['components', 'api'], function (components, api) {
.on('click', '[component="thread/sort"] a', function () {
function refresh(newSetting, params) {
config[field] = newSetting;
- var qs = decodeURIComponent($.param(params));
+ const qs = decodeURIComponent($.param(params));
ajaxify.go(gotoOnSave + (qs ? '?' + qs : ''));
}
- var newSetting = $(this).attr('data-sort');
+ const newSetting = $(this).attr('data-sort');
if (app.user.uid) {
const payload = { settings: {} };
payload.settings[field] = newSetting;
@@ -26,7 +26,7 @@ define('sort', ['components', 'api'], function (components, api) {
refresh(newSetting, utils.params());
});
} else {
- var urlParams = utils.params();
+ const urlParams = utils.params();
urlParams.sort = newSetting;
refresh(newSetting, urlParams);
}
diff --git a/public/src/modules/storage.js b/public/src/modules/storage.js
index bccaabcf6b..90db00049e 100644
--- a/public/src/modules/storage.js
+++ b/public/src/modules/storage.js
@@ -47,8 +47,8 @@ define('storage', function () {
});
}
- var storage;
- var item = Date.now().toString();
+ let storage;
+ const item = Date.now().toString();
try {
storage = window.localStorage;
diff --git a/public/src/modules/taskbar.js b/public/src/modules/taskbar.js
index 1c8b2165bb..ce811bc046 100644
--- a/public/src/modules/taskbar.js
+++ b/public/src/modules/taskbar.js
@@ -2,10 +2,10 @@
define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, translator, hooks) {
- var taskbar = {};
+ const taskbar = {};
taskbar.init = function () {
- var self = this;
+ const self = this;
Benchpress.render('modules/taskbar', {}).then(function (html) {
self.taskbar = $(html);
@@ -13,9 +13,9 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t
$(document.body).append(self.taskbar);
self.taskbar.on('click', 'li', function () {
- var $btn = $(this);
- var module = $btn.attr('data-module');
- var uuid = $btn.attr('data-uuid');
+ const $btn = $(this);
+ const module = $btn.attr('data-module');
+ const uuid = $btn.attr('data-uuid');
require([module], function (module) {
if (!$btn.hasClass('active')) {
@@ -41,8 +41,8 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t
taskbar.close = function (module, uuid) {
// Sends signal to the appropriate module's .close() fn (if present)
- var btnEl = taskbar.tasklist.find('[data-module="' + module + '"][data-uuid="' + uuid + '"]');
- var fnName = 'close';
+ const btnEl = taskbar.tasklist.find('[data-module="' + module + '"][data-uuid="' + uuid + '"]');
+ let fnName = 'close';
// TODO: Refactor chat module to not take uuid in close instead of by jQuery element
if (module === 'chat') {
@@ -60,7 +60,7 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t
taskbar.closeAll = function (module) {
// module is optional
- var selector = '[data-uuid]';
+ let selector = '[data-uuid]';
if (module) {
selector = '[data-module="' + module + '"]' + selector;
@@ -72,7 +72,7 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t
};
taskbar.discard = function (module, uuid) {
- var btnEl = taskbar.tasklist.find('[data-module="' + module + '"][data-uuid="' + uuid + '"]');
+ const btnEl = taskbar.tasklist.find('[data-module="' + module + '"][data-uuid="' + uuid + '"]');
btnEl.remove();
update();
@@ -80,9 +80,9 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t
taskbar.push = function (module, uuid, options, callback) {
callback = callback || function () {};
- var element = taskbar.tasklist.find('li[data-uuid="' + uuid + '"]');
+ const element = taskbar.tasklist.find('li[data-uuid="' + uuid + '"]');
- var data = {
+ const data = {
module: module,
uuid: uuid,
options: options,
@@ -99,7 +99,7 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t
};
taskbar.get = function (module) {
- var items = $('[data-module="' + module + '"]').map(function (idx, el) {
+ const items = $('[data-module="' + module + '"]').map(function (idx, el) {
return $(el).data();
});
@@ -107,12 +107,12 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t
};
taskbar.minimize = function (module, uuid) {
- var btnEl = taskbar.tasklist.find('[data-module="' + module + '"][data-uuid="' + uuid + '"]');
+ const btnEl = taskbar.tasklist.find('[data-module="' + module + '"][data-uuid="' + uuid + '"]');
btnEl.toggleClass('active', false);
};
taskbar.toggleNew = function (uuid, state, silent) {
- var btnEl = taskbar.tasklist.find('[data-uuid="' + uuid + '"]');
+ const btnEl = taskbar.tasklist.find('[data-uuid="' + uuid + '"]');
btnEl.toggleClass('new', state);
if (!silent) {
@@ -121,7 +121,7 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t
};
taskbar.updateActive = function (uuid) {
- var tasks = taskbar.tasklist.find('li');
+ const tasks = taskbar.tasklist.find('li');
tasks.removeClass('active');
tasks.filter('[data-uuid="' + uuid + '"]').addClass('active');
@@ -130,12 +130,12 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t
};
taskbar.isActive = function (uuid) {
- var taskBtn = taskbar.tasklist.find('li[data-uuid="' + uuid + '"]');
+ const taskBtn = taskbar.tasklist.find('li[data-uuid="' + uuid + '"]');
return taskBtn.hasClass('active');
};
function update() {
- var tasks = taskbar.tasklist.find('li');
+ const tasks = taskbar.tasklist.find('li');
if (tasks.length > 0) {
taskbar.taskbar.attr('data-active', '1');
@@ -150,9 +150,9 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t
function createTaskbarItem(data, callback) {
translator.translate(data.options.title, function (taskTitle) {
- var title = $('
').text(taskTitle || 'NodeBB Task').html();
+ const title = $('
').text(taskTitle || 'NodeBB Task').html();
- var taskbarEl = $('
')
+ const taskbarEl = $('
')
.addClass(data.options.className)
.html('
' +
(data.options.icon ? ' ' : '') +
@@ -180,7 +180,7 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t
});
}
- var processUpdate = function (element, key, value) {
+ const processUpdate = function (element, key, value) {
switch (key) {
case 'title':
element.find('[component="taskbar/title"]').text(value);
@@ -198,11 +198,11 @@ define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, t
};
taskbar.update = function (module, uuid, options) {
- var element = taskbar.tasklist.find('[data-module="' + module + '"][data-uuid="' + uuid + '"]');
+ const element = taskbar.tasklist.find('[data-module="' + module + '"][data-uuid="' + uuid + '"]');
if (!element.length) {
return;
}
- var data = element.data();
+ const data = element.data();
Object.keys(options).forEach(function (key) {
data[key] = options[key];
diff --git a/public/src/modules/topicList.js b/public/src/modules/topicList.js
index 6ff9e33c24..1ce4016364 100644
--- a/public/src/modules/topicList.js
+++ b/public/src/modules/topicList.js
@@ -8,14 +8,14 @@ define('topicList', [
'forum/category/tools',
'hooks',
], function (infinitescroll, handleBack, topicSelect, categoryFilter, categoryTools, hooks) {
- var TopicList = {};
- var templateName = '';
+ const TopicList = {};
+ let templateName = '';
- var newTopicCount = 0;
- var newPostCount = 0;
+ let newTopicCount = 0;
+ let newPostCount = 0;
- var loadTopicsCallback;
- var topicListEl;
+ let loadTopicsCallback;
+ let topicListEl;
const scheduledTopics = [];
@@ -33,7 +33,7 @@ define('topicList', [
categoryTools.init();
TopicList.watchForNewPosts();
- var states = ['watching'];
+ const states = ['watching'];
if (ajaxify.data.selectedFilter && ajaxify.data.selectedFilter.filter === 'watched') {
states.push('notwatching', 'ignoring');
} else if (template !== 'unread') {
@@ -113,7 +113,7 @@ define('topicList', [
}
function onNewPost(data) {
- var post = data.posts[0];
+ const post = data.posts[0];
if (!post || !post.topic || post.topic.isFollowing) {
return;
}
@@ -141,7 +141,7 @@ define('topicList', [
}
function updateAlertText() {
- var text = '';
+ let text = '';
if (newTopicCount === 0) {
if (newPostCount === 1) {
@@ -177,9 +177,9 @@ define('topicList', [
if (!topicListEl.length || !topicListEl.children().length) {
return;
}
- var topics = topicListEl.find('[component="category/topic"]');
- var afterEl = direction > 0 ? topics.last() : topics.first();
- var after = (parseInt(afterEl.attr('data-index'), 10) || 0) + (direction > 0 ? 1 : 0);
+ const topics = topicListEl.find('[component="category/topic"]');
+ const afterEl = direction > 0 ? topics.last() : topics.first();
+ const after = (parseInt(afterEl.attr('data-index'), 10) || 0) + (direction > 0 ? 1 : 0);
if (!utils.isNumber(after) || (after === 0 && topicListEl.find('[component="category/topic"][data-index="0"]').length)) {
return;
@@ -196,7 +196,7 @@ define('topicList', [
function loadTopicsAfter(after, direction, callback) {
callback = callback || function () {};
- var query = utils.params();
+ const query = utils.params();
query.page = calculateNextPage(after, direction);
infinitescroll.loadMoreXhr(query, callback);
}
@@ -219,9 +219,9 @@ define('topicList', [
return callback();
}
- var after;
- var before;
- var topicEls = topicListEl.find('[component="category/topic"]');
+ let after;
+ let before;
+ const topicEls = topicListEl.find('[component="category/topic"]');
if (direction > 0 && topics.length) {
after = topicEls.last();
@@ -229,7 +229,7 @@ define('topicList', [
before = topicEls.first();
}
- var tplData = {
+ const tplData = {
topics: topics,
showSelect: showSelect,
template: {
@@ -247,8 +247,8 @@ define('topicList', [
if (after && after.length) {
html.insertAfter(after);
} else if (before && before.length) {
- var height = $(document).height();
- var scrollTop = $(window).scrollTop();
+ const height = $(document).height();
+ const scrollTop = $(window).scrollTop();
html.insertBefore(before);
diff --git a/public/src/modules/topicSelect.js b/public/src/modules/topicSelect.js
index 3040b36e98..526dd530bc 100644
--- a/public/src/modules/topicSelect.js
+++ b/public/src/modules/topicSelect.js
@@ -2,10 +2,10 @@
define('topicSelect', ['components'], function (components) {
- var TopicSelect = {};
- var lastSelected;
+ const TopicSelect = {};
+ let lastSelected;
- var topicsContainer;
+ let topicsContainer;
TopicSelect.init = function (onSelect) {
topicsContainer = $('[component="category"]');
@@ -14,7 +14,7 @@ define('topicSelect', ['components'], function (components) {
});
topicsContainer.on('click', '[component="topic/select"]', function (ev) {
- var select = $(this);
+ const select = $(this);
if (ev.shiftKey) {
selectRange($(this).parents('[component="category/topic"]').attr('data-tid'));
@@ -22,7 +22,7 @@ define('topicSelect', ['components'], function (components) {
return false;
}
- var isSelected = select.parents('[data-tid]').hasClass('selected');
+ const isSelected = select.parents('[data-tid]').hasClass('selected');
toggleSelect(select, !isSelected);
lastSelected = select;
if (typeof onSelect === 'function') {
@@ -38,7 +38,7 @@ define('topicSelect', ['components'], function (components) {
}
TopicSelect.getSelectedTids = function () {
- var tids = [];
+ const tids = [];
if (!topicsContainer) {
return tids;
}
@@ -60,22 +60,22 @@ define('topicSelect', ['components'], function (components) {
lastSelected = $('[component="category/topic"]').first().find('[component="topic/select"]');
}
- var isClickedSelected = components.get('category/topic', 'tid', clickedTid).hasClass('selected');
+ const isClickedSelected = components.get('category/topic', 'tid', clickedTid).hasClass('selected');
- var clickedIndex = getIndex(clickedTid);
- var lastIndex = getIndex(lastSelected.parents('[component="category/topic"]').attr('data-tid'));
+ const clickedIndex = getIndex(clickedTid);
+ const lastIndex = getIndex(lastSelected.parents('[component="category/topic"]').attr('data-tid'));
selectIndexRange(clickedIndex, lastIndex, !isClickedSelected);
}
function selectIndexRange(start, end, isSelected) {
if (start > end) {
- var tmp = start;
+ const tmp = start;
start = end;
end = tmp;
}
- for (var i = start; i <= end; i += 1) {
- var topic = $('[component="category/topic"]').eq(i);
+ for (let i = start; i <= end; i += 1) {
+ const topic = $('[component="category/topic"]').eq(i);
toggleSelect(topic.find('[component="topic/select"]'), isSelected);
}
}
diff --git a/public/src/modules/translator.js b/public/src/modules/translator.js
index 2205d9b64b..142d360b68 100644
--- a/public/src/modules/translator.js
+++ b/public/src/modules/translator.js
@@ -18,7 +18,7 @@
});
});
}
- var warn = function () { console.warn.apply(console, arguments); };
+ let warn = function () { console.warn.apply(console, arguments); };
if (typeof define === 'function' && define.amd) {
// AMD. Register as a named module
define('translator', [], function () {
@@ -27,10 +27,10 @@
} else if (typeof module === 'object' && module.exports) {
// Node
(function () {
- var languages = require('../../../src/languages');
+ const languages = require('../../../src/languages');
if (global.env === 'development') {
- var winston = require('winston');
+ const winston = require('winston');
warn = function (a) {
winston.warn(a);
};
@@ -40,7 +40,7 @@
}());
}
}(function (utils, load, warn) {
- var assign = Object.assign || jQuery.extend;
+ const assign = Object.assign || jQuery.extend;
function escapeHTML(str) {
return utils.escapeHTML(utils.decodeHTMLEntities(
@@ -50,25 +50,25 @@
));
}
- var Translator = (function () {
+ const Translator = (function () {
/**
* Construct a new Translator object
* @param {string} language - Language code for this translator instance
* @exports translator.Translator
*/
function Translator(language) {
- var self = this;
+ const self = this;
if (!language) {
throw new TypeError('Parameter `language` must be a language string. Received ' + language + (language === '' ? '(empty string)' : ''));
}
self.modules = Object.keys(Translator.moduleFactories).map(function (namespace) {
- var factory = Translator.moduleFactories[namespace];
+ const factory = Translator.moduleFactories[namespace];
return [namespace, factory(language)];
}).reduce(function (prev, elem) {
- var namespace = elem[0];
- var module = elem[1];
+ const namespace = elem[0];
+ const module = elem[1];
prev[namespace] = module;
return prev;
@@ -87,31 +87,31 @@
*/
Translator.prototype.translate = function translate(str) {
// regex for valid text in namespace / key
- var validText = 'a-zA-Z0-9\\-_.\\/';
- var validTextRegex = new RegExp('[' + validText + ']');
- var invalidTextRegex = new RegExp('[^' + validText + '\\]]');
+ const validText = 'a-zA-Z0-9\\-_.\\/';
+ const validTextRegex = new RegExp('[' + validText + ']');
+ const invalidTextRegex = new RegExp('[^' + validText + '\\]]');
// current cursor position
- var cursor = 0;
+ let cursor = 0;
// last break of the input string
- var lastBreak = 0;
+ let lastBreak = 0;
// length of the input string
- var len = str.length;
+ const len = str.length;
// array to hold the promises for the translations
// and the strings of untranslated text in between
- var toTranslate = [];
+ const toTranslate = [];
// to store the state of if we're currently in a top-level token for later
- var inToken = false;
+ let inToken = false;
// split a translator string into an array of tokens
// but don't split by commas inside other translator strings
function split(text) {
- var len = text.length;
- var arr = [];
- var i = 0;
- var brk = 0;
- var level = 0;
+ const len = text.length;
+ const arr = [];
+ let i = 0;
+ let brk = 0;
+ let level = 0;
while (i + 2 <= len) {
if (text[i] === '[' && text[i + 1] === '[') {
@@ -152,14 +152,14 @@
inToken = true;
// the current level of nesting of the translation strings
- var level = 0;
- var char0;
- var char1;
+ let level = 0;
+ let char0;
+ let char1;
// validating the current string is actually a translation
- var textBeforeColonFound = false;
- var colonFound = false;
- var textAfterColonFound = false;
- var commaAfterNameFound = false;
+ let textBeforeColonFound = false;
+ let colonFound = false;
+ let textAfterColonFound = false;
+ let commaAfterNameFound = false;
while (cursor + 2 <= len) {
char0 = str[cursor];
@@ -204,14 +204,14 @@
// if we're at the base level, then this is the end
if (level === 0) {
// so grab the name and args
- var currentSlice = str.slice(lastBreak, cursor);
- var result = split(currentSlice);
- var name = result[0];
- var args = result.slice(1);
+ const currentSlice = str.slice(lastBreak, cursor);
+ const result = split(currentSlice);
+ const name = result[0];
+ const args = result.slice(1);
// make a backup based on the raw string of the token
// if there are arguments to the token
- var backup = '';
+ let backup = '';
if (args && args.length) {
backup = this.translate(currentSlice);
}
@@ -241,7 +241,7 @@
}
// ending string of source
- var last = str.slice(lastBreak);
+ let last = str.slice(lastBreak);
// if we were mid-token, treat it as invalid
if (inToken) {
@@ -265,11 +265,11 @@
* @returns {Promise}
*/
Translator.prototype.translateKey = function translateKey(name, args, backup) {
- var self = this;
+ const self = this;
- var result = name.split(':', 2);
- var namespace = result[0];
- var key = result[1];
+ const result = name.split(':', 2);
+ const namespace = result[0];
+ const key = result[1];
if (self.modules[namespace]) {
return Promise.resolve(self.modules[namespace](key, args));
@@ -284,7 +284,7 @@
return Promise.resolve('[[' + namespace + ']]');
}
- var translation = this.getTranslation(namespace, key);
+ const translation = this.getTranslation(namespace, key);
return translation.then(function (translated) {
// check if the translation is missing first
if (!translated) {
@@ -292,14 +292,14 @@
return backup || key;
}
- var argsToTranslate = args.map(function (arg) {
+ const argsToTranslate = args.map(function (arg) {
return self.translate(escapeHTML(arg));
});
return Promise.all(argsToTranslate).then(function (translatedArgs) {
- var out = translated;
+ let out = translated;
translatedArgs.forEach(function (arg, i) {
- var escaped = arg.replace(/%(?=\d)/g, '%').replace(/\\,/g, ',');
+ let escaped = arg.replace(/%(?=\d)/g, '%').replace(/\\,/g, ',');
// fix double escaped translation keys, see https://github.com/NodeBB/NodeBB/issues/9206
escaped = escaped.replace(/[/g, '[')
.replace(/]/g, ']');
@@ -317,7 +317,7 @@
* @returns {Promise<{ [key: string]: string } | string>}
*/
Translator.prototype.getTranslation = function getTranslation(namespace, key) {
- var translation;
+ let translation;
if (!namespace) {
warn('[translator] Parameter `namespace` is ' + namespace + (namespace === '' ? '(empty string)' : ''));
translation = Promise.resolve({});
@@ -361,13 +361,13 @@
* @returns {Node[]}
*/
function descendantTextNodes(node) {
- var textNodes = [];
+ const textNodes = [];
function helper(node) {
if (node.nodeType === 3) {
textNodes.push(node);
} else {
- for (var i = 0, c = node.childNodes, l = c.length; i < l; i += 1) {
+ for (let i = 0, c = node.childNodes, l = c.length; i < l; i += 1) {
helper(c[i]);
}
}
@@ -386,18 +386,18 @@
Translator.prototype.translateInPlace = function translateInPlace(element, attributes) {
attributes = attributes || ['placeholder', 'title'];
- var nodes = descendantTextNodes(element);
- var text = nodes.map(function (node) {
+ const nodes = descendantTextNodes(element);
+ const text = nodes.map(function (node) {
return utils.escapeHTML(node.nodeValue);
}).join(' || ');
- var attrNodes = attributes.reduce(function (prev, attr) {
- var tuples = Array.prototype.map.call(element.querySelectorAll('[' + attr + '*="[["]'), function (el) {
+ const attrNodes = attributes.reduce(function (prev, attr) {
+ const tuples = Array.prototype.map.call(element.querySelectorAll('[' + attr + '*="[["]'), function (el) {
return [attr, el];
});
return prev.concat(tuples);
}, []);
- var attrText = attrNodes.map(function (node) {
+ const attrText = attrNodes.map(function (node) {
return node[1].getAttribute(node[0]);
}).join(' || ');
@@ -405,8 +405,8 @@
this.translate(text),
this.translate(attrText),
]).then(function (ref) {
- var translated = ref[0];
- var translatedAttrs = ref[1];
+ const translated = ref[0];
+ const translatedAttrs = ref[1];
if (translated) {
translated.split(' || ').forEach(function (html, i) {
$(nodes[i]).replaceWith(html);
@@ -425,12 +425,12 @@
* @returns {string}
*/
Translator.getLanguage = function getLanguage() {
- var lang;
+ let lang;
if (typeof window === 'object' && window.config && window.utils) {
lang = utils.params().lang || config.userLang || config.defaultLang || 'en-GB';
} else {
- var meta = require('../../../src/meta');
+ const meta = require('../../../src/meta');
lang = meta.config && meta.config.defaultLang ? meta.config.defaultLang : 'en-GB';
}
@@ -463,7 +463,7 @@
Translator.moduleFactories[namespace] = factory;
Object.keys(Translator.cache).forEach(function (key) {
- var translator = Translator.cache[key];
+ const translator = Translator.cache[key];
translator.modules[namespace] = factory(translator.lang);
});
};
@@ -476,12 +476,12 @@
* @returns {string}
*/
Translator.removePatterns = function removePatterns(text) {
- var len = text.length;
- var cursor = 0;
- var lastBreak = 0;
- var level = 0;
- var out = '';
- var sub;
+ const len = text.length;
+ let cursor = 0;
+ let lastBreak = 0;
+ let level = 0;
+ let out = '';
+ let sub;
while (cursor < len) {
sub = text.slice(cursor, cursor + 2);
@@ -532,7 +532,7 @@
* @param {...string} arg - Optional argument for the pattern
*/
Translator.compile = function compile() {
- var args = Array.prototype.slice.call(arguments, 0).map(function (text) {
+ const args = Array.prototype.slice.call(arguments, 0).map(function (text) {
// escape commas and percent signs in arguments
return String(text).replace(/%/g, '%').replace(/,/g, ',');
});
@@ -546,7 +546,7 @@
/**
* @exports translator
*/
- var adaptor = {
+ const adaptor = {
/**
* The Translator class
*/
@@ -581,8 +581,8 @@
translate: function translate(text, language, callback) {
// TODO: deprecate?
- var cb = callback;
- var lang = language;
+ let cb = callback;
+ let lang = language;
if (typeof language === 'function') {
cb = language;
lang = null;
@@ -632,7 +632,7 @@
toggleTimeagoShorthand: function toggleTimeagoShorthand(callback) {
/* eslint "prefer-object-spread": "off" */
function toggle() {
- var tmp = assign({}, jQuery.timeago.settings.strings);
+ const tmp = assign({}, jQuery.timeago.settings.strings);
jQuery.timeago.settings.strings = assign({}, adaptor.timeagoShort);
adaptor.timeagoShort = assign({}, tmp);
if (typeof callback === 'function') {
@@ -641,12 +641,12 @@
}
if (!adaptor.timeagoShort) {
- var languageCode = utils.userLangToTimeagoCode(config.userLang);
+ let languageCode = utils.userLangToTimeagoCode(config.userLang);
if (!config.timeagoCodes.includes(languageCode + '-short')) {
languageCode = 'en';
}
- var originalSettings = assign({}, jQuery.timeago.settings.strings);
+ const originalSettings = assign({}, jQuery.timeago.settings.strings);
adaptor.switchTimeagoLanguage(languageCode + '-short', function () {
adaptor.timeagoShort = assign({}, jQuery.timeago.settings.strings);
jQuery.timeago.settings.strings = assign({}, originalSettings);
@@ -661,7 +661,7 @@
// Delete the cached shorthand strings if present
delete adaptor.timeagoShort;
- var stringsModule = 'timeago/locales/jquery.timeago.' + langCode;
+ const stringsModule = 'timeago/locales/jquery.timeago.' + langCode;
// without undef, requirejs won't load the strings a second time
require.undef(stringsModule);
require([stringsModule], function () {
diff --git a/public/src/modules/uploader.js b/public/src/modules/uploader.js
index e97371e42d..fb50e431ba 100644
--- a/public/src/modules/uploader.js
+++ b/public/src/modules/uploader.js
@@ -2,10 +2,10 @@
define('uploader', ['jquery-form'], function () {
- var module = {};
+ const module = {};
module.show = function (data, callback) {
- var fileSize = data.hasOwnProperty('fileSize') && data.fileSize !== undefined ? parseInt(data.fileSize, 10) : false;
+ const fileSize = data.hasOwnProperty('fileSize') && data.fileSize !== undefined ? parseInt(data.fileSize, 10) : false;
app.parseAndTranslate('partials/modals/upload_file_modal', {
showHelp: data.hasOwnProperty('showHelp') && data.showHelp !== undefined ? data.showHelp : true,
fileSize: fileSize,
@@ -19,7 +19,7 @@ define('uploader', ['jquery-form'], function () {
uploadModal.remove();
});
- var uploadForm = uploadModal.find('#uploadForm');
+ const uploadForm = uploadModal.find('#uploadForm');
uploadForm.attr('action', data.route);
uploadForm.find('#params').val(JSON.stringify(data.params));
@@ -45,7 +45,7 @@ define('uploader', ['jquery-form'], function () {
uploadModal.find('#upload-progress-bar').css('width', '0%');
uploadModal.find('#upload-progress-box').show().removeClass('hide');
- var fileInput = uploadModal.find('#fileInput');
+ const fileInput = uploadModal.find('#fileInput');
if (!fileInput.val()) {
return showAlert(uploadModal, 'error', '[[uploads:select-file-to-upload]]');
}
diff --git a/public/src/overrides.js b/public/src/overrides.js
index 95288cf038..123d814059 100644
--- a/public/src/overrides.js
+++ b/public/src/overrides.js
@@ -7,14 +7,14 @@ if (typeof window !== 'undefined') {
(function ($) {
require(['translator'], function (translator) {
$.fn.getCursorPosition = function () {
- var el = $(this).get(0);
- var pos = 0;
+ const el = $(this).get(0);
+ let pos = 0;
if ('selectionStart' in el) {
pos = el.selectionStart;
} else if ('selection' in document) {
el.focus();
- var Sel = document.selection.createRange();
- var SelLength = document.selection.createRange().text.length;
+ const Sel = document.selection.createRange();
+ const SelLength = document.selection.createRange().text.length;
Sel.moveStart('character', -el.value.length);
pos = Sel.text.length - SelLength;
}
@@ -30,7 +30,7 @@ if (typeof window !== 'undefined') {
this.focus();
this.setSelectionRange(start, end);
} else if (this.createTextRange) {
- var range = this.createTextRange();
+ const range = this.createTextRange();
range.collapse(true);
range.moveEnd('character', end);
range.moveStart('character', start);
@@ -45,7 +45,7 @@ if (typeof window !== 'undefined') {
$(this).focus();
if (this.setSelectionRange) {
- var len = $(this).val().length * 2;
+ const len = $(this).val().length * 2;
this.setSelectionRange(len, len);
} else {
$(this).val($(this).val());
@@ -68,7 +68,7 @@ if (typeof window !== 'undefined') {
$.fn.translateAttr = function (attr, str) {
return this.each(function () {
- var el = $(this);
+ const el = $(this);
translator.translate(str, function (translated) {
el.attr(attr, translated);
});
@@ -77,7 +77,7 @@ if (typeof window !== 'undefined') {
function translate(elements, type, str) {
return elements.each(function () {
- var el = $(this);
+ const el = $(this);
translator.translate(str, function (translated) {
el[type](translated);
});
@@ -90,7 +90,7 @@ if (typeof window !== 'undefined') {
// FIX FOR #1245 - https://github.com/NodeBB/NodeBB/issues/1245
// from http://stackoverflow.com/questions/15931962/bootstrap-dropdown-disappear-with-right-click-on-firefox
// obtain a reference to the original handler
- var _clearMenus = $._data(document, 'events').click.filter(function (el) {
+ let _clearMenus = $._data(document, 'events').click.filter(function (el) {
return el.namespace === 'bs.data-api.dropdown' && el.selector === undefined;
});
@@ -108,7 +108,7 @@ if (typeof window !== 'undefined') {
}
});
}());
- var timeagoFn;
+ let timeagoFn;
overrides.overrideTimeago = function () {
if (!timeagoFn) {
timeagoFn = $.fn.timeago;
@@ -121,24 +121,24 @@ if (typeof window !== 'undefined') {
}
$.timeago.settings.allowFuture = true;
- var userLang = config.userLang.replace('_', '-');
- var options = { year: 'numeric', month: 'short', day: 'numeric', hour: 'numeric', minute: 'numeric' };
- var formatFn = function (date) {
+ const userLang = config.userLang.replace('_', '-');
+ const options = { year: 'numeric', month: 'short', day: 'numeric', hour: 'numeric', minute: 'numeric' };
+ let formatFn = function (date) {
return date.toLocaleString(userLang, options);
};
try {
if (typeof Intl !== 'undefined') {
- var dtFormat = new Intl.DateTimeFormat(userLang, options);
+ const dtFormat = new Intl.DateTimeFormat(userLang, options);
formatFn = dtFormat.format;
}
} catch (err) {
console.error(err);
}
- var iso;
- var date;
+ let iso;
+ let date;
$.fn.timeago = function () {
- var els = $(this);
+ const els = $(this);
// Convert "old" format to new format (#5108)
els.each(function () {
iso = this.getAttribute('title');
diff --git a/public/src/sockets.js b/public/src/sockets.js
index 31fa1e8958..7615fe5b2b 100644
--- a/public/src/sockets.js
+++ b/public/src/sockets.js
@@ -5,9 +5,9 @@ app = window.app || {};
socket = window.socket;
(function () {
- var reconnecting = false;
+ let reconnecting = false;
- var ioParams = {
+ const ioParams = {
reconnectionAttempts: config.maxReconnectionAttempts,
reconnectionDelay: config.reconnectionDelay,
transports: config.socketioTransports,
@@ -16,7 +16,7 @@ socket = window.socket;
socket = io(config.websocketAddress, ioParams);
- var oEmit = socket.emit;
+ const oEmit = socket.emit;
socket.emit = function (event, data, callback) {
if (typeof data === 'function') {
callback = data;
@@ -35,7 +35,7 @@ socket = window.socket;
});
};
- var hooks;
+ let hooks;
require(['hooks'], function (_hooks) {
hooks = _hooks;
if (parseInt(app.user.uid, 10) >= 0) {
@@ -48,7 +48,7 @@ socket = window.socket;
return;
}
- var reconnectEl = $('#reconnect');
+ const reconnectEl = $('#reconnect');
$('#reconnect-alert')
.removeClass('alert-danger pointer')
.addClass('alert-warning')
@@ -65,7 +65,7 @@ socket = window.socket;
socket.on('disconnect', onDisconnect);
socket.io.on('reconnect_failed', function () {
- var reconnectEl = $('#reconnect');
+ const reconnectEl = $('#reconnect');
reconnectEl.html('');
$('#reconnect-alert')
@@ -132,8 +132,8 @@ socket = window.socket;
}
if (reconnecting) {
- var reconnectEl = $('#reconnect');
- var reconnectAlert = $('#reconnect-alert');
+ const reconnectEl = $('#reconnect');
+ const reconnectAlert = $('#reconnect-alert');
reconnectEl.tooltip('destroy');
reconnectEl.html('');
@@ -153,8 +153,8 @@ socket = window.socket;
}
function reJoinCurrentRoom() {
- var url_parts = window.location.pathname.slice(config.relative_path.length).split('/').slice(1);
- var room;
+ const url_parts = window.location.pathname.slice(config.relative_path.length).split('/').slice(1);
+ let room;
switch (url_parts[0]) {
case 'user':
@@ -188,8 +188,8 @@ socket = window.socket;
function onReconnecting() {
reconnecting = true;
- var reconnectEl = $('#reconnect');
- var reconnectAlert = $('#reconnect-alert');
+ const reconnectEl = $('#reconnect');
+ const reconnectAlert = $('#reconnect-alert');
if (!reconnectEl.hasClass('active')) {
reconnectEl.html('');
@@ -213,7 +213,7 @@ socket = window.socket;
function onEventBanned(data) {
require(['bootbox', 'translator'], function (bootbox, translator) {
- var message = data.until ?
+ const message = data.until ?
translator.compile('error:user-banned-reason-until', (new Date(data.until).toLocaleString()), data.reason) :
'[[error:user-banned-reason, ' + data.reason + ']]';
translator.translate(message, function (message) {
@@ -230,13 +230,15 @@ socket = window.socket;
}
function onEventUnbanned() {
- bootbox.alert({
- title: '[[global:alert.unbanned]]',
- message: '[[global:alert.unbanned.message]]',
- closeButton: false,
- callback: function () {
- window.location.href = config.relative_path + '/';
- },
+ require(['bootbox'], function (bootbox) {
+ bootbox.alert({
+ title: '[[global:alert.unbanned]]',
+ message: '[[global:alert.unbanned.message]]',
+ closeButton: false,
+ callback: function () {
+ window.location.href = config.relative_path + '/';
+ },
+ });
});
}
diff --git a/public/src/utils.js b/public/src/utils.js
index 92317a0154..684dd6b3ea 100644
--- a/public/src/utils.js
+++ b/public/src/utils.js
@@ -2,7 +2,7 @@
(function (factory) {
if (typeof module === 'object' && module.exports) {
- var winston = require('winston');
+ const winston = require('winston');
module.exports = factory(require('xregexp'), winston);
@@ -11,7 +11,7 @@
};
process.elapsedTimeSince = function (start) {
- var diff = process.hrtime(start);
+ const diff = process.hrtime(start);
return (diff[0] * 1e3) + (diff[1] / 1e6);
};
} else {
@@ -19,10 +19,10 @@
}
// eslint-disable-next-line
}(function (XRegExp, console) {
- var freeze = Object.freeze || function (obj) { return obj; };
+ const freeze = Object.freeze || function (obj) { return obj; };
// add default escape function for escaping HTML entities
- var escapeCharMap = freeze({
+ const escapeCharMap = freeze({
'&': '&',
'<': '<',
'>': '>',
@@ -34,9 +34,9 @@
function replaceChar(c) {
return escapeCharMap[c];
}
- var escapeChars = /[&<>"'`=]/g;
+ const escapeChars = /[&<>"'`=]/g;
- var HTMLEntities = freeze({
+ const HTMLEntities = freeze({
amp: '&',
gt: '>',
lt: '<',
@@ -292,12 +292,12 @@
'diams;': 9830,
});
- var utils = {
+ const utils = {
generateUUID: function () {
/* eslint-disable no-bitwise */
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
- var r = Math.random() * 16 | 0;
- var v = c === 'x' ? r : ((r & 0x3) | 0x8);
+ const r = Math.random() * 16 | 0;
+ const v = c === 'x' ? r : ((r & 0x3) | 0x8);
return v.toString(16);
});
/* eslint-enable no-bitwise */
@@ -312,8 +312,8 @@
return String.fromCharCode(parseInt(hex, 16));
})
.replace(/&([^;\W]+;?)/g, function (m, e) {
- var ee = e.replace(/;$/, '');
- var target = HTMLEntities[e] || (e.match(/;$/) && HTMLEntities[ee]);
+ const ee = e.replace(/;$/, '');
+ const target = HTMLEntities[e] || (e.match(/;$/) && HTMLEntities[ee]);
if (typeof target === 'number') {
return String.fromCharCode(target);
@@ -326,7 +326,7 @@
},
// https://github.com/jprichardson/string.js/blob/master/lib/string.js
stripHTMLTags: function (str, tags) {
- var pattern = (tags || ['']).join('|');
+ const pattern = (tags || ['']).join('|');
return String(str).replace(new RegExp('<(\\/)?(' + (pattern || '[^\\s>]+') + ')(\\s+[^<>]*?)?\\s*(\\/)?>', 'gi'), '');
},
@@ -340,7 +340,7 @@
tag = tag.replace(/\u202E/gi, '');
tag = tag.replace(/[,/#!$%^*;:{}=_`<>'"~()?|]/g, '');
tag = tag.substr(0, maxLength || 15).trim();
- var matches = tag.match(/^[.-]*(.+?)[.-]*$/);
+ const matches = tag.match(/^[.-]*(.+?)[.-]*$/);
if (matches && matches.length > 1) {
tag = matches[1];
}
@@ -373,7 +373,7 @@
return utils.languageKeyRegex.test(input);
},
userLangToTimeagoCode: function (userLang) {
- var mapping = {
+ const mapping = {
'en-GB': 'en',
'en-US': 'en',
'fa-IR': 'fa',
@@ -384,13 +384,13 @@
},
// shallow objects merge
merge: function () {
- var result = {};
- var obj;
- var keys;
- for (var i = 0; i < arguments.length; i += 1) {
+ const result = {};
+ let obj;
+ let keys;
+ for (let i = 0; i < arguments.length; i += 1) {
obj = arguments[i] || {};
keys = Object.keys(obj);
- for (var j = 0; j < keys.length; j += 1) {
+ for (let j = 0; j < keys.length; j += 1) {
result[keys[j]] = obj[keys[j]];
}
}
@@ -441,11 +441,11 @@
},
promiseParallel: function (obj) {
- var keys = Object.keys(obj);
+ const keys = Object.keys(obj);
return Promise.all(
keys.map(function (k) { return obj[k]; })
).then(function (results) {
- var data = {};
+ const data = {};
keys.forEach(function (k, i) {
data[k] = results[i];
});
@@ -476,7 +476,7 @@
},
makeNumberHumanReadable: function (num) {
- var n = parseInt(num, 10);
+ const n = parseInt(num, 10);
if (!n) {
return num;
}
@@ -524,7 +524,7 @@
'map', 'mark', 'menu', 'meta', 'meter', 'nav', 'noframes', 'noscript', 'object', 'ol', 'optgroup', 'option',
'output', 'p', 'param', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select',
'small', 'source', 'span', 'strike', 'strong', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot',
- 'th', 'thead', 'time', 'title', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr'],
+ 'th', 'thead', 'time', 'title', 'tr', 'track', 'tt', 'u', 'ul', 'const', 'video', 'wbr'],
stripTags: ['abbr', 'acronym', 'address', 'applet', 'area', 'article', 'aside', 'audio', 'base', 'basefont',
'bdi', 'bdo', 'big', 'blink', 'body', 'button', 'canvas', 'caption', 'center', 'cite', 'code', 'col', 'colgroup',
@@ -534,7 +534,7 @@
'map', 'mark', 'marquee', 'menu', 'meta', 'meter', 'nav', 'noframes', 'noscript', 'object', 'ol', 'optgroup', 'option',
'output', 'param', 'pre', 'progress', 'q', 'rp', 'rt', 'ruby', 's', 'samp', 'script', 'section', 'select',
'source', 'span', 'strike', 'style', 'sub', 'summary', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot',
- 'th', 'thead', 'time', 'title', 'tr', 'track', 'tt', 'u', 'ul', 'var', 'video', 'wbr'],
+ 'th', 'thead', 'time', 'title', 'tr', 'track', 'tt', 'u', 'ul', 'const', 'video', 'wbr'],
escapeRegexChars: function (text) {
return text.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, '\\$&');
@@ -553,7 +553,7 @@
isAndroidBrowser: function () {
// http://stackoverflow.com/questions/9286355/how-to-detect-only-the-native-android-browser
- var nua = navigator.userAgent;
+ const nua = navigator.userAgent;
return ((nua.indexOf('Mozilla/5.0') > -1 && nua.indexOf('Android ') > -1 && nua.indexOf('AppleWebKit') > -1) && !(nua.indexOf('Chrome') > -1));
},
@@ -563,13 +563,13 @@
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'];
- var $el = $('');
+ const envs = ['xs', 'sm', 'md', 'lg'];
+ const $el = $('
');
$el.appendTo($('body'));
- for (var i = envs.length - 1; i >= 0; i -= 1) {
- var env = envs[i];
+ for (let i = envs.length - 1; i >= 0; i -= 1) {
+ const env = envs[i];
$el.addClass('hidden-' + env);
if ($el.is(':hidden')) {
@@ -580,18 +580,18 @@
},
isMobile: function () {
- var env = utils.findBootstrapEnvironment();
+ const env = utils.findBootstrapEnvironment();
return ['xs', 'sm'].some(function (targetEnv) {
return targetEnv === env;
});
},
getHoursArray: function () {
- var currentHour = new Date().getHours();
- var labels = [];
+ const currentHour = new Date().getHours();
+ const labels = [];
- for (var i = currentHour, ii = currentHour - 24; i > ii; i -= 1) {
- var hour = i < 0 ? 24 + i : i;
+ for (let i = currentHour, ii = currentHour - 24; i > ii; i -= 1) {
+ const hour = i < 0 ? 24 + i : i;
labels.push(hour + ':00');
}
@@ -599,12 +599,12 @@
},
getDaysArray: function (from, amount) {
- var currentDay = new Date(parseInt(from, 10) || Date.now()).getTime();
- var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
- var labels = [];
- var tmpDate;
+ const currentDay = new Date(parseInt(from, 10) || Date.now()).getTime();
+ const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
+ const labels = [];
+ let tmpDate;
- for (var x = (amount || 30) - 1; x >= 0; x -= 1) {
+ for (let x = (amount || 30) - 1; x >= 0; x -= 1) {
tmpDate = new Date(currentDay - (1000 * 60 * 60 * 24 * x));
labels.push(months[tmpDate.getMonth()] + ' ' + tmpDate.getDate());
}
@@ -619,7 +619,7 @@
el = el[0];
}
- var rect = el.getBoundingClientRect();
+ const rect = el.getBoundingClientRect();
return (
rect.top >= 0 &&
@@ -631,26 +631,26 @@
// get all the url params in a single key/value hash
params: function (options) {
- var hash = {};
+ const hash = {};
options = options || {};
options.skipToType = options.skipToType || {};
- var searchStr = window.location.search;
+ let searchStr = window.location.search;
if (options.hasOwnProperty('url')) {
if (options.url) {
- var a = utils.urlToLocation(options.url);
+ const a = utils.urlToLocation(options.url);
searchStr = a ? a.search : '';
} else {
searchStr = '';
}
}
- var params = searchStr.substring(1).split('&');
+ const params = searchStr.substring(1).split('&');
params.forEach(function (param) {
- var val = param.split('=');
- var key = decodeURI(val[0]);
- var value = (
+ const val = param.split('=');
+ let key = decodeURI(val[0]);
+ const value = (
options.disableToType ||
options.skipToType[key] ? decodeURI(val[1]) : utils.toType(decodeURI(val[1]))
);
@@ -677,7 +677,7 @@
},
urlToLocation: function (url) {
- var a = document.createElement('a');
+ const a = document.createElement('a');
a.href = url;
return a;
},
@@ -685,11 +685,11 @@
// return boolean if string 'true' or string 'false', or if a parsable string which is a number
// also supports JSON object and/or arrays parsing
toType: function (str) {
- var type = typeof str;
+ const type = typeof str;
if (type !== 'string') {
return str;
}
- var nb = parseFloat(str);
+ const nb = parseFloat(str);
if (!isNaN(nb) && isFinite(str)) {
return nb;
}
@@ -719,15 +719,15 @@
if (props == null) {
return undefined;
}
- var i = props.indexOf('.');
+ const i = props.indexOf('.');
if (i === -1) {
if (value !== undefined) {
obj[props] = value;
}
return obj[props];
}
- var prop = props.slice(0, i);
- var newProps = props.slice(i + 1);
+ const prop = props.slice(0, i);
+ const newProps = props.slice(i + 1);
if (props !== undefined && !(obj[prop] instanceof Object)) {
obj[prop] = {};
@@ -753,17 +753,17 @@
debounce: function (func, wait, immediate) {
// modified from https://davidwalsh.name/javascript-debounce-function
- var timeout;
+ let timeout;
return function () {
- var context = this;
- var args = arguments;
- var later = function () {
+ const context = this;
+ const args = arguments;
+ const later = function () {
timeout = null;
if (!immediate) {
func.apply(context, args);
}
};
- var callNow = immediate && !timeout;
+ const callNow = immediate && !timeout;
clearTimeout(timeout);
timeout = setTimeout(later, wait);
if (callNow) {
@@ -772,17 +772,17 @@
};
},
throttle: function (func, wait, immediate) {
- var timeout;
+ let timeout;
return function () {
- var context = this;
- var args = arguments;
- var later = function () {
+ const context = this;
+ const args = arguments;
+ const later = function () {
timeout = null;
if (!immediate) {
func.apply(context, args);
}
};
- var callNow = immediate && !timeout;
+ const callNow = immediate && !timeout;
if (!timeout) {
timeout = setTimeout(later, wait);
}
diff --git a/public/src/widgets.js b/public/src/widgets.js
index a23155e56e..95eaf2f888 100644
--- a/public/src/widgets.js
+++ b/public/src/widgets.js
@@ -8,16 +8,16 @@
return;
}
- var locations = Object.keys(ajaxify.data.widgets);
+ const locations = Object.keys(ajaxify.data.widgets);
locations.forEach(function (location) {
- var area = $('#content [widget-area="' + location + '"],#content [data-widget-area="' + location + '"]').eq(0);
+ let area = $('#content [widget-area="' + location + '"],#content [data-widget-area="' + location + '"]').eq(0);
if (area.length) {
return;
}
- var widgetsAtLocation = ajaxify.data.widgets[location] || [];
- var html = '';
+ const widgetsAtLocation = ajaxify.data.widgets[location] || [];
+ let html = '';
widgetsAtLocation.forEach(function (widget) {
html += widget.html;
diff --git a/src/socket.io/plugins.js b/src/socket.io/plugins.js
index 7bb2f456bf..ac197c0024 100644
--- a/src/socket.io/plugins.js
+++ b/src/socket.io/plugins.js
@@ -7,7 +7,7 @@ const SocketPlugins = {};
How? From your plugin:
- var SocketPlugins = require.main.require('./src/socket.io/plugins');
+ const SocketPlugins = require.main.require('./src/socket.io/plugins');
SocketPlugins.myPlugin = {};
SocketPlugins.myPlugin.myMethod = function(socket, data, callback) { ... };