1; 2(function ($) { 3 'use-strict'; 4 5 var HotelV2Action = { 6 isCalendarShown: false, 7 wrapper: $(".search-result-page.layout5, .search-result-page.layout6 , .st-style-4.st-style-elementor, .search-result-page.tour-layout6,.search-result-page.tour-layout7,.search-result-page.activity-layout4,.search-result-page.activity-layout5,.search-result-page.car-layout3,.search-result-page.car-layout4 , .search-result-page.layout-rental-4 , .search-result-page.layout-rental-5, .page-template-template-transfer-search .st-style-elementor.search-result-page"), 8 init() { 9 let base = this; 10 this.initGuestDropdown(); 11 this.initDateDropdown(); 12 this.initAccountPopup(); 13 this.initPasswordField(); 14 this.initSearchFieldFocus(); 15 this.initElementor(); 16 this.initSearchByMoveMap(); 17 this.initPriceSlider(); 18 this.initCheckboxFilter(); 19 this.initTriggers(); 20 this.initMapToggle(); 21 this.initMenu(); 22 this.initTopbar(); 23 this.initCalendarAvailability(); 24 this.initCalendarAvailabilityRental(); 25 this.initItemHover(); 26 this.initGoToTop(); 27 jQuery(function () { 28 base.initGallery(); 29 }); 30 31 $(window).on('resize', function () { 32 base.calcPositionArrowSlider(); 33 }); 34 35 jQuery(function () { 36 setTimeout(function () { 37 base.calcPositionArrowSlider(); 38 }, 700); 39 }); 40 }, 41 42 initItemHover() { 43 $(document).on('mouseover', '.item-elementor', function () { 44 let postID = $(this).data('id'); 45 $('.stt-price-label .inner[data-marker-id="' + postID + '"]').parent().addClass('hover'); 46 }); 47 $(document).on('mouseleave', '.item-elementor', function () { 48 let postID = $(this).data('id'); 49 $('.stt-price-label .inner[data-marker-id="' + postID + '"]').parent().removeClass('hover'); 50 }); 51 }, 52 counterSlider(event) { 53 var element = event.target; // DOM element, in this example .owl-carousel 54 var items = event.item.count; // Number of items 55 var item = event.item.index + 1; // Position of the current item 56 57 // it loop is true then reset counter from 1 58 if (item > items) { 59 item = item - items 60 } 61 $('.count', sliderEl).text(item + ' / ' + items); 62 }, 63 64 initGallery() { 65 let sliderEl = $('.st-gallery.style-slider'); 66 if (sliderEl.length) { 67 let rtl = sliderEl.data('rtl'); 68 let sliderItems = 2; 69 $('.owl-carousel', sliderEl).on('initialized.owl.carousel changed.owl.carousel', function (e) { 70 if (!e.namespace) { 71 return; 72 } 73 var carousel = e.relatedTarget; 74 $('.count', sliderEl).text(carousel.relative(carousel.current()) + 1 + ' / ' + carousel.items().length); 75 }).owlCarousel({ 76 center: true, 77 items: sliderItems, 78 loop: true, 79 margin: 10, 80 dots: false, 81 nav: true, 82 rtl: rtl == 'on' ? true : false, 83 responsive: { 84 768: { 85 center: true, 86 items: sliderItems 87 }, 88 0: { 89 center: false, 90 items: 1 91 } 92 }, 93 94 }); 95 } 96 97 let owlSliderEl = $('.st-owl-slider'); 98 if (owlSliderEl.length) { 99 let items = owlSliderEl.data('items') || 3; 100 let loop = owlSliderEl.data('loop') === undefined ? true : owlSliderEl.data('loop'); 101 let margin = owlSliderEl.data('margin') || 20; 102 let dots = owlSliderEl.data('dots') === undefined ? true : owlSliderEl.data('dots'); 103 let nav = owlSliderEl.data('nav') === undefined ? true : owlSliderEl.data('nav'); 104 let responsive = owlSliderEl.data('responsive') === undefined ? false : owlSliderEl.data('responsive'); 105 let args = { 106 items: items, 107 //loop: loop, 108 margin: margin, 109 dots: dots, 110 nav: nav 111 } 112 if (responsive) { 113 args.responsive = responsive; 114 } 115 owlSliderEl.owlCarousel(args); 116 } 117 }, 118 119 initCalendarAvailability() { 120 $('.rate-calendar').each(function () { 121 let t = $(this); 122 let inputCalendar = $('.st-room-availability-input', t); 123 if (inputCalendar.length > 0) { 124 if (window.matchMedia('(max-width: 767px)').matches) { 125 var singleDatePicker = true; 126 } else { 127 var singleDatePicker = false; 128 } 129 let options = { 130 parentEl: t, 131 singleDatePicker: singleDatePicker, 132 showCalendar: true, 133 alwaysShow: true, 134 autoApply: true, 135 disabledPast: true, 136 classNotAvailable: ['disabled', 'off'], 137 enableLoading: true, 138 showEventTooltip: true, 139 sameDate: false, 140 minDate: new Date(), 141 dateFormat: 'DD/MM/YYYY', 142 customClass: 'st-availability-calendar-wrapper', 143 widthSingle: 500, 144 }; 145 146 if (t.hasClass('style-2')) { 147 options.singleDatePicker = true; 148 } 149 150 options.fetchEvents = function (start, end, el, callback) { 151 var events = []; 152 if (el.flag_get_events) { 153 return false; 154 } 155 el.flag_get_events = true; 156 el.container.find('.loader-wrapper').show(); 157 var data = { 158 action: 'st_get_availability_hotel_room', 159 start: start.format('YYYY-MM-DD'), 160 end: end.format('YYYY-MM-DD'), 161 post_id: inputCalendar.data('room-id'), 162 security: st_params._s 163 }; 164 $.post(st_params.ajax_url, data, function (respon) { 165 if (typeof respon === 'object') { 166 if (typeof respon.events === 'object') { 167 events = respon.events; 168 } else { 169 events = respon; 170 } 171 } else { 172 console.log('Can not get data'); 173 } 174 callback(events, el); 175 el.flag_get_events = false; 176 el.container.find('.loader-wrapper').hide(); 177 }, 'json'); 178 } 179 180 if (typeof locale_daterangepicker == 'object') { 181 options.locale = locale_daterangepicker; 182 } 183 inputCalendar.daterangepicker(options, function (start, end, label) {});
184 var dp = inputCalendar.data('daterangepicker'); 185 dp.show(); 186 } 187 188 }); 189 }, 190 191 initCalendarAvailabilityRental() { 192 $('.rate-calendar').each(function () { 193 let t = $(this); 194 let inputCalendar = $('.calendar_input', t); 195 196 let options = { 197 parentEl: t, 198 showCalendar: true, 199 alwaysShow: true, 200 autoApply: true, 201 disabledPast: true, 202 classNotAvailable: ['disabled', 'off'], 203 enableLoading: true, 204 showEventTooltip: true, 205 sameDate: false, 206 minDate: new Date(), 207 dateFormat: 'DD/MM/YYYY', 208 customClass: 'st-availability-calendar-wrapper', 209 widthSingle: 500, 210 }; 211 212 if (t.hasClass('style-2')) { 213 options.singleDatePicker = true; 214 } 215 216 options.fetchEvents = function (start, end, el, callback) { 217 var events = []; 218 if (el.flag_get_events) { 219 return false; 220 } 221 el.flag_get_events = true; 222 el.container.find('.loader-wrapper').show(); 223 var data = { 224 action: 'st_get_availability_rental_single', 225 start: start.format('YYYY-MM-DD'), 226 end: end.format('YYYY-MM-DD'), 227 post_id: inputCalendar.data('room-id'), 228 security: st_params._s 229 }; 230 $.post(st_params.ajax_url, data, function (respon) { 231 if (typeof respon === 'object') { 232 if (typeof respon.events === 'object') { 233 events = respon.events; 234 } else { 235 events = respon; 236 } 237 } else { 238 console.log('Can not get data'); 239 } 240 callback(events, el); 241 el.flag_get_events = false; 242 el.container.find('.loader-wrapper').hide(); 243 }, 'json'); 244 } 245 246 if (typeof locale_daterangepicker == 'object') { 247 options.locale = locale_daterangepicker; 248 } 249 inputCalendar.daterangepicker(options, function (start, end, label) {}); 250 var dp = inputCalendar.data('daterangepicker'); 251 if (dp) { 252 dp.show(); 253 } 254 255 }); 256 }, 257 258 259 initTopbar() { 260 var topbar = $('#topbar'); 261 $('.cursor, .current_langs', topbar).on('click', function (e) { 262 e.preventDefault(); 263 let dropdown = $(this).parent().find('.nav-drop-menu'); 264 $('.nav-drop-menu', topbar).not(dropdown).hide(); 265 dropdown.toggle(); 266 }) 267 268 $(document).mouseup(function (e) { 269 var container = $("#topbar .nav-drop"); 270 if (!container.is(e.target) && container.has(e.target).length === 0) { 271 container.find('.nav-drop-menu').hide(); 272 } 273 }); 274 }, 275 276 initMenu() { 277 $('.header__left .menu-toggle').on('click', function () { 278 $('#st-main-menu').toggleClass('open'); 279 $('.header__center .overlay').show(); 280 $('body').css({ 281 'overflow': 'hidden' 282 }) 283 }); 284 285 $('#st-main-menu .back-menu, .header__center .overlay').on('click', function (e) { 286 e.preventDefault(); 287 $('#st-main-menu').removeClass('open'); 288 $('.header__center .overlay').hide(); 289 $('body').css({ 290 'overflow': '' 291 }) 292 }); 293 294 $('#st-main-menu a .fa').on('click', function (e) { 295 e.preventDefault(); 296 //$(this).closest('.menu-item ').find('.menu-dropdown').first().slideToggle(); 297 }); 298 }, 299 300 initMapToggle() { 301 let base = this; 302 $('.toggle-map', base.wrapper).on('click', function () { 303 let t = $(this); 304 let pageWrapper = $('.st-results', base.wrapper); 305 if (!t.hasClass('open')) { 306 $('.maparea').addClass('to-full'); 307 pageWrapper.addClass('nomap'); 308 t.addClass('open'); 309 } else { 310 setTimeout(function () { 311 $('.maparea').removeClass('to-full'); 312 }, 400) 313 pageWrapper.removeClass('nomap'); 314 t.removeClass('open'); 315 } 316 }); 317 318 $('.map-view-popup.style-2 .close').on('click', function () { 319 $(this).parent().fadeOut(); 320 }); 321 }, 322 323 initTriggers() { 324 let base = this; 325 $(document).on('st_clear_filter_action', function (event) { 326 $('.top-filter .dropdown-toggle.active .count', base.wrapper).empty(); 327 $('.top-filter .dropdown-toggle.active', base.wrapper).removeClass('active'); 328 let filterPrice = $('.filter-price .dropdown.active', base.wrapper); 329 $('span[data-text]', filterPrice).text($('span[data-text]', filterPrice).data('text'));
330 filterPrice.removeClass('active'); 331 }); 332 }, 333 334 initCheckboxFilter() { 335 let base = this; 336 $('.top-filter input[type="checkbox"]', base.wrapper).on('change', function () { 337 let parent = $(this).closest('.form-extra-field'), 338 countChecked = $('input[type="checkbox"]:checked', parent).length, 339 dropdown = $('.dropdown-toggle', parent); 340 341 countChecked > 0 ? $('.count', dropdown).text(' (' + countChecked + ') ') : $('.count', dropdown).empty(); 342 countChecked > 0 ? dropdown.addClass('active') : dropdown.removeClass('active'); 343 }); 344 }, 345 346 initPriceSlider() { 347 let base = this; 348 $('.filter-price .btn-apply-price-range', base.wrapper).on('click', function () { 349 let parent = $(this).closest('.dropdown-menu'), 350 from = $('.irs-from', parent).text(), 351 to = $('.irs-to', parent).text(); 352 353 let textRender = from + ' - ' + to, 354 elRender = $('.filter-price .dropdown', base.wrapper); 355 elRender.find('span').first().text(textRender); 356 if (!elRender.hasClass('active')) 357 elRender.addClass('active'); 358 }) 359 }, 360 361 initSearchByMoveMap() { 362 if ($('.page-half-map').length) { 363 if ($('#st-move-map').is(':checked')) { 364 365 } 366 } 367 }, 368 369 calcPositionArrowSlider() { 370 $('.st-list-destination').each(function () { 371 let slide = $('.swiper-slide', $(this)).first(), 372 arrow = $('.st-button-prev, .st-button-next', $(this)); 373 let slideHeight = parseInt(slide.find('.thumbnail img').height()) / 2 - 20; 374 arrow.css({ 375 top: slideHeight + 'px' 376 }); 377 }); 378 }, 379 380 initSearchFieldFocus() { 381 let fieldDestination = $('.field-detination'); 382 383 fieldDestination.on('show.bs.dropdown', function () { 384 $(this).parent().addClass('st-focus'); 385 }).on('hidden.bs.dropdown', function () { 386 $(this).parent().removeClass('st-focus'); 387 }); 388 389 let fieldGuest = $('.field-guest .dropdown'); 390 fieldGuest.on('show.bs.dropdown', function () { 391 $(this).parent().addClass('st-focus'); 392 }).on('hidden.bs.dropdown', function () { 393 $(this).parent().removeClass('st-focus'); 394 }); 395 }, 396 397 initPasswordField() { 398 $('.field-password .stt-icon').on('click', function () { 399 let t = $(this), 400 parent = t.parent(); 401 402 if (t.hasClass('ic-view')) { 403 parent.addClass('viewing').find('input').attr('type', 'text'); 404 t.removeClass('ic-view'); 405 } else { 406 parent.removeClass('viewing').find('input').attr('type', 'password'); 407 t.addClass('ic-view'); 408 } 409 }) 410 }, 411 412 initAccountPopup() { 413 let wrapper = $('.login-regiter-popup.style-9'); 414 if (wrapper.length) { 415 let accountTab = $('.account-tabs li', wrapper); 416 accountTab.on('click', function () { 417 let t = $(this), 418 target = t.data('target'); 419 if (!t.hasClass('active')) { 420 accountTab.removeClass('active'); 421 t.addClass('active'); 422 $('.login-form-wrapper', wrapper).removeClass('active'); 423 $('.login-form-wrapper.' + target, wrapper).addClass('active'); 424 } 425 }); 426 427 $('.create-account-action a').on('click', function (e) { 428 if ($(this).closest('.modal ').length) { 429 e.preventDefault(); 430 $('.account-tabs li:last-child', wrapper).trigger('click'); 431 } 432 }); 433 } 434 }, 435 formatDateDdMmYy(input) { 436 if (st_params.date_format == 'dd/mm/yyyy' || (st_params.date_format == 'dd-mm-yyyy')) { 437 var datePart = input.match(/\d+/g), 438 day = datePart[0],
439 month = datePart[1], 440 year = datePart[2]; 441 return month + '/' + day + '/' + year; 442 } else { 443 return input; 444 } 445 }, 446 447 initDateDropdown() { 448 let base = this; 449 450 $('.form-date-search').each(function () { 451 var parent = $(this), 452 dateWrapper = $('.date-item-wrapper', parent), 453 checkInInput = $('.check-in-input', parent), 454 checkOutInput = $('.check-out-input', parent), 455 checkInOut = $('.check-in-out', parent), 456 checkInRender = $('.check-in-render', parent), 457 checkOutRender = $('.check-out-render', parent); 458 var timepicker = parent.data('timepicker'); 459 460 if (typeof timepicker == 'undefined' || timepicker == '') { 461 timepicker = false; 462 } else { 463 timepicker = true; 464 var start_at_text = parent.data('label-start-time'); 465 var end_at_text = parent.data('label-end-time'); 466 } 467 var options = { 468 singleDatePicker: false, 469 sameDate: true, 470 sameDateMulti: true, 471 autoApply: true, 472 disabledPast: true, 473 dateFormat: 'DD/MM/YYYY', 474 customClass: 'st-search-form-calendar', 475 widthSingle: 500, 476 onlyShowCurrentMonth: true, 477 timePicker: timepicker, 478 timePicker24Hour: (st_params.time_format == '12h') ? false : true, 479 }; 480 if (checkInInput.val() != null && checkInInput.val() != '' && checkOutInput.val() != null && checkOutInput.val() != '') { 481 options.startDate = base.formatDateDdMmYy(checkInInput.val()); 482 options.endDate = base.formatDateDdMmYy(checkOutInput.val()); 483 } 484 var locale_daterangepicker_icon = { 485 labelStartTime: '<svg height="20px" width="20px" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\n\t viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">\n\n<g fill="#000000">\n\t<path d="M12,23.25C5.797,23.25,0.75,18.203,0.75,12C0.75,5.797,5.797,0.75,12,0.75c6.203,0,11.25,5.047,11.25,11.25\n\t\tC23.25,18.203,18.203,23.25,12,23.25z M12,2.25c-5.376,0-9.75,4.374-9.75,9.75s4.374,9.75,9.75,9.75s9.75-4.374,9.75-9.75\n\t\tS17.376,2.25,12,2.25z"/>\n\t<path d="M15.75,16.5c-0.2,0-0.389-0.078-0.53-0.22l-2.25-2.25c-0.302,0.145-0.632,0.22-0.969,0.22c-1.241,0-2.25-1.009-2.25-2.25\n\t\tc0-0.96,0.615-1.808,1.5-2.121V5.25c0-0.414,0.336-0.75,0.75-0.75s0.75,0.336,0.75,0.75v4.629c0.885,0.314,1.5,1.162,1.5,2.121\n\t\tc0,0.338-0.075,0.668-0.22,0.969l2.25,2.25c0.292,0.292,0.292,0.768,0,1.061C16.139,16.422,15.95,16.5,15.75,16.5z M12,11.25\n\t\tc-0.414,0-0.75,0.336-0.75,0.75s0.336,0.75,0.75,0.75s0.75-0.336,0.75-0.75S12.414,11.25,12,11.25z"/>\n</g>\n</svg>' + start_at_text, 486 labelEndTime: '<svg height="20px" width="20px" version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"\n\t viewBox="0 0 24 24" style="enable-background:new 0 0 24 24;" xml:space="preserve">\n\n<g fill="#000000">\n\t<path d="M12,23.25C5.797,23.25,0.75,18.203,0.75,12C0.75,5.797,5.797,0.75,12,0.75c6.203,0,11.25,5.047,11.25,11.25\n\t\tC23.25,18.203,18.203,23.25,12,23.25z M12,2.25c-5.376,0-9.75,4.374-9.75,9.75s4.374,9.75,9.75,9.75s9.75-4.374,9.75-9.75\n\t\tS17.376,2.25,12,2.25z"/>\n\t<path d="M15.75,16.5c-0.2,0-0.389-0.078-0.53-0.22l-2.25-2.25c-0.302,0.145-0.632,0.22-0.969,0.22c-1.241,0-2.25-1.009-2.25-2.25\n\t\tc0-0.96,0.615-1.808,1.5-2.121V5.25c0-0.414,0.336-0.75,0.75-0.75s0.75,0.336,0.75,0.75v4.629c0.885,0.314,1.5,1.162,1.5,2.121\n\t\tc0,0.338-0.075,0.668-0.22,0.969l2.25,2.25c0.292,0.292,0.292,0.768,0,1.061C16.139,16.422,15.95,16.5,15.75,16.5z M12,11.25\n\t\tc-0.414,0-0.75,0.336-0.75,0.75s0.336,0.75,0.75,0.75s0.75-0.336,0.75-0.75S12.414,11.25,12,11.25z"/>\n</g>\n</svg>
486' + end_at_text, 487 } 488 if (typeof locale_daterangepicker == 'object') { 489 var setting_locale = { 490 ...locale_daterangepicker_icon, 491 ...locale_daterangepicker 492 }; 493 options.locale = setting_locale; 494 } 495 checkInOut.on('blur'); 496 checkInOut.daterangepicker(options, function (start, end, label) { 497 if (parent.hasClass('form-date-travelpayout')) { 498 checkInInput.val(start.format('YYYY-MM-DD')).trigger('change'); 499 } else { 500 checkInInput.val(start.format(parent.data('format'))).trigger('change'); 501 502 } 503 checkInRender.html(start.format(parent.data('format'))).trigger('change'); 504 if (parent.hasClass('form-date-travelpayout')) { 505 checkOutInput.val(end.format('YYYY-MM-DD')).trigger('change'); 506 } else { 507 checkOutInput.val(end.format(parent.data('format'))).trigger('change'); 508 509 } 510 checkOutRender.html(end.format(parent.data('format'))).trigger('change'); 511 if (timepicker) { 512 checkInInput.val(start.format(parent.data('date-format'))).trigger('change'); 513 $('.check-in-input-time', parent).val(start.format(parent.data('time-format'))).trigger('change'); 514 checkOutInput.val(end.format(parent.data('date-format'))).trigger('change'); 515 $('.check-out-input-time', parent).val(end.format(parent.data('time-format'))).trigger('change'); 516 $('.check-out-input-time', parent).val(end.format(parent.data('time-format'))).trigger('change'); 517 } 518 checkInOut.trigger('daterangepicker_change', [start, end]); 519 }); 520 521 checkInOut.on('click.start.daterangepicker', function () { 522 if (base.isCalendarShown) { 523 $('.date-item-wrapper.checkin').removeClass('st-focus'); 524 $('.date-item-wrapper.checkout').addClass('st-focus'); 525 } 526 base.isCalendarShown = true; 527 }); 528 529 checkInOut.on('show.daterangepicker', function () { 530 $('.date-item-wrapper.checkin').addClass('st-focus'); 531 $('.date-item-wrapper.checkout').removeClass('st-focus'); 532 base.isCalendarShown = false; 533 }); 534 535 checkInOut.on('hide.daterangepicker', function () { 536 $('.date-item-wrapper').removeClass('st-focus'); 537 base.isCalendarShown = false; 538 }); 539 }); 540 }, 541 542 initGuestDropdown() { 543 544 let search_v2 = $('.search-form-v2'); 545 let search_v3 = $('.search-form-v3'); 546 if (typeof search_v2 != 'undefined' || typeof search_v3 != 'undefined') { 547 $('input[name="room_num_search"], input[name="adult_number"], input[name="child_number"]', search_v2, search_v3 ).on('change', function () { 548 let wrapper = $(this).parents('.field-guest'); 549 let renderEl = $('.render span', wrapper), 550 inputRoom = $('input[name="room_num_search"]', wrapper), 551 inputAdult = $('input[name="adult_number"]', wrapper), 552 inputChild = $('input[name="child_number"]', wrapper), 553 i108n = renderEl.data('text'); 554 555 let numberGuest = parseInt(inputAdult.val()) + parseInt(inputChild.val()); 556 let textRoom = ''; 557 let textComma = ''; 558 let numberRoom = ''; 559 if (typeof i108n.room !== 'undefined') { 560 textRoom = (numberRoom === 1 ? i108n.room : i108n.rooms); 561 numberRoom = inputRoom.val(); 562 textComma = (numberRoom !== '' ? ', ' : ''); 563 if(typeof numberRoom != 'undefined'){ 564 numberRoom = parseInt(inputRoom.val()) + ' '; 565 } else { 566 numberRoom = ''; 567 textRoom = ''; 568 } 569 } 570 if($('.render', wrapper).hasClass('hide')){ 571 $('.render', wrapper).removeClass('hide'); 572 $('.st-form-dropdown-icon label', wrapper).addClass('hide'); 573 } 574 renderEl.text(numberGuest + ' ' + (numberGuest === 1 ? i108n.guest : i108n.guests) + textComma + numberRoom + '' + textRoom); 575 }); 576 } 577 }, 578 579 initElementor() { 580 let base = this; 581 $(window).on('elementor/frontend/init', function () { 582 elementorFrontend.hooks.addAction('frontend/element_ready/st_destination.default', function ($wrapper) { 583 setTimeout(function () { 584 base.calcPositionArrowSlider(); 585 }, 700); 586 }); 587 }); 588 }, 589 initGoToTop() { 590 $('#gotop').on('click', function () { 591 $("body,html").animate({ 592 scrollTop: 0 593 }, 700, function () { 594 $('#gotop').fadeOut() 595 }) 596 }); 597 $(window).on('scroll', function () { 598 var scrolltop = $(window).scrollTop(); 599 if (scrolltop > 200) { 600 $('#gotop').fadeIn() 601 } else { 602 $('#gotop').fadeOut() 603 } 604 }); 605 } 606 } 607 608 HotelV2Action.init(); 609})(jQuery);
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.