ibom.html 376 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961396239633964396539663967396839693970397139723973397439753976397739783979398039813982398339843985398639873988398939903991399239933994399539963997399839994000400140024003400440054006400740084009401040114012401340144015401640174018401940204021402240234024402540264027402840294030403140324033403440354036403740384039404040414042404340444045404640474048404940504051405240534054405540564057405840594060406140624063406440654066406740684069407040714072407340744075407640774078407940804081408240834084408540864087408840894090409140924093409440954096409740984099410041014102410341044105410641074108410941104111411241134114411541164117411841194120412141224123412441254126412741284129413041314132413341344135413641374138413941404141414241434144414541464147414841494150415141524153415441554156415741584159416041614162416341644165416641674168416941704171417241734174417541764177417841794180418141824183418441854186418741884189419041914192419341944195419641974198419942004201420242034204420542064207420842094210421142124213421442154216421742184219422042214222422342244225422642274228422942304231423242334234423542364237423842394240424142424243424442454246424742484249425042514252425342544255425642574258425942604261426242634264426542664267426842694270427142724273427442754276427742784279428042814282428342844285428642874288428942904291429242934294429542964297429842994300430143024303430443054306430743084309431043114312431343144315431643174318431943204321432243234324432543264327432843294330433143324333433443354336433743384339434043414342434343444345434643474348434943504351435243534354435543564357435843594360436143624363436443654366436743684369437043714372437343744375437643774378437943804381438243834384438543864387438843894390439143924393439443954396439743984399440044014402440344044405440644074408440944104411441244134414441544164417441844194420442144224423442444254426442744284429443044314432443344344435443644374438443944404441444244434444444544464447444844494450445144524453445444554456445744584459446044614462446344644465446644674468446944704471447244734474447544764477447844794480448144824483448444854486448744884489449044914492449344944495449644974498449945004501450245034504450545064507450845094510451145124513451445154516451745184519452045214522452345244525452645274528452945304531453245334534453545364537453845394540454145424543454445454546454745484549455045514552455345544555455645574558455945604561456245634564456545664567456845694570457145724573457445754576457745784579458045814582458345844585458645874588458945904591459245934594459545964597459845994600460146024603460446054606460746084609461046114612461346144615461646174618461946204621462246234624462546264627462846294630463146324633463446354636463746384639464046414642464346444645464646474648464946504651465246534654465546564657465846594660466146624663466446654666466746684669
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  6. <title>Interactive BOM for KiCAD</title>
  7. <style type="text/css">
  8. :root {
  9. --pcb-edge-color: black;
  10. --pad-color: #878787;
  11. --pad-hole-color: #CCCCCC;
  12. --pad-color-highlight: #D04040;
  13. --pad-color-highlight-both: #D0D040;
  14. --pad-color-highlight-marked: #44a344;
  15. --pin1-outline-color: #ffb629;
  16. --pin1-outline-color-highlight: #ffb629;
  17. --pin1-outline-color-highlight-both: #fcbb39;
  18. --pin1-outline-color-highlight-marked: #fdbe41;
  19. --silkscreen-edge-color: #aa4;
  20. --silkscreen-polygon-color: #4aa;
  21. --silkscreen-text-color: #4aa;
  22. --fabrication-edge-color: #907651;
  23. --fabrication-polygon-color: #907651;
  24. --fabrication-text-color: #a27c24;
  25. --track-color: #def5f1;
  26. --track-color-highlight: #D04040;
  27. --zone-color: #def5f1;
  28. --zone-color-highlight: #d0404080;
  29. }
  30. html,
  31. body {
  32. margin: 0px;
  33. height: 100%;
  34. font-family: Verdana, sans-serif;
  35. }
  36. .dark.topmostdiv {
  37. --pcb-edge-color: #eee;
  38. --pad-color: #808080;
  39. --pin1-outline-color: #ffa800;
  40. --pin1-outline-color-highlight: #ccff00;
  41. --track-color: #42524f;
  42. --zone-color: #42524f;
  43. background-color: #252c30;
  44. color: #eee;
  45. }
  46. button {
  47. background-color: #eee;
  48. border: 1px solid #888;
  49. color: black;
  50. height: 44px;
  51. width: 44px;
  52. text-align: center;
  53. text-decoration: none;
  54. display: inline-block;
  55. font-size: 14px;
  56. font-weight: bolder;
  57. }
  58. .dark button {
  59. /* This will be inverted */
  60. background-color: #c3b7b5;
  61. }
  62. button.depressed {
  63. background-color: #0a0;
  64. color: white;
  65. }
  66. .dark button.depressed {
  67. /* This will be inverted */
  68. background-color: #b3b;
  69. }
  70. button:focus {
  71. outline: 0;
  72. }
  73. button#tb-btn {
  74. 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");
  75. }
  76. button#lr-btn {
  77. 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");
  78. }
  79. button#bom-btn {
  80. 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");
  81. }
  82. button#bom-grouped-btn {
  83. 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");
  84. }
  85. button#bom-ungrouped-btn {
  86. 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");
  87. }
  88. button#bom-netlist-btn {
  89. 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");
  90. }
  91. button#copy {
  92. 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");
  93. background-position: 6px 6px;
  94. background-repeat: no-repeat;
  95. background-size: 26px 26px;
  96. border-radius: 6px;
  97. height: 40px;
  98. width: 40px;
  99. margin: 10px 5px;
  100. }
  101. button#copy:active {
  102. box-shadow: inset 0px 0px 5px #6c6c6c;
  103. }
  104. textarea.clipboard-temp {
  105. position: fixed;
  106. top: 0;
  107. left: 0;
  108. width: 2em;
  109. height: 2em;
  110. padding: 0;
  111. border: None;
  112. outline: None;
  113. box-shadow: None;
  114. background: transparent;
  115. }
  116. .left-most-button {
  117. border-right: 0;
  118. border-top-left-radius: 6px;
  119. border-bottom-left-radius: 6px;
  120. }
  121. .middle-button {
  122. border-right: 0;
  123. }
  124. .right-most-button {
  125. border-top-right-radius: 6px;
  126. border-bottom-right-radius: 6px;
  127. }
  128. .button-container {
  129. font-size: 0;
  130. margin: 0.4rem 0.4rem 0.4rem 0;
  131. }
  132. .dark .button-container {
  133. filter: invert(1);
  134. }
  135. .button-container button {
  136. background-size: 32px 32px;
  137. background-position: 5px 5px;
  138. background-repeat: no-repeat;
  139. }
  140. @media print {
  141. .hideonprint {
  142. display: none;
  143. }
  144. }
  145. canvas {
  146. cursor: crosshair;
  147. }
  148. canvas:active {
  149. cursor: grabbing;
  150. }
  151. .fileinfo {
  152. width: 100%;
  153. max-width: 1000px;
  154. border: none;
  155. padding: 3px;
  156. }
  157. .fileinfo .title {
  158. font-size: 20pt;
  159. font-weight: bold;
  160. }
  161. .fileinfo td {
  162. overflow: hidden;
  163. white-space: nowrap;
  164. max-width: 1px;
  165. width: 50%;
  166. text-overflow: ellipsis;
  167. }
  168. .bom {
  169. border-collapse: collapse;
  170. font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
  171. font-size: 10pt;
  172. table-layout: fixed;
  173. width: 100%;
  174. margin-top: 1px;
  175. position: relative;
  176. }
  177. .bom th,
  178. .bom td {
  179. border: 1px solid black;
  180. padding: 5px;
  181. word-wrap: break-word;
  182. text-align: center;
  183. position: relative;
  184. }
  185. .dark .bom th,
  186. .dark .bom td {
  187. border: 1px solid #777;
  188. }
  189. .bom th {
  190. background-color: #CCCCCC;
  191. background-clip: padding-box;
  192. }
  193. .dark .bom th {
  194. background-color: #3b4749;
  195. }
  196. .bom tr.highlighted:nth-child(n) {
  197. background-color: #cfc;
  198. }
  199. .dark .bom tr.highlighted:nth-child(n) {
  200. background-color: #226022;
  201. }
  202. .bom tr:nth-child(even) {
  203. background-color: #f2f2f2;
  204. }
  205. .dark .bom tr:nth-child(even) {
  206. background-color: #313b40;
  207. }
  208. .bom tr.checked {
  209. color: #1cb53d;
  210. }
  211. .dark .bom tr.checked {
  212. color: #2cce54;
  213. }
  214. .bom tr {
  215. transition: background-color 0.2s;
  216. }
  217. .bom .numCol {
  218. width: 30px;
  219. }
  220. .bom .value {
  221. width: 15%;
  222. }
  223. .bom .quantity {
  224. width: 65px;
  225. }
  226. .bom th .sortmark {
  227. position: absolute;
  228. right: 1px;
  229. top: 1px;
  230. margin-top: -5px;
  231. border-width: 5px;
  232. border-style: solid;
  233. border-color: transparent transparent #221 transparent;
  234. transform-origin: 50% 85%;
  235. transition: opacity 0.2s, transform 0.4s;
  236. }
  237. .dark .bom th .sortmark {
  238. filter: invert(1);
  239. }
  240. .bom th .sortmark.none {
  241. opacity: 0;
  242. }
  243. .bom th .sortmark.desc {
  244. transform: rotate(180deg);
  245. }
  246. .bom th:hover .sortmark.none {
  247. opacity: 0.5;
  248. }
  249. .bom .bom-checkbox {
  250. width: 30px;
  251. position: relative;
  252. user-select: none;
  253. -moz-user-select: none;
  254. }
  255. .bom .bom-checkbox:before {
  256. content: "";
  257. position: absolute;
  258. border-width: 15px;
  259. border-style: solid;
  260. border-color: #51829f transparent transparent transparent;
  261. visibility: hidden;
  262. top: -15px;
  263. }
  264. .bom .bom-checkbox:after {
  265. content: "Double click to set/unset all";
  266. position: absolute;
  267. color: white;
  268. top: -35px;
  269. left: -26px;
  270. background: #51829f;
  271. padding: 5px 15px;
  272. border-radius: 8px;
  273. white-space: nowrap;
  274. visibility: hidden;
  275. }
  276. .bom .bom-checkbox:hover:before,
  277. .bom .bom-checkbox:hover:after {
  278. visibility: visible;
  279. transition: visibility 0.2s linear 1s;
  280. }
  281. .split {
  282. -webkit-box-sizing: border-box;
  283. -moz-box-sizing: border-box;
  284. box-sizing: border-box;
  285. overflow-y: auto;
  286. overflow-x: hidden;
  287. background-color: inherit;
  288. }
  289. .split.split-horizontal,
  290. .gutter.gutter-horizontal {
  291. height: 100%;
  292. float: left;
  293. }
  294. .gutter {
  295. background-color: #ddd;
  296. background-repeat: no-repeat;
  297. background-position: 50%;
  298. transition: background-color 0.3s;
  299. }
  300. .dark .gutter {
  301. background-color: #777;
  302. }
  303. .gutter.gutter-horizontal {
  304. background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAeCAYAAADkftS9AAAAIklEQVQoU2M4c+bMfxAGAgYYmwGrIIiDjrELjpo5aiZeMwF+yNnOs5KSvgAAAABJRU5ErkJggg==');
  305. cursor: ew-resize;
  306. width: 5px;
  307. }
  308. .gutter.gutter-vertical {
  309. background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAFAQMAAABo7865AAAABlBMVEVHcEzMzMzyAv2sAAAAAXRSTlMAQObYZgAAABBJREFUeF5jOAMEEAIEEFwAn3kMwcB6I2AAAAAASUVORK5CYII=');
  310. cursor: ns-resize;
  311. height: 5px;
  312. }
  313. .searchbox {
  314. float: left;
  315. height: 40px;
  316. margin: 10px 5px;
  317. padding: 12px 32px;
  318. font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
  319. font-size: 18px;
  320. box-sizing: border-box;
  321. border: 1px solid #888;
  322. border-radius: 6px;
  323. outline: none;
  324. background-color: #eee;
  325. transition: background-color 0.2s, border 0.2s;
  326. 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==');
  327. background-position: 10px 10px;
  328. background-repeat: no-repeat;
  329. }
  330. .dark .searchbox {
  331. background-color: #111;
  332. color: #eee;
  333. }
  334. .searchbox::placeholder {
  335. color: #ccc;
  336. }
  337. .dark .searchbox::placeholder {
  338. color: #666;
  339. }
  340. .filter {
  341. width: calc(60% - 64px);
  342. }
  343. .reflookup {
  344. width: calc(40% - 10px);
  345. }
  346. input[type=text]:focus {
  347. background-color: white;
  348. border: 1px solid #333;
  349. }
  350. .dark input[type=text]:focus {
  351. background-color: #333;
  352. border: 1px solid #ccc;
  353. }
  354. mark.highlight {
  355. background-color: #5050ff;
  356. color: #fff;
  357. padding: 2px;
  358. border-radius: 6px;
  359. }
  360. .dark mark.highlight {
  361. background-color: #76a6da;
  362. color: #111;
  363. }
  364. .menubtn {
  365. background-color: white;
  366. border: none;
  367. 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");
  368. background-position: center;
  369. background-repeat: no-repeat;
  370. }
  371. .statsbtn {
  372. background-color: white;
  373. border: none;
  374. 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");
  375. background-position: center;
  376. background-repeat: no-repeat;
  377. }
  378. .iobtn {
  379. background-color: white;
  380. border: none;
  381. 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");
  382. background-position: center;
  383. background-repeat: no-repeat;
  384. }
  385. .visbtn {
  386. 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");
  387. background-position: center;
  388. background-repeat: no-repeat;
  389. padding: 15px;
  390. }
  391. #vismenu-content {
  392. left: 0px;
  393. font-family: Verdana, sans-serif;
  394. }
  395. .dark .statsbtn,
  396. .dark .savebtn,
  397. .dark .menubtn,
  398. .dark .iobtn,
  399. .dark .visbtn {
  400. filter: invert(1);
  401. }
  402. .flexbox {
  403. display: flex;
  404. align-items: center;
  405. justify-content: space-between;
  406. width: 100%;
  407. }
  408. .savebtn {
  409. background-color: #d6d6d6;
  410. width: auto;
  411. height: 30px;
  412. flex-grow: 1;
  413. margin: 5px;
  414. border-radius: 4px;
  415. }
  416. .savebtn:active {
  417. background-color: #0a0;
  418. color: white;
  419. }
  420. .dark .savebtn:active {
  421. /* This will be inverted */
  422. background-color: #b3b;
  423. }
  424. .stats {
  425. border-collapse: collapse;
  426. font-size: 12pt;
  427. table-layout: fixed;
  428. width: 100%;
  429. min-width: 450px;
  430. }
  431. .dark .stats td {
  432. border: 1px solid #bbb;
  433. }
  434. .stats td {
  435. border: 1px solid black;
  436. padding: 5px;
  437. word-wrap: break-word;
  438. text-align: center;
  439. position: relative;
  440. }
  441. #checkbox-stats div {
  442. position: absolute;
  443. left: 0;
  444. top: 0;
  445. height: 100%;
  446. width: 100%;
  447. display: flex;
  448. align-items: center;
  449. justify-content: center;
  450. }
  451. #checkbox-stats .bar {
  452. background-color: rgba(28, 251, 0, 0.6);
  453. }
  454. .menu {
  455. position: relative;
  456. display: inline-block;
  457. margin: 0.4rem 0.4rem 0.4rem 0;
  458. }
  459. .menu-content {
  460. font-size: 12pt !important;
  461. text-align: left !important;
  462. font-weight: normal !important;
  463. display: none;
  464. position: absolute;
  465. background-color: white;
  466. right: 0;
  467. min-width: 300px;
  468. box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  469. z-index: 100;
  470. padding: 8px;
  471. }
  472. .dark .menu-content {
  473. background-color: #111;
  474. }
  475. .menu:hover .menu-content {
  476. display: block;
  477. }
  478. .menu:hover .menubtn,
  479. .menu:hover .iobtn,
  480. .menu:hover .statsbtn {
  481. background-color: #eee;
  482. }
  483. .menu-label {
  484. display: inline-block;
  485. padding: 8px;
  486. border: 1px solid #ccc;
  487. border-top: 0;
  488. width: calc(100% - 18px);
  489. }
  490. .menu-label-top {
  491. border-top: 1px solid #ccc;
  492. }
  493. .menu-textbox {
  494. float: left;
  495. height: 24px;
  496. margin: 10px 5px;
  497. padding: 5px 5px;
  498. font-family: Consolas, "DejaVu Sans Mono", Monaco, monospace;
  499. font-size: 14px;
  500. box-sizing: border-box;
  501. border: 1px solid #888;
  502. border-radius: 4px;
  503. outline: none;
  504. background-color: #eee;
  505. transition: background-color 0.2s, border 0.2s;
  506. width: calc(100% - 10px);
  507. }
  508. .menu-textbox.invalid,
  509. .dark .menu-textbox.invalid {
  510. color: red;
  511. }
  512. .dark .menu-textbox {
  513. background-color: #222;
  514. color: #eee;
  515. }
  516. .radio-container {
  517. margin: 4px;
  518. }
  519. .topmostdiv {
  520. display: flex;
  521. flex-direction: column;
  522. width: 100%;
  523. background-color: white;
  524. transition: background-color 0.3s;
  525. }
  526. #top {
  527. display: flex;
  528. flex-wrap: wrap;
  529. justify-content: flex-end;
  530. align-items: center;
  531. }
  532. #topdivider {
  533. border-bottom: 2px solid black;
  534. display: flex;
  535. justify-content: center;
  536. align-items: center;
  537. }
  538. .dark #topdivider {
  539. border-bottom: 2px solid #ccc;
  540. }
  541. #topdivider>div {
  542. position: relative;
  543. }
  544. #toptoggle {
  545. cursor: pointer;
  546. user-select: none;
  547. position: absolute;
  548. padding: 0.1rem 0.3rem;
  549. top: -0.4rem;
  550. left: -1rem;
  551. font-size: 1.4rem;
  552. line-height: 60%;
  553. border: 1px solid black;
  554. border-radius: 1rem;
  555. background-color: #fff;
  556. z-index: 100;
  557. }
  558. .flipped {
  559. transform: rotate(0.5turn);
  560. }
  561. .dark #toptoggle {
  562. border: 1px solid #fff;
  563. background-color: #222;
  564. }
  565. #fileinfodiv {
  566. flex: 20rem 1 0;
  567. overflow: auto;
  568. }
  569. #bomcontrols {
  570. display: flex;
  571. flex-direction: row-reverse;
  572. }
  573. #bomcontrols>* {
  574. flex-shrink: 0;
  575. }
  576. #dbg {
  577. display: block;
  578. }
  579. ::-webkit-scrollbar {
  580. width: 8px;
  581. }
  582. ::-webkit-scrollbar-track {
  583. background: #aaa;
  584. }
  585. ::-webkit-scrollbar-thumb {
  586. background: #666;
  587. border-radius: 3px;
  588. }
  589. ::-webkit-scrollbar-thumb:hover {
  590. background: #555;
  591. }
  592. .slider {
  593. -webkit-appearance: none;
  594. width: 100%;
  595. margin: 3px 0;
  596. padding: 0;
  597. outline: none;
  598. opacity: 0.7;
  599. -webkit-transition: .2s;
  600. transition: opacity .2s;
  601. border-radius: 3px;
  602. }
  603. .slider:hover {
  604. opacity: 1;
  605. }
  606. .slider:focus {
  607. outline: none;
  608. }
  609. .slider::-webkit-slider-runnable-track {
  610. -webkit-appearance: none;
  611. width: 100%;
  612. height: 8px;
  613. background: #d3d3d3;
  614. border-radius: 3px;
  615. border: none;
  616. }
  617. .slider::-webkit-slider-thumb {
  618. -webkit-appearance: none;
  619. width: 15px;
  620. height: 15px;
  621. border-radius: 50%;
  622. background: #0a0;
  623. cursor: pointer;
  624. margin-top: -4px;
  625. }
  626. .dark .slider::-webkit-slider-thumb {
  627. background: #3d3;
  628. }
  629. .slider::-moz-range-thumb {
  630. width: 15px;
  631. height: 15px;
  632. border-radius: 50%;
  633. background: #0a0;
  634. cursor: pointer;
  635. }
  636. .slider::-moz-range-track {
  637. height: 8px;
  638. background: #d3d3d3;
  639. border-radius: 3px;
  640. }
  641. .dark .slider::-moz-range-thumb {
  642. background: #3d3;
  643. }
  644. .slider::-ms-track {
  645. width: 100%;
  646. height: 8px;
  647. border-width: 3px 0;
  648. background: transparent;
  649. border-color: transparent;
  650. color: transparent;
  651. transition: opacity .2s;
  652. }
  653. .slider::-ms-fill-lower {
  654. background: #d3d3d3;
  655. border: none;
  656. border-radius: 3px;
  657. }
  658. .slider::-ms-fill-upper {
  659. background: #d3d3d3;
  660. border: none;
  661. border-radius: 3px;
  662. }
  663. .slider::-ms-thumb {
  664. width: 15px;
  665. height: 15px;
  666. border-radius: 50%;
  667. background: #0a0;
  668. cursor: pointer;
  669. margin: 0;
  670. }
  671. .shameless-plug {
  672. font-size: 0.8em;
  673. text-align: center;
  674. display: block;
  675. }
  676. a {
  677. color: #0278a4;
  678. }
  679. .dark a {
  680. color: #00b9fd;
  681. }
  682. #frontcanvas,
  683. #backcanvas {
  684. touch-action: none;
  685. }
  686. .placeholder {
  687. border: 1px dashed #9f9fda !important;
  688. background-color: #edf2f7 !important;
  689. }
  690. .dragging {
  691. z-index: 999;
  692. }
  693. .dark .dragging>table>tbody>tr {
  694. background-color: #252c30;
  695. }
  696. .dark .placeholder {
  697. filter: invert(1);
  698. }
  699. .column-spacer {
  700. top: 0;
  701. left: 0;
  702. width: calc(100% - 4px);
  703. position: absolute;
  704. cursor: pointer;
  705. user-select: none;
  706. height: 100%;
  707. }
  708. .column-width-handle {
  709. top: 0;
  710. right: 0;
  711. width: 4px;
  712. position: absolute;
  713. cursor: col-resize;
  714. user-select: none;
  715. height: 100%;
  716. }
  717. .column-width-handle:hover {
  718. background-color: #4f99bd;
  719. }
  720. .help-link {
  721. border: 1px solid #0278a4;
  722. padding-inline: 0.3rem;
  723. border-radius: 3px;
  724. cursor: pointer;
  725. }
  726. .dark .help-link {
  727. border: 1px solid #00b9fd;
  728. }
  729. .bom-color {
  730. width: 20%;
  731. }
  732. .color-column input {
  733. width: 1.6rem;
  734. height: 1rem;
  735. border: 1px solid black;
  736. cursor: pointer;
  737. padding: 0;
  738. }
  739. /* removes default styling from input color element */
  740. ::-webkit-color-swatch {
  741. border: none;
  742. }
  743. ::-webkit-color-swatch-wrapper {
  744. padding: 0;
  745. }
  746. ::-moz-color-swatch,
  747. ::-moz-focus-inner {
  748. border: none;
  749. }
  750. ::-moz-focus-inner {
  751. padding: 0;
  752. }
  753. /* #bomhead {
  754. position: sticky;
  755. top: 0px;
  756. z-index: 1;
  757. } */
  758. </style>
  759. <script type="text/javascript" >
  760. ///////////////////////////////////////////////
  761. /*
  762. Split.js - v1.3.5
  763. MIT License
  764. https://github.com/nathancahill/Split.js
  765. */
  766. !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}}});
  767. ///////////////////////////////////////////////
  768. ///////////////////////////////////////////////
  769. // Copyright (c) 2013 Pieroxy <pieroxy@pieroxy.net>
  770. // This work is free. You can redistribute it and/or modify it
  771. // under the terms of the WTFPL, Version 2
  772. // For more information see LICENSE.txt or http://www.wtfpl.net/
  773. //
  774. // For more information, the home page:
  775. // http://pieroxy.net/blog/pages/lz-string/testing.html
  776. //
  777. // LZ-based compression algorithm, version 1.4.4
  778. 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});
  779. ///////////////////////////////////////////////
  780. ///////////////////////////////////////////////
  781. /*!
  782. * PEP v0.4.3 | https://github.com/jquery/PEP
  783. * Copyright jQuery Foundation and other contributors | http://jquery.org/license
  784. */
  785. !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);
  786. for(var d,e=2;e<m.length;e++)d=m[e],c[d]=b[d]||n[e];c.buttons=b.buttons||0;
  787. 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}})}
  788. 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++)
  789. b.register.call(b,a)},unregister:function(a){for(var b,c=this.eventSourceList.length,d=0;d<c&&(b=this.eventSourceList[d]);d++)
  790. 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){
  791. for(var b=a;b.parentNode;)b=b.parentNode;
  792. 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);
  793. 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){
  794. //
  795. 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))},
  796. 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){
  797. var b=x(a,this.findElements,this);
  798. 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){}
  799. 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:[],
  800. 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++){
  801. 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);
  802. 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];
  803. c.buttons=b?b.buttons&~d:0,a.buttons=c.buttons}H.set(this.POINTER_ID,a),
  804. 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),
  805. 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),
  806. 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);
  807. 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){
  808. (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,
  809. c.altKey=b.altKey,c.ctrlKey=b.ctrlKey,c.metaKey=b.metaKey,c.shiftKey=b.shiftKey;
  810. 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))},
  811. shouldScroll:function(a){if(this.firstXY){var b,c=a.currentTarget._scrollType;if("none"===c)
  812. b=!1;else if("XY"===c)
  813. 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]);
  814. 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},
  815. vacuumTouches:function(a){var b=a.touches;
  816. if(R.size>=b.length){var c=[];R.forEach(function(a,d){
  817. 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);
  818. if(c){var d=c.out,e=c.outTarget;u.move(b),d&&e!==b.target&&(d.relatedTarget=b.target,b.relatedTarget=e,
  819. d.target=e,b.target?(u.leaveOut(d),u.enterOver(b)):(
  820. 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)},
  821. dedupSynthMouse:function(a){var b=N.lastTouches,c=a.changedTouches[0];
  822. if(this.isPrimaryTouch(c)){
  823. 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});
  824. ///////////////////////////////////////////////
  825. ///////////////////////////////////////////////
  826. 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"]}
  827. ///////////////////////////////////////////////
  828. ///////////////////////////////////////////////
  829. var pcbdata = JSON.parse(LZString.decompressFromBase64("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mS6gnBRO3qk0ToUujy6UzpbOsql4iQqpeIkqqQCujByyLopO6C6fzv0u1M72qXiJFqkfLs6pMy7Me359Sy6KLusuu87UrrGpHy7irviJaak4rvKuty6CzrCuqckdMRrRVokoSXqu+SlaUAnOwnEWroSur86krr3O1bFoMRaJZq6+rujJO46PMSGuqq7hLpqu2C66rt+Owa6prsHJUtFFiTIJO9FFiVGu0K6pTs8uuq7YTvPJZ2MGrpYebvKqzqQJXa6OrtYuqy6NTsxxQTFyMW2u9tZzrvkpUk6PMRuu5a7jrtdO066G0VpO666gSWjJCElbrqZO+678rpOuxfFBMQFO88lUSQuugzFkuluu0U68rvnO7q6nrqDnTO5rrvlOkakVToWuodZfMW+uyG7KLp6ulLFYsXkpXU7zyX1O6IlKsSNO1G7vzqhuv66asSdpbG7FSWjJdUlQLp0xam7DrpCuh67bzqrxE0lsbq9O3G6fTuZu/06PzvFOhs6urvRu6G6IzvGpUUkwzuxu6M7mboOxIm6+boKuqvE0zrspcMk5boJo9nFFbslurk7pbqkJcs65btLO+sk8yQkxbnEdbohu4m7+btJuvHFqyW1u027ZrpnedMp2cR7O7m76zr7OqW7frpCJSHEOcWBu/nE2cW1u/sldbpiJYck2TtirDk7dLvGurE7f8VXOi27yX0VxUO71cWXJKQl1zoNuh27HruNu9387ZjspQ876yVPJL27EIIdxFW6sLrVu1fFXyWTup86I7oDxdO7aVyNwWO7Vbsduoglg7qAukalO13uJckkLtRpu5XEYKTLu7O6K7s/xbnEMKT4pJC6+KRQupG60Lt9uy86Gbp+u+O6nbo7ugi6+KXHuiO7SLvLxWiks7sTJHO7f8W4pOykl7r4pXil8bsAfXS057onJEe7K7shxbi6+KV4unCkcDmLuhSlojBbu+e627pluyS73KX9QOu6LKQMpAAkH7q3ujnUd7vbumIk1LtipFS7YqQ0u9e7X3njMc+7t7qZuqQlDLojukB73KVMu3+61oCQcAB6X7qAe1fEoqVipBy7QHqcuq+7XLttunc60boXu7QkMqS6pHB68qX8uvu6fLzqimB6MTtfumW7IrrypaK68qViuwh6A7EbJYK7/bvcu1a73jt/xNK68qQyurqksrsge7ql6bsYe6q7mHtqu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"))
  830. ///////////////////////////////////////////////
  831. ///////////////////////////////////////////////
  832. /* Utility functions */
  833. var storagePrefix = 'KiCad_HTML_BOM__' + pcbdata.metadata.title + '__' +
  834. pcbdata.metadata.revision + '__#';
  835. var storage;
  836. function initStorage(key) {
  837. try {
  838. window.localStorage.getItem("blank");
  839. storage = window.localStorage;
  840. } catch (e) {
  841. // localStorage not available
  842. }
  843. if (!storage) {
  844. try {
  845. window.sessionStorage.getItem("blank");
  846. storage = window.sessionStorage;
  847. } catch (e) {
  848. // sessionStorage also not available
  849. }
  850. }
  851. }
  852. function readStorage(key) {
  853. if (storage) {
  854. return storage.getItem(storagePrefix + key);
  855. } else {
  856. return null;
  857. }
  858. }
  859. function writeStorage(key, value) {
  860. if (storage) {
  861. storage.setItem(storagePrefix + key, value);
  862. }
  863. }
  864. function fancyDblClickHandler(el, onsingle, ondouble) {
  865. return function () {
  866. if (el.getAttribute("data-dblclick") == null) {
  867. el.setAttribute("data-dblclick", 1);
  868. setTimeout(function () {
  869. if (el.getAttribute("data-dblclick") == 1) {
  870. onsingle();
  871. }
  872. el.removeAttribute("data-dblclick");
  873. }, 200);
  874. } else {
  875. el.removeAttribute("data-dblclick");
  876. ondouble();
  877. }
  878. }
  879. }
  880. function smoothScrollToRow(rowid) {
  881. document.getElementById(rowid).scrollIntoView({
  882. behavior: "smooth",
  883. block: "center",
  884. inline: "nearest"
  885. });
  886. }
  887. function focusInputField(input) {
  888. input.scrollIntoView(false);
  889. input.focus();
  890. input.select();
  891. }
  892. function saveBomTable(output) {
  893. var text = '';
  894. for (var node of bomhead.childNodes[0].childNodes) {
  895. if (node.firstChild) {
  896. text += (output == 'csv' ? `"${node.firstChild.nodeValue}"` : node.firstChild.nodeValue);
  897. }
  898. if (node != bomhead.childNodes[0].lastChild) {
  899. text += (output == 'csv' ? ',' : '\t');
  900. }
  901. }
  902. text += '\n';
  903. for (var row of bombody.childNodes) {
  904. for (var cell of row.childNodes) {
  905. let val = '';
  906. for (var node of cell.childNodes) {
  907. if (node.nodeName == "INPUT") {
  908. if (node.checked) {
  909. val += '✓';
  910. }
  911. } else if ((node.nodeName == "MARK") || (node.nodeName == "A")) {
  912. val += node.firstChild.nodeValue;
  913. } else {
  914. val += node.nodeValue;
  915. }
  916. }
  917. if (output == 'csv') {
  918. val = val.replace(/\"/g, '\"\"'); // pair of double-quote characters
  919. if (isNumeric(val)) {
  920. val = +val; // use number
  921. } else {
  922. val = `"${val}"`; // enclosed within double-quote
  923. }
  924. }
  925. text += val;
  926. if (cell != row.lastChild) {
  927. text += (output == 'csv' ? ',' : '\t');
  928. }
  929. }
  930. text += '\n';
  931. }
  932. if (output != 'clipboard') {
  933. // To file: csv or txt
  934. var blob = new Blob([text], {
  935. type: `text/${output}`
  936. });
  937. saveFile(`${pcbdata.metadata.title}.${output}`, blob);
  938. } else {
  939. // To clipboard
  940. var textArea = document.createElement("textarea");
  941. textArea.classList.add('clipboard-temp');
  942. textArea.value = text;
  943. document.body.appendChild(textArea);
  944. textArea.focus();
  945. textArea.select();
  946. try {
  947. if (document.execCommand('copy')) {
  948. console.log('Bom copied to clipboard.');
  949. }
  950. } catch (err) {
  951. console.log('Can not copy to clipboard.');
  952. }
  953. document.body.removeChild(textArea);
  954. }
  955. }
  956. function isNumeric(str) {
  957. /* https://stackoverflow.com/a/175787 */
  958. return (typeof str != "string" ? false : !isNaN(str) && !isNaN(parseFloat(str)));
  959. }
  960. function removeGutterNode(node) {
  961. for (var i = 0; i < node.childNodes.length; i++) {
  962. if (node.childNodes[i].classList &&
  963. node.childNodes[i].classList.contains("gutter")) {
  964. node.removeChild(node.childNodes[i]);
  965. break;
  966. }
  967. }
  968. }
  969. function cleanGutters() {
  970. removeGutterNode(document.getElementById("bot"));
  971. removeGutterNode(document.getElementById("canvasdiv"));
  972. }
  973. var units = {
  974. prefixes: {
  975. giga: ["G", "g", "giga", "Giga", "GIGA"],
  976. mega: ["M", "mega", "Mega", "MEGA"],
  977. kilo: ["K", "k", "kilo", "Kilo", "KILO"],
  978. milli: ["m", "milli", "Milli", "MILLI"],
  979. micro: ["U", "u", "micro", "Micro", "MICRO", "μ", "µ"], // different utf8 μ
  980. nano: ["N", "n", "nano", "Nano", "NANO"],
  981. pico: ["P", "p", "pico", "Pico", "PICO"],
  982. },
  983. unitsShort: ["R", "r", "Ω", "F", "f", "H", "h"],
  984. unitsLong: [
  985. "OHM", "Ohm", "ohm", "ohms",
  986. "FARAD", "Farad", "farad",
  987. "HENRY", "Henry", "henry"
  988. ],
  989. getMultiplier: function (s) {
  990. if (this.prefixes.giga.includes(s)) return 1e9;
  991. if (this.prefixes.mega.includes(s)) return 1e6;
  992. if (this.prefixes.kilo.includes(s)) return 1e3;
  993. if (this.prefixes.milli.includes(s)) return 1e-3;
  994. if (this.prefixes.micro.includes(s)) return 1e-6;
  995. if (this.prefixes.nano.includes(s)) return 1e-9;
  996. if (this.prefixes.pico.includes(s)) return 1e-12;
  997. return 1;
  998. },
  999. valueRegex: null,
  1000. }
  1001. function initUtils() {
  1002. var allPrefixes = units.prefixes.giga
  1003. .concat(units.prefixes.mega)
  1004. .concat(units.prefixes.kilo)
  1005. .concat(units.prefixes.milli)
  1006. .concat(units.prefixes.micro)
  1007. .concat(units.prefixes.nano)
  1008. .concat(units.prefixes.pico);
  1009. var allUnits = units.unitsShort.concat(units.unitsLong);
  1010. units.valueRegex = new RegExp("^([0-9\.]+)" +
  1011. "\\s*(" + allPrefixes.join("|") + ")?" +
  1012. "(" + allUnits.join("|") + ")?" +
  1013. "(\\b.*)?$", "");
  1014. units.valueAltRegex = new RegExp("^([0-9]*)" +
  1015. "(" + units.unitsShort.join("|") + ")?" +
  1016. "([GgMmKkUuNnPp])?" +
  1017. "([0-9]*)" +
  1018. "(\\b.*)?$", "");
  1019. if (config.fields.includes("Value")) {
  1020. var index = config.fields.indexOf("Value");
  1021. pcbdata.bom["parsedValues"] = {};
  1022. for (var id in pcbdata.bom.fields) {
  1023. pcbdata.bom.parsedValues[id] = parseValue(pcbdata.bom.fields[id][index])
  1024. }
  1025. }
  1026. }
  1027. function parseValue(val, ref) {
  1028. var inferUnit = (unit, ref) => {
  1029. if (unit) {
  1030. unit = unit.toLowerCase();
  1031. if (unit == 'Ω' || unit == "ohm" || unit == "ohms") {
  1032. unit = 'r';
  1033. }
  1034. unit = unit[0];
  1035. } else {
  1036. ref = /^([a-z]+)\d+$/i.exec(ref);
  1037. if (ref) {
  1038. ref = ref[1].toLowerCase();
  1039. if (ref == "c") unit = 'f';
  1040. else if (ref == "l") unit = 'h';
  1041. else if (ref == "r" || ref == "rv") unit = 'r';
  1042. else unit = null;
  1043. }
  1044. }
  1045. return unit;
  1046. };
  1047. val = val.replace(/,/g, "");
  1048. var match = units.valueRegex.exec(val);
  1049. var unit;
  1050. if (match) {
  1051. val = parseFloat(match[1]);
  1052. if (match[2]) {
  1053. val = val * units.getMultiplier(match[2]);
  1054. }
  1055. unit = inferUnit(match[3], ref);
  1056. if (!unit) return null;
  1057. else return {
  1058. val: val,
  1059. unit: unit,
  1060. extra: match[4],
  1061. }
  1062. }
  1063. match = units.valueAltRegex.exec(val);
  1064. if (match && (match[1] || match[4])) {
  1065. val = parseFloat(match[1] + "." + match[4]);
  1066. if (match[3]) {
  1067. val = val * units.getMultiplier(match[3]);
  1068. }
  1069. unit = inferUnit(match[2], ref);
  1070. if (!unit) return null;
  1071. else return {
  1072. val: val,
  1073. unit: unit,
  1074. extra: match[5],
  1075. }
  1076. }
  1077. return null;
  1078. }
  1079. function valueCompare(a, b, stra, strb) {
  1080. if (a === null && b === null) {
  1081. // Failed to parse both values, compare them as strings.
  1082. if (stra != strb) return stra > strb ? 1 : -1;
  1083. else return 0;
  1084. } else if (a === null) {
  1085. return 1;
  1086. } else if (b === null) {
  1087. return -1;
  1088. } else {
  1089. if (a.unit != b.unit) return a.unit > b.unit ? 1 : -1;
  1090. else if (a.val != b.val) return a.val > b.val ? 1 : -1;
  1091. else if (a.extra != b.extra) return a.extra > b.extra ? 1 : -1;
  1092. else return 0;
  1093. }
  1094. }
  1095. function validateSaveImgDimension(element) {
  1096. var valid = false;
  1097. var intValue = 0;
  1098. if (/^[1-9]\d*$/.test(element.value)) {
  1099. intValue = parseInt(element.value);
  1100. if (intValue <= 16000) {
  1101. valid = true;
  1102. }
  1103. }
  1104. if (valid) {
  1105. element.classList.remove("invalid");
  1106. } else {
  1107. element.classList.add("invalid");
  1108. }
  1109. return intValue;
  1110. }
  1111. function saveImage(layer) {
  1112. var width = validateSaveImgDimension(document.getElementById("render-save-width"));
  1113. var height = validateSaveImgDimension(document.getElementById("render-save-height"));
  1114. var bgcolor = null;
  1115. if (!document.getElementById("render-save-transparent").checked) {
  1116. var style = getComputedStyle(topmostdiv);
  1117. bgcolor = style.getPropertyValue("background-color");
  1118. }
  1119. if (!width || !height) return;
  1120. // Prepare image
  1121. var canvas = document.createElement("canvas");
  1122. var layerdict = {
  1123. transform: {
  1124. x: 0,
  1125. y: 0,
  1126. s: 1,
  1127. panx: 0,
  1128. pany: 0,
  1129. zoom: 1,
  1130. },
  1131. bg: canvas,
  1132. fab: canvas,
  1133. silk: canvas,
  1134. highlight: canvas,
  1135. layer: layer,
  1136. }
  1137. // Do the rendering
  1138. recalcLayerScale(layerdict, width, height);
  1139. prepareLayer(layerdict);
  1140. clearCanvas(canvas, bgcolor);
  1141. drawBackground(layerdict, false);
  1142. drawHighlightsOnLayer(layerdict, false);
  1143. // Save image
  1144. var imgdata = canvas.toDataURL("image/png");
  1145. var filename = pcbdata.metadata.title;
  1146. if (pcbdata.metadata.revision) {
  1147. filename += `.${pcbdata.metadata.revision}`;
  1148. }
  1149. filename += `.${layer}.png`;
  1150. saveFile(filename, dataURLtoBlob(imgdata));
  1151. }
  1152. function saveSettings() {
  1153. var data = {
  1154. type: "InteractiveHtmlBom settings",
  1155. version: 1,
  1156. pcbmetadata: pcbdata.metadata,
  1157. settings: settings,
  1158. }
  1159. var blob = new Blob([JSON.stringify(data, null, 4)], {
  1160. type: "application/json"
  1161. });
  1162. saveFile(`${pcbdata.metadata.title}.settings.json`, blob);
  1163. }
  1164. function loadSettings() {
  1165. var input = document.createElement("input");
  1166. input.type = "file";
  1167. input.accept = ".settings.json";
  1168. input.onchange = function (e) {
  1169. var file = e.target.files[0];
  1170. var reader = new FileReader();
  1171. reader.onload = readerEvent => {
  1172. var content = readerEvent.target.result;
  1173. var newSettings;
  1174. try {
  1175. newSettings = JSON.parse(content);
  1176. } catch (e) {
  1177. alert("Selected file is not InteractiveHtmlBom settings file.");
  1178. return;
  1179. }
  1180. if (newSettings.type != "InteractiveHtmlBom settings") {
  1181. alert("Selected file is not InteractiveHtmlBom settings file.");
  1182. return;
  1183. }
  1184. var metadataMatches = newSettings.hasOwnProperty("pcbmetadata");
  1185. if (metadataMatches) {
  1186. for (var k in pcbdata.metadata) {
  1187. if (!newSettings.pcbmetadata.hasOwnProperty(k) || newSettings.pcbmetadata[k] != pcbdata.metadata[k]) {
  1188. metadataMatches = false;
  1189. }
  1190. }
  1191. }
  1192. if (!metadataMatches) {
  1193. var currentMetadata = JSON.stringify(pcbdata.metadata, null, 4);
  1194. var fileMetadata = JSON.stringify(newSettings.pcbmetadata, null, 4);
  1195. if (!confirm(
  1196. `Settins file metadata does not match current metadata.\n\n` +
  1197. `Page metadata:\n${currentMetadata}\n\n` +
  1198. `Settings file metadata:\n${fileMetadata}\n\n` +
  1199. `Press OK if you would like to import settings anyway.`)) {
  1200. return;
  1201. }
  1202. }
  1203. overwriteSettings(newSettings.settings);
  1204. }
  1205. reader.readAsText(file, 'UTF-8');
  1206. }
  1207. input.click();
  1208. }
  1209. function resetSettings() {
  1210. if (!confirm(
  1211. `This will reset all checkbox states and other settings.\n\n` +
  1212. `Press OK if you want to continue.`)) {
  1213. return;
  1214. }
  1215. if (storage) {
  1216. var keys = [];
  1217. for (var i = 0; i < storage.length; i++) {
  1218. var key = storage.key(i);
  1219. if (key.startsWith(storagePrefix)) keys.push(key);
  1220. }
  1221. for (var key of keys) storage.removeItem(key);
  1222. }
  1223. location.reload();
  1224. }
  1225. function overwriteSettings(newSettings) {
  1226. initDone = false;
  1227. Object.assign(settings, newSettings);
  1228. writeStorage("bomlayout", settings.bomlayout);
  1229. writeStorage("bommode", settings.bommode);
  1230. writeStorage("canvaslayout", settings.canvaslayout);
  1231. writeStorage("bomCheckboxes", settings.checkboxes.join(","));
  1232. document.getElementById("bomCheckboxes").value = settings.checkboxes.join(",");
  1233. for (var checkbox of settings.checkboxes) {
  1234. writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
  1235. }
  1236. writeStorage("markWhenChecked", settings.markWhenChecked);
  1237. padsVisible(settings.renderPads);
  1238. document.getElementById("padsCheckbox").checked = settings.renderPads;
  1239. fabricationVisible(settings.renderFabrication);
  1240. document.getElementById("fabricationCheckbox").checked = settings.renderFabrication;
  1241. silkscreenVisible(settings.renderSilkscreen);
  1242. document.getElementById("silkscreenCheckbox").checked = settings.renderSilkscreen;
  1243. referencesVisible(settings.renderReferences);
  1244. document.getElementById("referencesCheckbox").checked = settings.renderReferences;
  1245. valuesVisible(settings.renderValues);
  1246. document.getElementById("valuesCheckbox").checked = settings.renderValues;
  1247. tracksVisible(settings.renderTracks);
  1248. document.getElementById("tracksCheckbox").checked = settings.renderTracks;
  1249. zonesVisible(settings.renderZones);
  1250. document.getElementById("zonesCheckbox").checked = settings.renderZones;
  1251. dnpOutline(settings.renderDnpOutline);
  1252. document.getElementById("dnpOutlineCheckbox").checked = settings.renderDnpOutline;
  1253. setRedrawOnDrag(settings.redrawOnDrag);
  1254. document.getElementById("dragCheckbox").checked = settings.redrawOnDrag;
  1255. setDarkMode(settings.darkMode);
  1256. document.getElementById("darkmodeCheckbox").checked = settings.darkMode;
  1257. setHighlightPin1(settings.highlightpin1);
  1258. document.forms.highlightpin1.highlightpin1.value = settings.highlightpin1;
  1259. writeStorage("boardRotation", settings.boardRotation);
  1260. document.getElementById("boardRotation").value = settings.boardRotation / 5;
  1261. document.getElementById("rotationDegree").textContent = settings.boardRotation;
  1262. setOffsetBackRotation(settings.offsetBackRotation);
  1263. document.getElementById("offsetBackRotationCheckbox").checked = settings.offsetBackRotation;
  1264. initDone = true;
  1265. prepCheckboxes();
  1266. changeBomLayout(settings.bomlayout);
  1267. }
  1268. function saveFile(filename, blob) {
  1269. var link = document.createElement("a");
  1270. var objurl = URL.createObjectURL(blob);
  1271. link.download = filename;
  1272. link.href = objurl;
  1273. link.click();
  1274. }
  1275. function dataURLtoBlob(dataurl) {
  1276. var arr = dataurl.split(','),
  1277. mime = arr[0].match(/:(.*?);/)[1],
  1278. bstr = atob(arr[1]),
  1279. n = bstr.length,
  1280. u8arr = new Uint8Array(n);
  1281. while (n--) {
  1282. u8arr[n] = bstr.charCodeAt(n);
  1283. }
  1284. return new Blob([u8arr], {
  1285. type: mime
  1286. });
  1287. }
  1288. var settings = {
  1289. canvaslayout: "FB",
  1290. bomlayout: "left-right",
  1291. bommode: "grouped",
  1292. checkboxes: [],
  1293. checkboxStoredRefs: {},
  1294. darkMode: false,
  1295. highlightpin1: "none",
  1296. redrawOnDrag: true,
  1297. boardRotation: 0,
  1298. offsetBackRotation: false,
  1299. renderPads: true,
  1300. renderReferences: true,
  1301. renderValues: true,
  1302. renderSilkscreen: true,
  1303. renderFabrication: true,
  1304. renderDnpOutline: false,
  1305. renderTracks: true,
  1306. renderZones: true,
  1307. columnOrder: [],
  1308. hiddenColumns: [],
  1309. netColors: {},
  1310. }
  1311. function initDefaults() {
  1312. settings.bomlayout = readStorage("bomlayout");
  1313. if (settings.bomlayout === null) {
  1314. settings.bomlayout = config.bom_view;
  1315. }
  1316. if (!['bom-only', 'left-right', 'top-bottom'].includes(settings.bomlayout)) {
  1317. settings.bomlayout = config.bom_view;
  1318. }
  1319. settings.bommode = readStorage("bommode");
  1320. if (settings.bommode === null) {
  1321. settings.bommode = "grouped";
  1322. }
  1323. if (settings.bommode == "netlist" && !pcbdata.nets) {
  1324. settings.bommode = "grouped";
  1325. }
  1326. if (!["grouped", "ungrouped", "netlist"].includes(settings.bommode)) {
  1327. settings.bommode = "grouped";
  1328. }
  1329. settings.canvaslayout = readStorage("canvaslayout");
  1330. if (settings.canvaslayout === null) {
  1331. settings.canvaslayout = config.layer_view;
  1332. }
  1333. var bomCheckboxes = readStorage("bomCheckboxes");
  1334. if (bomCheckboxes === null) {
  1335. bomCheckboxes = config.checkboxes;
  1336. }
  1337. settings.checkboxes = bomCheckboxes.split(",").filter((e) => e);
  1338. document.getElementById("bomCheckboxes").value = bomCheckboxes;
  1339. var highlightpin1 = readStorage("highlightpin1") || config.highlight_pin1;
  1340. if (highlightpin1 === "false") highlightpin1 = "none";
  1341. if (highlightpin1 === "true") highlightpin1 = "all";
  1342. setHighlightPin1(highlightpin1);
  1343. document.forms.highlightpin1.highlightpin1.value = highlightpin1;
  1344. settings.markWhenChecked = readStorage("markWhenChecked") || "";
  1345. populateMarkWhenCheckedOptions();
  1346. function initBooleanSetting(storageString, def, elementId, func) {
  1347. var b = readStorage(storageString);
  1348. if (b === null) {
  1349. b = def;
  1350. } else {
  1351. b = (b == "true");
  1352. }
  1353. document.getElementById(elementId).checked = b;
  1354. func(b);
  1355. }
  1356. initBooleanSetting("padsVisible", config.show_pads, "padsCheckbox", padsVisible);
  1357. initBooleanSetting("fabricationVisible", config.show_fabrication, "fabricationCheckbox", fabricationVisible);
  1358. initBooleanSetting("silkscreenVisible", config.show_silkscreen, "silkscreenCheckbox", silkscreenVisible);
  1359. initBooleanSetting("referencesVisible", true, "referencesCheckbox", referencesVisible);
  1360. initBooleanSetting("valuesVisible", true, "valuesCheckbox", valuesVisible);
  1361. if ("tracks" in pcbdata) {
  1362. initBooleanSetting("tracksVisible", true, "tracksCheckbox", tracksVisible);
  1363. initBooleanSetting("zonesVisible", true, "zonesCheckbox", zonesVisible);
  1364. } else {
  1365. document.getElementById("tracksAndZonesCheckboxes").style.display = "none";
  1366. tracksVisible(false);
  1367. zonesVisible(false);
  1368. }
  1369. initBooleanSetting("dnpOutline", false, "dnpOutlineCheckbox", dnpOutline);
  1370. initBooleanSetting("redrawOnDrag", config.redraw_on_drag, "dragCheckbox", setRedrawOnDrag);
  1371. initBooleanSetting("darkmode", config.dark_mode, "darkmodeCheckbox", setDarkMode);
  1372. var fields = ["checkboxes", "References"].concat(config.fields).concat(["Quantity"]);
  1373. var hcols = JSON.parse(readStorage("hiddenColumns"));
  1374. if (hcols === null) {
  1375. hcols = [];
  1376. }
  1377. settings.hiddenColumns = hcols.filter(e => fields.includes(e));
  1378. var cord = JSON.parse(readStorage("columnOrder"));
  1379. if (cord === null) {
  1380. cord = fields;
  1381. } else {
  1382. cord = cord.filter(e => fields.includes(e));
  1383. if (cord.length != fields.length)
  1384. cord = fields;
  1385. }
  1386. settings.columnOrder = cord;
  1387. settings.boardRotation = readStorage("boardRotation");
  1388. if (settings.boardRotation === null) {
  1389. settings.boardRotation = config.board_rotation * 5;
  1390. } else {
  1391. settings.boardRotation = parseInt(settings.boardRotation);
  1392. }
  1393. document.getElementById("boardRotation").value = settings.boardRotation / 5;
  1394. document.getElementById("rotationDegree").textContent = settings.boardRotation;
  1395. initBooleanSetting("offsetBackRotation", config.offset_back_rotation, "offsetBackRotationCheckbox", setOffsetBackRotation);
  1396. settings.netColors = JSON.parse(readStorage("netColors")) || {};
  1397. }
  1398. // Helper classes for user js callbacks.
  1399. const IBOM_EVENT_TYPES = {
  1400. ALL: "all",
  1401. HIGHLIGHT_EVENT: "highlightEvent",
  1402. CHECKBOX_CHANGE_EVENT: "checkboxChangeEvent",
  1403. BOM_BODY_CHANGE_EVENT: "bomBodyChangeEvent",
  1404. }
  1405. const EventHandler = {
  1406. callbacks: {},
  1407. init: function () {
  1408. for (eventType of Object.values(IBOM_EVENT_TYPES))
  1409. this.callbacks[eventType] = [];
  1410. },
  1411. registerCallback: function (eventType, callback) {
  1412. this.callbacks[eventType].push(callback);
  1413. },
  1414. emitEvent: function (eventType, eventArgs) {
  1415. event = {
  1416. eventType: eventType,
  1417. args: eventArgs,
  1418. }
  1419. var callback;
  1420. for (callback of this.callbacks[eventType])
  1421. callback(event);
  1422. for (callback of this.callbacks[IBOM_EVENT_TYPES.ALL])
  1423. callback(event);
  1424. }
  1425. }
  1426. EventHandler.init();
  1427. ///////////////////////////////////////////////
  1428. ///////////////////////////////////////////////
  1429. /* PCB rendering code */
  1430. var emptyContext2d = document.createElement("canvas").getContext("2d");
  1431. function deg2rad(deg) {
  1432. return deg * Math.PI / 180;
  1433. }
  1434. function calcFontPoint(linepoint, text, offsetx, offsety, tilt) {
  1435. var point = [
  1436. linepoint[0] * text.width + offsetx,
  1437. linepoint[1] * text.height + offsety
  1438. ];
  1439. // This approximates pcbnew behavior with how text tilts depending on horizontal justification
  1440. point[0] -= (linepoint[1] + 0.5 * (1 + text.justify[0])) * text.height * tilt;
  1441. return point;
  1442. }
  1443. function drawText(ctx, text, color) {
  1444. if ("ref" in text && !settings.renderReferences) return;
  1445. if ("val" in text && !settings.renderValues) return;
  1446. ctx.save();
  1447. ctx.fillStyle = color;
  1448. ctx.strokeStyle = color;
  1449. ctx.lineCap = "round";
  1450. ctx.lineJoin = "round";
  1451. ctx.lineWidth = text.thickness;
  1452. if ("svgpath" in text) {
  1453. ctx.stroke(new Path2D(text.svgpath));
  1454. ctx.restore();
  1455. return;
  1456. }
  1457. if ("polygons" in text) {
  1458. ctx.fill(getPolygonsPath(text));
  1459. ctx.restore();
  1460. return;
  1461. }
  1462. ctx.translate(...text.pos);
  1463. ctx.translate(text.thickness * 0.5, 0);
  1464. var angle = -text.angle;
  1465. if (text.attr.includes("mirrored")) {
  1466. ctx.scale(-1, 1);
  1467. angle = -angle;
  1468. }
  1469. var tilt = 0;
  1470. if (text.attr.includes("italic")) {
  1471. tilt = 0.125;
  1472. }
  1473. var interline = text.height * 1.5 + text.thickness;
  1474. var txt = text.text.split("\n");
  1475. // KiCad ignores last empty line.
  1476. if (txt[txt.length - 1] == '') txt.pop();
  1477. ctx.rotate(deg2rad(angle));
  1478. var offsety = (1 - text.justify[1]) / 2 * text.height; // One line offset
  1479. offsety -= (txt.length - 1) * (text.justify[1] + 1) / 2 * interline; // Multiline offset
  1480. for (var i in txt) {
  1481. var lineWidth = text.thickness + interline / 2 * tilt;
  1482. for (var j = 0; j < txt[i].length; j++) {
  1483. if (txt[i][j] == '\t') {
  1484. var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
  1485. lineWidth += fourSpaces - lineWidth % fourSpaces;
  1486. } else {
  1487. if (txt[i][j] == '~') {
  1488. j++;
  1489. if (j == txt[i].length)
  1490. break;
  1491. }
  1492. lineWidth += pcbdata.font_data[txt[i][j]].w * text.width;
  1493. }
  1494. }
  1495. var offsetx = -lineWidth * (text.justify[0] + 1) / 2;
  1496. var inOverbar = false;
  1497. for (var j = 0; j < txt[i].length; j++) {
  1498. if (config.kicad_text_formatting) {
  1499. if (txt[i][j] == '\t') {
  1500. var fourSpaces = 4 * pcbdata.font_data[' '].w * text.width;
  1501. offsetx += fourSpaces - offsetx % fourSpaces;
  1502. continue;
  1503. } else if (txt[i][j] == '~') {
  1504. j++;
  1505. if (j == txt[i].length)
  1506. break;
  1507. if (txt[i][j] != '~') {
  1508. inOverbar = !inOverbar;
  1509. }
  1510. }
  1511. }
  1512. var glyph = pcbdata.font_data[txt[i][j]];
  1513. if (inOverbar) {
  1514. var overbarStart = [offsetx, -text.height * 1.4 + offsety];
  1515. var overbarEnd = [offsetx + text.width * glyph.w, overbarStart[1]];
  1516. if (!lastHadOverbar) {
  1517. overbarStart[0] += text.height * 1.4 * tilt;
  1518. lastHadOverbar = true;
  1519. }
  1520. ctx.beginPath();
  1521. ctx.moveTo(...overbarStart);
  1522. ctx.lineTo(...overbarEnd);
  1523. ctx.stroke();
  1524. } else {
  1525. lastHadOverbar = false;
  1526. }
  1527. for (var line of glyph.l) {
  1528. ctx.beginPath();
  1529. ctx.moveTo(...calcFontPoint(line[0], text, offsetx, offsety, tilt));
  1530. for (var k = 1; k < line.length; k++) {
  1531. ctx.lineTo(...calcFontPoint(line[k], text, offsetx, offsety, tilt));
  1532. }
  1533. ctx.stroke();
  1534. }
  1535. offsetx += glyph.w * text.width;
  1536. }
  1537. offsety += interline;
  1538. }
  1539. ctx.restore();
  1540. }
  1541. function drawedge(ctx, scalefactor, edge, color) {
  1542. ctx.strokeStyle = color;
  1543. ctx.fillStyle = color;
  1544. ctx.lineWidth = Math.max(1 / scalefactor, edge.width);
  1545. ctx.lineCap = "round";
  1546. ctx.lineJoin = "round";
  1547. if ("svgpath" in edge) {
  1548. ctx.stroke(new Path2D(edge.svgpath));
  1549. } else {
  1550. ctx.beginPath();
  1551. if (edge.type == "segment") {
  1552. ctx.moveTo(...edge.start);
  1553. ctx.lineTo(...edge.end);
  1554. }
  1555. if (edge.type == "rect") {
  1556. ctx.moveTo(...edge.start);
  1557. ctx.lineTo(edge.start[0], edge.end[1]);
  1558. ctx.lineTo(...edge.end);
  1559. ctx.lineTo(edge.end[0], edge.start[1]);
  1560. ctx.lineTo(...edge.start);
  1561. }
  1562. if (edge.type == "arc") {
  1563. ctx.arc(
  1564. ...edge.start,
  1565. edge.radius,
  1566. deg2rad(edge.startangle),
  1567. deg2rad(edge.endangle));
  1568. }
  1569. if (edge.type == "circle") {
  1570. ctx.arc(
  1571. ...edge.start,
  1572. edge.radius,
  1573. 0, 2 * Math.PI);
  1574. ctx.closePath();
  1575. }
  1576. if (edge.type == "curve") {
  1577. ctx.moveTo(...edge.start);
  1578. ctx.bezierCurveTo(...edge.cpa, ...edge.cpb, ...edge.end);
  1579. }
  1580. if("filled" in edge && edge.filled)
  1581. ctx.fill();
  1582. else
  1583. ctx.stroke();
  1584. }
  1585. }
  1586. function getChamferedRectPath(size, radius, chamfpos, chamfratio) {
  1587. // chamfpos is a bitmask, left = 1, right = 2, bottom left = 4, bottom right = 8
  1588. var path = new Path2D();
  1589. var width = size[0];
  1590. var height = size[1];
  1591. var x = width * -0.5;
  1592. var y = height * -0.5;
  1593. var chamfOffset = Math.min(width, height) * chamfratio;
  1594. path.moveTo(x, 0);
  1595. if (chamfpos & 4) {
  1596. path.lineTo(x, y + height - chamfOffset);
  1597. path.lineTo(x + chamfOffset, y + height);
  1598. path.lineTo(0, y + height);
  1599. } else {
  1600. path.arcTo(x, y + height, x + width, y + height, radius);
  1601. }
  1602. if (chamfpos & 8) {
  1603. path.lineTo(x + width - chamfOffset, y + height);
  1604. path.lineTo(x + width, y + height - chamfOffset);
  1605. path.lineTo(x + width, 0);
  1606. } else {
  1607. path.arcTo(x + width, y + height, x + width, y, radius);
  1608. }
  1609. if (chamfpos & 2) {
  1610. path.lineTo(x + width, y + chamfOffset);
  1611. path.lineTo(x + width - chamfOffset, y);
  1612. path.lineTo(0, y);
  1613. } else {
  1614. path.arcTo(x + width, y, x, y, radius);
  1615. }
  1616. if (chamfpos & 1) {
  1617. path.lineTo(x + chamfOffset, y);
  1618. path.lineTo(x, y + chamfOffset);
  1619. path.lineTo(x, 0);
  1620. } else {
  1621. path.arcTo(x, y, x, y + height, radius);
  1622. }
  1623. path.closePath();
  1624. return path;
  1625. }
  1626. function getOblongPath(size) {
  1627. return getChamferedRectPath(size, Math.min(size[0], size[1]) / 2, 0, 0);
  1628. }
  1629. function getPolygonsPath(shape) {
  1630. if (shape.path2d) {
  1631. return shape.path2d;
  1632. }
  1633. if ("svgpath" in shape) {
  1634. shape.path2d = new Path2D(shape.svgpath);
  1635. } else {
  1636. var path = new Path2D();
  1637. for (var polygon of shape.polygons) {
  1638. path.moveTo(...polygon[0]);
  1639. for (var i = 1; i < polygon.length; i++) {
  1640. path.lineTo(...polygon[i]);
  1641. }
  1642. path.closePath();
  1643. }
  1644. shape.path2d = path;
  1645. }
  1646. return shape.path2d;
  1647. }
  1648. function drawPolygonShape(ctx, scalefactor, shape, color) {
  1649. ctx.save();
  1650. if (!("svgpath" in shape)) {
  1651. ctx.translate(...shape.pos);
  1652. ctx.rotate(deg2rad(-shape.angle));
  1653. }
  1654. if("filled" in shape && !shape.filled) {
  1655. ctx.strokeStyle = color;
  1656. ctx.lineWidth = Math.max(1 / scalefactor, shape.width);
  1657. ctx.lineCap = "round";
  1658. ctx.lineJoin = "round";
  1659. ctx.stroke(getPolygonsPath(shape));
  1660. } else {
  1661. ctx.fillStyle = color;
  1662. ctx.fill(getPolygonsPath(shape));
  1663. }
  1664. ctx.restore();
  1665. }
  1666. function drawDrawing(ctx, scalefactor, drawing, color) {
  1667. if (["segment", "arc", "circle", "curve", "rect"].includes(drawing.type)) {
  1668. drawedge(ctx, scalefactor, drawing, color);
  1669. } else if (drawing.type == "polygon") {
  1670. drawPolygonShape(ctx, scalefactor, drawing, color);
  1671. } else {
  1672. drawText(ctx, drawing, color);
  1673. }
  1674. }
  1675. function getCirclePath(radius) {
  1676. var path = new Path2D();
  1677. path.arc(0, 0, radius, 0, 2 * Math.PI);
  1678. path.closePath();
  1679. return path;
  1680. }
  1681. function getCachedPadPath(pad) {
  1682. if (!pad.path2d) {
  1683. // if path2d is not set, build one and cache it on pad object
  1684. if (pad.shape == "rect") {
  1685. pad.path2d = new Path2D();
  1686. pad.path2d.rect(...pad.size.map(c => -c * 0.5), ...pad.size);
  1687. } else if (pad.shape == "oval") {
  1688. pad.path2d = getOblongPath(pad.size);
  1689. } else if (pad.shape == "circle") {
  1690. pad.path2d = getCirclePath(pad.size[0] / 2);
  1691. } else if (pad.shape == "roundrect") {
  1692. pad.path2d = getChamferedRectPath(pad.size, pad.radius, 0, 0);
  1693. } else if (pad.shape == "chamfrect") {
  1694. pad.path2d = getChamferedRectPath(pad.size, pad.radius, pad.chamfpos, pad.chamfratio)
  1695. } else if (pad.shape == "custom") {
  1696. pad.path2d = getPolygonsPath(pad);
  1697. }
  1698. }
  1699. return pad.path2d;
  1700. }
  1701. function drawPad(ctx, pad, color, outline) {
  1702. ctx.save();
  1703. ctx.translate(...pad.pos);
  1704. ctx.rotate(-deg2rad(pad.angle));
  1705. if (pad.offset) {
  1706. ctx.translate(...pad.offset);
  1707. }
  1708. ctx.fillStyle = color;
  1709. ctx.strokeStyle = color;
  1710. var path = getCachedPadPath(pad);
  1711. if (outline) {
  1712. ctx.stroke(path);
  1713. } else {
  1714. ctx.fill(path);
  1715. }
  1716. ctx.restore();
  1717. }
  1718. function drawPadHole(ctx, pad, padHoleColor) {
  1719. if (pad.type != "th") return;
  1720. ctx.save();
  1721. ctx.translate(...pad.pos);
  1722. ctx.rotate(-deg2rad(pad.angle));
  1723. ctx.fillStyle = padHoleColor;
  1724. if (pad.drillshape == "oblong") {
  1725. ctx.fill(getOblongPath(pad.drillsize));
  1726. } else {
  1727. ctx.fill(getCirclePath(pad.drillsize[0] / 2));
  1728. }
  1729. ctx.restore();
  1730. }
  1731. function drawFootprint(ctx, layer, scalefactor, footprint, colors, highlight, outline) {
  1732. if (highlight) {
  1733. // draw bounding box
  1734. if (footprint.layer == layer) {
  1735. ctx.save();
  1736. ctx.globalAlpha = 0.2;
  1737. ctx.translate(...footprint.bbox.pos);
  1738. ctx.rotate(deg2rad(-footprint.bbox.angle));
  1739. ctx.translate(...footprint.bbox.relpos);
  1740. ctx.fillStyle = colors.pad;
  1741. ctx.fillRect(0, 0, ...footprint.bbox.size);
  1742. ctx.globalAlpha = 1;
  1743. ctx.strokeStyle = colors.pad;
  1744. ctx.lineWidth = 3 / scalefactor;
  1745. ctx.strokeRect(0, 0, ...footprint.bbox.size);
  1746. ctx.restore();
  1747. }
  1748. }
  1749. // draw drawings
  1750. for (var drawing of footprint.drawings) {
  1751. if (drawing.layer == layer) {
  1752. drawDrawing(ctx, scalefactor, drawing.drawing, colors.pad);
  1753. }
  1754. }
  1755. ctx.lineWidth = 3 / scalefactor;
  1756. // draw pads
  1757. if (settings.renderPads) {
  1758. for (var pad of footprint.pads) {
  1759. if (pad.layers.includes(layer)) {
  1760. drawPad(ctx, pad, colors.pad, outline);
  1761. if (pad.pin1 &&
  1762. (settings.highlightpin1 == "all" ||
  1763. settings.highlightpin1 == "selected" && highlight)) {
  1764. drawPad(ctx, pad, colors.outline, true);
  1765. }
  1766. }
  1767. }
  1768. for (var pad of footprint.pads) {
  1769. drawPadHole(ctx, pad, colors.padHole);
  1770. }
  1771. }
  1772. }
  1773. function drawEdgeCuts(canvas, scalefactor) {
  1774. var ctx = canvas.getContext("2d");
  1775. var edgecolor = getComputedStyle(topmostdiv).getPropertyValue('--pcb-edge-color');
  1776. for (var edge of pcbdata.edges) {
  1777. drawDrawing(ctx, scalefactor, edge, edgecolor);
  1778. }
  1779. }
  1780. function drawFootprints(canvas, layer, scalefactor, highlight) {
  1781. var ctx = canvas.getContext("2d");
  1782. ctx.lineWidth = 3 / scalefactor;
  1783. var style = getComputedStyle(topmostdiv);
  1784. var colors = {
  1785. pad: style.getPropertyValue('--pad-color'),
  1786. padHole: style.getPropertyValue('--pad-hole-color'),
  1787. outline: style.getPropertyValue('--pin1-outline-color'),
  1788. }
  1789. for (var i = 0; i < pcbdata.footprints.length; i++) {
  1790. var mod = pcbdata.footprints[i];
  1791. var outline = settings.renderDnpOutline && pcbdata.bom.skipped.includes(i);
  1792. var h = highlightedFootprints.includes(i);
  1793. var d = markedFootprints.has(i);
  1794. if (highlight) {
  1795. if(h && d) {
  1796. colors.pad = style.getPropertyValue('--pad-color-highlight-both');
  1797. colors.outline = style.getPropertyValue('--pin1-outline-color-highlight-both');
  1798. } else if (h) {
  1799. colors.pad = style.getPropertyValue('--pad-color-highlight');
  1800. colors.outline = style.getPropertyValue('--pin1-outline-color-highlight');
  1801. } else if (d) {
  1802. colors.pad = style.getPropertyValue('--pad-color-highlight-marked');
  1803. colors.outline = style.getPropertyValue('--pin1-outline-color-highlight-marked');
  1804. }
  1805. }
  1806. if( h || d || !highlight) {
  1807. drawFootprint(ctx, layer, scalefactor, mod, colors, highlight, outline);
  1808. }
  1809. }
  1810. }
  1811. function drawBgLayer(layername, canvas, layer, scalefactor, edgeColor, polygonColor, textColor) {
  1812. var ctx = canvas.getContext("2d");
  1813. for (var d of pcbdata.drawings[layername][layer]) {
  1814. if (["segment", "arc", "circle", "curve", "rect"].includes(d.type)) {
  1815. drawedge(ctx, scalefactor, d, edgeColor);
  1816. } else if (d.type == "polygon") {
  1817. drawPolygonShape(ctx, scalefactor, d, polygonColor);
  1818. } else {
  1819. drawText(ctx, d, textColor);
  1820. }
  1821. }
  1822. }
  1823. function drawTracks(canvas, layer, defaultColor, highlight) {
  1824. ctx = canvas.getContext("2d");
  1825. ctx.lineCap = "round";
  1826. var hasHole = (track) => (
  1827. 'drillsize' in track &&
  1828. track.start[0] == track.end[0] &&
  1829. track.start[1] == track.end[1]);
  1830. // First draw tracks and tented vias
  1831. for (var track of pcbdata.tracks[layer]) {
  1832. if (highlight && highlightedNet != track.net) continue;
  1833. if (!hasHole(track)) {
  1834. ctx.strokeStyle = highlight ? defaultColor : settings.netColors[track.net] || defaultColor;
  1835. ctx.lineWidth = track.width;
  1836. ctx.beginPath();
  1837. if ('radius' in track) {
  1838. ctx.arc(
  1839. ...track.center,
  1840. track.radius,
  1841. deg2rad(track.startangle),
  1842. deg2rad(track.endangle));
  1843. } else {
  1844. ctx.moveTo(...track.start);
  1845. ctx.lineTo(...track.end);
  1846. }
  1847. ctx.stroke();
  1848. }
  1849. }
  1850. // Second pass to draw untented vias
  1851. var style = getComputedStyle(topmostdiv);
  1852. var holeColor = style.getPropertyValue('--pad-hole-color')
  1853. for (var track of pcbdata.tracks[layer]) {
  1854. if (highlight && highlightedNet != track.net) continue;
  1855. if (hasHole(track)) {
  1856. ctx.strokeStyle = highlight ? defaultColor : settings.netColors[track.net] || defaultColor;
  1857. ctx.lineWidth = track.width;
  1858. ctx.beginPath();
  1859. ctx.moveTo(...track.start);
  1860. ctx.lineTo(...track.end);
  1861. ctx.stroke();
  1862. ctx.strokeStyle = holeColor;
  1863. ctx.lineWidth = track.drillsize;
  1864. ctx.lineTo(...track.end);
  1865. ctx.stroke();
  1866. }
  1867. }
  1868. }
  1869. function drawZones(canvas, layer, defaultColor, highlight) {
  1870. ctx = canvas.getContext("2d");
  1871. ctx.lineJoin = "round";
  1872. for (var zone of pcbdata.zones[layer]) {
  1873. if (highlight && highlightedNet != zone.net) continue;
  1874. ctx.strokeStyle = highlight ? defaultColor : settings.netColors[zone.net] || defaultColor;
  1875. ctx.fillStyle = highlight ? defaultColor : settings.netColors[zone.net] || defaultColor;
  1876. if (!zone.path2d) {
  1877. zone.path2d = getPolygonsPath(zone);
  1878. }
  1879. ctx.fill(zone.path2d, zone.fillrule || "nonzero");
  1880. if (zone.width > 0) {
  1881. ctx.lineWidth = zone.width;
  1882. ctx.stroke(zone.path2d);
  1883. }
  1884. }
  1885. }
  1886. function clearCanvas(canvas, color = null) {
  1887. var ctx = canvas.getContext("2d");
  1888. ctx.save();
  1889. ctx.setTransform(1, 0, 0, 1, 0, 0);
  1890. if (color) {
  1891. ctx.fillStyle = color;
  1892. ctx.fillRect(0, 0, canvas.width, canvas.height);
  1893. } else {
  1894. if (!window.matchMedia("print").matches)
  1895. ctx.clearRect(0, 0, canvas.width, canvas.height);
  1896. }
  1897. ctx.restore();
  1898. }
  1899. function drawNets(canvas, layer, highlight) {
  1900. var style = getComputedStyle(topmostdiv);
  1901. if (settings.renderZones) {
  1902. var zoneColor = style.getPropertyValue(highlight ? '--zone-color-highlight' : '--zone-color');
  1903. drawZones(canvas, layer, zoneColor, highlight);
  1904. }
  1905. if (settings.renderTracks) {
  1906. var trackColor = style.getPropertyValue(highlight ? '--track-color-highlight' : '--track-color');
  1907. drawTracks(canvas, layer, trackColor, highlight);
  1908. }
  1909. if (highlight && settings.renderPads) {
  1910. var padColor = style.getPropertyValue('--pad-color-highlight');
  1911. var padHoleColor = style.getPropertyValue('--pad-hole-color');
  1912. var ctx = canvas.getContext("2d");
  1913. for (var footprint of pcbdata.footprints) {
  1914. // draw pads
  1915. var padDrawn = false;
  1916. for (var pad of footprint.pads) {
  1917. if (highlightedNet != pad.net) continue;
  1918. if (pad.layers.includes(layer)) {
  1919. drawPad(ctx, pad, padColor, false);
  1920. padDrawn = true;
  1921. }
  1922. }
  1923. if (padDrawn) {
  1924. // redraw all pad holes because some pads may overlap
  1925. for (var pad of footprint.pads) {
  1926. drawPadHole(ctx, pad, padHoleColor);
  1927. }
  1928. }
  1929. }
  1930. }
  1931. }
  1932. function drawHighlightsOnLayer(canvasdict, clear = true) {
  1933. if (clear) {
  1934. clearCanvas(canvasdict.highlight);
  1935. }
  1936. if (markedFootprints.size > 0 || highlightedFootprints.length > 0) {
  1937. drawFootprints(canvasdict.highlight, canvasdict.layer,
  1938. canvasdict.transform.s * canvasdict.transform.zoom, true);
  1939. }
  1940. if (highlightedNet !== null) {
  1941. drawNets(canvasdict.highlight, canvasdict.layer, true);
  1942. }
  1943. }
  1944. function drawHighlights() {
  1945. drawHighlightsOnLayer(allcanvas.front);
  1946. drawHighlightsOnLayer(allcanvas.back);
  1947. }
  1948. function drawBackground(canvasdict, clear = true) {
  1949. if (clear) {
  1950. clearCanvas(canvasdict.bg);
  1951. clearCanvas(canvasdict.fab);
  1952. clearCanvas(canvasdict.silk);
  1953. }
  1954. drawNets(canvasdict.bg, canvasdict.layer, false);
  1955. drawFootprints(canvasdict.bg, canvasdict.layer,
  1956. canvasdict.transform.s * canvasdict.transform.zoom, false);
  1957. drawEdgeCuts(canvasdict.bg, canvasdict.transform.s * canvasdict.transform.zoom);
  1958. var style = getComputedStyle(topmostdiv);
  1959. var edgeColor = style.getPropertyValue('--silkscreen-edge-color');
  1960. var polygonColor = style.getPropertyValue('--silkscreen-polygon-color');
  1961. var textColor = style.getPropertyValue('--silkscreen-text-color');
  1962. if (settings.renderSilkscreen) {
  1963. drawBgLayer(
  1964. "silkscreen", canvasdict.silk, canvasdict.layer,
  1965. canvasdict.transform.s * canvasdict.transform.zoom,
  1966. edgeColor, polygonColor, textColor);
  1967. }
  1968. edgeColor = style.getPropertyValue('--fabrication-edge-color');
  1969. polygonColor = style.getPropertyValue('--fabrication-polygon-color');
  1970. textColor = style.getPropertyValue('--fabrication-text-color');
  1971. if (settings.renderFabrication) {
  1972. drawBgLayer(
  1973. "fabrication", canvasdict.fab, canvasdict.layer,
  1974. canvasdict.transform.s * canvasdict.transform.zoom,
  1975. edgeColor, polygonColor, textColor);
  1976. }
  1977. }
  1978. function prepareCanvas(canvas, flip, transform) {
  1979. var ctx = canvas.getContext("2d");
  1980. ctx.setTransform(1, 0, 0, 1, 0, 0);
  1981. ctx.scale(transform.zoom, transform.zoom);
  1982. ctx.translate(transform.panx, transform.pany);
  1983. if (flip) {
  1984. ctx.scale(-1, 1);
  1985. }
  1986. ctx.translate(transform.x, transform.y);
  1987. ctx.rotate(deg2rad(settings.boardRotation + (flip && settings.offsetBackRotation ? - 180 : 0)));
  1988. ctx.scale(transform.s, transform.s);
  1989. }
  1990. function prepareLayer(canvasdict) {
  1991. var flip = (canvasdict.layer === "B");
  1992. for (var c of ["bg", "fab", "silk", "highlight"]) {
  1993. prepareCanvas(canvasdict[c], flip, canvasdict.transform);
  1994. }
  1995. }
  1996. function rotateVector(v, angle) {
  1997. angle = deg2rad(angle);
  1998. return [
  1999. v[0] * Math.cos(angle) - v[1] * Math.sin(angle),
  2000. v[0] * Math.sin(angle) + v[1] * Math.cos(angle)
  2001. ];
  2002. }
  2003. function applyRotation(bbox, flip) {
  2004. var corners = [
  2005. [bbox.minx, bbox.miny],
  2006. [bbox.minx, bbox.maxy],
  2007. [bbox.maxx, bbox.miny],
  2008. [bbox.maxx, bbox.maxy],
  2009. ];
  2010. corners = corners.map((v) => rotateVector(v, settings.boardRotation + (flip && settings.offsetBackRotation ? - 180 : 0)));
  2011. return {
  2012. minx: corners.reduce((a, v) => Math.min(a, v[0]), Infinity),
  2013. miny: corners.reduce((a, v) => Math.min(a, v[1]), Infinity),
  2014. maxx: corners.reduce((a, v) => Math.max(a, v[0]), -Infinity),
  2015. maxy: corners.reduce((a, v) => Math.max(a, v[1]), -Infinity),
  2016. }
  2017. }
  2018. function recalcLayerScale(layerdict, width, height) {
  2019. var flip = (layerdict.layer === "B");
  2020. var bbox = applyRotation(pcbdata.edges_bbox, flip);
  2021. var scalefactor = 0.98 * Math.min(
  2022. width / (bbox.maxx - bbox.minx),
  2023. height / (bbox.maxy - bbox.miny)
  2024. );
  2025. if (scalefactor < 0.1) {
  2026. scalefactor = 1;
  2027. }
  2028. layerdict.transform.s = scalefactor;
  2029. if (flip) {
  2030. layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor + width) * 0.5;
  2031. } else {
  2032. layerdict.transform.x = -((bbox.maxx + bbox.minx) * scalefactor - width) * 0.5;
  2033. }
  2034. layerdict.transform.y = -((bbox.maxy + bbox.miny) * scalefactor - height) * 0.5;
  2035. for (var c of ["bg", "fab", "silk", "highlight"]) {
  2036. canvas = layerdict[c];
  2037. canvas.width = width;
  2038. canvas.height = height;
  2039. canvas.style.width = (width / devicePixelRatio) + "px";
  2040. canvas.style.height = (height / devicePixelRatio) + "px";
  2041. }
  2042. }
  2043. function redrawCanvas(layerdict) {
  2044. prepareLayer(layerdict);
  2045. drawBackground(layerdict);
  2046. drawHighlightsOnLayer(layerdict);
  2047. }
  2048. function resizeCanvas(layerdict) {
  2049. var canvasdivid = {
  2050. "F": "frontcanvas",
  2051. "B": "backcanvas"
  2052. } [layerdict.layer];
  2053. var width = document.getElementById(canvasdivid).clientWidth * devicePixelRatio;
  2054. var height = document.getElementById(canvasdivid).clientHeight * devicePixelRatio;
  2055. recalcLayerScale(layerdict, width, height);
  2056. redrawCanvas(layerdict);
  2057. }
  2058. function resizeAll() {
  2059. resizeCanvas(allcanvas.front);
  2060. resizeCanvas(allcanvas.back);
  2061. }
  2062. function pointWithinDistanceToSegment(x, y, x1, y1, x2, y2, d) {
  2063. var A = x - x1;
  2064. var B = y - y1;
  2065. var C = x2 - x1;
  2066. var D = y2 - y1;
  2067. var dot = A * C + B * D;
  2068. var len_sq = C * C + D * D;
  2069. var dx, dy;
  2070. if (len_sq == 0) {
  2071. // start and end of the segment coincide
  2072. dx = x - x1;
  2073. dy = y - y1;
  2074. } else {
  2075. var param = dot / len_sq;
  2076. var xx, yy;
  2077. if (param < 0) {
  2078. xx = x1;
  2079. yy = y1;
  2080. } else if (param > 1) {
  2081. xx = x2;
  2082. yy = y2;
  2083. } else {
  2084. xx = x1 + param * C;
  2085. yy = y1 + param * D;
  2086. }
  2087. dx = x - xx;
  2088. dy = y - yy;
  2089. }
  2090. return dx * dx + dy * dy <= d * d;
  2091. }
  2092. function modulo(n, mod) {
  2093. return ((n % mod) + mod) % mod;
  2094. }
  2095. function pointWithinDistanceToArc(x, y, xc, yc, radius, startangle, endangle, d) {
  2096. var dx = x - xc;
  2097. var dy = y - yc;
  2098. var r_sq = dx * dx + dy * dy;
  2099. var rmin = Math.max(0, radius - d);
  2100. var rmax = radius + d;
  2101. if (r_sq < rmin * rmin || r_sq > rmax * rmax)
  2102. return false;
  2103. var angle1 = modulo(deg2rad(startangle), 2 * Math.PI);
  2104. var dx1 = xc + radius * Math.cos(angle1) - x;
  2105. var dy1 = yc + radius * Math.sin(angle1) - y;
  2106. if (dx1 * dx1 + dy1 * dy1 <= d * d)
  2107. return true;
  2108. var angle2 = modulo(deg2rad(endangle), 2 * Math.PI);
  2109. var dx2 = xc + radius * Math.cos(angle2) - x;
  2110. var dy2 = yc + radius * Math.sin(angle2) - y;
  2111. if (dx2 * dx2 + dy2 * dy2 <= d * d)
  2112. return true;
  2113. var angle = modulo(Math.atan2(dy, dx), 2 * Math.PI);
  2114. if (angle1 > angle2)
  2115. return (angle >= angle2 || angle <= angle1);
  2116. else
  2117. return (angle >= angle1 && angle <= angle2);
  2118. }
  2119. function pointWithinPad(x, y, pad) {
  2120. var v = [x - pad.pos[0], y - pad.pos[1]];
  2121. v = rotateVector(v, pad.angle);
  2122. if (pad.offset) {
  2123. v[0] -= pad.offset[0];
  2124. v[1] -= pad.offset[1];
  2125. }
  2126. return emptyContext2d.isPointInPath(getCachedPadPath(pad), ...v);
  2127. }
  2128. function netHitScan(layer, x, y) {
  2129. // Check track segments
  2130. if (settings.renderTracks && pcbdata.tracks) {
  2131. for (var track of pcbdata.tracks[layer]) {
  2132. if ('radius' in track) {
  2133. if (pointWithinDistanceToArc(x, y, ...track.center, track.radius, track.startangle, track.endangle, track.width / 2)) {
  2134. return track.net;
  2135. }
  2136. } else {
  2137. if (pointWithinDistanceToSegment(x, y, ...track.start, ...track.end, track.width / 2)) {
  2138. return track.net;
  2139. }
  2140. }
  2141. }
  2142. }
  2143. // Check pads
  2144. if (settings.renderPads) {
  2145. for (var footprint of pcbdata.footprints) {
  2146. for (var pad of footprint.pads) {
  2147. if (pad.layers.includes(layer) && pointWithinPad(x, y, pad)) {
  2148. return pad.net;
  2149. }
  2150. }
  2151. }
  2152. }
  2153. return null;
  2154. }
  2155. function pointWithinFootprintBbox(x, y, bbox) {
  2156. var v = [x - bbox.pos[0], y - bbox.pos[1]];
  2157. v = rotateVector(v, bbox.angle);
  2158. return bbox.relpos[0] <= v[0] && v[0] <= bbox.relpos[0] + bbox.size[0] &&
  2159. bbox.relpos[1] <= v[1] && v[1] <= bbox.relpos[1] + bbox.size[1];
  2160. }
  2161. function bboxHitScan(layer, x, y) {
  2162. var result = [];
  2163. for (var i = 0; i < pcbdata.footprints.length; i++) {
  2164. var footprint = pcbdata.footprints[i];
  2165. if (footprint.layer == layer) {
  2166. if (pointWithinFootprintBbox(x, y, footprint.bbox)) {
  2167. result.push(i);
  2168. }
  2169. }
  2170. }
  2171. return result;
  2172. }
  2173. function handlePointerDown(e, layerdict) {
  2174. if (e.button != 0 && e.button != 1) {
  2175. return;
  2176. }
  2177. e.preventDefault();
  2178. e.stopPropagation();
  2179. if (!e.hasOwnProperty("offsetX")) {
  2180. // The polyfill doesn't set this properly
  2181. e.offsetX = e.pageX - e.currentTarget.offsetLeft;
  2182. e.offsetY = e.pageY - e.currentTarget.offsetTop;
  2183. }
  2184. layerdict.pointerStates[e.pointerId] = {
  2185. distanceTravelled: 0,
  2186. lastX: e.offsetX,
  2187. lastY: e.offsetY,
  2188. downTime: Date.now(),
  2189. };
  2190. }
  2191. function handleMouseClick(e, layerdict) {
  2192. if (!e.hasOwnProperty("offsetX")) {
  2193. // The polyfill doesn't set this properly
  2194. e.offsetX = e.pageX - e.currentTarget.offsetLeft;
  2195. e.offsetY = e.pageY - e.currentTarget.offsetTop;
  2196. }
  2197. var x = e.offsetX;
  2198. var y = e.offsetY;
  2199. var t = layerdict.transform;
  2200. var flip = layerdict.layer === "B";
  2201. if (flip) {
  2202. x = (devicePixelRatio * x / t.zoom - t.panx + t.x) / -t.s;
  2203. } else {
  2204. x = (devicePixelRatio * x / t.zoom - t.panx - t.x) / t.s;
  2205. }
  2206. y = (devicePixelRatio * y / t.zoom - t.y - t.pany) / t.s;
  2207. var v = rotateVector([x, y], -settings.boardRotation + (flip && settings.offsetBackRotation ? - 180 : 0));
  2208. if ("nets" in pcbdata) {
  2209. var net = netHitScan(layerdict.layer, ...v);
  2210. if (net !== highlightedNet) {
  2211. netClicked(net);
  2212. }
  2213. }
  2214. if (highlightedNet === null) {
  2215. var footprints = bboxHitScan(layerdict.layer, ...v);
  2216. if (footprints.length > 0) {
  2217. footprintsClicked(footprints);
  2218. }
  2219. }
  2220. }
  2221. function handlePointerLeave(e, layerdict) {
  2222. e.preventDefault();
  2223. e.stopPropagation();
  2224. if (!settings.redrawOnDrag) {
  2225. redrawCanvas(layerdict);
  2226. }
  2227. delete layerdict.pointerStates[e.pointerId];
  2228. }
  2229. function resetTransform(layerdict) {
  2230. layerdict.transform.panx = 0;
  2231. layerdict.transform.pany = 0;
  2232. layerdict.transform.zoom = 1;
  2233. redrawCanvas(layerdict);
  2234. }
  2235. function handlePointerUp(e, layerdict) {
  2236. if (!e.hasOwnProperty("offsetX")) {
  2237. // The polyfill doesn't set this properly
  2238. e.offsetX = e.pageX - e.currentTarget.offsetLeft;
  2239. e.offsetY = e.pageY - e.currentTarget.offsetTop;
  2240. }
  2241. e.preventDefault();
  2242. e.stopPropagation();
  2243. if (e.button == 2) {
  2244. // Reset pan and zoom on right click.
  2245. resetTransform(layerdict);
  2246. layerdict.anotherPointerTapped = false;
  2247. return;
  2248. }
  2249. // We haven't necessarily had a pointermove event since the interaction started, so make sure we update this now
  2250. var ptr = layerdict.pointerStates[e.pointerId];
  2251. ptr.distanceTravelled += Math.abs(e.offsetX - ptr.lastX) + Math.abs(e.offsetY - ptr.lastY);
  2252. if (e.button == 0 && ptr.distanceTravelled < 10 && Date.now() - ptr.downTime <= 500) {
  2253. if (Object.keys(layerdict.pointerStates).length == 1) {
  2254. if (layerdict.anotherPointerTapped) {
  2255. // This is the second pointer coming off of a two-finger tap
  2256. resetTransform(layerdict);
  2257. } else {
  2258. // This is just a regular tap
  2259. handleMouseClick(e, layerdict);
  2260. }
  2261. layerdict.anotherPointerTapped = false;
  2262. } else {
  2263. // This is the first finger coming off of what could become a two-finger tap
  2264. layerdict.anotherPointerTapped = true;
  2265. }
  2266. } else {
  2267. if (!settings.redrawOnDrag) {
  2268. redrawCanvas(layerdict);
  2269. }
  2270. layerdict.anotherPointerTapped = false;
  2271. }
  2272. delete layerdict.pointerStates[e.pointerId];
  2273. }
  2274. function handlePointerMove(e, layerdict) {
  2275. if (!layerdict.pointerStates.hasOwnProperty(e.pointerId)) {
  2276. return;
  2277. }
  2278. e.preventDefault();
  2279. e.stopPropagation();
  2280. if (!e.hasOwnProperty("offsetX")) {
  2281. // The polyfill doesn't set this properly
  2282. e.offsetX = e.pageX - e.currentTarget.offsetLeft;
  2283. e.offsetY = e.pageY - e.currentTarget.offsetTop;
  2284. }
  2285. var thisPtr = layerdict.pointerStates[e.pointerId];
  2286. var dx = e.offsetX - thisPtr.lastX;
  2287. var dy = e.offsetY - thisPtr.lastY;
  2288. // If this number is low on pointer up, we count the action as a click
  2289. thisPtr.distanceTravelled += Math.abs(dx) + Math.abs(dy);
  2290. if (Object.keys(layerdict.pointerStates).length == 1) {
  2291. // This is a simple drag
  2292. layerdict.transform.panx += devicePixelRatio * dx / layerdict.transform.zoom;
  2293. layerdict.transform.pany += devicePixelRatio * dy / layerdict.transform.zoom;
  2294. } else if (Object.keys(layerdict.pointerStates).length == 2) {
  2295. var otherPtr = Object.values(layerdict.pointerStates).filter((ptr) => ptr != thisPtr)[0];
  2296. var oldDist = Math.sqrt(Math.pow(thisPtr.lastX - otherPtr.lastX, 2) + Math.pow(thisPtr.lastY - otherPtr.lastY, 2));
  2297. var newDist = Math.sqrt(Math.pow(e.offsetX - otherPtr.lastX, 2) + Math.pow(e.offsetY - otherPtr.lastY, 2));
  2298. var scaleFactor = newDist / oldDist;
  2299. if (scaleFactor != NaN) {
  2300. layerdict.transform.zoom *= scaleFactor;
  2301. var zoomd = (1 - scaleFactor) / layerdict.transform.zoom;
  2302. layerdict.transform.panx += devicePixelRatio * otherPtr.lastX * zoomd;
  2303. layerdict.transform.pany += devicePixelRatio * otherPtr.lastY * zoomd;
  2304. }
  2305. }
  2306. thisPtr.lastX = e.offsetX;
  2307. thisPtr.lastY = e.offsetY;
  2308. if (settings.redrawOnDrag) {
  2309. redrawCanvas(layerdict);
  2310. }
  2311. }
  2312. function handleMouseWheel(e, layerdict) {
  2313. e.preventDefault();
  2314. e.stopPropagation();
  2315. var t = layerdict.transform;
  2316. var wheeldelta = e.deltaY;
  2317. if (e.deltaMode == 1) {
  2318. // FF only, scroll by lines
  2319. wheeldelta *= 30;
  2320. } else if (e.deltaMode == 2) {
  2321. wheeldelta *= 300;
  2322. }
  2323. var m = Math.pow(1.1, -wheeldelta / 40);
  2324. // Limit amount of zoom per tick.
  2325. if (m > 2) {
  2326. m = 2;
  2327. } else if (m < 0.5) {
  2328. m = 0.5;
  2329. }
  2330. t.zoom *= m;
  2331. var zoomd = (1 - m) / t.zoom;
  2332. t.panx += devicePixelRatio * e.offsetX * zoomd;
  2333. t.pany += devicePixelRatio * e.offsetY * zoomd;
  2334. redrawCanvas(layerdict);
  2335. }
  2336. function addMouseHandlers(div, layerdict) {
  2337. div.addEventListener("pointerdown", function(e) {
  2338. handlePointerDown(e, layerdict);
  2339. });
  2340. div.addEventListener("pointermove", function(e) {
  2341. handlePointerMove(e, layerdict);
  2342. });
  2343. div.addEventListener("pointerup", function(e) {
  2344. handlePointerUp(e, layerdict);
  2345. });
  2346. var pointerleave = function(e) {
  2347. handlePointerLeave(e, layerdict);
  2348. }
  2349. div.addEventListener("pointercancel", pointerleave);
  2350. div.addEventListener("pointerleave", pointerleave);
  2351. div.addEventListener("pointerout", pointerleave);
  2352. div.onwheel = function(e) {
  2353. handleMouseWheel(e, layerdict);
  2354. }
  2355. for (var element of [div, layerdict.bg, layerdict.fab, layerdict.silk, layerdict.highlight]) {
  2356. element.addEventListener("contextmenu", function(e) {
  2357. e.preventDefault();
  2358. }, false);
  2359. }
  2360. }
  2361. function setRedrawOnDrag(value) {
  2362. settings.redrawOnDrag = value;
  2363. writeStorage("redrawOnDrag", value);
  2364. }
  2365. function setBoardRotation(value) {
  2366. settings.boardRotation = value * 5;
  2367. writeStorage("boardRotation", settings.boardRotation);
  2368. document.getElementById("rotationDegree").textContent = settings.boardRotation;
  2369. resizeAll();
  2370. }
  2371. function setOffsetBackRotation(value) {
  2372. settings.offsetBackRotation = value;
  2373. writeStorage("offsetBackRotation", value);
  2374. resizeAll();
  2375. }
  2376. function initRender() {
  2377. allcanvas = {
  2378. front: {
  2379. transform: {
  2380. x: 0,
  2381. y: 0,
  2382. s: 1,
  2383. panx: 0,
  2384. pany: 0,
  2385. zoom: 1,
  2386. },
  2387. pointerStates: {},
  2388. anotherPointerTapped: false,
  2389. bg: document.getElementById("F_bg"),
  2390. fab: document.getElementById("F_fab"),
  2391. silk: document.getElementById("F_slk"),
  2392. highlight: document.getElementById("F_hl"),
  2393. layer: "F",
  2394. },
  2395. back: {
  2396. transform: {
  2397. x: 0,
  2398. y: 0,
  2399. s: 1,
  2400. panx: 0,
  2401. pany: 0,
  2402. zoom: 1,
  2403. },
  2404. pointerStates: {},
  2405. anotherPointerTapped: false,
  2406. bg: document.getElementById("B_bg"),
  2407. fab: document.getElementById("B_fab"),
  2408. silk: document.getElementById("B_slk"),
  2409. highlight: document.getElementById("B_hl"),
  2410. layer: "B",
  2411. }
  2412. };
  2413. addMouseHandlers(document.getElementById("frontcanvas"), allcanvas.front);
  2414. addMouseHandlers(document.getElementById("backcanvas"), allcanvas.back);
  2415. }
  2416. ///////////////////////////////////////////////
  2417. ///////////////////////////////////////////////
  2418. /*
  2419. * Table reordering via Drag'n'Drop
  2420. * Inspired by: https://htmldom.dev/drag-and-drop-table-column
  2421. */
  2422. function setBomHandlers() {
  2423. const bom = document.getElementById('bomtable');
  2424. let dragName;
  2425. let placeHolderElements;
  2426. let draggingElement;
  2427. let forcePopulation;
  2428. let xOffset;
  2429. let yOffset;
  2430. let wasDragged;
  2431. const mouseUpHandler = function(e) {
  2432. // Delete dragging element
  2433. draggingElement.remove();
  2434. // Make BOM selectable again
  2435. bom.style.removeProperty("userSelect");
  2436. // Remove listeners
  2437. document.removeEventListener('mousemove', mouseMoveHandler);
  2438. document.removeEventListener('mouseup', mouseUpHandler);
  2439. if (wasDragged) {
  2440. // Redraw whole BOM
  2441. populateBomTable();
  2442. }
  2443. }
  2444. const mouseMoveHandler = function(e) {
  2445. // Notice the dragging
  2446. wasDragged = true;
  2447. // Make the dragged element visible
  2448. draggingElement.style.removeProperty("display");
  2449. // Set elements position to mouse position
  2450. draggingElement.style.left = `${e.screenX - xOffset}px`;
  2451. draggingElement.style.top = `${e.screenY - yOffset}px`;
  2452. // Forced redrawing of BOM table
  2453. if (forcePopulation) {
  2454. forcePopulation = false;
  2455. // Copy array
  2456. phe = Array.from(placeHolderElements);
  2457. // populate BOM table again
  2458. populateBomHeader(dragName, phe);
  2459. populateBomBody(dragName, phe);
  2460. }
  2461. // Set up array of hidden columns
  2462. var hiddenColumns = Array.from(settings.hiddenColumns);
  2463. // In the ungrouped mode, quantity don't exist
  2464. if (settings.bommode === "ungrouped")
  2465. hiddenColumns.push("Quantity");
  2466. // If no checkbox fields can be found, we consider them hidden
  2467. if (settings.checkboxes.length == 0)
  2468. hiddenColumns.push("checkboxes");
  2469. // Get table headers and group them into checkboxes, extrafields and normal headers
  2470. const bh = document.getElementById("bomhead");
  2471. headers = Array.from(bh.querySelectorAll("th"))
  2472. headers.shift() // numCol is not part of the columnOrder
  2473. headerGroups = []
  2474. lastCompoundClass = null;
  2475. for (i = 0; i < settings.columnOrder.length; i++) {
  2476. cElem = settings.columnOrder[i];
  2477. if (hiddenColumns.includes(cElem)) {
  2478. // Hidden columns appear as a dummy element
  2479. headerGroups.push([]);
  2480. continue;
  2481. }
  2482. elem = headers.filter(e => getColumnOrderName(e) === cElem)[0];
  2483. if (elem.classList.contains("bom-checkbox")) {
  2484. if (lastCompoundClass === "bom-checkbox") {
  2485. cbGroup = headerGroups.pop();
  2486. cbGroup.push(elem);
  2487. headerGroups.push(cbGroup);
  2488. } else {
  2489. lastCompoundClass = "bom-checkbox";
  2490. headerGroups.push([elem])
  2491. }
  2492. } else {
  2493. headerGroups.push([elem])
  2494. }
  2495. }
  2496. // Copy settings.columnOrder
  2497. var columns = Array.from(settings.columnOrder)
  2498. // Set up array with indices of hidden columns
  2499. var hiddenIndices = hiddenColumns.map(e => settings.columnOrder.indexOf(e));
  2500. var dragIndex = columns.indexOf(dragName);
  2501. var swapIndex = dragIndex;
  2502. var swapDone = false;
  2503. // Check if the current dragged element is swapable with the left or right element
  2504. if (dragIndex > 0) {
  2505. // Get left headers boundingbox
  2506. swapIndex = dragIndex - 1;
  2507. while (hiddenIndices.includes(swapIndex) && swapIndex > 0)
  2508. swapIndex--;
  2509. if (!hiddenIndices.includes(swapIndex)) {
  2510. box = getBoundingClientRectFromMultiple(headerGroups[swapIndex]);
  2511. if (e.clientX < box.left + window.scrollX + (box.width / 2)) {
  2512. swapElement = columns[dragIndex];
  2513. columns.splice(dragIndex, 1);
  2514. columns.splice(swapIndex, 0, swapElement);
  2515. forcePopulation = true;
  2516. swapDone = true;
  2517. }
  2518. }
  2519. }
  2520. if ((!swapDone) && dragIndex < headerGroups.length - 1) {
  2521. // Get right headers boundingbox
  2522. swapIndex = dragIndex + 1;
  2523. while (hiddenIndices.includes(swapIndex))
  2524. swapIndex++;
  2525. if (swapIndex < headerGroups.length) {
  2526. box = getBoundingClientRectFromMultiple(headerGroups[swapIndex]);
  2527. if (e.clientX > box.left + window.scrollX + (box.width / 2)) {
  2528. swapElement = columns[dragIndex];
  2529. columns.splice(dragIndex, 1);
  2530. columns.splice(swapIndex, 0, swapElement);
  2531. forcePopulation = true;
  2532. swapDone = true;
  2533. }
  2534. }
  2535. }
  2536. // Write back change to storage
  2537. if (swapDone) {
  2538. settings.columnOrder = columns
  2539. writeStorage("columnOrder", JSON.stringify(columns));
  2540. }
  2541. }
  2542. const mouseDownHandler = function(e) {
  2543. var target = e.target;
  2544. if (target.tagName.toLowerCase() != "td")
  2545. target = target.parentElement;
  2546. // Used to check if a dragging has ever happened
  2547. wasDragged = false;
  2548. // Create new element which will be displayed as the dragged column
  2549. draggingElement = document.createElement("div")
  2550. draggingElement.classList.add("dragging");
  2551. draggingElement.style.display = "none";
  2552. draggingElement.style.position = "absolute";
  2553. draggingElement.style.overflow = "hidden";
  2554. // Get bomhead and bombody elements
  2555. const bh = document.getElementById("bomhead");
  2556. const bb = document.getElementById("bombody");
  2557. // Get all compound headers for the current column
  2558. var compoundHeaders;
  2559. if (target.classList.contains("bom-checkbox")) {
  2560. compoundHeaders = Array.from(bh.querySelectorAll("th.bom-checkbox"));
  2561. } else {
  2562. compoundHeaders = [target];
  2563. }
  2564. // Create new table which will display the column
  2565. var newTable = document.createElement("table");
  2566. newTable.classList.add("bom");
  2567. newTable.style.background = "white";
  2568. draggingElement.append(newTable);
  2569. // Create new header element
  2570. var newHeader = document.createElement("thead");
  2571. newTable.append(newHeader);
  2572. // Set up array for storing all placeholder elements
  2573. placeHolderElements = [];
  2574. // Add all compound headers to the new thead element and placeholders
  2575. compoundHeaders.forEach(function(h) {
  2576. clone = cloneElementWithDimensions(h);
  2577. newHeader.append(clone);
  2578. placeHolderElements.push(clone);
  2579. });
  2580. // Create new body element
  2581. var newBody = document.createElement("tbody");
  2582. newTable.append(newBody);
  2583. // Get indices for compound headers
  2584. var idxs = compoundHeaders.map(e => getBomTableHeaderIndex(e));
  2585. // For each row in the BOM body...
  2586. var rows = bb.querySelectorAll("tr");
  2587. rows.forEach(function(row) {
  2588. // ..get the cells for the compound column
  2589. const tds = row.querySelectorAll("td");
  2590. var copytds = idxs.map(i => tds[i]);
  2591. // Add them to the new element and the placeholders
  2592. var newRow = document.createElement("tr");
  2593. copytds.forEach(function(td) {
  2594. clone = cloneElementWithDimensions(td);
  2595. newRow.append(clone);
  2596. placeHolderElements.push(clone);
  2597. });
  2598. newBody.append(newRow);
  2599. });
  2600. // Compute width for compound header
  2601. var width = compoundHeaders.reduce((acc, x) => acc + x.clientWidth, 0);
  2602. draggingElement.style.width = `${width}px`;
  2603. // Insert the new dragging element and disable selection on BOM
  2604. bom.insertBefore(draggingElement, null);
  2605. bom.style.userSelect = "none";
  2606. // Determine the mouse position offset
  2607. xOffset = e.screenX - compoundHeaders.reduce((acc, x) => Math.min(acc, x.offsetLeft), compoundHeaders[0].offsetLeft);
  2608. yOffset = e.screenY - compoundHeaders[0].offsetTop;
  2609. // Get name for the column in settings.columnOrder
  2610. dragName = getColumnOrderName(target);
  2611. // Change text and class for placeholder elements
  2612. placeHolderElements = placeHolderElements.map(function(e) {
  2613. newElem = cloneElementWithDimensions(e);
  2614. newElem.textContent = "";
  2615. newElem.classList.add("placeholder");
  2616. return newElem;
  2617. });
  2618. // On next mouse move, the whole BOM needs to be redrawn to show the placeholders
  2619. forcePopulation = true;
  2620. // Add listeners for move and up on mouse
  2621. document.addEventListener('mousemove', mouseMoveHandler);
  2622. document.addEventListener('mouseup', mouseUpHandler);
  2623. }
  2624. // In netlist mode, there is nothing to reorder
  2625. if (settings.bommode === "netlist")
  2626. return;
  2627. // Add mouseDownHandler to every column except the numCol
  2628. bom.querySelectorAll("th")
  2629. .forEach(function(head) {
  2630. if (!head.classList.contains("numCol")) {
  2631. head.onmousedown = mouseDownHandler;
  2632. }
  2633. });
  2634. }
  2635. function getBoundingClientRectFromMultiple(elements) {
  2636. var elems = Array.from(elements);
  2637. if (elems.length == 0)
  2638. return null;
  2639. var box = elems.shift()
  2640. .getBoundingClientRect();
  2641. elems.forEach(function(elem) {
  2642. var elembox = elem.getBoundingClientRect();
  2643. box.left = Math.min(elembox.left, box.left);
  2644. box.top = Math.min(elembox.top, box.top);
  2645. box.width += elembox.width;
  2646. box.height = Math.max(elembox.height, box.height);
  2647. });
  2648. return box;
  2649. }
  2650. function cloneElementWithDimensions(elem) {
  2651. var newElem = elem.cloneNode(true);
  2652. newElem.style.height = window.getComputedStyle(elem).height;
  2653. newElem.style.width = window.getComputedStyle(elem).width;
  2654. return newElem;
  2655. }
  2656. function getBomTableHeaderIndex(elem) {
  2657. const bh = document.getElementById('bomhead');
  2658. const ths = Array.from(bh.querySelectorAll("th"));
  2659. return ths.indexOf(elem);
  2660. }
  2661. function getColumnOrderName(elem) {
  2662. var cname = elem.getAttribute("col_name");
  2663. if (cname === "bom-checkbox")
  2664. return "checkboxes";
  2665. else
  2666. return cname;
  2667. }
  2668. function resizableGrid(tablehead) {
  2669. var cols = tablehead.firstElementChild.children;
  2670. var rowWidth = tablehead.offsetWidth;
  2671. for (var i = 1; i < cols.length; i++) {
  2672. if (cols[i].classList.contains("bom-checkbox"))
  2673. continue;
  2674. cols[i].style.width = ((cols[i].clientWidth - paddingDiff(cols[i])) * 100 / rowWidth) + '%';
  2675. }
  2676. for (var i = 1; i < cols.length - 1; i++) {
  2677. var div = document.createElement('div');
  2678. div.className = "column-width-handle";
  2679. cols[i].appendChild(div);
  2680. setListeners(div);
  2681. }
  2682. function setListeners(div) {
  2683. var startX, curCol, nxtCol, curColWidth, nxtColWidth, rowWidth;
  2684. div.addEventListener('mousedown', function(e) {
  2685. e.preventDefault();
  2686. e.stopPropagation();
  2687. curCol = e.target.parentElement;
  2688. nxtCol = curCol.nextElementSibling;
  2689. startX = e.pageX;
  2690. var padding = paddingDiff(curCol);
  2691. rowWidth = curCol.parentElement.offsetWidth;
  2692. curColWidth = curCol.clientWidth - padding;
  2693. nxtColWidth = nxtCol.clientWidth - padding;
  2694. });
  2695. document.addEventListener('mousemove', function(e) {
  2696. if (startX) {
  2697. var diffX = e.pageX - startX;
  2698. diffX = -Math.min(-diffX, curColWidth - 20);
  2699. diffX = Math.min(diffX, nxtColWidth - 20);
  2700. curCol.style.width = ((curColWidth + diffX) * 100 / rowWidth) + '%';
  2701. nxtCol.style.width = ((nxtColWidth - diffX) * 100 / rowWidth) + '%';
  2702. console.log(`${curColWidth + nxtColWidth} ${(curColWidth + diffX) * 100 / rowWidth + (nxtColWidth - diffX) * 100 / rowWidth}`);
  2703. }
  2704. });
  2705. document.addEventListener('mouseup', function(e) {
  2706. curCol = undefined;
  2707. nxtCol = undefined;
  2708. startX = undefined;
  2709. nxtColWidth = undefined;
  2710. curColWidth = undefined
  2711. });
  2712. }
  2713. function paddingDiff(col) {
  2714. if (getStyleVal(col, 'box-sizing') == 'border-box') {
  2715. return 0;
  2716. }
  2717. var padLeft = getStyleVal(col, 'padding-left');
  2718. var padRight = getStyleVal(col, 'padding-right');
  2719. return (parseInt(padLeft) + parseInt(padRight));
  2720. }
  2721. function getStyleVal(elm, css) {
  2722. return (window.getComputedStyle(elm, null).getPropertyValue(css))
  2723. }
  2724. }
  2725. ///////////////////////////////////////////////
  2726. ///////////////////////////////////////////////
  2727. /* DOM manipulation and misc code */
  2728. var bomsplit;
  2729. var canvassplit;
  2730. var initDone = false;
  2731. var bomSortFunction = null;
  2732. var currentSortColumn = null;
  2733. var currentSortOrder = null;
  2734. var currentHighlightedRowId;
  2735. var highlightHandlers = [];
  2736. var footprintIndexToHandler = {};
  2737. var netsToHandler = {};
  2738. var markedFootprints = new Set();
  2739. var highlightedFootprints = [];
  2740. var highlightedNet = null;
  2741. var lastClicked;
  2742. function dbg(html) {
  2743. dbgdiv.innerHTML = html;
  2744. }
  2745. function redrawIfInitDone() {
  2746. if (initDone) {
  2747. redrawCanvas(allcanvas.front);
  2748. redrawCanvas(allcanvas.back);
  2749. }
  2750. }
  2751. function padsVisible(value) {
  2752. writeStorage("padsVisible", value);
  2753. settings.renderPads = value;
  2754. redrawIfInitDone();
  2755. }
  2756. function referencesVisible(value) {
  2757. writeStorage("referencesVisible", value);
  2758. settings.renderReferences = value;
  2759. redrawIfInitDone();
  2760. }
  2761. function valuesVisible(value) {
  2762. writeStorage("valuesVisible", value);
  2763. settings.renderValues = value;
  2764. redrawIfInitDone();
  2765. }
  2766. function tracksVisible(value) {
  2767. writeStorage("tracksVisible", value);
  2768. settings.renderTracks = value;
  2769. redrawIfInitDone();
  2770. }
  2771. function zonesVisible(value) {
  2772. writeStorage("zonesVisible", value);
  2773. settings.renderZones = value;
  2774. redrawIfInitDone();
  2775. }
  2776. function dnpOutline(value) {
  2777. writeStorage("dnpOutline", value);
  2778. settings.renderDnpOutline = value;
  2779. redrawIfInitDone();
  2780. }
  2781. function setDarkMode(value) {
  2782. if (value) {
  2783. topmostdiv.classList.add("dark");
  2784. } else {
  2785. topmostdiv.classList.remove("dark");
  2786. }
  2787. writeStorage("darkmode", value);
  2788. settings.darkMode = value;
  2789. redrawIfInitDone();
  2790. if (initDone) {
  2791. populateBomTable();
  2792. }
  2793. }
  2794. function setShowBOMColumn(field, value) {
  2795. if (field === "references") {
  2796. var rl = document.getElementById("reflookup");
  2797. rl.disabled = !value;
  2798. if (!value) {
  2799. rl.value = "";
  2800. updateRefLookup("");
  2801. }
  2802. }
  2803. var n = settings.hiddenColumns.indexOf(field);
  2804. if (value) {
  2805. if (n != -1) {
  2806. settings.hiddenColumns.splice(n, 1);
  2807. }
  2808. } else {
  2809. if (n == -1) {
  2810. settings.hiddenColumns.push(field);
  2811. }
  2812. }
  2813. writeStorage("hiddenColumns", JSON.stringify(settings.hiddenColumns));
  2814. if (initDone) {
  2815. populateBomTable();
  2816. }
  2817. redrawIfInitDone();
  2818. }
  2819. function setFullscreen(value) {
  2820. if (value) {
  2821. document.documentElement.requestFullscreen();
  2822. } else {
  2823. document.exitFullscreen();
  2824. }
  2825. }
  2826. function fabricationVisible(value) {
  2827. writeStorage("fabricationVisible", value);
  2828. settings.renderFabrication = value;
  2829. redrawIfInitDone();
  2830. }
  2831. function silkscreenVisible(value) {
  2832. writeStorage("silkscreenVisible", value);
  2833. settings.renderSilkscreen = value;
  2834. redrawIfInitDone();
  2835. }
  2836. function setHighlightPin1(value) {
  2837. writeStorage("highlightpin1", value);
  2838. settings.highlightpin1 = value;
  2839. redrawIfInitDone();
  2840. }
  2841. function getStoredCheckboxRefs(checkbox) {
  2842. function convert(ref) {
  2843. var intref = parseInt(ref);
  2844. if (isNaN(intref)) {
  2845. for (var i = 0; i < pcbdata.footprints.length; i++) {
  2846. if (pcbdata.footprints[i].ref == ref) {
  2847. return i;
  2848. }
  2849. }
  2850. return -1;
  2851. } else {
  2852. return intref;
  2853. }
  2854. }
  2855. if (!(checkbox in settings.checkboxStoredRefs)) {
  2856. var val = readStorage("checkbox_" + checkbox);
  2857. settings.checkboxStoredRefs[checkbox] = val ? val : "";
  2858. }
  2859. if (!settings.checkboxStoredRefs[checkbox]) {
  2860. return new Set();
  2861. } else {
  2862. return new Set(settings.checkboxStoredRefs[checkbox].split(",").map(r => convert(r)).filter(a => a >= 0));
  2863. }
  2864. }
  2865. function getCheckboxState(checkbox, references) {
  2866. var storedRefsSet = getStoredCheckboxRefs(checkbox);
  2867. var currentRefsSet = new Set(references.map(r => r[1]));
  2868. // Get difference of current - stored
  2869. var difference = new Set(currentRefsSet);
  2870. for (ref of storedRefsSet) {
  2871. difference.delete(ref);
  2872. }
  2873. if (difference.size == 0) {
  2874. // All the current refs are stored
  2875. return "checked";
  2876. } else if (difference.size == currentRefsSet.size) {
  2877. // None of the current refs are stored
  2878. return "unchecked";
  2879. } else {
  2880. // Some of the refs are stored
  2881. return "indeterminate";
  2882. }
  2883. }
  2884. function setBomCheckboxState(checkbox, element, references) {
  2885. var state = getCheckboxState(checkbox, references);
  2886. element.checked = (state == "checked");
  2887. element.indeterminate = (state == "indeterminate");
  2888. }
  2889. function createCheckboxChangeHandler(checkbox, references, row) {
  2890. return function () {
  2891. refsSet = getStoredCheckboxRefs(checkbox);
  2892. var markWhenChecked = settings.markWhenChecked == checkbox;
  2893. eventArgs = {
  2894. checkbox: checkbox,
  2895. refs: references,
  2896. }
  2897. if (this.checked) {
  2898. // checkbox ticked
  2899. for (var ref of references) {
  2900. refsSet.add(ref[1]);
  2901. }
  2902. if (markWhenChecked) {
  2903. row.classList.add("checked");
  2904. for (var ref of references) {
  2905. markedFootprints.add(ref[1]);
  2906. }
  2907. drawHighlights();
  2908. }
  2909. eventArgs.state = 'checked';
  2910. } else {
  2911. // checkbox unticked
  2912. for (var ref of references) {
  2913. refsSet.delete(ref[1]);
  2914. }
  2915. if (markWhenChecked) {
  2916. row.classList.remove("checked");
  2917. for (var ref of references) {
  2918. markedFootprints.delete(ref[1]);
  2919. }
  2920. drawHighlights();
  2921. }
  2922. eventArgs.state = 'unchecked';
  2923. }
  2924. settings.checkboxStoredRefs[checkbox] = [...refsSet].join(",");
  2925. writeStorage("checkbox_" + checkbox, settings.checkboxStoredRefs[checkbox]);
  2926. updateCheckboxStats(checkbox);
  2927. EventHandler.emitEvent(IBOM_EVENT_TYPES.CHECKBOX_CHANGE_EVENT, eventArgs);
  2928. }
  2929. }
  2930. function clearHighlightedFootprints() {
  2931. if (currentHighlightedRowId) {
  2932. document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
  2933. currentHighlightedRowId = null;
  2934. highlightedFootprints = [];
  2935. highlightedNet = null;
  2936. }
  2937. }
  2938. function createRowHighlightHandler(rowid, refs, net) {
  2939. return function () {
  2940. if (currentHighlightedRowId) {
  2941. if (currentHighlightedRowId == rowid) {
  2942. return;
  2943. }
  2944. document.getElementById(currentHighlightedRowId).classList.remove("highlighted");
  2945. }
  2946. document.getElementById(rowid).classList.add("highlighted");
  2947. currentHighlightedRowId = rowid;
  2948. highlightedFootprints = refs ? refs.map(r => r[1]) : [];
  2949. highlightedNet = net;
  2950. drawHighlights();
  2951. EventHandler.emitEvent(
  2952. IBOM_EVENT_TYPES.HIGHLIGHT_EVENT, {
  2953. rowid: rowid,
  2954. refs: refs,
  2955. net: net
  2956. });
  2957. }
  2958. }
  2959. function updateNetColors() {
  2960. writeStorage("netColors", JSON.stringify(settings.netColors));
  2961. redrawIfInitDone();
  2962. }
  2963. function netColorChangeHandler(net) {
  2964. return (event) => {
  2965. settings.netColors[net] = event.target.value;
  2966. updateNetColors();
  2967. }
  2968. }
  2969. function netColorRightClick(net) {
  2970. return (event) => {
  2971. if (event.button == 2) {
  2972. event.preventDefault();
  2973. event.stopPropagation();
  2974. var style = getComputedStyle(topmostdiv);
  2975. var defaultNetColor = style.getPropertyValue('--track-color').trim();
  2976. event.target.value = defaultNetColor;
  2977. delete settings.netColors[net];
  2978. updateNetColors();
  2979. }
  2980. }
  2981. }
  2982. function entryMatches(entry) {
  2983. if (settings.bommode == "netlist") {
  2984. // entry is just a net name
  2985. return entry.toLowerCase().indexOf(filter) >= 0;
  2986. }
  2987. // check refs
  2988. if (!settings.hiddenColumns.includes("references")) {
  2989. for (var ref of entry) {
  2990. if (ref[0].toLowerCase().indexOf(filter) >= 0) {
  2991. return true;
  2992. }
  2993. }
  2994. }
  2995. // check fields
  2996. for (var i in config.fields) {
  2997. var f = config.fields[i];
  2998. if (!settings.hiddenColumns.includes(f)) {
  2999. for (var ref of entry) {
  3000. if (String(pcbdata.bom.fields[ref[1]][i]).toLowerCase().indexOf(filter) >= 0) {
  3001. return true;
  3002. }
  3003. }
  3004. }
  3005. }
  3006. return false;
  3007. }
  3008. function findRefInEntry(entry) {
  3009. return entry.filter(r => r[0].toLowerCase() == reflookup);
  3010. }
  3011. function highlightFilter(s) {
  3012. if (!filter) {
  3013. return s;
  3014. }
  3015. var parts = s.toLowerCase().split(filter);
  3016. if (parts.length == 1) {
  3017. return s;
  3018. }
  3019. var r = "";
  3020. var pos = 0;
  3021. for (var i in parts) {
  3022. if (i > 0) {
  3023. r += '<mark class="highlight">' +
  3024. s.substring(pos, pos + filter.length) +
  3025. '</mark>';
  3026. pos += filter.length;
  3027. }
  3028. r += s.substring(pos, pos + parts[i].length);
  3029. pos += parts[i].length;
  3030. }
  3031. return r;
  3032. }
  3033. function checkboxSetUnsetAllHandler(checkboxname) {
  3034. return function () {
  3035. var checkboxnum = 0;
  3036. while (checkboxnum < settings.checkboxes.length &&
  3037. settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
  3038. checkboxnum++;
  3039. }
  3040. if (checkboxnum >= settings.checkboxes.length) {
  3041. return;
  3042. }
  3043. var allset = true;
  3044. var checkbox;
  3045. var row;
  3046. for (row of bombody.childNodes) {
  3047. checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
  3048. if (!checkbox.checked || checkbox.indeterminate) {
  3049. allset = false;
  3050. break;
  3051. }
  3052. }
  3053. for (row of bombody.childNodes) {
  3054. checkbox = row.childNodes[checkboxnum + 1].childNodes[0];
  3055. checkbox.checked = !allset;
  3056. checkbox.indeterminate = false;
  3057. checkbox.onchange();
  3058. }
  3059. }
  3060. }
  3061. function createColumnHeader(name, cls, comparator, is_checkbox = false) {
  3062. var th = document.createElement("TH");
  3063. th.innerHTML = name;
  3064. th.classList.add(cls);
  3065. if (is_checkbox)
  3066. th.setAttribute("col_name", "bom-checkbox");
  3067. else
  3068. th.setAttribute("col_name", name);
  3069. var span = document.createElement("SPAN");
  3070. span.classList.add("sortmark");
  3071. span.classList.add("none");
  3072. th.appendChild(span);
  3073. var spacer = document.createElement("div");
  3074. spacer.className = "column-spacer";
  3075. th.appendChild(spacer);
  3076. spacer.onclick = function () {
  3077. if (currentSortColumn && th !== currentSortColumn) {
  3078. // Currently sorted by another column
  3079. currentSortColumn.childNodes[1].classList.remove(currentSortOrder);
  3080. currentSortColumn.childNodes[1].classList.add("none");
  3081. currentSortColumn = null;
  3082. currentSortOrder = null;
  3083. }
  3084. if (currentSortColumn && th === currentSortColumn) {
  3085. // Already sorted by this column
  3086. if (currentSortOrder == "asc") {
  3087. // Sort by this column, descending order
  3088. bomSortFunction = function (a, b) {
  3089. return -comparator(a, b);
  3090. }
  3091. currentSortColumn.childNodes[1].classList.remove("asc");
  3092. currentSortColumn.childNodes[1].classList.add("desc");
  3093. currentSortOrder = "desc";
  3094. } else {
  3095. // Unsort
  3096. bomSortFunction = null;
  3097. currentSortColumn.childNodes[1].classList.remove("desc");
  3098. currentSortColumn.childNodes[1].classList.add("none");
  3099. currentSortColumn = null;
  3100. currentSortOrder = null;
  3101. }
  3102. } else {
  3103. // Sort by this column, ascending order
  3104. bomSortFunction = comparator;
  3105. currentSortColumn = th;
  3106. currentSortColumn.childNodes[1].classList.remove("none");
  3107. currentSortColumn.childNodes[1].classList.add("asc");
  3108. currentSortOrder = "asc";
  3109. }
  3110. populateBomBody();
  3111. }
  3112. if (is_checkbox) {
  3113. spacer.onclick = fancyDblClickHandler(
  3114. spacer, spacer.onclick, checkboxSetUnsetAllHandler(name));
  3115. }
  3116. return th;
  3117. }
  3118. function populateBomHeader(placeHolderColumn = null, placeHolderElements = null) {
  3119. while (bomhead.firstChild) {
  3120. bomhead.removeChild(bomhead.firstChild);
  3121. }
  3122. var tr = document.createElement("TR");
  3123. var th = document.createElement("TH");
  3124. th.classList.add("numCol");
  3125. var vismenu = document.createElement("div");
  3126. vismenu.id = "vismenu";
  3127. vismenu.classList.add("menu");
  3128. var visbutton = document.createElement("div");
  3129. visbutton.classList.add("visbtn");
  3130. visbutton.classList.add("hideonprint");
  3131. var viscontent = document.createElement("div");
  3132. viscontent.classList.add("menu-content");
  3133. viscontent.id = "vismenu-content";
  3134. settings.columnOrder.forEach(column => {
  3135. if (typeof column !== "string")
  3136. return;
  3137. // Skip empty columns
  3138. if (column === "checkboxes" && settings.checkboxes.length == 0)
  3139. return;
  3140. else if (column === "Quantity" && settings.bommode == "ungrouped")
  3141. return;
  3142. var label = document.createElement("label");
  3143. label.classList.add("menu-label");
  3144. var input = document.createElement("input");
  3145. input.classList.add("visibility_checkbox");
  3146. input.type = "checkbox";
  3147. input.onchange = function (e) {
  3148. setShowBOMColumn(column, e.target.checked)
  3149. };
  3150. input.checked = !(settings.hiddenColumns.includes(column));
  3151. label.appendChild(input);
  3152. if (column.length > 0)
  3153. label.append(column[0].toUpperCase() + column.slice(1));
  3154. viscontent.appendChild(label);
  3155. });
  3156. viscontent.childNodes[0].classList.add("menu-label-top");
  3157. vismenu.appendChild(visbutton);
  3158. if (settings.bommode != "netlist") {
  3159. vismenu.appendChild(viscontent);
  3160. th.appendChild(vismenu);
  3161. }
  3162. tr.appendChild(th);
  3163. var checkboxCompareClosure = function (checkbox) {
  3164. return (a, b) => {
  3165. var stateA = getCheckboxState(checkbox, a);
  3166. var stateB = getCheckboxState(checkbox, b);
  3167. if (stateA > stateB) return -1;
  3168. if (stateA < stateB) return 1;
  3169. return 0;
  3170. }
  3171. }
  3172. var stringFieldCompareClosure = function (fieldIndex) {
  3173. return (a, b) => {
  3174. var fa = pcbdata.bom.fields[a[0][1]][fieldIndex];
  3175. var fb = pcbdata.bom.fields[b[0][1]][fieldIndex];
  3176. if (fa != fb) return fa > fb ? 1 : -1;
  3177. else return 0;
  3178. }
  3179. }
  3180. var referenceRegex = /(?<prefix>[^0-9]+)(?<number>[0-9]+)/;
  3181. var compareRefs = (a, b) => {
  3182. var ra = referenceRegex.exec(a);
  3183. var rb = referenceRegex.exec(b);
  3184. if (ra === null || rb === null) {
  3185. if (a != b) return a > b ? 1 : -1;
  3186. return 0;
  3187. } else {
  3188. if (ra.groups.prefix != rb.groups.prefix) {
  3189. return ra.groups.prefix > rb.groups.prefix ? 1 : -1;
  3190. }
  3191. if (ra.groups.number != rb.groups.number) {
  3192. return parseInt(ra.groups.number) > parseInt(rb.groups.number) ? 1 : -1;
  3193. }
  3194. return 0;
  3195. }
  3196. }
  3197. if (settings.bommode == "netlist") {
  3198. tr.appendChild(createColumnHeader("Net name", "bom-netname", (a, b) => {
  3199. if (a > b) return -1;
  3200. if (a < b) return 1;
  3201. return 0;
  3202. }));
  3203. tr.appendChild(createColumnHeader("Color", "bom-color", (a, b) => {
  3204. return 0;
  3205. }));
  3206. } else {
  3207. // Filter hidden columns
  3208. var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
  3209. var valueIndex = config.fields.indexOf("Value");
  3210. var footprintIndex = config.fields.indexOf("Footprint");
  3211. columns.forEach((column) => {
  3212. if (column === placeHolderColumn) {
  3213. var n = 1;
  3214. if (column === "checkboxes")
  3215. n = settings.checkboxes.length;
  3216. for (i = 0; i < n; i++) {
  3217. td = placeHolderElements.shift();
  3218. tr.appendChild(td);
  3219. }
  3220. return;
  3221. } else if (column === "checkboxes") {
  3222. for (var checkbox of settings.checkboxes) {
  3223. th = createColumnHeader(
  3224. checkbox, "bom-checkbox", checkboxCompareClosure(checkbox), true);
  3225. tr.appendChild(th);
  3226. }
  3227. } else if (column === "References") {
  3228. tr.appendChild(createColumnHeader("References", "references", (a, b) => {
  3229. var i = 0;
  3230. while (i < a.length && i < b.length) {
  3231. if (a[i] != b[i]) return compareRefs(a[i][0], b[i][0]);
  3232. i++;
  3233. }
  3234. return a.length - b.length;
  3235. }));
  3236. } else if (column === "Value") {
  3237. tr.appendChild(createColumnHeader("Value", "value", (a, b) => {
  3238. var ra = a[0][1], rb = b[0][1];
  3239. return valueCompare(
  3240. pcbdata.bom.parsedValues[ra], pcbdata.bom.parsedValues[rb],
  3241. pcbdata.bom.fields[ra][valueIndex], pcbdata.bom.fields[rb][valueIndex]);
  3242. }));
  3243. return;
  3244. } else if (column === "Footprint") {
  3245. tr.appendChild(createColumnHeader(
  3246. "Footprint", "footprint", stringFieldCompareClosure(footprintIndex)));
  3247. } else if (column === "Quantity" && settings.bommode == "grouped") {
  3248. tr.appendChild(createColumnHeader("Quantity", "quantity", (a, b) => {
  3249. return a.length - b.length;
  3250. }));
  3251. } else {
  3252. // Other fields
  3253. var i = config.fields.indexOf(column);
  3254. if (i < 0)
  3255. return;
  3256. tr.appendChild(createColumnHeader(
  3257. column, `field${i + 1}`, stringFieldCompareClosure(i)));
  3258. }
  3259. });
  3260. }
  3261. bomhead.appendChild(tr);
  3262. }
  3263. function populateBomBody(placeholderColumn = null, placeHolderElements = null) {
  3264. const urlRegex = /^(https?:\/\/[^\s\/$.?#][^\s]*|file:\/\/([a-zA-Z]:|\/)[^\x00]+)$/;
  3265. while (bom.firstChild) {
  3266. bom.removeChild(bom.firstChild);
  3267. }
  3268. highlightHandlers = [];
  3269. footprintIndexToHandler = {};
  3270. netsToHandler = {};
  3271. currentHighlightedRowId = null;
  3272. var first = true;
  3273. var style = getComputedStyle(topmostdiv);
  3274. var defaultNetColor = style.getPropertyValue('--track-color').trim();
  3275. if (settings.bommode == "netlist") {
  3276. bomtable = pcbdata.nets.slice();
  3277. } else {
  3278. switch (settings.canvaslayout) {
  3279. case 'F':
  3280. bomtable = pcbdata.bom.F.slice();
  3281. break;
  3282. case 'FB':
  3283. bomtable = pcbdata.bom.both.slice();
  3284. break;
  3285. case 'B':
  3286. bomtable = pcbdata.bom.B.slice();
  3287. break;
  3288. }
  3289. if (settings.bommode == "ungrouped") {
  3290. // expand bom table
  3291. expandedTable = []
  3292. for (var bomentry of bomtable) {
  3293. for (var ref of bomentry) {
  3294. expandedTable.push([ref]);
  3295. }
  3296. }
  3297. bomtable = expandedTable;
  3298. }
  3299. }
  3300. if (bomSortFunction) {
  3301. bomtable = bomtable.sort(bomSortFunction);
  3302. }
  3303. for (var i in bomtable) {
  3304. var bomentry = bomtable[i];
  3305. if (filter && !entryMatches(bomentry)) {
  3306. continue;
  3307. }
  3308. var references = null;
  3309. var netname = null;
  3310. var tr = document.createElement("TR");
  3311. var td = document.createElement("TD");
  3312. var rownum = +i + 1;
  3313. tr.id = "bomrow" + rownum;
  3314. td.textContent = rownum;
  3315. tr.appendChild(td);
  3316. if (settings.bommode == "netlist") {
  3317. netname = bomentry;
  3318. td = document.createElement("TD");
  3319. td.innerHTML = highlightFilter(netname ? netname : "&lt;no net&gt;");
  3320. tr.appendChild(td);
  3321. var color = settings.netColors[netname] || defaultNetColor;
  3322. td = document.createElement("TD");
  3323. var colorBox = document.createElement("INPUT");
  3324. colorBox.type = "color";
  3325. colorBox.value = color;
  3326. colorBox.onchange = netColorChangeHandler(netname);
  3327. colorBox.onmouseup = netColorRightClick(netname);
  3328. colorBox.oncontextmenu = (e) => e.preventDefault();
  3329. td.appendChild(colorBox);
  3330. td.classList.add("color-column");
  3331. tr.appendChild(td);
  3332. } else {
  3333. if (reflookup) {
  3334. references = findRefInEntry(bomentry);
  3335. if (references.length == 0) {
  3336. continue;
  3337. }
  3338. } else {
  3339. references = bomentry;
  3340. }
  3341. // Filter hidden columns
  3342. var columns = settings.columnOrder.filter(e => !settings.hiddenColumns.includes(e));
  3343. columns.forEach((column) => {
  3344. if (column === placeholderColumn) {
  3345. var n = 1;
  3346. if (column === "checkboxes")
  3347. n = settings.checkboxes.length;
  3348. for (i = 0; i < n; i++) {
  3349. td = placeHolderElements.shift();
  3350. tr.appendChild(td);
  3351. }
  3352. return;
  3353. } else if (column === "checkboxes") {
  3354. for (var checkbox of settings.checkboxes) {
  3355. if (checkbox) {
  3356. td = document.createElement("TD");
  3357. var input = document.createElement("input");
  3358. input.type = "checkbox";
  3359. input.onchange = createCheckboxChangeHandler(checkbox, references, tr);
  3360. setBomCheckboxState(checkbox, input, references);
  3361. if (input.checked && settings.markWhenChecked == checkbox) {
  3362. tr.classList.add("checked");
  3363. }
  3364. td.appendChild(input);
  3365. tr.appendChild(td);
  3366. }
  3367. }
  3368. } else if (column === "References") {
  3369. td = document.createElement("TD");
  3370. td.innerHTML = highlightFilter(references.map(r => r[0]).join(", "));
  3371. tr.appendChild(td);
  3372. } else if (column === "Quantity" && settings.bommode == "grouped") {
  3373. // Quantity
  3374. td = document.createElement("TD");
  3375. td.textContent = references.length;
  3376. tr.appendChild(td);
  3377. } else {
  3378. // All the other fields
  3379. var field_index = config.fields.indexOf(column)
  3380. if (field_index < 0)
  3381. return;
  3382. var valueSet = new Set();
  3383. references.map(r => r[1]).forEach((id) => valueSet.add(pcbdata.bom.fields[id][field_index]));
  3384. td = document.createElement("TD");
  3385. var output = new Array();
  3386. for (let item of valueSet) {
  3387. const visible = highlightFilter(String(item));
  3388. if (typeof item === 'string' && item.match(urlRegex)) {
  3389. output.push(`<a href="${item}" target="_blank">${visible}</a>`);
  3390. } else {
  3391. output.push(visible);
  3392. }
  3393. }
  3394. td.innerHTML = output.join(", ");
  3395. tr.appendChild(td);
  3396. }
  3397. });
  3398. }
  3399. bom.appendChild(tr);
  3400. var handler = createRowHighlightHandler(tr.id, references, netname);
  3401. tr.onmousemove = handler;
  3402. highlightHandlers.push({
  3403. id: tr.id,
  3404. handler: handler,
  3405. });
  3406. if (references !== null) {
  3407. for (var refIndex of references.map(r => r[1])) {
  3408. footprintIndexToHandler[refIndex] = handler;
  3409. }
  3410. }
  3411. if (netname !== null) {
  3412. netsToHandler[netname] = handler;
  3413. }
  3414. if ((filter || reflookup) && first) {
  3415. handler();
  3416. first = false;
  3417. }
  3418. }
  3419. EventHandler.emitEvent(
  3420. IBOM_EVENT_TYPES.BOM_BODY_CHANGE_EVENT, {
  3421. filter: filter,
  3422. reflookup: reflookup,
  3423. checkboxes: settings.checkboxes,
  3424. bommode: settings.bommode,
  3425. });
  3426. }
  3427. function highlightPreviousRow() {
  3428. if (!currentHighlightedRowId) {
  3429. highlightHandlers[highlightHandlers.length - 1].handler();
  3430. } else {
  3431. if (highlightHandlers.length > 1 &&
  3432. highlightHandlers[0].id == currentHighlightedRowId) {
  3433. highlightHandlers[highlightHandlers.length - 1].handler();
  3434. } else {
  3435. for (var i = 0; i < highlightHandlers.length - 1; i++) {
  3436. if (highlightHandlers[i + 1].id == currentHighlightedRowId) {
  3437. highlightHandlers[i].handler();
  3438. break;
  3439. }
  3440. }
  3441. }
  3442. }
  3443. smoothScrollToRow(currentHighlightedRowId);
  3444. }
  3445. function highlightNextRow() {
  3446. if (!currentHighlightedRowId) {
  3447. highlightHandlers[0].handler();
  3448. } else {
  3449. if (highlightHandlers.length > 1 &&
  3450. highlightHandlers[highlightHandlers.length - 1].id == currentHighlightedRowId) {
  3451. highlightHandlers[0].handler();
  3452. } else {
  3453. for (var i = 1; i < highlightHandlers.length; i++) {
  3454. if (highlightHandlers[i - 1].id == currentHighlightedRowId) {
  3455. highlightHandlers[i].handler();
  3456. break;
  3457. }
  3458. }
  3459. }
  3460. }
  3461. smoothScrollToRow(currentHighlightedRowId);
  3462. }
  3463. function populateBomTable() {
  3464. populateBomHeader();
  3465. populateBomBody();
  3466. setBomHandlers();
  3467. resizableGrid(bomhead);
  3468. }
  3469. function footprintsClicked(footprintIndexes) {
  3470. var lastClickedIndex = footprintIndexes.indexOf(lastClicked);
  3471. for (var i = 1; i <= footprintIndexes.length; i++) {
  3472. var refIndex = footprintIndexes[(lastClickedIndex + i) % footprintIndexes.length];
  3473. if (refIndex in footprintIndexToHandler) {
  3474. lastClicked = refIndex;
  3475. footprintIndexToHandler[refIndex]();
  3476. smoothScrollToRow(currentHighlightedRowId);
  3477. break;
  3478. }
  3479. }
  3480. }
  3481. function netClicked(net) {
  3482. if (net in netsToHandler) {
  3483. netsToHandler[net]();
  3484. smoothScrollToRow(currentHighlightedRowId);
  3485. } else {
  3486. clearHighlightedFootprints();
  3487. highlightedNet = net;
  3488. drawHighlights();
  3489. }
  3490. }
  3491. function updateFilter(input) {
  3492. filter = input.toLowerCase();
  3493. populateBomTable();
  3494. }
  3495. function updateRefLookup(input) {
  3496. reflookup = input.toLowerCase();
  3497. populateBomTable();
  3498. }
  3499. function changeCanvasLayout(layout) {
  3500. document.getElementById("fl-btn").classList.remove("depressed");
  3501. document.getElementById("fb-btn").classList.remove("depressed");
  3502. document.getElementById("bl-btn").classList.remove("depressed");
  3503. switch (layout) {
  3504. case 'F':
  3505. document.getElementById("fl-btn").classList.add("depressed");
  3506. if (settings.bomlayout != "bom-only") {
  3507. canvassplit.collapse(1);
  3508. }
  3509. break;
  3510. case 'B':
  3511. document.getElementById("bl-btn").classList.add("depressed");
  3512. if (settings.bomlayout != "bom-only") {
  3513. canvassplit.collapse(0);
  3514. }
  3515. break;
  3516. default:
  3517. document.getElementById("fb-btn").classList.add("depressed");
  3518. if (settings.bomlayout != "bom-only") {
  3519. canvassplit.setSizes([50, 50]);
  3520. }
  3521. }
  3522. settings.canvaslayout = layout;
  3523. writeStorage("canvaslayout", layout);
  3524. resizeAll();
  3525. changeBomMode(settings.bommode);
  3526. }
  3527. function populateMetadata() {
  3528. document.getElementById("title").innerHTML = pcbdata.metadata.title;
  3529. document.getElementById("revision").innerHTML = "Rev: " + pcbdata.metadata.revision;
  3530. document.getElementById("company").innerHTML = pcbdata.metadata.company;
  3531. document.getElementById("filedate").innerHTML = pcbdata.metadata.date;
  3532. if (pcbdata.metadata.title != "") {
  3533. document.title = pcbdata.metadata.title + " BOM";
  3534. }
  3535. // Calculate board stats
  3536. var fp_f = 0,
  3537. fp_b = 0,
  3538. pads_f = 0,
  3539. pads_b = 0,
  3540. pads_th = 0;
  3541. for (var i = 0; i < pcbdata.footprints.length; i++) {
  3542. if (pcbdata.bom.skipped.includes(i)) continue;
  3543. var mod = pcbdata.footprints[i];
  3544. if (mod.layer == "F") {
  3545. fp_f++;
  3546. } else {
  3547. fp_b++;
  3548. }
  3549. for (var pad of mod.pads) {
  3550. if (pad.type == "th") {
  3551. pads_th++;
  3552. } else {
  3553. if (pad.layers.includes("F")) {
  3554. pads_f++;
  3555. }
  3556. if (pad.layers.includes("B")) {
  3557. pads_b++;
  3558. }
  3559. }
  3560. }
  3561. }
  3562. document.getElementById("stats-components-front").innerHTML = fp_f;
  3563. document.getElementById("stats-components-back").innerHTML = fp_b;
  3564. document.getElementById("stats-components-total").innerHTML = fp_f + fp_b;
  3565. document.getElementById("stats-groups-front").innerHTML = pcbdata.bom.F.length;
  3566. document.getElementById("stats-groups-back").innerHTML = pcbdata.bom.B.length;
  3567. document.getElementById("stats-groups-total").innerHTML = pcbdata.bom.both.length;
  3568. document.getElementById("stats-smd-pads-front").innerHTML = pads_f;
  3569. document.getElementById("stats-smd-pads-back").innerHTML = pads_b;
  3570. document.getElementById("stats-smd-pads-total").innerHTML = pads_f + pads_b;
  3571. document.getElementById("stats-th-pads").innerHTML = pads_th;
  3572. // Update version string
  3573. document.getElementById("github-link").innerHTML = "InteractiveHtmlBom&nbsp;" +
  3574. /^v\d+\.\d+/.exec(pcbdata.ibom_version)[0];
  3575. }
  3576. function changeBomLayout(layout) {
  3577. document.getElementById("bom-btn").classList.remove("depressed");
  3578. document.getElementById("lr-btn").classList.remove("depressed");
  3579. document.getElementById("tb-btn").classList.remove("depressed");
  3580. switch (layout) {
  3581. case 'bom-only':
  3582. document.getElementById("bom-btn").classList.add("depressed");
  3583. if (bomsplit) {
  3584. bomsplit.destroy();
  3585. bomsplit = null;
  3586. canvassplit.destroy();
  3587. canvassplit = null;
  3588. }
  3589. document.getElementById("frontcanvas").style.display = "none";
  3590. document.getElementById("backcanvas").style.display = "none";
  3591. document.getElementById("topmostdiv").style.height = "";
  3592. document.getElementById("topmostdiv").style.display = "block";
  3593. break;
  3594. case 'top-bottom':
  3595. document.getElementById("tb-btn").classList.add("depressed");
  3596. document.getElementById("frontcanvas").style.display = "";
  3597. document.getElementById("backcanvas").style.display = "";
  3598. document.getElementById("topmostdiv").style.height = "100%";
  3599. document.getElementById("topmostdiv").style.display = "flex";
  3600. document.getElementById("bomdiv").classList.remove("split-horizontal");
  3601. document.getElementById("canvasdiv").classList.remove("split-horizontal");
  3602. document.getElementById("frontcanvas").classList.add("split-horizontal");
  3603. document.getElementById("backcanvas").classList.add("split-horizontal");
  3604. if (bomsplit) {
  3605. bomsplit.destroy();
  3606. bomsplit = null;
  3607. canvassplit.destroy();
  3608. canvassplit = null;
  3609. }
  3610. bomsplit = Split(['#bomdiv', '#canvasdiv'], {
  3611. sizes: [50, 50],
  3612. onDragEnd: resizeAll,
  3613. direction: "vertical",
  3614. gutterSize: 5
  3615. });
  3616. canvassplit = Split(['#frontcanvas', '#backcanvas'], {
  3617. sizes: [50, 50],
  3618. gutterSize: 5,
  3619. onDragEnd: resizeAll
  3620. });
  3621. break;
  3622. case 'left-right':
  3623. document.getElementById("lr-btn").classList.add("depressed");
  3624. document.getElementById("frontcanvas").style.display = "";
  3625. document.getElementById("backcanvas").style.display = "";
  3626. document.getElementById("topmostdiv").style.height = "100%";
  3627. document.getElementById("topmostdiv").style.display = "flex";
  3628. document.getElementById("bomdiv").classList.add("split-horizontal");
  3629. document.getElementById("canvasdiv").classList.add("split-horizontal");
  3630. document.getElementById("frontcanvas").classList.remove("split-horizontal");
  3631. document.getElementById("backcanvas").classList.remove("split-horizontal");
  3632. if (bomsplit) {
  3633. bomsplit.destroy();
  3634. bomsplit = null;
  3635. canvassplit.destroy();
  3636. canvassplit = null;
  3637. }
  3638. bomsplit = Split(['#bomdiv', '#canvasdiv'], {
  3639. sizes: [50, 50],
  3640. onDragEnd: resizeAll,
  3641. gutterSize: 5
  3642. });
  3643. canvassplit = Split(['#frontcanvas', '#backcanvas'], {
  3644. sizes: [50, 50],
  3645. gutterSize: 5,
  3646. direction: "vertical",
  3647. onDragEnd: resizeAll
  3648. });
  3649. }
  3650. settings.bomlayout = layout;
  3651. writeStorage("bomlayout", layout);
  3652. changeCanvasLayout(settings.canvaslayout);
  3653. }
  3654. function changeBomMode(mode) {
  3655. document.getElementById("bom-grouped-btn").classList.remove("depressed");
  3656. document.getElementById("bom-ungrouped-btn").classList.remove("depressed");
  3657. document.getElementById("bom-netlist-btn").classList.remove("depressed");
  3658. var chkbxs = document.getElementsByClassName("visibility_checkbox");
  3659. switch (mode) {
  3660. case 'grouped':
  3661. document.getElementById("bom-grouped-btn").classList.add("depressed");
  3662. for (var i = 0; i < chkbxs.length; i++) {
  3663. chkbxs[i].disabled = false;
  3664. }
  3665. break;
  3666. case 'ungrouped':
  3667. document.getElementById("bom-ungrouped-btn").classList.add("depressed");
  3668. for (var i = 0; i < chkbxs.length; i++) {
  3669. chkbxs[i].disabled = false;
  3670. }
  3671. break;
  3672. case 'netlist':
  3673. document.getElementById("bom-netlist-btn").classList.add("depressed");
  3674. for (var i = 0; i < chkbxs.length; i++) {
  3675. chkbxs[i].disabled = true;
  3676. }
  3677. }
  3678. writeStorage("bommode", mode);
  3679. if (mode != settings.bommode) {
  3680. settings.bommode = mode;
  3681. bomSortFunction = null;
  3682. currentSortColumn = null;
  3683. currentSortOrder = null;
  3684. clearHighlightedFootprints();
  3685. }
  3686. populateBomTable();
  3687. }
  3688. function focusFilterField() {
  3689. focusInputField(document.getElementById("filter"));
  3690. }
  3691. function focusRefLookupField() {
  3692. focusInputField(document.getElementById("reflookup"));
  3693. }
  3694. function toggleBomCheckbox(bomrowid, checkboxnum) {
  3695. if (!bomrowid || checkboxnum > settings.checkboxes.length) {
  3696. return;
  3697. }
  3698. var bomrow = document.getElementById(bomrowid);
  3699. var checkbox = bomrow.childNodes[checkboxnum].childNodes[0];
  3700. checkbox.checked = !checkbox.checked;
  3701. checkbox.indeterminate = false;
  3702. checkbox.onchange();
  3703. }
  3704. function checkBomCheckbox(bomrowid, checkboxname) {
  3705. var checkboxnum = 0;
  3706. while (checkboxnum < settings.checkboxes.length &&
  3707. settings.checkboxes[checkboxnum].toLowerCase() != checkboxname.toLowerCase()) {
  3708. checkboxnum++;
  3709. }
  3710. if (!bomrowid || checkboxnum >= settings.checkboxes.length) {
  3711. return;
  3712. }
  3713. var bomrow = document.getElementById(bomrowid);
  3714. var checkbox = bomrow.childNodes[checkboxnum + 1].childNodes[0];
  3715. checkbox.checked = true;
  3716. checkbox.indeterminate = false;
  3717. checkbox.onchange();
  3718. }
  3719. function setBomCheckboxes(value) {
  3720. writeStorage("bomCheckboxes", value);
  3721. settings.checkboxes = value.split(",").map((e) => e.trim()).filter((e) => e);
  3722. prepCheckboxes();
  3723. populateMarkWhenCheckedOptions();
  3724. setMarkWhenChecked(settings.markWhenChecked);
  3725. }
  3726. function setMarkWhenChecked(value) {
  3727. writeStorage("markWhenChecked", value);
  3728. settings.markWhenChecked = value;
  3729. markedFootprints.clear();
  3730. for (var ref of (value ? getStoredCheckboxRefs(value) : [])) {
  3731. markedFootprints.add(ref);
  3732. }
  3733. populateBomTable();
  3734. drawHighlights();
  3735. }
  3736. function prepCheckboxes() {
  3737. var table = document.getElementById("checkbox-stats");
  3738. while (table.childElementCount > 1) {
  3739. table.removeChild(table.lastChild);
  3740. }
  3741. if (settings.checkboxes.length) {
  3742. table.style.display = "";
  3743. } else {
  3744. table.style.display = "none";
  3745. }
  3746. for (var checkbox of settings.checkboxes) {
  3747. var tr = document.createElement("TR");
  3748. var td = document.createElement("TD");
  3749. td.innerHTML = checkbox;
  3750. tr.appendChild(td);
  3751. td = document.createElement("TD");
  3752. td.id = "checkbox-stats-" + checkbox;
  3753. var progressbar = document.createElement("div");
  3754. progressbar.classList.add("bar");
  3755. td.appendChild(progressbar);
  3756. var text = document.createElement("div");
  3757. text.classList.add("text");
  3758. td.appendChild(text);
  3759. tr.appendChild(td);
  3760. table.appendChild(tr);
  3761. updateCheckboxStats(checkbox);
  3762. }
  3763. }
  3764. function populateMarkWhenCheckedOptions() {
  3765. var container = document.getElementById("markWhenCheckedContainer");
  3766. if (settings.checkboxes.length == 0) {
  3767. container.parentElement.style.display = "none";
  3768. return;
  3769. }
  3770. container.innerHTML = '';
  3771. container.parentElement.style.display = "inline-block";
  3772. function createOption(name, displayName) {
  3773. var id = "markWhenChecked-" + name;
  3774. var div = document.createElement("div");
  3775. div.classList.add("radio-container");
  3776. var input = document.createElement("input");
  3777. input.type = "radio";
  3778. input.name = "markWhenChecked";
  3779. input.value = name;
  3780. input.id = id;
  3781. input.onchange = () => setMarkWhenChecked(name);
  3782. div.appendChild(input);
  3783. // Preserve the selected element when the checkboxes change
  3784. if (name == settings.markWhenChecked) {
  3785. input.checked = true;
  3786. }
  3787. var label = document.createElement("label");
  3788. label.innerHTML = displayName;
  3789. label.htmlFor = id;
  3790. div.appendChild(label);
  3791. container.appendChild(div);
  3792. }
  3793. createOption("", "None");
  3794. for (var checkbox of settings.checkboxes) {
  3795. createOption(checkbox, checkbox);
  3796. }
  3797. }
  3798. function updateCheckboxStats(checkbox) {
  3799. var checked = getStoredCheckboxRefs(checkbox).size;
  3800. var total = pcbdata.footprints.length - pcbdata.bom.skipped.length;
  3801. var percent = checked * 100.0 / total;
  3802. var td = document.getElementById("checkbox-stats-" + checkbox);
  3803. td.firstChild.style.width = percent + "%";
  3804. td.lastChild.innerHTML = checked + "/" + total + " (" + Math.round(percent) + "%)";
  3805. }
  3806. function constrain(number, min, max) {
  3807. return Math.min(Math.max(parseInt(number), min), max);
  3808. }
  3809. document.onkeydown = function (e) {
  3810. switch (e.key) {
  3811. case "n":
  3812. if (document.activeElement.type == "text") {
  3813. return;
  3814. }
  3815. if (currentHighlightedRowId !== null) {
  3816. checkBomCheckbox(currentHighlightedRowId, "placed");
  3817. highlightNextRow();
  3818. e.preventDefault();
  3819. }
  3820. break;
  3821. case "ArrowUp":
  3822. highlightPreviousRow();
  3823. e.preventDefault();
  3824. break;
  3825. case "ArrowDown":
  3826. highlightNextRow();
  3827. e.preventDefault();
  3828. break;
  3829. case "ArrowLeft":
  3830. case "ArrowRight":
  3831. if (document.activeElement.type != "text") {
  3832. e.preventDefault();
  3833. let boardRotationElement = document.getElementById("boardRotation")
  3834. settings.boardRotation = parseInt(boardRotationElement.value); // degrees / 5
  3835. if (e.key == "ArrowLeft") {
  3836. settings.boardRotation += 3; // 15 degrees
  3837. }
  3838. else {
  3839. settings.boardRotation -= 3;
  3840. }
  3841. settings.boardRotation = constrain(settings.boardRotation, boardRotationElement.min, boardRotationElement.max);
  3842. boardRotationElement.value = settings.boardRotation
  3843. setBoardRotation(settings.boardRotation);
  3844. }
  3845. break;
  3846. default:
  3847. break;
  3848. }
  3849. if (e.altKey) {
  3850. switch (e.key) {
  3851. case "f":
  3852. focusFilterField();
  3853. e.preventDefault();
  3854. break;
  3855. case "r":
  3856. focusRefLookupField();
  3857. e.preventDefault();
  3858. break;
  3859. case "z":
  3860. changeBomLayout("bom-only");
  3861. e.preventDefault();
  3862. break;
  3863. case "x":
  3864. changeBomLayout("left-right");
  3865. e.preventDefault();
  3866. break;
  3867. case "c":
  3868. changeBomLayout("top-bottom");
  3869. e.preventDefault();
  3870. break;
  3871. case "v":
  3872. changeCanvasLayout("F");
  3873. e.preventDefault();
  3874. break;
  3875. case "b":
  3876. changeCanvasLayout("FB");
  3877. e.preventDefault();
  3878. break;
  3879. case "n":
  3880. changeCanvasLayout("B");
  3881. e.preventDefault();
  3882. break;
  3883. default:
  3884. break;
  3885. }
  3886. if (e.key >= '1' && e.key <= '9') {
  3887. toggleBomCheckbox(currentHighlightedRowId, parseInt(e.key));
  3888. e.preventDefault();
  3889. }
  3890. }
  3891. }
  3892. function hideNetlistButton() {
  3893. document.getElementById("bom-ungrouped-btn").classList.remove("middle-button");
  3894. document.getElementById("bom-ungrouped-btn").classList.add("right-most-button");
  3895. document.getElementById("bom-netlist-btn").style.display = "none";
  3896. }
  3897. function topToggle() {
  3898. var top = document.getElementById("top");
  3899. var toptoggle = document.getElementById("toptoggle");
  3900. if (top.style.display === "none") {
  3901. top.style.display = "flex";
  3902. toptoggle.classList.remove("flipped");
  3903. } else {
  3904. top.style.display = "none";
  3905. toptoggle.classList.add("flipped");
  3906. }
  3907. }
  3908. window.onload = function (e) {
  3909. initUtils();
  3910. initRender();
  3911. initStorage();
  3912. initDefaults();
  3913. cleanGutters();
  3914. populateMetadata();
  3915. dbgdiv = document.getElementById("dbg");
  3916. bom = document.getElementById("bombody");
  3917. bomhead = document.getElementById("bomhead");
  3918. filter = "";
  3919. reflookup = "";
  3920. if (!("nets" in pcbdata)) {
  3921. hideNetlistButton();
  3922. }
  3923. initDone = true;
  3924. setBomCheckboxes(document.getElementById("bomCheckboxes").value);
  3925. // Triggers render
  3926. changeBomLayout(settings.bomlayout);
  3927. // Users may leave fullscreen without touching the checkbox. Uncheck.
  3928. document.addEventListener('fullscreenchange', () => {
  3929. if (!document.fullscreenElement)
  3930. document.getElementById('fullscreenCheckbox').checked = false;
  3931. });
  3932. }
  3933. window.onresize = resizeAll;
  3934. window.matchMedia("print").addListener(resizeAll);
  3935. ///////////////////////////////////////////////
  3936. ///////////////////////////////////////////////
  3937. // EventHandler.registerCallback(IBOM_EVENT_TYPES.BOM_BODY_CHANGE_EVENT, () => {
  3938. // for(var tr of bom.childNodes) {
  3939. // tr.onclick = tr.onmousemove;
  3940. // tr.onmousemove = null;
  3941. // };
  3942. // });
  3943. ///////////////////////////////////////////////
  3944. </script>
  3945. </head>
  3946. <body>
  3947. <div id="topmostdiv" class="topmostdiv">
  3948. <div id="top">
  3949. <div id="fileinfodiv">
  3950. <table class="fileinfo">
  3951. <tbody>
  3952. <tr>
  3953. <td id="title" class="title" style="width: 70%">
  3954. Title
  3955. </td>
  3956. <td id="revision" class="title" style="width: 30%">
  3957. Revision
  3958. </td>
  3959. </tr>
  3960. <tr>
  3961. <td id="company">
  3962. Company
  3963. </td>
  3964. <td id="filedate">
  3965. Date
  3966. </td>
  3967. </tr>
  3968. </tbody>
  3969. </table>
  3970. </div>
  3971. <div id="bomcontrols">
  3972. <div class="hideonprint menu">
  3973. <button class="menubtn"></button>
  3974. <div class="menu-content">
  3975. <label class="menu-label menu-label-top" style="width: calc(50% - 18px)">
  3976. <input id="darkmodeCheckbox" type="checkbox" onchange="setDarkMode(this.checked)">
  3977. Dark mode
  3978. </label><!-- This comment eats space! All of it!
  3979. --><label class="menu-label menu-label-top" style="width: calc(50% - 17px); border-left: 0;">
  3980. <input id="fullscreenCheckbox" type="checkbox" onchange="setFullscreen(this.checked)">
  3981. Full Screen
  3982. </label>
  3983. <label class="menu-label" style="width: calc(50% - 18px)">
  3984. <input id="fabricationCheckbox" type="checkbox" checked onchange="fabricationVisible(this.checked)">
  3985. Fab layer
  3986. </label><!-- This comment eats space! All of it!
  3987. --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
  3988. <input id="silkscreenCheckbox" type="checkbox" checked onchange="silkscreenVisible(this.checked)">
  3989. Silkscreen
  3990. </label>
  3991. <label class="menu-label" style="width: calc(50% - 18px)">
  3992. <input id="referencesCheckbox" type="checkbox" checked onchange="referencesVisible(this.checked)">
  3993. References
  3994. </label><!-- This comment eats space! All of it!
  3995. --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
  3996. <input id="valuesCheckbox" type="checkbox" checked onchange="valuesVisible(this.checked)">
  3997. Values
  3998. </label>
  3999. <div id="tracksAndZonesCheckboxes">
  4000. <label class="menu-label" style="width: calc(50% - 18px)">
  4001. <input id="tracksCheckbox" type="checkbox" checked onchange="tracksVisible(this.checked)">
  4002. Tracks
  4003. </label><!-- This comment eats space! All of it!
  4004. --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
  4005. <input id="zonesCheckbox" type="checkbox" checked onchange="zonesVisible(this.checked)">
  4006. Zones
  4007. </label>
  4008. </div>
  4009. <label class="menu-label" style="width: calc(50% - 18px)">
  4010. <input id="padsCheckbox" type="checkbox" checked onchange="padsVisible(this.checked)">
  4011. Pads
  4012. </label><!-- This comment eats space! All of it!
  4013. --><label class="menu-label" style="width: calc(50% - 17px); border-left: 0;">
  4014. <input id="dnpOutlineCheckbox" type="checkbox" checked onchange="dnpOutline(this.checked)">
  4015. DNP outlined
  4016. </label>
  4017. <label class="menu-label">
  4018. <input id="dragCheckbox" type="checkbox" checked onchange="setRedrawOnDrag(this.checked)">
  4019. Continuous redraw on drag
  4020. </label>
  4021. <label class="menu-label">
  4022. Highlight first pin
  4023. <form id="highlightpin1">
  4024. <div class="flexbox">
  4025. <label>
  4026. <input type="radio" name="highlightpin1" value="none" onchange="setHighlightPin1('none')">
  4027. None
  4028. </label>
  4029. <label>
  4030. <input type="radio" name="highlightpin1" value="all" onchange="setHighlightPin1('all')">
  4031. All
  4032. </label>
  4033. <label>
  4034. <input type="radio" name="highlightpin1" value="selected" onchange="setHighlightPin1('selected')">
  4035. Selected
  4036. </label>
  4037. </div>
  4038. </form>
  4039. </label>
  4040. <label class="menu-label">
  4041. <span>Board rotation</span>
  4042. <span style="float: right"><span id="rotationDegree">0</span>&#176;</span>
  4043. <input id="boardRotation" type="range" min="-36" max="36" value="0" class="slider" oninput="setBoardRotation(this.value)">
  4044. </label>
  4045. <label class="menu-label">
  4046. <input id="offsetBackRotationCheckbox" type="checkbox" onchange="setOffsetBackRotation(this.checked)">
  4047. Offset back rotation
  4048. </label>
  4049. <label class="menu-label">
  4050. <div style="margin-left: 5px">Bom checkboxes</div>
  4051. <input id="bomCheckboxes" class="menu-textbox" type=text
  4052. oninput="setBomCheckboxes(this.value)">
  4053. </label>
  4054. <label class="menu-label">
  4055. <div style="margin-left: 5px">Mark when checked</div>
  4056. <div id="markWhenCheckedContainer"></div>
  4057. </label>
  4058. <label class="menu-label">
  4059. <span class="shameless-plug">
  4060. <span>Created using</span>
  4061. <a id="github-link" target="blank" href="https://github.com/openscopeproject/InteractiveHtmlBom">InteractiveHtmlBom</a>
  4062. <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>
  4063. </span>
  4064. </label>
  4065. </div>
  4066. </div>
  4067. <div class="button-container hideonprint">
  4068. <button id="fl-btn" class="left-most-button" onclick="changeCanvasLayout('F')"
  4069. title="Front only">F
  4070. </button>
  4071. <button id="fb-btn" class="middle-button" onclick="changeCanvasLayout('FB')"
  4072. title="Front and Back">FB
  4073. </button>
  4074. <button id="bl-btn" class="right-most-button" onclick="changeCanvasLayout('B')"
  4075. title="Back only">B
  4076. </button>
  4077. </div>
  4078. <div class="button-container hideonprint">
  4079. <button id="bom-btn" class="left-most-button" onclick="changeBomLayout('bom-only')"
  4080. title="BOM only"></button>
  4081. <button id="lr-btn" class="middle-button" onclick="changeBomLayout('left-right')"
  4082. title="BOM left, drawings right"></button>
  4083. <button id="tb-btn" class="right-most-button" onclick="changeBomLayout('top-bottom')"
  4084. title="BOM top, drawings bot"></button>
  4085. </div>
  4086. <div class="button-container hideonprint">
  4087. <button id="bom-grouped-btn" class="left-most-button" onclick="changeBomMode('grouped')"
  4088. title="Grouped BOM"></button>
  4089. <button id="bom-ungrouped-btn" class="middle-button" onclick="changeBomMode('ungrouped')"
  4090. title="Ungrouped BOM"></button>
  4091. <button id="bom-netlist-btn" class="right-most-button" onclick="changeBomMode('netlist')"
  4092. title="Netlist"></button>
  4093. </div>
  4094. <div class="hideonprint menu">
  4095. <button class="statsbtn"></button>
  4096. <div class="menu-content">
  4097. <table class="stats">
  4098. <tbody>
  4099. <tr>
  4100. <td width="40%">Board stats</td>
  4101. <td>Front</td>
  4102. <td>Back</td>
  4103. <td>Total</td>
  4104. </tr>
  4105. <tr>
  4106. <td>Components</td>
  4107. <td id="stats-components-front">~</td>
  4108. <td id="stats-components-back">~</td>
  4109. <td id="stats-components-total">~</td>
  4110. </tr>
  4111. <tr>
  4112. <td>Groups</td>
  4113. <td id="stats-groups-front">~</td>
  4114. <td id="stats-groups-back">~</td>
  4115. <td id="stats-groups-total">~</td>
  4116. </tr>
  4117. <tr>
  4118. <td>SMD pads</td>
  4119. <td id="stats-smd-pads-front">~</td>
  4120. <td id="stats-smd-pads-back">~</td>
  4121. <td id="stats-smd-pads-total">~</td>
  4122. </tr>
  4123. <tr>
  4124. <td>TH pads</td>
  4125. <td colspan=3 id="stats-th-pads">~</td>
  4126. </tr>
  4127. </tbody>
  4128. </table>
  4129. <table class="stats">
  4130. <col width="40%"/><col />
  4131. <tbody id="checkbox-stats">
  4132. <tr>
  4133. <td colspan=2 style="border-top: 0">Checkboxes</td>
  4134. </tr>
  4135. </tbody>
  4136. </table>
  4137. </div>
  4138. </div>
  4139. <div class="hideonprint menu">
  4140. <button class="iobtn"></button>
  4141. <div class="menu-content">
  4142. <div class="menu-label menu-label-top">
  4143. <div style="margin-left: 5px;">Save board image</div>
  4144. <div class="flexbox">
  4145. <input id="render-save-width" class="menu-textbox" type="text" value="1000" placeholder="Width"
  4146. style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
  4147. <span>X</span>
  4148. <input id="render-save-height" class="menu-textbox" type="text" value="1000" placeholder="Height"
  4149. style="flex-grow: 1; width: 50px;" oninput="validateSaveImgDimension(this)">
  4150. </div>
  4151. <label>
  4152. <input id="render-save-transparent" type="checkbox">
  4153. Transparent background
  4154. </label>
  4155. <div class="flexbox">
  4156. <button class="savebtn" onclick="saveImage('F')">Front</button>
  4157. <button class="savebtn" onclick="saveImage('B')">Back</button>
  4158. </div>
  4159. </div>
  4160. <div class="menu-label">
  4161. <span style="margin-left: 5px;">Config and checkbox state</span>
  4162. <div class="flexbox">
  4163. <button class="savebtn" onclick="saveSettings()">Export</button>
  4164. <button class="savebtn" onclick="loadSettings()">Import</button>
  4165. <button class="savebtn" onclick="resetSettings()">Reset</button>
  4166. </div>
  4167. </div>
  4168. <div class="menu-label">
  4169. <span style="margin-left: 5px;">Save bom table as</span>
  4170. <div class="flexbox">
  4171. <button class="savebtn" onclick="saveBomTable('csv')">csv</button>
  4172. <button class="savebtn" onclick="saveBomTable('txt')">txt</button>
  4173. </div>
  4174. </div>
  4175. </div>
  4176. </div>
  4177. </div>
  4178. </div>
  4179. <div id="topdivider">
  4180. <div class="hideonprint">
  4181. <div id="toptoggle" onclick="topToggle()">︽</div>
  4182. </div>
  4183. </div>
  4184. <div id="bot" class="split" style="flex: 1 1">
  4185. <div id="bomdiv" class="split split-horizontal">
  4186. <div style="width: 100%">
  4187. <input id="reflookup" class="textbox searchbox reflookup hideonprint" type="text" placeholder="Ref lookup"
  4188. oninput="updateRefLookup(this.value)">
  4189. <input id="filter" class="textbox searchbox filter hideonprint" type="text" placeholder="Filter"
  4190. oninput="updateFilter(this.value)">
  4191. <div class="button-container hideonprint" style="float: left; margin: 0;">
  4192. <button id="copy" title="Copy bom table to clipboard"
  4193. onclick="saveBomTable('clipboard')"></button>
  4194. </div>
  4195. </div>
  4196. <div id="dbg"></div>
  4197. <table class="bom" id="bomtable">
  4198. <thead id="bomhead">
  4199. </thead>
  4200. <tbody id="bombody">
  4201. </tbody>
  4202. </table>
  4203. </div>
  4204. <div id="canvasdiv" class="split split-horizontal">
  4205. <div id="frontcanvas" class="split" touch-action="none" style="overflow: hidden">
  4206. <div style="position: relative; width: 100%; height: 100%;">
  4207. <canvas id="F_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
  4208. <canvas id="F_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
  4209. <canvas id="F_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
  4210. <canvas id="F_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
  4211. </div>
  4212. </div>
  4213. <div id="backcanvas" class="split" touch-action="none" style="overflow: hidden">
  4214. <div style="position: relative; width: 100%; height: 100%;">
  4215. <canvas id="B_bg" style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
  4216. <canvas id="B_fab" style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
  4217. <canvas id="B_slk" style="position: absolute; left: 0; top: 0; z-index: 2;"></canvas>
  4218. <canvas id="B_hl" style="position: absolute; left: 0; top: 0; z-index: 3;"></canvas>
  4219. </div>
  4220. </div>
  4221. </div>
  4222. </div>
  4223. </div>
  4224. </body>
  4225. </html>