From 1ee36112a4147210f4af0a83ac063766245f8e1e Mon Sep 17 00:00:00 2001 From: Diomede Date: Sun, 23 May 2021 22:14:13 +0200 Subject: [PATCH] restructure folders and start using date-fns for parsing dates --- package.json | 1 + rollup.config.js | 6 ++-- main.ts => src/main.ts | 21 +++++++++++++- settings.ts => src/settings.ts | 1 - .../suggest}/codemirror-suggest.ts | 0 {suggest => src/suggest}/suggest.ts | 0 {suggest => src/suggest}/template-suggest.ts | 21 +++++++++----- utils.ts => src/utils.ts | 28 +++++++++++++++++++ 8 files changed, 66 insertions(+), 12 deletions(-) rename main.ts => src/main.ts (56%) rename settings.ts => src/settings.ts (98%) rename {suggest => src/suggest}/codemirror-suggest.ts (100%) rename {suggest => src/suggest}/suggest.ts (100%) rename {suggest => src/suggest}/template-suggest.ts (87%) rename utils.ts => src/utils.ts (56%) diff --git a/package.json b/package.json index c8d1123..bc6f16d 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "typescript": "^4.2.4" }, "dependencies": { + "date-fns": "^2.21.3", "liquidjs": "^9.25.0", "lodash": "^4.17.21" } diff --git a/rollup.config.js b/rollup.config.js index dd4d041..80651fd 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -4,7 +4,7 @@ import commonjs from '@rollup/plugin-commonjs'; const isProd = (process.env.BUILD === 'production'); -const banner = +const banner = `/* THIS IS A GENERATED/BUNDLED FILE BY ROLLUP if you want to view the source visit the plugins github repository @@ -12,7 +12,7 @@ if you want to view the source visit the plugins github repository `; export default { - input: 'main.ts', + input: 'src/main.ts', output: { dir: '.', sourcemap: 'inline', @@ -27,4 +27,4 @@ export default { nodeResolve({browser: true}), commonjs(), ] -}; \ No newline at end of file +}; diff --git a/main.ts b/src/main.ts similarity index 56% rename from main.ts rename to src/main.ts index 2dbfada..f909dbd 100644 --- a/main.ts +++ b/src/main.ts @@ -1,3 +1,4 @@ +import { get, isEmpty } from "lodash"; import { Plugin } from "obsidian"; import { LiquidTemplatesSettings, DEFAULT_SETTINGS, LiquidTemplatesSettingsTab } from "./settings"; @@ -40,11 +41,29 @@ export default class LiquidTemplates extends Plugin { }; async loadSettings(): Promise { - this.settings = Object.assign({ ...DEFAULT_SETTINGS }, await this.loadData()); + this.settings = this.settingsWithDefault(await this.loadData()); } async saveSettings(): Promise { + // the templates folder can change this.setupAutosuggest(); await this.saveData(this.settings); } + + settingsWithDefault(savedSettings: LiquidTemplatesSettings): LiquidTemplatesSettings { + // TODO: improve me + return { + templatesFolder: this.getSettingOrDefault(savedSettings, 'templatesFolder'), + excludeFolders: this.getSettingOrDefault(savedSettings, 'excludeFolders'), + dateFormat: this.getSettingOrDefault(savedSettings, 'dateFormat'), + timeFormat: this.getSettingOrDefault(savedSettings, 'timeFormat'), + autocompleteTrigger: this.getSettingOrDefault(savedSettings, 'autocompleteTrigger'), + } + } + + getSettingOrDefault(savedSettings: LiquidTemplatesSettings, settingKey: string, defaultValue?: any): any { + let currentValue = get(savedSettings, settingKey) + if (!isEmpty(currentValue)) return currentValue; + return get(DEFAULT_SETTINGS, settingKey, defaultValue); + } } diff --git a/settings.ts b/src/settings.ts similarity index 98% rename from settings.ts rename to src/settings.ts index 24a641b..46c0c8d 100644 --- a/settings.ts +++ b/src/settings.ts @@ -1,4 +1,3 @@ -import { get, isEmpty } from "lodash"; import { App, PluginSettingTab, Setting } from "obsidian"; import LiquidTemplates from "./main"; diff --git a/suggest/codemirror-suggest.ts b/src/suggest/codemirror-suggest.ts similarity index 100% rename from suggest/codemirror-suggest.ts rename to src/suggest/codemirror-suggest.ts diff --git a/suggest/suggest.ts b/src/suggest/suggest.ts similarity index 100% rename from suggest/suggest.ts rename to src/suggest/suggest.ts diff --git a/suggest/template-suggest.ts b/src/suggest/template-suggest.ts similarity index 87% rename from suggest/template-suggest.ts rename to src/suggest/template-suggest.ts index ff9a0c1..d36a3d9 100644 --- a/suggest/template-suggest.ts +++ b/src/suggest/template-suggest.ts @@ -2,7 +2,8 @@ import { App, TFile } from "obsidian"; import { Liquid } from "liquidjs"; import type PoweredTemplates from "../main"; import CodeMirrorSuggest from "./codemirror-suggest"; -import { getTFilesFromFolder } from "utils"; +import { getTFilesFromFolder, customizeEngine } from "../utils"; +import { format } from "date-fns"; interface ITemplateCompletion { label: string; @@ -21,7 +22,7 @@ export default class TemplateSuggest extends CodeMirrorSuggest { // TODO: implement me @@ -47,7 +48,7 @@ export default class TemplateSuggest extends CodeMirrorSuggest { const head = this.getStartPos(); const anchor = this.cmEditor.getCursor(); + console.log('--- context', await this.generateContext()); if (suggestion.file) { const templateString = await this.app.vault.read(suggestion.file) diff --git a/utils.ts b/src/utils.ts similarity index 56% rename from utils.ts rename to src/utils.ts index b74edd8..c9fdbdb 100644 --- a/utils.ts +++ b/src/utils.ts @@ -1,5 +1,7 @@ import { App, normalizePath, TAbstractFile, TFile, TFolder, Vault } from "obsidian"; import { compact } from 'lodash'; +import { Liquid } from "liquidjs"; +import { format, parse, subDays } from 'date-fns'; const ALLOWED_EXTENSIONS = ['md'] @@ -28,3 +30,29 @@ export function getTFilesFromFolder(app: App, folderName: string, subfoldersToEx return files; } + +function parseDate(stringToParse: string): Date { + if(['now', 'today'].includes(stringToParse)) return new Date; + if(stringToParse === 'yesterday') return subDays(Date.now(), 1); + // try to parse the given string + return new Date(Date.parse(stringToParse)); +} + +export function customizeEngine(engine: Liquid, ): Liquid { + engine.registerFilter('date', (valueToParse, dateFormat) => { + const dateToFormat = (typeof valueToParse === 'number') + ? valueToParse + : parseDate(valueToParse) + try { + return format(dateToFormat, dateFormat) + } catch (e) { + if (e instanceof RangeError) return valueToParse; + } + }); + + engine.registerFilter('days_ago', (daysToSub) => { + return subDays(Date.now(), daysToSub); + }) + + return engine; +}