UNPKG

gojs

Version:

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

206 lines (193 loc) 9.57 kB
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"/> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, viewport-fit=cover"/> <meta name="description" content="Interactive diagram showing the structure of the HTML DOM of this HTML page, allowing collapsing/expanding of subtrees."/> <link rel="stylesheet" href="../assets/css/style.css"/> <!-- Copyright 1998-2023 by Northwoods Software Corporation. --> <title>HTML DOM Tree</title> </head> <body> <!-- This top nav is not part of the sample code --> <nav id="navTop" class="w-full z-30 top-0 text-white bg-nwoods-primary"> <div class="w-full container max-w-screen-lg mx-auto flex flex-wrap sm:flex-nowrap items-center justify-between mt-0 py-2"> <div class="md:pl-4"> <a class="text-white hover:text-white no-underline hover:no-underline font-bold text-2xl lg:text-4xl rounded-lg hover:bg-nwoods-secondary " href="../"> <h1 class="my-0 p-1 ">GoJS</h1> </a> </div> <button id="topnavButton" class="rounded-lg sm:hidden focus:outline-none focus:ring" aria-label="Navigation"> <svg fill="currentColor" viewBox="0 0 20 20" class="w-6 h-6"> <path id="topnavOpen" fill-rule="evenodd" d="M3 5a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM3 10a1 1 0 011-1h12a1 1 0 110 2H4a1 1 0 01-1-1zM9 15a1 1 0 011-1h6a1 1 0 110 2h-6a1 1 0 01-1-1z" clip-rule="evenodd"></path> <path id="topnavClosed" class="hidden" fill-rule="evenodd" d="M4.293 4.293a1 1 0 011.414 0L10 8.586l4.293-4.293a1 1 0 111.414 1.414L11.414 10l4.293 4.293a1 1 0 01-1.414 1.414L10 11.414l-4.293 4.293a1 1 0 01-1.414-1.414L8.586 10 4.293 5.707a1 1 0 010-1.414z" clip-rule="evenodd"></path> </svg> </button> <div id="topnavList" class="hidden sm:block items-center w-auto mt-0 text-white p-0 z-20"> <ul class="list-reset list-none font-semibold flex justify-end flex-wrap sm:flex-nowrap items-center px-0 pb-0"> <li class="p-1 sm:p-0"><a class="topnav-link" href="../learn/">Learn</a></li> <li class="p-1 sm:p-0"><a class="topnav-link" href="../samples/">Samples</a></li> <li class="p-1 sm:p-0"><a class="topnav-link" href="../intro/">Intro</a></li> <li class="p-1 sm:p-0"><a class="topnav-link" href="../api/">API</a></li> <li class="p-1 sm:p-0"><a class="topnav-link" href="https://www.nwoods.com/products/register.html">Register</a></li> <li class="p-1 sm:p-0"><a class="topnav-link" href="../download.html">Download</a></li> <li class="p-1 sm:p-0"><a class="topnav-link" href="https://forum.nwoods.com/c/gojs/11">Forum</a></li> <li class="p-1 sm:p-0"><a class="topnav-link" href="https://www.nwoods.com/contact.html" target="_blank" rel="noopener" onclick="getOutboundLink('https://www.nwoods.com/contact.html', 'contact');">Contact</a></li> <li class="p-1 sm:p-0"><a class="topnav-link" href="https://www.nwoods.com/sales/index.html" target="_blank" rel="noopener" onclick="getOutboundLink('https://www.nwoods.com/sales/index.html', 'buy');">Buy</a></li> </ul> </div> </div> <hr class="border-b border-gray-600 opacity-50 my-0 py-0" /> </nav> <div class="md:flex flex-col md:flex-row md:min-h-screen w-full max-w-screen-xl mx-auto"> <div id="navSide" class="flex flex-col w-full md:w-48 text-gray-700 bg-white flex-shrink-0"></div> <!-- * * * * * * * * * * * * * --> <!-- Start of GoJS sample code --> <script src="../release/go.js"></script> <div id="allSampleContent" class="p-4 w-full"> <script id="code"> var names = {}; // hash to keep track of what names have been used function init() { // Since 2.2 you can also author concise templates with method chaining instead of GraphObject.make // For details, see https://gojs.net/latest/intro/buildingObjects.html const $ = go.GraphObject.make; // for conciseness in defining templates myDiagram = new go.Diagram("myDiagramDiv", { initialAutoScale: go.Diagram.UniformToFill, // define the layout for the diagram layout: $(go.TreeLayout, { nodeSpacing: 5, layerSpacing: 30, arrangement: go.TreeLayout.ArrangementFixedRoots }) }); // Define a simple node template consisting of text followed by an expand/collapse button myDiagram.nodeTemplate = $(go.Node, "Horizontal", { selectionChanged: nodeSelectionChanged }, // this event handler is defined below $(go.Panel, "Auto", $(go.Shape, { fill: "#1F4963", stroke: null }), $(go.TextBlock, { font: "bold 13px Helvetica, bold Arial, sans-serif", stroke: "white", margin: 3 }, new go.Binding("text", "key")) ), $("TreeExpanderButton") ); // Define a trivial link template with no arrowhead. myDiagram.linkTemplate = $(go.Link, { selectable: false }, $(go.Shape)); // the link shape // create the model for the DOM tree myDiagram.model = new go.TreeModel( { isReadOnly: true, // don't allow the user to delete or copy nodes // build up the tree in an Array of node data nodeDataArray: traverseDom(document.activeElement) }); } // Walk the DOM, starting at document, and return an Array of node data objects representing the DOM tree // Typical usage: traverseDom(document.activeElement) // The second and third arguments are internal, used when recursing through the DOM function traverseDom(node, parentName, dataArray) { if (parentName === undefined) parentName = null; if (dataArray === undefined) dataArray = []; // skip everything but HTML Elements if (!(node instanceof Element)) return; // Ignore the navigation menus if (node.id === "navSide" || node.id === "navTop") return; // add this node to the nodeDataArray var name = getName(node); var data = { key: name, name: name }; dataArray.push(data); // add a link to its parent if (parentName !== null) { data.parent = parentName; } // find all children var l = node.childNodes.length; for (var i = 0; i < l; i++) { traverseDom(node.childNodes[i], name, dataArray); } return dataArray; } // Give every node a unique name function getName(node) { var n = node.nodeName; if (node.id) n = n + " (" + node.id + ")"; var namenum = n; // make sure the name is unique var i = 1; while (names[namenum] !== undefined) { namenum = n + i; i++; } names[namenum] = node; return namenum; } // When a Node is selected, highlight the corresponding HTML element. function nodeSelectionChanged(node) { if (node.isSelected) { names[node.data.name].style.backgroundColor = "lightblue"; } else { names[node.data.name].style.backgroundColor = ""; } } window.addEventListener('DOMContentLoaded', init); </script> <div id="sample"> <!-- The DIV needs an explicit size or else we won't see anything. --> <div id="myDiagramDiv" style="border: 1px solid black; width:100%; height:300px"></div> <p> This sample shows the DOM (Document Object Model) of this webpage displayed as a tree. Each Node in the Diagram shows information about the corresponding HTML element in the DOM. </p> <p> When a node is selected, the background color of the corresponding HTML Element changes to lightblue. Below the diagram are some more HTML elements to illustrate the effect. This sample also makes use of the <a href="../intro/buttons.html" target="_blank">TreeExpanderButton</a>, which allows for parent nodes to expand and collapse their child nodes. Buttons are defined in <a href="../extensions/Buttons.js">Buttons.js</a>. </p> <p id="lastParagraph"> Elements with an id attribute are noted in parenthesis. </p> <div id="otherInfo"> <div id="tableContainer" style="display: inline-block;"> <table style="border: 1px; border-collapse: collapse;"> <tr> <th id="firstHeader">Table header</th> <th id="secondHeader">Table header 2</th> </tr> <tr> <td>row 1, cell 1</td> <td>row 1, cell 2</td> </tr> <tr> <td>row 2, cell 1</td> <td>row 2, cell 2</td> </tr> </table> </div> <div id="listContainer" style="display: inline-block; border: 1px solid gray; margin-left: 10px; width: 100px"> <p>My grocery list</p> <ul id="groceryList"> <li>Coffee</li> <li>Milk</li> <li>Bread</li> </ul> </div> <p> For more uses of the <a>TreeLayout</a> see the <a href="DOMTree.html">DOM Tree</a> and <a href="visualTree.html">Visual Tree</a> samples. </p> </div> </div> </div> <!-- * * * * * * * * * * * * * --> <!-- End of GoJS sample code --> </div> </body> <!-- This script is part of the gojs.net website, and is not needed to run the sample --> <script src="../assets/js/goSamples.js"></script> </html>