diff --git a/README.md b/README.md index 9e4fe9c..e8fbcfc 100644 --- a/README.md +++ b/README.md @@ -1,57 +1,2 @@ -## Obsidian Sample Plugin - -This is a sample plugin for Obsidian (https://obsidian.md). - -This project uses Typescript to provide type checking and documentation. -The repo depends on the latest plugin API (obsidian.d.ts) in Typescript Definition format, which contains TSDoc comments describing what it does. - -**Note:** The Obsidian API is still in early alpha and is subject to change at any time! - -This sample plugin demonstrates some of the basic functionality the plugin API can do. -- Changes the default font color to red using `styles.css`. -- Adds a ribbon icon, which shows a Notice when clicked. -- Adds a command "Open Sample Modal" which opens a Modal. -- Adds a plugin setting tab to the settings page. -- Registers a global click event and output 'click' to the console. -- Registers a global interval which logs 'setInterval' to the console. - -### First time developing plugins? - -Quick starting guide for new plugin devs: - -- Make a copy of this repo as a template with the "Use this template" button (login to GitHub if you don't see it). -- Clone your repo to a local development folder. For convenience, you can place this folder in your `.obsidian/plugins/your-plugin-name` folder. -- Install NodeJS, then run `npm i` in the command line under your repo folder. -- Run `npm run dev` to compile your plugin from `main.ts` to `main.js`. -- Make changes to `main.ts` (or create new `.ts` files). Those changes should be automatically compiled into `main.js`. -- Reload Obsidian to load the new version of your plugin. -- Enable plugin in settings window. -- For updates to the Obsidian API run `npm update` in the command line under your repo folder. - -### Releasing new releases - -- Update your `manifest.json` with your new version number, such as `1.0.1`, and the minimum Obsidian version required for your latest release. -- Update your `versions.json` file with `"new-plugin-version": "minimum-obsidian-version"` so older versions of Obsidian can download an older version of your plugin that's compatible. -- Create new GitHub release using your new version number as the "Tag version". Use the exact version number, don't include a prefix `v`. See here for an example: https://github.com/obsidianmd/obsidian-sample-plugin/releases -- Upload the files `manifest.json`, `main.js`, `styles.css` as binary attachments. -- Publish the release. - -### Adding your plugin to the community plugin list - -- Publish an initial version. -- Make sure you have a `README.md` file in the root of your repo. -- Make a pull request at https://github.com/obsidianmd/obsidian-releases to add your plugin. - -### How to use - -- Clone this repo. -- `npm i` or `yarn` to install dependencies -- `npm run dev` to start compilation in watch mode. - -### Manually installing the plugin - -- Copy over `main.js`, `styles.css`, `manifest.json` to your vault `VaultFolder/.obsidian/plugins/your-plugin-id/`. - -### API Documentation - -See https://github.com/obsidianmd/obsidian-api +## QuickAdd +Quickly add new pages or content to your vault. \ No newline at end of file diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 0000000..a0dce62 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,7 @@ +// babel.config.js +module.exports = { + presets: [ + ['@babel/preset-env', {targets: {node: 'current'}}], + '@babel/preset-typescript', + ], +}; diff --git a/jest.config.json b/jest.config.json new file mode 100644 index 0000000..5c0997f --- /dev/null +++ b/jest.config.json @@ -0,0 +1,6 @@ +{ + "clearMocks": true, + "testEnvironment": "node", + "maxConcurrency": 1, + "maxWorkers": 1 +} \ No newline at end of file diff --git a/main.ts b/main.ts deleted file mode 100644 index eeb3dda..0000000 --- a/main.ts +++ /dev/null @@ -1,112 +0,0 @@ -import { App, Modal, Notice, Plugin, PluginSettingTab, Setting } from 'obsidian'; - -interface MyPluginSettings { - mySetting: string; -} - -const DEFAULT_SETTINGS: MyPluginSettings = { - mySetting: 'default' -} - -export default class MyPlugin extends Plugin { - settings: MyPluginSettings; - - async onload() { - console.log('loading plugin'); - - await this.loadSettings(); - - this.addRibbonIcon('dice', 'Sample Plugin', () => { - new Notice('This is a notice!'); - }); - - this.addStatusBarItem().setText('Status Bar Text'); - - this.addCommand({ - id: 'open-sample-modal', - name: 'Open Sample Modal', - // callback: () => { - // console.log('Simple Callback'); - // }, - checkCallback: (checking: boolean) => { - let leaf = this.app.workspace.activeLeaf; - if (leaf) { - if (!checking) { - new SampleModal(this.app).open(); - } - return true; - } - return false; - } - }); - - this.addSettingTab(new SampleSettingTab(this.app, this)); - - this.registerCodeMirror((cm: CodeMirror.Editor) => { - console.log('codemirror', cm); - }); - - this.registerDomEvent(document, 'click', (evt: MouseEvent) => { - console.log('click', evt); - }); - - this.registerInterval(window.setInterval(() => console.log('setInterval'), 5 * 60 * 1000)); - } - - onunload() { - console.log('unloading plugin'); - } - - async loadSettings() { - this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); - } - - async saveSettings() { - await this.saveData(this.settings); - } -} - -class SampleModal extends Modal { - constructor(app: App) { - super(app); - } - - onOpen() { - let {contentEl} = this; - contentEl.setText('Woah!'); - } - - onClose() { - let {contentEl} = this; - contentEl.empty(); - } -} - -class SampleSettingTab extends PluginSettingTab { - plugin: MyPlugin; - - constructor(app: App, plugin: MyPlugin) { - super(app, plugin); - this.plugin = plugin; - } - - display(): void { - let {containerEl} = this; - - containerEl.empty(); - - containerEl.createEl('h2', {text: 'Settings for my awesome plugin.'}); - - new Setting(containerEl) - .setName('Setting #1') - .setDesc('It\'s a secret') - .addText(text => text - .setPlaceholder('Enter your secret') - .setValue('') - .onChange(async (value) => { - console.log('Secret: ' + value); - this.plugin.settings.mySetting = value; - await this.plugin.saveSettings(); - })); - } -} diff --git a/manifest.json b/manifest.json index 4ca4889..094a87f 100644 --- a/manifest.json +++ b/manifest.json @@ -1,10 +1,10 @@ { - "id": "obsidian-sample-plugin", - "name": "Sample Plugin", - "version": "1.0.1", - "minAppVersion": "0.9.12", - "description": "This is a sample plugin for Obsidian. This plugin demonstrates some of the capabilities of the Obsidian API.", - "author": "Obsidian", - "authorUrl": "https://obsidian.md/about", + "id": "quickadd", + "name": "QuickAdd", + "version": "0.0.0", + "minAppVersion": "0.12.00", + "description": "Quickly add new pages or content to your vault.", + "author": "Christian B. B. Houmann", + "authorUrl": "https://bagerbach.com", "isDesktopOnly": false } diff --git a/package.json b/package.json index 29e2406..a3247ac 100644 --- a/package.json +++ b/package.json @@ -1,23 +1,42 @@ { - "name": "obsidian-sample-plugin", - "version": "0.12.0", - "description": "This is a sample plugin for Obsidian (https://obsidian.md)", + "name": "quickadd", + "version": "0.0.0", + "description": "Quickly add new pages or content to your vault.", "main": "main.js", "scripts": { "dev": "rollup --config rollup.config.js -w", - "build": "rollup --config rollup.config.js --environment BUILD:production" + "build": "rollup --config rollup.config.js --environment BUILD:production", + "test": "jest" }, "keywords": [], - "author": "", + "author": "Christian B. B. Houmann", "license": "MIT", "devDependencies": { + "@babel/core": "7.14.3", + "@babel/preset-env": "7.14.2", + "@babel/preset-typescript": "7.13.0", "@rollup/plugin-commonjs": "^18.0.0", "@rollup/plugin-node-resolve": "^11.2.1", "@rollup/plugin-typescript": "^8.2.1", - "@types/node": "^14.14.37", + "@tsconfig/svelte": "1.0.10", + "@types/jest": "26.0.23", + "@types/node": "14.17.1", + "babel-core": "6.26.3", + "babel-jest": "27.0.1", + "jest": "27.0.1", + "jest-environment-node": "27.0.1", "obsidian": "^0.12.0", "rollup": "^2.32.1", + "rollup-plugin-strip-code": "0.2.7", + "rollup-plugin-svelte": "^7.1.0", + "svelte": "^3.37.0", + "svelte-check": "^1.3.0", + "svelte-preprocess": "^4.7.0", + "ts-jest": "27.0.0", "tslib": "^2.2.0", "typescript": "^4.2.4" + }, + "dependencies": { + "@popperjs/core": "^2.9.2" } } diff --git a/rollup.config.js b/rollup.config.js index dd4d041..71e54ab 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,30 +1,29 @@ import typescript from '@rollup/plugin-typescript'; import {nodeResolve} from '@rollup/plugin-node-resolve'; import commonjs from '@rollup/plugin-commonjs'; - -const isProd = (process.env.BUILD === 'production'); - -const banner = -`/* -THIS IS A GENERATED/BUNDLED FILE BY ROLLUP -if you want to view the source visit the plugins github repository -*/ -`; +import svelte from "rollup-plugin-svelte"; +import autoPreprocess from "svelte-preprocess"; +import stripCode from "rollup-plugin-strip-code"; export default { - input: 'main.ts', + input: 'src/main.ts', output: { dir: '.', - sourcemap: 'inline', - sourcemapExcludeSources: isProd, format: 'cjs', exports: 'default', - banner, }, external: ['obsidian'], plugins: [ typescript(), - nodeResolve({browser: true}), - commonjs(), + nodeResolve({ browser: true, dedupe: ["svelte"] }), + commonjs({ include: "node_modules/**" }), + svelte({ + emitCss: false, + preprocess: autoPreprocess(), + }), + process.env["BUILD"] ? stripCode({ + start_comment: 'START.DEVCMD', + end_comment: 'END.DEVCMD' + }) : null ] -}; \ No newline at end of file +}; diff --git a/src/main.ts b/src/main.ts new file mode 100644 index 0000000..f0cf621 --- /dev/null +++ b/src/main.ts @@ -0,0 +1,47 @@ +import {Plugin} from 'obsidian'; +import {DEFAULT_SETTINGS, QuickAddSettingsTab} from "./quickAddSettingsTab"; + + +export default class QuickAdd extends Plugin { + settings: QuickAddSettingsTab; + + async onload() { + console.log('Loading QuickAdd'); + + await this.loadSettings(); + + this.addCommand({ + id: 'runQuickAdd', + name: 'Run QuickAdd', + callback: () => { + + } + }) + + /*START.DEVCMD*/ + this.addCommand({ + id: 'reloadQuickAdd', + name: 'Reload QuickAdd (dev)', + callback: () => { // @ts-ignore - for this.app.plugins + const id: string = this.manifest.id, plugins = this.app.plugins; + plugins.disablePlugin(id).then(() => plugins.enablePlugin(id)); + }, + }); + /*END.DEVCMD*/ + + this.addSettingTab(new QuickAddSettingsTab(this.app, this)); + } + + onunload() { + console.log('Unloading QuickAdd'); + } + + async loadSettings() { + this.settings = Object.assign({}, DEFAULT_SETTINGS, await this.loadData()); + } + + async saveSettings() { + await this.saveData(this.settings); + } +} + diff --git a/src/quickAddSettingsTab.ts b/src/quickAddSettingsTab.ts new file mode 100644 index 0000000..17cd35c --- /dev/null +++ b/src/quickAddSettingsTab.ts @@ -0,0 +1,25 @@ +import {App, PluginSettingTab, Setting} from "obsidian"; +import type QuickAdd from "./main"; + +export interface QuickAddSettings { + +} + +export const DEFAULT_SETTINGS: QuickAddSettings = { +} + +export class QuickAddSettingsTab extends PluginSettingTab { + plugin: QuickAdd; + + constructor(app: App, plugin: QuickAdd) { + super(app, plugin); + this.plugin = plugin; + } + + display(): void { + let {containerEl} = this; + containerEl.empty(); + + containerEl.createEl('h2', {text: 'QuickAdd Settings'}); + } +} \ No newline at end of file diff --git a/styles.css b/styles.css index cfd0fd7..e69de29 100644 --- a/styles.css +++ b/styles.css @@ -1,4 +0,0 @@ -/* Sets all the text color to red! */ -body { - color: red; -} diff --git a/tsconfig.json b/tsconfig.json index 09cf7ec..e09a2b4 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,22 +1,13 @@ { + "extends": "@tsconfig/svelte/tsconfig.json", + + "include": ["src/**/*"], + "exclude": ["node_modules/*"], "compilerOptions": { + "types": ["node", "svelte", "jest"], "baseUrl": ".", - "inlineSourceMap": true, - "inlineSources": true, - "module": "ESNext", - "target": "es6", - "allowJs": true, - "noImplicitAny": true, - "moduleResolution": "node", - "importHelpers": true, - "lib": [ - "dom", - "es5", - "scripthost", - "es2015" - ] - }, - "include": [ - "**/*.ts" - ] + "paths": { + "src": ["src/*"] + } + } } diff --git a/versions.json b/versions.json index ba14785..01436ec 100644 --- a/versions.json +++ b/versions.json @@ -1,4 +1,3 @@ { - "1.0.1": "0.9.12", - "1.0.0": "0.9.7" + "0.0.1": "0.12.4" }