projet crepp_git/crepp-projects/station-meteo/hardware/recepteur/v0 · branche main
ibom.html Voir sur GitLab
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Interactive BOM for KiCAD</title>
  <style type="text/css">
:root {
  --pcb-edge-color: black;
  --pad-color: #878787;
  --pad-hole-color: #CCCCCC;
  --pad-color-highlight: #D04040;
  --pad-color-highlight-both: #D0D040;
  --pad-color-highlight-marked: #44a344;
  --pin1-outline-color: #ffb629;
  --pin1-outline-color-highlight: #ffb629;
  --pin1-outline-color-highlight-both: #fcbb39;
  --pin1-outline-color-highlight-marked: #fdbe41;
  --silkscreen-edge-color: #aa4;
  --silkscreen-polygon-color: #4aa;
  --silkscreen-text-color: #4aa;
  --fabrication-edge-color: #907651;
  --fabrication-polygon-color: #907651;
  --fabrication-text-color: #a27c24;
  --track-color: #def5f1;
  --track-color-highlight: #D04040;
  --zone-color: #def5f1;
  --zone-color-highlight: #d0404080;
}

html,
body {
  margin: 0px;
  height: 100%;
  font-family: Verdana, sans-serif;
}

.dark.topmostdiv {
  --pcb-edge-color: #eee;
  --pad-color: #808080;
  --pin1-outline-color: #ffa800;
  --pin1-outline-color-highlight: #ccff00;
  --track-color: #42524f;
  --zone-color: #42524f;
  background-color: #252c30;
  color: #eee;
}

button {
  background-color: #eee;
  border: 1px solid #888;
  color: black;
  height: 44px;
  width: 44px;
  text-align: center;
  text-decoration: none;
  display: inline-block;
  font-size: 14px;
  font-weight: bolder;
}

.dark button {
  /* This will be inverted */
  background-color: #c3b7b5;
}

button.depressed {
  background-color: #0a0;
  color: white;
}

.dark button.depressed {
  /* This will be inverted */
  background-color: #b3b;
}

button:focus {
  outline: 0;
}

button#tb-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.32 290.12h5.82M1.32 291.45h5.82' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 292.5v4.23M.26 292.63H8.2' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='1.35' y='295.73'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
}

button#lr-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.06 290.12H3.7m-2.64 1.33H3.7m-2.64 1.32H3.7m-2.64 1.3H3.7m-2.64 1.33H3.7' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 288.8v7.94m0-4.11h3.96' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='5.11' y='291.96'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
}

button#bom-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)' fill='none' stroke='%23000' stroke-width='.4'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' stroke-linejoin='round'/%3E%3Cpath d='M1.59 290.12h5.29M1.59 291.45h5.33M1.59 292.75h5.33M1.59 294.09h5.33M1.59 295.41h5.33'/%3E%3C/g%3E%3C/svg%3E");
}

button#bom-grouped-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m4 0h5m4 0h3M6.1 22h3m3.9 0h5m4 0h4m-16-8h4m4 0h4'/%3E%3Cpath stroke-linecap='null' d='M5 17.5h22M5 26.6h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
}

button#bom-ungrouped-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m-4 8h3m-3 8h4'/%3E%3Cpath stroke-linecap='null' d='M5 13.5h22m-22 8h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
}

button#bom-netlist-btn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' stroke='%23000' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-width='2' d='M6 26l6-6v-8m13.8-6.3l-6 6v8'/%3E%3Ccircle cx='11.8' cy='9.5' r='2.8' stroke-width='2'/%3E%3Ccircle cx='19.8' cy='22.8' r='2.8' stroke-width='2'/%3E%3C/g%3E%3C/svg%3E");
}

button#copy {
  background-image: url("data:image/svg+xml,%3Csvg height='48' viewBox='0 0 48 48' width='48' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h48v48h-48z' fill='none'/%3E%3Cpath d='M32 2h-24c-2.21 0-4 1.79-4 4v28h4v-28h24v-4zm6 8h-22c-2.21 0-4 1.79-4 4v28c0 2.21 1.79 4 4 4h22c2.21 0 4-1.79 4-4v-28c0-2.21-1.79-4-4-4zm0 32h-22v-28h22v28z'/%3E%3C/svg%3E");
  background-position: 6px 6px;
  background-repeat: no-repeat;
  background-size: 26px 26px;
  border-radius: 6px;
  height: 40px;
  width: 40px;
  margin: 10px 5px;
}

button#copy:active {
  box-shadow: inset 0px 0px 5px #6c6c6c;
}

textarea.clipboard-temp {
  position: fixed;
  top: 0;
  left: 0;
  width: 2em;
  height: 2em;
  padding: 0;
  border: None;
  outline: None;
  box-shadow: None;
  background: transparent;
}

.left-most-button {
  border-right: 0;
  border-top-left-radius: 6px;
  border-bottom-left-radius: 6px;
}

.middle-button {
  border-right: 0;
}

.right-most-button {
  border-top-right-radius: 6px;
  border-bottom-right-radius: 6px;
}

.button-container {
  font-size: 0;
  margin: 0.4rem 0.4rem 0.4rem 0;
}

.dark .button-container {
  filter: invert(1);
}

.button-container button {
  background-size: 32px 32px;
  background-position: 5px 5px;
  background-repeat: no-repeat;
}

@media print {
  .hideonprint {
    display: none;
  }
}

canvas {
  cursor: crosshair;
}

canvas:active {
  cursor: grabbing;
}

.fileinfo {
  width: 100%;
  max-width: 1000px;
  border: none;
  padding: 3px;
}

.fileinfo .title {
  font-size: 20pt;
  font-weight: bold;
}

.fileinfo td {
  overflow: hidden;
  white-space: nowrap;
  max-width: 1px;
  width: 50%;
  text-overflow: ellipsis;
}

.bom {
  border-collapse: collapse;
  font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
  font-size: 10pt;
  table-layout: fixed;
  width: 100%;
  margin-top: 1px;
  position: relative;
}

.bom th,
.bom td {
  border: 1px solid black;
  padding: 5px;
  word-wrap: break-word;
  text-align: center;
  position: relative;
}

.dark .bom th,
.dark .bom td {
  border: 1px solid #777;
}

.bom th {
  background-color: #CCCCCC;
  background-clip: padding-box;
}

.dark .bom th {
  background-color: #3b4749;
}

.bom tr.highlighted:nth-child(n) {
  background-color: #cfc;
}

.dark .bom tr.highlighted:nth-child(n) {
  background-color: #226022;
}

.bom tr:nth-child(even) {
  background-color: #f2f2f2;
}

.dark .bom tr:nth-child(even) {
  background-color: #313b40;
}

.bom tr.checked {
  color: #1cb53d;
}

.dark .bom tr.checked {
  color: #2cce54;
}

.bom tr {
  transition: background-color 0.2s;
}

.bom .numCol {
  width: 30px;
}

.bom .value {
  width: 15%;
}

.bom .quantity {
  width: 65px;
}

.bom th .sortmark {
  position: absolute;
  right: 1px;
  top: 1px;
  margin-top: -5px;
  border-width: 5px;
  border-style: solid;
  border-color: transparent transparent #221 transparent;
  transform-origin: 50% 85%;
  transition: opacity 0.2s, transform 0.4s;
}

.dark .bom th .sortmark {
  filter: invert(1);
}

.bom th .sortmark.none {
  opacity: 0;
}

.bom th .sortmark.desc {
  transform: rotate(180deg);
}

.bom th:hover .sortmark.none {
  opacity: 0.5;
}

.bom .bom-checkbox {
  width: 30px;
  position: relative;
  user-select: none;
  -moz-user-select: none;
}

.bom .bom-checkbox:before {
  content: "";
  position: absolute;
  border-width: 15px;
  border-style: solid;
  border-color: #51829f transparent transparent transparent;
  visibility: hidden;
  top: -15px;
}

.bom .bom-checkbox:after {
  content: "Double click to set/unset all";
  position: absolute;
  color: white;
  top: -35px;
  left: -26px;
  background: #51829f;
  padding: 5px 15px;
  border-radius: 8px;
  white-space: nowrap;
  visibility: hidden;
}

.bom .bom-checkbox:hover:before,
.bom .bom-checkbox:hover:after {
  visibility: visible;
  transition: visibility 0.2s linear 1s;
}

.split {
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  overflow-y: auto;
  overflow-x: hidden;
  background-color: inherit;
}

.split.split-horizontal,
.gutter.gutter-horizontal {
  height: 100%;
  float: left;
}

.gutter {
  background-color: #ddd;
  background-repeat: no-repeat;
  background-position: 50%;
  transition: background-color 0.3s;
}

.dark .gutter {
  background-color: #777;
}

.gutter.gutter-horizontal {
  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==');
  cursor: ew-resize;
  width: 5px;
}

.gutter.gutter-vertical {
  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAFAQMAAABo7865AAAABlBMVEVHcEzMzMzyAv2sAAAAAXRSTlMAQObYZgAAABBJREFUeF5jOAMEEAIEEFwAn3kMwcB6I2AAAAAASUVORK5CYII=');
  cursor: ns-resize;
  height: 5px;
}

.searchbox {
  float: left;
  height: 40px;
  margin: 10px 5px;
  padding: 12px 32px;
  font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
  font-size: 18px;
  box-sizing: border-box;
  border: 1px solid #888;
  border-radius: 6px;
  outline: none;
  background-color: #eee;
  transition: background-color 0.2s, border 0.2s;
  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABNklEQVQ4T8XSMUvDQBQH8P/LElFa/AIZHcTBQSz0I/gFstTBRR2KUC4ldDxw7h0Bl3RRUATxi4iiODgoiLNrbQYp5J6cpJJqomkX33Z37/14d/dIa33MzDuYI4johOI4XhyNRteO46zNYjDzAxE1yBZprVeZ+QbAUhXEGJMA2Ox2u4+fQIa0mPmsCgCgJYQ4t7lfgF0opQYAdv9ABkKI/UnOFCClXKjX61cA1osQY8x9kiRNKeV7IWA3oyhaSdP0FkAtjxhj3hzH2RBCPOf3pzqYHCilfAAX+URm9oMguPzeWSGQvUcMYC8rOBJCHBRdqxTo9/vbRHRqi8bj8XKv1xvODbiuW2u32/bvf0SlDv4XYOY7z/Mavu+nM1+BmQ+NMc0wDF/LprP0DbTWW0T00ul0nn4b7Q87+X4Qmfiq2wAAAABJRU5ErkJggg==');
  background-position: 10px 10px;
  background-repeat: no-repeat;
}

.dark .searchbox {
  background-color: #111;
  color: #eee;
}

.searchbox::placeholder {
  color: #ccc;
}

.dark .searchbox::placeholder {
  color: #666;
}

.filter {
  width: calc(60% - 64px);
}

.reflookup {
  width: calc(40% - 10px);
}

input[type=text]:focus {
  background-color: white;
  border: 1px solid #333;
}

.dark input[type=text]:focus {
  background-color: #333;
  border: 1px solid #ccc;
}

mark.highlight {
  background-color: #5050ff;
  color: #fff;
  padding: 2px;
  border-radius: 6px;
}

.dark mark.highlight {
  background-color: #76a6da;
  color: #111;
}

.menubtn {
  background-color: white;
  border: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36' viewBox='0 0 20 20'%3E%3Cpath fill='none' d='M0 0h20v20H0V0z'/%3E%3Cpath d='M15.95 10.78c.03-.25.05-.51.05-.78s-.02-.53-.06-.78l1.69-1.32c.15-.12.19-.34.1-.51l-1.6-2.77c-.1-.18-.31-.24-.49-.18l-1.99.8c-.42-.32-.86-.58-1.35-.78L12 2.34c-.03-.2-.2-.34-.4-.34H8.4c-.2 0-.36.14-.39.34l-.3 2.12c-.49.2-.94.47-1.35.78l-1.99-.8c-.18-.07-.39 0-.49.18l-1.6 2.77c-.1.18-.06.39.1.51l1.69 1.32c-.04.25-.07.52-.07.78s.02.53.06.78L2.37 12.1c-.15.12-.19.34-.1.51l1.6 2.77c.1.18.31.24.49.18l1.99-.8c.42.32.86.58 1.35.78l.3 2.12c.04.2.2.34.4.34h3.2c.2 0 .37-.14.39-.34l.3-2.12c.49-.2.94-.47 1.35-.78l1.99.8c.18.07.39 0 .49-.18l1.6-2.77c.1-.18.06-.39-.1-.51l-1.67-1.32zM10 13c-1.65 0-3-1.35-3-3s1.35-3 3-3 3 1.35 3 3-1.35 3-3 3z'/%3E%3C/svg%3E%0A");
  background-position: center;
  background-repeat: no-repeat;
}

.statsbtn {
  background-color: white;
  border: none;
  background-image: url("data:image/svg+xml,%3Csvg width='36' height='36' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 6h28v24H4V6zm0 8h28v8H4m9-16v24h10V5.8' fill='none' stroke='%23000' stroke-width='2'/%3E%3C/svg%3E");
  background-position: center;
  background-repeat: no-repeat;
}

.iobtn {
  background-color: white;
  border: none;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36'%3E%3Cpath fill='none' stroke='%23000' stroke-width='2' d='M3 33v-7l6.8-7h16.5l6.7 7v7H3zM3.2 26H33M21 9l5-5.9 5 6h-2.5V15h-5V9H21zm-4.9 0l-5 6-5-6h2.5V3h5v6h2.5z'/%3E%3Cpath fill='none' stroke='%23000' d='M6.1 29.5H10'/%3E%3C/svg%3E");
  background-position: center;
  background-repeat: no-repeat;
}

.visbtn {
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath fill='none' stroke='%23333' d='M2.5 4.5h5v15h-5zM9.5 4.5h5v15h-5zM16.5 4.5h5v15h-5z'/%3E%3C/svg%3E");
  background-position: center;
  background-repeat: no-repeat;
  padding: 15px;
}

#vismenu-content {
  left: 0px;
  font-family: Verdana, sans-serif;
}

.dark .statsbtn,
.dark .savebtn,
.dark .menubtn,
.dark .iobtn,
.dark .visbtn {
  filter: invert(1);
}

.flexbox {
  display: flex;
  align-items: center;
  justify-content: space-between;
  width: 100%;
}

.savebtn {
  background-color: #d6d6d6;
  width: auto;
  height: 30px;
  flex-grow: 1;
  margin: 5px;
  border-radius: 4px;
}

.savebtn:active {
  background-color: #0a0;
  color: white;
}

.dark .savebtn:active {
  /* This will be inverted */
  background-color: #b3b;
}

.stats {
  border-collapse: collapse;
  font-size: 12pt;
  table-layout: fixed;
  width: 100%;
  min-width: 450px;
}

.dark .stats td {
  border: 1px solid #bbb;
}

.stats td {
  border: 1px solid black;
  padding: 5px;
  word-wrap: break-word;
  text-align: center;
  position: relative;
}

#checkbox-stats div {
  position: absolute;
  left: 0;
  top: 0;
  height: 100%;
  width: 100%;
  display: flex;
  align-items: center;
  justify-content: center;
}

#checkbox-stats .bar {
  background-color: rgba(28, 251, 0, 0.6);
}

.menu {
  position: relative;
  display: inline-block;
  margin: 0.4rem 0.4rem 0.4rem 0;
}

.menu-content {
  font-size: 12pt !important;
  text-align: left !important;
  font-weight: normal !important;
  display: none;
  position: absolute;
  background-color: white;
  right: 0;
  min-width: 300px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 100;
  padding: 8px;
}

.dark .menu-content {
  background-color: #111;
}

.menu:hover .menu-content {
  display: block;
}

.menu:hover .menubtn,
.menu:hover .iobtn,
.menu:hover .statsbtn {
  background-color: #eee;
}

.menu-label {
  display: inline-block;
  padding: 8px;
  border: 1px solid #ccc;
  border-top: 0;
  width: calc(100% - 18px);
}

.menu-label-top {
  border-top: 1px solid #ccc;
}

.menu-textbox {
  float: left;
  height: 24px;
  margin: 10px 5px;
  padding: 5px 5px;
  font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
  font-size: 14px;
  box-sizing: border-box;
  border: 1px solid #888;
  border-radius: 4px;
  outline: none;
  background-color: #eee;
  transition: background-color 0.2s, border 0.2s;
  width: calc(100% - 10px);
}

.menu-textbox.invalid,
.dark .menu-textbox.invalid {
  color: red;
}

.dark .menu-textbox {
  background-color: #222;
  color: #eee;
}

.radio-container {
  margin: 4px;
}

.topmostdiv {
  display: flex;
  flex-direction: column;
  width: 100%;
  background-color: white;
  transition: background-color 0.3s;
  min-height: 100%;
}

#top {
  display: flex;
  flex-wrap: wrap;
  justify-content: flex-end;
  align-items: center;
}

#topdivider {
  border-bottom: 2px solid black;
  display: flex;
  justify-content: center;
  align-items: center;
}

.dark #topdivider {
  border-bottom: 2px solid #ccc;
}

#topdivider>div {
  position: relative;
}

#toptoggle {
  cursor: pointer;
  user-select: none;
  position: absolute;
  padding: 0.1rem 0.3rem;
  top: -0.4rem;
  left: -1rem;
  font-size: 1.4rem;
  line-height: 60%;
  border: 1px solid black;
  border-radius: 1rem;
  background-color: #fff;
  z-index: 100;
}

.flipped {
  transform: rotate(0.5turn);
}

.dark #toptoggle {
  border: 1px solid #fff;
  background-color: #222;
}

#fileinfodiv {
  flex: 20rem 1 0;
  overflow: auto;
}

#bomcontrols {
  display: flex;
  flex-direction: row-reverse;
}

#bomcontrols>* {
  flex-shrink: 0;
}

#dbg {
  display: block;
}

::-webkit-scrollbar {
  width: 8px;
}

::-webkit-scrollbar-track {
  background: #aaa;
}

::-webkit-scrollbar-thumb {
  background: #666;
  border-radius: 3px;
}

::-webkit-scrollbar-thumb:hover {
  background: #555;
}

.slider {
  -webkit-appearance: none;
  width: 100%;
  margin: 3px 0;
  padding: 0;
  outline: none;
  opacity: 0.7;
  -webkit-transition: .2s;
  transition: opacity .2s;
  border-radius: 3px;
}

.slider:hover {
  opacity: 1;
}

.slider:focus {
  outline: none;
}

.slider::-webkit-slider-runnable-track {
  -webkit-appearance: none;
  width: 100%;
  height: 8px;
  background: #d3d3d3;
  border-radius: 3px;
  border: none;
}

.slider::-webkit-slider-thumb {
  -webkit-appearance: none;
  width: 15px;
  height: 15px;
  border-radius: 50%;
  background: #0a0;
  cursor: pointer;
  margin-top: -4px;
}

.dark .slider::-webkit-slider-thumb {
  background: #3d3;
}

.slider::-moz-range-thumb {
  width: 15px;
  height: 15px;
  border-radius: 50%;
  background: #0a0;
  cursor: pointer;
}

.slider::-moz-range-track {
  height: 8px;
  background: #d3d3d3;
  border-radius: 3px;
}

.dark .slider::-moz-range-thumb {
  background: #3d3;
}

.slider::-ms-track {
  width: 100%;
  height: 8px;
  border-width: 3px 0;
  background: transparent;
  border-color: transparent;
  color: transparent;
  transition: opacity .2s;
}

.slider::-ms-fill-lower {
  background: #d3d3d3;
  border: none;
  border-radius: 3px;
}

.slider::-ms-fill-upper {
  background: #d3d3d3;
  border: none;
  border-radius: 3px;
}

.slider::-ms-thumb {
  width: 15px;
  height: 15px;
  border-radius: 50%;
  background: #0a0;
  cursor: pointer;
  margin: 0;
}

.shameless-plug {
  font-size: 0.8em;
  text-align: center;
  display: block;
}

a {
  color: #0278a4;
}

.dark a {
  color: #00b9fd;
}

#frontcanvas,
#backcanvas {
  touch-action: none;
}

.placeholder {
  border: 1px dashed #9f9fda !important;
  background-color: #edf2f7 !important;
}

.dragging {
  z-index: 999;
}

.dark .dragging>table>tbody>tr {
  background-color: #252c30;
}

.dark .placeholder {
  filter: invert(1);
}

.column-spacer {
  top: 0;
  left: 0;
  width: calc(100% - 4px);
  position: absolute;
  cursor: pointer;
  user-select: none;
  height: 100%;
}

.column-width-handle {
  top: 0;
  right: 0;
  width: 4px;
  position: absolute;
  cursor: col-resize;
  user-select: none;
  height: 100%;
}

.column-width-handle:hover {
  background-color: #4f99bd;
}

.help-link {
  border: 1px solid #0278a4;
  padding-inline: 0.3rem;
  border-radius: 3px;
  cursor: pointer;
}

.dark .help-link {
  border: 1px solid #00b9fd;
}

.bom-color {
  width: 20%;
}

.color-column input {
  width: 1.6rem;
  height: 1rem;
  border: 1px solid black;
  cursor: pointer;
  padding: 0;
}

/* removes default styling from input color element */
::-webkit-color-swatch {
  border: none;
}

::-webkit-color-swatch-wrapper {
  padding: 0;
}

::-moz-color-swatch,
::-moz-focus-inner {
  border: none;
}

::-moz-focus-inner {
  padding: 0;
}

  </style>
  <script type="text/javascript" >
