diff --git a/addon/chrome/content/export.xul b/addon/chrome/content/export.xul
index 7581dc3..280ca25 100644
--- a/addon/chrome/content/export.xul
+++ b/addon/chrome/content/export.xul
@@ -19,6 +19,11 @@
+
+
+
+
+
diff --git a/addon/chrome/locale/en-US/overlay.dtd b/addon/chrome/locale/en-US/overlay.dtd
index c126504..012e2f6 100644
--- a/addon/chrome/locale/en-US/overlay.dtd
+++ b/addon/chrome/locale/en-US/overlay.dtd
@@ -3,6 +3,7 @@
+
diff --git a/addon/chrome/locale/zh-CN/overlay.dtd b/addon/chrome/locale/zh-CN/overlay.dtd
index e613984..bf9a2b9 100644
--- a/addon/chrome/locale/zh-CN/overlay.dtd
+++ b/addon/chrome/locale/zh-CN/overlay.dtd
@@ -3,6 +3,7 @@
+
diff --git a/src/events.ts b/src/events.ts
index 42a376a..72b1448 100644
--- a/src/events.ts
+++ b/src/events.ts
@@ -564,6 +564,7 @@ class AddonEvents extends AddonBase {
await this._Addon.knowledge.exportNoteToFile(
message.content.editorInstance._item,
true,
+ options.embedImage,
options.exportFile,
options.exportNote,
options.exportCopy
diff --git a/src/export.ts b/src/export.ts
index 2b4e694..1b8c392 100644
--- a/src/export.ts
+++ b/src/export.ts
@@ -23,6 +23,14 @@ class AddonExport extends AddonBase {
) as XUL.Checkbox
).checked = exportFile;
}
+ let embedImage = Zotero.Prefs.get("Knowledge4Zotero.embedImage");
+ if (typeof embedImage !== "undefined") {
+ (
+ this._window.document.getElementById(
+ "Knowledge4Zotero-export-embedImage"
+ ) as XUL.Checkbox
+ ).checked = embedImage;
+ }
let exportNote = Zotero.Prefs.get("Knowledge4Zotero.exportNote");
if (typeof exportNote !== "undefined") {
(
@@ -50,6 +58,11 @@ class AddonExport extends AddonBase {
"Knowledge4Zotero-export-enablefile"
) as XUL.Checkbox
).checked;
+ let embedImage = (
+ this._window.document.getElementById(
+ "Knowledge4Zotero-export-embedImage"
+ ) as XUL.Checkbox
+ ).checked;
let exportNote = (
this._window.document.getElementById(
"Knowledge4Zotero-export-enablenote"
@@ -61,12 +74,14 @@ class AddonExport extends AddonBase {
) as XUL.Checkbox
).checked;
Zotero.Prefs.set("Knowledge4Zotero.exportFile", exportFile);
+ Zotero.Prefs.set("Knowledge4Zotero.embedImage", embedImage);
Zotero.Prefs.set("Knowledge4Zotero.exportNote", exportNote);
Zotero.Prefs.set("Knowledge4Zotero.exportCopy", exportCopy);
Zotero.debug(this.io);
Zotero.debug(this.io.dataOut);
this.io.dataOut = {
exportFile: exportFile,
+ embedImage: embedImage,
exportNote: exportNote,
exportCopy: exportCopy,
};
diff --git a/src/knowledge.ts b/src/knowledge.ts
index 5870a88..d683f2f 100644
--- a/src/knowledge.ts
+++ b/src/knowledge.ts
@@ -572,18 +572,61 @@ class Knowledge extends AddonBase {
async exportNoteToFile(
note: ZoteroItem,
convertNoteLinks: boolean = true,
+ convertNoteImages: boolean = true,
saveFile: boolean = true,
saveNote: boolean = false,
saveCopy: boolean = false
) {
if (convertNoteLinks) {
- let item: ZoteroItem = new Zotero.Item("note");
+ const noteID = await ZoteroPane_Local.newNote();
+ const item = Zotero.Items.get(noteID);
item.setNote(note.getNote());
item.saveTx();
let noteLines = this.getLinesInNote(note);
let newLines = [];
+ const imageReg = new RegExp("
");
+ const imageKeyReg = new RegExp(`data-attachment-key="`);
+ const editorInstance = new Zotero.EditorInstance();
for (let i in noteLines) {
+ // Embed Image
+ if (convertNoteImages) {
+ const imageIndex = noteLines[i].search(imageReg);
+ if (imageIndex !== -1) {
+ const lineStart = noteLines[i].slice(0, imageIndex);
+ const imageLine = noteLines[i].slice(imageIndex);
+ const lineEnd = noteLines[i].slice(
+ imageLine.search(imageBrReg) + imageBrReg.source.length
+ );
+ const attachmentKeyIndex = imageLine.search(imageKeyReg);
+
+ if (attachmentKeyIndex !== -1) {
+ let attachmentKey = imageLine.slice(
+ attachmentKeyIndex + imageKeyReg.source.length
+ );
+ attachmentKey = attachmentKey.slice(
+ 0,
+ attachmentKey.search(/"/g)
+ );
+ const attachmentItem = await Zotero.Items.getByLibraryAndKeyAsync(
+ note.libraryID,
+ attachmentKey
+ );
+ const attachmentURL = await attachmentItem.getFilePathAsync();
+ if (attachmentURL) {
+ // const imageData = await editorInstance._getDataURL(
+ // attachmentItem
+ // );
+ // TODO: deal with Zotero parse
+ newLines.push(`
`);
+ newLines.push(`${lineStart}${lineEnd}`);
+ continue;
+ }
+ }
+ }
+ }
newLines.push(noteLines[i]);
+ // Convert Link
let linkIndex = noteLines[i].search(/zotero:\/\/note\//g);
while (linkIndex >= 0) {
let link = noteLines[i].substring(linkIndex);