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