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> </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.