Skip to content

Commit

Permalink
fix: template editor save bug
Browse files Browse the repository at this point in the history
fix: LaTex view style
  • Loading branch information
xiangyu committed May 30, 2022
1 parent 0b58371 commit 2be1a2d
Show file tree
Hide file tree
Showing 6 changed files with 100 additions and 98 deletions.
2 changes: 1 addition & 1 deletion addon/chrome/content/template.xul
Original file line number Diff line number Diff line change
Expand Up @@ -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>
Expand Down
2 changes: 1 addition & 1 deletion src/base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,8 +26,8 @@ enum OutlineType {

class NoteTemplate {
name: string;
text: string;
disabled: boolean;
text?: string;
}

export { AddonBase, EditorMessage, OutlineType, NoteTemplate };
12 changes: 6 additions & 6 deletions src/events.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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 = [];

Expand Down Expand Up @@ -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) {
/*
Expand Down
4 changes: 2 additions & 2 deletions src/knowledge.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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",
Expand Down
172 changes: 87 additions & 85 deletions src/template.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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 = [
Expand Down Expand Up @@ -33,7 +32,6 @@ class AddonTemplate extends AddonBase {
disabled: false,
},
];
this._templates = this.getTemplates();
}

initTemplates(_window: Window) {
Expand All @@ -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 {
Expand All @@ -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");
Expand All @@ -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");
Expand All @@ -109,17 +113,17 @@ 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 = "";
text.setAttribute("disabled", "true");
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");
Expand All @@ -132,7 +136,7 @@ class AddonTemplate extends AddonBase {
text: "",
disabled: false,
};
this.saveTemplate(template);
this.setTemplate(template);
this.updateTemplateView();
}

Expand Down Expand Up @@ -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();
}

Expand All @@ -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;
}
templateKeys.push(key);
this.setTemplateKeys(templateKeys);
return true;
}

removeTemplateKey(keyName: string): boolean {
const templateKeys = this.getTemplateKeys();
if (!templateKeys.map((t) => t.name).includes(keyName)) {
return false;
}
templates.push(template);
this.setTemplates(templates);
templateKeys.splice(templateKeys.map((t) => t.name).indexOf(keyName), 1);
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);
getTemplateText(keyName: string): string {
let template: string = Zotero.Prefs.get(
`Knowledge4Zotero.template.${keyName}`
);
if (!template) {
template = "";
Zotero.Prefs.set(`Knowledge4Zotero.template.${keyName}`, template);
}
return template;
}

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;
setTemplate(key: NoteTemplate, template: string = ""): void {
let _key = JSON.parse(JSON.stringify(key));
if (_key.text) {
template = _key.text;
delete _key.text;
}
return false;
this.addTemplateKey(_key);
Zotero.Prefs.set(`Knowledge4Zotero.template.${_key.name}`, template);
}

removeTemplate(keyName: string): void {
this.removeTemplateKey(keyName);
Zotero.Prefs.clear(`Knowledge4Zotero.template.${keyName}`);
}
}

Expand Down
6 changes: 3 additions & 3 deletions src/views.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down Expand Up @@ -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",
Expand Down Expand Up @@ -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`
Expand Down

0 comments on commit 2be1a2d

Please sign in to comment.