From d7b5adda98b5db36a59eb78e61ef6e07ce93eea1 Mon Sep 17 00:00:00 2001 From: kwaroran Date: Tue, 19 Mar 2024 15:21:19 +0900 Subject: [PATCH] Add color scheme export and import functionality --- src/lib/Setting/Pages/DisplaySettings.svelte | 17 +++++++- src/ts/gui/colorscheme.ts | 45 ++++++++++++++++++++ 2 files changed, 61 insertions(+), 1 deletion(-) diff --git a/src/lib/Setting/Pages/DisplaySettings.svelte b/src/lib/Setting/Pages/DisplaySettings.svelte index dcec447d..213cae86 100644 --- a/src/lib/Setting/Pages/DisplaySettings.svelte +++ b/src/lib/Setting/Pages/DisplaySettings.svelte @@ -8,7 +8,8 @@ import SelectInput from "src/lib/UI/GUI/SelectInput.svelte"; import OptionInput from "src/lib/UI/GUI/OptionInput.svelte"; import { updateAnimationSpeed } from "src/ts/gui/animation"; - import { changeColorScheme, colorSchemeList, updateColorScheme, updateTextTheme } from "src/ts/gui/colorscheme"; + import { changeColorScheme, colorSchemeList, exportColorScheme, importColorScheme, updateColorScheme, updateTextTheme } from "src/ts/gui/colorscheme"; + import { DownloadIcon, FolderUpIcon } from "lucide-svelte"; const onSchemeInputChange = (e:Event) => { changeColorScheme((e.target as HTMLInputElement).value) @@ -44,6 +45,7 @@ {#if $DataBase.colorSchemeName === "custom"} +
Light Dark @@ -84,6 +86,19 @@ Text Color 2
+
+ + +
+ {/if} {language.textColor} diff --git a/src/ts/gui/colorscheme.ts b/src/ts/gui/colorscheme.ts index 4965e0df..60d966a8 100644 --- a/src/ts/gui/colorscheme.ts +++ b/src/ts/gui/colorscheme.ts @@ -1,6 +1,9 @@ import { get } from "svelte/store"; import { DataBase, setDatabase } from "../storage/database"; import { cloneDeep } from "lodash"; +import { downloadFile } from "../storage/globalApi"; +import { BufferToText, selectSingleFile } from "../util"; +import { alertError } from "../alert"; export interface ColorScheme{ bgcolor: string; @@ -127,6 +130,48 @@ export function updateColorScheme(){ document.documentElement.style.setProperty("--risu-theme-darkbutton", colorScheme.darkbutton); } +export function exportColorScheme(){ + let db = get(DataBase) + let json = JSON.stringify(db.colorScheme) + downloadFile('colorScheme.json', json) +} + +export async function importColorScheme(){ + const uarray = await selectSingleFile(['json']) + if(uarray == null){ + return + } + const string = BufferToText(uarray.data) + let colorScheme: ColorScheme + try{ + colorScheme = JSON.parse(string) + if( + typeof colorScheme.bgcolor !== 'string' || + typeof colorScheme.darkbg !== 'string' || + typeof colorScheme.borderc !== 'string' || + typeof colorScheme.selected !== 'string' || + typeof colorScheme.draculared !== 'string' || + typeof colorScheme.textcolor !== 'string' || + typeof colorScheme.textcolor2 !== 'string' || + typeof colorScheme.darkBorderc !== 'string' || + typeof colorScheme.darkbutton !== 'string' || + typeof colorScheme.type !== 'string' + ){ + alertError('Invalid color scheme') + return + } + changeColorScheme('custom') + let db = get(DataBase) + db.colorScheme = colorScheme + setDatabase(db) + updateColorScheme() + } + catch(e){ + alertError('Invalid color scheme') + return + + } +} export function updateTextTheme(){ let db = get(DataBase) const root = document.querySelector(':root') as HTMLElement;