/* global UIkit */ import {on} from '../../src/js/util/event'; import {css} from '../../src/js/util/style'; import {ucfirst} from '../../src/js/util/lang'; import {prepend} from '../../src/js/util/dom'; import {addClass, removeClass} from '../../src/js/util/class'; import {fastdom} from '../../src/js/util/fastdom'; const storage = window.sessionStorage; const key = '_uikit_style'; const keyinverse = '_uikit_inverse'; const docEl = document.documentElement; // try to load themes.json const request = new XMLHttpRequest(); request.open('GET', '../themes.json', false); request.send(null); const themes = request.status === 200 ? JSON.parse(request.responseText) : {}; const styles = { core: {css: '../dist/css/uikit-core.css'}, theme: {css: '../dist/css/uikit.css'} }; const component = location.pathname.split('/').pop().replace(/.html$/, ''); for (const theme in themes) { styles[theme] = themes[theme]; } const variations = { '': 'Default', light: 'Dark', dark: 'Light' }; if (getParam('style') && getParam('style').match(/\.(json|css)$/)) { styles.custom = getParam('style'); } storage[key] = storage[key] || 'core'; storage[keyinverse] = storage[keyinverse] || ''; const dir = storage._uikit_dir || 'ltr'; // set dir docEl.dir = dir; const style = styles[storage[key]] || styles.theme; // add style document.writeln(``); // add javascript document.writeln(''); document.writeln(``); on(window, 'load', () => setTimeout(() => fastdom.write(() => { const $body = document.body; const $container = prepend($body, `
`); const [$tests, $styles, $inverse, $rtl] = $container.children; // Tests // ------------------------------ on($tests, 'change', () => { if ($tests.value) { location.href = `${$tests.value}${styles.custom ? `?style=${getParam('style')}` : ''}`; } }); $tests.value = component && `${component}.html`; // Styles // ------------------------------ on($styles, 'change', () => { storage[key] = $styles.value; location.reload(); }); $styles.value = storage[key]; // Variations // ------------------------------ $inverse.value = storage[keyinverse]; if ($inverse.value) { removeClass(document.querySelectorAll('*'), [ 'uk-navbar-container', 'uk-card-default', 'uk-card-muted', 'uk-card-primary', 'uk-card-secondary', 'uk-tile-default', 'uk-tile-muted', 'uk-tile-primary', 'uk-tile-secondary', 'uk-section-default', 'uk-section-muted', 'uk-section-primary', 'uk-section-secondary', 'uk-overlay-default', 'uk-overlay-primary' ]); css(docEl, 'background', $inverse.value === 'dark' ? '#fff' : '#222'); addClass($body, `uk-${$inverse.value}`); } on($inverse, 'change', () => { storage[keyinverse] = $inverse.value; location.reload(); }); // RTL // ------------------------------ on($rtl, 'change', ({target}) => { storage._uikit_dir = target.checked ? 'rtl' : 'ltr'; location.reload(); }); $rtl.firstElementChild.checked = dir === 'rtl'; css(docEl, 'paddingTop', ''); }), 100)); css(docEl, 'paddingTop', '80px'); function getParam(name) { const match = new RegExp(`[?&]${name}=([^&]*)`).exec(window.location.search); return match && decodeURIComponent(match[1].replace(/\+/g, ' ')); }