PageSourceSearch

https://ankara.gov.tr/bundles/js/accessibility?v=QRIiODevlfz9iARcdaT-dq-l6agmuBRIfcvVpBBkVWc1

js ankara.gov.tr collected 2026-09-27 21:40:34 UTC 24,943 bytes, 730 lines download raw bytes

1/* Minification failed. Returning unminified contents.
2(9,15-16): run-time error JS1003: Expected ':': ,
3(10,19-20): run-time error JS1003: Expected ':': ,
4(11,19-20): run-time error JS1003: Expected ':': ,
5(12,18-19): run-time error JS1003: Expected ':': ,
6(13,21-22): run-time error JS1003: Expected ':': ,
7(14,20-21): run-time error JS1003: Expected ':': ,
8(15,19-20): run-time error JS1003: Expected ':': ,
9(16,28-29): run-time error JS1003: Expected ':': ,
10(17,23-24): run-time error JS1003: Expected ':': ,
11(18,21-22): run-time error JS1003: Expected ':': ,
12(19,21-22): run-time error JS1003: Expected ':': ,
13(20,23-24): run-time error JS1003: Expected ':': ,
14(22,1-2): run-time error JS1003: Expected ':': }
15(32,31-32): run-time error JS1195: Expected expression: >
16(32,55-56): run-time error JS1004: Expected ';': )
17(40,34-35): run-time error JS1195: Expected expression: )
18(40,37-38): run-time error JS1195: Expected expression: >
19(70,48-49): run-time error JS1195: Expected expression: )
20(70,51-52): run-time error JS1195: Expected expression: >
21(71,20-21): run-time error JS1195: Expected expression: )
22(71,23-24): run-time error JS1195: Expected expression: >
23(76,5-6): run-time error JS1002: Syntax error: }
24(79,55-56): run-time error JS1004: Expected ';': {
25(84,2-3): run-time error JS1195: Expected expression: )
26(86,23-24): run-time error JS1004: Expected ';': {
27(134,20-21): run-time error JS1195: Expected expression: )
28(134,23-24): run-time error JS1195: Expected expression: >
29(156,6-7): run-time error JS1195: Expected expression: )
30(179,28-29): run-time error JS1014: Invalid character: `
31(179,31-32): run-time error JS1014: Invalid character: �
32(179,32-33): run-time error JS1193: Expected ',' or ')': l
33(179,33-34): run-time error JS1014: Invalid character: �
34(179,44-45): run-time error JS1014: Invalid character: `
35(179,45-46): run-time error JS1195: Expected expression: )
36(216,56-57): run-time error JS1195: Expected expression: >
37(216,80-81): run-time error JS1004: Expected ';': )
38(251,43-44): run-time error JS1195: Expected expression: >
39(254,6-7): run-time error JS1195: Expected expression: )
40(259,43-44): run-time error JS1195: Expected expression: >
41(262,6-7): run-time error JS1195: Expected expression: )
42(268,56-57): run-time error JS1195: Expected expression: >
43(268,80-81): run-time error JS1004: Expected ';': )
44(300,65-66): run-time error JS1195: Expected expression: >
45(302,10-11): run-time error JS1195: Expected expression: )
46(305,52-53): run-time error JS1195: Expected expression: >
47(309,10-11): run-time error JS1195: Expected expression: )
48(354,30-31): run-time error JS1014: Invalid character: `
49(354,32-33): run-time error JS1004: Expected ';': {
50(354,54-55): run-time error JS1014: Invalid character: `
51(382,25-26): run-time error JS1014: Invalid character: `
52(382,27-28): run-time error JS1004: Expected ';': {
53(382,46-47): run-time error JS1014: Invalid character: `
54(385,28-29): run-time error JS1014: Invalid character: `
55(385,30-31): run-time error JS1004: Expected ';': {
56(385,49-50): run-time error JS1014: Invalid character: `
57(388,28-29): run-time error JS1014: Invalid character: `
58(388,30-31): run-time error JS1004: Expected ';': {
59(388,49-50): run-time error JS1014: Invalid character: `
60(391,31-32): run-time error JS1014: Invalid character: `
61(391,33-34): run-time error JS1004: Expected ';': {
62(391,73-74): run-time error JS1014: Invalid character: `
63(444,32-33): run-time error JS1195: Expected expression: >
64(444,34-35): run-time error JS1197: Too many errors. The file might not be a JavaScript file: {
65(437,1-24): run-time error JS1301: End of file encountered before function is properly closed: function removeImages()
66(462,9-10): run-time error JS1002: Syntax error: }
67(462,10-11): run-time error JS1197: Too many errors. The file might not be a JavaScript file: )
68(87,16-22): run-time error JS1018: 'return' statement outside of function: return
69 */
70let isScreenReaderActive = false;
71let state = {};
72const readingGuide = document.querySelector(".reading-guide");
73const readingMask = document.querySelector(".reading-mask");
74const menu = document.querySelector(".acc-menu");
75const menuButton = document.querySelector(".acc-menu-button");
76
77const featureFunctions = {
78    lineHeight,
79    highlightLinks,
80    makeTextBigger,
81    textAlignLeft,
82    makeCursorBigger,
83    addReadingGuide,
84    addReadingMask,
85    setDyslexicFriendlyFont,
86    toggleHighContrast,
87    desaturateColors,
88    reduceSaturation,
89    increaseSaturation,
90    removeImages
91}
92
93document.addEventListener("DOMContentLoaded", function () {
94    restoreAccFromCookie();
95});
96
97// T�rk�e konu�ma paketi destekleniyor mu kontrol� //
98function isTurkishVoiceAvailable() {
99    const voices = synth.getVoices();
100    
101    return voices.some(voice => voice.lang === 'tr-TR');
102}
103
104// Seslerin y�klenmesini beklemek
105function waitForVoices(callback) {
106    if (synth.getVoices().length > 0) {
107        callback();
108    } else {
109        synth.onvoiceschanged = () => {
110            callback();
111        };
112    }
113}
114
115// Ekran Okuyucu butonunu pasif yap
116function disableScreenReaderButton() {
117    const button = document.getElementById("screenReaderToggleButton");
118    const errorSpan = document.getElementById("screen-reader-error");
119    const tooltip = document.getElementById("screenReaderTooltip");
120
121    alert("T�rk�e konu�ma dil deste�i bulunamad��� i�in i�lem ger�ekle�tirilememi�tir.");
122    button.classList.remove("btn-active");
123    button.classList.add("btn-passive");
124    button.blur()
125
126    //button.disabled = true;
127    //button.classList.add("btn-disabled");
128    //button.setAttribute("aria-disabled", "true");
129
130    //// Set tooltip content (optional, since it's already in HTML)
131    //tooltip.textContent = "Ekran okuyucu taray�c�n�zda T�rk�e dil deste�i bulunmuyor.";
132    //tooltip.hidden = false; // Ensure tooltip is not hidden (CSS handles visibility)
133
134    //errorSpan.hidden = false;
135    //errorSpan.textContent = "Ekran okuyucu taray�c�n�zda T�rk�e dil deste�i bulunmuyor.";
136}
137
138// Sayfa y�klendi�inde T�rk�e ses deste�ini kontrol et
139document.addEventListener("DOMContentLoaded", () => {
140    waitForVoices(() => {
141        //debugger;
142        //if (!isTurkishVoiceAvailable()) {
143        //    disableScreenReaderButton();
144        //}
145    });
146});
147
148document.addEventListener("keydown", function (event) {
149    if (event.ctrlKey && event.key === "y") {
150        event.preventDefault();
151        toggleKeyPressMenu();
152    }
153});
154
155function toggleMenu() {
156    if (!menu) return;
157    const isExpanded = menu.classList.toggle("show");
158    menuButton.setAttribute("aria-expanded", isExpanded.toString());
159}
160
161function toggleKeyPressMenu() {
162    toggleMenu();
163
164    if (menu.classList.contains("show")) {
165        document.addEventListener("keydown", handleMenuNavigation);
166        const firstButton = menu.querySelector("button");
167        if (firstButton) firstButton.focus();
168    } else {
169        document.removeEventListener("keydown", handleMenuNavigation);
170    }
171}
172
173function handleMenuNavigation(event) {
174    if (!menu || !menu.classList.contains("show")) return;
175
176    const buttons = Array.from(menu.querySelectorAll("button"));
177    const activeElement = document.activeElement;
178    let index = buttons.indexOf(activeElement);
179
180    if (event.key === "ArrowDown" || event.key === "ArrowRight") {
181        event.preventDefault();
182        if (index < buttons.length - 1) {
183            buttons[index + 1].focus();
184        } else {
185            buttons[0].focus();
186        }
187    } else if (event.key === "ArrowUp" || event.key === "ArrowLeft") {
188        event.preventDefault();
189        if (index > 0) {
190            buttons[index - 1].focus();
191        } else {
192            buttons[buttons.length - 1].focus();
193        }
194    } else if (event.key === "Enter" || event.key === " ") {
195        event.preventDefault();
196        if (activeElement.tagName === "BUTTON") {
197            activeElement.click();
198        }
199    }
200}
201
202function enableScreenReader() {
203    waitForVoices(() => {
204        if (!isTurkishVoiceAvailable()) {
205            disableScreenReaderButton();
206            stopScreenReader();
207            return;
208        }
209
210        isScreenReaderActive = !isScreenReaderActive;
211        const button = document.getElementById("screenReaderToggleButton");
212
213        if (isScreenReaderActive) {
214            button.classList.remove("btn-passive");
215            button.classList.add("btn-active");
216            button.setAttribute("aria-pressed", "true");
217            startScreenReader();
218        } else {
219            button.classList.remove("btn-active");
220            button.classList.add("btn-passive");
221            button.setAttribute("aria-pressed", "false");
222            button.blur();
223            stopScreenReader();
224        }
225    });
226}
227
228let synth = window.speechSynthesis;
229let textQueue = [];
230
231function startScreenReader() {
232    textQueue = []; // Kuyru�u temizle
233
234    // T�m <h1>�<h6>, <p> ve ba�l�k i�indeki <a>�lar� se�
235    const contentElements = document.querySelectorAll("h1, h2, h3, h4, h5, h6, p");
236
237    for (let i = 0; i < contentElements.length; i++) {
238        const el = contentElements[i];
239
240        if (!isVisible(el)) continue;
241
242        const tagName = el.tagName.toLowerCase();
243        const text = el.textContent.trim();
244        if (!text) continue;
245
246        if (tagName.startsWith("h")) {
247            // Ba�l�k varsa "Ba�l�k:" etiketi ile ekle
248            textQueue.push(`Ba�l�k: ${text}`);
249        } else if (tagName === "p") {
250            // Paragraf varsa do�rudan ekle
251            textQueue.push(text);
252        }
253    }
254
255    readNext();
256}
257
258// Yard�mc�: Eleman g�r�n�r m�?
259function isVisible(el) {
260    const style = window.getComputedStyle(el);
261    const rect = el.getBoundingClientRect();
262
263    return (
264        style.display !== "none" &&
265        style.visibility !== "hidden" &&
266        rect.width > 0 &&
267        rect.height > 0
268    );
269}
270
271
272
273
274
275function stopScreenReader() {
276    synth.cancel();
277    textQueue = [];
278}
279
280function readNext() {
281    if (textQueue.length === 0 || !isScreenReaderActive) return;
282
283    const textToRead = textQueue.shift();
284    const speech = new SpeechSynthesisUtterance(textToRead);
285    const turkishVoice = synth.getVoices().find(voice => voice.lang === 'tr-TR');
286    if (turkishVoice) {
287        speech.voice = turkishVoice;
288    }
289    speech.lang = 'tr-TR';
290
291    speech.onend = function () {
292        readNext();
293    };
294
295    synth.speak(speech);
296}
297
298let isSelectedFieldReaderActive = false;
299
300function enableSelectedFieldReader() {
301    isSelectedFieldReaderActive = !isSelectedFieldReaderActive;
302    const button = document.getElementById("selectedFieldReaderToggleButton");
303
304    if (isSelectedFieldReaderActive) {
305        button.classList.remove("btn-passive");
306        button.classList.add("btn-active");
307        button.setAttribute("aria-pressed", "true");
308        enableFieldSelection();
309    } else {
310        button.classList.remove("btn-active");
311        button.classList.add("btn-passive");
312        button.setAttribute("aria-pressed", "false");
313        button.blur();
314        disableFieldSelection();
315    }
316}
317
318function enableFieldSelection() {
319    const selectableElements = document.querySelectorAll(".selectable");
320    selectableElements.forEach((element) => {
321        element.addEventListener("click", readSelectedField);
322        element.classList.add("highlighted");
323    });
324}
325
326function disableFieldSelection() {
327    const selectableElements = document.querySelectorAll(".selectable");
328    selectableElements.forEach((element) => {
329        element.removeEventListener("click", readSelectedField);
330        element.classList.remove("highlighted");
331    });
332}
333
334function readSelectedField(event) {
335    const textToRead = event.target.textContent.trim();
336    const speech = new SpeechSynthesisUtterance(textToRead);
337    const turkishVoice = synth.getVoices().find(voice => voice.lang === 'tr-TR');
338    if (turkishVoice) {
339        speech.voice = turkishVoice;
340    }
341    speech.lang = 'tr-TR';
342    window.speechSynthesis.speak(speech);
343}
344
345function toggleFeature(feature, className, buttonId) {
346    document.documentElement.classList.toggle(className);
347    state[feature] = !state[feature];
348    const button = document.getElementById(buttonId);
349    setAccCookie(state);
350    if (state[feature]) {
351        button.classList.remove("btn-passive");
352        button.classList.add("btn-active");
353        button.setAttribute("aria-pressed", "true");       
354    } else {
355        button.classList.remove("btn-active");
356        button.classList.add("btn-passive");
357        button.setAttribute("aria-pressed", "false");
358        button.blur();
359    }
360}
361
362function lineHeight() {
363    toggleFeature("lineHeight", "line-height", "lineHeightToggleButton");
364
365    const isActive = document.documentElement.classList.contains('line-height');
366
367    if (isActive) {
368        // A��k durumda - !important ile override et
369        document.querySelectorAll('.line-height *').forEach(el => {
370            el.style.setProperty('line-height', '2', 'important');
371        });
372    } else {
373        // Kapal� durumda - inline stilleri temizle
374        document.querySelectorAll('*').forEach(el => {
375            if (el.style.lineHeight) {
376                el.style.removeProperty('line-height');
377            }
378        });
379    }
380}
381
382function highlightLinks() {
383    toggleFeature("highlightLinks", "highlight", "highlightLinksToggleButton");
384}
385
386function makeTextBigger() {
387    toggleFeature("makeTextBigger", "bigger-text", "makeTextBiggerToggleButton");
388}
389
390function textAlignLeft() {
391    toggleFeature("textAlignLeft", "align-text", "alighTextLeftToggleButton");
392}
393
394function makeCursorBigger() {
395    toggleFeature(
396        "makeCursorBigger",
397        "bigger-cursor",
398        "makeCursorBiggerToggleButton"
399    );
400}
401
402function addReadingGuide() {
403    clearReadingStates(
404        "addReadingMask",
405        "reading-mask-active",
406        "readingMaskToggleButton"
407    );
408    toggleFeature(
409        "addReadingGuide",
410        "reading-guide-active",
411        "readingGuideToggleButton"
412    );
413    if (state.addReadingGuide == true) {
414        readingGuide.style.display = "block";
415        document.addEventListener("mousemove", moveReadingGuide);
416    } else {
417        readingGuide.style.display = "none";
418        document.removeEventListener("mousemove", moveReadingGuide);
419    }
420}
421
422function moveReadingGuide(event) {
423    readingGuide.style.top = `${event.clientY - 10}px`;
424}
425
426function addReadingMask() {
427    clearReadingStates(
428        "addReadingGuide",
429        "reading-guide-active",
430        "readingGuideToggleButton"
431    );
432    toggleFeature(
433        "addReadingMask",
434        "reading-mask-active",
435        "readingMaskToggleButton"
436    );
437
438    if (state.addReadingMask == true) {
439        readingMask.style.display = "block";
440        document.addEventListener("mousemove", moveReadingMask);
441    } else {
442        readingMask.style.display = "none";
443        document.removeEventListener("mousemove", moveReadingMask);
444    }
445}
446
447function moveReadingMask(event) {
448    const mouseY = event.clientY;
449    const offset = 80;
450    const topLine = document.querySelector(".reading-mask-line-top");
451    topLine.style.top = `${mouseY - offset}px`;
452
453    const bottomLine = document.querySelector(".reading-mask-line-bottom");
454    bottomLine.style.top = `${mouseY + offset}px`;
455
456    const topFade = document.querySelector(".fade-area-top");
457    topFade.style.height = `${mouseY - offset}px`;
458
459    const bottomFade = document.querySelector(".fade-area-bottom");
460    bottomFade.style.height = `${window.innerHeight - mouseY - offset}px`;
461}
462
463function setDyslexicFriendlyFont() {
464    toggleFeature(
465        "setDyslexicFriendlyFont",
466        "dyslexia-font",
467        "setDyslexicFriendlyFontToggleButton"
468    );
469}
470
471function toggleHighContrast() {
472    toggleFeature(
473        "toggleHighContrast",
474        "high-contrast",
475        "highContrastToggleButton"
476    );
477}
478
479function desaturateColors() {
480    clearSaturationStates("desaturate", "desaturateColors");
481    toggleFeature(
482        "desaturateColors",
483        "desaturate",
484        "desaturateColorsToggleButton"
485    );
486}
487
488function reduceSaturation() {
489    clearSaturationStates("low-saturation", "reduceSaturation");
490    toggleFeature(
491        "reduceSaturation",
492        "low-saturation",
493        "reduceSaturationToggleButton"
494    );
495}
496
497function increaseSaturation() {
498    clearSaturationStates("high-saturation", "increaseSaturation");
499    toggleFeature(
500        "increaseSaturation",
501        "high-saturation",
502        "increaseSaturationToggleButton"
503    );
504}
505
506function removeImages() {
507    toggleFeature("removeImages", "remove-images", "removeImagesToggleButton");
508    
509    const html = document.documentElement;
510    const elements = document.querySelectorAll("*");
511
512    if (html.classList.contains("remove-images")) {
513        elements.forEach((el) => {
514            const computedStyle = window.getComputedStyle(el);
515            const bgImage = computedStyle.getPropertyValue("background-image");
516            const bg = computedStyle.getPropertyValue("background");
517
518            if (bgImage && bgImage.includes("url")) {
519                if (!el.hasAttribute("data-bg-image")) {
520                    el.setAttribute("data-bg-image", bgImage);
521                }
522                el.style.setProperty("background-image", "none", "important");
523            }
524
525            if ((!bgImage || bgImage === "none") && bg.includes("url")) {
526                if (!el.hasAttribute("data-bg")) {
527                    el.setAttribute("data-bg", bg);
528                }
529                el.style.setProperty("background", "none", "important");
530            }
531        });
532
533        document.querySelectorAll("img").forEach((img) => {
534
535            if (!img.hasAttribute("data-original-visibility")) {
536                const visibility = window
537                    .getComputedStyle(img)
538                    .getPropertyValue("visibility");
539                img.setAttribute("data-original-visibility", visibility);
540            }
541
542            img.style.setProperty("visibility", "hidden", "important");
543        });
544    } else {
545        elements.forEach((el) => {
546            if (el.hasAttribute("data-bg-image")) {
547                const original = el.getAttribute("data-bg-image");
548                el.style.setProperty("background-image", original, "important");
549                el.removeAttribute("data-bg-image");
550            }
551
552            if (el.hasAttribute("data-bg")) {
553                const original = el.getAttribute("data-bg");
554                el.style.setProperty("background", original, "important");
555                el.removeAttribute("data-bg");
556            }
557        });
558
559        document.querySelectorAll("img").forEach((img) => {
560            if (img.hasAttribute("data-original-visibility")) {
561                const original = img.getAttribute("data-original-visibility");
562                img.style.setProperty("visibility", original, "important");
563                img.removeAttribute("data-original-visibility");
564            }
565        });
566
567    }
568}
569
570function clearSaturationStates(className, activeFeature) {
571    if (document.documentElement.classList.contains(className)) {
572        return;
573    }
574
575    const features = ["desaturateColors", "reduceSaturation", "increaseSaturation"];
576    const saturationClasses = ["desaturate", "high-saturation", "low-saturation"];
577    const buttons = {
578        desaturate: "desaturateColorsToggleButton",
579        "high-saturation": "increaseSaturationToggleButton",
580        "low-saturation": "reduceSaturationToggleButton",
581    };
582
583    saturationClasses.forEach((saturationClass) => {
584        if (document.documentElement.classList.contains(saturationClass)) {
585            document.documentElement.classList.remove(saturationClass);
586            const button = document.getElementById(buttons[saturationClass]);
587            if (button) {
588                button.classList.remove("btn-active");
589                button.classList.add("btn-passive");
590                button.setAttribute("aria-pressed", "false");
591                button.blur();
592            }            
593            features.forEach(feature => {
594                if (feature !== activeFeature) {
595                    state[feature] = false;
596                }
597            });           
598        }
599    });
600}
601
602function clearReadingStates(feature, className, buttonId) {
603    if (!document.getElementById(buttonId).classList.contains("btn-active"))
604        return;
605
606    state[feature] = false;
607    document.documentElement.classList.remove(className);
608
609    const button = document.getElementById(buttonId);
610    button.classList.remove("btn-active");
611    button.classList.add("btn-passive");
612    button.setAttribute("aria-pressed", "false");
613    button.blur();
614
615    if (feature == "addReadingGuide") {
616        readingGuide.style.display = "none";
617        document.removeEventListener("mousemove", moveReadingGuide);
618    } else {
619        readingMask.style.display = "none";
620        document.removeEventListener("mousemove", moveReadingMask);
621    }
622}
623
624function clearAllStates() {
625    document.documentElement.className = "";
626    state = {
627        lineHeight: false,
628        highlightLinks: false,
629        makeTextBigger: false,
630        textAlignLeft: false,
631        makeCursorBigger: false,
632        addReadingGuide: false,
633        addReadingMask: false,
634        setDyslexicFriendlyFont: false,
635        toggleHighContrast: false,
636        desaturateColors: false,
637        reduceSaturation: false,
638        increaseSaturation: false,
639        removeImages: false
640    }
641    deleteAccCookie();
642
643    const buttons = document.querySelectorAll(".acc-menu button");
644    buttons.forEach((b) => {
645        b.classList.remove("btn-active");
646        b.classList.add("btn-passive");
647        b.setAttribute("aria-pressed", "false");
648        b.blur();
649    });
650
651    readingGuide.style.display = "none";
652    document.removeEventListener("mousemove", moveReadingGuide);
653
654    readingMask.style.display = "none";
655    document.removeEventListener("mousemove", moveReadingMask);
656
657    const elements = document.querySelectorAll("*");
658    elements.forEach((el) => {
659        if (el.hasAttribute("data-bg-image")) {
660            const original = el.getAttribute("data-bg-image");
661            el.style.setProperty("background-image", original, "important");
662            el.removeAttribute("data-bg-image");
663        }
664
665        if (el.hasAttribute("data-bg")) {
666            const original = el.getAttribute("data-bg");
667            el.style.setProperty("background", original, "important");
668            el.removeAttribute("data-bg");
669        }
670    });
671
672    document.querySelectorAll("img").forEach((img) => {
673        if (img.hasAttribute("data-original-visibility")) {
674            const original = img.getAttribute("data-original-visibility");
675            img.style.setProperty("visibility", original, "important");
676            img.removeAttribute("data-original-visibility");
677        }
678    });
679
680
681    document.querySelectorAll('*').forEach(el => {
682        if (el.style.lineHeight) {
683            el.style.removeProperty('line-height');
684        }
685    });
686}
687
688function setAccCookie(state) {
689    const stateJSON = encodeURIComponent(JSON.stringify(state));
690
691    const days = 30;
692    const expires = new Date(
693        Date.now() + days * 24 * 60 * 60 * 1000
694    ).toUTCString();
695
696    document.cookie = `acc_state=${stateJSON}; expires=${expires}; path=/`;
697}
698
699function deleteAccCookie() {
700    document.cookie = "acc_state=; Max-Age=0; path=/";
701}
702
703function getAccState() {
704    const accCookie = document.cookie
705        .split("; ")
706        .find(c => c.startsWith("acc_state" + "="));
707
708    if (!accCookie) return {};
709
710    return JSON.parse(
711        decodeURIComponent(accCookie.split("=")[1])
712    );
713}
714
715function restoreAccFromCookie() {
716    const cookiedState = getAccState("acc_state");
717    let count = 0;
718    if (!cookiedState) return;
719
720    Object.keys(cookiedState).forEach(key => {
721        if (cookiedState[key] === true && typeof featureFunctions[key] === "function") {
722            featureFunctions[key]();
723            count++;
724        }
725    });
726
727    if (count === 0) {
728        deleteAccCookie();
729    }
730};

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.