///////////////////////////////////////////////
/*
  Split.js - v1.3.5
  MIT License
  https://github.com/nathancahill/Split.js
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Split=t()}(this,function(){"use strict";var e=window,t=e.document,n="addEventListener",i="removeEventListener",r="getBoundingClientRect",s=function(){return!1},o=e.attachEvent&&!e[n],a=["","-webkit-","-moz-","-o-"].filter(function(e){var n=t.createElement("div");return n.style.cssText="width:"+e+"calc(9px)",!!n.style.length}).shift()+"calc",l=function(e){return"string"==typeof e||e instanceof String?t.querySelector(e):e};return function(u,c){function z(e,t,n){var i=A(y,t,n);Object.keys(i).forEach(function(t){return e.style[t]=i[t]})}function h(e,t){var n=B(y,t);Object.keys(n).forEach(function(t){return e.style[t]=n[t]})}function f(e){var t=E[this.a],n=E[this.b],i=t.size+n.size;t.size=e/this.size*i,n.size=i-e/this.size*i,z(t.element,t.size,this.aGutterSize),z(n.element,n.size,this.bGutterSize)}function m(e){var t;this.dragging&&((t="touches"in e?e.touches[0][b]-this.start:e[b]-this.start)<=E[this.a].minSize+M+this.aGutterSize?t=E[this.a].minSize+this.aGutterSize:t>=this.size-(E[this.b].minSize+M+this.bGutterSize)&&(t=this.size-(E[this.b].minSize+this.bGutterSize)),f.call(this,t),c.onDrag&&c.onDrag())}function g(){var e=E[this.a].element,t=E[this.b].element;this.size=e[r]()[y]+t[r]()[y]+this.aGutterSize+this.bGutterSize,this.start=e[r]()[G]}function d(){var t=this,n=E[t.a].element,r=E[t.b].element;t.dragging&&c.onDragEnd&&c.onDragEnd(),t.dragging=!1,e[i]("mouseup",t.stop),e[i]("touchend",t.stop),e[i]("touchcancel",t.stop),t.parent[i]("mousemove",t.move),t.parent[i]("touchmove",t.move),delete t.stop,delete t.move,n[i]("selectstart",s),n[i]("dragstart",s),r[i]("selectstart",s),r[i]("dragstart",s),n.style.userSelect="",n.style.webkitUserSelect="",n.style.MozUserSelect="",n.style.pointerEvents="",r.style.userSelect="",r.style.webkitUserSelect="",r.style.MozUserSelect="",r.style.pointerEvents="",t.gutter.style.cursor="",t.parent.style.cursor=""}function S(t){var i=this,r=E[i.a].element,o=E[i.b].element;!i.dragging&&c.onDragStart&&c.onDragStart(),t.preventDefault(),i.dragging=!0,i.move=m.bind(i),i.stop=d.bind(i),e[n]("mouseup",i.stop),e[n]("touchend",i.stop),e[n]("touchcancel",i.stop),i.parent[n]("mousemove",i.move),i.parent[n]("touchmove",i.move),r[n]("selectstart",s),r[n]("dragstart",s),o[n]("selectstart",s),o[n]("dragstart",s),r.style.userSelect="none",r.style.webkitUserSelect="none",r.style.MozUserSelect="none",r.style.pointerEvents="none",o.style.userSelect="none",o.style.webkitUserSelect="none",o.style.MozUserSelect="none",o.style.pointerEvents="none",i.gutter.style.cursor=j,i.parent.style.cursor=j,g.call(i)}function v(e){e.forEach(function(t,n){if(n>0){var i=F[n-1],r=E[i.a],s=E[i.b];r.size=e[n-1],s.size=t,z(r.element,r.size,i.aGutterSize),z(s.element,s.size,i.bGutterSize)}})}function p(){F.forEach(function(e){e.parent.removeChild(e.gutter),E[e.a].element.style[y]="",E[e.b].element.style[y]=""})}void 0===c&&(c={});var y,b,G,E,w=l(u[0]).parentNode,D=e.getComputedStyle(w).flexDirection,U=c.sizes||u.map(function(){return 100/u.length}),k=void 0!==c.minSize?c.minSize:100,x=Array.isArray(k)?k:u.map(function(){return k}),L=void 0!==c.gutterSize?c.gutterSize:10,M=void 0!==c.snapOffset?c.snapOffset:30,O=c.direction||"horizontal",j=c.cursor||("horizontal"===O?"ew-resize":"ns-resize"),C=c.gutter||function(e,n){var i=t.createElement("div");return i.className="gutter gutter-"+n,i},A=c.elementStyle||function(e,t,n){var i={};return"string"==typeof t||t instanceof String?i[e]=t:i[e]=o?t+"%":a+"("+t+"% - "+n+"px)",i},B=c.gutterStyle||function(e,t){return n={},n[e]=t+"px",n;var n};"horizontal"===O?(y="width","clientWidth",b="clientX",G="left","paddingLeft"):"vertical"===O&&(y="height","clientHeight",b="clientY",G="top","paddingTop");var F=[];return E=u.map(function(e,t){var i,s={element:l(e),size:U[t],minSize:x[t]};if(t>0&&(i={a:t-1,b:t,dragging:!1,isFirst:1===t,isLast:t===u.length-1,direction:O,parent:w},i.aGutterSize=L,i.bGutterSize=L,i.isFirst&&(i.aGutterSize=L/2),i.isLast&&(i.bGutterSize=L/2),"row-reverse"===D||"column-reverse"===D)){var a=i.a;i.a=i.b,i.b=a}if(!o&&t>0){var c=C(t,O);h(c,L),c[n]("mousedown",S.bind(i)),c[n]("touchstart",S.bind(i)),w.insertBefore(c,s.element),i.gutter=c}0===t||t===u.length-1?z(s.element,s.size,L/2):z(s.element,s.size,L);var f=s.element[r]()[y];return f<s.minSize&&(s.minSize=f),t>0&&F.push(i),s}),o?{setSizes:v,destroy:p}:{setSizes:v,getSizes:function(){return E.map(function(e){return e.size})},collapse:function(e){if(e===F.length){var t=F[e-1];g.call(t),o||f.call(t,t.size-t.bGutterSize)}else{var n=F[e];g.call(n),o||f.call(n,n.aGutterSize)}},destroy:p}}});

///////////////////////////////////////////////

///////////////////////////////////////////////
// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>
// This work is free. You can redistribute it and/or modify it
// under the terms of the WTFPL, Version 2
// For more information see LICENSE.txt or http://www.wtfpl.net/
//
// For more information, the home page:
// http://pieroxy.net/blog/pages/lz-string/testing.html
//
// LZ-based compression algorithm, version 1.4.4
var LZString=function(){var o=String.fromCharCode,i={};var n={decompressFromBase64:function(o){return null==o?"":""==o?null:n._decompress(o.length,32,function(n){return function(o,n){if(!i[o]){i[o]={};for(var t=0;t<o.length;t++)i[o][o.charAt(t)]=t}return i[o][n]}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o.charAt(n))})},_decompress:function(i,n,t){var r,e,a,s,p,u,l,f=[],c=4,d=4,h=3,v="",g=[],m={val:t(0),position:n,index:1};for(r=0;r<3;r+=1)f[r]=r;for(a=0,p=Math.pow(2,2),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 2:return""}for(f[3]=l,e=l,g.push(l);;){if(m.index>i)return"";for(a=0,p=Math.pow(2,h),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(l=a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 2:return g.join("")}if(0==c&&(c=Math.pow(2,h),h++),f[l])v=f[l];else{if(l!==d)return null;v=e+e.charAt(0)}g.push(v),f[d++]=e+v.charAt(0),e=v,0==--c&&(c=Math.pow(2,h),h++)}}};return n}();"function"==typeof define&&define.amd?define(function(){return LZString}):"undefined"!=typeof module&&null!=module?module.exports=LZString:"undefined"!=typeof angular&&null!=angular&&angular.module("LZString",[]).factory("LZString",function(){return LZString});
///////////////////////////////////////////////

///////////////////////////////////////////////
/*!
 * PEP v0.4.3 | https://github.com/jquery/PEP
 * Copyright jQuery Foundation and other contributors | http://jquery.org/license
 */
!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.PointerEventsPolyfill=b()}(this,function(){"use strict";function a(a,b){b=b||Object.create(null);var c=document.createEvent("Event");c.initEvent(a,b.bubbles||!1,b.cancelable||!1);
for(var d,e=2;e<m.length;e++)d=m[e],c[d]=b[d]||n[e];c.buttons=b.buttons||0;
var f=0;return f=b.pressure&&c.buttons?b.pressure:c.buttons?.5:0,c.x=c.clientX,c.y=c.clientY,c.pointerId=b.pointerId||0,c.width=b.width||0,c.height=b.height||0,c.pressure=f,c.tiltX=b.tiltX||0,c.tiltY=b.tiltY||0,c.twist=b.twist||0,c.tangentialPressure=b.tangentialPressure||0,c.pointerType=b.pointerType||"",c.hwTimestamp=b.hwTimestamp||0,c.isPrimary=b.isPrimary||!1,c}function b(){this.array=[],this.size=0}function c(a,b,c,d){this.addCallback=a.bind(d),this.removeCallback=b.bind(d),this.changedCallback=c.bind(d),A&&(this.observer=new A(this.mutationWatcher.bind(this)))}function d(a){return"body /shadow-deep/ "+e(a)}function e(a){return'[touch-action="'+a+'"]'}function f(a){return"{ -ms-touch-action: "+a+"; touch-action: "+a+"; }"}function g(){if(F){D.forEach(function(a){String(a)===a?(E+=e(a)+f(a)+"\n",G&&(E+=d(a)+f(a)+"\n")):(E+=a.selectors.map(e)+f(a.rule)+"\n",G&&(E+=a.selectors.map(d)+f(a.rule)+"\n"))});var a=document.createElement("style");a.textContent=E,document.head.appendChild(a)}}function h(){if(!window.PointerEvent){if(window.PointerEvent=a,window.navigator.msPointerEnabled){var b=window.navigator.msMaxTouchPoints;Object.defineProperty(window.navigator,"maxTouchPoints",{value:b,enumerable:!0}),u.registerSource("ms",_)}else Object.defineProperty(window.navigator,"maxTouchPoints",{value:0,enumerable:!0}),u.registerSource("mouse",N),void 0!==window.ontouchstart&&u.registerSource("touch",V);u.register(document)}}function i(a){if(!u.pointermap.has(a)){var b=new Error("InvalidPointerId");throw b.name="InvalidPointerId",b}}function j(a){for(var b=a.parentNode;b&&b!==a.ownerDocument;)b=b.parentNode;if(!b){var c=new Error("InvalidStateError");throw c.name="InvalidStateError",c}}function k(a){var b=u.pointermap.get(a);return 0!==b.buttons}function l(){window.Element&&!Element.prototype.setPointerCapture&&Object.defineProperties(Element.prototype,{setPointerCapture:{value:W},releasePointerCapture:{value:X},hasPointerCapture:{value:Y}})}
var m=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","pageX","pageY"],n=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0],o=window.Map&&window.Map.prototype.forEach,p=o?Map:b;b.prototype={set:function(a,b){return void 0===b?this["delete"](a):(this.has(a)||this.size++,void(this.array[a]=b))},has:function(a){return void 0!==this.array[a]},"delete":function(a){this.has(a)&&(delete this.array[a],this.size--)},get:function(a){return this.array[a]},clear:function(){this.array.length=0,this.size=0},forEach:function(a,b){return this.array.forEach(function(c,d){a.call(b,c,d,this)},this)}};var q=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","buttons","pointerId","width","height","pressure","tiltX","tiltY","pointerType","hwTimestamp","isPrimary","type","target","currentTarget","which","pageX","pageY","timeStamp"],r=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0,0,0,0,0,0,"",0,!1,"",null,null,0,0,0,0],s={pointerover:1,pointerout:1,pointerenter:1,pointerleave:1},t="undefined"!=typeof SVGElementInstance,u={pointermap:new p,eventMap:Object.create(null),captureInfo:Object.create(null),eventSources:Object.create(null),eventSourceList:[],registerSource:function(a,b){var c=b,d=c.events;d&&(d.forEach(function(a){c[a]&&(this.eventMap[a]=c[a].bind(c))},this),this.eventSources[a]=c,this.eventSourceList.push(c))},register:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
b.register.call(b,a)},unregister:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
b.unregister.call(b,a)},contains:function(a,b){try{return a.contains(b)}catch(c){return!1}},down:function(a){a.bubbles=!0,this.fireEvent("pointerdown",a)},move:function(a){a.bubbles=!0,this.fireEvent("pointermove",a)},up:function(a){a.bubbles=!0,this.fireEvent("pointerup",a)},enter:function(a){a.bubbles=!1,this.fireEvent("pointerenter",a)},leave:function(a){a.bubbles=!1,this.fireEvent("pointerleave",a)},over:function(a){a.bubbles=!0,this.fireEvent("pointerover",a)},out:function(a){a.bubbles=!0,this.fireEvent("pointerout",a)},cancel:function(a){a.bubbles=!0,this.fireEvent("pointercancel",a)},leaveOut:function(a){this.out(a),this.propagate(a,this.leave,!1)},enterOver:function(a){this.over(a),this.propagate(a,this.enter,!0)},eventHandler:function(a){if(!a._handledByPE){var b=a.type,c=this.eventMap&&this.eventMap[b];c&&c(a),a._handledByPE=!0}},listen:function(a,b){b.forEach(function(b){this.addEvent(a,b)},this)},unlisten:function(a,b){b.forEach(function(b){this.removeEvent(a,b)},this)},addEvent:function(a,b){a.addEventListener(b,this.boundHandler)},removeEvent:function(a,b){a.removeEventListener(b,this.boundHandler)},makeEvent:function(b,c){this.captureInfo[c.pointerId]&&(c.relatedTarget=null);var d=new a(b,c);return c.preventDefault&&(d.preventDefault=c.preventDefault),d._target=d._target||c.target,d},fireEvent:function(a,b){var c=this.makeEvent(a,b);return this.dispatchEvent(c)},cloneEvent:function(a){for(var b,c=Object.create(null),d=0;d<q.length;d++)b=q[d],c[b]=a[b]||r[d],!t||"target"!==b&&"relatedTarget"!==b||c[b]instanceof SVGElementInstance&&(c[b]=c[b].correspondingUseElement);return a.preventDefault&&(c.preventDefault=function(){a.preventDefault()}),c},getTarget:function(a){var b=this.captureInfo[a.pointerId];return b?a._target!==b&&a.type in s?void 0:b:a._target},propagate:function(a,b,c){for(var d=a.target,e=[];d!==document&&!d.contains(a.relatedTarget);) if(e.push(d),d=d.parentNode,!d)return;c&&e.reverse(),e.forEach(function(c){a.target=c,b.call(this,a)},this)},setCapture:function(b,c,d){this.captureInfo[b]&&this.releaseCapture(b,d),this.captureInfo[b]=c,this.implicitRelease=this.releaseCapture.bind(this,b,d),document.addEventListener("pointerup",this.implicitRelease),document.addEventListener("pointercancel",this.implicitRelease);var e=new a("gotpointercapture");e.pointerId=b,e._target=c,d||this.asyncDispatchEvent(e)},releaseCapture:function(b,c){var d=this.captureInfo[b];if(d){this.captureInfo[b]=void 0,document.removeEventListener("pointerup",this.implicitRelease),document.removeEventListener("pointercancel",this.implicitRelease);var e=new a("lostpointercapture");e.pointerId=b,e._target=d,c||this.asyncDispatchEvent(e)}},dispatchEvent:/*scope.external.dispatchEvent || */function(a){var b=this.getTarget(a);if(b)return b.dispatchEvent(a)},asyncDispatchEvent:function(a){requestAnimationFrame(this.dispatchEvent.bind(this,a))}};u.boundHandler=u.eventHandler.bind(u);var v={shadow:function(a){if(a)return a.shadowRoot||a.webkitShadowRoot},canTarget:function(a){return a&&Boolean(a.elementFromPoint)},targetingShadow:function(a){var b=this.shadow(a);if(this.canTarget(b))return b},olderShadow:function(a){var b=a.olderShadowRoot;if(!b){var c=a.querySelector("shadow");c&&(b=c.olderShadowRoot)}return b},allShadows:function(a){for(var b=[],c=this.shadow(a);c;)b.push(c),c=this.olderShadow(c);return b},searchRoot:function(a,b,c){if(a){var d,e,f=a.elementFromPoint(b,c);for(e=this.targetingShadow(f);e;){if(d=e.elementFromPoint(b,c)){var g=this.targetingShadow(d);return this.searchRoot(g,b,c)||d} e=this.olderShadow(e)} return f}},owner:function(a){
for(var b=a;b.parentNode;)b=b.parentNode;
return b.nodeType!==Node.DOCUMENT_NODE&&b.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&(b=document),b},findTarget:function(a){var b=a.clientX,c=a.clientY,d=this.owner(a.target);
return d.elementFromPoint(b,c)||(d=document),this.searchRoot(d,b,c)}},w=Array.prototype.forEach.call.bind(Array.prototype.forEach),x=Array.prototype.map.call.bind(Array.prototype.map),y=Array.prototype.slice.call.bind(Array.prototype.slice),z=Array.prototype.filter.call.bind(Array.prototype.filter),A=window.MutationObserver||window.WebKitMutationObserver,B="[touch-action]",C={subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["touch-action"]};c.prototype={watchSubtree:function(a){
//
this.observer&&v.canTarget(a)&&this.observer.observe(a,C)},enableOnSubtree:function(a){this.watchSubtree(a),a===document&&"complete"!==document.readyState?this.installOnLoad():this.installNewSubtree(a)},installNewSubtree:function(a){w(this.findElements(a),this.addElement,this)},findElements:function(a){return a.querySelectorAll?a.querySelectorAll(B):[]},removeElement:function(a){this.removeCallback(a)},addElement:function(a){this.addCallback(a)},elementChanged:function(a,b){this.changedCallback(a,b)},concatLists:function(a,b){return a.concat(y(b))},
installOnLoad:function(){document.addEventListener("readystatechange",function(){"complete"===document.readyState&&this.installNewSubtree(document)}.bind(this))},isElement:function(a){return a.nodeType===Node.ELEMENT_NODE},flattenMutationTree:function(a){
var b=x(a,this.findElements,this);
return b.push(z(a,this.isElement)),b.reduce(this.concatLists,[])},mutationWatcher:function(a){a.forEach(this.mutationHandler,this)},mutationHandler:function(a){if("childList"===a.type){var b=this.flattenMutationTree(a.addedNodes);b.forEach(this.addElement,this);var c=this.flattenMutationTree(a.removedNodes);c.forEach(this.removeElement,this)}else"attributes"===a.type&&this.elementChanged(a.target,a.oldValue)}};var D=["none","auto","pan-x","pan-y",{rule:"pan-x pan-y",selectors:["pan-x pan-y","pan-y pan-x"]}],E="",F=window.PointerEvent||window.MSPointerEvent,G=!window.ShadowDOMPolyfill&&document.head.createShadowRoot,H=u.pointermap,I=25,J=[1,4,2,8,16],K=!1;try{K=1===new MouseEvent("test",{buttons:1}).buttons}catch(L){}
var M,N={POINTER_ID:1,POINTER_TYPE:"mouse",events:["mousedown","mousemove","mouseup","mouseover","mouseout"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},lastTouches:[],
isEventSimulatedFromTouch:function(a){for(var b,c=this.lastTouches,d=a.clientX,e=a.clientY,f=0,g=c.length;f<g&&(b=c[f]);f++){
var h=Math.abs(d-b.x),i=Math.abs(e-b.y);if(h<=I&&i<=I)return!0}},prepareEvent:function(a){var b=u.cloneEvent(a),c=b.preventDefault;return b.preventDefault=function(){a.preventDefault(),c()},b.pointerId=this.POINTER_ID,b.isPrimary=!0,b.pointerType=this.POINTER_TYPE,b},prepareButtonsForMove:function(a,b){var c=H.get(this.POINTER_ID);
0!==b.which&&c?a.buttons=c.buttons:a.buttons=0,b.buttons=a.buttons},mousedown:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);K||(c.buttons=J[c.button],b&&(c.buttons|=b.buttons),a.buttons=c.buttons),H.set(this.POINTER_ID,a),b&&0!==b.buttons?u.move(c):u.down(c)}},mousemove:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.move(b)}},mouseup:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);if(!K){var d=J[c.button];
c.buttons=b?b.buttons&~d:0,a.buttons=c.buttons}H.set(this.POINTER_ID,a),
c.buttons&=~J[c.button],0===c.buttons?u.up(c):u.move(c)}},mouseover:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.enterOver(b)}},mouseout:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,u.leaveOut(b)}},cancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.deactivateMouse()},deactivateMouse:function(){H["delete"](this.POINTER_ID)}},O=u.captureInfo,P=v.findTarget.bind(v),Q=v.allShadows.bind(v),R=u.pointermap,S=2500,T=200,U="touch-action",V={events:["touchstart","touchmove","touchend","touchcancel"],register:function(a){M.enableOnSubtree(a)},unregister:function(){},elementAdded:function(a){var b=a.getAttribute(U),c=this.touchActionToScrollType(b);c&&(a._scrollType=c,u.listen(a,this.events),
Q(a).forEach(function(a){a._scrollType=c,u.listen(a,this.events)},this))},elementRemoved:function(a){a._scrollType=void 0,u.unlisten(a,this.events),
Q(a).forEach(function(a){a._scrollType=void 0,u.unlisten(a,this.events)},this)},elementChanged:function(a,b){var c=a.getAttribute(U),d=this.touchActionToScrollType(c),e=this.touchActionToScrollType(b);
d&&e?(a._scrollType=d,Q(a).forEach(function(a){a._scrollType=d},this)):e?this.elementRemoved(a):d&&this.elementAdded(a)},scrollTypes:{EMITTER:"none",XSCROLLER:"pan-x",YSCROLLER:"pan-y",SCROLLER:/^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/},touchActionToScrollType:function(a){var b=a,c=this.scrollTypes;return"none"===b?"none":b===c.XSCROLLER?"X":b===c.YSCROLLER?"Y":c.SCROLLER.exec(b)?"XY":void 0},POINTER_TYPE:"touch",firstTouch:null,isPrimaryTouch:function(a){return this.firstTouch===a.identifier},setPrimaryTouch:function(a){
(0===R.size||1===R.size&&R.has(1))&&(this.firstTouch=a.identifier,this.firstXY={X:a.clientX,Y:a.clientY},this.scrolling=!1,this.cancelResetClickCount())},removePrimaryPointer:function(a){a.isPrimary&&(this.firstTouch=null,this.firstXY=null,this.resetClickCount())},clickCount:0,resetId:null,resetClickCount:function(){var a=function(){this.clickCount=0,this.resetId=null}.bind(this);this.resetId=setTimeout(a,T)},cancelResetClickCount:function(){this.resetId&&clearTimeout(this.resetId)},typeToButtons:function(a){var b=0;return"touchstart"!==a&&"touchmove"!==a||(b=1),b},touchToPointer:function(a){var b=this.currentTouchEvent,c=u.cloneEvent(a),d=c.pointerId=a.identifier+2;c.target=O[d]||P(c),c.bubbles=!0,c.cancelable=!0,c.detail=this.clickCount,c.button=0,c.buttons=this.typeToButtons(b.type),c.width=2*(a.radiusX||a.webkitRadiusX||0),c.height=2*(a.radiusY||a.webkitRadiusY||0),c.pressure=a.force||a.webkitForce||.5,c.isPrimary=this.isPrimaryTouch(a),c.pointerType=this.POINTER_TYPE,
c.altKey=b.altKey,c.ctrlKey=b.ctrlKey,c.metaKey=b.metaKey,c.shiftKey=b.shiftKey;
var e=this;return c.preventDefault=function(){e.scrolling=!1,e.firstXY=null,b.preventDefault()},c},processTouches:function(a,b){var c=a.changedTouches;this.currentTouchEvent=a;for(var d,e=0;e<c.length;e++)d=c[e],b.call(this,this.touchToPointer(d))},
shouldScroll:function(a){if(this.firstXY){var b,c=a.currentTarget._scrollType;if("none"===c)
b=!1;else if("XY"===c)
b=!0;else{var d=a.changedTouches[0],e=c,f="Y"===c?"X":"Y",g=Math.abs(d["client"+e]-this.firstXY[e]),h=Math.abs(d["client"+f]-this.firstXY[f]);
b=g>=h}return this.firstXY=null,b}},findTouch:function(a,b){for(var c,d=0,e=a.length;d<e&&(c=a[d]);d++)if(c.identifier===b)return!0},
vacuumTouches:function(a){var b=a.touches;
if(R.size>=b.length){var c=[];R.forEach(function(a,d){
if(1!==d&&!this.findTouch(b,d-2)){var e=a.out;c.push(e)}},this),c.forEach(this.cancelOut,this)}},touchstart:function(a){this.vacuumTouches(a),this.setPrimaryTouch(a.changedTouches[0]),this.dedupSynthMouse(a),this.scrolling||(this.clickCount++,this.processTouches(a,this.overDown))},overDown:function(a){R.set(a.pointerId,{target:a.target,out:a,outTarget:a.target}),u.enterOver(a),u.down(a)},touchmove:function(a){this.scrolling||(this.shouldScroll(a)?(this.scrolling=!0,this.touchcancel(a)):(a.preventDefault(),this.processTouches(a,this.moveOverOut)))},moveOverOut:function(a){var b=a,c=R.get(b.pointerId);
if(c){var d=c.out,e=c.outTarget;u.move(b),d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,
d.target=e,b.target?(u.leaveOut(d),u.enterOver(b)):(
b.target=e,b.relatedTarget=null,this.cancelOut(b))),c.out=b,c.outTarget=b.target}},touchend:function(a){this.dedupSynthMouse(a),this.processTouches(a,this.upOut)},upOut:function(a){this.scrolling||(u.up(a),u.leaveOut(a)),this.cleanUpPointer(a)},touchcancel:function(a){this.processTouches(a,this.cancelOut)},cancelOut:function(a){u.cancel(a),u.leaveOut(a),this.cleanUpPointer(a)},cleanUpPointer:function(a){R["delete"](a.pointerId),this.removePrimaryPointer(a)},
dedupSynthMouse:function(a){var b=N.lastTouches,c=a.changedTouches[0];
if(this.isPrimaryTouch(c)){
var d={x:c.clientX,y:c.clientY};b.push(d);var e=function(a,b){var c=a.indexOf(b);c>-1&&a.splice(c,1)}.bind(null,b,d);setTimeout(e,S)}}};M=new c(V.elementAdded,V.elementRemoved,V.elementChanged,V);var W,X,Y,Z=u.pointermap,$=window.MSPointerEvent&&"number"==typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE,_={events:["MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSGotPointerCapture","MSLostPointerCapture"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},POINTER_TYPES:["","unavailable","touch","pen","mouse"],prepareEvent:function(a){var b=a;return $&&(b=u.cloneEvent(a),b.pointerType=this.POINTER_TYPES[a.pointerType]),b},cleanup:function(a){Z["delete"](a)},MSPointerDown:function(a){Z.set(a.pointerId,a);var b=this.prepareEvent(a);u.down(b)},MSPointerMove:function(a){var b=this.prepareEvent(a);u.move(b)},MSPointerUp:function(a){var b=this.prepareEvent(a);u.up(b),this.cleanup(a.pointerId)},MSPointerOut:function(a){var b=this.prepareEvent(a);u.leaveOut(b)},MSPointerOver:function(a){var b=this.prepareEvent(a);u.enterOver(b)},MSPointerCancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.cleanup(a.pointerId)},MSLostPointerCapture:function(a){var b=u.makeEvent("lostpointercapture",a);u.dispatchEvent(b)},MSGotPointerCapture:function(a){var b=u.makeEvent("gotpointercapture",a);u.dispatchEvent(b)}},aa=window.navigator;aa.msPointerEnabled?(W=function(a){i(a),j(this),k(a)&&(u.setCapture(a,this,!0),this.msSetPointerCapture(a))},X=function(a){i(a),u.releaseCapture(a,!0),this.msReleasePointerCapture(a)}):(W=function(a){i(a),j(this),k(a)&&u.setCapture(a,this)},X=function(a){i(a),u.releaseCapture(a)}),Y=function(a){return!!u.captureInfo[a]},g(),h(),l();var ba={dispatcher:u,Installer:c,PointerEvent:a,PointerMap:p,targetFinding:v};return ba});

