Skip to content

Commit 14937d0

Browse files
authored
Merge pull request commons-app#59 from shinwookim/master
Added dark mode support
2 parents 5811132 + 5f8f510 commit 14937d0

File tree

6 files changed

+122
-4
lines changed

6 files changed

+122
-4
lines changed

docs.html

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
<li class="nav-item"><a class="nav-link scroll" href="./index.html#usage">Usage</a></li>
2626
<li class="nav-item"><a class="nav-link scroll" href="./index.html#photo-guide">Photo Guidelines</a></li>
2727
<li class="nav-item"><a class="nav-link scroll" href="#docs">Documentation</a></li>
28+
<li class="nav-item "><btn class="nav-link scroll toggle-theme"></btn>
2829
</ul>
2930
</div> <!-- .collapse -->
3031
</div> <!-- .container -->

images/moon.svg

+1
Loading

images/sun.svg

+1
Loading

index.html

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
<li class="nav-item"><a class="nav-link scroll" href="#usage">Usage</a></li>
2626
<li class="nav-item"><a class="nav-link scroll" href="#photo-guide">Photo Guidelines</a></li>
2727
<li class="nav-item"><a class="nav-link scroll" href="./docs.html#docs">Documentation</a></li>
28+
<li class="nav-item "><btn href="#" class="nav-link scroll toggle-theme"></btn>
2829
</ul>
2930
</div> <!-- .collapse -->
3031
</div> <!-- .container -->

js/index.js

+36
Original file line numberDiff line numberDiff line change
@@ -30,3 +30,39 @@ $(document).ready(function() {
3030
$(".navbar-collapse").collapse('hide');
3131
});
3232
})
33+
34+
// Dark mode toggle
35+
36+
const defaultMode = "light-mode"; // if prefer scheme is not available
37+
const body = document.querySelector("body");
38+
39+
const mode = checkSavedMode() ? checkSavedMode() : detectColorMode();
40+
body.classList.add(mode);
41+
const toggle = document.querySelector(".toggle-theme");
42+
toggle.addEventListener("click", toggleClass);
43+
44+
function checkSavedMode() {
45+
return localStorage.getItem("color-mode");
46+
}
47+
function saveColorMode(value) {
48+
localStorage.setItem("color-mode", value);
49+
}
50+
51+
function detectColorMode() {
52+
if ( window.matchMedia && window.matchMedia("(prefers-color-scheme: dark)").matches) {
53+
return "dark-mode";
54+
} else if (window.matchMedia) {
55+
return "light-mode";
56+
}
57+
return defaultMode;
58+
}
59+
60+
61+
function toggleClass() {
62+
// toggle body class selector
63+
$('body').toggleClass('light-mode dark-mode')
64+
65+
body.classList.contains("dark-mode")
66+
? saveColorMode("dark-mode")
67+
: saveColorMode("light-mode");
68+
}

style.css

+82-4
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,87 @@ body {
2727
* [1]: https://phabricator.wikimedia.org/T175877
2828
* [2]: https://getbootstrap.com/docs/4.1/content/reboot/#native-font-stack
2929
*/
30-
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Lato, Helvetica, Arial, sans-serif;
30+
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Lato, Helvetica, Arial, sans-serif;
3131
}
3232

33-
.bg-primary {
33+
.toggle-theme {
34+
color: #f1f1f1;
35+
opacity: 50%;
36+
}
37+
38+
.toggle-theme:hover {
39+
opacity: 100%;
40+
}
41+
42+
.toggle-theme::after {
43+
filter: invert(100%) sepia(0%) saturate(0%) hue-rotate(356deg) brightness(106%) contrast(102%);
44+
display: block;
45+
width: 25px;
46+
height: 25px;
47+
margin-left: auto;
48+
margin-right: auto;
49+
}
50+
51+
.dark-mode .toggle-theme::after {
52+
content: url("images/moon.svg");
53+
}
54+
55+
.light-mode .toggle-theme::after {
56+
content: url("images/sun.svg");
57+
}
58+
59+
.dark-mode {
60+
background-color: #212529;
61+
color: #fff !important;
62+
63+
}
64+
65+
.dark-mode #docs h2>a,
66+
.dark-mode #docs h3>a {
67+
color: #fff !important;
68+
}
69+
70+
.dark-mode .shadow {
71+
box-shadow: 0 0.5rem 1rem rgba(0, 0, 0, 0.85) !important;
72+
}
73+
74+
.dark-mode a {
75+
color: #99caff !important;
76+
}
77+
78+
.dark-mode a:hover {
79+
color: #7bbaff !important;
80+
}
81+
82+
.dark-mode .btn-outline-primary {
83+
border-color: #99caff !important;
84+
}
85+
86+
.dark-mode .btn-outline-primary:hover {
87+
border-color: #70cfff !important;
88+
}
89+
90+
/* .badge-primary {
91+
background-color: #99caff !important;
92+
} */
93+
.dark-mode li::before {
94+
color: #70cfff !important;
95+
}
96+
97+
.dark-mode .text-success {
98+
color: #6cdc86 !important;
99+
}
100+
101+
.dark-mode .text-danger {
102+
color: #ea868f !important;
103+
}
104+
105+
.dark-mode .section-divider {
106+
filter: brightness(140%);
107+
}
108+
109+
110+
.dark-mode .bg-primary {
34111
background-color: #006699 !important;
35112
}
36113

@@ -176,7 +253,8 @@ body {
176253
}
177254

178255
/* Documentation Header */
179-
#docs h2>a, #docs h3>a{
256+
#docs h2>a,
257+
#docs h3>a {
180258
color: black;
181259
text-decoration: none;
182260
}
@@ -200,4 +278,4 @@ footer h2 {
200278

201279
.qr-code-div {
202280
padding: 30px 15px;
203-
}
281+
}

0 commit comments

Comments
 (0)