Files
C64PSU/Assembly/c64psu-ibom.html

4710 lines
341 KiB
HTML

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