1/** 2 * WP jQuery Lightbox 3 * Version 1.4.5 - 2013-06-09 4 * @author Ulf Benjaminsson (http://www.ulfben.com) 5 * This is a modified version of Warren Krevenkis Lightbox-port (see notice below) for use in the WP jQuery Lightbox- 6 * plugin (http://wordpress.org/extend/plugins/wp-jquery-lightbox/) 7 * Modifications include: 8 * . added slideshow 9 * . added swipe-support 10 * . added "support" for WordPress admin bar. 11 * . improved the resizing code to respect aspect ratio 12 * . improved scaling routines to maximize images while taking captions into account 13 * . added support for browser resizing and orientation changes 14 * . grabs image caption from WordPress [gallery] or media library output 15 * . using WordPress API to localize script (with safe fallbacks) 16 * . grabs image title if the link lacks one 17 * . using rel attribute instead of class 18 * . auto-lightboxing all links after page load 19 * . replaced explicit IMG-urls with divs, styled through the CSS. 20 * . honors empty captions / titles 21 * . use only title if captions is identical 22 * . added support for disabling all animations 23 * . using no-conflict mode (for good measure) 24 **/ 25/** 26 * jQuery Lightbox 27 * Version 0.5 - 11/29/2007 28 * @author Warren Krewenki 29 * This package is distributed under the BSD license. 30 * For full license information, see LICENSE.TXT 31 * Based on Lightbox 2 by Lokesh Dhakar (http://www.huddletogether.com/projects/lightbox2/) 32 * Originally written to make use of the Prototype framework, and Script.acalo.us, now altered to use jQuery. 33 **/ 34 /** toyNN: [email protected]: fixed IE7-8 incompatabilities in 1.3.* branch **/ 35(function($){ 36 //http://stackoverflow.com/a/16187766/347764 37 function versionCompare(a, b){ 38 var i, l, d; 39 a = a.split('.'); 40 b = b.split('.'); 41 l = Math.min(a.length, b.length); 42 for (i=0; i<l; i++) { 43 d = parseInt(a[i], 10) - parseInt(b[i], 10); 44 if (d !== 0) { 45 return d; 46 } 47 } 48 return a.length - b.length; 49 }//End of function versionCompare 50 51 $.fn.lightbox = function(options) { 52 var opts = $.extend({}, $.fn.lightbox.defaults, options); 53 if($("#overlay").is(':visible')){//to resize the overlay whenever doLightbox is invoked 54 $(window).trigger('resize'); //we need this to deal with InfiniteScroll and similar. 55 } 56 function onClick() { 57 initialize(); 58 start(this); 59 return false; 60 } 61 if(versionCompare($.fn.jquery, '1.7') > 0){ 62 return $(this).on("click", onClick); 63 }else{ 64 return $(this).on("click", onClick); //deprecated since 1.7 65 } 66 function initialize() { 67 $(window).bind('orientationchange', resizeListener); 68 $(window).bind('resize', resizeListener); 69 $('#overlay').remove(); 70 $('#lightbox').remove(); 71 opts.isIE8 = isIE8(); // //http://www.grayston.net/2011/internet-explorer-v8-and-opacity-issues/ 72 opts.inprogress = false; 73 opts.auto = -1; 74 var txt = opts.strings; 75 76 //WD-187 -- options 77 opts.bannerBinContainerHeight = 0; 78 var bannerBin = true; 79 opts.bannerBin = bannerBin; 80 opts.instanceNo = ''; 81 var bannerBinData = '<div id="bannerBinContainer" class="clearfix"></div>'; //Banner comes here..... 82 83 var outerImage = '<div id="outerImageContainer"><div id="imageContainer"><iframe id="lightboxIframe" /><img id="lightboxImage"><div id="hoverNav"><a href="javascript://" title="' + txt.prevLinkTitle + '" id="prevLink"></a><a href="javascript://" id="nextLink" title="' + txt.nextLinkTitle + '"></a></div><div id="jqlb_loading"><a href="javascript://" id="loadingLink"><div id="jqlb_spinner"></div></a></div></div></div>'; 84 var imageData = '<div id="imageDataContainer" class="clearfix"><div id="imageData"><div id="imageDetails"><span id="caption"></span><p id="controls"><span id="numberDisplay"></span> <span id="downloadLink"><a href="" target="'+opts.linkTarget+'">' + txt.download + '</a></span></p></div><div id="bottomNav">'; 85 if (opts.displayHelp) { 86 imageData += '<span id="helpDisplay">' + txt.help + '</span>'; 87 } 88 imageData += '<a href="javascript://" id="bottomNavClose" title="' + txt.closeTitle + '"><div id="jqlb_closelabel"></div></a></div></div></div>'; 89 var string; 90 if (opts.navbarOnTop) { 91 if (bannerBin) 92 string = '<div id="overlay"></div><div id="lightbox">' + imageData + outerImage + bannerBinData + '</div>'; 93 else 94 string = '<div id="overlay"></div><div id="lightbox">' + imageData + outerImage + '</div>'; 95 96 $("body").append(string); 97 $("#imageDataContainer").addClass('ontop'); 98 99 if (bannerBin) 100 $("#bannerBinContainer").addClass('ontop'); 101 } else { 102 if (bannerBin) 103 string = '<div id="overlay"></div><div id="lightbox">' + bannerBinData + outerImage + imageData + '</div>'; 104 else 105 string = '<div id="overlay"></div><div id="lightbox">' + outerImage + imageData + '</div>'; 106 $("body").append(string); 107 } 108 $("#overlay").click(function () { end(); }).hide(); 109 $("#lightbox").click(function () { end(); }).hide(); 110 $("#loadingLink").click(function () { end(); return false; }); 111 $("#bottomNavClose").click(function () { end(); return false; }); 112 $('#outerImageContainer').width(opts.widthCurrent).height(opts.heightCurrent); 113 $('#imageDataContainer').width(opts.widthCurrent); 114 if (bannerBin) 115 $('#bannerBinContainer').width(opts.widthCurrent); 116 if (!opts.imageClickClose) { 117 $("#lightboxImage").click(function () { return false; }); 118 $("#hoverNav").click(function () { return false; }); 119 } 120 }; 121 //allow image to reposition & scale if orientation change or resize occurs. 122 function resizeListener(e) { 123 if (opts.resizeTimeout) { 124 clearTimeout(opts.resizeTimeout); 125 opts.resizeTimeout = false;
126 } 127 opts.resizeTimeout = setTimeout(function () { doScale(); }, 50); //a delay to avoid duplicate event calls. 128 } 129 function getPageSize(){ 130 var pgDocHeight = $(document).height(); 131 if (opts.isIE8 && pgDocHeight > 4096) { 132 pgDocHeight = 4096; 133 } 134 var viewportHeight = $(window).height() - opts.adminBarHeight; 135 //$(document).width() returns width of HTML document 136 return new Array($(document).width(), pgDocHeight, $(window).width(), viewportHeight, $(document).height()); 137 }; 138 //code for IE8 check provided by http://kangax.github.com/cft/ 139 function isIE8() { 140 var isBuggy = false; 141 if (document.createElement) { 142 var el = document.createElement("div"); 143 if (el && el.querySelectorAll) { 144 el.innerHTML = "<object><param name=\"\"></object>"; 145 isBuggy = el.querySelectorAll("param").length != 1; 146 } 147 el = null; 148 } 149 return isBuggy; 150 }; 151 function getPageScroll() { 152 var xScroll = 0; var yScroll = 0; 153 if (self.pageYOffset) { 154 yScroll = self.pageYOffset; 155 xScroll = self.pageXOffset; 156 } else if (document.documentElement && document.documentElement.scrollTop) { // Explorer 6 Strict 157 yScroll = document.documentElement.scrollTop; 158 xScroll = document.documentElement.scrollLeft; 159 } else if (document.body) {// all other Explorers 160 yScroll = document.body.scrollTop; 161 xScroll = document.body.scrollLeft; 162 } 163 if(opts.adminBarHeight && parseInt($('#wpadminbar').css('top'), 10) === 0){ 164 yScroll += opts.adminBarHeight; 165 } 166 return new Array(xScroll, yScroll); 167 }; 168 function start(imageLink) { 169 // $("select, embed, object").hide(); 170 var arrayPageSize = getPageSize(); 171 var arrayPagePos = getPageScroll(); 172 var newTop = 0; 173 if (opts.bannerBin) 174 //tried to add bannerBinContainer height. 175 //$("#overlay").hide().css({width: arrayPageSize[0] + 'px', height: (arrayPageSize[1] + $("#bannerBinContainer").height()) + 'px', opacity: opts.overlayOpacity}).fadeIn(400); 176 $("#overlay").hide().css({width: arrayPageSize[0] + 'px', height: arrayPageSize[1] + 'px', opacity: opts.overlayOpacity}).fadeIn(400); 177 else 178 $("#overlay").hide().css({width: arrayPageSize[0] + 'px', height: arrayPageSize[1] + 'px', opacity: opts.overlayOpacity}).fadeIn(400); 179 180 if (opts.isIE8 && arrayPageSize[1] == 4096) { 181 if (arrayPagePos[1] >= 1000) { 182 newTop = arrayPagePos[1] - 1000; 183 if ((arrayPageSize[4] - (arrayPagePos[1] + 3096)) < 0) { 184 newTop -= (arrayPagePos[1] + 3096) - arrayPageSize[4]; 185 } 186 $("#overlay").css({ top: newTop + 'px' }); 187 } 188 } 189 var imageNum = 0; 190 var images = []; 191 opts.downloads = {}; //to keep track of any custom download links 192 var instance_gallery_first_time = ''; 193 194 //This is the loop of all images into gallery. 195 $("a").each(function(){ 196 if(!this.href || (this.rel != imageLink.rel)) { 197 return; 198 } 199 200 if (opts.bannerBin) { 201 galleryDivId = this.parentNode.parentNode.parentNode.id; 202 galleryIdArr = galleryDivId.split('-'); 203 204 instanceNo = galleryIdArr[1]; 205 //alert(instanceNo); 206 opts.instanceNo = instanceNo; 207 208 instance_gallery_first_time = instanceNo; 209 } 210 211 var title = ''; 212 var caption = ''; 213 var captionText = ''; 214 var jqThis = $(this); 215 var jqImg = jqThis.children('img:first-child'); 216 if (this.title) { //title of link 217 title = this.title; 218 } else if (jqImg.attr('title')) { 219 title = jqImg.attr('title'); //grab the title from the image if the link lacks one 220 } else if(jqImg.attr('alt')){ 221 title = jqImg.attr('alt'); //if neither link nor image have a title attribute 222 } 223 if (jqThis.parent().next('.gallery-caption').html()) { 224 var jq = jqThis.parent().next('.gallery-caption'); 225 caption = jq.html(); 226 captionText = jq.text(); 227 } else if (jqThis.next('.wp-caption-text').html()) { 228 caption = jqThis.next('.wp-caption-text').html(); 229 captionText = jqThis.next('.wp-caption-text').text(); 230 } 231 title = $.trim(title); 232 captionText = $.trim(captionText).replace('’', ''').replace('â', '\''); //http://nickjohnson.com/b/wordpress-apostrophe-vs-right-single-quote 233 if (title.toLowerCase() == captionText.toLowerCase()) { 234 title = caption; //to keep linked captions 235 caption = ''; //but not duplicate the text 236 } 237 var s = ''; 238 if (title != '') { 239 s = '<span id="titleText">' + title + '</span>'; 240 } 241 242 //stop to do this way into for loop..... //WD-547 243 /*if (opts.bannerBin && false) { 244 bannerBinContainerObj = document.getElementById('bannerBinContainer'); 245 bannerWidgetCodeObj = document.getElementById('bannerWidgetCode-'+instanceNo); 246 //bannerActualCodeObj = document.getElementById('banner-ajax-div-6252-2'); //temp check direct value. 247 248 //bannerBinContainerObj.innerHTML = '<div class="js-reload-banner" data-banner-id="676"><div class="adv-banner-center" data-id="676"><a href="http://itmwpb.com?bannerclick=676/" target=""><img src="http://itmwpb.com/wp-content/uploads/2014/12/CAR1_jpg.jpg" alt="CAR1_jpg" height="165" width="305" align="center"></a></div></div>'; 249 250 if (bannerWidgetCodeObj && bannerWidgetCodeObj != 'undefined') { 251 bannerDivInfo = bannerWidgetCodeObj.innerHTML; 252 //bannerDivInfo = jQuery('#bannerWidgetCode-'+instanceNo).html(); 253 254 //temp check direct value. 255 //bannerDivInfo = bannerActualCodeObj.innerHTML; 256 //bannerDivInfo = jQuery('#banner-ajax-div-6252-2').html(); 257 258 //alert(bannerDivInfo); 259 bannerDivInfo = bannerDivInfo.replace("adv-banner", "adv-banner-center"); 260 261 //stop to set this way from here. 262 bannerBinContainerObj.innerHTML = bannerDivInfo; 263 //jQuery('#bannerBinContainer').html(bannerDivInfo); 264 } 265 }//End of if (opts.bannerBin)*/ 266 if (jqImg.offsetParent().context.nextElementSibling == null){ 267 console.log("There is no caption"); 268 } else { 269 var title2 = jqImg.offsetParent().context.nextElementSibling.textContent; 270 caption = title2; 271 } 272 if (caption != '') { 273 if (title != ''){ 274 s += '<br />'; 275 } 276 s += '<span id="captionText">' + caption +'</span>'; 277 } 278 if(opts.displayDownloadLink || jqThis.attr("data-download")){ 279 opts.downloads[images.length] = jqThis.attr("data-download"); //use length as an index. convenient since it will always be unique 280 } 281 images.push(new Array(this.href, opts.displayTitle ? s : '', images.length)); 282 }); 283 if (images.length > 1) { 284 for (i = 0; i < images.length; i++) { 285 for (j = images.length - 1; j > i; j--) { 286 if (images[i][0] == images[j][0]) { 287 images.splice(j, 1); 288 } 289 } 290 } 291 while (images[imageNum][0] != imageLink.href) { imageNum++; } 292 } 293 opts.imageArray = images; 294 setLightBoxPos(arrayPagePos[1], arrayPagePos[0]).show();// calculate top and left offset for the lightbox 295 changeImage(imageNum); 296 setNav(); 297 //if (opts.bannerBin) { 298 //bannerWidgetCodeObj.innerHTML = ''; 299 //} 300 301 //WD-547 302 //just do this at end of the for loop. but right nos stop this code too. 303 /*if (opts.bannerBin && false) { 304 bannerBinContainerObj = document.getElementById('bannerBinContainer'); 305 bannerWidgetCodeObj = document.getElementById('bannerWidgetCode-'+instance_gallery_first_time); 306 //alert(bannerWidgetCodeObj.innerHTML); 307 bannerObjForGallery = getBannerObjectFromGalleryInstanceNo(instance_gallery_first_time); 308 //alert(bannerObjForGallery.innerHTML); 309 jQuery('#bannerBinContainer').html(bannerObjForGallery.innerHTML); 310 }*/ 311 312 //WD-547 313 if (opts.bannerBin) { 314 var instance_banner_first_time = 0; 315 316 /*bannerObjForGallery = getBannerObjectFromGalleryInstanceNo(instance_gallery_first_time); 317 //alert(bannerObjForGallery); 318 if (bannerObjForGallery) { 319 bannerObj = jQuery(bannerObjForGallery); 320 instance_banner_first_time = bannerObj.attr('data-instance-no'); 321 }*/ 322 323 //temp set direct check ajax url by adding here. 324 //var ajaxurl_banner_first_time = 'http://www.kprifm.com/wp-content/plugins/advertise/advertise-gallery-ajax.php?bannerGalleryAjax=true&callFromFile=banner-reload.js&bannerId=6252&dataAvailable=6252,6999&bannerInstance=2&siteId=124&bannerBinSlug=dfp-responsive-test&bannerbinId=123'; 325 326 bannerAjaxHiddenObjForGallery = getBannerAjaxHiddenObjectFromGalleryInstanceNo(instance_gallery_first_time); 327 //alert(bannerAjaxHiddenObjForGallery); 328 if (bannerAjaxHiddenObjForGallery) { 329 bannerAjaxHiddenId = bannerAjaxHiddenObjForGallery.id; 330 //alert(bannerAjaxHiddenId); 331 if (bannerAjaxHiddenId) { 332 idArr = bannerAjaxHiddenId.split('-'); 333 instance_banner_first_time = idArr[idArr.length - 1]; 334 } 335 } 336 337 //for cache. 338 var ajaxurl_banner_first_time = ''; 339 //alert(instance_banner_first_time); 340 341 //instance_banner_first_time = 2; //temp set direct hidden of banner. 342 343 if (instance_banner_first_time) { 344 var bannerHiddenObj = jQuery('#banner-ajax-hidden-'+instance_banner_first_time); 345 var bannerHiddenValue = bannerHiddenObj.val(); 346 //alert(bannerHiddenValue); 347 if (bannerHiddenValue) { 348 var bannerHiddenValueArr = bannerHiddenValue.split('#:#'); 349 350 var bannerId_GalleryReload = bannerHiddenValueArr[0]; 351 var data_available_GalleryReload = bannerHiddenValueArr[1]; 352 var instance_GalleryReload = bannerHiddenValueArr[2]; 353 var location_GalleryReload = bannerHiddenValueArr[3]; 354 var bannerbinId_GalleryReload = bannerHiddenValueArr[4]; 355 var advPluginUrl_GalleryReload = bannerHiddenValueArr[5]; 356 var siteId_GalleryReload = bannerHiddenValueArr[6]; 357 358 ajaxurl_banner_first_time = advPluginUrl_GalleryReload + 'advertise-gallery-ajax.php?bannerGalleryAjax=true&callFromFile=banner-reload.js&bannerId='+bannerId_GalleryReload+'&dataAvailable='+data_available_GalleryReload+'&bannerInstance='+instance_GalleryReload+'&siteId='+siteId_GalleryReload+'&bannerBinSlug='+location_GalleryReload+'&bannerbinId='+bannerbinId_GalleryReload; 359 } 360 } 361 362 //alert(ajaxurl_banner_first_time); 363 364 if (ajaxurl_banner_first_time) { 365 var isJWPlayerBanner = false;
366 var isSimpleBannerImage = false; 367 var isDFPBanner = false; 368 369 jQuery.ajax({ 370 url: ajaxurl_banner_first_time, //for cache. 371 dataType: 'html', 372 beforeSend: function ( xhr ) { 373 374 } 375 }).success(function(code){ 376 377 if (code) { 378 var isJWPlayerBannerCodePosition = code.search(/content\.jwplatform\.com/ig); 379 if(isJWPlayerBannerCodePosition > 0) { 380 isJWPlayerBanner = true; 381 } 382 383 var isSimpleBannerImageCodePosition = code.search(/cloudfront.net/ig); 384 if(isSimpleBannerImageCodePosition > 0) { 385 isSimpleBannerImage = true; 386 } 387 388 var isDFPCodePosition = code.search(/googletag/ig); 389 if(isDFPCodePosition > 0) { 390 isDFPBanner = true; 391 } 392 }//End of if (code) 393 394 //alert(isJWPlayerBanner + ' -- ' + isSimpleBannerImage + ' -- ' + isDFPBanner); 395 396 // Update banner code 397 bannerBinContainerObj = document.getElementById('bannerBinContainer'); 398 bannerDivInfo = code; 399 bannerDivInfo = bannerDivInfo.replace("adv-banner", "adv-banner-center"); 400 //alert(bannerDivInfo); 401 //bannerBinContainerObj.innerHTML = bannerDivInfo; 402 jQuery('#bannerBinContainer').html(bannerDivInfo); 403 404 /*setTimeout(function(){ bannerBinContainerObj = document.getElementById('bannerBinContainer'); 405 bannerDivInfo = code; bannerDivInfo = bannerDivInfo.replace("adv-banner", "adv-banner-center"); 406 jQuery('#bannerBinContainer').html(bannerDivInfo); 407 }, 2000);*/ 408 }); 409 } 410 } 411 }; 412 function setLightBoxPos(newTop, newLeft) { 413 if (opts.bannerBin) { 414 newTop = 50; 415 } 416 if (opts.resizeSpeed > 0) { 417 return $('#lightbox').animate({ top: newTop+ 'px', left: newLeft+ 'px' }, 250, 'linear'); 418 } 419 return $('#lightbox').css({ top: newTop + 'px', left: newLeft + 'px' }); 420 }; 421 function changeImage(imageNum) { 422 if (opts.inprogress != false) { 423 return; 424 } 425 if(opts.auto > 0){ 426 if (opts.bannerBin) { 427 $("html, body").animate({ scrollTop: 0 }, "slow"); 428 callReloadBanner(opts.bannerBin, opts.instanceNo); 429 } 430 } 431 opts.inprogress = true; 432 opts.activeImage = imageNum; 433 // hide elements during transition 434 $('#jqlb_loading').show(); 435 $('#lightboxImage').hide(); 436 $('#hoverNav').hide(); 437 $('#prevLink').hide(); 438 $('#nextLink').hide(); 439 doChangeImage(); 440 }; 441 function doChangeImage() { 442 opts.imgPreloader = new Image(); 443 /*opts.imgPreloader.onload = function () { 444 $('#lightboxImage').attr('src', opts.imageArray[opts.activeImage][0]); 445 doScale(); // once image is preloaded, resize image container 446 preloadNeighborImages(); 447 };*/ 448 //----------------------------------------------------------- 449 // opts.bannerBin 450 //Set image sizes to be specific. 451 //Currently it seems that most images are loading at their full size. Try to have the images have a maximum width of 800px 452 opts.imgPreloader.onload = function () { 453 //http://slopjong.de/2013/04/02/lightbox2-limit-the-max-image-size/ 454 var maxwidth = 800; 455 //alert('Original image size : ' + opts.imgPreloader.width + ' -- ' + opts.imgPreloader.height); 456 //if we want to keep original image as it is , if width less than 800 457 //but if width is max 800 then put it to 800 458 if(opts.imgPreloader.width > maxwidth) { 459 var scale = opts.imgPreloader.width / maxwidth; 460 opts.imgPreloader.width = maxwidth; 461 opts.imgPreloader.height = opts.imgPreloader.height / scale; 462 //alert('Image Scale : '+ opts.imgPreloader.width + ' -- ' + opts.imgPreloader.height); 463 $('#lightboxImage').css("maxWidth", maxwidth + "px"); 464 //$('#lightboxImage').width(maxwidth); 465 } 466 $('#lightboxImage').attr('src', opts.imageArray[opts.activeImage][0]); 467 doScale(); // once image is preloaded, resize image container 468 preloadNeighborImages(); 469 }; 470 //----------------------------------------------------------- 471 472 opts.imgPreloader.src = opts.imageArray[opts.activeImage][0]; 473 }; 474 function doScale() { 475 if (!opts.imgPreloader) { 476 return; 477 } 478 var newWidth = opts.imgPreloader.width; 479 var newHeight = opts.imgPreloader.height; 480 var arrayPageSize = getPageSize(); 481 var noScrollWidth = (arrayPageSize[2] < arrayPageSize[0]) ? arrayPageSize[0] : arrayPageSize[2]; //if viewport is smaller than page, use page width. 482 //alert('doScale : '+arrayPageSize[1] + ' -- ' + $("#bannerBinContainer").height()) 483 if (opts.bannerBin) { 484 if (opts.bannerBinContainerHeight) { 485 $("#overlay").css({ width: noScrollWidth + 'px', height: arrayPageSize[1] + 'px' }); 486 } 487 else { 488 $("#overlay").css({ width: noScrollWidth + 'px', height: (arrayPageSize[1] + $("#bannerBinContainer").height()) + 'px' }); 489 //$("#overlay").css({ width: noScrollWidth + 'px', height: arrayPageSize[1] + 'px' }); 490 opts.bannerBinContainerHeight = $("#bannerBinContainer").height(); 491 } 492 } 493 else 494 $("#overlay").css({ width: noScrollWidth + 'px', height: arrayPageSize[1] + 'px' }); 495 496 if (opts.bannerBin) 497 //var maxHeight = (arrayPageSize[3]) - ($("#imageDataContainer").height() + $("#bannerBinContainer").height() + (2 * opts.borderSize)); 498 var maxHeight = (arrayPageSize[3]) - ($("#imageDataContainer").height() + (2 * opts.borderSize)); 499 else 500 var maxHeight = (arrayPageSize[3]) - ($("#imageDataContainer").height() + (2 * opts.borderSize)); 501 502 var maxWidth = (arrayPageSize[2]) - (2*opts.borderSize); 503 //opts.fitToScreen = 1 set by default from js code only, instead of wordpress get option setting. 504 if (opts.fitToScreen){ 505 var displayHeight = maxHeight-opts.marginSize; 506 var displayWidth = maxWidth-opts.marginSize; 507 if($(window).width() > 500){ //high rez display 508 displayHeight -= opts.marginSize; 509 displayWidth -= opts.marginSize; 510 } 511 var ratio = 1; 512 if (newHeight > displayHeight) { 513 ratio = displayHeight / newHeight; //ex. 600/1024 = 0.58 514 } 515 newWidth = newWidth * ratio; 516 newHeight = newHeight * ratio; 517 ratio = 1; 518 if (newWidth > displayWidth) { 519 ratio = displayWidth / newWidth; //ex. 800/1280 == 0.62 520 } 521 newWidth = Math.round(newWidth * ratio); 522 newHeight = Math.round(newHeight * ratio); 523 } 524 var arrayPageScroll = getPageScroll(); 525 var centerY = arrayPageScroll[1] + (maxHeight * 0.5); 526 var newTop = centerY - newHeight * 0.5; 527 var newLeft = arrayPageScroll[0]; 528 //alert('Image set : '+ newWidth + ' -- ' + newHeight); //$('#lightboxImage').width(opts.imgPreloader.width).height(opts.imgPreloader.height); 529 $('#lightboxImage').width(newWidth).height(newHeight);
530 resizeImageContainer(newWidth, newHeight, newTop, newLeft); 531 }; //End of function doScale 532 function resizeImageContainer(imgWidth, imgHeight, lightboxTop, lightboxLeft) { 533 opts.widthCurrent = $("#outerImageContainer").outerWidth(); 534 opts.heightCurrent = $("#outerImageContainer").outerHeight(); 535 var widthNew = Math.max(300, imgWidth + (opts.borderSize * 2)); //300 = iphone. http://wordpress.org/support/topic/image-not-resized-correctly-with-wptouch?replies=6#post-4205735 536 var heightNew = (imgHeight + (opts.borderSize * 2)); 537 // scalars based on change from old to new 538 opts.xScale = (widthNew / opts.widthCurrent) * 100; 539 opts.yScale = (heightNew / opts.heightCurrent) * 100; 540 setLightBoxPos(lightboxTop, lightboxLeft); 541 updateDetails(); //toyNN: moved updateDetails() here, seems to work fine. 542 $('#imageDataContainer').animate({width:widthNew}, opts.resizeSpeed, 'linear'); 543 if (opts.bannerBin) 544 $('#bannerBinContainer').animate({width:widthNew}, opts.resizeSpeed, 'linear'); 545 $('#outerImageContainer').animate({width:widthNew,height:heightNew}, opts.resizeSpeed, 'linear', function () { 546 showImage(); 547 }); 548 if (opts.imageArray.length > 1) { 549 $('#hoverNav').show(); 550 $('#prevLink').show(); 551 $('#nextLink').show(); 552 } 553 $('#prevLink,#nextLink').height(imgHeight); 554 }; 555 function showImage() { 556 //assumes updateDetails have been called earlier! 557 $("#imageData").show(); 558 $('#caption').show(); 559 $('#jqlb_loading').hide(); 560 if (opts.resizeSpeed > 0) { 561 $('#lightboxImage').fadeIn("fast", function(){ 562 onImageVisible(); 563 }); 564 } else { 565 $('#lightboxImage').show(); 566 onImageVisible(); 567 } 568 opts.inprogress = false; 569 }; 570 function onImageVisible(){ 571 if(opts.auto != -1){ 572 clearTimeout(opts.auto); //in case we came here after mouse/keyboard interaction 573 opts.auto = setTimeout(function(){changeImage((opts.activeImage == (opts.imageArray.length - 1)) ? 0 : opts.activeImage + 1);}, opts.slidehowSpeed); 574 } 575 enableKeyboardNav(); 576 }; 577 function preloadNeighborImages() { 578 if (opts.imageArray.length > 1) { 579 preloadNextImage = new Image(); 580 preloadNextImage.src = opts.imageArray[(opts.activeImage == (opts.imageArray.length - 1)) ? 0 : opts.activeImage + 1][0] 581 preloadPrevImage = new Image(); 582 preloadPrevImage.src = opts.imageArray[(opts.activeImage == 0) ? (opts.imageArray.length - 1) : opts.activeImage - 1][0] 583 } else { 584 if ((opts.imageArray.length - 1) > opts.activeImage) { 585 preloadNextImage = new Image(); 586 preloadNextImage.src = opts.imageArray[opts.activeImage + 1][0]; 587 } 588 if (opts.activeImage > 0) { 589 preloadPrevImage = new Image(); 590 preloadPrevImage.src = opts.imageArray[opts.activeImage - 1][0]; 591 } 592 } 593 }; 594 function updateDetails() { 595 $('#numberDisplay').html(''); 596 $('#caption').html('').hide(); 597 var images = opts.imageArray; 598 var txt = opts.strings; 599 var i = opts.activeImage; 600 var downloadIndex = images[i][2]; 601 if (images[i][1] && opts.showInfo) { 602 $('#caption').html(images[i][1]).show(); 603 } 604 var pos = (images.length > 1 && opts.showInfo) ? txt.image + (i + 1) + txt.of + images.length : ''; 605 if(opts.slidehowSpeed && images.length > 1){ 606 var pp = (opts.auto === -1) ? txt.play : txt.pause; 607 pos += ' <a id="playpause" href="#">' + pp + '</a>'; 608 } 609 if(opts.displayDownloadLink || opts.downloads[downloadIndex]){ 610 var url = opts.downloads[downloadIndex] ? opts.downloads[downloadIndex] : images[i][0]; 611 $('#downloadLink').show().children().attr("href", url); 612 }else{ 613 $('#downloadLink').hide(); 614 } 615 if(pos != ''){
616 $('#numberDisplay').html(pos).show(); 617 } 618 }; 619 function setNav() { 620 if (opts.imageArray.length > 1) { 621 $('#prevLink').click(function () { 622 if (opts.bannerBin) { 623 $("html, body").animate({ scrollTop: 0 }, "slow"); 624 callReloadBanner(opts.bannerBin, opts.instanceNo); 625 } 626 changeImage((opts.activeImage == 0) ? (opts.imageArray.length - 1) : opts.activeImage - 1); return false; 627 }); 628 $('#nextLink').click(function () { 629 if (opts.bannerBin) { 630 $("html, body").animate({ scrollTop: 0 }, "slow"); 631 callReloadBanner(opts.bannerBin, opts.instanceNo); 632 } 633 changeImage((opts.activeImage == (opts.imageArray.length - 1)) ? 0 : opts.activeImage + 1); return false; 634 }); 635 if($.fn.touchwipe){ 636 $('#imageContainer').touchwipe({ 637 wipeLeft: function() { callReloadBanner(opts.bannerBin, opts.instanceNo); changeImage((opts.activeImage == (opts.imageArray.length - 1)) ? 0 : opts.activeImage + 1); }, 638 wipeRight: function() { callReloadBanner(opts.bannerBin, opts.instanceNo); changeImage((opts.activeImage == 0) ? (opts.imageArray.length - 1) : opts.activeImage - 1); }, 639 min_move_x: 20, 640 preventDefaultEvents: true 641 }); 642 } 643 if(opts.slidehowSpeed){ 644 $("#numberDisplay").unbind('click').click(function() { 645 if(opts.auto != -1){ 646 $(this).children("a").text(opts.strings.play); 647 clearTimeout(opts.auto); 648 opts.auto = -1; 649 }else{ 650 $(this).children("a").text(opts.strings.pause); 651 opts.auto = setTimeout(function(){changeImage((opts.activeImage == (opts.imageArray.length - 1)) ? 0 : opts.activeImage + 1);}, opts.slidehowSpeed); 652 } 653 return false; 654 }); 655 } 656 enableKeyboardNav(); 657 } 658 }; 659 function end() { 660 disableKeyboardNav(); 661 clearTimeout(opts.auto); 662 opts.auto = -1; 663 $('#lightbox').hide(); 664 $('#overlay').fadeOut(); 665 // $('select, object, embed').show(); 666 }; 667 function keyboardAction(e) { 668 var o = e.data.opts; 669 var keycode = e.keyCode; 670 var escapeKey = 27; 671 var key = String.fromCharCode(keycode).toLowerCase(); 672 if ((key == 'x') || (key == 'o') || (key == 'c') || (keycode == escapeKey)) { // close lightbox 673 end(); 674 } else if ((key == 'p') || (keycode == 37)) { // display previous image 675 disableKeyboardNav(); 676 changeImage((o.activeImage == 0) ? (o.imageArray.length - 1) : o.activeImage - 1); 677 } else if ((key == 'n') || (keycode == 39)) { // display next image 678 disableKeyboardNav(); 679 changeImage((o.activeImage == (o.imageArray.length - 1)) ? 0 : o.activeImage + 1); 680 } 681 return false; 682 }; 683 function enableKeyboardNav() { 684 $(document).unbind('keydown').bind('keydown', {opts: opts}, keyboardAction); 685 }; 686 function disableKeyboardNav() { 687 $(document).unbind('keydown'); 688 }; 689 }; 690 $.fn.lightbox.defaults = { 691 showInfo:false, 692 adminBarHeight:0, //28 693 overlayOpacity: 0.8, 694 borderSize: 10, 695 imageArray: new Array, 696 activeImage: null, 697 inprogress: false, //this is an internal state variable. don't touch. 698 widthCurrent: 250, 699 heightCurrent: 250, 700 xScale: 1, 701 yScale: 1, 702 displayTitle: true, 703 imageClickClose: true, 704 followScroll: false, 705 isIE8: false //toyNN:internal value only 706 }; 707 $(document).ready(doLightBox); 708})(jQuery); 709 710//you can call this manually at any time to activate the lightboxing. (useful for ajax-loaded content) 711function doLightBox(){ 712 var haveConf = (typeof JQLBSettings == 'object'); 713 var ss, rs, ms = 0; 714 if(haveConf && JQLBSettings.slideshowSpeed) { 715 ss = parseInt(JQLBSettings.slideshowSpeed); 716 } 717 if(haveConf && JQLBSettings.resizeSpeed) { 718 rs = parseInt(JQLBSettings.resizeSpeed); 719 } 720 if(haveConf && JQLBSettings.marginSize){ 721 ms = parseInt(JQLBSettings.marginSize); 722 } 723 var default_strings = { 724 help: ' Browse images with your keyboard: Arrows or P(revious)/N(ext) and X/C/ESC for close.', 725 prevLinkTitle: 'previous image', 726 nextLinkTitle: 'next image', 727 closeTitle: 'close image gallery', 728 image: 'Image ', 729 of: ' of ', 730 download: 'Download', 731 pause: '(pause slideshow)', 732 play: '(play slideshow)' 733 }; 734 try{ 735 jQuery('a[rel^="lightbox"]').lightbox({ 736 adminBarHeight: jQuery('#wpadminbar').height() || 0, 737 linkTarget: (haveConf && JQLBSettings.linkTarget.length) ? JQLBSettings.linkTarget : '_self', 738 showInfo: (haveConf && JQLBSettings.showInfo == '0') ? false : true, 739 displayHelp: (haveConf && JQLBSettings.help.length) ? true : false, 740 marginSize: (haveConf && ms) ? ms : 0, 741 //fitToScreen: (haveConf && JQLBSettings.fitToScreen == '1') ? true : false, 742 fitToScreen: true, // opts.bannerBin 743 resizeSpeed: (haveConf && rs >= 0) ? rs : 400, 744 slidehowSpeed: (haveConf && ss >= 0) ? ss : 4000, 745 displayDownloadLink: (haveConf && JQLBSettings.displayDownloadLink == '0') ? false : true, 746 navbarOnTop: (haveConf && JQLBSettings.navbarOnTop == '0') ? false : true, 747 //navbarOnTop: true, 748 strings: (haveConf && typeof JQLBSettings.help == 'string') ? JQLBSettings : default_strings 749 }); 750 }catch(e){ 751 //alert(e); 752 } 753}//End of function doLightBox 754 755//----------- functions created for banner light window ------------------------------------------------------------- 756function getBannerAjaxHiddenObjectFromGalleryInstanceNo(instanceNo) { 757 bannerWidgetCodeObj = document.getElementById('bannerWidgetCode-'+instanceNo); 758 if (bannerWidgetCodeObj && bannerWidgetCodeObj != 'undefined') { 759 widgetCodeChildElements = bannerWidgetCodeObj.childNodes; 760 var i; 761 for (i = 0; i < widgetCodeChildElements.length; i++) { 762 //alert(widgetCodeChildElements[i]); 763 eltObj = widgetCodeChildElements[i]; 764 if (eltObj && eltObj != 'undefined') { 765 try { 766 if (eltObj.tagName) { 767 if (eltObj.tagName.toLowerCase() == 'input') { 768 if (eltObj.type.toLowerCase() == 'hidden') { 769 return eltObj; 770 break; 771 } 772 } 773 } 774 } 775 catch(e) {} 776 } 777 } 778 } 779}//End of function getBannerAjaxHiddenObjectFromGalleryInstanceNo 780 781function getBannerObjectFromGalleryInstanceNo(instanceNo) { 782 bannerWidgetCodeObj = document.getElementById('bannerWidgetCode-'+instanceNo); 783 if (bannerWidgetCodeObj && bannerWidgetCodeObj != 'undefined') { 784 //reloadBanner_LightWindow(bannerWidgetCodeObj.firstChild); //now we have ajax div and inside that we have banner code with its own div. 785 786 //----------------------------------------------------------------------------------------------- 787 //WD-527 788 widgetCodeChildElements = bannerWidgetCodeObj.childNodes; 789 //.children 790 var i; 791 for (i = 0; i < widgetCodeChildElements.length; i++) { 792 //alert(widgetCodeChildElements[i]); 793 eltObj = widgetCodeChildElements[i]; 794 if (eltObj && eltObj != 'undefined') { 795 try { 796 if (eltObj.tagName) { 797 if (eltObj.tagName.toLowerCase() == 'div') { 798 //alert(eltObj.className); 799 800 if (eltObj.className) { 801 if (eltObj.className == 'banner-ajax-div-class') { 802 ajaxDivChildElements = eltObj.childNodes; 803 //alert(ajaxDivChildElements.length); 804 var j; 805 for (j = 0; j < ajaxDivChildElements.length; j++) { 806 //alert(ajaxDivChildElements[j]); 807 if (ajaxDivChildElements[j].tagName) { 808 if (ajaxDivChildElements[j].tagName.toLowerCase() == 'div') { 809 if (ajaxDivChildElements[j].className == 'js-reload-banner') { 810 return ajaxDivChildElements[j]; 811 break; 812 } 813 } 814 } 815 }//End of for (j = 0; j < ajaxDivChildElements.length; j++) 816 } 817 }//End of if (eltObj.className) 818 819 } 820 }//End of if (eltObj.tagName) 821 } 822 catch(e) {} 823 } 824 }//End of for (i = 0; i < widgetCodeChildElements.length; i++) 825 //----------------------------------------------------------------------------------------------- 826 } 827 828 return null; 829}//End of function getBannerObjectFromGalleryInstanceNo 830 831function getBannerObjectFromLightBoxBannerBinContainer(instanceNo) { 832 bannerBinContainerObj = document.getElementById('bannerBinContainer'); 833 if (bannerBinContainerObj && bannerBinContainerObj != 'undefined') { 834 lightboxBannerBinContChildElements = bannerBinContainerObj.childNodes; 835 var i; 836 for (i = 0; i < lightboxBannerBinContChildElements.length; i++) { 837 eltObj = lightboxBannerBinContChildElements[i]; 838 if (eltObj && eltObj != 'undefined') { 839 //alert(eltObj.innerHTML); 840 try { 841 if (eltObj.tagName) { 842 if (eltObj.tagName.toLowerCase() == 'div') { 843 if (eltObj.className) { 844 if (eltObj.className == 'js-reload-banner') { 845 return eltObj; 846 break; 847 } 848 } 849 } 850 } 851 } 852 catch(e) {} 853 } 854 } 855 } 856 857 return null; 858}//End of function getBannerObjectFromLightBoxBannerBinContainer 859 860//new function // opts.bannerBin 861function callReloadBanner(bannerBin, instanceNo) { 862 if (bannerBin) { 863 864 /*bannerObjForGallery = getBannerObjectFromGalleryInstanceNo(instanceNo); 865 866 if (bannerObjForGallery) { 867 //reloadBanner_LightWindow(bannerObjForGallery); //stop ajaxurl and stop calling db fun diz_get_banner_by_id() 868 reloadBanner_LightWindow_useCacheFile(bannerObjForGallery); //used ajaxurl_banner and used cache file. 869 }*/ 870 871 bannerObjForGallery = getBannerObjectFromLightBoxBannerBinContainer(instanceNo); 872 if (bannerObjForGallery) { 873 reloadBanner_LightWindow_useCacheFile(bannerObjForGallery); 874 } 875 876 } 877}//End of function callReloadBanner 878 879//new function // opts.bannerBin 880function reloadBanner_LightWindow( banner ) { 881 bannerObj = jQuery(banner); 882 883 var exclude = bannerObj.prop('data-exclude'), 884 //available = banner.getAttribute("data-available-banners").split(','), 885 //available = bannerObj.attr("data-available-banners").split(','), 886 notDisplayed, 887 targetBannerId; 888 889 //check if data-available-banners found then only change banner image on click of next and previous button. 890 try { 891 var available = banner.getAttribute("data-available-banners").split(','); 892 } 893 catch(e) { 894 //if only one banner into banner bins OR if no banner into banner bins then we will not get data-available-banners. so, just return from here. 895 var available = []; 896 return; 897 } 898 899 // Exit flow if banner has not loaded 900 if ( bannerObj.attr('data-reloading') ) { 901 return; 902 } 903 904 // Either use single banner_id or list of ids to exclude from query 905 if (typeof exclude === 'undefined') { 906 exclude = [ banner.getAttribute('data-banner-id') ]; 907 } else if ( exclude !== '' ) { 908 exclude = exclude.split(','); 909 } else { 910 exclude = []; 911 } 912 //ajaxurl = 'http://itmwpb.com/wp-admin/admin-ajax.php'; 913 914 // Get ids that were not yet displayed 915 notDisplayed = jQuery(available).not(exclude).get(); 916 917 // If all banners were already displayed -> reset exclude property 918 if ( notDisplayed.length == 0 ) { 919 notDisplayed = available; 920 exclude = []; 921 } 922 923 targetBannerId = notDisplayed.shift(); 924 925 // Send request to reload banner 926 jQuery.ajax({ 927 url: ajaxurl, 928 data: { 929 action: 'reload_banner', 930 id: targetBannerId 931 }, 932 dataType: 'html', 933 beforeSend: function ( xhr ) { 934 // Attribute to prevent banner reload while one has not been loaded 935 bannerObj.attr('data-reloading', '1'); 936 } 937 }).success(function(code){ 938 939 // Banner has loaded succefully 940 bannerObj.removeAttr('data-reloading'); 941 942 // Update banner code 943 bannerBinContainerObj = document.getElementById('bannerBinContainer'); 944 bannerDivInfo = code; 945 bannerDivInfo = bannerDivInfo.replace("adv-banner", "adv-banner-center"); 946 bannerBinContainerObj.innerHTML = bannerDivInfo; 947 948 /*bannerBinContainerObj = jQuery(bannerBinContainerObj); 949 // Update banner code 950 bannerBinContainerObj.html(code);*/ 951 952 // UPdate exclude prop 953 exclude.push(targetBannerId); 954 bannerObj.prop('data-exclude', exclude.join()); 955 956 // 3-rd party integration 957 bannerObj.find('.adv-banner').trigger('reloaded'); 958 }); 959}//End of function reloadBanner_LightWindow 960 961//WD-527 962function reloadBanner_LightWindow_useCacheFile( banner ) { 963 bannerObj = jQuery(banner); 964 965 var exclude = bannerObj.prop('data-exclude'), 966 //available = banner.getAttribute("data-available-banners").split(','), 967 //available = bannerObj.attr("data-available-banners").split(','), 968 notDisplayed, 969 targetBannerId, 970 instance_banner = bannerObj.attr('data-instance-no'); //for cache. 971 972 //check if data-available-banners found then only change banner image on click of next and previous button. 973 try { 974 var available = banner.getAttribute("data-available-banners").split(','); 975 } 976 catch(e) { 977 //if only one banner into banner bins OR if no banner into banner bins then we will not get data-available-banners. so, just return from here. 978 var available = []; 979 return; 980 } 981 982 // Exit flow if banner has not loaded 983 if ( bannerObj.attr('data-reloading') ) { 984 return; 985 } 986 987 // Either use single banner_id or list of ids to exclude from query 988 if (typeof exclude === 'undefined') { 989 exclude = [ banner.getAttribute('data-banner-id') ]; 990 } else if ( exclude !== '' ) { 991 exclude = exclude.split(','); 992 } else { 993 exclude = []; 994 } 995 //ajaxurl = 'http://itmwpb.com/wp-admin/admin-ajax.php'; 996 997 // Get ids that were not yet displayed 998 notDisplayed = jQuery(available).not(exclude).get(); 999 1000 // If all banners were already displayed -> reset exclude property 1001 if ( notDisplayed.length == 0 ) { 1002 notDisplayed = available; 1003 exclude = []; 1004 } 1005 1006 targetBannerId = notDisplayed.shift(); 1007 1008 //for cache. 1009 var ajaxurl_banner = ''; 1010 //alert(instance_banner); 1011 1012 if (instance_banner) { 1013 var bannerHiddenObj = jQuery('#banner-ajax-hidden-'+instance_banner); 1014 var bannerHiddenValue = bannerHiddenObj.val(); 1015 //alert(bannerHiddenValue); 1016 if (bannerHiddenValue) { 1017 var bannerHiddenValueArr = bannerHiddenValue.split('#:#'); 1018 1019 var bannerId_GalleryReload = bannerHiddenValueArr[0]; 1020 var data_available_GalleryReload = bannerHiddenValueArr[1]; 1021 var instance_GalleryReload = bannerHiddenValueArr[2]; 1022 var location_GalleryReload = bannerHiddenValueArr[3]; 1023 var bannerbinId_GalleryReload = bannerHiddenValueArr[4]; 1024 var advPluginUrl_GalleryReload = bannerHiddenValueArr[5]; 1025 var siteId_GalleryReload = bannerHiddenValueArr[6]; 1026 1027 ajaxurl_banner = advPluginUrl_GalleryReload + 'advertise-gallery-ajax.php?bannerGalleryAjax=true&callFromFile=banner-reload.js&bannerId='+targetBannerId+'&dataAvailable='+data_available_GalleryReload+'&bannerInstance='+instance_GalleryReload+'&siteId='+siteId_GalleryReload+'&bannerBinSlug='+location_GalleryReload+'&bannerbinId='+bannerbinId_GalleryReload; 1028 } 1029 } 1030 1031 if (ajaxurl_banner) { 1032 1033 } 1034 else { 1035 return; 1036 } 1037 1038 //alert(ajaxurl_banner); 1039 1040 var isJWPlayerBa
1040nner = false; 1041 var isSimpleBannerImage = false; 1042 var isDFPBanner = false; 1043 1044 // Send request to reload banner 1045 jQuery.ajax({ 1046 url: ajaxurl_banner, //for cache. 1047 /*data: { 1048 action: 'reload_banner', 1049 id: targetBannerId 1050 },*/ 1051 dataType: 'html', 1052 beforeSend: function ( xhr ) { 1053 // Attribute to prevent banner reload while one has not been loaded 1054 bannerObj.attr('data-reloading', '1'); 1055 } 1056 }).success(function(code){ 1057 1058 if (code) { 1059 var isJWPlayerBannerCodePosition = code.search(/content\.jwplatform\.com/ig); 1060 if(isJWPlayerBannerCodePosition > 0) { 1061 isJWPlayerBanner = true; 1062 } 1063 1064 var isSimpleBannerImageCodePosition = code.search(/cloudfront.net/ig); 1065 if(isSimpleBannerImageCodePosition > 0) { 1066 isSimpleBannerImage = true; 1067 } 1068 1069 var isDFPCodePosition = code.search(/googletag/ig); 1070 if(isDFPCodePosition > 0) { 1071 isDFPBanner = true; 1072 } 1073 }//End of if (code) 1074 1075 //alert(isJWPlayerBanner + ' -- ' + isSimpleBannerImage + ' -- ' + isDFPBanner); 1076 1077 // Banner has loaded succefully 1078 bannerObj.removeAttr('data-reloading'); 1079 1080 // Update banner code 1081 bannerBinContainerObj = document.getElementById('bannerBinContainer'); 1082 bannerDivInfo = code; 1083 bannerDivInfo = bannerDivInfo.replace("adv-banner", "adv-banner-center"); 1084 //bannerBinContainerObj.innerHTML = bannerDivInfo; 1085 jQuery('#bannerBinContainer').html(bannerDivInfo); 1086 1087 /*bannerBinContainerObj = jQuery(bannerBinContainerObj); 1088 // Update banner code 1089 bannerBinContainerObj.html(code);*/ 1090 1091 // UPdate exclude prop 1092 exclude.push(targetBannerId); 1093 bannerObj.prop('data-exclude', exclude.join()); 1094 1095 // 3-rd party integration 1096 bannerObj.find('.adv-banner').trigger('reloaded'); 1097 }); 1098}//End of function reloadBanner_LightWindow_useCacheFile
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.