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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9lpstQnfUHGXc7oAV38vMcGVCllmMy/hszTnlv/QDl+DCwEBCs0WR8tPgZ8vOgxCtvltumYV8pFIVlGBlS4itAV/cg3lkrN3l6cvkV5KjQVpqVTGSCvRlFcuflmivrl/TCbln9C4VnklHqBMsfxECtiKrDX3lzivYV7wFkV3cvRlKivdZgCNHlscZIVoZBkVk8voV6SstpnrMDk4CDJdMSsMVjd2aVk8tncfjCYV8waQRwWAoV6WSwVlSuCVyxXCV6cvGV+is8V9suUVpcuPwKyujx/Iu2VtCvBGocuMVizMUVgStGVgctQVhysXlxnjMVqfTjlhstgV7EmEoP6mNoEsunUmKtXlyiuuV5q0HG+UGJV7SvBV9XJhVlsApVytM/UmxlcVkVJ/Ewqv8VjCurl9yt9l0qudlp8soV6qvMMOp55Vw8saVwlDKVqCwflpGmtVpKv+Viqs2VqquU1TKt1VgatvllzxNVr8v+lrFRFV8CkJVg0RlV1SsTZyqsfEyauDVkquzVkasgIUsvT9UMAmV/MszV2zRzVsavsVpasREbav2Voav7VkavxVtivqVgqs9MU6v2IAWCrV1IgHVzat3VlaszV56sjVuhivVx66QRucRDV36tuYHqvXV2SstV7KDvV3SvaK06uSMN0w/VpM5/V9KBPV+GtA18qsg1xsvRVpGzQ12qtI16GsVEbyto1qKtUkkUD3V5PDUxVatPpvyuo1icugVtcvHVimtnV8msqoN8vK016vyvX8PcdIats1ymvzVycuLVjGtc1hmszVgWu58U86vV2hDs188irV8Wvc1w6s3V78trjLGs4VoavS1v5jnqMWt4EP6vt8KWsa1lGs81mmt81omvCCCGudVy3lLlljpi15GsCof8szV9DAvV3quj6/qu21mqtK1qWvI13PjwV+2urG/qsseyCOVwIas+13Wuy10Gu3VgOtBV/2tM1v5jKiV6vn8X8MiQf2uOgO2sE12msY1mOvO18SszV1OvMMe/KvV7QSx17hkm13Osy1nOsLgNOs6Vgusl1rOs8cnOs61rlBV1masx8ROvU1oSsO146sN10utZVm+a41z61B19GtE1gSCx1x6v11y2vAVnOtu17GtD1ruta+16tEAyCPkhVasz1wOvT1iOth1+evL13Rh1QaesJ12esOfeetb1xeue1lq1E1m0LG1wmk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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>
|