diff --git a/app/src/assets/scss/_layout.scss b/app/src/assets/scss/_layout.scss
index 448a09807..d656a7d04 100644
--- a/app/src/assets/scss/_layout.scss
+++ b/app/src/assets/scss/_layout.scss
@@ -118,11 +118,16 @@
flex: 1;
min-height: 30px;
- &:not(:last-child) {
+ &:not(:last-child),
+ &:last-child:not(.item--focus):not(.item--readonly) {
box-shadow: 2px -26px 0px 0px var(--b3-theme-surface), 1px -4px 1px 0px var(--b3-theme-on-surface-light);
}
- &:hover:not(.item--focus) {
+ &:last-child:not(.item--readonly) {
+ margin-right: 2px;
+ }
+
+ &:hover:not(.item--focus):not(.item--readonly) {
background-color: var(--b3-list-hover);
box-shadow: none;
border-radius: 4px 4px 0 0;
diff --git a/app/src/layout/Wnd.ts b/app/src/layout/Wnd.ts
index 0798494ee..d6c5b3c04 100644
--- a/app/src/layout/Wnd.ts
+++ b/app/src/layout/Wnd.ts
@@ -26,6 +26,8 @@ import {getAllModels} from "./getAll";
import {countBlockWord} from "./status";
import {saveScroll} from "../protyle/scroll/saveScroll";
import {Asset} from "../asset";
+import {newFile} from "../util/newFile";
+import {MenuItem} from "../menus/Menu";
export class Wnd {
public id: string;
@@ -45,7 +47,15 @@ export class Wnd {
dragHTML = "";
}
this.element.innerHTML = `
`;
this.headersElement = this.element.querySelector(".layout-tab-bar");
@@ -70,10 +80,16 @@ export class Wnd {
this.headersElement.addEventListener("mousewheel", (event: WheelEvent) => {
this.headersElement.scrollLeft = this.headersElement.scrollLeft + event.deltaY;
}, {passive: true});
- this.headersElement.addEventListener("click", (event) => {
+ this.headersElement.parentElement.addEventListener("click", (event) => {
let target = event.target as HTMLElement;
while (target && !target.isEqualNode(this.headersElement)) {
- if (target.tagName === "LI") {
+ if (target.classList.contains("item__close") && target.getAttribute("data-type") === "new") {
+ newFile(undefined, undefined, true);
+ break;
+ } else if (target.classList.contains("item__close") && target.getAttribute("data-type") === "more") {
+ this.renderTabList(event);
+ break;
+ } else if (target.tagName === "LI" && target.getAttribute("data-id")) {
this.switchTab(target, true);
break;
}
@@ -394,6 +410,7 @@ export class Wnd {
this.children.splice(oldFocusIndex + 1, 0, tab);
if (tab.headElement) {
+ this.headersElement.parentElement.classList.remove("fn__none");
if (this.headersElement.childElementCount === 0) {
this.headersElement.append(tab.headElement);
} else {
@@ -436,6 +453,23 @@ export class Wnd {
}
}
+ private renderTabList(event: MouseEvent) {
+ window.siyuan.menus.menu.remove()
+ Array.from(this.headersElement.children).forEach((item: HTMLElement) => {
+ window.siyuan.menus.menu.append(new MenuItem({
+ label: item.querySelector(".item__text").textContent,
+ click: () => {
+ this.switchTab(item, true);
+ },
+ current: item.classList.contains("item--focus")
+ }).element);
+ })
+ window.siyuan.menus.menu.popup({
+ x: event.clientX,
+ y: event.clientY,
+ });
+ }
+
private removeOverCounter(oldFocusIndex?: number) {
if (typeof oldFocusIndex === "undefined") {
this.children.forEach((item, index) => {