731731 <h2>GPS Tracks</h2>` ;
732732
733733 if ( trackList . length > 0 ) {
734+ html += `<input type="checkbox" id="select-all">`
734735 html += `<div class="accordion">` ;
735736 trackList . forEach ( ( track , index ) => {
736737 const trackData = trackLineToObject ( track . info . headers , track . info . l ) ;
@@ -910,11 +911,14 @@ <h2>Settings</h2>
910911 }
911912
912913 if ( trackList . length > 0 ) {
914+ const selectAll = document . querySelector ( "#select-all" ) ;
913915 const handleCheckboxCheck = ( ) => {
914916 const checkboxes = [ ...document . querySelectorAll ( ".download-checkbox" ) ] ;
915917 const batch = document . querySelector ( "#batch" ) ;
916918
917919 batch . classList . toggle ( "hidden" , ! checkboxes . some ( b => b . checked ) ) ;
920+ if ( checkboxes . every ( b => b . checked ) ) selectAll . checked = true ;
921+ else if ( checkboxes . every ( b => ! b . checked ) ) selectAll . checked = false ;
918922 } ;
919923
920924 document . querySelectorAll ( '.accordion-header' ) . forEach ( header => {
@@ -930,6 +934,14 @@ <h2>Settings</h2>
930934 . querySelector ( ".download-checkbox" )
931935 . addEventListener ( 'click' , handleCheckboxCheck ) ;
932936 } ) ;
937+
938+ selectAll . addEventListener ( "click" , e => {
939+ const checkboxes = [ ...document . querySelectorAll ( ".download-checkbox" ) ] ;
940+ const { checked } = e . target ;
941+
942+ for ( const b of checkboxes )
943+ b . checked = checked ;
944+ } ) ;
933945 }
934946
935947 document . getElementById ( "settings-allow-no-gps" ) . addEventListener ( "change" , event => {
0 commit comments