Skip to content

Commit

Permalink
Merge branch 'main' into fix-workflows
Browse files Browse the repository at this point in the history
  • Loading branch information
hossainemruz authored Sep 7, 2024
2 parents 05639db + f2e5497 commit 289a877
Show file tree
Hide file tree
Showing 22 changed files with 243 additions and 103 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/autoprefixer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ jobs:
npm run autoprefixer
- name: Create Pull Request
uses: peter-evans/create-pull-request@v6
uses: peter-evans/create-pull-request@v7
with:
branch: autoprefixer
branch-suffix: timestamp
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ For more details about the features please visit [here](https://toha-guides.netl
- Deutsch
- Español
- 简体中文
- 繁體中文
- हिन्दी
- Italiano
- 日本語
Expand Down
4 changes: 4 additions & 0 deletions assets/scripts/features/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ if (process.env.FEATURE_DARKMODE === '1') {
import('./darkmode')
}

if (process.env.FEATURE_THEME === '1') {
import('./theme')
}

if (process.env.FEATURE_FLOWCHART === '1') {
import('./flowchart')
}
Expand Down
88 changes: 88 additions & 0 deletions assets/scripts/features/theme/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
import * as params from '@params';
const PERSISTENCE_KEY = 'theme-scheme'

const themeOptions = params.theme || {}
const THEME_DARK = typeof themeOptions.dark === 'undefined' ? true : themeOptions.dark;
const THEME_LIGHT = typeof themeOptions.light === 'undefined' ? true : themeOptions.light;
const THEME_DEFAULT = typeof themeOptions.default === 'undefined' ? "system" : themeOptions.default;

window.addEventListener('load', async () => {
const menu = document.getElementById('themeMenu')
const $icon = document.getElementById('navbar-theme-icon-svg')
if (menu == null || $icon == null) return

const btns = menu.getElementsByTagName('a')
const iconMap = Array.from(btns).reduce((map, btn) => {
const $img = btn.getElementsByTagName('img')[0]
map[btn.dataset.scheme] = $img.src
return map
}, {})


function checkScheme(scheme) {
if (THEME_LIGHT === false) return "dark"
if (THEME_DARK === false) return "light"
return scheme
}

function loadScheme() {
return localStorage.getItem(PERSISTENCE_KEY) || loadDefaultScheme()
}

function loadDefaultScheme() {
return THEME_DEFAULT || "system"
}

function saveScheme(scheme) {
localStorage.setItem(PERSISTENCE_KEY, scheme)
}

function getPreferredColorScheme() {
const isDarkMode = window.matchMedia("(prefers-color-scheme: dark)").matches;
return isDarkMode ? "dark" : "light";
}

function setScheme(newScheme) {
let theme = newScheme
if (newScheme === 'system') {
theme = getPreferredColorScheme()
}
// set data-theme attribute on html tag
document.querySelector("html").dataset.theme = theme;

// update icon
$icon.src = iconMap[newScheme]

// save preference to local storage
saveScheme(newScheme)

setImages(theme)
}

const checkedScheme = checkScheme(loadScheme())
setScheme(checkedScheme)

Array.from(menu.getElementsByTagName('a')).forEach((btn) => {
btn.addEventListener('click', () => {
const { scheme } = btn.dataset
setScheme(scheme)
})
})
})

function setImages(newScheme) {
const els = Array.from(document.getElementsByClassName('logo-holder'));
for (const el of els) {
const light = el.querySelector('.light-logo');
const dark = el.querySelector('.dark-logo');

if (newScheme === "dark" && dark !== null) {
if (light !== null) light.style.display = 'none'
dark.style.display = 'inline'
}
else {
if (light !== null) light.style.display = 'inline'
if (dark !== null) dark.style.display = 'none'
}
}
}
6 changes: 4 additions & 2 deletions assets/styles/components/cards.scss
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@
}

.card-img-top {
object-fit: cover;
-o-object-fit: cover;
object-fit: cover;
@include transition();
}