///////////////////////////////////////////////

///////////////////////////////////////////////
var config = {"dark_mode": false, "show_pads": true, "show_fabrication": false, "show_silkscreen": true, "highlight_pin1": "none", "redraw_on_drag": true, "board_rotation": 0.0, "checkboxes": "Sourced,Placed", "bom_view": "left-right", "layer_view": "FB", "offset_back_rotation": false, "kicad_text_formatting": true, "mark_when_checked": "", "fields": ["Value", "Footprint"]}
///////////////////////////////////////////////

///////////////////////////////////////////////
var pcbdata = JSON.parse(LZString.decompressFromBase64("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KVDc6VkFqCtei14rXJDfi13Q26dYV1vRWeDbXIxJjTqNwNgpI1DbWl2QBCDZYNm/WSsCu1j/XODf91lWWnDZYUYw3E8Jy1swBhDf9AkmXoVasNrQ2gcH8NsrXAjf0N7g2DdecNu2QNqOEVoQ33DeiN8JWxDaK1+I3RUESNjg2yDaCNxw20jdCNoq6gyLMN/A3PDcsNog3rDbi10rWSjZ61rg3gjYqNo8iO6SRWR5wajcYN0Q3YjYaNwo2/DfYN6Q3kjfp18o3dtaMNoq7+qKyNyI2cjYsN7w3llaGN2ABijdGN0o2UjfaNyY3bSO2YnSjBDbmN1Q3cje6VxY2SlcaNjrXbDZxVr/WdlZCNzo3QZqVItw2DjYWNjQ22tc9VnQ2LjdkNq42OjdkUMI23SPoN+Y2mDYrVpY3XNe0N842DVcuN/1Xrje2Nu2QfjfuN8w3/jdO1k43ljdWNuw35dbkNww2vjcm+yCjejY8NmI3mDcBN1g2EjZGN5E2wTaq1tE3JnI7pZxpEDf41h424TcK1zQ2gTYJN143QTfeN8E3PjfR7Sb7DaL2N92XqTf6N3E2ETfpNoo3CTbeNxtXUTYhNsk3eZA5NrE3Djcc1443xDdON4E3mjbWN1o2yjfkN3g2sDb24sClOTZH3P42eTYBNvk38TYFNxk3EteJNgw3RTcUN3mRVaM1NhoBtTfUN/I26Tf1N4Y3DTd91+w2RTdZNkmhJvqBI343uTZtNgY2fDZeNkE2jTeZNkk3TTb4NsGSh0ktNqI3HjdtN542SDYCN9Y3xjZVN9I31uNYE8M3rTbqNmU2Cjf5Nh03/TadNlE2Pja2Ntk2/QIDcFM2vTbTNp42JDaaN73WiTcDNk03XTZoN00sizclNyM2fTbxN3w2VjcFNpk3hTbzN+NWQzfUE4tXZja5N2E2dTfhN2U3ETfbNgM3OzZZN/M2zTdIUPs3izcHN703eTZHNzM22zcdNmQ2JzaDN102ezfsjCI2BzdqNnE3dTaXN+02VzezNtc3N9a7NgOW6zfy444iYTb3NvI3mzb1N1s2kTaFNs83Jze7NtU22Nh6Nqk35zdLNqM3yzbONhU2qzfXNms2pzcvNj82dza1Nks39zeHNjM2jzafNjs2XzY3Nqc2ezcdWXthGzZpNuI3lzbgt8c2ELeAt+NXLzctmcC2rTcgtu83FzZgtx82xzZzN403UjZAtx5dEMlQtr83bzaONss25TYZNk82xjYcNhM3Kjea0eSibzb6Nhc2DzbItv02ALefNto2Jjbwt2i3+hJ4t/s2ILe/NqC3aTejNmw3hLfgt0S3OLamN3pja0jQtoc35Lb/N+U3KzZEt5U3STenN/yiNLYYtvi2fzfvNw83yLdXN9i2XTaQttU21MHotvJWIzfQtwY3MLYot082VLae1v/WADY11pDXtddypKbXxLbNoG9Q3hEb15IBHZaW1gAcVtekt0wA1tZXV+pjNtefV2HWe9YvNzyxyjNCt5HXGLZ4iX82WLYNNti24zY4tyTXoNd/1obWy9ZG13y3FNfsAelWvtcCtk9WRSF6Y/JjcNcvVjTFHZbSbX43GTGwAWVoc1Zh18VXDddWyDoTjuMtN0aBKdZO17S3crazNpS3sLZUtoq3AtZH4fq2QmI24mK3hrdX10a2MLdgt9y2bLfPNt9XyVXKYmwSlrdblla2f1YEtu02rLfytpU2NjbEtuq2FSX8owa3J5eWt0aBVrdct9a3rLYKt1E2VddKtsPXXtYqtsbWqrcPVsA249cGI89mNaDCt0wAXZYKMKK24yDcN8G2G8jIVrvXkranNraAglb5awi2j9E6Vq6kR9YstlLBx9eeNqfWLiA9VmM2kjdetiZWZrcqlAOXEbZMCSulnddRtlaX0bcPlp43sbZx13G2KJuets63btYut1x93rdL1z631daelyq2pUAAANSr177X9da2NrdcHjGko9sKQbf/7Er1L0gAHLACS1cD1DFXosg5Abq2kreL1wbWubf/1r63ebZ+tqVBDZeql/63PjcnWSHjrpUcVvDXwrbgN2dWQ20It70UXzNQN/o30DZSt9Mao8jEMucTp3M0t/i3oLZOtoS29LeUt5U2SbbRNtUUQhAvS0+QPbfMt0i3vbYJtlo22bfjNtE2Xbb1U/VdCLectrS21rdOtya3KLerN6i23BqDthO2d+N4t7E2SLeOthS2KzdIN863Y7YhN+O3xeL2tuc2srZyweo3fTajtxU2Y7Y4twO288ATtjk4k7dTNuS3U7Z9t0u3m7dstuxXeWj1U4YRV5DDt7u2nrbTt322prYMtiE2c7bZ4ry8YreTtz22xrdHNl62y7Zbtiu2h7YZ4jQSx7cLtr23i7f/Nqe2M7aAtrO3Zurnt/UMdBN3tpi2crdXt1m29DfLtz43K7aLJ5QSr7elN5i3b7fTtjy2Z7aNttu2DSO3cxe2u7b3tle23LbXt/u2trc0Ec+3TrRft0y2C7evtzG3I7cUto+2v7fZtuO2t7ekokpTX7brt9M2EHZLt2M317YHts+3f7fQdr7BMHfSwbB2D7d0tvu377Y3tx+20HYNkV2WYHalNrB337ZAdu+3nTfAdxvjg7fodgBXGHabNiO2KHdYtz+3NrdfNzJW6HYy8Ue3eHZcthu3EHaod9h2RHfTGyB3xHc7t4i24Hf4dnS3BHaQd4R3ELcHt5EZznBjE/O2mHbIdlh2WbaEdom35HYgdoh31TekUUh31peMdye3ZHdzN8x38PDEdmg3PTdktoB2e7cbtwC2cLdPt5226He+mHh2nLcAd1R2i7fUdvK3THfwdjh3p+K4dkkpQ7ckdlO2J7d7tvB2wHacd0TxfPXrNkh34neXtzx2ZHeSd6h2CHYUdyx2gCUydoJ2VHbftm+3WHYidlJ3tHdEd3R3SFBNEmx2vDbsdpJ3Cbcid1J3X+K4d78hAneyNsp3mHYqdkx3NHbMdmp2/Hbqdq82JHdKd9x2Qnf3tsJ2JrcGdtp3hnYsdmrA9VIkjcZ2encmd8p34HYEd8J25neqd3C3anfSdlCj5ZAMdvh3QnfGt482qnfydqJ2OneWd+Hi3Hdrtox3+nfsdvJ25HYWd5x3RnaEyOJ2Jnfud2x3HnZad6O3LnfadmPiKIzBk/UTjnakdls2/nabtgF3XneidvVSPneUd9Z2+nc2dmZ3znZ2d6F29nZGdg52HjtWd/Y3EXYed5F2znawt4+2fHc2N7O3LHexdhF3vnaad352vHf0tlB3N7dGdjlZKXbMt8e3pHdwd1p3dnd8dxZ3gXeMt6x2snfDt052P7bRdl52MXc0EJ+2T0s+dtZ2qXfrtiF3aXb9tlB3ObYpV7m3y9cANyPWo1Zqtn7XWTfW8Oc6pbfN1iG2MrZituK3VbaL1yzW8qCYmzbxMrZZdhK34HcoVw+2HHaotvzXA9bS1xV3t1dLlivXkNaFt2q3a9ZiAbDWhAClt0OyCNcldr5Wd6B+V23WLNft1vCQMKV9dhjX+NYhV9nKNtZtd/9WEVaJ12k2UVef17I243ewYe13M7cV1teWA7Zdd4bW3XdVdhlXPXc1d/M3+kApk3gqYDe5VlzELdbattw2Ora6tsN2erdNdgmTJfN98bp3rLyGYB62jremdwl2NraGdig2A7dFNp5h2PDO8Km2DrZ7d1jWaXdydjl30Xa5dkfgdreQplG3J3Yjl6d2CXaFd7N2T7dJdq63pSWtLCd3u3bXdzw3mnbld6e2FXZKtzW2fLZ1trXX7AEqlv63hbZr1oLWhlLoIRawzbecV05iDNbuoozXPFdM1h23w3YwNy2W1axECOeFndca1hzWkXbUd/t3QHfndx13INeZ1z42EBkTIZAhrzZitsD3z9Yg9wV3KneFdxx2qteHd1k2gPYn/OaWOlYBl8F2Hzchd7x3PLYhNxD3CPfq13LXOlfQ9/F3IPc3d552cPYMNgt2yraLd762b3b1tybWy3bJd3DFPIq7Cat2m9beVzPWwzcAV4Fb4DWbdtW3W3Zj4rDF+1EhCJBXlcDNgR62dpYZtyfXj3Px1+0259aRVuhXF9fTdrt2RUBmgd/W53ZFdleXt9coN2uWIHfIxdLy/UDRCJT225fit9fDbTf514UVtPbv17jXH9f09rOWmFZmgSnW1cC3dkl2CVdUtlUhQqkvROz3QPaY1uwhVPZlwVz2QuXc9xFWH9b09m+WDPaG5DuljPbYd1j3zPe/liu37dFs9rsIHPaJl0+QE3YjtuL3MzZ09pL2PdbOpJfXDPf89kz3/nbM93N29FfY95V3yrevdoA37AHOV+92vXZo1y6WbrT9d5NWHZYDd4jWS1ZXkVKhyNePdxK2TXYjdp8k+vbetAb2AHczdmL2F9c915N3oFd09qr3EvcY1pb3MvYdd4L383YvdpV2tbZ5tzXWOvalQKNWDbYfd8A2ZtZDg+vXPcqnVs3Wr1Yt1g13LTaNd6T3pvYA9w3X4Azu9yL3jtd7d1N2k3fZdhr2svdg9x7WWveO9lV2uPbO9xgBPtb8AU2W+Pdm67+JoEl1dp2WIbYYdoJ3o7AvZKiQE3cdtrY2kffcHSL3SFf+9nJ2qFY89kXWvPZS9nz2T9b+9i53Gvf291LWqDe/of0l6Hez1veWxFfXdiO3bXfsACr2Afaf1qn2CZZp97D29vd4ViE2kfcFaQn32fcm9xN2ONcJ19b3KvZW96r3UvdlV2o3AvdEtkX3PjbF9o90JfaK95b3YVbF12X379d597z2JdYF9lX2WPeF9xnW0TbF90altfb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"))
///////////////////////////////////////////////

///////////////////////////////////////////////
/* Utility functions */

var storagePrefix = 'KiCad_HTML_BOM__' + pcbdata.metadata.title + '__' +
  pcbdata.metadata.revision + '__#';
var storage;

function initStorage(key) {
  try {
    window.localStorage.getItem("blank");
    storage = window.localStorage;
  } catch (e) {
    // localStorage not available
  }
  if (!storage) {
    try {
      window.sessionStorage.getItem("blank");
      storage = window.sessionStorage;
    } catch (e) {
      // sessionStorage also not available
    }
  }
}

function readStorage(key) {
  if (storage) {
    return storage.getItem(storagePrefix + key);
  } else {
    return null;
  }
}

function writeStorage(key, value) {
  if (storage) {
    storage.setItem(storagePrefix + key, value);
  }
}

function fancyDblClickHandler(el, onsingle, ondouble) {
  return function () {
    if (el.getAttribute("data-dblclick") == null) {
      el.setAttribute("data-dblclick", 1);
      setTimeout(function () {
        if (el.getAttribute("data-dblclick") == 1) {
          onsingle();
        }
        el.removeAttribute("data-dblclick");
      }, 200);
    } else {
      el.removeAttribute("data-dblclick");
      ondouble();
    }
  }
}

function smoothScrollToRow(rowid) {
  document.getElementById(rowid).scrollIntoView({
    behavior: "smooth",
    block: "center",
    inline: "nearest"
  });
}

function focusInputField(input) {
  input.scrollIntoView(false);
  input.focus();
  input.select();
}

