diff --git a/app/src/assets/scss/_layout.scss b/app/src/assets/scss/_layout.scss
index a2183ed65..323001e27 100644
--- a/app/src/assets/scss/_layout.scss
+++ b/app/src/assets/scss/_layout.scss
@@ -310,6 +310,10 @@
background-color: var(--b3-theme-surface);
box-sizing: border-box;
+ &:hover .dock__item--pin {
+ opacity: 1;
+ }
+
dockLeft {
border-right: .5px solid var(--b3-border-color);
}
@@ -356,6 +360,11 @@
border-radius: 6px;
margin: 5px;
+ &--pin {
+ opacity: 0;
+ transition: var(--b3-transition);
+ }
+
&:hover,
&--active {
background-color: var(--b3-theme-background-light);
diff --git a/app/src/layout/dock/index.ts b/app/src/layout/dock/index.ts
index 1345dab38..7e9c01a2e 100644
--- a/app/src/layout/dock/index.ts
+++ b/app/src/layout/dock/index.ts
@@ -53,6 +53,9 @@ export class Dock {
this.pin = options.data.pin;
this.data = {};
if (options.data.data.length === 0) {
+ this.element.firstElementChild.innerHTML = `
+
+`;
this.element.classList.add("fn__none");
} else {
this.genButton(options.data.data[0], 0);
@@ -85,6 +88,11 @@ export class Dock {
this.toggleModel(type, false, true);
event.preventDefault();
break;
+ } else if (target.classList.contains("dock__item")) {
+ this.togglePin();
+ target.setAttribute("aria-label", this.pin ? window.siyuan.languages.unpin : window.siyuan.languages.pin);
+ event.preventDefault();
+ break;
}
target = target.parentElement;
}
@@ -120,6 +128,28 @@ export class Dock {
}
}
+ public togglePin() {
+ this.pin = !this.pin;
+ const hasActive = this.element.querySelector(".dock__item--active");
+ if (!this.pin) {
+ this.resetDockPosition(hasActive ? true : false);
+ this.resizeElement.classList.add("fn__none");
+ if (hasActive) {
+ this.showDock(true);
+ } else {
+ this.hideDock(true);
+ }
+ } else {
+ this.layout.element.style.opacity = "";
+ this.layout.element.style.transform = "";
+ if (hasActive) {
+ this.resizeElement.classList.remove("fn__none");
+ }
+ }
+ this.layout.element.classList.toggle("layout--float");
+ resizeTabs();
+ }
+
public resetDockPosition(show: boolean) {
if (this.position === "Left") {
this.layout.element.setAttribute("style", `width:${this.layout.element.clientWidth}px;
@@ -414,7 +444,7 @@ ${this.position === "Top" ? "top" : "bottom"}:0`);
sourceElement.setAttribute("data-width", "");
const type = sourceElement.getAttribute("data-type") as TDockType;
const sourceDock = getDockByType(type);
- if (sourceDock.element.querySelectorAll(".dock__item").length === 1) {
+ if (sourceDock.element.querySelectorAll(".dock__item").length === 2) {
sourceDock.element.classList.add("fn__none");
}
const sourceWnd = sourceDock.layout.children[parseInt(sourceElement.getAttribute("data-index"))] as Wnd;
@@ -434,9 +464,9 @@ ${this.position === "Top" ? "top" : "bottom"}:0`);
sourceElement.classList.add(`b3-tooltips__${this.getClassDirect(index)}`);
sourceElement.setAttribute("data-index", index.toString());
if (index === 0) {
- this.element.firstElementChild.insertAdjacentElement("beforeend", sourceElement);
+ this.element.firstElementChild.insertAdjacentElement("afterbegin", sourceElement);
} else {
- this.element.lastElementChild.insertAdjacentElement("beforeend", sourceElement);
+ this.element.lastElementChild.insertAdjacentElement("afterbegin", sourceElement);
}
this.element.classList.remove("fn__none");
resetFloatDockSize();
@@ -512,7 +542,9 @@ ${this.position === "Top" ? "top" : "bottom"}:0`);
this.data[item.type] = true;
});
if (index === 0) {
- this.element.firstElementChild.innerHTML = html;
+ this.element.firstElementChild.innerHTML = `${html}
+
+`;
} else {
this.element.lastElementChild.innerHTML = html;
}
diff --git a/app/src/layout/status.ts b/app/src/layout/status.ts
index ec5ab7bca..2e802a0c4 100644
--- a/app/src/layout/status.ts
+++ b/app/src/layout/status.ts
@@ -45,7 +45,7 @@ export const initStatus = (isWindow = false) => {
document.querySelectorAll(".dock").forEach(item => {
if (dockIsShow) {
item.classList.add("fn__none");
- } else if (item.querySelectorAll(".dock__item").length > 0) {
+ } else if (item.querySelectorAll(".dock__item").length > 1) {
item.classList.remove("fn__none");
}
});
diff --git a/app/src/menus/workspace.ts b/app/src/menus/workspace.ts
index 89c6772d6..1a1a63fa5 100644
--- a/app/src/menus/workspace.ts
+++ b/app/src/menus/workspace.ts
@@ -24,25 +24,7 @@ const togglePinDock = (dock: Dock, icon: string) => {
icon,
current: !dock.pin,
click() {
- dock.pin = !dock.pin;
- const hasActive = dock.element.querySelector(".dock__item--active");
- if (!dock.pin) {
- dock.resetDockPosition(hasActive ? true : false);
- dock.resizeElement.classList.add("fn__none");
- if (hasActive) {
- dock.showDock(true);
- } else {
- dock.hideDock(true);
- }
- } else {
- dock.layout.element.style.opacity = "";
- dock.layout.element.style.transform = "";
- if (hasActive) {
- dock.resizeElement.classList.remove("fn__none");
- }
- }
- dock.layout.element.classList.toggle("layout--float");
- resizeTabs();
+ dock.togglePin();
}
};
};