1
0
mirror of https://github.com/whippyshou/mastodon synced 2024-12-21 18:18:21 +09:00
whippy-edition/app/javascript/mastodon/ready.js
2022-10-03 18:15:47 +02:00

33 lines
660 B
JavaScript

// @ts-check
/**
* @param {(() => void) | (() => Promise<void>)} callback
* @returns {Promise<void>}
*/
export default function ready(callback) {
return new Promise((resolve, reject) => {
function loaded() {
let result;
try {
result = callback();
} catch (err) {
reject(err);
return;
}
if (typeof result?.then === 'function') {
result.then(resolve).catch(reject);
} else {
resolve();
}
}
if (['interactive', 'complete'].includes(document.readyState)) {
loaded();
} else {
document.addEventListener('DOMContentLoaded', loaded);
}
});
}