1jQuery(document).ready(function($) { 2 $.fn.extend({ 3 isHorixontalFilter: function() { 4 let eventHorixontalFilter = $(this).closest(".eventFilterBarHorixontal").html(); 5 return (eventHorixontalFilter != undefined && eventHorixontalFilter != '') ? true : false; 6 }, 7 horixontalFilterAnimation: function() { 8 if($(this).hasClass('animate')) $(this).removeClass('animate'); 9 if($(this).width() >= $(this).find('span').width()) return $(this); 10 return $(this).attr('style', '--filter-width: '+$(this).width()+'px;').addClass('animate'); 11 }, 12 addRemoveClass: function(add, remove) { 13 return $(this).addClass(add).removeClass(remove); 14 }, 15 removeAddClass: function(remove, add) { 16 return $(this).removeClass(remove).addClass(add); 17 }, 18 getNumberAttribute: function(attribute) { 19 return $.isNumeric($(this).attr(attribute)) ? Number($(this).attr(attribute)) : 0; 20 }, 21 translateCard: function(i, o, s, cs, cw) { // update card position for card slider 22 let position = (i <= o) ? 0 : ((s < 0) ? ((-(cs+cw) < s) ? s : i+s) : (((o-cs) >= s) ? s : s-i)); 23 $(this).css('transform', `translate3d(${position}px, 0px, 0px)`); // $(this).css('transition', '1s'); 24 }, 25 }); 26 27 intWindowWidth = $(window).width(); 28 $('.eventSubHeader').filter(function() { 29 return $.trim($(this).text()) === '' 30 }).remove(); 31 32 var strPageURL = $(location).attr("href"); // Get the current url 33 var strUrlVariables = new URLSearchParams(window.location.search); 34 const reEncodeValue = (value) => { 35 return encodeURIComponent(value).replace(/%20/g, '+'); 36 }; 37 const getUrlParameter = (strParam) => { 38 return reEncodeValue(strUrlVariables.get(strParam) ?? ''); 39 }; 40 var strURLview = getUrlParameter('view').toLowerCase(); 41 strURLview = ((strURLview != '') && ($.inArray(strURLview, ['month', 'list', 'card', 'grid']) > -1)) ? strURLview : ''; 42 var arrSearchParam = ['rhp_bar_search_box', 'rhp_bar_rhp_gen','rhp_bar_rhp_month', 'rhp_bar_rhp_venue', 'rhp-bar-just-announced', 'rhp_bar_rhp_performer', 'rhp-bar-feature']; 43 $('#rhp-bar-just-announceds').removeAttr("checked"); 44 $('#rhp-bar-features').removeAttr("checked"); 45 arrSearchParam.forEach(function(strElement, intIndex) { 46 arrSearchParam[intIndex] = getUrlParameter(strElement); 47 if(arrSearchParam[intIndex] != '' && arrSearchParam[intIndex] != undefined) { 48 switch(intIndex) { 49 case 0: 50 const strSearchText = decodeURIComponent(arrSearchParam[intIndex].replace(/\+/g, '%20')); 51 $("#rhpSearchText").val(strSearchText); 52 $("#rhp_bar_search_box").val(strSearchText); 53 break; 54 case 1: 55 $("#rhp_bar_rhp_gen").val(arrSearchParam[intIndex]); 56 let genreVal = $(".filterSublist.genreSpec li[values='" + arrSearchParam[intIndex] + "']").text(); 57 $(".gen").text(genreVal); 58 break; 59 case 2: 60 $("#rhp_bar_rhp_month").val(arrSearchParam[intIndex]); 61 let monthVal = $(".filterSublist.monthSpec li[values='" + arrSearchParam[intIndex] + "']").text(); 62 $(".month").text(monthVal); 63 break; 64 case 3: 65 $("#rhp_bar_rhp_venue").val(arrSearchParam[intIndex]); 66 let venueVal = $(".filterSublist.venueSpec li[values='" + arrSearchParam[intIndex] + "']").text(); 67 $(".venue").text(venueVal); 68 break; 69 case 4: 70 if(arrSearchParam[intIndex] == "checked") { 71 $("#rhp-bar-just-announced").val("checked"); 72 $('#rhp-bar-just-announceds').prop('checked', true); 73 $("#rhp-bar-just-announceds + #checkFilter").addClass("check"); 74 } else { 75 $('#rhp-bar-just-announceds').removeAttr('checked'); 76 } 77 break; 78 case 5: 79 $("#rhp_bar_rhp_performer").val(arrSearchParam[intIndex]); 80 let performerVal = $(".filterSublist.performerSpec li[values='" + arrSearchParam[intIndex] + "']").text(); 81 $(".performer").text(performerVal); 82 break; 83 case 6: 84 if(arrSearchParam[intIndex] == "checked") { 85 $("#rhp-bar-feature").val("checked"); 86 $('#rhp-bar-features').prop('checked', true); 87 $("#rhp-bar-features + #checkFilter").addClass("check"); 88 } else { 89 $('#rhp-bar-features').removeAttr('checked'); 90 } 91 break; 92 } 93 } 94 }); 95 $(".eventFilterBarHorixontal .selectFilterText").each(function() { 96 $(this).horixontalFilterAnimation(); 97 }); 98 if (intWindowWidth <= 767) { 99 strMobDefaultFilterVal = $('.eventMobileView').val(); 100 $('.filterViewVal').text(strMobDefaultFilterVal ); 101 } 102 // Click event of events search bar 103 $(document).on('click', "input[name='submit-bar']", function(event) { 104 let strFilterVal = $('.eventDesktopView').val(); 105 if (intWindowWidth <= 767) 106 strFilterVal = $('.eventMobileView').val(); 107 let viewParam = '', strDisplay = ''; 108 if(($.inArray(strFilterVal, ['Month', 'List', 'Card', 'Grid'])) > -1 ){ 109 viewParam = strFilterVal.toLowerCase(); 110 strDisplay = strFilterVal.toLowerCase(); 111 } 112 event.preventDefault(); 113 strSearchVal = $("#rhp_bar_search_box").val();
113 // get search filter value. 114 if(strSearchVal) // set search filter values. 115 strSearchVal = encodeURIComponent(strSearchVal); 116 117 strGenreVal = $("#rhp_bar_rhp_gen").val(); // get genre filter value. 118 strVenueVal = $("#rhp_bar_rhp_venue").val(); // get venue filter value. 119 strMonthVal = $("#rhp_bar_rhp_month").val();// get month filter value. 120 strPerformerVal = $("#rhp_bar_rhp_performer").val();// get performer filter value. 121 strJustAnnVal = $("#rhp-bar-just-announced").val(); 122 strJustAnnCheck = (strJustAnnVal == 'checked') ? 'checked' : ''; 123 strFeatureVal = $("#rhp-bar-feature").val(); 124 strFeatureCheck = (strFeatureVal == 'checked') ? 'checked' : ''; 125 if(strURLview != '' && !(intWindowWidth <= 767)) 126 viewParam = strDisplay = strURLview; 127 128 arrURL = strPageURL.split('?'); //Split the url 129 strAbsURL = arrURL[0] + '?rhp_paged=1&rhp_event_display='+strDisplay+(viewParam != '' ? '&view='+viewParam : '') 130 +((strSearchVal != '' && strSearchVal != undefined) ? '&rhp_bar_search_box='+strSearchVal : '') 131 +((strGenreVal != '' && strGenreVal != undefined) ? '&rhp_bar_rhp_gen='+strGenreVal : '') 132 + ((strVenueVal != '' && strVenueVal != undefined) ? '&rhp_bar_rhp_venue='+strVenueVal : '') 133 + ((strMonthVal != '' && strMonthVal != undefined) ? '&rhp_bar_rhp_month='+strMonthVal : '') 134 + ((strPerformerVal != '' && strPerformerVal != undefined) ? '&rhp_bar_rhp_performer='+strPerformerVal : '') 135 + ((strJustAnnCheck != '' && strJustAnnCheck != undefined) ? '&rhp-bar-just-announced='+strJustAnnCheck : '') 136 + ((strFeatureCheck != '' && strFeatureCheck != undefined) ? '&rhp-bar-feature='+strFeatureCheck : ''); 137 //Replace the current url with parameters 138 if(strAbsURL != 'undefined' || strAbsURL != '') 139 window.location.replace(strAbsURL); 140 }); 141 142 $(function() { 143 let scroll = getUrlParameter('rhp_paged'); 144 if(scroll && $('.eventFilterBarHorixontal').html() != undefined){ 145 $('html,body').animate({ 146 scrollTop: $('.eventFilterBarHorixontal').offset().top - 70 147 }, 2000); 148 } 149 }); 150 151 // Clear URL parameters and reset the filter and events page to default 152 $(document).on('click', "input[name='clearFilter']", function(event) { 153 // Add current view on url 154 let viewParam = (strURLview != '') ? '?view='+strURLview : ''; 155 arrURL = strPageURL.split('?'); //Split the url 156 strNewURL = (arrURL[0] != '' && arrURL[0] != undefined) ? (arrURL[0]) : ''; 157 //Replace the current url with parameters 158 if(strNewURL != 'undefined' || strNewURL != '') 159 window.location.replace(strNewURL+viewParam); 160 }); 161 162 $('#collapsedOne').on('shown.bs.collapse', function(){ 163 $(this).parent().prev(".panel-heading").find(".accPan.rhp-events-icon").removeAddClass("plus", "minus"); 164 }).on('hidden.bs.collapse', function(){ 165 $(this).parent().prev(".panel-heading").find(".accPan.rhp-events-icon").removeAddClass("minus", "plus"); 166 }); 167 168 $(document).on('click', '.filterTab', function() { 169 if($(this).hasClass('collapsed')) 170 $(".accPan.rhp-events-icon").removeAddClass("minus", "plus"); 171 else $(".accPan.rhp-events-icon").removeAddClass("plus", "minus"); 172 }); 173 $(document).on('click', '.filterDefault', function() { 174 $(this).closest('.selectFilter').siblings().each(function() { 175 let objSubList = $(this).find('.filterSublist'); 176 if(objSubList.length != 0 && objSubList.is(':visible')) { 177 objSubList.hide(); 178 $(this).find('.dropDownFilter').find(".filtericon.rhp-events-icon").removeAddClass("minus", "plus"); 179 } 180 }); 181 let objThis = $(this).parent(), objList = objThis.find('.filterSublist'); 182 updateElementState(objList, objThis, ".filtericon.rhp-events-icon", "minus", "plus"); 183 }); 184 185 $(document).on('click', ".filterSublist li", function() { 186 let objParent = $(this).parent(); 187 let objParents = objParent.parent(); 188 if($(this).isHorixontalFilter()) { 189 objParents.find('.filterVal > span').html($(this).text()).parent().horixontalFilterAnimation(); 190 } else { 191 objParents.find('.filterVal').html($(this).text()); 192 } 193 objParents.find(".filterValInput").val($(this).attr("values")); 194 objParent.hide(); 195 objParents.find(".filtericon.rhp-events-icon").removeAddClass("minus", "plus"); 196 }); 197 $(document).on('click', function (e) { 198 if ($(e.target).closest(".viewAsDiv").length === 0) { 199 $(".viewSublist").hide();
200 $(".viewasDefault .viewAsFiltericon.rhp-events-icon").removeAddClass("arrow-up", "arrow-down"); 201 } 202 if ($(e.target).closest("#filterbody").length === 0) { 203 $("#filterbody .filterSublist").hide(); 204 $("#filterbody .filtericon.rhp-events-icon").removeAddClass("minus", "plus"); 205 } 206 if ($(e.target).closest("#shortcodeFilter").length === 0) { 207 $("#shortcodeFilter .filterSublist").hide(); 208 $("#shortcodeFilter .filtericon.rhp-events-icon").removeAddClass("minus", "plus"); 209 } 210 }); 211 $(document).on('click', '.viewasDefault', function() { 212 let objThis = $(".viewAsDiv"); 213 intWindowWidth = $(window).width(); 214 let objList = (intWindowWidth <=767) ? $('.viewSublist.MobileViewList') : $('.viewSublist.DesktopViewList'); 215 updateElementState(objList, objThis, ".viewAsFiltericon.rhp-events-icon", "arrow-up", "arrow-down"); 216 }); 217 $(document).on('click', "#desktopView .viewAsDiv li", function() { 218 updateViewAsBar($(this), $('#desktopView .filterViewVal').text()); 219 }); 220 $(document).on('click', "#mobileView .viewAsDiv li", function() { 221 updateViewAsBar($(this), $('#mobileView .filterViewVal').text()); 222 }); 223 // Alter element to show and hide based click action 224 const updateElementState = (firstElement, secondElement, find, fisrtClass, secondClass) => { 225 if( firstElement.is(':visible') ) { 226 firstElement.hide(); 227 secondElement.find(find).removeAddClass(fisrtClass, secondClass); 228 return; 229 } 230 firstElement.show(); 231 secondElement.find(find).removeAddClass(secondClass, fisrtClass); 232 } 233 // Trigger when view as bar selected another view 234 const updateViewAsBar = (element, strViewText) => { 235 let strSelText = element.text(); 236 if(strSelText.replace(/\s/g, '') != strViewText){ 237 let strClass = element.find('.fa').attr('class'); 238 $strValueIconClass = $('.valueIcon').attr('class'); 239 if (!$('.valueIcon').hasClass(strClass)) 240 $('.valueIcon').removeAddClass($strValueIconClass, strClass+' valueIcon'); 241 242 let objParent = element.parent(); 243 let objParents = objParent.parent(); 244 objParents.find('.filterViewVal').html( element.text()); 245 246 $('.eventDesktopView').val(strSelText); 247 $('.eventMobileView').val(strSelText); 248 249 objParent.hide(); 250 objParents.find(".filtericon.rhp-events-icon").removeAddClass("arrow-up", "arrow-down"); 251 $strView = element.attr("values"); 252 arrURL = strPageURL.split('?');//Split the url 253 strAbsURL = arrURL[0] + '?view='+$strView; 254 if(strAbsURL != 'undefined' || strAbsURL != '') 255 window.location.replace(strAbsURL); 256 } 257 }; 258 259 var arrayView = {'month': 'calendar', 'list': 'list', 'card': 'stop', 'grid': 'th'}; 260 if(strURLview != ''){ 261 if(strURLview == 'month') 262 $('.viewasDefault .filterViewVal').text(arrayView[strURLview].charAt(0).toUpperCase()+arrayView[strURLview].slice(1)); 263 else 264 $('.viewasDefault .filterViewVal').text(strURLview.charAt(0).toUpperCase()+strURLview.slice(1)); 265 $('.valueIcon').removeAddClass('list th stop calendar', arrayView[strURLview]); 266 } 267 reOrderEventFilter(); 268 269 $(window).resize(function() { 270 intWindowWidth = $(window).width(); // get the screen width on resize. 271 reOrderEventFilter(); 272 }); 273 274 function reOrderEventFilter(){ 275 if (intWindowWidth <= 767) { 276 $("#collapsedOne").removeClass("show"); 277 $("#accordionFilter .accPan.rhp-events-icon").removeAddClass("minus", "plus"); 278 } else { 279 $("#collapsedOne").addClass("show"); 280 $("#accordionFilter .accPan.rhp-events-icon").removeAddClass("plus", "minus"); 281 } 282 stcikyElement(intWindowWidth); 283 } 284 285 function stcikyElement(intWidth) { 286 if(intWidth >= 992) 287 $(".singleEventSection").stick_in_parent({recalc_every: 1, offset_top: 48}); 288 else 289 $(".singleEventSection").trigger("sticky_kit:detach"); 290 } 291 $("div.justAdvPad > *").on("click", function(event) { 292 if($(event.target).is('input')) return; 293 updateCheckboxStatus("#rhp-bar-just-announced", $(this).parent().find(".checkmark")); 294 }); 295 $("div.featurePad > *").on("click", function(event) { 296 if($(event.target).is('input')) return; 297 updateCheckboxStatus("#rhp-bar-feature", $(this).parent().find(".checkmark")); 298 }); 299 const updateCheckboxStatus = (id, checkmark) => { 300 let value = !checkmark.hasClass("check"); 301 checkmark.toggleClass("check"); 302 checkmark.parent().prop("checked", value); 303 $(id).val(value ? "checked" : ""); 304 } 305 // Employ the accordion class on our static wrapper 306 if($('.st-accordion').length > 0){ 307 $('.st-accordion').accordion({ 308 active: false, 309 collapsible: true, 310 heightStyle: "content" 311 }); 312 } 313 if( $('.rhp-widget-list').hasClass( 'upcomingWidget' )) { 314 $('.upcomingWidget').parent().addClass('upcomingWidgetDiv'); 315 } 316 if( $('.rhp-widget-list').hasClass( 'justAnnouncedWidget' )) { 317 $('.justAnnouncedWidget').parent().addClass('justAnnouncedWidgetDiv'); 318 } 319 if( $('.sideBarWidget').hasClass( 'justAnnouncedSideWidget' )) { 320 $('.justAnnouncedSideWidget').parent().addClass('justAnnouncedSideWidgetDiv'); 321 } 322 if( $('.sideBarWidget').hasClass( 'upcomingSideWidget' )) { 323 $('.upcomingSideWidget').parent().addClass('upcomingSideWidgetDiv'); 324 } 325 $(".wrapper .customTitle").on("click", function(){ 326 var strState = $(".wrapper .customAccordion h3").attr("aria-expanded"); 327 if($(this).parent(".wrapper .st-accordion h3").hasClass("ui-accordion-header-active")) 328 $(this).children(".customPlusMinus.rhp-events-icon").removeAddClass("minus", "plus"); 329 else 330 $(this).children(".customPlusMinus.rhp-events-icon").addRemoveClass("minus", "plus"); 331 }); 332 333 if( $('.infoAccor').length == 0 ) { 334 $('.infoAccordions').addClass('d-none'); 335 $('.performerAccordions').addClass('noinfoacc'); 336 } 337 $(".accordionLink").on("click", function() { 338 $(this).find(".rhp-events-icon").toggleClass("plus minus"); 339 }); 340 $("[id^='infotrigger-'], [id^=performertrigger]").on("click", function() { 341 let strId = $(this).attr('id'); 342 let strType = $(this).attr('type'); 343 let arrLinkId = (strId != undefined) ? strId.split("-") : ''; 344 let intInfoId = parseInt(arrLinkId[1]); 345 if($.isNumeric(intInfoId)) { 346 let [targetDivId, sourceDivId, strClassCollapse, strDropIcon] = ['', '', '', '']; 347 if(strType === 'info'){ 348 targetDivId = '#collapseInfo-'+intInfoId; 349 sourceDivId = '#infotrigger-'+intInfoId; 350 strClassCollapse = 'show-info'; 351 strDropIcon = sourceDivId+' .infoDropIcon'; 352 } else { 353 targetDivId = '#collapsePerformer-'+intInfoId; 354 sourceDivId = '#performertrigger-'+intInfoId; 355 strClassCollapse = 'show-performer'; 356 strDropIcon = sourceDivId+' .performerDropIcon'; 357 } 358 if( $(targetDivId).hasClass(strClassCollapse)){ 359 $(targetDivId).removeClass(strClassCollapse).removeAttr('style'); 360 $(targetDivId).parent().removeClass('opensection'); 361 $(strDropIcon).removeAddClass('minus', 'plus'); 362 } else { 363 $(targetDivId).addClass(strClassCollapse).css('display', 'flex'); 364 $(targetDivId).parent().addClass('opensection'); 365 $(strDropIcon).removeAddClass('plus', 'minus'); 366 } 367 } 368 }); 369 370 // Card View Js 371 $(".cardToggle").on('click',function(){ 372 let strID = $(this).attr('id'); 373 let ctaDiv = "#CardCTA-"+strID.replace('mobileToggle-', ''); 374 if($('.cardCTAbox').is(ctaDiv)) 375 $('.cardCTAbox').toggleClass('mobileShow'); 376 $('.cardCTAbox').not(ctaDiv).removeClass('mobileShow'); 377 }); 378 $(".cardSliderWidget .rhpEventWidgetCard").each(function() { 379 let outerWidth = $(this).width(); 380 let innerWidth = $(this).find('.widgetCardinnerWrapper').width(); 381 let cardWidth = $(this).find('.widgetCards').width(); 382 let extraWidth = 0, speed = 0; 383 if(innerWidth <= outerWidth) { 384 extraWidth = ((outerWidth % innerWidth)%cardWidth)/2; 385 $(this).parent().find(".widgetCardNav").addClass('d-none'); 386 } else { 387 extraWidth = (outerWidth>cardWidth && outerWidth%cardWidth) ? (outerWidth%cardWidth)/2 : 0; 388 speed = 0.5; 389 if(cardWidth > outerWidth){ 390 $(this).find('.widgetCardinnerWrapper').children('.widgetCards').each((i, element) => { 391 element.style.width = `${outerWidth}px`; 392 }); 393 innerWidth = $(this).find('.widgetCardinnerWrapper').width(); 394 cardWidth = outerWidth; 395 } 396 } 397 $(this).css('padding', "0px "+extraWidth+"px"); 398 let cardWidgetWrapper = $(this).find('.widgetCardWrapper'); 399 cardWidgetWrapper.attr({ 'extra': extraWidth, 'cardwidth': cardWidth, 'outerwidth': outerWidth-(extraWidth*2), 'innerwidth': innerWidth }); 400 if(cardWidgetWrapper.hasClass('autoswipe')){ 401 if(intWindowWidth <= 768) 402 cardWidgetWrapper.removeClass('autoswipe left right'); 403 else 404 cardWidgetWrapper.attr({'speed': speed, 'autoscroll': 0, 'direction': cardWidgetWrapper.hasClass('right') ? 'right' : 'left'}).addClass('start'); 405 } 406 if(cardWidgetWrapper.hasClass('dragoffdesktop')){ 407 if(intWindowWidth > 991) 408 cardWidgetWrapper.removeClass('dragevent'); 409 cardWidgetWrapper.removeClass('dragoffdesktop'); 410 } 411 }); 412 let [touchStart, touchX, y, scrollY] = [0, 0, 0, 0]; 413 wrapWidth = $(".cardSliderWidget .rhpEventWidgetCard").width(); 414 $(".cardSliderWidget .widgetCardWrapper").on("mouseleave mouseup touchend", function() { 415 $(this).removeClass('dragging'); 416 }); 417 $(".cardSliderWidget .widgetCardWrapper").on("mousedown touchstart", function(e) { 418 if($(this).hasClass('dragevent') && !$(this).hasClass('autoswipe')){ 419 $(this).addClass('dragging'); 420 touchStart = e.clientX || e.touches[0].clientX; 421 } 422 }); 423 $(".cardSliderWidget").on("mousemove touchmove", ".widgetCardWrapper.dragging", function(e) { 424 touchX = e.clientX || e.touches[0].clientX; 425 scrollY -= (touchStart - touchX); 426 touchStart = touchX; 427 }); 428 429 // Callback for auto swipe card slider on touch and drag event 430 $(".cardSliderWidget .widgetCardWrapper.autoswipe").on("mouseleave", function() { 431 if(!($(this).hasClass('click') && $(this).hasClass('dragevent'))) return; 432 $(this).addClass('move'); 433 cardMouseEvent($(this)); 434 $(this).removeClass('move'); 435 }); 436 $(".cardSliderWidget .widgetCardWrapper.autoswipe").on("mouseup touchend", function() { 437 if($(this).hasClass('click') && $(this).hasClass('dragevent') && !$(this).hasClass('ctaclick')) 438 cardMouseEvent($(this)); 439 }); 440 // touch or drag event update at card slider 441 const cardMouseEvent = (element) => { 442 let startClick = Number(element.attr('clickon')); 443 let endClick = Number(element.attr('clickmove')); 444 let autoscroll = Number(element.attr('autoscroll')); 445 let finalScroll = autoscroll + endClick - startClick; 446 element.attr('autoscroll', finalScroll).removeAttr('clickon clickmove'); 447 element.addRemoveClass("start", 'click stop'); 448 }; 449 $(".cardSliderWidget .widgetCardWrapper.autoswipe").on("mousedown touchstart", function(e) { 450 if($(this).hasClass('dragevent')){ 451 $(this).attr({'clickon': e.clientX || e.touches[0].clientX, 'clickmove': e.clientX || e.touches[0].clientX}); 452 $(this).removeAddClass("start","click stop"); 453 } 454 }); 455 456 $(".cardSliderWidget").on("mousemove touchmove", ".widgetCardWrapper.autoswipe", function(e) { 457 if($(this).hasClass('click') && $(this).hasClass('dragevent')){ 458 let startClick = Number($(this).attr('clickon')); 459 let endClick = e.clientX || e.touches[0].clientX; 460 $(this).attr('clickmove', endClick); 461 let autoscroll = Number($(this).attr('autoscroll')); 462 let finalScroll = autoscroll + endClick - startClick; 463 $(this).attr({'autoscroll': finalScroll, 'clickon': endClick}); 464 } 465 }); 466 467 $(".cardSliderWidget .widgetCardWrapper.autoswipe .cardCTAbox .multiple_ctas, .cardSliderWidget .widgetCardWrapper.autoswipe .cardCTAbox .cardeventMoreInfo").on({ 468 mouseenter: function () { 469 $(this).parent().closest(".widgetCardWrapper.autoswipe").addRemoveClass("stop", "start"); 470 }, 471 mouseleave: function () { 472 $(this).parent().closest(".widgetCardWrapper.autoswipe").addRemoveClass("start", "stop"); 473 }, 474 mousedown: function() { 475 $(this).parent().closest(".widgetCardWrapper.autoswipe").addRemoveClass("stop ctaclick", "start"); 476 }, 477 mouseup: function() { 478 $(this).parent().closest(".widgetCardWrapper.autoswipe").addRemoveClass("stop ctaclick", "start"); 479 }, 480 }); 481 $(".leftCard").on('click', function(){ 482 cardSliderArrowClick($(this).parent().attr('id'), 1); 483 }); 484 $(".rightCard").on('click', function(){ 485 cardSliderArrowClick($(this).parent().attr('id'), -1); 486 }); 487 // Arrow click action based on callback value on card slider 488 const cardSliderArrowClick = (cardNavId, intArrowValue) => { 489 let innerWrapperID = cardNavId.replace('nav-', '#wrapper-'); 490 if($(innerWrapperID).hasClass('autoswipe')) 491 $(innerWrapperID).addRemoveClass('stop', 'start');
492 $(innerWrapperID).addClass('arrowclick'); 493 scrollupto = $(innerWrapperID).attr('scrollupto'); 494 currentposition = $(innerWrapperID).attr('currentposition'); 495 if(currentposition == undefined || currentposition == '') 496 $(innerWrapperID).attr('currentposition', 0); 497 scrollupto = (scrollupto != undefined && scrollupto != '') ? Number(scrollupto) + intArrowValue : intArrowValue; 498 $(innerWrapperID).attr('scrollupto', scrollupto); 499 }; 500 // Update card slider card position after each 10 ms approx 501 var lastSliderAnimationAction = window.performance.now(); 502 const arrangeAxisBasedOnValue = (scroll) => { 503 let newSliderAnimationTime = window.performance.now(); 504 if(newSliderAnimationTime - lastSliderAnimationAction < 10) return; 505 lastSliderAnimationAction = newSliderAnimationTime; 506 $(".cardSliderWidget .widgetCardWrapper").each((i, element) => { 507 let objSliderWrapper = $(element), isDragging = objSliderWrapper.hasClass('dragging'), isArrowClicked = objSliderWrapper.hasClass('arrowclick'), 508 isAutoSwiped = objSliderWrapper.hasClass('autoswipe') && (objSliderWrapper.hasClass('start') || objSliderWrapper.hasClass('click')); 509 if(isDragging || isArrowClicked || isAutoSwiped) { 510 let currentSlideCardWidth = objSliderWrapper.getNumberAttribute('cardwidth'), 511 currentposition = objSliderWrapper.getNumberAttribute('currentposition'), 512 autoscroll = objSliderWrapper.getNumberAttribute('autoscroll'), 513 newscroll = 0; 514 if(isDragging) { // drag card slider 515 if(objSliderWrapper.attr('direction') != undefined) 516 autoscroll = (objSliderWrapper.attr('direction') == 'left') ? autoscroll : -autoscroll; 517 newscroll = scroll; 518 } else if(isArrowClicked) { // arrow click card slider 519 let scrollupto = objSliderWrapper.getNumberAttribute('scrollupto'); 520 if(scrollupto == currentposition){ 521 objSliderWrapper.addClass('last'); 522 } else { 523 currentposition += (scrollupto > currentposition) ? 0.1 : -0.1; 524 objSliderWrapper.attr('currentposition', currentposition.toFixed(1)); 525 } 526 } else { // autoswipe 527 if(!(objSliderWrapper.hasClass('click stop') || objSliderWrapper.hasClass('arrowclick') || objSliderWrapper.hasClass('ctaclick')) ) { 528 autoscroll += (objSliderWrapper.attr('direction') == 'left') ? Number(objSliderWrapper.attr('speed')) : -Number(objSliderWrapper.attr('speed')); 529 } 530 let isdraging = objSliderWrapper.hasClass('dragging') || objSliderWrapper.hasClass('arrowclick'); 531 objSliderWrapper.attr('autoscroll', autoscroll); 532 } 533 newscroll += (currentSlideCardWidth*currentposition)+autoscroll; 534 535 let cardChilds = objSliderWrapper.find('.widgetCardinnerWrapper').children(), 536 intInnerWrapWidth = Number(objSliderWrapper.attr('innerwidth')), 537 intOuterWrapWidth = Number(objSliderWrapper.attr('outerwidth')), 538 intItemWidth = Number(objSliderWrapper.attr('cardwidth')); 539 cardChilds.each((j, children) => { 540 if(!isAutoSwiped) { 541 if(children==children.parentNode.lastElementChild && objSliderWrapper.hasClass('last')) { 542 objSliderWrapper.removeClass('last arrowclick'); 543 if(isArrowClicked && objSliderWrapper.hasClass('autoswipe')) 544 objSliderWrapper.removeAddClass('stop', 'start'); 545 } 546 } 547 $(children).translateCard(intInnerWrapWidth, intOuterWrapWidth, ((newscroll)%intInnerWrapWidth), j*intItemWidth, intItemWidth); 548 }); 549 } 550 }); 551 }; 552 // calculate new axis between 0 and 1 553 const calculateNewAsix = (v0, v1, t) => {return v0 * (1 - t) + (v1 * t);}; 554 555 // rendar card slider after each 10 ms 556 var resolve; 557 const cardSliderWidgetRender = async () => { 558 y = calculateNewAsix(y, scrollY, 0.1); 559 clearTimeout(resolve); 560 await new Promise(resolve => setTimeout(resolve, 10)); 561 arrangeAxisBasedOnValue(y); 562 cardSliderWidgetRender(); 563 }; 564 window.onload = cardSliderWidgetRender; 565 window.onresize = cardSliderWidgetRender; 566 567 $("#calendarOption .trigger").on('click', function(){ 568 $(this).parent().children('.target').toggleClass('d-none'); 569 }); 570 // ajax trigger to download file on user end 571 $("#calendarOption .target .downloadCalendar").on('click', function(){ 572 intEventId = $(this).attr('event'); 573 strPostType = $(this).attr('type'); 574 var data = { 575 data: intEventId, 576 type: strPostType, 577 action: "downloadcalendar", 578 nonce: ajaxSocialOption.nonce 579 }; 580 $.post(ajaxSocialOption.url, data, function(response) { 581 if(response.success) { 582 if(response.data){ 583 // blob convert and save file into binary object in client site 584 var blob = new Blob([response.data.file]); 585 var link = document.createElement('a'); 586 link.href = window.URL.createObjectURL(blob); 587 link.download = response.data.title; 588 document.body.appendChild(link); 589 link.click(); 590 document.body.removeChild(link); 591 } 592 } 593 }); 594 }); 595 // update audio player status on single event page 596 $(".rhp-events__audio-player__play-btn").on('click', function(){ 597 let objAudioPlayer = $(this).parent().find(".rhp-events__audio-player"), 598 objAudioPlayerText = $(this).find(".rhp-events__audio-player__play-btn-text"); 599 if(objAudioPlayer.get(0).paused) { 600 let strPauseTrackText = objAudioPlayerText.attr('pausetrack'); 601 if(strPauseTrackText == undefined || strPauseTrackText == '') strPauseTrackText = 'Pause Track'; 602 objAudioPlayerText.text(strPauseTrackText); 603 $(this).find(".rhp-events-icon").addRemoveClass('pause', 'play'); 604 objAudioPlayer.get(0).play(); 605 objAudioPlayer.addClass('active'); 606 } else { 607 let strPlayTrackText = objAudioPlayerText.attr('playtrack'); 608 if(strPlayTrackText == undefined || strPlayTrackText == '') strPlayTrackText = 'Play Track'; 609 objAudioPlayerText.text(strPlayTrackText); 610 $(this).find(".rhp-events-icon").removeAddClass('pause', 'play'); 611 objAudioPlayer.get(0).pause(); 612 objAudioPlayer.removeClass('active'); 613 } 614 }); 615 // replay the audio when it ends (infinite loop) 616 $(".rhp-events__audio-player").on('ended', function() { 617 if($(this).hasClass('active')){ 618 $(this).get(0).play(); 619 } else { 620 let strPlayTrackText = objAudioPlayerText.attr('playtrack'); 621 if(strPlayTrackText == undefined || strPlayTrackText == '') strPlayTrackText = 'Play Track'; 622 objAudioPlayerText.text(strPlayTrackText); 623 $(this).find(".rhp-events-icon").removeAddClass('pause', 'play'); 624 } 625 }); 626 // Fetch events result using ajax 627 if($('.rhp-search-form.suggestion .rhp-search-input') != undefined) { 628 let data = {action: "loadSearchboxSuggestion"}; 629 let ajaxurl = $("#adminAjaxURL").val(); 630 $.post(ajaxurl, data, function(response) { 631 if (response.data != undefined) { 632 let jsonEventListData = JSON.parse(JSON.stringify(response.data)); 633 $('.rhp-search-form.suggestion').data('suggestions', jsonEventListData); 634 } 635 if(response.success) {} 636 }); 637 } 638 // Design suggestion list ui on frontend 639 const searchboxWithSuggestionEvent = (suggestionList, event) => { 640 // image event section 641 let eventTitleText = (event.shorttitle != undefined) ? event.shorttitle : event.title; 642 let imgEventWrap = document.createElement('div'); 643 if(event.image != '' && event.image != undefined) { 644 let imgEvent = '<img src="'+event.image+'" title="'+eventTitleText+'" alt="'+eventTitleText+'" >'; 645 imgEventWrap.classList = "col-4 col-md-2 rhp-events-event-image rhp-event__image rhp-event__image--suggestion"; 646 imgEventWrap.innerHTML = imgEvent; 647 } 648 let titleEventWrap = document.createElement('div'); 649 // event title with single page url 650 let eventTitleLink = $('<a>', { 651 id: 'eventTitle', class: 'rhp-suggestion-link url', href: event.url, title: eventTitleText, rel: 'bookmark', 652 html: '<h6 class="m-0 rhp-event__title rhp-event__title--suggestion">'+eventTitleText+'</h6>', 653 }); 654 // event info section 655 let infoEventWrap = $('<div>', {class: 'col-8 col-md-10 px-1 rhp-event__info rhp-event__info--suggestion',}).append(eventTitleLink); 656 if(event.description != undefined) { 657 let eventDescription = $('<div>', {class: 'col-12 mt-1 rhp-event__description rhp-event__description--suggestion', html: event.description.length > 147 ? event.description.substring(0, 147) + '...' : event.description}); 658 infoEventWrap.append(eventDescription); 659 } 660 // final event for list 661 let finalEventWrap = $('<div>', {class: 'row g-0 m-2 rhp-event__single-event rhp-event__single-event--suggestion',}).append(imgEventWrap).append(infoEventWrap); 662 suggestionList.append(finalEventWrap); 663 }; 664 // Draw suggestion list section below search box 665 const drawSuggestionForSearchbox = (searchboxForm) => { 666 if(!(searchboxForm.hasClass('suggestion'))) return; 667 let suggestionList = searchboxForm.find('.suggestion-list'); 668 suggestionList.html(''); 669 let page = searchboxForm.data('page') || 1, 670 maxpage = searchboxForm.data('maxpage') || 0, 671 maxcount = searchboxForm.data('maxcount') || 0, 672 count = searchboxForm.data('count') || 5, 673 start = (page - 1) * count, end = start + count; 674 if(page < 1 || page > maxpage) return; 675 let result = (start > maxcount) ? [] : searchboxForm.data('filter').slice(start, end); 676 if(Array.isArray(result) || typeof result === 'object') { 677 if(result.length === 0) return; 678 if(maxpage > 1 && page > 0) { 679 let pagination = $('<div>', {class: 'col-12 row g-0 gap-1 justify-content-end rhp__pagination rhp__pagination--suggestion px-1',}); 680 pagination.append($('<a>', { 681 class: 'col-auto '+((page > 1) ? 'rhp__pagination-active' : 'rhp__pagination-inactive') 682 +' rhp__pagination-prev rhp__pagination-prev--suggestion', href: 'javascript:void(0);', title: 'Prev', html: '<i class="rhp-events-icon left"></i>', 683 })); 684 pagination.append($('<a>', { 685 class: 'col-auto '+((page < maxpage) ? 'rhp__pagination-active' : 'rhp__pagination-inactive') 686 +' rhp__pagination-next rhp__pagination-next--suggestion', href: 'javascript:void(0);', title: 'Next', html: '<i class="rhp-events-icon right"></i>', 687 })); 688 suggestionList.append(pagination); 689 } 690 $.each(result, function(index, event) { 691 searchboxWithSuggestionEvent(suggestionList, event); 692 }); 693 } 694 } 695 // update save suggestion list in clear or input press 696 const updateSuggestionForSearchbox = (filter, searchbox) => { 697 if(!(searchbox.closest('.rhp-search-form').hasClass('suggestion'))) return; 698 let suggestions = searchbox.closest('.rhp-search-form').data('suggestions'); 699 if(Array.isArray(suggestions) || typeof suggestions === 'object') { 700 let result = filter.length > 0 ? $.map(suggestions, function(suggestion) { 701 return (suggestion.title.toLowerCase().includes(filter) || 702 (suggestion.main_title != undefined && suggestion.main_title.toLowerCase().includes(filter)) || 703 (suggestion.shorttitle != undefined && suggestion.shorttitle.toLowerCase().includes(filter)) || 704 (suggestion.shorttitle != undefined && suggestion.shorttitle.toLowerCase().includes(filter)) || 705 (suggestion.description != undefined && suggestion.description.toLowerCase().includes(filter)) || 706 (Array.isArray(suggestion.performers) && suggestion.performers.some(performer => performer.toLowerCase().includes(filter)))) ? suggestion : null; 707 }) : []; 708 searchbox.closest('.rhp-search-form').data({'filter': result, 'maxpage': Math.ceil(result.length / 5), 'maxcount': result.length, 'page': 1, 'count': 5}); 709 drawSuggestionForSearchbox(searchbox.closest('.rhp-search-form')); 710 } 711 }; 712 // clear seach box action on close icon click 713 $('.rhp-search-form .rhp-search-input + .rhp-events-icon').on('click', function () { 714 let searchbox = $(this).parent().find('.rhp-search-input'); 715 searchbox.val(''); 716 $(this).toggleClass('d-none', true); 717 updateSuggestionForSearchbox('', searchbox); 718 }); 719 // On input at search box update close icon and suggestions list 720 $('.rhp-search-form .rhp-search-input').on('input focus', function () { 721 let filter = $(this).val().toLowerCase(); 722 $(this).parent().find('.rhp-events-icon').toggleClass('d-none', filter === ''); 723 updateSuggestionForSearchbox(filter, $(this)); 724 }); 725 // Update pagination based on next arrow click 726 $('.rhp-search-form.suggestion').on('click', ".suggestion-list .rhp__pagination-next", function() { 727 if(!$(this).hasClass('rhp__pagination-active')) return; 728 let searchboxForm = $(this).closest('.rhp-search-form'), 729 page = searchboxForm.data('page') || 1, 730 maxpage = searchboxForm.data('maxpage') || 0; 731 page++; 732 page = (page < maxpage) ? page : maxpage; 733 searchboxForm.data('page', page); 734 drawSuggestionForSearchbox(searchboxForm); 735 }); 736 // Update pagination based on prev arrow click 737 $('.rhp-search-form.suggestion').on('click', ".suggestion-list .rhp__pagination-prev", function() { 738 if(!$(this).hasClass('rhp__pagination-active')) return; 739 let searchboxForm = $(this).closest('.rhp-search-form'), 740 page = searchboxForm.data('page') || 1; 741 page--; 742 page = (page < 1) ? 1 : page; 743 searchboxForm.data('page', page); 744 drawSuggestionForSearchbox(searchboxForm); 745 }); 746 // Remove clear icon and suggestion list on specific click actions 747 $(document).on('click', function(event) { 748 let searchboxForm = $('.rhp-search-form'); 749 if((searchboxForm.html() != undefined) && (!$(event.target).closest('.rhp-search-form').length && 750 !$(event.target).closest('.rhp__pagination--suggestion').length) || $(event.target).closest('.rhp-search-button').length 751 || $(event.target).closest('.rhp-suggestion-link').length) { 752 searchboxForm.find('.rhp-search-input').parent().find('.rhp-events-icon').toggleClass('d-none', true); 753 if(searchboxForm.hasClass('suggestion')) searchboxForm.find('.suggestion-list').html(''); 754 } 755 }); 756});
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.