PageSourceSearch

http://img.koreatimes.com/2015/js/jquery.popupoverlay.js?v=2026-09-242810

js koreatimes.com collected 2026-09-24 17:37:49 UTC 30,872 bytes, 846 lines download raw bytes

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.