(() => { // webpackBootstrap
var __webpack_exports__ = {};
(() => {
const { pageHelper, EventManager, utils } = ShopbySkin;
const articleWriteFormLayerModalHelper = pageHelper.articleWriteFormLayerModalHelper();
articleWriteFormLayerModalHelper.initialize({
layerModalHelperKey: 'article-write-form',
});
const boardNo = '277061';
const getCapchaKey = () => {
return (new Date()).getTime().toString();
};
const getCapchaImage = async (key) => {
const res = await fetch(`https://shop-api.shopby.co.kr/captcha/image?key=${key}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
Version: '1.0',
clientId: '99ZDpWfrizZV8irrjPvB8w==',
platform: 'PC',
language: 'ko',
},
}).then((res) => res.json());
return res.url;
};
const verifyCapcha = async (key, code) => {
const res = await fetch(`https://shop-api.shopby.co.kr/captcha/verify?key=${key}&code=${code}`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
Version: '1.0',
clientId: '99ZDpWfrizZV8irrjPvB8w==',
platform: 'PC',
language: 'ko',
},
});
return ( res.status === 204 || res.status === 200 );
};
const refreshCapcha = async () => {
const key = getCapchaKey();
getCapchaImage(key).then((url) => {
document.querySelector('.captcha_key').value = key;
document.querySelector('.captcha_image').src = url;
document.querySelector('.captcha_image').style.visibility = '';
document.querySelector('.captcha_code').value = '';
});
}
const getFormData = (formElement) => {
const formData = new FormData(formElement);
return {
inquiryType: formData.get('inquiryType'),
companyName: formData.get('companyName'),
managerName: formData.get('managerName'),
productKind: formData.get('productKind'),
tel: formData.get('tel') + '-' + formData.getAll('tel[]').join('-').trim(),
email: formData.getAll('email[]').join('@').trim(),
title: formData.get('title'),
content: formData.get('content').replaceAll(/\n/g, '
'),
agreement: formData.get('agreement'),
}
}
const checkInvalidPostForm = async (data) => {
if (!data.inquiryType) {
return { message: '문의구분을 선택해주세요.', invalid: true };
}
if (!data.companyName) {
return { message: '업체명을 입력해주세요.', invalid: true };
}
if (!data.managerName) {
return { message: '담당자명을 입력해주세요.', invalid: true };
}
if (!data.productKind) {
return { message: '문의 제품을 입력해주세요.', invalid: true };
}
if (!data.tel) {
return { message: '연락처를 입력해주세요.', invalid: true };
}
if (!/^(01[0-9]{1}-?[0-9]{4}-?[0-9]{4})$/.test(data.tel)) {
return { message: '연락처 형식이 맞지 안습니다.', invalid: true };
}
if ('@' == data.email) {
return { message: '이메일을 입력해주세요.', invalid: true };
}
if (!/^[A-Za-z0-9_\.\-]+@[A-Za-z0-9\-]+\.[A-Za-z0-9\-]+/.test(data.email)) {
return { message: '이메일 형식이 맞지 않습니다.', invalid: true };
}
if (!data.title) {
return { message: '제목을 입력해주세요.', invalid: true };
}
if (!data.content) {
return { message: '내용을 입력해주세요.', invalid: true };
}
const captchaKey = document.querySelector('.captcha_key').value;
const captchaCode = document.querySelector('.captcha_code').value;
const isCaptchaVerified = await verifyCapcha(captchaKey, captchaCode);
if (!isCaptchaVerified) {
return { message: '자동입력 방지 문자를 정확히 입력해주세요.', invalid: true };
}
if ('on' != data.agreement) {
return { message: '개인정보 수집 및 이용에 동의해주세요.', invalid: true };
}
return { message: '', invalid: false };
};
const filesUpload = async (files) => {
const result = [];
try {
if ( true === files[0].type.startsWith('image') ) {
await utils.postImages({
files: files,
}).then((res)=>{
res.data.forEach((file) => {
result.push({
originalFileName: file.value.originName,
uploadedFileName: file.value.imageUrl
});
});
});
}
else {
await utils.postFiles({
files: files,
}).then((res)=>{
res.data.forEach((file) => {
result.push(file.value);
});
});
}
}
catch(e) {
console.log(e);
}
return result;
}
const savePost = async (data) => {
const combinedContents
= '문의구분: ' + data.inquiryType + '
'
+ '업 체 명: ' + data.companyName + '
'
+ '담당자명: ' + data.managerName + '
'
+ '문의제품: ' + data.productKind + '
'
+ '연 락 처: ' + data.tel + '
'
+ '이 메 일: ' + data.email + '
'
+ '문의내용: ' + '
'
+ data.content + '
'
;
const files = await filesUpload(document.querySelector('.upload_hidden').files);
const { isSuccess } = await articleWriteFormLayerModalHelper.saveArticle({
articleNo: null,
boardNo: boardNo,
articleTitle: data.title,
articleContent: combinedContents,
guestName: data.managerName,
password: '1111',
secreted: false,
images: files,
isModify: false,
});
if (isSuccess) {
EventManager.fire('MODAL_ALERT_OPEN', {
noticeType: 'SUCCESS',
message: '문의 접수가 완료 되었습니다.
확인 후 연락 드리겠습니다.',
onClose: () => {
EventManager.fire('CLOSE_TITLE_MODAL');
window.location.href = '/index.html';
},
});
}
}
document.querySelector('.btn_inquiry').addEventListener('click', async (event) => {
try {
const formElement = document.forms['formContactUs'];
const data = getFormData(formElement);
const { message, invalid } = await checkInvalidPostForm(data);
if (invalid) {
console.log('invalid:', message);
EventManager.fire('MODAL_ALERT_OPEN', {
noticeType: 'WARNING',
message: `${message}`,
});
return;
}
await savePost(data);
}
catch (e) {
console.log(e);
/*
EventManager.fire('MODAL_ALERT_OPEN', {
message: e.error.description ?? e.description,
});
*/
}
});
document.querySelectorAll('[name="tel[]"]').forEach((item)=>{
item.addEventListener('input', (event)=>{
item.value = item.value.replace(/[^0-9]/g, '');
if (item.value.length > 4) {
item.value = item.value.slice(0, 4);
}
});
});
document.querySelector('.btn_captcha_refresh').addEventListener('click', async (event) => {
refreshCapcha();
});
EventManager.on('PAGE_LOAD_COMPLETED', (data) => {
refreshCapcha();
});
})();
})();
/* 240610 서주원 - 셀렉트박스 & 이메일 셀렉트 박스 */
document.querySelectorAll('.select_box').forEach(box => {
const dataName = box.getAttribute('data-name');
const inputs = box.querySelectorAll('input[type="radio"]');
inputs.forEach(input => {
input.setAttribute('name', dataName);
});
const selected = box.querySelector('.selected');
const ul = box.querySelector('ul');
const reset = ul.querySelector('.reset');
const isMailSelectBox = box.classList.contains('select_box--mail');
let eDomainInput = null;
if (isMailSelectBox) {
eDomainInput = document.querySelector('.e-domain');
}
selected.addEventListener('click', function (event) {
event.stopPropagation();
closeAllSelectBoxes();
slideToggle(ul, 300);
});
inputs.forEach(radio => {
radio.addEventListener('change', function () {
selected.textContent = this.parentElement.textContent.trim();
slideToggle(ul, 300);
if (isMailSelectBox && eDomainInput) {
eDomainInput.value = this.parentElement.textContent.trim();
}
});
radio.parentElement.addEventListener('click', function (event) {
event.stopPropagation();
if (radio.checked) {
slideToggle(ul, 300);
}
});
});
if (reset) {
reset.parentElement.addEventListener('click', function (event) {
event.stopPropagation();
const resetText = reset ? reset.textContent.trim() : '선택하세요.';
selected.textContent = resetText;
inputs.forEach(radio => radio.checked = false);
slideToggle(ul, 300);
if (isMailSelectBox && eDomainInput) {
eDomainInput.value = '';
}
});
}
});
document.addEventListener('click', function () {
closeAllSelectBoxes();
});
function closeAllSelectBoxes() {
document.querySelectorAll('.select_box ul').forEach(ul => {
if (window.getComputedStyle(ul).display !== 'none') {
slideUp(ul, 300);
}
});
}
function slideUp(element, duration) {
setTimeout(function () {
element.parentNode.classList.remove('show');
}, 150)
element.style.transitionProperty = 'height, margin, padding';
element.style.transitionDuration = duration + 'ms';
element.style.boxSizing = 'border-box';
element.style.height = element.offsetHeight + 'px';
element.offsetHeight; // force reflow
element.style.overflow = 'hidden';
element.style.height = 0;
element.style.paddingTop = 0;
element.style.paddingBottom = 0;
element.style.marginTop = 0;
element.style.marginBottom = 0;
window.setTimeout(() => {
element.style.display = 'none';
element.style.removeProperty('height');
element.style.removeProperty('padding-top');
element.style.removeProperty('padding-bottom');
element.style.removeProperty('margin-top');
element.style.removeProperty('margin-bottom');
element.style.removeProperty('overflow');
element.style.removeProperty('transition-duration');
element.style.removeProperty('transition-property');
}, duration);
}
function slideDown(element, duration) {
element.parentNode.classList.add('show');
element.style.removeProperty('display');
let display = window.getComputedStyle(element).display;
if (display === 'none') display = 'block';
element.style.display = display;
let height = element.offsetHeight;
element.style.overflow = 'hidden';
element.style.height = 0;
element.style.paddingTop = 0;
element.style.paddingBottom = 0;
element.style.marginTop = 0;
element.style.marginBottom = 0;
element.offsetHeight; // force reflow
element.style.boxSizing = 'border-box';
element.style.transitionProperty = "height, margin, padding";
element.style.transitionDuration = duration + 'ms';
element.style.height = height + 'px';
element.style.removeProperty('padding-top');
element.style.removeProperty('padding-bottom');
element.style.removeProperty('margin-top');
element.style.removeProperty('margin-bottom');
window.setTimeout(() => {
element.style.removeProperty('height');
element.style.removeProperty('overflow');
element.style.removeProperty('transition-duration');
element.style.removeProperty('transition-property');
}, duration);
}
function slideToggle(element, duration) {
if (window.getComputedStyle(element).display === 'none') {
return slideDown(element, duration);
} else {
return slideUp(element, duration);
}
}
/* 240610 서주원 - 셀렉트박스 & 이메일 셀렉트 박스 끝 */
// 240610 서주원 - 파일업로드
var fileTargets = document.querySelectorAll('.area_filebox .upload_hidden');
fileTargets.forEach(function (fileTarget) {
fileTarget.addEventListener('change', function () {
let maxSize = 5 * 1024 * 1024; //* 5MB 사이즈 제한
let fileSize = this.files[0].size; //업로드한 파일용량
if(fileSize > maxSize){
openAlertModal("파일첨부 사이즈는 5MB 이내로 가능합니다.");
this.value = ''; //업로드한 파일 제거
return;
}
var filename;
if (window.FileReader) {
filename = this.files[0].name;
} else {
filename = this.value.split('/').pop().split('\\').pop();
}
var sibling = this.parentElement.querySelector('.upload_name');
if (sibling) {
sibling.value = filename;
}
});
});
/* 240610 서주원 - 상단비주얼 애니메이션 */
/* const leftElement = document.querySelector('.left');
const rightElement = document.querySelector('.right');
// 초기 너비 계산 함수
function calculateInitialWidth() {
const viewportWidth = window.innerWidth;
return (viewportWidth * 0.5) - 715;
}
// 초기 너비 설정 함수
function setInitialWidth() {
const initialWidth = calculateInitialWidth();
console.log('initialWidth:', initialWidth); // 로그 추가
leftElement.style.width = initialWidth + 'px';
rightElement.style.width = initialWidth + 'px';
}
// CSS 트랜지션 설정 함수
function setTransition() {
leftElement.style.transition = 'width 0.3s ease';
rightElement.style.transition = 'width 0.3s ease';
}
// 초기 CSS 트랜지션 설정
setTransition();
// ScrollMagic 컨트롤러 생성
const controller = new ScrollMagic.Controller();
// 애니메이션 정의
const tween = gsap.to('.left, .right', {
width: '0%',
duration: 2,
ease: 'linear.none'
});
// ScrollMagic 씬 생성 함수
function createScene() {
return new ScrollMagic.Scene({
triggerElement: '.visual', // 트리거 요소
duration: 340 // 애니메이션 지속 거리 (px 단위)
}).setTween(tween).addTo(controller);
}
// 초기 너비 설정
setInitialWidth();
// ScrollMagic 씬 생성
let scene = createScene();
// 리사이즈 이벤트 핸들러
let resizeTimeout;
window.addEventListener('resize', function() {
console.log('resize event triggered');
if (resizeTimeout) {
clearTimeout(resizeTimeout);
}
resizeTimeout = setTimeout(function() {
console.log('executing resize logic');
// 트랜지션 제거
leftElement.style.transition = 'none';
rightElement.style.transition = 'none';
// 기존 씬 제거
scene.destroy(true);
// 새로운 초기 너비 설정
setInitialWidth();
// 새로운 씬 생성
scene = createScene();
// 트랜지션 재설정
setTimeout(setTransition, 50); // 약간의 지연 후 트랜지션 재설정
}, 300); // 300ms 후에 새로고침
}); */
var controller = new ScrollMagic.Controller();
// 애니메이션 정의
var tween = gsap.to(".visual2", {
duration: 1, // 애니메이션 시간 (초)
width: "2000px", // 최종 너비
// ease: "power2.inOut" // 이징 적용
});
// ScrollMagic 씬 생성
var scene = new ScrollMagic.Scene({
triggerElement: ".visual2", // 애니메이션 시작 요소
triggerHook: 0.4, // 스크롤 위치 (0.5는 화면 중앙)
duration: 270 // 애니메이션 지속 거리
})
.setTween(tween)
// .addIndicators({name: "Box Animation"}) // 디버그를 위한 인디케이터 추가 (선택 사항)
.addTo(controller);
/* 240610 서주원 - 상단비주얼 애니메이션 끝 */
/* 걍제새로고침 */
/* let resizeTimeout;
window.addEventListener('resize', function() {
if (resizeTimeout) {
clearTimeout(resizeTimeout);
}
resizeTimeout = setTimeout(function() {
location.reload();
}, 300); // 300ms 후에 새로고침
}); */