Regarding resizing within the viewport:
Add this helper function:
function limitInputToViewport(e) {
var diagram = e.diagram;
var vp = diagram.viewportBounds;
var docpt = e.documentPoint.copy();
if (docpt.x < vp.x) docpt.x = vp.x;
else if (docpt.x > vp.right) docpt.x = vp.right;
if (docpt.y < vp.y) docpt.y = vp.y;
else if (docpt.y > vp.bottom) docpt.y = vp.bottom;
e.documentPoint = docpt;
e.viewPoint = diagram.transformDocToView(docpt);
}
This function limits an InputEvent to stay within the viewport.
Then you can override two ResizingTool methods:
[code] myDiagram.toolManager.resizingTool.doMouseMove = function() {
limitInputToViewport(this.diagram.lastInput);
go.ResizingTool.prototype.doMouseMove.call(this);
};
myDiagram.toolManager.resizingTool.doMouseUp = function() {
limitInputToViewport(this.diagram.lastInput);
go.ResizingTool.prototype.doMouseUp.call(this);
};[/code]
Now the user cannot drag a resize handle outside of the viewport.