Leningrad2-BDI-TR-DOS/Export/C/BDI Leningrad-2 1C-1 (РТ4А)(C48).html
Alex-2-Graf 74de3fbcfa D
2026-03-18 21:23:07 +01:00

4720 lines
314 KiB
HTML

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Interactive BOM for KiCAD</title>
<style type="text/css">
:root {
--pcb-edge-color: black;
--pad-color: #878787;
--pad-hole-color: #CCCCCC;
--pad-color-highlight: #D04040;
--pad-color-highlight-both: #D0D040;
--pad-color-highlight-marked: #44a344;
--pin1-outline-color: #ffb629;
--pin1-outline-color-highlight: #ffb629;
--pin1-outline-color-highlight-both: #fcbb39;
--pin1-outline-color-highlight-marked: #fdbe41;
--silkscreen-edge-color: #aa4;
--silkscreen-polygon-color: #4aa;
--silkscreen-text-color: #4aa;
--fabrication-edge-color: #907651;
--fabrication-polygon-color: #907651;
--fabrication-text-color: #a27c24;
--track-color: #def5f1;
--track-color-highlight: #D04040;
--zone-color: #def5f1;
--zone-color-highlight: #d0404080;
}
html,
body {
margin: 0px;
height: 100%;
font-family: Verdana, sans-serif;
}
.dark.topmostdiv {
--pcb-edge-color: #eee;
--pad-color: #808080;
--pin1-outline-color: #ffa800;
--pin1-outline-color-highlight: #ccff00;
--track-color: #42524f;
--zone-color: #42524f;
background-color: #252c30;
color: #eee;
}
button {
background-color: #eee;
border: 1px solid #888;
color: black;
height: 44px;
width: 44px;
text-align: center;
text-decoration: none;
display: inline-block;
font-size: 14px;
font-weight: bolder;
}
.dark button {
/* This will be inverted */
background-color: #c3b7b5;
}
button.depressed {
background-color: #0a0;
color: white;
}
.dark button.depressed {
/* This will be inverted */
background-color: #b3b;
}
button:focus {
outline: 0;
}
button#tb-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.32 290.12h5.82M1.32 291.45h5.82' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 292.5v4.23M.26 292.63H8.2' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='1.35' y='295.73'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
}
button#lr-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.06 290.12H3.7m-2.64 1.33H3.7m-2.64 1.32H3.7m-2.64 1.3H3.7m-2.64 1.33H3.7' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 288.8v7.94m0-4.11h3.96' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='5.11' y='291.96'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
}
button#bom-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)' fill='none' stroke='%23000' stroke-width='.4'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' stroke-linejoin='round'/%3E%3Cpath d='M1.59 290.12h5.29M1.59 291.45h5.33M1.59 292.75h5.33M1.59 294.09h5.33M1.59 295.41h5.33'/%3E%3C/g%3E%3C/svg%3E");
}
button#bom-grouped-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m4 0h5m4 0h3M6.1 22h3m3.9 0h5m4 0h4m-16-8h4m4 0h4'/%3E%3Cpath stroke-linecap='null' d='M5 17.5h22M5 26.6h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
}
button#bom-ungrouped-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m-4 8h3m-3 8h4'/%3E%3Cpath stroke-linecap='null' d='M5 13.5h22m-22 8h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
}
button#bom-netlist-btn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' stroke='%23000' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-width='2' d='M6 26l6-6v-8m13.8-6.3l-6 6v8'/%3E%3Ccircle cx='11.8' cy='9.5' r='2.8' stroke-width='2'/%3E%3Ccircle cx='19.8' cy='22.8' r='2.8' stroke-width='2'/%3E%3C/g%3E%3C/svg%3E");
}
button#copy {
background-image: url("data:image/svg+xml,%3Csvg height='48' viewBox='0 0 48 48' width='48' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h48v48h-48z' fill='none'/%3E%3Cpath d='M32 2h-24c-2.21 0-4 1.79-4 4v28h4v-28h24v-4zm6 8h-22c-2.21 0-4 1.79-4 4v28c0 2.21 1.79 4 4 4h22c2.21 0 4-1.79 4-4v-28c0-2.21-1.79-4-4-4zm0 32h-22v-28h22v28z'/%3E%3C/svg%3E");
background-position: 6px 6px;
background-repeat: no-repeat;
background-size: 26px 26px;
border-radius: 6px;
height: 40px;
width: 40px;
margin: 10px 5px;
}
button#copy:active {
box-shadow: inset 0px 0px 5px #6c6c6c;
}
textarea.clipboard-temp {
position: fixed;
top: 0;
left: 0;
width: 2em;
height: 2em;
padding: 0;
border: None;
outline: None;
box-shadow: None;
background: transparent;
}
.left-most-button {
border-right: 0;
border-top-left-radius: 6px;
border-bottom-left-radius: 6px;
}
.middle-button {
border-right: 0;
}
.right-most-button {
border-top-right-radius: 6px;
border-bottom-right-radius: 6px;
}
.button-container {
font-size: 0;
margin: 0.4rem 0.4rem 0.4rem 0;
}
.dark .button-container {
filter: invert(1);
}
.button-container button {
background-size: 32px 32px;
background-position: 5px 5px;
background-repeat: no-repeat;
}
@media print {
.hideonprint {
display: none;
}
}
canvas {
cursor: crosshair;
}
canvas:active {
cursor: grabbing;
}
.fileinfo {
width: 100%;
max-width: 1000px;
border: none;
padding: 3px;
}
.fileinfo .title {
font-size: 20pt;
font-weight: bold;
}
.fileinfo td {
overflow: hidden;
white-space: nowrap;
max-width: 1px;
width: 50%;
text-overflow: ellipsis;
}
.bom {
border-collapse: collapse;
font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
font-size: 10pt;
table-layout: fixed;
width: 100%;
margin-top: 1px;
position: relative;
}
.bom th,
.bom td {
border: 1px solid black;
padding: 5px;
word-wrap: break-word;
text-align: center;
position: relative;
}
.dark .bom th,
.dark .bom td {
border: 1px solid #777;
}
.bom th {
background-color: #CCCCCC;
background-clip: padding-box;
}
.dark .bom th {
background-color: #3b4749;
}
.bom tr.highlighted:nth-child(n) {
background-color: #cfc;
}
.dark .bom tr.highlighted:nth-child(n) {
background-color: #226022;
}
.bom tr:nth-child(even) {
background-color: #f2f2f2;
}
.dark .bom tr:nth-child(even) {
background-color: #313b40;
}
.bom tr.checked {
color: #1cb53d;
}
.dark .bom tr.checked {
color: #2cce54;
}
.bom tr {
transition: background-color 0.2s;
}
.bom .numCol {
width: 30px;
}
.bom .value {
width: 15%;
}
.bom .quantity {
width: 65px;
}
.bom th .sortmark {
position: absolute;
right: 1px;
top: 1px;
margin-top: -5px;
border-width: 5px;
border-style: solid;
border-color: transparent transparent #221 transparent;
transform-origin: 50% 85%;
transition: opacity 0.2s, transform 0.4s;
}
.dark .bom th .sortmark {
filter: invert(1);
}
.bom th .sortmark.none {
opacity: 0;
}
.bom th .sortmark.desc {
transform: rotate(180deg);
}
.bom th:hover .sortmark.none {
opacity: 0.5;
}
.bom .bom-checkbox {
width: 30px;
position: relative;
user-select: none;
-moz-user-select: none;
}
.bom .bom-checkbox:before {
content: "";
position: absolute;
border-width: 15px;
border-style: solid;
border-color: #51829f transparent transparent transparent;
visibility: hidden;
top: -15px;
}
.bom .bom-checkbox:after {
content: "Double click to set/unset all";
position: absolute;
color: white;
top: -35px;
left: -26px;
background: #51829f;
padding: 5px 15px;
border-radius: 8px;
white-space: nowrap;
visibility: hidden;
}
.bom .bom-checkbox:hover:before,
.bom .bom-checkbox:hover:after {
visibility: visible;
transition: visibility 0.2s linear 1s;
}
.split {
-webkit-box-sizing: border-box;
-moz-box-sizing: border-box;
box-sizing: border-box;
overflow-y: auto;
overflow-x: hidden;
background-color: inherit;
}
.split.split-horizontal,
.gutter.gutter-horizontal {
height: 100%;
float: left;
}
.gutter {
background-color: #ddd;
background-repeat: no-repeat;
background-position: 50%;
transition: background-color 0.3s;
}
.dark .gutter {
background-color: #777;
}
.gutter.gutter-horizontal {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==');
cursor: ew-resize;
width: 5px;
}
.gutter.gutter-vertical {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAFAQMAAABo7865AAAABlBMVEVHcEzMzMzyAv2sAAAAAXRSTlMAQObYZgAAABBJREFUeF5jOAMEEAIEEFwAn3kMwcB6I2AAAAAASUVORK5CYII=');
cursor: ns-resize;
height: 5px;
}
.searchbox {
float: left;
height: 40px;
margin: 10px 5px;
padding: 12px 32px;
font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
font-size: 18px;
box-sizing: border-box;
border: 1px solid #888;
border-radius: 6px;
outline: none;
background-color: #eee;
transition: background-color 0.2s, border 0.2s;
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABNklEQVQ4T8XSMUvDQBQH8P/LElFa/AIZHcTBQSz0I/gFstTBRR2KUC4ldDxw7h0Bl3RRUATxi4iiODgoiLNrbQYp5J6cpJJqomkX33Z37/14d/dIa33MzDuYI4johOI4XhyNRteO46zNYjDzAxE1yBZprVeZ+QbAUhXEGJMA2Ox2u4+fQIa0mPmsCgCgJYQ4t7lfgF0opQYAdv9ABkKI/UnOFCClXKjX61cA1osQY8x9kiRNKeV7IWA3oyhaSdP0FkAtjxhj3hzH2RBCPOf3pzqYHCilfAAX+URm9oMguPzeWSGQvUcMYC8rOBJCHBRdqxTo9/vbRHRqi8bj8XKv1xvODbiuW2u32/bvf0SlDv4XYOY7z/Mavu+nM1+BmQ+NMc0wDF/LprP0DbTWW0T00ul0nn4b7Q87+X4Qmfiq2wAAAABJRU5ErkJggg==');
background-position: 10px 10px;
background-repeat: no-repeat;
}
.dark .searchbox {
background-color: #111;
color: #eee;
}
.searchbox::placeholder {
color: #ccc;
}
.dark .searchbox::placeholder {
color: #666;
}
.filter {
width: calc(60% - 64px);
}
.reflookup {
width: calc(40% - 10px);
}
input[type=text]:focus {
background-color: white;
border: 1px solid #333;
}
.dark input[type=text]:focus {
background-color: #333;
border: 1px solid #ccc;
}
mark.highlight {
background-color: #5050ff;
color: #fff;
padding: 2px;
border-radius: 6px;
}
.dark mark.highlight {
background-color: #76a6da;
color: #111;
}
.menubtn {
background-color: white;
border: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36' viewBox='0 0 20 20'%3E%3Cpath fill='none' d='M0 0h20v20H0V0z'/%3E%3Cpath d='M15.95 10.78c.03-.25.05-.51.05-.78s-.02-.53-.06-.78l1.69-1.32c.15-.12.19-.34.1-.51l-1.6-2.77c-.1-.18-.31-.24-.49-.18l-1.99.8c-.42-.32-.86-.58-1.35-.78L12 2.34c-.03-.2-.2-.34-.4-.34H8.4c-.2 0-.36.14-.39.34l-.3 2.12c-.49.2-.94.47-1.35.78l-1.99-.8c-.18-.07-.39 0-.49.18l-1.6 2.77c-.1.18-.06.39.1.51l1.69 1.32c-.04.25-.07.52-.07.78s.02.53.06.78L2.37 12.1c-.15.12-.19.34-.1.51l1.6 2.77c.1.18.31.24.49.18l1.99-.8c.42.32.86.58 1.35.78l.3 2.12c.04.2.2.34.4.34h3.2c.2 0 .37-.14.39-.34l.3-2.12c.49-.2.94-.47 1.35-.78l1.99.8c.18.07.39 0 .49-.18l1.6-2.77c.1-.18.06-.39-.1-.51l-1.67-1.32zM10 13c-1.65 0-3-1.35-3-3s1.35-3 3-3 3 1.35 3 3-1.35 3-3 3z'/%3E%3C/svg%3E%0A");
background-position: center;
background-repeat: no-repeat;
}
.statsbtn {
background-color: white;
border: none;
background-image: url("data:image/svg+xml,%3Csvg width='36' height='36' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 6h28v24H4V6zm0 8h28v8H4m9-16v24h10V5.8' fill='none' stroke='%23000' stroke-width='2'/%3E%3C/svg%3E");
background-position: center;
background-repeat: no-repeat;
}
.iobtn {
background-color: white;
border: none;
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36'%3E%3Cpath fill='none' stroke='%23000' stroke-width='2' d='M3 33v-7l6.8-7h16.5l6.7 7v7H3zM3.2 26H33M21 9l5-5.9 5 6h-2.5V15h-5V9H21zm-4.9 0l-5 6-5-6h2.5V3h5v6h2.5z'/%3E%3Cpath fill='none' stroke='%23000' d='M6.1 29.5H10'/%3E%3C/svg%3E");
background-position: center;
background-repeat: no-repeat;
}
.visbtn {
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath fill='none' stroke='%23333' d='M2.5 4.5h5v15h-5zM9.5 4.5h5v15h-5zM16.5 4.5h5v15h-5z'/%3E%3C/svg%3E");
background-position: center;
background-repeat: no-repeat;
padding: 15px;
}
#vismenu-content {
left: 0px;
font-family: Verdana, sans-serif;
}
.dark .statsbtn,
.dark .savebtn,
.dark .menubtn,
.dark .iobtn,
.dark .visbtn {
filter: invert(1);
}
.flexbox {
display: flex;
align-items: center;
justify-content: space-between;
width: 100%;
}
.savebtn {
background-color: #d6d6d6;
width: auto;
height: 30px;
flex-grow: 1;
margin: 5px;
border-radius: 4px;
}
.savebtn:active {
background-color: #0a0;
color: white;
}
.dark .savebtn:active {
/* This will be inverted */
background-color: #b3b;
}
.stats {
border-collapse: collapse;
font-size: 12pt;
table-layout: fixed;
width: 100%;
min-width: 450px;
}
.dark .stats td {
border: 1px solid #bbb;
}
.stats td {
border: 1px solid black;
padding: 5px;
word-wrap: break-word;
text-align: center;
position: relative;
}
#checkbox-stats div {
position: absolute;
left: 0;
top: 0;
height: 100%;
width: 100%;
display: flex;
align-items: center;
justify-content: center;
}
#checkbox-stats .bar {
background-color: rgba(28, 251, 0, 0.6);
}
.menu {
position: relative;
display: inline-block;
margin: 0.4rem 0.4rem 0.4rem 0;
}
.menu-content {
font-size: 12pt !important;
text-align: left !important;
font-weight: normal !important;
display: none;
position: absolute;
background-color: white;
right: 0;
min-width: 300px;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
z-index: 100;
padding: 8px;
}
.dark .menu-content {
background-color: #111;
}
.menu:hover .menu-content {
display: block;
}
.menu:hover .menubtn,
.menu:hover .iobtn,
.menu:hover .statsbtn {
background-color: #eee;
}
.menu-label {
display: inline-block;
padding: 8px;
border: 1px solid #ccc;
border-top: 0;
width: calc(100% - 18px);
}
.menu-label-top {
border-top: 1px solid #ccc;
}
.menu-textbox {
float: left;
height: 24px;
margin: 10px 5px;
padding: 5px 5px;
font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
font-size: 14px;
box-sizing: border-box;
border: 1px solid #888;
border-radius: 4px;
outline: none;
background-color: #eee;
transition: background-color 0.2s, border 0.2s;
width: calc(100% - 10px);
}
.menu-textbox.invalid,
.dark .menu-textbox.invalid {
color: red;
}
.dark .menu-textbox {
background-color: #222;
color: #eee;
}
.radio-container {
margin: 4px;
}
.topmostdiv {
display: flex;
flex-direction: column;
width: 100%;
background-color: white;
transition: background-color 0.3s;
min-height: 100%;
}
#top {
display: flex;
flex-wrap: wrap;
justify-content: flex-end;
align-items: center;
}
#topdivider {
border-bottom: 2px solid black;
display: flex;
justify-content: center;
align-items: center;
}
.dark #topdivider {
border-bottom: 2px solid #ccc;
}
#topdivider>div {
position: relative;
}
#toptoggle {
cursor: pointer;
user-select: none;
position: absolute;
padding: 0.1rem 0.3rem;
top: -0.4rem;
left: -1rem;
font-size: 1.4rem;
line-height: 60%;
border: 1px solid black;
border-radius: 1rem;
background-color: #fff;
z-index: 100;
}
.flipped {
transform: rotate(0.5turn);
}
.dark #toptoggle {
border: 1px solid #fff;
background-color: #222;
}
#fileinfodiv {
flex: 20rem 1 0;
overflow: auto;
}
#bomcontrols {
display: flex;
flex-direction: row-reverse;
}
#bomcontrols>* {
flex-shrink: 0;
}
#dbg {
display: block;
}
::-webkit-scrollbar {
width: 8px;
}
::-webkit-scrollbar-track {
background: #aaa;
}
::-webkit-scrollbar-thumb {
background: #666;
border-radius: 3px;
}
::-webkit-scrollbar-thumb:hover {
background: #555;
}
.slider {
-webkit-appearance: none;
width: 100%;
margin: 3px 0;
padding: 0;
outline: none;
opacity: 0.7;
-webkit-transition: .2s;
transition: opacity .2s;
border-radius: 3px;
}
.slider:hover {
opacity: 1;
}
.slider:focus {
outline: none;
}
.slider::-webkit-slider-runnable-track {
-webkit-appearance: none;
width: 100%;
height: 8px;
background: #d3d3d3;
border-radius: 3px;
border: none;
}
.slider::-webkit-slider-thumb {
-webkit-appearance: none;
width: 15px;
height: 15px;
border-radius: 50%;
background: #0a0;
cursor: pointer;
margin-top: -4px;
}
.dark .slider::-webkit-slider-thumb {
background: #3d3;
}
.slider::-moz-range-thumb {
width: 15px;
height: 15px;
border-radius: 50%;
background: #0a0;
cursor: pointer;
}
.slider::-moz-range-track {
height: 8px;
background: #d3d3d3;
border-radius: 3px;
}
.dark .slider::-moz-range-thumb {
background: #3d3;
}
.slider::-ms-track {
width: 100%;
height: 8px;
border-width: 3px 0;
background: transparent;
border-color: transparent;
color: transparent;
transition: opacity .2s;
}
.slider::-ms-fill-lower {
background: #d3d3d3;
border: none;
border-radius: 3px;
}
.slider::-ms-fill-upper {
background: #d3d3d3;
border: none;
border-radius: 3px;
}
.slider::-ms-thumb {
width: 15px;
height: 15px;
border-radius: 50%;
background: #0a0;
cursor: pointer;
margin: 0;
}
.shameless-plug {
font-size: 0.8em;
text-align: center;
display: block;
}
a {
color: #0278a4;
}
.dark a {
color: #00b9fd;
}
#frontcanvas,
#backcanvas {
touch-action: none;
}
.placeholder {
border: 1px dashed #9f9fda !important;
background-color: #edf2f7 !important;
}
.dragging {
z-index: 999;
}
.dark .dragging>table>tbody>tr {
background-color: #252c30;
}
.dark .placeholder {
filter: invert(1);
}
.column-spacer {
top: 0;
left: 0;
width: calc(100% - 4px);
position: absolute;
cursor: pointer;
user-select: none;
height: 100%;
}
.column-width-handle {
top: 0;
right: 0;
width: 4px;
position: absolute;
cursor: col-resize;
user-select: none;
height: 100%;
}
.column-width-handle:hover {
background-color: #4f99bd;
}
.help-link {
border: 1px solid #0278a4;
padding-inline: 0.3rem;
border-radius: 3px;
cursor: pointer;
}
.dark .help-link {
border: 1px solid #00b9fd;
}
.bom-color {
width: 20%;
}
.color-column input {
width: 1.6rem;
height: 1rem;
border: 1px solid black;
cursor: pointer;
padding: 0;
}
/* removes default styling from input color element */
::-webkit-color-swatch {
border: none;
}
::-webkit-color-swatch-wrapper {
padding: 0;
}
::-moz-color-swatch,
::-moz-focus-inner {
border: none;
}
::-moz-focus-inner {
padding: 0;
}
/* #bomhead {
position: sticky;
top: 0px;
z-index: 1;
} */
</style>
<script type="text/javascript" >
///////////////////////////////////////////////
/*
Split.js - v1.3.5
MIT License
https://github.com/nathancahill/Split.js
*/
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Split=t()}(this,function(){"use strict";var e=window,t=e.document,n="addEventListener",i="removeEventListener",r="getBoundingClientRect",s=function(){return!1},o=e.attachEvent&&!e[n],a=["","-webkit-","-moz-","-o-"].filter(function(e){var n=t.createElement("div");return n.style.cssText="width:"+e+"calc(9px)",!!n.style.length}).shift()+"calc",l=function(e){return"string"==typeof e||e instanceof String?t.querySelector(e):e};return function(u,c){function z(e,t,n){var i=A(y,t,n);Object.keys(i).forEach(function(t){return e.style[t]=i[t]})}function h(e,t){var n=B(y,t);Object.keys(n).forEach(function(t){return e.style[t]=n[t]})}function f(e){var t=E[this.a],n=E[this.b],i=t.size+n.size;t.size=e/this.size*i,n.size=i-e/this.size*i,z(t.element,t.size,this.aGutterSize),z(n.element,n.size,this.bGutterSize)}function m(e){var t;this.dragging&&((t="touches"in e?e.touches[0][b]-this.start:e[b]-this.start)<=E[this.a].minSize+M+this.aGutterSize?t=E[this.a].minSize+this.aGutterSize:t>=this.size-(E[this.b].minSize+M+this.bGutterSize)&&(t=this.size-(E[this.b].minSize+this.bGutterSize)),f.call(this,t),c.onDrag&&c.onDrag())}function g(){var e=E[this.a].element,t=E[this.b].element;this.size=e[r]()[y]+t[r]()[y]+this.aGutterSize+this.bGutterSize,this.start=e[r]()[G]}function d(){var t=this,n=E[t.a].element,r=E[t.b].element;t.dragging&&c.onDragEnd&&c.onDragEnd(),t.dragging=!1,e[i]("mouseup",t.stop),e[i]("touchend",t.stop),e[i]("touchcancel",t.stop),t.parent[i]("mousemove",t.move),t.parent[i]("touchmove",t.move),delete t.stop,delete t.move,n[i]("selectstart",s),n[i]("dragstart",s),r[i]("selectstart",s),r[i]("dragstart",s),n.style.userSelect="",n.style.webkitUserSelect="",n.style.MozUserSelect="",n.style.pointerEvents="",r.style.userSelect="",r.style.webkitUserSelect="",r.style.MozUserSelect="",r.style.pointerEvents="",t.gutter.style.cursor="",t.parent.style.cursor=""}function S(t){var i=this,r=E[i.a].element,o=E[i.b].element;!i.dragging&&c.onDragStart&&c.onDragStart(),t.preventDefault(),i.dragging=!0,i.move=m.bind(i),i.stop=d.bind(i),e[n]("mouseup",i.stop),e[n]("touchend",i.stop),e[n]("touchcancel",i.stop),i.parent[n]("mousemove",i.move),i.parent[n]("touchmove",i.move),r[n]("selectstart",s),r[n]("dragstart",s),o[n]("selectstart",s),o[n]("dragstart",s),r.style.userSelect="none",r.style.webkitUserSelect="none",r.style.MozUserSelect="none",r.style.pointerEvents="none",o.style.userSelect="none",o.style.webkitUserSelect="none",o.style.MozUserSelect="none",o.style.pointerEvents="none",i.gutter.style.cursor=j,i.parent.style.cursor=j,g.call(i)}function v(e){e.forEach(function(t,n){if(n>0){var i=F[n-1],r=E[i.a],s=E[i.b];r.size=e[n-1],s.size=t,z(r.element,r.size,i.aGutterSize),z(s.element,s.size,i.bGutterSize)}})}function p(){F.forEach(function(e){e.parent.removeChild(e.gutter),E[e.a].element.style[y]="",E[e.b].element.style[y]=""})}void 0===c&&(c={});var y,b,G,E,w=l(u[0]).parentNode,D=e.getComputedStyle(w).flexDirection,U=c.sizes||u.map(function(){return 100/u.length}),k=void 0!==c.minSize?c.minSize:100,x=Array.isArray(k)?k:u.map(function(){return k}),L=void 0!==c.gutterSize?c.gutterSize:10,M=void 0!==c.snapOffset?c.snapOffset:30,O=c.direction||"horizontal",j=c.cursor||("horizontal"===O?"ew-resize":"ns-resize"),C=c.gutter||function(e,n){var i=t.createElement("div");return i.className="gutter gutter-"+n,i},A=c.elementStyle||function(e,t,n){var i={};return"string"==typeof t||t instanceof String?i[e]=t:i[e]=o?t+"%":a+"("+t+"% - "+n+"px)",i},B=c.gutterStyle||function(e,t){return n={},n[e]=t+"px",n;var n};"horizontal"===O?(y="width","clientWidth",b="clientX",G="left","paddingLeft"):"vertical"===O&&(y="height","clientHeight",b="clientY",G="top","paddingTop");var F=[];return E=u.map(function(e,t){var i,s={element:l(e),size:U[t],minSize:x[t]};if(t>0&&(i={a:t-1,b:t,dragging:!1,isFirst:1===t,isLast:t===u.length-1,direction:O,parent:w},i.aGutterSize=L,i.bGutterSize=L,i.isFirst&&(i.aGutterSize=L/2),i.isLast&&(i.bGutterSize=L/2),"row-reverse"===D||"column-reverse"===D)){var a=i.a;i.a=i.b,i.b=a}if(!o&&t>0){var c=C(t,O);h(c,L),c[n]("mousedown",S.bind(i)),c[n]("touchstart",S.bind(i)),w.insertBefore(c,s.element),i.gutter=c}0===t||t===u.length-1?z(s.element,s.size,L/2):z(s.element,s.size,L);var f=s.element[r]()[y];return f<s.minSize&&(s.minSize=f),t>0&&F.push(i),s}),o?{setSizes:v,destroy:p}:{setSizes:v,getSizes:function(){return E.map(function(e){return e.size})},collapse:function(e){if(e===F.length){var t=F[e-1];g.call(t),o||f.call(t,t.size-t.bGutterSize)}else{var n=F[e];g.call(n),o||f.call(n,n.aGutterSize)}},destroy:p}}});
///////////////////////////////////////////////
///////////////////////////////////////////////
// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>
// This work is free. You can redistribute it and/or modify it
// under the terms of the WTFPL, Version 2
// For more information see LICENSE.txt or http://www.wtfpl.net/
//
// For more information, the home page:
// http://pieroxy.net/blog/pages/lz-string/testing.html
//
// LZ-based compression algorithm, version 1.4.4
var LZString=function(){var o=String.fromCharCode,i={};var n={decompressFromBase64:function(o){return null==o?"":""==o?null:n._decompress(o.length,32,function(n){return function(o,n){if(!i[o]){i[o]={};for(var t=0;t<o.length;t++)i[o][o.charAt(t)]=t}return i[o][n]}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o.charAt(n))})},_decompress:function(i,n,t){var r,e,a,s,p,u,l,f=[],c=4,d=4,h=3,v="",g=[],m={val:t(0),position:n,index:1};for(r=0;r<3;r+=1)f[r]=r;for(a=0,p=Math.pow(2,2),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 2:return""}for(f[3]=l,e=l,g.push(l);;){if(m.index>i)return"";for(a=0,p=Math.pow(2,h),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(l=a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 2:return g.join("")}if(0==c&&(c=Math.pow(2,h),h++),f[l])v=f[l];else{if(l!==d)return null;v=e+e.charAt(0)}g.push(v),f[d++]=e+v.charAt(0),e=v,0==--c&&(c=Math.pow(2,h),h++)}}};return n}();"function"==typeof define&&define.amd?define(function(){return LZString}):"undefined"!=typeof module&&null!=module?module.exports=LZString:"undefined"!=typeof angular&&null!=angular&&angular.module("LZString",[]).factory("LZString",function(){return LZString});
///////////////////////////////////////////////
///////////////////////////////////////////////
/*!
* PEP v0.4.3 | https://github.com/jquery/PEP
* Copyright jQuery Foundation and other contributors | http://jquery.org/license
*/
!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.PointerEventsPolyfill=b()}(this,function(){"use strict";function a(a,b){b=b||Object.create(null);var c=document.createEvent("Event");c.initEvent(a,b.bubbles||!1,b.cancelable||!1);
for(var d,e=2;e<m.length;e++)d=m[e],c[d]=b[d]||n[e];c.buttons=b.buttons||0;
var f=0;return f=b.pressure&&c.buttons?b.pressure:c.buttons?.5:0,c.x=c.clientX,c.y=c.clientY,c.pointerId=b.pointerId||0,c.width=b.width||0,c.height=b.height||0,c.pressure=f,c.tiltX=b.tiltX||0,c.tiltY=b.tiltY||0,c.twist=b.twist||0,c.tangentialPressure=b.tangentialPressure||0,c.pointerType=b.pointerType||"",c.hwTimestamp=b.hwTimestamp||0,c.isPrimary=b.isPrimary||!1,c}function b(){this.array=[],this.size=0}function c(a,b,c,d){this.addCallback=a.bind(d),this.removeCallback=b.bind(d),this.changedCallback=c.bind(d),A&&(this.observer=new A(this.mutationWatcher.bind(this)))}function d(a){return"body /shadow-deep/ "+e(a)}function e(a){return'[touch-action="'+a+'"]'}function f(a){return"{ -ms-touch-action: "+a+"; touch-action: "+a+"; }"}function g(){if(F){D.forEach(function(a){String(a)===a?(E+=e(a)+f(a)+"\n",G&&(E+=d(a)+f(a)+"\n")):(E+=a.selectors.map(e)+f(a.rule)+"\n",G&&(E+=a.selectors.map(d)+f(a.rule)+"\n"))});var a=document.createElement("style");a.textContent=E,document.head.appendChild(a)}}function h(){if(!window.PointerEvent){if(window.PointerEvent=a,window.navigator.msPointerEnabled){var b=window.navigator.msMaxTouchPoints;Object.defineProperty(window.navigator,"maxTouchPoints",{value:b,enumerable:!0}),u.registerSource("ms",_)}else Object.defineProperty(window.navigator,"maxTouchPoints",{value:0,enumerable:!0}),u.registerSource("mouse",N),void 0!==window.ontouchstart&&u.registerSource("touch",V);u.register(document)}}function i(a){if(!u.pointermap.has(a)){var b=new Error("InvalidPointerId");throw b.name="InvalidPointerId",b}}function j(a){for(var b=a.parentNode;b&&b!==a.ownerDocument;)b=b.parentNode;if(!b){var c=new Error("InvalidStateError");throw c.name="InvalidStateError",c}}function k(a){var b=u.pointermap.get(a);return 0!==b.buttons}function l(){window.Element&&!Element.prototype.setPointerCapture&&Object.defineProperties(Element.prototype,{setPointerCapture:{value:W},releasePointerCapture:{value:X},hasPointerCapture:{value:Y}})}
var m=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","pageX","pageY"],n=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0],o=window.Map&&window.Map.prototype.forEach,p=o?Map:b;b.prototype={set:function(a,b){return void 0===b?this["delete"](a):(this.has(a)||this.size++,void(this.array[a]=b))},has:function(a){return void 0!==this.array[a]},"delete":function(a){this.has(a)&&(delete this.array[a],this.size--)},get:function(a){return this.array[a]},clear:function(){this.array.length=0,this.size=0},forEach:function(a,b){return this.array.forEach(function(c,d){a.call(b,c,d,this)},this)}};var q=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","buttons","pointerId","width","height","pressure","tiltX","tiltY","pointerType","hwTimestamp","isPrimary","type","target","currentTarget","which","pageX","pageY","timeStamp"],r=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0,0,0,0,0,0,"",0,!1,"",null,null,0,0,0,0],s={pointerover:1,pointerout:1,pointerenter:1,pointerleave:1},t="undefined"!=typeof SVGElementInstance,u={pointermap:new p,eventMap:Object.create(null),captureInfo:Object.create(null),eventSources:Object.create(null),eventSourceList:[],registerSource:function(a,b){var c=b,d=c.events;d&&(d.forEach(function(a){c[a]&&(this.eventMap[a]=c[a].bind(c))},this),this.eventSources[a]=c,this.eventSourceList.push(c))},register:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
b.register.call(b,a)},unregister:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
b.unregister.call(b,a)},contains:function(a,b){try{return a.contains(b)}catch(c){return!1}},down:function(a){a.bubbles=!0,this.fireEvent("pointerdown",a)},move:function(a){a.bubbles=!0,this.fireEvent("pointermove",a)},up:function(a){a.bubbles=!0,this.fireEvent("pointerup",a)},enter:function(a){a.bubbles=!1,this.fireEvent("pointerenter",a)},leave:function(a){a.bubbles=!1,this.fireEvent("pointerleave",a)},over:function(a){a.bubbles=!0,this.fireEvent("pointerover",a)},out:function(a){a.bubbles=!0,this.fireEvent("pointerout",a)},cancel:function(a){a.bubbles=!0,this.fireEvent("pointercancel",a)},leaveOut:function(a){this.out(a),this.propagate(a,this.leave,!1)},enterOver:function(a){this.over(a),this.propagate(a,this.enter,!0)},eventHandler:function(a){if(!a._handledByPE){var b=a.type,c=this.eventMap&&this.eventMap[b];c&&c(a),a._handledByPE=!0}},listen:function(a,b){b.forEach(function(b){this.addEvent(a,b)},this)},unlisten:function(a,b){b.forEach(function(b){this.removeEvent(a,b)},this)},addEvent:function(a,b){a.addEventListener(b,this.boundHandler)},removeEvent:function(a,b){a.removeEventListener(b,this.boundHandler)},makeEvent:function(b,c){this.captureInfo[c.pointerId]&&(c.relatedTarget=null);var d=new a(b,c);return c.preventDefault&&(d.preventDefault=c.preventDefault),d._target=d._target||c.target,d},fireEvent:function(a,b){var c=this.makeEvent(a,b);return this.dispatchEvent(c)},cloneEvent:function(a){for(var b,c=Object.create(null),d=0;d<q.length;d++)b=q[d],c[b]=a[b]||r[d],!t||"target"!==b&&"relatedTarget"!==b||c[b]instanceof SVGElementInstance&&(c[b]=c[b].correspondingUseElement);return a.preventDefault&&(c.preventDefault=function(){a.preventDefault()}),c},getTarget:function(a){var b=this.captureInfo[a.pointerId];return b?a._target!==b&&a.type in s?void 0:b:a._target},propagate:function(a,b,c){for(var d=a.target,e=[];d!==document&&!d.contains(a.relatedTarget);) if(e.push(d),d=d.parentNode,!d)return;c&&e.reverse(),e.forEach(function(c){a.target=c,b.call(this,a)},this)},setCapture:function(b,c,d){this.captureInfo[b]&&this.releaseCapture(b,d),this.captureInfo[b]=c,this.implicitRelease=this.releaseCapture.bind(this,b,d),document.addEventListener("pointerup",this.implicitRelease),document.addEventListener("pointercancel",this.implicitRelease);var e=new a("gotpointercapture");e.pointerId=b,e._target=c,d||this.asyncDispatchEvent(e)},releaseCapture:function(b,c){var d=this.captureInfo[b];if(d){this.captureInfo[b]=void 0,document.removeEventListener("pointerup",this.implicitRelease),document.removeEventListener("pointercancel",this.implicitRelease);var e=new a("lostpointercapture");e.pointerId=b,e._target=d,c||this.asyncDispatchEvent(e)}},dispatchEvent:/*scope.external.dispatchEvent || */function(a){var b=this.getTarget(a);if(b)return b.dispatchEvent(a)},asyncDispatchEvent:function(a){requestAnimationFrame(this.dispatchEvent.bind(this,a))}};u.boundHandler=u.eventHandler.bind(u);var v={shadow:function(a){if(a)return a.shadowRoot||a.webkitShadowRoot},canTarget:function(a){return a&&Boolean(a.elementFromPoint)},targetingShadow:function(a){var b=this.shadow(a);if(this.canTarget(b))return b},olderShadow:function(a){var b=a.olderShadowRoot;if(!b){var c=a.querySelector("shadow");c&&(b=c.olderShadowRoot)}return b},allShadows:function(a){for(var b=[],c=this.shadow(a);c;)b.push(c),c=this.olderShadow(c);return b},searchRoot:function(a,b,c){if(a){var d,e,f=a.elementFromPoint(b,c);for(e=this.targetingShadow(f);e;){if(d=e.elementFromPoint(b,c)){var g=this.targetingShadow(d);return this.searchRoot(g,b,c)||d} e=this.olderShadow(e)} return f}},owner:function(a){
for(var b=a;b.parentNode;)b=b.parentNode;
return b.nodeType!==Node.DOCUMENT_NODE&&b.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&(b=document),b},findTarget:function(a){var b=a.clientX,c=a.clientY,d=this.owner(a.target);
return d.elementFromPoint(b,c)||(d=document),this.searchRoot(d,b,c)}},w=Array.prototype.forEach.call.bind(Array.prototype.forEach),x=Array.prototype.map.call.bind(Array.prototype.map),y=Array.prototype.slice.call.bind(Array.prototype.slice),z=Array.prototype.filter.call.bind(Array.prototype.filter),A=window.MutationObserver||window.WebKitMutationObserver,B="[touch-action]",C={subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["touch-action"]};c.prototype={watchSubtree:function(a){
//
this.observer&&v.canTarget(a)&&this.observer.observe(a,C)},enableOnSubtree:function(a){this.watchSubtree(a),a===document&&"complete"!==document.readyState?this.installOnLoad():this.installNewSubtree(a)},installNewSubtree:function(a){w(this.findElements(a),this.addElement,this)},findElements:function(a){return a.querySelectorAll?a.querySelectorAll(B):[]},removeElement:function(a){this.removeCallback(a)},addElement:function(a){this.addCallback(a)},elementChanged:function(a,b){this.changedCallback(a,b)},concatLists:function(a,b){return a.concat(y(b))},
installOnLoad:function(){document.addEventListener("readystatechange",function(){"complete"===document.readyState&&this.installNewSubtree(document)}.bind(this))},isElement:function(a){return a.nodeType===Node.ELEMENT_NODE},flattenMutationTree:function(a){
var b=x(a,this.findElements,this);
return b.push(z(a,this.isElement)),b.reduce(this.concatLists,[])},mutationWatcher:function(a){a.forEach(this.mutationHandler,this)},mutationHandler:function(a){if("childList"===a.type){var b=this.flattenMutationTree(a.addedNodes);b.forEach(this.addElement,this);var c=this.flattenMutationTree(a.removedNodes);c.forEach(this.removeElement,this)}else"attributes"===a.type&&this.elementChanged(a.target,a.oldValue)}};var D=["none","auto","pan-x","pan-y",{rule:"pan-x pan-y",selectors:["pan-x pan-y","pan-y pan-x"]}],E="",F=window.PointerEvent||window.MSPointerEvent,G=!window.ShadowDOMPolyfill&&document.head.createShadowRoot,H=u.pointermap,I=25,J=[1,4,2,8,16],K=!1;try{K=1===new MouseEvent("test",{buttons:1}).buttons}catch(L){}
var M,N={POINTER_ID:1,POINTER_TYPE:"mouse",events:["mousedown","mousemove","mouseup","mouseover","mouseout"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},lastTouches:[],
isEventSimulatedFromTouch:function(a){for(var b,c=this.lastTouches,d=a.clientX,e=a.clientY,f=0,g=c.length;f<g&&(b=c[f]);f++){
var h=Math.abs(d-b.x),i=Math.abs(e-b.y);if(h<=I&&i<=I)return!0}},prepareEvent:function(a){var b=u.cloneEvent(a),c=b.preventDefault;return b.preventDefault=function(){a.preventDefault(),c()},b.pointerId=this.POINTER_ID,b.isPrimary=!0,b.pointerType=this.POINTER_TYPE,b},prepareButtonsForMove:function(a,b){var c=H.get(this.POINTER_ID);
0!==b.which&&c?a.buttons=c.buttons:a.buttons=0,b.buttons=a.buttons},mousedown:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);K||(c.buttons=J[c.button],b&&(c.buttons|=b.buttons),a.buttons=c.buttons),H.set(this.POINTER_ID,a),b&&0!==b.buttons?u.move(c):u.down(c)}},mousemove:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.move(b)}},mouseup:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);if(!K){var d=J[c.button];
c.buttons=b?b.buttons&~d:0,a.buttons=c.buttons}H.set(this.POINTER_ID,a),
c.buttons&=~J[c.button],0===c.buttons?u.up(c):u.move(c)}},mouseover:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.enterOver(b)}},mouseout:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,u.leaveOut(b)}},cancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.deactivateMouse()},deactivateMouse:function(){H["delete"](this.POINTER_ID)}},O=u.captureInfo,P=v.findTarget.bind(v),Q=v.allShadows.bind(v),R=u.pointermap,S=2500,T=200,U="touch-action",V={events:["touchstart","touchmove","touchend","touchcancel"],register:function(a){M.enableOnSubtree(a)},unregister:function(){},elementAdded:function(a){var b=a.getAttribute(U),c=this.touchActionToScrollType(b);c&&(a._scrollType=c,u.listen(a,this.events),
Q(a).forEach(function(a){a._scrollType=c,u.listen(a,this.events)},this))},elementRemoved:function(a){a._scrollType=void 0,u.unlisten(a,this.events),
Q(a).forEach(function(a){a._scrollType=void 0,u.unlisten(a,this.events)},this)},elementChanged:function(a,b){var c=a.getAttribute(U),d=this.touchActionToScrollType(c),e=this.touchActionToScrollType(b);
d&&e?(a._scrollType=d,Q(a).forEach(function(a){a._scrollType=d},this)):e?this.elementRemoved(a):d&&this.elementAdded(a)},scrollTypes:{EMITTER:"none",XSCROLLER:"pan-x",YSCROLLER:"pan-y",SCROLLER:/^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/},touchActionToScrollType:function(a){var b=a,c=this.scrollTypes;return"none"===b?"none":b===c.XSCROLLER?"X":b===c.YSCROLLER?"Y":c.SCROLLER.exec(b)?"XY":void 0},POINTER_TYPE:"touch",firstTouch:null,isPrimaryTouch:function(a){return this.firstTouch===a.identifier},setPrimaryTouch:function(a){
(0===R.size||1===R.size&&R.has(1))&&(this.firstTouch=a.identifier,this.firstXY={X:a.clientX,Y:a.clientY},this.scrolling=!1,this.cancelResetClickCount())},removePrimaryPointer:function(a){a.isPrimary&&(this.firstTouch=null,this.firstXY=null,this.resetClickCount())},clickCount:0,resetId:null,resetClickCount:function(){var a=function(){this.clickCount=0,this.resetId=null}.bind(this);this.resetId=setTimeout(a,T)},cancelResetClickCount:function(){this.resetId&&clearTimeout(this.resetId)},typeToButtons:function(a){var b=0;return"touchstart"!==a&&"touchmove"!==a||(b=1),b},touchToPointer:function(a){var b=this.currentTouchEvent,c=u.cloneEvent(a),d=c.pointerId=a.identifier+2;c.target=O[d]||P(c),c.bubbles=!0,c.cancelable=!0,c.detail=this.clickCount,c.button=0,c.buttons=this.typeToButtons(b.type),c.width=2*(a.radiusX||a.webkitRadiusX||0),c.height=2*(a.radiusY||a.webkitRadiusY||0),c.pressure=a.force||a.webkitForce||.5,c.isPrimary=this.isPrimaryTouch(a),c.pointerType=this.POINTER_TYPE,
c.altKey=b.altKey,c.ctrlKey=b.ctrlKey,c.metaKey=b.metaKey,c.shiftKey=b.shiftKey;
var e=this;return c.preventDefault=function(){e.scrolling=!1,e.firstXY=null,b.preventDefault()},c},processTouches:function(a,b){var c=a.changedTouches;this.currentTouchEvent=a;for(var d,e=0;e<c.length;e++)d=c[e],b.call(this,this.touchToPointer(d))},
shouldScroll:function(a){if(this.firstXY){var b,c=a.currentTarget._scrollType;if("none"===c)
b=!1;else if("XY"===c)
b=!0;else{var d=a.changedTouches[0],e=c,f="Y"===c?"X":"Y",g=Math.abs(d["client"+e]-this.firstXY[e]),h=Math.abs(d["client"+f]-this.firstXY[f]);
b=g>=h}return this.firstXY=null,b}},findTouch:function(a,b){for(var c,d=0,e=a.length;d<e&&(c=a[d]);d++)if(c.identifier===b)return!0},
vacuumTouches:function(a){var b=a.touches;
if(R.size>=b.length){var c=[];R.forEach(function(a,d){
if(1!==d&&!this.findTouch(b,d-2)){var e=a.out;c.push(e)}},this),c.forEach(this.cancelOut,this)}},touchstart:function(a){this.vacuumTouches(a),this.setPrimaryTouch(a.changedTouches[0]),this.dedupSynthMouse(a),this.scrolling||(this.clickCount++,this.processTouches(a,this.overDown))},overDown:function(a){R.set(a.pointerId,{target:a.target,out:a,outTarget:a.target}),u.enterOver(a),u.down(a)},touchmove:function(a){this.scrolling||(this.shouldScroll(a)?(this.scrolling=!0,this.touchcancel(a)):(a.preventDefault(),this.processTouches(a,this.moveOverOut)))},moveOverOut:function(a){var b=a,c=R.get(b.pointerId);
if(c){var d=c.out,e=c.outTarget;u.move(b),d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,
d.target=e,b.target?(u.leaveOut(d),u.enterOver(b)):(
b.target=e,b.relatedTarget=null,this.cancelOut(b))),c.out=b,c.outTarget=b.target}},touchend:function(a){this.dedupSynthMouse(a),this.processTouches(a,this.upOut)},upOut:function(a){this.scrolling||(u.up(a),u.leaveOut(a)),this.cleanUpPointer(a)},touchcancel:function(a){this.processTouches(a,this.cancelOut)},cancelOut:function(a){u.cancel(a),u.leaveOut(a),this.cleanUpPointer(a)},cleanUpPointer:function(a){R["delete"](a.pointerId),this.removePrimaryPointer(a)},
dedupSynthMouse:function(a){var b=N.lastTouches,c=a.changedTouches[0];
if(this.isPrimaryTouch(c)){
var d={x:c.clientX,y:c.clientY};b.push(d);var e=function(a,b){var c=a.indexOf(b);c>-1&&a.splice(c,1)}.bind(null,b,d);setTimeout(e,S)}}};M=new c(V.elementAdded,V.elementRemoved,V.elementChanged,V);var W,X,Y,Z=u.pointermap,$=window.MSPointerEvent&&"number"==typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE,_={events:["MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSGotPointerCapture","MSLostPointerCapture"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},POINTER_TYPES:["","unavailable","touch","pen","mouse"],prepareEvent:function(a){var b=a;return $&&(b=u.cloneEvent(a),b.pointerType=this.POINTER_TYPES[a.pointerType]),b},cleanup:function(a){Z["delete"](a)},MSPointerDown:function(a){Z.set(a.pointerId,a);var b=this.prepareEvent(a);u.down(b)},MSPointerMove:function(a){var b=this.prepareEvent(a);u.move(b)},MSPointerUp:function(a){var b=this.prepareEvent(a);u.up(b),this.cleanup(a.pointerId)},MSPointerOut:function(a){var b=this.prepareEvent(a);u.leaveOut(b)},MSPointerOver:function(a){var b=this.prepareEvent(a);u.enterOver(b)},MSPointerCancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.cleanup(a.pointerId)},MSLostPointerCapture:function(a){var b=u.makeEvent("lostpointercapture",a);u.dispatchEvent(b)},MSGotPointerCapture:function(a){var b=u.makeEvent("gotpointercapture",a);u.dispatchEvent(b)}},aa=window.navigator;aa.msPointerEnabled?(W=function(a){i(a),j(this),k(a)&&(u.setCapture(a,this,!0),this.msSetPointerCapture(a))},X=function(a){i(a),u.releaseCapture(a,!0),this.msReleasePointerCapture(a)}):(W=function(a){i(a),j(this),k(a)&&u.setCapture(a,this)},X=function(a){i(a),u.releaseCapture(a)}),Y=function(a){return!!u.captureInfo[a]},g(),h(),l();var ba={dispatcher:u,Installer:c,PointerEvent:a,PointerMap:p,targetFinding:v};return ba});
///////////////////////////////////////////////
///////////////////////////////////////////////
var config = {"dark_mode": false, "show_pads": true, "show_fabrication": false, "show_silkscreen": true, "highlight_pin1": "none", "redraw_on_drag": true, "board_rotation": 0, "checkboxes": "Sourced,Placed", "bom_view": "left-right", "layer_view": "FB", "offset_back_rotation": false, "kicad_text_formatting": true, "fields": ["Value", "Footprint"]}
///////////////////////////////////////////////
///////////////////////////////////////////////
var pcbdata = JSON.parse(LZString.decompressFromBase64("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teAGhLtkuvC/DL2yPoy9uLmItci4Z63Es382AAT/OeS89La0s+S/xL70uXi9RL84t7S7VLS4sri5FLx0vRS8xLkYvDY8TLl0uxi+TLkwaUyxGoD0vs6FlLfEsbS4JLjMuZi8zLu0s3i7SLYUucy4+L/0vVS0DLi4ugy6sA7fMd87QArUtaSzgLkOrw86iMSMtmAFBLUyzT806UGMsQRCvzLNzOi9oA40sEy5GLRsvk82yLhAtky/bLd0sRqLfz9/PzANTLz/MHqmFsksu1i0eLL0sMyxtLcsstiwGLbYuKy2VLP0vhS4yLUUsxS2TCIgvWmpYz+Qxuy84LHss/C1WLy0teS7lLy0tNiyELUctXizHLMAvKyxFL1ovFi0/g6cv/0faLOEvZy7uLosvhy09LUstvSzLLEcsXiyXLLMvXi+XL5Uu/S1aLPYu9uLaLcqMZy45LWcuci57LWostyytLocv0y/8Lsstdy7OLPctlyyYLFcvdiy8LkYvKi6PLdcsxi4OL2IuES69Ls8uMyx3Lb0uRy8vLCst9y/HLKstDyzF1suxDyIfzpMuTyznLXsszy/nL6Uuki+mLBUvFyxfLrMuxyx2L/csJy4WLm8sJuBsLO8uPyw3Lz8tNy7nLR8vvy6fLOUtMy93Ll8try4ArN8sgK6WoQ/PgK4LL+8vxi0tLsCt0y6RLR8tFyxULSCt/y1fLIYtAK4PL6CsqucZRJPPjy90Ljct4S5qLh8tvywQr3ksLy53LlEsSi6vLcwt3i/RLD4u3y+0Lrsv0K18LjCtDix/LhwtsKwXLRCvCSz/LoktkKygr18uVy4Irr/3Gy/XLHEtiKwfLeCusK23LCCvwK8QrlwukK73LiisUK2griotbyyPLdCvqK+7LUCtMK3uLectSKxIrZIvni1wr2Ys8K7eL68vAK+Yroqg1y8Ir1isTy06LL8vTyxwrrcshyyfLeUtny0vL8ivGK7wrnitUK94rhqhpy34re8ucS1orTiv4i7orYcshKwgr58vRK+4rSsuoK8or1CtlaH2LyStPy4Er0Cuvy9krcCsRKzkrUSvcK8FL/8uhS4UrG8sJK85opSsPy9grqSu4K+krNYv2AKtLhCszywYrlItuK40r5Cscy8orVUuySzVLwMtay23zjUsgAAAAygAA6lDLrAAwy+1LSotoYFBsiMvj84pMaHz44JdLZMCImN8gKJh6eo7LNiNriyWF6bRnGtsLisDmS1kLzcvVK44r+iuyKxkLgeQCAF9L4kstK14rwEuAeDxq3JC3KxcL9yvDS48rMCs6K2Er0su1KwYrlTCYi/V4yCuxKz8r8St/K+vDOyvYK5U6hmBgq1UreIt9KyRAAyvsKzirhosuK2lhAuiwaF8rbMvAy/eLaAtJy7zLPiua47xg+Hh7yxirWeR6esErhKu8S5Cr7cvQq28rl3Wkq4dA5KtNK/tLpiuTK2rL0ysay/ULcytNfAsrKkvEatDLmkuwyzgLkvOt9Q7kpsuJACjLfUuI80crFmPYANcOWKsXK7kAKKsy89vQwGOZywwrtiusqywrzyuZK/PL7KuLy64rAqvjK1SrXMsOACdLKcuvC1RT8YNdK5or5ZPYq9RLj0vHy1Crhcs8qyMrDqsmKxMrUkuiq4DLiQBCqyDLJEBfi2DLCys/i93z8qubK8WLqUZ4+F3K3UuQSyCgp4xGS7MOJMufC2Po3AgzuElYeqt4yzZLlysiC+mrBGM3Sf4rZqsVK0wrTyuojDTLwcv9K3PLgyvZK8MrWYuhq4irSiuJy9zLyctETCILyxwZq4RjdauiK+arYwa+q5Ir1qsdq7arnCsiSw0rpUsAK32rf0tEiwDLckvRq+zLkqu/i8WA+ssKqyxLmEvzLMZzewCqq7kA6qswS3Bj46sISx20TpTeRrjL0QD4y5Wrh6u3PJEk9XgpK96r9Hy3S2yrn8u4q4oL7asEq7+rRKvfyyQrv8sxKx4rSKsPizSrp0vFi0erPpjGcx+rk6tFQt+rlqvzq6ErbavhK0Grfkuga3krYythq06rqsvrq+rLW6uzK3GryksLK+DLp5Byq21LbSsRI+nT/POnqz1L0EsT84zAWqs+iVpYrktl9Pqr5gBri+FjCMteq0hrFMvgqyRAj/NhaDUrWGvEq3IrS6vfS8Kr/asuqzzLMGsq6PbTAsumqxOrDas4y8JrGUsSy+hreKsAa9IrQyvBq92r0ct4a72rsmtrq8MLG6szK5rLZGsNS1SkIAB/i/urqat0q65oP3NSq2erpgAXq9PzkHjbCzeruqtW3VZL5asTS9XLmuOA8wJr6murCk2rQGscqxhrgasyK9hrhitga/krcctma0dL8muDqyorwWQOekv5YWtxi0Jr06tJi7OrgGs+i/FrIavGa8urzSurq4PLUytRq7kAMas7q9KrkkCOa7RrqTLNY/LsKqtMayXkKMuXS0NL5SMaiwFrj6sVqwara4tNY+1hLWN7y9dL/mtpS/Ar4mtxa5JrdcVFSztLCiuma+GrCIvQa26rfMttYz5T42vJS5xrkWviyyCorau6a5hrs2sga5d1C2s9qxBrlWsCK9Vrm6u1a9urNmsJq3Zr4Mt6y9RrBsuEywKTztNZq8jLhksaq6xrqmuYyx202MsRaw7LgWtOy/3kH2vZ0wWrGiuCayLLmmtSqy2rOmv/q8drBmsla0Zrpcsma5drKWtQawOrtKslLGCTGdOqa0LLu2tw6/trtMuFa/prnauGa/LLS2uY6ytrVWuRq7drpgB1aw9r2svSq2SATWuGq2QgsSyATF9rZss/azBL/JRsa+Lofmsaiw+rDgBPq0NriqvGq+zjUviIa+FrPqs/qzOrnKt6K9yrqOvU6+BrBStXa9SrOOuKazejktOw4zlrwst4QL6rpOuHa0jrsWso63NrCWu4a+VrMasEazMADOtWaxKrLOvzK3ZrP4uyq+srKavNay14SriwfMXxbms9SxTi7olofPmrl0tFq8HrVVhlqwNrQWtdlMAubZRq4yIrROtW3ZFromtk68rrWStoa3Ur9qtlazJrdOvY62lruOs61OnoFrgJ6+OrSeui63DrSusxa1yrEmuna6Vr6Ou26+zL9us3a07rH4su61KrdmvNS8mrNGuc6690BdOMa9mrvUswS5axqms9a8QE96sg69HrYOslLAbjtlPba9p680vIa4tLvSsHi+nrNqtRa3arhUsOsYtrGuvJa3nr2usF67rrOuNm4xZThOvmgDtrVt0oa9orJECm64jrZ2jI65TrqOvnaznr3yta6y0LLeviq23rrADxq6zrdmsd8x7rIAAbK81rLstsIo9s+kuD6/PGAutWyxcLy/PSAHbLL8vca5zrIBs0fIbrU8uoa018d/MP8/7L4JiByyykAas16ydriCuJaxjrmutY6wfrGAsKa+troqhJKxaof/hy67lrF/P5axkra+tzqxvrC6tSa6MrjeuUq/wrq4siC74rtBuoG0Er6BtV60drFuuP61br9esryyQbe+v268UrOC1Y4YAz9BtG6/MMkWsiG+brBBuW63XraOtSG1wbfCuHSwIrchvbywIbZ+vdK/R89iv4K+TrK+u+SxIb2hsIq7TrshvNa6SGuPNl6zgrZhuqGwVrLBtFa84rWhvq60lrK6tkGwqLnOtvXM4bShtoG9frmesza5obRBs267nrDhtIG5grxhuJ664bjBuK6x4b1esq67Xr0RvSa6/rARtVy6ArWQDuc1sJLhumGykbwhtpG6IbGhviGz4bRit+GxVruRsZayyL0jgoGyYbn6ulG+EbbBt36/irFOuZ612rvhvSG/4b++uBG1crbrVNGxm4ghuVK6kbzBvpGxnrHRtZ64urnBuxGzwbQxtJCyPLoBvjG3Yr7htTGxUbGRuEG7kr2RsUq3obA8sGG81rogujG0UboRtCG+0bahv362IbPRtU6zUb/Rt1G4MbeRuJK8uAhRt0G+UrDBuVi0wbf6s3G5Ubdxtq6w8buhtxK8cbnOvHUPfLzRtJGyUb3xuTG78bXRtWG5vrHBsXa6QbzxsqK+CbIRufG8obzCtXG+Ub6hs7G1EbexsLGzkbqJsf6yRr1mvf6+RrdmsAAJprK4AbXuuc6yF4FlGj4ybL4/O+gHmrYNKCy/Ew6QD5ksnrk+vi64NrPGsdSzXsTJv3GnvLOph0Mo2rleu4m38b+JtVG1kbRJsHGyCb5Buuq0Orrwt+NEKlzJsuG+KbZytTq7Cbq+vTG+vrxWs2G30bwJuQa0ILpJt3a6RrFJu2a/YAHfO0m0Abves/UpQT9XgD699rNrUaq2GiZeuhIOkAmhQIG6Drz6sba8HkpBPvq5ibN0vL68ULqetm6zKbMxtGm9UbxBumm2/r6Asqmyor2SDFaW3UIZuQK/LrX6vhmySLt+v4G7KbAJvGm0Cbixv6G7wb7qsHVs6b6xtcSyTr/quRG3KbhJvImzIbSxsvG6zjA5rNeEeAVZsLS3trtZsvK6rrRZvxmyWbRxtlm5GLoDQcwx2bLRsw62vEOZv3Sz2blhuvK4CbA5vEm3Eba4uPopWbE5tZm5CoV+sfy3mbdZuFm3GbMRtLm82bKit1YMhj6Zudm0vr3Zvaa/mbMZveG/KbjZsDG8ubdkvzVGubUJutG1Obl5sHa50bemsIm+wbOGv7G4KrTetHm3IbBFCIIMGb55vZmx+baesGm6wbsZt3my/riptmm8sbrwuq6C+bxRtvm/hLkFtRm/Cb85v9mwebCFuJmyorb+CtyWeb65tfGxhbNZtXm7ubsxu9G8Wbh5ulm0hbfMux4KhbFxsai1ubxQs7m72bmRsNm/BbAFvcG/RbLZsRIzuqzFuhm5fr05tiy7ObnhvdG9Rb9xuLm/hb9RtyG5RzoBMcKixbTCtsW7mbElvQW14bX8twWw3rg5uUK6CbvGv3KUpbECvQ6xub75sUW5+b15uGm7eb3Fu6W3RbQ5sMWyro5cTGW+Bbm5tiW/YAHFtzm32b+5v/m46rQFvNayBb1Zqckq5b5lsm6xpb2xs3m9pbtls6G3pbZiuc6wtTHQbBW6RbWJtqWzOblFucW7sb9SsKm7xbhxv6W8ObKujt7i5byVthm5hbX5sP63ubOlsxW/ZbeVuOW15TOjS4OElbr5uTm+RbYVvpW15bXFtZW/ebTxuPm+6rW5rCYyZbNitmWy1bP6ueW5JbP5uRK9nrdltyW6ibcht/o0VbTVtDW9IA7ls36+FbeJuRWxoLNFuyWzlbSpu1W3CYOhLCW5mbZFtLW6VbVlswWzZbnVs8W35b/FsqK0lSiVviSgtbR1upW+JbbVtjWzhbPlvZW1dbDlsCW4kgqXONW2hbzVvHWxZbUFsRW9ZbUVsXW1Nb21uIW99bK6PzW/9bi1tPWx5bq1vRm6DbG1syW3hbkNsEW3Ib3qKw2ypb1ZutW5ZbVFuwW9Fbdhsomz1bkYsQUzjbIlusW8tbWmsE2xlbBJvg21Vb01tk2/3koSB3W8pbVNuqWzTbfqsvW5pbUltE24zbJNtNm9dbchtemJBscBMc24dbKVvc26NbfNvjW3MbSJuXW/hr/luc60SaAFN/W7jbXZtA21hb35tvW5VbQtsPmyrbcMv7Ww1b91tw249bMttI29hb3lv62zTrpNtG2zgLTWNBW2bbmtsXm9rbZVu3G9JbC5vo259bNVvfW2rbB1umWxbbJ1uE2+dbk1tM2xjb8lvNawxq7NsDWwErwdvu26dbWluo297bvlvK2yLbzWti24u4JFsPW9LbIdv02/Wbgtt228LbX1sqK/uIc2Pjm7nbJVuJ26HbYNvh2wbb3VsO268LFNtgW8Vbolv52+1bmVv128XbhtsZ25zr2Nut21Xb7ds12wXbFVvE2z3bjdt922uLMNuD2+bbedsj253bDNvd27vrvdul2xabTOv3a9abj2v2AH+LUgAc62uL9bOWcu+0vOtqq/zrLGvea/BLvMZrqlkLKEv+m5Lrk0u40JWs7VOu2xBbUptbG2tbKNvAa7bbK9uT219ba2uqm5GLh9tOis/bnNt423qb0Wsg22dbddvzG11bdutHm+vbzOtb27/r9gAAAFJ7269rB6vOyyiiDKu7K5BL+OA7xOSovbJQ62YA/84dBgCAxOsb83fbgpuvC3xrmtT+6OirmItr88DrvquRmx7b/xte21brK5xxlErby2sEa//bhFvYO3q8xDuSC5qkxUuTa5sbcJu62zbbZYtRANw7ENu+23Fb2kuEUmirZ+uiO0w7RUJuS/Lbtdsp25w7EwxyOxHbCjtFKwFbyjup1ChMDDvaeuo7eWvgO8DbH9tQOzo7p2tcO05RDdtwO1PbdksDwCo7SRtqOxQ71js62+VbHDsOO3o7TjsT2y47pdvAW+47pjuim2WLXjviO2/bkjt+OwLbaouyO0E7P9shO37bx5vKazg75jueMN47ZRvv28jbdjtf2zI7mItGSc47gFuuO8hbGTtCO1k7Yjt9a1NrtSvaO4U7A4tJOyU7wTtlO6E7AVvqenQ7jKtRO4w7OTs4m3k71tsdW4k7mZiRkLA7bTtpO8BbnTvckJE7A4vRO7U7Ejv6m5A7yduNO4k7xTtjO3xb7Tuc67O4HjsuG3M7TCuaO9Nro9v+O3vLzTvrO7lbijs4C9s7ETvCOxkLezsaaz8bizu2O8s71hsBO6c7PDv2G03bI5u8bDs7TKu9OzE7DzsQO087/Nth2yfzbzvyO+nbmzsrm9871zvVO5Y7sOsAuzY7+TvPO4ibGQtguwY7ELsTO81rAjJdOzc7Owt3O8w7PjtsOwWbxztFO9p6LTspO+M7Fzvuq7Ng6bQzO2qL+LsaO3U7DiuL24Xbqztku2c7O1vQ2zMKmTuqO3878zuxO487SLvAu9A7kgtou6U7GzuYu/3b3LtVO7y7Fjt9O1o7RzsJO6C7azvvO/bb5Tvk21RqOLuwu/K7hzssu2PbTTsqu+C7vDufOw6imrvTO7i7KaNyu/87hLtJ28K79jsnO4a76LvGu+q7DqLJpj87PTtWu/y7CLu+O57bSruiu4674rvnO0Y7/dtuuzC7srvZO9a7uTtxO767ILv+u+y7qrsl25K709sWojy7njt8u/s7TLsWG69b0jsGu/G7RrsfOy67jXgpuzK7abueuxm7CzuAu0K78tswq4E75Lu1G6k7VLuRizt67ruzO+m79zs2uw07LzsOu3m7TrsFu5C7OAvNu2G7pbsRu167HbuKu7G7qLsBu607EruNu+DrOkxau+G7NTvluwK7lbuDO13byrs9u4G7nLtl2x9r5rvau5G7/TvRu+w7fruTu5u707tBu60rqtvoMC279LttuwS7UbuCu2u7S9sbu/o7W7tQ22Xb17tDu7s7d7uMuxW7iLtPu6y7L7vJO/W7lLvBu3DL1I4Lu8O7S7vtuw+7q7tSO0M7QHt1u48bDbtgewO7EHt7u4u7cLv6yJm7EKty23rbpLuvu+e727tyG/zLqbvfu2W7MHuHu4+78Hvru3G7hHsUuzO7qHuvC6R7JbvkeyO7y7veu0S761srO4h7HLvvuwg7m9soCzabJEAAABLoO57rPetrizajS7jQbOAbyMuhelPzoXqXS0OaaKjtsFHr/Jsx6+4jArS4u9dgLADXYDq79TvjuyK7uQC6ezqrYDO9u2q7f9s669SkAntWm0J729skQM1LABsOm2uLxlOrI+1rEBuda/1Lo+tAeL1rTCu321PrAZtdlEETZXhn6xNr1Nt/uz67x7sTu2dr2+t8e4mb/DtyG257R5NJG+F7XNsd29m7CHv+S3F7Cbur22k7tnvkm/Z7yDuOe3urGDtOa57TYOEtY66bfOtD611rPnvNVH579zuIG9pLmRM8M9graXuUewq7ersku2KLz+v5u5Z7ftuJewFbyRNba2WLHXv3u+0bsttLO3a7PHvZe59LuXu/2/l7juuf64pL7es6y5QA+9uGy5grOdsB6xAbFstl6ri7sBur857LzXtbezkTO3sv220bH8s+y1gbCOssc5Y4KgCduyi71utp2867VnuH61QbrxsbbU88ooSXezCbsHv/uzR7z7uK2/17ibuzu4aovitxk397Khsru4D78Tsxe5Ibb7uY244bI8tQ+6A7aSu6u5l7tHt/mx9bGLvg+5lDapNt2xMbAPtRe8S7J7sve7j7b3tJu8yLaHOJk7976Ps9K5j7eHs5u8vbIHuMe5e7VytgK2j7UtthG117WPvA+zj78XtR2/Eb53s/eyFbMPuce7a71bto2697fbvU+0qLXPuZ/OL72Jt8+8z7WXuC+wt7KHsc+zT7Cq2V23PbvPtM+9N70vup25T7cvv4+35DkzV6+9D7KvuG+0C7xvu4W7L7A3vm+/Ibs9vW++YbuHtG+/h7RdsMexe7vytSe5D7SvtE+xsbsPuk+9x7Xbvj2z77xHsnG0krF3sM+24bIftce5/b4fve+2z7vvvIq1J7pSux+zz7lxuq+577LPswO5r7oHva+yxLmfti+0H74iu2+1W7Xvus+8h7Rfvma/MAlmsre3VLa3ts65t7NDtLE+rz1Xun27V73nsiK2PrI0sb42LrW/Oaey2cHfvXk/PrJTDV25L7T3u/m7F783ug+3l7KstDe0gbkxPWqGF7F+sRewvb/PuAe3N7gUuF++z79fvPi2KrZJvO60g7ruv2AM1Lbftby4cTxtwsm557qMvM1N1rvnvj68w7p3tKizf7uxOpexv7HHtju9175PtbS3v7C/uLe0v71nsAO9Rcz3ga3AwEE/suSwe725tW20D7O/vzazl7QAda+4f7jfsn+1/rRXvn+6J79pv0mwfbcyPRkLJ77mvkqAp7aHxKe6prKnuKqGp7vJuUO4F799uAOwQHC5Oqa6Z7+nuwB5X7AHv6u4vzLAfme0j7uRv8OwV7p/tYBx3rO9tCAFf7IEs3kMooUvhd++erZ9tFHpdLN6vX21bdAXsae9PrzmhHq5IHyvsI21ar2/ucBwX7KAd1+6lrFBvpa3IbrEsoKnth+vvD29P7Rnv2uxH7qfvbuwIHmAc/69gHrADgy+J7dJuSewO7EOtl+3f7bpvMa2jLQutYyzqbv7t8m8P7qgdsmF4HopPW+wc7JIusO1L71ft6BxZ7YPuVy8v7w2v465EHcfvwuyNb8Afw+8Z7FPtC+ySby3sYB6t7Z/vCByRAcIBiBzPrUpMkfCfbMgejpYp7PhOqa/Ec3qh01BQ7b/t8y4JcxHyl63crEwzEEAZ7zLs6Bz17bLv0e3YHUNspBzgLOogDqdUHqmsLo70HbAeGe3/7MXuOO0h7CZv1Gw4HxQdCBxDLJMJle8Ab6dOik9IHHmuyBxnUAQeA60EHeWttB+aouwdRk0Pbo7voG7EHM/sTWwkHvAfPG2MHFTuWwIT71wc/++gbU3t2+/EHIPuJB4v7IqtEa8f7lpuFe04HpQesAAAAim4HLnvjB/ICudL6FT4HNXusMFPznHm4u8jgLAAfkDfbVKjnB9S00+U/0NgrOSQSm2A7twfYG6H7SfvPe6Ak2+somE8HfDugByor4bS1k/gLMjvam1P7WQe823n76vtna8IAoCT5ByzbuIdyZUdTJzssh5YHbId02wsHuQeUh9tL1IdEe/x7hQcgh4IHYIfrey9rEntva4A7ayzSmGvaHnu+B/t7v1hsa7U8Huwne1Q7DJvqh1jjrWRu+ynrmBt+y3d7L/OPe9YHs3sa+/oHB/uGB8mbSXsxiqFz9Dvl+xj78wcDB//7thsyh8j7nOuZ/O6H3TvZ+8T7VHtwezkHNgcp+7X7TocGW+MHF7Pbmh6HHwcV+96HavvY+3kH+/tp+3GHk0uxtMGHFrvJG/974Ydw+zG7Eod+h5H777tyGz97eYfK++772gdphwL7GYeOh1mH+VtD49HTEuT5h9CbEvu/+z6HCPtlhyMHAYeuewmHnJiah8mHXof9B/WHiAeNh/8HwAdMe5GLQYemhx2H6Fs2+6mHHIfph4j7/ofC+657bocLhzWHkXuJ+wU7yfs1+ysHM1ve6+dsw4dmhxkHhYe5+z8H+ft/BzSHJruVB8MD7Ye7hwn7cQe3hw6H04eoB+n7jtu640NwIYdB21ibtYcRG3aHh4ePBxuHJ4eBh+dsf4eLhwDbQEezG/cHCtsfh/eH11trB837JQfre7gHHgfIW/FLOegum3J7NXuQG5bLh3s2y3AbRFQ0BziHvSMJk7hHyvsWh77LsQc2h2SHB4cUh32HMYfNh86rRgeF64Jbh0C4OGo4nocK6yT7+4fIu7P764flhwOHhstMc4Q8FRLW+3uHb4echyJH/Yebh+JH3EfSOBXQNEevhwhHm1s+23j7s4fmqBJHdWEwR4tbMkcaRzL7pvtO+zpHpah6R6MMfEdNk1YH4odRh0eHsVvmRy2cEkd5DPaJFgcV67ZHPYelhyabjkfF+87LLkcLkGpHnkcTh7oHd4fgR3yHlEcyeb/FQUfdhyFHgwdgR6JHikfYRwmTZfTLRNJH6kcgR8xHPkfVW877gVvAOwZHR1tGR5lHwkcsR8eHEUd86PFLQ1hQB5eHKVDBR6uHDYfyR6xHUfvxW5VHgHQxRwJHskdrh6VHvkd++3FLCZOG2LLrNUfsabFH9UeTh41HZUcPh5FHLxP0sO1HRYeMR0JHDwdhR4lHEEe8axJHGyhpR0NHRUd2R/aHU4fIR2vbcocb23Z7iocLKyg7VGsqh5g7DqIWom17Woc1e7uAGqvy49sLGCLzs4d86/MURzLzV0djax677Hsph1TLd3vGR/FrSwe8h82bLwfk26G710dQe1h7XYdfB9kHJYf2R7x7mYfNR9Pbmrvgx2x70Htjh89bYodeR3DHdHvAe01HFYfNa7RSWOGfR627FHvox4jb7Ic3h5yHgMcIx/jHWzs0u6N7JMffR2THK1sUx1X774c7C2K74UfwOwdHiDsbBw1rwdLuB6qHwXs2UxKb+weea73746v9+6cHKkzYh0aHrnsHohKb0AeL66/bdUeUx11HfXufhwYH+escR0fraVRboqkLLhvje27b+NvFh9F7pYcax3tHS3tAhzVrh0egh5SbF/siQBUH/XjeUyjHYseHByPrffvP+wP7Zwdyx5c7LsfEx2qLRsdWOx1H/0c2GxbHXMf8WyDHUKpuUyjHSsd9BxjHpsdk+72H4cfLR83rPMeCe8dHnetnR4LHF0e9uDf7unP4R937fgeP+/V7rWiNe6NLIQcS69Q71/thUypzcduzS9/7xIdzR4JHM3ugR7v7S7uWxyAHH3tgB3nHtccac+v7C+ush9DHrMccB/FH7cc76wpHBQfWx4zrvMeZxzvbAscwhw/bLbAWk/yrN0dFx157sEuNB1fbSEv+e7LHdAfVxy3jj9tk09VHoYfpexlH20dtx0hHEcfvezrHn3tZU0fH9xTY0e5HZ8eqx2zHckfdRzlHgIcWa8Rr8oeOB/bHJEA/i71M2we967rjF0trx7UHxceC61vHO8Qi68H7tAcqB0F7j4ftYaiLz8c/R1m7cUe+h9lHzNvAx3SHJHsG41jTo4eM+yuHascNRx/H2CcoR+nHR0f/x01LogfAJy17r0jMc27HPfslx57HDXsv+8EH8CehB4gni3ybUw5LhseNxxN714dvx+rHyAeax7GHypuUGz3Hi3wrUwlLA8eT+3MHaVuYxxgnyceiJ53HX8cN+z/HtscKh9QnIADgywAAWphHQsd7lAdTlRHLREwnoFswS56bMYupbHp7xBitB77HapsmJwPFG0efC7igiEt/+J17EZukhy3H9vsBO92cooBAx5HHuCfNaxboXOKmJ5dLbicdtB4ngifsWzDHZsfYxxkL/ifLRGonEavTx63r6wdzx4573etGJ1140uuy0+AnBwfMJ1AnIisA67An5ysOJ+TbeSfpAgVHWJtbR1jHO0fjRz1HzoeSJzdb+usv0LNHcAcjxwgHoUdXx6nH3MdpJ037savoR4mrWwfnR+V763FXU65rTCeQJxfbnwu+azmA6ntcJ/QH1BtvGx9z2WvWR1ii58f1J5fHu0fXx4N7wSdgm3FAqZKua+lHr8ejx5gntFvkJ/tHAydFB2hHfMed60AnYycBW8prkOs1B4UnMyfERz6JZSdTq29Hdk6A43S7g1uFR1snyifeR5cnkdvPBwcnvGvp06DjGyfG66KHicdh+1lHYKeGO6kn38fAh1onf8fCe6wAKDujJznH4yd0ax9APdNvJ4Q7+lFT80Q7Yeu9/CMs5Dv/O78ntDslfCZLX0doxxwnP6t3B8VHi0enu8MHeMcJe5Cnhssoor3g/4cn8wy7wcfNx51HDYfUx02HiMd2SyY79Kf5h0KnmQchx2yniEccx1O7fSeFu4t80qcEQrKnP7vCp0In5yeLB7W7gSf9u8hb4Tsyp/u7Nwcip6HHrzsqp5PH5UcQpJ95PnRmp58HFqeKpzW7nMeqp0ankYtKk8kjWqekx8ynCqcXx8974qdiJ2xH31tep/ynPqdMx36nzqcBp7P7QacpJ71HyFudO6anmHvxxx77JCeTh9J6ZLt/+PGn34eJp5GQFgURp0ynOqfsB90nY8ccp7jHE0dqp5x6DZPJpxDHqad1h6NHPSfKp2e77qfy+yObDbgFp46nnifEJ8InYqcGpzTHYkfuq9C7taeox5DHxhg4ew2n6adNp3GneyfO+/MU9+UOpymnCifoJ42nZafNp5ynlacep1Cq9Mcjp787vqfFpz2neqe5BzOnradzpzunmqddpzEnh6elp+T7J6c2p5NHMvMzCrunjKdjp9EH44erp7en/acSp7TH09tPpxenS6fmp7qnN6f6p26n96dVpwesKQueI3Wny6dpp72nGadfp8GnkqfN25q74aeXp1GnQGeRhztHd6dcp0lHoMckR8+njMdFp/Kn0afbJ4GnCGc5p9mHeGfFRf+n0GeAZyWnmGc7J9hnm6dtp5dHTkBEpwBnTqcYZ7DHWGfkZ7OnTkfvR2xnKMUCpyI72qfEZ1xn8Sc8Z6BnOGcrRwO7gwbep2hnB6fvp1Ona6dMZ00nlGf95HJnqGccZ92nSmdwZ9OnvGenp/xnxKPsZ7RnnGf0Z9xnjGcGZ2BnW6e5mB9rWmemZzpnK6fKZ5+nUmfMZ877cpiQZ6hFDmdXp7pnR6cJJ+unFadqZy2HcJifu/Zno6f1p8BHMafspwFnywdBZ7tbbJgQewRnt7v7p2Jn5mcSZ5ZnrmdxZ/7biWc0Z+FnMGeTp3pnKmdWZ9Jntqf8y0lngqeiZ9h7dScgp/5nqmefx35H6SxbI2Fne6eRp4pnTmeFZy5n1qclZ/0naKc2x7PHOicd89nHi8eBm9XJ0UcFJ+bLD/s+yHqHzQAGh+RHFSfpLD9SlaxuR6cnLKeWh/RHuBuv8y6nJkeGp/sn3cdl22eUC8ZSR5tHwKcfp72HWCfgp7anattcOKpHsKe1RyNHzmdnZ8in2kcNZ7mYB2dNrACn8du1JydnD2egp1tbKKcJp027b2epRx0naWdJx79nWkdU++5nb2euR4NHp8cWqyRnNWcNJ2QnF2cPpwJzkqNWR4QnNkf3Zx1nj2d/Z89nAOcLZ7Fo+Ucg59enDGdIp3jnkOdGZzHb12fUp5jnmydnJ8Bn4OeO+0kHL2dhQotnkkcZmwBHWKvY535nSOfnZ/9nuacjZzcivEd053Cn/qekZyVH/Of454LnhOc/ketHJOe+Z4zn/meNJ/VnBOevZ5Pa8ue3Z8NH4ueI5zsnKudXJyxn6ucdBiLnqCe6mzrnp2dM56ZHLOdoB5on/WdYp53zjyd4pwTH0usw58SnixaTZx9nuQCwG3hs0sfG678npNOu51rntEe3ewHLWnpByz4nvwe9J9Znu2e3x1Ins3ikU8b1CuftZ7zneufI5wLn6md662NTVUdJ57BnKefk5xDnZvtGZ1RT+kc55wVneeeS509nlOes5/HnWecY56bn/EcI5xbnyudp59LnGeetm9msL4Cl55FnEufRZ/rnKOfgZ6TTwOdB599nOOeW5ztnzvuD5xxrw+cM52TnFecU54Xn1edc67WsN2ei53dn5uc/Z83nUudV52rnuSd1Bonn0+c850rnfOeV5wvnO+dGq3UGA0dd5/BHW2cm++PnRmek05rnq+fa543nG+fH5/PnZkeL51RTj+f151jn6+ej55vnJ+cf52fnIrPUOCbnK2d/5+Xnvect59vn9Os3J7/HGSc6J3+LjufDZ+IHT9tmJ4XHECcbx1erPmvbx3erFcecJ1XHhye3PI0TLidc5yKHEBdH56nnW+en580nxgcnG+oHNQqaB9zb1xuQF0qnfefp5+ablCd2x/bnzUsUAE7HXDOhE67HGBfvJxvHHseSx17HvufkAFxr82e5mNwzAcdJS4PH+Wfd57rnzEcpx9HnXcex52XbB8i9Y3HHShc820onTedI52oX3WcUJ3AXGKcIF/bnf4t8F3QnHUtHx2+rbufMJ9gXl9s7xIoHyEt7xwgnyyd+GHYX2uxMF9VnhhdUF4AX1ue0F5xHw4dIMo10vhcj56wXmkfM5wCHqKcaJ+inducOe6wAdptDZ3gHHUsmh4BTWeTTJzqHU2f/ayRHPueGh/vHxoejZI9zDKdw58zHmuhrZ94n93vh56KnY0fQFzQX2scuh97r24dDyJ7namtHW3BHLBeUF/nnMRczh4vn84dtFzUnBvuk5xZnvRdW57EXwBc3s7XL7Rfl63Anh+ez51AX1BdAFzLnrYdl4UMXL4cz52MXc+cF5ysXbec2MyUXGxda510X0ptRF9tnA6e4Zy3juYelF8MXOfug54inOxd9F1+H+xcRXUUAmRe3F2GH4mdg5wAX7+dBFy8X84fvF5sXCxfbF0sXgReTF6sX+lTbh4CXxxd+F6/nARe/F+CX/xdQR4jiQJcUF4sXbBcNF3sXwWcNAH3r0JdP5ycXAzs9F48XExf9F8AXfetHF/iXsJf/52/nuxd/F9iXRARrohSXP+dXe/cX5IfEl3fncRdH+31nGcc6Jyg7hie5x/pUQ4d/s+NnQ6SLuGICf6JHK0XQzQBGQPYnRRcZ+xuLN+PJvSIrYSaFGBFn1+dRZ0qnKpccwByXwBdVh4z4ERT1x3kAOSaql3oX3RfolwYrWpeOmBRn9JfTF+Yq4/tlizotpat6Fzd7Voeh5/1jSrhI+HUX+meZZ6rnwRe6x5KYkbXCl0kbjpdA6+hnrJdMR7GnxWduZ0ZnRMsaKoaXgxaYi6GXbWe550SX0Wd1Zwbn7mdyZ3GX2Cshl5IX46dUl2cXAMdRl1lnKZsWotmXZ+u5l2qXZpcgl0qn6Zf95zZnXXihu+WXwZfam3mXb6fJ56mXtZfFl76XLxcMMpmYQZdam62XVZenF52XrqddZ9GXi+eExzhz8ZdJWImXbZcTp8oX/hdkZz6XGZdF5/THzZeDl3OXw5eEl+aXPKt1lxwX8WetHt98A5dim0OXppcjl7uXRZcrl/WXhuf9eB2ndpczl5WX55c7lzWXY5ctp+oXRmfzhxuXp5dbl8+XR7vfF5Jn45cll5M7+acPlzmXZ5d0Z6MX6WfLl0BXPZf0l16n35cOlxBXZmdQVwBXGWewV6uXi+eg4LEqBHMVl8hXjmcpl5eXujvXlweXoacmO4hXA4tPl5BXiudEV1an75cmFw2XBKfDDSeXSFe/l9RXHZe0V927G6fAV8AbIIzTl+BXbFcoVzRXr5d7l92XmFfAF8IyFFdqi1RXQlccVyJXV5cYVzeXzvsuy1JXJ/MyVwRXZeejl6JXJFet5/SXwRtgV3hXglcaV4uXcJcwV/RXE5fAF04bBlctl0ZXPmdyV9BXkZc6VzAX/xfbh6pXkgvqV3ZXhFfyV8RXilekVxlrIxtuVxkLHldhl6hXDxdpl2JXSldGZy05/FeGV9p6SZepZ6FXbJfhV05XjRf0l6cbgVc7C8FXyZeaV5xXBHuBZ3BXh5fJexlXCZdxV/OXBZdaVwpX5lc8VyAnZuPFV7OXpVfbl/+XYVddlylXWJeHl2wy1leblw1Xf5fUe7lXubvcVwVX31u1ALI7LFeUV/hXnlc5V95XdFcDV+JXEJc4l2CTo1fSV+NXIVfCVw5XyVe+V7pXh5cYjjFXNlfdV+xXXldrVy1XG1fOVzaXQ4fWROflXVeDFo1XvVdTV1xX+VezVy8XHmeP+BdXP5d7V7JXB1doV2ZXM1eRV4vnsZfnV4+Xy1fZVyZX1JfoV1VXg1dl21mX/1cCV29Xxlfqlz3nR1dg1w9X9JehsKc1iAzQ11dXPVcRh7dXeVexZ+DXWNtNl1DXsVcY1/tXk1eHV2+X31d+V1jbmrtJxADXtlcrV/ZXn1eOV8dXqVeHl1OXMsQvV6xXMNcTV8DXhZc+V4jXP1fAF9i7NNfo106XJNc81xVXfNcU15tX31vzp89XtNdc1/TXH1fNV+TX91cC13NXclalNWjXRNei1+9XpNeM1+tX/NeU197rR4By1yLX8VdVZ5EXEtfTV6rXRtfxW507wtfa1+bXUhflV31XQwc219LX6TtvB+zX8tfE17rX4teu1/DH36eDp56n4TsO17tXvtew19WXZNfaV8zXbVdkVy0IpteO12VXltcB1zjHuNdI14eXtDth15dXOteR1xeX2Nf9V+7XJ1eZ13xX3tdm18nXWxfR15VXUtfF199bkleE1+HXudfc13DXKhdM14bXHtcKW9t7Ddc5107X+Zcp1wXXbtfp12rXLxf6V9nXr1cR183XUdf61wjXNdcs199bVldj15zXE9eK13rXytcx1+3Xtdf0h65X3dfj103XK9f+1wPXgdeIZz+nSQsBVzvXS9d710DXLddLl23Xs9dx1xlrqPvn12NXdNdX11PXa9fV10XXc9domwH7WteN173X7ZdK10lXM9ef1/fXSXtnh0/XS1cv1wlXq1fT1yrXQ9e218NruuOL18/XCtev1/nXVdeS1yA3dJftV/nTyDeQN6g30DcM1+/XmDfwNx3X0dutAInXf9cV18CXGDfW16Q3m9cke2CTEDdqV4DXhDeANxGXBtd319g32WesQJQ3PdfUN2iXh9dp1zqXsBe9ZzPHPJc8F8SA/Bf8qgLofCfTJ6IXZReL81LHspceFwfHFkfKR3wnuhdi19fXplclR8YXFld+l3fHESO0c7InX/uKF9o33wcg16oXqid8Z5yX6AfwF3cnmSdNS8qHTueOmyRHcjfCF+LHLCfiF2wn3sf0578nDGqy7Jo3Y3sCJw3nXxfEN1ob+jdZZ1HHJSw8c6Y3/CfmN5KbJsfzR63H1jfz+8fXBFuoR0Mn9ycOx9CHaReEy3JzQhfEB+7HijdmAMo3NKcyF3CYhTfyF5ILQcdsN6vXQDddq1E3g1cxN3tbWrA6FyE3iTew15Y3vNeRNzY3hmd2N7bnEjdJFyAAKku4pygXGCvZgg9infueNyU3uLvlN24XQ/uEF7xrOnPq81o3L8c0N7A3hmvNNxnXSZstJ53XUzdLuB8bA4t1N6Fb8KcpN74n70s7N8PXnBdmF4kXxXvJFzUA0jd6l2wiRAdMazkX7Rfe57NnlSu/Jy83zriol+0bLpfrZ2HneBuWp9/bH5dya5oXroesM60KE2Tmh/3XtDfgtwxXt5eF1ANkZLAfF/MXgjeIt7YHyLfO+7aXVnJwt0NHBJdNV4035xdB15cXaxftYei3ALfhN6S3t+cXFzJnk0smhwS3GLdoJ+w3C0cYl8sX3DcqK6RMEgf/NzCXCLdbN/S35LeMt3OHCYevN6y3FRc6N1Y37JcMt7angxf8t5SXgrcRN0i3BjcuVzC3Erc0t+GXHLfRFySXzxc2l+dsmrcCt5XXQrcO+3q3Wsf0l+SXirfMl1eH2repN7K3IrelZ6An1LfGt5s3Krc4t2q3BreCFy63Srcmt+630Yeet+/rXBfaJ5YXyoDSN1f+/iweN8U3jhezJ4vzCgc7x+UncpcDuwLj66rUc0/nLtdCN1HnuLfJBzynhMsfvKm3zGrpt8q3dLdmtyI312vBt5inIzcd8wvH+TdqhyUXfoJLZLM3k/MC6583+RffN3Anvzcmhw23krdEJzfzVRfWhxtntocal7q3ZbcSJ3QXgYeuV088pTefZyMXMDf+tw5HeNfG1wIAgpPTt/WrnRcZt9i3AbfVV4OH7TeJk6u3HReARxu3prfvW6O3h5e8tyu3Pbfx+363Jbcnt3K3qOd6l3U8+7dzF2y3DTccN5y3YJekl+rX57ftm21rvrdutze3qrfbt/GHu7fdt1q3iVdvtyO3d7fgZ1+XtNRmoq63WLfHt4B3i7cTtzC3oHfwdy/nMreglwiXn7dIl6ETaHd/twh387cJRxC3ZJdIN7B3hLflF723RDcAdx63QHfMe0g3U7eXtyyX4Hc6t2S3GTcUt/pUZ4eMd2B3c7c0d1u34NdZN/VrbuuNazYXL6uh/a4gDhfFx04Xcye4F3mXygdLJ2o3age3PFTTJ8dkF5v717cQd2x31pfsR80XRBdVDWY8ERcad6x3wrfsd1PHYjfpJ443A2cid08nWzsxx2NniIdFxx83nyf6hzGQiyfLN5c7dned5wfntwf9t26X9lObZ8O3Wne2N6trubeep5tT++dFt0Z39rdYd7SXiJfwV+F3K+c2t2vnGHe9N0h3uzfHm+F3U+eRd/+3mncmd9p3oafhd3Xn4Bcpd1bXaXc3N4eXCVtLZ7DnandJNzl3xnelt1B3jFccYGfGRXfHZ1F3lze0d8h3K5tuUyXn3ncld6nXWbeBtzLXPXeJd8V3tLe5dw13jreo56Obh2ec54CnX2ftd5HnuycDN4LXblOX531343f1d7e3U3fgZzN3mDy6tGN3drcdd/x36XfAW7wnDIxX52/XfHcLt6d3AVu8J2AXbXd1d9F377fYd/q3Qbd3N8M3Dze6J857tbdds+2wWWuh2bt7bps7qFLVE/Mg9wd3FwupRusWiEvrGf7ribeqNwybAPMnJ493JId/Rzfnk3emd7SHe2dJeziEAPf1o4d36ltdJwN3y3ckd6I38Rfcl1Qn9ucd8+M3v3fYozFR9ndA9wRHTnfTZ+OnrndzZ0m3hMuqVFV3V+dAt9UXDEcR5+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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>