PageSourceSearch

https://www.sqcf.org/js/site_section.js?1775122552

js sqcf.org collected 2026-09-24 10:11:47 UTC 18,851 bytes, 691 lines download raw bytes

1$(function(){
2	if(LIMIT_API_LIST.indexOf('youtube') === -1){
3		var $youtube_player_api = $('#youtube_player_api');
4		if($youtube_player_api.length === 0){
5			$youtube_player_api = $('<script src="https://www.youtube.com/iframe_api" id="youtube_player_api" />');
6			var $first_script = $('script').eq(0);
7			$first_script.before($youtube_player_api);
8		}
9	}
10});
11var SITE_SECTION_YOUTUBE = function(){
12	var type;
13	var tv;
14	var vid;
15	var playerDefaults = {'autoplay': 1, 'autohide': 1, 'modestbranding': 0, 'rel': 0, 'showinfo': 0, 'controls': 0, 'disablekb': 1, 'enablejsapi': 1, 'iv_load_policy': 3};
16	var screen_code;
17	var slide_code;
18	var id;
19	var $screen;
20	var code;
21	var currVid = 0;
22	var $section_obj;
23	var is_fullpage;
24
25	var init = function(t,c,d,s){
26		type = t;
27		code = c;
28		id = d;
29		slide_code = s;
30		is_fullpage = $('#'+code).attr('doz_fullpage') === 'Y';
31
32		if(type == 'section'){
33			screen_code = "screen_"+code;
34			$section_obj = $('#' + code);
35		}
36		if(type == 'visual'){
37			screen_code = "screen_"+code+"_"+slide_code;
38			$section_obj = $('#visual_' + code);
39			if(is_fullpage){
40				$section_obj = $('#visual_' + code+' .item');
41			}
42		}
43		vid = [ {'videoId': id, 'startSeconds': 0, 'endSeconds': 0, 'suggestedQuality': 'default'}];
44
45		youTubePlayer();
46	};
47
48	var youTubePlayer  = function (){
49		$section_obj.imagesLoaded()
50			.always(function(){
51				tv = new YT.Player(screen_code, {events: {'onReady': onPlayerReady, 'onStateChange': onPlayerStateChange}, playerVars: playerDefaults});
52			});
53
54	};
55
56	var onPlayerReady = function(){
57		if(type == 'section'){
58			screen_code = "screen_"+code;
59		}
60		if(type == 'visual'){
61			screen_code = "screen_"+code+"_"+slide_code;
62		}
63		$screen = $('#' + screen_code);
64		tv.loadVideoById(vid[currVid]);
65		tv.mute();
66		if(type == 'visual' && is_fullpage){
67			$screen.attr('data-keepplaying', '');
68			tv.stopVideo();
69		}
70		vidRescale();
71		$('body').off('gridChange.'+code).on('gridChange.'+code,function(){
72			vidRescale();
73		});
74		$(window).on('resize', function(){
75			vidRescale();
76		});
77	};
78
79	var playVideo = function(){
80		if(typeof tv.playVideo === 'function'){
81			tv.playVideo();
82			return true;
83		}else
84			return false;
85	};
86
87	var onPlayerStateChange = function(e) {
88		$screen = $('#' + screen_code);
89		if (e.data === 1){
90			$screen.addClass('active');
91		} else if (e.data === 0){
92			$screen.removeClass('active');
93			if(currVid === vid.length - 1){
94				currVid = 0;
95			} else {
96				currVid++;
97			}
98			tv.loadVideoById(vid[currVid]);
99			tv.seekTo(vid[currVid].startSeconds);
100		}
101	};
102
103	var vidRescale = function(){
104		var w = $section_obj.outerWidth()+20,
105			h = $section_obj.outerHeight()+20;
106		if (w/h > 16/9){ //납작하다는 애기
107			tv.setSize(w, w/16*9);
108			$screen.css({'left': '-10px', 'top':'-10px'});
109		} else { //길죽할때
110			tv.setSize(h*(16/9), h);
111			$screen.css({'left': -(($screen.outerWidth()-w)/2)-10 , "top":"-10px"});
112		}
113	};
114
115	return {
116		'init' : function(t,c,d,s){
117			init(t,c,d,s);
118		},
119		'playVideo' : function(){
120			return playVideo();
121		}
122	}
123
124};
125
126// Vimeo SDK 동적 로드 유틸리티 (site_video.js 에서도 사용)
127const ensureVimeoSDK = (() => {
128	let promise = null;
129	return (callback) => {
130		if (typeof Vimeo !== 'undefined') {
131			callback();
132			return;
133		}
134		if (!promise) {
135			promise = new Promise((resolve, reject) => {
136				const script = document.createElement('script');
137				script.src = 'https://player.vimeo.com/api/player.js';
138				script.onload = resolve;
139				script.onerror = () => {
140					promise = null;
141					reject();
142				};
143				document.head.appendChild(script);
144			});
145		}
146		promise.then(callback);
147	};
148})();
149
150var SITE_SECTION_VIMEO = function(){
151	var type;
152	var tv;
153	var options = {'autoplay': true, 'autopause': false, 'controls': false, 'title': false, 'loop': true, 'muted': true, 'background': true};
154	var screen_code;
155	var id;
156	var slide_code;
157	var $screen;
158	var code;
159	var $section_obj;
160	var is_fullpage;
161	var $screen_iframe;
162	var org_width;
163	var org_height;
164
165	var init = function(t,c,d,s){
166		type = t;
167		code = c;
168		id = d;
169		slide_code = s;
170		is_fullpage = $('#'+code).attr('doz_fullpage') === 'Y';
171
172		if(type == 'section'){
173			screen_code = "screen_"+code;
174			$section_obj = $('#' + code);
175		}
176		if(type == 'visual'){
177			screen_code = "screen_"+code+"_"+slide_code;
178			$section_obj = $('#visual_' + code);
179			if(is_fullpage){
180				$section_obj = $('#visual_' + code+' .item');
181			}
182		}
183
184		vimeoPlayer();
185	};
186
187	var vimeoPlayer  = function (){
188		$section_obj.imagesLoaded()
189			.always(function(){
190				$.extend(options, {'id': id});
191				ensureVimeoSDK(() => {
192					tv = new Vimeo.Player(screen_code, options);
193					tv.on('loaded', () => onPlayerReady());
194					tv.on('play', () => $screen.addClass('active'));
195					tv.on('ended', () => $screen.removeClass('active'));
196				});
197			});
198
199	};
200
201	var onPlayerReady = function(){
202		if(type == 'section'){
203			screen_code = "screen_"+code;
204		}
205		if(type == 'visual'){
206			screen_code = "screen_"+code+"_"+slide_code;
207		}
208		$screen = $('#' + screen_code);
209		$screen_iframe = $screen.find('iframe');
210		org_width = $screen_iframe.width();
211		org_height = $screen_iframe.height();
212		tv.setVolume(0);
213		if(type == 'visual' && is_fullpage){
214			$screen.attr('data-keepplaying', '');
215			if(!tv.getPaused()) tv.pause();
216		}
217		vidRescale();
218		$('body').off('gridChange.'+code).on('gridChange.'+code,function(){
219			vidRescale();
220		});
221		$(window).on('resize', function(){
222			vidRescale();
223		});
224	};
225
226	var playVideo = function(){
227		if(typeof tv.play === 'function'){
228			tv.play();
229			return true;
230		}else
231			return false;
232	};
233
234	var vidRescale = function(){
235		var w = $section_obj.outerWidth()+20,
236			h = $section_obj.outerHeight()+20;
237		if (w/h > org_width/org_height){ //납작하다는 애기
238			$screen_iframe.attr('width', w);
239			$screen_iframe.attr('height', w/(org_width/org_height));
240			$screen.css({'left': '-10px', 'top':'-10px'});
241		} else { //길죽할때
242			$screen_iframe.attr('width', h*(org_width/org_height));
243			$screen_iframe.attr('height', h);
244			$screen.css({'left': -(($screen_iframe.outerWidth()-w)/2)-10 , "top":"-10px"});
245		}
246	};
247
248	return {
249		'init' : function(t,c,d,s){
250			init(t,c,d,s);
251		},
252		'playVideo' : function(){
253			return playVideo();
254		}
255	}
256
257};
258
259var SECTION_RESIZE = function(){
260	var code;
261	var $section;
262	var org_inside_width;
263	var $main;
264	var $aside;
265	var $gutter;
266	var $inside;
267	var init = function(c){
268		code = c;
269		$section = $('#'+c);
270		$main = $section.find('main');
271		$aside = $section.find('div[doz_type="aside"]');
272		$gutter = $section.find('div._side_gutter');
273		$inside = $section.find('main > div[doz_type="inside"]');
274		org_inside_width = parseInt($inside.css('width'));
275		run();
276	};
277
278	var run = function(){
279		//calc();
280		$(window).off('resize.section_resize_'+code).on('resize.section_resize_'+code,function(){
281			//calc();
282		});
283	};
284
285	var calc = function(){
286		var main_width = $main.width();
287		if($aside.css('display')=='none')
288			return;
289		var side_width = $aside.outerWidth() + parseInt($aside.css('margin-left')) + parseInt($aside.css('margin-right'));
290		var gutter_width = $gutter.outerWidth();
291		var inside_width = $inside.outerWidth();
292		var t_width = side_width+gutter_width+inside_width;
293		if(main_width < t_width){
294			var term = t_width-main_width;
295			$inside.outerWidth(inside_width-term);
296		}else if(t_width < main_width){
297			var term = main_width - t_width;
298			$inside.outerWidth(inside_width+term);
299		}else{
300			$inside.outerWidth(parseInt(org_inside_width));
301		}
302	};
303
304	return {
305		'init' : function(c){
306			init(c)
307		}
308	}
309};
310
311var SECTION_PARTICLE_ANIMATION = function(){
312	var code;
313	var $section;
314	var $section_class;
315	var SCREEN_WIDTH = window.innerWidth;
316	var SCREEN_HEIGHT = window.innerHeight;
317	var particle;
318	var camera;
319	var scene;
320	var renderer;
321	var mouseX = 0;
322	var mouseY = 0;
323	var windowHalfX = window.innerWidth / 2;
324	var windowHalfY = window.innerHeight / 2;
325
326	var particles = [];
327	var particleImage = new Image();
328	var animation_interval = {};
329	var animation_timeout = {};
330	particleImage.src = '/common/img/ParticleSmoke.png';
331
332
333	var init = function(c, vc){
334
335		$section = $('#'+c);
336		$section_class = $('#'+c+'_snowfall');
337
338		if($section_class.length == 0)
339			return;
340
341		setTimeout(function(){
342			run();
343		},1000);
344
345		$(window).on('resize',function(){
346			clearAnimation();
347			clearTimeout(animation_timeout);
348			animation_timeout = setTimeout(function(){
349				run();
350			},1000);
351		})
352	};
353
354
355	function clearAnimation(){ //@TODO 브라우저 모바일 사이즈에서 pc 사이즈로 변경시 domElement 찾을수 없다는 에러로 조건 부여함.
356		clearInterval(animation_interval);
357		if(typeof renderer !== 'undefined' && typeof renderer.domElement !== 'undefined')
358			$(renderer.domElement).remove();
359
360	}
361
362	function run(){
363		SCREEN_WIDTH = $section.innerWidth();
364		SCREEN_HEIGHT = $section.innerHeight();
365
366
367		camera = new THREE_IMWEB.PerspectiveCamera(75, SCREEN_WIDTH / SCREEN_HEIGHT, 1, 10000);
368		camera.position.z = 1000;
369		scene = new THREE_IMWEB.Scene();
370		scene.add(camera);
371
372		renderer = new THREE_IMWEB.CanvasRenderer();
373		renderer.setSize(SCREEN_WIDTH, SCREEN_HEIGHT);
374		var material = new THREE_IMWEB.ParticleBasicMaterial({map: new THREE_IMWEB.Texture(particleImage)});
375
376
377		for (var i = 0; i < 150; i++) {
378			particle = new Particle3D(material);
379			particle.position.x = Math.random() * 2000 - 1000;
380			particle.position.y = Math.random() * 2000 - 1000;
381			particle.position.z = Math.random() * 2000 - 1000;
382
383			if(SCREEN_HEIGHT < 1000)
384				particle.scale.x = particle.scale.y = 1.5;
385			else
386				particle.scale.x = particle.scale.y = 1;
387
388			scene.add(particle);
389
390			particles.push(particle);
391		}
392		$section_class.append(renderer.domElement);
393
394		clearInterval(animation_interval);
395		animation_interval = setInterval(loop, 30);
396	}
397
398	function loop() {
399		for (var i = 0; i < particles.length; i++) {
400			var particle = particles[i];
401			particle.updatePhysics();
402
403			with (particle.position) {
404				if (y < -1000) y += 2000;
405				if (x > 1000) x -= 2000;
406				else if (x < -1000) x += 2000;
407				if (z > 1000) z -= 2000;
408				else if (z < -1000) z += 2000;
409			}
410		}
411
412		//	camera.position.x += ( mouseX - camera.position.x ) * 0.05;
413		//camera.position.y += ( -mouseY - camera.position.y ) * 0.05;
414		//	camera.lookAt(scene.position);
415
416		renderer.render(scene, camera);
417	}
418
419	return {
420		'init' : function(c, vc){
421			init(c, vc)
422		}
423	}
424};
425
426var SECTION_FIXED = function(){
427	var $body = $('body');
428	var $section;
429	var $section_next;
430	var $aside;
431	var $aside_inside;
432	var limit = 0;
433	var margin_top = 0;
434	var fixed_class = 'new_fixed_menu_on'; // 고정메뉴 사용시
435	var fixed_diable_class = 'new_fixed_header_disable'; // 스크롤 고정(scrollTofixed) 사용시
436	var fixed_section_disable_class = 'section_fixed_disable'; // 섹션 고정시 추가되는 class && 섹션 가장 상단에 존재할 때 해당 부분 background 위해 추가
437	var shop_view_class = 'shop_view';
438	var booking_view_class = 'booking_view';
439	var fixed_header_active_height = 0;
440	var $fixed_header_active;
441	var $fixed_header_disable;
442	var options = {};
443	var $container = '';
444	var is_section_fixed = false;
445	var is_section_side_fixed = false;
446	var is_mobile_section_fixed = false;
447	var is_one_page = false;
448	var next_id;
449	var prev_id;
450	var ScrollToFixedZIndex = 0;
451	var window_width = $(window).width();
452	var window_height = $(window).height();
453
454	var init = function(c, _d){
455		$section = $('#'+c);
456		$section_next = $section.next('._fixed_section');
457		$aside = $section.find('div[doz_type="aside"]');
458		$aside_inside = $aside.find('div[doz_type="inside"]');
459		$container = $section;
460		$fixed_header_active = $('#doz_header_wrap').find('._new_fixed_header');
461		fixed_header_active_height = $fixed_header_active.length > 0 ? $fixed_header_active.height() : 0;
462		$fixed_header_disable = $('#inline_header_normal').find('._fixed_header_section');
463		options = $.extend(options, _d);
464		is_section_fixed = options.section_fixed == 'Y' && options.side == 'basic';
465		is_section_side_fixed = options.section_side_fixed == 'Y' && options.side != 'basic';
466		is_mobile_section_fixed = options.mobile_section_fixed == 'Y';
467		is_one_page = $body.hasClass('one-page-on');
468		next_id = $section.nextAll('._fixed_section').attr('id');
469		prev_id = $section.prevAll('._fixed_section').attr('id');
470
471		runFixed();
472	};
473
474	var runFixed = function(){
475		$(function(){
476			var resize_flag = window_width < 992 ? "mobile" : "pc";
477
478			var setFixedTime = {};
479
480			var sectionResizeFlag = false;
481			if(typeof ResizeObserver === 'function' && is_section_side_fixed){
482				// 사이드 섹션 고정의 경우 섹션 내에 아코디언 게시판 등이 포함되어 섹션 높이 자체가 변할 경우 고정되어야 하는 범위도 변하므로 ResizeObserver로 체크
483				// IE는 ResizeObserver를 지원하지 않음
484				var sectionResizeObserver = new ResizeObserver(function(entries){
485
486					window_height = $(window).height();
487					var container_height = $container.height();
488
489					clearTimeout(setFixedTime);
490					setFixedTime = setTimeout(function(){
491						if(!sectionResizeFlag){
492							sectionResizeFlag = true;
493							window_width = $(window).width();
494							window_height = $(window).height();
495							resize_flag = window_width < 992 ? "mobile" : "pc";
496							setFixed(resize_flag, function(){
497								sectionResizeFlag = false;
498							});
499						}
500					}, 500);
501				});
502				sectionResizeObserver.observe($section[0]);
503			}else{
504				$(window).on('resize',function(){
505					window_width = $(this).width();
506					window_height = $(this).height();
507					resize_flag = window_width < 992 ? "mobile" : "pc";
508					setFixed(resize_flag);
509				});
510			}
511		});
512
513		setTimeout(function(){
514			setFixed($(window).outerWidth() < 992 ? "mobile" : "pc");
515		},500);
516
517	};
518
519	function setFixed(type, callback){
520		if ( type != 'mobile' ) {
521			$fixed_header_disable = $('#inline_header_normal').find('._fixed_header_section');
522			if( $section.hasClass('mobile_section') ) return;
523		} else {
524			$fixed_header_disable = $('#inline_header_mobile').find('._fixed_header_section');
525			if ( !$section.hasClass('side_basic') || $section.hasClass('mobile_hide') ) return;
526		}
527
528		getMarginTop();
529
530
531		if ( $body.hasClass(fixed_class) ) {
532			if ( type != 'mobile' ) {
533				margin_top = fixed_header_active_height;
534			} else {
535				getMarginTop();
536			}
537		}
538
539		if ( is_section_fixed || is_mobile_section_fixed ) {
540			next_id = getNextId($section, type);
541			if ( next_id !== false ) {
542				limit = $('#'+next_id).offset().top - $container.outerHeight();
543			} else {
544				limit = 0;
545			}
546		}
547
548		if ( is_section_side_fixed && type != 'mobile') {
549			$container = $aside;
550			prev_id = $section.prevAll('._fixed_section.pc_section').attr('id');
551			limit = $section.offset().top + $section.outerHeight() - $aside_inside.outerHeight();
552
553			if ( typeof prev_id !== 'undefined' && $section.prevAll('._fixed_section').length >= 1 ) {
554				if ( $body.hasClass('new_header_overlay') && $body.find('._section_first').hasClass('_fixed_section') ) {
555					margin_top =  $('#' + prev_id).outerHeight();
556				} else {
557					margin_top = margin_top + $('#' + prev_id).outerHeight();
558				}
559			}
560
561			$(window).resize(function(){
562				$aside.css('left', 'auto');
563			});
564		}
565
566		var zoom = 1;
567		if(window_width <= 1024 && window_width >= 767){
568			zoom = 0.85;
569		}
570
571		if ($container.hasClass('doz_aside')) {
572			$container.find('.inside').css({
573				position : 'sticky',
574				top : margin_top,
575				left : 0,
576				zIndex : 100,
577			})
578		} else {
579			$container.trigger('detach.ScrollToFixed');
580			$container.scrollToFixed({
581				'marginTop': margin_top,
582				'limit': limit * zoom,
583				'zoom': zoom,		/* 태블릿 구간 zoom 커스텀에 대응하기 위한 커스텀 속성, body zoom ë°°ì
583œ¨ì„ 넘겨주면 위치 계산 시 반영 */
584				'preFixed': function() {
585					$(this).removeClass('scroll-to-fixed-fixed-end');
586				},
587				'preAbsolute': function() {
588					ScrollToFixedZIndex++;
589					$(this).addClass('scroll-to-fixed-fixed-end');
590					$(this).css({
591						'z-index' : ScrollToFixedZIndex,
592					});
593				}
594			});
595
596			$container.trigger('resize.ScrollToFixed');
597			$container.trigger('scroll.ScrollToFixed');
598		}
599
600		if ( $body.hasClass('new_header_overlay') ) {
601			$body.addClass(fixed_section_disable_class); // 겹치기가 아니라면 해당 클래스 추가
602			if (window.pageYOffset > 0) { // 스크롤이 되어있을 때
603				$body.removeClass(fixed_section_disable_class);
604			}
605		}
606
607		$(window).scroll(function(e) {
608			if ($body.hasClass('new_header_overlay')) {
609				if (window.pageYOffset <= 0 && !$body.hasClass(fixed_section_disable_class)) {
610					$body.addClass(fixed_section_disable_class);
611				}
612			if (window.pageYOffset > 0 && $body.hasClass(fixed_section_disable_class)) {
613				$body.removeClass(fixed_section_disable_class);
614			}
615		}
616		});
617
618		if(typeof callback === 'function'){
619			return callback();
620		}
621
622	}
623
624	var getMarginTop = function(){
625		margin_top = 0;
626		if ( $body.hasClass(shop_view_class) || $body.hasClass(booking_view_class) ) {
627			margin_top = 0;
628		} else {
629			for ( var i = 0; i < $fixed_header_disable.length; i++ ) {
630				var target = $fixed_header_disable[i].getBoundingClientRect();
631				margin_top += target.height;
632			}
633		}
634	};
635
636	var getNextId = function($section, type){
637		if ( is_one_page ) {
638			if ( type == 'mobile' ) {
639				next_id = $section.nextAll('._fixed_section:not(.mobile_hide)').attr('id');
640			} else {
641				next_id = $section.nextAll('._fixed_section.pc_section').attr('id');
642			}
643			if ( typeof next_id === 'undefined' ) {
644				var $next_p_section = $section.parent('._one_page_section').nextAll('._one_page_section');
645				if ( $next_p_section.length > 0 ) {
646					$next_p_section.each(function(){
647						if ( type == 'mobile' ){
648							var $next_f_section = $(this).find('._fixed_section');
649						} else {
650							var $next_f_section = $(this).find('._fixed_section.pc_section');
651						}
652						var next_f_section_id = $next_f_section.attr('id');
653						if ( typeof next_f_section_id !== 'undefined' ) {
654							next_id = next_f_section_id;
655						}
656					});
657				}
658			}
659		} else {
660			if ( type == 'mobile' ) {
661				next_id = $section.nextAll('._fixed_section:not(.mobile_hide)').attr('id');
662			} else {
663				next_id = $section.nextAll('._fixed_section.pc_section').attr('id');
664			}
665			if ( $body.hasClass(shop_view_class) || $body.hasClass(booking_view_class) ) {
666				var find_detail_wrap = $section.nextAll('.section_wrap');
667				find_detail_wrap.each(function(){
668					if ( type == 'mobile' ){
669						var $fixed_tab = $(this).find('#fixed_tab_mobile');
670					} else {
671						var $fixed_tab = $(this).find('#fixed_tab');
672					}
673					var fixed_tab_id = $fixed_tab.attr('id');
674					if ( typeof fixed_tab_id !== 'undefined' ) {
675						next_id = fixed_tab_id;
676					}
677				});
678			}
679		}
680		if( typeof next_id === 'undefined' )
681			return false;
682
683		return next_id;
684	};
685
686	return {
687		'init' : function(c, d){
688			init(c, d)
689		}
690	}
691};

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.