1jQuery(document).ready(function ($) { 2 3 let error_message = '<div class="tc_field_errors">'+tc_ajax.tc_field_error+'</div>'; 4 5 // Check age restriction 6 if (tc_ajax.tc_show_age_check == 'yes' && jQuery('#tc_age_check').length !== 0) { 7 8 var checkout_form = $('form.checkout'); 9 10 checkout_form.on('checkout_place_order', function () { 11 var tc_get_check = jQuery("#tc_age_check").is(':checked'); 12 if (tc_get_check == false) { 13 jQuery('.tc-age-check-error').each(function () { 14 jQuery(this).remove(); 15 }); 16 jQuery('.tc-age-check-label').after('<div class="tc-age-check-error">' + tc_ajax.tc_error_message + '</div>'); 17 return false; 18 } else { 19 return true; 20 } 21 }); 22 } 23 24 if (jQuery(".tc_cart_widget").length > 0){ 25 26 function tc_update_cart_ajax(){ 27 28 jQuery(".tc_cart_ul").css('opacity', '0.5'); 29 30 var data = { 31 'action': 'tc_update_widget_cart' 32 }; 33 34 // since 2.8 ajaxurl is always defined in the admin header and points to admin-ajax.php 35 jQuery.post(tc_ajax.ajaxUrl, data, function(response) { 36 jQuery(".tc_cart_ul").css('opacity', '1'); 37 jQuery(".tc_cart_ul").html(''); 38 jQuery(".tc_cart_ul").html(response); 39 }); 40 41 } 42 43 44 // Listen DOM changes 45 $('.event_tickets, .cart_form').bind("DOMSubtreeModified", tc_update_cart_ajax); 46 } 47 48 /** 49 * payment gateway show order 50 */ 51 var $tc_payment_gateway_wrapper = $('#tc_payment_form'); 52 53 $tc_payment_gateway_wrapper.find('.tickera.tickera-payment-gateways').sort(function (a, b) { 54 return +a.dataset.gateway_show_priority - +b.dataset.gateway_show_priority; 55 }).appendTo($tc_payment_gateway_wrapper); 56 57 $( document ).on( 'submit', '#tc_payment_form', function ( event ) { 58 $( '#tc_payment_confirm' ).attr( 'disabled', 'disabled' ); 59 }); 60 61 /** 62 * Check if cart update is needed 63 * @returns {Boolean} 64 */ 65 function tc_check_cart_update() { 66 var total_quantity = 0; 67 68 if ($("#tickera_cart").length) {//make sure tickera standalone version is active 69 70 $('.ticket-quantity .quantity').each(function (index) { 71 total_quantity = parseInt(total_quantity) + parseInt($(this).val()); 72 }); 73 74 if (total_quantity != $('.owner-info-wrap').length) { 75 76 $('.tc_cart_errors').html('<ul><li><a href="cjsea" class="cjsea"></a>' + tc_ajax.update_cart_message + '</li></ul>'); 77 78 let target = $('.cjsea'); 79 80 $('html, body').stop().animate({ 81 'scrollTop': (target.offset().top) - 40 82 }, 350, 'swing', function () { 83 window.location.hash = target; 84 }); 85 86 return false; 87 88 } else { 89 return true; 90 } 91 92 } else { 93 return true; 94 } 95 } 96 97 /** 98 * Increase the quantity 99 */ 100 $('body').on('click', 'input.tickera_button.plus', function (event) { 101 var quantity = $(this).parent().find('.quantity').val(); 102 $(this).parent().find('.quantity').val(parseInt(quantity) + 1); 103 }); 104 105 /** 106 * Decrease the quantity 107 */ 108 $('body').on('click', 'input.tickera_button.minus', function (event) { 109 var quantity = $(this).parent().find('.quantity').val(); 110 if (quantity >= 1) { 111 $(this).parent().find('.quantity').val(parseInt(quantity) - 1); 112 } 113 }); 114 115 /** 116 * When user clicks on the empty cart button 117 */ 118 $('body').on('click', '#empty_cart', function (event) { 119 $('input[name="cart_action"]').val('empty_cart'); 120 }); 121 122 /** 123 * When user clicks on the update button 124 */ 125 $('body').on('click', '#update_cart', function (event) { 126 $('input[name="cart_action"]').val('update_cart'); 127 }); 128 129 /** 130 * Toggle Customer Age Checkbox 131 */ 132 $( document ).on( 'change', '#tc_age_check', function() { 133 if ( $(this).is(':checked') ) { 134 $(this).removeClass('has-error'); 135 $('.tc-age-check-error').remove(); 136 137 } else { 138 $(this).addClass('has-error'); 139 $('.tc-age-check-error').remove(); 140 $(this).parent().append('<div class="tc-age-check-error">' + tc_ajax.tc_error_message + '</div>'); 141 } 142 }); 143 144 /** 145 * Tickera Standalone 146 * When user click on the proceed to checkout button 147 */ 148 $( document ).on( 'click', '#proceed_to_checkout', function ( event ) { 149 150 // Make sure to update the cart if there's some changes before moving to checkout page. 151 if ( ! tc_check_cart_update() ) { 152 event.preventDefault(); 153 return false;
154 } 155 156 // Check Validation Fields 157 $( '#tickera_cart .tickera-input-field' ).each( function() { 158 159 let required_field = ( typeof $(this).attr('name') !== "undefined" ) ? 160 $('input[value="'+ $(this).attr('name').split('[')[0] + '"]').attr('name') : 161 $('input[value="'+ $(this).closest('div').find('.checkbox_values').attr('name').split('[')[0] +'"]').attr('name'); 162 163 // IF: Required fields 164 if ( typeof required_field !== 'undefined' ) { 165 166 if ( $(this).is('select') 167 && !$(this).children('option:selected').val() 168 && !$(this).closest('div').find('.tc_field_errors').length ) { 169 170 /* 171 * Select fields 172 */ 173 $(this).addClass('has-error'); 174 $(this).closest('div').append(error_message); 175 176 } else if ( $(this).is('input[type="checkbox"]') 177 && !$(this).closest('div').find('.checkbox_values').val() 178 && !$(this).closest('div').find('.tc_field_errors').length ) { 179 180 /* 181 * Checkbox fields 182 */ 183 $(this).addClass('has-error'); 184 $(this).closest('div').append(error_message); 185 186 } else if ( ( $(this).is('textarea') && !$(this).val() 187 || ( $(this).is('input') ) && !$(this).val() ) ) { 188 189 /* 190 * Input and Textarea fields 191 */ 192 $(this).addClass('has-error'); 193 $(this).css('border-left', '2px solid rgb(225, 0, 0)'); 194 } 195 196 event.preventDefault(); 197 } 198 199 // IF: Field has value - Remove required notification 200 if ( $(this).closest('div').find('.checkbox_values').val() || $(this).children('option:selected').val() ) { 201 $(this).removeClass('has-error'); 202 $(this).closest('div').find('.tc_field_errors').remove(); 203 } 204 }); 205 206 // Validate Customer Age 207 if ( $('#tc_age_check').is(':checked') ) { 208 $('#tc_age_check').removeClass('has-error'); 209 $('.tc-age-check-error').remove(); 210 211 } else { 212 $('#tc_age_check').addClass('has-error'); 213 $('.tc-age-check-error').remove(); 214 $('#tc_age_check').parent().append('<div class="tc-age-check-error">' + tc_ajax.tc_error_message + '</div>'); 215 } 216 217 // Check email verification for buyer field 218 if ( $( '#tickera_cart input' ).hasClass( 'tc_validate_field_type_confirm_email' ) ) { 219 220 let buyer_email = $('.tc_validate_field_type_email').val(), 221 buyer_confirm_email = $('.tc_validate_field_type_confirm_email ').val(); 222 223 if ( (buyer_email) != (buyer_confirm_email) || buyer_email == "" || buyer_confirm_email == "" ){ 224 $('.tc_validate_field_type_email,.tc_validate_field_type_confirm_email').addClass('has-error'); 225 $('.tc_validate_field_type_email,.tc_validate_field_type_confirm_email').css('border-left','2px solid #ff0000'); 226 227 } else { 228 $('.tc_validate_field_type_email,.tc_validate_field_type_confirm_email').removeClass('has-error'); 229 $('.tc_validate_field_type_email,.tc_validate_field_type_confirm_email').css('border-left','2px solid #09a10f'); 230 } 231 } 232 233 // Check email verification for owner field 234 if ( $( '#tickera_cart input' ).hasClass( "tc_owner_confirm_email" ) ) { 235 let owner_email = $('.tc_owner_email').val(), 236 owner_confirm_email = $('.tc_owner_confirm_email ').val(); 237 238 if ( (owner_email) != (owner_confirm_email) || owner_email == "" || owner_confirm_email == "" ){ 239 $('.tc_owner_email,.tc_owner_confirm_email').addClass('has-error'); 240 jQuery('.tc_owner_email,.tc_owner_confirm_email').css('border-left','2px solid #ff0000'); 241 242 } else { 243 $('.tc_owner_email,.tc_owner_confirm_email').removeClass('has-error'); 244 jQuery('.tc_owner_email,.tc_owner_confirm_email').css('border-left','2px solid #09a10f'); 245 } 246 } 247 248 // Proceed to checkout if no error found 249 if ( !$('.has-error').length ) { 250 $('input[name="cart_action"]').val('proceed_to_checkout');
251 $('#tickera_cart').submit(); 252 } 253 }); 254 255 /** 256 * Validate Cart Select and Checkbox Fields 257 */ 258 $( document ).on( 'change', '.tickera_additional_info .tickera-input-field', function() { 259 260 let required_field = ( typeof $(this).attr('name') !== "undefined" ) ? 261 $('input[value="'+ $(this).attr('name').split('[')[0] + '"]').attr('name') : 262 $('input[value="'+ $(this).closest('div').find('.checkbox_values').attr('name').split('[')[0] +'"]').attr('name'); 263 264 if ( typeof required_field !== 'undefined' ) { 265 266 if ( $(this).is('select') 267 && $(this).children('option:selected').val() ) { 268 269 /* 270 * Select field 271 */ 272 $(this).removeClass('has-error'); 273 $(this).closest('div').find('.tc_field_errors').remove(); 274 275 } else if ( $(this).is('input[type="checkbox"]') 276 && $(this).closest('div').find('.checkbox_values').val() ) { 277 278 /* 279 * Checkbox fields 280 */ 281 $(this).removeClass('has-error'); 282 $(this).closest('div').find('.tc_field_errors').remove(); 283 284 } else if ( ( $(this).is('select') || $(this).is('input[type="checkbox"]') ) 285 && !$(this).closest('div').find('.tc_field_errors').length ) { 286 287 /* 288 * Field has error 289 */ 290 $(this).addClass('has-error'); 291 $(this).closest('div').append( error_message ); 292 } 293 } 294 }); 295 296 /** 297 * When user fill form check validation 298 */ 299 $( document ).on( 'keyup', '.tc-owner-field,.owner-field-textarea,.buyer-field-text,.buyer-field-textarea', function() { 300 301 if ( !$( this ).val() ){ 302 var req_fld = $( this ).prev().html(); 303 304 if ( req_fld.indexOf('*') != -1 ) { 305 $( this ).addClass( 'has-error' ); 306 $( this ).css( 'border-left','2px solid #ff0000' ); 307 } 308 309 } else { 310 $( this ).removeClass( 'has-error' ); 311 $( this ).css( 'border-left','2px solid #09a10f' ); 312 } 313 }); 314 315 /** 316 * Check email-verification for buyer field 317 */ 318 if ( $( '#tickera_cart input' ).hasClass( 'tc_validate_field_type_confirm_email' ) ) { 319 320 $( document ).on( 'keyup', '.tc_validate_field_type_email,.tc_validate_field_type_confirm_email', function() { 321 322 if ( ( $( this ).val() != $( '.tc_validate_field_type_email' ).val() ) || ( !$( this ).val() ) || ( $( this ).val() != $( '.tc_validate_field_type_confirm_email' ).val() ) ) { 323 $( '.tc_validate_field_type_email,.tc_validate_field_type_confirm_email' ).addClass( 'has-error' ); 324 $( '.tc_validate_field_type_email,.tc_validate_field_type_confirm_email' ).css( 'border-left', '2px solid #ff0000' ); 325 326 } else { 327 328 if ( ( $( '.tc_validate_field_type_confirm_email' ).val() != '' ) || ( $( '.tc_validate_field_type_email' ).val() != '' ) ) { 329 $( '.tc_validate_field_type_email,.tc_validate_field_type_confirm_email' ).removeClass( 'has-error' ); 330 $( '.tc_validate_field_type_email,.tc_validate_field_type_confirm_email' ).css( 'border-left', '2px solid #09a10f' ); 331 } 332 } 333 }); 334 } 335 336 /** 337 * Check email-verification for owner field 338 */ 339 if ( $( '#tickera_cart input' ).hasClass( 'tc_owner_confirm_email' ) ) { 340 341 $( document ).on( 'keyup', '.tc_owner_email,.tc_owner_confirm_email', function() { 342 343 if ( ( $( this ).val() != $( '.tc_owner_email' ).val()) || ( !$( this ).val()) || ( $( this ).val() != $( '.tc_owner_confirm_email' ).val() ) ) { 344 $( '.tc_owner_email,.tc_owner_confirm_email' ).addClass( 'has-error' ); 345 $( '.tc_owner_email,.tc_owner_confirm_email' ).css( 'border-left','2px solid #ff0000' ); 346 347 } else { 348 349 if ( ( $( '.tc_owner_confirm_email' ).val() != '' ) || ( $( '.tc_owner_email' ).val() != '' ) ) { 350 $( '.tc_owner_email,.tc_owner_confirm_email' ).removeClass( 'has-error' ); 351 $( '.tc_owner_email,.tc_owner_confirm_email' ).css( 'border-left', '2px solid #09a10f' ); 352 } 353 } 354 }); 355 } 356 357 /** 358 * when user click on the proceed to checkout button 359 */ 360 $('body').on('click', '#apply_coupon', function (event) { 361 $('input[name="cart_action"]').val('apply_coupon'); 362 }); 363 364 /** 365 * Add to cart button 366 */ 367 $('body').on('click', 'a.add_to_cart', function (event) { 368 event.preventDefault(); 369 370 $(this).fadeOut('fast').fadeIn('fast'); 371 var button_type = $(this).attr('data-button-type'); 372 var open_method = $(this).attr('data-open-method'); 373 var current_form = $(this).parents('form.cart_form'); 374 var ticket_id = current_form.find(".ticket_id").val(); 375 var qty = $(this).closest('tr').find('.tc_quantity_selector').val(); 376 377 if (typeof qty == 'undefined') { 378 var qty = $(this).closest('.cart_form').find('.tc_quantity_selector').val(); 379 } 380 381 $.post(tc_ajax.ajaxUrl, {action: "add_to_cart", ticket_id: ticket_id, tc_qty: qty}, function (data) { 382 if (data != 'error') { 383 current_form.html(data); 384 if ($('.tc_cart_contents').length > 0) { 385 $.post(tc_ajax.ajaxUrl, {action: "update_cart_widget"}, function (widget_data) { 386 $('.tc_cart_contents').html(widget_data); 387 }); 388 } 389 390 if (open_method == 'new' && button_type == 'buynow') { 391 window.open(tc_ajax.cart_url, '_blank'); 392 } 393 394 if (button_type == 'buynow' && open_method !== 'new') { 395 window.location = tc_ajax.cart_url; 396 } 397 398 } else { 399 current_form.html(data); 400 } 401 }); 402 }); 403 404 /** 405 * Empty Cart 406 * @returns {undefined} 407 */ 408 function tc_empty_cart() { 409 if ($("a.tc_empty_cart").attr("onClick") != undefined) { 410 return; 411 } 412 413 $('body').on('click', 'a.tc_empty_cart', function (event) { 414 var answer = confirm(tc_ajax.emptyCartMsg); 415 if (answer) { 416 $(this).html('<img src="' + tc_ajax.imgUrl + '" />'); 417 $.post(tc_ajax.ajaxUrl, {action: 'mp-update-cart', empty_cart: 1}, function (data) { 418 $("div.tc_cart_widget_content").html(data); 419 }); 420 } 421 return false;
422 }); 423 } 424 425 /** 426 * Listeners for add item to cart 427 * @returns {undefined} 428 */ 429 function tc_cart_listeners() { 430 $('body').on('click', 'input.tc_button_addcart', function (event) { 431 var input = $(this); 432 var formElm = $(input).parents('form.tc_buy_form'); 433 var tempHtml = formElm.html(); 434 var serializedForm = formElm.serialize(); 435 formElm.html('<img src="' + tc_ajax.imgUrl + '" alt="' + tc_ajax.addingMsg + '" />'); 436 $.post(tc_ajax.ajaxUrl, serializedForm, function (data) { 437 var result = data.split('||', 2); 438 if (result[0] == 'error') { 439 alert(result[1]); 440 formElm.html(tempHtml); 441 tc_cart_listeners(); 442 } else { 443 formElm.html('<span class="tc_adding_to_cart">' + tc_ajax.successMsg + '</span>'); 444 $("div.tc_cart_widget_content").html(result[1]); 445 if (result[0] > 0) { 446 formElm.fadeOut(2000, function () { 447 formElm.html(tempHtml).fadeIn('fast'); 448 tc_cart_listeners(); 449 }); 450 } else { 451 formElm.fadeOut(2000, function () { 452 formElm.html('<span class="tc_no_stock">' + tc_ajax.outMsg + '</span>').fadeIn('fast'); 453 tc_cart_listeners(); 454 }); 455 } 456 tc_empty_cart(); //re-init empty script as the widget was reloaded 457 } 458 }); 459 return false; 460 }); 461 } 462 463 /** 464 * add listeners 465 */ 466 tc_empty_cart(); 467 tc_cart_listeners(); 468 469 if (tc_ajax.show_filters == 1) { 470 tc_ajax_products_list(); 471 } 472 473 /** 474 * Cart Widget 475 */ 476 $('body').on('click', '.tc_widget_cart_button', function (event) { 477 window.location.href = $(this).data('url'); 478 }); 479 480 /** 481 * Proceed to checkout button 482 */ 483 $('body').on('click', '#proceed_to_checkout', function (event) { 484 $('input[name="cart_action"]').val('proceed_to_checkout'); 485 }); 486 487 // check email-verification for owner field with woocommerce 488 jQuery( function($){ 489 var fc = 'form.checkout', 490 pl = 'button[type="submit"][name="woocommerce_checkout_place_order"]'; 491 $(fc).on( 'click', pl, function(e){ 492 // // Disable "Place Order" button 493 var owner_email = $('.tc_owner_email').val(); 494 var owner_confirm_email = $('.tc_owner_confirm_email ').val(); 495 if( (owner_email && owner_confirm_email)){ 496 if ( (owner_email !== owner_confirm_email) || owner_email === "" || owner_confirm_email === "" ){ 497 jQuery('.tc_owner_email,.tc_owner_confirm_email').css('border-left','2px solid #ff0000'); 498 499 }else { 500 jQuery('.tc_owner_email,.tc_owner_confirm_email').css('border-left','2px solid #09a10f'); 501 } 502 503 } 504 }); 505 }); 506}); 507 508/** 509 * Payment Step 510 */ 511jQuery(document).ready(function ($) { 512 var gateways_count = $('.tc_gateway_form').length; 513 514 if (gateways_count > 1) { 515 $('div.tc_gateway_form').css('max-height', 'auto'); 516 } 517 518 // Payment method choice 519 $( document ).on( 'change', '.tickera-payment-gateways input.tc_choose_gateway', function () { 520 var gid = $('input.tc_choose_gateway:checked').val(); 521 522 $('div.tc_gateway_form').removeClass('tickera-height'); 523 $('div#' + gid).addClass('tickera-height'); 524 }); 525 526 $( '.tc_choose_gateway' ).each(function () { 527 528 $( this ).on( 'change', function () { 529 if ( this.checked ) { 530 $( '.payment-option-wrap' ).removeClass( 'active-gateway' ); 531 $( this ).closest( '.payment-option-wrap' ).addClass( 'active-gateway' ); 532 533 } else { 534 $( this ).closest( '.payment-option-wrap' ).toggleClass( 'active-gateway' ); 535 } 536 }); 537 }); 538 539 $('body').on('change', '.buyer-field-checkbox, .owner-field-checkbox', function (event) { 540 var checkbox_values_field = $(this).parent().parent().find('.checkbox_values'); 541 checkbox_values_field.val(''); 542 543 $(this).parent().parent().find('input').each(function (key, value) { 544 if ($(this).is(":checked")) { 545 checkbox_values_field.val(checkbox_values_field.val() + '' + $(this).val() + ', '); 546 } 547 }); 548 checkbox_values_field.val(checkbox_values_field.val().substring(0, checkbox_values_field.val().length - 2)); 549 550 }); 551 552}); 553 554/** 555 * Form validation 556 */ 557jQuery(document).ready(function ($) { 558 559 if ($('form#tickera_cart').length) {
560 $('#tickera_cart').validate({ 561 // your other plugin options 562 debug: false 563 }); 564 565 566 $('.tc_validate_field_type_email').each(function () { 567 $(this).rules('add', { 568 email: true, 569 }); 570 }); 571 572 $('.tc_owner_email').each(function () { 573 $(this).rules('add', { 574 email: true, 575 }); 576 }); 577 578 $('#tickera_cart .required').each(function () { 579 $(this).rules('add', { 580 required: true, 581 }); 582 }); 583 } 584 585}); 586 587/** 588 * Tickear Cart: Preventing Default button to trigger on Enter Key 589 */ 590jQuery(document).on('keypress','#tickera_cart input', function (e) { 591 if (e.keyCode === 13) { 592 e.preventDefault() 593 jQuery('#proceed_to_checkout').trigger('click'); 594 } 595}); 596 597/** 598 * Check custom form error notification 599 */ 600jQuery( document ).ready( function ( $ ) { 601 602 let error_message = '<div class="tc_field_errors">'+tc_ajax.tc_field_error+'</div>'; 603 604 function custom_validation() { 605 606 $( document ).on( 'change', '.tc-owner-field,.owner-field-textarea,.buyer-field-text,.buyer-field-textarea', function () { 607 608 if ( !$( this ).val() ) { 609 var req_fld = $( this ).prev().html(); 610 611 if ( req_fld.indexOf('*') != -1 ) { 612 $( this ).addClass( 'has-error' ); 613 $( this ).css( 'border-left','2px solid #ff0000' ); 614 } 615 616 } else { 617 $( this ).removeClass( 'has-error' ); 618 $( this ).css( 'border-left','2px solid #09a10f' ); 619 } 620 }); 621 } 622 623 setTimeout( function() { 624 custom_validation(); 625 }, 2000 ); 626 627 /** 628 * For Woocommerce and Bridge for Woocommerce 629 * After click place order check error notification 630 */ 631 $( document ).on( 'click', '#place_order', function () { 632 633 // Check Validation Fields 634 $('form.woocommerce-checkout .tickera_additional_info input, form.woocommerce-checkout select ,form.woocommerce-checkout .tickera_additional_info textarea').each(function() { 635 636 let required_field = false; 637 638 if ( typeof $(this).attr('name') !== 'undefined' ) { 639 required_field = $('input[value="'+ $(this).attr('name').split('[')[0] + '"]').attr('name'); 640 641 } else if ( typeof $(this).closest('div').find('.checkbox_values').attr( 'name' ) !== 'undefined' ) { 642 required_field = $('input[value="'+ $(this).closest('div').find('.checkbox_values').attr('name').split('[')[0] +'"]').attr('name'); 643 } 644 645 // IF: Required fields 646 if ( required_field && typeof required_field !== 'undefined') { 647 648 if ( $(this).is('select') 649 && !$(this).children('option:selected').val() 650 && !$(this).closest('div').find('.tc_field_errors').length ) { 651 652 /* 653 * Select fields 654 */ 655 $(this).addClass('has-error'); 656 $(this).closest('div').append(error_message); 657 658 } else if ( $(this).is('input[type="checkbox"]') 659 && !$(this).closest('div').find('.checkbox_values').val() 660 && !$(this).closest('div').find('.tc_field_errors').length ) { 661 662 /* 663 * Checkbox fields 664 */ 665 $(this).addClass('has-error'); 666 $(this).closest('div').append(error_message); 667 668 } else if ( ( $(this).is('textarea') && !$(this).val() 669 || ( $(this).is('input') ) && !$(this).val() ) ) { 670 671 /* 672 * Input and Textarea fields 673 */ 674 $(this).addClass('has-error'); 675 $(this).css('border-left', '2px solid rgb(225, 0, 0)'); 676 } 677 } 678 // IF: Field has value - Remove required notification 679 if ( $(this).closest('div').siblings('.checkbox_values').val() || $(this).children('option:selected').val() ) { 680 $(this).removeClass('has-error'); 681 $(this).parent().siblings('.tc_field_errors').remove(); 682 } 683 }); 684 }); // Place order 685}); // End ready function
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.