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

View File

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

View File

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

View File

@ -82,7 +82,7 @@ const loadScript = (() => {
for (const {addedNodes} of mutations) { for (const {addedNodes} of mutations) {
for (const n of addedNodes) { for (const n of addedNodes) {
if (n.src && getSubscribersForSrc(n.src)) { 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) { function notifySubscribers(event) {
this.removeEventListener('load', notifySubscribers);
for (let data; (data = getSubscribersForSrc(this.src));) { for (let data; (data = getSubscribersForSrc(this.src));) {
data.listeners.forEach(fn => fn(event)); data.listeners.forEach(fn => fn(event));
if (emptyAfterCleanup(data.suffix)) { if (emptyAfterCleanup(data.suffix)) {

View File

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