function saveBomTable(output) {
  var text = '';
  for (var node of bomhead.childNodes[0].childNodes) {
    if (node.firstChild) {
      var name = node.firstChild.nodeValue ?? "";
      text += (output == 'csv' ? `"${name}"` : name);
    }
    if (node != bomhead.childNodes[0].lastChild) {
      text += (output == 'csv' ? ',' : '\t');
    }
  }
  text += '\n';
  for (var row of bombody.childNodes) {
    for (var cell of row.childNodes) {
      let val = '';
      for (var node of cell.childNodes) {
        if (node.nodeName == "INPUT") {
          if (node.checked) {
            val += '✓';
          }
        } else if ((node.nodeName == "MARK") || (node.nodeName == "A")) {
          val += node.firstChild.nodeValue;
        } else {
          val += node.nodeValue;
        }
      }
      if (output == 'csv') {
        val = val.replace(/\"/g, '\"\"'); // pair of double-quote characters
        if (isNumeric(val)) {
          val = +val;                     // use number
        } else {
          val = `"${val}"`;               // enclosed within double-quote
        }
      }
      text += val;
      if (cell != row.lastChild) {
        text += (output == 'csv' ? ',' : '\t');
      }
    }
    text += '\n';
  }

  if (output != 'clipboard') {
    // To file: csv or txt
    var blob = new Blob([text], {
      type: `text/${output}`
    });
    saveFile(`${pcbdata.metadata.title}.${output}`, blob);
  } else {
    // To clipboard
    var textArea = document.createElement("textarea");
    textArea.classList.add('clipboard-temp');
    textArea.value = text;

    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();

    try {
      if (document.execCommand('copy')) {
        console.log('Bom copied to clipboard.');
      }
    } catch (err) {
      console.log('Can not copy to clipboard.');
    }

    document.body.removeChild(textArea);
  }
}

function isNumeric(str) {
  /* https://stackoverflow.com/a/175787 */
  return (typeof str != "string" ? false : !isNaN(str) && !isNaN(parseFloat(str)));
}

function removeGutterNode(node) {
  for (var i = 0; i < node.childNodes.length; i++) {
    if (node.childNodes[i].classList &&
      node.childNodes[i].classList.contains("gutter")) {
      node.removeChild(node.childNodes[i]);
      break;
    }
  }
}

function cleanGutters() {
  removeGutterNode(document.getElementById("bot"));
  removeGutterNode(document.getElementById("canvasdiv"));
}

var units = {
  prefixes: {
    giga: ["G", "g", "giga", "Giga", "GIGA"],
    mega: ["M", "mega", "Mega", "MEGA"],
    kilo: ["K", "k", "kilo", "Kilo", "KILO"],
    milli: ["m", "milli", "Milli", "MILLI"],
    micro: ["U", "u", "micro", "Micro", "MICRO", "μ", "µ"], // different utf8 μ
    nano: ["N", "n", "nano", "Nano", "NANO"],
    pico: ["P", "p", "pico", "Pico", "PICO"],
  },
  unitsShort: ["R", "r", "Ω", "F", "f", "H", "h"],
  unitsLong: [
    "OHM", "Ohm", "ohm", "ohms",
    "FARAD", "Farad", "farad",
    "HENRY", "Henry", "henry"
  ],
  getMultiplier: function (s) {
    if (this.prefixes.giga.includes(s)) return 1e9;
    if (this.prefixes.mega.includes(s)) return 1e6;
    if (this.prefixes.kilo.includes(s)) return 1e3;
    if (this.prefixes.milli.includes(s)) return 1e-3;
    if (this.prefixes.micro.includes(s)) return 1e-6;
    if (this.prefixes.nano.includes(s)) return 1e-9;
    if (this.prefixes.pico.includes(s)) return 1e-12;
    return 1;
  },
  valueRegex: null,
  valueAltRegex: null,
}

function initUtils() {
  var allPrefixes = units.prefixes.giga
    .concat(units.prefixes.mega)
    .concat(units.prefixes.kilo)
    .concat(units.prefixes.milli)
    .concat(units.prefixes.micro)
    .concat(units.prefixes.nano)
    .concat(units.prefixes.pico);
  var allUnits = units.unitsShort.concat(units.unitsLong);
  units.valueRegex = new RegExp("^([0-9\.]+)" +
    "\\s*(" + allPrefixes.join("|") + ")?" +
    "(" + allUnits.join("|") + ")?" +
    "(\\b.*)?$", "");
  units.valueAltRegex = new RegExp("^([0-9]*)" +
    "(" + units.unitsShort.join("|") + ")?" +
    "([GgMmKkUuNnPp])?" +
    "([0-9]*)" +
    "(\\b.*)?$", "");
  if (config.fields.includes("Value")) {
    var index = config.fields.indexOf("Value");
    pcbdata.bom["parsedValues"] = {};
    var allList = getBomListByLayer('FB').flat();
    for (var id in pcbdata.bom.fields) {
      var ref_key = allList.find(item => item[1] == Number(id)) || [];
      pcbdata.bom.parsedValues[id] = parseValue(pcbdata.bom.fields[id][index], ref_key[0] || '');
    }
  }
}

function parseValue(val, ref) {
  var inferUnit = (unit, ref) => {
    if (unit) {
      unit = unit.toLowerCase();
      if (unit == 'Ω' || unit == "ohm" || unit == "ohms") {
        unit = 'r';
      }
      return unit[0];
    }

    var resarr = /^([a-z]+)\d+$/i.exec(ref);
    switch (Array.isArray(resarr) && resarr[1].toLowerCase()) {
      case "c": return 'f';
      case "l": return 'h';
      case "r":
      case "rv": return 'r';
    }
    return null;
  };
  val = val.replace(/,/g, "");
  var match = units.valueRegex.exec(val);
  if (Array.isArray(match)) {
    var unit = inferUnit(match[3], ref);
    var val_i = parseFloat(match[1]);
    if (!unit) return null;
    if (match[2]) {
      val_i = val_i * units.getMultiplier(match[2]);
    }
    return {
      val: val_i,
      unit: unit,
      extra: match[4],
    }
  }

  match = units.valueAltRegex.exec(val);
  if (Array.isArray(match) && (match[1] || match[4])) {
    var unit = inferUnit(match[2], ref);
    var val_i = parseFloat(match[1] + "." + match[4]);
    if (!unit) return null;
    if (match[3]) {
      val_i = val_i * units.getMultiplier(match[3]);
    }
    return {
      val: val_i,
      unit: unit,
      extra: match[5],
    }
  }
  return null;
}

function valueCompare(a, b, stra, strb) {
  if (a === null && b === null) {
    // Failed to parse both values, compare them as strings.
    if (stra != strb) return stra > strb ? 1 : -1;
    else return 0;
  } else if (a === null) {
    return 1;
  } else if (b === null) {
    return -1;
  } else {
    if (a.unit != b.unit) return a.unit > b.unit ? 1 : -1;
    else if (a.val != b.val) return a.val > b.val ? 1 : -1;
    else if (a.extra != b.extra) return a.extra > b.extra ? 1 : -1;
    else return 0;
  }
}

function validateSaveImgDimension(element) {
  var valid = false;
  var intValue = 0;
  if (/^[1-9]\d*$/.test(element.value)) {
    intValue = parseInt(element.value);
    if (intValue <= 16000) {
      valid = true;
    }
  }
  if (valid) {
    element.classList.remove("invalid");
  } else {
    element.classList.add("invalid");
  }
  return intValue;
}

function saveImage(layer) {
  var width = validateSaveImgDimension(document.getElementById("render-save-width"));
  var height = validateSaveImgDimension(document.getElementById("render-save-height"));
  var bgcolor = null;
  if (!document.getElementById("render-save-transparent").checked) {
    var style = getComputedStyle(topmostdiv);
    bgcolor = style.getPropertyValue("background-color");
  }
  if (!width || !height) return;

  // Prepare image
  var canvas = document.createElement("canvas");
  var layerdict = {
    transform: {
      x: 0,
      y: 0,
      s: 1,
      panx: 0,
      pany: 0,
      zoom: 1,
    },
    bg: canvas,
    fab: canvas,
    silk: canvas,
    highlight: canvas,
    layer: layer,
  }
  // Do the rendering
  recalcLayerScale(layerdict, width, height);
  prepareLayer(layerdict);
  clearCanvas(canvas, bgcolor);
  drawBackground(layerdict, false);
  drawHighlightsOnLayer(layerdict, false);

  // Save image
  var imgdata = canvas.toDataURL("image/png");

  var filename = pcbdata.metadata.title;
  if (pcbdata.metadata.revision) {
    filename += `.${pcbdata.metadata.revision}`;
  }
  filename += `.${layer}.png`;
  saveFile(filename, dataURLtoBlob(imgdata));
}

function saveSettings() {
  var data = {
    type: "InteractiveHtmlBom settings",
    version: 1,
    pcbmetadata: pcbdata.metadata,
    settings: settings,
  }
  var blob = new Blob([JSON.stringify(data, null, 4)], {
    type: "application/json"
  });
  saveFile(`${pcbdata.metadata.title}.settings.json`, blob);
}

function loadSettings() {
  var input = document.createElement("input");
  input.type = "file";
  input.accept = ".settings.json";
  input.onchange = function (e) {
    var file = e.target.files[0];
    var reader = new FileReader();
    reader.onload = readerEvent => {
      var content = readerEvent.target.result;
      var newSettings;
      try {
        newSettings = JSON.parse(content);
      } catch (e) {
        alert("Selected file is not InteractiveHtmlBom settings file.");
        return;
      }
      if (newSettings.type != "InteractiveHtmlBom settings") {
        alert("Selected file is not InteractiveHtmlBom settings file.");
        return;
      }
      var metadataMatches = newSettings.hasOwnProperty("pcbmetadata");
      if (metadataMatches) {
        for (var k in pcbdata.metadata) {
          if (!newSettings.pcbmetadata.hasOwnProperty(k) || newSettings.pcbmetadata[k] != pcbdata.metadata[k]) {
            metadataMatches = false;
          }
        }
      }
      if (!metadataMatches) {
        var currentMetadata = JSON.stringify(pcbdata.metadata, null, 4);
        var fileMetadata = JSON.stringify(newSettings.pcbmetadata, null, 4);
        if (!confirm(
          `Settins file metadata does not match current metadata.\n\n` +
          `Page metadata:\n${currentMetadata}\n\n` +
          `Settings file metadata:\n${fileMetadata}\n\n` +
          `Press OK if you would like to import settings anyway.`)) {
          return;
        }
      }
      overwriteSettings(newSettings.settings);
    }
    reader.readAsText(file, 'UTF-8');
  }
  input.click();
}

function resetSettings() {
  if (!confirm(
    `This will reset all checkbox states and other settings.\n\n` +
    `Press OK if you want to continue.`)) {
    return;
  }
  if (storage) {
    var keys = [];
    for (var i = 0; i < storage.length; i++) {
      var key = storage.key(i);
      if (key.startsWith(storagePrefix)) keys.push(key);
    }
    for (var key of keys) storage.removeItem(key);
  }
  location.reload();
}

function overwriteSettings(newSettings) {
  initDone = false;
  Object.assign(settings, newSettings);
  writeStorage("bomlayout", settings.bomlayout);
  writeStorage("bommode", settings.bommode);
  writeStorage("canvaslayout", settings.canvaslayout);
  writeStorage("bomCheckboxes", settings.checkboxes.join(","));
  document.getElementById("bomCheckboxes").value = settings.checkboxes.join(",");
  for (var checkbox of settings.checkboxes) {
    writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
  }
  writeStorage("markWhenChecked", settings.markWhenChecked);
  padsVisible(settings.renderPads);
  document.getElementById("padsCheckbox").checked = settings.renderPads;
  fabricationVisible(settings.renderFabrication);
  document.getElementById("fabricationCheckbox").checked = settings.renderFabrication;
  silkscreenVisible(settings.renderSilkscreen);
  document.getElementById("silkscreenCheckbox").checked = settings.renderSilkscreen;
  referencesVisible(settings.renderReferences);
  document.getElementById("referencesCheckbox").checked = settings.renderReferences;
  valuesVisible(settings.renderValues);
  document.getElementById("valuesCheckbox").checked = settings.renderValues;
  tracksVisible(settings.renderTracks);
  document.getElementById("tracksCheckbox").checked = settings.renderTracks;
  zonesVisible(settings.renderZones);
  document.getElementById("zonesCheckbox").checked = settings.renderZones;
  dnpOutline(settings.renderDnpOutline);
  document.getElementById("dnpOutlineCheckbox").checked = settings.renderDnpOutline;
  setRedrawOnDrag(settings.redrawOnDrag);
  document.getElementById("dragCheckbox").checked = settings.redrawOnDrag;
  setHighlightRowOnClick(settings.highlightRowOnClick);
  document.getElementById("highlightRowOnClickCheckbox").checked = settings.highlightRowOnClick;
  setDarkMode(settings.darkMode);
  document.getElementById("darkmodeCheckbox").checked = settings.darkMode;
  setHighlightPin1(settings.highlightpin1);
  document.forms.highlightpin1.highlightpin1.value = settings.highlightpin1;
  writeStorage("boardRotation", settings.boardRotation);
  document.getElementById("boardRotation").value = settings.boardRotation / 5;
  document.getElementById("rotationDegree").textContent = settings.boardRotation;
  setOffsetBackRotation(settings.offsetBackRotation);
  document.getElementById("offsetBackRotationCheckbox").checked = settings.offsetBackRotation;
  initDone = true;
  prepCheckboxes();
  changeBomLayout(settings.bomlayout);
}

function saveFile(filename, blob) {
  var link = document.createElement("a");
  var objurl = URL.createObjectURL(blob);
  link.download = filename;
  link.href = objurl;
  link.click();
}

function dataURLtoBlob(dataurl) {
  var arr = dataurl.split(','),
    mime = arr[0].match(/:(.*?);/)[1],
    bstr = atob(arr[1]),
    n = bstr.length,
    u8arr = new Uint8Array(n);
  while (n--) {
    u8arr[n] = bstr.charCodeAt(n);
  }
  return new Blob([u8arr], {
    type: mime
  });
}

var settings = {
  canvaslayout: "FB",
  bomlayout: "left-right",
  bommode: "grouped",
  checkboxes: [],
  checkboxStoredRefs: {},
  darkMode: false,
  highlightpin1: "none",
  redrawOnDrag: true,
  boardRotation: 0,
  offsetBackRotation: false,
  renderPads: true,
  renderReferences: true,
  renderValues: true,
  renderSilkscreen: true,
  renderFabrication: true,
  renderDnpOutline: false,
  renderTracks: true,
  renderZones: true,
  columnOrder: [],
  hiddenColumns: [],
  netColors: {},
}

function initDefaults() {
  settings.bomlayout = readStorage("bomlayout");
  if (settings.bomlayout === null) {
    settings.bomlayout = config.bom_view;
  }
  if (!['bom-only', 'left-right', 'top-bottom'].includes(settings.bomlayout)) {
    settings.bomlayout = config.bom_view;
  }
  settings.bommode = readStorage("bommode");
  if (settings.bommode === null) {
    settings.bommode = "grouped";
  }
  if (settings.bommode == "netlist" && !pcbdata.nets) {
    settings.bommode = "grouped";
  }
  if (!["grouped", "ungrouped", "netlist"].includes(settings.bommode)) {
    settings.bommode = "grouped";
  }
  settings.canvaslayout = readStorage("canvaslayout");
  if (settings.canvaslayout === null) {
    settings.canvaslayout = config.layer_view;
  }
  var bomCheckboxes = readStorage("bomCheckboxes");
  if (bomCheckboxes === null) {
    bomCheckboxes = config.checkboxes;
  }
  settings.checkboxes = bomCheckboxes.split(",").filter((e) => e);
  document.getElementById("bomCheckboxes").value = bomCheckboxes;

  var highlightpin1 = readStorage("highlightpin1") || config.highlight_pin1;
  if (highlightpin1 === "false") highlightpin1 = "none";
  if (highlightpin1 === "true") highlightpin1 = "all";
  setHighlightPin1(highlightpin1);
  document.forms.highlightpin1.highlightpin1.value = highlightpin1;

  settings.markWhenChecked = readStorage("markWhenChecked");
  if (settings.markWhenChecked == null) {
    settings.markWhenChecked = config.mark_when_checked;
  }
  populateMarkWhenCheckedOptions();

  function initBooleanSetting(storageString, def, elementId, func) {
    var b = readStorage(storageString);
    if (b === null) {
      b = def;
    } else {
      b = (b == "true");
    }
    document.getElementById(elementId).checked = b;
    func(b);
  }

  initBooleanSetting("padsVisible", config.show_pads, "padsCheckbox", padsVisible);
  initBooleanSetting("fabricationVisible", config.show_fabrication, "fabricationCheckbox", fabricationVisible);
  initBooleanSetting("silkscreenVisible", config.show_silkscreen, "silkscreenCheckbox", silkscreenVisible);
  initBooleanSetting("referencesVisible", true, "referencesCheckbox", referencesVisible);
  initBooleanSetting("valuesVisible", true, "valuesCheckbox", valuesVisible);
  if ("tracks" in pcbdata) {
    initBooleanSetting("tracksVisible", true, "tracksCheckbox", tracksVisible);
    initBooleanSetting("zonesVisible", true, "zonesCheckbox", zonesVisible);
  } else {
    document.getElementById("tracksAndZonesCheckboxes").style.display = "none";
    tracksVisible(false);
    zonesVisible(false);
  }
  initBooleanSetting("dnpOutline", false, "dnpOutlineCheckbox", dnpOutline);
  initBooleanSetting("redrawOnDrag", config.redraw_on_drag, "dragCheckbox", setRedrawOnDrag);
  initBooleanSetting("highlightRowOnClick", false, "highlightRowOnClickCheckbox", setHighlightRowOnClick);
  initBooleanSetting("darkmode", config.dark_mode, "darkmodeCheckbox", setDarkMode);

  var fields = ["checkboxes", "References"].concat(config.fields).concat(["Quantity"]);
  var hcols = JSON.parse(readStorage("hiddenColumns"));
  if (hcols === null) {
    hcols = [];
  }
  settings.hiddenColumns = hcols.filter(e => fields.includes(e));

  var cord = JSON.parse(readStorage("columnOrder"));
  if (cord === null) {
    cord = fields;
  } else {
    cord = cord.filter(e => fields.includes(e));
    if (cord.length != fields.length)
      cord = fields;
  }
  settings.columnOrder = cord;

  settings.boardRotation = readStorage("boardRotation");
  if (settings.boardRotation === null) {
    settings.boardRotation = config.board_rotation * 5;
  } else {
    settings.boardRotation = parseInt(settings.boardRotation);
  }
  document.getElementById("boardRotation").value = settings.boardRotation / 5;
  document.getElementById("rotationDegree").textContent = settings.boardRotation;
  initBooleanSetting("offsetBackRotation", config.offset_back_rotation, "offsetBackRotationCheckbox", setOffsetBackRotation);

  settings.netColors = JSON.parse(readStorage("netColors")) || {};
}

// Helper classes for user js callbacks.

const IBOM_EVENT_TYPES = {
  ALL: "all",
  HIGHLIGHT_EVENT: "highlightEvent",
  CHECKBOX_CHANGE_EVENT: "checkboxChangeEvent",
  BOM_BODY_CHANGE_EVENT: "bomBodyChangeEvent",
}

const EventHandler = {
  callbacks: {},
  init: function () {
    for (eventType of Object.values(IBOM_EVENT_TYPES))
      this.callbacks[eventType] = [];
  },
  registerCallback: function (eventType, callback) {
    this.callbacks[eventType].push(callback);
  },
  emitEvent: function (eventType, eventArgs) {
    event = {
      eventType: eventType,
      args: eventArgs,
    }
    var callback;
    for (callback of this.callbacks[eventType])
      callback(event);
    for (callback of this.callbacks[IBOM_EVENT_TYPES.ALL])
      callback(event);
  }
}
EventHandler.init();

///////////////////////////////////////////////

///////////////////////////////////////////////
/* PCB rendering code */

var emptyContext2d = document.createElement("canvas").getContext("2d");

function deg2rad(deg) {
  return deg * Math.PI / 180;
}

function calcFontPoint(linepoint, text, offsetx, offsety, tilt) {
  var point = [
    linepoint[0] * text.width + offsetx,
    linepoint[1] * text.height + offsety
  ];
  // This approximates pcbnew behavior with how text tilts depending on horizontal justification
  point[0] -= (linepoint[1] + 0.5 * (1 + text.justify[0])) * text.height * tilt;
  return point;
}

function drawText(ctx, text, color) {
  if ("ref" in text && !settings.renderReferences) return;
  if ("val" in text && !settings.renderValues) return;
  ctx.save();
  ctx.fillStyle = color;
  ctx.strokeStyle = color;
  ctx.lineCap = "round";
  ctx.lineJoin = "round";
  if ("svgpath" in text) {
    if ("thickness" in text) {
      ctx.lineWidth = text.thickness;
      ctx.stroke(new Path2D(text.svgpath));
    } else if ("fillrule" in text) {
      ctx.fill(new Path2D(text.svgpath), text.fillrule);
    }
    ctx.restore();
    return;
  }
  ctx.lineWidth = text.thickness;
  if ("polygons" in text) {
    ctx.fill(getPolygonsPath(text));
    ctx.restore();
    return;
  }
  ctx.translate(...text.pos);
  ctx.translate(text.thickness * 0.5, 0);
  var angle = -text.angle;
  if (text.attr.includes("mirrored")) {
    ctx.scale(-1, 1);
    angle = -angle;
  }
  var tilt = 0;
  if (text.attr.includes("italic")) {
    tilt = 0.125;
  }
  var interline = text.height * 1.5 + text.thickness;
  var txt = text.text.split("\n");
  // KiCad ignores last empty line.
  if (txt[txt.length - 1] == '') txt.pop();
  ctx.rotate(deg2rad(angle));
  var offsety = (1 - text.justify[1]) / 2 * text.height; // One line offset
  offsety -= (txt.length - 1) * (text.justify[1] + 1) / 2 * interline; // Multiline offset
  for (var i in txt) {
    var lineWidth = text.thickness + interline / 2 * tilt;
    for (var j = 0; j < txt[i].length; j++) {
      if (txt[i][j] == '\t') {
        var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
        lineWidth += fourSpaces - lineWidth % fourSpaces;
      } else {
        if (txt[i][j] == '~') {
          j++;
          if (j == txt[i].length)
            break;
        }
        lineWidth += pcbdata.font_data[txt[i][j]].w * text.width;
      }
    }
    var offsetx = -lineWidth * (text.justify[0] + 1) / 2;
    var inOverbar = false;
    for (var j = 0; j < txt[i].length; j++) {
      if (config.kicad_text_formatting) {
        if (txt[i][j] == '\t') {
          var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
          offsetx += fourSpaces - offsetx % fourSpaces;
          continue;
        } else if (txt[i][j] == '~') {
          j++;
          if (j == txt[i].length)
            break;
          if (txt[i][j] != '~') {
            inOverbar = !inOverbar;
          }
        }
      }
      var glyph = pcbdata.font_data[txt[i][j]];
      if (inOverbar) {
        var overbarStart = [offsetx, -text.height * 1.4 + offsety];
        var overbarEnd = [offsetx + text.width * glyph.w, overbarStart[1]];

        if (!lastHadOverbar) {
          overbarStart[0] += text.height * 1.4 * tilt;
          lastHadOverbar = true;
        }
        ctx.beginPath();
        ctx.moveTo(...overbarStart);
        ctx.lineTo(...overbarEnd);
        ctx.stroke();
      } else {
        lastHadOverbar = false;
      }
      for (var line of glyph.l) {
        ctx.beginPath();
        ctx.moveTo(...calcFontPoint(line[0], text, offsetx, offsety, tilt));
        for (var k = 1; k < line.length; k++) {
          ctx.lineTo(...calcFontPoint(line[k], text, offsetx, offsety, tilt));
        }
        ctx.stroke();
      }
      offsetx += glyph.w * text.width;
    }
    offsety += interline;
  }
  ctx.restore();
}

function drawedge(ctx, scalefactor, edge, color) {
  ctx.strokeStyle = color;
  ctx.fillStyle = color;
  ctx.lineWidth = Math.max(1 / scalefactor, edge.width);
  ctx.lineCap = "round";
  ctx.lineJoin = "round";
  if ("svgpath" in edge) {
    ctx.stroke(new Path2D(edge.svgpath));
  } else {
    ctx.beginPath();
    if (edge.type == "segment") {
      ctx.moveTo(...edge.start);
      ctx.lineTo(...edge.end);
    }
    if (edge.type == "rect") {
      ctx.moveTo(...edge.start);
      ctx.lineTo(edge.start[0], edge.end[1]);
      ctx.lineTo(...edge.end);
      ctx.lineTo(edge.end[0], edge.start[1]);
      ctx.lineTo(...edge.start);
    }
    if (edge.type == "arc") {
      ctx.arc(
        ...edge.start,
        edge.radius,
        deg2rad(edge.startangle),
        deg2rad(edge.endangle));
    }
    if (edge.type == "circle") {
      ctx.arc(
        ...edge.start,
        edge.radius,
        0, 2 * Math.PI);
      ctx.closePath();
    }
    if (edge.type == "curve") {
      ctx.moveTo(...edge.start);
      ctx.bezierCurveTo(...edge.cpa, ...edge.cpb, ...edge.end);
    }
    if("filled" in edge && edge.filled)
      ctx.fill();
    else
      ctx.stroke();
  }
}

function getChamferedRectPath(size, radius, chamfpos, chamfratio) {
  // chamfpos is a bitmask, left = 1, right = 2, bottom left = 4, bottom right = 8
  var path = new Path2D();
  var width = size[0];
  var height = size[1];
  var x = width * -0.5;
  var y = height * -0.5;
  var chamfOffset = Math.min(width, height) * chamfratio;
  path.moveTo(x, 0);
  if (chamfpos & 4) {
    path.lineTo(x, y + height - chamfOffset);
    path.lineTo(x + chamfOffset, y + height);
    path.lineTo(0, y + height);
  } else {
    path.arcTo(x, y + height, x + width, y + height, radius);
  }
  if (chamfpos & 8) {
    path.lineTo(x + width - chamfOffset, y + height);
    path.lineTo(x + width, y + height - chamfOffset);
    path.lineTo(x + width, 0);
  } else {
    path.arcTo(x + width, y + height, x + width, y, radius);
  }
  if (chamfpos & 2) {
    path.lineTo(x + width, y + chamfOffset);
    path.lineTo(x + width - chamfOffset, y);
    path.lineTo(0, y);
  } else {
    path.arcTo(x + width, y, x, y, radius);
  }
  if (chamfpos & 1) {
    path.lineTo(x + chamfOffset, y);
    path.lineTo(x, y + chamfOffset);
    path.lineTo(x, 0);
  } else {
    path.arcTo(x, y, x, y + height, radius);
  }
  path.closePath();
  return path;
}

function getOblongPath(size) {
  return getChamferedRectPath(size, Math.min(size[0], size[1]) / 2, 0, 0);
}

function getPolygonsPath(shape) {
  if (shape.path2d) {
    return shape.path2d;
  }
  if ("svgpath" in shape) {
    shape.path2d = new Path2D(shape.svgpath);
  } else {
    var path = new Path2D();
    for (var polygon of shape.polygons) {
      path.moveTo(...polygon[0]);
      for (var i = 1; i < polygon.length; i++) {
        path.lineTo(...polygon[i]);
      }
      path.closePath();
    }
    shape.path2d = path;
  }
  return shape.path2d;
}

function drawPolygonShape(ctx, scalefactor, shape, color) {
  ctx.save();
  if (!("svgpath" in shape)) {
    ctx.translate(...shape.pos);
    ctx.rotate(deg2rad(-shape.angle));
  }
  if("filled" in shape && !shape.filled) {
    ctx.strokeStyle = color;
    ctx.lineWidth = Math.max(1 / scalefactor, shape.width);
    ctx.lineCap = "round";
    ctx.lineJoin = "round";
    ctx.stroke(getPolygonsPath(shape));
  } else {
    ctx.fillStyle = color;
    ctx.fill(getPolygonsPath(shape));
  }
  ctx.restore();
}

function drawDrawing(ctx, scalefactor, drawing, color) {
  if (["segment", "arc", "circle", "curve", "rect"].includes(drawing.type)) {
    drawedge(ctx, scalefactor, drawing, color);
  } else if (drawing.type == "polygon") {
    drawPolygonShape(ctx, scalefactor, drawing, color);
  } else {
    drawText(ctx, drawing, color);
  }
}

function getCirclePath(radius) {
  var path = new Path2D();
  path.arc(0, 0, radius, 0, 2 * Math.PI);
  path.closePath();
  return path;
}

function getCachedPadPath(pad) {
  if (!pad.path2d) {
    // if path2d is not set, build one and cache it on pad object
    if (pad.shape == "rect") {
      pad.path2d = new Path2D();
      pad.path2d.rect(...pad.size.map(c => -c * 0.5), ...pad.size);
    } else if (pad.shape == "oval") {
      pad.path2d = getOblongPath(pad.size);
    } else if (pad.shape == "circle") {
      pad.path2d = getCirclePath(pad.size[0] / 2);
    } else if (pad.shape == "roundrect") {
      pad.path2d = getChamferedRectPath(pad.size, pad.radius, 0, 0);
    } else if (pad.shape == "chamfrect") {
      pad.path2d = getChamferedRectPath(pad.size, pad.radius, pad.chamfpos, pad.chamfratio)
    } else if (pad.shape == "custom") {
      pad.path2d = getPolygonsPath(pad);
    }
  }
  return pad.path2d;
}

function drawPad(ctx, pad, color, outline) {
  ctx.save();
  ctx.translate(...pad.pos);
  ctx.rotate(-deg2rad(pad.angle));
  if (pad.offset) {
    ctx.translate(...pad.offset);
  }
  ctx.fillStyle = color;
  ctx.strokeStyle = color;
  var path = getCachedPadPath(pad);
  if (outline) {
    ctx.stroke(path);
  } else {
    ctx.fill(path);
  }
  ctx.restore();
}

function drawPadHole(ctx, pad, padHoleColor) {
  if (pad.type != "th") return;
  ctx.save();
  ctx.translate(...pad.pos);
  ctx.rotate(-deg2rad(pad.angle));
  ctx.fillStyle = padHoleColor;
  if (pad.drillshape == "oblong") {
    ctx.fill(getOblongPath(pad.drillsize));
  } else if (pad.drillshape == "rect") {
    ctx.fill(getChamferedRectPath(pad.drillsize, 0, 0, 0));
  } else {
    ctx.fill(getCirclePath(pad.drillsize[0] / 2));
  }
  ctx.restore();
}

function drawFootprint(ctx, layer, scalefactor, footprint, colors, highlight, outline) {
  if (highlight) {
    // draw bounding box
    if (footprint.layer == layer) {
      ctx.save();
      ctx.globalAlpha = 0.2;
      ctx.translate(...footprint.bbox.pos);
      ctx.rotate(deg2rad(-footprint.bbox.angle));
      ctx.translate(...footprint.bbox.relpos);
      ctx.fillStyle = colors.pad;
      ctx.fillRect(0, 0, ...footprint.bbox.size);
      ctx.globalAlpha = 1;
      ctx.strokeStyle = colors.pad;
      ctx.lineWidth = 3 / scalefactor;
      ctx.strokeRect(0, 0, ...footprint.bbox.size);
      ctx.restore();
    }
  }
  // draw drawings
  for (var drawing of footprint.drawings) {
    if (drawing.layer == layer) {
      drawDrawing(ctx, scalefactor, drawing.drawing, colors.pad);
    }
  }
  ctx.lineWidth = 3 / scalefactor;
  // draw pads
  if (settings.renderPads) {
    for (var pad of footprint.pads) {
      if (pad.layers.includes(layer)) {
        drawPad(ctx, pad, colors.pad, outline);
        if (pad.pin1 &&
          (settings.highlightpin1 == "all" ||
            settings.highlightpin1 == "selected" && highlight)) {
          drawPad(ctx, pad, colors.outline, true);
        }
      }
    }
    for (var pad of footprint.pads) {
      drawPadHole(ctx, pad, colors.padHole);
    }
  }
}

function drawEdgeCuts(canvas, scalefactor) {
  var ctx = canvas.getContext("2d");
  var edgecolor = getComputedStyle(topmostdiv).getPropertyValue('--pcb-edge-color');
  for (var edge of pcbdata.edges) {
    drawDrawing(ctx, scalefactor, edge, edgecolor);
  }
}

function drawFootprints(canvas, layer, scalefactor, highlight) {
  var ctx = canvas.getContext("2d");
  ctx.lineWidth = 3 / scalefactor;
  var style = getComputedStyle(topmostdiv);

  var colors = {
    pad: style.getPropertyValue('--pad-color'),
    padHole: style.getPropertyValue('--pad-hole-color'),
    outline: style.getPropertyValue('--pin1-outline-color'),
  }

  for (var i = 0; i < pcbdata.footprints.length; i++) {
    var mod = pcbdata.footprints[i];
    var outline = settings.renderDnpOutline && pcbdata.bom.skipped.includes(i);
    var h = highlightedFootprints.includes(i);
    var d = markedFootprints.has(i);
    if (highlight) {
      if(h && d) {
        colors.pad = style.getPropertyValue('--pad-color-highlight-both');
        colors.outline = style.getPropertyValue('--pin1-outline-color-highlight-both');
      } else if (h) {
        colors.pad = style.getPropertyValue('--pad-color-highlight');
        colors.outline = style.getPropertyValue('--pin1-outline-color-highlight');
      } else if (d) {
        colors.pad = style.getPropertyValue('--pad-color-highlight-marked');
        colors.outline = style.getPropertyValue('--pin1-outline-color-highlight-marked');
      }
    }
    if( h || d || !highlight) {
      drawFootprint(ctx, layer, scalefactor, mod, colors, highlight, outline);
    }
  }
}

function drawBgLayer(layername, canvas, layer, scalefactor, edgeColor, polygonColor, textColor) {
  var ctx = canvas.getContext("2d");
  for (var d of pcbdata.drawings[layername][layer]) {
    if (["segment", "arc", "circle", "curve", "rect"].includes(d.type)) {
      drawedge(ctx, scalefactor, d, edgeColor);
    } else if (d.type == "polygon") {
      drawPolygonShape(ctx, scalefactor, d, polygonColor);
    } else {
      drawText(ctx, d, textColor);
    }
  }
}

function drawTracks(canvas, layer, defaultColor, highlight) {
  ctx = canvas.getContext("2d");
  ctx.lineCap = "round";

  var hasHole = (track) => (
    'drillsize' in track &&
    track.start[0] == track.end[0] &&
    track.start[1] == track.end[1]);

  // First draw tracks and tented vias
  for (var track of pcbdata.tracks[layer]) {
    if (highlight && highlightedNet != track.net) continue;
    if (!hasHole(track)) {
      ctx.strokeStyle = highlight ? defaultColor : settings.netColors[track.net] || defaultColor;
      ctx.lineWidth = track.width;
      ctx.beginPath();
      if ('radius' in track) {
        ctx.arc(
          ...track.center,
          track.radius,
          deg2rad(track.startangle),
          deg2rad(track.endangle));
      } else {
        ctx.moveTo(...track.start);
        ctx.lineTo(...track.end);
      }
      ctx.stroke();
    }
  }
  // Second pass to draw untented vias
  var style = getComputedStyle(topmostdiv);
  var holeColor = style.getPropertyValue('--pad-hole-color')

  for (var track of pcbdata.tracks[layer]) {
    if (highlight && highlightedNet != track.net) continue;
    if (hasHole(track)) {
      ctx.strokeStyle = highlight ? defaultColor : settings.netColors[track.net] || defaultColor;
      ctx.lineWidth = track.width;
      ctx.beginPath();
      ctx.moveTo(...track.start);
      ctx.lineTo(...track.end);
      ctx.stroke();
      ctx.strokeStyle = holeColor;
      ctx.lineWidth = track.drillsize;
      ctx.lineTo(...track.end);
      ctx.stroke();
    }
  }
}

function drawZones(canvas, layer, defaultColor, highlight) {
  ctx = canvas.getContext("2d");
  ctx.lineJoin = "round";
  for (var zone of pcbdata.zones[layer]) {
    if (highlight && highlightedNet != zone.net) continue;
    ctx.strokeStyle = highlight ? defaultColor : settings.netColors[zone.net] || defaultColor;
    ctx.fillStyle = highlight ? defaultColor : settings.netColors[zone.net] || defaultColor;
    if (!zone.path2d) {
      zone.path2d = getPolygonsPath(zone);
    }
    ctx.fill(zone.path2d, zone.fillrule || "nonzero");
    if (zone.width > 0) {
      ctx.lineWidth = zone.width;
      ctx.stroke(zone.path2d);
    }
  }
}

function clearCanvas(canvas, color = null) {
  var ctx = canvas.getContext("2d");
  ctx.save();
  ctx.setTransform(1, 0, 0, 1, 0, 0);
  if (color) {
    ctx.fillStyle = color;
    ctx.fillRect(0, 0, canvas.width, canvas.height);
  } else {
    if (!window.matchMedia("print").matches)
      ctx.clearRect(0, 0, canvas.width, canvas.height);
  }
  ctx.restore();
}

function drawNets(canvas, layer, highlight) {
  var style = getComputedStyle(topmostdiv);
  if (settings.renderZones) {
    var zoneColor = style.getPropertyValue(highlight ? '--zone-color-highlight' : '--zone-color');
    drawZones(canvas, layer, zoneColor, highlight);
  }
  if (settings.renderTracks) {
    var trackColor = style.getPropertyValue(highlight ? '--track-color-highlight' : '--track-color');
    drawTracks(canvas, layer, trackColor, highlight);
  }
  if (highlight && settings.renderPads) {
    var padColor = style.getPropertyValue('--pad-color-highlight');
    var padHoleColor = style.getPropertyValue('--pad-hole-color');
    var ctx = canvas.getContext("2d");
    for (var footprint of pcbdata.footprints) {
      // draw pads
      var padDrawn = false;
      for (var pad of footprint.pads) {
        if (highlightedNet != pad.net) continue;
        if (pad.layers.includes(layer)) {
          drawPad(ctx, pad, padColor, false);
          padDrawn = true;
        }
      }
      if (padDrawn) {
        // redraw all pad holes because some pads may overlap
        for (var pad of footprint.pads) {
          drawPadHole(ctx, pad, padHoleColor);
        }
      }
    }
  }
}

function drawHighlightsOnLayer(canvasdict, clear = true) {
  if (clear) {
    clearCanvas(canvasdict.highlight);
  }
  if (markedFootprints.size > 0 || highlightedFootprints.length > 0) {
    drawFootprints(canvasdict.highlight, canvasdict.layer,
      canvasdict.transform.s * canvasdict.transform.zoom, true);
  }
  if (highlightedNet !== null) {
    drawNets(canvasdict.highlight, canvasdict.layer, true);
  }
}

function drawHighlights() {
  drawHighlightsOnLayer(allcanvas.front);
  drawHighlightsOnLayer(allcanvas.back);
}

function drawBackground(canvasdict, clear = true) {
  if (clear) {
    clearCanvas(canvasdict.bg);
    clearCanvas(canvasdict.fab);
    clearCanvas(canvasdict.silk);
  }

  drawNets(canvasdict.bg, canvasdict.layer, false);
  drawFootprints(canvasdict.bg, canvasdict.layer,
    canvasdict.transform.s * canvasdict.transform.zoom, false);

  drawEdgeCuts(canvasdict.bg, canvasdict.transform.s * canvasdict.transform.zoom);

  var style = getComputedStyle(topmostdiv);
  var edgeColor = style.getPropertyValue('--silkscreen-edge-color');
  var polygonColor = style.getPropertyValue('--silkscreen-polygon-color');
  var textColor = style.getPropertyValue('--silkscreen-text-color');
  if (settings.renderSilkscreen) {
    drawBgLayer(
      "silkscreen", canvasdict.silk, canvasdict.layer,
      canvasdict.transform.s * canvasdict.transform.zoom,
      edgeColor, polygonColor, textColor);
  }
  edgeColor = style.getPropertyValue('--fabrication-edge-color');
  polygonColor = style.getPropertyValue('--fabrication-polygon-color');
  textColor = style.getPropertyValue('--fabrication-text-color');
  if (settings.renderFabrication) {
    drawBgLayer(
      "fabrication", canvasdict.fab, canvasdict.layer,
      canvasdict.transform.s * canvasdict.transform.zoom,
      edgeColor, polygonColor, textColor);
  }
}

function prepareCanvas(canvas, flip, transform) {
  var ctx = canvas.getContext("2d");
  ctx.setTransform(1, 0, 0, 1, 0, 0);
  ctx.scale(transform.zoom, transform.zoom);
  ctx.translate(transform.panx, transform.pany);
  if (flip) {
    ctx.scale(-1, 1);
  }
  ctx.translate(transform.x, transform.y);
  ctx.rotate(deg2rad(settings.boardRotation + (flip && settings.offsetBackRotation ? - 180 : 0)));
  ctx.scale(transform.s, transform.s);
}

function prepareLayer(canvasdict) {
  var flip = (canvasdict.layer === "B");
  for (var c of ["bg", "fab", "silk", "highlight"]) {
    prepareCanvas(canvasdict[c], flip, canvasdict.transform);
  }
}

function rotateVector(v, angle) {
  angle = deg2rad(angle);
  return [
    v[0] * Math.cos(angle) - v[1] * Math.sin(angle),
    v[0] * Math.sin(angle) + v[1] * Math.cos(angle)
  ];
}

function applyRotation(bbox, flip) {
  var corners = [
    [bbox.minx, bbox.miny],
    [bbox.minx, bbox.maxy],
    [bbox.maxx, bbox.miny],
    [bbox.maxx, bbox.maxy],
  ];
  corners = corners.map((v) => rotateVector(v, settings.boardRotation + (flip && settings.offsetBackRotation ? - 180 : 0)));
  return {
    minx: corners.reduce((a, v) => Math.min(a, v[0]), Infinity),
    miny: corners.reduce((a, v) => Math.min(a, v[1]), Infinity),
    maxx: corners.reduce((a, v) => Math.max(a, v[0]), -Infinity),
    maxy: corners.reduce((a, v) => Math.max(a, v[1]), -Infinity),
  }
}

function recalcLayerScale(layerdict, width, height) {
  var flip = (layerdict.layer === "B");
  var bbox = applyRotation(pcbdata.edges_bbox, flip);
  var scalefactor = 0.98 * Math.min(
    width / (bbox.maxx - bbox.minx),
    height / (bbox.maxy - bbox.miny)
  );
  if (scalefactor < 0.1) {
    scalefactor = 1;
  }
  layerdict.transform.s = scalefactor;
  if (flip) {
    layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor + width) * 0.5;
  } else {
    layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor - width) * 0.5;
  }
  layerdict.transform.y = -((bbox.maxy + bbox.miny) * scalefactor - height) * 0.5;
  for (var c of ["bg", "fab", "silk", "highlight"]) {
    canvas = layerdict[c];
    canvas.width = width;
    canvas.height = height;
    canvas.style.width = (width / devicePixelRatio) + "px";
    canvas.style.height = (height / devicePixelRatio) + "px";
  }
}

