diff --git a/addon/chrome/content/overlay.xul b/addon/chrome/content/overlay.xul
index ae1c9cc..46e4d5b 100644
--- a/addon/chrome/content/overlay.xul
+++ b/addon/chrome/content/overlay.xul
@@ -4,4 +4,8 @@
+
\ No newline at end of file
diff --git a/addon/chrome/content/workspace.xul b/addon/chrome/content/workspace.xul
index fbd8f18..079d610 100644
--- a/addon/chrome/content/workspace.xul
+++ b/addon/chrome/content/workspace.xul
@@ -38,11 +38,11 @@
-
+
-
+
diff --git a/src/events.ts b/src/events.ts
index 3783936..21e96e2 100644
--- a/src/events.ts
+++ b/src/events.ts
@@ -1,5 +1,4 @@
import { AddonBase, EditorMessage } from "./base";
-import { Knowledge } from "./knowledge";
class AddonEvents extends AddonBase {
constructor(parent: Knowledge4Zotero) {
@@ -75,39 +74,37 @@ class AddonEvents extends AddonBase {
);
await message.content.editorInstance._initPromise;
+ message.content.editorInstance._knowledgeUIInitialized = false;
+
let isMainKnowledge =
message.content.editorInstance._item.id === mainKnowledgeID;
Zotero.debug(`Knowledge4Zotero: main Knowledge`);
await this._Addon.views.addEditorButton(
message.content.editorInstance,
- "workspace",
+ "knowledge-start",
isMainKnowledge ? "isMainKnowledge" : "notMainKnowledge",
isMainKnowledge
? "Edit the main knowledge in Workspace"
: "Open Workspace",
- "start",
- new EditorMessage("openWorkspace", {})
+ "openWorkspace",
+ "start"
);
await this._Addon.views.addEditorButton(
message.content.editorInstance,
- "addToKnowledge",
+ "knowledge-addlink",
"addToKnowledge",
"Add Note Link to Knowledge Workspace",
- "middle",
- new EditorMessage("addToKnowledge", {
- itemID: message.content.editorInstance._item.id,
- })
+ "addToKnowledge",
+ "middle"
);
await this._Addon.views.addEditorButton(
message.content.editorInstance,
- "export",
+ "knowledge-end",
"export",
"Export Markdown with linked Notes",
- "end",
- new EditorMessage("export", {
- itemID: message.content.editorInstance._item.id,
- })
+ "export",
+ "end"
);
if (!message.content.editorInstance._knowledgeSelectionInitialized) {
this.addEditorDocumentEventListener(
@@ -117,6 +114,7 @@ class AddonEvents extends AddonBase {
);
message.content.editorInstance._knowledgeSelectionInitialized = true;
}
+ message.content.editorInstance._knowledgeUIInitialized = true;
} else if (message.type === "enterWorkspace") {
/*
message.content = {
@@ -124,10 +122,34 @@ class AddonEvents extends AddonBase {
params: "main" | "preview"
}
*/
+ const _window = message.content.editorInstance._iframeWindow;
+ let t = 0;
+ while (
+ !message.content.editorInstance._knowledgeUIInitialized &&
+ t < 500
+ ) {
+ t += 1;
+ await Zotero.Promise.delay(10);
+ }
if (message.content.params === "main") {
// This is a main knowledge, hide all buttons except the export button and add title
+ const title = _window.document.getElementById("knowledge-addlink");
+ this._Addon.views.changeEditorButtonView(
+ title,
+ "mainTitle",
+ "This is a Main Knowledge",
+ "empty"
+ );
+ title.setAttribute("class", "");
+ title.setAttribute("style", "font-size: medium");
} else {
// This is a preview knowledge, hide openWorkspace button add show close botton
+ this._Addon.views.changeEditorButtonView(
+ _window.document.getElementById("knowledge-end"),
+ "close",
+ "Close Preview",
+ "closePreview"
+ );
}
} else if (message.type === "leaveWorkspace") {
/*
@@ -136,10 +158,26 @@ class AddonEvents extends AddonBase {
params: "main" | "preview"
}
*/
+ const _window = message.content.editorInstance._iframeWindow;
if (message.content.params === "main") {
// This is a main knowledge, show all buttons and remove title
+ const title = _window.document.getElementById("knowledge-addlink");
+ this._Addon.views.changeEditorButtonView(
+ title,
+ "mainTitle",
+ "Add Note Link to Knowledge Workspace",
+ "addToKnowledge"
+ );
+ title.setAttribute("class", "");
+ title.setAttribute("style", "font-size: medium");
} else {
// This is a preview knowledge, show openWorkspace button add hide close botton
+ this._Addon.views.changeEditorButtonView(
+ _window.document.getElementById("knowledge-end"),
+ "export",
+ "Export Markdown with linked Notes",
+ "export"
+ );
}
} else if (message.type === "addToKnowledge") {
/*
@@ -187,7 +225,7 @@ class AddonEvents extends AddonBase {
await editor._initPromise;
if (editor._item.id === mainKnowledgeID) {
let button =
- editor._iframeWindow.document.getElementById("workspace");
+ editor._iframeWindow.document.getElementById("knowledge-start");
if (button) {
this._Addon.views.changeEditorButtonView(
button,
@@ -198,6 +236,16 @@ class AddonEvents extends AddonBase {
}
}
}
+ } else if (message.type === "closePreview") {
+ /*
+ message.content = {
+ editorInstance
+ }
+ */
+ const _window = this._Addon.knowledge.getWorkspaceWindow() as Window;
+ _window.document
+ .getElementById("preview-splitter")
+ .setAttribute("state", "collapsed");
} else if (message.type === "onNoteLink") {
/*
message.content = {
@@ -215,10 +263,15 @@ class AddonEvents extends AddonBase {
);
let _window = this._Addon.knowledge.getWorkspaceWindow();
if (_window) {
- this._Addon.knowledge.setWorkspaceNote(
- "preview",
- message.content.params.item
- );
+ if (
+ message.content.params.item.id !==
+ Zotero.Prefs.get("Knowledge4Zotero.mainKnowledgeID")
+ ) {
+ this._Addon.knowledge.setWorkspaceNote(
+ "preview",
+ message.content.params.item
+ );
+ }
(_window as Window).focus();
} else {
ZoteroPane.openNoteWindow(message.content.params.item.id);
diff --git a/src/knowledge.ts b/src/knowledge.ts
index 2691e3d..f1cae41 100644
--- a/src/knowledge.ts
+++ b/src/knowledge.ts
@@ -30,15 +30,15 @@ class Knowledge extends AddonBase {
let win = window.open(
"chrome://Knowledge4Zotero/content/workspace.xul",
"_blank",
- "chrome,extrachrome,menubar,resizable,scrollbars,status,width=900,height=600"
+ "chrome,extrachrome,menubar,resizable,scrollbars,status,width=1000,height=600"
);
this.workspaceWindow = win;
- await this.waitWorkspaceRedy();
+ await this.waitWorkspaceReady();
this.setWorkspaceNote("main");
}
}
- async waitWorkspaceRedy() {
+ async waitWorkspaceReady() {
let _window = this.getWorkspaceWindow() as Window;
if (!_window) {
return false;
@@ -56,7 +56,7 @@ class Knowledge extends AddonBase {
if (!_window) {
return;
}
- await this.waitWorkspaceRedy();
+ await this.waitWorkspaceReady();
return _window.document.getElementById(`zotero-note-editor-${type}`);
}
@@ -69,9 +69,14 @@ class Knowledge extends AddonBase {
if (!_window) {
return;
}
- await this.waitWorkspaceRedy();
+ if (type === "preview") {
+ _window.document
+ .getElementById("preview-splitter")
+ .setAttribute("state", "open");
+ }
+ await this.waitWorkspaceReady();
let noteEditor: any = await this.getWorkspaceEditor(type);
- let lastEditorInstance = noteEditor._editorInstance as EditorInstance;
+ let lastEditorInstance = noteEditor.getCurrentInstance() as EditorInstance;
if (lastEditorInstance) {
await this._Addon.events.onEditorEvent(
new EditorMessage("leaveWorkspace", {
@@ -85,9 +90,15 @@ class Knowledge extends AddonBase {
noteEditor.parent = null;
noteEditor.item = note;
+ await noteEditor._initPromise;
+ let t = 0;
+ while (!noteEditor.getCurrentInstance() && t < 500) {
+ t += 1;
+ await Zotero.Promise.delay(10);
+ }
await this._Addon.events.onEditorEvent(
new EditorMessage("enterWorkspace", {
- editorInstance: noteEditor,
+ editorInstance: noteEditor.getCurrentInstance(),
params: type,
})
);
@@ -191,9 +202,12 @@ class Knowledge extends AddonBase {
groupID = `${library.id}`;
}
let noteKey = linkedNote.key;
+ let linkText = linkedNote.getNoteTitle().trim();
this.addSubLineToNote(
targetNote,
- `${linkedNote.getNoteTitle()}`,
+ `${
+ linkText ? linkText : `zotero://note/${groupID}/${noteKey}`
+ }`,
lineIndex
);
this._Addon.views.showProgressWindow(
diff --git a/src/views.ts b/src/views.ts
index dea284b..9d10e93 100644
--- a/src/views.ts
+++ b/src/views.ts
@@ -12,10 +12,12 @@ class AddonViews extends AddonBase {
default: "chrome://Knowledge4Zotero/skin/favicon.png",
};
this.editorIcon = {
+ mainTitle: "Main Knowledge",
addToKnowledge: ``,
notMainKnowledge: ``,
isMainKnowledge: ``,
export: ``,
+ close: ``,
openWorkspaceCollectionView: ``,
};
}
@@ -55,8 +57,8 @@ class AddonViews extends AddonBase {
id: string,
icon: string,
title: string,
- position: "start" | "middle" | "end",
- message: EditorMessage
+ eventType: string,
+ position: "start" | "middle" | "end"
) {
// Use Zotero.Notes._editorInstances to find current opened note editor
await editorInstances._initPromise;
@@ -71,20 +73,35 @@ class AddonViews extends AddonBase {
button.setAttribute("class", "toolbar-button");
button.setAttribute("id", id);
button.setAttribute("title", title);
+ button.setAttribute("eventType", eventType);
button.innerHTML = this.editorIcon[icon];
toolbar.append(button);
- button.onclick = (e: Event) => {
+ const message = new EditorMessage("", {
+ itemID: editorInstances._item.id,
+ editorInstances: editorInstances,
+ });
+ button.addEventListener("click", (e: XULEvent) => {
+ message.type = e.target.getAttribute("eventType");
message.content.event = e as XULEvent;
message.content.editorInstance = editorInstances;
this._Addon.events.onEditorEvent(message);
- };
+ });
+ return button;
}
- changeEditorButtonView(button: Element, icon: string, title: string = "") {
+ changeEditorButtonView(
+ button: Element,
+ icon: string,
+ title: string = "",
+ eventType: string = ""
+ ) {
button.innerHTML = this.editorIcon[icon];
if (title) {
button.setAttribute("title", title);
}
+ if (eventType) {
+ button.setAttribute("eventType", eventType);
+ }
}
changeEditorButtonHidden(button: XUL.Element, hidden: boolean) {