aboutsummaryrefslogtreecommitdiffstats
path: root/out/docs/script.js
diff options
context:
space:
mode:
authorkj_sh6042026-02-14 14:13:10 -0500
committerkj_sh6042026-02-14 14:13:10 -0500
commiteb61a9c22b331d6f1b1602f17bcac3362475b2cb (patch)
tree8b8e7133620eaa53a96d09a86411f29c8d0e9a10 /out/docs/script.js
parentdd07af2c6c4b61590e4a3808f5e4f9d7c13d439a (diff)
refactor: fix docs dynamic change
Diffstat (limited to 'out/docs/script.js')
-rw-r--r--out/docs/script.js86
1 files changed, 60 insertions, 26 deletions
diff --git a/out/docs/script.js b/out/docs/script.js
index 40b9996..dc45bed 100644
--- a/out/docs/script.js
+++ b/out/docs/script.js
@@ -15,8 +15,18 @@ const table = {
}
const updateTheme = () => {
- const theme = themeForm.querySelector('input[name="theme"]:checked').value
+ if (!themeForm || !stylesheet) {
+ console.error('Required elements not found')
+ return
+ }
+
+ const checkedInput = themeForm.querySelector('input[name="theme"]:checked')
+ if (!checkedInput) {
+ console.error('No theme selected')
+ return
+ }
+ const theme = checkedInput.value
const fileName = `${theme === 'auto' ? 'noir' : theme}.min.css`
const localUrl = `${localBase}${fileName}`
@@ -26,39 +36,63 @@ const updateTheme = () => {
snippet.hidden = snippet.id.indexOf(theme) === -1
}
- table.fileName.innerText = fileName
+ if (table.fileName) {
+ table.fileName.innerText = fileName
+ }
- if (theme === 'auto') {
- table.theme.innerHTML = `
+ if (table.theme) {
+ if (theme === 'auto') {
+ table.theme.innerHTML = `
Respects user-defined theme settings using <a style="--links: var(--code)" href="https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-color-scheme" target="_blank" rel="noopener"><code>prefers-color-scheme</code></a>.<br>
Light in browsers where the theme settings can't be detected.
`
- } else {
- table.theme.innerText = `Theme is forced to ${theme}.`
+ } else {
+ table.theme.innerText = `Theme is forced to ${theme}.`
+ }
}
}
-themeForm.addEventListener('change', updateTheme)
+if (themeForm) {
+ themeForm.addEventListener('change', updateTheme)
+}
updateTheme()
startupStylesheet.parentElement.removeChild(startupStylesheet)
-copyButton.addEventListener('click', () => {
- const clipboard = navigator.clipboard || window.clipboard
- const theme = themeForm.querySelector('input[name="theme"]:checked').value
- const snippetText = document.querySelector(`#link-snippet-${theme} code`).textContent
-
- clipboard.writeText(snippetText)
- .then(() => { copyButtonFeedback.textContent = '\u2714' })
- .catch(() => { copyButtonFeedback.textContent = '\u274C' })
- .then(() => setTimeout(() => { copyButtonFeedback.textContent = '' }, 1000))
-})
-
-document.getElementById('dialog-trigger').addEventListener('click', () => {
- document.getElementById('dialog-result').innerText = ''
- document.getElementById('dialog').showModal()
-})
-
-document.getElementById('dialog').addEventListener('close', (event) => {
- document.getElementById('dialog-result').innerText = `Your answer: ${event.target.returnValue}`
-})
+if (copyButton) {
+ copyButton.addEventListener('click', () => {
+ const clipboard = navigator.clipboard || window.clipboard
+ const checkedInput = themeForm.querySelector('input[name="theme"]:checked')
+ if (!checkedInput) return
+
+ const theme = checkedInput.value
+ const snippetElement = document.querySelector(`#link-snippet-${theme} code`)
+ if (!snippetElement) return
+
+ const snippetText = snippetElement.textContent
+
+ clipboard.writeText(snippetText)
+ .then(() => { copyButtonFeedback.textContent = '\u2714' })
+ .catch(() => { copyButtonFeedback.textContent = '\u274C' })
+ .then(() => setTimeout(() => { copyButtonFeedback.textContent = '' }, 1000))
+ })
+}
+
+const dialogTrigger = document.getElementById('dialog-trigger')
+const dialog = document.getElementById('dialog')
+const dialogResult = document.getElementById('dialog-result')
+
+if (dialogTrigger && dialog) {
+ dialogTrigger.addEventListener('click', () => {
+ if (dialogResult) {
+ dialogResult.innerText = ''
+ }
+ dialog.showModal()
+ })
+
+ dialog.addEventListener('close', (event) => {
+ if (dialogResult) {
+ dialogResult.innerText = `Your answer: ${event.target.returnValue}`
+ }
+ })
+}