UNPKG

gojs

Version:

Interactive diagrams, charts, and graphs, such as trees, flowcharts, orgcharts, UML, BPMN, or business diagrams

84 lines (79 loc) 3.92 kB
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Drag Zooming Tool</title> <meta name="description" content="TypeScript: Users can zoom into and out of a diagram by drawing a rectangle showing what part of the document should be shown by the new viewport." /> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Copyright 1998-2020 by Northwoods Software Corporation. --> <script src="../assets/js/goSamples.js"></script> <!-- this is only for the GoJS Samples framework --> </head> <body> <div id="sample"> <div id="myDiagramDiv" style="background-color: white; border: solid 1px black; width: 100%;height: 800px"></div> <p> This sample demonstrates the DragZoomingTool, which replaces the standard DragSelectingTool. It is defined in its own file, as <a href="DragZoomingTool.ts">DragZoomingTool.ts</a>. </p> <p> Press in the background, wait briefly, and then drag to zoom in to show the area of the drawn rectangle. Hold down the Shift key to zoom out. The rectangle always has the same aspect ratio as the viewport of the diagram. </p> </div> <script type="module" id="code"> import * as go from "../release/go-module.js"; import { DragZoomingTool } from './DragZoomingTool.js'; if (window.goSamples) window.goSamples(); // init for these samples -- you don't need to call this const $ = go.GraphObject.make; // for conciseness in defining templates const myDiagram = $(go.Diagram, 'myDiagramDiv', { initialDocumentSpot: go.Spot.Center, initialViewportSpot: go.Spot.Center, // Define the template for Nodes, just some text inside a colored rectangle nodeTemplate: $(go.Node, 'Spot', { width: 70, height: 20 }, $(go.Shape, 'Rectangle', new go.Binding('fill', 'c')), $(go.TextBlock, { margin: 2 }, new go.Binding('text', 'c'))), // Define the template for Links, just a simple line linkTemplate: $(go.Link, $(go.Shape, { stroke: 'black' })), layout: $(go.TreeLayout, { angle: 90, nodeSpacing: 4, compaction: go.TreeLayout.CompactionNone }), model: $(go.TreeModel, { nodeKeyProperty: 'k', nodeParentKeyProperty: 'p' }) }); // Add an instance of the custom tool defined in DragZoomingTool.js. // This needs to be inserted before the standard DragSelectingTool, // which is normally the third Tool in the ToolManager.mouseMoveTools list. myDiagram.toolManager.mouseMoveTools.insertAt(2, new DragZoomingTool()); // This is a status message const myLoading = $(go.Part, { selectable: false, location: new go.Point(0, 0) }, $(go.TextBlock, 'loading...', { stroke: 'red', font: '20pt sans-serif' })); // temporarily add the status indicator myDiagram.add(myLoading); // allow the myLoading indicator to be shown now, // but allow objects added in loadTree to also be considered part of the initial Diagram myDiagram.delayInitialization(loadTree); function loadTree() { // create some tree data const total = 99; const treedata = []; for (let i = 0; i < total; i++) { // these property names are also specified when creating the TreeModel const d = { k: i, c: go.Brush.randomColor(), p: (i > 0 ? Math.floor(Math.random() * i / 2) : undefined) // the random parent's key }; treedata.push(d); } // give the Diagram's model all the data myDiagram.model.nodeDataArray = treedata; // remove the status indicator myDiagram.remove(myLoading); window.myDiagram = myDiagram; // Attach to the window for console debugging } </script> </body> </html>