update: move workspace tab button to toolbar
This commit is contained in:
parent
1699492c69
commit
0a8851328e
|
|
@ -0,0 +1,7 @@
|
|||
<svg t="1708762104325" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg"
|
||||
p-id="13462" data-spm-anchor-id="a313x.collections_detail.0.i1.c2273a81JPaGYf" width="20" height="20">
|
||||
<path
|
||||
d="M896.00324 352c70.7 0 128-57.3 128-128 0-70.6-57.4-128-128-128-70.7 0-128 57.3-128 128 0 18.8 4.1 36.7 11.3 52.8 2.7 6 1.4 13.1-3.3 17.8l-24.2 24.2c-5.7 5.7-14.9 6.3-21.2 1.2-38.1-30.1-86.3-48-138.6-48-18.8 0-37.1 2.3-54.6 6.7-6.9 1.7-14.1-1.4-17.7-7.5l-6.6-11.4c-3.4-5.8-2.7-13.1 1.6-18.3 18.6-22.6 29.7-51.6 29.3-83.2C543.10324 89 486.30324 32.6 417.00324 32c-70.6-0.6-128.1 56.1-129 126.3-0.9 69.5 56.5 128.6 126 129.6 9.4 0.1 18.5-0.7 27.4-2.5 6.8-1.4 13.6 1.7 17.1 7.7l2.2 3.8c4 7 2.2 15.9-4.2 20.7-42.4 32.3-73 79.4-84 133.6-1.5 7.4-8.1 12.7-15.7 12.7h-94.1c-6.6 0-12.6-4-14.9-10.2-18.1-48-64.3-82.2-118.5-82.8C58.70324 370.3 0.50324 427.6 0.00324 498.1-0.49676 569.2 57.00324 627 128.00324 627c56.7 0 104.8-36.9 121.6-87.9 2.2-6.6 8.3-11.1 15.2-11.1h92c7.6 0 14.2 5.4 15.7 12.9 9.5 46.7 33.5 88 67 119.2 5.4 5 6.6 13.2 2.9 19.6l-21.7 37.6c-3.7 6.3-11.1 9.4-18.2 7.4-11.1-3.1-22.7-4.7-34.8-4.7-69.7 0.1-127 56.8-127.8 126.6-0.8 71.7 57.4 130 129.1 129.4 69.5-0.6 126.3-57.3 126.9-126.8 0.3-28-8.5-53.9-23.5-75.1-3.6-5.1-3.9-11.8-0.8-17.2l24.9-43.1c3.9-6.7 12-9.7 19.3-7 23.7 8.6 49.3 13.2 76 13.2 34.9 0 67.9-8 97.3-22.2 7.6-3.7 16.7-0.9 20.9 6.4l37 64c-26.3 23.5-43 57.7-43 95.8 0 70.9 58 128.5 128.9 128 69.7-0.5 126.2-56.7 127.1-126.3 0.9-70.1-57-129.3-127.1-129.7-6.2 0-12.3 0.4-18.3 1.2-6.5 0.9-12.8-2.2-16.1-7.8l-39.2-67.9c-3.4-5.9-2.7-13.3 1.7-18.4 34.2-39.3 54.9-90.7 54.9-147 0-38.9-9.9-75.5-27.4-107.4-3.4-6.2-2.2-13.9 2.8-18.9l28.4-28.4c4.9-4.9 12.4-6 18.7-2.9 17.4 8.6 36.9 13.5 57.6 13.5z m0-192c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zM128.00324 563c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64z m240 349c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64z m464-112c35.3 0 64 28.7 64 64s-28.7 64-64 64-64-28.7-64-64 28.7-64 64-64zM416.00324 224c-35.3 0-64-28.7-64-64s28.7-64 64-64 64 28.7 64 64-28.7 64-64 64z m289.1 385.1C674.90324 639.4 634.70324 656 592.00324 656s-82.9-16.6-113.1-46.9C448.60324 578.9 432.00324 538.7 432.00324 496s16.6-82.9 46.9-113.1C509.10324 352.6 549.30324 336 592.00324 336s82.9 16.6 113.1 46.9C735.40324 413.1 752.00324 453.3 752.00324 496s-16.6 82.9-46.9 113.1z"
|
||||
p-id="13463" fill="#e8af59" data-spm-anchor-id="a313x.collections_detail.0.i2.c2273a81JPaGYf" class="selected">
|
||||
</path>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.5 KiB |
27
src/hooks.ts
27
src/hooks.ts
|
|
@ -9,11 +9,8 @@ import {
|
|||
} from "./modules/template/controller";
|
||||
import { registerMenus } from "./modules/menu";
|
||||
import {
|
||||
activateWorkspaceTab,
|
||||
deActivateWorkspaceTab,
|
||||
registerWorkspaceTab,
|
||||
TAB_TYPE,
|
||||
unregisterWorkspaceTab,
|
||||
openWorkspaceTab,
|
||||
} from "./modules/workspace/tab";
|
||||
import {
|
||||
initWorkspace,
|
||||
|
|
@ -24,7 +21,7 @@ import {
|
|||
updateOutline,
|
||||
} from "./modules/workspace/content";
|
||||
import { registerNotify } from "./modules/notify";
|
||||
import { showWorkspaceWindow } from "./modules/workspace/window";
|
||||
import { openWorkspaceWindow } from "./modules/workspace/window";
|
||||
import { registerReaderAnnotationButton } from "./modules/reader";
|
||||
import { setSyncing, callSyncing } from "./modules/sync/hooks";
|
||||
import {
|
||||
|
|
@ -84,7 +81,7 @@ async function onMainWindowLoad(win: Window): Promise<void> {
|
|||
|
||||
registerMenus();
|
||||
|
||||
registerWorkspaceTab();
|
||||
registerWorkspaceTab(win);
|
||||
|
||||
initTemplates();
|
||||
}
|
||||
|
|
@ -97,7 +94,6 @@ function onShutdown(): void {
|
|||
ztoolkit.unregisterAll();
|
||||
// Remove addon object
|
||||
addon.data.alive = false;
|
||||
unregisterWorkspaceTab();
|
||||
delete Zotero[config.addonInstance];
|
||||
}
|
||||
|
||||
|
|
@ -114,14 +110,6 @@ function onNotify(
|
|||
if (extraData.skipBN) {
|
||||
return;
|
||||
}
|
||||
// Workspace tab select/unselect callback
|
||||
if (event === "select" && type === "tab") {
|
||||
if (extraData[ids[0]].type == TAB_TYPE) {
|
||||
activateWorkspaceTab();
|
||||
} else {
|
||||
deActivateWorkspaceTab();
|
||||
}
|
||||
}
|
||||
// Workspace main note update
|
||||
if (event === "modify" && type === "item") {
|
||||
if ((ids as number[]).includes(addon.data.workspace.mainId)) {
|
||||
|
|
@ -257,16 +245,11 @@ function onSetWorkspaceNote(
|
|||
|
||||
function onOpenWorkspace(type: "tab" | "window" = "tab") {
|
||||
if (type === "window") {
|
||||
if (addon.data.workspace.window.active) {
|
||||
addon.data.workspace.window.window?.focus();
|
||||
return;
|
||||
}
|
||||
showWorkspaceWindow();
|
||||
openWorkspaceWindow();
|
||||
return;
|
||||
}
|
||||
if (type === "tab") {
|
||||
// selecting tab will auto load the workspace content
|
||||
Zotero_Tabs.select(addon.data.workspace.tab.id!);
|
||||
openWorkspaceTab();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,37 +5,49 @@ import { getString } from "../../utils/locale";
|
|||
import { getPref, setPref } from "../../utils/prefs";
|
||||
import { waitUtilAsync } from "../../utils/wait";
|
||||
// TODO: uncouple these imports
|
||||
import {} from "./content";
|
||||
import { messageHandler } from "./message";
|
||||
|
||||
export const TAB_TYPE = "betternotes";
|
||||
|
||||
export function registerWorkspaceTab() {
|
||||
const tabContainer = document.querySelector("#tab-bar-container");
|
||||
if (!tabContainer) {
|
||||
export function registerWorkspaceTab(win: Window) {
|
||||
const doc = win.document;
|
||||
const spacer = doc.querySelector("#zotero-collections-toolbar > spacer");
|
||||
if (!spacer) {
|
||||
return;
|
||||
}
|
||||
tabContainer.removeAttribute("hidden");
|
||||
const mut = new (ztoolkit.getGlobal("MutationObserver"))((muts) => {
|
||||
tabContainer.removeAttribute("hidden");
|
||||
});
|
||||
mut.observe(tabContainer, {
|
||||
attributes: true,
|
||||
attributeFilter: ["hidden"],
|
||||
});
|
||||
waitUtilAsync(() =>
|
||||
Boolean(ztoolkit.getGlobal("ZoteroContextPane")._notifierID),
|
||||
).then(() => {
|
||||
addWorkspaceTab();
|
||||
});
|
||||
window.addEventListener("message", (e) => messageHandler(e), false);
|
||||
ztoolkit.UI.insertElementBefore(
|
||||
{
|
||||
tag: "toolbarbutton",
|
||||
classList: ["zotero-tb-button"],
|
||||
styles: {
|
||||
listStyleImage: `url("chrome://${config.addonRef}/content/icons/icon-linear-20.svg")`,
|
||||
},
|
||||
attributes: {
|
||||
tooltiptext: "Open workspace",
|
||||
},
|
||||
listeners: [
|
||||
{
|
||||
type: "command",
|
||||
listener: (ev) => {
|
||||
if ((ev as MouseEvent).shiftKey) {
|
||||
addon.hooks.onOpenWorkspace("window");
|
||||
} else {
|
||||
addon.hooks.onOpenWorkspace("tab");
|
||||
}
|
||||
},
|
||||
},
|
||||
],
|
||||
},
|
||||
spacer,
|
||||
);
|
||||
win.addEventListener("message", (e) => messageHandler(e), false);
|
||||
}
|
||||
|
||||
export function unregisterWorkspaceTab() {
|
||||
addon.data.workspace.tab.id && Zotero_Tabs.close(addon.data.workspace.tab.id);
|
||||
}
|
||||
|
||||
async function addWorkspaceTab() {
|
||||
export async function openWorkspaceTab() {
|
||||
if (addon.data.workspace.tab.active) {
|
||||
Zotero_Tabs.select(addon.data.workspace.tab.id!);
|
||||
return;
|
||||
}
|
||||
const { id, container } = Zotero_Tabs.add({
|
||||
type: TAB_TYPE,
|
||||
title: getString("tab.name"),
|
||||
|
|
@ -45,30 +57,15 @@ async function addWorkspaceTab() {
|
|||
},
|
||||
select: false,
|
||||
onClose: () => {
|
||||
setWorkspaceTabStatus(false);
|
||||
if (addon.data.alive) {
|
||||
addWorkspaceTab();
|
||||
}
|
||||
deActivateWorkspaceTab();
|
||||
},
|
||||
});
|
||||
await waitUtilAsync(() =>
|
||||
Boolean(document.querySelector(`.tabs-wrapper .tab[data-id=${id}]`)),
|
||||
);
|
||||
const tabElem = document.querySelector(
|
||||
`.tabs-wrapper .tab[data-id=${id}]`,
|
||||
) as HTMLDivElement;
|
||||
tabElem.style.width = "30px";
|
||||
tabElem.style.minWidth = "30px";
|
||||
tabElem.style.maxWidth = "30px";
|
||||
const content = tabElem.querySelector(".tab-name") as HTMLDivElement;
|
||||
const close = tabElem.querySelector(".tab-close") as HTMLDivElement;
|
||||
content.style.width = "20px";
|
||||
content.style.height = "20px";
|
||||
content.innerHTML = "";
|
||||
close.style.visibility = "hidden";
|
||||
addon.data.workspace.tab.id = id;
|
||||
container.setAttribute("workspace-type", "tab");
|
||||
addon.data.workspace.tab.container = container;
|
||||
|
||||
await activateWorkspaceTab();
|
||||
Zotero_Tabs.select(id);
|
||||
}
|
||||
|
||||
function hoverWorkspaceTab(hovered: boolean) {
|
||||
|
|
@ -291,18 +288,17 @@ export async function activateWorkspaceTab() {
|
|||
initWorkspaceTabDragDrop(container, tabElem);
|
||||
addon.hooks.onInitWorkspace(container);
|
||||
registerWorkspaceTabPaneObserver();
|
||||
setWorkspaceTabStatus(true);
|
||||
}
|
||||
|
||||
export function deActivateWorkspaceTab() {
|
||||
if (!isContextPaneInitialized()) {
|
||||
return;
|
||||
}
|
||||
const tabToolbar = document.querySelector("#zotero-tab-toolbar") as XUL.Box;
|
||||
tabToolbar && tabToolbar.style.removeProperty("visibility");
|
||||
const toolbar = document.querySelector(
|
||||
"#zotero-context-toolbar-extension",
|
||||
) as XUL.Box;
|
||||
toolbar?.style.removeProperty("visibility");
|
||||
setWorkspaceTabStatus(false);
|
||||
}
|
||||
|
||||
function setWorkspaceTabStatus(status: boolean) {
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ import { config } from "../../../package.json";
|
|||
import { isWindowAlive } from "../../utils/window";
|
||||
import { messageHandler } from "./message";
|
||||
|
||||
export async function showWorkspaceWindow() {
|
||||
export async function openWorkspaceWindow() {
|
||||
if (isWindowAlive(addon.data.workspace.window.window)) {
|
||||
addon.data.workspace.window.window?.focus();
|
||||
return;
|
||||
|
|
|
|||
Loading…
Reference in New Issue