fix: template editor save bug

fix: LaTex view style
This commit is contained in:
xiangyu 2022-05-31 00:24:08 +08:00
parent 0b58371c28
commit 2be1a2d8b4
6 changed files with 100 additions and 98 deletions

View File

@ -51,7 +51,7 @@
<row style="margin: 10px 0 10px 0;">
<button id="create-template" label="&zotero.__addonRef__.template.create.label;" oncommand="Zotero.Knowledge4Zotero.template.createTemplate();"></button>
<button id="import-template" label="&zotero.__addonRef__.template.import.label;" oncommand="Zotero.Knowledge4Zotero.template.importNoteTemplate();"></button>
<button id="save-template" label="&zotero.__addonRef__.template.save.label;" command="command_save" key="key_save" accesskey="S"></button>
<button id="save-template" label="&zotero.__addonRef__.template.save.label;" command="cmd_save" key="key_save" accesskey="S"></button>
<button id="delete-template" label="&zotero.__addonRef__.template.delete.label;" oncommand="Zotero.Knowledge4Zotero.template.deleteSelectedTemplate();"></button>
<button id="help" label="&helpMenu.label;" command="cmd_help" key="key_help" accesskey="H"></button>
</row>

View File

@ -26,8 +26,8 @@ enum OutlineType {
class NoteTemplate {
name: string;
text: string;
disabled: boolean;
text?: string;
}
export { AddonBase, EditorMessage, OutlineType, NoteTemplate };

View File

@ -853,9 +853,9 @@ class AddonEvents extends AddonBase {
*/
const newLines = [];
const templateText = this._Addon.template.getTemplateByName(
const templateText = this._Addon.template.getTemplateText(
message.content.params.templateName
).text;
);
let _newLine: string = "";
try {
@ -901,9 +901,9 @@ class AddonEvents extends AddonBase {
const newLines = [];
newLines.push("<p> </p>");
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("<p> </p>");
const templateText = this._Addon.template.getTemplateByName(
const templateText = this._Addon.template.getTemplateText(
message.content.params.templateName
).text;
);
for (const noteItem of notes) {
/*

View File

@ -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",

View File

@ -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}`);
}
}

View File

@ -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`