@@ -2,36 +2,6 @@ import { setIcon, setTooltip } from "obsidian"
22import { BBox , Canvas , CanvasNode , CanvasNodeData , Position , Size } from "src/@types/Canvas"
33import 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-
355export 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
10777export 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
128104export 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+
145151export 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