UNPKG

gojs

Version:

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

105 lines (92 loc) 3.76 kB
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Minimal SVG Download</title> <meta name="description" content="Minimal, showing SVG rendering and download with Diagram.makeSvg." /> <meta name="viewport" content="width=device-width, initial-scale=1"> <!-- Copyright 1998-2020 by Northwoods Software Corporation. --> <script src="../release/go.js"></script> <script src="../assets/js/goSamples.js"></script> <!-- this is only for the GoJS Samples framework --> <script id="code"> function init() { if (window.goSamples) goSamples(); // init for these samples -- you don't need to call this var $ = go.GraphObject.make; // for conciseness in defining templates myDiagram = $(go.Diagram, "myDiagramDiv", // create a Diagram for the DIV HTML element { "undoManager.isEnabled": true // enable undo & redo }); // define a simple Node template myDiagram.nodeTemplate = $(go.Node, "Auto", // the Shape will go around the TextBlock $(go.Shape, "RoundedRectangle", { strokeWidth: 0 }, // Shape.fill is bound to Node.data.color new go.Binding("fill", "color")), $(go.TextBlock, { margin: 8 }, // some room around the text // TextBlock.text is bound to Node.data.key new go.Binding("text", "key")) ); // but use the default Link template, by not setting Diagram.linkTemplate // create the model data that will be represented by Nodes and Links myDiagram.model = new go.GraphLinksModel( [ { key: "Alpha", color: "lightblue" }, { key: "Beta", color: "orange" }, { key: "Gamma", color: "lightgreen" }, { key: "Delta", color: "pink" } ], [ { from: "Alpha", to: "Beta" }, { from: "Alpha", to: "Gamma" }, { from: "Beta", to: "Beta" }, { from: "Gamma", to: "Delta" }, { from: "Delta", to: "Alpha" } ]); document.getElementById("svgButton").addEventListener("click", makeSvg); } // When the blob is complete, make an anchor tag for it and use the tag to initiate a download // Works in: // * Chrome // * IE11, Edge // * Firefox function myCallback(blob) { var url = window.URL.createObjectURL(blob); var filename = "mySVGFile.svg"; var a = document.createElement("a"); a.style = "display: none"; a.href = url; a.download = filename; // IE 11 if (window.navigator.msSaveBlob !== undefined) { window.navigator.msSaveBlob(blob, filename); return; } document.body.appendChild(a); requestAnimationFrame(function() { a.click(); window.URL.revokeObjectURL(url); document.body.removeChild(a); }); } function makeSvg() { var svg = myDiagram.makeSvg({ scale: 1, background: "white" }); var svgstr = new XMLSerializer().serializeToString(svg); var blob = new Blob([svgstr], { type: "image/svg+xml" }); myCallback(blob); } </script> </head> <body onload="init()"> <div id="sample"> <!-- The DIV for the Diagram needs an explicit size or else we won't see anything. This also adds a border to help see the edges of the viewport. --> <div id="myDiagramDiv" style="border: solid 1px black; width:400px; height:400px"></div> <button id="svgButton">Make SVG and Download</button> <p> This sample shows how to use <a>Diagram.makeSvg</a> function to render all or part of a diagram and to initiate a file download. </p> </div> </body> </html>