PageSourceSearch

https://with-house.jp/js/about.js

js with-house.jp collected 2026-10-06 07:59:02 UTC 24,561 bytes, 807 lines download raw bytes

1/*
2・2023 フルリニューアル改修版
3・ロンド標準形式にて対応
4*/
5
6Common.do(function(){
7	//↓↓↓↓↓ここへ記述して下さい↓↓↓↓↓
8	//フェードスライダモジュール
9	(function(){
10		var slideModules = document.querySelectorAll('[data-slidephotofade]:not([data-slidephotofade-ok])');
11		for(var i = 0; i < slideModules.length; i++) {
12			(function(element){
13				element.setAttribute('data-slidephotofade-ok', '');
14				var setSlide = function(){
15					//最低限の設定
16					var slidearea = element.querySelector('.slidephotofade_content'),
17						slides = element.querySelectorAll('.slidephotofade_link'),
18						length = slides.length-1,
19						now = 0;
20
21					//スライドの速さ
22					var speed = 1.0,
23						ease = 'cubic-bezier(0.445, 0.050, 0.550, 0.950)',
24						transitionValue = 'opacity ' + speed + 's ' + ease + ', -webkit-clip-path ' + speed + 's ' + ease + ', clip-path ' + speed + 's ' + ease;
25
26					//前へ・次へボタン
27					var prev = element.querySelector('.prev'),
28						next = element.querySelector('.next');
29
30					//自動切換え
31					var loop,
32						loopDur = 6000;
33
34					//ページング
35					var pager = element.querySelector('.slidephotofade_pager'),
36						pagers;
37
38					var imgpager = element.querySelector('.slidephotofade_imgpager'),
39						imgpagers = element.querySelectorAll('.slidephotofade_imgpager_btn');
40
41					//カウンター
42					var counter = element.querySelector('.slidephotofade_count'),
43						counterTotal,
44						counterNow,
45						counterZeroPadding;
46
47					//ループをセット
48					var setLoop = function() {
49						clearInterval(loop);
50						loop = setInterval(loopFunc, loopDur);
51					};
52
53					//ループを解除
54					var removeLoop = function() {
55						clearInterval(loop);
56					};
57
58					(function(i){
59						//スライドに番号を付与
60						for(i = 0; i <= length; i = 0|i+1) {
61							slides[i].setAttribute('data-slide-num', i);
62							slides[i].style.transition = transitionValue;
63						}
64
65						//ページングを生成
66						if(pager) {
67							for(i = 0; i <= length; i = 0|i+1) {
68								var li = document.createElement('button');
69								li.setAttribute('data-slide-num', i);
70								li.addEventListener('click', function(e){
71									var value = ~~e.currentTarget.getAttribute('data-slide-num');
72									var arrow = value < now?'prev':'next';
73									changeFunc(value, arrow);
74
75									//ループ
76									setLoop();
77								});
78								pager.appendChild(li);
79							}
80							pagers = pager.children;
81						}
82
83						//画像のページング
84						if(imgpager) {
85							for(i = 0; i <= length; i = 0|i+1) {
86								var li = imgpagers[i];
87								li.setAttribute('data-slide-num', i);
88								li.addEventListener('click', function(e){
89									//loop
90									setLoop();
91									var arrow = 'next';
92									if(~~e.currentTarget.getAttribute('data-slide-num') < now) arrow = 'prev';
93									changeFunc(~~e.currentTarget.getAttribute('data-slide-num'), arrow);
94								});
95							}
96						}
97					})();
98
99					if(counter) {
100						counterNow = element.querySelector('.slidephotofade_count_now');
101						counterTotal = element.querySelector('.slidephotofade_count_total');
102						if(counterTotal && counterNow) {
103							if(slides.length < 100) {
104								counterZeroPadding = function(val) {
105									return ('00' + val).slice(-2);
106								}
107							}else{
108								counterZeroPadding = function(val) {
109									return ('000' + val).slice(-3);
110								}
111							}
112							counterNow.innerText = counterZeroPadding(1);
113							counterTotal.innerText = counterZeroPadding(length+1);
114						}else{
115							if(!counterTotal) {
116								console.error('.slidephotofade_count_now という要素が無い');
117							}
118							if(!counterNow) {
119								console.error('.slidephotofade_count_total という要素が無い');
120							}
121						}
122					}
123
124					//prev
125					var prevFunc = function(){
126						var val = -1+now;
127						if(val < 0) val = length;
128						changeFunc(val, 'prev');
129
130						//ループ
131						setLoop();
132					};
133					if(prev) prev.addEventListener('click', prevFunc);
134
135					//next
136					var nextFunc = function(){
137						var val = +1+now;
138						if(length < val) val = 0;
139						changeFunc(val, 'next');
140
141						//ループ
142						setLoop();
143					};
144					if(next) next.addEventListener('click', nextFunc);
145
146					//スライドエリアが見えたときに自動切換え・フリックの処理を有効にする
147					Common.inview(element, function(){
148						setLoop();
149					}, function(){
150						removeLoop();
151					});
152
153					//ループ処理
154					var loopFunc = function(){
155						nextFunc();
156					};
157
158					//スライドの処理
159					var timeoutID01,
160						timeoutID02,
161						timeoutID03,
162						timeoutID04;
163					var changeFunc = function(num, arrow, target, targetP){
164						//フリック時のスピード調整
165						var time = speed*1000;
166
167						//スライド一時無効化
168						element.style.pointerEvents = 'none';
169
170						//スライド実行
171						for(var i = 0; i <= length; i++) {
172							if(now != i || num != i) {
173								slides[i].style.zIndex = 1;
174							}
175						}
176						slides[now].style.zIndex = 2;
177						slides[num].style.zIndex = 3;
178						clearTimeout(timeoutID01);
179						clearTimeout(timeoutID02);
180						clearTimeout(timeoutID03);
181						clearTimeout(timeoutID04);
182						timeoutID01 = setTimeout(function(){
183							slides[num].addClass('active');
184							timeoutID02 = setTimeout(function(){
185								slides.addClass('disableTrs');
186								timeoutID03 = setTimeout(function(){
187									slides.removeClass('active');
188									slides[num].addClass('active');
189									timeoutID04 = setTimeout(function(){
190										slides.removeClass('disableTrs');
191
192										//スライド一時無効化
193										element.style.pointerEvents = 'auto';
194									}, 33);
195								}, 33);
196							}, time);
197						}, 33);
198
199						//pager 切り替え
200						if(pager) {
201							target = pagers[num];
202							pagers.removeClass('active');
203							target.addClass('active');
204						}
205						//pager 切り替え
206						if(imgpager) {
207							target = imgpagers[num];
208							imgpagers.removeClass('active');
209							target.addClass('active');
210						}
211
212						//カウンター
213						if(counter) {
214							counterNow.innerText = counterZeroPadding(num + 1);
215						}
216
217						//値保存
218						now = ~~num;
219					};
220					changeFunc(0);
221				};
222				var loadfile = element.querySelector('[data-lf]');
223				if(loadfile) {
224					var loadfilearea = loadfile.closest('[data-lf-area]');
225					if(~~(loadfilearea.getAttribute('data-lf-area')) == 1) {
226						setSlide();
227					}else{
228						loadfilearea.addEventListener('loadfileComplete', function loadfileComplete(){
229							setSlide();
230							this.removeEventListener('loadfileComplete', loadfileComplete);
231						});
232					}
233				}else{
234					setSlide();
235				}
236			}(slideModules[i]));
237		}
238	}());
239
240
241	//スライダーモジュール
242	(function(){
243		var inview = ('IntersectionObserver' in window)?
244			function(target, enter, leave, rootMargin){
245				var targets;
246				if(typeof target == 'string') {
247					targets = document.querySelectorAll(target);
248				}else if(target.length){
249					targets = target;
250				}else{
251					targets = [];
252					targets.push(target);
253				}
254				for(var i = 0; i < targets.length; i++) {
255					(function(target) {
256						if(leave) {
257							var first = true;
258							var triggered = false;
259							(new IntersectionObserver(
260								function(entries, observer){
261									var flg = false;
262									for(var h = 0; h < entries.length; h++) {
263										if(entries[h].isIntersecting) {//見えた
264											flg = true;
265										}
266									}
267									if(flg === true && (triggered === false || first)) {
268										triggered = true;
269										enter(entries[0].target);
270									} else if(flg === false && (triggered === true || first)) {
271										triggered = false;
272										leave(entries[0].target);
273									}
274									first = false;
275								}
276								,
277								{threshold: [0.00, 0.25, 0.5, 0.75, 1.00], rootMargin:(rootMargin == '0px' || rootMargin == '0' || rootMargin === null || rootMargin === undefined)?'0px':Common.pxcelValueFromObject(rootMargin)}
278							)).observe(target);
279						} else {
280							(new IntersectionObserver(
281								function(entries, observer){
282									var flg = false;
283									for(var h = 0; h < entries.length; h++) {
284										if(entries[h].isIntersecting) {//見えた
285											flg = true;
286										}
287									}
288									if(flg === true) {
289										enter(entries[0].target);
290										observer.disconnect();
291									}
292								}
293								,
294								{threshold: [0.00, 0.25, 0.5, 0.75, 1.00], rootMargin:(rootMargin == '0px' || rootMargin == '0' || rootMargin === null || rootMargin === undefined)?'0px':Common.pxcelValueFromObject(rootMargin)}
295							)).observe(target);
296						}
297					}(targets[i]));
298				}
299			}
300			:
301			function(target, enter, leave){
302				var targets;
303				if(typeof target == 'string') {
304					targets = document.querySelectorAll(target);
305				}else if(target.length){
306					targets = target;
307				}else{
308					targets = [];
309					targets.push(target);
310				}
311				for(var i = 0; i < targets.length; i++) {
312					(function(child) {
313						var fromS,toS;
314						//resize
315						var resize = function(){
316							fromS =  window.pageYOffset + child.getBoundingClientRect().top - document.documentElement.clientHeight;
317							toS =  child.clientHeight + fromS + document.documentElement.clientHeight;
318						};
319						window.addEventListener('resize', resize);
320						resize();
321
322						//scroll
323						var enterFlg = false;
324						var scroll = function(){
325							var s = window.pageYOffset;
326							if(fromS < s && s < toS) {//見えたとき
327								enter(child);
328								enterFlg = true;
329								if(!leave) {//一度だけの処理の設定のとき
330									window.removeEventListener('resize', resize);
331									window.removeEventListener('scroll', scroll);
332								}
333							}else{//見えないとき
334								if(enterFlg) {//見えてる状態だったとき
335									leave(child);
336									enterFlg = false;
337								}
338							}
339						};
340						window.addEventListener('scroll', scroll);
341						scroll();
342					}(targets[i]));
343				}
344			}
345		;
346
347		var slideModules = document.querySelectorAll('[data-slidearea01]:not([data-slidearea01-ok])');
348		for(var i = 0; i < slideModules.length; i++) {
349			(function(element){
350				element.setAttribute('data-slidearea01-ok', '');
351				var setSlide = function(){
352					//最低限の設定
353					var slidearea = element.querySelector('.slidearea01_content'),
354						slides = element.querySelectorAll('.slidearea01_link'),
355						length = slides.length-1,
356						now = -1,
357						slideDistByDammy = 3,
358						slidesWithDammy;
359
360					//スライドの速さ
361					var speed = 0.4,
362						transitionValue = speed + 's cubic-bezier(0.445, 0.050, 0.550, 0.950)',
363						transitionValueByFlick = speed + 's cubic-bezier(0.165, 0.840, 0.440, 1.000)';
364					setTimeout(function(){
365						slidearea.style.WebkitTransition = transitionValue;
366						slidearea.style.transition = transitionValue;
367					}, 1);
368
369					//前へ・次へボタン
370					var prev = element.querySelector('.prev'),
371						next = element.querySelector('.next');
372
373					//自動切換え
374					var loop,
375						loopDur = 6000;
376
377					//ページング
378					var pager = element.querySelector('.slidearea01_pager'),
379						pagers;
380
381					var imgpager = element.querySelector('.slidearea01_imgpager'),
382						imgpagers = element.querySelectorAll('.slidearea01_imgpager_btn');
383
384					//カウンター
385					var counter = element.querySelector('.slidearea01_count'),
386						counterTotal,
387						counterNow,
388						counterZeroPadding;
389
390					//フリックで切り替え
391					var flickFlg = false,
392						flickArea = element.querySelector('.slidearea01_wrapin'),
393						flickPosXBefore = 0,
394						flickPosXNow = 0,
395						flickPosXFirst = 0,
396						flickPosYBefore = 0,
397						flickPosYNow = 0,
398						flickPosYFirst = 0,
399						flickArrow,
400						flickLoop,
401						flickAnimTimeFlg = false;
402
403					//ループ処理
404					var loopFunc = function(){
405						if(!element.hasAttribute('data-slidearea01-no-autoslide')) nextFunc();
406					}
407
408					//ループをセット
409					var setLoop = function() {
410						clearInterval(loop);
411						loop = setInterval(loopFunc, loopDur);
412					};
413
414					//ループを解除
415					var removeLoop = function() {
416						clearInterval(loop);
417					};
418
419					//flick 常時処理
420					var flickLoopFunc = function(){
421						if(flickFlg) {
422							if(Math.abs(flickPosXNow-flickPosXBefore) > 10){//タッチ開始位置から一定の距離の場合
423								if(flickPosXNow-flickPosXBefore < 0){//マイナスのとき
424									flickArrow = 'next';
425								}else{
426									flickArrow = 'prev';
427								}
428							}else{
429								flickArrow = 'none';
430							}
431							flickPosXBefore = flickPosXNow;
432						}
433					};
434					var flickPosSetFunc = function(){
435						slidearea.style.left = (-100*(now+slideDistByDammy))-((flickPosXFirst-flickPosXNow)/flickArea.offsetWidth)*100+'%';
436					};
437					var flickPosResetFunc = function(){
438						slidearea.style.left = -100*(now+slideDistByDammy)+'%';
439					};
440
441					//フリックのループをセット
442					var setFlickLoop;
443					//フリックのループを解除
444					var removeFlickLoop;
445					var flickLoopFuncByRequestAnimationFrame = function(){
446						flickLoopFunc();
447						flickLoop = window.requestAnimationFrame(flickLoopFuncByRequestAnimationFrame);
448					};
449					if(document.documentElement.hasClass('touchevents')) {
450						if(window.requestAnimationFrame) {
451							setFlickLoop = function() {
452								window.cancelAnimationFrame(flickLoop);
453								flickLoopFuncByRequestAnimationFrame();
454							}
455							removeFlickLoop = function() {
456								window.cancelAnimationFrame(flickLoop);
457							}
458						}else{
459							setFlickLoop = function() {
460								clearInterval(flickLoop);
461								flickLoop = setInterval(function(){
462									flickLoopFunc();
463								}, 33);
464							}
465							removeFlickLoop = function() {
466								clearInterval(flickLoop);
467							}
468						}
469					}else{
470						setFlickLoop = function() {
471						}
472						removeFlickLoop = function() {
473						}
474					}
475
476					(function(i){
477						//スライドに番号を付与
478						for(i = 0; i < slides.length; i = 0|i+1) {
479							slides[i].setAttribute('data-slide-num', i);
480						}
481
482						//端の要素を生成
483						var closeElesPrev = [],
484							closeElesNext = [],
485							closeEle,
486							closeEleNow;
487
488						//ダミー要素 前 作成
489						closeEleNow = length+1;
490						for(i = 0; i < slideDistByDammy; i = 0|i+1){
491							closeEleNow--;
492							if(closeEleNow < 0) closeEleNow = length;
493							var c = slides[closeEleNow].cloneNode(true);
494							closeElesPrev.push(c);
495						}
496						//ダミー要素 後 作成
497						closeEleNow = -1;
498						for(i = 0; i < slideDistByDammy; i = 0|i+1){
499							closeEleNow++;
500							if(length < closeEleNow) closeEleNow = 0;
501							var c = slides[closeEleNow].cloneNode(true);
502							closeElesNext.push(c);
503						}
504						//ダミー要素をいれる
505						for(i = 0; i < closeElesPrev.length; i = 0|i+1){
506							closeElesPrev[i].addClass('dammy');
507							slidearea.prependChild(closeElesPrev[i]);
508						}
509						for(i = 0; i < closeElesNext.length; i = 0|i+1){
510							closeElesNext[i].addClass('dammy');
511							slidearea.appendChild(closeElesNext[i]);
512						}
513
514						slidesWithDammy = slidearea.children;
515
516						slidearea.style.width = slidesWithDammy.length*100+'%';
517						for(i = 0; i < slidesWithDammy.length; i = 0|i+1) {
518							slidesWithDammy[i].style.width = +(100/slidesWithDammy.length)+"%";
519						}
520
521						//ページングを生成
522						if(pager) {
523							for(i = 0; i <= length; i = 0|i+1) {
524								var li = document.createElement('button');
525								li.setAttribute('data-slide-num', i);
526								li.addEventListener('click', function(e){
527									//loop
528									setLoop();
529									var arrow = 'next';
530									if(~~e.currentTarget.getAttribute('data-slide-num') < now) arrow = 'prev';
531									changeFunc(~~e.currentTarget.getAttribute('data-slide-num'), arrow);
532								});
533								pager.appendChild(li);
534							}
535							pagers = pager.children;
536						}
537
538						//画像のページング
539						if(imgpager) {
540							for(i = 0; i <= length; i = 0|i+1) {
541								var li = imgpagers[i];
542								li.setAttribute('data-slide-num', i);
543								li.addEventListener('click', function(e){
544									//loop
545									setLoop();
546									var arrow = 'next';
547									if(~~e.currentTarget.getAttribute('data-slide-num') < now) arrow = 'prev';
548									changeFunc(~~e.currentTarget.getAttribute('data-slide-num'), arrow);
549								});
550							}
551						}
552
553						//要素の画像読み込み
554						window.trigger('resize');
555					})();
556
557					if(counter) {
558						counterNow = element.querySelector('.slidearea01_count_now');
559						counterTotal = element.querySelector('.slidearea01_count_total');
560						if(counterTotal && counterNow) {
561							if(slides.length < 100) {
562								counterZeroPadding = function(val) {
563									return ('00' + val).slice(-2);
564								}
565							}else{
566								counterZeroPadding = function(val) {
567									return ('000' + val).slice(-3);
568								}
569							}
570							counterNow.innerText = counterZeroPadding(1);
571							counterTotal.innerText = counterZeroPadding(length+1);
572						}else{
573							if(!counterTotal) {
574								console.error('.slidearea01_count_now という要素が無い');
575							}
576							if(!counterNow) {
577								console.error('.slidearea01_count_total という要素が無い');
578							}
579						}
580					}
581
582					//prev
583					var prevFunc = function(){
584						var val = -1+now;
585						if(val < 0) val = length;
586						changeFunc(val, 'prev');
587
588						//loop
589						setLoop();
590					};
591					if(prev) prev.addEventListener('click', prevFunc);
592
593					//next
594					var nextFunc = function(){
595						var val = +1+now;
596						if(length < val) val = 0;
597						changeFunc(val, 'next');
598
599						//loop
600						setLoop();
601					};
602					if(next) next.addEventListener('click', nextFunc);
603
604					//スライドエリアが見えたときに自動切換え・フリックの処理を有効にする
605					inview(element, function(){
606						setLoop();
607						setFlickLoop();
608					}, function(){
609						removeLoop();
610						removeFlickLoop();
611					});
612
613					//flick touchstart
614					flickArea.addEventListener('touchstart', function(e){
615						flickPosXNow = flickPosXBefore = flickPosXFirst = e.changedTouches[0].pageX;
616						flickPosYNow = flickPosYBefore = flickPosYFirst = e.changedTouches[0].pageY;
617						removeLoop();
618						flickFlg = false;
619						slidearea.addClass('disableTrs');
620					}, {passive:true});
621
622					//flick touchmove
623					flickArea.addEventListener('touchmove', function(e){
624						flickPosXNow = e.changedTouches[0].pageX;
625						flickPosYNow = e.changedTouches[0].pageY;
626						if(Math.abs(flickPosYNow-flickPosYFirst) < Math.abs(flickPosXNow-flickPosXFirst)){//Y軸よりX軸のほうが値が大きい場合
627							//スクロール禁止
628							e.preventDefault();
629							e.stopPropagation();
630							flickPosSetFunc();
631							flickFlg = true;
632						}
633					}, {passive:true});
634
635					//flick touchend
636					flickArea.addEventListener('touchend', function(e){
637						slidearea.removeClass('disableTrs');
638						if(flickFlg){
639							switch(flickArrow){
640								case 'next':
641									flickFlg = false;
642									flickAnimTimeFlg = true;
643									nextFunc();
644									break;
645								case 'prev':
646									flickFlg = false;
647									flickAnimTimeFlg = true;
648									prevFunc();
649									break;
650								default:
651									setLoop();
652
653									flickPosResetFunc();
654									break;
655							}
656							flickArrow = 'none';
657						}else{
658							setLoop();
659						}
660						flickFlg = false;
661					}, {passive:true});
662
663					//スライドの処理
664					var timeoutID01,
665						timeoutID02,
666						timeoutID03;
667					var changeFunc = function(num, arrow, target, targetP){
668						//ループしているようにみせる処理
669						var moveNum = num;
670
671						if(element.hasAttribute('data-slidearea01-slidelimit')) {
672							if(num == 0 && arrow == 'next') {
673								moveNum = length;
674								num = length;
675							}
676							if(num == length && arrow == 'prev') {
677								moveNum = 0;
678								num = 0;
679							}
680						} else {
681							if(2 <= length){
682								if(length == now && num == 0) moveNum = length+1;
683								if(0 ==  now && num == length) moveNum = -1;
684							}else{
685								if(num == 0 && arrow == 'next') moveNum = length+1;
686								if(num == length && arrow == 'prev') moveNum = -1;
687							}
688						}
689
690						//フリック時のスピード調整
691						var time = speed*1000;
692						if(flickAnimTimeFlg){
693							time = (time*0.8);
694							slidearea.style.WebkitTransition = transitionValueByFlick;
695							slidearea.style.transition = transitionValueByFlick;
696						}
697
698						//スライド一時無効化
699						element.style.pointerEvents = 'none';
700
701						//スライド実行
702						slidearea.style.left = -100*(moveNum+slideDistByDammy)+'%';
703						clearTimeout(timeoutID01);
704						clearTimeout(timeoutID02);
705						clearTimeout(timeoutID03);
706						timeoutID01 = setTimeout(function(){
707							slidearea.addClass('disableTrs');
708							timeoutID02 = setTimeout(function(){
709								slidearea.style.left = -100*(num+slideDistByDammy)+'%';
710								timeoutID03 = setTimeout(function(){
711									slidearea.removeClass('disableTrs');
712									slidearea.style.WebkitTransition = transitionValue;
713									slidearea.style.transition = transitionValue;
714									//スライド一時無効化
715									element.style.pointerEvents = 'auto';
716									if(flickAnimTimeFlg){
717										flickAnimTimeFlg = false;
718									}
719								}, 33);
720							}, 33);
721						}, time);
722
723						//pager 切り替え
724						if(pager) {
725							target = pagers[num];
726							pagers.removeClass('active');
727							target.addClass('active');
728						}
729						//pager 切り替え
730						if(imgpager) {
731							target = imgpagers[num];
732							imgpagers.removeClass('active');
733							target.addClass('active');
734						}
735
736						//カウンター
737						if(counter) {
738							counterNow.innerText = counterZeroPadding(num + 1);
739						}
740
741						//値保存
742						now = ~~num;
743
744						if(element.hasAttribute('data-slidearea01-slidelimit')) {
745							if(now == 0) {
746								if(prev) prev.addClass('disabled');
747							} else {
748								if(prev) prev.removeClass('disabled');
749							}
750							if(now == length) {
751								if(next) next.addClass('disabled');
752							} else {
753								if(next) next.removeClass('disabled');
754							}
755						}
756					};
757					changeFunc(0);
758				};
759				var loadfile = element.querySelector('[data-lf]');
760				if(loadfile) {
761					var loadfilearea = loadfile.closest('[data-lf-area]');
762					if(~~(loadfilearea.getAttribute('data-lf-area')) == 1) {
763						setSlide();
764					}else{
765						loadfilearea.addEventListener('loadfileComplete', setSlide, {once:true});
766					}
767				}else{
768					setSlide();
769				}
770			}(slideModules[i]));
771		}
772
773		// スムーズスクロールevent 既存と競合しない様、一旦aboutにだけ設置
774		(function() {
775			var targets = document.querySelectorAll('a[href*="#"]');
776			for (var i = 0; i < targets.length; ++i) {
777				(function(target) {
778					var href = target.getAttribute('href');
779					var hrefPath = href.split('#')[0];
780					if(location.pathname == hrefPath || hrefPath == '') {
781						var handler = function(e){
782							setTimeout(function(){
783								Common.jump('#'+target.getAttribute('href').split('#')[1]);
784							}, 100);
785							e.stopPropagation();
786							e.preventDefault();
787							e.returnValue = false;
788							e.cancelBubble = true;
789							return false;
790						};
791						target.addEventListener('click', handler);
792						target.smoothscrollremovefunction = function(){
793							target.removeEventListener('click', handler);
794						};
795					}else{
796						if(!~href.indexOf('http')) {
797							target.setAttribute('href', href.replace('#', '#scroll-'));
798						}
799					}
800				}(targets[i]));
801			}
802		}());
803
804	}());
805
806
807});

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.