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