PageSourceSearch

https://stombelor.ru/components/com_apptodoc/assets/scripts/appointment.js

js stombelor.ru collected 2026-10-03 18:57:42 UTC 28,627 bytes, 619 lines download raw bytes

1(function ($) {
2
3    $(document).ready(function () {
4
5        var loc_arr = document.location.search.split('&');
6
7        for (var i = 0; i < loc_arr.length; i++) {
8            if (loc_arr[i].indexOf('schedule') !== -1) {
9                showForm(getCookie('a_hid'));
10                $('#submit-btn-step-1').attr('data-submit', '{"step":0}');
11            }
12        }
13
14        $('#apptodoc-hospunits-list button[id^=unit]').on('click', function () {
15            showForm($(this).attr('data-id'));
16        });
17
18        $('#change-unit-btn').on('click', function () {
19            changeHospUnit();
20        });
21
22    });
23
24})(jQuery);
25
26function appToDoc(btn) {
27    (function ($) {
28
29        var app_to_doc = new dataHandler();
30        var form_constructor = new formConstructor();
31        var params = JSON.parse(btn.getAttribute('data-submit'));
32        var request_data = app_to_doc.getRequestData(params);
33        var link = app_to_doc.getLink($('#apptodoc-options').val());
34
35        if (window.localStorage) {
36            if (localStorage.getItem('app_form_' + params.step + '_text') === null) {
37                app_to_doc.getAppFormText();
38            }
39        } else {
40            if (getCookie('app_form_' + params.step + '_text') === undefined) {
41                app_to_doc.getAppFormText();
42            }
43        }
44
45        app_to_doc.getAppFormData(request_data, link, form_constructor, btn.getAttribute('id'));
46
47    })(jQuery);
48}
49
50function showForm(id) {
51    console.log(id);
52    (function ($) {
53        var header = $('#unit-' + id).text();
54        setTimeout(function () {
55            $('#apptodoc-form-block').show(1000);
56            $('#sub-header-text').html(header);
57            $('#form-sub-header').show(1000);
58        }, 1000);
59        $('#apptodoc-hospunits-list').hide(1000);
60        $('#form-header-text').hide(1000);
61        $('#hid').val(id);
62        document.cookie = 'a_hid=' + id + '; sameSite=strict; max-age=3600';
63    })(jQuery);
64}
65
66function changeHospUnit() {
67    (function ($) {
68        $('#apptodoc-form-block').hide(1000);
69        $('#sub-header-text').hide(1000);
70        setTimeout(function () {
71            $('#apptodoc-hospunits-list').show(1000);
72            $('#lsh').show(1000);
73        }, 1000);
74    })(jQuery);
75}
76
77function getCookie(name) {
78    var matches = document.cookie.match(new RegExp("(?:^|; )" + name.replace(/([\.$?*|{}\(\)\[\]\\\/\+^])/g, '\\$1') + "=([^;]*)"));
79    return matches ? decodeURIComponent(matches[1]) : undefined;
80}
81
82class dataHandler {
83    construct(params, text) {
84        this.params = params;
85        this.text = text;
86    }
87
88    getRequestData(params) {
89        var data = {};
90
91        (function ($) {
92
93            var lc = $('#lc').val();
94            var id = $('#hid').val();
95
96            switch (params.step) {
97                case 0:
98                    data.hm = "getCheckPatientToTimeData";
99                    data.ac = lc;
100                    data.id = id;
101                    data.patient = {
102                        name: $('#apptodoc-name').val(),
103                        lastname: $('#apptodoc-lastname').val(),
104                        middlename: 0,
105                        birthday: $('#apptodoc-byear').val() + '-' + $('#apptodoc-bmonth').val() + '-' + $('#apptodoc-bday').val()
106                    };
107                    data.specialty = {
108                        id: getCookie('a_sid')
109                    };
110                    data.doctor = {
111                        id: getCookie('a_did'),
112                        start: null,
113                        end: null
114                    };
115                    data.date = {
116                        doc: getCookie('a_did'),
117                        date: getCookie('a_date')
118                    };
119
120                    if ($('#apptodoc-middlename-block').css('display') === 'block') {
121                        data.patient.middlename = $('#apptodoc-middlename').val();
122                    }
123
124                    document.cookie = 'a_pat_info=' + data.patient.lastname + ' ' + data.patient.name + ' ' + data.patient.birthday + '; sameSite=strict; max-age=3600';
125                    ;
126                    break;
127                case 1 :
128                    data.hm = "getCheckPatientData";
129                    data.ac = lc;
130                    data.id = id;
131                    data.patient = {
132                        name: $('#apptodoc-name').val(),
133                        lastname: $('#apptodoc-lastname').val(),
134                        middlename: 0,
135                        birthday: $('#apptodoc-byear').val() + '-' + $('#apptodoc-bmonth').val() + '-' + $('#apptodoc-bday').val()
136                    };
137                    if ($('#apptodoc-middlename-block').css('display') === 'block') {
138                        data.patient.middlename = $('#apptodoc-middlename').val();
139                    }
140
141                    document.cookie = 'a_pat_info=' + data.patient.lastname + ' ' + data.patient.name + ' ' + data.patient.birthday + '; sameSite=strict; max-age=3600';
142                    ;
143                    break;
144                case 2 :
145                    data.hm = "getDocListData";
146                    data.ac = lc;
147                    data.id = id;
148                    data.specialty = {
149                        id: params.id
150                    };
151
152                    document.cookie = 'a_spec_info=' + params.s + '; sameSite=strict; max-age=3600';
153                    ;
154                    break;
155                case 3 :
156                    data.hm = "getGetAvailableDatesData";
157                    data.ac = lc;
158                    data.id = id;
159                    data.doctor = {
160                        id: params.id,
161                        start: params.nd,
162                        end: params.ld
163                    };
164
165                    document.cookie = 'a_doc_info=' + params.d + '; sameSite=strict; max-age=3600';
166                    ;
167                    break;
168                case 4 :
169                    data.hm = "getGetAvaibleAppointmentsData";
170                    data.ac = lc;
171                    data.id = id;
172                    data.date = {
173                        doc: params.did,
174                        date: params.date
175                    };
176
177                    document.cookie = 'a_date=' + params.date + '; sameSite=strict; max-age=3600';
178                    ;
179                    break;
180                case 5 :
181                    data.hm = 'confirmApp';
182                    data.step = params.step + 1;
183                    data.aid = params.id;
184                    data.pid = getCookie('a_pid');
185                    data.did = getCookie('a_did');
186                    data.patient = getCookie('a_pat_info');
187                    data.specialty = getCookie('a_spec_info');
188                    data.doctor = getCookie('a_doc_info');
189                    data.date = getCookie('a_date');
190                    data.time = params.time;
191
192                    document.cookie = 'a_time=' + params.time + '; sameSite=strict; max-age=3600';
193                    ;
194                    break;
195                case 6 :
196                    data.hm = "getSetAppointmentData";
197                    data.ac = lc;
198                    data.id = id;
199                    data.app = {
200                        aid: params.id,
201                        pat: params.pid,
202                        doc: params.did
203                    };
204
205                    document.cookie = 'a_app=' + params.id + '; sameSite=strict; max-age=3600';
206                    ;
207                    break;
208                case 7 :
209                    ;
210                    break;
211            }
212        })(jQuery);
213
214        return data;
215    }
216
217    getLink(params) {
218        params = JSON.parse(params);
219        var url = ['zapis.miackuban.ru', '/api-1.3/com_apptodoc_bootstrap.php'];
220        var protocol = ((params[0] * 1) != 0) ? 'https://' : 'http://';
221        var port = ((params[1] * 1) != 0) ? ':' + params[1] : '';
222
223        return protocol + url[0] + port + url[1];
224    }
225
226    getAppFormData(data = null, link = null, form_constructor = null, btn_id = null) {
227        (function ($) {
228            var request = data;
229            if (data.hm !== 'confirmApp') {
230                $.ajax({
231                    type: 'POST',
232                    url: link,
233                    data: data,
234                    beforeSend: function () {
235                        $('#apptodoc-preloader').toggleClass('d-none');
236                    },
237                    complete: function () {
238                        setTimeout(function () {
239                            $('#apptodoc-preloader').toggleClass('d-none')
240                        }, 1000);
241                    },
242                    success: function (data, textStatus, jqXHR) {
243                        var response = JSON.parse(data);
244
245                        if (!response.success) {
246                            form_constructor.getErrMsg(response.step, response.data);
247                        } else {
248                            if (response.step > 2 && response.step < 6) {
249                                form_constructor.makeBtnChecked(response.step, btn_id);
250                            }
251                            form_constructor.showNextTab(response.step);
252                            form_constructor.changeNavBtnColor(response.step);
253
254                            if (response.options) {
255                                document.cookie = response.options + '; sameSite=strict; max-age=3600';
256                            }
257
258                            switch (response.step) {
259                                case 2:
260                                    form_constructor.getStep2(response.step, response.data, dataHandler.getStepText(response.step));
261                                    break;
262                                case 3:
263                                    form_constructor.getStep3(response.step, response.data, dataHandler.getStepText(response.step));
264                                    break;
265                                case 4:
266                                    form_constructor.getStep4(response.step, response.data, dataHandler.getStepText(response.step));
267                                    break;
268                                case 5:
269                                    if (response.skip_steps) {
270                                        $('#submit-btn-step-1').attr('data-submit','{"step":1}');
271                                        if (response.specialty) {
272                                            if (response.specialty.options) {
273                                                document.cookie = response.specialty.options + '; sameSite=strict; max-age=3600';
274                                            }
275                                            form_constructor.changeNavBtnColor(response.specialty.step);
276                                            form_constructor.getStep2(response.specialty.step, response.specialty.data, dataHandler.getStepText(response.specialty.step));
277                                        }
278                                        if (response.doctor) {
279                                            if (response.doctor.options) {
280                                                document.cookie = response.doctor.options + '; sameSite=strict; max-age=3600';
281                                            }                                            
282                                            form_constructor.makeBtnChecked(response.doctor.step, $('#step-' + response.specialty.step + '-form-block button[id$=' + request.specialty.id + ']').attr('id'));
283                                            form_constructor.changeNavBtnColor(response.doctor.step);
284                                            form_constructor.getStep3(response.doctor.step, response.doctor.data, dataHandler.getStepText(response.doctor.step));
285                                        }
286                                        if (response.dates) {
287                                            if (response.dates.options) {
288                                                document.cookie = response.dates.options + '; sameSite=strict; max-age=3600';
289                                            }
290                                            form_constructor.changeNavBtnColor(response.dates.step);
291                                            form_constructor.makeBtnChecked(response.dates.step, $('#step-' + response.doctor.step + '-form-block button[id$=' + request.doctor.id + ']').attr('id'));
292                                            form_constructor.getStep4(response.dates.step, response.dates.data, dataHandler.getStepText(response.dates.step));
293                                        }
294                                        if (response.apps) {
295                                            form_constructor.makeBtnChecked(response.apps.step, $('#step-' + response.dates.step + '-form-block button[id$=' + request.date.date + ']').attr('id'));
296                                            form_constructor.getStep5(response.apps.step, response.apps.data, dataHandler.getStepText(response.apps.step));
297                                        }
298                                    } else {
299                                        form_constructor.getStep5(response.step, response.data, dataHandler.getStepText(response.step));
300                                    }
301                                    break;
302                                case 6: /*form_constructor.getStep6(response.step, response.data)*/
303                                    ;
304                                    break;
305                                case 7:
306                                    form_constructor.getStep7(response.step, null, dataHandler.getStepText(response.step));
307                                    dataHandler.saveAppData();
308                                    dataHandler.clearStorage(response.step);
309                                    break;
310                            }
311                        }
312                    },
313                    error: function () {}
314                });
315            } else {
316
317                var text = null;
318                if (window.localStorage) {
319                    if (localStorage.getItem('app_form_' + data.step + '_text') !== null) {
320                        text = JSON.parse(localStorage.getItem('app_form_' + data.step + '_text'));
321                    }
322                } else {
323                    text = JSON.parse(getCookie('app_form_' + data.step + '_text'));
324                }
325
326                form_constructor.makeBtnChecked((data.step + 1), btn_id);
327                form_constructor.showNextTab(data.step);
328                form_constructor.changeNavBtnColor(data.step);
329                form_constructor.getStep6(data.step, data, text);
330            }
331        })(jQuery);
332    }
333
334    static getStepText(step) {
335        if (window.localStorage) {
336            if ((localStorage.getItem('app_form_' + step + '_text') !== null) && (localStorage.getItem('app_form_' + step + '_text') !== '')) {
337                return JSON.parse(localStorage.getItem('app_form_' + step + '_text'));
338            }
339        } else {
340            if ((getCookie('app_form_' + step + '_text') !== undefined) && (getCookie('app_form_' + step + '_text') !== '')) {
341                return JSON.parse(getCookie('app_form_' + step + '_text'));
342            }
343        }
344    }
345    
346    static clearStorage(step){
347        console.log(step);
348        if(window.localStorage){
349            for(var i = 1; i <= step; i++){
350                if(localStorage.getItem('app_form_'+i+'_text') !== null){localStorage.removeItem('app_form_'+i+'_text')}
351            }
352        }
353        else{
354            for(var i = 1; i <= step; i++){
355                if(getCookie('app_form_'+i+'_text') !== undefined){document.cookie = 'app_form_'+i+'_text=0,max-age=-3600,sameSite=strict'}
356            }
357        }
358    }
359
360    static saveAppData(data = null) {
361
362        jQuery.ajax({
363            type: 'POST',
364            url: document.location.origin + '/index.php?option=com_apptodoc&view=appointment&task=saveappdata&format=raw',
365            data: {
366                aid: getCookie('a_app'),
367                hid: getCookie('a_hid'),
368                pid: getCookie('a_pid'),
369                sid: getCookie('a_sid'),
370                did: getCookie('a_did'),
371                patient: getCookie('a_pat_info'),
372                specialty: getCookie('a_spec_info'),
373                doctor: getCookie('a_doc_info'),
374                date: getCookie('a_date'),
375                time: getCookie('a_time')
376            },
377            success: function (data, textStatus, jqXHR) {
378                console.log('ok');
379            },
380            error: function () {
381                console.log('error');
382            }
383        });
384    }
385
386    getAppFormText() {
387        jQuery.ajax({
388            type: 'POST',
389            url: document.location.origin + '/index.php?option=com_apptodoc&view=appointment&task=gettext&format=raw',
390            data: {
391                get_text: 'appointment'
392            },
393            success: function (data, textStatus, jqXHR) {
394
395                if (data !== '') {
396                    data = JSON.parse(data);
397                    //console.log(data);
398
399                    for (var i = 0; i < data.length; i++) {
400                        if (window.localStorage) {
401                            localStorage.setItem(data[i][0], data[i][1]);
402                        } else {
403                            document.cookie = data[i][0] + '=' + data[i][1] + ';sameSite=strict;max-age=3600';
404                        }
405                    }
406                }
407            },
408            error: function () {
409                console.log('error');
410            }
411        });
412        return true;
413    }   
414
415}
416
417class formConstructor {
418    constructor(params) {
419        this.params = params;
420    }
421
422    getErrMsg(step, data) {
423        jQuery('#step-' + step + '-err-block').html('<p class="alert alert-danger">Произошла ошибка (код: ' + data.id + '): <strong>' + data.desc + '</strong></p>');
424    }
425
426    showNextTab(step) {
427        jQuery('#apptodoc-nav a[href="#step-' + step + '"]').tab('show').removeClass('bg-secondary').addClass('bg-info');
428    }
429
430    changeNavBtnColor(step) {
431        if (jQuery('#apptodoc-nav a[href="#step-' + (step - 1) + '"]').hasClass('bg-info')) {
432            jQuery('#apptodoc-nav a[href="#step-' + (step - 1) + '"]').removeClass('bg-info').addClass('bg-success');
433        } else if (jQuery('#apptodoc-nav a[href="#step-' + (step - 1) + '"]').hasClass('bg-secondary')) {
434            jQuery('#apptodoc-nav a[href="#step-' + (step - 1) + '"]').removeClass('bg-info').addClass('bg-success');
435        }
436    }
437
438    makeBtnChecked(step, btn) {
439        console.log(step+'/'+btn)
440        jQuery('#step-' + (step - 1) + '-form-block button').each(function (ind, elem) {
441            if (jQuery(elem).hasClass('btn-success')) {
442                jQuery(elem).removeClass('btn-success').addClass('btn-info');
443            }
444        });
445        jQuery('#' + btn).removeClass('btn-info').addClass('btn-success');
446    }
447
448    getStep2(step = null, data = null, text = null) {
449
450        var html = '';
451
452        for (var i = 0; i < data.length; i++) {
453            if (data[i].tickets === null) {
454                html += '<button id="submit-btn-spec-' + data[i].id + '" class="btn btn-danger btn-lg col-12 col-md-6 step-submit-btn disabled" ';
455                html += 'role="button" disabled="disabled">';
456                html += '<span><strong>' + data[i].name + '</strong></span><br><br>';
457                html += '<span class="badge badge-danger">' + text.no_app + '</span>';
458                html += '</button>';
459            } else if (data[i].tickets == 0) {
460                html += '<button id="submit-btn-spec-' + data[i].id + '" class="btn btn-warning btn-lg col-12 col-md-6 step-submit-btn disabled" ';
461                html += 'role="button" disabled="disabled">';
462                html += '<span><strong>' + data[i].name + '</strong></span><br><br>';
463                html += '<span class="badge badge-warning">' + text.no_tickets + '</span>';
464                html += '</button>';
465            } else {
466                html += '<button id="submit-btn-spec-' + data[i].id + '" class="btn btn-info btn-lg col-12 col-md-6 step-submit-btn" ';
467                html += 'role="button" data-submit=\'{"step": 2,"id": ' + data[i].id + ',"s":"' + data[i].name + '"}\' onclick="appToDoc(this)">';
468                html += '<span><strong>' + data[i].name + '</strong></span><br><br>';
469                html += '<span class="badge badge-success">
469' + text.tickets + data[i].tickets + '</span>';
470                html += '</button>';
471            }
472        }
473
474        jQuery('#step-' + step + '-form-block').html(html);
475    }
476
477    getStep3(step = null, data = null, text = null) {
478
479        var html = '';
480
481        for (var i = 0; i < data.length; i++) {
482            if (data[i]['area'] === null) {
483                data[i]['area'] = '-';
484            }
485            if (data[i].tickets === null) {
486                html += '<button id="submit-btn-doc-' + data[i].id + '" class="btn btn-danger btn-lg col-12 col-md-6 step-submit-btn disabled" ';
487                html += 'role="button" disabled="disabled">';
488                html += '<span><strong>' + data[i].name + '</strong></span><br><br>';
489                html += '<span class="badge badge-danger">' + text.no_app + '</span>';
490                html += '</button>';
491            } else if (data[i].tickets == 0) {
492                html += '<button id="submit-btn-doc-' + data[i].id + '" class="btn btn-warning btn-lg col-12 col-md-6 step-submit-btn disabled" ';
493                html += 'role="button" disabled="disabled">';
494                html += '<span><strong>' + data[i].name + '</strong></span><br><br>';
495                html += '<span class="badge badge-warning">' + text.no_tickets + '</span>';
496                html += '</button>';
497            } else {
498                html += '<button id="submit-btn-doc-' + data[i].id + '" class="btn btn-info btn-lg col-12 col-md-6 step-submit-btn" ';
499                html += 'role="button" data-submit=\'{"step":3,"id":' + data[i].id + ',"nd":"' + data[i].nd + '","ld":"' + data[i].ld + '","d":"' + data[i].name + '"}\' onclick="appToDoc(this)">';
500                html += '<span><strong>' + data[i].name + '</strong></span><br><br>';
501                html += '<span class="badge badge-success text-left">' + text.tickets + data[i].tickets + '</span>';
502                html += '<span class="badge badge-info">' + text.doc_area + data[i].area + '</span>';
503                html += '</button>';
504            }
505        }
506
507        jQuery('#step-' + step + '-form-block').html(html);
508    }
509
510    getStep4(step = null, data = null, text = null) {
511        var html = '';
512
513        for (var i = 0; i < data.month.length; i++) {
514            html += '<div id="motnth-' + i + '" class="col-12"><table class="table text-white"><thead><tr>';
515            html += '<th colspan="7" class="text-center">' + data.month[i].m_name + '</th></tr>';
516            html += '<tr><th>' + text.mon + '</th><th>' + text.tue + '</th><th>' + text.wed + '</th><th>' + text.thur + '</th><th>' + text.fri;
517            html += '</th><th>' + text.sat + '</th><th>' + text.sun + '</th></tr></thead><tbody>';
518
519            var day_buff = 1;
520            for (var week = 0; week < data.month[i].weeks; week++) {
521                html += '<tr>';
522                for (var day = 0; day < 7; day++) {                    
523                    if (day_buff <= data.month[i].days_num) {
524                        if (week === 0 && data.month[i].days[day_buff].md === 1) {
525                            for(var q = 1; q < data.month[i].days[day_buff].w_day;q++){
526                                html += '<td>&nbsp;</td>';
527                                day++;
528                            }
529                            if(data.month[i].days[day_buff].active){
530                                html += '<td>';
531                                html += '<button id="submit-btn-date-' + data.month[i].days[day_buff].req_param.substr(0,10) + '" class="btn btn-info step-submit-btn" ';
532                                html += 'role="button" data-submit=\'{"step":4,"did":' + data.doc + ',"date":"' + data.month[i].days[day_buff].req_param + '"}\' onclick="appToDoc(this)">';
533                                html += data.month[i].days[day_buff].md;
534                                html += '</button></td>';
535                            }
536                            else{
537                                html += '<td><button role="button" class="btn btn-info disabled" disabled="disabled">';
538                                html += data.month[i].days[day_buff].md;
539                                html += '</button></td>';
540                            }
541                            
542                        } else {
543                            if(data.month[i].days[day_buff].active){
544                                html += '<td>';
545                                html += '<button id="submit-btn-date-' + data.month[i].days[day_buff].req_param.substr(0,10) + '" class="btn btn-info step-submit-btn" ';
546                                html += 'role="button" data-submit=\'{"step":4,"did":' + data.doc + ',"date":"' + data.month[i].days[day_buff].req_param + '"}\' onclick="appToDoc(this)">';
547                                html += data.month[i].days[day_buff].md;
548                                html += '</button></td>';
549                            }
550                            else{
551                                html += '<td><button role="button" class="btn btn-info disabled" disabled="disabled">';
552                                html += data.month[i].days[day_buff].md;
553                                html += '</button></td>';
554                            }
555                        }
556                    }
557                    day_buff++;
558                }
559                html += '</tr>';
560            }
561
562
563            html += '</tbody></table></div>';
564        }
565
566        jQuery('#step-' + step + '-form-block').html(html);
567    }
568
569    getStep5(step = null, data = null, text = null) {
570
571        var html = '';
572        var tid;
573
574        for (var i = 0; i < data.length; i++) {
575            tid = data[i]['time'].split(':');
576
577            html += '<button id="submit-btn-time-' + tid[0] + tid[1] + tid[2] + '" ';
578            html += 'class="btn btn-info col-3 step-submit-btn" data-submit=\'{"step":5,"id":"' + data[i]['id'] + '","time":"' + data[i]['time'] + '"}\' ';
579            html += 'role="button" onclick="appToDoc(this)">';
580            html += data[i]['time'];
581            html += '</button>';
582        }
583
584        jQuery('#step-' + step + '-form-block').html(html);
585    }
586
587    getStep6(step = null, data = null, text = null) {
588
589        var date = data.date.split('T');
590        var html = '<p class="alert alert-warning"><strong>' + text.check_msg + '</strong></p>';
591        html += '<p><strong>' + text.pat + '</strong> ' + data.patient + '</p>';
592        html += '<p><strong>' + text.spec + '</strong> ' + data.specialty + '</p>';
593        html += '<p><strong>' + text.doc + '</strong> ' + data.doctor + '</p>';
594        html += '<p><strong>' + text.date + '</strong> ' + date[0] + ' ' + data.time + '</p>';
595        html += '<p><button id="submit-btn-confirm" ';
596        html += 'class="btn btn-success step-submit-btn" data-submit=\'{"step":6,"id":"' + data.aid + '","pid":"' + data.pid + '","did":' + data.did + '}\' ';
597        html += 'role="button" onclick="appToDoc(this)">';
598        html += '<strong>' + text.btn + '</strong></button>';
599        html += '</p>';
600
601        jQuery('#step-' + step + '-form-block').html(html);
602    }
603    getStep7(step = null, data = null, text = null) {
604        var date = getCookie('a_date');
605        date = date.split('T');
606
607        var html = '<div class="card col-12 bg-secondary text-white" id="appointment-data"><div class="card-body">';
608        html += '<p class="alert alert-success">' + text.success_msg + '</p>';
609        html += '<p class="card-title">' + text.header + '</p>';
610        html += '<p><strong>' + text.pat + '</strong> ' + getCookie('a_pat_info') + '</p>';
611        html += '<p><strong>' + text.spec + '</strong> ' + getCookie('a_spec_info') + '</p>';
612        html += '<p><strong>' + text.doc + '</strong> ' + getCookie('a_doc_info') + '</p>';
613        html += '<p><strong>' + text.date + '</strong> ' + date[0] + ' ' + getCookie('a_time') + '</p>';
614        html += '</div></div>';
615
616        jQuery('#apptodoc-form-block').html(html);
617    }
618
619}

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.