1/** 2 * Javascript code that is associated with the front end of the calendar 3 * @version 5.0.2 4 * @license EventON JavaScript Assets 5 * Copyright (C) 2014-2025 Ashan Jay, AshanJay Designs LLC. 6 * 7 * PROPRIETARY LICENSE - All Rights Reserved 8 * 9 * Permission granted solely for personal use with valid EventON license. 10 * YOU MAY NOT: redistribute, resell, sublicense, or publish these Assets. 11 * 12 * Trademark: "EventON" is a trademark of AshanJay Designs LLC. 13 * Contact: [email protected] 14 * 15 * PROVIDED "AS IS" WITHOUT WARRANTY. VIOLATION MAY RESULT IN LEGAL ACTION. 16 */ 17 18jQuery(document).ready(function($){ 19 20 // restrict this only to frontend of the calendar 21 if ( evo_general_params != '' && evo_general_params !== undefined && evo_general_params.is_admin) return; 22 23 //return; 24 var BODY = $('body'); 25 var BUS = ''; // initial eventon calendar data 26 var ajax_url = evo_general_params.ajaxurl; 27 28 29// EventON calendar main function 30 // Calendar processing 2.8.6 u 4.6 31 $.fn.evo_calendar = function (options) { 32 33 var el = this; 34 var cal = this; 35 var cal = {}; 36 var calO = $.extend({ 37 'SC': {}, 38 'json':{}, 39 'type':'init' , 40 map_delay:0 41 }, options); 42 var SC = el.evo_shortcode_data(); 43 44 45 // load calendar eventcard and eventtop interactions 46 this.find('.eventon_list_event').each(function(){ 47 evo_cal_eventcard_interactions( $(this) ); 48 }); 49 50 var init = function(){ 51 52 // change IDs for map section for eventon widgets 53 if( $(el).hasClass('evcal_widget')){ 54 $(el).find('.evcal_gmaps').each(function(){ 55 var gmap_id = obj.attr('id'); 56 var new_gmal_id =gmap_id+'_widget'; 57 obj.attr({'id':new_gmal_id}) 58 }); 59 } 60 61 // load maps on calendar 62 _evo_run_eventcard_map_load(); 63 64 // initial actions on calendar 65 $(el).evo_cal_filtering(); 66 67 // localizing event time 68 $(el).evo_cal_localize_time(); 69 70 // load lightbox events on page load 71 $(cal).evo_cal_oneevent_onload(calO.type); 72 73 el.evo_cal_hide_data(); 74 75 live_now_cal(); 76 counters(); 77 }; 78 79 // support 80 var live_now_cal = function(){ 81 $(el).find('.evo_img_time').each(function(){ 82 if( $(this).closest('a.desc_trig').find('em.evcal_time').length ){ 83 _html = $(this).closest('a.desc_trig').find('em.evcal_time')[0].outerHTML; 84 $(this).html( _html ); 85 } 86 }); 87 } 88 89 var counters = function(){ 90 $(el).find('.evo_countdowner').each(function(){ 91 $(this).evo_countdown(); 92 }); 93 } 94 95 init(); 96 }; 97 98 99// Event Card handling / Bind Event Listeners --- v4.6.1 @updated 5.0 100 var evo_eventcard_listeners = function(){ 101 102 const EVO_Card_Listeners = { 103 E: { 104 B: $('body') 105 }, 106 init(){ 107 const { E } = this; 108 // Event listeners 109 E.B.on('click.evoCard', '.evo_et_trigger', (e) => this.evo_handle_et_sidePanel(e)); 110 E.B.on('evo_ajax_success_evo_et_trigger.evoCard', (e, OO, data, el) => this.evo_handle_et_sp_content(e, OO, data, el)); 111 E.B.on('click.evoCard', '.tzo_trig', (e) => this.localizeTime(e)); 112 E.B.on('click.evoCard', '.evo_event_more_img', (e) => this.handle_event_more_img(e)); 113 E.B.on('click.evoCard', '.evo_img_triglb', (e) => this.handle_img_triglb(e)); 114 E.B.on('click.evoCard', '.evo_repeat_series_date', (e) => this.handle_repeat_series_date(e)); 115 E.B.on('click.evoCard', '.copy.evo_ss', (e) => this.handle_copy_event_link(e)); 116 E.B.on('click.evoCard', '.evo_locimg_more', (e) => this.handle_locimg_more(e)); 117 E.B.on('click.evoCard', '.evo_gal_icon', (e) => this.handle_gal_icon(e)); 118 E.B.on('click.evoCard', '.evobtn_details_show_more', (e) => this.handle_details_show_more(e)); 119 E.B.on('click.evoCard', '.evcal_close', (e) => this.handle_close_eventcard(e)); 120 E.B.on('click.evoCard', '.evocmd_button', (e) => this.handle_evocmd_button(e)); 121 E.B.on('click.evoCard', '.evo_org_clk_link', (e) => this.handle_org_clk_link(e)); 122 E.B.on('click.evoCard', '.editEventBtnET', (e) => this.handle_edit_event_button(e)); 123 }, 124 125 // actions 126 // Opens a side panel for event type triggers, adding a class and setting up data 127 evo_handle_et_sidePanel(e) { 128 const { E } = this; 129 const $el = $(e.currentTarget); 130 e.preventDefault(); 131 $el.addClass('evo_sp_trig_on'); 132 const aData = $el.data('d'); 133 aData.adata.data['nonce'] = evo_general_params.n; 134 $el.evo_open_sidepanel(aData); 135 }, 136 137 // Populates the side panel with content from an AJAX response and removes the loading bar 138 evo_handle_et_sp_content(e, OO, data, el) { 139 $(el).evo_populate_sidepanel(data.html); 140 $('#evo_sp').find('.evo_loading_bar_holder').remove(); 141 }, 142 143 // Localizes the time display for elements with the tzo_trig class 144 localizeTime(e) { 145 e.preventDefault(); 146 e.stopPropagation(); 147 $(e.target).evo_localize_time(); 148 }, 149 150 // Changes the main event image when a thumbnail is clicked 151 handle_event_more_img(e) { 152 const $el = $(e.currentTarget); 153 const box = $el.closest('.evcal_eventcard'); 154 const gal = $el.closest('.evocard_fti_in'); 155 156 if (box.length === 0) return; 157 158 $el.siblings('span').removeClass('select'); 159 $el.addClass('select'); 160 161 const mainIMG = box.find('.evocard_main_image'); 162 mainIMG.data({ 163 h: $el.data('h'), 164 w: $el.data('w'), 165 f: $el.data('f') 166 }); 167 168 if (mainIMG.hasClass('def')) { 169 mainIMG.css('background-image', `url(${$el.data('f')})`); 170 } else { 171 mainIMG.html(`<span style="background-image:url(${$el.data('f')})"></span>`); 172 mainIMG.eventon_process_main_ft_img(); 173 } 174 }, 175 176 // Opens a lightbox to display a full-size event image when clicked 177 handle_img_triglb(e) { 178 const $el = $(e.currentTarget); 179 180 if ($el.hasClass('inlb')) return; 181 182 const __ac = parseInt($el.data('w')) >= parseInt($el.data('h')) ? 'iW' : 'iH'; 183 $el.evo_lightbox_open({ 184 uid: 'evocard_ft_img', 185 lbc: 'evolb_ft_img', 186 lbac: `within evocard_img ${__ac}`, 187 content: `<img class='evocard_main_image inlb' src='${$el.data('f')}' data-w='${$el.data('w')}' data-h='${$el.data('h')}' style='max-width:100%; max-height:100%;'/>`,
188 end: 'client', 189 lb_padding: '', 190 d: { event_id: $el.data('event_id'), ri: $el.data('ri') } 191 }); 192 }, 193 194 // Navigates to a repeat event's date URL based on user interaction type 195 handle_repeat_series_date(e) { 196 const $el = $(e.currentTarget); 197 if (!$el.parent().hasClass('clickable')) return; 198 199 const ux = $el.data('ux'); 200 const URL = $el.data('l'); 201 if (ux === 'def') window.location = URL; 202 if (ux === 'defA') window.open(URL, '_blank'); 203 }, 204 205 // Copies an event link to the clipboard and shows a temporary confirmation 206 handle_copy_event_link(e) { 207 const $el = $(e.currentTarget); 208 const ROW = $el.closest('.evcal_evdata_row'); 209 const link = decodeURIComponent($el.data('l')); 210 navigator.clipboard.writeText(link); 211 212 const evo_card_socialshare_html = ROW.html(); 213 ROW.html(`<p style='display:flex'><i class='fa fa-check marr10'></i> ${$el.data('t')}</p>`); 214 215 setTimeout(() => { 216 ROW.html(evo_card_socialshare_html); 217 }, 3000); 218 }, 219 220 // Toggles visibility of additional location images 221 handle_locimg_more(e) { 222 e.preventDefault(); 223 e.stopPropagation(); 224 $(e.currentTarget).closest('.evo_metarow_locImg').toggleClass('vis'); 225 }, 226 227 // Updates the gallery main image when a gallery icon is clicked 228 handle_gal_icon(e) { 229 e.preventDefault(); 230 e.stopPropagation(); 231 232 const $el = $(e.currentTarget); 233 if ($el.hasClass('on')) return; 234 $el.siblings('div').removeClass('on'); 235 $el.addClass('on'); 236 237 $el.closest('.evo_gal_box').find('.evo_gal_main_img') 238 .css('background-image', `url(${$el.data('u')})`) 239 .data('f', $el.data('u')) 240 .data('h', $el.data('h')) 241 .data('w', $el.data('w')); 242 }, 243 244 // Toggles the display of additional event details 245 handle_details_show_more(e) { 246 e.preventDefault(); 247 this.control_more_less($(e.currentTarget)); 248 }, 249 250 // Closes the event card by sliding it up 251 handle_close_eventcard(e) { 252 e.preventDefault(); 253 $(e.currentTarget).closest('.evcal_eventcard').slideUp().removeClass('open'); 254 }, 255 256 // Redirects to a URL when an event command button is clicked 257 handle_evocmd_button(e) { 258 e.preventDefault(); 259 e.stopPropagation(); 260 261 const $el = $(e.currentTarget); 262 const href = $el.data('href'); 263 if ($el.data('target') === 'yes') { 264 window.open(href, '_blank'); 265 } else { 266 window.location = href; 267 } 268 }, 269 270 // Opens an organizer's link in a new tab 271 handle_org_clk_link(e) { 272 window.open($(e.currentTarget).data('link'), '_blank'); 273 }, 274 275 // Redirects to the event edit page 276 handle_edit_event_button(e) { 277 e.stopPropagation(); 278 const href = $(e.currentTarget).attr('href'); 279 window.open(href); 280 }, 281 282 // Controls the more/less toggle for event details display 283 control_more_less(obj) { 284 const content = obj.attr('content'); 285 const current_text = obj.find('.ev_more_text').html(); 286 const changeTo_text = obj.find('.ev_more_text').attr('data-txt'); 287 const cell = obj.closest('.evcal_evdata_cell'); 288 289 if (content === 'less') { 290 cell.removeClass('shorter_desc'); 291 obj.attr('content', 'more'); 292 obj.find('.ev_more_arrow').removeClass('ard'); 293 obj.find('.ev_more_text').attr('data-txt', current_text).html(changeTo_text); 294 } else { 295 cell.addClass('shorter_desc'); 296 obj.attr('content', 'less'); 297 obj.find('.ev_more_arrow').addClass('ard'); 298 obj.find('.ev_more_text').attr('data-txt', current_text).html(changeTo_text); 299 } 300 } 301 }; 302 303 EVO_Card_Listeners.init(); 304 305 } 306 var evo_cal_eventcard_interactions = function( EC , load_maps ){
307 308 // process featured image sizes 309 EC.find(".evocard_main_image").eventon_process_main_ft_img( ); 310 311 // process content sliders 312 EC.find('.evo_elm_HCS').each(function(){ 313 $(this).evoContentSlider(); 314 }); 315 316 // countdown 317 EC.find('.evo_countdowner').each(function(){ 318 var obj = $(this); 319 obj.removeClass('evo_cd_on'); 320 obj.evo_countdown(); 321 }); 322 323 $(window).on('resize',function(){ 324 BODY.find(".evocard_main_image").each(function(){ 325 $(this).eventon_process_main_ft_img(); 326 }); 327 //EC.find(".evocard_main_image").eventon_process_main_ft_img(); 328 }); 329 } 330 $.fn._evo_cal_eventcard_interactions = function( EC, load_maps){ 331 evo_cal_eventcard_interactions( EC , load_maps); 332 } 333 334 // run all map waiting map @4.6.1 335 function _evo_run_eventcard_map_load(){ 336 BODY.evo_run_eventcard_map_load(); 337 } 338 $.fn.evo_run_eventcard_map_load = function(){ 339 340 time = 600; 341 342 BODY.find('.evo_metarow_gmap').each(function(index){ 343 O = $(this); 344 if( !(O.is(":visible")) ) return; 345 O.evo_load_gmap({ 346 map_canvas_id: O.attr('id'), 347 trigger_point:'evo_calendar', 348 delay: time 349 }); 350 time += 600; 351 }); 352 } 353 354// EventTop Interactions v4.6 355 var evo_cal_eventtop_interactions = function( ET ){ } 356 357// RUN on Page load 358 EVO_Global_Init(); 359 360 function EVO_Global_Init(){ 361 362 EVO_Interactions(); 363 364 evo_eventcard_listeners(); 365 366 // check if calendars are present in the page 367 var run_initload = false; 368 369 if( $('body').find('.ajde_evcal_calendar').length > 0 ) run_initload = true; 370 if( $('body').find('.ajax_loading_cal').length > 0 ) run_initload = true; 371 if( $('body').find('.eventon_single_event').length > 0 ) run_initload = true; 372 373 if(run_initload == false) return false; 374 375 var data_arg = {}; 376 377 BODY.trigger('evo_global_page_run'); 378 379 data_arg['global'] = $('#evo_global_data').data('d'); 380 data_arg['cals'] ={}; 381 data_arg['nonce'] = evo_general_params.n; 382 383 // run through all the calendars on page 384 BODY.find('.ajde_evcal_calendar').each(function(){ 385 const CAL = $(this); 386 var SC = CAL.evo_shortcode_data(); 387 388 CAL.evo_pre_cal(); 389 390 if( CAL.hasClass('ajax_loading_cal')){ 391 data_arg['cals'][ CAL.attr('id')] = {}; 392 data_arg['cals'][ CAL.attr('id')]['sc'] = SC; 393 394 BODY.trigger('evo_global_page_run_after', CAL , SC );// @4.6.1 395 } 396 }); 397 398 BODY.evo_admin_get_ajax({ 399 adata:{ 400 data:data_arg, 401 a:'eventon_init_load',ajax_type:'endpoint',end:'client' 402 }, 403 onSuccess:function( OO, data, LB){ 404 $('#evo_global_data').data('d', data); 405 406 BUS = data; 407 408 // append html to calendars if present 409 if('cals' in data){ 410 var time = 300; 411 $.each(data.cals, function(i,v){ 412 413 setTimeout( function(){ 414 415 CAL = BODY.find('#'+ i); 416 if(CAL.length === 0) return; 417 418 if('html' in v){ 419 CAL.find('#evcal_list').html( v.html ); 420 CAL.removeClass('ajax_loading_cal'); 421 CAL.find('.evo_ajax_load_events').remove(); 422 } 423 424 // load SC and JSON to calendar 425 CAL.evo_cal_functions({action:'update_shortcodes',SC: v.sc}); 426 CAL.evo_cal_functions({action:'update_json',json: v.json}); 427 428 $('body').trigger('evo_init_ajax_success_each_cal', [data, i, v, CAL]); 429 430 }, time); 431 time += 300; 432 }); 433 } 434 435 $('body').trigger('evo_init_ajax_success', [data]); 436 437 // after timeout based cal loading, process all cals 438 setTimeout( function(){ 439 BODY.find('.ajde_evcal_calendar').each(function(){ 440 if( $(this).hasClass('.ajax_loading_cal') ) return; 441 $(this).evo_calendar({'type':'complete'}); 442 }); 443 }, time ); 444 }, 445 onComplete:function( OO, data){ 446 $('body').trigger('evo_init_ajax_completed', [data]); 447 } 448 }); 449 450 handlebar_additional_arguments(); 451 452 evo_cal_body_listeners(); 453 454 // run basic countdown timers 455 BODY.find('.evo_countdowner').each(function(){ 456 $(this).evo_countdown(); 457 }); 458 } 459 460 461 462// ELEMENTS u4.9 463 // tooltips 464 $('body').on('mouseover','.ajdeToolTip, .evotooltip, .evotooltipfree',function(event){ 465 event.stopPropagation(); 466 467 const el = $(this); 468 if(el.hasClass('show')) return; 469 470 var free = el.hasClass('free') || el.hasClass('evotooltipfree'); 471 var content = el.data('d') || el.attr('title') || ''; 472 if (!content) return; 473 474 var p = el.position(); 475 var cor = getCoords(event.target); 476 477 $('.evo_tooltip_box').removeClass('show').removeClass('L').html( content ); 478 var box_height = $('.evo_tooltip_box').height(); 479 var box_width = $('.evo_tooltip_box').width();
480 var top = cor.top - 55 - box_height + (free ? 20 : 0); 481 482 $('.evo_tooltip_box').css({'top': top, 'left': ( cor.left + 5 ) }) 483 .addClass('show'); 484 485 // left align 486 if( $(this).hasClass('L')){ 487 $('.evo_tooltip_box').css({'left': (cor.left - box_width - 15) }).addClass('L'); 488 } 489 }) 490 .on('mouseout','.ajdeToolTip, .evotooltip, .evotooltipfree',function(e){ 491 event.stopPropagation(); 492 var relatedTarget = $(event.relatedTarget); 493 var target = $(this); 494 495 $('.evo_tooltip_box').removeClass('show'); 496 }); 497 498 function getCoords(elem) { // crossbrowser version 499 var box = elem.getBoundingClientRect(); 500 //console.log(box); 501 502 var body = document.body; 503 var docEl = document.documentElement; 504 505 var scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop; 506 var scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft; 507 508 var clientTop = docEl.clientTop || body.clientTop || 0; 509 var clientLeft = docEl.clientLeft || body.clientLeft || 0; 510 511 var top = box.top + scrollTop - clientTop; 512 var left = box.left + scrollLeft - clientLeft; 513 514 return { top: Math.round(top), left: Math.round(left) }; 515 } 516 // yes no button 517 $('body').on('click','.ajde_yn_btn ', function(event){ 518 519 // stop this code from working on wp-admin 520 if($('body').hasClass('wp-admin')) return false; 521 522 var obj = $(this); 523 var afterstatement = obj.attr('afterstatement'); 524 afterstatement = (afterstatement === undefined)? obj.attr('data-afterstatement'): afterstatement; 525 var uid = ''; 526 527 // yes 528 if(obj.hasClass('NO')){ 529 obj.removeClass('NO'); 530 obj.siblings('input').val('yes'); 531 532 // afterstatment 533 if(afterstatement!=''){ 534 var type = (obj.attr('as_type')=='class')? '.':'#'; 535 if( obj.data('uid') !== undefined) uid = obj.data('uid'); 536 $(type+ afterstatement).slideDown('fast'); 537 } 538 539 }else{//no 540 obj.addClass('NO'); 541 obj.siblings('input').val('no'); 542 543 if(afterstatement!=''){ 544 var type = (obj.attr('as_type')=='class')? '.':'#'; 545 $(type+ afterstatement ).slideUp('fast'); 546 } 547 } 548 }); 549 550 // content slider v4.9.13 551 // jQuery plugin for content slider 552 $.fn.evoContentSlider = function() { 553 return this.each(function() { 554 const $slider = $(this); 555 const $inner = $slider.find('.evo_elm_HCS_in'); 556 const scrollAmount = 10; // Wheel scroll speed 557 let scrollTimeout; 558 559 // Initial button visibility 560 updateButtonVisibility($slider); 561 562 $slider.data('evo-slider-initialized', true); 563 564 // Button click handler 565 $slider.on('click', '.evo_elmHCS_nav.content_slide_trig', function() { 566 const $button = $(this); 567 const scrollDistance = parseInt($slider.width()) / 2; 568 const currentScroll = $inner.scrollLeft(); 569 let newScroll; 570 571 if ($button.hasClass('HCSnavR')) { 572 newScroll = currentScroll + scrollDistance; 573 $slider.find('.HCSnavL')[0].classList.add('vis'); 574 } else { 575 newScroll = Math.max(0, currentScroll - scrollDistance); 576 } 577 578 $inner.animate({ scrollLeft: newScroll }, 200, () => { 579 updateButtonVisibility($slider); 580 }); 581 }); 582 583 // Wheel scrolling 584 $inner[0].addEventListener('wheel', function(e) { 585 e.preventDefault(); 586 const delta = e.deltaY; 587 const scrollableLength = this.scrollWidth - parseInt($slider.width()); 588 const newScroll = Math.max(0, Math.min($inner.scrollLeft() + (delta > 0 ? scrollAmount : -scrollAmount), scrollableLength)); 589 $inner.scrollLeft(newScroll); 590 updateButtonVisibility($slider); 591 }, { passive: false }); 592 593 // Touch scrolling 594 $inner[0].addEventListener('scroll', function() { 595 clearTimeout(scrollTimeout); 596 scrollTimeout = setTimeout(() => { 597 updateButtonVisibility($slider); 598 }, 100); 599 }); 600 }); 601 }; 602 603 // Add reload method 604 $('body').on('evo_reload_slider', function(event, $slider){ 605 updateButtonVisibility($slider); 606 }); 607 608 609 // Update button visibility 610 function updateButtonVisibility($slider) { 611 const $inner = $slider.find('.evo_elm_HCS_in'); 612 const scrollableLength = $inner[0].scrollWidth - parseInt($slider.width()); 613 const currentScroll = $inner.scrollLeft(); 614 const leftButton = $slider.find('.HCSnavL')[0]; 615 const rightButton = $slider.find('.HCSnavR')[0]; 616 617 if (scrollableLength <= 0) { 618 leftButton.classList.remove('vis'); 619 rightButton.classList.remove('vis'); 620 return; 621 } 622 623 leftButton.classList.toggle('vis', currentScroll >= 10); 624 rightButton.classList.toggle('vis', currentScroll < scrollableLength - 5); 625 } 626 627 // Debounced resize handler 628 let resizeTimeout; 629 $(window).on('resize', function() { 630 clearTimeout(resizeTimeout); 631 resizeTimeout = setTimeout(() => { 632 $('.evo_elm_HCS').each(function() { 633 updateButtonVisibility($(this), $(this).find('.evo_elm_HCS_in')); 634 }); 635 }, 100); 636 }); 637 638 BODY.find('.evo_elm_HCS').each( function(event){ 639 $(this).evoContentSlider(); 640 }); 641 642 // dynamic select @4.8.2
643 BODY.on('click', '.evo_elm_dynamic_select_trig',function(e){ 644 e.preventDefault(); 645 const btn = $(this); 646 const row = btn.closest('.evo_elm_dynamic_select'); 647 const list = btn.find('.evoelm_ds_list'); 648 649 row.toggleClass('open'); 650 btn.toggleClass('open'); 651 652 if (btn.hasClass('open')) { 653 const options = btn.siblings('div').data('d'); 654 let html = `<div class="evoelm_ds_list evobr10 evodfx evofx_dr_c evobgcw evofz14 evoff_2 evo_ofh evoposa evoleft0 " role="listbox" aria-labelledby="selected-option">`; 655 656 $.each(options, (index, value) => { 657 html += `<span class="evoelm_ds_list_item evopad10 evocurp evoborderb" role="option" tabindex="-1" data-index="${index}">${value}</span>`; 658 }); 659 660 html += '</div>'; 661 btn.append(html); 662 } else { 663 list.remove(); 664 } 665 }); 666 667 $(document).click(function(event){ 668 if( !$(event.target).closest('.evo_elm_dynamic_select').length){ 669 const openBox = BODY.find('.evo_elm_dynamic_select.open'); 670 openBox.removeClass('open').find('button').removeClass('open'); 671 openBox.find('.evoelm_ds_list').remove(); 672 } 673 }); 674 675 // item clicked from the list 676 BODY.on('click','.evoelm_ds_list_item',function(event){ 677 const item = $(this); 678 const box = item.closest('.evo_elm_dynamic_select'); 679 const value = item.data('index'); 680 681 // update focus item name 682 box.find('.evoelm_ds_current').html( item.html() ); 683 684 // set new value to input 685 box.find('input').val( value ); 686 687 // plug for others 688 BODY.trigger('evoelm_dynamic_select_clicked', [ item, value, box ]); 689 690 box.removeClass('open'); 691 box.find('button').removeClass('open'); 692 item.parent().remove(); 693 694 }); 695 696 697 // Image Select @added 4.9 @updated: 4.9.12 698 var file_frame; 699 var __img_index; 700 var __img_obj; 701 var __img_box; 702 var __img_type; 703 704 BODY.on('click','.evolm_img_select_trig',function(event) { 705 event.preventDefault(); 706 console.log('ef'); 707 708 __img_obj = $(this); 709 __img_box = __img_obj.closest('.evo_metafield_image'); 710 __img_type = __img_box.hasClass('multi')? 'multi': 'single'; 711 712 if( __img_type == 'single' && __img_box.hasClass('has_img') ) return; 713 if( __img_type == 'multi'){ 714 __img_index = __img_obj.data('index'); 715 716 // remove image 717 if( __img_obj.hasClass('on')){ 718 __img_obj.css('background-image', '').removeClass('on'); 719 __img_obj.find('input').val( '' ); 720 return; 721 } 722 } 723 724 // Reset file_frame to avoid stale state 725 if (file_frame) { file_frame.close(); file_frame = null; } 726 727 // Get user_id (0 for non-logged-in users) 728 var user_id = __img_obj.data('userid') ? parseInt(__img_obj.data('userid')) : 0; 729 var library_args = { type: 'image' }; 730 if (user_id > 0) { library_args.author = user_id; } 731 732 // Create the media frame 733 file_frame = wp.media.frames.downloadable_file = wp.media({ 734 title: 'Choose an Image', 735 button: {text: 'Use Image'}, 736 multiple: false, 737 library: library_args, 738 }); 739 740 741 // When an image is selected, run a callback. 742 file_frame.on( 'select', function() { 743 var selection = file_frame.state().get('selection'); 744 //console.log('Selection:', selection.toJSON()); 745 746 if (selection.length > 0) { 747 var attachment = selection.first().toJSON(); 748 //console.log('Selected attachment:', attachment); 749 750 if (__img_type == 'single') { 751 __img_box.addClass('has_img'); 752 __img_box.find('input.evo_meta_img').val(attachment.id); 753 __img_box.find('.evoelm_img_holder').css('background-image', 'url(' + attachment.url + ')'); 754 //console.log('Single image updated:', __img_box.find('.evoelm_img_holder').css('background-image')); 755 } else { 756 __img_obj.css('background-image', 'url(' + attachment.url + ')').addClass('on'); 757 __img_obj.find('input').val(attachment.id); 758 //console.log('Multi image updated:', __img_obj.css('background-image'));
759 } 760 } else { 761 console.log('No image selected'); 762 } 763 764 }); 765 766 // Handle errors 767 file_frame.on('error', function(error) { 768 console.error('Media Uploader Error:', error); alert('Error: ' + error.message); 769 }); 770 771 // Finally, open the modal. 772 file_frame.open(); 773 774 }); 775 // remove image 776 BODY.on('click','.evoel_img_remove_trig',function(){ 777 778 const field = $(this).closest('.evo_metafield_image'); 779 780 if( !(field.hasClass('has_img') ) ) return; 781 782 field.removeClass('has_img'); 783 field.find('input').val(''); 784 field.find('button').addClass('chooseimg'); 785 field.find('.evoelm_img_holder').css('background-image', '' ); 786 }); 787 788 // plus minus changer @updated 4.9 789 $('body').on('click','.evo_plusminus_change', function(event){ 790 791 // only run on frontend 792 if( evo_general_params.cal.is_admin ) return; 793 794 OBJ = $(this); 795 796 QTY = parseInt(OBJ.siblings('input').val()); 797 MAX = OBJ.siblings('input').data('max'); 798 if(!MAX) MAX = OBJ.siblings('input').attr('max'); 799 800 NEWQTY = (OBJ.hasClass('plu'))? QTY+1: QTY-1; 801 802 NEWQTY =(NEWQTY <= 0)? 0: NEWQTY; 803 804 // can not go below 1 805 if( NEWQTY == 0 && OBJ.hasClass('min') ){ return; } 806 807 NEWQTY = (MAX!='' && NEWQTY > MAX)? MAX: NEWQTY; 808 if( isNaN( NEWQTY ) ) NEWQTY = 0; 809 810 OBJ.siblings('input').val(NEWQTY).attr('value',NEWQTY); 811 812 if( QTY != NEWQTY) $('body').trigger('evo_plusminus_changed',[NEWQTY, MAX, OBJ]); 813 814 if(NEWQTY == MAX){ 815 PLU = OBJ.parent().find('b.plu'); 816 if(!PLU.hasClass('reached')) PLU.addClass('reached'); 817 818 if(QTY == MAX) $('body').trigger('evo_plusminus_max_reached',[NEWQTY, MAX, OBJ]); 819 }else{ 820 OBJ.parent().find('b.plu').removeClass('reached'); 821 } 822 }); 823 824// CAL BODY Listeners 825 function evo_cal_body_listeners(){ 826 BODY.evo_cal_lb_listeners(); 827 828 const EVO_Listeners = { 829 E: { 830 B: $('body') 831 }, 832 init(){ 833 const { B } = this.E; 834 835 // FAQ toggle 836 B.on('click.evoCal', '.evo_faq_toggle', (e) => this.handle_faq_toggle(e)); 837 838 // General AJAX trigger 839 B.on('click.evoCal', '.evo_trig_ajax', (e) => this.handle_general_ajax(e)); 840 841 // Event anywhere lightbox trigger 842 B.on('click.evoCal', '.eventon_anywhere.evoajax', (e) => this.handle_event_anywhere(e)); 843 844 // No events button click 845 B.on('click.evoCal', '.evo_no_events_btn', (e) => this.handle_no_events_btn(e)); 846 847 // Month switch arrows 848 B.on('click.evoCal', '.evcal_arrows', (e) => this.handle_month_switch(e)); 849 850 // Show more events 851 B.on('click.evoCal', '.evoShow_more_events', (e) => this.handle_show_more_events(e)); 852 853 // Refresh event top (placeholder) 854 B.on('runajax_refresh_eventtop.evoCal', (e, OBJ, nonce) => this.handle_refresh_eventtop(e, OBJ, nonce)); 855 856 // Event card slide down complete 857 B.on('evo_slidedown_eventcard_complete.evoCal', (e, event_id, obj, is_slide_down) => this.handle_slidedown_complete(e, event_id, obj, is_slide_down)); 858 859 // Jumper month/year switch 860 B.on('calendar_month_changed.evoCal', (e, CAL) => this.handle_calendar_month_changed(e, CAL)); 861 862 // Go to today button 863 B.on('click.evoCal', '.evo-gototoday-btn', (e) => this.handle_gototoday_btn(e)); 864 865 // Refresh now calendar 866 B.on('runajax_refresh_now_cal.evoCal', (e, OBJ, nonce) => this.handle_refresh_now_cal(e, OBJ, nonce)); 867 868 // Calendar header buttons 869 this.handle_cal_head_interactions(); 870 B.on('show_cal_head_btn.evoCal', (e, obj) => this.handle_show_cal_head_btn(e, obj)); 871 B.on('hide_cal_head_btn.evoCal', (e, obj) => this.handle_hide_cal_head_btn(e, obj)); 872 873 // Tile box style 3 click 874 B.on('click.evoCal', '.ajde_evcal_calendar.boxstyle3 .eventon_list_event', (e) => this.handle_tile_box_click(e)); 875 876 // Event card opening 877 B.on('click.evoCal', '.eventon_list_event .desc_trig', (e) => this.handle_desc_trig(e)); 878 879 }, 880 // Toggles FAQ answer visibility and updates icon 881 handle_faq_toggle(e) { 882 const toggle = $(e.currentTarget); 883 const answer = toggle.next('.evo_faq_answer'); 884 const icon = toggle.find('i.fa');
885 answer.toggle(); 886 icon.toggleClass('fa-plus fa-minus'); 887 }, 888 // Triggers general AJAX request with data from the clicked element 889 handle_general_ajax(e) { 890 const obj = $(e.target); 891 let ajax_data = obj.data(); 892 $(document).data('evo_data', ajax_data); 893 this.E.B.trigger('evo_before_trig_ajax', [obj]); 894 const new_ajax_data = $(document).data('evo_data'); 895 new_ajax_data['nn'] = the_ajax_script.postnonce; 896 $.ajax({ 897 beforeSend: () => { 898 this.E.B.trigger('evo_beforesend_trig_ajax', [obj, new_ajax_data]); 899 }, 900 type: 'POST', 901 url: get_ajax_url('eventon_gen_trig_ajax'), 902 data: new_ajax_data, 903 dataType: 'json', 904 success: (return_data) => { 905 this.E.B.trigger('evo_success_trig_ajax', [obj, new_ajax_data, return_data]); 906 }, 907 complete: () => { 908 this.E.B.trigger('evo_complete_trig_ajax', [obj, new_ajax_data]); 909 } 910 }); 911 }, 912 // Triggers lightbox for event anywhere links 913 handle_event_anywhere(e) { 914 e.preventDefault(); 915 const obj = $(e.currentTarget); 916 const data = obj.data('sc'); 917 if (data.ev_uxval == '4') return; 918 data['evortl'] = 'no'; 919 if ('id' in data) data['event_id'] = data.id; 920 data['ux_val'] = '3a'; 921 data['ajax_eventtop_show_content'] = false; 922 obj.evo_cal_lightbox_trigger(data, obj, false); 923 }, 924 925 // Handles click on no events button 926 handle_no_events_btn(e) { 927 this.E.B.trigger('click_on_no_event_btn', [$(e.currentTarget)]); 928 }, 929 930 // Switches calendar month on arrow click 931 handle_month_switch(e) { 932 e.preventDefault(); 933 const CAL = $(e.currentTarget).closest('.ajde_evcal_calendar'); 934 let dir = $(e.currentTarget).hasClass('evcal_btn_prev') ? 'prev' : 'next'; 935 const cal_id = CAL.attr('id'); 936 if (CAL.hasClass('evortl')) { 937 dir = dir == 'next' ? 'prev' : 'next'; 938 } 939 if ($(e.currentTarget).closest('.evo_footer_nav').length > 0) { 940 const BOX = $(e.currentTarget).closest('.evo_footer_nav'); 941 const offset = BOX.offset(); 942 const scrolltop = $(window).scrollTop(); 943 const viewport_top = offset.top - scrolltop; 944 CAL.addClass('nav_from_foot').data('viewport_top', viewport_top); 945 } 946 run_cal_ajax(cal_id, dir, 'switchmonth'); 947 }, 948 949 // Shows more events in the calendar list 950 handle_show_more_events(e) { 951 const CAL = $(e.currentTarget).closest('.ajde_evcal_calendar'); 952 const SC = CAL.evo_shortcode_data(); 953 const OBJ = $(e.currentTarget); 954 if (SC.show_limit_redir !== '') { 955 window.location = SC.show_limit_redir; 956 return false; 957 } 958 if (SC.show_limit_ajax == 'yes') { 959 const CURRENT_PAGED = parseInt(SC.show_limit_paged); 960 CAL.evo_update_cal_sc({ F: 'show_limit_paged', V: CURRENT_PAGED + 1 }); 961 run_cal_ajax(CAL.attr('id'), 'none', 'paged'); 962 } else { 963 const event_count = parseInt(SC.event_count); 964 const eventList = OBJ.parent(); 965 const allEvents = eventList.find('.eventon_list_event').length; 966 const currentShowing = eventList.find('.eventon_list_event:visible').length; 967 for (let x = 1; x <= event_count; x++) { 968 const inde = currentShowing + x - 1; 969 eventList.find(`.eventon_list_event:eq(${inde})`).slideDown(); 970 } 971 if (allEvents >
971= currentShowing && allEvents <= (currentShowing + event_count)) { 972 OBJ.fadeOut(); 973 } 974 } 975 }, 976 977 // Placeholder for refreshing event top 978 handle_refresh_eventtop(e, OBJ, nonce) {}, 979 980 // Processes event card interactions after slide down 981 handle_slidedown_complete(e, event_id, obj, is_slide_down) { 982 if (!is_slide_down) return; 983 setTimeout(() => { 984 const OO = obj.closest('.eventon_list_event'); 985 evo_cal_eventcard_interactions(OO, true); 986 }, 300); 987 }, 988 989 // Updates jumper UI when calendar month changes 990 handle_calendar_month_changed(e, CAL) { 991 const SC = CAL.evo_shortcode_data(); 992 const B = CAL.find('.evo-gototoday-btn'); 993 const O = CAL.find('.evo_j_container'); 994 O.find('.evo_j_months a').removeClass('set'); 995 O.find(`.evo_j_months a[data-val="${SC.fixed_month}"]`).addClass('set'); 996 O.find('.evo_j_years a').removeClass('set'); 997 O.find(`.evo_j_years a[data-val="${SC.fixed_year}"]`).addClass('set'); 998 if (SC.fixed_month != B.data('mo') || SC.fixed_year != B.data('yr')) { 999 this.E.B.trigger('show_cal_head_btn', [B]); 1000 } else { 1001 this.E.B.trigger('hide_cal_head_btn', [B]); 1002 } 1003 }, 1004 1005 // Navigates to today’s date on calendar 1006 handle_gototoday_btn(e) { 1007 const obj = $(e.currentTarget); 1008 const CAL = obj.closest('.ajde_evcal_calendar'); 1009 const calid = CAL.attr('id'); 1010 CAL.evo_update_cal_sc({ F: 'fixed_month', V: obj.data('mo') }); 1011 CAL.evo_update_cal_sc({ F: 'fixed_year', V: obj.data('yr') }); 1012 run_cal_ajax(calid, 'none', 'today'); 1013 this.E.B.trigger('hide_cal_head_btn', [obj]); 1014 }, 1015 1016 // Refreshes now calendar via AJAX 1017 handle_refresh_now_cal(e, OBJ, nonce) { 1018 const section = OBJ.closest('.evo_eventon_live_now_section'); 1019 const CAL = section.find('.ajde_evcal_calendar').eq(0); 1020 const dataA = { 1021 nonce: evo_general_params.n, 1022 other: OBJ.data(), 1023 SC: CAL.evo_shortcode_data() 1024 }; 1025 $.ajax({
1026 beforeSend: () => { 1027 section.addClass('evoloading'); 1028 }, 1029 type: 'POST', 1030 url: get_ajax_url('eventon_refresh_now_cal'), 1031 data: dataA, 1032 dataType: 'json', 1033 success: (data) => { 1034 if (data.status == 'good') { 1035 section.html(data.html); 1036 this.E.B.trigger('evo_refresh_designated_elm', [OBJ, 'evo_vir_data']); 1037 } 1038 }, 1039 complete: () => { 1040 section.removeClass('evoloading'); 1041 this.E.B.find('.evo_countdowner').each(function() { 1042 $(this).evo_countdown(); 1043 }); 1044 } 1045 }); 1046 }, 1047 1048 // Toggles visibility of calendar header buttons 1049 handle_cal_head_interactions() { 1050 const { B } = this.E; 1051 B.on('click.evoCal', '.cal_head_btn', (e) => { 1052 const obj = $(e.currentTarget); 1053 if (obj.hasClass('vis')) { 1054 this.E.B.trigger('hide_cal_head_btn', [obj]); 1055 } else { 1056 this.E.B.trigger('show_cal_head_btn', [obj]); 1057 } 1058 }); 1059 // when a header button is clicked 1060 B.on('evo_cal_header_btn_clicked',function(event, O, CAL){ 1061 1062 var SC = CAL.evo_shortcode_data(); 1063 1064 // if search is open on init > return 1065 if( evo_general_params.cal.search_openoninit ) return; 1066 1067 if( O.hasClass('evo-search')){ 1068 if( O.hasClass('vis')){ 1069 CAL.find('.evo_search_bar').show(1, function(){ 1070 $(this).find('input').focus(); 1071 }); 1072 }else{ 1073 CAL.find('.evo_search_bar').hide(); 1074 } 1075 } 1076 1077 // hide the search 1078 if( O.hasClass('evo-sort-btn') || O.hasClass('evo-filter-btn')){ 1079 CAL.find('.evo_search_bar').hide(); 1080 } 1081 }); 1082 1083 }, 1084 1085 // Shows calendar header button 1086 handle_show_cal_head_btn(e, obj) { 1087 if (!obj.hasClass('evo-gototoday-btn')) { 1088 obj.siblings(':not(.evo-gototoday-btn)').removeClass('show vis'); 1089 } 1090 obj.addClass('show vis'); 1091 const CAL = obj.closest('.ajde_evcal_calendar'); 1092 this.E.B.trigger('evo_cal_header_btn_clicked', [obj, CAL, 'show']); 1093 }, 1094 1095 // Hides calendar header button 1096 handle_hide_cal_head_btn(e, obj) { 1097 const CAL = obj.closest('.ajde_evcal_calendar'); 1098 obj.removeClass('show vis'); 1099 this.E.B.trigger('evo_cal_header_btn_clicked', [obj, CAL, 'hide']); 1100 }, 1101 1102 // Triggers desc_trig click for tile box style 3 1103 handle_tile_box_click(e) { 1104 e.preventDefault(); 1105 e.stopPropagation(); 1106 $(e.currentTarget).find('.desc_trig').trigger('click'); 1107 }, 1108 1109 // Handles event card opening with various user interactions 1110 handle_desc_trig(e) { 1111 e.preventDefault(); 1112 const $this = $(e.currentTarget); 1113 const $eventBox = $this.closest('.eventon_list_event'); 1114 const $cal = $this.closest('.evo_lightbox').data('cal_id') ? 1115 $('#' + $this.closest('.evo_lightbox').data('cal_id')) : 1116 $this.closest('.ajde_evcal_calendar'); 1117 const SC = $cal.evo_shortcode_data(); 1118 const ux_val = $cal.evo_cal_event_get_uxval(SC, $this); 1119 const event_id = $eventBox.data('event_id'); 1120 const exlk = $this.data('exlk'); 1121 const isSingleEventBox = $this.closest('.eventon_single_event').length > 0 && $cal.find('.evo-data').data('exturl'); 1122 1123 const actions = { 1124 '3': () => this.open_lightbox($this, $cal, SC, event_id, $eventBox, ux_val), 1125 '3a': () => this.open_lightbox($this, $cal, SC, event_id, $eventBox, ux_val), 1126 '4': () => this.open_url($this, $this.attr('href') || $this.parent().siblings('.evo_event_schema').find('a').attr('href'), '_self'), 1127 '4a': () => this.open_url($this, $this.attr('href') || $this.parent().siblings('.evo_event_schema').find('a').attr('href'), '_blank'), 1128 '2': () => this.handle_external_link($this, isSingleEventBox), 1129 'X': () => false, 1130 'none': () => false, 1131 'default': () => exlk === '1' ? this.handle_external_link($this, isSingleEventBox) : this.slide_down_event_card($this, $eventBox, $cal, SC, event_id) 1132 }; 1133 1134 return (actions[ux_val] || actions['default'])(); 1135 }, 1136 1137 // Opens lightbox for event content 1138 open_lightbox($trigger, $cal, SC, event_id, $eventBox, ux_val) { 1139 const repeat_interval = parseInt($eventBox.data('ri')) || 0; 1140 const etttc_class = $cal.attr('class').split(' ').find(cls => cls.startsWith('etttc_')) || ''; 1141 const new_SC_data = { 1142 ...SC, 1143 repeat_interval, 1144 event_id, 1145 ux_val, 1146 evortl: $trigger.closest('.eventon_events_list').hasClass('evortl') ? 'yes' : 'no', 1147 ajax_eventtop_show_content: true, 1148 additional_class: etttc_class 1149 }; 1150 $cal.evo_cal_lightbox_trigger(new_SC_data, $trigger, $cal); 1151 return false; 1152 }, 1153 1154 // Opens a URL in specified target 1155 open_url($this, url, target) { 1156 target = $this.attr('target') === '_blank' ? '_blank' : target; 1157 if (url) window.open(url, target); 1158 return target === '_blank'; 1159 }, 1160 1161 // Handles external link navigation 1162 handle_external_link($trigger, isSingleEventBox) { 1163 if (isSingleEventBox) return false; 1164 const url = $trigger.attr('href'); 1165 if (url) { 1166 window.open(url, $trigger.attr('target') === '_blank' ? '_blank' : '_self'); 1167 } 1168 return !!url; 1169 }, 1170 1171 // Slides down event card and loads map if present 1172 slide_down_event_card($trigger, $eventBox, $cal, SC, event_id) { 1173 const $content = $eventBox.find('.event_description'); 1174 const isOpen = $content.hasClass('open'); 1175 if (SC.accord === 'yes') { 1176 $cal.find('.eventon_list_event').removeClass('open');
1177 $cal.find('.event_description').slideUp().removeClass('open'); 1178 } 1179 $eventBox.toggleClass('open', !isOpen); 1180 $content[isOpen ? 'slideUp' : 'slideDown']().toggleClass('open', !isOpen); 1181 if ($eventBox.find('.evo_metarow_gmap').length) { 1182 $eventBox.find('.evo_metarow_gmap').evo_load_gmap({ trigger_point: 'slideDownCard' }); 1183 } 1184 if ($trigger.data('runjs')) { 1185 this.E.B.trigger('evo_load_single_event_content', [event_id, $trigger]); 1186 } 1187 this.E.B.trigger('evo_slidedown_eventcard_complete', [event_id, $trigger, !isOpen]); 1188 return false; 1189 } 1190 } 1191 1192 EVO_Listeners.init(); 1193 } 1194 1195// Global Calendar Listeners and Interactions 1196 function EVO_Interactions(){ 1197 const interactions_class = { 1198 E:{ B: $('body')}, 1199 run(){ 1200 const { B } = this.E; 1201 this.evoLightboxEnd(); 1202 this.evocardNavTrig(); 1203 this.evoMapExpandTrig(); 1204 this.handle_lightbox_processed(); 1205 this.handle_calendar_interactions(); 1206 this.handle_global_listners(); 1207 this.handle_tabs(); 1208 }, 1209 1210 evoLightboxEnd() { 1211 this.E.B.on('evolightbox_end', (event, LB, CAL) => { 1212 setTimeout(() => { 1213 LB.find('.eventon_list_event').each(function() { 1214 evo_cal_eventcard_interactions($(this), true); 1215 }); 1216 _evo_run_eventcard_map_load(); 1217 LB.evo_cal_localize_time(); 1218 }, 1000); 1219 }); 1220 1221 // eventcard lightbox event navigation @version 4.9.2 1222 this.E.B.on('evolightbox_end', (e, LB, CAL, OO) => { 1223 if (!evo_general_params.cal.lbnav) return; 1224 if (evo_general_params.cal.lbnav === 'no') return; 1225 if (OO === undefined || !('other_data' in OO)) return; 1226 1227 const event = $(OO.other_data.obj).closest('.event'); 1228 const calId = (CAL ? CAL.attr('id') : ''); 1229 const buttons = [ 1230 { dir: 'prev', icon: 'left', sibling: event.prev('.event') }, 1231 { dir: 'next', icon: 'right', sibling: event.next('.event') } 1232 ].filter(b => b.sibling.length) 1233 .map(b => ` 1234 <div class='evocard_lb_navs'> 1235 <button class='evocard_nav_trig ${b.dir} evoposa evocurp evohoop7 evobr30 evobgcw evodfx evofxjcc evofxaic evo_transit_all evoboxbb' data-id='${b.sibling.attr('id')}' data-cid='${calId}'> 1236 <i class='fa fa-chevron-${b.icon}'></i> 1237 </button> 1238 </div> 1239 `).join(''); 1240 1241 LB.find('.evolb_box').append(buttons); 1242 setTimeout(() => LB.find('.evocard_nav_trig').addClass('show'), 500); 1243 }); 1244 }, 1245 evocardNavTrig(){ 1246 this.E.B.on('click','.evocard_nav_trig',function(e){ 1247 e.preventDefault(); 1248 const $el = $(e.currentTarget); 1249 const CAL = $('#' + $el.data('cid')); 1250 const SC = CAL.evo_shortcode_data(); 1251 const eventId = $el.data('id').split('_')[1]; 1252 const newEvent = CAL.find(`#${$el.data('id')}`); 1253 const newEventTrigger = newEvent.find('.desc_trig'); 1254 const LB = $el.closest('.evo_lightbox'); 1255 1256 LB.find('.evocard_nav_trig').fadeOut().addClass('old'); 1257 setTimeout(() => LB.find('.evocard_lb_navs').has('.old').remove(), 500); 1258 1259 LB.evo_lightbox_show_open_animation({ animation_type: 'saving' }); 1260 1261 const updatedSC = { 1262 ...SC, 1263 repeat_interval: parseInt(newEvent.data('ri')), 1264 ux_val: CAL.evo_cal_event_get_uxval(SC, newEventTrigger), 1265 event_id: eventId, 1266 ajax_eventtop_show_content: true, 1267 evortl: newEvent.find('.eventon_events_list').hasClass('evortl') ? 'yes' : 'no', 1268 additional_class: CAL.attr('class').match(/etttc_\w+/)?.[0] || '', 1269 }; 1270 1271 const newLbClass = "evo_eventcard_"+eventId; 1272 LB.removeClass(LB.data('lbc')).addClass(newLbClass).data('lbc', newLbClass); 1273 1274 setTimeout(() => CAL.evo_cal_lightbox_trigger(updatedSC, newEventTrigger, CAL, LB), 1000); 1275 }); 1276 }, 1277 evoMapExpandTrig(){ 1278 this.E.B.on('click','.evo_map_expand_trig',function(e){
1279 e.preventDefault(); 1280 1281 const $gmapDiv = $(this).closest('.evo_map').find('.evo_metarow_gmap'); 1282 const mapID = $gmapDiv.attr('id')+'_exp'; 1283 const $newDiv = $('<div id="'+ mapID +'" class="evo_lb_map evobr15" style="min-height:calc(100vh - 120px);"></div>'); 1284 const locationAdd = $gmapDiv.data('address'); 1285 const locationName = $gmapDiv.data('name'); 1286 1287 const extra = `<div class='evodfx evofxdrr evofxaic evogap10 evomarr50'> 1288 <input id="user-address-${mapID}" type="text" placeholder="Enter starting address"/> 1289 <button id="get-directions-${mapID}" class='evo_nonbtn'><i class='fa fa-circle-arrow-right'></i></button> 1290 <i class='fa fa-route evofz24i evocurp evoop5 evohoop7'></i> 1291 <button class='evo_nonbtn evoff_2 evocurp evohoop7 evoop5'><i class='fa fa-calendar evomarr10 evofz24i'></i>More Events</button> 1292 </div>`; 1293 const $topDiv = `<div class='evodfx evofxdrr evogap10 evofxjcsb evofxaic evomarb10'> 1294 <div class='evodfx evofxdrr evofxaic evogap10'> 1295 <p class='evoff_1i evomar0i evofz18i'>${locationName}</p> 1296 <p class='evomar0i evofz14i'>${locationAdd}</p> 1297 </div> 1298 </div>`; 1299 const $botDiv = ``; 1300 1301 // Copy only data attributes, not content 1302 $.each($gmapDiv.data(), function(key, value) { 1303 $newDiv.data(key, value).attr('data-'+key, value); 1304 }); 1305 const calID = $(this).closest('.ajde_evcal_calendar').attr('id'); 1306 $(this).evo_lightbox_open({ 1307 uid: 'evo_map_expand',calid: calID, 1308 lbdata:{ class:'evo_map_expand',content: $topDiv + $newDiv[0].outerHTML + $botDiv } 1309 }); 1310 }); 1311 }, 1312 handle_lightbox_processed(){ 1313 this.E.B.on('evo_lightbox_processed',function(e, OO, LB){ 1314 if( OO.uid == 'evo_map_expand'){ 1315 //console.log(OO); 1316 setTimeout(function(){ 1317 LB.find('.evo_lb_map').evo_load_gmap({ cal: $('body').find('#'+ OO.calid) }); 1318 }, 500); 1319 } 1320 }); 1321 }, 1322 1323 // Calendar 1324 handle_calendar_interactions(){ 1325 const { B } = this.E; 1326 B.find('.ajde_evcal_calendar').each( (index, calendar) => { 1327 1328 const $calendar = $(calendar); 1329 const $SC = $calendar.evo_shortcode_data(); 1330 1331 // Bubble tooltip for events in calendars with 'bub' class 1332 if ($calendar.hasClass('bub')) { 1333 $calendar.on('mouseover.evoCal', '.eventon_list_event', (e) => { 1334 const $event = $(e.currentTarget); 1335 const $list = $event.closest('.eventon_events_list'); 1336 const title = $event.find('.evoet_dayblock').data('bub'); 1337 const position = $event.position(); 1338 1339 $list.append(`<span class="evo_bub_box">${title}</span>`); 1340 const $bubble = $list.find('.evo_bub_box'); 1341 1342 let left = position.left; 1343 let top = position.top - $bubble.height() - 30; 1344 1345 // Adjust bubble position if it exceeds list width 1346 const listWidth = $list.width(); 1347 const totalWidth = position.left + $bubble.width() + $event.width(); 1348 if (totalWidth > listWidth) { 1349 left = position.left - $bubble.width() + $event.width() - 20; 1350 } 1351 1352 $bubble.css({ top, left }).addClass('show'); 1353 }).on('mouseout.evoCal', '.eventon_list_event', (e) => { 1354 $(e.currentTarget).closest('.eventon_events_list').find('.evo_bub_box').remove(); 1355 }); 1356 } 1357 1358 // Jumper button toggle
1359 $calendar.on('click.evoCal', '.evo-jumper-btn', (e) => { 1360 const $this = $(e.currentTarget); 1361 $this.closest('.calendar_header').find('.evo_j_container').toggle(); 1362 $this.toggleClass('vis'); 1363 }); 1364 1365 // select a new time from jumper 1366 $calendar.on('click','.evo_j_dates a',function(){ 1367 var val = $(this).attr('data-val'), 1368 type = $(this).parent().parent().attr('data-val'), 1369 CAL = $calendar, 1370 SC = CAL.evo_shortcode_data(); 1371 1372 if(type=='m'){ // change month 1373 CAL.evo_update_cal_sc({F:'fixed_month', V: val }); 1374 }else{ 1375 CAL.evo_update_cal_sc({F:'fixed_year', V: val }); 1376 } 1377 1378 run_cal_ajax( CAL.attr('id') ,'none','jumper'); 1379 1380 // hide month jumper if not set to leave expanded 1381 if(SC.expj =='no') container.delay(2000).slideUp(); 1382 }); 1383 1384 // view switcher 1385 $calendar.on('click', '.evo_vSW',function(){ 1386 const O = elm = $(this); 1387 var DATA = O.data('d'); 1388 if(O.hasClass('focusX')) return; 1389 CAL = $calendar; 1390 1391 // remove other additions from other views 1392 CAL.find('.evoADDS').hide().delay(200).queue(function(){ 1393 $(this).remove(); 1394 }); 1395 1396 var SC = $SC; 1397 const cal_tz = CAL.evo_get_global({S1:'cal_def',S2:'cal_tz'}); 1398 var reload_cal_data = false; 1399 1400 // Create date object 1401 _M1 = moment().set({'year': SC.fixed_year, 'month': ( SC.fixed_month -1 ), 'date':SC.fixed_day}).tz( cal_tz ); 1402 _M1.set('date',1).startOf('date'); 1403 _start = _M1.unix(); 1404 _M1.endOf('month').endOf('date'); // move to end of month 1405 _end = _M1.unix(); 1406 1407 // DEP 1408 var DD = new Date(SC.fixed_year,SC.fixed_month -1 , SC.fixed_day, 0,0,0 ); 1409 DD.setUTCHours(0); 1410 DD.setUTCFullYear( SC.fixed_year ); 1411 DD.setUTCMonth( SC.fixed_month -1 ); 1412 DD.setUTCDate( SC.fixed_day ); 1413 1414 // switch to normal 1415 O.siblings('.evo_vSW').removeClass('focusX select'); 1416 O.addClass('focusX select'); 1417 CAL.find('.evo-viewswitcher-btn em').html( O.html() ); 1418 O.closest('.evo_cal_view_switcher').removeClass('show'); 1419 1420 // ux_val for specific cal 1421 if( DATA && 'ux_val' in DATA) CAL.evo_update_cal_sc({F:'ux_val', V: DATA.ux_val }); 1422 1423 // calendar class toggling 1424 O.siblings('.evo_vSW').each(function(){ 1425 var _d = $(this).data('d'); 1426 if( _d && 'c' in _d ) CAL.removeClass( _d['c'] ); // remove other cls 1427 }); 1428 if( DATA && 'c' in DATA) CAL.addClass( DATA.c ); 1429 1430 1431 // process date times block 1432 CAL.find('.evoet_dayblock span').hide(); 1433 CAL.find('.evoet_dayblock span.evo_start').show(); 1434 CAL.find('.evoet_dayblock span.evo_end').show(); 1435 CAL.find('.evoet_dayblock span.evo_end.only_time').hide(); 1436 1437 // if current date range is not a month load those unix 1438 if( SC.focus_start_date_range != _start && SC.focus_end_date_range != _end ){ 1439 reload_cal_data = true; 1440 CAL.evo_update_cal_sc({F:'focus_start_date_range',V: _start }); 1441 CAL.evo_update_cal_sc({F:'focus_end_date_range', V: _end }); 1442 } 1443 1444 // treating events list based on dif preferences-- vals el_visibility = hide_events, show_events 1445 if( 'el_visibility' in DATA){ 1446 el_visibility = DATA.el_visibility; 1447 1448 if( el_visibility =='show_events') CAL.find('.eventon_list_event').show(); 1449 if( el_visibility =='hide_events') CAL.find('.eventon_list_event').hide(); 1450 if( el_visibility =='hide_list') CAL.find('#evcal_list').addClass('evo_hide').hide(); 1451 if( el_visibility =='show_all'){ 1452 CAL.find('#evcal_list').removeClass('evo_hide').show(); 1453 CAL.find('.eventon_list_event').show(); 1454 } 1455 } 1456 1457 CAL.evo_update_cal_sc({F:'calendar_type', V: 'default'}); 1458 1459 B.trigger('evo_vSW_clicked_before_ajax', [ O, CAL, DD, reload_cal_data ]); 1460 1461 // run ajax to load new events in the range 1462 if( reload_cal_data ){
1463 B.trigger('evo_run_cal_ajax',[CAL.attr('id'),'none','filering']); 1464 }else{ 1465 B.trigger('evo_vSW_clicked_noajax', [ O, CAL ]); // @s4.6 1466 } 1467 1468 B.trigger('evo_vSW_clicked', [ O, CAL, DD, reload_cal_data]); 1469 1470 // switching to and from tiles view 1471 if( elm.hasClass('evoti')){ 1472 CAL.find('.eventon_list_event').each(function(){ 1473 color = $(this).data('colr'); 1474 $(this).find('a.desc_trig').css({'background-color': color}); 1475 }); 1476 CAL.addClass('color').removeClass('sev').data('oC', 'sev'); 1477 }else{ 1478 if( CAL.hasClass('esty_0') || CAL.hasClass('esty_4') ){ 1479 CAL.removeClass('color'); 1480 CAL.find('.eventon_list_event').each(function(){ 1481 $(this).find('a.desc_trig').css({'background-color': ''}); 1482 }); 1483 if( CAL.data('oC') !== undefined) CAL.addClass( CAL.data('oC')); 1484 } 1485 } 1486 1487 }); 1488 }); 1489 }, 1490 1491 // Global 1492 handle_global_listners(){ 1493 const { B } = this.E; 1494 B.on('evo_trigger_cal_reset', function(event, cal){ 1495 cal_resets( cal ); 1496 }); 1497 B.on('click', function(event) { 1498 BODY.trigger('clicked_on_page', [ $(event.target) , event ]); 1499 }); 1500 B.find('.evo_location_map').each(function(){ 1501 $(this).evo_load_gmap(); 1502 }); 1503 // on event card lightbox load -> taxonomy details @since 4.2 u4.6 1504 B.on('evo_ajax_complete_eventon_get_tax_card_content', function(event, OO){ 1505 1506 LB = B.find('.'+ OO.lightbox_key); 1507 1508 setTimeout(function(){ 1509 // run map load 1510 if( LB.find('.evo_trigger_map').length > 0 ){ 1511 map_id_elm = LB.find('.evo_trigger_map'); 1512 map_id_elm.evo_load_gmap(); 1513 console.log('Loading Event Map'); 1514 } 1515 1516 // run countdown timers 1517 LB.find('.evo_countdowner').each(function(){ 1518 $(this).evo_countdown(); 1519 }); 1520 1521 // run calendar filtering function 1522 CAL = LB.find('.ajde_evcal_calendar'); 1523 if (CAL.length) CAL.evo_cal_filtering(); 1524 },500); 1525 }); 1526 }, 1527 // Tab view switcher 1528 handle_tabs(){ 1529 const { B } = this.E; 1530 B.find('.evo_tab_container').each(function(){ 1531 $(this).find('.evo_tab_section').each(function(){ 1532 if(!$(this).hasClass('visible')){ 1533 $(this).addClass('hidden'); 1534 } 1535 }); 1536 }); 1537 B.on('click','.evo_tab',function(){ 1538 tab = $(this).data('tab'); 1539 tabsection = $(this).closest('.evo_tab_view').find('.evo_tab_container'); 1540 tabsection.find('.evo_tab_section').addClass('hidden').removeClass('visible'); 1541 tabsection.find('.'+tab).addClass('visible').removeClass('hidden'); 1542 1543 $(this).parent().find('.evo_tab').removeClass('selected'); 1544 $(this).addClass('selected'); 1545 1546 B.trigger('evo_tabs_newtab_selected',[ $(this)]); 1547 }); 1548 }, 1549 1550 }; 1551 1552 interactions_class.run(); 1553 } 1554 1555// EVO ON 1556 const EVO = { 1557 1558 E:{ 1559 B: $('body') 1560 }, 1561 init(){ 1562 this.Tools.init(); 1563 this.Interactions.init(); 1564 this.Virtual_Events.init(); 1565 this.Search.init(); 1566 this.Elements_Interactions.init(); 1567 // Global event listeners (e.g., heartbeat, resize) 1568 this.setupGlobalListeners(); 1569 this.schedule_view(); 1570 this.ajax_triggers(); 1571 }, 1572 1573 setupGlobalListeners(){ 1574 const { B } = this.E; 1575 // Heartbeat hooks 1576 $(document).on('heartbeat-send', (e, data) => { 1577 if (this.BODY.find('.evo_refresh_on_heartbeat').length) { 1578 this.BODY.find('.evo_refresh_on_heartbeat').each((i, el) => { 1579 if ($(el).closest('.eventon_list_event').length <= 0) return; 1580 if ($(el).data('refresh') !== undefined && !$(el).data('refresh')) return; 1581 1582 data['evo_data'] = EVO.Tools.build_elm_refresh_data($(el)); 1583 }); 1584 } 1585 }); 1586 1587 $(document).on('heartbeat-tick', (e, data) => { 1588 EVO.Tools.evo_apply_refresh_content(data); 1589 }); 1590 1591 // Other global events 1592 B.on('evo_refresh_elements', (e, send_data) => { 1593 if (!send_data || send_data.length <= 0) return; 1594 1595 send_data['nonce'] = evo_general_params.n; 1596 1597 $.ajax({
1598 beforeSend: () => { 1599 if ('evo_data' in send_data) { 1600 $.each(send_data.evo_data, (ekey, eclasses) => { 1601 $.each(eclasses, (classnm, val) => { 1602 if (val && 'loader' in val && val.loader && 'loader_class' in val) { 1603 $('#event_' + ekey).find('.' + val.loader_class).addClass('evoloading'); 1604 } 1605 }); 1606 }); 1607 } 1608 }, 1609 type: 'POST', 1610 url: EVO.Tools.get_ajax_url('eventon_refresh_elm'), 1611 data: send_data, 1612 dataType: 'json', 1613 success: (data) => { 1614 if (data.status === 'good') { 1615 EVO.Tools.evo_apply_refresh_content(data); 1616 } 1617 }, 1618 complete: () => { 1619 if ('evo_data' in send_data) { 1620 $.each(send_data.evo_data, (ekey, eclasses) => { 1621 $.each(eclasses, (classnm, val) => { 1622 if (val && 'loader' in val && val.loader && 'loader_class' in val) { 1623 $('#event_' + ekey).find('.' + val.loader_class).removeClass('evoloading'); 1624 } 1625 }); 1626 }); 1627 } 1628 } 1629 }); 1630 }); 1631 // refresh the closest hearbeat run parent 1632 B.on('evo_refresh_designated_elm', function(ee, elm, elm_class, extra_data){ 1633 //get closest event object 1634 const event = $(elm).closest('.eventon_list_event'); 1635 if (!event || event.find('.' + elm_class).length === 0) return; 1636 1637 const refresh_elm = event.find('.' + elm_class); 1638 let send_data = {}; 1639 1640 send_data['evo_data'] = EVO.Tools.build_elm_refresh_data( refresh_elm , extra_data); 1641 B.trigger('evo_refresh_elements',[ send_data ]); 1642 }); 1643 1644 }, 1645 schedule_view(){ 1646 EVO.E.B.on('evo_init_ajax_success_each_cal',function(event, data, i, v, CAL){ 1647 $('body').find('.ajde_evcal_calendar.evoSV').each(function(){ 1648 EVO.Tools.evosv_populate( $(this) ); 1649 }); 1650 }) 1651 .on('evo_main_ajax_before_fnc', function(event, CAL, ajaxtype, data_arg){ 1652 SC = data_arg.shortcode; 1653 if( SC.calendar_type == 'schedule'){ 1654 CAL.find('#evcal_list').removeClass('evo_hide').show(); 1655 } 1656 }).on('evo_main_ajax_success', function(event, CAL, ajaxtype, data , data_arg){ 1657 SC = data_arg.shortcode; 1658 if( SC.calendar_type == 'schedule'){ 1659 CAL.find('#evcal_list').addClass('evo_hide').hide(); 1660 } 1661 }).on('evo_main_ajax_complete', function(event, CAL, ajaxtype, data , data_arg){ 1662 SC = data_arg.shortcode; 1663 if( SC.calendar_type == 'schedule'){ 1664 EVO.Tools.evosv_populate( CAL ); 1665 } 1666 }) 1667 // view switching 1668 .on('evo_vSW_clicked_before_ajax',function(event, O, CAL, DD, reload_cal_data){ 1669 if(!(O.hasClass('evosv'))) return; 1670 var SC = CAL.evo_shortcode_data(); 1671 1672 CAL.evo_update_cal_sc({F:'calendar_type', V: 'schedule'}); 1673 CAL.evo_update_cal_sc({F:'fixed_day', V: SC.fixed_day }); 1674 1675 }) 1676 .on('evo_vSW_clicked',function(event, OBJ, CAL, DD, reload_cal_data){ 1677 if(!(OBJ.hasClass('evosv'))) return; 1678 CAL.evo_update_cal_sc({F:'calendar_type', V: 'schedule'}); 1679 }) 1680 .on('evo_vSW_clicked_noajax',function(event, OBJ, CAL, DD, reload_cal_data){ 1681 if(!(OBJ.hasClass('evosv'))) return; 1682 EVO.Tools.evosv_populate( CAL ); 1683 }) 1684 // open events from schedule view 1685 .on('click','.evosv_items',function(event, elm){ 1686 O = $(this); 1687 CAL = O.closest('.ajde_evcal_calendar'); 1688 var e_cl = 'event_'+O.data('id'); 1689 1690 const clicked_event_uxval = O.data('uxval'); 1691 1692 // if event is set to slide down .. switch to lightbox 1693 if( clicked_event_uxval == '1' ){ 1694 CAL.find('.'+e_cl).find('.desc_trig').data('ux_val', 3); 1695 } 1696 1697 CAL.find('.'+e_cl).find('.desc_trig').trigger('click'); 1698 }); 1699 }, 1700 Interactions:{ 1701 init(){ 1702 const { B } = EVO.E; 1703 }, 1704 1705 }, 1706 Search:{ 1707 init(){ 1708 const { B } = EVO.E; 1709 B.on('click.evoSearch', '.evo_do_search', (event) => { 1710 EVO.Tools.do_search_box($(event.target)); 1711 }); 1712 B.on('keypress.evoSearch', '.evo_search_field', (ev) => { 1713 if ((ev.keyCode || ev.which) === 13) { 1714 EVO.Tools.do_search_box($(ev.target).siblings('.evo_do_search')); 1715 } 1716 }); 1717 B.on('keypress.evoSearch', '.evo_search_bar_in_field', (ev) => { 1718 if ((ev.keyCode || ev.which) === 13) { 1719 EVO.Tools.search_within_calendar( $(ev.target) ); 1720 } 1721 }); 1722 B.on('click', '.evosr_search_clear_btn', function(e) { 1723 e.preventDefault(); EVO.Tools.reset_search($(this).siblings('input'), $(this)); 1724 }); 1725 B.on('evo_main_ajax_complete', function(e, CAL, ajaxtype, responseJSON, data) { 1726 if (ajaxtype === 'search' && data.shortcode['s']) { 1727 CAL.find('.evosr_search_clear_btn').addClass('show'); 1728 } 1729 }); 1730 // Handle search input interactions 1731 B.on({ 1732 'click': function() { EVO.Tools.search_within_calendar($(this).siblings('input')); }, 1733 'keyup': function(e) { 1734 const $input = $(this), $clearBtn = $input.siblings('.evosr_search_clear_btn'); 1735 if (e.which === 27) { e.preventDefault(); EVO.Tools.reset_search($input, $clearBtn); return; } 1736 $clearBtn.toggleClass('show', $input.val().trim() !== ''); 1737 } 1738 }, '.evo_search_bar_in_field, .evosr_search_btn'); 1739 } 1740 }, 1741 Elements_Interactions:{ 1742 init(){ 1743 const { B } = EVO.E; 1744 // increase and reduce quantity 1745 B.on('click','.evo_qty_change', function(event){ 1746 var OBJ = $(this); 1747 var QTY = oQTY = parseInt(OBJ.siblings('em').html()); 1748 var MAX = OBJ.siblings('input').attr('max'); 1749 var BOX = OBJ.closest('.evo_purchase_box'); 1750 1751 var pfd = BOX.find('.evo_purchase_box_data').data('pfd'); 1752 1753 (OBJ.hasClass('plu'))? QTY++: QTY--; 1754 1755 QTY =(QTY==0)? 1: QTY; 1756 QTY = (MAX!='' && QTY > MAX)? MAX: QTY; 1757 1758 // new total price 1759 var sin_price = OBJ.parent().data('p'); 1760 new_price = sin_price * QTY; 1761 1762 new_price = EVO.Tools.get_format_price( new_price, pfd); 1763 1764 BOX.find('.total .value').html( new_price); 1765 1766 OBJ.siblings('em').html(QTY); 1767 OBJ.siblings('input').val(QTY); 1768 1769 B.trigger('evo_qty_changed',[QTY,oQTY, new_price,OBJ ]); 1770 }); 1771 } 1772 }, 1773 Virtual_Events:{ 1774 init(){ 1775 const { B } = EVO.E; 1776 this.jitsi(); 1777 // record sign in - virtual plus // @+3.1 1778 B.on('click','.evo_vir_signin_btn',function(){ 1779 1780 let extra_data = {}; 1781 extra_data['signin'] = 'y'; 1782 extra_data['refresh_main'] = 'y'; 1783 extra_data['loader'] = true; 1784 extra_data['loader_class'] = 'evo_vir_main_content'; 1785 1786 B.trigger('evo_refresh_designated_elm',[ $(this) , 'evo_vir_data',extra_data]); 1787 }); 1788 }, 1789 jitsi( mod_refresh){ 1790 const { B } = EVO.E; 1791 const domain = 'meet.jit.si'; 1792 let api = []; 1793 1794 B.find('.evo-jitsi-wrapper').each(function(index, element) { 1795 const O = $(this); 1796 const eventO = O.closest('.eventon_list_event'); 1797 1798 if( mod_refresh != '' && mod_refresh == 'mod_refresh_no' && O.hasClass('mod')) return; 1799 1800 const roomName = $(element).data('n'); 1801 const width = $(element).data('width'); 1802 const height = $(element).data('height'); 1803 const audioMuted = $(element).data('audiomute'); 1804 const videoMuted = $(element).data('videomute'); 1805 const screenSharing = $(element).data('screen'); 1806 1807 const myOverwrite = 1808 { 1809 'TOOLBAR_BUTTONS': $(element).data('d'), 1810 "DEFAULT_BACKGROUND": '#494a4e', 1811 'MOBILE_APP_PROMO': false, 1812 'SETTINGS_SECTIONS':['devices', 'language', 'profile', 'calendar'], 1813 }; 1814 const options = { 1815 roomName, 1816 width, 1817 height, 1818 parentNode: element, 1819 configOverwrite: { 1820 startWithAudioMuted: audioMuted, 1821 startWithVideoMuted: videoMuted, 1822 startScreenSharing: false, 1823 disableInviteFunctions: false, 1824 }, 1825 interfaceConfigOverwrite: myOverwrite, 1826 }; 1827 1828 api = new JitsiMeetExternalAPI(domain, options); 1829 1830 api.addEventListener('participantRoleChanged', function(event){ 1831 1832 // record moderator joined 1833 if (event.role === "moderator"){ 1834 this._record_moderator_join( 'yes', eventO.data('event_id'), eventO.data('ri')); 1835 } 1836 1837 const pp = jQuery(element).data('p'); 1838 if (event.role === "moderator" && pp != '__') { 1839 ppp = pp.replace('_',''); 1840 api.executeCommand('password', ppp); 1841 } 1842 }); 1843 1844 // moderator leave 1845 api.addEventListener('videoConferenceLeft', function(event){ 1846 if( eventO.find('.evo_vir_data').data('ismod') =='y'){ 1847 this._record_moderator_join( 'no', eventO.data('event_id'), eventO.data('ri')); 1848 O.siblings('.evo_vir_mod_left').show(); 1849 O.hide(); 1850 } 1851 }); 1852 }); 1853 }, 1854 // record moderator logins for jitsi 1855 _record_moderator_join(joined, eid, ri){ 1856 var data_arg = { 1857 'action': 'eventon_record_mod_joined', 1858 'eid': eid, 1859 'ri': ri, 1860 'joined': joined, 1861 'nonce': evo_general_params.n, 1862 }; 1863 1864 $.ajax({
1865 beforeSend: function(){}, 1866 type: 'POST',url: ajax_url, 1867 data: data_arg,dataType:'json', 1868 success:function(data){ } 1869 }); 1870 } 1871 }, 1872 ajax_triggers(){ 1873 const { B } = EVO.E; 1874 B.on('evo_before_trig_ajax',function(event, obj){ 1875 if(!obj.hasClass('evo_trig_vir_end')) return; 1876 1877 var new_ajax_data = $(document).data( 'evo_data'); 1878 new_ajax_data['fnct'] = 'mark_event_ended'; 1879 $(document).data( 'evo_data', new_ajax_data ); 1880 1881 }) 1882 .on('evo_beforesend_trig_ajax',function( event, obj, new_ajax_data){ 1883 if(!obj.hasClass('evo_trig_vir_end')) return; 1884 1885 obj.closest('.evo_vir_mod_box').addClass('evoloading'); 1886 }) 1887 .on('evo_success_trig_ajax',function( event, obj, new_ajax_data, return_data){ 1888 if(!obj.hasClass('evo_trig_vir_end')) return; 1889 1890 // if virtual events were marked as ended 1891 if(!('_vir_ended' in return_data)) return; 1892 1893 // refresh the virtual main content 1894 extra_data = {}; 1895 extra_data['refresh_main'] = 'yy'; 1896 extra_data['loader'] = true; 1897 extra_data['loader_class'] = 'evo_vir_main_content'; 1898 1899 //console.log(extra_data); 1900 1901 B.trigger('evo_refresh_designated_elm',[ obj , 'evo_vir_data',extra_data]); 1902 }) 1903 .on('evo_complete_trig_ajax',function( event, obj, new_ajax_data){ 1904 if(!obj.hasClass('evo_trig_vir_end')) return; 1905 obj.closest('.evo_vir_mod_box').removeClass('evoloading'); 1906 }); 1907 }, 1908 Tools:{ 1909 init() { 1910 const { B } = EVO.E; 1911 // Bind AJAX listeners once 1912 B.on('evo_ajax_beforesend_evo_get_search_results', (event, OO, el) => { 1913 $(el).find('.evo_search_results_count').hide(); 1914 $(el).addClass('searching'); 1915 }).on('evo_ajax_complete_evo_get_search_results', (event, OO, el) => { 1916 $(el).removeClass('searching'); 1917 }).on('evo_ajax_success_evo_get_search_results', (event, OO, data, el) => { 1918 $(el).find('.evo_search_results').html(data.content); 1919 if ($(el).find('.no_events').length === 0) { 1920 const Events = $(el).find('.eventon_list_event').length; 1921 $(el).find('.evo_search_results_count span').html(Events); 1922 $(el).find('.evo_search_results_count').fadeIn(); 1923 } 1924 }); 1925 }, 1926 do_search_box( OBJ ){ 1927 const { B } = EVO.E; 1928 const SearchVal = OBJ.closest('.evosr_search_box').find('input').val(); 1929 const Evosearch = OBJ.closest('.EVOSR_section'); 1930 OBJ.closest('.evo_search_entry').find('.evosr_msg').toggle( !SearchVal ); 1931 1932 if (!SearchVal) return false; 1933 1934 var ajax_results = Evosearch.evo_admin_get_ajax({ 1935 'ajaxdata': { 1936 //action: 'eventon_search_evo_events', 1937 search: SearchVal, 1938 shortcode: Evosearch.find('span.data').data('sc'), 1939 nonce: evo_general_params.n 1940 }, 1941 ajax_type:'endpoint', 1942 ajax_action:'eventon_search_evo_events', 1943 uid:'evo_get_search_results', 1944 end: 'client', 1945 }); 1946 }, 1947 // Search function 1948 search_within_calendar($input) { 1949 const ev_cal = $input.closest('.ajde_evcal_calendar'); 1950 ev_cal.evo_update_cal_sc({ F: 'show_limit_paged', V: '1' }); 1951 ev_cal.evo_update_cal_sc({ F: 's', V: $input.val() }); 1952 run_cal_ajax(ev_cal.attr('id'), 'none', 'search'); 1953 return false; 1954 }, 1955 1956 // Reset search function 1957 reset_search($input, $clearBtn) { 1958 const ev_cal = $input.closest('.ajde_evcal_calendar'); 1959 ev_cal.evo_update_cal_sc({ F: 's', V: '' }); 1960 run_cal_ajax(ev_cal.attr('id'), 'none', 'search'); 1961 $input.val(''); 1962 $clearBtn.removeClass('show'); 1963 }, 1964 1965 // Total formating 1966 get_format_price(price, data){ 1967 1968 // price format data 1969 PF = data; 1970 1971 totalPrice = price.toFixed(PF.numDec); // number of decimals 1972 htmlPrice = totalPrice.toString().replace('.', PF.decSep); 1973 1974 if(PF.thoSep.length > 0) { 1975 htmlPrice = EVO.Tools._addThousandSep(htmlPrice, PF.thoSep); 1976 } 1977 if(PF.curPos == 'right') { 1978 htmlPrice = htmlPrice + PF.currencySymbol; 1979 } 1980 else if(PF.curPos == 'right_space') { 1981 htmlPrice = htmlPrice + ' ' + PF.currencySymbol; 1982 } 1983 else if(PF.curPos == 'left_space') { 1984 htmlPrice = PF.currencySymbol + ' ' + htmlPrice; 1985 } 1986 else { 1987 htmlPrice = PF.currencySymbol + htmlPrice; 1988 } 1989 return htmlPrice; 1990 }, 1991 _addThousandSep(n, thoSep){ 1992 var rx= /(\d+)(\d{3})/; 1993 return String(n).replace(/^\d+/, function(w){ 1994 while(rx.test(w)){ 1995 w= w.replace(rx, '$1'+thoSep+'$2'); 1996 } 1997 return w; 1998 }); 1999 }, 2000 2001 // apply refresh event element content with matching data that is sent 2002 evo_apply_refresh_content(data){ 2003 if (!('evo_data' in data)) return; 2004 2005 $.each(data.evo_data, function(eclass, boxes){ 2006 // if event exists in the page 2007 2008 var vir_data_vals = false; 2009 if( 'evo_vir_data' in boxes) vir_data_vals = boxes.evo_vir_data.data; 2010 2011 B.find('.'+eclass).each(function(){ 2012 const event_elm = $(this); 2013 $.each(boxes, (boxclass, boxdata) => { 2014 if (!boxdata.html || event_elm.find('.' + boxclass).length <= 0) return; 2015 event_elm.find('.' + boxclass).html(boxdata.html); 2016 }); 2017 2018 // only for virtual event update 2019 if( vir_data_vals ){ 2020 2021 // reload jitsi for main content - if main content html is sent it will refresh 2022 if( vir_data_vals && ('vir_type' in vir_data_vals) 2023 && vir_data_vals.vir_type == 'jitsi' 2024 && ('evo_vir_main_content' in boxes) 2025 && ('html' in boxes.evo_vir_main_content) 2026 && boxes.evo_vir_main_content.html != '' 2027 ){ 2028 EVO.Virtual_Events.jitsi('mod_refresh_no'); 2029 } 2030 2031 // update data for sent object 2032 $.each(boxes, function(boxclass, boxdata){ 2033 if( boxdata.data == '' || boxdata.data === undefined) return; 2034 2035 // for jitsi if mod left --> force refresh main 2036 if( boxdata !== undefined && vir_data_vals.vir_type == 'jitsi' && vir_data_vals.mod_joined =='left'){ 2037 2038 // force refresh main 2039 boxdata.data['refresh_main'] = 'yy'; 2040 } 2041
2042 event_elm.find( '.'+boxclass ).data( boxdata.data ); 2043 }); 2044 } 2045 2046 }); 2047 }); 2048 }, 2049 // get refresh data for specified elem 2050 build_elm_refresh_data( elm , extra_data){ 2051 const dataObj = {}; 2052 const event = $(elm).closest('.eventon_list_event'); 2053 const ekey = event.data('event_id') + '_' + parseInt(event.data('ri')); 2054 dataObj[ekey] = {}; 2055 const key2 = elm.data('key'); 2056 dataObj[ekey][key2] = elm.data(); 2057 2058 if (elm.data('check_awaitmod')) { 2059 if ((event.find('.evo_vir_jitsi_waitmod').length > 0)) dataObj[ekey][key2]['refresh_main'] = 'yy'; 2060 2061 if (event.find('.evo-jitsi-wrapper').length > 0 && dataObj[ekey][key2]['mod_joined'] !== 'left') 2062 dataObj[ekey][key2]['refresh_main'] = ''; 2063 } 2064 2065 if (extra_data && extra_data !== undefined) { 2066 $.each(extra_data, (index, val) => { 2067 dataObj[ekey][key2][index] = val; 2068 }); 2069 } 2070 2071 return dataObj; 2072 }, 2073 2074 // populate the schedule view data @4.5.8 2075 evosv_populate(CAL){ 2076 //console.log('s'); 2077 var SC = CAL.evo_shortcode_data(); 2078 OD = CAL.evo_get_OD(); // calendar other data 2079 2080 var cal_events = CAL.find('.eventon_list_event'); 2081 days_in_month = CAL.evo_day_in_month({M: SC.fixed_month, Y: SC.fixed_year}); 2082 time_format = CAL.evo_get_global({S1:'cal_def',S2:'wp_time_format'}); 2083 2084 // text strings 2085 _txt = CAL.evo_get_txt({V:'no_events'}); 2086 _txt2 = CAL.evo_get_txt({V:'until'}); 2087 _txt3 = CAL.evo_get_txt({V:'from'}); 2088 _txt4 = CAL.evo_get_txt({V:'all_day'}); 2089 2090 CAL.find('#evcal_list').addClass('evo_hide'); 2091 2092 var has_events = false; 2093 var html = ''; 2094 var template_data = {}; 2095 var processed_ids = {}; 2096 2097 // Set initial date - date values 2098 var SU = parseInt( SC.focus_start_date_range); var EU = ''; 2099 var M = moment.unix( SU ).tz( OD.cal_tz ); 2100 2101 // go through each day in month 2102 for(var x=1; x<= days_in_month; x++){ 2103 2104 var month_name = CAL.evo_get_dms_vals({ V: (M.get('month') +1), type:'m3'}); 2105 var day_name = CAL.evo_get_dms_vals({ V: M.day(), type:'d3'}); 2106 2107 // set event unix into moment 2108 SU = M.unix(); M.endOf('day'); 2109 EU = M.unix(); M.startOf('day'); 2110 2111 // run through each event and get events in this date 2112 var events = {}; 2113 2114 cal_events.each(function(index, elm){ 2115 ED = $(elm).evo_cal_get_basic_eventdata(); 2116 if( !ED) return; 2117 2118 processed_ids[ED.uID] = ED.uID; 2119 ESU = ED.unix_start; EEU = ED.unix_end; 2120 2121 // check for date range 2122 var inrange = CAL.evo_is_in_range({ 2123 'S': SU, 'E': EU, 'start': ESU, 'end':EEU 2124 });
2125 if(!inrange) return; // skip if no in range 2126 2127 has_events = true; 2128 2129 // event time relative to calendar tz 2130 m = moment.unix( ESU ).tz( OD.cal_tz ); 2131 me = moment.unix( end ).tz( OD.cal_tz ); 2132 2133 var all_day = $(elm).find('a.desc_trig').hasClass('allday') ? true: false; 2134 2135 // get event time correct for all day 2136 if( all_day ){ 2137 ED['t'] = _txt4; 2138 }else{ 2139 if( ESU <= SU ){ 2140 if( EEU >= EU) ED['t'] = _txt4; 2141 if( EEU < EU ) ED['t'] = _txt2+' ' + me.format( time_format); 2142 }else if(ESU > SU){ 2143 if( EEU >= EU) ED['t'] = _txt3+' '+ m.format( time_format); 2144 if( EEU < EU ) ED['t'] = m.format( time_format) +' - '+ me.format( time_format); 2145 } 2146 } 2147 2148 // hide end time 2149 if( ED.hide_et == 'y') ED['t'] = m.format( time_format); 2150 2151 events[index] = ED; 2152 }); 2153 2154 // if there are events in this date 2155 if( events && Object.keys(events).length > 0){ 2156 2157 template_data[ x ] = {}; 2158 template_data[ x ]['date'] = '<b>' + M.get('date')+'</b> '+ month_name+' '+ day_name; 2159 template_data[ x ]['d'] = M.format('YYYY-M-D'); 2160 template_data[ x ]['SU'] = SU; 2161 template_data[ x ]['events'] = {} 2162 2163 $.each(events, function(index, item){ 2164 2165 location_data = organizer_data = event_tags = ''; 2166 2167 // location 2168 if( SC.show_location == 'yes' && 'location' in item){ 2169 location_data = "<div class='evosv_subdata evosv_location'><i class='fa fa-location-pin marr5'></i>" +item.location+"</div>"; 2170 } 2171 2172 // organizer 2173 if( SC.show_organizer == 'yes' && 'organizer' in item){ 2174 organizer_data = "<div class='evosv_subdata evosv_org'>" +item.organizer+"</div>"; 2175 } 2176 2177 // event tags 2178 if( SC.show_tags == 'yes' && 'event_tags' in item){ 2179 event_tags = "<div class='evosv_subdata evosv_tags'>"; 2180 $.each( item.event_tags, function(index, val){ 2181 event_tags += "<span class='evosv_tag " + index +"'>" + val+"</span>"; 2182 }); 2183 event_tags += "</div>"; 2184 } 2185 2186 template_data[ x ]['events'][ item.uID ] = { 2187 'time': item.t, 2188 'ux_val': item.ux_val, 2189 'title': item.event_title, 2190 'color':item.hex_color, 2191 'tag': event_tags, 2192 'loc': location_data, 2193 'org': organizer_data, 2194 'i': item 2195 } 2196 2197 }); 2198 } 2199 2200 // next date 2201 M.add(1, 'd'); 2202 } 2203 2204 var html_ = "<div class='evosv_grid evoADDS'>"; 2205 2206 // if no events 2207 if( !has_events){ 2208 no_event_content = CAL.evo_get_global({S1: 'html', S2:'no_events'}); 2209 html_ += "<div class='date_row'><div class='row no_events evosv'>"+no_event_content+"</div></div>"; 2210 }else{ 2211 html_ += CAL.evo_HB_process_template({ 2212 TD:template_data, part:'evosv_grid' 2213 }); 2214 } 2215 2216 html_ += '</div>'; 2217 2218 if( CAL.find('.evosv_grid').length > 0){ 2219 CAL.find('.evosv_grid').replaceWith( html_ ); 2220 }else{ 2221 ELM = CAL.find('#eventon_loadbar_section'); 2222 ELM.after( html_ ); 2223 } 2224 2225 }, 2226 2227 // call ajax url 2228 get_ajax_url(action){ 2229 var ajax_type = 'endpoint'; 2230 if('ajax_method' in evo_general_params ) ajax_type = evo_general_params.ajax_method; 2231 return EVO.E.B.evo_get_ajax_url({a:action, type: ajax_type }); 2232 }, 2233 } 2234 2235 }; 2236 EVO.init(); 2237 2238 2239 2240// Other 2241 // RESET general calendar -- @U 2.8.9 2242 function cal_resets(calOBJ){ 2243 calargs = $(calOBJ).find('.cal_arguments'); 2244 calargs.attr('data-show_limit_paged', 1 ); 2245 calOBJ.evo_update_cal_sc({ 2246 F:'show_limit_paged',V:'1' 2247 }); 2248 } 2249 2250 // layout view changer - legacy 2251 if($('body').find('.evo_layout_changer').length>0){ 2252 // menu button focus adjust 2253 $('body').find('.evo_layout_changer').each(function(item){ 2254 if($(this).parent().hasClass('boxy')){ 2255 $(this).find('.fa-th-large').addClass('on'); 2256 }else{ 2257 $(this).find('.fa-reorder').addClass('on'); 2258 } 2259 }); 2260 2261 // interaction 2262 $('.evo_layout_changer').on('click','i',function(){ 2263 const CAL = $(this).closest('.ajde_evcal_calendar'); 2264 TYPE = $(this).data('type'); 2265 $(this).parent().find('i').removeClass('on'); 2266 $(this).addClass('on'); 2267 2268 //console.log(TYPE); 2269 2270 if(TYPE=='row'){ 2271 CAL.attr('class','ajde_evcal_calendar'); 2272 // set tile colors 2273 CAL.find('.eventon_list_event').each(function(){ 2274 $(this).find('.desc_trig').css('background-color', ''); 2275 $(this).find('.desc_trig_outter').css('background-color', ''); 2276 });
2277 }else if(TYPE =='bar'){ 2278 CAL.attr('class','ajde_evcal_calendar box_2 sev cev'); 2279 2280 // set tile colors 2281 CAL.find('.eventon_list_event').each(function(){ 2282 const color = $(this).data('colr'); 2283 $(this).find('.desc_trig').css('background-color', color); 2284 }); 2285 }else{ 2286 2287 // set tile colors 2288 CAL.find('.eventon_list_event').each(function(){ 2289 const color = $(this).data('colr'); 2290 $(this).find('.desc_trig_outter').css('background-color', color); 2291 }); 2292 2293 CAL.attr('class','ajde_evcal_calendar boxy boxstyle0 box_2'); 2294 } 2295 }); 2296 } 2297 2298 // SORTING & FILTERING 2299 // Sorting 2300 // update calendar based on the sorting selection 2301 $('body').on('click', '.evo_sort_option',function(){ 2302 O = $(this); 2303 var CAL = O.closest('.ajde_evcal_calendar'); 2304 var sort_by = O.data('val'); 2305 2306 // update new values everywhere 2307 CAL.evo_update_cal_sc({F:'sort_by',V:sort_by}); 2308 2309 O.parent().find('p').removeClass('select'); 2310 O.addClass('select'); 2311 2312 run_cal_ajax(CAL.attr('id'),'none','sorting'); 2313 }); 2314 2315 // close filter menus on click outside 2316 BODY.on('clicked_on_page',function( ev, obj, ee){ 2317 2318 // hide filter menu when clicked outside 4.6.2 2319 if( !(obj.hasClass('eventon_filter')) && 2320 !(obj.hasClass('filtering_set_val')) && 2321 !(obj.hasClass('evo_filter_val')) && 2322 !(obj.hasClass('evofp_filter_search_i')) && 2323 obj.parents('.filtering_set_val').length == 0 2324 ){ 2325 //console.log(obj); 2326 BODY.find('.evo_filter_menu').html(''); 2327 BODY.find('.evo_filter_tax_box.vis').removeClass('vis'); 2328 } 2329 }); 2330 2331 // Filtering 2332 $.fn.evo_cal_filtering = function(O){ 2333 2334 var opt = $.extend({}, O); 2335 2336 var el = this; // cal 2337 const sortbox = el.find('.eventon_sorting_section'), 2338 filter_container = sortbox.find('.evo_filter_container_in'), 2339 filter_line = sortbox.find('.eventon_filter_line'), 2340 fmenu = sortbox.find('.evo_filter_menu'), 2341 all_cal_filter_data = el.evo_get_filter_data(), 2342 SC = el.evo_shortcode_data(); 2343 var tterms = []; 2344 2345 2346 var init = function(){ 2347 2348 if( SC == '' || SC === null ) return; 2349 if( el.hasClass('filters_go')) return; 2350 el.addClass('filters_go'); 2351 2352 draw_filter_bar(); 2353 filter_actions(); 2354 run_filter_nav_check(); 2355 2356 } 2357 2358 // draw the filter bar 2359 var draw_filter_bar = function(){ 2360 //console.log(all_cal_filter_data); 2361 2362 BODY.trigger('evo_filter_before_draw', [ el ]); 2363 2364 html = ''; 2365 $.each( all_cal_filter_data , function( index, value){ 2366 2367 // skip fast filter items 2368 if( SC && 'fast_filter' in SC && SC.fast_filter == 'yes' && SC.ff_tax != '' && SC.ff_tax !== undefined ){ 2369 __t = SC.ff_tax.split(','); 2370 if( __t.includes( index ) ) return; 2371 } 2372 2373 html += "<div class='eventon_filter evo_filter_tax_box evo_hideshow_st "+index+"' data-tax='"+ value.__tax +"' data-filter_type='"+ value.__filter_type +"'>"; 2374 html += "<div class='eventon_filter_selection'>"; 2375 html += "<p class='filtering_set_val'><i class='fa fa-check'></i> "+ value.__name +"<em class='fa fa-caret-down'></em></p>"; 2376 html += "</div>"; 2377 html += "</div>"; 2378 }); 2379 2380 filter_line.html( html ); 2381 2382 BODY.trigger('evo_filter_drawn', [ el ]); 2383 } 2384 2385 2386 // filter all actions 2387 var filter_actions = function(){ 2388 2389 el.off('click', '.evo-filter-btn'); 2390 2391 // show/hide filter bar 2392 el.on('click','.evo-filter-btn',function(){ 2393 const CAL = $(this).closest('.ajde_evcal_calendar'); 2394 2395 BODY.trigger('evo_filter_btn_trig', [ CAL , O ]); 2396 if( CAL.hasClass('fp_lb')) return; // PLUG 4.6.4 2397 2398 if( !( $(this).hasClass('vis') ) ){ 2399 sortbox.addClass('vis'); 2400 run_filter_nav_check(); 2401 }else{ 2402 sortbox.removeClass('vis'); 2403 } 2404 2405 }); 2406 2407 // close filter when other sibling buttons clicked 4.6.4 2408 BODY.on('evo_cal_header_btn_clicked',function(event, O){ 2409 if( O.hasClass('evo-sort-btn') || O.hasClass('evo-search') ){ 2410 const CAL = O.closest('.ajde_evcal_calendar'); 2411 CAL.find('.eventon_sorting_section').removeClass('vis'); 2412 } 2413 });
2414 2415 2416 // show hide menu 2417 el.on('click','.filtering_set_val',function(){ 2418 2419 O = $(this); 2420 const filterbox = O.closest('.evo_filter_tax_box'), 2421 filter_tax = filterbox.data('tax'); 2422 selected_terms = el.evo_cal_get_filter_sub_data( filter_tax , 'tterms' ); 2423 2424 // close sort menu 2425 el.find('.eventon_sort_line').hide(); 2426 2427 // hide already opened menus 2428 if( filterbox.hasClass('vis')){ 2429 filterbox.removeClass('vis'); 2430 close_filter_menu(); 2431 return; 2432 } 2433 if( fmenu.data('tax') == filter_tax ){ 2434 filterbox.removeClass('vis'); 2435 close_filter_menu(); 2436 return; 2437 }else{ 2438 sortbox.find('.filtering_set_val').removeClass('show'); 2439 sortbox.find('.evo_filter_tax_box').removeClass('vis'); 2440 filterbox.addClass('vis'); 2441 } 2442 2443 // build the filter menu from data 2444 var filter_item_data = all_cal_filter_data[ filter_tax ].__list; 2445 2446 //console.log(all_cal_filter_data); 2447 //console.log(selected_terms); 2448 2449 var __menu_html = '<div class="evo_filter_inside evo_filter_menu_in" data-tax="'+filter_tax+'"><div class="eventon_filter_dropdown">'; 2450 2451 // each term 2452 $.each(filter_item_data, function (index, val){ 2453 2454 var icon_html = ''; 2455 var _class = filter_tax+'_'+ val[0] + ' '+ val[0]; 2456 2457 // parent or child term 2458 if( val[3] !== undefined && val[3] != '' && val[3] == 'n') _class += ' np'; 2459 2460 //console.log(selected_terms); 2461 // select or not 2462 if( selected_terms == 'all' ) _class += ' select'; 2463 if( selected_terms.includes( val[0] ) ) _class += ' select'; 2464 2465 // icon 2466 if( val[2] != '' && val[2] !== undefined ){ 2467 _class += ' has_icon'; icon_html = val[2]; 2468 } 2469 2470 // tax term color 2471 var _tax_color = ''; 2472 if( val[4] != '' && val[4] !== undefined ){ 2473 _tax_color = `style='background-color:#${val[4]};'`; 2474 } 2475 2476 __menu_html += `<p class="evo_filter_val ${_class}" data-id="${val[0]}" ${_tax_color}>${icon_html} ${val[1]}</p>` 2477 }); 2478 __menu_html += "</div></div>"; 2479 2480 // 4.6.4 2481 BODY.trigger('evo_filter_menu_html_ready', [ el , __menu_html , O , filterbox, filter_tax]); 2482 2483 2484 if( el.hasClass('fp_side')) return; // PLUG 2485 2486 2487 2488 // set new menu with correct location 2489 const scrolled_width = filter_container.scrollLeft(); 2490 fmenu.html( __menu_html ); 2491 2492 // pluggable 2493 BODY.trigger('evo_filter_menu_built', [ el , fmenu , filter_tax ]); 2494 2495 2496 __left_margin = filterbox.position().left + 10 - scrolled_width; 2497 __menu_width = fmenu.find('.evo_filter_inside').width(); 2498 2499 __cal_left_margin = el.position().left; 2500 2501 //console.log(__cal_left_margin + ' '+ __left_margin +' '+ __menu_width + ' '+ $(window).width()); 2502 2503 if( __left_margin + __menu_width + __cal_left_margin > $(window).width() ){ 2504 2505 if( ( __left_margin + __menu_width ) > el.width() ){ 2506 new_left = el.width() - __menu_width - 10; 2507 }else{ 2508 new_left = ( el.width() - __menu_width ) / 2; 2509 } 2510 fmenu.css('left', new_left ); 2511 }else{ 2512 fmenu.css('left', __left_margin); 2513 } 2514 }); 2515 2516 // select a static filter menu item 2517 el.on('click','p.filtering_static_val',function(){ 2518 2519 BODY.trigger('evo_filter_static_clicked', [ el , $(this) ]); 2520 2521 }); 2522 2523 // select terms in filter menu 2524 el.on('click','p.evo_filter_val',function (){ 2525 2526 var O = $(this); 2527 const filter_menuIN = O.closest('.evo_filter_inside'), 2528 filter_tax = filter_menuIN.data('tax'), 2529 filterbox = sortbox.find('.evo_filter_tax_box.'+ filter_tax), 2530 all_terms_obj = filter_menuIN.find('p'), 2531 new_term_id = O.data('id'), 2532 old_terms = el.evo_cal_get_filter_sub_data( filter_tax , 'terms' ) 2533 ; 2534 var tterms = el.evo_cal_get_filter_sub_data( filter_tax , 'nterms' ); 2535 2536 var new_terms = []; 2537 2538 2539 // select filter type 2540 if( SC.filter_type == 'select' ){ 2541 2542 // all value 2543 if( new_term_id == 'all' ){ 2544 if( O.hasClass('select') ){ 2545 all_terms_obj.removeClass('select'); 2546 }else{ 2547 all_terms_obj.addClass('select'); 2548 new_terms.push('all'); 2549 } 2550 }else{ 2551 // unselect all value 2552 filter_menuIN.find('p.all').removeClass('select'); 2553 O.toggleClass('select'); 2554 2555 var unselect_count = 0; 2556 all_terms_obj.each(function(){ 2557 if( $(this).hasClass('select')){ 2558 new_terms.push( $(this).data('id') ) 2559 }else{ 2560 // not select 2561 if(!$(this).hasClass('all')) unselect_count++; 2562 } 2563 }); 2564 2565 // all selected 2566 if(unselect_count == 0){ 2567 filter_menuIN.find('p.all').addClass('select'); 2568 new_terms.push('all'); 2569 } 2570 2571 // if all field is not visible; nothing selected = all 2572 if( new_terms.length == 0 && O.parent().find('p.all').length == 0) 2573 new_terms.push('all'); 2574 } 2575 2576 // non select type 2577 }else{ 2578 // all value 2579 if( new_term_id == 'all' ){ 2580 // if all is already selected 2581 if( O.hasClass('select')){ 2582 new_terms.push('NOT-all'); 2583 all_terms_obj.removeClass('select'); 2584 }else{ 2585 all_terms_obj.addClass('select'); 2586 new_terms.push( new_term_id ); 2587 } 2588 }else{ 2589 all_terms_obj.removeClass('select'); 2590 O.addClass('select'); 2591 new_terms.push( new_term_id ); 2592 } 2593 2594 update_filter_data( filter_tax, new_terms ); 2595 2596 // process selection @4.6.6 2597 if( tterms == new_terms ){ 2598 close_filter_menu(); 2599 }else{ 2600 cal_resets( el ); 2601 2602 el.evo_update_sc_from_filters(); 2603
2604 run_cal_ajax( el.attr('id') ,'none','filering'); 2605 2606 close_filter_menu(); 2607 O.removeClass('show'); 2608 } 2609 2610 close_filter_menu(); 2611 // mark hide of menu 2612 filterbox.removeClass('vis'); 2613 } 2614 2615 // show and hide apply filter button 2616 // if new terms = temp terms 2617 if( compare_terms( new_terms, tterms) ){ 2618 filterbox.removeClass('chg'); 2619 }else{ 2620 filterbox.addClass('chg'); 2621 } 2622 if( compare_terms( old_terms, new_terms) ){ 2623 filterbox.removeClass('set'); 2624 }else{ 2625 filterbox.addClass('set'); 2626 } 2627 2628 2629 // changed filters 2630 var chg_filters = sortbox.find('.evo_filter_tax_box.chg').length; 2631 var set_count = sortbox.find('.evo_filter_tax_box.set').length; 2632 if( SC.filter_type == 'select' ) 2633 ( chg_filters > 0 ) ? show_apply_btns() : hide_apply_btns(); 2634 2635 2636 // Filter highlighted indicator 2637 if( !( el.hasClass('flhi') ) ){ 2638 2639 const filter_btn = el.find('.evo-filter-btn'); 2640 2641 if( set_count > 0){ 2642 filter_btn.find('em').html( set_count ).addClass('o'); 2643 }else{ 2644 filter_btn.find('em').removeClass('o'); 2645 } 2646 } 2647 2648 2649 2650 update_filter_data( filter_tax, new_terms , 'tterms'); 2651 2652 run_filter_nav_check(); 2653 2654 }); 2655 2656 // apply filters button 2657 el.on('click','.evo_filter_submit',function(){ 2658 2659 el.evo_filters_update_from_temp( filter_line, el ); 2660 2661 cal_resets( el); 2662 2663 close_filter_menu(); // hide filter menu 2664 2665 // update filter item button 2666 sortbox.find('.filtering_set_val').removeClass('show'); 2667 2668 el.evo_update_sc_from_filters(); // update shortcode from filters 2669 2670 run_cal_ajax( el.attr('id'),'none','filering'); 2671 2672 run_filter_nav_check(); 2673 }); 2674 2675 // clear filters 2676 el.on('click','.evo_filter_clear',function(){ 2677 2678 el.find('.evo_filter_tax_box').each(function(){ 2679 const O = $(this), 2680 tax = O.data('tax'), 2681 terms = O.data('terms'); 2682 2683 O.removeClass('set'); 2684 O.find('.filtering_set_val').removeClass('set show'); 2685 el.find('.evo-filter-btn em').removeClass('o'); 2686 2687 close_filter_menu(); 2688 }); 2689 2690 // update all filters with default/ onload values @4.6.1 2691 $.each( all_cal_filter_data, function( tax, tdata){ 2692 update_filter_data( tax, tdata.terms ); 2693 } ); 2694 2695 2696 hide_apply_btns(); // hide filter action buttons 2697 2698 // update shortcode and run new ajax for events 2699 el.evo_update_sc_from_filters(); 2700 run_cal_ajax( el.attr('id'),'none','filering'); 2701 2702 run_filter_nav_check(); 2703 }); 2704 2705 // click on filter navs 2706 el.on('click','.evo_filter_nav',function(){ 2707 O = $(this); 2708 2709 _filter_bar = O.closest('.evo_filter_bar'); 2710 _filter_container = _filter_bar.find('.evo_filter_container_in'); 2711 _filter_line_width = _filter_bar.find('.eventon_filter_line')[0].scrollWidth; 2712 _filter_container_width = parseInt( _filter_container.width() ) + 0; 2713 _leftPos = _filter_container.scrollLeft(); 2714 _scrollable_legth = _filter_line_width - _filter_container_width; 2715 2716 const scroll_length = _filter_container_width /2; 2717 2718 // move right 2719 if( O.hasClass('evo_filter_r') ){ 2720 2721 _filter_container.animate({scrollLeft:_leftPos + scroll_length},200); 2722 _filter_bar.find('.evo_filter_l').addClass('vis'); 2723 // move left 2724 }else{ 2725 sleft = (_leftPos - scroll_length < scroll_length) ? 0 : _leftPos - scroll_length; 2726 _filter_container.animate({scrollLeft: sleft },200); 2727 } 2728 2729 close_filter_menu(); 2730 2731 setTimeout(function(){ 2732 var _leftPos = _filter_container.scrollLeft(); 2733 //console.log(_leftPos); 2734 if( _leftPos < 10){ 2735 _filter_bar.find('.evo_filter_l').removeClass('vis'); 2736 _filter_bar.find('.evo_filter_r').addClass('vis'); 2737 } 2738 2739 if( _leftPos > ( _scrollable_legth - 5 ) ){ 2740 _filter_bar.find('.evo_filter_r').removeClass('vis'); 2741 } 2742 },200);
2743 2744 }); 2745 2746 // on window size change 2747 $(window).on('resize',function(){ 2748 run_filter_nav_check(); 2749 }); 2750 } 2751 2752 var compare_terms = function(a, b){ 2753 if (a === b) return true; 2754 if (a == null || b == null) return false; 2755 if (a.length !== b.length) return false; 2756 2757 for (var i = 0; i < a.length; ++i) { 2758 if (a[i] !== b[i]) return false; 2759 } 2760 return true; 2761 } 2762 var close_filter_menu = function(){ 2763 fmenu.html('').data('tax',''); 2764 } 2765 2766 var show_apply_btns = function(){ 2767 sortbox.find('.evo_filter_aply_btns').addClass('vis'); 2768 } 2769 var hide_apply_btns = function(){ 2770 sortbox.find('.evo_filter_aply_btns').removeClass('vis'); 2771 } 2772 2773 var update_filter_data = function(tax, new_val, key){ 2774 2775 el.evo_cal_update_filter_data( tax , new_val , key ); 2776 } 2777 2778 2779 // adjust and position filter nav buttons 2780 var run_filter_nav_check = function(){ 2781 2782 $.each( el.find('.evo_filter_bar') , function(event){ 2783 _filter_bar = $(this); 2784 _filter_container = _filter_bar.find('.evo_filter_container_in'); 2785 _filter_line_width = _filter_bar.find('.eventon_filter_line')[0].scrollWidth; 2786 _filter_container_width = parseInt( _filter_container.width() ) + 3; 2787 var leftPos = _filter_container.scrollLeft(); 2788 2789 //console.log(_filter_line_width +' '+ _filter_container_width +' '+leftPos); 2790 2791 // filter line is not showing full 2792 if( _filter_line_width > _filter_container_width ){ 2793 2794 // if some of filter line is hidden on right 2795 if( ( _filter_container_width + leftPos ) < _filter_line_width ) 2796 _filter_bar.find('.evo_filter_r').addClass('vis'); 2797 2798 // if filter has been scrolled 2799 if( leftPos > 0 ){ 2800 _filter_bar.find('.evo_filter_l').addClass('vis'); 2801 }else{ 2802 _filter_bar.find('.evo_filter_r').addClass('vis'); 2803 } 2804 }else{ 2805 _filter_bar.find('.evo_filter_l').removeClass('vis'); 2806 _filter_bar.find('.evo_filter_r').removeClass('vis'); 2807 } 2808 2809 }); 2810 2811 //console.log(filter_line_width +' '+ filter_container_width +' '+leftPos); 2812 } 2813 2814 init(); 2815 } 2816 2817 // for each tax move tterms value to nterms / before sending ajax 2818 $.fn.evo_filters_update_from_temp = function(filter_line, cal){ 2819 // move temp term values into new terms 2820 filter_line.find('.evo_filter_tax_box').each(function(){ 2821 var taxonomy = $(this).data('tax'); 2822 const tterms = cal.evo_cal_get_filter_sub_data( taxonomy , 'tterms'); 2823 2824 cal.evo_cal_update_filter_data( taxonomy , tterms, 'nterms'); 2825 2826 $(this).removeClass('chg'); 2827 }); 2828 } 2829 2830 2831 // PRIMARY hook to get content 2832 // MAIN AJAX for calendar events v2.8 2833 function run_cal_ajax( cal_id, direction, ajaxtype){ 2834 2835 // identify the calendar and its elements. 2836 var CAL = ev_cal = $('#'+cal_id); 2837 2838 // check if ajax post content should run for this calendar or not 2839 if(CAL.attr('data-runajax')!='0'){ 2840 2841 // category filtering for the calendar 2842 var cat = CAL.find('.evcal_sort').attr('cat'); 2843 2844 // reset paged values for switching months 2845 if(ajaxtype=='switchmonth'){ 2846 CAL.find('.cal_arguments').attr('data-show_limit_paged',1); 2847 CAL.evo_update_cal_sc({F:'show_limit_paged', V: '1'}); 2848 } 2849 2850 SC = CAL.evo_cal_functions({action:'load_shortcodes'}); 2851 2852 $('body').trigger('evo_main_ajax_before', [CAL, ajaxtype, direction, SC]); 2853 2854 var data_arg = { 2855 //action: 'eventon_get_events', 2856 direction: direction, 2857 shortcode: SC, 2858 ajaxtype: ajaxtype, 2859 nonce: evo_general_params.n, 2860 nonceX: evo_general_params.nonce 2861 }; 2862 2863 EVENTS_LIST = CAL.find('.eventon_events_list'); 2864 2865 $.ajax({
2866 // preload actions 2867 beforeSend: function(xhr){ 2868 xhr.setRequestHeader('X-WP-Nonce', evo_general_params.nonce ); 2869 2870 CAL.addClass('evo_loading'); 2871 2872 // paged -- adding events to end 2873 if(ajaxtype == 'paged'){ 2874 txt = EVENTS_LIST.find('.evoShow_more_events').html(); 2875 EVENTS_LIST.find('.evoShow_more_events').html('. . .').data('txt',txt); 2876 }else{ 2877 2878 html = evo_general_params.html.preload_events; 2879 if( SC.tiles == 'yes') html = evo_general_params.html.preload_event_tiles; 2880 2881 EVENTS_LIST.html( html ); 2882 //EVENTS_LIST.slideUp('fast'); 2883 } 2884 2885 // maintain scrolltop location 4.6 2886 if( CAL.hasClass('nav_from_foot')){ 2887 2888 //scrolltop = (CAL.find('.evo_footer_nav').offset().top) - CAL.data('viewport_top'); 2889 scrolltop = CAL.offset().top; 2890 $('html, body').animate({ scrollTop: scrolltop },20); 2891 } 2892 2893 $('body').trigger('evo_main_ajax_before_fnc',[CAL, ajaxtype, data_arg ]); //s4.6 2894 }, 2895 type: 'POST', url: get_ajax_url('eventon_get_events'),data: data_arg,dataType:'json', 2896 success:function(data){ 2897 if(!data) return false; 2898 2899 // paged calendar 2900 if(ajaxtype == 'paged'){ 2901 EVENTS_LIST.find('.evoShow_more_events').remove(); 2902 EVENTS_LIST.find('.clear').remove(); 2903 2904 2905 EVENTS_LIST.append( data.html + "<div class='clear'></div>"); 2906 2907 // hide show more events if all events loaded 2908 var events_in_list = EVENTS_LIST.find('.eventon_list_event').length; 2909 if( 'total_events' in data && data.total_events == events_in_list){ 2910 EVENTS_LIST.find('.evoShow_more_events').hide(); 2911 } 2912 2913 // for month lists duplicate headers // @+2.8.1 2914 var T = {}; 2915 EVENTS_LIST.find('.evcal_month_line').each(function(){ 2916 d = $(this).data('d'); 2917 if( T[d]) 2918 $(this).remove(); 2919 else 2920 T[d] = true; 2921 }); 2922 2923 var T = {}; 2924 EVENTS_LIST.find('.sep_month_events').each(function(){ 2925 d = $(this).data('d'); 2926 if( T[d]){ 2927 var H = $(this).html(); 2928 EVENTS_LIST.find('.sep_month_events[data-d="'+d+'"]').append( H ); 2929 $(this).remove(); 2930 }else{T[d] = true;} 2931 }); 2932 2933 }else{ 2934 EVENTS_LIST.html(data.html); 2935 } 2936 2937 2938 // update calendar data 2939 CAL.find('.evo_month_title').html( data.cal_month_title ); 2940 2941 CAL.evo_cal_functions({action:'update_shortcodes',SC: data.SC}); 2942 CAL.evo_cal_functions({action:'update_json',json: data.json}); 2943 2944 // run cal process code 2945 CAL.evo_calendar({ 2946 SC: data.SC, 2947 json: data.json 2948 }); 2949 2950 2951 $('body').trigger('calendar_month_changed',[CAL, data]); 2952 2953 $('body').trigger('evo_main_ajax_success', [CAL, ajaxtype, data, data_arg]); 2954 2955 },complete:function(data){ 2956 2957 // show events list events if not set to hide on load 2958 if(! EVENTS_LIST.hasClass('evo_hide')) EVENTS_LIST.delay(300).slideDown('slow'); 2959 2960 // maintain scrolltop location 4.6 2961 if( CAL.hasClass('nav_from_foot')){ 2962 2963 setTimeout(function(){ 2964 //scrolltop = (CAL.find('.evo_footer_nav').offset().top) - CAL.data('viewport_top'); 2965 scrolltop = CAL.offset().top; 2966 $('html, body').animate({ scrollTop: scrolltop },20); 2967 CAL.removeClass('nav_from_foot'); 2968 },302); 2969 } 2970 2971 // pluggable 2972 $('body').trigger('evo_main_ajax_complete', [CAL, ajaxtype, data.responseJSON , data_arg]); 2973 CAL.removeClass('evo_loading'); 2974 } 2975 }); 2976 } 2977 } 2978 2979 $('body').on('evo_run_cal_ajax',function(event,cal_id, direction, ajaxtype){ 2980 run_cal_ajax( cal_id, direction, ajaxtype); 2981 }); 2982 2983 // deprecated bridge function for sortby value 2984 function ajax_post_content(sortby, cal_id, direction, ajaxtype){ 2985 run_cal_ajax( cal_id, direction, ajaxtype); 2986 } 2987 2988 2989 // SINGLE EVENTS 2990 // Loading single event json based content 2991 $('body').on('evo_load_single_event_content', function(event, eid, obj){ 2992 var ajaxdataa = {}; 2993 ajaxdataa['eid'] = eid; 2994 ajaxdataa['nonce'] = the_ajax_script.postnonce; 2995 2996 // pass on other event values 2997 if(obj.data('j')){ 2998 $.each(obj.data('j'), function(index,val){ 2999 ajaxdataa[ index] = val; 3000 });
3001 } 3002 3003 $.ajax({ 3004 beforeSend: function(){ }, 3005 url: get_ajax_url('eventon_load_event_content'), 3006 data: ajaxdataa, dataType:'json', type: 'POST', 3007 success:function(data){ 3008 $('body').trigger('evo_single_event_content_loaded', [data, obj]); 3009 },complete:function(){ } 3010 }); 3011 }); 3012 3013 if(BODY.evo_is_mobile()){ 3014 if($('body').find('.fb.evo_ss').length != 0){ 3015 $('body').find('.fb.evo_ss').each(function(){ 3016 obj = $(this); 3017 obj.attr({'href':'http://m.facebook.com/sharer.php?u='+obj.attr('data-url')}); 3018 }); 3019 } 3020 } 3021 3022 // on single event page 3023 if($('body').find('.evo_sin_page').length>0){ 3024 $('.evo_sin_page').each(function(){ 3025 $('body').trigger('evo_load_single_event_content',[ $(this).data('eid'), $(this)]); 3026 $(this).find('.desc_trig ').attr({'data-ux_val':'none'}); 3027 }); 3028 } 3029 3030 // Single events box 3031 // Click on single event box 3032 $('.eventon_single_event').on('click', '.evcal_list_a',function(event){ 3033 var obj = $(this); 3034 const $this = $(this); 3035 var CAL = obj.closest('.ajde_evcal_calendar'); 3036 var SC = CAL.evo_shortcode_data(); 3037 3038 var uxVal = SC.ux_val; 3039 3040 event.preventDefault(); 3041 3042 // open in event page 3043 if(uxVal == 4){ 3044 var url = obj.parent().siblings('.evo_event_schema').find('[itemprop=url]').attr('href'); 3045 window.location.href= url; 3046 }else if(uxVal == '2'){ // External Link 3047 var url = SC.exturl; 3048 window.location.href= url; 3049 }else if(uxVal == '1'){ // Slide Down 3050 const $eventBox = $this.closest('.eventon_list_event'); 3051 const $content = $eventBox.find('.event_description'); 3052 const isOpen = $content.hasClass('open'); 3053 const B = $('body'); 3054 $eventBox.toggleClass('open', !isOpen); 3055 $content[isOpen ? 'slideUp' : 'slideDown']().toggleClass('open', !isOpen); 3056 if ($eventBox.find('.evo_metarow_gmap').length) { 3057 $eventBox.find('.evo_metarow_gmap').evo_load_gmap({ trigger_point: 'slideDownCard' }); 3058 } 3059 if ($trigger.data('runjs')) { 3060 B.trigger('evo_load_single_event_content', [event_id, $trigger]); 3061 } 3062 B.trigger('evo_slidedown_eventcard_complete', [event_id, $trigger, !isOpen]); 3063 return false; 3064 3065 3066 3067 }else if(uxVal == 'X'){ // do not do anything 3068 return false; 3069 } 3070 }); 3071 // each single event box 3072 $('body').find('.eventon_single_event').each(function(){ 3073 var _this = $(this); 3074 3075 var CAL = _this.closest('.ajde_evcal_calendar'); 3076 var SC = CAL.evo_shortcode_data(); 3077 var evObj = CAL.find('.eventon_list_event'); 3078 3079 // show expanded eventCard 3080 if( SC.expanded =='yes'){ 3081 _this.find('.evcal_eventcard').show(); 3082 var idd = _this.find('.evcal_gmaps'); 3083 3084 // close button 3085 _this.find('.evcal_close').parent().css({'padding-right':0}); 3086 _this.find('.evcal_close').hide(); 3087 3088 //console.log(idd); 3089 var obj = _this.find('.desc_trig'); 3090 3091 // Google Map 3092 _this.find('.evo_metarow_gmap').evo_load_gmap(); 3093 3094 // mark as eventcard open @since 4.4 3095 evObj.find('.event_description').addClass('open'); 3096 3097 // open eventBox and lightbox 3098 }else if(SC.uxval =='3'){ 3099 3100 var obj = _this.find('.desc_trig'); 3101 // remove other attr - that cause to redirect 3102 obj.removeAttr('data-exlk').attr({'data-ux_val':'3'}); 3103 } 3104 3105 // show event excerpt 3106 var ev_excerpt = CAL.find('.event_excerpt').html(); 3107 3108 if(ev_excerpt!='' && ev_excerpt!== undefined && SC.excerpt =='yes' ){ 3109 var appendation = '<div class="event_excerpt_in">'+ev_excerpt+'</div>' 3110 evObj.append(appendation); 3111 } 3112 3113 // trigger support @since 4.4 3114 var obj = evObj.find('.desc_trig'); 3115 var event_id = evObj.data('event_id'); 3116 3117 3118 $('body').trigger('evo_slidedown_eventcard_complete',[ event_id, obj]); 3119 }); 3120 3121// supportive 3122 // ajax url function @u 4.5.5 3123 function get_ajax_url(action){ 3124 var ajax_type = 'endpoint'; 3125 if('ajax_method' in evo_general_params ) ajax_type = evo_general_params.ajax_method; 3126 return $('body').evo_get_ajax_url({a:action, type: ajax_type }); 3127 } 3128 // handlebar additions 3129 function handlebar_additional_arguments(){ 3130 Handlebars.registerHelper('ifE',function(v1, options){ 3131 return (v1 !== undefined && v1 != '' && v1) 3132 ? options.fn(this) 3133 : options.inverse(this); 3134 }); 3135 3136 Handlebars.registerHelper('ifEQ',function(v1, v2, options){ 3137 return ( v1 == v2)? options.fn(this): options.inverse(this); 3138 }); 3139 Handlebars.registerHelper('ifNEQ',function(v1, v2, options){ 3140 return ( v1 != v2)? options.fn(this): options.inverse(this); 3141 }); 3142 Handlebars.registerHelper('BUStxt',function(V, options){ 3143 if( !( V in BUS.txt) ) return V; 3144 return BUS.txt[V]; 3145 }); 3146 Handlebars.registerHelper('GetDMnames',function(V, U, options){ 3147 return BUS.dms[U][ V ]; 3148 }); 3149 // get total of increments 3150 Handlebars.registerHelper('forAdds',function(count, add_val, options){ 3151 O = ''; 3152 for(x=1; x<= count; x++){ O += add_val; } 3153 return O; 3154 }); 3155 Handlebars.registerHelper('GetEvProp',function(EID, PROP, CALID){ 3156 EID = EID.split('-'); 3157 EV = $('#'+ CALID).find('.evo_cal_events').data('events'); 3158 3159 var O = ''; 3160 $.each(EV, function(i,d){ 3161 if( d.ID == EID[0] && d.ri == EID[1]){ 3162 if( !(PROP in d.event_pmv)) return; 3163 O = d.event_pmv[PROP][0]; 3164 } 3165 }); 3166 return O; 3167 }); 3168 Handlebars.registerHelper('GetEvV',function(EID, PROP, CALID){ 3169 EID = EID.split('-'); 3170 EV = $('#'+ CALID).find('.evo_cal_events').data('events'); 3171 3172 var O = ''; 3173 $.each(EV, function(i,d){ 3174 if( d.ID == EID[0] && d.ri == EID[1]){ 3175 O = d[PROP]; 3176 } 3177 }); 3178 return O; 3179 }); 3180 Handlebars.registerHelper('COUNT',function( V){ 3181 return Object.keys(V).length; 3182 }); 3183 Handlebars.registerHelper('CountlimitLess',function( AR, C,options){ 3184 var L= Object.keys(AR).length; 3185 return ( L < C)? options.inverse(this): options.fn(this); 3186 }); 3187 Handlebars.registerHelper('ifCOND',function(v1, operator, v2, options){ 3188 return checkCondition(v1, operator, v2) 3189 ? options.fn(this) 3190 : options.inverse(this); 3191 }); 3192 Handlebars.registerHelper('toJSON', function(obj) { 3193 return new Handlebars.SafeString(JSON.stringify(obj)); 3194 }); 3195 Handlebars.registerHelper('Cal_def_check',function(V, options){ 3196 if( BUS.cal_def && BUS.cal_def[V] ) return options.fn(this); 3197 return options.inverse(this); 3198 }); 3199 Handlebars.registerHelper('TypeCheck',function(V, options){ 3200 if( options.type == V ) return options.fn(this); 3201 return options.inverse(this); 3202 }); 3203 } 3204 function checkCondition(v1, operator, v2) { 3205 switch(operator) { 3206 case '==': 3207 return (v1 == v2); 3208 case '===': 3209 return (v1 === v2); 3210 case '!==': 3211 return (v1 !== v2); 3212 case '<': 3213 return (v1 < v2); 3214 case '<=': 3215 return (v1 <= v2); 3216 case '>': 3217 return (v1 > v2); 3218 case '>=': 3219 return (v1 >= v2); 3220 case '&&': 3221 return (v1 && v2); 3222 case '||': 3223 return (v1 || v2); 3224 default: 3225 return false; 3226 } 3227 } 3228 3229 3230// DEPRECATING 3231 // LIGHTBOX 3232 // since 4.2 moving to functions 3233 // open lightbox @2.9 3234 BODY.on('evo_open_lightbox',function(event, lb_class, content){ 3235 const LIGHTBOX = $('.evo_lightbox.'+lb_class).eq(0); 3236 3237 // if already open 3238 if(LIGHTBOX.is("visible")===true) return false; 3239 3240 if( content != ''){ 3241 LIGHTBOX.find('.evo_lightbox_body').html( content ); 3242 } 3243 BODY.trigger('evolightbox_show', [ lb_class ]); 3244 }); 3245 3246 // click outside close LB 3247 BODY.on('clicked_on_page', function(event, obj, ev ){ 3248 if( obj.hasClass('evo_content_inin')){ 3249 closing_lightbox( obj.closest('.evo_lightbox') ); 3250 } 3251 }); 3252 3253 // close popup 3254 BODY.on('click','.evolbclose', function(){ 3255 if( $(this).hasClass('evolb_close_btn')) return; 3256 LIGHTBOX = $(this).closest('.evo_lightbox'); 3257 closing_lightbox( LIGHTBOX ); 3258 }); 3259 3260 // close with click outside popup box when pop is shown 3261 function closing_lightbox( lightboxELM){ 3262 3263 if(! lightboxELM.hasClass('show')) return false; 3264 Close = (lightboxELM.parent().find('.evo_lightbox.show').length == 1)? true: false; 3265 lightboxELM.removeClass('show'); 3266 3267 $('body').trigger('lightbox_before_event_closing', [lightboxELM]); 3268 3269 setTimeout( function(){ 3270 lightboxELM.find('.evo_lightbox_body').html(''); 3271 3272 if(Close){ 3273 $('body').removeClass('evo_overflow'); 3274 $('html').removeClass('evo_overflow'); 3275 } 3276 3277 // trigger action to hook in at this stage 3278 $('body').trigger('lightbox_event_closing', [lightboxELM]); 3279 }, 100); 3280 } 3281 3282 // when lightbox open triggered 3283 $('body').on('evolightbox_show',function(event, lb_class){ 3284 $('.evo_lightboxes').show(); 3285 $('body').addClass('evo_overflow'); 3286 $('html').addClass('evo_overflow'); 3287 3288 $('body').trigger('evolightbox_opened',[ lb_class ]); 3289 }); 3290 3291 3292});
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.