function redrawCanvas(layerdict) {
  prepareLayer(layerdict);
  drawBackground(layerdict);
  drawHighlightsOnLayer(layerdict);
}

function resizeCanvas(layerdict) {
  var canvasdivid = {
    "F": "frontcanvas",
    "B": "backcanvas"
  } [layerdict.layer];
  var width = document.getElementById(canvasdivid).clientWidth * devicePixelRatio;
  var height = document.getElementById(canvasdivid).clientHeight * devicePixelRatio;
  recalcLayerScale(layerdict, width, height);
  redrawCanvas(layerdict);
}

function resizeAll() {
  resizeCanvas(allcanvas.front);
  resizeCanvas(allcanvas.back);
}

function pointWithinDistanceToSegment(x, y, x1, y1, x2, y2, d) {
  var A = x - x1;
  var B = y - y1;
  var C = x2 - x1;
  var D = y2 - y1;

  var dot = A * C + B * D;
  var len_sq = C * C + D * D;
  var dx, dy;
  if (len_sq == 0) {
    // start and end of the segment coincide
    dx = x - x1;
    dy = y - y1;
  } else {
    var param = dot / len_sq;
    var xx, yy;
    if (param < 0) {
      xx = x1;
      yy = y1;
    } else if (param > 1) {
      xx = x2;
      yy = y2;
    } else {
      xx = x1 + param * C;
      yy = y1 + param * D;
    }
    dx = x - xx;
    dy = y - yy;
  }
  return dx * dx + dy * dy <= d * d;
}

function modulo(n, mod) {
  return ((n % mod) + mod) % mod;
}

function pointWithinDistanceToArc(x, y, xc, yc, radius, startangle, endangle, d) {
  var dx = x - xc;
  var dy = y - yc;
  var r_sq = dx * dx + dy * dy;
  var rmin = Math.max(0, radius - d);
  var rmax = radius + d;

  if (r_sq < rmin * rmin || r_sq > rmax * rmax)
    return false;

  var angle1 = modulo(deg2rad(startangle), 2 * Math.PI);
  var dx1 = xc + radius * Math.cos(angle1) - x;
  var dy1 = yc + radius * Math.sin(angle1) - y;
  if (dx1 * dx1 + dy1 * dy1 <= d * d)
    return true;

  var angle2 = modulo(deg2rad(endangle), 2 * Math.PI);
  var dx2 = xc + radius * Math.cos(angle2) - x;
  var dy2 = yc + radius * Math.sin(angle2) - y;
  if (dx2 * dx2 + dy2 * dy2 <= d * d)
    return true;

  var angle = modulo(Math.atan2(dy, dx), 2 * Math.PI);
  if (angle1 > angle2)
    return (angle >= angle2 || angle <= angle1);
  else
    return (angle >= angle1 && angle <= angle2);
}

function pointWithinPad(x, y, pad) {
  var v = [x - pad.pos[0], y - pad.pos[1]];
  v = rotateVector(v, pad.angle);
  if (pad.offset) {
    v[0] -= pad.offset[0];
    v[1] -= pad.offset[1];
  }
  return emptyContext2d.isPointInPath(getCachedPadPath(pad), ...v);
}

function netHitScan(layer, x, y) {
  // Check track segments
  if (settings.renderTracks && pcbdata.tracks) {
    for (var track of pcbdata.tracks[layer]) {
      if ('radius' in track) {
        if (pointWithinDistanceToArc(x, y, ...track.center, track.radius, track.startangle, track.endangle, track.width / 2)) {
          return track.net;
        }
      } else {
        if (pointWithinDistanceToSegment(x, y, ...track.start, ...track.end, track.width / 2)) {
          return track.net;
        }
      }
    }
  }
  // Check pads
  if (settings.renderPads) {
    for (var footprint of pcbdata.footprints) {
      for (var pad of footprint.pads) {
        if (pad.layers.includes(layer) && pointWithinPad(x, y, pad)) {
          return pad.net;
        }
      }
    }
  }
  return null;
}

function pointWithinFootprintBbox(x, y, bbox) {
  var v = [x - bbox.pos[0], y - bbox.pos[1]];
  v = rotateVector(v, bbox.angle);
  return bbox.relpos[0] <= v[0] && v[0] <= bbox.relpos[0] + bbox.size[0] &&
    bbox.relpos[1] <= v[1] && v[1] <= bbox.relpos[1] + bbox.size[1];
}

function bboxHitScan(layer, x, y) {
  var result = [];
  for (var i = 0; i < pcbdata.footprints.length; i++) {
    var footprint = pcbdata.footprints[i];
    if (footprint.layer == layer) {
      if (pointWithinFootprintBbox(x, y, footprint.bbox)) {
        result.push(i);
      }
    }
  }
  return result;
}

function handlePointerDown(e, layerdict) {
  if (e.button != 0 && e.button != 1) {
    return;
  }
  e.preventDefault();
  e.stopPropagation();

  if (!e.hasOwnProperty("offsetX")) {
    // The polyfill doesn't set this properly
    e.offsetX = e.pageX - e.currentTarget.offsetLeft;
    e.offsetY = e.pageY - e.currentTarget.offsetTop;
  }

  layerdict.pointerStates[e.pointerId] = {
    distanceTravelled: 0,
    lastX: e.offsetX,
    lastY: e.offsetY,
    downTime: Date.now(),
  };
}

function handleMouseClick(e, layerdict) {
  if (!e.hasOwnProperty("offsetX")) {
    // The polyfill doesn't set this properly
    e.offsetX = e.pageX - e.currentTarget.offsetLeft;
    e.offsetY = e.pageY - e.currentTarget.offsetTop;
  }

  var x = e.offsetX;
  var y = e.offsetY;
  var t = layerdict.transform;
  var flip = layerdict.layer === "B";
  if (flip) {
    x = (devicePixelRatio * x / t.zoom - t.panx + t.x) / -t.s;
  } else {
    x = (devicePixelRatio * x / t.zoom - t.panx - t.x) / t.s;
  }
  y = (devicePixelRatio * y / t.zoom - t.y - t.pany) / t.s;
  var v = rotateVector([x, y], -settings.boardRotation + (flip && settings.offsetBackRotation ? - 180 : 0));
  if ("nets" in pcbdata) {
    var net = netHitScan(layerdict.layer, ...v);
    if (net !== highlightedNet) {
      netClicked(net);
    }
  }
  if (highlightedNet === null) {
    var footprints = bboxHitScan(layerdict.layer, ...v);
    if (footprints.length > 0) {
      footprintsClicked(footprints);
    }
  }
}

function handlePointerLeave(e, layerdict) {
  e.preventDefault();
  e.stopPropagation();

  if (!settings.redrawOnDrag) {
    redrawCanvas(layerdict);
  }

  delete layerdict.pointerStates[e.pointerId];
}

function resetTransform(layerdict) {
  layerdict.transform.panx = 0;
  layerdict.transform.pany = 0;
  layerdict.transform.zoom = 1;
  redrawCanvas(layerdict);
}