Expand Down Expand Up @@ -61,7 +62,8 @@
&:focus {
.card-img-top {
transform: scale(1.2);
object-fit: cover;
-o-object-fit: cover;
object-fit: cover;
@include transition();
}
}
Expand Down
6 changes: 4 additions & 2 deletions assets/styles/components/links.scss
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,8 @@ a {

&:hover,
&:focus {
text-decoration: get-light-color('hover-over-accent-color') underline;
-webkit-text-decoration: get-light-color('hover-over-accent-color') underline;
text-decoration: get-light-color('hover-over-accent-color') underline;
color: get-light-color('hover-over-accent-color');
@include transition();
}
Expand Down Expand Up @@ -66,7 +67,8 @@ html[data-theme='dark'] {

&:hover,
&:focus {
text-decoration: get-dark-color('hover-over-accent-color') underline;
-webkit-text-decoration: get-dark-color('hover-over-accent-color') underline;
text-decoration: get-dark-color('hover-over-accent-color') underline;
color: get-dark-color('hover-over-accent-color');
}
}
Expand Down
4 changes: 4 additions & 0 deletions assets/styles/components/tables.scss
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,10 @@ html[data-theme='dark'] {
}
}
.gist {
&::-moz-selection{
background: get-dark-color('text-color');
color: get-dark-color('inverse-text-color');
}
&::selection{
background: get-dark-color('text-color');
color: get-dark-color('inverse-text-color');
Expand Down
6 changes: 3 additions & 3 deletions assets/styles/layouts/list.scss
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
// in Hugo, Page kind can be either "section" or "page".
// if it is section, then it's a page with a list of items, for example /posts
// if it is page, then it is a single page.
/* in Hugo, Page kind can be either "section" or "page".*/
/* if it is section, then it's a page with a list of items, for example /posts*/
/* if it is page, then it is a single page.*/
body.kind-section,
body.kind-term,
body.kind-page {
Expand Down
1 change: 0 additions & 1 deletion assets/styles/layouts/main.scss
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,6 @@ body {
ol > ol,
li > ol,
li > ul {
-webkit-padding-start: 1rem;
padding-inline-start: 1rem;
}
}
Expand Down
6 changes: 4 additions & 2 deletions assets/styles/sections/footer.scss
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,8 @@
@include transition();
&:hover {
margin-left: 5px;
text-decoration: get-light-color('muted-text-color') underline;
-webkit-text-decoration: get-light-color('muted-text-color') underline;
text-decoration: get-light-color('muted-text-color') underline;
@include transition();
}
}
Expand Down Expand Up @@ -79,7 +80,8 @@ html[data-theme='dark'] {
a {
color: get-dark-color('muted-text-color');
&:hover {
text-decoration: get-dark-color('muted-text-color') underline;
-webkit-text-decoration: get-dark-color('muted-text-color') underline;
text-decoration: get-dark-color('muted-text-color') underline;
}
}

Expand Down
3 changes: 0 additions & 3 deletions assets/styles/sections/pdf-viewer.scss
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,4 @@
@keyframes spin {
to { -webkit-transform: rotate(360deg); }
}
@-webkit-keyframes spin {
to { -webkit-transform: rotate(360deg); }
}
}
14 changes: 12 additions & 2 deletions exampleSite/hugo.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -91,9 +91,19 @@ params:
# Configure various features of this theme
features:

# Enable dark theme
darkMode:
# [Deprecated] Enable dark theme
# This is a deprecated setting, but has not been removed to maintain backward compatibility
# If `theme` is set, the `darkMode` setting will be discarded.
# darkMode:
# enable: true

# Configure theme color settings
theme:
enable: true
services:
light: true # enable light theme. default "true"
dark: true # enable dark theme. default "true"
default: system # can be either light, dark or system. default "system"

# Enable and configure portfolio
portfolio:
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
github.com/hugo-toha/hugo-toha.github.io v0.0.0-20240730212302-83b19f7bd3b7 h1:RRonNzaf6/Ou9PqfXeKiRywkd+9KY7SVgfGBQXqXshM=
github.com/hugo-toha/hugo-toha.github.io v0.0.0-20240730212302-83b19f7bd3b7/go.mod h1:yWw1t3trnfzv4t1lA9zh5pSsI0+kqqyg58ir8/kt6zk=
12 changes: 6 additions & 6 deletions i18n/zh-tw.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,10 @@ other = "文章"
other = "目錄"

[tags]
other = "标签"
other = "標籤"

[categories]
other = "类别"
other = "類別"

[at]
other = "at"
Expand Down Expand Up @@ -42,7 +42,7 @@ other = "在此輸入您的電子郵件地址"
other = "輸入您的電子郵件地址,即表示您同意接受本網站的最新消息"

[submit]
other = "提交"
other = "送出"

[hugoAttributionText]
other = "Powered by"
Expand All @@ -63,10 +63,10 @@ other = "改善此頁面"
other = "/"

[publications]
other = "出版"
other = "著作"

[taken_courses]
other = "修習課程"
other = "修課內容"

[course_name]
other = "課程名稱"
Expand Down Expand Up @@ -123,4 +123,4 @@ other = "筆記"
other = "免責聲明"

[search]
other = "搜索"
other = "搜尋"
2 changes: 1 addition & 1 deletion layouts/_default/baseof.html
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
<!--================= add analytics if enabled =========================-->
{{- partial "analytics.html" . -}}
<script>
theme = localStorage.getItem('darkmode:color-scheme') || 'system';
theme = localStorage.getItem('theme-scheme') || localStorage.getItem('darkmode:color-scheme') || 'light';
if (theme == 'system') {
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
theme = 'dark';
Expand Down
2 changes: 1 addition & 1 deletion layouts/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
<!--================= add analytics if enabled =========================-->
{{- partial "analytics.html" . -}}
<script>
theme = localStorage.getItem('darkmode:color-scheme') || 'system';
theme = localStorage.getItem('theme-scheme') || localStorage.getItem('darkmode:color-scheme') || 'light';
if (theme == 'system') {
if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
theme = 'dark';
Expand Down
2 changes: 1 addition & 1 deletion layouts/partials/cards/post.html
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<div class="card-body">
<a href="{{ .RelPermalink | relLangURL }}" class="post-card-link">
<h5 class="card-title">{{ .Title }}</h5>
<p class="card-text post-summary">{{ .Summary }}</p>
<p class="card-text post-summary">{{ .Summary | plainify }}</p>
</a>
{{ if and site.Params.features.tags.enable site.Params.features.tags.on_card }}
{{ partial "misc/tags.html" .Params.tags }}
Expand Down
15 changes: 13 additions & 2 deletions layouts/partials/helpers/get-esbuild-options.html
Original file line number Diff line number Diff line change
Expand Up @@ -69,15 +69,26 @@
# id: foo
# name: bar

# The `darkMode` feature
darkmode:
# [Deprecated] The `darkMode` feature
# This is a deprecated setting, but has not been removed to maintain backward compatibility
# If `theme` is set, the `darkMode` setting will be discarded.
darkMode:
enable: true

# The `theme` feature
theme:
enable: true
services:
light: true # enable light theme. default "true"
dark: true # enable dark theme. default "true"
default: system # can be either light, dark or system. default "system"

This helper will convert the above config into the following env vars:

* `FEATURE_ANALYTICS=1`
* `FEATURE_ANALYTICS_GOOGLE=1`
* `FEATURE_DARKMODE=1`
* `FEATURE_THEME=1`

In JS, you can use it like this:

Expand Down
2 changes: 1 addition & 1 deletion layouts/partials/navigators/navbar.html
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@
{{ if .IsTranslated }}
{{ partial "navigators/lang-selector.html" . }}
{{ end }}
{{ if site.Params.features.darkMode.enable }}
{{ if or site.Params.features.darkMode.enable site.Params.features.theme.enable }}
{{ partial "navigators/theme-selector.html" . }}
{{ end }}
</ul>
Expand Down
14 changes: 14 additions & 0 deletions layouts/partials/navigators/theme-selector.html
Original file line number Diff line number Diff line change
@@ -1,17 +1,31 @@
{{/* variables for enabling/disabling various features */}}
{{ $darkEnabled := true }}
{{ $lightEnabled := true }}
{{ if site.Params.features.theme.enable }}
{{ $darkEnabled = site.Params.features.theme.services.dark | default true }}
{{ $lightEnabled = site.Params.features.theme.services.light | default true }}
{{ end }}

<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="themeSelector" role="button"
data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<img id="navbar-theme-icon-svg" class="theme-icon" src="{{ "icons/moon-svgrepo-com.svg" | relURL }}" width=20 alt="Dark Theme">
</a>
<div id="themeMenu" class="dropdown-menu dropdown-menu-icons-only" aria-labelledby="themeSelector">
{{ if $lightEnabled }}
<a class="dropdown-item nav-link" href="#" data-scheme="light">
<img class="theme-icon" src="{{ "icons/sun-svgrepo-com.svg" | relURL }}" width=20 alt="Light Theme">
</a>
{{ end }}
{{ if $darkEnabled }}
<a class="dropdown-item nav-link" href="#" data-scheme="dark">
<img class="theme-icon" src="{{ "icons/moon-svgrepo-com.svg" | relURL }}" width=20 alt="Dark Theme">
</a>
{{ end }}
{{ if and $lightEnabled $darkEnabled }}
<a class="dropdown-item nav-link" href="#" data-scheme="system">
<img class="theme-icon" src="{{ "icons/computer-svgrepo-com.svg" | relURL }}" width=20 alt="System Theme">
</a>
{{ end }}
</div>
</li>
Loading

0 comments on commit 289a877

Please sign in to comment.