From c6235c6edcf2fbe398fb905d596b301e9efa4c72 Mon Sep 17 00:00:00 2001 From: plylrnsdy Date: Mon, 21 Aug 2023 21:07:34 +0800 Subject: [PATCH] refactor: use `PluginSettings` instead of js object --- README.md | 2 +- package.json | 12 ++-- pnpm-lock.yaml | 72 +++++-------------- src/main.ts | 29 +++----- src/manifest.json | 4 +- src/setting-tab.ts | 18 ++--- test/vault/.typora/core.json | 5 +- .../typora-community-plugin.front-matter.json | 5 -- test/vault/doc.md | 6 ++ 9 files changed, 46 insertions(+), 107 deletions(-) delete mode 100644 test/vault/.typora/data/typora-community-plugin.front-matter.json diff --git a/README.md b/README.md index ad89beb..9e1c431 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,7 @@ English | [简体中文](https://github.com/typora-community-plugin/typora-plugin-front-matter/blob/main/README.zh-CN.md) -This a plugin example based on [typora-community-plugin](https://github.com/typora-community-plugin/typora-community-plugin) for [Typora](https://typora.io). +This a plugin based on [typora-community-plugin](https://github.com/typora-community-plugin/typora-community-plugin) for [Typora](https://typora.io). Auto edit front matter: diff --git a/package.json b/package.json index a49cd90..cf16f61 100644 --- a/package.json +++ b/package.json @@ -14,17 +14,13 @@ "author": "", "license": "MIT", "devDependencies": { - "@types/extract-zip": "1.6.2", - "@types/glob": "7.2.0", "@types/jquery": "3.3.1", "@types/lodash": "~4.14.197", "@types/node": "16.18.0", - "@types/typora": "npm:@typora-community-plugin/typora-types@^1.0.2", - "@types/yauzl": "2.10.0", - "@typora-community-plugin/core": "^2.0.0-beta.10", - "archiver": "^5.3.1", + "@types/typora": "npm:@typora-community-plugin/typora-types@^1.0.3", + "@typora-community-plugin/core": "2.0.0-beta.21", + "archiver": "^5.3.2", "esbuild": "^0.18.20", - "esbuild-plugin-typora": "npm:@typora-community-plugin/esbuild-plugin-typora@^1.0.3", - "iconv-lite": "0.6.3" + "esbuild-plugin-typora": "npm:@typora-community-plugin/esbuild-plugin-typora@^1.0.5" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f885bb3..258cedb 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1,32 +1,24 @@ lockfileVersion: 5.4 specifiers: - '@types/extract-zip': 1.6.2 - '@types/glob': 7.2.0 '@types/jquery': 3.3.1 '@types/lodash': ~4.14.197 '@types/node': 16.18.0 - '@types/typora': npm:@typora-community-plugin/typora-types@^1.0.1 - '@types/yauzl': 2.10.0 - '@typora-community-plugin/core': ^2.0.0-beta.10 - archiver: ^5.3.1 + '@types/typora': npm:@typora-community-plugin/typora-types@^1.0.3 + '@typora-community-plugin/core': 2.0.0-beta.21 + archiver: ^5.3.2 esbuild: ^0.18.20 - esbuild-plugin-typora: npm:@typora-community-plugin/esbuild-plugin-typora@^1.0.3 - iconv-lite: 0.6.3 + esbuild-plugin-typora: npm:@typora-community-plugin/esbuild-plugin-typora@^1.0.5 devDependencies: - '@types/extract-zip': 1.6.2 - '@types/glob': 7.2.0 '@types/jquery': 3.3.1 '@types/lodash': 4.14.197 '@types/node': 16.18.0 - '@types/typora': /@typora-community-plugin/typora-types/1.0.2 - '@types/yauzl': 2.10.0 - '@typora-community-plugin/core': 2.0.0-beta.10 - archiver: 5.3.1 + '@types/typora': /@typora-community-plugin/typora-types/1.0.3 + '@typora-community-plugin/core': 2.0.0-beta.21 + archiver: 5.3.2 esbuild: 0.18.20 - esbuild-plugin-typora: /@typora-community-plugin/esbuild-plugin-typora/1.0.3 - iconv-lite: 0.6.3 + esbuild-plugin-typora: /@typora-community-plugin/esbuild-plugin-typora/1.0.5 packages: @@ -234,17 +226,6 @@ packages: typescript: 5.1.6 dev: true - /@types/extract-zip/1.6.2: - resolution: {integrity: sha512-ZPnENVnXrziwDKO8eaB/+I9SIA6CCFiJxEo4KD2PJ2M6ztWZCQu7u+AA6XNpGIGjqJshak8yeUPnb10V9oF4jg==} - dev: true - - /@types/glob/7.2.0: - resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} - dependencies: - '@types/minimatch': 5.1.2 - '@types/node': 16.18.0 - dev: true - /@types/jquery/3.3.1: resolution: {integrity: sha512-N3h+rzN518yl2xKrW0o6KKdNmWZ+OwG6SoM5TBEQFF0tTv5wXPEsoOuYQ2Kt3/89XbcSZUJLdjiT/2c3BR/ApQ==} dev: true @@ -253,32 +234,22 @@ packages: resolution: {integrity: sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==} dev: true - /@types/minimatch/5.1.2: - resolution: {integrity: sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==} - dev: true - /@types/node/16.18.0: resolution: {integrity: sha512-LqYqYzYvnbCaQfLAwRt0zboqnsViwhZm+vjaMSqcfN36vulAg7Pt0T83q4WZO2YOBw3XdyHi8cQ88H22zmULOA==} dev: true - /@types/yauzl/2.10.0: - resolution: {integrity: sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw==} - dependencies: - '@types/node': 16.18.0 - dev: true - - /@typora-community-plugin/core/2.0.0-beta.10: - resolution: {integrity: sha512-SVpiMHcW//13t/F22cfZJwy1MJq9FpQ482DtcimnkIOCuYd1Tdgnss0AbJCVxA6wK36kfTlH6skhfXq01Qv+xA==} + /@typora-community-plugin/core/2.0.0-beta.21: + resolution: {integrity: sha512-Yc9RlkIti590RDz6royKms4yTVRRBTGP/2C1i7WxRNq94bScBc82efAeWQcK6UJzFuWbh9faQmtkmz/leI1L3Q==} dependencies: '@plylrnsdy/decorate.js': 1.0.1 dev: true - /@typora-community-plugin/esbuild-plugin-typora/1.0.3: - resolution: {integrity: sha512-pbZYrNFdGVQZfavwKIqwcwmrWiZLlldn407DPtQ2/UNzDHB9Yq+IoAFP2xoLVJ8eaaW69FweUfkILIlPOq4KTw==} + /@typora-community-plugin/esbuild-plugin-typora/1.0.5: + resolution: {integrity: sha512-rBzFMuZk39FwoNEm1jYnDMt3oT6iyZBLwMlTP7hd0LA44CBz1ZEJtC6xuXhOBCcvuYPDbv9jtywbfq4a7BUBSg==} dev: true - /@typora-community-plugin/typora-types/1.0.2: - resolution: {integrity: sha512-V0DCfdjvE7PKdstE0KGXKOM94/olF+zBIxAl8WO/jwckJgDvcUs9mBCs4NDRKfe8t7DOlAAh+GYkFzRphYM9PQ==} + /@typora-community-plugin/typora-types/1.0.3: + resolution: {integrity: sha512-ZPiGIUToqawZDLduriLBVg2jOFExW3a48URMMjR1v/QgkyUFh9NEUsjat2MXJ1xpDr2hF+UpDM99ZEjMTcxr/g==} dev: true /archiver-utils/2.1.0: @@ -297,8 +268,8 @@ packages: readable-stream: 2.3.8 dev: true - /archiver/5.3.1: - resolution: {integrity: sha512-8KyabkmbYrH+9ibcTScQ1xCJC/CGcugdVIwB+53f5sZziXgwUh3iXlAlANMxcZyDEfTHMe6+Z5FofV8nopXP7w==} + /archiver/5.3.2: + resolution: {integrity: sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==} engines: {node: '>= 10'} dependencies: archiver-utils: 2.1.0 @@ -445,13 +416,6 @@ packages: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true - /iconv-lite/0.6.3: - resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} - engines: {node: '>=0.10.0'} - dependencies: - safer-buffer: 2.1.2 - dev: true - /ieee754/1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: true @@ -566,10 +530,6 @@ packages: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true - /safer-buffer/2.1.2: - resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - dev: true - /string_decoder/1.1.1: resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} dependencies: diff --git a/src/main.ts b/src/main.ts index fc8cfd9..36eac74 100644 --- a/src/main.ts +++ b/src/main.ts @@ -1,21 +1,21 @@ -import { Plugin } from '@typora-community-plugin/core' +import { Plugin, PluginSettings } from '@typora-community-plugin/core' import { editor, getMarkdown } from 'typora' import { FrontMatterSettingTab } from './setting-tab' import { DEFAULT_SETTINGS, FrontMatterSettings } from './settings' -export default class extends Plugin { - - settings: FrontMatterSettings +export default class extends Plugin { async onload() { const { app } = this - await this.loadSettings() + this.registerSettings( + new PluginSettings(app, this.manifest, { + version: 1, + })) - this.register( - app.vault.on('mounted', () => this.loadSettings())) + this.settings.setDefault(DEFAULT_SETTINGS) this.register( app.workspace.on('file:open', () => { @@ -26,7 +26,7 @@ export default class extends Plugin { editor.stylize.insertMetaBlock() } if (isEmptyDoc) { - docMenu.writeProperty(this.settings.propNameCreated, nowDatetime(this.settings.dateFormat)) + docMenu.writeProperty(this.settings.get('propNameCreated'), nowDatetime(this.settings.get('dateFormat'))) } })) @@ -37,22 +37,11 @@ export default class extends Plugin { if (docMenu.getMetaNode()) { editor.stylize.insertMetaBlock() } - docMenu.writeProperty(this.settings.propNameUpdated, nowDatetime(this.settings.dateFormat)) + docMenu.writeProperty(this.settings.get('propNameUpdated'), nowDatetime(this.settings.get('dateFormat'))) })) this.registerSettingTab(new FrontMatterSettingTab(this)) } - - onunload() { - } - - async loadSettings() { - this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()) - } - - async saveSettings() { - await this.saveData(this.settings) - } } function nowDatetime(format: string) { diff --git a/src/manifest.json b/src/manifest.json index d5387b3..074429c 100644 --- a/src/manifest.json +++ b/src/manifest.json @@ -4,7 +4,7 @@ "description": "Auto edit front matter.", "author": "plylrnsdy", "authorUrl": "https://github.com/plylrnsdy", - "version": "1.0.1", + "version": "1.0.2", "minAppVersion": "1.5.0", - "minCoreVersion": "2.0.0-beta.10" + "minCoreVersion": "2.0.0-beta.21" } diff --git a/src/setting-tab.ts b/src/setting-tab.ts index 5fc10cd..53beb5c 100644 --- a/src/setting-tab.ts +++ b/src/setting-tab.ts @@ -34,9 +34,6 @@ export class FrontMatterSettingTab extends SettingTab { super() } - onload() { - } - show() { const { plugin } = this const { t } = this.i18n @@ -47,11 +44,10 @@ export class FrontMatterSettingTab extends SettingTab { setting.addName(t.propCreated) setting.addDescription(t.propCreatedDesc) setting.addText(input => { - input.value = plugin.settings.propNameCreated + input.value = plugin.settings.get('propNameCreated') input.placeholder = DEFAULT_SETTINGS.propNameCreated input.oninput = () => { - plugin.settings.propNameCreated = input.value ?? DEFAULT_SETTINGS.propNameCreated - plugin.saveSettings() + plugin.settings.set('propNameCreated', input.value ?? DEFAULT_SETTINGS.propNameCreated) } }) }) @@ -60,11 +56,10 @@ export class FrontMatterSettingTab extends SettingTab { setting.addName(t.propUpdated) setting.addDescription(t.propUpdatedDesc) setting.addText(input => { - input.value = plugin.settings.propNameUpdated + input.value = plugin.settings.get('propNameUpdated') input.placeholder = DEFAULT_SETTINGS.propNameUpdated input.oninput = () => { - plugin.settings.propNameUpdated = input.value ?? DEFAULT_SETTINGS.propNameUpdated - plugin.saveSettings() + plugin.settings.set('propNameUpdated', input.value ?? DEFAULT_SETTINGS.propNameUpdated) } }) }) @@ -73,11 +68,10 @@ export class FrontMatterSettingTab extends SettingTab { setting.addName(t.dateFormat) setting.addDescription(t.dateFormatDesc) setting.addText(input => { - input.value = plugin.settings.dateFormat + input.value = plugin.settings.get('dateFormat') input.placeholder = DEFAULT_SETTINGS.dateFormat input.oninput = () => { - plugin.settings.dateFormat = input.value ?? DEFAULT_SETTINGS.dateFormat - plugin.saveSettings() + plugin.settings.set('dateFormat', input.value ?? DEFAULT_SETTINGS.dateFormat) } }) }) diff --git a/test/vault/.typora/core.json b/test/vault/.typora/core.json index 4b78a99..ac48b91 100644 --- a/test/vault/.typora/core.json +++ b/test/vault/.typora/core.json @@ -1,8 +1,7 @@ { - "version": "2.0.0-beta.1", + "version": 1, "settings": { - "githubPluginListUri": "jsdelivr", - "githubDownloadUri": "ghproxy", + "githubProxy": "ghproxy", "showRibbon": true, "showFileTabs": true } diff --git a/test/vault/.typora/data/typora-community-plugin.front-matter.json b/test/vault/.typora/data/typora-community-plugin.front-matter.json deleted file mode 100644 index 7fde044..0000000 --- a/test/vault/.typora/data/typora-community-plugin.front-matter.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "propNameCreated": "created", - "propNameUpdated": "updated", - "dateFormat": "yyyy-MM-dd hh:mm:ss" -} diff --git a/test/vault/doc.md b/test/vault/doc.md index c586700..1d7b72a 100644 --- a/test/vault/doc.md +++ b/test/vault/doc.md @@ -1,4 +1,10 @@ +--- +created: 2023-08-21 21:04:43 +updated: 2023-08-21 21:04:47 +--- + # Title Lorem, ipsum dolor sit amet consectetur adipisicing elit. Adipisci nesciunt dolorem, blanditiis ea facilis, omnis dignissimos, eligendi architecto ducimus veniam necessitatibus illum assumenda id culpa officiis explicabo delectus sequi! Quas. +