use once
in addEventListener, available since Chrome 55
This commit is contained in:
parent
4df3813f87
commit
f63fb8cc15
|
@ -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)) {
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
|
@ -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',
|
||||||
|
|
17
js/dom.js
17
js/dom.js
|
@ -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);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
|
@ -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)) {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user