// Water.css Bookmarklet // --------------------- const $$ = (selector) => document.querySelectorAll(selector) const createElement = (tagName, properties) => Object.assign(document.createElement(tagName), properties) // Remove all CSS stylesheets, external and internal $$('link[rel="stylesheet"],style').forEach((el) => el.remove()) // Remove all inline styles $$('*').forEach((el) => (el.style = '')) const linkElm = createElement('link', { rel: 'stylesheet', href: 'https://cdn.jsdelivr.net/npm/water.css@2/out/light.min.css' }) // Add water.css and responsive viewport (if necessary) document.head.append( linkElm, !$$('meta[name="viewport"]').length && createElement('meta', { name: 'viewport', content: 'width=device-width,initial-scale=1.0' }) ) // Theme switching icons const moonSVG = '' const sunSVG = '' // Theme toggling logic const toggleBtn = createElement('button', { innerHTML: sunSVG, ariaLabel: 'Switch theme', style: ` position: fixed; top: 50px; right: 50px; margin: 0; padding: 10px; line-height: 1; ` }) let theme = 'light' const updateTheme = () => { if (theme === 'dark') { toggleBtn.innerHTML = moonSVG linkElm.href = 'https://cdn.jsdelivr.net/npm/water.css@2/out/dark.min.css' } else { toggleBtn.innerHTML = sunSVG linkElm.href = 'https://cdn.jsdelivr.net/npm/water.css@2/out/light.min.css' } } toggleBtn.addEventListener('click', () => { theme = theme === 'dark' ? 'light' : 'dark' localStorage.setItem('water.css-theme', theme) updateTheme() }) document.body.append(toggleBtn) const saved = localStorage.getItem('water.css-theme') if (saved) { theme = saved updateTheme() } else if (window.matchMedia('(prefers-color-scheme: dark)').matches) { theme = 'dark' updateTheme() } else if (window.matchMedia('(prefers-color-scheme: light)').matches) { theme = 'light' updateTheme() }