mirror of
				https://github.com/notion-enhancer/notion-enhancer.git
				synced 2025-10-31 06:08:09 +11:00 
			
		
		
		
	force one theme per mode, move notif cache outside of profile, cleanup test data
This commit is contained in:
		
							parent
							
								
									775d8412d0
								
							
						
					
					
						commit
						ccbcdaf76a
					
				| @ -98,6 +98,19 @@ async function validate(mod) { | |||||||
|         }); |         }); | ||||||
|         return false; |         return false; | ||||||
|       } |       } | ||||||
|  |       if ( | ||||||
|  |         (mod.tags.includes('theme') && | ||||||
|  |           !(mod.tags.includes('light') || mod.tags.includes('dark'))) || | ||||||
|  |         (mod.tags.includes('light') && mod.tags.includes('dark')) | ||||||
|  |       ) { | ||||||
|  |         _errors.push({ | ||||||
|  |           source: mod._dir, | ||||||
|  |           message: `invalid tags (themes must be either 'light' or 'dark', not neither or both): ${JSON.stringify( | ||||||
|  |             mod.tags | ||||||
|  |           )}`,
 | ||||||
|  |         }); | ||||||
|  |         return false; | ||||||
|  |       } | ||||||
|       return mod.tags.map((tag) => check('tags.tag', tag, 'string')); |       return mod.tags.map((tag) => check('tags.tag', tag, 'string')); | ||||||
|     }), |     }), | ||||||
|     check('authors', mod.authors, 'array').then((passed) => { |     check('authors', mod.authors, 'array').then((passed) => { | ||||||
|  | |||||||
| @ -3,7 +3,6 @@ | |||||||
|   "id": "cb6fd684-f113-4a7a-9423-8f0f0cff069f", |   "id": "cb6fd684-f113-4a7a-9423-8f0f0cff069f", | ||||||
|   "version": "0.2.0", |   "version": "0.2.0", | ||||||
|   "description": "go straight to the normal full view when opening a page.", |   "description": "go straight to the normal full view when opening a page.", | ||||||
|   "preview": "https://cdn.pixabay.com/photo/2021/09/17/15/17/fruit-6633086_960_720.jpg", |  | ||||||
|   "tags": ["extension", "automation"], |   "tags": ["extension", "automation"], | ||||||
|   "authors": [ |   "authors": [ | ||||||
|     { |     { | ||||||
| @ -11,12 +10,6 @@ | |||||||
|       "email": "thedragonring.bod@gmail.com", |       "email": "thedragonring.bod@gmail.com", | ||||||
|       "homepage": "https://dragonwocky.me/", |       "homepage": "https://dragonwocky.me/", | ||||||
|       "avatar": "https://dragonwocky.me/avatar.jpg" |       "avatar": "https://dragonwocky.me/avatar.jpg" | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "name": "fake person", |  | ||||||
|       "email": "thedragonring.bod@gmail.com", |  | ||||||
|       "homepage": "https://dragonwocky.me/", |  | ||||||
|       "avatar": "https://cdn.pixabay.com/photo/2015/04/20/13/28/lizard-731336_960_720.jpg" |  | ||||||
|     } |     } | ||||||
|   ], |   ], | ||||||
|   "js": { |   "js": { | ||||||
| @ -25,55 +18,5 @@ | |||||||
|   "css": { |   "css": { | ||||||
|     "client": ["client.css"] |     "client": ["client.css"] | ||||||
|   }, |   }, | ||||||
|   "options": [ |   "options": [] | ||||||
|     { |  | ||||||
|       "type": "toggle", |  | ||||||
|       "key": "toggle", |  | ||||||
|       "label": "toggle", |  | ||||||
|       "tooltip": "toggle", |  | ||||||
|       "value": true |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "type": "select", |  | ||||||
|       "key": "select", |  | ||||||
|       "label": "select", |  | ||||||
|       "tooltip": "select", |  | ||||||
|       "values": ["option A", "option B", "option C"] |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "type": "text", |  | ||||||
|       "key": "text", |  | ||||||
|       "label": "text", |  | ||||||
|       "tooltip": "text", |  | ||||||
|       "value": "default" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "type": "hotkey", |  | ||||||
|       "key": "hotkey", |  | ||||||
|       "label": "hotkey", |  | ||||||
|       "tooltip": "hotkey", |  | ||||||
|       "value": "Ctrl+Shift+H" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "type": "number", |  | ||||||
|       "key": "number", |  | ||||||
|       "label": "number", |  | ||||||
|       "tooltip": "number", |  | ||||||
|       "value": 14 |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "type": "color", |  | ||||||
|       "key": "color", |  | ||||||
|       "label": "color", |  | ||||||
|       "tooltip": "color", |  | ||||||
|       "value": "rgba(125, 26, 250, 0.7)" |  | ||||||
|     }, |  | ||||||
|     { |  | ||||||
|       "type": "file", |  | ||||||
|       "key": "file", |  | ||||||
|       "label": "file", |  | ||||||
|       "tooltip": "file", |  | ||||||
|       "extensions": [".css"] |  | ||||||
|     } |  | ||||||
|   ] |  | ||||||
| } | } | ||||||
|  | |||||||
| @ -7,7 +7,7 @@ | |||||||
| 'use strict'; | 'use strict'; | ||||||
| 
 | 
 | ||||||
| export default async function (api, db) { | export default async function (api, db) { | ||||||
|   const { env, fs, registry, web } = api; |   const { env, fs, storage, registry, web } = api; | ||||||
| 
 | 
 | ||||||
|   web.addHotkeyListener(await db.get(['hotkey']), env.focusMenu); |   web.addHotkeyListener(await db.get(['hotkey']), env.focusMenu); | ||||||
| 
 | 
 | ||||||
| @ -31,7 +31,7 @@ export default async function (api, db) { | |||||||
|   $sidebarLink.addEventListener('click', env.focusMenu); |   $sidebarLink.addEventListener('click', env.focusMenu); | ||||||
| 
 | 
 | ||||||
|   const notifications = { |   const notifications = { | ||||||
|     cache: await db.get(['notifications'], []), |     cache: await storage.get(['notifications'], []), | ||||||
|     provider: [ |     provider: [ | ||||||
|       env.welcomeNotification, |       env.welcomeNotification, | ||||||
|       ...(await fs.getJSON('https://notion-enhancer.github.io/notifications.json')), |       ...(await fs.getJSON('https://notion-enhancer.github.io/notifications.json')), | ||||||
|  | |||||||
| @ -159,9 +159,26 @@ const _$modListCache = {}, | |||||||
|       return $fragment; |       return $fragment; | ||||||
|     }, |     }, | ||||||
|     mod: async (mod) => { |     mod: async (mod) => { | ||||||
|       const $mod = web.html`<div class="mod"></div>`, |       const $mod = web.html`<div class="mod" data-id="${web.escape(mod.id)}"></div>`, | ||||||
|         $toggle = components.toggle('', await registry.enabled(mod.id)); |         $toggle = components.toggle('', await registry.enabled(mod.id)); | ||||||
|       $toggle.addEventListener('change', (event) => { |       $toggle.addEventListener('change', async (event) => { | ||||||
|  |         if (event.target.checked && mod.tags.includes('theme')) { | ||||||
|  |           const mode = mod.tags.includes('light') ? 'light' : 'dark', | ||||||
|  |             id = mod.id, | ||||||
|  |             mods = await registry.list( | ||||||
|  |               (mod) => | ||||||
|  |                 mod.environments.includes(env.name) && | ||||||
|  |                 mod.tags.includes('theme') && | ||||||
|  |                 mod.tags.includes(mode) && | ||||||
|  |                 mod.id !== id | ||||||
|  |             ); | ||||||
|  |           for (const mod of mods) { | ||||||
|  |             registry.profileDB.set(['_mods', mod.id], false); | ||||||
|  |             document.querySelector( | ||||||
|  |               `[data-id="${web.escape(mod.id)}"] .toggle-check` | ||||||
|  |             ).checked = false; | ||||||
|  |           } | ||||||
|  |         } | ||||||
|         registry.profileDB.set(['_mods', mod.id], event.target.checked); |         registry.profileDB.set(['_mods', mod.id], event.target.checked); | ||||||
|         notifications.onChange(); |         notifications.onChange(); | ||||||
|       }); |       }); | ||||||
| @ -202,7 +219,7 @@ const _$modListCache = {}, | |||||||
|         ) |         ) | ||||||
|       ); |       ); | ||||||
|     }, |     }, | ||||||
|     modList: async (category) => { |     modList: async (category, message = '') => { | ||||||
|       if (!_$modListCache[category]) { |       if (!_$modListCache[category]) { | ||||||
|         const $search = web.html`<input type="search" class="search"
 |         const $search = web.html`<input type="search" class="search"
 | ||||||
|           placeholder="Search ('/' to focus)">`,
 |           placeholder="Search ('/' to focus)">`,
 | ||||||
| @ -230,6 +247,7 @@ const _$modListCache = {}, | |||||||
|             $search, |             $search, | ||||||
|             web.html`${web.icon('search', { class: 'input-icon' })}` |             web.html`${web.icon('search', { class: 'input-icon' })}` | ||||||
|           ), |           ), | ||||||
|  |           message ? web.html`<p class="main-message">${web.escape(message)}</p>` : '', | ||||||
|           $list |           $list | ||||||
|         ); |         ); | ||||||
|       } |       } | ||||||
| @ -295,7 +313,15 @@ router.addView('extensions', async () => { | |||||||
| router.addView('themes', async () => { | router.addView('themes', async () => { | ||||||
|   web.empty($main); |   web.empty($main); | ||||||
|   selectNavItem($themesNavItem); |   selectNavItem($themesNavItem); | ||||||
|   return web.render($main, await generators.modList('theme')); |   return web.render( | ||||||
|  |     $main, | ||||||
|  |     await generators.modList( | ||||||
|  |       'theme', | ||||||
|  |       `Dark themes will only work when Notion is in dark mode,
 | ||||||
|  |       and light themes will only work when Notion is in light mode. | ||||||
|  |       Only one theme of each mode can be enabled at a time.` | ||||||
|  |     ) | ||||||
|  |   ); | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| router.loadView('extensions', $main); | router.loadView('extensions', $main); | ||||||
|  | |||||||
| @ -6,14 +6,14 @@ | |||||||
| 
 | 
 | ||||||
| 'use strict'; | 'use strict'; | ||||||
| 
 | 
 | ||||||
| import { env, fs, fmt, registry, web } from '../../api/_.mjs'; | import { env, fs, storage, fmt, registry, web } from '../../api/_.mjs'; | ||||||
| const db = await registry.db('a6621988-551d-495a-97d8-3c568bca2e9e'); | const db = await registry.db('a6621988-551d-495a-97d8-3c568bca2e9e'); | ||||||
| 
 | 
 | ||||||
| import { tw } from './styles.mjs'; | import { tw } from './styles.mjs'; | ||||||
| 
 | 
 | ||||||
| export const notifications = { | export const notifications = { | ||||||
|   $container: web.html`<div class="notifications-container"></div>`, |   $container: web.html`<div class="notifications-container"></div>`, | ||||||
|   cache: await db.get(['notifications'], []), |   cache: await storage.get(['notifications'], []), | ||||||
|   provider: [ |   provider: [ | ||||||
|     env.welcomeNotification, |     env.welcomeNotification, | ||||||
|     ...(await fs.getJSON('https://notion-enhancer.github.io/notifications.json')), |     ...(await fs.getJSON('https://notion-enhancer.github.io/notifications.json')), | ||||||
| @ -34,7 +34,7 @@ export const notifications = { | |||||||
|       resolve = async () => { |       resolve = async () => { | ||||||
|         if (id !== undefined) { |         if (id !== undefined) { | ||||||
|           notifications.cache.push(id); |           notifications.cache.push(id); | ||||||
|           await db.set(['notifications'], notifications.cache); |           await storage.set(['notifications'], notifications.cache); | ||||||
|         } |         } | ||||||
|         $notification.remove(); |         $notification.remove(); | ||||||
|       }; |       }; | ||||||
|  | |||||||
| @ -43,6 +43,7 @@ const customClasses = { | |||||||
|   'nav-item': apply`ml-4 px-3 py-2 rounded-md text-sm font-medium hover:bg-interactive-hover focus:bg-interactive-focus`, |   'nav-item': apply`ml-4 px-3 py-2 rounded-md text-sm font-medium hover:bg-interactive-hover focus:bg-interactive-focus`, | ||||||
|   'nav-item-selected': apply`ml-4 px-3 py-2 rounded-md text-sm font-medium ring-1 ring-divider bg-notion-secondary`, |   'nav-item-selected': apply`ml-4 px-3 py-2 rounded-md text-sm font-medium ring-1 ring-divider bg-notion-secondary`, | ||||||
|   'main': apply`transition px-4 py-3 overflow-y-auto max-h-full-48 sm:max-h-full-32 lg:max-h-full-16`, |   'main': apply`transition px-4 py-3 overflow-y-auto max-h-full-48 sm:max-h-full-32 lg:max-h-full-16`, | ||||||
|  |   'main-message': apply`mx-2.5 my-2.5 px-px text-sm text-foreground-secondary text-justify`, | ||||||
|   'mods-list': apply`flex flex-wrap`, |   'mods-list': apply`flex flex-wrap`, | ||||||
|   'mod-container': apply`w-full md:w-1/2 lg:w-1/3 xl:w-1/4 2xl:w-1/5 px-2.5 py-2.5 box-border`, |   'mod-container': apply`w-full md:w-1/2 lg:w-1/3 xl:w-1/4 2xl:w-1/5 px-2.5 py-2.5 box-border`, | ||||||
|   'mod': apply`relative h-full w-full flex flex-col overflow-hidden rounded-lg shadow-lg
 |   'mod': apply`relative h-full w-full flex flex-col overflow-hidden rounded-lg shadow-lg
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user