4346 lines
344 KiB
HTML
4346 lines
344 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;
|
|
}
|
|
|
|
|
|
</style>
|
|
<script type="text/javascript" >
|
|
///////////////////////////////////////////////
|
|
/*
|
|
Split.js - v1.3.5
|
|
MIT License
|
|
https://github.com/nathancahill/Split.js
|
|
*/
|
|
!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):e.Split=t()}(this,function(){"use strict";var e=window,t=e.document,n="addEventListener",i="removeEventListener",r="getBoundingClientRect",s=function(){return!1},o=e.attachEvent&&!e[n],a=["","-webkit-","-moz-","-o-"].filter(function(e){var n=t.createElement("div");return n.style.cssText="width:"+e+"calc(9px)",!!n.style.length}).shift()+"calc",l=function(e){return"string"==typeof e||e instanceof String?t.querySelector(e):e};return function(u,c){function z(e,t,n){var i=A(y,t,n);Object.keys(i).forEach(function(t){return e.style[t]=i[t]})}function h(e,t){var n=B(y,t);Object.keys(n).forEach(function(t){return e.style[t]=n[t]})}function f(e){var t=E[this.a],n=E[this.b],i=t.size+n.size;t.size=e/this.size*i,n.size=i-e/this.size*i,z(t.element,t.size,this.aGutterSize),z(n.element,n.size,this.bGutterSize)}function m(e){var t;this.dragging&&((t="touches"in e?e.touches[0][b]-this.start:e[b]-this.start)<=E[this.a].minSize+M+this.aGutterSize?t=E[this.a].minSize+this.aGutterSize:t>=this.size-(E[this.b].minSize+M+this.bGutterSize)&&(t=this.size-(E[this.b].minSize+this.bGutterSize)),f.call(this,t),c.onDrag&&c.onDrag())}function g(){var e=E[this.a].element,t=E[this.b].element;this.size=e[r]()[y]+t[r]()[y]+this.aGutterSize+this.bGutterSize,this.start=e[r]()[G]}function d(){var t=this,n=E[t.a].element,r=E[t.b].element;t.dragging&&c.onDragEnd&&c.onDragEnd(),t.dragging=!1,e[i]("mouseup",t.stop),e[i]("touchend",t.stop),e[i]("touchcancel",t.stop),t.parent[i]("mousemove",t.move),t.parent[i]("touchmove",t.move),delete t.stop,delete t.move,n[i]("selectstart",s),n[i]("dragstart",s),r[i]("selectstart",s),r[i]("dragstart",s),n.style.userSelect="",n.style.webkitUserSelect="",n.style.MozUserSelect="",n.style.pointerEvents="",r.style.userSelect="",r.style.webkitUserSelect="",r.style.MozUserSelect="",r.style.pointerEvents="",t.gutter.style.cursor="",t.parent.style.cursor=""}function S(t){var i=this,r=E[i.a].element,o=E[i.b].element;!i.dragging&&c.onDragStart&&c.onDragStart(),t.preventDefault(),i.dragging=!0,i.move=m.bind(i),i.stop=d.bind(i),e[n]("mouseup",i.stop),e[n]("touchend",i.stop),e[n]("touchcancel",i.stop),i.parent[n]("mousemove",i.move),i.parent[n]("touchmove",i.move),r[n]("selectstart",s),r[n]("dragstart",s),o[n]("selectstart",s),o[n]("dragstart",s),r.style.userSelect="none",r.style.webkitUserSelect="none",r.style.MozUserSelect="none",r.style.pointerEvents="none",o.style.userSelect="none",o.style.webkitUserSelect="none",o.style.MozUserSelect="none",o.style.pointerEvents="none",i.gutter.style.cursor=j,i.parent.style.cursor=j,g.call(i)}function v(e){e.forEach(function(t,n){if(n>0){var i=F[n-1],r=E[i.a],s=E[i.b];r.size=e[n-1],s.size=t,z(r.element,r.size,i.aGutterSize),z(s.element,s.size,i.bGutterSize)}})}function p(){F.forEach(function(e){e.parent.removeChild(e.gutter),E[e.a].element.style[y]="",E[e.b].element.style[y]=""})}void 0===c&&(c={});var y,b,G,E,w=l(u[0]).parentNode,D=e.getComputedStyle(w).flexDirection,U=c.sizes||u.map(function(){return 100/u.length}),k=void 0!==c.minSize?c.minSize:100,x=Array.isArray(k)?k:u.map(function(){return k}),L=void 0!==c.gutterSize?c.gutterSize:10,M=void 0!==c.snapOffset?c.snapOffset:30,O=c.direction||"horizontal",j=c.cursor||("horizontal"===O?"ew-resize":"ns-resize"),C=c.gutter||function(e,n){var i=t.createElement("div");return i.className="gutter gutter-"+n,i},A=c.elementStyle||function(e,t,n){var i={};return"string"==typeof t||t instanceof String?i[e]=t:i[e]=o?t+"%":a+"("+t+"% - "+n+"px)",i},B=c.gutterStyle||function(e,t){return n={},n[e]=t+"px",n;var n};"horizontal"===O?(y="width","clientWidth",b="clientX",G="left","paddingLeft"):"vertical"===O&&(y="height","clientHeight",b="clientY",G="top","paddingTop");var F=[];return E=u.map(function(e,t){var i,s={element:l(e),size:U[t],minSize:x[t]};if(t>0&&(i={a:t-1,b:t,dragging:!1,isFirst:1===t,isLast:t===u.length-1,direction:O,parent:w},i.aGutterSize=L,i.bGutterSize=L,i.isFirst&&(i.aGutterSize=L/2),i.isLast&&(i.bGutterSize=L/2),"row-reverse"===D||"column-reverse"===D)){var a=i.a;i.a=i.b,i.b=a}if(!o&&t>0){var c=C(t,O);h(c,L),c[n]("mousedown",S.bind(i)),c[n]("touchstart",S.bind(i)),w.insertBefore(c,s.element),i.gutter=c}0===t||t===u.length-1?z(s.element,s.size,L/2):z(s.element,s.size,L);var f=s.element[r]()[y];return f<s.minSize&&(s.minSize=f),t>0&&F.push(i),s}),o?{setSizes:v,destroy:p}:{setSizes:v,getSizes:function(){return E.map(function(e){return e.size})},collapse:function(e){if(e===F.length){var t=F[e-1];g.call(t),o||f.call(t,t.size-t.bGutterSize)}else{var n=F[e];g.call(n),o||f.call(n,n.aGutterSize)}},destroy:p}}});
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
// Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>
|
|
// This work is free. You can redistribute it and/or modify it
|
|
// under the terms of the WTFPL, Version 2
|
|
// For more information see LICENSE.txt or http://www.wtfpl.net/
|
|
//
|
|
// For more information, the home page:
|
|
// http://pieroxy.net/blog/pages/lz-string/testing.html
|
|
//
|
|
// LZ-based compression algorithm, version 1.4.4
|
|
var LZString=function(){var o=String.fromCharCode,i={};var n={decompressFromBase64:function(o){return null==o?"":""==o?null:n._decompress(o.length,32,function(n){return function(o,n){if(!i[o]){i[o]={};for(var t=0;t<o.length;t++)i[o][o.charAt(t)]=t}return i[o][n]}("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=",o.charAt(n))})},_decompress:function(i,n,t){var r,e,a,s,p,u,l,f=[],c=4,d=4,h=3,v="",g=[],m={val:t(0),position:n,index:1};for(r=0;r<3;r+=1)f[r]=r;for(a=0,p=Math.pow(2,2),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;l=o(a);break;case 2:return""}for(f[3]=l,e=l,g.push(l);;){if(m.index>i)return"";for(a=0,p=Math.pow(2,h),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;switch(l=a){case 0:for(a=0,p=Math.pow(2,8),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 1:for(a=0,p=Math.pow(2,16),u=1;u!=p;)s=m.val&m.position,m.position>>=1,0==m.position&&(m.position=n,m.val=t(m.index++)),a|=(s>0?1:0)*u,u<<=1;f[d++]=o(a),l=d-1,c--;break;case 2:return g.join("")}if(0==c&&(c=Math.pow(2,h),h++),f[l])v=f[l];else{if(l!==d)return null;v=e+e.charAt(0)}g.push(v),f[d++]=e+v.charAt(0),e=v,0==--c&&(c=Math.pow(2,h),h++)}}};return n}();"function"==typeof define&&define.amd?define(function(){return LZString}):"undefined"!=typeof module&&null!=module?module.exports=LZString:"undefined"!=typeof angular&&null!=angular&&angular.module("LZString",[]).factory("LZString",function(){return LZString});
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
/*!
|
|
* PEP v0.4.3 | https://github.com/jquery/PEP
|
|
* Copyright jQuery Foundation and other contributors | http://jquery.org/license
|
|
*/
|
|
!function(a,b){"object"==typeof exports&&"undefined"!=typeof module?module.exports=b():"function"==typeof define&&define.amd?define(b):a.PointerEventsPolyfill=b()}(this,function(){"use strict";function a(a,b){b=b||Object.create(null);var c=document.createEvent("Event");c.initEvent(a,b.bubbles||!1,b.cancelable||!1);
|
|
for(var d,e=2;e<m.length;e++)d=m[e],c[d]=b[d]||n[e];c.buttons=b.buttons||0;
|
|
var f=0;return f=b.pressure&&c.buttons?b.pressure:c.buttons?.5:0,c.x=c.clientX,c.y=c.clientY,c.pointerId=b.pointerId||0,c.width=b.width||0,c.height=b.height||0,c.pressure=f,c.tiltX=b.tiltX||0,c.tiltY=b.tiltY||0,c.twist=b.twist||0,c.tangentialPressure=b.tangentialPressure||0,c.pointerType=b.pointerType||"",c.hwTimestamp=b.hwTimestamp||0,c.isPrimary=b.isPrimary||!1,c}function b(){this.array=[],this.size=0}function c(a,b,c,d){this.addCallback=a.bind(d),this.removeCallback=b.bind(d),this.changedCallback=c.bind(d),A&&(this.observer=new A(this.mutationWatcher.bind(this)))}function d(a){return"body /shadow-deep/ "+e(a)}function e(a){return'[touch-action="'+a+'"]'}function f(a){return"{ -ms-touch-action: "+a+"; touch-action: "+a+"; }"}function g(){if(F){D.forEach(function(a){String(a)===a?(E+=e(a)+f(a)+"\n",G&&(E+=d(a)+f(a)+"\n")):(E+=a.selectors.map(e)+f(a.rule)+"\n",G&&(E+=a.selectors.map(d)+f(a.rule)+"\n"))});var a=document.createElement("style");a.textContent=E,document.head.appendChild(a)}}function h(){if(!window.PointerEvent){if(window.PointerEvent=a,window.navigator.msPointerEnabled){var b=window.navigator.msMaxTouchPoints;Object.defineProperty(window.navigator,"maxTouchPoints",{value:b,enumerable:!0}),u.registerSource("ms",_)}else Object.defineProperty(window.navigator,"maxTouchPoints",{value:0,enumerable:!0}),u.registerSource("mouse",N),void 0!==window.ontouchstart&&u.registerSource("touch",V);u.register(document)}}function i(a){if(!u.pointermap.has(a)){var b=new Error("InvalidPointerId");throw b.name="InvalidPointerId",b}}function j(a){for(var b=a.parentNode;b&&b!==a.ownerDocument;)b=b.parentNode;if(!b){var c=new Error("InvalidStateError");throw c.name="InvalidStateError",c}}function k(a){var b=u.pointermap.get(a);return 0!==b.buttons}function l(){window.Element&&!Element.prototype.setPointerCapture&&Object.defineProperties(Element.prototype,{setPointerCapture:{value:W},releasePointerCapture:{value:X},hasPointerCapture:{value:Y}})}
|
|
var m=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","pageX","pageY"],n=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0],o=window.Map&&window.Map.prototype.forEach,p=o?Map:b;b.prototype={set:function(a,b){return void 0===b?this["delete"](a):(this.has(a)||this.size++,void(this.array[a]=b))},has:function(a){return void 0!==this.array[a]},"delete":function(a){this.has(a)&&(delete this.array[a],this.size--)},get:function(a){return this.array[a]},clear:function(){this.array.length=0,this.size=0},forEach:function(a,b){return this.array.forEach(function(c,d){a.call(b,c,d,this)},this)}};var q=["bubbles","cancelable","view","detail","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","buttons","pointerId","width","height","pressure","tiltX","tiltY","pointerType","hwTimestamp","isPrimary","type","target","currentTarget","which","pageX","pageY","timeStamp"],r=[!1,!1,null,null,0,0,0,0,!1,!1,!1,!1,0,null,0,0,0,0,0,0,0,"",0,!1,"",null,null,0,0,0,0],s={pointerover:1,pointerout:1,pointerenter:1,pointerleave:1},t="undefined"!=typeof SVGElementInstance,u={pointermap:new p,eventMap:Object.create(null),captureInfo:Object.create(null),eventSources:Object.create(null),eventSourceList:[],registerSource:function(a,b){var c=b,d=c.events;d&&(d.forEach(function(a){c[a]&&(this.eventMap[a]=c[a].bind(c))},this),this.eventSources[a]=c,this.eventSourceList.push(c))},register:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
|
|
b.register.call(b,a)},unregister:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
|
|
b.unregister.call(b,a)},contains:function(a,b){try{return a.contains(b)}catch(c){return!1}},down:function(a){a.bubbles=!0,this.fireEvent("pointerdown",a)},move:function(a){a.bubbles=!0,this.fireEvent("pointermove",a)},up:function(a){a.bubbles=!0,this.fireEvent("pointerup",a)},enter:function(a){a.bubbles=!1,this.fireEvent("pointerenter",a)},leave:function(a){a.bubbles=!1,this.fireEvent("pointerleave",a)},over:function(a){a.bubbles=!0,this.fireEvent("pointerover",a)},out:function(a){a.bubbles=!0,this.fireEvent("pointerout",a)},cancel:function(a){a.bubbles=!0,this.fireEvent("pointercancel",a)},leaveOut:function(a){this.out(a),this.propagate(a,this.leave,!1)},enterOver:function(a){this.over(a),this.propagate(a,this.enter,!0)},eventHandler:function(a){if(!a._handledByPE){var b=a.type,c=this.eventMap&&this.eventMap[b];c&&c(a),a._handledByPE=!0}},listen:function(a,b){b.forEach(function(b){this.addEvent(a,b)},this)},unlisten:function(a,b){b.forEach(function(b){this.removeEvent(a,b)},this)},addEvent:function(a,b){a.addEventListener(b,this.boundHandler)},removeEvent:function(a,b){a.removeEventListener(b,this.boundHandler)},makeEvent:function(b,c){this.captureInfo[c.pointerId]&&(c.relatedTarget=null);var d=new a(b,c);return c.preventDefault&&(d.preventDefault=c.preventDefault),d._target=d._target||c.target,d},fireEvent:function(a,b){var c=this.makeEvent(a,b);return this.dispatchEvent(c)},cloneEvent:function(a){for(var b,c=Object.create(null),d=0;d<q.length;d++)b=q[d],c[b]=a[b]||r[d],!t||"target"!==b&&"relatedTarget"!==b||c[b]instanceof SVGElementInstance&&(c[b]=c[b].correspondingUseElement);return a.preventDefault&&(c.preventDefault=function(){a.preventDefault()}),c},getTarget:function(a){var b=this.captureInfo[a.pointerId];return b?a._target!==b&&a.type in s?void 0:b:a._target},propagate:function(a,b,c){for(var d=a.target,e=[];d!==document&&!d.contains(a.relatedTarget);) if(e.push(d),d=d.parentNode,!d)return;c&&e.reverse(),e.forEach(function(c){a.target=c,b.call(this,a)},this)},setCapture:function(b,c,d){this.captureInfo[b]&&this.releaseCapture(b,d),this.captureInfo[b]=c,this.implicitRelease=this.releaseCapture.bind(this,b,d),document.addEventListener("pointerup",this.implicitRelease),document.addEventListener("pointercancel",this.implicitRelease);var e=new a("gotpointercapture");e.pointerId=b,e._target=c,d||this.asyncDispatchEvent(e)},releaseCapture:function(b,c){var d=this.captureInfo[b];if(d){this.captureInfo[b]=void 0,document.removeEventListener("pointerup",this.implicitRelease),document.removeEventListener("pointercancel",this.implicitRelease);var e=new a("lostpointercapture");e.pointerId=b,e._target=d,c||this.asyncDispatchEvent(e)}},dispatchEvent:/*scope.external.dispatchEvent || */function(a){var b=this.getTarget(a);if(b)return b.dispatchEvent(a)},asyncDispatchEvent:function(a){requestAnimationFrame(this.dispatchEvent.bind(this,a))}};u.boundHandler=u.eventHandler.bind(u);var v={shadow:function(a){if(a)return a.shadowRoot||a.webkitShadowRoot},canTarget:function(a){return a&&Boolean(a.elementFromPoint)},targetingShadow:function(a){var b=this.shadow(a);if(this.canTarget(b))return b},olderShadow:function(a){var b=a.olderShadowRoot;if(!b){var c=a.querySelector("shadow");c&&(b=c.olderShadowRoot)}return b},allShadows:function(a){for(var b=[],c=this.shadow(a);c;)b.push(c),c=this.olderShadow(c);return b},searchRoot:function(a,b,c){if(a){var d,e,f=a.elementFromPoint(b,c);for(e=this.targetingShadow(f);e;){if(d=e.elementFromPoint(b,c)){var g=this.targetingShadow(d);return this.searchRoot(g,b,c)||d} e=this.olderShadow(e)} return f}},owner:function(a){
|
|
for(var b=a;b.parentNode;)b=b.parentNode;
|
|
return b.nodeType!==Node.DOCUMENT_NODE&&b.nodeType!==Node.DOCUMENT_FRAGMENT_NODE&&(b=document),b},findTarget:function(a){var b=a.clientX,c=a.clientY,d=this.owner(a.target);
|
|
return d.elementFromPoint(b,c)||(d=document),this.searchRoot(d,b,c)}},w=Array.prototype.forEach.call.bind(Array.prototype.forEach),x=Array.prototype.map.call.bind(Array.prototype.map),y=Array.prototype.slice.call.bind(Array.prototype.slice),z=Array.prototype.filter.call.bind(Array.prototype.filter),A=window.MutationObserver||window.WebKitMutationObserver,B="[touch-action]",C={subtree:!0,childList:!0,attributes:!0,attributeOldValue:!0,attributeFilter:["touch-action"]};c.prototype={watchSubtree:function(a){
|
|
//
|
|
this.observer&&v.canTarget(a)&&this.observer.observe(a,C)},enableOnSubtree:function(a){this.watchSubtree(a),a===document&&"complete"!==document.readyState?this.installOnLoad():this.installNewSubtree(a)},installNewSubtree:function(a){w(this.findElements(a),this.addElement,this)},findElements:function(a){return a.querySelectorAll?a.querySelectorAll(B):[]},removeElement:function(a){this.removeCallback(a)},addElement:function(a){this.addCallback(a)},elementChanged:function(a,b){this.changedCallback(a,b)},concatLists:function(a,b){return a.concat(y(b))},
|
|
installOnLoad:function(){document.addEventListener("readystatechange",function(){"complete"===document.readyState&&this.installNewSubtree(document)}.bind(this))},isElement:function(a){return a.nodeType===Node.ELEMENT_NODE},flattenMutationTree:function(a){
|
|
var b=x(a,this.findElements,this);
|
|
return b.push(z(a,this.isElement)),b.reduce(this.concatLists,[])},mutationWatcher:function(a){a.forEach(this.mutationHandler,this)},mutationHandler:function(a){if("childList"===a.type){var b=this.flattenMutationTree(a.addedNodes);b.forEach(this.addElement,this);var c=this.flattenMutationTree(a.removedNodes);c.forEach(this.removeElement,this)}else"attributes"===a.type&&this.elementChanged(a.target,a.oldValue)}};var D=["none","auto","pan-x","pan-y",{rule:"pan-x pan-y",selectors:["pan-x pan-y","pan-y pan-x"]}],E="",F=window.PointerEvent||window.MSPointerEvent,G=!window.ShadowDOMPolyfill&&document.head.createShadowRoot,H=u.pointermap,I=25,J=[1,4,2,8,16],K=!1;try{K=1===new MouseEvent("test",{buttons:1}).buttons}catch(L){}
|
|
var M,N={POINTER_ID:1,POINTER_TYPE:"mouse",events:["mousedown","mousemove","mouseup","mouseover","mouseout"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},lastTouches:[],
|
|
isEventSimulatedFromTouch:function(a){for(var b,c=this.lastTouches,d=a.clientX,e=a.clientY,f=0,g=c.length;f<g&&(b=c[f]);f++){
|
|
var h=Math.abs(d-b.x),i=Math.abs(e-b.y);if(h<=I&&i<=I)return!0}},prepareEvent:function(a){var b=u.cloneEvent(a),c=b.preventDefault;return b.preventDefault=function(){a.preventDefault(),c()},b.pointerId=this.POINTER_ID,b.isPrimary=!0,b.pointerType=this.POINTER_TYPE,b},prepareButtonsForMove:function(a,b){var c=H.get(this.POINTER_ID);
|
|
0!==b.which&&c?a.buttons=c.buttons:a.buttons=0,b.buttons=a.buttons},mousedown:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);K||(c.buttons=J[c.button],b&&(c.buttons|=b.buttons),a.buttons=c.buttons),H.set(this.POINTER_ID,a),b&&0!==b.buttons?u.move(c):u.down(c)}},mousemove:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.move(b)}},mouseup:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=H.get(this.POINTER_ID),c=this.prepareEvent(a);if(!K){var d=J[c.button];
|
|
c.buttons=b?b.buttons&~d:0,a.buttons=c.buttons}H.set(this.POINTER_ID,a),
|
|
c.buttons&=~J[c.button],0===c.buttons?u.up(c):u.move(c)}},mouseover:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,H.set(this.POINTER_ID,a),u.enterOver(b)}},mouseout:function(a){if(!this.isEventSimulatedFromTouch(a)){var b=this.prepareEvent(a);K||this.prepareButtonsForMove(b,a),b.button=-1,u.leaveOut(b)}},cancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.deactivateMouse()},deactivateMouse:function(){H["delete"](this.POINTER_ID)}},O=u.captureInfo,P=v.findTarget.bind(v),Q=v.allShadows.bind(v),R=u.pointermap,S=2500,T=200,U="touch-action",V={events:["touchstart","touchmove","touchend","touchcancel"],register:function(a){M.enableOnSubtree(a)},unregister:function(){},elementAdded:function(a){var b=a.getAttribute(U),c=this.touchActionToScrollType(b);c&&(a._scrollType=c,u.listen(a,this.events),
|
|
Q(a).forEach(function(a){a._scrollType=c,u.listen(a,this.events)},this))},elementRemoved:function(a){a._scrollType=void 0,u.unlisten(a,this.events),
|
|
Q(a).forEach(function(a){a._scrollType=void 0,u.unlisten(a,this.events)},this)},elementChanged:function(a,b){var c=a.getAttribute(U),d=this.touchActionToScrollType(c),e=this.touchActionToScrollType(b);
|
|
d&&e?(a._scrollType=d,Q(a).forEach(function(a){a._scrollType=d},this)):e?this.elementRemoved(a):d&&this.elementAdded(a)},scrollTypes:{EMITTER:"none",XSCROLLER:"pan-x",YSCROLLER:"pan-y",SCROLLER:/^(?:pan-x pan-y)|(?:pan-y pan-x)|auto$/},touchActionToScrollType:function(a){var b=a,c=this.scrollTypes;return"none"===b?"none":b===c.XSCROLLER?"X":b===c.YSCROLLER?"Y":c.SCROLLER.exec(b)?"XY":void 0},POINTER_TYPE:"touch",firstTouch:null,isPrimaryTouch:function(a){return this.firstTouch===a.identifier},setPrimaryTouch:function(a){
|
|
(0===R.size||1===R.size&&R.has(1))&&(this.firstTouch=a.identifier,this.firstXY={X:a.clientX,Y:a.clientY},this.scrolling=!1,this.cancelResetClickCount())},removePrimaryPointer:function(a){a.isPrimary&&(this.firstTouch=null,this.firstXY=null,this.resetClickCount())},clickCount:0,resetId:null,resetClickCount:function(){var a=function(){this.clickCount=0,this.resetId=null}.bind(this);this.resetId=setTimeout(a,T)},cancelResetClickCount:function(){this.resetId&&clearTimeout(this.resetId)},typeToButtons:function(a){var b=0;return"touchstart"!==a&&"touchmove"!==a||(b=1),b},touchToPointer:function(a){var b=this.currentTouchEvent,c=u.cloneEvent(a),d=c.pointerId=a.identifier+2;c.target=O[d]||P(c),c.bubbles=!0,c.cancelable=!0,c.detail=this.clickCount,c.button=0,c.buttons=this.typeToButtons(b.type),c.width=2*(a.radiusX||a.webkitRadiusX||0),c.height=2*(a.radiusY||a.webkitRadiusY||0),c.pressure=a.force||a.webkitForce||.5,c.isPrimary=this.isPrimaryTouch(a),c.pointerType=this.POINTER_TYPE,
|
|
c.altKey=b.altKey,c.ctrlKey=b.ctrlKey,c.metaKey=b.metaKey,c.shiftKey=b.shiftKey;
|
|
var e=this;return c.preventDefault=function(){e.scrolling=!1,e.firstXY=null,b.preventDefault()},c},processTouches:function(a,b){var c=a.changedTouches;this.currentTouchEvent=a;for(var d,e=0;e<c.length;e++)d=c[e],b.call(this,this.touchToPointer(d))},
|
|
shouldScroll:function(a){if(this.firstXY){var b,c=a.currentTarget._scrollType;if("none"===c)
|
|
b=!1;else if("XY"===c)
|
|
b=!0;else{var d=a.changedTouches[0],e=c,f="Y"===c?"X":"Y",g=Math.abs(d["client"+e]-this.firstXY[e]),h=Math.abs(d["client"+f]-this.firstXY[f]);
|
|
b=g>=h}return this.firstXY=null,b}},findTouch:function(a,b){for(var c,d=0,e=a.length;d<e&&(c=a[d]);d++)if(c.identifier===b)return!0},
|
|
vacuumTouches:function(a){var b=a.touches;
|
|
if(R.size>=b.length){var c=[];R.forEach(function(a,d){
|
|
if(1!==d&&!this.findTouch(b,d-2)){var e=a.out;c.push(e)}},this),c.forEach(this.cancelOut,this)}},touchstart:function(a){this.vacuumTouches(a),this.setPrimaryTouch(a.changedTouches[0]),this.dedupSynthMouse(a),this.scrolling||(this.clickCount++,this.processTouches(a,this.overDown))},overDown:function(a){R.set(a.pointerId,{target:a.target,out:a,outTarget:a.target}),u.enterOver(a),u.down(a)},touchmove:function(a){this.scrolling||(this.shouldScroll(a)?(this.scrolling=!0,this.touchcancel(a)):(a.preventDefault(),this.processTouches(a,this.moveOverOut)))},moveOverOut:function(a){var b=a,c=R.get(b.pointerId);
|
|
if(c){var d=c.out,e=c.outTarget;u.move(b),d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,
|
|
d.target=e,b.target?(u.leaveOut(d),u.enterOver(b)):(
|
|
b.target=e,b.relatedTarget=null,this.cancelOut(b))),c.out=b,c.outTarget=b.target}},touchend:function(a){this.dedupSynthMouse(a),this.processTouches(a,this.upOut)},upOut:function(a){this.scrolling||(u.up(a),u.leaveOut(a)),this.cleanUpPointer(a)},touchcancel:function(a){this.processTouches(a,this.cancelOut)},cancelOut:function(a){u.cancel(a),u.leaveOut(a),this.cleanUpPointer(a)},cleanUpPointer:function(a){R["delete"](a.pointerId),this.removePrimaryPointer(a)},
|
|
dedupSynthMouse:function(a){var b=N.lastTouches,c=a.changedTouches[0];
|
|
if(this.isPrimaryTouch(c)){
|
|
var d={x:c.clientX,y:c.clientY};b.push(d);var e=function(a,b){var c=a.indexOf(b);c>-1&&a.splice(c,1)}.bind(null,b,d);setTimeout(e,S)}}};M=new c(V.elementAdded,V.elementRemoved,V.elementChanged,V);var W,X,Y,Z=u.pointermap,$=window.MSPointerEvent&&"number"==typeof window.MSPointerEvent.MSPOINTER_TYPE_MOUSE,_={events:["MSPointerDown","MSPointerMove","MSPointerUp","MSPointerOut","MSPointerOver","MSPointerCancel","MSGotPointerCapture","MSLostPointerCapture"],register:function(a){u.listen(a,this.events)},unregister:function(a){u.unlisten(a,this.events)},POINTER_TYPES:["","unavailable","touch","pen","mouse"],prepareEvent:function(a){var b=a;return $&&(b=u.cloneEvent(a),b.pointerType=this.POINTER_TYPES[a.pointerType]),b},cleanup:function(a){Z["delete"](a)},MSPointerDown:function(a){Z.set(a.pointerId,a);var b=this.prepareEvent(a);u.down(b)},MSPointerMove:function(a){var b=this.prepareEvent(a);u.move(b)},MSPointerUp:function(a){var b=this.prepareEvent(a);u.up(b),this.cleanup(a.pointerId)},MSPointerOut:function(a){var b=this.prepareEvent(a);u.leaveOut(b)},MSPointerOver:function(a){var b=this.prepareEvent(a);u.enterOver(b)},MSPointerCancel:function(a){var b=this.prepareEvent(a);u.cancel(b),this.cleanup(a.pointerId)},MSLostPointerCapture:function(a){var b=u.makeEvent("lostpointercapture",a);u.dispatchEvent(b)},MSGotPointerCapture:function(a){var b=u.makeEvent("gotpointercapture",a);u.dispatchEvent(b)}},aa=window.navigator;aa.msPointerEnabled?(W=function(a){i(a),j(this),k(a)&&(u.setCapture(a,this,!0),this.msSetPointerCapture(a))},X=function(a){i(a),u.releaseCapture(a,!0),this.msReleasePointerCapture(a)}):(W=function(a){i(a),j(this),k(a)&&u.setCapture(a,this)},X=function(a){i(a),u.releaseCapture(a)}),Y=function(a){return!!u.captureInfo[a]},g(),h(),l();var ba={dispatcher:u,Installer:c,PointerEvent:a,PointerMap:p,targetFinding:v};return ba});
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
var config = {"dark_mode": false, "show_pads": true, "show_fabrication": false, "show_silkscreen": true, "highlight_pin1": false, "redraw_on_drag": true, "board_rotation": 0, "checkboxes": "Sourced,Placed", "bom_view": "left-right", "layer_view": "FB", "fields": ["Value", "Footprint"]}
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
var pcbdata = JSON.parse(LZString.decompressFromBase64("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7ET1NoEEDIn1ptYi/WmZ1OAKRYI+AAKaiJ1HwAAoAGgACgAp9TxSkdwA9aeq0qFpNYjRmkBNKGaRy09xpkzTa6nItOhafmAWFpeDThWlLNPVaeU0yKR+ljqmlWGIjALWIzwRqgB4ABkADQAI60mlptYiJuAJtJAAOMgA5pazSAGlotIxab002VpXQBaGirNPWaWhUztp+rS1WkttLFadC0gVpzdS4WkytJFacwABcALTTqBAdtN1aV20g1pXQAaJqF1IMgOKUw/hADSgGkgNLAaRA00RpsAismmRtK0AJY0t8AzbSPYBttIHaR00pdpw7Se2mCACkAIwIusAVLTpiA+COwcQC0ycAnzSu6nZtJAADgkpwAUAAhAAwSEraVgkstpFbSq2k1tLraa60ptpPLThgB4tLSaRQ0vBp1DTaGn0NMYacS05hpuTTumkcNKpaVw0mlpPDTL6nX1PvaUy08dpebSxGnTtMLaSAADcABzSJ2kqtIIaTO08jpY7TyOlkAAXae00+sRxliZ1FYJJ34QHgPfhR9SsEnZZIn4Vvw58RZki6EC+NJTaSM0tNpYzSM2kNNME6bY0kAAI/DIAysNK34eDonSJrkot+FTqK7JHtkmTpmdTXJTwABO6AZAEdpUew4hGydJQAPJ0xTptZUVOlqdKRAKnU2sq2nTZLArtMEAFsgYTpYnTU2kstPE6RM0yTp89Sk2n4tPSae7U1Dp2TSWGn71LXqSeAQppEgBimm8NPpaYJ079praBLACLtK6abe02jpZYBH2motKhgfAAJPg3bS4umEdOTaY500TpznTgmmctLCac203CAeLSTWk1VDNaRa07QAVrSm6k2tNk6UGAB1pTrSXWkNtPdaTy03cADnTsulZdP8aXU0vLpPLT+AAtNKo6cc01Vpd7TmAC3gG66cR0hZpI7SOICMCMi6dF0rZpsXSyOkwQEvaZN0vVpOzT+ukgAB3AIwIpOpggA4mkxdMW6bR0q4A43TVACStJEab10mjpM3T0umtNPm6cu00bpAzSc2nDdILadi05bp9HS6wD5gApKQV0/5pE6it+FH1OCgNG0pIArrTR4jNtOZgM10/xprXTamm5dMzaV0AH+iPdSROlstJTae10kHpggAMICMCNZqfAANhUggAEeksKngANOo0NprNSt+EsKhoAOKUqdRogB4ADilJQAGAGQ/hUAZ4GnoNOeaQx0pjp5+iWOlsdI46WmALjp8AAeOl8dIE6aD0jzpcHTCWmm5JJaX508lp69SKABBdJC6Xh0hlpzABSwD/dOGaZD0xzp0PS3Omw9OLaSAAGgAVPTB2k3tK26WR0osAovTWWnMAHZaS50rlpv3TLukZdJa6eL07LpkvTuWnoNPo6Rr0pzpbXTgelS9OYAERAVXpjjSoekW9KN6cQ06TppvTAenptNc6Q70wQAuUAbelm9KB6RJ093pVvSKenO9P16eb033pzbT1wBe9Jd6Zr0jrpZkitoDh9KD6T70t3pofSZemB9PV6Xb0kPpPLTboCx9JT6RL0+3pofSdenJ9N16cH0hPp6fSTekQ9Kz6Qb0nPpc9TAAxwBlsqeRUyapv1ScKlBCM/WARU3Cp2lSzPGJVO8qfR44apbQjW+k0VNb6QxUstRpVSxqmEFIOqeTUjipk1SaqlxVPB0XxU3mpaFTC0lbaKWqUP0mHIk1T9Kkm5IOqQv01CpclTVgDBVKUqWWolSpBNA1Knb9M0qRhU7SpYyi9snfRwsqQNk28AKlTTKn8AGv6ZZU8cRntS7KmJVLv6U5U7ypL4TdKkYVI1qWNUzypuNFZKm+VLaEaNUjfpgVSy1Hb9Ln6WCAcKpLYjIqlxVOiqWWowAZkUiEqnZCIn6WNUi+JH1SralZVK6qeIAX6p2VSDqmFVJLKasAHapMnTKanZCMH6ahU8qplVSZOnVVLmqegM+/pW2i4BlP+PsqWgM+gZDHighEdVJaqRgMrZavVSnKnr9Mika1UrvpYJhpqmcVJ1qXFUmapQQiqBmD2JHsYlU7gZ6WSmxGcVJeqbdUtSp9NTXqm4JJbEZ9Uuipe0S01EqDN+qeoM8qpgNSYamuJPcSbfkXkMegzp1FzqLUqcTU+sREOjodFqVPJqUmorSJGgyPqkEDNsGVlk3LJ6FTOalqDPrEfzUoApHNSZ+l9ZNFqU309LJmDioalS1KTUTLUwcpFlidACQDMVqXFU5Wp2QjVamGDK/6ahUrWp44ihBkm1JUGQbUgbJrcM3alPVPNqXwMxgZNtSShBiDIdqUzUx/pb8iXakpDK9qV3052kbtSX/H4MG4qeivPwAqFSVqkl6PWqTDUrapXbQXqmSFNvyIdUmGpJ1SnqnBDJuqY9UtapWgyIanNDJsGRDUqGpONT4ACy1KxqWtUyYZeAyiQAvVMJqfgKF6pRAzwxDU1OsKRPwroZigzMsmSlLWqf5UwfxQAZSenwAD3KZ4AcMAgAYCADwVPgAAw0j/hkAZoAwLAAzAPRYWgAkNAgAAAA"))
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
/* 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 copyToClipboard() {
|
|
var text = '';
|
|
for (var node of bomhead.childNodes[0].childNodes) {
|
|
if (node.firstChild) {
|
|
text = text + node.firstChild.nodeValue;
|
|
}
|
|
if (node != bomhead.childNodes[0].lastChild) {
|
|
text += '\t';
|
|
}
|
|
}
|
|
text += '\n';
|
|
for (var row of bombody.childNodes) {
|
|
for (var cell of row.childNodes) {
|
|
for (var node of cell.childNodes) {
|
|
if (node.nodeName == "INPUT") {
|
|
if (node.checked) {
|
|
text = text + '✓';
|
|
}
|
|
} else if (node.nodeName == "MARK") {
|
|
text = text + node.firstChild.nodeValue;
|
|
} else {
|
|
text = text + node.nodeValue;
|
|
}
|
|
}
|
|
if (cell != row.lastChild) {
|
|
text += '\t';
|
|
}
|
|
}
|
|
text += '\n';
|
|
}
|
|
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 removeGutterNode(node) {
|
|
for (var i = 0; i < node.childNodes.length; i++) {
|
|
if (node.childNodes[i].classList &&
|
|
node.childNodes[i].classList.contains("gutter")) {
|
|
node.removeChild(node.childNodes[i]);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
function cleanGutters() {
|
|
removeGutterNode(document.getElementById("bot"));
|
|
removeGutterNode(document.getElementById("canvasdiv"));
|
|
}
|
|
|
|
var units = {
|
|
prefixes: {
|
|
giga: ["G", "g", "giga", "Giga", "GIGA"],
|
|
mega: ["M", "mega", "Mega", "MEGA"],
|
|
kilo: ["K", "k", "kilo", "Kilo", "KILO"],
|
|
milli: ["m", "milli", "Milli", "MILLI"],
|
|
micro: ["U", "u", "micro", "Micro", "MICRO", "μ", "µ"], // different utf8 μ
|
|
nano: ["N", "n", "nano", "Nano", "NANO"],
|
|
pico: ["P", "p", "pico", "Pico", "PICO"],
|
|
},
|
|
unitsShort: ["R", "r", "Ω", "F", "f", "H", "h"],
|
|
unitsLong: [
|
|
"OHM", "Ohm", "ohm", "ohms",
|
|
"FARAD", "Farad", "farad",
|
|
"HENRY", "Henry", "henry"
|
|
],
|
|
getMultiplier: function(s) {
|
|
if (this.prefixes.giga.includes(s)) return 1e9;
|
|
if (this.prefixes.mega.includes(s)) return 1e6;
|
|
if (this.prefixes.kilo.includes(s)) return 1e3;
|
|
if (this.prefixes.milli.includes(s)) return 1e-3;
|
|
if (this.prefixes.micro.includes(s)) return 1e-6;
|
|
if (this.prefixes.nano.includes(s)) return 1e-9;
|
|
if (this.prefixes.pico.includes(s)) return 1e-12;
|
|
return 1;
|
|
},
|
|
valueRegex: null,
|
|
}
|
|
|
|
function initUtils() {
|
|
var allPrefixes = units.prefixes.giga
|
|
.concat(units.prefixes.mega)
|
|
.concat(units.prefixes.kilo)
|
|
.concat(units.prefixes.milli)
|
|
.concat(units.prefixes.micro)
|
|
.concat(units.prefixes.nano)
|
|
.concat(units.prefixes.pico);
|
|
var allUnits = units.unitsShort.concat(units.unitsLong);
|
|
units.valueRegex = new RegExp("^([0-9\.]+)" +
|
|
"\\s*(" + allPrefixes.join("|") + ")?" +
|
|
"(" + allUnits.join("|") + ")?" +
|
|
"(\\b.*)?$", "");
|
|
units.valueAltRegex = new RegExp("^([0-9]*)" +
|
|
"(" + units.unitsShort.join("|") + ")?" +
|
|
"([GgMmKkUuNnPp])?" +
|
|
"([0-9]*)" +
|
|
"(\\b.*)?$", "");
|
|
if (config.fields.includes("Value")) {
|
|
var index = config.fields.indexOf("Value");
|
|
pcbdata.bom["parsedValues"] = {};
|
|
for (var id in pcbdata.bom.fields) {
|
|
pcbdata.bom.parsedValues[id] = parseValue(pcbdata.bom.fields[id][index])
|
|
}
|
|
}
|
|
}
|
|
|
|
function parseValue(val, ref) {
|
|
var inferUnit = (unit, ref) => {
|
|
if (unit) {
|
|
unit = unit.toLowerCase();
|
|
if (unit == 'Ω' || unit == "ohm" || unit == "ohms") {
|
|
unit = 'r';
|
|
}
|
|
unit = unit[0];
|
|
} else {
|
|
ref = /^([a-z]+)\d+$/i.exec(ref);
|
|
if (ref) {
|
|
ref = ref[1].toLowerCase();
|
|
if (ref == "c") unit = 'f';
|
|
else if (ref == "l") unit = 'h';
|
|
else if (ref == "r" || ref == "rv") unit = 'r';
|
|
else unit = null;
|
|
}
|
|
}
|
|
return unit;
|
|
};
|
|
val = val.replace(/,/g, "");
|
|
var match = units.valueRegex.exec(val);
|
|
var unit;
|
|
if (match) {
|
|
val = parseFloat(match[1]);
|
|
if (match[2]) {
|
|
val = val * units.getMultiplier(match[2]);
|
|
}
|
|
unit = inferUnit(match[3], ref);
|
|
if (!unit) return null;
|
|
else return {
|
|
val: val,
|
|
unit: unit,
|
|
extra: match[4],
|
|
}
|
|
}
|
|
match = units.valueAltRegex.exec(val);
|
|
if (match && (match[1] || match[4])) {
|
|
val = parseFloat(match[1] + "." + match[4]);
|
|
if (match[3]) {
|
|
val = val * units.getMultiplier(match[3]);
|
|
}
|
|
unit = inferUnit(match[2], ref);
|
|
if (!unit) return null;
|
|
else return {
|
|
val: val,
|
|
unit: unit,
|
|
extra: match[5],
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function valueCompare(a, b, stra, strb) {
|
|
if (a === null && b === null) {
|
|
// Failed to parse both values, compare them as strings.
|
|
if (stra != strb) return stra > strb ? 1 : -1;
|
|
else return 0;
|
|
} else if (a === null) {
|
|
return 1;
|
|
} else if (b === null) {
|
|
return -1;
|
|
} else {
|
|
if (a.unit != b.unit) return a.unit > b.unit ? 1 : -1;
|
|
else if (a.val != b.val) return a.val > b.val ? 1 : -1;
|
|
else if (a.extra != b.extra) return a.extra > b.extra ? 1 : -1;
|
|
else return 0;
|
|
}
|
|
}
|
|
|
|
function validateSaveImgDimension(element) {
|
|
var valid = false;
|
|
var intValue = 0;
|
|
if (/^[1-9]\d*$/.test(element.value)) {
|
|
intValue = parseInt(element.value);
|
|
if (intValue <= 16000) {
|
|
valid = true;
|
|
}
|
|
}
|
|
if (valid) {
|
|
element.classList.remove("invalid");
|
|
} else {
|
|
element.classList.add("invalid");
|
|
}
|
|
return intValue;
|
|
}
|
|
|
|
function saveImage(layer) {
|
|
var width = validateSaveImgDimension(document.getElementById("render-save-width"));
|
|
var height = validateSaveImgDimension(document.getElementById("render-save-height"));
|
|
var bgcolor = null;
|
|
if (!document.getElementById("render-save-transparent").checked) {
|
|
var style = getComputedStyle(topmostdiv);
|
|
bgcolor = style.getPropertyValue("background-color");
|
|
}
|
|
if (!width || !height) return;
|
|
|
|
// Prepare image
|
|
var canvas = document.createElement("canvas");
|
|
var layerdict = {
|
|
transform: {
|
|
x: 0,
|
|
y: 0,
|
|
s: 1,
|
|
panx: 0,
|
|
pany: 0,
|
|
zoom: 1,
|
|
},
|
|
bg: canvas,
|
|
fab: canvas,
|
|
silk: canvas,
|
|
highlight: canvas,
|
|
layer: layer,
|
|
}
|
|
// Do the rendering
|
|
recalcLayerScale(layerdict, width, height);
|
|
prepareLayer(layerdict);
|
|
clearCanvas(canvas, bgcolor);
|
|
drawBackground(layerdict, false);
|
|
drawHighlightsOnLayer(layerdict, false);
|
|
|
|
// Save image
|
|
var imgdata = canvas.toDataURL("image/png");
|
|
|
|
var filename = pcbdata.metadata.title;
|
|
if (pcbdata.metadata.revision) {
|
|
filename += `.${pcbdata.metadata.revision}`;
|
|
}
|
|
filename += `.${layer}.png`;
|
|
saveFile(filename, dataURLtoBlob(imgdata));
|
|
}
|
|
|
|
function saveSettings() {
|
|
var data = {
|
|
type: "InteractiveHtmlBom settings",
|
|
version: 1,
|
|
pcbmetadata: pcbdata.metadata,
|
|
settings: settings,
|
|
}
|
|
var blob = new Blob([JSON.stringify(data, null, 4)], {
|
|
type: "application/json"
|
|
});
|
|
saveFile(`${pcbdata.metadata.title}.settings.json`, blob);
|
|
}
|
|
|
|
function loadSettings() {
|
|
var input = document.createElement("input");
|
|
input.type = "file";
|
|
input.accept = ".settings.json";
|
|
input.onchange = function(e) {
|
|
var file = e.target.files[0];
|
|
var reader = new FileReader();
|
|
reader.onload = readerEvent => {
|
|
var content = readerEvent.target.result;
|
|
var newSettings;
|
|
try {
|
|
newSettings = JSON.parse(content);
|
|
} catch (e) {
|
|
alert("Selected file is not InteractiveHtmlBom settings file.");
|
|
return;
|
|
}
|
|
if (newSettings.type != "InteractiveHtmlBom settings") {
|
|
alert("Selected file is not InteractiveHtmlBom settings file.");
|
|
return;
|
|
}
|
|
var metadataMatches = newSettings.hasOwnProperty("pcbmetadata");
|
|
if (metadataMatches) {
|
|
for (var k in pcbdata.metadata) {
|
|
if (!newSettings.pcbmetadata.hasOwnProperty(k) || newSettings.pcbmetadata[k] != pcbdata.metadata[k]) {
|
|
metadataMatches = false;
|
|
}
|
|
}
|
|
}
|
|
if (!metadataMatches) {
|
|
var currentMetadata = JSON.stringify(pcbdata.metadata, null, 4);
|
|
var fileMetadata = JSON.stringify(newSettings.pcbmetadata, null, 4);
|
|
if (!confirm(
|
|
`Settins file metadata does not match current metadata.\n\n` +
|
|
`Page metadata:\n${currentMetadata}\n\n` +
|
|
`Settings file metadata:\n${fileMetadata}\n\n` +
|
|
`Press OK if you would like to import settings anyway.`)) {
|
|
return;
|
|
}
|
|
}
|
|
overwriteSettings(newSettings.settings);
|
|
}
|
|
reader.readAsText(file, 'UTF-8');
|
|
}
|
|
input.click();
|
|
}
|
|
|
|
function overwriteSettings(newSettings) {
|
|
initDone = false;
|
|
Object.assign(settings, newSettings);
|
|
writeStorage("bomlayout", settings.bomlayout);
|
|
writeStorage("bommode", settings.bommode);
|
|
writeStorage("canvaslayout", settings.canvaslayout);
|
|
writeStorage("bomCheckboxes", settings.checkboxes.join(","));
|
|
document.getElementById("bomCheckboxes").value = settings.checkboxes.join(",");
|
|
for (var checkbox of settings.checkboxes) {
|
|
writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
|
|
}
|
|
writeStorage("markWhenChecked", settings.markWhenChecked);
|
|
padsVisible(settings.renderPads);
|
|
document.getElementById("padsCheckbox").checked = settings.renderPads;
|
|
fabricationVisible(settings.renderFabrication);
|
|
document.getElementById("fabricationCheckbox").checked = settings.renderFabrication;
|
|
silkscreenVisible(settings.renderSilkscreen);
|
|
document.getElementById("silkscreenCheckbox").checked = settings.renderSilkscreen;
|
|
referencesVisible(settings.renderReferences);
|
|
document.getElementById("referencesCheckbox").checked = settings.renderReferences;
|
|
valuesVisible(settings.renderValues);
|
|
document.getElementById("valuesCheckbox").checked = settings.renderValues;
|
|
tracksVisible(settings.renderTracks);
|
|
document.getElementById("tracksCheckbox").checked = settings.renderTracks;
|
|
zonesVisible(settings.renderZones);
|
|
document.getElementById("zonesCheckbox").checked = settings.renderZones;
|
|
dnpOutline(settings.renderDnpOutline);
|
|
document.getElementById("dnpOutlineCheckbox").checked = settings.renderDnpOutline;
|
|
setRedrawOnDrag(settings.redrawOnDrag);
|
|
document.getElementById("dragCheckbox").checked = settings.redrawOnDrag;
|
|
setDarkMode(settings.darkMode);
|
|
document.getElementById("darkmodeCheckbox").checked = settings.darkMode;
|
|
setHighlightPin1(settings.highlightpin1);
|
|
document.getElementById("highlightpin1Checkbox").checked = settings.highlightpin1;
|
|
showFootprints(settings.show_footprints);
|
|
writeStorage("boardRotation", settings.boardRotation);
|
|
document.getElementById("boardRotation").value = settings.boardRotation / 5;
|
|
document.getElementById("rotationDegree").textContent = settings.boardRotation;
|
|
initDone = true;
|
|
prepCheckboxes();
|
|
changeBomLayout(settings.bomlayout);
|
|
}
|
|
|
|
function saveFile(filename, blob) {
|
|
var link = document.createElement("a");
|
|
var objurl = URL.createObjectURL(blob);
|
|
link.download = filename;
|
|
link.href = objurl;
|
|
link.click();
|
|
}
|
|
|
|
function dataURLtoBlob(dataurl) {
|
|
var arr = dataurl.split(','),
|
|
mime = arr[0].match(/:(.*?);/)[1],
|
|
bstr = atob(arr[1]),
|
|
n = bstr.length,
|
|
u8arr = new Uint8Array(n);
|
|
while (n--) {
|
|
u8arr[n] = bstr.charCodeAt(n);
|
|
}
|
|
return new Blob([u8arr], {
|
|
type: mime
|
|
});
|
|
}
|
|
|
|
var settings = {
|
|
canvaslayout: "default",
|
|
bomlayout: "default",
|
|
bommode: "grouped",
|
|
checkboxes: [],
|
|
checkboxStoredRefs: {},
|
|
darkMode: false,
|
|
highlightpin1: false,
|
|
redrawOnDrag: true,
|
|
boardRotation: 0,
|
|
renderPads: true,
|
|
renderReferences: true,
|
|
renderValues: true,
|
|
renderSilkscreen: true,
|
|
renderFabrication: true,
|
|
renderDnpOutline: false,
|
|
renderTracks: true,
|
|
renderZones: true,
|
|
columnOrder: [],
|
|
hiddenColumns: [],
|
|
}
|
|
|
|
function initDefaults() {
|
|
settings.bomlayout = readStorage("bomlayout");
|
|
if (settings.bomlayout === null) {
|
|
settings.bomlayout = config.bom_view;
|
|
}
|
|
if (!['bom-only', 'left-right', 'top-bottom'].includes(settings.bomlayout)) {
|
|
settings.bomlayout = config.bom_view;
|
|
}
|
|
settings.bommode = readStorage("bommode");
|
|
if (settings.bommode === null) {
|
|
settings.bommode = "grouped";
|
|
}
|
|
if (!["grouped", "ungrouped", "netlist"].includes(settings.bommode)) {
|
|
settings.bommode = "grouped";
|
|
}
|
|
settings.canvaslayout = readStorage("canvaslayout");
|
|
if (settings.canvaslayout === null) {
|
|
settings.canvaslayout = config.layer_view;
|
|
}
|
|
var bomCheckboxes = readStorage("bomCheckboxes");
|
|
if (bomCheckboxes === null) {
|
|
bomCheckboxes = config.checkboxes;
|
|
}
|
|
settings.checkboxes = bomCheckboxes.split(",").filter((e) => e);
|
|
document.getElementById("bomCheckboxes").value = bomCheckboxes;
|
|
|
|
settings.markWhenChecked = readStorage("markWhenChecked") || "";
|
|
populateMarkWhenCheckedOptions();
|
|
|
|
function initBooleanSetting(storageString, def, elementId, func) {
|
|
var b = readStorage(storageString);
|
|
if (b === null) {
|
|
b = def;
|
|
} else {
|
|
b = (b == "true");
|
|
}
|
|
document.getElementById(elementId).checked = b;
|
|
func(b);
|
|
}
|
|
|
|
initBooleanSetting("padsVisible", config.show_pads, "padsCheckbox", padsVisible);
|
|
initBooleanSetting("fabricationVisible", config.show_fabrication, "fabricationCheckbox", fabricationVisible);
|
|
initBooleanSetting("silkscreenVisible", config.show_silkscreen, "silkscreenCheckbox", silkscreenVisible);
|
|
initBooleanSetting("referencesVisible", true, "referencesCheckbox", referencesVisible);
|
|
initBooleanSetting("valuesVisible", true, "valuesCheckbox", valuesVisible);
|
|
if ("tracks" in pcbdata) {
|
|
initBooleanSetting("tracksVisible", true, "tracksCheckbox", tracksVisible);
|
|
initBooleanSetting("zonesVisible", true, "zonesCheckbox", zonesVisible);
|
|
} else {
|
|
document.getElementById("tracksAndZonesCheckboxes").style.display = "none";
|
|
tracksVisible(false);
|
|
zonesVisible(false);
|
|
}
|
|
initBooleanSetting("dnpOutline", false, "dnpOutlineCheckbox", dnpOutline);
|
|
initBooleanSetting("redrawOnDrag", config.redraw_on_drag, "dragCheckbox", setRedrawOnDrag);
|
|
initBooleanSetting("darkmode", config.dark_mode, "darkmodeCheckbox", setDarkMode);
|
|
initBooleanSetting("highlightpin1", config.highlight_pin1, "highlightpin1Checkbox", setHighlightPin1);
|
|
|
|
var fields = ["checkboxes", "References"].concat(config.fields).concat(["Quantity"]);
|
|
var hcols = JSON.parse(readStorage("hiddenColumns"));
|
|
if (hcols === null) {
|
|
hcols = [];
|
|
}
|
|
settings.hiddenColumns = hcols.filter(e => fields.includes(e));
|
|
|
|
var cord = JSON.parse(readStorage("columnOrder"));
|
|
if (cord === null) {
|
|
cord = fields;
|
|
} else {
|
|
cord = cord.filter(e => fields.includes(e));
|
|
if (cord.length != fields.length)
|
|
cord = fields;
|
|
}
|
|
settings.columnOrder = cord;
|
|
|
|
settings.boardRotation = readStorage("boardRotation");
|
|
if (settings.boardRotation === null) {
|
|
settings.boardRotation = config.board_rotation * 5;
|
|
} else {
|
|
settings.boardRotation = parseInt(settings.boardRotation);
|
|
}
|
|
document.getElementById("boardRotation").value = settings.boardRotation / 5;
|
|
document.getElementById("rotationDegree").textContent = settings.boardRotation;
|
|
}
|
|
|
|
// Helper classes for user js callbacks.
|
|
|
|
const IBOM_EVENT_TYPES = {
|
|
ALL: "all",
|
|
HIGHLIGHT_EVENT: "highlightEvent",
|
|
CHECKBOX_CHANGE_EVENT: "checkboxChangeEvent",
|
|
BOM_BODY_CHANGE_EVENT: "bomBodyChangeEvent",
|
|
}
|
|
|
|
const EventHandler = {
|
|
callbacks: {},
|
|
init: function() {
|
|
for (eventType of Object.values(IBOM_EVENT_TYPES))
|
|
this.callbacks[eventType] = [];
|
|
},
|
|
registerCallback: function(eventType, callback) {
|
|
this.callbacks[eventType].push(callback);
|
|
},
|
|
emitEvent: function(eventType, eventArgs) {
|
|
event = {
|
|
eventType: eventType,
|
|
args: eventArgs,
|
|
}
|
|
var callback;
|
|
for (callback of this.callbacks[eventType])
|
|
callback(event);
|
|
for (callback of this.callbacks[IBOM_EVENT_TYPES.ALL])
|
|
callback(event);
|
|
}
|
|
}
|
|
EventHandler.init();
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
/* PCB rendering code */
|
|
|
|
var emptyContext2d = document.createElement("canvas").getContext("2d");
|
|
|
|
function deg2rad(deg) {
|
|
return deg * Math.PI / 180;
|
|
}
|
|
|
|
function calcFontPoint(linepoint, text, offsetx, offsety, tilt) {
|
|
var point = [
|
|
linepoint[0] * text.width + offsetx,
|
|
linepoint[1] * text.height + offsety
|
|
];
|
|
// This approximates pcbnew behavior with how text tilts depending on horizontal justification
|
|
point[0] -= (linepoint[1] + 0.5 * (1 + text.justify[0])) * text.height * tilt;
|
|
return point;
|
|
}
|
|
|
|
function drawText(ctx, text, color) {
|
|
if ("ref" in text && !settings.renderReferences) return;
|
|
if ("val" in text && !settings.renderValues) return;
|
|
ctx.save();
|
|
ctx.fillStyle = color;
|
|
ctx.strokeStyle = color;
|
|
ctx.lineCap = "round";
|
|
ctx.lineJoin = "round";
|
|
ctx.lineWidth = text.thickness;
|
|
if ("svgpath" in text) {
|
|
ctx.stroke(new Path2D(text.svgpath));
|
|
ctx.restore();
|
|
return;
|
|
}
|
|
ctx.translate(...text.pos);
|
|
ctx.translate(text.thickness * 0.5, 0);
|
|
var angle = -text.angle;
|
|
if (text.attr.includes("mirrored")) {
|
|
ctx.scale(-1, 1);
|
|
angle = -angle;
|
|
}
|
|
var tilt = 0;
|
|
if (text.attr.includes("italic")) {
|
|
tilt = 0.125;
|
|
}
|
|
var interline = text.height * 1.5 + text.thickness;
|
|
var txt = text.text.split("\n");
|
|
// KiCad ignores last empty line.
|
|
if (txt[txt.length - 1] == '') txt.pop();
|
|
ctx.rotate(deg2rad(angle));
|
|
var offsety = (1 - text.justify[1]) / 2 * text.height; // One line offset
|
|
offsety -= (txt.length - 1) * (text.justify[1] + 1) / 2 * interline; // Multiline offset
|
|
for (var i in txt) {
|
|
var lineWidth = text.thickness + interline / 2 * tilt;
|
|
for (var j = 0; j < txt[i].length; j++) {
|
|
if (txt[i][j] == '\t') {
|
|
var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
|
|
lineWidth += fourSpaces - lineWidth % fourSpaces;
|
|
} else {
|
|
if (txt[i][j] == '~') {
|
|
j++;
|
|
if (j == txt[i].length)
|
|
break;
|
|
}
|
|
lineWidth += pcbdata.font_data[txt[i][j]].w * text.width;
|
|
}
|
|
}
|
|
var offsetx = -lineWidth * (text.justify[0] + 1) / 2;
|
|
var inOverbar = false;
|
|
for (var j = 0; j < txt[i].length; j++) {
|
|
if (txt[i][j] == '\t') {
|
|
var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
|
|
offsetx += fourSpaces - offsetx % fourSpaces;
|
|
continue;
|
|
} else if (txt[i][j] == '~') {
|
|
j++;
|
|
if (j == txt[i].length)
|
|
break;
|
|
if (txt[i][j] != '~') {
|
|
inOverbar = !inOverbar;
|
|
}
|
|
}
|
|
var glyph = pcbdata.font_data[txt[i][j]];
|
|
if (inOverbar) {
|
|
var overbarStart = [offsetx, -text.height * 1.4 + offsety];
|
|
var overbarEnd = [offsetx + text.width * glyph.w, overbarStart[1]];
|
|
|
|
if (!lastHadOverbar) {
|
|
overbarStart[0] += text.height * 1.4 * tilt;
|
|
lastHadOverbar = true;
|
|
}
|
|
ctx.beginPath();
|
|
ctx.moveTo(...overbarStart);
|
|
ctx.lineTo(...overbarEnd);
|
|
ctx.stroke();
|
|
} else {
|
|
lastHadOverbar = false;
|
|
}
|
|
for (var line of glyph.l) {
|
|
ctx.beginPath();
|
|
ctx.moveTo(...calcFontPoint(line[0], text, offsetx, offsety, tilt));
|
|
for (var k = 1; k < line.length; k++) {
|
|
ctx.lineTo(...calcFontPoint(line[k], text, offsetx, offsety, tilt));
|
|
}
|
|
ctx.stroke();
|
|
}
|
|
offsetx += glyph.w * text.width;
|
|
}
|
|
offsety += interline;
|
|
}
|
|
ctx.restore();
|
|
}
|
|
|
|
function drawedge(ctx, scalefactor, edge, color) {
|
|
ctx.strokeStyle = color;
|
|
ctx.fillStyle = color;
|
|
ctx.lineWidth = Math.max(1 / scalefactor, edge.width);
|
|
ctx.lineCap = "round";
|
|
ctx.lineJoin = "round";
|
|
if ("svgpath" in edge) {
|
|
ctx.stroke(new Path2D(edge.svgpath));
|
|
} else {
|
|
ctx.beginPath();
|
|
if (edge.type == "segment") {
|
|
ctx.moveTo(...edge.start);
|
|
ctx.lineTo(...edge.end);
|
|
}
|
|
if (edge.type == "rect") {
|
|
ctx.moveTo(...edge.start);
|
|
ctx.lineTo(edge.start[0], edge.end[1]);
|
|
ctx.lineTo(...edge.end);
|
|
ctx.lineTo(edge.end[0], edge.start[1]);
|
|
ctx.lineTo(...edge.start);
|
|
}
|
|
if (edge.type == "arc") {
|
|
ctx.arc(
|
|
...edge.start,
|
|
edge.radius,
|
|
deg2rad(edge.startangle),
|
|
deg2rad(edge.endangle));
|
|
}
|
|
if (edge.type == "circle") {
|
|
ctx.arc(
|
|
...edge.start,
|
|
edge.radius,
|
|
0, 2 * Math.PI);
|
|
ctx.closePath();
|
|
}
|
|
if (edge.type == "curve") {
|
|
ctx.moveTo(...edge.start);
|
|
ctx.bezierCurveTo(...edge.cpa, ...edge.cpb, ...edge.end);
|
|
}
|
|
if("filled" in edge && edge.filled)
|
|
ctx.fill();
|
|
else
|
|
ctx.stroke();
|
|
}
|
|
}
|
|
|
|
function getChamferedRectPath(size, radius, chamfpos, chamfratio) {
|
|
// chamfpos is a bitmask, left = 1, right = 2, bottom left = 4, bottom right = 8
|
|
var path = new Path2D();
|
|
var width = size[0];
|
|
var height = size[1];
|
|
var x = width * -0.5;
|
|
var y = height * -0.5;
|
|
var chamfOffset = Math.min(width, height) * chamfratio;
|
|
path.moveTo(x, 0);
|
|
if (chamfpos & 4) {
|
|
path.lineTo(x, y + height - chamfOffset);
|
|
path.lineTo(x + chamfOffset, y + height);
|
|
path.lineTo(0, y + height);
|
|
} else {
|
|
path.arcTo(x, y + height, x + width, y + height, radius);
|
|
}
|
|
if (chamfpos & 8) {
|
|
path.lineTo(x + width - chamfOffset, y + height);
|
|
path.lineTo(x + width, y + height - chamfOffset);
|
|
path.lineTo(x + width, 0);
|
|
} else {
|
|
path.arcTo(x + width, y + height, x + width, y, radius);
|
|
}
|
|
if (chamfpos & 2) {
|
|
path.lineTo(x + width, y + chamfOffset);
|
|
path.lineTo(x + width - chamfOffset, y);
|
|
path.lineTo(0, y);
|
|
} else {
|
|
path.arcTo(x + width, y, x, y, radius);
|
|
}
|
|
if (chamfpos & 1) {
|
|
path.lineTo(x + chamfOffset, y);
|
|
path.lineTo(x, y + chamfOffset);
|
|
path.lineTo(x, 0);
|
|
} else {
|
|
path.arcTo(x, y, x, y + height, radius);
|
|
}
|
|
path.closePath();
|
|
return path;
|
|
}
|
|
|
|
function getOblongPath(size) {
|
|
return getChamferedRectPath(size, Math.min(size[0], size[1]) / 2, 0, 0);
|
|
}
|
|
|
|
function getPolygonsPath(shape) {
|
|
if (shape.path2d) {
|
|
return shape.path2d;
|
|
}
|
|
if ("svgpath" in shape) {
|
|
shape.path2d = new Path2D(shape.svgpath);
|
|
} else {
|
|
var path = new Path2D();
|
|
for (var polygon of shape.polygons) {
|
|
path.moveTo(...polygon[0]);
|
|
for (var i = 1; i < polygon.length; i++) {
|
|
path.lineTo(...polygon[i]);
|
|
}
|
|
path.closePath();
|
|
}
|
|
shape.path2d = path;
|
|
}
|
|
return shape.path2d;
|
|
}
|
|
|
|
function drawPolygonShape(ctx, scalefactor, shape, color) {
|
|
ctx.save();
|
|
if (!("svgpath" in shape)) {
|
|
ctx.translate(...shape.pos);
|
|
ctx.rotate(deg2rad(-shape.angle));
|
|
}
|
|
if("filled" in shape && !shape.filled) {
|
|
ctx.strokeStyle = color;
|
|
ctx.lineWidth = Math.max(1 / scalefactor, shape.width);
|
|
ctx.lineCap = "round";
|
|
ctx.lineJoin = "round";
|
|
ctx.stroke(getPolygonsPath(shape));
|
|
} else {
|
|
ctx.fillStyle = color;
|
|
ctx.fill(getPolygonsPath(shape));
|
|
}
|
|
ctx.restore();
|
|
}
|
|
|
|
function drawDrawing(ctx, scalefactor, drawing, color) {
|
|
if (["segment", "arc", "circle", "curve", "rect"].includes(drawing.type)) {
|
|
drawedge(ctx, scalefactor, drawing, color);
|
|
} else if (drawing.type == "polygon") {
|
|
drawPolygonShape(ctx, scalefactor, drawing, color);
|
|
} else {
|
|
drawText(ctx, drawing, color);
|
|
}
|
|
}
|
|
|
|
function getCirclePath(radius) {
|
|
var path = new Path2D();
|
|
path.arc(0, 0, radius, 0, 2 * Math.PI);
|
|
path.closePath();
|
|
return path;
|
|
}
|
|
|
|
function getCachedPadPath(pad) {
|
|
if (!pad.path2d) {
|
|
// if path2d is not set, build one and cache it on pad object
|
|
if (pad.shape == "rect") {
|
|
pad.path2d = new Path2D();
|
|
pad.path2d.rect(...pad.size.map(c => -c * 0.5), ...pad.size);
|
|
} else if (pad.shape == "oval") {
|
|
pad.path2d = getOblongPath(pad.size);
|
|
} else if (pad.shape == "circle") {
|
|
pad.path2d = getCirclePath(pad.size[0] / 2);
|
|
} else if (pad.shape == "roundrect") {
|
|
pad.path2d = getChamferedRectPath(pad.size, pad.radius, 0, 0);
|
|
} else if (pad.shape == "chamfrect") {
|
|
pad.path2d = getChamferedRectPath(pad.size, pad.radius, pad.chamfpos, pad.chamfratio)
|
|
} else if (pad.shape == "custom") {
|
|
pad.path2d = getPolygonsPath(pad);
|
|
}
|
|
}
|
|
return pad.path2d;
|
|
}
|
|
|
|
function drawPad(ctx, pad, color, outline) {
|
|
ctx.save();
|
|
ctx.translate(...pad.pos);
|
|
ctx.rotate(deg2rad(pad.angle));
|
|
if (pad.offset) {
|
|
ctx.translate(...pad.offset);
|
|
}
|
|
ctx.fillStyle = color;
|
|
ctx.strokeStyle = color;
|
|
var path = getCachedPadPath(pad);
|
|
if (outline) {
|
|
ctx.stroke(path);
|
|
} else {
|
|
ctx.fill(path);
|
|
}
|
|
ctx.restore();
|
|
}
|
|
|
|
function drawPadHole(ctx, pad, padHoleColor) {
|
|
if (pad.type != "th") return;
|
|
ctx.save();
|
|
ctx.translate(...pad.pos);
|
|
ctx.rotate(deg2rad(pad.angle));
|
|
ctx.fillStyle = padHoleColor;
|
|
if (pad.drillshape == "oblong") {
|
|
ctx.fill(getOblongPath(pad.drillsize));
|
|
} else {
|
|
ctx.fill(getCirclePath(pad.drillsize[0] / 2));
|
|
}
|
|
ctx.restore();
|
|
}
|
|
|
|
function drawFootprint(ctx, layer, scalefactor, footprint, colors, highlight, outline) {
|
|
if (highlight) {
|
|
// draw bounding box
|
|
if (footprint.layer == layer) {
|
|
ctx.save();
|
|
ctx.globalAlpha = 0.2;
|
|
ctx.translate(...footprint.bbox.pos);
|
|
ctx.rotate(deg2rad(-footprint.bbox.angle));
|
|
ctx.translate(...footprint.bbox.relpos);
|
|
ctx.fillStyle = colors.pad;
|
|
ctx.fillRect(0, 0, ...footprint.bbox.size);
|
|
ctx.globalAlpha = 1;
|
|
ctx.strokeStyle = colors.pad;
|
|
ctx.strokeRect(0, 0, ...footprint.bbox.size);
|
|
ctx.restore();
|
|
}
|
|
}
|
|
// draw drawings
|
|
for (var drawing of footprint.drawings) {
|
|
if (drawing.layer == layer) {
|
|
drawDrawing(ctx, scalefactor, drawing.drawing, colors.pad);
|
|
}
|
|
}
|
|
// draw pads
|
|
if (settings.renderPads) {
|
|
for (var pad of footprint.pads) {
|
|
if (pad.layers.includes(layer)) {
|
|
drawPad(ctx, pad, colors.pad, outline);
|
|
if (pad.pin1 && settings.highlightpin1) {
|
|
drawPad(ctx, pad, colors.outline, true);
|
|
}
|
|
}
|
|
}
|
|
for (var pad of footprint.pads) {
|
|
drawPadHole(ctx, pad, colors.padHole);
|
|
}
|
|
}
|
|
}
|
|
|
|
function drawEdgeCuts(canvas, scalefactor) {
|
|
var ctx = canvas.getContext("2d");
|
|
var edgecolor = getComputedStyle(topmostdiv).getPropertyValue('--pcb-edge-color');
|
|
for (var edge of pcbdata.edges) {
|
|
drawDrawing(ctx, scalefactor, edge, edgecolor);
|
|
}
|
|
}
|
|
|
|
function drawFootprints(canvas, layer, scalefactor, highlight) {
|
|
var ctx = canvas.getContext("2d");
|
|
ctx.lineWidth = 3 / scalefactor;
|
|
var style = getComputedStyle(topmostdiv);
|
|
|
|
var colors = {
|
|
pad: style.getPropertyValue('--pad-color'),
|
|
padHole: style.getPropertyValue('--pad-hole-color'),
|
|
outline: style.getPropertyValue('--pin1-outline-color'),
|
|
}
|
|
|
|
for (var i = 0; i < pcbdata.footprints.length; i++) {
|
|
var mod = pcbdata.footprints[i];
|
|
var outline = settings.renderDnpOutline && pcbdata.bom.skipped.includes(i);
|
|
var h = highlightedFootprints.includes(i);
|
|
var d = markedFootprints.has(i);
|
|
if (highlight) {
|
|
if(h && d) {
|
|
colors.pad = style.getPropertyValue('--pad-color-highlight-both');
|
|
colors.outline = style.getPropertyValue('--pin1-outline-color-highlight-both');
|
|
} else if (h) {
|
|
colors.pad = style.getPropertyValue('--pad-color-highlight');
|
|
colors.outline = style.getPropertyValue('--pin1-outline-color-highlight');
|
|
} else if (d) {
|
|
colors.pad = style.getPropertyValue('--pad-color-highlight-marked');
|
|
colors.outline = style.getPropertyValue('--pin1-outline-color-highlight-marked');
|
|
}
|
|
}
|
|
if( h || d || !highlight) {
|
|
drawFootprint(ctx, layer, scalefactor, mod, colors, highlight, outline);
|
|
}
|
|
}
|
|
}
|
|
|
|
function drawBgLayer(layername, canvas, layer, scalefactor, edgeColor, polygonColor, textColor) {
|
|
var ctx = canvas.getContext("2d");
|
|
for (var d of pcbdata.drawings[layername][layer]) {
|
|
if (["segment", "arc", "circle", "curve", "rect"].includes(d.type)) {
|
|
drawedge(ctx, scalefactor, d, edgeColor);
|
|
} else if (d.type == "polygon") {
|
|
drawPolygonShape(ctx, scalefactor, d, polygonColor);
|
|
} else {
|
|
drawText(ctx, d, textColor);
|
|
}
|
|
}
|
|
}
|
|
|
|
function drawTracks(canvas, layer, color, highlight) {
|
|
ctx = canvas.getContext("2d");
|
|
ctx.strokeStyle = color;
|
|
ctx.lineCap = "round";
|
|
for (var track of pcbdata.tracks[layer]) {
|
|
if (highlight && highlightedNet != track.net) continue;
|
|
ctx.lineWidth = track.width;
|
|
ctx.beginPath();
|
|
if ('radius' in track) {
|
|
ctx.arc(
|
|
...track.center,
|
|
track.radius,
|
|
deg2rad(track.startangle),
|
|
deg2rad(track.endangle));
|
|
} else {
|
|
ctx.moveTo(...track.start);
|
|
ctx.lineTo(...track.end);
|
|
}
|
|
ctx.stroke();
|
|
}
|
|
}
|
|
|
|
function drawZones(canvas, layer, color, highlight) {
|
|
ctx = canvas.getContext("2d");
|
|
ctx.strokeStyle = color;
|
|
ctx.fillStyle = color;
|
|
ctx.lineJoin = "round";
|
|
for (var zone of pcbdata.zones[layer]) {
|
|
if (!zone.path2d) {
|
|
zone.path2d = getPolygonsPath(zone);
|
|
}
|
|
if (highlight && highlightedNet != zone.net) continue;
|
|
ctx.fill(zone.path2d);
|
|
if (zone.width > 0) {
|
|
ctx.lineWidth = zone.width;
|
|
ctx.stroke(zone.path2d);
|
|
}
|
|
}
|
|
}
|
|
|
|
function clearCanvas(canvas, color = null) {
|
|
var ctx = canvas.getContext("2d");
|
|
ctx.save();
|
|
ctx.setTransform(1, 0, 0, 1, 0, 0);
|
|
if (color) {
|
|
ctx.fillStyle = color;
|
|
ctx.fillRect(0, 0, canvas.width, canvas.height);
|
|
} else {
|
|
if (!window.matchMedia("print").matches)
|
|
ctx.clearRect(0, 0, canvas.width, canvas.height);
|
|
}
|
|
ctx.restore();
|
|
}
|
|
|
|
function drawNets(canvas, layer, highlight) {
|
|
var style = getComputedStyle(topmostdiv);
|
|
if (settings.renderTracks) {
|
|
var trackColor = style.getPropertyValue(highlight ? '--track-color-highlight' : '--track-color');
|
|
drawTracks(canvas, layer, trackColor, highlight);
|
|
}
|
|
if (settings.renderZones) {
|
|
var zoneColor = style.getPropertyValue(highlight ? '--zone-color-highlight' : '--zone-color');
|
|
drawZones(canvas, layer, zoneColor, highlight);
|
|
}
|
|
if (highlight && settings.renderPads) {
|
|
var padColor = style.getPropertyValue('--pad-color-highlight');
|
|
var padHoleColor = style.getPropertyValue('--pad-hole-color');
|
|
var ctx = canvas.getContext("2d");
|
|
for (var footprint of pcbdata.footprints) {
|
|
// draw pads
|
|
var padDrawn = false;
|
|
for (var pad of footprint.pads) {
|
|
if (highlightedNet != pad.net) continue;
|
|
if (pad.layers.includes(layer)) {
|
|
drawPad(ctx, pad, padColor, false);
|
|
padDrawn = true;
|
|
}
|
|
}
|
|
if (padDrawn) {
|
|
// redraw all pad holes because some pads may overlap
|
|
for (var pad of footprint.pads) {
|
|
drawPadHole(ctx, pad, padHoleColor);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function drawHighlightsOnLayer(canvasdict, clear = true) {
|
|
if (clear) {
|
|
clearCanvas(canvasdict.highlight);
|
|
}
|
|
if (markedFootprints.size > 0 || highlightedFootprints.length > 0) {
|
|
drawFootprints(canvasdict.highlight, canvasdict.layer,
|
|
canvasdict.transform.s * canvasdict.transform.zoom, true);
|
|
}
|
|
if (highlightedNet !== null) {
|
|
drawNets(canvasdict.highlight, canvasdict.layer, true);
|
|
}
|
|
}
|
|
|
|
function drawHighlights() {
|
|
drawHighlightsOnLayer(allcanvas.front);
|
|
drawHighlightsOnLayer(allcanvas.back);
|
|
}
|
|
|
|
function drawBackground(canvasdict, clear = true) {
|
|
if (clear) {
|
|
clearCanvas(canvasdict.bg);
|
|
clearCanvas(canvasdict.fab);
|
|
clearCanvas(canvasdict.silk);
|
|
}
|
|
|
|
drawNets(canvasdict.bg, canvasdict.layer, false);
|
|
drawFootprints(canvasdict.bg, canvasdict.layer,
|
|
canvasdict.transform.s * canvasdict.transform.zoom, false);
|
|
|
|
drawEdgeCuts(canvasdict.bg, canvasdict.transform.s * canvasdict.transform.zoom);
|
|
|
|
var style = getComputedStyle(topmostdiv);
|
|
var edgeColor = style.getPropertyValue('--silkscreen-edge-color');
|
|
var polygonColor = style.getPropertyValue('--silkscreen-polygon-color');
|
|
var textColor = style.getPropertyValue('--silkscreen-text-color');
|
|
if (settings.renderSilkscreen) {
|
|
drawBgLayer(
|
|
"silkscreen", canvasdict.silk, canvasdict.layer,
|
|
canvasdict.transform.s * canvasdict.transform.zoom,
|
|
edgeColor, polygonColor, textColor);
|
|
}
|
|
edgeColor = style.getPropertyValue('--fabrication-edge-color');
|
|
polygonColor = style.getPropertyValue('--fabrication-polygon-color');
|
|
textColor = style.getPropertyValue('--fabrication-text-color');
|
|
if (settings.renderFabrication) {
|
|
drawBgLayer(
|
|
"fabrication", canvasdict.fab, canvasdict.layer,
|
|
canvasdict.transform.s * canvasdict.transform.zoom,
|
|
edgeColor, polygonColor, textColor);
|
|
}
|
|
}
|
|
|
|
function prepareCanvas(canvas, flip, transform) {
|
|
var ctx = canvas.getContext("2d");
|
|
ctx.setTransform(1, 0, 0, 1, 0, 0);
|
|
var fontsize = 1.55;
|
|
ctx.scale(transform.zoom, transform.zoom);
|
|
ctx.translate(transform.panx, transform.pany);
|
|
if (flip) {
|
|
ctx.scale(-1, 1);
|
|
}
|
|
ctx.translate(transform.x, transform.y);
|
|
ctx.rotate(deg2rad(settings.boardRotation));
|
|
ctx.scale(transform.s, transform.s);
|
|
}
|
|
|
|
function prepareLayer(canvasdict) {
|
|
var flip = (canvasdict.layer == "B");
|
|
for (var c of ["bg", "fab", "silk", "highlight"]) {
|
|
prepareCanvas(canvasdict[c], flip, canvasdict.transform);
|
|
}
|
|
}
|
|
|
|
function rotateVector(v, angle) {
|
|
angle = deg2rad(angle);
|
|
return [
|
|
v[0] * Math.cos(angle) - v[1] * Math.sin(angle),
|
|
v[0] * Math.sin(angle) + v[1] * Math.cos(angle)
|
|
];
|
|
}
|
|
|
|
function applyRotation(bbox) {
|
|
var corners = [
|
|
[bbox.minx, bbox.miny],
|
|
[bbox.minx, bbox.maxy],
|
|
[bbox.maxx, bbox.miny],
|
|
[bbox.maxx, bbox.maxy],
|
|
];
|
|
corners = corners.map((v) => rotateVector(v, settings.boardRotation));
|
|
return {
|
|
minx: corners.reduce((a, v) => Math.min(a, v[0]), Infinity),
|
|
miny: corners.reduce((a, v) => Math.min(a, v[1]), Infinity),
|
|
maxx: corners.reduce((a, v) => Math.max(a, v[0]), -Infinity),
|
|
maxy: corners.reduce((a, v) => Math.max(a, v[1]), -Infinity),
|
|
}
|
|
}
|
|
|
|
function recalcLayerScale(layerdict, width, height) {
|
|
var bbox = applyRotation(pcbdata.edges_bbox);
|
|
var scalefactor = 0.98 * Math.min(
|
|
width / (bbox.maxx - bbox.minx),
|
|
height / (bbox.maxy - bbox.miny)
|
|
);
|
|
if (scalefactor < 0.1) {
|
|
scalefactor = 1;
|
|
}
|
|
layerdict.transform.s = scalefactor;
|
|
var flip = (layerdict.layer == "B");
|
|
if (flip) {
|
|
layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor + width) * 0.5;
|
|
} else {
|
|
layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor - width) * 0.5;
|
|
}
|
|
layerdict.transform.y = -((bbox.maxy + bbox.miny) * scalefactor - height) * 0.5;
|
|
for (var c of ["bg", "fab", "silk", "highlight"]) {
|
|
canvas = layerdict[c];
|
|
canvas.width = width;
|
|
canvas.height = height;
|
|
canvas.style.width = (width / devicePixelRatio) + "px";
|
|
canvas.style.height = (height / devicePixelRatio) + "px";
|
|
}
|
|
}
|
|
|
|
function redrawCanvas(layerdict) {
|
|
prepareLayer(layerdict);
|
|
drawBackground(layerdict);
|
|
drawHighlightsOnLayer(layerdict);
|
|
}
|
|
|
|
function resizeCanvas(layerdict) {
|
|
var canvasdivid = {
|
|
"F": "frontcanvas",
|
|
"B": "backcanvas"
|
|
} [layerdict.layer];
|
|
var width = document.getElementById(canvasdivid).clientWidth * devicePixelRatio;
|
|
var height = document.getElementById(canvasdivid).clientHeight * devicePixelRatio;
|
|
recalcLayerScale(layerdict, width, height);
|
|
redrawCanvas(layerdict);
|
|
}
|
|
|
|
function resizeAll() {
|
|
resizeCanvas(allcanvas.front);
|
|
resizeCanvas(allcanvas.back);
|
|
}
|
|
|
|
function pointWithinDistanceToSegment(x, y, x1, y1, x2, y2, d) {
|
|
var A = x - x1;
|
|
var B = y - y1;
|
|
var C = x2 - x1;
|
|
var D = y2 - y1;
|
|
|
|
var dot = A * C + B * D;
|
|
var len_sq = C * C + D * D;
|
|
var dx, dy;
|
|
if (len_sq == 0) {
|
|
// start and end of the segment coincide
|
|
dx = x - x1;
|
|
dy = y - y1;
|
|
} else {
|
|
var param = dot / len_sq;
|
|
var xx, yy;
|
|
if (param < 0) {
|
|
xx = x1;
|
|
yy = y1;
|
|
} else if (param > 1) {
|
|
xx = x2;
|
|
yy = y2;
|
|
} else {
|
|
xx = x1 + param * C;
|
|
yy = y1 + param * D;
|
|
}
|
|
dx = x - xx;
|
|
dy = y - yy;
|
|
}
|
|
return dx * dx + dy * dy <= d * d;
|
|
}
|
|
|
|
function modulo(n, mod) {
|
|
return ((n % mod) + mod) % mod;
|
|
}
|
|
|
|
function pointWithinDistanceToArc(x, y, xc, yc, radius, startangle, endangle, d) {
|
|
var dx = x - xc;
|
|
var dy = y - yc;
|
|
var r_sq = dx * dx + dy * dy;
|
|
var rmin = Math.max(0, radius - d);
|
|
var rmax = radius + d;
|
|
|
|
if (r_sq < rmin * rmin || r_sq > rmax * rmax)
|
|
return false;
|
|
|
|
var angle1 = modulo(deg2rad(startangle), 2 * Math.PI);
|
|
var dx1 = xc + radius * Math.cos(angle1) - x;
|
|
var dy1 = yc + radius * Math.sin(angle1) - y;
|
|
if (dx1 * dx1 + dy1 * dy1 <= d * d)
|
|
return true;
|
|
|
|
var angle2 = modulo(deg2rad(endangle), 2 * Math.PI);
|
|
var dx2 = xc + radius * Math.cos(angle2) - x;
|
|
var dy2 = yc + radius * Math.sin(angle2) - y;
|
|
if (dx2 * dx2 + dy2 * dy2 <= d * d)
|
|
return true;
|
|
|
|
var angle = modulo(Math.atan2(dy, dx), 2 * Math.PI);
|
|
if (angle1 > angle2)
|
|
return (angle >= angle2 || angle <= angle1);
|
|
else
|
|
return (angle >= angle1 && angle <= angle2);
|
|
}
|
|
|
|
function pointWithinPad(x, y, pad) {
|
|
var v = [x - pad.pos[0], y - pad.pos[1]];
|
|
v = rotateVector(v, -pad.angle);
|
|
if (pad.offset) {
|
|
v[0] -= pad.offset[0];
|
|
v[1] -= pad.offset[1];
|
|
}
|
|
return emptyContext2d.isPointInPath(getCachedPadPath(pad), ...v);
|
|
}
|
|
|
|
function netHitScan(layer, x, y) {
|
|
// Check track segments
|
|
if (settings.renderTracks && pcbdata.tracks) {
|
|
for (var track of pcbdata.tracks[layer]) {
|
|
if ('radius' in track) {
|
|
if (pointWithinDistanceToArc(x, y, ...track.center, track.radius, track.startangle, track.endangle, track.width / 2)) {
|
|
return track.net;
|
|
}
|
|
} else {
|
|
if (pointWithinDistanceToSegment(x, y, ...track.start, ...track.end, track.width / 2)) {
|
|
return track.net;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
// Check pads
|
|
if (settings.renderPads) {
|
|
for (var footprint of pcbdata.footprints) {
|
|
for (var pad of footprint.pads) {
|
|
if (pad.layers.includes(layer) && pointWithinPad(x, y, pad)) {
|
|
return pad.net;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
|
|
function pointWithinFootprintBbox(x, y, bbox) {
|
|
var v = [x - bbox.pos[0], y - bbox.pos[1]];
|
|
v = rotateVector(v, bbox.angle);
|
|
return bbox.relpos[0] <= v[0] && v[0] <= bbox.relpos[0] + bbox.size[0] &&
|
|
bbox.relpos[1] <= v[1] && v[1] <= bbox.relpos[1] + bbox.size[1];
|
|
}
|
|
|
|
function bboxHitScan(layer, x, y) {
|
|
var result = [];
|
|
for (var i = 0; i < pcbdata.footprints.length; i++) {
|
|
var footprint = pcbdata.footprints[i];
|
|
if (footprint.layer == layer) {
|
|
if (pointWithinFootprintBbox(x, y, footprint.bbox)) {
|
|
result.push(i);
|
|
}
|
|
}
|
|
}
|
|
return result;
|
|
}
|
|
|
|
function handlePointerDown(e, layerdict) {
|
|
if (e.button != 0 && e.button != 1) {
|
|
return;
|
|
}
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
|
|
if (!e.hasOwnProperty("offsetX")) {
|
|
// The polyfill doesn't set this properly
|
|
e.offsetX = e.pageX - e.currentTarget.offsetLeft;
|
|
e.offsetY = e.pageY - e.currentTarget.offsetTop;
|
|
}
|
|
|
|
layerdict.pointerStates[e.pointerId] = {
|
|
distanceTravelled: 0,
|
|
lastX: e.offsetX,
|
|
lastY: e.offsetY,
|
|
downTime: Date.now(),
|
|
};
|
|
}
|
|
|
|
function handleMouseClick(e, layerdict) {
|
|
if (!e.hasOwnProperty("offsetX")) {
|
|
// The polyfill doesn't set this properly
|
|
e.offsetX = e.pageX - e.currentTarget.offsetLeft;
|
|
e.offsetY = e.pageY - e.currentTarget.offsetTop;
|
|
}
|
|
|
|
var x = e.offsetX;
|
|
var y = e.offsetY;
|
|
var t = layerdict.transform;
|
|
if (layerdict.layer == "B") {
|
|
x = (devicePixelRatio * x / t.zoom - t.panx + t.x) / -t.s;
|
|
} else {
|
|
x = (devicePixelRatio * x / t.zoom - t.panx - t.x) / t.s;
|
|
}
|
|
y = (devicePixelRatio * y / t.zoom - t.y - t.pany) / t.s;
|
|
var v = rotateVector([x, y], -settings.boardRotation);
|
|
if ("nets" in pcbdata) {
|
|
var net = netHitScan(layerdict.layer, ...v);
|
|
if (net !== highlightedNet) {
|
|
netClicked(net);
|
|
}
|
|
}
|
|
if (highlightedNet === null) {
|
|
var footprints = bboxHitScan(layerdict.layer, ...v);
|
|
if (footprints.length > 0) {
|
|
footprintsClicked(footprints);
|
|
}
|
|
}
|
|
}
|
|
|
|
function handlePointerLeave(e, layerdict) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
|
|
if (!settings.redrawOnDrag) {
|
|
redrawCanvas(layerdict);
|
|
}
|
|
|
|
delete layerdict.pointerStates[e.pointerId];
|
|
}
|
|
|
|
function resetTransform(layerdict) {
|
|
layerdict.transform.panx = 0;
|
|
layerdict.transform.pany = 0;
|
|
layerdict.transform.zoom = 1;
|
|
redrawCanvas(layerdict);
|
|
}
|
|
|
|
function handlePointerUp(e, layerdict) {
|
|
if (!e.hasOwnProperty("offsetX")) {
|
|
// The polyfill doesn't set this properly
|
|
e.offsetX = e.pageX - e.currentTarget.offsetLeft;
|
|
e.offsetY = e.pageY - e.currentTarget.offsetTop;
|
|
}
|
|
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
|
|
if (e.button == 2) {
|
|
// Reset pan and zoom on right click.
|
|
resetTransform(layerdict);
|
|
layerdict.anotherPointerTapped = false;
|
|
return;
|
|
}
|
|
|
|
// We haven't necessarily had a pointermove event since the interaction started, so make sure we update this now
|
|
var ptr = layerdict.pointerStates[e.pointerId];
|
|
ptr.distanceTravelled += Math.abs(e.offsetX - ptr.lastX) + Math.abs(e.offsetY - ptr.lastY);
|
|
|
|
if (e.button == 0 && ptr.distanceTravelled < 10 && Date.now() - ptr.downTime <= 500) {
|
|
if (Object.keys(layerdict.pointerStates).length == 1) {
|
|
if (layerdict.anotherPointerTapped) {
|
|
// This is the second pointer coming off of a two-finger tap
|
|
resetTransform(layerdict);
|
|
} else {
|
|
// This is just a regular tap
|
|
handleMouseClick(e, layerdict);
|
|
}
|
|
layerdict.anotherPointerTapped = false;
|
|
} else {
|
|
// This is the first finger coming off of what could become a two-finger tap
|
|
layerdict.anotherPointerTapped = true;
|
|
}
|
|
} else {
|
|
if (!settings.redrawOnDrag) {
|
|
redrawCanvas(layerdict);
|
|
}
|
|
layerdict.anotherPointerTapped = false;
|
|
}
|
|
|
|
delete layerdict.pointerStates[e.pointerId];
|
|
}
|
|
|
|
function handlePointerMove(e, layerdict) {
|
|
if (!layerdict.pointerStates.hasOwnProperty(e.pointerId)) {
|
|
return;
|
|
}
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
|
|
if (!e.hasOwnProperty("offsetX")) {
|
|
// The polyfill doesn't set this properly
|
|
e.offsetX = e.pageX - e.currentTarget.offsetLeft;
|
|
e.offsetY = e.pageY - e.currentTarget.offsetTop;
|
|
}
|
|
|
|
var thisPtr = layerdict.pointerStates[e.pointerId];
|
|
|
|
var dx = e.offsetX - thisPtr.lastX;
|
|
var dy = e.offsetY - thisPtr.lastY;
|
|
|
|
// If this number is low on pointer up, we count the action as a click
|
|
thisPtr.distanceTravelled += Math.abs(dx) + Math.abs(dy);
|
|
|
|
if (Object.keys(layerdict.pointerStates).length == 1) {
|
|
// This is a simple drag
|
|
layerdict.transform.panx += devicePixelRatio * dx / layerdict.transform.zoom;
|
|
layerdict.transform.pany += devicePixelRatio * dy / layerdict.transform.zoom;
|
|
} else if (Object.keys(layerdict.pointerStates).length == 2) {
|
|
var otherPtr = Object.values(layerdict.pointerStates).filter((ptr) => ptr != thisPtr)[0];
|
|
|
|
var oldDist = Math.sqrt(Math.pow(thisPtr.lastX - otherPtr.lastX, 2) + Math.pow(thisPtr.lastY - otherPtr.lastY, 2));
|
|
var newDist = Math.sqrt(Math.pow(e.offsetX - otherPtr.lastX, 2) + Math.pow(e.offsetY - otherPtr.lastY, 2));
|
|
|
|
var scaleFactor = newDist / oldDist;
|
|
|
|
if (scaleFactor != NaN) {
|
|
layerdict.transform.zoom *= scaleFactor;
|
|
|
|
var zoomd = (1 - scaleFactor) / layerdict.transform.zoom;
|
|
layerdict.transform.panx += devicePixelRatio * otherPtr.lastX * zoomd;
|
|
layerdict.transform.pany += devicePixelRatio * otherPtr.lastY * zoomd;
|
|
}
|
|
}
|
|
|
|
thisPtr.lastX = e.offsetX;
|
|
thisPtr.lastY = e.offsetY;
|
|
|
|
if (settings.redrawOnDrag) {
|
|
redrawCanvas(layerdict);
|
|
}
|
|
}
|
|
|
|
function handleMouseWheel(e, layerdict) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
var t = layerdict.transform;
|
|
var wheeldelta = e.deltaY;
|
|
if (e.deltaMode == 1) {
|
|
// FF only, scroll by lines
|
|
wheeldelta *= 30;
|
|
} else if (e.deltaMode == 2) {
|
|
wheeldelta *= 300;
|
|
}
|
|
var m = Math.pow(1.1, -wheeldelta / 40);
|
|
// Limit amount of zoom per tick.
|
|
if (m > 2) {
|
|
m = 2;
|
|
} else if (m < 0.5) {
|
|
m = 0.5;
|
|
}
|
|
t.zoom *= m;
|
|
var zoomd = (1 - m) / t.zoom;
|
|
t.panx += devicePixelRatio * e.offsetX * zoomd;
|
|
t.pany += devicePixelRatio * e.offsetY * zoomd;
|
|
redrawCanvas(layerdict);
|
|
}
|
|
|
|
function addMouseHandlers(div, layerdict) {
|
|
div.addEventListener("pointerdown", function(e) {
|
|
handlePointerDown(e, layerdict);
|
|
});
|
|
div.addEventListener("pointermove", function(e) {
|
|
handlePointerMove(e, layerdict);
|
|
});
|
|
div.addEventListener("pointerup", function(e) {
|
|
handlePointerUp(e, layerdict);
|
|
});
|
|
var pointerleave = function(e) {
|
|
handlePointerLeave(e, layerdict);
|
|
}
|
|
div.addEventListener("pointercancel", pointerleave);
|
|
div.addEventListener("pointerleave", pointerleave);
|
|
div.addEventListener("pointerout", pointerleave);
|
|
|
|
div.onwheel = function(e) {
|
|
handleMouseWheel(e, layerdict);
|
|
}
|
|
for (var element of [div, layerdict.bg, layerdict.fab, layerdict.silk, layerdict.highlight]) {
|
|
element.addEventListener("contextmenu", function(e) {
|
|
e.preventDefault();
|
|
}, false);
|
|
}
|
|
}
|
|
|
|
function setRedrawOnDrag(value) {
|
|
settings.redrawOnDrag = value;
|
|
writeStorage("redrawOnDrag", value);
|
|
}
|
|
|
|
function setBoardRotation(value) {
|
|
settings.boardRotation = value * 5;
|
|
writeStorage("boardRotation", settings.boardRotation);
|
|
document.getElementById("rotationDegree").textContent = settings.boardRotation;
|
|
resizeAll();
|
|
}
|
|
|
|
function initRender() {
|
|
allcanvas = {
|
|
front: {
|
|
transform: {
|
|
x: 0,
|
|
y: 0,
|
|
s: 1,
|
|
panx: 0,
|
|
pany: 0,
|
|
zoom: 1,
|
|
},
|
|
pointerStates: {},
|
|
anotherPointerTapped: false,
|
|
bg: document.getElementById("F_bg"),
|
|
fab: document.getElementById("F_fab"),
|
|
silk: document.getElementById("F_slk"),
|
|
highlight: document.getElementById("F_hl"),
|
|
layer: "F",
|
|
},
|
|
back: {
|
|
transform: {
|
|
x: 0,
|
|
y: 0,
|
|
s: 1,
|
|
panx: 0,
|
|
pany: 0,
|
|
zoom: 1,
|
|
},
|
|
pointerStates: {},
|
|
anotherPointerTapped: false,
|
|
bg: document.getElementById("B_bg"),
|
|
fab: document.getElementById("B_fab"),
|
|
silk: document.getElementById("B_slk"),
|
|
highlight: document.getElementById("B_hl"),
|
|
layer: "B",
|
|
}
|
|
};
|
|
addMouseHandlers(document.getElementById("frontcanvas"), allcanvas.front);
|
|
addMouseHandlers(document.getElementById("backcanvas"), allcanvas.back);
|
|
}
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
/*
|
|
* Table reordering via Drag'n'Drop
|
|
* Inspired by: https://htmldom.dev/drag-and-drop-table-column
|
|
*/
|
|
|
|
function setBomHandlers() {
|
|
|
|
const bom = document.getElementById('bomtable');
|
|
|
|
let dragName;
|
|
let placeHolderElements;
|
|
let draggingElement;
|
|
let forcePopulation;
|
|
let xOffset;
|
|
let yOffset;
|
|
let wasDragged;
|
|
|
|
const mouseUpHandler = function(e) {
|
|
// Delete dragging element
|
|
draggingElement.remove();
|
|
|
|
// Make BOM selectable again
|
|
bom.style.removeProperty("userSelect");
|
|
|
|
// Remove listeners
|
|
document.removeEventListener('mousemove', mouseMoveHandler);
|
|
document.removeEventListener('mouseup', mouseUpHandler);
|
|
|
|
if (wasDragged) {
|
|
// Redraw whole BOM
|
|
populateBomTable();
|
|
}
|
|
}
|
|
|
|
const mouseMoveHandler = function(e) {
|
|
// Notice the dragging
|
|
wasDragged = true;
|
|
|
|
// Make the dragged element visible
|
|
draggingElement.style.removeProperty("display");
|
|
|
|
// Set elements position to mouse position
|
|
draggingElement.style.left = `${e.screenX - xOffset}px`;
|
|
draggingElement.style.top = `${e.screenY - yOffset}px`;
|
|
|
|
// Forced redrawing of BOM table
|
|
if (forcePopulation) {
|
|
forcePopulation = false;
|
|
// Copy array
|
|
phe = Array.from(placeHolderElements);
|
|
// populate BOM table again
|
|
populateBomHeader(dragName, phe);
|
|
populateBomBody(dragName, phe);
|
|
}
|
|
|
|
// Set up array of hidden columns
|
|
var hiddenColumns = Array.from(settings.hiddenColumns);
|
|
// In the ungrouped mode, quantity don't exist
|
|
if (settings.bommode === "ungrouped")
|
|
hiddenColumns.push("Quantity");
|
|
// If no checkbox fields can be found, we consider them hidden
|
|
if (settings.checkboxes.length == 0)
|
|
hiddenColumns.push("checkboxes");
|
|
|
|
// Get table headers and group them into checkboxes, extrafields and normal headers
|
|
const bh = document.getElementById("bomhead");
|
|
headers = Array.from(bh.querySelectorAll("th"))
|
|
headers.shift() // numCol is not part of the columnOrder
|
|
headerGroups = []
|
|
lastCompoundClass = null;
|
|
for (i = 0; i < settings.columnOrder.length; i++) {
|
|
cElem = settings.columnOrder[i];
|
|
if (hiddenColumns.includes(cElem)) {
|
|
// Hidden columns appear as a dummy element
|
|
headerGroups.push([]);
|
|
continue;
|
|
}
|
|
elem = headers.filter(e => getColumnOrderName(e) === cElem)[0];
|
|
if (elem.classList.contains("bom-checkbox")) {
|
|
if (lastCompoundClass === "bom-checkbox") {
|
|
cbGroup = headerGroups.pop();
|
|
cbGroup.push(elem);
|
|
headerGroups.push(cbGroup);
|
|
} else {
|
|
lastCompoundClass = "bom-checkbox";
|
|
headerGroups.push([elem])
|
|
}
|
|
} else {
|
|
headerGroups.push([elem])
|
|
}
|
|
}
|
|
|
|
// Copy settings.columnOrder
|
|
var columns = Array.from(settings.columnOrder)
|
|
|
|
// Set up array with indices of hidden columns
|
|
var hiddenIndices = hiddenColumns.map(e => settings.columnOrder.indexOf(e));
|
|
var dragIndex = columns.indexOf(dragName);
|
|
var swapIndex = dragIndex;
|
|
var swapDone = false;
|
|
|
|
// Check if the current dragged element is swapable with the left or right element
|
|
if (dragIndex > 0) {
|
|
// Get left headers boundingbox
|
|
swapIndex = dragIndex - 1;
|
|
while (hiddenIndices.includes(swapIndex) && swapIndex > 0)
|
|
swapIndex--;
|
|
if (!hiddenIndices.includes(swapIndex)) {
|
|
box = getBoundingClientRectFromMultiple(headerGroups[swapIndex]);
|
|
if (e.clientX < box.left + window.scrollX + (box.width / 2)) {
|
|
swapElement = columns[dragIndex];
|
|
columns.splice(dragIndex, 1);
|
|
columns.splice(swapIndex, 0, swapElement);
|
|
forcePopulation = true;
|
|
swapDone = true;
|
|
}
|
|
}
|
|
}
|
|
if ((!swapDone) && dragIndex < headerGroups.length - 1) {
|
|
// Get right headers boundingbox
|
|
swapIndex = dragIndex + 1;
|
|
while (hiddenIndices.includes(swapIndex))
|
|
swapIndex++;
|
|
if (swapIndex < headerGroups.length) {
|
|
box = getBoundingClientRectFromMultiple(headerGroups[swapIndex]);
|
|
if (e.clientX > box.left + window.scrollX + (box.width / 2)) {
|
|
swapElement = columns[dragIndex];
|
|
columns.splice(dragIndex, 1);
|
|
columns.splice(swapIndex, 0, swapElement);
|
|
forcePopulation = true;
|
|
swapDone = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
// Write back change to storage
|
|
if (swapDone) {
|
|
settings.columnOrder = columns
|
|
writeStorage("columnOrder", JSON.stringify(columns));
|
|
}
|
|
|
|
}
|
|
|
|
const mouseDownHandler = function(e) {
|
|
var target = e.target;
|
|
if (target.tagName.toLowerCase() != "td")
|
|
target = target.parentElement;
|
|
|
|
// Used to check if a dragging has ever happened
|
|
wasDragged = false;
|
|
|
|
// Create new element which will be displayed as the dragged column
|
|
draggingElement = document.createElement("div")
|
|
draggingElement.classList.add("dragging");
|
|
draggingElement.style.display = "none";
|
|
draggingElement.style.position = "absolute";
|
|
draggingElement.style.overflow = "hidden";
|
|
|
|
// Get bomhead and bombody elements
|
|
const bh = document.getElementById("bomhead");
|
|
const bb = document.getElementById("bombody");
|
|
|
|
// Get all compound headers for the current column
|
|
var compoundHeaders;
|
|
if (target.classList.contains("bom-checkbox")) {
|
|
compoundHeaders = Array.from(bh.querySelectorAll("th.bom-checkbox"));
|
|
} else {
|
|
compoundHeaders = [target];
|
|
}
|
|
|
|
// Create new table which will display the column
|
|
var newTable = document.createElement("table");
|
|
newTable.classList.add("bom");
|
|
newTable.style.background = "white";
|
|
draggingElement.append(newTable);
|
|
|
|
// Create new header element
|
|
var newHeader = document.createElement("thead");
|
|
newTable.append(newHeader);
|
|
|
|
// Set up array for storing all placeholder elements
|
|
placeHolderElements = [];
|
|
|
|
// Add all compound headers to the new thead element and placeholders
|
|
compoundHeaders.forEach(function(h) {
|
|
clone = cloneElementWithDimensions(h);
|
|
newHeader.append(clone);
|
|
placeHolderElements.push(clone);
|
|
});
|
|
|
|
// Create new body element
|
|
var newBody = document.createElement("tbody");
|
|
newTable.append(newBody);
|
|
|
|
// Get indices for compound headers
|
|
var idxs = compoundHeaders.map(e => getBomTableHeaderIndex(e));
|
|
|
|
// For each row in the BOM body...
|
|
var rows = bb.querySelectorAll("tr");
|
|
rows.forEach(function(row) {
|
|
// ..get the cells for the compound column
|
|
const tds = row.querySelectorAll("td");
|
|
var copytds = idxs.map(i => tds[i]);
|
|
// Add them to the new element and the placeholders
|
|
var newRow = document.createElement("tr");
|
|
copytds.forEach(function(td) {
|
|
clone = cloneElementWithDimensions(td);
|
|
newRow.append(clone);
|
|
placeHolderElements.push(clone);
|
|
});
|
|
newBody.append(newRow);
|
|
});
|
|
|
|
// Compute width for compound header
|
|
var width = compoundHeaders.reduce((acc, x) => acc + x.clientWidth, 0);
|
|
draggingElement.style.width = `${width}px`;
|
|
|
|
// Insert the new dragging element and disable selection on BOM
|
|
bom.insertBefore(draggingElement, null);
|
|
bom.style.userSelect = "none";
|
|
|
|
// Determine the mouse position offset
|
|
xOffset = e.screenX - compoundHeaders.reduce((acc, x) => Math.min(acc, x.offsetLeft), compoundHeaders[0].offsetLeft);
|
|
yOffset = e.screenY - compoundHeaders[0].offsetTop;
|
|
|
|
// Get name for the column in settings.columnOrder
|
|
dragName = getColumnOrderName(target);
|
|
|
|
// Change text and class for placeholder elements
|
|
placeHolderElements = placeHolderElements.map(function(e) {
|
|
newElem = cloneElementWithDimensions(e);
|
|
newElem.textContent = "";
|
|
newElem.classList.add("placeholder");
|
|
return newElem;
|
|
});
|
|
|
|
// On next mouse move, the whole BOM needs to be redrawn to show the placeholders
|
|
forcePopulation = true;
|
|
|
|
// Add listeners for move and up on mouse
|
|
document.addEventListener('mousemove', mouseMoveHandler);
|
|
document.addEventListener('mouseup', mouseUpHandler);
|
|
}
|
|
|
|
// In netlist mode, there is nothing to reorder
|
|
if (settings.bommode === "netlist")
|
|
return;
|
|
|
|
// Add mouseDownHandler to every column except the numCol
|
|
bom.querySelectorAll("th")
|
|
.forEach(function(head) {
|
|
if (!head.classList.contains("numCol")) {
|
|
head.onmousedown = mouseDownHandler;
|
|
}
|
|
});
|
|
|
|
}
|
|
|
|
function getBoundingClientRectFromMultiple(elements) {
|
|
var elems = Array.from(elements);
|
|
|
|
if (elems.length == 0)
|
|
return null;
|
|
|
|
var box = elems.shift()
|
|
.getBoundingClientRect();
|
|
|
|
elems.forEach(function(elem) {
|
|
var elembox = elem.getBoundingClientRect();
|
|
box.left = Math.min(elembox.left, box.left);
|
|
box.top = Math.min(elembox.top, box.top);
|
|
box.width += elembox.width;
|
|
box.height = Math.max(elembox.height, box.height);
|
|
});
|
|
|
|
return box;
|
|
}
|
|
|
|
function cloneElementWithDimensions(elem) {
|
|
var newElem = elem.cloneNode(true);
|
|
newElem.style.height = window.getComputedStyle(elem).height;
|
|
newElem.style.width = window.getComputedStyle(elem).width;
|
|
return newElem;
|
|
}
|
|
|
|
function getBomTableHeaderIndex(elem) {
|
|
const bh = document.getElementById('bomhead');
|
|
const ths = Array.from(bh.querySelectorAll("th"));
|
|
return ths.indexOf(elem);
|
|
}
|
|
|
|
function getColumnOrderName(elem) {
|
|
var cname = elem.getAttribute("col_name");
|
|
if (cname === "bom-checkbox")
|
|
return "checkboxes";
|
|
else
|
|
return cname;
|
|
}
|
|
|
|
function resizableGrid(tablehead) {
|
|
var cols = tablehead.firstElementChild.children;
|
|
var rowWidth = tablehead.offsetWidth;
|
|
|
|
for (var i = 1; i < cols.length; i++) {
|
|
if (cols[i].classList.contains("bom-checkbox"))
|
|
continue;
|
|
cols[i].style.width = ((cols[i].clientWidth - paddingDiff(cols[i])) * 100 / rowWidth) + '%';
|
|
}
|
|
|
|
for (var i = 1; i < cols.length - 1; i++) {
|
|
var div = document.createElement('div');
|
|
div.className = "column-width-handle";
|
|
cols[i].appendChild(div);
|
|
setListeners(div);
|
|
}
|
|
|
|
function setListeners(div) {
|
|
var startX, curCol, nxtCol, curColWidth, nxtColWidth, rowWidth;
|
|
|
|
div.addEventListener('mousedown', function(e) {
|
|
e.preventDefault();
|
|
e.stopPropagation();
|
|
|
|
curCol = e.target.parentElement;
|
|
nxtCol = curCol.nextElementSibling;
|
|
startX = e.pageX;
|
|
|
|
var padding = paddingDiff(curCol);
|
|
|
|
rowWidth = curCol.parentElement.offsetWidth;
|
|
curColWidth = curCol.clientWidth - padding;
|
|
nxtColWidth = nxtCol.clientWidth - padding;
|
|
});
|
|
|
|
document.addEventListener('mousemove', function(e) {
|
|
if (startX) {
|
|
var diffX = e.pageX - startX;
|
|
diffX = -Math.min(-diffX, curColWidth - 20);
|
|
diffX = Math.min(diffX, nxtColWidth - 20);
|
|
|
|
curCol.style.width = ((curColWidth + diffX) * 100 / rowWidth) + '%';
|
|
nxtCol.style.width = ((nxtColWidth - diffX) * 100 / rowWidth) + '%';
|
|
console.log(`${curColWidth + nxtColWidth} ${(curColWidth + diffX) * 100 / rowWidth + (nxtColWidth - diffX) * 100 / rowWidth}`);
|
|
}
|
|
});
|
|
|
|
document.addEventListener('mouseup', function(e) {
|
|
curCol = undefined;
|
|
nxtCol = undefined;
|
|
startX = undefined;
|
|
nxtColWidth = undefined;
|
|
curColWidth = undefined
|
|
});
|
|
}
|
|
|
|
function paddingDiff(col) {
|
|
|
|
if (getStyleVal(col, 'box-sizing') == 'border-box') {
|
|
return 0;
|
|
}
|
|
|
|
var padLeft = getStyleVal(col, 'padding-left');
|
|
var padRight = getStyleVal(col, 'padding-right');
|
|
return (parseInt(padLeft) + parseInt(padRight));
|
|
|
|
}
|
|
|
|
function getStyleVal(elm, css) {
|
|
return (window.getComputedStyle(elm, null).getPropertyValue(css))
|
|
}
|
|
}
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
/* DOM manipulation and misc code */
|
|
|
|
var bomsplit;
|
|
var canvassplit;
|
|
var initDone = false;
|
|
var bomSortFunction = null;
|
|
var currentSortColumn = null;
|
|
var currentSortOrder = null;
|
|
var currentHighlightedRowId;
|
|
var highlightHandlers = [];
|
|
var footprintIndexToHandler = {};
|
|
var netsToHandler = {};
|
|
var markedFootprints = new Set();
|
|
var highlightedFootprints = [];
|
|
var highlightedNet = null;
|
|
var lastClicked;
|
|
|
|
function dbg(html) {
|
|
dbgdiv.innerHTML = html;
|
|
}
|
|
|
|
function redrawIfInitDone() {
|
|
if (initDone) {
|
|
redrawCanvas(allcanvas.front);
|
|
redrawCanvas(allcanvas.back);
|
|
}
|
|
}
|
|
|
|
function padsVisible(value) {
|
|
writeStorage("padsVisible", value);
|
|
settings.renderPads = value;
|
|
redrawIfInitDone();
|
|
}
|
|
|
|
function referencesVisible(value) {
|
|
writeStorage("referencesVisible", value);
|
|
settings.renderReferences = value;
|
|
redrawIfInitDone();
|
|
}
|
|
|
|
function valuesVisible(value) {
|
|
writeStorage("valuesVisible", value);
|
|
settings.renderValues = value;
|
|
redrawIfInitDone();
|
|
}
|
|
|
|
function tracksVisible(value) {
|
|
writeStorage("tracksVisible", value);
|
|
settings.renderTracks = value;
|
|
redrawIfInitDone();
|
|
}
|
|
|
|
function zonesVisible(value) {
|
|
writeStorage("zonesVisible", value);
|
|
settings.renderZones = value;
|
|
redrawIfInitDone();
|
|
}
|
|
|
|
function dnpOutline(value) {
|
|
writeStorage("dnpOutline", value);
|
|
settings.renderDnpOutline = value;
|
|
redrawIfInitDone();
|
|
}
|
|
|
|
function setDarkMode(value) {
|
|
if (value) {
|
|
topmostdiv.classList.add("dark");
|
|
} else {
|
|
topmostdiv.classList.remove("dark");
|
|
}
|
|
writeStorage("darkmode", value);
|
|
settings.darkMode = value;
|
|
redrawIfInitDone();
|
|
}
|
|
|
|
function setShowBOMColumn(field, value) {
|
|
if (field === "references") {
|
|
var rl = document.getElementById("reflookup");
|
|
rl.disabled = !value;
|
|
if (!value) {
|
|
rl.value = "";
|
|
updateRefLookup("");
|
|
}
|
|
}
|
|
|
|
var n = settings.hiddenColumns.indexOf(field);
|
|
if (value) {
|
|
if (n != -1) {
|
|
settings.hiddenColumns.splice(n, 1);
|
|
}
|
|
} else {
|
|
if (n == -1) {
|
|
settings.hiddenColumns.push(field);
|
|
}
|
|
}
|
|
|
|
writeStorage("hiddenColumns", JSON.stringify(settings.hiddenColumns));
|
|
|
|
if (initDone) {
|
|
populateBomTable();
|
|
}
|
|
|
|
redrawIfInitDone();
|
|
}
|
|
|
|
|
|
function setFullscreen(value) {
|
|
if (value) {
|
|
document.documentElement.requestFullscreen();
|
|
} else {
|
|
document.exitFullscreen();
|
|
}
|
|
}
|
|
|
|
function fabricationVisible(value) {
|
|
writeStorage("fabricationVisible", value);
|
|
settings.renderFabrication = value;
|
|
redrawIfInitDone();
|
|
}
|
|
|
|
function silkscreenVisible(value) {
|
|
writeStorage("silkscreenVisible", value);
|
|
settings.renderSilkscreen = value;
|
|
redrawIfInitDone();
|
|
}
|
|
|
|
function setHighlightPin1(value) {
|
|
writeStorage("highlightpin1", value);
|
|
settings.highlightpin1 = value;
|
|
redrawIfInitDone();
|
|
}
|
|
|
|
function getStoredCheckboxRefs(checkbox) {
|
|
function convert(ref) {
|
|
var intref = parseInt(ref);
|
|
if (isNaN(intref)) {
|
|
for (var i = 0; i < pcbdata.footprints.length; i++) {
|
|
if (pcbdata.footprints[i].ref == ref) {
|
|
return i;
|
|
}
|
|
}
|
|
return -1;
|
|
} else {
|
|
return intref;
|
|
}
|
|
}
|
|
if (!(checkbox in settings.checkboxStoredRefs)) {
|
|
var val = readStorage("checkbox_" + checkbox);
|
|
settings.checkboxStoredRefs[checkbox] = val ? val : "";
|
|
}
|
|
if (!settings.checkboxStoredRefs[checkbox]) {
|
|
return new Set();
|
|
} else {
|
|
return new Set(settings.checkboxStoredRefs[checkbox].split(",").map(r => convert(r)).filter(a => a >= 0));
|
|
}
|
|
}
|
|
|
|
function getCheckboxState(checkbox, references) {
|
|
var storedRefsSet = getStoredCheckboxRefs(checkbox);
|
|
var currentRefsSet = new Set(references.map(r => r[1]));
|
|
// Get difference of current - stored
|
|
var difference = new Set(currentRefsSet);
|
|
for (ref of storedRefsSet) {
|
|
difference.delete(ref);
|
|
}
|
|
if (difference.size == 0) {
|
|
// All the current refs are stored
|
|
return "checked";
|
|
} else if (difference.size == currentRefsSet.size) {
|
|
// None of the current refs are stored
|
|
return "unchecked";
|
|
} else {
|
|
// Some of the refs are stored
|
|
return "indeterminate";
|
|
}
|
|
}
|
|
|
|
function setBomCheckboxState(checkbox, element, references) {
|
|
var state = getCheckboxState(checkbox, references);
|
|
element.checked = (state == "checked");
|
|
element.indeterminate = (state == "indeterminate");
|
|
}
|
|
|
|
function createCheckboxChangeHandler(checkbox, references, row) {
|
|
return function () {
|
|
refsSet = getStoredCheckboxRefs(checkbox);
|
|
var markWhenChecked = settings.markWhenChecked == checkbox;
|
|
eventArgs = {
|
|
checkbox: checkbox,
|
|
refs: references,
|
|
}
|
|
if (this.checked) {
|
|
// checkbox ticked
|
|
for (var ref of references) {
|
|
refsSet.add(ref[1]);
|
|
}
|
|
if (markWhenChecked) {
|
|
row.classList.add("checked");
|
|
for (var ref of references) {
|
|
markedFootprints.add(ref[1]);
|
|
}
|
|
drawHighlights();
|
|
}
|
|
eventArgs.state = 'checked';
|
|
} else {
|
|
// checkbox unticked
|
|
for (var ref of references) {
|
|
refsSet.delete(ref[1]);
|
|
}
|
|
if (markWhenChecked) {
|
|
row.classList.remove("checked");
|
|
for (var ref of references) {
|
|
markedFootprints.delete(ref[1]);
|
|
}
|
|
drawHighlights();
|
|
}
|
|
eventArgs.state = 'unchecked';
|
|
}
|
|
settings.checkboxStoredRefs[checkbox] = [...refsSet].join(",");
|
|
writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
|
|
updateCheckboxStats(checkbox);
|
|
EventHandler.emitEvent(IBOM_EVENT_TYPES.CHECKBOX_CHANGE_EVENT, eventArgs);
|
|
}
|
|
}
|
|
|
|
function clearHighlightedFootprints() {
|
|
if (currentHighlightedRowId) {
|
|
document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
|
|
currentHighlightedRowId = null;
|
|
highlightedFootprints = [];
|
|
highlightedNet = null;
|
|
}
|
|
}
|
|
|
|
function createRowHighlightHandler(rowid, refs, net) {
|
|
return function () {
|
|
if (currentHighlightedRowId) {
|
|
if (currentHighlightedRowId == rowid) {
|
|
return;
|
|
}
|
|
document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
|
|
}
|
|
document.getElementById(rowid).classList.add("highlighted");
|
|
currentHighlightedRowId = rowid;
|
|
highlightedFootprints = refs ? refs.map(r => r[1]) : [];
|
|
highlightedNet = net;
|
|
drawHighlights();
|
|
EventHandler.emitEvent(
|
|
IBOM_EVENT_TYPES.HIGHLIGHT_EVENT, {
|
|
rowid: rowid,
|
|
refs: refs,
|
|
net: net
|
|
});
|
|
}
|
|
}
|
|
|
|
function entryMatches(entry) {
|
|
if (settings.bommode == "netlist") {
|
|
// entry is just a net name
|
|
return entry.toLowerCase().indexOf(filter) >= 0;
|
|
}
|
|
// check refs
|
|
if (!settings.hiddenColumns.includes("references")) {
|
|
for (var ref of entry) {
|
|
if (ref[0].toLowerCase().indexOf(filter) >= 0) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
// check fields
|
|
for (var i in config.fields) {
|
|
var f = config.fields[i];
|
|
if (!settings.hiddenColumns.includes(f)) {
|
|
for (var ref of entry) {
|
|
if (pcbdata.bom.fields[ref[1]][i].toLowerCase().indexOf(filter) >= 0) {
|
|
return true;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return false;
|
|
}
|
|
|
|
function findRefInEntry(entry) {
|
|
return entry.filter(r => r[0].toLowerCase() == reflookup);
|
|
}
|
|
|
|
function highlightFilter(s) {
|
|
if (!filter) {
|
|
return s;
|
|
}
|
|
var parts = s.toLowerCase().split(filter);
|
|
if (parts.length == 1) {
|
|
return s;
|
|
}
|
|
var r = "";
|
|
var pos = 0;
|
|
for (var i in parts) {
|
|
if (i > 0) {
|
|
r += '<mark class="highlight">' +
|
|
s.substring(pos, pos + filter.length) +
|
|
'</mark>';
|
|
pos += filter.length;
|
|
}
|
|
r += s.substring(pos, pos + parts[i].length);
|
|
pos += parts[i].length;
|
|
}
|
|
return r;
|
|
}
|
|
|
|
function checkboxSetUnsetAllHandler(checkboxname) {
|
|
return function () {
|
|
var checkboxnum = 0;
|
|
while (checkboxnum < settings.checkboxes.length &&
|
|
settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
|
|
checkboxnum++;
|
|
}
|
|
if (checkboxnum >= settings.checkboxes.length) {
|
|
return;
|
|
}
|
|
var allset = true;
|
|
var checkbox;
|
|
var row;
|
|
for (row of bombody.childNodes) {
|
|
checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
|
|
if (!checkbox.checked || checkbox.indeterminate) {
|
|
allset = false;
|
|
break;
|
|
}
|
|
}
|
|
for (row of bombody.childNodes) {
|
|
checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
|
|
checkbox.checked = !allset;
|
|
checkbox.indeterminate = false;
|
|
checkbox.onchange();
|
|
}
|
|
}
|
|
}
|
|
|
|
function createColumnHeader(name, cls, comparator, is_checkbox = false) {
|
|
var th = document.createElement("TH");
|
|
th.innerHTML = name;
|
|
th.classList.add(cls);
|
|
if (is_checkbox)
|
|
th.setAttribute("col_name", "bom-checkbox");
|
|
else
|
|
th.setAttribute("col_name", name);
|
|
var span = document.createElement("SPAN");
|
|
span.classList.add("sortmark");
|
|
span.classList.add("none");
|
|
th.appendChild(span);
|
|
var spacer = document.createElement("div");
|
|
spacer.className = "column-spacer";
|
|
th.appendChild(spacer);
|
|
spacer.onclick = function () {
|
|
if (currentSortColumn && th !== currentSortColumn) {
|
|
// Currently sorted by another column
|
|
currentSortColumn.childNodes[1].classList.remove(currentSortOrder);
|
|
currentSortColumn.childNodes[1].classList.add("none");
|
|
currentSortColumn = null;
|
|
currentSortOrder = null;
|
|
}
|
|
if (currentSortColumn && th === currentSortColumn) {
|
|
// Already sorted by this column
|
|
if (currentSortOrder == "asc") {
|
|
// Sort by this column, descending order
|
|
bomSortFunction = function (a, b) {
|
|
return -comparator(a, b);
|
|
}
|
|
currentSortColumn.childNodes[1].classList.remove("asc");
|
|
currentSortColumn.childNodes[1].classList.add("desc");
|
|
currentSortOrder = "desc";
|
|
} else {
|
|
// Unsort
|
|
bomSortFunction = null;
|
|
currentSortColumn.childNodes[1].classList.remove("desc");
|
|
currentSortColumn.childNodes[1].classList.add("none");
|
|
currentSortColumn = null;
|
|
currentSortOrder = null;
|
|
}
|
|
} else {
|
|
// Sort by this column, ascending order
|
|
bomSortFunction = comparator;
|
|
currentSortColumn = th;
|
|
currentSortColumn.childNodes[1].classList.remove("none");
|
|
currentSortColumn.childNodes[1].classList.add("asc");
|
|
currentSortOrder = "asc";
|
|
}
|
|
populateBomBody();
|
|
}
|
|
if (is_checkbox) {
|
|
spacer.onclick = fancyDblClickHandler(
|
|
spacer, spacer.onclick, checkboxSetUnsetAllHandler(name));
|
|
}
|
|
return th;
|
|
}
|
|
|
|
function populateBomHeader(placeHolderColumn = null, placeHolderElements = null) {
|
|
while (bomhead.firstChild) {
|
|
bomhead.removeChild(bomhead.firstChild);
|
|
}
|
|
var tr = document.createElement("TR");
|
|
var th = document.createElement("TH");
|
|
th.classList.add("numCol");
|
|
|
|
var vismenu = document.createElement("div");
|
|
vismenu.id = "vismenu";
|
|
vismenu.classList.add("menu");
|
|
|
|
var visbutton = document.createElement("div");
|
|
visbutton.classList.add("visbtn");
|
|
visbutton.classList.add("hideonprint");
|
|
|
|
var viscontent = document.createElement("div");
|
|
viscontent.classList.add("menu-content");
|
|
viscontent.id = "vismenu-content";
|
|
|
|
settings.columnOrder.forEach(column => {
|
|
if (typeof column !== "string")
|
|
return;
|
|
|
|
// Skip empty columns
|
|
if (column === "checkboxes" && settings.checkboxes.length == 0)
|
|
return;
|
|
else if (column === "Quantity" && settings.bommode == "ungrouped")
|
|
return;
|
|
|
|
var label = document.createElement("label");
|
|
label.classList.add("menu-label");
|
|
|
|
var input = document.createElement("input");
|
|
input.classList.add("visibility_checkbox");
|
|
input.type = "checkbox";
|
|
input.onchange = function (e) {
|
|
setShowBOMColumn(column, e.target.checked)
|
|
};
|
|
input.checked = !(settings.hiddenColumns.includes(column));
|
|
|
|
label.appendChild(input);
|
|
if (column.length > 0)
|
|
label.append(column[0].toUpperCase() + column.slice(1));
|
|
|
|
viscontent.appendChild(label);
|
|
});
|
|
|
|
viscontent.childNodes[0].classList.add("menu-label-top");
|
|
|
|
vismenu.appendChild(visbutton);
|
|
if (settings.bommode != "netlist") {
|
|
vismenu.appendChild(viscontent);
|
|
th.appendChild(vismenu);
|
|
}
|
|
tr.appendChild(th);
|
|
|
|
var checkboxCompareClosure = function (checkbox) {
|
|
return (a, b) => {
|
|
var stateA = getCheckboxState(checkbox, a);
|
|
var stateB = getCheckboxState(checkbox, b);
|
|
if (stateA > stateB) return -1;
|
|
if (stateA < stateB) return 1;
|
|
return 0;
|
|
}
|
|
}
|
|
var stringFieldCompareClosure = function (fieldIndex) {
|
|
return (a, b) => {
|
|
var fa = pcbdata.bom.fields[a[0][1]][fieldIndex];
|
|
var fb = pcbdata.bom.fields[b[0][1]][fieldIndex];
|
|
if (fa != fb) return fa > fb ? 1 : -1;
|
|
else return 0;
|
|
}
|
|
}
|
|
var referenceRegex = /(?<prefix>[^0-9]+)(?<number>[0-9]+)/;
|
|
var compareRefs = (a, b) => {
|
|
var ra = referenceRegex.exec(a);
|
|
var rb = referenceRegex.exec(b);
|
|
if (ra === null || rb === null) {
|
|
if (a != b) return a > b ? 1 : -1;
|
|
return 0;
|
|
} else {
|
|
if (ra.groups.prefix != rb.groups.prefix) {
|
|
return ra.groups.prefix > rb.groups.prefix ? 1 : -1;
|
|
}
|
|
if (ra.groups.number != rb.groups.number) {
|
|
return parseInt(ra.groups.number) > parseInt(rb.groups.number) ? 1 : -1;
|
|
}
|
|
return 0;
|
|
}
|
|
}
|
|
if (settings.bommode == "netlist") {
|
|
th = createColumnHeader("Net name", "bom-netname", (a, b) => {
|
|
if (a > b) return -1;
|
|
if (a < b) return 1;
|
|
return 0;
|
|
});
|
|
tr.appendChild(th);
|
|
} else {
|
|
// Filter hidden columns
|
|
var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
|
|
var valueIndex = config.fields.indexOf("Value");
|
|
var footprintIndex = config.fields.indexOf("Footprint");
|
|
columns.forEach((column) => {
|
|
if (column === placeHolderColumn) {
|
|
var n = 1;
|
|
if (column === "checkboxes")
|
|
n = settings.checkboxes.length;
|
|
for (i = 0; i < n; i++) {
|
|
td = placeHolderElements.shift();
|
|
tr.appendChild(td);
|
|
}
|
|
return;
|
|
} else if (column === "checkboxes") {
|
|
for (var checkbox of settings.checkboxes) {
|
|
th = createColumnHeader(
|
|
checkbox, "bom-checkbox", checkboxCompareClosure(checkbox), true);
|
|
tr.appendChild(th);
|
|
}
|
|
} else if (column === "References") {
|
|
tr.appendChild(createColumnHeader("References", "references", (a, b) => {
|
|
var i = 0;
|
|
while (i < a.length && i < b.length) {
|
|
if (a[i] != b[i]) return compareRefs(a[i][0], b[i][0]);
|
|
i++;
|
|
}
|
|
return a.length - b.length;
|
|
}));
|
|
} else if (column === "Value") {
|
|
tr.appendChild(createColumnHeader("Value", "value", (a, b) => {
|
|
var ra = a[0][1], rb = b[0][1];
|
|
return valueCompare(
|
|
pcbdata.bom.parsedValues[ra], pcbdata.bom.parsedValues[rb],
|
|
pcbdata.bom.fields[ra][valueIndex], pcbdata.bom.fields[rb][valueIndex]);
|
|
}));
|
|
return;
|
|
} else if (column === "Footprint") {
|
|
tr.appendChild(createColumnHeader(
|
|
"Footprint", "footprint", stringFieldCompareClosure(footprintIndex)));
|
|
} else if (column === "Quantity" && settings.bommode == "grouped") {
|
|
tr.appendChild(createColumnHeader("Quantity", "quantity", (a, b) => {
|
|
return a.length - b.length;
|
|
}));
|
|
} else {
|
|
// Other fields
|
|
var i = config.fields.indexOf(column);
|
|
if (i < 0)
|
|
return;
|
|
tr.appendChild(createColumnHeader(
|
|
column, `field${i + 1}`, stringFieldCompareClosure(i)));
|
|
}
|
|
});
|
|
}
|
|
bomhead.appendChild(tr);
|
|
}
|
|
|
|
function populateBomBody(placeholderColumn = null, placeHolderElements = null) {
|
|
while (bom.firstChild) {
|
|
bom.removeChild(bom.firstChild);
|
|
}
|
|
highlightHandlers = [];
|
|
footprintIndexToHandler = {};
|
|
netsToHandler = {};
|
|
currentHighlightedRowId = null;
|
|
var first = true;
|
|
if (settings.bommode == "netlist") {
|
|
bomtable = pcbdata.nets.slice();
|
|
} else {
|
|
switch (settings.canvaslayout) {
|
|
case 'F':
|
|
bomtable = pcbdata.bom.F.slice();
|
|
break;
|
|
case 'FB':
|
|
bomtable = pcbdata.bom.both.slice();
|
|
break;
|
|
case 'B':
|
|
bomtable = pcbdata.bom.B.slice();
|
|
break;
|
|
}
|
|
if (settings.bommode == "ungrouped") {
|
|
// expand bom table
|
|
expandedTable = []
|
|
for (var bomentry of bomtable) {
|
|
for (var ref of bomentry) {
|
|
expandedTable.push([ref]);
|
|
}
|
|
}
|
|
bomtable = expandedTable;
|
|
}
|
|
}
|
|
if (bomSortFunction) {
|
|
bomtable = bomtable.sort(bomSortFunction);
|
|
}
|
|
for (var i in bomtable) {
|
|
var bomentry = bomtable[i];
|
|
if (filter && !entryMatches(bomentry)) {
|
|
continue;
|
|
}
|
|
var references = null;
|
|
var netname = null;
|
|
var tr = document.createElement("TR");
|
|
var td = document.createElement("TD");
|
|
var rownum = +i + 1;
|
|
tr.id = "bomrow" + rownum;
|
|
td.textContent = rownum;
|
|
tr.appendChild(td);
|
|
if (settings.bommode == "netlist") {
|
|
netname = bomentry;
|
|
td = document.createElement("TD");
|
|
td.innerHTML = highlightFilter(netname ? netname : "<no net>");
|
|
tr.appendChild(td);
|
|
} else {
|
|
if (reflookup) {
|
|
references = findRefInEntry(bomentry);
|
|
if (references.length == 0) {
|
|
continue;
|
|
}
|
|
} else {
|
|
references = bomentry;
|
|
}
|
|
// Filter hidden columns
|
|
var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
|
|
columns.forEach((column) => {
|
|
if (column === placeholderColumn) {
|
|
var n = 1;
|
|
if (column === "checkboxes")
|
|
n = settings.checkboxes.length;
|
|
for (i = 0; i < n; i++) {
|
|
td = placeHolderElements.shift();
|
|
tr.appendChild(td);
|
|
}
|
|
return;
|
|
} else if (column === "checkboxes") {
|
|
for (var checkbox of settings.checkboxes) {
|
|
if (checkbox) {
|
|
td = document.createElement("TD");
|
|
var input = document.createElement("input");
|
|
input.type = "checkbox";
|
|
input.onchange = createCheckboxChangeHandler(checkbox, references, tr);
|
|
setBomCheckboxState(checkbox, input, references);
|
|
if (input.checked && settings.markWhenChecked == checkbox) {
|
|
tr.classList.add("checked");
|
|
}
|
|
td.appendChild(input);
|
|
tr.appendChild(td);
|
|
}
|
|
}
|
|
} else if (column === "References") {
|
|
td = document.createElement("TD");
|
|
td.innerHTML = highlightFilter(references.map(r => r[0]).join(", "));
|
|
tr.appendChild(td);
|
|
} else if (column === "Quantity" && settings.bommode == "grouped") {
|
|
// Quantity
|
|
td = document.createElement("TD");
|
|
td.textContent = references.length;
|
|
tr.appendChild(td);
|
|
} else {
|
|
// All the other fields
|
|
var field_index = config.fields.indexOf(column)
|
|
if (field_index < 0)
|
|
return;
|
|
var valueSet = new Set();
|
|
references.map(r => r[1]).forEach((id) => valueSet.add(pcbdata.bom.fields[id][field_index]));
|
|
td = document.createElement("TD");
|
|
td.innerHTML = highlightFilter(Array.from(valueSet).join(", "));
|
|
tr.appendChild(td);
|
|
}
|
|
});
|
|
}
|
|
bom.appendChild(tr);
|
|
var handler = createRowHighlightHandler(tr.id, references, netname);
|
|
tr.onmousemove = handler;
|
|
highlightHandlers.push({
|
|
id: tr.id,
|
|
handler: handler,
|
|
});
|
|
if (references !== null) {
|
|
for (var refIndex of references.map(r => r[1])) {
|
|
footprintIndexToHandler[refIndex] = handler;
|
|
}
|
|
}
|
|
if (netname !== null) {
|
|
netsToHandler[netname] = handler;
|
|
}
|
|
if ((filter || reflookup) && first) {
|
|
handler();
|
|
first = false;
|
|
}
|
|
}
|
|
EventHandler.emitEvent(
|
|
IBOM_EVENT_TYPES.BOM_BODY_CHANGE_EVENT, {
|
|
filter: filter,
|
|
reflookup: reflookup,
|
|
checkboxes: settings.checkboxes,
|
|
bommode: settings.bommode,
|
|
});
|
|
}
|
|
|
|
function highlightPreviousRow() {
|
|
if (!currentHighlightedRowId) {
|
|
highlightHandlers[highlightHandlers.length - 1].handler();
|
|
} else {
|
|
if (highlightHandlers.length > 1 &&
|
|
highlightHandlers[0].id == currentHighlightedRowId) {
|
|
highlightHandlers[highlightHandlers.length - 1].handler();
|
|
} else {
|
|
for (var i = 0; i < highlightHandlers.length - 1; i++) {
|
|
if (highlightHandlers[i + 1].id == currentHighlightedRowId) {
|
|
highlightHandlers[i].handler();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
smoothScrollToRow(currentHighlightedRowId);
|
|
}
|
|
|
|
function highlightNextRow() {
|
|
if (!currentHighlightedRowId) {
|
|
highlightHandlers[0].handler();
|
|
} else {
|
|
if (highlightHandlers.length > 1 &&
|
|
highlightHandlers[highlightHandlers.length - 1].id == currentHighlightedRowId) {
|
|
highlightHandlers[0].handler();
|
|
} else {
|
|
for (var i = 1; i < highlightHandlers.length; i++) {
|
|
if (highlightHandlers[i - 1].id == currentHighlightedRowId) {
|
|
highlightHandlers[i].handler();
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
smoothScrollToRow(currentHighlightedRowId);
|
|
}
|
|
|
|
function populateBomTable() {
|
|
populateBomHeader();
|
|
populateBomBody();
|
|
setBomHandlers();
|
|
resizableGrid(bomhead);
|
|
}
|
|
|
|
function footprintsClicked(footprintIndexes) {
|
|
var lastClickedIndex = footprintIndexes.indexOf(lastClicked);
|
|
for (var i = 1; i <= footprintIndexes.length; i++) {
|
|
var refIndex = footprintIndexes[(lastClickedIndex + i) % footprintIndexes.length];
|
|
if (refIndex in footprintIndexToHandler) {
|
|
lastClicked = refIndex;
|
|
footprintIndexToHandler[refIndex]();
|
|
smoothScrollToRow(currentHighlightedRowId);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
function netClicked(net) {
|
|
if (net in netsToHandler) {
|
|
netsToHandler[net]();
|
|
smoothScrollToRow(currentHighlightedRowId);
|
|
} else {
|
|
clearHighlightedFootprints();
|
|
highlightedNet = net;
|
|
drawHighlights();
|
|
}
|
|
}
|
|
|
|
function updateFilter(input) {
|
|
filter = input.toLowerCase();
|
|
populateBomTable();
|
|
}
|
|
|
|
function updateRefLookup(input) {
|
|
reflookup = input.toLowerCase();
|
|
populateBomTable();
|
|
}
|
|
|
|
function changeCanvasLayout(layout) {
|
|
document.getElementById("fl-btn").classList.remove("depressed");
|
|
document.getElementById("fb-btn").classList.remove("depressed");
|
|
document.getElementById("bl-btn").classList.remove("depressed");
|
|
switch (layout) {
|
|
case 'F':
|
|
document.getElementById("fl-btn").classList.add("depressed");
|
|
if (settings.bomlayout != "bom-only") {
|
|
canvassplit.collapse(1);
|
|
}
|
|
break;
|
|
case 'B':
|
|
document.getElementById("bl-btn").classList.add("depressed");
|
|
if (settings.bomlayout != "bom-only") {
|
|
canvassplit.collapse(0);
|
|
}
|
|
break;
|
|
default:
|
|
document.getElementById("fb-btn").classList.add("depressed");
|
|
if (settings.bomlayout != "bom-only") {
|
|
canvassplit.setSizes([50, 50]);
|
|
}
|
|
}
|
|
settings.canvaslayout = layout;
|
|
writeStorage("canvaslayout", layout);
|
|
resizeAll();
|
|
changeBomMode(settings.bommode);
|
|
}
|
|
|
|
function populateMetadata() {
|
|
document.getElementById("title").innerHTML = pcbdata.metadata.title;
|
|
document.getElementById("revision").innerHTML = "Rev: " + pcbdata.metadata.revision;
|
|
document.getElementById("company").innerHTML = pcbdata.metadata.company;
|
|
document.getElementById("filedate").innerHTML = pcbdata.metadata.date;
|
|
if (pcbdata.metadata.title != "") {
|
|
document.title = pcbdata.metadata.title + " BOM";
|
|
}
|
|
// Calculate board stats
|
|
var fp_f = 0,
|
|
fp_b = 0,
|
|
pads_f = 0,
|
|
pads_b = 0,
|
|
pads_th = 0;
|
|
for (var i = 0; i < pcbdata.footprints.length; i++) {
|
|
if (pcbdata.bom.skipped.includes(i)) continue;
|
|
var mod = pcbdata.footprints[i];
|
|
if (mod.layer == "F") {
|
|
fp_f++;
|
|
} else {
|
|
fp_b++;
|
|
}
|
|
for (var pad of mod.pads) {
|
|
if (pad.type == "th") {
|
|
pads_th++;
|
|
} else {
|
|
if (pad.layers.includes("F")) {
|
|
pads_f++;
|
|
}
|
|
if (pad.layers.includes("B")) {
|
|
pads_b++;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
document.getElementById("stats-components-front").innerHTML = fp_f;
|
|
document.getElementById("stats-components-back").innerHTML = fp_b;
|
|
document.getElementById("stats-components-total").innerHTML = fp_f + fp_b;
|
|
document.getElementById("stats-groups-front").innerHTML = pcbdata.bom.F.length;
|
|
document.getElementById("stats-groups-back").innerHTML = pcbdata.bom.B.length;
|
|
document.getElementById("stats-groups-total").innerHTML = pcbdata.bom.both.length;
|
|
document.getElementById("stats-smd-pads-front").innerHTML = pads_f;
|
|
document.getElementById("stats-smd-pads-back").innerHTML = pads_b;
|
|
document.getElementById("stats-smd-pads-total").innerHTML = pads_f + pads_b;
|
|
document.getElementById("stats-th-pads").innerHTML = pads_th;
|
|
// Update version string
|
|
document.getElementById("github-link").innerHTML = "InteractiveHtmlBom " +
|
|
/^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) + "%)";
|
|
}
|
|
|
|
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;
|
|
default:
|
|
break;
|
|
}
|
|
if (e.altKey) {
|
|
switch (e.key) {
|
|
case "f":
|
|
focusFilterField();
|
|
e.preventDefault();
|
|
break;
|
|
case "r":
|
|
focusRefLookupField();
|
|
e.preventDefault();
|
|
break;
|
|
case "z":
|
|
changeBomLayout("bom-only");
|
|
e.preventDefault();
|
|
break;
|
|
case "x":
|
|
changeBomLayout("left-right");
|
|
e.preventDefault();
|
|
break;
|
|
case "c":
|
|
changeBomLayout("top-bottom");
|
|
e.preventDefault();
|
|
break;
|
|
case "v":
|
|
changeCanvasLayout("F");
|
|
e.preventDefault();
|
|
break;
|
|
case "b":
|
|
changeCanvasLayout("FB");
|
|
e.preventDefault();
|
|
break;
|
|
case "n":
|
|
changeCanvasLayout("B");
|
|
e.preventDefault();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
if (e.key >= '1' && e.key <= '9') {
|
|
toggleBomCheckbox(currentHighlightedRowId, parseInt(e.key));
|
|
e.preventDefault();
|
|
}
|
|
}
|
|
}
|
|
|
|
function hideNetlistButton() {
|
|
document.getElementById("bom-ungrouped-btn").classList.remove("middle-button");
|
|
document.getElementById("bom-ungrouped-btn").classList.add("right-most-button");
|
|
document.getElementById("bom-netlist-btn").style.display = "none";
|
|
}
|
|
|
|
window.onload = function (e) {
|
|
initUtils();
|
|
initRender();
|
|
initStorage();
|
|
initDefaults();
|
|
cleanGutters();
|
|
populateMetadata();
|
|
dbgdiv = document.getElementById("dbg");
|
|
bom = document.getElementById("bombody");
|
|
bomhead = document.getElementById("bomhead");
|
|
filter = "";
|
|
reflookup = "";
|
|
if (!("nets" in pcbdata)) {
|
|
hideNetlistButton();
|
|
}
|
|
initDone = true;
|
|
setBomCheckboxes(document.getElementById("bomCheckboxes").value);
|
|
// Triggers render
|
|
changeBomLayout(settings.bomlayout);
|
|
|
|
// Users may leave fullscreen without touching the checkbox. Uncheck.
|
|
document.addEventListener('fullscreenchange', () => {
|
|
if (!document.fullscreenElement)
|
|
document.getElementById('fullscreenCheckbox').checked = false;
|
|
});
|
|
}
|
|
|
|
window.onresize = resizeAll;
|
|
window.matchMedia("print").addListener(resizeAll);
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
|
|
///////////////////////////////////////////////
|
|
</script>
|
|
</head>
|
|
|
|
<body>
|
|
|
|
<div id="topmostdiv" class="topmostdiv">
|
|
<div id="top">
|
|
<div style="float: right; height: 100%;">
|
|
<div class="hideonprint menu" style="float: right; top: 8px;">
|
|
<button class="menubtn"></button>
|
|
<div class="menu-content">
|
|
<label class="menu-label menu-label-top" style="width: calc(50% - 18px)">
|
|
<input id="darkmodeCheckbox" type="checkbox" onchange="setDarkMode(this.checked)">
|
|
Dark mode
|
|
</label><!-- This comment eats space! All of it!
|
|
--><label class="menu-label menu-label-top" style="width: calc(50% - 17px); border-left: 0;">
|
|
<input id="fullscreenCheckbox" type="checkbox" onchange="setFullscreen(this.checked)">
|
|
Full Screen
|
|
</label>
|
|
<label class="menu-label" style="width: calc(50% - 18px)">
|
|
<input id="fabricationCheckbox" type="checkbox" checked onchange="fabricationVisible(this.checked)">
|
|
Fab layer
|
|
</label><!-- This comment eats space! All of it!
|
|
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
|
|
<input id="silkscreenCheckbox" type="checkbox" checked onchange="silkscreenVisible(this.checked)">
|
|
Silkscreen
|
|
</label>
|
|
<label class="menu-label" style="width: calc(50% - 18px)">
|
|
<input id="referencesCheckbox" type="checkbox" checked onchange="referencesVisible(this.checked)">
|
|
References
|
|
</label><!-- This comment eats space! All of it!
|
|
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
|
|
<input id="valuesCheckbox" type="checkbox" checked onchange="valuesVisible(this.checked)">
|
|
Values
|
|
</label>
|
|
<div id="tracksAndZonesCheckboxes">
|
|
<label class="menu-label" style="width: calc(50% - 18px)">
|
|
<input id="tracksCheckbox" type="checkbox" checked onchange="tracksVisible(this.checked)">
|
|
Tracks
|
|
</label><!-- This comment eats space! All of it!
|
|
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
|
|
<input id="zonesCheckbox" type="checkbox" checked onchange="zonesVisible(this.checked)">
|
|
Zones
|
|
</label>
|
|
</div>
|
|
<label class="menu-label" style="width: calc(50% - 18px)">
|
|
<input id="padsCheckbox" type="checkbox" checked onchange="padsVisible(this.checked)">
|
|
Pads
|
|
</label><!-- This comment eats space! All of it!
|
|
--><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
|
|
<input id="dnpOutlineCheckbox" type="checkbox" checked onchange="dnpOutline(this.checked)">
|
|
DNP outlined
|
|
</label>
|
|
<label class="menu-label">
|
|
<input id="highlightpin1Checkbox" type="checkbox" onchange="setHighlightPin1(this.checked)">
|
|
Highlight first pin
|
|
</label>
|
|
<label class="menu-label">
|
|
<input id="dragCheckbox" type="checkbox" checked onchange="setRedrawOnDrag(this.checked)">
|
|
Continuous redraw on drag
|
|
</label>
|
|
<label class="menu-label">
|
|
<span>Board rotation</span>
|
|
<span style="float: right"><span id="rotationDegree">0</span>°</span>
|
|
<input id="boardRotation" type="range" min="-36" max="36" value="0" class="slider" oninput="setBoardRotation(this.value)">
|
|
</label>
|
|
<label class="menu-label">
|
|
<div style="margin-left: 5px">Bom checkboxes</div>
|
|
<input id="bomCheckboxes" class="menu-textbox" type=text
|
|
oninput="setBomCheckboxes(this.value)">
|
|
</label>
|
|
<label class="menu-label">
|
|
<div style="margin-left: 5px">Mark when checked</div>
|
|
<div id="markWhenCheckedContainer"></div>
|
|
</label>
|
|
<label class="menu-label">
|
|
<span class="shameless-plug">
|
|
<span>Created using</span>
|
|
<a id="github-link" target="blank" href="https://github.com/openscopeproject/InteractiveHtmlBom">InteractiveHtmlBom</a>
|
|
</span>
|
|
</label>
|
|
</div>
|
|
</div>
|
|
<div class="button-container hideonprint"
|
|
style="float: right; position: relative; top: 8px">
|
|
<button id="fl-btn" class="left-most-button" onclick="changeCanvasLayout('F')"
|
|
title="Front only">F
|
|
</button>
|
|
<button id="fb-btn" class="middle-button" onclick="changeCanvasLayout('FB')"
|
|
title="Front and Back">FB
|
|
</button>
|
|
<button id="bl-btn" class="right-most-button" onclick="changeCanvasLayout('B')"
|
|
title="Back only">B
|
|
</button>
|
|
</div>
|
|
<div class="button-container hideonprint"
|
|
style="float: right; position: relative; top: 8px">
|
|
<button id="bom-btn" class="left-most-button" onclick="changeBomLayout('bom-only')"
|
|
title="BOM only"></button>
|
|
<button id="lr-btn" class="middle-button" onclick="changeBomLayout('left-right')"
|
|
title="BOM left, drawings right"></button>
|
|
<button id="tb-btn" class="right-most-button" onclick="changeBomLayout('top-bottom')"
|
|
title="BOM top, drawings bot"></button>
|
|
</div>
|
|
<div class="button-container hideonprint"
|
|
style="float: right; position: relative; top: 8px">
|
|
<button id="bom-grouped-btn" class="left-most-button" onclick="changeBomMode('grouped')"
|
|
title="Grouped BOM"></button>
|
|
<button id="bom-ungrouped-btn" class="middle-button" onclick="changeBomMode('ungrouped')"
|
|
title="Ungrouped BOM"></button>
|
|
<button id="bom-netlist-btn" class="right-most-button" onclick="changeBomMode('netlist')"
|
|
title="Netlist"></button>
|
|
</div>
|
|
<div class="hideonprint menu" style="float: right; top: 8px;">
|
|
<button class="statsbtn"></button>
|
|
<div class="menu-content">
|
|
<table class="stats">
|
|
<tbody>
|
|
<tr>
|
|
<td width="40%">Board stats</td>
|
|
<td>Front</td>
|
|
<td>Back</td>
|
|
<td>Total</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Components</td>
|
|
<td id="stats-components-front">~</td>
|
|
<td id="stats-components-back">~</td>
|
|
<td id="stats-components-total">~</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Groups</td>
|
|
<td id="stats-groups-front">~</td>
|
|
<td id="stats-groups-back">~</td>
|
|
<td id="stats-groups-total">~</td>
|
|
</tr>
|
|
<tr>
|
|
<td>SMD pads</td>
|
|
<td id="stats-smd-pads-front">~</td>
|
|
<td id="stats-smd-pads-back">~</td>
|
|
<td id="stats-smd-pads-total">~</td>
|
|
</tr>
|
|
<tr>
|
|
<td>TH pads</td>
|
|
<td colspan=3 id="stats-th-pads">~</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<table class="stats">
|
|
<col width="40%"/><col />
|
|
<tbody id="checkbox-stats">
|
|
<tr>
|
|
<td colspan=2 style="border-top: 0">Checkboxes</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
<div class="hideonprint menu" style="float: right; top: 8px;">
|
|
<button class="iobtn"></button>
|
|
<div class="menu-content">
|
|
<div class="menu-label menu-label-top">
|
|
<div style="margin-left: 5px;">Save board image</div>
|
|
<div class="flexbox">
|
|
<input id="render-save-width" class="menu-textbox" type="text" value="1000" placeholder="Width"
|
|
style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
|
|
<span>X</span>
|
|
<input id="render-save-height" class="menu-textbox" type="text" value="1000" placeholder="Height"
|
|
style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
|
|
</div>
|
|
<label>
|
|
<input id="render-save-transparent" type="checkbox">
|
|
Transparent background
|
|
</label>
|
|
<div class="flexbox">
|
|
<button class="savebtn" onclick="saveImage('F')">Front</button>
|
|
<button class="savebtn" onclick="saveImage('B')">Back</button>
|
|
</div>
|
|
</div>
|
|
<div class="menu-label">
|
|
<span style="margin-left: 5px;">Config and checkbox state</span>
|
|
<div class="flexbox">
|
|
<button class="savebtn" onclick="saveSettings()">Export</button>
|
|
<button class="savebtn" onclick="loadSettings()">Import</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</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="copyToClipboard()"></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>
|