diff options
author | Claire <claire.github-309c@sitedethib.com> | 2022-10-11 11:23:59 +0200 |
---|---|---|
committer | Claire <claire.github-309c@sitedethib.com> | 2022-10-11 11:31:11 +0200 |
commit | 7097a459be125f0c18bc4c2c77a00ba92c408bf9 (patch) | |
tree | 81af0a8f048fd7c2bda22f6e916e698091f8c66c /app/javascript/flavours/glitch/ready.js | |
parent | 015e798394a98bb826446ceb55bfadacc5888215 (diff) |
Move flavours/glitch/utils/ready to flavours/glitch/ready
Diffstat (limited to 'app/javascript/flavours/glitch/ready.js')
-rw-r--r-- | app/javascript/flavours/glitch/ready.js | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/app/javascript/flavours/glitch/ready.js b/app/javascript/flavours/glitch/ready.js new file mode 100644 index 000000000..e769cc756 --- /dev/null +++ b/app/javascript/flavours/glitch/ready.js @@ -0,0 +1,32 @@ +// @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); + } + }); +} |