From e7c6643730a2293f11df4f54e30a0932cb9d48f4 Mon Sep 17 00:00:00 2001 From: Josh Date: Fri, 29 May 2020 16:57:00 +1000 Subject: [PATCH] [matrix] Dark Theme * Apply width restructions to modals and images * Dark theme 2.0 * Add webkit scrollbar * Use Object.keys instead of Object.entries where applicable --- docs/_static/custom.js | 36 +++++++------- docs/_static/style.css | 92 ++++++++++++++++++++++++++++++++++-- docs/_templates/layout.html | 9 ++++ docs/images/snake.png | Bin 28244 -> 0 bytes docs/images/snake.svg | 17 +++++++ docs/images/snake_dark.svg | 17 +++++++ docs/index.rst | 3 +- 7 files changed, 154 insertions(+), 20 deletions(-) delete mode 100644 docs/images/snake.png create mode 100644 docs/images/snake.svg create mode 100644 docs/images/snake_dark.svg diff --git a/docs/_static/custom.js b/docs/_static/custom.js index ac3ed1e9d..3f0e50d17 100644 --- a/docs/_static/custom.js +++ b/docs/_static/custom.js @@ -28,17 +28,28 @@ function updateSetting(element) { } } -function getBodyClassToggle(className) { - function toggleBodyClass(add) { - document.body.classList.toggle(className, add); +function getRootAttributeToggle(attributeName, valueName) { + function toggleRootAttribute(set) { + document.documentElement.setAttribute(`data-${attributeName}`, set ? valueName : null); } - return toggleBodyClass; + return toggleRootAttribute; } const settings = { - useSansFont: getBodyClassToggle('sans') + useSansFont: getRootAttributeToggle('font', 'sans'), + useDarkTheme: getRootAttributeToggle('theme', 'dark') }; +Object.entries(settings).forEach(([name, setter]) => { + let value = JSON.parse(localStorage.getItem(name)); + try { + setter(value); + } catch (error) { + console.error(`Failed to apply setting "${name}" With value:`, value); + console.error(error); + } +}); + document.addEventListener('DOMContentLoaded', () => { bottomHeightThreshold = document.documentElement.scrollHeight - 30; @@ -81,18 +92,11 @@ document.addEventListener('DOMContentLoaded', () => { parent.insertBefore(table, element.nextSibling); }); - Object.entries(settings).forEach(([name, setter]) => { + Object.keys(settings).forEach(name => { let value = JSON.parse(localStorage.getItem(name)); - - try { - setter(value); - let element = document.querySelector(`input[name=${name}]`); - if (element) { - element.checked = value === true; - } - } catch (error) { - console.error(`Failed to apply setting "${name}" With value:`, value); - console.error(error); + let element = document.querySelector(`input[name=${name}]`); + if (element) { + element.checked = value === true; } }); }); diff --git a/docs/_static/style.css b/docs/_static/style.css index 176dc32bf..d8b6a2cb3 100644 --- a/docs/_static/style.css +++ b/docs/_static/style.css @@ -18,6 +18,8 @@ Historically however, thanks to: /* CSS variables would go here */ :root { + --font-family: 'Georgia', 'Yu Gothic', 'Noto Sans CJK JP Regular', serif; + --main-background: #fff; --link-text: #2591c4; --link-hover-text: #0b3a44; @@ -60,10 +62,73 @@ Historically however, thanks to: --table-border: #ddd; --mobile-active-toc: ; --active-toc: #dbdbdb; + --scrollbar: rgba(0,0,0,0.2); + --scrollbar-hover: rgba(0,0,0,0.4); +} + +:root[data-font="sans"] { + --font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; +} + +:root[data-theme="dark"] { + --main-background: #303030; + --link-text: #2591c4; + --link-hover-text: #3b6a74; + --text-normal: #fff; + --mobile-nav-background: #424242; + --mobile-nav-text: #fff; + --mobile-nav-hover-text: #fff; + --mobile-nav-header-text: #fff; + --nav-background: #303030; + --nav-text: rgba(255,255,255,0.7); + --nav-hover-text: rgba(255,255,255,0.5); + --nav-header-text: rgba(255,255,255,0.87); + --search-border: #ccc; + --footer-text: #555; + --footer-link: #444; + --hr-border: #b1b4b6; + --main-big-headers-text: rgba(255,255,255,0.87); + --main-big-headers-border: #ddd; + --main-h5-header-text: #000; + --main-h6-header-text: #777; + --main-h4-header-border: #e5e5e5; + --header-link: #3e4349; + --header-link-hover-text: #fff; + --note-background: #424242; + --note-border: #222222; + --warning-background: #424242; + --warning-border: #aaaa22; + --error-background: #424242; + --error-border: #aa2222; + --helpful-background: #424242; + --helpful-border: #22aaaa; + --codeblock-background: #222222; + --codeblock-border: #424242; + --codeblock-text: rgba(255,255,255,0.7); + --inline-code-background: #212121; + --xref-code-background: transparent; + --api-entry-background: #212121; + --table-header-background: #f5f5f5; + --table-text: #000; + --table-border: #ddd; + --mobile-active-toc: ; + --active-toc: #dbdbdb; + --scrollbar: rgba(0,0,0,0.5); + --scrollbar-hover: rgba(0,0,0,0.7); +} + +img[src$="snake_dark.svg"] { + display: none; +} +:root[data-theme="dark"] img[src$="snake.svg"] { + display: none; +} +:root[data-theme="dark"] img[src$="snake_dark.svg"] { + display: initial; } body { - font-family: 'Georgia', 'Yu Gothic', 'Noto Sans CJK JP Regular', serif; + font-family: var(--font-family); font-size: 16px; margin: 0; padding: 0; @@ -72,8 +137,23 @@ body { color: var(--text-normal); } -body.sans { - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, Cantarell, 'Open Sans', 'Helvetica Neue', sans-serif; + +/* Scrollbar related */ + +body::-webkit-scrollbar, +#sidebar::-webkit-scrollbar { + width: 1em; +} + +body::-webkit-scrollbar-thumb, +#sidebar::-webkit-scrollbar-thumb { + background-color: var(--scrollbar); + border-radius: 0.5em; +} + +body::-webkit-scrollbar-thumb:hover, +#sidebar::-webkit-scrollbar-thumb:hover { + background-color: var(--scrollbar-hover); } /* grid related */ @@ -235,6 +315,7 @@ div.modal-content { border-radius: 4px; margin: 20% auto; width: 40%; + min-width: 350px; cursor: initial; } @@ -397,6 +478,11 @@ main li { line-height: 1.4em; } +main img { + width: 100%; + max-width: 500px; +} + /* weird margins */ li > p { margin: 2px; diff --git a/docs/_templates/layout.html b/docs/_templates/layout.html index 45c2a86a0..f12cdab39 100644 --- a/docs/_templates/layout.html +++ b/docs/_templates/layout.html @@ -91,6 +91,15 @@ +
+

Enable dark theme: + +

+
+ {% block body %} {% endblock %} diff --git a/docs/images/snake.png b/docs/images/snake.png deleted file mode 100644 index 62b446177c0a292cd9a654ff2a199282feafce4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28244 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 + + + + + + + + + + + + + + + diff --git a/docs/images/snake_dark.svg b/docs/images/snake_dark.svg new file mode 100644 index 000000000..1517d60d0 --- /dev/null +++ b/docs/images/snake_dark.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + diff --git a/docs/index.rst b/docs/index.rst index 20c5d1836..9a8a37f60 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -6,7 +6,8 @@ Welcome to discord.py =========================== -.. image:: /images/snake.png +.. image:: /images/snake.svg +.. image:: /images/snake_dark.svg discord.py is a modern, easy to use, feature-rich, and async ready API wrapper for Discord.