Leningrad2-BDI-TR-DOS/Export/E/BDI Leningrad-2 1E-1(GAL16V8B).html
Alex-2-Graf b250907441 e
2026-03-18 21:47:58 +01:00

4720 lines
315 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Interactive BOM for KiCAD</title>
<style type="text/css">
:root {
--pcb-edge-color: black;
--pad-color: #878787;
--pad-hole-color: #CCCCCC;
--pad-color-highlight: #D04040;
--pad-color-highlight-both: #D0D040;
--pad-color-highlight-marked: #44a344;
--pin1-outline-color: #ffb629;
--pin1-outline-color-highlight: #ffb629;
--pin1-outline-color-highlight-both: #fcbb39;
--pin1-outline-color-highlight-marked: #fdbe41;
--silkscreen-edge-color: #aa4;
--silkscreen-polygon-color: #4aa;
--silkscreen-text-color: #4aa;
--fabrication-edge-color: #907651;
--fabrication-polygon-color: #907651;
--fabrication-text-color: #a27c24;
--track-color: #def5f1;
--track-color-highlight: #D04040;
--zone-color: #def5f1;
--zone-color-highlight: #d0404080;
}
html,
body {
margin: 0px;
height: 100%;
font-family: Verdana, sans-serif;
}
.dark.topmostdiv {
--pcb-edge-color: #eee;
--pad-color: #808080;
--pin1-outline-color: #ffa800;
--pin1-outline-color-highlight: #ccff00;
--track-color: #42524f;
--zone-color: #42524f;
background-color: #252c30;
color: #eee;
}
button {
background-color: #eee;
border: 1px solid #888;
color: black;
height: 44px;
width: 44px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 14px;
font-weight: bolder;
}
.dark button {
/* This will be inverted */
background-color: #c3b7b5;
}
button.depressed {
background-color: #0a0;
color: white;
}
.dark button.depressed {
/* This will be inverted */
background-color: #b3b;
}
button:focus {
outline: 0;
}
button#tb-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.32 290.12h5.82M1.32 291.45h5.82' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 292.5v4.23M.26 292.63H8.2' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='1.35' y='295.73'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
}
button#lr-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.06 290.12H3.7m-2.64 1.33H3.7m-2.64 1.32H3.7m-2.64 1.3H3.7m-2.64 1.33H3.7' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 288.8v7.94m0-4.11h3.96' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='5.11' y='291.96'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
}
button#bom-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)' fill='none' stroke='%23000' stroke-width='.4'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' stroke-linejoin='round'/%3E%3Cpath d='M1.59 290.12h5.29M1.59 291.45h5.33M1.59 292.75h5.33M1.59 294.09h5.33M1.59 295.41h5.33'/%3E%3C/g%3E%3C/svg%3E");
}
button#bom-grouped-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m4 0h5m4 0h3M6.1 22h3m3.9 0h5m4 0h4m-16-8h4m4 0h4'/%3E%3Cpath stroke-linecap='null' d='M5 17.5h22M5 26.6h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
}
button#bom-ungrouped-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m-4 8h3m-3 8h4'/%3E%3Cpath stroke-linecap='null' d='M5 13.5h22m-22 8h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
}
button#bom-netlist-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' stroke='%23000' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-width='2' d='M6 26l6-6v-8m13.8-6.3l-6 6v8'/%3E%3Ccircle cx='11.8' cy='9.5' r='2.8' stroke-width='2'/%3E%3Ccircle cx='19.8' cy='22.8' r='2.8' stroke-width='2'/%3E%3C/g%3E%3C/svg%3E");
}
button#copy {
background-image: url("data:image/svg+xml,%3Csvg height='48' viewBox='0 0 48 48' width='48' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h48v48h-48z' fill='none'/%3E%3Cpath d='M32 2h-24c-2.21 0-4 1.79-4 4v28h4v-28h24v-4zm6 8h-22c-2.21 0-4 1.79-4 4v28c0 2.21 1.79 4 4 4h22c2.21 0 4-1.79 4-4v-28c0-2.21-1.79-4-4-4zm0 32h-22v-28h22v28z'/%3E%3C/svg%3E");
background-position: 6px 6px;
background-repeat: no-repeat;
background-size: 26px 26px;
border-radius: 6px;
height: 40px;
width: 40px;
margin: 10px 5px;
}
button#copy:active {
box-shadow: inset 0px 0px 5px #6c6c6c;
}
textarea.clipboard-temp {
position: fixed;
top: 0;
left: 0;
width: 2em;
height: 2em;
padding: 0;
border: None;
outline: None;
box-shadow: None;
background: transparent;
}
.left-most-button {
border-right: 0;
border-top-left-radius: 6px;
border-bottom-left-radius: 6px;
}
.middle-button {
border-right: 0;
}
.right-most-button {
border-top-right-radius: 6px;
border-bottom-right-radius: 6px;
}
.button-container {
font-size: 0;
margin: 0.4rem 0.4rem 0.4rem 0;
}
.dark .button-container {
filter: invert(1);
}
.button-container button {
background-size: 32px 32px;
background-position: 5px 5px;
background-repeat: no-repeat;
}
@media print {
.hideonprint {
display: none;
}
}
canvas {
cursor: crosshair;
}
canvas:active {
cursor: grabbing;
}
.fileinfo {
width: 100%;
max-width: 1000px;
border: none;
padding: 3px;
}
.fileinfo .title {
font-size: 20pt;
font-weight: bold;
}
.fileinfo td {
overflow: hidden;
white-space: nowrap;
max-width: 1px;
width: 50%;
text-overflow: ellipsis;
}
.bom {
border-collapse: collapse;
font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
font-size: 10pt;
table-layout: fixed;
width: 100%;
margin-top: 1px;
position: relative;
}
.bom th,
.bom td {
border: 1px solid black;
padding: 5px;
word-wrap: break-word;
text-align: center;
position: relative;
}
.dark .bom th,
.dark .bom td {
border: 1px solid #777;
}
.bom th {
background-color: #CCCCCC;
background-clip: padding-box;
}
.dark .bom th {
background-color: #3b4749;
}
.bom tr.highlighted:nth-child(n) {
background-color: #cfc;
}
.dark .bom tr.highlighted:nth-child(n) {
background-color: #226022;
}
.bom tr:nth-child(even) {
background-color: #f2f2f2;
}
.dark .bom tr:nth-child(even) {
background-color: #313b40;
}
.bom tr.checked {
color: #1cb53d;
}
.dark .bom tr.checked {
color: #2cce54;
}
.bom tr {
transition: background-color 0.2s;
}
.bom .numCol {
width: 30px;
}
.bom .value {
width: 15%;
}
.bom .quantity {
width: 65px;
}
.bom th .sortmark {
position: absolute;
right: 1px;
top: 1px;
margin-top: -5px;
border-width: 5px;
border-style: solid;
border-color: transparent transparent #221 transparent;
transform-origin: 50% 85%;
transition: opacity 0.2s, transform 0.4s;
}
.dark .bom th .sortmark {
filter: invert(1);
}
.bom th .sortmark.none {
opacity: 0;
}
.bom th .sortmark.desc {
transform: rotate(180deg);
}
.bom th:hover .sortmark.none {
opacity: 0.5;
}
.bom .bom-checkbox {
width: 30px;
position: relative;
user-select: none;
-moz-user-select: none;
}
.bom .bom-checkbox:before {
content: "";
position: absolute;
border-width: 15px;
border-style: solid;
border-color: #51829f transparent transparent transparent;
visibility: hidden;
top: -15px;
}
.bom .bom-checkbox:after {
content: "Double click to set/unset all";
position: absolute;
color: white;
top: -35px;
left: -26px;
background: #51829f;
padding: 5px 15px;
border-radius: 8px;
white-space: nowrap;
visibility: hidden;
}
.bom .bom-checkbox:hover:before,
.bom .bom-checkbox:hover:after {
visibility: visible;
transition: visibility 0.2s linear 1s;
}
.split {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
overflow-y: auto;
overflow-x: hidden;
background-color: inherit;
}
.split.split-horizontal,
.gutter.gutter-horizontal {
height: 100%;
float: left;
}
.gutter {
background-color: #ddd;
background-repeat: no-repeat;
background-position: 50%;
transition: background-color 0.3s;
}
.dark .gutter {
background-color: #777;
}
.gutter.gutter-horizontal {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==');
cursor: ew-resize;
width: 5px;
}
.gutter.gutter-vertical {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAFAQMAAABo7865AAAABlBMVEVHcEzMzMzyAv2sAAAAAXRSTlMAQObYZgAAABBJREFUeF5jOAMEEAIEEFwAn3kMwcB6I2AAAAAASUVORK5CYII=');
cursor: ns-resize;
height: 5px;
}
.searchbox {
float: left;
height: 40px;
margin: 10px 5px;
padding: 12px 32px;
font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
font-size: 18px;
box-sizing: border-box;
border: 1px solid #888;
border-radius: 6px;
outline: none;
background-color: #eee;
transition: background-color 0.2s, border 0.2s;
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABNklEQVQ4T8XSMUvDQBQH8P/LElFa/AIZHcTBQSz0I/gFstTBRR2KUC4ldDxw7h0Bl3RRUATxi4iiODgoiLNrbQYp5J6cpJJqomkX33Z37/14d/dIa33MzDuYI4johOI4XhyNRteO46zNYjDzAxE1yBZprVeZ+QbAUhXEGJMA2Ox2u4+fQIa0mPmsCgCgJYQ4t7lfgF0opQYAdv9ABkKI/UnOFCClXKjX61cA1osQY8x9kiRNKeV7IWA3oyhaSdP0FkAtjxhj3hzH2RBCPOf3pzqYHCilfAAX+URm9oMguPzeWSGQvUcMYC8rOBJCHBRdqxTo9/vbRHRqi8bj8XKv1xvODbiuW2u32/bvf0SlDv4XYOY7z/Mavu+nM1+BmQ+NMc0wDF/LprP0DbTWW0T00ul0nn4b7Q87+X4Qmfiq2wAAAABJRU5ErkJggg==');
background-position: 10px 10px;
background-repeat: no-repeat;
}
.dark .searchbox {
background-color: #111;
color: #eee;
}
.searchbox::placeholder {
color: #ccc;
}
.dark .searchbox::placeholder {
color: #666;
}
.filter {
width: calc(60% - 64px);
}
.reflookup {
width: calc(40% - 10px);
}
input[type=text]:focus {
background-color: white;
border: 1px solid #333;
}
.dark input[type=text]:focus {
background-color: #333;
border: 1px solid #ccc;
}
mark.highlight {
background-color: #5050ff;
color: #fff;
padding: 2px;
border-radius: 6px;
}
.dark mark.highlight {
background-color: #76a6da;
color: #111;
}
.menubtn {
background-color: white;
border: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36' viewBox='0 0 20 20'%3E%3Cpath fill='none' d='M0 0h20v20H0V0z'/%3E%3Cpath d='M15.95 10.78c.03-.25.05-.51.05-.78s-.02-.53-.06-.78l1.69-1.32c.15-.12.19-.34.1-.51l-1.6-2.77c-.1-.18-.31-.24-.49-.18l-1.99.8c-.42-.32-.86-.58-1.35-.78L12 2.34c-.03-.2-.2-.34-.4-.34H8.4c-.2 0-.36.14-.39.34l-.3 2.12c-.49.2-.94.47-1.35.78l-1.99-.8c-.18-.07-.39 0-.49.18l-1.6 2.77c-.1.18-.06.39.1.51l1.69 1.32c-.04.25-.07.52-.07.78s.02.53.06.78L2.37 12.1c-.15.12-.19.34-.1.51l1.6 2.77c.1.18.31.24.49.18l1.99-.8c.42.32.86.58 1.35.78l.3 2.12c.04.2.2.34.4.34h3.2c.2 0 .37-.14.39-.34l.3-2.12c.49-.2.94-.47 1.35-.78l1.99.8c.18.07.39 0 .49-.18l1.6-2.77c.1-.18.06-.39-.1-.51l-1.67-1.32zM10 13c-1.65 0-3-1.35-3-3s1.35-3 3-3 3 1.35 3 3-1.35 3-3 3z'/%3E%3C/svg%3E%0A");
background-position: center;
background-repeat: no-repeat;
}
.statsbtn {
background-color: white;
border: none;
background-image: url("data:image/svg+xml,%3Csvg width='36' height='36' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 6h28v24H4V6zm0 8h28v8H4m9-16v24h10V5.8' fill='none' stroke='%23000' stroke-width='2'/%3E%3C/svg%3E");
background-position: center;
background-repeat: no-repeat;
}
.iobtn {
background-color: white;
border: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36'%3E%3Cpath fill='none' stroke='%23000' stroke-width='2' d='M3 33v-7l6.8-7h16.5l6.7 7v7H3zM3.2 26H33M21 9l5-5.9 5 6h-2.5V15h-5V9H21zm-4.9 0l-5 6-5-6h2.5V3h5v6h2.5z'/%3E%3Cpath fill='none' stroke='%23000' d='M6.1 29.5H10'/%3E%3C/svg%3E");
background-position: center;
background-repeat: no-repeat;
}
.visbtn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath fill='none' stroke='%23333' d='M2.5 4.5h5v15h-5zM9.5 4.5h5v15h-5zM16.5 4.5h5v15h-5z'/%3E%3C/svg%3E");
background-position: center;
background-repeat: no-repeat;
padding: 15px;
}
#vismenu-content {
left: 0px;
font-family: Verdana, sans-serif;
}
.dark .statsbtn,
.dark .savebtn,
.dark .menubtn,
.dark .iobtn,
.dark .visbtn {
filter: invert(1);
}
.flexbox {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
}
.savebtn {
background-color: #d6d6d6;
width: auto;
height: 30px;
flex-grow: 1;
margin: 5px;
border-radius: 4px;
}
.savebtn:active {
background-color: #0a0;
color: white;
}
.dark .savebtn:active {
/* This will be inverted */
background-color: #b3b;
}
.stats {
border-collapse: collapse;
font-size: 12pt;
table-layout: fixed;
width: 100%;
min-width: 450px;
}
.dark .stats td {
border: 1px solid #bbb;
}
.stats td {
border: 1px solid black;
padding: 5px;
word-wrap: break-word;
text-align: center;
position: relative;
}
#checkbox-stats div {
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 100%;
display: flex;
align-items: center;
justify-content: center;
}
#checkbox-stats .bar {
background-color: rgba(28, 251, 0, 0.6);
}
.menu {
position: relative;
display: inline-block;
margin: 0.4rem 0.4rem 0.4rem 0;
}
.menu-content {
font-size: 12pt !important;
text-align: left !important;
font-weight: normal !important;
display: none;
position: absolute;
background-color: white;
right: 0;
min-width: 300px;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
z-index: 100;
padding: 8px;
}
.dark .menu-content {
background-color: #111;
}
.menu:hover .menu-content {
display: block;
}
.menu:hover .menubtn,
.menu:hover .iobtn,
.menu:hover .statsbtn {
background-color: #eee;
}
.menu-label {
display: inline-block;
padding: 8px;
border: 1px solid #ccc;
border-top: 0;
width: calc(100% - 18px);
}
.menu-label-top {
border-top: 1px solid #ccc;
}
.menu-textbox {
float: left;
height: 24px;
margin: 10px 5px;
padding: 5px 5px;
font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
font-size: 14px;
box-sizing: border-box;
border: 1px solid #888;
border-radius: 4px;
outline: none;
background-color: #eee;
transition: background-color 0.2s, border 0.2s;
width: calc(100% - 10px);
}
.menu-textbox.invalid,
.dark .menu-textbox.invalid {
color: red;
}
.dark .menu-textbox {
background-color: #222;
color: #eee;
}
.radio-container {
margin: 4px;
}
.topmostdiv {
display: flex;
flex-direction: column;
width: 100%;
background-color: white;
transition: background-color 0.3s;
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;
}
/* #bomhead {
position: sticky;
top: 0px;
z-index: 1;
} */
</style>
<script type="text/javascript" >
///////////////////////////////////////////////
/*
Split.js - v1.3.5
MIT License
https://github.com/nathancahill/Split.js
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Split=t()}(this,function(){"use strict";var e=window,t=e.document,n="addEventListener",i="removeEventListener",r="getBoundingClientRect",s=function(){return!1},o=e.attachEvent&&!e[n],a=["","-webkit-","-moz-","-o-"].filter(function(e){var n=t.createElement("div");return n.style.cssText="width:"+e+"calc(9px)",!!n.style.length}).shift()+"calc",l=function(e){return"string"==typeof e||e instanceof String?t.querySelector(e):e};return function(u,c){function z(e,t,n){var i=A(y,t,n);Object.keys(i).forEach(function(t){return e.style[t]=i[t]})}function h(e,t){var n=B(y,t);Object.keys(n).forEach(function(t){return e.style[t]=n[t]})}function f(e){var t=E[this.a],n=E[this.b],i=t.size+n.size;t.size=e/this.size*i,n.size=i-e/this.size*i,z(t.element,t.size,this.aGutterSize),z(n.element,n.size,this.bGutterSize)}function m(e){var t;this.dragging&&((t="touches"in e?e.touches[0][b]-this.start:e[b]-this.start)<=E[this.a].minSize+M+this.aGutterSize?t=E[this.a].minSize+this.aGutterSize:t>=this.size-(E[this.b].minSize+M+this.bGutterSize)&&(t=this.size-(E[this.b].minSize+this.bGutterSize)),f.call(this,t),c.onDrag&&c.onDrag())}function g(){var e=E[this.a].element,t=E[this.b].element;this.size=e[r]()[y]+t[r]()[y]+this.aGutterSize+this.bGutterSize,this.start=e[r]()[G]}function d(){var t=this,n=E[t.a].element,r=E[t.b].element;t.dragging&&c.onDragEnd&&c.onDragEnd(),t.dragging=!1,e[i]("mouseup",t.stop),e[i]("touchend",t.stop),e[i]("touchcancel",t.stop),t.parent[i]("mousemove",t.move),t.parent[i]("touchmove",t.move),delete t.stop,delete t.move,n[i]("selectstart",s),n[i]("dragstart",s),r[i]("selectstart",s),r[i]("dragstart",s),n.style.userSelect="",n.style.webkitUserSelect="",n.style.MozUserSelect="",n.style.pointerEvents="",r.style.userSelect="",r.style.webkitUserSelect="",r.style.MozUserSelect="",r.style.pointerEvents="",t.gutter.style.cursor="",t.parent.style.cursor=""}function S(t){var i=this,r=E[i.a].element,o=E[i.b].element;!i.dragging&&c.onDragStart&&c.onDragStart(),t.preventDefault(),i.dragging=!0,i.move=m.bind(i),i.stop=d.bind(i),e[n]("mouseup",i.stop),e[n]("touchend",i.stop),e[n]("touchcancel",i.stop),i.parent[n]("mousemove",i.move),i.parent[n]("touchmove",i.move),r[n]("selectstart",s),r[n]("dragstart",s),o[n]("selectstart",s),o[n]("dragstart",s),r.style.userSelect="none",r.style.webkitUserSelect="none",r.style.MozUserSelect="none",r.style.pointerEvents="none",o.style.userSelect="none",o.style.webkitUserSelect="none",o.style.MozUserSelect="none",o.style.pointerEvents="none",i.gutter.style.cursor=j,i.parent.style.cursor=j,g.call(i)}function v(e){e.forEach(function(t,n){if(n>0){var i=F[n-1],r=E[i.a],s=E[i.b];r.size=e[n-1],s.size=t,z(r.element,r.size,i.aGutterSize),z(s.element,s.size,i.bGutterSize)}})}function p(){F.forEach(function(e){e.parent.removeChild(e.gutter),E[e.a].element.style[y]="",E[e.b].element.style[y]=""})}void 0===c&&(c={});var y,b,G,E,w=l(u[0]).parentNode,D=e.getComputedStyle(w).flexDirection,U=c.sizes||u.map(function(){return 100/u.length}),k=void 0!==c.minSize?c.minSize:100,x=Array.isArray(k)?k:u.map(function(){return k}),L=void 0!==c.gutterSize?c.gutterSize:10,M=void 0!==c.snapOffset?c.snapOffset:30,O=c.direction||"horizontal",j=c.cursor||("horizontal"===O?"ew-resize":"ns-resize"),C=c.gutter||function(e,n){var i=t.createElement("div");return i.className="gutter gutter-"+n,i},A=c.elementStyle||function(e,t,n){var i={};return"string"==typeof t||t instanceof String?i[e]=t:i[e]=o?t+"%":a+"("+t+"% - "+n+"px)",i},B=c.gutterStyle||function(e,t){return n={},n[e]=t+"px",n;var n};"horizontal"===O?(y="width","clientWidth",b="clientX",G="left","paddingLeft"):"vertical"===O&&(y="height","clientHeight",b="clientY",G="top","paddingTop");var F=[];return E=u.map(function(e,t){var i,s={element:l(e),size:U[t],minSize:x[t]};if(t>0&&(i={a:t-1,b:t,dragging:!1,isFirst:1===t,isLast:t===u.length-1,direction:O,parent:w},i.aGutterSize=L,i.bGutterSize=L,i.isFirst&&(i.aGutterSize=L/2),i.isLast&&(i.bGutterSize=L/2),"row-reverse"===D||"column-reverse"===D)){var a=i.a;i.a=i.b,i.b=a}if(!o&&t>0){var c=C(t,O);h(c,L),c[n]("mousedown",S.bind(i)),c[n]("touchstart",S.bind(i)),w.insertBefore(c,s.element),i.gutter=c}0===t||t===u.length-1?z(s.element,s.size,L/2):z(s.element,s.size,L);var f=s.element[r]()[y];return f<s.minSize&&(s.minSize=f),t>0&&F.push(i),s}),o?{setSizes:v,destroy:p}:{setSizes:v,getSizes:function(){return E.map(function(e){return e.size})},collapse:function(e){if(e===F.length){var t=F[e-1];g.call(t),o||f.call(t,t.size-t.bGutterSize)}else{var n=F[e];g.call(n),o||f.call(n,n.aGutterSize)}},destroy:p}}});
///////////////////////////////////////////////
///////////////////////////////////////////////
// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>
// This work is free. You can redistribute it and/or modify it
// under the terms of the WTFPL, Version 2
// For more information see LICENSE.txt or http://www.wtfpl.net/
//
// For more information, the home page:
// http://pieroxy.net/blog/pages/lz-string/testing.html
//
// LZ-based compression algorithm, version 1.4.4
var LZString=function(){var o=String.fromCharCode,i={};var n={decompressFromBase64:function(o){return null==o?"":""==o?null:n._decompress(o.length,32,function(n){return function(o,n){if(!i[o]){i[o]={};for(var t=0;t<o.length;t++)i[o][o.charAt(t)]=t}return i[o][n]}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o.charAt(n))})},_decompress:function(i,n,t){var r,e,a,s,p,u,l,f=[],c=4,d=4,h=3,v="",g=[],m={val:t(0),position:n,index:1};for(r=0;r<3;r+=1)f[r]=r;for(a=0,p=Math.pow(2,2),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 2:return""}for(f[3]=l,e=l,g.push(l);;){if(m.index>i)return"";for(a=0,p=Math.pow(2,h),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(l=a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 2:return g.join("")}if(0==c&&(c=Math.pow(2,h),h++),f[l])v=f[l];else{if(l!==d)return null;v=e+e.charAt(0)}g.push(v),f[d++]=e+v.charAt(0),e=v,0==--c&&(c=Math.pow(2,h),h++)}}};return n}();"function"==typeof define&&define.amd?define(function(){return LZString}):"undefined"!=typeof module&&null!=module?module.exports=LZString:"undefined"!=typeof angular&&null!=angular&&angular.module("LZString",[]).factory("LZString",function(){return LZString});
///////////////////////////////////////////////
///////////////////////////////////////////////
/*!
* PEP v0.4.3 | https://github.com/jquery/PEP
* Copyright jQuery Foundation and other contributors | http://jquery.org/license
*/
!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.PointerEventsPolyfill=b()}(this,function(){"use strict";function a(a,b){b=b||Object.create(null);var c=document.createEvent("Event");c.initEvent(a,b.bubbles||!1,b.cancelable||!1);
for(var d,e=2;e<m.length;e++)d=m[e],c[d]=b[d]||n[e];c.buttons=b.buttons||0;
var f=0;return f=b.pressure&&c.buttons?b.pressure:c.buttons?.5:0,c.x=c.clientX,c.y=c.clientY,c.pointerId=b.pointerId||0,c.width=b.width||0,c.height=b.height||0,c.pressure=f,c.tiltX=b.tiltX||0,c.tiltY=b.tiltY||0,c.twist=b.twist||0,c.tangentialPressure=b.tangentialPressure||0,c.pointerType=b.pointerType||"",c.hwTimestamp=b.hwTimestamp||0,c.isPrimary=b.isPrimary||!1,c}function b(){this.array=[],this.size=0}function c(a,b,c,d){this.addCallback=a.bind(d),this.removeCallback=b.bind(d),this.changedCallback=c.bind(d),A&&(this.observer=new A(this.mutationWatcher.bind(this)))}function d(a){return"body /shadow-deep/ "+e(a)}function e(a){return'[touch-action="'+a+'"]'}function f(a){return"{ -ms-touch-action: "+a+"; touch-action: "+a+"; }"}function g(){if(F){D.forEach(function(a){String(a)===a?(E+=e(a)+f(a)+"\n",G&&(E+=d(a)+f(a)+"\n")):(E+=a.selectors.map(e)+f(a.rule)+"\n",G&&(E+=a.selectors.map(d)+f(a.rule)+"\n"))});var a=document.createElement("style");a.textContent=E,document.head.appendChild(a)}}function h(){if(!window.PointerEvent){if(window.PointerEvent=a,window.navigator.msPointerEnabled){var b=window.navigator.msMaxTouchPoints;Object.defineProperty(window.navigator,"maxTouchPoints",{value:b,enumerable:!0}),u.registerSource("ms",_)}else Object.defineProperty(window.navigator,"maxTouchPoints",{value:0,enumerable:!0}),u.registerSource("mouse",N),void 0!==window.ontouchstart&&u.registerSource("touch",V);u.register(document)}}function i(a){if(!u.pointermap.has(a)){var b=new Error("InvalidPointerId");throw b.name="InvalidPointerId",b}}function j(a){for(var b=a.parentNode;b&&b!==a.ownerDocument;)b=b.parentNode;if(!b){var c=new Error("InvalidStateError");throw c.name="InvalidStateError",c}}function k(a){var b=u.pointermap.get(a);return 0!==b.buttons}function l(){window.Element&&!Element.prototype.setPointerCapture&&Object.defineProperties(Element.prototype,{setPointerCapture:{value:W},releasePointerCapture:{value:X},hasPointerCapture:{value:Y}})}
var m=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","pageX","pageY"],n=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0],o=window.Map&&window.Map.prototype.forEach,p=o?Map:b;b.prototype={set:function(a,b){return void 0===b?this["delete"](a):(this.has(a)||this.size++,void(this.array[a]=b))},has:function(a){return void 0!==this.array[a]},"delete":function(a){this.has(a)&&(delete this.array[a],this.size--)},get:function(a){return this.array[a]},clear:function(){this.array.length=0,this.size=0},forEach:function(a,b){return this.array.forEach(function(c,d){a.call(b,c,d,this)},this)}};var q=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","buttons","pointerId","width","height","pressure","tiltX","tiltY","pointerType","hwTimestamp","isPrimary","type","target","currentTarget","which","pageX","pageY","timeStamp"],r=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0,0,0,0,0,0,"",0,!1,"",null,null,0,0,0,0],s={pointerover:1,pointerout:1,pointerenter:1,pointerleave:1},t="undefined"!=typeof SVGElementInstance,u={pointermap:new p,eventMap:Object.create(null),captureInfo:Object.create(null),eventSources:Object.create(null),eventSourceList:[],registerSource:function(a,b){var c=b,d=c.events;d&&(d.forEach(function(a){c[a]&&(this.eventMap[a]=c[a].bind(c))},this),this.eventSources[a]=c,this.eventSourceList.push(c))},register:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
b.register.call(b,a)},unregister:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
b.unregister.call(b,a)},contains:function(a,b){try{return a.contains(b)}catch(c){return!1}},down:function(a){a.bubbles=!0,this.fireEvent("pointerdown",a)},move:function(a){a.bubbles=!0,this.fireEvent("pointermove",a)},up:function(a){a.bubbles=!0,this.fireEvent("pointerup",a)},enter:function(a){a.bubbles=!1,this.fireEvent("pointerenter",a)},leave:function(a){a.bubbles=!1,this.fireEvent("pointerleave",a)},over:function(a){a.bubbles=!0,this.fireEvent("pointerover",a)},out:function(a){a.bubbles=!0,this.fireEvent("pointerout",a)},cancel:function(a){a.bubbles=!0,this.fireEvent("pointercancel",a)},leaveOut:function(a){this.out(a),this.propagate(a,this.leave,!1)},enterOver:function(a){this.over(a),this.propagate(a,this.enter,!0)},eventHandler:function(a){if(!a._handledByPE){var b=a.type,c=this.eventMap&&this.eventMap[b];c&&c(a),a._handledByPE=!0}},listen:function(a,b){b.forEach(function(b){this.addEvent(a,b)},this)},unlisten:function(a,b){b.forEach(function(b){this.removeEvent(a,b)},this)},addEvent:function(a,b){a.addEventListener(b,this.boundHandler)},removeEvent:function(a,b){a.removeEventListener(b,this.boundHandler)},makeEvent:function(b,c){this.captureInfo[c.pointerId]&&(c.relatedTarget=null);var d=new a(b,c);return c.preventDefault&&(d.preventDefault=c.preventDefault),d._target=d._target||c.target,d},fireEvent:function(a,b){var c=this.makeEvent(a,b);return this.dispatchEvent(c)},cloneEvent:function(a){for(var b,c=Object.create(null),d=0;d<q.length;d++)b=q[d],c[b]=a[b]||r[d],!t||"target"!==b&&"relatedTarget"!==b||c[b]instanceof SVGElementInstance&&(c[b]=c[b].correspondingUseElement);return a.preventDefault&&(c.preventDefault=function(){a.preventDefault()}),c},getTarget:function(a){var b=this.captureInfo[a.pointerId];return b?a._target!==b&&a.type in s?void 0:b:a._target},propagate:function(a,b,c){for(var d=a.target,e=[];d!==document&&!d.contains(a.relatedTarget);) if(e.push(d),d=d.parentNode,!d)return;c&&e.reverse(),e.forEach(function(c){a.target=c,b.call(this,a)},this)},setCapture:function(b,c,d){this.captureInfo[b]&&this.releaseCapture(b,d),this.captureInfo[b]=c,this.implicitRelease=this.releaseCapture.bind(this,b,d),document.addEventListener("pointerup",this.implicitRelease),document.addEventListener("pointercancel",this.implicitRelease);var e=new a("gotpointercapture");e.pointerId=b,e._target=c,d||this.asyncDispatchEvent(e)},releaseCapture:function(b,c){var d=this.captureInfo[b];if(d){this.captureInfo[b]=void 0,document.removeEventListener("pointerup",this.implicitRelease),document.removeEventListener("pointercancel",this.implicitRelease);var e=new a("lostpointercapture");e.pointerId=b,e._target=d,c||this.asyncDispatchEvent(e)}},dispatchEvent:/*scope.external.dispatchEvent || */function(a){var b=this.getTarget(a);if(b)return b.dispatchEvent(a)},asyncDispatchEvent:function(a){requestAnimationFrame(this.dispatchEvent.bind(this,a))}};u.boundHandler=u.eventHandler.bind(u);var v={shadow:function(a){if(a)return a.shadowRoot||a.webkitShadowRoot},canTarget:function(a){return a&&Boolean(a.elementFromPoint)},targetingShadow:function(a){var b=this.shadow(a);if(this.canTarget(b))return b},olderShadow:function(a){var b=a.olderShadowRoot;if(!b){var c=a.querySelector("shadow");c&&(b=c.olderShadowRoot)}return b},allShadows:function(a){for(var b=[],c=this.shadow(a);c;)b.push(c),c=this.olderShadow(c);return b},searchRoot:function(a,b,c){if(a){var d,e,f=a.elementFromPoint(b,c);for(e=this.targetingShadow(f);e;){if(d=e.elementFromPoint(b,c)){var g=this.targetingShadow(d);return this.searchRoot(g,b,c)||d} e=this.olderShadow(e)} return f}},owner:function(a){
for(var b=a;b.parentNode;)b=b.parentNode;
return b.nodeType!==Node.DOCUMENT_NODE&&b.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&(b=document),b},findTarget:function(a){var b=a.clientX,c=a.clientY,d=this.owner(a.target);
return d.elementFromPoint(b,c)||(d=document),this.searchRoot(d,b,c)}},w=Array.prototype.forEach.call.bind(Array.prototype.forEach),x=Array.prototype.map.call.bind(Array.prototype.map),y=Array.prototype.slice.call.bind(Array.prototype.slice),z=Array.prototype.filter.call.bind(Array.prototype.filter),A=window.MutationObserver||window.WebKitMutationObserver,B="[touch-action]",C={subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["touch-action"]};c.prototype={watchSubtree:function(a){
//
this.observer&&v.canTarget(a)&&this.observer.observe(a,C)},enableOnSubtree:function(a){this.watchSubtree(a),a===document&&"complete"!==document.readyState?this.installOnLoad():this.installNewSubtree(a)},installNewSubtree:function(a){w(this.findElements(a),this.addElement,this)},findElements:function(a){return a.querySelectorAll?a.querySelectorAll(B):[]},removeElement:function(a){this.removeCallback(a)},addElement:function(a){this.addCallback(a)},elementChanged:function(a,b){this.changedCallback(a,b)},concatLists:function(a,b){return a.concat(y(b))},
installOnLoad:function(){document.addEventListener("readystatechange",function(){"complete"===document.readyState&&this.installNewSubtree(document)}.bind(this))},isElement:function(a){return a.nodeType===Node.ELEMENT_NODE},flattenMutationTree:function(a){
var b=x(a,this.findElements,this);
return b.push(z(a,this.isElement)),b.reduce(this.concatLists,[])},mutationWatcher:function(a){a.forEach(this.mutationHandler,this)},mutationHandler:function(a){if("childList"===a.type){var b=this.flattenMutationTree(a.addedNodes);b.forEach(this.addElement,this);var c=this.flattenMutationTree(a.removedNodes);c.forEach(this.removeElement,this)}else"attributes"===a.type&&this.elementChanged(a.target,a.oldValue)}};var D=["none","auto","pan-x","pan-y",{rule:"pan-x pan-y",selectors:["pan-x pan-y","pan-y pan-x"]}],E="",F=window.PointerEvent||window.MSPointerEvent,G=!window.ShadowDOMPolyfill&&document.head.createShadowRoot,H=u.pointermap,I=25,J=[1,4,2,8,16],K=!1;try{K=1===new MouseEvent("test",{buttons:1}).buttons}catch(L){}
var M,N={POINTER_ID:1,POINTER_TYPE:"mouse",events:["mousedown","mousemove","mouseup","mouseover","mouseout"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},lastTouches:[],
isEventSimulatedFromTouch:function(a){for(var b,c=this.lastTouches,d=a.clientX,e=a.clientY,f=0,g=c.length;f<g&&(b=c[f]);f++){
var h=Math.abs(d-b.x),i=Math.abs(e-b.y);if(h<=I&&i<=I)return!0}},prepareEvent:function(a){var b=u.cloneEvent(a),c=b.preventDefault;return b.preventDefault=function(){a.preventDefault(),c()},b.pointerId=this.POINTER_ID,b.isPrimary=!0,b.pointerType=this.POINTER_TYPE,b},prepareButtonsForMove:function(a,b){var c=H.get(this.POINTER_ID);
0!==b.which&&c?a.buttons=c.buttons:a.buttons=0,b.buttons=a.buttons},mousedown:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);K||(c.buttons=J[c.button],b&&(c.buttons|=b.buttons),a.buttons=c.buttons),H.set(this.POINTER_ID,a),b&&0!==b.buttons?u.move(c):u.down(c)}},mousemove:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.move(b)}},mouseup:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);if(!K){var d=J[c.button];
c.buttons=b?b.buttons&~d:0,a.buttons=c.buttons}H.set(this.POINTER_ID,a),
c.buttons&=~J[c.button],0===c.buttons?u.up(c):u.move(c)}},mouseover:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.enterOver(b)}},mouseout:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,u.leaveOut(b)}},cancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.deactivateMouse()},deactivateMouse:function(){H["delete"](this.POINTER_ID)}},O=u.captureInfo,P=v.findTarget.bind(v),Q=v.allShadows.bind(v),R=u.pointermap,S=2500,T=200,U="touch-action",V={events:["touchstart","touchmove","touchend","touchcancel"],register:function(a){M.enableOnSubtree(a)},unregister:function(){},elementAdded:function(a){var b=a.getAttribute(U),c=this.touchActionToScrollType(b);c&&(a._scrollType=c,u.listen(a,this.events),
Q(a).forEach(function(a){a._scrollType=c,u.listen(a,this.events)},this))},elementRemoved:function(a){a._scrollType=void 0,u.unlisten(a,this.events),
Q(a).forEach(function(a){a._scrollType=void 0,u.unlisten(a,this.events)},this)},elementChanged:function(a,b){var c=a.getAttribute(U),d=this.touchActionToScrollType(c),e=this.touchActionToScrollType(b);
d&&e?(a._scrollType=d,Q(a).forEach(function(a){a._scrollType=d},this)):e?this.elementRemoved(a):d&&this.elementAdded(a)},scrollTypes:{EMITTER:"none",XSCROLLER:"pan-x",YSCROLLER:"pan-y",SCROLLER:/^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/},touchActionToScrollType:function(a){var b=a,c=this.scrollTypes;return"none"===b?"none":b===c.XSCROLLER?"X":b===c.YSCROLLER?"Y":c.SCROLLER.exec(b)?"XY":void 0},POINTER_TYPE:"touch",firstTouch:null,isPrimaryTouch:function(a){return this.firstTouch===a.identifier},setPrimaryTouch:function(a){
(0===R.size||1===R.size&&R.has(1))&&(this.firstTouch=a.identifier,this.firstXY={X:a.clientX,Y:a.clientY},this.scrolling=!1,this.cancelResetClickCount())},removePrimaryPointer:function(a){a.isPrimary&&(this.firstTouch=null,this.firstXY=null,this.resetClickCount())},clickCount:0,resetId:null,resetClickCount:function(){var a=function(){this.clickCount=0,this.resetId=null}.bind(this);this.resetId=setTimeout(a,T)},cancelResetClickCount:function(){this.resetId&&clearTimeout(this.resetId)},typeToButtons:function(a){var b=0;return"touchstart"!==a&&"touchmove"!==a||(b=1),b},touchToPointer:function(a){var b=this.currentTouchEvent,c=u.cloneEvent(a),d=c.pointerId=a.identifier+2;c.target=O[d]||P(c),c.bubbles=!0,c.cancelable=!0,c.detail=this.clickCount,c.button=0,c.buttons=this.typeToButtons(b.type),c.width=2*(a.radiusX||a.webkitRadiusX||0),c.height=2*(a.radiusY||a.webkitRadiusY||0),c.pressure=a.force||a.webkitForce||.5,c.isPrimary=this.isPrimaryTouch(a),c.pointerType=this.POINTER_TYPE,
c.altKey=b.altKey,c.ctrlKey=b.ctrlKey,c.metaKey=b.metaKey,c.shiftKey=b.shiftKey;
var e=this;return c.preventDefault=function(){e.scrolling=!1,e.firstXY=null,b.preventDefault()},c},processTouches:function(a,b){var c=a.changedTouches;this.currentTouchEvent=a;for(var d,e=0;e<c.length;e++)d=c[e],b.call(this,this.touchToPointer(d))},
shouldScroll:function(a){if(this.firstXY){var b,c=a.currentTarget._scrollType;if("none"===c)
b=!1;else if("XY"===c)
b=!0;else{var d=a.changedTouches[0],e=c,f="Y"===c?"X":"Y",g=Math.abs(d["client"+e]-this.firstXY[e]),h=Math.abs(d["client"+f]-this.firstXY[f]);
b=g>=h}return this.firstXY=null,b}},findTouch:function(a,b){for(var c,d=0,e=a.length;d<e&&(c=a[d]);d++)if(c.identifier===b)return!0},
vacuumTouches:function(a){var b=a.touches;
if(R.size>=b.length){var c=[];R.forEach(function(a,d){
if(1!==d&&!this.findTouch(b,d-2)){var e=a.out;c.push(e)}},this),c.forEach(this.cancelOut,this)}},touchstart:function(a){this.vacuumTouches(a),this.setPrimaryTouch(a.changedTouches[0]),this.dedupSynthMouse(a),this.scrolling||(this.clickCount++,this.processTouches(a,this.overDown))},overDown:function(a){R.set(a.pointerId,{target:a.target,out:a,outTarget:a.target}),u.enterOver(a),u.down(a)},touchmove:function(a){this.scrolling||(this.shouldScroll(a)?(this.scrolling=!0,this.touchcancel(a)):(a.preventDefault(),this.processTouches(a,this.moveOverOut)))},moveOverOut:function(a){var b=a,c=R.get(b.pointerId);
if(c){var d=c.out,e=c.outTarget;u.move(b),d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,
d.target=e,b.target?(u.leaveOut(d),u.enterOver(b)):(
b.target=e,b.relatedTarget=null,this.cancelOut(b))),c.out=b,c.outTarget=b.target}},touchend:function(a){this.dedupSynthMouse(a),this.processTouches(a,this.upOut)},upOut:function(a){this.scrolling||(u.up(a),u.leaveOut(a)),this.cleanUpPointer(a)},touchcancel:function(a){this.processTouches(a,this.cancelOut)},cancelOut:function(a){u.cancel(a),u.leaveOut(a),this.cleanUpPointer(a)},cleanUpPointer:function(a){R["delete"](a.pointerId),this.removePrimaryPointer(a)},
dedupSynthMouse:function(a){var b=N.lastTouches,c=a.changedTouches[0];
if(this.isPrimaryTouch(c)){
var d={x:c.clientX,y:c.clientY};b.push(d);var e=function(a,b){var c=a.indexOf(b);c>-1&&a.splice(c,1)}.bind(null,b,d);setTimeout(e,S)}}};M=new c(V.elementAdded,V.elementRemoved,V.elementChanged,V);var W,X,Y,Z=u.pointermap,$=window.MSPointerEvent&&"number"==typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE,_={events:["MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSGotPointerCapture","MSLostPointerCapture"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},POINTER_TYPES:["","unavailable","touch","pen","mouse"],prepareEvent:function(a){var b=a;return $&&(b=u.cloneEvent(a),b.pointerType=this.POINTER_TYPES[a.pointerType]),b},cleanup:function(a){Z["delete"](a)},MSPointerDown:function(a){Z.set(a.pointerId,a);var b=this.prepareEvent(a);u.down(b)},MSPointerMove:function(a){var b=this.prepareEvent(a);u.move(b)},MSPointerUp:function(a){var b=this.prepareEvent(a);u.up(b),this.cleanup(a.pointerId)},MSPointerOut:function(a){var b=this.prepareEvent(a);u.leaveOut(b)},MSPointerOver:function(a){var b=this.prepareEvent(a);u.enterOver(b)},MSPointerCancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.cleanup(a.pointerId)},MSLostPointerCapture:function(a){var b=u.makeEvent("lostpointercapture",a);u.dispatchEvent(b)},MSGotPointerCapture:function(a){var b=u.makeEvent("gotpointercapture",a);u.dispatchEvent(b)}},aa=window.navigator;aa.msPointerEnabled?(W=function(a){i(a),j(this),k(a)&&(u.setCapture(a,this,!0),this.msSetPointerCapture(a))},X=function(a){i(a),u.releaseCapture(a,!0),this.msReleasePointerCapture(a)}):(W=function(a){i(a),j(this),k(a)&&u.setCapture(a,this)},X=function(a){i(a),u.releaseCapture(a)}),Y=function(a){return!!u.captureInfo[a]},g(),h(),l();var ba={dispatcher:u,Installer:c,PointerEvent:a,PointerMap:p,targetFinding:v};return ba});
///////////////////////////////////////////////
///////////////////////////////////////////////
var config = {"dark_mode": false, "show_pads": true, "show_fabrication": false, "show_silkscreen": true, "highlight_pin1": "none", "redraw_on_drag": true, "board_rotation": 0, "checkboxes": "Sourced,Placed", "bom_view": "left-right", "layer_view": "FB", "offset_back_rotation": false, "kicad_text_formatting": true, "fields": ["Value", "Footprint"]}
///////////////////////////////////////////////
///////////////////////////////////////////////
var pcbdata = JSON.parse(LZString.decompressFromBase64("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N01qIjBsBCEYLieKwGp4QrLu0aQJaJxEhm/bkADt9GBhxRery5UcJk1jx8t9Bjjh180xL88xgW30ZASHfCokY3zvSumAzC9vyu1tiz9u4YXLxfRiweNULIbFHOwEJvNvYKsI7NPCnWro6/DrH0oKBUDrcNNKi87iQutNqNEA/0n1LNBuio5/SZzJimOy7n9IAa63aQkrQpfWoWzqoiOIyfuvN2mvb/DJYbbvbO9kQMpqTD+suWlURlrum2y1rkjMBgFoadkg5O5UyZFNim9ObkjJv07CaV5vOupPi0JrGsc66ItqTqdAqpjIV+AaavatauiNAdxp3MUq7uor5mpihITNewJg77lun0pBrWZs3GxULzaHfGhDiHQvqugmbphve2qKg+DvcUi3rLUGfG3yRbdrloEmbCZt582vJMbphW8P5pElZm0xBNtruQd8bgcHgOxUAlpqSYenqk0iJOoBQpqAZohooqDvnOw3SIYj52g8gGaPSssXborovlWS751JX6TvZtZsFsvXz9LvImii9tLvBmrS7DdI0gXXrhKhdYlm735XfG4FasCLMq58a2Rlm2oVA+DtRoTbbztuXGnANhfJBgWCb+SRlSriZvdvEO0ehHdM1QHcbhnPfC3YzxDtLzMkzeMoTOzqIkdp+225jvrv0y58bH+X303nL3xpvkGAyxLA82jHkO9NPAG7bhvM6u3d4sNF9UrAy6pFgmyWSYDKx4oXa9yOSM++FBFr15JqBDDIRiX2aZ3BCMrmB2rp72+O6DokCGmcjo7uIItNraoiwMpO4jBubgcPapqSyOxRZ/bvUNBdqRIv30usiwjtqutCL7amsEMBVKttKgadqVaEHwxULfqjSu2Aya7s5kru6Z+0lEBkyNOCgiBR1ewtz20cINPDZYomQneudCILakkOHumuzHdJD2he6zZUd0uDhirsf+Y26I+BfUHe7Yojd2mObV7sd2syQF7otCYXyRJBvu0U7qepQkGe7xdqr6rDyoIm9cugjwSGKu4ViRAv2qKCIjmHp61oR8+t9GMIj5ArNYpK6BHGVujBAkrrjtPHy6pjiO5JQ9fI3gd+aISse8wthHjqPGQ5a4CLKMwK65bpwekYVx2r8u2AKVLvHa99kXfNZjbNrD7Bd8g67IODROsS6chutVQRh3qPYa3facsSEumUTd+r1KoS6YHoWuiqixLv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DBpeBl48XTpfOlnSWKpehl38W+KXH4R6XEZYEll6WsJdHEiZ1UZYol5SEMZbklv6XtxYOlwGW8ZaPFpiWbPuIEomXIZd0l26WxxbVsfXxKZc8l6mXkZbel1qXWZfRl6SX1xZZlrGW/FhxlsVTOZdNFkGXCZYhlyaWoZcFl2GWQpdFlgsXxZblF1aX6Zb2eNqWvpdll0iXfpYVluWX2ZYGl6Oj8Ze5l91bTxfGl4mXrpdJlu6XaFEclsKWlpYll7CXlqillq2WpJY6lmSWfpfJF02W+pYBl22XChHtloqWeZZYl7SX+ZZJl7WXOlGsdT2WGjG9lw2WUZZNl6WWmZfNlzKXLZcZlxWWI5dxlu2WuZZjlx2WxpfBl+OXNZYFl2aWhZe2wVOWqZYiln2W6Zfrcf2WC5a1YZmXupYDlvOXdxcjl+iXhpbVl4qXnZYTl12Wk5amUBQUG5bFlpuWM5cllhmXPpZlloOXrZfzl+eXsZaLl5WWS5dVlgmWh5crl0qXLpamlmaXVgDmlobHQpbTlpGWZ5d9lyhYs5e7lvrQdpfll9uWLZd7l4uWo5dLl0GWRxL5l6uXE5drl2GW6pZPlxuWmpZWlzOX1pevlzuXl5cfJ8OWbZafl/uWTpe3l9+W95a1lr+Xe2DKp3+Wp5f/l16WL5Zs8NuWV5b8WEBXQ5ezlwuWIFfXl5+XN5YdljkWd5Yul0wArpYPlmGXEFbH4BaW/5aLF8+WW5b9lueWwFZzlxeWH5Y+l1hX8FdpFw6WVZbUlreXY5ZKl8hXKFZul/SX7xfdFoRXTJbHYa4WAAGUAAHVPxdYAb8W7JbulndAcSf2UPYAgJbMARQ59Gn+FwHB6FcgljEW/oSxFoYBApcQloWWgdg8wWSwaJfBoaCWVzDbwlhXepbYV7aXg5cxl++We5e9l6AQBABfl9WWq5bgVmuXD5bHFuxgGkkW8/WWwRdsV+6n7FYkJIBX3FZvl1xW75awVpeXH5aLFrxXnNGgVwRXh5Y/l0eWEFamUNRX0UiFZ72XcvGYQExXHFc2ls2X2FY8VsOXV5YIVr1qVSJtiHxWYFY1l/xWSZc4logAxRe4loJX5pfyV/ZRClYoEYpWFRcwVrhWO5dzlkOXOFacV7hXkldqVzth6leIVsuXSFdgVihX95dEV50XxFaMlshWpFdWAAMXWIhslp4WxUYlFxzHl8e4pzRWXJb+FmQ59GgMV7yWZ/BYAVVCSlZhFrwBsxfMV2GWDlY4p9OXmpYGV0pXCRZGVtxXElY4V3hWN5f4VkhWrRbIVl2WhRdaV9pWapbHFjxmXlbPlt5X0FcGVhiWVxdYAHBWxlbKV8BWeFY5l/5WB5YEV8uWwZYWVkRW9JZWV10WJFfGljZWrhfMl24W8AWUVvZWglfXQPdq8bGcl2MXiyjeFf4X8GguV4zgPQXSAGCX3lbuV6IAHlclR38XYkTpVrlIUFYYV2FWmFfkpmJWCJbAAIiXhlYqV0ZWqlYmVmiX8pYaVjJXgVZHl0FWqpbaV0cXv5ftIZGxJOMal0VWAFe5VyVWhlcDllxWklZRV/aX0Vb7l46XB5dVVvFWllYJV2SWDJYfFxIA45ZMlkiBfRekV8lWLJY4gYMXdlcCVnWXYCcm9T4WtFcSAOMWOuncl0tIaJZ8l6QBAcAUEQL0zFf5ViUWSCe5kENWRVYwlxhW4ibElsHgEpaSl+YBpVdSlq3nFOTiVi1WFVYtVv5WiFYBVuZWgVYdVqGWwVe1Vx4w2qnTVsJXUFdpl7NW1gHLVs1X7AFvlruXYlaVlr1q+FaxVwFWnZbVVrJWqFYFV3VWSqYuVmmWjZdblj5WtpZ7V+JW+1Z+VjxXK1agVu1WcVbflppXFlfgVwNWaFbfczmRnZFeVo1X0FfelrtWkVa+VhJXTVbXVjFWq1eHVmtXR1brVgJXqFctYOBpyqdbVw1W0FfFVjBWF1fKV81WOFYvV0ZX11dtV7FX5lZ3V/FWx5YZspl4Z1ebljtXLVcXVkiBe1dAV8ZWK1bvVjdWwNdrViDXHVag12Fbt0W8WDNXBJazVmKWr5diV5FWgNYHV2iXMVfSVrdXgWOfVz+X91amUeuXp1cI12dXAFZzV1dXS1cA1vBW0NZtV6OXX5bo17DW91dfV13qoCII1z9XM1bFV+DWgNfI1njXflfQ10DWR1Yrl+jXslcY1rei35PE1g1XJNdPVn9Xz1bk1y9W5Ve+Vm9XgNYU1/jXfFd3l3dWX1fslvKQP1a01ojWpNZI1k1XUNe7VpDXl1ZQ11FXqletVyBXFNcfV5TWhNas1lNWbNbTVo1RYNeI1taWONeM12TXr5co15VXZlYE13mX/NYY1kTWtiZ4IzTWT1e/V6TX9Na41ypWstZi1oGWVVdo1hLW/Fcs1pLWyZY9l4LXYCLs1tjXZ5dI1zjWotf7VteXB1eo1zdXwNeK1yDWcldE1u7HKtfS19tXHNYi15zWDNYA1nLXotca1qjX71Zo11rWLNfa1tTW5Oq6149WYVZ01zLXgFavVldXjNby1odWJtaw1trWcNY61vDW5tdC1hzXwtc7VrLX6tc419bXmtcw1p9XEtdU15LWf6Hf6FtWqtbg1vrXjteW1wzXr1YG1kzW+NYK1ybXhFZ21mbXKwBFlh7WetbnV5hXatci1lbX3NatVyZWxtYw1pTXcVeu1idXapaQVtCl5tYNlw7XjZac1jzXsFYh13BWRtZqVmHWfNfi191Xfta1lsRWiVbWV86XSVdXlclW7hbOJHZWfxdqlqdXI1VDVk5X4xbOVwEWaJYhFjP4MxYCl+5WEJeTVoJWmdYkMA7XFteMJlwmXtbI1nHWENbZlrzXCFdh13zX4de21+tXNVfBV8SFGdcgiaxkJose1sLXnCfhVrHXZVaG1+VXctdG12LXq1aJ1oRWQVeWV51XVlbdVyRXPVdfF8lW3xbp1pRXbJepVnWXhmcKF6nWw1dyAECW3JcVjfiWwRagl+6nSThEl8Bwk1dyAW7X2Ke8F6xWFtYy16Q5RJYl1qVWZVZc1pFW3Ndx1hrX8ddN1h9XzdcyV5pXXZYbVjpXYZdyZz3Xgddgl3CXE9aXFxFXstaN1vHXZdaa18bWWta21qbWcNbJ1wyXbdZJV+3WzJe7CW4XFFZAAKlX/tZaEcAWoDS+F1nXQJaWKAPWzAAhFm5WFRbglvnWgpe/lrpWgDRF1uPWfPnL16XWF5cN1ozWPtfO1hvXLtb81pXXdJYL1iFXYZY8CIfWJ9a/V3rXV9b11z5W3tdW17fWTdfy1uLXzNZJ1gWXW9ddV3IBidap1gMWVIH9VhnWxxfRCfVmdGhH1xlXTld91i5XUxciVhNWHVW0AcPXzAF/FgA2LeejVpGWZxdssMxp5xYr1j7XTtbW1h/WDxda0TbWrtYP1lpWVdcbV+tGbyuN52DWUDbLF8XWUVYkl2VgU9cJqMtXjdcz1ljHChDwNxvWCDeb10nXCVbb1j/W7ddYAL1XNlcd16yWXdYDV27XkJY4p45WQDbZ1sCXz9cMVlKT5RDL10xW59ceVhARryZyx1jWntav10pWUpYN1pdXGDdr16HWs9fwN/fXODcP14g3C9e5Zusnk8eX1y/XK3AT1mg2q9awN+/XmDY219g2TDZf1xOW39eJV9ZXO9e9V7vWbhe2VkQ2/9dhlxW4a9lfJn3JgDeAlplX4pKrcVlXCNfZVmI3IdFuV2A3btdCNh2INDg0NnXXSqW0NwtXdDdc1/Q2M9br1gnWzNcaVwg389fMN4/Wi0no4L3JH8dL141X+tf11+g3kNfT1s7WH9dcNvfXFddMNzw3uDff10wBP9d8NwQ3u9cDFylXXdf+1kYppmckNqI3QDcTF8A2REXTFhUXMxeUNgXXYZfGNzZnvZcoNucXqDZk1qXWKNZwN6Oi2DY6N7dWyjY1VhwBqpbV1scXxjYCuCTXBJY2N9BX0DYcNySXBtb0N7jWDDaVVlg32xaf10o2ujdHlrw2KdfPFr/WfVcCNvvXRjdu1xjUzZC+MFnWpDcjVnm5ZDcuVqgjrwVa0RNWljYj138WwTcYJqJJtdfR1+dWwdaomRKXkpdyN30n+RBUAJw3GjdvVr7XPjftVhHXKpdONrVWLDY5kfqhSCdsozE3RdaO19fXnFeeN4bXCjcMNx/Wzdef1y3W3ZbHF2chw5CvZGw2QdcvlzHWb9c3197XSTc+17zWSjcpN442bpd215rxUSKIUJ6W0dZZNjHWGjclNjk2a9a5Nt432jbh1o43vjcR1wU2DWUZN9U3p5axN0HWJTcQ11PWCjdaNlw2LtaNNwTXFTYFNovX/AQtN0U32NYwNmU2STah1g03nTYV1402PDZu11E3ILC9NzI3rTfFN7U27TYYNl439TZA1+U3CteJ1/k3cNZfQPxk1Te9NmrXbTf/V3U2t9ZlNnfX5dZz1sdW89dNN2GWRMHRN0+WNTZX1rU3fTZ1N/I2EzcdNoo2jDbcNzo3QzfLNzNFPTYoFjE26jbPV6/W4zeaNtk3FVaTN77Wm9Y7NpU3/tbB1D/hVU2rNq03NTexN3M2N9fzN6U2AzdHNik2UzYt19VXJzdu1sChUSNnN7M3+zb/V5c3Gzc5N5s3uTcNN4M3XTZNNnc3fxaFNqs3Dzd01gc28zdPNvU3zzcDN3fWXTaK1m833Tf5kBk2ezbnNttWxTd/VnE2/TZ2Npg2WzZ5N7PW+Te3N382OZG2xg82ozYXNm03YzZfN+02mzewNp03PzavN782Jzbgtp+ZtsazNpC3azcXN1C2TzfQts83MLcgty82SzZU1m8Weje8NynWBjbJV7vWAAE1e9f7127Wexnto7QnJje0V30A3JaDkWE2UaDRUIdRkjeRNuA3cxf1cHi3STm9lvpWoDdpI4832TdfNgs21zdM1sc2ODbwto/XzjZCNk84ZLeEt4+WcsFuVpc3lLYott82qLYvNoM3aLapNp1WqJZdVxi3/jeYt6nXu9d9V3/WVFYuNpJEpie8VhlWpjZW0hMW8fBnVxpB0gCMtmrWUjd/Fz5mvLec0Ps2f1fuN+SWdDaaNtPXhzd41uU2NLfcN/k3tLfTNrJAy9LGJ7y3rjeq1u42tjY2l2g28jbMt1S3/pawt4s2YLfHV282JRe5GSK3HzbQNwq3xJccN8C3XjfXN3k2vjbwt9M2PGfqt4i3bDeVYWK2irZat2/XIdfKt6i2rLaqtss2archV2l5Bidyt5k2SLd0OJq2weGKthK2HTYstj83Krc6ttM3lTZEwXq28rc0N3XXSldWtp42VLdXNsa3LLewt6y23TfTNjEp9rYWt/q2lrb11k63q9bKtmXXLra2thU2fzdutg1l7reitxq3nreGtqU279cLNto2Jre2t2C3brebQGjUjwAatsXXAbceN163zrfetza3CdcmtkrWwzYlFoU2/rdj1x63/cmWt+wAXrf9Ni63UbeTNn7Wdrf+1/6oZ9EZZOG3XqYJtyvXEbeJtlG32regtiG3qrfwtxbocMBxtms28bcVF0C2ibdatxM31LY3N8m3IbeVN0bHubfnNxa38bYRtug3TrdKt5G20VY+ttG22bamtjm21CGicfWQgrVpto63+baBtlc2QbbUt8k2Ora+trq3xbf6oMonAuX+t+G3jrf1ts63DbZJtlm3jDfbNim3dzZesS23LTaAtqg3ZbZKt+M3KLecN8a2rrfRt6bXdzehtj22dbYGt+m2EVcZtwW33zadtts2Qzddtu83fra1t5oWDrayNp63bbZjtka2WjY2t+O3DjevNs22pzf8BcO2+reAtwa3mrezt4G3RreZt4W2Tbc3N3PWMbc7N5jRILFLt9O3ozb5tzHWBbZztpK35NeNt1m3TbaTt2q3ZrfqJtO2HrfLtqO3hpbtthW2Hbdrt/u3nbcTtsW3/tZ6t1O2rbdxtie2fbbWtjC2A7eVtsm3xzaHt//Wjekltr23Njc3t+W2/bfMtne3SbdStl22l7dBNlBk27fHt722s7bltpG3Z7aVt6+2Rbf3tu+3fxayt9/1tbbLt5+29bartg22a7Y/t/O2vzdTNn+39lYhSVe3PbYv1je2X7d9toc3djYqtlW3B7egdscXeIV20X7H4He016W3O7YaN7u3q7dztq+2IHZwtqB32bcyt88I4HYjtzO3gHdftpm3wHbrtge2G7dLNpu3prdhl5iAk0lodwB3T7aQdre3/bdBttB297c0tg+2uHcYGR+3rbbpts+237bAdzzXd7Zvtxe2qHeVNhXguqF4d9u3kLZltgR3z7ZQdiC3FHa/tsR3MHa4do+2NHaft/h2GHeQdxK3UHcDtz622Hbotzh3uWa5tsx3pHd1tru3p7Yvtt63mHfnthO3C7fEdhARk/2PthB2gHfcdkB37bfkdkc2WHYXtvx3jHe5Zzy2XHfXtkJ2iHY8dvR22raid3x3cLf8d0g2QqpytqK3EnYsd0J3GHdjtvO30nYLtzJ3YnZH4OxYgnfwd3m2K7ZWtlJ3rHf0dz+367dFtlR3/tf5gJ8Fcnbod7R3LHcEdy+3hHdsd9B37HZstzK2UCGqd+zWtHcId303iHdAd0h2BnYMdlp3v7bad27WDlfGd/K2YrcntmZ3wnbmdo22UrcMdtK3Ibd+N9vWfDf4Nh3X/DZqANy23dZJ4GvFL+g3pvi3w1cTF/y2Oda8lrnXEOB51pQ3eVf51lE3cxZud+foN6dcdyO3nzfItzx3FbYUd5p3WHdadtW2MreVN/XoRZdtObp2pnd7t3R3GnbSdnx2yncodtW2nRet18nXjnaYt052u9fsAAAApKQBLncpt4ZnmBg0VyI3tFcjeNyW9UVhNk0Z6njf5mfWw9YktyPXyXf6zAy3uBEPF5l29dfit5F31rbId8WWogGaoJR2YnfZt6F2yXfWGfXJZLaRlrl3ETfj1tfXtjZ7tmx3odcIWEV39ndvt5Z27zfkedRXOXZLF+V2tDdAths2Z7Yid5K2ixeFd4FjonfKdrV2sbZ1d6V29XemqA127DcVdk7XincFdpuWLXeIEq12MXY4d9W2TdV1d2DW5XcUNpS3sdeVdpp2kZc9d0V3rXcxd5U3/XftdwN39XeDdo13BzZRdoW2PXZLFr12MnZ9dkO27zYFQAN2NDaDdnl2Q3asdgV35ne9lyN2NXeUdmN2pzbzd+N2C3cTdot3k3bQtkF337bBdiN2M3ajd7N2/td3N34Z83YOtwt30FfsNpV2SHaRd2U3zXesEBUJO3a3Nm13BTd7dut3+3Ybdwd2XXde1kd2VXfLdjt3K3bFd6t3QTcRUPt3HtYHdn9Wh3dddsN3UXfRFit3FnaMdmd2Kzd3d+d393cXdw93l3cl1k9203bPdjd2L3YOdq93x9Q/5il2HXbFgJN2TLdDd1d3w3aFdt92IXaWd7d3UTfQJjzAZXfFlg93Q9aBd0y2W3dNdvu3X3d2eKd3G7Zzd2q3T8D3dwpX73fg94t2+na8dtt2QPbQ9zd3o3d9d7q3sPdvd3D3HXf/dsi3EPdSdl93zXdA9713p3Yg9/ZX3shw92V28PYVdhD3APdmd0d3KNbVdy12s3bY9ij3lTbgRb/pt4oTd2j3G3YA9kt3t7bLd9t3SPffdzV32PawdodEf3Zk9v925Pfo9/j3tncE90bXhPczd9F2xPcw9jT3rqeg9393uXaXdvj2FPaEd3Z3mPZU9sD3L3fU9p5Xg2S492D2ePcNd+T3CPdBdyJ303ec91j2MPe7d3+2PPeo97j3ZPds9gj3+XcU9xz2MJfPdlz2P3bc9j+mdTk89puW4Pd49mL25HZ2dx22SPfVd1T2q3fE99p20vYi9rz2ovYfduz2/PdbdgL3UPYK9pL21PeK9sQ2hkHS99EXMvZ89vT37Pf6d+L3BJcS94L32HfM9rh2WvbK9jL3vPeddqr3YvYc9vL3Avfq9/r2HHfVt8Q3ules9p12cJYm9nL3DPfx14z30PYG90L2kJbnxqz3tPZs9yr3svaYd4j2ZvZE90z2QveE1+A2ABFa9osX2vfG9k723XaU9/L2Lvcgdsz3dvf/1272Rvba9sb3Vvae959247de9kz33vau9gLX/9ceZrT363Yq9/D2m3eBdxj2gffO9kH2KHY+9672kJch96T3ofZ096L24fYY91N3Efbq9t72UfbB90rWeJbrJqH2F3Zh9rL3cff09k13cvbntwn3kfeut763lTd4ln737vb+9uVhH3bq1572eva29sj2u3a4N7F2eDb6Nvg2BRYJdkiAAAAkSXfp19y3v5alJu4ogDe910wBc5EPiNyW1fYuVqLRjWAS0cS3Pnfn1nrGOukV9i5XU/GuVqgFdPfrNlN3S3Z69k33sAF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Hnkef1F59YHBfLF+nnoJeKAEIX/2eSF7IX6ngKF+0ALxeoQAsXkAA+Z7Klz+BoF/sXuBfc5/znwufS5/cX1IA8l8yAHxe9WD8XxOfwF8ul2eeZFcsIZefV56aQDee/IG2AFeVmF4hANhfYl/EXrRe8F8ulzBA+gGBF/2e5gA4AF/hHF8l9u4XFAFzkCyX4ACrnxpfa5/8Xwpe6F8ulz4BGg0FsoE3mF69ASOfLsnqXiOeZFZQAK4ANJY6AcyhuF971gOf9F5Dnp3XBF4jn4RfRF/MXkZfLF8kXveW3xbfF1X26/eOAH5fsADMnogAbgCIlkefqTZkAfsXPgDxN0SfQgGHn5SFoV6Sl2FeoAHhX5+fU/Bjnz4AJWHrnpOeQABTn2xeYF4cXpxfKl7cXwOfal9MXiueI57WXmuekl5AAMkB+xbIAGxeiU4JX8pfnF8yAVxfql9JXjlfy5+8XylffF42XiFeUl4oVtpe9IE6XhyBFAB6XjRBW58gnvefBl7kVo+eIV9PnoJfGV86n5lfHF/gX4leOV48XupeGl+pXzZfdAHpX2QBlV7sX2Be1V4qX0GJ2V88XmpeuV4pX1Ze+V5pXz8AoV5hX10XUV61YRFefWGdX5wA0V+3ADFesV8MATQB+xb9nwwB7l/4Xp5feACEX3EA3l9kAApedwHpX6RfNQFkX8Jf5F57n6Jerx/QXtRex58SXvVevl4oVmQAaeEl9rVgYQFIX8he1V53QMue0YgKXmkBY15CXnee5F8iX5NelF9TXlReMF/iXjNeJ5+pNwQB+xcaDG4WRSC1YW+eO57+AeABIJ6IAJwBiADsAKefAl6FX2EB556kAUVe/IHXnrpeyAEQAXvWBl7ZXuVeVF/bXwVfbhZgnxoMbx5hAbAAZFd3XrVgrx+IASX2wAFTkXkX4ADIANABhgFjnm1eqV6aXqefFV4oVrtee18MAPtf85CkAQdfh19HX9teWl4oVhlfSl5NXolfzV6qXy1fOV7A37lfcwB1Xh9fDAEvgelejV9VX4DeXF9A34ueyV9vXnlfbV/WXmlfjwHpXxQAEN7KX01fWV4tX1DfrV4w3+9f+V6nnrhfLpcDX1gBg14MX0Nfw1+jn0xexF/bX7NfCl4oAIgAiF74X+je80GMXugBI14oAApevQHg3wDfCV/VXkDeSV61X8leyN7tXzZe/ICrX4FAE147nvyAol/BAGJepADiXrBfM15Pnidf2N/w3oDfxN7tAJBfnl8Dnkxf1N803hJe2146AeYEZ590XoNfuN8eX3jeXl7M3sxeo14+XkAAUQBE3/FeCN6Q3/ueYQGQX9xeXN7TXlteNF5Pnv9fxUZ+Xv5etWABXt8WgV/cAUFeLAHBX6zexl8nXuefhgFnXxdeJV4gAGMOV16GXjTf3N+dAfsW2l50ADLf516Fa5dfpV9cuVdf5V+s3qjeKFZo324WHN4EXsNeXl4jX5jf3l5PntjeAN+83gzezV+Q3yTe0N8g305fMN91XsBefZ+o3nhf7N4eX5rfGN5EX9re3N7AXnFfhV4oAUreJV+hAKVeZV+q39deOgClAfsXLk4AADQLnqQBGg3TkUJfc5/TPT9fGg3gAKQA0AGkgeABjgDAAMQBwgGbXrTeJ57vnyX3b57AXzdfut6ZXnzfDN7ZXlDerV4g3u9fZN7AXp9fCl/03sTe+t4B3gbfSN6g33lesN82X++BcN8h3lleNV7A3qTf0N/h3kbeYN9YAREAit6nX6EBVt4XXiAAKt823vLeCl8aUGeep15pAYneHIB0ADbeqt4p39zf8MADXybfaN6a3hjfWt6Y32OeWN523tje2l9jAWdeyQAlX7YAct8q34sBmd+pNhiAq15kX0Jfa167n+tf+56G36DeNl4/nlAAIADAACyXrAGl3pbfCd94AOnfreH6XiXett+GX6XfdN+FXtSAMt4oACVfSnjBniXeD57XXs3eOgBGwAne5546XnpeRd4XXvpfGd9lXmrfcF/B3ygBUd8I34Qs/N4C30zf+N9MX4LfXt5pXyEA2d7uXznew5+53ubfed463l3eUt9pXogAYw7o3xzfaID432gABN5oXg4WJUcaGgKfAZ6Snu4X0S9Cn8oBwp8lYSKe7heiniveuZ/in2nXJWCb3lKfv8LSn/qem96ynnme8p4X4PveSp/Fn8qf+p4Znx6ebhZqnj6eip/qn5oAx9+Jnm4Xmp55ntqfLp/VnrqeQp8Rnq4v+p9BnwMWhp/lnsluQp9X3rmfJp9r9y6fdp8DFuaewuIoVxafAZ/Nnq/fVp4WnjaeyZ8en7afc47P3/afpZ+JnwMWfU7eI3qfAjYr0C6e0xdv3zqebp6X3+6el94XBCfgP94oVt6fpACn3nWfFFd2n36e0xf+npVOgZ5r3p3XJWFBn8Gf8p8pnnWfoZ+Vn4mf4Z7r3xGeLJeRnoA+0Z4n4J/fCD6xng2fWZ9xn4ffYC6Fnnme4C/6nqg/WZ4pn5g/qZ7YP3mf0S4wGWmfFFe4PtmeQp4YP31W4p7gPwg++Z+Ct5g+ek9t93A/iZ9Fn5oAGD8ln/qeeZ9lntMX5Z8Vn3yWeZ9Vn65X1Z81n65XaD7BnvWfc48MPo2fmgBNniqegD+vLkKe5D4oVm2frlbtnwcW3VYOFo4WfWHgAISfRAGeFg4WCAFQACOengFtFkVHDgClYHsttAHQgIAAAA="))
///////////////////////////////////////////////
///////////////////////////////////////////////
/* 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") || "";
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";
ctx.lineWidth = text.thickness;
if ("svgpath" in text) {
ctx.stroke(new Path2D(text.svgpath));
ctx.restore();
return;
}
if ("polygons" in text) {
ctx.fill(getPolygonsPath(text));
ctx.restore();
return;
}
ctx.translate(...text.pos);
ctx.translate(text.thickness * 0.5, 0);
var angle = -text.angle;
if (text.attr.includes("mirrored")) {
ctx.scale(-1, 1);
angle = -angle;
}
var tilt = 0;
if (text.attr.includes("italic")) {
tilt = 0.125;
}
var interline = text.height * 1.5 + text.thickness;
var txt = text.text.split("\n");
// KiCad ignores last empty line.
if (txt[txt.length - 1] == '') txt.pop();
ctx.rotate(deg2rad(angle));
var offsety = (1 - text.justify[1]) / 2 * text.height; // One line offset
offsety -= (txt.length - 1) * (text.justify[1] + 1) / 2 * interline; // Multiline offset
for (var i in txt) {
var lineWidth = text.thickness + interline / 2 * tilt;
for (var j = 0; j < txt[i].length; j++) {
if (txt[i][j] == '\t') {
var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
lineWidth += fourSpaces - lineWidth % fourSpaces;
} else {
if (txt[i][j] == '~') {
j++;
if (j == txt[i].length)
break;
}
lineWidth += pcbdata.font_data[txt[i][j]].w * text.width;
}
}
var offsetx = -lineWidth * (text.justify[0] + 1) / 2;
var inOverbar = false;
for (var j = 0; j < txt[i].length; j++) {
if (config.kicad_text_formatting) {
if (txt[i][j] == '\t') {
var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
offsetx += fourSpaces - offsetx % fourSpaces;
continue;
} else if (txt[i][j] == '~') {
j++;
if (j == txt[i].length)
break;
if (txt[i][j] != '~') {
inOverbar = !inOverbar;
}
}
}
var glyph = pcbdata.font_data[txt[i][j]];
if (inOverbar) {
var overbarStart = [offsetx, -text.height * 1.4 + offsety];
var overbarEnd = [offsetx + text.width * glyph.w, overbarStart[1]];
if (!lastHadOverbar) {
overbarStart[0] += text.height * 1.4 * tilt;
lastHadOverbar = true;
}
ctx.beginPath();
ctx.moveTo(...overbarStart);
ctx.lineTo(...overbarEnd);
ctx.stroke();
} else {
lastHadOverbar = false;
}
for (var line of glyph.l) {
ctx.beginPath();
ctx.moveTo(...calcFontPoint(line[0], text, offsetx, offsety, tilt));
for (var k = 1; k < line.length; k++) {
ctx.lineTo(...calcFontPoint(line[k], text, offsetx, offsety, tilt));
}
ctx.stroke();
}
offsetx += glyph.w * text.width;
}
offsety += interline;
}
ctx.restore();
}
function drawedge(ctx, scalefactor, edge, color) {
ctx.strokeStyle = color;
ctx.fillStyle = color;
ctx.lineWidth = Math.max(1 / scalefactor, edge.width);
ctx.lineCap = "round";
ctx.lineJoin = "round";
if ("svgpath" in edge) {
ctx.stroke(new Path2D(edge.svgpath));
} else {
ctx.beginPath();
if (edge.type == "segment") {
ctx.moveTo(...edge.start);
ctx.lineTo(...edge.end);
}
if (edge.type == "rect") {
ctx.moveTo(...edge.start);
ctx.lineTo(edge.start[0], edge.end[1]);
ctx.lineTo(...edge.end);
ctx.lineTo(edge.end[0], edge.start[1]);
ctx.lineTo(...edge.start);
}
if (edge.type == "arc") {
ctx.arc(
...edge.start,
edge.radius,
deg2rad(edge.startangle),
deg2rad(edge.endangle));
}
if (edge.type == "circle") {
ctx.arc(
...edge.start,
edge.radius,
0, 2 * Math.PI);
ctx.closePath();
}
if (edge.type == "curve") {
ctx.moveTo(...edge.start);
ctx.bezierCurveTo(...edge.cpa, ...edge.cpb, ...edge.end);
}
if("filled" in edge && edge.filled)
ctx.fill();
else
ctx.stroke();
}
}
function getChamferedRectPath(size, radius, chamfpos, chamfratio) {
// chamfpos is a bitmask, left = 1, right = 2, bottom left = 4, bottom right = 8
var path = new Path2D();
var width = size[0];
var height = size[1];
var x = width * -0.5;
var y = height * -0.5;
var chamfOffset = Math.min(width, height) * chamfratio;
path.moveTo(x, 0);
if (chamfpos & 4) {
path.lineTo(x, y + height - chamfOffset);
path.lineTo(x + chamfOffset, y + height);
path.lineTo(0, y + height);
} else {
path.arcTo(x, y + height, x + width, y + height, radius);
}
if (chamfpos & 8) {
path.lineTo(x + width - chamfOffset, y + height);
path.lineTo(x + width, y + height - chamfOffset);
path.lineTo(x + width, 0);
} else {
path.arcTo(x + width, y + height, x + width, y, radius);
}
if (chamfpos & 2) {
path.lineTo(x + width, y + chamfOffset);
path.lineTo(x + width - chamfOffset, y);
path.lineTo(0, y);
} else {
path.arcTo(x + width, y, x, y, radius);
}
if (chamfpos & 1) {
path.lineTo(x + chamfOffset, y);
path.lineTo(x, y + chamfOffset);
path.lineTo(x, 0);
} else {
path.arcTo(x, y, x, y + height, radius);
}
path.closePath();
return path;
}
function getOblongPath(size) {
return getChamferedRectPath(size, Math.min(size[0], size[1]) / 2, 0, 0);
}
function getPolygonsPath(shape) {
if (shape.path2d) {
return shape.path2d;
}
if ("svgpath" in shape) {
shape.path2d = new Path2D(shape.svgpath);
} else {
var path = new Path2D();
for (var polygon of shape.polygons) {
path.moveTo(...polygon[0]);
for (var i = 1; i < polygon.length; i++) {
path.lineTo(...polygon[i]);
}
path.closePath();
}
shape.path2d = path;
}
return shape.path2d;
}
function drawPolygonShape(ctx, scalefactor, shape, color) {
ctx.save();
if (!("svgpath" in shape)) {
ctx.translate(...shape.pos);
ctx.rotate(deg2rad(-shape.angle));
}
if("filled" in shape && !shape.filled) {
ctx.strokeStyle = color;
ctx.lineWidth = Math.max(1 / scalefactor, shape.width);
ctx.lineCap = "round";
ctx.lineJoin = "round";
ctx.stroke(getPolygonsPath(shape));
} else {
ctx.fillStyle = color;
ctx.fill(getPolygonsPath(shape));
}
ctx.restore();
}
function drawDrawing(ctx, scalefactor, drawing, color) {
if (["segment", "arc", "circle", "curve", "rect"].includes(drawing.type)) {
drawedge(ctx, scalefactor, drawing, color);
} else if (drawing.type == "polygon") {
drawPolygonShape(ctx, scalefactor, drawing, color);
} else {
drawText(ctx, drawing, color);
}
}
function getCirclePath(radius) {
var path = new Path2D();
path.arc(0, 0, radius, 0, 2 * Math.PI);
path.closePath();
return path;
}
function getCachedPadPath(pad) {
if (!pad.path2d) {
// if path2d is not set, build one and cache it on pad object
if (pad.shape == "rect") {
pad.path2d = new Path2D();
pad.path2d.rect(...pad.size.map(c => -c * 0.5), ...pad.size);
} else if (pad.shape == "oval") {
pad.path2d = getOblongPath(pad.size);
} else if (pad.shape == "circle") {
pad.path2d = getCirclePath(pad.size[0] / 2);
} else if (pad.shape == "roundrect") {
pad.path2d = getChamferedRectPath(pad.size, pad.radius, 0, 0);
} else if (pad.shape == "chamfrect") {
pad.path2d = getChamferedRectPath(pad.size, pad.radius, pad.chamfpos, pad.chamfratio)
} else if (pad.shape == "custom") {
pad.path2d = getPolygonsPath(pad);
}
}
return pad.path2d;
}
function drawPad(ctx, pad, color, outline) {
ctx.save();
ctx.translate(...pad.pos);
ctx.rotate(-deg2rad(pad.angle));
if (pad.offset) {
ctx.translate(...pad.offset);
}
ctx.fillStyle = color;
ctx.strokeStyle = color;
var path = getCachedPadPath(pad);
if (outline) {
ctx.stroke(path);
} else {
ctx.fill(path);
}
ctx.restore();
}
function drawPadHole(ctx, pad, padHoleColor) {
if (pad.type != "th") return;
ctx.save();
ctx.translate(...pad.pos);
ctx.rotate(-deg2rad(pad.angle));
ctx.fillStyle = padHoleColor;
if (pad.drillshape == "oblong") {
ctx.fill(getOblongPath(pad.drillsize));
} else 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("userSelect");
// Remove listeners
document.removeEventListener('mousemove', mouseMoveHandler);
document.removeEventListener('mouseup', mouseUpHandler);
if (wasDragged) {
// Redraw whole BOM
populateBomTable();
}
}
const mouseMoveHandler = function(e) {
// Notice the dragging
wasDragged = true;
// Make the dragged element visible
draggingElement.style.removeProperty("display");
// Set elements position to mouse position
draggingElement.style.left = `${e.screenX - xOffset}px`;
draggingElement.style.top = `${e.screenY - yOffset}px`;
// Forced redrawing of BOM table
if (forcePopulation) {
forcePopulation = false;
// Copy array
phe = Array.from(placeHolderElements);
// populate BOM table again
populateBomHeader(dragName, phe);
populateBomBody(dragName, phe);
}
// Set up array of hidden columns
var hiddenColumns = Array.from(settings.hiddenColumns);
// In the ungrouped mode, quantity don't exist
if (settings.bommode === "ungrouped")
hiddenColumns.push("Quantity");
// If no checkbox fields can be found, we consider them hidden
if (settings.checkboxes.length == 0)
hiddenColumns.push("checkboxes");
// Get table headers and group them into checkboxes, extrafields and normal headers
const bh = document.getElementById("bomhead");
headers = Array.from(bh.querySelectorAll("th"))
headers.shift() // numCol is not part of the columnOrder
headerGroups = []
lastCompoundClass = null;
for (i = 0; i < settings.columnOrder.length; i++) {
cElem = settings.columnOrder[i];
if (hiddenColumns.includes(cElem)) {
// Hidden columns appear as a dummy element
headerGroups.push([]);
continue;
}
elem = headers.filter(e => getColumnOrderName(e) === cElem)[0];
if (elem.classList.contains("bom-checkbox")) {
if (lastCompoundClass === "bom-checkbox") {
cbGroup = headerGroups.pop();
cbGroup.push(elem);
headerGroups.push(cbGroup);
} else {
lastCompoundClass = "bom-checkbox";
headerGroups.push([elem])
}
} else {
headerGroups.push([elem])
}
}
// Copy settings.columnOrder
var columns = Array.from(settings.columnOrder)
// Set up array with indices of hidden columns
var hiddenIndices = hiddenColumns.map(e => settings.columnOrder.indexOf(e));
var dragIndex = columns.indexOf(dragName);
var swapIndex = dragIndex;
var swapDone = false;
// Check if the current dragged element is swapable with the left or right element
if (dragIndex > 0) {
// Get left headers boundingbox
swapIndex = dragIndex - 1;
while (hiddenIndices.includes(swapIndex) && swapIndex > 0)
swapIndex--;
if (!hiddenIndices.includes(swapIndex)) {
box = getBoundingClientRectFromMultiple(headerGroups[swapIndex]);
if (e.clientX < box.left + window.scrollX + (box.width / 2)) {
swapElement = columns[dragIndex];
columns.splice(dragIndex, 1);
columns.splice(swapIndex, 0, swapElement);
forcePopulation = true;
swapDone = true;
}
}
}
if ((!swapDone) && dragIndex < headerGroups.length - 1) {
// Get right headers boundingbox
swapIndex = dragIndex + 1;
while (hiddenIndices.includes(swapIndex))
swapIndex++;
if (swapIndex < headerGroups.length) {
box = getBoundingClientRectFromMultiple(headerGroups[swapIndex]);
if (e.clientX > box.left + window.scrollX + (box.width / 2)) {
swapElement = columns[dragIndex];
columns.splice(dragIndex, 1);
columns.splice(swapIndex, 0, swapElement);
forcePopulation = true;
swapDone = true;
}
}
}
// Write back change to storage
if (swapDone) {
settings.columnOrder = columns
writeStorage("columnOrder", JSON.stringify(columns));
}
}
const mouseDownHandler = function(e) {
var target = e.target;
if (target.tagName.toLowerCase() != "td")
target = target.parentElement;
// Used to check if a dragging has ever happened
wasDragged = false;
// Create new element which will be displayed as the dragged column
draggingElement = document.createElement("div")
draggingElement.classList.add("dragging");
draggingElement.style.display = "none";
draggingElement.style.position = "absolute";
draggingElement.style.overflow = "hidden";
// Get bomhead and bombody elements
const bh = document.getElementById("bomhead");
const bb = document.getElementById("bombody");
// Get all compound headers for the current column
var compoundHeaders;
if (target.classList.contains("bom-checkbox")) {
compoundHeaders = Array.from(bh.querySelectorAll("th.bom-checkbox"));
} else {
compoundHeaders = [target];
}
// Create new table which will display the column
var newTable = document.createElement("table");
newTable.classList.add("bom");
newTable.style.background = "white";
draggingElement.append(newTable);
// Create new header element
var newHeader = document.createElement("thead");
newTable.append(newHeader);
// Set up array for storing all placeholder elements
placeHolderElements = [];
// Add all compound headers to the new thead element and placeholders
compoundHeaders.forEach(function(h) {
clone = cloneElementWithDimensions(h);
newHeader.append(clone);
placeHolderElements.push(clone);
});
// Create new body element
var newBody = document.createElement("tbody");
newTable.append(newBody);
// Get indices for compound headers
var idxs = compoundHeaders.map(e => getBomTableHeaderIndex(e));
// For each row in the BOM body...
var rows = bb.querySelectorAll("tr");
rows.forEach(function(row) {
// ..get the cells for the compound column
const tds = row.querySelectorAll("td");
var copytds = idxs.map(i => tds[i]);
// Add them to the new element and the placeholders
var newRow = document.createElement("tr");
copytds.forEach(function(td) {
clone = cloneElementWithDimensions(td);
newRow.append(clone);
placeHolderElements.push(clone);
});
newBody.append(newRow);
});
// Compute width for compound header
var width = compoundHeaders.reduce((acc, x) => acc + x.clientWidth, 0);
draggingElement.style.width = `${width}px`;
// Insert the new dragging element and disable selection on BOM
bom.insertBefore(draggingElement, null);
bom.style.userSelect = "none";
// Determine the mouse position offset
xOffset = e.screenX - compoundHeaders.reduce((acc, x) => Math.min(acc, x.offsetLeft), compoundHeaders[0].offsetLeft);
yOffset = e.screenY - compoundHeaders[0].offsetTop;
// Get name for the column in settings.columnOrder
dragName = getColumnOrderName(target);
// Change text and class for placeholder elements
placeHolderElements = placeHolderElements.map(function(e) {
newElem = cloneElementWithDimensions(e);
newElem.textContent = "";
newElem.classList.add("placeholder");
return newElem;
});
// On next mouse move, the whole BOM needs to be redrawn to show the placeholders
forcePopulation = true;
// Add listeners for move and up on mouse
document.addEventListener('mousemove', mouseMoveHandler);
document.addEventListener('mouseup', mouseUpHandler);
}
// In netlist mode, there is nothing to reorder
if (settings.bommode === "netlist")
return;
// Add mouseDownHandler to every column except the numCol
bom.querySelectorAll("th")
.forEach(function(head) {
if (!head.classList.contains("numCol")) {
head.onmousedown = mouseDownHandler;
}
});
}
function getBoundingClientRectFromMultiple(elements) {
var elems = Array.from(elements);
if (elems.length == 0)
return null;
var box = elems.shift()
.getBoundingClientRect();
elems.forEach(function(elem) {
var elembox = elem.getBoundingClientRect();
box.left = Math.min(elembox.left, box.left);
box.top = Math.min(elembox.top, box.top);
box.width += elembox.width;
box.height = Math.max(elembox.height, box.height);
});
return box;
}
function cloneElementWithDimensions(elem) {
var newElem = elem.cloneNode(true);
newElem.style.height = window.getComputedStyle(elem).height;
newElem.style.width = window.getComputedStyle(elem).width;
return newElem;
}
function getBomTableHeaderIndex(elem) {
const bh = document.getElementById('bomhead');
const ths = Array.from(bh.querySelectorAll("th"));
return ths.indexOf(elem);
}
function getColumnOrderName(elem) {
var cname = elem.getAttribute("col_name");
if (cname === "bom-checkbox")
return "checkboxes";
else
return cname;
}
function resizableGrid(tablehead) {
var cols = tablehead.firstElementChild.children;
var rowWidth = tablehead.offsetWidth;
for (var i = 1; i < cols.length; i++) {
if (cols[i].classList.contains("bom-checkbox"))
continue;
cols[i].style.width = ((cols[i].clientWidth - paddingDiff(cols[i])) * 100 / rowWidth) + '%';
}
for (var i = 1; i < cols.length - 1; i++) {
var div = document.createElement('div');
div.className = "column-width-handle";
cols[i].appendChild(div);
setListeners(div);
}
function setListeners(div) {
var startX, curCol, nxtCol, curColWidth, nxtColWidth, rowWidth;
div.addEventListener('mousedown', function(e) {
e.preventDefault();
e.stopPropagation();
curCol = e.target.parentElement;
nxtCol = curCol.nextElementSibling;
startX = e.pageX;
var padding = paddingDiff(curCol);
rowWidth = curCol.parentElement.offsetWidth;
curColWidth = curCol.clientWidth - padding;
nxtColWidth = nxtCol.clientWidth - padding;
});
document.addEventListener('mousemove', function(e) {
if (startX) {
var diffX = e.pageX - startX;
diffX = -Math.min(-diffX, curColWidth - 20);
diffX = Math.min(diffX, nxtColWidth - 20);
curCol.style.width = ((curColWidth + diffX) * 100 / rowWidth) + '%';
nxtCol.style.width = ((nxtColWidth - diffX) * 100 / rowWidth) + '%';
console.log(`${curColWidth + nxtColWidth} ${(curColWidth + diffX) * 100 / rowWidth + (nxtColWidth - diffX) * 100 / rowWidth}`);
}
});
document.addEventListener('mouseup', function(e) {
curCol = undefined;
nxtCol = undefined;
startX = undefined;
nxtColWidth = undefined;
curColWidth = undefined
});
}
function paddingDiff(col) {
if (getStyleVal(col, 'box-sizing') == 'border-box') {
return 0;
}
var padLeft = getStyleVal(col, 'padding-left');
var padRight = getStyleVal(col, 'padding-right');
return (parseInt(padLeft) + parseInt(padRight));
}
function getStyleVal(elm, css) {
return (window.getComputedStyle(elm, null).getPropertyValue(css))
}
}
///////////////////////////////////////////////
///////////////////////////////////////////////
/* DOM manipulation and misc code */
var bomsplit;
var canvassplit;
var initDone = false;
var bomSortFunction = null;
var currentSortColumn = null;
var currentSortOrder = null;
var currentHighlightedRowId;
var highlightHandlers = [];
var footprintIndexToHandler = {};
var netsToHandler = {};
var markedFootprints = new Set();
var highlightedFootprints = [];
var highlightedNet = null;
var lastClicked;
function dbg(html) {
dbgdiv.innerHTML = html;
}
function redrawIfInitDone() {
if (initDone) {
redrawCanvas(allcanvas.front);
redrawCanvas(allcanvas.back);
}
}
function padsVisible(value) {
writeStorage("padsVisible", value);
settings.renderPads = value;
redrawIfInitDone();
}
function referencesVisible(value) {
writeStorage("referencesVisible", value);
settings.renderReferences = value;
redrawIfInitDone();
}
function valuesVisible(value) {
writeStorage("valuesVisible", value);
settings.renderValues = value;
redrawIfInitDone();
}
function tracksVisible(value) {
writeStorage("tracksVisible", value);
settings.renderTracks = value;
redrawIfInitDone();
}
function zonesVisible(value) {
writeStorage("zonesVisible", value);
settings.renderZones = value;
redrawIfInitDone();
}
function dnpOutline(value) {
writeStorage("dnpOutline", value);
settings.renderDnpOutline = value;
redrawIfInitDone();
}
function setDarkMode(value) {
if (value) {
topmostdiv.classList.add("dark");
} else {
topmostdiv.classList.remove("dark");
}
writeStorage("darkmode", value);
settings.darkMode = value;
redrawIfInitDone();
if (initDone) {
populateBomTable();
}
}
function setShowBOMColumn(field, value) {
if (field === "references") {
var rl = document.getElementById("reflookup");
rl.disabled = !value;
if (!value) {
rl.value = "";
updateRefLookup("");
}
}
var n = settings.hiddenColumns.indexOf(field);
if (value) {
if (n != -1) {
settings.hiddenColumns.splice(n, 1);
}
} else {
if (n == -1) {
settings.hiddenColumns.push(field);
}
}
writeStorage("hiddenColumns", JSON.stringify(settings.hiddenColumns));
if (initDone) {
populateBomTable();
}
redrawIfInitDone();
}
function setFullscreen(value) {
if (value) {
document.documentElement.requestFullscreen();
} else {
document.exitFullscreen();
}
}
function fabricationVisible(value) {
writeStorage("fabricationVisible", value);
settings.renderFabrication = value;
redrawIfInitDone();
}
function silkscreenVisible(value) {
writeStorage("silkscreenVisible", value);
settings.renderSilkscreen = value;
redrawIfInitDone();
}
function setHighlightPin1(value) {
writeStorage("highlightpin1", value);
settings.highlightpin1 = value;
redrawIfInitDone();
}
function setHighlightRowOnClick(value) {
settings.highlightRowOnClick = value;
writeStorage("highlightRowOnClick", value);
if (initDone) {
populateBomTable();
}
}
function getStoredCheckboxRefs(checkbox) {
function convert(ref) {
var intref = parseInt(ref);
if (isNaN(intref)) {
for (var i = 0; i < pcbdata.footprints.length; i++) {
if (pcbdata.footprints[i].ref == ref) {
return i;
}
}
return -1;
} else {
return intref;
}
}
if (!(checkbox in settings.checkboxStoredRefs)) {
var val = readStorage("checkbox_" + checkbox);
settings.checkboxStoredRefs[checkbox] = val ? val : "";
}
if (!settings.checkboxStoredRefs[checkbox]) {
return new Set();
} else {
return new Set(settings.checkboxStoredRefs[checkbox].split(",").map(r => convert(r)).filter(a => a >= 0));
}
}
function getCheckboxState(checkbox, references) {
var storedRefsSet = getStoredCheckboxRefs(checkbox);
var currentRefsSet = new Set(references.map(r => r[1]));
// Get difference of current - stored
var difference = new Set(currentRefsSet);
for (ref of storedRefsSet) {
difference.delete(ref);
}
if (difference.size == 0) {
// All the current refs are stored
return "checked";
} else if (difference.size == currentRefsSet.size) {
// None of the current refs are stored
return "unchecked";
} else {
// Some of the refs are stored
return "indeterminate";
}
}
function setBomCheckboxState(checkbox, element, references) {
var state = getCheckboxState(checkbox, references);
element.checked = (state == "checked");
element.indeterminate = (state == "indeterminate");
}
function createCheckboxHandlers(input, checkbox, references, row) {
var clickHandler = () => {
refsSet = getStoredCheckboxRefs(checkbox);
var markWhenChecked = settings.markWhenChecked == checkbox;
eventArgs = {
checkbox: checkbox,
refs: references,
}
if (input.checked) {
// checkbox ticked
for (var ref of references) {
refsSet.add(ref[1]);
}
if (markWhenChecked) {
row.classList.add("checked");
for (var ref of references) {
markedFootprints.add(ref[1]);
}
drawHighlights();
}
eventArgs.state = 'checked';
} else {
// checkbox unticked
for (var ref of references) {
refsSet.delete(ref[1]);
}
if (markWhenChecked) {
row.classList.remove("checked");
for (var ref of references) {
markedFootprints.delete(ref[1]);
}
drawHighlights();
}
eventArgs.state = 'unchecked';
}
settings.checkboxStoredRefs[checkbox] = [...refsSet].join(",");
writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
updateCheckboxStats(checkbox);
EventHandler.emitEvent(IBOM_EVENT_TYPES.CHECKBOX_CHANGE_EVENT, eventArgs);
}
return [
(e) => {
clickHandler();
},
(e) => {
e.preventDefault();
if (row.onmousemove) row.onmousemove();
},
(e) => {
e.preventDefault();
input.checked = !input.checked;
input.indeterminate = false;
clickHandler();
}
];
}
function clearHighlightedFootprints() {
if (currentHighlightedRowId) {
document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
currentHighlightedRowId = null;
highlightedFootprints = [];
highlightedNet = null;
}
}
function createRowHighlightHandler(rowid, refs, net) {
return function () {
if (currentHighlightedRowId) {
if (currentHighlightedRowId == rowid) {
return;
}
document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
}
document.getElementById(rowid).classList.add("highlighted");
currentHighlightedRowId = rowid;
highlightedFootprints = refs ? refs.map(r => r[1]) : [];
highlightedNet = net;
drawHighlights();
EventHandler.emitEvent(
IBOM_EVENT_TYPES.HIGHLIGHT_EVENT, {
rowid: rowid,
refs: refs,
net: net
});
}
}
function updateNetColors() {
writeStorage("netColors", JSON.stringify(settings.netColors));
redrawIfInitDone();
}
function netColorChangeHandler(net) {
return (event) => {
settings.netColors[net] = event.target.value;
updateNetColors();
}
}
function netColorRightClick(net) {
return (event) => {
if (event.button == 2) {
event.preventDefault();
event.stopPropagation();
var style = getComputedStyle(topmostdiv);
var defaultNetColor = style.getPropertyValue('--track-color').trim();
event.target.value = defaultNetColor;
delete settings.netColors[net];
updateNetColors();
}
}
}
function entryMatches(entry) {
if (settings.bommode == "netlist") {
// entry is just a net name
return entry.toLowerCase().indexOf(filter) >= 0;
}
// check refs
if (!settings.hiddenColumns.includes("References")) {
for (var ref of entry) {
if (ref[0].toLowerCase().indexOf(filter) >= 0) {
return true;
}
}
}
// check fields
for (var i in config.fields) {
var f = config.fields[i];
if (!settings.hiddenColumns.includes(f)) {
for (var ref of entry) {
if (String(pcbdata.bom.fields[ref[1]][i]).toLowerCase().indexOf(filter) >= 0) {
return true;
}
}
}
}
return false;
}
function findRefInEntry(entry) {
return entry.filter(r => r[0].toLowerCase() == reflookup);
}
function highlightFilter(s) {
if (!filter) {
return s;
}
var parts = s.toLowerCase().split(filter);
if (parts.length == 1) {
return s;
}
var r = "";
var pos = 0;
for (var i in parts) {
if (i > 0) {
r += '<mark class="highlight">' +
s.substring(pos, pos + filter.length) +
'</mark>';
pos += filter.length;
}
r += s.substring(pos, pos + parts[i].length);
pos += parts[i].length;
}
return r;
}
function getBomListByLayer(layer) {
switch (layer) {
case 'F': return pcbdata.bom.F.slice();
case 'B': return pcbdata.bom.B.slice();
case 'FB': return pcbdata.bom.both.slice();
}
return [];
}
function getSelectedBomList() {
if (settings.bommode == "netlist") {
return pcbdata.nets.slice();
}
var out = getBomListByLayer(settings.canvaslayout);
if (settings.bommode == "ungrouped") {
// expand bom table
var expandedTable = [];
for (var bomentry of out) {
for (var ref of bomentry) {
expandedTable.push([ref]);
}
}
return expandedTable;
}
return out;
}
function checkboxSetUnsetAllHandler(checkboxname) {
return function () {
var checkboxnum = 0;
while (checkboxnum < settings.checkboxes.length &&
settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
checkboxnum++;
}
if (checkboxnum >= settings.checkboxes.length) {
return;
}
var allset = true;
var checkbox;
var row;
for (row of bombody.childNodes) {
checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
if (!checkbox.checked || checkbox.indeterminate) {
allset = false;
break;
}
}
for (row of bombody.childNodes) {
checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
checkbox.checked = !allset;
checkbox.indeterminate = false;
checkbox.onchange();
}
}
}
function createColumnHeader(name, cls, comparator, is_checkbox = false) {
var th = document.createElement("TH");
th.innerHTML = name;
th.classList.add(cls);
if (is_checkbox)
th.setAttribute("col_name", "bom-checkbox");
else
th.setAttribute("col_name", name);
var span = document.createElement("SPAN");
span.classList.add("sortmark");
span.classList.add("none");
th.appendChild(span);
var spacer = document.createElement("div");
spacer.className = "column-spacer";
th.appendChild(spacer);
spacer.onclick = function () {
if (currentSortColumn && th !== currentSortColumn) {
// Currently sorted by another column
currentSortColumn.childNodes[1].classList.remove(currentSortOrder);
currentSortColumn.childNodes[1].classList.add("none");
currentSortColumn = null;
currentSortOrder = null;
}
if (currentSortColumn && th === currentSortColumn) {
// Already sorted by this column
if (currentSortOrder == "asc") {
// Sort by this column, descending order
bomSortFunction = function (a, b) {
return -comparator(a, b);
}
currentSortColumn.childNodes[1].classList.remove("asc");
currentSortColumn.childNodes[1].classList.add("desc");
currentSortOrder = "desc";
} else {
// Unsort
bomSortFunction = null;
currentSortColumn.childNodes[1].classList.remove("desc");
currentSortColumn.childNodes[1].classList.add("none");
currentSortColumn = null;
currentSortOrder = null;
}
} else {
// Sort by this column, ascending order
bomSortFunction = comparator;
currentSortColumn = th;
currentSortColumn.childNodes[1].classList.remove("none");
currentSortColumn.childNodes[1].classList.add("asc");
currentSortOrder = "asc";
}
populateBomBody();
}
if (is_checkbox) {
spacer.onclick = fancyDblClickHandler(
spacer, spacer.onclick, checkboxSetUnsetAllHandler(name));
}
return th;
}
function populateBomHeader(placeHolderColumn = null, placeHolderElements = null) {
while (bomhead.firstChild) {
bomhead.removeChild(bomhead.firstChild);
}
var tr = document.createElement("TR");
var th = document.createElement("TH");
th.classList.add("numCol");
var vismenu = document.createElement("div");
vismenu.id = "vismenu";
vismenu.classList.add("menu");
var visbutton = document.createElement("div");
visbutton.classList.add("visbtn");
visbutton.classList.add("hideonprint");
var viscontent = document.createElement("div");
viscontent.classList.add("menu-content");
viscontent.id = "vismenu-content";
settings.columnOrder.forEach(column => {
if (typeof column !== "string")
return;
// Skip empty columns
if (column === "checkboxes" && settings.checkboxes.length == 0)
return;
else if (column === "Quantity" && settings.bommode == "ungrouped")
return;
var label = document.createElement("label");
label.classList.add("menu-label");
var input = document.createElement("input");
input.classList.add("visibility_checkbox");
input.type = "checkbox";
input.onchange = function (e) {
setShowBOMColumn(column, e.target.checked)
};
input.checked = !(settings.hiddenColumns.includes(column));
label.appendChild(input);
if (column.length > 0)
label.append(column[0].toUpperCase() + column.slice(1));
viscontent.appendChild(label);
});
viscontent.childNodes[0].classList.add("menu-label-top");
vismenu.appendChild(visbutton);
if (settings.bommode != "netlist") {
vismenu.appendChild(viscontent);
th.appendChild(vismenu);
}
tr.appendChild(th);
var checkboxCompareClosure = function (checkbox) {
return (a, b) => {
var stateA = getCheckboxState(checkbox, a);
var stateB = getCheckboxState(checkbox, b);
if (stateA > stateB) return -1;
if (stateA < stateB) return 1;
return 0;
}
}
var stringFieldCompareClosure = function (fieldIndex) {
return (a, b) => {
var fa = pcbdata.bom.fields[a[0][1]][fieldIndex];
var fb = pcbdata.bom.fields[b[0][1]][fieldIndex];
if (fa != fb) return fa > fb ? 1 : -1;
else return 0;
}
}
var referenceRegex = /(?<prefix>[^0-9]+)(?<number>[0-9]+)/;
var compareRefs = (a, b) => {
var ra = referenceRegex.exec(a);
var rb = referenceRegex.exec(b);
if (ra === null || rb === null) {
if (a != b) return a > b ? 1 : -1;
return 0;
} else {
if (ra.groups.prefix != rb.groups.prefix) {
return ra.groups.prefix > rb.groups.prefix ? 1 : -1;
}
if (ra.groups.number != rb.groups.number) {
return parseInt(ra.groups.number) > parseInt(rb.groups.number) ? 1 : -1;
}
return 0;
}
}
if (settings.bommode == "netlist") {
tr.appendChild(createColumnHeader("Net name", "bom-netname", (a, b) => {
if (a > b) return -1;
if (a < b) return 1;
return 0;
}));
tr.appendChild(createColumnHeader("Color", "bom-color", (a, b) => {
return 0;
}));
} else {
// Filter hidden columns
var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
var valueIndex = config.fields.indexOf("Value");
var footprintIndex = config.fields.indexOf("Footprint");
columns.forEach((column) => {
if (column === placeHolderColumn) {
var n = 1;
if (column === "checkboxes")
n = settings.checkboxes.length;
for (i = 0; i < n; i++) {
td = placeHolderElements.shift();
tr.appendChild(td);
}
return;
} else if (column === "checkboxes") {
for (var checkbox of settings.checkboxes) {
th = createColumnHeader(
checkbox, "bom-checkbox", checkboxCompareClosure(checkbox), true);
tr.appendChild(th);
}
} else if (column === "References") {
tr.appendChild(createColumnHeader("References", "references", (a, b) => {
var i = 0;
while (i < a.length && i < b.length) {
if (a[i][0] != b[i][0]) return compareRefs(a[i][0], b[i][0]);
i++;
}
return a.length - b.length;
}));
} else if (column === "Value") {
tr.appendChild(createColumnHeader("Value", "value", (a, b) => {
var ra = a[0][1], rb = b[0][1];
return valueCompare(
pcbdata.bom.parsedValues[ra], pcbdata.bom.parsedValues[rb],
pcbdata.bom.fields[ra][valueIndex], pcbdata.bom.fields[rb][valueIndex]);
}));
return;
} else if (column === "Footprint") {
tr.appendChild(createColumnHeader(
"Footprint", "footprint", stringFieldCompareClosure(footprintIndex)));
} else if (column === "Quantity" && settings.bommode == "grouped") {
tr.appendChild(createColumnHeader("Quantity", "quantity", (a, b) => {
return a.length - b.length;
}));
} else {
// Other fields
var i = config.fields.indexOf(column);
if (i < 0)
return;
tr.appendChild(createColumnHeader(
column, `field${i + 1}`, stringFieldCompareClosure(i)));
}
});
}
bomhead.appendChild(tr);
}
function populateBomBody(placeholderColumn = null, placeHolderElements = null) {
const urlRegex = /^(https?:\/\/[^\s\/$.?#][^\s]*|file:\/\/([a-zA-Z]:|\/)[^\x00]+)$/;
while (bom.firstChild) {
bom.removeChild(bom.firstChild);
}
highlightHandlers = [];
footprintIndexToHandler = {};
netsToHandler = {};
currentHighlightedRowId = null;
var first = true;
var style = getComputedStyle(topmostdiv);
var defaultNetColor = style.getPropertyValue('--track-color').trim();
bomtable = getSelectedBomList();
if (bomSortFunction) {
bomtable = bomtable.sort(bomSortFunction);
}
for (var i in bomtable) {
var bomentry = bomtable[i];
if (filter && !entryMatches(bomentry)) {
continue;
}
var references = null;
var netname = null;
var tr = document.createElement("TR");
var td = document.createElement("TD");
var rownum = +i + 1;
tr.id = "bomrow" + rownum;
td.textContent = rownum;
tr.appendChild(td);
if (settings.bommode == "netlist") {
netname = bomentry;
td = document.createElement("TD");
td.innerHTML = highlightFilter(netname ? netname : "&lt;no net&gt;");
tr.appendChild(td);
var color = settings.netColors[netname] || defaultNetColor;
td = document.createElement("TD");
var colorBox = document.createElement("INPUT");
colorBox.type = "color";
colorBox.value = color;
colorBox.onchange = netColorChangeHandler(netname);
colorBox.onmouseup = netColorRightClick(netname);
colorBox.oncontextmenu = (e) => e.preventDefault();
td.appendChild(colorBox);
td.classList.add("color-column");
tr.appendChild(td);
} else {
if (reflookup) {
references = findRefInEntry(bomentry);
if (references.length == 0) {
continue;
}
} else {
references = bomentry;
}
// Filter hidden columns
var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
columns.forEach((column) => {
if (column === placeholderColumn) {
var n = 1;
if (column === "checkboxes")
n = settings.checkboxes.length;
for (i = 0; i < n; i++) {
td = placeHolderElements.shift();
tr.appendChild(td);
}
return;
} else if (column === "checkboxes") {
for (var checkbox of settings.checkboxes) {
if (checkbox) {
td = document.createElement("TD");
var input = document.createElement("input");
input.type = "checkbox";
[input.onchange, td.ontouchstart, td.ontouchend] = createCheckboxHandlers(input, checkbox, references, tr);
setBomCheckboxState(checkbox, input, references);
if (input.checked && settings.markWhenChecked == checkbox) {
tr.classList.add("checked");
}
td.appendChild(input);
tr.appendChild(td);
}
}
} else if (column === "References") {
td = document.createElement("TD");
td.innerHTML = highlightFilter(references.map(r => r[0]).join(", "));
tr.appendChild(td);
} else if (column === "Quantity" && settings.bommode == "grouped") {
// Quantity
td = document.createElement("TD");
td.textContent = references.length;
tr.appendChild(td);
} else {
// All the other fields
var field_index = config.fields.indexOf(column)
if (field_index < 0)
return;
var valueSet = new Set();
references.map(r => r[1]).forEach((id) => valueSet.add(pcbdata.bom.fields[id][field_index]));
td = document.createElement("TD");
var output = new Array();
for (let item of valueSet) {
const visible = highlightFilter(String(item));
if (typeof item === 'string' && item.match(urlRegex)) {
output.push(`<a href="${item}" target="_blank">${visible}</a>`);
} else {
output.push(visible);
}
}
td.innerHTML = output.join(", ");
tr.appendChild(td);
}
});
}
bom.appendChild(tr);
var handler = createRowHighlightHandler(tr.id, references, netname);
if (settings.highlightRowOnClick) {
tr.onmousedown = handler;
} else {
tr.onmousemove = handler;
}
highlightHandlers.push({
id: tr.id,
handler: handler,
});
if (references !== null) {
for (var refIndex of references.map(r => r[1])) {
footprintIndexToHandler[refIndex] = handler;
}
}
if (netname !== null) {
netsToHandler[netname] = handler;
}
if ((filter || reflookup) && first) {
handler();
first = false;
}
}
EventHandler.emitEvent(
IBOM_EVENT_TYPES.BOM_BODY_CHANGE_EVENT, {
filter: filter,
reflookup: reflookup,
checkboxes: settings.checkboxes,
bommode: settings.bommode,
});
}
function highlightPreviousRow() {
if (!currentHighlightedRowId) {
highlightHandlers[highlightHandlers.length - 1].handler();
} else {
if (highlightHandlers.length > 1 &&
highlightHandlers[0].id == currentHighlightedRowId) {
highlightHandlers[highlightHandlers.length - 1].handler();
} else {
for (var i = 0; i < highlightHandlers.length - 1; i++) {
if (highlightHandlers[i + 1].id == currentHighlightedRowId) {
highlightHandlers[i].handler();
break;
}
}
}
}
smoothScrollToRow(currentHighlightedRowId);
}
function highlightNextRow() {
if (!currentHighlightedRowId) {
highlightHandlers[0].handler();
} else {
if (highlightHandlers.length > 1 &&
highlightHandlers[highlightHandlers.length - 1].id == currentHighlightedRowId) {
highlightHandlers[0].handler();
} else {
for (var i = 1; i < highlightHandlers.length; i++) {
if (highlightHandlers[i - 1].id == currentHighlightedRowId) {
highlightHandlers[i].handler();
break;
}
}
}
}
smoothScrollToRow(currentHighlightedRowId);
}
function populateBomTable() {
populateBomHeader();
populateBomBody();
setBomHandlers();
resizableGrid(bomhead);
}
function footprintsClicked(footprintIndexes) {
var lastClickedIndex = footprintIndexes.indexOf(lastClicked);
for (var i = 1; i <= footprintIndexes.length; i++) {
var refIndex = footprintIndexes[(lastClickedIndex + i) % footprintIndexes.length];
if (refIndex in footprintIndexToHandler) {
lastClicked = refIndex;
footprintIndexToHandler[refIndex]();
smoothScrollToRow(currentHighlightedRowId);
break;
}
}
}
function netClicked(net) {
if (net in netsToHandler) {
netsToHandler[net]();
smoothScrollToRow(currentHighlightedRowId);
} else {
clearHighlightedFootprints();
highlightedNet = net;
drawHighlights();
}
}
function updateFilter(input) {
filter = input.toLowerCase();
populateBomTable();
}
function updateRefLookup(input) {
reflookup = input.toLowerCase();
populateBomTable();
}
function changeCanvasLayout(layout) {
document.getElementById("fl-btn").classList.remove("depressed");
document.getElementById("fb-btn").classList.remove("depressed");
document.getElementById("bl-btn").classList.remove("depressed");
switch (layout) {
case 'F':
document.getElementById("fl-btn").classList.add("depressed");
if (settings.bomlayout != "bom-only") {
canvassplit.collapse(1);
}
break;
case 'B':
document.getElementById("bl-btn").classList.add("depressed");
if (settings.bomlayout != "bom-only") {
canvassplit.collapse(0);
}
break;
default:
document.getElementById("fb-btn").classList.add("depressed");
if (settings.bomlayout != "bom-only") {
canvassplit.setSizes([50, 50]);
}
}
settings.canvaslayout = layout;
writeStorage("canvaslayout", layout);
resizeAll();
changeBomMode(settings.bommode);
}
function populateMetadata() {
document.getElementById("title").innerHTML = pcbdata.metadata.title;
document.getElementById("revision").innerHTML = "Rev: " + pcbdata.metadata.revision;
document.getElementById("company").innerHTML = pcbdata.metadata.company;
document.getElementById("filedate").innerHTML = pcbdata.metadata.date;
if (pcbdata.metadata.title != "") {
document.title = pcbdata.metadata.title + " BOM";
}
// Calculate board stats
var fp_f = 0,
fp_b = 0,
pads_f = 0,
pads_b = 0,
pads_th = 0;
for (var i = 0; i < pcbdata.footprints.length; i++) {
if (pcbdata.bom.skipped.includes(i)) continue;
var mod = pcbdata.footprints[i];
if (mod.layer == "F") {
fp_f++;
} else {
fp_b++;
}
for (var pad of mod.pads) {
if (pad.type == "th") {
pads_th++;
} else {
if (pad.layers.includes("F")) {
pads_f++;
}
if (pad.layers.includes("B")) {
pads_b++;
}
}
}
}
document.getElementById("stats-components-front").innerHTML = fp_f;
document.getElementById("stats-components-back").innerHTML = fp_b;
document.getElementById("stats-components-total").innerHTML = fp_f + fp_b;
document.getElementById("stats-groups-front").innerHTML = pcbdata.bom.F.length;
document.getElementById("stats-groups-back").innerHTML = pcbdata.bom.B.length;
document.getElementById("stats-groups-total").innerHTML = pcbdata.bom.both.length;
document.getElementById("stats-smd-pads-front").innerHTML = pads_f;
document.getElementById("stats-smd-pads-back").innerHTML = pads_b;
document.getElementById("stats-smd-pads-total").innerHTML = pads_f + pads_b;
document.getElementById("stats-th-pads").innerHTML = pads_th;
// Update version string
document.getElementById("github-link").innerHTML = "InteractiveHtmlBom&nbsp;" +
/^v\d+\.\d+/.exec(pcbdata.ibom_version)[0];
}
function changeBomLayout(layout) {
document.getElementById("bom-btn").classList.remove("depressed");
document.getElementById("lr-btn").classList.remove("depressed");
document.getElementById("tb-btn").classList.remove("depressed");
switch (layout) {
case 'bom-only':
document.getElementById("bom-btn").classList.add("depressed");
if (bomsplit) {
bomsplit.destroy();
bomsplit = null;
canvassplit.destroy();
canvassplit = null;
}
document.getElementById("frontcanvas").style.display = "none";
document.getElementById("backcanvas").style.display = "none";
document.getElementById("topmostdiv").style.height = "";
document.getElementById("topmostdiv").style.display = "block";
break;
case 'top-bottom':
document.getElementById("tb-btn").classList.add("depressed");
document.getElementById("frontcanvas").style.display = "";
document.getElementById("backcanvas").style.display = "";
document.getElementById("topmostdiv").style.height = "100%";
document.getElementById("topmostdiv").style.display = "flex";
document.getElementById("bomdiv").classList.remove("split-horizontal");
document.getElementById("canvasdiv").classList.remove("split-horizontal");
document.getElementById("frontcanvas").classList.add("split-horizontal");
document.getElementById("backcanvas").classList.add("split-horizontal");
if (bomsplit) {
bomsplit.destroy();
bomsplit = null;
canvassplit.destroy();
canvassplit = null;
}
bomsplit = Split(['#bomdiv', '#canvasdiv'], {
sizes: [50, 50],
onDragEnd: resizeAll,
direction: "vertical",
gutterSize: 5
});
canvassplit = Split(['#frontcanvas', '#backcanvas'], {
sizes: [50, 50],
gutterSize: 5,
onDragEnd: resizeAll
});
break;
case 'left-right':
document.getElementById("lr-btn").classList.add("depressed");
document.getElementById("frontcanvas").style.display = "";
document.getElementById("backcanvas").style.display = "";
document.getElementById("topmostdiv").style.height = "100%";
document.getElementById("topmostdiv").style.display = "flex";
document.getElementById("bomdiv").classList.add("split-horizontal");
document.getElementById("canvasdiv").classList.add("split-horizontal");
document.getElementById("frontcanvas").classList.remove("split-horizontal");
document.getElementById("backcanvas").classList.remove("split-horizontal");
if (bomsplit) {
bomsplit.destroy();
bomsplit = null;
canvassplit.destroy();
canvassplit = null;
}
bomsplit = Split(['#bomdiv', '#canvasdiv'], {
sizes: [50, 50],
onDragEnd: resizeAll,
gutterSize: 5
});
canvassplit = Split(['#frontcanvas', '#backcanvas'], {
sizes: [50, 50],
gutterSize: 5,
direction: "vertical",
onDragEnd: resizeAll
});
}
settings.bomlayout = layout;
writeStorage("bomlayout", layout);
changeCanvasLayout(settings.canvaslayout);
}
function changeBomMode(mode) {
document.getElementById("bom-grouped-btn").classList.remove("depressed");
document.getElementById("bom-ungrouped-btn").classList.remove("depressed");
document.getElementById("bom-netlist-btn").classList.remove("depressed");
var chkbxs = document.getElementsByClassName("visibility_checkbox");
switch (mode) {
case 'grouped':
document.getElementById("bom-grouped-btn").classList.add("depressed");
for (var i = 0; i < chkbxs.length; i++) {
chkbxs[i].disabled = false;
}
break;
case 'ungrouped':
document.getElementById("bom-ungrouped-btn").classList.add("depressed");
for (var i = 0; i < chkbxs.length; i++) {
chkbxs[i].disabled = false;
}
break;
case 'netlist':
document.getElementById("bom-netlist-btn").classList.add("depressed");
for (var i = 0; i < chkbxs.length; i++) {
chkbxs[i].disabled = true;
}
}
writeStorage("bommode", mode);
if (mode != settings.bommode) {
settings.bommode = mode;
bomSortFunction = null;
currentSortColumn = null;
currentSortOrder = null;
clearHighlightedFootprints();
}
populateBomTable();
}
function focusFilterField() {
focusInputField(document.getElementById("filter"));
}
function focusRefLookupField() {
focusInputField(document.getElementById("reflookup"));
}
function toggleBomCheckbox(bomrowid, checkboxnum) {
if (!bomrowid || checkboxnum > settings.checkboxes.length) {
return;
}
var bomrow = document.getElementById(bomrowid);
var childNum = checkboxnum + settings.columnOrder.indexOf("checkboxes");
var checkbox = bomrow.childNodes[childNum].childNodes[0];
checkbox.checked = !checkbox.checked;
checkbox.indeterminate = false;
checkbox.onchange();
}
function checkBomCheckbox(bomrowid, checkboxname) {
var checkboxnum = 0;
while (checkboxnum < settings.checkboxes.length &&
settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
checkboxnum++;
}
if (!bomrowid || checkboxnum >= settings.checkboxes.length) {
return;
}
var bomrow = document.getElementById(bomrowid);
var childNum = checkboxnum + 1 + settings.columnOrder.indexOf("checkboxes");
var checkbox = bomrow.childNodes[childNum].childNodes[0];
checkbox.checked = true;
checkbox.indeterminate = false;
checkbox.onchange();
}
function setBomCheckboxes(value) {
writeStorage("bomCheckboxes", value);
settings.checkboxes = value.split(",").map((e) => e.trim()).filter((e) => e);
prepCheckboxes();
populateMarkWhenCheckedOptions();
setMarkWhenChecked(settings.markWhenChecked);
}
function setMarkWhenChecked(value) {
writeStorage("markWhenChecked", value);
settings.markWhenChecked = value;
markedFootprints.clear();
for (var ref of (value ? getStoredCheckboxRefs(value) : [])) {
markedFootprints.add(ref);
}
populateBomTable();
drawHighlights();
}
function prepCheckboxes() {
var table = document.getElementById("checkbox-stats");
while (table.childElementCount > 1) {
table.removeChild(table.lastChild);
}
if (settings.checkboxes.length) {
table.style.display = "";
} else {
table.style.display = "none";
}
for (var checkbox of settings.checkboxes) {
var tr = document.createElement("TR");
var td = document.createElement("TD");
td.innerHTML = checkbox;
tr.appendChild(td);
td = document.createElement("TD");
td.id = "checkbox-stats-" + checkbox;
var progressbar = document.createElement("div");
progressbar.classList.add("bar");
td.appendChild(progressbar);
var text = document.createElement("div");
text.classList.add("text");
td.appendChild(text);
tr.appendChild(td);
table.appendChild(tr);
updateCheckboxStats(checkbox);
}
}
function populateMarkWhenCheckedOptions() {
var container = document.getElementById("markWhenCheckedContainer");
if (settings.checkboxes.length == 0) {
container.parentElement.style.display = "none";
return;
}
container.innerHTML = '';
container.parentElement.style.display = "inline-block";
function createOption(name, displayName) {
var id = "markWhenChecked-" + name;
var div = document.createElement("div");
div.classList.add("radio-container");
var input = document.createElement("input");
input.type = "radio";
input.name = "markWhenChecked";
input.value = name;
input.id = id;
input.onchange = () => setMarkWhenChecked(name);
div.appendChild(input);
// Preserve the selected element when the checkboxes change
if (name == settings.markWhenChecked) {
input.checked = true;
}
var label = document.createElement("label");
label.innerHTML = displayName;
label.htmlFor = id;
div.appendChild(label);
container.appendChild(div);
}
createOption("", "None");
for (var checkbox of settings.checkboxes) {
createOption(checkbox, checkbox);
}
}
function updateCheckboxStats(checkbox) {
var checked = getStoredCheckboxRefs(checkbox).size;
var total = pcbdata.footprints.length - pcbdata.bom.skipped.length;
var percent = checked * 100.0 / total;
var td = document.getElementById("checkbox-stats-" + checkbox);
td.firstChild.style.width = percent + "%";
td.lastChild.innerHTML = checked + "/" + total + " (" + Math.round(percent) + "%)";
}
function constrain(number, min, max) {
return Math.min(Math.max(parseInt(number), min), max);
}
document.onkeydown = function (e) {
switch (e.key) {
case "n":
if (document.activeElement.type == "text") {
return;
}
if (currentHighlightedRowId !== null) {
checkBomCheckbox(currentHighlightedRowId, "placed");
highlightNextRow();
e.preventDefault();
}
break;
case "ArrowUp":
highlightPreviousRow();
e.preventDefault();
break;
case "ArrowDown":
highlightNextRow();
e.preventDefault();
break;
case "ArrowLeft":
case "ArrowRight":
if (document.activeElement.type != "text") {
e.preventDefault();
let boardRotationElement = document.getElementById("boardRotation")
settings.boardRotation = parseInt(boardRotationElement.value); // degrees / 5
if (e.key == "ArrowLeft") {
settings.boardRotation += 3; // 15 degrees
}
else {
settings.boardRotation -= 3;
}
settings.boardRotation = constrain(settings.boardRotation, boardRotationElement.min, boardRotationElement.max);
boardRotationElement.value = settings.boardRotation
setBoardRotation(settings.boardRotation);
}
break;
default:
break;
}
if (e.altKey) {
switch (e.key) {
case "f":
focusFilterField();
e.preventDefault();
break;
case "r":
focusRefLookupField();
e.preventDefault();
break;
case "z":
changeBomLayout("bom-only");
e.preventDefault();
break;
case "x":
changeBomLayout("left-right");
e.preventDefault();
break;
case "c":
changeBomLayout("top-bottom");
e.preventDefault();
break;
case "v":
changeCanvasLayout("F");
e.preventDefault();
break;
case "b":
changeCanvasLayout("FB");
e.preventDefault();
break;
case "n":
changeCanvasLayout("B");
e.preventDefault();
break;
default:
break;
}
if (e.key >= '1' && e.key <= '9') {
toggleBomCheckbox(currentHighlightedRowId, parseInt(e.key));
e.preventDefault();
}
}
}
function hideNetlistButton() {
document.getElementById("bom-ungrouped-btn").classList.remove("middle-button");
document.getElementById("bom-ungrouped-btn").classList.add("right-most-button");
document.getElementById("bom-netlist-btn").style.display = "none";
}
function topToggle() {
var top = document.getElementById("top");
var toptoggle = document.getElementById("toptoggle");
if (top.style.display === "none") {
top.style.display = "flex";
toptoggle.classList.remove("flipped");
} else {
top.style.display = "none";
toptoggle.classList.add("flipped");
}
}
window.onload = function (e) {
initRender();
initStorage();
initDefaults();
initUtils();
cleanGutters();
populateMetadata();
dbgdiv = document.getElementById("dbg");
bom = document.getElementById("bombody");
bomhead = document.getElementById("bomhead");
filter = "";
reflookup = "";
if (!("nets" in pcbdata)) {
hideNetlistButton();
}
initDone = true;
setBomCheckboxes(document.getElementById("bomCheckboxes").value);
// Triggers render
changeBomLayout(settings.bomlayout);
// Users may leave fullscreen without touching the checkbox. Uncheck.
document.addEventListener('fullscreenchange', () => {
if (!document.fullscreenElement)
document.getElementById('fullscreenCheckbox').checked = false;
});
}
window.onresize = resizeAll;
window.matchMedia("print").addListener(resizeAll);
///////////////////////////////////////////////
///////////////////////////////////////////////
// EventHandler.registerCallback(IBOM_EVENT_TYPES.BOM_BODY_CHANGE_EVENT, () => {
// for(var tr of bom.childNodes) {
// tr.onclick = tr.onmousemove;
// tr.onmousemove = null;
// };
// });
///////////////////////////////////////////////
</script>
</head>
<body>
<div id="topmostdiv" class="topmostdiv">
<div id="top">
<div id="fileinfodiv">
<table class="fileinfo">
<tbody>
<tr>
<td id="title" class="title" style="width: 70%">
Title
</td>
<td id="revision" class="title" style="width: 30%">
Revision
</td>
</tr>
<tr>
<td id="company">
Company
</td>
<td id="filedate">
Date
</td>
</tr>
</tbody>
</table>
</div>
<div id="bomcontrols">
<div class="hideonprint menu">
<button class="menubtn"></button>
<div class="menu-content">
<label class="menu-label menu-label-top" style="width: calc(50% - 18px)">
<input id="darkmodeCheckbox" type="checkbox" onchange="setDarkMode(this.checked)">
Dark mode
</label><!-- This comment eats space! All of it!
--><label class="menu-label menu-label-top" style="width: calc(50% - 17px); border-left: 0;">
<input id="fullscreenCheckbox" type="checkbox" onchange="setFullscreen(this.checked)">
Full Screen
</label>
<label class="menu-label" style="width: calc(50% - 18px)">
<input id="fabricationCheckbox" type="checkbox" checked onchange="fabricationVisible(this.checked)">
Fab layer
</label><!-- This comment eats space! All of it!
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
<input id="silkscreenCheckbox" type="checkbox" checked onchange="silkscreenVisible(this.checked)">
Silkscreen
</label>
<label class="menu-label" style="width: calc(50% - 18px)">
<input id="referencesCheckbox" type="checkbox" checked onchange="referencesVisible(this.checked)">
References
</label><!-- This comment eats space! All of it!
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
<input id="valuesCheckbox" type="checkbox" checked onchange="valuesVisible(this.checked)">
Values
</label>
<div id="tracksAndZonesCheckboxes">
<label class="menu-label" style="width: calc(50% - 18px)">
<input id="tracksCheckbox" type="checkbox" checked onchange="tracksVisible(this.checked)">
Tracks
</label><!-- This comment eats space! All of it!
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
<input id="zonesCheckbox" type="checkbox" checked onchange="zonesVisible(this.checked)">
Zones
</label>
</div>
<label class="menu-label" style="width: calc(50% - 18px)">
<input id="padsCheckbox" type="checkbox" checked onchange="padsVisible(this.checked)">
Pads
</label><!-- This comment eats space! All of it!
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
<input id="dnpOutlineCheckbox" type="checkbox" checked onchange="dnpOutline(this.checked)">
DNP outlined
</label>
<label class="menu-label">
<input id="highlightRowOnClickCheckbox" type="checkbox" checked onchange="setHighlightRowOnClick(this.checked)">
Highlight row on click
</label>
<label class="menu-label">
<input id="dragCheckbox" type="checkbox" checked onchange="setRedrawOnDrag(this.checked)">
Continuous redraw on drag
</label>
<label class="menu-label">
Highlight first pin
<form id="highlightpin1">
<div class="flexbox">
<label>
<input type="radio" name="highlightpin1" value="none" onchange="setHighlightPin1('none')">
None
</label>
<label>
<input type="radio" name="highlightpin1" value="all" onchange="setHighlightPin1('all')">
All
</label>
<label>
<input type="radio" name="highlightpin1" value="selected" onchange="setHighlightPin1('selected')">
Selected
</label>
</div>
</form>
</label>
<label class="menu-label">
<span>Board rotation</span>
<span style="float: right"><span id="rotationDegree">0</span>&#176;</span>
<input id="boardRotation" type="range" min="-36" max="36" value="0" class="slider" oninput="setBoardRotation(this.value)">
</label>
<label class="menu-label">
<input id="offsetBackRotationCheckbox" type="checkbox" onchange="setOffsetBackRotation(this.checked)">
Offset back rotation
</label>
<label class="menu-label">
<div style="margin-left: 5px">Bom checkboxes</div>
<input id="bomCheckboxes" class="menu-textbox" type=text
oninput="setBomCheckboxes(this.value)">
</label>
<label class="menu-label">
<div style="margin-left: 5px">Mark when checked</div>
<div id="markWhenCheckedContainer"></div>
</label>
<label class="menu-label">
<span class="shameless-plug">
<span>Created using</span>
<a id="github-link" target="blank" href="https://github.com/openscopeproject/InteractiveHtmlBom">InteractiveHtmlBom</a>
<a target="blank" title="Mouse and keyboard help" href="https://github.com/openscopeproject/InteractiveHtmlBom/wiki/Usage#bom-page-mouse-actions" style="text-decoration: none;"><label class="help-link">?</label></a>
</span>
</label>
</div>
</div>
<div class="button-container hideonprint">
<button id="fl-btn" class="left-most-button" onclick="changeCanvasLayout('F')"
title="Front only">F
</button>
<button id="fb-btn" class="middle-button" onclick="changeCanvasLayout('FB')"
title="Front and Back">FB
</button>
<button id="bl-btn" class="right-most-button" onclick="changeCanvasLayout('B')"
title="Back only">B
</button>
</div>
<div class="button-container hideonprint">
<button id="bom-btn" class="left-most-button" onclick="changeBomLayout('bom-only')"
title="BOM only"></button>
<button id="lr-btn" class="middle-button" onclick="changeBomLayout('left-right')"
title="BOM left, drawings right"></button>
<button id="tb-btn" class="right-most-button" onclick="changeBomLayout('top-bottom')"
title="BOM top, drawings bot"></button>
</div>
<div class="button-container hideonprint">
<button id="bom-grouped-btn" class="left-most-button" onclick="changeBomMode('grouped')"
title="Grouped BOM"></button>
<button id="bom-ungrouped-btn" class="middle-button" onclick="changeBomMode('ungrouped')"
title="Ungrouped BOM"></button>
<button id="bom-netlist-btn" class="right-most-button" onclick="changeBomMode('netlist')"
title="Netlist"></button>
</div>
<div class="hideonprint menu">
<button class="statsbtn"></button>
<div class="menu-content">
<table class="stats">
<tbody>
<tr>
<td width="40%">Board stats</td>
<td>Front</td>
<td>Back</td>
<td>Total</td>
</tr>
<tr>
<td>Components</td>
<td id="stats-components-front">~</td>
<td id="stats-components-back">~</td>
<td id="stats-components-total">~</td>
</tr>
<tr>
<td>Groups</td>
<td id="stats-groups-front">~</td>
<td id="stats-groups-back">~</td>
<td id="stats-groups-total">~</td>
</tr>
<tr>
<td>SMD pads</td>
<td id="stats-smd-pads-front">~</td>
<td id="stats-smd-pads-back">~</td>
<td id="stats-smd-pads-total">~</td>
</tr>
<tr>
<td>TH pads</td>
<td colspan=3 id="stats-th-pads">~</td>
</tr>
</tbody>
</table>
<table class="stats">
<col width="40%"/><col />
<tbody id="checkbox-stats">
<tr>
<td colspan=2 style="border-top: 0">Checkboxes</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="hideonprint menu">
<button class="iobtn"></button>
<div class="menu-content">
<div class="menu-label menu-label-top">
<div style="margin-left: 5px;">Save board image</div>
<div class="flexbox">
<input id="render-save-width" class="menu-textbox" type="text" value="1000" placeholder="Width"
style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
<span>X</span>
<input id="render-save-height" class="menu-textbox" type="text" value="1000" placeholder="Height"
style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
</div>
<label>
<input id="render-save-transparent" type="checkbox">
Transparent background
</label>
<div class="flexbox">
<button class="savebtn" onclick="saveImage('F')">Front</button>
<button class="savebtn" onclick="saveImage('B')">Back</button>
</div>
</div>
<div class="menu-label">
<span style="margin-left: 5px;">Config and checkbox state</span>
<div class="flexbox">
<button class="savebtn" onclick="saveSettings()">Export</button>
<button class="savebtn" onclick="loadSettings()">Import</button>
<button class="savebtn" onclick="resetSettings()">Reset</button>
</div>
</div>
<div class="menu-label">
<span style="margin-left: 5px;">Save bom table as</span>
<div class="flexbox">
<button class="savebtn" onclick="saveBomTable('csv')">csv</button>
<button class="savebtn" onclick="saveBomTable('txt')">txt</button>
</div>
</div>
</div>
</div>
</div>
</div>
<div id="topdivider">
<div class="hideonprint">
<div id="toptoggle" onclick="topToggle()"></div>
</div>
</div>
<div id="bot" class="split" style="flex: 1 1">
<div id="bomdiv" class="split split-horizontal">
<div style="width: 100%">
<input id="reflookup" class="textbox searchbox reflookup hideonprint" type="text" placeholder="Ref lookup"
oninput="updateRefLookup(this.value)">
<input id="filter" class="textbox searchbox filter hideonprint" type="text" placeholder="Filter"
oninput="updateFilter(this.value)">
<div class="button-container hideonprint" style="float: left; margin: 0;">
<button id="copy" title="Copy bom table to clipboard"
onclick="saveBomTable('clipboard')"></button>
</div>
</div>
<div id="dbg"></div>
<table class="bom" id="bomtable">
<thead id="bomhead">
</thead>
<tbody id="bombody">
</tbody>
</table>
</div>
<div id="canvasdiv" class="split split-horizontal">
<div id="frontcanvas" class="split" touch-action="none" style="overflow: hidden">
<div style="position: relative; width: 100%; height: 100%;">
<canvas id="F_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
<canvas id="F_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
<canvas id="F_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
<canvas id="F_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
</div>
</div>
<div id="backcanvas" class="split" touch-action="none" style="overflow: hidden">
<div style="position: relative; width: 100%; height: 100%;">
<canvas id="B_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
<canvas id="B_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
<canvas id="B_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
<canvas id="B_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
</div>
</div>
</div>
</div>
</div>
</body>
</html>