1/*! 2 * jQuery Popup Overlay 3 * 4 * @version 1.7.13 5 * @requires jQuery v1.7.1+ 6 * @link http://vast-engineering.github.com/jquery-popup-overlay/ 7 */ 8;(function ($) { 9 10 var $window = $(window); 11 var options = {}; 12 var zindexvalues = []; 13 var lastclicked = []; 14 var scrollbarwidth; 15 var bodymarginright = null; 16 var opensuffix = '_open'; 17 var closesuffix = '_close'; 18 var visiblePopupsArray = []; 19 var transitionsupport = null; 20 var opentimer; 21 var iOS = /(iPad|iPhone|iPod)/g.test(navigator.userAgent); 22 var focusableElementsString = "a[href], area[href], input:not([disabled]), select:not([disabled]), textarea:not([disabled]), button:not([disabled]), iframe, object, embed, *[tabindex], *[contenteditable]"; 23 24 var methods = { 25 26 _init: function (el) { 27 var $el = $(el); 28 var options = $el.data('popupoptions'); 29 lastclicked[el.id] = false; 30 zindexvalues[el.id] = 0; 31 32 if (!$el.data('popup-initialized')) { 33 $el.attr('data-popup-initialized', 'true'); 34 methods._initonce(el); 35 } 36 37 if (options.autoopen) { 38 setTimeout(function() { 39 methods.show(el, 0); 40 }, 0); 41 } 42 }, 43 44 _initonce: function (el) { 45 var $el = $(el); 46 var $body = $('body'); 47 var $wrapper; 48 var options = $el.data('popupoptions'); 49 var css; 50 51 bodymarginright = parseInt($body.css('margin-right'), 10); 52 transitionsupport = document.body.style.webkitTransition !== undefined || 53 document.body.style.MozTransition !== undefined || 54 document.body.style.msTransition !== undefined || 55 document.body.style.OTransition !== undefined || 56 document.body.style.transition !== undefined; 57 58 if (options.type == 'tooltip') { 59 options.background = false; 60 options.scrolllock = false; 61 } 62 63 if (options.backgroundactive) { 64 options.background = false; 65 options.blur = false; 66 options.scrolllock = false; 67 } 68 69 if (options.scrolllock) { 70 // Calculate the browser's scrollbar width dynamically 71 var parent; 72 var child; 73 if (typeof scrollbarwidth === 'undefined') { 74 parent = $('<div style="width:50px;height:50px;overflow:auto"><div/></div>').appendTo('body'); 75 child = parent.children(); 76 scrollbarwidth = child.innerWidth() - child.height(99).innerWidth(); 77 parent.remove(); 78 } 79 } 80 81 if (!$el.attr('id')) { 82 $el.attr('id', 'j-popup-' + parseInt((Math.random() * 100000000), 10)); 83 } 84 85 $el.addClass('popup_content'); 86 87 if ((options.background) && (!$('#' + el.id + '_background').length)) { 88 89 $body.append('<div id="' + el.id + '_background" class="popup_background"></div>'); 90 91 var $background = $('#' + el.id + '_background'); 92 93 $background.css({ 94 opacity: 0, 95 visibility: 'hidden', 96 backgroundColor: options.color, 97 position: 'fixed', 98 top: 0, 99 right: 0, 100 bottom: 0, 101 left: 0 102 }); 103 104 if (options.setzindex && !options.autozindex) { 105 $background.css('z-index', '100000'); 106 } 107 108 if (options.transition) { 109 $background.css('transition', options.transition); 110 } 111 } 112 113 $body.append(el); 114 115 $el.wrap('<div id="' + el.id + '_wrapper" class="popup_wrapper" />'); 116 117 $wrapper = $('#' + el.id + '_wrapper'); 118 119 $wrapper.css({ 120 opacity: 0, 121 visibility: 'hidden', 122 position: 'absolute' 123 }); 124 125 // Make div clickable in iOS 126 if (iOS) { 127 $wrapper.css('cursor', 'pointer'); 128 } 129 130 if (options.type == 'overlay') { 131 $wrapper.css('overflow','auto'); 132 } 133 134 $el.css({ 135 opacity: 0, 136 visibility: 'hidden', 137 display: 'inline-block' 138 }); 139 140 if (options.setzindex && !options.autozindex) { 141 $wrapper.css('z-index', '100001'); 142 } 143 144 if (!options.outline) { 145 $el.css('outline', 'none'); 146 } 147 148 if (options.transition) { 149 $el.css('transition', options.transition); 150 $wrapper.css('transition', options.transition); 151 } 152 153 // Hide popup content from screen readers initially 154 $el.attr('aria-hidden', true); 155 156 if (options.type == 'overlay') { 157 $el.css({ 158 textAlign: 'left', 159 position: 'relative', 160 verticalAlign: 'middle' 161 }); 162 163 css = { 164 position: 'fixed', 165 width: '100%', 166 height: '100%', 167 top: 0, 168 left: 0, 169 textAlign: 'center' 170 }; 171 172 if(options.backgroundactive){ 173 css.position = 'absolute'; 174 css.height = '0'; 175 css.overflow = 'visible'; 176 } 177 178 $wrapper.css(css); 179 180 // CSS vertical align helper 181 $wrapper.append('<div class="popup_align" />'); 182 183 $('.popup_align').css({ 184 display: 'inline-block', 185 verticalAlign: 'middle', 186 height: '100%' 187 }); 188 } 189 190 // Add WAI ARIA role to announce dialog to screen readers 191 $el.attr('role', 'dialog'); 192 193 var openelement = (options.openelement) ? options.openelement : ('.' + el.id + opensuffix); 194 195 $(openelement).each(function (i, item) { 196 $(item).attr('data-popup-ordinal', i); 197 198 if (!item.id) { 199 $(item).attr('id', 'open_' + parseInt((Math.random() * 100000000), 10)); 200 } 201 }); 202 203 // Set aria-labelledby (if aria-label or aria-labelledby is not set in html) 204 if (!($el.attr('aria-labelledby') || $el.attr('aria-label'))) { 205 $el.attr('aria-labelledby', $(openelement).attr('id')); 206 } 207 208 // Show and hide tooltips on hover 209 if(options.action == 'hover'){ 210 options.keepfocus = false; 211 212 // Handler: mouseenter, focusin 213 $(openelement).on('mouseenter', function (event) { 214 methods.show(el, $(this).data('popup-ordinal')); 215 }); 216 217 // Handler: mouseleave, focusout 218 $(openelement).on('mouseleave', function (event) { 219 methods.hide(el); 220 }); 221 222 } else { 223 224 // Handler: Show popup when clicked on `open` element 225 $(document).on('click', openelement, function (event) { 226 event.preventDefault(); 227 228 var ord = $(this).data('popup-ordinal'); 229 setTimeout(function() { // setTimeout is to allow `close` method to finish (for issues with multiple tooltips) 230 methods.show(el, ord); 231 }, 0); 232 }); 233 } 234 235 if (options.closebutton) { 236 methods.addclosebutton(el); 237 } 238 239 if (options.detach) { 240 $el.hide().detach(); 241 } else { 242 $wrapper.hide(); 243 } 244 }, 245 246 /** 247 * Show method 248 * 249 * @param {object} el - popup instance DOM node 250 * @param {number} ordinal - order number of an `open` element 251 */ 252 show: function (el, ordinal) { 253 var $el = $(el); 254 255 if ($el.data('popup-visible')) return; 256 257 // Initialize if not initialized. Required for: $('#popup').popup('show') 258 if (!$el.data('popup-initialized')) { 259 methods._init(el); 260 } 261 $el.attr('data-popup-initialized', 'true'); 262 263 var $body = $('body'); 264 var options = $el.data('popupoptions'); 265 var $wrapper = $('#' + el.id + '_wrapper'); 266 var $background = $('#' + el.id + '_background'); 267 268 // `beforeopen` callback event 269 callback(el, ordinal, options.beforeopen); 270 271 // Remember last clicked place 272 lastclicked[el.id] = ordinal; 273 274 // Add popup id to visiblePopupsArray 275 setTimeout(function() {
276 visiblePopupsArray.push(el.id); 277 }, 0); 278 279 // Calculating maximum z-index 280 if (options.autozindex) { 281 282 var elements = document.getElementsByTagName('*'); 283 var len = elements.length; 284 var maxzindex = 0; 285 286 for(var i=0; i<len; i++){ 287 288 var elementzindex = $(elements[i]).css('z-index'); 289 290 if(elementzindex !== 'auto'){ 291 292 elementzindex = parseInt(elementzindex, 10); 293 294 if(maxzindex < elementzindex){ 295 maxzindex = elementzindex; 296 } 297 } 298 } 299 300 zindexvalues[el.id] = maxzindex; 301 302 // Add z-index to the background 303 if (options.background) { 304 if (zindexvalues[el.id] > 0) { 305 $('#' + el.id + '_background').css({ 306 zIndex: (zindexvalues[el.id] + 1) 307 }); 308 } 309 } 310 311 // Add z-index to the wrapper 312 if (zindexvalues[el.id] > 0) { 313 $wrapper.css({ 314 zIndex: (zindexvalues[el.id] + 2) 315 }); 316 } 317 } 318 319 if (options.detach) { 320 $wrapper.prepend(el); 321 $el.show(); 322 } else { 323 $wrapper.show(); 324 } 325 326 opentimer = setTimeout(function() { 327 $wrapper.css({ 328 visibility: 'visible', 329 opacity: 1 330 }); 331 332 $('html').addClass('popup_visible').addClass('popup_visible_' + el.id); 333 $wrapper.addClass('popup_wrapper_visible'); 334 }, 20); // 20ms required for opening animation to occur in FF 335 336 // Disable background layer scrolling when popup is opened 337 if (options.scrolllock) { 338 $body.css('overflow', 'hidden'); 339 if ($body.height() > $window.height()) { 340 $body.css('margin-right', bodymarginright + scrollbarwidth); 341 } 342 } 343 344 if(options.backgroundactive){ 345 //calculates the vertical align 346 $el.css({ 347 top:( 348 $window.height() - ( 349 $el.get(0).offsetHeight + 350 parseInt($el.css('margin-top'), 10) + 351 parseInt($el.css('margin-bottom'), 10) 352 ) 353 )/2 +'px' 354 }); 355 } 356 357 $el.css({ 358 'visibility': 'visible', 359 'opacity': 1 360 }); 361 362 // Show background 363 if (options.background) { 364 $background.css({ 365 'visibility': 'visible', 366 'opacity': options.opacity 367 }); 368 369 // Fix IE8 issue with background not appearing 370 setTimeout(function() { 371 $background.css({ 372 'opacity': options.opacity 373 }); 374 }, 0); 375 } 376 377 $el.data('popup-visible', true); 378 379 // Position popup 380 methods.reposition(el, ordinal); 381 382 // Remember which element had focus before opening a popup 383 $el.data('focusedelementbeforepopup', document.activeElement); 384 385 // Handler: Keep focus inside dialog box 386 if (options.keepfocus) { 387 // Make holder div focusable 388 $el.attr('tabindex', -1); 389 390 // Focus popup or user specified element. 391 // Initial timeout of 50ms is set to give some time to popup to show after clicking on 392 // `open` element, and after animation is complete to prevent background scrolling. 393 setTimeout(function() { 394 if (options.focuselement === 'closebutton') { 395 $('#' + el.id + ' .' + el.id + closesuffix + ':first').focus(); 396 } else if (options.focuselement) { 397 $(options.focuselement).focus(); 398 } else { 399 $el.focus(); 400 } 401 }, options.focusdelay); 402 403 } 404 405 // Hide main content from screen readers 406 $(options.pagecontainer).attr('aria-hidden', true); 407 408 // Reveal popup content to screen readers 409 $el.attr('aria-hidden', false); 410 411 callback(el, ordinal, options.onopen); 412 413 if (transitionsupport) { 414 $wrapper.one('transitionend', function() { 415 callback(el, ordinal, options.opentransitionend); 416 }); 417 } else { 418 callback(el, ordinal, options.opentransitionend); 419 } 420 421 // Handler: Reposition tooltip when window is resized 422 if (options.type == 'tooltip') { 423 $(window).on('resize.' + el.id, function () { 424 methods.reposition(el, ordinal); 425 }); 426 } 427 }, 428 429 /** 430 * Hide method 431 * 432 * @param object el - popup instance DOM node 433 * @param boolean outerClick - click on the outer content below popup 434 */ 435 hide: function (el, outerClick) { 436 // Get index of popup ID inside of visiblePopupsArray 437 var popupIdIndex = $.inArray(el.id, visiblePopupsArray);
438 439 // If popup is not opened, ignore the rest of the function 440 if (popupIdIndex === -1) { 441 return; 442 } 443 444 if(opentimer) clearTimeout(opentimer); 445 446 var $body = $('body'); 447 var $el = $(el); 448 var options = $el.data('popupoptions'); 449 var $wrapper = $('#' + el.id + '_wrapper'); 450 var $background = $('#' + el.id + '_background'); 451 452 $el.data('popup-visible', false); 453 454 if (visiblePopupsArray.length === 1) { 455 $('html').removeClass('popup_visible').removeClass('popup_visible_' + el.id); 456 } else { 457 if($('html').hasClass('popup_visible_' + el.id)) { 458 $('html').removeClass('popup_visible_' + el.id); 459 } 460 } 461 462 // Remove popup from the visiblePopupsArray 463 visiblePopupsArray.splice(popupIdIndex, 1); 464 465 if($wrapper.hasClass('popup_wrapper_visible')) { 466 $wrapper.removeClass('popup_wrapper_visible'); 467 } 468 469 // Focus back on saved element 470 if (options.keepfocus && !outerClick) { 471 setTimeout(function() { 472 if ($($el.data('focusedelementbeforepopup')).is(':visible')) { 473 $el.data('focusedelementbeforepopup').focus(); 474 } 475 }, 0); 476 } 477 478 // Hide popup 479 $wrapper.css({ 480 'visibility': 'hidden', 481 'opacity': 0 482 }); 483 $el.css({ 484 'visibility': 'hidden', 485 'opacity': 0 486 }); 487 488 // Hide background 489 if (options.background) { 490 $background.css({ 491 'visibility': 'hidden', 492 'opacity': 0 493 }); 494 } 495 496 // Reveal main content to screen readers 497 $(options.pagecontainer).attr('aria-hidden', false); 498 499 // Hide popup content from screen readers 500 $el.attr('aria-hidden', true); 501 502 // `onclose` callback event 503 callback(el, lastclicked[el.id], options.onclose); 504 505 if (transitionsupport && $el.css('transition-duration') !== '0s') { 506 $el.one('transitionend', function(e) { 507 508 if (!($el.data('popup-visible'))) { 509 if (options.detach) { 510 $el.hide().detach(); 511 } else { 512 $wrapper.hide(); 513 } 514 } 515 516 // Re-enable scrolling of background layer 517 if (options.scrolllock) { 518 setTimeout(function() { 519 $body.css({ 520 overflow: 'visible', 521 'margin-right': bodymarginright 522 }); 523 }, 10); // 10ms added for CSS transition in Firefox which doesn't like overflow:auto 524 } 525 526 callback(el, lastclicked[el.id], options.closetransitionend); 527 }); 528 } else { 529 if (options.detach) { 530 $el.hide().detach(); 531 } else { 532 $wrapper.hide(); 533 } 534 535 // Re-enable scrolling of background layer 536 if (options.scrolllock) { 537 setTimeout(function() { 538 $body.css({ 539 overflow: 'visible', 540 'margin-right': bodymarginright 541 }); 542 }, 10); // 10ms added for CSS transition in Firefox which doesn't like overflow:auto 543 } 544 545 callback(el, lastclicked[el.id], options.closetransitionend); 546 } 547 548 if (options.type == 'tooltip') { 549 $(window).off('resize.' + el.id); 550 } 551 }, 552 553 /** 554 * Toggle method 555 * 556 * @param {object} el - popup instance DOM node 557 * @param {number} ordinal - order number of an `open` element 558 */ 559 toggle: function (el, ordinal) { 560 if ($(el).data('popup-visible')) { 561 methods.hide(el); 562 } else { 563 setTimeout(function() { 564 methods.show(el, ordinal); 565 }, 0); 566 } 567 }, 568 569 /** 570 * Reposition method 571 * 572 * @param {object} el - popup instance DOM node 573 * @param {number} ordinal - order number of an `open` element 574 */ 575 reposition: function (el, ordinal) { 576 var $el = $(el); 577 var options = $el.data('popupoptions'); 578 var $wrapper = $('#' + el.id + '_wrapper'); 579 var $background = $('#' + el.id + '_background'); 580 581 ordinal = ordinal || 0; 582 583 // Tooltip type 584 if (options.type == 'tooltip') { 585 $wrapper.css({ 586 'position': 'absolute' 587 }); 588 589 var $tooltipanchor; 590 if (options.tooltipanchor) { 591 $tooltipanchor = $(options.tooltipanchor); 592 } else if (options.openelement) { 593 $tooltipanchor = $(options.openelement).filter('[data-popup-ordinal="' + ordinal + '"]'); 594 } else { 595 $tooltipanchor = $('.' + el.id + opensuffix + '[data-popup-ordinal="' + ordinal + '"]'); 596 } 597 598 var linkOffset = $tooltipanchor.offset(); 599 600 // Horizontal position for tooltip 601 if (options.horizontal == 'right') { 602 $wrapper.css('left', linkOffset.left + $tooltipanchor.outerWidth() + options.offsetleft); 603 } else if (options.horizontal == 'leftedge') { 604 $wrapper.css('left', linkOffset.left + $tooltipanchor.outerWidth() - $tooltipanchor.outerWidth() + options.offsetleft); 605 } else if (options.horizontal == 'left') { 606 $wrapper.css('right', $window.width() - linkOffset.left - options.offsetleft); 607 } else if (options.horizontal == 'rightedge') { 608 $wrapper.css('right', $window.width() - linkOffset.left - $tooltipanchor.outerWidth() - options.offsetleft); 609 } else { 610 $wrapper.css('left', linkOffset.left + ($tooltipanchor.outerWidth() / 2) - ($el.outerWidth() / 2) - parseFloat($el.css('marginLeft')) + options.offsetleft); 611 } 612 613 // Vertical position for tooltip 614 if (options.vertical == 'bottom') { 615 $wrapper.css('top', linkOffset.top + $tooltipanchor.outerHeight() + options.offsettop); 616 } else if (options.vertical == 'bottomedge') { 617 $wrapper.css('top', linkOffset.top + $tooltipanchor.outerHeight() - $el.outerHeight() + options.offsettop); 618 }
618 else if (options.vertical == 'top') { 619 $wrapper.css('bottom', $window.height() - linkOffset.top - options.offsettop); 620 } else if (options.vertical == 'topedge') { 621 $wrapper.css('bottom', $window.height() - linkOffset.top - $el.outerHeight() - options.offsettop); 622 } else { 623 $wrapper.css('top', linkOffset.top + ($tooltipanchor.outerHeight() / 2) - ($el.outerHeight() / 2) - parseFloat($el.css('marginTop')) + options.offsettop); 624 } 625 626 // Overlay type 627 } else if (options.type == 'overlay') { 628 629 // Horizontal position for overlay 630 if (options.horizontal) { 631 $wrapper.css('text-align', options.horizontal); 632 } else { 633 $wrapper.css('text-align', 'center'); 634 } 635 636 // Vertical position for overlay 637 if (options.vertical) { 638 $el.css('vertical-align', options.vertical); 639 } else { 640 $el.css('vertical-align', 'middle'); 641 } 642 } 643 }, 644 645 /** 646 * Add-close-button method 647 * 648 * @param {object} el - popup instance DOM node 649 */ 650 addclosebutton: function (el) { 651 var genericCloseButton; 652 653 if ($(el).data('popupoptions').closebuttonmarkup) { 654 genericCloseButton = $(options.closebuttonmarkup).addClass(el.id + '_close'); 655 } else { 656 genericCloseButton = '<button class="popup_close ' + el.id + '_close" title="Close" aria-label="Close"><span aria-hidden="true">Ã</span></button>'; 657 } 658 659 if ($(el).data('popup-initialized')){ 660 $(el).append(genericCloseButton); 661 } 662 663 } 664 665 }; 666 667 /** 668 * Callback event calls 669 * 670 * @param {object} el - popup instance DOM node 671 * @param {number} ordinal - order number of an `open` element 672 * @param {function} func - callback function 673 */ 674 var callback = function (el, ordinal, func) { 675 var options = $(el).data('popupoptions'); 676 var openelement = (options.openelement) ? options.openelement : ('.' + el.id + opensuffix); 677 var elementclicked = $(openelement + '[data-popup-ordinal="' + ordinal + '"]'); 678 if (typeof func == 'function') { 679 func.call($(el), el, elementclicked); 680 } 681 }; 682 683 // Hide popup if ESC key is pressed 684 $(document).on('keydown', function (event) { 685 if(visiblePopupsArray.length) { 686 var elementId = visiblePopupsArray[visiblePopupsArray.length - 1]; 687 var el = document.getElementById(elementId); 688 689 if ($(el).data('popupoptions').escape && event.keyCode == 27) { 690 methods.hide(el); 691 } 692 } 693 }); 694 695 // Hide popup on click 696 $(document).on('click', function (event) { 697 if(visiblePopupsArray.length) { 698 var elementId = visiblePopupsArray[visiblePopupsArray.length - 1]; 699 var el = document.getElementById(elementId); 700 var closeButton = ($(el).data('popupoptions').closeelement) ? $(el).data('popupoptions').closeelement : ('.' + el.id + closesuffix); 701 702 // If Close button clicked 703 if ($(event.target).closest(closeButton).length) { 704 event.preventDefault(); 705 methods.hide(el); 706 } 707 708 // If clicked outside of popup 709 if ($(el).data('popupoptions').blur && !$(event.target).closest('#' + elementId).length && event.which !== 2 && $(event.target).is(':visible')) { 710 711 if ($(el).data('popupoptions').background) { 712 // If clicked on popup cover 713 methods.hide(el); 714 715 // Older iOS/Safari will trigger a click on the elements below the cover, 716 // when tapping on the cover, so the default action needs to be prevented. 717 event.preventDefault(); 718 719 } else { 720 // If clicked on outer content 721 methods.hide(el, true); 722 } 723 } 724 } 725 });
726 727 // Keep keyboard focus inside of popup 728 $(document).on('keydown', function(event) { 729 if(visiblePopupsArray.length && event.which == 9) { 730 731 // If tab or shift-tab pressed 732 var elementId = visiblePopupsArray[visiblePopupsArray.length - 1]; 733 var el = document.getElementById(elementId); 734 735 // Get list of all children elements in given object 736 var popupItems = $(el).find('*'); 737 738 // Get list of focusable items 739 var focusableItems = popupItems.filter(focusableElementsString).filter(':visible'); 740 741 // Get currently focused item 742 var focusedItem = $(':focus'); 743 744 // Get the number of focusable items 745 var numberOfFocusableItems = focusableItems.length; 746 747 // Get the index of the currently focused item 748 var focusedItemIndex = focusableItems.index(focusedItem); 749 750 // If popup doesn't contain focusable elements, focus popup itself 751 if (numberOfFocusableItems === 0) { 752 $(el).focus(); 753 event.preventDefault(); 754 } else { 755 if (event.shiftKey) { 756 // Back tab 757 // If focused on first item and user preses back-tab, go to the last focusable item 758 if (focusedItemIndex === 0) { 759 focusableItems.get(numberOfFocusableItems - 1).focus(); 760 event.preventDefault(); 761 } 762 763 } else { 764 // Forward tab 765 // If focused on the last item and user preses tab, go to the first focusable item 766 if (focusedItemIndex == numberOfFocusableItems - 1) { 767 focusableItems.get(0).focus(); 768 event.preventDefault(); 769 } 770 } 771 } 772 } 773 }); 774 775 /** 776 * Plugin API 777 */ 778 $.fn.popup = function (customoptions) { 779 return this.each(function () { 780 781 var $el = $(this); 782 783 if (typeof customoptions === 'object') { // e.g. $('#popup').popup({'color':'blue'}) 784 var opt = $.extend({}, $.fn.popup.defaults, $el.data('popupoptions'), customoptions); 785 $el.data('popupoptions', opt); 786 options = $el.data('popupoptions'); 787 788 methods._init(this); 789 790 } else if (typeof customoptions === 'string') { // e.g. $('#popup').popup('hide') 791 if (!($el.data('popupoptions'))) { 792 $el.data('popupoptions', $.fn.popup.defaults); 793 options = $el.data('popupoptions'); 794 } 795 796 methods[customoptions].call(this, this); 797 798 } else { // e.g. $('#popup').popup() 799 if (!($el.data('popupoptions'))) { 800 $el.data('popupoptions', $.fn.popup.defaults); 801 options = $el.data('popupoptions'); 802 } 803 804 methods._init(this); 805 806 } 807 808 }); 809 }; 810 811 $.fn.popup.defaults = { 812 type: 'overlay', 813 autoopen: false, 814 background: true, 815 backgroundactive: false, 816 color: 'black', 817 opacity: '0.5', 818 horizontal: 'center', 819 vertical: 'middle', 820 offsettop: 0, 821 offsetleft: 0, 822 escape: true, 823 blur: true, 824 setzindex: true, 825 autozindex: false, 826 scrolllock: false, 827 closebutton: false, 828 closebuttonmarkup: null, 829 keepfocus: true, 830 focuselement: null, 831 focusdelay: 50, 832 outline: false, 833 pagecontainer: null, 834 detach: false, 835 openelement: null, 836 closeelement: null, 837 transition: null, 838 tooltipanchor: null, 839 beforeopen: null, 840 onclose: null, 841 onopen: null, 842 opentransitionend: null, 843 closetransitionend: null 844 }; 845 846})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.