1/** 2 * Process ads with cache busting 'On' 3 */ 4var advanced_ads_layer_cache_busting; 5if ( ! advanced_ads_layer_cache_busting ) { 6 advanced_ads_layer_cache_busting = { 7 doc_loaded: false, 8 bufferedAds: [], 9 10 flush: function() { 11 var _bufferedAds = this.bufferedAds; 12 this.bufferedAds = []; 13 14 for ( var i = 0; i < _bufferedAds.length; i++ ) { 15 this._process_item( jQuery( _bufferedAds[i] ) ); 16 17 } 18 19 }, 20 21 _process_item: function( banner ) { 22 var banner_id = banner.attr('id'); 23 24 advads_items.conditions[banner_id] = advads_items.conditions[banner_id] || {}; 25 26 // advads_layer_center_if_not_sticky ( banner ) 27 28 if (banner.hasClass('advads-effect') ) { 29 advads_layer_gather_effects(banner_id); 30 } 31 32 if ( ! banner.hasClass( 'use-fancybox' ) ) { 33 advads_layer_gather_background( banner_id ); 34 } 35 36 advads_layer_gather_auto_close( banner ); 37 38 // display onload ad right away 39 if (banner.hasClass(advanced_ads_layer_settings.layer_class + '-onload')) { 40 advads_items.conditions[banner_id].scrolloffset = true; 41 advads_check_item_conditions(banner_id); 42 // exit popup (if the user leaves the page) 43 } else if (banner.hasClass(advanced_ads_layer_settings.layer_class + '-exit')) { 44 ouibounce(banner[0], { 45 // the modal will fire any time the page is reloaded, for the same user 46 aggressive: true, 47 // amount of time that firing is surpressed for 48 timer: 0, 49 callback: function() { 50 // reset display to none after Ouibounce 51 banner.css('display', 'none'); 52 advads_items.conditions[banner_id].scrolloffset = true; 53 advads_check_item_conditions(banner_id); 54 } 55 }); 56 // display after delay of n seconds 57 } else if ( banner.hasClass( advanced_ads_layer_settings.layer_class + '-delay' ) ) { 58 var delay = ( parseInt( banner.attr( 'data-advads-layer-delay' ), 10 ) ) || 0; 59 setTimeout( function() { 60 advads_items.conditions[banner_id].delay_expired = true; 61 advads_check_item_conditions(banner_id); 62 }, delay ); 63 // ad depends on scrolling 64 } else { 65 // calculate scroll length (document height - window height) 66 var advads_scrollhalf = (jQuery(document).height() - jQuery(window).height()) / 2; 67 68 var scroll_handler = function ( event ) { 69 if ( jQuery.inArray( banner_id, advads_items.showed ) !== -1 ) { 70 //console.log( 'off scroll event' ) 71 jQuery( window ).off( 'scroll', scroll_handler ); 72 return; 73 } 74 75 // display scroll ads right after scrolling stopped 76 if ( banner.hasClass( advanced_ads_layer_settings.layer_class + '-stop' ) ) { 77 advads_items.conditions[banner_id].scrolloffset = true; 78 advads_check_item_conditions( banner_id ); 79 } 80 81 // display ads after half the page was scrolled 82 if ( jQuery( document ).scrollTop() >= advads_scrollhalf) { 83 if ( banner.hasClass( advanced_ads_layer_settings.layer_class + '-half' ) ) { 84 advads_items.conditions[banner_id].scrolloffset = true; 85 advads_check_item_conditions(banner_id); 86 } 87 } 88 89 // display ads after custom scroll offset 90 if ( banner.hasClass( advanced_ads_layer_settings.layer_class + '-offset' ) ) { 91 var custom_offset = advads_extract_custom_offset_from_class( '#' + banner_id ); 92 if ( jQuery( document ).scrollTop() >= custom_offset ) { 93 advads_items.conditions[banner_id].scrolloffset = true; 94 advads_check_item_conditions( banner_id ); 95 } 96 } 97 } 98 99 100 jQuery( window ).onEnd( 'scroll', scroll_handler, 100); 101 } 102 103 }, 104 105 observe: function (event) { 106 if ( event.event === 'postscribe_done' && event.ref && event.ad ) { 107 var banner = jQuery( event.ref ).children( 'div' ); 108 if ( ! banner.hasClass( advanced_ads_layer_settings.layer_class + '' ) ) { 109 return; 110 } 111 112 if ( advanced_ads_layer_cache_busting.doc_loaded ) { 113 advanced_ads_layer_cache_busting.bufferedAds.push( banner ); 114 advanced_ads_layer_cache_busting.flush(); 115 } 116 } 117 }, 118 } 119} 120 121// Advanced Ads Pro is enabled 122if ( typeof advanced_ads_pro === 'object' && advanced_ads_pro !== null ) { 123 // observe cache busting done event
124 advanced_ads_pro.postscribeObservers.add( advanced_ads_layer_cache_busting.observe ); 125} 126 127/** 128 * Process ads with cache busting 'Off' 129 */ 130var layers = function() { 131 advanced_ads_layer_cache_busting.doc_loaded = true; 132 133 jQuery('.' + advanced_ads_layer_settings.layer_class).each(function () { 134 advanced_ads_layer_cache_busting.bufferedAds.push(jQuery(this)); 135 }); 136 137 advanced_ads_layer_cache_busting.flush(); 138}; 139 140if (typeof advads !== 'undefined' && typeof advads.privacy.dispatch_event !== 'undefined') { 141 document.addEventListener('advanced_ads_privacy', function (event) { 142 if ( 143 (event.detail.state === 'accepted' || event.detail.state === 'not_needed') 144 && window.advanced_ads_layer_settings.placements !== null 145 ) { 146 window.advanced_ads_layer_settings.placements.forEach(function (value) { 147 document.querySelectorAll('script[type="text/plain"][data-tcf="waiting-for-consent"][data-placement="' + value + '"]').forEach(advads.privacy.decode_ad); 148 }); 149 } 150 151 layers(); 152 }); 153} else { 154 ( window.advanced_ads_ready || jQuery( document ).ready ).call( null, function() { 155 layers(); 156 }); 157} 158 159/** 160 * adjust position for centered layer banner if not added by the sticky plugin 161 * @param {string} $ad jQuery object (wrapped set) 162 */ 163function advads_layer_center_if_not_sticky( $ad ) { 164 if ($ad.hasClass('is-sticky')) { 165 return; 166 } 167 /* 168 var left = ( jQuery( window ).width() - ad.width() ) / 2; 169 var top = ( jQuery( window ).height() - ad.height() ) / 2; 170 ad.css('left', left); 171 ad.css('top', top); 172 ad.css('position', 'fixed'); 173 */ 174 175 var width = parseInt($ad.attr('data-width'), 10); 176 var height = parseInt($ad.attr('data-height'), 10); 177 178 179 var is_transform_supported = getSupportedTransform(); 180 181 var transform_property = ''; 182 if (!height) { 183 if (is_transform_supported) { 184 transform_property += 'translateY(50%) '; 185 } else { 186 jQuery($ad).css({'top': '0', 'bottom': 'auto'}); 187 } 188 } 189 if (!width) { 190 if (is_transform_supported) { 191 transform_property += 'translateX(-50%) '; 192 } else { 193 jQuery($ad).css({'left': '0', 'right': 'auto'}); 194 } 195 196 } 197 if (transform_property) { 198 set_ad_transform($ad, transform_property); 199 } 200} 201 202/** 203 * gather information about display effects and duration 204 * @param {string} id of the ad, without # 205 */ 206function advads_layer_gather_effects(id) { 207 var banner = jQuery('#' + id); 208 // display effect duration 209 advads_items.effect_durations[id] = advads_extract_duration_from_class(banner); 210 // load display effects 211 if (banner.hasClass('advads-effect-fadein')) { 212 advads_items.display_effect_callbacks[id] = 'advads_display_effect_fadein'; 213 }; 214 if (banner.hasClass('advads-effect-show')) { 215 advads_items.display_effect_callbacks[id] = 'advads_display_effect_show'; 216 }; 217 if (banner.hasClass('advads-effect-slide')) { 218 advads_items.display_effect_callbacks[id] = 'advads_display_effect_slide'; 219 }; 220} 221 222/** 223 * gather information about background 224 * @param {string} id of the ad, without # 225 */ 226function advads_layer_gather_background(id) { 227 var banner = jQuery('#' + id); 228 // add display callback to the ads with background 229 if (banner.hasClass('advads-has-background') && banner.is(':hidden')) { 230 if (!advads_items.display_callbacks[id] != 'undefined') { 231 advads_items.display_callbacks[id] = {}; 232 var length = 0; 233 } else { 234 var length = advads_items.display_callbacks[id].length; 235 } 236 237 advads_items.display_callbacks[id][length] = 'advads_layer_display_background_callback'; 238 } 239} 240 241/** 242 * Gather auto close info and schedule auto close. 243 * 244 * @param {obj} $banner A jQuery object representing the banner wrapper. 245 */ 246function advads_layer_gather_auto_close( $banner ) { 247 var delay = parseInt( $banner.data( 'auto-close-delay'), 10 ); 248 if ( ! delay ) { return; } 249 var banner_id = $banner.attr('id'); 250 advads_items.display_callbacks[ banner_id ] = advads_items.display_callbacks[ banner_id ] || {}; 251 advads_items.display_callbacks[ banner_id ].auto_close = function( banner_id ) { 252 setTimeout( function() { 253 advads_layer_close_item( banner_id ); 254 }, delay ); 255 } 256} 257 258/** 259 * check if background can be removed 260 * 261 * @param {string} id id of the ad, without # 262 * @returns {bool} true, if background can be removed 263 */ 264function can_remove_background(item) { 265 advads_items.backgrounds[ item ] = false;
266 var remove = true; 267 jQuery.each( advads_items.backgrounds, function( i, val ) { 268 if ( val == true ) { 269 //if ( advads_items.conditions.hasOwnProperty(i) && advads_items.conditions[i].scrolloffset == true ) { 270 remove = false; 271 //break the loop 272 return false; 273 //} 274 } 275 }); 276 return remove; 277} 278 279/** 280 * check item conditions and display the ad if all conditions are true 281 * 282 * @param {string} id id of the ad, without # 283 * @returns {bool} true, if item can be displayed 284 */ 285function advads_check_item_conditions(id) { 286 var item = jQuery('#' + id); 287 if (item.length == 0) { 288 return; 289 } 290 291 var display = true; 292 jQuery.each(advads_items.conditions[id], function (method, flag) { 293 if (flag === false) { 294 // display the banner 295 display = false; 296 } 297 }); 298 299 if ( display ) { 300 advads_items.showed.push(id); 301 302 item.trigger( advanced_ads_layer_settings.layer_class + '-trigger' ); 303 304 if ( item.hasClass('use-fancybox') ) { 305 fancybox_display (id); 306 } else { 307 var ad = jQuery('#' + id); 308 309 // responsive CSS as we don't have CSS file. 310 switch( ad.attr('data-position') ) { 311 case 'topcenter': 312 case 'topright': 313 case 'center': 314 case 'centerright': 315 case 'bottomright': 316 case 'bottomcenter': 317 if ( ! parseInt( ad.attr( 'data-width' ), 10 ) ) { 318 if ( jQuery( window ).width() > 768 ) { 319 ad.css( 'width', 'auto' ); 320 } 321 } 322 break; 323 } 324 325 // TODO: Remove this block after verifying no issues in v2.1 or later. 326 327 /*var width = parseInt( ad.attr( 'data-width' ), 10 ); 328 var height = parseInt( ad.attr( 'data-height' ), 10 ); 329 var is_transform_supported = getSupportedTransform(); 330 331 switch ( jQuery(ad).attr('data-position') ) { 332 case 'topcenter': 333 if ( ! width ) { 334 if ( is_transform_supported ) { 335 set_ad_transform(ad, 'translateX(-50%)'); 336 } else { 337 jQuery( ad ).css({ 'left':'0', 'right':'auto', 'top':'0', 'bottom':'auto' }); 338 } 339 } 340 break; 341 case 'centerleft': 342 if ( ! height ) { 343 if ( is_transform_supported ) { 344 set_ad_transform(ad, 'translateY(50%)'); 345 } else { 346 jQuery( ad ).css({ 'left':'0', 'right':'auto', 'top':'0', 'bottom':'auto' }); 347 } 348 } 349 break; 350 case 'center': 351 var transform_property = ''; 352 if ( ! height ) { 353 if ( is_transform_supported ) { 354 transform_property += 'translateY(50%) '; 355 } else { 356 jQuery( ad ).css({ 'top':'0', 'bottom':'auto' }); 357 } 358 } 359 if ( ! width ) { 360 if ( is_transform_supported ) { 361 transform_property += 'translateX(-50%) '; 362 } else { 363 jQuery( ad ).css({ 'left':'0', 'right':'auto' }); 364 } 365 366 } 367 if (transform_property) { 368 set_ad_transform(ad, transform_property); 369 } 370 break; 371 case 'centerright': 372 if ( ! height ) { 373 if ( is_transform_supported ) { 374 set_ad_transform(ad, 'translateY(50%)'); 375 } else { 376 jQuery( ad ).css({ 'left':'0', 'right':'auto', 'top':'0', 'bottom':'auto' }); 377 } 378 379 } 380 break; 381 case 'bottomcenter': 382 if ( ! width ) { 383 if ( is_transform_supported ) { 384 set_ad_transform(ad, 'translateX(-50%)'); 385 } else { 386 jQuery( ad ).css({ 'left':'0', 'right':'auto', 'top':'0', 'bottom':'auto' }); 387 } 388 389 } 390 break; 391 } */ 392 393 advads_layer_call_display_callbacks( id ); 394 395 if (advads_items.display_effect_callbacks[id] == undefined) { 396 ad.show(); 397 } else { 398 var callback = window[advads_items.display_effect_callbacks[id]]; 399 callback(id); 400 } 401 } 402 } 403} 404 405/** 406 * shows the ad using fancybox plugin 407 * 408 * @param {string} id id of the ad, without # 409 */ 410function fancybox_display(id) { 411 var banner = jQuery('#' + id); 412 413 var settings = { 414 'speedIn' : 0, 415 'speedOut' : 0, 416 'showCloseButton' : true, 417 'hideOnOverlayClick' : banner.hasClass( 'advads-background-click-close' ), 418 'centerOnScroll' : true, 419 //'autoScale' : false, 420 //'autoDimensions' : false, 421 'margin' : 20, 422 'padding' : 10, 423 'onClosed': function() { 424 if ( typeof advads_items.close_functions[ id ] === 'function' ) { 425 advads_items.close_functions[ id ](); 426 } 427 }, 428 // Once the content is displayed. 429 'onComplete': function() { 430 advads_layer_call_display_callbacks( id ); 431 }, 432 } 433 434 if (advads_items.display_effect_callbacks[id] == undefined) { 435 settings['transitionIn'] = 'none'; 436 } else { 437 var callback = advads_items.display_effect_callbacks[id]; 438 switch ( callback ) { 439 case 'advads_display_effect_fadein': 440 settings['transitionIn'] = 'fade'; 441 break; 442 case 'advads_display_effect_show': 443 settings['transitionIn'] = 'elastic'; 444 break; 445 default: 446 settings['transitionIn'] = 'none'; 447 } 448 } 449 450 if ( ! banner.hasClass('advads-has-background') ) { 451 settings['overlayShow'] = false;
452 } 453 454 if ( ! banner.hasClass('advads-close') ) { 455 settings['showCloseButton'] = false; 456 } 457 // extract duration of the transitionIn effect 458 var speedIn = advads_extract_duration_from_class(banner); 459 settings['speedIn'] = ( speedIn ) ? speedIn : 0; 460 461 var position = jQuery(banner).attr('data-position'); 462 // css for Fancybox 463 var output_css = '#fancybox-close { right: -15px; }'; 464 output_css += '#fancybox-loading, #fancybox-loading div, #fancybox-overlay, #fancybox-wrap, #fancybox-wrap div {'; 465 output_css += '-webkit-box-sizing: content-box !important; -moz-box-sizing: content-box !important; box-sizing: content-box !important; }'; 466 467 switch ( position ) { 468 case 'topleft': 469 output_css += '#fancybox-wrap { position: fixed; bottom: auto !important; top: 0px !important; right: auto !important; left: 0px !important; }'; 470 break; 471 case 'topcenter': 472 output_css += '#fancybox-wrap { position: fixed; bottom: auto !important; top: 0px !important; }'; 473 break; 474 case 'topright': 475 output_css += '#fancybox-wrap { position: fixed; bottom: auto !important; top: 0px !important; right: 0px !important; left: auto !important; }'; 476 break; 477 case 'centerleft': 478 output_css += '#fancybox-wrap { left: 0px !important; right: auto !important; }'; 479 break; 480 case 'center': 481 break; 482 case 'centerright': 483 output_css += '#fancybox-wrap { right: 0px !important; left: auto !important; }'; 484 break; 485 case 'bottomleft': 486 output_css += '#fancybox-wrap { position: fixed; bottom: 0px !important; top: auto !important; right: auto !important; left: 0px !important; }'; 487 break; 488 case 'bottomcenter': 489 output_css += '#fancybox-wrap { position: fixed; bottom: 0px !important; top: auto !important; }'; 490 break; 491 case 'bottomright': 492 output_css += '#fancybox-wrap { position: fixed; bottom: 0px !important; top: auto !important; right: 0px !important; left: auto !important; }'; 493 break; 494 } 495 496 497 jQuery('#' + advanced_ads_layer_settings.layer_class + '-custom-css').html(output_css); 498 499 // show fancybox 500 if ( typeof jQuery.fancybox == 'function' ) { 501 banner.waitForImages( function() { 502 settings['content'] = banner.show(); 503 jQuery.fancybox( settings ); 504 }); 505 } 506} 507 508/** 509 * Call display callbacks. 510 * 511 * @param {string} banner_id id of the banner, without # 512 */ 513function advads_layer_call_display_callbacks( banner_id ) { 514 // iterate through all callback function and call them 515 advads_items.display_callbacks[ banner_id ] = advads_items.display_callbacks[ banner_id ] || {}; 516 jQuery.each( advads_items.display_callbacks[ banner_id ], function ( key, func ) { 517 if ( typeof func === 'string' ) { 518 func = window[ func ]; 519 } 520 func( banner_id ); 521 }); 522} 523 524/** 525 * return a custom offset extracted from a class name 526 * @param {str} field 527 * @returns {int} offset 528 */ 529function advads_extract_custom_offset_from_class(field) { 530 var offset = 0; 531 var classes = jQuery(field).attr('class'); 532 if (classes !== undefined) { 533 // create class array 534 classes = classes.split(/\s+/); 535 jQuery.each(classes, function (key, value) { 536 if (value === '') 537 return false; 538 // get information about the solution from a class 539 var pattern = new RegExp(advanced_ads_layer_settings.layer_class + '-offset-', 'gi'); 540 if (value.match(pattern)) { 541 infos = value.split('-'); 542 offset = parseInt(infos[3]) 543 return false; 544 } 545 }); 546 } 547 548 return offset; 549}; 550 551/** 552 * return a duration extracted from a class name 553 * @param {str} field 554 * @returns {int} offset 555 */ 556function advads_extract_duration_from_class(field) { 557 var duration = 0; 558 var classes = field.attr('class'); 559 if (classes !== undefined) { 560 // create class array 561 classes = classes.split(/\s+/); 562 jQuery.each(classes, function (key, value) { 563 if (value === '') 564 return false;
565 // get information about the solution from a class 566 if (value.match(/advads-duration-/gi)) { 567 infos = value.split('-'); 568 duration = parseInt(infos[2]) 569 return false; 570 } 571 }); 572 } 573 574 return duration; 575}; 576 577/** 578 * callback function in case a layer ad is displayed with a background 579 * @param {type} ad object 580 */ 581function advads_layer_display_background_callback(id) { 582 // display overlay in case it is attached to an ad still not visible 583 var banner = jQuery('#' + id); 584 // only display background if there is an unvisible ad with a background AND no background visible yet 585 if (banner.hasClass('advads-has-background') && banner.is(':hidden')) { 586 //there is background for this ad 587 advads_items.backgrounds[id] = true; 588 if (jQuery('.advads-background').length === 0) { 589 var args = { 590 "class": "advads-background", 591 "style": "position: fixed; bottom: 0; right: 0; display: block; width: 100%; height: 100%; background: #000; z-index: 9998; opacity:.5;", 592 } 593 if ( banner.hasClass( 'advads-background-click-close' ) ) { 594 args.click = function() { 595 jQuery( this ).remove(); 596 advads_layer_close_items(); 597 } 598 } 599 jQuery( '<div/>', args ).appendTo( 'body' ); 600 } 601 } 602} 603 604/** 605 * callback for display effect fadeIn 606 * @param {obj} ad container 607 */ 608function advads_display_effect_fadein(id) { 609 var banner = jQuery('#' + id); 610 var duration = parseInt(advads_items.effect_durations[id]); 611 banner.fadeIn(duration); 612} 613 614/** 615 * callback for display effect show 616 * @param {obj} ad container 617 */ 618function advads_display_effect_show(id) { 619 var banner = jQuery('#' + id); 620 var duration = parseInt(advads_items.effect_durations[id]); 621 banner.show(duration); 622} 623 624/** 625 * callback for display effect slideDown 626 * @link http://api.jquery.com/slideDown/ 627 * @param {obj} ad container 628 */ 629function advads_display_effect_slide(id) { 630 var banner = jQuery('#' + id); 631 var duration = parseInt(advads_items.effect_durations[id]); 632 banner.slideDown(duration); 633} 634 635/** 636 * check, if css transform is supported by user's browser 637 * 638 * [http://stackoverflow.com/a/12625986] 639 */ 640function getSupportedTransform() { 641 var prefixes = 'transform WebkitTransform MozTransform OTransform msTransform'.split(' '); 642 var div = document.createElement('div'); 643 for(var i = 0; i < prefixes.length; i++) { 644 if(div && div.style[prefixes[i]] !== undefined) { 645 return prefixes[i]; 646 } 647 } 648 return false; 649} 650 651/** 652 * set css transform property for the ad 653 * @param {string} jQuery object (wrapped set) 654 * @param {string} values of property 655 */ 656function set_ad_transform( ad, transform_properties ) { 657 jQuery( ad ).css({ 658 '-webkit-transform': transform_properties, 659 '-moz-transform': transform_properties, 660 'transform': transform_properties 661 }); 662} 663 664/** 665 * Close item (when user clicks on the close button/background or automatically after n sec.). 666 * 667 * @param {string} item_id Id of the item. 668 */ 669function advads_layer_close_item( item_id ) { 670 if ( typeof advads_items.close_functions[ item_id ] === 'function' ) { 671 advads_items.close_functions[ item_id ](); 672 advads_items.close_functions[ item_id ] = null; 673 674 // Close Fancybox window. 675 if ( jQuery.fancybox && typeof jQuery.fancybox.close === 'function' ) { 676 jQuery.fancybox.close(); 677 } 678 } 679} 680 681/** 682 * Close all items. 683 */ 684function advads_layer_close_items() { 685 for ( var item_id in advads_items.close_functions ) { 686 if ( advads_items.close_functions.hasOwnProperty( item_id ) ) { 687 advads_layer_close_item( item_id ); 688 } 689 } 690} 691 692/** 693 * Close an item if it contains a GAM ad that did not fill the space. 694 */ 695document.addEventListener( 'aagam_empty_slot', function ( ev ) { 696 const div = document.getElementById( ev.detail ); 697 if ( ! div ) { 698 return; 699 } 700 701 const layer = div.closest( '.' + document.body.classList.value.split( 'aa-prefix-' )[1].split( ' ' )[0] + 'layer' ); 702 703 if ( ! layer ) { 704 return; 705 } 706 707 if ( typeof advads_items.close_functions[layer.id] === 'function' ) { 708 advads_layer_close_item( layer.id ); 709 } else { 710 let interval = setInterval( function () { 711 if ( typeof advads_items.close_functions[layer.id] === 'function' ) { 712 advads_layer_close_item( layer.id ); 713 clearInterval( interval ); 714 } 715 }, 750 ); 716 } 717} ); 718 719//https://github.com/tonai/jquery-onend 720!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):"object"==typeof exports?module.exports=a(require("jquery")):a(jQuery)}(function(a){a.fn.onEnd=function(){var a,b=Array.prototype.slice.call(arguments),c=b.pop(),d=b.pop(),e=function(){var b=Array.prototype.slice.call(arguments);clearTimeout(a),a=setTimeout(function(){d.apply(this,b)}.bind(this),c)};e.guid=d.guid||(d.guid=jQuery.guid++),b.push(e),this.on.apply(this,b)}}); 721 722/*! 723 * Ouibounce 724 * https://github.com/carlsednaoui/ouibounce 725 * 726 * Copyright (c) 2014 Carl Sednaoui 727 * Licensed under the MIT license (http://www.opensource.org/licenses/mit-license.php). 728 **/ 729!function(e,n){"function"==typeof define&&define.amd?define(n):"object"==typeof exports?module.exports=n(require,exports,module):e.ouibounce=n()}(this,function(e,n,o){return function(e,n){"use strict";function o(e,n){return"undefined"==typeof e?n:e}function i(e){var n=24*e*60*60*1e3,o=new Date;return o.setTime(o.getTime()+n),"; expires="+o.toUTCString()}function t(){s()||(L.addEventListener("mouseleave",u),L.addEventListener("mouseenter",r),L.addEventListener("keydown",c))}function u(e){e.clientY>k||(D=setTimeout(m,y))}function r(){D&&(clearTimeout(D),D=null)}
729function c(e){g||e.metaKey&&76===e.keyCode&&(g=!0,D=setTimeout(m,y))}function d(e,n){return a()[e]===n}function a(){for(var e=document.cookie.split("; "),n={},o=e.length-1;o>=0;o--){var i=e[o].split("=");n[i[0]]=i[1]}return n}function s(){return d(T,"true")&&!v}function m(){s()||(e&&(e.style.display="block"),E(),f())}function f(e){var n=e||{};"undefined"!=typeof n.cookieExpire&&(b=i(n.cookieExpire)),n.sitewide===!0&&(w=";path=/"),"undefined"!=typeof n.cookieDomain&&(x=";domain="+n.cookieDomain),"undefined"!=typeof n.cookieName&&(T=n.cookieName),document.cookie=T+"=true"+b+x+w,L.removeEventListener("mouseleave",u),L.removeEventListener("mouseenter",r),L.removeEventListener("keydown",c)}var l=n||{},v=l.aggressive||!1,k=o(l.sensitivity,20),p=o(l.timer,1e3),y=o(l.delay,0),E=l.callback||function(){},b=i(l.cookieExpire)||"",x=l.cookieDomain?";domain="+l.cookieDomain:"",T=l.cookieName?l.cookieName:"viewedOuibounceModal",w=l.sitewide===!0?";path=/":"",D=null,L=document.documentElement;setTimeout(t,p);var g=!1;return{fire:m,disable:f,isDisabled:s}}}); 730 731/*! waitForImages jQuery Plugin 2015-06-02 */ 732!function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a(jQuery)}(function(a){var b="waitForImages";a.waitForImages={hasImageProperties:["backgroundImage","listStyleImage","borderImage","borderCornerImage","cursor"],hasImageAttributes:["srcset"]},a.expr[":"]["has-src"]=function(b){return a(b).is('img[src][src!=""]')},a.expr[":"].uncached=function(b){return a(b).is(":has-src")?!b.complete:!1},a.fn.waitForImages=function(){var c,d,e,f=0,g=0,h=a.Deferred();if(a.isPlainObject(arguments[0])?(e=arguments[0].waitForAll,d=arguments[0].each,c=arguments[0].finished):1===arguments.length&&"boolean"===a.type(arguments[0])?e=arguments[0]:(c=arguments[0],d=arguments[1],e=arguments[2]),c=c||a.noop,d=d||a.noop,e=!!e,!a.isFunction(c)||!a.isFunction(d))throw new TypeError("An invalid callback was supplied.");return this.each(function(){var i=a(this),j=[],k=a.waitForImages.hasImageProperties||[],l=a.waitForImages.hasImageAttributes||[],m=/url\(\s*(['"]?)(.*?)\1\s*\)/g;e?i.find("*").addBack().each(function(){var b=a(this);b.is("img:has-src")&&j.push({src:b.attr("src"),element:b[0]}),a.each(k,function(a,c){var d,e=b.css(c);if(!e)return!0;for(;d=m.exec(e);)j.push({src:d[2],element:b[0]})}),a.each(l,function(c,d){var e,f=b.attr(d);return f?(e=f.split(","),void a.each(e,function(c,d){d=a.trim(d).split(" ")[0],j.push({src:d,element:b[0]})})):!0})}):i.find("img:has-src").each(function(){j.push({src:this.src,element:this})}),f=j.length,g=0,0===f&&(c.call(i[0]),h.resolveWith(i[0])),a.each(j,function(e,j){var k=new Image,l="load."+b+" error."+b;a(k).one(l,function m(b){var e=[g,f,"load"==b.type];return g++,d.apply(j.element,e),h.notifyWith(j.element,e),a(this).off(l,m),g==f?(c.call(i[0]),h.resolveWith(i[0]),!1):void 0}),k.src=j.src})}),h.promise()}});
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.