diff --git a/module/build.gradle.kts b/module/build.gradle.kts index cc5e38e..0619b5e 100644 --- a/module/build.gradle.kts +++ b/module/build.gradle.kts @@ -180,11 +180,13 @@ androidComponents.onVariants { variant -> set.add(Pair(root.file("webroot/js/translate/modules.js").asFile, null)) set.add(Pair(root.file("webroot/js/translate/settings.js").asFile, null)) + set.add(Pair(root.file("webroot/js/themes/amoled.js").asFile, null)) set.add(Pair(root.file("webroot/js/themes/dark.js").asFile, null)) set.add(Pair(root.file("webroot/js/themes/darkNavbar.js").asFile, null)) set.add(Pair(root.file("webroot/js/themes/light.js").asFile, null)) set.add(Pair(root.file("webroot/js/themes/lightNavbar.js").asFile, null)) set.add(Pair(root.file("webroot/js/themes/lightIcon.js").asFile, null)) + set.add(Pair(root.file("webroot/js/themes/monochrome.js").asFile, null)) set.add(Pair(root.file("webroot/js/switcher/fontChanger.js").asFile, null)) diff --git a/module/src/customize.sh b/module/src/customize.sh index 598a041..e6fddd2 100644 --- a/module/src/customize.sh +++ b/module/src/customize.sh @@ -131,11 +131,13 @@ extract "$ZIPFILE" 'webroot/js/translate/action.js' "$MODPATH/webroot/js/transla extract "$ZIPFILE" 'webroot/js/translate/modules.js' "$MODPATH/webroot/js/translate" true extract "$ZIPFILE" 'webroot/js/translate/settings.js' "$MODPATH/webroot/js/translate" true +extract "$ZIPFILE" 'webroot/js/themes/amoled.js' "$MODPATH/webroot/js/themes" true extract "$ZIPFILE" 'webroot/js/themes/dark.js' "$MODPATH/webroot/js/themes" true extract "$ZIPFILE" 'webroot/js/themes/darkNavbar.js' "$MODPATH/webroot/js/themes" true extract "$ZIPFILE" 'webroot/js/themes/light.js' "$MODPATH/webroot/js/themes" true extract "$ZIPFILE" 'webroot/js/themes/lightNavbar.js' "$MODPATH/webroot/js/themes" true extract "$ZIPFILE" 'webroot/js/themes/lightIcon.js' "$MODPATH/webroot/js/themes" true +extract "$ZIPFILE" 'webroot/js/themes/monochrome.js' "$MODPATH/webroot/js/themes" true extract "$ZIPFILE" 'webroot/js/modal/errorHistory.js' "$MODPATH/webroot/js/modal" true diff --git a/webroot/css/index.css b/webroot/css/index.css index c3f1374..38e4516 100644 --- a/webroot/css/index.css +++ b/webroot/css/index.css @@ -2,7 +2,6 @@ --background: #181c20; --font: #fff; --desc: #c9c9c9; - --spliter: #283136; --bright: #8d1d19; --dim: #1d2327; --error: #8d1d19; @@ -147,10 +146,6 @@ a { padding-bottom: 5px; } -.spliter { - border-bottom: 1px solid var(--spliter); -} - .desc { color: var(--desc); } @@ -211,10 +206,6 @@ a { background: var(--small-card); } -.small_card_bg_in { - background: var(--icon); -} - .icon_animation { transition: transform 0.05s ease-in-out; } diff --git a/webroot/index.html b/webroot/index.html index 8838076..176c2b6 100644 --- a/webroot/index.html +++ b/webroot/index.html @@ -272,12 +272,18 @@
+
+
Amoled
+
Dark
Light
+
+
Monochrome
+
System Based
diff --git a/webroot/js/main.js b/webroot/js/main.js index 1be1c0e..cd2b4ea 100644 --- a/webroot/js/main.js +++ b/webroot/js/main.js @@ -21,6 +21,14 @@ export function setErrorData(errorLog) { return finalLog } +const loading_screen = document.getElementById('loading_screen') +loading_screen.style.display = 'none' + +let sys_lang = localStorage.getItem('/system/language') + +if (!sys_lang) sys_lang = setLangData('en_US') +if (sys_lang !== 'en_US') await setNewLanguage(sys_lang, true); + (async () => { const EXPECTED = 1 const UNEXPECTED_FAIL = 2 diff --git a/webroot/js/smallPage/theme.js b/webroot/js/smallPage/theme.js index ce41ad5..bb4b637 100644 --- a/webroot/js/smallPage/theme.js +++ b/webroot/js/smallPage/theme.js @@ -1,19 +1,49 @@ import { smallPageDisabler } from '../smallPageDesabler.js' +import { setAmoled } from '../themes/amoled.js' import { setDark } from '../themes/dark.js' import { setLight } from '../themes/light.js' +import { setMonochrome } from '../themes/monochrome.js' +// INFO: requirement variables +let sys_theme const page_toggle = document.getElementById('theme_page_toggle') +const themeList = { + amoled: () => setAmoled(true), + dark: () => setDark(true), + light: () => setLight(true), + monochrome: () => setMonochrome(true), + system: (unavaliable) => { + const isDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches + if (isDark && unavaliable) setDark() + else setLight() + }, +} +const setData = (mode) => { + localStorage.setItem('/system/theme', mode) + return mode +} -let sys_theme = localStorage.getItem('/system/theme') +// INFO: Initial open logic +sys_theme = localStorage.getItem('/system/theme') if (!sys_theme) sys_theme = setData('dark') +themeList[sys_theme](true) -if (sys_theme == "system") { - const isDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches - if (!isDark) setLight() -} else if (sys_theme === 'light') setLight(true) - +// INFO: Event logic document.getElementById('sp_theme_close').addEventListener('click', () => smallPageDisabler('theme', 'settings')) +document.addEventListener('click', async (event) => { + const themeListKey = Object.keys(themeList) + const getThemeMode = event.target.getAttribute('theme-data') + + if (!getThemeMode || typeof getThemeMode !== 'string' || !themeListKey.includes(getThemeMode)) return + + themeList[getThemeMode](true) + + smallPageDisabler('theme', 'settings') + + sys_theme = setData(getThemeMode) +}, false) + page_toggle.addEventListener('click', () => { const previous = !localStorage.getItem('/cache/navbar/previous') ? setData('home') : localStorage.getItem('/cache/navbar/previous') document.getElementById(`panel_${previous}`).classList.remove('show') @@ -21,29 +51,6 @@ page_toggle.addEventListener('click', () => { localStorage.setItem('/cache/page/small/previous', 'theme') }) -document.addEventListener('click', async (event) => { - const getSystemTheme = event.target.getAttribute('theme-data') - if (!getSystemTheme || typeof getSystemTheme !== 'string') return - - switch (getSystemTheme) { - case 'dark': - setDark(true) - break - case 'light': - setLight(true) - break - case 'system': - const isDark = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches - if (isDark) setDark() - else setLight() - break - } - - smallPageDisabler('theme', 'settings') - - sys_theme = setData(getSystemTheme) -}, false) - window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', event => { if (sys_theme !== "system") return const newColorScheme = event.matches ? "dark" : "light"; @@ -57,9 +64,3 @@ window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', eve break } }); - -function setData(mode) { - localStorage.setItem('/system/theme', mode) - - return mode -} diff --git a/webroot/js/themes/amoled.js b/webroot/js/themes/amoled.js new file mode 100644 index 0000000..c53f4a6 --- /dev/null +++ b/webroot/js/themes/amoled.js @@ -0,0 +1,45 @@ +import { setDarkNav } from './darkNavbar.js' + +const rootCss = document.querySelector(':root') + +/* INFO: Changes the icons to match the theme */ +const close_icons = document.getElementsByClassName('close_icon') +const expand_icons = document.getElementsByClassName('expander') +const copy_button = document.getElementById('errorh_copy') +const clearall_button = document.getElementById('errorh_clear_all') +const sp_lang_close = document.getElementById('sp_lang_close') +const sp_theme_close = document.getElementById('sp_theme_close') + +export function setAmoled(chooseSet) { + rootCss.style.setProperty('--background', '#000000') + rootCss.style.setProperty('--font', '#d9d9d9') + rootCss.style.setProperty('--desc', '#a9a9a9') + rootCss.style.setProperty('--dim', '#0b0d0f') + rootCss.style.setProperty('--icon', '#22292d') + rootCss.style.setProperty('--icon-bc', '#171b1d') + rootCss.style.setProperty('--desktop-navbar', '#111417') + rootCss.style.setProperty('--desktop-navicon', '#1c2225') + rootCss.style.setProperty('--button', 'var(--background)') + + if (chooseSet) setData('amoled') + + for (const close_icon of close_icons) { + close_icon.innerHTML = '' + } + + for (const expand_icon of expand_icons) { + expand_icon.innerHTML = '' + } + + copy_button.innerHTML = '' + clearall_button.innerHTML = '' + sp_lang_close.innerHTML = '' + sp_theme_close.innerHTML = '' + setDarkNav() +} + +function setData(mode) { + localStorage.setItem('/system/theme', mode) + + return mode +} \ No newline at end of file diff --git a/webroot/js/themes/dark.js b/webroot/js/themes/dark.js index 2f888f1..2e35b00 100644 --- a/webroot/js/themes/dark.js +++ b/webroot/js/themes/dark.js @@ -14,7 +14,6 @@ export function setDark(chooseSet) { rootCss.style.setProperty('--background', '#181c20') rootCss.style.setProperty('--font', '#ffffff') rootCss.style.setProperty('--desc', '#c9c9c9') - rootCss.style.setProperty('--spliter', '#283136') rootCss.style.setProperty('--dim', '#1d2327') rootCss.style.setProperty('--icon', '#48565e') rootCss.style.setProperty('--icon-bc', '#313a3f') diff --git a/webroot/js/themes/light.js b/webroot/js/themes/light.js index 6954dfc..ab03aed 100644 --- a/webroot/js/themes/light.js +++ b/webroot/js/themes/light.js @@ -21,7 +21,6 @@ export function setLight(chooseSet) { rootCss.style.setProperty('--background', '#f2f2f2') rootCss.style.setProperty('--font', '#181c20') rootCss.style.setProperty('--desc', '#484d53') - rootCss.style.setProperty('--spliter', '#4f6069') rootCss.style.setProperty('--dim', '#e0e0e0') rootCss.style.setProperty('--icon', '#acacac') rootCss.style.setProperty('--desktop-navbar', '#fefefe') diff --git a/webroot/js/themes/monochrome.js b/webroot/js/themes/monochrome.js new file mode 100644 index 0000000..db89e18 --- /dev/null +++ b/webroot/js/themes/monochrome.js @@ -0,0 +1,45 @@ +import { setDarkNav } from './darkNavbar.js' + +const rootCss = document.querySelector(':root') + +/* INFO: Changes the icons to match the theme */ +const close_icons = document.getElementsByClassName('close_icon') +const expand_icons = document.getElementsByClassName('expander') +const copy_button = document.getElementById('errorh_copy') +const clearall_button = document.getElementById('errorh_clear_all') +const sp_lang_close = document.getElementById('sp_lang_close') +const sp_theme_close = document.getElementById('sp_theme_close') + +export function setMonochrome(chooseSet) { + rootCss.style.setProperty('--background', '#141414') + rootCss.style.setProperty('--font', '#ffffff') + rootCss.style.setProperty('--desc', '#c9c9c9') + rootCss.style.setProperty('--dim', '#1c1c1c') + rootCss.style.setProperty('--icon', '#494949') + rootCss.style.setProperty('--icon-bc', '#292929') + rootCss.style.setProperty('--desktop-navbar', '#252525') + rootCss.style.setProperty('--desktop-navicon', '#3a3a3a') + rootCss.style.setProperty('--button', 'var(--background)') + + if (chooseSet) setData('monochrome') + + for (const close_icon of close_icons) { + close_icon.innerHTML = '' + } + + for (const expand_icon of expand_icons) { + expand_icon.innerHTML = '' + } + + copy_button.innerHTML = '' + clearall_button.innerHTML = '' + sp_lang_close.innerHTML = '' + sp_theme_close.innerHTML = '' + setDarkNav() +} + +function setData(mode) { + localStorage.setItem('/system/theme', mode) + + return mode +} \ No newline at end of file