/*
* Name : board.js
* Version : 1.0.3
* Author : 1px studio
* Product : Prime01
* Date : 2025-01-06
* Desc : 폼메일 작성 양식 업데이트
---------------------------------------------------
*/
$(function() {
// 초기화
search_selectric_init();
category_init();
button_replace();
gallery_init();
faq_init();
event_init();
formmail_init();
// 검색창 셀렉트릭
function search_selectric_init() {
$('#ext_search select').selectric();
}
// 카테고리 버튼 치환
function category_init() {
let categoryMarkup = '';
let categoryName = [];
let categoryCode = [];
const queryString = window.location.search;
const urlParams = new URLSearchParams(queryString);
if ( $('select[name=com_board_category_code]').length ) {
const currentCategory = urlParams.get('com_board_category_code');
let baseURL = $('select[name=com_board_category_code]').attr('onchange').split("'")[1] + 'com_board_category_code=';
let activeClass = '';
$('select[name=com_board_category_code] option').each(function() {
let $this = $(this);
categoryName.push($this.text());
categoryCode.push($this.val());
});
for (let i = 0; i < categoryName.length; i++) {
if ( !currentCategory ) {
if ( i == 0 ) {
activeClass = 'active';
} else {
activeClass = '';
}
} else {
if ( currentCategory == categoryCode[i] ) {
activeClass = 'active';
} else {
activeClass = '';
}
}
categoryMarkup += `${categoryName[i]} `;
}
$('.category-button-wrapper').empty().append(categoryMarkup);
}
}
// 이미지 버튼 텍스트로 치환
function button_replace() {
let imgButtonSubmit = $('input[type=image]');
let imgButtonLink = $('img');
const btn_names = ["검색", "확인", "댓글작성", "삭제", "이동", "복사", "이전", "목록", "다음", "스팸신고", "수정", "삭제", "답변", "글쓰기", "작성완료", "취소", "다운로드", "우편번호검색", "삭제"];
imgButtonSubmit.each(function () {
let src = $(this).attr('src');
if ( src.indexOf('search.gif') > -1 ) {
$(this).before(`검색 `);
$(document).on('click', '#btn-search', function () {
$(this).next('input[type=image]').trigger('click');
});
$(this).hide();
}
if ( src.indexOf('confirm.gif') > -1 ) {
$(this).before(` `);
$(this).hide();
}
if ( src.indexOf('comment_write.gif') > -1 ) {
$(this).before(``);
$(document).on('click', '#btn-comment-write', function () {
$(this).next('input[type=image]').trigger('click');
});
$(this).hide();
}
});
imgButtonLink.each(function () {
let src = $(this).attr("src");
let event = $(this).attr("onclick");
src.indexOf("btn_sdel.gif") > -1 && ($(this).before(`${btn_names[3]} `), $(this).remove()),
src.indexOf("move.gif") > -1 && ($(this).before(`${btn_names[4]} `), $(this).remove()),
src.indexOf("copy.gif") > -1 && ($(this).before(`${btn_names[5]} `), $(this).remove()),
src.indexOf("/prev.gif") > -1 && $(this).parent().addClass("button-b button--default move-page").text(btn_names[6]),
src.indexOf("list.gif") > -1 && $(this).parent().addClass("button-b button--dark").text(btn_names[7]),
src.indexOf("/next.gif") > -1 && $(this).parent().addClass("button-b button--default move-page").text(btn_names[8]),
src.indexOf("spam.gif") > -1 && ($(this).before(`${btn_names[9]} `), $(this).remove()),
src.indexOf("modify.gif") > -1 && $(this).parent().addClass("button-b button--default").text(btn_names[10]),
src.indexOf("delete.gif") > -1 && $(this).parent().addClass("button-b button--default").text(btn_names[11]),
src.indexOf("reply.gif") > -1 && $(this).parent().addClass("button-b button--default").text(btn_names[12]),
src.indexOf("write.gif") > -1 && $(this).parent().addClass("button-b button--dark size--3").text(btn_names[13]),
src.indexOf("btn_confirm.gif") > -1 && $(this).parent().addClass("button-b button--primary").text(btn_names[14]),
src.indexOf("cancel.gif") > -1 && $(this).parent().addClass("button-b button--default button--lg").text(btn_names[15]),
src.indexOf("download.gif") > -1 && $(this).parent().addClass("button-download").text(btn_names[16]);
src.indexOf("search_zipcode.gif") > -1 && $(this).parent().addClass("button-zipcode").text(btn_names[17]); // 게시판 우편번호 버튼
src.indexOf("btn_zip.gif") > -1 && $(this).parent().addClass("button-zipcode").text(btn_names[17]); // 폼메일 우편번호 버튼
src.indexOf("btn_del.gif") > -1 && $(this).replaceWith(''+btn_names[18]+' '); // 파일삭제 버튼
src.indexOf("icon_sct.gif") > -1 && $(this).replaceWith(' '); // 질문과답변 자물쇠 아이콘
});
}
// 갤러리 스타일링
function gallery_init() {
if ( !$('.board-gallery').length ) return false;
let articleThumb = [];
let articleLink = [];
let articleTitle = [];
let articleCategory = [];
let articleMarkup = '';
let columnCount = $('.board-gallery .gallery-list').data('column') ? $('.board-gallery .gallery-list').data('column') : 3;
let columnClass = '';
switch (columnCount) {
case 1:
columnClass = 'col-xl-12';
break;
case 2:
columnClass = 'col-xl-6';
break;
case 3:
columnClass = 'col-xl-4';
break;
case 4:
columnClass = 'col-xl-3';
break;
case 5:
columnClass = 'col-xl-2-5';
break;
case 6:
columnClass = 'col-xl-2';
break;
default:
columnClass = 'col-xl-4';
break;
}
if ( $('.board-gallery').hasClass('type-a') ) { // A타입 갤러리
$('.board-gallery .article-wrapper > .photo-article-list > tbody > tr').each(function() {
let $this = $(this);
let article = $this.find('.bbsnewf5');
articleThumb.push(article.find('img').attr('src'));
articleLink.push(article.find('.gallery_subject>a').attr('href'));
articleTitle.push(article.find('.gallery_title').text());
let etc = article.find('.gallery_etc').text().trim();
if (etc.indexOf(":") > -1) {
articleCategory.push(etc.split(':')[1].replace(']', ''));
} else {
articleCategory.push("");
}
});
articleMarkup = `
`;
for (let i = 0; i < articleThumb.length; i++) {
articleMarkup += `
`;
}
articleMarkup += `
`;
$('.board-gallery .article-wrapper').empty().append(articleMarkup);
} else if ( $('.board-gallery').hasClass('type-b') ) { // B타입 갤러리
$('.board-gallery .article-wrapper > .photo-article-list > tbody > tr').each(function() {
let $this = $(this);
let article = $this.find('.bbsnewf5');
articleThumb.push(article.find('img').attr('src'));
articleLink.push(article.find('.gallery_subject>a').attr('href'));
articleTitle.push(article.find('.gallery_title').text());
let etc = article.find('.gallery_etc').text().trim();
if (etc.indexOf(":") > -1) {
articleCategory.push(etc.split(':')[1].replace(']', ''));
} else {
articleCategory.push("");
}
});
articleMarkup = ``;
for (let i = 0; i < articleThumb.length; i++) {
articleMarkup += `
`;
}
articleMarkup += `
`;
$('.board-gallery .article-wrapper').empty().append(articleMarkup);
}
}
// FAQ 스타일링
function faq_init() {
if ( !$('.faq-list .table-article-list .titdesign').length ) return false;
const loader = `
`;
$('.faq-list .table-article-list .bbsnewf5 > a').on('click', (e) => {
// 관리자가 아닐 때만 아코디언 수행
if ( !$('input[name="delete_check_notice[]"]').length ) {
e.preventDefault();
let $this = $(e.currentTarget);
let articleLink = $this.attr('href');
let replyContent = '';
$.ajax({
url: articleLink,
method: 'GET',
contentType: 'application/x-www-form-urlencoded;charset=euc-kr',
dataType: 'html',
async: false,
success: function ( data ) {
let content = $(data).find('#post_area').html();
replyContent = `
${content}
`;
if ( !$this.closest('.titdesign').hasClass('article--open') ) {
$('.titdesign').removeClass('article--open');
$('.reply-content').remove();
$this.parent().after(replyContent);
$this.closest('.titdesign').addClass('article--open');
} else {
$this.parent().siblings('.reply-content').remove();
$this.closest('.titdesign').removeClass('article--open');
}
},
error: function ( xhr ) {
alert('오류가 발생하였습니다.');
},
beforeSend: function ( jqXHR ) {
jqXHR.overrideMimeType('application/x-www-form-urlencoded;charset=euc-kr');
$('body').prepend(loader);
},
complete: function () {
$('#ajax-loader').remove();
}
})
}
});
}
// 이벤트 스타일링
function event_init() {
if ( !$('.board-event').length ) return false;
let articleThumb = [];
let articleLink = [];
let articleTitle = [];
let articleSDate = [];
let articleEDate = [];
let articleMarkup = '';
let dateCode = '';
$('.board-event .article-wrapper > .event-article-list > tbody > tr').each(function() {
let $this = $(this);
let article = $this.find('.bbsnewf5');
articleThumb.push(article.find('img').attr('src'));
articleLink.push(article.find('.gallery_subject>a').attr('href'));
articleTitle.push(article.find('.gallery_title').text());
dateCode = '';
let etc = article.find('.gallery_etc').text().trim();
if (etc.indexOf(":") > -1) {
let a = etc.split(':')[1].replace(',', '').replace('이벤트 종료일', '');
let b = etc.split(':')[2].replace(']', '');
dateCode = `${a} ~ ${b} `;
}
});
articleMarkup = ``;
for (let i = 0; i < articleThumb.length; i++) {
articleMarkup += `
${dateCode}
${articleTitle[i]}
`;
}
articleMarkup += `
`;
$('.board-event .article-wrapper').empty().append(articleMarkup);
}
// 문의하기 폼메일 스타일링
function formmail_init() {
let writeForm = $(".contact-form");
if (!writeForm.length) return !1;
let items = $(".contact-form .table-form > tbody > tr .formmail_cell_bgcolor");
write_form_replace(items, writeForm);
}
// 글쓰기 양식 스타일링
function write_form_replace(descList, writeForm) {
let idIdx = 1;
let isFormmail = writeForm[0].className == 'contact-form';
if ($('#privacy_terms_context').length) {
const termsContext = $('.formmail_cell_bgcolor textarea[readonly]').val();
const modalTermsContext = $('#privacy_terms_context');
modalTermsContext.val(termsContext);
}
descList.each(function(idx, desc) {
// 날짜, 전화번호 td
let flexChild = $(desc).find("input[type=text], select");
if (flexChild.length >= 3) {
$(desc).addClass("flex-line");
}
// 주소 우편번호 td
let zipcodeChild = $(desc).find(".button-zipcode");
if (zipcodeChild.length) {
$(desc).addClass("zipcode-line");
}
// 체크박스, 라디오 있는 td
let checkRadioChild = $(desc).find("input[type=checkbox], input[type=radio]");
if (checkRadioChild.length) {
let brTags = $(desc).find("br");
let group = {count: brTags.eq(0).index()};
if (isFormmail) {
group.count = $(desc).find("tr").eq(0).find("input").length;
}
// 태그 교체
checkRadioChild.each(function(idx){
let inputId = 'labelfor'+idIdx;
this.id = inputId;
// select + checkbox (음력 사용시 해당)
if (this.name.match("_lunar")) {
let replaceTag = $(desc).find("select");
let newHtml = '';
replaceTag.each(function(i){
if (i==0) { newHtml += this.outerHTML+"년 "; }
else if (i==1) { newHtml += this.outerHTML+"월 "}
else if (i==2) { newHtml += this.outerHTML+"일 "}
});
newHtml += this.outerHTML + `음력 `;
newHtml += '
';
$(desc).html(newHtml); }
// 그 외 체크박스, 라디오 버튼
else {
let labelClass = "label-group";
labelClass += idx > 0 && idx % group.count == 0 ? " end" : "";
let text = this.value;
if (this.name == "com_board_notice") {
text = "이 글을 공지글로 설정합니다.";
}
$(this).replaceWith(''+this.outerHTML + `${text}
`);
}
idIdx++;
});
$(desc).addClass("flex-line");
// 일반 텍스트 삭제 (위에서 label로 대체됨)
let childTags = $(desc).find(".label-group, .select-group, input[type=hidden]");
$(desc).html(childTags);
// 세부항목 가로 표시개수 설정 (br -> div로 묶기)
if (group.count > -1) {
let labelGroup = $(desc).find(".label-group");
labelGroup.each(function(i){
if (i % group.count == 0) {
let start = $(this);
let end = start.nextUntil(".label-group.end");
$.merge(start,end).wrapAll('
');
}
})
$(desc).addClass("change-direction");
}
}
// 첨부파일 td
let fileChild = $(desc).find("input[type=file]");
if (fileChild.length) {
let innerText = $(desc).text();
let allFileName = innerText.split(/[\n\t]+/g).filter((word) => word.length > 0 && word != "삭제");
$(desc).addClass("file-desc");
let fileIdx = 0;
// 태그 교체
fileChild.each(function(){
let inputId = 'labelfor'+idIdx;
this.id = inputId;
this.className = "upload-hidden";
let $this = $(this);
$this.wrap('
');
let parent = $this.closest(".file-upload");
let prependHtml = `파일선택 `;
parent.prepend(prependHtml);
idIdx++;
fileIdx++;
});
// 업로드된 파일명 셋팅
let delList = $(desc).find(".file_attach_del");
if (delList.length) {
delList.each(function(i){
$(this).closest("a").prev(".file-upload").find(".upload-name").addClass("exist").val(allFileName[i]);
});
}
// 일반 텍스트 삭제
let childTags = $(desc).children();
$(desc).html(childTags);
// 파일선택 시 파일명 셋팅 이벤트
let fileTarget = writeForm.find('.file-upload .upload-hidden');
fileTarget.on('change', function(){
let filename = $(this)[0].files[0].name;
$(this).siblings('.upload-name').val(filename);
});
}
});
}
});