PageSourceSearch

https://www.itoham.co.jp/Portals/0/js/new/index/common.js

js itoham.co.jp collected 2026-10-02 07:27:40 UTC 24,418 bytes, 730 lines download raw bytes

1/* =============================================
2
3infoNet common.js   ver2.0.4
4
5============================================= */
6(function ($) {
7	'use strict';
8	$(function () {
9		/* =============================================
10			global variable declaration
11		============================================= */
12		const $BODY = $('body');
13		let deviceType = 'pc';
14		let viewType = 'pc';
15		let tbWidth = 1000;
16		let spWidth = 768;
17		let animSpd = 300;
18		let headerPosition = $('#header').css('position') == 'fixed' || $('#header').css('position') == 'absolute' ? true : false;
19		let responsiveMode = true;
20
21		/* =============================================
22			deviceType / viewType
23		============================================= */
24		// deviceType
25		if ($BODY.hasClass('spMode')) {
26			deviceType = 'sp';
27		} else if ($BODY.hasClass('tbMode')) {
28			deviceType = 'sp';
29		}
30
31		/* =============================================
32			plugin options
33		============================================= */
34		// megaMenu option list.
35		const OPT_MEGA = [{
36			name: 'corporate',// Meaning of name only.
37			target: '#gnav .head_menu > ul > li > a',// Enter the selector that fires the event.
38			skinName: '',// Enter the name of the skin to run.
39			// option list.
40			triggerMode: 'click',
41			pullDown: true,
42			item: '#gnav .head_menu > ul > li > ul',
43			overlayPosi: '#skin',
44			close_opts: {
45				closeBtn: true,
46				closeTag: '<p><span>閉じる</span></p>',
47				closeTagPosi: '#gnav .head_menu > ul > li > ul'
48			},
49			spd: animSpd,
50			openDelay: 0,
51			closeDelay: 0,
52			scrollHide: true,
53			existJudg: true,
54			activeAndo: true,
55			outSideClose: true
56		}];
57		// burgerMenu option list.
58		const OPT_BURGER = [{
59			name: 'main',// linkClass
60			target: '#header .right',// Enter the selector that fires the event.
61			skinName: '',// Enter the name of the skin to run.
62			runPC: false,// Activated on PC.
63			runSP: true,// Activated on SP.
64			// option list.
65			posi: '#header',
66			html: '<p><span></span></p>',
67			spd: animSpd,
68			moveType: 'default',
69			toggle_opts: {
70				toggleBtn: true,
71				toggleSwitch: true,
72				toggleReset: true,
73				spd: animSpd
74			},
75			close_opts: {
76				close: true,
77				posi: '#header .right',
78				html: '<p><span>閉じる</span></p>'
79			},
80			overlay_opts: {
81				posi: '#skin'
82			}
83		}];
84
85		/* =============================================
86			load & resize
87		============================================= */
88		if (responsiveMode) {
89			if (window.innerWidth <= spWidth) {
90				viewType = 'sp';
91			} else if (window.innerWidth <= tbWidth) {
92				viewType = 'pc';
93			} else {
94				viewType = 'pc';
95			}
96		} else {
97			if ($BODY.hasClass('pcView')) {
98				viewType = 'pc';
99			} else if ($BODY.hasClass('spView')) {
100				viewType = 'sp';
101			}
102		}
103		$BODY.attr('view-mode', viewType);
104		responsiveMotion('load');
105
106		if (responsiveMode) {
107			$(window).on({
108				'resize': function (event) {
109					if (window.innerWidth <= spWidth) {
110						if (viewType !== 'sp') {
111							viewType = 'sp';
112							$BODY.attr('view-mode', viewType);
113							responsiveMotion('resize');
114						}
115					} else if (window.innerWidth <= tbWidth) {
116						if (viewType !== 'pc') {
117							viewType = 'pc';
118							$BODY.attr('view-mode', viewType);
119							responsiveMotion('resize');
120						}
121					} else {
122						if (viewType !== 'pc') {
123							viewType = 'pc';
124							$BODY.attr('view-mode', viewType);
125							responsiveMotion('resize');
126						}
127					}
128					responsiveMotion('always');
129				}
130			});
131		}
132
133		/* =============================================
134			responsive function
135		============================================= */
136		function responsiveMotion(event_mode) {
137			switch (event_mode) {
138				case 'load':
139					if ($BODY.attr('view-mode') == 'pc') { } else if ($BODY.attr('view-mode') == 'sp') { }
140					initialize();
141					// fileiconMotion();
142					// placeholderMotion();
143					toTopMotion();
144					// fontSizeMotion();
145					// editSlick();
146					// lightcaseMotion();
147					// modaalMotion();
148					// tableControlMotion();
149					// accordionMotion(event_mode);
150					megaMenuMotion(event_mode, OPT_MEGA);
151					burgerMotion(event_mode, OPT_BURGER);
152					headerFixMotion(event_mode);// description: 余白を追加するのでsmoothより先に
153					// editorTabMotion();// 高さ算出するのでDOM生成後に
154					smoothScrollMotion();// 高さ算出するのでDOM生成後に
155					swiperSlider();
156					runOpeningAnimation();
157					break;
158				case 'resize':
159					// accordionMotion(event_mode);
160					megaMenuMotion(event_mode, OPT_MEGA);
161					burgerMotion(event_mode, OPT_BURGER);
162					headerFixMotion(event_mode);
163					break;
164				case 'always':
165					break;
166			}
167		}
168
169		/* =============================================
170			burger_motion
171		============================================= */
172		function burgerMotion(func_mode, opt) {
173			const UNDEFINED = 'undefined';
174			switch (func_mode) {
175				case 'load':
176					for (let i = 0; i < opt.length; i++) {
177						let flag = false;
178						if (viewType == 'pc' && opt[i].runPC) {
179							flag = true;
180						}
181						if (viewType == 'sp' && opt[i].runSP) {
182							flag = true;
183						}
184						if (flag) {
185							if ($BODY.hasClass(opt[i]?.skinName) || opt[i]?.skinName == '' || typeof opt[i]?.skinName == UNDEFINED) {
186								plugin_burger_exe(opt[i]);
187							}
188						}
189					}
190					break;
191				case 'resize':
192					for (let i = 0; i < opt.length; i++) {
193						if ($BODY.hasClass(opt[i]?.skinName) || opt[i]?.skinName == '' || typeof opt[i]?.skinName == UNDEFINED) {
194							if (typeof opt[i]?.runPC != UNDEFINED && viewType == 'pc') {
195								if (opt[i].runPC) {
196									if (!$(`.burger_motion.${opt[i].name}`)[0]) {
197										if ($BODY.hasClass(opt[i]?.skinName) || opt[i]?.skinName == '' || typeof opt[i]?.skinName == UNDEFINED) {
198											plugin_burger_exe(opt[i]);
199										}
200									} else {
201										$(opt[i].target).burgerMenu('reset');
202										$(opt[i].target).burgerMenu('rebind');
203									}
204								} else {
205									$(opt[i].target).burgerMenu('reset');
206								}
207							}
208							if (typeof opt[i]?.runSP != UNDEFINED && viewType == 'sp') {
209								if (opt[i].runSP) {
210									if (!$(`.burger_motion.${opt[i].name}`)[0]) {
211										if ($BODY.hasClass(opt[i]?.skinName) || opt[i]?.skinName == '' || typeof opt[i]?.skinName == UNDEFINED) {
212											plugin_burger_exe(opt[i]);
213										}
214									} else {
215										$(opt[i].target).burgerMenu('reset');
216										$(opt[i].target).burgerMenu('rebind');
217									}
218								} else {
219									$(opt[i].target).burgerMenu('reset');
220								}
221							}
222						}
223					}
224					break;
225			}
226			function plugin_burger_exe(option) {
227				$(option.target).burgerMenu({
228					posi: typeof option?.posi != UNDEFINED ? option.posi : '#header',
229					html: typeof option?.html != UNDEFINED ? option.html : '<p><span></span></p>',
230					spd: typeof option?.spd != UNDEFINED ? option.spd : animSpd,
231					moveType: typeof option?.moveType != UNDEFINED ? option.moveType : 'default',
232					linkClass: typeof option?.name != UNDEFINED ? option.name : 'main',
233					toggle_opts: {
234						toggleBtn: typeof option.toggle_opts?.toggleBtn != UNDEFINED ? option.toggle_opts.toggleBtn : true,
235						toggleSwitch: typeof option.toggle_opts?.toggleSwitch != UNDEFINED ? option.toggle_opts.toggleSwitch : false,
236						toggleReset: typeof option.toggle_opts?.toggleReset != UNDEFINED ? option.toggle_opts.toggleReset : false,
237						spd: typeof option?.toggle_opts?.spd != UNDEFINED ? option.toggle_opts.spd : animSpd
238					},
239					close_opts: {
240						close: typeof option.close_opts?.close != UNDEFINED ? option.close_opts.close : false,
241						posi: typeof option.close_opts?.posi != UNDEFINED ? option.close_opts.posi : '.head_bottom',
242						html: typeof option.close_opts?.html != UNDEFINED ? option.close_opts.html : '<p><span>close</span></p>'
243					},
244					overlay_opts: {
245						overlay: typeof option.overlay_opts?.overlay != UNDEFINED ? option.overlay_opts.overlay : true,
246						posi: typeof option.overlay_opts?.posi != UNDEFINED ? option.overlay_opts.posi : '#header'
247					}
248				});
249				let url_path = location.pathname;
250				if ($(`${option.target} a[href^="${url_path}#"]`)[0]) {
251					$(`${option.target} a[href^="${url_path}#"]`).on('click', function (event) {
252						$(option.target).burgerMenu('close', option.name);
253					});
254				}
255			}
256		}
257
258		/* =============================================
259			megaMenuMotion
260		============================================= */
261		function megaMenuMotion(func_mode, opt) {
262			const UNDEFINED = 'undefined';
263			switch (func_mode) {
264				case 'load':
265					for (let i = 0; i < opt.length; i++) {
266						if (viewType == 'pc') {
267							if ($BODY.hasClass(opt[i]?.skinName) || opt[i]?.skinName == '' || typeof opt[i]?.skinName == UNDEFINED) {
268								plugin_megaMenu_exe(opt[i]);
269							}
270						}
271						if (viewType == 'sp') {
272							if ($(opt[i].target).parent('li').hasClass('mega_trigger')) {
273								$(opt[i].target).megaMenu('reset');
274							}
275						}
276					}
277					break;
278				case 'resize':
279					for (let i = 0; i < opt.length; i++) {
280						if ($BODY.hasClass(opt[i]?.skinName) || opt[i]?.skinName == '' || typeof opt[i]?.skinName == UNDEFINED) {
281							if (viewType == 'pc') {
282								if ($(opt[i].target).parent('li').hasClass('mega_trigger')) {
283									$(opt[i].target).megaMenu('rebind');
284								} else {
285									plugin_megaMenu_exe(opt[i]);
286								}
287							} else if (viewType == 'sp') {
288								if ($(opt[i].target).parent('li').hasClass('mega_trigger')) {
289									$(opt[i].target).megaMenu('reset');
290								}
291							}
292						}
293					}
294					break;
295			}
296			function plugin_megaMenu_exe(option) {
297				$(option.target).megaMenu({
298					deviceType: deviceType,
299					triggerMode: typeof option?.triggerMode != UNDEFINED ? option.triggerMode : 'hover',
300					pullDown: typeof option?.pullDown != UNDEFINED ? option.pullDown : false,
301					item: typeof option?.item != UNDEFINED ? option.item : '.megamenu_wrap > *',
302					overlayPosi: typeof option?.overlayPosi != UNDEFINED ? option.overlayPosi : '#skin',
303					close_opts: {
304						closeBtn: typeof option?.close_opts.closeBtn != UNDEFINED ? option.close_opts.closeBtn : false,
305						closeTag: typeof option?.close_opts.closeTag != UNDEFINED ? option.close_opts.closeTag : '<p><span>close</span></p>',
306						closeTagPosi: typeof option?.close_opts.closeTagPosi != UNDEFINED ? option.close_opts.closeTagPosi : '.megamenu_wrap > *'
307					},
308					spd: typeof option?.spd != UNDEFINED ? option.spd : animSpd,
309					openDelay: typeof option?.openDelay != UNDEFINED ? option.openDelay : animSpd / 2,
310					closeDelay: typeof option?.closeDelay != UNDEFINED ? option.closeDelay : animSpd / 2,
311					scrollHide: typeof option?.scrollHide != UNDEFINED ? option.scrollHide : false,
312					existJudg: typeof option?.existJudg != UNDEFINED ? option.existJudg : false,
313					activeAndo: typeof option?.activeAndo != UNDEFINED ? option.activeAndo : false,
314					outSideClose: typeof option?.outSideClose != UNDEFINED ? option.outSideClose : false
315				});
316			}
317		}
318
319		/*=============================================
320						lightcase
321		=============================================*/
322		function lightcaseMotion() {
323			if (pluginExists('lightcase') && $('a[data-rel^="lightcase"]')[0]) {
324				$('a[data-rel^="lightcase"]').each(function (index, el) {
325					var $this = $(this);
326					$this.lightcase({
327						maxWidth: 1200,
328						maxHeight: 640,
329						inline: {
330							width: 1200,
331							height: 640
332						},
333						iframe: {
334							width: 1200,
335							height: 640,
336							frameborder: 0
337						}
338					});
339					$('.recipeModalLink>li>span').lightcase({
340						href: '#recipeModalLinkItem',
341						maxWidth: 1000,
342						maxHeight: 800,
343						swipe: false,
344						iframe: {
345								width: "100%",
346								height: "100%"
347						},
348						inline: {
349								width: 'auto',
350								height: 'auto'
351						}
352				});
353				});
354			}
355		}
356
357		/* =============================================
358			headFix
359		============================================= */
360		function headerFixMotion(func_mode) {
361			if (headerPosition) {
362				if (func_mode == 'load') {
363					$('#header').headFix({
364						mode: viewType,
365						headerMargin: headerPosition,
366						responsive: responsiveMode,
367						targetMargin: '#main',
368						fixMode: 'default',
369						headScrollX: '#header .inner',
370						scrollBefore: function () { },
371						scrollAfter: function () { }
372					});
373				} else {
374					$('#header').headFix('reMargin', {
375						targetMargin: '#main',
376						cssMargin: 'padding-top'
377					});
378				}
379			}
380		}
381
382		/* =============================================
383			toTop
384		============================================= */
385		function toTopMotion() {
386			$('.pagetop').toTop({
387				showStart: 100,
388				fix: headerPosition,
389				fixPosi: '#footer',
390				addNum: -30,
391				fixStyle: { 'position': 'absolute' }
392			});
393		}
394
395		/* =============================================
396			smoothScrollMotion
397		============================================= */
398		function smoothScrollMotion() {
399			$(`a[href*="#"]:not([href="#"]):not(.noSmooth):not([href*="TabModule"]):not([data-rel*="lightcase"]):not(a[modaal-type]),
400			area[href*="#"]:not([href="#"]):not(.noSmooth):not([href*="TabModule"]):not([data-rel*="lightcase"]):not(a[modaal-type])`).smoothScroll({
401				speed: animSpd,
402				fix: headerPosition,
403				fixItem: '#header',
404				animedAfter: function () {
405					// let href = $(location).attr('href');
406					// if (href.indexOf('#') != -1) {
407					// 	$('#header').headFix('scrollUp', '#header');
408					// }
409				}
410			});
411		}
412
413		/* =============================================
414			swiper slider
415		============================================= */
416		function swiperSlider() {
417      document.querySelectorAll('.index_slider, .index_slider_sp').forEach((sliderEl) => {
418        const isSpOnly = sliderEl.classList.contains('index_slider_sp');
419        const isRecipe = sliderEl.classList.contains('index_slider_recipe');
420        const paginationEl = sliderEl.querySelector('.swiper-pagination');
421        const nextEl = sliderEl.querySelector('.swiper-button-next');
422        const prevEl = sliderEl.querySelector('.swiper-button-prev');
423        const stopBtn = sliderEl.querySelector('.swiper-button-stop');
424        const wrapper = sliderEl.querySelector('.swiper-wrapper');
425        if (!wrapper) return;
426
427        let swiper = null;
428
429        const originalSlides = wrapper.querySelectorAll('.swiper-slide');
430        const originalCount = originalSlides.length;
431        sliderEl.dataset.originalCount = originalCount;
432
433        const cloneSlides = () => {
434          if (!sliderEl.dataset.cloned && originalCount <= 5) {
435            originalSlides.forEach(slide => {
436              const clone = slide.cloneNode(true);
437              clone.classList.add('js-cloned-slide');
438              wrapper.appendChild(clone);
439            });
440            sliderEl.dataset.cloned = "true";
441          }
442        };
443
444        const removeClones = () => {
445          if (sliderEl.dataset.cloned) {
446            const clones = wrapper.querySelectorAll('.js-cloned-slide');
447            clones.forEach(clone => clone.remove());
448            sliderEl.removeAttribute('data-cloned');
449          }
450        };
451
452        function updateCustomProgress(s) {
453          if (!s || !s.pagination || !s.pagination.el) return;
454          const total = parseInt(s.el.dataset.originalCount);
455          if (!total) return;
456
457          const fillEl = s.pagination.el.querySelector('.swiper-pagination-progressbar-fill');
458          if (!fillEl) return;
459
460          const currentIndex = s.realIndex % total;
461          const progress = (currentIndex + 1) / total;
462          
463          fillEl.style.transform = `scaleX(${progress})`;
464          fillEl.style.transitionDuration = '300ms';
465        }
466
467        const handleSwiper = () => {
468          const windowWidth = window.innerWidth;
469
470          if (isSpOnly && windowWidth >= 769) {
471            if (swiper) { swiper.destroy(true, true); swiper = null; }
472            removeClones();
473            return;
474          }
475
476          if (!isSpOnly || windowWidth < 769) {
477            cloneSlides();
478          }
479
480          if (swiper) { swiper.destroy(true, true); swiper = null; }
481
482          let config = {};
483          if (isRecipe) {
484            config = {
485              slidesPerView: 2,
486              centeredSlides: false,
487              slidesOffsetBefore: 85,
488              slidesOffsetAfter: 85,
489              spaceBetween: 24,
490              breakpoints: {
491                600: {
492                  slidesPerView: 4,
493                  centeredSlides: false,
494                  slidesOffsetBefore: 0,
495                  slidesOffsetAfter: 0,
496                  spaceBetween: 23,
497                },
498                769: {
499                  enabled: !isSpOnly,
500                  slidesPerView: 5,
501                  centeredSlides: false,
502                  spaceBetween: '2.5%',
503                  slidesOffsetBefore: 0,
504                  slidesOffsetAfter: 0,
505                }
506              }
507            };
508          } else {
509            config = {
510              slidesPerView: 1.5,
511              centeredSlides: true,
512              slidesOffsetBefore: 0,
513              slidesOffsetAfter: 0,
514              spaceBetween: '3.95%',
515              breakpoints: {
516                600: {
517                  slidesPerView: 2,
518                  centeredSlides: false,
519                  slidesOffsetBefore: 85,
520                  slidesOffsetAfter: 85,
521                  spaceBetween: 24,
522                },
523                769: {
524                  enabled: !isSpOnly,
525                  slidesPerView: 4,
526                  centeredSlides: false,
527                  spaceBetween: '3.95%',
528                  slidesOffsetBefore: 0,
529                  slidesOffsetAfter: 0,
530                }
531              }
532            };
533          }
534
535          swiper = new Swiper(sliderEl, {
536            ...config,
537            loop: true,
538            observer: true,
539            observeParents: true,
540            updateOnWindowResize: true,
541            autoplay: { delay: 3000, disableOnInteraction: false },
542            pagination: { el: paginationEl, type: "progressbar" },
543            navigation: { nextEl: nextEl, prevEl: prevEl },
544            on: {
545              afterInit: function () { setTimeout(() => { updateCustomProgress(this); }, 50); },
546              slideChange: function () { updateCustomProgress(this); },
547              resize: function () { updateCustomProgress(this); }
548            }
549          });
550
551          if (paginationEl) {
552            paginationEl.style.cursor = 'grab';
553            let isDragging = false;
554
555            const syncProgressToSlide = (e) => {
556              if (!swiper) return;
557              const rect = paginationEl.getBoundingClientRect();
558              const clientX = e.touches ? e.touches[0].clientX : e.clientX;
559              const x = Math.max(0, Math.min(clientX - rect.left, rect.width));
560              const ratio = x / rect.width;
561              
562              const totalOriginal = parseInt(sliderEl.dataset.originalCount);
563              const targetIndex = Math.floor(ratio * totalOriginal);
564
565              swiper.slideToLoop(targetIndex, 300);
566            };
567
568            const startDrag = (e) => {
569              isDragging = true;
570              paginationEl.style.cursor = 'grabbing';
571              if (swiper.autoplay) swiper.autoplay.stop();
572              syncProgressToSlide(e);
573            };
574
575            const stopDrag = () => {
576              if (!isDragging) return;
577              isDragging = false;
578              paginationEl.style.cursor = 'grab';
579              if (swiper.autoplay && !stopBtn.classList.contains('paused')) {
580                swiper.autoplay.start();
581              }
582            };
583
584            paginationEl.addEventListener('mousedown', startDrag);
585            window.addEventListener('mousemove', (e) => { if (isDragging) syncProgressToSlide(e); });
586            window.addEventListener('mouseup', stopDrag);
587
588            paginationEl.addEventListener('touchstart', startDrag, { passive: true });
589            window.addEventListener('touchmove', (e) => { if (isDragging) syncProgressToSlide(e); }, { passive: false });
590            window.addEventListener('touchend', stopDrag);
591
592            paginationEl.onclick = (e) => { if (!isDragging) syncProgressToSlide(e); };
593          }
594        };
595
596        handleSwiper();
597
598        let resizeTimer = 0;
599        window.addEventListener('resize', () => {
600          clearTimeout(resizeTimer);
601          resizeTimer = setTimeout(handleSwiper, 250);
602        });
603
604        if (stopBtn) {
605          stopBtn.onclick = function() {
606            if (!swiper || !swiper.autoplay) return;
607            if (this.classList.contains('paused')) {
608              swiper.autoplay.start();
609              this.classList.remove('paused');
610            } else {
611              swiper.autoplay.stop();
612              this.classList.add('paused');
613            }
614          };
615        }
616      });
617    }
618
619		/* =============================================
620			top opening
621		============================================= */
622		function runOpeningAnimation() {
623			const $loaderBg = $('#loader-bg');
624			const $loaderLogo = $('#loader-logo');
625			const visited = sessionStorage.getItem('visited');
626
627			if (!visited) {
628				$loaderLogo.fadeIn(1200, function() {
629					setTimeout(function() {
630						$loaderBg.fadeOut(1000, function() {
631							$(this).remove();
632							sessionStorage.setItem('visited', 'true');
633						});
634					}, 1500); 
635				});
636
637			} else {
638				$loaderBg.delay(500).fadeOut(300, function() {
639					$(this).remove();
640				});
641			}
642		}
643		
644		/* =============================================
645			pluginExists
646		============================================= */
647		function pluginExists(pluginName) {
648			return $.fn[pluginName] ? true : false;
649		}
650
651		/* =============================================
652			eventBoolean
653		============================================= */
654		function eventBoolean(e) {
655			let flag = false;
656			if (e.type == 'click') { flag = true; }
657			if (e.type == 'keypress') {
658				var keycode = (e.keyCode ? e.keyCode : e.which);
659				if (keycode == '13') {
660					flag = true;
661				}
662			}
663			return flag;
664		}
665
666		/* =============================================
667			animCssReset
668		============================================= */
669		function animCssReset(target) {
670			$(target).css({ 'height': '', 'padding-top': '', 'margin-top': '', 'padding-bottom': '', 'margin-bottom': '' });
671		}
672
673		/* =============================================
674			Initialize
675		============================================= */
676		function initialize() {
677			$('a[href="#"]').on('click', function (event) {
678				event.preventDefault();
679			});
680		}
681
682	});
683})(jQuery);
684
685(function($) {
686		'use strict';
687		$(function() {
688
689				/*=============================================
690						lightcase
691				=============================================*/
692				if (pluginExists('lightcase') && $('a[data-rel*="lightcase"]')[0]) {
693						$('a[data-rel^=lightcase]').lightcase({
694								maxWidth: 1000,
695								maxHeight: 800,
696								swipe: false,
697								iframe: {
698										width: "100%",
699										height: "100%"
700								},
701								inline: {
702										width: 'auto',
703										height: 'auto'
704								}
705						});
706						$('.recipeModalLink>li>span').lightcase({
707								href: '#recipeModalLinkItem',
708								maxWidth: 1000,
709								maxHeight: 800,
710								swipe: false,
711								iframe: {
712										width: "100%",
713										height: "100%"
714								},
715								inline: {
716										width: 'auto',
717										height: 'auto'
718								}
719						});
720				}
721
722				/*=============================================
723						pluginExists
724				=============================================*/
725				function pluginExists(pluginName) {
726						return $.fn[pluginName] ? true : false;
727				}
728				
729		});
730})(jQuery);

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.