mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-10-26 16:46:12 +01:00
fix: early button/anchor clicks do nothing
This solves a small UX issue where clicking on a button (or anchor that is not meant to be ajaxified) before ajaxify.end is called leads to nothing happening because the appropriate click handler has not been added. This code will intercept premature clicks, wait until ajaxify.end is called, and then re-send the click.
This commit is contained in:
@@ -17,6 +17,32 @@ app.cacheBuster = null;
|
|||||||
|
|
||||||
app.cacheBuster = config['cache-buster'];
|
app.cacheBuster = config['cache-buster'];
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Occasionally, a button or anchor (not meant to be ajaxified) is clicked before
|
||||||
|
* ajaxify is ready. Capture that event and re-click it once NodeBB is ready.
|
||||||
|
*
|
||||||
|
* e.g. New Topic/Reply, post tools
|
||||||
|
*/
|
||||||
|
var earlyQueue = []; // once we can ES6, use Set instead
|
||||||
|
var earlyClick = function (ev) {
|
||||||
|
var btnEl = ev.target.closest('button');
|
||||||
|
if (!btnEl && ev.target.closest('a') && ev.target.closest('a').getAttribute('data-ajaxify') === 'false') {
|
||||||
|
btnEl = ev.target.closest('a');
|
||||||
|
}
|
||||||
|
if (btnEl && !earlyQueue.includes(btnEl)) {
|
||||||
|
earlyQueue.push(btnEl);
|
||||||
|
ev.stopImmediatePropagation();
|
||||||
|
ev.preventDefault();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
document.body.addEventListener('click', earlyClick);
|
||||||
|
$(window).on('action:ajaxify.end', function () {
|
||||||
|
document.body.removeEventListener('click', earlyClick);
|
||||||
|
earlyQueue.forEach(function (el) {
|
||||||
|
el.click();
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
bootbox.setDefaults({
|
bootbox.setDefaults({
|
||||||
locale: config.userLang,
|
locale: config.userLang,
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user