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