function handlePointerUp(e, layerdict) {
  if (!e.hasOwnProperty("offsetX")) {
    // The polyfill doesn't set this properly
    e.offsetX = e.pageX - e.currentTarget.offsetLeft;
    e.offsetY = e.pageY - e.currentTarget.offsetTop;
  }

  e.preventDefault();
  e.stopPropagation();

  if (e.button == 2) {
    // Reset pan and zoom on right click.
    resetTransform(layerdict);
    layerdict.anotherPointerTapped = false;
    return;
  }

  // We haven't necessarily had a pointermove event since the interaction started, so make sure we update this now
  var ptr = layerdict.pointerStates[e.pointerId];
  ptr.distanceTravelled += Math.abs(e.offsetX - ptr.lastX) + Math.abs(e.offsetY - ptr.lastY);

  if (e.button == 0 && ptr.distanceTravelled < 10 && Date.now() - ptr.downTime <= 500) {
    if (Object.keys(layerdict.pointerStates).length == 1) {
      if (layerdict.anotherPointerTapped) {
        // This is the second pointer coming off of a two-finger tap
        resetTransform(layerdict);
      } else {
        // This is just a regular tap
        handleMouseClick(e, layerdict);
      }
      layerdict.anotherPointerTapped = false;
    } else {
      // This is the first finger coming off of what could become a two-finger tap
      layerdict.anotherPointerTapped = true;
    }
  } else {
    if (!settings.redrawOnDrag) {
      redrawCanvas(layerdict);
    }
    layerdict.anotherPointerTapped = false;
  }

  delete layerdict.pointerStates[e.pointerId];
}

function handlePointerMove(e, layerdict) {
  if (!layerdict.pointerStates.hasOwnProperty(e.pointerId)) {
    return;
  }
  e.preventDefault();
  e.stopPropagation();

  if (!e.hasOwnProperty("offsetX")) {
    // The polyfill doesn't set this properly
    e.offsetX = e.pageX - e.currentTarget.offsetLeft;
    e.offsetY = e.pageY - e.currentTarget.offsetTop;
  }

  var thisPtr = layerdict.pointerStates[e.pointerId];

  var dx = e.offsetX - thisPtr.lastX;
  var dy = e.offsetY - thisPtr.lastY;

  // If this number is low on pointer up, we count the action as a click
  thisPtr.distanceTravelled += Math.abs(dx) + Math.abs(dy);

  if (Object.keys(layerdict.pointerStates).length == 1) {
    // This is a simple drag
    layerdict.transform.panx += devicePixelRatio * dx / layerdict.transform.zoom;
    layerdict.transform.pany += devicePixelRatio * dy / layerdict.transform.zoom;
  } else if (Object.keys(layerdict.pointerStates).length == 2) {
    var otherPtr = Object.values(layerdict.pointerStates).filter((ptr) => ptr != thisPtr)[0];

    var oldDist = Math.sqrt(Math.pow(thisPtr.lastX - otherPtr.lastX, 2) + Math.pow(thisPtr.lastY - otherPtr.lastY, 2));
    var newDist = Math.sqrt(Math.pow(e.offsetX - otherPtr.lastX, 2) + Math.pow(e.offsetY - otherPtr.lastY, 2));

    var scaleFactor = newDist / oldDist;

    if (scaleFactor != NaN) {
      layerdict.transform.zoom *= scaleFactor;

      var zoomd = (1 - scaleFactor) / layerdict.transform.zoom;
      layerdict.transform.panx += devicePixelRatio * otherPtr.lastX * zoomd;
      layerdict.transform.pany += devicePixelRatio * otherPtr.lastY * zoomd;
    }
  }

  thisPtr.lastX = e.offsetX;
  thisPtr.lastY = e.offsetY;

  if (settings.redrawOnDrag) {
    redrawCanvas(layerdict);
  }
}

function handleMouseWheel(e, layerdict) {
  e.preventDefault();
  e.stopPropagation();
  var t = layerdict.transform;
  var wheeldelta = e.deltaY;
  if (e.deltaMode == 1) {
    // FF only, scroll by lines
    wheeldelta *= 30;
  } else if (e.deltaMode == 2) {
    wheeldelta *= 300;
  }
  var m = Math.pow(1.1, -wheeldelta / 40);
  // Limit amount of zoom per tick.
  if (m > 2) {
    m = 2;
  } else if (m < 0.5) {
    m = 0.5;
  }
  t.zoom *= m;
  var zoomd = (1 - m) / t.zoom;
  t.panx += devicePixelRatio * e.offsetX * zoomd;
  t.pany += devicePixelRatio * e.offsetY * zoomd;
  redrawCanvas(layerdict);
}

function addMouseHandlers(div, layerdict) {
  div.addEventListener("pointerdown", function(e) {
    handlePointerDown(e, layerdict);
  });
  div.addEventListener("pointermove", function(e) {
    handlePointerMove(e, layerdict);
  });
  div.addEventListener("pointerup", function(e) {
    handlePointerUp(e, layerdict);
  });
  var pointerleave = function(e) {
    handlePointerLeave(e, layerdict);
  }
  div.addEventListener("pointercancel", pointerleave);
  div.addEventListener("pointerleave", pointerleave);
  div.addEventListener("pointerout", pointerleave);

  div.onwheel = function(e) {
    handleMouseWheel(e, layerdict);
  }
  for (var element of [div, layerdict.bg, layerdict.fab, layerdict.silk, layerdict.highlight]) {
    element.addEventListener("contextmenu", function(e) {
      e.preventDefault();
    }, false);
  }
}

function setRedrawOnDrag(value) {
  settings.redrawOnDrag = value;
  writeStorage("redrawOnDrag", value);
}

function setBoardRotation(value) {
  settings.boardRotation = value * 5;
  writeStorage("boardRotation", settings.boardRotation);
  document.getElementById("rotationDegree").textContent = settings.boardRotation;
  resizeAll();
}

function setOffsetBackRotation(value) {
  settings.offsetBackRotation = value;
  writeStorage("offsetBackRotation", value);
  resizeAll();
}

function initRender() {
  allcanvas = {
    front: {
      transform: {
        x: 0,
        y: 0,
        s: 1,
        panx: 0,
        pany: 0,
        zoom: 1,
      },
      pointerStates: {},
      anotherPointerTapped: false,
      bg: document.getElementById("F_bg"),
      fab: document.getElementById("F_fab"),
      silk: document.getElementById("F_slk"),
      highlight: document.getElementById("F_hl"),
      layer: "F",
    },
    back: {
      transform: {
        x: 0,
        y: 0,
        s: 1,
        panx: 0,
        pany: 0,
        zoom: 1,
      },
      pointerStates: {},
      anotherPointerTapped: false,
      bg: document.getElementById("B_bg"),
      fab: document.getElementById("B_fab"),
      silk: document.getElementById("B_slk"),
      highlight: document.getElementById("B_hl"),
      layer: "B",
    }
  };
  addMouseHandlers(document.getElementById("frontcanvas"), allcanvas.front);
  addMouseHandlers(document.getElementById("backcanvas"), allcanvas.back);
}

///////////////////////////////////////////////

///////////////////////////////////////////////
/*
 * Table reordering via Drag'n'Drop
 * Inspired by: https://htmldom.dev/drag-and-drop-table-column
 */

function setBomHandlers() {

  const bom = document.getElementById('bomtable');

  let dragName;
  let placeHolderElements;
  let draggingElement;
  let forcePopulation;
  let xOffset;
  let yOffset;
  let wasDragged;

  const mouseUpHandler = function(e) {
    // Delete dragging element
    draggingElement.remove();

    // Make BOM selectable again
    bom.style.removeProperty("user-select");

    // Remove listeners
    document.removeEventListener('mousemove', mouseMoveHandler);
    document.removeEventListener('mouseup', mouseUpHandler);

    if (wasDragged) {
      // Redraw whole BOM
      populateBomTable();
    }
  }

  const mouseMoveHandler = function(e) {
    // Notice the dragging
    wasDragged = true;

    // Make the dragged element visible
    draggingElement.style.removeProperty("display");

    // Set elements position to mouse position
    draggingElement.style.left = `${e.screenX - xOffset}px`;
    draggingElement.style.top = `${e.screenY - yOffset}px`;

    // Forced redrawing of BOM table
    if (forcePopulation) {
      forcePopulation = false;
      // Copy array
      phe = Array.from(placeHolderElements);
      // populate BOM table again
      populateBomHeader(dragName, phe);
      populateBomBody(dragName, phe);
    }

    // Set up array of hidden columns
    var hiddenColumns = Array.from(settings.hiddenColumns);
    // In the ungrouped mode, quantity don't exist
    if (settings.bommode === "ungrouped")
      hiddenColumns.push("Quantity");
    // If no checkbox fields can be found, we consider them hidden
    if (settings.checkboxes.length == 0)
      hiddenColumns.push("checkboxes");

    // Get table headers and group them into checkboxes, extrafields and normal headers
    const bh = document.getElementById("bomhead");
    headers = Array.from(bh.querySelectorAll("th"))
    headers.shift() // numCol is not part of the columnOrder
    headerGroups = []
    lastCompoundClass = null;
    for (i = 0; i < settings.columnOrder.length; i++) {
      cElem = settings.columnOrder[i];
      if (hiddenColumns.includes(cElem)) {
        // Hidden columns appear as a dummy element
        headerGroups.push([]);
        continue;
      }
      elem = headers.filter(e => getColumnOrderName(e) === cElem)[0];
      if (elem.classList.contains("bom-checkbox")) {
        if (lastCompoundClass === "bom-checkbox") {
          cbGroup = headerGroups.pop();
          cbGroup.push(elem);
          headerGroups.push(cbGroup);
        } else {
          lastCompoundClass = "bom-checkbox";
          headerGroups.push([elem])
        }
      } else {
        headerGroups.push([elem])
      }
    }

    // Copy settings.columnOrder
    var columns = Array.from(settings.columnOrder)

    // Set up array with indices of hidden columns
    var hiddenIndices = hiddenColumns.map(e => settings.columnOrder.indexOf(e));
    var dragIndex = columns.indexOf(dragName);
    var swapIndex = dragIndex;
    var swapDone = false;

    // Check if the current dragged element is swapable with the left or right element
    if (dragIndex > 0) {
      // Get left headers boundingbox
      swapIndex = dragIndex - 1;
      while (hiddenIndices.includes(swapIndex) && swapIndex > 0)
        swapIndex--;
      if (!hiddenIndices.includes(swapIndex)) {
        box = getBoundingClientRectFromMultiple(headerGroups[swapIndex]);
        if (e.clientX < box.left + window.scrollX + (box.width / 2)) {
          swapElement = columns[dragIndex];
          columns.splice(dragIndex, 1);
          columns.splice(swapIndex, 0, swapElement);
          forcePopulation = true;
          swapDone = true;
        }
      }
    }
    if ((!swapDone) && dragIndex < headerGroups.length - 1) {
      // Get right headers boundingbox
      swapIndex = dragIndex + 1;
      while (hiddenIndices.includes(swapIndex))
        swapIndex++;
      if (swapIndex < headerGroups.length) {
        box = getBoundingClientRectFromMultiple(headerGroups[swapIndex]);
        if (e.clientX > box.left + window.scrollX + (box.width / 2)) {
          swapElement = columns[dragIndex];
          columns.splice(dragIndex, 1);
          columns.splice(swapIndex, 0, swapElement);
          forcePopulation = true;
          swapDone = true;
        }
      }
    }

    // Write back change to storage
    if (swapDone) {
      settings.columnOrder = columns
      writeStorage("columnOrder", JSON.stringify(columns));
    }

  }

  const mouseDownHandler = function(e) {
    var target = e.target;
    if (target.tagName.toLowerCase() != "td")
      target = target.parentElement;

    // Used to check if a dragging has ever happened
    wasDragged = false;

    // Create new element which will be displayed as the dragged column
    draggingElement = document.createElement("div")
    draggingElement.classList.add("dragging");
    draggingElement.style.display = "none";
    draggingElement.style.position = "absolute";
    draggingElement.style.overflow = "hidden";

    // Get bomhead and bombody elements
    const bh = document.getElementById("bomhead");
    const bb = document.getElementById("bombody");

    // Get all compound headers for the current column
    var compoundHeaders;
    if (target.classList.contains("bom-checkbox")) {
      compoundHeaders = Array.from(bh.querySelectorAll("th.bom-checkbox"));
    } else {
      compoundHeaders = [target];
    }

    // Create new table which will display the column
    var newTable = document.createElement("table");
    newTable.classList.add("bom");
    newTable.style.background = "white";
    draggingElement.append(newTable);

    // Create new header element
    var newHeader = document.createElement("thead");
    newTable.append(newHeader);

    // Set up array for storing all placeholder elements
    placeHolderElements = [];

    // Add all compound headers to the new thead element and placeholders
    compoundHeaders.forEach(function(h) {
      clone = cloneElementWithDimensions(h);
      newHeader.append(clone);
      placeHolderElements.push(clone);
    });

    // Create new body element
    var newBody = document.createElement("tbody");
    newTable.append(newBody);

    // Get indices for compound headers
    var idxs = compoundHeaders.map(e => getBomTableHeaderIndex(e));

    // For each row in the BOM body...
    var rows = bb.querySelectorAll("tr");
    rows.forEach(function(row) {
      // ..get the cells for the compound column
      const tds = row.querySelectorAll("td");
      var copytds = idxs.map(i => tds[i]);
      // Add them to the new element and the placeholders
      var newRow = document.createElement("tr");
      copytds.forEach(function(td) {
        clone = cloneElementWithDimensions(td);
        newRow.append(clone);
        placeHolderElements.push(clone);
      });
      newBody.append(newRow);
    });

    // Compute width for compound header
    var width = compoundHeaders.reduce((acc, x) => acc + x.clientWidth, 0);
    draggingElement.style.width = `${width}px`;

    // Insert the new dragging element and disable selection on BOM
    bom.insertBefore(draggingElement, null);
    bom.style.userSelect = "none";

    // Determine the mouse position offset
    xOffset = e.screenX - compoundHeaders.reduce((acc, x) => Math.min(acc, x.offsetLeft), compoundHeaders[0].offsetLeft);
    yOffset = e.screenY - compoundHeaders[0].offsetTop;

    // Get name for the column in settings.columnOrder
    dragName = getColumnOrderName(target);

    // Change text and class for placeholder elements
    placeHolderElements = placeHolderElements.map(function(e) {
      newElem = cloneElementWithDimensions(e);
      newElem.textContent = "";
      newElem.classList.add("placeholder");
      return newElem;
    });

    // On next mouse move, the whole BOM needs to be redrawn to show the placeholders
    forcePopulation = true;

    // Add listeners for move and up on mouse
    document.addEventListener('mousemove', mouseMoveHandler);
    document.addEventListener('mouseup', mouseUpHandler);
  }

  // In netlist mode, there is nothing to reorder
  if (settings.bommode === "netlist")
    return;

  // Add mouseDownHandler to every column except the numCol
  bom.querySelectorAll("th")
    .forEach(function(head) {
      if (!head.classList.contains("numCol")) {
        head.onmousedown = mouseDownHandler;
      }
    });

}

function getBoundingClientRectFromMultiple(elements) {
  var elems = Array.from(elements);

  if (elems.length == 0)
    return null;

  var box = elems.shift()
    .getBoundingClientRect();

  elems.forEach(function(elem) {
    var elembox = elem.getBoundingClientRect();
    box.left = Math.min(elembox.left, box.left);
    box.top = Math.min(elembox.top, box.top);
    box.width += elembox.width;
    box.height = Math.max(elembox.height, box.height);
  });

  return box;
}

function cloneElementWithDimensions(elem) {
  var newElem = elem.cloneNode(true);
  newElem.style.height = window.getComputedStyle(elem).height;
  newElem.style.width = window.getComputedStyle(elem).width;
  return newElem;
}

function getBomTableHeaderIndex(elem) {
  const bh = document.getElementById('bomhead');
  const ths = Array.from(bh.querySelectorAll("th"));
  return ths.indexOf(elem);
}

function getColumnOrderName(elem) {
  var cname = elem.getAttribute("col_name");
  if (cname === "bom-checkbox")
    return "checkboxes";
  else
    return cname;
}

function resizableGrid(tablehead) {
  var cols = tablehead.firstElementChild.children;
  var rowWidth = tablehead.offsetWidth;

  for (var i = 1; i < cols.length; i++) {
    if (cols[i].classList.contains("bom-checkbox"))
      continue;
    cols[i].style.width = ((cols[i].clientWidth - paddingDiff(cols[i])) * 100 / rowWidth) + '%';
  }

  for (var i = 1; i < cols.length - 1; i++) {
    var div = document.createElement('div');
    div.className = "column-width-handle";
    cols[i].appendChild(div);
    setListeners(div);
  }

  function setListeners(div) {
    var startX, curCol, nxtCol, curColWidth, nxtColWidth, rowWidth;

    div.addEventListener('mousedown', function(e) {
      e.preventDefault();
      e.stopPropagation();

      curCol = e.target.parentElement;
      nxtCol = curCol.nextElementSibling;
      startX = e.pageX;

      var padding = paddingDiff(curCol);

      rowWidth = curCol.parentElement.offsetWidth;
      curColWidth = curCol.clientWidth - padding;
      nxtColWidth = nxtCol.clientWidth - padding;
    });

    document.addEventListener('mousemove', function(e) {
      if (startX) {
        var diffX = e.pageX - startX;
        diffX = -Math.min(-diffX, curColWidth - 20);
        diffX = Math.min(diffX, nxtColWidth - 20);

        curCol.style.width = ((curColWidth + diffX) * 100 / rowWidth) + '%';
        nxtCol.style.width = ((nxtColWidth - diffX) * 100 / rowWidth) + '%';
        console.log(`${curColWidth + nxtColWidth} ${(curColWidth + diffX) * 100 / rowWidth + (nxtColWidth - diffX) * 100 / rowWidth}`);
      }
    });

    document.addEventListener('mouseup', function(e) {
      curCol = undefined;
      nxtCol = undefined;
      startX = undefined;
      nxtColWidth = undefined;
      curColWidth = undefined
    });
  }

  function paddingDiff(col) {

    if (getStyleVal(col, 'box-sizing') == 'border-box') {
      return 0;
    }

    var padLeft = getStyleVal(col, 'padding-left');
    var padRight = getStyleVal(col, 'padding-right');
    return (parseInt(padLeft) + parseInt(padRight));

  }

  function getStyleVal(elm, css) {
    return (window.getComputedStyle(elm, null).getPropertyValue(css))
  }
}

///////////////////////////////////////////////

///////////////////////////////////////////////
/* DOM manipulation and misc code */

var bomsplit;
var canvassplit;
var initDone = false;
var bomSortFunction = null;
var currentSortColumn = null;
var currentSortOrder = null;
var currentHighlightedRowId;
var highlightHandlers = [];
var footprintIndexToHandler = {};
var netsToHandler = {};
var markedFootprints = new Set();
var highlightedFootprints = [];
var highlightedNet = null;
var lastClicked;

function dbg(html) {
  dbgdiv.innerHTML = html;
}

function redrawIfInitDone() {
  if (initDone) {
    redrawCanvas(allcanvas.front);
    redrawCanvas(allcanvas.back);
  }
}

function padsVisible(value) {
  writeStorage("padsVisible", value);
  settings.renderPads = value;
  redrawIfInitDone();
}

function referencesVisible(value) {
  writeStorage("referencesVisible", value);
  settings.renderReferences = value;
  redrawIfInitDone();
}

function valuesVisible(value) {
  writeStorage("valuesVisible", value);
  settings.renderValues = value;
  redrawIfInitDone();
}

function tracksVisible(value) {
  writeStorage("tracksVisible", value);
  settings.renderTracks = value;
  redrawIfInitDone();
}

function zonesVisible(value) {
  writeStorage("zonesVisible", value);
  settings.renderZones = value;
  redrawIfInitDone();
}

function dnpOutline(value) {
  writeStorage("dnpOutline", value);
  settings.renderDnpOutline = value;
  redrawIfInitDone();
}

function setDarkMode(value) {
  if (value) {
    topmostdiv.classList.add("dark");
  } else {
    topmostdiv.classList.remove("dark");
  }
  writeStorage("darkmode", value);
  settings.darkMode = value;
  redrawIfInitDone();
  if (initDone) {
    populateBomTable();
  }
}

function setShowBOMColumn(field, value) {
  if (field === "references") {
    var rl = document.getElementById("reflookup");
    rl.disabled = !value;
    if (!value) {
      rl.value = "";
      updateRefLookup("");
    }
  }

  var n = settings.hiddenColumns.indexOf(field);
  if (value) {
    if (n != -1) {
      settings.hiddenColumns.splice(n, 1);
    }
  } else {
    if (n == -1) {
      settings.hiddenColumns.push(field);
    }
  }

  writeStorage("hiddenColumns", JSON.stringify(settings.hiddenColumns));

  if (initDone) {
    populateBomTable();
  }

  redrawIfInitDone();
}


function setFullscreen(value) {
  if (value) {
    document.documentElement.requestFullscreen();
  } else {
    document.exitFullscreen();
  }
}

function fabricationVisible(value) {
  writeStorage("fabricationVisible", value);
  settings.renderFabrication = value;
  redrawIfInitDone();
}

function silkscreenVisible(value) {
  writeStorage("silkscreenVisible", value);
  settings.renderSilkscreen = value;
  redrawIfInitDone();
}

function setHighlightPin1(value) {
  writeStorage("highlightpin1", value);
  settings.highlightpin1 = value;
  redrawIfInitDone();
}

function setHighlightRowOnClick(value) {
  settings.highlightRowOnClick = value;
  writeStorage("highlightRowOnClick", value);
  if (initDone) {
    populateBomTable();
  }
}

function getStoredCheckboxRefs(checkbox) {
  function convert(ref) {
    var intref = parseInt(ref);
    if (isNaN(intref)) {
      for (var i = 0; i < pcbdata.footprints.length; i++) {
        if (pcbdata.footprints[i].ref == ref) {
          return i;
        }
      }
      return -1;
    } else {
      return intref;
    }
  }
  if (!(checkbox in settings.checkboxStoredRefs)) {
    var val = readStorage("checkbox_" + checkbox);
    settings.checkboxStoredRefs[checkbox] = val ? val : "";
  }
  if (!settings.checkboxStoredRefs[checkbox]) {
    return new Set();
  } else {
    return new Set(settings.checkboxStoredRefs[checkbox].split(",").map(r => convert(r)).filter(a => a >= 0));
  }
}

function getCheckboxState(checkbox, references) {
  var storedRefsSet = getStoredCheckboxRefs(checkbox);
  var currentRefsSet = new Set(references.map(r => r[1]));
  // Get difference of current - stored
  var difference = new Set(currentRefsSet);
  for (ref of storedRefsSet) {
    difference.delete(ref);
  }
  if (difference.size == 0) {
    // All the current refs are stored
    return "checked";
  } else if (difference.size == currentRefsSet.size) {
    // None of the current refs are stored
    return "unchecked";
  } else {
    // Some of the refs are stored
    return "indeterminate";
  }
}

