rusefi_documentation/ibom-backup/hw48na_V0.4.html

3582 lines
259 KiB
HTML

<!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-color-highlight: #D04040;
--pin1-outline-color: #ffb629;
--pin1-outline-color-highlight: #b4ff03;
--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: 10px 10px 10px 0px;
}
.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: 5px;
}
.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;
}
.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: #aaa;
}
.dark .bom tr.checked {
color: #666;
}
.bom tr {
transition: background-color 0.2s;
}
.bom .numCol {
width: 25px;
}
.bom .Description {
width: 10%;
}
.bom .Part {
width: 10%;
}
.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;
}
.dark .statsbtn, .dark .savebtn, .dark .menubtn, .dark .iobtn {
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: 10px 10px 10px 0px;
}
.menu-content {
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 {
width: 100%;
height: 100%;
background-color: white;
transition: background-color 0.3s;
}
#top {
height: 78px;
border-bottom: 2px solid black;
}
.dark #top {
border-bottom: 2px solid #ccc;
}
#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;
}
</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 = {"show_fabrication": false, "redraw_on_drag": true, "highlight_pin1": false, "extra_fields": [], "dark_mode": false, "bom_view": "left-right", "board_rotation": 0.0, "checkboxes": "Sourced,Placed", "show_silkscreen": true, "show_pads": true, "layer_view": "FB"}
///////////////////////////////////////////////
///////////////////////////////////////////////
var pcbdata = JSON.parse(LZString.decompressFromBase64("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dpkfm3uXz50AWx+V+08flH+SL5Hkmn+an5RhlKKY6Jv7nX+UpZDUK5+Qe0qnn68Ur5IPnF+ag5U5n1Od256vlTmOoyULk1+RQFL3bGuRAFHXF0iXGpUgWmki356/kR+TVp7fmTeXduk6kqBVO5+PnVbkx5IbmLeVk5GqkLOUe5VvmKuCoFNPkSIdgFGhmD+Qe5ZLkWBUv5bPlqMqv5nLkIeZBZSfl5eaf5N3kfRHoFj7kH+em5HTnH+c95YvnSecoybNnsBT6pnAXFuaspm2TpecB5VXkCBcD5Rfn0maX5YgXv6Ub5/gWf+ZjEoAWyBeAJdfl2uXExugXpeab56gWUBZoFE3nLCT1hrXnEeRe5dgUseWcZZgXLuc4FUAWSBWUFmAXrOSwxuAlE+er+WVlseT650fk5BRt5ZAXRyQUF30Ai8VH5O/mC3ioFonlpuZrpnXlPeTtJL3l+Nt7g+bns2aupxXlxBYp5bgW8BRW5APnVeYX5t0kl+aIFDblEBRTZU5gUsq25sPmeBahZoQUoBQAFLgWTqdcFKLkhjK35+vkN+Z35jmGvBXj5vflGBXO5obnbCUgFTvnmBYv57QWKuNcFNgXbua2pfQUFGR65OznO+W0F4gXj+R9ErwXnud/5hdmTBVQFVzk0BVcFe/mZeVAxEwVGuXX5W/kGOWsF7eDTGRn5sQUKeXK51DkbeUkFCvlHBUC5mnlg+W/5zwW5YbkFrTnC+Yn55vnVBXy59IVFMuUFdwXWWd4F9fm9eZYFaIV1BaB0c3kscW65QIWM+YfZLQWPBYQFbhmuBacynQUMQJ75Q7KNBfO5wIX4BYmJqoUy2dkFgoUh+Tx5cbnEhXppJ/kP0X4FpoVskvQFPIVdec854QWvecSykvmfeRrx33m5yXaFHnIHBfn52jahqUIF6QVnBdGphvnEBYq4YQBV+QZ5DAX3BUwFeHkShRyF9+HN+e8FFQVjeVUFSPnFqX+okYUXTtO5uG59+fT57an6hY75XrldqUMF2PlTmNmFwXnT+XAFcIW4BQA5RqkreSz5iYVxqZWFIkkeBTr5XWmb+dd5eIURhQSFQvmphYUFf/k3uS6FFIWmslEFVelyedL52fl2uIkFlXlMhSkFxwW1uSIFv5nnBYH5lwW9hTAFX/mOhcsF//kG+RcF47kVhZ0Fw3kfBfGFlvnfBS2F0oWAybKF2knyhSYFfDnKhf/5RoWZ2cd5WYWahYG523n5hfAF/QXYcY4FjYWj+WGF64VgEaQF5oVh+Yf5V7nOhSl5MwVJhZuFcfnbhRNpYQX5ebm5l/HjhWzJ0rlZ+Zfph7L7Bf85cVEF+SyFL/msOS45avmohRvIr7KjLCPIbbkDhfypQ4X2eXuFa4UHhfEYpEXy0moFIoUK6eAFWgU1BUHejEUq0i/k/wU9BQt5A/nVqct5C/lNhRCF9GRcRbzw0IUz+YWFioXz+WNJyIVZBeGFYkW66PLSa/ksRZ2F/HlkhSUFSd7iRYWKgvlPuWBFxnkPBdm5I4WrTt7gkgmbBZOFnoUy+c7eOkVfCnOFXxFP+cr5oPlp2ar5KIXQeYAgtkWY8tyFlEUkhdRFPXlnhURF7kVtwJ5FNlzChR2FQzlJeSM5XwWiRSRFykU8MvUF14WWSbeFAkX+GUJFckXghWgF2kVxRS9SWoVYBZ+FtYXZfngFv4XCRf+F+4USBQxF2UU6ciBF5AUGRaxFGkXdhcMFsUUXak+KDoU+RVUAormaRR6phwDuhWhFXAUlucFFlUU1Unn5OEUBhSq5rIUuRYRFbkUvhbVwoX5kRdX5MYWGRXGFpnkJhYFF00UgdKtSTEUphWpFEUVihcUFk9EsYZmSrVI8RQS5fEXJRb75szmk+SWF5PllhZKFG8izRZUkkkU1hTgFhUX1hQaFVHkiRVNFy/n0ZPdFGYqqReFF3Lk8+dQFjUUzRYdFZ9L7+Q0xloWXRU6FovmIRdJ5MXLp+cI5vUU7BXSFIMUbRehSjIUORbhFNbnjRaC5rkUKRYBFd0WgxYIsW4VtRVDFO4WCqdFFn0XqhQkMaMUvUseFpMXwRY8FtEWpCV9FhMW0xWXSCUVSRXt5CIWcMQ+FkAlPhZ3Z1MXiYV9pgbIe+XlFAIU++fb5OSn++RG5q0WsxajFIsVfSq0A53nbRQDFXYXTBYAFICg/RcTFsEUMxbkpJnkrBSZF+ZHrcgjFH3lIxbSFP3nrRYrF5Sp+hSNFvomCBWkFiVkZBauFxoWKRRvIe7xRhRRFqsVy8X5FmPkrRVTFU9EexfkRW0X/RZd5bEX8hfWpqGEU8jmFBgWv/nS5Z0VSxSS5fMUEBfJFrvlJ3kHFVYW0+a65zHl6hTJFDYUlRVpFzt4ZxW2FXPmQxYzFxkWQRZrF5PI28hl5/YXexfD5BsUVxSwFmdGEou85V/nIxZbFDPLRxff5yQWnTmNF+EXOOctZVcXxGBnFbXlwRQTpu4WUxfjF9EX0ZMXFYUVgBfx5e0WRxXxkNvKwBdnFxgUpRRR5aUXM+aVFaoWBxd3Fm3nixadFOcUKhXP5+cXpRR9F08XlRbPFB8VjBWNSC8WRRT4FNoU9hTfFq8X3eePFuTG7SdcRFvJtxTSFXoWbqe7FB8XDRdHJjkVBhU7FIYUe2ZD5vWggWYoKjcAK2Q3FRkUUxf7FV8XERcHoMCXy0t96EMW1RepFj8XihQFFmUXmPugl3EWlvhLF/fnnRfu5ZMWDBQLFKKmuPkQlEkVZ1IYJ+UXPRaX+RUXD+QH5rsUExWglBEgqRZQCJ4UIRb4FL8Wz2dwlYMWLAnrFHUW8ud/FVIWIxdsFFsXehVwlNLy5ckPoKgmLhTjF9XnshXLF1MW+GFL0cRHwJTl5vsVRRcglAEUzxRYY2ECarPgZktp8JUzFU8VpxW+hDLpz/iQlx8UbxeQlDgWUJRF57CXPhfLF8KQMupu5jCWkJQWF3MULuTjJI/mFxRo+piWxXBoCEqk4eei59UUaxc2FPhhhJSSM5by6JYVJ+iVPxSn5mdE3GShF1snmxf/F0xFaJWYlqh6ijoGFjsXo2QRFQ8VxJfJ0pwjeivNFH8UFqRHFgiXB6NogjIqqBSHFD8W7RQoFHEUgfun8rirHRTO5fiVfhfCFgSWAOVdFSIUZRWP5QUXyCt0lU/lZxS2pvQXMJUP+rCVUJanFZUWoJR7kVSV2Cn9FbSUQRQIlwMVrJVMlgrmEhUOytfmpJQJ5zcW5uZ9x37lS+VZF04WVJfsl8vmYxaNFDsUnBcuF79m7Jado6yVskt5F9cV6JY3FSCX4JSglEyUPyHcl88VlxRPFfyWQBQQlGj5NJWZEa8WzJfxFziWCRcnFhoXLJXvFF6EfJZiSuUXdBVBxsIXzJeQBiyVuJbLFAcVopXcld8WUclslMMU7JVBFUKXopfMFC0W6+UtFhsWwxa6FKvGXJR6FIDGyJQAljSXopeW52EUgJVjF4HnORbjFk0UApWtFvsAMitUl0YW1JeN5GYVUpUfoXop2CsxFocU2acLp7EX7RR2h8qUxxbxF2KVzJfYFiKV6OaMll8U2JRw54qXHCv0RtgVMJbql/2FIyagFIqWeJWKlGqUcuaXF2CU7Rdslz8VvJXykDqW1xfpFwQWPeeXFw4VMpRSFewqmxRZFVyXspbkl8F4mpb8MCyLzhX3FTyVLhbU5zsWhhSslEyWHCs0lY8ViJUUFHSUChatenqUgpc6lasWLxVmly8WgJGOKbo5XhVzFCAWvRcWFPnmlhdQl11kRpbmlXQWMeY4lgIV3hfphj4UopRwlxiU5paWlZ3kWhfmlYcUxJUDFsqUlpWml78UZpSclnUXfxYE5ZsUyJeGl6qW9pcAl98WgJSUlCjnquWX5FSVgxJ6lNSUTpb8lNEXWJcmloqVPSL2laPl6xSDJMqW3RR2evaV/BSdF2qXwpYnF4XmUeU4FYyVGpW45paWPRevFraWbxWVZvnmdpdjZbsVXpc0lJcWYhYa5VoX8JW6lI6Vbpb2lgQVYJT6lCfnQxcwF77nnJaPZIaVspeupNyVQZUBlGMWgefylz/kq+cKlRiXXxenoDqXppd8lKSV7pf5FEKW2pdTF54i9pXmlcGVeBXyFF6XnhW+laaWcxU9FlqVbxUil70W7xSzFNGXdGEBlYsVYpSCJ96Wz+V55xUUXxbxl/6WcJavEvaWkpeCK5KWIZWLx7qXJdKWltKVSpQm5qwWmRdjgbAUThaGl6GUYRcelQGVLpWSlK6XPJQmlECUb2UoFZ4i+IIUg+ipexUqlPyWIJfulhiWHpXalRAC2Zd6Kp6VkZZUFKqX1JZmFEEoGIj0luYX/7halTQUXRVpB+qVghYaliSnTEXJKdmXTJeal/SUFRSwlVaVsJYSl1GVxZZ5lGyXthYpl1oXKZZBl7EjZZYklhyW5qsclFGXJeWcl0nlEqVUZOSXWRRw5xWU9xTGlRSX9xfhl5SUaJVllQWWfJXq5GmV+ZcxlHWXwXo1lIAUgZRbp7SWqpcWlhXRdZWWlJHmfpZLFYmUO+a4lMsU2pa+ljXRTZYfFwmXzeQnF82XSxcpRGWWEZaslHUhrZfJl/gp5ZeBlBWXDxUVlU2XqZbulzmULqUbFiwxZer/F8nnzpQ1la2UmZQplZmXxpVp5UtkqZVPUB0p+Mg5l5WW3ZX7F/yX7ZRMlf2XxSgDS3mWOZRoFfWXpqeWFxzT7SpDlcLK9JXmFyWW4pT45Qk5PpX+FnSV8/kjlIIofpXClW2XSRWfFb0XPpTFldEVEZZN0cUo8ypsloKWfxcOlF2WxSly8V8rgxVl5A6UIJQylTcVIZdJ5YZm1ZXOl9WWm0TTl6MX2RThljyWpBeZl32Xt2b9l+OVPil8lMOW/+RVlBiWg5W5l1MUQ5UeK62wjZbh5y0Uq5ailrtEs5fFFMoUVpd+FJPmRZcgFHaUvpbFlsdEG5TlF74Ve+ejlnGU/pbWlf6VNeSaF1OU25VVFysX9pQxl4EUUpRBlTOXu5f9lSoq6xT5lcgWkhRIlmdGdmayldWUYZUXRHuVDRXwFhwULhXhFbWUauQHlYqH1cBKlgOWgpfIF42UNJRnlVMrBxTIFHOUb+YWleeUBZQXlf8r6BVqlImXE5QElRYWLZbtly2VW5Ym+M6iTqmalMIU6peFlFCVLJZbllOUHZbbKmeU5ZU6lPuWiha6l52Wbpat0heUHJXXFCuVh5ZOlEeW5ufOiT2VThYZlmFBt5Zqq0aUPJfbFEuVfZWyFeMVg5Uel6+VD5d1l+QUl5eRlwOXK5VRlh+XuZcfl0+XDZZYlk8WuZXrlDb4b5fsg7GWzZWQlD6XNBVFlrQV95XxlmtFv5RilduU6hWFlucWk5RJlO8UhJXlIJ+Xoql7loEWj5XVFuCWdRbaFr3BAFddloeWDhUrlaSVK8Uvl73moZTHla+WUylXl72UnZZ9lqiWv+QflquWa0Tr4WeW3BXPlWBWX5SO5B6X95eDltBUKpa0l9OV1Jf1lkKXySOwVmqW3pbXlJ8VtpVjl28XBJWqlDb78FZnFSWUtpXNlJOXiZellzeWsFUflv8peZZz5WuXRJcgVDUWFZa3KsBVepUEFiwUZubyFfuXpJUvl5kXRBVsF7cUcpTQVehXYZY/5uGVORcIFFmUrhUmlyhW35aoV5ory5UDlXOXgpYoFDFl5/vfl9GWGFbZ5TGXw5ZelmsxSFbCluoWnxQoVZuWghX/lFOUAFXchUhXrZc2ld6V15ZWl+3lM+eIVqBURFXoVx2W8SqdljKWUpenlDziRFeOlmBVURdgVpyU85a6Fa0Qr5dclRBUpFaQVhRXkFQPF66WZBTflauWHXHQVxeWIFe3RJyVLxfnlZxwkAUXldKU4JWNl/mUI5YZZfCoCFX0lshVf5dtlScW/5SqFLuU0JQdxsxXSFZ3lomXyFQtlveWJFdJl3aVBKpsVwGWP5f6lJRWT5bwq4KH6FbBlwRW+pWClmEkBpdpls+gNFWGlguW3caMVTWXb5ZuJcaUUFWUlaeWXFQDxmxWkZQwVVRVMFXgl1+XUFbFJJxVBFWc5jpmTFTwV4yUqFT0VhYwf5UTlwhXfpaYFKxUW5QcVgsUjcTCVTaUfhQ7l3eUuJfsVUmWu5QBlxxXXFQUVgapFFdzlE+UDZRsV4KEYFaCVvkXVFVOlkeW6ZahFAuWx5VcV3ootFbSVbRWp5RuljJW0/mMq9mX0Fd4VxhWfBc/lXaVU5Tmo4pVjFWcVLmW65UkVfUmKlS55NeWbZRiVCKWpRdxl5OXklesVYpVTZYTl0RUiFSzhORXDFRP0GpWnFWelUwWM5YCVCpVrZTBl7OX9FSmpC+VfxZHlkrnSJVYVL2XmFDaVdhVQMUKVgqVqJVQVbhXUxVMhMKUkxZUVbJXglUMVKmWRlYkq9MUxlWBlViWylR4lEZUalVEVYBUxFXsV+sXm5fzFaxX1peqVa2VCZWkVQhVOJd/lEWUEpUoVcpUD5aMqR2XVReMF5+W+ZerFDpWilf6VV2UVFayV7UXh5Z6VubkbBRYVlkVvFbyV0Ko2lQKVNoHBlU4VUuXg+QmVBiy9FeMV7pXVFfGVOhXQqvOVHBV9FXcV8JWhFU8FMUVrlYkYwWWxxcblgyUN5XEVIyXRZYaVxZXnKQeViWXbFRkVJuX4pUtlN0WOlYPh8arxebllXBU4hZXFL5UT9OuVJWWz5VKVCGX5ZbgV0nlSJbOlvpXvFe8of5VfFWLlO+UqJe0V9bmuFXWVEyVxqmOleQUaFSEFPhUqlZCV4ZXTEahV3oqwlQa5o2U7lczFGZV4VdBV2ZXEleAVsRX5lfEVqxX/5WRVkyHQVakVRJULFf4lmRU8xdkV7iUUlTJlr5VAZTSVNoGflZpluIVzlTeVIMytRSmVjeVflVVlroX9WT6Vf8WQVUokzFUTlYD54uXwVcKVnRVQlX1J6twSlZuVcJWMBdKVp4U4VchVR+XeIWoViqV0lb4VuOXvKDpVcxVo5WxVAyV1hVkVSoXYlYWVDFV4lTUp78ympSF5HGUklQphXUl7ZVpVtP62VY6lGFVDuVoVsSUdla4oIVU3Fa6VW5UGVUBVZ2UgVa6FhXnyVc9lilWY9DFVgZVHJVOVwYUuFZAl1mXRVV5Vp+VhVfBl5MXYVX4VzXlFVROqSZXWuXaV0qVhFSxl1VUJZd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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 copyToClipboard() {
var text = '';
for (var node of bomhead.childNodes[0].childNodes) {
if (node.firstChild) {
text = text + node.firstChild.nodeValue;
}
if (node != bomhead.childNodes[0].lastChild) {
text += '\t';
}
}
text += '\n';
for (var row of bombody.childNodes) {
for (var cell of row.childNodes) {
for (var node of cell.childNodes) {
if (node.nodeName == "INPUT") {
if (node.checked) {
text = text + '✓';
}
} else if (node.nodeName == "MARK") {
text = text + node.firstChild.nodeValue;
} else {
text = text + node.nodeValue;
}
}
if (cell != row.lastChild) {
text += '\t';
}
}
text += '\n';
}
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 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,
}
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.*)?$", "");
for (var bom_type of ["both", "F", "B"]) {
for (var row of pcbdata.bom[bom_type]) {
row.push(parseValue(row[1], row[3][0][0]));
}
}
}
function parseValue(val, ref) {
var inferUnit = (unit, ref) => {
if (unit) {
unit = unit.toLowerCase();
if (unit == 'Ω' || unit == "ohm" || unit == "ohms") {
unit = 'r';
}
unit = unit[0];
} else {
ref = /^([a-z]+)\d+$/i.exec(ref);
if (ref) {
ref = ref[1].toLowerCase();
if (ref == "c") unit = 'f';
else if (ref == "l") unit = 'h';
else if (ref == "r" || ref == "rv") unit = 'r';
else unit = null;
}
}
return unit;
};
val = val.replace(/,/g, "");
var match = units.valueRegex.exec(val);
var unit;
if (match) {
val = parseFloat(match[1]);
if (match[2]) {
val = val * units.getMultiplier(match[2]);
}
unit = inferUnit(match[3], ref);
if (!unit) return null;
else return {
val: val,
unit: unit,
extra: match[4],
}
}
match = units.valueAltRegex.exec(val);
if (match && (match[1] || match[4])) {
val = parseFloat(match[1] + "." + match[4]);
if (match[3]) {
val = val * units.getMultiplier(match[3]);
}
unit = inferUnit(match[2], ref);
if (!unit) return null;
else return {
val: val,
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 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("darkenWhenChecked", settings.darkenWhenChecked);
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;
setDarkMode(settings.darkMode);
document.getElementById("darkmodeCheckbox").checked = settings.darkMode;
setHighlightPin1(settings.highlightpin1);
document.getElementById("highlightpin1Checkbox").checked = settings.highlightpin1;
writeStorage("boardRotation", settings.boardRotation);
document.getElementById("boardRotation").value = settings.boardRotation / 5;
document.getElementById("rotationDegree").textContent = settings.boardRotation;
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: "default",
bomlayout: "default",
bommode: "grouped",
checkboxes: [],
checkboxStoredRefs: {},
darkMode: false,
highlightpin1: false,
redrawOnDrag: true,
boardRotation: 0,
renderPads: true,
renderReferences: true,
renderValues: true,
renderSilkscreen: true,
renderFabrication: true,
renderDnpOutline: false,
renderTracks: true,
renderZones: true,
}
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 (!["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;
settings.darkenWhenChecked = readStorage("darkenWhenChecked") || "";
populateDarkenWhenCheckedOptions();
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("darkmode", config.dark_mode, "darkmodeCheckbox", setDarkMode);
initBooleanSetting("highlightpin1", config.highlight_pin1, "highlightpin1Checkbox", setHighlightPin1);
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;
}
// Helper classes for user js callbacks.
const IBOM_EVENT_TYPES = {
ALL: "all",
HIGHLIGHT_EVENT: "highlightEvent",
CHECKBOX_CHANGE_EVENT: "checkboxChangeEvent",
}
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
];
// Adding half a line height here is technically a bug
// but pcbnew currently does the same, text is slightly shifted.
point[0] -= (point[1] + text.height * 0.5) * tilt;
return point;
}
function drawtext(ctx, text, color, flip) {
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";
ctx.lineWidth = text.thickness;
if (text.svgpath) {
ctx.stroke(new Path2D(text.svgpath));
ctx.restore();
return;
}
ctx.translate(...text.pos);
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) / 2;
var txt = text.text.split("\n");
// KiCad ignores last empty line.
if (txt[txt.length - 1] == '') txt.pop();
ctx.rotate(deg2rad(angle));
for (var i in txt) {
var offsety = (-(txt.length - 1) + i * 2) * interline + text.height / 2;
var lineWidth = 0;
for (var c of txt[i]) {
if (c == '\t') {
var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
lineWidth += fourSpaces - lineWidth % fourSpaces;
} else {
lineWidth += pcbdata.font_data[c].w * text.width;
}
}
var offsetx = 0;
switch (text.horiz_justify) {
case -1:
// Justify left, do nothing
break;
case 0:
// Justify center
offsetx -= lineWidth / 2;
break;
case 1:
// Justify right
offsetx -= lineWidth;
break;
}
for (var c of txt[i]) {
if (c == '\t') {
var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
offsetx += fourSpaces - offsetx % fourSpaces;
continue;
}
for (var line of pcbdata.font_data[c].l) {
ctx.beginPath();
ctx.moveTo(...calcFontPoint(line[0], text, offsetx, offsety, tilt));
for (var i = 1; i < line.length; i++) {
ctx.lineTo(...calcFontPoint(line[i], text, offsetx, offsety, tilt));
}
ctx.stroke();
}
offsetx += pcbdata.font_data[c].w * text.width;
}
}
ctx.restore();
}
function drawedge(ctx, scalefactor, edge, color) {
ctx.strokeStyle = color;
ctx.lineWidth = Math.max(1 / scalefactor, edge.width);
ctx.lineCap = "round";
if (edge.svgpath) {
ctx.stroke(new Path2D(edge.svgpath));
} else {
ctx.beginPath();
if (edge.type == "segment") {
ctx.moveTo(...edge.start);
ctx.lineTo(...edge.end);
}
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);
}
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 (shape.svgpath) {
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, shape, color) {
ctx.save();
ctx.fillStyle = color;
if (!shape.svgpath) {
ctx.translate(...shape.pos);
ctx.rotate(deg2rad(-shape.angle));
}
ctx.fill(getPolygonsPath(shape));
ctx.restore();
}
function drawDrawing(ctx, layer, scalefactor, drawing, color) {
if (["segment", "arc", "circle", "curve"].includes(drawing.type)) {
drawedge(ctx, scalefactor, drawing, color);
} else if (drawing.type == "polygon") {
drawPolygonShape(ctx, drawing, color);
} else {
drawtext(ctx, drawing, color, layer == "B");
}
}
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, hole) {
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);
}
if (pad.type == "th" && hole) {
if (pad.offset) {
ctx.translate(-pad.offset[0], -pad.offset[1]);
}
ctx.fillStyle = "#CCCCCC";
if (pad.drillshape == "oblong") {
ctx.fill(getOblongPath(pad.drillsize));
} else {
ctx.fill(getCirclePath(pad.drillsize[0] / 2));
}
}
ctx.restore();
}
function drawModule(ctx, layer, scalefactor, module, padcolor, outlinecolor, highlight, outline) {
if (highlight) {
// draw bounding box
if (module.layer == layer) {
ctx.save();
ctx.globalAlpha = 0.2;
ctx.translate(...module.bbox.pos);
ctx.rotate(deg2rad(-module.bbox.angle));
ctx.translate(...module.bbox.relpos);
ctx.fillStyle = padcolor;
ctx.fillRect(0, 0, ...module.bbox.size);
ctx.globalAlpha = 1;
ctx.strokeStyle = padcolor;
ctx.strokeRect(0, 0, ...module.bbox.size);
ctx.restore();
}
}
// draw drawings
for (var drawing of module.drawings) {
if (drawing.layer == layer) {
drawDrawing(ctx, layer, scalefactor, drawing.drawing, padcolor);
}
}
// draw pads
if (settings.renderPads) {
for (var pad of module.pads) {
if (pad.layers.includes(layer)) {
drawPad(ctx, pad, padcolor, outline, true);
if (pad.pin1 && settings.highlightpin1) {
drawPad(ctx, pad, outlinecolor, true, false);
}
}
}
}
}
function drawEdgeCuts(canvas, scalefactor) {
var ctx = canvas.getContext("2d");
var edgecolor = getComputedStyle(topmostdiv).getPropertyValue('--pcb-edge-color');
for (var edge of pcbdata.edges) {
drawedge(ctx, scalefactor, edge, edgecolor);
}
}
function drawModules(canvas, layer, scalefactor, highlight) {
var ctx = canvas.getContext("2d");
ctx.lineWidth = 3 / scalefactor;
var style = getComputedStyle(topmostdiv);
var padcolor = style.getPropertyValue('--pad-color');
var outlinecolor = style.getPropertyValue('--pin1-outline-color');
if (highlight) {
padcolor = style.getPropertyValue('--pad-color-highlight');
outlinecolor = style.getPropertyValue('--pin1-outline-color-highlight');
}
for (var i = 0; i < pcbdata.modules.length; i++) {
var mod = pcbdata.modules[i];
var outline = settings.renderDnpOutline && pcbdata.bom.skipped.includes(i);
if (!highlight || highlightedModules.includes(i)) {
drawModule(ctx, layer, scalefactor, mod, padcolor, outlinecolor, highlight, outline);
}
}
}
function drawBgLayer(layername, canvas, layer, scalefactor, edgeColor, polygonColor, textColor) {
var ctx = canvas.getContext("2d");
for (var d of pcbdata[layername][layer]) {
if (["segment", "arc", "circle", "curve"].includes(d.type)) {
drawedge(ctx, scalefactor, d, edgeColor);
} else if (d.type == "polygon") {
drawPolygonShape(ctx, d, polygonColor);
} else {
drawtext(ctx, d, textColor, layer == "B");
}
}
}
function drawTracks(canvas, layer, color, highlight) {
ctx = canvas.getContext("2d");
ctx.strokeStyle = color;
ctx.lineCap = "round";
for(var track of pcbdata.tracks[layer]) {
if (highlight && highlightedNet != track.net) continue;
ctx.lineWidth = track.width;
ctx.beginPath();
ctx.moveTo(...track.start);
ctx.lineTo(...track.end);
ctx.stroke();
}
}
function drawZones(canvas, layer, color, highlight) {
ctx = canvas.getContext("2d");
ctx.strokeStyle = color;
ctx.fillStyle = color;
ctx.lineJoin = "round";
for(var zone of pcbdata.zones[layer]) {
if (!zone.path2d) {
zone.path2d = getPolygonsPath(zone);
}
if (highlight && highlightedNet != zone.net) continue;
ctx.lineWidth = zone.width ? zone.width : 0;
ctx.fill(zone.path2d);
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 {
ctx.clearRect(0, 0, canvas.width, canvas.height);
}
ctx.restore();
}
function drawNets(canvas, layer, highlight) {
var style = getComputedStyle(topmostdiv);
if (settings.renderTracks) {
var trackColor = style.getPropertyValue(highlight ? '--track-color-highlight' : '--track-color');
drawTracks(canvas, layer, trackColor, highlight);
}
if (settings.renderZones) {
var zoneColor = style.getPropertyValue(highlight ? '--zone-color-highlight' : '--zone-color');
drawZones(canvas, layer, zoneColor, highlight);
}
if (highlight && settings.renderPads) {
var padColor = style.getPropertyValue('--pad-color-highlight');
var ctx = canvas.getContext("2d");
for (var mod of pcbdata.modules) {
// draw pads
for (var pad of mod.pads) {
if (highlightedNet != pad.net) continue;
if (pad.layers.includes(layer)) {
drawPad(ctx, pad, padColor, false, true);
}
}
}
}
}
function drawHighlightsOnLayer(canvasdict, clear = true) {
if (clear) {
clearCanvas(canvasdict.highlight);
}
if (highlightedModules.length > 0) {
drawModules(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);
drawModules(canvasdict.bg, canvasdict.layer,
canvasdict.transform.s * canvasdict.transform.zoom, false);
drawEdgeCuts(canvasdict.bg, canvasdict.transform.s);
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);
var fontsize = 1.55;
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));
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) {
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));
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 bbox = applyRotation(pcbdata.edges_bbox);
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;
var flip = (layerdict.layer == "B");
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 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 (pointWithinDistanceToSegment(x, y, ...track.start, ...track.end, track.width / 2)) {
return track.net;
}
}
}
// Check pads
if (settings.renderPads) {
for (var mod of pcbdata.modules) {
for(var pad of mod.pads) {
if (pad.layers.includes(layer) && pointWithinPad(x, y, pad)) {
return pad.net;
}
}
}
}
return null;
}
function pointWithinModuleBbox(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.modules.length; i++) {
var module = pcbdata.modules[i];
if (module.layer == layer) {
if (pointWithinModuleBbox(x, y, module.bbox)) {
result.push(i);
}
}
}
return result;
}
function handlePointerDown(e, layerdict) {
if (e.button != 0) {
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;
if (layerdict.layer == "B") {
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);
if ("nets" in pcbdata) {
var net = netHitScan(layerdict.layer, ...v);
if (net !== highlightedNet) {
netClicked(net);
}
}
if (highlightedNet === null) {
var modules = bboxHitScan(layerdict.layer, ...v);
if (modules.length > 0) {
modulesClicked(modules);
}
}
}
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 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);
}
///////////////////////////////////////////////
///////////////////////////////////////////////
/* 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 moduleIndexToHandler = {};
var netsToHandler = {};
var highlightedModules = [];
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();
}
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 getStoredCheckboxRefs(checkbox) {
function convert(ref) {
var intref = parseInt(ref);
if (isNaN(intref)) {
for (var i = 0; i < pcbdata.modules.length; i++) {
if (pcbdata.modules[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 createCheckboxChangeHandler(checkbox, references) {
return function(evt) {
refsSet = getStoredCheckboxRefs(checkbox);
var darkenWhenChecked = settings.darkenWhenChecked == checkbox;
eventArgs = {
checkbox: checkbox,
refs: references,
}
if (this.checked) {
// checkbox ticked
for (var ref of references) {
refsSet.add(ref[1]);
}
if (darkenWhenChecked) {
evt.target.parentElement.parentElement.classList.add("checked");
}
eventArgs.state = 'checked';
} else {
// checkbox unticked
for (var ref of references) {
refsSet.delete(ref[1]);
}
if (darkenWhenChecked) {
evt.target.parentElement.parentElement.classList.remove("checked");
}
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);
}
}
function clearHighlightedModules() {
if (currentHighlightedRowId) {
document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
currentHighlightedRowId = null;
highlightedModules = [];
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;
highlightedModules = refs ? refs.map(r => r[1]) : [];
highlightedNet = net;
drawHighlights();
EventHandler.emitEvent(
IBOM_EVENT_TYPES.HIGHLIGHT_EVENT,
{
rowid: rowid,
refs: refs,
net: net
});
}
}
function entryMatches(entry) {
if (settings.bommode == "netlist") {
// entry is just a net name
return entry.toLowerCase().indexOf(filter) >= 0;
}
// check refs
for (var ref of entry[3]) {
if (ref[0].toLowerCase().indexOf(filter) >= 0) {
return true;
}
}
// check extra fields
for (var i in config.extra_fields) {
if (entry[4][i].toLowerCase().indexOf(filter) >= 0) {
return true;
}
}
// check value
if (entry[1].toLowerCase().indexOf(filter) >= 0) {
return true;
}
// check footprint
if (entry[2].toLowerCase().indexOf(filter) >= 0) {
return true;
}
return false;
}
function findRefInEntry(entry) {
return entry[3].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 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) {
var th = document.createElement("TH");
th.innerHTML = name;
th.classList.add(cls);
th.style.cursor = "pointer";
var span = document.createElement("SPAN");
span.classList.add("sortmark");
span.classList.add("none");
th.appendChild(span);
th.onclick = function() {
if (currentSortColumn && this !== currentSortColumn) {
// Currently sorted by another column
currentSortColumn.childNodes[1].classList.remove(currentSortOrder);
currentSortColumn.childNodes[1].classList.add("none");
currentSortColumn = null;
currentSortOrder = null;
}
if (currentSortColumn && this === 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 = this;
currentSortColumn.childNodes[1].classList.remove("none");
currentSortColumn.childNodes[1].classList.add("asc");
currentSortOrder = "asc";
}
populateBomBody();
}
return th;
}
function populateBomHeader() {
while (bomhead.firstChild) {
bomhead.removeChild(bomhead.firstChild);
}
var tr = document.createElement("TR");
var th = document.createElement("TH");
th.classList.add("numCol");
tr.appendChild(th);
var checkboxCompareClosure = function(checkbox) {
return (a, b) => {
var stateA = getCheckboxState(checkbox, a[3]);
var stateB = getCheckboxState(checkbox, b[3]);
if (stateA > stateB) return -1;
if (stateA < stateB) return 1;
return 0;
}
}
if (settings.bommode == "netlist") {
th = createColumnHeader("Net name", "bom-netname", (a, b) => {
if (a > b) return -1;
if (a < b) return 1;
return 0;
});
tr.appendChild(th);
} else {
for (var checkbox of settings.checkboxes) {
th = createColumnHeader(
checkbox, "bom-checkbox", checkboxCompareClosure(checkbox));
th.onclick = fancyDblClickHandler(
th, th.onclick.bind(th), checkboxSetUnsetAllHandler(checkbox));
tr.appendChild(th);
}
tr.appendChild(createColumnHeader("References", "References", (a, b) => {
var i = 0;
while (i < a[3].length && i < b[3].length) {
if (a[3][i] != b[3][i]) return a[3][i] > b[3][i] ? 1 : -1;
i++;
}
return a[3].length - b[3].length;
}));
// Extra fields
if (config.extra_fields.length > 0) {
var extraFieldCompareClosure = function(fieldIndex) {
return (a, b) => {
var fa = a[4][fieldIndex];
var fb = b[4][fieldIndex];
if (fa != fb) return fa > fb ? 1 : -1;
else return 0;
}
}
for (var i in config.extra_fields) {
tr.appendChild(createColumnHeader(
config.extra_fields[i], "extra", extraFieldCompareClosure(i)));
}
}
tr.appendChild(createColumnHeader("Value", "Value", (a, b) => {
return valueCompare(a[5], b[5], a[1], b[1]);
}));
tr.appendChild(createColumnHeader("Footprint", "Footprint", (a, b) => {
if (a[2] != b[2]) return a[2] > b[2] ? 1 : -1;
else return 0;
}));
if (settings.bommode == "grouped") {
tr.appendChild(createColumnHeader("Quantity", "Quantity", (a, b) => {
return a[3].length - b[3].length;
}));
}
}
bomhead.appendChild(tr);
}
function populateBomBody() {
while (bom.firstChild) {
bom.removeChild(bom.firstChild);
}
highlightHandlers = [];
moduleIndexToHandler = {};
netsToHandler = {};
currentHighlightedRowId = null;
var first = true;
if (settings.bommode == "netlist") {
bomtable = pcbdata.nets.slice();
} else {
switch (settings.canvaslayout) {
case 'F':
bomtable = pcbdata.bom.F.slice();
break;
case 'FB':
bomtable = pcbdata.bom.both.slice();
break;
case 'B':
bomtable = pcbdata.bom.B.slice();
break;
}
if (settings.bommode == "ungrouped") {
// expand bom table
expandedTable = []
for (var bomentry of bomtable) {
for (var ref of bomentry[3]) {
expandedTable.push([1, bomentry[1], bomentry[2], [ref], bomentry[4], bomentry[5]]);
}
}
bomtable = expandedTable;
}
}
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);
} else {
if (reflookup) {
references = findRefInEntry(bomentry);
if (references.length == 0) {
continue;
}
} else {
references = bomentry[3];
}
// Checkboxes
for (var checkbox of settings.checkboxes) {
if (checkbox) {
td = document.createElement("TD");
var input = document.createElement("input");
input.type = "checkbox";
input.onchange = createCheckboxChangeHandler(checkbox, references);
setBomCheckboxState(checkbox, input, references);
if (input.checked && settings.darkenWhenChecked == checkbox) {
tr.classList.add("checked");
}
td.appendChild(input);
tr.appendChild(td);
}
}
// References
td = document.createElement("TD");
td.innerHTML = highlightFilter(references.map(r => r[0]).join(", "));
tr.appendChild(td);
// Extra fields
for (var i in config.extra_fields) {
td = document.createElement("TD");
td.innerHTML = highlightFilter(bomentry[4][i]);
tr.appendChild(td);
}
// Value
td = document.createElement("TD");
td.innerHTML = highlightFilter(bomentry[1]);
tr.appendChild(td);
// Footprint
td = document.createElement("TD");
td.innerHTML = highlightFilter(bomentry[2]);
tr.appendChild(td);
if (settings.bommode == "grouped") {
// Quantity
td = document.createElement("TD");
td.textContent = bomentry[3].length;
tr.appendChild(td);
}
}
bom.appendChild(tr);
var handler = createRowHighlightHandler(tr.id, references, netname);
tr.onmousemove = handler;
highlightHandlers.push({
id: tr.id,
handler: handler,
});
if (references !== null) {
for (var refIndex of references.map(r => r[1])) {
moduleIndexToHandler[refIndex] = handler;
}
}
if (netname !== null) {
netsToHandler[netname] = handler;
}
if ((filter || reflookup) && first) {
handler();
first = false;
}
}
}
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();
}
function modulesClicked(moduleIndexes) {
var lastClickedIndex = moduleIndexes.indexOf(lastClicked);
for (var i = 1; i <= moduleIndexes.length; i++) {
var refIndex = moduleIndexes[(lastClickedIndex + i) % moduleIndexes.length];
if (refIndex in moduleIndexToHandler) {
lastClicked = refIndex;
moduleIndexToHandler[refIndex]();
smoothScrollToRow(currentHighlightedRowId);
break;
}
}
}
function netClicked(net) {
if (net in netsToHandler) {
netsToHandler[net]();
smoothScrollToRow(currentHighlightedRowId);
} else {
clearHighlightedModules();
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.modules.length; i++) {
if (pcbdata.bom.skipped.includes(i)) continue;
var mod = pcbdata.modules[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("bot").style.height = "";
break;
case 'top-bottom':
document.getElementById("tb-btn").classList.add("depressed");
document.getElementById("frontcanvas").style.display = "";
document.getElementById("backcanvas").style.display = "";
document.getElementById("bot").style.height = "calc(100% - 80px)";
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("bot").style.height = "calc(100% - 80px)";
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");
switch (mode) {
case 'grouped':
document.getElementById("bom-grouped-btn").classList.add("depressed");
break;
case 'ungrouped':
document.getElementById("bom-ungrouped-btn").classList.add("depressed");
break;
case 'netlist':
document.getElementById("bom-netlist-btn").classList.add("depressed");
}
writeStorage("bommode", mode);
if (mode != settings.bommode) {
settings.bommode = mode;
bomSortFunction = null;
currentSortColumn = null;
currentSortOrder = null;
clearHighlightedModules();
}
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 checkbox = bomrow.childNodes[checkboxnum].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 checkbox = bomrow.childNodes[checkboxnum + 1].childNodes[0];
checkbox.checked = true;
checkbox.indeterminate = false;
checkbox.onchange();
}
function setBomCheckboxes(value) {
writeStorage("bomCheckboxes", value);
settings.checkboxes = value.split(",").filter((e) => e);
prepCheckboxes();
populateBomTable();
populateDarkenWhenCheckedOptions();
}
function setDarkenWhenChecked(value) {
writeStorage("darkenWhenChecked", value);
settings.darkenWhenChecked = value;
populateBomTable();
}
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 populateDarkenWhenCheckedOptions() {
var container = document.getElementById("darkenWhenCheckedContainer");
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 = "darkenWhenChecked-" + name;
var div = document.createElement("div");
div.classList.add("radio-container");
var input = document.createElement("input");
input.type = "radio";
input.name = "darkenWhenChecked";
input.value = name;
input.id = id;
input.onchange = () => setDarkenWhenChecked(name);
div.appendChild(input);
// Preserve the selected element when the checkboxes change
if (name == settings.darkenWhenChecked) {
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.modules.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) + "%)";
}
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;
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));
}
}
}
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";
}
window.onload = function(e) {
initUtils();
initRender();
initStorage();
initDefaults();
cleanGutters();
populateMetadata();
dbgdiv = document.getElementById("dbg");
bom = document.getElementById("bombody");
bomhead = document.getElementById("bomhead");
filter = "";
reflookup = "";
if (!("nets" in pcbdata)) {
hideNetlistButton();
}
initDone = true;
prepCheckboxes();
// 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 style="float: right; height: 100%;">
<div class="hideonprint menu" style="float: right; top: 8px;">
<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="highlightpin1Checkbox" type="checkbox" onchange="setHighlightPin1(this.checked)">
Highlight first pin
</label>
<label class="menu-label">
<input id="dragCheckbox" type="checkbox" checked onchange="setRedrawOnDrag(this.checked)">
Continuous redraw on drag
</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">
<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">Darken when checked</div>
<div id="darkenWhenCheckedContainer"></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>
</span>
</label>
</div>
</div>
<div class="button-container hideonprint"
style="float: right; position: relative; top: 8px">
<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"
style="float: right; position: relative; top: 8px">
<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"
style="float: right; position: relative; top: 8px">
<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" style="float: right; top: 8px;">
<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" style="float: right; top: 8px;">
<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>
</div>
</div>
</div>
</div>
</div>
<div id="fileinfodiv" style="overflow: auto;">
<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>
<div id="bot" class="split" style="height: calc(100% - 80px)">
<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="copyToClipboard()"></button>
</div>
</div>
<div id="dbg"></div>
<table class="bom">
<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>