4670 lines
368 KiB
HTML
4670 lines
368 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Interactive BOM for KiCAD</title>
|
|
<style type="text/css">
|
|
:root {
|
|
--pcb-edge-color: black;
|
|
--pad-color: #878787;
|
|
--pad-hole-color: #CCCCCC;
|
|
--pad-color-highlight: #D04040;
|
|
--pad-color-highlight-both: #D0D040;
|
|
--pad-color-highlight-marked: #44a344;
|
|
--pin1-outline-color: #ffb629;
|
|
--pin1-outline-color-highlight: #ffb629;
|
|
--pin1-outline-color-highlight-both: #fcbb39;
|
|
--pin1-outline-color-highlight-marked: #fdbe41;
|
|
--silkscreen-edge-color: #aa4;
|
|
--silkscreen-polygon-color: #4aa;
|
|
--silkscreen-text-color: #4aa;
|
|
--fabrication-edge-color: #907651;
|
|
--fabrication-polygon-color: #907651;
|
|
--fabrication-text-color: #a27c24;
|
|
--track-color: #def5f1;
|
|
--track-color-highlight: #D04040;
|
|
--zone-color: #def5f1;
|
|
--zone-color-highlight: #d0404080;
|
|
}
|
|
|
|
html,
|
|
body {
|
|
margin: 0px;
|
|
height: 100%;
|
|
font-family: Verdana, sans-serif;
|
|
}
|
|
|
|
.dark.topmostdiv {
|
|
--pcb-edge-color: #eee;
|
|
--pad-color: #808080;
|
|
--pin1-outline-color: #ffa800;
|
|
--pin1-outline-color-highlight: #ccff00;
|
|
--track-color: #42524f;
|
|
--zone-color: #42524f;
|
|
background-color: #252c30;
|
|
color: #eee;
|
|
}
|
|
|
|
button {
|
|
background-color: #eee;
|
|
border: 1px solid #888;
|
|
color: black;
|
|
height: 44px;
|
|
width: 44px;
|
|
text-align: center;
|
|
text-decoration: none;
|
|
display: inline-block;
|
|
font-size: 14px;
|
|
font-weight: bolder;
|
|
}
|
|
|
|
.dark button {
|
|
/* This will be inverted */
|
|
background-color: #c3b7b5;
|
|
}
|
|
|
|
button.depressed {
|
|
background-color: #0a0;
|
|
color: white;
|
|
}
|
|
|
|
.dark button.depressed {
|
|
/* This will be inverted */
|
|
background-color: #b3b;
|
|
}
|
|
|
|
button:focus {
|
|
outline: 0;
|
|
}
|
|
|
|
button#tb-btn {
|
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.32 290.12h5.82M1.32 291.45h5.82' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 292.5v4.23M.26 292.63H8.2' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='1.35' y='295.73'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
|
|
}
|
|
|
|
button#lr-btn {
|
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.06 290.12H3.7m-2.64 1.33H3.7m-2.64 1.32H3.7m-2.64 1.3H3.7m-2.64 1.33H3.7' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 288.8v7.94m0-4.11h3.96' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='5.11' y='291.96'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
|
|
}
|
|
|
|
button#bom-btn {
|
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)' fill='none' stroke='%23000' stroke-width='.4'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' stroke-linejoin='round'/%3E%3Cpath d='M1.59 290.12h5.29M1.59 291.45h5.33M1.59 292.75h5.33M1.59 294.09h5.33M1.59 295.41h5.33'/%3E%3C/g%3E%3C/svg%3E");
|
|
}
|
|
|
|
button#bom-grouped-btn {
|
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m4 0h5m4 0h3M6.1 22h3m3.9 0h5m4 0h4m-16-8h4m4 0h4'/%3E%3Cpath stroke-linecap='null' d='M5 17.5h22M5 26.6h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
|
|
}
|
|
|
|
button#bom-ungrouped-btn {
|
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m-4 8h3m-3 8h4'/%3E%3Cpath stroke-linecap='null' d='M5 13.5h22m-22 8h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
|
|
}
|
|
|
|
button#bom-netlist-btn {
|
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' stroke='%23000' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-width='2' d='M6 26l6-6v-8m13.8-6.3l-6 6v8'/%3E%3Ccircle cx='11.8' cy='9.5' r='2.8' stroke-width='2'/%3E%3Ccircle cx='19.8' cy='22.8' r='2.8' stroke-width='2'/%3E%3C/g%3E%3C/svg%3E");
|
|
}
|
|
|
|
button#copy {
|
|
background-image: url("data:image/svg+xml,%3Csvg height='48' viewBox='0 0 48 48' width='48' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h48v48h-48z' fill='none'/%3E%3Cpath d='M32 2h-24c-2.21 0-4 1.79-4 4v28h4v-28h24v-4zm6 8h-22c-2.21 0-4 1.79-4 4v28c0 2.21 1.79 4 4 4h22c2.21 0 4-1.79 4-4v-28c0-2.21-1.79-4-4-4zm0 32h-22v-28h22v28z'/%3E%3C/svg%3E");
|
|
background-position: 6px 6px;
|
|
background-repeat: no-repeat;
|
|
background-size: 26px 26px;
|
|
border-radius: 6px;
|
|
height: 40px;
|
|
width: 40px;
|
|
margin: 10px 5px;
|
|
}
|
|
|
|
button#copy:active {
|
|
box-shadow: inset 0px 0px 5px #6c6c6c;
|
|
}
|
|
|
|
textarea.clipboard-temp {
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
width: 2em;
|
|
height: 2em;
|
|
padding: 0;
|
|
border: None;
|
|
outline: None;
|
|
box-shadow: None;
|
|
background: transparent;
|
|
}
|
|
|
|
.left-most-button {
|
|
border-right: 0;
|
|
border-top-left-radius: 6px;
|
|
border-bottom-left-radius: 6px;
|
|
}
|
|
|
|
.middle-button {
|
|
border-right: 0;
|
|
}
|
|
|
|
.right-most-button {
|
|
border-top-right-radius: 6px;
|
|
border-bottom-right-radius: 6px;
|
|
}
|
|
|
|
.button-container {
|
|
font-size: 0;
|
|
margin: 0.4rem 0.4rem 0.4rem 0;
|
|
}
|
|
|
|
.dark .button-container {
|
|
filter: invert(1);
|
|
}
|
|
|
|
.button-container button {
|
|
background-size: 32px 32px;
|
|
background-position: 5px 5px;
|
|
background-repeat: no-repeat;
|
|
}
|
|
|
|
@media print {
|
|
.hideonprint {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
canvas {
|
|
cursor: crosshair;
|
|
}
|
|
|
|
canvas:active {
|
|
cursor: grabbing;
|
|
}
|
|
|
|
.fileinfo {
|
|
width: 100%;
|
|
max-width: 1000px;
|
|
border: none;
|
|
padding: 3px;
|
|
}
|
|
|
|
.fileinfo .title {
|
|
font-size: 20pt;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.fileinfo td {
|
|
overflow: hidden;
|
|
white-space: nowrap;
|
|
max-width: 1px;
|
|
width: 50%;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
.bom {
|
|
border-collapse: collapse;
|
|
font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
|
|
font-size: 10pt;
|
|
table-layout: fixed;
|
|
width: 100%;
|
|
margin-top: 1px;
|
|
position: relative;
|
|
}
|
|
|
|
.bom th,
|
|
.bom td {
|
|
border: 1px solid black;
|
|
padding: 5px;
|
|
word-wrap: break-word;
|
|
text-align: center;
|
|
position: relative;
|
|
}
|
|
|
|
.dark .bom th,
|
|
.dark .bom td {
|
|
border: 1px solid #777;
|
|
}
|
|
|
|
.bom th {
|
|
background-color: #CCCCCC;
|
|
background-clip: padding-box;
|
|
}
|
|
|
|
.dark .bom th {
|
|
background-color: #3b4749;
|
|
}
|
|
|
|
.bom tr.highlighted:nth-child(n) {
|
|
background-color: #cfc;
|
|
}
|
|
|
|
.dark .bom tr.highlighted:nth-child(n) {
|
|
background-color: #226022;
|
|
}
|
|
|
|
.bom tr:nth-child(even) {
|
|
background-color: #f2f2f2;
|
|
}
|
|
|
|
.dark .bom tr:nth-child(even) {
|
|
background-color: #313b40;
|
|
}
|
|
|
|
.bom tr.checked {
|
|
color: #1cb53d;
|
|
}
|
|
|
|
.dark .bom tr.checked {
|
|
color: #2cce54;
|
|
}
|
|
|
|
.bom tr {
|
|
transition: background-color 0.2s;
|
|
}
|
|
|
|
.bom .numCol {
|
|
width: 30px;
|
|
}
|
|
|
|
.bom .value {
|
|
width: 15%;
|
|
}
|
|
|
|
.bom .quantity {
|
|
width: 65px;
|
|
}
|
|
|
|
.bom th .sortmark {
|
|
position: absolute;
|
|
right: 1px;
|
|
top: 1px;
|
|
margin-top: -5px;
|
|
border-width: 5px;
|
|
border-style: solid;
|
|
border-color: transparent transparent #221 transparent;
|
|
transform-origin: 50% 85%;
|
|
transition: opacity 0.2s, transform 0.4s;
|
|
}
|
|
|
|
.dark .bom th .sortmark {
|
|
filter: invert(1);
|
|
}
|
|
|
|
.bom th .sortmark.none {
|
|
opacity: 0;
|
|
}
|
|
|
|
.bom th .sortmark.desc {
|
|
transform: rotate(180deg);
|
|
}
|
|
|
|
.bom th:hover .sortmark.none {
|
|
opacity: 0.5;
|
|
}
|
|
|
|
.bom .bom-checkbox {
|
|
width: 30px;
|
|
position: relative;
|
|
user-select: none;
|
|
-moz-user-select: none;
|
|
}
|
|
|
|
.bom .bom-checkbox:before {
|
|
content: "";
|
|
position: absolute;
|
|
border-width: 15px;
|
|
border-style: solid;
|
|
border-color: #51829f transparent transparent transparent;
|
|
visibility: hidden;
|
|
top: -15px;
|
|
}
|
|
|
|
.bom .bom-checkbox:after {
|
|
content: "Double click to set/unset all";
|
|
position: absolute;
|
|
color: white;
|
|
top: -35px;
|
|
left: -26px;
|
|
background: #51829f;
|
|
padding: 5px 15px;
|
|
border-radius: 8px;
|
|
white-space: nowrap;
|
|
visibility: hidden;
|
|
}
|
|
|
|
.bom .bom-checkbox:hover:before,
|
|
.bom .bom-checkbox:hover:after {
|
|
visibility: visible;
|
|
transition: visibility 0.2s linear 1s;
|
|
}
|
|
|
|
.split {
|
|
-webkit-box-sizing: border-box;
|
|
-moz-box-sizing: border-box;
|
|
box-sizing: border-box;
|
|
overflow-y: auto;
|
|
overflow-x: hidden;
|
|
background-color: inherit;
|
|
}
|
|
|
|
.split.split-horizontal,
|
|
.gutter.gutter-horizontal {
|
|
height: 100%;
|
|
float: left;
|
|
}
|
|
|
|
.gutter {
|
|
background-color: #ddd;
|
|
background-repeat: no-repeat;
|
|
background-position: 50%;
|
|
transition: background-color 0.3s;
|
|
}
|
|
|
|
.dark .gutter {
|
|
background-color: #777;
|
|
}
|
|
|
|
.gutter.gutter-horizontal {
|
|
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==');
|
|
cursor: ew-resize;
|
|
width: 5px;
|
|
}
|
|
|
|
.gutter.gutter-vertical {
|
|
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAFAQMAAABo7865AAAABlBMVEVHcEzMzMzyAv2sAAAAAXRSTlMAQObYZgAAABBJREFUeF5jOAMEEAIEEFwAn3kMwcB6I2AAAAAASUVORK5CYII=');
|
|
cursor: ns-resize;
|
|
height: 5px;
|
|
}
|
|
|
|
.searchbox {
|
|
float: left;
|
|
height: 40px;
|
|
margin: 10px 5px;
|
|
padding: 12px 32px;
|
|
font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
|
|
font-size: 18px;
|
|
box-sizing: border-box;
|
|
border: 1px solid #888;
|
|
border-radius: 6px;
|
|
outline: none;
|
|
background-color: #eee;
|
|
transition: background-color 0.2s, border 0.2s;
|
|
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABNklEQVQ4T8XSMUvDQBQH8P/LElFa/AIZHcTBQSz0I/gFstTBRR2KUC4ldDxw7h0Bl3RRUATxi4iiODgoiLNrbQYp5J6cpJJqomkX33Z37/14d/dIa33MzDuYI4johOI4XhyNRteO46zNYjDzAxE1yBZprVeZ+QbAUhXEGJMA2Ox2u4+fQIa0mPmsCgCgJYQ4t7lfgF0opQYAdv9ABkKI/UnOFCClXKjX61cA1osQY8x9kiRNKeV7IWA3oyhaSdP0FkAtjxhj3hzH2RBCPOf3pzqYHCilfAAX+URm9oMguPzeWSGQvUcMYC8rOBJCHBRdqxTo9/vbRHRqi8bj8XKv1xvODbiuW2u32/bvf0SlDv4XYOY7z/Mavu+nM1+BmQ+NMc0wDF/LprP0DbTWW0T00ul0nn4b7Q87+X4Qmfiq2wAAAABJRU5ErkJggg==');
|
|
background-position: 10px 10px;
|
|
background-repeat: no-repeat;
|
|
}
|
|
|
|
.dark .searchbox {
|
|
background-color: #111;
|
|
color: #eee;
|
|
}
|
|
|
|
.searchbox::placeholder {
|
|
color: #ccc;
|
|
}
|
|
|
|
.dark .searchbox::placeholder {
|
|
color: #666;
|
|
}
|
|
|
|
.filter {
|
|
width: calc(60% - 64px);
|
|
}
|
|
|
|
.reflookup {
|
|
width: calc(40% - 10px);
|
|
}
|
|
|
|
input[type=text]:focus {
|
|
background-color: white;
|
|
border: 1px solid #333;
|
|
}
|
|
|
|
.dark input[type=text]:focus {
|
|
background-color: #333;
|
|
border: 1px solid #ccc;
|
|
}
|
|
|
|
mark.highlight {
|
|
background-color: #5050ff;
|
|
color: #fff;
|
|
padding: 2px;
|
|
border-radius: 6px;
|
|
}
|
|
|
|
.dark mark.highlight {
|
|
background-color: #76a6da;
|
|
color: #111;
|
|
}
|
|
|
|
.menubtn {
|
|
background-color: white;
|
|
border: none;
|
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36' viewBox='0 0 20 20'%3E%3Cpath fill='none' d='M0 0h20v20H0V0z'/%3E%3Cpath d='M15.95 10.78c.03-.25.05-.51.05-.78s-.02-.53-.06-.78l1.69-1.32c.15-.12.19-.34.1-.51l-1.6-2.77c-.1-.18-.31-.24-.49-.18l-1.99.8c-.42-.32-.86-.58-1.35-.78L12 2.34c-.03-.2-.2-.34-.4-.34H8.4c-.2 0-.36.14-.39.34l-.3 2.12c-.49.2-.94.47-1.35.78l-1.99-.8c-.18-.07-.39 0-.49.18l-1.6 2.77c-.1.18-.06.39.1.51l1.69 1.32c-.04.25-.07.52-.07.78s.02.53.06.78L2.37 12.1c-.15.12-.19.34-.1.51l1.6 2.77c.1.18.31.24.49.18l1.99-.8c.42.32.86.58 1.35.78l.3 2.12c.04.2.2.34.4.34h3.2c.2 0 .37-.14.39-.34l.3-2.12c.49-.2.94-.47 1.35-.78l1.99.8c.18.07.39 0 .49-.18l1.6-2.77c.1-.18.06-.39-.1-.51l-1.67-1.32zM10 13c-1.65 0-3-1.35-3-3s1.35-3 3-3 3 1.35 3 3-1.35 3-3 3z'/%3E%3C/svg%3E%0A");
|
|
background-position: center;
|
|
background-repeat: no-repeat;
|
|
}
|
|
|
|
.statsbtn {
|
|
background-color: white;
|
|
border: none;
|
|
background-image: url("data:image/svg+xml,%3Csvg width='36' height='36' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 6h28v24H4V6zm0 8h28v8H4m9-16v24h10V5.8' fill='none' stroke='%23000' stroke-width='2'/%3E%3C/svg%3E");
|
|
background-position: center;
|
|
background-repeat: no-repeat;
|
|
}
|
|
|
|
.iobtn {
|
|
background-color: white;
|
|
border: none;
|
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36'%3E%3Cpath fill='none' stroke='%23000' stroke-width='2' d='M3 33v-7l6.8-7h16.5l6.7 7v7H3zM3.2 26H33M21 9l5-5.9 5 6h-2.5V15h-5V9H21zm-4.9 0l-5 6-5-6h2.5V3h5v6h2.5z'/%3E%3Cpath fill='none' stroke='%23000' d='M6.1 29.5H10'/%3E%3C/svg%3E");
|
|
background-position: center;
|
|
background-repeat: no-repeat;
|
|
}
|
|
|
|
.visbtn {
|
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath fill='none' stroke='%23333' d='M2.5 4.5h5v15h-5zM9.5 4.5h5v15h-5zM16.5 4.5h5v15h-5z'/%3E%3C/svg%3E");
|
|
background-position: center;
|
|
background-repeat: no-repeat;
|
|
padding: 15px;
|
|
}
|
|
|
|
#vismenu-content {
|
|
left: 0px;
|
|
font-family: Verdana, sans-serif;
|
|
}
|
|
|
|
.dark .statsbtn,
|
|
.dark .savebtn,
|
|
.dark .menubtn,
|
|
.dark .iobtn,
|
|
.dark .visbtn {
|
|
filter: invert(1);
|
|
}
|
|
|
|
.flexbox {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
width: 100%;
|
|
}
|
|
|
|
.savebtn {
|
|
background-color: #d6d6d6;
|
|
width: auto;
|
|
height: 30px;
|
|
flex-grow: 1;
|
|
margin: 5px;
|
|
border-radius: 4px;
|
|
}
|
|
|
|
.savebtn:active {
|
|
background-color: #0a0;
|
|
color: white;
|
|
}
|
|
|
|
.dark .savebtn:active {
|
|
/* This will be inverted */
|
|
background-color: #b3b;
|
|
}
|
|
|
|
.stats {
|
|
border-collapse: collapse;
|
|
font-size: 12pt;
|
|
table-layout: fixed;
|
|
width: 100%;
|
|
min-width: 450px;
|
|
}
|
|
|
|
.dark .stats td {
|
|
border: 1px solid #bbb;
|
|
}
|
|
|
|
.stats td {
|
|
border: 1px solid black;
|
|
padding: 5px;
|
|
word-wrap: break-word;
|
|
text-align: center;
|
|
position: relative;
|
|
}
|
|
|
|
#checkbox-stats div {
|
|
position: absolute;
|
|
left: 0;
|
|
top: 0;
|
|
height: 100%;
|
|
width: 100%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
|
|
#checkbox-stats .bar {
|
|
background-color: rgba(28, 251, 0, 0.6);
|
|
}
|
|
|
|
.menu {
|
|
position: relative;
|
|
display: inline-block;
|
|
margin: 0.4rem 0.4rem 0.4rem 0;
|
|
}
|
|
|
|
.menu-content {
|
|
font-size: 12pt !important;
|
|
text-align: left !important;
|
|
font-weight: normal !important;
|
|
display: none;
|
|
position: absolute;
|
|
background-color: white;
|
|
right: 0;
|
|
min-width: 300px;
|
|
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
|
|
z-index: 100;
|
|
padding: 8px;
|
|
}
|
|
|
|
.dark .menu-content {
|
|
background-color: #111;
|
|
}
|
|
|
|
.menu:hover .menu-content {
|
|
display: block;
|
|
}
|
|
|
|
.menu:hover .menubtn,
|
|
.menu:hover .iobtn,
|
|
.menu:hover .statsbtn {
|
|
background-color: #eee;
|
|
}
|
|
|
|
.menu-label {
|
|
display: inline-block;
|
|
padding: 8px;
|
|
border: 1px solid #ccc;
|
|
border-top: 0;
|
|
width: calc(100% - 18px);
|
|
}
|
|
|
|
.menu-label-top {
|
|
border-top: 1px solid #ccc;
|
|
}
|
|
|
|
.menu-textbox {
|
|
float: left;
|
|
height: 24px;
|
|
margin: 10px 5px;
|
|
padding: 5px 5px;
|
|
font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
|
|
font-size: 14px;
|
|
box-sizing: border-box;
|
|
border: 1px solid #888;
|
|
border-radius: 4px;
|
|
outline: none;
|
|
background-color: #eee;
|
|
transition: background-color 0.2s, border 0.2s;
|
|
width: calc(100% - 10px);
|
|
}
|
|
|
|
.menu-textbox.invalid,
|
|
.dark .menu-textbox.invalid {
|
|
color: red;
|
|
}
|
|
|
|
.dark .menu-textbox {
|
|
background-color: #222;
|
|
color: #eee;
|
|
}
|
|
|
|
.radio-container {
|
|
margin: 4px;
|
|
}
|
|
|
|
.topmostdiv {
|
|
display: flex;
|
|
flex-direction: column;
|
|
width: 100%;
|
|
background-color: white;
|
|
transition: background-color 0.3s;
|
|
}
|
|
|
|
#top {
|
|
display: flex;
|
|
flex-wrap: wrap;
|
|
justify-content: flex-end;
|
|
align-items: center;
|
|
}
|
|
|
|
#topdivider {
|
|
border-bottom: 2px solid black;
|
|
display: flex;
|
|
justify-content: center;
|
|
align-items: center;
|
|
}
|
|
|
|
.dark #topdivider {
|
|
border-bottom: 2px solid #ccc;
|
|
}
|
|
|
|
#topdivider>div {
|
|
position: relative;
|
|
}
|
|
|
|
#toptoggle {
|
|
cursor: pointer;
|
|
user-select: none;
|
|
position: absolute;
|
|
padding: 0.1rem 0.3rem;
|
|
top: -0.4rem;
|
|
left: -1rem;
|
|
font-size: 1.4rem;
|
|
line-height: 60%;
|
|
border: 1px solid black;
|
|
border-radius: 1rem;
|
|
background-color: #fff;
|
|
z-index: 100;
|
|
}
|
|
|
|
.flipped {
|
|
transform: rotate(0.5turn);
|
|
}
|
|
|
|
.dark #toptoggle {
|
|
border: 1px solid #fff;
|
|
background-color: #222;
|
|
}
|
|
|
|
#fileinfodiv {
|
|
flex: 20rem 1 0;
|
|
overflow: auto;
|
|
}
|
|
|
|
#bomcontrols {
|
|
display: flex;
|
|
flex-direction: row-reverse;
|
|
}
|
|
|
|
#bomcontrols>* {
|
|
flex-shrink: 0;
|
|
}
|
|
|
|
#dbg {
|
|
display: block;
|
|
}
|
|
|
|
::-webkit-scrollbar {
|
|
width: 8px;
|
|
}
|
|
|
|
::-webkit-scrollbar-track {
|
|
background: #aaa;
|
|
}
|
|
|
|
::-webkit-scrollbar-thumb {
|
|
background: #666;
|
|
border-radius: 3px;
|
|
}
|
|
|
|
::-webkit-scrollbar-thumb:hover {
|
|
background: #555;
|
|
}
|
|
|
|
.slider {
|
|
-webkit-appearance: none;
|
|
width: 100%;
|
|
margin: 3px 0;
|
|
padding: 0;
|
|
outline: none;
|
|
opacity: 0.7;
|
|
-webkit-transition: .2s;
|
|
transition: opacity .2s;
|
|
border-radius: 3px;
|
|
}
|
|
|
|
.slider:hover {
|
|
opacity: 1;
|
|
}
|
|
|
|
.slider:focus {
|
|
outline: none;
|
|
}
|
|
|
|
.slider::-webkit-slider-runnable-track {
|
|
-webkit-appearance: none;
|
|
width: 100%;
|
|
height: 8px;
|
|
background: #d3d3d3;
|
|
border-radius: 3px;
|
|
border: none;
|
|
}
|
|
|
|
.slider::-webkit-slider-thumb {
|
|
-webkit-appearance: none;
|
|
width: 15px;
|
|
height: 15px;
|
|
border-radius: 50%;
|
|
background: #0a0;
|
|
cursor: pointer;
|
|
margin-top: -4px;
|
|
}
|
|
|
|
.dark .slider::-webkit-slider-thumb {
|
|
background: #3d3;
|
|
}
|
|
|
|
.slider::-moz-range-thumb {
|
|
width: 15px;
|
|
height: 15px;
|
|
border-radius: 50%;
|
|
background: #0a0;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.slider::-moz-range-track {
|
|
height: 8px;
|
|
background: #d3d3d3;
|
|
border-radius: 3px;
|
|
}
|
|
|
|
.dark .slider::-moz-range-thumb {
|
|
background: #3d3;
|
|
}
|
|
|
|
.slider::-ms-track {
|
|
width: 100%;
|
|
height: 8px;
|
|
border-width: 3px 0;
|
|
background: transparent;
|
|
border-color: transparent;
|
|
color: transparent;
|
|
transition: opacity .2s;
|
|
}
|
|
|
|
.slider::-ms-fill-lower {
|
|
background: #d3d3d3;
|
|
border: none;
|
|
border-radius: 3px;
|
|
}
|
|
|
|
.slider::-ms-fill-upper {
|
|
background: #d3d3d3;
|
|
border: none;
|
|
border-radius: 3px;
|
|
}
|
|
|
|
.slider::-ms-thumb {
|
|
width: 15px;
|
|
height: 15px;
|
|
border-radius: 50%;
|
|
background: #0a0;
|
|
cursor: pointer;
|
|
margin: 0;
|
|
}
|
|
|
|
.shameless-plug {
|
|
font-size: 0.8em;
|
|
text-align: center;
|
|
display: block;
|
|
}
|
|
|
|
a {
|
|
color: #0278a4;
|
|
}
|
|
|
|
.dark a {
|
|
color: #00b9fd;
|
|
}
|
|
|
|
#frontcanvas,
|
|
#backcanvas {
|
|
touch-action: none;
|
|
}
|
|
|
|
.placeholder {
|
|
border: 1px dashed #9f9fda !important;
|
|
background-color: #edf2f7 !important;
|
|
}
|
|
|
|
.dragging {
|
|
z-index: 999;
|
|
}
|
|
|
|
.dark .dragging>table>tbody>tr {
|
|
background-color: #252c30;
|
|
}
|
|
|
|
.dark .placeholder {
|
|
filter: invert(1);
|
|
}
|
|
|
|
.column-spacer {
|
|
top: 0;
|
|
left: 0;
|
|
width: calc(100% - 4px);
|
|
position: absolute;
|
|
cursor: pointer;
|
|
user-select: none;
|
|
height: 100%;
|
|
}
|
|
|
|
.column-width-handle {
|
|
top: 0;
|
|
right: 0;
|
|
width: 4px;
|
|
position: absolute;
|
|
cursor: col-resize;
|
|
user-select: none;
|
|
height: 100%;
|
|
}
|
|
|
|
.column-width-handle:hover {
|
|
background-color: #4f99bd;
|
|
}
|
|
|
|
.help-link {
|
|
border: 1px solid #0278a4;
|
|
padding-inline: 0.3rem;
|
|
border-radius: 3px;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.dark .help-link {
|
|
border: 1px solid #00b9fd;
|
|
}
|
|
|
|
.bom-color {
|
|
width: 20%;
|
|
}
|
|
|
|
.color-column input {
|
|
width: 1.6rem;
|
|
height: 1rem;
|
|
border: 1px solid black;
|
|
cursor: pointer;
|
|
padding: 0;
|
|
}
|
|
|
|
/* removes default styling from input color element */
|
|
::-webkit-color-swatch {
|
|
border: none;
|
|
}
|
|
|
|
::-webkit-color-swatch-wrapper {
|
|
padding: 0;
|
|
}
|
|
|
|
::-moz-color-swatch,
|
|
::-moz-focus-inner {
|
|
border: none;
|
|
}
|
|
|
|
::-moz-focus-inner {
|
|
padding: 0;
|
|
}
|
|
/* #bomhead {
|
|
position: sticky;
|
|
top: 0px;
|
|
z-index: 1;
|
|
} */
|
|
</style>
|
|
<script type="text/javascript" >
|
|
///////////////////////////////////////////////
|
|
/*
|
|
Split.js - v1.3.5
|
|
MIT License
|
|
https://github.com/nathancahill/Split.js
|
|
*/
|
|
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Split=t()}(this,function(){"use strict";var e=window,t=e.document,n="addEventListener",i="removeEventListener",r="getBoundingClientRect",s=function(){return!1},o=e.attachEvent&&!e[n],a=["","-webkit-","-moz-","-o-"].filter(function(e){var n=t.createElement("div");return n.style.cssText="width:"+e+"calc(9px)",!!n.style.length}).shift()+"calc",l=function(e){return"string"==typeof e||e instanceof String?t.querySelector(e):e};return function(u,c){function z(e,t,n){var i=A(y,t,n);Object.keys(i).forEach(function(t){return e.style[t]=i[t]})}function h(e,t){var n=B(y,t);Object.keys(n).forEach(function(t){return e.style[t]=n[t]})}function f(e){var t=E[this.a],n=E[this.b],i=t.size+n.size;t.size=e/this.size*i,n.size=i-e/this.size*i,z(t.element,t.size,this.aGutterSize),z(n.element,n.size,this.bGutterSize)}function m(e){var t;this.dragging&&((t="touches"in e?e.touches[0][b]-this.start:e[b]-this.start)<=E[this.a].minSize+M+this.aGutterSize?t=E[this.a].minSize+this.aGutterSize:t>=this.size-(E[this.b].minSize+M+this.bGutterSize)&&(t=this.size-(E[this.b].minSize+this.bGutterSize)),f.call(this,t),c.onDrag&&c.onDrag())}function g(){var e=E[this.a].element,t=E[this.b].element;this.size=e[r]()[y]+t[r]()[y]+this.aGutterSize+this.bGutterSize,this.start=e[r]()[G]}function d(){var t=this,n=E[t.a].element,r=E[t.b].element;t.dragging&&c.onDragEnd&&c.onDragEnd(),t.dragging=!1,e[i]("mouseup",t.stop),e[i]("touchend",t.stop),e[i]("touchcancel",t.stop),t.parent[i]("mousemove",t.move),t.parent[i]("touchmove",t.move),delete t.stop,delete t.move,n[i]("selectstart",s),n[i]("dragstart",s),r[i]("selectstart",s),r[i]("dragstart",s),n.style.userSelect="",n.style.webkitUserSelect="",n.style.MozUserSelect="",n.style.pointerEvents="",r.style.userSelect="",r.style.webkitUserSelect="",r.style.MozUserSelect="",r.style.pointerEvents="",t.gutter.style.cursor="",t.parent.style.cursor=""}function S(t){var i=this,r=E[i.a].element,o=E[i.b].element;!i.dragging&&c.onDragStart&&c.onDragStart(),t.preventDefault(),i.dragging=!0,i.move=m.bind(i),i.stop=d.bind(i),e[n]("mouseup",i.stop),e[n]("touchend",i.stop),e[n]("touchcancel",i.stop),i.parent[n]("mousemove",i.move),i.parent[n]("touchmove",i.move),r[n]("selectstart",s),r[n]("dragstart",s),o[n]("selectstart",s),o[n]("dragstart",s),r.style.userSelect="none",r.style.webkitUserSelect="none",r.style.MozUserSelect="none",r.style.pointerEvents="none",o.style.userSelect="none",o.style.webkitUserSelect="none",o.style.MozUserSelect="none",o.style.pointerEvents="none",i.gutter.style.cursor=j,i.parent.style.cursor=j,g.call(i)}function v(e){e.forEach(function(t,n){if(n>0){var i=F[n-1],r=E[i.a],s=E[i.b];r.size=e[n-1],s.size=t,z(r.element,r.size,i.aGutterSize),z(s.element,s.size,i.bGutterSize)}})}function p(){F.forEach(function(e){e.parent.removeChild(e.gutter),E[e.a].element.style[y]="",E[e.b].element.style[y]=""})}void 0===c&&(c={});var y,b,G,E,w=l(u[0]).parentNode,D=e.getComputedStyle(w).flexDirection,U=c.sizes||u.map(function(){return 100/u.length}),k=void 0!==c.minSize?c.minSize:100,x=Array.isArray(k)?k:u.map(function(){return k}),L=void 0!==c.gutterSize?c.gutterSize:10,M=void 0!==c.snapOffset?c.snapOffset:30,O=c.direction||"horizontal",j=c.cursor||("horizontal"===O?"ew-resize":"ns-resize"),C=c.gutter||function(e,n){var i=t.createElement("div");return i.className="gutter gutter-"+n,i},A=c.elementStyle||function(e,t,n){var i={};return"string"==typeof t||t instanceof String?i[e]=t:i[e]=o?t+"%":a+"("+t+"% - "+n+"px)",i},B=c.gutterStyle||function(e,t){return n={},n[e]=t+"px",n;var n};"horizontal"===O?(y="width","clientWidth",b="clientX",G="left","paddingLeft"):"vertical"===O&&(y="height","clientHeight",b="clientY",G="top","paddingTop");var F=[];return E=u.map(function(e,t){var i,s={element:l(e),size:U[t],minSize:x[t]};if(t>0&&(i={a:t-1,b:t,dragging:!1,isFirst:1===t,isLast:t===u.length-1,direction:O,parent:w},i.aGutterSize=L,i.bGutterSize=L,i.isFirst&&(i.aGutterSize=L/2),i.isLast&&(i.bGutterSize=L/2),"row-reverse"===D||"column-reverse"===D)){var a=i.a;i.a=i.b,i.b=a}if(!o&&t>0){var c=C(t,O);h(c,L),c[n]("mousedown",S.bind(i)),c[n]("touchstart",S.bind(i)),w.insertBefore(c,s.element),i.gutter=c}0===t||t===u.length-1?z(s.element,s.size,L/2):z(s.element,s.size,L);var f=s.element[r]()[y];return f<s.minSize&&(s.minSize=f),t>0&&F.push(i),s}),o?{setSizes:v,destroy:p}:{setSizes:v,getSizes:function(){return E.map(function(e){return e.size})},collapse:function(e){if(e===F.length){var t=F[e-1];g.call(t),o||f.call(t,t.size-t.bGutterSize)}else{var n=F[e];g.call(n),o||f.call(n,n.aGutterSize)}},destroy:p}}});
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>
|
|
// This work is free. You can redistribute it and/or modify it
|
|
// under the terms of the WTFPL, Version 2
|
|
// For more information see LICENSE.txt or http://www.wtfpl.net/
|
|
//
|
|
// For more information, the home page:
|
|
// http://pieroxy.net/blog/pages/lz-string/testing.html
|
|
//
|
|
// LZ-based compression algorithm, version 1.4.4
|
|
var LZString=function(){var o=String.fromCharCode,i={};var n={decompressFromBase64:function(o){return null==o?"":""==o?null:n._decompress(o.length,32,function(n){return function(o,n){if(!i[o]){i[o]={};for(var t=0;t<o.length;t++)i[o][o.charAt(t)]=t}return i[o][n]}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o.charAt(n))})},_decompress:function(i,n,t){var r,e,a,s,p,u,l,f=[],c=4,d=4,h=3,v="",g=[],m={val:t(0),position:n,index:1};for(r=0;r<3;r+=1)f[r]=r;for(a=0,p=Math.pow(2,2),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 2:return""}for(f[3]=l,e=l,g.push(l);;){if(m.index>i)return"";for(a=0,p=Math.pow(2,h),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(l=a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 2:return g.join("")}if(0==c&&(c=Math.pow(2,h),h++),f[l])v=f[l];else{if(l!==d)return null;v=e+e.charAt(0)}g.push(v),f[d++]=e+v.charAt(0),e=v,0==--c&&(c=Math.pow(2,h),h++)}}};return n}();"function"==typeof define&&define.amd?define(function(){return LZString}):"undefined"!=typeof module&&null!=module?module.exports=LZString:"undefined"!=typeof angular&&null!=angular&&angular.module("LZString",[]).factory("LZString",function(){return LZString});
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
/*!
|
|
* PEP v0.4.3 | https://github.com/jquery/PEP
|
|
* Copyright jQuery Foundation and other contributors | http://jquery.org/license
|
|
*/
|
|
!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.PointerEventsPolyfill=b()}(this,function(){"use strict";function a(a,b){b=b||Object.create(null);var c=document.createEvent("Event");c.initEvent(a,b.bubbles||!1,b.cancelable||!1);
|
|
for(var d,e=2;e<m.length;e++)d=m[e],c[d]=b[d]||n[e];c.buttons=b.buttons||0;
|
|
var f=0;return f=b.pressure&&c.buttons?b.pressure:c.buttons?.5:0,c.x=c.clientX,c.y=c.clientY,c.pointerId=b.pointerId||0,c.width=b.width||0,c.height=b.height||0,c.pressure=f,c.tiltX=b.tiltX||0,c.tiltY=b.tiltY||0,c.twist=b.twist||0,c.tangentialPressure=b.tangentialPressure||0,c.pointerType=b.pointerType||"",c.hwTimestamp=b.hwTimestamp||0,c.isPrimary=b.isPrimary||!1,c}function b(){this.array=[],this.size=0}function c(a,b,c,d){this.addCallback=a.bind(d),this.removeCallback=b.bind(d),this.changedCallback=c.bind(d),A&&(this.observer=new A(this.mutationWatcher.bind(this)))}function d(a){return"body /shadow-deep/ "+e(a)}function e(a){return'[touch-action="'+a+'"]'}function f(a){return"{ -ms-touch-action: "+a+"; touch-action: "+a+"; }"}function g(){if(F){D.forEach(function(a){String(a)===a?(E+=e(a)+f(a)+"\n",G&&(E+=d(a)+f(a)+"\n")):(E+=a.selectors.map(e)+f(a.rule)+"\n",G&&(E+=a.selectors.map(d)+f(a.rule)+"\n"))});var a=document.createElement("style");a.textContent=E,document.head.appendChild(a)}}function h(){if(!window.PointerEvent){if(window.PointerEvent=a,window.navigator.msPointerEnabled){var b=window.navigator.msMaxTouchPoints;Object.defineProperty(window.navigator,"maxTouchPoints",{value:b,enumerable:!0}),u.registerSource("ms",_)}else Object.defineProperty(window.navigator,"maxTouchPoints",{value:0,enumerable:!0}),u.registerSource("mouse",N),void 0!==window.ontouchstart&&u.registerSource("touch",V);u.register(document)}}function i(a){if(!u.pointermap.has(a)){var b=new Error("InvalidPointerId");throw b.name="InvalidPointerId",b}}function j(a){for(var b=a.parentNode;b&&b!==a.ownerDocument;)b=b.parentNode;if(!b){var c=new Error("InvalidStateError");throw c.name="InvalidStateError",c}}function k(a){var b=u.pointermap.get(a);return 0!==b.buttons}function l(){window.Element&&!Element.prototype.setPointerCapture&&Object.defineProperties(Element.prototype,{setPointerCapture:{value:W},releasePointerCapture:{value:X},hasPointerCapture:{value:Y}})}
|
|
var m=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","pageX","pageY"],n=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0],o=window.Map&&window.Map.prototype.forEach,p=o?Map:b;b.prototype={set:function(a,b){return void 0===b?this["delete"](a):(this.has(a)||this.size++,void(this.array[a]=b))},has:function(a){return void 0!==this.array[a]},"delete":function(a){this.has(a)&&(delete this.array[a],this.size--)},get:function(a){return this.array[a]},clear:function(){this.array.length=0,this.size=0},forEach:function(a,b){return this.array.forEach(function(c,d){a.call(b,c,d,this)},this)}};var q=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","buttons","pointerId","width","height","pressure","tiltX","tiltY","pointerType","hwTimestamp","isPrimary","type","target","currentTarget","which","pageX","pageY","timeStamp"],r=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0,0,0,0,0,0,"",0,!1,"",null,null,0,0,0,0],s={pointerover:1,pointerout:1,pointerenter:1,pointerleave:1},t="undefined"!=typeof SVGElementInstance,u={pointermap:new p,eventMap:Object.create(null),captureInfo:Object.create(null),eventSources:Object.create(null),eventSourceList:[],registerSource:function(a,b){var c=b,d=c.events;d&&(d.forEach(function(a){c[a]&&(this.eventMap[a]=c[a].bind(c))},this),this.eventSources[a]=c,this.eventSourceList.push(c))},register:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
|
|
b.register.call(b,a)},unregister:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
|
|
b.unregister.call(b,a)},contains:function(a,b){try{return a.contains(b)}catch(c){return!1}},down:function(a){a.bubbles=!0,this.fireEvent("pointerdown",a)},move:function(a){a.bubbles=!0,this.fireEvent("pointermove",a)},up:function(a){a.bubbles=!0,this.fireEvent("pointerup",a)},enter:function(a){a.bubbles=!1,this.fireEvent("pointerenter",a)},leave:function(a){a.bubbles=!1,this.fireEvent("pointerleave",a)},over:function(a){a.bubbles=!0,this.fireEvent("pointerover",a)},out:function(a){a.bubbles=!0,this.fireEvent("pointerout",a)},cancel:function(a){a.bubbles=!0,this.fireEvent("pointercancel",a)},leaveOut:function(a){this.out(a),this.propagate(a,this.leave,!1)},enterOver:function(a){this.over(a),this.propagate(a,this.enter,!0)},eventHandler:function(a){if(!a._handledByPE){var b=a.type,c=this.eventMap&&this.eventMap[b];c&&c(a),a._handledByPE=!0}},listen:function(a,b){b.forEach(function(b){this.addEvent(a,b)},this)},unlisten:function(a,b){b.forEach(function(b){this.removeEvent(a,b)},this)},addEvent:function(a,b){a.addEventListener(b,this.boundHandler)},removeEvent:function(a,b){a.removeEventListener(b,this.boundHandler)},makeEvent:function(b,c){this.captureInfo[c.pointerId]&&(c.relatedTarget=null);var d=new a(b,c);return c.preventDefault&&(d.preventDefault=c.preventDefault),d._target=d._target||c.target,d},fireEvent:function(a,b){var c=this.makeEvent(a,b);return this.dispatchEvent(c)},cloneEvent:function(a){for(var b,c=Object.create(null),d=0;d<q.length;d++)b=q[d],c[b]=a[b]||r[d],!t||"target"!==b&&"relatedTarget"!==b||c[b]instanceof SVGElementInstance&&(c[b]=c[b].correspondingUseElement);return a.preventDefault&&(c.preventDefault=function(){a.preventDefault()}),c},getTarget:function(a){var b=this.captureInfo[a.pointerId];return b?a._target!==b&&a.type in s?void 0:b:a._target},propagate:function(a,b,c){for(var d=a.target,e=[];d!==document&&!d.contains(a.relatedTarget);) if(e.push(d),d=d.parentNode,!d)return;c&&e.reverse(),e.forEach(function(c){a.target=c,b.call(this,a)},this)},setCapture:function(b,c,d){this.captureInfo[b]&&this.releaseCapture(b,d),this.captureInfo[b]=c,this.implicitRelease=this.releaseCapture.bind(this,b,d),document.addEventListener("pointerup",this.implicitRelease),document.addEventListener("pointercancel",this.implicitRelease);var e=new a("gotpointercapture");e.pointerId=b,e._target=c,d||this.asyncDispatchEvent(e)},releaseCapture:function(b,c){var d=this.captureInfo[b];if(d){this.captureInfo[b]=void 0,document.removeEventListener("pointerup",this.implicitRelease),document.removeEventListener("pointercancel",this.implicitRelease);var e=new a("lostpointercapture");e.pointerId=b,e._target=d,c||this.asyncDispatchEvent(e)}},dispatchEvent:/*scope.external.dispatchEvent || */function(a){var b=this.getTarget(a);if(b)return b.dispatchEvent(a)},asyncDispatchEvent:function(a){requestAnimationFrame(this.dispatchEvent.bind(this,a))}};u.boundHandler=u.eventHandler.bind(u);var v={shadow:function(a){if(a)return a.shadowRoot||a.webkitShadowRoot},canTarget:function(a){return a&&Boolean(a.elementFromPoint)},targetingShadow:function(a){var b=this.shadow(a);if(this.canTarget(b))return b},olderShadow:function(a){var b=a.olderShadowRoot;if(!b){var c=a.querySelector("shadow");c&&(b=c.olderShadowRoot)}return b},allShadows:function(a){for(var b=[],c=this.shadow(a);c;)b.push(c),c=this.olderShadow(c);return b},searchRoot:function(a,b,c){if(a){var d,e,f=a.elementFromPoint(b,c);for(e=this.targetingShadow(f);e;){if(d=e.elementFromPoint(b,c)){var g=this.targetingShadow(d);return this.searchRoot(g,b,c)||d} e=this.olderShadow(e)} return f}},owner:function(a){
|
|
for(var b=a;b.parentNode;)b=b.parentNode;
|
|
return b.nodeType!==Node.DOCUMENT_NODE&&b.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&(b=document),b},findTarget:function(a){var b=a.clientX,c=a.clientY,d=this.owner(a.target);
|
|
return d.elementFromPoint(b,c)||(d=document),this.searchRoot(d,b,c)}},w=Array.prototype.forEach.call.bind(Array.prototype.forEach),x=Array.prototype.map.call.bind(Array.prototype.map),y=Array.prototype.slice.call.bind(Array.prototype.slice),z=Array.prototype.filter.call.bind(Array.prototype.filter),A=window.MutationObserver||window.WebKitMutationObserver,B="[touch-action]",C={subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["touch-action"]};c.prototype={watchSubtree:function(a){
|
|
//
|
|
this.observer&&v.canTarget(a)&&this.observer.observe(a,C)},enableOnSubtree:function(a){this.watchSubtree(a),a===document&&"complete"!==document.readyState?this.installOnLoad():this.installNewSubtree(a)},installNewSubtree:function(a){w(this.findElements(a),this.addElement,this)},findElements:function(a){return a.querySelectorAll?a.querySelectorAll(B):[]},removeElement:function(a){this.removeCallback(a)},addElement:function(a){this.addCallback(a)},elementChanged:function(a,b){this.changedCallback(a,b)},concatLists:function(a,b){return a.concat(y(b))},
|
|
installOnLoad:function(){document.addEventListener("readystatechange",function(){"complete"===document.readyState&&this.installNewSubtree(document)}.bind(this))},isElement:function(a){return a.nodeType===Node.ELEMENT_NODE},flattenMutationTree:function(a){
|
|
var b=x(a,this.findElements,this);
|
|
return b.push(z(a,this.isElement)),b.reduce(this.concatLists,[])},mutationWatcher:function(a){a.forEach(this.mutationHandler,this)},mutationHandler:function(a){if("childList"===a.type){var b=this.flattenMutationTree(a.addedNodes);b.forEach(this.addElement,this);var c=this.flattenMutationTree(a.removedNodes);c.forEach(this.removeElement,this)}else"attributes"===a.type&&this.elementChanged(a.target,a.oldValue)}};var D=["none","auto","pan-x","pan-y",{rule:"pan-x pan-y",selectors:["pan-x pan-y","pan-y pan-x"]}],E="",F=window.PointerEvent||window.MSPointerEvent,G=!window.ShadowDOMPolyfill&&document.head.createShadowRoot,H=u.pointermap,I=25,J=[1,4,2,8,16],K=!1;try{K=1===new MouseEvent("test",{buttons:1}).buttons}catch(L){}
|
|
var M,N={POINTER_ID:1,POINTER_TYPE:"mouse",events:["mousedown","mousemove","mouseup","mouseover","mouseout"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},lastTouches:[],
|
|
isEventSimulatedFromTouch:function(a){for(var b,c=this.lastTouches,d=a.clientX,e=a.clientY,f=0,g=c.length;f<g&&(b=c[f]);f++){
|
|
var h=Math.abs(d-b.x),i=Math.abs(e-b.y);if(h<=I&&i<=I)return!0}},prepareEvent:function(a){var b=u.cloneEvent(a),c=b.preventDefault;return b.preventDefault=function(){a.preventDefault(),c()},b.pointerId=this.POINTER_ID,b.isPrimary=!0,b.pointerType=this.POINTER_TYPE,b},prepareButtonsForMove:function(a,b){var c=H.get(this.POINTER_ID);
|
|
0!==b.which&&c?a.buttons=c.buttons:a.buttons=0,b.buttons=a.buttons},mousedown:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);K||(c.buttons=J[c.button],b&&(c.buttons|=b.buttons),a.buttons=c.buttons),H.set(this.POINTER_ID,a),b&&0!==b.buttons?u.move(c):u.down(c)}},mousemove:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.move(b)}},mouseup:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);if(!K){var d=J[c.button];
|
|
c.buttons=b?b.buttons&~d:0,a.buttons=c.buttons}H.set(this.POINTER_ID,a),
|
|
c.buttons&=~J[c.button],0===c.buttons?u.up(c):u.move(c)}},mouseover:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.enterOver(b)}},mouseout:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,u.leaveOut(b)}},cancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.deactivateMouse()},deactivateMouse:function(){H["delete"](this.POINTER_ID)}},O=u.captureInfo,P=v.findTarget.bind(v),Q=v.allShadows.bind(v),R=u.pointermap,S=2500,T=200,U="touch-action",V={events:["touchstart","touchmove","touchend","touchcancel"],register:function(a){M.enableOnSubtree(a)},unregister:function(){},elementAdded:function(a){var b=a.getAttribute(U),c=this.touchActionToScrollType(b);c&&(a._scrollType=c,u.listen(a,this.events),
|
|
Q(a).forEach(function(a){a._scrollType=c,u.listen(a,this.events)},this))},elementRemoved:function(a){a._scrollType=void 0,u.unlisten(a,this.events),
|
|
Q(a).forEach(function(a){a._scrollType=void 0,u.unlisten(a,this.events)},this)},elementChanged:function(a,b){var c=a.getAttribute(U),d=this.touchActionToScrollType(c),e=this.touchActionToScrollType(b);
|
|
d&&e?(a._scrollType=d,Q(a).forEach(function(a){a._scrollType=d},this)):e?this.elementRemoved(a):d&&this.elementAdded(a)},scrollTypes:{EMITTER:"none",XSCROLLER:"pan-x",YSCROLLER:"pan-y",SCROLLER:/^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/},touchActionToScrollType:function(a){var b=a,c=this.scrollTypes;return"none"===b?"none":b===c.XSCROLLER?"X":b===c.YSCROLLER?"Y":c.SCROLLER.exec(b)?"XY":void 0},POINTER_TYPE:"touch",firstTouch:null,isPrimaryTouch:function(a){return this.firstTouch===a.identifier},setPrimaryTouch:function(a){
|
|
(0===R.size||1===R.size&&R.has(1))&&(this.firstTouch=a.identifier,this.firstXY={X:a.clientX,Y:a.clientY},this.scrolling=!1,this.cancelResetClickCount())},removePrimaryPointer:function(a){a.isPrimary&&(this.firstTouch=null,this.firstXY=null,this.resetClickCount())},clickCount:0,resetId:null,resetClickCount:function(){var a=function(){this.clickCount=0,this.resetId=null}.bind(this);this.resetId=setTimeout(a,T)},cancelResetClickCount:function(){this.resetId&&clearTimeout(this.resetId)},typeToButtons:function(a){var b=0;return"touchstart"!==a&&"touchmove"!==a||(b=1),b},touchToPointer:function(a){var b=this.currentTouchEvent,c=u.cloneEvent(a),d=c.pointerId=a.identifier+2;c.target=O[d]||P(c),c.bubbles=!0,c.cancelable=!0,c.detail=this.clickCount,c.button=0,c.buttons=this.typeToButtons(b.type),c.width=2*(a.radiusX||a.webkitRadiusX||0),c.height=2*(a.radiusY||a.webkitRadiusY||0),c.pressure=a.force||a.webkitForce||.5,c.isPrimary=this.isPrimaryTouch(a),c.pointerType=this.POINTER_TYPE,
|
|
c.altKey=b.altKey,c.ctrlKey=b.ctrlKey,c.metaKey=b.metaKey,c.shiftKey=b.shiftKey;
|
|
var e=this;return c.preventDefault=function(){e.scrolling=!1,e.firstXY=null,b.preventDefault()},c},processTouches:function(a,b){var c=a.changedTouches;this.currentTouchEvent=a;for(var d,e=0;e<c.length;e++)d=c[e],b.call(this,this.touchToPointer(d))},
|
|
shouldScroll:function(a){if(this.firstXY){var b,c=a.currentTarget._scrollType;if("none"===c)
|
|
b=!1;else if("XY"===c)
|
|
b=!0;else{var d=a.changedTouches[0],e=c,f="Y"===c?"X":"Y",g=Math.abs(d["client"+e]-this.firstXY[e]),h=Math.abs(d["client"+f]-this.firstXY[f]);
|
|
b=g>=h}return this.firstXY=null,b}},findTouch:function(a,b){for(var c,d=0,e=a.length;d<e&&(c=a[d]);d++)if(c.identifier===b)return!0},
|
|
vacuumTouches:function(a){var b=a.touches;
|
|
if(R.size>=b.length){var c=[];R.forEach(function(a,d){
|
|
if(1!==d&&!this.findTouch(b,d-2)){var e=a.out;c.push(e)}},this),c.forEach(this.cancelOut,this)}},touchstart:function(a){this.vacuumTouches(a),this.setPrimaryTouch(a.changedTouches[0]),this.dedupSynthMouse(a),this.scrolling||(this.clickCount++,this.processTouches(a,this.overDown))},overDown:function(a){R.set(a.pointerId,{target:a.target,out:a,outTarget:a.target}),u.enterOver(a),u.down(a)},touchmove:function(a){this.scrolling||(this.shouldScroll(a)?(this.scrolling=!0,this.touchcancel(a)):(a.preventDefault(),this.processTouches(a,this.moveOverOut)))},moveOverOut:function(a){var b=a,c=R.get(b.pointerId);
|
|
if(c){var d=c.out,e=c.outTarget;u.move(b),d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,
|
|
d.target=e,b.target?(u.leaveOut(d),u.enterOver(b)):(
|
|
b.target=e,b.relatedTarget=null,this.cancelOut(b))),c.out=b,c.outTarget=b.target}},touchend:function(a){this.dedupSynthMouse(a),this.processTouches(a,this.upOut)},upOut:function(a){this.scrolling||(u.up(a),u.leaveOut(a)),this.cleanUpPointer(a)},touchcancel:function(a){this.processTouches(a,this.cancelOut)},cancelOut:function(a){u.cancel(a),u.leaveOut(a),this.cleanUpPointer(a)},cleanUpPointer:function(a){R["delete"](a.pointerId),this.removePrimaryPointer(a)},
|
|
dedupSynthMouse:function(a){var b=N.lastTouches,c=a.changedTouches[0];
|
|
if(this.isPrimaryTouch(c)){
|
|
var d={x:c.clientX,y:c.clientY};b.push(d);var e=function(a,b){var c=a.indexOf(b);c>-1&&a.splice(c,1)}.bind(null,b,d);setTimeout(e,S)}}};M=new c(V.elementAdded,V.elementRemoved,V.elementChanged,V);var W,X,Y,Z=u.pointermap,$=window.MSPointerEvent&&"number"==typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE,_={events:["MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSGotPointerCapture","MSLostPointerCapture"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},POINTER_TYPES:["","unavailable","touch","pen","mouse"],prepareEvent:function(a){var b=a;return $&&(b=u.cloneEvent(a),b.pointerType=this.POINTER_TYPES[a.pointerType]),b},cleanup:function(a){Z["delete"](a)},MSPointerDown:function(a){Z.set(a.pointerId,a);var b=this.prepareEvent(a);u.down(b)},MSPointerMove:function(a){var b=this.prepareEvent(a);u.move(b)},MSPointerUp:function(a){var b=this.prepareEvent(a);u.up(b),this.cleanup(a.pointerId)},MSPointerOut:function(a){var b=this.prepareEvent(a);u.leaveOut(b)},MSPointerOver:function(a){var b=this.prepareEvent(a);u.enterOver(b)},MSPointerCancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.cleanup(a.pointerId)},MSLostPointerCapture:function(a){var b=u.makeEvent("lostpointercapture",a);u.dispatchEvent(b)},MSGotPointerCapture:function(a){var b=u.makeEvent("gotpointercapture",a);u.dispatchEvent(b)}},aa=window.navigator;aa.msPointerEnabled?(W=function(a){i(a),j(this),k(a)&&(u.setCapture(a,this,!0),this.msSetPointerCapture(a))},X=function(a){i(a),u.releaseCapture(a,!0),this.msReleasePointerCapture(a)}):(W=function(a){i(a),j(this),k(a)&&u.setCapture(a,this)},X=function(a){i(a),u.releaseCapture(a)}),Y=function(a){return!!u.captureInfo[a]},g(),h(),l();var ba={dispatcher:u,Installer:c,PointerEvent:a,PointerMap:p,targetFinding:v};return ba});
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
var config = {"dark_mode": true, "show_pads": true, "show_fabrication": false, "show_silkscreen": true, "highlight_pin1": "all", "redraw_on_drag": true, "board_rotation": 0, "checkboxes": "Sourced,Placed", "bom_view": "left-right", "layer_view": "F", "offset_back_rotation": false, "kicad_text_formatting": true, "fields": ["Value", "Footprint"]}
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
var pcbdata = JSON.parse(LZString.decompressFromBase64("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cmwKbcLNn0D3YK1tl60QrR1tNG2CrVZtG204bRrN9m2BzZ9t2m06IBxs120trSetgO0fxPNti62LbcutWq2EoBDtwW0PrVutFi0RbXttHG2MAAdtYc20LRXUIABUzUwtKW0MzRdt3q2rQHgxBiC3bXwtaQBjQbzMs67/bUMA38R0fMDt5W0kkpVtZwA7raOtYc3YzU5tBpXlbMl83O2gLQqkKWz87QttFgCtIJ4go6jfANttg3qpIB4tSu1hICrt98DYIK2tcu0AoPCABO02bbhtI634bUAg4u1vre6WRTgy7eMtwK1IbTNAbW1AgMrtAC1/gGrtjAB67Zrtsy2u7ert+u3wbV528u29bWBt263RbRbtEu3/2HV0RYxQgKRty2zo7SzAIO1DxI6t+O3WbZtt2y27LZRAjm3W7YqAv20x7e5ts61x7Y7tBICJ7eXUye1xrcHtoq1m7SLt4e3W7bJg0e1XPAbttq2/rR7AmO1YLWXtFa0V7Y+toe1Z7Zitc6jEbaeIdu1UzJSa8e07wK3tqS2arZDtoW1urdXt6K3W7ZvW9e2D7QbNI+1O7SXt2O2T7X1t0O29LbPtve2cLRIlee3TbaAtw+1F7S3tlG0WzRPtKe1Q7WFtW+2mrb3t8AIL7aRtR+0K7WPtSe39gOvtIe1V7WHt2+3Mree4ue0N7QHthe1P7aftDq2v7RftU+1JrZ/tN+3f7Tnt9+357a3NAB3N7TmAiu3j7e3tVK2gbZXtYS3w7RHtoVH97TM6se1N7R3Nxe2+bW3tIB3l7VhtG+1X7XhtX+1QbT/tMB0H7eMt+B2uLSftWu3IHSQdHe1kHe/tGB0vrV9tUBKmFr/ti+1tzcvthB1IHS/tbu2kHSFt5B3T7RAd9a077UigtB05rbOtj+0IHfGcwh2l7awdqB2d7YTtnB2i7Qjt/9iynHIdra2KHQQdTB23LeftYh0m7Ztt1+3SHd/tZfl8uPvt8h2tzYYdjB2IHc/tqh2iHWwd4h0cHZYdNW3f7XXte+1/7R5tdiAMHRjtQB3EHW4d6h3sHegdXh1jrVbtve1wcAulus2o7SMALVCAHcwdRc05ZqttT9CggF7tSQCpHefNiABJAPDMUABZHRrtOR3/7Yqsxu2p7ZvtlB2MrTEd3+1xHd5VsB2QgKgtf2jBHbkdKADpHeWtFgAe7SAA2R1tHfkdhR3FHf7tAR3LbAKA5h1VHebt6K21HdQdTnzxHUVtSR2/ACkdsy3tHdfGGR3dHb0dSx39HYkAgx2a7WUdtxwVHZftkh2ObVMd3q0zHQ0ddB1MzDCAaC1KHc7taR0rHZ0dQIBrHSUdfR0FHVsdfu07HcMdGKz7HWAdzG3q7bttT8Ck7WHtsW2U7S9oiW2zAMJtqW2ibROt0OAqWIWcPC13bV5swSz4xHMd7xz3Yl/NtkDvbVVtXB06HV+40J0tgEkJTW2zbct4+YD+aKvt1G0rrV1ta61rbQxtHB3p7cNtWJ1YHYFJSIS4VvwdzW1HeEYdQsAuZiodxa1oba0tK233HVSdaB1d7UTtvx2RbQCd5O1HbRTNVO2CbbTtIADnba0AYm2MBNtU+2As7RzNd22A9A9t/h3Czc9taayvbXUtGJ3C7VId3h3pbWroSp2BuecdaO3H7YoANy1UbWDt5J2kgHjtZh2VHWFttJ1w7fSdb61Q6EPUtXCD7RadFG25Hdyd5m32nZSdYIDrbd8dxC0inSTtxS1k7ZAtQJ28bVTtCW0INnKdbC3prU02fMBRyuzNuW3czQidyiyIzdat4zYlbWidfoD6nYyAM+2QHeltk1TLNmad9h1OLYSdX80knUQdoO3+bctt3W1v7egdLp17LZgd7p3lnZs2fUgsnTWdSh11nVydZJ047RSdGR2wACGdEh09LcTt/x2RnYCd3G1xbVTtAAASa8WJnZdtlKCBwCrg6Z13bfJCe5Io7bmtzQIMAM0C/O1FnQYAhp3RHYwA43xvrXbE651XHecdkwgzrIsdYa2+7fydmR1vHTkdPu067dsdpR25rXedG6yjHU6dWy0kkrDtr2hTnextM53infOdIJ0fIOCd9O3ynd9ty8GE2dl2rO0ybXwMeVI7MucdWE7MUMZtam0VbRptBp097cytP20k2bwg3p2TIGV6WF31nSIdo53jnTSdgF1Dba6d2h0MnSLi/dxQ9CRd1XrkXVydph3uHWMdV+0gXftt0Z1zncCdFgCCbcudEJ0M7cmdip1f2GmdOW3wnR1giJ1TbVWddmxNOga1Pm3HnSWdVh3pbRJdu/YjbI0dp1KGbUAI7F0uHf6dnW2dgEFtjp0HHaEtbZ2Z7R2dY22C1nj4OyYGbV2aYppOHd/NpJ22ncOdJl1UXdSdkR28XWKd/F2HbRBd1M0iXTBdSZ08HatAK9wqnRmdluwc7crMXO1FbVABfO1KHSVAql2nnWLt552MXTbtC2UfxAbtDu2+ne+dwiBhHQ8dDQCvnbkdT509HU8d/+05XRodpu1aHeHtxx0TrUdQRExZXRVd+K2WnbNAJe2lXa9Ajx367XldHiCfndldLV1fHROd4G3WXVAdmfmbjDmdux2BcLldRa2cXeEdHh2tnbRdGe1RHdwdkSF0muNd/B3wHeydbV0UXa4dnl2CnZody13YnYydWrVZkngdHxytXZotJh0oHfRt+13VXYdd6V137aMAp106XUPtQR0hrSEdLB0FXQKdVV0WHdUd6l2M7WNdz13nHUvtF13WnWft113fXREdQp01XVQd3q3z7U9dnhYP7W9dyG0cXRDdwZ1eXdDd913W7SItCN0zMi9dIN3TXeDdah03XT9d4x1qXUad3q2+HYf8E10fHeddhN3AHV9d6N23Xb9dEx2lnd6tUe243TTdBe3I3UStO11r7aAdQ13d7SNd1B3QHZzdG1083X+tq+2zXSTdUN0HXX9dFN31Xea1Yt1nXVNdiV1g3Qzde12k3RQdrN3/XROtNh3rXUjddN1q3Tcdu13PnWOdGN1y3TrdCt08HXodyt343QIdoN0m3fzdZl2hnR/t+F3UHY2GGw543cDdDt303aEdmt2y3Xdd8t2jbd/tveZe3VzdDh0S3UGATt3S3ZDd812Y3cHdK13/2KLN4d3i3UbdW12XXTNdaN3m3czdZN0pXZbtaV3W7acdkHCinApdFx2rHH7dQIDLHc76qx1FXZ7tTx0bHS8dRR3FXZNdzDHx3Zbd5N1nnSAAF5297cXdq6RzHZcdLR3vXW0dHR2q7XXdZV3dXWGtKACbHc3d9d1DHdzdeKyDXZ4did0F3d3d6V31HSXdE4C5nbkAyR3G3SXt1d2M3V1d3u1T3TPdfV2t3f2E3F2HHZgddV08HRvd/d0vXYDtQ90o3S4dB9213X1djd0DHS3dtN2GVe3dd10+XWBdfl0U7bGdIJ1UzWCdzC2iXbBdS80szeJecqCbnWztlqq8zPzNJ60p3dgA4s1KHYWdOF0fbW6dmK3LzTd4mjCG3XLQBl0fXeqtjZ12ncfNQZ053VrdAF0IEkBdVl3YPcytuD3iANMEBD3tzc5dGC02naQ97l3kPQHdv90s3Z3dSd1RzTA9sipl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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") || (node.nodeName == "A")) {
|
|
val += node.firstChild.nodeValue;
|
|
} else {
|
|
val += node.nodeValue;
|
|
}
|
|
}
|
|
if (output == 'csv') {
|
|
val = val.replace(/\"/g, '\"\"'); // pair of double-quote characters
|
|
if (isNumeric(val)) {
|
|
val = +val; // use number
|
|
} else {
|
|
val = `"${val}"`; // enclosed within double-quote
|
|
}
|
|
}
|
|
text += val;
|
|
if (cell != row.lastChild) {
|
|
text += (output == 'csv' ? ',' : '\t');
|
|
}
|
|
}
|
|
text += '\n';
|
|
}
|
|
|
|
if (output != 'clipboard') {
|
|
// To file: csv or txt
|
|
var blob = new Blob([text], {
|
|
type: `text/${output}`
|
|
});
|
|
saveFile(`${pcbdata.metadata.title}.${output}`, blob);
|
|
} else {
|
|
// To clipboard
|
|
var textArea = document.createElement("textarea");
|
|
textArea.classList.add('clipboard-temp');
|
|
textArea.value = text;
|
|
|
|
document.body.appendChild(textArea);
|
|
textArea.focus();
|
|
textArea.select();
|
|
|
|
try {
|
|
if (document.execCommand('copy')) {
|
|
console.log('Bom copied to clipboard.');
|
|
}
|
|
} catch (err) {
|
|
console.log('Can not copy to clipboard.');
|
|
}
|
|
|
|
document.body.removeChild(textArea);
|
|
}
|
|
}
|
|
|
|
function isNumeric(str) {
|
|
/* https://stackoverflow.com/a/175787 */
|
|
return (typeof str != "string" ? false : !isNaN(str) && !isNaN(parseFloat(str)));
|
|
}
|
|
|
|
function removeGutterNode(node) {
|
|
for (var i = 0; i < node.childNodes.length; i++) {
|
|
if (node.childNodes[i].classList &&
|
|
node.childNodes[i].classList.contains("gutter")) {
|
|
node.removeChild(node.childNodes[i]);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
function cleanGutters() {
|
|
removeGutterNode(document.getElementById("bot"));
|
|
removeGutterNode(document.getElementById("canvasdiv"));
|
|
}
|
|
|
|
var units = {
|
|
prefixes: {
|
|
giga: ["G", "g", "giga", "Giga", "GIGA"],
|
|
mega: ["M", "mega", "Mega", "MEGA"],
|
|
kilo: ["K", "k", "kilo", "Kilo", "KILO"],
|
|
milli: ["m", "milli", "Milli", "MILLI"],
|
|
micro: ["U", "u", "micro", "Micro", "MICRO", "μ", "µ"], // different utf8 μ
|
|
nano: ["N", "n", "nano", "Nano", "NANO"],
|
|
pico: ["P", "p", "pico", "Pico", "PICO"],
|
|
},
|
|
unitsShort: ["R", "r", "Ω", "F", "f", "H", "h"],
|
|
unitsLong: [
|
|
"OHM", "Ohm", "ohm", "ohms",
|
|
"FARAD", "Farad", "farad",
|
|
"HENRY", "Henry", "henry"
|
|
],
|
|
getMultiplier: function (s) {
|
|
if (this.prefixes.giga.includes(s)) return 1e9;
|
|
if (this.prefixes.mega.includes(s)) return 1e6;
|
|
if (this.prefixes.kilo.includes(s)) return 1e3;
|
|
if (this.prefixes.milli.includes(s)) return 1e-3;
|
|
if (this.prefixes.micro.includes(s)) return 1e-6;
|
|
if (this.prefixes.nano.includes(s)) return 1e-9;
|
|
if (this.prefixes.pico.includes(s)) return 1e-12;
|
|
return 1;
|
|
},
|
|
valueRegex: null,
|
|
}
|
|
|
|
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 resetSettings() {
|
|
if (!confirm(
|
|
`This will reset all checkbox states and other settings.\n\n` +
|
|
`Press OK if you want to continue.`)) {
|
|
return;
|
|
}
|
|
if (storage) {
|
|
var keys = [];
|
|
for (var i = 0; i < storage.length; i++) {
|
|
var key = storage.key(i);
|
|
if (key.startsWith(storagePrefix)) keys.push(key);
|
|
}
|
|
for (var key of keys) storage.removeItem(key);
|
|
}
|
|
location.reload();
|
|
}
|
|
|
|
function overwriteSettings(newSettings) {
|
|
initDone = false;
|
|
Object.assign(settings, newSettings);
|
|
writeStorage("bomlayout", settings.bomlayout);
|
|
writeStorage("bommode", settings.bommode);
|
|
writeStorage("canvaslayout", settings.canvaslayout);
|
|
writeStorage("bomCheckboxes", settings.checkboxes.join(","));
|
|
document.getElementById("bomCheckboxes").value = settings.checkboxes.join(",");
|
|
for (var checkbox of settings.checkboxes) {
|
|
writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
|
|
}
|
|
writeStorage("markWhenChecked", settings.markWhenChecked);
|
|
padsVisible(settings.renderPads);
|
|
document.getElementById("padsCheckbox").checked = settings.renderPads;
|
|
fabricationVisible(settings.renderFabrication);
|
|
document.getElementById("fabricationCheckbox").checked = settings.renderFabrication;
|
|
silkscreenVisible(settings.renderSilkscreen);
|
|
document.getElementById("silkscreenCheckbox").checked = settings.renderSilkscreen;
|
|
referencesVisible(settings.renderReferences);
|
|
document.getElementById("referencesCheckbox").checked = settings.renderReferences;
|
|
valuesVisible(settings.renderValues);
|
|
document.getElementById("valuesCheckbox").checked = settings.renderValues;
|
|
tracksVisible(settings.renderTracks);
|
|
document.getElementById("tracksCheckbox").checked = settings.renderTracks;
|
|
zonesVisible(settings.renderZones);
|
|
document.getElementById("zonesCheckbox").checked = settings.renderZones;
|
|
dnpOutline(settings.renderDnpOutline);
|
|
document.getElementById("dnpOutlineCheckbox").checked = settings.renderDnpOutline;
|
|
setRedrawOnDrag(settings.redrawOnDrag);
|
|
document.getElementById("dragCheckbox").checked = settings.redrawOnDrag;
|
|
setDarkMode(settings.darkMode);
|
|
document.getElementById("darkmodeCheckbox").checked = settings.darkMode;
|
|
setHighlightPin1(settings.highlightpin1);
|
|
document.forms.highlightpin1.highlightpin1.value = settings.highlightpin1;
|
|
writeStorage("boardRotation", settings.boardRotation);
|
|
document.getElementById("boardRotation").value = settings.boardRotation / 5;
|
|
document.getElementById("rotationDegree").textContent = settings.boardRotation;
|
|
setOffsetBackRotation(settings.offsetBackRotation);
|
|
document.getElementById("offsetBackRotationCheckbox").checked = settings.offsetBackRotation;
|
|
initDone = true;
|
|
prepCheckboxes();
|
|
changeBomLayout(settings.bomlayout);
|
|
}
|
|
|
|
function saveFile(filename, blob) {
|
|
var link = document.createElement("a");
|
|
var objurl = URL.createObjectURL(blob);
|
|
link.download = filename;
|
|
link.href = objurl;
|
|
link.click();
|
|
}
|
|
|
|
function dataURLtoBlob(dataurl) {
|
|
var arr = dataurl.split(','),
|
|
mime = arr[0].match(/:(.*?);/)[1],
|
|
bstr = atob(arr[1]),
|
|
n = bstr.length,
|
|
u8arr = new Uint8Array(n);
|
|
while (n--) {
|
|
u8arr[n] = bstr.charCodeAt(n);
|
|
}
|
|
return new Blob([u8arr], {
|
|
type: mime
|
|
});
|
|
}
|
|
|
|
var settings = {
|
|
canvaslayout: "FB",
|
|
bomlayout: "left-right",
|
|
bommode: "grouped",
|
|
checkboxes: [],
|
|
checkboxStoredRefs: {},
|
|
darkMode: false,
|
|
highlightpin1: "none",
|
|
redrawOnDrag: true,
|
|
boardRotation: 0,
|
|
offsetBackRotation: false,
|
|
renderPads: true,
|
|
renderReferences: true,
|
|
renderValues: true,
|
|
renderSilkscreen: true,
|
|
renderFabrication: true,
|
|
renderDnpOutline: false,
|
|
renderTracks: true,
|
|
renderZones: true,
|
|
columnOrder: [],
|
|
hiddenColumns: [],
|
|
netColors: {},
|
|
}
|
|
|
|
function initDefaults() {
|
|
settings.bomlayout = readStorage("bomlayout");
|
|
if (settings.bomlayout === null) {
|
|
settings.bomlayout = config.bom_view;
|
|
}
|
|
if (!['bom-only', 'left-right', 'top-bottom'].includes(settings.bomlayout)) {
|
|
settings.bomlayout = config.bom_view;
|
|
}
|
|
settings.bommode = readStorage("bommode");
|
|
if (settings.bommode === null) {
|
|
settings.bommode = "grouped";
|
|
}
|
|
if (settings.bommode == "netlist" && !pcbdata.nets) {
|
|
settings.bommode = "grouped";
|
|
}
|
|
if (!["grouped", "ungrouped", "netlist"].includes(settings.bommode)) {
|
|
settings.bommode = "grouped";
|
|
}
|
|
settings.canvaslayout = readStorage("canvaslayout");
|
|
if (settings.canvaslayout === null) {
|
|
settings.canvaslayout = config.layer_view;
|
|
}
|
|
var bomCheckboxes = readStorage("bomCheckboxes");
|
|
if (bomCheckboxes === null) {
|
|
bomCheckboxes = config.checkboxes;
|
|
}
|
|
settings.checkboxes = bomCheckboxes.split(",").filter((e) => e);
|
|
document.getElementById("bomCheckboxes").value = bomCheckboxes;
|
|
|
|
var highlightpin1 = readStorage("highlightpin1") || config.highlight_pin1;
|
|
if (highlightpin1 === "false") highlightpin1 = "none";
|
|
if (highlightpin1 === "true") highlightpin1 = "all";
|
|
setHighlightPin1(highlightpin1);
|
|
document.forms.highlightpin1.highlightpin1.value = highlightpin1;
|
|
|
|
settings.markWhenChecked = readStorage("markWhenChecked") || "";
|
|
populateMarkWhenCheckedOptions();
|
|
|
|
function initBooleanSetting(storageString, def, elementId, func) {
|
|
var b = readStorage(storageString);
|
|
if (b === null) {
|
|
b = def;
|
|
} else {
|
|
b = (b == "true");
|
|
}
|
|
document.getElementById(elementId).checked = b;
|
|
func(b);
|
|
}
|
|
|
|
initBooleanSetting("padsVisible", config.show_pads, "padsCheckbox", padsVisible);
|
|
initBooleanSetting("fabricationVisible", config.show_fabrication, "fabricationCheckbox", fabricationVisible);
|
|
initBooleanSetting("silkscreenVisible", config.show_silkscreen, "silkscreenCheckbox", silkscreenVisible);
|
|
initBooleanSetting("referencesVisible", true, "referencesCheckbox", referencesVisible);
|
|
initBooleanSetting("valuesVisible", true, "valuesCheckbox", valuesVisible);
|
|
if ("tracks" in pcbdata) {
|
|
initBooleanSetting("tracksVisible", true, "tracksCheckbox", tracksVisible);
|
|
initBooleanSetting("zonesVisible", true, "zonesCheckbox", zonesVisible);
|
|
} else {
|
|
document.getElementById("tracksAndZonesCheckboxes").style.display = "none";
|
|
tracksVisible(false);
|
|
zonesVisible(false);
|
|
}
|
|
initBooleanSetting("dnpOutline", false, "dnpOutlineCheckbox", dnpOutline);
|
|
initBooleanSetting("redrawOnDrag", config.redraw_on_drag, "dragCheckbox", setRedrawOnDrag);
|
|
initBooleanSetting("darkmode", config.dark_mode, "darkmodeCheckbox", setDarkMode);
|
|
|
|
var fields = ["checkboxes", "References"].concat(config.fields).concat(["Quantity"]);
|
|
var hcols = JSON.parse(readStorage("hiddenColumns"));
|
|
if (hcols === null) {
|
|
hcols = [];
|
|
}
|
|
settings.hiddenColumns = hcols.filter(e => fields.includes(e));
|
|
|
|
var cord = JSON.parse(readStorage("columnOrder"));
|
|
if (cord === null) {
|
|
cord = fields;
|
|
} else {
|
|
cord = cord.filter(e => fields.includes(e));
|
|
if (cord.length != fields.length)
|
|
cord = fields;
|
|
}
|
|
settings.columnOrder = cord;
|
|
|
|
settings.boardRotation = readStorage("boardRotation");
|
|
if (settings.boardRotation === null) {
|
|
settings.boardRotation = config.board_rotation * 5;
|
|
} else {
|
|
settings.boardRotation = parseInt(settings.boardRotation);
|
|
}
|
|
document.getElementById("boardRotation").value = settings.boardRotation / 5;
|
|
document.getElementById("rotationDegree").textContent = settings.boardRotation;
|
|
initBooleanSetting("offsetBackRotation", config.offset_back_rotation, "offsetBackRotationCheckbox", setOffsetBackRotation);
|
|
|
|
settings.netColors = JSON.parse(readStorage("netColors")) || {};
|
|
}
|
|
|
|
// Helper classes for user js callbacks.
|
|
|
|
const IBOM_EVENT_TYPES = {
|
|
ALL: "all",
|
|
HIGHLIGHT_EVENT: "highlightEvent",
|
|
CHECKBOX_CHANGE_EVENT: "checkboxChangeEvent",
|
|
BOM_BODY_CHANGE_EVENT: "bomBodyChangeEvent",
|
|
}
|
|
|
|
const EventHandler = {
|
|
callbacks: {},
|
|
init: function () {
|
|
for (eventType of Object.values(IBOM_EVENT_TYPES))
|
|
this.callbacks[eventType] = [];
|
|
},
|
|
registerCallback: function (eventType, callback) {
|
|
this.callbacks[eventType].push(callback);
|
|
},
|
|
emitEvent: function (eventType, eventArgs) {
|
|
event = {
|
|
eventType: eventType,
|
|
args: eventArgs,
|
|
}
|
|
var callback;
|
|
for (callback of this.callbacks[eventType])
|
|
callback(event);
|
|
for (callback of this.callbacks[IBOM_EVENT_TYPES.ALL])
|
|
callback(event);
|
|
}
|
|
}
|
|
EventHandler.init();
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
/* PCB rendering code */
|
|
|
|
var emptyContext2d = document.createElement("canvas").getContext("2d");
|
|
|
|
function deg2rad(deg) {
|
|
return deg * Math.PI / 180;
|
|
}
|
|
|
|
function calcFontPoint(linepoint, text, offsetx, offsety, tilt) {
|
|
var point = [
|
|
linepoint[0] * text.width + offsetx,
|
|
linepoint[1] * text.height + offsety
|
|
];
|
|
// This approximates pcbnew behavior with how text tilts depending on horizontal justification
|
|
point[0] -= (linepoint[1] + 0.5 * (1 + text.justify[0])) * text.height * tilt;
|
|
return point;
|
|
}
|
|
|
|
function drawText(ctx, text, color) {
|
|
if ("ref" in text && !settings.renderReferences) return;
|
|
if ("val" in text && !settings.renderValues) return;
|
|
ctx.save();
|
|
ctx.fillStyle = color;
|
|
ctx.strokeStyle = color;
|
|
ctx.lineCap = "round";
|
|
ctx.lineJoin = "round";
|
|
ctx.lineWidth = text.thickness;
|
|
if ("svgpath" in text) {
|
|
ctx.stroke(new Path2D(text.svgpath));
|
|
ctx.restore();
|
|
return;
|
|
}
|
|
if ("polygons" in text) {
|
|
ctx.fill(getPolygonsPath(text));
|
|
ctx.restore();
|
|
return;
|
|
}
|
|
ctx.translate(...text.pos);
|
|
ctx.translate(text.thickness * 0.5, 0);
|
|
var angle = -text.angle;
|
|
if (text.attr.includes("mirrored")) {
|
|
ctx.scale(-1, 1);
|
|
angle = -angle;
|
|
}
|
|
var tilt = 0;
|
|
if (text.attr.includes("italic")) {
|
|
tilt = 0.125;
|
|
}
|
|
var interline = text.height * 1.5 + text.thickness;
|
|
var txt = text.text.split("\n");
|
|
// KiCad ignores last empty line.
|
|
if (txt[txt.length - 1] == '') txt.pop();
|
|
ctx.rotate(deg2rad(angle));
|
|
var offsety = (1 - text.justify[1]) / 2 * text.height; // One line offset
|
|
offsety -= (txt.length - 1) * (text.justify[1] + 1) / 2 * interline; // Multiline offset
|
|
for (var i in txt) {
|
|
var lineWidth = text.thickness + interline / 2 * tilt;
|
|
for (var j = 0; j < txt[i].length; j++) {
|
|
if (txt[i][j] == '\t') {
|
|
var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
|
|
lineWidth += fourSpaces - lineWidth % fourSpaces;
|
|
} else {
|
|
if (txt[i][j] == '~') {
|
|
j++;
|
|
if (j == txt[i].length)
|
|
break;
|
|
}
|
|
lineWidth += pcbdata.font_data[txt[i][j]].w * text.width;
|
|
}
|
|
}
|
|
var offsetx = -lineWidth * (text.justify[0] + 1) / 2;
|
|
var inOverbar = false;
|
|
for (var j = 0; j < txt[i].length; j++) {
|
|
if (config.kicad_text_formatting) {
|
|
if (txt[i][j] == '\t') {
|
|
var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
|
|
offsetx += fourSpaces - offsetx % fourSpaces;
|
|
continue;
|
|
} else if (txt[i][j] == '~') {
|
|
j++;
|
|
if (j == txt[i].length)
|
|
break;
|
|
if (txt[i][j] != '~') {
|
|
inOverbar = !inOverbar;
|
|
}
|
|
}
|
|
}
|
|
var glyph = pcbdata.font_data[txt[i][j]];
|
|
if (inOverbar) {
|
|
var overbarStart = [offsetx, -text.height * 1.4 + offsety];
|
|
var overbarEnd = [offsetx + text.width * glyph.w, overbarStart[1]];
|
|
|
|
if (!lastHadOverbar) {
|
|
overbarStart[0] += text.height * 1.4 * tilt;
|
|
lastHadOverbar = true;
|
|
}
|
|
ctx.beginPath();
|
|
ctx.moveTo(...overbarStart);
|
|
ctx.lineTo(...overbarEnd);
|
|
ctx.stroke();
|
|
} else {
|
|
lastHadOverbar = false;
|
|
}
|
|
for (var line of glyph.l) {
|
|
ctx.beginPath();
|
|
ctx.moveTo(...calcFontPoint(line[0], text, offsetx, offsety, tilt));
|
|
for (var k = 1; k < line.length; k++) {
|
|
ctx.lineTo(...calcFontPoint(line[k], text, offsetx, offsety, tilt));
|
|
}
|
|
ctx.stroke();
|
|
}
|
|
offsetx += glyph.w * text.width;
|
|
}
|
|
offsety += interline;
|
|
}
|
|
ctx.restore();
|
|
}
|
|
|
|
function drawedge(ctx, scalefactor, edge, color) {
|
|
ctx.strokeStyle = color;
|
|
ctx.fillStyle = color;
|
|
ctx.lineWidth = Math.max(1 / scalefactor, edge.width);
|
|
ctx.lineCap = "round";
|
|
ctx.lineJoin = "round";
|
|
if ("svgpath" in edge) {
|
|
ctx.stroke(new Path2D(edge.svgpath));
|
|
} else {
|
|
ctx.beginPath();
|
|
if (edge.type == "segment") {
|
|
ctx.moveTo(...edge.start);
|
|
ctx.lineTo(...edge.end);
|
|
}
|
|
if (edge.type == "rect") {
|
|
ctx.moveTo(...edge.start);
|
|
ctx.lineTo(edge.start[0], edge.end[1]);
|
|
ctx.lineTo(...edge.end);
|
|
ctx.lineTo(edge.end[0], edge.start[1]);
|
|
ctx.lineTo(...edge.start);
|
|
}
|
|
if (edge.type == "arc") {
|
|
ctx.arc(
|
|
...edge.start,
|
|
edge.radius,
|
|
deg2rad(edge.startangle),
|
|
deg2rad(edge.endangle));
|
|
}
|
|
if (edge.type == "circle") {
|
|
ctx.arc(
|
|
...edge.start,
|
|
edge.radius,
|
|
0, 2 * Math.PI);
|
|
ctx.closePath();
|
|
}
|
|
if (edge.type == "curve") {
|
|
ctx.moveTo(...edge.start);
|
|
ctx.bezierCurveTo(...edge.cpa, ...edge.cpb, ...edge.end);
|
|
}
|
|
if("filled" in edge && edge.filled)
|
|
ctx.fill();
|
|
else
|
|
ctx.stroke();
|
|
}
|
|
}
|
|
|
|
function getChamferedRectPath(size, radius, chamfpos, chamfratio) {
|
|
// chamfpos is a bitmask, left = 1, right = 2, bottom left = 4, bottom right = 8
|
|
var path = new Path2D();
|
|
var width = size[0];
|
|
var height = size[1];
|
|
var x = width * -0.5;
|
|
var y = height * -0.5;
|
|
var chamfOffset = Math.min(width, height) * chamfratio;
|
|
path.moveTo(x, 0);
|
|
if (chamfpos & 4) {
|
|
path.lineTo(x, y + height - chamfOffset);
|
|
path.lineTo(x + chamfOffset, y + height);
|
|
path.lineTo(0, y + height);
|
|
} else {
|
|
path.arcTo(x, y + height, x + width, y + height, radius);
|
|
}
|
|
if (chamfpos & 8) {
|
|
path.lineTo(x + width - chamfOffset, y + height);
|
|
path.lineTo(x + width, y + height - chamfOffset);
|
|
path.lineTo(x + width, 0);
|
|
} else {
|
|
path.arcTo(x + width, y + height, x + width, y, radius);
|
|
}
|
|
if (chamfpos & 2) {
|
|
path.lineTo(x + width, y + chamfOffset);
|
|
path.lineTo(x + width - chamfOffset, y);
|
|
path.lineTo(0, y);
|
|
} else {
|
|
path.arcTo(x + width, y, x, y, radius);
|
|
}
|
|
if (chamfpos & 1) {
|
|
path.lineTo(x + chamfOffset, y);
|
|
path.lineTo(x, y + chamfOffset);
|
|
path.lineTo(x, 0);
|
|
} else {
|
|
path.arcTo(x, y, x, y + height, radius);
|
|
}
|
|
path.closePath();
|
|
return path;
|
|
}
|
|
|
|
function getOblongPath(size) {
|
|
return getChamferedRectPath(size, Math.min(size[0], size[1]) / 2, 0, 0);
|
|
}
|
|
|
|
function getPolygonsPath(shape) {
|
|
if (shape.path2d) {
|
|
return shape.path2d;
|
|
}
|
|
if ("svgpath" in shape) {
|
|
shape.path2d = new Path2D(shape.svgpath);
|
|
} else {
|
|
var path = new Path2D();
|
|
for (var polygon of shape.polygons) {
|
|
path.moveTo(...polygon[0]);
|
|
for (var i = 1; i < polygon.length; i++) {
|
|
path.lineTo(...polygon[i]);
|
|
}
|
|
path.closePath();
|
|
}
|
|
shape.path2d = path;
|
|
}
|
|
return shape.path2d;
|
|
}
|
|
|
|
function drawPolygonShape(ctx, scalefactor, shape, color) {
|
|
ctx.save();
|
|
if (!("svgpath" in shape)) {
|
|
ctx.translate(...shape.pos);
|
|
ctx.rotate(deg2rad(-shape.angle));
|
|
}
|
|
if("filled" in shape && !shape.filled) {
|
|
ctx.strokeStyle = color;
|
|
ctx.lineWidth = Math.max(1 / scalefactor, shape.width);
|
|
ctx.lineCap = "round";
|
|
ctx.lineJoin = "round";
|
|
ctx.stroke(getPolygonsPath(shape));
|
|
} else {
|
|
ctx.fillStyle = color;
|
|
ctx.fill(getPolygonsPath(shape));
|
|
}
|
|
ctx.restore();
|
|
}
|
|
|
|
function drawDrawing(ctx, scalefactor, drawing, color) {
|
|
if (["segment", "arc", "circle", "curve", "rect"].includes(drawing.type)) {
|
|
drawedge(ctx, scalefactor, drawing, color);
|
|
} else if (drawing.type == "polygon") {
|
|
drawPolygonShape(ctx, scalefactor, drawing, color);
|
|
} else {
|
|
drawText(ctx, drawing, color);
|
|
}
|
|
}
|
|
|
|
function getCirclePath(radius) {
|
|
var path = new Path2D();
|
|
path.arc(0, 0, radius, 0, 2 * Math.PI);
|
|
path.closePath();
|
|
return path;
|
|
}
|
|
|
|
function getCachedPadPath(pad) {
|
|
if (!pad.path2d) {
|
|
// if path2d is not set, build one and cache it on pad object
|
|
if (pad.shape == "rect") {
|
|
pad.path2d = new Path2D();
|
|
pad.path2d.rect(...pad.size.map(c => -c * 0.5), ...pad.size);
|
|
} else if (pad.shape == "oval") {
|
|
pad.path2d = getOblongPath(pad.size);
|
|
} else if (pad.shape == "circle") {
|
|
pad.path2d = getCirclePath(pad.size[0] / 2);
|
|
} else if (pad.shape == "roundrect") {
|
|
pad.path2d = getChamferedRectPath(pad.size, pad.radius, 0, 0);
|
|
} else if (pad.shape == "chamfrect") {
|
|
pad.path2d = getChamferedRectPath(pad.size, pad.radius, pad.chamfpos, pad.chamfratio)
|
|
} else if (pad.shape == "custom") {
|
|
pad.path2d = getPolygonsPath(pad);
|
|
}
|
|
}
|
|
return pad.path2d;
|
|
}
|
|
|
|
function drawPad(ctx, pad, color, outline) {
|
|
ctx.save();
|
|
ctx.translate(...pad.pos);
|
|
ctx.rotate(-deg2rad(pad.angle));
|
|
if (pad.offset) {
|
|
ctx.translate(...pad.offset);
|
|
}
|
|
ctx.fillStyle = color;
|
|
ctx.strokeStyle = color;
|
|
var path = getCachedPadPath(pad);
|
|
if (outline) {
|
|
ctx.stroke(path);
|
|
} else {
|
|
ctx.fill(path);
|
|
}
|
|
ctx.restore();
|
|
}
|
|
|
|
function drawPadHole(ctx, pad, padHoleColor) {
|
|
if (pad.type != "th") return;
|
|
ctx.save();
|
|
ctx.translate(...pad.pos);
|
|
ctx.rotate(-deg2rad(pad.angle));
|
|
ctx.fillStyle = padHoleColor;
|
|
if (pad.drillshape == "oblong") {
|
|
ctx.fill(getOblongPath(pad.drillsize));
|
|
} else {
|
|
ctx.fill(getCirclePath(pad.drillsize[0] / 2));
|
|
}
|
|
ctx.restore();
|
|
}
|
|
|
|
function drawFootprint(ctx, layer, scalefactor, footprint, colors, highlight, outline) {
|
|
if (highlight) {
|
|
// draw bounding box
|
|
if (footprint.layer == layer) {
|
|
ctx.save();
|
|
ctx.globalAlpha = 0.2;
|
|
ctx.translate(...footprint.bbox.pos);
|
|
ctx.rotate(deg2rad(-footprint.bbox.angle));
|
|
ctx.translate(...footprint.bbox.relpos);
|
|
ctx.fillStyle = colors.pad;
|
|
ctx.fillRect(0, 0, ...footprint.bbox.size);
|
|
ctx.globalAlpha = 1;
|
|
ctx.strokeStyle = colors.pad;
|
|
ctx.lineWidth = 3 / scalefactor;
|
|
ctx.strokeRect(0, 0, ...footprint.bbox.size);
|
|
ctx.restore();
|
|
}
|
|
}
|
|
// draw drawings
|
|
for (var drawing of footprint.drawings) {
|
|
if (drawing.layer == layer) {
|
|
drawDrawing(ctx, scalefactor, drawing.drawing, colors.pad);
|
|
}
|
|
}
|
|
ctx.lineWidth = 3 / scalefactor;
|
|
// draw pads
|
|
if (settings.renderPads) {
|
|
for (var pad of footprint.pads) {
|
|
if (pad.layers.includes(layer)) {
|
|
drawPad(ctx, pad, colors.pad, outline);
|
|
if (pad.pin1 &&
|
|
(settings.highlightpin1 == "all" ||
|
|
settings.highlightpin1 == "selected" && highlight)) {
|
|
drawPad(ctx, pad, colors.outline, true);
|
|
}
|
|
}
|
|
}
|
|
for (var pad of footprint.pads) {
|
|
drawPadHole(ctx, pad, colors.padHole);
|
|
}
|
|
}
|
|
}
|
|
|
|
function drawEdgeCuts(canvas, scalefactor) {
|
|
var ctx = canvas.getContext("2d");
|
|
var edgecolor = getComputedStyle(topmostdiv).getPropertyValue('--pcb-edge-color');
|
|
for (var edge of pcbdata.edges) {
|
|
drawDrawing(ctx, scalefactor, edge, edgecolor);
|
|
}
|
|
}
|
|
|
|
function drawFootprints(canvas, layer, scalefactor, highlight) {
|
|
var ctx = canvas.getContext("2d");
|
|
ctx.lineWidth = 3 / scalefactor;
|
|
var style = getComputedStyle(topmostdiv);
|
|
|
|
var colors = {
|
|
pad: style.getPropertyValue('--pad-color'),
|
|
padHole: style.getPropertyValue('--pad-hole-color'),
|
|
outline: style.getPropertyValue('--pin1-outline-color'),
|
|
}
|
|
|
|
for (var i = 0; i < pcbdata.footprints.length; i++) {
|
|
var mod = pcbdata.footprints[i];
|
|
var outline = settings.renderDnpOutline && pcbdata.bom.skipped.includes(i);
|
|
var h = highlightedFootprints.includes(i);
|
|
var d = markedFootprints.has(i);
|
|
if (highlight) {
|
|
if(h && d) {
|
|
colors.pad = style.getPropertyValue('--pad-color-highlight-both');
|
|
colors.outline = style.getPropertyValue('--pin1-outline-color-highlight-both');
|
|
} else if (h) {
|
|
colors.pad = style.getPropertyValue('--pad-color-highlight');
|
|
colors.outline = style.getPropertyValue('--pin1-outline-color-highlight');
|
|
} else if (d) {
|
|
colors.pad = style.getPropertyValue('--pad-color-highlight-marked');
|
|
colors.outline = style.getPropertyValue('--pin1-outline-color-highlight-marked');
|
|
}
|
|
}
|
|
if( h || d || !highlight) {
|
|
drawFootprint(ctx, layer, scalefactor, mod, colors, highlight, outline);
|
|
}
|
|
}
|
|
}
|
|
|
|
function drawBgLayer(layername, canvas, layer, scalefactor, edgeColor, polygonColor, textColor) {
|
|
var ctx = canvas.getContext("2d");
|
|
for (var d of pcbdata.drawings[layername][layer]) {
|
|
if (["segment", "arc", "circle", "curve", "rect"].includes(d.type)) {
|
|
drawedge(ctx, scalefactor, d, edgeColor);
|
|
} else if (d.type == "polygon") {
|
|
drawPolygonShape(ctx, scalefactor, d, polygonColor);
|
|
} else {
|
|
drawText(ctx, d, textColor);
|
|
}
|
|
}
|
|
}
|
|
|
|
function drawTracks(canvas, layer, defaultColor, highlight) {
|
|
ctx = canvas.getContext("2d");
|
|
ctx.lineCap = "round";
|
|
|
|
var hasHole = (track) => (
|
|
'drillsize' in track &&
|
|
track.start[0] == track.end[0] &&
|
|
track.start[1] == track.end[1]);
|
|
|
|
// First draw tracks and tented vias
|
|
for (var track of pcbdata.tracks[layer]) {
|
|
if (highlight && highlightedNet != track.net) continue;
|
|
if (!hasHole(track)) {
|
|
ctx.strokeStyle = highlight ? defaultColor : settings.netColors[track.net] || defaultColor;
|
|
ctx.lineWidth = track.width;
|
|
ctx.beginPath();
|
|
if ('radius' in track) {
|
|
ctx.arc(
|
|
...track.center,
|
|
track.radius,
|
|
deg2rad(track.startangle),
|
|
deg2rad(track.endangle));
|
|
} else {
|
|
ctx.moveTo(...track.start);
|
|
ctx.lineTo(...track.end);
|
|
}
|
|
ctx.stroke();
|
|
}
|
|
}
|
|
// Second pass to draw untented vias
|
|
var style = getComputedStyle(topmostdiv);
|
|
var holeColor = style.getPropertyValue('--pad-hole-color')
|
|
|
|
for (var track of pcbdata.tracks[layer]) {
|
|
if (highlight && highlightedNet != track.net) continue;
|
|
if (hasHole(track)) {
|
|
ctx.strokeStyle = highlight ? defaultColor : settings.netColors[track.net] || defaultColor;
|
|
ctx.lineWidth = track.width;
|
|
ctx.beginPath();
|
|
ctx.moveTo(...track.start);
|
|
ctx.lineTo(...track.end);
|
|
ctx.stroke();
|
|
ctx.strokeStyle = holeColor;
|
|
ctx.lineWidth = track.drillsize;
|
|
ctx.lineTo(...track.end);
|
|
ctx.stroke();
|
|
}
|
|
}
|
|
}
|
|
|
|
function drawZones(canvas, layer, defaultColor, highlight) {
|
|
ctx = canvas.getContext("2d");
|
|
ctx.lineJoin = "round";
|
|
for (var zone of pcbdata.zones[layer]) {
|
|
if (highlight && highlightedNet != zone.net) continue;
|
|
ctx.strokeStyle = highlight ? defaultColor : settings.netColors[zone.net] || defaultColor;
|
|
ctx.fillStyle = highlight ? defaultColor : settings.netColors[zone.net] || defaultColor;
|
|
if (!zone.path2d) {
|
|
zone.path2d = getPolygonsPath(zone);
|
|
}
|
|
ctx.fill(zone.path2d, zone.fillrule || "nonzero");
|
|
if (zone.width > 0) {
|
|
ctx.lineWidth = zone.width;
|
|
ctx.stroke(zone.path2d);
|
|
}
|
|
}
|
|
}
|
|
|
|
function clearCanvas(canvas, color = null) {
|
|
var ctx = canvas.getContext("2d");
|
|
ctx.save();
|
|
ctx.setTransform(1, 0, 0, 1, 0, 0);
|
|
if (color) {
|
|
ctx.fillStyle = color;
|
|
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
|
} else {
|
|
if (!window.matchMedia("print").matches)
|
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
}
|
|
ctx.restore();
|
|
}
|
|
|
|
function drawNets(canvas, layer, highlight) {
|
|
var style = getComputedStyle(topmostdiv);
|
|
if (settings.renderZones) {
|
|
var zoneColor = style.getPropertyValue(highlight ? '--zone-color-highlight' : '--zone-color');
|
|
drawZones(canvas, layer, zoneColor, highlight);
|
|
}
|
|
if (settings.renderTracks) {
|
|
var trackColor = style.getPropertyValue(highlight ? '--track-color-highlight' : '--track-color');
|
|
drawTracks(canvas, layer, trackColor, highlight);
|
|
}
|
|
if (highlight && settings.renderPads) {
|
|
var padColor = style.getPropertyValue('--pad-color-highlight');
|
|
var padHoleColor = style.getPropertyValue('--pad-hole-color');
|
|
var ctx = canvas.getContext("2d");
|
|
for (var footprint of pcbdata.footprints) {
|
|
// draw pads
|
|
var padDrawn = false;
|
|
for (var pad of footprint.pads) {
|
|
if (highlightedNet != pad.net) continue;
|
|
if (pad.layers.includes(layer)) {
|
|
drawPad(ctx, pad, padColor, false);
|
|
padDrawn = true;
|
|
}
|
|
}
|
|
if (padDrawn) {
|
|
// redraw all pad holes because some pads may overlap
|
|
for (var pad of footprint.pads) {
|
|
drawPadHole(ctx, pad, padHoleColor);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function drawHighlightsOnLayer(canvasdict, clear = true) {
|
|
if (clear) {
|
|
clearCanvas(canvasdict.highlight);
|
|
}
|
|
if (markedFootprints.size > 0 || highlightedFootprints.length > 0) {
|
|
drawFootprints(canvasdict.highlight, canvasdict.layer,
|
|
canvasdict.transform.s * canvasdict.transform.zoom, true);
|
|
}
|
|
if (highlightedNet !== null) {
|
|
drawNets(canvasdict.highlight, canvasdict.layer, true);
|
|
}
|
|
}
|
|
|
|
function drawHighlights() {
|
|
drawHighlightsOnLayer(allcanvas.front);
|
|
drawHighlightsOnLayer(allcanvas.back);
|
|
}
|
|
|
|
function drawBackground(canvasdict, clear = true) {
|
|
if (clear) {
|
|
clearCanvas(canvasdict.bg);
|
|
clearCanvas(canvasdict.fab);
|
|
clearCanvas(canvasdict.silk);
|
|
}
|
|
|
|
drawNets(canvasdict.bg, canvasdict.layer, false);
|
|
drawFootprints(canvasdict.bg, canvasdict.layer,
|
|
canvasdict.transform.s * canvasdict.transform.zoom, false);
|
|
|
|
drawEdgeCuts(canvasdict.bg, canvasdict.transform.s * canvasdict.transform.zoom);
|
|
|
|
var style = getComputedStyle(topmostdiv);
|
|
var edgeColor = style.getPropertyValue('--silkscreen-edge-color');
|
|
var polygonColor = style.getPropertyValue('--silkscreen-polygon-color');
|
|
var textColor = style.getPropertyValue('--silkscreen-text-color');
|
|
if (settings.renderSilkscreen) {
|
|
drawBgLayer(
|
|
"silkscreen", canvasdict.silk, canvasdict.layer,
|
|
canvasdict.transform.s * canvasdict.transform.zoom,
|
|
edgeColor, polygonColor, textColor);
|
|
}
|
|
edgeColor = style.getPropertyValue('--fabrication-edge-color');
|
|
polygonColor = style.getPropertyValue('--fabrication-polygon-color');
|
|
textColor = style.getPropertyValue('--fabrication-text-color');
|
|
if (settings.renderFabrication) {
|
|
drawBgLayer(
|
|
"fabrication", canvasdict.fab, canvasdict.layer,
|
|
canvasdict.transform.s * canvasdict.transform.zoom,
|
|
edgeColor, polygonColor, textColor);
|
|
}
|
|
}
|
|
|
|
function prepareCanvas(canvas, flip, transform) {
|
|
var ctx = canvas.getContext("2d");
|
|
ctx.setTransform(1, 0, 0, 1, 0, 0);
|
|
ctx.scale(transform.zoom, transform.zoom);
|
|
ctx.translate(transform.panx, transform.pany);
|
|
if (flip) {
|
|
ctx.scale(-1, 1);
|
|
}
|
|
ctx.translate(transform.x, transform.y);
|
|
ctx.rotate(deg2rad(settings.boardRotation + (flip && settings.offsetBackRotation ? - 180 : 0)));
|
|
ctx.scale(transform.s, transform.s);
|
|
}
|
|
|
|
function prepareLayer(canvasdict) {
|
|
var flip = (canvasdict.layer === "B");
|
|
for (var c of ["bg", "fab", "silk", "highlight"]) {
|
|
prepareCanvas(canvasdict[c], flip, canvasdict.transform);
|
|
}
|
|
}
|
|
|
|
function rotateVector(v, angle) {
|
|
angle = deg2rad(angle);
|
|
return [
|
|
v[0] * Math.cos(angle) - v[1] * Math.sin(angle),
|
|
v[0] * Math.sin(angle) + v[1] * Math.cos(angle)
|
|
];
|
|
}
|
|
|
|
function applyRotation(bbox, flip) {
|
|
var corners = [
|
|
[bbox.minx, bbox.miny],
|
|
[bbox.minx, bbox.maxy],
|
|
[bbox.maxx, bbox.miny],
|
|
[bbox.maxx, bbox.maxy],
|
|
];
|
|
corners = corners.map((v) => rotateVector(v, settings.boardRotation + (flip && settings.offsetBackRotation ? - 180 : 0)));
|
|
return {
|
|
minx: corners.reduce((a, v) => Math.min(a, v[0]), Infinity),
|
|
miny: corners.reduce((a, v) => Math.min(a, v[1]), Infinity),
|
|
maxx: corners.reduce((a, v) => Math.max(a, v[0]), -Infinity),
|
|
maxy: corners.reduce((a, v) => Math.max(a, v[1]), -Infinity),
|
|
}
|
|
}
|
|
|
|
function recalcLayerScale(layerdict, width, height) {
|
|
var flip = (layerdict.layer === "B");
|
|
var bbox = applyRotation(pcbdata.edges_bbox, flip);
|
|
var scalefactor = 0.98 * Math.min(
|
|
width / (bbox.maxx - bbox.minx),
|
|
height / (bbox.maxy - bbox.miny)
|
|
);
|
|
if (scalefactor < 0.1) {
|
|
scalefactor = 1;
|
|
}
|
|
layerdict.transform.s = scalefactor;
|
|
if (flip) {
|
|
layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor + width) * 0.5;
|
|
} else {
|
|
layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor - width) * 0.5;
|
|
}
|
|
layerdict.transform.y = -((bbox.maxy + bbox.miny) * scalefactor - height) * 0.5;
|
|
for (var c of ["bg", "fab", "silk", "highlight"]) {
|
|
canvas = layerdict[c];
|
|
canvas.width = width;
|
|
canvas.height = height;
|
|
canvas.style.width = (width / devicePixelRatio) + "px";
|
|
canvas.style.height = (height / devicePixelRatio) + "px";
|
|
}
|
|
}
|
|
|
|
function redrawCanvas(layerdict) {
|
|
prepareLayer(layerdict);
|
|
drawBackground(layerdict);
|
|
drawHighlightsOnLayer(layerdict);
|
|
}
|
|
|
|
function resizeCanvas(layerdict) {
|
|
var canvasdivid = {
|
|
"F": "frontcanvas",
|
|
"B": "backcanvas"
|
|
} [layerdict.layer];
|
|
var width = document.getElementById(canvasdivid).clientWidth * devicePixelRatio;
|
|
var height = document.getElementById(canvasdivid).clientHeight * devicePixelRatio;
|
|
recalcLayerScale(layerdict, width, height);
|
|
redrawCanvas(layerdict);
|
|
}
|
|
|
|
function resizeAll() {
|
|
resizeCanvas(allcanvas.front);
|
|
resizeCanvas(allcanvas.back);
|
|
}
|
|
|
|
function pointWithinDistanceToSegment(x, y, x1, y1, x2, y2, d) {
|
|
var A = x - x1;
|
|
var B = y - y1;
|
|
var C = x2 - x1;
|
|
var D = y2 - y1;
|
|
|
|
var dot = A * C + B * D;
|
|
var len_sq = C * C + D * D;
|
|
var dx, dy;
|
|
if (len_sq == 0) {
|
|
// start and end of the segment coincide
|
|
dx = x - x1;
|
|
dy = y - y1;
|
|
} else {
|
|
var param = dot / len_sq;
|
|
var xx, yy;
|
|
if (param < 0) {
|
|
xx = x1;
|
|
yy = y1;
|
|
} else if (param > 1) {
|
|
xx = x2;
|
|
yy = y2;
|
|
} else {
|
|
xx = x1 + param * C;
|
|
yy = y1 + param * D;
|
|
}
|
|
dx = x - xx;
|
|
dy = y - yy;
|
|
}
|
|
return dx * dx + dy * dy <= d * d;
|
|
}
|
|
|
|
function modulo(n, mod) {
|
|
return ((n % mod) + mod) % mod;
|
|
}
|
|
|
|
function pointWithinDistanceToArc(x, y, xc, yc, radius, startangle, endangle, d) {
|
|
var dx = x - xc;
|
|
var dy = y - yc;
|
|
var r_sq = dx * dx + dy * dy;
|
|
var rmin = Math.max(0, radius - d);
|
|
var rmax = radius + d;
|
|
|
|
if (r_sq < rmin * rmin || r_sq > rmax * rmax)
|
|
return false;
|
|
|
|
var angle1 = modulo(deg2rad(startangle), 2 * Math.PI);
|
|
var dx1 = xc + radius * Math.cos(angle1) - x;
|
|
var dy1 = yc + radius * Math.sin(angle1) - y;
|
|
if (dx1 * dx1 + dy1 * dy1 <= d * d)
|
|
return true;
|
|
|
|
var angle2 = modulo(deg2rad(endangle), 2 * Math.PI);
|
|
var dx2 = xc + radius * Math.cos(angle2) - x;
|
|
var dy2 = yc + radius * Math.sin(angle2) - y;
|
|
if (dx2 * dx2 + dy2 * dy2 <= d * d)
|
|
return true;
|
|
|
|
var angle = modulo(Math.atan2(dy, dx), 2 * Math.PI);
|
|
if (angle1 > angle2)
|
|
return (angle >= angle2 || angle <= angle1);
|
|
else
|
|
return (angle >= angle1 && angle <= angle2);
|
|
}
|
|
|
|
function pointWithinPad(x, y, pad) {
|
|
var v = [x - pad.pos[0], y - pad.pos[1]];
|
|
v = rotateVector(v, pad.angle);
|
|
if (pad.offset) {
|
|
v[0] -= pad.offset[0];
|
|
v[1] -= pad.offset[1];
|
|
}
|
|
return emptyContext2d.isPointInPath(getCachedPadPath(pad), ...v);
|
|
}
|
|
|
|
function netHitScan(layer, x, y) {
|
|
// Check track segments
|
|
if (settings.renderTracks && pcbdata.tracks) {
|
|
for (var track of pcbdata.tracks[layer]) {
|
|
if ('radius' in track) {
|
|
if (pointWithinDistanceToArc(x, y, ...track.center, track.radius, track.startangle, track.endangle, track.width / 2)) {
|
|
return track.net;
|
|
}
|
|
} else {
|
|
if (pointWithinDistanceToSegment(x, y, ...track.start, ...track.end, track.width / 2)) {
|
|
return track.net;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// Check pads
|
|
if (settings.renderPads) {
|
|
for (var footprint of pcbdata.footprints) {
|
|
for (var pad of footprint.pads) {
|
|
if (pad.layers.includes(layer) && pointWithinPad(x, y, pad)) {
|
|
return pad.net;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function pointWithinFootprintBbox(x, y, bbox) {
|
|
var v = [x - bbox.pos[0], y - bbox.pos[1]];
|
|
v = rotateVector(v, bbox.angle);
|
|
return bbox.relpos[0] <= v[0] && v[0] <= bbox.relpos[0] + bbox.size[0] &&
|
|
bbox.relpos[1] <= v[1] && v[1] <= bbox.relpos[1] + bbox.size[1];
|
|
}
|
|
|
|
function bboxHitScan(layer, x, y) {
|
|
var result = [];
|
|
for (var i = 0; i < pcbdata.footprints.length; i++) {
|
|
var footprint = pcbdata.footprints[i];
|
|
if (footprint.layer == layer) {
|
|
if (pointWithinFootprintBbox(x, y, footprint.bbox)) {
|
|
result.push(i);
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
function handlePointerDown(e, layerdict) {
|
|
if (e.button != 0 && e.button != 1) {
|
|
return;
|
|
}
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
|
|
if (!e.hasOwnProperty("offsetX")) {
|
|
// The polyfill doesn't set this properly
|
|
e.offsetX = e.pageX - e.currentTarget.offsetLeft;
|
|
e.offsetY = e.pageY - e.currentTarget.offsetTop;
|
|
}
|
|
|
|
layerdict.pointerStates[e.pointerId] = {
|
|
distanceTravelled: 0,
|
|
lastX: e.offsetX,
|
|
lastY: e.offsetY,
|
|
downTime: Date.now(),
|
|
};
|
|
}
|
|
|
|
function handleMouseClick(e, layerdict) {
|
|
if (!e.hasOwnProperty("offsetX")) {
|
|
// The polyfill doesn't set this properly
|
|
e.offsetX = e.pageX - e.currentTarget.offsetLeft;
|
|
e.offsetY = e.pageY - e.currentTarget.offsetTop;
|
|
}
|
|
|
|
var x = e.offsetX;
|
|
var y = e.offsetY;
|
|
var t = layerdict.transform;
|
|
var flip = layerdict.layer === "B";
|
|
if (flip) {
|
|
x = (devicePixelRatio * x / t.zoom - t.panx + t.x) / -t.s;
|
|
} else {
|
|
x = (devicePixelRatio * x / t.zoom - t.panx - t.x) / t.s;
|
|
}
|
|
y = (devicePixelRatio * y / t.zoom - t.y - t.pany) / t.s;
|
|
var v = rotateVector([x, y], -settings.boardRotation + (flip && settings.offsetBackRotation ? - 180 : 0));
|
|
if ("nets" in pcbdata) {
|
|
var net = netHitScan(layerdict.layer, ...v);
|
|
if (net !== highlightedNet) {
|
|
netClicked(net);
|
|
}
|
|
}
|
|
if (highlightedNet === null) {
|
|
var footprints = bboxHitScan(layerdict.layer, ...v);
|
|
if (footprints.length > 0) {
|
|
footprintsClicked(footprints);
|
|
}
|
|
}
|
|
}
|
|
|
|
function handlePointerLeave(e, layerdict) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
|
|
if (!settings.redrawOnDrag) {
|
|
redrawCanvas(layerdict);
|
|
}
|
|
|
|
delete layerdict.pointerStates[e.pointerId];
|
|
}
|
|
|
|
function resetTransform(layerdict) {
|
|
layerdict.transform.panx = 0;
|
|
layerdict.transform.pany = 0;
|
|
layerdict.transform.zoom = 1;
|
|
redrawCanvas(layerdict);
|
|
}
|
|
|
|
function handlePointerUp(e, layerdict) {
|
|
if (!e.hasOwnProperty("offsetX")) {
|
|
// The polyfill doesn't set this properly
|
|
e.offsetX = e.pageX - e.currentTarget.offsetLeft;
|
|
e.offsetY = e.pageY - e.currentTarget.offsetTop;
|
|
}
|
|
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
|
|
if (e.button == 2) {
|
|
// Reset pan and zoom on right click.
|
|
resetTransform(layerdict);
|
|
layerdict.anotherPointerTapped = false;
|
|
return;
|
|
}
|
|
|
|
// We haven't necessarily had a pointermove event since the interaction started, so make sure we update this now
|
|
var ptr = layerdict.pointerStates[e.pointerId];
|
|
ptr.distanceTravelled += Math.abs(e.offsetX - ptr.lastX) + Math.abs(e.offsetY - ptr.lastY);
|
|
|
|
if (e.button == 0 && ptr.distanceTravelled < 10 && Date.now() - ptr.downTime <= 500) {
|
|
if (Object.keys(layerdict.pointerStates).length == 1) {
|
|
if (layerdict.anotherPointerTapped) {
|
|
// This is the second pointer coming off of a two-finger tap
|
|
resetTransform(layerdict);
|
|
} else {
|
|
// This is just a regular tap
|
|
handleMouseClick(e, layerdict);
|
|
}
|
|
layerdict.anotherPointerTapped = false;
|
|
} else {
|
|
// This is the first finger coming off of what could become a two-finger tap
|
|
layerdict.anotherPointerTapped = true;
|
|
}
|
|
} else {
|
|
if (!settings.redrawOnDrag) {
|
|
redrawCanvas(layerdict);
|
|
}
|
|
layerdict.anotherPointerTapped = false;
|
|
}
|
|
|
|
delete layerdict.pointerStates[e.pointerId];
|
|
}
|
|
|
|
function handlePointerMove(e, layerdict) {
|
|
if (!layerdict.pointerStates.hasOwnProperty(e.pointerId)) {
|
|
return;
|
|
}
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
|
|
if (!e.hasOwnProperty("offsetX")) {
|
|
// The polyfill doesn't set this properly
|
|
e.offsetX = e.pageX - e.currentTarget.offsetLeft;
|
|
e.offsetY = e.pageY - e.currentTarget.offsetTop;
|
|
}
|
|
|
|
var thisPtr = layerdict.pointerStates[e.pointerId];
|
|
|
|
var dx = e.offsetX - thisPtr.lastX;
|
|
var dy = e.offsetY - thisPtr.lastY;
|
|
|
|
// If this number is low on pointer up, we count the action as a click
|
|
thisPtr.distanceTravelled += Math.abs(dx) + Math.abs(dy);
|
|
|
|
if (Object.keys(layerdict.pointerStates).length == 1) {
|
|
// This is a simple drag
|
|
layerdict.transform.panx += devicePixelRatio * dx / layerdict.transform.zoom;
|
|
layerdict.transform.pany += devicePixelRatio * dy / layerdict.transform.zoom;
|
|
} else if (Object.keys(layerdict.pointerStates).length == 2) {
|
|
var otherPtr = Object.values(layerdict.pointerStates).filter((ptr) => ptr != thisPtr)[0];
|
|
|
|
var oldDist = Math.sqrt(Math.pow(thisPtr.lastX - otherPtr.lastX, 2) + Math.pow(thisPtr.lastY - otherPtr.lastY, 2));
|
|
var newDist = Math.sqrt(Math.pow(e.offsetX - otherPtr.lastX, 2) + Math.pow(e.offsetY - otherPtr.lastY, 2));
|
|
|
|
var scaleFactor = newDist / oldDist;
|
|
|
|
if (scaleFactor != NaN) {
|
|
layerdict.transform.zoom *= scaleFactor;
|
|
|
|
var zoomd = (1 - scaleFactor) / layerdict.transform.zoom;
|
|
layerdict.transform.panx += devicePixelRatio * otherPtr.lastX * zoomd;
|
|
layerdict.transform.pany += devicePixelRatio * otherPtr.lastY * zoomd;
|
|
}
|
|
}
|
|
|
|
thisPtr.lastX = e.offsetX;
|
|
thisPtr.lastY = e.offsetY;
|
|
|
|
if (settings.redrawOnDrag) {
|
|
redrawCanvas(layerdict);
|
|
}
|
|
}
|
|
|
|
function handleMouseWheel(e, layerdict) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
var t = layerdict.transform;
|
|
var wheeldelta = e.deltaY;
|
|
if (e.deltaMode == 1) {
|
|
// FF only, scroll by lines
|
|
wheeldelta *= 30;
|
|
} else if (e.deltaMode == 2) {
|
|
wheeldelta *= 300;
|
|
}
|
|
var m = Math.pow(1.1, -wheeldelta / 40);
|
|
// Limit amount of zoom per tick.
|
|
if (m > 2) {
|
|
m = 2;
|
|
} else if (m < 0.5) {
|
|
m = 0.5;
|
|
}
|
|
t.zoom *= m;
|
|
var zoomd = (1 - m) / t.zoom;
|
|
t.panx += devicePixelRatio * e.offsetX * zoomd;
|
|
t.pany += devicePixelRatio * e.offsetY * zoomd;
|
|
redrawCanvas(layerdict);
|
|
}
|
|
|
|
function addMouseHandlers(div, layerdict) {
|
|
div.addEventListener("pointerdown", function(e) {
|
|
handlePointerDown(e, layerdict);
|
|
});
|
|
div.addEventListener("pointermove", function(e) {
|
|
handlePointerMove(e, layerdict);
|
|
});
|
|
div.addEventListener("pointerup", function(e) {
|
|
handlePointerUp(e, layerdict);
|
|
});
|
|
var pointerleave = function(e) {
|
|
handlePointerLeave(e, layerdict);
|
|
}
|
|
div.addEventListener("pointercancel", pointerleave);
|
|
div.addEventListener("pointerleave", pointerleave);
|
|
div.addEventListener("pointerout", pointerleave);
|
|
|
|
div.onwheel = function(e) {
|
|
handleMouseWheel(e, layerdict);
|
|
}
|
|
for (var element of [div, layerdict.bg, layerdict.fab, layerdict.silk, layerdict.highlight]) {
|
|
element.addEventListener("contextmenu", function(e) {
|
|
e.preventDefault();
|
|
}, false);
|
|
}
|
|
}
|
|
|
|
function setRedrawOnDrag(value) {
|
|
settings.redrawOnDrag = value;
|
|
writeStorage("redrawOnDrag", value);
|
|
}
|
|
|
|
function setBoardRotation(value) {
|
|
settings.boardRotation = value * 5;
|
|
writeStorage("boardRotation", settings.boardRotation);
|
|
document.getElementById("rotationDegree").textContent = settings.boardRotation;
|
|
resizeAll();
|
|
}
|
|
|
|
function setOffsetBackRotation(value) {
|
|
settings.offsetBackRotation = value;
|
|
writeStorage("offsetBackRotation", value);
|
|
resizeAll();
|
|
}
|
|
|
|
function initRender() {
|
|
allcanvas = {
|
|
front: {
|
|
transform: {
|
|
x: 0,
|
|
y: 0,
|
|
s: 1,
|
|
panx: 0,
|
|
pany: 0,
|
|
zoom: 1,
|
|
},
|
|
pointerStates: {},
|
|
anotherPointerTapped: false,
|
|
bg: document.getElementById("F_bg"),
|
|
fab: document.getElementById("F_fab"),
|
|
silk: document.getElementById("F_slk"),
|
|
highlight: document.getElementById("F_hl"),
|
|
layer: "F",
|
|
},
|
|
back: {
|
|
transform: {
|
|
x: 0,
|
|
y: 0,
|
|
s: 1,
|
|
panx: 0,
|
|
pany: 0,
|
|
zoom: 1,
|
|
},
|
|
pointerStates: {},
|
|
anotherPointerTapped: false,
|
|
bg: document.getElementById("B_bg"),
|
|
fab: document.getElementById("B_fab"),
|
|
silk: document.getElementById("B_slk"),
|
|
highlight: document.getElementById("B_hl"),
|
|
layer: "B",
|
|
}
|
|
};
|
|
addMouseHandlers(document.getElementById("frontcanvas"), allcanvas.front);
|
|
addMouseHandlers(document.getElementById("backcanvas"), allcanvas.back);
|
|
}
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
/*
|
|
* Table reordering via Drag'n'Drop
|
|
* Inspired by: https://htmldom.dev/drag-and-drop-table-column
|
|
*/
|
|
|
|
function setBomHandlers() {
|
|
|
|
const bom = document.getElementById('bomtable');
|
|
|
|
let dragName;
|
|
let placeHolderElements;
|
|
let draggingElement;
|
|
let forcePopulation;
|
|
let xOffset;
|
|
let yOffset;
|
|
let wasDragged;
|
|
|
|
const mouseUpHandler = function(e) {
|
|
// Delete dragging element
|
|
draggingElement.remove();
|
|
|
|
// Make BOM selectable again
|
|
bom.style.removeProperty("userSelect");
|
|
|
|
// Remove listeners
|
|
document.removeEventListener('mousemove', mouseMoveHandler);
|
|
document.removeEventListener('mouseup', mouseUpHandler);
|
|
|
|
if (wasDragged) {
|
|
// Redraw whole BOM
|
|
populateBomTable();
|
|
}
|
|
}
|
|
|
|
const mouseMoveHandler = function(e) {
|
|
// Notice the dragging
|
|
wasDragged = true;
|
|
|
|
// Make the dragged element visible
|
|
draggingElement.style.removeProperty("display");
|
|
|
|
// Set elements position to mouse position
|
|
draggingElement.style.left = `${e.screenX - xOffset}px`;
|
|
draggingElement.style.top = `${e.screenY - yOffset}px`;
|
|
|
|
// Forced redrawing of BOM table
|
|
if (forcePopulation) {
|
|
forcePopulation = false;
|
|
// Copy array
|
|
phe = Array.from(placeHolderElements);
|
|
// populate BOM table again
|
|
populateBomHeader(dragName, phe);
|
|
populateBomBody(dragName, phe);
|
|
}
|
|
|
|
// Set up array of hidden columns
|
|
var hiddenColumns = Array.from(settings.hiddenColumns);
|
|
// In the ungrouped mode, quantity don't exist
|
|
if (settings.bommode === "ungrouped")
|
|
hiddenColumns.push("Quantity");
|
|
// If no checkbox fields can be found, we consider them hidden
|
|
if (settings.checkboxes.length == 0)
|
|
hiddenColumns.push("checkboxes");
|
|
|
|
// Get table headers and group them into checkboxes, extrafields and normal headers
|
|
const bh = document.getElementById("bomhead");
|
|
headers = Array.from(bh.querySelectorAll("th"))
|
|
headers.shift() // numCol is not part of the columnOrder
|
|
headerGroups = []
|
|
lastCompoundClass = null;
|
|
for (i = 0; i < settings.columnOrder.length; i++) {
|
|
cElem = settings.columnOrder[i];
|
|
if (hiddenColumns.includes(cElem)) {
|
|
// Hidden columns appear as a dummy element
|
|
headerGroups.push([]);
|
|
continue;
|
|
}
|
|
elem = headers.filter(e => getColumnOrderName(e) === cElem)[0];
|
|
if (elem.classList.contains("bom-checkbox")) {
|
|
if (lastCompoundClass === "bom-checkbox") {
|
|
cbGroup = headerGroups.pop();
|
|
cbGroup.push(elem);
|
|
headerGroups.push(cbGroup);
|
|
} else {
|
|
lastCompoundClass = "bom-checkbox";
|
|
headerGroups.push([elem])
|
|
}
|
|
} else {
|
|
headerGroups.push([elem])
|
|
}
|
|
}
|
|
|
|
// Copy settings.columnOrder
|
|
var columns = Array.from(settings.columnOrder)
|
|
|
|
// Set up array with indices of hidden columns
|
|
var hiddenIndices = hiddenColumns.map(e => settings.columnOrder.indexOf(e));
|
|
var dragIndex = columns.indexOf(dragName);
|
|
var swapIndex = dragIndex;
|
|
var swapDone = false;
|
|
|
|
// Check if the current dragged element is swapable with the left or right element
|
|
if (dragIndex > 0) {
|
|
// Get left headers boundingbox
|
|
swapIndex = dragIndex - 1;
|
|
while (hiddenIndices.includes(swapIndex) && swapIndex > 0)
|
|
swapIndex--;
|
|
if (!hiddenIndices.includes(swapIndex)) {
|
|
box = getBoundingClientRectFromMultiple(headerGroups[swapIndex]);
|
|
if (e.clientX < box.left + window.scrollX + (box.width / 2)) {
|
|
swapElement = columns[dragIndex];
|
|
columns.splice(dragIndex, 1);
|
|
columns.splice(swapIndex, 0, swapElement);
|
|
forcePopulation = true;
|
|
swapDone = true;
|
|
}
|
|
}
|
|
}
|
|
if ((!swapDone) && dragIndex < headerGroups.length - 1) {
|
|
// Get right headers boundingbox
|
|
swapIndex = dragIndex + 1;
|
|
while (hiddenIndices.includes(swapIndex))
|
|
swapIndex++;
|
|
if (swapIndex < headerGroups.length) {
|
|
box = getBoundingClientRectFromMultiple(headerGroups[swapIndex]);
|
|
if (e.clientX > box.left + window.scrollX + (box.width / 2)) {
|
|
swapElement = columns[dragIndex];
|
|
columns.splice(dragIndex, 1);
|
|
columns.splice(swapIndex, 0, swapElement);
|
|
forcePopulation = true;
|
|
swapDone = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Write back change to storage
|
|
if (swapDone) {
|
|
settings.columnOrder = columns
|
|
writeStorage("columnOrder", JSON.stringify(columns));
|
|
}
|
|
|
|
}
|
|
|
|
const mouseDownHandler = function(e) {
|
|
var target = e.target;
|
|
if (target.tagName.toLowerCase() != "td")
|
|
target = target.parentElement;
|
|
|
|
// Used to check if a dragging has ever happened
|
|
wasDragged = false;
|
|
|
|
// Create new element which will be displayed as the dragged column
|
|
draggingElement = document.createElement("div")
|
|
draggingElement.classList.add("dragging");
|
|
draggingElement.style.display = "none";
|
|
draggingElement.style.position = "absolute";
|
|
draggingElement.style.overflow = "hidden";
|
|
|
|
// Get bomhead and bombody elements
|
|
const bh = document.getElementById("bomhead");
|
|
const bb = document.getElementById("bombody");
|
|
|
|
// Get all compound headers for the current column
|
|
var compoundHeaders;
|
|
if (target.classList.contains("bom-checkbox")) {
|
|
compoundHeaders = Array.from(bh.querySelectorAll("th.bom-checkbox"));
|
|
} else {
|
|
compoundHeaders = [target];
|
|
}
|
|
|
|
// Create new table which will display the column
|
|
var newTable = document.createElement("table");
|
|
newTable.classList.add("bom");
|
|
newTable.style.background = "white";
|
|
draggingElement.append(newTable);
|
|
|
|
// Create new header element
|
|
var newHeader = document.createElement("thead");
|
|
newTable.append(newHeader);
|
|
|
|
// Set up array for storing all placeholder elements
|
|
placeHolderElements = [];
|
|
|
|
// Add all compound headers to the new thead element and placeholders
|
|
compoundHeaders.forEach(function(h) {
|
|
clone = cloneElementWithDimensions(h);
|
|
newHeader.append(clone);
|
|
placeHolderElements.push(clone);
|
|
});
|
|
|
|
// Create new body element
|
|
var newBody = document.createElement("tbody");
|
|
newTable.append(newBody);
|
|
|
|
// Get indices for compound headers
|
|
var idxs = compoundHeaders.map(e => getBomTableHeaderIndex(e));
|
|
|
|
// For each row in the BOM body...
|
|
var rows = bb.querySelectorAll("tr");
|
|
rows.forEach(function(row) {
|
|
// ..get the cells for the compound column
|
|
const tds = row.querySelectorAll("td");
|
|
var copytds = idxs.map(i => tds[i]);
|
|
// Add them to the new element and the placeholders
|
|
var newRow = document.createElement("tr");
|
|
copytds.forEach(function(td) {
|
|
clone = cloneElementWithDimensions(td);
|
|
newRow.append(clone);
|
|
placeHolderElements.push(clone);
|
|
});
|
|
newBody.append(newRow);
|
|
});
|
|
|
|
// Compute width for compound header
|
|
var width = compoundHeaders.reduce((acc, x) => acc + x.clientWidth, 0);
|
|
draggingElement.style.width = `${width}px`;
|
|
|
|
// Insert the new dragging element and disable selection on BOM
|
|
bom.insertBefore(draggingElement, null);
|
|
bom.style.userSelect = "none";
|
|
|
|
// Determine the mouse position offset
|
|
xOffset = e.screenX - compoundHeaders.reduce((acc, x) => Math.min(acc, x.offsetLeft), compoundHeaders[0].offsetLeft);
|
|
yOffset = e.screenY - compoundHeaders[0].offsetTop;
|
|
|
|
// Get name for the column in settings.columnOrder
|
|
dragName = getColumnOrderName(target);
|
|
|
|
// Change text and class for placeholder elements
|
|
placeHolderElements = placeHolderElements.map(function(e) {
|
|
newElem = cloneElementWithDimensions(e);
|
|
newElem.textContent = "";
|
|
newElem.classList.add("placeholder");
|
|
return newElem;
|
|
});
|
|
|
|
// On next mouse move, the whole BOM needs to be redrawn to show the placeholders
|
|
forcePopulation = true;
|
|
|
|
// Add listeners for move and up on mouse
|
|
document.addEventListener('mousemove', mouseMoveHandler);
|
|
document.addEventListener('mouseup', mouseUpHandler);
|
|
}
|
|
|
|
// In netlist mode, there is nothing to reorder
|
|
if (settings.bommode === "netlist")
|
|
return;
|
|
|
|
// Add mouseDownHandler to every column except the numCol
|
|
bom.querySelectorAll("th")
|
|
.forEach(function(head) {
|
|
if (!head.classList.contains("numCol")) {
|
|
head.onmousedown = mouseDownHandler;
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
function getBoundingClientRectFromMultiple(elements) {
|
|
var elems = Array.from(elements);
|
|
|
|
if (elems.length == 0)
|
|
return null;
|
|
|
|
var box = elems.shift()
|
|
.getBoundingClientRect();
|
|
|
|
elems.forEach(function(elem) {
|
|
var elembox = elem.getBoundingClientRect();
|
|
box.left = Math.min(elembox.left, box.left);
|
|
box.top = Math.min(elembox.top, box.top);
|
|
box.width += elembox.width;
|
|
box.height = Math.max(elembox.height, box.height);
|
|
});
|
|
|
|
return box;
|
|
}
|
|
|
|
function cloneElementWithDimensions(elem) {
|
|
var newElem = elem.cloneNode(true);
|
|
newElem.style.height = window.getComputedStyle(elem).height;
|
|
newElem.style.width = window.getComputedStyle(elem).width;
|
|
return newElem;
|
|
}
|
|
|
|
function getBomTableHeaderIndex(elem) {
|
|
const bh = document.getElementById('bomhead');
|
|
const ths = Array.from(bh.querySelectorAll("th"));
|
|
return ths.indexOf(elem);
|
|
}
|
|
|
|
function getColumnOrderName(elem) {
|
|
var cname = elem.getAttribute("col_name");
|
|
if (cname === "bom-checkbox")
|
|
return "checkboxes";
|
|
else
|
|
return cname;
|
|
}
|
|
|
|
function resizableGrid(tablehead) {
|
|
var cols = tablehead.firstElementChild.children;
|
|
var rowWidth = tablehead.offsetWidth;
|
|
|
|
for (var i = 1; i < cols.length; i++) {
|
|
if (cols[i].classList.contains("bom-checkbox"))
|
|
continue;
|
|
cols[i].style.width = ((cols[i].clientWidth - paddingDiff(cols[i])) * 100 / rowWidth) + '%';
|
|
}
|
|
|
|
for (var i = 1; i < cols.length - 1; i++) {
|
|
var div = document.createElement('div');
|
|
div.className = "column-width-handle";
|
|
cols[i].appendChild(div);
|
|
setListeners(div);
|
|
}
|
|
|
|
function setListeners(div) {
|
|
var startX, curCol, nxtCol, curColWidth, nxtColWidth, rowWidth;
|
|
|
|
div.addEventListener('mousedown', function(e) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
|
|
curCol = e.target.parentElement;
|
|
nxtCol = curCol.nextElementSibling;
|
|
startX = e.pageX;
|
|
|
|
var padding = paddingDiff(curCol);
|
|
|
|
rowWidth = curCol.parentElement.offsetWidth;
|
|
curColWidth = curCol.clientWidth - padding;
|
|
nxtColWidth = nxtCol.clientWidth - padding;
|
|
});
|
|
|
|
document.addEventListener('mousemove', function(e) {
|
|
if (startX) {
|
|
var diffX = e.pageX - startX;
|
|
diffX = -Math.min(-diffX, curColWidth - 20);
|
|
diffX = Math.min(diffX, nxtColWidth - 20);
|
|
|
|
curCol.style.width = ((curColWidth + diffX) * 100 / rowWidth) + '%';
|
|
nxtCol.style.width = ((nxtColWidth - diffX) * 100 / rowWidth) + '%';
|
|
console.log(`${curColWidth + nxtColWidth} ${(curColWidth + diffX) * 100 / rowWidth + (nxtColWidth - diffX) * 100 / rowWidth}`);
|
|
}
|
|
});
|
|
|
|
document.addEventListener('mouseup', function(e) {
|
|
curCol = undefined;
|
|
nxtCol = undefined;
|
|
startX = undefined;
|
|
nxtColWidth = undefined;
|
|
curColWidth = undefined
|
|
});
|
|
}
|
|
|
|
function paddingDiff(col) {
|
|
|
|
if (getStyleVal(col, 'box-sizing') == 'border-box') {
|
|
return 0;
|
|
}
|
|
|
|
var padLeft = getStyleVal(col, 'padding-left');
|
|
var padRight = getStyleVal(col, 'padding-right');
|
|
return (parseInt(padLeft) + parseInt(padRight));
|
|
|
|
}
|
|
|
|
function getStyleVal(elm, css) {
|
|
return (window.getComputedStyle(elm, null).getPropertyValue(css))
|
|
}
|
|
}
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
/* DOM manipulation and misc code */
|
|
|
|
var bomsplit;
|
|
var canvassplit;
|
|
var initDone = false;
|
|
var bomSortFunction = null;
|
|
var currentSortColumn = null;
|
|
var currentSortOrder = null;
|
|
var currentHighlightedRowId;
|
|
var highlightHandlers = [];
|
|
var footprintIndexToHandler = {};
|
|
var netsToHandler = {};
|
|
var markedFootprints = new Set();
|
|
var highlightedFootprints = [];
|
|
var highlightedNet = null;
|
|
var lastClicked;
|
|
|
|
function dbg(html) {
|
|
dbgdiv.innerHTML = html;
|
|
}
|
|
|
|
function redrawIfInitDone() {
|
|
if (initDone) {
|
|
redrawCanvas(allcanvas.front);
|
|
redrawCanvas(allcanvas.back);
|
|
}
|
|
}
|
|
|
|
function padsVisible(value) {
|
|
writeStorage("padsVisible", value);
|
|
settings.renderPads = value;
|
|
redrawIfInitDone();
|
|
}
|
|
|
|
function referencesVisible(value) {
|
|
writeStorage("referencesVisible", value);
|
|
settings.renderReferences = value;
|
|
redrawIfInitDone();
|
|
}
|
|
|
|
function valuesVisible(value) {
|
|
writeStorage("valuesVisible", value);
|
|
settings.renderValues = value;
|
|
redrawIfInitDone();
|
|
}
|
|
|
|
function tracksVisible(value) {
|
|
writeStorage("tracksVisible", value);
|
|
settings.renderTracks = value;
|
|
redrawIfInitDone();
|
|
}
|
|
|
|
function zonesVisible(value) {
|
|
writeStorage("zonesVisible", value);
|
|
settings.renderZones = value;
|
|
redrawIfInitDone();
|
|
}
|
|
|
|
function dnpOutline(value) {
|
|
writeStorage("dnpOutline", value);
|
|
settings.renderDnpOutline = value;
|
|
redrawIfInitDone();
|
|
}
|
|
|
|
function setDarkMode(value) {
|
|
if (value) {
|
|
topmostdiv.classList.add("dark");
|
|
} else {
|
|
topmostdiv.classList.remove("dark");
|
|
}
|
|
writeStorage("darkmode", value);
|
|
settings.darkMode = value;
|
|
redrawIfInitDone();
|
|
if (initDone) {
|
|
populateBomTable();
|
|
}
|
|
}
|
|
|
|
function setShowBOMColumn(field, value) {
|
|
if (field === "references") {
|
|
var rl = document.getElementById("reflookup");
|
|
rl.disabled = !value;
|
|
if (!value) {
|
|
rl.value = "";
|
|
updateRefLookup("");
|
|
}
|
|
}
|
|
|
|
var n = settings.hiddenColumns.indexOf(field);
|
|
if (value) {
|
|
if (n != -1) {
|
|
settings.hiddenColumns.splice(n, 1);
|
|
}
|
|
} else {
|
|
if (n == -1) {
|
|
settings.hiddenColumns.push(field);
|
|
}
|
|
}
|
|
|
|
writeStorage("hiddenColumns", JSON.stringify(settings.hiddenColumns));
|
|
|
|
if (initDone) {
|
|
populateBomTable();
|
|
}
|
|
|
|
redrawIfInitDone();
|
|
}
|
|
|
|
|
|
function setFullscreen(value) {
|
|
if (value) {
|
|
document.documentElement.requestFullscreen();
|
|
} else {
|
|
document.exitFullscreen();
|
|
}
|
|
}
|
|
|
|
function fabricationVisible(value) {
|
|
writeStorage("fabricationVisible", value);
|
|
settings.renderFabrication = value;
|
|
redrawIfInitDone();
|
|
}
|
|
|
|
function silkscreenVisible(value) {
|
|
writeStorage("silkscreenVisible", value);
|
|
settings.renderSilkscreen = value;
|
|
redrawIfInitDone();
|
|
}
|
|
|
|
function setHighlightPin1(value) {
|
|
writeStorage("highlightpin1", value);
|
|
settings.highlightpin1 = value;
|
|
redrawIfInitDone();
|
|
}
|
|
|
|
function 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 updateNetColors() {
|
|
writeStorage("netColors", JSON.stringify(settings.netColors));
|
|
redrawIfInitDone();
|
|
}
|
|
|
|
function netColorChangeHandler(net) {
|
|
return (event) => {
|
|
settings.netColors[net] = event.target.value;
|
|
updateNetColors();
|
|
}
|
|
}
|
|
|
|
function netColorRightClick(net) {
|
|
return (event) => {
|
|
if(event.button == 2) {
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
|
|
var style = getComputedStyle(topmostdiv);
|
|
var defaultNetColor = style.getPropertyValue('--track-color').trim();
|
|
event.target.value = defaultNetColor;
|
|
delete settings.netColors[net];
|
|
updateNetColors();
|
|
}
|
|
}
|
|
}
|
|
|
|
function entryMatches(entry) {
|
|
if (settings.bommode == "netlist") {
|
|
// entry is just a net name
|
|
return entry.toLowerCase().indexOf(filter) >= 0;
|
|
}
|
|
// check refs
|
|
if (!settings.hiddenColumns.includes("references")) {
|
|
for (var ref of entry) {
|
|
if (ref[0].toLowerCase().indexOf(filter) >= 0) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
// check fields
|
|
for (var i in config.fields) {
|
|
var f = config.fields[i];
|
|
if (!settings.hiddenColumns.includes(f)) {
|
|
for (var ref of entry) {
|
|
if (String(pcbdata.bom.fields[ref[1]][i]).toLowerCase().indexOf(filter) >= 0) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function findRefInEntry(entry) {
|
|
return entry.filter(r => r[0].toLowerCase() == reflookup);
|
|
}
|
|
|
|
function highlightFilter(s) {
|
|
if (!filter) {
|
|
return s;
|
|
}
|
|
var parts = s.toLowerCase().split(filter);
|
|
if (parts.length == 1) {
|
|
return s;
|
|
}
|
|
var r = "";
|
|
var pos = 0;
|
|
for (var i in parts) {
|
|
if (i > 0) {
|
|
r += '<mark class="highlight">' +
|
|
s.substring(pos, pos + filter.length) +
|
|
'</mark>';
|
|
pos += filter.length;
|
|
}
|
|
r += s.substring(pos, pos + parts[i].length);
|
|
pos += parts[i].length;
|
|
}
|
|
return r;
|
|
}
|
|
|
|
function checkboxSetUnsetAllHandler(checkboxname) {
|
|
return function () {
|
|
var checkboxnum = 0;
|
|
while (checkboxnum < settings.checkboxes.length &&
|
|
settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
|
|
checkboxnum++;
|
|
}
|
|
if (checkboxnum >= settings.checkboxes.length) {
|
|
return;
|
|
}
|
|
var allset = true;
|
|
var checkbox;
|
|
var row;
|
|
for (row of bombody.childNodes) {
|
|
checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
|
|
if (!checkbox.checked || checkbox.indeterminate) {
|
|
allset = false;
|
|
break;
|
|
}
|
|
}
|
|
for (row of bombody.childNodes) {
|
|
checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
|
|
checkbox.checked = !allset;
|
|
checkbox.indeterminate = false;
|
|
checkbox.onchange();
|
|
}
|
|
}
|
|
}
|
|
|
|
function createColumnHeader(name, cls, comparator, is_checkbox = false) {
|
|
var th = document.createElement("TH");
|
|
th.innerHTML = name;
|
|
th.classList.add(cls);
|
|
if (is_checkbox)
|
|
th.setAttribute("col_name", "bom-checkbox");
|
|
else
|
|
th.setAttribute("col_name", name);
|
|
var span = document.createElement("SPAN");
|
|
span.classList.add("sortmark");
|
|
span.classList.add("none");
|
|
th.appendChild(span);
|
|
var spacer = document.createElement("div");
|
|
spacer.className = "column-spacer";
|
|
th.appendChild(spacer);
|
|
spacer.onclick = function () {
|
|
if (currentSortColumn && th !== currentSortColumn) {
|
|
// Currently sorted by another column
|
|
currentSortColumn.childNodes[1].classList.remove(currentSortOrder);
|
|
currentSortColumn.childNodes[1].classList.add("none");
|
|
currentSortColumn = null;
|
|
currentSortOrder = null;
|
|
}
|
|
if (currentSortColumn && th === currentSortColumn) {
|
|
// Already sorted by this column
|
|
if (currentSortOrder == "asc") {
|
|
// Sort by this column, descending order
|
|
bomSortFunction = function (a, b) {
|
|
return -comparator(a, b);
|
|
}
|
|
currentSortColumn.childNodes[1].classList.remove("asc");
|
|
currentSortColumn.childNodes[1].classList.add("desc");
|
|
currentSortOrder = "desc";
|
|
} else {
|
|
// Unsort
|
|
bomSortFunction = null;
|
|
currentSortColumn.childNodes[1].classList.remove("desc");
|
|
currentSortColumn.childNodes[1].classList.add("none");
|
|
currentSortColumn = null;
|
|
currentSortOrder = null;
|
|
}
|
|
} else {
|
|
// Sort by this column, ascending order
|
|
bomSortFunction = comparator;
|
|
currentSortColumn = th;
|
|
currentSortColumn.childNodes[1].classList.remove("none");
|
|
currentSortColumn.childNodes[1].classList.add("asc");
|
|
currentSortOrder = "asc";
|
|
}
|
|
populateBomBody();
|
|
}
|
|
if (is_checkbox) {
|
|
spacer.onclick = fancyDblClickHandler(
|
|
spacer, spacer.onclick, checkboxSetUnsetAllHandler(name));
|
|
}
|
|
return th;
|
|
}
|
|
|
|
function populateBomHeader(placeHolderColumn = null, placeHolderElements = null) {
|
|
while (bomhead.firstChild) {
|
|
bomhead.removeChild(bomhead.firstChild);
|
|
}
|
|
var tr = document.createElement("TR");
|
|
var th = document.createElement("TH");
|
|
th.classList.add("numCol");
|
|
|
|
var vismenu = document.createElement("div");
|
|
vismenu.id = "vismenu";
|
|
vismenu.classList.add("menu");
|
|
|
|
var visbutton = document.createElement("div");
|
|
visbutton.classList.add("visbtn");
|
|
visbutton.classList.add("hideonprint");
|
|
|
|
var viscontent = document.createElement("div");
|
|
viscontent.classList.add("menu-content");
|
|
viscontent.id = "vismenu-content";
|
|
|
|
settings.columnOrder.forEach(column => {
|
|
if (typeof column !== "string")
|
|
return;
|
|
|
|
// Skip empty columns
|
|
if (column === "checkboxes" && settings.checkboxes.length == 0)
|
|
return;
|
|
else if (column === "Quantity" && settings.bommode == "ungrouped")
|
|
return;
|
|
|
|
var label = document.createElement("label");
|
|
label.classList.add("menu-label");
|
|
|
|
var input = document.createElement("input");
|
|
input.classList.add("visibility_checkbox");
|
|
input.type = "checkbox";
|
|
input.onchange = function (e) {
|
|
setShowBOMColumn(column, e.target.checked)
|
|
};
|
|
input.checked = !(settings.hiddenColumns.includes(column));
|
|
|
|
label.appendChild(input);
|
|
if (column.length > 0)
|
|
label.append(column[0].toUpperCase() + column.slice(1));
|
|
|
|
viscontent.appendChild(label);
|
|
});
|
|
|
|
viscontent.childNodes[0].classList.add("menu-label-top");
|
|
|
|
vismenu.appendChild(visbutton);
|
|
if (settings.bommode != "netlist") {
|
|
vismenu.appendChild(viscontent);
|
|
th.appendChild(vismenu);
|
|
}
|
|
tr.appendChild(th);
|
|
|
|
var checkboxCompareClosure = function (checkbox) {
|
|
return (a, b) => {
|
|
var stateA = getCheckboxState(checkbox, a);
|
|
var stateB = getCheckboxState(checkbox, b);
|
|
if (stateA > stateB) return -1;
|
|
if (stateA < stateB) return 1;
|
|
return 0;
|
|
}
|
|
}
|
|
var stringFieldCompareClosure = function (fieldIndex) {
|
|
return (a, b) => {
|
|
var fa = pcbdata.bom.fields[a[0][1]][fieldIndex];
|
|
var fb = pcbdata.bom.fields[b[0][1]][fieldIndex];
|
|
if (fa != fb) return fa > fb ? 1 : -1;
|
|
else return 0;
|
|
}
|
|
}
|
|
var referenceRegex = /(?<prefix>[^0-9]+)(?<number>[0-9]+)/;
|
|
var compareRefs = (a, b) => {
|
|
var ra = referenceRegex.exec(a);
|
|
var rb = referenceRegex.exec(b);
|
|
if (ra === null || rb === null) {
|
|
if (a != b) return a > b ? 1 : -1;
|
|
return 0;
|
|
} else {
|
|
if (ra.groups.prefix != rb.groups.prefix) {
|
|
return ra.groups.prefix > rb.groups.prefix ? 1 : -1;
|
|
}
|
|
if (ra.groups.number != rb.groups.number) {
|
|
return parseInt(ra.groups.number) > parseInt(rb.groups.number) ? 1 : -1;
|
|
}
|
|
return 0;
|
|
}
|
|
}
|
|
if (settings.bommode == "netlist") {
|
|
tr.appendChild(createColumnHeader("Net name", "bom-netname", (a, b) => {
|
|
if (a > b) return -1;
|
|
if (a < b) return 1;
|
|
return 0;
|
|
}));
|
|
tr.appendChild(createColumnHeader("Color", "bom-color", (a, b) => {
|
|
return 0;
|
|
}));
|
|
} else {
|
|
// Filter hidden columns
|
|
var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
|
|
var valueIndex = config.fields.indexOf("Value");
|
|
var footprintIndex = config.fields.indexOf("Footprint");
|
|
columns.forEach((column) => {
|
|
if (column === placeHolderColumn) {
|
|
var n = 1;
|
|
if (column === "checkboxes")
|
|
n = settings.checkboxes.length;
|
|
for (i = 0; i < n; i++) {
|
|
td = placeHolderElements.shift();
|
|
tr.appendChild(td);
|
|
}
|
|
return;
|
|
} else if (column === "checkboxes") {
|
|
for (var checkbox of settings.checkboxes) {
|
|
th = createColumnHeader(
|
|
checkbox, "bom-checkbox", checkboxCompareClosure(checkbox), true);
|
|
tr.appendChild(th);
|
|
}
|
|
} else if (column === "References") {
|
|
tr.appendChild(createColumnHeader("References", "references", (a, b) => {
|
|
var i = 0;
|
|
while (i < a.length && i < b.length) {
|
|
if (a[i] != 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) {
|
|
const urlRegex = /^(https?:\/\/[^\s\/$.?#][^\s]*|file:\/\/([a-zA-Z]:|\/)[^\x00]+)$/;
|
|
while (bom.firstChild) {
|
|
bom.removeChild(bom.firstChild);
|
|
}
|
|
highlightHandlers = [];
|
|
footprintIndexToHandler = {};
|
|
netsToHandler = {};
|
|
currentHighlightedRowId = null;
|
|
var first = true;
|
|
var style = getComputedStyle(topmostdiv);
|
|
var defaultNetColor = style.getPropertyValue('--track-color').trim();
|
|
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 : "<no net>");
|
|
tr.appendChild(td);
|
|
var color = settings.netColors[netname] || defaultNetColor;
|
|
td = document.createElement("TD");
|
|
var colorBox = document.createElement("INPUT");
|
|
colorBox.type = "color";
|
|
colorBox.value = color;
|
|
colorBox.onchange = netColorChangeHandler(netname);
|
|
colorBox.onmouseup = netColorRightClick(netname);
|
|
colorBox.oncontextmenu = (e) => e.preventDefault();
|
|
td.appendChild(colorBox);
|
|
td.classList.add("color-column");
|
|
tr.appendChild(td);
|
|
} else {
|
|
if (reflookup) {
|
|
references = findRefInEntry(bomentry);
|
|
if (references.length == 0) {
|
|
continue;
|
|
}
|
|
} else {
|
|
references = bomentry;
|
|
}
|
|
// Filter hidden columns
|
|
var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
|
|
columns.forEach((column) => {
|
|
if (column === placeholderColumn) {
|
|
var n = 1;
|
|
if (column === "checkboxes")
|
|
n = settings.checkboxes.length;
|
|
for (i = 0; i < n; i++) {
|
|
td = placeHolderElements.shift();
|
|
tr.appendChild(td);
|
|
}
|
|
return;
|
|
} else if (column === "checkboxes") {
|
|
for (var checkbox of settings.checkboxes) {
|
|
if (checkbox) {
|
|
td = document.createElement("TD");
|
|
var input = document.createElement("input");
|
|
input.type = "checkbox";
|
|
input.onchange = 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");
|
|
var output = new Array();
|
|
for (let item of valueSet) {
|
|
const visible = highlightFilter(String(item));
|
|
if (typeof item === 'string' && item.match(urlRegex)) {
|
|
output.push(`<a href="${item}" target="_blank">${visible}</a>`);
|
|
} else {
|
|
output.push(visible);
|
|
}
|
|
}
|
|
td.innerHTML = output.join(", ");
|
|
tr.appendChild(td);
|
|
}
|
|
});
|
|
}
|
|
bom.appendChild(tr);
|
|
var handler = createRowHighlightHandler(tr.id, references, netname);
|
|
tr.onmousemove = handler;
|
|
highlightHandlers.push({
|
|
id: tr.id,
|
|
handler: handler,
|
|
});
|
|
if (references !== null) {
|
|
for (var refIndex of references.map(r => r[1])) {
|
|
footprintIndexToHandler[refIndex] = handler;
|
|
}
|
|
}
|
|
if (netname !== null) {
|
|
netsToHandler[netname] = handler;
|
|
}
|
|
if ((filter || reflookup) && first) {
|
|
handler();
|
|
first = false;
|
|
}
|
|
}
|
|
EventHandler.emitEvent(
|
|
IBOM_EVENT_TYPES.BOM_BODY_CHANGE_EVENT, {
|
|
filter: filter,
|
|
reflookup: reflookup,
|
|
checkboxes: settings.checkboxes,
|
|
bommode: settings.bommode,
|
|
});
|
|
}
|
|
|
|
function highlightPreviousRow() {
|
|
if (!currentHighlightedRowId) {
|
|
highlightHandlers[highlightHandlers.length - 1].handler();
|
|
} else {
|
|
if (highlightHandlers.length > 1 &&
|
|
highlightHandlers[0].id == currentHighlightedRowId) {
|
|
highlightHandlers[highlightHandlers.length - 1].handler();
|
|
} else {
|
|
for (var i = 0; i < highlightHandlers.length - 1; i++) {
|
|
if (highlightHandlers[i + 1].id == currentHighlightedRowId) {
|
|
highlightHandlers[i].handler();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
smoothScrollToRow(currentHighlightedRowId);
|
|
}
|
|
|
|
function highlightNextRow() {
|
|
if (!currentHighlightedRowId) {
|
|
highlightHandlers[0].handler();
|
|
} else {
|
|
if (highlightHandlers.length > 1 &&
|
|
highlightHandlers[highlightHandlers.length - 1].id == currentHighlightedRowId) {
|
|
highlightHandlers[0].handler();
|
|
} else {
|
|
for (var i = 1; i < highlightHandlers.length; i++) {
|
|
if (highlightHandlers[i - 1].id == currentHighlightedRowId) {
|
|
highlightHandlers[i].handler();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
smoothScrollToRow(currentHighlightedRowId);
|
|
}
|
|
|
|
function populateBomTable() {
|
|
populateBomHeader();
|
|
populateBomBody();
|
|
setBomHandlers();
|
|
resizableGrid(bomhead);
|
|
}
|
|
|
|
function footprintsClicked(footprintIndexes) {
|
|
var lastClickedIndex = footprintIndexes.indexOf(lastClicked);
|
|
for (var i = 1; i <= footprintIndexes.length; i++) {
|
|
var refIndex = footprintIndexes[(lastClickedIndex + i) % footprintIndexes.length];
|
|
if (refIndex in footprintIndexToHandler) {
|
|
lastClicked = refIndex;
|
|
footprintIndexToHandler[refIndex]();
|
|
smoothScrollToRow(currentHighlightedRowId);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
function netClicked(net) {
|
|
if (net in netsToHandler) {
|
|
netsToHandler[net]();
|
|
smoothScrollToRow(currentHighlightedRowId);
|
|
} else {
|
|
clearHighlightedFootprints();
|
|
highlightedNet = net;
|
|
drawHighlights();
|
|
}
|
|
}
|
|
|
|
function updateFilter(input) {
|
|
filter = input.toLowerCase();
|
|
populateBomTable();
|
|
}
|
|
|
|
function updateRefLookup(input) {
|
|
reflookup = input.toLowerCase();
|
|
populateBomTable();
|
|
}
|
|
|
|
function changeCanvasLayout(layout) {
|
|
document.getElementById("fl-btn").classList.remove("depressed");
|
|
document.getElementById("fb-btn").classList.remove("depressed");
|
|
document.getElementById("bl-btn").classList.remove("depressed");
|
|
switch (layout) {
|
|
case 'F':
|
|
document.getElementById("fl-btn").classList.add("depressed");
|
|
if (settings.bomlayout != "bom-only") {
|
|
canvassplit.collapse(1);
|
|
}
|
|
break;
|
|
case 'B':
|
|
document.getElementById("bl-btn").classList.add("depressed");
|
|
if (settings.bomlayout != "bom-only") {
|
|
canvassplit.collapse(0);
|
|
}
|
|
break;
|
|
default:
|
|
document.getElementById("fb-btn").classList.add("depressed");
|
|
if (settings.bomlayout != "bom-only") {
|
|
canvassplit.setSizes([50, 50]);
|
|
}
|
|
}
|
|
settings.canvaslayout = layout;
|
|
writeStorage("canvaslayout", layout);
|
|
resizeAll();
|
|
changeBomMode(settings.bommode);
|
|
}
|
|
|
|
function populateMetadata() {
|
|
document.getElementById("title").innerHTML = pcbdata.metadata.title;
|
|
document.getElementById("revision").innerHTML = "Rev: " + pcbdata.metadata.revision;
|
|
document.getElementById("company").innerHTML = pcbdata.metadata.company;
|
|
document.getElementById("filedate").innerHTML = pcbdata.metadata.date;
|
|
if (pcbdata.metadata.title != "") {
|
|
document.title = pcbdata.metadata.title + " BOM";
|
|
}
|
|
// Calculate board stats
|
|
var fp_f = 0,
|
|
fp_b = 0,
|
|
pads_f = 0,
|
|
pads_b = 0,
|
|
pads_th = 0;
|
|
for (var i = 0; i < pcbdata.footprints.length; i++) {
|
|
if (pcbdata.bom.skipped.includes(i)) continue;
|
|
var mod = pcbdata.footprints[i];
|
|
if (mod.layer == "F") {
|
|
fp_f++;
|
|
} else {
|
|
fp_b++;
|
|
}
|
|
for (var pad of mod.pads) {
|
|
if (pad.type == "th") {
|
|
pads_th++;
|
|
} else {
|
|
if (pad.layers.includes("F")) {
|
|
pads_f++;
|
|
}
|
|
if (pad.layers.includes("B")) {
|
|
pads_b++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
document.getElementById("stats-components-front").innerHTML = fp_f;
|
|
document.getElementById("stats-components-back").innerHTML = fp_b;
|
|
document.getElementById("stats-components-total").innerHTML = fp_f + fp_b;
|
|
document.getElementById("stats-groups-front").innerHTML = pcbdata.bom.F.length;
|
|
document.getElementById("stats-groups-back").innerHTML = pcbdata.bom.B.length;
|
|
document.getElementById("stats-groups-total").innerHTML = pcbdata.bom.both.length;
|
|
document.getElementById("stats-smd-pads-front").innerHTML = pads_f;
|
|
document.getElementById("stats-smd-pads-back").innerHTML = pads_b;
|
|
document.getElementById("stats-smd-pads-total").innerHTML = pads_f + pads_b;
|
|
document.getElementById("stats-th-pads").innerHTML = pads_th;
|
|
// Update version string
|
|
document.getElementById("github-link").innerHTML = "InteractiveHtmlBom " +
|
|
/^v\d+\.\d+/.exec(pcbdata.ibom_version)[0];
|
|
}
|
|
|
|
function changeBomLayout(layout) {
|
|
document.getElementById("bom-btn").classList.remove("depressed");
|
|
document.getElementById("lr-btn").classList.remove("depressed");
|
|
document.getElementById("tb-btn").classList.remove("depressed");
|
|
switch (layout) {
|
|
case 'bom-only':
|
|
document.getElementById("bom-btn").classList.add("depressed");
|
|
if (bomsplit) {
|
|
bomsplit.destroy();
|
|
bomsplit = null;
|
|
canvassplit.destroy();
|
|
canvassplit = null;
|
|
}
|
|
document.getElementById("frontcanvas").style.display = "none";
|
|
document.getElementById("backcanvas").style.display = "none";
|
|
document.getElementById("topmostdiv").style.height = "";
|
|
document.getElementById("topmostdiv").style.display = "block";
|
|
break;
|
|
case 'top-bottom':
|
|
document.getElementById("tb-btn").classList.add("depressed");
|
|
document.getElementById("frontcanvas").style.display = "";
|
|
document.getElementById("backcanvas").style.display = "";
|
|
document.getElementById("topmostdiv").style.height = "100%";
|
|
document.getElementById("topmostdiv").style.display = "flex";
|
|
document.getElementById("bomdiv").classList.remove("split-horizontal");
|
|
document.getElementById("canvasdiv").classList.remove("split-horizontal");
|
|
document.getElementById("frontcanvas").classList.add("split-horizontal");
|
|
document.getElementById("backcanvas").classList.add("split-horizontal");
|
|
if (bomsplit) {
|
|
bomsplit.destroy();
|
|
bomsplit = null;
|
|
canvassplit.destroy();
|
|
canvassplit = null;
|
|
}
|
|
bomsplit = Split(['#bomdiv', '#canvasdiv'], {
|
|
sizes: [50, 50],
|
|
onDragEnd: resizeAll,
|
|
direction: "vertical",
|
|
gutterSize: 5
|
|
});
|
|
canvassplit = Split(['#frontcanvas', '#backcanvas'], {
|
|
sizes: [50, 50],
|
|
gutterSize: 5,
|
|
onDragEnd: resizeAll
|
|
});
|
|
break;
|
|
case 'left-right':
|
|
document.getElementById("lr-btn").classList.add("depressed");
|
|
document.getElementById("frontcanvas").style.display = "";
|
|
document.getElementById("backcanvas").style.display = "";
|
|
document.getElementById("topmostdiv").style.height = "100%";
|
|
document.getElementById("topmostdiv").style.display = "flex";
|
|
document.getElementById("bomdiv").classList.add("split-horizontal");
|
|
document.getElementById("canvasdiv").classList.add("split-horizontal");
|
|
document.getElementById("frontcanvas").classList.remove("split-horizontal");
|
|
document.getElementById("backcanvas").classList.remove("split-horizontal");
|
|
if (bomsplit) {
|
|
bomsplit.destroy();
|
|
bomsplit = null;
|
|
canvassplit.destroy();
|
|
canvassplit = null;
|
|
}
|
|
bomsplit = Split(['#bomdiv', '#canvasdiv'], {
|
|
sizes: [50, 50],
|
|
onDragEnd: resizeAll,
|
|
gutterSize: 5
|
|
});
|
|
canvassplit = Split(['#frontcanvas', '#backcanvas'], {
|
|
sizes: [50, 50],
|
|
gutterSize: 5,
|
|
direction: "vertical",
|
|
onDragEnd: resizeAll
|
|
});
|
|
}
|
|
settings.bomlayout = layout;
|
|
writeStorage("bomlayout", layout);
|
|
changeCanvasLayout(settings.canvaslayout);
|
|
}
|
|
|
|
function changeBomMode(mode) {
|
|
document.getElementById("bom-grouped-btn").classList.remove("depressed");
|
|
document.getElementById("bom-ungrouped-btn").classList.remove("depressed");
|
|
document.getElementById("bom-netlist-btn").classList.remove("depressed");
|
|
var chkbxs = document.getElementsByClassName("visibility_checkbox");
|
|
|
|
switch (mode) {
|
|
case 'grouped':
|
|
document.getElementById("bom-grouped-btn").classList.add("depressed");
|
|
for (var i = 0; i < chkbxs.length; i++) {
|
|
chkbxs[i].disabled = false;
|
|
}
|
|
break;
|
|
case 'ungrouped':
|
|
document.getElementById("bom-ungrouped-btn").classList.add("depressed");
|
|
for (var i = 0; i < chkbxs.length; i++) {
|
|
chkbxs[i].disabled = false;
|
|
}
|
|
break;
|
|
case 'netlist':
|
|
document.getElementById("bom-netlist-btn").classList.add("depressed");
|
|
for (var i = 0; i < chkbxs.length; i++) {
|
|
chkbxs[i].disabled = true;
|
|
}
|
|
}
|
|
|
|
writeStorage("bommode", mode);
|
|
if (mode != settings.bommode) {
|
|
settings.bommode = mode;
|
|
bomSortFunction = null;
|
|
currentSortColumn = null;
|
|
currentSortOrder = null;
|
|
clearHighlightedFootprints();
|
|
}
|
|
populateBomTable();
|
|
}
|
|
|
|
function focusFilterField() {
|
|
focusInputField(document.getElementById("filter"));
|
|
}
|
|
|
|
function focusRefLookupField() {
|
|
focusInputField(document.getElementById("reflookup"));
|
|
}
|
|
|
|
function toggleBomCheckbox(bomrowid, checkboxnum) {
|
|
if (!bomrowid || checkboxnum > settings.checkboxes.length) {
|
|
return;
|
|
}
|
|
var bomrow = document.getElementById(bomrowid);
|
|
var 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";
|
|
}
|
|
|
|
function topToggle() {
|
|
var top = document.getElementById("top");
|
|
var toptoggle = document.getElementById("toptoggle");
|
|
if (top.style.display === "none") {
|
|
top.style.display = "flex";
|
|
toptoggle.classList.remove("flipped");
|
|
} else {
|
|
top.style.display = "none";
|
|
toptoggle.classList.add("flipped");
|
|
}
|
|
}
|
|
|
|
window.onload = function (e) {
|
|
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);
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
// EventHandler.registerCallback(IBOM_EVENT_TYPES.BOM_BODY_CHANGE_EVENT, () => {
|
|
// for(var tr of bom.childNodes) {
|
|
// tr.onclick = tr.onmousemove;
|
|
// tr.onmousemove = null;
|
|
// };
|
|
// });
|
|
|
|
///////////////////////////////////////////////
|
|
</script>
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<div id="topmostdiv" class="topmostdiv">
|
|
<div id="top">
|
|
<div id="fileinfodiv">
|
|
<table class="fileinfo">
|
|
<tbody>
|
|
<tr>
|
|
<td id="title" class="title" style="width: 70%">
|
|
Title
|
|
</td>
|
|
<td id="revision" class="title" style="width: 30%">
|
|
Revision
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td id="company">
|
|
Company
|
|
</td>
|
|
<td id="filedate">
|
|
Date
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div id="bomcontrols">
|
|
<div class="hideonprint menu">
|
|
<button class="menubtn"></button>
|
|
<div class="menu-content">
|
|
<label class="menu-label menu-label-top" style="width: calc(50% - 18px)">
|
|
<input id="darkmodeCheckbox" type="checkbox" onchange="setDarkMode(this.checked)">
|
|
Dark mode
|
|
</label><!-- This comment eats space! All of it!
|
|
--><label class="menu-label menu-label-top" style="width: calc(50% - 17px); border-left: 0;">
|
|
<input id="fullscreenCheckbox" type="checkbox" onchange="setFullscreen(this.checked)">
|
|
Full Screen
|
|
</label>
|
|
<label class="menu-label" style="width: calc(50% - 18px)">
|
|
<input id="fabricationCheckbox" type="checkbox" checked onchange="fabricationVisible(this.checked)">
|
|
Fab layer
|
|
</label><!-- This comment eats space! All of it!
|
|
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
|
|
<input id="silkscreenCheckbox" type="checkbox" checked onchange="silkscreenVisible(this.checked)">
|
|
Silkscreen
|
|
</label>
|
|
<label class="menu-label" style="width: calc(50% - 18px)">
|
|
<input id="referencesCheckbox" type="checkbox" checked onchange="referencesVisible(this.checked)">
|
|
References
|
|
</label><!-- This comment eats space! All of it!
|
|
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
|
|
<input id="valuesCheckbox" type="checkbox" checked onchange="valuesVisible(this.checked)">
|
|
Values
|
|
</label>
|
|
<div id="tracksAndZonesCheckboxes">
|
|
<label class="menu-label" style="width: calc(50% - 18px)">
|
|
<input id="tracksCheckbox" type="checkbox" checked onchange="tracksVisible(this.checked)">
|
|
Tracks
|
|
</label><!-- This comment eats space! All of it!
|
|
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
|
|
<input id="zonesCheckbox" type="checkbox" checked onchange="zonesVisible(this.checked)">
|
|
Zones
|
|
</label>
|
|
</div>
|
|
<label class="menu-label" style="width: calc(50% - 18px)">
|
|
<input id="padsCheckbox" type="checkbox" checked onchange="padsVisible(this.checked)">
|
|
Pads
|
|
</label><!-- This comment eats space! All of it!
|
|
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
|
|
<input id="dnpOutlineCheckbox" type="checkbox" checked onchange="dnpOutline(this.checked)">
|
|
DNP outlined
|
|
</label>
|
|
<label class="menu-label">
|
|
<input id="dragCheckbox" type="checkbox" checked onchange="setRedrawOnDrag(this.checked)">
|
|
Continuous redraw on drag
|
|
</label>
|
|
<label class="menu-label">
|
|
Highlight first pin
|
|
<form id="highlightpin1">
|
|
<div class="flexbox">
|
|
<label>
|
|
<input type="radio" name="highlightpin1" value="none" onchange="setHighlightPin1('none')">
|
|
None
|
|
</label>
|
|
<label>
|
|
<input type="radio" name="highlightpin1" value="all" onchange="setHighlightPin1('all')">
|
|
All
|
|
</label>
|
|
<label>
|
|
<input type="radio" name="highlightpin1" value="selected" onchange="setHighlightPin1('selected')">
|
|
Selected
|
|
</label>
|
|
</div>
|
|
</form>
|
|
</label>
|
|
<label class="menu-label">
|
|
<span>Board rotation</span>
|
|
<span style="float: right"><span id="rotationDegree">0</span>°</span>
|
|
<input id="boardRotation" type="range" min="-36" max="36" value="0" class="slider" oninput="setBoardRotation(this.value)">
|
|
</label>
|
|
<label class="menu-label">
|
|
<input id="offsetBackRotationCheckbox" type="checkbox" onchange="setOffsetBackRotation(this.checked)">
|
|
Offset back rotation
|
|
</label>
|
|
<label class="menu-label">
|
|
<div style="margin-left: 5px">Bom checkboxes</div>
|
|
<input id="bomCheckboxes" class="menu-textbox" type=text
|
|
oninput="setBomCheckboxes(this.value)">
|
|
</label>
|
|
<label class="menu-label">
|
|
<div style="margin-left: 5px">Mark when checked</div>
|
|
<div id="markWhenCheckedContainer"></div>
|
|
</label>
|
|
<label class="menu-label">
|
|
<span class="shameless-plug">
|
|
<span>Created using</span>
|
|
<a id="github-link" target="blank" href="https://github.com/openscopeproject/InteractiveHtmlBom">InteractiveHtmlBom</a>
|
|
<a target="blank" title="Mouse and keyboard help" href="https://github.com/openscopeproject/InteractiveHtmlBom/wiki/Usage#bom-page-mouse-actions" style="text-decoration: none;"><label class="help-link">?</label></a>
|
|
</span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="button-container hideonprint">
|
|
<button id="fl-btn" class="left-most-button" onclick="changeCanvasLayout('F')"
|
|
title="Front only">F
|
|
</button>
|
|
<button id="fb-btn" class="middle-button" onclick="changeCanvasLayout('FB')"
|
|
title="Front and Back">FB
|
|
</button>
|
|
<button id="bl-btn" class="right-most-button" onclick="changeCanvasLayout('B')"
|
|
title="Back only">B
|
|
</button>
|
|
</div>
|
|
<div class="button-container hideonprint">
|
|
<button id="bom-btn" class="left-most-button" onclick="changeBomLayout('bom-only')"
|
|
title="BOM only"></button>
|
|
<button id="lr-btn" class="middle-button" onclick="changeBomLayout('left-right')"
|
|
title="BOM left, drawings right"></button>
|
|
<button id="tb-btn" class="right-most-button" onclick="changeBomLayout('top-bottom')"
|
|
title="BOM top, drawings bot"></button>
|
|
</div>
|
|
<div class="button-container hideonprint">
|
|
<button id="bom-grouped-btn" class="left-most-button" onclick="changeBomMode('grouped')"
|
|
title="Grouped BOM"></button>
|
|
<button id="bom-ungrouped-btn" class="middle-button" onclick="changeBomMode('ungrouped')"
|
|
title="Ungrouped BOM"></button>
|
|
<button id="bom-netlist-btn" class="right-most-button" onclick="changeBomMode('netlist')"
|
|
title="Netlist"></button>
|
|
</div>
|
|
<div class="hideonprint menu">
|
|
<button class="statsbtn"></button>
|
|
<div class="menu-content">
|
|
<table class="stats">
|
|
<tbody>
|
|
<tr>
|
|
<td width="40%">Board stats</td>
|
|
<td>Front</td>
|
|
<td>Back</td>
|
|
<td>Total</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Components</td>
|
|
<td id="stats-components-front">~</td>
|
|
<td id="stats-components-back">~</td>
|
|
<td id="stats-components-total">~</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Groups</td>
|
|
<td id="stats-groups-front">~</td>
|
|
<td id="stats-groups-back">~</td>
|
|
<td id="stats-groups-total">~</td>
|
|
</tr>
|
|
<tr>
|
|
<td>SMD pads</td>
|
|
<td id="stats-smd-pads-front">~</td>
|
|
<td id="stats-smd-pads-back">~</td>
|
|
<td id="stats-smd-pads-total">~</td>
|
|
</tr>
|
|
<tr>
|
|
<td>TH pads</td>
|
|
<td colspan=3 id="stats-th-pads">~</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<table class="stats">
|
|
<col width="40%"/><col />
|
|
<tbody id="checkbox-stats">
|
|
<tr>
|
|
<td colspan=2 style="border-top: 0">Checkboxes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="hideonprint menu">
|
|
<button class="iobtn"></button>
|
|
<div class="menu-content">
|
|
<div class="menu-label menu-label-top">
|
|
<div style="margin-left: 5px;">Save board image</div>
|
|
<div class="flexbox">
|
|
<input id="render-save-width" class="menu-textbox" type="text" value="1000" placeholder="Width"
|
|
style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
|
|
<span>X</span>
|
|
<input id="render-save-height" class="menu-textbox" type="text" value="1000" placeholder="Height"
|
|
style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
|
|
</div>
|
|
<label>
|
|
<input id="render-save-transparent" type="checkbox">
|
|
Transparent background
|
|
</label>
|
|
<div class="flexbox">
|
|
<button class="savebtn" onclick="saveImage('F')">Front</button>
|
|
<button class="savebtn" onclick="saveImage('B')">Back</button>
|
|
</div>
|
|
</div>
|
|
<div class="menu-label">
|
|
<span style="margin-left: 5px;">Config and checkbox state</span>
|
|
<div class="flexbox">
|
|
<button class="savebtn" onclick="saveSettings()">Export</button>
|
|
<button class="savebtn" onclick="loadSettings()">Import</button>
|
|
<button class="savebtn" onclick="resetSettings()">Reset</button>
|
|
</div>
|
|
</div>
|
|
<div class="menu-label">
|
|
<span style="margin-left: 5px;">Save bom table as</span>
|
|
<div class="flexbox">
|
|
<button class="savebtn" onclick="saveBomTable('csv')">csv</button>
|
|
<button class="savebtn" onclick="saveBomTable('txt')">txt</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="topdivider">
|
|
<div class="hideonprint">
|
|
<div id="toptoggle" onclick="topToggle()">︽</div>
|
|
</div>
|
|
</div>
|
|
<div id="bot" class="split" style="flex: 1 1">
|
|
<div id="bomdiv" class="split split-horizontal">
|
|
<div style="width: 100%">
|
|
<input id="reflookup" class="textbox searchbox reflookup hideonprint" type="text" placeholder="Ref lookup"
|
|
oninput="updateRefLookup(this.value)">
|
|
<input id="filter" class="textbox searchbox filter hideonprint" type="text" placeholder="Filter"
|
|
oninput="updateFilter(this.value)">
|
|
<div class="button-container hideonprint" style="float: left; margin: 0;">
|
|
<button id="copy" title="Copy bom table to clipboard"
|
|
onclick="saveBomTable('clipboard')"></button>
|
|
</div>
|
|
</div>
|
|
<div id="dbg"></div>
|
|
<table class="bom" id="bomtable">
|
|
<thead id="bomhead">
|
|
</thead>
|
|
<tbody id="bombody">
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div id="canvasdiv" class="split split-horizontal">
|
|
<div id="frontcanvas" class="split" touch-action="none" style="overflow: hidden">
|
|
<div style="position: relative; width: 100%; height: 100%;">
|
|
<canvas id="F_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
|
|
<canvas id="F_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
|
|
<canvas id="F_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
|
|
<canvas id="F_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
|
|
</div>
|
|
</div>
|
|
<div id="backcanvas" class="split" touch-action="none" style="overflow: hidden">
|
|
<div style="position: relative; width: 100%; height: 100%;">
|
|
<canvas id="B_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
|
|
<canvas id="B_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
|
|
<canvas id="B_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
|
|
<canvas id="B_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</body>
|
|
|
|
</html>
|