Files
GravityHW/Hardware/gtoe/bom rev 1/ibom.html
--global 7edd4eae85 REV 1
2023-03-16 00:59:41 +02:00

4415 lines
311 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: 10px 10px 10px 0px;
}
.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: 5px;
}
.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: 10px 10px 10px 0px;
}
.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 {
width: 100%;
height: 100%;
background-color: white;
transition: background-color 0.3s;
}
#top {
height: 78px;
border-bottom: 2px solid black;
}
.dark #top {
border-bottom: 2px solid #ccc;
}
#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;
}
</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": false, "redraw_on_drag": true, "board_rotation": 0, "checkboxes": "Sourced,Placed", "bom_view": "left-right", "layer_view": "FB", "fields": ["Value", "Footprint"]}
///////////////////////////////////////////////
///////////////////////////////////////////////
var pcbdata = JSON.parse(LZString.decompressFromBase64("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fYgsf9AWRi28OuFClCeDKzoF4UeUD2xooC7yFTp54UNjCEwMfmwkEpopOlqRBQYseDN+ZSIEsAdhfCifLGvhYOwk2wrMGb5vYUggBHpU4UdEdMwV4XgRQDWt4UjhW1om7DwRRGI9tDOaMhFKdD/eHrQUEWwaHMxx5RzhaYsVsjW0PbQUEWfaQhFahjzyQYKI2mzhdbJlkg86XrQSHkBMNYws+h7hYKADOlnhfPgy8D3+bcwyzIocLwkewUxMHxFzwX/8XZxtzDcCP/Q3lhQSAJIrrBeCdcFUkjgSBuwLEnVKdeA/9BKRSGZEEkCSKEx1vFksMXUWkUmcbxFG7CSRZIZ0kVGRbQZJSgE7KpFEdDKRR+EX+BEhEcFyLCNkD+w/EW5KI5F8DAykCZxrkUi4P24SrEGRW5F3kVyRW3w4kXlAICFUkV90Ejx6kUo7G9IIUXGRU3Q0UVmRfUoQUWhTAsQoUWBmclFEUWZMHLYXkUgOVvQvkWbsPxFzMlzGOEAixgoAJEAbgAeANUAhYVBAE4AOxjhAKVFBxgx8u9wNay5xMSMwBDqQPJYq94zuDrWhSZKuJ5oXUVVAOPQHQBdAD0AgqmzGDVFCxjVRaVFwQBrGKWFmxjVRWEA9gB1RYSw4SiX0E1F82w8iv/Qq0U5RetFEzldRX+sCSCX0G0cVQCXUINF3QCQACNFNdCFReNFIQAlRcsY5UU+ADNFLQBzRbsYi0WCjAs4rUVK+IaskpTvRaycT6QYcIdF2YxvRYdF/UXHcCdFw0WBUJ4A/QAgAO0AfACIAOMA1ICcgAQACxgkgCAA5ICuABEpX7n1+XFJvOCTwHQAV9D82LwIBOynQHjFfulmSQisqkDOGVuZL0hiigaAauiUxeZx/hkUxfToUnG0JBXgkRlGeczFfyiMxbxQUnHietHAbMWmCB6ikMB2GbJ59EmophbAzhk46cJJObiGQFzF1cCRIkqgssXCSaOuMqASxSrgJcDsoHYZLun7gG+xtqCKxaKo1MVKgLTFTMU6xUeAqsWDIJDUuMWaCJrAWzmnwHrFdVBj+FmAZsVKeSNY3OCaxZ7gPViToHYZBdnxwB7FaSCaGZaG2oAuxbqgV9BuehFA01j/EJEZuHk2xeLFNrCmCBbF/MVTsCbFNMUesJ5pLuiaUHbFm2yp4AnF0RlpxVnFrQ7Wxe4gcSDj8ESggcVqskpgxcVhWHCgNniexbRQpcXf1p5gRsU5QJnF5cU3TuCgCWCcxVbFrKAWILrF0mwq4D1pCsUJsJ7gxEWWxZmcCgjDxf7FqWD9xTJAIcVDOJ8gBsW4xSnFhknNIBrFscVTsMZyRMWrxdFgyODOQJHFVqCqwNPFD9CzxSagoozDoBPFVcWFxafFcEDexWxAB8Vp0nmoFkI7xb3FgyDrxVjAdsXLxTAgssVfgFUBPACNxZmg38X0AMTF5hmiJh/F1Ai+Gd3FpsVPxUp5i7w0xZ3FmaCuhjpAn8Uq8OJQdsWC2YFgIcVl+GWpz2y6xYvFUsDy8DOA2cXxwDfGtsWbxYQl8YARxTglHAAd+crFtUBOxQOgbuwDxfF8OUBEJeLFsCUA2WQljsWQJXQlcyCuxaAlCRncJcHF0lAw2ewlYghX0ELUx6DMJRcgoiWR0dXA9CW3xf1kyGmoJX0gmhl66WuZwMC3xcZwgyA1khAljCWLqWTFfMWsJcPwBFC0JaupdlBuxXmoGkblxVfFwbAWJQ3FOPqPSZxKfsWHxbOp0kDBxRQlrgi8xShABCWuCBXshsUkJclJR2ALxRCYm0BOsJ8GSYB2xWd2OEC/xWuZ9cWGxZ82K+C/gDjFiCWMaYklfiUVqIbQgCU+MVKp/8WBJUuEcKCWUjdAxcWuWd6AREC/xdXgDiWIoKUlseAOxSIltcVVJY2gOSWVxZJARuDEJbxE9gjNJTHFL1COsCJYQsVOJT3gTVYaxQYlXuALlJIlsCWG4FQgI8W5JYJAm7AeJRMljSV8gJuwPiUjxRolZaDIRQJQesXgcDbw6yUfok4gxiWk8Oklg8WNwHlFdFBexd7QRyXLgBkluMBU8HIl0iWygJhwDMV8TjegGyVExXYlUyW0dmgldAhjoJ2FASUzxZrQnYX4JW4luQCLJePwrIjOoAslsRnj8MP01pB/JQ0l82BfJQrFtSXIRcgl+cXrgJhwnNCVJWclRcW0UPMl2MUgwF4lNHBqJZElBiV9cGLRZ8VTJZzyOyVEpZeYfsUkJfMlmNRLJZTF4bD/JWXaQCiMpYElBYgopZSiycXe4LcldKUVxbCl8sXTxQilvKXIpWXArKV8pW9AmbCjNHxAeKUWsNUlACU0pYxZ6SUipTylqSqEpTEwlUC0WeclnCW3Jb7FFSVEpeHFHCU6JfMlSYLqJZLF9rDFJWGA6yUDyAMlOiU6peAlMCWycnkgFrAEpWElByXfwM6l+CVWJVKQHqUjxT60UyXFiQwlocWtgBaw88W7xSbQFrAsxZsAMqXMRp1A0aWqpWElFCXzJaaUYsDrJcmlMsUipUml14DPJbalRllSpTcA6CWfJedAXFBhpVLAelmRpYEl67THQDE53yWpJTY54KUApTY5oyAjxUGl8yXzzK7FyqXvWGOIKOBRJZ2lQKVEpdAlviU6JcfgLIB8AFYA50WvBeaxCWBMGJRogYGFYNOl/2C8CM0gITHk4D1AT8iricDMfcU0RWsxJeZdxWhF6DE7pcLQg6BnhfiQs6WIQBIYJ6XF/PmA4zEbpYMgjCjrpdkonhlzgMulkrz7oIWm3OCUaL66C0lvpbqglGgumvv5T6WRMXSgSeC2iKnglGi4JVlAODGz6Jsge6UzpZelG4CbhegxoPiLgGoYiGXHYnCgOChmMdbQFTCYQI+FlGhTIeYgwJAPOYdALRkIZR+lZehaoH1oqGXEmCvgEGXyMRDgJlkgZYRpu0A5GQBliKAfpe4w6YDfEHQx50Coqe/ZQqnPsEvoNMBEcOCwLBAlUNT5OGir6FRIcMiCZUyoBkjiZbjZkmV/iE/oa+hIqPJlD/llABUAuGQzGTAYH+hiZZsFZGjKZVJl15lT6FCJcmWssNHoOGg6ZS6Q8egasCIAWrBmZUgI1YU5WYMpf/kWkErwqylQZW5lQJCJOaw8SJAViLYoNNC03l3JbjHGoPKZEcAPqNfEEqVO8BKZNIHnKRKZMEwoufFljGIDcL5lFpCxZZtA0WVIkB0wavCzpQCQ2WWmkKllJaigmqEYbhgAkAPgYfCQ1OnQj2GWOfri1UjKMD7wgPThqJowUPmWoGFo/dAXwO7wxdj0mfVl/AW2vOCQuDH20GCppJnEyHPArtCeZUVlG4KhGONleWWOxnD5vAAjpWOllrnoxQj5ZBA1hWg582LKkOsxnWjpoPUlxMjJnP7JO2WbZQfgdTlUmW7iBTl/4k6ZtJCzyQPqFpCEGLy5axF2kP3QKvjluWniftACpmG5M0h3ZSSgvxABJcTIFh7qMZzyLNBnZaSpG2VnqLgxIpCg5SOxW2UNGZo5m2W3ttdlBThg5eLy22VQQEnQebgZOV0h7qjI5ZU5GXZeUJkALiyROdLEwfCs0ORl3njZqNJSmXD9eHtI/XAA5a9liKD00IF5PygD4P1lHib3ZVFgzmj+0NaJ5JBuOG1lFOXmBZDlHOVnuWHwAuVG0ATlipA85YaZ2OUHZezlZWXjjBvZamUM8LNUwmjaRd2QFVTBkHplboVz8ICFR5BeuRu06uVV0Arlc/DXeTrliPB65coQGuX8ZZjwZuU5hV9wauXm5Qbl5mWQGETwIFzbGSjw8Bi9EGmFV+iyGWs5c3kS+YMsxch+Xq8QxIjryCdZGeivEHXIDDFzmWbaqunG2N6Itnaq6YExsIjR5eOFKPy3EDfWzYip5YZwUrINgAuFkeVJ5RgSxCifimeoAgWk4MSI0TH55YCELCn/qD8IyeXyaXop6bm15YXpushd2mPAmmlhMW1oAgX8wKhQUK7YGI3lfgix5WSI8eXjhT3l4IjEVnjoZDBd2g2Ammnl5ZPlw4UEcu2xUrKt5UIoEYQEiHZS8zBpMRRQxTrOYJppecS7mfWs4+nuMZhQvDbsIJpp8+XmiMpShiitPq5w6eXaMLPQ5+UF5cqJA+X55Zc8CYDd5YTCIdDZ5Ujol4aBOTfl0RlkUM/INQY4SdZI+jH55Wvg1kjf5WSIX9DWMAH8m+XeCOAVABXoSFPl7WgIFVAVEqVsCEbIs+UKUL+AFcgt5V1I9eURuWvlXTDCTvnlNEBWyMQVBgUjQAwwOciMiOusO0hP5Vi6tcCVSBgVv+W9iSHl6yksFQwwieUMFRtIVikEFRxJ+UiGVmFoVeiUFeTo18iwbKQVrTBubDQVFxB9SHEoXcmL5XgVbBUV5UgV6BVp5bXlqFDd/BKIQ+XjMInIq7ljqEnZLpQd5Quofogg2r3lAlbTMFEggIh95VIwHCnKFUzFKcKFiH3lDsnN5VXofUAV2Z+oZhUv5SPAJkiwbK3AC9kz5RwVrjBn5c/ltcBn2RHQjhXmFUp51iLSFUAV9bFbyJgVOhXBFbgVFhWH5fnlg5ToiOhwllDFOlaQezBJFcVWcdlX5RcgsGzuBMhp0RUN5QPYK+AOFQW5NNagWflQ1BXlFZXlA6AjuKPlsknuFXnlCRXuFSvlR+Vj5YMgKZKwFTIVeah95ubQW+VZ2e/lP+X75XCgfRV75fwVEECxyVkVF+WGSZaSWIiDqKYIzRXeiCsVU7AwyKGICxWv5S9ILcQNFUgV7XGMiNoVpMUQFfnlJRVyxZgxyIjqFbzxAeWBFUcV5RWDOmKASEm6FU5Z83qYYMJJxDFR5ZawSsXciIgVmsBbsZvl2hXCSXkVcBUSSViFZ3ofFRJJ8RUVuhJgo4AW8dfl2BWOsAjxyxUzFVLFzBVOFQiVRRWf5dzFzzSwiM3oUJUu6BCV6LKYYAbApcgV5UvlnBA4FTiV7aBKFR0VoUAQKMkVSnnnjNIVJ5i+sOaAYhUjFWPFKCn55U8VXGAsleUVFxXngIyVZdBixAtJjtBCiBMV9yAciNUVtNA44PgVz+Un5XKAE+W8NowVypVWFcesxAg0KesVjOBt4NbwoBWElaeF2xU/FXKAMpVyiMCVoUB/FRaVuUCcld4IDkB3FRsVgxkKlfSV3cBliBQVLRlcFTSVUqC86PnlfhU5xUfGdhVMJTFJvhXNQB35KpXWlX2oGpVgFSHw9+XCXHCgbybGldGVShnmiBGVwZXvFW3FP3B0lfcV+QiJqCwVHfn7FRG5qZUFlWkVpeV68LaVkRVcJbvl9OVelT9woJWySWuZxZVMlQOgOw41iE4VMZJqFa0Vq7D0FQoVmiXOlZ3l+qlplbmw2+VUcPfl+koUCH2VtBU94CPlOpVeFd4lGJUP5e2pwSn0kPcVDSAMWaqVqcXDAnaQNZX/iD8IJxVMeW7wgZUZeVmV0aig4NGoAtDrlYB5hhXdFQuVVFnpGL6VzUBUWRqVs5WoeTCIWLrsIE2wXRVHmZ2VXuBOMSmV9ZVVJRqVsRXt4ICI2hXDpaOl46VOZTvZihkyMV5QHGyawDBVwfA2FRhQ2oAQ7Oso7SUdsIcwAggkqirgXiixCEdK8FWOKDLJae7cxa/UZxAqCEdgwklmleYI8fxSxW6VcFU5QMfURgjUQACVYxU5aL6wgJV6UORVSeC3cEsoqfz2CDxVsFX70MiVNiicVcWwkOAH1K5Q/TDNYAJViFX4Va15huUZUJpItmyMGXDQ2VnxUH6F4SkRCUHoqqgXUK/wDMhqqKpl+mU8aUTIkVC+6CZVwMgW5VpV9Sj6VbpV1ugmVfWwllWHCazJgAhqqAAF9lWAGIZV5HAWZbjZSlUGqCLICehwCA7ljmUYxWtlOJCOUh2Fn6zBaAkg2XCRVZklY9gQlePwu8I/KH2gAbBbbrzQ2MWImdEoOeVjRGGwL8zzcN+YfRlZVfqFr8CNcHlVIOVzgI1wlDHXZfYcRRWJVUvlvxCvlYlVSBV4pLYZRVXpVUKFDTnRKPVVBVVIRbQx4ECVaNxYhhlJVVlog1XmsGlVBvBaxAGwXVV8kBqggXBtVT8oBEj5sPNVWWhRUu2xdVUzVRYgllDj8EfCfnCRImLQOpIQuVBAYtDahuYFxiJbVZuZPvC2gQ5wZ6xXeTYOzYVlVWc5FEidRfcej1WjVXJwN1UZZZDUoUjLVULwABW9RS9VCLlfVSHQvUXDVUzQYhW9RQXg8Rh0hYE5ENVQlTMoPpWdRZDVv1WhSONVUNV/VaqwGZUx0BgVTVXi8G9Vc1VrMgVlGzwXGX1VgdASwPjVnTCLKWtVJ1W1IIbwd5WdRRwo/AWywKlVR9hnGRqFSEUPVfCZ6ponWf9VD5VSlIyVvUWrNlCZJoURGRdVvWU7vGFovUV++DTVdKBJsAdV3KnC1fjVO1XHEIG85XDTVSnw0VXVOT9VWNVhsPNVCIXGvMMZqNVnpG6VvUXkTm8Q3wWFVYtxyflGJENV9VWHQENVzVVFpR2FutUyps3lONVKheHSDTloLMrQSqYusB9VjvCpQIFwHNXAhTVV3xlB1Uxmq8j01aEVLtVOGWrVlegEIK1Vu0hKhSHV+NWg1ZG5EdXrVXKFm1VeUNtVpZWRufHIQAg6pg8Q94CJqCbVCKCfGUSFtVUBhry58dUXGVXV32V83E4ZtoagWTQsdNUZ1ZXozij21aTQgpKVVYnVPyjPbFtVsdW7EG7s+1XUWIHQbFzfVXTYenDj1cDV1NUZGMPV47Ci1T4F/dXZ1X7VIpDd1WE5YdU0LKsQPNXzcDlgrdWr1b4xCtVACKnVvS4aGeNVh9XQ1e9VW0zfZassTtW91YfV65HROZvVp9Ui1eiYcVUP0MbVGNXNBe9YDUgQ1bsQqTbkWYbVVegI1SDVzVVKbCXVqOg6BbyYG9XPas0FydWdRUD6eRh07vdVBlDDBRVVMDUM1QEFbNWYUG7V+QV3VbVVztUCBShZ6ZKZcFYgPdVCEYWAOJBQcNvVg9UIBdbV5rA/VaUoB5XH1SoVgIWZVQTVLCnO0MTVo9VzMaKZstWT1VbIfDUS1bFVhLFcNWfV19XuKWw15XBN1S8xlyIxVTZINNUUCo3V+AKWOcF+thmL1ccQkVKB1SzVjvDUNb7VqDUbEHo1Y1U4UKYYWjWI1XDVajW11dIwdDUe1Z6woDW4UL3CgDW91aRQQjVqcKjoqFDhVe1wO9XaMLrC3DWg1YsSiUiz1fIpCgI0WYw1/XjHVaSyZzGgkCnVKhXRNc9VoZVYGihZhtWrYtvVkDWJNdo1FDVGUH1iVjVI1atiSTXONek15jUZlcsozDXeNaKIV1VU1ZE1f+W/WuI1/jU1NREZVVUFKeDVtDV7JCPVdTXygCXVztV82AxZbdWw6ajAMbCMNQU0FtXtNXjVx9VL5RU0rdUk1XMxs1UF1cOVFTT5NVLVqClE1eI1mDVOUJNV+jWC1b+F2DXaNQDVu8g6dtw5YdXdNVY1mzUzaThhg7CDNWc1vXDn1dQEpTWMNf9ApTVe1fEotrwtsKvVEYieJjg1hzVJguo1VTVqiMxGGzVqlbl0jVUaNXXIguHB8PY1K4Wf1ffVfkw0NQU1E4X6NUlVYFWLZa6Fy2W9Bb7lk6VprvnVwah6YF0OmLW9krIxR1V+0IZgwjHi1YaZq5V8kISu4agcjrzQO/ABSFS1BvDFrLbQNCak0FR2SdBMtdS19DUlqLPQmWDoSM3lpajBYPN6bpWe2UcpZGCLSI3QcXCaUmaZXZY+8Ay1hLXC2CEFWdXE5VCuYfDy4Li1hHwecDK19OXIkFIkKQXKhYE5yJBY0cUFyiQtSHS1OgVRmHHQ+rXYtSy1DZn6tf+g6Eg4FVq1k8B8ZVZV1rlwMM3QxKhwME9ljlXLGVCwaKhuRdlFhKR90JggXrX3uaCwvrX90NukDPkiqOG1GlUKVTPQFEiGRWXgy/B2eNG1wbVQOaG1IqhutQfwQ/CZtQ5lUehO5WdwEAh6aG7lRqiBVbxw3uX+uWi1Qsm6qIPArUWZ6DoFXhW4xcmmcVWPLELFAIKk0AGousWtLO21cpU7xW21XAUyjhrFuRmkqQO1H8V9tfS1rQHkxUO1JDFDla21UUIDcMYV4sVlrHyQPRUWgO9FcGUklQrFY7V0NUPkKsVLtcwF6vCjtaVKUYAeNR8opsVbtUoyRhh6WYl5J7VzMjTFe7WcNZawjbXymDAF3mWLtc+12AVVMBHF97W7ELVsrsV63PHwCTKexS6menCAdX7F3HzmBb+1wcWFGfwF//xftTZ5KhjocLbFU7VqiMQKT7UWeS41p7V3tfB1uxVgsPcQT7WJeRh1FxVodTIwJ7VEdVe1cGVgsDGorUWOQIR1eHXUddp5GHUHDGB1wKC0dVnFXbUKUM7CWcWTQNp5qFA54IO177XqKZh1hsXftfIpcZVhJf+1XTCXsE+1RXlqiFJ1rUW+eaJ1wmCtRUR58im3tcJ12HWUiHx1h7XodfpQDbWtRTp1rdw7JXpkGTBUKNPF0HX5SM1lRcXgddYpuFJWdSH4KzCmdZElEnVzMbSQRnWZeSwpD+lExee1LvmBqPh1xfytMZqVP8XsdR5Qr9TdpU21hLGa4Px1xsLXMUJ1+HUcqfIpkklrtbQpAxUIJWO1pzU7tTQl3nXPNGglpRnxKN/JusXGdRvIj7X6dXeJYcRIdZEu2jCBwHLm+nUliel1cJVxdX0wM4ybtQJ1jLGk4H51ACm3vCIlInWJlH+1c7UxdXyV0nU7iZsxnXUAJX4ZGWm3cOV1jOW7yGJ1T7VTdZPIGXVPtQrgUomN9Ep13XVJ/Ge1LXVouOOoSXXayCUwvXWxeSwp2oJAdUe1m2kVFQ3FwHV7aWd16nUKdS6Gx3Uqdaw4rxBodSWJCOnbdch1D4UPgCV1f8gzdTV1nmnqiInAO3XkRf91wXUgtXR1lvANMPmCuKVpdX5MNbVvdd14Y5WzdYswC4W2EaN18NTD6X6VniUpTMSIBd6WpcF1xIhMdRUluPWD3HB1NHV+3K91qPWy6a+1kiUGGWYwGIjpFfml6WRJyI+xk7WaLoUwaBSHtQR1Xwh09e11KeXFdf7w0+kTtXzFfPVoFS6oG3UHdbGJsXUA9dZIenXedYGpbnVi9dZI8PWtRZF5TlA7DuclF3WtMKr1dnV1tX5I/3Vg9XyxsvW9tcYmIYlayq/F1nVGUHflOXWeeWUwjdDNdfd1eFAYOD91qjAi9Vh1nSz8iM716nX6edZIDvXcddAV0XhmdSx1fggLdeR1SOjY9fglhPXMUFR1KUxv5WyV+CWw9fJIq3WbdYIIJGDydRxldUgRIJL15Ohl1cR1FWiuMN71ifW5stn1ZzEF9cH1WBWySU+1JPU2FW0A9HXWMASVzXUV9cX14fXF9T71aBWqyqb1FXVM2Z+1jsXIdRoVIklhJY31vfVPtdF1wtm2dafFa3WgdRUl3nWwdV31AnVhFYr13XV6yaegGfUOyb51S/WtAJe18/XRcs11yvXuFXn1MnU79VX1ZvU79Qn193WuMuv1GnXuFXpJUaWw9Qv1saXX9S3S/vXPZZQl3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1DXCNc+14nXNRfAIHzX6NeY11NFwtfIgKiAxAAS13oAUtftV51XstdOtQrXIACxV4pTqteoAOrX2xgl19y9G5JZVzlXmte6APlXM7xFVwVXFNcVV1VXeZA1VyAAdNdiAPbXzVczGHnXrgAvV4XXrtfF16pVR4cPe2bXqQATV+mb1tdlhfVXWxhs16HXYABLV8fgzddR153Xv9ex1x3XG1fd11XX33jHV6nX/NcY14LXQ9fSsNnXRAB3V0StN9dRAHfXIABF16vXT9cpSxmAh9d6ANTXANef1+8A39c/AG3XFmVANyAA0ddbV/eDakjx1wdXtNBHV2XUIABp1/A3GddC114AONdT109Xt9cF11g3D9c4Nw+IalWN9BcIr9e6AEQ38YAB11/XNYDkN7Q3YDdM1xHXENfAN63X8jeN19qoDDfc18w3FwhsN4PXyddcNyPXYtdj15LXvADS1zPX8tddiHFXKtcgAGrXKVdCN7v2mDCC/QSAW9elRbvXLEj71xwHswCQN8fXaeSyEOfXl9eO1zw3zteE18TXJdfxrRJFMDfe15XXVolHV1pldVeyN7MAbddh14A3Sjcs1yA3FDfgN3tXkDeHV3Zl5FSsN3A3ejerGP1XOdf3V0E3+dcu16E3cbV2eJZ7YjeQN5I3tNfNF2Q3iTdqN+3XijftkJHX1DfpNy03cdcgN9k3TDd2ZSw3ujcIN/o3EMVaEOg3ugCYN9g3A1eD9j6ZEeJRN79X8YD/V1I3JDfn4Ak39dfdN2DXqTct19DXGzdw17030TfjJQM3OjcFN8M3RTci18A3RjfogBPXpjc8N+Y3WhBz17FXhbNL18lXyMXTN4MssBjLiM43Btdu6YVXxVcV10fXJ0On1/E3dtdOAA7X19dlN3w3FTdu1+iKACtaZeI3MTeTV9I3mxjB1y03yTe8AFQ3NDeM1xzX+zeMN9A3eTdDNxw3iDfFNyg3udcQtxg3/DdTN9vXIIoZAOXXXjeV1/U3U1dA1yi3WLdN11s3Kjc7Nyy3Gjc4t0jXEZAo1ydXJzeEtyM33DePV8E399eVN90NGVdQAgQ3VNeLNzTXjLeB16sYcjectyk37TfKN503qjfKt9s3XdcHN2zwvNf8twPXpzfY14Y34tcmN4wAZjfcgHLX9zeWN0rXQZe2N683VLfTsNVNm9cG10bXDABxhSbX0rdRABbXfl1It7bXDVegt1fXaMWtV2S3EzcUt4I30zeOt86nOtvwt9XXQw2118DXqLf/1+HXqrdpNxq37Nf0N9y3HDfrsH3X+rfp1z3XRLc3VyS3pTcit+U3ITfQtxwQfm1dlUMNMbd30DXXHRcJt5q3jAAYt103jbfqt1k3lddJ15uQV3AEt/m3QrfGt8Y31zdmt7c3Frez19a3IACK1zExvAB2twMA0zfvEE63nYguN3oAhtfZgW63Hrf/N3oA3rdW17VX9bf+tyEAYLdBt+M3kzfht1S3c7dRt7U3Bze1t3G3O7c/10k3Sbcqt9AQHTeYt+m3XLcQNx23vdcp1/k3BreCt0U3hbeoN5pVh7dht+K3WteDw+Wp1bd9N5e3vrdB1ze3uzeAw823abd0Ny+37bcVV523ObewN1+3vbdnN/23VzeuAJPXj1d3NwMADzeTt883K9ezt4WtNGMLt983BVdut383dLcAt+y9QLdMtxfXAbeBNyW3kLdlt4/Xe4Nep4mt67e+12v4rZsrNwoAazegN9AId7fot2y3bbcI1xk3ezevt7i3PNf4twK3GHfXVyEAJTdoNyG3R7dAdyGOSzloGeI3DLeQdyIAQndSd7B34ndPtwh3qbdIdzy3zDeqcT23bgCcN6M3AwAAd1C3HHcON7/5KCTzN4Q3srfEN9u3CrdNN+s3rbdwdxy3z7dmd9q3jDe6t3NEn7d5tzZ3RLfnN503lzfj1zh3Nzd4dyO3FjfZ0OO3i9c2N8vXdjcRt5W36ojOt9vXy7cx0e63CVmet7oAm7eAGPG3u7cWAPu3UQCgAA537Hf2NxW3g8N6DSjwNbexN3p3ddfCd3rXADdidym3Wrcddz03MneC19m3H7fWd5nXSDcqd/+3aneAd+W3UqkPPLPxLXdvg213DbeBd913D7dqtyZ3CjfYtwN3WbfJ1923CneRd323otcmt4O3wbeJd4wAlrcEd2O3AADKAADqaXfTtxrXa9feXXhIuXeuN7iyvzfqZ8V3iXtvSERI5XdMd3u3gbfVdyd3eNelt2K303ehMO36ptd1N2UAhQCLd8y30BBot023xnctt8t37LfBd+NXwQDpoP3XEXejd8S3f7fCt8D3bHeg9053HBDtIKT6kPf0t9D3ZXfXt0q3KPfXCI+3yPemd713fTcY94AYI3e2d/j3vDfkt4539XdYY2T3xXeFAEs300UKt+13hnestz13qPd9d5k3aPe+1yz30rBs91F3YzeTd9z3bzfXiLpdxXd2wJbXsDO/dzT3jPeI9+L3EneS99J35ncytyaY3sBY9+w3infC14r3rHdc93V3EbcaWStT5PcVVxr3ekgXCNr3zTd+d0j38Hcbdxm3W3dRAPmFZve5txb3+3dnN9b3BPe290T3PPe5QABIRl08d/73lPdC92WFIvcwd2L3q3dBd4b3m3fG92/Xsvfm94U32Ndh95z3obfK91S34PcTm16FOncJ97D30Hee9/r363fqN+n3zPdHV3L3e3c499F3KICxd6a3QPcy10l3Vrcpd7FXvF1Ttxl39rePd2pVQshXcF83eXc/N9R3B9dx95VXgLe1jf43zHfgtzb3Rfd29w63sei8vbP3CLcf1153MjdLd3/XXXd692n3vXei94h30vdv13i3xzfodyH3SncWAON3HPeitwI3Gne89/ZXTwxudzK3BKied2fXjTcGdyn32qj+d5J3f/cN9zq3vLeDNy337PcF94/3lLcj94dDaCez97p3Anf6d/v3Pvf/9173AXe69wb3fTehd1f32Pfs91h3cXdRALh309c99xd3KXeXd/iAhIAOAIP3LzcztyX3OmVGGy93S7e5dCaY7retKfAPhmD/VxIsencgt/93LHfh96v3kfdvNzVmmSiJJ2B3FPcs95No7ve+d9AQKAC/rSt35gD099739fdM9wc3OfdB93n3Wdf395APIPdP92D3FPEh/c9c/PdlALvAVfc699yAsg/gVfIP3ICKD+gPKA/AD4w3ag9od7gPCvf2d0r3a/cl18xIGNjMoAnk8A/GDyMou/cphcgPqddyD0f3Cg9rdwz3dg8qDw4PTfe594a3VveuDyv36ndg9/E6Ig+GD74PEg+mDx73Mg8hD3T34Q9KD603mffn91XXjg/hd8H3rff4D5335rdnd6O3ffcKQ+l3NA8Pd1U3jTIBbfrXk/dUdy0XNHfv91EAPjfW8NwPFXdNV3wPhfdJD8T3MzfgYue3jDd8d3E3P/dBD513ybfH9xL3p/f2D+NXl/exD9+3t/fIN3j32g+E97oPIw/hN0Px4w/ud5/3yzcBD6s3Mw+UN2gPgA+tt5o3vtfI12AP1/et91sPEfc7Dzz3ew8HS0YPRw8NN953v/c19/MPBveLD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"))
///////////////////////////////////////////////
///////////////////////////////////////////////
/* Utility functions */
var storagePrefix = 'KiCad_HTML_BOM__' + pcbdata.metadata.title + '__' +
pcbdata.metadata.revision + '__#';
var storage;
function initStorage(key) {
try {
window.localStorage.getItem("blank");
storage = window.localStorage;
} catch (e) {
// localStorage not available
}
if (!storage) {
try {
window.sessionStorage.getItem("blank");
storage = window.sessionStorage;
} catch (e) {
// sessionStorage also not available
}
}
}
function readStorage(key) {
if (storage) {
return storage.getItem(storagePrefix + key);
} else {
return null;
}
}
function writeStorage(key, value) {
if (storage) {
storage.setItem(storagePrefix + key, value);
}
}
function fancyDblClickHandler(el, onsingle, ondouble) {
return function() {
if (el.getAttribute("data-dblclick") == null) {
el.setAttribute("data-dblclick", 1);
setTimeout(function() {
if (el.getAttribute("data-dblclick") == 1) {
onsingle();
}
el.removeAttribute("data-dblclick");
}, 200);
} else {
el.removeAttribute("data-dblclick");
ondouble();
}
}
}
function smoothScrollToRow(rowid) {
document.getElementById(rowid).scrollIntoView({
behavior: "smooth",
block: "center",
inline: "nearest"
});
}
function focusInputField(input) {
input.scrollIntoView(false);
input.focus();
input.select();
}
function saveBomTable(output) {
var text = '';
for (var node of bomhead.childNodes[0].childNodes) {
if (node.firstChild) {
text += (output == 'csv' ? `"${node.firstChild.nodeValue}"` : node.firstChild.nodeValue);
}
if (node != bomhead.childNodes[0].lastChild) {
text += (output == 'csv' ? ',' : '\t');
}
}
text += '\n';
for (var row of bombody.childNodes) {
for (var cell of row.childNodes) {
let val = '';
for (var node of cell.childNodes) {
if (node.nodeName == "INPUT") {
if (node.checked) {
val += '✓';
}
} else if (node.nodeName == "MARK") {
val += node.firstChild.nodeValue;
} else {
val += node.nodeValue;
}
}
if (output == 'csv') {
val = val.replace(/\"/g, '\"\"'); // pair of double-quote characters
if (isNumeric(val)) {
val = +val; // use number
} else {
val = `"${val}"`; // enclosed within double-quote
}
}
text += val;
if (cell != row.lastChild) {
text += (output == 'csv' ? ',' : '\t');
}
}
text += '\n';
}
if (output != 'clipboard') {
// To file: csv or txt
var blob = new Blob([text], {
type: `text/${output}`
});
saveFile(`${pcbdata.metadata.title}.${output}`, blob);
} else {
// To clipboard
var textArea = document.createElement("textarea");
textArea.classList.add('clipboard-temp');
textArea.value = text;
document.body.appendChild(textArea);
textArea.focus();
textArea.select();
try {
if (document.execCommand('copy')) {
console.log('Bom copied to clipboard.');
}
} catch (err) {
console.log('Can not copy to clipboard.');
}
document.body.removeChild(textArea);
}
}
function isNumeric(str) {
/* https://stackoverflow.com/a/175787 */
return (typeof str != "string" ? false : !isNaN(str) && !isNaN(parseFloat(str)));
}
function removeGutterNode(node) {
for (var i = 0; i < node.childNodes.length; i++) {
if (node.childNodes[i].classList &&
node.childNodes[i].classList.contains("gutter")) {
node.removeChild(node.childNodes[i]);
break;
}
}
}
function cleanGutters() {
removeGutterNode(document.getElementById("bot"));
removeGutterNode(document.getElementById("canvasdiv"));
}
var units = {
prefixes: {
giga: ["G", "g", "giga", "Giga", "GIGA"],
mega: ["M", "mega", "Mega", "MEGA"],
kilo: ["K", "k", "kilo", "Kilo", "KILO"],
milli: ["m", "milli", "Milli", "MILLI"],
micro: ["U", "u", "micro", "Micro", "MICRO", "μ", "µ"], // different utf8 μ
nano: ["N", "n", "nano", "Nano", "NANO"],
pico: ["P", "p", "pico", "Pico", "PICO"],
},
unitsShort: ["R", "r", "Ω", "F", "f", "H", "h"],
unitsLong: [
"OHM", "Ohm", "ohm", "ohms",
"FARAD", "Farad", "farad",
"HENRY", "Henry", "henry"
],
getMultiplier: function(s) {
if (this.prefixes.giga.includes(s)) return 1e9;
if (this.prefixes.mega.includes(s)) return 1e6;
if (this.prefixes.kilo.includes(s)) return 1e3;
if (this.prefixes.milli.includes(s)) return 1e-3;
if (this.prefixes.micro.includes(s)) return 1e-6;
if (this.prefixes.nano.includes(s)) return 1e-9;
if (this.prefixes.pico.includes(s)) return 1e-12;
return 1;
},
valueRegex: null,
}
function initUtils() {
var allPrefixes = units.prefixes.giga
.concat(units.prefixes.mega)
.concat(units.prefixes.kilo)
.concat(units.prefixes.milli)
.concat(units.prefixes.micro)
.concat(units.prefixes.nano)
.concat(units.prefixes.pico);
var allUnits = units.unitsShort.concat(units.unitsLong);
units.valueRegex = new RegExp("^([0-9\.]+)" +
"\\s*(" + allPrefixes.join("|") + ")?" +
"(" + allUnits.join("|") + ")?" +
"(\\b.*)?$", "");
units.valueAltRegex = new RegExp("^([0-9]*)" +
"(" + units.unitsShort.join("|") + ")?" +
"([GgMmKkUuNnPp])?" +
"([0-9]*)" +
"(\\b.*)?$", "");
if (config.fields.includes("Value")) {
var index = config.fields.indexOf("Value");
pcbdata.bom["parsedValues"] = {};
for (var id in pcbdata.bom.fields) {
pcbdata.bom.parsedValues[id] = parseValue(pcbdata.bom.fields[id][index])
}
}
}
function parseValue(val, ref) {
var inferUnit = (unit, ref) => {
if (unit) {
unit = unit.toLowerCase();
if (unit == 'Ω' || unit == "ohm" || unit == "ohms") {
unit = 'r';
}
unit = unit[0];
} else {
ref = /^([a-z]+)\d+$/i.exec(ref);
if (ref) {
ref = ref[1].toLowerCase();
if (ref == "c") unit = 'f';
else if (ref == "l") unit = 'h';
else if (ref == "r" || ref == "rv") unit = 'r';
else unit = null;
}
}
return unit;
};
val = val.replace(/,/g, "");
var match = units.valueRegex.exec(val);
var unit;
if (match) {
val = parseFloat(match[1]);
if (match[2]) {
val = val * units.getMultiplier(match[2]);
}
unit = inferUnit(match[3], ref);
if (!unit) return null;
else return {
val: val,
unit: unit,
extra: match[4],
}
}
match = units.valueAltRegex.exec(val);
if (match && (match[1] || match[4])) {
val = parseFloat(match[1] + "." + match[4]);
if (match[3]) {
val = val * units.getMultiplier(match[3]);
}
unit = inferUnit(match[2], ref);
if (!unit) return null;
else return {
val: val,
unit: unit,
extra: match[5],
}
}
return null;
}
function valueCompare(a, b, stra, strb) {
if (a === null && b === null) {
// Failed to parse both values, compare them as strings.
if (stra != strb) return stra > strb ? 1 : -1;
else return 0;
} else if (a === null) {
return 1;
} else if (b === null) {
return -1;
} else {
if (a.unit != b.unit) return a.unit > b.unit ? 1 : -1;
else if (a.val != b.val) return a.val > b.val ? 1 : -1;
else if (a.extra != b.extra) return a.extra > b.extra ? 1 : -1;
else return 0;
}
}
function validateSaveImgDimension(element) {
var valid = false;
var intValue = 0;
if (/^[1-9]\d*$/.test(element.value)) {
intValue = parseInt(element.value);
if (intValue <= 16000) {
valid = true;
}
}
if (valid) {
element.classList.remove("invalid");
} else {
element.classList.add("invalid");
}
return intValue;
}
function saveImage(layer) {
var width = validateSaveImgDimension(document.getElementById("render-save-width"));
var height = validateSaveImgDimension(document.getElementById("render-save-height"));
var bgcolor = null;
if (!document.getElementById("render-save-transparent").checked) {
var style = getComputedStyle(topmostdiv);
bgcolor = style.getPropertyValue("background-color");
}
if (!width || !height) return;
// Prepare image
var canvas = document.createElement("canvas");
var layerdict = {
transform: {
x: 0,
y: 0,
s: 1,
panx: 0,
pany: 0,
zoom: 1,
},
bg: canvas,
fab: canvas,
silk: canvas,
highlight: canvas,
layer: layer,
}
// Do the rendering
recalcLayerScale(layerdict, width, height);
prepareLayer(layerdict);
clearCanvas(canvas, bgcolor);
drawBackground(layerdict, false);
drawHighlightsOnLayer(layerdict, false);
// Save image
var imgdata = canvas.toDataURL("image/png");
var filename = pcbdata.metadata.title;
if (pcbdata.metadata.revision) {
filename += `.${pcbdata.metadata.revision}`;
}
filename += `.${layer}.png`;
saveFile(filename, dataURLtoBlob(imgdata));
}
function saveSettings() {
var data = {
type: "InteractiveHtmlBom settings",
version: 1,
pcbmetadata: pcbdata.metadata,
settings: settings,
}
var blob = new Blob([JSON.stringify(data, null, 4)], {
type: "application/json"
});
saveFile(`${pcbdata.metadata.title}.settings.json`, blob);
}
function loadSettings() {
var input = document.createElement("input");
input.type = "file";
input.accept = ".settings.json";
input.onchange = function(e) {
var file = e.target.files[0];
var reader = new FileReader();
reader.onload = readerEvent => {
var content = readerEvent.target.result;
var newSettings;
try {
newSettings = JSON.parse(content);
} catch (e) {
alert("Selected file is not InteractiveHtmlBom settings file.");
return;
}
if (newSettings.type != "InteractiveHtmlBom settings") {
alert("Selected file is not InteractiveHtmlBom settings file.");
return;
}
var metadataMatches = newSettings.hasOwnProperty("pcbmetadata");
if (metadataMatches) {
for (var k in pcbdata.metadata) {
if (!newSettings.pcbmetadata.hasOwnProperty(k) || newSettings.pcbmetadata[k] != pcbdata.metadata[k]) {
metadataMatches = false;
}
}
}
if (!metadataMatches) {
var currentMetadata = JSON.stringify(pcbdata.metadata, null, 4);
var fileMetadata = JSON.stringify(newSettings.pcbmetadata, null, 4);
if (!confirm(
`Settins file metadata does not match current metadata.\n\n` +
`Page metadata:\n${currentMetadata}\n\n` +
`Settings file metadata:\n${fileMetadata}\n\n` +
`Press OK if you would like to import settings anyway.`)) {
return;
}
}
overwriteSettings(newSettings.settings);
}
reader.readAsText(file, 'UTF-8');
}
input.click();
}
function overwriteSettings(newSettings) {
initDone = false;
Object.assign(settings, newSettings);
writeStorage("bomlayout", settings.bomlayout);
writeStorage("bommode", settings.bommode);
writeStorage("canvaslayout", settings.canvaslayout);
writeStorage("bomCheckboxes", settings.checkboxes.join(","));
document.getElementById("bomCheckboxes").value = settings.checkboxes.join(",");
for (var checkbox of settings.checkboxes) {
writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
}
writeStorage("markWhenChecked", settings.markWhenChecked);
padsVisible(settings.renderPads);
document.getElementById("padsCheckbox").checked = settings.renderPads;
fabricationVisible(settings.renderFabrication);
document.getElementById("fabricationCheckbox").checked = settings.renderFabrication;
silkscreenVisible(settings.renderSilkscreen);
document.getElementById("silkscreenCheckbox").checked = settings.renderSilkscreen;
referencesVisible(settings.renderReferences);
document.getElementById("referencesCheckbox").checked = settings.renderReferences;
valuesVisible(settings.renderValues);
document.getElementById("valuesCheckbox").checked = settings.renderValues;
tracksVisible(settings.renderTracks);
document.getElementById("tracksCheckbox").checked = settings.renderTracks;
zonesVisible(settings.renderZones);
document.getElementById("zonesCheckbox").checked = settings.renderZones;
dnpOutline(settings.renderDnpOutline);
document.getElementById("dnpOutlineCheckbox").checked = settings.renderDnpOutline;
setRedrawOnDrag(settings.redrawOnDrag);
document.getElementById("dragCheckbox").checked = settings.redrawOnDrag;
setDarkMode(settings.darkMode);
document.getElementById("darkmodeCheckbox").checked = settings.darkMode;
setHighlightPin1(settings.highlightpin1);
document.getElementById("highlightpin1Checkbox").checked = settings.highlightpin1;
showFootprints(settings.show_footprints);
writeStorage("boardRotation", settings.boardRotation);
document.getElementById("boardRotation").value = settings.boardRotation / 5;
document.getElementById("rotationDegree").textContent = settings.boardRotation;
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: "default",
bomlayout: "default",
bommode: "grouped",
checkboxes: [],
checkboxStoredRefs: {},
darkMode: false,
highlightpin1: false,
redrawOnDrag: true,
boardRotation: 0,
renderPads: true,
renderReferences: true,
renderValues: true,
renderSilkscreen: true,
renderFabrication: true,
renderDnpOutline: false,
renderTracks: true,
renderZones: true,
columnOrder: [],
hiddenColumns: [],
}
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 (!["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;
settings.markWhenChecked = readStorage("markWhenChecked") || "";
populateMarkWhenCheckedOptions();
function initBooleanSetting(storageString, def, elementId, func) {
var b = readStorage(storageString);
if (b === null) {
b = def;
} else {
b = (b == "true");
}
document.getElementById(elementId).checked = b;
func(b);
}
initBooleanSetting("padsVisible", config.show_pads, "padsCheckbox", padsVisible);
initBooleanSetting("fabricationVisible", config.show_fabrication, "fabricationCheckbox", fabricationVisible);
initBooleanSetting("silkscreenVisible", config.show_silkscreen, "silkscreenCheckbox", silkscreenVisible);
initBooleanSetting("referencesVisible", true, "referencesCheckbox", referencesVisible);
initBooleanSetting("valuesVisible", true, "valuesCheckbox", valuesVisible);
if ("tracks" in pcbdata) {
initBooleanSetting("tracksVisible", true, "tracksCheckbox", tracksVisible);
initBooleanSetting("zonesVisible", true, "zonesCheckbox", zonesVisible);
} else {
document.getElementById("tracksAndZonesCheckboxes").style.display = "none";
tracksVisible(false);
zonesVisible(false);
}
initBooleanSetting("dnpOutline", false, "dnpOutlineCheckbox", dnpOutline);
initBooleanSetting("redrawOnDrag", config.redraw_on_drag, "dragCheckbox", setRedrawOnDrag);
initBooleanSetting("darkmode", config.dark_mode, "darkmodeCheckbox", setDarkMode);
initBooleanSetting("highlightpin1", config.highlight_pin1, "highlightpin1Checkbox", setHighlightPin1);
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;
}
// 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 (txt[i][j] == '\t') {
var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
offsetx += fourSpaces - offsetx % fourSpaces;
continue;
} else if (txt[i][j] == '~') {
j++;
if (j == txt[i].length)
break;
if (txt[i][j] != '~') {
inOverbar = !inOverbar;
}
}
var glyph = pcbdata.font_data[txt[i][j]];
if (inOverbar) {
var overbarStart = [offsetx, -text.height * 1.4 + offsety];
var overbarEnd = [offsetx + text.width * glyph.w, overbarStart[1]];
if (!lastHadOverbar) {
overbarStart[0] += text.height * 1.4 * tilt;
lastHadOverbar = true;
}
ctx.beginPath();
ctx.moveTo(...overbarStart);
ctx.lineTo(...overbarEnd);
ctx.stroke();
} else {
lastHadOverbar = false;
}
for (var line of glyph.l) {
ctx.beginPath();
ctx.moveTo(...calcFontPoint(line[0], text, offsetx, offsety, tilt));
for (var k = 1; k < line.length; k++) {
ctx.lineTo(...calcFontPoint(line[k], text, offsetx, offsety, tilt));
}
ctx.stroke();
}
offsetx += glyph.w * text.width;
}
offsety += interline;
}
ctx.restore();
}
function drawedge(ctx, scalefactor, edge, color) {
ctx.strokeStyle = color;
ctx.fillStyle = color;
ctx.lineWidth = Math.max(1 / scalefactor, edge.width);
ctx.lineCap = "round";
ctx.lineJoin = "round";
if ("svgpath" in edge) {
ctx.stroke(new Path2D(edge.svgpath));
} else {
ctx.beginPath();
if (edge.type == "segment") {
ctx.moveTo(...edge.start);
ctx.lineTo(...edge.end);
}
if (edge.type == "rect") {
ctx.moveTo(...edge.start);
ctx.lineTo(edge.start[0], edge.end[1]);
ctx.lineTo(...edge.end);
ctx.lineTo(edge.end[0], edge.start[1]);
ctx.lineTo(...edge.start);
}
if (edge.type == "arc") {
ctx.arc(
...edge.start,
edge.radius,
deg2rad(edge.startangle),
deg2rad(edge.endangle));
}
if (edge.type == "circle") {
ctx.arc(
...edge.start,
edge.radius,
0, 2 * Math.PI);
ctx.closePath();
}
if (edge.type == "curve") {
ctx.moveTo(...edge.start);
ctx.bezierCurveTo(...edge.cpa, ...edge.cpb, ...edge.end);
}
if("filled" in edge && edge.filled)
ctx.fill();
else
ctx.stroke();
}
}
function getChamferedRectPath(size, radius, chamfpos, chamfratio) {
// chamfpos is a bitmask, left = 1, right = 2, bottom left = 4, bottom right = 8
var path = new Path2D();
var width = size[0];
var height = size[1];
var x = width * -0.5;
var y = height * -0.5;
var chamfOffset = Math.min(width, height) * chamfratio;
path.moveTo(x, 0);
if (chamfpos & 4) {
path.lineTo(x, y + height - chamfOffset);
path.lineTo(x + chamfOffset, y + height);
path.lineTo(0, y + height);
} else {
path.arcTo(x, y + height, x + width, y + height, radius);
}
if (chamfpos & 8) {
path.lineTo(x + width - chamfOffset, y + height);
path.lineTo(x + width, y + height - chamfOffset);
path.lineTo(x + width, 0);
} else {
path.arcTo(x + width, y + height, x + width, y, radius);
}
if (chamfpos & 2) {
path.lineTo(x + width, y + chamfOffset);
path.lineTo(x + width - chamfOffset, y);
path.lineTo(0, y);
} else {
path.arcTo(x + width, y, x, y, radius);
}
if (chamfpos & 1) {
path.lineTo(x + chamfOffset, y);
path.lineTo(x, y + chamfOffset);
path.lineTo(x, 0);
} else {
path.arcTo(x, y, x, y + height, radius);
}
path.closePath();
return path;
}
function getOblongPath(size) {
return getChamferedRectPath(size, Math.min(size[0], size[1]) / 2, 0, 0);
}
function getPolygonsPath(shape) {
if (shape.path2d) {
return shape.path2d;
}
if ("svgpath" in shape) {
shape.path2d = new Path2D(shape.svgpath);
} else {
var path = new Path2D();
for (var polygon of shape.polygons) {
path.moveTo(...polygon[0]);
for (var i = 1; i < polygon.length; i++) {
path.lineTo(...polygon[i]);
}
path.closePath();
}
shape.path2d = path;
}
return shape.path2d;
}
function drawPolygonShape(ctx, scalefactor, shape, color) {
ctx.save();
if (!("svgpath" in shape)) {
ctx.translate(...shape.pos);
ctx.rotate(deg2rad(-shape.angle));
}
if("filled" in shape && !shape.filled) {
ctx.strokeStyle = color;
ctx.lineWidth = Math.max(1 / scalefactor, shape.width);
ctx.lineCap = "round";
ctx.lineJoin = "round";
ctx.stroke(getPolygonsPath(shape));
} else {
ctx.fillStyle = color;
ctx.fill(getPolygonsPath(shape));
}
ctx.restore();
}
function drawDrawing(ctx, scalefactor, drawing, color) {
if (["segment", "arc", "circle", "curve", "rect"].includes(drawing.type)) {
drawedge(ctx, scalefactor, drawing, color);
} else if (drawing.type == "polygon") {
drawPolygonShape(ctx, scalefactor, drawing, color);
} else {
drawText(ctx, drawing, color);
}
}
function getCirclePath(radius) {
var path = new Path2D();
path.arc(0, 0, radius, 0, 2 * Math.PI);
path.closePath();
return path;
}
function getCachedPadPath(pad) {
if (!pad.path2d) {
// if path2d is not set, build one and cache it on pad object
if (pad.shape == "rect") {
pad.path2d = new Path2D();
pad.path2d.rect(...pad.size.map(c => -c * 0.5), ...pad.size);
} else if (pad.shape == "oval") {
pad.path2d = getOblongPath(pad.size);
} else if (pad.shape == "circle") {
pad.path2d = getCirclePath(pad.size[0] / 2);
} else if (pad.shape == "roundrect") {
pad.path2d = getChamferedRectPath(pad.size, pad.radius, 0, 0);
} else if (pad.shape == "chamfrect") {
pad.path2d = getChamferedRectPath(pad.size, pad.radius, pad.chamfpos, pad.chamfratio)
} else if (pad.shape == "custom") {
pad.path2d = getPolygonsPath(pad);
}
}
return pad.path2d;
}
function drawPad(ctx, pad, color, outline) {
ctx.save();
ctx.translate(...pad.pos);
ctx.rotate(-deg2rad(pad.angle));
if (pad.offset) {
ctx.translate(...pad.offset);
}
ctx.fillStyle = color;
ctx.strokeStyle = color;
var path = getCachedPadPath(pad);
if (outline) {
ctx.stroke(path);
} else {
ctx.fill(path);
}
ctx.restore();
}
function drawPadHole(ctx, pad, padHoleColor) {
if (pad.type != "th") return;
ctx.save();
ctx.translate(...pad.pos);
ctx.rotate(-deg2rad(pad.angle));
ctx.fillStyle = padHoleColor;
if (pad.drillshape == "oblong") {
ctx.fill(getOblongPath(pad.drillsize));
} else {
ctx.fill(getCirclePath(pad.drillsize[0] / 2));
}
ctx.restore();
}
function drawFootprint(ctx, layer, scalefactor, footprint, colors, highlight, outline) {
if (highlight) {
// draw bounding box
if (footprint.layer == layer) {
ctx.save();
ctx.globalAlpha = 0.2;
ctx.translate(...footprint.bbox.pos);
ctx.rotate(deg2rad(-footprint.bbox.angle));
ctx.translate(...footprint.bbox.relpos);
ctx.fillStyle = colors.pad;
ctx.fillRect(0, 0, ...footprint.bbox.size);
ctx.globalAlpha = 1;
ctx.strokeStyle = colors.pad;
ctx.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);
}
}
// 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) {
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, color, highlight) {
ctx = canvas.getContext("2d");
ctx.strokeStyle = color;
ctx.lineCap = "round";
for (var track of pcbdata.tracks[layer]) {
if (highlight && highlightedNet != track.net) continue;
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();
}
}
function drawZones(canvas, layer, color, highlight) {
ctx = canvas.getContext("2d");
ctx.strokeStyle = color;
ctx.fillStyle = color;
ctx.lineJoin = "round";
for (var zone of pcbdata.zones[layer]) {
if (!zone.path2d) {
zone.path2d = getPolygonsPath(zone);
}
if (highlight && highlightedNet != zone.net) continue;
ctx.fill(zone.path2d);
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.renderTracks) {
var trackColor = style.getPropertyValue(highlight ? '--track-color-highlight' : '--track-color');
drawTracks(canvas, layer, trackColor, highlight);
}
if (settings.renderZones) {
var zoneColor = style.getPropertyValue(highlight ? '--zone-color-highlight' : '--zone-color');
drawZones(canvas, layer, zoneColor, 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));
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) {
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));
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 bbox = applyRotation(pcbdata.edges_bbox);
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;
var flip = (layerdict.layer == "B");
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;
if (layerdict.layer == "B") {
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);
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 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();
}
function setShowBOMColumn(field, value) {
if (field === "references") {
var rl = document.getElementById("reflookup");
rl.disabled = !value;
if (!value) {
rl.value = "";
updateRefLookup("");
}
}
var n = settings.hiddenColumns.indexOf(field);
if (value) {
if (n != -1) {
settings.hiddenColumns.splice(n, 1);
}
} else {
if (n == -1) {
settings.hiddenColumns.push(field);
}
}
writeStorage("hiddenColumns", JSON.stringify(settings.hiddenColumns));
if (initDone) {
populateBomTable();
}
redrawIfInitDone();
}
function setFullscreen(value) {
if (value) {
document.documentElement.requestFullscreen();
} else {
document.exitFullscreen();
}
}
function fabricationVisible(value) {
writeStorage("fabricationVisible", value);
settings.renderFabrication = value;
redrawIfInitDone();
}
function silkscreenVisible(value) {
writeStorage("silkscreenVisible", value);
settings.renderSilkscreen = value;
redrawIfInitDone();
}
function setHighlightPin1(value) {
writeStorage("highlightpin1", value);
settings.highlightpin1 = value;
redrawIfInitDone();
}
function getStoredCheckboxRefs(checkbox) {
function convert(ref) {
var intref = parseInt(ref);
if (isNaN(intref)) {
for (var i = 0; i < pcbdata.footprints.length; i++) {
if (pcbdata.footprints[i].ref == ref) {
return i;
}
}
return -1;
} else {
return intref;
}
}
if (!(checkbox in settings.checkboxStoredRefs)) {
var val = readStorage("checkbox_" + checkbox);
settings.checkboxStoredRefs[checkbox] = val ? val : "";
}
if (!settings.checkboxStoredRefs[checkbox]) {
return new Set();
} else {
return new Set(settings.checkboxStoredRefs[checkbox].split(",").map(r => convert(r)).filter(a => a >= 0));
}
}
function getCheckboxState(checkbox, references) {
var storedRefsSet = getStoredCheckboxRefs(checkbox);
var currentRefsSet = new Set(references.map(r => r[1]));
// Get difference of current - stored
var difference = new Set(currentRefsSet);
for (ref of storedRefsSet) {
difference.delete(ref);
}
if (difference.size == 0) {
// All the current refs are stored
return "checked";
} else if (difference.size == currentRefsSet.size) {
// None of the current refs are stored
return "unchecked";
} else {
// Some of the refs are stored
return "indeterminate";
}
}
function setBomCheckboxState(checkbox, element, references) {
var state = getCheckboxState(checkbox, references);
element.checked = (state == "checked");
element.indeterminate = (state == "indeterminate");
}
function createCheckboxChangeHandler(checkbox, references, row) {
return function () {
refsSet = getStoredCheckboxRefs(checkbox);
var markWhenChecked = settings.markWhenChecked == checkbox;
eventArgs = {
checkbox: checkbox,
refs: references,
}
if (this.checked) {
// checkbox ticked
for (var ref of references) {
refsSet.add(ref[1]);
}
if (markWhenChecked) {
row.classList.add("checked");
for (var ref of references) {
markedFootprints.add(ref[1]);
}
drawHighlights();
}
eventArgs.state = 'checked';
} else {
// checkbox unticked
for (var ref of references) {
refsSet.delete(ref[1]);
}
if (markWhenChecked) {
row.classList.remove("checked");
for (var ref of references) {
markedFootprints.delete(ref[1]);
}
drawHighlights();
}
eventArgs.state = 'unchecked';
}
settings.checkboxStoredRefs[checkbox] = [...refsSet].join(",");
writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
updateCheckboxStats(checkbox);
EventHandler.emitEvent(IBOM_EVENT_TYPES.CHECKBOX_CHANGE_EVENT, eventArgs);
}
}
function clearHighlightedFootprints() {
if (currentHighlightedRowId) {
document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
currentHighlightedRowId = null;
highlightedFootprints = [];
highlightedNet = null;
}
}
function createRowHighlightHandler(rowid, refs, net) {
return function () {
if (currentHighlightedRowId) {
if (currentHighlightedRowId == rowid) {
return;
}
document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
}
document.getElementById(rowid).classList.add("highlighted");
currentHighlightedRowId = rowid;
highlightedFootprints = refs ? refs.map(r => r[1]) : [];
highlightedNet = net;
drawHighlights();
EventHandler.emitEvent(
IBOM_EVENT_TYPES.HIGHLIGHT_EVENT, {
rowid: rowid,
refs: refs,
net: net
});
}
}
function 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 (pcbdata.bom.fields[ref[1]][i].toLowerCase().indexOf(filter) >= 0) {
return true;
}
}
}
}
return false;
}
function findRefInEntry(entry) {
return entry.filter(r => r[0].toLowerCase() == reflookup);
}
function highlightFilter(s) {
if (!filter) {
return s;
}
var parts = s.toLowerCase().split(filter);
if (parts.length == 1) {
return s;
}
var r = "";
var pos = 0;
for (var i in parts) {
if (i > 0) {
r += '<mark class="highlight">' +
s.substring(pos, pos + filter.length) +
'</mark>';
pos += filter.length;
}
r += s.substring(pos, pos + parts[i].length);
pos += parts[i].length;
}
return r;
}
function checkboxSetUnsetAllHandler(checkboxname) {
return function () {
var checkboxnum = 0;
while (checkboxnum < settings.checkboxes.length &&
settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
checkboxnum++;
}
if (checkboxnum >= settings.checkboxes.length) {
return;
}
var allset = true;
var checkbox;
var row;
for (row of bombody.childNodes) {
checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
if (!checkbox.checked || checkbox.indeterminate) {
allset = false;
break;
}
}
for (row of bombody.childNodes) {
checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
checkbox.checked = !allset;
checkbox.indeterminate = false;
checkbox.onchange();
}
}
}
function createColumnHeader(name, cls, comparator, is_checkbox = false) {
var th = document.createElement("TH");
th.innerHTML = name;
th.classList.add(cls);
if (is_checkbox)
th.setAttribute("col_name", "bom-checkbox");
else
th.setAttribute("col_name", name);
var span = document.createElement("SPAN");
span.classList.add("sortmark");
span.classList.add("none");
th.appendChild(span);
var spacer = document.createElement("div");
spacer.className = "column-spacer";
th.appendChild(spacer);
spacer.onclick = function () {
if (currentSortColumn && th !== currentSortColumn) {
// Currently sorted by another column
currentSortColumn.childNodes[1].classList.remove(currentSortOrder);
currentSortColumn.childNodes[1].classList.add("none");
currentSortColumn = null;
currentSortOrder = null;
}
if (currentSortColumn && th === currentSortColumn) {
// Already sorted by this column
if (currentSortOrder == "asc") {
// Sort by this column, descending order
bomSortFunction = function (a, b) {
return -comparator(a, b);
}
currentSortColumn.childNodes[1].classList.remove("asc");
currentSortColumn.childNodes[1].classList.add("desc");
currentSortOrder = "desc";
} else {
// Unsort
bomSortFunction = null;
currentSortColumn.childNodes[1].classList.remove("desc");
currentSortColumn.childNodes[1].classList.add("none");
currentSortColumn = null;
currentSortOrder = null;
}
} else {
// Sort by this column, ascending order
bomSortFunction = comparator;
currentSortColumn = th;
currentSortColumn.childNodes[1].classList.remove("none");
currentSortColumn.childNodes[1].classList.add("asc");
currentSortOrder = "asc";
}
populateBomBody();
}
if (is_checkbox) {
spacer.onclick = fancyDblClickHandler(
spacer, spacer.onclick, checkboxSetUnsetAllHandler(name));
}
return th;
}
function populateBomHeader(placeHolderColumn = null, placeHolderElements = null) {
while (bomhead.firstChild) {
bomhead.removeChild(bomhead.firstChild);
}
var tr = document.createElement("TR");
var th = document.createElement("TH");
th.classList.add("numCol");
var vismenu = document.createElement("div");
vismenu.id = "vismenu";
vismenu.classList.add("menu");
var visbutton = document.createElement("div");
visbutton.classList.add("visbtn");
visbutton.classList.add("hideonprint");
var viscontent = document.createElement("div");
viscontent.classList.add("menu-content");
viscontent.id = "vismenu-content";
settings.columnOrder.forEach(column => {
if (typeof column !== "string")
return;
// Skip empty columns
if (column === "checkboxes" && settings.checkboxes.length == 0)
return;
else if (column === "Quantity" && settings.bommode == "ungrouped")
return;
var label = document.createElement("label");
label.classList.add("menu-label");
var input = document.createElement("input");
input.classList.add("visibility_checkbox");
input.type = "checkbox";
input.onchange = function (e) {
setShowBOMColumn(column, e.target.checked)
};
input.checked = !(settings.hiddenColumns.includes(column));
label.appendChild(input);
if (column.length > 0)
label.append(column[0].toUpperCase() + column.slice(1));
viscontent.appendChild(label);
});
viscontent.childNodes[0].classList.add("menu-label-top");
vismenu.appendChild(visbutton);
if (settings.bommode != "netlist") {
vismenu.appendChild(viscontent);
th.appendChild(vismenu);
}
tr.appendChild(th);
var checkboxCompareClosure = function (checkbox) {
return (a, b) => {
var stateA = getCheckboxState(checkbox, a);
var stateB = getCheckboxState(checkbox, b);
if (stateA > stateB) return -1;
if (stateA < stateB) return 1;
return 0;
}
}
var stringFieldCompareClosure = function (fieldIndex) {
return (a, b) => {
var fa = pcbdata.bom.fields[a[0][1]][fieldIndex];
var fb = pcbdata.bom.fields[b[0][1]][fieldIndex];
if (fa != fb) return fa > fb ? 1 : -1;
else return 0;
}
}
var referenceRegex = /(?<prefix>[^0-9]+)(?<number>[0-9]+)/;
var compareRefs = (a, b) => {
var ra = referenceRegex.exec(a);
var rb = referenceRegex.exec(b);
if (ra === null || rb === null) {
if (a != b) return a > b ? 1 : -1;
return 0;
} else {
if (ra.groups.prefix != rb.groups.prefix) {
return ra.groups.prefix > rb.groups.prefix ? 1 : -1;
}
if (ra.groups.number != rb.groups.number) {
return parseInt(ra.groups.number) > parseInt(rb.groups.number) ? 1 : -1;
}
return 0;
}
}
if (settings.bommode == "netlist") {
th = createColumnHeader("Net name", "bom-netname", (a, b) => {
if (a > b) return -1;
if (a < b) return 1;
return 0;
});
tr.appendChild(th);
} else {
// Filter hidden columns
var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
var valueIndex = config.fields.indexOf("Value");
var footprintIndex = config.fields.indexOf("Footprint");
columns.forEach((column) => {
if (column === placeHolderColumn) {
var n = 1;
if (column === "checkboxes")
n = settings.checkboxes.length;
for (i = 0; i < n; i++) {
td = placeHolderElements.shift();
tr.appendChild(td);
}
return;
} else if (column === "checkboxes") {
for (var checkbox of settings.checkboxes) {
th = createColumnHeader(
checkbox, "bom-checkbox", checkboxCompareClosure(checkbox), true);
tr.appendChild(th);
}
} else if (column === "References") {
tr.appendChild(createColumnHeader("References", "references", (a, b) => {
var i = 0;
while (i < a.length && i < b.length) {
if (a[i] != b[i]) return compareRefs(a[i][0], b[i][0]);
i++;
}
return a.length - b.length;
}));
} else if (column === "Value") {
tr.appendChild(createColumnHeader("Value", "value", (a, b) => {
var ra = a[0][1], rb = b[0][1];
return valueCompare(
pcbdata.bom.parsedValues[ra], pcbdata.bom.parsedValues[rb],
pcbdata.bom.fields[ra][valueIndex], pcbdata.bom.fields[rb][valueIndex]);
}));
return;
} else if (column === "Footprint") {
tr.appendChild(createColumnHeader(
"Footprint", "footprint", stringFieldCompareClosure(footprintIndex)));
} else if (column === "Quantity" && settings.bommode == "grouped") {
tr.appendChild(createColumnHeader("Quantity", "quantity", (a, b) => {
return a.length - b.length;
}));
} else {
// Other fields
var i = config.fields.indexOf(column);
if (i < 0)
return;
tr.appendChild(createColumnHeader(
column, `field${i + 1}`, stringFieldCompareClosure(i)));
}
});
}
bomhead.appendChild(tr);
}
function populateBomBody(placeholderColumn = null, placeHolderElements = null) {
while (bom.firstChild) {
bom.removeChild(bom.firstChild);
}
highlightHandlers = [];
footprintIndexToHandler = {};
netsToHandler = {};
currentHighlightedRowId = null;
var first = true;
if (settings.bommode == "netlist") {
bomtable = pcbdata.nets.slice();
} else {
switch (settings.canvaslayout) {
case 'F':
bomtable = pcbdata.bom.F.slice();
break;
case 'FB':
bomtable = pcbdata.bom.both.slice();
break;
case 'B':
bomtable = pcbdata.bom.B.slice();
break;
}
if (settings.bommode == "ungrouped") {
// expand bom table
expandedTable = []
for (var bomentry of bomtable) {
for (var ref of bomentry) {
expandedTable.push([ref]);
}
}
bomtable = expandedTable;
}
}
if (bomSortFunction) {
bomtable = bomtable.sort(bomSortFunction);
}
for (var i in bomtable) {
var bomentry = bomtable[i];
if (filter && !entryMatches(bomentry)) {
continue;
}
var references = null;
var netname = null;
var tr = document.createElement("TR");
var td = document.createElement("TD");
var rownum = +i + 1;
tr.id = "bomrow" + rownum;
td.textContent = rownum;
tr.appendChild(td);
if (settings.bommode == "netlist") {
netname = bomentry;
td = document.createElement("TD");
td.innerHTML = highlightFilter(netname ? netname : "&lt;no net&gt;");
tr.appendChild(td);
} else {
if (reflookup) {
references = findRefInEntry(bomentry);
if (references.length == 0) {
continue;
}
} else {
references = bomentry;
}
// Filter hidden columns
var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
columns.forEach((column) => {
if (column === placeholderColumn) {
var n = 1;
if (column === "checkboxes")
n = settings.checkboxes.length;
for (i = 0; i < n; i++) {
td = placeHolderElements.shift();
tr.appendChild(td);
}
return;
} else if (column === "checkboxes") {
for (var checkbox of settings.checkboxes) {
if (checkbox) {
td = document.createElement("TD");
var input = document.createElement("input");
input.type = "checkbox";
input.onchange = createCheckboxChangeHandler(checkbox, references, tr);
setBomCheckboxState(checkbox, input, references);
if (input.checked && settings.markWhenChecked == checkbox) {
tr.classList.add("checked");
}
td.appendChild(input);
tr.appendChild(td);
}
}
} else if (column === "References") {
td = document.createElement("TD");
td.innerHTML = highlightFilter(references.map(r => r[0]).join(", "));
tr.appendChild(td);
} else if (column === "Quantity" && settings.bommode == "grouped") {
// Quantity
td = document.createElement("TD");
td.textContent = references.length;
tr.appendChild(td);
} else {
// All the other fields
var field_index = config.fields.indexOf(column)
if (field_index < 0)
return;
var valueSet = new Set();
references.map(r => r[1]).forEach((id) => valueSet.add(pcbdata.bom.fields[id][field_index]));
td = document.createElement("TD");
td.innerHTML = highlightFilter(Array.from(valueSet).join(", "));
tr.appendChild(td);
}
});
}
bom.appendChild(tr);
var handler = createRowHighlightHandler(tr.id, references, netname);
tr.onmousemove = handler;
highlightHandlers.push({
id: tr.id,
handler: handler,
});
if (references !== null) {
for (var refIndex of references.map(r => r[1])) {
footprintIndexToHandler[refIndex] = handler;
}
}
if (netname !== null) {
netsToHandler[netname] = handler;
}
if ((filter || reflookup) && first) {
handler();
first = false;
}
}
EventHandler.emitEvent(
IBOM_EVENT_TYPES.BOM_BODY_CHANGE_EVENT, {
filter: filter,
reflookup: reflookup,
checkboxes: settings.checkboxes,
bommode: settings.bommode,
});
}
function highlightPreviousRow() {
if (!currentHighlightedRowId) {
highlightHandlers[highlightHandlers.length - 1].handler();
} else {
if (highlightHandlers.length > 1 &&
highlightHandlers[0].id == currentHighlightedRowId) {
highlightHandlers[highlightHandlers.length - 1].handler();
} else {
for (var i = 0; i < highlightHandlers.length - 1; i++) {
if (highlightHandlers[i + 1].id == currentHighlightedRowId) {
highlightHandlers[i].handler();
break;
}
}
}
}
smoothScrollToRow(currentHighlightedRowId);
}
function highlightNextRow() {
if (!currentHighlightedRowId) {
highlightHandlers[0].handler();
} else {
if (highlightHandlers.length > 1 &&
highlightHandlers[highlightHandlers.length - 1].id == currentHighlightedRowId) {
highlightHandlers[0].handler();
} else {
for (var i = 1; i < highlightHandlers.length; i++) {
if (highlightHandlers[i - 1].id == currentHighlightedRowId) {
highlightHandlers[i].handler();
break;
}
}
}
}
smoothScrollToRow(currentHighlightedRowId);
}
function populateBomTable() {
populateBomHeader();
populateBomBody();
setBomHandlers();
resizableGrid(bomhead);
}
function footprintsClicked(footprintIndexes) {
var lastClickedIndex = footprintIndexes.indexOf(lastClicked);
for (var i = 1; i <= footprintIndexes.length; i++) {
var refIndex = footprintIndexes[(lastClickedIndex + i) % footprintIndexes.length];
if (refIndex in footprintIndexToHandler) {
lastClicked = refIndex;
footprintIndexToHandler[refIndex]();
smoothScrollToRow(currentHighlightedRowId);
break;
}
}
}
function netClicked(net) {
if (net in netsToHandler) {
netsToHandler[net]();
smoothScrollToRow(currentHighlightedRowId);
} else {
clearHighlightedFootprints();
highlightedNet = net;
drawHighlights();
}
}
function updateFilter(input) {
filter = input.toLowerCase();
populateBomTable();
}
function updateRefLookup(input) {
reflookup = input.toLowerCase();
populateBomTable();
}
function changeCanvasLayout(layout) {
document.getElementById("fl-btn").classList.remove("depressed");
document.getElementById("fb-btn").classList.remove("depressed");
document.getElementById("bl-btn").classList.remove("depressed");
switch (layout) {
case 'F':
document.getElementById("fl-btn").classList.add("depressed");
if (settings.bomlayout != "bom-only") {
canvassplit.collapse(1);
}
break;
case 'B':
document.getElementById("bl-btn").classList.add("depressed");
if (settings.bomlayout != "bom-only") {
canvassplit.collapse(0);
}
break;
default:
document.getElementById("fb-btn").classList.add("depressed");
if (settings.bomlayout != "bom-only") {
canvassplit.setSizes([50, 50]);
}
}
settings.canvaslayout = layout;
writeStorage("canvaslayout", layout);
resizeAll();
changeBomMode(settings.bommode);
}
function populateMetadata() {
document.getElementById("title").innerHTML = pcbdata.metadata.title;
document.getElementById("revision").innerHTML = "Rev: " + pcbdata.metadata.revision;
document.getElementById("company").innerHTML = pcbdata.metadata.company;
document.getElementById("filedate").innerHTML = pcbdata.metadata.date;
if (pcbdata.metadata.title != "") {
document.title = pcbdata.metadata.title + " BOM";
}
// Calculate board stats
var fp_f = 0,
fp_b = 0,
pads_f = 0,
pads_b = 0,
pads_th = 0;
for (var i = 0; i < pcbdata.footprints.length; i++) {
if (pcbdata.bom.skipped.includes(i)) continue;
var mod = pcbdata.footprints[i];
if (mod.layer == "F") {
fp_f++;
} else {
fp_b++;
}
for (var pad of mod.pads) {
if (pad.type == "th") {
pads_th++;
} else {
if (pad.layers.includes("F")) {
pads_f++;
}
if (pad.layers.includes("B")) {
pads_b++;
}
}
}
}
document.getElementById("stats-components-front").innerHTML = fp_f;
document.getElementById("stats-components-back").innerHTML = fp_b;
document.getElementById("stats-components-total").innerHTML = fp_f + fp_b;
document.getElementById("stats-groups-front").innerHTML = pcbdata.bom.F.length;
document.getElementById("stats-groups-back").innerHTML = pcbdata.bom.B.length;
document.getElementById("stats-groups-total").innerHTML = pcbdata.bom.both.length;
document.getElementById("stats-smd-pads-front").innerHTML = pads_f;
document.getElementById("stats-smd-pads-back").innerHTML = pads_b;
document.getElementById("stats-smd-pads-total").innerHTML = pads_f + pads_b;
document.getElementById("stats-th-pads").innerHTML = pads_th;
// Update version string
document.getElementById("github-link").innerHTML = "InteractiveHtmlBom&nbsp;" +
/^v\d+\.\d+/.exec(pcbdata.ibom_version)[0];
}
function changeBomLayout(layout) {
document.getElementById("bom-btn").classList.remove("depressed");
document.getElementById("lr-btn").classList.remove("depressed");
document.getElementById("tb-btn").classList.remove("depressed");
switch (layout) {
case 'bom-only':
document.getElementById("bom-btn").classList.add("depressed");
if (bomsplit) {
bomsplit.destroy();
bomsplit = null;
canvassplit.destroy();
canvassplit = null;
}
document.getElementById("frontcanvas").style.display = "none";
document.getElementById("backcanvas").style.display = "none";
document.getElementById("bot").style.height = "";
break;
case 'top-bottom':
document.getElementById("tb-btn").classList.add("depressed");
document.getElementById("frontcanvas").style.display = "";
document.getElementById("backcanvas").style.display = "";
document.getElementById("bot").style.height = "calc(100% - 80px)";
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("bot").style.height = "calc(100% - 80px)";
document.getElementById("bomdiv").classList.add("split-horizontal");
document.getElementById("canvasdiv").classList.add("split-horizontal");
document.getElementById("frontcanvas").classList.remove("split-horizontal");
document.getElementById("backcanvas").classList.remove("split-horizontal");
if (bomsplit) {
bomsplit.destroy();
bomsplit = null;
canvassplit.destroy();
canvassplit = null;
}
bomsplit = Split(['#bomdiv', '#canvasdiv'], {
sizes: [50, 50],
onDragEnd: resizeAll,
gutterSize: 5
});
canvassplit = Split(['#frontcanvas', '#backcanvas'], {
sizes: [50, 50],
gutterSize: 5,
direction: "vertical",
onDragEnd: resizeAll
});
}
settings.bomlayout = layout;
writeStorage("bomlayout", layout);
changeCanvasLayout(settings.canvaslayout);
}
function changeBomMode(mode) {
document.getElementById("bom-grouped-btn").classList.remove("depressed");
document.getElementById("bom-ungrouped-btn").classList.remove("depressed");
document.getElementById("bom-netlist-btn").classList.remove("depressed");
var chkbxs = document.getElementsByClassName("visibility_checkbox");
switch (mode) {
case 'grouped':
document.getElementById("bom-grouped-btn").classList.add("depressed");
for (var i = 0; i < chkbxs.length; i++) {
chkbxs[i].disabled = false;
}
break;
case 'ungrouped':
document.getElementById("bom-ungrouped-btn").classList.add("depressed");
for (var i = 0; i < chkbxs.length; i++) {
chkbxs[i].disabled = false;
}
break;
case 'netlist':
document.getElementById("bom-netlist-btn").classList.add("depressed");
for (var i = 0; i < chkbxs.length; i++) {
chkbxs[i].disabled = true;
}
}
writeStorage("bommode", mode);
if (mode != settings.bommode) {
settings.bommode = mode;
bomSortFunction = null;
currentSortColumn = null;
currentSortOrder = null;
clearHighlightedFootprints();
}
populateBomTable();
}
function focusFilterField() {
focusInputField(document.getElementById("filter"));
}
function focusRefLookupField() {
focusInputField(document.getElementById("reflookup"));
}
function toggleBomCheckbox(bomrowid, checkboxnum) {
if (!bomrowid || checkboxnum > settings.checkboxes.length) {
return;
}
var bomrow = document.getElementById(bomrowid);
var checkbox = bomrow.childNodes[checkboxnum].childNodes[0];
checkbox.checked = !checkbox.checked;
checkbox.indeterminate = false;
checkbox.onchange();
}
function checkBomCheckbox(bomrowid, checkboxname) {
var checkboxnum = 0;
while (checkboxnum < settings.checkboxes.length &&
settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
checkboxnum++;
}
if (!bomrowid || checkboxnum >= settings.checkboxes.length) {
return;
}
var bomrow = document.getElementById(bomrowid);
var checkbox = bomrow.childNodes[checkboxnum + 1].childNodes[0];
checkbox.checked = true;
checkbox.indeterminate = false;
checkbox.onchange();
}
function setBomCheckboxes(value) {
writeStorage("bomCheckboxes", value);
settings.checkboxes = value.split(",").map((e) => e.trim()).filter((e) => e);
prepCheckboxes();
populateMarkWhenCheckedOptions();
setMarkWhenChecked(settings.markWhenChecked);
}
function setMarkWhenChecked(value) {
writeStorage("markWhenChecked", value);
settings.markWhenChecked = value;
markedFootprints.clear();
for (var ref of (value ? getStoredCheckboxRefs(value) : [])) {
markedFootprints.add(ref);
}
populateBomTable();
drawHighlights();
}
function prepCheckboxes() {
var table = document.getElementById("checkbox-stats");
while (table.childElementCount > 1) {
table.removeChild(table.lastChild);
}
if (settings.checkboxes.length) {
table.style.display = "";
} else {
table.style.display = "none";
}
for (var checkbox of settings.checkboxes) {
var tr = document.createElement("TR");
var td = document.createElement("TD");
td.innerHTML = checkbox;
tr.appendChild(td);
td = document.createElement("TD");
td.id = "checkbox-stats-" + checkbox;
var progressbar = document.createElement("div");
progressbar.classList.add("bar");
td.appendChild(progressbar);
var text = document.createElement("div");
text.classList.add("text");
td.appendChild(text);
tr.appendChild(td);
table.appendChild(tr);
updateCheckboxStats(checkbox);
}
}
function populateMarkWhenCheckedOptions() {
var container = document.getElementById("markWhenCheckedContainer");
if (settings.checkboxes.length == 0) {
container.parentElement.style.display = "none";
return;
}
container.innerHTML = '';
container.parentElement.style.display = "inline-block";
function createOption(name, displayName) {
var id = "markWhenChecked-" + name;
var div = document.createElement("div");
div.classList.add("radio-container");
var input = document.createElement("input");
input.type = "radio";
input.name = "markWhenChecked";
input.value = name;
input.id = id;
input.onchange = () => setMarkWhenChecked(name);
div.appendChild(input);
// Preserve the selected element when the checkboxes change
if (name == settings.markWhenChecked) {
input.checked = true;
}
var label = document.createElement("label");
label.innerHTML = displayName;
label.htmlFor = id;
div.appendChild(label);
container.appendChild(div);
}
createOption("", "None");
for (var checkbox of settings.checkboxes) {
createOption(checkbox, checkbox);
}
}
function updateCheckboxStats(checkbox) {
var checked = getStoredCheckboxRefs(checkbox).size;
var total = pcbdata.footprints.length - pcbdata.bom.skipped.length;
var percent = checked * 100.0 / total;
var td = document.getElementById("checkbox-stats-" + checkbox);
td.firstChild.style.width = percent + "%";
td.lastChild.innerHTML = checked + "/" + total + " (" + Math.round(percent) + "%)";
}
function constrain(number, min, max){
return Math.min(Math.max(parseInt(number), min), max);
}
document.onkeydown = function (e) {
switch (e.key) {
case "n":
if (document.activeElement.type == "text") {
return;
}
if (currentHighlightedRowId !== null) {
checkBomCheckbox(currentHighlightedRowId, "placed");
highlightNextRow();
e.preventDefault();
}
break;
case "ArrowUp":
highlightPreviousRow();
e.preventDefault();
break;
case "ArrowDown":
highlightNextRow();
e.preventDefault();
break;
case "ArrowLeft":
case "ArrowRight":
if (document.activeElement.type != "text"){
e.preventDefault();
let boardRotationElement = document.getElementById("boardRotation")
settings.boardRotation = parseInt(boardRotationElement.value); // degrees / 5
if (e.key == "ArrowLeft"){
settings.boardRotation += 3; // 15 degrees
}
else{
settings.boardRotation -= 3;
}
settings.boardRotation = constrain(settings.boardRotation, boardRotationElement.min, boardRotationElement.max);
boardRotationElement.value = settings.boardRotation
setBoardRotation(settings.boardRotation);
}
break;
default:
break;
}
if (e.altKey) {
switch (e.key) {
case "f":
focusFilterField();
e.preventDefault();
break;
case "r":
focusRefLookupField();
e.preventDefault();
break;
case "z":
changeBomLayout("bom-only");
e.preventDefault();
break;
case "x":
changeBomLayout("left-right");
e.preventDefault();
break;
case "c":
changeBomLayout("top-bottom");
e.preventDefault();
break;
case "v":
changeCanvasLayout("F");
e.preventDefault();
break;
case "b":
changeCanvasLayout("FB");
e.preventDefault();
break;
case "n":
changeCanvasLayout("B");
e.preventDefault();
break;
default:
break;
}
if (e.key >= '1' && e.key <= '9') {
toggleBomCheckbox(currentHighlightedRowId, parseInt(e.key));
e.preventDefault();
}
}
}
function hideNetlistButton() {
document.getElementById("bom-ungrouped-btn").classList.remove("middle-button");
document.getElementById("bom-ungrouped-btn").classList.add("right-most-button");
document.getElementById("bom-netlist-btn").style.display = "none";
}
window.onload = function (e) {
initUtils();
initRender();
initStorage();
initDefaults();
cleanGutters();
populateMetadata();
dbgdiv = document.getElementById("dbg");
bom = document.getElementById("bombody");
bomhead = document.getElementById("bomhead");
filter = "";
reflookup = "";
if (!("nets" in pcbdata)) {
hideNetlistButton();
}
initDone = true;
setBomCheckboxes(document.getElementById("bomCheckboxes").value);
// Triggers render
changeBomLayout(settings.bomlayout);
// Users may leave fullscreen without touching the checkbox. Uncheck.
document.addEventListener('fullscreenchange', () => {
if (!document.fullscreenElement)
document.getElementById('fullscreenCheckbox').checked = false;
});
}
window.onresize = resizeAll;
window.matchMedia("print").addListener(resizeAll);
///////////////////////////////////////////////
///////////////////////////////////////////////
///////////////////////////////////////////////
</script>
</head>
<body>
<div id="topmostdiv" class="topmostdiv">
<div id="top">
<div style="float: right; height: 100%;">
<div class="hideonprint menu" style="float: right; top: 8px;">
<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="highlightpin1Checkbox" type="checkbox" onchange="setHighlightPin1(this.checked)">
Highlight first pin
</label>
<label class="menu-label">
<input id="dragCheckbox" type="checkbox" checked onchange="setRedrawOnDrag(this.checked)">
Continuous redraw on drag
</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">
<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"
style="float: right; position: relative; top: 8px">
<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"
style="float: right; position: relative; top: 8px">
<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"
style="float: right; position: relative; top: 8px">
<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" style="float: right; top: 8px;">
<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" style="float: right; top: 8px;">
<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>
</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 id="fileinfodiv" style="overflow: auto;">
<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>
<div id="bot" class="split" style="height: calc(100% - 80px)">
<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>