Track your online rabbitholes!

fix: persist dark mode

gov ccc46dc7 f3a51564

Changed files
+36 -22
src
+2 -1
src/background/index.ts
··· 5 5 // ignore errors; receiving end won't exist if it's the newtab page 6 6 try { 7 7 chrome.tabs.sendMessage(tabId, { type: MessageRequest.PING }); 8 - } catch (err) {} 8 + } catch (err) { } 9 9 } 10 10 11 11 // this is meant to be called async ··· 263 263 sendResponse(err); 264 264 }); 265 265 break; 266 + 266 267 default: 267 268 } 268 269
+21 -10
src/lib/Rabbithole.svelte
··· 7 7 getOrderedProjects, 8 8 NotificationDuration, 9 9 } from "../utils"; 10 - import { 11 - SvelteUIProvider, 12 - AppShell, 13 - Navbar, 14 - } from "@svelteuidev/core"; 10 + import { SvelteUIProvider, AppShell, Navbar } from "@svelteuidev/core"; 11 + 15 12 let activeProject = {}; 16 13 let websites = []; 17 14 let projects = []; 18 15 let isDark = false; 19 16 let opened = true; 20 17 let syncSuccess = false; 21 - let syncFail = false; 18 + let settings = { 19 + show: false, 20 + alignment: "right", 21 + darkMode: false, 22 + }; 22 23 23 24 onMount(async () => { 25 + settings = await chrome.runtime.sendMessage({ 26 + type: MessageRequest.GET_SETTINGS, 27 + }); 28 + isDark = settings.darkMode; 29 + document.body.classList.toggle("dark-mode", isDark); 24 30 projects = await getOrderedProjects(); 25 31 activeProject = await chrome.runtime.sendMessage({ 26 32 type: MessageRequest.GET_ACTIVE_PROJECT, ··· 109 115 }); 110 116 websites = possiblyDuplicatedWebsites.filter( 111 117 (value, index, self) => 112 - index === self.findIndex((t) => t.url === value.url), 118 + index === self.findIndex((t) => t.url === value.url) 113 119 ); 114 120 } 115 121 ··· 127 133 link.click(); 128 134 } 129 135 130 - function toggleTheme() { 136 + async function toggleTheme() { 131 137 isDark = !isDark; 132 138 document.body.classList.toggle("dark-mode", isDark); 139 + settings.darkMode = isDark; 140 + chrome.runtime.sendMessage({ 141 + type: MessageRequest.UPDATE_SETTINGS, 142 + settings, 143 + }); 133 144 } 134 145 135 146 function handleToggleSidebar() { ··· 164 175 on:projectSync={saveWindowToActiveProject} 165 176 on:exportRabbitholes={exportRabbitholes} 166 177 on:toggleSidebar={handleToggleSidebar} 167 - /> 168 - </Navbar> 178 + /> 179 + </Navbar> 169 180 {:else} 170 181 <div class="hamburger-only"> 171 182 <Sidebar
+10 -9
src/lib/Sidebar.svelte
··· 1 1 <script> 2 2 import { createEventDispatcher } from "svelte"; 3 - import { 4 - Button, 5 - Group, 6 - Text, 7 - TextInput, 8 - Tooltip, 9 - } from "@svelteuidev/core"; 3 + import { Button, Group, Text, TextInput, Tooltip } from "@svelteuidev/core"; 10 4 import SettingsButtons from "src/lib/SettingsButtons.svelte"; 11 5 import UpdatingComponent from "src/lib/UpdatingComponent.svelte"; 12 6 import { NotificationDuration } from "../utils"; ··· 114 108 <Text weight="bold" size="lg" override={textStyleOverride} 115 109 >Change Project</Text 116 110 > 117 - <ProjectSelector id="project-selector" {projects} {handleProjectChange} /> 111 + <ProjectSelector 112 + id="project-selector" 113 + {projects} 114 + {handleProjectChange} 115 + /> 118 116 <Tooltip 119 117 {isHoveringOverSync} 120 118 label="Save all tabs in window to current project" ··· 156 154 <Text weight="bold" size="lg" override={textStyleOverride} 157 155 >Create Project</Text 158 156 > 159 - <UpdatingComponent fail={createProjectFail} failMsg={createProjectFailMsg}> 157 + <UpdatingComponent 158 + fail={createProjectFail} 159 + failMsg={createProjectFailMsg} 160 + > 160 161 <TextInput 161 162 placeholder="My new rabbithole" 162 163 bind:value={newRabbitholeName}
+3 -2
src/storage/db.ts
··· 5 5 export interface Settings { 6 6 alignment: string; 7 7 show: boolean; 8 + darkMode: boolean; 8 9 } 9 10 10 11 export interface Website { ··· 91 92 }); 92 93 objectStore.createIndex("name", "name", { unique: false }); 93 94 objectStore.createIndex("url", "url", { unique: true }); 94 - objectStore.transaction.oncomplete = () => {}; 95 + objectStore.transaction.oncomplete = () => { }; 95 96 } 96 97 if (event.oldVersion < 2) { 97 98 db.createObjectStore("user", { keyPath: "id" }); ··· 372 373 .put(user); 373 374 374 375 request.onsuccess = (event) => { 375 - console.log(`update settings success: ${event.target}`); 376 + console.log(`update settings success: ${JSON.stringify(event.target)}`); 376 377 resolve(settings); 377 378 }; 378 379