d2/d2graph/grid_diagram.go
2023-09-28 13:55:20 -07:00

46 lines
839 B
Go

package d2graph
func (obj *Object) IsGridDiagram() bool {
return obj != nil &&
(obj.GridRows != nil || obj.GridColumns != nil)
}
func (obj *Object) ClosestGridDiagram() *Object {
if obj == nil {
return nil
}
if obj.IsGridDiagram() {
return obj
}
return obj.Parent.ClosestGridDiagram()
}
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
}