UNPKG

@underpostnet/underpost

Version:
172 lines (166 loc) 5.48 kB
import { CoreService } from '../../services/core/core.service.js'; import { BtnIcon } from './BtnIcon.js'; import { s4 } from './CommonJs.js'; import { darkTheme, renderCssAttr } from './Css.js'; import { loggerFactory } from './Logger.js'; import { append, getAllChildNodes, getProxyPath, htmls, s, sa } from './VanillaJs.js'; const logger = loggerFactory(import.meta); const LoadingAnimation = { bar: { tokens: {}, getId: (id) => `bar-progress-${id.slice(1)}`, play: async function (container) { const id = this.getId(container); const idEvent = s4() + s4() + s4(); this.tokens[container] = `${idEvent}`; // diagonal-bar-background-animation // #6d68ff #790079 append( 'body', html` <div class="fix progress-bar box-shadow ${id}" style="left: -100%; background: ${darkTheme ? LoadingAnimation.darkColor ? LoadingAnimation.darkColor : `#c9c9c9` : LoadingAnimation.lightColor ? LoadingAnimation.lightColor : `#515151`};" ></div> `, ); for (const frame of [ { time: 500, value: 35 }, { time: 1250, value: 15 }, { time: 3000, value: 5 }, { time: 5000, value: 1 }, ]) setTimeout(() => { if (this.tokens[container] === idEvent && s(`.${id}`)) { s(`.${id}`).style.left = `-${frame.value}%`; // const percentageRender = html`${100 - frame.value}%`; } }, frame.time); }, stop: function (container) { const id = this.getId(container); delete this.tokens[container]; if (!s(`.${id}`)) return; s(`.${id}`).style.left = '0%'; s(`.${id}`).style.opacity = 1; setTimeout(() => (s(`.${id}`).style.opacity = 0)); setTimeout(() => s(`.${id}`).remove(), 400); }, }, spinner: { getId: (id) => `spinner-progress-${id.slice(1)}`, play: async function (container, spinner) { if (!s(container)) return; const id = this.getId(container); let render; switch (spinner) { case 'dual-ring': render = html`<div class="lds-dual-ring"></div>`; break; case 'dual-ring-mini': default: render = html`<div class="lds-dual-ring-mini"></div>`; break; } const style = { 'text-align': 'center', }; append( container, html` <div class="abs center ${id}" style="${renderCssAttr({ style, })}" > ${render} </div> `, ); const label = BtnIcon.findLabel(s(container)); if (label) label.classList.add('hide'); }, stop: function (container) { const id = this.getId(container); if (!s(`.${id}`)) return; s(`.${id}`).remove(); const label = BtnIcon.findLabel(s(container)); if (label) label.classList.remove('hide'); }, }, img: { tokens: {}, load: function ({ key, src, classes, style }) { this.tokens[key] = { src, classes, style }; }, play: function (container, key) { append( container, html`<img ${this.tokens[key].classes ? `class="${this.tokens[key].classes}"` : ''} ${this.tokens[key].style ? `style="${this.tokens[key].style}"` : ''} src="${getProxyPath()}${this.tokens[key].src}" />`, ); }, }, barLevel: { append: () => { if (Array.from(sa('.ssr-loading-bar-block')).length >= 5) return; s(`.ssr-blink-bar`).classList.remove('ssr-blink-bar'); append('.ssr-loading-bar', html`<div class="ssr-loading-bar-block ssr-blink-bar"></div>`); }, clear: () => { htmls('.ssr-loading-bar', html`<div class="ssr-loading-bar-block ssr-blink-bar"></div>`); }, }, removeSplashScreen: function (backgroundContainer, callBack) { if (s(`.clean-cache-container`)) s(`.clean-cache-container`).style.display = 'none'; if (!backgroundContainer) backgroundContainer = '.ssr-background'; if (s(backgroundContainer)) setTimeout(() => { s(backgroundContainer).style.opacity = 0; setTimeout(async () => { s(backgroundContainer).style.display = 'none'; if (s(`.modal-menu`)) s(`.modal-menu`).classList.remove('hide'); if (s(`.main-body-btn-container`)) s(`.main-body-btn-container`).classList.remove('hide'); if (callBack) callBack(); }, 300); }); }, lightColor: null, setLightColor: function (color) { this.lightColor = color; }, darkColor: null, setDarkColor: function (color) { this.darkColor = color; }, RenderCurrentSrcLoad: function (event) { if (s(`.ssr-loading-info`)) { let nameSrcLoad = event.data.path; if (nameSrcLoad) { if (nameSrcLoad.match('assets')) nameSrcLoad = location.hostname + location.pathname + (location.pathname[location.pathname.length - 1] !== '/' ? '/' : '') + 'assets'; else if (!nameSrcLoad.match('api')) nameSrcLoad = undefined; if (nameSrcLoad) htmls( `.ssr-loading-info`, html`<span style="color: white">Loading </span> ...${nameSrcLoad.slice(-30).replaceAll('file', 'storage')}`, ); } } }, }; export { LoadingAnimation };