diff options
Diffstat (limited to 'assets')
-rw-r--r-- | assets/css/prism-solarizeddark.css | 127 | ||||
-rw-r--r-- | assets/css/prism-solarizedlight.css | 127 | ||||
-rw-r--r-- | assets/js/fuji.js | 137 | ||||
-rw-r--r-- | assets/scss/_fuji-theme/_base.scss | 63 | ||||
-rw-r--r-- | assets/scss/_fuji-theme/_dark-diff.scss | 35 | ||||
-rw-r--r-- | assets/scss/_fuji-theme/_dark.scss | 171 | ||||
-rw-r--r-- | assets/scss/_fuji-theme/_light.scss | 135 | ||||
-rw-r--r-- | assets/scss/_fuji-theme/_style.scss | 203 | ||||
-rw-r--r-- | assets/scss/_global.scss | 2 | ||||
-rw-r--r-- | assets/scss/fuji.scss | 4 |
10 files changed, 442 insertions, 562 deletions
diff --git a/assets/css/prism-solarizeddark.css b/assets/css/prism-solarizeddark.css deleted file mode 100644 index 9186fed..0000000 --- a/assets/css/prism-solarizeddark.css +++ /dev/null @@ -1,127 +0,0 @@ -/* - Solarized Color Schemes originally by Ethan Schoonover - http://ethanschoonover.com/solarized - - Ported for PrismJS by Hector Matos - Website: https://krakendev.io - Twitter Handle: https://twitter.com/allonsykraken) -*/ - -/* -SOLARIZED HEX ---------- ------- -base03 #002b36 -base02 #8aa2d3 -base01 #586e75 -base00 #657b83 -base0 #839496 -base1 #93a1a1 -base2 #eee8d5 -base3 #fdf6e3 -yellow #b58900 -orange #cb4b16 -red #dc322f -magenta #d33682 -violet #6c71c4 -blue #268bd2 -cyan #2aa198 -green #859900 -*/ - -pre, -code { - background-color: #4d5158; -} - -code[class*='language-'], -pre[class*='language-'] { - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; -} - -pre[class*='language-']::-moz-selection, -pre[class*='language-'] ::-moz-selection, -code[class*='language-']::-moz-selection, -code[class*='language-'] ::-moz-selection { - color: #fffffd; - background-color: #8aa2d3; /* base02 */ -} - -pre[class*='language-']::selection, -pre[class*='language-'] ::selection, -code[class*='language-']::selection, -code[class*='language-'] ::selection { - color: #fffffd; - background-color: #8aa2d3; /* base02 */ -} - -.token.comment, -.token.prolog, -.token.doctype, -.token.cdata { - color: #93a1a1; /* base1 */ -} - -.token.punctuation { - color: #586e75; /* base01 */ -} - -.token.namespace { - opacity: 0.7; -} - -.token.property, -.token.tag, -.token.boolean, -.token.number, -.token.constant, -.token.symbol, -.token.deleted { - color: #268bd2; /* blue */ -} - -.token.selector, -.token.attr-name, -.token.string, -.token.char, -.token.builtin, -.token.url, -.token.inserted { - color: #2aa198; /* cyan */ -} - -.token.entity { - color: #657b83; /* base00 */ - background: #eee8d5; /* base2 */ -} - -.token.atrule, -.token.attr-value, -.token.keyword { - color: #859900; /* green */ -} - -.token.function, -.token.class-name { - color: #b58900; /* yellow */ -} - -.token.regex, -.token.important, -.token.variable { - color: #cb4b16; /* orange */ -} - -.token.important, -.token.bold { - font-weight: 600; -} -.token.italic { - font-style: italic; -} diff --git a/assets/css/prism-solarizedlight.css b/assets/css/prism-solarizedlight.css deleted file mode 100644 index 51026ae..0000000 --- a/assets/css/prism-solarizedlight.css +++ /dev/null @@ -1,127 +0,0 @@ -/* - Solarized Color Schemes originally by Ethan Schoonover - http://ethanschoonover.com/solarized - - Ported for PrismJS by Hector Matos - Website: https://krakendev.io - Twitter Handle: https://twitter.com/allonsykraken) -*/ - -/* -SOLARIZED HEX ---------- ------- -base03 #002b36 -base02 #8aa2d3 -base01 #586e75 -base00 #657b83 -base0 #839496 -base1 #93a1a1 -base2 #eee8d5 -base3 #fdf6e3 -yellow #b58900 -orange #cb4b16 -red #dc322f -magenta #d33682 -violet #6c71c4 -blue #268bd2 -cyan #2aa198 -green #859900 -*/ - -pre, -code { - background-color: #f6f8fa; -} - -code[class*='language-'], -pre[class*='language-'] { - -moz-tab-size: 4; - -o-tab-size: 4; - tab-size: 4; - - -webkit-hyphens: none; - -moz-hyphens: none; - -ms-hyphens: none; - hyphens: none; -} - -pre[class*='language-']::-moz-selection, -pre[class*='language-'] ::-moz-selection, -code[class*='language-']::-moz-selection, -code[class*='language-'] ::-moz-selection { - color: #fffffd; - background-color: #8aa2d3; /* base02 */ -} - -pre[class*='language-']::selection, -pre[class*='language-'] ::selection, -code[class*='language-']::selection, -code[class*='language-'] ::selection { - color: #fffffd; - background-color: #8aa2d3; /* base02 */ -} - -.token.comment, -.token.prolog, -.token.doctype, -.token.cdata { - color: #93a1a1; /* base1 */ -} - -.token.punctuation { - color: #586e75; /* base01 */ -} - -.token.namespace { - opacity: 0.7; -} - -.token.property, -.token.tag, -.token.boolean, -.token.number, -.token.constant, -.token.symbol, -.token.deleted { - color: #268bd2; /* blue */ -} - -.token.selector, -.token.attr-name, -.token.string, -.token.char, -.token.builtin, -.token.url, -.token.inserted { - color: #2aa198; /* cyan */ -} - -.token.entity { - color: #657b83; /* base00 */ - background: #eee8d5; /* base2 */ -} - -.token.atrule, -.token.attr-value, -.token.keyword { - color: #859900; /* green */ -} - -.token.function, -.token.class-name { - color: #b58900; /* yellow */ -} - -.token.regex, -.token.important, -.token.variable { - color: #cb4b16; /* orange */ -} - -.token.important, -.token.bold { - font-weight: 600; -} -.token.italic { - font-style: italic; -} diff --git a/assets/js/fuji.js b/assets/js/fuji.js new file mode 100644 index 0000000..eda8723 --- /dev/null +++ b/assets/js/fuji.js @@ -0,0 +1,137 @@ +'use strict'; + +// get current theme +function getNowTheme() { + let nowTheme = document.body.getAttribute('data-theme'); + if (nowTheme === 'auto') { + return window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; + } else { + return nowTheme === 'dark' ? 'dark' : 'light'; + } +} + +// update medium-zoom theme +function updateMeidumTheme(mediumInst) { + let targetTheme = getNowTheme(); + if (mediumInst) { + mediumInst.detach(); + if (targetTheme === 'dark') { + mediumInst = mediumZoom('.img-zoomable', { + background: '#2f3136', + }); + } else { + mediumInst = mediumZoom('.img-zoomable', { + background: '#fffffd', + }); + } + } +} + +// update utterances theme +function updateUtterancesTheme(utterancesFrame) { + let targetTheme = getNowTheme(); + if (utterancesFrame) { + if (targetTheme === 'dark') { + utterancesFrame.contentWindow.postMessage( + { + type: 'set-theme', + theme: 'photon-dark', + }, + 'https://utteranc.es' + ); + } else { + utterancesFrame.contentWindow.postMessage( + { + type: 'set-theme', + theme: 'github-light', + }, + 'https://utteranc.es' + ); + } + } +} + +// remove empty ul in toc if article only have ## and ### +if (document.querySelectorAll('.sidebar-toc ul ul').length > 0) { + document.querySelectorAll('.sidebar-toc ul ul').forEach((value, key, parent) => { + value.setAttribute('style', 'display: none;'); + }); +} + +// to-top button +document.querySelector('.btn .btn-scroll-top').addEventListener('click', () => { + document.documentElement.scrollTop = 0; +}); + +// init medium-zoom +var mediumInst; // medium-zoom instance +if (getNowTheme() === 'dark') { + mediumInst = mediumZoom('.img-zoomable', { + background: '#2f3136', + }); +} else { + mediumInst = mediumZoom('.img-zoomable', { + background: '#fffffd', + }); +} + +// if in post page and using utterances +// add utterances comment loading indicator +if (document.querySelector('.post-loading')) { + var commentStatus; // utterence status + var commentLoadingTime = 0; // loading time passed + var commentCheckInterval = self.setInterval(checkUtterances, 500); + + function checkUtterances() { + if (document.querySelector('.post-comment .utterances')) { + commentStatus = document.querySelector('.post-comment .utterances').getAttribute('style'); + } + if (commentStatus) { + clearInterval(commentCheckInterval); + updateUtterancesTheme(document.querySelector('.post-comment iframe')); + document.querySelector('.post-loading').setAttribute('style', 'display: none;'); + } else { + if (++commentLoadingTime > 20) { + clearInterval(commentCheckInterval); + document.querySelector('.post-comment').setAttribute('style', 'display: none;'); + document.querySelector('.post-loading i').className = 'far fa-times-circle'; + } + } + } +} + +// theme switch button +document.querySelector('.btn .btn-toggle-mode').addEventListener('click', () => { + let nowTheme = getNowTheme(); + let domTheme = document.body.getAttribute('data-theme'); + let systemTheme = window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light'; + + if (domTheme === 'auto') { + // if now in auto mode, switch to user mode + document.body.setAttribute('data-theme', nowTheme === 'light' ? 'dark' : 'light'); + localStorage.setItem('fuji_data-theme', nowTheme === 'light' ? 'dark' : 'light'); + } else if (domTheme === 'light') { + // if now in user mode and light mode + document.body.setAttribute('data-theme', 'dark'); + // if the theme want to switch is system theme + localStorage.setItem('fuji_data-theme', systemTheme === 'dark' ? 'auto' : 'dark'); + } else { + // if now in user mode and dark mode + document.body.setAttribute('data-theme', 'light'); + // if the theme want to switch is system theme + localStorage.setItem('fuji_data-theme', systemTheme === 'light' ? 'auto' : 'light'); + } + + // update medium background + updateMeidumTheme(mediumInst); + // switch comment area theme + // only works after comment area are initialized + if (document.querySelector('.post-loading') && commentStatus) { + updateUtterancesTheme(document.querySelector('.post-comment iframe')); + } + if (document.querySelector('#disqus_thread') && typeof DISQUS !== 'undefined') { + DISQUS.reset({ + reload: true, + }); + } +}); diff --git a/assets/scss/_fuji-theme/_base.scss b/assets/scss/_fuji-theme/_base.scss new file mode 100644 index 0000000..d35d8b6 --- /dev/null +++ b/assets/scss/_fuji-theme/_base.scss @@ -0,0 +1,63 @@ +@mixin light { + --color-mode: 'light'; + --color-primary: #8aa2d3; // https://irocore.com/aofuji/ + --color-secondary: #8f82bc; // https://irocore.com/fujimurasaki/ + --color-focus: #3b469b; // https://irocore.com/aomurasaki/ + --color-mute: #9ea1a3; // https://irocore.com/suzu-iro/ + --color-font: #3f4551; // https://irocore.com/konnezu/ + --color-divider: #e5e2e4; // https://irocore.com/komachinezu/ + --color-bg: #fffffd; // https://irocore.com/shiro/ + --color-codebg: #f6f8fa; // GitHub +} + +@mixin dark { + --color-mode: 'dark'; + --color-primary: #8aa2d3; // https://irocore.com/aofuji/ + --color-secondary: #bab1df; // kai https://irocore.com/fujimurasaki/ + --color-focus: #e6e6e6; // https://irocore.com/shironezumi/ + --color-mute: #9ea1a3; // https://irocore.com/suzu-iro/ + --color-font: #c0c0c0; // https://irocore.com/gin-iro/ + --color-divider: #4d5158; // Discord + --color-bg: #2f3136; // Discord + --color-codebg: #414449; // kai GitHub +} + +body[data-theme='auto'] { + @include light(); + + @media (prefers-color-scheme: dark) { + @include dark(); + @import '_dark-diff'; // things different from light + } +} + +body[data-theme='light'] { + @include light(); +} + +body[data-theme='dark'] { + @include dark(); + @import '_dark-diff'; // things different from light +} + +@mixin link-1 { + a { + color: var(--color-primary); + } + + a:hover { + color: var(--color-secondary); + } +} + +@mixin link-2 { + a { + color: var(--color-secondary); + } + + a:hover { + color: var(--color-focus); + } +} + +$divider: 2px solid var(--color-divider); diff --git a/assets/scss/_fuji-theme/_dark-diff.scss b/assets/scss/_fuji-theme/_dark-diff.scss new file mode 100644 index 0000000..55f596f --- /dev/null +++ b/assets/scss/_fuji-theme/_dark-diff.scss @@ -0,0 +1,35 @@ +img { + filter: brightness(60%); +} + +table { + th, + td { + border-color: var(--color-font); + } + + tr { + background-color: var(--color-bg); + border-color: var(--color-font); + + &:nth-child(2n) { + background-color: var(--color-divider); + } + } +} + +#post-aplayer { + background-color: var(--color-divider); +} + +.aplayer .aplayer-info .aplayer-music .aplayer-author { + color: var(--color-font) !important; +} + +.aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon path { + fill: var(--color-font) !important; +} + +.aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon:hover path { + fill: var(--color-focus) !important; +} diff --git a/assets/scss/_fuji-theme/_dark.scss b/assets/scss/_fuji-theme/_dark.scss deleted file mode 100644 index 9be3b61..0000000 --- a/assets/scss/_fuji-theme/_dark.scss +++ /dev/null @@ -1,171 +0,0 @@ -$color-primary-dark: #8aa2d3; // https://irocore.com/aofuji/ -$color-primary-dark-dark: #e6e6e6; // https://irocore.com/shironezumi/ -$color-secondary-dark: #bab1df; // https://irocore.com/fujimurasaki/ -$color-mute-dark: #9ea1a3; // https://irocore.com/suzu-iro/ -$color-font-dark: #c0c0c0; // https://irocore.com/gin-iro/ -$color-divider-dark: #4d5158; // discord -$color-bg-dark: #2f3136; // discord - -$divider-dark: 2px solid $color-divider-dark; - -@mixin link-1 { - a { - color: $color-primary-dark; - } - - a:hover { - color: $color-secondary-dark; - } -} - -@mixin link-2 { - a { - color: $color-secondary-dark; - } - - a:hover { - color: $color-primary-dark-dark; - } -} - -body[data-theme='dark'] { - background-color: $color-bg-dark; - color: $color-font-dark; - - @include link-1(); - - .post-summary, - .post-meta { - @include link-2(); - } - - .pag-current a, - .pag-current a:hover { - color: $color-primary-dark-dark; - } - - .title-sub, - .post-meta { - color: $color-mute-dark; - } - - header, - .page-info { - border-bottom: $divider-dark; - } - - .post + .post, - .pagination, - footer { - border-top: $divider-dark; - } - - .post-meta-archive { - @include link-2(); - - color: $color-mute-dark; - } - - @media screen and (max-width: $width-md) { - .sidebar { - border-top: $divider-dark; - } - } - - // single page part - .post-content { - @include link-2(); - } - - .markdown-body { - h1, - h2, - h3, - h4, - h5, - h6 { - color: $color-primary-dark; - } - - h1, - h2 { - border-bottom: $divider-dark; - } - - blockquote { - color: $color-mute; - } - - img { - border-radius: 2px; - background-color: inherit; // fix white pixels under border-radius - } - - hr { - height: 2px; - } - } - - .post-loading, - .post-comment .utterances-frame, - .post-comment #disqus_thread { - border-top: $divider-dark; - } - - // components - .btn { - div { - background-color: $color-divider-dark; - color: $color-primary-dark; - } - - div:hover { - background-color: $color-primary-dark; - color: $color-divider-dark; - } - - div + div { - border-top: 2px solid $color-bg-dark; - } - } - - // prism.js theme [tomorrow-dark] - @import '../../css/prism-solarizeddark'; - - // diff from light - img { - filter: brightness(60%); - } - - table { - th, - td { - border-color: $color-font-dark; - } - - tr { - background-color: $color-bg-dark; - border-color: $color-font-dark; - - &:nth-child(2n) { - background-color: $color-divider-dark; - } - } - } - - #post-aplayer { - background-color: $color-divider-dark; - } - - .aplayer .aplayer-info .aplayer-music .aplayer-author { - color: $color-font-dark !important; - } - - .aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon path { - fill: $color-font-dark !important; - } - - .aplayer .aplayer-info .aplayer-controller .aplayer-time .aplayer-icon:hover path { - fill: $color-primary-dark-dark !important; - } -} diff --git a/assets/scss/_fuji-theme/_light.scss b/assets/scss/_fuji-theme/_light.scss deleted file mode 100644 index 02749ed..0000000 --- a/assets/scss/_fuji-theme/_light.scss +++ /dev/null @@ -1,135 +0,0 @@ -$color-primary: #8aa2d3; // https://irocore.com/aofuji/ -$color-primary-dark: #3b469b; // https://irocore.com/aomurasaki/ -$color-secondary: #8f82bc; // https://irocore.com/fujimurasaki/ -$color-mute: #9ea1a3; // https://irocore.com/suzu-iro/ -$color-font: #3f4551; // https://irocore.com/konnezu/ -$color-divider: #e5e2e4; // https://irocore.com/komachinezu/ -$color-bg: #fffffd; // https://irocore.com/shiro/ - -$divider: 2px solid $color-divider; - -@mixin link-1 { - a { - color: $color-primary; - } - - a:hover { - color: $color-secondary; - } -} - -@mixin link-2 { - a { - color: $color-secondary; - } - - a:hover { - color: $color-primary-dark; - } -} - -body[data-theme='light'] { - background-color: $color-bg; - color: $color-font; - - @include link-1(); - - .post-summary, - .post-meta { - @include link-2(); - } - - .pag-current a, - .pag-current a:hover { - color: $color-primary-dark; - } - - .title-sub, - .post-meta { - color: $color-mute; - } - - header, - .page-info { - border-bottom: $divider; - } - - .post + .post, - .pagination, - footer { - border-top: $divider; - } - - .post-meta-archive { - @include link-2(); - - color: $color-mute; - } - - @media screen and (max-width: $width-md) { - .sidebar { - border-top: $divider; - } - } - - // single page part - .post-content { - @include link-2(); - } - - .markdown-body { - h1, - h2, - h3, - h4, - h5, - h6 { - color: $color-primary; - } - - h1, - h2 { - border-bottom: $divider; - } - - blockquote { - color: $color-mute; - } - - img { - border-radius: 2px; - background-color: inherit; // fix white pixels under border-radius - } - - hr { - height: 2px; - } - } - - .post-loading, - .post-comment .utterances-frame, - .post-comment #disqus_thread { - border-top: $divider; - } - - // components - .btn { - div { - background-color: $color-divider; - - color: $color-primary; - } - - div:hover { - background-color: $color-primary; - color: $color-divider; - } - - div + div { - border-top: 2px solid $color-bg; - } - } - - // prism.js theme [olarized-light] - @import '../../css/prism-solarizedlight'; -} diff --git a/assets/scss/_fuji-theme/_style.scss b/assets/scss/_fuji-theme/_style.scss new file mode 100644 index 0000000..b2266e6 --- /dev/null +++ b/assets/scss/_fuji-theme/_style.scss @@ -0,0 +1,203 @@ +::selection, +::-moz-selection { + color: var(--color-bg); + background-color: var(--color-primary); +} + +body { + background-color: var(--color-bg); + color: var(--color-font); + + @include link-1(); +} + +.post-summary, +.post-meta { + @include link-2(); +} + +.pag-current a, +.pag-current a:hover { + color: var(--color-focus); +} + +.title-sub, +.post-meta { + color: var(--color-mute); +} + +header, +.page-info { + border-bottom: $divider; +} + +.post + .post, +.pagination, +footer { + border-top: $divider; +} + +.post-meta-archive { + @include link-2(); + + color: var(--color-mute); +} + +@media screen and (max-width: $width-md) { + .sidebar { + border-top: $divider; + } +} + +// single page part +.post-content { + @include link-2(); +} + +.markdown-body { + h1, + h2, + h3, + h4, + h5, + h6 { + color: var(--color-primary); + } + + h1, + h2 { + border-bottom: $divider; + } + + blockquote { + color: var(--color-mute); + } + + img { + border-radius: 2px; + background-color: inherit; // fix white pixels under border-radius + } + + hr { + height: 2px; + } + + pre, + code { + background-color: var(--color-codebg); + } +} + +.post-loading, +.post-comment .utterances-frame, +.post-comment #disqus_thread { + border-top: $divider; +} + +// components +.btn { + div { + background-color: var(--color-divider); + + color: var(--color-primary); + } + + div:hover { + background-color: var(--color-primary); + color: var(--color-divider); + } + + div + div { + border-top: 2px solid var(--color-bg); + } +} + +// prism.js theme [solarized-light] + +code[class*='language-'], +pre[class*='language-'] { + -moz-tab-size: 4; + -o-tab-size: 4; + tab-size: 4; +} + +.token.comment, +.token.prolog, +.token.doctype, +.token.cdata { + color: #93a1a1; /* base1 */ +} + +.token.punctuation { + color: #586e75; /* base01 */ +} + +.token.namespace { + opacity: 0.7; +} + +.token.property, +.token.tag, +.token.boolean, +.token.number, +.token.constant, +.token.symbol, +.token.deleted { + color: #268bd2; /* blue */ +} + +.token.selector, +.token.attr-name, +.token.string, +.token.char, +.token.builtin, +.token.url, +.token.inserted { + color: #2aa198; /* cyan */ +} + +.token.entity { + color: #657b83; /* base00 */ + background: #eee8d5; /* base2 */ +} + +.token.atrule, +.token.attr-value, +.token.keyword { + color: #859900; /* green */ +} + +.token.function, +.token.class-name { + color: #b58900; /* yellow */ +} + +.token.regex, +.token.important, +.token.variable { + color: #cb4b16; /* orange */ +} + +.token.important, +.token.bold { + font-weight: 600; +} +.token.italic { + font-style: italic; +} + +// fix conflicts of primer css & prism.js style +pre, +code { + .rule { + margin: 0; + border-bottom: none; + overflow: inherit; + + &::before, + &::after { + display: inherit; + clear: inherit; + } + } +} diff --git a/assets/scss/_global.scss b/assets/scss/_global.scss index fb2c3f9..bca74b3 100644 --- a/assets/scss/_global.scss +++ b/assets/scss/_global.scss @@ -6,11 +6,13 @@ html { height: 100%; } + body { display: flex; flex-direction: column; height: 100%; } + main { flex: 1 1 auto; } diff --git a/assets/scss/fuji.scss b/assets/scss/fuji.scss index b9982c5..b5538e6 100644 --- a/assets/scss/fuji.scss +++ b/assets/scss/fuji.scss @@ -20,5 +20,5 @@ @import '_fuji-style/_components'; // theme -@import '_fuji-theme/_light'; -@import '_fuji-theme/_dark'; +@import '_fuji-theme/_base'; +@import '_fuji-theme/_style'; |