diff --git a/src/events.ts b/src/events.ts
index f93d132..2dccb54 100644
--- a/src/events.ts
+++ b/src/events.ts
@@ -254,7 +254,7 @@ class AddonEvents extends AddonBase {
message.content.editorInstance._knowledgeUIInitialized = false;
- const noteItem = Zotero.Items.get(
+ const noteItem: ZoteroItem = Zotero.Items.get(
message.content.editorInstance._item.id
);
if (!noteItem.isNote()) {
@@ -269,7 +269,7 @@ class AddonEvents extends AddonBase {
message.content.editorInstance,
"knowledge-start",
isMainKnowledge ? "isMainKnowledge" : "notMainKnowledge",
- isMainKnowledge ? "Edit the main Note in Workspace" : "Open Workspace",
+ isMainKnowledge ? "Edit the Main Note in Workspace" : "Open Workspace",
"openWorkspace",
"start"
);
@@ -277,7 +277,7 @@ class AddonEvents extends AddonBase {
message.content.editorInstance,
"knowledge-addlink",
"addToKnowledge",
- "Add link of current note to the main note",
+ "Add Link of Current Note to Main Note",
"addToKnowledge",
"middle"
);
@@ -309,6 +309,35 @@ class AddonEvents extends AddonBase {
popup.remove();
});
});
+ let topItem = noteItem.parentItem;
+ while (topItem && !topItem.isRegularItem()) {
+ topItem = topItem.parentItem;
+ }
+ if (topItem) {
+ const addCitationButton: Element =
+ await this._Addon.views.addEditorButton(
+ message.content.editorInstance,
+ "knowledge-addcitation",
+ "addCitation",
+ "Insert Note's Parent Citation",
+ "addCitation",
+ "middle"
+ );
+ addCitationButton.addEventListener("click", async (e) => {
+ let format = Zotero.QuickCopy.getFormatFromURL(
+ Zotero.QuickCopy.lastActiveURL
+ );
+ format = Zotero.QuickCopy.unserializeSetting(format);
+ const cite = Zotero.QuickCopy.getContentFromItems(
+ [topItem],
+ format,
+ null,
+ 0
+ );
+ this._Addon.knowledge.addLineToNote(noteItem, cite.html, 65535);
+ });
+ }
+
await this._Addon.views.addEditorButton(
message.content.editorInstance,
"knowledge-end",
@@ -594,7 +623,7 @@ class AddonEvents extends AddonBase {
if (text.trim()) {
if (this._Addon.knowledge.currentNodeID < 0) {
// Add a new H1
- this._Addon.knowledge.addSubLineToNote(
+ this._Addon.knowledge.addLineToNote(
undefined,
`
${text}
`,
-1
@@ -605,7 +634,7 @@ class AddonEvents extends AddonBase {
undefined,
this._Addon.knowledge.currentNodeID
);
- this._Addon.knowledge.addSubLineToNote(
+ this._Addon.knowledge.addLineToNote(
undefined,
`${text}`,
node.model.endIndex
@@ -809,8 +838,14 @@ class AddonEvents extends AddonBase {
if (link) {
const note = (await this._Addon.knowledge.getNoteFromLink(link)).item;
if (note && note.id) {
- Zotero.debug(note);
- ZoteroPane.openNoteWindow(note.id);
+ await this.onEditorEvent(
+ new EditorMessage("onNoteLink", {
+ params: {
+ item: note,
+ infoText: "OK",
+ },
+ })
+ );
return;
}
}
@@ -830,18 +865,10 @@ class AddonEvents extends AddonBase {
note.addTag(tag.tag, tag.type);
}
await note.saveTx();
- let libraryID = note.libraryID;
- let library = Zotero.Libraries.get(libraryID);
- let groupID: string;
- if (library.libraryType === "user") {
- groupID = "u";
- } else if (library.libraryType === "group") {
- groupID = `${library.id}`;
- }
- let noteKey = note.key;
+
annotationItem.annotationComment = `${
annotationItem.annotationComment ? annotationItem.annotationComment : ""
- }\nnote link: "zotero://note/${groupID}/${noteKey}/"`;
+ }\nnote link: "${this._Addon.knowledge.getNoteLink(note)}"`;
await annotationItem.saveTx();
ZoteroPane.openNoteWindow(note.id);
let t = 0;
diff --git a/src/knowledge.ts b/src/knowledge.ts
index 3b4f255..d8b7d53 100644
--- a/src/knowledge.ts
+++ b/src/knowledge.ts
@@ -261,7 +261,7 @@ class Knowledge extends AddonBase {
);
}
- private addLineToNote(
+ private async addLineToNote(
note: ZoteroItem,
text: string,
lineIndex: number,
@@ -272,6 +272,14 @@ class Knowledge extends AddonBase {
return;
}
let noteLines = this.getLinesInNote(note);
+ if (lineIndex < 0) {
+ lineIndex =
+ this.getWorkspaceNote().id === note.id && this.currentLine >= 0
+ ? this.currentLine
+ : noteLines.length;
+ } else if (lineIndex >= noteLines.length) {
+ lineIndex = noteLines.length;
+ }
Zotero.debug(
`insert to ${lineIndex}, it used to be ${noteLines[lineIndex]}`
);
@@ -287,6 +295,7 @@ class Knowledge extends AddonBase {
}
noteLines.splice(lineIndex, 0, text);
this.setLinesToNote(note, noteLines);
+ await this.scrollWithRefresh(lineIndex);
}
async addLinesToNote(
@@ -300,7 +309,12 @@ class Knowledge extends AddonBase {
}
let noteLines = this.getLinesInNote(note);
if (lineIndex < 0) {
- lineIndex = 0;
+ lineIndex =
+ this.getWorkspaceNote().id === note.id && this.currentLine >= 0
+ ? this.currentLine
+ : noteLines.length;
+ } else if (lineIndex >= noteLines.length) {
+ lineIndex = noteLines.length;
}
this.setLinesToNote(
note,
@@ -309,41 +323,6 @@ class Knowledge extends AddonBase {
await this.scrollWithRefresh(lineIndex);
}
- async addSubLineToNote(
- note: ZoteroItem,
- text: string,
- lineIndex: number = -1,
- newLine: boolean = false
- ) {
- if (lineIndex < 0) {
- lineIndex =
- this.currentLine >= 0
- ? this.currentLine
- : this.getLinesInNote(note).length;
- }
- // let parentNode = this.getLineParentInNote(note, lineIndex);
- // if (!parentNode) {
- // this.addLineToNote(note, text, lineIndex);
- // return;
- // }
- // let nodes = this.getNoteTreeAsList(note);
- // let i = 0;
- // for (let node of nodes) {
- // if (node.model.lineIndex === parentNode.model.lineIndex) {
- // break;
- // }
- // i++;
- // }
- // // Get next header line index
- // i++;
- // if (i >= nodes.length) {
- // i = nodes.length - 1;
- // }
- // Add to next line
- this.addLineToNote(note, text, lineIndex, newLine);
- await this.scrollWithRefresh(lineIndex);
- }
-
addLinkToNote(
targetNote: ZoteroItem,
lineIndex: number,
@@ -360,7 +339,7 @@ class Knowledge extends AddonBase {
}
const link = this.getNoteLink(linkedNote);
const linkText = linkedNote.getNoteTitle().trim();
- this.addSubLineToNote(
+ this.addLineToNote(
targetNote,
`${
linkText ? linkText : `${link}`
diff --git a/src/views.ts b/src/views.ts
index 6e61883..730fac2 100644
--- a/src/views.ts
+++ b/src/views.ts
@@ -14,14 +14,15 @@ class AddonViews extends AddonBase {
default: "chrome://Knowledge4Zotero/skin/favicon.png",
};
this.editorIcon = {
- addToKnowledge: ``,
- notMainKnowledge: ``,
- isMainKnowledge: ``,
- openAttachment: ``,
+ addToKnowledge: ``,
+ addCitation: ``,
+ notMainKnowledge: ``,
+ isMainKnowledge: ``,
+ openAttachment: ``,
addAnnotationNote: ``,
- export: ``,
- close: ``,
- openWorkspaceCollectionView: ``,
+ export: ``,
+ close: ``,
+ openWorkspaceCollectionView: ``,
};
this.currentOutline = OutlineType.treeView;
this._initIframe = Zotero.Promise.defer();