diff options
Diffstat (limited to 'tools/dochack/dochack.nim')
-rw-r--r-- | tools/dochack/dochack.nim | 36 |
1 files changed, 35 insertions, 1 deletions
diff --git a/tools/dochack/dochack.nim b/tools/dochack/dochack.nim index 3a663808d..c7b8232ef 100644 --- a/tools/dochack/dochack.nim +++ b/tools/dochack/dochack.nim @@ -1,6 +1,39 @@ import dom import fuzzysearch + +proc switchTheme(event: Event) = + if event.target.checked: + document.documentElement.setAttribute("data-theme", "dark") + window.localStorage.setItem("theme", "dark") + else: + document.documentElement.setAttribute("data-theme", "light") + window.localStorage.setItem("theme", "light") + + +proc nimThemeSwitch(event: Event) {.exportC.} = + var pragmaDots = document.getElementsByClassName("pragmadots") + for i in 0..<pragmaDots.len: + pragmaDots[i].onclick = proc (event: Event) = + # Hide tease + event.target.parentNode.style.display = "none" + # Show actual + event.target.parentNode.nextSibling.style.display = "inline" + + let toggleSwitch = document.querySelector(".theme-switch input[type=\"checkbox\"]") + + if toggleSwitch != nil: + toggleSwitch.addEventListener("change", switchTheme, false) + + var currentTheme = window.localStorage.getItem("theme") + if currentTheme.len == 0 and window.matchMedia("(prefers-color-scheme: dark)").matches: + currentTheme = "dark" + if currentTheme.len > 0: + document.documentElement.setAttribute("data-theme", currentTheme); + + if currentTheme == "dark" and toggleSwitch != nil: + toggleSwitch.checked = true + proc textContent(e: Element): cstring {. importcpp: "#.textContent", nodecl.} @@ -396,5 +429,6 @@ proc copyToClipboard*() {.exportc.} = """ .} - + copyToClipboard() +window.addEventListener("DOMContentLoaded", nimThemeSwitch) \ No newline at end of file |