(function() { "use strict"; var DateUtil = { defaultDateFormat: 'M.d(E)', yearMonthDateFormat: 'yy.MM', getKorDay : function(date, option) { var _option = { prefix : "(", postFix : ")" } if (date) { var eOption = $.extend(true, _option, option); var dayStr = ["일", "월", "화", "수", "목", "금", "토"]; return eOption.prefix + dayStr[date.getDay()] + eOption.postFix; } else { return ""; } }, getLddiDateFormat: function(stDt, endDt, evntPrdCd, evntPrdExpsrYn, isDetail){ if (evntPrdExpsrYn && evntPrdExpsrYn === 'N') { return ''; } if (stDt && stDt.length > 7) { stDt = stDt.substring(0,4)+'-'+stDt.substring(4,6)+'-'+stDt.substring(6,8); } else { stDt = ''; } if (endDt && endDt.length > 7) { endDt = endDt.substring(0,4)+'-'+endDt.substring(4,6)+'-'+endDt.substring(6,8); } else { endDt = ''; } if (evntPrdCd) { if (evntPrdCd === 'C01303') { // month return this.format(new Date(stDt), DateUtil.yearMonthDateFormat); } else if (evntPrdCd === 'C01302') { // day return this.format(new Date(stDt), DateUtil.defaultDateFormat); } else if (evntPrdCd === 'C01304') { // 시즌off stDt = this.format(new Date(stDt), DateUtil.defaultDateFormat); if (isDetail) { return stDt + ' ~ / 최초 판매가 기준'; } else { return stDt + ' ~ '; } } else if (evntPrdCd === 'C01305'){ return '최초 판매가 기준'; } else if (evntPrdCd === 'C01306'){ return this.format(new Date(stDt), DateUtil.defaultDateFormat) + " OPEN"; } } if (stDt) { var formatStDt = this.format(new Date(stDt), DateUtil.defaultDateFormat); if (stDt === endDt) { return formatStDt; } else if(endDt) { var formatEndDt = this.format(new Date(endDt), DateUtil.defaultDateFormat); return formatStDt + ' ~ ' + formatEndDt; } else { return formatStDt; } } return ''; }, format : function(data, f) { if (!data.valueOf()) return ""; var weekName = ["일", "월", "화", "수", "목", "금", "토"]; var d = data; function zf(str, len) { str += ""; return str.length >= len ? str :new Array(len - str.length + 1).join('0')+str;//남는 길이만큼 0으로 채움 } return f.replace(/(yyyy|yy|MM|M|dd|d|E|hh|mm|ss|a\/p)/gi, function($1) { switch ($1) { case "yyyy": return d.getFullYear(); case "yy": return zf((d.getFullYear() % 1000), 2); case "MM": return zf((d.getMonth() + 1), 2); case "M": return zf((d.getMonth() + 1), 1); case "dd": return zf(d.getDate(), 2); case "d": return zf(d.getDate(), 1); case "E": return weekName[d.getDay()]; case "HH": return zf(d.getHours(), 2); case "hh": return zf(((h = d.getHours() % 12) ? h : 12), 2); case "mm": return zf(d.getMinutes(), 2); case "ss": return zf(d.getSeconds(), 2); case "a/p": return d.getHours() < 12 ? "오전" : "오후"; default: return $1; } }); } }; /** * 클립보드 복사 기능 * /resources/domain/lib/clipboard.min.js 추가 필요 */ var ClipboardUtil = { init: function(btn_id, input_id, successCallback, failCallback){ var clipboard = new ClipboardJS('#'+btn_id, { text: function() { return $('#'+input_id).val(); } }); clipboard.on('success', function(e) { if (successCallback) { successCallback(); } else { if (btn_id == 'couponCopyBtn') { window.__dim.set(function() { alert("쿠폰번호가 복사되었습니다.") }); } else { window.__dim.set(function() { alert("클립보드에 복사되었습니다.") }); } } }); clipboard.on('error', function(e) { if (failCallback) { failCallback(); } else { if (btn_id == 'couponCopyBtn') { alert("사파리 브라우저에서는 해당 기능이 지원되지 않습니다.\n쿠폰번호를 길게 눌러 직접 복사 후 이용해주세요."); } else { alert("사파리 브라우저에서는 해당 기능이 지원되지 않습니다.\n텍스트를 길게 눌러 직접 복사 후 이용해주세요."); } } }); } }; var StringUtil = { getByteLength: function(str, bytePerUnicode) { var byte = bytePerUnicode || 3; var b = 0; var c = ''; for(var i = 0; c = str.charCodeAt(i++); b += c >> 11 ? byte : c >> 7 ? 2 : 1); return b; }, nl2br: function(str){ return str.replace(/\n/g, "
"); }, /* 핸드폰 번호 유효성 체크 */ cellPhoneNoCheck: function(phoneNo) { phoneNo = phoneNo.replace(/\-/g,''); // var regExpNum = /^01([0|1|6|7|8|9]?)-?([0-9]{3,4})-?([0-9]{4})$/; var regExpNum = /^(01[16789])\d{3,4}\d{4}|(010)\d{4}\d{4}$/; if (!phoneNo) { return false; } else { phoneNo = $.trim(phoneNo); if (!regExpNum.test(phoneNo) || phoneNo.length < 10) { return false; } } return true; }, /* 일반 전화번호 체크 */ phoneNoCheck: function(phoneNo) { var regExpNum = /^[0-9]{2,3}-?([0-9]{3,4})-?([0-9]{4})$/; if (!phoneNo) { return false; } else { phoneNo = $.trim(phoneNo); if (!regExpNum.test(phoneNo)) { return false; } } return true; }, /* 토탈 전화번호 체크 */ totalPhoneNoCheck: function(phoneNo) { var phoneNo = phoneNo.replace(/\-/g,''); var mNum = this.pregMatch(/^(?:(010-?\d{4})|(01[1|6|7|8|9]-?\d{3,4}))-?(\d{4})$/, phoneNo); var tNum = this.pregMatch(/^(0(2|3[1-3]|4[1-4]|5[1-5]|6[1-4]))-?(\d{3,4})-?(\d{4})$/, phoneNo); var aNum = this.pregMatch(/^(15|16|18)[0-9]{2}-?[0-9]{4}$/, phoneNo); var bNum = this.pregMatch(/^(02|0[3-6]{1}[1-5]{1})-?(15|16|18)[0-9]{2}-?[0-9]{4}$/, phoneNo); var iNum = this.pregMatch(/^(070|(050[2-8]{0,1})|080|013)-?([0-9]{3,4})-?[0-9]{4}$/, phoneNo); var returnVal; if (mNum != false || tNum != false || aNum != false || bNum != false || iNum != false) { returnVal = true; } else { returnVal = false; } return returnVal; }, /* 이메일 체크 */ emailCheck: function(email) { var regExpEmail = /^[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*@[0-9a-zA-Z]([-_\.]?[0-9a-zA-Z])*\.[a-zA-Z]{2,3}$/i; if (!email) { return false; } else { email = $.trim(email); if (!regExpEmail.test(email)) { return false; } } return true; }, phoneFormat: function(number){ var formatNum = ''; if (number.length == 11) { formatNum = number.replace(/(\d{3})(\d{4})(\d{4})/, '$1-$2-$3'); } else if (number.length == 8) { formatNum = number.replace(/(\d{4})(\d{4})/, '$1-$2'); } else if (number.length == 7) { formatNum = number.replace(/(\d{3})(\d{4})/, '$1-$2'); } else if (number.length == 12) { formatNum = number.replace(/(\d{4})(\d{4})(\d{4})/, '$1-$2-$3'); } else { if (number.indexOf('02') == 0) { formatNum = number.replace(/(\d{2})(\d{3,4})(\d{4})/, '$1-$2-$3'); } else { formatNum = number.replace(/(\d{3})(\d{3,4})(\d{4})/, '$1-$2-$3'); } } return formatNum; }, isEmpty: function (str) { if (str == null || str == undefined || str == "null" || str == "undefined" || str == "") return true; else return false; }, hypenFormat : function (obj) { var offset = $(obj)[0].selectionStart; // 커서위치 var val = $(obj).val().replace(/[^0-9]/g,""); var len = val.length; if (len > 11) { val = val.substr(0, 11); } if (len > 3 && len < 7) { val = val.replace(/([0-9]{3})([0-9]+)/, "$1-$2"); } else if ( len > 6 && len < 11) { val = val.replace(/([0-9]{3})([0-9]{3})([0-9]+)/, "$1-$2-$3"); } else if (len > 10) { val = val.replace(/([0-9]{3})([0-9]{4})([0-9]+)/, "$1-$2-$3"); } $(obj).val(val); offset += val.replace(/[0-9]/gi, '').length; $(obj)[0].selectionStart = offset; $(obj)[0].selectionEnd = offset; }, noHypenFormat : function (obj) { var val = $(obj).val().replace(/[^0-9]/g,""); var len = val.length; if (val.indexOf('050') == 0) { if (len > 12) { val = val.substr(0, 12); } } else { if (len > 11) { val = val.substr(0, 11); } } $(obj).val(val); }, pregMatch: function (regExpNum, phoneNo) { if (!phoneNo) { return false; } else { phoneNo = $.trim(phoneNo); if (!regExpNum.test(phoneNo)) { return false; } } return true; }, maxLengthCheck: function (obj) { var val = $(obj).val(); var len = val.length; var maxLen = obj.maxLength; if (len > maxLen) { val = val.substring(0, maxLen); } $(obj).val(val); }, /** * 연락처 정규식 검증 및 Hyphen 자동 완성 2022.11.23(리뉴얼) * @param event */ phoneNumberFormatCheck: function(event) { // Hyphen포함 최대 13자리까지 입력 가능 if (event.target.value.length > 13) { event.target.value = event.target.value.substring(0, 13); return; } // 서울(02)일 경우 10자리 처리 if (event.target.value.startsWith('02')) { event.target.value = event.target.value .replace(/[^0-9]/g, '') .replace(/^(\d{2})(\d{4})(\d{4})$/, '$1-$2-$3'); return; } // Hyphen 추가 event.target.value = event.target.value .replace(/[^0-9]/g, '') .replace(/^(\d{2,3})(\d{3,4})(\d{4})$/, '$1-$2-$3'); }, /** * 문자열에서 하이픈 제거 2022.11.23(리뉴얼) * @param str * @returns {*} */ removeHyphen: function(str) { return str.replace(/-/g, ""); }, }; /** * 숫자 포맷 변경 */ var NumberFormatUtil = { /** * 숫자를 금액 표기법으로 변경하여 리턴 */ formatPrice: function(number){ if( number == undefined || number == null || isNaN(number) ) { return '0'; } var reg = /(^[+-]?\d+)(\d{3})/; var price = number.toString(); while (reg.test(price)){ price = price.replace(reg, '$1' + ',' + '$2'); } return price; }, /** * 숫자를 금액 표기법으로 변경하고 '원' 추가 후 리턴 */ formatPriceWon: function(number){ return this.formatPrice(number)+"원"; }, /** * 콤마가 들어간 금액에서 콤마를 제거 */ unformatPrice: function(number){ if (number == undefined) return 0; var price = number.toString().replace(/,/gi, ""); return price; }, unformatPriceWon: function(number){ number = number.replace("원",""); return this.unformatPrice(number); }, /** * 금액 input 에 keyup 이벤트로 콤마가 들어가게함 */ bindFormatPrice: function(selector){ $(selector).on('keyup', function(e) { var unfomatValue = NumberFormatUtil.unformatPrice(this.value); this.value = NumberFormatUtil.formatPrice(unfomatValue); }); }, /** * 선택된 selector 의 value 에서 콤마를 모두 제거 * submit 시 주로 사용 */ unformatPriceSelector: function(selector) { $(selector).each(function(i, v) { this.value = NumberFormatUtil.unformatPrice(this.value); }); } }; var scrollUtil = { scrollTrafficInfo : function() { const queryString = window.location.search; const urlParams = new URLSearchParams(queryString); let stick = urlParams.get('stick'); if (stick) { let target = $('[stick="'+stick+'"]'); if (target) { $("html, body").animate({scrollTop: target.offset().top}, 400); } } } }; var cookieOption = { expires : 36500, path : "/", raw : true }; var cookieDeleteOption = { expires : 0, path : "/", raw : true }; (function() { lddi.util.date = DateUtil; lddi.util.string = StringUtil; lddi.util.numberFormat = NumberFormatUtil; lddi.util.clipboard = ClipboardUtil; lddi.util.scroll = scrollUtil; lddi.COOKIE_OPTION = cookieOption; lddi.COOKIE_DELETE_OPTION = cookieDeleteOption; })(); return lddi; })();