PageSourceSearch

https://abyrdsong.com/wp-content/plugins/tickera-event-ticketing-system/js/cart.js?ver=3.4.8.3

js abyrdsong.com collected 2026-10-10 02:31:16 UTC 25,271 bytes, 685 lines download raw bytes

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.