From c0e21f47e8cff2de84089381eacb51616f453521 Mon Sep 17 00:00:00 2001 From: xiangyu <3170102889@zju.edu.cn> Date: Fri, 10 Jun 2022 21:22:13 +0800 Subject: [PATCH] add: export filename template resolve: #32 --- addon/chrome/content/overlay.xul | 2 +- src/export.ts | 37 +++++++++++++++++-------------- src/knowledge.ts | 38 ++++++++++++++++++++++---------- src/template.ts | 5 +++++ 4 files changed, 52 insertions(+), 30 deletions(-) diff --git a/addon/chrome/content/overlay.xul b/addon/chrome/content/overlay.xul index f20f33a..da60e86 100644 --- a/addon/chrome/content/overlay.xul +++ b/addon/chrome/content/overlay.xul @@ -66,7 +66,7 @@ - + diff --git a/src/export.ts b/src/export.ts index a752328..4643e61 100644 --- a/src/export.ts +++ b/src/export.ts @@ -57,25 +57,28 @@ class AddonExport extends AddonBase { ) as XUL.Checkbox ).checked = exportCopy; } + this.doUpdate(); } doUpdate(event: XULEvent) { - if ( - event.target.getAttribute("id") === "Knowledge4Zotero-export-enablesingle" - ) { - ( - this._window.document.getElementById( - "Knowledge4Zotero-export-embedLink" - ) as XUL.Checkbox - ).disabled = (event.target as XUL.Checkbox).checked; - } else if ( - event.target.getAttribute("id") === "Knowledge4Zotero-export-enablefile" - ) { - ( - this._window.document.getElementById( - "Knowledge4Zotero-export-enablesingle" - ) as XUL.Checkbox - ).disabled = !(event.target as XUL.Checkbox).checked; - } + ( + this._window.document.getElementById( + "Knowledge4Zotero-export-embedLink" + ) as XUL.Checkbox + ).disabled = ( + this._window.document.getElementById( + "Knowledge4Zotero-export-enablesingle" + ) as XUL.Checkbox + ).checked; + + ( + this._window.document.getElementById( + "Knowledge4Zotero-export-enablesingle" + ) as XUL.Checkbox + ).disabled = !( + this._window.document.getElementById( + "Knowledge4Zotero-export-enablefile" + ) as XUL.Checkbox + ).checked; } doUnload() { this.io.deferred && this.io.deferred.resolve(); diff --git a/src/knowledge.ts b/src/knowledge.ts index 4549886..e55cf36 100644 --- a/src/knowledge.ts +++ b/src/knowledge.ts @@ -854,11 +854,9 @@ class Knowledge extends AddonBase { this._exportNote = newNote; - let filename = `${Zotero.File.pathToFile(filepath).path}/${ - newNote.getNoteTitle - ? newNote.getNoteTitle().replace(/[/\\?%*:|"<>]/g, "-") + "-" - : "" - }${note.key}.md`; + let filename = `${ + Zotero.File.pathToFile(filepath).path + }/${this._getFileName(note)}`; filename = filename.replace(/\\/g, "/"); this._export(newNote, filename, newNote.id !== note.id); @@ -888,12 +886,7 @@ class Knowledge extends AddonBase { link: this.getNoteLink(_note), id: _note.id, note: _note, - filename: - (_note.getNoteTitle - ? _note.getNoteTitle().replace(/[/\\?%*:|"<> ]/g, "-") + "-" - : "") + - _note.key + - ".md", + filename: this._getFileName(_note), }; }); this._exportFileDict = noteLinkDict; @@ -909,7 +902,7 @@ class Knowledge extends AddonBase { } } - async _export( + private async _export( note: ZoteroItem, filename: string, deleteAfterExport: boolean @@ -942,6 +935,27 @@ class Knowledge extends AddonBase { } } + private _getFileName(noteItem: ZoteroItem) { + let _newLine: string = ""; + const templateText = + this._Addon.template.getTemplateText("[ExportMDFileName]"); + try { + _newLine = new Function("noteItem", "return `" + templateText + "`")( + noteItem + ); + } catch (e) { + alert(e); + return ( + (noteItem.getNoteTitle + ? noteItem.getNoteTitle().replace(/[/\\?%*:|"<> ]/g, "-") + "-" + : "") + + noteItem.key + + ".md" + ); + } + return _newLine; + } + async convertNoteLines( currentNote: ZoteroItem, rootNoteIds: number[], diff --git a/src/template.ts b/src/template.ts index 7193761..dd0e060 100644 --- a/src/template.ts +++ b/src/template.ts @@ -21,6 +21,11 @@ class AddonTemplate extends AddonBase { text: '

${annotationItem.annotationComment ? annotationItem.annotationComment : `Annotation`}

', disabled: false, }, + { + name: "[ExportMDFileName]", + text: '${(noteItem.getNoteTitle ? noteItem.getNoteTitle().replace(/[/\\?%*:|"<> ]/g, "-") + "-" : "")}${noteItem.key}.md', + disabled: false, + }, { name: "[Item] item-notes with metadata", text: '

${topItem.getField("title")}

\n

💡 Meta Data

\n\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n

Title

\n
\n ${topItem.getField(\'title\')}\n
\n

Journal

\n
\n ${topItem.getField(\'publicationTitle\')}\n
\n

1st Author

\n
\n ${topItem.getField(\'firstCreator\')}\n
\n

Authors

\n
\n ${topItem.getCreators().map((v)=>v.firstName+" "+v.lastName).join("; ")}\n
\n

Pub. date

\n
\n ${topItem.getField(\'date\')}\n
\n

DOI

\n
\n ${topItem.getField(\'DOI\')}\n
\n

Archive

\n
\n ${topItem.getField(\'archive\')}\n
\n

Archive Location

\n
\n ${topItem.getField(\'archiveLocation\')}\n
\n

Call No.

\n
\n ${topItem.getField(\'callNumber\')}\n
\n${itemNotes.map((noteItem)=>{\nconst noteLine = `

📜 Note: ${noteItem.key}

\n
\n ${noteItem.getNote()}\n

Merge Date: ${new Date().toISOString().substr(0,10)+" "+ new Date().toTimeString()}

\n
\n

📝 Comments

\n
\n

Make your comments

\n

\n
`;\ncopyNoteImage(noteItem);\nreturn noteLine;\n}).join("\\n")}\n',