use once in addEventListener, available since Chrome 55

This commit is contained in:
tophf 2020-10-12 10:10:00 +03:00
parent 4df3813f87
commit f63fb8cc15
6 changed files with 19 additions and 38 deletions

View File

@ -320,15 +320,9 @@
function onDOMready() {
if (document.readyState !== 'loading') {
return Promise.resolve();
}
return new Promise(resolve => {
document.addEventListener('DOMContentLoaded', function _() {
document.removeEventListener('DOMContentLoaded', _);
resolve();
});
});
return document.readyState !== 'loading'
? Promise.resolve()
: new Promise(resolve => document.addEventListener('DOMContentLoaded', resolve, {once: true}));
}
@ -394,13 +388,12 @@ document.documentElement.appendChild(document.createElement('script')).text = '(
// USO bug workaround: use the actual style settings in API response
let settings;
const originalResponseJson = Response.prototype.json;
document.addEventListener('stylusFixBuggyUSOsettings', function _({detail}) {
document.removeEventListener('stylusFixBuggyUSOsettings', _);
document.addEventListener('stylusFixBuggyUSOsettings', ({detail}) => {
settings = /\?/.test(detail) && new URL(detail).searchParams;
if (!settings) {
Response.prototype.json = originalResponseJson;
}
});
}, {once: true});
Response.prototype.json = function (...args) {
return originalResponseJson.call(this, ...args).then(json => {
if (!settings || typeof ((json || {}).style_settings || {}).every !== 'function') {
@ -467,8 +460,7 @@ document.documentElement.appendChild(document.createElement('script')).text = '(
// TODO: remove the following statement when USO pagination is fixed
if (location.search.includes('category=')) {
document.addEventListener('DOMContentLoaded', function _() {
document.removeEventListener('DOMContentLoaded', _);
document.addEventListener('DOMContentLoaded', () => {
new MutationObserver((_, observer) => {
if (!document.getElementById('pagination')) {
return;
@ -480,7 +472,7 @@ if (location.search.includes('category=')) {
links[i].href += category;
}
}).observe(document, {childList: true, subtree: true});
});
}, {once: true});
}
if (/^https?:\/\/userstyles\.org\/styles\/\d{3,}/.test(location.href)) {

View File

@ -478,13 +478,12 @@ function showCodeMirrorPopup(title, html, options) {
};
window.addEventListener('keydown', onKeyDown, true);
window.addEventListener('closeHelp', function _() {
window.removeEventListener('closeHelp', _);
window.addEventListener('closeHelp', () => {
window.removeEventListener('keydown', onKeyDown, true);
document.documentElement.style.removeProperty('pointer-events');
rerouteHotkeys(true);
cm = popup.codebox = null;
});
}, {once: true});
return popup;
}

View File

@ -53,11 +53,10 @@
cm.on('changes', updateButtonState);
rerouteHotkeys(false);
window.addEventListener('closeHelp', function _() {
window.removeEventListener('closeHelp', _);
window.addEventListener('closeHelp', () => {
rerouteHotkeys(true);
cm = null;
});
}, {once: true});
loadScript([
'/vendor/codemirror/mode/javascript/javascript.js',

View File

@ -112,15 +112,9 @@ document.addEventListener('wheel', event => {
});
function onDOMready() {
if (document.readyState !== 'loading') {
return Promise.resolve();
}
return new Promise(resolve => {
document.addEventListener('DOMContentLoaded', function _() {
document.removeEventListener('DOMContentLoaded', _);
resolve();
});
});
return document.readyState !== 'loading'
? Promise.resolve()
: new Promise(resolve => document.addEventListener('DOMContentLoaded', resolve, {once: true}));
}
@ -144,8 +138,7 @@ function animateElement(
onComplete,
} = {}) {
return element && new Promise(resolve => {
element.addEventListener('animationend', function _() {
element.removeEventListener('animationend', _);
element.addEventListener('animationend', () => {
element.classList.remove(
className,
// In Firefox, `resolve()` might be called one frame later.
@ -157,7 +150,7 @@ function animateElement(
onComplete.call(element);
}
resolve();
});
}, {once: true});
element.classList.add(className);
});
}

View File

@ -82,7 +82,7 @@ const loadScript = (() => {
for (const {addedNodes} of mutations) {
for (const n of addedNodes) {
if (n.src && getSubscribersForSrc(n.src)) {
n.addEventListener('load', notifySubscribers);
n.addEventListener('load', notifySubscribers, {once: true});
}
}
}
@ -97,7 +97,6 @@ const loadScript = (() => {
}
function notifySubscribers(event) {
this.removeEventListener('load', notifySubscribers);
for (let data; (data = getSubscribersForSrc(this.src));) {
data.listeners.forEach(fn => fn(event));
if (emptyAfterCleanup(data.suffix)) {

View File

@ -9,14 +9,13 @@ const hotkeys = (() => {
let enabled = false;
let ready = false;
window.addEventListener('showStyles:done', function _() {
window.removeEventListener('showStyles:done', _);
window.addEventListener('showStyles:done', () => {
togglablesShown = true;
togglables = getTogglables();
ready = true;
setState(true);
initHotkeyInfo();
});
}, {once: true});
window.addEventListener('resize', adjustInfoPosition);