mirror of
https://github.com/NodeBB/NodeBB.git
synced 2026-02-28 09:31:17 +01:00
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.
This commit is contained in:
@@ -26,6 +26,40 @@ app.cacheBuster = null;
|
|||||||
app.load();
|
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 () {
|
app.load = function () {
|
||||||
overrides.overrideTimeago();
|
overrides.overrideTimeago();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user