Skip to content

Commit 69248dd

Browse files
authored
add switch btn (#254)
1 parent 8f0ae73 commit 69248dd

File tree

4 files changed

+197
-198
lines changed

4 files changed

+197
-198
lines changed

_includes/header.html

+3
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@
114114
</div>
115115

116116
<div class="header__right">
117+
117118
<div class="header__github">
118119
<a href="https://phalcon.io/github" aria-label="github">
119120
<svg width="20" height="20" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg">
@@ -131,6 +132,8 @@
131132
</svg>
132133
</a>
133134
</div>
135+
136+
<div class="switcher"><button></button></div>
134137
</div>
135138
</div>
136139
</header>

_includes/meta.html

+5-78
Original file line numberDiff line numberDiff line change
@@ -50,87 +50,14 @@
5050
<meta name="msapplication-config" content="https://assets.phalcon.io/phalcon/favicons/browserconfig.xml" />
5151
<meta name="msapplication-TileColor" content="#273646">
5252
<meta name="theme-color" content="#273646">
53-
54-
<script>
55-
(() => {
56-
'use strict'
57-
58-
const getStoredTheme = () => localStorage.getItem('theme')
59-
const setStoredTheme = theme => localStorage.setItem('theme', theme)
60-
61-
const getPreferredTheme = () => {
62-
const storedTheme = getStoredTheme()
63-
if (storedTheme) {
64-
return storedTheme
65-
}
66-
67-
return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'
68-
}
69-
70-
const setTheme = theme => {
71-
if (theme === 'auto') {
72-
document.documentElement.setAttribute('data-theme', (window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'))
73-
} else {
74-
document.documentElement.setAttribute('data-theme', theme)
75-
}
76-
}
77-
78-
setTheme(getPreferredTheme())
79-
80-
const showActiveTheme = (theme, focus = false) => {
81-
const themeSwitcher = document.querySelector('#bd-theme')
82-
83-
if (!themeSwitcher) {
84-
return
85-
}
86-
87-
const themeSwitcherText = document.querySelector('#bd-theme-text')
88-
const activeThemeIcon = document.querySelector('.theme-icon-active use')
89-
const btnToActive = document.querySelector(`[data-theme-value="${theme}"]`)
90-
const svgOfActiveBtn = btnToActive.querySelector('svg use').getAttribute('href')
91-
92-
document.querySelectorAll('[data-theme-value]').forEach(element => {
93-
element.classList.remove('active')
94-
element.setAttribute('aria-pressed', 'false')
95-
})
96-
97-
btnToActive.classList.add('active')
98-
btnToActive.setAttribute('aria-pressed', 'true')
99-
activeThemeIcon.setAttribute('href', svgOfActiveBtn)
100-
const themeSwitcherLabel = `${themeSwitcherText.textContent} (${btnToActive.dataset.bsThemeValue})`
101-
themeSwitcher.setAttribute('aria-label', themeSwitcherLabel)
102-
103-
if (focus) {
104-
themeSwitcher.focus()
105-
}
106-
}
107-
108-
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', () => {
109-
const storedTheme = getStoredTheme()
110-
if (storedTheme !== 'light' && storedTheme !== 'dark') {
111-
setTheme(getPreferredTheme())
112-
}
113-
})
114-
115-
window.addEventListener('DOMContentLoaded', () => {
116-
showActiveTheme(getPreferredTheme())
117-
118-
document.querySelectorAll('[data-theme-value]')
119-
.forEach(toggle => {
120-
toggle.addEventListener('click', () => {
121-
const theme = toggle.getAttribute('data-theme-value')
122-
setStoredTheme(theme)
123-
setTheme(theme)
124-
showActiveTheme(theme, true)
125-
})
126-
})
127-
})
128-
})()
129-
</script>
53+
<script>document.documentElement.classList.add(localStorage.getItem('mode') === 'auto' ? (matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light') : localStorage.getItem('mode'))</script>
54+
<script type="module" src="./../assets/js/theme-switcher.js"></script>
13055

13156
<link rel="stylesheet"
132-
href="https://assets.phalcon.io/phalcon/test/dark.css">
57+
href="./../assets/css/dark.css">
58+
13359
<link rel="stylesheet"
13460
href="https://assets.phalcon.io/phalcon/test/core.css">
13561
<link rel="stylesheet"
13662
href="https://assets.phalcon.io/phalcon/test/custom.css">
63+

0 commit comments

Comments
 (0)