summaryrefslogtreecommitdiff
path: root/static
diff options
context:
space:
mode:
authorDavid Luevano Alvarado <david@luevano.xyz>2021-06-06 06:59:20 -0600
committerDavid Luevano Alvarado <david@luevano.xyz>2021-06-06 06:59:20 -0600
commit28d1ea21350640ff5da7412b7e096cc09f7cb567 (patch)
tree2177386769bed078f73a9360d340059f49f409a8 /static
parent408da9eafe37c7522ab7aeb212df09b46487bcbd (diff)
refactor css and theme switcher
Diffstat (limited to 'static')
-rw-r--r--static/css/light.css138
-rw-r--r--static/css/nordtheme.css183
-rw-r--r--static/css/style.css62
-rw-r--r--static/css/theme.css (renamed from static/css/dark.css)83
-rw-r--r--static/scripts/theme.js80
5 files changed, 95 insertions, 451 deletions
diff --git a/static/css/light.css b/static/css/light.css
deleted file mode 100644
index 0b1456c..0000000
--- a/static/css/light.css
+++ /dev/null
@@ -1,138 +0,0 @@
-@import './nordtheme.css';
-
-:root {
- --bg: var(--color5);
- --body-bg: var(--color4);
- --navitem-bg: var(--color9);
- --navitem-bg-hl: var(--color10);
-
- --fg: var(--color3);
- --fg-hl: var(--color0);
-
- --link: var(--color15);
- --link-hl: var(--color7);
- --navitem-link: var(--color8);
- --navitem-link-hl: var(--color7);
-
- --fg-acc1: var(--color11);
- --fg-acc2: var(--color12);
- --fg-acc3: var(--color13);
- --fg-acc4: var(--color14);
- --fg-acc5: var(--color15);
-
- --switch-bg: var(--color3);
- --switch-slider: var(--color4);
- --switch-toggled-bg: var(--color10);
- --switch-ol: var(--color0);
- --switch-moon: var(--color3);
- --switch-sun: var(--color13);
-
- --code-border: var(--fg);
-}
-
-/* general */
-a {
- color: var(--link);
-}
-
-a:hover {
- color: var(--link-hl);
-}
-
-h1 {
- color: var(--fg-acc1);
-}
-
-h2 {
- color: var(--fg-acc2);
-}
-
-h3 {
- color: var(--fg-acc3);
-}
-
-h4 {
- color: var(--fg-acc4);
-}
-
-h5 {
- color: var(--fg-acc5);
-}
-
-body {
- background: var(--bg);
- color: var(--fg);
-}
-
-pre, code {
- border-radius: 5px;
- border: 1px solid var(--code-border);
-}
-
-main {
- background: linear-gradient(var(--bg) 0.5em, 1em, var(--body-bg) 1.5em calc(100% - 1.5em), calc(100% - 1em), var(--bg) calc(100% - 0.5em));
-}
-
-/* nav bar */
-body > header {
- background: linear-gradient(var(--body-bg) calc(100% - 1.5em), calc(100% - 1em), var(--bg) calc(100% - 0.5em));
-}
-
-nav li {
- background: var(--navitem-bg);
-}
-
-nav a {
- color: var(--navitem-link);
-}
-
-nav li:hover {
- background: var(--navitem-bg-hl);
- color: var(--fg-hl);
-}
-
-nav li:hover > a {
- color: var(--navitem-link-hl);
-}
-
-
-/* footer */
-body > footer {
- background: linear-gradient(var(--bg) calc(100% - 1.5em), calc(100% - 1em), var(--body-bg) calc(100% - 0.5em));
-}
-
-
-/* image gallery (not really being used rn) */
-div.gallery {
- border: 1px solid var(--fg-hl);
-}
-
-div.gallery:hover {
- border: var(--fg-acc5);
-}
-
-
-/* switch */
-.slider {
- background-color: var(--switch-bg);
-}
-
-.theme-switch-container i.fa-moon {
- color: var(--switch-moon);
-}
-
-.theme-switch-container i.fa-sun {
- color: var(--switch-sun);
-}
-
-.slider:before {
- background-color: var(--switch-slider);
-}
-
-.switch input:checked + .slider {
- background-color: var(--switch-toggled-bg);
-}
-
-.switch input:focus + .slider {
- box-shadow: 0 0 0.1em var(--switch-ol);
-}
diff --git a/static/css/nordtheme.css b/static/css/nordtheme.css
deleted file mode 100644
index 00d524b..0000000
--- a/static/css/nordtheme.css
+++ /dev/null
@@ -1,183 +0,0 @@
-/*
- * Copyright (c) 2016-present Arctic Ice Studio <development@arcticicestudio.com>
- * Copyright (c) 2016-present Sven Greb <development@svengreb.de>
- *
- * Project: Nord
- * Version: 0.2.0
- * Repository: https://github.com/arcticicestudio/color
- * License: MIT
- * References:
- * https://www.w3.org/TR/css-variables
- * https://www.w3.org/TR/selectors/#root-pseudo
- * https://drafts.csswg.org/css-variables
- * https://developer.mozilla.org/en-US/docs/Web/CSS/Using_CSS_variables
- * http://warpspire.com/kss
- * https://github.com/kss-node/kss-node
- */
-
-/*
-An arctic, north-bluish color palette.
-Created for the clean- and minimal flat design pattern to achieve a optimal focus and readability for code syntax
-highlighting and UI.
-It consists of a total of sixteen, carefully selected, dimmed pastel colors for a eye-comfortable, but yet colorful
-ambiance.
-Styleguide Nord
- */
-
-:root {
- /*
- Base component color of "Polar Night".
- Used for texts, backgrounds, carets and structuring characters like curly- and square brackets.
- Markup:
- <div style="background-color:#2e3440; width=60; height=60"></div>
- Styleguide Nord - Polar Night
- */
---color0: #2e3440;
-
-/*
-Lighter shade color of the base component color.
-Used as a lighter background color for UI elements like status bars.
-Markup:
-<div style="background-color:#3b4252; width=60; height=60"></div>
-Styleguide Nord - Polar Night
- */
---color1: #3b4252;
-
-/*
-Lighter shade color of the base component color.
-Used as line highlighting in the editor.
-In the UI scope it may be used as selection- and highlight color.
-Markup:
-<div style="background-color:#434c5e; width=60; height=60"></div>
-Styleguide Nord - Polar Night
- */
---color2: #434c5e;
-
-/*
-Lighter shade color of the base component color.
-Used for comments, invisibles, indent- and wrap guide marker.
-In the UI scope used as pseudoclass color for disabled elements.
-Markup:
-<div style="background-color:#4c566a; width=60; height=60"></div>
-Styleguide Nord - Polar Night
- */
---color3: #4c566a;
-
-/*
-Base component color of "Snow Storm".
-Main color for text, variables, constants and attributes.
-In the UI scope used as semi-light background depending on the theme shading design.
-Markup:
-<div style="background-color:#d8dee9; width=60; height=60"></div>
-Styleguide Nord - Snow Storm
- */
---color4: #d8dee9;
-
-/*
-Lighter shade color of the base component color.
-Used as a lighter background color for UI elements like status bars.
-Used as semi-light background depending on the theme shading design.
-Markup:
-<div style="background-color:#e5e9f0; width=60; height=60"></div>
-Styleguide Nord - Snow Storm
- */
---color5: #e5e9f0;
-
-/*
-Lighter shade color of the base component color.
-Used for punctuations, carets and structuring characters like curly- and square brackets.
-In the UI scope used as background, selection- and highlight color depending on the theme shading design.
-Markup:
-<div style="background-color:#eceff4; width=60; height=60"></div>
-Styleguide Nord - Snow Storm
- */
---color6: #eceff4;
-
-/*
-Bluish core color.
-Used for classes, types and documentation tags.
-Markup:
-<div style="background-color:#8fbcbb; width=60; height=60"></div>
-Styleguide Nord - Frost
- */
---color7: #8fbcbb;
-
-/*
-Bluish core accent color.
-Represents the accent color of the color palette.
-Main color for primary UI elements and methods/functions.
-Can be used for
-- Markup quotes
-- Markup link URLs
-Markup:
-<div style="background-color:#88c0d0; width=60; height=60"></div>
-Styleguide Nord - Frost
- */
---color8: #88c0d0;
-
-/*
-Bluish core color.
-Used for language-specific syntactic/reserved support characters and keywords, operators, tags, units and
-punctuations like (semi)colons,commas and braces.
-Markup:
-<div style="background-color:#81a1c1; width=60; height=60"></div>
-Styleguide Nord - Frost
- */
---color9: #81a1c1;
-
-/*
-Bluish core color.
-Used for markup doctypes, import/include/require statements, pre-processor statements and at-rules (`@`).
-Markup:
-<div style="background-color:#5e81ac; width=60; height=60"></div>
-Styleguide Nord - Frost
- */
---color10: #5e81ac;
-
-/*
-Colorful component color.
-Used for errors, git/diff deletion and linter marker.
-Markup:
-<div style="background-color:#bf616a; width=60; height=60"></div>
-Styleguide Nord - Aurora
- */
---color11: #bf616a;
-
-/*
-Colorful component color.
-Used for annotations.
-Markup:
-<div style="background-color:#d08770; width=60; height=60"></div>
-Styleguide Nord - Aurora
- */
---color12: #d08770;
-
-/*
-Colorful component color.
-Used for escape characters, regular expressions and markup entities.
-In the UI scope used for warnings and git/diff renamings.
-Markup:
-<div style="background-color:#ebcb8b; width=60; height=60"></div>
-Styleguide Nord - Aurora
- */
---color13: #ebcb8b;
-
-/*
-Colorful component color.
-Main color for strings and attribute values.
-In the UI scope used for git/diff additions and success visualizations.
-Markup:
-<div style="background-color:#a3be8c; width=60; height=60"></div>
-Styleguide Nord - Aurora
- */
---color14: #a3be8c;
-
-/*
-Colorful component color.
-Used for numbers.
-Markup:
-<div style="background-color:#b48ead; width=60; height=60"></div>
-Styleguide Nord - Aurora
- */
---color15: #b48ead;
-}
diff --git a/static/css/style.css b/static/css/style.css
index 9be32e0..ec95b6a 100644
--- a/static/css/style.css
+++ b/static/css/style.css
@@ -24,6 +24,7 @@ body, html {
* {
box-sizing: border-box;
+ transition: all 0.25s ease-in-out;
}
body {
@@ -134,57 +135,38 @@ body > footer > span {
/* theme swticher */
-.switch {
+button.theme-switcher {
+ border: none;
+ font: inherit;
+ cursor: pointer;
position: relative;
- top: 0.2em;
- display: inline-block;
- width: 2em;
- height: 1em;
-}
-
-.switch input {
- opacity: 0;
- width: 0;
- height: 0;
-}
-
-.switch input:checked + .slider:before {
- -webkit-transform: translateX(0.9em);
- -ms-transform: translateX(0.9em);
- transform: translateX(0.9em);
+ border-radius: 5px;
+ padding-top: 0.2em;
+ padding-bottom: 0.2em;
+ padding-left: 0;
+ padding-right: 0;
+ margin-left: 0.2em;
+ margin-right: 0.2em;
}
-.slider {
- position: absolute;
- cursor: pointer;
- top: 0;
- bottom: 0;
- left: 0;
- right: 0;
- -webkit-transition: 0.4s;
- transition: 0.4s;
+button.theme-switcher > .fa-sun {
+ transform: translate(-0.5em, -1em);
}
-.slider:before {
- position:absolute;
- content: "";
- height: 0.8em;
- width: 0.8em;
- left: 0.1em;
- bottom: 0.1em;
- -webkit-transition: 0.4s;
- transition: 0.4s;
+.theme-light button.theme-switcher > .fa-sun {
+ transform: translateX(-0.5em);
+ transition: all 0.25s ease-in-out;
}
-.slider.round {
- border-radius: 1em;
+button.theme-switcher > .fa-moon {
+ transform: translate(0.5em, -1em);
}
-.slider.round:before {
- border-radius: 1em;
+.theme-dark button.theme-switcher > .fa-moon {
+ transform: translateX(0.5em);
+ transition: all 0.25s ease-in-out;
}
-
/* code blocks */
code.crypto {
font-size: smaller;
diff --git a/static/css/dark.css b/static/css/theme.css
index 31b025a..6fc0501 100644
--- a/static/css/dark.css
+++ b/static/css/theme.css
@@ -1,6 +1,52 @@
-@import './nordtheme.css';
-
+/* nord theme */
:root {
+ --color0: #2e3440;
+ --color1: #3b4252;
+ --color2: #434c5e;
+ --color3: #4c566a;
+ --color4: #d8dee9;
+ --color5: #e5e9f0;
+ --color6: #eceff4;
+ --color7: #8fbcbb;
+ --color8: #88c0d0;
+ --color9: #81a1c1;
+ --color10: #5e81ac;
+ --color11: #bf616a;
+ --color12: #d08770;
+ --color13: #ebcb8b;
+ --color14: #a3be8c;
+ --color15: #b48ead;
+}
+
+.theme-light {
+ --bg: var(--color5);
+ --body-bg: var(--color4);
+ --navitem-bg: var(--color9);
+ --navitem-bg-hl: var(--color10);
+
+ --fg: var(--color3);
+ --fg-hl: var(--color0);
+
+ --link: var(--color15);
+ --link-hl: var(--color7);
+ --navitem-link: var(--color8);
+ --navitem-link-hl: var(--color7);
+
+ --fg-acc1: var(--color11);
+ --fg-acc2: var(--color12);
+ --fg-acc3: var(--color13);
+ --fg-acc4: var(--color14);
+ --fg-acc5: var(--color15);
+
+ --switch-bg: var(--color9);
+ --switch-bg-hl: var(--color10);
+ --switch-moon: var(--color10);
+ --switch-sun: var(--color13);
+
+ --code-border: var(--color3);
+}
+
+.theme-dark {
--bg: var(--color3);
--body-bg: var(--color0);
--navitem-bg: var(--color1);
@@ -20,14 +66,12 @@
--fg-acc4: var(--color14);
--fg-acc5: var(--color15);
- --switch-bg: var(--color3);
- --switch-slider: var(--color0);
- --switch-toggled-bg: var(--color10);
- --switch-ol: var(--color4);
- --switch-moon: var(--color3);
+ --switch-bg: var(--color1);
+ --switch-bg-hl: var(--color2);
+ --switch-moon: var(--color10);
--switch-sun: var(--color13);
- --code-border: var(--fg);
+ --code-border: var(--color4);
}
/* general */
@@ -113,26 +157,23 @@ div.gallery:hover {
/* switch */
-.slider {
+button.theme-switcher {
background-color: var(--switch-bg);
}
-.theme-switch-container i.fa-moon {
- color: var(--switch-moon);
+button.theme-switcher:hover {
+ background-color: var(--switch-bg-hl);
}
-.theme-switch-container i.fa-sun {
- color: var(--switch-sun);
-}
-
-.slider:before {
- background-color: var(--switch-slider);
+button.theme-switcher > .fa-moon,
+button.theme-switcher > .fa-sun {
+ color: transparent;
}
-.switch input:checked + .slider {
- background-color: var(--switch-toggled-bg);
+.theme-dark button.theme-switcher > .fa-moon {
+ color: var(--switch-moon);
}
-.switch input:focus + .slider {
- box-shadow: 0 0 0.1em var(--switch-ol);
+.theme-light button.theme-switcher > .fa-sun {
+ color: var(--switch-sun);
}
diff --git a/static/scripts/theme.js b/static/scripts/theme.js
index 1a425d5..9036698 100644
--- a/static/scripts/theme.js
+++ b/static/scripts/theme.js
@@ -1,90 +1,32 @@
+// refactored code for a better solution found in https://medium.com/@haxzie/dark-and-light-theme-switcher-using-css-variables-and-pure-javascript-zocada-dd0059d72fa2
var local_storage = window.localStorage;
window.onload = () => {
let theme = local_storage.getItem('theme');
- let switch_theme = document.getElementById('theme-switch');
if(theme == null){
- local_storage.setItem('theme', 'dark');
- switch_theme.checked = true;
+ local_storage.setItem('theme', 'theme-dark');
}
else{
- if(theme == 'dark'){
- switch_theme.checked = true;
+ if(theme == 'theme-dark'){
+ setTheme('theme-dark');
}
else{
- switch_theme.checked = false;
-
- let theme = document.getElementById('theme-css');
-
- let href = theme.getAttribute('href');
- href = href.replace('dark.css', 'light.css');
- theme.setAttribute('href', href);
-
- /*
- let code_theme = document.getElementById('code-theme-css');
-
- let code_href;
- if (code_theme !== null){
- code_href = code_theme.getAttribute('href');
- code_href = code_href.replace('solarized-dark.min.css', 'solarized-light.min.css');
- code_theme.setAttribute('href', code_href);
- }
- */
+ setTheme('theme-light');
}
}
-
}
-function setTheme(){
- let switch_theme = document.getElementById('theme-switch');
-
- if(switch_theme.checked == true){
- local_storage.setItem('theme', 'dark');
- }
- else{
- local_storage.setItem('theme', 'light');
- }
+function setTheme(themeName){
+ local_storage.setItem('theme', themeName)
+ document.documentElement.className = themeName;
}
-// toggles between both themes, and then calls set theme to actually set it persistently.
function toggleTheme(){
- let theme = document.getElementById('theme-css');
- let href = theme.getAttribute('href');
-
- /*
- let code_theme = document.getElementById('code-theme-css');
- let code_href;
- if (code_theme !== null){
- code_href = code_theme.getAttribute('href');
- }
- */
-
- if(href.endsWith('dark.css')){
- href = href.replace('dark.css', 'light.css');
- /*
- if (code_theme !== null){
- code_href = code_href.replace('solarized-dark.min.css', 'solarized-light.min.css');
- }
- */
- }
- else if (href.endsWith('light.css')){
- href = href.replace('light.css', 'dark.css');
- /*
- if (code_theme !== null){
- code_href = code_href.replace('solarized-light.min.css', 'solarized-dark.min.css');
- }
- */
+ if (local_storage.getItem('theme') == 'theme-dark') {
+ setTheme('theme-light');
}
else{
- console.log('Wrong replacement.');
- }
-
- theme.setAttribute('href', href);
- /*
- if (code_theme !== null){
- code_theme.setAttribute('href', code_href);
+ setTheme('theme-dark');
}
- */
- setTheme();
}