Skip to content

Commit 7f91092

Browse files
Fixed popup menu expandable option
1 parent 9a0efef commit 7f91092

File tree

1 file changed

+40
-34
lines changed

1 file changed

+40
-34
lines changed

src/utils/canvas-helper.ts

Lines changed: 40 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -2,36 +2,6 @@ import { setIcon, setTooltip } from "obsidian"
22
import { BBox, Canvas, CanvasNode, CanvasNodeData, Position, Size } from "src/@types/Canvas"
33
import AdvancedCanvasPlugin from "src/main"
44

5-
export function scaleBBox(bbox: BBox, scale: number): BBox {
6-
let diffX = (scale - 1) * (bbox.maxX - bbox.minX)
7-
let diffY = (scale - 1) * (bbox.maxY - bbox.minY)
8-
9-
return {
10-
minX: bbox.minX - diffX / 2,
11-
maxX: bbox.maxX + diffX / 2,
12-
minY: bbox.minY - diffY / 2,
13-
maxY: bbox.maxY + diffY / 2
14-
}
15-
}
16-
17-
export function getBBox(canvasNodes: (CanvasNode|CanvasNodeData)[]) {
18-
let minX = Infinity
19-
let minY = Infinity
20-
let maxX = -Infinity
21-
let maxY = -Infinity
22-
23-
for (const node of canvasNodes) {
24-
const nodeData = node.getData ? node.getData() : node
25-
26-
minX = Math.min(minX, nodeData.x)
27-
minY = Math.min(minY, nodeData.y)
28-
maxX = Math.max(maxX, nodeData.x + nodeData.width)
29-
maxY = Math.max(maxY, nodeData.y + nodeData.height)
30-
}
31-
32-
return { minX, minY, maxX, maxY }
33-
}
34-
355
export function canvasCommand(plugin: AdvancedCanvasPlugin, check: (canvas: Canvas) => boolean, run: (canvas: Canvas) => void): (checking: boolean) => boolean {
366
return (checking: boolean) => {
377
const canvas = plugin.getCurrentCanvas()
@@ -105,24 +75,30 @@ export function createPopupMenuOption(menuOption: MenuOption): HTMLElement {
10575
}
10676

10777
export function createExpandablePopupMenuOption(menuOption: MenuOption, subMenuOptions: MenuOption[]): HTMLElement {
78+
const menuOptionContainer = document.createElement('div')
79+
menuOptionContainer.id = menuOption.id
80+
menuOptionContainer.classList.add('expandable-menu-option')
81+
10882
const menuOptionElement = createPopupMenuOption({
10983
...menuOption,
110-
callback: () => menuOptionElement.classList.toggle('expanded')
84+
id: '',
85+
callback: () => menuOptionContainer.classList.toggle('expanded')
11186
})
112-
menuOptionElement.classList.add('expandable-menu-option')
87+
88+
menuOptionContainer.appendChild(menuOptionElement)
11389

11490
// Add popup menu
11591
const expandMenu = document.createElement('div')
11692
expandMenu.classList.add('expand-menu')
117-
menuOptionElement.appendChild(expandMenu)
93+
menuOptionContainer.appendChild(expandMenu)
11894

11995
// Add nested options
12096
for (const subMenuOption of subMenuOptions) {
12197
const subMenuOptionElement = createPopupMenuOption(subMenuOption)
12298
expandMenu.appendChild(subMenuOptionElement)
12399
}
124100

125-
return menuOptionElement
101+
return menuOptionContainer
126102
}
127103

128104
export function addPopupMenuOption(canvas: Canvas, element: HTMLElement) {
@@ -142,6 +118,36 @@ export function getCenterCoordinates(canvas: Canvas, nodeSize: Size): Position {
142118
}
143119
}
144120

121+
export function scaleBBox(bbox: BBox, scale: number): BBox {
122+
let diffX = (scale - 1) * (bbox.maxX - bbox.minX)
123+
let diffY = (scale - 1) * (bbox.maxY - bbox.minY)
124+
125+
return {
126+
minX: bbox.minX - diffX / 2,
127+
maxX: bbox.maxX + diffX / 2,
128+
minY: bbox.minY - diffY / 2,
129+
maxY: bbox.maxY + diffY / 2
130+
}
131+
}
132+
133+
export function getBBox(canvasNodes: (CanvasNode|CanvasNodeData)[]) {
134+
let minX = Infinity
135+
let minY = Infinity
136+
let maxX = -Infinity
137+
let maxY = -Infinity
138+
139+
for (const node of canvasNodes) {
140+
const nodeData = node.getData ? node.getData() : node
141+
142+
minX = Math.min(minX, nodeData.x)
143+
minY = Math.min(minY, nodeData.y)
144+
maxX = Math.max(maxX, nodeData.x + nodeData.width)
145+
maxY = Math.max(maxY, nodeData.y + nodeData.height)
146+
}
147+
148+
return { minX, minY, maxX, maxY }
149+
}
150+
145151
export function zoomToBBox(canvas: Canvas, bbox: BBox) {
146152
const PADDING_CORRECTION_FACTOR = 1 / 1.1
147153
const zoomedBBox = scaleBBox(bbox, PADDING_CORRECTION_FACTOR)

0 commit comments

Comments
 (0)