PageSourceSearch

https://www.arrivo.ru/assets/1b78162d/new/js/putevoditel.js

js arrivo.ru collected 2026-10-02 10:03:49 UTC 22,105 bytes, 765 lines download raw bytes

1jQuery(document).ready(function($) {
2	
3	//////////////////////////////////////////////////////////////////////
4	// Галерея
5	//////////////////////////////////////////////////////////////////////
6
7	$('.putevoditel__images__thumbnails_thumbnail').click(function() {
8		var classes = $(this).attr('class'),
9			classesArr = classes.split(' '),
10			num = classesArr[1].split('-')[1],
11			frameClass = '.putevoditel__images__main__frame-' + num;
12
13		$('.putevoditel__images__main__frame').hide();
14		$(frameClass).show();
15	});
16
17
18	//////////////////////////////////////////////////////////////////////
19	// Вкладки "достопримечательности"
20	//////////////////////////////////////////////////////////////////////
21
22	$('.city-page__showplace__tabs-content').hide();
23	$('[id^=tabContent]:first').show();
24
25	$(document).on('click', '[id^=tabBut]', function(event) {
26
27		$('.city-page__showplace__tabs-panel_tab--active').removeClass('city-page__showplace__tabs-panel_tab--active')
28		$(this).addClass('city-page__showplace__tabs-panel_tab--active')
29
30		var butId = $(this).attr('id');
31		var contentId = '#tabContent' + butId.substring(6);
32
33		$('.city-page__showplace__tabs-content').hide();
34		$(contentId).show();
35	});
36
37
38	////////////////////////////////////////////////////////////
39	// Слайдер фотографий в достопримечательностях
40	////////////////////////////////////////////////////////////
41
42	$(document).on('click', '.city-page__tab__item__image__next', function(event) {
43		var wrapper = $(this).parent().find('.city-page__tab__item__image__wrapper');
44		var images = wrapper.children();
45		var imagesAmount = $(images).length - 1;
46		var imageActive = parseInt($(wrapper).attr('data-active'))
47		
48		if (imageActive < imagesAmount) {
49			imageActive += 1;
50			$(wrapper).attr('data-active', imageActive)
51			$(images).hide();
52			$($(images)[imageActive]).show()
53		} else{
54			imageActive = 0;
55			$(wrapper).attr('data-active', imageActive)
56			$(images).hide();
57			$($(images)[imageActive]).show()
58		}
59	});
60
61	$(document).on('click', '.city-page__tab__item__image__prev', function(event) {
62		var wrapper = $(this).parent().find('.city-page__tab__item__image__wrapper');
63		var images = wrapper.children();
64		var imagesAmount = $(images).length - 1;
65		var imageActive = parseInt($(wrapper).attr('data-active'))
66
67		if (imageActive > 0) {
68			imageActive -= 1;
69			$(wrapper).attr('data-active', imageActive)
70			$(images).hide();
71			$($(images)[imageActive]).show()
72		} else{
73			imageActive = imagesAmount;
74			$(wrapper).attr('data-active', imageActive)
75			$(images).hide();
76			$($(images)[imageActive]).show()
77			// console.log($($(images)[imageActive]));
78		}
79	});
80
81	////////////////////////////////////////////////////////////
82	
83	// $('.city-page__tab__item__image__prev, .city-page__tab__item__image__next').hide();
84	// $('.city-page__tab__item__image').mouseover(function(){
85	// 	$(this).parent().find('.city-page__tab__item__image__prev, .city-page__tab__item__image__next').show();
86	// });
87	// $('.city-page__tab__item__image').mouseout(function(){
88	// 	$(this).parent().find('.city-page__tab__item__image__prev, .city-page__tab__item__image__next').hide();
89	// });
90	
91	/////////////////////////////////////////////////////////////
92
93
94	////////////////////////////////////////////////////////////////////////////////////////////////////
95	// МОДАЛЬНОЕ ОКНО КАРТА ДОСТОПРИМЕЧАТЕЛЬНОСТЕЙ
96	////////////////////////////////////////////////////////////////////////////////////////////////////
97
98	// Открытие
99	$(document).on('click', '#showplaceMap', function(event) {
100		event.preventDefault();
101		var $iframe = $('#modal_form_showplace-map iframe');
102		if ($iframe.length && !$iframe.attr('src')) {
103			$iframe.attr('src', $iframe.data('src'));
104		}
105		$('#overlay').fadeIn(10, function(){
106			$('#modal_form_showplace-map').css('display', 'block').animate({opacity: 1}, 10);
107		});
108	});
109
110	// Зaкрытие
111	$(document).on('click', '#modal_form_showplace-map-close, #overlay', function() {
112		$('#modal_form_showplace-map').animate({opacity: 0}, 10, function(){
113			$(this).css('display', 'none');
114			$('#overlay').fadeOut(10);
115		});
116	});
117
118
119	////////////////////////////////////////////////////////////////////////////////////////////////////
120	// ПЛЕЕР В САЙДБАРЕ
121	////////////////////////////////////////////////////////////////////////////////////////////////////
122
123	$(document).ready(function(){
124		if ( typeof playlist === "undefined" || !$("#jquery_jplayer_1").length ) { return; }
125
126		var cssSelector = {
127		    jPlayer: "#jquery_jplayer_1", 
128		    cssSelectorAncestor: "#jp_container_1"
129		};
130
131		var options = {
132		    swfPath: "js",
133		    supplied: "mp3",
134		    wmode: "window",
135		    smoothPlayBar: false,
136		    keyEnabled: false,
137		    autoplay: true,
138		    loop: true,
139		    description: false,
140		    
141		    ready: function(){
142		    	$('.jp-playlist ul li a').addClass('mdl-button mdl-js-button mdl-js-ripple-effect');
143		    	componentHandler.upgradeDom();
144		    }
145		};
146
147		var myPlaylist = new jPlayerPlaylist(cssSelector, playlist, options);
148
149		var myPlayer = $("#jquery_jplayer_1"),
150			myPlayerData,
151			fixFlash_mp4, // Flag: The m4a and m4v Flash player gives some old currentTime values when changed.
152			fixFlash_mp4_id, // Timeout ID used with fixFlash_mp4
153			ignore_timeupdate, // Flag used with fixFlash_mp4
154			options = {
155				ready: function (event) {
156					// Hide the volume slider on mobile browsers. ie., They have no effect.
157					if(event.jPlayer.status.noVolume) {
158						// Add a class and then CSS rules deal with it.
159						$(".jp-gui").addClass("jp-no-volume");
160					}
161					// Determine if Flash is being used and the mp4 media type is supplied. BTW, Supplying both mp3 and mp4 is pointless.
162					fixFlash_mp4 = event.jPlayer.flash.used && /m4a|m4v/.test(event.jPlayer.options.supplied);
163					// Setup the player with media.
164					// $(this).jPlayer("setMedia", {
165					// 	// mp3: "http://www.szymonklima.com/images/prasa/recenzje/plyty_Jowity.mp3",
166					//         // oga: "http://www.szymonklima.com/images/prasa/recenzje/plyty_Jowity.ogg"
167					//  mp3: "WD.mp3",
168					//  oga: "http://www.szymonklima.com/images/prasa/recenzje/plyty_Jowity.ogg"
169					// });
170
171					// $(this).jPlayer("setMedia", PL);
172				},
173				timeupdate: function(event) {
174					if(!ignore_timeupdate) {
175						myControl.progress.slider("value", event.jPlayer.status.currentPercentAbsolute);
176					}
177				},
178				volumechange: function(event) {
179					if(event.jPlayer.options.muted) {
180						myControl.volume.slider("value", 0);
181					} else {
182						myControl.volume.slider("value", event.jPlayer.options.volume);
183					}
184				},
185				swfPath: "js",
186				supplied: "m4a, oga",
187				cssSelectorAncestor: "#jp_container_1",
188				wmode: "window"
189			},
190			myControl = {
191				progress: $(options.cssSelectorAncestor + " .jp-progress-slider"),
192				volume: $(options.cssSelectorAncestor + " .jp-volume-slider")
193			};
194
195		// Instance jPlayer
196		myPlayer.jPlayer(options);
197
198		// A pointer to the jPlayer data object
199		myPlayerData = myPlayer.data("jPlayer");
200
201		// Define hover states of the buttons
202		$('.jp-gui ul li').hover(
203			function() { $(this).addClass('ui-state-hover'); },
204			function() { $(this).removeClass('ui-state-hover'); }
205		);
206
207		// Create the progress slider control
208		myControl.progress.slider({
209			animate: "fast",
210			max: 100,
211			range: "min",
212			step: 0.1,
213			value : 0,
214			slide: function(event, ui) {
215				var sp = myPlayerData.status.seekPercent;
216				if(sp > 0) {
217					// Apply a fix to mp4 formats when the Flash is used.
218					if(fixFlash_mp4) {
219						ignore_timeupdate = true;
220						clearTimeout(fixFlash_mp4_id);
221						fixFlash_mp4_id = setTimeout(function() {
222							ignore_timeupdate = false;
223						},1000);
224					}
225					// Move the play-head to the value and factor in the seek percent.
226					myPlayer.jPlayer("playHead", ui.value * (100 / sp));
227				} else {
228					// Create a timeout to reset this slider to zero.
229					setTimeout(function() {
230						myControl.progress.slider("value", 0);
231					}, 0);
232				}
233			}
234		});
235
236		// Create the volume slider control
237		myControl.volume.slider({
238			animate: "fast",
239			max: 1,
240			range: "min",
241			step: 0.01,
242			value : $.jPlayer.prototype.options.volume,
243			slide: function(event, ui) {
244				myPlayer.jPlayer("option", "muted", false);
245				myPlayer.jPlayer("option", "volume", ui.value);
246			}
247		});
248
249
250		$("#jquery_jplayer_1").bind($.jPlayer.event.play, function (event) {
251		    var current = myPlaylist.current,
252		        playlist = myPlaylist.playlist;
253		 
254		    $.each(playlist, function (index, obj) {
255		        if (index === current) {
256		            $('.arrivo-player__song-name').text(obj.title);
257		        }
258		    });
259		});
260
261
262	    $("#jquery_jplayer_1").bind($.jPlayer.event.ready, function(event) { 
263	       $('.jp-next').click();
264	       $('.jp-previous').click();
265	       $('.jp-pause').click();
266	    });
267
268
269	});
270
271
272
273	////////////////////////////////////////////////////////////////////////////////////////////////////
274	// ПОГОДА
275	////////////////////////////////////////////////////////////////////////////////////////////////////
276
277	// // Показать еще 7 дней
278	// $('.city-page__weather__more').hide();
279	// $('.city-page__weather__show-more-but').click(function(event) {
280	// 	event.preventDefault();
281	// 	$(this).hide();
282	// 	$('.city-page__weather__more').show();
283	// });	
284
285
286
287	////////////////////////////////////////////////////////////////////////////////////////////////////
288	// АККОРДEОН
289	////////////////////////////////////////////////////////////////////////////////////////////////////
290
291	$('.zippy-arrow-top').css('display', 'none');
292
293	var zippy = function(id){
294		$('#'+ id).find('.zippy-header').each(function(index, el) {
295			var className = id + '-header-' + index;
296			$(el).addClass(className);
297			
298			$(el).click(function(event) {
299				$(this).find('.zippy-arrow-top').toggle();
300				$(this).find('.zippy-arrow-bottom').toggle();
301				$('.' +id + '-content-' + index).toggle()
302			});
303		});
304
305		$('#'+ id).find('.zippy-content').each(function(index, el) {
306			var className = id + '-content-' + index;
307			$(el).addClass(className);
308
309		});
310
311	};
312
313	zippy('vizaCenters');
314
315
316	////////////////////////////////////////////////////////////////////////////////////////////////////
317	// ОБМЕН ВАЛЮТЫ
318	////////////////////////////////////////////////////////////////////////////////////////////////////
319
320	var currenciesCalc = function(amount, curr1, curr2){
321		if (amount === '' || amount === '0') {
322			amount = '1';
323		}
324		amount = parseFloat(amount);
325		return amount / currencies[curr1] * currencies[curr2];
326	}
327
328	var currenciesChange = function(el1, el2, c1, c2){
329		setTimeout(function(){
330			var amount = $(el1).val();
331			var curr2 = currenciesCalc(amount, c1, c2);
332
333			curr2 = Math.round(curr2 * 100)/100;
334			$(el2).val(curr2);
335		}, 1)
336	}
337
338	// выпадающие списки с выбором валюты в конвертере валют
339	if (typeof currencies === 'undefined') {
340		return
341	} else{
342		$('#moneyDropList').arrDropList({
343		  defaultSelect: '<span>' + currencies.curr1 + '</span>',
344		  arrow: $('<i class="material-icons">&#xE5C5;</i>'),
345		  autocomplete: false,
346		  data: currencies.currs,
347		  
348		  callbackFunc: function(element, option){
349		  	currencies.curr1 = $(option).text();
350		  	currenciesChange('#currAmount1', '#currAmount2', currencies.curr1, currencies.curr2)
351		  }
352		});
353
354		$('#moneyDropList2').arrDropList({
355		  defaultSelect: '<span> ' + currencies.curr2 + ' </span>',
356		  arrow: $('<i class="material-icons">&#xE5C5;</i>'),
357		  autocomplete: false,
358		  data: currencies.currs,
359		  
360		  callbackFunc: function(element, option){
361		  	currencies.curr2 = $(option).text();
362		    currenciesChange('#currAmount1', '#currAmount2', currencies.curr1, currencies.curr2);
363		  }
364		});
365
366		// Значения при загрузки страницы
367		$('#currAmount1').val(1);
368		setTimeout(function(){
369			currenciesChange('#currAmount1', '#currAmount2', currencies.curr1, currencies.curr2);
370		}, 100)
371
372		$('#currAmount1').keyup(function(event) {
373			setTimeout(function(){
374				currenciesChange('#currAmount1', '#currAmount2', currencies.curr1, currencies.curr2);
375			}, 100)
376		});
377
378		$('#currAmount2').keyup(function(event) {
379			setTimeout(function(){
380				currenciesChange('#currAmount2', '#currAmount1', currencies.curr2, currencies.curr1)
381				// console.log(parseInt($('#currAmount2').val()));
382			}, 100)
383		});
384
385		$('#currAmount1, #currAmount2').floatsOnly();
386	};
387});
388
389
390$.fn.extend({
391	floatsOnly: function(){
392		this.on('keydown keypress keyup paste input', function(e){
393
394			var caretStart = this.selectionStart;
395			var caretEnd = this.selectionEnd;
396
397			$(this).val($(this).val().replace(',', '.'));
398			
399			while (($(this).val().split(".").length - 1) > 1) {
400				$(this).val($(this).val().slice(0, -1));
401				if (($(this).val().split(".").length - 1) > 1) {
402					continue;
403				} else {
404					this.setSelectionRange(caretStart, caretEnd);
405					return false;
406				}
407			}
408
409			$(this).val($(this).val().replace(/[^0-9.]/g, ''));
410			var int_num_allow = 19;
411			var float_num_allow = 2;
412
413			var iof = $(this).val().indexOf(".");
414
415			if (iof != -1) {
416				if ($(this).val().substring(0, iof).length > int_num_allow) {
417					$(this).val('');
418				}
419				$(this).val($(this).val().substring(0, iof + float_num_allow + 1));
420			} else {
421				$(this).val($(this).val().substring(0, int_num_allow));
422			}
423
424			this.setSelectionRange(caretStart, caretEnd);
425			return true;
426		});
427
428		this.on('change', function() {
429			if ($(this).val() === '' || $(this).val() === '0') {
430				$(this).val('1');
431			}
432		});
433		
434		return this;
435	}
436});
437
438
439//////////////////////////////////////////////////////////////////////
440// ОНЛАЙН ПЕРЕВОДЧИК
441//////////////////////////////////////////////////////////////////////
442
443var translater = (function(){
444	var lang, text, langs,
445		langsSort = [
446			{ link: 'ru', text: 'Русский' },
447			{ link: 'en', text: 'Английский' },
448			{ link: 'es', text: 'Испанский' },
449			{ link: 'de', text: 'Немецкий' },
450			{ link: 'fr', text: 'Французский' },
451			{ link: 'it', text: 'Итальянский' },
452			{ link: 'pt', text: 'Португальский' },
453			{ link: 'zh-CN', text: 'Китайский' },
454			{ link: 'tr', text: 'Турецкий' },
455			{ link: 'pl', text: 'Польский' }
456		];
457
458	return {
459		getLangs: function () {
460			this.langFrom = translateOptions.langFrom;
461			this.langTo = translateOptions.langTo;
462			this.initDroplists(langsSort);
463		},
464
465		initDroplists: function (langs) {
466
467			var that = this;
468
469			// Выпадающие списки переводчика
470			$('#translateLangFrom').arrDropList({
471			  defaultSelect: translateOptions.defaultSelectFrom,
472			  maxHeightList: 400,
473			  arrow: $('<i class="material-icons">&#xE5C5;</i>'),
474			  autocomplete: false,
475			  link: '/site/locationautocomplete.html?countryId=',
476			  countryId: 46,
477			  data: langs,
478			  
479			  callbackFunc: function(element, option){
480			   that.langFrom = $(option).attr('data-link');
481			   that.translate();
482			  }
483			});
484
485			$('#translateLangTo').arrDropList({
486			  defaultSelect: translateOptions.defaultSelectTo,
487			  maxHeightList: 400,
488			  arrow: $('<i class="material-icons">&#xE5C5;</i>'),
489			  autocomplete: false,
490			  link: '/site/locationautocomplete.html?countryId=',
491			  countryId: 46,
492			  data: langs,
493			  
494			  callbackFunc: function(element, option) {
495			  	that.langTo = $(option).attr('data-link');
496			  	that.translate();
497			  }
498			});
499		},
500
501		translate: function () {
502			text = $('#translateTextAreaFrom').val();
503			langFrom = this.langFrom;
504			langTo = this.langTo;
505
506			$.ajax({
507				url: 'https://api.mymemory.translated.net/get?q=' + encodeURIComponent(text) + '&langpair=' + langFrom + '|' + langTo,
508			})
509			.done(function(data) {
510				if (data && data.responseData && data.responseData.translatedText) { $('#translateTextAreaTo').val(data.responseData.translatedText) }
511			})
512		},
513
514		clear: function () {
515			$('#translateTextAreaFrom').val('');
516			$('#translateTextAreaTo').val('');
517			$('#translateTextAreaFrom').parent().removeClass('is-dirty');
518		},
519
520		invert: function (){
521			var c = this.langFrom,
522				c2 = $('#translateLangFrom').find('span').text()
523
524			this.langFrom = this.langTo;
525			this.langTo = c;
526
527			$('#translateLangFrom').find('span').text($('#translateLangTo').find('span').text());
528			$('#translateLangTo').find('span').text(c2)
529			
530			this.translate();
531		}
532	}
533}())
534
535if (typeof translateOptions !== 'undefined') {
536	translater.getLangs();
537	translater.langFrom = translateOptions.langFrom;
538	translater.langTo = translateOptions.langTo;
539
540	$('#translaterClear').hide();
541
542	$('#translateTextAreaFrom').on('keyup', function(event) {
543		translater.translate();
544
545		if ($('#translateTextAreaFrom').val() === '') {
546			$('#translaterClear').hide();
547		} else {
548			$('#translaterClear').show();
549		}
550	});
551
552	$('#translaterClear').click(function(event) {
553		event.preventDefault();
554		$(this).hide();
555
556		setTimeout(function(){
557			translater.clear();
558		}, 100)
559	});
560
561	$('#translaterInvert').click(function(event) {
562		event.preventDefault();
563		translater.invert();
564	});
565}
566
567
568////////////////////////////////////////////////////////////////////////////////
569// МЕСТО
570////////////////////////////////////////////////////////////////////////////////
571
572////////////////////////////////////////////////////////////
573// Слайдер фотографий
574////////////////////////////////////////////////////////////
575
576var placesSlider = (function () {
577
578	var wrapper = $('#city-page__place__slider__images-wrapper');
579		images = wrapper.children(),
580		imagesAmount = $(images).length - 1,
581		imageActive = parseInt($(wrapper).attr('data-active')),
582		slidesSources = [];
583		
584		$(wrapper).find('[data-source]').each(function(index, el) {
585			slidesSources.push($(el).attr('data-source'))
586		});
587
588	return {
589
590		prev: function () {
591			if (imageActive < imagesAmount) {
592				imageActive += 1;
593				this.update();
594			} else{
595				imageActive = 0;
596				this.update();
597			}
598		},
599
600		next: function () {
601			if (imageActive > 0) {
602				imageActive -= 1;
603				this.update();
604			} else{
605				imageActive = imagesAmount;
606				this.update();
607			}
608
609		},
610
611		update: function () {
612			$(images).hide();
613			$(wrapper).attr('data-active', imageActive);
614			$($(images)[imageActive]).show();
615			this.writeInfo();
616		},
617
618		writeInfo: function () {
619			$('#placeSliderCounterFotoCurrent').text(imageActive + 1);
620			$('#placeSliderCounterFotoAmount').text(imagesAmount + 1);
621			$('#placeSliderCounterFotoSource').text(slidesSources[imageActive]);
622		},
623
624		get slidesAmount() {
625			return slidesSources.length;
626		}
627	}
628
629}())
630
631
632placesSlider.update();
633
634if (placesSlider.slidesAmount === 1) {
635	$('.city-page__place__slider__next, .city-page__place__slider__prev').hide();
636};
637
638$('.city-page__place__slider__next').on('click', function () {
639	placesSlider.prev();
640});
641
642$('.city-page__place__slider__prev').on('click', function () {
643	placesSlider.next();
644});
645
646
647////////////////////////////////////////////////////////////
648// Скролинг до отзывов
649////////////////////////////////////////////////////////////
650
651
652// $("#placeReviews").click(function(){
653//     var selected = $('.reviews-h2');
654//     $.scrollTo(selected, 800);        
655//     return false;
656// }); 
657
658
659	
660$("#placeReviews").click(function() {
661
662	var elTop = $('#add-comment-block').offset().top,
663		elheight = parseInt($('#add-comment-block').css('height')),
664		winHeight = $(window).height(),
665		scrollTarget;
666
667	scrollTarget = elTop - winHeight/2 + elheight/2;
668
669	$('html, body').animate({
670		// scrollTop: $(".reviews-h2").offset().top
671		scrollTop: scrollTarget
672	}, 250);
673	return false;
674});
675
676
677
678
679
680
681
682////////////////////////////////////////////////////////////
683// Показывать/скрывать конвертер
684////////////////////////////////////////////////////////////
685
686
687$('#converterToggle').click(function(event) {
688	$('#ratePlacesPage').toggle();
689	// console.log(event.target);
690});
691
692$('#placesPageClose').click(function(event) {
693	$('#ratePlacesPage').hide();
694});
695
696$(document).click(function(event) {
697	if ($(event.target).closest("#ratePlacesPage").length === 0
698		&& $(event.target).closest("#converterToggle").length === 0){
699		// && $(event.target)[0].id !== 'converterToggle') {
700		$("#ratePlacesPage").hide();
701	}
702});
703
704
705
706////////////////////////////////////////////////////////////
707// Показывать/скрывать форму отправки сообщения об ошибке
708////////////////////////////////////////////////////////////
709
710
711$('#placesPageErrorBut').click(function(event) {
712	$('.places-page__error').toggle();
713});
714
715$('#placesPageErrorClose').click(function(event) {
716	$('.places-page__error').hide();
717});
718
719$(document).click(function(event) {
720	if ($(event.target).closest(".places-page__error").length === 0
721		// && $(event.target)[0].id !== 'placesPageErrorBut') {
722		&& $(event.target).closest("#placesPageErrorBut").length === 0) {
723		$(".places-page__error").hide();
724		// console.log(event.target);
725	}
726});
727
728$('#placesPageErrorText').click(function(event) {
729	if ($(this).val() === 'Где ошибка?') {
730		$(this).val('');
731		$(this).css('color', '#212121');
732	};
733});
734
735$('#placesPageErrorText').focusout(function(event) {
736	if ($(this).val() === '') {
737		$(this).val('Где ошибка?');
738		$(this).css('color', '#9d9d9d');
739	};
740});
741
742
743////////////////////////////////////////////////////////////
744// Галерея места
745////////////////////////////////////////////////////////////
746
747// $('.city-page__place__gallery .comments_comment_img').show();
748$('.city-page__tab__item').each(function(){
749	// console.log($(this).find('a'));
750	// console.log($(this).find('a'));
751})
752
753// console.log($('.city-page__tab__item').find('a'));
754
755
756////////////////
757
758$('.mdl-tabs__tab-bar a').click(function(event) {
759	setTimeout(function(){
760		autoSidebar.update();
761		$('.sidebar_floating-block').floatingBlock('update')
762		$('.city__sidebar__menu').show();
763		$('.city__sidebar__menu__DropList-wrapper').show();
764	}, 200)
765});

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.