Files

PD_Micro_ibom-2020-06-01.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-color-highlight: #D04040; --pin1-outline-color: #ffb629; --pin1-outline-color-highlight: #b4ff03; --silkscreen-edge-color: #aa4; --silkscreen-polygon-color: #4aa; --silkscreen-text-color: #4aa; --fabrication-edge-color: #907651; --fabrication-polygon-color: #907651; --fabrication-text-color: #a27c24; --track-color: #def5f1; --track-color-highlight: #D04040; --zone-color: #def5f1; --zone-color-highlight: #d0404080; } html, body { margin: 0px; height: 100%; font-family: Verdana, sans-serif; } .dark.topmostdiv { --pcb-edge-color: #eee; --pad-color: #808080; --pin1-outline-color: #ffa800; --pin1-outline-color-highlight: #ccff00; --track-color: #42524f; --zone-color: #42524f; background-color: #252c30; color: #eee; } button { background-color: #eee; border: 1px solid #888; color: black; height: 44px; width: 44px; text-align: center; text-decoration: none; display: inline-block; font-size: 14px; font-weight: bolder; } .dark button { /* This will be inverted */ background-color: #c3b7b5; } button.depressed { background-color: #0a0; color: white; } .dark button.depressed { /* This will be inverted */ background-color: #b3b; } button:focus { outline: 0; } button#tb-btn { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.32 290.12h5.82M1.32 291.45h5.82' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 292.5v4.23M.26 292.63H8.2' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='1.35' y='295.73'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A"); } button#lr-btn { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' fill='none' stroke='%23000' stroke-width='.4' stroke-linejoin='round'/%3E%3Cpath d='M1.06 290.12H3.7m-2.64 1.33H3.7m-2.64 1.32H3.7m-2.64 1.3H3.7m-2.64 1.33H3.7' fill='none' stroke='%23000' stroke-width='.4'/%3E%3Cpath d='M4.37 288.8v7.94m0-4.11h3.96' fill='none' stroke='%23000' stroke-width='.3'/%3E%3Ctext font-weight='700' font-size='3.17' font-family='sans-serif'%3E%3Ctspan x='5.11' y='291.96'%3EF%3C/tspan%3E%3Ctspan x='5.03' y='295.68'%3EB%3C/tspan%3E%3C/text%3E%3C/g%3E%3C/svg%3E%0A"); } button#bom-btn { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 8.47 8.47'%3E%3Crect transform='translate(0 -288.53)' ry='1.17' y='288.8' x='.27' height='7.94' width='7.94' fill='%23f9f9f9'/%3E%3Cg transform='translate(0 -288.53)' fill='none' stroke='%23000' stroke-width='.4'%3E%3Crect width='7.94' height='7.94' x='.27' y='288.8' ry='1.17' stroke-linejoin='round'/%3E%3Cpath d='M1.59 290.12h5.29M1.59 291.45h5.33M1.59 292.75h5.33M1.59 294.09h5.33M1.59 295.41h5.33'/%3E%3C/g%3E%3C/svg%3E"); } button#bom-grouped-btn { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m4 0h5m4 0h3M6.1 22h3m3.9 0h5m4 0h4m-16-8h4m4 0h4'/%3E%3Cpath stroke-linecap='null' d='M5 17.5h22M5 26.6h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E"); } button#bom-ungrouped-btn { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg stroke='%23000' stroke-linejoin='round' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-linecap='square' stroke-width='2' d='M6 10h4m-4 8h3m-3 8h4'/%3E%3Cpath stroke-linecap='null' d='M5 13.5h22m-22 8h22M5 5.5h22'/%3E%3C/g%3E%3C/svg%3E"); } button#bom-netlist-btn { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='32' height='32'%3E%3Cg fill='none' stroke='%23000' class='layer'%3E%3Crect width='29' height='29' x='1.5' y='1.5' stroke-width='2' fill='%23fff' rx='5' ry='5'/%3E%3Cpath stroke-width='2' d='M6 26l6-6v-8m13.8-6.3l-6 6v8'/%3E%3Ccircle cx='11.8' cy='9.5' r='2.8' stroke-width='2'/%3E%3Ccircle cx='19.8' cy='22.8' r='2.8' stroke-width='2'/%3E%3C/g%3E%3C/svg%3E"); } button#copy { background-image: url("data:image/svg+xml,%3Csvg height='48' viewBox='0 0 48 48' width='48' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M0 0h48v48h-48z' fill='none'/%3E%3Cpath d='M32 2h-24c-2.21 0-4 1.79-4 4v28h4v-28h24v-4zm6 8h-22c-2.21 0-4 1.79-4 4v28c0 2.21 1.79 4 4 4h22c2.21 0 4-1.79 4-4v-28c0-2.21-1.79-4-4-4zm0 32h-22v-28h22v28z'/%3E%3C/svg%3E"); background-position: 6px 6px; background-repeat: no-repeat; background-size: 26px 26px; border-radius: 6px; height: 40px; width: 40px; margin: 10px 5px; } button#copy:active { box-shadow: inset 0px 0px 5px #6c6c6c; } textarea.clipboard-temp { position: fixed; top: 0; left: 0; width: 2em; height: 2em; padding: 0; border: None; outline: None; box-shadow: None; background: transparent; } .left-most-button { border-right: 0; border-top-left-radius: 6px; border-bottom-left-radius: 6px; } .middle-button { border-right: 0; } .right-most-button { border-top-right-radius: 6px; border-bottom-right-radius: 6px; } .button-container { font-size: 0; margin: 10px 10px 10px 0px; } .dark .button-container { filter: invert(1); } .button-container button { background-size: 32px 32px; background-position: 5px 5px; background-repeat: no-repeat; } @media print { .hideonprint { display: none; } } canvas { cursor: crosshair; } canvas:active { cursor: grabbing; } .fileinfo { width: 100%; max-width: 1000px; border: none; padding: 5px; } .fileinfo .title { font-size: 20pt; font-weight: bold; } .fileinfo td { overflow: hidden; white-space: nowrap; max-width: 1px; width: 50%; text-overflow: ellipsis; } .bom { border-collapse: collapse; font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace; font-size: 10pt; table-layout: fixed; width: 100%; margin-top: 1px; } .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 { transition: background-color 0.2s; } .bom .numCol { width: 25px; } .bom .Description { width: 10%; } .bom .Part { width: 10%; } .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; } .dark .statsbtn, .dark .savebtn, .dark .menubtn, .dark .iobtn { filter: invert(1); } .flexbox { display: flex; align-items: center; justify-content: space-between; width: 100%; } .savebtn { background-color: #d6d6d6; width: auto; height: 30px; flex-grow: 1; margin: 5px; border-radius: 4px; } .savebtn:active { background-color: #0a0; color: white; } .dark .savebtn:active { /* This will be inverted */ background-color: #b3b; } .stats { border-collapse: collapse; font-size: 12pt; table-layout: fixed; width: 100%; min-width: 450px; } .dark .stats td { border: 1px solid #bbb; } .stats td { border: 1px solid black; padding: 5px; word-wrap: break-word; text-align: center; position: relative; } #checkbox-stats div { position: absolute; left: 0; top: 0; height: 100%; width: 100%; display: flex; align-items: center; justify-content: center; } #checkbox-stats .bar { background-color: rgba(28, 251, 0, 0.6); } .menu { position: relative; display: inline-block; margin: 10px 10px 10px 0px; } .menu-content { 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; } .topmostdiv { width: 100%; height: 100%; background-color: white; transition: background-color 0.3s; } #top { height: 78px; border-bottom: 2px solid black; } .dark #top { border-bottom: 2px solid #ccc; } #dbg { display: block; } ::-webkit-scrollbar { width: 8px; } ::-webkit-scrollbar-track { background: #aaa; } ::-webkit-scrollbar-thumb { background: #666; border-radius: 3px; } ::-webkit-scrollbar-thumb:hover { background: #555; } .slider { -webkit-appearance: none; width: 100%; margin: 3px 0; padding: 0; outline: none; opacity: 0.7; -webkit-transition: .2s; transition: opacity .2s; border-radius: 3px; } .slider:hover { opacity: 1; } .slider:focus { outline: none; } .slider::-webkit-slider-runnable-track { -webkit-appearance: none; width: 100%; height: 8px; background: #d3d3d3; border-radius: 3px; border: none; } .slider::-webkit-slider-thumb { -webkit-appearance: none; width: 15px; height: 15px; border-radius: 50%; background: #0a0; cursor: pointer; margin-top: -4px; } .dark .slider::-webkit-slider-thumb { background: #3d3; } .slider::-moz-range-thumb { width: 15px; height: 15px; border-radius: 50%; background: #0a0; cursor: pointer; } .slider::-moz-range-track { height: 8px; background: #d3d3d3; border-radius: 3px; } .dark .slider::-moz-range-thumb { background: #3d3; } .slider::-ms-track { width: 100%; height: 8px; border-width: 3px 0; background: transparent; border-color: transparent; color: transparent; transition: opacity .2s; } .slider::-ms-fill-lower { background: #d3d3d3; border: none; border-radius: 3px; } .slider::-ms-fill-upper { background: #d3d3d3; border: none; border-radius: 3px; } .slider::-ms-thumb { width: 15px; height: 15px; border-radius: 50%; background: #0a0; cursor: pointer; margin: 0; } .shameless-plug { font-size: 0.8em; text-align: center; display: block; } a { color: #0278a4; } .dark a { color: #00b9fd; } #frontcanvas, #backcanvas { touch-action: none; } </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 = {"show_fabrication": false, "redraw_on_drag": true, "highlight_pin1": false, "extra_fields": [], "dark_mode": false, "bom_view": "left-right", "board_rotation": 0, "checkboxes": "Sourced,Placed", "show_silkscreen": true, "show_pads": true, "layer_view": "FB"} /////////////////////////////////////////////// /////////////////////////////////////////////// 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 copyToClipboard() { var text = ''; for (var node of bomhead.childNodes[0].childNodes) { if (node.firstChild) { text = text + node.firstChild.nodeValue; } if (node != bomhead.childNodes[0].lastChild) { text += '\t'; } } text += '\n'; for (var row of bombody.childNodes) { for (var cell of row.childNodes) { for (var node of cell.childNodes) { if (node.nodeName == "INPUT") { if (node.checked) { text = text + '✓'; } } else if (node.nodeName == "MARK") { text = text + node.firstChild.nodeValue; } else { text = text + node.nodeValue; } } if (cell != row.lastChild) { text += '\t'; } } text += '\n'; } var textArea = document.createElement("textarea"); textArea.classList.add('clipboard-temp'); textArea.value = text; document.body.appendChild(textArea); textArea.focus(); textArea.select(); try { if (document.execCommand('copy')) { console.log('Bom copied to clipboard.'); } } catch (err) { console.log('Can not copy to clipboard.'); } document.body.removeChild(textArea); } function removeGutterNode(node) { for (var i = 0; i < node.childNodes.length; i++) { if (node.childNodes[i].classList && node.childNodes[i].classList.contains("gutter")) { node.removeChild(node.childNodes[i]); break; } } } function cleanGutters() { removeGutterNode(document.getElementById("bot")); removeGutterNode(document.getElementById("canvasdiv")); } var units = { prefixes: { giga: ["G", "g", "giga", "Giga", "GIGA"], mega: ["M", "mega", "Mega", "MEGA"], kilo: ["K", "k", "kilo", "Kilo", "KILO"], milli: ["m", "milli", "Milli", "MILLI"], micro: ["U", "u", "micro", "Micro", "MICRO", "μ", "µ"], // different utf8 μ nano: ["N", "n", "nano", "Nano", "NANO"], pico: ["P", "p", "pico", "Pico", "PICO"], }, unitsShort: ["R", "r", "Ω", "F", "f", "H", "h"], unitsLong: [ "OHM", "Ohm", "ohm", "ohms", "FARAD", "Farad", "farad", "HENRY", "Henry", "henry" ], getMultiplier: function(s) { if (this.prefixes.giga.includes(s)) return 1e9; if (this.prefixes.mega.includes(s)) return 1e6; if (this.prefixes.kilo.includes(s)) return 1e3; if (this.prefixes.milli.includes(s)) return 1e-3; if (this.prefixes.micro.includes(s)) return 1e-6; if (this.prefixes.nano.includes(s)) return 1e-9; if (this.prefixes.pico.includes(s)) return 1e-12; return 1; }, valueRegex: null, } function initUtils() { var allPrefixes = units.prefixes.giga .concat(units.prefixes.mega) .concat(units.prefixes.kilo) .concat(units.prefixes.milli) .concat(units.prefixes.micro) .concat(units.prefixes.nano) .concat(units.prefixes.pico); var allUnits = units.unitsShort.concat(units.unitsLong); units.valueRegex = new RegExp("^([0-9\.]+)" + "\\s*(" + allPrefixes.join("|") + ")?" + "(" + allUnits.join("|") + ")?" + "(\\b.*)?$", ""); units.valueAltRegex = new RegExp("^([0-9]*)" + "(" + units.unitsShort.join("|") + ")?" + "([GgMmKkUuNnPp])?" + "([0-9]*)" + "(\\b.*)?$", ""); for (var bom_type of ["both", "F", "B"]) { for (var row of pcbdata.bom[bom_type]) { row.push(parseValue(row[1], row[3][0][0])); } } } function parseValue(val, ref) { var inferUnit = (unit, ref) => { if (unit) { unit = unit.toLowerCase(); if (unit == 'Ω' || unit == "ohm" || unit == "ohms") { unit = 'r'; } unit = unit[0]; } else { ref = /^([a-z]+)\d+$/i.exec(ref); if (ref) { ref = ref[1].toLowerCase(); if (ref == "c") unit = 'f'; else if (ref == "l") unit = 'h'; else if (ref == "r" || ref == "rv") unit = 'r'; else unit = null; } } return unit; }; val = val.replace(/,/g, ""); var match = units.valueRegex.exec(val); var unit; if (match) { val = parseFloat(match[1]); if (match[2]) { val = val * units.getMultiplier(match[2]); } unit = inferUnit(match[3], ref); if (!unit) return null; else return { val: val, unit: unit, extra: match[4], } } match = units.valueAltRegex.exec(val); if (match && (match[1] || match[4])) { val = parseFloat(match[1] + "." + match[4]); if (match[3]) { val = val * units.getMultiplier(match[3]); } unit = inferUnit(match[2], ref); if (!unit) return null; else return { val: val, unit: unit, extra: match[5], } } return null; } function valueCompare(a, b, stra, strb) { if (a === null && b === null) { // Failed to parse both values, compare them as strings. if (stra != strb) return stra > strb ? 1 : -1; else return 0; } else if (a === null) { return 1; } else if (b === null) { return -1; } else { if (a.unit != b.unit) return a.unit > b.unit ? 1 : -1; else if (a.val != b.val) return a.val > b.val ? 1 : -1; else if (a.extra != b.extra) return a.extra > b.extra ? 1 : -1; else return 0; } } function validateSaveImgDimension(element) { var valid = false; var intValue = 0; if (/^[1-9]\d*$/.test(element.value)) { intValue = parseInt(element.value); if (intValue <= 16000) { valid = true; } } if (valid) { element.classList.remove("invalid"); } else { element.classList.add("invalid"); } return intValue; } function saveImage(layer) { var width = validateSaveImgDimension(document.getElementById("render-save-width")); var height = validateSaveImgDimension(document.getElementById("render-save-height")); var bgcolor = null; if (!document.getElementById("render-save-transparent").checked) { var style = getComputedStyle(topmostdiv); bgcolor = style.getPropertyValue("background-color"); } if (!width || !height) return; // Prepare image var canvas = document.createElement("canvas"); var layerdict = { transform: { x: 0, y: 0, s: 1, panx: 0, pany: 0, zoom: 1, }, bg: canvas, fab: canvas, silk: canvas, highlight: canvas, layer: layer, } // Do the rendering recalcLayerScale(layerdict, width, height); prepareLayer(layerdict); clearCanvas(canvas, bgcolor); drawBackground(layerdict, false); drawHighlightsOnLayer(layerdict, false); // Save image var imgdata = canvas.toDataURL("image/png"); var filename = pcbdata.metadata.title; if (pcbdata.metadata.revision) { filename += `.${pcbdata.metadata.revision}`; } filename += `.${layer}.png`; saveFile(filename, dataURLtoBlob(imgdata)); } function saveSettings() { var data = { type: "InteractiveHtmlBom settings", version: 1, pcbmetadata: pcbdata.metadata, settings: settings, } var blob = new Blob([JSON.stringify(data, null, 4)], {type: "application/json"}); saveFile(`${pcbdata.metadata.title}.settings.json`, blob); } function loadSettings() { var input = document.createElement("input"); input.type = "file"; input.accept = ".settings.json"; input.onchange = function(e) { var file = e.target.files[0]; var reader = new FileReader(); reader.onload = readerEvent => { var content = readerEvent.target.result; var newSettings; try { newSettings = JSON.parse(content); } catch(e) { alert("Selected file is not InteractiveHtmlBom settings file."); return; } if (newSettings.type != "InteractiveHtmlBom settings") { alert("Selected file is not InteractiveHtmlBom settings file."); return; } var metadataMatches = newSettings.hasOwnProperty("pcbmetadata"); if (metadataMatches) { for (var k in pcbdata.metadata) { if (!newSettings.pcbmetadata.hasOwnProperty(k) || newSettings.pcbmetadata[k] != pcbdata.metadata[k]) { metadataMatches = false; } } } if (!metadataMatches) { var currentMetadata = JSON.stringify(pcbdata.metadata, null, 4); var fileMetadata = JSON.stringify(newSettings.pcbmetadata, null, 4); if (!confirm( `Settins file metadata does not match current metadata.\n\n` + `Page metadata:\n${currentMetadata}\n\n` + `Settings file metadata:\n${fileMetadata}\n\n` + `Press OK if you would like to import settings anyway.`)) { return; } } overwriteSettings(newSettings.settings); } reader.readAsText(file, 'UTF-8'); } input.click(); } function overwriteSettings(newSettings) { initDone = false; Object.assign(settings, newSettings); writeStorage("bomlayout", settings.bomlayout); writeStorage("bommode", settings.bommode); writeStorage("canvaslayout", settings.canvaslayout); writeStorage("bomCheckboxes", settings.checkboxes.join(",")); document.getElementById("bomCheckboxes").value = settings.checkboxes.join(","); for (var checkbox of settings.checkboxes) { writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]); } padsVisible(settings.renderPads); document.getElementById("padsCheckbox").checked = settings.renderPads; fabricationVisible(settings.renderFabrication); document.getElementById("fabricationCheckbox").checked = settings.renderFabrication; silkscreenVisible(settings.renderSilkscreen); document.getElementById("silkscreenCheckbox").checked = settings.renderSilkscreen; referencesVisible(settings.renderReferences); document.getElementById("referencesCheckbox").checked = settings.renderReferences; valuesVisible(settings.renderValues); document.getElementById("valuesCheckbox").checked = settings.renderValues; tracksVisible(settings.renderTracks); document.getElementById("tracksCheckbox").checked = settings.renderTracks; zonesVisible(settings.renderZones); document.getElementById("zonesCheckbox").checked = settings.renderZones; dnpOutline(settings.renderDnpOutline); document.getElementById("dnpOutlineCheckbox").checked = settings.renderDnpOutline; setRedrawOnDrag(settings.redrawOnDrag); document.getElementById("dragCheckbox").checked = settings.redrawOnDrag; setDarkMode(settings.darkMode); document.getElementById("darkmodeCheckbox").checked = settings.darkMode; setHighlightPin1(settings.highlightpin1); document.getElementById("highlightpin1Checkbox").checked = settings.highlightpin1; writeStorage("boardRotation", settings.boardRotation); document.getElementById("boardRotation").value = settings.boardRotation / 5; document.getElementById("rotationDegree").textContent = settings.boardRotation; initDone = true; prepCheckboxes(); changeBomLayout(settings.bomlayout); } function saveFile(filename, blob) { var link = document.createElement("a"); var objurl = URL.createObjectURL(blob); link.download = filename; link.href = objurl; link.click(); } function dataURLtoBlob(dataurl) { var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1], bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n); while(n--){ u8arr[n] = bstr.charCodeAt(n); } return new Blob([u8arr], {type:mime}); } var settings = { canvaslayout: "default", bomlayout: "default", bommode: "grouped", checkboxes: [], checkboxStoredRefs: {}, darkMode: false, highlightpin1: false, redrawOnDrag: true, boardRotation: 0, renderPads: true, renderReferences: true, renderValues: true, renderSilkscreen: true, renderFabrication: true, renderDnpOutline: false, renderTracks: true, renderZones: true, } function initDefaults() { settings.bomlayout = readStorage("bomlayout"); if (settings.bomlayout === null) { settings.bomlayout = config.bom_view; } if (!['bom-only', 'left-right', 'top-bottom'].includes(settings.bomlayout)) { settings.bomlayout = config.bom_view; } settings.bommode = readStorage("bommode"); if (settings.bommode === null) { settings.bommode = "grouped"; } if (!["grouped", "ungrouped", "netlist"].includes(settings.bommode)) { settings.bommode = "grouped"; } settings.canvaslayout = readStorage("canvaslayout"); if (settings.canvaslayout === null) { settings.canvaslayout = config.layer_view; } var bomCheckboxes = readStorage("bomCheckboxes"); if (bomCheckboxes === null) { bomCheckboxes = config.checkboxes; } settings.checkboxes = bomCheckboxes.split(",").filter((e) => e); document.getElementById("bomCheckboxes").value = bomCheckboxes; function initBooleanSetting(storageString, def, elementId, func) { var b = readStorage(storageString); if (b === null) { b = def; } else { b = (b == "true"); } document.getElementById(elementId).checked = b; func(b); } initBooleanSetting("padsVisible", config.show_pads, "padsCheckbox", padsVisible); initBooleanSetting("fabricationVisible", config.show_fabrication, "fabricationCheckbox", fabricationVisible); initBooleanSetting("silkscreenVisible", config.show_silkscreen, "silkscreenCheckbox", silkscreenVisible); initBooleanSetting("referencesVisible", true, "referencesCheckbox", referencesVisible); initBooleanSetting("valuesVisible", true, "valuesCheckbox", valuesVisible); if ("tracks" in pcbdata) { initBooleanSetting("tracksVisible", true, "tracksCheckbox", tracksVisible); initBooleanSetting("zonesVisible", true, "zonesCheckbox", zonesVisible); } else { document.getElementById("tracksAndZonesCheckboxes").style.display = "none"; tracksVisible(false); zonesVisible(false); } initBooleanSetting("dnpOutline", false, "dnpOutlineCheckbox", dnpOutline); initBooleanSetting("redrawOnDrag", config.redraw_on_drag, "dragCheckbox", setRedrawOnDrag); initBooleanSetting("darkmode", config.dark_mode, "darkmodeCheckbox", setDarkMode); initBooleanSetting("highlightpin1", config.highlight_pin1, "highlightpin1Checkbox", setHighlightPin1); 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; } /////////////////////////////////////////////// /////////////////////////////////////////////// /* 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 ]; // Adding half a line height here is technically a bug // but pcbnew currently does the same, text is slightly shifted. point[0] -= (point[1] + text.height * 0.5) * tilt; return point; } function drawtext(ctx, text, color, flip) { 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 (text.svgpath) { ctx.stroke(new Path2D(text.svgpath)); ctx.restore(); return; } ctx.translate(...text.pos); 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) / 2; var txt = text.text.split("\n"); // KiCad ignores last empty line. if (txt[txt.length - 1] == '') txt.pop(); ctx.rotate(deg2rad(angle)); for (var i in txt) { var offsety = (-(txt.length - 1) + i * 2) * interline + text.height / 2; var lineWidth = 0; for (var c of txt[i]) { if (c == '\t') { var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width; lineWidth += fourSpaces - lineWidth % fourSpaces; } else { lineWidth += pcbdata.font_data[c].w * text.width; } } var offsetx = 0; switch (text.horiz_justify) { case -1: // Justify left, do nothing break; case 0: // Justify center offsetx -= lineWidth / 2; break; case 1: // Justify right offsetx -= lineWidth; break; } for (var c of txt[i]) { if (c == '\t') { var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width; offsetx += fourSpaces - offsetx % fourSpaces; continue; } for (var line of pcbdata.font_data[c].l) { ctx.beginPath(); ctx.moveTo(...calcFontPoint(line[0], text, offsetx, offsety, tilt)); for (var i = 1; i < line.length; i++) { ctx.lineTo(...calcFontPoint(line[i], text, offsetx, offsety, tilt)); } ctx.stroke(); } offsetx += pcbdata.font_data[c].w * text.width; } } ctx.restore(); } function drawedge(ctx, scalefactor, edge, color) { ctx.strokeStyle = color; ctx.lineWidth = Math.max(1 / scalefactor, edge.width); ctx.lineCap = "round"; if (edge.svgpath) { ctx.stroke(new Path2D(edge.svgpath)); } else { ctx.beginPath(); if (edge.type == "segment") { ctx.moveTo(...edge.start); ctx.lineTo(...edge.end); } 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); } 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 (shape.svgpath) { 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, shape, color) { ctx.save(); ctx.fillStyle = color; if (!shape.svgpath) { ctx.translate(...shape.pos); ctx.rotate(deg2rad(-shape.angle)); } ctx.fill(getPolygonsPath(shape)); ctx.restore(); } function drawDrawing(ctx, layer, scalefactor, drawing, color) { if (["segment", "arc", "circle", "curve"].includes(drawing.type)) { drawedge(ctx, scalefactor, drawing, color); } else if (drawing.type == "polygon") { drawPolygonShape(ctx, drawing, color); } else { drawtext(ctx, drawing, color, layer == "B"); } } 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, hole) { 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); } if (pad.type == "th" && hole) { if (pad.offset) { ctx.translate(-pad.offset[0], -pad.offset[1]); } ctx.fillStyle = "#CCCCCC"; if (pad.drillshape == "oblong") { ctx.fill(getOblongPath(pad.drillsize)); } else { ctx.fill(getCirclePath(pad.drillsize[0] / 2)); } } ctx.restore(); } function drawModule(ctx, layer, scalefactor, module, padcolor, outlinecolor, highlight, outline) { if (highlight) { // draw bounding box if (module.layer == layer) { ctx.save(); ctx.globalAlpha = 0.2; ctx.translate(...module.bbox.pos); ctx.rotate(deg2rad(-module.bbox.angle)); ctx.translate(...module.bbox.relpos); ctx.fillStyle = padcolor; ctx.fillRect(0, 0, ...module.bbox.size); ctx.globalAlpha = 1; ctx.strokeStyle = padcolor; ctx.strokeRect(0, 0, ...module.bbox.size); ctx.restore(); } } // draw drawings for (var drawing of module.drawings) { if (drawing.layer == layer) { drawDrawing(ctx, layer, scalefactor, drawing.drawing, padcolor); } } // draw pads if (settings.renderPads) { for (var pad of module.pads) { if (pad.layers.includes(layer)) { drawPad(ctx, pad, padcolor, outline, true); if (pad.pin1 && settings.highlightpin1) { drawPad(ctx, pad, outlinecolor, true, false); } } } } } function drawEdgeCuts(canvas, scalefactor) { var ctx = canvas.getContext("2d"); var edgecolor = getComputedStyle(topmostdiv).getPropertyValue('--pcb-edge-color'); for (var edge of pcbdata.edges) { drawedge(ctx, scalefactor, edge, edgecolor); } } function drawModules(canvas, layer, scalefactor, highlight) { var ctx = canvas.getContext("2d"); ctx.lineWidth = 3 / scalefactor; var style = getComputedStyle(topmostdiv); var padcolor = style.getPropertyValue('--pad-color'); var outlinecolor = style.getPropertyValue('--pin1-outline-color'); if (highlight) { padcolor = style.getPropertyValue('--pad-color-highlight'); outlinecolor = style.getPropertyValue('--pin1-outline-color-highlight'); } for (var i = 0; i < pcbdata.modules.length; i++) { var mod = pcbdata.modules[i]; var outline = settings.renderDnpOutline && pcbdata.bom.skipped.includes(i); if (!highlight || highlightedModules.includes(i)) { drawModule(ctx, layer, scalefactor, mod, padcolor, outlinecolor, highlight, outline); } } } function drawBgLayer(layername, canvas, layer, scalefactor, edgeColor, polygonColor, textColor) { var ctx = canvas.getContext("2d"); for (var d of pcbdata[layername][layer]) { if (["segment", "arc", "circle", "curve"].includes(d.type)) { drawedge(ctx, scalefactor, d, edgeColor); } else if (d.type == "polygon") { drawPolygonShape(ctx, d, polygonColor); } else { drawtext(ctx, d, textColor, layer == "B"); } } } function drawTracks(canvas, layer, color, highlight) { ctx = canvas.getContext("2d"); ctx.strokeStyle = color; ctx.lineCap = "round"; for(var track of pcbdata.tracks[layer]) { if (highlight && highlightedNet != track.net) continue; ctx.lineWidth = track.width; ctx.beginPath(); ctx.moveTo(...track.start); ctx.lineTo(...track.end); ctx.stroke(); } } function drawZones(canvas, layer, color, highlight) { ctx = canvas.getContext("2d"); ctx.strokeStyle = color; ctx.fillStyle = color; ctx.lineJoin = "round"; for(var zone of pcbdata.zones[layer]) { if (!zone.path2d) { zone.path2d = getPolygonsPath(zone); } if (highlight && highlightedNet != zone.net) continue; ctx.lineWidth = zone.width ? zone.width : 0; ctx.fill(zone.path2d); 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 { ctx.clearRect(0, 0, canvas.width, canvas.height); } ctx.restore(); } function drawNets(canvas, layer, highlight) { var style = getComputedStyle(topmostdiv); if (settings.renderTracks) { var trackColor = style.getPropertyValue(highlight ? '--track-color-highlight' : '--track-color'); drawTracks(canvas, layer, trackColor, highlight); } if (settings.renderZones) { var zoneColor = style.getPropertyValue(highlight ? '--zone-color-highlight' : '--zone-color'); drawZones(canvas, layer, zoneColor, highlight); } if (highlight && settings.renderPads) { var padColor = style.getPropertyValue('--pad-color-highlight'); var ctx = canvas.getContext("2d"); for (var mod of pcbdata.modules) { // draw pads for (var pad of mod.pads) { if (highlightedNet != pad.net) continue; if (pad.layers.includes(layer)) { drawPad(ctx, pad, padColor, false, true); } } } } } function drawHighlightsOnLayer(canvasdict, clear = true) { if (clear) { clearCanvas(canvasdict.highlight); } if (highlightedModules.length > 0) { drawModules(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); drawModules(canvasdict.bg, canvasdict.layer, canvasdict.transform.s * canvasdict.transform.zoom, false); drawEdgeCuts(canvasdict.bg, canvasdict.transform.s); var style = getComputedStyle(topmostdiv); var edgeColor = style.getPropertyValue('--silkscreen-edge-color'); var polygonColor = style.getPropertyValue('--silkscreen-polygon-color'); var textColor = style.getPropertyValue('--silkscreen-text-color'); if (settings.renderSilkscreen) { drawBgLayer( "silkscreen", canvasdict.silk, canvasdict.layer, canvasdict.transform.s * canvasdict.transform.zoom, edgeColor, polygonColor, textColor); } edgeColor = style.getPropertyValue('--fabrication-edge-color'); polygonColor = style.getPropertyValue('--fabrication-polygon-color'); textColor = style.getPropertyValue('--fabrication-text-color'); if (settings.renderFabrication) { drawBgLayer( "fabrication", canvasdict.fab, canvasdict.layer, canvasdict.transform.s * canvasdict.transform.zoom, edgeColor, polygonColor, textColor); } } function prepareCanvas(canvas, flip, transform) { var ctx = canvas.getContext("2d"); ctx.setTransform(1, 0, 0, 1, 0, 0); var fontsize = 1.55; ctx.scale(transform.zoom, transform.zoom); ctx.translate(transform.panx, transform.pany); if (flip) { ctx.scale(-1, 1); } ctx.translate(transform.x, transform.y); ctx.rotate(deg2rad(settings.boardRotation)); ctx.scale(transform.s, transform.s); } function prepareLayer(canvasdict) { var flip = (canvasdict.layer == "B"); for (var c of ["bg", "fab", "silk", "highlight"]) { prepareCanvas(canvasdict[c], flip, canvasdict.transform); } } function rotateVector(v, angle) { angle = deg2rad(angle); return [ v[0] * Math.cos(angle) - v[1] * Math.sin(angle), v[0] * Math.sin(angle) + v[1] * Math.cos(angle) ]; } function applyRotation(bbox) { var corners = [ [bbox.minx, bbox.miny], [bbox.minx, bbox.maxy], [bbox.maxx, bbox.miny], [bbox.maxx, bbox.maxy], ]; corners = corners.map((v) => rotateVector(v, settings.boardRotation)); return { minx: corners.reduce((a, v) => Math.min(a, v[0]), Infinity), miny: corners.reduce((a, v) => Math.min(a, v[1]), Infinity), maxx: corners.reduce((a, v) => Math.max(a, v[0]), -Infinity), maxy: corners.reduce((a, v) => Math.max(a, v[1]), -Infinity), } } function recalcLayerScale(layerdict, width, height) { var bbox = applyRotation(pcbdata.edges_bbox); var scalefactor = 0.98 * Math.min( width / (bbox.maxx - bbox.minx), height / (bbox.maxy - bbox.miny) ); if (scalefactor < 0.1) { scalefactor = 1; } layerdict.transform.s = scalefactor; var flip = (layerdict.layer == "B"); if (flip) { layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor + width) * 0.5; } else { layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor - width) * 0.5; } layerdict.transform.y = -((bbox.maxy + bbox.miny) * scalefactor - height) * 0.5; for (var c of ["bg", "fab", "silk", "highlight"]) { canvas = layerdict[c]; canvas.width = width; canvas.height = height; canvas.style.width = (width / devicePixelRatio) + "px"; canvas.style.height = (height / devicePixelRatio) + "px"; } } function redrawCanvas(layerdict) { prepareLayer(layerdict); drawBackground(layerdict); drawHighlightsOnLayer(layerdict); } function resizeCanvas(layerdict) { var canvasdivid = { "F": "frontcanvas", "B": "backcanvas" } [layerdict.layer]; var width = document.getElementById(canvasdivid).clientWidth * devicePixelRatio; var height = document.getElementById(canvasdivid).clientHeight * devicePixelRatio; recalcLayerScale(layerdict, width, height); redrawCanvas(layerdict); } function resizeAll() { resizeCanvas(allcanvas.front); resizeCanvas(allcanvas.back); } function pointWithinDistanceToSegment(x, y, x1, y1, x2, y2, d) { var A = x - x1; var B = y - y1; var C = x2 - x1; var D = y2 - y1; var dot = A * C + B * D; var len_sq = C * C + D * D; var dx, dy; if (len_sq == 0) { // start and end of the segment coincide dx = x - x1; dy = y - y1; } else { var param = dot / len_sq; var xx, yy; if (param < 0) { xx = x1; yy = y1; } else if (param > 1) { xx = x2; yy = y2; } else { xx = x1 + param * C; yy = y1 + param * D; } dx = x - xx; dy = y - yy; } return dx * dx + dy * dy <= d * d; } function 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 (pointWithinDistanceToSegment(x, y, ...track.start, ...track.end, track.width / 2)) { return track.net; } } } // Check pads if (settings.renderPads) { for (var mod of pcbdata.modules) { for(var pad of mod.pads) { if (pad.layers.includes(layer) && pointWithinPad(x, y, pad)) { return pad.net; } } } } return null; } function pointWithinModuleBbox(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.modules.length; i++) { var module = pcbdata.modules[i]; if (module.layer == layer) { if (pointWithinModuleBbox(x, y, module.bbox)) { result.push(i); } } } return result; } function handlePointerDown(e, layerdict) { if (e.button != 0) { return; } e.preventDefault(); e.stopPropagation(); if (!e.hasOwnProperty("offsetX")) { // The polyfill doesn't set this properly e.offsetX = e.pageX - e.currentTarget.offsetLeft; e.offsetY = e.pageY - e.currentTarget.offsetTop; } layerdict.pointerStates[e.pointerId] = { distanceTravelled: 0, lastX: e.offsetX, lastY: e.offsetY, downTime: Date.now(), }; } function handleMouseClick(e, layerdict) { if (!e.hasOwnProperty("offsetX")) { // The polyfill doesn't set this properly e.offsetX = e.pageX - e.currentTarget.offsetLeft; e.offsetY = e.pageY - e.currentTarget.offsetTop; } var x = e.offsetX; var y = e.offsetY; var t = layerdict.transform; if (layerdict.layer == "B") { x = (devicePixelRatio * x / t.zoom - t.panx + t.x) / -t.s; } else { x = (devicePixelRatio * x / t.zoom - t.panx - t.x) / t.s; } y = (devicePixelRatio * y / t.zoom - t.y - t.pany) / t.s; var v = rotateVector([x, y], -settings.boardRotation); if ("nets" in pcbdata) { var net = netHitScan(layerdict.layer, ...v); if (net !== highlightedNet) { netClicked(net); } } if (highlightedNet === null) { var modules = bboxHitScan(layerdict.layer, ...v); if (modules.length > 0) { modulesClicked(modules); } } } function handlePointerLeave(e, layerdict) { e.preventDefault(); e.stopPropagation(); if (!settings.redrawOnDrag) { redrawCanvas(layerdict); } delete layerdict.pointerStates[e.pointerId]; } function resetTransform(layerdict) { layerdict.transform.panx = 0; layerdict.transform.pany = 0; layerdict.transform.zoom = 1; redrawCanvas(layerdict); } function handlePointerUp(e, layerdict) { if (!e.hasOwnProperty("offsetX")) { // The polyfill doesn't set this properly e.offsetX = e.pageX - e.currentTarget.offsetLeft; e.offsetY = e.pageY - e.currentTarget.offsetTop; } e.preventDefault(); e.stopPropagation(); if (e.button == 2) { // Reset pan and zoom on right click. resetTransform(layerdict); layerdict.anotherPointerTapped = false; return; } // We haven't necessarily had a pointermove event since the interaction started, so make sure we update this now var ptr = layerdict.pointerStates[e.pointerId]; ptr.distanceTravelled += Math.abs(e.offsetX - ptr.lastX) + Math.abs(e.offsetY - ptr.lastY); if (e.button == 0 && ptr.distanceTravelled < 10 && Date.now() - ptr.downTime <= 500) { if (Object.keys(layerdict.pointerStates).length == 1) { if (layerdict.anotherPointerTapped) { // This is the second pointer coming off of a two-finger tap resetTransform(layerdict); } else { // This is just a regular tap handleMouseClick(e, layerdict); } layerdict.anotherPointerTapped = false; } else { // This is the first finger coming off of what could become a two-finger tap layerdict.anotherPointerTapped = true; } } else { if (!settings.redrawOnDrag) { redrawCanvas(layerdict); } layerdict.anotherPointerTapped = false; } delete layerdict.pointerStates[e.pointerId]; } function handlePointerMove(e, layerdict) { if (!layerdict.pointerStates.hasOwnProperty(e.pointerId)) { return; } e.preventDefault(); e.stopPropagation(); if (!e.hasOwnProperty("offsetX")) { // The polyfill doesn't set this properly e.offsetX = e.pageX - e.currentTarget.offsetLeft; e.offsetY = e.pageY - e.currentTarget.offsetTop; } var thisPtr = layerdict.pointerStates[e.pointerId]; var dx = e.offsetX - thisPtr.lastX; var dy = e.offsetY - thisPtr.lastY; // If this number is low on pointer up, we count the action as a click thisPtr.distanceTravelled += Math.abs(dx) + Math.abs(dy); if (Object.keys(layerdict.pointerStates).length == 1) { // This is a simple drag layerdict.transform.panx += devicePixelRatio * dx / layerdict.transform.zoom; layerdict.transform.pany += devicePixelRatio * dy / layerdict.transform.zoom; } else if (Object.keys(layerdict.pointerStates).length == 2) { var otherPtr = Object.values(layerdict.pointerStates).filter((ptr) => ptr != thisPtr)[0]; var oldDist = Math.sqrt(Math.pow(thisPtr.lastX - otherPtr.lastX, 2) + Math.pow(thisPtr.lastY - otherPtr.lastY, 2)); var newDist = Math.sqrt(Math.pow(e.offsetX - otherPtr.lastX, 2) + Math.pow(e.offsetY - otherPtr.lastY, 2)); var scaleFactor = newDist/oldDist; if (scaleFactor != NaN) { layerdict.transform.zoom *= scaleFactor; var zoomd = (1 - scaleFactor) / layerdict.transform.zoom; layerdict.transform.panx += devicePixelRatio * otherPtr.lastX * zoomd; layerdict.transform.pany += devicePixelRatio * otherPtr.lastY * zoomd; } } thisPtr.lastX = e.offsetX; thisPtr.lastY = e.offsetY; if (settings.redrawOnDrag) { redrawCanvas(layerdict); } } function handleMouseWheel(e, layerdict) { e.preventDefault(); e.stopPropagation(); var t = layerdict.transform; var wheeldelta = e.deltaY; if (e.deltaMode == 1) { // FF only, scroll by lines wheeldelta *= 30; } else if (e.deltaMode == 2) { wheeldelta *= 300; } var m = Math.pow(1.1, -wheeldelta / 40); // Limit amount of zoom per tick. if (m > 2) { m = 2; } else if (m < 0.5) { m = 0.5; } t.zoom *= m; var zoomd = (1 - m) / t.zoom; t.panx += devicePixelRatio * e.offsetX * zoomd; t.pany += devicePixelRatio * e.offsetY * zoomd; redrawCanvas(layerdict); } function addMouseHandlers(div, layerdict) { div.addEventListener("pointerdown", function(e) { handlePointerDown(e, layerdict); }); div.addEventListener("pointermove", function(e) { handlePointerMove(e, layerdict); }); div.addEventListener("pointerup", function(e) { handlePointerUp(e, layerdict); }); var pointerleave = function(e) { handlePointerLeave(e, layerdict); } div.addEventListener("pointercancel", pointerleave); div.addEventListener("pointerleave", pointerleave); div.addEventListener("pointerout", pointerleave); div.onwheel = function(e) { handleMouseWheel(e, layerdict); } for (var element of [div, layerdict.bg, layerdict.fab, layerdict.silk, layerdict.highlight]) { element.addEventListener("contextmenu", function(e) { e.preventDefault(); }, false); } } function setRedrawOnDrag(value) { settings.redrawOnDrag = value; writeStorage("redrawOnDrag", value); } function setBoardRotation(value) { settings.boardRotation = value * 5; writeStorage("boardRotation", settings.boardRotation); document.getElementById("rotationDegree").textContent = settings.boardRotation; resizeAll(); } function initRender() { allcanvas = { front: { transform: { x: 0, y: 0, s: 1, panx: 0, pany: 0, zoom: 1, }, pointerStates: {}, anotherPointerTapped: false, bg: document.getElementById("F_bg"), fab: document.getElementById("F_fab"), silk: document.getElementById("F_slk"), highlight: document.getElementById("F_hl"), layer: "F", }, back: { transform: { x: 0, y: 0, s: 1, panx: 0, pany: 0, zoom: 1, }, pointerStates: {}, anotherPointerTapped: false, bg: document.getElementById("B_bg"), fab: document.getElementById("B_fab"), silk: document.getElementById("B_slk"), highlight: document.getElementById("B_hl"), layer: "B", } }; addMouseHandlers(document.getElementById("frontcanvas"), allcanvas.front); addMouseHandlers(document.getElementById("backcanvas"), allcanvas.back); } /////////////////////////////////////////////// /////////////////////////////////////////////// /* 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 moduleIndexToHandler = {}; var netsToHandler = {}; var highlightedModules = []; var highlightedNet = null; var lastClicked; function dbg(html) { dbgdiv.innerHTML = html; } function redrawIfInitDone() { if (initDone) { redrawCanvas(allcanvas.front); redrawCanvas(allcanvas.back); } } function padsVisible(value) { writeStorage("padsVisible", value); settings.renderPads = value; redrawIfInitDone(); } function referencesVisible(value) { writeStorage("referencesVisible", value); settings.renderReferences = value; redrawIfInitDone(); } function valuesVisible(value) { writeStorage("valuesVisible", value); settings.renderValues = value; redrawIfInitDone(); } function tracksVisible(value) { writeStorage("tracksVisible", value); settings.renderTracks = value; redrawIfInitDone(); } function zonesVisible(value) { writeStorage("zonesVisible", value); settings.renderZones = value; redrawIfInitDone(); } function dnpOutline(value) { writeStorage("dnpOutline", value); settings.renderDnpOutline = value; redrawIfInitDone(); } function setDarkMode(value) { if (value) { topmostdiv.classList.add("dark"); } else { topmostdiv.classList.remove("dark"); } writeStorage("darkmode", value); settings.darkMode = value; redrawIfInitDone(); } function fabricationVisible(value) { writeStorage("fabricationVisible", value); settings.renderFabrication = value; redrawIfInitDone(); } function silkscreenVisible(value) { writeStorage("silkscreenVisible", value); settings.renderSilkscreen = value; redrawIfInitDone(); } function setHighlightPin1(value) { writeStorage("highlightpin1", value); settings.highlightpin1 = value; redrawIfInitDone(); } function getStoredCheckboxRefs(checkbox) { function convert(ref) { var intref = parseInt(ref); if (isNaN(intref)) { for (var i = 0; i < pcbdata.modules.length; i++) { if (pcbdata.modules[i].ref == ref) { return i; } } return -1; } else { return intref; } } if (!(checkbox in settings.checkboxStoredRefs)) { var val = readStorage("checkbox_" + checkbox); settings.checkboxStoredRefs[checkbox] = val ? val : ""; } if (!settings.checkboxStoredRefs[checkbox]) { return new Set(); } else { return new Set(settings.checkboxStoredRefs[checkbox].split(",").map(r => convert(r)).filter(a => a >= 0)); } } function getCheckboxState(checkbox, references) { var storedRefsSet = getStoredCheckboxRefs(checkbox); var currentRefsSet = new Set(references.map(r => r[1])); // Get difference of current - stored var difference = new Set(currentRefsSet); for (ref of storedRefsSet) { difference.delete(ref); } if (difference.size == 0) { // All the current refs are stored return "checked"; } else if (difference.size == currentRefsSet.size) { // None of the current refs are stored return "unchecked"; } else { // Some of the refs are stored return "indeterminate"; } } function setBomCheckboxState(checkbox, element, references) { var state = getCheckboxState(checkbox, references); element.checked = (state == "checked"); element.indeterminate = (state == "indeterminate"); } function createCheckboxChangeHandler(checkbox, references) { return function() { refsSet = getStoredCheckboxRefs(checkbox); if (this.checked) { // checkbox ticked for (var ref of references) { refsSet.add(ref[1]); } } else { // checkbox unticked for (var ref of references) { refsSet.delete(ref[1]); } } settings.checkboxStoredRefs[checkbox] = [...refsSet].join(","); writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]); updateCheckboxStats(checkbox); } } function clearHighlightedModules() { if (currentHighlightedRowId) { document.getElementById(currentHighlightedRowId).classList.remove("highlighted"); currentHighlightedRowId = null; highlightedModules = []; 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; highlightedModules = refs ? refs.map(r => r[1]) : []; highlightedNet = net; drawHighlights(); } } function entryMatches(entry) { if (settings.bommode == "netlist") { // entry is just a net name return entry.toLowerCase().indexOf(filter) >= 0; } // check refs for (var ref of entry[3]) { if (ref[0].toLowerCase().indexOf(filter) >= 0) { return true; } } // check extra fields for (var i in config.extra_fields) { if (entry[4][i].toLowerCase().indexOf(filter) >= 0) { return true; } } // check value if (entry[1].toLowerCase().indexOf(filter) >= 0) { return true; } // check footprint if (entry[2].toLowerCase().indexOf(filter) >= 0) { return true; } return false; } function findRefInEntry(entry) { return entry[3].filter(r => r[0].toLowerCase() == reflookup); } function highlightFilter(s) { if (!filter) { return s; } var parts = s.toLowerCase().split(filter); if (parts.length == 1) { return s; } var r = ""; var pos = 0; for (var i in parts) { if (i > 0) { r += '<mark class="highlight">' + s.substring(pos, pos + filter.length) + '</mark>'; pos += filter.length; } r += s.substring(pos, pos + parts[i].length); pos += parts[i].length; } return r; } function checkboxSetUnsetAllHandler(checkboxname) { return function() { var checkboxnum = 0; while (checkboxnum < settings.checkboxes.length && settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) { checkboxnum++; } if (checkboxnum >= settings.checkboxes.length) { return; } var allset = true; var checkbox; var row; for (row of bombody.childNodes) { checkbox = row.childNodes[checkboxnum + 1].childNodes[0]; if (!checkbox.checked || checkbox.indeterminate) { allset = false; break; } } for (row of bombody.childNodes) { checkbox = row.childNodes[checkboxnum + 1].childNodes[0]; checkbox.checked = !allset; checkbox.indeterminate = false; checkbox.onchange(); } } } function createColumnHeader(name, cls, comparator) { var th = document.createElement("TH"); th.innerHTML = name; th.classList.add(cls); th.style.cursor = "pointer"; var span = document.createElement("SPAN"); span.classList.add("sortmark"); span.classList.add("none"); th.appendChild(span); th.onclick = function() { if (currentSortColumn && this !== currentSortColumn) { // Currently sorted by another column currentSortColumn.childNodes[1].classList.remove(currentSortOrder); currentSortColumn.childNodes[1].classList.add("none"); currentSortColumn = null; currentSortOrder = null; } if (currentSortColumn && this === 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 = this; currentSortColumn.childNodes[1].classList.remove("none"); currentSortColumn.childNodes[1].classList.add("asc"); currentSortOrder = "asc"; } populateBomBody(); } return th; } function populateBomHeader() { while (bomhead.firstChild) { bomhead.removeChild(bomhead.firstChild); } var tr = document.createElement("TR"); var th = document.createElement("TH"); th.classList.add("numCol"); tr.appendChild(th); var checkboxCompareClosure = function(checkbox) { return (a, b) => { var stateA = getCheckboxState(checkbox, a[3]); var stateB = getCheckboxState(checkbox, b[3]); if (stateA > stateB) return -1; if (stateA < stateB) return 1; return 0; } } if (settings.bommode == "netlist") { th = createColumnHeader("Net name", "bom-netname", (a, b) => { if (a > b) return -1; if (a < b) return 1; return 0; }); tr.appendChild(th); } else { for (var checkbox of settings.checkboxes) { th = createColumnHeader( checkbox, "bom-checkbox", checkboxCompareClosure(checkbox)); th.onclick = fancyDblClickHandler( th, th.onclick.bind(th), checkboxSetUnsetAllHandler(checkbox)); tr.appendChild(th); } tr.appendChild(createColumnHeader("References", "References", (a, b) => { var i = 0; while (i < a[3].length && i < b[3].length) { if (a[3][i] != b[3][i]) return a[3][i] > b[3][i] ? 1 : -1; i++; } return a[3].length - b[3].length; })); // Extra fields if (config.extra_fields.length > 0) { var extraFieldCompareClosure = function(fieldIndex) { return (a, b) => { var fa = a[4][fieldIndex]; var fb = b[4][fieldIndex]; if (fa != fb) return fa > fb ? 1 : -1; else return 0; } } for (var i in config.extra_fields) { tr.appendChild(createColumnHeader( config.extra_fields[i], "extra", extraFieldCompareClosure(i))); } } tr.appendChild(createColumnHeader("Value", "Value", (a, b) => { return valueCompare(a[5], b[5], a[1], b[1]); })); tr.appendChild(createColumnHeader("Footprint", "Footprint", (a, b) => { if (a[2] != b[2]) return a[2] > b[2] ? 1 : -1; else return 0; })); if (settings.bommode == "grouped") { tr.appendChild(createColumnHeader("Quantity", "Quantity", (a, b) => { return a[3].length - b[3].length; })); } } bomhead.appendChild(tr); } function populateBomBody() { while (bom.firstChild) { bom.removeChild(bom.firstChild); } highlightHandlers = []; moduleIndexToHandler = {}; netsToHandler = {}; currentHighlightedRowId = null; var first = true; if (settings.bommode == "netlist") { bomtable = pcbdata.nets.slice(); } else { switch (settings.canvaslayout) { case 'F': bomtable = pcbdata.bom.F.slice(); break; case 'FB': bomtable = pcbdata.bom.both.slice(); break; case 'B': bomtable = pcbdata.bom.B.slice(); break; } if (settings.bommode == "ungrouped") { // expand bom table expandedTable = [] for (var bomentry of bomtable) { for (var ref of bomentry[3]) { expandedTable.push([1, bomentry[1], bomentry[2], [ref], bomentry[4], bomentry[5]]); } } bomtable = expandedTable; } } if (bomSortFunction) { bomtable = bomtable.sort(bomSortFunction); } for (var i in bomtable) { var bomentry = bomtable[i]; if (filter && !entryMatches(bomentry)) { continue; } var references = null; var netname = null; var tr = document.createElement("TR"); var td = document.createElement("TD"); var rownum = +i + 1; tr.id = "bomrow" + rownum; td.textContent = rownum; tr.appendChild(td); if (settings.bommode == "netlist") { netname = bomentry; td = document.createElement("TD"); td.innerHTML = highlightFilter(netname ? netname : "&lt;no net&gt;"); tr.appendChild(td); } else { if (reflookup) { references = findRefInEntry(bomentry); if (references.length == 0) { continue; } } else { references = bomentry[3]; } // Checkboxes for (var checkbox of settings.checkboxes) { if (checkbox) { td = document.createElement("TD"); var input = document.createElement("input"); input.type = "checkbox"; input.onchange = createCheckboxChangeHandler(checkbox, references); setBomCheckboxState(checkbox, input, references); td.appendChild(input); tr.appendChild(td); } } // References td = document.createElement("TD"); td.innerHTML = highlightFilter(references.map(r => r[0]).join(", ")); tr.appendChild(td); // Extra fields for (var i in config.extra_fields) { td = document.createElement("TD"); td.innerHTML = highlightFilter(bomentry[4][i]); tr.appendChild(td); } // Value td = document.createElement("TD"); td.innerHTML = highlightFilter(bomentry[1]); tr.appendChild(td); // Footprint td = document.createElement("TD"); td.innerHTML = highlightFilter(bomentry[2]); tr.appendChild(td); if (settings.bommode == "grouped") { // Quantity td = document.createElement("TD"); td.textContent = bomentry[3].length; tr.appendChild(td); } } bom.appendChild(tr); var handler = createRowHighlightHandler(tr.id, references, netname); tr.onmousemove = handler; highlightHandlers.push({ id: tr.id, handler: handler, }); if (references !== null) { for (var refIndex of references.map(r => r[1])) { moduleIndexToHandler[refIndex] = handler; } } if (netname !== null) { netsToHandler[netname] = handler; } if ((filter || reflookup) && first) { handler(); first = false; } } } 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(); } function modulesClicked(moduleIndexes) { var lastClickedIndex = moduleIndexes.indexOf(lastClicked); for (var i = 1; i <= moduleIndexes.length; i++) { var refIndex = moduleIndexes[(lastClickedIndex + i) % moduleIndexes.length]; if (refIndex in moduleIndexToHandler) { lastClicked = refIndex; moduleIndexToHandler[refIndex](); smoothScrollToRow(currentHighlightedRowId); break; } } } function netClicked(net) { if (net in netsToHandler) { netsToHandler[net](); smoothScrollToRow(currentHighlightedRowId); } else { clearHighlightedModules(); 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"; } var fp_f = 0, fp_b = 0, pads_f = 0, pads_b = 0, pads_th = 0; for (var i = 0; i < pcbdata.modules.length; i++) { if (pcbdata.bom.skipped.includes(i)) continue; var mod = pcbdata.modules[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; } function changeBomLayout(layout) { document.getElementById("bom-btn").classList.remove("depressed"); document.getElementById("lr-btn").classList.remove("depressed"); document.getElementById("tb-btn").classList.remove("depressed"); switch (layout) { case 'bom-only': document.getElementById("bom-btn").classList.add("depressed"); if (bomsplit) { bomsplit.destroy(); bomsplit = null; canvassplit.destroy(); canvassplit = null; } document.getElementById("frontcanvas").style.display = "none"; document.getElementById("backcanvas").style.display = "none"; document.getElementById("bot").style.height = ""; break; case 'top-bottom': document.getElementById("tb-btn").classList.add("depressed"); document.getElementById("frontcanvas").style.display = ""; document.getElementById("backcanvas").style.display = ""; document.getElementById("bot").style.height = "calc(100% - 80px)"; document.getElementById("bomdiv").classList.remove("split-horizontal"); document.getElementById("canvasdiv").classList.remove("split-horizontal"); document.getElementById("frontcanvas").classList.add("split-horizontal"); document.getElementById("backcanvas").classList.add("split-horizontal"); if (bomsplit) { bomsplit.destroy(); bomsplit = null; canvassplit.destroy(); canvassplit = null; } bomsplit = Split(['#bomdiv', '#canvasdiv'], { sizes: [50, 50], onDragEnd: resizeAll, direction: "vertical", gutterSize: 5 }); canvassplit = Split(['#frontcanvas', '#backcanvas'], { sizes: [50, 50], gutterSize: 5, onDragEnd: resizeAll }); break; case 'left-right': document.getElementById("lr-btn").classList.add("depressed"); document.getElementById("frontcanvas").style.display = ""; document.getElementById("backcanvas").style.display = ""; document.getElementById("bot").style.height = "calc(100% - 80px)"; document.getElementById("bomdiv").classList.add("split-horizontal"); document.getElementById("canvasdiv").classList.add("split-horizontal"); document.getElementById("frontcanvas").classList.remove("split-horizontal"); document.getElementById("backcanvas").classList.remove("split-horizontal"); if (bomsplit) { bomsplit.destroy(); bomsplit = null; canvassplit.destroy(); canvassplit = null; } bomsplit = Split(['#bomdiv', '#canvasdiv'], { sizes: [50, 50], onDragEnd: resizeAll, gutterSize: 5 }); canvassplit = Split(['#frontcanvas', '#backcanvas'], { sizes: [50, 50], gutterSize: 5, direction: "vertical", onDragEnd: resizeAll }); } settings.bomlayout = layout; writeStorage("bomlayout", layout); changeCanvasLayout(settings.canvaslayout); } function changeBomMode(mode) { document.getElementById("bom-grouped-btn").classList.remove("depressed"); document.getElementById("bom-ungrouped-btn").classList.remove("depressed"); document.getElementById("bom-netlist-btn").classList.remove("depressed"); switch (mode) { case 'grouped': document.getElementById("bom-grouped-btn").classList.add("depressed"); break; case 'ungrouped': document.getElementById("bom-ungrouped-btn").classList.add("depressed"); break; case 'netlist': document.getElementById("bom-netlist-btn").classList.add("depressed"); } writeStorage("bommode", mode); if (mode != settings.bommode) { settings.bommode = mode; bomSortFunction = null; currentSortColumn = null; currentSortOrder = null; clearHighlightedModules(); } populateBomTable(); } function focusFilterField() { focusInputField(document.getElementById("filter")); } function focusRefLookupField() { focusInputField(document.getElementById("reflookup")); } function toggleBomCheckbox(bomrowid, checkboxnum) { if (!bomrowid || checkboxnum > settings.checkboxes.length) { return; } var bomrow = document.getElementById(bomrowid); var checkbox = bomrow.childNodes[checkboxnum].childNodes[0]; checkbox.checked = !checkbox.checked; checkbox.indeterminate = false; checkbox.onchange(); } function checkBomCheckbox(bomrowid, checkboxname) { var checkboxnum = 0; while (checkboxnum < settings.checkboxes.length && settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) { checkboxnum++; } if (!bomrowid || checkboxnum >= settings.checkboxes.length) { return; } var bomrow = document.getElementById(bomrowid); var checkbox = bomrow.childNodes[checkboxnum + 1].childNodes[0]; checkbox.checked = true; checkbox.indeterminate = false; checkbox.onchange(); } function setBomCheckboxes(value) { writeStorage("bomCheckboxes", value); settings.checkboxes = value.split(",").filter((e) => e); prepCheckboxes(); populateBomTable(); } 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 updateCheckboxStats(checkbox) { var checked = getStoredCheckboxRefs(checkbox).size; var total = pcbdata.modules.length - pcbdata.bom.skipped.length; var percent = checked * 100.0 / total; var td = document.getElementById("checkbox-stats-" + checkbox); td.firstChild.style.width = percent + "%"; td.lastChild.innerHTML = checked + "/" + total + " (" + Math.round(percent) + "%)"; } document.onkeydown = function(e) { switch (e.key) { case "n": if (document.activeElement.type == "text") { return; } if (currentHighlightedRowId !== null) { checkBomCheckbox(currentHighlightedRowId, "placed"); highlightNextRow(); e.preventDefault(); } break; case "ArrowUp": highlightPreviousRow(); e.preventDefault(); break; case "ArrowDown": highlightNextRow(); e.preventDefault(); break; default: break; } if (e.altKey) { switch (e.key) { case "f": focusFilterField(); e.preventDefault(); break; case "r": focusRefLookupField(); e.preventDefault(); break; case "z": changeBomLayout("bom-only"); e.preventDefault(); break; case "x": changeBomLayout("left-right"); e.preventDefault(); break; case "c": changeBomLayout("top-bottom"); e.preventDefault(); break; case "v": changeCanvasLayout("F"); e.preventDefault(); break; case "b": changeCanvasLayout("FB"); e.preventDefault(); break; case "n": changeCanvasLayout("B"); e.preventDefault(); break; default: break; } if (e.key >= '1' && e.key <= '9') { toggleBomCheckbox(currentHighlightedRowId, parseInt(e.key)); } } } function hideNetlistButton() { document.getElementById("bom-ungrouped-btn").classList.remove("middle-button"); document.getElementById("bom-ungrouped-btn").classList.add("right-most-button"); document.getElementById("bom-netlist-btn").style.display = "none"; } window.onload = function(e) { initUtils(); initRender(); initStorage(); initDefaults(); cleanGutters(); populateMetadata(); dbgdiv = document.getElementById("dbg"); bom = document.getElementById("bombody"); bomhead = document.getElementById("bomhead"); filter = ""; reflookup = ""; if (!("nets" in pcbdata)) { hideNetlistButton(); } initDone = true; prepCheckboxes(); // Triggers render changeBomLayout(settings.bomlayout); } window.onresize = resizeAll; window.matchMedia("print").addListener(resizeAll); /////////////////////////////////////////////// </script> </head> <body> <div id="topmostdiv" class="topmostdiv"> <div id="top"> <div style="float: right; height: 100%;"> <div class="hideonprint menu" style="float: right; top: 8px;"> <button class="menubtn"></button> <div class="menu-content"> <label class="menu-label menu-label-top"> <input id="darkmodeCheckbox" type="checkbox" onchange="setDarkMode(this.checked)"> Dark mode </label> <label class="menu-label"> <input id="padsCheckbox" type="checkbox" checked onchange="padsVisible(this.checked)"> Show footprint pads </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"> <input id="dnpOutlineCheckbox" type="checkbox" checked onchange="dnpOutline(this.checked)"> DNP components outlined </label> <label class="menu-label"> <input id="highlightpin1Checkbox" type="checkbox" onchange="setHighlightPin1(this.checked)"> Highlight first pin </label> <label class="menu-label"> <input id="dragCheckbox" type="checkbox" checked onchange="setRedrawOnDrag(this.checked)"> Continuous redraw on drag </label> <label class="menu-label"> <span>Board rotation</span> <span style="float: right"><span id="rotationDegree">0</span>&#176;</span> <input id="boardRotation" type="range" min="-36" max="36" value="0" class="slider" oninput="setBoardRotation(this.value)"> </label> <label class="menu-label"> <div style="margin-left: 5px">Bom checkboxes</div> <input id="bomCheckboxes" class="menu-textbox" type=text oninput="setBomCheckboxes(this.value)"> </label> <label class="menu-label"> <span class="shameless-plug"> <span>Created using</span> <a target="blank" href="https://github.com/openscopeproject/InteractiveHtmlBom">InteractiveHtmlBom</a> </span> </label> </div> </div> <div class="button-container hideonprint" style="float: right; position: relative; top: 8px"> <button id="fl-btn" class="left-most-button" onclick="changeCanvasLayout('F')" title="Front only">F </button> <button id="fb-btn" class="middle-button" onclick="changeCanvasLayout('FB')" title="Front and Back">FB </button> <button id="bl-btn" class="right-most-button" onclick="changeCanvasLayout('B')" title="Back only">B </button> </div> <div class="button-container hideonprint" style="float: right; position: relative; top: 8px"> <button id="bom-btn" class="left-most-button" onclick="changeBomLayout('bom-only')" title="BOM only"></button> <button id="lr-btn" class="middle-button" onclick="changeBomLayout('left-right')" title="BOM left, drawings right"></button> <button id="tb-btn" class="right-most-button" onclick="changeBomLayout('top-bottom')" title="BOM top, drawings bot"></button> </div> <div class="button-container hideonprint" style="float: right; position: relative; top: 8px"> <button id="bom-grouped-btn" class="left-most-button" onclick="changeBomMode('grouped')" title="Grouped BOM"></button> <button id="bom-ungrouped-btn" class="middle-button" onclick="changeBomMode('ungrouped')" title="Ungrouped BOM"></button> <button id="bom-netlist-btn" class="right-most-button" onclick="changeBomMode('netlist')" title="Netlist"></button> </div> <div class="hideonprint menu" style="float: right; top: 8px;"> <button class="statsbtn"></button> <div class="menu-content"> <table class="stats"> <tbody> <tr> <td width="40%">Board stats</td> <td>Front</td> <td>Back</td> <td>Total</td> </tr> <tr> <td>Components</td> <td id="stats-components-front">~</td> <td id="stats-components-back">~</td> <td id="stats-components-total">~</td> </tr> <tr> <td>Groups</td> <td id="stats-groups-front">~</td> <td id="stats-groups-back">~</td> <td id="stats-groups-total">~</td> </tr> <tr> <td>SMD pads</td> <td id="stats-smd-pads-front">~</td> <td id="stats-smd-pads-back">~</td> <td id="stats-smd-pads-total">~</td> </tr> <tr> <td>TH pads</td> <td colspan=3 id="stats-th-pads">~</td> </tr> </tbody> </table> <table class="stats"> <col width="40%"/><col /> <tbody id="checkbox-stats"> <tr> <td colspan=2 style="border-top: 0">Checkboxes</td> </tr> </tbody> </table> </div> </div> <div class="hideonprint menu" style="float: right; top: 8px;"> <button class="iobtn"></button> <div class="menu-content"> <div class="menu-label menu-label-top"> <div style="margin-left: 5px;">Save board image</div> <div class="flexbox"> <input id="render-save-width" class="menu-textbox" type="text" value="1000" placeholder="Width" style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)"> <span>X</span> <input id="render-save-height" class="menu-textbox" type="text" value="1000" placeholder="Height" style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)"> </div> <label> <input id="render-save-transparent" type="checkbox"> Transparent background </label> <div class="flexbox"> <button class="savebtn" onclick="saveImage('F')">Front</button> <button class="savebtn" onclick="saveImage('B')">Back</button> </div> </div> <div class="menu-label"> <span style="margin-left: 5px;">Config and checkbox state</span> <div class="flexbox"> <button class="savebtn" onclick="saveSettings()">Export</button> <button class="savebtn" onclick="loadSettings()">Import</button> </div> </div> </div> </div> </div> <div id="fileinfodiv" style="overflow: auto;"> <table class="fileinfo"> <tbody> <tr> <td id="title" class="title" style="width: 70%"> Title </td> <td id="revision" class="title" style="width: 30%"> Revision </td> </tr> <tr> <td id="company"> Company </td> <td id="filedate"> Date </td> </tr> </tbody> </table> </div> </div> <div id="bot" class="split" style="height: calc(100% - 80px)"> <div id="bomdiv" class="split split-horizontal"> <div style="width: 100%"> <input id="reflookup" class="textbox searchbox reflookup hideonprint" type="text" placeholder="Ref lookup" oninput="updateRefLookup(this.value)"> <input id="filter" class="textbox searchbox filter hideonprint" type="text" placeholder="Filter" oninput="updateFilter(this.value)"> <div class="button-container hideonprint" style="float: left; margin: 0;"> <button id="copy" title="Copy bom table to clipboard" onclick="copyToClipboard()"></button> </div> </div> <div id="dbg"></div> <table class="bom"> <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>
Report a bug