From d95ffdfe4ff0fd817879af465903b0697aa79ba2 Mon Sep 17 00:00:00 2001
From: xiangyu <3170102889@zju.edu.cn>
Date: Tue, 12 Jul 2022 15:11:52 +0800
Subject: [PATCH] fix: link popup buttons disapper
---
addon/chrome/content/overlay.xul | 4 +
addon/chrome/content/workspace.xul | 4 +
addon/chrome/locale/en-US/overlay.dtd | 2 +
addon/chrome/locale/zh-CN/overlay.dtd | 2 +
src/events.ts | 109 +++++++++++++++++---------
src/knowledge.ts | 24 ------
src/views.ts | 18 ++++-
7 files changed, 99 insertions(+), 64 deletions(-)
diff --git a/addon/chrome/content/overlay.xul b/addon/chrome/content/overlay.xul
index 39014c0..b6f9ac6 100644
--- a/addon/chrome/content/overlay.xul
+++ b/addon/chrome/content/overlay.xul
@@ -37,6 +37,8 @@
+
@@ -80,6 +82,8 @@
+
diff --git a/addon/chrome/content/workspace.xul b/addon/chrome/content/workspace.xul
index 2dec741..e2409ab 100644
--- a/addon/chrome/content/workspace.xul
+++ b/addon/chrome/content/workspace.xul
@@ -47,6 +47,8 @@
+
@@ -87,6 +89,8 @@
+
diff --git a/addon/chrome/locale/en-US/overlay.dtd b/addon/chrome/locale/en-US/overlay.dtd
index 1ead6c0..f87a3ac 100644
--- a/addon/chrome/locale/en-US/overlay.dtd
+++ b/addon/chrome/locale/en-US/overlay.dtd
@@ -15,6 +15,8 @@
+
+
diff --git a/addon/chrome/locale/zh-CN/overlay.dtd b/addon/chrome/locale/zh-CN/overlay.dtd
index 269732b..3b8c54d 100644
--- a/addon/chrome/locale/zh-CN/overlay.dtd
+++ b/addon/chrome/locale/zh-CN/overlay.dtd
@@ -15,6 +15,8 @@
+
+
diff --git a/src/events.ts b/src/events.ts
index 8a622c9..d6ae92e 100644
--- a/src/events.ts
+++ b/src/events.ts
@@ -708,38 +708,6 @@ class AddonEvents extends AddonBase {
header.innerHTML = "Main Note";
header.setAttribute("style", "font-size: medium");
middle.append(header);
-
- // Link popup listener
- const container =
- _window.document.getElementsByClassName("relative-container")[0];
- const containerObserver = new MutationObserver(async (mutations) => {
- for (const mut of mutations) {
- for (const node of mut.addedNodes) {
- // wait for ui ready
- await Zotero.Promise.delay(20);
- const linkElement = (node as Element).getElementsByTagName(
- "a"
- )[0];
- if (!linkElement) {
- return;
- }
- const linkObserver = new MutationObserver(async (linkMuts) => {
- this._Addon.views.updateEditorPopupButtons(
- _window,
- linkElement.getAttribute("href")
- );
- });
- linkObserver.observe(linkElement, { attributes: true });
- this._Addon.views.updateEditorPopupButtons(
- _window,
- linkElement.getAttribute("href")
- );
- }
- }
- });
- containerObserver.observe(container, {
- childList: true,
- });
} else {
// This is a preview knowledge, hide openWorkspace button add show close botton
this._Addon.views.changeEditorButtonView(
@@ -998,8 +966,9 @@ class AddonEvents extends AddonBase {
Zotero.Prefs.get("Knowledge4Zotero.mainKnowledgeID")
) {
// Update current line index
- let selection =
- message.content.editorInstance._iframeWindow.document.getSelection();
+ const _window = message.content.editorInstance._iframeWindow;
+ const selection = _window.document.getSelection();
+ const realElement = selection.focusNode.parentElement;
let focusNode = selection.focusNode as XUL.Element;
if (!focusNode) {
return;
@@ -1044,9 +1013,7 @@ class AddonEvents extends AddonBase {
if (diveTagNames.includes(focusNode.tagName)) {
const eleList = this._Addon.parse.parseListElements(focusNode);
for (const i in eleList) {
- if (
- selection.focusNode.parentElement.parentElement === eleList[i]
- ) {
+ if (realElement.parentElement === eleList[i]) {
currentLineIndex += Number(i);
break;
}
@@ -1055,6 +1022,32 @@ class AddonEvents extends AddonBase {
Zotero.debug(`Knowledge4Zotero: line ${currentLineIndex} selected.`);
console.log(currentLineIndex);
this._Addon.knowledge.currentLine = currentLineIndex;
+ if (realElement.tagName === "A") {
+ let link = (realElement as HTMLLinkElement).href;
+ let linkedNote = (await this._Addon.knowledge.getNoteFromLink(link))
+ .item;
+ if (linkedNote) {
+ let t = 0;
+ let linkPopup = _window.document.querySelector(".link-popup");
+ while (
+ !(linkPopup && linkPopup.querySelector("a").href === link) &&
+ t < 100
+ ) {
+ t += 1;
+ linkPopup = _window.document.querySelector(".link-popup");
+ await Zotero.Promise.delay(30);
+ }
+ this._Addon.views.updateEditorPopupButtons(
+ message.content.editorInstance._iframeWindow,
+ link
+ );
+ } else {
+ this._Addon.views.updateEditorPopupButtons(
+ message.content.editorInstance._iframeWindow,
+ undefined
+ );
+ }
+ }
}
} else if (message.type === "addHeading") {
/*
@@ -1140,6 +1133,48 @@ class AddonEvents extends AddonBase {
-1,
node.model.lineIndex
);
+ } else if (message.type === "importLink") {
+ /*
+ message.content = {}
+ */
+ // let newLines = [];
+ // const convertResult = await this._Addon.knowledge.convertNoteLines(
+ // note,
+ // [],
+ // true,
+ // false
+ // );
+ // const subNoteLines = convertResult.lines;
+ // const templateText = await this._Addon.template.renderTemplateAsync(
+ // "[QuickImport]",
+ // "subNoteLines, subNoteItem, noteItem",
+ // [subNoteLines, note, this._Addon.knowledge.getWorkspaceNote()]
+ // );
+ // newLines.push(templateText);
+ // const newLineString = newLines.join("\n");
+ // await this._Addon.knowledge.modifyLineInNote(
+ // undefined,
+ // (oldLine: string) => {
+ // Zotero.debug(oldLine);
+ // const params = this._Addon.parse.parseParamsFromLink(link);
+ // if (!params.ignore) {
+ // const newLink =
+ // link + (link.includes("?") ? "&ignore=1" : "?ignore=1");
+ // const linkIndex = this._Addon.parse.parseLinkIndexInText(oldLine);
+ // Zotero.debug(linkIndex);
+ // return `${oldLine.slice(0, linkIndex[0])}${newLink}${oldLine.slice(
+ // linkIndex[1]
+ // )}\n${newLineString}`;
+ // }
+ // },
+ // this._Addon.knowledge.currentLine
+ // );
+ // await Zotero.DB.executeTransaction(async () => {
+ // await Zotero.Notes.copyEmbeddedImages(
+ // note,
+ // this._Addon.knowledge.getWorkspaceNote()
+ // );
+ // });
} else if (message.type === "updateAutoAnnotation") {
/*
message.content = {
diff --git a/src/knowledge.ts b/src/knowledge.ts
index efb9493..06018ce 100644
--- a/src/knowledge.ts
+++ b/src/knowledge.ts
@@ -293,29 +293,6 @@ class Knowledge extends AddonBase {
}
}
- // Abandoned
- async addLinesToNote(
- note: ZoteroItem,
- newLines: string[],
- lineIndex: number
- ) {
- note = note || this.getWorkspaceNote();
- if (!note) {
- 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;
- }
- await this.addLineToNote(note, newLines.join("\n"), lineIndex);
- await this.scrollWithRefresh(lineIndex);
- }
-
_dataURLtoBlob(dataurl: string) {
let parts = dataurl.split(",");
let mime = parts[0].match(/:(.*?);/)[1];
@@ -545,7 +522,6 @@ class Knowledge extends AddonBase {
.replace(headerStopReg, ``),
lineIndex
);
- await this.scrollWithRefresh(lineIndex);
}
moveHeaderLineInNote(
diff --git a/src/views.ts b/src/views.ts
index 46cbe21..174d15f 100644
--- a/src/views.ts
+++ b/src/views.ts
@@ -381,8 +381,10 @@ class AddonViews extends AddonBase {
}
async updateEditorPopupButtons(_window: Window, link: string) {
- const note: ZoteroItem = (await this._Addon.knowledge.getNoteFromLink(link))
- .item;
+ const note: ZoteroItem = link
+ ? (await this._Addon.knowledge.getNoteFromLink(link)).item
+ : undefined;
+ // If the note is invalid, we remove the buttons
if (note) {
let insertButton = _window.document.getElementById("insert-note-link");
if (insertButton) {
@@ -519,8 +521,18 @@ class AddonViews extends AddonBase {
);
});
_window.document
- .getElementsByClassName("link-popup")[0]
+ .querySelector(".link-popup")
.append(insertButton, updateButton);
+ } else {
+ const insertLink = _window.document.querySelector("#insert-note-link");
+ if (insertLink) {
+ insertLink.remove();
+ }
+
+ const updateLink = _window.document.querySelector("#update-note-link");
+ if (updateLink) {
+ updateLink.remove();
+ }
}
}