From bad8a9459ea6843b3e3bff9e2f8c3605b8d5d6b2 Mon Sep 17 00:00:00 2001
From: xiangyu <3170102889@zju.edu.cn>
Date: Mon, 1 Aug 2022 16:59:47 +0800
Subject: [PATCH] resolve: #89 export MD with highlights
resolve: #35 export MD without [] conversion
fix: export MD not correctly await bug
add: default settings
---
addon/chrome/content/export.xul | 8 ++++++
addon/chrome/locale/en-US/overlay.dtd | 2 ++
addon/chrome/locale/zh-CN/overlay.dtd | 2 ++
addon/defaults/preferences/defaults.js | 12 ++++++++
src/Better Note Markdown.js | 24 ++++++++++++++--
src/events.ts | 7 -----
src/export.ts | 38 ++++++++++++++++++++++++++
src/knowledge.ts | 2 ++
src/sync.ts | 4 ---
9 files changed, 86 insertions(+), 13 deletions(-)
create mode 100644 addon/defaults/preferences/defaults.js
diff --git a/addon/chrome/content/export.xul b/addon/chrome/content/export.xul
index 1d3e54b..b4754ae 100644
--- a/addon/chrome/content/export.xul
+++ b/addon/chrome/content/export.xul
@@ -42,6 +42,14 @@
+
+
+
+
+
+
+
+
diff --git a/addon/chrome/locale/en-US/overlay.dtd b/addon/chrome/locale/en-US/overlay.dtd
index 411657d..61bbf6d 100644
--- a/addon/chrome/locale/en-US/overlay.dtd
+++ b/addon/chrome/locale/en-US/overlay.dtd
@@ -39,6 +39,8 @@
+
+
diff --git a/addon/chrome/locale/zh-CN/overlay.dtd b/addon/chrome/locale/zh-CN/overlay.dtd
index 1caaee7..29d3663 100644
--- a/addon/chrome/locale/zh-CN/overlay.dtd
+++ b/addon/chrome/locale/zh-CN/overlay.dtd
@@ -39,6 +39,8 @@
+
+
diff --git a/addon/defaults/preferences/defaults.js b/addon/defaults/preferences/defaults.js
new file mode 100644
index 0000000..ecb7a0b
--- /dev/null
+++ b/addon/defaults/preferences/defaults.js
@@ -0,0 +1,12 @@
+pref("extensions.zotero.Knowledge4Zotero.syncNoteIds", "");
+pref("extensions.zotero.Knowledge4Zotero.syncPeriod", 10000);
+pref("extensions.zotero.Knowledge4Zotero.autoAnnotation", false);
+pref("extensions.zotero.Knowledge4Zotero.exportFile", true);
+pref("extensions.zotero.Knowledge4Zotero.exportSingleFile", false);
+pref("extensions.zotero.Knowledge4Zotero.exportAutoSync", false);
+pref("extensions.zotero.Knowledge4Zotero.exportHighlight", true);
+pref("extensions.zotero.Knowledge4Zotero.convertSquare", true);
+pref("extensions.zotero.Knowledge4Zotero.embedLink", true);
+pref("extensions.zotero.Knowledge4Zotero.exportNote", false);
+pref("extensions.zotero.Knowledge4Zotero.exportCopy", false);
+pref("extensions.zotero.Knowledge4Zotero.exportPDF", false);
diff --git a/src/Better Note Markdown.js b/src/Better Note Markdown.js
index 1dea4ba..216ac9a 100644
--- a/src/Better Note Markdown.js
+++ b/src/Better Note Markdown.js
@@ -450,6 +450,9 @@ let bundle;
(global.TurndownService = factory()));
})(this, function () {
"use strict";
+ var _Zotero = Components.classes["@zotero.org/Zotero;1"].getService(
+ Components.interfaces.nsISupports
+ ).wrappedJSObject;
function extend(destination) {
for (var i = 1; i < arguments.length; i++) {
@@ -902,6 +905,20 @@ let bundle;
},
};
+ rules.backgroundColor = {
+ filter: function (node) {
+ return (
+ node.nodeName === "SPAN" &&
+ node.style["background-color"] &&
+ _Zotero.Prefs.get("Knowledge4Zotero.exportHighlight")
+ );
+ },
+
+ replacement: function (content, node) {
+ return `${content}`;
+ },
+ };
+
function cleanAttribute(attribute) {
return attribute ? attribute.replace(/(\n+\s*)+/g, "\n") : "";
}
@@ -1331,13 +1348,16 @@ let bundle;
[/^(#{1,6}) /g, "\\$1 "],
[/`/g, "\\`"],
[/^~~~/g, "\\~~~"],
- [/\[/g, "\\["],
- [/\]/g, "\\]"],
[/^>/g, "\\>"],
// [/_/g, "\\_"],
[/^(\d+)\. /g, "$1\\. "],
];
+ if (_Zotero.Prefs.get("Knowledge4Zotero.convertSquare")) {
+ escapes.push([/\[/g, "\\["]);
+ escapes.push([/\]/g, "\\]"]);
+ }
+
function TurndownService(options) {
if (!(this instanceof TurndownService))
return new TurndownService(options);
diff --git a/src/events.ts b/src/events.ts
index ba7c39a..dfa95e2 100644
--- a/src/events.ts
+++ b/src/events.ts
@@ -1731,13 +1731,6 @@ class AddonEvents extends AddonBase {
this._Addon.template.getCitationStyle();
// Initialize sync notes
this._Addon.sync.getSyncNoteIds();
- // Initialize sync period
- // Default sync period is 10s
- if (
- typeof Zotero.Prefs.get("Knowledge4Zotero.syncPeriod") === "undefined"
- ) {
- this._Addon.syncList.changeSyncPeriod(10);
- }
this._Addon.views.updateAutoInsertAnnotationsMenu();
}
}
diff --git a/src/export.ts b/src/export.ts
index 41d315a..5a14a43 100644
--- a/src/export.ts
+++ b/src/export.ts
@@ -41,6 +41,22 @@ class AddonExport extends AddonBase {
) as XUL.Checkbox
).checked = exportAutoSync;
}
+ let exportHighlight = Zotero.Prefs.get("Knowledge4Zotero.exportHighlight");
+ if (typeof exportHighlight !== "undefined") {
+ (
+ this._window.document.getElementById(
+ "Knowledge4Zotero-export-enablehighlight"
+ ) as XUL.Checkbox
+ ).checked = exportHighlight;
+ }
+ let convertSquare = Zotero.Prefs.get("Knowledge4Zotero.convertSquare");
+ if (typeof convertSquare !== "undefined") {
+ (
+ this._window.document.getElementById(
+ "Knowledge4Zotero-export-convertsquare"
+ ) as XUL.Checkbox
+ ).checked = exportHighlight;
+ }
let embedLink = Zotero.Prefs.get("Knowledge4Zotero.embedLink");
if (typeof embedLink !== "undefined") {
(
@@ -89,6 +105,13 @@ class AddonExport extends AddonBase {
let exportAutoSync = this._window.document.getElementById(
"Knowledge4Zotero-export-enableautosync"
) as XUL.Checkbox;
+ let exportHighlight = this._window.document.getElementById(
+ "Knowledge4Zotero-export-enablehighlight"
+ ) as XUL.Checkbox;
+ let convertSquare = this._window.document.getElementById(
+ "Knowledge4Zotero-export-convertsquare"
+ ) as XUL.Checkbox;
+
if (event) {
if (
@@ -118,6 +141,9 @@ class AddonExport extends AddonBase {
} else {
exportAutoSync.disabled = true;
}
+
+ exportHighlight.disabled = !exportFile.checked;
+ convertSquare.disabled = !exportFile.checked;
}
doUnload() {
this.io.deferred && this.io.deferred.resolve();
@@ -139,6 +165,16 @@ class AddonExport extends AddonBase {
"Knowledge4Zotero-export-enableautosync"
) as XUL.Checkbox
).checked;
+ let exportHighlight = (
+ this._window.document.getElementById(
+ "Knowledge4Zotero-export-enablehighlight"
+ ) as XUL.Checkbox
+ ).checked;
+ let convertSquare = (
+ this._window.document.getElementById(
+ "Knowledge4Zotero-export-convertsquare"
+ ) as XUL.Checkbox
+ ).checked;
let embedLink = (
this._window.document.getElementById(
"Knowledge4Zotero-export-embedLink"
@@ -162,6 +198,8 @@ class AddonExport extends AddonBase {
Zotero.Prefs.set("Knowledge4Zotero.exportFile", exportFile);
Zotero.Prefs.set("Knowledge4Zotero.exportSingleFile", exportSingleFile);
Zotero.Prefs.set("Knowledge4Zotero.exportAutoSync", exportAutoSync);
+ Zotero.Prefs.set("Knowledge4Zotero.exportHighlight", exportHighlight);
+ Zotero.Prefs.set("Knowledge4Zotero.convertSquare", convertSquare);
Zotero.Prefs.set("Knowledge4Zotero.embedLink", embedLink);
Zotero.Prefs.set("Knowledge4Zotero.exportNote", exportNote);
Zotero.Prefs.set("Knowledge4Zotero.exportCopy", exportCopy);
diff --git a/src/knowledge.ts b/src/knowledge.ts
index 3b3bb04..012c1fd 100644
--- a/src/knowledge.ts
+++ b/src/knowledge.ts
@@ -741,8 +741,10 @@ class Knowledge extends AddonBase {
const translator = new Zotero.Translate.Export();
translator.setItems([newNote]);
translator.setLocation(Zotero.File.pathToFile(filename));
+ this._exportPromise = Zotero.Promise.defer();
translator.setTranslator(TRANSLATOR_ID_BETTER_MARKDOWN);
translator.translate();
+ await this._exportPromise.promise;
this._Addon.views.showProgressWindow(
"Better Notes",
`Note Saved to ${filename}`
diff --git a/src/sync.ts b/src/sync.ts
index 839e853..7f3e5f9 100644
--- a/src/sync.ts
+++ b/src/sync.ts
@@ -103,10 +103,6 @@ class AddonSync extends AddonBase {
getSyncNoteIds(): Number[] {
const ids = Zotero.Prefs.get("Knowledge4Zotero.syncNoteIds");
- if (typeof ids === "undefined") {
- Zotero.Prefs.set("Knowledge4Zotero.syncNoteIds", "");
- return [];
- }
return ids.split(",").map((id: string) => Number(id));
}