/* * Name : board.min.js * Version : 2.0.3 * Product : prime series (board pro KR) * Author : 1px studio * Date : 2024-12-03 * Desc : 게시판 쓰기페이지 스타일링, 갤러리+이벤트 게시판 리스트페이지 모든 항목 노출가능하도록 변경. + 폼메일 약관불러오기 수정 + 공지글 문구 + 이벤트 진행상황 추가 * ------------------------------------------------ */ $(function () { // script break in main page if (document.getElementById("isIndex")!=null) { return; } $("#ext_search select").after(''); category_init(); button_replace(); board_write_init(); gallery_init(); faq_init(); event_init(); blog_list_init(); blog_read_init(); formmail_init(); // 카테고리 버튼 치환 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]; let activeClass = ""; baseURL = baseURL.substr(-1) == "?" ? baseURL+"com_board_category_code=" : baseURL+"&&com_board_category_code="; $("select[name=com_board_category_code] option").each(function () { let $this = $(this); categoryName.push($this.text()), categoryCode.push($this.val()); }); for (let o = 0; o < categoryName.length; o++) { activeClass = currentCategory ? (currentCategory == categoryCode[o] ? "active" : "") : 0 == o ? "active" : ""; categoryMarkup += `${categoryName[o]}`; } $(".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(``), $(this).remove()), src.indexOf("move.gif") > -1 && ($(this).before(``), $(this).remove()), src.indexOf("copy.gif") > -1 && ($(this).before(``), $(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(``), $(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 board_write_init() { let writeForm = $("form[name=com_board]"); if (!writeForm.length) return !1; let descList = writeForm.find(".board_desc"); write_form_replace(descList, writeForm); } // 갤러리 스타일링 function gallery_init() { if (!$(".board-gallery").length) return !1; 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: default: 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"; } let articleThumb = ""; let articleLink = ""; let articleTitle = ""; let articleDesc = ""; let articleEtc = ""; //* let articleMarkup = ""; // 갤러리 게시판 타입 A if ($(".board-gallery").hasClass("type-a")) { articleMarkup = '
'; $(".board-gallery .article-wrapper > .photo-article-list > tbody > tr").each(function () { let article = $(this).find(".bbsnewf5"); let etcList = board_etc_extract(article, 1); if (etcList.length > 0) { let etcSpan = ''; etcList.forEach(function(item, idx){ etcSpan += `${item.name}
${item.text}
`; }); etcSpan += '
'; articleEtc = etcSpan; } articleThumb = article.find("img").attr("src"); articleLink = article.find(".gallery_subject>a").attr("href"); articleTitle = article.find(".gallery_title").text(); let descTag = article.find(".gallery_cont"); articleDesc = descTag.length ? '

'+descTag.text()+'

' : ''; articleMarkup += `
${articleTitle}
${articleEtc}
${articleTitle}
${articleDesc}
`; }); articleMarkup += "
"; $(".board-gallery .article-wrapper").empty().append(articleMarkup); // 갤러리 게시판 타입 B } else if ($(".board-gallery").hasClass("type-b")) { articleMarkup = '
'; $(".board-gallery .article-wrapper > .photo-article-list > tbody > tr").each(function () { let article = $(this).find(".bbsnewf5"); let etcList = board_etc_extract(article, 1); if (etcList.length > 0) { let etcSpan = ''; etcList.forEach(function(item, idx){ etcSpan += `${item.name}${item.text}`; }); etcSpan += ''; articleEtc = etcSpan; } articleThumb = article.find("img").attr("src"); articleLink = article.find(".gallery_subject>a").attr("href"); articleTitle = article.find(".gallery_title").text(); let descTag = article.find(".gallery_cont"); articleDesc = descTag.length ? '

'+descTag.text()+'

' : ''; articleMarkup += `
${articleTitle}
${articleEtc}
${articleTitle}
${articleDesc}
`; }); articleMarkup += "
"; $(".board-gallery .article-wrapper").empty().append(articleMarkup); } } // FAQ 스타일링 function faq_init() { if (!$(".faq-list .table-article-list .titdesign").length) return !1; 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: !1, 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 (t) { 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 !1; let articleMarkup = '
'; $(".board-event .article-wrapper > .event-article-list > tbody > tr").each(function () { let article = $(this).find(".bbsnewf5"); let articleThumb = article.find("img").attr("src"); let articleLink = article.find(".gallery_subject>a").attr("href"); let articleTitle = article.find(".gallery_title").text(); let articleDesc = ""; let descTag = article.find(".gallery_cont"); if (descTag.length) { articleDesc = "

"+descTag.text()+"

"; } let articleDate = ""; let articleEtc = ""; let articleProgress = ""; let etcExtract = board_etc_extract(article); let dateList = etcExtract.dateList; let etcList = etcExtract.etcList; let eventProgress = etcExtract.eventProgress; if (dateList.length > 0) { let dateSpan = ''; dateList.forEach(function(item, idx){ dateSpan += `${item.name}${item.text}`; }); dateSpan += ''; articleDate = dateSpan; } if (etcList.length > 0) { let etcSpan = ''; etcList.forEach(function(item, idx){ etcSpan += `${item.name}${item.text}`; }); etcSpan += ''; articleEtc = etcSpan; } if (eventProgress != null) { if (eventProgress=="progress") { articleProgress = '진행중'; } else if (eventProgress=="ended") { articleProgress = '진행종료'; } else { articleProgress = '진행예정'; } } articleMarkup += `
${articleProgress} ${articleTitle}
${articleEtc} ${articleDate}

${articleTitle}

${articleDesc}
`; }); articleMarkup += "
"; $(".board-event .article-wrapper").empty().append(articleMarkup); } // 블로그 스타일링 - 리스트 페이지 function blog_list_init() { if (!$(".board-blog").length) return !1; let no, title, write_date, category, desc, src, link; let articleItems = ""; let html = '
'; $(".board-blog .article-wrapper > .blog-article-list .webzine_type2 > tbody > tr").each(function () { let textTd = $(this).find(".webzine_type_text_td_left"); if (textTd.length == 0) { return; } let imgTd = $(this).find(".webzine_type_img_td"); let _no = textTd.find(".webzine_no .obj_value").text(); no = _no.length ? 'NO. '+_no+'' : ''; textTd.find(".webzine_no").remove(); title = textTd.find(".webzine_subject .obj_value").text().trim(); textTd.find(".webzine_subject").remove(); let _date = textTd.find(".webzine_dateof_write .obj_value").text(); write_date = _date.length ? ''+_date+'' : ''; textTd.find(".webzine_dateof_write").remove(); let _category = textTd.find(".webzine_category .obj_value").text().trim(); category = _category.length ? '#'+_category+'' : ''; textTd.find(".webzine_category").remove(); let _desc = textTd.find(".webzine_description .obj_value").text().trim(); desc = _desc.length ? '

'+_desc+'

' : ''; textTd.find(".webzine_description").remove(); src = imgTd.find("img").attr("src"); link = imgTd.find("a").attr("href"); let ddList = $(this).find(".webzine_type_text_td_left dd"); if (ddList.length > 0) { let items = '
'; ddList.each(function(idx){ items += `${$(this).find(".obj_name").text()}${$(this).find(".obj_value").text().trim()}`; }); items += '
'; articleItems = items; } html += `
${no} ${category} ${write_date}

${title}

${desc} ${articleItems}
`; }); html += "
"; $(".board-blog .article-wrapper").empty().append(html); } // 블로그 스타일링 - 읽기 페이지 function blog_read_init() { if (!$(".board-blog #post_area").length) return !1; let trs = $(".board-blog .table-article-common tr"); let headHtml = '
'; let tailHtml = '
'; let tailExist = false; let postTag; // let blogHead = $("#post_area").parents("tr").prevUntil(); let postBefore = true; trs.each(function(i){ let label, desc; if ($(this).find("#post_area").length > 0) { postTag = $(this).find("#post_area"); postBefore = false; } if (i==0) { desc = $(this).find(".board_desc").text().trim(); headHtml += `

${desc}

`; } else { label = $(this).find(".board_bgcolor").text().trim(); let descTag = $(this).find(".board_desc"); let downloadClass = ""; if (descTag.find("div").length) { downloadClass = " download"; } desc = descTag.html(); desc = desc == undefined ? "" : getPureHtml(desc); if (desc.trim().length == 0) {return;} if (label.length == 0) {return;} if (postBefore) { headHtml += ` ${label}${desc} `; } else { tailHtml += ` ${label}${desc} `; tailExist = true; } } }); headHtml += '
'; tailHtml += '
'; $(".board-blog .table-article-common").replaceWith(headHtml); let post = $(".board-blog").find(".post-body").html(postTag); if (tailExist) { post.after(tailHtml); } let thumbnails = $(".board-view-thumbnails").find("a"); let html2 = `

Previous posts

`; thumbnails.each(function(){ let href = $(this).attr("href"); let src = $(this).find("img").attr("src"); html2 += `
`; }); html2 += '
'; $(".board-blog").find(".post-body").append(html2); $(".board-view-thumbnails").remove(); let html3 = `
`; let move_btns = $(".board-blog .move-page"); move_btns.each(function(){ let text = $(this).text().trim(); let direction = text == "이전" ? "prev" : "next"; let icon = text == "이전" ? '이전글' : '다음글'; let link = $(this).attr("href"); html3 += `${icon}`; }); html3 += `
`; move_btns.remove(); $(".board-blog").find(".post-wrap").append(html3); $(".board-blog").find(".move-btn").on("mouseover", function(){ $(this).addClass('on'); }); $(".board-blog").find(".move-btn").on("mouseout", function(){ $(this).removeClass('on'); }); } // 문의하기 폼메일 스타일링 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 + `
`); } 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); }); } }); } // 게시판 gallery_etc 재료 추출 function board_etc_extract(article, type) { let galleryEtcFonts = article.find(".gallery_etc font"); let dateList = []; let etcList = []; let allList = []; let eventProgress = null; galleryEtcFonts.each(function(idx, tag) { let subject = $(tag).text().split(" : "); let subjectText = subject[1]; let subjectName = subject[0]; let isSecret = tag.style.fontSize == "486px" ? true : false; // 비밀글은 관리자 항목관리에서 font-size를 486px로 설정하여 구분하고 있음. if (tag.children.length > 0) { etcList.push({name: subjectName, text: tag.children[0].outerHTML}); allList.push({name: subjectName, text: tag.children[0].outerHTML}); } else { let dateRegex1 = RegExp(/^\d{4}년 (0[1-9]|1[012])월 (0[1-9]|[12][0-9]|3[01])일$/); let dateRegex2 = RegExp(/^\d{4}-(0[1-9]|1[012])-(0[1-9]|[12][0-9]|3[01])$/); if (dateRegex1.test(subjectText)) { let date = subjectText; date = date.replace(/[(가-힣)]/g, "").replaceAll(" ", "."); // Tip : 년월일 -> . 으로 변경 if (subjectName.match("종료")) { dateList.push({name: subjectName, text: " ~ "+date, secret: isSecret}); } else { dateList.push({name: subjectName, text: date}); } } else if (dateRegex2.test(subjectText)) { let writeDate = subjectText.replaceAll("-", "."); // Tip : - 를 -> . 으로 변경 dateList.push({name: subjectName, text: writeDate, secret: isSecret}); allList.push({name: subjectName, text: writeDate, secret: isSecret}); } else { etcList.push({name: subjectName, text: subjectText, secret: isSecret}); allList.push({name: subjectName, text: subjectText, secret: isSecret}); } } }); if (type==1) { return allList; } else { // 이벤트 시작~종료일이면 진행상황 표기 if (dateList.length == 2 && dateList[1].text.match("~") != null) { let today = new Date(); let startday = new Date(dateList[0].text); let endday = new Date(dateList[1].text); if (today > startday && today < endday ) { eventProgress = "progress"; } else if (today < startday) { eventProgress = "D"+getBetweenDate(today, startday); // ex) D-3 } else if (today > endday) { eventProgress = "ended"; } } return {dateList: dateList, etcList: etcList, eventProgress: eventProgress}; } } function getBetweenDate(aDay, bDay){ return Math.floor((aDay.getTime() - bDay.getTime()) / 1000 / 60 / 60 / 24); } // string 내에 html 주석 삭제 function getPureHtml(str) { while(true) { if (str.indexOf(''); str = str.substring(0, start) + str.substring(end+3, str.length); } else { break; } } return str; } });