4562 lines
388 KiB
HTML
4562 lines
388 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Interactive BOM for KiCAD</title>
|
|
<style type="text/css">
|
|
:root {
|
|
--pcb-edge-color: black;
|
|
--pad-color: #878787;
|
|
--pad-hole-color: #CCCCCC;
|
|
--pad-color-highlight: #D04040;
|
|
--pad-color-highlight-both: #D0D040;
|
|
--pad-color-highlight-marked: #44a344;
|
|
--pin1-outline-color: #ffb629;
|
|
--pin1-outline-color-highlight: #ffb629;
|
|
--pin1-outline-color-highlight-both: #fcbb39;
|
|
--pin1-outline-color-highlight-marked: #fdbe41;
|
|
--silkscreen-edge-color: #aa4;
|
|
--silkscreen-polygon-color: #4aa;
|
|
--silkscreen-text-color: #4aa;
|
|
--fabrication-edge-color: #907651;
|
|
--fabrication-polygon-color: #907651;
|
|
--fabrication-text-color: #a27c24;
|
|
--track-color: #def5f1;
|
|
--track-color-highlight: #D04040;
|
|
--zone-color: #def5f1;
|
|
--zone-color-highlight: #d0404080;
|
|
}
|
|
|
|
html,
|
|
body {
|
|
margin: 0px;
|
|
height: 100%;
|
|
font-family: Verdana, sans-serif;
|
|
}
|
|
|
|
.dark.topmostdiv {
|
|
--pcb-edge-color: #eee;
|
|
--pad-color: #808080;
|
|
--pin1-outline-color: #ffa800;
|
|
--pin1-outline-color-highlight: #ccff00;
|
|
--track-color: #42524f;
|
|
--zone-color: #42524f;
|
|
background-color: #252c30;
|
|
color: #eee;
|
|
}
|
|
|
|
button {
|
|
background-color: #eee;
|
|
border: 1px solid #888;
|
|
color: black;
|
|
height: 44px;
|
|
width: 44px;
|
|
text-align: center;
|
|
text-decoration: none;
|
|
display: inline-block;
|
|
font-size: 14px;
|
|
font-weight: bolder;
|
|
}
|
|
|
|
.dark button {
|
|
/* This will be inverted */
|
|
background-color: #c3b7b5;
|
|
}
|
|
|
|
button.depressed {
|
|
background-color: #0a0;
|
|
color: white;
|
|
}
|
|
|
|
.dark button.depressed {
|
|
/* This will be inverted */
|
|
background-color: #b3b;
|
|
}
|
|
|
|
button:focus {
|
|
outline: 0;
|
|
}
|
|
|
|
button#tb-btn {
|
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.32 290.12h5.82M1.32 291.45h5.82' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 292.5v4.23M.26 292.63H8.2' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='1.35' y='295.73'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
|
|
}
|
|
|
|
button#lr-btn {
|
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.06 290.12H3.7m-2.64 1.33H3.7m-2.64 1.32H3.7m-2.64 1.3H3.7m-2.64 1.33H3.7' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 288.8v7.94m0-4.11h3.96' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='5.11' y='291.96'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A");
|
|
}
|
|
|
|
button#bom-btn {
|
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)' fill='none' stroke='%23000' stroke-width='.4'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' stroke-linejoin='round'/%3E%3Cpath d='M1.59 290.12h5.29M1.59 291.45h5.33M1.59 292.75h5.33M1.59 294.09h5.33M1.59 295.41h5.33'/%3E%3C/g%3E%3C/svg%3E");
|
|
}
|
|
|
|
button#bom-grouped-btn {
|
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m4 0h5m4 0h3M6.1 22h3m3.9 0h5m4 0h4m-16-8h4m4 0h4'/%3E%3Cpath stroke-linecap='null' d='M5 17.5h22M5 26.6h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
|
|
}
|
|
|
|
button#bom-ungrouped-btn {
|
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m-4 8h3m-3 8h4'/%3E%3Cpath stroke-linecap='null' d='M5 13.5h22m-22 8h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E");
|
|
}
|
|
|
|
button#bom-netlist-btn {
|
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' stroke='%23000' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-width='2' d='M6 26l6-6v-8m13.8-6.3l-6 6v8'/%3E%3Ccircle cx='11.8' cy='9.5' r='2.8' stroke-width='2'/%3E%3Ccircle cx='19.8' cy='22.8' r='2.8' stroke-width='2'/%3E%3C/g%3E%3C/svg%3E");
|
|
}
|
|
|
|
button#copy {
|
|
background-image: url("data:image/svg+xml,%3Csvg height='48' viewBox='0 0 48 48' width='48' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h48v48h-48z' fill='none'/%3E%3Cpath d='M32 2h-24c-2.21 0-4 1.79-4 4v28h4v-28h24v-4zm6 8h-22c-2.21 0-4 1.79-4 4v28c0 2.21 1.79 4 4 4h22c2.21 0 4-1.79 4-4v-28c0-2.21-1.79-4-4-4zm0 32h-22v-28h22v28z'/%3E%3C/svg%3E");
|
|
background-position: 6px 6px;
|
|
background-repeat: no-repeat;
|
|
background-size: 26px 26px;
|
|
border-radius: 6px;
|
|
height: 40px;
|
|
width: 40px;
|
|
margin: 10px 5px;
|
|
}
|
|
|
|
button#copy:active {
|
|
box-shadow: inset 0px 0px 5px #6c6c6c;
|
|
}
|
|
|
|
textarea.clipboard-temp {
|
|
position: fixed;
|
|
top: 0;
|
|
left: 0;
|
|
width: 2em;
|
|
height: 2em;
|
|
padding: 0;
|
|
border: None;
|
|
outline: None;
|
|
box-shadow: None;
|
|
background: transparent;
|
|
}
|
|
|
|
.left-most-button {
|
|
border-right: 0;
|
|
border-top-left-radius: 6px;
|
|
border-bottom-left-radius: 6px;
|
|
}
|
|
|
|
.middle-button {
|
|
border-right: 0;
|
|
}
|
|
|
|
.right-most-button {
|
|
border-top-right-radius: 6px;
|
|
border-bottom-right-radius: 6px;
|
|
}
|
|
|
|
.button-container {
|
|
font-size: 0;
|
|
margin: 10px 10px 10px 0px;
|
|
}
|
|
|
|
.dark .button-container {
|
|
filter: invert(1);
|
|
}
|
|
|
|
.button-container button {
|
|
background-size: 32px 32px;
|
|
background-position: 5px 5px;
|
|
background-repeat: no-repeat;
|
|
}
|
|
|
|
@media print {
|
|
.hideonprint {
|
|
display: none;
|
|
}
|
|
}
|
|
|
|
canvas {
|
|
cursor: crosshair;
|
|
}
|
|
|
|
canvas:active {
|
|
cursor: grabbing;
|
|
}
|
|
|
|
.fileinfo {
|
|
width: 100%;
|
|
max-width: 1000px;
|
|
border: none;
|
|
padding: 5px;
|
|
}
|
|
|
|
.fileinfo .title {
|
|
font-size: 20pt;
|
|
font-weight: bold;
|
|
}
|
|
|
|
.fileinfo td {
|
|
overflow: hidden;
|
|
white-space: nowrap;
|
|
max-width: 1px;
|
|
width: 50%;
|
|
text-overflow: ellipsis;
|
|
}
|
|
|
|
.bom {
|
|
border-collapse: collapse;
|
|
font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
|
|
font-size: 10pt;
|
|
table-layout: fixed;
|
|
width: 100%;
|
|
margin-top: 1px;
|
|
position: relative;
|
|
}
|
|
|
|
.bom th,
|
|
.bom td {
|
|
border: 1px solid black;
|
|
padding: 5px;
|
|
word-wrap: break-word;
|
|
text-align: center;
|
|
position: relative;
|
|
}
|
|
|
|
.dark .bom th,
|
|
.dark .bom td {
|
|
border: 1px solid #777;
|
|
}
|
|
|
|
.bom th {
|
|
background-color: #CCCCCC;
|
|
background-clip: padding-box;
|
|
}
|
|
|
|
.dark .bom th {
|
|
background-color: #3b4749;
|
|
}
|
|
|
|
.bom tr.highlighted:nth-child(n) {
|
|
background-color: #cfc;
|
|
}
|
|
|
|
.dark .bom tr.highlighted:nth-child(n) {
|
|
background-color: #226022;
|
|
}
|
|
|
|
.bom tr:nth-child(even) {
|
|
background-color: #f2f2f2;
|
|
}
|
|
|
|
.dark .bom tr:nth-child(even) {
|
|
background-color: #313b40;
|
|
}
|
|
|
|
.bom tr.checked {
|
|
color: #1cb53d;
|
|
}
|
|
|
|
.dark .bom tr.checked {
|
|
color: #2cce54;
|
|
}
|
|
|
|
.bom tr {
|
|
transition: background-color 0.2s;
|
|
}
|
|
|
|
.bom .numCol {
|
|
width: 30px;
|
|
}
|
|
|
|
.bom .value {
|
|
width: 15%;
|
|
}
|
|
|
|
.bom .quantity {
|
|
width: 65px;
|
|
}
|
|
|
|
.bom th .sortmark {
|
|
position: absolute;
|
|
right: 1px;
|
|
top: 1px;
|
|
margin-top: -5px;
|
|
border-width: 5px;
|
|
border-style: solid;
|
|
border-color: transparent transparent #221 transparent;
|
|
transform-origin: 50% 85%;
|
|
transition: opacity 0.2s, transform 0.4s;
|
|
}
|
|
|
|
.dark .bom th .sortmark {
|
|
filter: invert(1);
|
|
}
|
|
|
|
.bom th .sortmark.none {
|
|
opacity: 0;
|
|
}
|
|
|
|
.bom th .sortmark.desc {
|
|
transform: rotate(180deg);
|
|
}
|
|
|
|
.bom th:hover .sortmark.none {
|
|
opacity: 0.5;
|
|
}
|
|
|
|
.bom .bom-checkbox {
|
|
width: 30px;
|
|
position: relative;
|
|
user-select: none;
|
|
-moz-user-select: none;
|
|
}
|
|
|
|
.bom .bom-checkbox:before {
|
|
content: "";
|
|
position: absolute;
|
|
border-width: 15px;
|
|
border-style: solid;
|
|
border-color: #51829f transparent transparent transparent;
|
|
visibility: hidden;
|
|
top: -15px;
|
|
}
|
|
|
|
.bom .bom-checkbox:after {
|
|
content: "Double click to set/unset all";
|
|
position: absolute;
|
|
color: white;
|
|
top: -35px;
|
|
left: -26px;
|
|
background: #51829f;
|
|
padding: 5px 15px;
|
|
border-radius: 8px;
|
|
white-space: nowrap;
|
|
visibility: hidden;
|
|
}
|
|
|
|
.bom .bom-checkbox:hover:before,
|
|
.bom .bom-checkbox:hover:after {
|
|
visibility: visible;
|
|
transition: visibility 0.2s linear 1s;
|
|
}
|
|
|
|
.split {
|
|
-webkit-box-sizing: border-box;
|
|
-moz-box-sizing: border-box;
|
|
box-sizing: border-box;
|
|
overflow-y: auto;
|
|
overflow-x: hidden;
|
|
background-color: inherit;
|
|
}
|
|
|
|
.split.split-horizontal,
|
|
.gutter.gutter-horizontal {
|
|
height: 100%;
|
|
float: left;
|
|
}
|
|
|
|
.gutter {
|
|
background-color: #ddd;
|
|
background-repeat: no-repeat;
|
|
background-position: 50%;
|
|
transition: background-color 0.3s;
|
|
}
|
|
|
|
.dark .gutter {
|
|
background-color: #777;
|
|
}
|
|
|
|
.gutter.gutter-horizontal {
|
|
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==');
|
|
cursor: ew-resize;
|
|
width: 5px;
|
|
}
|
|
|
|
.gutter.gutter-vertical {
|
|
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAFAQMAAABo7865AAAABlBMVEVHcEzMzMzyAv2sAAAAAXRSTlMAQObYZgAAABBJREFUeF5jOAMEEAIEEFwAn3kMwcB6I2AAAAAASUVORK5CYII=');
|
|
cursor: ns-resize;
|
|
height: 5px;
|
|
}
|
|
|
|
.searchbox {
|
|
float: left;
|
|
height: 40px;
|
|
margin: 10px 5px;
|
|
padding: 12px 32px;
|
|
font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
|
|
font-size: 18px;
|
|
box-sizing: border-box;
|
|
border: 1px solid #888;
|
|
border-radius: 6px;
|
|
outline: none;
|
|
background-color: #eee;
|
|
transition: background-color 0.2s, border 0.2s;
|
|
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABNklEQVQ4T8XSMUvDQBQH8P/LElFa/AIZHcTBQSz0I/gFstTBRR2KUC4ldDxw7h0Bl3RRUATxi4iiODgoiLNrbQYp5J6cpJJqomkX33Z37/14d/dIa33MzDuYI4johOI4XhyNRteO46zNYjDzAxE1yBZprVeZ+QbAUhXEGJMA2Ox2u4+fQIa0mPmsCgCgJYQ4t7lfgF0opQYAdv9ABkKI/UnOFCClXKjX61cA1osQY8x9kiRNKeV7IWA3oyhaSdP0FkAtjxhj3hzH2RBCPOf3pzqYHCilfAAX+URm9oMguPzeWSGQvUcMYC8rOBJCHBRdqxTo9/vbRHRqi8bj8XKv1xvODbiuW2u32/bvf0SlDv4XYOY7z/Mavu+nM1+BmQ+NMc0wDF/LprP0DbTWW0T00ul0nn4b7Q87+X4Qmfiq2wAAAABJRU5ErkJggg==');
|
|
background-position: 10px 10px;
|
|
background-repeat: no-repeat;
|
|
}
|
|
|
|
.dark .searchbox {
|
|
background-color: #111;
|
|
color: #eee;
|
|
}
|
|
|
|
.searchbox::placeholder {
|
|
color: #ccc;
|
|
}
|
|
|
|
.dark .searchbox::placeholder {
|
|
color: #666;
|
|
}
|
|
|
|
.filter {
|
|
width: calc(60% - 64px);
|
|
}
|
|
|
|
.reflookup {
|
|
width: calc(40% - 10px);
|
|
}
|
|
|
|
input[type=text]:focus {
|
|
background-color: white;
|
|
border: 1px solid #333;
|
|
}
|
|
|
|
.dark input[type=text]:focus {
|
|
background-color: #333;
|
|
border: 1px solid #ccc;
|
|
}
|
|
|
|
mark.highlight {
|
|
background-color: #5050ff;
|
|
color: #fff;
|
|
padding: 2px;
|
|
border-radius: 6px;
|
|
}
|
|
|
|
.dark mark.highlight {
|
|
background-color: #76a6da;
|
|
color: #111;
|
|
}
|
|
|
|
.menubtn {
|
|
background-color: white;
|
|
border: none;
|
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36' viewBox='0 0 20 20'%3E%3Cpath fill='none' d='M0 0h20v20H0V0z'/%3E%3Cpath d='M15.95 10.78c.03-.25.05-.51.05-.78s-.02-.53-.06-.78l1.69-1.32c.15-.12.19-.34.1-.51l-1.6-2.77c-.1-.18-.31-.24-.49-.18l-1.99.8c-.42-.32-.86-.58-1.35-.78L12 2.34c-.03-.2-.2-.34-.4-.34H8.4c-.2 0-.36.14-.39.34l-.3 2.12c-.49.2-.94.47-1.35.78l-1.99-.8c-.18-.07-.39 0-.49.18l-1.6 2.77c-.1.18-.06.39.1.51l1.69 1.32c-.04.25-.07.52-.07.78s.02.53.06.78L2.37 12.1c-.15.12-.19.34-.1.51l1.6 2.77c.1.18.31.24.49.18l1.99-.8c.42.32.86.58 1.35.78l.3 2.12c.04.2.2.34.4.34h3.2c.2 0 .37-.14.39-.34l.3-2.12c.49-.2.94-.47 1.35-.78l1.99.8c.18.07.39 0 .49-.18l1.6-2.77c.1-.18.06-.39-.1-.51l-1.67-1.32zM10 13c-1.65 0-3-1.35-3-3s1.35-3 3-3 3 1.35 3 3-1.35 3-3 3z'/%3E%3C/svg%3E%0A");
|
|
background-position: center;
|
|
background-repeat: no-repeat;
|
|
}
|
|
|
|
.statsbtn {
|
|
background-color: white;
|
|
border: none;
|
|
background-image: url("data:image/svg+xml,%3Csvg width='36' height='36' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M4 6h28v24H4V6zm0 8h28v8H4m9-16v24h10V5.8' fill='none' stroke='%23000' stroke-width='2'/%3E%3C/svg%3E");
|
|
background-position: center;
|
|
background-repeat: no-repeat;
|
|
}
|
|
|
|
.iobtn {
|
|
background-color: white;
|
|
border: none;
|
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='36' height='36'%3E%3Cpath fill='none' stroke='%23000' stroke-width='2' d='M3 33v-7l6.8-7h16.5l6.7 7v7H3zM3.2 26H33M21 9l5-5.9 5 6h-2.5V15h-5V9H21zm-4.9 0l-5 6-5-6h2.5V3h5v6h2.5z'/%3E%3Cpath fill='none' stroke='%23000' d='M6.1 29.5H10'/%3E%3C/svg%3E");
|
|
background-position: center;
|
|
background-repeat: no-repeat;
|
|
}
|
|
|
|
.visbtn {
|
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='24' height='24'%3E%3Cpath fill='none' stroke='%23333' d='M2.5 4.5h5v15h-5zM9.5 4.5h5v15h-5zM16.5 4.5h5v15h-5z'/%3E%3C/svg%3E");
|
|
background-position: center;
|
|
background-repeat: no-repeat;
|
|
padding: 15px;
|
|
}
|
|
|
|
#vismenu-content {
|
|
left: 0px;
|
|
font-family: Verdana, sans-serif;
|
|
}
|
|
|
|
.dark .statsbtn,
|
|
.dark .savebtn,
|
|
.dark .menubtn,
|
|
.dark .iobtn,
|
|
.dark .visbtn {
|
|
filter: invert(1);
|
|
}
|
|
|
|
.flexbox {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
width: 100%;
|
|
}
|
|
|
|
.savebtn {
|
|
background-color: #d6d6d6;
|
|
width: auto;
|
|
height: 30px;
|
|
flex-grow: 1;
|
|
margin: 5px;
|
|
border-radius: 4px;
|
|
}
|
|
|
|
.savebtn:active {
|
|
background-color: #0a0;
|
|
color: white;
|
|
}
|
|
|
|
.dark .savebtn:active {
|
|
/* This will be inverted */
|
|
background-color: #b3b;
|
|
}
|
|
|
|
.stats {
|
|
border-collapse: collapse;
|
|
font-size: 12pt;
|
|
table-layout: fixed;
|
|
width: 100%;
|
|
min-width: 450px;
|
|
}
|
|
|
|
.dark .stats td {
|
|
border: 1px solid #bbb;
|
|
}
|
|
|
|
.stats td {
|
|
border: 1px solid black;
|
|
padding: 5px;
|
|
word-wrap: break-word;
|
|
text-align: center;
|
|
position: relative;
|
|
}
|
|
|
|
#checkbox-stats div {
|
|
position: absolute;
|
|
left: 0;
|
|
top: 0;
|
|
height: 100%;
|
|
width: 100%;
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: center;
|
|
}
|
|
|
|
#checkbox-stats .bar {
|
|
background-color: rgba(28, 251, 0, 0.6);
|
|
}
|
|
|
|
.menu {
|
|
position: relative;
|
|
display: inline-block;
|
|
margin: 10px 10px 10px 0px;
|
|
}
|
|
|
|
.menu-content {
|
|
font-size: 12pt !important;
|
|
text-align: left !important;
|
|
font-weight: normal !important;
|
|
display: none;
|
|
position: absolute;
|
|
background-color: white;
|
|
right: 0;
|
|
min-width: 300px;
|
|
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
|
|
z-index: 100;
|
|
padding: 8px;
|
|
}
|
|
|
|
.dark .menu-content {
|
|
background-color: #111;
|
|
}
|
|
|
|
.menu:hover .menu-content {
|
|
display: block;
|
|
}
|
|
|
|
.menu:hover .menubtn,
|
|
.menu:hover .iobtn,
|
|
.menu:hover .statsbtn {
|
|
background-color: #eee;
|
|
}
|
|
|
|
.menu-label {
|
|
display: inline-block;
|
|
padding: 8px;
|
|
border: 1px solid #ccc;
|
|
border-top: 0;
|
|
width: calc(100% - 18px);
|
|
}
|
|
|
|
.menu-label-top {
|
|
border-top: 1px solid #ccc;
|
|
}
|
|
|
|
.menu-textbox {
|
|
float: left;
|
|
height: 24px;
|
|
margin: 10px 5px;
|
|
padding: 5px 5px;
|
|
font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
|
|
font-size: 14px;
|
|
box-sizing: border-box;
|
|
border: 1px solid #888;
|
|
border-radius: 4px;
|
|
outline: none;
|
|
background-color: #eee;
|
|
transition: background-color 0.2s, border 0.2s;
|
|
width: calc(100% - 10px);
|
|
}
|
|
|
|
.menu-textbox.invalid,
|
|
.dark .menu-textbox.invalid {
|
|
color: red;
|
|
}
|
|
|
|
.dark .menu-textbox {
|
|
background-color: #222;
|
|
color: #eee;
|
|
}
|
|
|
|
.radio-container {
|
|
margin: 4px;
|
|
}
|
|
|
|
.topmostdiv {
|
|
width: 100%;
|
|
height: 100%;
|
|
background-color: white;
|
|
transition: background-color 0.3s;
|
|
}
|
|
|
|
#top {
|
|
height: 78px;
|
|
border-bottom: 2px solid black;
|
|
}
|
|
|
|
.dark #top {
|
|
border-bottom: 2px solid #ccc;
|
|
}
|
|
|
|
#dbg {
|
|
display: block;
|
|
}
|
|
|
|
::-webkit-scrollbar {
|
|
width: 8px;
|
|
}
|
|
|
|
::-webkit-scrollbar-track {
|
|
background: #aaa;
|
|
}
|
|
|
|
::-webkit-scrollbar-thumb {
|
|
background: #666;
|
|
border-radius: 3px;
|
|
}
|
|
|
|
::-webkit-scrollbar-thumb:hover {
|
|
background: #555;
|
|
}
|
|
|
|
.slider {
|
|
-webkit-appearance: none;
|
|
width: 100%;
|
|
margin: 3px 0;
|
|
padding: 0;
|
|
outline: none;
|
|
opacity: 0.7;
|
|
-webkit-transition: .2s;
|
|
transition: opacity .2s;
|
|
border-radius: 3px;
|
|
}
|
|
|
|
.slider:hover {
|
|
opacity: 1;
|
|
}
|
|
|
|
.slider:focus {
|
|
outline: none;
|
|
}
|
|
|
|
.slider::-webkit-slider-runnable-track {
|
|
-webkit-appearance: none;
|
|
width: 100%;
|
|
height: 8px;
|
|
background: #d3d3d3;
|
|
border-radius: 3px;
|
|
border: none;
|
|
}
|
|
|
|
.slider::-webkit-slider-thumb {
|
|
-webkit-appearance: none;
|
|
width: 15px;
|
|
height: 15px;
|
|
border-radius: 50%;
|
|
background: #0a0;
|
|
cursor: pointer;
|
|
margin-top: -4px;
|
|
}
|
|
|
|
.dark .slider::-webkit-slider-thumb {
|
|
background: #3d3;
|
|
}
|
|
|
|
.slider::-moz-range-thumb {
|
|
width: 15px;
|
|
height: 15px;
|
|
border-radius: 50%;
|
|
background: #0a0;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.slider::-moz-range-track {
|
|
height: 8px;
|
|
background: #d3d3d3;
|
|
border-radius: 3px;
|
|
}
|
|
|
|
.dark .slider::-moz-range-thumb {
|
|
background: #3d3;
|
|
}
|
|
|
|
.slider::-ms-track {
|
|
width: 100%;
|
|
height: 8px;
|
|
border-width: 3px 0;
|
|
background: transparent;
|
|
border-color: transparent;
|
|
color: transparent;
|
|
transition: opacity .2s;
|
|
}
|
|
|
|
.slider::-ms-fill-lower {
|
|
background: #d3d3d3;
|
|
border: none;
|
|
border-radius: 3px;
|
|
}
|
|
|
|
.slider::-ms-fill-upper {
|
|
background: #d3d3d3;
|
|
border: none;
|
|
border-radius: 3px;
|
|
}
|
|
|
|
.slider::-ms-thumb {
|
|
width: 15px;
|
|
height: 15px;
|
|
border-radius: 50%;
|
|
background: #0a0;
|
|
cursor: pointer;
|
|
margin: 0;
|
|
}
|
|
|
|
.shameless-plug {
|
|
font-size: 0.8em;
|
|
text-align: center;
|
|
display: block;
|
|
}
|
|
|
|
a {
|
|
color: #0278a4;
|
|
}
|
|
|
|
.dark a {
|
|
color: #00b9fd;
|
|
}
|
|
|
|
#frontcanvas,
|
|
#backcanvas {
|
|
touch-action: none;
|
|
}
|
|
|
|
.placeholder {
|
|
border: 1px dashed #9f9fda !important;
|
|
background-color: #edf2f7 !important;
|
|
}
|
|
|
|
.dragging {
|
|
z-index: 999;
|
|
}
|
|
|
|
.dark .dragging>table>tbody>tr {
|
|
background-color: #252c30;
|
|
}
|
|
|
|
.dark .placeholder {
|
|
filter: invert(1);
|
|
}
|
|
|
|
.column-spacer {
|
|
top: 0;
|
|
left: 0;
|
|
width: calc(100% - 4px);
|
|
position: absolute;
|
|
cursor: pointer;
|
|
user-select: none;
|
|
height: 100%;
|
|
}
|
|
|
|
.column-width-handle {
|
|
top: 0;
|
|
right: 0;
|
|
width: 4px;
|
|
position: absolute;
|
|
cursor: col-resize;
|
|
user-select: none;
|
|
height: 100%;
|
|
}
|
|
|
|
.column-width-handle:hover {
|
|
background-color: #4f99bd;
|
|
}
|
|
|
|
.help-link {
|
|
border: 1px solid #0278a4;
|
|
padding-inline: 0.3rem;
|
|
border-radius: 3px;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.dark .help-link {
|
|
border: 1px solid #00b9fd;
|
|
}
|
|
|
|
.bom-color {
|
|
width: 20%;
|
|
}
|
|
|
|
.color-column input {
|
|
width: 1.6rem;
|
|
height: 1rem;
|
|
border: 1px solid black;
|
|
cursor: pointer;
|
|
padding: 0;
|
|
}
|
|
|
|
/* removes default styling from input color element */
|
|
::-webkit-color-swatch {
|
|
border: none;
|
|
}
|
|
|
|
::-webkit-color-swatch-wrapper {
|
|
padding: 0;
|
|
}
|
|
|
|
::-moz-color-swatch,
|
|
::-moz-focus-inner {
|
|
border: none;
|
|
}
|
|
|
|
::-moz-focus-inner {
|
|
padding: 0;
|
|
}
|
|
|
|
</style>
|
|
<script type="text/javascript" >
|
|
///////////////////////////////////////////////
|
|
/*
|
|
Split.js - v1.3.5
|
|
MIT License
|
|
https://github.com/nathancahill/Split.js
|
|
*/
|
|
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Split=t()}(this,function(){"use strict";var e=window,t=e.document,n="addEventListener",i="removeEventListener",r="getBoundingClientRect",s=function(){return!1},o=e.attachEvent&&!e[n],a=["","-webkit-","-moz-","-o-"].filter(function(e){var n=t.createElement("div");return n.style.cssText="width:"+e+"calc(9px)",!!n.style.length}).shift()+"calc",l=function(e){return"string"==typeof e||e instanceof String?t.querySelector(e):e};return function(u,c){function z(e,t,n){var i=A(y,t,n);Object.keys(i).forEach(function(t){return e.style[t]=i[t]})}function h(e,t){var n=B(y,t);Object.keys(n).forEach(function(t){return e.style[t]=n[t]})}function f(e){var t=E[this.a],n=E[this.b],i=t.size+n.size;t.size=e/this.size*i,n.size=i-e/this.size*i,z(t.element,t.size,this.aGutterSize),z(n.element,n.size,this.bGutterSize)}function m(e){var t;this.dragging&&((t="touches"in e?e.touches[0][b]-this.start:e[b]-this.start)<=E[this.a].minSize+M+this.aGutterSize?t=E[this.a].minSize+this.aGutterSize:t>=this.size-(E[this.b].minSize+M+this.bGutterSize)&&(t=this.size-(E[this.b].minSize+this.bGutterSize)),f.call(this,t),c.onDrag&&c.onDrag())}function g(){var e=E[this.a].element,t=E[this.b].element;this.size=e[r]()[y]+t[r]()[y]+this.aGutterSize+this.bGutterSize,this.start=e[r]()[G]}function d(){var t=this,n=E[t.a].element,r=E[t.b].element;t.dragging&&c.onDragEnd&&c.onDragEnd(),t.dragging=!1,e[i]("mouseup",t.stop),e[i]("touchend",t.stop),e[i]("touchcancel",t.stop),t.parent[i]("mousemove",t.move),t.parent[i]("touchmove",t.move),delete t.stop,delete t.move,n[i]("selectstart",s),n[i]("dragstart",s),r[i]("selectstart",s),r[i]("dragstart",s),n.style.userSelect="",n.style.webkitUserSelect="",n.style.MozUserSelect="",n.style.pointerEvents="",r.style.userSelect="",r.style.webkitUserSelect="",r.style.MozUserSelect="",r.style.pointerEvents="",t.gutter.style.cursor="",t.parent.style.cursor=""}function S(t){var i=this,r=E[i.a].element,o=E[i.b].element;!i.dragging&&c.onDragStart&&c.onDragStart(),t.preventDefault(),i.dragging=!0,i.move=m.bind(i),i.stop=d.bind(i),e[n]("mouseup",i.stop),e[n]("touchend",i.stop),e[n]("touchcancel",i.stop),i.parent[n]("mousemove",i.move),i.parent[n]("touchmove",i.move),r[n]("selectstart",s),r[n]("dragstart",s),o[n]("selectstart",s),o[n]("dragstart",s),r.style.userSelect="none",r.style.webkitUserSelect="none",r.style.MozUserSelect="none",r.style.pointerEvents="none",o.style.userSelect="none",o.style.webkitUserSelect="none",o.style.MozUserSelect="none",o.style.pointerEvents="none",i.gutter.style.cursor=j,i.parent.style.cursor=j,g.call(i)}function v(e){e.forEach(function(t,n){if(n>0){var i=F[n-1],r=E[i.a],s=E[i.b];r.size=e[n-1],s.size=t,z(r.element,r.size,i.aGutterSize),z(s.element,s.size,i.bGutterSize)}})}function p(){F.forEach(function(e){e.parent.removeChild(e.gutter),E[e.a].element.style[y]="",E[e.b].element.style[y]=""})}void 0===c&&(c={});var y,b,G,E,w=l(u[0]).parentNode,D=e.getComputedStyle(w).flexDirection,U=c.sizes||u.map(function(){return 100/u.length}),k=void 0!==c.minSize?c.minSize:100,x=Array.isArray(k)?k:u.map(function(){return k}),L=void 0!==c.gutterSize?c.gutterSize:10,M=void 0!==c.snapOffset?c.snapOffset:30,O=c.direction||"horizontal",j=c.cursor||("horizontal"===O?"ew-resize":"ns-resize"),C=c.gutter||function(e,n){var i=t.createElement("div");return i.className="gutter gutter-"+n,i},A=c.elementStyle||function(e,t,n){var i={};return"string"==typeof t||t instanceof String?i[e]=t:i[e]=o?t+"%":a+"("+t+"% - "+n+"px)",i},B=c.gutterStyle||function(e,t){return n={},n[e]=t+"px",n;var n};"horizontal"===O?(y="width","clientWidth",b="clientX",G="left","paddingLeft"):"vertical"===O&&(y="height","clientHeight",b="clientY",G="top","paddingTop");var F=[];return E=u.map(function(e,t){var i,s={element:l(e),size:U[t],minSize:x[t]};if(t>0&&(i={a:t-1,b:t,dragging:!1,isFirst:1===t,isLast:t===u.length-1,direction:O,parent:w},i.aGutterSize=L,i.bGutterSize=L,i.isFirst&&(i.aGutterSize=L/2),i.isLast&&(i.bGutterSize=L/2),"row-reverse"===D||"column-reverse"===D)){var a=i.a;i.a=i.b,i.b=a}if(!o&&t>0){var c=C(t,O);h(c,L),c[n]("mousedown",S.bind(i)),c[n]("touchstart",S.bind(i)),w.insertBefore(c,s.element),i.gutter=c}0===t||t===u.length-1?z(s.element,s.size,L/2):z(s.element,s.size,L);var f=s.element[r]()[y];return f<s.minSize&&(s.minSize=f),t>0&&F.push(i),s}),o?{setSizes:v,destroy:p}:{setSizes:v,getSizes:function(){return E.map(function(e){return e.size})},collapse:function(e){if(e===F.length){var t=F[e-1];g.call(t),o||f.call(t,t.size-t.bGutterSize)}else{var n=F[e];g.call(n),o||f.call(n,n.aGutterSize)}},destroy:p}}});
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>
|
|
// This work is free. You can redistribute it and/or modify it
|
|
// under the terms of the WTFPL, Version 2
|
|
// For more information see LICENSE.txt or http://www.wtfpl.net/
|
|
//
|
|
// For more information, the home page:
|
|
// http://pieroxy.net/blog/pages/lz-string/testing.html
|
|
//
|
|
// LZ-based compression algorithm, version 1.4.4
|
|
var LZString=function(){var o=String.fromCharCode,i={};var n={decompressFromBase64:function(o){return null==o?"":""==o?null:n._decompress(o.length,32,function(n){return function(o,n){if(!i[o]){i[o]={};for(var t=0;t<o.length;t++)i[o][o.charAt(t)]=t}return i[o][n]}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o.charAt(n))})},_decompress:function(i,n,t){var r,e,a,s,p,u,l,f=[],c=4,d=4,h=3,v="",g=[],m={val:t(0),position:n,index:1};for(r=0;r<3;r+=1)f[r]=r;for(a=0,p=Math.pow(2,2),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 2:return""}for(f[3]=l,e=l,g.push(l);;){if(m.index>i)return"";for(a=0,p=Math.pow(2,h),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(l=a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 2:return g.join("")}if(0==c&&(c=Math.pow(2,h),h++),f[l])v=f[l];else{if(l!==d)return null;v=e+e.charAt(0)}g.push(v),f[d++]=e+v.charAt(0),e=v,0==--c&&(c=Math.pow(2,h),h++)}}};return n}();"function"==typeof define&&define.amd?define(function(){return LZString}):"undefined"!=typeof module&&null!=module?module.exports=LZString:"undefined"!=typeof angular&&null!=angular&&angular.module("LZString",[]).factory("LZString",function(){return LZString});
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
/*!
|
|
* PEP v0.4.3 | https://github.com/jquery/PEP
|
|
* Copyright jQuery Foundation and other contributors | http://jquery.org/license
|
|
*/
|
|
!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.PointerEventsPolyfill=b()}(this,function(){"use strict";function a(a,b){b=b||Object.create(null);var c=document.createEvent("Event");c.initEvent(a,b.bubbles||!1,b.cancelable||!1);
|
|
for(var d,e=2;e<m.length;e++)d=m[e],c[d]=b[d]||n[e];c.buttons=b.buttons||0;
|
|
var f=0;return f=b.pressure&&c.buttons?b.pressure:c.buttons?.5:0,c.x=c.clientX,c.y=c.clientY,c.pointerId=b.pointerId||0,c.width=b.width||0,c.height=b.height||0,c.pressure=f,c.tiltX=b.tiltX||0,c.tiltY=b.tiltY||0,c.twist=b.twist||0,c.tangentialPressure=b.tangentialPressure||0,c.pointerType=b.pointerType||"",c.hwTimestamp=b.hwTimestamp||0,c.isPrimary=b.isPrimary||!1,c}function b(){this.array=[],this.size=0}function c(a,b,c,d){this.addCallback=a.bind(d),this.removeCallback=b.bind(d),this.changedCallback=c.bind(d),A&&(this.observer=new A(this.mutationWatcher.bind(this)))}function d(a){return"body /shadow-deep/ "+e(a)}function e(a){return'[touch-action="'+a+'"]'}function f(a){return"{ -ms-touch-action: "+a+"; touch-action: "+a+"; }"}function g(){if(F){D.forEach(function(a){String(a)===a?(E+=e(a)+f(a)+"\n",G&&(E+=d(a)+f(a)+"\n")):(E+=a.selectors.map(e)+f(a.rule)+"\n",G&&(E+=a.selectors.map(d)+f(a.rule)+"\n"))});var a=document.createElement("style");a.textContent=E,document.head.appendChild(a)}}function h(){if(!window.PointerEvent){if(window.PointerEvent=a,window.navigator.msPointerEnabled){var b=window.navigator.msMaxTouchPoints;Object.defineProperty(window.navigator,"maxTouchPoints",{value:b,enumerable:!0}),u.registerSource("ms",_)}else Object.defineProperty(window.navigator,"maxTouchPoints",{value:0,enumerable:!0}),u.registerSource("mouse",N),void 0!==window.ontouchstart&&u.registerSource("touch",V);u.register(document)}}function i(a){if(!u.pointermap.has(a)){var b=new Error("InvalidPointerId");throw b.name="InvalidPointerId",b}}function j(a){for(var b=a.parentNode;b&&b!==a.ownerDocument;)b=b.parentNode;if(!b){var c=new Error("InvalidStateError");throw c.name="InvalidStateError",c}}function k(a){var b=u.pointermap.get(a);return 0!==b.buttons}function l(){window.Element&&!Element.prototype.setPointerCapture&&Object.defineProperties(Element.prototype,{setPointerCapture:{value:W},releasePointerCapture:{value:X},hasPointerCapture:{value:Y}})}
|
|
var m=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","pageX","pageY"],n=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0],o=window.Map&&window.Map.prototype.forEach,p=o?Map:b;b.prototype={set:function(a,b){return void 0===b?this["delete"](a):(this.has(a)||this.size++,void(this.array[a]=b))},has:function(a){return void 0!==this.array[a]},"delete":function(a){this.has(a)&&(delete this.array[a],this.size--)},get:function(a){return this.array[a]},clear:function(){this.array.length=0,this.size=0},forEach:function(a,b){return this.array.forEach(function(c,d){a.call(b,c,d,this)},this)}};var q=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","buttons","pointerId","width","height","pressure","tiltX","tiltY","pointerType","hwTimestamp","isPrimary","type","target","currentTarget","which","pageX","pageY","timeStamp"],r=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0,0,0,0,0,0,"",0,!1,"",null,null,0,0,0,0],s={pointerover:1,pointerout:1,pointerenter:1,pointerleave:1},t="undefined"!=typeof SVGElementInstance,u={pointermap:new p,eventMap:Object.create(null),captureInfo:Object.create(null),eventSources:Object.create(null),eventSourceList:[],registerSource:function(a,b){var c=b,d=c.events;d&&(d.forEach(function(a){c[a]&&(this.eventMap[a]=c[a].bind(c))},this),this.eventSources[a]=c,this.eventSourceList.push(c))},register:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
|
|
b.register.call(b,a)},unregister:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
|
|
b.unregister.call(b,a)},contains:function(a,b){try{return a.contains(b)}catch(c){return!1}},down:function(a){a.bubbles=!0,this.fireEvent("pointerdown",a)},move:function(a){a.bubbles=!0,this.fireEvent("pointermove",a)},up:function(a){a.bubbles=!0,this.fireEvent("pointerup",a)},enter:function(a){a.bubbles=!1,this.fireEvent("pointerenter",a)},leave:function(a){a.bubbles=!1,this.fireEvent("pointerleave",a)},over:function(a){a.bubbles=!0,this.fireEvent("pointerover",a)},out:function(a){a.bubbles=!0,this.fireEvent("pointerout",a)},cancel:function(a){a.bubbles=!0,this.fireEvent("pointercancel",a)},leaveOut:function(a){this.out(a),this.propagate(a,this.leave,!1)},enterOver:function(a){this.over(a),this.propagate(a,this.enter,!0)},eventHandler:function(a){if(!a._handledByPE){var b=a.type,c=this.eventMap&&this.eventMap[b];c&&c(a),a._handledByPE=!0}},listen:function(a,b){b.forEach(function(b){this.addEvent(a,b)},this)},unlisten:function(a,b){b.forEach(function(b){this.removeEvent(a,b)},this)},addEvent:function(a,b){a.addEventListener(b,this.boundHandler)},removeEvent:function(a,b){a.removeEventListener(b,this.boundHandler)},makeEvent:function(b,c){this.captureInfo[c.pointerId]&&(c.relatedTarget=null);var d=new a(b,c);return c.preventDefault&&(d.preventDefault=c.preventDefault),d._target=d._target||c.target,d},fireEvent:function(a,b){var c=this.makeEvent(a,b);return this.dispatchEvent(c)},cloneEvent:function(a){for(var b,c=Object.create(null),d=0;d<q.length;d++)b=q[d],c[b]=a[b]||r[d],!t||"target"!==b&&"relatedTarget"!==b||c[b]instanceof SVGElementInstance&&(c[b]=c[b].correspondingUseElement);return a.preventDefault&&(c.preventDefault=function(){a.preventDefault()}),c},getTarget:function(a){var b=this.captureInfo[a.pointerId];return b?a._target!==b&&a.type in s?void 0:b:a._target},propagate:function(a,b,c){for(var d=a.target,e=[];d!==document&&!d.contains(a.relatedTarget);) if(e.push(d),d=d.parentNode,!d)return;c&&e.reverse(),e.forEach(function(c){a.target=c,b.call(this,a)},this)},setCapture:function(b,c,d){this.captureInfo[b]&&this.releaseCapture(b,d),this.captureInfo[b]=c,this.implicitRelease=this.releaseCapture.bind(this,b,d),document.addEventListener("pointerup",this.implicitRelease),document.addEventListener("pointercancel",this.implicitRelease);var e=new a("gotpointercapture");e.pointerId=b,e._target=c,d||this.asyncDispatchEvent(e)},releaseCapture:function(b,c){var d=this.captureInfo[b];if(d){this.captureInfo[b]=void 0,document.removeEventListener("pointerup",this.implicitRelease),document.removeEventListener("pointercancel",this.implicitRelease);var e=new a("lostpointercapture");e.pointerId=b,e._target=d,c||this.asyncDispatchEvent(e)}},dispatchEvent:/*scope.external.dispatchEvent || */function(a){var b=this.getTarget(a);if(b)return b.dispatchEvent(a)},asyncDispatchEvent:function(a){requestAnimationFrame(this.dispatchEvent.bind(this,a))}};u.boundHandler=u.eventHandler.bind(u);var v={shadow:function(a){if(a)return a.shadowRoot||a.webkitShadowRoot},canTarget:function(a){return a&&Boolean(a.elementFromPoint)},targetingShadow:function(a){var b=this.shadow(a);if(this.canTarget(b))return b},olderShadow:function(a){var b=a.olderShadowRoot;if(!b){var c=a.querySelector("shadow");c&&(b=c.olderShadowRoot)}return b},allShadows:function(a){for(var b=[],c=this.shadow(a);c;)b.push(c),c=this.olderShadow(c);return b},searchRoot:function(a,b,c){if(a){var d,e,f=a.elementFromPoint(b,c);for(e=this.targetingShadow(f);e;){if(d=e.elementFromPoint(b,c)){var g=this.targetingShadow(d);return this.searchRoot(g,b,c)||d} e=this.olderShadow(e)} return f}},owner:function(a){
|
|
for(var b=a;b.parentNode;)b=b.parentNode;
|
|
return b.nodeType!==Node.DOCUMENT_NODE&&b.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&(b=document),b},findTarget:function(a){var b=a.clientX,c=a.clientY,d=this.owner(a.target);
|
|
return d.elementFromPoint(b,c)||(d=document),this.searchRoot(d,b,c)}},w=Array.prototype.forEach.call.bind(Array.prototype.forEach),x=Array.prototype.map.call.bind(Array.prototype.map),y=Array.prototype.slice.call.bind(Array.prototype.slice),z=Array.prototype.filter.call.bind(Array.prototype.filter),A=window.MutationObserver||window.WebKitMutationObserver,B="[touch-action]",C={subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["touch-action"]};c.prototype={watchSubtree:function(a){
|
|
//
|
|
this.observer&&v.canTarget(a)&&this.observer.observe(a,C)},enableOnSubtree:function(a){this.watchSubtree(a),a===document&&"complete"!==document.readyState?this.installOnLoad():this.installNewSubtree(a)},installNewSubtree:function(a){w(this.findElements(a),this.addElement,this)},findElements:function(a){return a.querySelectorAll?a.querySelectorAll(B):[]},removeElement:function(a){this.removeCallback(a)},addElement:function(a){this.addCallback(a)},elementChanged:function(a,b){this.changedCallback(a,b)},concatLists:function(a,b){return a.concat(y(b))},
|
|
installOnLoad:function(){document.addEventListener("readystatechange",function(){"complete"===document.readyState&&this.installNewSubtree(document)}.bind(this))},isElement:function(a){return a.nodeType===Node.ELEMENT_NODE},flattenMutationTree:function(a){
|
|
var b=x(a,this.findElements,this);
|
|
return b.push(z(a,this.isElement)),b.reduce(this.concatLists,[])},mutationWatcher:function(a){a.forEach(this.mutationHandler,this)},mutationHandler:function(a){if("childList"===a.type){var b=this.flattenMutationTree(a.addedNodes);b.forEach(this.addElement,this);var c=this.flattenMutationTree(a.removedNodes);c.forEach(this.removeElement,this)}else"attributes"===a.type&&this.elementChanged(a.target,a.oldValue)}};var D=["none","auto","pan-x","pan-y",{rule:"pan-x pan-y",selectors:["pan-x pan-y","pan-y pan-x"]}],E="",F=window.PointerEvent||window.MSPointerEvent,G=!window.ShadowDOMPolyfill&&document.head.createShadowRoot,H=u.pointermap,I=25,J=[1,4,2,8,16],K=!1;try{K=1===new MouseEvent("test",{buttons:1}).buttons}catch(L){}
|
|
var M,N={POINTER_ID:1,POINTER_TYPE:"mouse",events:["mousedown","mousemove","mouseup","mouseover","mouseout"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},lastTouches:[],
|
|
isEventSimulatedFromTouch:function(a){for(var b,c=this.lastTouches,d=a.clientX,e=a.clientY,f=0,g=c.length;f<g&&(b=c[f]);f++){
|
|
var h=Math.abs(d-b.x),i=Math.abs(e-b.y);if(h<=I&&i<=I)return!0}},prepareEvent:function(a){var b=u.cloneEvent(a),c=b.preventDefault;return b.preventDefault=function(){a.preventDefault(),c()},b.pointerId=this.POINTER_ID,b.isPrimary=!0,b.pointerType=this.POINTER_TYPE,b},prepareButtonsForMove:function(a,b){var c=H.get(this.POINTER_ID);
|
|
0!==b.which&&c?a.buttons=c.buttons:a.buttons=0,b.buttons=a.buttons},mousedown:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);K||(c.buttons=J[c.button],b&&(c.buttons|=b.buttons),a.buttons=c.buttons),H.set(this.POINTER_ID,a),b&&0!==b.buttons?u.move(c):u.down(c)}},mousemove:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.move(b)}},mouseup:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);if(!K){var d=J[c.button];
|
|
c.buttons=b?b.buttons&~d:0,a.buttons=c.buttons}H.set(this.POINTER_ID,a),
|
|
c.buttons&=~J[c.button],0===c.buttons?u.up(c):u.move(c)}},mouseover:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.enterOver(b)}},mouseout:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,u.leaveOut(b)}},cancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.deactivateMouse()},deactivateMouse:function(){H["delete"](this.POINTER_ID)}},O=u.captureInfo,P=v.findTarget.bind(v),Q=v.allShadows.bind(v),R=u.pointermap,S=2500,T=200,U="touch-action",V={events:["touchstart","touchmove","touchend","touchcancel"],register:function(a){M.enableOnSubtree(a)},unregister:function(){},elementAdded:function(a){var b=a.getAttribute(U),c=this.touchActionToScrollType(b);c&&(a._scrollType=c,u.listen(a,this.events),
|
|
Q(a).forEach(function(a){a._scrollType=c,u.listen(a,this.events)},this))},elementRemoved:function(a){a._scrollType=void 0,u.unlisten(a,this.events),
|
|
Q(a).forEach(function(a){a._scrollType=void 0,u.unlisten(a,this.events)},this)},elementChanged:function(a,b){var c=a.getAttribute(U),d=this.touchActionToScrollType(c),e=this.touchActionToScrollType(b);
|
|
d&&e?(a._scrollType=d,Q(a).forEach(function(a){a._scrollType=d},this)):e?this.elementRemoved(a):d&&this.elementAdded(a)},scrollTypes:{EMITTER:"none",XSCROLLER:"pan-x",YSCROLLER:"pan-y",SCROLLER:/^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/},touchActionToScrollType:function(a){var b=a,c=this.scrollTypes;return"none"===b?"none":b===c.XSCROLLER?"X":b===c.YSCROLLER?"Y":c.SCROLLER.exec(b)?"XY":void 0},POINTER_TYPE:"touch",firstTouch:null,isPrimaryTouch:function(a){return this.firstTouch===a.identifier},setPrimaryTouch:function(a){
|
|
(0===R.size||1===R.size&&R.has(1))&&(this.firstTouch=a.identifier,this.firstXY={X:a.clientX,Y:a.clientY},this.scrolling=!1,this.cancelResetClickCount())},removePrimaryPointer:function(a){a.isPrimary&&(this.firstTouch=null,this.firstXY=null,this.resetClickCount())},clickCount:0,resetId:null,resetClickCount:function(){var a=function(){this.clickCount=0,this.resetId=null}.bind(this);this.resetId=setTimeout(a,T)},cancelResetClickCount:function(){this.resetId&&clearTimeout(this.resetId)},typeToButtons:function(a){var b=0;return"touchstart"!==a&&"touchmove"!==a||(b=1),b},touchToPointer:function(a){var b=this.currentTouchEvent,c=u.cloneEvent(a),d=c.pointerId=a.identifier+2;c.target=O[d]||P(c),c.bubbles=!0,c.cancelable=!0,c.detail=this.clickCount,c.button=0,c.buttons=this.typeToButtons(b.type),c.width=2*(a.radiusX||a.webkitRadiusX||0),c.height=2*(a.radiusY||a.webkitRadiusY||0),c.pressure=a.force||a.webkitForce||.5,c.isPrimary=this.isPrimaryTouch(a),c.pointerType=this.POINTER_TYPE,
|
|
c.altKey=b.altKey,c.ctrlKey=b.ctrlKey,c.metaKey=b.metaKey,c.shiftKey=b.shiftKey;
|
|
var e=this;return c.preventDefault=function(){e.scrolling=!1,e.firstXY=null,b.preventDefault()},c},processTouches:function(a,b){var c=a.changedTouches;this.currentTouchEvent=a;for(var d,e=0;e<c.length;e++)d=c[e],b.call(this,this.touchToPointer(d))},
|
|
shouldScroll:function(a){if(this.firstXY){var b,c=a.currentTarget._scrollType;if("none"===c)
|
|
b=!1;else if("XY"===c)
|
|
b=!0;else{var d=a.changedTouches[0],e=c,f="Y"===c?"X":"Y",g=Math.abs(d["client"+e]-this.firstXY[e]),h=Math.abs(d["client"+f]-this.firstXY[f]);
|
|
b=g>=h}return this.firstXY=null,b}},findTouch:function(a,b){for(var c,d=0,e=a.length;d<e&&(c=a[d]);d++)if(c.identifier===b)return!0},
|
|
vacuumTouches:function(a){var b=a.touches;
|
|
if(R.size>=b.length){var c=[];R.forEach(function(a,d){
|
|
if(1!==d&&!this.findTouch(b,d-2)){var e=a.out;c.push(e)}},this),c.forEach(this.cancelOut,this)}},touchstart:function(a){this.vacuumTouches(a),this.setPrimaryTouch(a.changedTouches[0]),this.dedupSynthMouse(a),this.scrolling||(this.clickCount++,this.processTouches(a,this.overDown))},overDown:function(a){R.set(a.pointerId,{target:a.target,out:a,outTarget:a.target}),u.enterOver(a),u.down(a)},touchmove:function(a){this.scrolling||(this.shouldScroll(a)?(this.scrolling=!0,this.touchcancel(a)):(a.preventDefault(),this.processTouches(a,this.moveOverOut)))},moveOverOut:function(a){var b=a,c=R.get(b.pointerId);
|
|
if(c){var d=c.out,e=c.outTarget;u.move(b),d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,
|
|
d.target=e,b.target?(u.leaveOut(d),u.enterOver(b)):(
|
|
b.target=e,b.relatedTarget=null,this.cancelOut(b))),c.out=b,c.outTarget=b.target}},touchend:function(a){this.dedupSynthMouse(a),this.processTouches(a,this.upOut)},upOut:function(a){this.scrolling||(u.up(a),u.leaveOut(a)),this.cleanUpPointer(a)},touchcancel:function(a){this.processTouches(a,this.cancelOut)},cancelOut:function(a){u.cancel(a),u.leaveOut(a),this.cleanUpPointer(a)},cleanUpPointer:function(a){R["delete"](a.pointerId),this.removePrimaryPointer(a)},
|
|
dedupSynthMouse:function(a){var b=N.lastTouches,c=a.changedTouches[0];
|
|
if(this.isPrimaryTouch(c)){
|
|
var d={x:c.clientX,y:c.clientY};b.push(d);var e=function(a,b){var c=a.indexOf(b);c>-1&&a.splice(c,1)}.bind(null,b,d);setTimeout(e,S)}}};M=new c(V.elementAdded,V.elementRemoved,V.elementChanged,V);var W,X,Y,Z=u.pointermap,$=window.MSPointerEvent&&"number"==typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE,_={events:["MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSGotPointerCapture","MSLostPointerCapture"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},POINTER_TYPES:["","unavailable","touch","pen","mouse"],prepareEvent:function(a){var b=a;return $&&(b=u.cloneEvent(a),b.pointerType=this.POINTER_TYPES[a.pointerType]),b},cleanup:function(a){Z["delete"](a)},MSPointerDown:function(a){Z.set(a.pointerId,a);var b=this.prepareEvent(a);u.down(b)},MSPointerMove:function(a){var b=this.prepareEvent(a);u.move(b)},MSPointerUp:function(a){var b=this.prepareEvent(a);u.up(b),this.cleanup(a.pointerId)},MSPointerOut:function(a){var b=this.prepareEvent(a);u.leaveOut(b)},MSPointerOver:function(a){var b=this.prepareEvent(a);u.enterOver(b)},MSPointerCancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.cleanup(a.pointerId)},MSLostPointerCapture:function(a){var b=u.makeEvent("lostpointercapture",a);u.dispatchEvent(b)},MSGotPointerCapture:function(a){var b=u.makeEvent("gotpointercapture",a);u.dispatchEvent(b)}},aa=window.navigator;aa.msPointerEnabled?(W=function(a){i(a),j(this),k(a)&&(u.setCapture(a,this,!0),this.msSetPointerCapture(a))},X=function(a){i(a),u.releaseCapture(a,!0),this.msReleasePointerCapture(a)}):(W=function(a){i(a),j(this),k(a)&&u.setCapture(a,this)},X=function(a){i(a),u.releaseCapture(a)}),Y=function(a){return!!u.captureInfo[a]},g(),h(),l();var ba={dispatcher:u,Installer:c,PointerEvent:a,PointerMap:p,targetFinding:v};return ba});
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
var config = {"dark_mode": false, "show_pads": true, "show_fabrication": false, "show_silkscreen": true, "highlight_pin1": "none", "redraw_on_drag": true, "board_rotation": 0, "checkboxes": "Sourced,Placed", "bom_view": "left-right", "layer_view": "FB", "offset_back_rotation": false, "kicad_text_formatting": true, "fields": ["Value", "Footprint", "mpn"]}
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
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";
|
|
for (var track of pcbdata.tracks[layer]) {
|
|
if (highlight && highlightedNet != track.net) continue;
|
|
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();
|
|
}
|
|
}
|
|
|
|
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.renderTracks) {
|
|
var trackColor = style.getPropertyValue(highlight ? '--track-color-highlight' : '--track-color');
|
|
drawTracks(canvas, layer, trackColor, highlight);
|
|
}
|
|
if (settings.renderZones) {
|
|
var zoneColor = style.getPropertyValue(highlight ? '--zone-color-highlight' : '--zone-color');
|
|
drawZones(canvas, layer, zoneColor, highlight);
|
|
}
|
|
if (highlight && settings.renderPads) {
|
|
var padColor = style.getPropertyValue('--pad-color-highlight');
|
|
var padHoleColor = style.getPropertyValue('--pad-hole-color');
|
|
var ctx = canvas.getContext("2d");
|
|
for (var footprint of pcbdata.footprints) {
|
|
// draw pads
|
|
var padDrawn = false;
|
|
for (var pad of footprint.pads) {
|
|
if (highlightedNet != pad.net) continue;
|
|
if (pad.layers.includes(layer)) {
|
|
drawPad(ctx, pad, padColor, false);
|
|
padDrawn = true;
|
|
}
|
|
}
|
|
if (padDrawn) {
|
|
// redraw all pad holes because some pads may overlap
|
|
for (var pad of footprint.pads) {
|
|
drawPadHole(ctx, pad, padHoleColor);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function drawHighlightsOnLayer(canvasdict, clear = true) {
|
|
if (clear) {
|
|
clearCanvas(canvasdict.highlight);
|
|
}
|
|
if (markedFootprints.size > 0 || highlightedFootprints.length > 0) {
|
|
drawFootprints(canvasdict.highlight, canvasdict.layer,
|
|
canvasdict.transform.s * canvasdict.transform.zoom, true);
|
|
}
|
|
if (highlightedNet !== null) {
|
|
drawNets(canvasdict.highlight, canvasdict.layer, true);
|
|
}
|
|
}
|
|
|
|
function drawHighlights() {
|
|
drawHighlightsOnLayer(allcanvas.front);
|
|
drawHighlightsOnLayer(allcanvas.back);
|
|
}
|
|
|
|
function drawBackground(canvasdict, clear = true) {
|
|
if (clear) {
|
|
clearCanvas(canvasdict.bg);
|
|
clearCanvas(canvasdict.fab);
|
|
clearCanvas(canvasdict.silk);
|
|
}
|
|
|
|
drawNets(canvasdict.bg, canvasdict.layer, false);
|
|
drawFootprints(canvasdict.bg, canvasdict.layer,
|
|
canvasdict.transform.s * canvasdict.transform.zoom, false);
|
|
|
|
drawEdgeCuts(canvasdict.bg, canvasdict.transform.s * canvasdict.transform.zoom);
|
|
|
|
var style = getComputedStyle(topmostdiv);
|
|
var edgeColor = style.getPropertyValue('--silkscreen-edge-color');
|
|
var polygonColor = style.getPropertyValue('--silkscreen-polygon-color');
|
|
var textColor = style.getPropertyValue('--silkscreen-text-color');
|
|
if (settings.renderSilkscreen) {
|
|
drawBgLayer(
|
|
"silkscreen", canvasdict.silk, canvasdict.layer,
|
|
canvasdict.transform.s * canvasdict.transform.zoom,
|
|
edgeColor, polygonColor, textColor);
|
|
}
|
|
edgeColor = style.getPropertyValue('--fabrication-edge-color');
|
|
polygonColor = style.getPropertyValue('--fabrication-polygon-color');
|
|
textColor = style.getPropertyValue('--fabrication-text-color');
|
|
if (settings.renderFabrication) {
|
|
drawBgLayer(
|
|
"fabrication", canvasdict.fab, canvasdict.layer,
|
|
canvasdict.transform.s * canvasdict.transform.zoom,
|
|
edgeColor, polygonColor, textColor);
|
|
}
|
|
}
|
|
|
|
function prepareCanvas(canvas, flip, transform) {
|
|
var ctx = canvas.getContext("2d");
|
|
ctx.setTransform(1, 0, 0, 1, 0, 0);
|
|
ctx.scale(transform.zoom, transform.zoom);
|
|
ctx.translate(transform.panx, transform.pany);
|
|
if (flip) {
|
|
ctx.scale(-1, 1);
|
|
}
|
|
ctx.translate(transform.x, transform.y);
|
|
ctx.rotate(deg2rad(settings.boardRotation + (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("bot").style.height = "";
|
|
break;
|
|
case 'top-bottom':
|
|
document.getElementById("tb-btn").classList.add("depressed");
|
|
document.getElementById("frontcanvas").style.display = "";
|
|
document.getElementById("backcanvas").style.display = "";
|
|
document.getElementById("bot").style.height = "calc(100% - 80px)";
|
|
document.getElementById("bomdiv").classList.remove("split-horizontal");
|
|
document.getElementById("canvasdiv").classList.remove("split-horizontal");
|
|
document.getElementById("frontcanvas").classList.add("split-horizontal");
|
|
document.getElementById("backcanvas").classList.add("split-horizontal");
|
|
if (bomsplit) {
|
|
bomsplit.destroy();
|
|
bomsplit = null;
|
|
canvassplit.destroy();
|
|
canvassplit = null;
|
|
}
|
|
bomsplit = Split(['#bomdiv', '#canvasdiv'], {
|
|
sizes: [50, 50],
|
|
onDragEnd: resizeAll,
|
|
direction: "vertical",
|
|
gutterSize: 5
|
|
});
|
|
canvassplit = Split(['#frontcanvas', '#backcanvas'], {
|
|
sizes: [50, 50],
|
|
gutterSize: 5,
|
|
onDragEnd: resizeAll
|
|
});
|
|
break;
|
|
case 'left-right':
|
|
document.getElementById("lr-btn").classList.add("depressed");
|
|
document.getElementById("frontcanvas").style.display = "";
|
|
document.getElementById("backcanvas").style.display = "";
|
|
document.getElementById("bot").style.height = "calc(100% - 80px)";
|
|
document.getElementById("bomdiv").classList.add("split-horizontal");
|
|
document.getElementById("canvasdiv").classList.add("split-horizontal");
|
|
document.getElementById("frontcanvas").classList.remove("split-horizontal");
|
|
document.getElementById("backcanvas").classList.remove("split-horizontal");
|
|
if (bomsplit) {
|
|
bomsplit.destroy();
|
|
bomsplit = null;
|
|
canvassplit.destroy();
|
|
canvassplit = null;
|
|
}
|
|
bomsplit = Split(['#bomdiv', '#canvasdiv'], {
|
|
sizes: [50, 50],
|
|
onDragEnd: resizeAll,
|
|
gutterSize: 5
|
|
});
|
|
canvassplit = Split(['#frontcanvas', '#backcanvas'], {
|
|
sizes: [50, 50],
|
|
gutterSize: 5,
|
|
direction: "vertical",
|
|
onDragEnd: resizeAll
|
|
});
|
|
}
|
|
settings.bomlayout = layout;
|
|
writeStorage("bomlayout", layout);
|
|
changeCanvasLayout(settings.canvaslayout);
|
|
}
|
|
|
|
function changeBomMode(mode) {
|
|
document.getElementById("bom-grouped-btn").classList.remove("depressed");
|
|
document.getElementById("bom-ungrouped-btn").classList.remove("depressed");
|
|
document.getElementById("bom-netlist-btn").classList.remove("depressed");
|
|
var chkbxs = document.getElementsByClassName("visibility_checkbox");
|
|
|
|
switch (mode) {
|
|
case 'grouped':
|
|
document.getElementById("bom-grouped-btn").classList.add("depressed");
|
|
for (var i = 0; i < chkbxs.length; i++) {
|
|
chkbxs[i].disabled = false;
|
|
}
|
|
break;
|
|
case 'ungrouped':
|
|
document.getElementById("bom-ungrouped-btn").classList.add("depressed");
|
|
for (var i = 0; i < chkbxs.length; i++) {
|
|
chkbxs[i].disabled = false;
|
|
}
|
|
break;
|
|
case 'netlist':
|
|
document.getElementById("bom-netlist-btn").classList.add("depressed");
|
|
for (var i = 0; i < chkbxs.length; i++) {
|
|
chkbxs[i].disabled = true;
|
|
}
|
|
}
|
|
|
|
writeStorage("bommode", mode);
|
|
if (mode != settings.bommode) {
|
|
settings.bommode = mode;
|
|
bomSortFunction = null;
|
|
currentSortColumn = null;
|
|
currentSortOrder = null;
|
|
clearHighlightedFootprints();
|
|
}
|
|
populateBomTable();
|
|
}
|
|
|
|
function focusFilterField() {
|
|
focusInputField(document.getElementById("filter"));
|
|
}
|
|
|
|
function focusRefLookupField() {
|
|
focusInputField(document.getElementById("reflookup"));
|
|
}
|
|
|
|
function toggleBomCheckbox(bomrowid, checkboxnum) {
|
|
if (!bomrowid || checkboxnum > settings.checkboxes.length) {
|
|
return;
|
|
}
|
|
var bomrow = document.getElementById(bomrowid);
|
|
var checkbox = bomrow.childNodes[checkboxnum].childNodes[0];
|
|
checkbox.checked = !checkbox.checked;
|
|
checkbox.indeterminate = false;
|
|
checkbox.onchange();
|
|
}
|
|
|
|
function checkBomCheckbox(bomrowid, checkboxname) {
|
|
var checkboxnum = 0;
|
|
while (checkboxnum < settings.checkboxes.length &&
|
|
settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
|
|
checkboxnum++;
|
|
}
|
|
if (!bomrowid || checkboxnum >= settings.checkboxes.length) {
|
|
return;
|
|
}
|
|
var bomrow = document.getElementById(bomrowid);
|
|
var checkbox = bomrow.childNodes[checkboxnum + 1].childNodes[0];
|
|
checkbox.checked = true;
|
|
checkbox.indeterminate = false;
|
|
checkbox.onchange();
|
|
}
|
|
|
|
function setBomCheckboxes(value) {
|
|
writeStorage("bomCheckboxes", value);
|
|
settings.checkboxes = value.split(",").map((e) => e.trim()).filter((e) => e);
|
|
prepCheckboxes();
|
|
populateMarkWhenCheckedOptions();
|
|
setMarkWhenChecked(settings.markWhenChecked);
|
|
}
|
|
|
|
function setMarkWhenChecked(value) {
|
|
writeStorage("markWhenChecked", value);
|
|
settings.markWhenChecked = value;
|
|
markedFootprints.clear();
|
|
for (var ref of (value ? getStoredCheckboxRefs(value) : [])) {
|
|
markedFootprints.add(ref);
|
|
}
|
|
populateBomTable();
|
|
drawHighlights();
|
|
}
|
|
|
|
function prepCheckboxes() {
|
|
var table = document.getElementById("checkbox-stats");
|
|
while (table.childElementCount > 1) {
|
|
table.removeChild(table.lastChild);
|
|
}
|
|
if (settings.checkboxes.length) {
|
|
table.style.display = "";
|
|
} else {
|
|
table.style.display = "none";
|
|
}
|
|
for (var checkbox of settings.checkboxes) {
|
|
var tr = document.createElement("TR");
|
|
var td = document.createElement("TD");
|
|
td.innerHTML = checkbox;
|
|
tr.appendChild(td);
|
|
td = document.createElement("TD");
|
|
td.id = "checkbox-stats-" + checkbox;
|
|
var progressbar = document.createElement("div");
|
|
progressbar.classList.add("bar");
|
|
td.appendChild(progressbar);
|
|
var text = document.createElement("div");
|
|
text.classList.add("text");
|
|
td.appendChild(text);
|
|
tr.appendChild(td);
|
|
table.appendChild(tr);
|
|
updateCheckboxStats(checkbox);
|
|
}
|
|
}
|
|
|
|
function populateMarkWhenCheckedOptions() {
|
|
var container = document.getElementById("markWhenCheckedContainer");
|
|
|
|
if (settings.checkboxes.length == 0) {
|
|
container.parentElement.style.display = "none";
|
|
return;
|
|
}
|
|
|
|
container.innerHTML = '';
|
|
container.parentElement.style.display = "inline-block";
|
|
|
|
function createOption(name, displayName) {
|
|
var id = "markWhenChecked-" + name;
|
|
|
|
var div = document.createElement("div");
|
|
div.classList.add("radio-container");
|
|
|
|
var input = document.createElement("input");
|
|
input.type = "radio";
|
|
input.name = "markWhenChecked";
|
|
input.value = name;
|
|
input.id = id;
|
|
input.onchange = () => setMarkWhenChecked(name);
|
|
div.appendChild(input);
|
|
|
|
// Preserve the selected element when the checkboxes change
|
|
if (name == settings.markWhenChecked) {
|
|
input.checked = true;
|
|
}
|
|
|
|
var label = document.createElement("label");
|
|
label.innerHTML = displayName;
|
|
label.htmlFor = id;
|
|
div.appendChild(label);
|
|
|
|
container.appendChild(div);
|
|
}
|
|
createOption("", "None");
|
|
for (var checkbox of settings.checkboxes) {
|
|
createOption(checkbox, checkbox);
|
|
}
|
|
}
|
|
|
|
function updateCheckboxStats(checkbox) {
|
|
var checked = getStoredCheckboxRefs(checkbox).size;
|
|
var total = pcbdata.footprints.length - pcbdata.bom.skipped.length;
|
|
var percent = checked * 100.0 / total;
|
|
var td = document.getElementById("checkbox-stats-" + checkbox);
|
|
td.firstChild.style.width = percent + "%";
|
|
td.lastChild.innerHTML = checked + "/" + total + " (" + Math.round(percent) + "%)";
|
|
}
|
|
|
|
function constrain(number, min, max){
|
|
return Math.min(Math.max(parseInt(number), min), max);
|
|
}
|
|
|
|
document.onkeydown = function (e) {
|
|
switch (e.key) {
|
|
case "n":
|
|
if (document.activeElement.type == "text") {
|
|
return;
|
|
}
|
|
if (currentHighlightedRowId !== null) {
|
|
checkBomCheckbox(currentHighlightedRowId, "placed");
|
|
highlightNextRow();
|
|
e.preventDefault();
|
|
}
|
|
break;
|
|
case "ArrowUp":
|
|
highlightPreviousRow();
|
|
e.preventDefault();
|
|
break;
|
|
case "ArrowDown":
|
|
highlightNextRow();
|
|
e.preventDefault();
|
|
break;
|
|
case "ArrowLeft":
|
|
case "ArrowRight":
|
|
if (document.activeElement.type != "text"){
|
|
e.preventDefault();
|
|
let boardRotationElement = document.getElementById("boardRotation")
|
|
settings.boardRotation = parseInt(boardRotationElement.value); // degrees / 5
|
|
if (e.key == "ArrowLeft"){
|
|
settings.boardRotation += 3; // 15 degrees
|
|
}
|
|
else{
|
|
settings.boardRotation -= 3;
|
|
}
|
|
settings.boardRotation = constrain(settings.boardRotation, boardRotationElement.min, boardRotationElement.max);
|
|
boardRotationElement.value = settings.boardRotation
|
|
setBoardRotation(settings.boardRotation);
|
|
}
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
if (e.altKey) {
|
|
switch (e.key) {
|
|
case "f":
|
|
focusFilterField();
|
|
e.preventDefault();
|
|
break;
|
|
case "r":
|
|
focusRefLookupField();
|
|
e.preventDefault();
|
|
break;
|
|
case "z":
|
|
changeBomLayout("bom-only");
|
|
e.preventDefault();
|
|
break;
|
|
case "x":
|
|
changeBomLayout("left-right");
|
|
e.preventDefault();
|
|
break;
|
|
case "c":
|
|
changeBomLayout("top-bottom");
|
|
e.preventDefault();
|
|
break;
|
|
case "v":
|
|
changeCanvasLayout("F");
|
|
e.preventDefault();
|
|
break;
|
|
case "b":
|
|
changeCanvasLayout("FB");
|
|
e.preventDefault();
|
|
break;
|
|
case "n":
|
|
changeCanvasLayout("B");
|
|
e.preventDefault();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
if (e.key >= '1' && e.key <= '9') {
|
|
toggleBomCheckbox(currentHighlightedRowId, parseInt(e.key));
|
|
e.preventDefault();
|
|
}
|
|
}
|
|
}
|
|
|
|
function hideNetlistButton() {
|
|
document.getElementById("bom-ungrouped-btn").classList.remove("middle-button");
|
|
document.getElementById("bom-ungrouped-btn").classList.add("right-most-button");
|
|
document.getElementById("bom-netlist-btn").style.display = "none";
|
|
}
|
|
|
|
window.onload = function (e) {
|
|
initUtils();
|
|
initRender();
|
|
initStorage();
|
|
initDefaults();
|
|
cleanGutters();
|
|
populateMetadata();
|
|
dbgdiv = document.getElementById("dbg");
|
|
bom = document.getElementById("bombody");
|
|
bomhead = document.getElementById("bomhead");
|
|
filter = "";
|
|
reflookup = "";
|
|
if (!("nets" in pcbdata)) {
|
|
hideNetlistButton();
|
|
}
|
|
initDone = true;
|
|
setBomCheckboxes(document.getElementById("bomCheckboxes").value);
|
|
// Triggers render
|
|
changeBomLayout(settings.bomlayout);
|
|
|
|
// Users may leave fullscreen without touching the checkbox. Uncheck.
|
|
document.addEventListener('fullscreenchange', () => {
|
|
if (!document.fullscreenElement)
|
|
document.getElementById('fullscreenCheckbox').checked = false;
|
|
});
|
|
}
|
|
|
|
window.onresize = resizeAll;
|
|
window.matchMedia("print").addListener(resizeAll);
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
</script>
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<div id="topmostdiv" class="topmostdiv">
|
|
<div id="top">
|
|
<div style="float: right; height: 100%;">
|
|
<div class="hideonprint menu" style="float: right; top: 8px;">
|
|
<button class="menubtn"></button>
|
|
<div class="menu-content">
|
|
<label class="menu-label menu-label-top" style="width: calc(50% - 18px)">
|
|
<input id="darkmodeCheckbox" type="checkbox" onchange="setDarkMode(this.checked)">
|
|
Dark mode
|
|
</label><!-- This comment eats space! All of it!
|
|
--><label class="menu-label menu-label-top" style="width: calc(50% - 17px); border-left: 0;">
|
|
<input id="fullscreenCheckbox" type="checkbox" onchange="setFullscreen(this.checked)">
|
|
Full Screen
|
|
</label>
|
|
<label class="menu-label" style="width: calc(50% - 18px)">
|
|
<input id="fabricationCheckbox" type="checkbox" checked onchange="fabricationVisible(this.checked)">
|
|
Fab layer
|
|
</label><!-- This comment eats space! All of it!
|
|
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
|
|
<input id="silkscreenCheckbox" type="checkbox" checked onchange="silkscreenVisible(this.checked)">
|
|
Silkscreen
|
|
</label>
|
|
<label class="menu-label" style="width: calc(50% - 18px)">
|
|
<input id="referencesCheckbox" type="checkbox" checked onchange="referencesVisible(this.checked)">
|
|
References
|
|
</label><!-- This comment eats space! All of it!
|
|
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
|
|
<input id="valuesCheckbox" type="checkbox" checked onchange="valuesVisible(this.checked)">
|
|
Values
|
|
</label>
|
|
<div id="tracksAndZonesCheckboxes">
|
|
<label class="menu-label" style="width: calc(50% - 18px)">
|
|
<input id="tracksCheckbox" type="checkbox" checked onchange="tracksVisible(this.checked)">
|
|
Tracks
|
|
</label><!-- This comment eats space! All of it!
|
|
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
|
|
<input id="zonesCheckbox" type="checkbox" checked onchange="zonesVisible(this.checked)">
|
|
Zones
|
|
</label>
|
|
</div>
|
|
<label class="menu-label" style="width: calc(50% - 18px)">
|
|
<input id="padsCheckbox" type="checkbox" checked onchange="padsVisible(this.checked)">
|
|
Pads
|
|
</label><!-- This comment eats space! All of it!
|
|
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
|
|
<input id="dnpOutlineCheckbox" type="checkbox" checked onchange="dnpOutline(this.checked)">
|
|
DNP outlined
|
|
</label>
|
|
<label class="menu-label">
|
|
<input id="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"
|
|
style="float: right; position: relative; top: 8px">
|
|
<button id="fl-btn" class="left-most-button" onclick="changeCanvasLayout('F')"
|
|
title="Front only">F
|
|
</button>
|
|
<button id="fb-btn" class="middle-button" onclick="changeCanvasLayout('FB')"
|
|
title="Front and Back">FB
|
|
</button>
|
|
<button id="bl-btn" class="right-most-button" onclick="changeCanvasLayout('B')"
|
|
title="Back only">B
|
|
</button>
|
|
</div>
|
|
<div class="button-container hideonprint"
|
|
style="float: right; position: relative; top: 8px">
|
|
<button id="bom-btn" class="left-most-button" onclick="changeBomLayout('bom-only')"
|
|
title="BOM only"></button>
|
|
<button id="lr-btn" class="middle-button" onclick="changeBomLayout('left-right')"
|
|
title="BOM left, drawings right"></button>
|
|
<button id="tb-btn" class="right-most-button" onclick="changeBomLayout('top-bottom')"
|
|
title="BOM top, drawings bot"></button>
|
|
</div>
|
|
<div class="button-container hideonprint"
|
|
style="float: right; position: relative; top: 8px">
|
|
<button id="bom-grouped-btn" class="left-most-button" onclick="changeBomMode('grouped')"
|
|
title="Grouped BOM"></button>
|
|
<button id="bom-ungrouped-btn" class="middle-button" onclick="changeBomMode('ungrouped')"
|
|
title="Ungrouped BOM"></button>
|
|
<button id="bom-netlist-btn" class="right-most-button" onclick="changeBomMode('netlist')"
|
|
title="Netlist"></button>
|
|
</div>
|
|
<div class="hideonprint menu" style="float: right; top: 8px;">
|
|
<button class="statsbtn"></button>
|
|
<div class="menu-content">
|
|
<table class="stats">
|
|
<tbody>
|
|
<tr>
|
|
<td width="40%">Board stats</td>
|
|
<td>Front</td>
|
|
<td>Back</td>
|
|
<td>Total</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Components</td>
|
|
<td id="stats-components-front">~</td>
|
|
<td id="stats-components-back">~</td>
|
|
<td id="stats-components-total">~</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Groups</td>
|
|
<td id="stats-groups-front">~</td>
|
|
<td id="stats-groups-back">~</td>
|
|
<td id="stats-groups-total">~</td>
|
|
</tr>
|
|
<tr>
|
|
<td>SMD pads</td>
|
|
<td id="stats-smd-pads-front">~</td>
|
|
<td id="stats-smd-pads-back">~</td>
|
|
<td id="stats-smd-pads-total">~</td>
|
|
</tr>
|
|
<tr>
|
|
<td>TH pads</td>
|
|
<td colspan=3 id="stats-th-pads">~</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<table class="stats">
|
|
<col width="40%"/><col />
|
|
<tbody id="checkbox-stats">
|
|
<tr>
|
|
<td colspan=2 style="border-top: 0">Checkboxes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="hideonprint menu" style="float: right; top: 8px;">
|
|
<button class="iobtn"></button>
|
|
<div class="menu-content">
|
|
<div class="menu-label menu-label-top">
|
|
<div style="margin-left: 5px;">Save board image</div>
|
|
<div class="flexbox">
|
|
<input id="render-save-width" class="menu-textbox" type="text" value="1000" placeholder="Width"
|
|
style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
|
|
<span>X</span>
|
|
<input id="render-save-height" class="menu-textbox" type="text" value="1000" placeholder="Height"
|
|
style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
|
|
</div>
|
|
<label>
|
|
<input id="render-save-transparent" type="checkbox">
|
|
Transparent background
|
|
</label>
|
|
<div class="flexbox">
|
|
<button class="savebtn" onclick="saveImage('F')">Front</button>
|
|
<button class="savebtn" onclick="saveImage('B')">Back</button>
|
|
</div>
|
|
</div>
|
|
<div class="menu-label">
|
|
<span style="margin-left: 5px;">Config and checkbox state</span>
|
|
<div class="flexbox">
|
|
<button class="savebtn" onclick="saveSettings()">Export</button>
|
|
<button class="savebtn" onclick="loadSettings()">Import</button>
|
|
<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 id="fileinfodiv" style="overflow: auto;">
|
|
<table class="fileinfo">
|
|
<tbody>
|
|
<tr>
|
|
<td id="title" class="title" style="width: 70%">
|
|
Title
|
|
</td>
|
|
<td id="revision" class="title" style="width: 30%">
|
|
Revision
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td id="company">
|
|
Company
|
|
</td>
|
|
<td id="filedate">
|
|
Date
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div id="bot" class="split" style="height: calc(100% - 80px)">
|
|
<div id="bomdiv" class="split split-horizontal">
|
|
<div style="width: 100%">
|
|
<input id="reflookup" class="textbox searchbox reflookup hideonprint" type="text" placeholder="Ref lookup"
|
|
oninput="updateRefLookup(this.value)">
|
|
<input id="filter" class="textbox searchbox filter hideonprint" type="text" placeholder="Filter"
|
|
oninput="updateFilter(this.value)">
|
|
<div class="button-container hideonprint" style="float: left; margin: 0;">
|
|
<button id="copy" title="Copy bom table to clipboard"
|
|
onclick="saveBomTable('clipboard')"></button>
|
|
</div>
|
|
</div>
|
|
<div id="dbg"></div>
|
|
<table class="bom" id="bomtable">
|
|
<thead id="bomhead">
|
|
</thead>
|
|
<tbody id="bombody">
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
<div id="canvasdiv" class="split split-horizontal">
|
|
<div id="frontcanvas" class="split" touch-action="none" style="overflow: hidden">
|
|
<div style="position: relative; width: 100%; height: 100%;">
|
|
<canvas id="F_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
|
|
<canvas id="F_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
|
|
<canvas id="F_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
|
|
<canvas id="F_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
|
|
</div>
|
|
</div>
|
|
<div id="backcanvas" class="split" touch-action="none" style="overflow: hidden">
|
|
<div style="position: relative; width: 100%; height: 100%;">
|
|
<canvas id="B_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
|
|
<canvas id="B_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
|
|
<canvas id="B_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
|
|
<canvas id="B_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
</body>
|
|
|
|
</html>
|