PageSourceSearch

https://secure.alturacu.ie/js/jquery.popup.js

js alturacu.ie collected 2026-09-24 13:31:43 UTC 30,333 bytes, 828 lines download raw bytes

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