PageSourceSearch

https://tangible-earth.com/assets_new/js/common.js?update=20241026003156

js tangible-earth.com collected 2026-09-30 14:36:15 UTC 22,021 bytes, 624 lines download raw bytes

1"use strict";
2
3// jqueryのインポート
4//import $ from '../libs/jquery/dist-module/jquery.module.min.js';
5
6// GSAPのコアモジュールをインポート
7//import { gsap } from '../libs/gsap/gsap-core.js';
8//import { CSSPlugin } from '../libs/gsap/CSSPlugin.js';
9//gsap.registerPlugin(CSSPlugin);
10
11// GSAPスクロールプラグイン
12//import { ScrollTrigger } from '../libs/gsap/ScrollTrigger.js';
13//gsap.registerPlugin(ScrollTrigger);
14
15
16//ページ読み込み時にURLにハッシュがついてるとスクロールする
17(() => {
18	// スクロール値取得
19	function scrollvalue(element) {
20		if(element) {
21			let val = element.getBoundingClientRect().top + window.pageYOffset;
22			/*switch(target.id){
23				case 'Wedding':
24					if(720 < document.documentElement.clientWidth) value += 142;
25					else value += 110;
26					break;
27				case 'Plan':
28					if(720 < document.documentElement.clientWidth) value += 30;
29					else value += 0;
30					break;
31			}*/
32			return val;
33		} else {
34			console.error('指定されたIDの要素が存在しません。');
35		}
36	}
37
38	if(location.hash) {
39		// スクロール処理
40		function func() {
41			setTimeout(function(){
42				if(location.hash.split('scroll-')[1]) {
43					const val = scrollvalue(document.getElementById(location.hash.split('scroll-')[1]));
44					window.scrollTo({ top: val, behavior: 'smooth' });
45					location.hash = '';
46				}
47			}, 400);
48		}
49
50		// ページ読み込み完了時に実行
51		if(document.readyState == 'complete') {
52			func();
53		}else{
54			window.addEventListener('load', function onload(){
55				func();
56				window.removeEventListener('load', onload);
57			});
58		}
59	}
60
61	// String.prototype.includes()のポリフィル
62	if (!String.prototype.includes) {
63		String.prototype.includes = function(search, start) {
64			'use strict';
65			if (typeof start !== 'number') {
66				start = 0;
67			}
68			
69			if (start + search.length > this.length) {
70				return false;
71			} else {
72				return this.indexOf(search, start) !== -1;
73			}
74		};
75	}
76})();
77
78// 画面を1画面分スクロールするとstate_screenheightscrollが付与
79(() => {
80	const inview = document.createElement('div');
81	inview.style.position = 'absolute';
82	inview.style.top = '200vh';
83	inview.style.bottom = '0';
84	inview.style.pointerEvents = 'none';
85	inview.style.width = '0';
86	document.body.appendChild(inview);
87
88	// 表示時の処理
89	function enter() {
90		document.documentElement.classList.add('state_screenheightscroll');
91	}
92
93	// 非表示時の処理
94	function leave() {
95		document.documentElement.classList.remove('state_screenheightscroll');
96	}
97
98	// IntersectionObserverでinviewが見えたら処理(表示/非表示で処理)
99	let first = true;
100	let triggered = false;
101	(new IntersectionObserver(
102		(entries, observer) => {
103			let flg = false;
104			for (let entry of entries) {
105				if (entry.isIntersecting) {
106					flg = true;
107				}
108			}
109		  
110			if (flg && (!triggered || first)) {
111				triggered = true;
112				enter();
113			} else if (!flg && (triggered || first)) {
114				triggered = false;
115				leave();
116			}
117			
118			first = false;
119		}
120	)).observe(inview);
121})();
122
123// 画面を少しだけスクロールするとstate_fewscrollが付与
124(() => {
125	const inview = document.createElement('div');
126	inview.style.position = 'absolute';
127	inview.style.top = '105vh';
128	inview.style.bottom = '0';
129	inview.style.pointerEvents = 'none';
130	inview.style.width = '0';
131	document.body.appendChild(inview);
132
133	// 表示時の処理
134	function enter() {
135		document.documentElement.classList.add('state_fewscroll');
136	}
137
138	// 非表示時の処理
139	function leave() {
140		document.documentElement.classList.remove('state_fewscroll');
141	}
142
143	// IntersectionObserverでinviewが見えたら処理(表示/非表示で処理)
144	let first = true;
145	let triggered = false;
146	(new IntersectionObserver(
147		(entries, observer) => {
148			let flg = false;
149			for (let entry of entries) {
150				if (entry.isIntersecting) {
151					flg = true;
152				}
153			}
154		  
155			if (flg && (!triggered || first)) {
156				triggered = true;
157				enter();
158			} else if (!flg && (triggered || first)) {
159				triggered = false;
160				leave();
161			}
162			
163			first = false;
164		}
165	)).observe(inview);
166})();
167
168//SP メニュー
169(() => {
170	const btn = document.getElementById('SPMenu');
171	const menu = document.getElementById('SPMenuArea');
172
173	if(btn && menu) {
174		function clickHandler() {
175			if(document.documentElement.classList.contains('spmenuopen')) {
176				document.documentElement.classList.remove('spmenuopen');
177			}else{
178				document.documentElement.classList.add('spmenuopen');
179			}
180		}
181		btn.addEventListener('click', clickHandler);
182
183		const sublinks = menu.querySelectorAll('a');
184		sublinks.forEach(link => {
185			link.addEventListener('click', clickHandler);
186		});
187
188		//ページ非表示にメニューを閉じる
189		window.addEventListener('pageshow', function(){
190			document.documentElement.classList.remove('spmenuopen');
191		});
192	}
193})();
194
195
196//data-pararax01
197(function() {
198	var init = function(){
199		var targets = document.querySelectorAll('[data-pararax01]:not([data-pararax01-ok])');
200		var targetDataAttributes = [
201			'data-pararax01-opacity01',
202			'data-pararax01-opacity01b',
203			'data-pararax01-opacity02',
204			'data-pararax01-opacity03',
205			'data-pararax01-opacity04',
206			'data-pararax01-opacity05',
207			'data-pararax01-opacity06',
208			'data-pararax01-opacity07',
209			'data-pararax01-opacity08',
210			'data-pararax01-opacity09',
211			'data-pararax01-opacity10',
212			'data-pararax01-opacity11',
213			'data-pararax01-opacity12',
214			'data-pararax01-photo01a',
215			'data-pararax01-photo01b',
216			'data-pararax01-photo02a',
217			'data-pararax01-photo02b',
218			'data-pararax01-photo03a',
219			'data-pararax01-photo03b',
220			'data-pararax01-photo03c',
221			'data-pararax01-photo04a',
222			'data-pararax01-photo04b',
223			'data-pararax01-setclass',
224		];
225
226		//別のアニメーション
227		var animation = function(element){
228			element.parentElement.style.perspective = '1000px';
229			setTimeout(function(){
230				element.parentElement.style.perspective = null;
231			}, 1200);
232			if(element.hasAttribute('data-pararax01-photo01a') || element.hasAttribute('data-pararax01-photo01b')) {//写真をクリップパスで演出
233				var baseSize;
234				if(element.hasAttribute('data-pararax01-photo01a')) {
235					baseSize = 50;
236				} else if(element.hasAttribute('data-pararax01-photo01b')) {
237					baseSize = 28;
238				}
239				var flg2 = false;
240				if(document.documentElement.hasClass('ie') || document.documentElement.hasClass('edge') || document.documentElement.hasClass('safari')) flg2 = true;
241				var random = function(dist){
242					if(Math.random()<0.5) {
243						return Math.random()*dist;
244					} else {
245						return -Math.random()*dist;
246					}
247				};
248				
249				var w = element.clientWidth;
250				var h = element.clientHeight;
251				var size_w_length = Math.floor(w / baseSize);
252				var size_w = baseSize + (w % baseSize) / size_w_length;
253				var size_h_length = Math.floor(h / baseSize);
254				var size_h = baseSize + (h % baseSize) / size_h_length;
255				
256				var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
257				svg.setAttributeNS(null, 'width', w);
258				svg.setAttributeNS(null, 'height', h);
259				svg.setAttributeNS(null, 'viewBox', '0 0 '+w+' '+h);
260				var defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs');
261				var clipPath = document.createElementNS('http://www.w3.org/2000/svg', 'clipPath');
262				clipPath.id = Math.floor(Math.random()*1000000000);
263				for(var x = 0; x < size_w_length; x++) {
264					for(var y = 0; y < size_h_length; y++) {
265						var rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
266						rect.setAttributeNS(null, 'x', x*size_w);
267						rect.setAttributeNS(null, 'y', y*size_h);
268						rect.setAttributeNS(null, 'data-x', x);
269						rect.setAttributeNS(null, 'data-y', y);
270						rect.setAttributeNS(null, 'width', size_w+1);
271						rect.setAttributeNS(null, 'height', size_h+1);
272						if(flg2) {
273							svg.appendChild(rect);
274						} else {
275							clipPath.appendChild(rect);
276						}
277					}
278				}
279				defs.appendChild(clipPath);
280				svg.appendChild(defs);
281				element.appendChild(svg);
282				if(flg2) {
283				} else {
284					element.style.clipPath = element.style.webkitClipPath = 'url(#'+clipPath.id+')';
285				}
286
287				var duration;
288				if(element.hasAttribute('data-pararax01-photo01a')) {
289					duration = 1.0;
290				} else if(element.hasAttribute('data-pararax01-photo01b')) {
291					duration = 1.2;
292				}
293				var rects = element.querySelectorAll('rect');
294				var x,y;
295				var flg2 = false;
296				var dif = 0.024;
297				if(document.documentElement.hasClass('ie') || document.documentElement.hasClass('edge') || document.documentElement.hasClass('safari')) flg2 = true;
298				if(flg2) {
299					for(var h = 0; h < rects.length; h++) {
300						x = rects[h].getAttributeNS(null, 'data-x');
301						y = rects[h].getAttributeNS(null, 'data-y');
302						gsap.to(rects[h], {scale:0, transformOrigin:'right top', ease:'power3.out', duration:duration, delay:(y*dif)+(x*dif)+0.4});
303					}
304				} else {
305					for(var h = 0; h < rects.length; h++) {
306						gsap.set(rects[h], {scale:0});
307						x = rects[h].getAttributeNS(null, 'data-x');
308						y = rects[h].getAttributeNS(null, 'data-y');
309						gsap.to(rects[h], {scale:1, transformOrigin:'left top', duration:duration, delay:(y*dif)+(x*dif)});
310					}
311				}
312
313				if(flg2) {
314					gsap.set({}, {delay:duration+(y*dif)+(x*dif), onComplete:function(){
315						element.style.transform = 'rotate(0.03deg)';
316					}});
317				} else {
318					gsap.set({}, {delay:duration+(y*dif)+(x*dif), onComplete:function(){
319						element.style.clipPath = element.style.webkitClipPath = null;
320					}});
321				}
322				gsap.set({}, {delay:duration+(y*dif)+(x*dif), onComplete:function(){
323					element.removeChild(svg);
324				}});
325
326				element.addClass('init');
327			}
328
329			if(element.hasAttribute('data-pararax01-photo02a') || element.hasAttribute('data-pararax01-photo02b') || element.hasAttribute('data-pararax01-photo03a') || element.hasAttribute('data-pararax01-photo03b') || element.hasAttribute('data-pararax01-photo03c')) {//写真をクリップパスで演出
330				var baseSize;
331				var flg2 = false;
332				if(document.documentElement.hasClass('ie') || document.documentElement.hasClass('edge') || document.documentElement.hasClass('safari')) flg2 = true;
333				if(flg2) {
334					baseSize = 20;
335				} else {
336					baseSize = 40;
337				}
338				var random = function(dist){
339					if(Math.random()<0.5) {
340						return Math.random()*dist;
341					} else {
342						return -Math.random()*dist;
343					}
344				};
345				
346				var w = element.clientWidth;
347				var h = element.clientHeight;
348				var size_w_length = Math.floor(w / baseSize);
349				var size_w = baseSize + (w % baseSize) / size_w_length;
350				var size_h_length = Math.floor(h / baseSize);
351				var size_h = baseSize + (h % baseSize) / size_h_length;
352				
353				var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
354				svg.setAttributeNS(null, 'width', w);
355				svg.setAttributeNS(null, 'height', h);
356				svg.setAttributeNS(null, 'viewBox', '0 0 '+w+' '+h);
357				var defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs');
358				var clipPath = document.createElementNS('http://www.w3.org/2000/svg', 'clipPath');
359				clipPath.id = Math.floor(Math.random()*1000000000);
360				if(element.hasAttribute('data-pararax01-photo02a') || element.hasAttribute('data-pararax01-photo03a')) {
361					for(var x = 0; x < size_w_length; x++) {
362						var rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
363						rect.setAttributeNS(null, 'x', x*size_w);
364						rect.setAttributeNS(null, 'y', 0);
365						rect.setAttributeNS(null, 'data-x', x);
366						rect.setAttributeNS(null, 'data-y', 0);
367						rect.setAttributeNS(null, 'width', size_w+1);
368						rect.setAttributeNS(null, 'height', h);
369						if(flg2) {
370							svg.appendChild(rect);
371						} else {
372							clipPath.appendChild(rect);
373						}
374					}
375				} else if(element.hasAttribute('data-pararax01-photo02b') || element.hasAttribute('data-pararax01-photo03b') || element.hasAttribute('data-pararax01-photo03c')) {
376					for(var y = 0; y < size_h_length; y++) {
377						var rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
378						rect.setAttributeNS(null, 'x', 0);
379						rect.setAttributeNS(null, 'y', y*size_h);
380						rect.setAttributeNS(null, 'data-x', 0);
381						rect.setAttributeNS(null, 'data-y', y);
382						rect.setAttributeNS(null, 'width', w);
383						rect.setAttributeNS(null, 'height', size_h+1);
384						if(flg2) {
385							svg.appendChild(rect);
386						} else {
387							clipPath.appendChild(rect);
388						}
389					}
390				}
391				defs.appendChild(clipPath);
392				svg.appendChild(defs);
393				element.appendChild(svg);
394				if(flg2) {
395				} else {
396					element.style.clipPath = element.style.webkitClipPath = 'url(#'+clipPath.id+')';
397				}
398
399				var duration = 1.0;
400				var rects = element.querySelectorAll('rect');
401				var x,y;
402				var flg2 = false;
403				var dif = 0.1;
404				if(document.documentElement.hasClass('ie') || document.documentElement.hasClass('edge') || document.documentElement.hasClass('safari')) flg2 = true;
405				if(flg2) {
406					for(var h = 0; h < rects.length; h++) {
407						if(element.hasAttribute('data-pararax01-photo02a')) {
408							gsap.to(rects[h], {scaleX:0, transformOrigin:'left top', duration:duration, delay:h*dif});
409						} else if(element.hasAttribute('data-pararax01-photo02b')) {
410							gsap.to(rects[h], {scaleY:0, transformOrigin:'left top', duration:duration, delay:h*dif});
411						} else if(element.hasAttribute('data-pararax01-photo03a')) {
412							gsap.to(rects[h], {scaleY:0, transformOrigin:'left top', duration:duration, delay:h*dif});
413						} else if(element.hasAttribute('data-pararax01-photo03b')) {
414							gsap.to(rects[h], {scaleX:0, transformOrigin:'left top', duration:duration, delay:h*dif});
415						} else if(element.hasAttribute('data-pararax01-photo03c')) {
416							gsap.to(rects[h], {scaleX:0, transformOrigin:'right top', duration:duration, delay:h*dif});
417						}
418					}
419				} else {
420					for(var h = 0; h < rects.length; h++) {
421						if(element.hasAttribute('data-pararax01-photo02a')) {
422							gsap.set(rects[h], {scaleX:0, transformOrigin:'left top'});
423							gsap.to(rects[h], {scaleX:1, transformOrigin:'left top', duration:duration, delay:h*dif});
424						} else if(element.hasAttribute('data-pararax01-photo02b')) {
425							gsap.set(rects[h], {scaleY:0, transformOrigin:'left top'});
426							gsap.to(rects[h], {scaleY:1, transformOrigin:'left top', duration:duration, delay:h*dif});
427						} else if(element.hasAttribute('data-pararax01-photo03a')) {
428							gsap.set(rects[h], {scaleY:0, transformOrigin:'left top'});
429							gsap.to(rects[h], {scaleY:1, transformOrigin:'left top', duration:duration, delay:h*dif});
430						} else if(element.hasAttribute('data-pararax01-photo03b')) {
431							gsap.set(rects[h], {scaleX:0, transformOrigin:'left top'});
432							gsap.to(rects[h], {scaleX:1, transformOrigin:'left top', duration:duration, delay:h*dif});
433						} else if(element.hasAttribute('data-pararax01-photo03c')) {
434							gsap.set(rects[h], {scaleX:0, transformOrigin:'right top'});
435							gsap.to(rects[h], {scaleX:1, transformOrigin:'right top', duration:duration, delay:h*dif});
436						}
437					}
438				}
439
440				if(flg2) {
441					gsap.set({}, {delay:duration+(rects.length*dif), onComplete:function(){
442						element.style.transform = 'rotate(0.03deg)';
443					}});
444				} else {
445					gsap.set({}, {delay:duration+(rects.length*dif), onComplete:function(){
446						element.style.clipPath = element.style.webkitClipPath = null;
447					}});
448				}
449				gsap.set({}, {delay:duration+(rects.length*dif), onComplete:function(){
450					element.removeChild(svg);
451				}});
452
453				element.addClass('init');
454			}
455
456			if(element.hasAttribute('data-pararax01-photo04a') || element.hasAttribute('data-pararax01-photo04b')) {//写真をクリップパスで演出
457				var baseSize;
458				var flg2 = false;
459				if(document.documentElement.hasClass('ie') || document.documentElement.hasClass('edge') || document.documentElement.hasClass('safari')) flg2 = true;
460				if(flg2) {
461					baseSize = 40;
462				} else {
463					baseSize = 80;
464				}
465				var random = function(dist){
466					if(Math.random()<0.5) {
467						return Math.random()*dist;
468					} else {
469						return -Math.random()*dist;
470					}
471				};
472				
473				var w = element.clientWidth;
474				var h = element.clientHeight;
475				var size_w_length = Math.floor(w / baseSize);
476				var size_w = baseSize + (w % baseSize) / size_w_length;
477				var size_h_length = Math.floor(h / baseSize);
478				var size_h = baseSize + (h % baseSize) / size_h_length;
479				var main_size_length;
480				var main_size;
481				if(size_w_length < size_h_length) {
482					main_size_length = size_h_length;
483					main_size = size_h;
484				} else {
485					main_size_length = size_w_length;
486					main_size = size_w;
487				}
488				
489				var svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
490				svg.setAttributeNS(null, 'width', w);
491				svg.setAttributeNS(null, 'height', h);
492				svg.setAttributeNS(null, 'viewBox', '0 0 '+w+' '+h);
493				var defs = document.createElementNS('http://www.w3.org/2000/svg', 'defs');
494				var clipPath = document.createElementNS('http://www.w3.org/2000/svg', 'clipPath');
495				clipPath.id = Math.floor(Math.random()*1000000000);
496				for(var h = -20; h < main_size_length+20; h++) {
497					var rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
498					rect.setAttributeNS(null, 'x', -w*0.5);
499					rect.setAttributeNS(null, 'y', h*main_size);
500					rect.setAttributeNS(null, 'data-x', 0);
501					rect.setAttributeNS(null, 'data-y', h);
502					rect.setAttributeNS(null, 'width', w*2.0);
503					rect.setAttributeNS(null, 'height', main_size+1);
504					if(flg2) {
505						svg.appendChild(rect);
506					} else {
507						clipPath.appendChild(rect);
508					}
509				}
510				defs.appendChild(clipPath);
511				svg.appendChild(defs);
512				element.appendChild(svg);
513				if(flg2) {
514				} else {
515					element.style.clipPath = element.style.webkitClipPath = 'url(#'+clipPath.id+')';
516				}
517
518				var duration = 1.4;
519				var rects = element.querySelectorAll('rect');
520				var x,y;
521				var flg2 = false;
522				var dif = 0.06;
523				if(document.documentElement.hasClass('ie') || document.documentElement.hasClass('edge') || document.documentElement.hasClass('safari')) flg2 = true;
524				if(flg2) {
525					for(var h = 0; h < rects.length; h++) {
526						if(element.hasAttribute('data-pararax01-photo04a')) {
527							gsap.set(rects[h], {scaleY:1, rotate:45, transformOrigin:'center top'});
528							gsap.to(rects[h], {scaleY:0, transformOrigin:'center top', duration:duration, delay:h*dif});
529						} else if(element.hasAttribute('data-pararax01-photo04b')) {
530							gsap.set(rects[h], {scaleY:1, rotate:-45, transformOrigin:'center top'});
531							gsap.to(rects[h], {scaleY:0, transformOrigin:'center top', duration:duration, delay:h*dif});
532						}
533					}
534				} else {
535					for(var h = 0; h < rects.length; h++) {
536						if(element.hasAttribute('data-pararax01-photo04a')) {
537							gsap.set(rects[h], {scaleY:0, rotate:45, transformOrigin:'center top'});
538							gsap.to(rects[h], {scaleY:1, transformOrigin:'center top', duration:duration, delay:h*dif});
539						} else if(element.hasAttribute('data-pararax01-photo04b')) {
540							gsap.set(rects[h], {scaleY:0, rotate:-45, transformOrigin:'center top'});
541							gsap.to(rects[h], {scaleY:1, transformOrigin:'center top', duration:duration, delay:h*dif});
542						}
543					}
544				}
545
546				if(flg2) {
547					gsap.set({}, {delay:duration+(rects.length*dif)-1, onComplete:function(){
548						element.style.transform = 'rotate(0.03deg)';
549					}});
550				} else {
551					gsap.set({}, {delay:duration+(rects.length*dif), onComplete:function(){
552						element.style.clipPath = element.style.webkitClipPath = null;
553					}});
554				}
555				gsap.set({}, {delay:duration+(rects.length*dif)-1, onComplete:function(){
556					element.removeChild(svg);
557				}});
558				
559				element.classList.add('init');
560			}
561
562			if(element.classList.contains('pararax01_pattern01')) {//下線のアニメーション専用
563				for(var aaaa = 0; aaaa < element.querySelectorAll('.pararax01_pattern01_underline').length; aaaa++) {
564					element.querySelectorAll('.pararax01_pattern01_underline')[aaaa].style.transitionDuration = element.querySelectorAll('.pararax01_pattern01_underline')[aaaa].innerText.length*0.04+'s';
565				}
566			}
567		};
568
569		for (var i = 0; i < targets.length; ++i) {
570			(function(target) {
571				//パララックス済み
572				target.setAttribute('data-pararax01-ok', '');
573
574				//inview
575				var inviewElem = document.createElement('div');
576				inviewElem.setAttribute('data-pararax01-inview', '');
577				target.appendChild(inviewElem);
578				
579				(new IntersectionObserver(
580					(entries, observer) => {
581						entries.forEach(entry => {
582							if (entry.isIntersecting) {
583								
584								var allDelay = 0;
585								for (var h = 0; h < targetDataAttributes.length; h++) {
586									(function(targetDataAttribute) {
587										//現在の要素
588										if(target.getAttribute(targetDataAttribute)) {
589											if(target.closest('[data-pararax01]')) {
590												setTimeout(function(){
591													animation(target);
592													target.classList.add('active');
593												}, allDelay + ((target.getAttribute(targetDataAttribute)?target.getAttribute(targetDataAttribute):0)*1000));
594											}
595										}
596
597										//子の要素
598										var elements = target.querySelectorAll('[' + targetDataAttribute + ']');
599										if(elements.length) {
600											for (var j = 0; j < elements.length; j++) {
601												(function(element) {
602													if(element.closest('[data-pararax01]') == target) {
603														setTimeout(function(){
604															animation(element);
605															element.classList.add('active');
606														}, allDelay + ((element.getAttribute(targetDataAttribute)?element.getAttribute(targetDataAttribute):0)*1000));
607													}
608												}(elements[j]));
609											}
610										}
611									}(targetDataAttributes[h]));
612								}
613
614								// 一度処理を実行したら監視を解除
615								observer.unobserve(entry.target);
616							}
617						});
618					}
619				)).observe(inviewElem);
620			}(targets[i]));
621		}
622	};
623	init();
624}());

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.