PageSourceSearch

https://sosyalzone.com/themes/temarodin/assets/js/nsoft.js?v=393.7

js sosyalzone.com collected 2026-10-09 01:40:40 UTC 26,956 bytes, 601 lines download raw bytes

1// Pack List Rank
2$('body').on('click','*[data-pack_rank]',function(){
3    var type = $(this).data("pack_rank");
4    var order = $(this).data("rate");
5    var items = $(".pack--list .pack--item");
6    switch (type) {
7        case "quantity":
8            items.sort(function(a, b) {
9                var aValue = $(a).data("quantity");
10                var bValue = $(b).data("quantity");
11                return order === "asc" ? aValue - bValue : bValue - aValue;
12            });
13            break;
14        case "price":
15            items.sort(function(a, b) {
16                var aValue = $(a).data("price");
17                var bValue = $(b).data("price");
18                return order === "asc" ? aValue - bValue : bValue - aValue;
19            });
20            break;
21        default:
22            break;
23    }
24    $(".pack--list").empty().append(items);
25});
26
27function data_compilation(response){
28    if(response.statu){
29        if(response.balance_order){
30            $('input[name="order[balance_token]"]').val(response.balance_order.token);
31            $('.full-alert').addClass("show");
32            $('.full-alert').find(".description").html(response.balance_order.text);
33        }
34        if(response.alert){
35            console.log(response.alert);
36            toastify_start({
37                text: response.alert.text,
38                duration: 3000,
39                close: true,
40                gravity: "top", 
41                position: 'center', 
42                stopOnFocus: true,
43                class: response.alert.statu,
44                style: {
45                    background: response.alert.statu,
46                },
47            });
48        }
49        if(response.favorite_change){
50            switch (response.favorite_change) {
51                case 'delete':
52                    $('*[data-favori_package="'+response.package_id+'"]').removeClass("active");
53                    break;
54                case 'add':
55                    $('*[data-favori_package="'+response.package_id+'"]').addClass("active");
56                    break;
57            }
58        }
59        if(response.cart_add){
60            $(".full-alert").addClass("show");
61        }
62        if(response.html_element){
63            $('*[data-outhtml="'+response.html_element+'"]').html(response.html_output);
64        }
65        if(response.verify_email_adress){
66            $('*[data-verify="mail"]').removeClass("d-block").addClass("d-none");
67            $('*[data-verify="code"]').removeClass("d-none").addClass("d-block");
68            $('*[data-verify="code"]').find('input[name="customer[mail]"]').val(response.verify_email_adress);
69        }
70        if(response.forgot_password_code){
71            $('*[data-forgat="request"]').addClass("d-none");
72            $('*[data-forgat="code"]').removeClass("d-none");
73            $('input[name="customer[forgot_mail]"]').val(response.forgot_password_code);
74        }
75        if(response.forgot_password_new){            
76            $('*[data-forgat="request"]').removeClass("d-none").attr("style","");
77            $('*[data-forgat="code"]').removeClass("d-none").attr("style","");
78            $('*[data-forgat="newpass"]').removeClass("d-none");
79            $('*[data-forgat="newpass"]').find("b").html(response.forgot_password_new);
80            setTimeout(function(){
81                $('*[data-forgat="newpass"]').addClass("d-none").attr("style","");
82                $('*[data-forgat="code"]').addClass("d-none").attr("style","");
83                $('*[data-forgat="request"]').addClass("d-none").attr("style","");
84            },10000);
85        }
86        if(response.cart_detail){
87            if(response.cart_detail.cart_count < 1){
88                $("*[data-cart_action] .coupon").addClass("d-none");                
89                $("*[data-cart_action] button[data-next_button]").removeClass("butto-success");
90                $("*[data-cart_action] button[data-next_button]").addClass("butto-light");
91                $("*[data-cart_action] button[data-next_button]").html("Your Cart is Empty!");
92            } else {
93                $("*[data-cart_action] .coupon").removeClass("d-none");
94                $("*[data-cart_action] button[data-next_button]").removeClass("butto-light");
95                $("*[data-cart_action] button[data-next_button]").addClass("butto-success");
96            }
97            $('*[data-cart_detail="cart_price"]').html(response.cart_detail.amount_detail.cart_price_view);
98            $('*[data-cart_detail="service_price"]').html(response.cart_detail.amount_detail.service_price_view);
99            $('*[data-cart_detail="cart_count"]').html(response.cart_detail.cart_count);
100            $('*[data-cart_detail="total_price"]').html(response.cart_detail.amount_detail.total_price_view);
101            $('*[data-cart_detail="total_price_back"]').html(response.cart_detail.amount_detail.total_price_view);
102            $('*[data-cart_detail="discount_price"]').html(response.cart_detail.amount_detail.discount_price_view);
103            // ADIM 1 Genel Toplam: her zaman NET (base) — yöntem seçilse bile gross gösterme.
104            var _ad = response.cart_detail.amount_detail;
105            var _step1 = (typeof _ad.net_price_view !== "undefined") ? _ad.net_price_view
106                        : ((typeof _ad.cart_price_view !== "undefined") ? _ad.cart_price_view : _ad.total_price_view);
107            $('*[data-cart_detail="step1_total"]').html(_step1);
108            // KDV + Komisyon: yalnızca ödeme yöntemi seçilince (base_amount set) göster
109            var _paid = (typeof _ad.base_amount !== "undefined");
110            if(typeof _ad.kdv_price_view !== "undefined"){
111                $('*[data-cart_detail="kdv_price"]').html(_ad.kdv_price_view);
112            }
113            if(typeof _ad.kdv_rate !== "undefined"){
114                $('*[data-cart_detail="kdv_rate_view"]').html("(%" + String(_ad.kdv_rate).replace(".",",") + ")");
115            }
116            if(typeof _ad.commission_rate !== "undefined"){
117                $('*[data-cart_detail="commission_rate_view"]').html("(%" + String(_ad.commission_rate).replace(".",",") + ")");
118            }
119            $('*[data-cart_detail="kdv_row"]').css("display", _paid ? "flex" : "none");
120            $('*[data-cart_detail="commission_row"]').css("display", _paid ? "flex" : "none");
121        }
122        if(response.customer_register_action || response.customer_login_action || response.redirect){
123            $('body').addClass("none_click");
124            setTimeout(function(){
125                window.location.href = response.redirect;                
126            },response.redirect_time ? response.redirect_time : 3000);
127            return true;
128        }
129
130        if(response.coupon_add){
131            if(response.cart_detail.amount_detail.discount_price > 0){
132                $('input[name="order[coupon_code]"]').prop("readonly",true);
133                $('*[data-cart_coupon_code]').html($('*[data-cart_coupon_code]').attr("data-remove_text"));
134                $('*[data-cart_coupon_code]').attr("data-cart_coupon_code","success");
135            }
136        }
137        if(response.freetool_process_token){
138            startFreeCountdown(response.freetool_process_token,response.freetool_delay_minute);
139        }
140        if(response.freetool_process_success){     
141            startFreeCountdown("finished",response.freetool_process_success);
142        }
143    } else if(response.jsonStatu){
144    }
145    
146}
147$('body').on('submit', '.ns_ajax_form', function (event) {  
148    event.preventDefault();
149    if(this.dataset.ns_statu && this.dataset.ns_statu == "none_click")
150        return false;  
151    $('body').addClass("none_click");
152    const ns_data = $(this).serialize();
153    const submit_url = this.dataset.ns_action;
154    const $form = $(this);
155    const $submitBtn = $form.find('button[type="submit"]');
156    const originalBtnText = $submitBtn.html();
157    
158    $.ajax({
159        type: 'POST',
160        url: submit_url,
161        data: ns_data,
162        dataType: "json",
163        success: function (response) {
164            $('body').removeClass("none_click");
165            if(typeof grecaptcha !== 'undefined'){ try { grecaptcha.reset(); } catch(e){} }
166            if(response && typeof response === 'object') {
167                data_compilation(response);
168            } else {
169                console.error('Invalid response format:', response);
170                if(typeof toastify_start === 'function') {
171                    toastify_start({
172                        text: 'Beklenmeyen bir hata oluştu. Lütfen tekrar deneyin.',
173                        duration: 3000,
174                        close: true,
175                        gravity: "top", 
176                        position: 'center', 
177                        stopOnFocus: true,
178                        class: 'danger',
179                        style: {
180                            background: '#dc3545',
181                        },
182                    });
183                } else {
184                    alert('Beklenmeyen bir hata oluştu. Lütfen tekrar deneyin.');
185                }
186            }
187            if($submitBtn.length) {
188                $submitBtn.prop('disabled', false).html(originalBtnText);
189            }
190        },
191        error: function (jqXHR, textStatus, errorThrown) {
192            $('body').removeClass("none_click");
193            if(typeof grecaptcha !== 'undefined'){ try { grecaptcha.reset(); } catch(e){} }
194            console.error('AJAX Error:', textStatus, errorThrown, jqXHR);
195            
196            let errorMessage = 'Bir hata oluştu. Lütfen tekrar deneyin.';
197            
198            // Response'dan hata mesajını almaya çalış
199            if(jqXHR.responseJSON && jqXHR.responseJSON.alert) {
200                errorMessage = jqXHR.responseJSON.alert.text || errorMessage;
201            } else if(jqXHR.responseText) {
202                try {
203                    const errorResponse = JSON.parse(jqXHR.responseText);
204                    if(errorResponse.alert && errorResponse.alert.text) {
205                        errorMessage = errorResponse.alert.text;
206                    }
207                } catch(e) {
208                    // JSON parse edilemezse default mesaj kullan
209                }
210            }
211            
212            if(typeof toastify_start === 'function') {
213                toastify_start({
214                    text: errorMessage,
215                    duration: 5000,
216                    close: true,
217                    gravity: "top", 
218                    position: 'center', 
219                    stopOnFocus: true,
220                    class: 'danger',
221                    style: {
222                        background: '#dc3545',
223                    },
224                });
225            } else {
226                alert(errorMessage);
227            }
228            
229            if($submitBtn.length) {
230                $submitBtn.prop('disabled', false).html(originalBtnText);
231            }
232        }
233    });
234});
235
236$('body').on('click','*[data-close_head]',function(){
237    $(this).addClass("active");
238    const ns_data = {
239        ns_action_theme: "close_head"
240    };       
241    submit_url = this.dataset.close_head;         
242    $.ajax({
243        type: 'POST',
244        url: submit_url,
245        data: ns_data,
246        success: function (response) {
247            $('.notification--header').remove();
248        },
249        error: function (jqXHR, textStatus, errorThrown) {
250            console.error(textStatus, errorThrown);
251        }
252    });
253});
254/** SİLİNECEK */
255$('body').on('submit', '.ns_ajax_form_test', function (event) {
256    event.preventDefault();
257    const ns_data = $(this).serialize();
258    const submit_url = this.dataset.ns_action+"?conError=1";
259    $.ajax({
260        type: 'POST',
261        url: submit_url,
262        data: ns_data,
263        /*dataType: "json",*/
264        success: function (response) {
265            console.log(response);
266            alert(response);
267        },
268        error: function (jqXHR, textStatus, errorThrown) {
269            console.error(textStatus, errorThrown);
270        }
271    });
272});
273
274$('body').on('click', '*[data-removecartitem]',function(){
275    const ns_data = {ns_action:'remove_cart', key:this.dataset.removecartitem};
276    const submit_url = this.dataset.ns_action+"?conError=1";
277    $.ajax({
278        type: 'POST',
279        url: submit_url,
280        data: ns_data,
281        dataType: "json",
282        success: function (response) {
283            data_compilation(response);
284        },
285        error: function (jqXHR, textStatus, errorThrown) {
286            console.error(textStatus, errorThrown);
287        }
288    });
289});
290$('body').on('click','*[data-favori_package]',function(){
291    const submit_url = this.dataset.ns_action;
292    const ns_data = {
293        ns_action_theme:'add_favori',
294        package_id:this.dataset.favori_package
295    }
296    $.ajax({
297        type: 'POST',
298        url: submit_url,
299        data: ns_data,
300        dataType: "json",
301        success: function (response) {
302            data_compilation(response);
303        },
304        error: function (jqXHR, textStatus, errorThrown) {
305            console.error(textStatus, errorThrown);
306        }
307    })
308})
309$('body').on('click','*[data-cart_coupon_code]',function(){
310    code = $('input[name="order[coupon_code]"]').val();
311    const submit_url = this.dataset.ns_action+"?conError=1";
312    switch (this.dataset.cart_coupon_code) {
313        case 'success':
314            $('input[name="order[coupon_code]"]').val("");
315            $('input[name="order[coupon_code]"]').prop("readonly",false);
316            ns_data = {ns_action:'remove_coupon'};
317            $(this).attr("data-cart_coupon_code","");
318            $(this).html(this.dataset.apply_text);
319            $(this).removeClass("butto-success");
320            break;    
321        default:
322            ns_data = {ns_action:'add_coupon', code:code};
323            break;
324    }
325    $.ajax({
326        type: 'POST',
327        url: submit_url,
328        data: ns_data,
329        dataType: "json",
330        success: function (response) {
331            data_compilation(response);
332        },
333        error: function (jqXHR, textStatus, errorThrown) {
334            console.error(textStatus, errorThrown);
335        }
336    });
337});
338$('body').on('click','*[data-dial-code]',function(){
339    if($('input[name="customer[phone_code]"]').length>0){
340        $('input[name="customer[phone_code]"]').val($(this).attr("data-dial-code"));
341        $('input[name="customer[country_code]"]').val($(this).attr("data-country-code"));
342    }
343});
344$("body").on("click", ".selected-payment .item", function(){
345	$(".selected-payment .item").removeClass("selected");
346	$(this).addClass("selected");
347    if($('input[name="order[payment_method]"]').length)
348    $('input[name="order[payment_method]"]').val(this.dataset.uniq);
349    const submit_url = this.dataset.ns_action;    
350    $('.select-payment-desc p').html(this.dataset.description);
351    ns_data = {ns_action:'select_payment', uniq:this.dataset.uniq};
352    $.ajax({
353        type: 'POST',
354        url: submit_url,
355        data: ns_data,
356        dataType: "json",
357        success: function (response) {
358            data_compilation(response);
359        },
360        error: function (jqXHR, textStatus, errorThrown) {
361            console.error(textStatus, errorThrown);
362        }
363    });
364});
365$("body").on("click", ".select-payment-method  .item", function(){
366	$(".select-payment-method  .item").removeClass("selected");
367	$(this).addClass("selected");
368    if($('input[name="order[payment_method]"]').length)
369    $('input[name="order[payment_method]"]').val(this.dataset.funds_method);
370    const submit_url = this.dataset.ns_action;    
371    $('.select-payment-desc p').html(this.dataset.description);
372    ns_data = {ns_action:'select_payment', uniq:this.dataset.funds_method};
373    $.ajax({
374        type: 'POST',
375        url: submit_url,
376        data: ns_data,
377        dataType: "json",
378        success: function (response) {
379            data_compilation(response);
380        },
381        error: function (jqXHR, textStatus, errorThrown) {
382            console.error(textStatus, errorThrown);
383        }
384    });
385});
386$('body').on('change','select[name="customer[type]"]',function(){
387    switch (this.value) {
388        case 'corporate':
389            $('input[name="customer[name]"]').prop("placeholder","Firma Adı");
390            $('#customerCorporate').removeClass("d-none");
391            break;    
392        default:
393            $('input[name="customer[name]"]').prop("placeholder","Adınız Soyadınız");
394            $('#customerCorporate').addClass("d-none");
395            break;
396    }
397});
398$('body').on('change','select[name="order[customer_type]"]',function(){
399    switch (this.value) {
400        case 'corporate':
401            $('input[name="order[customer_name]"]').prop("placeholder","Firma Adı");
402            $('#customerCorporate').removeClass("d-none");
403            break;    
404        default:
405            $('input[name="order[customer_name]"]').prop("placeholder","Adınız Soyadınız");
406            $('#customerCorporate').addClass("d-none");
407            break;
408    }
409});
410$("body").on("click", "[step-next]", function(){
411    $(".order-step-area .step-one").slideUp(200);
412    $(".order-step-area .step-two").slideDown(200);
413
414});
415$("body").on("click", "[step-prev]", function(){
416    $(".order-step-area .step-one").slideDown(200);
417    $(".order-step-area .step-two").slideUp(200);
418});
419function toastify_start(toastify) {
420    Toastify({
421        newWindow: !0,
422        text: toastify.text ? toastify.text:'Hatalı bir işlem gerçekleştirdiniz!',
423        gravity: toastify.gravity ? toastify.gravity:'bottom',
424        position: toastify.position ? toastify.position:'right',
425        className: toastify.class ? "bg-"+toastify.class:'bg-danger',
426        stopOnFocus: !0,
427        offset: { x: 50, y: 10 },
428        duration: toastify.duration ? toastify.duration:3000,
429        close: toastify.close ? true:false,
430    }).showToast();
431}
432$('body').on('click','*[data-fast_order_select]',function(){
433    var fast_type = this.dataset.fast_order_select;
434    var submit_url = document.querySelector(".fastOrder").dataset.submit_url;
435    if(!$(this).hasClass("active")){
436        switch (fast_type) {
437            case 'platform':
438                var ns_fast_data = {
439                    ns_tax: this.dataset.id,
440                    ns_type: fast_type,
441                    ns_action: "fast_order_next"
442                };                 
443                $('*[data-fast_order_area="platform_list"]').find(".desc").text(this.dataset.name);
444                $('*[data-fast_order_area="category_list"]').addClass("active");
445                $('*[data-fast_order_area="category_list"]').find(".desc").text("Seçim Yapılmadı");
446                $('*[data-fast_order_area="package_list"]').attr("style","opacity: 0.6;pointer-events: none;");   
447                $('*[data-fast_order_area="package_list"]').removeClass("active");
448                $('*[data-fast_order_area="package_list"]').find(".desc").text("Seçim Yapılmadı");
449                $('*[data-fast_order_area="fast_buy_button"]').attr("style","opacity: 0.4;pointer-events: none;");  
450                $('*[data-fast_order_area="fast_buy_button"]').find("span").html($('*[data-fast_order_area="fast_buy_button"]').attr("data-text"));    
451                break;
452            case 'category':                         
453                $('*[data-fast_order_area="category_list"]').find(".desc").text(this.dataset.name);
454                $('*[data-fast_order_area="package_list"]').addClass("active"); 
455                $('*[data-fast_order_area="package_list"]').find(".desc").text("Seçim Yapılmadı!");
456                $('*[data-fast_order_area="package_list"]').attr("style","opacity: 0.6;pointer-events: none;");   
457                $('*[data-fast_order_area="fast_buy_button"]').attr("style","opacity: 0.4;pointer-events: none;");
458                $('*[data-fast_order_area="fast_buy_button"]').find("span").html($('*[data-fast_order_area="fast_buy_button"]').attr("data-text"));    
459                var ns_fast_data = {
460                    ns_tax: this.dataset.id,
461                    ns_type: fast_type,
462                    ns_action: "fast_order_next"
463                }; 
464                break;
465            case 'package':
466                $('*[data-fast_order_area="fast_buy_button"]').attr("style","");
467                $('*[data-fast_order_area="package_list"]').find(".desc").text(this.dataset.name);
468                $('*[data-fast_order_area="fast_buy_button"]').attr("data-fast_order_url",this.dataset.id);                
469                $('*[data-fast_order_area="fast_buy_button"]').find("span").html($('*[data-fast_order_area="fast_buy_button"]').attr("data-text")+" ("+this.dataset.price+")");
470                $('*[data-fast_order_area="package_list"]').find(".fastDrop").removeClass("show");
471                return false;
472                break;		
473            case 'fast_buy_button':
474                const fast_order_url = this.dataset.fast_order_url;
475                if(fast_order_url.length > 5){
476                    window.location.href = fast_order_url;
477                    return false;
478                }
479                break;
480        }                    
481        $.ajax({
482            type: 'POST',
483            url: submit_url,
484            data: ns_fast_data,
485            dataType: 'JSON',
486            success: function (response) {
487                if(response.fast_area){
488                    $('*[data-fast_order_area="'+response.fast_area+'"]').html(response.fast_content);
489                    $('*[data-fast_order_area="'+response.fast_area+'"]').attr("style","");
490                }
491            },
492            error: function (jqXHR, textStatus, errorThrown) {
493                console.log(textStatus, errorThrown);
494            }
495        });
496    }  
497});
498
499$('body').on('click','*[data-coupon_copy]',function(){
500    var copyText = $(this).parent().find(".text span").text();
501    navigator.clipboard.writeText(copyText);
502    this.style = 'background: #FF9800;color: #fff;';
503    setTimeout(() => {
504        document.querySelector('.copy').style = '';
505    },220);
506});
507
508$("[data-freeinp]").on("input", function () {
509    if ($("[data-freeinp='userinfo']").val().length > 3 && $("[data-freeinp='amount']").val() !== "") {
510        $(".free-start-btn").prop("disabled", false);
511    } else {
512        $(".free-start-btn").prop("disabled", true);
513    }
514});
515function startFreeCountdown(token, minutesToWait) {
516    $('*[data-free_step="process_enter_area"]').slideUp(100);
517    $('*[data-free_step="process_waiting_area"]').slideDown(100);    
518    const timer = document.getElementById("progress-bar"); 
519    switch (token) {
520        case 'finished':
521            alert("ıo");
522            timer.setAttribute("aria-valuenow", 100);
523            timer.style.background =   "#0ea77a";
524            timer.style.width =   "100%";
525            $('*[data-free_step="process_enter_area"]').remove();
526            $('*[data-free_step="process_waiting_area"] #prepare').text(minutesToWait.head);
527            $('*[data-free_step="process_waiting_area"] #timer').text(minutesToWait.text);
528            break;        
529        default:                
530            const minutesToWaitInt = minutesToWait ? parseInt(minutesToWait):0.2;
531            const endDate = new Date(Date.now() + minutesToWaitInt * 60 * 1000);
532            const remainingTimeStart = endDate.getTime() - new Date().getTime();
533            const timers = setInterval(function () {
534                const now = new Date().getTime();
535                const t = endDate - now;
536                if (t >= 0) {
537                    const setValue = (100 - parseInt((t / remainingTimeStart) * 100)).toString();
538                    const percentage = timer.querySelector("span");    
539                    timer.setAttribute("aria-valuenow", setValue);
540                    timer.style.width =   setValue+"%";
541                    $('*[data-free_count]').text((Math.floor(t / 1000 / 60)).toString().padStart(2, '0') + ":" + (Math.floor(t / 1000) % 60).toString().padStart(2, '0'));       
542                    $('*[data-free_step="process_enter_area"]').find('button[type="submit"]').prop("disabled", true);
543                } else {
544                    $('input[name="freetool[token]"]').val(token);
545                    clearInterval(timers);
546                    $('*[data-free_step="process_enter_area"]').find('button[type="submit"]').prop("disabled", false);
547                    $('*[data-free_step="process_enter_area"]').find('button[type="submit"]').click();                                        
548                }
549            }, 1000);
550            break;
551    }
552}
553// Sepet adim gecisinde sayfayi adim alaninin basina kaydirir.
554// Aksi halde mobilde scroll pozisyonu oldugu yerde kalir ve Adim 2'nin
555// ustundeki "Kisisel Bilgiler Alani" ekran disinda kalir.
556// Kaydirma, animasyon BASLAMADAN once ve anlik yapilir. Animasyon
557// sonrasi animasyonlu kaydirma denendi; once icerik asagi akip sonra
558// sayfa yukari ciktigi icin iki ayri hareket olarak goruluyordu.
559// Adim alaninin ustune sabitlendigi icin alttaki yukseklik degisimi
560// gorunumu bozmaz.
561function cart_step_scroll_now(){
562    try {
563        var $a = $('.step-one').is(':visible') ? $('.step-one') : $('.step-two');
564        if(!$a.length) return;
565        $('html,body').stop(true);
566        window.scrollTo(0, Math.max(0, $a.offset().top - 120));
567    } catch(e){}
568}
569$('body').on('click','*[data-cart_step]',function(){
570    cart_step_scroll_now();
571    switch (this.dataset.cart_step) {
572        case 'two':
573            $('.step-one').slideUp(200);
574            $('.step-two').slideDown(200);
575            break;    
576        default:
577            $('.step-two').slideUp(200);
578            $('.step-one').slideDown(200);
579            break;
580    }
581});
582
583$('body').on('click','*[data-ns_modal_open]',function(){
584    var ns_modal_open = this.dataset.ns_modal_open;
585    var modal = document.getElementById(ns_modal_open);
586    modal.style.display = "block";
587});
588$('body').on('click','.ns-closeBtn',function(){
589    var modal = this.parentElement.parentElement;
590    modal.style.display = "none";
591});
592document.addEventListener('DOMContentLoaded', function() {
593    var modals = document.getElementsByClassName("ns-modal");
594    window.onclick = function(event) {
595        for (var i = 0; i < modals.length; i++) {
596            if (event.target == modals[i]) {
597                modals[i].style.display = "none";
598            }
599        }
600    }
601});

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.