@@ -146,6 +146,7 @@ function createCheckboxChangeHandler(checkbox, references) {
146
146
}
147
147
}
148
148
writeStorage ( "checkbox_" + checkbox , [ ...refsSet ] . join ( "," ) ) ;
149
+ updateCheckboxStats ( checkbox ) ;
149
150
}
150
151
}
151
152
@@ -300,7 +301,6 @@ function populateBomHeader() {
300
301
var th = document . createElement ( "TH" ) ;
301
302
th . classList . add ( "numCol" ) ;
302
303
tr . appendChild ( th ) ;
303
- checkboxes = bomCheckboxes . split ( "," ) . filter ( ( e ) => e ) ;
304
304
var checkboxCompareClosure = function ( checkbox ) {
305
305
return ( a , b ) => {
306
306
var stateA = getCheckboxState ( checkbox , a [ 3 ] ) ;
@@ -548,6 +548,38 @@ function populateMetadata() {
548
548
if ( pcbdata . metadata . title != "" ) {
549
549
document . title = pcbdata . metadata . title + " BOM" ;
550
550
}
551
+ var fp_f = 0 , fp_b = 0 , pads_f = 0 , pads_b = 0 , pads_th = 0 ;
552
+ for ( var i = 0 ; i < pcbdata . modules . length ; i ++ ) {
553
+ if ( pcbdata . bom . skipped . includes ( i ) ) continue ;
554
+ var mod = pcbdata . modules [ i ] ;
555
+ if ( mod . layer == "F" ) {
556
+ fp_f ++ ;
557
+ } else {
558
+ fp_b ++ ;
559
+ }
560
+ for ( var pad of mod . pads ) {
561
+ if ( pad . type == "th" ) {
562
+ pads_th ++ ;
563
+ } else {
564
+ if ( pad . layers . includes ( "F" ) ) {
565
+ pads_f ++ ;
566
+ }
567
+ if ( pad . layers . includes ( "B" ) ) {
568
+ pads_b ++ ;
569
+ }
570
+ }
571
+ }
572
+ }
573
+ document . getElementById ( "stats-components-front" ) . innerHTML = fp_f ;
574
+ document . getElementById ( "stats-components-back" ) . innerHTML = fp_b ;
575
+ document . getElementById ( "stats-components-total" ) . innerHTML = fp_f + fp_b ;
576
+ document . getElementById ( "stats-groups-front" ) . innerHTML = pcbdata . bom . F . length ;
577
+ document . getElementById ( "stats-groups-back" ) . innerHTML = pcbdata . bom . B . length ;
578
+ document . getElementById ( "stats-groups-total" ) . innerHTML = pcbdata . bom . both . length ;
579
+ document . getElementById ( "stats-smd-pads-front" ) . innerHTML = pads_f ;
580
+ document . getElementById ( "stats-smd-pads-back" ) . innerHTML = pads_b ;
581
+ document . getElementById ( "stats-smd-pads-total" ) . innerHTML = pads_f + pads_b ;
582
+ document . getElementById ( "stats-th-pads" ) . innerHTML = pads_th ;
551
583
}
552
584
553
585
function changeBomLayout ( layout ) {
@@ -664,9 +696,49 @@ function checkBomCheckbox(bomrowid, checkboxname) {
664
696
function setBomCheckboxes ( value ) {
665
697
bomCheckboxes = value ;
666
698
writeStorage ( "bomCheckboxes" , value ) ;
699
+ prepCheckboxes ( ) ;
667
700
populateBomTable ( ) ;
668
701
}
669
702
703
+ function prepCheckboxes ( ) {
704
+ checkboxes = bomCheckboxes . split ( "," ) . filter ( ( e ) => e ) ;
705
+ var table = document . getElementById ( "checkbox-stats" ) ;
706
+ while ( table . childElementCount > 1 ) {
707
+ table . removeChild ( table . lastChild ) ;
708
+ }
709
+ if ( checkboxes . length ) {
710
+ table . style . display = "" ;
711
+ } else {
712
+ table . style . display = "none" ;
713
+ }
714
+ for ( var checkbox of checkboxes ) {
715
+ var tr = document . createElement ( "TR" ) ;
716
+ var td = document . createElement ( "TD" ) ;
717
+ td . innerHTML = checkbox ;
718
+ tr . appendChild ( td ) ;
719
+ td = document . createElement ( "TD" ) ;
720
+ td . id = "checkbox-stats-" + checkbox ;
721
+ var progressbar = document . createElement ( "div" ) ;
722
+ progressbar . classList . add ( "bar" ) ;
723
+ td . appendChild ( progressbar ) ;
724
+ var text = document . createElement ( "div" ) ;
725
+ text . classList . add ( "text" ) ;
726
+ td . appendChild ( text ) ;
727
+ tr . appendChild ( td ) ;
728
+ table . appendChild ( tr ) ;
729
+ updateCheckboxStats ( checkbox ) ;
730
+ }
731
+ }
732
+
733
+ function updateCheckboxStats ( checkbox ) {
734
+ var checked = getStoredCheckboxRefs ( checkbox ) . size ;
735
+ var total = pcbdata . modules . length - pcbdata . bom . skipped . length ;
736
+ var percent = checked * 100.0 / total ;
737
+ var td = document . getElementById ( "checkbox-stats-" + checkbox ) ;
738
+ td . firstChild . style . width = percent + "%" ;
739
+ td . lastChild . innerHTML = checked + "/" + total + " (" + Math . round ( percent ) + "%)" ;
740
+ }
741
+
670
742
document . onkeydown = function ( e ) {
671
743
switch ( e . key ) {
672
744
case "n" :
@@ -820,6 +892,7 @@ window.onload = function(e) {
820
892
filter = "" ;
821
893
reflookup = "" ;
822
894
initDone = true ;
895
+ prepCheckboxes ( ) ;
823
896
// Triggers render
824
897
changeBomLayout ( bomlayout ) ;
825
898
}
0 commit comments