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