parent
0b58371c28
commit
2be1a2d8b4
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -26,8 +26,8 @@ enum OutlineType {
|
|||
|
||||
class NoteTemplate {
|
||||
name: string;
|
||||
text: string;
|
||||
disabled: boolean;
|
||||
text?: string;
|
||||
}
|
||||
|
||||
export { AddonBase, EditorMessage, OutlineType, NoteTemplate };
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
/*
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
172
src/template.ts
172
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}`);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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`
|
||||
|
|
|
|||
Loading…
Reference in New Issue