JSFiddle - React, Tailwind, and code Playground

by AlexLvovsky

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/gojs/1.7.5/go.js"></script>
<body>
  <div id="myDiagramDiv"></div>
  <table id="content-table">
    <tr>
      <th>Key</th>
      <th>Parent</th>
    </tr>
    <tr>
      <td class="level-0">1</td>
      <td>-</td>
    </tr>
    <tr>
      <td class="level-1">2</td>
      <td>1</td>
    </tr>
    <tr>
      <td class="level-1">3</td>
      <td>1</td>
    </tr>
    <tr>
      <td class="level-0">4</td>
      <td>-</td>
    </tr>
    <tr>
      <td class="level-1">5</td>
      <td>4</td>
    </tr>
    <tr>
      <td class="level-1">6</td>
      <td>4</td>
    </tr>
    <tr>
      <td class="level-1">7</td>
      <td>4</td>
    </tr>
    <tr>
      <td class="level-0">8</td>
      <td>-</td>
    </tr>
    <tr>
      <td class="level-1">9</td>
      <td>8</td>
    </tr>
    <tr>
      <td class="level-2">10</td>
      <td>9</td>
    </tr>
    <tr>
      <td class="level-2">11</td>
      <td>9</td>
    </tr>
    <tr>
      <td class="level-2">12</td>
      <td>9</td>
    </tr>
    <tr>
      <td class="level-2">13</td>
      <td>9</td>
    </tr>
    <tr>
      <td class="level-2">14</td>
      <td>9</td>
    </tr>
  </table>
  <div class="zoom-container">
    <span>Zoom:</span>
    <!--<button id="decrease" type="button" (click)="decreaseDiagram()">-</button>-->
    <button type="button" id="decrease">-</button>
    <span id="scale"></span>
    <button type="button" id="increase">+</button>

    <button type="button" id="switch">Switch model</button>

  </div>
  <div id="myOverviewDiv"></div>
</body>

SCSS

body {
  background-color: #3c3c3c;
  
  table, th, td {
    border: 1px solid black;
    color: white;
  }
  
  td {
    cursor: pointer;
  }
  
  td:last-child {
    text-align: right;
  }

  .level-0 {
    padding-left: 5px;
  }

  .level-1 {
    padding-left: 15px;
  }

  .level-2 {
    padding-left: 25px;
  }
  
  .zoom-container{
    span{
      color: white;
    }
  }
  
  #content-table {
    width:100px;
    height:350px; 
    display: inline-block;
  }
  
  #myDiagramDiv {
    border: solid 1px black; 
    width:450px; 
    height:350px; 
    display: inline-block
  }
  
  #myOverviewDiv {
    border: 1px solid #aeaeb5 !important;
    width:250px; 
    height:100px
  }
}

JavaScript

var myDiagram;
var $ = go.GraphObject.make;
var scale = [0.25, 0.5, 0.75, 1, 1.25, 1.5, 1.75, 2, 2.5, 3, 4, 5];
var currentScale = 1;
var currentModel = 1;
var currentSelected = 1;
var key1Nodes = [
{
  "key": 1,
  "parent": 0,
  "id": "1",
  "name": "Key1"
}, {
  "key": 2,
  "parent": 1,
  "id": "2",
  "name": "Key2"
}, {
  "key": 3,
  "parent": 1,
  "id": "3",
  "name": "Key3"
}];
var key4Nodes = [
{
  "key": 4,
  "parent": 0,
  "id": "4",
  "name": "Key4"
}, {
  "key": 5,
  "parent": 4,
  "id": "5",
  "name": "Key5"
}, {
  "key": 6,
  "parent": 4,
  "id": "6",
  "name": "Key6"
}, {
  "key": 7,
  "parent": 4,
  "id": "7",
  "name": "Key7"
}];
var key8Nodes = [
{
  "key": 8,
  "parent": 0,
  "id": "8",
  "name": "Key8"
}, {
  "key": 9,
  "parent": 8,
  "id": "9",
  "name": "Key9"
}, {
  "key": 10,
  "parent": 9,
  "id": "10",
  "name": "Key10"
}, {
  "key": 11,
  "parent": 9,
  "id": "11",
  "name": "Key11"
}, {
  "key": 12,
  "parent": 9,
  "id": "12",
  "name": "Key12"
}, {
  "key": 13,
  "parent": 9,
  "id": "13",
  "name": "Key13"
}, {
  "key": 14,
  "parent": 9,
  "id": "14",
  "name": "Key14"
}];
document.getElementById("scale").innerHTML = '100%';

init();

document.getElementById("decrease").onclick = function() {
  var currentIndexScale = scale.indexOf(currentScale);
  if (currentIndexScale === 0) {
    return;
  }
  currentScale = scale[currentIndexScale - 1];
  myDiagram.scale = currentScale;
  document.getElementById("scale").innerHTML = `${currentScale*100}%`;
}
document.getElementById("increase").onclick = function() {
  var currentIndexScale = scale.indexOf(currentScale);
  if (currentIndexScale === scale.length - 1) {
    return;
  }
  currentScale = scale[currentIndexScale + 1];
  myDiagram.scale = currentScale;
  document.getElementById("scale").innerHTML = `${currentScale*100}%`;
}
var table = document.getElementById("content-table");
var rows = table.getElementsByTagName("tr");
for (i = 0; i < rows.length; i++) {
  var currentRow =...