fix: enter workspace event bug

This commit is contained in:
xiangyu 2022-05-01 09:13:49 +08:00
parent 81d66b7f8c
commit ba6ad6818c
5 changed files with 41 additions and 61 deletions

View File

@ -6,6 +6,6 @@
<script src="chrome://__addonRef__/content/scripts/index.js" />
<popup id="zotero-itemmenu">
<menuseparator />
<menuitem id="zotero-itemmenu-__addonRef__-setMainKnowledge" label="&zotero.__addonRef__.itemmenu.setMainKnowledge.label;" oncommand="Zotero.Knowledge4Zotero.events.onEditorEvent({'setMainKnowledge', {editorInstance: }})" class="menuitem-iconic" style="list-style-image: url('chrome://__addonRef__/skin/favicon.png');" />
<menuitem id="zotero-itemmenu-__addonRef__-setMainKnowledge" label="&zotero.__addonRef__.itemmenu.setMainKnowledge.label;" oncommand="Zotero.Knowledge4Zotero.events.onEditorEvent.bind(Zotero.Knowledge4Zotero.events)({type: 'setMainKnowledge', content: {params: ZoteroPane.getSelectedItems()[0].id}})" class="menuitem-iconic" style="list-style-image: url('chrome://__addonRef__/skin/favicon.png');" />
</popup>
</overlay>

View File

@ -1,4 +1,5 @@
<!ENTITY zotero.__addonRef__.workspace.title "Knowledge Workspace">
<!ENTITY zotero.__addonRef__.itemmenu.setMainKnowledge.label "Set Main Knowledge">
<!ENTITY zotero.__addonRef__.help.feedback.caption.label "User Guide and Feedback">
<!ENTITY zotero.__addonRef__.help.feedback.label "GitHub">

View File

@ -1,4 +1,5 @@
<!ENTITY zotero.__addonRef__.workspace.title "Knowledge工作区">
<!ENTITY zotero.__addonRef__.itemmenu.setMainKnowledge.label "设置为主Knowledge">
<!ENTITY zotero.__addonRef__.help.feedback.caption.label "User Guide and Feedback">
<!ENTITY zotero.__addonRef__.help.feedback.label "GitHub">

View File

@ -151,34 +151,6 @@ class AddonEvents extends AddonBase {
"closePreview"
);
}
} else if (message.type === "leaveWorkspace") {
/*
message.content = {
editorInstance,
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") {
/*
message.content = {
@ -194,45 +166,48 @@ class AddonEvents extends AddonBase {
} else if (message.type === "setMainKnowledge") {
/*
message.content = {
editorInstance
params: itemID
}
*/
Zotero.debug("Knowledge4Zotero: setMainKnowledge");
let mainKnowledgeID = parseInt(
Zotero.Prefs.get("Knowledge4Zotero.mainKnowledgeID")
);
if (message.content.editorInstance._item.id !== mainKnowledgeID) {
let itemID = message.content.params;
if (itemID === mainKnowledgeID) {
this._Addon.views.showProgressWindow(
"Knowledge",
"Already a main Knowledge."
);
} else if (!Zotero.Items.get(itemID).isNote()) {
this._Addon.views.showProgressWindow(
"Knowledge",
"Not a valid note item."
);
} else {
if (Zotero.Prefs.get("Knowledge4Zotero.mainKnowledgeID")) {
let confirmChange = confirm(
"Will remove current Knowledge Workspace. Confirm?"
"Will change current Knowledge Workspace. Confirm?"
);
if (!confirmChange) {
return;
}
}
Zotero.Prefs.set(
"Knowledge4Zotero.mainKnowledgeID",
message.content.editorInstance._item.id
);
// Set the button to selected state
this._Addon.views.changeEditorButtonView(
message.content.event.target,
"isMainKnowledge",
"Edit the main knowledge in Workspace"
);
Zotero.Prefs.set("Knowledge4Zotero.mainKnowledgeID", itemID);
await this._Addon.knowledge.setWorkspaceNote("main");
for (let editor of Zotero.Notes._editorInstances) {
await editor._initPromise;
if (editor._item.id === mainKnowledgeID) {
let button =
editor._iframeWindow.document.getElementById("knowledge-start");
if (button) {
this._Addon.views.changeEditorButtonView(
button,
"notMainKnowledge",
"Open Workspace"
);
}
let isMainKnowledge = editor._item.id === mainKnowledgeID;
let button =
editor._iframeWindow.document.getElementById("knowledge-start");
if (button) {
this._Addon.views.changeEditorButtonView(
button,
isMainKnowledge ? "isMainKnowledge" : "notMainKnowledge",
isMainKnowledge
? "Edit the main knowledge in Workspace"
: "Open Workspace"
);
}
}
}

View File

@ -60,6 +60,18 @@ class Knowledge extends AddonBase {
return _window.document.getElementById(`zotero-note-editor-${type}`);
}
async getWorkspaceEditorInstance(
type: "main" | "preview" = "main"
): Promise<EditorInstance> {
let noteEditor = (await this.getWorkspaceEditor(type)) as any;
let t = 0;
while (!noteEditor.getCurrentInstance() && t < 500) {
t += 1;
await Zotero.Promise.delay(10);
}
return noteEditor.getCurrentInstance() as EditorInstance;
}
async setWorkspaceNote(
type: "main" | "preview" = "main",
note: ZoteroItem = undefined
@ -76,15 +88,6 @@ class Knowledge extends AddonBase {
}
await this.waitWorkspaceReady();
let noteEditor: any = await this.getWorkspaceEditor(type);
let lastEditorInstance = noteEditor.getCurrentInstance() as EditorInstance;
if (lastEditorInstance) {
await this._Addon.events.onEditorEvent(
new EditorMessage("leaveWorkspace", {
editorInstance: lastEditorInstance,
params: type,
})
);
}
noteEditor.mode = "edit";
noteEditor.viewMode = "library";
noteEditor.parent = null;