1( function( $, Drupal, drupalSettings ) { 2 $(document).ready(function () { 3 4 const EMPTY_ROW = '<tr class="episode-row selected-day processing empty-row" >' + 5 '<td class="time-column"></td>' + 6 '<td class="title-column">Schedule Information Coming Soon</td>' + 7 '</tr>'; 8 9 //add empty row 10 function addEmptyTimeslots(){ 11 var selectedRows = $('.episode-row.selected-day'); 12 for (var i=0;i<selectedRows.length - 1;i++) { 13 var endTimestamp = new Date ($(selectedRows[i]).data('timestamp-end-utc')); 14 var startTimestamp = new Date ($(selectedRows[i+1]).data('timestamp-utc')); 15 var diff = (startTimestamp - endTimestamp) / 1000 / 60; // in minutes 16 if ( diff > 10 && $(selectedRows[i+1]).data('timestamp-utc') != $(selectedRows[i]).data('timestamp-utc')){ 17 $(selectedRows[i]).after(EMPTY_ROW); 18 } 19 } 20 } 21 22 function convertToTimezone(time, fromTimezone, toTimezone, date) { 23 var nowDate = moment(date).tz(toTimezone).format('l'); 24 return moment.tz( nowDate + ' ' + time, fromTimezone).tz(toTimezone); 25 } 26 27 function scrollToScheduleActiveItem(isCustomTime) { 28 if ($('#schedule-table-wrapper').length) { 29 var tableWrapper = $('#schedule-table-wrapper'); 30 if (isCustomTime && window.location.href.split('time=')[1]) { 31 var time = window.location.href.split('time=')[1].toLowerCase(); 32 var episodeRow = tableWrapper.find('.episode-row.selected-day[data-time="' + time + '"]'); 33 if (episodeRow.length) { 34 tableWrapper.animate({scrollTop: episodeRow.position().top}, 600); 35 setTimeout(function() { 36 $('.active').trigger('click'); 37 }, 100); 38 } 39 } else if ($('#schedule-table-wrapper .active').length) { 40 tableWrapper.animate({ scrollTop: tableWrapper.find('.active').position().top }, 600); 41 setTimeout(function() { 42 $('.active').trigger('click'); 43 }, 100); 44 } 45 } 46 } 47 48 function updateScheduleItemsTimestamps(timezone) { 49 $('.upcoming-schedule-section .schedule-item').each( function(){ 50 var scheduleItem = $(this); 51 var timestamp = moment(scheduleItem.attr('data-timestamp-utc')); 52 timestamp = timezone ? timestamp.tz(timezone) : timestamp; 53 scheduleItem.find('.schedule-date').text(timestamp.format('dddd, MMM Do')); 54 scheduleItem.find('.schedule-time').text(timestamp.format('LT')); 55 }); 56 } 57 58 function updateRecentEpisodesTimestamps(timezone) { 59 $('#episodes-slider .episode-time:not(.program-recent)').each( function(){ 60 var scheduleItem = $(this); 61 var timestamp = moment(scheduleItem.attr('data-timestamp')).tz('UTC'); 62 scheduleItem.text(formatEpisodesTimestamp(timestamp, timezone)); 63 }); 64 } 65 66 function updateFeaturedEpisodeTimestamp(timezone) { 67 $('.featured-episode-section .episode-time:not(.program-feature)').each( function(){ 68 var scheduleItem = $(this); 69 var timestamp = moment(scheduleItem.attr('data-timestamp')).tz('UTC'); 70 scheduleItem.text(formatEpisodesTimestamp(timestamp, timezone)); 71 }); 72 } 73 74 function formatEpisodesTimestamp (timestamp, timezone){ 75 timestamp = timezone ? timestamp.tz(timezone) : timestamp; 76 return timestamp.format('MMM, D YYYY') + ' at ' + timestamp.format('h:mm a'); 77 } 78 79 function setDaySchedule(time) { 80 var defaultTimezone = "America/Los_Angeles"; 81 var currentTimezone = moment.tz.guess(); 82 var now = moment(time); 83 var nowRowIndex = null; 84 var scheduleTable = $('#schedule-table-wrapper .schedule-table'); 85 scheduleTable.html(''); 86 var scheduleItems = {}; 87 var currentTime = moment(); 88 $('#scroll-to-active').addClass('not-today'); 89 $('#schedule-days-wrapper .go-to-today').removeClass('disable'); 90 $.each($('#block-views-block-programs-list .views-row'), function (index, row){ 91 var episodeTime = convertToTimezone($(row).find('.episode-time').text().replace(/\s/g, ''), defaultTimezone, currentTimezone, now); 92 var nextEpisodeTime = convertToTimezone($('#block-views-block-programs-list .views-row').eq(index + 1).find('.episode-time').text().replace(/\s/g, ''), defaultTimezone, currentTimezone); 93 if ($(row).find('.episode-days').text().includes(episodeTime.format('dddd'))) { 94 var episodeItem = ''; 95 if (!nowRowIndex && episodeTime.isBefore(currentTime) && currentTime.isBefore(nextEpisodeTime) && currentTime.format('MM DD') == episodeTime.format('MM DD')) { 96 nowRowIndex = index; 97 $('#scroll-to-active').removeClass('not-today'); 98 $('#schedule-days-wrapper .go-to-today').addClass('disable'); 99 episodeItem = '<tr class="active" id="active-item">' + 100 '<td class="time-column">' + episodeTime.format('LT') + '</td>' + 101 ' <td class="title-column">' + 102 ' <a href="https://watch.tbn.org/p/wUwJ86KF?channel=OZpATbsP" class="btn red">Watch Now</a>' + 103 $(row).find('.episode-title').html() + 104 ' <span class="description">' + $(row).find('.episode-description').html() + '</span>' +
105 ' </td>' + 106 '</tr>'; 107 } else { 108 episodeItem = '<tr>' + 109 '<td class="time-column">' + episodeTime.format('LT') + '</td>' + 110 '<td class="title-column">' + $(row).find('.episode-title').html() + '</td>' + 111 '</tr>'; 112 } 113 scheduleItems[episodeTime.format('LT')] = episodeItem; 114 } 115 }); 116 var timeStamps = Object.keys(scheduleItems); 117 timeStamps.sort(); 118 for(var i=0; i < timeStamps.length; i++){ 119 scheduleTable.append(scheduleItems[timeStamps[i]]); 120 } 121 } 122 123 function showCurrentDaySchedule(date, timezone) { 124 $('#schedule-table-wrapper tr.selected-day').removeClass('selected-day'); 125 $('#schedule-table-wrapper tr.active').removeClass('active').find('.watch-now, .description').remove(); 126 $('#scroll-to-active').addClass('not-today'); 127 var selectedDayItem = $('#schedule-table-wrapper tr[data-date="' + date + '"]'); 128 129 if (selectedDayItem.length) { 130 var now = timezone ? moment().tz(timezone) : moment(); 131 if (now.format('YYYY-MM-DD') == date) { 132 selectedDayItem.each(function (index) { 133 var timeRow = $(this); 134 if (now.format('YYYY-MM-DDTHH:mm:ss') >= timeRow.attr('data-timestamp') && (selectedDayItem.length == index + 1 || now.format('YYYY-MM-DDTHH:mm:ss') < $(selectedDayItem.get(index + 1)).attr('data-timestamp'))) { 135 timeRow.addClass('active'); 136 $('#scroll-to-active').removeClass('not-today'); 137 var activeTitle = timeRow.find('.title-column'); 138 if (!activeTitle.find('.watch-now').length) { 139 // activeTitle.prepend('<a href="' + $(this).attr("data-program-url") + '" class="btn red watch-now">Watch Now</a>'); 140 activeTitle.prepend('<a href="https://watch.tbn.org/p/wUwJ86KF?channel=OZpATbsP" class="btn red watch-now">Watch Now</a>'); 141 activeTitle.append('<span class="description">' + timeRow.attr("data-synopsis") + '</span>'); 142 } 143 } 144 // timeRow.find('.time-column .clickable').text(moment(timeRow.attr('data-timestamp-utc') + '+0000').format('h:mm A')); 145 }); 146 } 147 selectedDayItem.addClass('selected-day'); 148 addEmptyTimeslots(); 149 } else { 150 if ($('#schedule-table-wrapper .empty-row').length) { 151 $('#schedule-table-wrapper .empty-row').addClass('selected-day'); 152 } else { 153 $('#schedule-table-wrapper tbody').first().append(EMPTY_ROW); 154 } 155 } 156 } 157 158 function setDays(date){ 159 var daysWrapper = $('#schedule-days-wrapper'); 160 var currentDate = moment(date); 161 var today = moment().format('L'); 162 daysWrapper.find('.day-of-week').remove(); 163 for (var i = 0; i < 7; i++) { 164 var classes = 'day-of-week'; 165 var isToday = false; 166 if (currentDate.format('L') === today) { 167 classes += ' today'; 168 isToday = true; 169 } 170 switch (i) { 171 case 0: { 172 classes+=' first active'; 173 break; 174 } 175 case 6: { 176 classes+=' last'; 177 break; 178 } 179 } 180 dayItem = '<a href="#' + currentDate.format('YYYY-MM-DDTH:mm:ss') + '" data-date="' + currentDate.format('YYYY-MM-DD') + '" class="' + classes + '">' + 181 '<span class="day-name">' + ((isToday) ? 'Today' : currentDate.format('dddd')) + '</span>' + 182 '<span class="date">' + currentDate.format('MMM D') + '</span>' + 183 '</a>'; 184 daysWrapper.append(dayItem); 185 currentDate.add('days', 1); 186 } 187 daysWrapper.find('.day-controls').appendTo(daysWrapper); 188 } 189 190 //convert timestamps to user timezone on Schedule block (Home page) 191 // function updateScheduleBlockTimestamps() { 192 193 // if (drupalSettings.tbnSchedule !== undefined) { 194 // var events = JSON.parse(drupalSettings.tbnSchedule.events); 195 // $('#schedule-section-block .episode-time, .fixed-schedule .episode-time').each(function (i) { 196 197 // if (events[i] !== undefined && events[i].timestamp !== undefined) { 198 // var time = moment.unix(events[i].timestamp).tz('UTC').tz(moment.tz.guess()).format('h:mm A'); 199 // $(this).text(time); 200 // $(this).next('.episode-title').html(events[i].title); 201 // } 202 // }); 203 // } 204 // } 205 206 //update schedule items to user timezone on Schedule table 207 function updateScheduleTableTimestamps(timezone){ 208 $('#schedule-table-wrapper .episode-row').each(function() { 209 var episodeItem = $(this); 210 var episodeTime = moment(episodeItem.data('timestamp-utc')+ '+0000'); 211 if (timezone) { 212 episodeTime.tz(timezone); 213 } 214 var episodeItemTimeFormat = (episodeTime.format('mm') === '00') ? 'ha': 'h:mma'; 215 episodeItem 216 .attr('data-timestamp', episodeTime.format('YYYY-MM-DDTHH:mm:ss')) 217 .attr('data-date', episodeTime.format('YYYY-MM-DD')) 218 .attr('data-time', episodeTime.format(episodeItemTimeFormat)) 219 .find('.time-column span').text(episodeTime.format('h:mm A')); 220 }); 221 } 222 223 //function get moment timestamp 224 function getMomentTimestamp(){ 225 var url = new URL(window.location.href); 226 var searchParams = new URLSearchParams(url.search); 227 var date = searchParams.get('date'); 228 return /\d{4}\-\d{2}\-\d{2}/.test(date) ? moment(date) : moment(); 229 } 230 231 // toggle Now button on schedule table 232 $('#schedule-table-wrapper').scroll(function(){ 233 if ($('.today.active').length) { 234 var tableWrapper = $('#schedule-table-wrapper'); 235 var tableScrollPosition = tableWrapper.scrollTop(); 236 var activeRowPosition = tableWrapper.find('.active').position().top; 237 if 238 (tableScrollPosition + tableWrapper.height() >= activeRowPosition && 239 (tableScrollPosition < activeRowPosition + tableWrapper.find('.active').height() ) 240 ){ 241 $('#scroll-to-active').addClass('hidden'); 242 } else { 243 $('#scroll-to-active').removeClass('hidden'); 244 } 245 } else { 246 $('#scroll-to-active').removeClass('hidden'); 247 } 248 }); 249 250 // OLD 251 //set schedule programs on Home page 252 // if($('#block-views-block-programs-list').length ){ 253 // var defaultTimezone = "America/Los_Angeles"; 254 // var currentTimezone = moment.tz.guess(); 255 // var now = moment(); 256 // var nowRowIndex = null; 257 // $.each($('#block-views-block-programs-list .views-row'), function (index, row){ 258 // var episodeTime = convertToTimezone($(row).find('.episode-time').text().replace(/\s/g, ''), defaultTimezone, currentTimezone); 259 // var nextEpisodeTime = convertToTimezone($('#block-views-block-programs-list .views-row').eq(index + 1).find('.episode-time').text().replace(/\s/g, ''), defaultTimezone, currentTimezone); 260 // if( episodeTime.isBefore(now) && now.isBefore(nextEpisodeTime)){ 261 // nowRowIndex = index; 262 // return; 263 // } 264 // }); 265 // for (var i=0; i<=2; i++){ 266 // var row = $('#block-views-block-programs-list .views-row').eq(nowRowIndex + i
266); 267 // var episodeWrapper = (i === 0) ? $('.schedule-section .now-block') : $('.schedule-section .episode-wrapper').eq(i-1); 268 // var episodeTime = convertToTimezone(row.find('.episode-time').text().replace(/\s/g, ''), defaultTimezone, currentTimezone); 269 // episodeWrapper.find('.episode-title').html(row.find('.episode-title').html()); 270 // episodeWrapper.find('.episode-time').html(episodeTime.format('LT')); 271 // episodeWrapper.find('.episode-description').html(row.find('.episode-description').html()); 272 // } 273 // } 274 275 //scroll to online program on schedule page 276 // scrollToScheduleActiveItem(); 277 278 $('#scroll-to-active').on('click', function(event){ 279 event.preventDefault(); 280 if ($(this).hasClass('not-today')) { 281 $('#schedule-days-wrapper .day-of-week.today').click(); 282 } 283 scrollToScheduleActiveItem(); 284 }); 285 286 287 if ($('.timezone-dropdown').length){ 288 var timezone = $('.timezone-dropdown option').first().val(); 289 var needleTimeOption = ''; 290 if (window.location.href.split('timezone=')[1]){ 291 needleTimeOption = $('.timezone-dropdown option:contains("' + window.location.href.split('timezone=')[1].slice(1) + '")'); 292 timezone = needleTimeOption.val(); 293 } else { 294 // var currentOffset = moment().parseZone().utcOffset()/60; 295 var currentTimeZone = moment.tz.guess(); 296 needleTimeOption = $('.timezone-dropdown option[data-value*="' + moment().tz(moment.tz.guess()).format('z') + '"]'); 297 298 if (!needleTimeOption.length) { 299 timezone = currentTimeZone; 300 $('.timezone-dropdown').prepend('<option value="' + currentTimeZone + '">Local (' + currentTimeZone + ')</option>'); 301 } else { 302 timezone = needleTimeOption.val(); 303 } 304 } 305 $('.timezone-dropdown').val(timezone).change(); 306 updateRecentEpisodesTimestamps(timezone); 307 updateScheduleItemsTimestamps(timezone); 308 updateFeaturedEpisodeTimestamp(timezone); 309 } 310 311 var timestamp = getMomentTimestamp(); 312 //set days on Schedule page 313 if ($('#schedule-days-wrapper').length) { 314 setDays(timestamp.format()); 315 } 316 317 //set current day programs 318 if($('#block-views-block-programs-list').length ){ 319 setDaySchedule(timestamp.format()); 320 } 321 if ($('#schedule-table-wrapper').length) { 322 var timezone = $('.timezone-dropdown').length ? $('.timezone-dropdown').val() : ''; 323 updateScheduleTableTimestamps(timezone); 324 timestamp = timezone ? timestamp.tz(timezone).format('YYYY-MM-DD') : timestamp.format('YYYY-MM-DD'); 325 showCurrentDaySchedule(timestamp); 326 scrollToScheduleActiveItem(true); 327 } 328 329 //set schedule on select day 330 $('#schedule-days-wrapper').on('click', '.day-of-week', function(event){ 331 event.preventDefault(); 332 $('#schedule-days-wrapper .day-of-week.active').removeClass('active'); 333 // var selectedTime = ($(this).hasClass('today')) ? moment().format() : $(this).data('date'); 334 // setDaySchedule(selectedTime); 335 var date = $(this).data('date'); 336 showCurrentDaySchedule(date); 337 updateScheduleUrl(date); 338 $(this).addClass('active'); 339 }); 340 341 //update schedule url 342 function updateScheduleUrl(date) { 343 if (window.location.search.indexOf('date=') !== -1 ){ 344 window.history.replaceState('', null, window.location.href.replace(/date=\d{4}\-\d{2}\-\d{2}/, 'date=' + date)); 345 } else { 346 window.history.pushState('', null, '?date='+ date); 347 } 348 } 349 350 //update days on Schedule table 351 $('#schedule-days-wrapper').on('click', '.update-days', function(){ 352 var scheduleWrapper = '.schedule-table-wrapper'; 353 $(scheduleWrapper).addClass('loading'); 354 if ($(this).hasClass('disable')) return; 355 var timeStamp = null; 356 var isGoToday = false; 357 var url = '/watch/schedules?date='; 358 var scheduleTable = ' .schedule-table tbody'; 359 switch ($(this).data('action')) { 360 case "prev": { 361 timeStamp = moment($('#schedule-days-wrapper .day-of-week.first').data('date')).subtract(7, 'days'); 362 var date = timeStamp.format('YYYY-MM-DD'); 363 $(scheduleTable).load(url + date + scheduleTable, function(){ 364 updateScheduleTableTimestamps(); 365 $('#schedule-days-wrapper .go-to-today').removeClass('disable'); 366 $('#schedule-days-wrapper .day-of-week.first').click(); 367 // updateScheduleUrl(date); 368 $(scheduleWrapper).removeClass('loading'); 369 }); 370 break; 371 } 372 case "next": { 373 var date = $('#schedule-days-wrapper .day-of-week.last').data('date'); 374 $(scheduleTable).load(url + date + scheduleTable, function(){ 375 updateScheduleTableTimestamps(); 376 $('#schedule-days-wrapper .go-to-today').removeClass('disable'); 377 $('#schedule-days-wrapper .day-of-week.first').click(); 378 // updateScheduleUrl(date); 379 $(scheduleWrapper).removeClass('loading'); 380 }); 381 timeStamp = moment(date).add('days', 1); 382 break; 383 } 384 default: { 385 timeStamp = moment(); 386 isGoToday = true; 387 $(scheduleTable).load(url + timeStamp.format('YYYY-MM-DD') + sc
387heduleTable, function(){ 388 updateScheduleTableTimestamps(); 389 $('#schedule-days-wrapper .go-to-today').removeClass('disable'); 390 $('#schedule-days-wrapper .day-of-week.first').click(); 391 $('#scroll-to-active').click(); 392 updateScheduleUrl(date); 393 $(scheduleWrapper).removeClass('loading'); 394 }); 395 } 396 } 397 setDays(timeStamp.format()); 398 // if (isGoToday){ 399 // $('#schedule-days-wrapper .day-of-week.today').click(); 400 // $('#scroll-to-active').click(); 401 // } 402 }); 403 404 $('#schedule-table-wrapper').on('click', '.episode-row', function(){ 405 var selectedElement = $(this); 406 console.log(selectedElement); 407 if (selectedElement.hasClass('processing')) { return; } 408 if (selectedElement.hasClass('show-details')){ 409 selectedElement.removeClass('show-details'); 410 return; 411 } 412 selectedElement.addClass('processing'); 413 var selectedTimestamp = moment(selectedElement.attr('data-timestamp')); 414 var url = '/episode/' + selectedElement.attr('data-program-id') + '/' + (selectedTimestamp.format('H')*3600 + selectedTimestamp.format('mm')*60) + '/' + selectedElement.attr('data-date'); 415
416 $('#schedule-table-wrapper .episode-row.show-details').removeClass('show-details'); 417 if (selectedElement.hasClass('include-details')){ 418 selectedElement.addClass('show-details'); 419 selectedElement.removeClass('processing'); 420 } else if(selectedElement.attr('data-program-id')) { 421 $.ajax({ 422 type: 'GET', 423 url: url 424 }).done(function (result) { 425 if (result.length) { 426 var episode = result[0]; 427 // var mediaElement = episode.field_video_url[0].value ? '<iframe src="' + episode.field_video_url[0].value + '?rel=0" allowfullscreen=""></iframe>' : '<img src="' + episode.field_image[0].url + '" loading="lazy" onerror="this.onerror=null;this.src=\'/themes/custom/tbnnet/images/image.png\';">'; 428 var mediaElement = '<img src="' + episode.field_image[0].url + '" loading="lazy" onerror="this.onerror=null;this.src=\'/themes/custom/tbnnet/images/image.png\';">'; 429 selectedElement.find('.time-column').append('<div class="details-wrapper"><span>' + episode.field_duration[0].value + '</span><span>' + episode.field_se[0].value + '</span></div>'); 430 var programUrl = selectedElement.attr('data-program-url'); 431 var detailsInfo = '<div class="details-wrapper">' + 432 '<div class="episode-image">' + mediaElement + '</div>' + 433 '<div class="episode-details">' + 434 '<div class="episode-info">'+ episode.body[0].value.replace(/<\/?[^>]+(>|$)/g, "") +'</div>' + 435 '<div class="buttons-wrapper">'; 436 detailsInfo += (episode.field_vimeo_video[0].value) ? '<a href="' + episode.field_vimeo_video[0].value + '" class="btn">Watch Episode</a>' : ''; 437 detailsInfo += programUrl ? '<a href="' + programUrl + '" class="link">Program Page</a>' : ''; 438 detailsInfo +='</div></div></div>';
439 selectedElement.find('.title-column').append(detailsInfo); 440 } else { 441 // var mediaElement = selectedElement.attr('data-video-url') ? '<iframe src="' + selectedElement.attr('data-video-url') + '?rel=0" allowfullscreen=""></iframe>' : '<img src="' + selectedElement.attr('data-image-url') + '" loading="lazy" onerror="this.onerror=null;this.src=\'/themes/custom/tbnnet/images/image.png\';">'; 442 var mediaElement = '<img src="' + selectedElement.attr('data-image-url') + '" loading="lazy" onerror="this.onerror=null;this.src=\'/themes/custom/tbnnet/images/image.png\';">'; 443 var programUrl = selectedElement.attr('data-program-url'); 444 var details = '<div class="details-wrapper">' + 445 '<div class="episode-image">' + mediaElement + '</div>' + 446 '<div class="episode-details">' + 447 '<div class="episode-info">'+ selectedElement.attr('data-synopsis') +'</div>' + 448 '<div class="buttons-wrapper">'; 449 details += programUrl ? '<a href="' + selectedElement.attr('data-program-url') + '" class="link">Program Page</a>': ''; 450 details += '</div></div>';
451 selectedElement.find('.title-column').append(details); 452 } 453 selectedElement.addClass('include-details show-details'); 454 selectedElement.removeClass('processing'); 455 }).fail(function () { 456 console.log('fail'); 457 selectedElement.removeClass('processing'); 458 }); 459 } else { 460 var mediaElement = '<img src="/themes/custom/tbnnet/images/image.png" >'; 461 var details = '<div class="details-wrapper">' + 462 '<div class="episode-image">' + mediaElement + '</div>' + 463 '<div class="episode-details">' + 464 '<div class="episode-info">'+ selectedElement.attr('data-synopsis') +'</div>' + 465 '<div class="buttons-wrapper">' + 466 '</div></div>'; 467 selectedElement.find('.title-column').append(details); 468 selectedElement.addClass('include-details show-details'); 469 selectedElement.removeClass('processing'); 470 } 471 472 }); 473 474 //update date/time on recent episodes section 475 // updateRecentEpisodesTimestamps(); 476 477 //change timezone on recent episodes section 478 $('.upcoming-schedule-section .timezone-dropdown').on('change', function(){ 479 var timezone = $(this).val(); 480 updateRecentEpisodesTimestamps(timezone); 481 updateScheduleItemsTimestamps(timezone); 482 updateFeaturedEpisodeTimestamp(timezone); 483 }); 484 485 $('.title-wrapper .timezone-dropdown').on('change', function(){ 486 var timezone = $(this).val(); 487 updateScheduleTableTimestamps(timezone); 488 var timestamp = timezone ? moment().tz(timezone).format('YYYY-MM-DD') : moment().format('YYYY-MM-DD'); 489 showCurrentDaySchedule(timestamp, timezone); 490 }); 491 492 updateFeaturedEpisodeTimestamp('EST'); 493 // update date/time on upcoming schedule section 494 updateScheduleItemsTimestamps(); 495 496 }); 497 // set schedule programs on Home page 498 // set time to user's time zone 499 window.updateScheduleBlockTimestamps = function() { 500 if (drupalSettings.tbnSchedule !== undefined) { 501 var events = JSON.parse(drupalSettings.tbnSchedule.events); 502 $('#schedule-section-block .episode-time, .fixed-schedule .episode-time').each(function (i) { 503 if (events[i] !== undefined && events[i].timestamp !== undefined) { 504 var time = moment.unix(events[i].timestamp).tz('UTC').tz(moment.tz.guess()).format('h:mm A'); 505 $(this).text(time); 506 $(this).next('.episode-title').html(events[i].title); 507 } 508 }); 509 } 510 } 511 // refresh homepage schedule block on 00 and 30 512 window.updateHomeSchedule = function() { 513 if (drupalSettings.tbnSchedule !== undefined) { 514 var viewName = 'schedule'; 515 var instances = Drupal.views.instances; 516 var myView; 517 $.each(instances, function getInstance(index, element) { 518 if(element.settings.view_name == viewName) { 519 myView = '.js-view-dom-id-' + element.settings.view_dom_id; 520 } 521 }); 522 var d = new Date(); 523 var mins = d.getMinutes(); 524 if(mins === 00 || mins === 30) { 525 // refresh view 526 $(myView).trigger('RefreshView'); 527 // set time to user's time zone 528 setTimeout(updateScheduleBlockTimestamps, 1700); 529 console.log('done'); 530 } 531 } 532 } 533 534 // set time to user's time zone once schedule is loaded 535 $(window).on('load', function() { 536 updateScheduleBlockTimestamps(); 537 }); 538 // check to see if it's time to refresh schedule once every minute 539 setInterval(updateHomeSchedule, 60000); 540 541}) (jQuery, Drupal, drupalSettings); 542 543(function (Drupal, $, once, drupalSettings) { 544 Drupal.behaviors.tbnScheduleRefresh = { 545 attach: function (context) { 546 547 // Disable auto-focus ONLY for the schedule view 548 once('disableScheduleAutoFocus', '.view-id-schedule', context).forEach((viewEl) => { 549 viewEl.addEventListener('focus', function (e) { 550 e.stopImmediatePropagation(); 551 }, true); 552 }); 553 554 // Main logic 555 once('tbnScheduleRefresh', 'body', context).forEach(() => { 556 557 const waitForDigioh = () => { 558 if (window.DIGIOH && DIGIOH.parent && DIGIOH.parent.props) { 559 560 if (drupalSettings.tbnSchedule !== undefined) { 561 562 var viewName = 'schedule'; 563 var instances = Drupal.views.instances; 564 var myView; 565 566 $.each(instances, function (index, element) { 567 if (element.settings.view_name === viewName) { 568 myView = '.js-view-dom-id-' + element.settings.view_dom_id; 569 } 570 }); 571 572 if (myView) { 573 $(myView).trigger('RefreshView'); 574 } 575 } 576 577 } else { 578 setTimeout(waitForDigioh, 100); 579 } 580 }; 581 582 waitForDigioh(); 583 584 }); 585 586 } 587 }; 588})(Drupal, jQuery, once, drupalSettings);
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.