@@ -15,27 +15,52 @@ const fontWidth = 100 / (MAX_TRAINS_PER_DIRECTION * 1.5);
1515document . body . style . fontSize = `${ fontWidth } vw` ;
1616
1717document . addEventListener ( 'DOMContentLoaded' , ( ) => {
18- // Handle clicks anywhere in the document
19- document . addEventListener ( 'click' , ( event ) => {
20- const containers = document . querySelectorAll ( '.line-container' ) ;
21- const lines = document . querySelector ( '#lines' ) ;
22- const infoIcon = document . querySelector ( '.info-icon' ) ;
18+ const infoIcon = document . querySelector ( '.info-icon' ) ;
19+ const popupMenu = document . querySelector ( '.popup-menu' ) ;
20+ const titleToggle = document . getElementById ( 'titleToggle' ) ;
21+ const colourToggle = document . getElementById ( 'colourToggle' ) ;
22+ const lines = document . querySelector ( '#lines' ) ;
23+ const containers = document . querySelectorAll ( '.line-container' ) ;
24+
25+ // Show/hide popup when clicking info icon
26+ infoIcon . addEventListener ( 'click' , ( event ) => {
27+ event . preventDefault ( ) ; // Prevent navigation to about.html
28+ popupMenu . style . display = popupMenu . style . display === 'none' ? 'block' : 'none' ;
29+ } ) ;
30+
31+ // Handle toggle switch changes
32+ titleToggle . addEventListener ( 'change' , ( ) => {
33+ const shouldShow = titleToggle . checked ;
2334
24- // Don't toggle if clicking directly on the info icon
25- if ( ! event . target . closest ( '.info-icon' ) ) {
26- // Toggle show-titles class on containers and info icon
27- const shouldShow = ! lines . classList . contains ( 'show-titles' ) ;
28-
29- containers . forEach ( c => {
30- if ( shouldShow ) {
31- c . classList . add ( 'show-titles' ) ;
32- } else {
33- c . classList . remove ( 'show-titles' ) ;
34- }
35- } ) ;
36-
37- lines . classList . toggle ( 'show-titles' ) ;
38- infoIcon . classList . toggle ( 'show-titles' ) ;
35+ containers . forEach ( c => {
36+ if ( shouldShow ) {
37+ c . classList . add ( 'show-titles' ) ;
38+ } else {
39+ c . classList . remove ( 'show-titles' ) ;
40+ }
41+ } ) ;
42+
43+ if ( shouldShow ) {
44+ lines . classList . add ( 'show-titles' ) ;
45+ infoIcon . classList . add ( 'show-titles' ) ;
46+ } else {
47+ lines . classList . remove ( 'show-titles' ) ;
48+ infoIcon . classList . remove ( 'show-titles' ) ;
49+ }
50+ } ) ;
51+
52+ colourToggle . addEventListener ( 'change' , ( ) => {
53+ if ( colourToggle . checked ) {
54+ document . body . classList . add ( 'colourblind' ) ;
55+ } else {
56+ document . body . classList . remove ( 'colourblind' ) ;
57+ }
58+ } ) ;
59+
60+ // Close popup when clicking outside
61+ document . addEventListener ( 'click' , ( event ) => {
62+ if ( ! event . target . closest ( '.icon' ) ) {
63+ popupMenu . style . display = 'none' ;
3964 }
4065 } ) ;
4166} ) ;
0 commit comments