1/** 2 * Javascript: Slider for eventon 3 * @version 2.1.3 4 */ 5 6 7jQuery(document).ready(function($){ 8 9 // get calendar shortcode data 10 $.fn.evosl_shortcode_data = function() { 11 var ev_cal = $(this); 12 return ev_cal.find('.evo_cal_data').data('sc'); 13 }; 14 15// INIT 16 sliderfy_events(); 17 18// window resize 19 $( window ).resize(function() { 20 sliderfy_events(); 21 }); 22 23 24 25// EVO Slider code 26 function sliderfy_events(){ 27 $('body').find('.evoslider').each(function(){ 28 var CAL = $(this); 29 var SC = CAL.evosl_shortcode_data(); 30 //console.log( SC); 31 32 var OUTTER = CAL.find('.evo_slider_slide_out'); 33 var slides = CAL.find('.eventon_list_event').length; 34 var EL = CAL.find('.eventon_events_list'); 35 const sl_on = CAL.hasClass('evoslON') ? true: false; 36 37 let all_slides_count = 0; 38 var slider_move_distance = 0; 39 var all_slides_w = 0; 40 var slider_h = 0; 41 var cal_width = CAL.width(); 42 43 44 // slides visible 45 slides_visible = ('slides_visible' in SC)? SC.slides_visible: 1; 46 47 // slides count 48 if( sl_on ) slides = CAL.find('.sl.slide').length; 49 var __all_slides = slides + ( slides_visible * 2); 50 51 // slider controls 52 if( SC.control_style == 'tb'|| SC.control_style == 'lr'|| SC.control_style == 'lrc'){ 53 if(CAL.find('.evoslider_dots').length == 0){ 54 var html = "<span class='evoslider_nav nav prev'><i class='fa fa-angle-left'></i></span>"; 55 CAL.find('.evo_slider_outter').prepend(html); 56 var html = "<span class='evoslider_nav nav next'><i class='fa fa-angle-right'></i></span>"; 57 CAL.find('.evo_slider_outter').append(html); 58 CAL.find('.evosl_footer').append( "<span class='evoslider_dots none'></span>" ); 59 } 60 // bottom slide controls 61 }else{ 62 63 var html = ''; 64 html += "<div class='evosl_footer_in'>"; 65 html += "<span class='evoslider_nav nav prev'><i class='fa fa-angle-left'></i></span>"; 66 html += "<span class='evoslider_dots none'></span>"; 67 html += "<span class='evoslider_nav nav next'><i class='fa fa-angle-right'></i></span>"; 68 html += "</div>"; 69 70 CAL.find('.evosl_footer').html( html ); 71 } 72 73 slider_w = OUTTER.width(); 74 slider_w = cal_width; 75 76 77 // wrap slides around each event 78 if( !sl_on ){ 79 EL.find('.eventon_list_event').each(function(index){ 80 var el = $(this); 81 82 const hasImg = el.find('.desc_trig').hasClass('hasFtIMG'); 83 84 var c = el.data('colr'); 85 el.css('background-color', c); 86 if(!el.parent().hasClass('slide')) 87 el.wrap('<div class="slide sl '+ ( hasImg ? ' hasIMG':'') +'" data-index="' + ( index + 1) +'"></div>'); 88 if(!_hex_is_light( c )) el.addClass('sldark'); 89 }); 90 } 91 92 // now count all slides including dup 93 all_slides_count = CAL.find('.sl').length; 94 95 // slide width setting 96 var cur_slide_index = parseInt(EL.data('slideindex')); 97 if( cur_slide_index === undefined || !cur_slide_index ) cur_slide_index = 1; 98 99 // all verticals 100 if( SC.slider_type == 'vertical'){ 101 102 EL.fadeIn().data('slideindex',1); 103 var on_slide_h = 0; 104 105 OUTTER.height(0); 106 107 // set each slide to be as tall as the talleste slide 108 var max_height = 0; 109 EL.find('.slide').each(function(){ 110 const hh = $(this).outerHeight(true); 111 if( max_height < hh ) max_height = hh; 112 }); 113 EL.find('.sl').each(function(){ 114 $(this).height( max_height ); 115 }); 116 117 var visible_height = max_height * slides_visible; 118 119 OUTTER.height( visible_height ); 120 121 122 // all horizontals 123 }else{ 124 var one_slide_w = 0; 125 var slider_move_distance = slider_w; 126 127 // slides visible 128 if( SC.slider_type == 'micro'){ 129 slv = parseInt( slider_w/ 125); 130 slides_visible = slv; 131 132 }else if( SC.slider_type == 'mini'){ 133 slv = parseInt( slider_w/ 200); 134 if( SC.slide_style == 'imgleft') slv = parseInt( slider_w/ 300); 135 slides_visible = slv; 136 137 }else if( SC.slider_type == 'multi'){ 138 // set default slide visible count to 4 for multi slide 139 if( SC.slides_visible == 1) SC.slides_visible = slides_visible = 4; 140 if( slider_w < 400 && SC.slides_visible > 1) 141 slides_visible = 1; 142 if( slider_w > 401 && slider_w < 600 && SC.slides_visible > 2) 143 slides_visible = 2; 144 if( slider_w > 601 && slider_w < 800 && SC.slides_visible > 3) 145 slides_visible = 3; 146 if( slider_w > 801 && slider_w < 1000 && SC.slides_visible > 4) 147 slides_visible = 4; 148 } 149 150 151 one_slide_w = parseInt(slider_w/ slides_visible); 152 slider_move_distance = one_slide_w; 153 154 all_slides_w = all_slides_count * one_slide_w; 155 156 visible_width = one_slide_w * slides_visible; 157 158 EL.width( all_slides_w ).fadeIn().data('slideindex', cur_slide_index); 159 CAL.find('.sl').width( one_slide_w ); 160 OUTTER.width(visible_width); 161 } 162 163 CAL.find('.evo_loading_bar_holder').remove(); 164 165 166 // slider control dots 167 var dots_html = ''; 168 if( SC.slide_nav_dots == 'yes' ){ 169 170 dot_max = slides - 0 ; 171 for(var dc = 1; dc <= dot_max; dc++){ 172 dots_html += "<span class='evosl_dot "+ (dc == cur_slide_index? 'f':'') +"' data-index='"+ dc+"'><em></em></span>"; 173 } 174 175 var extra_class = dot_max <1 ? 'none':''; 176 177 CAL.find('.evoslider_dots').html( dots_html).addClass(extra_class); 178 } 179 180 // slide looping 181 let _create_duplicates = false; 182 if(EL.find('.dup').length == 0 && slides > 1) _create_duplicates = true; 183 if ( slides_visible < slides) _create_duplicates = true; 184 185 if( _create_duplicates ){ 186 187 let duplicate_count = 0; 188 189 // for each visible slide 190 for( y = 0; y < ( slides_visible ); y++){ 191 // add duplicated before 192 var z = EL.find('.slide').clone().eq( slides - y -1 ); 193 z.addClass('dup sl').removeClass('slide').data('index', (0 - y) ).attr('data-index', ( 0- y) ); 194 EL.prepend( z ); duplicate_count++; 195 196 // add duplicates after 197 var v = EL.find('.slide').clone().eq( y ); 198 v.addClass('dup sl').removeClass('slide').data('index', (slides + 1+y) ).attr('data-index', (slides + 1+y ) ); 199 EL.append( v ); duplicate_count++; 200 } 201 202 EL.data({'slides_visible': slides_visible}); 203 204 // adjust slide container width after adding duplicate slides 205 all_slides_w = ( all_slides_count + duplicate_count) * one_slide_w; 206 EL.width( all_slides_w ); 207 } 208 209 210 go_to_slide_index( cur_slide_index , CAL, true, false, false ); 211 212 213 // set slider data for interaction 214 EL.data({ 215 'slider_move_distance' : slider_move_distance, 216 'all_slides_w' : all_slides_w, 217 'slides_visible' : slides_visible 218 }); 219 220 CAL.addClass('evoslON'); 221 222 // hide slider controls 223 if( SC.slide_hide_control == 'yes') CAL.find('.evosl_footer').hide(); 224 225 // if no events customize no events view 226 if( CAL.find('.no_events').length > 0 ){ 227 CAL.addClass('no_slides'); 228 } 229 230 // if only showing one slide with many slides visible adjust width 231 if( CAL.find('.slide.sl').length == 1 && SC.slides_visible > 1){ 232 CAL.find('.sl').width( cal_width ); 233 } 234 235 }); 236 } 237 238// slider works 239 $.fn.slider_work = function (options) { 240 var slide = {}, 241 interval = null, 242 $el = this; 243 slide.$el = this; 244 var SC = $el.evosl_shortcode_data(); 245 var EL = $el.find('.eventon_events_list'); 246 const slider_outter = $el.find('.evo_slider_outter'); 247 //var all_slides = $el.find('.eventon_list_event').length; 248 var all_slides = EL.find('.slide').length; 249 250 slide = { 251 iv: SC.slider_pause, 252 running: false, 253 init: function(){ 254 255 // slider is set to run auto 256 if( SC.slide_auto == 'yes'){ 257 slide.auto(); 258 259 // pause on hover 260 if( SC.slide_pause_hover == 'yes'){ 261 $el.on('mouseover','.evo_slider_slide_out', function(){ 262 slide.pause(); 263 }).on('mouseout',function(){ 264 slide.auto(); 265 }); 266 } 267 } 268 269 all_slides -= 1; 270 }, 271 auto: function (){ 272 clearInterval( interval ); 273 274 if( SC.slide_auto == 'yes'){ // if auto slide enabled via shortcode 275 interval = setInterval(function(){ 276 slide.gotoNextSlides(); 277 }, this.iv ); 278 } 279 }, 280 resetInterval: function(){ 281 slide.auto(); 282 }, 283 pause: function(){ 284 clearInterval(interval); 285 }, 286 gotoNextSlides: function(){ 287 go_to_slide_index( 'next' , $el); 288 slide.resetInterval(); 289 }, 290 interaction: function(){ 291 // click on nav arrows 292 var slider_inter_area = $el.find('.evo_slider_slide_out'); 293 294 slider_inter_area.swipe({ 295 swipeLeft: function(event) { 296 if (!$(event.target).closest('.evcal_list_a').length) return; 297 go_to_slide_index('next', $el); 298 }, 299 swipeRight: function(event) { 300 if (!$(event.target).closest('.evcal_list_a').length) return; 301 go_to_slide_index('prev', $el); 302 }, 303 threshold: 75, // Minimum swipe distance 304 allowPageScroll: 'vertical' // Allow vertical scroll 305 }); 306 307 308 309 $el.on('click','.evoslider_nav',function(){ 310 var direction = $(this).hasClass('next')? 'next':'prev'; 311 go_to_slide_index( direction, $el ); 312 }); 313 314 // click on control dots 315 $el.on('click','.evosl_dot', function(){ 316 go_to_slide_index( $(this).data('index') , $el); 317 }); 318 }, 319 320 }; 321 322 slide.init(); 323 slide.interaction(); 324 325 326 }; 327 328 $('body').find('.evoslider').each(function(){ 329 $(this).slider_work(); 330 }); 331 332// slider control interaction 333 // hover over micro slides 334 $('.ajde_evcal_calendar.microSlider').on('mouseover','.eventon_list_event', function(){ 335 O = $(this); 336 OUT = O.closest('.evo_slider_outter'); 337 title = O.find('.evcal_event_title').html(); 338 339 p = O.position(); 340 341 OUT.append('<span class="evo_bub_box" style="">'+ title +"</span>"); 342 B = OUT.find('.evo_bub_box'); 343 344 l = p.left; 345 t = p.top- B.height() -30; 346 347 // adjust bubble to left if event on right edge 348 LM = OUT.width(); 349 tl = p.left + B.width() + O.width(); 350 if( tl > LM){ 351 l = l - B.width() +O.width()-20; 352 } 353 354 B.css({'top':t, 'left':l}); 355 356 OUT.find('.evo_bub_box').addClass('show'); 357 }).on('mouseout',function(){ 358 B = $(this).find('.evo_bub_box').remove(); 359 }); 360 361// go into a focused slide 362 function go_to_slide_index(new_slide_index, CAL, instant = false, move_dots = true, initial_call = false ){ 363 364 365 var slider = CAL.find('.evo_slider_slide_out'); 366 var SC = CAL.evosl_shortcode_data(); 367 var EL = CAL.find('.eventon_events_list'); 368 369 370 var all_slides = CAL.find('.slide').length; 371 var slides_visible = parseInt(EL.data('slides_visible')) ; 372 var __all_slides = CAL.find('.sl').length; // including dup 373 var slider_move_distance = EL.data('slider_move_distance'); 374 var _do_merge = false; 375 376 // current slide dat 377 var cur_slide_index = parseInt(EL.data('slideindex')); 378 var cur_mart = parseFloat(EL.css('margin-top') ); 379 var cur_slider_height = slider.height(); 380 const current_first_visible_slide_elm = CAL.find('.slide[data-index="'+ cur_slide_index +'"]'); 381 var cur_marl = parseFloat(EL.css('margin-left')); 382 383 // new slide data 384 var new_marL = new_marT = 0; 385 386 if( new_slide_index == 'next' || new_slide_index == 'prev'){ 387 if( new_slide_index == 'next'){ 388 var new_slide_index = cur_slide_index + 1; 389 if( new_slide_index > ( all_slides +1 ) ) new_slide_index = 1; 390 }else{ 391 var new_slide_index = cur_slide_index - 1; 392 if( new_slide_index < 0 ) new_slide_index = all_slides; 393 } 394 } 395 396 const new_first_visible_slide_elm = CAL.find('.sl[data-index="'+ new_slide_index +'"]'); 397 var _prev_slides_count = new_first_visible_slide_elm.prevAll('.sl').length; 398 399 400 // vertical 401 if( SC.slider_type == 'vertical' ){ 402 403 for (var i = 0; i < (_prev_slides_count ); i++) { 404 new_marT += CAL.find('.sl').eq( i ).outerHeight(true); 405 } 406 new_marT = -1 * new_marT; 407 408 409 // horizontal 410 }else{ 411 412 413 // calculate width of hidden slides to left 414 for (var i = 0; i < _prev_slides_count; i++) { 415 //new_marL += CAL.find('.slide').eq( i )[0].getBoundingClientRect().width; 416 var ww = CAL.find('.sl').eq( i ).width();
417 new_marL += ww; 418 } 419 420 new_marL = -1 * new_marL; 421 422 } 423 424 //console.log( _prev_slides_count+ ' CS'+cur_slide_index +' NS'+ new_slide_index +' SV'+slides_visible+' '+ cur_marl +'/'+new_marL); 425 426 427 EL.data('slideindex', new_slide_index); 428 429 // animation 430 if( instant){ 431 EL.css({ 432 marginLeft: new_marL, 433 marginTop: new_marT, 434 }); 435 }else{ 436 EL.animate({ 437 marginLeft: new_marL, 438 marginTop: new_marT, 439 }, parseInt(SC.slider_speed) , 'easeOutCirc'); 440 } 441 442 443 // merge to looping 444 setTimeout(function(){ 445 446 new_marL = new_marT = 0; 447 448 const new_first_visible_slide_elm = CAL.find('.sl[data-index="'+ new_slide_index +'"]'); 449 var _prev_slides_count = new_first_visible_slide_elm.prevAll('.sl').length - ( slides_visible - 1); 450 var _next_slides_count = new_first_visible_slide_elm.nextAll('.sl').length - ( slides_visible - 1); 451 452 453 // go to beginning 454 //if( new_slide_index == all_slides && _next_slides_count == 0){ 455 if( cur_slide_index == all_slides && new_slide_index == ( all_slides + 1) ){ 456 457 const new_first_visible_slide_elm = CAL.find('.sl[data-index="'+ 1 +'"]'); 458 var _prev_slides_count = new_first_visible_slide_elm.prevAll('.sl').length; 459 460 for (var i = 0; i < _prev_slides_count; i++) { 461 var ww = CAL.find('.sl').eq( i ).width(); 462 var hh = CAL.find('.sl').eq( i ).outerHeight(true); 463 new_marL += ww; 464 new_marT += hh; 465 } 466 467 if( SC.slider_type == 'vertical' ){ 468 new_marL = 0; 469 }else{ 470 new_marT = 0; 471 } 472 473 EL.css({ 474 marginLeft: new_marL * -1, 475 marginTop: new_marT * -1, 476 }); 477 EL.data('slideindex', 1 ); 478 new_slide_index = 1; 479 } 480 481 // go to end 482 if( new_slide_index == 0 ){ 483 484 const new_first_visible_slide_elm = CAL.find('.sl[data-index="'+ all_slides +'"]'); 485 var _prev_slides_count = new_first_visible_slide_elm.prevAll('.sl').length; 486 487 for (var i = 0; i < _prev_slides_count; i++) { 488 var ww = CAL.find('.sl').eq( i ).width(); 489 var hh = CAL.find('.sl').eq( i ).outerHeight(true); 490 new_marL += ww; 491 new_marT += hh; 492 } 493 494 if( SC.slider_type == 'vertical' ){ 495 new_marL = 0; 496 }else{ 497 new_marT = 0; 498 } 499 500 EL.css({ 501 marginLeft: new_marL * -1, 502 marginTop: new_marT * -1, 503 }); 504 505 EL.data('slideindex', ( all_slides ) ); 506 new_slide_index = all_slides; 507 } 508 509 }, parseInt(SC.slider_speed) + 100 ); 510 511 // set dot focus 512 setTimeout(function(){ 513 if( move_dots){ 514 //console.log(new_slide_index); 515 CAL.find('.evosl_footer .evosl_dot').removeClass('f'); 516 CAL.find('.evosl_footer .evosl_dot').eq( new_slide_index -1 ).addClass('f'); 517 } 518 }, parseInt(SC.slider_speed) + 101 ); 519 520 521 } 522 523// whether an event color is lighter or dark 524 function _hex_is_light(color) { 525 if( color === undefined ) return false; 526 const hex = color.replace('#', ''); 527 const c_r = parseInt(hex.substr(0, 2), 16); 528 const c_g = parseInt(hex.substr(2, 2), 16); 529 const c_b = parseInt(hex.substr(4, 2), 16); 530 const brightness = ((c_r * 299) + (c_g * 587) + (c_b * 114)) / 1000; 531 return brightness > 220; 532 } 533 534});
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.