1/*! 2 * jQzoom Evolution Library v2.3 - Javascript Image magnifier 3 * http://www.mind-projects.it 4 * 5 * Copyright 2011, Engineer Marco Renzi 6 * Licensed under the BSD license. 7 * 8 * Redistribution and use in source and binary forms, with or without 9 * modification, are permitted provided that the following conditions are met: 10 * * Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * * Redistributions in binary form must reproduce the above copyright 13 * notice, this list of conditions and the following disclaimer in the 14 * documentation and/or other materials provided with the distribution. 15 * * Neither the name of the organization nor the 16 * names of its contributors may be used to endorse or promote products 17 * derived from this software without specific prior written permission. 18 * 19 * Date: 03 May 2011 22:16:00 20 */ 21(function ($) { 22 //GLOBAL VARIABLES 23 var body = $(document.body); 24 var window = $(window); 25 var jqzoompluging_disabled = false; //disabilita globalmente il plugin 26 $.fn.jqzoom = function (options) { 27 return this.each(function () { 28 var node = this.nodeName.toLowerCase(); 29 if (node == 'a') { 30 new jqzoom(this, options); 31 } 32 33 }); 34 }; 35 jqzoom = function (el, options) { 36 var api = null; 37 api = $(el).data("jqzoom"); 38 if (api) return api; 39 var obj = this; 40 var settings = $.extend({}, $.jqzoom.defaults, options || {}); 41 obj.el = el; 42 el.rel = $(el).attr('rel'); 43 //ANCHOR ELEMENT 44 el.zoom_active = false; 45 el.zoom_disabled = false; //to disable single zoom instance 46 el.largeimageloading = false; //tell us if large image is loading 47 el.largeimageloaded = false; //tell us if large image is loaded 48 el.scale = {}; 49 el.timer = null; 50 el.mousepos = {}; 51 el.mouseDown = false; 52 $(el).css({ 53 'outline-style': 'none', 54 'text-decoration': 'none' 55 }); 56 //BASE IMAGE 57 var img = $("img:eq(0)", el); 58 el.title = $(el).attr('title'); 59 el.imagetitle = img.attr('title'); 60 var zoomtitle = ($.trim(el.title).length > 0) ? el.title : el.imagetitle; 61 var smallimage = new Smallimage(img); 62 var lens = new Lens(); 63 var stage = new Stage(); 64 var largeimage = new Largeimage(); 65 var loader = new Loader(); 66 //preventing default click,allowing the onclick event [exmple: lightbox] 67 $(el).on('click', function (e) { 68 settings.seClickCallback.apply(e); 69 e.preventDefault(); 70 return false; 71 72 }); 73 //setting the default zoomType if not in settings// 74 var zoomtypes = ['standard', 'drag', 'innerzoom', 'reverse']; 75 if ($.inArray($.trim(settings.zoomType), zoomtypes) < 0) { 76 settings.zoomType = 'standard'; 77 } 78 $.extend(obj, { 79 create: function () { //create the main objects 80 //create ZoomPad 81 if ($(".zoomPad", el).length == 0) { 82 el.zoomPad = $('<div/>').addClass('zoomPad'); 83 img.wrap(el.zoomPad); 84 img.before('<div class="zoomPadIcon"></div>'); 85 } 86 if(settings.zoomType == 'innerzoom'){ 87 settings.zoomWidth = smallimage.w; 88 settings.zoomHeight = smallimage.h; 89 } 90 //creating ZoomPup 91 if ($(".zoomPup", el).length == 0) { 92 lens.append(); 93 } 94 //creating zoomWindow 95 if ($(".zoomWindow", el).length == 0) { 96 stage.append(); 97 } 98 //creating Preload 99 if ($(".zoomPreload", el).length == 0) { 100 loader.append(); 101 } 102 //preloading images 103 if (settings.preloadImages || settings.zoomType == 'drag' || settings.alwaysOn) { 104 obj.load(); 105 } 106 obj.init(); 107 }, 108 init: function () { 109 //drag option 110 if (settings.zoomType == 'drag') { 111 $(".zoomPad", el).mousedown(function () { 112 el.mouseDown = true; 113 }); 114 $(".zoomPad", el).mouseup(function () { 115 el.mouseDown = false; 116 }); 117 document.body.ondragstart = function () { 118 return false; 119 }; 120 $(".zoomPad", el).css({ 121 cursor: 'default' 122 }); 123 $(".zoomPup", el).css({ 124 cursor: 'move' 125 }); 126 } 127 if (settings.zoomType == 'innerzoom') { 128 $(".zoomWrapper", el).css({ 129 cursor: 'crosshair' 130 }); 131 } 132 $(".zoomPad", el).on('mouseenter mouseover touchstart', function (event) { 133 img.attr('title', ''); 134 $(el).attr('title', ''); 135 el.zoom_active = true; 136 //if loaded then activate else load large image 137 smallimage.fetchdata(); 138 if (el.largeimageloaded) { 139 obj.activate(event); 140 } else { 141 obj.load(); 142 } 143 event.preventDefault(); 144 145 }); 146 $(".zoomPad", el).on('mouseleave touchend', function (event) { 147 obj.deactivate(); 148 event.preventDefault(); 149 }); 150 $(".zoomWindow", el).on('mousemove ', function (event) { 151 obj.deactivate(); 152 event.preventDefault(); 153 }); 154 $(".zoomPad", el).on('mousemove touchstart touchmove', function (e) { 155 156 if(typeof event !== 'undefined' && typeof event.touches !== 'undefined') { 157 e = event.touches[0]; 158 event.preventDefault(); 159 } 160 161 //prevent fast mouse mevements not to fire the mouseout event 162 if (e.pageX > smallimage.pos.r || e.pageX < smallimage.pos.l || e.pageY < smallimage.pos.t || e.pageY > smallimage.pos.b) { 163 // smarte - commented out as it was causing issues in IE7 164 //lens.setcenter(); 165 return false;
166 } 167 168 el.zoom_active = true; 169 if (el.largeimageloaded && !$('.zoomWindow', el).is(':visible')) { 170 obj.activate(e); 171 } 172 if (el.largeimageloaded && (settings.zoomType != 'drag' || (settings.zoomType == 'drag' && el.mouseDown))) { 173 lens.setposition(e); 174 } 175 }); 176 var thumb_preload = new Array(); 177 var i = 0; 178 //binding click event on thumbnails 179 var thumblist = new Array(); 180 thumblist = $('a').filter(function () { 181 var regex = new RegExp("gallery[\\s]*:[\\s]*'" + $.trim(el.rel) + "'", "i"); 182 var rel = $(this).attr('rel'); 183 if (regex.test(rel)) { 184 return this; 185 } 186 }); 187 if (thumblist.length > 0) { 188 //getting the first to the last 189 var first = thumblist.splice(0, 1); 190 thumblist.push(first); 191 } 192 thumblist.each(function () { 193 //preloading thumbs 194 if (settings.preloadImages) { 195 var thumb_options = $.extend({}, eval("(" + $.trim($(this).attr('rel')) + ")")); 196 thumb_preload[i] = new Image(); 197 thumb_preload[i].src = thumb_options.largeimage; 198 i++; 199 } 200 $('.seimagecaption').on('click', this, function (e) { 201 if($(this).hasClass('zoomThumbActive')){ 202 return false; 203 } 204 thumblist.each(function () { 205 $(this).removeClass('zoomThumbActive'); 206 }); 207 e.preventDefault(); 208 obj.swapimage(this); 209 return false; 210 }); 211 }); 212 213 // smarte - custom callback 214 settings.seOnloadCallback.apply(smallimage); 215 }, 216 load: function () { 217 if (el.largeimageloaded == false && el.largeimageloading == false) { 218 var url = $(el).attr('href'); 219 el.largeimageloading = true; 220 largeimage.loadimage(url); 221 } 222 }, 223 activate: function (e) { 224 clearTimeout(el.timer); 225 //show lens and zoomWindow 226 lens.show(); 227 stage.show(); 228 }, 229 deactivate: function (e) { 230 switch (settings.zoomType) { 231 case 'drag': 232 //nothing or lens.setcenter(); 233 break; 234 default:
235 img.attr('title', el.imagetitle); 236 $(el).attr('title', el.title); 237 if (settings.alwaysOn) { 238 lens.setcenter(); 239 } else { 240 stage.hide(); 241 lens.hide(); 242 } 243 break; 244 } 245 el.zoom_active = false; 246 }, 247 swapimage: function (link) { 248 el.largeimageloading = false; 249 el.largeimageloaded = false; 250 var options = new Object(); 251 options = $.extend({}, eval("(" + $.trim($(link).attr('rel')) + ")")); 252 if (options.smallimage && options.largeimage) { 253 var smallimage = options.smallimage; 254 var largeimage = options.largeimage; 255 $(link).addClass('zoomThumbActive'); 256 $(el).attr('href', largeimage); 257 img.attr('src', smallimage); 258 lens.hide(); 259 stage.hide(); 260 obj.load(); 261 } else { 262 throw 'ERROR :: Missing parameter for largeimage or smallimage.'; 263 } 264 return false; 265 } 266 }); 267 //sometimes image is already loaded and onload will not fire 268 if (img[0].complete) { 269 //fetching data from sallimage if was previously loaded 270 smallimage.fetchdata(); 271 if ($(".zoomPad", el).length == 0) obj.create(); 272 } 273/*========================================================, 274| Smallimage 275|---------------------------------------------------------: 276| Base image into the anchor element 277`========================================================*/ 278 279 function Smallimage(image) { 280 var $obj = this; 281 282 this.node = image[0]; 283 this.findborder = function () { 284 var bordertop = 0; 285 bordertop = image.css('border-top-width'); 286 btop = ''; 287 var borderleft = 0; 288 borderleft = image.css('border-left-width'); 289 bleft = ''; 290 if (bordertop) { 291 for (i = 0; i < 3; i++) { 292 var x = []; 293 x = bordertop.substr(i, 1); 294 if (isNaN(x) == false) { 295 btop = btop + '' + bordertop.substr(i, 1); 296 } else { 297 break; 298 } 299 } 300 } 301 if (borderleft) { 302 for (i = 0; i < 3; i++) { 303 if (!isNaN(borderleft.substr(i, 1))) { 304 bleft = bleft + borderleft.substr(i, 1) 305 } else { 306 break; 307 } 308 } 309 } 310 $obj.btop = (btop.length > 0) ? eval(btop) : 0; 311 $obj.bleft = (bleft.length > 0) ? eval(bleft) : 0; 312 }; 313 this.fetchdata = function () { 314 $obj.findborder(); 315 $obj.w = image.width(); 316 $obj.h = image.height(); 317 $obj.ow = image.outerWidth(); 318 $obj.oh = image.outerHeight(); 319 $obj.pos = image.offset(); 320 $obj.pos.l = image.offset().left + $obj.bleft; 321 $obj.pos.t = image.offset().top + $obj.btop; 322 $obj.pos.r = $obj.w + $obj.pos.l; 323 $obj.pos.b = $obj.h + $obj.pos.t; 324 $obj.rightlimit = image.offset().left + $obj.ow; 325 $obj.bottomlimit = image.offset().top + $obj.oh; 326 327 }; 328 this.node.onerror = function () { 329 throw 'Problems while loading image.'; 330 }; 331 this.node.onload = function () { 332 $obj.fetchdata(); 333 if ($(".zoomPad", el).length == 0) obj.create(); 334 }; 335 return $obj; 336 }; 337/*========================================================, 338| Loader 339|---------------------------------------------------------: 340| Show that the large image is loading 341`========================================================*/ 342 343 function Loader() { 344 var $obj = this; 345 this.append = function () { 346 this.node = $('<div/>').addClass('zoomPreload').css('visibility', 'hidden').html(settings.preloadText); 347 $('.zoomPad', el).append(this.node); 348 }; 349 this.show = function () { 350 this.node.top = (smallimage.oh - this.node.height()) / 2; 351 this.node.left = (smallimage.ow - this.node.width()) / 2; 352 //setting position 353 this.node.css({ 354 top: this.node.top, 355 left: this.node.left, 356 position: 'absolute', 357 visibility: 'visible' 358 }); 359 }; 360 this.hide = function () { 361 this.node.css('visibility', 'hidden'); 362 }; 363 return this; 364 } 365/*========================================================, 366| Lens 367|---------------------------------------------------------: 368| Lens over the image 369`========================================================*/ 370 371 function Lens() { 372 var $obj = this; 373 this.node = $('<div/>').addClass('zoomPup'); 374 //this.nodeimgwrapper = $("<div/>").addClass('zoomPupImgWrapper'); 375 this.append = function () { 376 $('.zoomPad', el).append($(this.node).hide()); 377 if (settings.zoomType == 'reverse') { 378 this.image = new Image(); 379 this.image.src = smallimage.node.src;
379 // fires off async 380 $(this.node).empty().append(this.image); 381 } 382 }; 383 this.setdimensions = function () { 384 this.node.w = (parseInt((settings.zoomWidth) / el.scale.x) > smallimage.w ) ? smallimage.w : (parseInt(settings.zoomWidth / el.scale.x)); 385 this.node.h = (parseInt((settings.zoomHeight) / el.scale.y) > smallimage.h ) ? smallimage.h : (parseInt(settings.zoomHeight / el.scale.y)); 386 this.node.top = (smallimage.oh - this.node.h - 2) / 2; 387 this.node.left = (smallimage.ow - this.node.w - 2) / 2; 388 //centering lens 389 this.node.css({ 390 top: 0, 391 left: 0, 392 width: this.node.w + 'px', 393 height: this.node.h + 'px', 394 position: 'absolute', 395 display: 'none', 396 borderWidth: 1 + 'px' 397 }); 398 399 400 401 if (settings.zoomType == 'reverse') { 402 this.image.src = smallimage.node.src; 403 $(this.node).css({ 404 'opacity': 1 405 }); 406 407 $(this.image).css({ 408 position: 'absolute', 409 display: 'block', 410 left: -(this.node.left + 1 - smallimage.bleft) + 'px', 411 top: -(this.node.top + 1 - smallimage.btop) + 'px' 412 }); 413 414 } 415 }; 416 this.setcenter = function () { 417 //calculating center position 418 this.node.top = (smallimage.oh - this.node.h - 2) / 2; 419 this.node.left = (smallimage.ow - this.node.w - 2) / 2; 420 //centering lens 421 this.node.css({ 422 top: this.node.top, 423 left: this.node.left 424 }); 425 if (settings.zoomType == 'reverse') { 426 $(this.image).css({ 427 position: 'absolute', 428 display: 'block', 429 left: -(this.node.left + 1 - smallimage.bleft) + 'px', 430 top: -(this.node.top + 1 - smallimage.btop) + 'px' 431 }); 432 433 } 434 //centering large image 435 largeimage.setposition(); 436 }; 437 this.setposition = function (e) { 438 el.mousepos.x = e.pageX; 439 el.mousepos.y = e.pageY; 440 var lensleft = 0; 441 var lenstop = 0; 442 443 function overleft(lens) { 444 return el.mousepos.x - (lens.w) / 2 < smallimage.pos.l; 445 } 446 447 function overright(lens) { 448 return el.mousepos.x + (lens.w) / 2 > smallimage.pos.r; 449 450 } 451 452 function overtop(lens) { 453 return el.mousepos.y - (lens.h) / 2 < smallimage.pos.t; 454 } 455 456 function overbottom(lens) { 457 return el.mousepos.y + (lens.h) / 2 > smallimage.pos.b; 458 } 459 460 lensleft = el.mousepos.x + smallimage.bleft - smallimage.pos.l - (this.node.w + 2) / 2; 461 lenstop = el.mousepos.y + smallimage.btop - smallimage.pos.t - (this.node.h + 2) / 2; 462 if (overleft(this.node)) { 463 lensleft = smallimage.bleft - 1; 464 } else if (overright(this.node)) { 465 lensleft = smallimage.w + smallimage.bleft - this.node.w - 1; 466 } 467 if (overtop(this.node)) { 468 lenstop = smallimage.btop - 1; 469 } else if (overbottom(this.node)) { 470 lenstop = smallimage.h + smallimage.btop - this.node.h - 1; 471 } 472 473 this.node.left = lensleft; 474 this.node.top = lenstop; 475 this.node.css({ 476 'left': lensleft + 'px', 477 'top': lenstop + 'px' 478 }); 479 if (settings.zoomType == 'reverse') { 480 $(this.image).css({ 481 position: 'absolute', 482 display: 'block', 483 left: -(this.node.left + 1 - smallimage.bleft) + 'px', 484 top: -(this.node.top + 1 - smallimage.btop) + 'px' 485 }); 486 } 487 488 largeimage.setposition(); 489 }; 490 this.hide = function () { 491 img.css({ 492 'opacity': 1 493 }); 494 this.node.hide(); 495 }; 496 this.show = function () { 497 498 if (settings.zoomType != 'innerzoom' && (settings.lens || settings.zoomType == 'drag')) { 499 this.node.show(); 500 } 501 502 if (settings.zoomType == 'reverse') { 503 img.css({ 504 'opacity': settings.imageOpacity 505 }); 506 } 507 }; 508 this.getoffset = function () { 509 var o = {}; 510 o.left = $obj.node.left; 511 o.top = $obj.node.top; 512 return o; 513 }; 514 return this; 515 }; 516/*========================================================, 517| Stage 518|---------------------------------------------------------: 519| Window area that contains the large image 520`========================================================*/ 521 522 function Stage() { 523 var $obj = this; 524 this.node = $("<div class='zoomWindow'><div class='zoomWrapper'><div class='zoomWrapperTitle'></div><div class='zoomWrapperImage'></div></div></div>"); 525 this.ieframe = $('<iframe class="zoomIframe" src="javascript:\'\';" marginwidth="0" marginheight="0" align="bottom" scrolling="no" frameborder="0" ></iframe>'); 526 this.setposition = function () { 527 this.node.leftpos = 0; 528 this.node.toppos = 0; 529 if (settings.zoomType != 'innerzoom') { 530 //positioning 531 switch (settings.position) {
532 case "left": 533 this.node.leftpos = (smallimage.pos.l - smallimage.bleft - Math.abs(settings.xOffset) - settings.zoomWidth > 0) ? (0 - settings.zoomWidth - Math.abs(settings.xOffset)) : (smallimage.ow + Math.abs(settings.xOffset)); 534 this.node.toppos = Math.abs(settings.yOffset); 535 break; 536 case "top": 537 this.node.leftpos = Math.abs(settings.xOffset); 538 this.node.toppos = (smallimage.pos.t - smallimage.btop - Math.abs(settings.yOffset) - settings.zoomHeight > 0) ? (0 - settings.zoomHeight - Math.abs(settings.yOffset)) : (smallimage.oh + Math.abs(settings.yOffset)); 539 break; 540 case "bottom": 541 this.node.leftpos = Math.abs(settings.xOffset); 542 this.node.toppos = (smallimage.pos.t - smallimage.btop + smallimage.oh + Math.abs(settings.yOffset) + settings.zoomHeight < screen.height) ? (smallimage.oh + Math.abs(settings.yOffset)) : (0 - settings.zoomHeight - Math.abs(settings.yOffset)); 543 break; 544 default: 545 this.node.leftpos = (smallimage.rightlimit + Math.abs(settings.xOffset) + settings.zoomWidth < screen.width) ? (smallimage.ow + Math.abs(settings.xOffset)) : (0 - settings.zoomWidth - Math.abs(settings.xOffset)); 546 this.node.toppos = Math.abs(settings.yOffset); 547 break; 548 } 549 } 550 this.node.css({ 551 'left': Math.abs(this.node.leftpos) + 'px', 552 'top': this.node.toppos + 'px' 553 }); 554 return this; 555 }; 556 this.append = function () { 557 $('.zoomPad', el).append(this.node); 558 this.node.css({ 559 position: 'absolute', 560 display: 'none', 561 zIndex: 5001 562 }); 563 var thickness = (smallimage.bleft == 0) ? 1 : smallimage.bleft; 564 if (settings.zoomType == 'innerzoom') { 565 this.node.css({ 566 cursor: 'default' 567 }); 568 thickness = 1; 569 $('.zoomWrapper', this.node).css({ 570 borderWidth: 1 + 'px' 571 }); 572 } 573 $('.zoomWrapper', this.node).css({ 574 width: Math.round(settings.zoomWidth) + 'px' , 575 borderWidth: 1 + 'px' 576 }); 577 $('.zoomWrapperImage', this.node).css({ 578 width: '100%', 579 height: Math.round(settings.zoomHeight) + 'px' 580 }); 581 //zoom title 582 $('.zoomWrapperTitle', this.node).css({ 583 width: '100%', 584 position: 'absolute' 585 }); 586 587 $('.zoomWrapperTitle', this.node).hide(); 588 if (settings.title && zoomtitle.length > 0) { 589 $('.zoomWrapperTitle', this.node).html(zoomtitle).show(); 590 } 591 $obj.setposition(); 592 }; 593 this.hide = function () { 594 switch (settings.hideEffect) { 595 case 'fadeout': 596 this.node.fadeOut(settings.fadeoutSpeed, function () {}); 597 break; 598 default: 599 this.node.hide(); 600 break; 601 } 602 this.ieframe.hide(); 603 }; 604 this.show = function () { 605 switch (settings.showEffect) { 606 case 'fadein': 607 this.node.fadeIn(); 608 this.node.fadeIn(settings.fadeinSpeed, function () {}); 609 break; 610 default: 611 this.node.show(); 612 break; 613 } 614 }; 615 }; 616/*========================================================, 617| LargeImage 618|---------------------------------------------------------: 619| The large detailed image 620`========================================================*/ 621 622 function Largeimage() { 623 var $obj = this; 624 this.node = new Image(); 625 this.loadimage = function (url) { 626 //showing preload 627 loader.show(); 628 this.url = url; 629 this.node.style.position = 'absolute'; 630 this.node.style.border = '0px'; 631 this.node.style.display = 'none'; 632 this.node.style.left = '-5000px'; 633 this.node.style.top = '0px'; 634 document.body.appendChild(this.node); 635 this.node.src = url; // fires off async 636 637 }; 638 this.fetchdata = function () { 639 var image = $(this.node); 640 var scale = {}; 641 this.node.style.display = 'block'; 642 this.node.style.maxWidth = '1200px'; 643 $obj.w = image.width(); 644 645 if ($obj.w >= 1200) { $obj.w = 1200; } 646 647 $obj.h = image.height(); 648 $obj.pos = image.offset(); 649 $obj.pos.l = image.offset().left; 650 $obj.pos.t = image.offset().top; 651 $obj.pos.r = $obj.w + $obj.pos.l; 652 $obj.pos.b = $obj.h + $obj.pos.t; 653 scale.x = ($obj.w / smallimage.w); 654 scale.y = ($obj.h / smallimage.h); 655 el.scale = scale; 656 document.body.removeChild(this.node); 657 $('.zoomWrapperImage', el).empty().append(this.node); 658 $('.zoomWrapperImage img').attr('alt', $('.seitemdetailpicture .seLargeImage').attr('alt')); 659 //setting lens dimensions; 660 lens.setdimensions(); 661 }; 662 this.node.onerror = function () { 663 throw 'Problems while loading the big image.'; 664 }; 665 this.node.onload = function () { 666 //fetching data 667 $obj.fetchdata(); 668 loader.hide(); 669 lens.show(); 670 stage.show(); 671 lens.setcenter(); 672 el.largeimageloading = false;
673 el.largeimageloaded = true; 674 if (settings.zoomType == 'drag' || settings.alwaysOn) { 675 lens.show(); 676 stage.show(); 677 lens.setcenter(); 678 } 679 }; 680 this.setposition = function () { 681 var left = -el.scale.x * (lens.getoffset().left - smallimage.bleft + 1); 682 var top = -el.scale.y * (lens.getoffset().top - smallimage.btop + 1); 683 $(this.node).css({ 684 'left': left + 'px', 685 'top': top + 'px' 686 }); 687 }; 688 return this; 689 }; 690 $(el).data("jqzoom", obj); 691 }; 692 //es. $.jqzoom.disable('#jqzoom1'); 693 $.jqzoom = { 694 defaults: { 695 zoomType: 'standard', 696 //innerzoom/standard/reverse/drag 697 zoomWidth: 300, 698 //zoomWindow default width 699 zoomHeight: 300, 700 //zoomWindow default height 701 xOffset: 10, 702 //zoomWindow x offset, can be negative(more on the left) or positive(more on the right) 703 yOffset: 0, 704 //zoomWindow y offset, can be negative(more on the left) or positive(more on the right) 705 position: "right", 706 //zoomWindow default position 707 preloadImages: true, 708 //image preload 709 preloadText: 'Loading zoom', 710 title: true, 711 lens: true, 712 imageOpacity: 0.4, 713 alwaysOn: false, 714 showEffect: 'show', 715 //show/fadein 716 hideEffect: 'hide', 717 //hide/fadeout 718 fadeinSpeed: 'slow', 719 //fast/slow/number 720 fadeoutSpeed: '2000', //fast/slow/number 721 722 seClickCallback: function () {}, 723 seOnloadCallback: function() {} 724 }, 725 disable: function (el) { 726 var api = $(el).data('jqzoom'); 727 api.disable(); 728 return false; 729 }, 730 enable: function (el) { 731 var api = $(el).data('jqzoom'); 732 api.enable(); 733 return false; 734 }, 735 disableAll: function (el) { 736 jqzoompluging_disabled = true; 737 }, 738 enableAll: function (el) { 739 jqzoompluging_disabled = false; 740 } 741 }; 742})(se$);
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.