aboutsummaryrefslogtreecommitdiff
path: root/ext/mixed/js/core.js
diff options
context:
space:
mode:
authorAlex Yatskov <alex@foosoft.net>2020-06-27 19:04:19 -0700
committerAlex Yatskov <alex@foosoft.net>2020-06-27 19:04:19 -0700
commit88af95d20bfdbeb59d44bf0f0d46e772a329f839 (patch)
treed1dfa7268f274fed32061221c0f030e3647f9ae2 /ext/mixed/js/core.js
parent19197a9a5d6a1f54a179d894577dfac513b97401 (diff)
parent0a6c08d0f53090a4ad48663bc5846ddae5723d52 (diff)
Merge branch 'master' into testing
Diffstat (limited to 'ext/mixed/js/core.js')
-rw-r--r--ext/mixed/js/core.js57
1 files changed, 42 insertions, 15 deletions
diff --git a/ext/mixed/js/core.js b/ext/mixed/js/core.js
index 589425f2..bf877e72 100644
--- a/ext/mixed/js/core.js
+++ b/ext/mixed/js/core.js
@@ -164,7 +164,10 @@ function getSetDifference(set1, set2) {
function promiseTimeout(delay, resolveValue) {
if (delay <= 0) {
- return Promise.resolve(resolveValue);
+ const promise = Promise.resolve(resolveValue);
+ promise.resolve = () => {}; // NOP
+ promise.reject = () => {}; // NOP
+ return promise;
}
let timer = null;
@@ -174,7 +177,7 @@ function promiseTimeout(delay, resolveValue) {
const complete = (callback, value) => {
if (callback === null) { return; }
if (timer !== null) {
- window.clearTimeout(timer);
+ clearTimeout(timer);
timer = null;
}
promiseResolve = null;
@@ -189,7 +192,7 @@ function promiseTimeout(delay, resolveValue) {
promiseResolve = resolve2;
promiseReject = reject2;
});
- timer = window.setTimeout(() => {
+ timer = setTimeout(() => {
timer = null;
resolve(resolveValue);
}, delay);
@@ -255,15 +258,37 @@ class EventListenerCollection {
return this._eventListeners.length;
}
- addEventListener(node, type, listener, options) {
- node.addEventListener(type, listener, options);
- this._eventListeners.push([node, type, listener, options]);
+ addEventListener(object, ...args) {
+ object.addEventListener(...args);
+ this._eventListeners.push(['removeEventListener', object, ...args]);
+ }
+
+ addListener(object, ...args) {
+ object.addListener(...args);
+ this._eventListeners.push(['removeListener', object, ...args]);
+ }
+
+ on(object, ...args) {
+ object.on(...args);
+ this._eventListeners.push(['off', object, ...args]);
}
removeAllEventListeners() {
if (this._eventListeners.length === 0) { return; }
- for (const [node, type, listener, options] of this._eventListeners) {
- node.removeEventListener(type, listener, options);
+ for (const [removeFunctionName, object, ...args] of this._eventListeners) {
+ switch (removeFunctionName) {
+ case 'removeEventListener':
+ object.removeEventListener(...args);
+ break;
+ case 'removeListener':
+ object.removeListener(...args);
+ break;
+ case 'off':
+ object.off(...args);
+ break;
+ default:
+ throw new Error(`Unknown remove function: ${removeFunctionName}`);
+ }
}
this._eventListeners = [];
}
@@ -306,7 +331,7 @@ const yomichan = (() => {
generateId(length) {
const array = new Uint8Array(length);
- window.crypto.getRandomValues(array);
+ crypto.getRandomValues(array);
let id = '';
for (const value of array) {
id += value.toString(16).padStart(2, '0');
@@ -339,7 +364,7 @@ const yomichan = (() => {
const runtimeMessageCallback = ({action, params}, sender, sendResponse) => {
let timeoutId = null;
if (timeout !== null) {
- timeoutId = window.setTimeout(() => {
+ timeoutId = setTimeout(() => {
timeoutId = null;
eventHandler.removeListener(runtimeMessageCallback);
reject(new Error(`Listener timed out in ${timeout} ms`));
@@ -348,7 +373,7 @@ const yomichan = (() => {
const cleanupResolve = (value) => {
if (timeoutId !== null) {
- window.clearTimeout(timeoutId);
+ clearTimeout(timeoutId);
timeoutId = null;
}
eventHandler.removeListener(runtimeMessageCallback);
@@ -428,10 +453,12 @@ const yomichan = (() => {
// Private
+ _getUrl() {
+ return (typeof window === 'object' && window !== null ? window.location.href : '');
+ }
+
_getLogContext() {
- return {
- url: window.location.href
- };
+ return {url: this._getUrl()};
}
_onMessage({action, params}, sender, callback) {
@@ -444,7 +471,7 @@ const yomichan = (() => {
}
_onMessageGetUrl() {
- return {url: window.location.href};
+ return {url: this._getUrl()};
}
_onMessageOptionsUpdated({source}) {