diff options
author | GitLab Bot <gitlab-bot@gitlab.com> | 2020-09-18 00:09:39 +0300 |
---|---|---|
committer | GitLab Bot <gitlab-bot@gitlab.com> | 2020-09-18 00:09:39 +0300 |
commit | 63b9a1e5bd6f67dd375e00c44eedf6a526f6653d (patch) | |
tree | 224c640358c560f6b827a3a7efff6df2d774bb70 /app/assets/javascripts/helpers | |
parent | 708ee0bcb2c20cc73db53c092a26f916139d15d4 (diff) |
Add latest changes from gitlab-org/gitlab@master
Diffstat (limited to 'app/assets/javascripts/helpers')
-rw-r--r-- | app/assets/javascripts/helpers/startup_css_helper.js | 84 |
1 files changed, 31 insertions, 53 deletions
diff --git a/app/assets/javascripts/helpers/startup_css_helper.js b/app/assets/javascripts/helpers/startup_css_helper.js index 66cf0630a79..8e25e1421c0 100644 --- a/app/assets/javascripts/helpers/startup_css_helper.js +++ b/app/assets/javascripts/helpers/startup_css_helper.js @@ -1,3 +1,25 @@ +const CSS_LOADED_EVENT = 'CSSLoaded'; +const STARTUP_LINK_LOADED_EVENT = 'CSSStartupLinkLoaded'; + +const getAllStartupLinks = (() => { + let links = null; + return () => { + if (!links) { + links = Array.from(document.querySelectorAll('link[data-startupcss]')); + } + return links; + }; +})(); +const isStartupLinkLoaded = ({ dataset }) => dataset.startupcss === 'loaded'; +const allLinksLoaded = () => getAllStartupLinks().every(isStartupLinkLoaded); + +const handleStartupEvents = () => { + if (allLinksLoaded()) { + document.dispatchEvent(new CustomEvent(CSS_LOADED_EVENT)); + document.removeEventListener(STARTUP_LINK_LOADED_EVENT, handleStartupEvents); + } +}; + /* Wait for.... The methods can be used: - with a callback (preferred), waitFor(action) @@ -8,61 +30,17 @@ - with await, await waitFor; action(); -*/ - -const CSS_LOADED_EVENT = 'CSSLoaded'; -const DOM_LOADED_EVENT = 'DOMContentLoaded'; -const STARTUP_LINK_LOADED_EVENT = 'CSSStartupLinkLoaded'; - -const isStartupLinkLoaded = ({ dataset }) => dataset.startupcss === 'loaded'; - -export const handleLoadedEvents = (action = () => {}) => { - let isCssLoaded = false; - let eventsList = [CSS_LOADED_EVENT, DOM_LOADED_EVENT]; - return ({ type } = {}) => { - eventsList = eventsList.filter(e => e !== type); - if (isCssLoaded) { - return; - } - if (!eventsList.length) { - isCssLoaded = true; +-*/ +export const waitForCSSLoaded = (action = () => {}) => { + if (!gon.features.startupCss || allLinksLoaded()) { + return new Promise(resolve => { action(); - } - }; -}; - -export const handleStartupEvents = (action = () => {}) => { - if (!gon.features.startupCss) { - return action; + resolve(); + }); } - const startupLinks = Array.from(document.querySelectorAll('link[data-startupcss]')); - return () => { - if (startupLinks.every(isStartupLinkLoaded)) { - action(); - } - }; -}; -export const waitForStartupLinks = () => { - let eventListener; - const promise = new Promise(resolve => { - eventListener = handleStartupEvents(resolve); - document.addEventListener(STARTUP_LINK_LOADED_EVENT, eventListener); - }).then(() => { - document.dispatchEvent(new CustomEvent(CSS_LOADED_EVENT)); - document.removeEventListener(STARTUP_LINK_LOADED_EVENT, eventListener); - }); - document.dispatchEvent(new CustomEvent(STARTUP_LINK_LOADED_EVENT)); - return promise; -}; - -export const waitForCSSLoaded = (action = () => {}) => { - let eventListener; - const promise = new Promise(resolve => { - eventListener = handleLoadedEvents(resolve); - document.addEventListener(DOM_LOADED_EVENT, eventListener, { once: true }); - document.addEventListener(CSS_LOADED_EVENT, eventListener, { once: true }); + return new Promise(resolve => { + document.addEventListener(CSS_LOADED_EVENT, resolve, { once: true }); + document.addEventListener(STARTUP_LINK_LOADED_EVENT, handleStartupEvents); }).then(action); - waitForStartupLinks(); - return promise; }; |