1/* 2 * Javascript: EventON functions for all calendars 3 * @version: 4.8.2 4 */ 5(function($){ 6 7 // Basics 8 // Calendar function s 9 $.fn.evo_cal_functions = function(O){ 10 el = this; 11 switch(O.action){ 12 // load shortcodes inside calendar data 13 case 'load_shortcodes': 14 return el.find('.evo_cal_data').data('sc'); 15 break; 16 case 'update_json': 17 //console.log(O.json); 18 el.find('.evo_cal_events').data('events', O.json); 19 break; 20 case 'update_shortcodes': 21 //console.log(O.SC); 22 el.find('.evo_cal_data').data( 'sc', O.SC ); 23 break; 24 } 25 }; 26 27 // access page GLOBALS 28 $.fn.evo_get_global = function(opt){ 29 var defaults = { S1:'', S2:''}; 30 var OPT = $.extend({}, defaults, opt); 31 32 var BUS = $('#evo_global_data').data('d'); 33 34 if(!(OPT.S1 in BUS)) return false; 35 if(!(OPT.S2 in BUS[OPT.S1])) return false; 36 return BUS[OPT.S1][OPT.S2]; 37 } 38 $.fn.evo_get_txt = function(opt){ 39 var defaults = { V:''} 40 var OPT = $.extend({}, defaults, opt); 41 42 var BUS = $('#evo_global_data').data('d'); 43 //console.log(BUS); 44 if(!('txt' in BUS)) return false; 45 if(!(OPT.V in BUS.txt)) return false; 46 return BUS.txt[OPT.V]; 47 } 48 49 // get translated text strings from ajax loaded data @4.6.4 50 $.fn.evo_lang = function(text){ 51 var t = text.toLowerCase() 52 .replace(/ /g, "_") 53 .replace(/[^\w-]+/g, ""); 54 55 var BUS = $('#evo_global_data').data('d'); 56 57 if(!('txt' in BUS)) return text; 58 if(!(t in BUS.txt)) return text; 59 return BUS.txt[ t ]; 60 61 } 62 $.fn.evo_get_cal_def = function(opt){ 63 var defaults = { V:''} 64 var OPT = $.extend({}, defaults, opt); 65 66 var BUS = $('#evo_global_data').data('d'); 67 if(!('cal_def' in BUS)) return false; 68 if(!(OPT.V in BUS.cal_def)) return false; 69 return BUS.cal_def[OPT.V]; 70 } 71 72 // return dms translates values from global data 73 // added 4.0 74 $.fn.evo_get_dms_vals = function(opt){ 75 // type = d, d1,d3, m, m3 76 // V = 0-x 77 var defaults = { type:'d', V:''} 78 var OPT = $.extend({}, defaults, opt); 79 80 var BUS = $('#evo_global_data').data('d'); 81 if(!('dms' in BUS)) return false; 82 if(!(OPT.type in BUS.dms)) return false; 83 84 return BUS.dms[ OPT.type ][ OPT.V ]; 85 86 } 87 88 // GENERAL AJAX ACCESS @4.7.2 89 $.fn.evo_admin_get_ajax = function(opt){ 90 91 var el = $(this); 92 93 var OO = this.evo_process_ajax_params( opt ); 94 95 var _lbdata = OO.lbdata; 96 var _adata = OO.adata; 97 var _populate_id = OO._populate_id; 98 99 var ajax_url = el.evo_get_ajax_url({a: _adata.a, e: _adata.end, type: _adata.ajax_type}); 100 101 // for lightbox 102 var LB = false; 103 if( _lbdata.class != '') LB = $('body').find('.evo_lightbox.'+ _lbdata.class ); 104 105 //console.log( OO ); 106 107 // Run AJAX 108 $.ajax({ 109 beforeSend: function(){ 110 el.evo_perform_ajax_run_loader( OO, LB, 'start' ); 111 }, 112 type: 'POST', url: ajax_url, data: _adata.data, dataType:'json', 113 success:function(data){ 114 115 el.evo_perform_ajax_success( OO, data, LB ); 116 117 },complete:function(){ 118 el.evo_perform_ajax_run_loader( OO, LB, 'end' ); 119 120 } 121 }); 122 } 123 124 // submit forms via ligtbox 125 // @since 4.2.2 @updated 4.8 126 $.fn.evo_ajax_lightbox_form_submit = function(opt , formObj ){ 127 128 const el = this; 129 130 var OO = this.evo_process_ajax_params( opt ); 131 132 console.log(OO); 133 134 var _lbdata = OO.lbdata; 135 var _adata = OO.adata; 136 var _populate_id = OO._populate_id; 137 138 var form = this.closest('form'); 139 if( formObj !== undefined ) form = formObj; 140 141 // for lightbox 142 var LB = false; 143 if( _lbdata.class != '') LB = $('body').find('.evo_lightbox.'+ _lbdata.class ); 144 145 // reset LB message 146 if( LB) LB.evo_lightbox_hide_msg(); 147 148 var ajax_url = el.evo_get_ajax_url({a: _adata.a, e: _adata.end, type: _adata.ajax_type}); 149 150 // Add passed on data from ajax object @4.8.2 151 var extra_ajax_data = ('data' in _adata ) ? _adata.data : null; 152 153 // Submit form 154 form.ajaxSubmit({ 155 beforeSubmit: function(opt, xhr){ 156 el.evo_perform_ajax_run_loader( OO, LB, 'start' ); 157 }, 158 dataType: 'json', 159 url: ajax_url, type: 'POST', 160 data: extra_ajax_data, 161 success:function(data){ 162 el.evo_perform_ajax_success( OO, data, LB ); 163 }, 164 complete:function(){ 165 el.evo_perform_ajax_run_loader( OO, LB, 'end' ); 166 } 167 }); 168 } 169 170 // perform ajax functions / type = start/end 171 $.fn.evo_perform_ajax_run_loader = function( OO , LB, type ){ 172 var el = this; 173 var _lbdata = OO.lbdata; 174 var _adata = OO.adata; 175 176 //console.log(OO); 177 178 var customer_loader_elm = false;
179 var loader_btn_el = false; 180 181 if( _adata.loader_el !='') customer_loader_elm = _adata.loader_el; 182 if( 'loader_class' in _adata && _adata.loader_class != '') 183 customer_loader_elm = $('.' + _adata.loader_class); 184 if( _adata.loader_btn_el != '' && _adata.loader_btn_el !== undefined ) loader_btn_el = el; 185 186 var LB_loader = false; 187 if( LB && 'loader' in _lbdata && _lbdata.loader ) LB_loader = true; 188 189 if( type == 'start'){ 190 191 var trigger_id = ( 'uid' in OO && OO.uid != '' ) ? OO.uid : OO.ajax_action; // @4.8 192 $('body').trigger('evo_ajax_beforesend_' + trigger_id ,[ OO, el ]); 193 194 if( LB_loader ){ 195 LB.find('.ajde_popup_text').addClass( 'evoloading loading'); // legacy 196 LB.evo_lightbox_start_inloading(); 197 } 198 if( customer_loader_elm ) $( customer_loader_elm ).addClass('evoloading loading'); 199 if( loader_btn_el ) el.addClass('evobtn_loader'); // loader on button 200 }else{ 201 202 var trigger_id = ( 'uid' in OO && OO.uid != '' ) ? OO.uid : OO.ajax_action; // @4.8 203 204 $('body').trigger('evo_ajax_complete_' + trigger_id ,[ OO , el ]); 205 206 if( LB_loader ){ 207 LB.find('.ajde_popup_text').removeClass( 'evoloading loading'); 208 LB.evo_lightbox_stop_inloading(); 209 } 210 if( customer_loader_elm ) $( customer_loader_elm ).removeClass('evoloading loading'); 211 if( loader_btn_el ) el.removeClass('evobtn_loader'); // loader on button 212 213 214 } 215 216 return { 217 'l1': customer_loader_elm, 218 'l2':LB_loader 219 }; 220 } 221 222 $.fn.evo_perform_ajax_success = function ( OO, data, LB ){ 223 var el = this; 224 var _lbdata = OO.lbdata; 225 var _adata = OO.adata; 226 var _populate_id = OO._populate_id; 227 228 //console.log( OO); 229 230 // if inside lightbox 231 if( LB ){ 232 // show message 233 if( data && 'msg' in data && data.msg != '' ){ 234 LB.evo_lightbox_show_msg({'type': data.status, 235 'message':data.msg, 236 hide_lightbox: ( data.status == 'bad' ? false : _lbdata.hide ), 237 hide_message: _lbdata.hide_msg 238 }); 239 } 240 241 // populate lightbox 242 if( data && _lbdata.new_content && 'content' in data && data.content != '' ){ 243 // populate a specific dom element with content 244 if( _populate_id ){ 245 $('body').find('#'+_populate_id ).replaceWith( data.content ); 246 }else{ 247 LB.evo_lightbox_populate_content({content: data.content}); 248 } 249 } 250 251 }else{ 252 // populate content 253 if( data && _populate_id && 'content' in data && data.content != ''){ 254 $('body').find('#'+_populate_id ).html( data.content ); 255 } 256 } 257 258 // Show snackbar message 259 if( 'show_snackbar' in _adata && ('msg' in data) && data.msg != '' ) 260 el.evo_snackbar({message: data.msg}); 261 262 // populate content with matching DOM class names, will set new html @4.7.2 263 if( 'populate_dom_classes' in data){ 264 $.each( data.populate_dom_classes, function( domclass, content){ 265 $('body').find('.'+ domclass).html( content ); 266 } ); 267 } 268 269 // if ajax data pass dom content to be replaced with run through each and replace - @4.2.3 270 if( 'refresh_dom_content' in data ){ 271 $.each(data.refresh_dom_content, function(domid, content){ 272 $('body').find('#'+ domid).replaceWith( content); 273 }); 274 } 275 276 277 // for SP content @since 4.5.2 278 if(data && 'sp_content' in data){ 279 $("body").find('#evops_content').html( data.sp_content); 280 } 281 // SP footer content @since 4.5.2 282 if( data && 'sp_content_foot' in data){ 283 $("body").find('.evosp_foot').html( data.sp_content_foot); 284 } 285 // process trumbowyg editors 286 $('body').trigger('evo_elm_load_interactivity'); 287 288 289 // assign dynamic vals to DOM element 290 setTimeout(function(){ 291 if( 'evoelms' in data ){ 292 $.each( data.evoelms , function( uniqueid, elm_data ){ 293 294 $('body').find('.has_dynamic_vals').each(function(){ 295 296 if( $(this).attr('id') != uniqueid ) return; 297 var dynamic_elm = $(this); 298 299 $.each( elm_data , function( elm_key, elmv){ 300 dynamic_elm.data( elm_key, elmv ); 301 }); 302 }); 303 }); 304 } 305 },200); 306 307 308 //console.log(OO); 309 $('body').trigger('evo_ajax_success_' + OO.uid,[ OO, data , el]); 310 } 311 312 // Process ajax and lightbox values @4.7.2 313 $.fn.evo_process_ajax_params = function ( opt ){ 314 // defaults 315 var defz = { 316 'uid':'', 317 318 // @since 4.7.2 319 'adata':{}, // @4.7.2 include all ajax data in here, type (ajax,rest,endpoint),action/a, other data 320 'lbdata':{},// @4.7.2 lightbox data all in one place, class, title, size, padding 321 '_populate_id':'', // loading new content into matching elements outside of lightbox 322 323 // legacy values 324 'content':'',// passed on dynamic content 325 'content_id' :'',// id to get dynamic content from page 326 327 't':'', //title 328 'lbc':'',// * lightbox class - REQUIRED 329 'lbac':'',// ligthbox additional class 4.6 330 'lbsz':'',// lightbox size = mid small, s400, s500, s700, s800 331 'lightbox_loader': true, 332 'preload_temp_key': 'init', // 4.6 333 'load_new_content': true, // @since 4.3.5 334 'lb_padding': '', // @4.3.5 335 'load_new_content_id':'', 336 337 'ajax':'no',// use ajax to load content yes no
338 'ajax_url':'',// load content from ajax file 339 'end':'admin',// admin or client end 340 'ajax_action':'', // @4.4 pass on ajax endpoint action key 341 'a':'', 342 'ajax_type':'ajax', // @4.4 ajax type, ajax, rest or endpoint 343 'd':'', // data object for ajax 344 'other_data':'', 345 'ajaxdata':'', 346 }; 347 348 349 // extend passed with defaults 350 var OO = $.extend({}, defz, opt); 351 352 // Build processed object 353 var processed = {}; 354 processed['uid'] = OO.uid; 355 356 // Ajax 357 var _adata = ( OO.adata == '') ? {}: OO.adata; 358 359 // type passed value fix 360 var passed_type_val = false; 361 if( 'type' in _adata && _adata.type != '' && 362 !['ajax', 'rest', 'endpoint'].includes(_adata.type) 363 ){ 364 passed_type_val = _adata.type; 365 _adata.type = ''; 366 } 367 368 // set default needed values 369 var def_avals = { 370 'a':'', 371 'type':'ajax', 372 'end':'admin', 373 'data': '', 374 'loader_el':'', 375 'loader_btn_el':'',//4.8 376 'loader_class':'', 377 'url':'', 378 } 379 380 // set default values 381 $.each( def_avals, function(key, value) { 382 if( key == 'data' && !( 'a' in _adata ) && ('data' in _adata ) && 'a' in _adata.data ) return; 383 if( !(key in _adata ) && value != '' ) _adata[ key ] = value; 384 }); 385 386 //console.log( _adata ); 387 388 // map old to new 389 var def_adata_mapping = { 390 'a' : 'a', 391 'ajax_action' : 'a', 392 'ajax_type':'type', 393 'end': 'end', 394 'ajax_url': 'url', 395 'ajaxdata':'data', 396 'd':'data', 397 } 398 $.each( def_adata_mapping, function(oldV, newV) { 399 if( newV in _adata && _adata[ newV ] != '' ) return; 400 401 if( oldV in OO && OO[oldV] !== '' ) { 402 _adata[newV] = OO[oldV]; 403 } 404 }); 405 406 //console.log( _adata ); 407 408 // Move additional values in _adata to _adata.data 409 $.each(_adata, function(key, value) { 410 if ( !(key in def_avals)) { 411 //_adata.data[key] = value; // Move any extra values to _adata.data 412 //delete _adata[key]; // Remove them from the main _adata object 413 } 414 }); 415 416 if( 'data' in _adata ){ 417 //_adata['data']['nn'] = ( _adata.end == 'client' ) ? evo_general_params.n : evo_admin_ajax_handle.postnonce; 418 419 _adata['data']['nn'] = (typeof evo_admin_ajax_handle !== 'undefined' && evo_admin_ajax_handle !== null) 420 ? evo_admin_ajax_handle.postnonce 421 : evo_general_params.n; 422 423 424 _adata['data']['uid'] = processed['uid']; 425 if( passed_type_val ) _adata['data']['type'] = passed_type_val; 426 if( 'action' in _adata.data ) _adata['a'] = _adata.data.action; 427 if( 'a' in _adata.data ) _adata['a'] = _adata.data.a; 428 if( 'ajaxdata' in OO ) processed['ajaxdata'] = _adata.data; 429 } 430 431 processed['adata'] = _adata; 432 433 434 // lightbox 435 var _lbdata = ( OO.lbdata == '') ? {}: OO.lbdata; 436 437 // if legacy values exists > convert them to new 438 var def_lbdata_mapping = { 439 'lbc':'class', 440 'lbsz':'size', 441 'lbac' :'additional_class', 442 't':'title', 443 'lb_padding': 'padding', 444 'load_new_content':'new_content', 445 'lightbox_loader': 'loader', 446 'content_id':'content_id', 447 'content':'content', 448 'hide_lightbox':'hide', 449 'hide_message':'hide_msg', 450 'lightbox_key': 'class', 451 } 452 $.each( def_lbdata_mapping, function(oldV, newV) { 453 // if _lbdata has new value > skip 454 if (newV in _lbdata && _lbdata[newV] !== '' && _lbdata[newV] !== null && _lbdata[newV] !== undefined) { 455 return; 456 } 457 if( oldV in OO && OO[oldV] !== '' ) { 458 _lbdata[newV] = OO[oldV]; 459 } 460 }); 461 462 // set default needed values 463 var def_lbvals = { 464 'padding':'evopad30', 465 'loader': false, 466 'preload_temp_key':'init', 467 'new_content': true, 468 'additional_class':'', 469 'title':'', 470 'hide':false, 471 'hide_msg':2000, 472 'content':'', // content for lightbox 473 'content_id':'', // content id in DOM to grab content for lightbox 474 } 475 // set default values 476 $.each( def_lbvals, function(key, value) { 477 if( key in _lbdata ) return; 478 if( value == '') return; 479 _lbdata[ key ] = value; 480 }); 481 482 483 //console.log( _lbdata.new_content ) ; 484 485 // load lightbox content legacy 486 if( OO.ajaxdata.load_lbcontent ) _lbdata['new_content'] = true; 487 if( OO.ajaxdata.load_new_content ) _lbdata['new_content'] = true; 488 489 // populate new content @4.7.3 490 processed['_populate_id'] = false; 491 if( OO.load_new_content_id != '') processed['_populate_id'] = OO.load_new_content_id; 492 if( 'new_content_id' in _lbdata && _lbdata.new_content_id != '') processed['_populate_id'] = _lbdata.new_content_id; 493 494 processed['lbdata'] = _lbdata; 495 496 // make sure uid is moved to main level 497 if( processed.uid == '' && 'uid' in processed['lbdata'] ) processed['uid'] = processed['lbdata']['uid']; 498 499 // add legacy variables for backward compatibility 500 $.each(opt, function(oldkey, oldval){ 501 if( oldkey in processed ) return; 502 processed[ oldkey ] = oldval; 503 }); 504 505 //console.log( processed ); 506 507 return processed; 508 } 509 510 // LIGHTBOX triggers
511 // @version 4.2 512 $('body').on('click','.evolb_trigger', function(event){ 513 if( event !== undefined ){ 514 event.preventDefault(); 515 event.stopPropagation(); 516 } 517 518 $(this).evo_lightbox_open($(this).data('lbvals') ); 519 }); 520 $('body').on('click','.evolb_close_btn', function (){ 521 const LB = $(this).closest('.evo_lightbox'); 522 LB.evo_lightbox_close(); 523 }); 524 525 // @since 4.2.2 526 $('body').on('click','.evolb_trigger_save, .evo_submit_form', function(event){ 527 if( event !== undefined ){ 528 event.preventDefault(); 529 event.stopPropagation(); 530 } 531 $(this).evo_ajax_lightbox_form_submit( $(this).data('d') ); 532 }); 533 534 $('body').on('click','.evo_trigger_ajax_run', function(event){ 535 if( event !== undefined ){ 536 event.preventDefault(); 537 event.stopPropagation(); 538 } 539 540 //console.log($(this).data('d') ); 541 $(this).evo_admin_get_ajax( $(this).data('d') ); 542 }); 543 // @since 4.3.3 544 $('body').on('evo_lightbox_trigger', function(event, data){ 545 //console.log( data ); 546 $('body').evo_lightbox_open(data); 547 }); 548 549 // Lightbox opening 550 $.fn.evo_lightbox_open = function (opt ){ 551 552 var OO = this.evo_process_ajax_params( opt ); 553 554 var _lbdata = OO.lbdata; 555 var _adata = OO.adata; 556 var _populate_id = OO._populate_id; 557 558 559 // check if required values missing for lightbox 560 if( !('class' in _lbdata) || _lbdata.class == '' ) return; 561 562 563 const fl_footer = _adata.end == 'client' ? '<div class="evolb_footer"></div>' :''; 564 565 // create lightbox HTML 566 var __lb_size = _lbdata.size === undefined ? '' : _lbdata.size; 567 568 var html = '<div class="evo_lightbox '+_lbdata.class+' '+_adata.end+' '+ ( _lbdata.additional_class !== undefined ? _lbdata.additional_class :'') +'" data-lbc="'+_lbdata.class+'"><div class="evolb_content_in"><div class="evolb_content_inin"><div class="evolb_box '+_lbdata.class+' '+ __lb_size +'"><div class="evolb_header"><a class="evolb_backbtn" style="display:none"><i class="fa fa-angle-left"></i></a>'; 569 if( _lbdata.title !== undefined ) html += '<p class="evolb_title">' + _lbdata.title + '</p>'; 570 html += '<span class="evolb_close_btn evolbclose "><i class="fa fa-xmark"><i></span></div><div class="evolb_content '+ _lbdata.padding +'"></div><p class="message"></p>'+fl_footer+'</div></div></div></div>'; 571 572 $('#evo_lightboxes').append( html ); 573 var LIGHTBOX = $('.evo_lightbox.'+ _lbdata.class ); 574 575 576 // Open lightbox on page 577 setTimeout( function(){ 578 $('#evo_lightboxes').show(); 579 LIGHTBOX.addClass('show'); 580 $('body').addClass('evo_overflow'); 581 $('html').addClass('evo_overflow'); 582 },300); 583 584 // show loading animation 585 LIGHTBOX.evo_lightbox_show_open_animation(OO); 586 587 // Load content locally from DOM 588 // dynamic content within the site 589 if(_lbdata.content_id != ''){ 590 var content = $('#'+ _lbdata.content_id ).html(); 591 LIGHTBOX.find('.evolb_content').html( content); 592 } 593 // load passed on content 594 if(_lbdata.content != ''){ 595 LIGHTBOX.find('.evolb_content').html( _lbdata.content); 596 } 597 598 // run ajax to load content for the lightbox inside 599 if( 'a' in _adata && _adata.a != ''){ // @4.7.2 600 LB.evo_admin_get_ajax( OO ); 601 } 602 603 // load content from a AJAX file 604 if( 'url' in _adata && _adata.url != '' ){ 605 $.ajax({ 606 beforeSend: function(){}, 607 url: OO.ajax_url, 608 success:function(data){ 609 LIGHTBOX.find('.evolb_content').html( data); 610 },complete:function(){} 611 }); 612 } 613 614 $('body').trigger('evo_lightbox_processed', [ OO, LIGHTBOX]); 615 } 616 617 $.fn.evo_lightbox_close = function (opt){ 618 var LB = this; 619 var defaults = { 620 'delay':500, 621 'remove_from_dom':true, 622 }; 623 624 if( !(LB.hasClass('show')) ) return; 625 626 var OO = $.extend({}, defaults, opt); 627 628 var hide_delay = parseInt( OO.delay); 629 630 complete_close = (LB.parent().find('.evo_lightbox.show').length == 1)? true: false; 631 632 if( hide_delay > 500){ 633 setTimeout( function(){ 634 LB.removeClass('show'); 635 }, ( hide_delay - 500 ) ); 636 }else{ 637 LB.removeClass('show'); 638 } 639 640 setTimeout( function(){ 641 if(complete_close){ 642 $('body').removeClass('evo_overflow'); 643 $('html').removeClass('evo_overflow'); 644 } 645 // remove lightbox HTML from DOM 646 if( OO.remove_from_dom) LB.remove(); 647 }, hide_delay); 648 } 649 650 651 // Other LB functions 652 $.fn.evo_lightbox_populate_content = function(opt){ 653 LB = this; 654 var defaults = { 655 'content':'', 656 }; var OO = $.extend({}, defaults, opt); 657 LB.find('.evolb_content').html( OO.content ); 658 } 659 660 $.fn.evo_lightbox_show_msg = function(opt){ 661 LB = this; 662 var defaults = { 663 'type':'good', 664 'message':'', 665 'hide_message': false,// hide message after some time pass time or false 666 'hide_lightbox': false, // hide lightbox after some time of false 667 }; var OO = $.extend({}, defaults, opt); 668 LB.find('.message').removeClass('bad good').addClass( OO.type ).html( OO.message ).fadeIn(); 669 670 if( OO.hide_message ) setTimeout(function(){ LB.evo_lightbox_hide_msg() }, OO.hide_message ); 671 672 if( OO.hide_lightbox ) LB.evo_lightbox_close({ delay: OO.hide_lightbox }); 673 } 674 $.fn.evo_lightbox_hide_msg = function(opt){ 675 LB = this; 676 LB.find('p.message').hide(); 677 } 678 679 680 // add preload animations to lightbox u4.6 681 $.fn.evo_lightbox_show_open_animation = function(opt){ 682 LB = this; 683 var defaults = { 684 'animation_type':'initial', // animation type initial or saving 685 'preload_temp_key': 'init', // 4.6 passed on preload template key 686 'end':'admin', 687 }; 688 var OO = $.extend({}, defaults, opt); 689 690 if( OO.animation_type == 'initial'){ 691 692 passed_data = ( typeof evo_admin_ajax_handle !== 'undefined') ? evo_admin_ajax_handle: evo_general_params; 693 694 //console.log( passed_data); 695 696 html = passed_data.html.preload_general; 697 if( OO.preload_temp_key != 'init') html = passed_data.html[ OO.preload_temp_key ]; 698 LB.find('.evolb_content').html( html ); 699 } 700 701 if( OO.animation_type == 'saving') 702 LB.find('.evolb_content').addClass('loading'); 703 } 704 705 // eventcard Lightbox function v4.6 706 $.fn.evo_cal_lightbox_trigger = function( SC_data , obj, CAL ){ 707 var additional_classes = ''; 708 709 if( obj.hasClass('cancel_event')) additional_classes += ' cancel_event'; 710 711 additional_classes += ' ' + SC_data.additional_class; 712 additional_classes += ' ' + SC_data.calendar_type; // 4.6.6 713 714 715 var other_data = { 716 extra_classes: 'evo_lightbox_body eventon_list_event evo_pop_body evcal_eventcard event_'+SC_data.event_id +'_'+ SC_data.repeat_interval + additional_classes, 717 CAL:CAL, 718 obj: obj, 719 et_data: obj.find('.evoet_data').data(),// @4.5.5 720 SC: SC_data 721 }; 722 723 // generate a random ID for this 724 maximum = 99; 725 minimum = 10; 726 var randomnumber = Math.floor(Math.random() * (maximum - minimum + 1)) + minimum; 727 728 // lightbox additional class 729 lbac = ''; 730 if( evo_general_params.cal.lbs == 'sc1') lbac = 'within'; 731 if( evo_general_params.cal.lbs == 'sc2') lbac = 'within ecSCR'; 732 733 // AJAX via lightbox 734 if(SC_data.ux_val == '3a'){ 735 736 var new_content = ''; 737 new_content += '<div class="evo_cardlb" style="padding:10px 10px 0 10px">'; 738 new_content += '<div style="margin-bottom:20px; width:100%; height:200px" class="evo_preloading"></div>'; 739 const box = '<div style="display:flex;justify-content: space-between;margin-bottom:10px"><div style="width:40px;height:40px; margin-right:20px" class="evo_preloading"></div> <div style="flex:1 0 auto"> <div class="evo_preloading" style="width:70%; height:20px; margin-bottom:10px"></div><div class="evo_preloading" style="width:100%; height:80px; margin-bottom:10px"></div> </div> </div>'; 740 new_content += box + box + box; 741 new_content += '</div>'; 742 743 744 var data_arg = {}; 745 data_arg['event_id'] = SC_data.event_id; 746 data_arg['ri'] = SC_data.repeat_interval; 747 data_arg['SC'] = SC_data; 748 data_arg['load_lbcontent'] = true; 749 data_arg['action'] = 'eventon_load_single_eventcard_content'; 750 data_arg['uid'] = 'load_single_eventcard_content_3a'; 751 if( CAL ) data_arg['calid'] = CAL.attr('id'); 752 753 754 //reset view to match 755 if( data_arg.SC.tile_style == '2') data_arg.SC.eventtop_style = '0'; 756 data_arg.SC.tile_style = '0'; 757 data_arg.SC.tile_bg = '0'; 758 data_arg.SC.tiles = 'no'; 759 760 $('body').evo_lightbox_open({ 761 uid:'evo_open_eventcard_lightbox', 762 //uid:'load_single_eventcard_content_3a', 763 lbc:'evo_eventcard_'+ randomnumber,lbac: lbac, 764 end:'client', 765 content: new_content, 766 ajax:'yes', 767 ajax_type: 'endpoint', 768 ajax_action: 'eventon_load_single_eventcard_content', 769 d: data_arg, 770 other_data: other_data 771 }); 772 773 // open lightbox using page event content 774 }else{ 775 776 var content = obj.closest('.eventon_list_event').find('.event_description').html(); 777 var _content = $(content).not('.evcal_close'); 778 779 clrW = obj.closest('.eventon_list_event').hasClass('clrW') ? 'clrW':'clrD';//4.8 780 781 CAL.evo_lightbox_open({ 782 uid:'evo_open_eventcard_lightbox', 783 lbc:'evo_eventcard_'+ randomnumber,lbac: lbac, 784 end:'client', 785 content: '<div class="evopop_top '+clrW+'">'+ obj.html() +'</div><div class="evopop_body">' + content +'</div>', 786 other_data: other_data 787 }); 788 789 return; 790 } 791 } 792 793 // listerners for lightbox on eventcard 794 $.fn.evo_cal_lb_listeners = function(){ 795 // Listerners 796 // process various lightbox types 797 $('body') 798 .on('evo_lightbox_processed', function(event, OO, LIGHTBOX){ 799 if( OO.uid != 'evo_open_eventcard_lightbox') return false;
800 801 var CAL = OO.other_data.CAL; 802 803 LIGHTBOX.addClass('eventcard eventon_events_list'); 804 LIGHTBOX_content = LIGHTBOX.find('.evolb_content'); 805 LIGHTBOX_content.attr('class', 'evolb_content '+ OO.other_data.extra_classes ); 806 807 var SC = OO.other_data.SC; 808 var obj = OO.other_data.obj; 809 810 //console.log(SC); 811 812 // update border color and eventtop color 813 const evoet_data = OO.other_data.et_data; 814 815 bgcolor = bggrad =''; 816 if( evoet_data ){ 817 bgcolor = evoet_data.bgc; 818 bggrad = evoet_data.bggrad; 819 } 820 821 822 // if tiles and eventtop style set to clean 823 var show_lightbox_color = ( SC.eventtop_style == '0' || SC.eventtop_style == '4') ? false: true; 824 825 if( (CAL && CAL.hasClass('color') && show_lightbox_color) || 826 (!CAL && show_lightbox_color) 827 828 ){ 829 LIGHTBOX_content.addClass('color'); 830 LIGHTBOX_content.find('.evopop_top').css({ 831 'background-color':bgcolor, 832 'background-image': bggrad, 833 }); 834 }else{ 835 LIGHTBOX_content.addClass('clean'); 836 LIGHTBOX_content.find('.evopop_top').css({'border-left':'3px solid '+bgcolor}); 837 } 838 839 // trigger 840 if( obj.data('runjs')){ 841 $('body').trigger('evo_load_single_event_content',[ SC.event_id, OO.other_data.obj]); 842 } 843 844 845 // RTL 846 if( SC.evortl =='yes') LIGHTBOX.addClass('evortl'); 847 848 $('body').trigger('evolightbox_end', [ LIGHTBOX , CAL, OO]); // @s4.6 849 850 }) 851 852 // after eventcard content is loaded to lightbox via 3a - @since 4.2.3 853 .on('evo_ajax_success_evo_open_eventcard_lightbox', function (event, OO, data){ 854 855 if( OO.ajaxdata.uid != "load_single_eventcard_content_3a") return false; 856 857 LIGHTBOX = $('.evo_lightbox.'+ OO.lightbox_key); 858 859 CAL = $('body').find('#'+ OO.ajaxdata.calid); 860 861 $('body').trigger('evolightbox_end', [ LIGHTBOX , CAL, OO]); // @s4.6 862 }) 863 ; 864 } 865 866 // Get Ajax url @since 4.4 @u 4.5.5 867 $.fn.evo_get_ajax_url = function(opt){ 868 var defaults = { 869 a:'', // action key 870 e:'client', // end 871 type: 'ajax'}; 872 var OO = $.extend({}, defaults, opt); 873 874 875 876 // end point url 877 if( OO.type == 'endpoint'){ 878 var evo_ajax_url = ( OO.e == 'client' || typeof evo_general_params !== 'undefined' )? 879 evo_general_params.evo_ajax_url : evo_admin_ajax_handle.evo_ajax_url; 880 return evo_ajax_url.toString().replace( '%%endpoint%%', OO.a ); 881 // rest api url 882 }else if( OO.type == 'rest' ){ 883 var evo_ajax_url = ( OO.e == 'client' || typeof evo_general_params !== 'undefined')? 884 evo_general_params.rest_url : evo_admin_ajax_handle.rest_url; 885 //console.log(evo_ajax_url); 886 //console.log(OO); 887 return evo_ajax_url.toString().replace( '%%endpoint%%', OO.a ); 888 }else{ 889 action_add = OO.a != '' ? '?action='+ OO.a: ''; 890 return ( OO.e == 'client' || typeof evo_general_params !== 'undefined') ? 891 evo_general_params.ajaxurl + action_add : evo_admin_ajax_handle.ajaxurl + action_add; 892 } 893 } 894 895 // loading animations @4.7.2 896 $.fn.evo_start_loading = function( opt ){ 897 var defaults = { type:'1'}; 898 var OPT = $.extend({}, defaults, opt); 899 var el = this; 900 901 if( OPT.type == '1') el.addClass('evoloading loading'); 902 if( OPT.type == '2') el.addClass('evoloading_2'); 903 } 904 $.fn.evo_stop_loading = function( opt ){ 905 var el = this; 906 var defaults = { type:'1'}; 907 var OPT = $.extend({}, defaults, opt); 908 909 if( OPT.type == '1') el.removeClass('evoloading loading'); 910 if( OPT.type == '2') el.removeClass('evoloading_2'); 911 } 912 $.fn.evo_lightbox_start_inloading = function(opt){ 913 LB = this; 914 LB.find('.evolb_content').addClass('loading'); 915 } 916 $.fn.evo_lightbox_stop_inloading = function(opt){ 917 LB = this; 918 LB.find('.evolb_content').removeClass('loading'); 919 } 920 921 // Count down // @+ 4.5 922 $.fn.evo_countdown_get = function(opt){ 923 var defaults = { gap:'', endutc: ''}; 924 var OPT = $.extend({}, defaults, opt); 925 var gap = OPT.gap; 926 927 // if gap not provided use endutc 928 if( gap == '' ){ 929 var Mnow = moment().utc(); 930 var M = moment(); 931 M.set('millisecond', OPT.endutc ); 932 933 gap = OPT.endutc - Mnow.unix(); 934 } 935 936 // if negative gap 937 if( gap < 0){ 938 return { 939 'd': 0, 940 'h':0, 941 'm':0, 942 's':0 943 }; 944 } 945 946 distance = ( gap * 1000); 947 948 var days = Math.floor(distance / (1000 * 60 * 60 * 24)); 949 var hours = Math.floor((distance % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)); 950 var minutes = Math.floor((distance % (1000 * 60 * 60)) / (1000 * 60)); 951 var seconds = Math.floor((distance % (1000 * 60)) / 1000); 952 953 minutes = minutes<10? '0'+minutes : minutes; 954 seconds = seconds<10? '0'+seconds : seconds; 955 956 return { 957 'd': days, 958 'h':hours, 959 'm':minutes, 960 's':seconds 961 }; 962 }; 963 // @u 4.5.2 964 $.fn.evo_countdown = function(opt){ 965 var defaults = { S1:''}; 966 var OPT = $.extend({}, defaults, opt); 967 var el = $(this); 968 969 const day_text = ( el.data('d') !== undefined && el.data('d') != '' )? el.data('d'):'Day'; 970 const days_text = ( el.data('ds') !== undefined && el.data('ds') != '' )? el.data('ds'):'Days'; 971 972 // intial run 973 //var gap = parseInt(el.data('gap')); 974 var duration = el.data('dur'); 975 var endutc = parseInt(el.data('endutc')); 976 var text = el.data('t'); 977 978 if(text === undefined) text = ''; 979 980 if( el.hasClass('evo_cd_on')) return; 981 982 // get gap using end time utc 983 var Mnow = moment().utc(); 984 var M = moment(); 985 M.set('millisecond', OPT.endutc ); 986 987 //console.log(Mnow.unix()); 988 //console.log(endutc); 989 990 gap = endutc - Mnow.unix(); 991 992 993 // on initial run - event hasnt happened yet 994 if( gap > 0 ){ 995 996 // initial 997 dd = el.evo_countdown_get({ 'gap': gap }); 998 999 el.html( ( dd.d>0 ? dd.d + ' ' + ( dd.d >1 ? days_text: day_text ) + " " :'') + dd.h + ":" + dd.m +':'+ dd.s +' '+text ); 1000
1001 el.data('gap', ( gap - 1) ); // save new gap value 1002 el.addClass('evo_cd_on'); 1003 1004 // set intervals 1005 var CD = setInterval(function(){ 1006 1007 gap = el.data('gap'); // get gap for this cycle 1008 duration = el.data('dur'); 1009 1010 const bar_elm = el.closest('.evo_event_progress').find('.evo_ep_bar'); 1011 1012 // when timer is ticking 1013 if( gap > 0 ){ 1014 1015 // increase bar width if exists 1016 if( duration !== undefined && bar_elm.length){ 1017 perc = ( (duration - gap)/ duration ) * 100; 1018 bar_elm.find('b').css('width',perc+'%'); 1019 } 1020 1021 dd = el.evo_countdown_get({ 'gap': gap }); 1022 1023 el.html( ( dd.d>0 ? dd.d + ' ' + ( dd.d >1 ? days_text: day_text ) + " ":'') + dd.h + ":" + dd.m +':'+ dd.s +' '+text ); 1024 el.data('gap', ( gap - 1) ); 1025 1026 // when timer expired 1027 }else{ 1028 1029 const expire_timer_action = el.data('exp_act'); 1030 1031 // perform ajax task after expiration 1032 if(expire_timer_action !== undefined){ 1033 $('body').trigger('runajax_refresh_now_cal',[ 1034 el , 1035 el.data('n'), 1036 ]); 1037 } 1038 1039 const _complete_text = el.evo_get_txt({V:'event_completed'}); 1040 1041 // live now text 1042 if(bar_elm.length){ 1043 bar_elm.addClass('evo_completed'); 1044 //el.siblings('.evo_ep_pre').html( _complete_text ); 1045 } 1046 1047 1048 // event tag & live elements 1049 if( el.closest('.evcal_desc').length){ 1050 el.closest('.evcal_desc').find('.eventover').html( _complete_text); 1051 el.closest('.evcal_desc').find('.evo_live_now').remove(); 1052 } 1053 1054 // event card 1055 if( el.closest('.eventon_list_event').length){ 1056 el.closest('.eventon_list_event').find('span.evo_live_now').hide(); 1057 } 1058 1059 el.html(''); 1060 clearInterval(CD); 1061 } 1062 1063 },1000); 1064 // event has already passed 1065 }else{ 1066 // if gap is less 1067 el.closest('.evo_event_progress').find('.evo_ep_bar').hide(); 1068 clearInterval(CD); 1069 } 1070 }; 1071 1072 // Handlebar process template data into html 1073 $.fn.evo_HB_process_template = function(opt){ 1074 var defaults = { TD:'', part:''} 1075 var OPT = $.extend({}, defaults, opt); 1076 1077 BUS = $('#evo_global_data').data('d'); 1078 1079 template = Handlebars.compile( BUS.temp[ OPT.part ] ); 1080 return template( OPT.TD ); 1081 } 1082 1083 // Date range and events @4.6.7 1084 // Date range and events - from webpage 1085 $.fn.evo_cal_events_in_range = function(opt){ 1086 var defaults = { S:'', E:'', 1087 hide: true, 1088 closeEC:true, 1089 showEV: false, // show events 1090 showEVL: false, // show events list 1091 showAllEvs: false // show all events regardless of the range 1092 }; 1093 var OPT = $.extend({}, defaults, opt); 1094 var CAL = $(this); 1095 1096 var eJSON = CAL.find('.evo_cal_events').data('events'); 1097 var SC = CAL.evo_shortcode_data(); 1098 1099 R = {}; 1100 html = ''; 1101 json = {}; 1102 1103 show = 0; 1104 1105 // using events JSON data 1106 if( eJSON && eJSON.length > 0){ 1107 $.each(eJSON, function(ind, ED){ 1108 eO = CAL.find('#event_'+ ED._ID); 1109 if(eO === undefined || eO.length==0) return; 1110 1111 if(OPT.hide) eO.hide(); // pre hide 1112 this_show = false; 1113 1114 // month long or year long events 1115 if( ED.month_long || ED.year_long ){ 1116 this_show = true; 1117 1118 }else{ 1119 if(CAL.evo_is_in_range({ 1120 'S': OPT.S, 'E': OPT.E, 'start': ED.unix_start , 'end':ED.unix_end 1121 })){ 1122 this_show = true; 1123 } 1124 } 1125 1126 if( OPT.showAllEvs) this_show = true; 1127 1128 if( this_show){ 1129 // show event 1130 if( OPT.showEV) eO.show(); 1131 1132 // close open event cards 1133 if(OPT.closeEC && SC.evc_open == 'no') eO.find('.event_description').hide().removeClass('open'); 1134 1135 html += eO[0].outerHTML; 1136 json[ ED._ID] = ED; 1137 show++; 1138 } 1139 }); 1140 }else{ 1141 // get all the events in the events list 1142 var cal_events = CAL.find('.eventon_list_event'); 1143
1144 cal_events.each(function(index, elm){ 1145 var ED = $(elm).evo_cal_get_basic_eventdata(); 1146 if( !ED) return; 1147 1148 if(OPT.hide) $(elm).hide(); // pre hide 1149 this_show = false; 1150 1151 // month long or year long events 1152 if( $(elm).hasClass('month_long') || $(elm).hasClass('year_long') ){ 1153 this_show = true; 1154 1155 }else{ 1156 if(CAL.evo_is_in_range({ 1157 'S': OPT.S, 'E': OPT.E, 'start': ED.unix_start , 'end':ED.unix_end 1158 })){ 1159 this_show = true; 1160 } 1161 } 1162 1163 if( OPT.showAllEvs) this_show = true; 1164 1165 if( this_show){ 1166 // show event 1167 if( OPT.showEV) $(elm).show(); 1168 1169 // close open event cards 1170 if(OPT.closeEC && SC.evc_open == 'no') 1171 $(elm).find('.event_description').hide().removeClass('open'); 1172 1173 html += $(elm)[0].outerHTML; 1174 json[ ED.uID ] = ED; 1175 show++; 1176 } 1177 }); 1178 } 1179 1180 1181 // No events 1182 if( OPT.showEV){ 1183 1184 no_event_content = CAL.evo_get_global({S1: 'html', S2:'no_events'}); 1185 1186 tx_noevents = CAL.evo_get_txt({V:'no_events'}); 1187 EL = CAL.find('.eventon_events_list'); 1188 EL.find('.eventon_list_event.no_events').remove(); 1189 if( show == 0 ) 1190 EL.append('<div class="eventon_list_event no_events">'+ no_event_content +'</div>'); 1191 } 1192 1193 // if show events list 1194 if( OPT.showEVL){ 1195 CAL.find('.eventon_events_list').show().removeClass('evo_hide'); 1196 } 1197 1198 R['count'] = show; 1199 R['html'] = html; 1200 R['json'] = json; 1201 1202 return R; 1203 } 1204 1205 // check if an event is in the given date range 1206 $.fn.evo_is_in_range = function(opt){ 1207 var defaults = { S:'', E:'', start:'',end:''} 1208 var OPT = $.extend({}, defaults, opt); 1209 1210 S = parseInt(OPT.S); 1211 E = parseInt(OPT.E); 1212 start = parseInt(OPT.start); 1213 end = parseInt(OPT.end); 1214 1215 return ( 1216 ( start <= S && end >= E ) || 1217 ( start <= S && end >= S && end <= E) || 1218 ( start <= E && end >= E ) || 1219 ( start >= S && end <= E ) 1220 ) ? true: false; 1221 } 1222 $.fn.evo_cal_hide_events = function(){ 1223 CAL = $(this); 1224 CAL.find('.eventon_list_event').hide(); 1225 } 1226 1227 // get event data basics from html event on page 1228 // ~@version 4.0.3 1229 $.fn.evo_cal_get_basic_eventdata = function(){ 1230 var ELM = $(this); 1231 1232 var _time = ELM.data('time'); 1233 if( _time === undefined ) return false; 1234 1235 const time = _time.split('-'); 1236 const ri = ELM.data('ri').replace('r',''); 1237 const eID = ELM.data('event_id'); 1238 1239 var _event_title = ELM.find('.evcal_event_title').text(); 1240 _event_title = _event_title.replace(/'/g, '''); 1241 1242 1243 var RR = { 1244 'uID': eID + '_' + ri, 1245 'ID': eID , 1246 'event_id': eID , 1247 'ri': ri, 1248 'event_start_unix': parseInt(time[0]), 1249 'event_end_unix': parseInt(time[1]), 1250 'ux_val': ELM.find('.evcal_list_a').data('ux_val'), 1251 'event_title': _event_title, 1252 'hex_color': ELM.data('colr'), 1253 'hide_et': ELM.hasClass('no_et') ? 'y':'n', // hide endtime 1254 'evcal_event_color': ELM.data('colr'), 1255 'unix_start': parseInt(time[0]),// @4.5.7 1256 'unix_end': parseInt(time[1]),// @4.5.7 1257 }; 1258 1259 // event type 1260 RR['ett1'] = {}; 1261 ELM.find('.evoet_eventtypes.ett1 .evoetet_val').each(function(){ 1262 RR['ett1'][ $(this).data('id')] = $(this).data('v'); 1263 }); 1264 1265 // since 4.3.5 1266 const eventtop_data = ELM.find('.evoet_data').data('d'); 1267 1268 // location 1269 if('loc.n' in eventtop_data && eventtop_data['loc.n'] != ''){ 1270 RR['location'] = eventtop_data['loc.n']; 1271 } 1272 1273 // organizer 1274 if('orgs' in eventtop_data && eventtop_data.orgs !== undefined ){ 1275 var org_names = ''; 1276 $.each(eventtop_data.orgs, function(index, value){ 1277 org_names += value +' '; 1278 }); 1279 RR['organizer'] = org_names; 1280 } 1281 1282 // event tags @s 4.5.2 1283 if( 'tags' in eventtop_data && eventtop_data.tags !== undefined ){ 1284 //console.log(eventtop_data.tags); 1285 RR['event_tags'] = eventtop_data.tags; 1286 } 1287 1288 1289 return RR; 1290 1291 } 1292 1293 1294 // DATE time functions @+2.8 1295 $.fn.evo_day_in_month = function(opt){ 1296 var defaults = { M:'', Y:''} 1297 var OPT = $.extend({}, defaults, opt); 1298 1299 return new Date(OPT.Y, OPT.M, 0).getDate(); 1300 } 1301 $.fn.evo_get_day_name_index = function(opt){ 1302 var defaults = { M:'', Y:'', D:''} 1303 var OPT = $.extend({}, defaults, opt); 1304 1305 //return moment(OPT.Y+'-'+OPT.M+'-'+OPT.D).utc().day(); 1306 1307 return new Date( Date.UTC(OPT.Y, OPT.M-1, OPT.D) ).getUTCDay(); 1308 } 1309 1310 // LIGHTBOX 1311 // page Lightbox functions @+2.8 1312 // append to the lightbox main class name .evo_lightbox 1313 // Legacy 1314 $.fn.evo_prepare_lb = function(){ 1315 $(this).find('.evo_lightbox_body').html(''); 1316 } 1317 $.fn.evo_show_lb = function(opt){ 1318 var defaults = { RTL:'', calid:''} 1319 var OPT = $.extend({}, defaults, opt); 1320 1321 $(this).addClass('show '+ OPT.RTL).attr('data-cal_id', OPT.calid); 1322 $('body').trigger('evolightbox_show'); 1323 } 1324 $.fn.evo_append_lb = function(opt){ 1325 var defaults = { C:'', CAL:''} 1326 var OPT = $.extend({}, defaults, opt); 1327 $(this).find('.evo_lightbox_body').html( OPT.C); 1328 1329 if( OPT.CAL!= '' && OPT.CAL !== undefined && OPT.CAL.hasClass('color')){ 1330 const LIST = $(this).find('.eventon_events_list'); 1331 if( LIST.length>0){ 1332 LIST.find('.eventon_list_event').addClass('color'); 1333 } 1334 } 1335 } 1336 1337 // event image gallery @4.6 1338 // adjust event image height on lightbox 1339 $.fn.eventon_check_img_size_on_lb = function( ){ 1340 LB = this; 1341 winH = parseInt($( window ).height()); 1342 winW = parseInt($( window ).width()); 1343 1344 var pad = 50; 1345 if( winW < 650) pad = 20; 1346 if( winW < 500) pad = 10; 1347 1348 winH -= pad*2; 1349 winW -= pad*2; 1350
1351 LB = $('body').find('.evolb_ft_img'); 1352 WINratio = winH/winW; 1353 1354 const IMG = LB.find('img'); 1355 IMGratio = parseInt( IMG.data('h') )/ parseInt( IMG.data('w') ); 1356 img_relative_w = parseInt(winH/IMGratio); 1357 1358 if(WINratio < 1 ){// wider window 1359 if(IMGratio<1){// wider image 1360 if(img_relative_w > winW){ // image wider than window 1361 IMG.css({'width': winW ,'height': 'auto' } ); 1362 }else{// image smaller than window width 1363 newIH = winH>parseInt(IMG.data('h'))? parseInt(IMG.data('h')): winH; 1364 newIW = (winH>parseInt(IMG.attr('h')) )? '100%': img_relative_w; 1365 IMG.css({'width': newIW ,'height': newIH } ); 1366 } 1367 }else{ 1368 winH = winH > 1001 ? 1000 : winH; 1369 IMG.css({'width': 'auto' ,'height': winH } ); 1370 } 1371 }else{// taller window 1372 if(IMGratio<1){// wider image 1373 IMG.css({'width': winW ,'height': 'auto' } ); 1374 }else{// taller image 1375 winW = winW > 1001 ? 1000 : winW; 1376 if(img_relative_w > winW){ // relative image wider than window 1377 IMG.css({'width': winW ,'height': 'auto' } ); 1378 }else{ 1379 IMG.css({'width': 'auto' ,'height': winH } ); 1380 } 1381 } 1382 } 1383 1384 //console.log(WINratio +' '+IMGratio); 1385 } 1386 1387 $.fn.eventon_process_main_ft_img = function(OO){ 1388 IMG = this; 1389 img_sty = 'def'; 1390 if( IMG.hasClass('fit') ) img_sty = 'fit'; 1391 if( IMG.hasClass('full') ) img_sty = 'full'; 1392 1393 box_width = IMG.width(); 1394 box_height = IMG.height(); 1395 1396 img_height = parseInt( IMG.data('h') ); 1397 img_width = parseInt( IMG.data('w') ); 1398 img_ratio = IR = img_height / img_width; // image ratio 1399 1400 // fit style 1401 if( IMG.hasClass('fit')){ 1402 new_width = box_height / img_ratio; 1403 //console.log(new_width+' '+box_height +' '+img_ratio); 1404 new_height = box_height; 1405 if( new_width > box_width ){// width is wider than box 1406 1407 if( IR <1 ){ 1408 new_width = box_width; new_height = IR * new_width; 1409 }else{ 1410 new_height = box_height; new_width = new_height / IR; 1411 } 1412 } 1413 IMG.find('span').css({'width':new_width, 'height': new_height} ); 1414 } 1415 1416 // full style 1417 if( IMG.hasClass('full')){ 1418 new_height = img_ratio * box_width; 1419 new_width = box_width; 1420 IMG.find('span').css({'width':new_width, 'height': new_height} ); 1421 IMG.css({'height': new_height} ); 1422 } 1423 1424 //console.log(box_width +' '+img_width+' '+new_width); 1425 } 1426 1427 1428 /** 1429 * Form functions 1430 * @version 4.8.2 1431 */ 1432 $.fn.evo_RealTime_form_validation = function() { 1433 return this.each(function() { 1434 var form = $(this); 1435 var req_fields = form.find('.input.req'); 1436 var email_fields = form.find('.input.email'); 1437 var humanvalid_fields = form.find('.input.evoelm_hval_val'); 1438 1439 function validateField(field, type) { 1440 var errorElement = field.siblings('em'); 1441 var hasError = false; 1442 var fieldValue = field.val().trim(); 1443 1444 if (type === 'email') { 1445 if (field.hasClass('req')) { 1446 // Required email: Check if filled AND valid 1447 hasError = fieldValue === '' || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(fieldValue); 1448 } else { 1449 // Optional email: Only check if itâs not empty 1450 hasError = fieldValue !== '' && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(fieldValue); 1451 } 1452 1453 } else if (type === 'humanvalid') { 1454 var correctAnswer = field.data('val'); // Expected answer from data attribute 1455 hasError = ( '89r329' +field.val().trim()+ '8932ufe' ) !== correctAnswer; 1456 } else { 1457 hasError = field.val().trim() === ''; 1458 } 1459 1460 if (hasError) { 1461 if (errorElement.length === 0) { 1462 errorElement = $('<em class="evoelm_field_errmsg evopadt5"></em>'); 1463 field.after(errorElement); 1464 } 1465 errorElement.html(getErrorMessage(type === 'email' ? 'err2' : type === 'humanvalid' ? 'err3' : 'err1')) 1466 .removeClass('evodn') 1467 .addClass('evodib'); 1468 field.addClass('err'); 1469 } else { 1470 errorElement.remove(); 1471 field.removeClass('err'); 1472 } 1473 1474 return hasError; 1475 } 1476 1477 1478 function getErrorMessage(type) { 1479 const messages = { 1480 err1: evo_general_params.text.err1, // Required field error 1481 err2: evo_general_params.text.err2, // Email format error 1482 err3: evo_general_params.text.err3 // Human validation error (e.g., "Incorrect answer") 1483 }; 1484 return messages[type] || ""; 1485 } 1486 1487 function validateForm() { 1488 var hasErrors = false;
1489 req_fields.each(function() { 1490 if (validateField($(this), 'text')) hasErrors = true; 1491 }); 1492 email_fields.each(function() { 1493 if (validateField($(this), 'email')) hasErrors = true; 1494 }); 1495 humanvalid_fields.each(function() { 1496 if (validateField($(this), 'humanvalid')) hasErrors = true; 1497 }); 1498 return !hasErrors; 1499 } 1500 1501 req_fields.on('input blur', function() { validateField($(this), 'text'); }); 1502 email_fields.on('input blur', function() { validateField($(this), 'email'); }); 1503 humanvalid_fields.on('input blur', function() { validateField($(this), 'humanvalid'); }); 1504 1505 // attach validation to custom submittions 1506 $('body').on('evo_elm_form_presubmit_validation', function(event, callback){ 1507 event.preventDefault(); 1508 var isValid = validateForm(); 1509 if (typeof callback === "function") { 1510 callback(isValid); // Return true/false to the callback 1511 } 1512 }); 1513 }); 1514 } 1515 1516 1517 // Calendar Data & Shortcodes 1518 // get shortcodes from evo bottom 1519 $.fn.evo_shortcode_data = function(){ 1520 var ev_cal = $(this); 1521 return ev_cal.find('.evo_cal_data').data('sc'); 1522 } 1523 1524 // get filter data @4.6 1525 $.fn.evo_get_filter_data = function(){ 1526 return $(this).find('.evo_cal_data').data('filter_data'); 1527 } 1528 $.fn.evo_cal_get_filter_sub_data = function( tax , key){ 1529 newdata = $(this).evo_get_filter_data(); 1530 1531 return newdata[ tax ][ key ]; 1532 } 1533 $.fn.evo_cal_update_filter_data = function(tax, new_val, key){ 1534 1535 newdata = $(this).evo_get_filter_data(); 1536 1537 if( key === undefined) key = 'nterms'; 1538 1539 newdata[ tax ][ key ] = new_val; 1540 1541 $(this).find('.evo_cal_data').data('filter_data', newdata ); 1542 } 1543 $.fn.evo_cal_get_footer_data = function( key ){ 1544 data = $(this).find('.evo_cal_data').data(); 1545 1546 //console.log(data); 1547 1548 if( data === undefined ) return false; // 4.6.2 1549 if( key in data ) return data[ key ]; 1550 return false; 1551 } 1552 1553 // hide cal data from view 1554 $.fn.evo_cal_hide_data = function(){ 1555 $(this).find('.evo_cal_data').attr({ 1556 'data-sc':'', 1557 'data-filter_data':'', 1558 'data-nav_data':'', 1559 }); 1560 } 1561 1562 // update shortcode values from filter changes @u4.6 1563 $.fn.evo_update_sc_from_filters = function(){ 1564 var el = $(this); 1565 SC = el.evo_shortcode_data(); 1566 1567 1568 $.each( el.evo_get_filter_data() , function(index, value){ 1569 var default_val = value.terms; 1570 var filter_val = value.nterms; 1571 const NOT_values = value.__notvals; 1572 1573 filter_val = filter_val == ''? 'NOT-all': filter_val; 1574 1575 var not_string = ''; 1576 1577 // if NOT filter in place > include that in tax value for query 1578 if( NOT_values!== undefined && NOT_values.length >0 && filter_val != default_val ){ 1579 1580 $.each(NOT_values, function(index, value){ 1581 not_string += 'NOT-'+ value +','; 1582 }); 1583 } 1584 1585 SC[ index ] = not_string + filter_val; 1586 }); 1587 1588 1589 el.find('.evo_cal_data').data( 'sc', SC ); 1590 } 1591 1592 1593 1594 // get shortcode single value 1595 $.fn.evo_get_sc_val = function(opt){ 1596 var defaults = { F:''} 1597 var OPT = $.extend({}, defaults, opt); 1598 var ev_cal = $(this); 1599 1600 if(OPT.F=='') return false; 1601 SC = ev_cal.find('.evo_cal_data').data('sc'); 1602 1603 if(!(SC[ OPT.F])) return false; 1604 return SC[ OPT.F]; 1605 } 1606 // UPDATE Single value 1607 $.fn.evo_update_cal_sc = function(opt){ 1608 var defaults = { 1609 F:'', V:'' 1610 } 1611 var OPT = $.extend({}, defaults, opt); 1612 var ev_cal = $(this); 1613 SC = ev_cal.find('.evo_cal_data').data('sc'); 1614 1615 SC[ OPT.F ] = OPT.V; 1616 1617 ev_cal.find('.evo_cal_data').data( 'sc', SC ); 1618 } 1619 // UPDATE all shortcode values 1620 $.fn.evo_update_all_cal_sc = function(opt){ 1621 var defaults = {SC:''} 1622 var OPT = $.extend({}, defaults, opt); 1623 var CAL = $(this); 1624 CAL.find('.evo_cal_data').data( 'sc', OPT.SC ); 1625 } 1626 1627 1628 1629 // OTHERS 1630 // hex colors // @+2.8 @updated 4.7.2 1631 $.fn.evo_is_hex_dark = function(opt){ 1632 var defaults = { hex:'808080'} 1633 var OPT = $.extend({}, defaults, opt); 1634 1635 hex = OPT.hex; 1636 1637 var c = hex.replace('#',''); 1638 var is_hex = typeof c === 'string' && c.length === 6 && !isNaN(Number('0x' + c)); 1639 1640 if(is_hex){ 1641 var values = c.split(''); 1642 r = parseInt(values[0].toString() + values[1].toString(), 16); 1643 g = parseInt(values[2].toString() + values[3].toString(), 16); 1644 b = parseInt(values[4].toString() + values[5].toString(), 16); 1645 }else{ 1646 var vals = c.substring(c.indexOf('(') +1, c.length -1).split(', '); 1647 var r = vals[0] // extract red 1648 var g = vals[1]; // extract green 1649 var b = vals[2]; 1650 } 1651 1652 var luma = ((r * 299) + (g * 587) + (b * 114)) / 1000; // per ITU-R BT.709 1653 1654 return luma> 128? true:false; 1655 } 1656 1657 // get rgb from hex code @4.5 1658 $.fn.evo_rgb_process = function(opt){ 1659 var defaults = { data:'808080',type:'rgb', method:'rgb_to_val'} 1660 var opt = $.extend({}, defaults, opt); 1661 1662 const color = opt.data; 1663 1664 // RGB => hex 1665 if( opt.method == 'rgb_to_hex'){ 1666 if(color == '1'){ 1667 return; 1668 }else{ 1669 if(color !=='' && color){ 1670 rgb = color.match(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/); 1671 1672 return "#" + 1673 ("0" + parseInt(rgb[1],10).toString(16)).slice(-2) + 1674 ("0" + parseInt(rgb[2],10).toString(16)).slice(-2) + 1675 ("0" + parseInt(rgb[3],10).toString(16)).slice(-2); 1676 } 1677 } 1678 } 1679 1680 // RGB => rgb val 1681 if( opt.method == 'rgb_to_val'){ 1682 if( opt.type == 'hex'){ 1683 var rgba = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(color); 1684 var rgb = new Array(); 1685 rgb['r']= parseInt(rgba[1], 16); 1686 rgb['g']= parseInt(rgba[2], 16); 1687 rgb['b']= parseInt(rgba[3], 16); 1688 1689 }else{ 1690 rgb = color; 1691 } 1692 1693 return parseInt((rgb['r'] + rgb['g'] + rgb['b'])/3); 1694 } 1695 } 1696 1697 // Other data 1698 $.fn.evo_get_OD = function(){
1699 var ev_cal = $(this); 1700 return ev_cal.find('.evo_cal_data').data('od'); 1701 } 1702 1703 1704 1705 // get evo data for a given calendar 1706 $.fn.evo_getevodata = function(){ 1707 1708 var ev_cal = $(this); 1709 var evoData = {}; 1710 1711 ev_cal.find('.evo-data').each(function(){ 1712 $.each(this.attributes, function(i, attrib){ 1713 var name = attrib.name; 1714 if(attrib.name!='class' && attrib.name!='style' ){ 1715 name__ = attrib.name.split('-'); 1716 evoData[name__[1]] = attrib.value; 1717 } 1718 }); 1719 }); 1720 1721 return evoData; 1722 } 1723 1724 // check if mobile device v4.6 1725 $.fn.evo_is_mobile = function(){ 1726 return ( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) )? true: false; 1727 } 1728 1729 // eventon loading functions 1730 // v 2.4.5 -- deprecating 1731 $.fn.evo_loader_animation = function(opt){ 1732 var defaults = { 1733 direction:'start' 1734 } 1735 var OPT = $.extend({}, defaults, opt); 1736 1737 if(OPT.direction == 'start'){ 1738 $(this).find('#eventon_loadbar').slideDown(); 1739 }else{ 1740 $(this).find('#eventon_loadbar').slideUp(); 1741 } 1742 } 1743 1744 // DEPRECATED functions 1745 $.fn.evo_item_shortcodes = function(){ 1746 var OBJ = $(this); 1747 var shortcode_array ={}; 1748 OBJ.each(function(){ 1749 $.each(this.attributes, function(i, attrib){ 1750 var name = attrib.name; 1751 if(attrib.name!='class' && attrib.name!='style' && attrib.value !=''){ 1752 name__ = attrib.name.split('-'); 1753 shortcode_array[name__[1]] = attrib.value; 1754 } 1755 }); 1756 }); 1757 return shortcode_array; 1758 } 1759 $.fn.evo_shortcodes = function(){ 1760 var ev_cal = $(this); 1761 var shortcode_array ={}; 1762 1763 ev_cal.find('.cal_arguments').each(function(){ 1764 $.each(this.attributes, function(i, attrib){ 1765 var name = attrib.name; 1766 if(attrib.name!='class' && attrib.name!='style' && attrib.value !=''){ 1767 name__ = attrib.name.split('-'); 1768 shortcode_array[name__[1]] = attrib.value; 1769 } 1770 }); 1771 }); 1772 return shortcode_array; 1773 } 1774 1775 1776}(jQuery));
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.