From f3c384e25dd51899e3d097c1c50c4ba0cdf921d6 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Wed, 21 Apr 2021 20:17:19 +1000 Subject: [PATCH] refactoring + move storage to helpers for compatibility --- extension/helpers.js | 76 ++++++++++++------- .../client.js | 16 ++-- .../menu.js | 18 ++--- 3 files changed, 64 insertions(+), 46 deletions(-) diff --git a/extension/helpers.js b/extension/helpers.js index 32aad9b..14e1006 100644 --- a/extension/helpers.js +++ b/extension/helpers.js @@ -6,15 +6,25 @@ 'use strict'; -import './dep/markdown-it.min.js'; - export const ERROR = Symbol(); export const env = {}; env.name = 'browser'; -env.openEnhancerMenu = ({ theme } = {}) => - chrome.runtime.sendMessage({ type: 'enhancerMenu.open', data: { theme } }); +env.openEnhancerMenu = () => chrome.runtime.sendMessage({ type: 'enhancerMenu.open' }); + +/** - */ + +export const storage = {}; + +storage.set = (id, key, value) => + new Promise((res, rej) => chrome.storage.sync.set({ [`[${id}]${key}`]: value }, res)); +storage.get = (id, key) => + new Promise((res, rej) => + chrome.storage.sync.get([`[${id}]${key}`], (values) => res(values[`[${id}]${key}`])) + ); + +/** - */ export const web = {}; @@ -66,17 +76,6 @@ web.escapeHtml = (str) => // https://marketplace.visualstudio.com/items?itemName=bierner.lit-html web.html = (html, ...templates) => html.map((str) => str + (templates.shift() || '')).join(''); -web.Prism = async () => { - try { - return Prism; - } catch { - await import('./dep/prism.js'); - Prism.manual = true; - web.loadStyleset('./dep/prism.css'); - } - return Prism; -}; - /** * @param {string} sheet */ @@ -116,6 +115,37 @@ web.hotkeyListener = (keys, callback) => { web._hotkeys.push({ keys, callback }); }; +/** - */ + +export const fmt = {}; + +import './dep/prism.js'; +fmt.Prism = Prism; +fmt.Prism.manual = true; +fmt.Prism.hooks.add('complete', (event) => { + if (!fmt.Prism._stylesheetLoaded) { + web.loadStyleset('./dep/prism.css'); + fmt.Prism._stylesheetLoaded = true; + } +}); +// delete globalThis['Prism']; + +import './dep/markdown-it.min.js'; +fmt.md = new markdownit({ + linkify: true, + highlight: (str, lang) => + web.html`${web.escapeHtml( + str + )}`, +}); +fmt.md.renderer.rules.code_block = (tokens, idx, options, env, slf) => + web.html`${web.escapeHtml( + tokens[idx].content + )}\n`; +// delete globalThis['markdownit']; + +/** - */ + export const fs = {}; /** @@ -133,6 +163,8 @@ fs.isFile = async (path) => { } }; +/** - */ + export const regexers = { uuid(str) { const match = str.match(/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i); @@ -166,6 +198,8 @@ export const regexers = { }, }; +/** - */ + export const registry = {}; registry.validate = async (mod, err, check) => { @@ -391,15 +425,3 @@ registry.errors = async (callback = () => {}) => { callback(registry._errors); return registry._errors; }; - -export const markdown = new markdownit({ - linkify: true, - highlight: (str, lang) => - web.html`${web.escapeHtml( - str - )}`, -}); -markdown.renderer.rules.code_block = (tokens, idx, options, env, slf) => - web.html`${web.escapeHtml( - tokens[idx].content - )}\n`; diff --git a/extension/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/client.js b/extension/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/client.js index 8e05302..6afed32 100644 --- a/extension/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/client.js +++ b/extension/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/client.js @@ -6,7 +6,8 @@ 'use strict'; -import { web, fs, env } from '../../helpers.js'; +const _id = 'a6621988-551d-495a-97d8-3c568bca2e9e'; +import { env, storage, web, fs } from '../../helpers.js'; const sidebarSelector = '#notion-app > div > div.notion-cursor-listener > div.notion-sidebar-container > div > div > div > div:nth-child(4)'; @@ -16,15 +17,10 @@ web.whenReady([sidebarSelector], async () => { `
${enhancerIcon}
notion-enhancer
` ); const setTheme = () => - new Promise((res, rej) => - chrome.storage.local.set( - { 'notion.theme': document.querySelector('.notion-dark-theme') ? 'dark' : 'light' }, - res - ) - ); - enhancerSidebarElement.addEventListener('click', () => - setTheme().then(env.openEnhancerMenu) - ); + storage.set(_id, 'theme', document.querySelector('.notion-dark-theme') ? 'dark' : 'light'); + enhancerSidebarElement.addEventListener('click', () => { + setTheme().then(env.openEnhancerMenu); + }); window.addEventListener('focus', setTheme); window.addEventListener('blur', setTheme); setTheme(); diff --git a/extension/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.js b/extension/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.js index a795e44..d35973b 100644 --- a/extension/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.js +++ b/extension/repo/menu@a6621988-551d-495a-97d8-3c568bca2e9e/menu.js @@ -6,7 +6,8 @@ 'use strict'; -import { web, fs, registry, markdown } from '../../helpers.js'; +const _id = 'a6621988-551d-495a-97d8-3c568bca2e9e'; +import { storage, web, fmt, fs, registry } from '../../helpers.js'; for (let mod of await registry.get()) { for (let sheet of mod.css?.menu || []) { @@ -42,7 +43,7 @@ components.card = { `), description: ({ description }) => web.createElement( - web.html`

${markdown.renderInline(description)}

` + web.html`

${fmt.md.renderInline(description)}

` ), authors: ({ authors }) => web.createElement(web.html`
    @@ -129,7 +130,6 @@ components.options = {

    ${web.escapeHtml(label)}

    `), - async file(id, { key, label, extensions }) { const opt = web.createElement(web.html`