d2/d2graph/grid_diagram.go

47 lines
839 B
Go
Raw Normal View History

2023-04-01 00:18:17 +00:00
package d2graph
2023-04-05 18:11:31 +00:00
func (obj *Object) IsGridDiagram() bool {
2023-04-14 03:04:55 +00:00
return obj != nil &&
(obj.GridRows != nil || obj.GridColumns != nil)
2023-04-01 00:18:17 +00:00
}
2023-04-05 00:44:05 +00:00
2023-04-05 18:11:31 +00:00
func (obj *Object) ClosestGridDiagram() *Object {
2023-04-06 22:32:09 +00:00
if obj == nil {
2023-04-05 00:44:05 +00:00
return nil
}
2023-04-06 22:32:09 +00:00
if obj.IsGridDiagram() {
return obj
2023-04-05 00:44:05 +00:00
}
2023-04-05 18:11:31 +00:00
return obj.Parent.ClosestGridDiagram()
2023-04-05 00:44:05 +00:00
}
func (obj *Object) ClosestGridCell() *Object {
if obj == nil {
return nil
}
// grid cells can be a nested grid diagram
if obj.Parent.IsGridDiagram() {
return obj
}
return obj.Parent.ClosestGridCell()
}
// TopGridDiagram returns the least nested (outermost) grid diagram
func (obj *Object) TopGridDiagram() *Object {
if obj == nil {
return nil
}
var gd *Object
if obj.IsGridDiagram() {
gd = obj
}
curr := obj.Parent
for curr != nil {
if curr.IsGridDiagram() {
gd = curr
}
curr = curr.Parent
}
return gd
}