1/* ------------------ */ 2/* Radio Clock Script */ 3/* ------------------ */ 4 5/* Convert Date Time to Time String */ 6function radio_time_string(datetime, hours, seconds, override) { 7 8 if (override) { 9 isostring = datetime.toISOString(); 10 h = parseInt(isostring.substr(11,2)); 11 m = parseInt(isostring.substr(14,2)); 12 } else { 13 h = datetime.getHours(); 14 m = datetime.getMinutes(); 15 } 16 17 if (seconds) { 18 if (override) {s = parseInt(isostring.substr(17,2));} 19 else {s = datetime.getSeconds();} 20 if (s < 10) {s = '0'+s;} 21 } 22 23 if (m < 10) {m = '0'+m;} 24 if (hours == 12) { 25 if ( h < 12 ) {mer = radio.units.am;} 26 if ( h > 11 ) {mer = radio.units.pm;} 27 if ( h == 0 ) {h = '12'; mer = radio.units.am;} 28 if ( h > 12 ) {h = h - 12;} 29 } else { 30 mer = ''; 31 if ( h < 10 ) {h = '0'+h;} 32 } 33 34 timestring = '<span class="rs-hour">'+h+'</span>'; 35 timestring += '<span class="rs-sep rs-time-sep">'+radio.sep+'</span>'; 36 timestring += '<span class="rs-minutes">'+m+'</span>'; 37 if (seconds) { 38 timestring += '<span class="rs-sep rs-time-sep">'+radio.sep+'</span>'; 39 timestring += '<span class="rs-seconds">'+s+'</span>'; 40 } 41 if (mer != '') {timestring += ' <span class="rs-meridiem">'+mer+'</span>';} 42 return timestring; 43} 44 45/* Convert Date Time to Date String */ 46function radio_date_string(datetime, day, date, month, override) { 47 if (override) { 48 isostring = datetime.toISOString(); 49 m = parseInt(isostring.substr(5,2)) - 1; 50 dd = parseInt(isostring.substr(8,2)); 51 d = datetime.getDay(); /* TODO */ 52 } else { 53 d = datetime.getDay(); 54 m = datetime.getMonth(); 55 dd = datetime.getDate(); 56 } 57 datestring = ''; 58 if (day != '') { 59 if (day == 'short') {datestring = radio.labels.sdays[d];} 60 else {datestring += radio.labels.days[d];} 61 } 62 if (date) {datestring += ' '+dd;} 63 if (month != '') { 64 if (month == 'short') {datestring += ' '+radio.labels.smonths[m];} 65 else {datestring += ' '+radio.labels.months[m];} 66 } 67 return datestring; 68} 69 70/* Update Current Time Clock */ 71function radio_clock_date_time() { 72 73 if (radio_clock_init) {init = false;} 74 else {init = true; radio_clock_init = true;} 75 76 /* user datetime / timezone */ 77 userdatetime = new Date(); 78 useroffset = -(userdatetime.getTimezoneOffset()); 79 if (typeof jstz == 'function') {userzone = jstz.determine().name();} 80 else {userzone = Intl.DateTimeFormat().resolvedOptions().timeZone;} 81 82 /* server datetime / offset */ 83 serverdatetime = new Date(); 84 serveroffset = ( -(useroffset) * 60) + radio.timezone.offset; 85 serverdatetime.setTime(userdatetime.getTime() + (serveroffset * 1000)); 86 87 /* get timezone override */ 88 override = false; 89 if (typeof radio_timezone_override == 'function') { 90 override = radio_timezone_override(); 91 if (radio.clock_debug) {console.log('User Timezone Selection Override: '+override);} 92 if (override) { 93 userzone = override; 94 offset = radio_offset_override(false); 95 userdatetime.setTime(userdatetime.getTime() + (offset * 60 * 1000)); 96 useroffset = offset; 97 } 98 } 99 100 /* loop clock instances */ 101 clock = document.getElementsByClassName('radio-station-clock'); 102 for (i = 0; i < clock.length; i++) { 103 if (clock[i]) { 104 classes = clock[i].className; 105 seconds = false; day = ''; date = false; month = ''; zone = false; 106 if (classes.indexOf('format-24') > -1) {hours = 24;} else {hours = 12;} 107 if (classes.indexOf('seconds') > -1) {seconds = true;} 108 if (classes.indexOf('day') > -1) { 109 if (classes.indexOf('day-short') > -1) {day = 'short';} else {day = 'full';} 110 } 111 if (classes.indexOf('date') > -1) {date = true;} 112 if (classes.indexOf('month') > -1) { 113 if (classes.indexOf('month-short') > -1) {month = 'short';} else {month = 'full';} 114 } 115 if (classes.indexOf('zone') > -1) {zone = true;} 116 servertime = radio_time_string(serverdatetime, hours, seconds, false); 117 serverdate = radio_date_string(serverdatetime, day, date, month, false); 118 usertime = radio_time_string(userdatetime, hours, seconds, override); 119 userdate = radio_date_string(userdatetime, day, date, month, override); 120 121 /* loop server / user clocks */ 122 clocks = clock[i].children; 123 for (j = 0; j < clocks.length; j++) { 124 if (clocks[j]) { 125 classes = clocks[j].className; 126 127 /* update server clock */ 128 if (classes.indexOf('radio-station-server-clock') > -1) { 129 divs = clocks[j].children; 130 for (k = 0; k < divs.length; k++) { 131 if ((divs[k].className == 'radio-server-time') && (divs[k].innerHTML != servertime)) {divs[k].innerHTML = servertime;} 132 else if ((divs[k].className == 'radio-server-date') && (divs[k].innerHTML != serverdate)) {divs[k].innerHTML = serverdate;} 133 else if (init && zone && (divs[k].className == 'radio-server-zone')) { 134 /* server timezone */ 135 format = divs[k].getAttribute('data-format'); f = format.split('-'); 136 serverzone = radio.timezone.location; szone = ''; 137 serverzone = serverzone.replace('_',' '); parts = serverzone.split('/'); 138 if (typeof radio.timezone.code != 'undefined') {code = radio.timezone.code} else {code = '';} 139 if ((f[0] == '1') && (code != '')) {szone += code+' ';} 140 if ((f[3] == '1') && radio.timezone.utczone) { 141 szone += ' [UTC'+radio.timezone.utc+']'; 142 } else { 143 if ((f[1] == '1') || (f[2] == '1')) { 144 if ((f[0] == '1') && (code != '')) {szone += '(';} 145 if (f[2] == '1') {szone += parts[1];} 146 if ((f[1] == '1') && (f[2] == '1')) {szone += ', ';} 147 if (f[1] == '1') {szone += parts[0];} 148 if ((f[0] == '1') && (code != '')) {szone += ')';} 149 } 150 if (f[3] == '1') {szone += ' ['+radio.timezone.utc+']';} 151 } 152 if (divs[k].innerHTML != szone) {divs[k].innerHTML = szone;} 153 } 154 } 155 } 156 157 /* update user clock */ 158 if (classes.indexOf('radio-station-user-clock') > -1) { 159 divs = clocks[j].children; 160 for (k = 0; k < divs.length; k++) { 161 if ((divs[k].className == 'radio-user-time') && (divs[k].innerHTML != usertime)) {divs[k].innerHTML = usertime;} 162 else if ((divs[k].className == 'radio-user-date') && (divs[k].innerHTML != userdate)) {divs[k].innerHTML = userdate;} 163 else if (init && zone && (divs[k].className == 'radio-user-zone')) { 164 /* user timezone offset */ 165 format = divs[k].getAttribute('data-format'); f = format.split('-'); 166 code = radio_timezone_code(userzone); /* console.log(code); */ 167 /* console.log(radio.timezone.zonename_override); */ 168 if ((typeof radio.timezone.zonename_override != 'undefined') && radio.timezone.zonename_override) {code = radio.timezone.zonename_override;} 169 uzone = userzone.replace('_',' '); parts = uzone.split('/'); 170 uzone = ''; 171 if ((f[0] == '1') && (code != '')) {uzone += code+' ';} 172 if ((f[1] == '1') || (f[2] == '1')) { 173 if ((f[0] == '1') && (code != '')) {uzone += '(';} 174 if (f[2] == '1') {uzone += parts[1];} 175 if ((f[1] == '1') && (f[2] == '1')) {uzone += ', ';} 176 if (f[1] == '1') {uzone += parts[0];} 177 if ((f[0] == '1') && (code != '')) {uzone += ')';} 178 } 179 if (f[3] == '1') { 180 houroffset = parseInt(useroffset); 181 if (houroffset == 0) {uzone += ' [UTC]';} 182 else { 183 houroffset = houroffset / 60; 184 if (houroffset > 0) {uzone += ' [UTC+'+houroffset+']';} 185 else {uzone += ' [UTC'+houroffset+']';} 186 } 187 } 188 if (divs[k].innerHTML != uzone) {divs[k].innerHTML = uzone;} 189 } 190 } 191 } 192 } 193 } 194 } 195 } 196 197 /* clock loop */ 198 setTimeout(radio_clock_date_time, 1000); 199 return true; 200} 201 202/* Start the Clock */ 203var radio_clock_init = false;
204setTimeout(radio_clock_date_time, 1000);
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.