PageSourceSearch

https://accessibility.day/wp-content/themes/gaadRedesign/js/contactForm7Timezone.js?ver=1695774721

js accessibility.day collected 2026-09-24 08:29:00 UTC 5,117 bytes, 137 lines download raw bytes

1(function ($) {
2    $.ContactForm7Timezone = function () {
3        const self = this;
4        self.countries = moment.tz.countries();
5        self.allTimezones = moment.tz.names();
6        self.allCountrysTimezones = {};
7        self.usersTimezone = moment.tz.guess();
8        self.usersCountry = '';
9
10        $.each(self.countries, function(index, value) {
11            
12            let country = {
13                code: value,
14                name: '',
15                timezones: moment.tz.zonesForCountry(value)
16            };
17            self.allCountrysTimezones[value] = country;
18        });
19
20        return self;
21    };
22
23    $.ContactForm7Timezone.prototype = {
24        /**
25         * grab the names of countries and display the timezones
26         */
27
28        init: function() {
29            const self = this;
30
31            // get list of country names
32            $.ajax({
33                url: "https://restcountries.com/v2/all?fields=name,alpha2Code"
34            }).then(function(data) {
35                $.each(data, function(index, value) {
36                    let name = value.name;
37                    let code = value.alpha2Code;
38                    if(self.allCountrysTimezones[code]) {
39                        self.allCountrysTimezones[code].name = name;
40                    }
41                });
42                self.displayTimezones();
43                return true;
44            });
45            
46            return false;
47        }, 
48        /**
49         * get array of timezones in user's country
50         * 
51         * @param timezone
52         */
53
54        getUsersCountrysTimezones: function (timezone) {
55            const self = this;
56            let usersCountrysTimezones = [];
57    
58            // build country-specific list based on user's location
59            $.each(self.allCountrysTimezones, function(key, value) {
60                if(value.timezones.includes(timezone)) {
61                    self.usersCountry = value.name;
62                    self.usersCountrysTimezones = value.timezones;
63
64                    return false;
65                }
66            });
67            
68            return self.usersCountrysTimezones;
69        },
70        /**
71         * populate timezone select field with timezones relevant to user's country
72         * 
73         * @param timezones
74         * @param form
75         * @param formField 
76         */
77        populateTimezoneDropdown: function(timezones, form, formField) {
78            const self = this;
79            let dropdownOptions = '<option value="none">No Timezone</option>';
80    
81            // populate field with these timezones
82            $.each(timezones, function(key, value) {
83                dropdownOptions += '<option value=' + value + '>' + value + '</option>';
84            });
85    
86            // tether to specific form (or related country dropdown)
87            $('#' + form + ' #' + formField).html(dropdownOptions);
88    
89            // if user's timezone exists in selected country, set to selected
90            if(timezones.includes(self.usersTimezone)) {
91                $('#' + form + ' #' + formField).val(self.usersTimezone);
92            }
93        },
94        /** 
95         * Display timezones form field per user's location (country)
96         */
97        displayTimezones: function(){
98            const self = this;
99
100            // deduce user's country location
101            const usersCountrysTimezones = self.getUsersCountrysTimezones(self.usersTimezone);
102    
103            // each instance of timezone dropdown connected to a country dropdown
104            $('.timezone-country').each(function(index) {
105                let formId = '';
106                if(!$(this).parents('form').attr('id')) {
107                    let form = $(this).parents('form').attr('id', 'form-' + (index + 1));
108                    formId = form.attr('id');
109                } else {
110                    // if form already has ID, then form has multiple timezone dropdowns
111                    // use existing formId
112                    formId = $(this).parents('form').attr('id')
113                }
114    
115                const countryField = $(this).val();
116                const timezoneField = $(this).prev().children('select').attr('id');
117    
118                self.populateTimezoneDropdown(usersCountrysTimezones, formId, timezoneField);
119    
120                // change country & timezone fields to reflect user's location
121                $('#' + formId + ' #' + countryField).val(self.usersCountry);
122    
123                // add event listener to country select
124                $('#' + formId + ' #' + countryField).change(function() {
125                    let countryName = $(this).children(' option:selected').val();
126                    $.each(self.allCountrysTimezones, function(key, value) {
127                        if(value.name == countryName) {
128                            self.populateTimezoneDropdown(self.allCountrysTimezones[value.code].timezones, formId, timezoneField);
129                            
130                            return false;
131                        }
132                    })
133                });
134            });
135        }
136    };
137}(jQuery));

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.