Feat: Client-side hooks - replace window.trigger (#9679)

* feat/clientside-hooks: replace window.trigger with hooks.fire

* feat(clientside-hooks): Move hooks require to the top

* fix: simplifying complex logical expression

* fix: client-side hook for translator - post-review fixes
v1.18.x
Anton Grigoryev 4 years ago committed by GitHub
parent a850dd2e34
commit 342503e07a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,7 +1,7 @@
'use strict'; 'use strict';
define('admin/settings', ['uploader', 'mousetrap'], function (uploader, mousetrap) { define('admin/settings', ['uploader', 'mousetrap', 'hooks'], function (uploader, mousetrap, hooks) {
var Settings = {}; var Settings = {};
Settings.populateTOC = function () { Settings.populateTOC = function () {
@ -87,7 +87,7 @@ define('admin/settings', ['uploader', 'mousetrap'], function (uploader, mousetra
type: 'success', type: 'success',
}); });
$(window).trigger('action:admin.settingsSaved'); hooks.fire('action:admin.settingsSaved');
}); });
}); });
@ -111,7 +111,7 @@ define('admin/settings', ['uploader', 'mousetrap'], function (uploader, mousetra
} }
setTimeout(function () { setTimeout(function () {
$(window).trigger('action:admin.settingsLoaded'); hooks.fire('action:admin.settingsLoaded');
}, 0); }, 0);
}; };

