PageSourceSearch

https://www.bellbrook.gov/runtime/scripts/eztabs.js?v=7.0.10.0

js bellbrook.gov collected 2026-10-02 23:22:00 UTC 26,768 bytes, 721 lines download raw bytes

1/******************************************
2    Name: TabStrip Module
3    Author: Zerry Hogan
4    Version: 1.0.0
5    Last Updated: 2/1/2018
6*******************************************/
7;
8
9(function(window, document, i, undefined) {
10    "use strict";
11
12    (function() {
13        /*Polyfill for Custom Event API in Internet Explorer 9+*/
14        if (typeof window.CustomEvent === "function") return false;
15
16        function CustomEvent(event, params) {
17            params = params || {
18                bubbles: false,
19                cancelable: false,
20                detail: undefined
21            };
22            var evt = document.createEvent('CustomEvent');
23            evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);
24            return evt;
25        }
26
27        CustomEvent.prototype = window.Event.prototype;
28
29        window.CustomEvent = CustomEvent;
30    })();
31
32    function Observer(sender) {
33        if (!(this instanceof Observer)) {
34            return new Observer(sender);
35        }
36        this._sender = sender;
37        this._listeners = [];
38    }
39
40    Observer.prototype = {
41        attach: function(listener) {
42            this._listeners.push(listener)
43        },
44        notify: function(args) {
45            var index;
46
47            for (index = 0; index < this._listeners.length; index++) {
48                this._listeners[index](this._sender, args)
49            }
50        }
51    }
52
53    // Create the defaults once
54    var defaults = {
55            mobileBreakPoint: 700,
56            tabNamespace: "eztabs",
57            panelNamespace: "eztabs__panel",
58            accordionNamespace: "eztabs__accordion",
59            activeTabClass: "eztabs__tab--active",
60            activePanelClass: "eztabs__panels--visible",
61            activeAccordionClass: "eztabs__accordion--active",
62            mobileClass: "eztabs--mobile"
63        },
64        editTabsWrapper = '<ul class="eztabs__tabs__editors"></ul>',
65        newTabHTML = '<li class="eztabs__tab" tabindex="0" role="tab"><span class="eztabs__tab__deleteBtn ion-trash-a" title="Delete this tab?"></span><span>Enter Text Here</span></li>',
66        newPanelHTML = '<div class="eztabs__panels" role="tabpanel"><div class="eztabs__panels__inner clearfix"> NEW TAB </div></div>',
67        newAccordionHTML = "<div class='eztabs__accordion' data-index=''><div class='eztabs__accordion__inner'>Enter Text Here</div></div>",
68        tabToolTip = "",
69        urlParameters = ezUtilities.getURLParameters();
70
71    var ezTabs = function(element) {
72        if (!(this instanceof ezTabs)) {
73            return new ezTabs(element);
74        }
75        var tabstrips = $(element);
76        if (!tabstrips.length) return;
77        if (tabstrips.length > 1) {
78            tabstrips.each(function() {
79                new ezTabs(this);
80                i++;
81            });
82            return;
83        }
84
85        var _ = this;
86
87        //Cached Dom Elements
88        _.element = $(element)[0];
89        _.$element = $(element);
90        _.$nav = _.$element.children(".eztabs__tabs__wrapper").children(".eztabs__tabs");
91        _.$navPanels = _.$element.children(".eztabs__panels__wrapper");
92        _.$tabs = _.$nav.children(".eztabs__tab");
93        _.$panels = _.$navPanels.children(".eztabs__panels");
94        _.$accordions = null;
95        _.$editTab = _.$nav.children(".eztabs__tabs__editors").find(".eztabs__tab--create");
96        _.$deleteTab = _.$nav.children(".eztabs__tabs__editors").find(".eztabs__tab--delete");
97
98        //Data Variables
99        _.options = {
100            "mode": _.$element.attr("data-mode"),
101            "startTab": _.$element.attr("data-start")
102        };
103        _.id = _.$element.attr("id");
104        _.index = i;
105        _.numberOfTabs = _.$tabs.length;
106        _.settings = $.extend({}, defaults, _.options);
107        _._activeTab = _.options.startTab || 0;
108        _._windowWidth = window.innerWidth;
109        _._name = "TabStrip" + (i + 1);
110        _._tabNames = [];
111
112        //Events
113        _._tabWasCreatedEvent = new Observer(_);
114        _._tabOrderChangedEvent = new Observer(_);
115        _._tabWasClickedEvent = new Observer(_);
116        _._tabNameChangedEvent = new Observer(_);
117        _._tabWillDeleteEvent = new Observer(_);
118        _._tabWasDeletedEvent = new Observer(_);
119        _._tabWillBeCreatedEvent = new Observer(_);
120        _._tabWasOpened = new Observer(_);
121
122        //Private Methods
123        _._accordionActivated = function(e) {
124            e.preventDefault();
125
126            var index = $(this).attr("data-index");
127            var tab = _.$tabs.eq(index);
128            var panel = $(tab[0].panel);
129            var accordion = $(tab[0].accordion);
130            if (index == _._activeTab) {
131                _._closeAll();
132            } else {
133                _._activeTab = index;
134                _._showTab(index);
135                _._showPanel(panel);
136                _._showAccordion(accordion);
137
138                _._tabWasClickedEvent.notify(); //Let listeners know tab was clicked
139            }
140        }
141
142        _._addTooltip = function(tab) {
143            var tooltip = $("<div class='eztooltip__icon'></div>")
144            $(tab).addClass("eztooltip__content").children().wrap(tooltip);
145            $(tab).append("<div class='eztooltip__message'>Double click to rename</div>")
146        }
147
148        _._addTooltipsToTabs = function() {
149            _.$tabs.each(function(i) {
150                _._addTooltip(this)
151            });
152        }
153
154        _._attachPanelsToTab = function() {
155            //stores a reference to each tabs panel and accordion
156            //Makes it easy to keep track of them when deleting and reordering
157            _.$tabs.each(function(i) {
158                _._makePanelReference(this, i)
159            });
160        }
161
162        _._buildAccordions = function() {
163            _.$panels.each(function(i) {
164                _._makeTabAccordion(this, i);
165            });
166        }
167
168        _._prepareTabCreation = function(e) {
169            _._triggerSaving();
170            var order = _._getTabsOrder();
171            order.push("Enter Text Here");
172            _._tabWillBeCreatedEvent.notify({
173                order: order
174            });
175        }
176
177        _._requestTabDeletion = function(e) {
178            var tab = _.$nav.find(".eztabs__tab--active");
179            var name = tab.find(".eztabs__tab__name").text();
180            var order = _._getTabsOrder();
181            _._triggerSaving();
182            _._tabWillDeleteEvent.notify({
183                tab: tab,
184                order: order,
185                tabIndex: tab.index(),
186                tabName: name
187            });
188        }
189
190        _._closeAll = function(e) {
191            _.$tabs
192                .removeClass(defaults.activeTabClass)
193                .attr({
194                    "aria-selected": "false",
195                    "tabindex": "0" //kevin was -1
196                });
197            _.$panels.removeClass(defaults.activePanelClass).attr("aria-hidden", "true");
198            _.$accordions.removeClass(defaults.activeAccordionClass);
199            _._activeTab = null;
200        }
201
202        _._createNewTab = function(e) {
203            var newTab = $(newTabHTML);
204            var newPanel = $(newPanelHTML);
205            var newAccordion = $(newAccordionHTML);
206            _.$nav.append(newTab);
207            var i = newTab.index();
208            _.$navPanels.append(newPanel);
209            _.$tabs = _.$nav.children(".eztabs__tab");
210            _._makeTabAccordion(newPanel, i);
211            _.$accordions = _.$navPanels.children(".eztabs__accordion");
212            _.$panels = _.$navPanels.children(".eztabs__panels");
213            _._makeTabCompliant(newTab, i);
214            _._makeTabEditable(newTab);
215            _._makePanelReference(newTab, i);
216            _._addTooltip(newTab);
217            _._collectTabInfo();
218            newTab.on("click", _._tabActivated);
219            newTab.on("keyup", _._tabKeyup);
220            newTab.click();
221            newTab.dblclick();
222            _._tabWasCreatedEvent.notify({
223                order: _._getTabsOrder(),
224                tab: newTab,
225                panel: newPanel
226            });
227            _._triggerFinish();
228            return newTab
229        }
230
231
232        _._deleteTab = function(tab) {
233            var index = tab.index();
234            tab.remove();
235            $(tab[0].panel).remove();
236            $(tab[0].accordion).remove();
237            _.$tabs = _.$nav.children(".eztabs__tab");
238            _.$panels = _.$navPanels.children(".eztabs__panels");
239            _.$accordions = _.$navPanels.children(".eztabs__accordion");
240            var newIndex = index;
241            if (index == 0) newIndex = 0;
242            else if (index == _.$tabs.length) newIndex = index - 1;
243            _.$tabs.eq(newIndex).click();
244            var order = _._getTabsOrder();
245            _._tabWasDeletedEvent.notify({
246                order: order
247            });
248            _._triggerFinish();
249            if (_.$tabs.length == 0) _._prepareTabCreation();
250        }
251
252
253        _._enableADACompliance = function() {
254            _.$tabs.each(function(i) {
255                _._makeTabCompliant(this, i);
256            });
257        }
258
259
260
261        _._enableDrag = function() {
262            _.$nav.sortable({
263                tolerance: "pointer",
264                items: "> li",
265                update: function(e, ui) {
266                    _.$tabs = _.$nav.children(".eztabs__tab");
267                    var $tab = $(ui.item);
268                    var oldPosition = Number($tab.attr("data-position"));
269                    $tab.click(); //Makes dropped tab the active tab
270                    _._collectTabInfo();
271                    _._tabOrderChangedEvent.notify({
272                        order: _._getTabsOrder(),
273                        oldPosition: oldPosition,
274                        newPosition: $tab.index(),
275                        name: $tab.find(".eztabs__tab__name").text(),
276                        id: $tab.attr("id"),
277                        dataId: $tab.attr("data-id"),
278                        tab: $tab
279                    });
280                    _._tabWasOpened.notify();
281                },
282                start: function(e, ui) {
283                    var $placeholder = $(ui.placeholder);
284                    var $tab = $(ui.item);
285                    var width = parseFloat($tab.attr("data-width")) || $tab.
285width();
286                    var height = parseFloat($tab.attr("data-height")) || $tab.height();
287                    $tab.css({
288                        width: (width + 1) + "px",
289                        height: (height) + "px"
290                    });
291                    $placeholder.css({
292                        width: (width + 1) + "px",
293                        height: (height) + "px"
294                    });
295                    $tab[0].dragged = true;
296                }
297            });
298        }
299
300
301        _._enableTextEdit = function() {
302            _.$tabs.each(function(i) {
303                _._makeTabEditable(this);
304            });
305        }
306
307        _._getTabsOrder = function() {
308            var order = [];
309            _.$tabs.each(function() {
310                var name = $(this).find(".eztabs__tab__name").text();
311                order.push(name);
312            });
313            return order
314        }
315
316        _._makeTabAccordion = function(panel, i) {
317            var panel = $(panel);
318            var accordion = $("<div class='eztabs__accordion' tabindex='0' role='tab' data-index='" + i + "'><div class='eztabs__accordion__inner'><span class='eztabs__accordion__name'>" + $(_.$tabs[i]).text() + "</span><span class='eztabs__accordion__icon ion-arrow-down-b'></span></div></div>");
319            accordion.insertBefore(panel);
320            _.$accordions = _.$navPanels.children(".eztabs__accordion");            
321        }
322
323        _._makeTabCompliant = function(tab, i) {
324            var tab = $(tab);
325            if (!tab.attr("id")) {
326                tab.attr({
327                    "id": defaults.tabNamespace + _.index + "-" + i,
328                    "aria-controls": defaults.panelNamespace + _.index + "-" + i
329                });
330            }
331            _.$panels.eq(i).attr({
332                "id": defaults.panelNamespace + _.index + "-" + i,
333                "aria-labelledby": tab.attr("id")
334            });
335
336            _.$panels.eq(i).on('keydown', function(e){
337                var keyCode = e.keyCode || e.which;
338                if (keyCode == 9) {
339                    var focusable = $(this).find('button, [href], input, select, textarea, [tabindex]:not([tabindex="-1"])');
340                    var lastFocusable = focusable[focusable.length - 1];
341                       
342                    if ( $(lastFocusable).is(":focus") ){
343                        if ( i < _.$tabs.length - 1 ) {
344                            _.$tabs.eq(i).focus();
345                            _._tabActivated;                                                        
346                        }
347                        if ( i == _.$tabs.length - 1) {
348                            _._closeAll();
349                        }
350                    }                   
351                }
352            });
353        }
354
355        _._makeTabEditable = function(tab) {
356            var tab = $(tab);
357            var name = tab.text();
358            var span = $("<span class='eztabs__tab__name'>" + name + "</span>");
359            var editableDiv = $("<span contenteditable class='eztabs__eztab__input'>" + name + "</span>");
360            tab.children().eq(0).empty().append(span).append(editableDiv);
361            tab.on("dblclick", _._tabDoubleClick);
362            editableDiv.on("dblclick", function(e) {
363                e.stopPropagation();
364                e.preventDefault();
365            });
366            editableDiv.on("mousedown", function(e) {
367                e.stopPropagation();
368            });
369            editableDiv.on("keypress", _._tabEditingNameKeypress);
370            editableDiv.on("keyup", _._tabEditingNameKeyup);
371            editableDiv.on("blur", _._tabFinishEditingName);
372        }
373
374        _._makePanelReference = function(tab, i) {
375            var tab = $(tab)[0];
376            tab.panel = _.$panels.eq(i);
377            tab.accordion = _.$accordions.eq(i);
378        }
379
380        _._tabFinishEditingName = function(e) {
381            var tab = $(this).closest(".eztabs__tab");
382            var editableDiv = tab.find(".eztabs__eztab__input");
383            var name = tab.find(".eztabs__tab__name");
384            var oldName = editableDiv.text();
385            var accordion = tab[0].accordion.find(".eztabs__accordion__inner");
386            var index = tab.index();
387            editableDiv.removeClass("eztabs__eztab__input--editing")
388            name.removeClass("eztabs__tab__name--editing");
389            if (editableDiv.text() == "") editableDiv.text(name.text());
390            if (name.text() !== editableDiv.text()) {
391                var newName = editableDiv.text().trim();
392                var oldName = name.text();
393                name.text(editableDiv.text());
394                accordion.text(editableDiv.text());
395                _._storeDimensions(tab);
396                _._collectTabInfo();
397                _._tabNameChangedEvent.notify({
398                    item: tab,
399                    order: _._getTabsOrder(),
400                    oldName: oldName,
401                    newName: newName,
402                    position: index,
403                    id: tab.attr("id"),
404                    dataId: tab.attr("data-id")
405                });
406            }
407        }
408
409
410        _._tabDoubleClick = function(e) {
411            var tab = $(this);
412            var editableDiv = tab.find(".eztabs__eztab__input");
413            var name = tab.find(".eztabs__tab__name");
414            name.addClass("eztabs__tab__name--editing");
415            editableDiv.addClass("eztabs__eztab__input--editing").focus();
416        }
417
418        _._triggerSaving = function() {
419            _.$element.addClass("eztabs--saving");
420        }
421
422        _._triggerFinish = function() {
423            _.$element.removeClass("eztabs--saving");
424        }
425
426        _._showPanel = function(panel) {
427            _.$panels.removeClass(defaults.activePanelClass).attr("aria-hidden", "true");
428            panel.addClass(defaults.activePanelClass).attr("aria-hidden", "false");
429        }
430
431        _._showTab = function(index) {
432            _.$tabs
433                .removeClass(defaults.activeTabClass)
434                .attr({
435                    "aria-selected": "false",
436                    "tabindex": "0" //kevin was -1
437                })
438                .eq(index)
439                .addClass(defaults.activeTabClass)
440                .attr({
441                    "aria-selected": "true",
442                    "tabindex": "0"
443                })
444                .focus();
445        }
446
447        _._showAccordion = function(accordion) {
448            _.$accordions.removeClass(defaults.activeAccordionClass);
449            accordion.addClass(defaults.activeAccordionClass);
450        }
451
452        _._collectTabInfo = function() {
453            var _ = this;
454            _._tabNames = [];
455            _.$tabs.each(function(position) {
456                var name;
457                $(this).attr("data-position", position);
458                if ($(this).children().eq(0).children().length) {
459                    name = $(this).children().children().eq(0).children(".eztabs__tab__name").text()
460                } else name = $(this).children().text()
461                _._tabNames.push(name)
462            });
463        }
464
465        _._storeDimensions = function(tab, index) {
466            var $tab = $(tab);
467            var width = $tab.width();
468            var height = $tab.height();
469            $tab.attr({
470                "data-width": width,
471                "data-height": height
472            });
473        }
474
475        _._tabActivated = function(e, tab) {
476            var keyCode = e.keyCode || e.which;
477            if (keyCode == 1 || keyCode == 39 || keyCode == 37 || keyCode == 9) {   //kevin add 9
478                if (this.lastClick == undefined) this.lastClick = 0;
479                var timestamp = new Date().getTime();
480                var index = $(this).index();
481                var panel = $(this.panel);
482                var accordion = $(this.accordion);
483                var name = $(this).find(".eztabs__tab__name").text();
484                var dataId = $(this).attr("data-id");
485
486                _._showTab(index);
487                _._showPanel(panel);
488                _._showAccordion(accordion);
489                if (!this.dragged && timestamp > (this.lastClick + 300) && index != _._activeTab) {
490                    _._activeTab = index;
491                    this.lastClick = timestamp;
492                    _._tabWasClickedEvent.notify({
493                        newPosition: index,
494                        name: name,
495                        dataId: dataId
496                    });
497                } else {
498                    this.dragged = false;
499                }
500                _._tabWasOpened.notify();
501            }
502        }
503
504        _._tabEditingNameEscape = function(editableDiv, tab) {
505            var originalName = tab.find(".eztabs__tab__name").text();
506            $(editableDiv).text(originalName);
507            $(editableDiv).blur();
508        }
509
510        _._tabEditingNameKeyup = function(e) {
511            var keyCode = e.keyCode || e.which;
512            if (keyCode == 39 || keyCode == 37) {
513                e.stopPropagation();
514            }
515            if (keyCode == 27) {
516                e.stopPropagation();
517                var tab = $(this).closest(".eztabs__tab");
518                _._tabEditingNameEscape(this, tab);
519            }
520        }
521
522
523        _._tabEditingNameKeypress = function(e) {
524            var keyCode = e.keyCode || e.which;
525            if (keyCode == 13) {
526                e.preventDefault();
527                $(this).blur(); //trigger finish editing name
528            }
529            if (keyCode == 39 || keyCode == 37) {
530                e.stopPropagation();
531            }
532        }
533
534        _._tabKeyup = function(e) {
535            var thisTab = $(this);
536            var keyCode = e.keyCode || e.which;
537            if (keyCode == 9) {
538                //_._tabActivated.call(this, e); kevin
539                thisTab.focus();
540                _._tabActivated.call(thisTab[0], e);
541                thisTab.attr('aria-describedby','tab-instructions');
542            }
543            if (keyCode == 13) {
544                var panel = $(thisTab[0].panel);
545                if (panel.length) {
546                    panel.attr("tabindex", "0");
547                    panel.focus();
548                }
549            }
550            if (keyCode == 39) {
551                //Right key
552                var next = $(this).next(".eztabs__tab");
553                if (!next.length) next = _.$tabs.eq(0);
554                next.focus();
555                _._tabActivated.call(next[0], e);
556            }
557            if (keyCode == 37) {
558                //Left Key
559                var prev = $(this).prev(".eztabs__tab");
560                if (!prev.length) prev = _.$tabs.eq(_.$tabs.length - 1);
561                prev.focus();
562                _._tabActivated.call(prev[0], e);
563            }
564        }
565
566        _._accordionKeyup = function(e) {
567            
568            var currentIndex;
569            var keyCode = e.keyCode || e.which;
570            if (keyCode == 9) {
571                currentIndex = parseInt($(this).attr('data-index'));
572                _.$accordions[currentIndex].click();
573            }
574            if (keyCode == 40) {                
575                currentIndex = parseInt($(this).attr('data-index'));
576                
577                if(currentIndex == _.$accordions.length - 1) {
578                    currentIndex = 0;
579                   
580                } else {
581                    currentIndex++;
582                }
583
584                _.$accordions[currentIndex].focus();
585                _.$accordions[currentIndex].click();                
586                
587            }
588
589            if (keyCode == 38) {                
590                
591                currentIndex = parseInt($(this).attr('data-index'));
592                
593                if(currentIndex == 0) {
594                    currentIndex = _.$accordions.length - 1;
595                   
596                } else {
597                    currentIndex--;
598                }
599
600                _.$accordions[currentIndex].focus();
601                _.$accordions[currentIndex].click();
602                
603            }            
604        }
605
606        //Setup
607        _._enableADACompliance();
608        _._buildAccordions();
609        _._attachPanelsToTab();
610        if (_.settings.mode == "edit") {
611            _.$element.addClass("eztabs--editing");
612            _.$editTab.on("click", _._prepareTabCreation);
613            _.$deleteTab.on("click", _._requestTabDeletion);
614            _._enableDrag();
615            _._enableTextEdit();
616            _._addTooltipsToTabs();
617            _.$tabs.each(function(index) {
618                _._storeDimensions(this, index);
619            });
620        }
621
622        //Event Binding
623        _.$tabs.on("mousedown", _._tabActivated);
624        _.$tabs.on("keyup", _._tabKeyup);
625        _.$accordions.on("click", _._accordionActivated);
626        _.$accordions.on("keyup", _._accordionKeyup);
627
628        //Intialization
629        _._collectTabInfo();
630        if (urlParameters.tab) {
631            var startTab = _._tabNames.indexOf(urlParameters.tab);
632            if (startTab > -1) {
633                _.settings.startTab = startTab;
634                var tabOffsetTop = _.$tabs.eq(_.settings.startTab).offset().top;
635                $("html").animate({
636                    scrollTop: tabOffsetTop
637                });
638            }
639        }
640        _.$tabs.removeClass(defaults.activeTabClass).eq(_.settings.startTab != undefined ? _.settings.startTab : 0).addClass(defaults.activeTabClass);
641        _._showPanel(_.$panels.eq(_.settings.startTab != undefined ? _.settings.startTab : 0));
642        _._showAccordion(_.$accordions.eq(_.settings.startTab != undefined ? _.settings.startTab : 0));
643        $.data(_.element, "ezTabs", _);
644        $.fn.ezTabs = function() {
645            return jQuery.data(this[0]).ezTabs
646        }
647
648        var ezTabsReady = new CustomEvent("ezTabs:ready");
649        _.element.dispatchEvent(ezTabsReady);
650        if (_._windowWidth <= _.settings.mobileBreakPoint) {
651            _.$element.addClass(defaults.mobileClass);
652            _._closeAll();
653        }
654    };
655
656    ezTabs.prototype.createNewTab = function() {
657        return this._createNewTab();
658    }
659
660    ezTabs.prototype.deleteTab = function(tab) {
661        this._deleteTab(tab);
662    }
663
664    ezTabs.prototype.onTabCreated = function(func) {
665        this._tabWasCreatedEvent.attach(function(sender, args) {
666            func(sender, args);
667        });
668    }
669
670    ezTabs.prototype.onTabClick = function(func) {
671        this._tabWasClickedEvent.attach(function(sender, args) {
672            func(sender, args);
673        });
674    }
675
676
677    ezTabs.prototype.onTabDeleted = function(func) {
678        this._tabWasDeletedEvent.attach(function(sender, args) {
679            func(sender, args);
680        });
681    }
682
683
684    ezTabs.prototype.onTabOrderChanged = function(func) {
685        this._tabOrderChangedEvent.attach(function(sender, args) {
686            func(sender, args);
687        });
688    }
689
690    ezTabs.prototype.onTabOpened = function(func) {
691        this._tabWasOpened.attach(function(sender, args) {
692            func(sender, args);
693        });
694    }
695
696    ezTabs.prototype.onTabWillBeCreated = function(func) {
697        this._tabWillBeCreatedEvent.attach(function(sender, args) {
698            func(sender, args);
699        });
700    }
701
702    ezTabs.prototype.onTabWillDelete = function(func) {
703        this._tabWillDeleteEvent.attach(function(sender, args) {
704            func(sender, args);
705        });
706    }
707
708
709    ezTabs.prototype.onTabNameChange = function(func) {
710        this._tabNameChangedEvent.attach(function(sender, args) {
711            func(sender, args);
712        });
713    }
714
715    window.ezTabs = ezTabs;
716
717    $(function() {
718        var tabstrips = new ezTabs($(".eztabs"));
719    });
720
721})(window, document, 0)

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.