<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Interactive BOM for KiCAD</title>
<style type="text/css">
:root {
--pcb-edge-color: black;
--pad-color: #878787;
--pad-hole-color: #CCCCCC;
--pad-color-highlight: #D04040;
--pad-color-highlight-both: #D0D040;
--pad-color-highlight-marked: #44a344;
--pin1-outline-color: #ffb629;
--pin1-outline-color-highlight: #ffb629;
--pin1-outline-color-highlight-both: #fcbb39;
--pin1-outline-color-highlight-marked: #fdbe41;
--silkscreen-edge-color: #aa4;
--silkscreen-polygon-color: #4aa;
--silkscreen-text-color: #4aa;
--fabrication-edge-color: #907651;
--fabrication-polygon-color: #907651;
--fabrication-text-color: #a27c24;
--track-color: #def5f1;
--track-color-highlight: #D04040;
--zone-color: #def5f1;
--zone-color-highlight: #d0404080;
}
html,
body {
margin: 0px;
height: 100%;
font-family: Verdana, sans-serif;
}
.dark.topmostdiv {
--pcb-edge-color: #eee;
--pad-color: #808080;
--pin1-outline-color: #ffa800;
--pin1-outline-color-highlight: #ccff00;
--track-color: #42524f;
--zone-color: #42524f;
background-color: #252c30;
color: #eee;
}
button {
background-color: #eee;
border: 1px solid #888;
color: black;
height: 44px;
width: 44px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 14px;
font-weight: bolder;
}
.dark button {
/* This will be inverted */
background-color: #c3b7b5;
}
button.depressed {
background-color: #0a0;
color: white;
}
.dark button.depressed {
/* This will be inverted */
background-color: #b3b;
}
button:focus {
outline: 0;
}
button#tb-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.32 290.12h5.82M1.32 291.45h5.82' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 292.5v4.23M.26 292.63H8.2' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='1.35' y='295.73'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
}
button#lr-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.06 290.12H3.7m-2.64 1.33H3.7m-2.64 1.32H3.7m-2.64 1.3H3.7m-2.64 1.33H3.7' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 288.8v7.94m0-4.11h3.96' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='5.11' y='291.96'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
}
button#bom-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)' fill='none' stroke='%23000' stroke-width='.4'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' stroke-linejoin='round'/%3E%3Cpath d='M1.59 290.12h5.29M1.59 291.45h5.33M1.59 292.75h5.33M1.59 294.09h5.33M1.59 295.41h5.33'/%3E%3C/g%3E%3C/svg%3E");
}
button#bom-grouped-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m4 0h5m4 0h3M6.1 22h3m3.9 0h5m4 0h4m-16-8h4m4 0h4'/%3E%3Cpath stroke-linecap='null' d='M5 17.5h22M5 26.6h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
}
button#bom-ungrouped-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m-4 8h3m-3 8h4'/%3E%3Cpath stroke-linecap='null' d='M5 13.5h22m-22 8h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
}
button#bom-netlist-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' stroke='%23000' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-width='2' d='M6 26l6-6v-8m13.8-6.3l-6 6v8'/%3E%3Ccircle cx='11.8' cy='9.5' r='2.8' stroke-width='2'/%3E%3Ccircle cx='19.8' cy='22.8' r='2.8' stroke-width='2'/%3E%3C/g%3E%3C/svg%3E");
}
button#copy {
background-image: url("data:image/svg+xml,%3Csvg height='48' viewBox='0 0 48 48' width='48' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h48v48h-48z' fill='none'/%3E%3Cpath d='M32 2h-24c-2.21 0-4 1.79-4 4v28h4v-28h24v-4zm6 8h-22c-2.21 0-4 1.79-4 4v28c0 2.21 1.79 4 4 4h22c2.21 0 4-1.79 4-4v-28c0-2.21-1.79-4-4-4zm0 32h-22v-28h22v28z'/%3E%3C/svg%3E");
background-position: 6px 6px;
background-repeat: no-repeat;
background-size: 26px 26px;
border-radius: 6px;
height: 40px;
width: 40px;
margin: 10px 5px;
}
button#copy:active {
box-shadow: inset 0px 0px 5px #6c6c6c;
}
textarea.clipboard-temp {
position: fixed;
top: 0;
left: 0;
width: 2em;
height: 2em;
padding: 0;
border: None;
outline: None;
box-shadow: None;
background: transparent;
}
.left-most-button {
border-right: 0;
border-top-left-radius: 6px;
border-bottom-left-radius: 6px;
}
.middle-button {
border-right: 0;
}
.right-most-button {
border-top-right-radius: 6px;
border-bottom-right-radius: 6px;
}
.button-container {
font-size: 0;
margin: 0.4rem 0.4rem 0.4rem 0;
}
.dark .button-container {
filter: invert(1);
}
.button-container button {
background-size: 32px 32px;
background-position: 5px 5px;
background-repeat: no-repeat;
}
@media print {
.hideonprint {
display: none;
}
}
canvas {
cursor: crosshair;
}
canvas:active {
cursor: grabbing;
}
.fileinfo {
width: 100%;
max-width: 1000px;
border: none;
padding: 3px;
}
.fileinfo .title {
font-size: 20pt;
font-weight: bold;
}
.fileinfo td {
overflow: hidden;
white-space: nowrap;
max-width: 1px;
width: 50%;
text-overflow: ellipsis;
}
.bom {
border-collapse: collapse;
font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
font-size: 10pt;
table-layout: fixed;
width: 100%;
margin-top: 1px;
position: relative;
}
.bom th,
.bom td {
border: 1px solid black;
padding: 5px;
word-wrap: break-word;
text-align: center;
position: relative;
}
.dark .bom th,
.dark .bom td {
border: 1px solid #777;
}
.bom th {
background-color: #CCCCCC;
background-clip: padding-box;
}
.dark .bom th {
background-color: #3b4749;
}
.bom tr.highlighted:nth-child(n) {
background-color: #cfc;
}
.dark .bom tr.highlighted:nth-child(n) {
background-color: #226022;
}
.bom tr:nth-child(even) {
background-color: #f2f2f2;
}
.dark .bom tr:nth-child(even) {
background-color: #313b40;
}
.bom tr.checked {
color: #1cb53d;
}
.dark .bom tr.checked {
color: #2cce54;
}
.bom tr {
transition: background-color 0.2s;
}
.bom .numCol {
width: 30px;
}
.bom .value {
width: 15%;
}
.bom .quantity {
width: 65px;
}
.bom th .sortmark {
position: absolute;
right: 1px;
top: 1px;
margin-top: -5px;
border-width: 5px;
border-style: solid;
border-color: transparent transparent #221 transparent;
transform-origin: 50% 85%;
transition: opacity 0.2s, transform 0.4s;
}
.dark .bom th .sortmark {
filter: invert(1);
}
.bom th .sortmark.none {
opacity: 0;
}
.bom th .sortmark.desc {
transform: rotate(180deg);
}
.bom th:hover .sortmark.none {
opacity: 0.5;
}
.bom .bom-checkbox {
width: 30px;
position: relative;
user-select: none;
-moz-user-select: none;
}
.bom .bom-checkbox:before {
content: "";
position: absolute;
border-width: 15px;
border-style: solid;
border-color: #51829f transparent transparent transparent;
visibility: hidden;
top: -15px;
}
.bom .bom-checkbox:after {
content: "Double click to set/unset all";
position: absolute;
color: white;
top: -35px;
left: -26px;
background: #51829f;
padding: 5px 15px;
border-radius: 8px;
white-space: nowrap;
visibility: hidden;
}
.bom .bom-checkbox:hover:before,
.bom .bom-checkbox:hover:after {
visibility: visible;
transition: visibility 0.2s linear 1s;
}
.split {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
overflow-y: auto;
overflow-x: hidden;
background-color: inherit;
}
.split.split-horizontal,
.gutter.gutter-horizontal {
height: 100%;
float: left;
}
.gutter {
background-color: #ddd;
background-repeat: no-repeat;
background-position: 50%;
transition: background-color 0.3s;
}
.dark .gutter {
background-color: #777;
}
.gutter.gutter-horizontal {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==');
cursor: ew-resize;
width: 5px;
}
.gutter.gutter-vertical {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAFAQMAAABo7865AAAABlBMVEVHcEzMzMzyAv2sAAAAAXRSTlMAQObYZgAAABBJREFUeF5jOAMEEAIEEFwAn3kMwcB6I2AAAAAASUVORK5CYII=');
cursor: ns-resize;
height: 5px;
}
.searchbox {
float: left;
height: 40px;
margin: 10px 5px;
padding: 12px 32px;
font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
font-size: 18px;
box-sizing: border-box;
border: 1px solid #888;
border-radius: 6px;
outline: none;
background-color: #eee;
transition: background-color 0.2s, border 0.2s;
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABNklEQVQ4T8XSMUvDQBQH8P/LElFa/AIZHcTBQSz0I/gFstTBRR2KUC4ldDxw7h0Bl3RRUATxi4iiODgoiLNrbQYp5J6cpJJqomkX33Z37/14d/dIa33MzDuYI4johOI4XhyNRteO46zNYjDzAxE1yBZprVeZ+QbAUhXEGJMA2Ox2u4+fQIa0mPmsCgCgJYQ4t7lfgF0opQYAdv9ABkKI/UnOFCClXKjX61cA1osQY8x9kiRNKeV7IWA3oyhaSdP0FkAtjxhj3hzH2RBCPOf3pzqYHCilfAAX+URm9oMguPzeWSGQvUcMYC8rOBJCHBRdqxTo9/vbRHRqi8bj8XKv1xvODbiuW2u32/bvf0SlDv4XYOY7z/Mavu+nM1+BmQ+NMc0wDF/LprP0DbTWW0T00ul0nn4b7Q87+X4Qmfiq2wAAAABJRU5ErkJggg==');
background-position: 10px 10px;
background-repeat: no-repeat;
}
.dark .searchbox {
background-color: #111;
color: #eee;
}
.searchbox::placeholder {
color: #ccc;
}
.dark .searchbox::placeholder {
color: #666;
}
.filter {
width: calc(60% - 64px);
}
.reflookup {
width: calc(40% - 10px);
}
input[type=text]:focus {
background-color: white;
border: 1px solid #333;
}
.dark input[type=text]:focus {
background-color: #333;
border: 1px solid #ccc;
}
mark.highlight {
background-color: #5050ff;
color: #fff;
padding: 2px;
border-radius: 6px;
}
.dark mark.highlight {
background-color: #76a6da;
color: #111;
}
.menubtn {
background-color: white;
border: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36' viewBox='0 0 20 20'%3E%3Cpath fill='none' d='M0 0h20v20H0V0z'/%3E%3Cpath d='M15.95 10.78c.03-.25.05-.51.05-.78s-.02-.53-.06-.78l1.69-1.32c.15-.12.19-.34.1-.51l-1.6-2.77c-.1-.18-.31-.24-.49-.18l-1.99.8c-.42-.32-.86-.58-1.35-.78L12 2.34c-.03-.2-.2-.34-.4-.34H8.4c-.2 0-.36.14-.39.34l-.3 2.12c-.49.2-.94.47-1.35.78l-1.99-.8c-.18-.07-.39 0-.49.18l-1.6 2.77c-.1.18-.06.39.1.51l1.69 1.32c-.04.25-.07.52-.07.78s.02.53.06.78L2.37 12.1c-.15.12-.19.34-.1.51l1.6 2.77c.1.18.31.24.49.18l1.99-.8c.42.32.86.58 1.35.78l.3 2.12c.04.2.2.34.4.34h3.2c.2 0 .37-.14.39-.34l.3-2.12c.49-.2.94-.47 1.35-.78l1.99.8c.18.07.39 0 .49-.18l1.6-2.77c.1-.18.06-.39-.1-.51l-1.67-1.32zM10 13c-1.65 0-3-1.35-3-3s1.35-3 3-3 3 1.35 3 3-1.35 3-3 3z'/%3E%3C/svg%3E%0A");
background-position: center;
background-repeat: no-repeat;
}
.statsbtn {
background-color: white;
border: none;
background-image: url("data:image/svg+xml,%3Csvg width='36' height='36' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 6h28v24H4V6zm0 8h28v8H4m9-16v24h10V5.8' fill='none' stroke='%23000' stroke-width='2'/%3E%3C/svg%3E");
background-position: center;
background-repeat: no-repeat;
}
.iobtn {
background-color: white;
border: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36'%3E%3Cpath fill='none' stroke='%23000' stroke-width='2' d='M3 33v-7l6.8-7h16.5l6.7 7v7H3zM3.2 26H33M21 9l5-5.9 5 6h-2.5V15h-5V9H21zm-4.9 0l-5 6-5-6h2.5V3h5v6h2.5z'/%3E%3Cpath fill='none' stroke='%23000' d='M6.1 29.5H10'/%3E%3C/svg%3E");
background-position: center;
background-repeat: no-repeat;
}
.visbtn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath fill='none' stroke='%23333' d='M2.5 4.5h5v15h-5zM9.5 4.5h5v15h-5zM16.5 4.5h5v15h-5z'/%3E%3C/svg%3E");
background-position: center;
background-repeat: no-repeat;
padding: 15px;
}
#vismenu-content {
left: 0px;
font-family: Verdana, sans-serif;
}
.dark .statsbtn,
.dark .savebtn,
.dark .menubtn,
.dark .iobtn,
.dark .visbtn {
filter: invert(1);
}
.flexbox {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
}
.savebtn {
background-color: #d6d6d6;
width: auto;
height: 30px;
flex-grow: 1;
margin: 5px;
border-radius: 4px;
}
.savebtn:active {
background-color: #0a0;
color: white;
}
.dark .savebtn:active {
/* This will be inverted */
background-color: #b3b;
}
.stats {
border-collapse: collapse;
font-size: 12pt;
table-layout: fixed;
width: 100%;
min-width: 450px;
}
.dark .stats td {
border: 1px solid #bbb;
}
.stats td {
border: 1px solid black;
padding: 5px;
word-wrap: break-word;
text-align: center;
position: relative;
}
#checkbox-stats div {
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 100%;
display: flex;
align-items: center;
justify-content: center;
}
#checkbox-stats .bar {
background-color: rgba(28, 251, 0, 0.6);
}
.menu {
position: relative;
display: inline-block;
margin: 0.4rem 0.4rem 0.4rem 0;
}
.menu-content {
font-size: 12pt !important;
text-align: left !important;
font-weight: normal !important;
display: none;
position: absolute;
background-color: white;
right: 0;
min-width: 300px;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
z-index: 100;
padding: 8px;
}
.dark .menu-content {
background-color: #111;
}
.menu:hover .menu-content {
display: block;
}
.menu:hover .menubtn,
.menu:hover .iobtn,
.menu:hover .statsbtn {
background-color: #eee;
}
.menu-label {
display: inline-block;
padding: 8px;
border: 1px solid #ccc;
border-top: 0;
width: calc(100% - 18px);
}
.menu-label-top {
border-top: 1px solid #ccc;
}
.menu-textbox {
float: left;
height: 24px;
margin: 10px 5px;
padding: 5px 5px;
font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
font-size: 14px;
box-sizing: border-box;
border: 1px solid #888;
border-radius: 4px;
outline: none;
background-color: #eee;
transition: background-color 0.2s, border 0.2s;
width: calc(100% - 10px);
}
.menu-textbox.invalid,
.dark .menu-textbox.invalid {
color: red;
}
.dark .menu-textbox {
background-color: #222;
color: #eee;
}
.radio-container {
margin: 4px;
}
.topmostdiv {
display: flex;
flex-direction: column;
width: 100%;
background-color: white;
transition: background-color 0.3s;
min-height: 100%;
}
#top {
display: flex;
flex-wrap: wrap;
justify-content: flex-end;
align-items: center;
}
#topdivider {
border-bottom: 2px solid black;
display: flex;
justify-content: center;
align-items: center;
}
.dark #topdivider {
border-bottom: 2px solid #ccc;
}
#topdivider>div {
position: relative;
}
#toptoggle {
cursor: pointer;
user-select: none;
position: absolute;
padding: 0.1rem 0.3rem;
top: -0.4rem;
left: -1rem;
font-size: 1.4rem;
line-height: 60%;
border: 1px solid black;
border-radius: 1rem;
background-color: #fff;
z-index: 100;
}
.flipped {
transform: rotate(0.5turn);
}
.dark #toptoggle {
border: 1px solid #fff;
background-color: #222;
}
#fileinfodiv {
flex: 20rem 1 0;
overflow: auto;
}
#bomcontrols {
display: flex;
flex-direction: row-reverse;
}
#bomcontrols>* {
flex-shrink: 0;
}
#dbg {
display: block;
}
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: #aaa;
}
::-webkit-scrollbar-thumb {
background: #666;
border-radius: 3px;
}
::-webkit-scrollbar-thumb:hover {
background: #555;
}
.slider {
-webkit-appearance: none;
width: 100%;
margin: 3px 0;
padding: 0;
outline: none;
opacity: 0.7;
-webkit-transition: .2s;
transition: opacity .2s;
border-radius: 3px;
}
.slider:hover {
opacity: 1;
}
.slider:focus {
outline: none;
}
.slider::-webkit-slider-runnable-track {
-webkit-appearance: none;
width: 100%;
height: 8px;
background: #d3d3d3;
border-radius: 3px;
border: none;
}
.slider::-webkit-slider-thumb {
-webkit-appearance: none;
width: 15px;
height: 15px;
border-radius: 50%;
background: #0a0;
cursor: pointer;
margin-top: -4px;
}
.dark .slider::-webkit-slider-thumb {
background: #3d3;
}
.slider::-moz-range-thumb {
width: 15px;
height: 15px;
border-radius: 50%;
background: #0a0;
cursor: pointer;
}
.slider::-moz-range-track {
height: 8px;
background: #d3d3d3;
border-radius: 3px;
}
.dark .slider::-moz-range-thumb {
background: #3d3;
}
.slider::-ms-track {
width: 100%;
height: 8px;
border-width: 3px 0;
background: transparent;
border-color: transparent;
color: transparent;
transition: opacity .2s;
}
.slider::-ms-fill-lower {
background: #d3d3d3;
border: none;
border-radius: 3px;
}
.slider::-ms-fill-upper {
background: #d3d3d3;
border: none;
border-radius: 3px;
}
.slider::-ms-thumb {
width: 15px;
height: 15px;
border-radius: 50%;
background: #0a0;
cursor: pointer;
margin: 0;
}
.shameless-plug {
font-size: 0.8em;
text-align: center;
display: block;
}
a {
color: #0278a4;
}
.dark a {
color: #00b9fd;
}
#frontcanvas,
#backcanvas {
touch-action: none;
}
.placeholder {
border: 1px dashed #9f9fda !important;
background-color: #edf2f7 !important;
}
.dragging {
z-index: 999;
}
.dark .dragging>table>tbody>tr {
background-color: #252c30;
}
.dark .placeholder {
filter: invert(1);
}
.column-spacer {
top: 0;
left: 0;
width: calc(100% - 4px);
position: absolute;
cursor: pointer;
user-select: none;
height: 100%;
}
.column-width-handle {
top: 0;
right: 0;
width: 4px;
position: absolute;
cursor: col-resize;
user-select: none;
height: 100%;
}
.column-width-handle:hover {
background-color: #4f99bd;
}
.help-link {
border: 1px solid #0278a4;
padding-inline: 0.3rem;
border-radius: 3px;
cursor: pointer;
}
.dark .help-link {
border: 1px solid #00b9fd;
}
.bom-color {
width: 20%;
}
.color-column input {
width: 1.6rem;
height: 1rem;
border: 1px solid black;
cursor: pointer;
padding: 0;
}
/* removes default styling from input color element */
::-webkit-color-swatch {
border: none;
}
::-webkit-color-swatch-wrapper {
padding: 0;
}
::-moz-color-swatch,
::-moz-focus-inner {
border: none;
}
::-moz-focus-inner {
padding: 0;
}
</style>
<script type="text/javascript" >
///////////////////////////////////////////////
/*
Split.js - v1.3.5
MIT License
https://github.com/nathancahill/Split.js
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Split=t()}(this,function(){"use strict";var e=window,t=e.document,n="addEventListener",i="removeEventListener",r="getBoundingClientRect",s=function(){return!1},o=e.attachEvent&&!e[n],a=["","-webkit-","-moz-","-o-"].filter(function(e){var n=t.createElement("div");return n.style.cssText="width:"+e+"calc(9px)",!!n.style.length}).shift()+"calc",l=function(e){return"string"==typeof e||e instanceof String?t.querySelector(e):e};return function(u,c){function z(e,t,n){var i=A(y,t,n);Object.keys(i).forEach(function(t){return e.style[t]=i[t]})}function h(e,t){var n=B(y,t);Object.keys(n).forEach(function(t){return e.style[t]=n[t]})}function f(e){var t=E[this.a],n=E[this.b],i=t.size+n.size;t.size=e/this.size*i,n.size=i-e/this.size*i,z(t.element,t.size,this.aGutterSize),z(n.element,n.size,this.bGutterSize)}function m(e){var t;this.dragging&&((t="touches"in e?e.touches[0][b]-this.start:e[b]-this.start)<=E[this.a].minSize+M+this.aGutterSize?t=E[this.a].minSize+this.aGutterSize:t>=this.size-(E[this.b].minSize+M+this.bGutterSize)&&(t=this.size-(E[this.b].minSize+this.bGutterSize)),f.call(this,t),c.onDrag&&c.onDrag())}function g(){var e=E[this.a].element,t=E[this.b].element;this.size=e[r]()[y]+t[r]()[y]+this.aGutterSize+this.bGutterSize,this.start=e[r]()[G]}function d(){var t=this,n=E[t.a].element,r=E[t.b].element;t.dragging&&c.onDragEnd&&c.onDragEnd(),t.dragging=!1,e[i]("mouseup",t.stop),e[i]("touchend",t.stop),e[i]("touchcancel",t.stop),t.parent[i]("mousemove",t.move),t.parent[i]("touchmove",t.move),delete t.stop,delete t.move,n[i]("selectstart",s),n[i]("dragstart",s),r[i]("selectstart",s),r[i]("dragstart",s),n.style.userSelect="",n.style.webkitUserSelect="",n.style.MozUserSelect="",n.style.pointerEvents="",r.style.userSelect="",r.style.webkitUserSelect="",r.style.MozUserSelect="",r.style.pointerEvents="",t.gutter.style.cursor="",t.parent.style.cursor=""}function S(t){var i=this,r=E[i.a].element,o=E[i.b].element;!i.dragging&&c.onDragStart&&c.onDragStart(),t.preventDefault(),i.dragging=!0,i.move=m.bind(i),i.stop=d.bind(i),e[n]("mouseup",i.stop),e[n]("touchend",i.stop),e[n]("touchcancel",i.stop),i.parent[n]("mousemove",i.move),i.parent[n]("touchmove",i.move),r[n]("selectstart",s),r[n]("dragstart",s),o[n]("selectstart",s),o[n]("dragstart",s),r.style.userSelect="none",r.style.webkitUserSelect="none",r.style.MozUserSelect="none",r.style.pointerEvents="none",o.style.userSelect="none",o.style.webkitUserSelect="none",o.style.MozUserSelect="none",o.style.pointerEvents="none",i.gutter.style.cursor=j,i.parent.style.cursor=j,g.call(i)}function v(e){e.forEach(function(t,n){if(n>0){var i=F[n-1],r=E[i.a],s=E[i.b];r.size=e[n-1],s.size=t,z(r.element,r.size,i.aGutterSize),z(s.element,s.size,i.bGutterSize)}})}function p(){F.forEach(function(e){e.parent.removeChild(e.gutter),E[e.a].element.style[y]="",E[e.b].element.style[y]=""})}void 0===c&&(c={});var y,b,G,E,w=l(u[0]).parentNode,D=e.getComputedStyle(w).flexDirection,U=c.sizes||u.map(function(){return 100/u.length}),k=void 0!==c.minSize?c.minSize:100,x=Array.isArray(k)?k:u.map(function(){return k}),L=void 0!==c.gutterSize?c.gutterSize:10,M=void 0!==c.snapOffset?c.snapOffset:30,O=c.direction||"horizontal",j=c.cursor||("horizontal"===O?"ew-resize":"ns-resize"),C=c.gutter||function(e,n){var i=t.createElement("div");return i.className="gutter gutter-"+n,i},A=c.elementStyle||function(e,t,n){var i={};return"string"==typeof t||t instanceof String?i[e]=t:i[e]=o?t+"%":a+"("+t+"% - "+n+"px)",i},B=c.gutterStyle||function(e,t){return n={},n[e]=t+"px",n;var n};"horizontal"===O?(y="width","clientWidth",b="clientX",G="left","paddingLeft"):"vertical"===O&&(y="height","clientHeight",b="clientY",G="top","paddingTop");var F=[];return E=u.map(function(e,t){var i,s={element:l(e),size:U[t],minSize:x[t]};if(t>0&&(i={a:t-1,b:t,dragging:!1,isFirst:1===t,isLast:t===u.length-1,direction:O,parent:w},i.aGutterSize=L,i.bGutterSize=L,i.isFirst&&(i.aGutterSize=L/2),i.isLast&&(i.bGutterSize=L/2),"row-reverse"===D||"column-reverse"===D)){var a=i.a;i.a=i.b,i.b=a}if(!o&&t>0){var c=C(t,O);h(c,L),c[n]("mousedown",S.bind(i)),c[n]("touchstart",S.bind(i)),w.insertBefore(c,s.element),i.gutter=c}0===t||t===u.length-1?z(s.element,s.size,L/2):z(s.element,s.size,L);var f=s.element[r]()[y];return f<s.minSize&&(s.minSize=f),t>0&&F.push(i),s}),o?{setSizes:v,destroy:p}:{setSizes:v,getSizes:function(){return E.map(function(e){return e.size})},collapse:function(e){if(e===F.length){var t=F[e-1];g.call(t),o||f.call(t,t.size-t.bGutterSize)}else{var n=F[e];g.call(n),o||f.call(n,n.aGutterSize)}},destroy:p}}});
///////////////////////////////////////////////
///////////////////////////////////////////////
// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>
// This work is free. You can redistribute it and/or modify it
// under the terms of the WTFPL, Version 2
// For more information see LICENSE.txt or http://www.wtfpl.net/
//
// For more information, the home page:
// http://pieroxy.net/blog/pages/lz-string/testing.html
//
// LZ-based compression algorithm, version 1.4.4
var LZString=function(){var o=String.fromCharCode,i={};var n={decompressFromBase64:function(o){return null==o?"":""==o?null:n._decompress(o.length,32,function(n){return function(o,n){if(!i[o]){i[o]={};for(var t=0;t<o.length;t++)i[o][o.charAt(t)]=t}return i[o][n]}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o.charAt(n))})},_decompress:function(i,n,t){var r,e,a,s,p,u,l,f=[],c=4,d=4,h=3,v="",g=[],m={val:t(0),position:n,index:1};for(r=0;r<3;r+=1)f[r]=r;for(a=0,p=Math.pow(2,2),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 2:return""}for(f[3]=l,e=l,g.push(l);;){if(m.index>i)return"";for(a=0,p=Math.pow(2,h),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(l=a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 2:return g.join("")}if(0==c&&(c=Math.pow(2,h),h++),f[l])v=f[l];else{if(l!==d)return null;v=e+e.charAt(0)}g.push(v),f[d++]=e+v.charAt(0),e=v,0==--c&&(c=Math.pow(2,h),h++)}}};return n}();"function"==typeof define&&define.amd?define(function(){return LZString}):"undefined"!=typeof module&&null!=module?module.exports=LZString:"undefined"!=typeof angular&&null!=angular&&angular.module("LZString",[]).factory("LZString",function(){return LZString});
///////////////////////////////////////////////
///////////////////////////////////////////////
/*!
* PEP v0.4.3 | https://github.com/jquery/PEP
* Copyright jQuery Foundation and other contributors | http://jquery.org/license
*/
!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.PointerEventsPolyfill=b()}(this,function(){"use strict";function a(a,b){b=b||Object.create(null);var c=document.createEvent("Event");c.initEvent(a,b.bubbles||!1,b.cancelable||!1);
for(var d,e=2;e<m.length;e++)d=m[e],c[d]=b[d]||n[e];c.buttons=b.buttons||0;
var f=0;return f=b.pressure&&c.buttons?b.pressure:c.buttons?.5:0,c.x=c.clientX,c.y=c.clientY,c.pointerId=b.pointerId||0,c.width=b.width||0,c.height=b.height||0,c.pressure=f,c.tiltX=b.tiltX||0,c.tiltY=b.tiltY||0,c.twist=b.twist||0,c.tangentialPressure=b.tangentialPressure||0,c.pointerType=b.pointerType||"",c.hwTimestamp=b.hwTimestamp||0,c.isPrimary=b.isPrimary||!1,c}function b(){this.array=[],this.size=0}function c(a,b,c,d){this.addCallback=a.bind(d),this.removeCallback=b.bind(d),this.changedCallback=c.bind(d),A&&(this.observer=new A(this.mutationWatcher.bind(this)))}function d(a){return"body /shadow-deep/ "+e(a)}function e(a){return'[touch-action="'+a+'"]'}function f(a){return"{ -ms-touch-action: "+a+"; touch-action: "+a+"; }"}function g(){if(F){D.forEach(function(a){String(a)===a?(E+=e(a)+f(a)+"\n",G&&(E+=d(a)+f(a)+"\n")):(E+=a.selectors.map(e)+f(a.rule)+"\n",G&&(E+=a.selectors.map(d)+f(a.rule)+"\n"))});var a=document.createElement("style");a.textContent=E,document.head.appendChild(a)}}function h(){if(!window.PointerEvent){if(window.PointerEvent=a,window.navigator.msPointerEnabled){var b=window.navigator.msMaxTouchPoints;Object.defineProperty(window.navigator,"maxTouchPoints",{value:b,enumerable:!0}),u.registerSource("ms",_)}else Object.defineProperty(window.navigator,"maxTouchPoints",{value:0,enumerable:!0}),u.registerSource("mouse",N),void 0!==window.ontouchstart&&u.registerSource("touch",V);u.register(document)}}function i(a){if(!u.pointermap.has(a)){var b=new Error("InvalidPointerId");throw b.name="InvalidPointerId",b}}function j(a){for(var b=a.parentNode;b&&b!==a.ownerDocument;)b=b.parentNode;if(!b){var c=new Error("InvalidStateError");throw c.name="InvalidStateError",c}}function k(a){var b=u.pointermap.get(a);return 0!==b.buttons}function l(){window.Element&&!Element.prototype.setPointerCapture&&Object.defineProperties(Element.prototype,{setPointerCapture:{value:W},releasePointerCapture:{value:X},hasPointerCapture:{value:Y}})}
var m=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","pageX","pageY"],n=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0],o=window.Map&&window.Map.prototype.forEach,p=o?Map:b;b.prototype={set:function(a,b){return void 0===b?this["delete"](a):(this.has(a)||this.size++,void(this.array[a]=b))},has:function(a){return void 0!==this.array[a]},"delete":function(a){this.has(a)&&(delete this.array[a],this.size--)},get:function(a){return this.array[a]},clear:function(){this.array.length=0,this.size=0},forEach:function(a,b){return this.array.forEach(function(c,d){a.call(b,c,d,this)},this)}};var q=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","buttons","pointerId","width","height","pressure","tiltX","tiltY","pointerType","hwTimestamp","isPrimary","type","target","currentTarget","which","pageX","pageY","timeStamp"],r=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0,0,0,0,0,0,"",0,!1,"",null,null,0,0,0,0],s={pointerover:1,pointerout:1,pointerenter:1,pointerleave:1},t="undefined"!=typeof SVGElementInstance,u={pointermap:new p,eventMap:Object.create(null),captureInfo:Object.create(null),eventSources:Object.create(null),eventSourceList:[],registerSource:function(a,b){var c=b,d=c.events;d&&(d.forEach(function(a){c[a]&&(this.eventMap[a]=c[a].bind(c))},this),this.eventSources[a]=c,this.eventSourceList.push(c))},register:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
b.register.call(b,a)},unregister:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
b.unregister.call(b,a)},contains:function(a,b){try{return a.contains(b)}catch(c){return!1}},down:function(a){a.bubbles=!0,this.fireEvent("pointerdown",a)},move:function(a){a.bubbles=!0,this.fireEvent("pointermove",a)},up:function(a){a.bubbles=!0,this.fireEvent("pointerup",a)},enter:function(a){a.bubbles=!1,this.fireEvent("pointerenter",a)},leave:function(a){a.bubbles=!1,this.fireEvent("pointerleave",a)},over:function(a){a.bubbles=!0,this.fireEvent("pointerover",a)},out:function(a){a.bubbles=!0,this.fireEvent("pointerout",a)},cancel:function(a){a.bubbles=!0,this.fireEvent("pointercancel",a)},leaveOut:function(a){this.out(a),this.propagate(a,this.leave,!1)},enterOver:function(a){this.over(a),this.propagate(a,this.enter,!0)},eventHandler:function(a){if(!a._handledByPE){var b=a.type,c=this.eventMap&&this.eventMap[b];c&&c(a),a._handledByPE=!0}},listen:function(a,b){b.forEach(function(b){this.addEvent(a,b)},this)},unlisten:function(a,b){b.forEach(function(b){this.removeEvent(a,b)},this)},addEvent:function(a,b){a.addEventListener(b,this.boundHandler)},removeEvent:function(a,b){a.removeEventListener(b,this.boundHandler)},makeEvent:function(b,c){this.captureInfo[c.pointerId]&&(c.relatedTarget=null);var d=new a(b,c);return c.preventDefault&&(d.preventDefault=c.preventDefault),d._target=d._target||c.target,d},fireEvent:function(a,b){var c=this.makeEvent(a,b);return this.dispatchEvent(c)},cloneEvent:function(a){for(var b,c=Object.create(null),d=0;d<q.length;d++)b=q[d],c[b]=a[b]||r[d],!t||"target"!==b&&"relatedTarget"!==b||c[b]instanceof SVGElementInstance&&(c[b]=c[b].correspondingUseElement);return a.preventDefault&&(c.preventDefault=function(){a.preventDefault()}),c},getTarget:function(a){var b=this.captureInfo[a.pointerId];return b?a._target!==b&&a.type in s?void 0:b:a._target},propagate:function(a,b,c){for(var d=a.target,e=[];d!==document&&!d.contains(a.relatedTarget);) if(e.push(d),d=d.parentNode,!d)return;c&&e.reverse(),e.forEach(function(c){a.target=c,b.call(this,a)},this)},setCapture:function(b,c,d){this.captureInfo[b]&&this.releaseCapture(b,d),this.captureInfo[b]=c,this.implicitRelease=this.releaseCapture.bind(this,b,d),document.addEventListener("pointerup",this.implicitRelease),document.addEventListener("pointercancel",this.implicitRelease);var e=new a("gotpointercapture");e.pointerId=b,e._target=c,d||this.asyncDispatchEvent(e)},releaseCapture:function(b,c){var d=this.captureInfo[b];if(d){this.captureInfo[b]=void 0,document.removeEventListener("pointerup",this.implicitRelease),document.removeEventListener("pointercancel",this.implicitRelease);var e=new a("lostpointercapture");e.pointerId=b,e._target=d,c||this.asyncDispatchEvent(e)}},dispatchEvent:/*scope.external.dispatchEvent || */function(a){var b=this.getTarget(a);if(b)return b.dispatchEvent(a)},asyncDispatchEvent:function(a){requestAnimationFrame(this.dispatchEvent.bind(this,a))}};u.boundHandler=u.eventHandler.bind(u);var v={shadow:function(a){if(a)return a.shadowRoot||a.webkitShadowRoot},canTarget:function(a){return a&&Boolean(a.elementFromPoint)},targetingShadow:function(a){var b=this.shadow(a);if(this.canTarget(b))return b},olderShadow:function(a){var b=a.olderShadowRoot;if(!b){var c=a.querySelector("shadow");c&&(b=c.olderShadowRoot)}return b},allShadows:function(a){for(var b=[],c=this.shadow(a);c;)b.push(c),c=this.olderShadow(c);return b},searchRoot:function(a,b,c){if(a){var d,e,f=a.elementFromPoint(b,c);for(e=this.targetingShadow(f);e;){if(d=e.elementFromPoint(b,c)){var g=this.targetingShadow(d);return this.searchRoot(g,b,c)||d} e=this.olderShadow(e)} return f}},owner:function(a){
for(var b=a;b.parentNode;)b=b.parentNode;
return b.nodeType!==Node.DOCUMENT_NODE&&b.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&(b=document),b},findTarget:function(a){var b=a.clientX,c=a.clientY,d=this.owner(a.target);
return d.elementFromPoint(b,c)||(d=document),this.searchRoot(d,b,c)}},w=Array.prototype.forEach.call.bind(Array.prototype.forEach),x=Array.prototype.map.call.bind(Array.prototype.map),y=Array.prototype.slice.call.bind(Array.prototype.slice),z=Array.prototype.filter.call.bind(Array.prototype.filter),A=window.MutationObserver||window.WebKitMutationObserver,B="[touch-action]",C={subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["touch-action"]};c.prototype={watchSubtree:function(a){
//
this.observer&&v.canTarget(a)&&this.observer.observe(a,C)},enableOnSubtree:function(a){this.watchSubtree(a),a===document&&"complete"!==document.readyState?this.installOnLoad():this.installNewSubtree(a)},installNewSubtree:function(a){w(this.findElements(a),this.addElement,this)},findElements:function(a){return a.querySelectorAll?a.querySelectorAll(B):[]},removeElement:function(a){this.removeCallback(a)},addElement:function(a){this.addCallback(a)},elementChanged:function(a,b){this.changedCallback(a,b)},concatLists:function(a,b){return a.concat(y(b))},
installOnLoad:function(){document.addEventListener("readystatechange",function(){"complete"===document.readyState&&this.installNewSubtree(document)}.bind(this))},isElement:function(a){return a.nodeType===Node.ELEMENT_NODE},flattenMutationTree:function(a){
var b=x(a,this.findElements,this);
return b.push(z(a,this.isElement)),b.reduce(this.concatLists,[])},mutationWatcher:function(a){a.forEach(this.mutationHandler,this)},mutationHandler:function(a){if("childList"===a.type){var b=this.flattenMutationTree(a.addedNodes);b.forEach(this.addElement,this);var c=this.flattenMutationTree(a.removedNodes);c.forEach(this.removeElement,this)}else"attributes"===a.type&&this.elementChanged(a.target,a.oldValue)}};var D=["none","auto","pan-x","pan-y",{rule:"pan-x pan-y",selectors:["pan-x pan-y","pan-y pan-x"]}],E="",F=window.PointerEvent||window.MSPointerEvent,G=!window.ShadowDOMPolyfill&&document.head.createShadowRoot,H=u.pointermap,I=25,J=[1,4,2,8,16],K=!1;try{K=1===new MouseEvent("test",{buttons:1}).buttons}catch(L){}
var M,N={POINTER_ID:1,POINTER_TYPE:"mouse",events:["mousedown","mousemove","mouseup","mouseover","mouseout"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},lastTouches:[],
isEventSimulatedFromTouch:function(a){for(var b,c=this.lastTouches,d=a.clientX,e=a.clientY,f=0,g=c.length;f<g&&(b=c[f]);f++){
var h=Math.abs(d-b.x),i=Math.abs(e-b.y);if(h<=I&&i<=I)return!0}},prepareEvent:function(a){var b=u.cloneEvent(a),c=b.preventDefault;return b.preventDefault=function(){a.preventDefault(),c()},b.pointerId=this.POINTER_ID,b.isPrimary=!0,b.pointerType=this.POINTER_TYPE,b},prepareButtonsForMove:function(a,b){var c=H.get(this.POINTER_ID);
0!==b.which&&c?a.buttons=c.buttons:a.buttons=0,b.buttons=a.buttons},mousedown:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);K||(c.buttons=J[c.button],b&&(c.buttons|=b.buttons),a.buttons=c.buttons),H.set(this.POINTER_ID,a),b&&0!==b.buttons?u.move(c):u.down(c)}},mousemove:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.move(b)}},mouseup:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);if(!K){var d=J[c.button];
c.buttons=b?b.buttons&~d:0,a.buttons=c.buttons}H.set(this.POINTER_ID,a),
c.buttons&=~J[c.button],0===c.buttons?u.up(c):u.move(c)}},mouseover:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.enterOver(b)}},mouseout:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,u.leaveOut(b)}},cancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.deactivateMouse()},deactivateMouse:function(){H["delete"](this.POINTER_ID)}},O=u.captureInfo,P=v.findTarget.bind(v),Q=v.allShadows.bind(v),R=u.pointermap,S=2500,T=200,U="touch-action",V={events:["touchstart","touchmove","touchend","touchcancel"],register:function(a){M.enableOnSubtree(a)},unregister:function(){},elementAdded:function(a){var b=a.getAttribute(U),c=this.touchActionToScrollType(b);c&&(a._scrollType=c,u.listen(a,this.events),
Q(a).forEach(function(a){a._scrollType=c,u.listen(a,this.events)},this))},elementRemoved:function(a){a._scrollType=void 0,u.unlisten(a,this.events),
Q(a).forEach(function(a){a._scrollType=void 0,u.unlisten(a,this.events)},this)},elementChanged:function(a,b){var c=a.getAttribute(U),d=this.touchActionToScrollType(c),e=this.touchActionToScrollType(b);
d&&e?(a._scrollType=d,Q(a).forEach(function(a){a._scrollType=d},this)):e?this.elementRemoved(a):d&&this.elementAdded(a)},scrollTypes:{EMITTER:"none",XSCROLLER:"pan-x",YSCROLLER:"pan-y",SCROLLER:/^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/},touchActionToScrollType:function(a){var b=a,c=this.scrollTypes;return"none"===b?"none":b===c.XSCROLLER?"X":b===c.YSCROLLER?"Y":c.SCROLLER.exec(b)?"XY":void 0},POINTER_TYPE:"touch",firstTouch:null,isPrimaryTouch:function(a){return this.firstTouch===a.identifier},setPrimaryTouch:function(a){
(0===R.size||1===R.size&&R.has(1))&&(this.firstTouch=a.identifier,this.firstXY={X:a.clientX,Y:a.clientY},this.scrolling=!1,this.cancelResetClickCount())},removePrimaryPointer:function(a){a.isPrimary&&(this.firstTouch=null,this.firstXY=null,this.resetClickCount())},clickCount:0,resetId:null,resetClickCount:function(){var a=function(){this.clickCount=0,this.resetId=null}.bind(this);this.resetId=setTimeout(a,T)},cancelResetClickCount:function(){this.resetId&&clearTimeout(this.resetId)},typeToButtons:function(a){var b=0;return"touchstart"!==a&&"touchmove"!==a||(b=1),b},touchToPointer:function(a){var b=this.currentTouchEvent,c=u.cloneEvent(a),d=c.pointerId=a.identifier+2;c.target=O[d]||P(c),c.bubbles=!0,c.cancelable=!0,c.detail=this.clickCount,c.button=0,c.buttons=this.typeToButtons(b.type),c.width=2*(a.radiusX||a.webkitRadiusX||0),c.height=2*(a.radiusY||a.webkitRadiusY||0),c.pressure=a.force||a.webkitForce||.5,c.isPrimary=this.isPrimaryTouch(a),c.pointerType=this.POINTER_TYPE,
c.altKey=b.altKey,c.ctrlKey=b.ctrlKey,c.metaKey=b.metaKey,c.shiftKey=b.shiftKey;
var e=this;return c.preventDefault=function(){e.scrolling=!1,e.firstXY=null,b.preventDefault()},c},processTouches:function(a,b){var c=a.changedTouches;this.currentTouchEvent=a;for(var d,e=0;e<c.length;e++)d=c[e],b.call(this,this.touchToPointer(d))},
shouldScroll:function(a){if(this.firstXY){var b,c=a.currentTarget._scrollType;if("none"===c)
b=!1;else if("XY"===c)
b=!0;else{var d=a.changedTouches[0],e=c,f="Y"===c?"X":"Y",g=Math.abs(d["client"+e]-this.firstXY[e]),h=Math.abs(d["client"+f]-this.firstXY[f]);
b=g>=h}return this.firstXY=null,b}},findTouch:function(a,b){for(var c,d=0,e=a.length;d<e&&(c=a[d]);d++)if(c.identifier===b)return!0},
vacuumTouches:function(a){var b=a.touches;
if(R.size>=b.length){var c=[];R.forEach(function(a,d){
if(1!==d&&!this.findTouch(b,d-2)){var e=a.out;c.push(e)}},this),c.forEach(this.cancelOut,this)}},touchstart:function(a){this.vacuumTouches(a),this.setPrimaryTouch(a.changedTouches[0]),this.dedupSynthMouse(a),this.scrolling||(this.clickCount++,this.processTouches(a,this.overDown))},overDown:function(a){R.set(a.pointerId,{target:a.target,out:a,outTarget:a.target}),u.enterOver(a),u.down(a)},touchmove:function(a){this.scrolling||(this.shouldScroll(a)?(this.scrolling=!0,this.touchcancel(a)):(a.preventDefault(),this.processTouches(a,this.moveOverOut)))},moveOverOut:function(a){var b=a,c=R.get(b.pointerId);
if(c){var d=c.out,e=c.outTarget;u.move(b),d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,
d.target=e,b.target?(u.leaveOut(d),u.enterOver(b)):(
b.target=e,b.relatedTarget=null,this.cancelOut(b))),c.out=b,c.outTarget=b.target}},touchend:function(a){this.dedupSynthMouse(a),this.processTouches(a,this.upOut)},upOut:function(a){this.scrolling||(u.up(a),u.leaveOut(a)),this.cleanUpPointer(a)},touchcancel:function(a){this.processTouches(a,this.cancelOut)},cancelOut:function(a){u.cancel(a),u.leaveOut(a),this.cleanUpPointer(a)},cleanUpPointer:function(a){R["delete"](a.pointerId),this.removePrimaryPointer(a)},
dedupSynthMouse:function(a){var b=N.lastTouches,c=a.changedTouches[0];
if(this.isPrimaryTouch(c)){
var d={x:c.clientX,y:c.clientY};b.push(d);var e=function(a,b){var c=a.indexOf(b);c>-1&&a.splice(c,1)}.bind(null,b,d);setTimeout(e,S)}}};M=new c(V.elementAdded,V.elementRemoved,V.elementChanged,V);var W,X,Y,Z=u.pointermap,$=window.MSPointerEvent&&"number"==typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE,_={events:["MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSGotPointerCapture","MSLostPointerCapture"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},POINTER_TYPES:["","unavailable","touch","pen","mouse"],prepareEvent:function(a){var b=a;return $&&(b=u.cloneEvent(a),b.pointerType=this.POINTER_TYPES[a.pointerType]),b},cleanup:function(a){Z["delete"](a)},MSPointerDown:function(a){Z.set(a.pointerId,a);var b=this.prepareEvent(a);u.down(b)},MSPointerMove:function(a){var b=this.prepareEvent(a);u.move(b)},MSPointerUp:function(a){var b=this.prepareEvent(a);u.up(b),this.cleanup(a.pointerId)},MSPointerOut:function(a){var b=this.prepareEvent(a);u.leaveOut(b)},MSPointerOver:function(a){var b=this.prepareEvent(a);u.enterOver(b)},MSPointerCancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.cleanup(a.pointerId)},MSLostPointerCapture:function(a){var b=u.makeEvent("lostpointercapture",a);u.dispatchEvent(b)},MSGotPointerCapture:function(a){var b=u.makeEvent("gotpointercapture",a);u.dispatchEvent(b)}},aa=window.navigator;aa.msPointerEnabled?(W=function(a){i(a),j(this),k(a)&&(u.setCapture(a,this,!0),this.msSetPointerCapture(a))},X=function(a){i(a),u.releaseCapture(a,!0),this.msReleasePointerCapture(a)}):(W=function(a){i(a),j(this),k(a)&&u.setCapture(a,this)},X=function(a){i(a),u.releaseCapture(a)}),Y=function(a){return!!u.captureInfo[a]},g(),h(),l();var ba={dispatcher:u,Installer:c,PointerEvent:a,PointerMap:p,targetFinding:v};return ba});
///////////////////////////////////////////////
///////////////////////////////////////////////
var config = {"dark_mode": false, "show_pads": true, "show_fabrication": false, "show_silkscreen": true, "highlight_pin1": "none", "redraw_on_drag": true, "board_rotation": 0.0, "checkboxes": "Sourced,Placed", "bom_view": "left-right", "layer_view": "FB", "offset_back_rotation": false, "kicad_text_formatting": true, "mark_when_checked": "", "fields": ["Value", "Footprint"]}
///////////////////////////////////////////////
///////////////////////////////////////////////
var pcbdata = JSON.parse(LZString.decompressFromBase64("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KVDc6VkFqCtei14rXJDfi13Q26dYV1vRWeDbXIxJjTqNwNgpI1DbWl2QBCDZYNm/WSsCu1j/XODf91lWWnDZYUYw3E8Jy1swBhDf9AkmXoVasNrQ2gcH8NsrXAjf0N7g2DdecNu2QNqOEVoQ33DeiN8JWxDaK1+I3RUESNjg2yDaCNxw20jdCNoq6gyLMN/A3PDcsNog3rDbi10rWSjZ61rg3gjYqNo8iO6SRWR5wajcYN0Q3YjYaNwo2/DfYN6Q3kjfp18o3dtaMNoq7+qKyNyI2cjYsN7w3llaGN2ABijdGN0o2UjfaNyY3bSO2YnSjBDbmN1Q3cje6VxY2SlcaNjrXbDZxVr/WdlZCNzo3QZqVItw2DjYWNjQ22tc9VnQ2LjdkNq42OjdkUMI23SPoN+Y2mDYrVpY3XNe0N842DVcuN/1Xrje2Nu2QfjfuN8w3/jdO1k43ljdWNuw35dbkNww2vjcm+yCjejY8NmI3mDcBN1g2EjZGN5E2wTaq1tE3JnI7pZxpEDf41h424TcK1zQ2gTYJN143QTfeN8E3PjfR7Sb7DaL2N92XqTf6N3E2ETfpNoo3CTbeNxtXUTYhNsk3eZA5NrE3Djcc1443xDdON4E3mjbWN1o2yjfkN3g2sDb24sClOTZH3P42eTYBNvk38TYFNxk3EteJNgw3RTcUN3mRVaM1NhoBtTfUN/I26Tf1N4Y3DTd91+w2RTdZNkmhJvqBI343uTZtNgY2fDZeNkE2jTeZNkk3TTb4NsGSh0ktNqI3HjdtN542SDYCN9Y3xjZVN9I31uNYE8M3rTbqNmU2Cjf5Nh03/TadNlE2Pja2Ntk2/QIDcFM2vTbTNp42JDaaN73WiTcDNk03XTZoN00sizclNyM2fTbxN3w2VjcFNpk3hTbzN+NWQzfUE4tXZja5N2E2dTfhN2U3ETfbNgM3OzZZN/M2zTdIUPs3izcHN703eTZHNzM22zcdNmQ2JzaDN102ezfsjCI2BzdqNnE3dTaXN+02VzezNtc3N9a7NgOW6zfy444iYTb3NvI3mzb1N1s2kTaFNs83Jze7NtU22Nh6Nqk35zdLNqM3yzbONhU2qzfXNms2pzcvNj82dza1Nks39zeHNjM2jzafNjs2XzY3Nqc2ezcdWXthGzZpNuI3lzbgt8c2ELeAt+NXLzctmcC2rTcgtu83FzZgtx82xzZzN403UjZAtx5dEMlQtr83bzaONss25TYZNk82xjYcNhM3Kjea0eSibzb6Nhc2DzbItv02ALefNto2Jjbwt2i3+hJ4t/s2ILe/NqC3aTejNmw3hLfgt0S3OLamN3pja0jQtoc35Lb/N+U3KzZEt5U3STenN/yiNLYYtvi2fzfvNw83yLdXN9i2XTaQttU21MHotvJWIzfQtwY3MLYot082VLae1v/WADY11pDXtddypKbXxLbNoG9Q3hEb15IBHZaW1gAcVtekt0wA1tZXV+pjNtefV2HWe9YvNzyxyjNCt5HXGLZ4iX82WLYNNti24zY4tyTXoNd/1obWy9ZG13y3FNfsAelWvtcCtk9WRSF6Y/JjcNcvVjTFHZbSbX43GTGwAWVoc1Zh18VXDddWyDoTjuMtN0aBKdZO17S3crazNpS3sLZUtoq3AtZH4fq2QmI24mK3hrdX10a2MLdgt9y2bLfPNt9XyVXKYmwSlrdblla2f1YEtu02rLfytpU2NjbEtuq2FSX8owa3J5eWt0aBVrdct9a3rLYKt1E2VddKtsPXXtYqtsbWqrcPVsA249cGI89mNaDCt0wAXZYKMKK24yDcN8G2G8jIVrvXkranNraAglb5awi2j9E6Vq6kR9YstlLBx9eeNqfWLiA9VmM2kjdetiZWZrcqlAOXEbZMCSulnddRtlaX0bcPlp43sbZx13G2KJuets63btYut1x93rdL1z631daelyq2pUAAANSr177X9da2NrdcHjGko9sKQbf/7Er1L0gAHLACS1cD1DFXosg5Abq2kreL1wbWubf/1r63ebZ+tqVBDZeql/63PjcnWSHjrpUcVvDXwrbgN2dWQ20It70UXzNQN/o30DZSt9Mao8jEMucTp3M0t/i3oLZOtoS29LeUt5U2SbbRNtUUQhAvS0+QPbfMt0i3vbYJtlo22bfjNtE2Xbb1U/VdCLectrS21rdOtya3KLerN6i23BqDthO2d+N4t7E2SLeOthS2KzdIN863Y7YhN+O3xeL2tuc2srZyweo3fTajtxU2Y7Y4twO288ATtjk4k7dTNuS3U7Z9t0u3m7dstuxXeWj1U4YRV5DDt7u2nrbTt322prYMtiE2c7bZ4ry8YreTtz22xrdHNl62y7Zbtiu2h7YZ4jQSx7cLtr23i7f/Nqe2M7aAtrO3Zurnt/UMdBN3tpi2crdXt1m29DfLtz43K7aLJ5QSr7elN5i3b7fTtjy2Z7aNttu2DSO3cxe2u7b3tle23LbXt/u2trc0Ec+3TrRft0y2C7evtzG3I7cUto+2v7fZtuO2t7ekokpTX7brt9M2EHZLt2M317YHts+3f7fQdr7BMHfSwbB2D7d0tvu377Y3tx+20HYNkV2WYHalNrB337ZAdu+3nTfAdxvjg7fodgBXGHabNiO2KHdYtz+3NrdfNzJW6HYy8Ue3eHZcthu3EHaod9h2RHfTGyB3xHc7t4i24Hf4dnS3BHaQd4R3ELcHt5EZznBjE/O2mHbIdlh2WbaEdom35HYgdoh31TekUUh31peMdye3ZHdzN8x38PDEdmg3PTdktoB2e7cbtwC2cLdPt5226He+mHh2nLcAd1R2i7fUdvK3THfwdjh3p+K4dkkpQ7ckdlO2J7d7tvB2wHacd0TxfPXrNkh34neXtzx2ZHeSd6h2CHYUdyx2gCUydoJ2VHbftm+3WHYidlJ3tHdEd3R3SFBNEmx2vDbsdpJ3Cbcid1J3X+K4d78hAneyNsp3mHYqdkx3NHbMdmp2/Hbqdq82JHdKd9x2Qnf3tsJ2JrcGdtp3hnYsdmrA9VIkjcZ2encmd8p34HYEd8J25neqd3C3anfSdlCj5ZAMdvh3QnfGt482qnfydqJ2OneWd+Hi3Hdrtox3+nfsdvJ25HYWd5x3RnaEyOJ2Jnfud2x3HnZad6O3LnfadmPiKIzBk/UTjnakdls2/nabtgF3XneidvVSPneUd9Z2+nc2dmZ3znZ2d6F29nZGdg52HjtWd/Y3EXYed5F2znawt4+2fHc2N7O3LHexdhF3vnaad352vHf0tlB3N7dGdjlZKXbMt8e3pHdwd1p3dnd8dxZ3gXeMt6x2snfDt052P7bRdl52MXc0EJ+2T0s+dtZ2qXfrtiF3aXb9tlB3ObYpV7m3y9cANyPWo1Zqtn7XWTfW8Oc6pbfN1iG2MrZituK3VbaL1yzW8qCYmzbxMrZZdhK34HcoVw+2HHaotvzXA9bS1xV3t1dLlivXkNaFt2q3a9ZiAbDWhAClt0OyCNcldr5Wd6B+V23WLNft1vCQMKV9dhjX+NYhV9nKNtZtd/9WEVaJ12k2UVef17I243ewYe13M7cV1teWA7Zdd4bW3XdVdhlXPXc1d/M3+kApk3gqYDe5VlzELdbattw2Ora6tsN2erdNdgmTJfN98bp3rLyGYB62jremdwl2NraGdig2A7dFNp5h2PDO8Km2DrZ7d1jWaXdydjl30Xa5dkfgdreQplG3J3Yjl6d2CXaFd7N2T7dJdq63pSWtLCd3u3bXdzw3mnbld6e2FXZKtzW2fLZ1trXX7AEqlv63hbZr1oLWhlLoIRawzbecV05iDNbuoozXPFdM1h23w3YwNy2W1axECOeFndca1hzWkXbUd/t3QHfndx13INeZ1z42EBkTIZAhrzZitsD3z9Yg9wV3KneFdxx2qteHd1k2gPYn/OaWOlYBl8F2Hzchd7x3PLYhNxD3CPfq13LXOlfQ9/F3IPc3d552cPYMNgt2yraLd762b3b1tybWy3bJd3DFPIq7Cat2m9beVzPWwzcAV4Fb4DWbdtW3W3Zj4rDF+1EhCJBXlcDNgR62dpYZtyfXj3Px1+0259aRVuhXF9fTdrt2RUBmgd/W53ZFdleXt9coN2uWIHfIxdLy/UDRCJT225fit9fDbTf514UVtPbv17jXH9f09rOWmFZmgSnW1cC3dkl2CVdUtlUhQqkvROz3QPaY1uwhVPZlwVz2QuXc9xFWH9b09m+WDPaG5DuljPbYd1j3zPe/liu37dFs9rsIHPaJl0+QE3YjtuL3MzZ09pL2PdbOpJfXDPf89kz3/nbM93N29FfY95V3yrevdoA37AHOV+92vXZo1y6WbrT9d5NWHZYDd4jWS1ZXkVKhyNePdxK2TXYjdp8k+vbetAb2AHczdmL2F9c915N3oFd09qr3EvcY1pb3MvYdd4L383YvdpV2tbZ5tzXWOvalQKNWDbYfd8A2ZtZDg+vXPcqnVs3Wr1Yt1g13LTaNd6T3pvYA9w3X4Azu9yL3jtd7d1N2k3fZdhr2svdg9x7WWveO9lV2uPbO9xgBPtb8AU2W+Pdm67+JoEl1dp2WIbYYdoJ3o7AvZKiQE3cdtrY2kffcHSL3SFf+9nJ2qFY89kXWvPZS9nz2T9b+9i53Gvf291LWqDe/of0l6Hez1veWxFfXdiO3bXfsACr2Afaf1qn2CZZp97D29vd4ViE2kfcFaQn32fcm9xN2ONcJ19b3KvZW96r3UvdlV2o3AvdEtkX3PjbF9o90JfaK95b3YVbF12X379d597z2JdYF9lX2WPeF9xnW0TbF90altfbMIXX2pFfK9sn359b19yn2TfaWlwX3VfbKN9X28feZ94YQB9bmVon2OfeOtrn3Z9ad9jb2Ffa29o7WzfdM9kH3gvat95n2hMiupJBXA/al9zn3AfaF1sP35fZd9xX3+ffd96P3gfYt9iz34/cHclXIY3ZP1lP2SveD99P3ufcz9o33Xfbvl6n38/ahdun3vfbcGpH2JI3998v3Jfcr9r22Q/dv1rb3Rdfr9r9WzLc99i63W/cR95n3vyFZ9sOXu/etdtP2ZfbW9w33B/Zz9t32H5ab9ij2vfct90X3J/e8QW32j3Z79uv3pFcX9zz3kvZX9hv3TfZH9832c3bj97f3B3JJKJP2A/dn95z3pff194/3yfdP9yP3G/cv9mP3C/Zy9jX3mfbCYMv22fZ194n2KfaP90n2B/bADz/2L/Y8N0f3xjfH90dWAA6xMPf2D5ef9+f3X/YgDlN3l/egDvP3v/YL96/3eFfB9q93TvbVdyNXS3ZFt6aX0knyEydXzbdBtvV2IrcpNhdXrdYfV9d3cfcoD6cAN41+9ql2NDb792Z24A8Kthn3irZD1j62Ifba9kgP+1YCthH2WldGpVDI33eB1j2WDNZ5sQ12nwjnoV1pjXe71rY3o0lkDlAP7fZwdjP3IA4/9lN2o/bwD5v3Y/Yk1wQPZrYCJbDBpKMvtx/2QA6D93v3q/dD9gwPNvaMDr/3YA6v97d2b/c+NrQPTrQXty02gFfsD1P2q/YX9zAO5fcP9nAO1/ZMDjf2x/a39nwOZA8Evau3k/af97K2X/dW9sIOl/agDtwOYA6fln/2CA7iDzQOEg4+EEp3gA7t90APDA98Nnn3sA+yD3AOPA7yDrwOEA80EXwPvtJttg62yg4cDiIOEvawDrIPwg+MDuoP8A4aDgoO3BuaD6AMdA/KD1wPKg9r96oPeg/cD3IOBg6C9xoOoyCKDsf0xg46D6YPONamDnoPDfb6DuYPTA9/9y63pA+sD4y3O3Zbliv25/ZCDjAP9A+6DioPtg9mDtRX5g7V9oYOAlYSDyyYSg5n9oIOD/fWDg32T/YmD24Ocg/uDvYP8g6L9iE3fA+5mIN3Tg5SD/QRbTd4DqoOtg5q9qIP+g8BDwYPgQ/iDo4O2NhOD0RWPg/ODxwPQg6uD8IP1g/hD5X3og7pd+AOng8ODuQxUFj5drv2sQ7QDi4P0g7xDzIObg8JDl3XEQ5iD0kOUQ62NitBdyIsjVYPgg5xDy4Oa/ZcDiP2ag4RD3YO2Q4cNxYOqsAHSPAT63dQ9toP9/exDzoPJg6FD7P3Ig6JD1kOSQ4lDskOgtelD14PWg7OD2kP+Q/pDwUPrg9+D5kOVFeJD+V32Q7/9zkPdQ95WDEOp5YND1IP0A+ND5wPTQ+FDmYP/g/q9pEOFg+1DubBpQ6zW/UPIQ4nsl0PwA4ZDn4OPQ7+D2oOxQ81D7/WDg51DqcjykF5Dz4Otg++D9/2zQ6V9lkOYw6tDrUOOQ7cGrkOzKN6NZMPFQ6+Dt/3nfYd9kUP1Q+zDs93rQ/jD/0PeyP/hIMOaQ+dDukOww5ND/EO4Q8zDi0ONQ5zDuMOQvYLDxIOHQ8CD9oO+Q6VDjYOVQ4rDz0Pow4BD8UO+w7RN3wPTtjeDiEPmw6hDtIO2w7dDjsOmQ67D5BXvQ9nDlJXJQ42waUPAOhxd5cORw5TDm4O0w/LD8BXeNe3Dj33PA99DvMPGpaPD4S0mw7PDksPUw7LD8P3VQ8rDrMOZw9jD/cO/Q6lD+Iip61fDhUPDQ7HDy8Ovw8nDqMPRQ7/D3sOAI8fDzTXpQ8hSJcPMQ7fD8CPSw4yDiMPvw6nD2CPdw//D/FWDw4RwZCPEV2LDjCOPw6wj9MPIw/NDncPdvaBDm0P8w+Qj0rIyI5bDo0P1w/7990OcI5gjqsO4I5rD3MOGI6fDvAkGSCpD0oOwI9YjiCPPw6z96COaI7vD+oOHw4EjpCOhI7BXFiPVw9DDx32Jw+vDvn3V/Z4j/CP4I8IjwCPDw6Ej2bUVI5DD1sP1I84j6SPbw/X9giPxNYMj4iOhI7i0EyPpCrUjroPNw4zD3P28I7oj5EOFI6aDhIOCaVAj1APxI8wj8MOqI64jmSPrI70j2yPEI4TDu0iF0js1p0PVI8w91yPGQ/cj7SPfw90jviO5w5BDvyOT6QCj3QOYQ82DrcOPI50jryP5I7rDqwO5DGqyJyPMKRcj5UOLI80j433z/enDjKPiXceD6KOlg6ODipghw/lDwKPEo7Yj8yO3I+ojqyPLQ8yjhCOfI46jyqPivDyj8YPIw8gjqSOGo6H9nYPeI9ajzf32o4qjrghnGnBDtCOxI76jiSPKI6vDtN3io/Sj0qO2o5/14QPL3e1t8QOzlfpV3XWrvYBth7h6rbT0aRRhPfCt2t2IbdlDlM3G3Y711gP/3adtvq323dN0A92RrZmjyy3yPZsjod2LA9Jtt9X5raYPIGPDrbWDxJ3T3ZWj+l3WTc8i8ox9JDut1d3eo9Mjvt3mPbkjyj3UY6XdwGOS1futnaOcY+AdgZ3+A7etw73XXfk1qH3I9cql26Oeve7FZKAiQuncl6PQbf01gjXGA7+ln93WnAxttgPsZe58DLkVc1aDvLXPDYx1tl27XfvD6a3IY9JN4WOkcDFnSL3xY4xtpj2sPapj4m25Y9FNlnancDV4uzWVY7ptmd2gfZ9DgmP8zZ1jurAlY/1j+j3YbbVjymOZY4MtogPLo78t+wBDZZjVqQPNBEUCjUIFPY/7B73uVYmJLqWjxRttyT3vo6l9wWP0xs9j8L2CvbmV5T3ivffDtT2nVZxtzT2tVYJ1ySOxw+ZDvz3V9YC9+2PYg4s9vD3RbecRSOPFPejjxz3dA7K95KPsI8sjo6OM44y92n2zA7sj294vY4xEIuOT9Zjjpz2go76VsuO6o8GjsKPMw+rjlT2To9Wj8aOjSXqxb2PIvdbj0uPr9fHD+qPDo7SjvuPT5A1j/SOi/cdjk73nY71tyQOKA8yVyjJC459j2gPpbdE9vePxPY8V+FapPZ+jlt2Zvf5ILeP8vebjgmXx45BjrG2E48ZtpOObznLj0KPK49nj94HM45aj5B3aw8s9ywOuyA54beOx45Lju+O4lcnjuaO0497jj+Oa46F9+iPyo67IN7B2RCjjluPgE4RjvnWwE9TjgkPIE/S9/uPa4/2DkL28tUbjiL27Ndvj1BPYvfQT/aOoI4Wjs/3MY+wT+ePs45/jry2RA+ID1ePGAEql8gPH3ZaxHEKmJ1PkDmOOpY/d7mOg4+Gl392KNdDyrsQw449j8BhFY6EEgIP7NYY9m/s0SFtjp538Y/9trWPPjaRWZXB4brFj62PclqNoI2PpY+UT9m2847cGlyypE/R9uj2SPZ0ThROko6UTh4Pv7fzjmsRdY5PD8LXtE4o13RON3fVj+hOW7eXjyH32vcj1vtXuvfdjuoz70o+2Z6PfY5E94Ch4DYKE53WmPIRdS8VY4/LysRPfo7x9+ilOmKOduUOEo/YANxPFE6nj7uO346ajzyPcE9gT3+OoY5o1lJPl1icTx0Pgw/kTngOnA44j3JOqE7VD46PCk+8juBOCKX0oqRRpo9cTqxP+o5fjg6Obw6Oj7sPqw+RjhhPRfYioktYKk+HDsmPqk+hD2pPTSg0jmeP8k5Kj5pOyo5C90Rh/GzSTmROMk+mTtcOBo5SjoaOBk9oj5ZPTo9aTtZOFraQyeKOqk86t7pO9o5CjvpOtI8WTppOYE5aT1ZP+CRCTzpPPDayTsyPek8oThZPh/Z7D0aPF46Hj5GDryN4kd5PXsM+TnpOu472TnuODk9kj2xOc47OjzdWmE6djvm2YfaZjwJOnyTpzJPXg7MG9l5XdsS6lhwQjNcLVzq2TfHPK0ROpvY0DtwbreTzITv2vQ8sTmpPcQ/bD6FO8k7+ToZPv4/4j1pPqU+5g2lPmo/pTmZPGU43D5lOGk5/DwZPlo/ZTrKONffu0S6k4Y5N1vlP3E7tjgxP4zaMTxH2pU4tj1aWaE5WlrkRwU+uTkn39E/hTh+3kk+S5V/UZU+lVrpOT3dnd/VOaHcNTi0hlYBNTrVO/+whTimObE5NjuxO2/dVTwYg7U/PKx1PdU8odzxOCndKT5LlRKU/V3z35Q/tTuy9vU8Rji1OXU5Rj61O8yCADrt3NU69TnVPI0+NjvcPAXd+TAQIMY5DT8OWw0/V0CNOpY99TxVOrU7dTwNPvIE9TuVPsk6Rj8VOrnYIpC4n5Agf95BOiZd2pbVPzU9TT8GOF3afJQhRFqVmVk/X2sF4KltO9E8LTy1P/U8iN6xAWAgbTm+OGAGKWs1PB040dheOYXZH3MdOKqWDTxtPp04+T5NOC07nTv1Odle8TsQOWE5AAelXLveZjhQh3LVjA0HGwk9ejo8lnvZ5T92XobdOgNA2kk+mlyiAvQPjTobluZL5egV397fU9s3AmbZRasGPIo+bVvN3VE/zN7XKX04nd99Pabamd+S3v0+3wJ+OFDD/TqtOtHcAz5r2aY8LdumPt9dRTqPWRJlj1nwOEE5e/OQPYDaHkZ2WV6FA9joJ95GqIqHXEk7Pjz72Oo5RwRbBpuWiTjGQ4Ws71/h2YM9dVg7xEM8Hd3OPgM7sV0IipE4sIq3WbVdzTnLBJY4pltjP9+zx1suFOM/md5DP8E4jyfjPHLczVpjPTU4lj+m2H4409yTPyiWkzzl2gU5fSBMiFM8It+GRmM8ozqM3xM9x1zVWtM6jTtNPl5d0zwtlu/2d1RTO71eUz4TP2AFEzsfX1M5/TuDP5UW0z+d3bM+KIgzPGM6Ezm2Oi7bMzqfXvM6sz9tPbM+YoJD2Zjde95zPgs6/TjzPYM80zqMkfM7M92zPcyICzwTOjPZUz1WOQs6Sz9jPvAjSzrL2os8rG97AGM+yz9cUXM5wANzPWtdCzrzOU47bTgDO1o67IfzPys/r4w134s5Yz/LPsdY0zizPUs4iz5rPbM4lAbv8BhUcz3wAjM9yzw2PNnfqzlLPws6azgFObM9aTpMj6M46zuLOgs+6zxLPes88zubPGs71T6NPktdsz+TP2s+TNyeXJs+qz/ISZs4KziTP+s/mz/bPrM9kzuO2+M5Oz8bPkgHOzhLPoM+uz8zO3VYGzhbPhk7613TOCINUNsbPDM66zkzOrs+2z5LPbs72zodODs4Bz1pOgc5izu43Os42z8HPWM6+zsLOYc63TotPHpcRTkvWjvavd56lMM4AAYSpAeH2N48tljZnd6FsYHhOL09Bt94yLdYjE8HWzVM6toPwRE+h1mT3z44pdXgA56CgYyL3gwKbTpNO1M8hzwrOtPedTh7PuM6ddxn2FCBOZkK3+c/C0WmGK056zifWds/6zmMh/08Wzx7Pd0849jDPdbcYAAAAldFOKc/4V8k6GBSlt/2PGc4qTwbUp07jld73KU+xlzLlE1ZvTnOWh9bbj3aOlVdmztXOsc+2d+dPZM+VTynOqnXKM53Op5ddz3QPHVZFzm7Ofs/Vz4rOqLbxzjW2Cc+1tonO9c6wz8nOOE8Bt0oq+xQF8KW3HHXeV0w2mFctJjpgWA/Mt8RPu6FKFR6tPmh5jpaXCNa5ehJ3444jz77ODhw1z/7Pcc531+D2pzbLz7RnTmki96vOP09ZdsTOMc68zhVPh07Rl3TOH5hkEJpHWg57zyDONnfRz+vOws6HzuHOW85C9sfPe+HAYSfPsE+nzjD2ts5VzqHOfs/NKGPPM7dHz6+YZBChEuUOp89I9urOB87mzhfOJc6Pz7Aid+DZV7vON84vz++O588Hz8XPIs9aTlfOd+GFgdfOcs83zxj3lc8Tj6/OP86Gzr/Pj8974Y/4/8/XFAAufnYhznfPRc4QaA/OT7bvziamd+BufJ/P/85fz7kRPc73zm/PP8+XziAud+AGYzAuYC+wL8POEC8jzxvPkC58d1AuU2B34PnO7NfPz2vP+87fzkAum8+rT8uXR8/vk8vPGC7Pz5/OWC/cztgvbs/wLsAvCC/vz6SjD45P15gvsncx1q/ORC9ALzXOWs8PoDvOOLzzz6QuBC9kLuvPKC4bzq1SaC64N7gvVC9OtJnO5lZkLz9PPs+ELvAvFC+bzkfOv854L9AvWSKQVswu+86ELnQv58+sLzguls+Xz+wuFQzVkUgvMcFgL6l34C+ALhQuOC6Qz5QupSFTMB/Ok1f4LrAvBC8vzywvqC8GzpQvDC40saIvOuKcLzQvzC49z+QurC7CLrjPUi6iLi+3K85bl5wuPHbkLxIu9C+SLmwuuC5Qz86OE855tpPPuPcYAUnOjc7Tz+iQQDHioLaBzc9xRRnOto89CFnPLcQfT6jO/o9QENMB/5AnTpaWBc5Tu+IvX87cLuDPo8+qLzwu/c54zk9XxNomL+XPOlebT8ovtC5CLqPPvc74D7dPai45t1DOOPfQzpovofZAAUnP14/aLisaMKJrzpq35A4p8PovCLehdG3OvsBiNkvO8qHM6MqgHi5kT6YvFc60L1gv5i5SzxYu/s+WLyXO4PelztvsRXqdSSYuW5YBL7YuoM5yLyouxc/yLmTOl49OL1r2dc4uLyPX9c9TwVPPrvdaYWNrn+ExoHovCNcdl/IBndetz1nOZVRx9x9OHc99iYgQ7An5zlBPRw5RLkEuvc9ELlIvW8+hLtbrmS7JLuzXQ85ATigu9i9G2A4vUXd9zzEv6i9pj0xWpUFxL0qXSc8JL+6PoHSy6ciR3WGBkXhOGc4htkwu8lbeL2ku3c/YAclO4bd6tlmPrxEfzKkBNi5WlpEu8043T4EuxS6FQMEv7s4IL/3O8FcTmKIa2DCtLwXOlc+3zh0u0S/0L/3W48+e17Evzi/3T/EuAk+NzqQgfHHIkJeByS47pSkurc/hW+vhT485zmjOFCD/rGMvzxSFLtkvzw/tLx+PQS4lLol2IS6AzqXOrPZH4RB5My7lMbMuivcNL5yOgC/zLrkuPC/CLoMvvLcTzsMv2E6JLnlU2ZADkLMvHi5eVwErLc8Its1p3i+x9612vi55VQRQirq8WSL3fpOi9kUvcC/FL7kuai68L10uB+ycQLo3py7s12cucE/ZLiovOS/2Lpcviy7qLpFOLo8aL/dPSc7djyMuFCG5gL1IaJr7Lv2Pei51L/ov9S6GLzvXxy/rNG8uUKPhLl3OFc5tLkTPhc/3Lxcumy4KL3kuyy+vLnnP6Jv6L27LrS4+zjku/S+Tjw8vmy+PL/HPZS+pV3RWSc9ANu6PWTcXATS9zUB6L54uny9eLwYu2c9DjhkvKc8jcro2t2S9LmYvSE9cL+Cvn4+ArjEuSy6hLsCvMCEn1Iq6qK6FL38uw84XLx0vCy4HdpivkK/jz1Cv7AAVLs5X9c8vL24vuZmAnVpwtS/3jnbkhy6TL23P2c6oz1MvRi5PwTcsPZvs9uZXhS5nT4IuGy4PLxiudM9Arv+PoHQ7hy4nWS5rLoXPTM9yLoCv0S+Mrk4uZS7QzuUv0K+Tz/XOIy6krt+8cCHPT3eOLc51LxMud6GTLzw3jS/fLwB8ylpKLl3Ocy4dTu0u6K4MruyuAy5SN5ivHtdNN8m2elNaD3Sv104Ar+ivp9fsr3zOhK+DL0QOcS/3TvtW2i87LuhEFVRUz3hOp23eVz9Bnda7To/sn1FIrkYuQM/nlNh6u+EEzlaXay5qj+su+s5+zhDOli6Qr4pPSTdpJrouVM7Oz6eWuq6yruKuhUH6r8EvBq9JNtjNRq+n9ibOMKUph+cvbK6FQfivoPfSzr/ORq/nSbSumA8flyaubK9RLzHBZq+dLsQvGE9PLnxOxK6U1vtWj04xT3/BNXQg9aE4pbb1ILqWSM6M1sjOdXAoz4KuOc4+99SuvZoTWgPgcPUqzzHALs/zTvMveq44zgauQK6Gr003n233dDkVAs5yziGuYq4SLwCuis9hrwSvvC/bxpGvFuBRrqrPrK/0r6Gusa7mruGvDLeuO/GuNAEJr8Gvia9nzzGv1PASrw7PwC/YB6mvvy9itsHPMq5OrxmupM+xrhyv5Y5yiR6tvpg5r97OfS4sL3mvLM/JrnGv5Y5d59mvaa+Mz7muSa9VzvfOtq4HjxKvwC+BrkF3Ra65rgdPla93zmGvpa4Fr7WO5a4I9aukwa8VrvWuGa+yru7PYc9vz8Auha5Br82uUc9Rr+mueq5Vrw2uLq55Lwgu2a7NrhukXa6Jr8Wu4K+mrpmv+a7yr7wuqa79rnWvUc6Vr62uQ675ro2vw68MtvGuo64VrqbPw0/RruYuba7Vro5PAy7sLxGvU64tr9OvbS6mr0mvQ68TrnavvC4MzJ2v/a/Wz12ug673L7OvEK4pr003q6+1rtOu0a9Lrj2uya69r5cutc6xLwqvQy5Jz3j2ry5+o0BgdvQxEFPb7y5E9givKS+fL4iuPi7/7EKuyK4gN0PY+xXlBVA1/i+4rhuvdi/jrhivcq8rr1cvjqN/oPsVJEKzTk/XES7dr30u965yr5mv4c8crk8uGi5ur88uHq9Hr6B0mJshafCvSZDnroivObANL9QP4bemluP4UWs/rriuti54rjav/S7Drw+vVi8A9mwYirunAaivAS93L3euy64Qroyuk6+1zoeu3K5BAZUvsK+jL0SRDqWnr8K2/K4TLxSvAq+Urpqu1K5AzjMvCG/PrgmWMq9zL2Ku0G/3ru+ul86Prh7gKy7obyyu5y9orjGvsq6dLu2uCC6urp+u2vdur+wBic5uLsqvApqnLsxHcU4fL2euSWN/rwdhXy5TLgGuQM/JtjJZ0q+3rvhus65vrwRvsc+Hz44uOG/rNbpC1+A/NJBu/y/Jj4OuWG9vr6BuSs/yr1suzy8wz/XPX66krmShe6A8NuSuKS4Ur6kulK7pLu83Qq4eclA3/QKQVxhudi6hr7uuoG4rrhxv4a61d7ZAQm57Thhuoq+RLxuv9G5zrp5PaC8cb5FPnG7crzCvj0/5emIBn8lpz3yv5K/J8PxuKG4CbhJOKU8Abh3PLpYkEnhudy6tr92uDa74r5uuca5Mbza9eHsab+JOS655rgRuMm6lLlsucm+frknPJK+kbgRXEmK7h4hv6c8fLn+vndZfLkivPi5Xr6ftK8TPiSxvyC94r6Jve66PLuJuQM/hhtORg8+gr70ugS+YbqJv0G4Pr2JuRG5Er+Uvzy9wbnDPy3ZmZCNIr8DkrxRv/RMtNxZvF67gd0Kut+Grs03RtG/Ab2YucC8gbi5u2G9sLvZvppfUbRliS0ivwMJudG+yLtJvbG4Mbn3Oji68L65vnK7Qr3XPmi6uL1Ig8G/Ld1U9JvporvKlSm7eb3UvBpc+brqufFearyFvRO15kIlu4W8Bb05v+G/Sb9puHK86bmOTO4eQbhluYK6Bb0UuWW4wbyuv0W7OLlyusW8uL4nPSq5VLyIuapA1LgjOFG+/rpRuFm4Xrrqvl6+pbgOXDpwtLo5vPQJOb2OuWm8QL1hv7G9jzkyuSk9Lz4xUdAc9LsBueW70ruOukW8Gb1Fv+66cr4VvMW/EbqVB9c6kbyVv0efZVuMvr1apLktWaS6Cr5ZvVW8pz6oAvQOWryKurK95brZvQW4Nbw/OjW+GrsEJLVZ6bylvyHcjb/VuYm8Nbh+uUK4xb0Svzy+/APFvs7Y4DvASOVbpzvePSW/nrv+vVG7+r1Sv1G/zbnnzl3TvLrevGW51b6+ubW9Zb8OuTG7YTccTpQABby1um24lrgZvW28FbrBuRW+dblouNADzbtYuNUA6EqyjiW/al7Uv5m4VtpVvhi+ob3vW2pV6Y6dvuW+1blwvmW5bbgVvYm/Zbuns128/Ni+v4W63bvRud28ub9NuhW5DL4duwy5Hr24ugCSTNnovHQEHLvxutjH9b6bP3y4fbztwqTFaD7cvem//L/pv+W4vbmNuIW83jiCvuGigr5OzeG9UzwDvz27Bb44ur28Hrm9uXG7kAcdvnbfdm3rii29Kb59v/K8Urt9vKG4FjlZv/SAw7skYIq6nlv9uuq9qzs9vzm9TbnZvBq5MbotsvQOigX9uFc//b1zOu69ab7ZuhG8urodunW7DL/4A0O7dL5n3tA1kr4tvSG98b31v/G9HL6puTS9k9h+YtK8Tbq+u+26A7+DuVy9gboTvz2aCCRTud68ibzjuo27TbkDvEO8Jz/dPHqXDVjV2368fIYHHJdilttonAB2JC1D2QJmaAE+PK25qb00uPQL0gAPh9Oi4Dq12M64ZTgUPBU4rj4VPcI6WTzJvjk9A7iVWTH2pr+hupi4sTq1uvk6hTwLvfk50r2LvQu8Hj2NvRTaBxiD0e2IAd2NC5vp07sj3VO8ezjLuPsYuw0NurTY0xPLu4u9xjjxOcc/Bbozu2y8wzvtXxm8lb3SNh6EWtmduHZeYuSJOMi/zzo4PnO/pLwNu8FZ91bUUOa5VJdcUgEhQb3Tu9W7AF5FvDi9q74xv1O/j1qHBpqoOrgmWi7Hjy7GO6y+bbmjuZu9tb+bu0W+K7pjWpqCUDmRP1u5QdCBvTq4IcX6TgO5QLr/Phu/kFYsm7NbO75ZQLu8lr3buB26ub0U2lsAXMoSlIvee7ibumG+3bnbvFUr27oxuDu+wrjBJju7K7sbuNu9e77KuQe4+7y9uvu8h7g+0/u8PdgHu446m7qguJ7MlMUHvF87q75HuCklcFNHvxu8277qvtu707q7vZu8lLu1vpS8frm5vXK+xb/Eu4fYebt83uqRPKL1uX28k7ypvpO/V0FVvl28wN7qlcEG07qrvlO7g76Nvbu/C71U2r2e6L6svoO+abinvpu+p7osv5q9477NuUO8E7gfsA6A4vZCkOu/7LvPmue5it4cvaS9571cOgm4OVSivBSBnL1jvjq/1rpXu8e/trqXu1y616TS9de6QViju4e5U7iXusm4zb4Sus29ubknPUO9Z7idvs0BlDr+vvW7LblRulm8Cbojv6JFlUDmT2co3bolvT2+Bby7u7G4M7yXv92+T0BPvNW8vriNuQW9o77jvva/q73Jume+wzw23y3aLujqn/gE573DuKm5FQd9vn/dCr2l0fxArQVbuYu/Db3RvU+7e75XuBK7ZbxbvWmBK9avv2+4RLlJv249Qbnbve++2rq5u1e4D75PPic48r6RuR9v3w3igSm9nbuZuFW4Xb8tvo+/R1qtv7c4UNiut9Ganrhtue27yzxXvse647wxv8e4W70svTK+3Y4xn2u6T75Buz+7F7yfuHe+Eb2fvGe7Fbgkvg+/TG68q05DREWVuZ6/lb95vmc+37r5uL9dc72T3/+6QYeM7u283b6bPrW7f7xHuQO5MbmAfig42bzbPX+8p79Pu6O4prz/vRW7xL4EBNe8Bt9rBueSAHkhuym59bo3upO7JT/6v9+4gNlqAFO7l7ppvoq447+3uUB8z7gfuOSJC1j9Owm7H7nLBIa7ObnAep+/Vrlmvfe4Kr4zuUO47LyVvvHRkrigfZm58b8pvue4b7gjul6/oH2puFDaJQZge5Q/Cb3zvYO+QH3dv0286buQeLK5YHtjvtk6QHkQf3+547geupB+TzvtWZB9RjzPoyrqTD+Rv8NdzZD6u00md1v0ZyM9qrt8vY+8r4QTB9QxFVp7v667Rz3VuL+4TrvAeOm+4H7nOCDSR40bv4VstrxAfIh90L8uuYh+Nr1GP+YzkopIed6BSH3fuDB5wH22ur+8d7havcnlyHv7vwh5g7u3uoh6lrzIek65Hdxj9Eh6qHwOuIh/P79Ifoh6L7vuuIi80iyoewh7aHmoerB+m7koeUW/27orvUY4yYfoe5Q/yH4uuAO9qHzof6h+6H3ZuFq+CHloeBh7prrAebG5270Ye5u7B7iYf8W4xEEIeV07W76oeX++2H4oebB+L7kd3bCXmWE4elpdmHi7OqO+77puujB8M7pof+P0EvUIeZh7OH1IeOh8xzzgefe/KHrO67h9aHzYf2h+wHkYerh56H0fPDkeOHsEeCh8gHhYeAR7eHyXvhq4Y2eEeNh8RH+Yfhh7qH37OGh8Fbr7vgSq+H+4eW5ceH2CvEW52H6EeVh6JH0jh1h5+HwYfzh8pHy4fAR4ML7Jvrq7Ebu5vzO/cb0XLCJDLT9wfwrd1aa9Wdg2d14NJRTqXb6tuHc53yKojoe8Hc32BNm4L7gu7qOVRHn3vOm/KCmUfu84xV3vOIm+EHpXud2NZHvOuJB6cb0Zv5+6cHqc36wwqkWTCFB5LbkAeyW9BcRdvclv57yUeFDYtHqojLS4tbhAf9B+RHhYvqR/o7uIeCxX6psZkj24Ybk9u2B6KHjgeVR7ZHo0eRm85H3ZWCsDKwCAAvgHEAONWLAAIACwB1dBAAfXPwZbAAAgBXgHul+ABXgBZ7shFXgAIALYB/H0YAYrA9gBQAPABPgFYAewAM5a+AGXBDPj5VvgBpbYEATq2/AEwAHCBMACRAIA1vHzCAG7AQAEvyNTXqx7jV1AAMcELsq4vddch7ZtWF++SwYax6gCuLwdXn0iuL0A2SMFKAK4vSEUmsZeXic69lD0xZx9xbth6Nx9JzqvXkQGPHgTvCgEKkHFvSEUFAc8evZUFVHcfc25q4gywDx+SwKsvHx+SwekBjx4NtldMdx7Hbjqhzx8HVu8qcW4NtqeuDx9ANv13IjBxb1DXw+Cgn11vksEuMTMevZX+wxcfme/nHq8f8S9Q1iilMx7JzzsQNx/xL3XXG8Hwn/8eOAB30HCefx7In/EvQDbgyHCfSEWFsOCesJ7XsTMfTx9t0TMfB1czsVCeg+87pF8fMx7+tk71m1f1z0A3osB4nw3O3x8Rm+oABJ5/HtpqJJ4PT1DXU8A3H+lWq9ahQBSfddZr4KCf6Vb+tukAFJ4Nt4Ox1J8HV7qqZJ77V1DW59CgnxwfPx/En3cUo9d11vMxTJ7+tggRTJ/Ynnif7q+SwGMxTJ9ANmvvTJ9IRaEAnJ69lBvXTJ/L70uwoJ8sV5LA0WpknthPksC6wIKeKpdUn0KfLJ7vdkKeDJ7inlTXksGknpKeDbZpOmSf1XZCniKQQACjVpSfaKVynnXXksHdH5eWo1b+tsieJteKnhqrCp4NtpQwoJ6jV0hETA0XHqNXkJ54n0zusJ4snlIAQAENlwdX/Bu6nryemJ9djiKeFIhknz7Xip5ynw2Wq9ZprqCf9bZCn6qeQDeKnlblRp9Un2uzRp80nnifYfZCn53ReZe2AAgBrAFsAeHBxKOaAIUgwck6trkRJgDtl2HXQADh98uXI1cepeABic8KwUxWxAEql+AAypcjVsqXw1fgASNXw1bKl86pCVaaVwDOfgAAAUWKwSNXiADKllABbgHhl+AAZADQAR7Bvp/qQPAA8AHgAfm37pdTHvYBhRQWADGNy5denw4B6ZZeniqW3p4+nr6efp7+nhUBCVZNl8uXYQGBn+lXisBpn+lX4AHEMMgBYZ8JoH4B4Ze8fPYBvp/e4eoJ4Z5jQZGf4AHOVsIAIAEhnpwAIAFMVhYB6AnLl8NW4AAsASNWUAGIACwBvp5QALoB7pbKlvph9p5cAYrAZZ9KweWfFZ+5niABYZ4qANABmSGRnwlWEW3LlgAA/YrAiAH1zs4AVGR9AVGeGmAsAPpgsZ7EAJLBpZ8jV2GeBZ4AAOXOV7WfZZ71nybADZ/gAaq2KgDNnhYAXulun+6f6VZVnyy9Xp/enz6fvp9+n/6eFgFxbz2fvZ5Rnv2eA591nhWfg58jV97hQ59NnvAAAZ8Bn7qek54AALXOV+ABHqRGAR6l/+wrn/XPYZ/hnkYBvp8RAM2exAENlyufq59rn+ufG5+bnlEA258NGAWe0Z4qwHx8QuTTnnGfSp69nmQBfZ/9nsQAdZ7lnvOelZ4Lnw2ew578ACOexAAE7q2ev5ZBnwNAa58OAcQBtgBVVorA056pn5eWu56+nquea57rnhuem57hnwefI1fbnkufO5+7nm+e+5/vnlueh55IwEef0Z/HngGepZ53H9wAiACZnkYA0AG/AeAAAAHkIAENn4Ge8x8svcGeiAHOVsAB3uHzHsBeIF7ID9xBf57HnzGenADenn4A6Z7Tni2fSp8Dn5eflZ9VnpYB1Z81ntgAF59IX/WfV56NnvwATZ/Dnkue0549n5eWKpbKl/PsRgGJz6W3VLHpn2mf4AE4X7hfeF8coOH2054u4amfaZ4EXxmeU1D4AeABvwCpAdmeLAE5nwlXc2/Ll4nPgF9AX8Be/ACgXmBf4ADgX44AwZ+IAZBfUF6WABRedF8RnrBeUZ9HnjGfguXwXwhexAFMINGWo1czn+ABs59oX3Of6F8Ln9efN58YACzny5eEX5CxRF/4XsQAGZ6EXrhfgl74X3NvsZ/Pn5tW7p/gAPtXrAGKwBOeSZ+Tn8mf6AmxnwBfm1cvn76ee54oAeufI1fOV//sAAGkB54oABReO55h9pOeil5rngpf/+yKX0pfyl6sX70BsF7sXieenF/YX5tXXF9nnrOf558YAReeg55Xnnxfi57UXyRegF6IAEBefQBNnipfEF+MXogBIZ+hnpWe4Z40AKxekQDaX/+fsZ6jn6ee3F48XgZe6F/znkZeWF8JV6EA0ZetnsQB9c8jVgABJN6eoZ+2AQuWFgABANGWgl6pAEJenx8YAcJeXl54X6JfxF7EAQkA0ZYSX/XOCACgAfoAzcFSXmpeU54pnx5fWSHLl3Jfal8epepfGl7KXh+eKl5GAKpfy59Jn/JfCl+KX5Ff4Z9mXm2kNl9wXk5e4l4xXvJe6l+xXppeUV8qXl+fql8xX8leGl5xX5pfMF9aXmxe/56JXx5fsl5AABJfYQHZIMFeiZ8Tn0mfIV8yXv5fiF+bVn2e7Z4dnmQAD55QX4+e+mCVn2AA7l8LlsQBbZ/tn3EBHZ8epQ+fZV9Pnv5eul+lQMqX6Vf/7CgB/+wAAQWKwYnO+1ZuXn4B9V8NXk1eTl/GX5tWGZ5kXpmeN2gUXwdFlF9UXx5ftl/iX4nOzgCTQCgBjV/DVlJfIF6uX3heQQCJn4XATZ6eAAWen56cgPxeQAGRANGW+wD6YRXXic9hnwJh4AGmsHsAOZ5uAA2emJGYXx1ABZ6FntbBRZ/Fn45WFgHXANGWix8zHtNeEZ8zX91ec19Xn2zZmF6yAQtfhZ5LXiWexACGgAFfic+QMn0BtZ7KlsqXIF8jVvhf4AGwgNABf0GjX4Jk416hARNfRgGTXs1ea154ADNfBNHrXrmfG14gwfNeN55RnoteRZ+cAUtfKZ5JXpNeU18XX5deQQFXX3NeN17E2Vtfi173XjtfGAApn8uXUiG2AYrB75/TXutfs17XXnmeEGGbXvgBr193XsWe71/jX0VeQAAaIIgBj15X0U9es15UXhtev175ATde/1/bXstfO191Xp9eX15PX99foN8/XiAAm17sIBDfb16Q3+9f7V5A3vwBn14uX9DeV14/XymevV5AAI9eF14g3jDfOZ4vXuDer1+3Xttf8N8JVkjBZ15GAedexAFTX+jeKN8w3pjeyAHg31jeb14A3gjeQAEVANGXUN7I3/jez14/XpjemF9w30Tf/1/3XyWep5+bVuaU0N7k3qDfGN/XX6EAf17w38TeON5hX5eXjV6tXmsABAFeV26PB1/DV6W2oUG6l+ABw1c8fRBeMY0lnklf6VbKl9TIOBSDXkNeA8p4AcNf8wEjXgkBo17MAuNe8JvLl2jfeN/I3+TfBN/034TeWN8FntjfjN8ln4DfQN/A3t9eBN7032DeEt5KiIze1N7EAXclH15I37TfMt9i37LfsN+/X5Tekt7E3grfGAEhRSLe514y32test5g3yrfmN7y3lTfEN4436jeZAFI3g3OYt903trecN7NgfLfAN+iwNGWtN9k3sreht6w3kbeW16639jeFgHLYxrfuN+a3pdeGN+G3y9fOt5q31Tfxt4034je/ADA3ujeZt/PX+LeRN9237rflt9M35tWot5aLwbezt5y3i7ed16u3sQAwaC43njf7t503x7f2t9y3gtfFt5S3t7fOV5k3gbfvt4U3/TelN9G3gHe6t5AAenRVt8+3q4uHt/B3p7fEt5e3pbe3t5Q370Bjt+i3sHe4t5R3nbe0d8B3xgBOQGk3krfpt5a38rebgHNn3reyd9B307fKN4WARvBSd/636tfcd4q3+bff1+h3wDexBS4Lr4ALAHullgAHp7tl+L2H7EjVxmfHqWJzpKIypZ+Af/tw1f1zwlWRYDRlz6evLBSX8NWVd8Z3m7fiN5Z319eKd9m3xTfDN653iTel0GZ30rfdd9XXhXfgd6x39bfIN5+3vNfUd+S3mHfLQBN38neNt9a3ubeqt6h3y7f0d8YASUAPt+t3zbf3d463/7evd6J3kAAhAFJ3o7f/d7d3oTfnt4d37nead+13pHe8d/a3yHeFt5D3mHfHUGd3unezd+R3lPeDd/T3wDfzUABX8zeP6TIAOmeXp+DX0NeNt9oANAB7tFC32NfWF7EARkBJt8bwAAAdPphvQEQAPgAzgENX/m26N+QsUderUHN3hYB6QAj37Hevt/p35Pe7d4J3uPey17cfIJ9yXVkn4qeyJ8UnkKerx5ujiKfOp+bVjSfip+d0GSfGVbfHpye7J+rGwyfHJ7cn4qeRp8snvtWvJ4ynpKfUNdinrqfwp4xVpaekp5innif4p6nTxKfH9+Snp7h396ql5LBb966nrKep05ynvKeQp4KnqNXddZKn7peD1fnHjcfKp/3keA/I1dqn1afLJ4an4qfG9EKn1qeZp96npEx+p4inwaevZUGp0ae5J4mnqaev95yX2qf5p/cnl/eup8NllaeNp/WnmafDx86t7afK5fwpKceEJ6YnuceYJGPH5ce8D+Jztcfqp8kblyfWJ93HhCecp9JzoseQPQPH08fhD4vHjgArx+uLt8fuD/ZVB8fZx/eXgUwoJ6VLwoBMD+JzqvWvx8XH4nOfx70PkifO0EAn+ceBD/ubrNxzx4gnvffLJ9JzmCeH94En0hFEJ4krlyecp7QnimHiJ6wngqf8S4MP6qeCJ/nHwI+SJ8r0ASfrD6AScI/qJ7wP/Eu6J5P3yyf8S/nHpif9c5Yn/Cf2J9Yn/Ev2J9Snrqf3K5cnywRMx6EnwA+BJ911y+wZJ9cblyfsj+33nSf7D66noye3x+cPqPWDD633qyeXJ8v32o+fx4oPqPXfJ4aPoyevJ8qPpXWzO/nHxGb15fcfdwAlZ8THsrB6pbcfAgBUABRnvMeHpb8fE4BvZTf4UYAuUCAAAA"))
///////////////////////////////////////////////
///////////////////////////////////////////////
/* Utility functions */
var storagePrefix = 'KiCad_HTML_BOM__' + pcbdata.metadata.title + '__' +
pcbdata.metadata.revision + '__#';
var storage;
function initStorage(key) {
try {
window.localStorage.getItem("blank");
storage = window.localStorage;
} catch (e) {
// localStorage not available
}
if (!storage) {
try {
window.sessionStorage.getItem("blank");
storage = window.sessionStorage;
} catch (e) {
// sessionStorage also not available
}
}
}
function readStorage(key) {
if (storage) {
return storage.getItem(storagePrefix + key);
} else {
return null;
}
}
function writeStorage(key, value) {
if (storage) {
storage.setItem(storagePrefix + key, value);
}
}
function fancyDblClickHandler(el, onsingle, ondouble) {
return function () {
if (el.getAttribute("data-dblclick") == null) {
el.setAttribute("data-dblclick", 1);
setTimeout(function () {
if (el.getAttribute("data-dblclick") == 1) {
onsingle();
}
el.removeAttribute("data-dblclick");
}, 200);
} else {
el.removeAttribute("data-dblclick");
ondouble();
}
}
}
function smoothScrollToRow(rowid) {
document.getElementById(rowid).scrollIntoView({
behavior: "smooth",
block: "center",
inline: "nearest"
});
}
function focusInputField(input) {
input.scrollIntoView(false);
input.focus();
input.select();
}
function saveBomTable(output) {
var text = '';
for (var node of bomhead.childNodes[0].childNodes) {
if (node.firstChild) {
var name = node.firstChild.nodeValue ?? "";
text += (output == 'csv' ? `"${name}"` : name);
}
if (node != bomhead.childNodes[0].lastChild) {
text += (output == 'csv' ? ',' : '\t');
}
}
text += '\n';
for (var row of bombody.childNodes) {
for (var cell of row.childNodes) {
let val = '';
for (var node of cell.childNodes) {
if (node.nodeName == "INPUT") {
if (node.checked) {
val += '✓';
}
} else if ((node.nodeName == "MARK") || (node.nodeName == "A")) {
val += node.firstChild.nodeValue;
} else {
val += node.nodeValue;
}
}
if (output == 'csv') {
val = val.replace(/\"/g, '\"\"'); // pair of double-quote characters
if (isNumeric(val)) {
val = +val; // use number
} else {
val = `"${val}"`; // enclosed within double-quote
}
}
text += val;
if (cell != row.lastChild) {
text += (output == 'csv' ? ',' : '\t');
}
}
text += '\n';
}
if (output != 'clipboard') {
// To file: csv or txt
var blob = new Blob([text], {
type: `text/${output}`
});
saveFile(`${pcbdata.metadata.title}.${output}`, blob);
} else {
// To clipboard
var textArea = document.createElement("textarea");
textArea.classList.add('clipboard-temp');
textArea.value = text;
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
try {
if (document.execCommand('copy')) {
console.log('Bom copied to clipboard.');
}
} catch (err) {
console.log('Can not copy to clipboard.');
}
document.body.removeChild(textArea);
}
}
function isNumeric(str) {
/* https://stackoverflow.com/a/175787 */
return (typeof str != "string" ? false : !isNaN(str) && !isNaN(parseFloat(str)));
}
function removeGutterNode(node) {
for (var i = 0; i < node.childNodes.length; i++) {
if (node.childNodes[i].classList &&
node.childNodes[i].classList.contains("gutter")) {
node.removeChild(node.childNodes[i]);
break;
}
}
}
function cleanGutters() {
removeGutterNode(document.getElementById("bot"));
removeGutterNode(document.getElementById("canvasdiv"));
}
var units = {
prefixes: {
giga: ["G", "g", "giga", "Giga", "GIGA"],
mega: ["M", "mega", "Mega", "MEGA"],
kilo: ["K", "k", "kilo", "Kilo", "KILO"],
milli: ["m", "milli", "Milli", "MILLI"],
micro: ["U", "u", "micro", "Micro", "MICRO", "μ", "µ"], // different utf8 μ
nano: ["N", "n", "nano", "Nano", "NANO"],
pico: ["P", "p", "pico", "Pico", "PICO"],
},
unitsShort: ["R", "r", "Ω", "F", "f", "H", "h"],
unitsLong: [
"OHM", "Ohm", "ohm", "ohms",
"FARAD", "Farad", "farad",
"HENRY", "Henry", "henry"
],
getMultiplier: function (s) {
if (this.prefixes.giga.includes(s)) return 1e9;
if (this.prefixes.mega.includes(s)) return 1e6;
if (this.prefixes.kilo.includes(s)) return 1e3;
if (this.prefixes.milli.includes(s)) return 1e-3;
if (this.prefixes.micro.includes(s)) return 1e-6;
if (this.prefixes.nano.includes(s)) return 1e-9;
if (this.prefixes.pico.includes(s)) return 1e-12;
return 1;
},
valueRegex: null,
valueAltRegex: null,
}
function initUtils() {
var allPrefixes = units.prefixes.giga
.concat(units.prefixes.mega)
.concat(units.prefixes.kilo)
.concat(units.prefixes.milli)
.concat(units.prefixes.micro)
.concat(units.prefixes.nano)
.concat(units.prefixes.pico);
var allUnits = units.unitsShort.concat(units.unitsLong);
units.valueRegex = new RegExp("^([0-9\.]+)" +
"\\s*(" + allPrefixes.join("|") + ")?" +
"(" + allUnits.join("|") + ")?" +
"(\\b.*)?$", "");
units.valueAltRegex = new RegExp("^([0-9]*)" +
"(" + units.unitsShort.join("|") + ")?" +
"([GgMmKkUuNnPp])?" +
"([0-9]*)" +
"(\\b.*)?$", "");
if (config.fields.includes("Value")) {
var index = config.fields.indexOf("Value");
pcbdata.bom["parsedValues"] = {};
var allList = getBomListByLayer('FB').flat();
for (var id in pcbdata.bom.fields) {
var ref_key = allList.find(item => item[1] == Number(id)) || [];
pcbdata.bom.parsedValues[id] = parseValue(pcbdata.bom.fields[id][index], ref_key[0] || '');
}
}
}
function parseValue(val, ref) {
var inferUnit = (unit, ref) => {
if (unit) {
unit = unit.toLowerCase();
if (unit == 'Ω' || unit == "ohm" || unit == "ohms") {
unit = 'r';
}
return unit[0];
}
var resarr = /^([a-z]+)\d+$/i.exec(ref);
switch (Array.isArray(resarr) && resarr[1].toLowerCase()) {
case "c": return 'f';
case "l": return 'h';
case "r":
case "rv": return 'r';
}
return null;
};
val = val.replace(/,/g, "");
var match = units.valueRegex.exec(val);
if (Array.isArray(match)) {
var unit = inferUnit(match[3], ref);
var val_i = parseFloat(match[1]);
if (!unit) return null;
if (match[2]) {
val_i = val_i * units.getMultiplier(match[2]);
}
return {
val: val_i,
unit: unit,
extra: match[4],
}
}
match = units.valueAltRegex.exec(val);
if (Array.isArray(match) && (match[1] || match[4])) {
var unit = inferUnit(match[2], ref);
var val_i = parseFloat(match[1] + "." + match[4]);
if (!unit) return null;
if (match[3]) {
val_i = val_i * units.getMultiplier(match[3]);
}
return {
val: val_i,
unit: unit,
extra: match[5],
}
}
return null;
}
function valueCompare(a, b, stra, strb) {
if (a === null && b === null) {
// Failed to parse both values, compare them as strings.
if (stra != strb) return stra > strb ? 1 : -1;
else return 0;
} else if (a === null) {
return 1;
} else if (b === null) {
return -1;
} else {
if (a.unit != b.unit) return a.unit > b.unit ? 1 : -1;
else if (a.val != b.val) return a.val > b.val ? 1 : -1;
else if (a.extra != b.extra) return a.extra > b.extra ? 1 : -1;
else return 0;
}
}
function validateSaveImgDimension(element) {
var valid = false;
var intValue = 0;
if (/^[1-9]\d*$/.test(element.value)) {
intValue = parseInt(element.value);
if (intValue <= 16000) {
valid = true;
}
}
if (valid) {
element.classList.remove("invalid");
} else {
element.classList.add("invalid");
}
return intValue;
}
function saveImage(layer) {
var width = validateSaveImgDimension(document.getElementById("render-save-width"));
var height = validateSaveImgDimension(document.getElementById("render-save-height"));
var bgcolor = null;
if (!document.getElementById("render-save-transparent").checked) {
var style = getComputedStyle(topmostdiv);
bgcolor = style.getPropertyValue("background-color");
}
if (!width || !height) return;
// Prepare image
var canvas = document.createElement("canvas");
var layerdict = {
transform: {
x: 0,
y: 0,
s: 1,
panx: 0,
pany: 0,
zoom: 1,
},
bg: canvas,
fab: canvas,
silk: canvas,
highlight: canvas,
layer: layer,
}
// Do the rendering
recalcLayerScale(layerdict, width, height);
prepareLayer(layerdict);
clearCanvas(canvas, bgcolor);
drawBackground(layerdict, false);
drawHighlightsOnLayer(layerdict, false);
// Save image
var imgdata = canvas.toDataURL("image/png");
var filename = pcbdata.metadata.title;
if (pcbdata.metadata.revision) {
filename += `.${pcbdata.metadata.revision}`;
}
filename += `.${layer}.png`;
saveFile(filename, dataURLtoBlob(imgdata));
}
function saveSettings() {
var data = {
type: "InteractiveHtmlBom settings",
version: 1,
pcbmetadata: pcbdata.metadata,
settings: settings,
}
var blob = new Blob([JSON.stringify(data, null, 4)], {
type: "application/json"
});
saveFile(`${pcbdata.metadata.title}.settings.json`, blob);
}
function loadSettings() {
var input = document.createElement("input");
input.type = "file";
input.accept = ".settings.json";
input.onchange = function (e) {
var file = e.target.files[0];
var reader = new FileReader();
reader.onload = readerEvent => {
var content = readerEvent.target.result;
var newSettings;
try {
newSettings = JSON.parse(content);
} catch (e) {
alert("Selected file is not InteractiveHtmlBom settings file.");
return;
}
if (newSettings.type != "InteractiveHtmlBom settings") {
alert("Selected file is not InteractiveHtmlBom settings file.");
return;
}
var metadataMatches = newSettings.hasOwnProperty("pcbmetadata");
if (metadataMatches) {
for (var k in pcbdata.metadata) {
if (!newSettings.pcbmetadata.hasOwnProperty(k) || newSettings.pcbmetadata[k] != pcbdata.metadata[k]) {
metadataMatches = false;
}
}
}
if (!metadataMatches) {
var currentMetadata = JSON.stringify(pcbdata.metadata, null, 4);
var fileMetadata = JSON.stringify(newSettings.pcbmetadata, null, 4);
if (!confirm(
`Settins file metadata does not match current metadata.\n\n` +
`Page metadata:\n${currentMetadata}\n\n` +
`Settings file metadata:\n${fileMetadata}\n\n` +
`Press OK if you would like to import settings anyway.`)) {
return;
}
}
overwriteSettings(newSettings.settings);
}
reader.readAsText(file, 'UTF-8');
}
input.click();
}
function resetSettings() {
if (!confirm(
`This will reset all checkbox states and other settings.\n\n` +
`Press OK if you want to continue.`)) {
return;
}
if (storage) {
var keys = [];
for (var i = 0; i < storage.length; i++) {
var key = storage.key(i);
if (key.startsWith(storagePrefix)) keys.push(key);
}
for (var key of keys) storage.removeItem(key);
}
location.reload();
}
function overwriteSettings(newSettings) {
initDone = false;
Object.assign(settings, newSettings);
writeStorage("bomlayout", settings.bomlayout);
writeStorage("bommode", settings.bommode);
writeStorage("canvaslayout", settings.canvaslayout);
writeStorage("bomCheckboxes", settings.checkboxes.join(","));
document.getElementById("bomCheckboxes").value = settings.checkboxes.join(",");
for (var checkbox of settings.checkboxes) {
writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
}
writeStorage("markWhenChecked", settings.markWhenChecked);
padsVisible(settings.renderPads);
document.getElementById("padsCheckbox").checked = settings.renderPads;
fabricationVisible(settings.renderFabrication);
document.getElementById("fabricationCheckbox").checked = settings.renderFabrication;
silkscreenVisible(settings.renderSilkscreen);
document.getElementById("silkscreenCheckbox").checked = settings.renderSilkscreen;
referencesVisible(settings.renderReferences);
document.getElementById("referencesCheckbox").checked = settings.renderReferences;
valuesVisible(settings.renderValues);
document.getElementById("valuesCheckbox").checked = settings.renderValues;
tracksVisible(settings.renderTracks);
document.getElementById("tracksCheckbox").checked = settings.renderTracks;
zonesVisible(settings.renderZones);
document.getElementById("zonesCheckbox").checked = settings.renderZones;
dnpOutline(settings.renderDnpOutline);
document.getElementById("dnpOutlineCheckbox").checked = settings.renderDnpOutline;
setRedrawOnDrag(settings.redrawOnDrag);
document.getElementById("dragCheckbox").checked = settings.redrawOnDrag;
setHighlightRowOnClick(settings.highlightRowOnClick);
document.getElementById("highlightRowOnClickCheckbox").checked = settings.highlightRowOnClick;
setDarkMode(settings.darkMode);
document.getElementById("darkmodeCheckbox").checked = settings.darkMode;
setHighlightPin1(settings.highlightpin1);
document.forms.highlightpin1.highlightpin1.value = settings.highlightpin1;
writeStorage("boardRotation", settings.boardRotation);
document.getElementById("boardRotation").value = settings.boardRotation / 5;
document.getElementById("rotationDegree").textContent = settings.boardRotation;
setOffsetBackRotation(settings.offsetBackRotation);
document.getElementById("offsetBackRotationCheckbox").checked = settings.offsetBackRotation;
initDone = true;
prepCheckboxes();
changeBomLayout(settings.bomlayout);
}
function saveFile(filename, blob) {
var link = document.createElement("a");
var objurl = URL.createObjectURL(blob);
link.download = filename;
link.href = objurl;
link.click();
}
function dataURLtoBlob(dataurl) {
var arr = dataurl.split(','),
mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]),
n = bstr.length,
u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], {
type: mime
});
}
var settings = {
canvaslayout: "FB",
bomlayout: "left-right",
bommode: "grouped",
checkboxes: [],
checkboxStoredRefs: {},
darkMode: false,
highlightpin1: "none",
redrawOnDrag: true,
boardRotation: 0,
offsetBackRotation: false,
renderPads: true,
renderReferences: true,
renderValues: true,
renderSilkscreen: true,
renderFabrication: true,
renderDnpOutline: false,
renderTracks: true,
renderZones: true,
columnOrder: [],
hiddenColumns: [],
netColors: {},
}
function initDefaults() {
settings.bomlayout = readStorage("bomlayout");
if (settings.bomlayout === null) {
settings.bomlayout = config.bom_view;
}
if (!['bom-only', 'left-right', 'top-bottom'].includes(settings.bomlayout)) {
settings.bomlayout = config.bom_view;
}
settings.bommode = readStorage("bommode");
if (settings.bommode === null) {
settings.bommode = "grouped";
}
if (settings.bommode == "netlist" && !pcbdata.nets) {
settings.bommode = "grouped";
}
if (!["grouped", "ungrouped", "netlist"].includes(settings.bommode)) {
settings.bommode = "grouped";
}
settings.canvaslayout = readStorage("canvaslayout");
if (settings.canvaslayout === null) {
settings.canvaslayout = config.layer_view;
}
var bomCheckboxes = readStorage("bomCheckboxes");
if (bomCheckboxes === null) {
bomCheckboxes = config.checkboxes;
}
settings.checkboxes = bomCheckboxes.split(",").filter((e) => e);
document.getElementById("bomCheckboxes").value = bomCheckboxes;
var highlightpin1 = readStorage("highlightpin1") || config.highlight_pin1;
if (highlightpin1 === "false") highlightpin1 = "none";
if (highlightpin1 === "true") highlightpin1 = "all";
setHighlightPin1(highlightpin1);
document.forms.highlightpin1.highlightpin1.value = highlightpin1;
settings.markWhenChecked = readStorage("markWhenChecked");
if (settings.markWhenChecked == null) {
settings.markWhenChecked = config.mark_when_checked;
}
populateMarkWhenCheckedOptions();
function initBooleanSetting(storageString, def, elementId, func) {
var b = readStorage(storageString);
if (b === null) {
b = def;
} else {
b = (b == "true");
}
document.getElementById(elementId).checked = b;
func(b);
}
initBooleanSetting("padsVisible", config.show_pads, "padsCheckbox", padsVisible);
initBooleanSetting("fabricationVisible", config.show_fabrication, "fabricationCheckbox", fabricationVisible);
initBooleanSetting("silkscreenVisible", config.show_silkscreen, "silkscreenCheckbox", silkscreenVisible);
initBooleanSetting("referencesVisible", true, "referencesCheckbox", referencesVisible);
initBooleanSetting("valuesVisible", true, "valuesCheckbox", valuesVisible);
if ("tracks" in pcbdata) {
initBooleanSetting("tracksVisible", true, "tracksCheckbox", tracksVisible);
initBooleanSetting("zonesVisible", true, "zonesCheckbox", zonesVisible);
} else {
document.getElementById("tracksAndZonesCheckboxes").style.display = "none";
tracksVisible(false);
zonesVisible(false);
}
initBooleanSetting("dnpOutline", false, "dnpOutlineCheckbox", dnpOutline);
initBooleanSetting("redrawOnDrag", config.redraw_on_drag, "dragCheckbox", setRedrawOnDrag);
initBooleanSetting("highlightRowOnClick", false, "highlightRowOnClickCheckbox", setHighlightRowOnClick);
initBooleanSetting("darkmode", config.dark_mode, "darkmodeCheckbox", setDarkMode);
var fields = ["checkboxes", "References"].concat(config.fields).concat(["Quantity"]);
var hcols = JSON.parse(readStorage("hiddenColumns"));
if (hcols === null) {
hcols = [];
}
settings.hiddenColumns = hcols.filter(e => fields.includes(e));
var cord = JSON.parse(readStorage("columnOrder"));
if (cord === null) {
cord = fields;
} else {
cord = cord.filter(e => fields.includes(e));
if (cord.length != fields.length)
cord = fields;
}
settings.columnOrder = cord;
settings.boardRotation = readStorage("boardRotation");
if (settings.boardRotation === null) {
settings.boardRotation = config.board_rotation * 5;
} else {
settings.boardRotation = parseInt(settings.boardRotation);
}
document.getElementById("boardRotation").value = settings.boardRotation / 5;
document.getElementById("rotationDegree").textContent = settings.boardRotation;
initBooleanSetting("offsetBackRotation", config.offset_back_rotation, "offsetBackRotationCheckbox", setOffsetBackRotation);
settings.netColors = JSON.parse(readStorage("netColors")) || {};
}
// Helper classes for user js callbacks.
const IBOM_EVENT_TYPES = {
ALL: "all",
HIGHLIGHT_EVENT: "highlightEvent",
CHECKBOX_CHANGE_EVENT: "checkboxChangeEvent",
BOM_BODY_CHANGE_EVENT: "bomBodyChangeEvent",
}
const EventHandler = {
callbacks: {},
init: function () {
for (eventType of Object.values(IBOM_EVENT_TYPES))
this.callbacks[eventType] = [];
},
registerCallback: function (eventType, callback) {
this.callbacks[eventType].push(callback);
},
emitEvent: function (eventType, eventArgs) {
event = {
eventType: eventType,
args: eventArgs,
}
var callback;
for (callback of this.callbacks[eventType])
callback(event);
for (callback of this.callbacks[IBOM_EVENT_TYPES.ALL])
callback(event);
}
}
EventHandler.init();
///////////////////////////////////////////////
///////////////////////////////////////////////
/* PCB rendering code */
var emptyContext2d = document.createElement("canvas").getContext("2d");
function deg2rad(deg) {
return deg * Math.PI / 180;
}
function calcFontPoint(linepoint, text, offsetx, offsety, tilt) {
var point = [
linepoint[0] * text.width + offsetx,
linepoint[1] * text.height + offsety
];
// This approximates pcbnew behavior with how text tilts depending on horizontal justification
point[0] -= (linepoint[1] + 0.5 * (1 + text.justify[0])) * text.height * tilt;
return point;
}
function drawText(ctx, text, color) {
if ("ref" in text && !settings.renderReferences) return;
if ("val" in text && !settings.renderValues) return;
ctx.save();
ctx.fillStyle = color;
ctx.strokeStyle = color;
ctx.lineCap = "round";
ctx.lineJoin = "round";
if ("svgpath" in text) {
if ("thickness" in text) {
ctx.lineWidth = text.thickness;
ctx.stroke(new Path2D(text.svgpath));
} else if ("fillrule" in text) {
ctx.fill(new Path2D(text.svgpath), text.fillrule);
}
ctx.restore();
return;
}
ctx.lineWidth = text.thickness;
if ("polygons" in text) {
ctx.fill(getPolygonsPath(text));
ctx.restore();
return;
}
ctx.translate(...text.pos);
ctx.translate(text.thickness * 0.5, 0);
var angle = -text.angle;
if (text.attr.includes("mirrored")) {
ctx.scale(-1, 1);
angle = -angle;
}
var tilt = 0;
if (text.attr.includes("italic")) {
tilt = 0.125;
}
var interline = text.height * 1.5 + text.thickness;
var txt = text.text.split("\n");
// KiCad ignores last empty line.
if (txt[txt.length - 1] == '') txt.pop();
ctx.rotate(deg2rad(angle));
var offsety = (1 - text.justify[1]) / 2 * text.height; // One line offset
offsety -= (txt.length - 1) * (text.justify[1] + 1) / 2 * interline; // Multiline offset
for (var i in txt) {
var lineWidth = text.thickness + interline / 2 * tilt;
for (var j = 0; j < txt[i].length; j++) {
if (txt[i][j] == '\t') {
var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
lineWidth += fourSpaces - lineWidth % fourSpaces;
} else {
if (txt[i][j] == '~') {
j++;
if (j == txt[i].length)
break;
}
lineWidth += pcbdata.font_data[txt[i][j]].w * text.width;
}
}
var offsetx = -lineWidth * (text.justify[0] + 1) / 2;
var inOverbar = false;
for (var j = 0; j < txt[i].length; j++) {
if (config.kicad_text_formatting) {
if (txt[i][j] == '\t') {
var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
offsetx += fourSpaces - offsetx % fourSpaces;
continue;
} else if (txt[i][j] == '~') {
j++;
if (j == txt[i].length)
break;
if (txt[i][j] != '~') {
inOverbar = !inOverbar;
}
}
}
var glyph = pcbdata.font_data[txt[i][j]];
if (inOverbar) {
var overbarStart = [offsetx, -text.height * 1.4 + offsety];
var overbarEnd = [offsetx + text.width * glyph.w, overbarStart[1]];
if (!lastHadOverbar) {
overbarStart[0] += text.height * 1.4 * tilt;
lastHadOverbar = true;
}
ctx.beginPath();
ctx.moveTo(...overbarStart);
ctx.lineTo(...overbarEnd);
ctx.stroke();
} else {
lastHadOverbar = false;
}
for (var line of glyph.l) {
ctx.beginPath();
ctx.moveTo(...calcFontPoint(line[0], text, offsetx, offsety, tilt));
for (var k = 1; k < line.length; k++) {
ctx.lineTo(...calcFontPoint(line[k], text, offsetx, offsety, tilt));
}
ctx.stroke();
}
offsetx += glyph.w * text.width;
}
offsety += interline;
}
ctx.restore();
}
function drawedge(ctx, scalefactor, edge, color) {
ctx.strokeStyle = color;
ctx.fillStyle = color;
ctx.lineWidth = Math.max(1 / scalefactor, edge.width);
ctx.lineCap = "round";
ctx.lineJoin = "round";
if ("svgpath" in edge) {
ctx.stroke(new Path2D(edge.svgpath));
} else {
ctx.beginPath();
if (edge.type == "segment") {
ctx.moveTo(...edge.start);
ctx.lineTo(...edge.end);
}
if (edge.type == "rect") {
ctx.moveTo(...edge.start);
ctx.lineTo(edge.start[0], edge.end[1]);
ctx.lineTo(...edge.end);
ctx.lineTo(edge.end[0], edge.start[1]);
ctx.lineTo(...edge.start);
}
if (edge.type == "arc") {
ctx.arc(
...edge.start,
edge.radius,
deg2rad(edge.startangle),
deg2rad(edge.endangle));
}
if (edge.type == "circle") {
ctx.arc(
...edge.start,
edge.radius,
0, 2 * Math.PI);
ctx.closePath();
}
if (edge.type == "curve") {
ctx.moveTo(...edge.start);
ctx.bezierCurveTo(...edge.cpa, ...edge.cpb, ...edge.end);
}
if("filled" in edge && edge.filled)
ctx.fill();
else
ctx.stroke();
}
}
function getChamferedRectPath(size, radius, chamfpos, chamfratio) {
// chamfpos is a bitmask, left = 1, right = 2, bottom left = 4, bottom right = 8
var path = new Path2D();
var width = size[0];
var height = size[1];
var x = width * -0.5;
var y = height * -0.5;
var chamfOffset = Math.min(width, height) * chamfratio;
path.moveTo(x, 0);
if (chamfpos & 4) {
path.lineTo(x, y + height - chamfOffset);
path.lineTo(x + chamfOffset, y + height);
path.lineTo(0, y + height);
} else {
path.arcTo(x, y + height, x + width, y + height, radius);
}
if (chamfpos & 8) {
path.lineTo(x + width - chamfOffset, y + height);
path.lineTo(x + width, y + height - chamfOffset);
path.lineTo(x + width, 0);
} else {
path.arcTo(x + width, y + height, x + width, y, radius);
}
if (chamfpos & 2) {
path.lineTo(x + width, y + chamfOffset);
path.lineTo(x + width - chamfOffset, y);
path.lineTo(0, y);
} else {
path.arcTo(x + width, y, x, y, radius);
}
if (chamfpos & 1) {
path.lineTo(x + chamfOffset, y);
path.lineTo(x, y + chamfOffset);
path.lineTo(x, 0);
} else {
path.arcTo(x, y, x, y + height, radius);
}
path.closePath();
return path;
}
function getOblongPath(size) {
return getChamferedRectPath(size, Math.min(size[0], size[1]) / 2, 0, 0);
}
function getPolygonsPath(shape) {
if (shape.path2d) {
return shape.path2d;
}
if ("svgpath" in shape) {
shape.path2d = new Path2D(shape.svgpath);
} else {
var path = new Path2D();
for (var polygon of shape.polygons) {
path.moveTo(...polygon[0]);
for (var i = 1; i < polygon.length; i++) {
path.lineTo(...polygon[i]);
}
path.closePath();
}
shape.path2d = path;
}
return shape.path2d;
}
function drawPolygonShape(ctx, scalefactor, shape, color) {
ctx.save();
if (!("svgpath" in shape)) {
ctx.translate(...shape.pos);
ctx.rotate(deg2rad(-shape.angle));
}
if("filled" in shape && !shape.filled) {
ctx.strokeStyle = color;
ctx.lineWidth = Math.max(1 / scalefactor, shape.width);
ctx.lineCap = "round";
ctx.lineJoin = "round";
ctx.stroke(getPolygonsPath(shape));
} else {
ctx.fillStyle = color;
ctx.fill(getPolygonsPath(shape));
}
ctx.restore();
}
function drawDrawing(ctx, scalefactor, drawing, color) {
if (["segment", "arc", "circle", "curve", "rect"].includes(drawing.type)) {
drawedge(ctx, scalefactor, drawing, color);
} else if (drawing.type == "polygon") {
drawPolygonShape(ctx, scalefactor, drawing, color);
} else {
drawText(ctx, drawing, color);
}
}
function getCirclePath(radius) {
var path = new Path2D();
path.arc(0, 0, radius, 0, 2 * Math.PI);
path.closePath();
return path;
}
function getCachedPadPath(pad) {
if (!pad.path2d) {
// if path2d is not set, build one and cache it on pad object
if (pad.shape == "rect") {
pad.path2d = new Path2D();
pad.path2d.rect(...pad.size.map(c => -c * 0.5), ...pad.size);
} else if (pad.shape == "oval") {
pad.path2d = getOblongPath(pad.size);
} else if (pad.shape == "circle") {
pad.path2d = getCirclePath(pad.size[0] / 2);
} else if (pad.shape == "roundrect") {
pad.path2d = getChamferedRectPath(pad.size, pad.radius, 0, 0);
} else if (pad.shape == "chamfrect") {
pad.path2d = getChamferedRectPath(pad.size, pad.radius, pad.chamfpos, pad.chamfratio)
} else if (pad.shape == "custom") {
pad.path2d = getPolygonsPath(pad);
}
}
return pad.path2d;
}
function drawPad(ctx, pad, color, outline) {
ctx.save();
ctx.translate(...pad.pos);
ctx.rotate(-deg2rad(pad.angle));
if (pad.offset) {
ctx.translate(...pad.offset);
}
ctx.fillStyle = color;
ctx.strokeStyle = color;
var path = getCachedPadPath(pad);
if (outline) {
ctx.stroke(path);
} else {
ctx.fill(path);
}
ctx.restore();
}
function drawPadHole(ctx, pad, padHoleColor) {
if (pad.type != "th") return;
ctx.save();
ctx.translate(...pad.pos);
ctx.rotate(-deg2rad(pad.angle));
ctx.fillStyle = padHoleColor;
if (pad.drillshape == "oblong") {
ctx.fill(getOblongPath(pad.drillsize));
} else if (pad.drillshape == "rect") {
ctx.fill(getChamferedRectPath(pad.drillsize, 0, 0, 0));
} else {
ctx.fill(getCirclePath(pad.drillsize[0] / 2));
}
ctx.restore();
}
function drawFootprint(ctx, layer, scalefactor, footprint, colors, highlight, outline) {
if (highlight) {
// draw bounding box
if (footprint.layer == layer) {
ctx.save();
ctx.globalAlpha = 0.2;
ctx.translate(...footprint.bbox.pos);
ctx.rotate(deg2rad(-footprint.bbox.angle));
ctx.translate(...footprint.bbox.relpos);
ctx.fillStyle = colors.pad;
ctx.fillRect(0, 0, ...footprint.bbox.size);
ctx.globalAlpha = 1;
ctx.strokeStyle = colors.pad;
ctx.lineWidth = 3 / scalefactor;
ctx.strokeRect(0, 0, ...footprint.bbox.size);
ctx.restore();
}
}
// draw drawings
for (var drawing of footprint.drawings) {
if (drawing.layer == layer) {
drawDrawing(ctx, scalefactor, drawing.drawing, colors.pad);
}
}
ctx.lineWidth = 3 / scalefactor;
// draw pads
if (settings.renderPads) {
for (var pad of footprint.pads) {
if (pad.layers.includes(layer)) {
drawPad(ctx, pad, colors.pad, outline);
if (pad.pin1 &&
(settings.highlightpin1 == "all" ||
settings.highlightpin1 == "selected" && highlight)) {
drawPad(ctx, pad, colors.outline, true);
}
}
}
for (var pad of footprint.pads) {
drawPadHole(ctx, pad, colors.padHole);
}
}
}
function drawEdgeCuts(canvas, scalefactor) {
var ctx = canvas.getContext("2d");
var edgecolor = getComputedStyle(topmostdiv).getPropertyValue('--pcb-edge-color');
for (var edge of pcbdata.edges) {
drawDrawing(ctx, scalefactor, edge, edgecolor);
}
}
function drawFootprints(canvas, layer, scalefactor, highlight) {
var ctx = canvas.getContext("2d");
ctx.lineWidth = 3 / scalefactor;
var style = getComputedStyle(topmostdiv);
var colors = {
pad: style.getPropertyValue('--pad-color'),
padHole: style.getPropertyValue('--pad-hole-color'),
outline: style.getPropertyValue('--pin1-outline-color'),
}
for (var i = 0; i < pcbdata.footprints.length; i++) {
var mod = pcbdata.footprints[i];
var outline = settings.renderDnpOutline && pcbdata.bom.skipped.includes(i);
var h = highlightedFootprints.includes(i);
var d = markedFootprints.has(i);
if (highlight) {
if(h && d) {
colors.pad = style.getPropertyValue('--pad-color-highlight-both');
colors.outline = style.getPropertyValue('--pin1-outline-color-highlight-both');
} else if (h) {
colors.pad = style.getPropertyValue('--pad-color-highlight');
colors.outline = style.getPropertyValue('--pin1-outline-color-highlight');
} else if (d) {
colors.pad = style.getPropertyValue('--pad-color-highlight-marked');
colors.outline = style.getPropertyValue('--pin1-outline-color-highlight-marked');
}
}
if( h || d || !highlight) {
drawFootprint(ctx, layer, scalefactor, mod, colors, highlight, outline);
}
}
}
function drawBgLayer(layername, canvas, layer, scalefactor, edgeColor, polygonColor, textColor) {
var ctx = canvas.getContext("2d");
for (var d of pcbdata.drawings[layername][layer]) {
if (["segment", "arc", "circle", "curve", "rect"].includes(d.type)) {
drawedge(ctx, scalefactor, d, edgeColor);
} else if (d.type == "polygon") {
drawPolygonShape(ctx, scalefactor, d, polygonColor);
} else {
drawText(ctx, d, textColor);
}
}
}
function drawTracks(canvas, layer, defaultColor, highlight) {
ctx = canvas.getContext("2d");
ctx.lineCap = "round";
var hasHole = (track) => (
'drillsize' in track &&
track.start[0] == track.end[0] &&
track.start[1] == track.end[1]);
// First draw tracks and tented vias
for (var track of pcbdata.tracks[layer]) {
if (highlight && highlightedNet != track.net) continue;
if (!hasHole(track)) {
ctx.strokeStyle = highlight ? defaultColor : settings.netColors[track.net] || defaultColor;
ctx.lineWidth = track.width;
ctx.beginPath();
if ('radius' in track) {
ctx.arc(
...track.center,
track.radius,
deg2rad(track.startangle),
deg2rad(track.endangle));
} else {
ctx.moveTo(...track.start);
ctx.lineTo(...track.end);
}
ctx.stroke();
}
}
// Second pass to draw untented vias
var style = getComputedStyle(topmostdiv);
var holeColor = style.getPropertyValue('--pad-hole-color')
for (var track of pcbdata.tracks[layer]) {
if (highlight && highlightedNet != track.net) continue;
if (hasHole(track)) {
ctx.strokeStyle = highlight ? defaultColor : settings.netColors[track.net] || defaultColor;
ctx.lineWidth = track.width;
ctx.beginPath();
ctx.moveTo(...track.start);
ctx.lineTo(...track.end);
ctx.stroke();
ctx.strokeStyle = holeColor;
ctx.lineWidth = track.drillsize;
ctx.lineTo(...track.end);
ctx.stroke();
}
}
}
function drawZones(canvas, layer, defaultColor, highlight) {
ctx = canvas.getContext("2d");
ctx.lineJoin = "round";
for (var zone of pcbdata.zones[layer]) {
if (highlight && highlightedNet != zone.net) continue;
ctx.strokeStyle = highlight ? defaultColor : settings.netColors[zone.net] || defaultColor;
ctx.fillStyle = highlight ? defaultColor : settings.netColors[zone.net] || defaultColor;
if (!zone.path2d) {
zone.path2d = getPolygonsPath(zone);
}
ctx.fill(zone.path2d, zone.fillrule || "nonzero");
if (zone.width > 0) {
ctx.lineWidth = zone.width;
ctx.stroke(zone.path2d);
}
}
}
function clearCanvas(canvas, color = null) {
var ctx = canvas.getContext("2d");
ctx.save();
ctx.setTransform(1, 0, 0, 1, 0, 0);
if (color) {
ctx.fillStyle = color;
ctx.fillRect(0, 0, canvas.width, canvas.height);
} else {
if (!window.matchMedia("print").matches)
ctx.clearRect(0, 0, canvas.width, canvas.height);
}
ctx.restore();
}
function drawNets(canvas, layer, highlight) {
var style = getComputedStyle(topmostdiv);
if (settings.renderZones) {
var zoneColor = style.getPropertyValue(highlight ? '--zone-color-highlight' : '--zone-color');
drawZones(canvas, layer, zoneColor, highlight);
}
if (settings.renderTracks) {
var trackColor = style.getPropertyValue(highlight ? '--track-color-highlight' : '--track-color');
drawTracks(canvas, layer, trackColor, highlight);
}
if (highlight && settings.renderPads) {
var padColor = style.getPropertyValue('--pad-color-highlight');
var padHoleColor = style.getPropertyValue('--pad-hole-color');
var ctx = canvas.getContext("2d");
for (var footprint of pcbdata.footprints) {
// draw pads
var padDrawn = false;
for (var pad of footprint.pads) {
if (highlightedNet != pad.net) continue;
if (pad.layers.includes(layer)) {
drawPad(ctx, pad, padColor, false);
padDrawn = true;
}
}
if (padDrawn) {
// redraw all pad holes because some pads may overlap
for (var pad of footprint.pads) {
drawPadHole(ctx, pad, padHoleColor);
}
}
}
}
}
function drawHighlightsOnLayer(canvasdict, clear = true) {
if (clear) {
clearCanvas(canvasdict.highlight);
}
if (markedFootprints.size > 0 || highlightedFootprints.length > 0) {
drawFootprints(canvasdict.highlight, canvasdict.layer,
canvasdict.transform.s * canvasdict.transform.zoom, true);
}
if (highlightedNet !== null) {
drawNets(canvasdict.highlight, canvasdict.layer, true);
}
}
function drawHighlights() {
drawHighlightsOnLayer(allcanvas.front);
drawHighlightsOnLayer(allcanvas.back);
}
function drawBackground(canvasdict, clear = true) {
if (clear) {
clearCanvas(canvasdict.bg);
clearCanvas(canvasdict.fab);
clearCanvas(canvasdict.silk);
}
drawNets(canvasdict.bg, canvasdict.layer, false);
drawFootprints(canvasdict.bg, canvasdict.layer,
canvasdict.transform.s * canvasdict.transform.zoom, false);
drawEdgeCuts(canvasdict.bg, canvasdict.transform.s * canvasdict.transform.zoom);
var style = getComputedStyle(topmostdiv);
var edgeColor = style.getPropertyValue('--silkscreen-edge-color');
var polygonColor = style.getPropertyValue('--silkscreen-polygon-color');
var textColor = style.getPropertyValue('--silkscreen-text-color');
if (settings.renderSilkscreen) {
drawBgLayer(
"silkscreen", canvasdict.silk, canvasdict.layer,
canvasdict.transform.s * canvasdict.transform.zoom,
edgeColor, polygonColor, textColor);
}
edgeColor = style.getPropertyValue('--fabrication-edge-color');
polygonColor = style.getPropertyValue('--fabrication-polygon-color');
textColor = style.getPropertyValue('--fabrication-text-color');
if (settings.renderFabrication) {
drawBgLayer(
"fabrication", canvasdict.fab, canvasdict.layer,
canvasdict.transform.s * canvasdict.transform.zoom,
edgeColor, polygonColor, textColor);
}
}
function prepareCanvas(canvas, flip, transform) {
var ctx = canvas.getContext("2d");
ctx.setTransform(1, 0, 0, 1, 0, 0);
ctx.scale(transform.zoom, transform.zoom);
ctx.translate(transform.panx, transform.pany);
if (flip) {
ctx.scale(-1, 1);
}
ctx.translate(transform.x, transform.y);
ctx.rotate(deg2rad(settings.boardRotation + (flip && settings.offsetBackRotation ? - 180 : 0)));
ctx.scale(transform.s, transform.s);
}
function prepareLayer(canvasdict) {
var flip = (canvasdict.layer === "B");
for (var c of ["bg", "fab", "silk", "highlight"]) {
prepareCanvas(canvasdict[c], flip, canvasdict.transform);
}
}
function rotateVector(v, angle) {
angle = deg2rad(angle);
return [
v[0] * Math.cos(angle) - v[1] * Math.sin(angle),
v[0] * Math.sin(angle) + v[1] * Math.cos(angle)
];
}
function applyRotation(bbox, flip) {
var corners = [
[bbox.minx, bbox.miny],
[bbox.minx, bbox.maxy],
[bbox.maxx, bbox.miny],
[bbox.maxx, bbox.maxy],
];
corners = corners.map((v) => rotateVector(v, settings.boardRotation + (flip && settings.offsetBackRotation ? - 180 : 0)));
return {
minx: corners.reduce((a, v) => Math.min(a, v[0]), Infinity),
miny: corners.reduce((a, v) => Math.min(a, v[1]), Infinity),
maxx: corners.reduce((a, v) => Math.max(a, v[0]), -Infinity),
maxy: corners.reduce((a, v) => Math.max(a, v[1]), -Infinity),
}
}
function recalcLayerScale(layerdict, width, height) {
var flip = (layerdict.layer === "B");
var bbox = applyRotation(pcbdata.edges_bbox, flip);
var scalefactor = 0.98 * Math.min(
width / (bbox.maxx - bbox.minx),
height / (bbox.maxy - bbox.miny)
);
if (scalefactor < 0.1) {
scalefactor = 1;
}
layerdict.transform.s = scalefactor;
if (flip) {
layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor + width) * 0.5;
} else {
layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor - width) * 0.5;
}
layerdict.transform.y = -((bbox.maxy + bbox.miny) * scalefactor - height) * 0.5;
for (var c of ["bg", "fab", "silk", "highlight"]) {
canvas = layerdict[c];
canvas.width = width;
canvas.height = height;
canvas.style.width = (width / devicePixelRatio) + "px";
canvas.style.height = (height / devicePixelRatio) + "px";
}
}
function redrawCanvas(layerdict) {
prepareLayer(layerdict);
drawBackground(layerdict);
drawHighlightsOnLayer(layerdict);
}
function resizeCanvas(layerdict) {
var canvasdivid = {
"F": "frontcanvas",
"B": "backcanvas"
} [layerdict.layer];
var width = document.getElementById(canvasdivid).clientWidth * devicePixelRatio;
var height = document.getElementById(canvasdivid).clientHeight * devicePixelRatio;
recalcLayerScale(layerdict, width, height);
redrawCanvas(layerdict);
}
function resizeAll() {
resizeCanvas(allcanvas.front);
resizeCanvas(allcanvas.back);
}
function pointWithinDistanceToSegment(x, y, x1, y1, x2, y2, d) {
var A = x - x1;
var B = y - y1;
var C = x2 - x1;
var D = y2 - y1;
var dot = A * C + B * D;
var len_sq = C * C + D * D;
var dx, dy;
if (len_sq == 0) {
// start and end of the segment coincide
dx = x - x1;
dy = y - y1;
} else {
var param = dot / len_sq;
var xx, yy;
if (param < 0) {
xx = x1;
yy = y1;
} else if (param > 1) {
xx = x2;
yy = y2;
} else {
xx = x1 + param * C;
yy = y1 + param * D;
}
dx = x - xx;
dy = y - yy;
}
return dx * dx + dy * dy <= d * d;
}
function modulo(n, mod) {
return ((n % mod) + mod) % mod;
}
function pointWithinDistanceToArc(x, y, xc, yc, radius, startangle, endangle, d) {
var dx = x - xc;
var dy = y - yc;
var r_sq = dx * dx + dy * dy;
var rmin = Math.max(0, radius - d);
var rmax = radius + d;
if (r_sq < rmin * rmin || r_sq > rmax * rmax)
return false;
var angle1 = modulo(deg2rad(startangle), 2 * Math.PI);
var dx1 = xc + radius * Math.cos(angle1) - x;
var dy1 = yc + radius * Math.sin(angle1) - y;
if (dx1 * dx1 + dy1 * dy1 <= d * d)
return true;
var angle2 = modulo(deg2rad(endangle), 2 * Math.PI);
var dx2 = xc + radius * Math.cos(angle2) - x;
var dy2 = yc + radius * Math.sin(angle2) - y;
if (dx2 * dx2 + dy2 * dy2 <= d * d)
return true;
var angle = modulo(Math.atan2(dy, dx), 2 * Math.PI);
if (angle1 > angle2)
return (angle >= angle2 || angle <= angle1);
else
return (angle >= angle1 && angle <= angle2);
}
function pointWithinPad(x, y, pad) {
var v = [x - pad.pos[0], y - pad.pos[1]];
v = rotateVector(v, pad.angle);
if (pad.offset) {
v[0] -= pad.offset[0];
v[1] -= pad.offset[1];
}
return emptyContext2d.isPointInPath(getCachedPadPath(pad), ...v);
}
function netHitScan(layer, x, y) {
// Check track segments
if (settings.renderTracks && pcbdata.tracks) {
for (var track of pcbdata.tracks[layer]) {
if ('radius' in track) {
if (pointWithinDistanceToArc(x, y, ...track.center, track.radius, track.startangle, track.endangle, track.width / 2)) {
return track.net;
}
} else {
if (pointWithinDistanceToSegment(x, y, ...track.start, ...track.end, track.width / 2)) {
return track.net;
}
}
}
}
// Check pads
if (settings.renderPads) {
for (var footprint of pcbdata.footprints) {
for (var pad of footprint.pads) {
if (pad.layers.includes(layer) && pointWithinPad(x, y, pad)) {
return pad.net;
}
}
}
}
return null;
}
function pointWithinFootprintBbox(x, y, bbox) {
var v = [x - bbox.pos[0], y - bbox.pos[1]];
v = rotateVector(v, bbox.angle);
return bbox.relpos[0] <= v[0] && v[0] <= bbox.relpos[0] + bbox.size[0] &&
bbox.relpos[1] <= v[1] && v[1] <= bbox.relpos[1] + bbox.size[1];
}
function bboxHitScan(layer, x, y) {
var result = [];
for (var i = 0; i < pcbdata.footprints.length; i++) {
var footprint = pcbdata.footprints[i];
if (footprint.layer == layer) {
if (pointWithinFootprintBbox(x, y, footprint.bbox)) {
result.push(i);
}
}
}
return result;
}
function handlePointerDown(e, layerdict) {
if (e.button != 0 && e.button != 1) {
return;
}
e.preventDefault();
e.stopPropagation();
if (!e.hasOwnProperty("offsetX")) {
// The polyfill doesn't set this properly
e.offsetX = e.pageX - e.currentTarget.offsetLeft;
e.offsetY = e.pageY - e.currentTarget.offsetTop;
}
layerdict.pointerStates[e.pointerId] = {
distanceTravelled: 0,
lastX: e.offsetX,
lastY: e.offsetY,
downTime: Date.now(),
};
}
function handleMouseClick(e, layerdict) {
if (!e.hasOwnProperty("offsetX")) {
// The polyfill doesn't set this properly
e.offsetX = e.pageX - e.currentTarget.offsetLeft;
e.offsetY = e.pageY - e.currentTarget.offsetTop;
}
var x = e.offsetX;
var y = e.offsetY;
var t = layerdict.transform;
var flip = layerdict.layer === "B";
if (flip) {
x = (devicePixelRatio * x / t.zoom - t.panx + t.x) / -t.s;
} else {
x = (devicePixelRatio * x / t.zoom - t.panx - t.x) / t.s;
}
y = (devicePixelRatio * y / t.zoom - t.y - t.pany) / t.s;
var v = rotateVector([x, y], -settings.boardRotation + (flip && settings.offsetBackRotation ? - 180 : 0));
if ("nets" in pcbdata) {
var net = netHitScan(layerdict.layer, ...v);
if (net !== highlightedNet) {
netClicked(net);
}
}
if (highlightedNet === null) {
var footprints = bboxHitScan(layerdict.layer, ...v);
if (footprints.length > 0) {
footprintsClicked(footprints);
}
}
}
function handlePointerLeave(e, layerdict) {
e.preventDefault();
e.stopPropagation();
if (!settings.redrawOnDrag) {
redrawCanvas(layerdict);
}
delete layerdict.pointerStates[e.pointerId];
}
function resetTransform(layerdict) {
layerdict.transform.panx = 0;
layerdict.transform.pany = 0;
layerdict.transform.zoom = 1;
redrawCanvas(layerdict);
}
function handlePointerUp(e, layerdict) {
if (!e.hasOwnProperty("offsetX")) {
// The polyfill doesn't set this properly
e.offsetX = e.pageX - e.currentTarget.offsetLeft;
e.offsetY = e.pageY - e.currentTarget.offsetTop;
}
e.preventDefault();
e.stopPropagation();
if (e.button == 2) {
// Reset pan and zoom on right click.
resetTransform(layerdict);
layerdict.anotherPointerTapped = false;
return;
}
// We haven't necessarily had a pointermove event since the interaction started, so make sure we update this now
var ptr = layerdict.pointerStates[e.pointerId];
ptr.distanceTravelled += Math.abs(e.offsetX - ptr.lastX) + Math.abs(e.offsetY - ptr.lastY);
if (e.button == 0 && ptr.distanceTravelled < 10 && Date.now() - ptr.downTime <= 500) {
if (Object.keys(layerdict.pointerStates).length == 1) {
if (layerdict.anotherPointerTapped) {
// This is the second pointer coming off of a two-finger tap
resetTransform(layerdict);
} else {
// This is just a regular tap
handleMouseClick(e, layerdict);
}
layerdict.anotherPointerTapped = false;
} else {
// This is the first finger coming off of what could become a two-finger tap
layerdict.anotherPointerTapped = true;
}
} else {
if (!settings.redrawOnDrag) {
redrawCanvas(layerdict);
}
layerdict.anotherPointerTapped = false;
}
delete layerdict.pointerStates[e.pointerId];
}
function handlePointerMove(e, layerdict) {
if (!layerdict.pointerStates.hasOwnProperty(e.pointerId)) {
return;
}
e.preventDefault();
e.stopPropagation();
if (!e.hasOwnProperty("offsetX")) {
// The polyfill doesn't set this properly
e.offsetX = e.pageX - e.currentTarget.offsetLeft;
e.offsetY = e.pageY - e.currentTarget.offsetTop;
}
var thisPtr = layerdict.pointerStates[e.pointerId];
var dx = e.offsetX - thisPtr.lastX;
var dy = e.offsetY - thisPtr.lastY;
// If this number is low on pointer up, we count the action as a click
thisPtr.distanceTravelled += Math.abs(dx) + Math.abs(dy);
if (Object.keys(layerdict.pointerStates).length == 1) {
// This is a simple drag
layerdict.transform.panx += devicePixelRatio * dx / layerdict.transform.zoom;
layerdict.transform.pany += devicePixelRatio * dy / layerdict.transform.zoom;
} else if (Object.keys(layerdict.pointerStates).length == 2) {
var otherPtr = Object.values(layerdict.pointerStates).filter((ptr) => ptr != thisPtr)[0];
var oldDist = Math.sqrt(Math.pow(thisPtr.lastX - otherPtr.lastX, 2) + Math.pow(thisPtr.lastY - otherPtr.lastY, 2));
var newDist = Math.sqrt(Math.pow(e.offsetX - otherPtr.lastX, 2) + Math.pow(e.offsetY - otherPtr.lastY, 2));
var scaleFactor = newDist / oldDist;
if (scaleFactor != NaN) {
layerdict.transform.zoom *= scaleFactor;
var zoomd = (1 - scaleFactor) / layerdict.transform.zoom;
layerdict.transform.panx += devicePixelRatio * otherPtr.lastX * zoomd;
layerdict.transform.pany += devicePixelRatio * otherPtr.lastY * zoomd;
}
}
thisPtr.lastX = e.offsetX;
thisPtr.lastY = e.offsetY;
if (settings.redrawOnDrag) {
redrawCanvas(layerdict);
}
}
function handleMouseWheel(e, layerdict) {
e.preventDefault();
e.stopPropagation();
var t = layerdict.transform;
var wheeldelta = e.deltaY;
if (e.deltaMode == 1) {
// FF only, scroll by lines
wheeldelta *= 30;
} else if (e.deltaMode == 2) {
wheeldelta *= 300;
}
var m = Math.pow(1.1, -wheeldelta / 40);
// Limit amount of zoom per tick.
if (m > 2) {
m = 2;
} else if (m < 0.5) {
m = 0.5;
}
t.zoom *= m;
var zoomd = (1 - m) / t.zoom;
t.panx += devicePixelRatio * e.offsetX * zoomd;
t.pany += devicePixelRatio * e.offsetY * zoomd;
redrawCanvas(layerdict);
}
function addMouseHandlers(div, layerdict) {
div.addEventListener("pointerdown", function(e) {
handlePointerDown(e, layerdict);
});
div.addEventListener("pointermove", function(e) {
handlePointerMove(e, layerdict);
});
div.addEventListener("pointerup", function(e) {
handlePointerUp(e, layerdict);
});
var pointerleave = function(e) {
handlePointerLeave(e, layerdict);
}
div.addEventListener("pointercancel", pointerleave);
div.addEventListener("pointerleave", pointerleave);
div.addEventListener("pointerout", pointerleave);
div.onwheel = function(e) {
handleMouseWheel(e, layerdict);
}
for (var element of [div, layerdict.bg, layerdict.fab, layerdict.silk, layerdict.highlight]) {
element.addEventListener("contextmenu", function(e) {
e.preventDefault();
}, false);
}
}
function setRedrawOnDrag(value) {
settings.redrawOnDrag = value;
writeStorage("redrawOnDrag", value);
}
function setBoardRotation(value) {
settings.boardRotation = value * 5;
writeStorage("boardRotation", settings.boardRotation);
document.getElementById("rotationDegree").textContent = settings.boardRotation;
resizeAll();
}
function setOffsetBackRotation(value) {
settings.offsetBackRotation = value;
writeStorage("offsetBackRotation", value);
resizeAll();
}
function initRender() {
allcanvas = {
front: {
transform: {
x: 0,
y: 0,
s: 1,
panx: 0,
pany: 0,
zoom: 1,
},
pointerStates: {},
anotherPointerTapped: false,
bg: document.getElementById("F_bg"),
fab: document.getElementById("F_fab"),
silk: document.getElementById("F_slk"),
highlight: document.getElementById("F_hl"),
layer: "F",
},
back: {
transform: {
x: 0,
y: 0,
s: 1,
panx: 0,
pany: 0,
zoom: 1,
},
pointerStates: {},
anotherPointerTapped: false,
bg: document.getElementById("B_bg"),
fab: document.getElementById("B_fab"),
silk: document.getElementById("B_slk"),
highlight: document.getElementById("B_hl"),
layer: "B",
}
};
addMouseHandlers(document.getElementById("frontcanvas"), allcanvas.front);
addMouseHandlers(document.getElementById("backcanvas"), allcanvas.back);
}
///////////////////////////////////////////////
///////////////////////////////////////////////
/*
* Table reordering via Drag'n'Drop
* Inspired by: https://htmldom.dev/drag-and-drop-table-column
*/
function setBomHandlers() {
const bom = document.getElementById('bomtable');
let dragName;
let placeHolderElements;
let draggingElement;
let forcePopulation;
let xOffset;
let yOffset;
let wasDragged;
const mouseUpHandler = function(e) {
// Delete dragging element
draggingElement.remove();
// Make BOM selectable again
bom.style.removeProperty("user-select");
// Remove listeners
document.removeEventListener('mousemove', mouseMoveHandler);
document.removeEventListener('mouseup', mouseUpHandler);
if (wasDragged) {
// Redraw whole BOM
populateBomTable();
}
}
const mouseMoveHandler = function(e) {
// Notice the dragging
wasDragged = true;
// Make the dragged element visible
draggingElement.style.removeProperty("display");
// Set elements position to mouse position
draggingElement.style.left = `${e.screenX - xOffset}px`;
draggingElement.style.top = `${e.screenY - yOffset}px`;
// Forced redrawing of BOM table
if (forcePopulation) {
forcePopulation = false;
// Copy array
phe = Array.from(placeHolderElements);
// populate BOM table again
populateBomHeader(dragName, phe);
populateBomBody(dragName, phe);
}
// Set up array of hidden columns
var hiddenColumns = Array.from(settings.hiddenColumns);
// In the ungrouped mode, quantity don't exist
if (settings.bommode === "ungrouped")
hiddenColumns.push("Quantity");
// If no checkbox fields can be found, we consider them hidden
if (settings.checkboxes.length == 0)
hiddenColumns.push("checkboxes");
// Get table headers and group them into checkboxes, extrafields and normal headers
const bh = document.getElementById("bomhead");
headers = Array.from(bh.querySelectorAll("th"))
headers.shift() // numCol is not part of the columnOrder
headerGroups = []
lastCompoundClass = null;
for (i = 0; i < settings.columnOrder.length; i++) {
cElem = settings.columnOrder[i];
if (hiddenColumns.includes(cElem)) {
// Hidden columns appear as a dummy element
headerGroups.push([]);
continue;
}
elem = headers.filter(e => getColumnOrderName(e) === cElem)[0];
if (elem.classList.contains("bom-checkbox")) {
if (lastCompoundClass === "bom-checkbox") {
cbGroup = headerGroups.pop();
cbGroup.push(elem);
headerGroups.push(cbGroup);
} else {
lastCompoundClass = "bom-checkbox";
headerGroups.push([elem])
}
} else {
headerGroups.push([elem])
}
}
// Copy settings.columnOrder
var columns = Array.from(settings.columnOrder)
// Set up array with indices of hidden columns
var hiddenIndices = hiddenColumns.map(e => settings.columnOrder.indexOf(e));
var dragIndex = columns.indexOf(dragName);
var swapIndex = dragIndex;
var swapDone = false;
// Check if the current dragged element is swapable with the left or right element
if (dragIndex > 0) {
// Get left headers boundingbox
swapIndex = dragIndex - 1;
while (hiddenIndices.includes(swapIndex) && swapIndex > 0)
swapIndex--;
if (!hiddenIndices.includes(swapIndex)) {
box = getBoundingClientRectFromMultiple(headerGroups[swapIndex]);
if (e.clientX < box.left + window.scrollX + (box.width / 2)) {
swapElement = columns[dragIndex];
columns.splice(dragIndex, 1);
columns.splice(swapIndex, 0, swapElement);
forcePopulation = true;
swapDone = true;
}
}
}
if ((!swapDone) && dragIndex < headerGroups.length - 1) {
// Get right headers boundingbox
swapIndex = dragIndex + 1;
while (hiddenIndices.includes(swapIndex))
swapIndex++;
if (swapIndex < headerGroups.length) {
box = getBoundingClientRectFromMultiple(headerGroups[swapIndex]);
if (e.clientX > box.left + window.scrollX + (box.width / 2)) {
swapElement = columns[dragIndex];
columns.splice(dragIndex, 1);
columns.splice(swapIndex, 0, swapElement);
forcePopulation = true;
swapDone = true;
}
}
}
// Write back change to storage
if (swapDone) {
settings.columnOrder = columns
writeStorage("columnOrder", JSON.stringify(columns));
}
}
const mouseDownHandler = function(e) {
var target = e.target;
if (target.tagName.toLowerCase() != "td")
target = target.parentElement;
// Used to check if a dragging has ever happened
wasDragged = false;
// Create new element which will be displayed as the dragged column
draggingElement = document.createElement("div")
draggingElement.classList.add("dragging");
draggingElement.style.display = "none";
draggingElement.style.position = "absolute";
draggingElement.style.overflow = "hidden";
// Get bomhead and bombody elements
const bh = document.getElementById("bomhead");
const bb = document.getElementById("bombody");
// Get all compound headers for the current column
var compoundHeaders;
if (target.classList.contains("bom-checkbox")) {
compoundHeaders = Array.from(bh.querySelectorAll("th.bom-checkbox"));
} else {
compoundHeaders = [target];
}
// Create new table which will display the column
var newTable = document.createElement("table");
newTable.classList.add("bom");
newTable.style.background = "white";
draggingElement.append(newTable);
// Create new header element
var newHeader = document.createElement("thead");
newTable.append(newHeader);
// Set up array for storing all placeholder elements
placeHolderElements = [];
// Add all compound headers to the new thead element and placeholders
compoundHeaders.forEach(function(h) {
clone = cloneElementWithDimensions(h);
newHeader.append(clone);
placeHolderElements.push(clone);
});
// Create new body element
var newBody = document.createElement("tbody");
newTable.append(newBody);
// Get indices for compound headers
var idxs = compoundHeaders.map(e => getBomTableHeaderIndex(e));
// For each row in the BOM body...
var rows = bb.querySelectorAll("tr");
rows.forEach(function(row) {
// ..get the cells for the compound column
const tds = row.querySelectorAll("td");
var copytds = idxs.map(i => tds[i]);
// Add them to the new element and the placeholders
var newRow = document.createElement("tr");
copytds.forEach(function(td) {
clone = cloneElementWithDimensions(td);
newRow.append(clone);
placeHolderElements.push(clone);
});
newBody.append(newRow);
});
// Compute width for compound header
var width = compoundHeaders.reduce((acc, x) => acc + x.clientWidth, 0);
draggingElement.style.width = `${width}px`;
// Insert the new dragging element and disable selection on BOM
bom.insertBefore(draggingElement, null);
bom.style.userSelect = "none";
// Determine the mouse position offset
xOffset = e.screenX - compoundHeaders.reduce((acc, x) => Math.min(acc, x.offsetLeft), compoundHeaders[0].offsetLeft);
yOffset = e.screenY - compoundHeaders[0].offsetTop;
// Get name for the column in settings.columnOrder
dragName = getColumnOrderName(target);
// Change text and class for placeholder elements
placeHolderElements = placeHolderElements.map(function(e) {
newElem = cloneElementWithDimensions(e);
newElem.textContent = "";
newElem.classList.add("placeholder");
return newElem;
});
// On next mouse move, the whole BOM needs to be redrawn to show the placeholders
forcePopulation = true;
// Add listeners for move and up on mouse
document.addEventListener('mousemove', mouseMoveHandler);
document.addEventListener('mouseup', mouseUpHandler);
}
// In netlist mode, there is nothing to reorder
if (settings.bommode === "netlist")
return;
// Add mouseDownHandler to every column except the numCol
bom.querySelectorAll("th")
.forEach(function(head) {
if (!head.classList.contains("numCol")) {
head.onmousedown = mouseDownHandler;
}
});
}
function getBoundingClientRectFromMultiple(elements) {
var elems = Array.from(elements);
if (elems.length == 0)
return null;
var box = elems.shift()
.getBoundingClientRect();
elems.forEach(function(elem) {
var elembox = elem.getBoundingClientRect();
box.left = Math.min(elembox.left, box.left);
box.top = Math.min(elembox.top, box.top);
box.width += elembox.width;
box.height = Math.max(elembox.height, box.height);
});
return box;
}
function cloneElementWithDimensions(elem) {
var newElem = elem.cloneNode(true);
newElem.style.height = window.getComputedStyle(elem).height;
newElem.style.width = window.getComputedStyle(elem).width;
return newElem;
}
function getBomTableHeaderIndex(elem) {
const bh = document.getElementById('bomhead');
const ths = Array.from(bh.querySelectorAll("th"));
return ths.indexOf(elem);
}
function getColumnOrderName(elem) {
var cname = elem.getAttribute("col_name");
if (cname === "bom-checkbox")
return "checkboxes";
else
return cname;
}
function resizableGrid(tablehead) {
var cols = tablehead.firstElementChild.children;
var rowWidth = tablehead.offsetWidth;
for (var i = 1; i < cols.length; i++) {
if (cols[i].classList.contains("bom-checkbox"))
continue;
cols[i].style.width = ((cols[i].clientWidth - paddingDiff(cols[i])) * 100 / rowWidth) + '%';
}
for (var i = 1; i < cols.length - 1; i++) {
var div = document.createElement('div');
div.className = "column-width-handle";
cols[i].appendChild(div);
setListeners(div);
}
function setListeners(div) {
var startX, curCol, nxtCol, curColWidth, nxtColWidth, rowWidth;
div.addEventListener('mousedown', function(e) {
e.preventDefault();
e.stopPropagation();
curCol = e.target.parentElement;
nxtCol = curCol.nextElementSibling;
startX = e.pageX;
var padding = paddingDiff(curCol);
rowWidth = curCol.parentElement.offsetWidth;
curColWidth = curCol.clientWidth - padding;
nxtColWidth = nxtCol.clientWidth - padding;
});
document.addEventListener('mousemove', function(e) {
if (startX) {
var diffX = e.pageX - startX;
diffX = -Math.min(-diffX, curColWidth - 20);
diffX = Math.min(diffX, nxtColWidth - 20);
curCol.style.width = ((curColWidth + diffX) * 100 / rowWidth) + '%';
nxtCol.style.width = ((nxtColWidth - diffX) * 100 / rowWidth) + '%';
console.log(`${curColWidth + nxtColWidth} ${(curColWidth + diffX) * 100 / rowWidth + (nxtColWidth - diffX) * 100 / rowWidth}`);
}
});
document.addEventListener('mouseup', function(e) {
curCol = undefined;
nxtCol = undefined;
startX = undefined;
nxtColWidth = undefined;
curColWidth = undefined
});
}
function paddingDiff(col) {
if (getStyleVal(col, 'box-sizing') == 'border-box') {
return 0;
}
var padLeft = getStyleVal(col, 'padding-left');
var padRight = getStyleVal(col, 'padding-right');
return (parseInt(padLeft) + parseInt(padRight));
}
function getStyleVal(elm, css) {
return (window.getComputedStyle(elm, null).getPropertyValue(css))
}
}
///////////////////////////////////////////////
///////////////////////////////////////////////
/* DOM manipulation and misc code */
var bomsplit;
var canvassplit;
var initDone = false;
var bomSortFunction = null;
var currentSortColumn = null;
var currentSortOrder = null;
var currentHighlightedRowId;
var highlightHandlers = [];
var footprintIndexToHandler = {};
var netsToHandler = {};
var markedFootprints = new Set();
var highlightedFootprints = [];
var highlightedNet = null;
var lastClicked;
function dbg(html) {
dbgdiv.innerHTML = html;
}
function redrawIfInitDone() {
if (initDone) {
redrawCanvas(allcanvas.front);
redrawCanvas(allcanvas.back);
}
}
function padsVisible(value) {
writeStorage("padsVisible", value);
settings.renderPads = value;
redrawIfInitDone();
}
function referencesVisible(value) {
writeStorage("referencesVisible", value);
settings.renderReferences = value;
redrawIfInitDone();
}
function valuesVisible(value) {
writeStorage("valuesVisible", value);
settings.renderValues = value;
redrawIfInitDone();
}
function tracksVisible(value) {
writeStorage("tracksVisible", value);
settings.renderTracks = value;
redrawIfInitDone();
}
function zonesVisible(value) {
writeStorage("zonesVisible", value);
settings.renderZones = value;
redrawIfInitDone();
}
function dnpOutline(value) {
writeStorage("dnpOutline", value);
settings.renderDnpOutline = value;
redrawIfInitDone();
}
function setDarkMode(value) {
if (value) {
topmostdiv.classList.add("dark");
} else {
topmostdiv.classList.remove("dark");
}
writeStorage("darkmode", value);
settings.darkMode = value;
redrawIfInitDone();
if (initDone) {
populateBomTable();
}
}
function setShowBOMColumn(field, value) {
if (field === "references") {
var rl = document.getElementById("reflookup");
rl.disabled = !value;
if (!value) {
rl.value = "";
updateRefLookup("");
}
}
var n = settings.hiddenColumns.indexOf(field);
if (value) {
if (n != -1) {
settings.hiddenColumns.splice(n, 1);
}
} else {
if (n == -1) {
settings.hiddenColumns.push(field);
}
}
writeStorage("hiddenColumns", JSON.stringify(settings.hiddenColumns));
if (initDone) {
populateBomTable();
}
redrawIfInitDone();
}
function setFullscreen(value) {
if (value) {
document.documentElement.requestFullscreen();
} else {
document.exitFullscreen();
}
}
function fabricationVisible(value) {
writeStorage("fabricationVisible", value);
settings.renderFabrication = value;
redrawIfInitDone();
}
function silkscreenVisible(value) {
writeStorage("silkscreenVisible", value);
settings.renderSilkscreen = value;
redrawIfInitDone();
}
function setHighlightPin1(value) {
writeStorage("highlightpin1", value);
settings.highlightpin1 = value;
redrawIfInitDone();
}
function setHighlightRowOnClick(value) {
settings.highlightRowOnClick = value;
writeStorage("highlightRowOnClick", value);
if (initDone) {
populateBomTable();
}
}
function getStoredCheckboxRefs(checkbox) {
function convert(ref) {
var intref = parseInt(ref);
if (isNaN(intref)) {
for (var i = 0; i < pcbdata.footprints.length; i++) {
if (pcbdata.footprints[i].ref == ref) {
return i;
}
}
return -1;
} else {
return intref;
}
}
if (!(checkbox in settings.checkboxStoredRefs)) {
var val = readStorage("checkbox_" + checkbox);
settings.checkboxStoredRefs[checkbox] = val ? val : "";
}
if (!settings.checkboxStoredRefs[checkbox]) {
return new Set();
} else {
return new Set(settings.checkboxStoredRefs[checkbox].split(",").map(r => convert(r)).filter(a => a >= 0));
}
}
function getCheckboxState(checkbox, references) {
var storedRefsSet = getStoredCheckboxRefs(checkbox);
var currentRefsSet = new Set(references.map(r => r[1]));
// Get difference of current - stored
var difference = new Set(currentRefsSet);
for (ref of storedRefsSet) {
difference.delete(ref);
}
if (difference.size == 0) {
// All the current refs are stored
return "checked";
} else if (difference.size == currentRefsSet.size) {
// None of the current refs are stored
return "unchecked";
} else {
// Some of the refs are stored
return "indeterminate";
}
}
function setBomCheckboxState(checkbox, element, references) {
var state = getCheckboxState(checkbox, references);
element.checked = (state == "checked");
element.indeterminate = (state == "indeterminate");
}
function createCheckboxHandlers(input, checkbox, references, row) {
var clickHandler = () => {
refsSet = getStoredCheckboxRefs(checkbox);
var markWhenChecked = settings.markWhenChecked == checkbox;
eventArgs = {
checkbox: checkbox,
refs: references,
}
if (input.checked) {
// checkbox ticked
for (var ref of references) {
refsSet.add(ref[1]);
}
if (markWhenChecked) {
row.classList.add("checked");
for (var ref of references) {
markedFootprints.add(ref[1]);
}
drawHighlights();
}
eventArgs.state = 'checked';
} else {
// checkbox unticked
for (var ref of references) {
refsSet.delete(ref[1]);
}
if (markWhenChecked) {
row.classList.remove("checked");
for (var ref of references) {
markedFootprints.delete(ref[1]);
}
drawHighlights();
}
eventArgs.state = 'unchecked';
}
settings.checkboxStoredRefs[checkbox] = [...refsSet].join(",");
writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
updateCheckboxStats(checkbox);
EventHandler.emitEvent(IBOM_EVENT_TYPES.CHECKBOX_CHANGE_EVENT, eventArgs);
}
return [
(e) => {
clickHandler();
},
(e) => {
e.preventDefault();
if (row.onmousemove) row.onmousemove();
},
(e) => {
e.preventDefault();
input.checked = !input.checked;
input.indeterminate = false;
clickHandler();
}
];
}
function clearHighlightedFootprints() {
if (currentHighlightedRowId) {
document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
currentHighlightedRowId = null;
highlightedFootprints = [];
highlightedNet = null;
}
}
function createRowHighlightHandler(rowid, refs, net) {
return function () {
if (currentHighlightedRowId) {
if (currentHighlightedRowId == rowid) {
return;
}
document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
}
document.getElementById(rowid).classList.add("highlighted");
currentHighlightedRowId = rowid;
highlightedFootprints = refs ? refs.map(r => r[1]) : [];
highlightedNet = net;
drawHighlights();
EventHandler.emitEvent(
IBOM_EVENT_TYPES.HIGHLIGHT_EVENT, {
rowid: rowid,
refs: refs,
net: net
});
}
}
function updateNetColors() {
writeStorage("netColors", JSON.stringify(settings.netColors));
redrawIfInitDone();
}
function netColorChangeHandler(net) {
return (event) => {
settings.netColors[net] = event.target.value;
updateNetColors();
}
}
function netColorRightClick(net) {
return (event) => {
if (event.button == 2) {
event.preventDefault();
event.stopPropagation();
var style = getComputedStyle(topmostdiv);
var defaultNetColor = style.getPropertyValue('--track-color').trim();
event.target.value = defaultNetColor;
delete settings.netColors[net];
updateNetColors();
}
}
}
function entryMatches(entry) {
if (settings.bommode == "netlist") {
// entry is just a net name
return entry.toLowerCase().indexOf(filter) >= 0;
}
// check refs
if (!settings.hiddenColumns.includes("References")) {
for (var ref of entry) {
if (ref[0].toLowerCase().indexOf(filter) >= 0) {
return true;
}
}
}
// check fields
for (var i in config.fields) {
var f = config.fields[i];
if (!settings.hiddenColumns.includes(f)) {
for (var ref of entry) {
if (String(pcbdata.bom.fields[ref[1]][i]).toLowerCase().indexOf(filter) >= 0) {
return true;
}
}
}
}
return false;
}
function findRefInEntry(entry) {
return entry.filter(r => r[0].toLowerCase() == reflookup);
}
function highlightFilter(s) {
if (!filter) {
return s;
}
var parts = s.toLowerCase().split(filter);
if (parts.length == 1) {
return s;
}
var r = "";
var pos = 0;
for (var i in parts) {
if (i > 0) {
r += '<mark class="highlight">' +
s.substring(pos, pos + filter.length) +
'</mark>';
pos += filter.length;
}
r += s.substring(pos, pos + parts[i].length);
pos += parts[i].length;
}
return r;
}
function getBomListByLayer(layer) {
switch (layer) {
case 'F': return pcbdata.bom.F.slice();
case 'B': return pcbdata.bom.B.slice();
case 'FB': return pcbdata.bom.both.slice();
}
return [];
}
function getSelectedBomList() {
if (settings.bommode == "netlist") {
return pcbdata.nets.slice();
}
var out = getBomListByLayer(settings.canvaslayout);
if (settings.bommode == "ungrouped") {
// expand bom table
var expandedTable = [];
for (var bomentry of out) {
for (var ref of bomentry) {
expandedTable.push([ref]);
}
}
return expandedTable;
}
return out;
}
function checkboxSetUnsetAllHandler(checkboxname) {
return function () {
var checkboxnum = 0;
while (checkboxnum < settings.checkboxes.length &&
settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
checkboxnum++;
}
if (checkboxnum >= settings.checkboxes.length) {
return;
}
var allset = true;
var checkbox;
var row;
for (row of bombody.childNodes) {
checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
if (!checkbox.checked || checkbox.indeterminate) {
allset = false;
break;
}
}
for (row of bombody.childNodes) {
checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
checkbox.checked = !allset;
checkbox.indeterminate = false;
checkbox.onchange();
}
}
}
function createColumnHeader(name, cls, comparator, is_checkbox = false) {
var th = document.createElement("TH");
th.innerHTML = name;
th.classList.add(cls);
if (is_checkbox)
th.setAttribute("col_name", "bom-checkbox");
else
th.setAttribute("col_name", name);
var span = document.createElement("SPAN");
span.classList.add("sortmark");
span.classList.add("none");
th.appendChild(span);
var spacer = document.createElement("div");
spacer.className = "column-spacer";
th.appendChild(spacer);
spacer.onclick = function () {
if (currentSortColumn && th !== currentSortColumn) {
// Currently sorted by another column
currentSortColumn.childNodes[1].classList.remove(currentSortOrder);
currentSortColumn.childNodes[1].classList.add("none");
currentSortColumn = null;
currentSortOrder = null;
}
if (currentSortColumn && th === currentSortColumn) {
// Already sorted by this column
if (currentSortOrder == "asc") {
// Sort by this column, descending order
bomSortFunction = function (a, b) {
return -comparator(a, b);
}
currentSortColumn.childNodes[1].classList.remove("asc");
currentSortColumn.childNodes[1].classList.add("desc");
currentSortOrder = "desc";
} else {
// Unsort
bomSortFunction = null;
currentSortColumn.childNodes[1].classList.remove("desc");
currentSortColumn.childNodes[1].classList.add("none");
currentSortColumn = null;
currentSortOrder = null;
}
} else {
// Sort by this column, ascending order
bomSortFunction = comparator;
currentSortColumn = th;
currentSortColumn.childNodes[1].classList.remove("none");
currentSortColumn.childNodes[1].classList.add("asc");
currentSortOrder = "asc";
}
populateBomBody();
}
if (is_checkbox) {
spacer.onclick = fancyDblClickHandler(
spacer, spacer.onclick, checkboxSetUnsetAllHandler(name));
}
return th;
}
function populateBomHeader(placeHolderColumn = null, placeHolderElements = null) {
while (bomhead.firstChild) {
bomhead.removeChild(bomhead.firstChild);
}
var tr = document.createElement("TR");
var th = document.createElement("TH");
th.classList.add("numCol");
var vismenu = document.createElement("div");
vismenu.id = "vismenu";
vismenu.classList.add("menu");
var visbutton = document.createElement("div");
visbutton.classList.add("visbtn");
visbutton.classList.add("hideonprint");
var viscontent = document.createElement("div");
viscontent.classList.add("menu-content");
viscontent.id = "vismenu-content";
settings.columnOrder.forEach(column => {
if (typeof column !== "string")
return;
// Skip empty columns
if (column === "checkboxes" && settings.checkboxes.length == 0)
return;
else if (column === "Quantity" && settings.bommode == "ungrouped")
return;
var label = document.createElement("label");
label.classList.add("menu-label");
var input = document.createElement("input");
input.classList.add("visibility_checkbox");
input.type = "checkbox";
input.onchange = function (e) {
setShowBOMColumn(column, e.target.checked)
};
input.checked = !(settings.hiddenColumns.includes(column));
label.appendChild(input);
if (column.length > 0)
label.append(column[0].toUpperCase() + column.slice(1));
viscontent.appendChild(label);
});
viscontent.childNodes[0].classList.add("menu-label-top");
vismenu.appendChild(visbutton);
if (settings.bommode != "netlist") {
vismenu.appendChild(viscontent);
th.appendChild(vismenu);
}
tr.appendChild(th);
var checkboxCompareClosure = function (checkbox) {
return (a, b) => {
var stateA = getCheckboxState(checkbox, a);
var stateB = getCheckboxState(checkbox, b);
if (stateA > stateB) return -1;
if (stateA < stateB) return 1;
return 0;
}
}
var stringFieldCompareClosure = function (fieldIndex) {
return (a, b) => {
var fa = pcbdata.bom.fields[a[0][1]][fieldIndex];
var fb = pcbdata.bom.fields[b[0][1]][fieldIndex];
if (fa != fb) return fa > fb ? 1 : -1;
else return 0;
}
}
var referenceRegex = /(?<prefix>[^0-9]+)(?<number>[0-9]+)/;
var compareRefs = (a, b) => {
var ra = referenceRegex.exec(a);
var rb = referenceRegex.exec(b);
if (ra === null || rb === null) {
if (a != b) return a > b ? 1 : -1;
return 0;
} else {
if (ra.groups.prefix != rb.groups.prefix) {
return ra.groups.prefix > rb.groups.prefix ? 1 : -1;
}
if (ra.groups.number != rb.groups.number) {
return parseInt(ra.groups.number) > parseInt(rb.groups.number) ? 1 : -1;
}
return 0;
}
}
if (settings.bommode == "netlist") {
tr.appendChild(createColumnHeader("Net name", "bom-netname", (a, b) => {
if (a > b) return -1;
if (a < b) return 1;
return 0;
}));
tr.appendChild(createColumnHeader("Color", "bom-color", (a, b) => {
return 0;
}));
} else {
// Filter hidden columns
var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
var valueIndex = config.fields.indexOf("Value");
var footprintIndex = config.fields.indexOf("Footprint");
columns.forEach((column) => {
if (column === placeHolderColumn) {
var n = 1;
if (column === "checkboxes")
n = settings.checkboxes.length;
for (i = 0; i < n; i++) {
td = placeHolderElements.shift();
tr.appendChild(td);
}
return;
} else if (column === "checkboxes") {
for (var checkbox of settings.checkboxes) {
th = createColumnHeader(
checkbox, "bom-checkbox", checkboxCompareClosure(checkbox), true);
tr.appendChild(th);
}
} else if (column === "References") {
tr.appendChild(createColumnHeader("References", "references", (a, b) => {
var i = 0;
while (i < a.length && i < b.length) {
if (a[i][0] != b[i][0]) return compareRefs(a[i][0], b[i][0]);
i++;
}
return a.length - b.length;
}));
} else if (column === "Value") {
tr.appendChild(createColumnHeader("Value", "value", (a, b) => {
var ra = a[0][1], rb = b[0][1];
return valueCompare(
pcbdata.bom.parsedValues[ra], pcbdata.bom.parsedValues[rb],
pcbdata.bom.fields[ra][valueIndex], pcbdata.bom.fields[rb][valueIndex]);
}));
return;
} else if (column === "Footprint") {
tr.appendChild(createColumnHeader(
"Footprint", "footprint", stringFieldCompareClosure(footprintIndex)));
} else if (column === "Quantity" && settings.bommode == "grouped") {
tr.appendChild(createColumnHeader("Quantity", "quantity", (a, b) => {
return a.length - b.length;
}));
} else {
// Other fields
var i = config.fields.indexOf(column);
if (i < 0)
return;
tr.appendChild(createColumnHeader(
column, `field${i + 1}`, stringFieldCompareClosure(i)));
}
});
}
bomhead.appendChild(tr);
}
function populateBomBody(placeholderColumn = null, placeHolderElements = null) {
const urlRegex = /^(https?:\/\/[^\s\/$.?#][^\s]*|file:\/\/([a-zA-Z]:|\/)[^\x00]+)$/;
while (bom.firstChild) {
bom.removeChild(bom.firstChild);
}
highlightHandlers = [];
footprintIndexToHandler = {};
netsToHandler = {};
currentHighlightedRowId = null;
var first = true;
var style = getComputedStyle(topmostdiv);
var defaultNetColor = style.getPropertyValue('--track-color').trim();
bomtable = getSelectedBomList();
if (bomSortFunction) {
bomtable = bomtable.sort(bomSortFunction);
}
for (var i in bomtable) {
var bomentry = bomtable[i];
if (filter && !entryMatches(bomentry)) {
continue;
}
var references = null;
var netname = null;
var tr = document.createElement("TR");
var td = document.createElement("TD");
var rownum = +i + 1;
tr.id = "bomrow" + rownum;
td.textContent = rownum;
tr.appendChild(td);
if (settings.bommode == "netlist") {
netname = bomentry;
td = document.createElement("TD");
td.innerHTML = highlightFilter(netname ? netname : "<no net>");
tr.appendChild(td);
var color = settings.netColors[netname] || defaultNetColor;
td = document.createElement("TD");
var colorBox = document.createElement("INPUT");
colorBox.type = "color";
colorBox.value = color;
colorBox.onchange = netColorChangeHandler(netname);
colorBox.onmouseup = netColorRightClick(netname);
colorBox.oncontextmenu = (e) => e.preventDefault();
td.appendChild(colorBox);
td.classList.add("color-column");
tr.appendChild(td);
} else {
if (reflookup) {
references = findRefInEntry(bomentry);
if (references.length == 0) {
continue;
}
} else {
references = bomentry;
}
// Filter hidden columns
var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
columns.forEach((column) => {
if (column === placeholderColumn) {
var n = 1;
if (column === "checkboxes")
n = settings.checkboxes.length;
for (i = 0; i < n; i++) {
td = placeHolderElements.shift();
tr.appendChild(td);
}
return;
} else if (column === "checkboxes") {
for (var checkbox of settings.checkboxes) {
if (checkbox) {
td = document.createElement("TD");
var input = document.createElement("input");
input.type = "checkbox";
[input.onchange, td.ontouchstart, td.ontouchend] = createCheckboxHandlers(input, checkbox, references, tr);
setBomCheckboxState(checkbox, input, references);
if (input.checked && settings.markWhenChecked == checkbox) {
tr.classList.add("checked");
}
td.appendChild(input);
tr.appendChild(td);
}
}
} else if (column === "References") {
td = document.createElement("TD");
td.innerHTML = highlightFilter(references.map(r => r[0]).join(", "));
tr.appendChild(td);
} else if (column === "Quantity" && settings.bommode == "grouped") {
// Quantity
td = document.createElement("TD");
td.textContent = references.length;
tr.appendChild(td);
} else {
// All the other fields
var field_index = config.fields.indexOf(column)
if (field_index < 0)
return;
var valueSet = new Set();
references.map(r => r[1]).forEach((id) => valueSet.add(pcbdata.bom.fields[id][field_index]));
td = document.createElement("TD");
var output = new Array();
for (let item of valueSet) {
const visible = highlightFilter(String(item));
if (typeof item === 'string' && item.match(urlRegex)) {
output.push(`<a href="${item}" target="_blank">${visible}</a>`);
} else {
output.push(visible);
}
}
td.innerHTML = output.join(", ");
tr.appendChild(td);
}
});
}
bom.appendChild(tr);
var handler = createRowHighlightHandler(tr.id, references, netname);
if (settings.highlightRowOnClick) {
tr.onmousedown = handler;
} else {
tr.onmousemove = handler;
}
highlightHandlers.push({
id: tr.id,
handler: handler,
});
if (references !== null) {
for (var refIndex of references.map(r => r[1])) {
footprintIndexToHandler[refIndex] = handler;
}
}
if (netname !== null) {
netsToHandler[netname] = handler;
}
if ((filter || reflookup) && first) {
handler();
first = false;
}
}
EventHandler.emitEvent(
IBOM_EVENT_TYPES.BOM_BODY_CHANGE_EVENT, {
filter: filter,
reflookup: reflookup,
checkboxes: settings.checkboxes,
bommode: settings.bommode,
});
}
function highlightPreviousRow() {
if (!currentHighlightedRowId) {
highlightHandlers[highlightHandlers.length - 1].handler();
} else {
if (highlightHandlers.length > 1 &&
highlightHandlers[0].id == currentHighlightedRowId) {
highlightHandlers[highlightHandlers.length - 1].handler();
} else {
for (var i = 0; i < highlightHandlers.length - 1; i++) {
if (highlightHandlers[i + 1].id == currentHighlightedRowId) {
highlightHandlers[i].handler();
break;
}
}
}
}
smoothScrollToRow(currentHighlightedRowId);
}
function highlightNextRow() {
if (!currentHighlightedRowId) {
highlightHandlers[0].handler();
} else {
if (highlightHandlers.length > 1 &&
highlightHandlers[highlightHandlers.length - 1].id == currentHighlightedRowId) {
highlightHandlers[0].handler();
} else {
for (var i = 1; i < highlightHandlers.length; i++) {
if (highlightHandlers[i - 1].id == currentHighlightedRowId) {
highlightHandlers[i].handler();
break;
}
}
}
}
smoothScrollToRow(currentHighlightedRowId);
}
function populateBomTable() {
populateBomHeader();
populateBomBody();
setBomHandlers();
resizableGrid(bomhead);
}
function footprintsClicked(footprintIndexes) {
var lastClickedIndex = footprintIndexes.indexOf(lastClicked);
for (var i = 1; i <= footprintIndexes.length; i++) {
var refIndex = footprintIndexes[(lastClickedIndex + i) % footprintIndexes.length];
if (refIndex in footprintIndexToHandler) {
lastClicked = refIndex;
footprintIndexToHandler[refIndex]();
smoothScrollToRow(currentHighlightedRowId);
break;
}
}
}
function netClicked(net) {
if (net in netsToHandler) {
netsToHandler[net]();
smoothScrollToRow(currentHighlightedRowId);
} else {
clearHighlightedFootprints();
highlightedNet = net;
drawHighlights();
}
}
function updateFilter(input) {
filter = input.toLowerCase();
populateBomTable();
}
function updateRefLookup(input) {
reflookup = input.toLowerCase();
populateBomTable();
}
function changeCanvasLayout(layout) {
document.getElementById("fl-btn").classList.remove("depressed");
document.getElementById("fb-btn").classList.remove("depressed");
document.getElementById("bl-btn").classList.remove("depressed");
switch (layout) {
case 'F':
document.getElementById("fl-btn").classList.add("depressed");
if (settings.bomlayout != "bom-only") {
canvassplit.collapse(1);
}
break;
case 'B':
document.getElementById("bl-btn").classList.add("depressed");
if (settings.bomlayout != "bom-only") {
canvassplit.collapse(0);
}
break;
default:
document.getElementById("fb-btn").classList.add("depressed");
if (settings.bomlayout != "bom-only") {
canvassplit.setSizes([50, 50]);
}
}
settings.canvaslayout = layout;
writeStorage("canvaslayout", layout);
resizeAll();
changeBomMode(settings.bommode);
}
function populateMetadata() {
document.getElementById("title").innerHTML = pcbdata.metadata.title;
document.getElementById("revision").innerHTML = "Rev: " + pcbdata.metadata.revision;
document.getElementById("company").innerHTML = pcbdata.metadata.company;
document.getElementById("filedate").innerHTML = pcbdata.metadata.date;
if (pcbdata.metadata.title != "") {
document.title = pcbdata.metadata.title + " BOM";
}
// Calculate board stats
var fp_f = 0,
fp_b = 0,
pads_f = 0,
pads_b = 0,
pads_th = 0;
for (var i = 0; i < pcbdata.footprints.length; i++) {
if (pcbdata.bom.skipped.includes(i)) continue;
var mod = pcbdata.footprints[i];
if (mod.layer == "F") {
fp_f++;
} else {
fp_b++;
}
for (var pad of mod.pads) {
if (pad.type == "th") {
pads_th++;
} else {
if (pad.layers.includes("F")) {
pads_f++;
}
if (pad.layers.includes("B")) {
pads_b++;
}
}
}
}
document.getElementById("stats-components-front").innerHTML = fp_f;
document.getElementById("stats-components-back").innerHTML = fp_b;
document.getElementById("stats-components-total").innerHTML = fp_f + fp_b;
document.getElementById("stats-groups-front").innerHTML = pcbdata.bom.F.length;
document.getElementById("stats-groups-back").innerHTML = pcbdata.bom.B.length;
document.getElementById("stats-groups-total").innerHTML = pcbdata.bom.both.length;
document.getElementById("stats-smd-pads-front").innerHTML = pads_f;
document.getElementById("stats-smd-pads-back").innerHTML = pads_b;
document.getElementById("stats-smd-pads-total").innerHTML = pads_f + pads_b;
document.getElementById("stats-th-pads").innerHTML = pads_th;
// Update version string
document.getElementById("github-link").innerHTML = "InteractiveHtmlBom " +
/^v\d+\.\d+/.exec(pcbdata.ibom_version)[0];
}
function changeBomLayout(layout) {
document.getElementById("bom-btn").classList.remove("depressed");
document.getElementById("lr-btn").classList.remove("depressed");
document.getElementById("tb-btn").classList.remove("depressed");
switch (layout) {
case 'bom-only':
document.getElementById("bom-btn").classList.add("depressed");
if (bomsplit) {
bomsplit.destroy();
bomsplit = null;
canvassplit.destroy();
canvassplit = null;
}
document.getElementById("frontcanvas").style.display = "none";
document.getElementById("backcanvas").style.display = "none";
document.getElementById("topmostdiv").style.height = "";
document.getElementById("topmostdiv").style.display = "block";
break;
case 'top-bottom':
document.getElementById("tb-btn").classList.add("depressed");
document.getElementById("frontcanvas").style.display = "";
document.getElementById("backcanvas").style.display = "";
document.getElementById("topmostdiv").style.height = "100%";
document.getElementById("topmostdiv").style.display = "flex";
document.getElementById("bomdiv").classList.remove("split-horizontal");
document.getElementById("canvasdiv").classList.remove("split-horizontal");
document.getElementById("frontcanvas").classList.add("split-horizontal");
document.getElementById("backcanvas").classList.add("split-horizontal");
if (bomsplit) {
bomsplit.destroy();
bomsplit = null;
canvassplit.destroy();
canvassplit = null;
}
bomsplit = Split(['#bomdiv', '#canvasdiv'], {
sizes: [50, 50],
onDragEnd: resizeAll,
direction: "vertical",
gutterSize: 5
});
canvassplit = Split(['#frontcanvas', '#backcanvas'], {
sizes: [50, 50],
gutterSize: 5,
onDragEnd: resizeAll
});
break;
case 'left-right':
document.getElementById("lr-btn").classList.add("depressed");
document.getElementById("frontcanvas").style.display = "";
document.getElementById("backcanvas").style.display = "";
document.getElementById("topmostdiv").style.height = "100%";
document.getElementById("topmostdiv").style.display = "flex";
document.getElementById("bomdiv").classList.add("split-horizontal");
document.getElementById("canvasdiv").classList.add("split-horizontal");
document.getElementById("frontcanvas").classList.remove("split-horizontal");
document.getElementById("backcanvas").classList.remove("split-horizontal");
if (bomsplit) {
bomsplit.destroy();
bomsplit = null;
canvassplit.destroy();
canvassplit = null;
}
bomsplit = Split(['#bomdiv', '#canvasdiv'], {
sizes: [50, 50],
onDragEnd: resizeAll,
gutterSize: 5
});
canvassplit = Split(['#frontcanvas', '#backcanvas'], {
sizes: [50, 50],
gutterSize: 5,
direction: "vertical",
onDragEnd: resizeAll
});
}
settings.bomlayout = layout;
writeStorage("bomlayout", layout);
changeCanvasLayout(settings.canvaslayout);
}
function changeBomMode(mode) {
document.getElementById("bom-grouped-btn").classList.remove("depressed");
document.getElementById("bom-ungrouped-btn").classList.remove("depressed");
document.getElementById("bom-netlist-btn").classList.remove("depressed");
var chkbxs = document.getElementsByClassName("visibility_checkbox");
switch (mode) {
case 'grouped':
document.getElementById("bom-grouped-btn").classList.add("depressed");
for (var i = 0; i < chkbxs.length; i++) {
chkbxs[i].disabled = false;
}
break;
case 'ungrouped':
document.getElementById("bom-ungrouped-btn").classList.add("depressed");
for (var i = 0; i < chkbxs.length; i++) {
chkbxs[i].disabled = false;
}
break;
case 'netlist':
document.getElementById("bom-netlist-btn").classList.add("depressed");
for (var i = 0; i < chkbxs.length; i++) {
chkbxs[i].disabled = true;
}
}
writeStorage("bommode", mode);
if (mode != settings.bommode) {
settings.bommode = mode;
bomSortFunction = null;
currentSortColumn = null;
currentSortOrder = null;
clearHighlightedFootprints();
}
populateBomTable();
}
function focusFilterField() {
focusInputField(document.getElementById("filter"));
}
function focusRefLookupField() {
focusInputField(document.getElementById("reflookup"));
}
function toggleBomCheckbox(bomrowid, checkboxnum) {
if (!bomrowid || checkboxnum > settings.checkboxes.length) {
return;
}
var bomrow = document.getElementById(bomrowid);
var childNum = checkboxnum + settings.columnOrder.indexOf("checkboxes");
var checkbox = bomrow.childNodes[childNum].childNodes[0];
checkbox.checked = !checkbox.checked;
checkbox.indeterminate = false;
checkbox.onchange();
}
function checkBomCheckbox(bomrowid, checkboxname) {
var checkboxnum = 0;
while (checkboxnum < settings.checkboxes.length &&
settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
checkboxnum++;
}
if (!bomrowid || checkboxnum >= settings.checkboxes.length) {
return;
}
var bomrow = document.getElementById(bomrowid);
var childNum = checkboxnum + 1 + settings.columnOrder.indexOf("checkboxes");
var checkbox = bomrow.childNodes[childNum].childNodes[0];
checkbox.checked = true;
checkbox.indeterminate = false;
checkbox.onchange();
}
function setBomCheckboxes(value) {
writeStorage("bomCheckboxes", value);
settings.checkboxes = value.split(",").map((e) => e.trim()).filter((e) => e);
prepCheckboxes();
populateMarkWhenCheckedOptions();
setMarkWhenChecked(settings.markWhenChecked);
}
function setMarkWhenChecked(value) {
writeStorage("markWhenChecked", value);
settings.markWhenChecked = value;
markedFootprints.clear();
for (var ref of (value ? getStoredCheckboxRefs(value) : [])) {
markedFootprints.add(ref);
}
populateBomTable();
drawHighlights();
}
function prepCheckboxes() {
var table = document.getElementById("checkbox-stats");
while (table.childElementCount > 1) {
table.removeChild(table.lastChild);
}
if (settings.checkboxes.length) {
table.style.display = "";
} else {
table.style.display = "none";
}
for (var checkbox of settings.checkboxes) {
var tr = document.createElement("TR");
var td = document.createElement("TD");
td.innerHTML = checkbox;
tr.appendChild(td);
td = document.createElement("TD");
td.id = "checkbox-stats-" + checkbox;
var progressbar = document.createElement("div");
progressbar.classList.add("bar");
td.appendChild(progressbar);
var text = document.createElement("div");
text.classList.add("text");
td.appendChild(text);
tr.appendChild(td);
table.appendChild(tr);
updateCheckboxStats(checkbox);
}
}
function populateMarkWhenCheckedOptions() {
var container = document.getElementById("markWhenCheckedContainer");
if (settings.checkboxes.length == 0) {
container.parentElement.style.display = "none";
return;
}
container.innerHTML = '';
container.parentElement.style.display = "inline-block";
function createOption(name, displayName) {
var id = "markWhenChecked-" + name;
var div = document.createElement("div");
div.classList.add("radio-container");
var input = document.createElement("input");
input.type = "radio";
input.name = "markWhenChecked";
input.value = name;
input.id = id;
input.onchange = () => setMarkWhenChecked(name);
div.appendChild(input);
// Preserve the selected element when the checkboxes change
if (name == settings.markWhenChecked) {
input.checked = true;
}
var label = document.createElement("label");
label.innerHTML = displayName;
label.htmlFor = id;
div.appendChild(label);
container.appendChild(div);
}
createOption("", "None");
for (var checkbox of settings.checkboxes) {
createOption(checkbox, checkbox);
}
}
function updateCheckboxStats(checkbox) {
var checked = getStoredCheckboxRefs(checkbox).size;
var total = pcbdata.footprints.length - pcbdata.bom.skipped.length;
var percent = checked * 100.0 / total;
var td = document.getElementById("checkbox-stats-" + checkbox);
td.firstChild.style.width = percent + "%";
td.lastChild.innerHTML = checked + "/" + total + " (" + Math.round(percent) + "%)";
}
function constrain(number, min, max) {
return Math.min(Math.max(parseInt(number), min), max);
}
document.onkeydown = function (e) {
switch (e.key) {
case "n":
if (document.activeElement.type == "text") {
return;
}
if (currentHighlightedRowId !== null) {
checkBomCheckbox(currentHighlightedRowId, "placed");
highlightNextRow();
e.preventDefault();
}
break;
case "ArrowUp":
highlightPreviousRow();
e.preventDefault();
break;
case "ArrowDown":
highlightNextRow();
e.preventDefault();
break;
case "ArrowLeft":
case "ArrowRight":
if (document.activeElement.type != "text") {
e.preventDefault();
let boardRotationElement = document.getElementById("boardRotation")
settings.boardRotation = parseInt(boardRotationElement.value); // degrees / 5
if (e.key == "ArrowLeft") {
settings.boardRotation += 3; // 15 degrees
}
else {
settings.boardRotation -= 3;
}
settings.boardRotation = constrain(settings.boardRotation, boardRotationElement.min, boardRotationElement.max);
boardRotationElement.value = settings.boardRotation
setBoardRotation(settings.boardRotation);
}
break;
default:
break;
}
if (e.altKey) {
switch (e.key) {
case "f":
focusFilterField();
e.preventDefault();
break;
case "r":
focusRefLookupField();
e.preventDefault();
break;
case "z":
changeBomLayout("bom-only");
e.preventDefault();
break;
case "x":
changeBomLayout("left-right");
e.preventDefault();
break;
case "c":
changeBomLayout("top-bottom");
e.preventDefault();
break;
case "v":
changeCanvasLayout("F");
e.preventDefault();
break;
case "b":
changeCanvasLayout("FB");
e.preventDefault();
break;
case "n":
changeCanvasLayout("B");
e.preventDefault();
break;
default:
break;
}
if (e.key >= '1' && e.key <= '9') {
toggleBomCheckbox(currentHighlightedRowId, parseInt(e.key));
e.preventDefault();
}
}
}
function hideNetlistButton() {
document.getElementById("bom-ungrouped-btn").classList.remove("middle-button");
document.getElementById("bom-ungrouped-btn").classList.add("right-most-button");
document.getElementById("bom-netlist-btn").style.display = "none";
}
function topToggle() {
var top = document.getElementById("top");
var toptoggle = document.getElementById("toptoggle");
if (top.style.display === "none") {
top.style.display = "flex";
toptoggle.classList.remove("flipped");
} else {
top.style.display = "none";
toptoggle.classList.add("flipped");
}
}
window.onload = function (e) {
initRender();
initStorage();
initDefaults();
initUtils();
cleanGutters();
populateMetadata();
dbgdiv = document.getElementById("dbg");
bom = document.getElementById("bombody");
bomhead = document.getElementById("bomhead");
filter = "";
reflookup = "";
if (!("nets" in pcbdata)) {
hideNetlistButton();
}
initDone = true;
setBomCheckboxes(document.getElementById("bomCheckboxes").value);
// Triggers render
changeBomLayout(settings.bomlayout);
// Users may leave fullscreen without touching the checkbox. Uncheck.
document.addEventListener('fullscreenchange', () => {
if (!document.fullscreenElement)
document.getElementById('fullscreenCheckbox').checked = false;
});
}
window.onresize = resizeAll;
window.matchMedia("print").addListener(resizeAll);
///////////////////////////////////////////////
///////////////////////////////////////////////
///////////////////////////////////////////////
</script>
</head>
<body>
<div id="topmostdiv" class="topmostdiv">
<div id="top">
<div id="fileinfodiv">
<table class="fileinfo">
<tbody>
<tr>
<td id="title" class="title" style="width: 70%">
Title
</td>
<td id="revision" class="title" style="width: 30%">
Revision
</td>
</tr>
<tr>
<td id="company">
Company
</td>
<td id="filedate">
Date
</td>
</tr>
</tbody>
</table>
</div>
<div id="bomcontrols">
<div class="hideonprint menu">
<button class="menubtn"></button>
<div class="menu-content">
<label class="menu-label menu-label-top" style="width: calc(50% - 18px)">
<input id="darkmodeCheckbox" type="checkbox" onchange="setDarkMode(this.checked)">
Dark mode
</label><!-- This comment eats space! All of it!
--><label class="menu-label menu-label-top" style="width: calc(50% - 17px); border-left: 0;">
<input id="fullscreenCheckbox" type="checkbox" onchange="setFullscreen(this.checked)">
Full Screen
</label>
<label class="menu-label" style="width: calc(50% - 18px)">
<input id="fabricationCheckbox" type="checkbox" checked onchange="fabricationVisible(this.checked)">
Fab layer
</label><!-- This comment eats space! All of it!
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
<input id="silkscreenCheckbox" type="checkbox" checked onchange="silkscreenVisible(this.checked)">
Silkscreen
</label>
<label class="menu-label" style="width: calc(50% - 18px)">
<input id="referencesCheckbox" type="checkbox" checked onchange="referencesVisible(this.checked)">
References
</label><!-- This comment eats space! All of it!
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
<input id="valuesCheckbox" type="checkbox" checked onchange="valuesVisible(this.checked)">
Values
</label>
<div id="tracksAndZonesCheckboxes">
<label class="menu-label" style="width: calc(50% - 18px)">
<input id="tracksCheckbox" type="checkbox" checked onchange="tracksVisible(this.checked)">
Tracks
</label><!-- This comment eats space! All of it!
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
<input id="zonesCheckbox" type="checkbox" checked onchange="zonesVisible(this.checked)">
Zones
</label>
</div>
<label class="menu-label" style="width: calc(50% - 18px)">
<input id="padsCheckbox" type="checkbox" checked onchange="padsVisible(this.checked)">
Pads
</label><!-- This comment eats space! All of it!
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
<input id="dnpOutlineCheckbox" type="checkbox" checked onchange="dnpOutline(this.checked)">
DNP outlined
</label>
<label class="menu-label">
<input id="highlightRowOnClickCheckbox" type="checkbox" checked onchange="setHighlightRowOnClick(this.checked)">
Highlight row on click
</label>
<label class="menu-label">
<input id="dragCheckbox" type="checkbox" checked onchange="setRedrawOnDrag(this.checked)">
Continuous redraw on drag
</label>
<label class="menu-label">
Highlight first pin
<form id="highlightpin1">
<div class="flexbox">
<label>
<input type="radio" name="highlightpin1" value="none" onchange="setHighlightPin1('none')">
None
</label>
<label>
<input type="radio" name="highlightpin1" value="all" onchange="setHighlightPin1('all')">
All
</label>
<label>
<input type="radio" name="highlightpin1" value="selected" onchange="setHighlightPin1('selected')">
Selected
</label>
</div>
</form>
</label>
<label class="menu-label">
<span>Board rotation</span>
<span style="float: right"><span id="rotationDegree">0</span>°</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>