blob: c055c02d437ab2d6be77998e46fe2ee69db2fdfe [file]
<!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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ZQBGlZ2VhpXOleGltZXdleQ8OZXwlYWVllhzlYmV6CxBlaTCGZWEj2GV8xXRlcvibpXIxQOVi5Xnk3GVtNYiTGWV/S1WQkOVwdVAlZaV/VJtlZBVvZWnXW5owOWQFeDl0hWJ5dPlgOWEVajlh+WrZdoV+OXl5Yclh2WUFYUV5hWrwFYVrNm9wTUV1WXvZZ4Vuwc+FaLlgRWS5fHlv2WR5Zvl0RXOFeoV9FX4FaqVu2WV5YYVuRX15ZAAVOWKZc7liAxh3CVlklX7pY0ViKWCFcAV8hXR5ZpVi+XEVaIV2lWD5eZVyRWn5cxVomWcVcYV1BWt5eklgVW+qM6XcGXOFdFV7aWJVaRV4uW4VdLlshXjVcgVxlWqFbRVpVWMVYQV9lXsVdXlrlWmFc1V8sBCVdBl3uW/5f7lsVXeFaNVuVXYVceAUBWhFclVhlXbpYVVm1WQACkVlVWX5bVV51WNVb5VrVX3VdMR5WWxFa4VvOXXGe0VkNXkVcEVg2XhFdDV02XU1cVVyNXlVftVxuWOVdkV0wB5FZ5VzeWE1bdV7+WFcfX5YVXcFe9Vw1WNJazVk1XA1fhV4NWLVbNV/mXC1YjVqNXS1axVkABX5fVVvFXXVfQVokxBhEzgPuWyVc0V8VW21fhl3RX9FcMVin9PfzWVq5WLFZISa5Wd3FmVn5WqlemVoCWTL35EDxW7ldOV5t17+wQV/pXvFZ3V0IITlc3Vv5XSlbBVr5XqlaA5hBW6lZ0sCFXDfXvVlGB8BC7db5XTglvV1JWz1eJ/Q9XgNcPV4n83ldPVnpWd3AA18SIN1ZTAFZXT1ccXFXw8Un2V25WUNeaVj9WllYQ1k5XblesV+ZXnRFuV8TGSlduVs2r4FXIgnRNTAB8VrxWcld8V3ZXpwWPLBOWeXXEiDiXEYFqqOwde0CFjNjWtLhvV/PyHDTY17jS+NdFuep8aNYCVsTXRNayVjaRQVdyVpfxXlZstRxX1ldVUza8ZNfMTcxXH1c3VpDWMNaaVzTXNleA1zDXdNfQ1mFXIbCDV3NX21ctVsNX+1dgVmhXWVfslkdXY1crV7lXeVY7lxNX61edgWZAm1fpludWfVYpVv1X+FeIV6VWUVbzV5FXKFfWlotXB1bZVstXHVc5VxzWXVdrVydWMalYjPVX1FZbV/OW/NcMx5dWDFepo6r9zQG78BDWAVeXIaDXPlc3V69XwNceVo9Wz1eA1qDXN1bA12AI4Nc3VmDW71a3V89XH1eA17DXN1cw1trXNleY1o5X31cBV4n9Wtbq1v8hIXRTARrWqte/eaCxnleFdKbXqwGPVsZWqlca1nJXBOPg1oLdylea1/TWdNcQ1vTXjldfV1DXn1duVjTXENcBV/DWWewKVpTXyKzO1sjW3DAo1/7aqNYk1wjWF8lE1xjX0laOKYJWGlawaMJXONb8GBjWGP0CXUFWOnIE157WKDEaVt7Xxlce1vjXwdeI1iJcYQFsVijg5NfyV1TXztYI1krW1Nfy1vDWdtYM10FXsNY21mpWsdb014zWc1fAV/zX5Vas1iRXi1btVyLXh1dHVuNXx1fi1lhX61YjMP+BPNbTVmaX9McXVgMBMtdXVy7911Yu10FWtv05lObX7lZm14DXr1Ya1z5W2tf610FXBtffV7rX/taaVrrX9lZ61t9WqlaQ1gbW/1afV0XXRtfF1obXqtamV8rWytep0EZWJtaK1xZWltbmV4DXDtfR1+1XNtbQ11pXqNa/VrDXttd+V9XXaleO1nbXFtb6V5bXblYg1o3WT1eI143XQNf11nbXNdaA1nbXVdd/V0xXblfa1uwd5dbD12XXgVcN9ArX833U19XWyNeW1sXXFlf91k9WataD18ZWHFfXOMfhWNYR1jiW/cH018JXqPCq1hTWubBJgAnXAte7V/1WUVfDV6zWWVbjlodXVVadV2LX41Zc112WrUK3yZnWDVbS19nXidYDV+wBTNaJ1qlXe1dRV5vXbVds1xBXy1eTl6tXFFf5V91WCgf711LWqrzZ1ulWsQE517LXSAmL1ivWddYU1gvXlgx11gPW+ddz1qpXNdY+VzPWhtfD1lPXI9dv1+PWHdYV1ujnn9dv1yXWzlaG1kPXbjhuV0/Xs9b11t7QDdeGVwXWTdd6VuDWLdZd1o7XCtZx1kFXbdf1SBPXHdfQ1nbXLdfW193Xitc9183WdtZ91kA2s9cmV4XXg9fT1rXWb9fGV8PXP9ZIN2XW39fINxXW5dd61+3XmtYfV1PWCDcuV0FWxtZ213XWHlcANtg2j9d7OE/W89ar1+6Ay9e2AavW8qJH1zEAx9fNVhvXQtfvl6fXyddn1h1X7NY71qtXnNc/lrsAd5eicAyQ19e811tWt9Z0lvSXsIASloyWNxccqfIRCdYkN4fXG9dJ1mOWKdbs16nXO9dp17vW6XBBlqe7NDaPl8lXYZeC1jtXR9a7VszWe1ZJ1plWB1ZLVynX29Zi1pQ2a1YcN1Q2nDcHulw3uFfnV31Wh9Yn1g6W69Z8NyQ2rVbC1gI3rDbn16LWK1dCNpfX5ZZBl6dWU1f1V9fXB5czV3w3RDbSl7w3x9fpVkLXUjekNsnWItZsNhzWcjfxVruXRccvVoKXU1YH1jNXKVeqNzw2xDcqNsw2EjZlVqfX6jcCNxo3FDac1sI2VDeBl5RXk1eiN9NWSjZ6N6+Xs1aSNqo3ljYjl2o2a5fSNuQ2otYUNkI3JjfMHDCXypawlnCWsjbql5PAyJcxAAABNZMr2pZol18XFpcSWY+wZ+C/ACiBfxaBlrYBP7C4lmNpeJerlwBxWAG/cGaXkJdb8CSWFpc7loO43CJeN5nXo5a4cbjH3DcnlgyXzwHSliyWZ9db1oI2Y1YmNsmXW/H+l7yWJ1aY1StMYLFexkY2fLFiN6QAopavlxE2Atf+gDKWW9aXl4I3sjeKlo42KpdONvY2iJcxAeqXpwEuNtgAAAGFjljuNl8WVyOmN/bn6jEdCb8X3jbr8cxXC4ga1zJMOjc4V2DXwwFZ1qoA5pcklxaXCrBdo0yRVzGxl9c5INa/APTH4TdilvQ3KTbYZr3REjepNlE3ZDbRN8Y39jaxNogIcTekAFo21Tdaxy1tktad/eKA0dEVNoeWDTfilxKXjTcswU03LIBpN1E26TYxN603DjeOl4428ICqls432TYuNxqX7AG5NygBqJYFNunWPqjLHFCxXsbeN3yXJTe4N0uhmdflNqVUfNflAZU2wTeklooQsgnZJWOotTZ1gHU2PTdKNx4BdDe9Nww3/Gb8gasAzJfNNho3MjdZNkmW/paIALyX7TbxN1M3yzdjkTRJZTbKvN02tyFrNpY2Gzf0Nn02/GZ5yE03yjaeAQM2LTeDN+hWGTedlpk2TjajN1k3zjYalpqWeTduNtgAOpYeN/lWCGnRx0U3IgH6liU3Yxi4llhE8za2VhU3yVaLNkE35pZ+AcI2e432IOHGiNSbV7U2Rld1NjjH9TfrNuKWZzabN+c2/TcXN2ABlzY7N+Q3bDe+lns2+zanZ982rjGGnYbHnTdHN102YQHdNp83ALfsAac2jTbnN9THwLbbNzKWxjc7N2C3GTfDN5k3tzY+l3c3OTbjNzEAEzbalo837jcFN1U3ajHpxknYxTazNm83pTd+N1NX8zYWN44BnzaICUE23zaFN3eN6cflXH83qzb/NmaXyMbrN3C3gLfwt1ewjDaIt5E2SLYyNmC2mjbcl7E3ezYBlgc2BGj3AhtWoGmkt8c3UscAXeS2pzaUtgw2kpdUtnrxiLdpN6RX59bflsM39ZYjNyqWfgBkV2i2OgC5NkAAAACUggCTNzqXHjbNBGQxIPVmcK83/xaCkW83ESGZ1sYIV2R9l4s2xLZCt8HIncaIEUy3Ztf9QABX4jdmAay3ZzZUt5s284BstBy2gzactrI3uzd0thC2WjYX1O6pwrYytyDXRoG0Nik28rdAtwi34/H9N/UAoLdItrS3MTdctyuX3LZZNmi2Yzb3N+M2RgCCtk83SzfXx1SAuLY+NnosYrfGLdwBq5aYcISXhCbhNgoAkrfNAJC2/zkfsOo5pLc+MFSXyVecZ9LXcrcNNmy3fTb4nEq2VzbKtrs2XLcqt/S2UzZbGKmmioD2tsKWrPDWthS3MQDwts62CLfRwG4JLregt3Y3yLY3Nyi2tzc8t8tXvLcvF+i2eTaol/k3grdPN2sAs8cZVGa3rzflh3i37zbClwS2eACkxkqiXzZVN+G3WyRmqdrVTLcwtic3yVcst463V7Bat2y3CrbUt4gwurc0twG3tLZtNmq87TcQt8S3c4x7x7KJibZrNsm2+TSst0638reSl+y31Lcct6NW1ze7NkqW3LaotsG3ozbYADk2fLahtkAByJf44WG2Jre6ljhwLsmRt/8XqPHmtyGnsZZ6cISXR/ULNpU3cbZLN9W2Kic1N6uWO0ByVuS2+bYpt5S2RbdKtsW2ZFYqt2029LdxNh62XOgE8O8xFrZwV622+ldttnC3Pre+t/63urcZt3q3Jbf6t6W3zQC8t4a26Lf3NkABuTZVt5i3kza2tsVJCbVdoLW2fgGzNmK3czd9tuU2HzYLNvU31rdNt5K3wTfTtsuID0arNsy3/zY31oO2TrcbN6m2wLeFtum32zbDtqnWmbfgt+6207azmZy1p0ertkm3zLYAtz02gLYFt1q35nFbNx22rredt5y3GFb6tsqXo7dMAWO25bdjNhO2EzcSAca3WLfLtlt8iImEJzM2PjZ4tlg2ZTc9lgS2Zpextja3zACFNyWTWfTTIDSwB7Z5t0k3ybZytym2x7abttq3J7dbtjS2djY7t3q27rY9tnu3kLRVyeSWrbZktrC3H7btt5+2vrcFtuy2P7bNNr+3LTbItzu3I7YXt0G2Y7fBtuO2FbYTt8iXQiFVtre3SzfCJxDjVzH3tiU2dbZK1vW3q5YNt2kAjbeLtnG2RLdfNza2r7YIdsc6vwCrNkm3MbZwAJ+2dDZDtqe2AbZ/t0M2/7f7Nz22CHZ9tl037FZtt3m367dXsbh3P7dFttvWQzfXN+e3MJcjNmW2dzYwdyG2E7YCtje3cHYetvQQ4HCTJD1HiHaituKBc7fClz2X4raq4RK3S7YYd1U3QDBwMSml6rZGVxq3B9Z0Nqm3fTfatiC36be/t+k3XbZZt923BHaQtyrgQmDklu+2QHZrtc7xsrZcd1+23HeKtnh327e8dly3kHaUdjy20Hdlt76WRrZalvk2U7bhtya2PamP9LO32JbnocvWgRE81vzJAgAFISx26Hbxt0s2utEazFh2QHcyt2E3h7Y+tliX8rdidhm2+HYUdgR22bceNmp2ZIjngaS2GncnN+23pHbgd2R30TfFthJ2DLazuGQwJoAGd2pWhncgdkZ2Azbbt9p34nbnt6q2u7RL/OZ3ENYidik2lnc6tlZ2vHfkdiW2pnb+OLZ387bKvQZ23DZHt3C39nZPATx2EHZ6t0M3qrcUWWSwQnb9tueB5neud5p2pHdadmR2nbbkdiZ31namd+JS3ne2d/cRdnYRNu52uQAed1c2Xbcmdz22P6DBdi52nfyud0k3JHYdt/53p7cBd+F3gXc9t1PHvLHedkKW0XZ81jF3oXaXNw53HnfDt552pnedqb8RwXZJN0l2bneDtv53RnYBd8Z3cXedV3I3SakysYZAGXcad7o3hndZd5Z34Hbhd2e2uXeqt3p2J0gClKs2SXZodqc3yXcgtyl2xXfKthF2trbjwM4mQrFEdhbWvnfRd5l2WnaRNrF3eHbWdiV2DLevMTV2iXcud3V2mXZ+dzF22Xexdjl3xXdi17l31HGfx+l2UXYQVuV3nHb2d4V2DndFd662gbZddxtmLXf5dyF3tJcVd2F2A3aQds12Q2WRd7V2TzGtdpq2oXd9d+53lXajdiO2zXZpTd/86nY+dr1267f1d353DXftd413jnbVd8S2s3Zdifp2PXZ1dnZ3sLYLdu12RXbGdq02FHYdNit29ClDdut3bXYjdtN2Z7dVdvF2Anbbd6IoO3dJNzfWfXaLdxt32Xebdk52dHcHdl39ZXcTdpp2FXZTdmF2e3Zxdp124LcldhGoznWHd42363e7d/13e3Zut/t3y3ZBqYajq3YTd2t2R3bJd5d2KXYPdtd2+3dNdmd3T3b0iHd35XaFd8d2/XabdxB2M3afdh4s+3Vfdxd333apNid2HXandst2bHefd2p0APfzdrt2b3aVdu93HXYfd513W3cg9/bBoPbd/Ud3k3Y/d1N2EPbA9492IPb/diFh0Pc2ATD3w3bg9yN3D3cDdzd29fQ3JaS2HzfYd5wxYPew9ld3cPe/dml3PbbQSN52+LZCl+j2Fna4d8j3V3cQ9o93H3a2tzZ3AR2I9hdX+PeY9292v3aedlt3TndyduS0JPbiNqT3gPc/dyd22Pfk9z23XnahSZT3fNcWdgT3WPbk96d2trdBd3T3z3c+dy92bXaXd6T34Pdk96l2tPa2t9uozXSjkaS3YIAhd752ljecAHfXyf2513LXL9ZuCRwxBAh8V5pWgVDI1m4JzFYwIug3ljxk1vGMgvbIdmvWwQDado52gXZE9q+3nPbPd7V2ahENtt63APYM92z2KPfvd4T3kPamdjL2VFerArL3DUBy9vj2x3bU9nD37PY6dkz30vZWJpT2LPbzdxY2gPY6t+r2NPeM98D3wTYJd1r343cs9jz29XaY9ur2WPYa9k12Svc9t52pBvfQtz12F3cFd/L3xvZk9nr2HPaa9x43ZvYqcZnXu3BqEGr2sPZW9uz21vca9vr2cncrbWAgdvbLcQ1B9vbI9gr3BPbw9tL3NvcU9k0xuPcFl3b3rvc7dmz3DvcK9oT2qPdpdmKxxPba9xb2OveW9rr2JveO9qb2N3amdjV3orSD8ed2rPaTd273vvfu9zT2Nvf5V1oAXPfId1NX3veodvL3VPbB91b3QPdR9073k2fwDBhBLveq9z73OvY8dlH3evfw99H3UwEMCCr35vZxlnH3cvZg9r72CfaO9on26fce9hn2vLDm9+H2Rves96n3Q7dWd0t36fa1VsixAfaG99r2tFc59mn2jPfW9kn2nXEU93Zg9Pevdu72lfZO9yX3ywFjd8z3ZfeB9+X3RfeS9ql2dfb59rVW7lOCSV72n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"))
///////////////////////////////////////////////
///////////////////////////////////////////////
/* Utility functions */
var storagePrefix = 'KiCad_HTML_BOM__' + pcbdata.metadata.title + '__' +
pcbdata.metadata.revision + '__#';
var storage;
function initStorage(key) {
try {
window.localStorage.getItem("blank");
storage = window.localStorage;
} catch (e) {
// localStorage not available
}
if (!storage) {
try {
window.sessionStorage.getItem("blank");
storage = window.sessionStorage;
} catch (e) {
// sessionStorage also not available
}
}
}
function readStorage(key) {
if (storage) {
return storage.getItem(storagePrefix + key);
} else {
return null;
}
}
function writeStorage(key, value) {
if (storage) {
storage.setItem(storagePrefix + key, value);
}
}
function fancyDblClickHandler(el, onsingle, ondouble) {
return function () {
if (el.getAttribute("data-dblclick") == null) {
el.setAttribute("data-dblclick", 1);
setTimeout(function () {
if (el.getAttribute("data-dblclick") == 1) {
onsingle();
}
el.removeAttribute("data-dblclick");
}, 200);
} else {
el.removeAttribute("data-dblclick");
ondouble();
}
}
}
function smoothScrollToRow(rowid) {
document.getElementById(rowid).scrollIntoView({
behavior: "smooth",
block: "center",
inline: "nearest"
});
}
function focusInputField(input) {
input.scrollIntoView(false);
input.focus();
input.select();
}
function saveBomTable(output) {
var text = '';
for (var node of bomhead.childNodes[0].childNodes) {
if (node.firstChild) {
var name = node.firstChild.nodeValue ?? "";
text += (output == 'csv' ? `"${name}"` : name);
}
if (node != bomhead.childNodes[0].lastChild) {
text += (output == 'csv' ? ',' : '\t');
}
}
text += '\n';
for (var row of bombody.childNodes) {
for (var cell of row.childNodes) {
let val = '';
for (var node of cell.childNodes) {
if (node.nodeName == "INPUT") {
if (node.checked) {
val += '✓';
}
} else if ((node.nodeName == "MARK") || (node.nodeName == "A")) {
val += node.firstChild.nodeValue;
} else {
val += node.nodeValue;
}
}
if (output == 'csv') {
val = val.replace(/\"/g, '\"\"'); // pair of double-quote characters
if (isNumeric(val)) {
val = +val; // use number
} else {
val = `"${val}"`; // enclosed within double-quote
}
}
text += val;
if (cell != row.lastChild) {
text += (output == 'csv' ? ',' : '\t');
}
}
text += '\n';
}
if (output != 'clipboard') {
// To file: csv or txt
var blob = new Blob([text], {
type: `text/${output}`
});
saveFile(`${pcbdata.metadata.title}.${output}`, blob);
} else {
// To clipboard
var textArea = document.createElement("textarea");
textArea.classList.add('clipboard-temp');
textArea.value = text;
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
try {
if (document.execCommand('copy')) {
console.log('Bom copied to clipboard.');
}
} catch (err) {
console.log('Can not copy to clipboard.');
}
document.body.removeChild(textArea);
}
}
function isNumeric(str) {
/* https://stackoverflow.com/a/175787 */
return (typeof str != "string" ? false : !isNaN(str) && !isNaN(parseFloat(str)));
}
function removeGutterNode(node) {
for (var i = 0; i < node.childNodes.length; i++) {
if (node.childNodes[i].classList &&
node.childNodes[i].classList.contains("gutter")) {
node.removeChild(node.childNodes[i]);
break;
}
}
}
function cleanGutters() {
removeGutterNode(document.getElementById("bot"));
removeGutterNode(document.getElementById("canvasdiv"));
}
var units = {
prefixes: {
giga: ["G", "g", "giga", "Giga", "GIGA"],
mega: ["M", "mega", "Mega", "MEGA"],
kilo: ["K", "k", "kilo", "Kilo", "KILO"],
milli: ["m", "milli", "Milli", "MILLI"],
micro: ["U", "u", "micro", "Micro", "MICRO", "μ", "µ"], // different utf8 μ
nano: ["N", "n", "nano", "Nano", "NANO"],
pico: ["P", "p", "pico", "Pico", "PICO"],
},
unitsShort: ["R", "r", "Ω", "F", "f", "H", "h"],
unitsLong: [
"OHM", "Ohm", "ohm", "ohms",
"FARAD", "Farad", "farad",
"HENRY", "Henry", "henry"
],
getMultiplier: function (s) {
if (this.prefixes.giga.includes(s)) return 1e9;
if (this.prefixes.mega.includes(s)) return 1e6;
if (this.prefixes.kilo.includes(s)) return 1e3;
if (this.prefixes.milli.includes(s)) return 1e-3;
if (this.prefixes.micro.includes(s)) return 1e-6;
if (this.prefixes.nano.includes(s)) return 1e-9;
if (this.prefixes.pico.includes(s)) return 1e-12;
return 1;
},
valueRegex: null,
valueAltRegex: null,
}
function initUtils() {
var allPrefixes = units.prefixes.giga
.concat(units.prefixes.mega)
.concat(units.prefixes.kilo)
.concat(units.prefixes.milli)
.concat(units.prefixes.micro)
.concat(units.prefixes.nano)
.concat(units.prefixes.pico);
var allUnits = units.unitsShort.concat(units.unitsLong);
units.valueRegex = new RegExp("^([0-9\.]+)" +
"\\s*(" + allPrefixes.join("|") + ")?" +
"(" + allUnits.join("|") + ")?" +
"(\\b.*)?$", "");
units.valueAltRegex = new RegExp("^([0-9]*)" +
"(" + units.unitsShort.join("|") + ")?" +
"([GgMmKkUuNnPp])?" +
"([0-9]*)" +
"(\\b.*)?$", "");
if (config.fields.includes("Value")) {
var index = config.fields.indexOf("Value");
pcbdata.bom["parsedValues"] = {};
var allList = getBomListByLayer('FB').flat();
for (var id in pcbdata.bom.fields) {
var ref_key = allList.find(item => item[1] == Number(id)) || [];
pcbdata.bom.parsedValues[id] = parseValue(pcbdata.bom.fields[id][index], ref_key[0] || '');
}
}
}
function parseValue(val, ref) {
var inferUnit = (unit, ref) => {
if (unit) {
unit = unit.toLowerCase();
if (unit == 'Ω' || unit == "ohm" || unit == "ohms") {
unit = 'r';
}
return unit[0];
}
var resarr = /^([a-z]+)\d+$/i.exec(ref);
switch (Array.isArray(resarr) && resarr[1].toLowerCase()) {
case "c": return 'f';
case "l": return 'h';
case "r":
case "rv": return 'r';
}
return null;
};
val = val.replace(/,/g, "");
var match = units.valueRegex.exec(val);
if (Array.isArray(match)) {
var unit = inferUnit(match[3], ref);
var val_i = parseFloat(match[1]);
if (!unit) return null;
if (match[2]) {
val_i = val_i * units.getMultiplier(match[2]);
}
return {
val: val_i,
unit: unit,
extra: match[4],
}
}
match = units.valueAltRegex.exec(val);
if (Array.isArray(match) && (match[1] || match[4])) {
var unit = inferUnit(match[2], ref);
var val_i = parseFloat(match[1] + "." + match[4]);
if (!unit) return null;
if (match[3]) {
val_i = val_i * units.getMultiplier(match[3]);
}
return {
val: val_i,
unit: unit,
extra: match[5],
}
}
return null;
}
function valueCompare(a, b, stra, strb) {
if (a === null && b === null) {
// Failed to parse both values, compare them as strings.
if (stra != strb) return stra > strb ? 1 : -1;
else return 0;
} else if (a === null) {
return 1;
} else if (b === null) {
return -1;
} else {
if (a.unit != b.unit) return a.unit > b.unit ? 1 : -1;
else if (a.val != b.val) return a.val > b.val ? 1 : -1;
else if (a.extra != b.extra) return a.extra > b.extra ? 1 : -1;
else return 0;
}
}
function validateSaveImgDimension(element) {
var valid = false;
var intValue = 0;
if (/^[1-9]\d*$/.test(element.value)) {
intValue = parseInt(element.value);
if (intValue <= 16000) {
valid = true;
}
}
if (valid) {
element.classList.remove("invalid");
} else {
element.classList.add("invalid");
}
return intValue;
}
function saveImage(layer) {
var width = validateSaveImgDimension(document.getElementById("render-save-width"));
var height = validateSaveImgDimension(document.getElementById("render-save-height"));
var bgcolor = null;
if (!document.getElementById("render-save-transparent").checked) {
var style = getComputedStyle(topmostdiv);
bgcolor = style.getPropertyValue("background-color");
}
if (!width || !height) return;
// Prepare image
var canvas = document.createElement("canvas");
var layerdict = {
transform: {
x: 0,
y: 0,
s: 1,
panx: 0,
pany: 0,
zoom: 1,
},
bg: canvas,
fab: canvas,
silk: canvas,
highlight: canvas,
layer: layer,
}
// Do the rendering
recalcLayerScale(layerdict, width, height);
prepareLayer(layerdict);
clearCanvas(canvas, bgcolor);
drawBackground(layerdict, false);
drawHighlightsOnLayer(layerdict, false);
// Save image
var imgdata = canvas.toDataURL("image/png");
var filename = pcbdata.metadata.title;
if (pcbdata.metadata.revision) {
filename += `.${pcbdata.metadata.revision}`;
}
filename += `.${layer}.png`;
saveFile(filename, dataURLtoBlob(imgdata));
}
function saveSettings() {
var data = {
type: "InteractiveHtmlBom settings",
version: 1,
pcbmetadata: pcbdata.metadata,
settings: settings,
}
var blob = new Blob([JSON.stringify(data, null, 4)], {
type: "application/json"
});
saveFile(`${pcbdata.metadata.title}.settings.json`, blob);
}
function loadSettings() {
var input = document.createElement("input");
input.type = "file";
input.accept = ".settings.json";
input.onchange = function (e) {
var file = e.target.files[0];
var reader = new FileReader();
reader.onload = readerEvent => {
var content = readerEvent.target.result;
var newSettings;
try {
newSettings = JSON.parse(content);
} catch (e) {
alert("Selected file is not InteractiveHtmlBom settings file.");
return;
}
if (newSettings.type != "InteractiveHtmlBom settings") {
alert("Selected file is not InteractiveHtmlBom settings file.");
return;
}
var metadataMatches = newSettings.hasOwnProperty("pcbmetadata");
if (metadataMatches) {
for (var k in pcbdata.metadata) {
if (!newSettings.pcbmetadata.hasOwnProperty(k) || newSettings.pcbmetadata[k] != pcbdata.metadata[k]) {
metadataMatches = false;
}
}
}
if (!metadataMatches) {
var currentMetadata = JSON.stringify(pcbdata.metadata, null, 4);
var fileMetadata = JSON.stringify(newSettings.pcbmetadata, null, 4);
if (!confirm(
`Settins file metadata does not match current metadata.\n\n` +
`Page metadata:\n${currentMetadata}\n\n` +
`Settings file metadata:\n${fileMetadata}\n\n` +
`Press OK if you would like to import settings anyway.`)) {
return;
}
}
overwriteSettings(newSettings.settings);
}
reader.readAsText(file, 'UTF-8');
}
input.click();
}
function resetSettings() {
if (!confirm(
`This will reset all checkbox states and other settings.\n\n` +
`Press OK if you want to continue.`)) {
return;
}
if (storage) {
var keys = [];
for (var i = 0; i < storage.length; i++) {
var key = storage.key(i);
if (key.startsWith(storagePrefix)) keys.push(key);
}
for (var key of keys) storage.removeItem(key);
}
location.reload();
}
function overwriteSettings(newSettings) {
initDone = false;
Object.assign(settings, newSettings);
writeStorage("bomlayout", settings.bomlayout);
writeStorage("bommode", settings.bommode);
writeStorage("canvaslayout", settings.canvaslayout);
writeStorage("bomCheckboxes", settings.checkboxes.join(","));
document.getElementById("bomCheckboxes").value = settings.checkboxes.join(",");
for (var checkbox of settings.checkboxes) {
writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
}
writeStorage("markWhenChecked", settings.markWhenChecked);
padsVisible(settings.renderPads);
document.getElementById("padsCheckbox").checked = settings.renderPads;
fabricationVisible(settings.renderFabrication);
document.getElementById("fabricationCheckbox").checked = settings.renderFabrication;
silkscreenVisible(settings.renderSilkscreen);
document.getElementById("silkscreenCheckbox").checked = settings.renderSilkscreen;
referencesVisible(settings.renderReferences);
document.getElementById("referencesCheckbox").checked = settings.renderReferences;
valuesVisible(settings.renderValues);
document.getElementById("valuesCheckbox").checked = settings.renderValues;
tracksVisible(settings.renderTracks);
document.getElementById("tracksCheckbox").checked = settings.renderTracks;
zonesVisible(settings.renderZones);
document.getElementById("zonesCheckbox").checked = settings.renderZones;
dnpOutline(settings.renderDnpOutline);
document.getElementById("dnpOutlineCheckbox").checked = settings.renderDnpOutline;
setRedrawOnDrag(settings.redrawOnDrag);
document.getElementById("dragCheckbox").checked = settings.redrawOnDrag;
setHighlightRowOnClick(settings.highlightRowOnClick);
document.getElementById("highlightRowOnClickCheckbox").checked = settings.highlightRowOnClick;
setDarkMode(settings.darkMode);
document.getElementById("darkmodeCheckbox").checked = settings.darkMode;
setHighlightPin1(settings.highlightpin1);
document.forms.highlightpin1.highlightpin1.value = settings.highlightpin1;
writeStorage("boardRotation", settings.boardRotation);
document.getElementById("boardRotation").value = settings.boardRotation / 5;
document.getElementById("rotationDegree").textContent = settings.boardRotation;
setOffsetBackRotation(settings.offsetBackRotation);
document.getElementById("offsetBackRotationCheckbox").checked = settings.offsetBackRotation;
initDone = true;
prepCheckboxes();
changeBomLayout(settings.bomlayout);
}
function saveFile(filename, blob) {
var link = document.createElement("a");
var objurl = URL.createObjectURL(blob);
link.download = filename;
link.href = objurl;
link.click();
}
function dataURLtoBlob(dataurl) {
var arr = dataurl.split(','),
mime = arr[0].match(/:(.*?);/)[1],
bstr = atob(arr[1]),
n = bstr.length,
u8arr = new Uint8Array(n);
while (n--) {
u8arr[n] = bstr.charCodeAt(n);
}
return new Blob([u8arr], {
type: mime
});
}
var settings = {
canvaslayout: "FB",
bomlayout: "left-right",
bommode: "grouped",
checkboxes: [],
checkboxStoredRefs: {},
darkMode: false,
highlightpin1: "none",
redrawOnDrag: true,
boardRotation: 0,
offsetBackRotation: false,
renderPads: true,
renderReferences: true,
renderValues: true,
renderSilkscreen: true,
renderFabrication: true,
renderDnpOutline: false,
renderTracks: true,
renderZones: true,
columnOrder: [],
hiddenColumns: [],
netColors: {},
}
function initDefaults() {
settings.bomlayout = readStorage("bomlayout");
if (settings.bomlayout === null) {
settings.bomlayout = config.bom_view;
}
if (!['bom-only', 'left-right', 'top-bottom'].includes(settings.bomlayout)) {
settings.bomlayout = config.bom_view;
}
settings.bommode = readStorage("bommode");
if (settings.bommode === null) {
settings.bommode = "grouped";
}
if (settings.bommode == "netlist" && !pcbdata.nets) {
settings.bommode = "grouped";
}
if (!["grouped", "ungrouped", "netlist"].includes(settings.bommode)) {
settings.bommode = "grouped";
}
settings.canvaslayout = readStorage("canvaslayout");
if (settings.canvaslayout === null) {
settings.canvaslayout = config.layer_view;
}
var bomCheckboxes = readStorage("bomCheckboxes");
if (bomCheckboxes === null) {
bomCheckboxes = config.checkboxes;
}
settings.checkboxes = bomCheckboxes.split(",").filter((e) => e);
document.getElementById("bomCheckboxes").value = bomCheckboxes;
var highlightpin1 = readStorage("highlightpin1") || config.highlight_pin1;
if (highlightpin1 === "false") highlightpin1 = "none";
if (highlightpin1 === "true") highlightpin1 = "all";
setHighlightPin1(highlightpin1);
document.forms.highlightpin1.highlightpin1.value = highlightpin1;
settings.markWhenChecked = readStorage("markWhenChecked") || "";
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>