fix: early button/anchor clicks do nothing

This reverts commit a395324b52, and
fixes the issue where the ACP became unusable because of the earlier
variant of this code.

Thanks @psychobunny for spotting.
v1.18.x
Julian Lam 4 years ago
parent f693ce97bf
commit 8437130ec2

@ -26,6 +26,40 @@ app.cacheBuster = null;
app.load();
});
app.handleEarlyClicks = function () {
/**
* 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
*/
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');
if (!btnEl && anchorEl && (anchorEl.getAttribute('data-ajaxify') === 'false' || anchorEl.href === '#')) {
btnEl = anchorEl;
}
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();
});
});
} else {
setTimeout(app.handleEarlyClicks, 50);
}
};
app.handleEarlyClicks();
app.load = function () {
overrides.overrideTimeago();

Loading…
Cancel
Save