diff --git a/.jshintrc b/.jshintrc index bbbcd96dc3..37c22ddcf9 100644 --- a/.jshintrc +++ b/.jshintrc @@ -4,7 +4,7 @@ "maxerr" : 50, // {int} Maximum error before stopping - "esversion": 6, + "esversion": 9, // Enforcing "bitwise" : true, // true: Prohibit bitwise operators (&, |, ^, etc.) diff --git a/public/.jshintrc b/public/.jshintrc index 0b65b2f3db..6e93972469 100644 --- a/public/.jshintrc +++ b/public/.jshintrc @@ -1,6 +1,8 @@ { "maxerr" : 50, // {int} Maximum error before stopping + "esversion": 9, + // Enforcing "bitwise" : true, // true: Prohibit bitwise operators (&, |, ^, etc.) "camelcase" : false, // true: Identifiers must be in camelCase @@ -42,7 +44,7 @@ "evil" : false, // true: Tolerate use of `eval` and `new Function()` "expr" : false, // true: Tolerate `ExpressionStatement` as Programs "funcscope" : false, // true: Tolerate defining variables inside control statements" - "globalstrict" : false, // true: Allow global "use strict" (also enables 'strict') + "globalstrict" : true, // true: Allow global "use strict" (also enables 'strict') "iterator" : false, // true: Tolerate using the `__iterator__` property "lastsemic" : false, // true: Tolerate omitting a semicolon for the last statement of a 1-line block "laxbreak" : false, // true: Tolerate possibly unsafe line breakings @@ -66,7 +68,6 @@ "utils": true, "overrides": true, "componentHandler": true, - "bootbox": true, "templates": true, "Visibility": true, "Tinycon": true, diff --git a/public/src/admin/admin.js b/public/src/admin/admin.js index bdc6afb35f..ddcb52c284 100644 --- a/public/src/admin/admin.js +++ b/public/src/admin/admin.js @@ -20,12 +20,14 @@ } logoutTimer = setTimeout(function () { - bootbox.alert({ - closeButton: false, - message: logoutMessage, - callback: function () { - window.location.reload(); - }, + require(['bootbox'], function (bootbox) { + bootbox.alert({ + closeButton: false, + message: logoutMessage, + callback: function () { + window.location.reload(); + }, + }); }); }, 3600000); } @@ -141,22 +143,26 @@ function setupRestartLinks() { $('.rebuild-and-restart').off('click').on('click', function () { - bootbox.confirm('[[admin/admin:alert.confirm-rebuild-and-restart]]', function (confirm) { - if (confirm) { - require(['admin/modules/instance'], function (instance) { - instance.rebuildAndRestart(); - }); - } + require(['bootbox'], function (bootbox) { + bootbox.confirm('[[admin/admin:alert.confirm-rebuild-and-restart]]', function (confirm) { + if (confirm) { + require(['admin/modules/instance'], function (instance) { + instance.rebuildAndRestart(); + }); + } + }); }); }); $('.restart').off('click').on('click', function () { - bootbox.confirm('[[admin/admin:alert.confirm-restart]]', function (confirm) { - if (confirm) { - require(['admin/modules/instance'], function (instance) { - instance.restart(); - }); - } + require(['bootbox'], function (bootbox) { + bootbox.confirm('[[admin/admin:alert.confirm-restart]]', function (confirm) { + if (confirm) { + require(['admin/modules/instance'], function (instance) { + instance.restart(); + }); + } + }); }); }); } diff --git a/public/src/admin/advanced/errors.js b/public/src/admin/advanced/errors.js index 6356d5690b..2a776bc103 100644 --- a/public/src/admin/advanced/errors.js +++ b/public/src/admin/advanced/errors.js @@ -1,7 +1,7 @@ 'use strict'; -define('admin/advanced/errors', ['Chart'], function (Chart) { +define('admin/advanced/errors', ['bootbox', 'Chart'], function (bootbox, Chart) { var Errors = {}; Errors.init = function () { diff --git a/public/src/admin/appearance/themes.js b/public/src/admin/appearance/themes.js index 94510fd248..b0b60d9535 100644 --- a/public/src/admin/appearance/themes.js +++ b/public/src/admin/appearance/themes.js @@ -1,7 +1,7 @@ 'use strict'; -define('admin/appearance/themes', ['translator'], function (translator) { +define('admin/appearance/themes', ['bootbox', 'translator'], function (bootbox, translator) { var Themes = {}; Themes.init = function () { diff --git a/public/src/admin/dashboard.js b/public/src/admin/dashboard.js index 548e1fe996..7406170220 100644 --- a/public/src/admin/dashboard.js +++ b/public/src/admin/dashboard.js @@ -1,7 +1,7 @@ 'use strict'; -define('admin/dashboard', ['Chart', 'translator', 'benchpress'], function (Chart, translator, Benchpress) { +define('admin/dashboard', ['Chart', 'translator', 'benchpress', 'bootbox'], function (Chart, translator, Benchpress, bootbox) { var Admin = {}; var intervals = { rooms: false, diff --git a/public/src/admin/extend/plugins.js b/public/src/admin/extend/plugins.js index b51e8e4189..a81de5cb7a 100644 --- a/public/src/admin/extend/plugins.js +++ b/public/src/admin/extend/plugins.js @@ -4,8 +4,9 @@ define('admin/extend/plugins', [ 'translator', 'benchpress', + 'bootbox', 'jquery-ui/widgets/sortable', -], function (translator, Benchpress) { +], function (translator, Benchpress, bootbox) { var Plugins = {}; Plugins.init = function () { var pluginsList = $('.plugins'); diff --git a/public/src/admin/extend/widgets.js b/public/src/admin/extend/widgets.js index 5660cc8f05..31e051a09c 100644 --- a/public/src/admin/extend/widgets.js +++ b/public/src/admin/extend/widgets.js @@ -2,11 +2,12 @@ define('admin/extend/widgets', [ + 'bootbox', 'jquery-ui/widgets/sortable', 'jquery-ui/widgets/draggable', 'jquery-ui/widgets/droppable', 'jquery-ui/widgets/datepicker', -], function () { +], function (bootbox) { var Widgets = {}; Widgets.init = function () { diff --git a/public/src/admin/manage/category.js b/public/src/admin/manage/category.js index 1873d4de7a..336cdacb98 100644 --- a/public/src/admin/manage/category.js +++ b/public/src/admin/manage/category.js @@ -6,7 +6,8 @@ define('admin/manage/category', [ 'categorySelector', 'benchpress', 'api', -], function (uploader, iconSelect, categorySelector, Benchpress, api) { + 'bootbox', +], function (uploader, iconSelect, categorySelector, Benchpress, api, bootbox) { var Category = {}; var updateHash = {}; diff --git a/public/src/admin/manage/digest.js b/public/src/admin/manage/digest.js index 3b07918277..85876517dd 100644 --- a/public/src/admin/manage/digest.js +++ b/public/src/admin/manage/digest.js @@ -1,7 +1,7 @@ 'use strict'; -define('admin/manage/digest', function () { +define('admin/manage/digest', ['bootbox'], function (bootbox) { var Digest = {}; Digest.init = function () { diff --git a/public/src/admin/manage/group.js b/public/src/admin/manage/group.js index c7fb51d6ae..c873dc40b4 100644 --- a/public/src/admin/manage/group.js +++ b/public/src/admin/manage/group.js @@ -8,7 +8,8 @@ define('admin/manage/group', [ 'groupSearch', 'slugify', 'api', -], function (memberList, iconSelect, translator, categorySelector, groupSearch, slugify, api) { + 'bootbox', +], function (memberList, iconSelect, translator, categorySelector, groupSearch, slugify, api, bootbox) { var Groups = {}; Groups.init = function () { diff --git a/public/src/admin/manage/groups.js b/public/src/admin/manage/groups.js index 8a812e8897..9dbb204419 100644 --- a/public/src/admin/manage/groups.js +++ b/public/src/admin/manage/groups.js @@ -4,7 +4,8 @@ define('admin/manage/groups', [ 'categorySelector', 'slugify', 'api', -], function (categorySelector, slugify, api) { + 'bootbox', +], function (categorySelector, slugify, api, bootbox) { var Groups = {}; Groups.init = function () { diff --git a/public/src/admin/manage/registration.js b/public/src/admin/manage/registration.js index 08f8b6722b..1b0f80875b 100644 --- a/public/src/admin/manage/registration.js +++ b/public/src/admin/manage/registration.js @@ -1,7 +1,7 @@ 'use strict'; -define('admin/manage/registration', function () { +define('admin/manage/registration', ['bootbox'], function (bootbox) { var Registration = {}; Registration.init = function () { diff --git a/public/src/admin/manage/tags.js b/public/src/admin/manage/tags.js index 0fb7dbf39f..d2a4817158 100644 --- a/public/src/admin/manage/tags.js +++ b/public/src/admin/manage/tags.js @@ -2,9 +2,10 @@ define('admin/manage/tags', [ + 'bootbox', 'forum/infinitescroll', 'admin/modules/selectable', -], function (infinitescroll, selectable) { +], function (bootbox, infinitescroll, selectable) { var Tags = {}; Tags.init = function () { diff --git a/public/src/admin/modules/dashboard-line-graph.js b/public/src/admin/modules/dashboard-line-graph.js index ac53497ce7..246bbbe39d 100644 --- a/public/src/admin/modules/dashboard-line-graph.js +++ b/public/src/admin/modules/dashboard-line-graph.js @@ -1,6 +1,6 @@ 'use strict'; -define('admin/modules/dashboard-line-graph', ['Chart', 'translator', 'benchpress', 'api', 'hooks'], function (Chart, translator, Benchpress, api, hooks) { +define('admin/modules/dashboard-line-graph', ['Chart', 'translator', 'benchpress', 'api', 'hooks', 'bootbox'], function (Chart, translator, Benchpress, api, hooks, bootbox) { const Graph = { _current: null, }; diff --git a/public/src/ajaxify.js b/public/src/ajaxify.js index 2ee4836fb6..bafdff456a 100644 --- a/public/src/ajaxify.js +++ b/public/src/ajaxify.js @@ -545,11 +545,13 @@ $(document).ready(function () { return; } - bootbox.confirm('[[global:unsaved-changes]]', function (navigate) { - if (navigate) { - app.flags._unsaved = false; - process.call(_self); - } + require(['bootbox'], function (bootbox) { + bootbox.confirm('[[global:unsaved-changes]]', function (navigate) { + if (navigate) { + app.flags._unsaved = false; + process.call(_self); + } + }); }); return e.preventDefault(); } diff --git a/public/src/app.js b/public/src/app.js index a4c97f5f9a..ad153ed5db 100644 --- a/public/src/app.js +++ b/public/src/app.js @@ -217,13 +217,15 @@ app.cacheBuster = null; app.handleInvalidSession = function () { socket.disconnect(); app.logout(false); - bootbox.alert({ - title: '[[error:invalid-session]]', - message: '[[error:invalid-session-text]]', - closeButton: false, - callback: function () { - window.location.reload(); - }, + require(['bootbox'], function (bootbox) { + bootbox.alert({ + title: '[[error:invalid-session]]', + message: '[[error:invalid-session-text]]', + closeButton: false, + callback: function () { + window.location.reload(); + }, + }); }); }; @@ -233,13 +235,15 @@ app.cacheBuster = null; } socket.disconnect(); - bootbox.alert({ - title: '[[error:session-mismatch]]', - message: '[[error:session-mismatch-text]]', - closeButton: false, - callback: function () { - window.location.reload(); - }, + require(['bootbox'], function (bootbox) { + bootbox.alert({ + title: '[[error:session-mismatch]]', + message: '[[error:session-mismatch-text]]', + closeButton: false, + callback: function () { + window.location.reload(); + }, + }); }); }; @@ -434,10 +438,12 @@ app.cacheBuster = null; if (!isDnD) { return createChat(); } - bootbox.confirm('[[modules:chat.confirm-chat-with-dnd-user]]', function (ok) { - if (ok) { - createChat(); - } + require(['bootbox'], function (bootbox) { + bootbox.confirm('[[modules:chat.confirm-chat-with-dnd-user]]', function (ok) { + if (ok) { + createChat(); + } + }); }); }); }; diff --git a/public/src/client/account/edit.js b/public/src/client/account/edit.js index 5ccccd0730..dc22e3ca88 100644 --- a/public/src/client/account/edit.js +++ b/public/src/client/account/edit.js @@ -6,7 +6,8 @@ define('forum/account/edit', [ 'translator', 'api', 'hooks', -], function (header, picture, translator, api, hooks) { + 'bootbox', +], function (header, picture, translator, api, hooks, bootbox) { var AccountEdit = {}; AccountEdit.init = function () { diff --git a/public/src/client/account/header.js b/public/src/client/account/header.js index d7d04ebdd5..258e16246c 100644 --- a/public/src/client/account/header.js +++ b/public/src/client/account/header.js @@ -9,7 +9,8 @@ define('forum/account/header', [ 'benchpress', 'accounts/delete', 'api', -], function (coverPhoto, pictureCropper, components, translator, Benchpress, AccountsDelete, api) { + 'bootbox', +], function (coverPhoto, pictureCropper, components, translator, Benchpress, AccountsDelete, api, bootbox) { var AccountHeader = {}; var isAdminOrSelfOrGlobalMod; diff --git a/public/src/client/chats.js b/public/src/client/chats.js index de1f74763c..eedf23cfc0 100644 --- a/public/src/client/chats.js +++ b/public/src/client/chats.js @@ -11,7 +11,12 @@ define('forum/chats', [ 'benchpress', 'composer/autocomplete', 'hooks', -], function (components, translator, mousetrap, recentChats, search, messages, Benchpress, autocomplete, hooks) { + 'bootbox', +], function ( + components, translator, mousetrap, + recentChats, search, messages, Benchpress, + autocomplete, hooks, bootbox +) { var Chats = { initialised: false, }; diff --git a/public/src/client/chats/messages.js b/public/src/client/chats/messages.js index 29ab113e9b..7a743ce761 100644 --- a/public/src/client/chats/messages.js +++ b/public/src/client/chats/messages.js @@ -1,7 +1,7 @@ 'use strict'; -define('forum/chats/messages', ['components', 'translator', 'benchpress', 'hooks'], function (components, translator, Benchpress, hooks) { +define('forum/chats/messages', ['components', 'translator', 'benchpress', 'hooks', 'bootbox'], function (components, translator, Benchpress, hooks, bootbox) { var messages = {}; messages.sendMessage = function (roomId, inputEl) { diff --git a/public/src/client/flags/detail.js b/public/src/client/flags/detail.js index b43c7bcc5d..2dfb46eac8 100644 --- a/public/src/client/flags/detail.js +++ b/public/src/client/flags/detail.js @@ -1,6 +1,6 @@ 'use strict'; -define('forum/flags/detail', ['forum/flags/list', 'components', 'translator', 'benchpress', 'forum/account/header', 'accounts/delete', 'api'], function (FlagsList, components, translator, Benchpress, AccountHeader, AccountsDelete, api) { +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 = {}; Detail.init = function () { diff --git a/public/src/client/groups/details.js b/public/src/client/groups/details.js index 531c62532e..73322e2d1d 100644 --- a/public/src/client/groups/details.js +++ b/public/src/client/groups/details.js @@ -10,6 +10,7 @@ define('forum/groups/details', [ 'api', 'slugify', 'categorySelector', + 'bootbox', ], function ( memberList, iconSelect, @@ -19,7 +20,8 @@ define('forum/groups/details', [ translator, api, slugify, - categorySelector + categorySelector, + bootbox ) { var Details = {}; var groupName; diff --git a/public/src/client/groups/list.js b/public/src/client/groups/list.js index abfae6716d..e0a8ed10d4 100644 --- a/public/src/client/groups/list.js +++ b/public/src/client/groups/list.js @@ -1,8 +1,8 @@ 'use strict'; define('forum/groups/list', [ - 'forum/infinitescroll', 'benchpress', 'api', -], function (infinitescroll, Benchpress, api) { + 'forum/infinitescroll', 'benchpress', 'api', 'bootbox', +], function (infinitescroll, Benchpress, api, bootbox) { var Groups = {}; Groups.init = function () { diff --git a/public/src/client/groups/memberlist.js b/public/src/client/groups/memberlist.js index 679f270cbc..70863999e7 100644 --- a/public/src/client/groups/memberlist.js +++ b/public/src/client/groups/memberlist.js @@ -1,6 +1,6 @@ 'use strict'; -define('forum/groups/memberlist', ['api'], function (api) { +define('forum/groups/memberlist', ['api', 'bootbox'], function (api, bootbox) { var MemberList = {}; var searchInterval; var groupName; diff --git a/public/src/client/ip-blacklist.js b/public/src/client/ip-blacklist.js index cf4a7c12b9..1d5cd4a16f 100644 --- a/public/src/client/ip-blacklist.js +++ b/public/src/client/ip-blacklist.js @@ -1,7 +1,7 @@ 'use strict'; -define('forum/ip-blacklist', ['Chart', 'benchpress'], function (Chart, Benchpress) { +define('forum/ip-blacklist', ['Chart', 'benchpress', 'bootbox'], function (Chart, Benchpress, bootbox) { var Blacklist = {}; Blacklist.init = function () { diff --git a/public/src/client/pagination.js b/public/src/client/pagination.js index 543f7534b7..69d0294573 100644 --- a/public/src/client/pagination.js +++ b/public/src/client/pagination.js @@ -1,7 +1,7 @@ 'use strict'; -define('forum/pagination', function () { +define('forum/pagination', ['bootbox'], function (bootbox) { var pagination = {}; pagination.init = function () { diff --git a/public/src/client/register.js b/public/src/client/register.js index 068ba9a6ed..e0bf74b86a 100644 --- a/public/src/client/register.js +++ b/public/src/client/register.js @@ -2,8 +2,8 @@ define('forum/register', [ - 'translator', 'zxcvbn', 'slugify', 'api', 'forum/login', 'jquery-form', -], function (translator, zxcvbn, slugify, api, Login) { + 'translator', 'zxcvbn', 'slugify', 'api', 'bootbox', 'forum/login', 'jquery-form', +], function (translator, zxcvbn, slugify, api, bootbox, Login) { var Register = {}; var validationError = false; var successIcon = ''; diff --git a/public/src/client/topic/threadTools.js b/public/src/client/topic/threadTools.js index 0dcf444c2a..d7276ced56 100644 --- a/public/src/client/topic/threadTools.js +++ b/public/src/client/topic/threadTools.js @@ -8,7 +8,8 @@ define('forum/topic/threadTools', [ 'forum/topic/posts', 'api', 'hooks', -], function (components, translator, handleBack, posts, api, hooks) { + 'bootbox', +], function (components, translator, handleBack, posts, api, hooks, bootbox) { var ThreadTools = {}; ThreadTools.init = function (tid, topicContainer) { diff --git a/public/src/client/topic/votes.js b/public/src/client/topic/votes.js index 797d27dee4..1a707e37cd 100644 --- a/public/src/client/topic/votes.js +++ b/public/src/client/topic/votes.js @@ -2,8 +2,8 @@ define('forum/topic/votes', [ - 'components', 'translator', 'benchpress', 'api', 'hooks', -], function (components, translator, Benchpress, api, hooks) { + 'components', 'translator', 'benchpress', 'api', 'hooks', 'bootbox', +], function (components, translator, Benchpress, api, hooks, bootbox) { var Votes = {}; Votes.addVoteHandler = function () { diff --git a/public/src/modules/accounts/delete.js b/public/src/modules/accounts/delete.js index 1b79634de0..831867fe3c 100644 --- a/public/src/modules/accounts/delete.js +++ b/public/src/modules/accounts/delete.js @@ -1,6 +1,6 @@ 'use strict'; -define('accounts/delete', ['api', 'bootbox'], function (api) { +define('accounts/delete', ['api', 'bootbox'], function (api, bootbox) { var Delete = {}; Delete.account = function (uid, callback) { diff --git a/public/src/modules/accounts/picture.js b/public/src/modules/accounts/picture.js index 3893f2e27a..7e853a9e8f 100644 --- a/public/src/modules/accounts/picture.js +++ b/public/src/modules/accounts/picture.js @@ -3,7 +3,8 @@ define('accounts/picture', [ 'pictureCropper', 'api', -], (pictureCropper, api) => { + 'bootbox', +], (pictureCropper, api, bootbox) => { const Picture = {}; Picture.openChangeModal = () => { diff --git a/public/src/modules/iconSelect.js b/public/src/modules/iconSelect.js index 17530cd05d..1b2ea1699a 100644 --- a/public/src/modules/iconSelect.js +++ b/public/src/modules/iconSelect.js @@ -1,7 +1,7 @@ 'use strict'; -define('iconSelect', ['benchpress'], function (Benchpress) { +define('iconSelect', ['benchpress', 'bootbox'], function (Benchpress, bootbox) { var iconSelect = {}; iconSelect.init = function (el, onModified) { diff --git a/public/src/modules/settings/sorted-list.js b/public/src/modules/settings/sorted-list.js index 806c6b148f..a33dec9b82 100644 --- a/public/src/modules/settings/sorted-list.js +++ b/public/src/modules/settings/sorted-list.js @@ -2,9 +2,10 @@ define('settings/sorted-list', [ 'benchpress', + 'bootbox', 'hooks', 'jquery-ui/widgets/sortable', -], function (benchpress, hooks) { +], function (benchpress, bootbox, hooks) { var SortedList; var Settings; diff --git a/public/src/sockets.js b/public/src/sockets.js index b3bc6795ee..31fa1e8958 100644 --- a/public/src/sockets.js +++ b/public/src/sockets.js @@ -212,7 +212,7 @@ socket = window.socket; } function onEventBanned(data) { - require(['translator'], function (translator) { + require(['bootbox', 'translator'], function (bootbox, translator) { var message = data.until ? translator.compile('error:user-banned-reason-until', (new Date(data.until).toLocaleString()), data.reason) : '[[error:user-banned-reason, ' + data.reason + ']]';