From 2be1a2d8b44d2ccbce7751e199a7bfd3cdee081e Mon Sep 17 00:00:00 2001
From: xiangyu <3170102889@zju.edu.cn>
Date: Tue, 31 May 2022 00:24:08 +0800
Subject: [PATCH] fix: template editor save bug
fix: LaTex view style
---
addon/chrome/content/template.xul | 2 +-
src/base.ts | 2 +-
src/events.ts | 12 +--
src/knowledge.ts | 4 +-
src/template.ts | 172 +++++++++++++++---------------
src/views.ts | 6 +-
6 files changed, 100 insertions(+), 98 deletions(-)
diff --git a/addon/chrome/content/template.xul b/addon/chrome/content/template.xul
index 4c4ff8e..252faac 100644
--- a/addon/chrome/content/template.xul
+++ b/addon/chrome/content/template.xul
@@ -51,7 +51,7 @@
"); - const templateText = this._Addon.template.getTemplateByName( + const templateText = this._Addon.template.getTemplateText( message.content.params.templateName - ).text; + ); const toCopyImage = []; @@ -974,9 +974,9 @@ class AddonEvents extends AddonBase { const newLines = []; newLines.push("
"); - const templateText = this._Addon.template.getTemplateByName( + const templateText = this._Addon.template.getTemplateText( message.content.params.templateName - ).text; + ); for (const noteItem of notes) { /* diff --git a/src/knowledge.ts b/src/knowledge.ts index 3593da5..5227b3d 100644 --- a/src/knowledge.ts +++ b/src/knowledge.ts @@ -341,7 +341,7 @@ class Knowledge extends AddonBase { const linkText = linkedNote.getNoteTitle().trim(); let _newLine: string = ""; const templateText = - this._Addon.template.getTemplateByName("[QuickInsert]").text; + this._Addon.template.getTemplateText("[QuickInsert]"); try { _newLine = new Function( "link, subNoteItem, noteItem", @@ -749,7 +749,7 @@ class Knowledge extends AddonBase { const subNoteLines = convertResult.lines; let _newLine: string = ""; const templateText = - this._Addon.template.getTemplateByName("[QuickImport]").text; + this._Addon.template.getTemplateText("[QuickImport]"); try { _newLine = new Function( "subNoteLines, subNoteItem, noteItem", diff --git a/src/template.ts b/src/template.ts index bdfa9e3..ff1d02d 100644 --- a/src/template.ts +++ b/src/template.ts @@ -3,7 +3,6 @@ import { AddonBase, NoteTemplate } from "./base"; class AddonTemplate extends AddonBase { private _window: Window; _defaultTemplates: NoteTemplate[]; - _templates: NoteTemplate[]; constructor(parent: Knowledge4Zotero) { super(parent); this._defaultTemplates = [ @@ -33,7 +32,6 @@ class AddonTemplate extends AddonBase { disabled: false, }, ]; - this._templates = this.getTemplates(); } initTemplates(_window: Window) { @@ -42,27 +40,33 @@ class AddonTemplate extends AddonBase { } resetTemplates() { - let templatesRaw: string = Zotero.Prefs.get( + let oldTemplatesRaw: string = Zotero.Prefs.get( "Knowledge4Zotero.noteTemplate" ); - if (!templatesRaw) { - Zotero.Prefs.set( - "Knowledge4Zotero.noteTemplate", - JSON.stringify(this._defaultTemplates) - ); - } else { - const templates = JSON.parse(templatesRaw); - let modified = false; - for (const defaultTemplate of this._defaultTemplates) { - if (!this.getTemplateByName(defaultTemplate.name, templates)) { - templates.push(defaultTemplate); - modified = true; - } + // Convert old version + if (oldTemplatesRaw) { + // Zotero.Prefs.set( + // "Knowledge4Zotero.noteTemplate", + // JSON.stringify(this._defaultTemplates) + // ); + const templates: NoteTemplate[] = JSON.parse(oldTemplatesRaw); + for (const template of templates) { + this.setTemplate(template); } - if (modified) { - this.setTemplates(templates); + Zotero.Prefs.clear("Knowledge4Zotero.noteTemplate"); + } + let templateKeys = this.getTemplateKeys(); + const currentNames = templateKeys.map((t) => t.name); + let modified = false; + for (const defaultTemplate of this._defaultTemplates) { + if (!currentNames.includes(defaultTemplate.name)) { + templateKeys.push(defaultTemplate); + modified = true; } } + if (modified) { + this.setTemplateKeys(templateKeys); + } } getSelectedTemplateName(): string { @@ -77,7 +81,7 @@ class AddonTemplate extends AddonBase { } updateTemplateView() { - const templates = this._templates; + const templates = this.getTemplateKeys(); const listbox = this._window.document.getElementById("template-list"); let e, es = this._window.document.getElementsByTagName("listitem"); @@ -100,7 +104,7 @@ class AddonTemplate extends AddonBase { Zotero.debug("update editor"); console.log("update editor"); const name = this.getSelectedTemplateName(); - const template = this.getTemplateByName(name); + const templateText = this.getTemplateText(name); const header: XUL.Textbox = this._window.document.getElementById("editor-name"); @@ -109,7 +113,7 @@ class AddonTemplate extends AddonBase { const saveTemplate = this._window.document.getElementById("save-template"); const deleteTemplate = this._window.document.getElementById("delete-template"); - if (!template) { + if (!name) { header.value = ""; header.setAttribute("disabled", "true"); text.value = ""; @@ -117,9 +121,9 @@ class AddonTemplate extends AddonBase { saveTemplate.setAttribute("disabled", "true"); deleteTemplate.setAttribute("disabled", "true"); } else { - header.value = template.name; + header.value = name; header.removeAttribute("disabled"); - text.value = template.text; + text.value = templateText; text.removeAttribute("disabled"); saveTemplate.removeAttribute("disabled"); deleteTemplate.removeAttribute("disabled"); @@ -132,7 +136,7 @@ class AddonTemplate extends AddonBase { text: "", disabled: false, }; - this.saveTemplate(template); + this.setTemplate(template); this.updateTemplateView(); } @@ -165,29 +169,29 @@ class AddonTemplate extends AddonBase { text: note.getNote(), disabled: false, }; - this.saveTemplate(template); + this.setTemplate(template); this.updateTemplateView(); } saveSelectedTemplate() { const name = this.getSelectedTemplateName(); - const template = this.getTemplateByName(name); const header: XUL.Textbox = this._window.document.getElementById("editor-name"); const text: XUL.Textbox = this._window.document.getElementById("editor-textbox"); - if (!template) { - this.updateEditorView(); - } else { - const oldName = template.name; - template.name = header.value; - template.text = text.value; - this.replaceTemplate(template, oldName); - this._Addon.views.showProgressWindow( - "Better Notes", - `Template ${template.name} saved.` - ); + + const template = this.getTemplateKey(name); + template.name = header.value; + template.text = text.value; + this.setTemplate(template); + if (name !== template.name) { + this.removeTemplate(name); } + this._Addon.views.showProgressWindow( + "Better Notes", + `Template ${template.name} saved.` + ); + this.updateTemplateView(); } @@ -197,70 +201,68 @@ class AddonTemplate extends AddonBase { this.updateTemplateView(); } - getTemplates() { - let templatesRaw: string = Zotero.Prefs.get( - "Knowledge4Zotero.noteTemplate" + getTemplateKeys(): NoteTemplate[] { + let templateKeys: string = Zotero.Prefs.get( + "Knowledge4Zotero.templateKeys" ); - let templates: NoteTemplate[] = []; - if (templatesRaw) { - templates = JSON.parse(templatesRaw); - } - Zotero.debug(templates); - console.log(templates); - return templates; + return templateKeys ? JSON.parse(templateKeys) : []; } - getTemplateByName( - name: string, - templates: NoteTemplate[] = [] - ): NoteTemplate { - templates = templates.length ? templates : this._templates; - return templates.filter((e) => e.name === name)[0]; + getTemplateKey(keyName: string): NoteTemplate { + return this.getTemplateKeys().filter((t) => t.name === keyName)[0]; } - getTemplateIdByName(name: string, templates: NoteTemplate[] = []): number { - templates = templates || this._templates; - return templates.findIndex((e) => e.name === name); - } - - setTemplates(templates: NoteTemplate[]) { - this._templates = templates; + setTemplateKeys(templateKeys: NoteTemplate[]): void { Zotero.Prefs.set( - "Knowledge4Zotero.noteTemplate", - JSON.stringify(templates) + "Knowledge4Zotero.templateKeys", + JSON.stringify(templateKeys) ); } - saveTemplate(template: NoteTemplate) { - const templates = this._templates; - const idx = this.getTemplateIdByName(template.name, templates); - if (idx !== -1) { - templates[idx] = template; - this.setTemplates(templates); - return; + addTemplateKey(key: NoteTemplate): boolean { + const templateKeys = this.getTemplateKeys(); + if (templateKeys.map((t) => t.name).includes(key.name)) { + return false; } - templates.push(template); - this.setTemplates(templates); + templateKeys.push(key); + this.setTemplateKeys(templateKeys); + return true; } - replaceTemplate(template: NoteTemplate, oldName: string) { - const templates = this.getTemplates(); - const idx = this.getTemplateIdByName(oldName, templates); - if (idx !== -1) { - templates.splice(idx, 1, template); - this.setTemplates(templates); + removeTemplateKey(keyName: string): boolean { + const templateKeys = this.getTemplateKeys(); + if (!templateKeys.map((t) => t.name).includes(keyName)) { + return false; } + templateKeys.splice(templateKeys.map((t) => t.name).indexOf(keyName), 1); + this.setTemplateKeys(templateKeys); + return true; } - removeTemplate(name: string): boolean { - const templates = this._templates; - const idx = this.getTemplateIdByName(name, templates); - if (idx !== -1) { - templates.splice(idx, 1); - this.setTemplates(templates); - return true; + getTemplateText(keyName: string): string { + let template: string = Zotero.Prefs.get( + `Knowledge4Zotero.template.${keyName}` + ); + if (!template) { + template = ""; + Zotero.Prefs.set(`Knowledge4Zotero.template.${keyName}`, template); } - return false; + return template; + } + + setTemplate(key: NoteTemplate, template: string = ""): void { + let _key = JSON.parse(JSON.stringify(key)); + if (_key.text) { + template = _key.text; + delete _key.text; + } + this.addTemplateKey(_key); + Zotero.Prefs.set(`Knowledge4Zotero.template.${_key.name}`, template); + } + + removeTemplate(keyName: string): void { + this.removeTemplateKey(keyName); + Zotero.Prefs.clear(`Knowledge4Zotero.template.${keyName}`); } } diff --git a/src/views.ts b/src/views.ts index 2e51f61..047154a 100644 --- a/src/views.ts +++ b/src/views.ts @@ -200,7 +200,7 @@ class AddonViews extends AddonBase { } viewNode.setAttribute("id", "texView"); viewNode.style.height = "100%"; - viewNode.style.padding = "20px 30px 20px 30px"; + viewNode.style.padding = "10px 30px 20px 30px"; viewNode.style.overflowY = "auto"; viewNode.removeAttribute("contentEditable"); Array.prototype.forEach.call( @@ -378,7 +378,7 @@ class AddonViews extends AddonBase { const subNoteLines = convertResult.lines; let _newLine: string = ""; const templateText = - this._Addon.template.getTemplateByName("[QuickImport]").text; + this._Addon.template.getTemplateText("[QuickImport]"); try { _newLine = new Function( "subNoteLines, subNoteItem, noteItem", @@ -706,7 +706,7 @@ class AddonViews extends AddonBase { const _window = this._Addon.knowledge.getWorkspaceWindow(); Zotero.debug(`updateTemplateMenu, ${this.currentOutline}`); let templates = this._Addon.template - .getTemplates() + .getTemplateKeys() .filter((e) => e.name.indexOf(type) !== -1); const popup = _window.document.getElementById( `menu_insert${type}TemplatePopup`