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