diff options
| author | toasted-nutbread <toasted-nutbread@users.noreply.github.com> | 2020-05-10 14:07:25 -0400 | 
|---|---|---|
| committer | GitHub <noreply@github.com> | 2020-05-10 14:07:25 -0400 | 
| commit | 9742d5662bde1340a12c343599cc962e2b175803 (patch) | |
| tree | 1949c8f38fe1fa2cd70f64529a3831b68a497496 | |
| parent | 5752b23a8e802d556851eff8f6ea60785f93e0b3 (diff) | |
Use CSS variables for themes (#528)
* Update formatting
* Merge default tag color with category-less tags
* Use CSS variables for colors
* Add dark theme colors
* Move color variables into display.css
* Remove old stylesheets
* Update headings
* Bump minimum Firefox version to support CSS var()
* Revert popular kanji text color
| -rw-r--r-- | ext/bg/search.html | 2 | ||||
| -rw-r--r-- | ext/fg/float.html | 2 | ||||
| -rw-r--r-- | ext/manifest.json | 2 | ||||
| -rw-r--r-- | ext/mixed/css/display-dark.css | 103 | ||||
| -rw-r--r-- | ext/mixed/css/display-default.css | 103 | ||||
| -rw-r--r-- | ext/mixed/css/display.css | 184 | ||||
| -rw-r--r-- | ext/mixed/js/display.js | 6 | 
7 files changed, 167 insertions, 235 deletions
| diff --git a/ext/bg/search.html b/ext/bg/search.html index a30b1d60..f3f156d8 100644 --- a/ext/bg/search.html +++ b/ext/bg/search.html @@ -14,8 +14,6 @@          <link rel="stylesheet" type="text/css" href="/mixed/lib/bootstrap/css/bootstrap.min.css">          <link rel="stylesheet" type="text/css" href="/mixed/lib/bootstrap/css/bootstrap-theme.min.css">          <link rel="stylesheet" type="text/css" href="/mixed/css/display.css"> -        <link rel="stylesheet" type="text/css" href="/mixed/css/display-default.css" data-yomichan-theme-name="default"> -        <link rel="stylesheet alternate" type="text/css" href="/mixed/css/display-dark.css" data-yomichan-theme-name="dark">      </head>      <body>          <div class="container"> diff --git a/ext/fg/float.html b/ext/fg/float.html index 6f37de52..89952524 100644 --- a/ext/fg/float.html +++ b/ext/fg/float.html @@ -12,8 +12,6 @@          <link rel="icon" type="image/png" href="/mixed/img/icon64.png" sizes="64x64">          <link rel="icon" type="image/png" href="/mixed/img/icon128.png" sizes="128x128">          <link rel="stylesheet" href="/mixed/css/display.css"> -        <link rel="stylesheet" type="text/css" href="/mixed/css/display-default.css" data-yomichan-theme-name="default"> -        <link rel="stylesheet alternate" type="text/css" href="/mixed/css/display-dark.css" data-yomichan-theme-name="dark">      </head>      <body>          <div id="spinner" hidden><img src="/mixed/img/spinner.gif"></div> diff --git a/ext/manifest.json b/ext/manifest.json index 80823fc4..865fe3f3 100644 --- a/ext/manifest.json +++ b/ext/manifest.json @@ -88,7 +88,7 @@      "applications": {          "gecko": {              "id": "alex@foosoft.net", -            "strict_min_version": "53.0" +            "strict_min_version": "55.0"          }      }  } diff --git a/ext/mixed/css/display-dark.css b/ext/mixed/css/display-dark.css deleted file mode 100644 index acfa2782..00000000 --- a/ext/mixed/css/display-dark.css +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (C) 2019-2020  Yomichan Authors - * - * This program is free software: you can redistribute it and/or modify - * it under the entrys of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program.  If not, see <https://www.gnu.org/licenses/>. - */ - - -body { background-color: #1e1e1e; color: #d4d4d4; } - -h2 { border-bottom-color: #2f2f2f; } - -.navigation-header { -    background-color: #1e1e1e; -    border-bottom-color: #2f2f2f; -} - -.entry+.entry { border-top-color: #2f2f2f; } - -.kanji-glyph-data>tbody>tr>* { border-top-color: #3f3f3f; } - -.tag { color: #e1e1e1; } -.tag[data-category=default]      { background-color: #69696e; } -.tag[data-category=name]         { background-color: #489148; } -.tag[data-category=expression]   { background-color: #b07f39; } -.tag[data-category=popular]      { background-color: #025caa; } -.tag[data-category=frequent]     { background-color: #4490a7; } -.tag[data-category=archaism]     { background-color: #b04340; } -.tag[data-category=dictionary]   { background-color: #9057ad; } -.tag[data-category=frequency]    { background-color: #489148; } -.tag[data-category=partOfSpeech] { background-color: #565656; } -.tag[data-category=search]       { background-color: #69696e; } -.tag[data-category=pitch-accent-dictionary] { background-color: #6640be; } - -.term-reasons { color: #888888; } - -.term-expression>.term-expression-text .kanji-link { -    border-bottom-color: #888888; -    color: #cccccc; -} - -.term-expression[data-frequency=popular]>.term-expression-text, -.term-expression[data-frequency=popular]>.term-expression-text .kanji-link { -    color: #0275d8; -} - -.term-expression[data-frequency=rare]>.term-expression-text, -.term-expression[data-frequency=rare]>.term-expression-text .kanji-link { -    color: #666666; -} - -.term-definition-list, -.term-pitch-accent-group-list, -.term-pitch-accent-disambiguation-list, -.kanji-glossary-list { -    color: #888888; -} - -.term-glossary, -.term-pitch-accent, -.kanji-glossary { -    color: #d4d4d4; -} - -.icon-checkbox:checked + label { -    /* invert colors */ -    background-color: #d4d4d4; -    color: #1e1e1e; -} - -.term-pitch-accent-container { border-bottom-color: #2f2f2f; } - -.term-pitch-accent-character:before { border-color: #ffffff; } - -.term-pitch-accent-graph-line, -.term-pitch-accent-graph-line-tail, -#term-pitch-accent-graph-dot, -#term-pitch-accent-graph-dot-downstep, -#term-pitch-accent-graph-triangle { -    stroke: #ffffff; -} - -#term-pitch-accent-graph-dot, -#term-pitch-accent-graph-dot-downstep>circle:last-of-type { -    fill: #ffffff; -} - -.term-glossary-image-container { -    background-color: #2f2f2f; -} -.term-glossary-image-container-overlay { -    color: #888888; -} diff --git a/ext/mixed/css/display-default.css b/ext/mixed/css/display-default.css deleted file mode 100644 index 70f81eb6..00000000 --- a/ext/mixed/css/display-default.css +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (C) 2019-2020  Yomichan Authors - * - * This program is free software: you can redistribute it and/or modify - * it under the entrys of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program.  If not, see <https://www.gnu.org/licenses/>. - */ - - -body { background-color: #ffffff; color: #333333; } - -h2 { border-bottom-color: #eeeeee; } - -.navigation-header { -    background-color: #ffffff; -    border-bottom-color: #eeeeee; -} - -.entry+.entry { border-top-color: #eeeeee; } - -.kanji-glyph-data>tbody>tr>* { border-top-color: #dddddd; } - -.tag { color: #ffffff; } -.tag[data-category=default]      { background-color: #8a8a91; } -.tag[data-category=name]         { background-color: #5cb85c; } -.tag[data-category=expression]   { background-color: #f0ad4e; } -.tag[data-category=popular]      { background-color: #0275d8; } -.tag[data-category=frequent]     { background-color: #5bc0de; } -.tag[data-category=archaism]     { background-color: #d9534f; } -.tag[data-category=dictionary]   { background-color: #aa66cc; } -.tag[data-category=frequency]    { background-color: #5cb85c; } -.tag[data-category=partOfSpeech] { background-color: #565656; } -.tag[data-category=search]       { background-color: #8a8a91; } -.tag[data-category=pitch-accent-dictionary] { background-color: #6640be; } - -.term-reasons { color: #777777; } - -.term-expression>.term-expression-text .kanji-link { -    border-bottom-color: #777777; -    color: #333333; -} - -.term-expression[data-frequency=popular]>.term-expression-text, -.term-expression[data-frequency=popular]>.term-expression-text .kanji-link { -    color: #0275d8; -} - -.term-expression[data-frequency=rare]>.term-expression-text, -.term-expression[data-frequency=rare]>.term-expression-text .kanji-link { -    color: #999999; -} - -.term-definition-list, -.term-pitch-accent-group-list, -.term-pitch-accent-disambiguation-list, -.kanji-glossary-list { -    color: #777777; -} - -.term-glossary, -.term-pitch-accent, -.kanji-glossary { -    color: #000000; -} - -.icon-checkbox:checked + label { -    /* invert colors */ -    background-color: #333333; -    color: #ffffff; -} - -.term-pitch-accent-container { border-bottom-color: #eeeeee; } - -.term-pitch-accent-character:before { border-color: #000000; } - -.term-pitch-accent-graph-line, -.term-pitch-accent-graph-line-tail, -#term-pitch-accent-graph-dot, -#term-pitch-accent-graph-dot-downstep, -#term-pitch-accent-graph-triangle { -    stroke: #000000; -} - -#term-pitch-accent-graph-dot, -#term-pitch-accent-graph-dot-downstep>circle:last-of-type { -    fill: #000000; -} - -.term-glossary-image-container { -    background-color: #eeeeee; -} -.term-glossary-image-container-overlay { -    color: #777777; -} diff --git a/ext/mixed/css/display.css b/ext/mixed/css/display.css index 4f43af6f..8b567173 100644 --- a/ext/mixed/css/display.css +++ b/ext/mixed/css/display.css @@ -15,6 +15,72 @@   * along with this program.  If not, see <https://www.gnu.org/licenses/>.   */ +/* + * Variables + */ + +:root { +    --background-color: #ffffff; +    --glossary-image-background-color: #eeeeee; + +    --dark-text-color: #000000; +    --default-text-color: #333333; +    --light-text-color: #777777; +    --very-light-text-color: #999999; + +    --light-border-color: #eeeeee; +    --medium-border-color: #dddddd; +    --dark-border-color: #777777; + +    --popuplar-kanji-text-color: #0275d8; + +    --pitch-accent-annotation-color: #000000; + +    --tag-text-color: #ffffff; +    --tag-default-background-color: #8a8a91; +    --tag-name-background-color: #5cb85c; +    --tag-expression-background-color: #f0ad4e; +    --tag-popular-background-color: #0275d8; +    --tag-frequent-background-color: #5bc0de; +    --tag-archaism-background-color: #d9534f; +    --tag-dictionary-background-color: #aa66cc; +    --tag-frequency-background-color: #5cb85c; +    --tag-part-of-speech-background-color: #565656; +    --tag-search-background-color: #8a8a91; +    --tag-pitch-accent-dictionary-background-color: #6640be; +} + +:root[data-yomichan-theme=dark] { +    --background-color: #1e1e1e; +    --glossary-image-background-color: #2f2f2f; + +    --dark-text-color: #d8d8d8; +    --default-text-color: #d4d4d4; +    --light-text-color: #888888; +    --very-light-text-color: #666666; + +    --light-border-color: #2f2f2f; +    --medium-border-color: #3f3f3f; +    --dark-border-color: #888888; + +    --popuplar-kanji-text-color: #0275d8; + +    --pitch-accent-annotation-color: #ffffff; + +    --tag-text-color: #e1e1e1; +    --tag-default-background-color: #69696e; +    --tag-name-background-color: #489148; +    --tag-expression-background-color: #b07f39; +    --tag-popular-background-color: #025caa; +    --tag-frequent-background-color: #4490a7; +    --tag-archaism-background-color: #b04340; +    --tag-dictionary-background-color: #9057ad; +    --tag-frequency-background-color: #489148; +    --tag-part-of-speech-background-color: #565656; +    --tag-search-background-color: #69696e; +    --tag-pitch-accent-dictionary-background-color: #6640be; +} +  /*   * Fonts @@ -25,6 +91,7 @@      src: url('/mixed/ttf/kanji-stroke-orders.ttf');  } +  /*   * General   */ @@ -45,6 +112,8 @@ body {      border: 0;      padding: 0;      overflow-y: scroll; /* always show scroll bar */ +    background-color: var(--background-color); +    color: var(--default-text-color);  }  ol, ul { @@ -68,10 +137,10 @@ h2 {      font-size: 1.25em;      font-weight: normal;      margin: 0.25em 0 0; -    border-bottom-width: 0.05714285714285714em; /* 14px * 1.25em => 1px */ -    border-bottom-style: solid; +    border-bottom: 0.05714285714285714em solid var(--light-border-color); /* 14px * 1.25em => 1px */  } +  /*   * Navigation   */ @@ -83,8 +152,8 @@ h2 {      height: 2.1em;      box-sizing: border-box;      padding: 0.25em 0.5em; -    border-bottom-width: 0.07142857em; /* 14px => 1px */ -    border-bottom-style: solid; +    border-bottom: 0.07142857em solid var(--light-border-color); /* 14px => 1px */ +    background-color: var(--background-color);      z-index: 10;  } @@ -131,6 +200,12 @@ h2 {      user-select: none;  } +.icon-checkbox:checked+label { +    /* Invert colors */ +    background-color: var(--default-text-color); +    color: var(--background-color); +} +  #query-parser-content {      margin-top: 0.5em;      font-size: 2em; @@ -206,11 +281,21 @@ button.action-button {  }  .term-expression .kanji-link { -    border-bottom-width: 0.03571428em; /* 28px => 1px */ -    border-bottom-style: dashed; +    border-bottom: 0.03571428em dashed var(--dark-border-color); /* 28px => 1px */ +    color: var(--default-text-color);      text-decoration: none;  } +.term-expression[data-frequency=popular]>.term-expression-text, +.term-expression[data-frequency=popular]>.term-expression-text .kanji-link { +    color: var(--popuplar-kanji-text-color); +} + +.term-expression[data-frequency=rare]>.term-expression-text, +.term-expression[data-frequency=rare]>.term-expression-text .kanji-link { +    color: var(--very-light-text-color); +} +  .entry:not(.entry-current) .current {      display: none;  } @@ -225,6 +310,48 @@ button.action-button {      white-space: nowrap;      vertical-align: baseline;      border-radius: 0.25em; +    color: var(--tag-text-color); +    background-color: var(--tag-default-background-color); +} + +.tag[data-category=name] { +    background-color: var(--tag-name-background-color); +} + +.tag[data-category=expression] { +    background-color: var(--tag-expression-background-color); +} + +.tag[data-category=popular] { +    background-color: var(--tag-popular-background-color); +} + +.tag[data-category=frequent] { +    background-color: var(--tag-frequent-background-color); +} + +.tag[data-category=archaism] { +    background-color: var(--tag-archaism-background-color); +} + +.tag[data-category=dictionary] { +    background-color: var(--tag-dictionary-background-color); +} + +.tag[data-category=frequency] { +    background-color: var(--tag-frequency-background-color); +} + +.tag[data-category=partOfSpeech] { +    background-color: var(--tag-part-of-speech-background-color); +} + +.tag[data-category=search] { +    background-color: var(--tag-search-background-color); +} + +.tag[data-category=pitch-accent-dictionary] { +    background-color: var(--tag-pitch-accent-dictionary-background-color);  }  .tag-inner { @@ -249,8 +376,7 @@ button.action-button {  }  .entry+.entry { -    border-top-width: 0.07142857em; /* 14px => 1px */ -    border-top-style: solid; +    border-top: 0.07142857em solid var(--light-border-color); /* 14px => 1px */  }  .entry[data-type=term][data-expression-multi=true] .actions>.action-play-audio { @@ -259,6 +385,7 @@ button.action-button {  .term-reasons {      display: inline-block; +    color: var(--light-text-color);  }  .term-reasons>.term-reason+.term-reason-separator+.term-reason:before { @@ -346,6 +473,7 @@ button.action-button {      margin: 0;      padding: 0;      list-style-type: none; +    color: var(--light-text-color);  }  .term-definition-list:not([data-count="0"]):not([data-count="1"]) { @@ -364,6 +492,10 @@ button.action-button {      list-style-type: circle;  } +.term-glossary { +    color: var(--dark-text-color); +} +  .term-definition-disambiguation-list[data-count="0"] {      display: none;  } @@ -445,8 +577,7 @@ button.action-button {  }  .term-pitch-accent-container { -    border-bottom-width: 0.05714285714285714em; /* 14px * 1.25em => 1px */ -    border-bottom-style: solid; +    border-bottom: 0.05714285714285714em solid var(--light-border-color); /* 14px * 1.25em => 1px */      padding-bottom: 0.25em;      margin-bottom: 0.25em;  } @@ -455,6 +586,7 @@ button.action-button {      margin: 0;      padding: 0;      list-style-type: none; +    color: var(--light-text-color);  }  .term-pitch-accent-group-list:not([data-count="0"]):not([data-count="1"]) { @@ -478,6 +610,7 @@ button.action-button {  .term-pitch-accent {      display: inline;      line-height: 1.5em; +    color: var(--dark-text-color);  }  .term-pitch-accent-list:not([data-count="0"]):not([data-count="1"])>.term-pitch-accent { @@ -490,6 +623,7 @@ button.action-button {  .term-pitch-accent-disambiguation-list {      padding-right: 0.25em; +    color: var(--light-text-color);  }  .term-pitch-accent-disambiguation-list:before { @@ -522,6 +656,9 @@ button.action-button {      display: inline-block;      position: relative;  } +.term-pitch-accent-character:before { +    border-color: var(--pitch-accent-annotation-color); +}  .term-pitch-accent-character[data-pitch='high']:before {      content: "";      display: block; @@ -586,31 +723,36 @@ button.action-button {  .term-pitch-accent-graph-line,  .term-pitch-accent-graph-line-tail {      fill: none; -    stroke: #000000; +    stroke: var(--pitch-accent-annotation-color);      stroke-width: 5;  }  .term-pitch-accent-graph-line-tail {      stroke-dasharray: 5 5;  }  #term-pitch-accent-graph-dot { -    fill: #000000; -    stroke: #000000; +    fill: var(--pitch-accent-annotation-color); +    stroke: var(--pitch-accent-annotation-color);      stroke-width: 5;  }  #term-pitch-accent-graph-dot-downstep {      fill: none; -    stroke: #000000; +    stroke: var(--pitch-accent-annotation-color);      stroke-width: 5;  }  #term-pitch-accent-graph-dot-downstep>circle:last-of-type { -    fill: #000000; +    fill: var(--pitch-accent-annotation-color);  }  #term-pitch-accent-graph-triangle {      fill: none; -    stroke: #000000; +    stroke: var(--pitch-accent-annotation-color);      stroke-width: 5;  } + +/* + * Glossary images + */ +  .term-glossary-image-container {      display: inline-block;      white-space: nowrap; @@ -620,6 +762,7 @@ button.action-button {      line-height: 0;      font-size: 0.07142857em; /* 14px => 1px */      overflow: hidden; +    background-color: var(--glossary-image-background-color);  }  .term-glossary-image-link { @@ -642,6 +785,7 @@ button.action-button {      display: table;      table-layout: fixed;      white-space: normal; +    color: var(--light-text-color);  }  .term-glossary-item[data-has-image=true][data-image-load-state=load-error] .term-glossary-image-container-overlay:after { @@ -746,8 +890,7 @@ button.action-button {  }  .kanji-glyph-data>tbody>tr>* { -    border-top-width: 0.07142857em; /* 14px => 1px */ -    border-top-style: solid; +    border-top: 0.07142857em solid var(--medium-border-color); /* 14px => 1px */      text-align: left;      vertical-align: top;      padding: 0.36em; @@ -783,9 +926,14 @@ button.action-button {      margin: 0;      padding: 0;      list-style-type: none; +    color: var(--light-text-color);  }  .kanji-glossary-list:not([data-count="0"]):not([data-count="1"]) {      padding-left: 1.4em;      list-style-type: decimal;  } + +.kanji-glossary { +    color: var(--dark-text-color); +} diff --git a/ext/mixed/js/display.js b/ext/mixed/js/display.js index 783af7d8..2e59b4ff 100644 --- a/ext/mixed/js/display.js +++ b/ext/mixed/js/display.js @@ -399,12 +399,6 @@ class Display {      updateTheme(themeName) {          document.documentElement.dataset.yomichanTheme = themeName; - -        const stylesheets = document.querySelectorAll('link[data-yomichan-theme-name]'); -        for (const stylesheet of stylesheets) { -            const match = (stylesheet.dataset.yomichanThemeName === themeName); -            stylesheet.rel = (match ? 'stylesheet' : 'stylesheet alternate'); -        }      }      setCustomCss(css) { |