function setBomCheckboxState(checkbox, element, references) {
  var state = getCheckboxState(checkbox, references);
  element.checked = (state == "checked");
  element.indeterminate = (state == "indeterminate");
}

function createCheckboxHandlers(input, checkbox, references, row) {
  var clickHandler = () => {
    refsSet = getStoredCheckboxRefs(checkbox);
    var markWhenChecked = settings.markWhenChecked == checkbox;
    eventArgs = {
      checkbox: checkbox,
      refs: references,
    }
    if (input.checked) {
      // checkbox ticked
      for (var ref of references) {
        refsSet.add(ref[1]);
      }
      if (markWhenChecked) {
        row.classList.add("checked");
        for (var ref of references) {
          markedFootprints.add(ref[1]);
        }
        drawHighlights();
      }
      eventArgs.state = 'checked';
    } else {
      // checkbox unticked
      for (var ref of references) {
        refsSet.delete(ref[1]);
      }
      if (markWhenChecked) {
        row.classList.remove("checked");
        for (var ref of references) {
          markedFootprints.delete(ref[1]);
        }
        drawHighlights();
      }
      eventArgs.state = 'unchecked';
    }
    settings.checkboxStoredRefs[checkbox] = [...refsSet].join(",");
    writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
    updateCheckboxStats(checkbox);
    EventHandler.emitEvent(IBOM_EVENT_TYPES.CHECKBOX_CHANGE_EVENT, eventArgs);
  }

  return [
    (e) => {
      clickHandler();
    },
    (e) => {
      e.preventDefault();
      if (row.onmousemove) row.onmousemove();
    },
    (e) => {
      e.preventDefault();
      input.checked = !input.checked;
      input.indeterminate = false;
      clickHandler();
    }
  ];
}

function clearHighlightedFootprints() {
  if (currentHighlightedRowId) {
    document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
    currentHighlightedRowId = null;
    highlightedFootprints = [];
    highlightedNet = null;
  }
}

function createRowHighlightHandler(rowid, refs, net) {
  return function () {
    if (currentHighlightedRowId) {
      if (currentHighlightedRowId == rowid) {
        return;
      }
      document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
    }
    document.getElementById(rowid).classList.add("highlighted");
    currentHighlightedRowId = rowid;
    highlightedFootprints = refs ? refs.map(r => r[1]) : [];
    highlightedNet = net;
    drawHighlights();
    EventHandler.emitEvent(
      IBOM_EVENT_TYPES.HIGHLIGHT_EVENT, {
      rowid: rowid,
      refs: refs,
      net: net
    });
  }
}

function updateNetColors() {
  writeStorage("netColors", JSON.stringify(settings.netColors));
  redrawIfInitDone();
}

function netColorChangeHandler(net) {
  return (event) => {
    settings.netColors[net] = event.target.value;
    updateNetColors();
  }
}

function netColorRightClick(net) {
  return (event) => {
    if (event.button == 2) {
      event.preventDefault();
      event.stopPropagation();

      var style = getComputedStyle(topmostdiv);
      var defaultNetColor = style.getPropertyValue('--track-color').trim();
      event.target.value = defaultNetColor;
      delete settings.netColors[net];
      updateNetColors();
    }
  }
}

function entryMatches(entry) {
  if (settings.bommode == "netlist") {
    // entry is just a net name
    return entry.toLowerCase().indexOf(filter) >= 0;
  }
  // check refs
  if (!settings.hiddenColumns.includes("References")) {
    for (var ref of entry) {
      if (ref[0].toLowerCase().indexOf(filter) >= 0) {
        return true;
      }
    }
  }
  // check fields
  for (var i in config.fields) {
    var f = config.fields[i];
    if (!settings.hiddenColumns.includes(f)) {
      for (var ref of entry) {
        if (String(pcbdata.bom.fields[ref[1]][i]).toLowerCase().indexOf(filter) >= 0) {
          return true;
        }
      }
    }
  }
  return false;
}

function findRefInEntry(entry) {
  return entry.filter(r => r[0].toLowerCase() == reflookup);
}

function highlightFilter(s) {
  if (!filter) {
    return s;
  }
  var parts = s.toLowerCase().split(filter);
  if (parts.length == 1) {
    return s;
  }
  var r = "";
  var pos = 0;
  for (var i in parts) {
    if (i > 0) {
      r += '<mark class="highlight">' +
        s.substring(pos, pos + filter.length) +
        '</mark>';
      pos += filter.length;
    }
    r += s.substring(pos, pos + parts[i].length);
    pos += parts[i].length;
  }
  return r;
}

function getBomListByLayer(layer) {
  switch (layer) {
    case 'F': return pcbdata.bom.F.slice();
    case 'B': return pcbdata.bom.B.slice();
    case 'FB': return pcbdata.bom.both.slice();
  }
  return [];
}

function getSelectedBomList() {
  if (settings.bommode == "netlist") {
    return pcbdata.nets.slice();
  }
  var out = getBomListByLayer(settings.canvaslayout);

  if (settings.bommode == "ungrouped") {
    // expand bom table
    var expandedTable = [];
    for (var bomentry of out) {
      for (var ref of bomentry) {
        expandedTable.push([ref]);
      }
    }
    return expandedTable;
  }

  return out;
}

function checkboxSetUnsetAllHandler(checkboxname) {
  return function () {
    var checkboxnum = 0;
    while (checkboxnum < settings.checkboxes.length &&
      settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
      checkboxnum++;
    }
    if (checkboxnum >= settings.checkboxes.length) {
      return;
    }
    var allset = true;
    var checkbox;
    var row;
    for (row of bombody.childNodes) {
      checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
      if (!checkbox.checked || checkbox.indeterminate) {
        allset = false;
        break;
      }
    }
    for (row of bombody.childNodes) {
      checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
      checkbox.checked = !allset;
      checkbox.indeterminate = false;
      checkbox.onchange();
    }
  }
}

function createColumnHeader(name, cls, comparator, is_checkbox = false) {
  var th = document.createElement("TH");
  th.innerHTML = name;
  th.classList.add(cls);
  if (is_checkbox)
    th.setAttribute("col_name", "bom-checkbox");
  else
    th.setAttribute("col_name", name);
  var span = document.createElement("SPAN");
  span.classList.add("sortmark");
  span.classList.add("none");
  th.appendChild(span);
  var spacer = document.createElement("div");
  spacer.className = "column-spacer";
  th.appendChild(spacer);
  spacer.onclick = function () {
    if (currentSortColumn && th !== currentSortColumn) {
      // Currently sorted by another column
      currentSortColumn.childNodes[1].classList.remove(currentSortOrder);
      currentSortColumn.childNodes[1].classList.add("none");
      currentSortColumn = null;
      currentSortOrder = null;
    }
    if (currentSortColumn && th === currentSortColumn) {
      // Already sorted by this column
      if (currentSortOrder == "asc") {
        // Sort by this column, descending order
        bomSortFunction = function (a, b) {
          return -comparator(a, b);
        }
        currentSortColumn.childNodes[1].classList.remove("asc");
        currentSortColumn.childNodes[1].classList.add("desc");
        currentSortOrder = "desc";
      } else {
        // Unsort
        bomSortFunction = null;
        currentSortColumn.childNodes[1].classList.remove("desc");
        currentSortColumn.childNodes[1].classList.add("none");
        currentSortColumn = null;
        currentSortOrder = null;
      }
    } else {
      // Sort by this column, ascending order
      bomSortFunction = comparator;
      currentSortColumn = th;
      currentSortColumn.childNodes[1].classList.remove("none");
      currentSortColumn.childNodes[1].classList.add("asc");
      currentSortOrder = "asc";
    }
    populateBomBody();
  }
  if (is_checkbox) {
    spacer.onclick = fancyDblClickHandler(
      spacer, spacer.onclick, checkboxSetUnsetAllHandler(name));
  }
  return th;
}

function populateBomHeader(placeHolderColumn = null, placeHolderElements = null) {
  while (bomhead.firstChild) {
    bomhead.removeChild(bomhead.firstChild);
  }
  var tr = document.createElement("TR");
  var th = document.createElement("TH");
  th.classList.add("numCol");

  var vismenu = document.createElement("div");
  vismenu.id = "vismenu";
  vismenu.classList.add("menu");

  var visbutton = document.createElement("div");
  visbutton.classList.add("visbtn");
  visbutton.classList.add("hideonprint");

  var viscontent = document.createElement("div");
  viscontent.classList.add("menu-content");
  viscontent.id = "vismenu-content";

  settings.columnOrder.forEach(column => {
    if (typeof column !== "string")
      return;

    // Skip empty columns
    if (column === "checkboxes" && settings.checkboxes.length == 0)
      return;
    else if (column === "Quantity" && settings.bommode == "ungrouped")
      return;

    var label = document.createElement("label");
    label.classList.add("menu-label");

    var input = document.createElement("input");
    input.classList.add("visibility_checkbox");
    input.type = "checkbox";
    input.onchange = function (e) {
      setShowBOMColumn(column, e.target.checked)
    };
    input.checked = !(settings.hiddenColumns.includes(column));

    label.appendChild(input);
    if (column.length > 0)
      label.append(column[0].toUpperCase() + column.slice(1));

    viscontent.appendChild(label);
  });

  viscontent.childNodes[0].classList.add("menu-label-top");

  vismenu.appendChild(visbutton);
  if (settings.bommode != "netlist") {
    vismenu.appendChild(viscontent);
    th.appendChild(vismenu);
  }
  tr.appendChild(th);

  var checkboxCompareClosure = function (checkbox) {
    return (a, b) => {
      var stateA = getCheckboxState(checkbox, a);
      var stateB = getCheckboxState(checkbox, b);
      if (stateA > stateB) return -1;
      if (stateA < stateB) return 1;
      return 0;
    }
  }
  var stringFieldCompareClosure = function (fieldIndex) {
    return (a, b) => {
      var fa = pcbdata.bom.fields[a[0][1]][fieldIndex];
      var fb = pcbdata.bom.fields[b[0][1]][fieldIndex];
      if (fa != fb) return fa > fb ? 1 : -1;
      else return 0;
    }
  }
  var referenceRegex = /(?<prefix>[^0-9]+)(?<number>[0-9]+)/;
  var compareRefs = (a, b) => {
    var ra = referenceRegex.exec(a);
    var rb = referenceRegex.exec(b);
    if (ra === null || rb === null) {
      if (a != b) return a > b ? 1 : -1;
      return 0;
    } else {
      if (ra.groups.prefix != rb.groups.prefix) {
        return ra.groups.prefix > rb.groups.prefix ? 1 : -1;
      }
      if (ra.groups.number != rb.groups.number) {
        return parseInt(ra.groups.number) > parseInt(rb.groups.number) ? 1 : -1;
      }
      return 0;
    }
  }
  if (settings.bommode == "netlist") {
    tr.appendChild(createColumnHeader("Net name", "bom-netname", (a, b) => {
      if (a > b) return -1;
      if (a < b) return 1;
      return 0;
    }));
    tr.appendChild(createColumnHeader("Color", "bom-color", (a, b) => {
      return 0;
    }));
  } else {
    // Filter hidden columns
    var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
    var valueIndex = config.fields.indexOf("Value");
    var footprintIndex = config.fields.indexOf("Footprint");
    columns.forEach((column) => {
      if (column === placeHolderColumn) {
        var n = 1;
        if (column === "checkboxes")
          n = settings.checkboxes.length;
        for (i = 0; i < n; i++) {
          td = placeHolderElements.shift();
          tr.appendChild(td);
        }
        return;
      } else if (column === "checkboxes") {
        for (var checkbox of settings.checkboxes) {
          th = createColumnHeader(
            checkbox, "bom-checkbox", checkboxCompareClosure(checkbox), true);
          tr.appendChild(th);
        }
      } else if (column === "References") {
        tr.appendChild(createColumnHeader("References", "references", (a, b) => {
          var i = 0;
          while (i < a.length && i < b.length) {
            if (a[i][0] != b[i][0]) return compareRefs(a[i][0], b[i][0]);
            i++;
          }
          return a.length - b.length;
        }));
      } else if (column === "Value") {
        tr.appendChild(createColumnHeader("Value", "value", (a, b) => {
          var ra = a[0][1], rb = b[0][1];
          return valueCompare(
            pcbdata.bom.parsedValues[ra], pcbdata.bom.parsedValues[rb],
            pcbdata.bom.fields[ra][valueIndex], pcbdata.bom.fields[rb][valueIndex]);
        }));
        return;
      } else if (column === "Footprint") {
        tr.appendChild(createColumnHeader(
          "Footprint", "footprint", stringFieldCompareClosure(footprintIndex)));
      } else if (column === "Quantity" && settings.bommode == "grouped") {
        tr.appendChild(createColumnHeader("Quantity", "quantity", (a, b) => {
          return a.length - b.length;
        }));
      } else {
        // Other fields
        var i = config.fields.indexOf(column);
        if (i < 0)
          return;
        tr.appendChild(createColumnHeader(
          column, `field${i + 1}`, stringFieldCompareClosure(i)));
      }
    });
  }
  bomhead.appendChild(tr);
}

