And if I make them part of the node adornment they are only visible when the node is selected. However, the indicators should be visible at all time but visually be outside of the node body.
I would highly appreciate any ideas on how to achieve that! :)
Yes, if you want something to be shown all the time, you need to include it in the template.
But you can control which element gets the selection adornment. Try giving what you want a name and then setting Part.selectionObjectName to that name. If you search the samples you will find a number of examples of this. GoJS Selection -- Northwoods Software
The links are not routed to the box but to the invisible border to the node. This is probably the biggest issue because it everything that I place outside of the box will affect the link routing, correct?
The selection adornment tools also float in the wrong place. That could probably be fixed by your alternative proposal.
Each of your nodes only has a single port, yes? In other words, you have not set or bound portId to a string on any of the elements of your node?
If so, then the whole Node is acting as the default port for the node. (Hence Node.port == Node.) You can make that rounded rectangular shape be the port by setting its GraphObject.portId to the empty string, which is the default port identifier.
$(go.Shape, . . .,
{ . . .,
portId: ""
})
Or choose some other element such as a Panel to make the default port by setting its port identifier to be the empty string.
Leaves only the issue with the floating adornment buttons to be misplaced because they adorn the whole node, not just the body shape. Is there anything similar to help here? Can I specify the object to be adorned by the shape name?
If you had set the Adornment.adornedObject to be just that body shape or panel, instead of the whole Node, then the Placeholder would take the size and position just of that adornedObject.
Adornments are data bound to the same data object that the adorned Part is bound to – the Part.data. So if the Shape.figure is data bound in the template, you can use the same binding in the Adornment.
And if the template’s Shape is constant (no Binding), well then your Adornment can have a constant Shape too.
From what I understand is that if I set the Adornment.adornedObject to the rounded rectangle shape of my node, then the adornment will take the size and position of that particular object. Perfect. So what I am looking for is something like this: