/** * Javascript code that is associated with the front end of the calendar * @version 5.0.3 * @license EventON JavaScript Assets * Copyright (C) 2014-2025 Ashan Jay, AshanJay Designs LLC. * * PROPRIETARY LICENSE - All Rights Reserved * * Permission granted solely for personal use with valid EventON license. * YOU MAY NOT: redistribute, resell, sublicense, or publish these Assets. * * Trademark: "EventON" is a trademark of AshanJay Designs LLC. * Contact: info@myeventon.com * * PROVIDED "AS IS" WITHOUT WARRANTY. VIOLATION MAY RESULT IN LEGAL ACTION. */ jQuery(document).ready(function($){ // restrict this only to frontend of the calendar if ( evo_general_params != '' && evo_general_params !== undefined && evo_general_params.is_admin) return; //return; var BODY = $('body'); var BUS = ''; // initial eventon calendar data var ajax_url = evo_general_params.ajaxurl; // EventON calendar main function // Calendar processing 2.8.6 u 4.6 $.fn.evo_calendar = function (options) { var el = this; var cal = this; var cal = {}; var calO = $.extend({ 'SC': {}, 'json':{}, 'type':'init' , map_delay:0 }, options); var SC = el.evo_shortcode_data(); // load calendar eventcard and eventtop interactions this.find('.eventon_list_event').each(function(){ evo_cal_eventcard_interactions( $(this) ); }); var init = function(){ // change IDs for map section for eventon widgets if( $(el).hasClass('evcal_widget')){ $(el).find('.evcal_gmaps').each(function(){ var gmap_id = obj.attr('id'); var new_gmal_id =gmap_id+'_widget'; obj.attr({'id':new_gmal_id}) }); } // load maps on calendar _evo_run_eventcard_map_load(); // initial actions on calendar $(el).evo_cal_filtering(); // localizing event time $(el).evo_cal_localize_time(); // load lightbox events on page load $(cal).evo_cal_oneevent_onload(calO.type); el.evo_cal_hide_data(); live_now_cal(); counters(); }; // support var live_now_cal = function(){ $(el).find('.evo_img_time').each(function(){ if( $(this).closest('a.desc_trig').find('em.evcal_time').length ){ _html = $(this).closest('a.desc_trig').find('em.evcal_time')[0].outerHTML; $(this).html( _html ); } }); } var counters = function(){ $(el).find('.evo_countdowner').each(function(){ $(this).evo_countdown(); }); } init(); }; // Event Card handling / Bind Event Listeners --- v4.6.1 @updated 5.0 var evo_eventcard_listeners = function(){ const EVO_Card_Listeners = { E: { B: $('body') }, init(){ const { E } = this; // Event listeners E.B.on('click.evoCard', '.evo_et_trigger', (e) => this.evo_handle_et_sidePanel(e)); E.B.on('evo_ajax_success_evo_et_trigger.evoCard', (e, OO, data, el) => this.evo_handle_et_sp_content(e, OO, data, el)); E.B.on('click.evoCard', '.tzo_trig', (e) => this.localizeTime(e)); E.B.on('click.evoCard', '.evo_event_more_img', (e) => this.handle_event_more_img(e)); E.B.on('click.evoCard', '.evo_img_triglb', (e) => this.handle_img_triglb(e)); E.B.on('click.evoCard', '.evo_repeat_series_date', (e) => this.handle_repeat_series_date(e)); E.B.on('click.evoCard', '.copy.evo_ss', (e) => this.handle_copy_event_link(e)); E.B.on('click.evoCard', '.evo_copy_address', (e) => this.handle_copy_event_address(e)); E.B.on('click.evoCard', '.evo_openmap_trig', (e) => this.handle_open_inmaps(e)); E.B.on('click.evoCard', '.evo_locimg_more', (e) => this.handle_locimg_more(e)); E.B.on('click.evoCard', '.evo_gal_icon', (e) => this.handle_gal_icon(e)); E.B.on('click.evoCard', '.evobtn_details_show_more', (e) => this.handle_details_show_more(e)); E.B.on('click.evoCard', '.evcal_close', (e) => this.handle_close_eventcard(e)); E.B.on('click.evoCard', '.evocmd_button', (e) => this.handle_evocmd_button(e)); E.B.on('click.evoCard', '.evo_org_clk_link', (e) => this.handle_org_clk_link(e)); E.B.on('click.evoCard', '.editEventBtnET', (e) => this.handle_edit_event_button(e)); E.B.on('click.evoCard', '.evo_organizer_more_trig', (e) => this.handle_organizer_more_details(e)); }, handle_organizer_more_details(e){ const { E } = this; const $el = $(e.currentTarget); $el.parent().hide(); $el.parent().siblings('.evo_org_details_full').show().removeClass('evodni'); }, // actions // Opens a side panel for event type triggers, adding a class and setting up data evo_handle_et_sidePanel(e) { const { E } = this; const $el = $(e.currentTarget); e.preventDefault(); $el.addClass('evo_sp_trig_on'); const aData = $el.data('d'); aData.adata.data['nonce'] = evo_general_params.n; $el.evo_open_sidepanel(aData); }, // Populates the side panel with content from an AJAX response and removes the loading bar evo_handle_et_sp_content(e, OO, data, el) { $(el).evo_populate_sidepanel(data.html); $('#evo_sp').find('.evo_loading_bar_holder').remove(); }, // Localizes the time display for elements with the tzo_trig class localizeTime(e) { e.preventDefault(); e.stopPropagation(); $(e.target).evo_localize_time(); }, // Changes the main event image when a thumbnail is clicked handle_event_more_img(e) { const $el = $(e.currentTarget); const box = $el.closest('.evcal_eventcard'); const gal = $el.closest('.evocard_fti_in'); if (box.length === 0) return; $el.siblings('span').removeClass('select'); $el.addClass('select'); const mainIMG = box.find('.evocard_main_image'); mainIMG.data({ h: $el.data('h'), w: $el.data('w'), f: $el.data('f') }); if (mainIMG.hasClass('def')) { mainIMG.css('background-image', `url(${$el.data('f')})`); } else { mainIMG.html(``); mainIMG.eventon_process_main_ft_img(); } }, // Opens a lightbox to display a full-size event image when clicked handle_img_triglb(e) { const $el = $(e.currentTarget); if ($el.hasClass('inlb')) return; const __ac = parseInt($el.data('w')) >= parseInt($el.data('h')) ? 'iW' : 'iH'; $el.evo_lightbox_open({ uid: 'evocard_ft_img', lbc: 'evolb_ft_img', lbac: `within evocard_img ${__ac}`, content: ``, end: 'client', lb_padding: '', d: { event_id: $el.data('event_id'), ri: $el.data('ri') } }); }, // Navigates to a repeat event's date URL based on user interaction type handle_repeat_series_date(e) { const $el = $(e.currentTarget); if (!$el.parent().hasClass('clickable')) return; const ux = $el.data('ux'); const URL = $el.data('l'); if (ux === 'def') window.location = URL; if (ux === 'defA') window.open(URL, '_blank'); }, // Copies an event link to the clipboard and shows a temporary confirmation handle_copy_event_link(e) { e.preventDefault(); e.stopPropagation(); const $el = $(e.currentTarget); const ROW = $el.closest('.evcal_evdata_row'); const link = decodeURIComponent($el.data('l')); navigator.clipboard.writeText(link); const evo_card_socialshare_html = ROW.html(); ROW.html(`

${$el.data('t')}

`); setTimeout(() => { ROW.html(evo_card_socialshare_html); }, 3000); }, // copy event location address handle_copy_event_address(e){ e.preventDefault(); e.stopPropagation(); const $el = $(e.currentTarget); const content = decodeURIComponent($el.data('txt')); navigator.clipboard.writeText(content); $el.siblings('input').val( $el.data('t')); setTimeout(() => { $el.siblings('input').val( content ); }, 3000); }, // open event location in maps handle_open_inmaps(e){ e.preventDefault(); e.stopPropagation(); const $el = $(e.currentTarget); const address = $el.data('d'); const ua = navigator.userAgent; // Mobile: try to open native app first if (ua.includes('iphone') || ua.includes('ipad') || ua.includes('ipod')) { // Force Apple Maps APP window.location = 'maps://maps.apple.com/?q=' + address; // Fallback to web in new tab after 1 second if app didn't open setTimeout(() => { window.open('https://maps.apple.com/?q=' + address, '_blank'); }, 1000); } else if (ua.includes('android')) { // Force Google Maps APP window.location = 'geo:0,0?q=' + address; setTimeout(() => { window.open('https://www.google.com/maps/search/?api=1&query=' + address, '_blank'); }, 1000); } else { // Desktop or unknown → always open in new tab (your requirement) window.open('https://www.google.com/maps/search/?api=1&query=' + address, '_blank', 'noopener'); } }, // Toggles visibility of additional location images handle_locimg_more(e) { e.preventDefault(); e.stopPropagation(); $(e.currentTarget).closest('.evo_metarow_locImg').toggleClass('vis'); }, // Updates the gallery main image when a gallery icon is clicked handle_gal_icon(e) { e.preventDefault(); e.stopPropagation(); const $el = $(e.currentTarget); if ($el.hasClass('on')) return; $el.siblings('div').removeClass('on'); $el.addClass('on'); $el.closest('.evo_gal_box').find('.evo_gal_main_img') .css('background-image', `url(${$el.data('u')})`) .data('f', $el.data('u')) .data('h', $el.data('h')) .data('w', $el.data('w')); }, // Toggles the display of additional event details handle_details_show_more(e) { e.preventDefault(); this.control_more_less($(e.currentTarget)); }, // Closes the event card by sliding it up handle_close_eventcard(e) { e.preventDefault(); $(e.currentTarget).closest('.evcal_eventcard').slideUp().removeClass('open'); }, // Redirects to a URL when an event command button is clicked handle_evocmd_button(e) { e.preventDefault(); e.stopPropagation(); const $el = $(e.currentTarget); const href = $el.data('href'); if ($el.data('target') === 'yes') { window.open(href, '_blank'); } else { window.location = href; } }, // Opens an organizer's link in a new tab handle_org_clk_link(e) { window.open($(e.currentTarget).data('link'), '_blank'); }, // Redirects to the event edit page handle_edit_event_button(e) { e.stopPropagation(); const href = $(e.currentTarget).attr('href'); window.open(href); }, // Controls the more/less toggle for event details display control_more_less(obj) { const content = obj.attr('content'); const current_text = obj.find('.ev_more_text').html(); const changeTo_text = obj.find('.ev_more_text').attr('data-txt'); const cell = obj.closest('.evcal_evdata_cell'); if (content === 'less') { cell.removeClass('shorter_desc'); obj.attr('content', 'more'); obj.find('.ev_more_arrow').removeClass('ard'); obj.find('.ev_more_text').attr('data-txt', current_text).html(changeTo_text); } else { cell.addClass('shorter_desc'); obj.attr('content', 'less'); obj.find('.ev_more_arrow').addClass('ard'); obj.find('.ev_more_text').attr('data-txt', current_text).html(changeTo_text); } } }; EVO_Card_Listeners.init(); } var evo_cal_eventcard_interactions = function( EC , load_maps ){ // process featured image sizes EC.find(".evocard_main_image").eventon_process_main_ft_img( ); // process content sliders EC.find('.evo_elm_HCS').each(function(){ $(this).evoContentSlider(); }); // countdown EC.find('.evo_countdowner').each(function(){ var obj = $(this); obj.removeClass('evo_cd_on'); obj.evo_countdown(); }); $(window).on('resize',function(){ BODY.find(".evocard_main_image").each(function(){ $(this).eventon_process_main_ft_img(); }); //EC.find(".evocard_main_image").eventon_process_main_ft_img(); }); } $.fn._evo_cal_eventcard_interactions = function( EC, load_maps){ evo_cal_eventcard_interactions( EC , load_maps); } // run all map waiting map @4.6.1 function _evo_run_eventcard_map_load(){ BODY.evo_run_eventcard_map_load(); } $.fn.evo_run_eventcard_map_load = function(){ time = 600; BODY.find('.evo_metarow_gmap').each(function(index){ O = $(this); if( !(O.is(":visible")) ) return; O.evo_load_gmap({ map_canvas_id: O.attr('id'), trigger_point:'evo_calendar', delay: time }); time += 600; }); } // EventTop Interactions v4.6 var evo_cal_eventtop_interactions = function( ET ){ } // RUN on Page load EVO_Global_Init(); function EVO_Global_Init(){ EVO_Interactions(); evo_eventcard_listeners(); // check if calendars are present in the page var run_initload = false; if( $('body').find('.ajde_evcal_calendar').length > 0 ) run_initload = true; if( $('body').find('.ajax_loading_cal').length > 0 ) run_initload = true; if( $('body').find('.eventon_single_event').length > 0 ) run_initload = true; if(run_initload == false) return false; var data_arg = {}; BODY.trigger('evo_global_page_run'); data_arg['global'] = $('#evo_global_data').data('d'); data_arg['cals'] ={}; data_arg['nonce'] = evo_general_params.n; // run through all the calendars on page BODY.find('.ajde_evcal_calendar').each(function(){ const CAL = $(this); var SC = CAL.evo_shortcode_data(); CAL.evo_pre_cal(); if( CAL.hasClass('ajax_loading_cal')){ data_arg['cals'][ CAL.attr('id')] = {}; data_arg['cals'][ CAL.attr('id')]['sc'] = SC; BODY.trigger('evo_global_page_run_after', CAL , SC );// @4.6.1 } }); BODY.evo_admin_get_ajax({ adata:{ data:data_arg, a:'eventon_init_load',ajax_type:'endpoint',end:'client' }, onSuccess:function( OO, data, LB){ $('#evo_global_data').data('d', data); BUS = data; // append html to calendars if present if('cals' in data){ var time = 300; $.each(data.cals, function(i,v){ setTimeout( function(){ CAL = BODY.find('#'+ i); if(CAL.length === 0) return; if('html' in v){ CAL.find('#evcal_list').html( v.html ); CAL.removeClass('ajax_loading_cal'); CAL.find('.evo_ajax_load_events').remove(); } // load SC and JSON to calendar CAL.evo_cal_functions({action:'update_shortcodes',SC: v.sc}); CAL.evo_cal_functions({action:'update_json',json: v.json}); $('body').trigger('evo_init_ajax_success_each_cal', [data, i, v, CAL]); }, time); time += 300; }); } $('body').trigger('evo_init_ajax_success', [data]); // after timeout based cal loading, process all cals setTimeout( function(){ BODY.find('.ajde_evcal_calendar').each(function(){ if( $(this).hasClass('.ajax_loading_cal') ) return; $(this).evo_calendar({'type':'complete'}); }); }, time ); }, onComplete:function( OO, data){ $('body').trigger('evo_init_ajax_completed', [data]); } }); handlebar_additional_arguments(); evo_cal_body_listeners(); // run basic countdown timers BODY.find('.evo_countdowner').each(function(){ $(this).evo_countdown(); }); } // ELEMENTS u4.9 // tooltips $('body').on('mouseover','.ajdeToolTip, .evotooltip, .evotooltipfree',function(event){ event.stopPropagation(); const el = $(this); if(el.hasClass('show')) return; var free = el.hasClass('free') || el.hasClass('evotooltipfree'); var content = el.data('d') || el.attr('title') || ''; if (!content) return; var p = el.position(); var cor = getCoords(event.target); $('.evo_tooltip_box').removeClass('show').removeClass('L').html( content ); var box_height = $('.evo_tooltip_box').height(); var box_width = $('.evo_tooltip_box').width(); var top = cor.top - 55 - box_height + (free ? 20 : 0); $('.evo_tooltip_box').css({'top': top, 'left': ( cor.left + 5 ) }) .addClass('show'); // left align if( $(this).hasClass('L')){ $('.evo_tooltip_box').css({'left': (cor.left - box_width - 15) }).addClass('L'); } }) .on('mouseout','.ajdeToolTip, .evotooltip, .evotooltipfree',function(e){ event.stopPropagation(); var relatedTarget = $(event.relatedTarget); var target = $(this); $('.evo_tooltip_box').removeClass('show'); }); function getCoords(elem) { // crossbrowser version var box = elem.getBoundingClientRect(); //console.log(box); var body = document.body; var docEl = document.documentElement; var scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop; var scrollLeft = window.pageXOffset || docEl.scrollLeft || body.scrollLeft; var clientTop = docEl.clientTop || body.clientTop || 0; var clientLeft = docEl.clientLeft || body.clientLeft || 0; var top = box.top + scrollTop - clientTop; var left = box.left + scrollLeft - clientLeft; return { top: Math.round(top), left: Math.round(left) }; } // yes no button $('body').on('click','.ajde_yn_btn ', function(event){ // stop this code from working on wp-admin if($('body').hasClass('wp-admin')) return false; var obj = $(this); var afterstatement = obj.attr('afterstatement'); afterstatement = (afterstatement === undefined)? obj.attr('data-afterstatement'): afterstatement; var uid = ''; // yes if(obj.hasClass('NO')){ obj.removeClass('NO'); obj.siblings('input').val('yes'); // afterstatment if(afterstatement!=''){ var type = (obj.attr('as_type')=='class')? '.':'#'; if( obj.data('uid') !== undefined) uid = obj.data('uid'); $(type+ afterstatement).slideDown('fast'); } }else{//no obj.addClass('NO'); obj.siblings('input').val('no'); if(afterstatement!=''){ var type = (obj.attr('as_type')=='class')? '.':'#'; $(type+ afterstatement ).slideUp('fast'); } } }); // content slider v4.9.13 // jQuery plugin for content slider $.fn.evoContentSlider = function() { return this.each(function() { const $slider = $(this); const $inner = $slider.find('.evo_elm_HCS_in'); const scrollAmount = 10; // Wheel scroll speed let scrollTimeout; // Initial button visibility updateButtonVisibility($slider); $slider.data('evo-slider-initialized', true); // Button click handler $slider.on('click', '.evo_elmHCS_nav.content_slide_trig', function() { const $button = $(this); const scrollDistance = parseInt($slider.width()) / 2; const currentScroll = $inner.scrollLeft(); let newScroll; if ($button.hasClass('HCSnavR')) { newScroll = currentScroll + scrollDistance; $slider.find('.HCSnavL')[0].classList.add('vis'); } else { newScroll = Math.max(0, currentScroll - scrollDistance); } $inner.animate({ scrollLeft: newScroll }, 200, () => { updateButtonVisibility($slider); }); }); // Wheel scrolling $inner[0].addEventListener('wheel', function(e) { e.preventDefault(); const delta = e.deltaY; const scrollableLength = this.scrollWidth - parseInt($slider.width()); const newScroll = Math.max(0, Math.min($inner.scrollLeft() + (delta > 0 ? scrollAmount : -scrollAmount), scrollableLength)); $inner.scrollLeft(newScroll); updateButtonVisibility($slider); }, { passive: false }); // Touch scrolling $inner[0].addEventListener('scroll', function() { clearTimeout(scrollTimeout); scrollTimeout = setTimeout(() => { updateButtonVisibility($slider); }, 100); }); }); }; // Add reload method $('body').on('evo_reload_slider', function(event, $slider){ updateButtonVisibility($slider); }); // Update button visibility function updateButtonVisibility($slider) { const $inner = $slider.find('.evo_elm_HCS_in'); const scrollableLength = $inner[0].scrollWidth - parseInt($slider.width()); const currentScroll = $inner.scrollLeft(); const leftButton = $slider.find('.HCSnavL')[0]; const rightButton = $slider.find('.HCSnavR')[0]; if (scrollableLength <= 0) { leftButton.classList.remove('vis'); rightButton.classList.remove('vis'); return; } leftButton.classList.toggle('vis', currentScroll >= 10); rightButton.classList.toggle('vis', currentScroll < scrollableLength - 5); } // Debounced resize handler let resizeTimeout; $(window).on('resize', function() { clearTimeout(resizeTimeout); resizeTimeout = setTimeout(() => { $('.evo_elm_HCS').each(function() { updateButtonVisibility($(this), $(this).find('.evo_elm_HCS_in')); }); }, 100); }); BODY.find('.evo_elm_HCS').each( function(event){ $(this).evoContentSlider(); }); // dynamic select @4.8.2 BODY.on('click', '.evo_elm_dynamic_select_trig',function(e){ e.preventDefault(); const btn = $(this); const row = btn.closest('.evo_elm_dynamic_select'); const list = btn.find('.evoelm_ds_list'); row.toggleClass('open'); btn.toggleClass('open'); if (btn.hasClass('open')) { const options = btn.siblings('div').data('d'); let html = `
`; $.each(options, (index, value) => { html += `${value}`; }); html += '
'; btn.append(html); } else { list.remove(); } }); $(document).click(function(event){ if( !$(event.target).closest('.evo_elm_dynamic_select').length){ const openBox = BODY.find('.evo_elm_dynamic_select.open'); openBox.removeClass('open').find('button').removeClass('open'); openBox.find('.evoelm_ds_list').remove(); } }); // item clicked from the list BODY.on('click','.evoelm_ds_list_item',function(event){ const item = $(this); const box = item.closest('.evo_elm_dynamic_select'); const value = item.data('index'); // update focus item name box.find('.evoelm_ds_current').html( item.html() ); // set new value to input box.find('input').val( value ); // plug for others BODY.trigger('evoelm_dynamic_select_clicked', [ item, value, box ]); box.removeClass('open'); box.find('button').removeClass('open'); item.parent().remove(); }); // Image Select @added 4.9 @updated: 5.0.3 var file_frame; var __img_index; var __img_obj; var __img_box; var __img_type; BODY.on('click','.evolm_img_select_trig',function(event) { event.preventDefault(); //console.log('ef'); const $trigger = $(this); const __img_obj = $(this); const $row = $trigger.closest('.evo_elm_row'); const __img_box = __img_obj.closest('.evo_metafield_image'); const __img_actions = __img_obj.closest('.evolm_img_actions'); const __img_type = __img_box.hasClass('multi')? 'multi': 'single'; const uploaderId = $row.data('id'); if( __img_type == 'single' && __img_box.hasClass('has_img') ) return; if( __img_type == 'multi'){ __img_index = __img_obj.data('index'); // remove image if( __img_obj.hasClass('on')){ __img_obj.css('background-image', '').removeClass('on'); __img_obj.find('input').val( '' ); return; } } // Reset file_frame to avoid stale state if (file_frame) { file_frame.close(); file_frame = null; } // Get user_id (0 for non-logged-in users) var user_id = __img_actions.data('userid') ? parseInt(__img_actions.data('userid')) : 0; var library_args = { type: 'image' }; if (user_id > 0) { library_args.author = user_id; } //console.log(library_args); // Create the media frame file_frame = wp.media.frames.downloadable_file = wp.media({ title: 'Choose an Image', button: {text: 'Use Image'}, multiple: false, library: library_args, }); // Attache unique ID if( uploaderId != '' || uploaderId !== undefined){ //console.log(uploaderId); file_frame.uploaderId = uploaderId; } // When an image is selected, run a callback. file_frame.on( 'select', function() { var selection = file_frame.state().get('selection'); //console.log('Selection:', selection.toJSON()); if (selection.length > 0) { var attachment = selection.first().toJSON(); //console.log('Selected attachment:', attachment); if (__img_type == 'single') { __img_box.addClass('has_img'); __img_box.find('input.evo_meta_img').val(attachment.id); __img_box.find('.evoelm_img_holder').css('background-image', 'url(' + attachment.url + ')'); //console.log('Single image updated:', __img_box.find('.evoelm_img_holder').css('background-image')); } else { __img_obj.css('background-image', 'url(' + attachment.url + ')').addClass('on'); __img_obj.find('input').val(attachment.id); //console.log('Multi image updated:', __img_obj.css('background-image')); } } else { console.log('No image selected'); } }); // Handle errors file_frame.on('error', function(error) { console.error('Media Uploader Error:', error); alert('Error: ' + error.message); }); // Finally, open the modal. file_frame.open(); }); // remove image BODY.on('click','.evoel_img_remove_trig',function(){ const field = $(this).closest('.evo_metafield_image'); if( !(field.hasClass('has_img') ) ) return; field.removeClass('has_img'); field.find('input').val(''); field.find('button').addClass('chooseimg'); field.find('.evoelm_img_holder').css('background-image', '' ); }); // plus minus changer @updated 4.9 $('body').on('click','.evo_plusminus_change', function(event){ // only run on frontend if( evo_general_params.cal.is_admin ) return; OBJ = $(this); QTY = parseInt(OBJ.siblings('input').val()); MAX = OBJ.siblings('input').data('max'); if(!MAX) MAX = OBJ.siblings('input').attr('max'); NEWQTY = (OBJ.hasClass('plu'))? QTY+1: QTY-1; NEWQTY =(NEWQTY <= 0)? 0: NEWQTY; // can not go below 1 if( NEWQTY == 0 && OBJ.hasClass('min') ){ return; } NEWQTY = (MAX!='' && NEWQTY > MAX)? MAX: NEWQTY; if( isNaN( NEWQTY ) ) NEWQTY = 0; OBJ.siblings('input').val(NEWQTY).attr('value',NEWQTY); if( QTY != NEWQTY) $('body').trigger('evo_plusminus_changed',[NEWQTY, MAX, OBJ]); if(NEWQTY == MAX){ PLU = OBJ.parent().find('b.plu'); if(!PLU.hasClass('reached')) PLU.addClass('reached'); if(QTY == MAX) $('body').trigger('evo_plusminus_max_reached',[NEWQTY, MAX, OBJ]); }else{ OBJ.parent().find('b.plu').removeClass('reached'); } }); // CAL BODY Listeners function evo_cal_body_listeners(){ BODY.evo_cal_lb_listeners(); const EVO_Listeners = { E: { B: $('body') }, init(){ const { B } = this.E; // FAQ toggle B.on('click.evoCal', '.evo_faq_toggle', (e) => this.handle_faq_toggle(e)); // General AJAX trigger B.on('click.evoCal', '.evo_trig_ajax', (e) => this.handle_general_ajax(e)); // Event anywhere lightbox trigger B.on('click.evoCal', '.eventon_anywhere.evoajax', (e) => this.handle_event_anywhere(e)); // No events button click B.on('click.evoCal', '.evo_no_events_btn', (e) => this.handle_no_events_btn(e)); // Month switch arrows B.on('click.evoCal', '.evcal_arrows', (e) => this.handle_month_switch(e)); // Show more events B.on('click.evoCal', '.evoShow_more_events', (e) => this.handle_show_more_events(e)); // Refresh event top (placeholder) B.on('runajax_refresh_eventtop.evoCal', (e, OBJ, nonce) => this.handle_refresh_eventtop(e, OBJ, nonce)); // Event card slide down complete 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)); // Jumper month/year switch B.on('calendar_month_changed.evoCal', (e, CAL) => this.handle_calendar_month_changed(e, CAL)); // Go to today button B.on('click.evoCal', '.evo-gototoday-btn', (e) => this.handle_gototoday_btn(e)); // Refresh now calendar B.on('runajax_refresh_now_cal.evoCal', (e, OBJ, nonce) => this.handle_refresh_now_cal(e, OBJ, nonce)); // Calendar header buttons this.handle_cal_head_interactions(); B.on('show_cal_head_btn.evoCal', (e, obj) => this.handle_show_cal_head_btn(e, obj)); B.on('hide_cal_head_btn.evoCal', (e, obj) => this.handle_hide_cal_head_btn(e, obj)); // Tile box style 3 click B.on('click.evoCal', '.ajde_evcal_calendar.boxstyle3 .eventon_list_event', (e) => this.handle_tile_box_click(e)); // Event card opening B.on('click.evoCal', '.eventon_list_event .desc_trig', (e) => this.handle_desc_trig(e)); }, // Toggles FAQ answer visibility and updates icon handle_faq_toggle(e) { const toggle = $(e.currentTarget); const answer = toggle.next('.evo_faq_answer'); const icon = toggle.find('i.fa'); answer.toggle(); icon.toggleClass('fa-plus fa-minus'); }, // Triggers general AJAX request with data from the clicked element handle_general_ajax(e) { const obj = $(e.target); let ajax_data = obj.data(); $(document).data('evo_data', ajax_data); this.E.B.trigger('evo_before_trig_ajax', [obj]); const new_ajax_data = $(document).data('evo_data'); new_ajax_data['nn'] = the_ajax_script.postnonce; $.ajax({ beforeSend: () => { this.E.B.trigger('evo_beforesend_trig_ajax', [obj, new_ajax_data]); }, type: 'POST', url: get_ajax_url('eventon_gen_trig_ajax'), data: new_ajax_data, dataType: 'json', success: (return_data) => { this.E.B.trigger('evo_success_trig_ajax', [obj, new_ajax_data, return_data]); }, complete: () => { this.E.B.trigger('evo_complete_trig_ajax', [obj, new_ajax_data]); } }); }, // Triggers lightbox for event anywhere links handle_event_anywhere(e) { e.preventDefault(); const obj = $(e.currentTarget); const data = obj.data('sc'); if (data.ev_uxval == '4') return; data['evortl'] = 'no'; if ('id' in data) data['event_id'] = data.id; data['ux_val'] = '3a'; data['ajax_eventtop_show_content'] = false; obj.evo_cal_lightbox_trigger(data, obj, false); }, // Handles click on no events button handle_no_events_btn(e) { this.E.B.trigger('click_on_no_event_btn', [$(e.currentTarget)]); }, // Switches calendar month on arrow click handle_month_switch(e) { e.preventDefault(); const CAL = $(e.currentTarget).closest('.ajde_evcal_calendar'); let dir = $(e.currentTarget).hasClass('evcal_btn_prev') ? 'prev' : 'next'; const cal_id = CAL.attr('id'); if (CAL.hasClass('evortl')) { dir = dir == 'next' ? 'prev' : 'next'; } if ($(e.currentTarget).closest('.evo_footer_nav').length > 0) { const BOX = $(e.currentTarget).closest('.evo_footer_nav'); const offset = BOX.offset(); const scrolltop = $(window).scrollTop(); const viewport_top = offset.top - scrolltop; CAL.addClass('nav_from_foot').data('viewport_top', viewport_top); } run_cal_ajax(cal_id, dir, 'switchmonth'); }, // Shows more events in the calendar list handle_show_more_events(e) { const CAL = $(e.currentTarget).closest('.ajde_evcal_calendar'); const SC = CAL.evo_shortcode_data(); const OBJ = $(e.currentTarget); if (SC.show_limit_redir !== '') { window.location = SC.show_limit_redir; return false; } if (SC.show_limit_ajax == 'yes') { const CURRENT_PAGED = parseInt(SC.show_limit_paged); CAL.evo_update_cal_sc({ F: 'show_limit_paged', V: CURRENT_PAGED + 1 }); run_cal_ajax(CAL.attr('id'), 'none', 'paged'); } else { const event_count = parseInt(SC.event_count); const eventList = OBJ.parent(); const allEvents = eventList.find('.eventon_list_event').length; const currentShowing = eventList.find('.eventon_list_event:visible').length; for (let x = 1; x <= event_count; x++) { const inde = currentShowing + x - 1; eventList.find(`.eventon_list_event:eq(${inde})`).slideDown(); } if (allEvents >= currentShowing && allEvents <= (currentShowing + event_count)) { OBJ.fadeOut(); } } }, // Placeholder for refreshing event top handle_refresh_eventtop(e, OBJ, nonce) {}, // Processes event card interactions after slide down handle_slidedown_complete(e, event_id, obj, is_slide_down) { if (!is_slide_down) return; setTimeout(() => { const OO = obj.closest('.eventon_list_event'); evo_cal_eventcard_interactions(OO, true); }, 300); }, // Updates jumper UI when calendar month changes handle_calendar_month_changed(e, CAL) { const SC = CAL.evo_shortcode_data(); const B = CAL.find('.evo-gototoday-btn'); const O = CAL.find('.evo_j_container'); O.find('.evo_j_months a').removeClass('set'); O.find(`.evo_j_months a[data-val="${SC.fixed_month}"]`).addClass('set'); O.find('.evo_j_years a').removeClass('set'); O.find(`.evo_j_years a[data-val="${SC.fixed_year}"]`).addClass('set'); if (SC.fixed_month != B.data('mo') || SC.fixed_year != B.data('yr')) { this.E.B.trigger('show_cal_head_btn', [B]); } else { this.E.B.trigger('hide_cal_head_btn', [B]); } }, // Navigates to today’s date on calendar handle_gototoday_btn(e) { const obj = $(e.currentTarget); const CAL = obj.closest('.ajde_evcal_calendar'); const calid = CAL.attr('id'); CAL.evo_update_cal_sc({ F: 'fixed_month', V: obj.data('mo') }); CAL.evo_update_cal_sc({ F: 'fixed_year', V: obj.data('yr') }); run_cal_ajax(calid, 'none', 'today'); this.E.B.trigger('hide_cal_head_btn', [obj]); }, // Refreshes now calendar via AJAX handle_refresh_now_cal(e, OBJ, nonce) { const section = OBJ.closest('.evo_eventon_live_now_section'); const CAL = section.find('.ajde_evcal_calendar').eq(0); const dataA = { nonce: evo_general_params.n, other: OBJ.data(), SC: CAL.evo_shortcode_data() }; $.ajax({ beforeSend: () => { section.addClass('evoloading'); }, type: 'POST', url: get_ajax_url('eventon_refresh_now_cal'), data: dataA, dataType: 'json', success: (data) => { if (data.status == 'good') { section.html(data.html); this.E.B.trigger('evo_refresh_designated_elm', [OBJ, 'evo_vir_data']); } }, complete: () => { section.removeClass('evoloading'); this.E.B.find('.evo_countdowner').each(function() { $(this).evo_countdown(); }); } }); }, // Toggles visibility of calendar header buttons handle_cal_head_interactions() { const { B } = this.E; B.on('click.evoCal', '.cal_head_btn', (e) => { const obj = $(e.currentTarget); if (obj.hasClass('vis')) { this.E.B.trigger('hide_cal_head_btn', [obj]); } else { this.E.B.trigger('show_cal_head_btn', [obj]); } }); // when a header button is clicked B.on('evo_cal_header_btn_clicked',function(event, O, CAL){ var SC = CAL.evo_shortcode_data(); // if search is open on init > return if( evo_general_params.cal.search_openoninit ) return; if( O.hasClass('evo-search')){ if( O.hasClass('vis')){ CAL.find('.evo_search_bar').show(1, function(){ $(this).find('input').focus(); }); }else{ CAL.find('.evo_search_bar').hide(); } } // hide the search if( O.hasClass('evo-sort-btn') || O.hasClass('evo-filter-btn')){ CAL.find('.evo_search_bar').hide(); } }); }, // Shows calendar header button handle_show_cal_head_btn(e, obj) { if (!obj.hasClass('evo-gototoday-btn')) { obj.siblings(':not(.evo-gototoday-btn)').removeClass('show vis'); } obj.addClass('show vis'); const CAL = obj.closest('.ajde_evcal_calendar'); this.E.B.trigger('evo_cal_header_btn_clicked', [obj, CAL, 'show']); }, // Hides calendar header button handle_hide_cal_head_btn(e, obj) { const CAL = obj.closest('.ajde_evcal_calendar'); obj.removeClass('show vis'); this.E.B.trigger('evo_cal_header_btn_clicked', [obj, CAL, 'hide']); }, // Triggers desc_trig click for tile box style 3 handle_tile_box_click(e) { e.preventDefault(); e.stopPropagation(); $(e.currentTarget).find('.desc_trig').trigger('click'); }, // Handles event card opening with various user interactions handle_desc_trig(e) { e.preventDefault(); const $this = $(e.currentTarget); const $eventBox = $this.closest('.eventon_list_event'); const $cal = $this.closest('.evo_lightbox').data('cal_id') ? $('#' + $this.closest('.evo_lightbox').data('cal_id')) : $this.closest('.ajde_evcal_calendar'); const SC = $cal.evo_shortcode_data(); const ux_val = $cal.evo_cal_event_get_uxval(SC, $this); const event_id = $eventBox.data('event_id'); const exlk = $this.data('exlk'); const isSingleEventBox = $this.closest('.eventon_single_event').length > 0 && $cal.find('.evo-data').data('exturl'); const actions = { '3': () => this.open_lightbox($this, $cal, SC, event_id, $eventBox, ux_val), '3a': () => this.open_lightbox($this, $cal, SC, event_id, $eventBox, ux_val), '4': () => this.open_url($this, $this.attr('href') || $this.parent().siblings('.evo_event_schema').find('a').attr('href'), '_self'), '4a': () => this.open_url($this, $this.attr('href') || $this.parent().siblings('.evo_event_schema').find('a').attr('href'), '_blank'), '2': () => this.handle_external_link($this, isSingleEventBox), 'X': () => false, 'none': () => false, 'default': () => exlk === '1' ? this.handle_external_link($this, isSingleEventBox) : this.slide_down_event_card($this, $eventBox, $cal, SC, event_id) }; return (actions[ux_val] || actions['default'])(); }, // Opens lightbox for event content open_lightbox($trigger, $cal, SC, event_id, $eventBox, ux_val) { const repeat_interval = parseInt($eventBox.data('ri')) || 0; const etttc_class = $cal.attr('class').split(' ').find(cls => cls.startsWith('etttc_')) || ''; const new_SC_data = { ...SC, repeat_interval, event_id, ux_val, evortl: $trigger.closest('.eventon_events_list').hasClass('evortl') ? 'yes' : 'no', ajax_eventtop_show_content: true, additional_class: etttc_class }; $cal.evo_cal_lightbox_trigger(new_SC_data, $trigger, $cal); return false; }, // Opens a URL in specified target open_url($this, url, target) { target = $this.attr('target') === '_blank' ? '_blank' : target; if (url) window.open(url, target); return target === '_blank'; }, // Handles external link navigation handle_external_link($trigger, isSingleEventBox) { if (isSingleEventBox) return false; const url = $trigger.attr('href'); if (url) { window.open(url, $trigger.attr('target') === '_blank' ? '_blank' : '_self'); } return !!url; }, // Slides down event card and loads map if present slide_down_event_card($trigger, $eventBox, $cal, SC, event_id) { const $content = $eventBox.find('.event_description'); const isOpen = $content.hasClass('open'); if (SC.accord === 'yes') { $cal.find('.eventon_list_event').removeClass('open'); $cal.find('.event_description').slideUp().removeClass('open'); } $eventBox.toggleClass('open', !isOpen); $content[isOpen ? 'slideUp' : 'slideDown']().toggleClass('open', !isOpen); if ($eventBox.find('.evo_metarow_gmap').length) { $eventBox.find('.evo_metarow_gmap').evo_load_gmap({ trigger_point: 'slideDownCard' }); } if ($trigger.data('runjs')) { this.E.B.trigger('evo_load_single_event_content', [event_id, $trigger]); } this.E.B.trigger('evo_slidedown_eventcard_complete', [event_id, $trigger, !isOpen]); return false; } } EVO_Listeners.init(); } // Global Calendar Listeners and Interactions function EVO_Interactions(){ const interactions_class = { E:{ B: $('body')}, run(){ const { B } = this.E; this.evoLightboxEnd(); this.evocardNavTrig(); this.evoMapExpandTrig(); this.handle_lightbox_processed(); this.handle_calendar_interactions(); this.handle_global_listners(); this.handle_tabs(); this.handle_aria_population(); }, handle_aria_population() { const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'; const gen = () => Array.from({length:9},()=>chars[Math.floor(Math.random()*62)]).join(''); const used = new Set(); $('.evo_aria_ready').each(function() { const $label = $(this); let $unique_label = $label.text().trim(); const $i = $label.siblings('.evo_aria_ready_match').first(); if (!$i.length) return; //$label.removeClass('evo_aria_ready'); let id; do { id = gen(); } while (used.has(id)); used.add(id); $unique_label = $unique_label.replace(/\[[^\]]*\]/, '['+id+']'); $label.html( $unique_label ); $i.attr('aria-label', $unique_label ); $(this).attr('for', id); $i.attr('id', id).removeAttr('aria-label'); }); }, evoLightboxEnd() { this.E.B.on('evolightbox_end', (event, LB, CAL) => { setTimeout(() => { LB.find('.eventon_list_event').each(function() { evo_cal_eventcard_interactions($(this), true); }); _evo_run_eventcard_map_load(); LB.evo_cal_localize_time(); this.handle_aria_population(); }, 1000); }); // eventcard lightbox event navigation @version 4.9.2 this.E.B.on('evolightbox_end', (e, LB, CAL, OO) => { if (!evo_general_params.cal.lbnav) return; if (evo_general_params.cal.lbnav === 'no') return; if (OO === undefined || !('other_data' in OO)) return; const event = $(OO.other_data.obj).closest('.event'); const calId = (CAL ? CAL.attr('id') : ''); const buttons = [ { dir: 'prev', icon: 'left', sibling: event.prev('.event') }, { dir: 'next', icon: 'right', sibling: event.next('.event') } ].filter(b => b.sibling.length) .map(b => `
`).join(''); LB.find('.evolb_box').append(buttons); setTimeout(() => LB.find('.evocard_nav_trig').addClass('show'), 500); }); }, evocardNavTrig(){ this.E.B.on('click','.evocard_nav_trig',function(e){ e.preventDefault(); const $el = $(e.currentTarget); const CAL = $('#' + $el.data('cid')); const SC = CAL.evo_shortcode_data(); const eventId = $el.data('id').split('_')[1]; const newEvent = CAL.find(`#${$el.data('id')}`); const newEventTrigger = newEvent.find('.desc_trig'); const LB = $el.closest('.evo_lightbox'); LB.find('.evocard_nav_trig').fadeOut().addClass('old'); setTimeout(() => LB.find('.evocard_lb_navs').has('.old').remove(), 500); LB.evo_lightbox_show_open_animation({ animation_type: 'saving' }); const updatedSC = { ...SC, repeat_interval: parseInt(newEvent.data('ri')), ux_val: CAL.evo_cal_event_get_uxval(SC, newEventTrigger), event_id: eventId, ajax_eventtop_show_content: true, evortl: newEvent.find('.eventon_events_list').hasClass('evortl') ? 'yes' : 'no', additional_class: CAL.attr('class').match(/etttc_\w+/)?.[0] || '', }; const newLbClass = "evo_eventcard_"+eventId; LB.removeClass(LB.data('lbc')).addClass(newLbClass).data('lbc', newLbClass); setTimeout(() => CAL.evo_cal_lightbox_trigger(updatedSC, newEventTrigger, CAL, LB), 1000); }); }, evoMapExpandTrig(){ this.E.B.on('click','.evo_map_expand_trig',function(e){ e.preventDefault(); const $gmapDiv = $(this).closest('.evo_map').find('.evo_metarow_gmap'); const mapID = $gmapDiv.attr('id')+'_exp'; const $newDiv = $('
'); const locationAdd = $gmapDiv.data('address'); const locationName = $gmapDiv.data('name'); const extra = `
`; const $topDiv = `

${locationName}

${locationAdd}

`; const $botDiv = ``; // Copy only data attributes, not content $.each($gmapDiv.data(), function(key, value) { $newDiv.data(key, value).attr('data-'+key, value); }); const calID = $(this).closest('.ajde_evcal_calendar').attr('id'); $(this).evo_lightbox_open({ uid: 'evo_map_expand',calid: calID, lbdata:{ class:'evo_map_expand',content: $topDiv + $newDiv[0].outerHTML + $botDiv } }); }); }, handle_lightbox_processed(){ this.E.B.on('evo_lightbox_processed',function(e, OO, LB){ if( OO.uid == 'evo_map_expand'){ //console.log(OO); setTimeout(function(){ LB.find('.evo_lb_map').evo_load_gmap({ cal: $('body').find('#'+ OO.calid) }); }, 500); } }).on('evo_ajax_success_evo_open_eventcard_lightbox', function( e, OO, data, el){ //console.log(OO); setTimeout(function(){ LB.find('.evcal_gmaps').evo_load_gmap({ cal: $('body').find('#'+ OO.d.calid) }); }, 500); }); }, // Calendar handle_calendar_interactions(){ const { B } = this.E; B.find('.ajde_evcal_calendar').each( (index, calendar) => { const $calendar = $(calendar); const $SC = $calendar.evo_shortcode_data(); // Bubble tooltip for events in calendars with 'bub' class if ($calendar.hasClass('bub')) { $calendar.on('mouseover.evoCal', '.eventon_list_event', (e) => { const $event = $(e.currentTarget); const $list = $event.closest('.eventon_events_list'); const title = $event.find('.evoet_dayblock').data('bub'); const position = $event.position(); $list.append(`${title}`); const $bubble = $list.find('.evo_bub_box'); let left = position.left; let top = position.top - $bubble.height() - 30; // Adjust bubble position if it exceeds list width const listWidth = $list.width(); const totalWidth = position.left + $bubble.width() + $event.width(); if (totalWidth > listWidth) { left = position.left - $bubble.width() + $event.width() - 20; } $bubble.css({ top, left }).addClass('show'); }).on('mouseout.evoCal', '.eventon_list_event', (e) => { $(e.currentTarget).closest('.eventon_events_list').find('.evo_bub_box').remove(); }); } // Jumper button toggle $calendar.on('click.evoCal', '.evo-jumper-btn', (e) => { const $this = $(e.currentTarget); $this.closest('.calendar_header').find('.evo_j_container').toggle(); $this.toggleClass('vis'); }); // select a new time from jumper $calendar.on('click','.evo_j_dates a',function(){ var val = $(this).attr('data-val'), type = $(this).parent().parent().attr('data-val'), CAL = $calendar, SC = CAL.evo_shortcode_data(); if(type=='m'){ // change month CAL.evo_update_cal_sc({F:'fixed_month', V: val }); }else{ CAL.evo_update_cal_sc({F:'fixed_year', V: val }); } run_cal_ajax( CAL.attr('id') ,'none','jumper'); // hide month jumper if not set to leave expanded if(SC.expj =='no') container.delay(2000).slideUp(); }); // view switcher $calendar.on('click', '.evo_vSW',function(){ const O = elm = $(this); var DATA = O.data('d'); if(O.hasClass('focusX')) return; CAL = $calendar; // remove other additions from other views CAL.find('.evoADDS').hide().delay(200).queue(function(){ $(this).remove(); }); var SC = $SC; const cal_tz = CAL.evo_get_global({S1:'cal_def',S2:'cal_tz'}); var reload_cal_data = false; // Create date object _M1 = moment().set({'year': SC.fixed_year, 'month': ( SC.fixed_month -1 ), 'date':SC.fixed_day}).tz( cal_tz ); _M1.set('date',1).startOf('date'); _start = _M1.unix(); _M1.endOf('month').endOf('date'); // move to end of month _end = _M1.unix(); // DEP var DD = new Date(SC.fixed_year,SC.fixed_month -1 , SC.fixed_day, 0,0,0 ); DD.setUTCHours(0); DD.setUTCFullYear( SC.fixed_year ); DD.setUTCMonth( SC.fixed_month -1 ); DD.setUTCDate( SC.fixed_day ); // switch to normal O.siblings('.evo_vSW').removeClass('focusX select'); O.addClass('focusX select'); CAL.find('.evo-viewswitcher-btn em').html( O.html() ); O.closest('.evo_cal_view_switcher').removeClass('show'); // ux_val for specific cal if( DATA && 'ux_val' in DATA) CAL.evo_update_cal_sc({F:'ux_val', V: DATA.ux_val }); // calendar class toggling O.siblings('.evo_vSW').each(function(){ var _d = $(this).data('d'); if( _d && 'c' in _d ) CAL.removeClass( _d['c'] ); // remove other cls }); if( DATA && 'c' in DATA) CAL.addClass( DATA.c ); // process date times block CAL.find('.evoet_dayblock span').hide(); CAL.find('.evoet_dayblock span.evo_start').show(); CAL.find('.evoet_dayblock span.evo_end').show(); CAL.find('.evoet_dayblock span.evo_end.only_time').hide(); // if current date range is not a month load those unix if( SC.focus_start_date_range != _start && SC.focus_end_date_range != _end ){ reload_cal_data = true; CAL.evo_update_cal_sc({F:'focus_start_date_range',V: _start }); CAL.evo_update_cal_sc({F:'focus_end_date_range', V: _end }); } // treating events list based on dif preferences-- vals el_visibility = hide_events, show_events if( 'el_visibility' in DATA){ el_visibility = DATA.el_visibility; if( el_visibility =='show_events') CAL.find('.eventon_list_event').show(); if( el_visibility =='hide_events') CAL.find('.eventon_list_event').hide(); if( el_visibility =='hide_list') CAL.find('#evcal_list').addClass('evo_hide').hide(); if( el_visibility =='show_all'){ CAL.find('#evcal_list').removeClass('evo_hide').show(); CAL.find('.eventon_list_event').show(); } } CAL.evo_update_cal_sc({F:'calendar_type', V: 'default'}); B.trigger('evo_vSW_clicked_before_ajax', [ O, CAL, DD, reload_cal_data ]); // run ajax to load new events in the range if( reload_cal_data ){ B.trigger('evo_run_cal_ajax',[CAL.attr('id'),'none','filering']); }else{ B.trigger('evo_vSW_clicked_noajax', [ O, CAL ]); // @s4.6 } B.trigger('evo_vSW_clicked', [ O, CAL, DD, reload_cal_data]); // switching to and from tiles view if( elm.hasClass('evoti')){ CAL.find('.eventon_list_event').each(function(){ color = $(this).data('colr'); $(this).find('a.desc_trig').css({'background-color': color}); }); CAL.addClass('color').removeClass('sev').data('oC', 'sev'); }else{ if( CAL.hasClass('esty_0') || CAL.hasClass('esty_4') ){ CAL.removeClass('color'); CAL.find('.eventon_list_event').each(function(){ $(this).find('a.desc_trig').css({'background-color': ''}); }); if( CAL.data('oC') !== undefined) CAL.addClass( CAL.data('oC')); } } }); }); }, // Global handle_global_listners(){ const { B } = this.E; B.on('evo_trigger_cal_reset', function(event, cal){ cal_resets( cal ); }); B.on('click', function(event) { BODY.trigger('clicked_on_page', [ $(event.target) , event ]); }); B.find('.evo_location_map').each(function(){ $(this).evo_load_gmap(); }); // on event card lightbox load -> taxonomy details @since 4.2 u4.6 B.on('evo_ajax_complete_eventon_get_tax_card_content', function(event, OO){ LB = B.find('.'+ OO.lightbox_key); setTimeout(function(){ // run map load if( LB.find('.evo_trigger_map').length > 0 ){ map_id_elm = LB.find('.evo_trigger_map'); map_id_elm.evo_load_gmap(); console.log('Loading Event Map'); } // run countdown timers LB.find('.evo_countdowner').each(function(){ $(this).evo_countdown(); }); // run calendar filtering function CAL = LB.find('.ajde_evcal_calendar'); if (CAL.length) CAL.evo_cal_filtering(); },500); }); }, // Tab view switcher handle_tabs(){ const { B } = this.E; B.find('.evo_tab_container').each(function(){ $(this).find('.evo_tab_section').each(function(){ if(!$(this).hasClass('visible')){ $(this).addClass('hidden'); } }); }); B.on('click','.evo_tab',function(){ tab = $(this).data('tab'); tabsection = $(this).closest('.evo_tab_view').find('.evo_tab_container'); tabsection.find('.evo_tab_section').addClass('hidden').removeClass('visible'); tabsection.find('.'+tab).addClass('visible').removeClass('hidden'); $(this).parent().find('.evo_tab').removeClass('selected'); $(this).addClass('selected'); B.trigger('evo_tabs_newtab_selected',[ $(this)]); }); }, }; interactions_class.run(); } // EVO ON const EVO = { E:{ B: $('body') }, init(){ this.Tools.init(); this.Interactions.init(); this.Virtual_Events.init(); this.Search.init(); this.Elements_Interactions.init(); // Global event listeners (e.g., heartbeat, resize) this.setupGlobalListeners(); this.schedule_view(); this.ajax_triggers(); }, setupGlobalListeners(){ const { B } = this.E; // Heartbeat hooks $(document).on('heartbeat-send', (e, data) => { if (this.BODY && this.BODY.find('.evo_refresh_on_heartbeat').length) { this.BODY.find('.evo_refresh_on_heartbeat').each((i, el) => { if ($(el).closest('.eventon_list_event').length <= 0) return; if ($(el).data('refresh') !== undefined && !$(el).data('refresh')) return; data['evo_data'] = EVO.Tools.build_elm_refresh_data($(el)); }); } }); $(document).on('heartbeat-tick', (e, data) => { EVO.Tools.evo_apply_refresh_content(data); }); // Other global events B.on('evo_refresh_elements', (e, send_data) => { if (!send_data || send_data.length <= 0) return; send_data['nonce'] = evo_general_params.n; $.ajax({ beforeSend: () => { if ('evo_data' in send_data) { $.each(send_data.evo_data, (ekey, eclasses) => { $.each(eclasses, (classnm, val) => { if (val && 'loader' in val && val.loader && 'loader_class' in val) { $('#event_' + ekey).find('.' + val.loader_class).addClass('evoloading'); } }); }); } }, type: 'POST', url: EVO.Tools.get_ajax_url('eventon_refresh_elm'), data: send_data, dataType: 'json', success: (data) => { if (data.status === 'good') { EVO.Tools.evo_apply_refresh_content(data); } }, complete: () => { if ('evo_data' in send_data) { $.each(send_data.evo_data, (ekey, eclasses) => { $.each(eclasses, (classnm, val) => { if (val && 'loader' in val && val.loader && 'loader_class' in val) { $('#event_' + ekey).find('.' + val.loader_class).removeClass('evoloading'); } }); }); } } }); }); // refresh the closest hearbeat run parent B.on('evo_refresh_designated_elm', function(ee, elm, elm_class, extra_data){ //get closest event object const event = $(elm).closest('.eventon_list_event'); if (!event || event.find('.' + elm_class).length === 0) return; const refresh_elm = event.find('.' + elm_class); let send_data = {}; send_data['evo_data'] = EVO.Tools.build_elm_refresh_data( refresh_elm , extra_data); B.trigger('evo_refresh_elements',[ send_data ]); }); }, schedule_view(){ EVO.E.B.on('evo_init_ajax_success_each_cal',function(event, data, i, v, CAL){ $('body').find('.ajde_evcal_calendar.evoSV').each(function(){ EVO.Tools.evosv_populate( $(this) ); }); }) .on('evo_main_ajax_before_fnc', function(event, CAL, ajaxtype, data_arg){ SC = data_arg.shortcode; if( SC.calendar_type == 'schedule'){ CAL.find('#evcal_list').removeClass('evo_hide').show(); } }).on('evo_main_ajax_success', function(event, CAL, ajaxtype, data , data_arg){ SC = data_arg.shortcode; if( SC.calendar_type == 'schedule'){ CAL.find('#evcal_list').addClass('evo_hide').hide(); } }).on('evo_main_ajax_complete', function(event, CAL, ajaxtype, data , data_arg){ SC = data_arg.shortcode; if( SC.calendar_type == 'schedule'){ EVO.Tools.evosv_populate( CAL ); } }) // view switching .on('evo_vSW_clicked_before_ajax',function(event, O, CAL, DD, reload_cal_data){ if(!(O.hasClass('evosv'))) return; var SC = CAL.evo_shortcode_data(); CAL.evo_update_cal_sc({F:'calendar_type', V: 'schedule'}); CAL.evo_update_cal_sc({F:'fixed_day', V: SC.fixed_day }); }) .on('evo_vSW_clicked',function(event, OBJ, CAL, DD, reload_cal_data){ if(!(OBJ.hasClass('evosv'))) return; CAL.evo_update_cal_sc({F:'calendar_type', V: 'schedule'}); }) .on('evo_vSW_clicked_noajax',function(event, OBJ, CAL, DD, reload_cal_data){ if(!(OBJ.hasClass('evosv'))) return; EVO.Tools.evosv_populate( CAL ); }) // open events from schedule view .on('click','.evosv_items',function(event, elm){ O = $(this); CAL = O.closest('.ajde_evcal_calendar'); var e_cl = 'event_'+O.data('id'); const clicked_event_uxval = O.data('uxval'); // if event is set to slide down .. switch to lightbox if( clicked_event_uxval == '1' ){ CAL.find('.'+e_cl).find('.desc_trig').data('ux_val', 3); } CAL.find('.'+e_cl).find('.desc_trig').trigger('click'); }); }, Interactions:{ init(){ const { B } = EVO.E; }, }, Search:{ init(){ const { B } = EVO.E; B.on('click.evoSearch', '.evo_do_search', (event) => { EVO.Tools.do_search_box($(event.target)); }); B.on('keypress.evoSearch', '.evo_search_field', (ev) => { if ((ev.keyCode || ev.which) === 13) { EVO.Tools.do_search_box($(ev.target).siblings('.evo_do_search')); } }); B.on('keypress.evoSearch', '.evo_search_bar_in_field', (ev) => { if ((ev.keyCode || ev.which) === 13) { EVO.Tools.search_within_calendar( $(ev.target) ); } }); B.on('click', '.evosr_search_clear_btn', function(e) { e.preventDefault(); EVO.Tools.reset_search($(this).siblings('input'), $(this)); }); B.on('evo_main_ajax_complete', function(e, CAL, ajaxtype, responseJSON, data) { if (ajaxtype === 'search' && data.shortcode['s']) { CAL.find('.evosr_search_clear_btn').addClass('show'); } }); // Handle search input interactions B.on({ 'click': function() { EVO.Tools.search_within_calendar($(this).siblings('input')); }, 'keyup': function(e) { const $input = $(this), $clearBtn = $input.siblings('.evosr_search_clear_btn'); if (e.which === 27) { e.preventDefault(); EVO.Tools.reset_search($input, $clearBtn); return; } $clearBtn.toggleClass('show', $input.val().trim() !== ''); } }, '.evo_search_bar_in_field, .evosr_search_btn'); } }, Elements_Interactions:{ init(){ const { B } = EVO.E; // increase and reduce quantity B.on('click','.evo_qty_change', function(event){ var OBJ = $(this); var QTY = oQTY = parseInt(OBJ.siblings('em').html()); var MAX = OBJ.siblings('input').attr('max'); var BOX = OBJ.closest('.evo_purchase_box'); var pfd = BOX.find('.evo_purchase_box_data').data('pfd'); (OBJ.hasClass('plu'))? QTY++: QTY--; QTY =(QTY==0)? 1: QTY; QTY = (MAX!='' && QTY > MAX)? MAX: QTY; // new total price var sin_price = OBJ.parent().data('p'); new_price = sin_price * QTY; new_price = EVO.Tools.get_format_price( new_price, pfd); BOX.find('.total .value').html( new_price); OBJ.siblings('em').html(QTY); OBJ.siblings('input').val(QTY); B.trigger('evo_qty_changed',[QTY,oQTY, new_price,OBJ ]); }); } }, Virtual_Events:{ init(){ const { B } = EVO.E; this.jitsi(); // record sign in - virtual plus // @+3.1 B.on('click','.evo_vir_signin_btn',function(){ let extra_data = {}; extra_data['signin'] = 'y'; extra_data['refresh_main'] = 'y'; extra_data['loader'] = true; extra_data['loader_class'] = 'evo_vir_main_content'; B.trigger('evo_refresh_designated_elm',[ $(this) , 'evo_vir_data',extra_data]); }); }, jitsi( mod_refresh){ const { B } = EVO.E; const domain = 'meet.jit.si'; let api = []; B.find('.evo-jitsi-wrapper').each(function(index, element) { const O = $(this); const eventO = O.closest('.eventon_list_event'); if( mod_refresh != '' && mod_refresh == 'mod_refresh_no' && O.hasClass('mod')) return; const roomName = $(element).data('n'); const width = $(element).data('width'); const height = $(element).data('height'); const audioMuted = $(element).data('audiomute'); const videoMuted = $(element).data('videomute'); const screenSharing = $(element).data('screen'); const myOverwrite = { 'TOOLBAR_BUTTONS': $(element).data('d'), "DEFAULT_BACKGROUND": '#494a4e', 'MOBILE_APP_PROMO': false, 'SETTINGS_SECTIONS':['devices', 'language', 'profile', 'calendar'], }; const options = { roomName, width, height, parentNode: element, configOverwrite: { startWithAudioMuted: audioMuted, startWithVideoMuted: videoMuted, startScreenSharing: false, disableInviteFunctions: false, }, interfaceConfigOverwrite: myOverwrite, }; api = new JitsiMeetExternalAPI(domain, options); api.addEventListener('participantRoleChanged', function(event){ // record moderator joined if (event.role === "moderator"){ this._record_moderator_join( 'yes', eventO.data('event_id'), eventO.data('ri')); } const pp = jQuery(element).data('p'); if (event.role === "moderator" && pp != '__') { ppp = pp.replace('_',''); api.executeCommand('password', ppp); } }); // moderator leave api.addEventListener('videoConferenceLeft', function(event){ if( eventO.find('.evo_vir_data').data('ismod') =='y'){ this._record_moderator_join( 'no', eventO.data('event_id'), eventO.data('ri')); O.siblings('.evo_vir_mod_left').show(); O.hide(); } }); }); }, // record moderator logins for jitsi _record_moderator_join(joined, eid, ri){ var data_arg = { 'action': 'eventon_record_mod_joined', 'eid': eid, 'ri': ri, 'joined': joined, 'nonce': evo_general_params.n, }; $.ajax({ beforeSend: function(){}, type: 'POST',url: ajax_url, data: data_arg,dataType:'json', success:function(data){ } }); } }, ajax_triggers(){ const { B } = EVO.E; B.on('evo_before_trig_ajax',function(event, obj){ if(!obj.hasClass('evo_trig_vir_end')) return; var new_ajax_data = $(document).data( 'evo_data'); new_ajax_data['fnct'] = 'mark_event_ended'; $(document).data( 'evo_data', new_ajax_data ); }) .on('evo_beforesend_trig_ajax',function( event, obj, new_ajax_data){ if(!obj.hasClass('evo_trig_vir_end')) return; obj.closest('.evo_vir_mod_box').addClass('evoloading'); }) .on('evo_success_trig_ajax',function( event, obj, new_ajax_data, return_data){ if(!obj.hasClass('evo_trig_vir_end')) return; // if virtual events were marked as ended if(!('_vir_ended' in return_data)) return; // refresh the virtual main content extra_data = {}; extra_data['refresh_main'] = 'yy'; extra_data['loader'] = true; extra_data['loader_class'] = 'evo_vir_main_content'; //console.log(extra_data); B.trigger('evo_refresh_designated_elm',[ obj , 'evo_vir_data',extra_data]); }) .on('evo_complete_trig_ajax',function( event, obj, new_ajax_data){ if(!obj.hasClass('evo_trig_vir_end')) return; obj.closest('.evo_vir_mod_box').removeClass('evoloading'); }); }, Tools:{ init() { const { B } = EVO.E; // Bind AJAX listeners once B.on('evo_ajax_beforesend_evo_get_search_results', (event, OO, el) => { $(el).find('.evo_search_results_count').hide(); $(el).addClass('searching'); }).on('evo_ajax_complete_evo_get_search_results', (event, OO, el) => { $(el).removeClass('searching'); }).on('evo_ajax_success_evo_get_search_results', (event, OO, data, el) => { $(el).find('.evo_search_results').html(data.content); if ($(el).find('.no_events').length === 0) { const Events = $(el).find('.eventon_list_event').length; $(el).find('.evo_search_results_count span').html(Events); $(el).find('.evo_search_results_count').fadeIn(); } }); }, do_search_box( OBJ ){ const { B } = EVO.E; const SearchVal = OBJ.closest('.evosr_search_box').find('input').val(); const Evosearch = OBJ.closest('.EVOSR_section'); OBJ.closest('.evo_search_entry').find('.evosr_msg').toggle( !SearchVal ); if (!SearchVal) return false; var ajax_results = Evosearch.evo_admin_get_ajax({ 'ajaxdata': { //action: 'eventon_search_evo_events', search: SearchVal, shortcode: Evosearch.find('span.data').data('sc'), nonce: evo_general_params.n }, ajax_type:'endpoint', ajax_action:'eventon_search_evo_events', uid:'evo_get_search_results', end: 'client', }); }, // Search function search_within_calendar($input) { const ev_cal = $input.closest('.ajde_evcal_calendar'); ev_cal.evo_update_cal_sc({ F: 'show_limit_paged', V: '1' }); ev_cal.evo_update_cal_sc({ F: 's', V: $input.val() }); run_cal_ajax(ev_cal.attr('id'), 'none', 'search'); return false; }, // Reset search function reset_search($input, $clearBtn) { const ev_cal = $input.closest('.ajde_evcal_calendar'); ev_cal.evo_update_cal_sc({ F: 's', V: '' }); run_cal_ajax(ev_cal.attr('id'), 'none', 'search'); $input.val(''); $clearBtn.removeClass('show'); }, // Total formating get_format_price(price, data){ // price format data PF = data; totalPrice = price.toFixed(PF.numDec); // number of decimals htmlPrice = totalPrice.toString().replace('.', PF.decSep); if(PF.thoSep.length > 0) { htmlPrice = EVO.Tools._addThousandSep(htmlPrice, PF.thoSep); } if(PF.curPos == 'right') { htmlPrice = htmlPrice + PF.currencySymbol; } else if(PF.curPos == 'right_space') { htmlPrice = htmlPrice + ' ' + PF.currencySymbol; } else if(PF.curPos == 'left_space') { htmlPrice = PF.currencySymbol + ' ' + htmlPrice; } else { htmlPrice = PF.currencySymbol + htmlPrice; } return htmlPrice; }, _addThousandSep(n, thoSep){ var rx= /(\d+)(\d{3})/; return String(n).replace(/^\d+/, function(w){ while(rx.test(w)){ w= w.replace(rx, '$1'+thoSep+'$2'); } return w; }); }, // apply refresh event element content with matching data that is sent evo_apply_refresh_content(data){ if (!('evo_data' in data)) return; $.each(data.evo_data, function(eclass, boxes){ // if event exists in the page var vir_data_vals = false; if( 'evo_vir_data' in boxes) vir_data_vals = boxes.evo_vir_data.data; B.find('.'+eclass).each(function(){ const event_elm = $(this); $.each(boxes, (boxclass, boxdata) => { if (!boxdata.html || event_elm.find('.' + boxclass).length <= 0) return; event_elm.find('.' + boxclass).html(boxdata.html); }); // only for virtual event update if( vir_data_vals ){ // reload jitsi for main content - if main content html is sent it will refresh if( vir_data_vals && ('vir_type' in vir_data_vals) && vir_data_vals.vir_type == 'jitsi' && ('evo_vir_main_content' in boxes) && ('html' in boxes.evo_vir_main_content) && boxes.evo_vir_main_content.html != '' ){ EVO.Virtual_Events.jitsi('mod_refresh_no'); } // update data for sent object $.each(boxes, function(boxclass, boxdata){ if( boxdata.data == '' || boxdata.data === undefined) return; // for jitsi if mod left --> force refresh main if( boxdata !== undefined && vir_data_vals.vir_type == 'jitsi' && vir_data_vals.mod_joined =='left'){ // force refresh main boxdata.data['refresh_main'] = 'yy'; } event_elm.find( '.'+boxclass ).data( boxdata.data ); }); } }); }); }, // get refresh data for specified elem build_elm_refresh_data( elm , extra_data){ const dataObj = {}; const event = $(elm).closest('.eventon_list_event'); const ekey = event.data('event_id') + '_' + parseInt(event.data('ri')); dataObj[ekey] = {}; const key2 = elm.data('key'); dataObj[ekey][key2] = elm.data(); if (elm.data('check_awaitmod')) { if ((event.find('.evo_vir_jitsi_waitmod').length > 0)) dataObj[ekey][key2]['refresh_main'] = 'yy'; if (event.find('.evo-jitsi-wrapper').length > 0 && dataObj[ekey][key2]['mod_joined'] !== 'left') dataObj[ekey][key2]['refresh_main'] = ''; } if (extra_data && extra_data !== undefined) { $.each(extra_data, (index, val) => { dataObj[ekey][key2][index] = val; }); } return dataObj; }, // populate the schedule view data @4.5.8 evosv_populate(CAL){ //console.log('s'); var SC = CAL.evo_shortcode_data(); OD = CAL.evo_get_OD(); // calendar other data var cal_events = CAL.find('.eventon_list_event'); days_in_month = CAL.evo_day_in_month({M: SC.fixed_month, Y: SC.fixed_year}); time_format = CAL.evo_get_global({S1:'cal_def',S2:'wp_time_format'}); // text strings _txt = CAL.evo_get_txt({V:'no_events'}); _txt2 = CAL.evo_get_txt({V:'until'}); _txt3 = CAL.evo_get_txt({V:'from'}); _txt4 = CAL.evo_get_txt({V:'all_day'}); CAL.find('#evcal_list').addClass('evo_hide'); var has_events = false; var html = ''; var template_data = {}; var processed_ids = {}; // Set initial date - date values var SU = parseInt( SC.focus_start_date_range); var EU = ''; var M = moment.unix( SU ).tz( OD.cal_tz ); // go through each day in month for(var x=1; x<= days_in_month; x++){ var month_name = CAL.evo_get_dms_vals({ V: (M.get('month') +1), type:'m3'}); var day_name = CAL.evo_get_dms_vals({ V: M.day(), type:'d3'}); // set event unix into moment SU = M.unix(); M.endOf('day'); EU = M.unix(); M.startOf('day'); // run through each event and get events in this date var events = {}; cal_events.each(function(index, elm){ ED = $(elm).evo_cal_get_basic_eventdata(); if( !ED) return; processed_ids[ED.uID] = ED.uID; ESU = ED.unix_start; EEU = ED.unix_end; // check for date range var inrange = CAL.evo_is_in_range({ 'S': SU, 'E': EU, 'start': ESU, 'end':EEU }); if(!inrange) return; // skip if no in range has_events = true; // event time relative to calendar tz m = moment.unix( ESU ).tz( OD.cal_tz ); me = moment.unix( end ).tz( OD.cal_tz ); var all_day = $(elm).find('a.desc_trig').hasClass('allday') ? true: false; // get event time correct for all day if( all_day ){ ED['t'] = _txt4; }else{ if( ESU <= SU ){ if( EEU >= EU) ED['t'] = _txt4; if( EEU < EU ) ED['t'] = _txt2+' ' + me.format( time_format); }else if(ESU > SU){ if( EEU >= EU) ED['t'] = _txt3+' '+ m.format( time_format); if( EEU < EU ) ED['t'] = m.format( time_format) +' - '+ me.format( time_format); } } // hide end time if( ED.hide_et == 'y') ED['t'] = m.format( time_format); events[index] = ED; }); // if there are events in this date if( events && Object.keys(events).length > 0){ template_data[ x ] = {}; template_data[ x ]['date'] = '' + M.get('date')+' '+ month_name+' '+ day_name; template_data[ x ]['d'] = M.format('YYYY-M-D'); template_data[ x ]['SU'] = SU; template_data[ x ]['events'] = {} $.each(events, function(index, item){ location_data = organizer_data = event_tags = ''; // location if( SC.show_location == 'yes' && 'location' in item){ location_data = "
" +item.location+"
"; } // organizer if( SC.show_organizer == 'yes' && 'organizer' in item){ organizer_data = "
" +item.organizer+"
"; } // event tags if( SC.show_tags == 'yes' && 'event_tags' in item){ event_tags = "
"; $.each( item.event_tags, function(index, val){ event_tags += "" + val+""; }); event_tags += "
"; } template_data[ x ]['events'][ item.uID ] = { 'time': item.t, 'ux_val': item.ux_val, 'title': item.event_title, 'color':item.hex_color, 'tag': event_tags, 'loc': location_data, 'org': organizer_data, 'i': item } }); } // next date M.add(1, 'd'); } var html_ = "
"; // if no events if( !has_events){ no_event_content = CAL.evo_get_global({S1: 'html', S2:'no_events'}); html_ += "
"+no_event_content+"
"; }else{ html_ += CAL.evo_HB_process_template({ TD:template_data, part:'evosv_grid' }); } html_ += '
'; if( CAL.find('.evosv_grid').length > 0){ CAL.find('.evosv_grid').replaceWith( html_ ); }else{ ELM = CAL.find('#eventon_loadbar_section'); ELM.after( html_ ); } }, // call ajax url get_ajax_url(action){ var ajax_type = 'endpoint'; if('ajax_method' in evo_general_params ) ajax_type = evo_general_params.ajax_method; return EVO.E.B.evo_get_ajax_url({a:action, type: ajax_type }); }, } }; EVO.init(); // Other // RESET general calendar -- @U 2.8.9 function cal_resets(calOBJ){ calargs = $(calOBJ).find('.cal_arguments'); calargs.attr('data-show_limit_paged', 1 ); calOBJ.evo_update_cal_sc({ F:'show_limit_paged',V:'1' }); } // layout view changer - legacy if($('body').find('.evo_layout_changer').length>0){ // menu button focus adjust $('body').find('.evo_layout_changer').each(function(item){ if($(this).parent().hasClass('boxy')){ $(this).find('.fa-th-large').addClass('on'); }else{ $(this).find('.fa-reorder').addClass('on'); } }); // interaction $('.evo_layout_changer').on('click','i',function(){ const CAL = $(this).closest('.ajde_evcal_calendar'); TYPE = $(this).data('type'); $(this).parent().find('i').removeClass('on'); $(this).addClass('on'); //console.log(TYPE); if(TYPE=='row'){ CAL.attr('class','ajde_evcal_calendar'); // set tile colors CAL.find('.eventon_list_event').each(function(){ $(this).find('.desc_trig').css('background-color', ''); $(this).find('.desc_trig_outter').css('background-color', ''); }); }else if(TYPE =='bar'){ CAL.attr('class','ajde_evcal_calendar box_2 sev cev'); // set tile colors CAL.find('.eventon_list_event').each(function(){ const color = $(this).data('colr'); $(this).find('.desc_trig').css('background-color', color); }); }else{ // set tile colors CAL.find('.eventon_list_event').each(function(){ const color = $(this).data('colr'); $(this).find('.desc_trig_outter').css('background-color', color); }); CAL.attr('class','ajde_evcal_calendar boxy boxstyle0 box_2'); } }); } // SORTING & FILTERING // Sorting // update calendar based on the sorting selection $('body').on('click', '.evo_sort_option',function(){ O = $(this); var CAL = O.closest('.ajde_evcal_calendar'); var sort_by = O.data('val'); // update new values everywhere CAL.evo_update_cal_sc({F:'sort_by',V:sort_by}); O.parent().find('p').removeClass('select'); O.addClass('select'); run_cal_ajax(CAL.attr('id'),'none','sorting'); }); // close filter menus on click outside BODY.on('clicked_on_page',function( ev, obj, ee){ // hide filter menu when clicked outside 4.6.2 if( !(obj.hasClass('eventon_filter')) && !(obj.hasClass('filtering_set_val')) && !(obj.hasClass('evo_filter_val')) && !(obj.hasClass('evofp_filter_search_i')) && obj.parents('.filtering_set_val').length == 0 ){ //console.log(obj); BODY.find('.evo_filter_menu').html(''); BODY.find('.evo_filter_tax_box.vis').removeClass('vis'); } }); // Filtering $.fn.evo_cal_filtering = function(O){ var opt = $.extend({}, O); var el = this; // cal const sortbox = el.find('.eventon_sorting_section'), filter_container = sortbox.find('.evo_filter_container_in'), filter_line = sortbox.find('.eventon_filter_line'), fmenu = sortbox.find('.evo_filter_menu'), all_cal_filter_data = el.evo_get_filter_data(), SC = el.evo_shortcode_data(); var tterms = []; var init = function(){ if( SC == '' || SC === null ) return; if( el.hasClass('filters_go')) return; el.addClass('filters_go'); draw_filter_bar(); filter_actions(); run_filter_nav_check(); } // draw the filter bar var draw_filter_bar = function(){ //console.log(all_cal_filter_data); BODY.trigger('evo_filter_before_draw', [ el ]); html = ''; $.each( all_cal_filter_data , function( index, value){ // skip fast filter items if( SC && 'fast_filter' in SC && SC.fast_filter == 'yes' && SC.ff_tax != '' && SC.ff_tax !== undefined ){ __t = SC.ff_tax.split(','); if( __t.includes( index ) ) return; } html += "
"; html += "
"; html += "

"+ value.__name +"

"; html += "
"; html += "
"; }); filter_line.html( html ); BODY.trigger('evo_filter_drawn', [ el ]); } // filter all actions var filter_actions = function(){ el.off('click', '.evo-filter-btn'); // show/hide filter bar el.on('click','.evo-filter-btn',function(){ const CAL = $(this).closest('.ajde_evcal_calendar'); BODY.trigger('evo_filter_btn_trig', [ CAL , O ]); if( CAL.hasClass('fp_lb')) return; // PLUG 4.6.4 if( !( $(this).hasClass('vis') ) ){ sortbox.addClass('vis'); run_filter_nav_check(); }else{ sortbox.removeClass('vis'); } }); // close filter when other sibling buttons clicked 4.6.4 BODY.on('evo_cal_header_btn_clicked',function(event, O){ if( O.hasClass('evo-sort-btn') || O.hasClass('evo-search') ){ const CAL = O.closest('.ajde_evcal_calendar'); CAL.find('.eventon_sorting_section').removeClass('vis'); } }); // show hide menu el.on('click','.filtering_set_val',function(){ O = $(this); const filterbox = O.closest('.evo_filter_tax_box'), filter_tax = filterbox.data('tax'); selected_terms = el.evo_cal_get_filter_sub_data( filter_tax , 'tterms' ); // close sort menu el.find('.eventon_sort_line').hide(); // hide already opened menus if( filterbox.hasClass('vis')){ filterbox.removeClass('vis'); close_filter_menu(); return; } if( fmenu.data('tax') == filter_tax ){ filterbox.removeClass('vis'); close_filter_menu(); return; }else{ sortbox.find('.filtering_set_val').removeClass('show'); sortbox.find('.evo_filter_tax_box').removeClass('vis'); filterbox.addClass('vis'); } // build the filter menu from data var filter_item_data = all_cal_filter_data[ filter_tax ].__list; //console.log(all_cal_filter_data); //console.log(selected_terms); var __menu_html = '
'; // Sort the filter list alphabetically var sorted_data = Object.values(filter_item_data); sorted_data.sort(function(a, b) { // sort by term label (val[1]), ignore case return a[1].toLowerCase().localeCompare(b[1].toLowerCase()); }); // each term $.each(sorted_data, function (index, val){ var icon_html = ''; var _class = filter_tax+'_'+ val[0] + ' '+ val[0]; // parent or child term if( val[3] !== undefined && val[3] != '' && val[3] == 'n') _class += ' np'; //console.log(selected_terms); // select or not if( selected_terms == 'all' ) _class += ' select'; if( selected_terms.includes( val[0] ) ) _class += ' select'; // icon if( val[2] != '' && val[2] !== undefined ){ _class += ' has_icon'; icon_html = val[2]; } // tax term color var _tax_color = ''; if( val[4] != '' && val[4] !== undefined ){ _tax_color = `style='background-color:#${val[4]};'`; } __menu_html += `

${icon_html} ${val[1]}

` }); __menu_html += "
"; // 4.6.4 BODY.trigger('evo_filter_menu_html_ready', [ el , __menu_html , O , filterbox, filter_tax]); if( el.hasClass('fp_side')) return; // PLUG // set new menu with correct location const scrolled_width = filter_container.scrollLeft(); fmenu.html( __menu_html ); // pluggable BODY.trigger('evo_filter_menu_built', [ el , fmenu , filter_tax ]); __left_margin = filterbox.position().left + 10 - scrolled_width; __menu_width = fmenu.find('.evo_filter_inside').width(); __cal_left_margin = el.position().left; //console.log(__cal_left_margin + ' '+ __left_margin +' '+ __menu_width + ' '+ $(window).width()); if( __left_margin + __menu_width + __cal_left_margin > $(window).width() ){ if( ( __left_margin + __menu_width ) > el.width() ){ new_left = el.width() - __menu_width - 10; }else{ new_left = ( el.width() - __menu_width ) / 2; } fmenu.css('left', new_left ); }else{ fmenu.css('left', __left_margin); } }); // select a static filter menu item el.on('click','p.filtering_static_val',function(){ BODY.trigger('evo_filter_static_clicked', [ el , $(this) ]); }); // select terms in filter menu el.on('click','p.evo_filter_val',function (){ var O = $(this); const filter_menuIN = O.closest('.evo_filter_inside'), filter_tax = filter_menuIN.data('tax'), filterbox = sortbox.find('.evo_filter_tax_box.'+ filter_tax), all_terms_obj = filter_menuIN.find('p'), new_term_id = O.data('id'), old_terms = el.evo_cal_get_filter_sub_data( filter_tax , 'terms' ) ; var tterms = el.evo_cal_get_filter_sub_data( filter_tax , 'nterms' ); var new_terms = []; // select filter type if( SC.filter_type == 'select' ){ // all value if( new_term_id == 'all' ){ if( O.hasClass('select') ){ all_terms_obj.removeClass('select'); }else{ all_terms_obj.addClass('select'); new_terms.push('all'); } }else{ // unselect all value filter_menuIN.find('p.all').removeClass('select'); O.toggleClass('select'); var unselect_count = 0; all_terms_obj.each(function(){ if( $(this).hasClass('select')){ new_terms.push( $(this).data('id') ) }else{ // not select if(!$(this).hasClass('all')) unselect_count++; } }); // all selected if(unselect_count == 0){ filter_menuIN.find('p.all').addClass('select'); new_terms.push('all'); } // if all field is not visible; nothing selected = all if( new_terms.length == 0 && O.parent().find('p.all').length == 0) new_terms.push('all'); } // non select type }else{ // all value if( new_term_id == 'all' ){ // if all is already selected if( O.hasClass('select')){ new_terms.push('NOT-all'); all_terms_obj.removeClass('select'); }else{ all_terms_obj.addClass('select'); new_terms.push( new_term_id ); } }else{ all_terms_obj.removeClass('select'); O.addClass('select'); new_terms.push( new_term_id ); } update_filter_data( filter_tax, new_terms ); // process selection @4.6.6 if( tterms == new_terms ){ close_filter_menu(); }else{ cal_resets( el ); el.evo_update_sc_from_filters(); run_cal_ajax( el.attr('id') ,'none','filering'); close_filter_menu(); O.removeClass('show'); } close_filter_menu(); // mark hide of menu filterbox.removeClass('vis'); } // show and hide apply filter button // if new terms = temp terms if( compare_terms( new_terms, tterms) ){ filterbox.removeClass('chg'); }else{ filterbox.addClass('chg'); } if( compare_terms( old_terms, new_terms) ){ filterbox.removeClass('set'); }else{ filterbox.addClass('set'); } // changed filters var chg_filters = sortbox.find('.evo_filter_tax_box.chg').length; var set_count = sortbox.find('.evo_filter_tax_box.set').length; if( SC.filter_type == 'select' ) ( chg_filters > 0 ) ? show_apply_btns() : hide_apply_btns(); // Filter highlighted indicator if( !( el.hasClass('flhi') ) ){ const filter_btn = el.find('.evo-filter-btn'); if( set_count > 0){ filter_btn.find('em').html( set_count ).addClass('o'); }else{ filter_btn.find('em').removeClass('o'); } } update_filter_data( filter_tax, new_terms , 'tterms'); run_filter_nav_check(); }); // apply filters button el.on('click','.evo_filter_submit',function(){ el.evo_filters_update_from_temp( filter_line, el ); cal_resets( el); close_filter_menu(); // hide filter menu // update filter item button sortbox.find('.filtering_set_val').removeClass('show'); el.evo_update_sc_from_filters(); // update shortcode from filters run_cal_ajax( el.attr('id'),'none','filering'); run_filter_nav_check(); }); // clear filters el.on('click','.evo_filter_clear',function(){ el.find('.evo_filter_tax_box').each(function(){ const O = $(this), tax = O.data('tax'), terms = O.data('terms'); O.removeClass('set'); O.find('.filtering_set_val').removeClass('set show'); el.find('.evo-filter-btn em').removeClass('o'); close_filter_menu(); }); // update all filters with default/ onload values @4.6.1 $.each( all_cal_filter_data, function( tax, tdata){ update_filter_data( tax, tdata.terms ); } ); hide_apply_btns(); // hide filter action buttons // update shortcode and run new ajax for events el.evo_update_sc_from_filters(); run_cal_ajax( el.attr('id'),'none','filering'); run_filter_nav_check(); }); // click on filter navs el.on('click','.evo_filter_nav',function(){ O = $(this); _filter_bar = O.closest('.evo_filter_bar'); _filter_container = _filter_bar.find('.evo_filter_container_in'); _filter_line_width = _filter_bar.find('.eventon_filter_line')[0].scrollWidth; _filter_container_width = parseInt( _filter_container.width() ) + 0; _leftPos = _filter_container.scrollLeft(); _scrollable_legth = _filter_line_width - _filter_container_width; const scroll_length = _filter_container_width /2; // move right if( O.hasClass('evo_filter_r') ){ _filter_container.animate({scrollLeft:_leftPos + scroll_length},200); _filter_bar.find('.evo_filter_l').addClass('vis'); // move left }else{ sleft = (_leftPos - scroll_length < scroll_length) ? 0 : _leftPos - scroll_length; _filter_container.animate({scrollLeft: sleft },200); } close_filter_menu(); setTimeout(function(){ var _leftPos = _filter_container.scrollLeft(); //console.log(_leftPos); if( _leftPos < 10){ _filter_bar.find('.evo_filter_l').removeClass('vis'); _filter_bar.find('.evo_filter_r').addClass('vis'); } if( _leftPos > ( _scrollable_legth - 5 ) ){ _filter_bar.find('.evo_filter_r').removeClass('vis'); } },200); }); // on window size change $(window).on('resize',function(){ run_filter_nav_check(); }); } var compare_terms = function(a, b){ if (a === b) return true; if (a == null || b == null) return false; if (a.length !== b.length) return false; for (var i = 0; i < a.length; ++i) { if (a[i] !== b[i]) return false; } return true; } var close_filter_menu = function(){ fmenu.html('').data('tax',''); } var show_apply_btns = function(){ sortbox.find('.evo_filter_aply_btns').addClass('vis'); } var hide_apply_btns = function(){ sortbox.find('.evo_filter_aply_btns').removeClass('vis'); } var update_filter_data = function(tax, new_val, key){ el.evo_cal_update_filter_data( tax , new_val , key ); } // adjust and position filter nav buttons var run_filter_nav_check = function(){ $.each( el.find('.evo_filter_bar') , function(event){ _filter_bar = $(this); _filter_container = _filter_bar.find('.evo_filter_container_in'); _filter_line_width = _filter_bar.find('.eventon_filter_line')[0].scrollWidth; _filter_container_width = parseInt( _filter_container.width() ) + 3; var leftPos = _filter_container.scrollLeft(); //console.log(_filter_line_width +' '+ _filter_container_width +' '+leftPos); // filter line is not showing full if( _filter_line_width > _filter_container_width ){ // if some of filter line is hidden on right if( ( _filter_container_width + leftPos ) < _filter_line_width ) _filter_bar.find('.evo_filter_r').addClass('vis'); // if filter has been scrolled if( leftPos > 0 ){ _filter_bar.find('.evo_filter_l').addClass('vis'); }else{ _filter_bar.find('.evo_filter_r').addClass('vis'); } }else{ _filter_bar.find('.evo_filter_l').removeClass('vis'); _filter_bar.find('.evo_filter_r').removeClass('vis'); } }); //console.log(filter_line_width +' '+ filter_container_width +' '+leftPos); } init(); } // for each tax move tterms value to nterms / before sending ajax $.fn.evo_filters_update_from_temp = function(filter_line, cal){ // move temp term values into new terms filter_line.find('.evo_filter_tax_box').each(function(){ var taxonomy = $(this).data('tax'); const tterms = cal.evo_cal_get_filter_sub_data( taxonomy , 'tterms'); cal.evo_cal_update_filter_data( taxonomy , tterms, 'nterms'); $(this).removeClass('chg'); }); } // PRIMARY hook to get content // MAIN AJAX for calendar events v2.8 function run_cal_ajax( cal_id, direction, ajaxtype){ // identify the calendar and its elements. var CAL = ev_cal = $('#'+cal_id); // check if ajax post content should run for this calendar or not if(CAL.attr('data-runajax')!='0'){ const EVENTS_LIST = CAL.find('.eventon_events_list'); const $showMoreBtn = EVENTS_LIST.find('.evoShow_more_events'); // category filtering for the calendar var cat = CAL.find('.evcal_sort').attr('cat'); // reset paged values for switching months if(ajaxtype=='switchmonth'){ CAL.find('.cal_arguments').attr('data-show_limit_paged',1); CAL.evo_update_cal_sc({F:'show_limit_paged', V: '1'}); } SC = CAL.evo_cal_functions({action:'load_shortcodes'}); $('body').trigger('evo_main_ajax_before', [CAL, ajaxtype, direction, SC]); var data_arg = { //action: 'eventon_get_events', direction: direction, shortcode: SC, ajaxtype: ajaxtype, nonce: evo_general_params.n, nonceX: evo_general_params.nonce }; $.ajax({ // preload actions beforeSend: function(xhr){ xhr.setRequestHeader('X-WP-Nonce', evo_general_params.nonce ); CAL.addClass('evo_loading'); // paged -- adding events to end if(ajaxtype == 'paged'){ const currentContent = $showMoreBtn.html(); $showMoreBtn.data('txt',currentContent); if( SC.tiles == 'yes'){ $showMoreBtn.addClass('evoloading'); $showMoreBtn.find('span').html(''); }else{ $showMoreBtn.find('span').addClass('evobtn_loader full'); } }else{ html = evo_general_params.html.preload_events; if( SC.tiles == 'yes') html = evo_general_params.html.preload_event_tiles; EVENTS_LIST.html( html ); //EVENTS_LIST.slideUp('fast'); } // maintain scrolltop location 4.6 if( CAL.hasClass('nav_from_foot')){ //scrolltop = (CAL.find('.evo_footer_nav').offset().top) - CAL.data('viewport_top'); scrolltop = CAL.offset().top; $('html, body').animate({ scrollTop: scrolltop },20); } $('body').trigger('evo_main_ajax_before_fnc',[CAL, ajaxtype, data_arg ]); //s4.6 }, type: 'POST', url: get_ajax_url('eventon_get_events'),data: data_arg,dataType:'json', success:function(data){ if(!data) return false; // paged calendar if(ajaxtype == 'paged'){ $showMoreBtn.remove(); EVENTS_LIST.find('.clear').remove(); EVENTS_LIST.append( data.html + "
"); // hide show more events if all events loaded var events_in_list = EVENTS_LIST.find('.eventon_list_event').length; if( 'total_events' in data && data.total_events == events_in_list){ $showMoreBtn.hide(); } // for month lists duplicate headers // @+2.8.1 var T = {}; EVENTS_LIST.find('.evcal_month_line').each(function(){ d = $(this).data('d'); if( T[d]) $(this).remove(); else T[d] = true; }); var T = {}; EVENTS_LIST.find('.sep_month_events').each(function(){ d = $(this).data('d'); if( T[d]){ var H = $(this).html(); EVENTS_LIST.find('.sep_month_events[data-d="'+d+'"]').append( H ); $(this).remove(); }else{T[d] = true;} }); }else{ EVENTS_LIST.html(data.html); } // update calendar data CAL.find('.evo_month_title').html( data.cal_month_title ); CAL.evo_cal_functions({action:'update_shortcodes',SC: data.SC}); CAL.evo_cal_functions({action:'update_json',json: data.json}); // run cal process code CAL.evo_calendar({ SC: data.SC, json: data.json }); $('body').trigger('calendar_month_changed',[CAL, data]); $('body').trigger('evo_main_ajax_success', [CAL, ajaxtype, data, data_arg]); },complete:function(data){ // show events list events if not set to hide on load if(! EVENTS_LIST.hasClass('evo_hide')) EVENTS_LIST.delay(300).slideDown('slow'); // maintain scrolltop location 4.6 if( CAL.hasClass('nav_from_foot')){ setTimeout(function(){ //scrolltop = (CAL.find('.evo_footer_nav').offset().top) - CAL.data('viewport_top'); scrolltop = CAL.offset().top; $('html, body').animate({ scrollTop: scrolltop },20); CAL.removeClass('nav_from_foot'); },302); } // pluggable $('body').trigger('evo_main_ajax_complete', [CAL, ajaxtype, data.responseJSON , data_arg]); CAL.removeClass('evo_loading'); } }); } } $('body').on('evo_run_cal_ajax',function(event,cal_id, direction, ajaxtype){ run_cal_ajax( cal_id, direction, ajaxtype); }); // deprecated bridge function for sortby value function ajax_post_content(sortby, cal_id, direction, ajaxtype){ run_cal_ajax( cal_id, direction, ajaxtype); } // SINGLE EVENTS // Loading single event json based content $('body').on('evo_load_single_event_content', function(event, eid, obj){ var ajaxdataa = {}; ajaxdataa['eid'] = eid; ajaxdataa['nonce'] = the_ajax_script.postnonce; // pass on other event values if(obj.data('j')){ $.each(obj.data('j'), function(index,val){ ajaxdataa[ index] = val; }); } $.ajax({ beforeSend: function(){ }, url: get_ajax_url('eventon_load_event_content'), data: ajaxdataa, dataType:'json', type: 'POST', success:function(data){ $('body').trigger('evo_single_event_content_loaded', [data, obj]); },complete:function(){ } }); }); if(BODY.evo_is_mobile()){ if($('body').find('.fb.evo_ss').length != 0){ $('body').find('.fb.evo_ss').each(function(){ obj = $(this); obj.attr({'href':'http://m.facebook.com/sharer.php?u='+obj.attr('data-url')}); }); } } // on single event page if($('body').find('.evo_sin_page').length>0){ $('.evo_sin_page').each(function(){ $('body').trigger('evo_load_single_event_content',[ $(this).data('eid'), $(this)]); $(this).find('.desc_trig ').attr({'data-ux_val':'none'}); }); } // Single events box // Click on single event box $('.eventon_single_event').on('click', '.evcal_list_a',function(event){ var obj = $(this); const $this = $(this); var CAL = obj.closest('.ajde_evcal_calendar'); var SC = CAL.evo_shortcode_data(); var uxVal = SC.ux_val; event.preventDefault(); // open in event page if(uxVal == 4){ var url = obj.parent().siblings('.evo_event_schema').find('[itemprop=url]').attr('href'); window.location.href= url; }else if(uxVal == '2'){ // External Link var url = SC.exturl; window.location.href= url; }else if(uxVal == '1'){ // Slide Down const $eventBox = $this.closest('.eventon_list_event'); const $content = $eventBox.find('.event_description'); const isOpen = $content.hasClass('open'); const B = $('body'); $eventBox.toggleClass('open', !isOpen); $content[isOpen ? 'slideUp' : 'slideDown']().toggleClass('open', !isOpen); if ($eventBox.find('.evo_metarow_gmap').length) { $eventBox.find('.evo_metarow_gmap').evo_load_gmap({ trigger_point: 'slideDownCard' }); } if ($trigger.data('runjs')) { B.trigger('evo_load_single_event_content', [event_id, $trigger]); } B.trigger('evo_slidedown_eventcard_complete', [event_id, $trigger, !isOpen]); return false; }else if(uxVal == 'X'){ // do not do anything return false; } }); // each single event box $('body').find('.eventon_single_event').each(function(){ var _this = $(this); var CAL = _this.closest('.ajde_evcal_calendar'); var SC = CAL.evo_shortcode_data(); var evObj = CAL.find('.eventon_list_event'); // show expanded eventCard if( SC.expanded =='yes'){ _this.find('.evcal_eventcard').show(); var idd = _this.find('.evcal_gmaps'); // close button _this.find('.evcal_close').parent().css({'padding-right':0}); _this.find('.evcal_close').hide(); //console.log(idd); var obj = _this.find('.desc_trig'); // Google Map _this.find('.evo_metarow_gmap').evo_load_gmap(); // mark as eventcard open @since 4.4 evObj.find('.event_description').addClass('open'); // open eventBox and lightbox }else if(SC.uxval =='3'){ var obj = _this.find('.desc_trig'); // remove other attr - that cause to redirect obj.removeAttr('data-exlk').attr({'data-ux_val':'3'}); } // show event excerpt var ev_excerpt = CAL.find('.event_excerpt').html(); if(ev_excerpt!='' && ev_excerpt!== undefined && SC.excerpt =='yes' ){ var appendation = '
'+ev_excerpt+'
' evObj.append(appendation); } // trigger support @since 4.4 var obj = evObj.find('.desc_trig'); var event_id = evObj.data('event_id'); $('body').trigger('evo_slidedown_eventcard_complete',[ event_id, obj]); }); // supportive // ajax url function @u 4.5.5 function get_ajax_url(action){ var ajax_type = 'endpoint'; if('ajax_method' in evo_general_params ) ajax_type = evo_general_params.ajax_method; return $('body').evo_get_ajax_url({a:action, type: ajax_type }); } // handlebar additions function handlebar_additional_arguments(){ Handlebars.registerHelper('ifE',function(v1, options){ return (v1 !== undefined && v1 != '' && v1) ? options.fn(this) : options.inverse(this); }); Handlebars.registerHelper('ifEQ',function(v1, v2, options){ return ( v1 == v2)? options.fn(this): options.inverse(this); }); Handlebars.registerHelper('ifNEQ',function(v1, v2, options){ return ( v1 != v2)? options.fn(this): options.inverse(this); }); Handlebars.registerHelper('BUStxt',function(V, options){ if( !( V in BUS.txt) ) return V; return BUS.txt[V]; }); Handlebars.registerHelper('GetDMnames',function(V, U, options){ return BUS.dms[U][ V ]; }); // get total of increments Handlebars.registerHelper('forAdds',function(count, add_val, options){ O = ''; for(x=1; x<= count; x++){ O += add_val; } return O; }); Handlebars.registerHelper('GetEvProp',function(EID, PROP, CALID){ EID = EID.split('-'); EV = $('#'+ CALID).find('.evo_cal_events').data('events'); var O = ''; $.each(EV, function(i,d){ if( d.ID == EID[0] && d.ri == EID[1]){ if( !(PROP in d.event_pmv)) return; O = d.event_pmv[PROP][0]; } }); return O; }); Handlebars.registerHelper('GetEvV',function(EID, PROP, CALID){ EID = EID.split('-'); EV = $('#'+ CALID).find('.evo_cal_events').data('events'); var O = ''; $.each(EV, function(i,d){ if( d.ID == EID[0] && d.ri == EID[1]){ O = d[PROP]; } }); return O; }); Handlebars.registerHelper('COUNT',function( V){ return Object.keys(V).length; }); Handlebars.registerHelper('CountlimitLess',function( AR, C,options){ var L= Object.keys(AR).length; return ( L < C)? options.inverse(this): options.fn(this); }); Handlebars.registerHelper('ifCOND',function(v1, operator, v2, options){ return checkCondition(v1, operator, v2) ? options.fn(this) : options.inverse(this); }); Handlebars.registerHelper('toJSON', function(obj) { return new Handlebars.SafeString(JSON.stringify(obj)); }); Handlebars.registerHelper('Cal_def_check',function(V, options){ if( BUS.cal_def && BUS.cal_def[V] ) return options.fn(this); return options.inverse(this); }); Handlebars.registerHelper('TypeCheck',function(V, options){ if( options.type == V ) return options.fn(this); return options.inverse(this); }); } function checkCondition(v1, operator, v2) { switch(operator) { case '==': return (v1 == v2); case '===': return (v1 === v2); case '!==': return (v1 !== v2); case '<': return (v1 < v2); case '<=': return (v1 <= v2); case '>': return (v1 > v2); case '>=': return (v1 >= v2); case '&&': return (v1 && v2); case '||': return (v1 || v2); default: return false; } } // DEPRECATING // LIGHTBOX // since 4.2 moving to functions // open lightbox @2.9 BODY.on('evo_open_lightbox',function(event, lb_class, content){ const LIGHTBOX = $('.evo_lightbox.'+lb_class).eq(0); // if already open if(LIGHTBOX.is("visible")===true) return false; if( content != ''){ LIGHTBOX.find('.evo_lightbox_body').html( content ); } BODY.trigger('evolightbox_show', [ lb_class ]); }); // click outside close LB BODY.on('clicked_on_page', function(event, obj, ev ){ if( obj.hasClass('evo_content_inin')){ closing_lightbox( obj.closest('.evo_lightbox') ); } }); // close popup BODY.on('click','.evolbclose', function(){ if( $(this).hasClass('evolb_close_btn')) return; LIGHTBOX = $(this).closest('.evo_lightbox'); closing_lightbox( LIGHTBOX ); }); // close with click outside popup box when pop is shown function closing_lightbox( lightboxELM){ if(! lightboxELM.hasClass('show')) return false; Close = (lightboxELM.parent().find('.evo_lightbox.show').length == 1)? true: false; lightboxELM.removeClass('show'); $('body').trigger('lightbox_before_event_closing', [lightboxELM]); setTimeout( function(){ lightboxELM.find('.evo_lightbox_body').html(''); if(Close){ $('body').removeClass('evo_overflow'); $('html').removeClass('evo_overflow'); } // trigger action to hook in at this stage $('body').trigger('lightbox_event_closing', [lightboxELM]); }, 100); } // when lightbox open triggered $('body').on('evolightbox_show',function(event, lb_class){ $('.evo_lightboxes').show(); $('body').addClass('evo_overflow'); $('html').addClass('evo_overflow'); $('body').trigger('evolightbox_opened',[ lb_class ]); }); });