function populateBomBody(placeholderColumn = null, placeHolderElements = null) {
  const urlRegex = /^(https?:\/\/[^\s\/$.?#][^\s]*|file:\/\/([a-zA-Z]:|\/)[^\x00]+)$/;
  while (bom.firstChild) {
    bom.removeChild(bom.firstChild);
  }
  highlightHandlers = [];
  footprintIndexToHandler = {};
  netsToHandler = {};
  currentHighlightedRowId = null;
  var first = true;
  var style = getComputedStyle(topmostdiv);
  var defaultNetColor = style.getPropertyValue('--track-color').trim();

  bomtable = getSelectedBomList();

  if (bomSortFunction) {
    bomtable = bomtable.sort(bomSortFunction);
  }
  for (var i in bomtable) {
    var bomentry = bomtable[i];
    if (filter && !entryMatches(bomentry)) {
      continue;
    }
    var references = null;
    var netname = null;
    var tr = document.createElement("TR");
    var td = document.createElement("TD");
    var rownum = +i + 1;
    tr.id = "bomrow" + rownum;
    td.textContent = rownum;
    tr.appendChild(td);
    if (settings.bommode == "netlist") {
      netname = bomentry;
      td = document.createElement("TD");
      td.innerHTML = highlightFilter(netname ? netname : "&lt;no net&gt;");
      tr.appendChild(td);
      var color = settings.netColors[netname] || defaultNetColor;
      td = document.createElement("TD");
      var colorBox = document.createElement("INPUT");
      colorBox.type = "color";
      colorBox.value = color;
      colorBox.onchange = netColorChangeHandler(netname);
      colorBox.onmouseup = netColorRightClick(netname);
      colorBox.oncontextmenu = (e) => e.preventDefault();
      td.appendChild(colorBox);
      td.classList.add("color-column");
      tr.appendChild(td);
    } else {
      if (reflookup) {
        references = findRefInEntry(bomentry);
        if (references.length == 0) {
          continue;
        }
      } else {
        references = bomentry;
      }
      // Filter hidden columns
      var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
      columns.forEach((column) => {
        if (column === placeholderColumn) {
          var n = 1;
          if (column === "checkboxes")
            n = settings.checkboxes.length;
          for (i = 0; i < n; i++) {
            td = placeHolderElements.shift();
            tr.appendChild(td);
          }
          return;
        } else if (column === "checkboxes") {
          for (var checkbox of settings.checkboxes) {
            if (checkbox) {
              td = document.createElement("TD");
              var input = document.createElement("input");
              input.type = "checkbox";
              [input.onchange, td.ontouchstart, td.ontouchend] = createCheckboxHandlers(input, checkbox, references, tr);
              setBomCheckboxState(checkbox, input, references);
              if (input.checked && settings.markWhenChecked == checkbox) {
                tr.classList.add("checked");
              }
              td.appendChild(input);
              tr.appendChild(td);
            }
          }
        } else if (column === "References") {
          td = document.createElement("TD");
          td.innerHTML = highlightFilter(references.map(r => r[0]).join(", "));
          tr.appendChild(td);
        } else if (column === "Quantity" && settings.bommode == "grouped") {
          // Quantity
          td = document.createElement("TD");
          td.textContent = references.length;
          tr.appendChild(td);
        } else {
          // All the other fields
          var field_index = config.fields.indexOf(column)
          if (field_index < 0)
            return;
          var valueSet = new Set();
          references.map(r => r[1]).forEach((id) => valueSet.add(pcbdata.bom.fields[id][field_index]));
          td = document.createElement("TD");
          var output = new Array();
          for (let item of valueSet) {
            const visible = highlightFilter(String(item));
            if (typeof item === 'string' && item.match(urlRegex)) {
              output.push(`<a href="${item}" target="_blank">${visible}</a>`);
            } else {
              output.push(visible);
            }
          }
          td.innerHTML = output.join(", ");
          tr.appendChild(td);
        }
      });
    }
    bom.appendChild(tr);
    var handler = createRowHighlightHandler(tr.id, references, netname);
    if (settings.highlightRowOnClick) {
      tr.onmousedown = handler;
    } else {
      tr.onmousemove = handler;
    }
    highlightHandlers.push({
      id: tr.id,
      handler: handler,
    });
    if (references !== null) {
      for (var refIndex of references.map(r => r[1])) {
        footprintIndexToHandler[refIndex] = handler;
      }
    }
    if (netname !== null) {
      netsToHandler[netname] = handler;
    }
    if ((filter || reflookup) && first) {
      handler();
      first = false;
    }
  }
  EventHandler.emitEvent(
    IBOM_EVENT_TYPES.BOM_BODY_CHANGE_EVENT, {
    filter: filter,
    reflookup: reflookup,
    checkboxes: settings.checkboxes,
    bommode: settings.bommode,
  });
}

function highlightPreviousRow() {
  if (!currentHighlightedRowId) {
    highlightHandlers[highlightHandlers.length - 1].handler();
  } else {
    if (highlightHandlers.length > 1 &&
      highlightHandlers[0].id == currentHighlightedRowId) {
      highlightHandlers[highlightHandlers.length - 1].handler();
    } else {
      for (var i = 0; i < highlightHandlers.length - 1; i++) {
        if (highlightHandlers[i + 1].id == currentHighlightedRowId) {
          highlightHandlers[i].handler();
          break;
        }
      }
    }
  }
  smoothScrollToRow(currentHighlightedRowId);
}

function highlightNextRow() {
  if (!currentHighlightedRowId) {
    highlightHandlers[0].handler();
  } else {
    if (highlightHandlers.length > 1 &&
      highlightHandlers[highlightHandlers.length - 1].id == currentHighlightedRowId) {
      highlightHandlers[0].handler();
    } else {
      for (var i = 1; i < highlightHandlers.length; i++) {
        if (highlightHandlers[i - 1].id == currentHighlightedRowId) {
          highlightHandlers[i].handler();
          break;
        }
      }
    }
  }
  smoothScrollToRow(currentHighlightedRowId);
}

function populateBomTable() {
  populateBomHeader();
  populateBomBody();
  setBomHandlers();
  resizableGrid(bomhead);
}

function footprintsClicked(footprintIndexes) {
  var lastClickedIndex = footprintIndexes.indexOf(lastClicked);
  for (var i = 1; i <= footprintIndexes.length; i++) {
    var refIndex = footprintIndexes[(lastClickedIndex + i) % footprintIndexes.length];
    if (refIndex in footprintIndexToHandler) {
      lastClicked = refIndex;
      footprintIndexToHandler[refIndex]();
      smoothScrollToRow(currentHighlightedRowId);
      break;
    }
  }
}

function netClicked(net) {
  if (net in netsToHandler) {
    netsToHandler[net]();
    smoothScrollToRow(currentHighlightedRowId);
  } else {
    clearHighlightedFootprints();
    highlightedNet = net;
    drawHighlights();
  }
}

function updateFilter(input) {
  filter = input.toLowerCase();
  populateBomTable();
}

function updateRefLookup(input) {
  reflookup = input.toLowerCase();
  populateBomTable();
}

function changeCanvasLayout(layout) {
  document.getElementById("fl-btn").classList.remove("depressed");
  document.getElementById("fb-btn").classList.remove("depressed");
  document.getElementById("bl-btn").classList.remove("depressed");
  switch (layout) {
    case 'F':
      document.getElementById("fl-btn").classList.add("depressed");
      if (settings.bomlayout != "bom-only") {
        canvassplit.collapse(1);
      }
      break;
    case 'B':
      document.getElementById("bl-btn").classList.add("depressed");
      if (settings.bomlayout != "bom-only") {
        canvassplit.collapse(0);
      }
      break;
    default:
      document.getElementById("fb-btn").classList.add("depressed");
      if (settings.bomlayout != "bom-only") {
        canvassplit.setSizes([50, 50]);
      }
  }
  settings.canvaslayout = layout;
  writeStorage("canvaslayout", layout);
  resizeAll();
  changeBomMode(settings.bommode);
}

function populateMetadata() {
  document.getElementById("title").innerHTML = pcbdata.metadata.title;
  document.getElementById("revision").innerHTML = "Rev: " + pcbdata.metadata.revision;
  document.getElementById("company").innerHTML = pcbdata.metadata.company;
  document.getElementById("filedate").innerHTML = pcbdata.metadata.date;
  if (pcbdata.metadata.title != "") {
    document.title = pcbdata.metadata.title + " BOM";
  }
  // Calculate board stats
  var fp_f = 0,
    fp_b = 0,
    pads_f = 0,
    pads_b = 0,
    pads_th = 0;
  for (var i = 0; i < pcbdata.footprints.length; i++) {
    if (pcbdata.bom.skipped.includes(i)) continue;
    var mod = pcbdata.footprints[i];
    if (mod.layer == "F") {
      fp_f++;
    } else {
      fp_b++;
    }
    for (var pad of mod.pads) {
      if (pad.type == "th") {
        pads_th++;
      } else {
        if (pad.layers.includes("F")) {
          pads_f++;
        }
        if (pad.layers.includes("B")) {
          pads_b++;
        }
      }
    }
  }
  document.getElementById("stats-components-front").innerHTML = fp_f;
  document.getElementById("stats-components-back").innerHTML = fp_b;
  document.getElementById("stats-components-total").innerHTML = fp_f + fp_b;
  document.getElementById("stats-groups-front").innerHTML = pcbdata.bom.F.length;
  document.getElementById("stats-groups-back").innerHTML = pcbdata.bom.B.length;
  document.getElementById("stats-groups-total").innerHTML = pcbdata.bom.both.length;
  document.getElementById("stats-smd-pads-front").innerHTML = pads_f;
  document.getElementById("stats-smd-pads-back").innerHTML = pads_b;
  document.getElementById("stats-smd-pads-total").innerHTML = pads_f + pads_b;
  document.getElementById("stats-th-pads").innerHTML = pads_th;
  // Update version string
  document.getElementById("github-link").innerHTML = "InteractiveHtmlBom&nbsp;" +
    /^v\d+\.\d+/.exec(pcbdata.ibom_version)[0];
}

function changeBomLayout(layout) {
  document.getElementById("bom-btn").classList.remove("depressed");
  document.getElementById("lr-btn").classList.remove("depressed");
  document.getElementById("tb-btn").classList.remove("depressed");
  switch (layout) {
    case 'bom-only':
      document.getElementById("bom-btn").classList.add("depressed");
      if (bomsplit) {
        bomsplit.destroy();
        bomsplit = null;
        canvassplit.destroy();
        canvassplit = null;
      }
      document.getElementById("frontcanvas").style.display = "none";
      document.getElementById("backcanvas").style.display = "none";
      document.getElementById("topmostdiv").style.height = "";
      document.getElementById("topmostdiv").style.display = "block";
      break;
    case 'top-bottom':
      document.getElementById("tb-btn").classList.add("depressed");
      document.getElementById("frontcanvas").style.display = "";
      document.getElementById("backcanvas").style.display = "";
      document.getElementById("topmostdiv").style.height = "100%";
      document.getElementById("topmostdiv").style.display = "flex";
      document.getElementById("bomdiv").classList.remove("split-horizontal");
      document.getElementById("canvasdiv").classList.remove("split-horizontal");
      document.getElementById("frontcanvas").classList.add("split-horizontal");
      document.getElementById("backcanvas").classList.add("split-horizontal");
      if (bomsplit) {
        bomsplit.destroy();
        bomsplit = null;
        canvassplit.destroy();
        canvassplit = null;
      }
      bomsplit = Split(['#bomdiv', '#canvasdiv'], {
        sizes: [50, 50],
        onDragEnd: resizeAll,
        direction: "vertical",
        gutterSize: 5
      });
      canvassplit = Split(['#frontcanvas', '#backcanvas'], {
        sizes: [50, 50],
        gutterSize: 5,
        onDragEnd: resizeAll
      });
      break;
    case 'left-right':
      document.getElementById("lr-btn").classList.add("depressed");
      document.getElementById("frontcanvas").style.display = "";
      document.getElementById("backcanvas").style.display = "";
      document.getElementById("topmostdiv").style.height = "100%";
      document.getElementById("topmostdiv").style.display = "flex";
      document.getElementById("bomdiv").classList.add("split-horizontal");
      document.getElementById("canvasdiv").classList.add("split-horizontal");
      document.getElementById("frontcanvas").classList.remove("split-horizontal");
      document.getElementById("backcanvas").classList.remove("split-horizontal");
      if (bomsplit) {
        bomsplit.destroy();
        bomsplit = null;
        canvassplit.destroy();
        canvassplit = null;
      }
      bomsplit = Split(['#bomdiv', '#canvasdiv'], {
        sizes: [50, 50],
        onDragEnd: resizeAll,
        gutterSize: 5
      });
      canvassplit = Split(['#frontcanvas', '#backcanvas'], {
        sizes: [50, 50],
        gutterSize: 5,
        direction: "vertical",
        onDragEnd: resizeAll
      });
  }
  settings.bomlayout = layout;
  writeStorage("bomlayout", layout);
  changeCanvasLayout(settings.canvaslayout);
}

function changeBomMode(mode) {
  document.getElementById("bom-grouped-btn").classList.remove("depressed");
  document.getElementById("bom-ungrouped-btn").classList.remove("depressed");
  document.getElementById("bom-netlist-btn").classList.remove("depressed");
  var chkbxs = document.getElementsByClassName("visibility_checkbox");

  switch (mode) {
    case 'grouped':
      document.getElementById("bom-grouped-btn").classList.add("depressed");
      for (var i = 0; i < chkbxs.length; i++) {
        chkbxs[i].disabled = false;
      }
      break;
    case 'ungrouped':
      document.getElementById("bom-ungrouped-btn").classList.add("depressed");
      for (var i = 0; i < chkbxs.length; i++) {
        chkbxs[i].disabled = false;
      }
      break;
    case 'netlist':
      document.getElementById("bom-netlist-btn").classList.add("depressed");
      for (var i = 0; i < chkbxs.length; i++) {
        chkbxs[i].disabled = true;
      }
  }

  writeStorage("bommode", mode);
  if (mode != settings.bommode) {
    settings.bommode = mode;
    bomSortFunction = null;
    currentSortColumn = null;
    currentSortOrder = null;
    clearHighlightedFootprints();
  }
  populateBomTable();
}

function focusFilterField() {
  focusInputField(document.getElementById("filter"));
}

function focusRefLookupField() {
  focusInputField(document.getElementById("reflookup"));
}

function toggleBomCheckbox(bomrowid, checkboxnum) {
  if (!bomrowid || checkboxnum > settings.checkboxes.length) {
    return;
  }
  var bomrow = document.getElementById(bomrowid);
  var childNum = checkboxnum + settings.columnOrder.indexOf("checkboxes");
  var checkbox = bomrow.childNodes[childNum].childNodes[0];
  checkbox.checked = !checkbox.checked;
  checkbox.indeterminate = false;
  checkbox.onchange();
}

function checkBomCheckbox(bomrowid, checkboxname) {
  var checkboxnum = 0;
  while (checkboxnum < settings.checkboxes.length &&
    settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
    checkboxnum++;
  }
  if (!bomrowid || checkboxnum >= settings.checkboxes.length) {
    return;
  }
  var bomrow = document.getElementById(bomrowid);
  var childNum = checkboxnum + 1 + settings.columnOrder.indexOf("checkboxes");
  var checkbox = bomrow.childNodes[childNum].childNodes[0];
  checkbox.checked = true;
  checkbox.indeterminate = false;
  checkbox.onchange();
}

function setBomCheckboxes(value) {
  writeStorage("bomCheckboxes", value);
  settings.checkboxes = value.split(",").map((e) => e.trim()).filter((e) => e);
  prepCheckboxes();
  populateMarkWhenCheckedOptions();
  setMarkWhenChecked(settings.markWhenChecked);
}

function setMarkWhenChecked(value) {
  writeStorage("markWhenChecked", value);
  settings.markWhenChecked = value;
  markedFootprints.clear();
  for (var ref of (value ? getStoredCheckboxRefs(value) : [])) {
    markedFootprints.add(ref);
  }
  populateBomTable();
  drawHighlights();
}

function prepCheckboxes() {
  var table = document.getElementById("checkbox-stats");
  while (table.childElementCount > 1) {
    table.removeChild(table.lastChild);
  }
  if (settings.checkboxes.length) {
    table.style.display = "";
  } else {
    table.style.display = "none";
  }
  for (var checkbox of settings.checkboxes) {
    var tr = document.createElement("TR");
    var td = document.createElement("TD");
    td.innerHTML = checkbox;
    tr.appendChild(td);
    td = document.createElement("TD");
    td.id = "checkbox-stats-" + checkbox;
    var progressbar = document.createElement("div");
    progressbar.classList.add("bar");
    td.appendChild(progressbar);
    var text = document.createElement("div");
    text.classList.add("text");
    td.appendChild(text);
    tr.appendChild(td);
    table.appendChild(tr);
    updateCheckboxStats(checkbox);
  }
}

function populateMarkWhenCheckedOptions() {
  var container = document.getElementById("markWhenCheckedContainer");

  if (settings.checkboxes.length == 0) {
    container.parentElement.style.display = "none";
    return;
  }

  container.innerHTML = '';
  container.parentElement.style.display = "inline-block";

  function createOption(name, displayName) {
    var id = "markWhenChecked-" + name;

    var div = document.createElement("div");
    div.classList.add("radio-container");

    var input = document.createElement("input");
    input.type = "radio";
    input.name = "markWhenChecked";
    input.value = name;
    input.id = id;
    input.onchange = () => setMarkWhenChecked(name);
    div.appendChild(input);

    // Preserve the selected element when the checkboxes change
    if (name == settings.markWhenChecked) {
      input.checked = true;
    }

    var label = document.createElement("label");
    label.innerHTML = displayName;
    label.htmlFor = id;
    div.appendChild(label);

    container.appendChild(div);
  }
  createOption("", "None");
  for (var checkbox of settings.checkboxes) {
    createOption(checkbox, checkbox);
  }
}

function updateCheckboxStats(checkbox) {
  var checked = getStoredCheckboxRefs(checkbox).size;
  var total = pcbdata.footprints.length - pcbdata.bom.skipped.length;
  var percent = checked * 100.0 / total;
  var td = document.getElementById("checkbox-stats-" + checkbox);
  td.firstChild.style.width = percent + "%";
  td.lastChild.innerHTML = checked + "/" + total + " (" + Math.round(percent) + "%)";
}

function constrain(number, min, max) {
  return Math.min(Math.max(parseInt(number), min), max);
}

document.onkeydown = function (e) {
  switch (e.key) {
    case "n":
      if (document.activeElement.type == "text") {
        return;
      }
      if (currentHighlightedRowId !== null) {
        checkBomCheckbox(currentHighlightedRowId, "placed");
        highlightNextRow();
        e.preventDefault();
      }
      break;
    case "ArrowUp":
      highlightPreviousRow();
      e.preventDefault();
      break;
    case "ArrowDown":
      highlightNextRow();
      e.preventDefault();
      break;
    case "ArrowLeft":
    case "ArrowRight":
      if (document.activeElement.type != "text") {
        e.preventDefault();
        let boardRotationElement = document.getElementById("boardRotation")
        settings.boardRotation = parseInt(boardRotationElement.value);  // degrees / 5
        if (e.key == "ArrowLeft") {
          settings.boardRotation += 3;  // 15 degrees
        }
        else {
          settings.boardRotation -= 3;
        }
        settings.boardRotation = constrain(settings.boardRotation, boardRotationElement.min, boardRotationElement.max);
        boardRotationElement.value = settings.boardRotation
        setBoardRotation(settings.boardRotation);
      }
      break;
    default:
      break;
  }
  if (e.altKey) {
    switch (e.key) {
      case "f":
        focusFilterField();
        e.preventDefault();
        break;
      case "r":
        focusRefLookupField();
        e.preventDefault();
        break;
      case "z":
        changeBomLayout("bom-only");
        e.preventDefault();
        break;
      case "x":
        changeBomLayout("left-right");
        e.preventDefault();
        break;
      case "c":
        changeBomLayout("top-bottom");
        e.preventDefault();
        break;
      case "v":
        changeCanvasLayout("F");
        e.preventDefault();
        break;
      case "b":
        changeCanvasLayout("FB");
        e.preventDefault();
        break;
      case "n":
        changeCanvasLayout("B");
        e.preventDefault();
        break;
      default:
        break;
    }
    if (e.key >= '1' && e.key <= '9') {
      toggleBomCheckbox(currentHighlightedRowId, parseInt(e.key));
      e.preventDefault();
    }
  }
}

function hideNetlistButton() {
  document.getElementById("bom-ungrouped-btn").classList.remove("middle-button");
  document.getElementById("bom-ungrouped-btn").classList.add("right-most-button");
  document.getElementById("bom-netlist-btn").style.display = "none";
}

function topToggle() {
  var top = document.getElementById("top");
  var toptoggle = document.getElementById("toptoggle");
  if (top.style.display === "none") {
    top.style.display = "flex";
    toptoggle.classList.remove("flipped");
  } else {
    top.style.display = "none";
    toptoggle.classList.add("flipped");
  }
}

window.onload = function (e) {
  initRender();
  initStorage();
  initDefaults();
  initUtils();
  cleanGutters();
  populateMetadata();
  dbgdiv = document.getElementById("dbg");
  bom = document.getElementById("bombody");
  bomhead = document.getElementById("bomhead");
  filter = "";
  reflookup = "";
  if (!("nets" in pcbdata)) {
    hideNetlistButton();
  }
  initDone = true;
  setBomCheckboxes(document.getElementById("bomCheckboxes").value);
  // Triggers render
  changeBomLayout(settings.bomlayout);

  // Users may leave fullscreen without touching the checkbox. Uncheck.
  document.addEventListener('fullscreenchange', () => {
    if (!document.fullscreenElement)
      document.getElementById('fullscreenCheckbox').checked = false;
  });
}

window.onresize = resizeAll;
window.matchMedia("print").addListener(resizeAll);

///////////////////////////////////////////////

///////////////////////////////////////////////

///////////////////////////////////////////////
  </script>
</head>

<body>

<div id="topmostdiv" class="topmostdiv">
  <div id="top">
    <div id="fileinfodiv">
      <table class="fileinfo">
        <tbody>
          <tr>
            <td id="title" class="title" style="width: 70%">
              Title
            </td>
            <td id="revision" class="title" style="width: 30%">
              Revision
            </td>
          </tr>
          <tr>
            <td id="company">
              Company
            </td>
            <td id="filedate">
              Date
            </td>
          </tr>
        </tbody>
      </table>
    </div>
    <div id="bomcontrols">
      <div class="hideonprint menu">
        <button class="menubtn"></button>
        <div class="menu-content">
          <label class="menu-label menu-label-top" style="width: calc(50% - 18px)">
            <input id="darkmodeCheckbox" type="checkbox" onchange="setDarkMode(this.checked)">
            Dark mode
          </label><!-- This comment eats space! All of it!
          --><label class="menu-label menu-label-top" style="width: calc(50% - 17px); border-left: 0;">
            <input id="fullscreenCheckbox" type="checkbox" onchange="setFullscreen(this.checked)">
            Full Screen
          </label>
          <label class="menu-label" style="width: calc(50% - 18px)">
            <input id="fabricationCheckbox" type="checkbox" checked onchange="fabricationVisible(this.checked)">
            Fab layer
          </label><!-- This comment eats space! All of it!
          --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
            <input id="silkscreenCheckbox" type="checkbox" checked onchange="silkscreenVisible(this.checked)">
            Silkscreen
          </label>
          <label class="menu-label" style="width: calc(50% - 18px)">
            <input id="referencesCheckbox" type="checkbox" checked onchange="referencesVisible(this.checked)">
            References
          </label><!-- This comment eats space! All of it!
          --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
            <input id="valuesCheckbox" type="checkbox" checked onchange="valuesVisible(this.checked)">
            Values
          </label>
          <div id="tracksAndZonesCheckboxes">
            <label class="menu-label" style="width: calc(50% - 18px)">
              <input id="tracksCheckbox" type="checkbox" checked onchange="tracksVisible(this.checked)">
              Tracks
            </label><!-- This comment eats space! All of it!
            --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
              <input id="zonesCheckbox" type="checkbox" checked onchange="zonesVisible(this.checked)">
              Zones
            </label>
          </div>
          <label class="menu-label" style="width: calc(50% - 18px)">
            <input id="padsCheckbox" type="checkbox" checked onchange="padsVisible(this.checked)">
            Pads
          </label><!-- This comment eats space! All of it!
          --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
            <input id="dnpOutlineCheckbox" type="checkbox" checked onchange="dnpOutline(this.checked)">
            DNP outlined
          </label>
          <label class="menu-label">
            <input id="highlightRowOnClickCheckbox" type="checkbox" checked onchange="setHighlightRowOnClick(this.checked)">
            Highlight row on click
          </label>
          <label class="menu-label">
            <input id="dragCheckbox" type="checkbox" checked onchange="setRedrawOnDrag(this.checked)">
            Continuous redraw on drag
          </label>
          <label class="menu-label">
            Highlight first pin
            <form id="highlightpin1">
              <div class="flexbox">
                <label>
                  <input type="radio" name="highlightpin1" value="none" onchange="setHighlightPin1('none')">
                  None
                </label>
                <label>
                  <input type="radio" name="highlightpin1" value="all" onchange="setHighlightPin1('all')">
                  All
                </label>
                <label>
                  <input type="radio" name="highlightpin1" value="selected" onchange="setHighlightPin1('selected')">
                  Selected
                </label>
              </div>
            </form>
          </label>
          <label class="menu-label">
            <span>Board rotation</span>
            <span style="float: right"><span id="rotationDegree">0</span>&#176;</span>
            <input id="boardRotation" type="range" min="-36" max="36" value="0" class="slider" oninput="setBoardRotation(this.value)">
          </label>
          <label class="menu-label">
            <input id="offsetBackRotationCheckbox" type="checkbox" onchange="setOffsetBackRotation(this.checked)">
            Offset back rotation
          </label>
          <label class="menu-label">
            <div style="margin-left: 5px">Bom checkboxes</div>
            <input id="bomCheckboxes" class="menu-textbox" type=text
                   oninput="setBomCheckboxes(this.value)">
          </label>
          <label class="menu-label">
            <div style="margin-left: 5px">Mark when checked</div>
            <div id="markWhenCheckedContainer"></div>
          </label>
          <label class="menu-label">
            <span class="shameless-plug">
              <span>Created using</span>
              <a id="github-link" target="blank" href="https://github.com/openscopeproject/InteractiveHtmlBom">InteractiveHtmlBom</a>
              <a target="blank" title="Mouse and keyboard help" href="https://github.com/openscopeproject/InteractiveHtmlBom/wiki/Usage#bom-page-mouse-actions" style="text-decoration: none;"><label class="help-link">?</label></a>
            </span>
          </label>
        </div>
      </div>
      <div class="button-container hideonprint">
        <button id="fl-btn" class="left-most-button" onclick="changeCanvasLayout('F')"
                title="Front only">F
        </button>
        <button id="fb-btn" class="middle-button" onclick="changeCanvasLayout('FB')"
                title="Front and Back">FB
        </button>
        <button id="bl-btn" class="right-most-button" onclick="changeCanvasLayout('B')"
                title="Back only">B
        </button>
      </div>
      <div class="button-container hideonprint">
        <button id="bom-btn" class="left-most-button" onclick="changeBomLayout('bom-only')"
                title="BOM only"></button>
        <button id="lr-btn" class="middle-button" onclick="changeBomLayout('left-right')"
                title="BOM left, drawings right"></button>
        <button id="tb-btn" class="right-most-button" onclick="changeBomLayout('top-bottom')"
                title="BOM top, drawings bot"></button>
      </div>
      <div class="button-container hideonprint">
        <button id="bom-grouped-btn" class="left-most-button" onclick="changeBomMode('grouped')"
                title="Grouped BOM"></button>
        <button id="bom-ungrouped-btn" class="middle-button" onclick="changeBomMode('ungrouped')"
                title="Ungrouped BOM"></button>
        <button id="bom-netlist-btn" class="right-most-button" onclick="changeBomMode('netlist')"
                title="Netlist"></button>
      </div>
      <div class="hideonprint menu">
        <button class="statsbtn"></button>
        <div class="menu-content">
          <table class="stats">
            <tbody>
              <tr>
                <td width="40%">Board stats</td>
                <td>Front</td>
                <td>Back</td>
                <td>Total</td>
              </tr>
              <tr>
                <td>Components</td>
                <td id="stats-components-front">~</td>
                <td id="stats-components-back">~</td>
                <td id="stats-components-total">~</td>
              </tr>
              <tr>
                <td>Groups</td>
                <td id="stats-groups-front">~</td>
                <td id="stats-groups-back">~</td>
                <td id="stats-groups-total">~</td>
              </tr>
              <tr>
                <td>SMD pads</td>
                <td id="stats-smd-pads-front">~</td>
                <td id="stats-smd-pads-back">~</td>
                <td id="stats-smd-pads-total">~</td>
              </tr>
              <tr>
                <td>TH pads</td>
                <td colspan=3 id="stats-th-pads">~</td>
              </tr>
            </tbody>
          </table>
          <table class="stats">
            <col width="40%"/><col />
            <tbody id="checkbox-stats">
              <tr>
                <td colspan=2 style="border-top: 0">Checkboxes</td>
              </tr>
            </tbody>
          </table>
        </div>
      </div>
      <div class="hideonprint menu">
        <button class="iobtn"></button>
        <div class="menu-content">
          <div class="menu-label menu-label-top">
            <div style="margin-left: 5px;">Save board image</div>
            <div class="flexbox">
              <input id="render-save-width" class="menu-textbox" type="text" value="1000" placeholder="Width"
                  style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
              <span>X</span>
              <input id="render-save-height" class="menu-textbox" type="text" value="1000" placeholder="Height"
                  style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
            </div>
            <label>
              <input id="render-save-transparent" type="checkbox">
              Transparent background
            </label>
            <div class="flexbox">
              <button class="savebtn" onclick="saveImage('F')">Front</button>
              <button class="savebtn" onclick="saveImage('B')">Back</button>
            </div>
          </div>
          <div class="menu-label">
            <span style="margin-left: 5px;">Config and checkbox state</span>
            <div class="flexbox">
              <button class="savebtn" onclick="saveSettings()">Export</button>
              <button class="savebtn" onclick="loadSettings()">Import</button>
              <button class="savebtn" onclick="resetSettings()">Reset</button>
            </div>
          </div>
          <div class="menu-label">
            <span style="margin-left: 5px;">Save bom table as</span>
            <div class="flexbox">
              <button class="savebtn" onclick="saveBomTable('csv')">csv</button>
              <button class="savebtn" onclick="saveBomTable('txt')">txt</button>
            </div>
          </div>
        </div>
      </div>
    </div>
  </div>
  <div id="topdivider">
    <div class="hideonprint">
      <div id="toptoggle" onclick="topToggle()">︽</div>
    </div>
  </div>
  <div id="bot" class="split" style="flex: 1 1">
    <div id="bomdiv" class="split split-horizontal">
      <div style="width: 100%">
        <input id="reflookup" class="textbox searchbox reflookup hideonprint" type="text" placeholder="Ref lookup"
               oninput="updateRefLookup(this.value)">
        <input id="filter" class="textbox searchbox filter hideonprint" type="text" placeholder="Filter"
               oninput="updateFilter(this.value)">
        <div class="button-container hideonprint" style="float: left; margin: 0;">
          <button id="copy" title="Copy bom table to clipboard"
               onclick="saveBomTable('clipboard')"></button>
        </div>
      </div>
      <div id="dbg"></div>
      <table class="bom" id="bomtable">
        <thead id="bomhead">
        </thead>
        <tbody id="bombody">
        </tbody>
      </table>
    </div>
    <div id="canvasdiv" class="split split-horizontal">
      <div id="frontcanvas" class="split" touch-action="none" style="overflow: hidden">
        <div style="position: relative; width: 100%; height: 100%;">
          <canvas id="F_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
          <canvas id="F_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
          <canvas id="F_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
          <canvas id="F_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
        </div>
      </div>
      <div id="backcanvas" class="split" touch-action="none" style="overflow: hidden">
        <div style="position: relative; width: 100%; height: 100%;">
          <canvas id="B_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
          <canvas id="B_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
          <canvas id="B_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
          <canvas id="B_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
        </div>
      </div>
    </div>
  </div>
</div>

</body>

</html>