2024-06-18 23:33:33 +02:00

4670 lines
335 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-hole-color: #CCCCCC;
--pad-color-highlight: #D04040;
--pad-color-highlight-both: #D0D040;
--pad-color-highlight-marked: #44a344;
--pin1-outline-color: #ffb629;
--pin1-outline-color-highlight: #ffb629;
--pin1-outline-color-highlight-both: #fcbb39;
--pin1-outline-color-highlight-marked: #fdbe41;
--silkscreen-edge-color: #aa4;
--silkscreen-polygon-color: #4aa;
--silkscreen-text-color: #4aa;
--fabrication-edge-color: #907651;
--fabrication-polygon-color: #907651;
--fabrication-text-color: #a27c24;
--track-color: #def5f1;
--track-color-highlight: #D04040;
--zone-color: #def5f1;
--zone-color-highlight: #d0404080;
}
html,
body {
margin: 0px;
height: 100%;
font-family: Verdana, sans-serif;
}
.dark.topmostdiv {
--pcb-edge-color: #eee;
--pad-color: #808080;
--pin1-outline-color: #ffa800;
--pin1-outline-color-highlight: #ccff00;
--track-color: #42524f;
--zone-color: #42524f;
background-color: #252c30;
color: #eee;
}
button {
background-color: #eee;
border: 1px solid #888;
color: black;
height: 44px;
width: 44px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 14px;
font-weight: bolder;
}
.dark button {
/* This will be inverted */
background-color: #c3b7b5;
}
button.depressed {
background-color: #0a0;
color: white;
}
.dark button.depressed {
/* This will be inverted */
background-color: #b3b;
}
button:focus {
outline: 0;
}
button#tb-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.32 290.12h5.82M1.32 291.45h5.82' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 292.5v4.23M.26 292.63H8.2' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='1.35' y='295.73'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
}
button#lr-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.06 290.12H3.7m-2.64 1.33H3.7m-2.64 1.32H3.7m-2.64 1.3H3.7m-2.64 1.33H3.7' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 288.8v7.94m0-4.11h3.96' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='5.11' y='291.96'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
}
button#bom-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)' fill='none' stroke='%23000' stroke-width='.4'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' stroke-linejoin='round'/%3E%3Cpath d='M1.59 290.12h5.29M1.59 291.45h5.33M1.59 292.75h5.33M1.59 294.09h5.33M1.59 295.41h5.33'/%3E%3C/g%3E%3C/svg%3E");
}
button#bom-grouped-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m4 0h5m4 0h3M6.1 22h3m3.9 0h5m4 0h4m-16-8h4m4 0h4'/%3E%3Cpath stroke-linecap='null' d='M5 17.5h22M5 26.6h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
}
button#bom-ungrouped-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m-4 8h3m-3 8h4'/%3E%3Cpath stroke-linecap='null' d='M5 13.5h22m-22 8h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
}
button#bom-netlist-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' stroke='%23000' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-width='2' d='M6 26l6-6v-8m13.8-6.3l-6 6v8'/%3E%3Ccircle cx='11.8' cy='9.5' r='2.8' stroke-width='2'/%3E%3Ccircle cx='19.8' cy='22.8' r='2.8' stroke-width='2'/%3E%3C/g%3E%3C/svg%3E");
}
button#copy {
background-image: url("data:image/svg+xml,%3Csvg height='48' viewBox='0 0 48 48' width='48' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h48v48h-48z' fill='none'/%3E%3Cpath d='M32 2h-24c-2.21 0-4 1.79-4 4v28h4v-28h24v-4zm6 8h-22c-2.21 0-4 1.79-4 4v28c0 2.21 1.79 4 4 4h22c2.21 0 4-1.79 4-4v-28c0-2.21-1.79-4-4-4zm0 32h-22v-28h22v28z'/%3E%3C/svg%3E");
background-position: 6px 6px;
background-repeat: no-repeat;
background-size: 26px 26px;
border-radius: 6px;
height: 40px;
width: 40px;
margin: 10px 5px;
}
button#copy:active {
box-shadow: inset 0px 0px 5px #6c6c6c;
}
textarea.clipboard-temp {
position: fixed;
top: 0;
left: 0;
width: 2em;
height: 2em;
padding: 0;
border: None;
outline: None;
box-shadow: None;
background: transparent;
}
.left-most-button {
border-right: 0;
border-top-left-radius: 6px;
border-bottom-left-radius: 6px;
}
.middle-button {
border-right: 0;
}
.right-most-button {
border-top-right-radius: 6px;
border-bottom-right-radius: 6px;
}
.button-container {
font-size: 0;
margin: 0.4rem 0.4rem 0.4rem 0;
}
.dark .button-container {
filter: invert(1);
}
.button-container button {
background-size: 32px 32px;
background-position: 5px 5px;
background-repeat: no-repeat;
}
@media print {
.hideonprint {
display: none;
}
}
canvas {
cursor: crosshair;
}
canvas:active {
cursor: grabbing;
}
.fileinfo {
width: 100%;
max-width: 1000px;
border: none;
padding: 3px;
}
.fileinfo .title {
font-size: 20pt;
font-weight: bold;
}
.fileinfo td {
overflow: hidden;
white-space: nowrap;
max-width: 1px;
width: 50%;
text-overflow: ellipsis;
}
.bom {
border-collapse: collapse;
font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
font-size: 10pt;
table-layout: fixed;
width: 100%;
margin-top: 1px;
position: relative;
}
.bom th,
.bom td {
border: 1px solid black;
padding: 5px;
word-wrap: break-word;
text-align: center;
position: relative;
}
.dark .bom th,
.dark .bom td {
border: 1px solid #777;
}
.bom th {
background-color: #CCCCCC;
background-clip: padding-box;
}
.dark .bom th {
background-color: #3b4749;
}
.bom tr.highlighted:nth-child(n) {
background-color: #cfc;
}
.dark .bom tr.highlighted:nth-child(n) {
background-color: #226022;
}
.bom tr:nth-child(even) {
background-color: #f2f2f2;
}
.dark .bom tr:nth-child(even) {
background-color: #313b40;
}
.bom tr.checked {
color: #1cb53d;
}
.dark .bom tr.checked {
color: #2cce54;
}
.bom tr {
transition: background-color 0.2s;
}
.bom .numCol {
width: 30px;
}
.bom .value {
width: 15%;
}
.bom .quantity {
width: 65px;
}
.bom th .sortmark {
position: absolute;
right: 1px;
top: 1px;
margin-top: -5px;
border-width: 5px;
border-style: solid;
border-color: transparent transparent #221 transparent;
transform-origin: 50% 85%;
transition: opacity 0.2s, transform 0.4s;
}
.dark .bom th .sortmark {
filter: invert(1);
}
.bom th .sortmark.none {
opacity: 0;
}
.bom th .sortmark.desc {
transform: rotate(180deg);
}
.bom th:hover .sortmark.none {
opacity: 0.5;
}
.bom .bom-checkbox {
width: 30px;
position: relative;
user-select: none;
-moz-user-select: none;
}
.bom .bom-checkbox:before {
content: "";
position: absolute;
border-width: 15px;
border-style: solid;
border-color: #51829f transparent transparent transparent;
visibility: hidden;
top: -15px;
}
.bom .bom-checkbox:after {
content: "Double click to set/unset all";
position: absolute;
color: white;
top: -35px;
left: -26px;
background: #51829f;
padding: 5px 15px;
border-radius: 8px;
white-space: nowrap;
visibility: hidden;
}
.bom .bom-checkbox:hover:before,
.bom .bom-checkbox:hover:after {
visibility: visible;
transition: visibility 0.2s linear 1s;
}
.split {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
overflow-y: auto;
overflow-x: hidden;
background-color: inherit;
}
.split.split-horizontal,
.gutter.gutter-horizontal {
height: 100%;
float: left;
}
.gutter {
background-color: #ddd;
background-repeat: no-repeat;
background-position: 50%;
transition: background-color 0.3s;
}
.dark .gutter {
background-color: #777;
}
.gutter.gutter-horizontal {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==');
cursor: ew-resize;
width: 5px;
}
.gutter.gutter-vertical {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAFAQMAAABo7865AAAABlBMVEVHcEzMzMzyAv2sAAAAAXRSTlMAQObYZgAAABBJREFUeF5jOAMEEAIEEFwAn3kMwcB6I2AAAAAASUVORK5CYII=');
cursor: ns-resize;
height: 5px;
}
.searchbox {
float: left;
height: 40px;
margin: 10px 5px;
padding: 12px 32px;
font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
font-size: 18px;
box-sizing: border-box;
border: 1px solid #888;
border-radius: 6px;
outline: none;
background-color: #eee;
transition: background-color 0.2s, border 0.2s;
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABNklEQVQ4T8XSMUvDQBQH8P/LElFa/AIZHcTBQSz0I/gFstTBRR2KUC4ldDxw7h0Bl3RRUATxi4iiODgoiLNrbQYp5J6cpJJqomkX33Z37/14d/dIa33MzDuYI4johOI4XhyNRteO46zNYjDzAxE1yBZprVeZ+QbAUhXEGJMA2Ox2u4+fQIa0mPmsCgCgJYQ4t7lfgF0opQYAdv9ABkKI/UnOFCClXKjX61cA1osQY8x9kiRNKeV7IWA3oyhaSdP0FkAtjxhj3hzH2RBCPOf3pzqYHCilfAAX+URm9oMguPzeWSGQvUcMYC8rOBJCHBRdqxTo9/vbRHRqi8bj8XKv1xvODbiuW2u32/bvf0SlDv4XYOY7z/Mavu+nM1+BmQ+NMc0wDF/LprP0DbTWW0T00ul0nn4b7Q87+X4Qmfiq2wAAAABJRU5ErkJggg==');
background-position: 10px 10px;
background-repeat: no-repeat;
}
.dark .searchbox {
background-color: #111;
color: #eee;
}
.searchbox::placeholder {
color: #ccc;
}
.dark .searchbox::placeholder {
color: #666;
}
.filter {
width: calc(60% - 64px);
}
.reflookup {
width: calc(40% - 10px);
}
input[type=text]:focus {
background-color: white;
border: 1px solid #333;
}
.dark input[type=text]:focus {
background-color: #333;
border: 1px solid #ccc;
}
mark.highlight {
background-color: #5050ff;
color: #fff;
padding: 2px;
border-radius: 6px;
}
.dark mark.highlight {
background-color: #76a6da;
color: #111;
}
.menubtn {
background-color: white;
border: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36' viewBox='0 0 20 20'%3E%3Cpath fill='none' d='M0 0h20v20H0V0z'/%3E%3Cpath d='M15.95 10.78c.03-.25.05-.51.05-.78s-.02-.53-.06-.78l1.69-1.32c.15-.12.19-.34.1-.51l-1.6-2.77c-.1-.18-.31-.24-.49-.18l-1.99.8c-.42-.32-.86-.58-1.35-.78L12 2.34c-.03-.2-.2-.34-.4-.34H8.4c-.2 0-.36.14-.39.34l-.3 2.12c-.49.2-.94.47-1.35.78l-1.99-.8c-.18-.07-.39 0-.49.18l-1.6 2.77c-.1.18-.06.39.1.51l1.69 1.32c-.04.25-.07.52-.07.78s.02.53.06.78L2.37 12.1c-.15.12-.19.34-.1.51l1.6 2.77c.1.18.31.24.49.18l1.99-.8c.42.32.86.58 1.35.78l.3 2.12c.04.2.2.34.4.34h3.2c.2 0 .37-.14.39-.34l.3-2.12c.49-.2.94-.47 1.35-.78l1.99.8c.18.07.39 0 .49-.18l1.6-2.77c.1-.18.06-.39-.1-.51l-1.67-1.32zM10 13c-1.65 0-3-1.35-3-3s1.35-3 3-3 3 1.35 3 3-1.35 3-3 3z'/%3E%3C/svg%3E%0A");
background-position: center;
background-repeat: no-repeat;
}
.statsbtn {
background-color: white;
border: none;
background-image: url("data:image/svg+xml,%3Csvg width='36' height='36' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 6h28v24H4V6zm0 8h28v8H4m9-16v24h10V5.8' fill='none' stroke='%23000' stroke-width='2'/%3E%3C/svg%3E");
background-position: center;
background-repeat: no-repeat;
}
.iobtn {
background-color: white;
border: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36'%3E%3Cpath fill='none' stroke='%23000' stroke-width='2' d='M3 33v-7l6.8-7h16.5l6.7 7v7H3zM3.2 26H33M21 9l5-5.9 5 6h-2.5V15h-5V9H21zm-4.9 0l-5 6-5-6h2.5V3h5v6h2.5z'/%3E%3Cpath fill='none' stroke='%23000' d='M6.1 29.5H10'/%3E%3C/svg%3E");
background-position: center;
background-repeat: no-repeat;
}
.visbtn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath fill='none' stroke='%23333' d='M2.5 4.5h5v15h-5zM9.5 4.5h5v15h-5zM16.5 4.5h5v15h-5z'/%3E%3C/svg%3E");
background-position: center;
background-repeat: no-repeat;
padding: 15px;
}
#vismenu-content {
left: 0px;
font-family: Verdana, sans-serif;
}
.dark .statsbtn,
.dark .savebtn,
.dark .menubtn,
.dark .iobtn,
.dark .visbtn {
filter: invert(1);
}
.flexbox {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
}
.savebtn {
background-color: #d6d6d6;
width: auto;
height: 30px;
flex-grow: 1;
margin: 5px;
border-radius: 4px;
}
.savebtn:active {
background-color: #0a0;
color: white;
}
.dark .savebtn:active {
/* This will be inverted */
background-color: #b3b;
}
.stats {
border-collapse: collapse;
font-size: 12pt;
table-layout: fixed;
width: 100%;
min-width: 450px;
}
.dark .stats td {
border: 1px solid #bbb;
}
.stats td {
border: 1px solid black;
padding: 5px;
word-wrap: break-word;
text-align: center;
position: relative;
}
#checkbox-stats div {
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 100%;
display: flex;
align-items: center;
justify-content: center;
}
#checkbox-stats .bar {
background-color: rgba(28, 251, 0, 0.6);
}
.menu {
position: relative;
display: inline-block;
margin: 0.4rem 0.4rem 0.4rem 0;
}
.menu-content {
font-size: 12pt !important;
text-align: left !important;
font-weight: normal !important;
display: none;
position: absolute;
background-color: white;
right: 0;
min-width: 300px;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
z-index: 100;
padding: 8px;
}
.dark .menu-content {
background-color: #111;
}
.menu:hover .menu-content {
display: block;
}
.menu:hover .menubtn,
.menu:hover .iobtn,
.menu:hover .statsbtn {
background-color: #eee;
}
.menu-label {
display: inline-block;
padding: 8px;
border: 1px solid #ccc;
border-top: 0;
width: calc(100% - 18px);
}
.menu-label-top {
border-top: 1px solid #ccc;
}
.menu-textbox {
float: left;
height: 24px;
margin: 10px 5px;
padding: 5px 5px;
font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
font-size: 14px;
box-sizing: border-box;
border: 1px solid #888;
border-radius: 4px;
outline: none;
background-color: #eee;
transition: background-color 0.2s, border 0.2s;
width: calc(100% - 10px);
}
.menu-textbox.invalid,
.dark .menu-textbox.invalid {
color: red;
}
.dark .menu-textbox {
background-color: #222;
color: #eee;
}
.radio-container {
margin: 4px;
}
.topmostdiv {
display: flex;
flex-direction: column;
width: 100%;
background-color: white;
transition: background-color 0.3s;
}
#top {
display: flex;
flex-wrap: wrap;
justify-content: flex-end;
align-items: center;
}
#topdivider {
border-bottom: 2px solid black;
display: flex;
justify-content: center;
align-items: center;
}
.dark #topdivider {
border-bottom: 2px solid #ccc;
}
#topdivider>div {
position: relative;
}
#toptoggle {
cursor: pointer;
user-select: none;
position: absolute;
padding: 0.1rem 0.3rem;
top: -0.4rem;
left: -1rem;
font-size: 1.4rem;
line-height: 60%;
border: 1px solid black;
border-radius: 1rem;
background-color: #fff;
z-index: 100;
}
.flipped {
transform: rotate(0.5turn);
}
.dark #toptoggle {
border: 1px solid #fff;
background-color: #222;
}
#fileinfodiv {
flex: 20rem 1 0;
overflow: auto;
}
#bomcontrols {
display: flex;
flex-direction: row-reverse;
}
#bomcontrols>* {
flex-shrink: 0;
}
#dbg {
display: block;
}
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: #aaa;
}
::-webkit-scrollbar-thumb {
background: #666;
border-radius: 3px;
}
::-webkit-scrollbar-thumb:hover {
background: #555;
}
.slider {
-webkit-appearance: none;
width: 100%;
margin: 3px 0;
padding: 0;
outline: none;
opacity: 0.7;
-webkit-transition: .2s;
transition: opacity .2s;
border-radius: 3px;
}
.slider:hover {
opacity: 1;
}
.slider:focus {
outline: none;
}
.slider::-webkit-slider-runnable-track {
-webkit-appearance: none;
width: 100%;
height: 8px;
background: #d3d3d3;
border-radius: 3px;
border: none;
}
.slider::-webkit-slider-thumb {
-webkit-appearance: none;
width: 15px;
height: 15px;
border-radius: 50%;
background: #0a0;
cursor: pointer;
margin-top: -4px;
}
.dark .slider::-webkit-slider-thumb {
background: #3d3;
}
.slider::-moz-range-thumb {
width: 15px;
height: 15px;
border-radius: 50%;
background: #0a0;
cursor: pointer;
}
.slider::-moz-range-track {
height: 8px;
background: #d3d3d3;
border-radius: 3px;
}
.dark .slider::-moz-range-thumb {
background: #3d3;
}
.slider::-ms-track {
width: 100%;
height: 8px;
border-width: 3px 0;
background: transparent;
border-color: transparent;
color: transparent;
transition: opacity .2s;
}
.slider::-ms-fill-lower {
background: #d3d3d3;
border: none;
border-radius: 3px;
}
.slider::-ms-fill-upper {
background: #d3d3d3;
border: none;
border-radius: 3px;
}
.slider::-ms-thumb {
width: 15px;
height: 15px;
border-radius: 50%;
background: #0a0;
cursor: pointer;
margin: 0;
}
.shameless-plug {
font-size: 0.8em;
text-align: center;
display: block;
}
a {
color: #0278a4;
}
.dark a {
color: #00b9fd;
}
#frontcanvas,
#backcanvas {
touch-action: none;
}
.placeholder {
border: 1px dashed #9f9fda !important;
background-color: #edf2f7 !important;
}
.dragging {
z-index: 999;
}
.dark .dragging>table>tbody>tr {
background-color: #252c30;
}
.dark .placeholder {
filter: invert(1);
}
.column-spacer {
top: 0;
left: 0;
width: calc(100% - 4px);
position: absolute;
cursor: pointer;
user-select: none;
height: 100%;
}
.column-width-handle {
top: 0;
right: 0;
width: 4px;
position: absolute;
cursor: col-resize;
user-select: none;
height: 100%;
}
.column-width-handle:hover {
background-color: #4f99bd;
}
.help-link {
border: 1px solid #0278a4;
padding-inline: 0.3rem;
border-radius: 3px;
cursor: pointer;
}
.dark .help-link {
border: 1px solid #00b9fd;
}
.bom-color {
width: 20%;
}
.color-column input {
width: 1.6rem;
height: 1rem;
border: 1px solid black;
cursor: pointer;
padding: 0;
}
/* removes default styling from input color element */
::-webkit-color-swatch {
border: none;
}
::-webkit-color-swatch-wrapper {
padding: 0;
}
::-moz-color-swatch,
::-moz-focus-inner {
border: none;
}
::-moz-focus-inner {
padding: 0;
}
/* #bomhead {
position: sticky;
top: 0px;
z-index: 1;
} */
</style>
<script type="text/javascript" >
///////////////////////////////////////////////
/*
Split.js - v1.3.5
MIT License
https://github.com/nathancahill/Split.js
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Split=t()}(this,function(){"use strict";var e=window,t=e.document,n="addEventListener",i="removeEventListener",r="getBoundingClientRect",s=function(){return!1},o=e.attachEvent&&!e[n],a=["","-webkit-","-moz-","-o-"].filter(function(e){var n=t.createElement("div");return n.style.cssText="width:"+e+"calc(9px)",!!n.style.length}).shift()+"calc",l=function(e){return"string"==typeof e||e instanceof String?t.querySelector(e):e};return function(u,c){function z(e,t,n){var i=A(y,t,n);Object.keys(i).forEach(function(t){return e.style[t]=i[t]})}function h(e,t){var n=B(y,t);Object.keys(n).forEach(function(t){return e.style[t]=n[t]})}function f(e){var t=E[this.a],n=E[this.b],i=t.size+n.size;t.size=e/this.size*i,n.size=i-e/this.size*i,z(t.element,t.size,this.aGutterSize),z(n.element,n.size,this.bGutterSize)}function m(e){var t;this.dragging&&((t="touches"in e?e.touches[0][b]-this.start:e[b]-this.start)<=E[this.a].minSize+M+this.aGutterSize?t=E[this.a].minSize+this.aGutterSize:t>=this.size-(E[this.b].minSize+M+this.bGutterSize)&&(t=this.size-(E[this.b].minSize+this.bGutterSize)),f.call(this,t),c.onDrag&&c.onDrag())}function g(){var e=E[this.a].element,t=E[this.b].element;this.size=e[r]()[y]+t[r]()[y]+this.aGutterSize+this.bGutterSize,this.start=e[r]()[G]}function d(){var t=this,n=E[t.a].element,r=E[t.b].element;t.dragging&&c.onDragEnd&&c.onDragEnd(),t.dragging=!1,e[i]("mouseup",t.stop),e[i]("touchend",t.stop),e[i]("touchcancel",t.stop),t.parent[i]("mousemove",t.move),t.parent[i]("touchmove",t.move),delete t.stop,delete t.move,n[i]("selectstart",s),n[i]("dragstart",s),r[i]("selectstart",s),r[i]("dragstart",s),n.style.userSelect="",n.style.webkitUserSelect="",n.style.MozUserSelect="",n.style.pointerEvents="",r.style.userSelect="",r.style.webkitUserSelect="",r.style.MozUserSelect="",r.style.pointerEvents="",t.gutter.style.cursor="",t.parent.style.cursor=""}function S(t){var i=this,r=E[i.a].element,o=E[i.b].element;!i.dragging&&c.onDragStart&&c.onDragStart(),t.preventDefault(),i.dragging=!0,i.move=m.bind(i),i.stop=d.bind(i),e[n]("mouseup",i.stop),e[n]("touchend",i.stop),e[n]("touchcancel",i.stop),i.parent[n]("mousemove",i.move),i.parent[n]("touchmove",i.move),r[n]("selectstart",s),r[n]("dragstart",s),o[n]("selectstart",s),o[n]("dragstart",s),r.style.userSelect="none",r.style.webkitUserSelect="none",r.style.MozUserSelect="none",r.style.pointerEvents="none",o.style.userSelect="none",o.style.webkitUserSelect="none",o.style.MozUserSelect="none",o.style.pointerEvents="none",i.gutter.style.cursor=j,i.parent.style.cursor=j,g.call(i)}function v(e){e.forEach(function(t,n){if(n>0){var i=F[n-1],r=E[i.a],s=E[i.b];r.size=e[n-1],s.size=t,z(r.element,r.size,i.aGutterSize),z(s.element,s.size,i.bGutterSize)}})}function p(){F.forEach(function(e){e.parent.removeChild(e.gutter),E[e.a].element.style[y]="",E[e.b].element.style[y]=""})}void 0===c&&(c={});var y,b,G,E,w=l(u[0]).parentNode,D=e.getComputedStyle(w).flexDirection,U=c.sizes||u.map(function(){return 100/u.length}),k=void 0!==c.minSize?c.minSize:100,x=Array.isArray(k)?k:u.map(function(){return k}),L=void 0!==c.gutterSize?c.gutterSize:10,M=void 0!==c.snapOffset?c.snapOffset:30,O=c.direction||"horizontal",j=c.cursor||("horizontal"===O?"ew-resize":"ns-resize"),C=c.gutter||function(e,n){var i=t.createElement("div");return i.className="gutter gutter-"+n,i},A=c.elementStyle||function(e,t,n){var i={};return"string"==typeof t||t instanceof String?i[e]=t:i[e]=o?t+"%":a+"("+t+"% - "+n+"px)",i},B=c.gutterStyle||function(e,t){return n={},n[e]=t+"px",n;var n};"horizontal"===O?(y="width","clientWidth",b="clientX",G="left","paddingLeft"):"vertical"===O&&(y="height","clientHeight",b="clientY",G="top","paddingTop");var F=[];return E=u.map(function(e,t){var i,s={element:l(e),size:U[t],minSize:x[t]};if(t>0&&(i={a:t-1,b:t,dragging:!1,isFirst:1===t,isLast:t===u.length-1,direction:O,parent:w},i.aGutterSize=L,i.bGutterSize=L,i.isFirst&&(i.aGutterSize=L/2),i.isLast&&(i.bGutterSize=L/2),"row-reverse"===D||"column-reverse"===D)){var a=i.a;i.a=i.b,i.b=a}if(!o&&t>0){var c=C(t,O);h(c,L),c[n]("mousedown",S.bind(i)),c[n]("touchstart",S.bind(i)),w.insertBefore(c,s.element),i.gutter=c}0===t||t===u.length-1?z(s.element,s.size,L/2):z(s.element,s.size,L);var f=s.element[r]()[y];return f<s.minSize&&(s.minSize=f),t>0&&F.push(i),s}),o?{setSizes:v,destroy:p}:{setSizes:v,getSizes:function(){return E.map(function(e){return e.size})},collapse:function(e){if(e===F.length){var t=F[e-1];g.call(t),o||f.call(t,t.size-t.bGutterSize)}else{var n=F[e];g.call(n),o||f.call(n,n.aGutterSize)}},destroy:p}}});
///////////////////////////////////////////////
///////////////////////////////////////////////
// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>
// This work is free. You can redistribute it and/or modify it
// under the terms of the WTFPL, Version 2
// For more information see LICENSE.txt or http://www.wtfpl.net/
//
// For more information, the home page:
// http://pieroxy.net/blog/pages/lz-string/testing.html
//
// LZ-based compression algorithm, version 1.4.4
var LZString=function(){var o=String.fromCharCode,i={};var n={decompressFromBase64:function(o){return null==o?"":""==o?null:n._decompress(o.length,32,function(n){return function(o,n){if(!i[o]){i[o]={};for(var t=0;t<o.length;t++)i[o][o.charAt(t)]=t}return i[o][n]}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o.charAt(n))})},_decompress:function(i,n,t){var r,e,a,s,p,u,l,f=[],c=4,d=4,h=3,v="",g=[],m={val:t(0),position:n,index:1};for(r=0;r<3;r+=1)f[r]=r;for(a=0,p=Math.pow(2,2),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 2:return""}for(f[3]=l,e=l,g.push(l);;){if(m.index>i)return"";for(a=0,p=Math.pow(2,h),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(l=a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 2:return g.join("")}if(0==c&&(c=Math.pow(2,h),h++),f[l])v=f[l];else{if(l!==d)return null;v=e+e.charAt(0)}g.push(v),f[d++]=e+v.charAt(0),e=v,0==--c&&(c=Math.pow(2,h),h++)}}};return n}();"function"==typeof define&&define.amd?define(function(){return LZString}):"undefined"!=typeof module&&null!=module?module.exports=LZString:"undefined"!=typeof angular&&null!=angular&&angular.module("LZString",[]).factory("LZString",function(){return LZString});
///////////////////////////////////////////////
///////////////////////////////////////////////
/*!
* PEP v0.4.3 | https://github.com/jquery/PEP
* Copyright jQuery Foundation and other contributors | http://jquery.org/license
*/
!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.PointerEventsPolyfill=b()}(this,function(){"use strict";function a(a,b){b=b||Object.create(null);var c=document.createEvent("Event");c.initEvent(a,b.bubbles||!1,b.cancelable||!1);
for(var d,e=2;e<m.length;e++)d=m[e],c[d]=b[d]||n[e];c.buttons=b.buttons||0;
var f=0;return f=b.pressure&&c.buttons?b.pressure:c.buttons?.5:0,c.x=c.clientX,c.y=c.clientY,c.pointerId=b.pointerId||0,c.width=b.width||0,c.height=b.height||0,c.pressure=f,c.tiltX=b.tiltX||0,c.tiltY=b.tiltY||0,c.twist=b.twist||0,c.tangentialPressure=b.tangentialPressure||0,c.pointerType=b.pointerType||"",c.hwTimestamp=b.hwTimestamp||0,c.isPrimary=b.isPrimary||!1,c}function b(){this.array=[],this.size=0}function c(a,b,c,d){this.addCallback=a.bind(d),this.removeCallback=b.bind(d),this.changedCallback=c.bind(d),A&&(this.observer=new A(this.mutationWatcher.bind(this)))}function d(a){return"body /shadow-deep/ "+e(a)}function e(a){return'[touch-action="'+a+'"]'}function f(a){return"{ -ms-touch-action: "+a+"; touch-action: "+a+"; }"}function g(){if(F){D.forEach(function(a){String(a)===a?(E+=e(a)+f(a)+"\n",G&&(E+=d(a)+f(a)+"\n")):(E+=a.selectors.map(e)+f(a.rule)+"\n",G&&(E+=a.selectors.map(d)+f(a.rule)+"\n"))});var a=document.createElement("style");a.textContent=E,document.head.appendChild(a)}}function h(){if(!window.PointerEvent){if(window.PointerEvent=a,window.navigator.msPointerEnabled){var b=window.navigator.msMaxTouchPoints;Object.defineProperty(window.navigator,"maxTouchPoints",{value:b,enumerable:!0}),u.registerSource("ms",_)}else Object.defineProperty(window.navigator,"maxTouchPoints",{value:0,enumerable:!0}),u.registerSource("mouse",N),void 0!==window.ontouchstart&&u.registerSource("touch",V);u.register(document)}}function i(a){if(!u.pointermap.has(a)){var b=new Error("InvalidPointerId");throw b.name="InvalidPointerId",b}}function j(a){for(var b=a.parentNode;b&&b!==a.ownerDocument;)b=b.parentNode;if(!b){var c=new Error("InvalidStateError");throw c.name="InvalidStateError",c}}function k(a){var b=u.pointermap.get(a);return 0!==b.buttons}function l(){window.Element&&!Element.prototype.setPointerCapture&&Object.defineProperties(Element.prototype,{setPointerCapture:{value:W},releasePointerCapture:{value:X},hasPointerCapture:{value:Y}})}
var m=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","pageX","pageY"],n=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0],o=window.Map&&window.Map.prototype.forEach,p=o?Map:b;b.prototype={set:function(a,b){return void 0===b?this["delete"](a):(this.has(a)||this.size++,void(this.array[a]=b))},has:function(a){return void 0!==this.array[a]},"delete":function(a){this.has(a)&&(delete this.array[a],this.size--)},get:function(a){return this.array[a]},clear:function(){this.array.length=0,this.size=0},forEach:function(a,b){return this.array.forEach(function(c,d){a.call(b,c,d,this)},this)}};var q=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","buttons","pointerId","width","height","pressure","tiltX","tiltY","pointerType","hwTimestamp","isPrimary","type","target","currentTarget","which","pageX","pageY","timeStamp"],r=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0,0,0,0,0,0,"",0,!1,"",null,null,0,0,0,0],s={pointerover:1,pointerout:1,pointerenter:1,pointerleave:1},t="undefined"!=typeof SVGElementInstance,u={pointermap:new p,eventMap:Object.create(null),captureInfo:Object.create(null),eventSources:Object.create(null),eventSourceList:[],registerSource:function(a,b){var c=b,d=c.events;d&&(d.forEach(function(a){c[a]&&(this.eventMap[a]=c[a].bind(c))},this),this.eventSources[a]=c,this.eventSourceList.push(c))},register:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
b.register.call(b,a)},unregister:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
b.unregister.call(b,a)},contains:function(a,b){try{return a.contains(b)}catch(c){return!1}},down:function(a){a.bubbles=!0,this.fireEvent("pointerdown",a)},move:function(a){a.bubbles=!0,this.fireEvent("pointermove",a)},up:function(a){a.bubbles=!0,this.fireEvent("pointerup",a)},enter:function(a){a.bubbles=!1,this.fireEvent("pointerenter",a)},leave:function(a){a.bubbles=!1,this.fireEvent("pointerleave",a)},over:function(a){a.bubbles=!0,this.fireEvent("pointerover",a)},out:function(a){a.bubbles=!0,this.fireEvent("pointerout",a)},cancel:function(a){a.bubbles=!0,this.fireEvent("pointercancel",a)},leaveOut:function(a){this.out(a),this.propagate(a,this.leave,!1)},enterOver:function(a){this.over(a),this.propagate(a,this.enter,!0)},eventHandler:function(a){if(!a._handledByPE){var b=a.type,c=this.eventMap&&this.eventMap[b];c&&c(a),a._handledByPE=!0}},listen:function(a,b){b.forEach(function(b){this.addEvent(a,b)},this)},unlisten:function(a,b){b.forEach(function(b){this.removeEvent(a,b)},this)},addEvent:function(a,b){a.addEventListener(b,this.boundHandler)},removeEvent:function(a,b){a.removeEventListener(b,this.boundHandler)},makeEvent:function(b,c){this.captureInfo[c.pointerId]&&(c.relatedTarget=null);var d=new a(b,c);return c.preventDefault&&(d.preventDefault=c.preventDefault),d._target=d._target||c.target,d},fireEvent:function(a,b){var c=this.makeEvent(a,b);return this.dispatchEvent(c)},cloneEvent:function(a){for(var b,c=Object.create(null),d=0;d<q.length;d++)b=q[d],c[b]=a[b]||r[d],!t||"target"!==b&&"relatedTarget"!==b||c[b]instanceof SVGElementInstance&&(c[b]=c[b].correspondingUseElement);return a.preventDefault&&(c.preventDefault=function(){a.preventDefault()}),c},getTarget:function(a){var b=this.captureInfo[a.pointerId];return b?a._target!==b&&a.type in s?void 0:b:a._target},propagate:function(a,b,c){for(var d=a.target,e=[];d!==document&&!d.contains(a.relatedTarget);) if(e.push(d),d=d.parentNode,!d)return;c&&e.reverse(),e.forEach(function(c){a.target=c,b.call(this,a)},this)},setCapture:function(b,c,d){this.captureInfo[b]&&this.releaseCapture(b,d),this.captureInfo[b]=c,this.implicitRelease=this.releaseCapture.bind(this,b,d),document.addEventListener("pointerup",this.implicitRelease),document.addEventListener("pointercancel",this.implicitRelease);var e=new a("gotpointercapture");e.pointerId=b,e._target=c,d||this.asyncDispatchEvent(e)},releaseCapture:function(b,c){var d=this.captureInfo[b];if(d){this.captureInfo[b]=void 0,document.removeEventListener("pointerup",this.implicitRelease),document.removeEventListener("pointercancel",this.implicitRelease);var e=new a("lostpointercapture");e.pointerId=b,e._target=d,c||this.asyncDispatchEvent(e)}},dispatchEvent:/*scope.external.dispatchEvent || */function(a){var b=this.getTarget(a);if(b)return b.dispatchEvent(a)},asyncDispatchEvent:function(a){requestAnimationFrame(this.dispatchEvent.bind(this,a))}};u.boundHandler=u.eventHandler.bind(u);var v={shadow:function(a){if(a)return a.shadowRoot||a.webkitShadowRoot},canTarget:function(a){return a&&Boolean(a.elementFromPoint)},targetingShadow:function(a){var b=this.shadow(a);if(this.canTarget(b))return b},olderShadow:function(a){var b=a.olderShadowRoot;if(!b){var c=a.querySelector("shadow");c&&(b=c.olderShadowRoot)}return b},allShadows:function(a){for(var b=[],c=this.shadow(a);c;)b.push(c),c=this.olderShadow(c);return b},searchRoot:function(a,b,c){if(a){var d,e,f=a.elementFromPoint(b,c);for(e=this.targetingShadow(f);e;){if(d=e.elementFromPoint(b,c)){var g=this.targetingShadow(d);return this.searchRoot(g,b,c)||d} e=this.olderShadow(e)} return f}},owner:function(a){
for(var b=a;b.parentNode;)b=b.parentNode;
return b.nodeType!==Node.DOCUMENT_NODE&&b.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&(b=document),b},findTarget:function(a){var b=a.clientX,c=a.clientY,d=this.owner(a.target);
return d.elementFromPoint(b,c)||(d=document),this.searchRoot(d,b,c)}},w=Array.prototype.forEach.call.bind(Array.prototype.forEach),x=Array.prototype.map.call.bind(Array.prototype.map),y=Array.prototype.slice.call.bind(Array.prototype.slice),z=Array.prototype.filter.call.bind(Array.prototype.filter),A=window.MutationObserver||window.WebKitMutationObserver,B="[touch-action]",C={subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["touch-action"]};c.prototype={watchSubtree:function(a){
//
this.observer&&v.canTarget(a)&&this.observer.observe(a,C)},enableOnSubtree:function(a){this.watchSubtree(a),a===document&&"complete"!==document.readyState?this.installOnLoad():this.installNewSubtree(a)},installNewSubtree:function(a){w(this.findElements(a),this.addElement,this)},findElements:function(a){return a.querySelectorAll?a.querySelectorAll(B):[]},removeElement:function(a){this.removeCallback(a)},addElement:function(a){this.addCallback(a)},elementChanged:function(a,b){this.changedCallback(a,b)},concatLists:function(a,b){return a.concat(y(b))},
installOnLoad:function(){document.addEventListener("readystatechange",function(){"complete"===document.readyState&&this.installNewSubtree(document)}.bind(this))},isElement:function(a){return a.nodeType===Node.ELEMENT_NODE},flattenMutationTree:function(a){
var b=x(a,this.findElements,this);
return b.push(z(a,this.isElement)),b.reduce(this.concatLists,[])},mutationWatcher:function(a){a.forEach(this.mutationHandler,this)},mutationHandler:function(a){if("childList"===a.type){var b=this.flattenMutationTree(a.addedNodes);b.forEach(this.addElement,this);var c=this.flattenMutationTree(a.removedNodes);c.forEach(this.removeElement,this)}else"attributes"===a.type&&this.elementChanged(a.target,a.oldValue)}};var D=["none","auto","pan-x","pan-y",{rule:"pan-x pan-y",selectors:["pan-x pan-y","pan-y pan-x"]}],E="",F=window.PointerEvent||window.MSPointerEvent,G=!window.ShadowDOMPolyfill&&document.head.createShadowRoot,H=u.pointermap,I=25,J=[1,4,2,8,16],K=!1;try{K=1===new MouseEvent("test",{buttons:1}).buttons}catch(L){}
var M,N={POINTER_ID:1,POINTER_TYPE:"mouse",events:["mousedown","mousemove","mouseup","mouseover","mouseout"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},lastTouches:[],
isEventSimulatedFromTouch:function(a){for(var b,c=this.lastTouches,d=a.clientX,e=a.clientY,f=0,g=c.length;f<g&&(b=c[f]);f++){
var h=Math.abs(d-b.x),i=Math.abs(e-b.y);if(h<=I&&i<=I)return!0}},prepareEvent:function(a){var b=u.cloneEvent(a),c=b.preventDefault;return b.preventDefault=function(){a.preventDefault(),c()},b.pointerId=this.POINTER_ID,b.isPrimary=!0,b.pointerType=this.POINTER_TYPE,b},prepareButtonsForMove:function(a,b){var c=H.get(this.POINTER_ID);
0!==b.which&&c?a.buttons=c.buttons:a.buttons=0,b.buttons=a.buttons},mousedown:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);K||(c.buttons=J[c.button],b&&(c.buttons|=b.buttons),a.buttons=c.buttons),H.set(this.POINTER_ID,a),b&&0!==b.buttons?u.move(c):u.down(c)}},mousemove:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.move(b)}},mouseup:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);if(!K){var d=J[c.button];
c.buttons=b?b.buttons&~d:0,a.buttons=c.buttons}H.set(this.POINTER_ID,a),
c.buttons&=~J[c.button],0===c.buttons?u.up(c):u.move(c)}},mouseover:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.enterOver(b)}},mouseout:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,u.leaveOut(b)}},cancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.deactivateMouse()},deactivateMouse:function(){H["delete"](this.POINTER_ID)}},O=u.captureInfo,P=v.findTarget.bind(v),Q=v.allShadows.bind(v),R=u.pointermap,S=2500,T=200,U="touch-action",V={events:["touchstart","touchmove","touchend","touchcancel"],register:function(a){M.enableOnSubtree(a)},unregister:function(){},elementAdded:function(a){var b=a.getAttribute(U),c=this.touchActionToScrollType(b);c&&(a._scrollType=c,u.listen(a,this.events),
Q(a).forEach(function(a){a._scrollType=c,u.listen(a,this.events)},this))},elementRemoved:function(a){a._scrollType=void 0,u.unlisten(a,this.events),
Q(a).forEach(function(a){a._scrollType=void 0,u.unlisten(a,this.events)},this)},elementChanged:function(a,b){var c=a.getAttribute(U),d=this.touchActionToScrollType(c),e=this.touchActionToScrollType(b);
d&&e?(a._scrollType=d,Q(a).forEach(function(a){a._scrollType=d},this)):e?this.elementRemoved(a):d&&this.elementAdded(a)},scrollTypes:{EMITTER:"none",XSCROLLER:"pan-x",YSCROLLER:"pan-y",SCROLLER:/^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/},touchActionToScrollType:function(a){var b=a,c=this.scrollTypes;return"none"===b?"none":b===c.XSCROLLER?"X":b===c.YSCROLLER?"Y":c.SCROLLER.exec(b)?"XY":void 0},POINTER_TYPE:"touch",firstTouch:null,isPrimaryTouch:function(a){return this.firstTouch===a.identifier},setPrimaryTouch:function(a){
(0===R.size||1===R.size&&R.has(1))&&(this.firstTouch=a.identifier,this.firstXY={X:a.clientX,Y:a.clientY},this.scrolling=!1,this.cancelResetClickCount())},removePrimaryPointer:function(a){a.isPrimary&&(this.firstTouch=null,this.firstXY=null,this.resetClickCount())},clickCount:0,resetId:null,resetClickCount:function(){var a=function(){this.clickCount=0,this.resetId=null}.bind(this);this.resetId=setTimeout(a,T)},cancelResetClickCount:function(){this.resetId&&clearTimeout(this.resetId)},typeToButtons:function(a){var b=0;return"touchstart"!==a&&"touchmove"!==a||(b=1),b},touchToPointer:function(a){var b=this.currentTouchEvent,c=u.cloneEvent(a),d=c.pointerId=a.identifier+2;c.target=O[d]||P(c),c.bubbles=!0,c.cancelable=!0,c.detail=this.clickCount,c.button=0,c.buttons=this.typeToButtons(b.type),c.width=2*(a.radiusX||a.webkitRadiusX||0),c.height=2*(a.radiusY||a.webkitRadiusY||0),c.pressure=a.force||a.webkitForce||.5,c.isPrimary=this.isPrimaryTouch(a),c.pointerType=this.POINTER_TYPE,
c.altKey=b.altKey,c.ctrlKey=b.ctrlKey,c.metaKey=b.metaKey,c.shiftKey=b.shiftKey;
var e=this;return c.preventDefault=function(){e.scrolling=!1,e.firstXY=null,b.preventDefault()},c},processTouches:function(a,b){var c=a.changedTouches;this.currentTouchEvent=a;for(var d,e=0;e<c.length;e++)d=c[e],b.call(this,this.touchToPointer(d))},
shouldScroll:function(a){if(this.firstXY){var b,c=a.currentTarget._scrollType;if("none"===c)
b=!1;else if("XY"===c)
b=!0;else{var d=a.changedTouches[0],e=c,f="Y"===c?"X":"Y",g=Math.abs(d["client"+e]-this.firstXY[e]),h=Math.abs(d["client"+f]-this.firstXY[f]);
b=g>=h}return this.firstXY=null,b}},findTouch:function(a,b){for(var c,d=0,e=a.length;d<e&&(c=a[d]);d++)if(c.identifier===b)return!0},
vacuumTouches:function(a){var b=a.touches;
if(R.size>=b.length){var c=[];R.forEach(function(a,d){
if(1!==d&&!this.findTouch(b,d-2)){var e=a.out;c.push(e)}},this),c.forEach(this.cancelOut,this)}},touchstart:function(a){this.vacuumTouches(a),this.setPrimaryTouch(a.changedTouches[0]),this.dedupSynthMouse(a),this.scrolling||(this.clickCount++,this.processTouches(a,this.overDown))},overDown:function(a){R.set(a.pointerId,{target:a.target,out:a,outTarget:a.target}),u.enterOver(a),u.down(a)},touchmove:function(a){this.scrolling||(this.shouldScroll(a)?(this.scrolling=!0,this.touchcancel(a)):(a.preventDefault(),this.processTouches(a,this.moveOverOut)))},moveOverOut:function(a){var b=a,c=R.get(b.pointerId);
if(c){var d=c.out,e=c.outTarget;u.move(b),d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,
d.target=e,b.target?(u.leaveOut(d),u.enterOver(b)):(
b.target=e,b.relatedTarget=null,this.cancelOut(b))),c.out=b,c.outTarget=b.target}},touchend:function(a){this.dedupSynthMouse(a),this.processTouches(a,this.upOut)},upOut:function(a){this.scrolling||(u.up(a),u.leaveOut(a)),this.cleanUpPointer(a)},touchcancel:function(a){this.processTouches(a,this.cancelOut)},cancelOut:function(a){u.cancel(a),u.leaveOut(a),this.cleanUpPointer(a)},cleanUpPointer:function(a){R["delete"](a.pointerId),this.removePrimaryPointer(a)},
dedupSynthMouse:function(a){var b=N.lastTouches,c=a.changedTouches[0];
if(this.isPrimaryTouch(c)){
var d={x:c.clientX,y:c.clientY};b.push(d);var e=function(a,b){var c=a.indexOf(b);c>-1&&a.splice(c,1)}.bind(null,b,d);setTimeout(e,S)}}};M=new c(V.elementAdded,V.elementRemoved,V.elementChanged,V);var W,X,Y,Z=u.pointermap,$=window.MSPointerEvent&&"number"==typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE,_={events:["MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSGotPointerCapture","MSLostPointerCapture"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},POINTER_TYPES:["","unavailable","touch","pen","mouse"],prepareEvent:function(a){var b=a;return $&&(b=u.cloneEvent(a),b.pointerType=this.POINTER_TYPES[a.pointerType]),b},cleanup:function(a){Z["delete"](a)},MSPointerDown:function(a){Z.set(a.pointerId,a);var b=this.prepareEvent(a);u.down(b)},MSPointerMove:function(a){var b=this.prepareEvent(a);u.move(b)},MSPointerUp:function(a){var b=this.prepareEvent(a);u.up(b),this.cleanup(a.pointerId)},MSPointerOut:function(a){var b=this.prepareEvent(a);u.leaveOut(b)},MSPointerOver:function(a){var b=this.prepareEvent(a);u.enterOver(b)},MSPointerCancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.cleanup(a.pointerId)},MSLostPointerCapture:function(a){var b=u.makeEvent("lostpointercapture",a);u.dispatchEvent(b)},MSGotPointerCapture:function(a){var b=u.makeEvent("gotpointercapture",a);u.dispatchEvent(b)}},aa=window.navigator;aa.msPointerEnabled?(W=function(a){i(a),j(this),k(a)&&(u.setCapture(a,this,!0),this.msSetPointerCapture(a))},X=function(a){i(a),u.releaseCapture(a,!0),this.msReleasePointerCapture(a)}):(W=function(a){i(a),j(this),k(a)&&u.setCapture(a,this)},X=function(a){i(a),u.releaseCapture(a)}),Y=function(a){return!!u.captureInfo[a]},g(),h(),l();var ba={dispatcher:u,Installer:c,PointerEvent:a,PointerMap:p,targetFinding:v};return ba});
///////////////////////////////////////////////
///////////////////////////////////////////////
var config = {"dark_mode": false, "show_pads": true, "show_fabrication": false, "show_silkscreen": true, "highlight_pin1": "none", "redraw_on_drag": true, "board_rotation": 0, "checkboxes": "Sourced,Placed", "bom_view": "left-right", "layer_view": "FB", "offset_back_rotation": false, "kicad_text_formatting": true, "fields": ["Value", "Footprint"]}
///////////////////////////////////////////////
///////////////////////////////////////////////
var pcbdata = JSON.parse(LZString.decompressFromBase64("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GvXihemoqNX6fPBs6tGJYsaV5fXpkKPgFTXj68AV5g3ouAtKGzXqZ1c1+VAADexF55XwjeDV+I3yTeY5tQePqsvrKnX4oNM1yipajfaN8hXp1eV14aQHsj4V9Y3j1fkV4tX71fVAXw35VZfV8qX/1fsV6YAXFfQ1/PXpVZCV/VEklfxN+qAGNfU3BYR43G5N5MAV9fWF/fX3ZfVN9ZXmZepCTmX/9eFl903oteJF/030tfDV8i3x57oncNACjegV7g36jfvoFOXuVeoV7Q3pVe117cQVVeu1/Y3nde1MM8XnVf3l9y34df8t7vXqLetKqcwatfP19bwMrfQV7zX+de6N5Q36rfGN+sX5jfbl/q3jdet157Xpud0V5AATFffN6PX/zeT14E36oBhN+kAMTeyV56X13GQ3O4+lEAn16GXhTeEt7uodNeeF4s3jTeqLLC1HTell463kdfJN4O37AALVDM3z9frt5/XzTfjDyQ3sbfrIAY3+zf3oEc3lVe5t5w35reXl883k05vN6xXtbect/43wLfBN4vXqDswt723yddCoYvTyIbYt6YX5Nfzt7TXj9fkt+/Xtlfht45XjLeuV6y3oDe4d5kX0Df1l8Rm6S77AUu30rerV+o3xDe7AGQ3/7eJt8B3mCg6t7/ABrfsN6a3tzfd1483treCN78X6nfwN/R35eqq14Z3sVeht7S3qVfbV9+32zfl1/Q3hpA3V+c3xrfXN6nXb1elt5W3w9feN+PX+HemAEaXxHfgt5aX/hSUd9vXi/4Roc9OWTWsd9OAeLfRl8ZX/HeeF5S339fKYHfAe7e9N9F3ojead9VbRTH3I8nXgbfLV5BXuXfdF4V31ne/t6XX1tfat5Y32be2N813jxfX4Uh31UAh16e3/bf5XRNXmfESt5l3pnfid5o30beld+j3l1fVd+53+oBed/m3jjedd+43vzfKd9PXhHett/DXgAAlAABRBVAAACo29923y3f/kA373ehjt+fXuLebwBigVNeYkCnX6FZs1/g3uddPd+y31Peut6t3xNrklWl3i1etF6IQUPeXIEV3nMAkraw3ivfwd61X5Pfod9W3/Xf1t8N3wJegt4aX5MmQACjXiTeY1+3zBy4i+37307eWF8d3vHekt5d3wnfUt6035GB819EXh7fvd4M333fKepyB5iet26nXzRfZd8/3l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"))
///////////////////////////////////////////////
///////////////////////////////////////////////
/* Utility functions */
var storagePrefix = 'KiCad_HTML_BOM__' + pcbdata.metadata.title + '__' +
pcbdata.metadata.revision + '__#';
var storage;
function initStorage(key) {
try {
window.localStorage.getItem("blank");
storage = window.localStorage;
} catch (e) {
// localStorage not available
}
if (!storage) {
try {
window.sessionStorage.getItem("blank");
storage = window.sessionStorage;
} catch (e) {
// sessionStorage also not available
}
}
}
function readStorage(key) {
if (storage) {
return storage.getItem(storagePrefix + key);
} else {
return null;
}
}
function writeStorage(key, value) {
if (storage) {
storage.setItem(storagePrefix + key, value);
}
}
function fancyDblClickHandler(el, onsingle, ondouble) {
return function () {
if (el.getAttribute("data-dblclick") == null) {
el.setAttribute("data-dblclick", 1);
setTimeout(function () {
if (el.getAttribute("data-dblclick") == 1) {
onsingle();
}
el.removeAttribute("data-dblclick");
}, 200);
} else {
el.removeAttribute("data-dblclick");
ondouble();
}
}
}
function smoothScrollToRow(rowid) {
document.getElementById(rowid).scrollIntoView({
behavior: "smooth",
block: "center",
inline: "nearest"
});
}
function focusInputField(input) {
input.scrollIntoView(false);
input.focus();
input.select();
}
function saveBomTable(output) {
var text = '';
for (var node of bomhead.childNodes[0].childNodes) {
if (node.firstChild) {
text += (output == 'csv' ? `"${node.firstChild.nodeValue}"` : node.firstChild.nodeValue);
}
if (node != bomhead.childNodes[0].lastChild) {
text += (output == 'csv' ? ',' : '\t');
}
}
text += '\n';
for (var row of bombody.childNodes) {
for (var cell of row.childNodes) {
let val = '';
for (var node of cell.childNodes) {
if (node.nodeName == "INPUT") {
if (node.checked) {
val += '✓';
}
} else if ((node.nodeName == "MARK") || (node.nodeName == "A")) {
val += node.firstChild.nodeValue;
} else {
val += node.nodeValue;
}
}
if (output == 'csv') {
val = val.replace(/\"/g, '\"\"'); // pair of double-quote characters
if (isNumeric(val)) {
val = +val; // use number
} else {
val = `"${val}"`; // enclosed within double-quote
}
}
text += val;
if (cell != row.lastChild) {
text += (output == 'csv' ? ',' : '\t');
}
}
text += '\n';
}
if (output != 'clipboard') {
// To file: csv or txt
var blob = new Blob([text], {
type: `text/${output}`
});
saveFile(`${pcbdata.metadata.title}.${output}`, blob);
} else {
// To clipboard
var textArea = document.createElement("textarea");
textArea.classList.add('clipboard-temp');
textArea.value = text;
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
try {
if (document.execCommand('copy')) {
console.log('Bom copied to clipboard.');
}
} catch (err) {
console.log('Can not copy to clipboard.');
}
document.body.removeChild(textArea);
}
}
function isNumeric(str) {
/* https://stackoverflow.com/a/175787 */
return (typeof str != "string" ? false : !isNaN(str) && !isNaN(parseFloat(str)));
}
function removeGutterNode(node) {
for (var i = 0; i < node.childNodes.length; i++) {
if (node.childNodes[i].classList &&
node.childNodes[i].classList.contains("gutter")) {
node.removeChild(node.childNodes[i]);
break;
}
}
}
function cleanGutters() {
removeGutterNode(document.getElementById("bot"));
removeGutterNode(document.getElementById("canvasdiv"));
}
var units = {
prefixes: {
giga: ["G", "g", "giga", "Giga", "GIGA"],
mega: ["M", "mega", "Mega", "MEGA"],
kilo: ["K", "k", "kilo", "Kilo", "KILO"],
milli: ["m", "milli", "Milli", "MILLI"],
micro: ["U", "u", "micro", "Micro", "MICRO", "μ", "µ"], // different utf8 μ
nano: ["N", "n", "nano", "Nano", "NANO"],
pico: ["P", "p", "pico", "Pico", "PICO"],
},
unitsShort: ["R", "r", "Ω", "F", "f", "H", "h"],
unitsLong: [
"OHM", "Ohm", "ohm", "ohms",
"FARAD", "Farad", "farad",
"HENRY", "Henry", "henry"
],
getMultiplier: function (s) {
if (this.prefixes.giga.includes(s)) return 1e9;
if (this.prefixes.mega.includes(s)) return 1e6;
if (this.prefixes.kilo.includes(s)) return 1e3;
if (this.prefixes.milli.includes(s)) return 1e-3;
if (this.prefixes.micro.includes(s)) return 1e-6;
if (this.prefixes.nano.includes(s)) return 1e-9;
if (this.prefixes.pico.includes(s)) return 1e-12;
return 1;
},
valueRegex: null,
}
function initUtils() {
var allPrefixes = units.prefixes.giga
.concat(units.prefixes.mega)
.concat(units.prefixes.kilo)
.concat(units.prefixes.milli)
.concat(units.prefixes.micro)
.concat(units.prefixes.nano)
.concat(units.prefixes.pico);
var allUnits = units.unitsShort.concat(units.unitsLong);
units.valueRegex = new RegExp("^([0-9\.]+)" +
"\\s*(" + allPrefixes.join("|") + ")?" +
"(" + allUnits.join("|") + ")?" +
"(\\b.*)?$", "");
units.valueAltRegex = new RegExp("^([0-9]*)" +
"(" + units.unitsShort.join("|") + ")?" +
"([GgMmKkUuNnPp])?" +
"([0-9]*)" +
"(\\b.*)?$", "");
if (config.fields.includes("Value")) {
var index = config.fields.indexOf("Value");
pcbdata.bom["parsedValues"] = {};
for (var id in pcbdata.bom.fields) {
pcbdata.bom.parsedValues[id] = parseValue(pcbdata.bom.fields[id][index])
}
}
}
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 resetSettings() {
if (!confirm(
`This will reset all checkbox states and other settings.\n\n` +
`Press OK if you want to continue.`)) {
return;
}
if (storage) {
var keys = [];
for (var i = 0; i < storage.length; i++) {
var key = storage.key(i);
if (key.startsWith(storagePrefix)) keys.push(key);
}
for (var key of keys) storage.removeItem(key);
}
location.reload();
}
function overwriteSettings(newSettings) {
initDone = false;
Object.assign(settings, newSettings);
writeStorage("bomlayout", settings.bomlayout);
writeStorage("bommode", settings.bommode);
writeStorage("canvaslayout", settings.canvaslayout);
writeStorage("bomCheckboxes", settings.checkboxes.join(","));
document.getElementById("bomCheckboxes").value = settings.checkboxes.join(",");
for (var checkbox of settings.checkboxes) {
writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
}
writeStorage("markWhenChecked", settings.markWhenChecked);
padsVisible(settings.renderPads);
document.getElementById("padsCheckbox").checked = settings.renderPads;
fabricationVisible(settings.renderFabrication);
document.getElementById("fabricationCheckbox").checked = settings.renderFabrication;
silkscreenVisible(settings.renderSilkscreen);
document.getElementById("silkscreenCheckbox").checked = settings.renderSilkscreen;
referencesVisible(settings.renderReferences);
document.getElementById("referencesCheckbox").checked = settings.renderReferences;
valuesVisible(settings.renderValues);
document.getElementById("valuesCheckbox").checked = settings.renderValues;
tracksVisible(settings.renderTracks);
document.getElementById("tracksCheckbox").checked = settings.renderTracks;
zonesVisible(settings.renderZones);
document.getElementById("zonesCheckbox").checked = settings.renderZones;
dnpOutline(settings.renderDnpOutline);
document.getElementById("dnpOutlineCheckbox").checked = settings.renderDnpOutline;
setRedrawOnDrag(settings.redrawOnDrag);
document.getElementById("dragCheckbox").checked = settings.redrawOnDrag;
setDarkMode(settings.darkMode);
document.getElementById("darkmodeCheckbox").checked = settings.darkMode;
setHighlightPin1(settings.highlightpin1);
document.forms.highlightpin1.highlightpin1.value = settings.highlightpin1;
writeStorage("boardRotation", settings.boardRotation);
document.getElementById("boardRotation").value = settings.boardRotation / 5;
document.getElementById("rotationDegree").textContent = settings.boardRotation;
setOffsetBackRotation(settings.offsetBackRotation);
document.getElementById("offsetBackRotationCheckbox").checked = settings.offsetBackRotation;
initDone = true;
prepCheckboxes();
changeBomLayout(settings.bomlayout);
}
function saveFile(filename, blob) {
var link = document.createElement("a");
var objurl = URL.createObjectURL(blob);
link.download = filename;
link.href = objurl;
link.click();
}
function dataURLtoBlob(dataurl) {
var arr = dataurl.split(','),
mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]),
n = bstr.length,
u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], {
type: mime
});
}
var settings = {
canvaslayout: "FB",
bomlayout: "left-right",
bommode: "grouped",
checkboxes: [],
checkboxStoredRefs: {},
darkMode: false,
highlightpin1: "none",
redrawOnDrag: true,
boardRotation: 0,
offsetBackRotation: false,
renderPads: true,
renderReferences: true,
renderValues: true,
renderSilkscreen: true,
renderFabrication: true,
renderDnpOutline: false,
renderTracks: true,
renderZones: true,
columnOrder: [],
hiddenColumns: [],
netColors: {},
}
function initDefaults() {
settings.bomlayout = readStorage("bomlayout");
if (settings.bomlayout === null) {
settings.bomlayout = config.bom_view;
}
if (!['bom-only', 'left-right', 'top-bottom'].includes(settings.bomlayout)) {
settings.bomlayout = config.bom_view;
}
settings.bommode = readStorage("bommode");
if (settings.bommode === null) {
settings.bommode = "grouped";
}
if (settings.bommode == "netlist" && !pcbdata.nets) {
settings.bommode = "grouped";
}
if (!["grouped", "ungrouped", "netlist"].includes(settings.bommode)) {
settings.bommode = "grouped";
}
settings.canvaslayout = readStorage("canvaslayout");
if (settings.canvaslayout === null) {
settings.canvaslayout = config.layer_view;
}
var bomCheckboxes = readStorage("bomCheckboxes");
if (bomCheckboxes === null) {
bomCheckboxes = config.checkboxes;
}
settings.checkboxes = bomCheckboxes.split(",").filter((e) => e);
document.getElementById("bomCheckboxes").value = bomCheckboxes;
var highlightpin1 = readStorage("highlightpin1") || config.highlight_pin1;
if (highlightpin1 === "false") highlightpin1 = "none";
if (highlightpin1 === "true") highlightpin1 = "all";
setHighlightPin1(highlightpin1);
document.forms.highlightpin1.highlightpin1.value = highlightpin1;
settings.markWhenChecked = readStorage("markWhenChecked") || "";
populateMarkWhenCheckedOptions();
function initBooleanSetting(storageString, def, elementId, func) {
var b = readStorage(storageString);
if (b === null) {
b = def;
} else {
b = (b == "true");
}
document.getElementById(elementId).checked = b;
func(b);
}
initBooleanSetting("padsVisible", config.show_pads, "padsCheckbox", padsVisible);
initBooleanSetting("fabricationVisible", config.show_fabrication, "fabricationCheckbox", fabricationVisible);
initBooleanSetting("silkscreenVisible", config.show_silkscreen, "silkscreenCheckbox", silkscreenVisible);
initBooleanSetting("referencesVisible", true, "referencesCheckbox", referencesVisible);
initBooleanSetting("valuesVisible", true, "valuesCheckbox", valuesVisible);
if ("tracks" in pcbdata) {
initBooleanSetting("tracksVisible", true, "tracksCheckbox", tracksVisible);
initBooleanSetting("zonesVisible", true, "zonesCheckbox", zonesVisible);
} else {
document.getElementById("tracksAndZonesCheckboxes").style.display = "none";
tracksVisible(false);
zonesVisible(false);
}
initBooleanSetting("dnpOutline", false, "dnpOutlineCheckbox", dnpOutline);
initBooleanSetting("redrawOnDrag", config.redraw_on_drag, "dragCheckbox", setRedrawOnDrag);
initBooleanSetting("darkmode", config.dark_mode, "darkmodeCheckbox", setDarkMode);
var fields = ["checkboxes", "References"].concat(config.fields).concat(["Quantity"]);
var hcols = JSON.parse(readStorage("hiddenColumns"));
if (hcols === null) {
hcols = [];
}
settings.hiddenColumns = hcols.filter(e => fields.includes(e));
var cord = JSON.parse(readStorage("columnOrder"));
if (cord === null) {
cord = fields;
} else {
cord = cord.filter(e => fields.includes(e));
if (cord.length != fields.length)
cord = fields;
}
settings.columnOrder = cord;
settings.boardRotation = readStorage("boardRotation");
if (settings.boardRotation === null) {
settings.boardRotation = config.board_rotation * 5;
} else {
settings.boardRotation = parseInt(settings.boardRotation);
}
document.getElementById("boardRotation").value = settings.boardRotation / 5;
document.getElementById("rotationDegree").textContent = settings.boardRotation;
initBooleanSetting("offsetBackRotation", config.offset_back_rotation, "offsetBackRotationCheckbox", setOffsetBackRotation);
settings.netColors = JSON.parse(readStorage("netColors")) || {};
}
// Helper classes for user js callbacks.
const IBOM_EVENT_TYPES = {
ALL: "all",
HIGHLIGHT_EVENT: "highlightEvent",
CHECKBOX_CHANGE_EVENT: "checkboxChangeEvent",
BOM_BODY_CHANGE_EVENT: "bomBodyChangeEvent",
}
const EventHandler = {
callbacks: {},
init: function () {
for (eventType of Object.values(IBOM_EVENT_TYPES))
this.callbacks[eventType] = [];
},
registerCallback: function (eventType, callback) {
this.callbacks[eventType].push(callback);
},
emitEvent: function (eventType, eventArgs) {
event = {
eventType: eventType,
args: eventArgs,
}
var callback;
for (callback of this.callbacks[eventType])
callback(event);
for (callback of this.callbacks[IBOM_EVENT_TYPES.ALL])
callback(event);
}
}
EventHandler.init();
///////////////////////////////////////////////
///////////////////////////////////////////////
/* PCB rendering code */
var emptyContext2d = document.createElement("canvas").getContext("2d");
function deg2rad(deg) {
return deg * Math.PI / 180;
}
function calcFontPoint(linepoint, text, offsetx, offsety, tilt) {
var point = [
linepoint[0] * text.width + offsetx,
linepoint[1] * text.height + offsety
];
// This approximates pcbnew behavior with how text tilts depending on horizontal justification
point[0] -= (linepoint[1] + 0.5 * (1 + text.justify[0])) * text.height * tilt;
return point;
}
function drawText(ctx, text, color) {
if ("ref" in text && !settings.renderReferences) return;
if ("val" in text && !settings.renderValues) return;
ctx.save();
ctx.fillStyle = color;
ctx.strokeStyle = color;
ctx.lineCap = "round";
ctx.lineJoin = "round";
ctx.lineWidth = text.thickness;
if ("svgpath" in text) {
ctx.stroke(new Path2D(text.svgpath));
ctx.restore();
return;
}
if ("polygons" in text) {
ctx.fill(getPolygonsPath(text));
ctx.restore();
return;
}
ctx.translate(...text.pos);
ctx.translate(text.thickness * 0.5, 0);
var angle = -text.angle;
if (text.attr.includes("mirrored")) {
ctx.scale(-1, 1);
angle = -angle;
}
var tilt = 0;
if (text.attr.includes("italic")) {
tilt = 0.125;
}
var interline = text.height * 1.5 + text.thickness;
var txt = text.text.split("\n");
// KiCad ignores last empty line.
if (txt[txt.length - 1] == '') txt.pop();
ctx.rotate(deg2rad(angle));
var offsety = (1 - text.justify[1]) / 2 * text.height; // One line offset
offsety -= (txt.length - 1) * (text.justify[1] + 1) / 2 * interline; // Multiline offset
for (var i in txt) {
var lineWidth = text.thickness + interline / 2 * tilt;
for (var j = 0; j < txt[i].length; j++) {
if (txt[i][j] == '\t') {
var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
lineWidth += fourSpaces - lineWidth % fourSpaces;
} else {
if (txt[i][j] == '~') {
j++;
if (j == txt[i].length)
break;
}
lineWidth += pcbdata.font_data[txt[i][j]].w * text.width;
}
}
var offsetx = -lineWidth * (text.justify[0] + 1) / 2;
var inOverbar = false;
for (var j = 0; j < txt[i].length; j++) {
if (config.kicad_text_formatting) {
if (txt[i][j] == '\t') {
var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
offsetx += fourSpaces - offsetx % fourSpaces;
continue;
} else if (txt[i][j] == '~') {
j++;
if (j == txt[i].length)
break;
if (txt[i][j] != '~') {
inOverbar = !inOverbar;
}
}
}
var glyph = pcbdata.font_data[txt[i][j]];
if (inOverbar) {
var overbarStart = [offsetx, -text.height * 1.4 + offsety];
var overbarEnd = [offsetx + text.width * glyph.w, overbarStart[1]];
if (!lastHadOverbar) {
overbarStart[0] += text.height * 1.4 * tilt;
lastHadOverbar = true;
}
ctx.beginPath();
ctx.moveTo(...overbarStart);
ctx.lineTo(...overbarEnd);
ctx.stroke();
} else {
lastHadOverbar = false;
}
for (var line of glyph.l) {
ctx.beginPath();
ctx.moveTo(...calcFontPoint(line[0], text, offsetx, offsety, tilt));
for (var k = 1; k < line.length; k++) {
ctx.lineTo(...calcFontPoint(line[k], text, offsetx, offsety, tilt));
}
ctx.stroke();
}
offsetx += glyph.w * text.width;
}
offsety += interline;
}
ctx.restore();
}
function drawedge(ctx, scalefactor, edge, color) {
ctx.strokeStyle = color;
ctx.fillStyle = color;
ctx.lineWidth = Math.max(1 / scalefactor, edge.width);
ctx.lineCap = "round";
ctx.lineJoin = "round";
if ("svgpath" in edge) {
ctx.stroke(new Path2D(edge.svgpath));
} else {
ctx.beginPath();
if (edge.type == "segment") {
ctx.moveTo(...edge.start);
ctx.lineTo(...edge.end);
}
if (edge.type == "rect") {
ctx.moveTo(...edge.start);
ctx.lineTo(edge.start[0], edge.end[1]);
ctx.lineTo(...edge.end);
ctx.lineTo(edge.end[0], edge.start[1]);
ctx.lineTo(...edge.start);
}
if (edge.type == "arc") {
ctx.arc(
...edge.start,
edge.radius,
deg2rad(edge.startangle),
deg2rad(edge.endangle));
}
if (edge.type == "circle") {
ctx.arc(
...edge.start,
edge.radius,
0, 2 * Math.PI);
ctx.closePath();
}
if (edge.type == "curve") {
ctx.moveTo(...edge.start);
ctx.bezierCurveTo(...edge.cpa, ...edge.cpb, ...edge.end);
}
if("filled" in edge && edge.filled)
ctx.fill();
else
ctx.stroke();
}
}
function getChamferedRectPath(size, radius, chamfpos, chamfratio) {
// chamfpos is a bitmask, left = 1, right = 2, bottom left = 4, bottom right = 8
var path = new Path2D();
var width = size[0];
var height = size[1];
var x = width * -0.5;
var y = height * -0.5;
var chamfOffset = Math.min(width, height) * chamfratio;
path.moveTo(x, 0);
if (chamfpos & 4) {
path.lineTo(x, y + height - chamfOffset);
path.lineTo(x + chamfOffset, y + height);
path.lineTo(0, y + height);
} else {
path.arcTo(x, y + height, x + width, y + height, radius);
}
if (chamfpos & 8) {
path.lineTo(x + width - chamfOffset, y + height);
path.lineTo(x + width, y + height - chamfOffset);
path.lineTo(x + width, 0);
} else {
path.arcTo(x + width, y + height, x + width, y, radius);
}
if (chamfpos & 2) {
path.lineTo(x + width, y + chamfOffset);
path.lineTo(x + width - chamfOffset, y);
path.lineTo(0, y);
} else {
path.arcTo(x + width, y, x, y, radius);
}
if (chamfpos & 1) {
path.lineTo(x + chamfOffset, y);
path.lineTo(x, y + chamfOffset);
path.lineTo(x, 0);
} else {
path.arcTo(x, y, x, y + height, radius);
}
path.closePath();
return path;
}
function getOblongPath(size) {
return getChamferedRectPath(size, Math.min(size[0], size[1]) / 2, 0, 0);
}
function getPolygonsPath(shape) {
if (shape.path2d) {
return shape.path2d;
}
if ("svgpath" in shape) {
shape.path2d = new Path2D(shape.svgpath);
} else {
var path = new Path2D();
for (var polygon of shape.polygons) {
path.moveTo(...polygon[0]);
for (var i = 1; i < polygon.length; i++) {
path.lineTo(...polygon[i]);
}
path.closePath();
}
shape.path2d = path;
}
return shape.path2d;
}
function drawPolygonShape(ctx, scalefactor, shape, color) {
ctx.save();
if (!("svgpath" in shape)) {
ctx.translate(...shape.pos);
ctx.rotate(deg2rad(-shape.angle));
}
if("filled" in shape && !shape.filled) {
ctx.strokeStyle = color;
ctx.lineWidth = Math.max(1 / scalefactor, shape.width);
ctx.lineCap = "round";
ctx.lineJoin = "round";
ctx.stroke(getPolygonsPath(shape));
} else {
ctx.fillStyle = color;
ctx.fill(getPolygonsPath(shape));
}
ctx.restore();
}
function drawDrawing(ctx, scalefactor, drawing, color) {
if (["segment", "arc", "circle", "curve", "rect"].includes(drawing.type)) {
drawedge(ctx, scalefactor, drawing, color);
} else if (drawing.type == "polygon") {
drawPolygonShape(ctx, scalefactor, drawing, color);
} else {
drawText(ctx, drawing, color);
}
}
function getCirclePath(radius) {
var path = new Path2D();
path.arc(0, 0, radius, 0, 2 * Math.PI);
path.closePath();
return path;
}
function getCachedPadPath(pad) {
if (!pad.path2d) {
// if path2d is not set, build one and cache it on pad object
if (pad.shape == "rect") {
pad.path2d = new Path2D();
pad.path2d.rect(...pad.size.map(c => -c * 0.5), ...pad.size);
} else if (pad.shape == "oval") {
pad.path2d = getOblongPath(pad.size);
} else if (pad.shape == "circle") {
pad.path2d = getCirclePath(pad.size[0] / 2);
} else if (pad.shape == "roundrect") {
pad.path2d = getChamferedRectPath(pad.size, pad.radius, 0, 0);
} else if (pad.shape == "chamfrect") {
pad.path2d = getChamferedRectPath(pad.size, pad.radius, pad.chamfpos, pad.chamfratio)
} else if (pad.shape == "custom") {
pad.path2d = getPolygonsPath(pad);
}
}
return pad.path2d;
}
function drawPad(ctx, pad, color, outline) {
ctx.save();
ctx.translate(...pad.pos);
ctx.rotate(-deg2rad(pad.angle));
if (pad.offset) {
ctx.translate(...pad.offset);
}
ctx.fillStyle = color;
ctx.strokeStyle = color;
var path = getCachedPadPath(pad);
if (outline) {
ctx.stroke(path);
} else {
ctx.fill(path);
}
ctx.restore();
}
function drawPadHole(ctx, pad, padHoleColor) {
if (pad.type != "th") return;
ctx.save();
ctx.translate(...pad.pos);
ctx.rotate(-deg2rad(pad.angle));
ctx.fillStyle = padHoleColor;
if (pad.drillshape == "oblong") {
ctx.fill(getOblongPath(pad.drillsize));
} else {
ctx.fill(getCirclePath(pad.drillsize[0] / 2));
}
ctx.restore();
}
function drawFootprint(ctx, layer, scalefactor, footprint, colors, highlight, outline) {
if (highlight) {
// draw bounding box
if (footprint.layer == layer) {
ctx.save();
ctx.globalAlpha = 0.2;
ctx.translate(...footprint.bbox.pos);
ctx.rotate(deg2rad(-footprint.bbox.angle));
ctx.translate(...footprint.bbox.relpos);
ctx.fillStyle = colors.pad;
ctx.fillRect(0, 0, ...footprint.bbox.size);
ctx.globalAlpha = 1;
ctx.strokeStyle = colors.pad;
ctx.lineWidth = 3 / scalefactor;
ctx.strokeRect(0, 0, ...footprint.bbox.size);
ctx.restore();
}
}
// draw drawings
for (var drawing of footprint.drawings) {
if (drawing.layer == layer) {
drawDrawing(ctx, scalefactor, drawing.drawing, colors.pad);
}
}
ctx.lineWidth = 3 / scalefactor;
// draw pads
if (settings.renderPads) {
for (var pad of footprint.pads) {
if (pad.layers.includes(layer)) {
drawPad(ctx, pad, colors.pad, outline);
if (pad.pin1 &&
(settings.highlightpin1 == "all" ||
settings.highlightpin1 == "selected" && highlight)) {
drawPad(ctx, pad, colors.outline, true);
}
}
}
for (var pad of footprint.pads) {
drawPadHole(ctx, pad, colors.padHole);
}
}
}
function drawEdgeCuts(canvas, scalefactor) {
var ctx = canvas.getContext("2d");
var edgecolor = getComputedStyle(topmostdiv).getPropertyValue('--pcb-edge-color');
for (var edge of pcbdata.edges) {
drawDrawing(ctx, scalefactor, edge, edgecolor);
}
}
function drawFootprints(canvas, layer, scalefactor, highlight) {
var ctx = canvas.getContext("2d");
ctx.lineWidth = 3 / scalefactor;
var style = getComputedStyle(topmostdiv);
var colors = {
pad: style.getPropertyValue('--pad-color'),
padHole: style.getPropertyValue('--pad-hole-color'),
outline: style.getPropertyValue('--pin1-outline-color'),
}
for (var i = 0; i < pcbdata.footprints.length; i++) {
var mod = pcbdata.footprints[i];
var outline = settings.renderDnpOutline && pcbdata.bom.skipped.includes(i);
var h = highlightedFootprints.includes(i);
var d = markedFootprints.has(i);
if (highlight) {
if(h && d) {
colors.pad = style.getPropertyValue('--pad-color-highlight-both');
colors.outline = style.getPropertyValue('--pin1-outline-color-highlight-both');
} else if (h) {
colors.pad = style.getPropertyValue('--pad-color-highlight');
colors.outline = style.getPropertyValue('--pin1-outline-color-highlight');
} else if (d) {
colors.pad = style.getPropertyValue('--pad-color-highlight-marked');
colors.outline = style.getPropertyValue('--pin1-outline-color-highlight-marked');
}
}
if( h || d || !highlight) {
drawFootprint(ctx, layer, scalefactor, mod, colors, highlight, outline);
}
}
}
function drawBgLayer(layername, canvas, layer, scalefactor, edgeColor, polygonColor, textColor) {
var ctx = canvas.getContext("2d");
for (var d of pcbdata.drawings[layername][layer]) {
if (["segment", "arc", "circle", "curve", "rect"].includes(d.type)) {
drawedge(ctx, scalefactor, d, edgeColor);
} else if (d.type == "polygon") {
drawPolygonShape(ctx, scalefactor, d, polygonColor);
} else {
drawText(ctx, d, textColor);
}
}
}
function drawTracks(canvas, layer, defaultColor, highlight) {
ctx = canvas.getContext("2d");
ctx.lineCap = "round";
var hasHole = (track) => (
'drillsize' in track &&
track.start[0] == track.end[0] &&
track.start[1] == track.end[1]);
// First draw tracks and tented vias
for (var track of pcbdata.tracks[layer]) {
if (highlight && highlightedNet != track.net) continue;
if (!hasHole(track)) {
ctx.strokeStyle = highlight ? defaultColor : settings.netColors[track.net] || defaultColor;
ctx.lineWidth = track.width;
ctx.beginPath();
if ('radius' in track) {
ctx.arc(
...track.center,
track.radius,
deg2rad(track.startangle),
deg2rad(track.endangle));
} else {
ctx.moveTo(...track.start);
ctx.lineTo(...track.end);
}
ctx.stroke();
}
}
// Second pass to draw untented vias
var style = getComputedStyle(topmostdiv);
var holeColor = style.getPropertyValue('--pad-hole-color')
for (var track of pcbdata.tracks[layer]) {
if (highlight && highlightedNet != track.net) continue;
if (hasHole(track)) {
ctx.strokeStyle = highlight ? defaultColor : settings.netColors[track.net] || defaultColor;
ctx.lineWidth = track.width;
ctx.beginPath();
ctx.moveTo(...track.start);
ctx.lineTo(...track.end);
ctx.stroke();
ctx.strokeStyle = holeColor;
ctx.lineWidth = track.drillsize;
ctx.lineTo(...track.end);
ctx.stroke();
}
}
}
function drawZones(canvas, layer, defaultColor, highlight) {
ctx = canvas.getContext("2d");
ctx.lineJoin = "round";
for (var zone of pcbdata.zones[layer]) {
if (highlight && highlightedNet != zone.net) continue;
ctx.strokeStyle = highlight ? defaultColor : settings.netColors[zone.net] || defaultColor;
ctx.fillStyle = highlight ? defaultColor : settings.netColors[zone.net] || defaultColor;
if (!zone.path2d) {
zone.path2d = getPolygonsPath(zone);
}
ctx.fill(zone.path2d, zone.fillrule || "nonzero");
if (zone.width > 0) {
ctx.lineWidth = zone.width;
ctx.stroke(zone.path2d);
}
}
}
function clearCanvas(canvas, color = null) {
var ctx = canvas.getContext("2d");
ctx.save();
ctx.setTransform(1, 0, 0, 1, 0, 0);
if (color) {
ctx.fillStyle = color;
ctx.fillRect(0, 0, canvas.width, canvas.height);
} else {
if (!window.matchMedia("print").matches)
ctx.clearRect(0, 0, canvas.width, canvas.height);
}
ctx.restore();
}
function drawNets(canvas, layer, highlight) {
var style = getComputedStyle(topmostdiv);
if (settings.renderZones) {
var zoneColor = style.getPropertyValue(highlight ? '--zone-color-highlight' : '--zone-color');
drawZones(canvas, layer, zoneColor, highlight);
}
if (settings.renderTracks) {
var trackColor = style.getPropertyValue(highlight ? '--track-color-highlight' : '--track-color');
drawTracks(canvas, layer, trackColor, highlight);
}
if (highlight && settings.renderPads) {
var padColor = style.getPropertyValue('--pad-color-highlight');
var padHoleColor = style.getPropertyValue('--pad-hole-color');
var ctx = canvas.getContext("2d");
for (var footprint of pcbdata.footprints) {
// draw pads
var padDrawn = false;
for (var pad of footprint.pads) {
if (highlightedNet != pad.net) continue;
if (pad.layers.includes(layer)) {
drawPad(ctx, pad, padColor, false);
padDrawn = true;
}
}
if (padDrawn) {
// redraw all pad holes because some pads may overlap
for (var pad of footprint.pads) {
drawPadHole(ctx, pad, padHoleColor);
}
}
}
}
}
function drawHighlightsOnLayer(canvasdict, clear = true) {
if (clear) {
clearCanvas(canvasdict.highlight);
}
if (markedFootprints.size > 0 || highlightedFootprints.length > 0) {
drawFootprints(canvasdict.highlight, canvasdict.layer,
canvasdict.transform.s * canvasdict.transform.zoom, true);
}
if (highlightedNet !== null) {
drawNets(canvasdict.highlight, canvasdict.layer, true);
}
}
function drawHighlights() {
drawHighlightsOnLayer(allcanvas.front);
drawHighlightsOnLayer(allcanvas.back);
}
function drawBackground(canvasdict, clear = true) {
if (clear) {
clearCanvas(canvasdict.bg);
clearCanvas(canvasdict.fab);
clearCanvas(canvasdict.silk);
}
drawNets(canvasdict.bg, canvasdict.layer, false);
drawFootprints(canvasdict.bg, canvasdict.layer,
canvasdict.transform.s * canvasdict.transform.zoom, false);
drawEdgeCuts(canvasdict.bg, canvasdict.transform.s * canvasdict.transform.zoom);
var style = getComputedStyle(topmostdiv);
var edgeColor = style.getPropertyValue('--silkscreen-edge-color');
var polygonColor = style.getPropertyValue('--silkscreen-polygon-color');
var textColor = style.getPropertyValue('--silkscreen-text-color');
if (settings.renderSilkscreen) {
drawBgLayer(
"silkscreen", canvasdict.silk, canvasdict.layer,
canvasdict.transform.s * canvasdict.transform.zoom,
edgeColor, polygonColor, textColor);
}
edgeColor = style.getPropertyValue('--fabrication-edge-color');
polygonColor = style.getPropertyValue('--fabrication-polygon-color');
textColor = style.getPropertyValue('--fabrication-text-color');
if (settings.renderFabrication) {
drawBgLayer(
"fabrication", canvasdict.fab, canvasdict.layer,
canvasdict.transform.s * canvasdict.transform.zoom,
edgeColor, polygonColor, textColor);
}
}
function prepareCanvas(canvas, flip, transform) {
var ctx = canvas.getContext("2d");
ctx.setTransform(1, 0, 0, 1, 0, 0);
ctx.scale(transform.zoom, transform.zoom);
ctx.translate(transform.panx, transform.pany);
if (flip) {
ctx.scale(-1, 1);
}
ctx.translate(transform.x, transform.y);
ctx.rotate(deg2rad(settings.boardRotation + (flip && settings.offsetBackRotation ? - 180 : 0)));
ctx.scale(transform.s, transform.s);
}
function prepareLayer(canvasdict) {
var flip = (canvasdict.layer === "B");
for (var c of ["bg", "fab", "silk", "highlight"]) {
prepareCanvas(canvasdict[c], flip, canvasdict.transform);
}
}
function rotateVector(v, angle) {
angle = deg2rad(angle);
return [
v[0] * Math.cos(angle) - v[1] * Math.sin(angle),
v[0] * Math.sin(angle) + v[1] * Math.cos(angle)
];
}
function applyRotation(bbox, flip) {
var corners = [
[bbox.minx, bbox.miny],
[bbox.minx, bbox.maxy],
[bbox.maxx, bbox.miny],
[bbox.maxx, bbox.maxy],
];
corners = corners.map((v) => rotateVector(v, settings.boardRotation + (flip && settings.offsetBackRotation ? - 180 : 0)));
return {
minx: corners.reduce((a, v) => Math.min(a, v[0]), Infinity),
miny: corners.reduce((a, v) => Math.min(a, v[1]), Infinity),
maxx: corners.reduce((a, v) => Math.max(a, v[0]), -Infinity),
maxy: corners.reduce((a, v) => Math.max(a, v[1]), -Infinity),
}
}
function recalcLayerScale(layerdict, width, height) {
var flip = (layerdict.layer === "B");
var bbox = applyRotation(pcbdata.edges_bbox, flip);
var scalefactor = 0.98 * Math.min(
width / (bbox.maxx - bbox.minx),
height / (bbox.maxy - bbox.miny)
);
if (scalefactor < 0.1) {
scalefactor = 1;
}
layerdict.transform.s = scalefactor;
if (flip) {
layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor + width) * 0.5;
} else {
layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor - width) * 0.5;
}
layerdict.transform.y = -((bbox.maxy + bbox.miny) * scalefactor - height) * 0.5;
for (var c of ["bg", "fab", "silk", "highlight"]) {
canvas = layerdict[c];
canvas.width = width;
canvas.height = height;
canvas.style.width = (width / devicePixelRatio) + "px";
canvas.style.height = (height / devicePixelRatio) + "px";
}
}
function redrawCanvas(layerdict) {
prepareLayer(layerdict);
drawBackground(layerdict);
drawHighlightsOnLayer(layerdict);
}
function resizeCanvas(layerdict) {
var canvasdivid = {
"F": "frontcanvas",
"B": "backcanvas"
} [layerdict.layer];
var width = document.getElementById(canvasdivid).clientWidth * devicePixelRatio;
var height = document.getElementById(canvasdivid).clientHeight * devicePixelRatio;
recalcLayerScale(layerdict, width, height);
redrawCanvas(layerdict);
}
function resizeAll() {
resizeCanvas(allcanvas.front);
resizeCanvas(allcanvas.back);
}
function pointWithinDistanceToSegment(x, y, x1, y1, x2, y2, d) {
var A = x - x1;
var B = y - y1;
var C = x2 - x1;
var D = y2 - y1;
var dot = A * C + B * D;
var len_sq = C * C + D * D;
var dx, dy;
if (len_sq == 0) {
// start and end of the segment coincide
dx = x - x1;
dy = y - y1;
} else {
var param = dot / len_sq;
var xx, yy;
if (param < 0) {
xx = x1;
yy = y1;
} else if (param > 1) {
xx = x2;
yy = y2;
} else {
xx = x1 + param * C;
yy = y1 + param * D;
}
dx = x - xx;
dy = y - yy;
}
return dx * dx + dy * dy <= d * d;
}
function modulo(n, mod) {
return ((n % mod) + mod) % mod;
}
function pointWithinDistanceToArc(x, y, xc, yc, radius, startangle, endangle, d) {
var dx = x - xc;
var dy = y - yc;
var r_sq = dx * dx + dy * dy;
var rmin = Math.max(0, radius - d);
var rmax = radius + d;
if (r_sq < rmin * rmin || r_sq > rmax * rmax)
return false;
var angle1 = modulo(deg2rad(startangle), 2 * Math.PI);
var dx1 = xc + radius * Math.cos(angle1) - x;
var dy1 = yc + radius * Math.sin(angle1) - y;
if (dx1 * dx1 + dy1 * dy1 <= d * d)
return true;
var angle2 = modulo(deg2rad(endangle), 2 * Math.PI);
var dx2 = xc + radius * Math.cos(angle2) - x;
var dy2 = yc + radius * Math.sin(angle2) - y;
if (dx2 * dx2 + dy2 * dy2 <= d * d)
return true;
var angle = modulo(Math.atan2(dy, dx), 2 * Math.PI);
if (angle1 > angle2)
return (angle >= angle2 || angle <= angle1);
else
return (angle >= angle1 && angle <= angle2);
}
function pointWithinPad(x, y, pad) {
var v = [x - pad.pos[0], y - pad.pos[1]];
v = rotateVector(v, pad.angle);
if (pad.offset) {
v[0] -= pad.offset[0];
v[1] -= pad.offset[1];
}
return emptyContext2d.isPointInPath(getCachedPadPath(pad), ...v);
}
function netHitScan(layer, x, y) {
// Check track segments
if (settings.renderTracks && pcbdata.tracks) {
for (var track of pcbdata.tracks[layer]) {
if ('radius' in track) {
if (pointWithinDistanceToArc(x, y, ...track.center, track.radius, track.startangle, track.endangle, track.width / 2)) {
return track.net;
}
} else {
if (pointWithinDistanceToSegment(x, y, ...track.start, ...track.end, track.width / 2)) {
return track.net;
}
}
}
}
// Check pads
if (settings.renderPads) {
for (var footprint of pcbdata.footprints) {
for (var pad of footprint.pads) {
if (pad.layers.includes(layer) && pointWithinPad(x, y, pad)) {
return pad.net;
}
}
}
}
return null;
}
function pointWithinFootprintBbox(x, y, bbox) {
var v = [x - bbox.pos[0], y - bbox.pos[1]];
v = rotateVector(v, bbox.angle);
return bbox.relpos[0] <= v[0] && v[0] <= bbox.relpos[0] + bbox.size[0] &&
bbox.relpos[1] <= v[1] && v[1] <= bbox.relpos[1] + bbox.size[1];
}
function bboxHitScan(layer, x, y) {
var result = [];
for (var i = 0; i < pcbdata.footprints.length; i++) {
var footprint = pcbdata.footprints[i];
if (footprint.layer == layer) {
if (pointWithinFootprintBbox(x, y, footprint.bbox)) {
result.push(i);
}
}
}
return result;
}
function handlePointerDown(e, layerdict) {
if (e.button != 0 && e.button != 1) {
return;
}
e.preventDefault();
e.stopPropagation();
if (!e.hasOwnProperty("offsetX")) {
// The polyfill doesn't set this properly
e.offsetX = e.pageX - e.currentTarget.offsetLeft;
e.offsetY = e.pageY - e.currentTarget.offsetTop;
}
layerdict.pointerStates[e.pointerId] = {
distanceTravelled: 0,
lastX: e.offsetX,
lastY: e.offsetY,
downTime: Date.now(),
};
}
function handleMouseClick(e, layerdict) {
if (!e.hasOwnProperty("offsetX")) {
// The polyfill doesn't set this properly
e.offsetX = e.pageX - e.currentTarget.offsetLeft;
e.offsetY = e.pageY - e.currentTarget.offsetTop;
}
var x = e.offsetX;
var y = e.offsetY;
var t = layerdict.transform;
var flip = layerdict.layer === "B";
if (flip) {
x = (devicePixelRatio * x / t.zoom - t.panx + t.x) / -t.s;
} else {
x = (devicePixelRatio * x / t.zoom - t.panx - t.x) / t.s;
}
y = (devicePixelRatio * y / t.zoom - t.y - t.pany) / t.s;
var v = rotateVector([x, y], -settings.boardRotation + (flip && settings.offsetBackRotation ? - 180 : 0));
if ("nets" in pcbdata) {
var net = netHitScan(layerdict.layer, ...v);
if (net !== highlightedNet) {
netClicked(net);
}
}
if (highlightedNet === null) {
var footprints = bboxHitScan(layerdict.layer, ...v);
if (footprints.length > 0) {
footprintsClicked(footprints);
}
}
}
function handlePointerLeave(e, layerdict) {
e.preventDefault();
e.stopPropagation();
if (!settings.redrawOnDrag) {
redrawCanvas(layerdict);
}
delete layerdict.pointerStates[e.pointerId];
}
function resetTransform(layerdict) {
layerdict.transform.panx = 0;
layerdict.transform.pany = 0;
layerdict.transform.zoom = 1;
redrawCanvas(layerdict);
}
function handlePointerUp(e, layerdict) {
if (!e.hasOwnProperty("offsetX")) {
// The polyfill doesn't set this properly
e.offsetX = e.pageX - e.currentTarget.offsetLeft;
e.offsetY = e.pageY - e.currentTarget.offsetTop;
}
e.preventDefault();
e.stopPropagation();
if (e.button == 2) {
// Reset pan and zoom on right click.
resetTransform(layerdict);
layerdict.anotherPointerTapped = false;
return;
}
// We haven't necessarily had a pointermove event since the interaction started, so make sure we update this now
var ptr = layerdict.pointerStates[e.pointerId];
ptr.distanceTravelled += Math.abs(e.offsetX - ptr.lastX) + Math.abs(e.offsetY - ptr.lastY);
if (e.button == 0 && ptr.distanceTravelled < 10 && Date.now() - ptr.downTime <= 500) {
if (Object.keys(layerdict.pointerStates).length == 1) {
if (layerdict.anotherPointerTapped) {
// This is the second pointer coming off of a two-finger tap
resetTransform(layerdict);
} else {
// This is just a regular tap
handleMouseClick(e, layerdict);
}
layerdict.anotherPointerTapped = false;
} else {
// This is the first finger coming off of what could become a two-finger tap
layerdict.anotherPointerTapped = true;
}
} else {
if (!settings.redrawOnDrag) {
redrawCanvas(layerdict);
}
layerdict.anotherPointerTapped = false;
}
delete layerdict.pointerStates[e.pointerId];
}
function handlePointerMove(e, layerdict) {
if (!layerdict.pointerStates.hasOwnProperty(e.pointerId)) {
return;
}
e.preventDefault();
e.stopPropagation();
if (!e.hasOwnProperty("offsetX")) {
// The polyfill doesn't set this properly
e.offsetX = e.pageX - e.currentTarget.offsetLeft;
e.offsetY = e.pageY - e.currentTarget.offsetTop;
}
var thisPtr = layerdict.pointerStates[e.pointerId];
var dx = e.offsetX - thisPtr.lastX;
var dy = e.offsetY - thisPtr.lastY;
// If this number is low on pointer up, we count the action as a click
thisPtr.distanceTravelled += Math.abs(dx) + Math.abs(dy);
if (Object.keys(layerdict.pointerStates).length == 1) {
// This is a simple drag
layerdict.transform.panx += devicePixelRatio * dx / layerdict.transform.zoom;
layerdict.transform.pany += devicePixelRatio * dy / layerdict.transform.zoom;
} else if (Object.keys(layerdict.pointerStates).length == 2) {
var otherPtr = Object.values(layerdict.pointerStates).filter((ptr) => ptr != thisPtr)[0];
var oldDist = Math.sqrt(Math.pow(thisPtr.lastX - otherPtr.lastX, 2) + Math.pow(thisPtr.lastY - otherPtr.lastY, 2));
var newDist = Math.sqrt(Math.pow(e.offsetX - otherPtr.lastX, 2) + Math.pow(e.offsetY - otherPtr.lastY, 2));
var scaleFactor = newDist / oldDist;
if (scaleFactor != NaN) {
layerdict.transform.zoom *= scaleFactor;
var zoomd = (1 - scaleFactor) / layerdict.transform.zoom;
layerdict.transform.panx += devicePixelRatio * otherPtr.lastX * zoomd;
layerdict.transform.pany += devicePixelRatio * otherPtr.lastY * zoomd;
}
}
thisPtr.lastX = e.offsetX;
thisPtr.lastY = e.offsetY;
if (settings.redrawOnDrag) {
redrawCanvas(layerdict);
}
}
function handleMouseWheel(e, layerdict) {
e.preventDefault();
e.stopPropagation();
var t = layerdict.transform;
var wheeldelta = e.deltaY;
if (e.deltaMode == 1) {
// FF only, scroll by lines
wheeldelta *= 30;
} else if (e.deltaMode == 2) {
wheeldelta *= 300;
}
var m = Math.pow(1.1, -wheeldelta / 40);
// Limit amount of zoom per tick.
if (m > 2) {
m = 2;
} else if (m < 0.5) {
m = 0.5;
}
t.zoom *= m;
var zoomd = (1 - m) / t.zoom;
t.panx += devicePixelRatio * e.offsetX * zoomd;
t.pany += devicePixelRatio * e.offsetY * zoomd;
redrawCanvas(layerdict);
}
function addMouseHandlers(div, layerdict) {
div.addEventListener("pointerdown", function(e) {
handlePointerDown(e, layerdict);
});
div.addEventListener("pointermove", function(e) {
handlePointerMove(e, layerdict);
});
div.addEventListener("pointerup", function(e) {
handlePointerUp(e, layerdict);
});
var pointerleave = function(e) {
handlePointerLeave(e, layerdict);
}
div.addEventListener("pointercancel", pointerleave);
div.addEventListener("pointerleave", pointerleave);
div.addEventListener("pointerout", pointerleave);
div.onwheel = function(e) {
handleMouseWheel(e, layerdict);
}
for (var element of [div, layerdict.bg, layerdict.fab, layerdict.silk, layerdict.highlight]) {
element.addEventListener("contextmenu", function(e) {
e.preventDefault();
}, false);
}
}
function setRedrawOnDrag(value) {
settings.redrawOnDrag = value;
writeStorage("redrawOnDrag", value);
}
function setBoardRotation(value) {
settings.boardRotation = value * 5;
writeStorage("boardRotation", settings.boardRotation);
document.getElementById("rotationDegree").textContent = settings.boardRotation;
resizeAll();
}
function setOffsetBackRotation(value) {
settings.offsetBackRotation = value;
writeStorage("offsetBackRotation", value);
resizeAll();
}
function initRender() {
allcanvas = {
front: {
transform: {
x: 0,
y: 0,
s: 1,
panx: 0,
pany: 0,
zoom: 1,
},
pointerStates: {},
anotherPointerTapped: false,
bg: document.getElementById("F_bg"),
fab: document.getElementById("F_fab"),
silk: document.getElementById("F_slk"),
highlight: document.getElementById("F_hl"),
layer: "F",
},
back: {
transform: {
x: 0,
y: 0,
s: 1,
panx: 0,
pany: 0,
zoom: 1,
},
pointerStates: {},
anotherPointerTapped: false,
bg: document.getElementById("B_bg"),
fab: document.getElementById("B_fab"),
silk: document.getElementById("B_slk"),
highlight: document.getElementById("B_hl"),
layer: "B",
}
};
addMouseHandlers(document.getElementById("frontcanvas"), allcanvas.front);
addMouseHandlers(document.getElementById("backcanvas"), allcanvas.back);
}
///////////////////////////////////////////////
///////////////////////////////////////////////
/*
* Table reordering via Drag'n'Drop
* Inspired by: https://htmldom.dev/drag-and-drop-table-column
*/
function setBomHandlers() {
const bom = document.getElementById('bomtable');
let dragName;
let placeHolderElements;
let draggingElement;
let forcePopulation;
let xOffset;
let yOffset;
let wasDragged;
const mouseUpHandler = function(e) {
// Delete dragging element
draggingElement.remove();
// Make BOM selectable again
bom.style.removeProperty("userSelect");
// Remove listeners
document.removeEventListener('mousemove', mouseMoveHandler);
document.removeEventListener('mouseup', mouseUpHandler);
if (wasDragged) {
// Redraw whole BOM
populateBomTable();
}
}
const mouseMoveHandler = function(e) {
// Notice the dragging
wasDragged = true;
// Make the dragged element visible
draggingElement.style.removeProperty("display");
// Set elements position to mouse position
draggingElement.style.left = `${e.screenX - xOffset}px`;
draggingElement.style.top = `${e.screenY - yOffset}px`;
// Forced redrawing of BOM table
if (forcePopulation) {
forcePopulation = false;
// Copy array
phe = Array.from(placeHolderElements);
// populate BOM table again
populateBomHeader(dragName, phe);
populateBomBody(dragName, phe);
}
// Set up array of hidden columns
var hiddenColumns = Array.from(settings.hiddenColumns);
// In the ungrouped mode, quantity don't exist
if (settings.bommode === "ungrouped")
hiddenColumns.push("Quantity");
// If no checkbox fields can be found, we consider them hidden
if (settings.checkboxes.length == 0)
hiddenColumns.push("checkboxes");
// Get table headers and group them into checkboxes, extrafields and normal headers
const bh = document.getElementById("bomhead");
headers = Array.from(bh.querySelectorAll("th"))
headers.shift() // numCol is not part of the columnOrder
headerGroups = []
lastCompoundClass = null;
for (i = 0; i < settings.columnOrder.length; i++) {
cElem = settings.columnOrder[i];
if (hiddenColumns.includes(cElem)) {
// Hidden columns appear as a dummy element
headerGroups.push([]);
continue;
}
elem = headers.filter(e => getColumnOrderName(e) === cElem)[0];
if (elem.classList.contains("bom-checkbox")) {
if (lastCompoundClass === "bom-checkbox") {
cbGroup = headerGroups.pop();
cbGroup.push(elem);
headerGroups.push(cbGroup);
} else {
lastCompoundClass = "bom-checkbox";
headerGroups.push([elem])
}
} else {
headerGroups.push([elem])
}
}
// Copy settings.columnOrder
var columns = Array.from(settings.columnOrder)
// Set up array with indices of hidden columns
var hiddenIndices = hiddenColumns.map(e => settings.columnOrder.indexOf(e));
var dragIndex = columns.indexOf(dragName);
var swapIndex = dragIndex;
var swapDone = false;
// Check if the current dragged element is swapable with the left or right element
if (dragIndex > 0) {
// Get left headers boundingbox
swapIndex = dragIndex - 1;
while (hiddenIndices.includes(swapIndex) && swapIndex > 0)
swapIndex--;
if (!hiddenIndices.includes(swapIndex)) {
box = getBoundingClientRectFromMultiple(headerGroups[swapIndex]);
if (e.clientX < box.left + window.scrollX + (box.width / 2)) {
swapElement = columns[dragIndex];
columns.splice(dragIndex, 1);
columns.splice(swapIndex, 0, swapElement);
forcePopulation = true;
swapDone = true;
}
}
}
if ((!swapDone) && dragIndex < headerGroups.length - 1) {
// Get right headers boundingbox
swapIndex = dragIndex + 1;
while (hiddenIndices.includes(swapIndex))
swapIndex++;
if (swapIndex < headerGroups.length) {
box = getBoundingClientRectFromMultiple(headerGroups[swapIndex]);
if (e.clientX > box.left + window.scrollX + (box.width / 2)) {
swapElement = columns[dragIndex];
columns.splice(dragIndex, 1);
columns.splice(swapIndex, 0, swapElement);
forcePopulation = true;
swapDone = true;
}
}
}
// Write back change to storage
if (swapDone) {
settings.columnOrder = columns
writeStorage("columnOrder", JSON.stringify(columns));
}
}
const mouseDownHandler = function(e) {
var target = e.target;
if (target.tagName.toLowerCase() != "td")
target = target.parentElement;
// Used to check if a dragging has ever happened
wasDragged = false;
// Create new element which will be displayed as the dragged column
draggingElement = document.createElement("div")
draggingElement.classList.add("dragging");
draggingElement.style.display = "none";
draggingElement.style.position = "absolute";
draggingElement.style.overflow = "hidden";
// Get bomhead and bombody elements
const bh = document.getElementById("bomhead");
const bb = document.getElementById("bombody");
// Get all compound headers for the current column
var compoundHeaders;
if (target.classList.contains("bom-checkbox")) {
compoundHeaders = Array.from(bh.querySelectorAll("th.bom-checkbox"));
} else {
compoundHeaders = [target];
}
// Create new table which will display the column
var newTable = document.createElement("table");
newTable.classList.add("bom");
newTable.style.background = "white";
draggingElement.append(newTable);
// Create new header element
var newHeader = document.createElement("thead");
newTable.append(newHeader);
// Set up array for storing all placeholder elements
placeHolderElements = [];
// Add all compound headers to the new thead element and placeholders
compoundHeaders.forEach(function(h) {
clone = cloneElementWithDimensions(h);
newHeader.append(clone);
placeHolderElements.push(clone);
});
// Create new body element
var newBody = document.createElement("tbody");
newTable.append(newBody);
// Get indices for compound headers
var idxs = compoundHeaders.map(e => getBomTableHeaderIndex(e));
// For each row in the BOM body...
var rows = bb.querySelectorAll("tr");
rows.forEach(function(row) {
// ..get the cells for the compound column
const tds = row.querySelectorAll("td");
var copytds = idxs.map(i => tds[i]);
// Add them to the new element and the placeholders
var newRow = document.createElement("tr");
copytds.forEach(function(td) {
clone = cloneElementWithDimensions(td);
newRow.append(clone);
placeHolderElements.push(clone);
});
newBody.append(newRow);
});
// Compute width for compound header
var width = compoundHeaders.reduce((acc, x) => acc + x.clientWidth, 0);
draggingElement.style.width = `${width}px`;
// Insert the new dragging element and disable selection on BOM
bom.insertBefore(draggingElement, null);
bom.style.userSelect = "none";
// Determine the mouse position offset
xOffset = e.screenX - compoundHeaders.reduce((acc, x) => Math.min(acc, x.offsetLeft), compoundHeaders[0].offsetLeft);
yOffset = e.screenY - compoundHeaders[0].offsetTop;
// Get name for the column in settings.columnOrder
dragName = getColumnOrderName(target);
// Change text and class for placeholder elements
placeHolderElements = placeHolderElements.map(function(e) {
newElem = cloneElementWithDimensions(e);
newElem.textContent = "";
newElem.classList.add("placeholder");
return newElem;
});
// On next mouse move, the whole BOM needs to be redrawn to show the placeholders
forcePopulation = true;
// Add listeners for move and up on mouse
document.addEventListener('mousemove', mouseMoveHandler);
document.addEventListener('mouseup', mouseUpHandler);
}
// In netlist mode, there is nothing to reorder
if (settings.bommode === "netlist")
return;
// Add mouseDownHandler to every column except the numCol
bom.querySelectorAll("th")
.forEach(function(head) {
if (!head.classList.contains("numCol")) {
head.onmousedown = mouseDownHandler;
}
});
}
function getBoundingClientRectFromMultiple(elements) {
var elems = Array.from(elements);
if (elems.length == 0)
return null;
var box = elems.shift()
.getBoundingClientRect();
elems.forEach(function(elem) {
var elembox = elem.getBoundingClientRect();
box.left = Math.min(elembox.left, box.left);
box.top = Math.min(elembox.top, box.top);
box.width += elembox.width;
box.height = Math.max(elembox.height, box.height);
});
return box;
}
function cloneElementWithDimensions(elem) {
var newElem = elem.cloneNode(true);
newElem.style.height = window.getComputedStyle(elem).height;
newElem.style.width = window.getComputedStyle(elem).width;
return newElem;
}
function getBomTableHeaderIndex(elem) {
const bh = document.getElementById('bomhead');
const ths = Array.from(bh.querySelectorAll("th"));
return ths.indexOf(elem);
}
function getColumnOrderName(elem) {
var cname = elem.getAttribute("col_name");
if (cname === "bom-checkbox")
return "checkboxes";
else
return cname;
}
function resizableGrid(tablehead) {
var cols = tablehead.firstElementChild.children;
var rowWidth = tablehead.offsetWidth;
for (var i = 1; i < cols.length; i++) {
if (cols[i].classList.contains("bom-checkbox"))
continue;
cols[i].style.width = ((cols[i].clientWidth - paddingDiff(cols[i])) * 100 / rowWidth) + '%';
}
for (var i = 1; i < cols.length - 1; i++) {
var div = document.createElement('div');
div.className = "column-width-handle";
cols[i].appendChild(div);
setListeners(div);
}
function setListeners(div) {
var startX, curCol, nxtCol, curColWidth, nxtColWidth, rowWidth;
div.addEventListener('mousedown', function(e) {
e.preventDefault();
e.stopPropagation();
curCol = e.target.parentElement;
nxtCol = curCol.nextElementSibling;
startX = e.pageX;
var padding = paddingDiff(curCol);
rowWidth = curCol.parentElement.offsetWidth;
curColWidth = curCol.clientWidth - padding;
nxtColWidth = nxtCol.clientWidth - padding;
});
document.addEventListener('mousemove', function(e) {
if (startX) {
var diffX = e.pageX - startX;
diffX = -Math.min(-diffX, curColWidth - 20);
diffX = Math.min(diffX, nxtColWidth - 20);
curCol.style.width = ((curColWidth + diffX) * 100 / rowWidth) + '%';
nxtCol.style.width = ((nxtColWidth - diffX) * 100 / rowWidth) + '%';
console.log(`${curColWidth + nxtColWidth} ${(curColWidth + diffX) * 100 / rowWidth + (nxtColWidth - diffX) * 100 / rowWidth}`);
}
});
document.addEventListener('mouseup', function(e) {
curCol = undefined;
nxtCol = undefined;
startX = undefined;
nxtColWidth = undefined;
curColWidth = undefined
});
}
function paddingDiff(col) {
if (getStyleVal(col, 'box-sizing') == 'border-box') {
return 0;
}
var padLeft = getStyleVal(col, 'padding-left');
var padRight = getStyleVal(col, 'padding-right');
return (parseInt(padLeft) + parseInt(padRight));
}
function getStyleVal(elm, css) {
return (window.getComputedStyle(elm, null).getPropertyValue(css))
}
}
///////////////////////////////////////////////
///////////////////////////////////////////////
/* DOM manipulation and misc code */
var bomsplit;
var canvassplit;
var initDone = false;
var bomSortFunction = null;
var currentSortColumn = null;
var currentSortOrder = null;
var currentHighlightedRowId;
var highlightHandlers = [];
var footprintIndexToHandler = {};
var netsToHandler = {};
var markedFootprints = new Set();
var highlightedFootprints = [];
var highlightedNet = null;
var lastClicked;
function dbg(html) {
dbgdiv.innerHTML = html;
}
function redrawIfInitDone() {
if (initDone) {
redrawCanvas(allcanvas.front);
redrawCanvas(allcanvas.back);
}
}
function padsVisible(value) {
writeStorage("padsVisible", value);
settings.renderPads = value;
redrawIfInitDone();
}
function referencesVisible(value) {
writeStorage("referencesVisible", value);
settings.renderReferences = value;
redrawIfInitDone();
}
function valuesVisible(value) {
writeStorage("valuesVisible", value);
settings.renderValues = value;
redrawIfInitDone();
}
function tracksVisible(value) {
writeStorage("tracksVisible", value);
settings.renderTracks = value;
redrawIfInitDone();
}
function zonesVisible(value) {
writeStorage("zonesVisible", value);
settings.renderZones = value;
redrawIfInitDone();
}
function dnpOutline(value) {
writeStorage("dnpOutline", value);
settings.renderDnpOutline = value;
redrawIfInitDone();
}
function setDarkMode(value) {
if (value) {
topmostdiv.classList.add("dark");
} else {
topmostdiv.classList.remove("dark");
}
writeStorage("darkmode", value);
settings.darkMode = value;
redrawIfInitDone();
if (initDone) {
populateBomTable();
}
}
function setShowBOMColumn(field, value) {
if (field === "references") {
var rl = document.getElementById("reflookup");
rl.disabled = !value;
if (!value) {
rl.value = "";
updateRefLookup("");
}
}
var n = settings.hiddenColumns.indexOf(field);
if (value) {
if (n != -1) {
settings.hiddenColumns.splice(n, 1);
}
} else {
if (n == -1) {
settings.hiddenColumns.push(field);
}
}
writeStorage("hiddenColumns", JSON.stringify(settings.hiddenColumns));
if (initDone) {
populateBomTable();
}
redrawIfInitDone();
}
function setFullscreen(value) {
if (value) {
document.documentElement.requestFullscreen();
} else {
document.exitFullscreen();
}
}
function fabricationVisible(value) {
writeStorage("fabricationVisible", value);
settings.renderFabrication = value;
redrawIfInitDone();
}
function silkscreenVisible(value) {
writeStorage("silkscreenVisible", value);
settings.renderSilkscreen = value;
redrawIfInitDone();
}
function setHighlightPin1(value) {
writeStorage("highlightpin1", value);
settings.highlightpin1 = value;
redrawIfInitDone();
}
function getStoredCheckboxRefs(checkbox) {
function convert(ref) {
var intref = parseInt(ref);
if (isNaN(intref)) {
for (var i = 0; i < pcbdata.footprints.length; i++) {
if (pcbdata.footprints[i].ref == ref) {
return i;
}
}
return -1;
} else {
return intref;
}
}
if (!(checkbox in settings.checkboxStoredRefs)) {
var val = readStorage("checkbox_" + checkbox);
settings.checkboxStoredRefs[checkbox] = val ? val : "";
}
if (!settings.checkboxStoredRefs[checkbox]) {
return new Set();
} else {
return new Set(settings.checkboxStoredRefs[checkbox].split(",").map(r => convert(r)).filter(a => a >= 0));
}
}
function getCheckboxState(checkbox, references) {
var storedRefsSet = getStoredCheckboxRefs(checkbox);
var currentRefsSet = new Set(references.map(r => r[1]));
// Get difference of current - stored
var difference = new Set(currentRefsSet);
for (ref of storedRefsSet) {
difference.delete(ref);
}
if (difference.size == 0) {
// All the current refs are stored
return "checked";
} else if (difference.size == currentRefsSet.size) {
// None of the current refs are stored
return "unchecked";
} else {
// Some of the refs are stored
return "indeterminate";
}
}
function setBomCheckboxState(checkbox, element, references) {
var state = getCheckboxState(checkbox, references);
element.checked = (state == "checked");
element.indeterminate = (state == "indeterminate");
}
function createCheckboxChangeHandler(checkbox, references, row) {
return function () {
refsSet = getStoredCheckboxRefs(checkbox);
var markWhenChecked = settings.markWhenChecked == checkbox;
eventArgs = {
checkbox: checkbox,
refs: references,
}
if (this.checked) {
// checkbox ticked
for (var ref of references) {
refsSet.add(ref[1]);
}
if (markWhenChecked) {
row.classList.add("checked");
for (var ref of references) {
markedFootprints.add(ref[1]);
}
drawHighlights();
}
eventArgs.state = 'checked';
} else {
// checkbox unticked
for (var ref of references) {
refsSet.delete(ref[1]);
}
if (markWhenChecked) {
row.classList.remove("checked");
for (var ref of references) {
markedFootprints.delete(ref[1]);
}
drawHighlights();
}
eventArgs.state = 'unchecked';
}
settings.checkboxStoredRefs[checkbox] = [...refsSet].join(",");
writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
updateCheckboxStats(checkbox);
EventHandler.emitEvent(IBOM_EVENT_TYPES.CHECKBOX_CHANGE_EVENT, eventArgs);
}
}
function clearHighlightedFootprints() {
if (currentHighlightedRowId) {
document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
currentHighlightedRowId = null;
highlightedFootprints = [];
highlightedNet = null;
}
}
function createRowHighlightHandler(rowid, refs, net) {
return function () {
if (currentHighlightedRowId) {
if (currentHighlightedRowId == rowid) {
return;
}
document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
}
document.getElementById(rowid).classList.add("highlighted");
currentHighlightedRowId = rowid;
highlightedFootprints = refs ? refs.map(r => r[1]) : [];
highlightedNet = net;
drawHighlights();
EventHandler.emitEvent(
IBOM_EVENT_TYPES.HIGHLIGHT_EVENT, {
rowid: rowid,
refs: refs,
net: net
});
}
}
function updateNetColors() {
writeStorage("netColors", JSON.stringify(settings.netColors));
redrawIfInitDone();
}
function netColorChangeHandler(net) {
return (event) => {
settings.netColors[net] = event.target.value;
updateNetColors();
}
}
function netColorRightClick(net) {
return (event) => {
if (event.button == 2) {
event.preventDefault();
event.stopPropagation();
var style = getComputedStyle(topmostdiv);
var defaultNetColor = style.getPropertyValue('--track-color').trim();
event.target.value = defaultNetColor;
delete settings.netColors[net];
updateNetColors();
}
}
}
function entryMatches(entry) {
if (settings.bommode == "netlist") {
// entry is just a net name
return entry.toLowerCase().indexOf(filter) >= 0;
}
// check refs
if (!settings.hiddenColumns.includes("references")) {
for (var ref of entry) {
if (ref[0].toLowerCase().indexOf(filter) >= 0) {
return true;
}
}
}
// check fields
for (var i in config.fields) {
var f = config.fields[i];
if (!settings.hiddenColumns.includes(f)) {
for (var ref of entry) {
if (String(pcbdata.bom.fields[ref[1]][i]).toLowerCase().indexOf(filter) >= 0) {
return true;
}
}
}
}
return false;
}
function findRefInEntry(entry) {
return entry.filter(r => r[0].toLowerCase() == reflookup);
}
function highlightFilter(s) {
if (!filter) {
return s;
}
var parts = s.toLowerCase().split(filter);
if (parts.length == 1) {
return s;
}
var r = "";
var pos = 0;
for (var i in parts) {
if (i > 0) {
r += '<mark class="highlight">' +
s.substring(pos, pos + filter.length) +
'</mark>';
pos += filter.length;
}
r += s.substring(pos, pos + parts[i].length);
pos += parts[i].length;
}
return r;
}
function checkboxSetUnsetAllHandler(checkboxname) {
return function () {
var checkboxnum = 0;
while (checkboxnum < settings.checkboxes.length &&
settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
checkboxnum++;
}
if (checkboxnum >= settings.checkboxes.length) {
return;
}
var allset = true;
var checkbox;
var row;
for (row of bombody.childNodes) {
checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
if (!checkbox.checked || checkbox.indeterminate) {
allset = false;
break;
}
}
for (row of bombody.childNodes) {
checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
checkbox.checked = !allset;
checkbox.indeterminate = false;
checkbox.onchange();
}
}
}
function createColumnHeader(name, cls, comparator, is_checkbox = false) {
var th = document.createElement("TH");
th.innerHTML = name;
th.classList.add(cls);
if (is_checkbox)
th.setAttribute("col_name", "bom-checkbox");
else
th.setAttribute("col_name", name);
var span = document.createElement("SPAN");
span.classList.add("sortmark");
span.classList.add("none");
th.appendChild(span);
var spacer = document.createElement("div");
spacer.className = "column-spacer";
th.appendChild(spacer);
spacer.onclick = function () {
if (currentSortColumn && th !== currentSortColumn) {
// Currently sorted by another column
currentSortColumn.childNodes[1].classList.remove(currentSortOrder);
currentSortColumn.childNodes[1].classList.add("none");
currentSortColumn = null;
currentSortOrder = null;
}
if (currentSortColumn && th === currentSortColumn) {
// Already sorted by this column
if (currentSortOrder == "asc") {
// Sort by this column, descending order
bomSortFunction = function (a, b) {
return -comparator(a, b);
}
currentSortColumn.childNodes[1].classList.remove("asc");
currentSortColumn.childNodes[1].classList.add("desc");
currentSortOrder = "desc";
} else {
// Unsort
bomSortFunction = null;
currentSortColumn.childNodes[1].classList.remove("desc");
currentSortColumn.childNodes[1].classList.add("none");
currentSortColumn = null;
currentSortOrder = null;
}
} else {
// Sort by this column, ascending order
bomSortFunction = comparator;
currentSortColumn = th;
currentSortColumn.childNodes[1].classList.remove("none");
currentSortColumn.childNodes[1].classList.add("asc");
currentSortOrder = "asc";
}
populateBomBody();
}
if (is_checkbox) {
spacer.onclick = fancyDblClickHandler(
spacer, spacer.onclick, checkboxSetUnsetAllHandler(name));
}
return th;
}
function populateBomHeader(placeHolderColumn = null, placeHolderElements = null) {
while (bomhead.firstChild) {
bomhead.removeChild(bomhead.firstChild);
}
var tr = document.createElement("TR");
var th = document.createElement("TH");
th.classList.add("numCol");
var vismenu = document.createElement("div");
vismenu.id = "vismenu";
vismenu.classList.add("menu");
var visbutton = document.createElement("div");
visbutton.classList.add("visbtn");
visbutton.classList.add("hideonprint");
var viscontent = document.createElement("div");
viscontent.classList.add("menu-content");
viscontent.id = "vismenu-content";
settings.columnOrder.forEach(column => {
if (typeof column !== "string")
return;
// Skip empty columns
if (column === "checkboxes" && settings.checkboxes.length == 0)
return;
else if (column === "Quantity" && settings.bommode == "ungrouped")
return;
var label = document.createElement("label");
label.classList.add("menu-label");
var input = document.createElement("input");
input.classList.add("visibility_checkbox");
input.type = "checkbox";
input.onchange = function (e) {
setShowBOMColumn(column, e.target.checked)
};
input.checked = !(settings.hiddenColumns.includes(column));
label.appendChild(input);
if (column.length > 0)
label.append(column[0].toUpperCase() + column.slice(1));
viscontent.appendChild(label);
});
viscontent.childNodes[0].classList.add("menu-label-top");
vismenu.appendChild(visbutton);
if (settings.bommode != "netlist") {
vismenu.appendChild(viscontent);
th.appendChild(vismenu);
}
tr.appendChild(th);
var checkboxCompareClosure = function (checkbox) {
return (a, b) => {
var stateA = getCheckboxState(checkbox, a);
var stateB = getCheckboxState(checkbox, b);
if (stateA > stateB) return -1;
if (stateA < stateB) return 1;
return 0;
}
}
var stringFieldCompareClosure = function (fieldIndex) {
return (a, b) => {
var fa = pcbdata.bom.fields[a[0][1]][fieldIndex];
var fb = pcbdata.bom.fields[b[0][1]][fieldIndex];
if (fa != fb) return fa > fb ? 1 : -1;
else return 0;
}
}
var referenceRegex = /(?<prefix>[^0-9]+)(?<number>[0-9]+)/;
var compareRefs = (a, b) => {
var ra = referenceRegex.exec(a);
var rb = referenceRegex.exec(b);
if (ra === null || rb === null) {
if (a != b) return a > b ? 1 : -1;
return 0;
} else {
if (ra.groups.prefix != rb.groups.prefix) {
return ra.groups.prefix > rb.groups.prefix ? 1 : -1;
}
if (ra.groups.number != rb.groups.number) {
return parseInt(ra.groups.number) > parseInt(rb.groups.number) ? 1 : -1;
}
return 0;
}
}
if (settings.bommode == "netlist") {
tr.appendChild(createColumnHeader("Net name", "bom-netname", (a, b) => {
if (a > b) return -1;
if (a < b) return 1;
return 0;
}));
tr.appendChild(createColumnHeader("Color", "bom-color", (a, b) => {
return 0;
}));
} else {
// Filter hidden columns
var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
var valueIndex = config.fields.indexOf("Value");
var footprintIndex = config.fields.indexOf("Footprint");
columns.forEach((column) => {
if (column === placeHolderColumn) {
var n = 1;
if (column === "checkboxes")
n = settings.checkboxes.length;
for (i = 0; i < n; i++) {
td = placeHolderElements.shift();
tr.appendChild(td);
}
return;
} else if (column === "checkboxes") {
for (var checkbox of settings.checkboxes) {
th = createColumnHeader(
checkbox, "bom-checkbox", checkboxCompareClosure(checkbox), true);
tr.appendChild(th);
}
} else if (column === "References") {
tr.appendChild(createColumnHeader("References", "references", (a, b) => {
var i = 0;
while (i < a.length && i < b.length) {
if (a[i] != b[i]) return compareRefs(a[i][0], b[i][0]);
i++;
}
return a.length - b.length;
}));
} else if (column === "Value") {
tr.appendChild(createColumnHeader("Value", "value", (a, b) => {
var ra = a[0][1], rb = b[0][1];
return valueCompare(
pcbdata.bom.parsedValues[ra], pcbdata.bom.parsedValues[rb],
pcbdata.bom.fields[ra][valueIndex], pcbdata.bom.fields[rb][valueIndex]);
}));
return;
} else if (column === "Footprint") {
tr.appendChild(createColumnHeader(
"Footprint", "footprint", stringFieldCompareClosure(footprintIndex)));
} else if (column === "Quantity" && settings.bommode == "grouped") {
tr.appendChild(createColumnHeader("Quantity", "quantity", (a, b) => {
return a.length - b.length;
}));
} else {
// Other fields
var i = config.fields.indexOf(column);
if (i < 0)
return;
tr.appendChild(createColumnHeader(
column, `field${i + 1}`, stringFieldCompareClosure(i)));
}
});
}
bomhead.appendChild(tr);
}
function populateBomBody(placeholderColumn = null, placeHolderElements = null) {
const urlRegex = /^(https?:\/\/[^\s\/$.?#][^\s]*|file:\/\/([a-zA-Z]:|\/)[^\x00]+)$/;
while (bom.firstChild) {
bom.removeChild(bom.firstChild);
}
highlightHandlers = [];
footprintIndexToHandler = {};
netsToHandler = {};
currentHighlightedRowId = null;
var first = true;
var style = getComputedStyle(topmostdiv);
var defaultNetColor = style.getPropertyValue('--track-color').trim();
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) {
expandedTable.push([ref]);
}
}
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);
var color = settings.netColors[netname] || defaultNetColor;
td = document.createElement("TD");
var colorBox = document.createElement("INPUT");
colorBox.type = "color";
colorBox.value = color;
colorBox.onchange = netColorChangeHandler(netname);
colorBox.onmouseup = netColorRightClick(netname);
colorBox.oncontextmenu = (e) => e.preventDefault();
td.appendChild(colorBox);
td.classList.add("color-column");
tr.appendChild(td);
} else {
if (reflookup) {
references = findRefInEntry(bomentry);
if (references.length == 0) {
continue;
}
} else {
references = bomentry;
}
// Filter hidden columns
var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
columns.forEach((column) => {
if (column === placeholderColumn) {
var n = 1;
if (column === "checkboxes")
n = settings.checkboxes.length;
for (i = 0; i < n; i++) {
td = placeHolderElements.shift();
tr.appendChild(td);
}
return;
} else if (column === "checkboxes") {
for (var checkbox of settings.checkboxes) {
if (checkbox) {
td = document.createElement("TD");
var input = document.createElement("input");
input.type = "checkbox";
input.onchange = createCheckboxChangeHandler(checkbox, references, tr);
setBomCheckboxState(checkbox, input, references);
if (input.checked && settings.markWhenChecked == checkbox) {
tr.classList.add("checked");
}
td.appendChild(input);
tr.appendChild(td);
}
}
} else if (column === "References") {
td = document.createElement("TD");
td.innerHTML = highlightFilter(references.map(r => r[0]).join(", "));
tr.appendChild(td);
} else if (column === "Quantity" && settings.bommode == "grouped") {
// Quantity
td = document.createElement("TD");
td.textContent = references.length;
tr.appendChild(td);
} else {
// All the other fields
var field_index = config.fields.indexOf(column)
if (field_index < 0)
return;
var valueSet = new Set();
references.map(r => r[1]).forEach((id) => valueSet.add(pcbdata.bom.fields[id][field_index]));
td = document.createElement("TD");
var output = new Array();
for (let item of valueSet) {
const visible = highlightFilter(String(item));
if (typeof item === 'string' && item.match(urlRegex)) {
output.push(`<a href="${item}" target="_blank">${visible}</a>`);
} else {
output.push(visible);
}
}
td.innerHTML = output.join(", ");
tr.appendChild(td);
}
});
}
bom.appendChild(tr);
var handler = createRowHighlightHandler(tr.id, references, netname);
tr.onmousemove = handler;
highlightHandlers.push({
id: tr.id,
handler: handler,
});
if (references !== null) {
for (var refIndex of references.map(r => r[1])) {
footprintIndexToHandler[refIndex] = handler;
}
}
if (netname !== null) {
netsToHandler[netname] = handler;
}
if ((filter || reflookup) && first) {
handler();
first = false;
}
}
EventHandler.emitEvent(
IBOM_EVENT_TYPES.BOM_BODY_CHANGE_EVENT, {
filter: filter,
reflookup: reflookup,
checkboxes: settings.checkboxes,
bommode: settings.bommode,
});
}
function highlightPreviousRow() {
if (!currentHighlightedRowId) {
highlightHandlers[highlightHandlers.length - 1].handler();
} else {
if (highlightHandlers.length > 1 &&
highlightHandlers[0].id == currentHighlightedRowId) {
highlightHandlers[highlightHandlers.length - 1].handler();
} else {
for (var i = 0; i < highlightHandlers.length - 1; i++) {
if (highlightHandlers[i + 1].id == currentHighlightedRowId) {
highlightHandlers[i].handler();
break;
}
}
}
}
smoothScrollToRow(currentHighlightedRowId);
}
function highlightNextRow() {
if (!currentHighlightedRowId) {
highlightHandlers[0].handler();
} else {
if (highlightHandlers.length > 1 &&
highlightHandlers[highlightHandlers.length - 1].id == currentHighlightedRowId) {
highlightHandlers[0].handler();
} else {
for (var i = 1; i < highlightHandlers.length; i++) {
if (highlightHandlers[i - 1].id == currentHighlightedRowId) {
highlightHandlers[i].handler();
break;
}
}
}
}
smoothScrollToRow(currentHighlightedRowId);
}
function populateBomTable() {
populateBomHeader();
populateBomBody();
setBomHandlers();
resizableGrid(bomhead);
}
function footprintsClicked(footprintIndexes) {
var lastClickedIndex = footprintIndexes.indexOf(lastClicked);
for (var i = 1; i <= footprintIndexes.length; i++) {
var refIndex = footprintIndexes[(lastClickedIndex + i) % footprintIndexes.length];
if (refIndex in footprintIndexToHandler) {
lastClicked = refIndex;
footprintIndexToHandler[refIndex]();
smoothScrollToRow(currentHighlightedRowId);
break;
}
}
}
function netClicked(net) {
if (net in netsToHandler) {
netsToHandler[net]();
smoothScrollToRow(currentHighlightedRowId);
} else {
clearHighlightedFootprints();
highlightedNet = net;
drawHighlights();
}
}
function updateFilter(input) {
filter = input.toLowerCase();
populateBomTable();
}
function updateRefLookup(input) {
reflookup = input.toLowerCase();
populateBomTable();
}
function changeCanvasLayout(layout) {
document.getElementById("fl-btn").classList.remove("depressed");
document.getElementById("fb-btn").classList.remove("depressed");
document.getElementById("bl-btn").classList.remove("depressed");
switch (layout) {
case 'F':
document.getElementById("fl-btn").classList.add("depressed");
if (settings.bomlayout != "bom-only") {
canvassplit.collapse(1);
}
break;
case 'B':
document.getElementById("bl-btn").classList.add("depressed");
if (settings.bomlayout != "bom-only") {
canvassplit.collapse(0);
}
break;
default:
document.getElementById("fb-btn").classList.add("depressed");
if (settings.bomlayout != "bom-only") {
canvassplit.setSizes([50, 50]);
}
}
settings.canvaslayout = layout;
writeStorage("canvaslayout", layout);
resizeAll();
changeBomMode(settings.bommode);
}
function populateMetadata() {
document.getElementById("title").innerHTML = pcbdata.metadata.title;
document.getElementById("revision").innerHTML = "Rev: " + pcbdata.metadata.revision;
document.getElementById("company").innerHTML = pcbdata.metadata.company;
document.getElementById("filedate").innerHTML = pcbdata.metadata.date;
if (pcbdata.metadata.title != "") {
document.title = pcbdata.metadata.title + " BOM";
}
// Calculate board stats
var fp_f = 0,
fp_b = 0,
pads_f = 0,
pads_b = 0,
pads_th = 0;
for (var i = 0; i < pcbdata.footprints.length; i++) {
if (pcbdata.bom.skipped.includes(i)) continue;
var mod = pcbdata.footprints[i];
if (mod.layer == "F") {
fp_f++;
} else {
fp_b++;
}
for (var pad of mod.pads) {
if (pad.type == "th") {
pads_th++;
} else {
if (pad.layers.includes("F")) {
pads_f++;
}
if (pad.layers.includes("B")) {
pads_b++;
}
}
}
}
document.getElementById("stats-components-front").innerHTML = fp_f;
document.getElementById("stats-components-back").innerHTML = fp_b;
document.getElementById("stats-components-total").innerHTML = fp_f + fp_b;
document.getElementById("stats-groups-front").innerHTML = pcbdata.bom.F.length;
document.getElementById("stats-groups-back").innerHTML = pcbdata.bom.B.length;
document.getElementById("stats-groups-total").innerHTML = pcbdata.bom.both.length;
document.getElementById("stats-smd-pads-front").innerHTML = pads_f;
document.getElementById("stats-smd-pads-back").innerHTML = pads_b;
document.getElementById("stats-smd-pads-total").innerHTML = pads_f + pads_b;
document.getElementById("stats-th-pads").innerHTML = pads_th;
// Update version string
document.getElementById("github-link").innerHTML = "InteractiveHtmlBom&nbsp;" +
/^v\d+\.\d+/.exec(pcbdata.ibom_version)[0];
}
function changeBomLayout(layout) {
document.getElementById("bom-btn").classList.remove("depressed");
document.getElementById("lr-btn").classList.remove("depressed");
document.getElementById("tb-btn").classList.remove("depressed");
switch (layout) {
case 'bom-only':
document.getElementById("bom-btn").classList.add("depressed");
if (bomsplit) {
bomsplit.destroy();
bomsplit = null;
canvassplit.destroy();
canvassplit = null;
}
document.getElementById("frontcanvas").style.display = "none";
document.getElementById("backcanvas").style.display = "none";
document.getElementById("topmostdiv").style.height = "";
document.getElementById("topmostdiv").style.display = "block";
break;
case 'top-bottom':
document.getElementById("tb-btn").classList.add("depressed");
document.getElementById("frontcanvas").style.display = "";
document.getElementById("backcanvas").style.display = "";
document.getElementById("topmostdiv").style.height = "100%";
document.getElementById("topmostdiv").style.display = "flex";
document.getElementById("bomdiv").classList.remove("split-horizontal");
document.getElementById("canvasdiv").classList.remove("split-horizontal");
document.getElementById("frontcanvas").classList.add("split-horizontal");
document.getElementById("backcanvas").classList.add("split-horizontal");
if (bomsplit) {
bomsplit.destroy();
bomsplit = null;
canvassplit.destroy();
canvassplit = null;
}
bomsplit = Split(['#bomdiv', '#canvasdiv'], {
sizes: [50, 50],
onDragEnd: resizeAll,
direction: "vertical",
gutterSize: 5
});
canvassplit = Split(['#frontcanvas', '#backcanvas'], {
sizes: [50, 50],
gutterSize: 5,
onDragEnd: resizeAll
});
break;
case 'left-right':
document.getElementById("lr-btn").classList.add("depressed");
document.getElementById("frontcanvas").style.display = "";
document.getElementById("backcanvas").style.display = "";
document.getElementById("topmostdiv").style.height = "100%";
document.getElementById("topmostdiv").style.display = "flex";
document.getElementById("bomdiv").classList.add("split-horizontal");
document.getElementById("canvasdiv").classList.add("split-horizontal");
document.getElementById("frontcanvas").classList.remove("split-horizontal");
document.getElementById("backcanvas").classList.remove("split-horizontal");
if (bomsplit) {
bomsplit.destroy();
bomsplit = null;
canvassplit.destroy();
canvassplit = null;
}
bomsplit = Split(['#bomdiv', '#canvasdiv'], {
sizes: [50, 50],
onDragEnd: resizeAll,
gutterSize: 5
});
canvassplit = Split(['#frontcanvas', '#backcanvas'], {
sizes: [50, 50],
gutterSize: 5,
direction: "vertical",
onDragEnd: resizeAll
});
}
settings.bomlayout = layout;
writeStorage("bomlayout", layout);
changeCanvasLayout(settings.canvaslayout);
}
function changeBomMode(mode) {
document.getElementById("bom-grouped-btn").classList.remove("depressed");
document.getElementById("bom-ungrouped-btn").classList.remove("depressed");
document.getElementById("bom-netlist-btn").classList.remove("depressed");
var chkbxs = document.getElementsByClassName("visibility_checkbox");
switch (mode) {
case 'grouped':
document.getElementById("bom-grouped-btn").classList.add("depressed");
for (var i = 0; i < chkbxs.length; i++) {
chkbxs[i].disabled = false;
}
break;
case 'ungrouped':
document.getElementById("bom-ungrouped-btn").classList.add("depressed");
for (var i = 0; i < chkbxs.length; i++) {
chkbxs[i].disabled = false;
}
break;
case 'netlist':
document.getElementById("bom-netlist-btn").classList.add("depressed");
for (var i = 0; i < chkbxs.length; i++) {
chkbxs[i].disabled = true;
}
}
writeStorage("bommode", mode);
if (mode != settings.bommode) {
settings.bommode = mode;
bomSortFunction = null;
currentSortColumn = null;
currentSortOrder = null;
clearHighlightedFootprints();
}
populateBomTable();
}
function focusFilterField() {
focusInputField(document.getElementById("filter"));
}
function focusRefLookupField() {
focusInputField(document.getElementById("reflookup"));
}
function toggleBomCheckbox(bomrowid, checkboxnum) {
if (!bomrowid || checkboxnum > settings.checkboxes.length) {
return;
}
var bomrow = document.getElementById(bomrowid);
var 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(",").map((e) => e.trim()).filter((e) => e);
prepCheckboxes();
populateMarkWhenCheckedOptions();
setMarkWhenChecked(settings.markWhenChecked);
}
function setMarkWhenChecked(value) {
writeStorage("markWhenChecked", value);
settings.markWhenChecked = value;
markedFootprints.clear();
for (var ref of (value ? getStoredCheckboxRefs(value) : [])) {
markedFootprints.add(ref);
}
populateBomTable();
drawHighlights();
}
function prepCheckboxes() {
var table = document.getElementById("checkbox-stats");
while (table.childElementCount > 1) {
table.removeChild(table.lastChild);
}
if (settings.checkboxes.length) {
table.style.display = "";
} else {
table.style.display = "none";
}
for (var checkbox of settings.checkboxes) {
var tr = document.createElement("TR");
var td = document.createElement("TD");
td.innerHTML = checkbox;
tr.appendChild(td);
td = document.createElement("TD");
td.id = "checkbox-stats-" + checkbox;
var progressbar = document.createElement("div");
progressbar.classList.add("bar");
td.appendChild(progressbar);
var text = document.createElement("div");
text.classList.add("text");
td.appendChild(text);
tr.appendChild(td);
table.appendChild(tr);
updateCheckboxStats(checkbox);
}
}
function populateMarkWhenCheckedOptions() {
var container = document.getElementById("markWhenCheckedContainer");
if (settings.checkboxes.length == 0) {
container.parentElement.style.display = "none";
return;
}
container.innerHTML = '';
container.parentElement.style.display = "inline-block";
function createOption(name, displayName) {
var id = "markWhenChecked-" + name;
var div = document.createElement("div");
div.classList.add("radio-container");
var input = document.createElement("input");
input.type = "radio";
input.name = "markWhenChecked";
input.value = name;
input.id = id;
input.onchange = () => setMarkWhenChecked(name);
div.appendChild(input);
// Preserve the selected element when the checkboxes change
if (name == settings.markWhenChecked) {
input.checked = true;
}
var label = document.createElement("label");
label.innerHTML = displayName;
label.htmlFor = id;
div.appendChild(label);
container.appendChild(div);
}
createOption("", "None");
for (var checkbox of settings.checkboxes) {
createOption(checkbox, checkbox);
}
}
function updateCheckboxStats(checkbox) {
var checked = getStoredCheckboxRefs(checkbox).size;
var total = pcbdata.footprints.length - pcbdata.bom.skipped.length;
var percent = checked * 100.0 / total;
var td = document.getElementById("checkbox-stats-" + checkbox);
td.firstChild.style.width = percent + "%";
td.lastChild.innerHTML = checked + "/" + total + " (" + Math.round(percent) + "%)";
}
function constrain(number, min, max) {
return Math.min(Math.max(parseInt(number), min), max);
}
document.onkeydown = function (e) {
switch (e.key) {
case "n":
if (document.activeElement.type == "text") {
return;
}
if (currentHighlightedRowId !== null) {
checkBomCheckbox(currentHighlightedRowId, "placed");
highlightNextRow();
e.preventDefault();
}
break;
case "ArrowUp":
highlightPreviousRow();
e.preventDefault();
break;
case "ArrowDown":
highlightNextRow();
e.preventDefault();
break;
case "ArrowLeft":
case "ArrowRight":
if (document.activeElement.type != "text") {
e.preventDefault();
let boardRotationElement = document.getElementById("boardRotation")
settings.boardRotation = parseInt(boardRotationElement.value); // degrees / 5
if (e.key == "ArrowLeft") {
settings.boardRotation += 3; // 15 degrees
}
else {
settings.boardRotation -= 3;
}
settings.boardRotation = constrain(settings.boardRotation, boardRotationElement.min, boardRotationElement.max);
boardRotationElement.value = settings.boardRotation
setBoardRotation(settings.boardRotation);
}
break;
default:
break;
}
if (e.altKey) {
switch (e.key) {
case "f":
focusFilterField();
e.preventDefault();
break;
case "r":
focusRefLookupField();
e.preventDefault();
break;
case "z":
changeBomLayout("bom-only");
e.preventDefault();
break;
case "x":
changeBomLayout("left-right");
e.preventDefault();
break;
case "c":
changeBomLayout("top-bottom");
e.preventDefault();
break;
case "v":
changeCanvasLayout("F");
e.preventDefault();
break;
case "b":
changeCanvasLayout("FB");
e.preventDefault();
break;
case "n":
changeCanvasLayout("B");
e.preventDefault();
break;
default:
break;
}
if (e.key >= '1' && e.key <= '9') {
toggleBomCheckbox(currentHighlightedRowId, parseInt(e.key));
e.preventDefault();
}
}
}
function hideNetlistButton() {
document.getElementById("bom-ungrouped-btn").classList.remove("middle-button");
document.getElementById("bom-ungrouped-btn").classList.add("right-most-button");
document.getElementById("bom-netlist-btn").style.display = "none";
}
function topToggle() {
var top = document.getElementById("top");
var toptoggle = document.getElementById("toptoggle");
if (top.style.display === "none") {
top.style.display = "flex";
toptoggle.classList.remove("flipped");
} else {
top.style.display = "none";
toptoggle.classList.add("flipped");
}
}
window.onload = function (e) {
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;
setBomCheckboxes(document.getElementById("bomCheckboxes").value);
// Triggers render
changeBomLayout(settings.bomlayout);
// Users may leave fullscreen without touching the checkbox. Uncheck.
document.addEventListener('fullscreenchange', () => {
if (!document.fullscreenElement)
document.getElementById('fullscreenCheckbox').checked = false;
});
}
window.onresize = resizeAll;
window.matchMedia("print").addListener(resizeAll);
///////////////////////////////////////////////
///////////////////////////////////////////////
// EventHandler.registerCallback(IBOM_EVENT_TYPES.BOM_BODY_CHANGE_EVENT, () => {
// for(var tr of bom.childNodes) {
// tr.onclick = tr.onmousemove;
// tr.onmousemove = null;
// };
// });
///////////////////////////////////////////////
</script>
</head>
<body>
<div id="topmostdiv" class="topmostdiv">
<div id="top">
<div id="fileinfodiv">
<table class="fileinfo">
<tbody>
<tr>
<td id="title" class="title" style="width: 70%">
Title
</td>
<td id="revision" class="title" style="width: 30%">
Revision
</td>
</tr>
<tr>
<td id="company">
Company
</td>
<td id="filedate">
Date
</td>
</tr>
</tbody>
</table>
</div>
<div id="bomcontrols">
<div class="hideonprint menu">
<button class="menubtn"></button>
<div class="menu-content">
<label class="menu-label menu-label-top" style="width: calc(50% - 18px)">
<input id="darkmodeCheckbox" type="checkbox" onchange="setDarkMode(this.checked)">
Dark mode
</label><!-- This comment eats space! All of it!
--><label class="menu-label menu-label-top" style="width: calc(50% - 17px); border-left: 0;">
<input id="fullscreenCheckbox" type="checkbox" onchange="setFullscreen(this.checked)">
Full Screen
</label>
<label class="menu-label" style="width: calc(50% - 18px)">
<input id="fabricationCheckbox" type="checkbox" checked onchange="fabricationVisible(this.checked)">
Fab layer
</label><!-- This comment eats space! All of it!
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
<input id="silkscreenCheckbox" type="checkbox" checked onchange="silkscreenVisible(this.checked)">
Silkscreen
</label>
<label class="menu-label" style="width: calc(50% - 18px)">
<input id="referencesCheckbox" type="checkbox" checked onchange="referencesVisible(this.checked)">
References
</label><!-- This comment eats space! All of it!
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
<input id="valuesCheckbox" type="checkbox" checked onchange="valuesVisible(this.checked)">
Values
</label>
<div id="tracksAndZonesCheckboxes">
<label class="menu-label" style="width: calc(50% - 18px)">
<input id="tracksCheckbox" type="checkbox" checked onchange="tracksVisible(this.checked)">
Tracks
</label><!-- This comment eats space! All of it!
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
<input id="zonesCheckbox" type="checkbox" checked onchange="zonesVisible(this.checked)">
Zones
</label>
</div>
<label class="menu-label" style="width: calc(50% - 18px)">
<input id="padsCheckbox" type="checkbox" checked onchange="padsVisible(this.checked)">
Pads
</label><!-- This comment eats space! All of it!
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
<input id="dnpOutlineCheckbox" type="checkbox" checked onchange="dnpOutline(this.checked)">
DNP outlined
</label>
<label class="menu-label">
<input id="dragCheckbox" type="checkbox" checked onchange="setRedrawOnDrag(this.checked)">
Continuous redraw on drag
</label>
<label class="menu-label">
Highlight first pin
<form id="highlightpin1">
<div class="flexbox">
<label>
<input type="radio" name="highlightpin1" value="none" onchange="setHighlightPin1('none')">
None
</label>
<label>
<input type="radio" name="highlightpin1" value="all" onchange="setHighlightPin1('all')">
All
</label>
<label>
<input type="radio" name="highlightpin1" value="selected" onchange="setHighlightPin1('selected')">
Selected
</label>
</div>
</form>
</label>
<label class="menu-label">
<span>Board rotation</span>
<span style="float: right"><span id="rotationDegree">0</span>&#176;</span>
<input id="boardRotation" type="range" min="-36" max="36" value="0" class="slider" oninput="setBoardRotation(this.value)">
</label>
<label class="menu-label">
<input id="offsetBackRotationCheckbox" type="checkbox" onchange="setOffsetBackRotation(this.checked)">
Offset back rotation
</label>
<label class="menu-label">
<div style="margin-left: 5px">Bom checkboxes</div>
<input id="bomCheckboxes" class="menu-textbox" type=text
oninput="setBomCheckboxes(this.value)">
</label>
<label class="menu-label">
<div style="margin-left: 5px">Mark when checked</div>
<div id="markWhenCheckedContainer"></div>
</label>
<label class="menu-label">
<span class="shameless-plug">
<span>Created using</span>
<a id="github-link" target="blank" href="https://github.com/openscopeproject/InteractiveHtmlBom">InteractiveHtmlBom</a>
<a target="blank" title="Mouse and keyboard help" href="https://github.com/openscopeproject/InteractiveHtmlBom/wiki/Usage#bom-page-mouse-actions" style="text-decoration: none;"><label class="help-link">?</label></a>
</span>
</label>
</div>
</div>
<div class="button-container hideonprint">
<button id="fl-btn" class="left-most-button" onclick="changeCanvasLayout('F')"
title="Front only">F
</button>
<button id="fb-btn" class="middle-button" onclick="changeCanvasLayout('FB')"
title="Front and Back">FB
</button>
<button id="bl-btn" class="right-most-button" onclick="changeCanvasLayout('B')"
title="Back only">B
</button>
</div>
<div class="button-container hideonprint">
<button id="bom-btn" class="left-most-button" onclick="changeBomLayout('bom-only')"
title="BOM only"></button>
<button id="lr-btn" class="middle-button" onclick="changeBomLayout('left-right')"
title="BOM left, drawings right"></button>
<button id="tb-btn" class="right-most-button" onclick="changeBomLayout('top-bottom')"
title="BOM top, drawings bot"></button>
</div>
<div class="button-container hideonprint">
<button id="bom-grouped-btn" class="left-most-button" onclick="changeBomMode('grouped')"
title="Grouped BOM"></button>
<button id="bom-ungrouped-btn" class="middle-button" onclick="changeBomMode('ungrouped')"
title="Ungrouped BOM"></button>
<button id="bom-netlist-btn" class="right-most-button" onclick="changeBomMode('netlist')"
title="Netlist"></button>
</div>
<div class="hideonprint menu">
<button class="statsbtn"></button>
<div class="menu-content">
<table class="stats">
<tbody>
<tr>
<td width="40%">Board stats</td>
<td>Front</td>
<td>Back</td>
<td>Total</td>
</tr>
<tr>
<td>Components</td>
<td id="stats-components-front">~</td>
<td id="stats-components-back">~</td>
<td id="stats-components-total">~</td>
</tr>
<tr>
<td>Groups</td>
<td id="stats-groups-front">~</td>
<td id="stats-groups-back">~</td>
<td id="stats-groups-total">~</td>
</tr>
<tr>
<td>SMD pads</td>
<td id="stats-smd-pads-front">~</td>
<td id="stats-smd-pads-back">~</td>
<td id="stats-smd-pads-total">~</td>
</tr>
<tr>
<td>TH pads</td>
<td colspan=3 id="stats-th-pads">~</td>
</tr>
</tbody>
</table>
<table class="stats">
<col width="40%"/><col />
<tbody id="checkbox-stats">
<tr>
<td colspan=2 style="border-top: 0">Checkboxes</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="hideonprint menu">
<button class="iobtn"></button>
<div class="menu-content">
<div class="menu-label menu-label-top">
<div style="margin-left: 5px;">Save board image</div>
<div class="flexbox">
<input id="render-save-width" class="menu-textbox" type="text" value="1000" placeholder="Width"
style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
<span>X</span>
<input id="render-save-height" class="menu-textbox" type="text" value="1000" placeholder="Height"
style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
</div>
<label>
<input id="render-save-transparent" type="checkbox">
Transparent background
</label>
<div class="flexbox">
<button class="savebtn" onclick="saveImage('F')">Front</button>
<button class="savebtn" onclick="saveImage('B')">Back</button>
</div>
</div>
<div class="menu-label">
<span style="margin-left: 5px;">Config and checkbox state</span>
<div class="flexbox">
<button class="savebtn" onclick="saveSettings()">Export</button>
<button class="savebtn" onclick="loadSettings()">Import</button>
<button class="savebtn" onclick="resetSettings()">Reset</button>
</div>
</div>
<div class="menu-label">
<span style="margin-left: 5px;">Save bom table as</span>
<div class="flexbox">
<button class="savebtn" onclick="saveBomTable('csv')">csv</button>
<button class="savebtn" onclick="saveBomTable('txt')">txt</button>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="topdivider">
<div class="hideonprint">
<div id="toptoggle" onclick="topToggle()"></div>
</div>
</div>
<div id="bot" class="split" style="flex: 1 1">
<div id="bomdiv" class="split split-horizontal">
<div style="width: 100%">
<input id="reflookup" class="textbox searchbox reflookup hideonprint" type="text" placeholder="Ref lookup"
oninput="updateRefLookup(this.value)">
<input id="filter" class="textbox searchbox filter hideonprint" type="text" placeholder="Filter"
oninput="updateFilter(this.value)">
<div class="button-container hideonprint" style="float: left; margin: 0;">
<button id="copy" title="Copy bom table to clipboard"
onclick="saveBomTable('clipboard')"></button>
</div>
</div>
<div id="dbg"></div>
<table class="bom" id="bomtable">
<thead id="bomhead">
</thead>
<tbody id="bombody">
</tbody>
</table>
</div>
<div id="canvasdiv" class="split split-horizontal">
<div id="frontcanvas" class="split" touch-action="none" style="overflow: hidden">
<div style="position: relative; width: 100%; height: 100%;">
<canvas id="F_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
<canvas id="F_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
<canvas id="F_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
<canvas id="F_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
</div>
</div>
<div id="backcanvas" class="split" touch-action="none" style="overflow: hidden">
<div style="position: relative; width: 100%; height: 100%;">
<canvas id="B_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
<canvas id="B_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
<canvas id="B_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
<canvas id="B_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
</div>
</div>
</div>
</div>
</div>
</body>
</html>