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