PageSourceSearch

https://myloofit.io/js/common.js?2026052701

js myloofit.io collected 2026-09-24 15:03:45 UTC 12,031 bytes, 509 lines download raw bytes

1// 모바일 메뉴
2$(document).ready(function() {
3    // 메뉴 열기
4    $('#menu_open_btn').on('click', function() {
5        $('#mobile_menu').addClass('active');
6        $('#mobile_menu_overlay').addClass('active');
7        $('body').css('overflow', 'hidden');
8    });
9
10    // 메뉴 닫기
11    function closeMobileMenu() {
12        $('#mobile_menu').removeClass('active');
13        $('#mobile_menu_overlay').removeClass('active');
14        $('body').css('overflow', '');
15    }
16
17    $('#mobile_menu_close').on('click', closeMobileMenu);
18    $('#mobile_menu_overlay').on('click', closeMobileMenu);
19
20    // 메뉴 아이템 클릭 시 메뉴 닫기
21    $('#mobile_menu a').on('click', function() {
22        closeMobileMenu();
23    });
24});
25
26// 레이아웃
27$(window).on('resize', function() {
28    const windowWidth = $(window).width();
29    const maxWidth = 1280;
30    const widthPercentage = 0.9;
31
32    let calculatedWidth = windowWidth * widthPercentage;
33    if (calculatedWidth > maxWidth) {
34        calculatedWidth = maxWidth;
35    }
36
37    const marginLeft = (windowWidth - calculatedWidth) / 2;
38
39    $('body').css('--margin-left', marginLeft + 'px');
40    $('body').css('--margin-right', marginLeft + 'px');
41});
42$(document).ready(function() {
43    $(window).trigger('resize');
44});
45
46function loading_show(){
47	$(".loading-bar").addClass("show");
48}
49function loading_hide(){
50	$(".loading-bar").removeClass("show");
51}
52$(document).on("click", ".ed_btn_close", function () {
53	$("body").removeClass("hidden")
54	$(".modal").removeClass("show")
55})
56function alert_modal(msg, focus_obj, url, closeText=""){
57	if(msg){
58		$("body").addClass("hidden");
59		$("#common_modal").addClass("show");
60		$("#common_modal .modal_title").html(decodeURIComponent(msg));
61		if(closeText){
62			$("#common_modal .btn.close_btn").html(closeText);
63		}
64		if(url){
65			$("#common_modal").removeClass("back-close");
66		}
67		
68		$("#common_modal .btn.close_btn").off('click').on("click",function(){
69			$("body").removeClass("hidden");			
70			$("#common_modal.modal").not(".direct").removeClass("show");
71
72			if(focus_obj){
73				$(focus_obj).focus();
74			}
75
76			if(url){
77				if(url=="reload"){
78					location.reload();
79				}else if(url=="back"){
80					history.back();
81				}else if(url=="close"){
82					window.close();
83				}else{
84					location.href=decodeURIComponent(url);
85				}
86			}
87		});
88	}else if(url){
89		if(url=="reload"){
90			location.reload();
91		}else{
92			location.href=decodeURIComponent(url);
93		}
94	}
95}
96
97function confirm_modal_super(msg, fnc_obj, url, title1, title2){
98	if(title1){
99		$("#confirm_modal .modal_btnbox .btn.process").html(title1);
100	}
101
102	if(title2){
103		$("#confirm_modal .modal_btnbox .btn.close_btn").html(title2);
104	}
105
106	$("body").addClass("hidden");
107	$("#confirm_modal").addClass("show");
108	$("#confirm_modal .modal_title").html(decodeURIComponent(msg));
109
110	$("#confirm_modal .btn.process").off('click').on("click",function(){
111		$("body").removeClass("hidden");			
112		$("#confirm_modal.modal").removeClass("show");
113
114		if (typeof fnc_obj === 'string' && fnc_obj.trim() !== '') {
115			try {
116				// 문자로 넘어온 fnc_obj 함수 실행
117				eval(fnc_obj);
118			} catch (e) {
119				console.error('Error executing function:', e);
120			}
121		}
122		
123	});
124	$("#confirm_modal .btn.close_btn").off('click').on("click",function(){
125		$("body").removeClass("hidden");			
126		$("#confirm_modal.modal").removeClass("show");
127
128		if(url){
129			if(url=="reload"){
130				location.reload();
131			}else{
132				location.href=decodeURIComponent(url);
133			}
134		}
135	});
136}
137
138// 아코디언 기능
139(function ($) {
140
141	const lnbUI = {
142		click: function (target, speed) {
143			let _self = this,
144				$target = $(target);
145			_self.speed = speed || 400;
146
147			$target.each(function () {
148				if (findChildren($(this))) {
149					return;
150				}
151				$(this).addClass('noDepth');
152			});
153
154			function findChildren(obj) {
155				return obj.find('> ul').length > 0;
156			}
157
158			$target.on('click', '.acc_tit', function (e) {
159				e.stopPropagation();
160				let $this = $(this),
161					$depthTarget = $this.next(),
162					$siblings = $this.parent().siblings();
163
164				$this.parent('li').find('ul li').removeClass('show');
165				$siblings.removeClass('show');
166				$siblings.find('ul').slideUp(400);
167
168				if ($depthTarget.css('display') == 'none') {
169					_self.activeOn($this);
170					$depthTarget.slideDown(_self.speed);
171				} else {
172					$depthTarget.slideUp(_self.speed);
173					_self.activeOff($this);
174				}
175
176			})
177
178		},
179		activeOff: function ($target) {
180			$target.parent().removeClass('show');
181		},
182		activeOn: function ($target) {
183			$target.parent().addClass('show');
184		},
185
186	};
187
188	// navbox
189	$(function () {
190		lnbUI.click('.accordion li', 400)
191	});
192
193}(jQuery));
194
195
196// 탭
197$(document).ready(function () {
198	$(".tab_wrap .tab_nav").click(function () {
199		let clickedTab = $(this);
200		let tabWrap = clickedTab.closest(".tab_wrap");
201		let allTabs = tabWrap.find(".tab_nav");
202		let allContents = tabWrap.find(".tab_cont");
203		let idx = allTabs.index(clickedTab);
204
205		allTabs.removeClass("on");
206		clickedTab.addClass("on");
207		allContents.removeClass("on");
208		allContents.eq(idx).addClass("on");
209	});
210});
211
212
213// datepicker
214$(document).ready(function () {  
215  if ($(".datepicker").length) {
216    $.datepicker.setDefaults({
217      closeText: "닫기",
218      prevText: "이전달",
219      nextText: "다음달",
220      currentText: "오늘",
221      monthNames: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
222      monthNamesShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
223      dayNames: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"],
224      dayNamesShort: ["S", "M", "T", "W", "T", "F", "S"],
225      dayNamesMin: ["S", "M", "T", "W", "T", "F", "S"],
226      weekHeader: "주",
227      dateFormat: "yy-mm-dd",
228      firstDay: 0,
229      isRTL: false,
230      showMonthAfterYear: true,
231	  showOtherMonths: true,
232      yearSuffix: "년"
233    });
234
235    $(".datepicker").datepicker({
236      maxDate: 'today',
237    });
238  }
239});
240
241
242// 모달 공통
243$(".modal .close_btn").click(function () {
244	$("body").removeClass("hidden")
245	$(".modal").removeClass("show")
246})
247// $(document).mouseup(function (e) {
248// 	if ($(".modal .modal_box").has(e.target).length === 0 && $(".ui-datepicker").has(e.target).length === 0) {
249// 		$("body").removeClass("hidden")
250// 		$(".modal").removeClass("show")
251// 	}
252// });
253
254
255// 팝업 공통
256$(".popup .pop_close").click(function () {
257	$(this).closest(".popup").removeClass("show")
258})
259// $(document).mouseup(function (e) {
260// 	if ($(".popup").has(e.target).length === 0 ) {
261// 		$(".popup").removeClass("show")
262// 	}
263// });
264
265
266// 북마크 버튼
267$(document).on("click", ".bookmark_btn", function () {
268	// console.log('::'+$(this).data("id"));
269	$(this).toggleClass("on")
270	$('.bookmark_btn_'+$(this).data("id")).toggleClass("on")
271})
272
273
274
275// 메인
276const ms1_swiper = new Swiper('.ms1_swiper', {
277	observer: true,
278	observeParents: true,
279	speed:500,
280	slidesPerView: 'auto',
281	spaceBetween: 16,
282	grabCursor: true,
283	autoplay: {
284		delay: 2000, // 2초마다 자동 이동
285		disableOnInteraction: false, // 사용자가 조작해도 자동 재생 계속
286	},
287    navigation: {
288      nextEl: ".ms1_swiper .next_btn",
289      prevEl: ".ms1_swiper .prev_btn",
290    },
291	breakpoints: {
292		1080: {
293			spaceBetween: 20,
294		},
295	},
296})
297const ms1_banner = new Swiper('.ms1_banner', {
298	observer: true,
299	observeParents: true,
300	speed:500,
301	direction: 'horizontal',
302	slidesPerView: 'auto',
303	spaceBetween: 16,
304	breakpoints: {
305		1080: {
306			direction: 'horizontal',
307			spaceBetween: 0,
308		},
309		1181: {
310			direction: 'vertical',
311			spaceBetween: 0,
312		},
313	},
314})
315const ms1_latest1 = new Swiper('.ms1_latest1', {
316	observer: true,
317	observeParents: true,
318	direction: 'vertical',
319	loop: true,
320	speed:500,
321	autoplay: {
322		delay: 4000,
323		disableOnInteraction: false,
324	},
325    navigation: {
326      nextEl: ".ms1_latest1_box .next_btn",
327      prevEl: ".ms1_latest1_box .prev_btn",
328    },
329})
330const ms1_latest2 = new Swiper('.ms1_latest2', {
331	observer: true,
332	observeParents: true,
333	direction: 'vertical',
334	loop: true,
335	speed:500,
336	autoplay: {
337		delay: 5000,
338		disableOnInteraction: false,
339	},
340    navigation: {
341      nextEl: ".ms1_latest2_box .next_btn",
342      prevEl: ".ms1_latest2_box .prev_btn",
343    },
344})
345const ms2_swiper = new Swiper('.ms2_swiper', {
346	observer: true,
347	observeParents: true,
348	speed:500,
349	slidesPerView: 'auto',
350	spaceBetween: 16,
351	grabCursor: true,
352	autoplay: {
353		delay: 3000,
354		disableOnInteraction: false,
355	},
356    navigation: {
357      nextEl: ".ms2 .next_btn",
358      prevEl: ".ms2 .prev_btn",
359    },
360	breakpoints: {
361		1080: {
362			slidesPerView: 4,
363			spaceBetween: 18,
364		},
365	},
366})
367const ms3_swiper = new Swiper('.ms3_swiper', {
368	observer: true,
369	observeParents: true,
370	speed:500,
371	slidesPerView: 'auto',
372	spaceBetween: 16,
373	grabCursor: true,
374	autoplay: {
375		delay: 3000,
376		disableOnInteraction: false,
377	},
378    navigation: {
379      nextEl: ".ms3 .next_btn",
380      prevEl: ".ms3 .prev_btn",
381    },
382	breakpoints: {
383		1080: {
384			slidesPerView: 4,
385			spaceBetween: 18,
386		},
387	},
388})
389
390// 상세
391const ds3_swiper = new Swiper('.ds3_swiper', {
392	observer: true,
393	observeParents: true,
394	speed:500,
395	slidesPerView: 'auto',
396	spaceBetween: 16,
397	grabCursor: true,
398    navigation: {
399      nextEl: ".ds3 .next_btn",
400      prevEl: ".ds3 .prev_btn",
401    },
402	breakpoints: {
403		1080: {
404			slidesPerView: 4,
405			spaceBetween: 18,
406		},
407	},
408})
409const ds4_swiper = new Swiper('.ds4_swiper', {
410	observer: true,
411	observeParents: true,
412	speed:500,
413	slidesPerView: 'auto',
414	spaceBetween: 0,
415	breakpoints: {
416		1080: {
417			slidesPerView: 3,
418			spaceBetween: 0,
419		},
420	},
421})
422
423// 회원가입
424$(document).ready(function () {
425  const agreeAll = $('.join_wrap #agreeAll');
426  const checks = $('.join_wrap #termsOfUse, .join_wrap #privacyPolicy');
427  
428  agreeAll.on('change', function () {
429    checks.prop('checked', $(this).is(':checked'));
430  });
431  
432  checks.on('change', function () {
433    const allChecked = checks.length === checks.filter(':checked').length;
434    agreeAll.prop('checked', allChecked);
435  });
436});
437
438function validateEmail(email) {
439	// Regular expression for email validation
440	var regex = /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;
441	// Return true if email matches regex, false otherwise
442	return regex.test(email);
443}
444
445const mem_pass_regex = /^.*(?=.{8,20})(?=.*[0-9])(?=.*[a-z]).*$/;
446
447const autoHyphenPhone = (target) => {
448	target.value = target.value
449	  .replace(/[^0-9]/g, '')
450	  .replace(/^(\d{2,3})(\d{3,4})(\d{4})$/, `$1-$2-$3`);
451   }
452   
453function validatePhone(hp){	
454	if(hp == ""){		
455		return true;	
456	}	
457
458	var phoneRule = /^(010)-?[0-9]{3,4}-?[0-9]{4}$/;
459	return phoneRule.test(hp);
460}
461
462//한자 체크 정규식
463var fullHanjaRegex = /^[\u3400-\u4DBF\u4E00-\u9FFF\uF900-\uFAFF]+$/;
464//영문 체크 정규식
465var fullEngRegex = /^[a-zA-Z\s]+$/;
466var fullNumRegex = /^[0-9]+$/;
467
468function fnc_loofit_view(recruit_no, setup_no){
469	// console.log(recruit_no, setup_no);
470
471	if(!recruit_no || !setup_no) {
472		alert_modal("채용번호가 없습니다.");
473		return false;
474	}
475	$.ajax({
476		url: "/main/loofit_view",
477		type: "get",
478		data: "recruit_no=" + recruit_no + "&setup_no=" + setup_no,
479		success: function(response){
480			// console.log(response);
481			response = JSON.parse(response);
482			if(response.result == 1){
483				$("#recruit_view_modal").html(response.data.page);
484				$("#recruit_view_modal .modal .modal_box").css({
485					'transition': 'none'
486				}).css({
487					'top': 'auto',
488					'left': '0%',
489					'transform': 'translateX(0%) translateY(100%)',
490					'transition-property': 'transform',
491					'transition-duration': '0.3s',
492					'transition-timing-function': 'cubic-bezier(0.25, 0.46, 0.45, 0.94)'
493				});
494
495				// 모달 표시
496				$("#recruit_view_modal").show(0);
497
498				// 약간의 지연 후 transform 변경
499				setTimeout(() => {
500					$("#recruit_view_modal .modal .modal_box").css('transform', 'translateX(0%) translateY(0)');
501				}, 100);
502			}else{
503				alert_modal(response.msg);
504			}
505		},error: function(xhr, status, error){
506			console.log(xhr.responseText);
507		}
508	});
509}

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.