PageSourceSearch

https://aihub.or.kr/static/script/commonContent.js?ver=1790240677622

js aihub.or.kr collected 2026-09-24 09:04:59 UTC 19,403 bytes, 674 lines download raw bytes

1jQuery.expr[':'].focus = function(elem){
2	return elem === document.activeElement && (elem.type || elem.href);
3};
4
5
6$(function(){
7	setSkipNavigation();
8	setMenuAll();
9	setGNB();
10	setHeader();
11	setFamilyLink();
12	$('[data-placeHolder]').length ? setPlaceHolder() : false;
13	$('[data-role=checkAll]').length ? checkAll() : false;
14	$('ul.accordion, ol.accordion').length ? setAccordion() : false;
15	$('span.attach').length ? setAttach() : false;
16	$('span.dateFrom').length ? setPeriod() : false;
17	$('div.tabBox').length ? setTab() : false;
18	$('[data-show]').length ? setVisible() : false;
19	$('a[data-target=layer]').length ? setLayer() : false;
20	$('div.searchWrap').length ? setSearch() : false;
21	$('div.sort').length ? setSort() : false;
22	
23	/* 2023-09 객체 리뉴얼로 스크립트 추가 */
24	$('.objectWrap').length ? objectWrap.init():false;
25});
26
27const objectWrap = {
28	more : function(){
29		const target = '.objectInfoWrap .boxGroup .box';
30		$(document).on('click',target,function(){
31			const btn = '.objectTabBox button';
32			const tabIdx = $(this).data('object-tab') - 1;
33			let top = $('.objectFilterBox').offset().top - 20;
34
35			const winW = $(window).outerWidth();
36			if(winW < 767){
37				top = $('.objectFilterBox .right .tabView').eq(tabIdx).offset().top - 20;
38			}
39			$('html, body').animate({'scrollTop':top});
40			$(btn).eq(tabIdx).trigger('click').focus();
41			return false;
42		});
43	},
44	tab:function(){
45		const target = '.objectTabBox button';
46		$(document).on('click',target,function(){
47			const href= $(this).data('href');
48			$(this).addClass('on').siblings().removeClass('on');
49			$(href).addClass('on').siblings('.tabView').removeClass('on');
50			return false;
51		});
52	},
53	tree : function(){
54		const depth1 = '.kindList .filterTit';
55		const depth2 = '.listView > .kindTit button';
56		const depth3 = '.depth2 > li > .kindTit button';
57		const btnReset = '.objectFilterBox .left .btnReset';
58
59		$(document).on('click',depth1,function(){
60			$(this).toggleClass('on').next('.listView').slideToggle('fast');
61		});
62		
63		$(document).on('click',depth2,function(){
64			$(this).closest('.kindTit').toggleClass('on').next('.depth2').slideToggle('fast');
65			if ($(this).closest('.kindTit').next('.depth2').next().is('ul.depth2')){
66				$(this).closest('.kindTit').next('.depth2').next().slideToggle('fast');
67			}
68		});
69		
70		$(document).on('click',depth3,function(){
71			$(this).closest('.kindTit').toggleClass('on').next('ul').slideToggle('fast');
72		});
73		$(document).on('click',btnReset,function(){
74			$('.kindList :checkbox').each(function(){
75				$(this).prop('checked',false);
76			});
77			return false;
78		});
79
80	},
81	init : function(){
82		objectWrap.more();
83		objectWrap.tab();
84		objectWrap.tree();
85	}
86}
87
88function setSkipNavigation(){
89	if(navigator.userLanguage !== "undefined" && navigator.systemLanguage !== "undefined" && navigator.userAgent.match(/trident/i)) {
90		window.addEventListener("hashchange", function(){
91			var element = document.getElementById(location.hash.substring(1));
92			if(element){
93				if(!/^(?:a|select|input|button|textarea)$/i.test(element.tagName)){
94					element.tabIndex = -1;
95				}
96				element.focus();
97			}
98		}, false);
99	}
100}
101
102function setGNB(){
103	var gnb = $('#gnb');
104	var level1 = $('li > a', gnb);
105	var level2 = $('div > a', gnb);
106	var width = 1023;
107	var mobile = 767;
108	
109	/* 2023-10-25 */
110	$('li', gnb).on('mouseenter',function(){
111		if(width < $(window).outerWidth()){
112			$(this).find('>a').addClass('on');
113		}
114	}).on('mouseleave',function(){
115		if(width < $(window).outerWidth()){
116			$(this).find('>a').removeClass('on');
117		}
118	})
119
120	level1.on('focus mouseenter', function(){
121		if(width < $(window).outerWidth()){
122			gnb.hasClass('on') ? false : gnb.addClass('on');
123			if(!$(this).hasClass('on')){
124				level1.removeClass('on');
125				$(this).addClass('on');
126			}
127		}
128	}).on('click', function(e){
129		if(width >= $(window).outerWidth()){
130			e.preventDefault();
131			e.stopPropagation();
132			gnb.hasClass('on') ? false : gnb.addClass('on');
133			if(!$(this).hasClass('on')){
134				level1.removeClass('on');
135				$(this).addClass('on');
136			}else{
137				mobile >= $(window).outerWidth() ? $(this).removeClass('on') : false;
138			}
139		}
140	});
141
142	level2.on('focus mouseenter', function(){
143		var parent = $(this).parent().prev('a');
144
145		gnb.hasClass('on') ? false : gnb.addClass('on');
146		if(!parent.hasClass('on')){
147			level1.removeClass('on');
148			parent.addClass('on');
149		}
150	});
151
152	/* 2025-09-25 수정 */
153	// $('*').not(level1).not(level2).on('focus click', function(){
154	// 	gnb.hasClass('on') ? gnb.removeClass('on') : false;
155	// 	level1.removeClass('on');
156	// 	console.log('a');
157	// });
158
159	$(document).on('focusin click', function (e) {
160		if(e.originalEvent){
161			if (e && !$(e.originalEvent.target).closest('#gnb').length) {
162				gnb.hasClass('on') ? gnb.removeClass('on') : false;
163				level1.removeClass('on');
164			}
165		}
166	});
167	/* //2025-09-25 수정 */
168
169	gnb.on('mouseleave', function(){
170		if(width < $(window).outerWidth()){
171			gnb.hasClass('on') ? gnb.removeClass('on') : false;
172			level1.removeClass('on');
173		}
174	});
175}
176
177function setHeader(){
178	var header = $('#header');
179
180	$('#header > button').on('click', function(){
181		header.hasClass('on') ? header.removeClass('on') : header.addClass('on');
182	});
183}
184
185function setFamilyLink(){
186	var link = $('#footer span.family a');
187
188	link.last().on('keydown', function(e){
189		if(!e.shiftKey && 9 == e.keyCode){
190			e.preventDefault();
191			link.first().get(0).focus();
192		}
193	}).end().first().on('keydown', function(e){
194		if($(this).hasClass('on') && e.shiftKey && 9 == e.keyCode){
195			e.preventDefault();
196			link.last().get(0).focus();
197		}
198	}).on('click', function(e){
199		e.preventDefault();
200		if($(this).hasClass('on')){
201			$(this).removeClass('on');
202		}else{
203			$(this).addClass('on');
204		}
205	});
206}
207
208function setPlaceHolder(){
209	var ph = $('[data-placeHolder]');
210
211	ph.each(function(){
212		var type = 'password' == $(this).attr('type') ? true : false;
213
214		if(0 == $.trim($(this).val()).length || $(this).val() == $(this).data('placeholder')){
215			$(this).val($(this).data('placeholder')).addClass('placeHolder');
216			if(type){
217				$(this).attr('type', 'text');
218			}
219		}else{
220			$(this).removeClass('placeHolder');
221			if(type){
222				$(this).attr('type', 'password');
223			}
224		}
225		$(this).on('focus', function(){
226			if(0 == $.trim($(this).val()).length || $(this).val() == $(this).data('placeholder')){
227				$(this).val('').removeClass('placeHolder');
228			}
229			if(type){
230				$(this).attr('type', 'password');
231			}
232		}).on('focusout', function(){
233			if(0 == $.trim($(this).val()).length || $(this).val() == $(this).data('placeholder')){
234				$(this).val($(this).data('placeholder')).addClass('placeHolder');
235				if(type){
236					$(this).attr('type', 'text');
237				}
238			}
239		});
240	});
241}
242
243function setSearch(){
244	$('div.searchWrap').each(function(){
245		var box = $(this);
246		var text = $(':text', box);
247		var child = $('*', box);
248		var oTqrget = $('ul', box)[0];
249
250		var observer = new MutationObserver(function(mutations){
251			mutations.forEach(function(mutation){
252				var cnt = $(mutation.target).children().length;
253
254				if(0 == cnt){
255					box.removeClass('on');
256				}else{
257					box.addClass('on');
258				}
259			});
260		});
261
262		observer.observe(oTqrget, {
263			childList : true
264		});
265
266		text.on('focus click keyup', function(){
267			if('' != $.trim($(this).val()) && !text.hasClass('placeHolder') && 0 != box.find('ul').children().length){
268				box.addClass('on');
269			}else{
270				box.removeClass('on');
271			}
272		});
273
274		child.on('focus click', function(e){
275			e.stopPropagation();
276		});
277
278		box.on('mouseleave', function(){
279			if(!text.is(':focus')){
280				box.removeClass('on');
281			}
282		});
283
284		/* 2025-09-25 수정 */
285		// $('*').not(child).on('focus click', function(){
286		// 	box.removeClass('on');
287		// });
288
289		$(document).on('focusin click',function (e) {
290			if(e.originalEvent){
291				if (e && !$(e.originalEvent.target).closest('.searchWrap').length) {
292					box.removeClass('on');
293				}
294			}
295		});
296		/* //2025-09-25 수정 */
297	});
298}
299
300function checkAll(){
301	$('form').on('reset', function(){
302		setTimeout(function(){
303			$('[data-role=checkAll]:checked').prop('checked', false).trigger('click');
304		}, .1);
305	})
306
307	$('[data-role=checkAll]').each(function(e){
308		var check = $(this).parents('label').siblings('label').find(':checkbox').length;
309		var live = 0;
310		var all = $(this);
311
312		if($(this).is(':checked')){
313			$(this).parents('label').addClass('on').siblings('label').find(':checkbox:not(:checked)').trigger('click').parents('label').addClass('on');
314		}
315		$(this).on('change', function(){
316			if($(this).is(':checked')){
317				$(this).parents('label').addClass('on').siblings('label').find(':checkbox:not(:checked)').trigger('click').parents('label').addClass('on');
318			}else{
319				$(this).parents('label').removeClass('on').siblings('label').find(':checkbox:checked').trigger('click').parents('label').removeClass('on');
320			}
321		}).parents('label').siblings('label').find(':checkbox').on('change', function(){
322			if($(this).is(':checked')){
323				$(this).parents('label').addClass('on');
324				if(check == ++live){
325					all.not(':checked').prop('checked', true).parents('label').addClass('on');
326				}
327			}else{
328				$(this).parents('label').removeClass('on');
329				--live;
330				all.prop('checked', false).parents('label').removeClass('on');
331			}
332		});
333	});
334}
335
336function setAccordion(){
337	var button = $('ul.accordion > li > *:first-child button, ol.accordion > li > *:first-child button');
338
339	button.on('click', function(){
340		$(this).parents('li').hasClass('on') ? $(this).parents('li').removeClass('on') : $(this).parents('li').addClass('on').siblings().removeClass('on');
341	});
342}
343
344function setAttach(){
345	$(document).on('change', 'span.attach input[type="file"]', function(){
346		$(this).siblings('input[type="text"]').val($(this).val().split('/').pop().split('\\').pop());
347	}).on('click', 'span.attach button', function(){
348		$(this).siblings('input[type="file"]').trigger('click');
349	});
350}
351
352function setPeriod(){
353	var mobile = 767;
354	var image = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB8AAAAeCAMAAADjLDWuAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACpQTFRF7/P1ZW5yo7G3dH2AdX2BcHl9hIyQcHh8hY2Rx83Px8zPz9TWztPWyM3Q7dPJ7QAAAFhJREFUeNpiYMIPGPADOsqzcWCykOUZGTFZcHkuZkYUwMyJKs/OiAZYSZNnxACkyqP6mxx5dEyq/OC2nxtZmgddnhk9eFlQ5TlZ0KR56Z5+yZQnkD8BAgwAxCsB8sJN47kAAAAASUVORK5CYII=';
355
356	if(mobile >= $(window).outerWidth()){
357		image = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADQAAAA0CAMAAADypuvZAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAAxQTFRF7/P1Zm9z////o7G3kd5dbgAAAFBJREFUeNpiYCYDMJCliXQwqgmnJkYgICAypDQx4gPYNTESAqOaaKGJCRcY4pqgNCY1hDWNBvlokFOoiT4FC1kVAJmaRtsR9NFEt5YlQIABADDJCR/VMm74AAAAAElFTkSuQmCC';
358	}
359
360	$('span.dateFrom input').each(function(){
361		var idx = $('span.dateFrom input').index($(this));
362		$(this).datepicker({
363			showOn : 'button',
364			buttonImage : image,
365			buttonImageOnly : false,
366			buttonText : '시작일 선택',
367			changeYear : false,
368			changeMonth : false,
369			yearRange : '2001:+0',
370			closeText : '닫기',
371			showButtonPanel : false,
372			onClose : function(selectedDate){
373				$('span.dateTo input').eq(idx).datepicker('option', 'minDate', selectedDate);
374			}
375		}, $.datepicker.regional['ko']);
376	}).mask('0000-00-00', { placeholder : "_ _ _ _-_ _-_ _" });
377
378	$('span.dateTo input').each(function(){
379		var idx = $('span.dateTo input').index($(this));
380		$(this).datepicker({
381			showOn : 'button',
382			buttonImage : image,
383			buttonImageOnly : false,
384			buttonText : '종료일 선택',
385			changeYear : false,
386			changeMonth : false,
387			yearRange : '2001:+0',
388			closeText : '닫기',
389			showButtonPanel : false,
390			onClose : function(selectedDate){
391				$('span.dateFrom input').eq(idx).datepicker('option', 'maxDate', selectedDate);
392			}
393		}, $.datepicker.regional['ko']);
394	}).mask('0000-00-00', { placeholder : "_ _ _ _-_ _-_ _" });
395
396	$('button.setDate').on('click', function(){
397		var day = $(this).data('date');
398		if(0 > day){
399			$(this).siblings('span.dateFrom').children('input').datepicker('setDate', null).datepicker('option', 'maxDate', null);
400			$(this).siblings('span.dateTo').children('input').datepicker('setDate', null).datepicker('option', { 'minDate' : null, 'maxDate' : null });
401		}else if(0 == day){
402			var today = new Date();
403
404			$(this).siblings('span.dateFrom').children('input').datepicker('setDate', today).datepicker('option', 'maxDate', 0);
405			$(this).siblings('span.dateTo').children('input').datepicker('setDate', today).datepicker('option', { 'minDate' : 0, 'maxDate' : today });
406		}else{
407			var today = new Date();
408			var from = new Date();
409			from.setDate(from.getDate() - day);
410
411			$(this).siblings('span.dateFrom').children('input').datepicker('setDate', from).datepicker('option', 'maxDate', today);
412			$(this).siblings('span.dateTo').children('input').datepicker('setDate', today).datepicker('option', { 'minDate' : from, 'maxDate' : today });
413		}
414	});
415}
416
417function setLayer(){
418	var link = $('a[data-target="layer"]');
419	var veil = $('div.pageDisabled');
420	var showLayer = _getParam('showLayer') ? _getParam('showLayer') : false;
421	var clicked;
422	var mobile = 767;
423
424	link.off().on('click', function(e){
425		e.preventDefault();
426		_showLayer($($(this).attr('href')));
427		clicked = e.target;
428	});
429
430	if(showLayer){
431		_showLayer($('#' + showLayer));
432	}
433
434	function _showLayer(target){
435		var page = target;
436		var layers = $('div.layer:visible').length;
437		var zIndex = parseInt(page.css('zIndex'));
438
439		if(mobile < $(document).outerWidth()){
440			page.css({
441				'margin-top': parseInt(-page.outerHeight() / 2),
442				'margin-left': parseInt(-page.outerWidth() / 2)
443			});
444		}else{
445			page.css({
446				'margin-top': 0,
447				'margin-left': 0
448			});
449		}
450
451		if(0 != layers){
452			zIndex = zIndex + 2 * layers;
453			page.css('zIndex', zIndex);
454			veil.css('zIndex', zIndex - 1);
455		}
456
457		veil.show();
458		page.fadeIn().off().on('click', '[data-action=close]', function(e){
459			e.preventDefault();
460			if(0 != layers){
461				page.css('zIndex', zIndex - 2);
462				veil.css('zIndex', zIndex - 3);
463			}else{
464				veil.hide();
465			}
466			page.hide();
467			clicked.focus();
468		}).find('div.buttonBox:last > :last').off().on('keydown', function(e){
469			if(!e.shiftKey && 9 == e.keyCode) {
470				e.preventDefault();
471				page.find('header button').focus();
472			}
473		}).end().find('header button').off().on('keydown', function(e){
474			if(e.shiftKey && 9 == e.keyCode) {
475				e.preventDefault();
476				page.find('div.buttonBox:last > :last').focus();
477			}
478		});
479	}
480}
481
482function setTab(){
483	var tab = $('div.tabBox');
484
485	tab.each(function(){
486		var link = $('> :header > a', $(this));
487		var indexName = 'idx' + $(this).data('indexname');
488		var tabID = _getParam(indexName) ? _getParam(indexName) : 0;
489/*
490		var header = $('> :header', $(this));
491		var headerSize = header.length;
492
493		header.filter(function(index){
494			var pLeft = 100 / headerSize * index;
495			$(this).css('left', pLeft + '%');
496		});
497*/
498		link.on('click', function(e){
499			e.preventDefault();
500			link.parent().removeClass('on');
501			$($(this).parent().addClass('on').end().attr('href')).show().siblings('div:not(.const)').hide();
502			if($(this).parents('div:last').hasClass('layer')){
503				_setLayerPosition($(this).parents('div:last').attr('id'));
504			}
505		}).eq(tabID).trigger('click');
506	});
507}
508
509
510function setVisible(){
511	var origin = $('[data-show]');
512
513	origin.each(function(){
514		var type = $(this).prop('tagName').toLowerCase();
515
516		if('option' == type){
517			$(this).parent().on('change', function(){
518				if($('option:selected', this).data('show')){
519					_setTargetShow($('option:selected', this).data('show'));
520				}
521				if($('option:selected', this).data('hide')){
522					_setTargetHide($('option:selected', this).data('hide'));
523				}
524			});
525		}else{
526			if('checkbox' == $(this).prop('type').toLowerCase()){
527				$(this).on('change', function(){
528					var target = $(this).data('show');
529
530					$(this).prop('checked') ? _setTargetShow(target) : _setTargetHide(target);
531				});
532			}else if('radio' == $(this).prop('type').toLowerCase()){
533				var radio = $('[type=radio][name=' + $(this).prop("name") + ']');
534
535				radio.on('click', function(){
536					var target = $(this).filter(':checked').data('show');
537					if(target){
538						_setTargetShow(target);
539					}
540					radio.filter(':not(:checked)').each(function(){
541						if($(this).data('show')){
542							_setTargetHide($(this).data('show'));
543						}
544					});
545				});
546			}
547		}
548	});
549}
550
551function setMenuAll(){
552	var target = '#menuAll';
553
554	$('a[href="' + target + '"]').on('click', function(e){
555		var current = e;
556		current.preventDefault();
557
558		if(!$(this).hasClass('on')){
559			$(this).addClass('on');
560
561			$(target).addClass('on').find('a:last').off().on('keydown', function(e){
562				if(!e.shiftKey && 9 == e.keyCode){
563					e.preventDefault();
564					current.currentTarget.focus();
565				}
566			}).end().find('a:first').off().on('keydown', function(e){
567				if(e.shiftKey && 9 == e.keyCode){
568					e.preventDefault();
569					current.currentTarget.focus();
570				}
571			});
572
573			$(this).on('keydown', function(e){
574				if($(this).hasClass('on') && e.shiftKey && 9 == e.keyCode){
575					e.preventDefault();
576					$(target).find('a:last').get(0).focus();
577				}
578			});
579		}else{
580			$(this).removeClass('on');
581			$(target).removeClass('on');
582		}
583	});
584}
585
586function setSort(){
587	var list = $('div.sort a');
588	var button = $('div.sort button');
589
590	list.last().on('keydown', function(e){
591		if(!e.shiftKey && 9 == e.keyCode){
592			e.preventDefault();
593			button.focus();
594		}
595	});
596
597	button.on('keydown', function(e){
598		if($(this).hasClass('on') && e.shiftKey && 9 == e.keyCode){
599			e.preventDefault();
600			list.last().focus();
601		}
602	}).on('click', function(){
603		if($(this).hasClass('on')){
604			$(this).removeClass('on');
605		}else{
606			$(this).addClass('on');
607		}
608	});
609}
610
611function showLoader(){
612	var loader = $('div.loader');
613	var veil = $('div.pageDisabled');
614
615	veil.css('z-index', 9900).show();
616	loader.show();
617}
618
619function hideLoader(){
620	var loader = $('div.loader');
621	var veil = $('div.pageDisabled');
622
623	veil.css('z-index', 7777).hide();
624	loader.hide();
625}
626
627function _setTargetShow(target){
628	$('.' + target).show();
629	setPlaceHolder();
630}
631
632function _setTargetHide(target){
633	$('.' + target).hide();
634}
635
636function _setLayerPosition(layer){
637	var target = $('#' + layer);
638	var tHeight = target.outerHeight();
639
640	target.css({
641		marginTop : -(tHeight / 2) + 'px'
642	});
643}
644
645function _getParam(param){
646	var vars = {};
647
648	window.location.href.replace(/[?&]+([^=&]+)=?([^&]*)?/gi, function(m, key, value){
649			vars[key] = value !== undefined ? value : '';
650		}
651	);
652
653	if(param){
654		return vars[param] ? vars[param] : null;
655	}
656
657	return vars;
658}
659
660function showSaveLoader(){
661	var loader = $('div.saveLoader');
662	var veil = $('div.pageDisabled');
663
664	veil.css('z-index', 9900).show();
665	loader.show();
666}
667
668function hideSaveLoader(){
669	var loader = $('div.saveLoader');
670	var veil = $('div.pageDisabled');
671
672	veil.css('z-index', 7777).hide();
673	loader.hide();
674}

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.