@ -92,7 +92,7 @@ ajaxify = window.ajaxify || {};
var url = ajaxify.start(window.location.pathname.slice(1) + window.location.search + window.location.hash); var url = ajaxify.start(window.location.pathname.slice(1) + window.location.search + window.location.hash);
ajaxify.updateHistory(url, true); ajaxify.updateHistory(url, true);
ajaxify.end(url, ajaxify.data.template.name); ajaxify.end(url, ajaxify.data.template.name);
$(window).trigger('action:ajaxify.coldLoad'); hooks.fire('action:ajaxify.coldLoad');
}; };
ajaxify.isCold = function () { ajaxify.isCold = function () {
@ -179,7 +179,7 @@ ajaxify = window.ajaxify || {};
} }
function renderTemplate(url, tpl_url, data, callback) { function renderTemplate(url, tpl_url, data, callback) {
$(window).trigger('action:ajaxify.loadingTemplates', {}); hooks.fire('action:ajaxify.loadingTemplates', {});
require(['translator', 'benchpress'], function (translator, Benchpress) { require(['translator', 'benchpress'], function (translator, Benchpress) {
Benchpress.render(tpl_url, data) Benchpress.render(tpl_url, data)
.then(rendered => translator.translate(rendered)) .then(rendered => translator.translate(rendered))
@ -215,7 +215,7 @@ ajaxify = window.ajaxify || {};
// Allow translation strings in title on ajaxify (#5927) // Allow translation strings in title on ajaxify (#5927)
title = translator.unescape(title); title = translator.unescape(title);
var data = { title: title }; var data = { title: title };
$(window).trigger('action:ajaxify.updateTitle', data); hooks.fire('action:ajaxify.updateTitle', data);
translator.translate(data.title, function (translated) { translator.translate(data.title, function (translated) {
window.document.title = $('<div></div>').html(translated).text(); window.document.title = $('<div></div>').html(translated).text();
}); });
@ -299,7 +299,7 @@ ajaxify = window.ajaxify || {};
}); });
ajaxify.widgets.render(tpl_url); ajaxify.widgets.render(tpl_url);
$(window).trigger('action:ajaxify.contentLoaded', { url: url, tpl: tpl_url }); hooks.fire('action:ajaxify.contentLoaded', { url: url, tpl: tpl_url });
app.processPage(); app.processPage();
}; };
@ -379,7 +379,7 @@ ajaxify = window.ajaxify || {};
ajaxify.loadData = function (url, callback) { ajaxify.loadData = function (url, callback) {
url = ajaxify.removeRelativePath(url); url = ajaxify.removeRelativePath(url);
$(window).trigger('action:ajaxify.loadingData', { url: url }); hooks.fire('action:ajaxify.loadingData', { url: url });
apiXHR = $.ajax({ apiXHR = $.ajax({
url: config.relative_path + '/api/' + url, url: config.relative_path + '/api/' + url,
@ -405,7 +405,7 @@ ajaxify = window.ajaxify || {};
ajaxify.data = data; ajaxify.data = data;
data.config = config; data.config = config;
$(window).trigger('action:ajaxify.dataLoaded', { url: url, data: data }); hooks.fire('action:ajaxify.dataLoaded', { url: url, data: data });
callback(null, data); callback(null, data);
}, },
@ -440,6 +440,11 @@ ajaxify = window.ajaxify || {};
}()); }());
$(document).ready(function () { $(document).ready(function () {
var hooks;
require(['hooks'], function (_hooks) {
hooks = _hooks;
});
$(window).on('popstate', function (ev) { $(window).on('popstate', function (ev) {
ev = ev.originalEvent; ev = ev.originalEvent;
@ -450,7 +455,7 @@ $(document).ready(function () {
}, ev.state.returnPath, config.relative_path + '/' + ev.state.returnPath); }, ev.state.returnPath, config.relative_path + '/' + ev.state.returnPath);
} else if (ev.state.url !== undefined) { } else if (ev.state.url !== undefined) {
ajaxify.go(ev.state.url, function () { ajaxify.go(ev.state.url, function () {
$(window).trigger('action:popstate', { url: ev.state.url }); hooks.fire('action:popstate', { url: ev.state.url });
}, true); }, true);
} }
} }

@ -18,6 +18,11 @@ app.cacheBuster = null;
app.cacheBuster = config['cache-buster']; app.cacheBuster = config['cache-buster'];
var hooks;
require(['hooks'], function (_hooks) {
hooks = _hooks;
});
$(document).ready(function () { $(document).ready(function () {
ajaxify.parseData(); ajaxify.parseData();
app.load(); app.load();
@ -117,7 +122,7 @@ app.cacheBuster = null;
unread.initUnreadTopics(); unread.initUnreadTopics();
} }
function finishLoad() { function finishLoad() {
$(window).trigger('action:app.load'); hooks.fire('action:app.load');
app.showMessages(); app.showMessages();
appLoaded = true; appLoaded = true;
} }
@ -146,7 +151,7 @@ app.cacheBuster = null;
app.logout = function (redirect) { app.logout = function (redirect) {
redirect = redirect === undefined ? true : redirect; redirect = redirect === undefined ? true : redirect;
$(window).trigger('action:app.logout'); hooks.fire('action:app.logout');
$.ajax(config.relative_path + '/logout', { $.ajax(config.relative_path + '/logout', {
type: 'POST', type: 'POST',
@ -157,7 +162,7 @@ app.cacheBuster = null;
app.flags._logout = true; app.flags._logout = true;
}, },
success: function (data) { success: function (data) {
$(window).trigger('action:app.loggedOut', data); hooks.fire('action:app.loggedOut', data);
if (redirect) { if (redirect) {
if (data.next) { if (data.next) {
window.location.href = data.next; window.location.href = data.next;
@ -513,7 +518,7 @@ app.cacheBuster = null;
quickSearchResults.removeClass('hidden').find('.quick-search-results-container').html(''); quickSearchResults.removeClass('hidden').find('.quick-search-results-container').html('');
quickSearchResults.find('.loading-indicator').removeClass('hidden'); quickSearchResults.find('.loading-indicator').removeClass('hidden');
$(window).trigger('action:search.quick.start', options); hooks.fire('action:search.quick.start', options);
options.searchOptions.searchOnly = 1; options.searchOptions.searchOnly = 1;
search.api(options.searchOptions, function (data) { search.api(options.searchOptions, function (data) {
quickSearchResults.find('.loading-indicator').addClass('hidden'); quickSearchResults.find('.loading-indicator').addClass('hidden');
@ -538,7 +543,7 @@ app.cacheBuster = null;
'.quick-search-results .quick-search-title, .quick-search-results .snippet' '.quick-search-results .quick-search-title, .quick-search-results .snippet'
); );
search.highlightMatches(options.searchOptions.term, highlightEls); search.highlightMatches(options.searchOptions.term, highlightEls);
$(window).trigger('action:search.quick.complete', { hooks.fire('action:search.quick.complete', {
data: data, data: data,
options: options, options: options,
}); });
@ -658,7 +663,7 @@ app.cacheBuster = null;
require(['search'], function (search) { require(['search'], function (search) {
var data = search.getSearchPreferences(); var data = search.getSearchPreferences();
data.term = input.val(); data.term = input.val();
$(window).trigger('action:search.submit', { hooks.fire('action:search.submit', {
searchOptions: data, searchOptions: data,
searchElements: searchElements, searchElements: searchElements,
}); });
@ -711,7 +716,7 @@ app.cacheBuster = null;
}; };
app.newTopic = function (cid, tags) { app.newTopic = function (cid, tags) {
$(window).trigger('action:composer.topic.new', { hooks.fire('action:composer.topic.new', {
cid: cid || ajaxify.data.cid || 0, cid: cid || ajaxify.data.cid || 0,
tags: tags || (ajaxify.data.tag ? [ajaxify.data.tag] : []), tags: tags || (ajaxify.data.tag ? [ajaxify.data.tag] : []),
}); });

@ -3,7 +3,8 @@
define('forum/account/blocks', [ define('forum/account/blocks', [
'forum/account/header', 'forum/account/header',
'api', 'api',
], function (header, api) { 'hooks',
], function (header, api, hooks) {
var Blocks = {}; var Blocks = {};
Blocks.init = function () { Blocks.init = function () {
@ -54,7 +55,7 @@ define('forum/account/blocks', [
$('#users-container').html(html); $('#users-container').html(html);
$('#users-container').siblings('div.alert')[html.length ? 'hide' : 'show'](); $('#users-container').siblings('div.alert')[html.length ? 'hide' : 'show']();
}); });
$(window).trigger('action:user.blocks.toggle', { data: payload }); hooks.fire('action:user.blocks.toggle', { data: payload });
}) })
.fail(function () { .fail(function () {
ajaxify.go(ajaxify.currentPage); ajaxify.go(ajaxify.currentPage);

@ -1,7 +1,11 @@
'use strict'; 'use strict';
define('forum/account/topics', ['forum/account/header', 'forum/infinitescroll'], function (header, infinitescroll) { define('forum/account/topics', [
'forum/account/header',
'forum/infinitescroll',
'hooks',
], function (header, infinitescroll, hooks) {
var AccountTopics = {}; var AccountTopics = {};
var template; var template;
@ -44,7 +48,7 @@ define('forum/account/topics', ['forum/account/header', 'forum/infinitescroll'],
html.find('.timeago').timeago(); html.find('.timeago').timeago();
app.createUserTooltips(); app.createUserTooltips();
utils.makeNumbersHumanReadable(html.find('.human-readable-number')); utils.makeNumbersHumanReadable(html.find('.human-readable-number'));
$(window).trigger('action:topics.loaded', { topics: topics }); hooks.fire('action:topics.loaded', { topics: topics });
callback(); callback();
}); });
} }

@ -7,7 +7,8 @@ define('forum/category', [
'topicList', 'topicList',
'sort', 'sort',
'categorySelector', 'categorySelector',
], function (infinitescroll, share, navigator, topicList, sort, categorySelector) { 'hooks',
], function (infinitescroll, share, navigator, topicList, sort, categorySelector, hooks) {
var Category = {}; var Category = {};
$(window).on('action:ajaxify.start', function (ev, data) { $(window).on('action:ajaxify.start', function (ev, data) {
@ -47,8 +48,8 @@ define('forum/category', [
}, },
}); });
$(window).trigger('action:topics.loaded', { topics: ajaxify.data.topics }); hooks.fire('action:topics.loaded', { topics: ajaxify.data.topics });
$(window).trigger('action:category.loaded', { cid: ajaxify.data.cid }); hooks.fire('action:category.loaded', { cid: ajaxify.data.cid });
}; };
function handleScrollToTopicIndex() { function handleScrollToTopicIndex() {
@ -134,7 +135,7 @@ define('forum/category', [
function loadTopicsAfter(after, direction, callback) { function loadTopicsAfter(after, direction, callback) {
callback = callback || function () {}; callback = callback || function () {};
$(window).trigger('action:category.loading'); hooks.fire('action:category.loading');
var params = utils.params(); var params = utils.params();
infinitescroll.loadMore('categories.loadMore', { infinitescroll.loadMore('categories.loadMore', {
cid: ajaxify.data.cid, cid: ajaxify.data.cid,
@ -143,7 +144,7 @@ define('forum/category', [
query: params, query: params,
categoryTopicSort: config.categoryTopicSort, categoryTopicSort: config.categoryTopicSort,
}, function (data, done) { }, function (data, done) {
$(window).trigger('action:category.loaded'); hooks.fire('action:category.loaded');
callback(data, done); callback(data, done);
}); });
} }

@ -10,7 +10,8 @@ define('forum/chats', [
'forum/chats/messages', 'forum/chats/messages',
'benchpress', 'benchpress',
'composer/autocomplete', 'composer/autocomplete',
], function (components, translator, mousetrap, recentChats, search, messages, Benchpress, autocomplete) { 'hooks',
], function (components, translator, mousetrap, recentChats, search, messages, Benchpress, autocomplete, hooks) {
var Chats = { var Chats = {
initialised: false, initialised: false,
}; };
@ -35,7 +36,7 @@ define('forum/chats', [
} }
$(document).ready(function () { $(document).ready(function () {
$(window).trigger('action:chat.loaded', $('.chats-full')); hooks.fire('action:chat.loaded', $('.chats-full'));
}); });
Chats.initialised = true; Chats.initialised = true;
@ -384,7 +385,7 @@ define('forum/chats', [
}, },
}; };
$(window).trigger('chat:autocomplete:init', data); hooks.fire('chat:autocomplete:init', data);
if (data.strategies.length) { if (data.strategies.length) {
autocomplete.setup(data); autocomplete.setup(data);
} }
@ -429,7 +430,7 @@ define('forum/chats', [
ajaxify.data = payload; ajaxify.data = payload;
Chats.setActive(); Chats.setActive();
Chats.addEventListeners(); Chats.addEventListeners();
$(window).trigger('action:chat.loaded', $('.chats-full')); hooks.fire('action:chat.loaded', $('.chats-full'));
messages.scrollToBottom($('.expanded-chat ul.chat-content')); messages.scrollToBottom($('.expanded-chat ul.chat-content'));
if (history.pushState) { if (history.pushState) {
history.pushState({ history.pushState({

@ -1,7 +1,7 @@
'use strict'; 'use strict';
define('forum/chats/messages', ['components', 'translator', 'benchpress'], function (components, translator, Benchpress) { define('forum/chats/messages', ['components', 'translator', 'benchpress', 'hooks'], function (components, translator, Benchpress, hooks) {
var messages = {}; var messages = {};
messages.sendMessage = function (roomId, inputEl) { messages.sendMessage = function (roomId, inputEl) {
@ -15,7 +15,7 @@ define('forum/chats/messages', ['components', 'translator', 'benchpress'], funct
inputEl.val(''); inputEl.val('');
inputEl.removeAttr('data-mid'); inputEl.removeAttr('data-mid');
messages.updateRemainingLength(inputEl.parent()); messages.updateRemainingLength(inputEl.parent());
$(window).trigger('action:chat.sent', { hooks.fire('action:chat.sent', {
roomId: roomId, roomId: roomId,
message: msg, message: msg,
mid: mid, mid: mid,
@ -62,7 +62,7 @@ define('forum/chats/messages', ['components', 'translator', 'benchpress'], funct
var element = parent.find('[component="chat/input"]'); var element = parent.find('[component="chat/input"]');
parent.find('[component="chat/message/length"]').text(element.val().length); parent.find('[component="chat/message/length"]').text(element.val().length);
parent.find('[component="chat/message/remaining"]').text(config.maximumChatMessageLength - element.val().length); parent.find('[component="chat/message/remaining"]').text(config.maximumChatMessageLength - element.val().length);
$(window).trigger('action:chat.updateRemainingLength', { hooks.fire('action:chat.updateRemainingLength', {
parent: parent, parent: parent,
}); });
}; };
@ -90,7 +90,7 @@ define('forum/chats/messages', ['components', 'translator', 'benchpress'], funct
messages.scrollToBottom(chatContentEl); messages.scrollToBottom(chatContentEl);
} }
$(window).trigger('action:chat.received', { hooks.fire('action:chat.received', {
messageEl: newMessage, messageEl: newMessage,
}); });
} }
@ -149,7 +149,7 @@ define('forum/chats/messages', ['components', 'translator', 'benchpress'], funct
inputEl.attr('data-mid', messageId).addClass('editing'); inputEl.attr('data-mid', messageId).addClass('editing');
inputEl.val(raw).focus(); inputEl.val(raw).focus();
$(window).trigger('action:chat.prepEdit', { hooks.fire('action:chat.prepEdit', {
inputEl: inputEl, inputEl: inputEl,
messageId: messageId, messageId: messageId,
roomId: roomId, roomId: roomId,

@ -1,14 +1,14 @@
'use strict'; 'use strict';
define('forum/compose', [], function () { define('forum/compose', ['hooks'], function (hooks) {
var Compose = {}; var Compose = {};
Compose.init = function () { Compose.init = function () {
var container = $('.composer'); var container = $('.composer');
if (container.length) { if (container.length) {
$(window).trigger('action:composer.enhance', { hooks.fire('action:composer.enhance', {
container: container, container: container,
}); });
} }

@ -1,7 +1,7 @@
'use strict'; 'use strict';
define('forum/infinitescroll', function () { define('forum/infinitescroll', ['hooks'], function (hooks) {
var scroll = {}; var scroll = {};
var callback; var callback;
var previousScrollTop = 0; var previousScrollTop = 0;
@ -70,7 +70,7 @@ define('forum/infinitescroll', function () {
loadingMore = true; loadingMore = true;
var hookData = { method: method, data: data }; var hookData = { method: method, data: data };
$(window).trigger('action:infinitescroll.loadmore', hookData); hooks.fire('action:infinitescroll.loadmore', hookData);
socket.emit(hookData.method, hookData.data, function (err, data) { socket.emit(hookData.method, hookData.data, function (err, data) {
if (err) { if (err) {
@ -90,7 +90,7 @@ define('forum/infinitescroll', function () {
loadingMore = true; loadingMore = true;
var url = config.relative_path + '/api' + location.pathname.replace(new RegExp('^' + config.relative_path), ''); var url = config.relative_path + '/api' + location.pathname.replace(new RegExp('^' + config.relative_path), '');
var hookData = { url: url, data: data }; var hookData = { url: url, data: data };
$(window).trigger('action:infinitescroll.loadmore.xhr', hookData); hooks.fire('action:infinitescroll.loadmore.xhr', hookData);
$.get(url, data, function (data) { $.get(url, data, function (data) {
callback(data, function () { callback(data, function () {

@ -1,7 +1,7 @@
'use strict'; 'use strict';
define('forum/login', ['jquery-form'], function () { define('forum/login', ['hooks', 'jquery-form'], function (hooks) {
var Login = { var Login = {
_capsState: false, _capsState: false,
}; };
@ -26,7 +26,7 @@ define('forum/login', ['jquery-form'], function () {
submitEl.addClass('disabled'); submitEl.addClass('disabled');
$(window).trigger('action:app.login'); hooks.fire('action:app.login');
formEl.ajaxSubmit({ formEl.ajaxSubmit({
headers: { headers: {
'x-csrf-token': config.csrf_token, 'x-csrf-token': config.csrf_token,
@ -35,7 +35,7 @@ define('forum/login', ['jquery-form'], function () {
app.flags._login = true; app.flags._login = true;
}, },
success: function (data) { success: function (data) {
$(window).trigger('action:app.loggedIn', data); hooks.fire('action:app.loggedIn', data);
var pathname = utils.urlToLocation(data.next).pathname; var pathname = utils.urlToLocation(data.next).pathname;
var params = utils.params({ url: data.next }); var params = utils.params({ url: data.next });
params.loggedin = true; params.loggedin = true;

@ -1,7 +1,12 @@
'use strict'; 'use strict';
define('forum/search', ['search', 'autocomplete', 'storage'], function (searchModule, autocomplete, storage) { define('forum/search', [
'search',
'autocomplete',
'storage',
'hooks',
], function (searchModule, autocomplete, storage, hooks) {
var Search = {}; var Search = {};
Search.init = function () { Search.init = function () {
@ -51,7 +56,7 @@ define('forum/search', ['search', 'autocomplete', 'storage'], function (searchMo
searchData.showAs = form.find('#show-as-topics').is(':checked') ? 'topics' : 'posts'; searchData.showAs = form.find('#show-as-topics').is(':checked') ? 'topics' : 'posts';
} }
$(window).trigger('action:search.getSearchDataFromDOM', { hooks.fire('action:search.getSearchDataFromDOM', {
form: form, form: form,
data: searchData, data: searchData,
}); });
@ -128,7 +133,7 @@ define('forum/search', ['search', 'autocomplete', 'storage'], function (searchMo
$('#show-as-posts').prop('checked', isPost).parent().toggleClass('active', isPost); $('#show-as-posts').prop('checked', isPost).parent().toggleClass('active', isPost);
} }
$(window).trigger('action:search.fillOutForm', { hooks.fire('action:search.fillOutForm', {
form: formData, form: formData,
}); });
} }

@ -44,7 +44,7 @@ define('forum/topic', [
Topic.init = function () { Topic.init = function () {
var tid = ajaxify.data.tid; var tid = ajaxify.data.tid;
currentUrl = ajaxify.currentPage; currentUrl = ajaxify.currentPage;
$(window).trigger('action:topic.loading'); hooks.fire('action:topic.loading');
app.enterRoom('topic_' + tid); app.enterRoom('topic_' + tid);

@ -10,7 +10,8 @@ define('forum/topic/events', [
'components', 'components',
'translator', 'translator',
'benchpress', 'benchpress',
], function (postTools, threadTools, posts, images, components, translator, Benchpress) { 'hooks',
], function (postTools, threadTools, posts, images, components, translator, Benchpress, hooks) {
var Events = {}; var Events = {};
var events = { var events = {
@ -150,11 +151,11 @@ define('forum/topic/events', [
app.parseAndTranslate('partials/topic/post-editor', editData, function (html) { app.parseAndTranslate('partials/topic/post-editor', editData, function (html) {
editorEl.replaceWith(html); editorEl.replaceWith(html);
$('[data-pid="' + data.post.pid + '"] [component="post/editor"] .timeago').timeago(); $('[data-pid="' + data.post.pid + '"] [component="post/editor"] .timeago').timeago();
$(window).trigger('action:posts.edited', data); hooks.fire('action:posts.edited', data);
}); });
}); });
} else { } else {
$(window).trigger('action:posts.edited', data); hooks.fire('action:posts.edited', data);
} }
if (data.topic.tags && tagsUpdated(data.topic.tags)) { if (data.topic.tags && tagsUpdated(data.topic.tags)) {

@ -1,7 +1,7 @@
'use strict'; 'use strict';
define('forum/topic/move', ['categorySelector', 'alerts'], function (categorySelector, alerts) { define('forum/topic/move', ['categorySelector', 'alerts', 'hooks'], function (categorySelector, alerts, hooks) {
var Move = {}; var Move = {};
var modal; var modal;
var selectedCategory; var selectedCategory;
@ -85,7 +85,7 @@ define('forum/topic/move', ['categorySelector', 'alerts'], function (categorySel
} }
function moveTopics(data) { function moveTopics(data) {
$(window).trigger('action:topic.move', data); hooks.fire('action:topic.move', data);
socket.emit(!data.tids ? 'topics.moveAll' : 'topics.move', data, function (err) { socket.emit(!data.tids ? 'topics.moveAll' : 'topics.move', data, function (err) {
if (err) { if (err) {

@ -9,7 +9,8 @@ define('forum/topic/postTools', [
'forum/topic/votes', 'forum/topic/votes',
'api', 'api',
'bootbox', 'bootbox',
], function (share, navigator, components, translator, votes, api, bootbox) { 'hooks',
], function (share, navigator, components, translator, votes, api, bootbox, hooks) {
var PostTools = {}; var PostTools = {};
var staleReplyAnyway = false; var staleReplyAnyway = false;
@ -50,7 +51,7 @@ define('forum/topic/postTools', [
require(['clipboard'], function (clipboard) { require(['clipboard'], function (clipboard) {
new clipboard('[data-clipboard-text]'); new clipboard('[data-clipboard-text]');
}); });
$(window).trigger('action:post.tools.load'); hooks.fire('action:post.tools.load');
}); });
}); });
}); });
@ -98,7 +99,7 @@ define('forum/topic/postTools', [
$('.topic').on('click', '[component="topic/reply-as-topic"]', function () { $('.topic').on('click', '[component="topic/reply-as-topic"]', function () {
translator.translate('[[topic:link_back, ' + ajaxify.data.titleRaw + ', ' + config.relative_path + '/topic/' + ajaxify.data.slug + ']]', function (body) { translator.translate('[[topic:link_back, ' + ajaxify.data.titleRaw + ', ' + config.relative_path + '/topic/' + ajaxify.data.slug + ']]', function (body) {
$(window).trigger('action:composer.topic.new', { hooks.fire('action:composer.topic.new', {
cid: ajaxify.data.cid, cid: ajaxify.data.cid,
body: body, body: body,
}); });
@ -155,7 +156,7 @@ define('forum/topic/postTools', [
var postEditDuration = parseInt(ajaxify.data.postEditDuration, 10); var postEditDuration = parseInt(ajaxify.data.postEditDuration, 10);
if (checkDuration(postEditDuration, timestamp, 'post-edit-duration-expired')) { if (checkDuration(postEditDuration, timestamp, 'post-edit-duration-expired')) {
$(window).trigger('action:composer.post.edit', { hooks.fire('action:composer.post.edit', {
pid: getData(btn, 'data-pid'), pid: getData(btn, 'data-pid'),
}); });
} }
@ -258,10 +259,11 @@ define('forum/topic/postTools', [
} }
var toPid = button.is('[component="post/reply"]') ? getData(button, 'data-pid') : null; var toPid = button.is('[component="post/reply"]') ? getData(button, 'data-pid') : null;
var isQuoteToPid = !toPid || !selectedNode.pid || toPid === selectedNode.pid;
if (selectedNode.text && (!toPid || !selectedNode.pid || toPid === selectedNode.pid)) { if (selectedNode.text && isQuoteToPid) {
username = username || selectedNode.username; username = username || selectedNode.username;
$(window).trigger('action:composer.addQuote', { hooks.fire('action:composer.addQuote', {
tid: tid, tid: tid,
pid: toPid, pid: toPid,
topicName: ajaxify.data.titleRaw, topicName: ajaxify.data.titleRaw,
@ -270,7 +272,7 @@ define('forum/topic/postTools', [
selectedPid: selectedNode.pid, selectedPid: selectedNode.pid,
}); });
} else { } else {
$(window).trigger('action:composer.post.new', { hooks.fire('action:composer.post.new', {
tid: tid, tid: tid,
pid: toPid, pid: toPid,
topicName: ajaxify.data.titleRaw, topicName: ajaxify.data.titleRaw,
@ -288,7 +290,7 @@ define('forum/topic/postTools', [
var toPid = getData(button, 'data-pid'); var toPid = getData(button, 'data-pid');
function quote(text) { function quote(text) {
$(window).trigger('action:composer.addQuote', { hooks.fire('action:composer.addQuote', {
tid: tid, tid: tid,
pid: toPid, pid: toPid,
username: username, username: username,
@ -351,7 +353,7 @@ define('forum/topic/postTools', [
return app.alertError(err); return app.alertError(err);
} }
var type = method === 'put' ? 'bookmark' : 'unbookmark'; var type = method === 'put' ? 'bookmark' : 'unbookmark';
$(window).trigger('action:post.' + type, { pid: pid }); hooks.fire('action:post.' + type, { pid: pid });
}); });
return false; return false;
} }
@ -440,7 +442,7 @@ define('forum/topic/postTools', [
className: 'btn-primary', className: 'btn-primary',
callback: function () { callback: function () {
translator.translate('[[topic:link_back, ' + ajaxify.data.title + ', ' + config.relative_path + '/topic/' + ajaxify.data.slug + ']]', function (body) { translator.translate('[[topic:link_back, ' + ajaxify.data.title + ', ' + config.relative_path + '/topic/' + ajaxify.data.slug + ']]', function (body) {
$(window).trigger('action:composer.topic.new', { hooks.fire('action:composer.topic.new', {
cid: ajaxify.data.cid, cid: ajaxify.data.cid,
body: body, body: body,
fromStaleTopic: true, fromStaleTopic: true,

@ -200,7 +200,7 @@ define('forum/topic/posts', [
before = repliesSelector.first(); before = repliesSelector.first();
} }
$(window).trigger('action:posts.loading', { posts: data.posts, after: after, before: before }); hooks.fire('action:posts.loading', { posts: data.posts, after: after, before: before });
app.parseAndTranslate('topic', 'posts', Object.assign({}, ajaxify.data, data), function (html) { app.parseAndTranslate('topic', 'posts', Object.assign({}, ajaxify.data, data), function (html) {
html = html.filter(function () { html = html.filter(function () {

@ -7,7 +7,8 @@ define('forum/topic/threadTools', [
'handleBack', 'handleBack',
'forum/topic/posts', 'forum/topic/posts',
'api', 'api',
], function (components, translator, handleBack, posts, api) { 'hooks',
], function (components, translator, handleBack, posts, api, hooks) {
var ThreadTools = {}; var ThreadTools = {};
ThreadTools.init = function (tid, topicContainer) { ThreadTools.init = function (tid, topicContainer) {
@ -151,7 +152,7 @@ define('forum/topic/threadTools', [
timeout: 5000, timeout: 5000,
}); });
$(window).trigger('action:topics.changeWatching', { tid: tid, type: type }); hooks.fire('action:topics.changeWatching', { tid: tid, type: type });
}, () => { }, () => {
app.alert({ app.alert({
type: 'danger', type: 'danger',
@ -180,7 +181,7 @@ define('forum/topic/threadTools', [
} }
app.parseAndTranslate('partials/topic/topic-menu-list', data, function (html) { app.parseAndTranslate('partials/topic/topic-menu-list', data, function (html) {
dropdownMenu.html(html); dropdownMenu.html(html);
$(window).trigger('action:topic.tools.load', { hooks.fire('action:topic.tools.load', {
element: dropdownMenu, element: dropdownMenu,
}); });
}); });

@ -2,8 +2,8 @@
define('forum/topic/votes', [ define('forum/topic/votes', [
'components', 'translator', 'benchpress', 'api', 'components', 'translator', 'benchpress', 'api', 'hooks',
], function (components, translator, Benchpress, api) { ], function (components, translator, Benchpress, api, hooks) {
var Votes = {}; var Votes = {};
Votes.addVoteHandler = function () { Votes.addVoteHandler = function () {
@ -70,7 +70,7 @@ define('forum/topic/votes', [
} }
return app.alertError(err.message); return app.alertError(err.message);
} }
$(window).trigger('action:post.toggleVote', { hooks.fire('action:post.toggleVote', {
pid: pid, pid: pid,
delta: delta, delta: delta,
unvote: method === 'del', unvote: method === 'del',

@ -1,6 +1,6 @@
'use strict'; 'use strict';
define('categoryFilter', ['categorySearch', 'api'], function (categorySearch, api) { define('categoryFilter', ['categorySearch', 'api', 'hooks'], function (categorySearch, api, hooks) {
var categoryFilter = {}; var categoryFilter = {};
categoryFilter.init = function (el, options) { categoryFilter.init = function (el, options) {
@ -10,7 +10,8 @@ define('categoryFilter', ['categorySearch', 'api'], function (categorySearch, ap
options = options || {}; options = options || {};
options.states = options.states || ['watching', 'notwatching', 'ignoring']; options.states = options.states || ['watching', 'notwatching', 'ignoring'];
options.template = 'partials/category-filter'; options.template = 'partials/category-filter';
$(window).trigger('action:category.filter.options', { el: el, options: options });
hooks.fire('action:category.filter.options', { el: el, options: options });
categorySearch.init(el, options); categorySearch.init(el, options);

@ -1,8 +1,8 @@
'use strict'; 'use strict';
define('categorySelector', [ define('categorySelector', [
'categorySearch', 'bootbox', 'categorySearch', 'bootbox', 'hooks',
], function (categorySearch, bootbox) { ], function (categorySearch, bootbox, hooks) {
var categorySelector = {}; var categorySelector = {};
categorySelector.init = function (el, options) { categorySelector.init = function (el, options) {
@ -14,7 +14,7 @@ define('categorySelector', [
options.states = options.states || ['watching', 'notwatching', 'ignoring']; options.states = options.states || ['watching', 'notwatching', 'ignoring'];
options.template = 'partials/category-selector'; options.template = 'partials/category-selector';
$(window).trigger('action:category.selector.options', { el: el, options: options }); hooks.fire('action:category.selector.options', { el: el, options: options });
categorySearch.init(el, options); categorySearch.init(el, options);

@ -4,7 +4,8 @@ define('chat', [
'components', 'components',
'taskbar', 'taskbar',
'translator', 'translator',
], function (components, taskbar, translator) { 'hooks',
], function (components, taskbar, translator, hooks) {
var module = {}; var module = {};
var newMessage = false; var newMessage = false;
@ -123,7 +124,7 @@ define('chat', [
taskbar.update('chat', modal.attr('data-uuid'), { taskbar.update('chat', modal.attr('data-uuid'), {
title: newTitle, title: newTitle,
}); });
$(window).trigger('action:chat.renamed', Object.assign(data, { hooks.fire('action:chat.renamed', Object.assign(data, {
modal: modal, modal: modal,
})); }));
}; };
@ -249,7 +250,7 @@ define('chat', [
isSelf: data.isSelf, isSelf: data.isSelf,
}, function () { }, function () {
taskbar.toggleNew(chatModal.attr('data-uuid'), !data.isSelf); taskbar.toggleNew(chatModal.attr('data-uuid'), !data.isSelf);
$(window).trigger('action:chat.loaded', chatModal); hooks.fire('action:chat.loaded', chatModal);
if (typeof callback === 'function') { if (typeof callback === 'function') {
callback(chatModal); callback(chatModal);
@ -275,7 +276,7 @@ define('chat', [
module.disableMobileBehaviour(chatModal); module.disableMobileBehaviour(chatModal);
} }
$(window).trigger('action:chat.closed', { hooks.fire('action:chat.closed', {
uuid: uuid, uuid: uuid,
modal: chatModal, modal: chatModal,
}); });
@ -352,7 +353,7 @@ define('chat', [
taskbar.minimize('chat', uuid); taskbar.minimize('chat', uuid);
clearInterval(chatModal.attr('intervalId')); clearInterval(chatModal.attr('intervalId'));
chatModal.attr('intervalId', 0); chatModal.attr('intervalId', 0);
$(window).trigger('action:chat.minimized', { hooks.fire('action:chat.minimized', {
uuid: uuid, uuid: uuid,
modal: chatModal, modal: chatModal,
}); });

@ -48,7 +48,7 @@ define('flags', ['hooks', 'components', 'api'], function (hooks, components, api
}); });
flagModal.modal('show'); flagModal.modal('show');
$(window).trigger('action:flag.showModal', { hooks.fire('action:flag.showModal', {
modalEl: flagModal, modalEl: flagModal,
type: data.type, type: data.type,
id: data.id, id: data.id,
@ -84,7 +84,7 @@ define('flags', ['hooks', 'components', 'api'], function (hooks, components, api
postEl.find('[component="post/flag"]').addClass('hidden').parent().attr('hidden', ''); postEl.find('[component="post/flag"]').addClass('hidden').parent().attr('hidden', '');
postEl.find('[component="post/already-flagged"]').removeClass('hidden').parent().attr('hidden', null); postEl.find('[component="post/already-flagged"]').removeClass('hidden').parent().attr('hidden', null);
} }
$(window).trigger('action:flag.create', { flagId: flagId, data: data }); hooks.fire('action:flag.create', { flagId: flagId, data: data });
}); });
} }

@ -1,7 +1,7 @@
'use strict'; 'use strict';
define('search', ['navigator', 'translator', 'storage'], function (nav, translator, storage) { define('search', ['navigator', 'translator', 'storage', 'hooks'], function (nav, translator, storage, hooks) {
var Search = { var Search = {
current: {}, current: {},
}; };
@ -90,7 +90,7 @@ define('search', ['navigator', 'translator', 'storage'], function (nav, translat
query.searchOnly = data.searchOnly; query.searchOnly = data.searchOnly;
} }
$(window).trigger('action:search.createQueryString', { hooks.fire('action:search.createQueryString', {
query: query, query: query,
data: data, data: data,
}); });

@ -1,7 +1,7 @@
'use strict'; 'use strict';
define('share', function () { define('share', ['hooks'], function (hooks) {
var module = {}; var module = {};
module.addShareHandlers = function (name) { module.addShareHandlers = function (name) {
@ -9,7 +9,7 @@ define('share', function () {
function openShare(url, urlToPost, width, height) { function openShare(url, urlToPost, width, height) {
window.open(url + encodeURIComponent(baseUrl + config.relative_path + urlToPost), '_blank', 'width=' + width + ',height=' + height + ',scrollbars=no,status=no'); window.open(url + encodeURIComponent(baseUrl + config.relative_path + urlToPost), '_blank', 'width=' + width + ',height=' + height + ',scrollbars=no,status=no');
$(window).trigger('action:share.open', { hooks.fire('action:share.open', {
url: url, url: url,
urlToPost: urlToPost, urlToPost: urlToPost,
}); });
@ -43,7 +43,7 @@ define('share', function () {
return openShare('https://plus.google.com/share?url=', getPostUrl($(this)), 500, 570); return openShare('https://plus.google.com/share?url=', getPostUrl($(this)), 500, 570);
}); });
$(window).trigger('action:share.addHandlers', { openShare: openShare }); hooks.fire('action:share.addHandlers', { openShare: openShare });
}; };
function addHandler(selector, callback) { function addHandler(selector, callback) {

@ -1,7 +1,7 @@
'use strict'; 'use strict';
define('taskbar', ['benchpress', 'translator'], function (Benchpress, translator) { define('taskbar', ['benchpress', 'translator', 'hooks'], function (Benchpress, translator, hooks) {
var taskbar = {}; var taskbar = {};
taskbar.init = function () { taskbar.init = function () {
@ -89,7 +89,7 @@ define('taskbar', ['benchpress', 'translator'], function (Benchpress, translator
element: element, element: element,
}; };
$(window).trigger('filter:taskbar.push', data); hooks.fire('filter:taskbar.push', data);
if (!element.length && data.module) { if (!element.length && data.module) {
createTaskbarItem(data, callback); createTaskbarItem(data, callback);
@ -116,7 +116,7 @@ define('taskbar', ['benchpress', 'translator'], function (Benchpress, translator
btnEl.toggleClass('new', state); btnEl.toggleClass('new', state);
if (!silent) { if (!silent) {
$(window).trigger('action:taskbar.toggleNew', uuid); hooks.fire('action:taskbar.toggleNew', uuid);
} }
}; };
@ -175,7 +175,7 @@ define('taskbar', ['benchpress', 'translator'], function (Benchpress, translator
data.element = taskbarEl; data.element = taskbarEl;
taskbarEl.data(data); taskbarEl.data(data);
$(window).trigger('action:taskbar.pushed', data); hooks.fire('action:taskbar.pushed', data);
callback(taskbarEl); callback(taskbarEl);
}); });
} }

@ -72,7 +72,7 @@ define('topicList', [
TopicList.loadMoreTopics(1); TopicList.loadMoreTopics(1);
}); });
$(window).trigger('action:topics.loaded', { topics: ajaxify.data.topics }); hooks.fire('action:topics.loaded', { topics: ajaxify.data.topics });
}; };
function findTopicListElement() { function findTopicListElement() {
@ -277,7 +277,7 @@ define('topicList', [
html.find('.timeago').timeago(); html.find('.timeago').timeago();
app.createUserTooltips(html); app.createUserTooltips(html);
utils.makeNumbersHumanReadable(html.find('.human-readable-number')); utils.makeNumbersHumanReadable(html.find('.human-readable-number'));
$(window).trigger('action:topics.loaded', { topics: topics, template: templateName }); hooks.fire('action:topics.loaded', { topics: topics, template: templateName });
callback(); callback();
}); });
} }

@ -9,8 +9,10 @@
namespace: namespace, namespace: namespace,
data: data, data: data,
}; };
$(window).trigger('action:translator.loadClient', payload); require(['hooks'], function (hooks) {
resolve(payload.promise ? Promise.resolve(payload.promise) : data); hooks.fire('action:translator.loadClient', payload);
resolve(payload.promise ? Promise.resolve(payload.promise) : data);
});
}).fail(function (jqxhr, textStatus, error) { }).fail(function (jqxhr, textStatus, error) {
reject(new Error(textStatus + ', ' + error)); reject(new Error(textStatus + ', ' + error));
}); });

@ -7,6 +7,11 @@ socket = window.socket;
(function () { (function () {
var reconnecting = false; var reconnecting = false;
var hooks;
require(['hooks'], function (_hooks) {
hooks = _hooks;
});
var ioParams = { var ioParams = {
reconnectionAttempts: config.maxReconnectionAttempts, reconnectionAttempts: config.maxReconnectionAttempts,
reconnectionDelay: config.reconnectionDelay, reconnectionDelay: config.reconnectionDelay,
@ -124,7 +129,7 @@ socket = window.socket;
function onConnect() { function onConnect() {
if (!reconnecting) { if (!reconnecting) {
$(window).trigger('action:connected'); hooks.fire('action:connected');
} }
if (reconnecting) { if (reconnecting) {
@ -140,7 +145,7 @@ socket = window.socket;
socket.emit('meta.reconnected'); socket.emit('meta.reconnected');
$(window).trigger('action:reconnected'); hooks.fire('action:reconnected');
setTimeout(function () { setTimeout(function () {
reconnectEl.removeClass('active').addClass('hide'); reconnectEl.removeClass('active').addClass('hide');
@ -204,7 +209,7 @@ socket = window.socket;
} }
}, 2000); }, 2000);
$(window).trigger('action:disconnected'); hooks.fire('action:disconnected');
} }
function onEventBanned(data) { function onEventBanned(data) {

@ -48,6 +48,8 @@
} }
}); });
$(window).trigger('action:widgets.loaded', {}); require(['hooks'], function (hooks) {
hooks.fire('action:widgets.loaded', {});
});
}; };
}(ajaxify || {})); }(ajaxify || {}));

Loading…
Cancel
Save