first commit 2
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
// basic 스킨 광고 영역 설정
|
||||
$basic_skin_config = [
|
||||
'left_ad' => false, // 좌측 광고 사용 안함
|
||||
'right_ad' => false, // 우측 광고 사용 안함
|
||||
];
|
||||
?>
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 339 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 318 B |
@@ -0,0 +1,298 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 💡 [추가] 광고 설정 강제 비활성화 (기존 소스 유지)
|
||||
if (isset($basic_skin_config)) {
|
||||
$basic_skin_config['left_ad'] = false;
|
||||
$basic_skin_config['right_ad'] = false;
|
||||
}
|
||||
|
||||
// 선택옵션으로 인해 셀합치기가 가변적으로 변함
|
||||
$colspan = 5;
|
||||
|
||||
if ($is_checkbox) $colspan++;
|
||||
if ($is_good) $colspan++;
|
||||
if ($is_nogood) $colspan++;
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
<!-- 게시판 목록 시작 { -->
|
||||
<div id="bo_list" style="width:<?php echo $width; ?>">
|
||||
|
||||
<!-- 게시판 카테고리 시작 { -->
|
||||
<?php if ($is_category) { ?>
|
||||
<nav id="bo_cate">
|
||||
<h2><?php echo $board['bo_subject'] ?> 카테고리</h2>
|
||||
<ul id="bo_cate_ul">
|
||||
<?php echo $category_option ?>
|
||||
</ul>
|
||||
</nav>
|
||||
<?php } ?>
|
||||
<!-- } 게시판 카테고리 끝 -->
|
||||
|
||||
<form name="fboardlist" id="fboardlist" action="<?php echo G5_BBS_URL; ?>/board_list_update.php" onsubmit="return fboardlist_submit(this);" method="post">
|
||||
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="sfl" value="<?php echo $sfl ?>">
|
||||
<input type="hidden" name="stx" value="<?php echo $stx ?>">
|
||||
<input type="hidden" name="spt" value="<?php echo $spt ?>">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<input type="hidden" name="sst" value="<?php echo $sst ?>">
|
||||
<input type="hidden" name="sod" value="<?php echo $sod ?>">
|
||||
<input type="hidden" name="page" value="<?php echo $page ?>">
|
||||
<input type="hidden" name="sw" value="">
|
||||
|
||||
<!-- 게시판 페이지 정보 및 버튼 시작 { -->
|
||||
<div id="bo_btn_top">
|
||||
<div id="bo_list_total">
|
||||
<span>Total <?php echo number_format($total_count) ?>건</span>
|
||||
<?php echo $page ?> 페이지
|
||||
</div>
|
||||
|
||||
<ul class="btn_bo_user">
|
||||
<?php if ($admin_href) { ?><li><a href="<?php echo $admin_href ?>" class="btn_admin btn" title="관리자"><i class="fa fa-cog fa-spin fa-fw"></i><span class="sound_only">관리자</span></a></li><?php } ?>
|
||||
<?php if ($rss_href) { ?><li><a href="<?php echo $rss_href ?>" class="btn_b01 btn" title="RSS"><i class="fa fa-rss" aria-hidden="true"></i><span class="sound_only">RSS</span></a></li><?php } ?>
|
||||
<li>
|
||||
<button type="button" class="btn_bo_sch btn_b01 btn" title="게시판 검색"><i class="fa fa-search" aria-hidden="true"></i><span class="sound_only">게시판 검색</span></button>
|
||||
</li>
|
||||
<?php if ($write_href) { ?><li><a href="<?php echo $write_href ?>" class="btn_b01 btn" title="글쓰기"><i class="fa fa-pencil" aria-hidden="true"></i><span class="sound_only">글쓰기</span></a></li><?php } ?>
|
||||
<?php if ($is_admin == 'super' || $is_auth) { ?>
|
||||
<li>
|
||||
<button type="button" class="btn_more_opt is_list_btn btn_b01 btn" title="게시판 리스트 옵션"><i class="fa fa-ellipsis-v" aria-hidden="true"></i><span class="sound_only">게시판 리스트 옵션</span></button>
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<ul class="more_opt is_list_btn">
|
||||
<li><button type="submit" name="btn_submit" value="선택삭제" onclick="document.pressed=this.value"><i class="fa fa-trash-o" aria-hidden="true"></i> 선택삭제</button></li>
|
||||
<li><button type="submit" name="btn_submit" value="선택복사" onclick="document.pressed=this.value"><i class="fa fa-files-o" aria-hidden="true"></i> 선택복사</button></li>
|
||||
<li><button type="submit" name="btn_submit" value="선택이동" onclick="document.pressed=this.value"><i class="fa fa-arrows" aria-hidden="true"></i> 선택이동</button></li>
|
||||
</ul>
|
||||
<?php } ?>
|
||||
</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- } 게시판 페이지 정보 및 버튼 끝 -->
|
||||
|
||||
<div class="tbl_head01 tbl_wrap">
|
||||
<table>
|
||||
<caption><?php echo $board['bo_subject'] ?> 목록</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<th scope="col" class="all_chk chk_box">
|
||||
<input type="checkbox" id="chkall" onclick="if (this.checked) all_checked(true); else all_checked(false);" class="selec_chk">
|
||||
<label for="chkall">
|
||||
<span></span>
|
||||
<b class="sound_only">현재 페이지 게시물 전체선택</b>
|
||||
</label>
|
||||
</th>
|
||||
<?php } ?>
|
||||
<th scope="col">번호</th>
|
||||
<th scope="col">제목</th>
|
||||
<th scope="col">글쓴이</th>
|
||||
<th scope="col"><?php echo subject_sort_link('wr_hit', $qstr2, 1) ?>조회 </a></th>
|
||||
<?php if ($is_good) { ?><th scope="col"><?php echo subject_sort_link('wr_good', $qstr2, 1) ?>추천 </a></th><?php } ?>
|
||||
<?php if ($is_nogood) { ?><th scope="col"><?php echo subject_sort_link('wr_nogood', $qstr2, 1) ?>비추천 </a></th><?php } ?>
|
||||
<th scope="col"><?php echo subject_sort_link('wr_datetime', $qstr2, 1) ?>날짜 </a></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php
|
||||
for ($i=0; $i<count($list); $i++) {
|
||||
if ($i%2==0) $lt_class = "even";
|
||||
else $lt_class = "";
|
||||
?>
|
||||
<tr class="<?php if ($list[$i]['is_notice']) echo "bo_notice"; ?> <?php echo $lt_class ?>">
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<td class="td_chk chk_box">
|
||||
<input type="checkbox" name="chk_wr_id[]" value="<?php echo $list[$i]['wr_id'] ?>" id="chk_wr_id_<?php echo $i ?>" class="selec_chk">
|
||||
<label for="chk_wr_id_<?php echo $i ?>">
|
||||
<span></span>
|
||||
<b class="sound_only"><?php echo $list[$i]['subject'] ?></b>
|
||||
</label>
|
||||
</td>
|
||||
<?php } ?>
|
||||
<td class="td_num2">
|
||||
<?php
|
||||
if ($list[$i]['is_notice']) // 공지사항
|
||||
echo '<strong class="notice_icon">공지</strong>';
|
||||
else if ($wr_id == $list[$i]['wr_id'])
|
||||
echo "<span class=\"bo_current\">열람중</span>";
|
||||
else
|
||||
echo $list[$i]['num'];
|
||||
?>
|
||||
</td>
|
||||
|
||||
<td class="td_subject" style="padding-left:<?php echo $list[$i]['reply'] ? (strlen($list[$i]['wr_reply'])*10) : '0'; ?>px">
|
||||
<?php
|
||||
if ($is_category && $list[$i]['ca_name']) {
|
||||
?>
|
||||
<a href="<?php echo $list[$i]['ca_name_href'] ?>" class="bo_cate_link"><?php echo $list[$i]['ca_name'] ?></a>
|
||||
<?php } ?>
|
||||
<div class="bo_tit">
|
||||
<a href="<?php echo $list[$i]['href'] ?>">
|
||||
<?php echo $list[$i]['icon_reply'] ?>
|
||||
<?php
|
||||
if (isset($list[$i]['icon_secret'])) echo rtrim($list[$i]['icon_secret']);
|
||||
?>
|
||||
<?php echo $list[$i]['subject'] ?>
|
||||
</a>
|
||||
<?php
|
||||
if ($list[$i]['icon_new']) echo "<span class=\"new_icon\">N<span class=\"sound_only\">새글</span></span>";
|
||||
// if ($list[$i]['file']['count']) { echo '<'.$list[$i]['file']['count'].'>'; }
|
||||
if (isset($list[$i]['icon_hot'])) echo rtrim($list[$i]['icon_hot']);
|
||||
if (isset($list[$i]['icon_file'])) echo rtrim($list[$i]['icon_file']);
|
||||
if (isset($list[$i]['icon_link'])) echo rtrim($list[$i]['icon_link']);
|
||||
?>
|
||||
<?php if ($list[$i]['comment_cnt']) { ?><span class="sound_only">댓글</span><span class="cnt_cmt"><?php echo $list[$i]['wr_comment']; ?></span><span class="sound_only">개</span><?php } ?>
|
||||
</div>
|
||||
</td>
|
||||
<td class="td_name sv_use"><?php echo $list[$i]['name'] ?></td>
|
||||
<td class="td_num"><?php echo $list[$i]['wr_hit'] ?></td>
|
||||
<?php if ($is_good) { ?><td class="td_num"><?php echo $list[$i]['wr_good'] ?></td><?php } ?>
|
||||
<?php if ($is_nogood) { ?><td class="td_num"><?php echo $list[$i]['wr_nogood'] ?></td><?php } ?>
|
||||
<td class="td_datetime"><?php echo $list[$i]['datetime2'] ?></td>
|
||||
|
||||
</tr>
|
||||
<?php } ?>
|
||||
<?php if (count($list) == 0) { echo '<tr><td colspan="'.$colspan.'" class="empty_table">게시물이 없습니다.</td></tr>'; } ?>
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
||||
<!-- 페이지 -->
|
||||
<?php echo $write_pages; ?>
|
||||
<!-- 페이지 -->
|
||||
|
||||
<?php if ($list_href || $is_checkbox || $write_href) { ?>
|
||||
<div class="bo_fx">
|
||||
<?php if ($list_href || $write_href) { ?>
|
||||
<ul class="btn_bo_user">
|
||||
<?php if ($admin_href) { ?><li><a href="<?php echo $admin_href ?>" class="btn_admin btn" title="관리자"><i class="fa fa-cog fa-spin fa-fw"></i><span class="sound_only">관리자</span></a></li><?php } ?>
|
||||
<?php if ($rss_href) { ?><li><a href="<?php echo $rss_href ?>" class="btn_b01 btn" title="RSS"><i class="fa fa-rss" aria-hidden="true"></i><span class="sound_only">RSS</span></a></li><?php } ?>
|
||||
<?php if ($write_href) { ?><li><a href="<?php echo $write_href ?>" class="btn_b01 btn" title="글쓰기"><i class="fa fa-pencil" aria-hidden="true"></i><span class="sound_only">글쓰기</span></a></li><?php } ?>
|
||||
</ul>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</form>
|
||||
|
||||
<!-- 게시판 검색 시작 { -->
|
||||
<div class="bo_sch_wrap">
|
||||
<fieldset class="bo_sch">
|
||||
<h3>검색</h3>
|
||||
<form name="fsearch" method="get">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<input type="hidden" name="sop" value="and">
|
||||
<label for="sfl" class="sound_only">검색대상</label>
|
||||
<select name="sfl" id="sfl">
|
||||
<?php echo get_board_sfl_select_options($sfl); ?>
|
||||
</select>
|
||||
<label for="stx" class="sound_only">검색어<strong class="sound_only"> 필수</strong></label>
|
||||
<div class="sch_bar">
|
||||
<input type="text" name="stx" value="<?php echo stripslashes($stx) ?>" required id="stx" class="sch_input" size="25" maxlength="20" placeholder=" 검색어를 입력해주세요">
|
||||
<button type="submit" value="검색" class="sch_btn"><i class="fa fa-search" aria-hidden="true"></i><span class="sound_only">검색</span></button>
|
||||
</div>
|
||||
<button type="button" class="bo_sch_cls" title="닫기"><i class="fa fa-times" aria-hidden="true"></i><span class="sound_only">닫기</span></button>
|
||||
</form>
|
||||
</fieldset>
|
||||
<div class="bo_sch_bg"></div>
|
||||
</div>
|
||||
<script>
|
||||
jQuery(function($){
|
||||
// 게시판 검색
|
||||
$(".btn_bo_sch").on("click", function() {
|
||||
$(".bo_sch_wrap").toggle();
|
||||
})
|
||||
$('.bo_sch_bg, .bo_sch_cls').click(function(){
|
||||
$('.bo_sch_wrap').hide();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<!-- } 게시판 검색 끝 -->
|
||||
</div>
|
||||
|
||||
<?php if($is_checkbox) { ?>
|
||||
<noscript>
|
||||
<p>자바스크립트를 사용하지 않는 경우<br>별도의 확인 절차 없이 바로 선택삭제 처리하므로 주의하시기 바랍니다.</p>
|
||||
</noscript>
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<script>
|
||||
function all_checked(sw) {
|
||||
var f = document.fboardlist;
|
||||
|
||||
for (var i=0; i<f.length; i++) {
|
||||
if (f.elements[i].name == "chk_wr_id[]")
|
||||
f.elements[i].checked = sw;
|
||||
}
|
||||
}
|
||||
|
||||
function fboardlist_submit(f) {
|
||||
var chk_count = 0;
|
||||
|
||||
for (var i=0; i<f.length; i++) {
|
||||
if (f.elements[i].name == "chk_wr_id[]" && f.elements[i].checked)
|
||||
chk_count++;
|
||||
}
|
||||
|
||||
if (!chk_count) {
|
||||
alert(document.pressed + "할 게시물을 하나 이상 선택하세요.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(document.pressed == "선택복사") {
|
||||
select_copy("copy");
|
||||
return;
|
||||
}
|
||||
|
||||
if(document.pressed == "선택이동") {
|
||||
select_copy("move");
|
||||
return;
|
||||
}
|
||||
|
||||
if(document.pressed == "선택삭제") {
|
||||
if (!confirm("선택한 게시물을 정말 삭제하시겠습니까?\n\n한번 삭제한 자료는 복구할 수 없습니다\n\n답변글이 있는 게시글을 선택하신 경우\n답변글도 선택하셔야 게시글이 삭제됩니다."))
|
||||
return false;
|
||||
|
||||
f.removeAttribute("target");
|
||||
f.action = g5_bbs_url+"/board_list_update.php";
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// 선택한 게시물 복사 및 이동
|
||||
function select_copy(sw) {
|
||||
var f = document.fboardlist;
|
||||
|
||||
if (sw == "copy")
|
||||
str = "복사";
|
||||
else
|
||||
str = "이동";
|
||||
|
||||
var sub_win = window.open("", "move", "left=50, top=50, width=500, height=550, scrollbars=1");
|
||||
|
||||
f.sw.value = sw;
|
||||
f.target = "move";
|
||||
f.action = g5_bbs_url+"/move.php";
|
||||
f.submit();
|
||||
}
|
||||
|
||||
// 게시판 리스트 관리자 옵션
|
||||
jQuery(function($){
|
||||
$(".btn_more_opt.is_list_btn").on("click", function(e) {
|
||||
e.stopPropagation();
|
||||
$(".more_opt.is_list_btn").toggle();
|
||||
});
|
||||
$(document).on("click", function (e) {
|
||||
if(!$(e.target).closest('.is_list_btn').length) {
|
||||
$(".more_opt.is_list_btn").hide();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<?php } ?>
|
||||
<!-- } 게시판 목록 끝 -->
|
||||
@@ -0,0 +1,341 @@
|
||||
@charset "utf-8";
|
||||
|
||||
/* 게시판 목록 */
|
||||
#bo_list {position:relative;margin-bottom:20px}
|
||||
#bo_list:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_list .td_board {width:120px;text-align:center}
|
||||
#bo_list .td_chk {width:30px;text-align:center;border-top:1px solid #ecf0f1;border-bottom:1px solid #ecf0f1}
|
||||
#bo_list .td_date {width:60px;text-align:center}
|
||||
#bo_list .td_datetime {width:60px;text-align:center}
|
||||
#bo_list .td_group {width:100px;text-align:center}
|
||||
#bo_list .td_mb_id {width:100px;text-align:center}
|
||||
#bo_list .td_mng {width:80px;text-align:center}
|
||||
#bo_list .td_name {width:90px;text-align:left;padding:10px 0}
|
||||
#bo_list .td_nick {width:100px;text-align:center}
|
||||
#bo_list .td_num {width:50px;text-align:center}
|
||||
#bo_list .td_num2 {width:50px;text-align:center}
|
||||
#bo_list .td_numbig {width:80px;text-align:center}
|
||||
#bo_list .txt_active {color:#5d910b}
|
||||
#bo_list .txt_expired {color:#ccc}
|
||||
#bo_list tbody tr {border-left:2px solid transparent}
|
||||
#bo_list tbody tr:hover {border-left:2px solid #253dbe}
|
||||
#bo_list tbody .even td {background:#fbfbfb}
|
||||
|
||||
#bo_cate {margin:25px 0}
|
||||
#bo_cate h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_cate ul {zoom:1}
|
||||
#bo_cate ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_cate li {display:inline-block;padding:2px}
|
||||
#bo_cate a {display:block;line-height:28px;padding:5px 15px;border-radius:30px;border:1px solid #d6e9ff;color:#6794d3}
|
||||
#bo_cate a:focus, #bo_cate a:hover, #bo_cate a:active {text-decoration:none;background:#3a8afd;color:#fff}
|
||||
#bo_cate #bo_cate_on {z-index:2;background:#3a8afd;color:#fff;font-weight:bold;border:1px solid #3a8afd;
|
||||
-webkit-box-shadow:inset 0 2px 5px rgb(33, 135, 202);
|
||||
-moz-box-shadow:inset 0 2px 5px rgb(33, 135, 202);
|
||||
box-shadow:inset 0 2px 5px rgb(33, 135, 202)}
|
||||
.td_subject img {margin-left:5px}
|
||||
|
||||
/* 게시판 목록 공통 */
|
||||
.selec_chk {position:absolute;top:0;left:0;width:0;height:0;opacity:0;outline:0;z-index:-1;overflow:hidden}
|
||||
.chk_box {position:relative}
|
||||
.chk_box input[type="checkbox"] + label {position:relative;color:#676e70}
|
||||
.chk_box input[type="checkbox"] + label:hover {color:#2172f8}
|
||||
.chk_box input[type="checkbox"] + label span {float:left;width:15px;height:15px;display:block;background:#fff;border:1px solid #d0d4df;border-radius:3px}
|
||||
.write_div .chk_box input[type="checkbox"] + label, .bo_vc_w .chk_box input[type="checkbox"] + label {padding-left:20px}
|
||||
.write_div .chk_box input[type="checkbox"] + label span, .bo_vc_w .chk_box input[type="checkbox"] + label span {position:absolute;top:2px;left:0;width:15px;height:15px;display:block;margin:0;background:#fff;border:1px solid #d0d4df;border-radius:3px}
|
||||
.chk_box input[type="checkbox"]:checked + label {color:#000}
|
||||
.chk_box input[type="checkbox"]:checked + label span {background:url(./img/chk.png) no-repeat 50% 50% #3a8afd;border-color:#1471f6;border-radius:3px}
|
||||
|
||||
|
||||
#bo_btn_top {margin:10px 0}
|
||||
#bo_btn_top:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_fx {margin-bottom:5px;float:right;zoom:1}
|
||||
.bo_fx:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_fx ul {margin:0;padding:0;list-style:none}
|
||||
#bo_list_total {float:left;line-height:34px;font-size:0.92em;color:#4e546f}
|
||||
|
||||
.btn_bo_user {float:right;margin:0;padding:0;list-style:none}
|
||||
.btn_bo_user li {float:left;width:40px;text-align:center;margin-left:5px;background:#fff}
|
||||
.btn_bo_user > li {position:relative}
|
||||
.btn_bo_adm {float:left}
|
||||
.btn_bo_adm li {float:left;margin-right:5px}
|
||||
.btn_bo_adm input {padding:0 8px;border:0;background:#d4d4d4;color:#666;text-decoration:none;vertical-align:middle}
|
||||
.bo_notice td {background:#fff6fa !important;border-bottom:1px solid #f8e6ee}
|
||||
.bo_notice td a {font-weight:bold}
|
||||
.bo_notice .notice_icon {display:inline-block;line-height:25px;border-radius:5px;font-weight:bold;color:#f9267f}
|
||||
|
||||
.more_opt {display:none;position:absolute;top:45px;right:0;background:#fff;border:1px solid #b8bfc4;z-index:999}
|
||||
.more_opt:before {content:"";position:absolute;top:-8px;right:13px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent}
|
||||
.more_opt:after {content:"";position:absolute;top:-6px;right:13px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
.more_opt li {border-bottom:1px solid #f1f1f1;padding:10px;float:inherit;width:90px;margin:0;color:#6b757c;text-align:left}
|
||||
.more_opt li:last-child {border-bottom:0}
|
||||
.more_opt li button, .more_opt li a {width:100%;border:0;background:#fff;color:#6b757c}
|
||||
.more_opt li:hover a,
|
||||
.more_opt li:hover button {color:#000}
|
||||
.more_opt li i {float:right;line-height:20px}
|
||||
|
||||
.td_num strong {color:#000}
|
||||
.bo_cate_link {float:left;display:inline-block;margin-right:10px;background:#e2eaf6;color:#3a8afd;font-weight:normal !important;height:20px;line-height:10px;padding:5px 8px;border-radius:5px;font-size:0.95em} /* 글제목줄 분류스타일 */
|
||||
.bo_cate_link:hover {text-decoration:none}
|
||||
.bo_tit {display:block;color:#000;font-weight:bold}
|
||||
.bo_current {color:#e8180c}
|
||||
#bo_list .profile_img img {border-radius:50%}
|
||||
#bo_list .cnt_cmt {background:#e9eff5;color:#3a8afd;font-size:11px;height:16px;line-height:16px;padding:0 5px;border-radius:3px;vertical-align:middle}
|
||||
|
||||
#bo_list .bo_tit .title_icon {margin-right:2px}
|
||||
#bo_list .bo_tit .fa-heart {color:#ff0000}
|
||||
#bo_list .bo_tit .fa-lock {display:inline-block;line-height:14px;width:16px;font-size:0.833em;color:#4f818c;background:#cbe3e8;text-align:center;border-radius:2px;font-size:12px;border:1px solid #cbe3e8;vertical-align:middle}
|
||||
#bo_list .bo_tit .new_icon {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#23db79;background:#b9ffda;text-align:center;border-radius:2px;margin-left:2px;font-weight:bold;vertical-align:middle}
|
||||
#bo_list .bo_tit .hot_icon {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#ff0000;background:#ffb9b9;text-align:center;border-radius:2px;vertical-align:middle}
|
||||
#bo_list .bo_tit .fa-caret-right {color:#bbb}
|
||||
#bo_list .bo_tit .fa-download {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#daae37;background:#ffefb9;text-align:center;border-radius:2px;margin-left:5px;vertical-align:middle}
|
||||
#bo_list .bo_tit .fa-link {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#b451fd;background:#edd3fd;text-align:center;border-radius:2px;margin-left:5px;vertical-align:middle}
|
||||
|
||||
.bo_sch_wrap {display:none;width:100%;height:100%;position:fixed;top:0;left:0;z-index:999}
|
||||
.bo_sch {position:absolute;top:50%;left:50%;background:#fff;text-align:left;width:330px;max-height:300px;margin-left:-125px;margin-top:-180px;overflow-y:auto;border-radius:5px;-webkit-box-shadow:1px 1px 18px rgba(0,0,0,0.2);-moz-box-shadow:1px 1px 18px rgba(0,0,0,0.2);box-shadow:1px 1px 18px rgba(0,0,0,0.2);border:1px solid #dde7e9;background:#fff;border-radius:3px}
|
||||
.bo_sch:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_sch h3 {padding:15px;border-bottom:1px solid #e8e8e8}
|
||||
.bo_sch legend {background:red}
|
||||
.bo_sch form {padding:15px;display:block}
|
||||
.bo_sch select {border:0;width:100%;height:40px;border:1px solid #d0d3db;border-radius:2px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075)}
|
||||
.bo_sch .sch_bar {display:inline-block;width:100%;clear:both;margin-top:15px;border:1px solid #d0d3db;border-radius:2px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075)}
|
||||
.bo_sch .sch_input {width:250px;height:38px;border:0;padding:0;background-color:transparent;float:left}
|
||||
.bo_sch .sch_btn {height:38px;float:right;color:#656565;background:none;border:0;width:40px;font-size:15px}
|
||||
.bo_sch .bo_sch_cls {position:absolute;right:0;top:0;color:#b5b8bb;border:0;padding:12px 15px;font-size:16px;background:#fff}
|
||||
.bo_sch_bg {background:#000;background:rgba(0,0,0,0.1);width:100%;height:100%}
|
||||
|
||||
/* 게시판 쓰기 */
|
||||
#char_count_desc {display:block;margin:0 0 5px;padding:0}
|
||||
#char_count_wrap {margin:5px 0 0;text-align:right}
|
||||
#char_count {font-weight:bold}
|
||||
|
||||
#autosave_wrapper {position:relative}
|
||||
#autosave_pop {display:none;z-index:10;position:absolute !important;top:34px;right:0;width:350px;height:auto !important;height:180px;max-height:180px;border:1px solid #565656;background:#fff;
|
||||
-webkit-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
-moz-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2)}
|
||||
#autosave_pop:before {content:"";position:absolute;top:-8px;right:45px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #000 transparent}
|
||||
#autosave_pop:after {content:"";position:absolute;top:-7px;right:45px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
html.no-overflowscrolling #autosave_pop {height:auto;max-height:10000px !important} /* overflow 미지원 기기 대응 */
|
||||
#autosave_pop strong {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#autosave_pop div {text-align:center;margin:0 !important}
|
||||
#autosave_pop button {margin:0;padding:0;border:0}
|
||||
#autosave_pop ul {padding:15px;border-top:1px solid #e9e9e9;list-style:none;overflow-y:scroll;height:130px;border-bottom:1px solid #e8e8e8}
|
||||
#autosave_pop li {padding:8px 5px;border-bottom:1px solid #fff;background:#eee;zoom:1}
|
||||
#autosave_pop li:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#autosave_pop a {display:block;float:left}
|
||||
#autosave_pop span {display:block;float:right;font-size:0.92em;font-style:italic;color:#999}
|
||||
.autosave_close {cursor:pointer;width:100%;height:30px;background:none;color:#888;font-weight:bold;font-size:0.92em}
|
||||
.autosave_close:hover {background:#f3f3f3;color:#3597d9}
|
||||
.autosave_content {display:none}
|
||||
.autosave_del {background:url(./img/close_btn.png) no-repeat 50% 50%;text-indent:-999px;overflow:hidden;height:20px;width:20px}
|
||||
|
||||
/* 게시판 읽기 */
|
||||
#bo_v {margin-bottom:20px;background:#fff;box-sizing:border-box}
|
||||
|
||||
#bo_v_table {position:absolute;top:0;right:16px;margin:0;padding:0 5px;height:25px;background:#ff3061;color:#fff;font-weight:bold;line-height:2.2em}
|
||||
|
||||
#bo_v_title {}
|
||||
#bo_v_title .bo_v_cate {display:inline-block;line-height:20px;background:#e2eaf6;color:#3a8afd;padding:0 10px;border-radius:3px;}
|
||||
#bo_v_title .bo_v_tit {display:block;font-size:2em;margin:5px 0 0;word-break:break-all}
|
||||
|
||||
#bo_v_info {margin:0;border-bottom:1px solid #f1f1f1;color:#666}
|
||||
#bo_v_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_info h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
|
||||
#bo_v_info .profile_info {margin:20px 0 10px;display:inline-block;float:left}
|
||||
#bo_v_info .profile_info .pf_img {float:left;margin-right:10px}
|
||||
#bo_v_info .profile_info .pf_img img {border-radius:50%;width:50px;height:50px}
|
||||
#bo_v_info .profile_info .profile_info_ct {float:left;padding:5px 0;line-height:18px}
|
||||
|
||||
#bo_v_info strong {display:inline-block;margin:0 10px 0 0;font-weight:normal}
|
||||
#bo_v_info .sv_member,
|
||||
#bo_v_info .sv_guest,
|
||||
#bo_v_info .member,
|
||||
#bo_v_info .guest {font-weight:bold}
|
||||
#bo_v_info .profile_img {display:none}
|
||||
#bo_v_info .sv_member {color:#000}
|
||||
#bo_v_info .if_date {margin:0;color:#888}
|
||||
|
||||
#bo_v_file h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_file ul {margin:0;list-style:none}
|
||||
#bo_v_file li {padding:15px;position:relative;margin:10px 0;border:1px solid #dfdfdf;border-radius:5px;
|
||||
-webkit-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
-moz-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%)}
|
||||
#bo_v_file li i {float:left;color:#b2b2b2;font-size:2.35em;margin-right:20px}
|
||||
#bo_v_file a {float:left;display:block;text-decoration:none;word-wrap:break-word;color:#000}
|
||||
#bo_v_file a:focus, #bo_v_file li:hover a, #bo_v_file a:active {text-decoration:underline;color:#3a8afd}
|
||||
#bo_v_file img {float:left;margin:0 10px 0 0}
|
||||
#bo_v_file .bo_v_file_cnt {color:#b2b2b2;font-size:0.92em}
|
||||
#bo_v_file li:hover {border-color:#bed4f4;color:#bed4f4}
|
||||
#bo_v_file li:hover i {color:#3a8afd}
|
||||
#bo_v_file li:hover .bo_v_file_cnt {color:#99c2fc}
|
||||
|
||||
|
||||
#bo_v_link h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_file ul {margin:0;list-style:none}
|
||||
#bo_v_link li {padding:15px;position:relative;margin:10px 0;border:1px solid #dfdfdf;border-radius:5px;
|
||||
-webkit-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
-moz-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%)}
|
||||
#bo_v_link li i {float:left;color:#b2b2b2;font-size:2.35em;margin-right:20px}
|
||||
#bo_v_link a {float:left;display:block;text-decoration:none;word-wrap:break-word;color:#000}
|
||||
#bo_v_link a:focus, #bo_v_link li:hover a, #bo_v_link a:active {text-decoration:underline;color:#3a8afd}
|
||||
#bo_v_link .bo_v_link_cnt {color:#b2b2b2;font-size:0.92em}
|
||||
#bo_v_link li:hover {border-color:#bed4f4;color:#bed4f4}
|
||||
#bo_v_link li:hover i {color:#3a8afd}
|
||||
#bo_v_link li:hover .bo_v_link_cnt {color:#99c2fc}
|
||||
|
||||
#bo_v_top {zoom:1}
|
||||
#bo_v_top:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_top h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_top ul {padding:0;list-style:none;word-break:break-all;background:#fff}
|
||||
|
||||
#bo_v_bot {zoom:1}
|
||||
#bo_v_bot:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_bot h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_bot ul {padding:0;list-style:none}
|
||||
|
||||
.bo_v_com {margin:20px 0;float:right}
|
||||
.bo_v_com > li {position:relative;float:left;margin-left:5px}
|
||||
|
||||
.bo_v_nb {position:relative;margin:20px 0;clear:both;text-align:left}
|
||||
.bo_v_nb:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_v_nb li {border-top:1px solid #f1f1f1;padding:13px}
|
||||
.bo_v_nb li:last-child {border-bottom:1px solid #f1f1f1}
|
||||
.bo_v_nb li:hover {background:#f6f6f6}
|
||||
.bo_v_nb li i {font-size:13px;color:#b3b3b3}
|
||||
.bo_v_nb li .nb_tit {display:inline-block;padding-right:20px;color:#b3b3b3}
|
||||
.bo_v_nb li .nb_date {float:right;color:#b3b3b3}
|
||||
|
||||
#bo_v_atc {min-height:200px;height:auto !important;height:200px}
|
||||
#bo_v_atc_title {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
|
||||
#bo_v_img {width:100%;overflow:hidden;zoom:1}
|
||||
#bo_v_img:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_img a.view_image {display:block}
|
||||
#bo_v_img img {margin-bottom:20px;max-width:100%;height:auto}
|
||||
|
||||
#bo_v_con {margin:10px 0 30px;width:100%;line-height:1.7em;min-height:200px;word-break:break-all;overflow:hidden}
|
||||
#bo_v_con a {color:#000;text-decoration:underline}
|
||||
#bo_v_con img {max-width:100%;height:auto}
|
||||
|
||||
#bo_v_act {margin-bottom:30px;text-align:center}
|
||||
#bo_v_act .bo_v_act_gng {position:relative}
|
||||
#bo_v_act a {margin-right:5px;vertical-align:middle;color:#4a5158}
|
||||
#bo_v_act a:hover {background-color:#fff;color:#ff484f;border-color:#ff484f}
|
||||
#bo_v_act i {font-size:1.4em;margin-right:5px}
|
||||
#bo_v_act_good, #bo_v_act_nogood {display:none;position:absolute;top:30px;left:0;z-index:9999;padding:10px 0;width:165px;background:#ff3061;color:#fff;text-align:center}
|
||||
#bo_v_act .bo_v_good {display:inline-block;border:1px solid #dedede;width:70px;line-height:46px;border-radius:30px}
|
||||
#bo_v_act .bo_v_nogood {display:inline-block;border:1px solid #dedede;width:70px;line-height:46px;border-radius:30px}
|
||||
|
||||
#bo_v_sns {padding:0;list-style:none;zoom:1;float:left;display:inline-block}
|
||||
#bo_v_sns:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_sns li {float:left;width:135px;margin-right:5px;text-align:left}
|
||||
#bo_v_sns li a {height:35px;line-height:35px;text-align:center;border-radius:5px;color:#fff;font-size:0.95em}
|
||||
#bo_v_sns li img {vertical-align:middle;margin-right:5px}
|
||||
#bo_v_sns li .sns_f {display:block;background:#3b5997}
|
||||
#bo_v_sns li .sns_t {display:block;background:#09aeee}
|
||||
#bo_v_sns li .sns_g {display:block;background:#ea4026}
|
||||
#bo_v_sns li .sns_k {display:block;background:#fbe300}
|
||||
|
||||
#bo_v_share {position:relative;padding:20px 0}
|
||||
#bo_v_share:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_share .btn {padding:0 10px;color:#555;font-weight:normal;font-size:1em;width:80px;line-height:35px;height:35px;border-color:#d5d5d5;border-radius:5px}
|
||||
#bo_v_share .btn:hover {background:#fff}
|
||||
#bo_v_share .btn i {margin-right:5px;color:#4b5259;vertical-align:middle}
|
||||
|
||||
/* 게시판 댓글 */
|
||||
.cmt_btn {width:100%;text-align:left;border:0;border-bottom:1px solid #f0f0f0;background:#fff;font-weight:bold;margin:30px 0 0px;padding:0 0 15px}
|
||||
.cmt_btn span.total {position:relative;display:inline-block;margin-right:5px;font-size:1em;color:#3a8afd}
|
||||
.cmt_btn span.cmt_more {float:right;display:inline-block;width:15px;height:10px;background:url(./img/btn_cmt.png) no-repeat right 2px;margin-top:5px}
|
||||
.cmt_btn_op span.cmt_more {background-position:right -8px}
|
||||
.cmt_btn b {font-size:1.2em;color:#000}
|
||||
.cmt_btn span.total:after {position:absolute;bottom:-17px;left:0;display:inline-block;background:#3a8afd;content:"";width:100%;height:2px}
|
||||
#bo_vc {}
|
||||
#bo_vc h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc article {margin:20px 0;position:relative;border-bottom:1px solid #f0f0f0}
|
||||
#bo_vc article:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc article .profile_img img {border-radius:50%}
|
||||
#bo_vc article .pf_img {float:left;margin-right:10px}
|
||||
#bo_vc article .pf_img img {border-radius:50%;width:50px;height:50px}
|
||||
#bo_vc article .cm_wrap {float:left;max-width:870px;width:90%}
|
||||
#bo_vc header {position:relative;width:100%}
|
||||
#bo_vc header:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc header .profile_img {display:none}
|
||||
#bo_vc header .icon_reply {position:absolute;top:15px;left:-20px}
|
||||
#bo_vc .member, #bo_vc .guest, #bo_vc .sv_member, #bo_vc .sv_guest {font-weight:bold}
|
||||
.bo_vc_hdinfo {color:#777}
|
||||
#bo_vc h1 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc .cmt_contents {line-height:1.8em;padding:0 0 20px}
|
||||
#bo_vc p a {text-decoration:underline}
|
||||
#bo_vc p a.s_cmt {text-decoration:underline;color:#ed6479}
|
||||
#bo_vc_empty {margin:0;padding:80px 0 !important;color:#777;text-align:center}
|
||||
#bo_vc #bo_vc_winfo {float:left}
|
||||
#bo_vc .bo_vl_opt {position:absolute;top:0;right:0}
|
||||
|
||||
.bo_vc_act {display:none;position:absolute;right:0;top:40px;width:58px;text-align:right;border:1px solid #b8bfc4;margin:0;list-style:none;background:#fff;zoom:1;z-index:9999}
|
||||
.bo_vc_act:before {content:"";position:absolute;top:-8px;right:5px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent}
|
||||
.bo_vc_act:after {content:"";position:absolute;top:-6px;right:5px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
.bo_vc_act li {border-bottom:1px solid #f0f0f0}
|
||||
.bo_vc_act li:last-child {border-bottom:0}
|
||||
.bo_vc_act li a {display:inline-block;padding:10px 15px}
|
||||
.bo_vc_act li a:hover {color:#3a8afd}
|
||||
|
||||
.bo_vc_w {position:relative;margin:10px 0;display:block}
|
||||
.bo_vc_w:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_vc_w h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
.bo_vc_w #char_cnt {display:block;margin:0 0 5px}
|
||||
.bo_vc_w textarea {border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;width:100%;height:120px;
|
||||
-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||
-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||
box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1)}
|
||||
#wr_secret {}
|
||||
.bo_vc_w_info {margin:10px 0;float:left}
|
||||
.bo_vc_w_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_vc_w_info .frm_input {float:left;margin-right:5px}
|
||||
.bo_vc_w_info #captcha {padding-top:10px;display:block;clear:both}
|
||||
.bo_vc_w .btn_confirm {clear:both;margin-top:10px}
|
||||
.bo_vc_w .btn_confirm label {display:inline-block;margin-right:10px;border-radius:3px;font-size:1.5em;text-align:center}
|
||||
.bo_vc_w .btn_submit {height:45px;padding:0 20px;border-radius:3px;font-weight:bold;font-size:1.083em}
|
||||
.bo_vc_w .btn_confirm .secret_cm label {font-size:1em !important}
|
||||
.bo_vc_w_wr:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.secret_cm {display:inline-block;float:left}
|
||||
|
||||
#bo_vc_send_sns {display:inline-block;float:left}
|
||||
#bo_vc_sns {display:inline-block;margin:0;padding:0;list-style:none;zoom:1}
|
||||
#bo_vc_sns:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc_sns li {float:left;margin:0 5px 0 0}
|
||||
#bo_vc_sns .sns_li_f {border-radius:3px;background:#3a589b;height:40px;line-height:40px;padding:0 0 0 10px}
|
||||
#bo_vc_sns .sns_li_t {border-radius:3px;background:#00aced;height:40px;line-height:40px;padding:0 0 0 10px}
|
||||
#bo_vc_sns .sns_li_off {background:#bbb}
|
||||
#bo_vc_sns a {display:inline-block;padding:0 15px 0 5px}
|
||||
#bo_vc_sns input {margin:0 5px 0 0}
|
||||
|
||||
/*글쓰기*/
|
||||
#bo_w .bo_v_option li {display:inline-block;float:left;text-align:left;margin:0 5px 0 0}
|
||||
#bo_w .bo_v_option li label {vertical-align:baseline}
|
||||
#bo_w .bo_v_option .chk_box input[type="checkbox"] + label span {margin-left:0;margin-right:5px}
|
||||
#bo_w .write_div {margin:10px 0;position:relative}
|
||||
#bo_w .write_div:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_w .bo_w_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_w .bo_w_info .frm_input {float:left;margin-bottom:1%}
|
||||
#bo_w #wr_password, #bo_w #wr_homepage {margin-left:1%}
|
||||
#bo_w .wr_content.smarteditor2 iframe {background:#fff}
|
||||
#bo_w .bo_w_tit {position:relative}
|
||||
#bo_w .bo_w_tit .frm_input {padding-right:120px}
|
||||
#bo_w .bo_w_tit #btn_autosave {position:absolute;top:5px;right:5px;line-height:30px;height:30px}
|
||||
#bo_w .bo_w_link label {position:absolute;top:1px;left:1px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;font-size:1.2em;text-align:center;color:#b2b2b2}
|
||||
#bo_w .bo_w_link .frm_input {padding-left:50px}
|
||||
#bo_w .bo_w_flie .lb_icon {position:absolute;top:0px;left:0px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;font-size:1.2em;text-align:center;color:#b2b2b2}
|
||||
#bo_w .bo_w_flie .frm_file {padding-left:50px;margin-top:3px}
|
||||
#bo_w .bo_w_flie .file_wr {position:relative;border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;height:40px;margin:0}
|
||||
#bo_w .bo_w_flie .frm_input {margin:10px 0 0}
|
||||
#bo_w .bo_w_flie .file_del {position:absolute;top:10px;right:10px;font-size:0.92em;color:#7d7d7d}
|
||||
#bo_w .bo_w_select select {border:1px solid #d0d3db;width:100%;height:40px;border-radius:3px}
|
||||
#bo_w .btn_submit {padding:0 20px;font-size:1.167em}
|
||||
#bo_w .btn_cancel {border-radius:3px;font-size:1.167em}
|
||||
@@ -0,0 +1,306 @@
|
||||
<?php
|
||||
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
include_once(G5_LIB_PATH.'/thumbnail.lib.php');
|
||||
|
||||
// 💡 [추가] 광고 설정 강제 활성화 (기존 소스 유지)
|
||||
if (isset($basic_skin_config)) {
|
||||
$basic_skin_config['left_ad'] = true;
|
||||
$basic_skin_config['right_ad'] = true;
|
||||
}
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
<script src="<?php echo G5_JS_URL; ?>/viewimageresize.js"></script>
|
||||
|
||||
<!-- 게시물 읽기 시작 { -->
|
||||
|
||||
<article id="bo_v" style="width:<?php echo $width; ?>">
|
||||
<header>
|
||||
<h2 id="bo_v_title">
|
||||
<?php if ($category_name) { ?>
|
||||
<span class="bo_v_cate"><?php echo $view['ca_name']; // 분류 출력 끝 ?></span>
|
||||
<?php } ?>
|
||||
<span class="bo_v_tit">
|
||||
<?php
|
||||
echo cut_str(get_text($view['wr_subject']), 70); // 글제목 출력
|
||||
?></span>
|
||||
</h2>
|
||||
</header>
|
||||
|
||||
<section id="bo_v_info">
|
||||
<h2>페이지 정보</h2>
|
||||
<div class="profile_info">
|
||||
<div class="pf_img"><?php echo get_member_profile_img($view['mb_id']) ?></div>
|
||||
<div class="profile_info_ct">
|
||||
<span class="sound_only">작성자</span> <strong><?php echo $view['name'] ?><?php if ($is_ip_view) { echo " ($ip)"; } ?></strong><br>
|
||||
<span class="sound_only">댓글</span><strong><a href="#bo_vc"> <i class="fa fa-commenting-o" aria-hidden="true"></i> <?php echo number_format($view['wr_comment']) ?>건</a></strong>
|
||||
<span class="sound_only">조회</span><strong><i class="fa fa-eye" aria-hidden="true"></i> <?php echo number_format($view['wr_hit']) ?>회</strong>
|
||||
<strong class="if_date"><span class="sound_only">작성일</span><i class="fa fa-clock-o" aria-hidden="true"></i> <?php echo date("y-m-d H:i", strtotime($view['wr_datetime'])) ?></strong>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 게시물 상단 버튼 시작 { -->
|
||||
<div id="bo_v_top">
|
||||
<?php ob_start(); ?>
|
||||
|
||||
<ul class="btn_bo_user bo_v_com">
|
||||
<li><a href="<?php echo $list_href ?>" class="btn_b01 btn" title="목록"><i class="fa fa-list" aria-hidden="true"></i><span class="sound_only">목록</span></a></li>
|
||||
<?php if ($reply_href) { ?><li><a href="<?php echo $reply_href ?>" class="btn_b01 btn" title="답변"><i class="fa fa-reply" aria-hidden="true"></i><span class="sound_only">답변</span></a></li><?php } ?>
|
||||
<?php if ($write_href) { ?><li><a href="<?php echo $write_href ?>" class="btn_b01 btn" title="글쓰기"><i class="fa fa-pencil" aria-hidden="true"></i><span class="sound_only">글쓰기</span></a></li><?php } ?>
|
||||
<?php if($update_href || $delete_href || $copy_href || $move_href || $search_href) { ?>
|
||||
<li>
|
||||
<button type="button" class="btn_more_opt is_view_btn btn_b01 btn"><i class="fa fa-ellipsis-v" aria-hidden="true"></i><span class="sound_only">게시판 리스트 옵션</span></button>
|
||||
<ul class="more_opt is_view_btn">
|
||||
<?php if ($update_href) { ?><li><a href="<?php echo $update_href ?>">수정<i class="fa fa-pencil-square-o" aria-hidden="true"></i></a></li><?php } ?>
|
||||
<?php if ($delete_href) { ?><li><a href="<?php echo $delete_href ?>" onclick="del(this.href); return false;">삭제<i class="fa fa-trash-o" aria-hidden="true"></i></a></li><?php } ?>
|
||||
<?php if ($copy_href) { ?><li><a href="<?php echo $copy_href ?>" onclick="board_move(this.href); return false;">복사<i class="fa fa-files-o" aria-hidden="true"></i></a></li><?php } ?>
|
||||
<?php if ($move_href) { ?><li><a href="<?php echo $move_href ?>" onclick="board_move(this.href); return false;">이동<i class="fa fa-arrows" aria-hidden="true"></i></a></li><?php } ?>
|
||||
<?php if ($search_href) { ?><li><a href="<?php echo $search_href ?>">검색<i class="fa fa-search" aria-hidden="true"></i></a></li><?php } ?>
|
||||
</ul>
|
||||
</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
<script>
|
||||
|
||||
jQuery(function($){
|
||||
// 게시판 보기 버튼 옵션
|
||||
$(".btn_more_opt.is_view_btn").on("click", function(e) {
|
||||
e.stopPropagation();
|
||||
$(".more_opt.is_view_btn").toggle();
|
||||
})
|
||||
;
|
||||
$(document).on("click", function (e) {
|
||||
if(!$(e.target).closest('.is_view_btn').length) {
|
||||
$(".more_opt.is_view_btn").hide();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<?php
|
||||
$link_buttons = ob_get_contents();
|
||||
ob_end_flush();
|
||||
?>
|
||||
</div>
|
||||
<!-- } 게시물 상단 버튼 끝 -->
|
||||
</section>
|
||||
|
||||
<section id="bo_v_atc">
|
||||
<h2 id="bo_v_atc_title">본문</h2>
|
||||
<div id="bo_v_share">
|
||||
<?php include_once(G5_SNS_PATH."/view.sns.skin.php"); ?>
|
||||
<?php if ($scrap_href) { ?><a href="<?php echo $scrap_href; ?>" target="_blank" class="btn btn_b03" onclick="win_scrap(this.href); return false;"><i class="fa fa-bookmark" aria-hidden="true"></i> 스크랩</a><?php } ?>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
// 파일 출력
|
||||
$v_img_count = count($view['file']);
|
||||
if($v_img_count) {
|
||||
echo "<div id=\"bo_v_img\">\n";
|
||||
|
||||
foreach($view['file'] as $view_file) {
|
||||
echo get_file_thumbnail($view_file);
|
||||
}
|
||||
|
||||
echo "</div>\n";
|
||||
}
|
||||
?>
|
||||
|
||||
<!-- 본문 내용 시작 { -->
|
||||
<div id="bo_v_con"><?php echo get_view_thumbnail($view['content']); ?></div>
|
||||
<?php //echo $view['rich_content']; // {이미지:0} 과 같은 코드를 사용할 경우 ?>
|
||||
<!-- } 본문 내용 끝 -->
|
||||
|
||||
<?php if ($is_signature) { ?><p><?php echo $signature ?></p><?php } ?>
|
||||
|
||||
|
||||
<!-- 추천 비추천 시작 { -->
|
||||
<?php if ( $good_href || $nogood_href) { ?>
|
||||
<div id="bo_v_act">
|
||||
<?php if ($good_href) { ?>
|
||||
<span class="bo_v_act_gng">
|
||||
<a href="<?php echo $good_href.'&'.$qstr ?>" id="good_button" class="bo_v_good"><i class="fa fa-thumbs-o-up" aria-hidden="true"></i><span class="sound_only">추천</span><strong><?php echo number_format($view['wr_good']) ?></strong></a>
|
||||
<b id="bo_v_act_good"></b>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php if ($nogood_href) { ?>
|
||||
<span class="bo_v_act_gng">
|
||||
<a href="<?php echo $nogood_href.'&'.$qstr ?>" id="nogood_button" class="bo_v_nogood"><i class="fa fa-thumbs-o-down" aria-hidden="true"></i><span class="sound_only">비추천</span><strong><?php echo number_format($view['wr_nogood']) ?></strong></a>
|
||||
<b id="bo_v_act_nogood"></b>
|
||||
</span>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php } else {
|
||||
if($board['bo_use_good'] || $board['bo_use_nogood']) {
|
||||
?>
|
||||
<div id="bo_v_act">
|
||||
<?php if($board['bo_use_good']) { ?><span class="bo_v_good"><i class="fa fa-thumbs-o-up" aria-hidden="true"></i><span class="sound_only">추천</span><strong><?php echo number_format($view['wr_good']) ?></strong></span><?php } ?>
|
||||
<?php if($board['bo_use_nogood']) { ?><span class="bo_v_nogood"><i class="fa fa-thumbs-o-down" aria-hidden="true"></i><span class="sound_only">비추천</span><strong><?php echo number_format($view['wr_nogood']) ?></strong></span><?php } ?>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
<!-- } 추천 비추천 끝 -->
|
||||
</section>
|
||||
|
||||
<?php
|
||||
$cnt = 0;
|
||||
if ($view['file']['count']) {
|
||||
for ($i=0; $i<count($view['file']); $i++) {
|
||||
if (isset($view['file'][$i]['source']) && $view['file'][$i]['source'] && !$view['file'][$i]['view'])
|
||||
$cnt++;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<?php if($cnt) { ?>
|
||||
<!-- 첨부파일 시작 { -->
|
||||
<section id="bo_v_file">
|
||||
<h2>첨부파일</h2>
|
||||
<ul>
|
||||
<?php
|
||||
// 가변 파일
|
||||
for ($i=0; $i<count($view['file']); $i++) {
|
||||
if (isset($view['file'][$i]['source']) && $view['file'][$i]['source'] && !$view['file'][$i]['view']) {
|
||||
?>
|
||||
<li>
|
||||
<i class="fa fa-folder-open" aria-hidden="true"></i>
|
||||
<a href="<?php echo $view['file'][$i]['href']; ?>" class="view_file_download">
|
||||
<strong><?php echo $view['file'][$i]['source'] ?></strong> <?php echo $view['file'][$i]['content'] ?> (<?php echo $view['file'][$i]['size'] ?>)
|
||||
</a>
|
||||
<br>
|
||||
<span class="bo_v_file_cnt"><?php echo $view['file'][$i]['download'] ?>회 다운로드 | DATE : <?php echo $view['file'][$i]['datetime'] ?></span>
|
||||
</li>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</section>
|
||||
<!-- } 첨부파일 끝 -->
|
||||
<?php } ?>
|
||||
|
||||
<?php if(isset($view['link']) && array_filter($view['link'])) { ?>
|
||||
<!-- 관련링크 시작 { -->
|
||||
<section id="bo_v_link">
|
||||
<h2>관련링크</h2>
|
||||
<ul>
|
||||
<?php
|
||||
// 링크
|
||||
$cnt = 0;
|
||||
for ($i=1; $i<=count($view['link']); $i++) {
|
||||
if ($view['link'][$i]) {
|
||||
$cnt++;
|
||||
$link = cut_str($view['link'][$i], 70);
|
||||
?>
|
||||
<li>
|
||||
<i class="fa fa-link" aria-hidden="true"></i>
|
||||
<a href="<?php echo $view['link_href'][$i] ?>" target="_blank">
|
||||
<strong><?php echo $link ?></strong>
|
||||
</a>
|
||||
<br>
|
||||
<span class="bo_v_link_cnt"><?php echo $view['link_hit'][$i] ?>회 연결</span>
|
||||
</li>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</section>
|
||||
<!-- } 관련링크 끝 -->
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($prev_href || $next_href) { ?>
|
||||
<ul class="bo_v_nb">
|
||||
<?php if ($prev_href) { ?><li class="btn_prv"><span class="nb_tit"><i class="fa fa-chevron-up" aria-hidden="true"></i> 이전글</span><a href="<?php echo $prev_href ?>"><?php echo $prev_wr_subject;?></a> <span class="nb_date"><?php echo str_replace('-', '.', substr($prev_wr_date, '2', '8')); ?></span></li><?php } ?>
|
||||
<?php if ($next_href) { ?><li class="btn_next"><span class="nb_tit"><i class="fa fa-chevron-down" aria-hidden="true"></i> 다음글</span><a href="<?php echo $next_href ?>"><?php echo $next_wr_subject;?></a> <span class="nb_date"><?php echo str_replace('-', '.', substr($next_wr_date, '2', '8')); ?></span></li><?php } ?>
|
||||
</ul>
|
||||
<?php } ?>
|
||||
|
||||
<?php
|
||||
// 코멘트 입출력
|
||||
include_once(G5_BBS_PATH.'/view_comment.php');
|
||||
?>
|
||||
</article>
|
||||
<!-- } 게시판 읽기 끝 -->
|
||||
|
||||
<script>
|
||||
<?php if ($board['bo_download_point'] < 0) { ?>
|
||||
$(function() {
|
||||
$("a.view_file_download").click(function() {
|
||||
if(!g5_is_member) {
|
||||
alert("다운로드 권한이 없습니다.\n회원이시라면 로그인 후 이용해 보십시오.");
|
||||
return false;
|
||||
}
|
||||
|
||||
var msg = "파일을 다운로드 하시면 포인트가 차감(<?php echo number_format($board['bo_download_point']) ?>점)됩니다.\n\n포인트는 게시물당 한번만 차감되며 다음에 다시 다운로드 하셔도 중복하여 차감하지 않습니다.\n\n그래도 다운로드 하시겠습니까?";
|
||||
|
||||
if(confirm(msg)) {
|
||||
var href = $(this).attr("href")+"&js=on";
|
||||
$(this).attr("href", href);
|
||||
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
});
|
||||
<?php } ?>
|
||||
|
||||
function board_move(href)
|
||||
{
|
||||
window.open(href, "boardmove", "left=50, top=50, width=500, height=550, scrollbars=1");
|
||||
}
|
||||
</script>
|
||||
|
||||
<script>
|
||||
$(function() {
|
||||
$("a.view_image").click(function() {
|
||||
window.open(this.href, "large_image", "location=yes,links=no,toolbar=no,top=10,left=10,width=10,height=10,resizable=yes,scrollbars=no,status=no");
|
||||
return false;
|
||||
});
|
||||
|
||||
// 추천, 비추천
|
||||
$("#good_button, #nogood_button").click(function() {
|
||||
var $tx;
|
||||
if(this.id == "good_button")
|
||||
$tx = $("#bo_v_act_good");
|
||||
else
|
||||
$tx = $("#bo_v_act_nogood");
|
||||
|
||||
excute_good(this.href, $(this), $tx);
|
||||
return false;
|
||||
});
|
||||
|
||||
// 이미지 리사이즈
|
||||
$("#bo_v_atc").viewimageresize();
|
||||
});
|
||||
|
||||
function excute_good(href, $el, $tx)
|
||||
{
|
||||
$.post(
|
||||
href,
|
||||
{ js: "on" },
|
||||
function(data) {
|
||||
if(data.error) {
|
||||
alert(data.error);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(data.count) {
|
||||
$el.find("strong").text(number_format(String(data.count)));
|
||||
if($tx.attr("id").search("nogood") > -1) {
|
||||
$tx.text("이 글을 비추천하셨습니다.");
|
||||
$tx.fadeIn(200).delay(2500).fadeOut(200);
|
||||
} else {
|
||||
$tx.text("이 글을 추천하셨습니다.");
|
||||
$tx.fadeIn(200).delay(2500).fadeOut(200);
|
||||
}
|
||||
}
|
||||
}, "json"
|
||||
);
|
||||
}
|
||||
</script>
|
||||
<!-- } 게시글 읽기 끝 -->
|
||||
@@ -0,0 +1,355 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
?>
|
||||
|
||||
<script>
|
||||
// 글자수 제한
|
||||
var char_min = parseInt(<?php echo $comment_min ?>); // 최소
|
||||
var char_max = parseInt(<?php echo $comment_max ?>); // 최대
|
||||
</script>
|
||||
<button type="button" class="cmt_btn"><span class="total"><b>댓글</b> <?php echo $view['wr_comment']; ?></span><span class="cmt_more"></span></button>
|
||||
<!-- 댓글 시작 { -->
|
||||
<section id="bo_vc">
|
||||
<h2>댓글목록</h2>
|
||||
<?php
|
||||
$cmt_amt = count($list);
|
||||
for ($i=0; $i<$cmt_amt; $i++) {
|
||||
$comment_id = $list[$i]['wr_id'];
|
||||
$cmt_depth = strlen($list[$i]['wr_comment_reply']) * 50;
|
||||
$comment = $list[$i]['content'];
|
||||
/*
|
||||
if (strstr($list[$i]['wr_option'], "secret")) {
|
||||
$str = $str;
|
||||
}
|
||||
*/
|
||||
$comment = preg_replace("/\[\<a\s.*href\=\"(http|https|ftp|mms)\:\/\/([^[:space:]]+)\.(mp3|wma|wmv|asf|asx|mpg|mpeg)\".*\<\/a\>\]/i", "<script>doc_write(obj_movie('$1://$2.$3'));</script>", $comment);
|
||||
$cmt_sv = $cmt_amt - $i + 1; // 댓글 헤더 z-index 재설정 ie8 이하 사이드뷰 겹침 문제 해결
|
||||
$c_reply_href = $comment_common_url.'&c_id='.$comment_id.'&w=c#bo_vc_w';
|
||||
$c_edit_href = $comment_common_url.'&c_id='.$comment_id.'&w=cu#bo_vc_w';
|
||||
$is_comment_reply_edit = ($list[$i]['is_reply'] || $list[$i]['is_edit'] || $list[$i]['is_del']) ? 1 : 0;
|
||||
?>
|
||||
|
||||
<article id="c_<?php echo $comment_id ?>" <?php if ($cmt_depth) { ?>style="margin-left:<?php echo $cmt_depth ?>px;border-top-color:#e0e0e0"<?php } ?>>
|
||||
<div class="pf_img"><?php echo get_member_profile_img($list[$i]['mb_id']); ?></div>
|
||||
|
||||
<div class="cm_wrap">
|
||||
|
||||
<header style="z-index:<?php echo $cmt_sv; ?>">
|
||||
<h2><?php echo get_text($list[$i]['wr_name']); ?>님의 <?php if ($cmt_depth) { ?><span class="sound_only">댓글의</span><?php } ?> 댓글</h2>
|
||||
<?php echo $list[$i]['name'] ?>
|
||||
<?php if ($is_ip_view) { ?>
|
||||
<span class="sound_only">아이피</span>
|
||||
<span>(<?php echo $list[$i]['ip']; ?>)</span>
|
||||
<?php } ?>
|
||||
<span class="sound_only">작성일</span>
|
||||
<span class="bo_vc_hdinfo"><i class="fa fa-clock-o" aria-hidden="true"></i> <time datetime="<?php echo date('Y-m-d\TH:i:s+09:00', strtotime($list[$i]['datetime'])) ?>"><?php echo $list[$i]['datetime'] ?></time></span>
|
||||
<?php
|
||||
include(G5_SNS_PATH.'/view_comment_list.sns.skin.php');
|
||||
?>
|
||||
</header>
|
||||
|
||||
<!-- 댓글 출력 -->
|
||||
<div class="cmt_contents">
|
||||
<p>
|
||||
<?php if (strstr($list[$i]['wr_option'], "secret")) { ?><img src="<?php echo $board_skin_url; ?>/img/icon_secret.gif" alt="비밀글"><?php } ?>
|
||||
<?php echo $comment ?>
|
||||
</p>
|
||||
<?php if($is_comment_reply_edit) {
|
||||
if($w == 'cu') {
|
||||
$sql = " select wr_id, wr_content, mb_id from $write_table where wr_id = '$c_id' and wr_is_comment = '1' ";
|
||||
$cmt = sql_fetch($sql);
|
||||
if (isset($cmt)) {
|
||||
if (!($is_admin || ($member['mb_id'] == $cmt['mb_id'] && $cmt['mb_id']))) {
|
||||
$cmt['wr_content'] = '';
|
||||
}
|
||||
$c_wr_content = $cmt['wr_content'];
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<span id="edit_<?php echo $comment_id ?>" class="bo_vc_w"></span><!-- 수정 -->
|
||||
<span id="reply_<?php echo $comment_id ?>" class="bo_vc_w"></span><!-- 답변 -->
|
||||
|
||||
<input type="hidden" value="<?php echo strstr($list[$i]['wr_option'],"secret") ?>" id="secret_comment_<?php echo $comment_id ?>">
|
||||
<textarea id="save_comment_<?php echo $comment_id ?>" style="display:none"><?php echo get_text($list[$i]['content1'], 0) ?></textarea>
|
||||
</div>
|
||||
<?php if($is_comment_reply_edit) { ?>
|
||||
<div class="bo_vl_opt">
|
||||
<button type="button" class="btn_cm_opt btn_b01 btn"><i class="fa fa-ellipsis-v" aria-hidden="true"></i><span class="sound_only">댓글 옵션</span></button>
|
||||
<ul class="bo_vc_act">
|
||||
<?php if ($list[$i]['is_reply']) { ?><li><a href="<?php echo $c_reply_href; ?>" onclick="comment_box('<?php echo $comment_id ?>', 'c'); return false;">답변</a></li><?php } ?>
|
||||
<?php if ($list[$i]['is_edit']) { ?><li><a href="<?php echo $c_edit_href; ?>" onclick="comment_box('<?php echo $comment_id ?>', 'cu'); return false;">수정</a></li><?php } ?>
|
||||
<?php if ($list[$i]['is_del']) { ?><li><a href="<?php echo $list[$i]['del_link']; ?>" onclick="return comment_delete();">삭제</a></li><?php } ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<script>
|
||||
$(function() {
|
||||
// 댓글 옵션창 열기
|
||||
$(".btn_cm_opt").on("click", function(){
|
||||
$(this).parent("div").children(".bo_vc_act").show();
|
||||
});
|
||||
|
||||
// 댓글 옵션창 닫기
|
||||
$(document).mouseup(function (e){
|
||||
var container = $(".bo_vc_act");
|
||||
if( container.has(e.target).length === 0)
|
||||
container.hide();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</article>
|
||||
<?php } ?>
|
||||
<?php if ($i == 0) { //댓글이 없다면 ?><p id="bo_vc_empty">등록된 댓글이 없습니다.</p><?php } ?>
|
||||
|
||||
</section>
|
||||
<!-- } 댓글 끝 -->
|
||||
|
||||
<?php if ($is_comment_write) {
|
||||
if($w == '')
|
||||
$w = 'c';
|
||||
?>
|
||||
<!-- 댓글 쓰기 시작 { -->
|
||||
<aside id="bo_vc_w" class="bo_vc_w">
|
||||
<h2>댓글쓰기</h2>
|
||||
<form name="fviewcomment" id="fviewcomment" action="<?php echo $comment_action_url; ?>" onsubmit="return fviewcomment_submit(this);" method="post" autocomplete="off">
|
||||
<input type="hidden" name="w" value="<?php echo $w ?>" id="w">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="wr_id" value="<?php echo $wr_id ?>">
|
||||
<input type="hidden" name="comment_id" value="<?php echo $c_id ?>" id="comment_id">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<input type="hidden" name="sfl" value="<?php echo $sfl ?>">
|
||||
<input type="hidden" name="stx" value="<?php echo $stx ?>">
|
||||
<input type="hidden" name="spt" value="<?php echo $spt ?>">
|
||||
<input type="hidden" name="page" value="<?php echo $page ?>">
|
||||
<input type="hidden" name="is_good" value="">
|
||||
|
||||
<span class="sound_only">내용</span>
|
||||
<?php if ($comment_min || $comment_max) { ?><strong id="char_cnt"><span id="char_count"></span>글자</strong><?php } ?>
|
||||
<textarea id="wr_content" name="wr_content" maxlength="10000" required class="required" title="내용" placeholder="댓글내용을 입력해주세요"
|
||||
<?php if ($comment_min || $comment_max) { ?>onkeyup="check_byte('wr_content', 'char_count');"<?php } ?>><?php echo $c_wr_content; ?></textarea>
|
||||
<?php if ($comment_min || $comment_max) { ?><script> check_byte('wr_content', 'char_count'); </script><?php } ?>
|
||||
<script>
|
||||
$(document).on("keyup change", "textarea#wr_content[maxlength]", function() {
|
||||
var str = $(this).val()
|
||||
var mx = parseInt($(this).attr("maxlength"))
|
||||
if (str.length > mx) {
|
||||
$(this).val(str.substr(0, mx));
|
||||
return false;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<div class="bo_vc_w_wr">
|
||||
<div class="bo_vc_w_info">
|
||||
<?php if ($is_guest) { ?>
|
||||
<label for="wr_name" class="sound_only">이름<strong> 필수</strong></label>
|
||||
<input type="text" name="wr_name" value="<?php echo get_cookie("ck_sns_name"); ?>" id="wr_name" required class="frm_input required" size="25" placeholder="이름">
|
||||
<label for="wr_password" class="sound_only">비밀번호<strong> 필수</strong></label>
|
||||
<input type="password" name="wr_password" id="wr_password" required class="frm_input required" size="25" placeholder="비밀번호">
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
if($board['bo_use_sns'] && ($config['cf_facebook_appid'] || $config['cf_twitter_key'])) {
|
||||
?>
|
||||
<span class="sound_only">SNS 동시등록</span>
|
||||
<span id="bo_vc_send_sns"></span>
|
||||
<?php } ?>
|
||||
<?php if ($is_guest) { ?>
|
||||
<?php echo $captcha_html; ?>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<div class="btn_confirm">
|
||||
<span class="secret_cm chk_box">
|
||||
<input type="checkbox" name="wr_secret" value="secret" id="wr_secret" class="selec_chk">
|
||||
<label for="wr_secret"><span></span>비밀글</label>
|
||||
</span>
|
||||
<button type="submit" id="btn_submit" class="btn_submit">댓글등록</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</aside>
|
||||
|
||||
<script>
|
||||
var save_before = '';
|
||||
var save_html = document.getElementById('bo_vc_w').innerHTML;
|
||||
|
||||
function good_and_write()
|
||||
{
|
||||
var f = document.fviewcomment;
|
||||
if (fviewcomment_submit(f)) {
|
||||
f.is_good.value = 1;
|
||||
f.submit();
|
||||
} else {
|
||||
f.is_good.value = 0;
|
||||
}
|
||||
}
|
||||
|
||||
function fviewcomment_submit(f)
|
||||
{
|
||||
var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자
|
||||
|
||||
f.is_good.value = 0;
|
||||
|
||||
var subject = "";
|
||||
var content = "";
|
||||
$.ajax({
|
||||
url: g5_bbs_url+"/ajax.filter.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
"subject": "",
|
||||
"content": f.wr_content.value
|
||||
},
|
||||
dataType: "json",
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function(data, textStatus) {
|
||||
subject = data.subject;
|
||||
content = data.content;
|
||||
}
|
||||
});
|
||||
|
||||
if (content) {
|
||||
alert("내용에 금지단어('"+content+"')가 포함되어있습니다");
|
||||
f.wr_content.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 양쪽 공백 없애기
|
||||
var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자
|
||||
document.getElementById('wr_content').value = document.getElementById('wr_content').value.replace(pattern, "");
|
||||
if (char_min > 0 || char_max > 0)
|
||||
{
|
||||
check_byte('wr_content', 'char_count');
|
||||
var cnt = parseInt(document.getElementById('char_count').innerHTML);
|
||||
if (char_min > 0 && char_min > cnt)
|
||||
{
|
||||
alert("댓글은 "+char_min+"글자 이상 쓰셔야 합니다.");
|
||||
return false;
|
||||
} else if (char_max > 0 && char_max < cnt)
|
||||
{
|
||||
alert("댓글은 "+char_max+"글자 이하로 쓰셔야 합니다.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (!document.getElementById('wr_content').value)
|
||||
{
|
||||
alert("댓글을 입력하여 주십시오.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (typeof(f.wr_name) != 'undefined')
|
||||
{
|
||||
f.wr_name.value = f.wr_name.value.replace(pattern, "");
|
||||
if (f.wr_name.value == '')
|
||||
{
|
||||
alert('이름이 입력되지 않았습니다.');
|
||||
f.wr_name.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof(f.wr_password) != 'undefined')
|
||||
{
|
||||
f.wr_password.value = f.wr_password.value.replace(pattern, "");
|
||||
if (f.wr_password.value == '')
|
||||
{
|
||||
alert('비밀번호가 입력되지 않았습니다.');
|
||||
f.wr_password.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
<?php if($is_guest) echo chk_captcha_js(); ?>
|
||||
|
||||
set_comment_token(f);
|
||||
|
||||
document.getElementById("btn_submit").disabled = "disabled";
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function comment_box(comment_id, work)
|
||||
{
|
||||
var el_id,
|
||||
form_el = 'fviewcomment',
|
||||
respond = document.getElementById(form_el);
|
||||
|
||||
// 댓글 아이디가 넘어오면 답변, 수정
|
||||
if (comment_id)
|
||||
{
|
||||
if (work == 'c')
|
||||
el_id = 'reply_' + comment_id;
|
||||
else
|
||||
el_id = 'edit_' + comment_id;
|
||||
}
|
||||
else
|
||||
el_id = 'bo_vc_w';
|
||||
|
||||
if (save_before != el_id)
|
||||
{
|
||||
if (save_before)
|
||||
{
|
||||
document.getElementById(save_before).style.display = 'none';
|
||||
}
|
||||
|
||||
document.getElementById(el_id).style.display = '';
|
||||
document.getElementById(el_id).appendChild(respond);
|
||||
//입력값 초기화
|
||||
document.getElementById('wr_content').value = '';
|
||||
|
||||
// 댓글 수정
|
||||
if (work == 'cu')
|
||||
{
|
||||
document.getElementById('wr_content').value = document.getElementById('save_comment_' + comment_id).value;
|
||||
if (typeof char_count != 'undefined')
|
||||
check_byte('wr_content', 'char_count');
|
||||
if (document.getElementById('secret_comment_'+comment_id).value)
|
||||
document.getElementById('wr_secret').checked = true;
|
||||
else
|
||||
document.getElementById('wr_secret').checked = false;
|
||||
}
|
||||
|
||||
document.getElementById('comment_id').value = comment_id;
|
||||
document.getElementById('w').value = work;
|
||||
|
||||
if(save_before)
|
||||
$("#captcha_reload").trigger("click");
|
||||
|
||||
save_before = el_id;
|
||||
}
|
||||
}
|
||||
|
||||
function comment_delete()
|
||||
{
|
||||
return confirm("이 댓글을 삭제하시겠습니까?");
|
||||
}
|
||||
|
||||
comment_box('', 'c'); // 댓글 입력폼이 보이도록 처리하기위해서 추가 (root님)
|
||||
|
||||
<?php if($board['bo_use_sns'] && ($config['cf_facebook_appid'] || $config['cf_twitter_key'])) { ?>
|
||||
|
||||
$(function() {
|
||||
// sns 등록
|
||||
$("#bo_vc_send_sns").load(
|
||||
"<?php echo G5_SNS_URL; ?>/view_comment_write.sns.skin.php?bo_table=<?php echo $bo_table; ?>",
|
||||
function() {
|
||||
save_html = document.getElementById('bo_vc_w').innerHTML;
|
||||
}
|
||||
);
|
||||
});
|
||||
<?php } ?>
|
||||
</script>
|
||||
<?php } ?>
|
||||
<!-- } 댓글 쓰기 끝 -->
|
||||
<script>
|
||||
jQuery(function($) {
|
||||
//댓글열기
|
||||
$(".cmt_btn").click(function(e){
|
||||
e.preventDefault();
|
||||
$(this).toggleClass("cmt_btn_op");
|
||||
$("#bo_vc").toggle();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,261 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 💡 [추가] 광고 설정 강제 비활성화 (기존 소스 유지)
|
||||
if (isset($basic_skin_config)) {
|
||||
$basic_skin_config['left_ad'] = false;
|
||||
$basic_skin_config['right_ad'] = false;
|
||||
}
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
<section id="bo_w">
|
||||
<h2 class="sound_only"><?php echo $g5['title'] ?></h2>
|
||||
|
||||
<!-- 게시물 작성/수정 시작 { -->
|
||||
<form name="fwrite" id="fwrite" action="<?php echo $action_url ?>" onsubmit="return fwrite_submit(this);" method="post" enctype="multipart/form-data" autocomplete="off" style="width:<?php echo $width; ?>">
|
||||
<input type="hidden" name="uid" value="<?php echo get_uniqid(); ?>">
|
||||
<input type="hidden" name="w" value="<?php echo $w ?>">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="wr_id" value="<?php echo $wr_id ?>">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<input type="hidden" name="sfl" value="<?php echo $sfl ?>">
|
||||
<input type="hidden" name="stx" value="<?php echo $stx ?>">
|
||||
<input type="hidden" name="spt" value="<?php echo $spt ?>">
|
||||
<input type="hidden" name="sst" value="<?php echo $sst ?>">
|
||||
<input type="hidden" name="sod" value="<?php echo $sod ?>">
|
||||
<input type="hidden" name="page" value="<?php echo $page ?>">
|
||||
<?php
|
||||
$option = '';
|
||||
$option_hidden = '';
|
||||
if ($is_notice || $is_html || $is_secret || $is_mail) {
|
||||
$option = '';
|
||||
if ($is_notice) {
|
||||
$option .= PHP_EOL.'<li class="chk_box"><input type="checkbox" id="notice" name="notice" class="selec_chk" value="1" '.$notice_checked.'>'.PHP_EOL.'<label for="notice"><span></span>공지</label></li>';
|
||||
}
|
||||
if ($is_html) {
|
||||
if ($is_dhtml_editor) {
|
||||
$option_hidden .= '<input type="hidden" value="html1" name="html">';
|
||||
} else {
|
||||
$option .= PHP_EOL.'<li class="chk_box"><input type="checkbox" id="html" name="html" onclick="html_auto_br(this);" class="selec_chk" value="'.$html_value.'" '.$html_checked.'>'.PHP_EOL.'<label for="html"><span></span>html</label></li>';
|
||||
}
|
||||
}
|
||||
if ($is_secret) {
|
||||
if ($is_admin || $is_secret==1) {
|
||||
$option .= PHP_EOL.'<li class="chk_box"><input type="checkbox" id="secret" name="secret" class="selec_chk" value="secret" '.$secret_checked.'>'.PHP_EOL.'<label for="secret"><span></span>비밀글</label></li>';
|
||||
} else {
|
||||
$option_hidden .= '<input type="hidden" name="secret" value="secret">';
|
||||
}
|
||||
}
|
||||
if ($is_mail) {
|
||||
$option .= PHP_EOL.'<li class="chk_box"><input type="checkbox" id="mail" name="mail" class="selec_chk" value="mail" '.$recv_email_checked.'>'.PHP_EOL.'<label for="mail"><span></span>답변메일받기</label></li>';
|
||||
}
|
||||
}
|
||||
echo $option_hidden;
|
||||
?>
|
||||
|
||||
<?php if ($is_category) { ?>
|
||||
<div class="bo_w_select write_div">
|
||||
<label for="ca_name" class="sound_only">분류<strong>필수</strong></label>
|
||||
<select name="ca_name" id="ca_name" required>
|
||||
<option value="">분류를 선택하세요</option>
|
||||
<?php echo $category_option ?>
|
||||
</select>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<div class="bo_w_info write_div">
|
||||
<?php if ($is_name) { ?>
|
||||
<label for="wr_name" class="sound_only">이름<strong>필수</strong></label>
|
||||
<input type="text" name="wr_name" value="<?php echo $name ?>" id="wr_name" required class="frm_input half_input required" placeholder="이름">
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($is_password) { ?>
|
||||
<label for="wr_password" class="sound_only">비밀번호<strong>필수</strong></label>
|
||||
<input type="password" name="wr_password" id="wr_password" <?php echo $password_required ?> class="frm_input half_input <?php echo $password_required ?>" placeholder="비밀번호">
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($is_email) { ?>
|
||||
<label for="wr_email" class="sound_only">이메일</label>
|
||||
<input type="text" name="wr_email" value="<?php echo $email ?>" id="wr_email" class="frm_input half_input email " placeholder="이메일">
|
||||
<?php } ?>
|
||||
|
||||
|
||||
<?php if ($is_homepage) { ?>
|
||||
<label for="wr_homepage" class="sound_only">홈페이지</label>
|
||||
<input type="text" name="wr_homepage" value="<?php echo $homepage ?>" id="wr_homepage" class="frm_input half_input" size="50" placeholder="홈페이지">
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
<?php if ($option) { ?>
|
||||
<div class="write_div">
|
||||
<span class="sound_only">옵션</span>
|
||||
<ul class="bo_v_option">
|
||||
<?php echo $option ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<div class="bo_w_tit write_div">
|
||||
<label for="wr_subject" class="sound_only">제목<strong>필수</strong></label>
|
||||
|
||||
<div id="autosave_wrapper" class="write_div">
|
||||
<input type="text" name="wr_subject" value="<?php echo $subject ?>" id="wr_subject" required class="frm_input full_input required" size="50" maxlength="255" placeholder="제목">
|
||||
<?php if ($is_member) { // 임시 저장된 글 기능 ?>
|
||||
<script src="<?php echo G5_JS_URL; ?>/autosave.js"></script>
|
||||
<?php if($editor_content_js) echo $editor_content_js; ?>
|
||||
<button type="button" id="btn_autosave" class="btn_frmline">임시 저장된 글 (<span id="autosave_count"><?php echo $autosave_count; ?></span>)</button>
|
||||
<div id="autosave_pop">
|
||||
<strong>임시 저장된 글 목록</strong>
|
||||
<ul></ul>
|
||||
<div><button type="button" class="autosave_close">닫기</button></div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="write_div">
|
||||
<label for="wr_content" class="sound_only">내용<strong>필수</strong></label>
|
||||
<div class="wr_content <?php echo $is_dhtml_editor ? $config['cf_editor'] : ''; ?>">
|
||||
<?php if($write_min || $write_max) { ?>
|
||||
<!-- 최소/최대 글자 수 사용 시 -->
|
||||
<p id="char_count_desc">이 게시판은 최소 <strong><?php echo $write_min; ?></strong>글자 이상, 최대 <strong><?php echo $write_max; ?></strong>글자 이하까지 글을 쓰실 수 있습니다.</p>
|
||||
<?php } ?>
|
||||
<?php echo $editor_html; // 에디터 사용시는 에디터로, 아니면 textarea 로 노출 ?>
|
||||
<?php if($write_min || $write_max) { ?>
|
||||
<!-- 최소/최대 글자 수 사용 시 -->
|
||||
<div id="char_count_wrap"><span id="char_count"></span>글자</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<?php for ($i=1; $is_link && $i<=G5_LINK_COUNT; $i++) { ?>
|
||||
<div class="bo_w_link write_div">
|
||||
<label for="wr_link<?php echo $i ?>"><i class="fa fa-link" aria-hidden="true"></i><span class="sound_only"> 링크 #<?php echo $i ?></span></label>
|
||||
<input type="text" name="wr_link<?php echo $i ?>" value="<?php if($w=="u"){ echo $write['wr_link'.$i]; } ?>" id="wr_link<?php echo $i ?>" class="frm_input full_input" size="50">
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<?php for ($i=0; $is_file && $i<$file_count; $i++) { ?>
|
||||
<div class="bo_w_flie write_div">
|
||||
<div class="file_wr write_div">
|
||||
<label for="bf_file_<?php echo $i+1 ?>" class="lb_icon"><i class="fa fa-folder-open" aria-hidden="true"></i><span class="sound_only"> 파일 #<?php echo $i+1 ?></span></label>
|
||||
<input type="file" name="bf_file[]" id="bf_file_<?php echo $i+1 ?>" title="파일첨부 <?php echo $i+1 ?> : 용량 <?php echo $upload_max_filesize ?> 이하만 업로드 가능" class="frm_file ">
|
||||
</div>
|
||||
<?php if ($is_file_content) { ?>
|
||||
<input type="text" name="bf_content[]" value="<?php echo ($w == 'u') ? $file[$i]['bf_content'] : ''; ?>" title="파일 설명을 입력해주세요." class="full_input frm_input" size="50" placeholder="파일 설명을 입력해주세요.">
|
||||
<?php } ?>
|
||||
|
||||
<?php if($w == 'u' && $file[$i]['file']) { ?>
|
||||
<span class="file_del">
|
||||
<input type="checkbox" id="bf_file_del<?php echo $i ?>" name="bf_file_del[<?php echo $i; ?>]" value="1"> <label for="bf_file_del<?php echo $i ?>"><?php echo $file[$i]['source'].'('.$file[$i]['size'].')'; ?> 파일 삭제</label>
|
||||
</span>
|
||||
<?php } ?>
|
||||
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
|
||||
<?php if ($is_use_captcha) { //자동등록방지 ?>
|
||||
<div class="write_div">
|
||||
<?php echo $captcha_html ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<div class="btn_confirm write_div">
|
||||
<a href="<?php echo get_pretty_url($bo_table); ?>" class="btn_cancel btn">취소</a>
|
||||
<button type="submit" id="btn_submit" accesskey="s" class="btn_submit btn">작성완료</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
<?php if($write_min || $write_max) { ?>
|
||||
// 글자수 제한
|
||||
var char_min = parseInt(<?php echo $write_min; ?>); // 최소
|
||||
var char_max = parseInt(<?php echo $write_max; ?>); // 최대
|
||||
check_byte("wr_content", "char_count");
|
||||
|
||||
$(function() {
|
||||
$("#wr_content").on("keyup", function() {
|
||||
check_byte("wr_content", "char_count");
|
||||
});
|
||||
});
|
||||
|
||||
<?php } ?>
|
||||
function html_auto_br(obj)
|
||||
{
|
||||
if (obj.checked) {
|
||||
result = confirm("자동 줄바꿈을 하시겠습니까?\n\n자동 줄바꿈은 게시물 내용중 줄바뀐 곳을<br>태그로 변환하는 기능입니다.");
|
||||
if (result)
|
||||
obj.value = "html2";
|
||||
else
|
||||
obj.value = "html1";
|
||||
}
|
||||
else
|
||||
obj.value = "";
|
||||
}
|
||||
|
||||
function fwrite_submit(f)
|
||||
{
|
||||
<?php echo $editor_js; // 에디터 사용시 자바스크립트에서 내용을 폼필드로 넣어주며 내용이 입력되었는지 검사함 ?>
|
||||
|
||||
var subject = "";
|
||||
var content = "";
|
||||
$.ajax({
|
||||
url: g5_bbs_url+"/ajax.filter.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
"subject": f.wr_subject.value,
|
||||
"content": f.wr_content.value
|
||||
},
|
||||
dataType: "json",
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function(data, textStatus) {
|
||||
subject = data.subject;
|
||||
content = data.content;
|
||||
}
|
||||
});
|
||||
|
||||
if (subject) {
|
||||
alert("제목에 금지단어('"+subject+"')가 포함되어있습니다");
|
||||
f.wr_subject.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (content) {
|
||||
alert("내용에 금지단어('"+content+"')가 포함되어있습니다");
|
||||
if (typeof(ed_wr_content) != "undefined")
|
||||
ed_wr_content.returnFalse();
|
||||
else
|
||||
f.wr_content.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (document.getElementById("char_count")) {
|
||||
if (char_min > 0 || char_max > 0) {
|
||||
var cnt = parseInt(check_byte("wr_content", "char_count"));
|
||||
if (char_min > 0 && char_min > cnt) {
|
||||
alert("내용은 "+char_min+"글자 이상 쓰셔야 합니다.");
|
||||
return false;
|
||||
}
|
||||
else if (char_max > 0 && char_max < cnt) {
|
||||
alert("내용은 "+char_max+"글자 이하로 쓰셔야 합니다.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<?php echo $captcha_js; // 캡챠 사용시 자바스크립트에서 입력된 캡챠를 검사함 ?>
|
||||
|
||||
document.getElementById("btn_submit").disabled = "disabled";
|
||||
|
||||
return true;
|
||||
}
|
||||
</script>
|
||||
</section>
|
||||
<!-- } 게시물 작성/수정 끝 -->
|
||||
@@ -0,0 +1,20 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
// 게시판 스킨 전체 광고 영역 설정
|
||||
// 각 스킨 파일(list.skin.php, view.skin.php, write.skin.php)에서 이 설정을 참조합니다.
|
||||
$board_ad_config = [
|
||||
'list_ad' => [
|
||||
'left' => false, // 목록 페이지 좌측 광고 사용 여부
|
||||
'right' => false, // 목록 페이지 우측 광고 사용 여부
|
||||
],
|
||||
'view_ad' => [
|
||||
'left' => false, // 보기 페이지 좌측 광고 사용 여부
|
||||
'right' => true, // 보기 페이지 우측 광고 사용 여부
|
||||
],
|
||||
'write_ad' => [
|
||||
'left' => false, // 글쓰기/수정 페이지 좌측 광고 사용 여부
|
||||
'right' => false, // 글쓰기/수정 페이지 우측 광고 사용 여부
|
||||
],
|
||||
];
|
||||
?>
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
include_once('../../../../../common.php');
|
||||
|
||||
// 관리자가 아니면 실행 중단
|
||||
if (!$is_admin) {
|
||||
die(json_encode(['error' => '관리자만 접근 가능합니다.']));
|
||||
}
|
||||
|
||||
header('Content-Type: application/json');
|
||||
|
||||
$bo_table = isset($_POST['bo_table']) ? trim($_POST['bo_table']) : '';
|
||||
$wr_id = isset($_POST['wr_id']) ? intval($_POST['wr_id']) : 0;
|
||||
$status = isset($_POST['status']) ? trim($_POST['status']) : '';
|
||||
|
||||
if (!$bo_table || !$wr_id || !in_array($status, ['show', 'hide'])) {
|
||||
die(json_encode(['error' => '필수 정보가 누락되었습니다.']));
|
||||
}
|
||||
|
||||
// '숨김' 상태일 때는 wr_10 필드에 1을, '보임' 상태일 때는 0을 저장합니다.
|
||||
$new_value = ($status == 'hide') ? '1' : '0';
|
||||
|
||||
$write_table = $g5['write_prefix'] . $bo_table;
|
||||
|
||||
$sql = " UPDATE {$write_table} SET wr_10 = '{$new_value}' WHERE wr_id = '{$wr_id}' ";
|
||||
$result = sql_query($sql);
|
||||
|
||||
if ($result) {
|
||||
// 성공 시 새로운 상태를 반환
|
||||
echo json_encode(['success' => true, 'new_status' => ($new_value == '1' ? 'hidden' : 'visible')]);
|
||||
} else {
|
||||
echo json_encode(['error' => '데이터베이스 업데이트에 실패했습니다.']);
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
// construction 스킨 광고 영역 설정
|
||||
$construction_skin_config = [
|
||||
'left_ad' => false, // 좌측 광고 사용 안함
|
||||
'right_ad' => false, // 우측 광고 사용 안함
|
||||
];
|
||||
?>
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 339 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 318 B |
@@ -0,0 +1,105 @@
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const listBody = document.getElementById('bo_list_body');
|
||||
const toggleBtn = document.getElementById('view-toggle-btn');
|
||||
|
||||
if (!listBody || !toggleBtn) {
|
||||
return; // 필수 요소가 없으면 스크립트 중단
|
||||
}
|
||||
|
||||
const toggleIcon = toggleBtn.querySelector('i');
|
||||
const savedViewMode = localStorage.getItem('board_view_mode') || 'list'; // 기본값은 'list'
|
||||
|
||||
// 뷰 모드를 설정하고 버튼의 아이콘과 툴팁을 업데이트하는 함수
|
||||
function setViewMode(mode) {
|
||||
if (mode === 'card') {
|
||||
listBody.classList.remove('list-view');
|
||||
listBody.classList.add('card-view');
|
||||
// 현재 카드뷰 -> 다음 행동은 '목록형 보기'
|
||||
toggleIcon.className = 'fa fa-bars';
|
||||
toggleBtn.title = '목록형으로 보기';
|
||||
} else { // 'list'
|
||||
listBody.classList.remove('card-view');
|
||||
listBody.classList.add('list-view');
|
||||
// 현재 목록뷰 -> 다음 행동은 '카드형 보기'
|
||||
toggleIcon.className = 'fa fa-th-large';
|
||||
toggleBtn.title = '카드형으로 보기';
|
||||
}
|
||||
// 사용자의 선택을 로컬 스토리지에 저장
|
||||
localStorage.setItem('board_view_mode', mode);
|
||||
}
|
||||
|
||||
|
||||
// 토글 버튼 클릭 이벤트
|
||||
toggleBtn.addEventListener('click', function() {
|
||||
// 현재 뷰 모드를 확인하고 반대 모드로 전환
|
||||
const currentMode = listBody.classList.contains('card-view') ? 'list' : 'card';
|
||||
setViewMode(currentMode);
|
||||
});
|
||||
|
||||
// 페이지 로드 시 저장된 뷰 모드를 적용
|
||||
setViewMode(savedViewMode);
|
||||
|
||||
// 카드형 뷰에서 체크박스 클릭 시, 목록형 뷰의 동일한 체크박스도 동기화
|
||||
const cardCheckboxes = document.querySelectorAll('input[name="chk_wr_id_card[]"]');
|
||||
cardCheckboxes.forEach((cardChk, index) => {
|
||||
cardChk.addEventListener('change', function() {
|
||||
const listChk = document.getElementById('chk_wr_id_' + index);
|
||||
if (listChk) {
|
||||
listChk.checked = this.checked;
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// ▼▼▼ [추가] 노출 상태 토글 기능 ▼▼▼
|
||||
$('#bo_list_body').on('click', '.btn-status-toggle', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
const button = $(this);
|
||||
const wr_id = button.data('wr-id');
|
||||
const is_on = button.hasClass('status-on');
|
||||
const new_status = is_on ? 'hide' : 'show';
|
||||
const bo_table = $('input[name="bo_table"]').val();
|
||||
|
||||
// 아이콘을 로딩 상태로 변경
|
||||
button.find('i').removeClass('fa-toggle-on fa-toggle-off').addClass('fa-spinner fa-spin');
|
||||
|
||||
$.ajax({
|
||||
url: board_skin_url + '/ajax.status_update.php',
|
||||
type: 'POST',
|
||||
data: {
|
||||
bo_table: bo_table,
|
||||
wr_id: wr_id,
|
||||
status: new_status
|
||||
},
|
||||
dataType: 'json',
|
||||
success: function(data) {
|
||||
if (data.success) {
|
||||
// 버튼 상태 업데이트
|
||||
button.removeClass('status-on status-off');
|
||||
button.find('i').removeClass('fa-spinner fa-spin');
|
||||
|
||||
if (data.new_status === 'hidden') {
|
||||
button.addClass('status-off').attr('title', '노출 상태로 변경');
|
||||
button.find('i').addClass('fa-toggle-off');
|
||||
} else {
|
||||
button.addClass('status-on').attr('title', '숨김 상태로 변경');
|
||||
button.find('i').addClass('fa-toggle-on');
|
||||
}
|
||||
// 페이지를 새로고침하여 상태 배지 텍스트 등을 완전히 업데이트합니다.
|
||||
location.reload();
|
||||
} else {
|
||||
alert(data.error || '상태 변경에 실패했습니다.');
|
||||
// 실패 시 아이콘 원상복구
|
||||
button.find('i').removeClass('fa-spinner fa-spin').addClass(is_on ? 'fa-toggle-on' : 'fa-toggle-off');
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
alert('서버와 통신 중 오류가 발생했습니다.');
|
||||
// 실패 시 아이콘 원상복구
|
||||
button.find('i').removeClass('fa-spinner fa-spin').addClass(is_on ? 'fa-toggle-on' : 'fa-toggle-off');
|
||||
}
|
||||
});
|
||||
});
|
||||
// ▲▲▲ 여기까지 ▲▲▲
|
||||
|
||||
});
|
||||
@@ -0,0 +1,56 @@
|
||||
// jQuery가 로드된 후 이 스크립트가 실행되어야 합니다.
|
||||
$(function() {
|
||||
// Datepicker 초기화
|
||||
$(".datepicker").datepicker({
|
||||
dateFormat: "yy-mm-dd",
|
||||
changeMonth: true,
|
||||
changeYear: true,
|
||||
dayNamesMin: ["일", "월", "화", "수", "목", "금", "토"],
|
||||
monthNamesShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
|
||||
});
|
||||
|
||||
// ▼▼▼ [핵심 수정] 여러 파일 미리보기 기능 ▼▼▼
|
||||
const fileWrappers = document.querySelectorAll('.file_preview_wrapper');
|
||||
|
||||
fileWrappers.forEach((wrapper, index) => {
|
||||
const previewBox = wrapper.querySelector('.file_preview');
|
||||
const fileInput = wrapper.querySelector('input[type="file"]');
|
||||
const previewText = previewBox.querySelector('.preview_text');
|
||||
const existingFileInfo = wrapper.querySelector('.preview_info');
|
||||
|
||||
if (!previewBox || !fileInput) return;
|
||||
|
||||
// 1. 미리보기 박스를 클릭하면 숨겨진 파일 입력 필드가 클릭되도록 함
|
||||
// previewBox.addEventListener('click', () => {
|
||||
// fileInput.click();
|
||||
// });
|
||||
|
||||
// 2. 파일이 선택되었을 때의 동작
|
||||
fileInput.addEventListener('change', (event) => {
|
||||
const file = event.target.files[0];
|
||||
if (file) {
|
||||
// 기존 파일 정보가 있다면 숨김 (새 파일로 교체되므로)
|
||||
if (existingFileInfo) {
|
||||
existingFileInfo.style.display = 'none';
|
||||
}
|
||||
|
||||
if (file.type.startsWith('video/')) {
|
||||
// 동영상은 미리보기를 생성하지 않고 파일 이름만 표시
|
||||
previewBox.style.backgroundImage = 'none';
|
||||
previewText.textContent = `동영상: ${file.name}`;
|
||||
previewText.style.display = 'block';
|
||||
} else if (file.type.startsWith('image/')) {
|
||||
// 이미지는 FileReader를 사용해 미리보기 생성
|
||||
const reader = new FileReader();
|
||||
reader.onload = function(e) {
|
||||
console.log("sdfasdfasfd= > ",`url(${e.target.result})`)
|
||||
previewBox.style.backgroundImage = `url(${e.target.result})`;
|
||||
previewText.style.display = 'none'; // '클릭하여 파일 업로드' 텍스트 숨김
|
||||
}
|
||||
reader.readAsDataURL(file);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
// ▲▲▲ 여기까지 ▲▲▲
|
||||
});
|
||||
@@ -0,0 +1,71 @@
|
||||
// jQuery가 로드된 후 이 스크립트가 실행되어야 합니다.
|
||||
$(function() {
|
||||
// Datepicker 초기화
|
||||
$(".datepicker").datepicker({
|
||||
dateFormat: "yy-mm-dd",
|
||||
changeMonth: true,
|
||||
changeYear: true,
|
||||
dayNamesMin: ["일", "월", "화", "수", "목", "금", "토"],
|
||||
monthNamesShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
|
||||
});
|
||||
|
||||
// 노출 방식 라디오 버튼 제어
|
||||
const exposureRadios = $('input[name="wr_1"]');
|
||||
const reservationFields = $('#reservation_fields');
|
||||
|
||||
function toggleReservationFields() {
|
||||
if ($('input[name="wr_1"]:checked').val() === 'RESERVED') {
|
||||
reservationFields.slideDown();
|
||||
} else {
|
||||
reservationFields.slideUp();
|
||||
}
|
||||
}
|
||||
exposureRadios.on('change', toggleReservationFields);
|
||||
toggleReservationFields();
|
||||
|
||||
|
||||
// ▼▼▼ [핵심 수정] 여러 파일 미리보기 기능 ▼▼▼
|
||||
const fileWrappers = document.querySelectorAll('.file_preview_wrapper');
|
||||
|
||||
fileWrappers.forEach((wrapper, index) => {
|
||||
const previewBox = wrapper.querySelector('.file_preview');
|
||||
const fileInput = wrapper.querySelector('input[type="file"]');
|
||||
const previewText = previewBox.querySelector('.preview_text');
|
||||
const existingFileInfo = wrapper.querySelector('.preview_info');
|
||||
|
||||
if (!previewBox || !fileInput) return;
|
||||
|
||||
// 1. 미리보기 박스를 클릭하면 숨겨진 파일 입력 필드가 클릭되도록 함
|
||||
previewBox.addEventListener('click', () => {
|
||||
fileInput.click();
|
||||
});
|
||||
|
||||
// 2. 파일이 선택되었을 때의 동작
|
||||
fileInput.addEventListener('change', (event) => {
|
||||
const file = event.target.files[0];
|
||||
if (file) {
|
||||
// 기존 파일 정보가 있다면 숨김 (새 파일로 교체되므로)
|
||||
if (existingFileInfo) {
|
||||
existingFileInfo.style.display = 'none';
|
||||
}
|
||||
|
||||
if (file.type.startsWith('video/')) {
|
||||
// 동영상은 미리보기를 생성하지 않고 파일 이름만 표시
|
||||
previewBox.style.backgroundImage = 'none';
|
||||
previewText.textContent = `동영상: ${file.name}`;
|
||||
previewText.style.display = 'block';
|
||||
} else if (file.type.startsWith('image/')) {
|
||||
// 이미지는 FileReader를 사용해 미리보기 생성
|
||||
const reader = new FileReader();
|
||||
reader.onload = function(e) {
|
||||
console.log("sdfasdfasfd= > ",`url(${e.target.result})`)
|
||||
previewBox.style.backgroundImage = `url(${e.target.result})`;
|
||||
previewText.style.display = 'none'; // '클릭하여 파일 업로드' 텍스트 숨김
|
||||
}
|
||||
reader.readAsDataURL(file);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
// ▲▲▲ 여기까지 ▲▲▲
|
||||
});
|
||||
@@ -0,0 +1,338 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 0. 중앙 광고 설정 파일을 로드합니다.
|
||||
include_once(G5_THEME_PATH . '/skin/board/board_ad_config.php');
|
||||
|
||||
// 1. 자식 스킨의 설정 파일을 로드합니다.
|
||||
$config_path = __DIR__ . '/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
}
|
||||
|
||||
// 이 스킨의 전용 스타일시트와 자바스크립트를 불러옵니다.
|
||||
add_stylesheet('<link rel="stylesheet" href="' . $board_skin_url . '/style.css?ver=' . time() . '">', 0);
|
||||
add_javascript('<script src="' . $board_skin_url . '/js/list.js?ver=' . time() . '"></script>', 0);
|
||||
|
||||
// 수정 링크 생성 함수
|
||||
function write_url($wr_id)
|
||||
{
|
||||
global $bo_table, $qstr;
|
||||
return G5_BBS_URL . "/write.php?w=u&bo_table={$bo_table}&wr_id={$wr_id}&{$qstr}";
|
||||
}
|
||||
|
||||
// 삭제 링크 생성 함수
|
||||
function delete_url($href)
|
||||
{
|
||||
return $href . "&sw=delete";
|
||||
}
|
||||
|
||||
?>
|
||||
<!-- ▼▼▼ [핵심 수정] JS에서 사용할 PHP 변수를 전역 JS 변수로 선언합니다. ▼▼▼ -->
|
||||
<script>
|
||||
const board_skin_url = "<?php echo $board_skin_url; ?>";
|
||||
</script>
|
||||
<!-- ▲▲▲ 여기까지 ▲▲▲ -->
|
||||
|
||||
<!-- 게시판 목록 시작 -->
|
||||
<main class="main-content-wrapper">
|
||||
<div class="three-column-layout container">
|
||||
|
||||
<?php if (isset($board_ad_config['list_ad']['left']) && $board_ad_config['list_ad']['left'] === true): ?>
|
||||
<aside class="layout-sidebar-left reveal-up">
|
||||
<div class="sidebar-inner">
|
||||
<!-- <h3 class="sidebar-title">광고 영역</h3>-->
|
||||
<!-- 💡 [수정] 좌측 모듈 영역에 고유 ID 부여 -->
|
||||
<div class="flex_box flex_box_l" data-layout="main-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
<main class="layout-main-content">
|
||||
<div id="bo_list" class="bo-list-container">
|
||||
|
||||
<!-- 게시판 상단 정보 및 버튼 영역 -->
|
||||
<div class="bo-list-header">
|
||||
<div class="bo-list-total">
|
||||
<span>Total <?php echo number_format($total_count) ?>건</span>
|
||||
<span class="sound_only"><?php echo $page ?> 페이지</span>
|
||||
</div>
|
||||
|
||||
<div class="bo-list-buttons">
|
||||
<button type="button" id="view-toggle-btn" class="btn-view-toggle" title="카드형으로 보기">
|
||||
<i class="fa fa-th-large" aria-hidden="true"></i>
|
||||
</button>
|
||||
<?php if ($admin_href) { ?><a href="<?php echo $admin_href ?>" class="btn-admin">
|
||||
관리자</a><?php } ?>
|
||||
<?php if ($write_href) { ?><a href="<?php echo $write_href ?>" class="btn-write">
|
||||
글쓰기</a><?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form name="fboardlist" id="fboardlist" action="<?php echo G5_BBS_URL; ?>/board_list_update.php"
|
||||
onsubmit="return fboardlist_submit(this);" method="post">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="sfl" value="<?php echo $sfl ?>">
|
||||
<input type="hidden" name="stx" value="<?php echo $stx ?>">
|
||||
<input type="hidden" name="spt" value="<?php echo $spt ?>">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<input type="hidden" name="sst" value="<?php echo $sst ?>">
|
||||
<input type="hidden" name="sod" value="<?php echo $sod ?>">
|
||||
<input type="hidden" name="page" value="<?php echo $page ?>">
|
||||
<input type="hidden" name="sw" value="">
|
||||
|
||||
<!-- 게시물 리스트 (보기 전환 컨테이너) -->
|
||||
<div id="bo_list_body" class="list-view">
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<div class="list-chk-all">
|
||||
<input type="checkbox" id="chkall"
|
||||
onclick="if (this.checked) all_checked(true); else all_checked(false);"
|
||||
class="selec_chk">
|
||||
<label for="chkall"> 현재 페이지 게시물 전체선택</label>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<?php
|
||||
for ($i = 0; $i < count($list); $i++) {
|
||||
|
||||
// --- 💡 [핵심 수정] 게시물 상세 정보 및 상태 정보 가져오기 ---
|
||||
$write_table = $g5['write_prefix'] . $bo_table;
|
||||
$post_data = get_write($write_table, $list[$i]['wr_id']);
|
||||
|
||||
// 1. 썸네일 이미지 가져오기
|
||||
$thumbnail = get_list_thumbnail($board['bo_table'], $list[$i]['wr_id'], 280, 180);
|
||||
|
||||
// 2. 이미지가 없을 경우, 본문 내용의 일부를 가져오기
|
||||
$content_preview = '';
|
||||
if (!$thumbnail['src'] && isset($post_data['wr_content'])) {
|
||||
$content_preview = cut_str(strip_tags($post_data['wr_content']), 150);
|
||||
}
|
||||
|
||||
// 3. 노출 상태 정보 처리
|
||||
$status_text = '정보 없음';
|
||||
$status_class = 'expired';
|
||||
$reservation_period = '';
|
||||
$is_hidden = !empty($post_data['wr_10']); // wr_10 필드가 1이면 '숨김' 상태
|
||||
$today = G5_TIME_YMD;
|
||||
|
||||
if ($is_hidden) {
|
||||
$status_text = '숨김';
|
||||
$status_class = 'hidden';
|
||||
} else if (isset($post_data['wr_1'])) {
|
||||
if ($post_data['wr_1'] == 'RESERVED') {
|
||||
$start_date = $post_data['wr_2'];
|
||||
$end_date = $post_data['wr_3'];
|
||||
$reservation_period = $start_date . ' ~ ' . $end_date;
|
||||
|
||||
if ($today >= $start_date && $today <= $end_date) {
|
||||
$status_text = '노출중';
|
||||
$status_class = 'active';
|
||||
} elseif ($today < $start_date) {
|
||||
$status_text = '예약됨';
|
||||
$status_class = 'scheduled';
|
||||
} else {
|
||||
$status_text = '기간만료';
|
||||
$status_class = 'expired';
|
||||
}
|
||||
} else { // IMMEDIATE
|
||||
$status_text = '즉시 노출';
|
||||
$status_class = 'active';
|
||||
}
|
||||
}
|
||||
// --- 데이터 준비 끝 ---
|
||||
?>
|
||||
<!-- 1. 목록형 아이템 (bo-list-item) -->
|
||||
<div class="bo-list-item">
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<div class="item-chk">
|
||||
<input type="checkbox" name="chk_wr_id[]"
|
||||
value="<?php echo $list[$i]['wr_id'] ?>"
|
||||
id="chk_wr_id_<?php echo $i ?>" class="selec_chk">
|
||||
</div>
|
||||
<?php } ?>
|
||||
<div class="item-main">
|
||||
<div class="item-subject">
|
||||
<a href="<?php echo $list[$i]['href'] ?>" class="item-title">
|
||||
<?php echo $list[$i]['subject'] ?>
|
||||
</a>
|
||||
<?php if ($list[$i]['comment_cnt']) { ?><span
|
||||
class="item-comment-count"><?php echo $list[$i]['wr_comment']; ?></span><?php } ?>
|
||||
</div>
|
||||
<div class="item-meta">
|
||||
<span class="item-author"><?php echo $list[$i]['name'] ?></span>
|
||||
<span class="item-date"><?php echo $list[$i]['datetime2'] ?></span>
|
||||
<span class="item-views">조회 <?php echo $list[$i]['wr_hit'] ?></span>
|
||||
<span class="item-status-wrapper">
|
||||
<span class="status-badge status-<?php echo $status_class; ?>"><?php echo $status_text; ?></span>
|
||||
<?php if ($reservation_period) { ?>
|
||||
<span class="reservation-info">(<?php echo $reservation_period; ?>)</span>
|
||||
<?php } ?>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<?php if ($is_admin) { ?>
|
||||
<div class="item-actions">
|
||||
<div class="actions-group">
|
||||
<strong class="item-actions-label">노출 여부</strong>
|
||||
<button type="button"
|
||||
class="btn-status-toggle <?php echo $is_hidden ? 'status-off' : 'status-on'; ?>"
|
||||
data-wr-id="<?php echo $list[$i]['wr_id']; ?>"
|
||||
title="<?php echo $is_hidden ? '노출 상태로 변경' : '숨김 상태로 변경'; ?>">
|
||||
<i class="fa <?php echo $is_hidden ? 'fa-toggle-off' : 'fa-toggle-on'; ?>"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="action-group">
|
||||
<a href="<?php echo write_url($list[$i]['wr_id']); ?>"
|
||||
class="btn-action btn-modify">수정</a>
|
||||
<a href="<?php echo delete_url($list[$i]['href']); ?>"
|
||||
class="btn-action btn-delete" onclick="return delete_confirm(this);">삭제</a>
|
||||
</div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
<!-- 2. 카드형 아이템 (bo-card-item) -->
|
||||
<div class="bo-card-item">
|
||||
<a href="<?php echo $list[$i]['href'] ?>" class="card-link">
|
||||
<div class="card-thumbnail">
|
||||
<?php if ($thumbnail['src']) { ?>
|
||||
<img src="<?php echo $thumbnail['src']; ?>"
|
||||
alt="<?php echo $thumbnail['alt']; ?>">
|
||||
<?php } else { ?>
|
||||
<div class="card-content-preview">
|
||||
<p><?php echo $content_preview ? $content_preview : '내용이 없습니다.'; ?></p>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<div class="card-info">
|
||||
<div class="card-subject">
|
||||
<?php echo $list[$i]['subject'] ?>
|
||||
<?php if ($list[$i]['comment_cnt']) { ?><span
|
||||
class="item-comment-count"><?php echo $list[$i]['wr_comment']; ?></span><?php } ?>
|
||||
</div>
|
||||
<div class="card-status-wrapper">
|
||||
<span class="status-badge status-<?php echo $status_class; ?>"><?php echo $status_text; ?></span>
|
||||
<?php if ($reservation_period) { ?>
|
||||
<span class="reservation-info"><?php echo $reservation_period; ?></span>
|
||||
<?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<!-- ▼▼▼ [핵심 추가] 카드형 보기용 토글 스위치 ▼▼▼ -->
|
||||
<?php if ($is_admin) { ?>
|
||||
<div class="card-actions">
|
||||
<div class="action-group">
|
||||
<strong class="item-actions-label">노출 여부</strong>
|
||||
<button type="button"
|
||||
class="btn-status-toggle <?php echo $is_hidden ? 'status-off' : 'status-on'; ?>"
|
||||
data-wr-id="<?php echo $list[$i]['wr_id']; ?>"
|
||||
title="<?php echo $is_hidden ? '노출 상태로 변경' : '숨김 상태로 변경'; ?>">
|
||||
<i class="fa <?php echo $is_hidden ? 'fa-toggle-off' : 'fa-toggle-on'; ?>"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="action-group">
|
||||
<a href="<?php echo write_url($list[$i]['wr_id']); ?>"
|
||||
class="btn-action btn-modify">수정</a>
|
||||
<a href="<?php echo delete_url($list[$i]['href']); ?>"
|
||||
class="btn-action btn-delete" onclick="return delete_confirm(this);">삭제</a>
|
||||
</div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<!-- ▲▲▲ 여기까지 ▲▲▲ -->
|
||||
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<div class="card-chk">
|
||||
<input type="checkbox" name="chk_wr_id_card[]"
|
||||
value="<?php echo $list[$i]['wr_id'] ?>"
|
||||
id="chk_wr_id_card_<?php echo $i ?>" class="selec_chk">
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
<?php } ?>
|
||||
|
||||
<?php if (count($list) == 0) {
|
||||
echo '<div class="empty-list">게시물이 없습니다.</div>';
|
||||
} ?>
|
||||
</div>
|
||||
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<div class="bo-list-footer">
|
||||
<button type="submit" name="btn_submit" value="선택삭제"
|
||||
onclick="document.pressed=this.value"
|
||||
class="btn-admin">선택삭제
|
||||
</button>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</form>
|
||||
|
||||
<div class="bo-list-bottom-wrapper">
|
||||
<div class="bo-pagination"><?php echo $write_pages; ?></div>
|
||||
<fieldset id="bo_sch" class="bo-search-box">
|
||||
<legend class="sound_only">게시물 검색</legend>
|
||||
<form name="fsearch" method="get">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<input type="hidden" name="sop" value="and">
|
||||
<select name="sfl" id="sfl"><?php echo get_board_sfl_select_options($sfl); ?></select>
|
||||
<input type="text" name="stx" value="<?php echo stripslashes($stx) ?>" required id="stx"
|
||||
class="sch-input" size="25" maxlength="20" placeholder="검색어를 입력해주세요">
|
||||
<button type="submit" class="sch-btn">검색</button>
|
||||
</form>
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<!-- 3. 우측 사이드바 -->
|
||||
<?php if (isset($board_ad_config['list_ad']['right']) && $board_ad_config['list_ad']['right'] === true): ?>
|
||||
<aside class="layout-sidebar-right reveal-up">
|
||||
<div class="sidebar-inner">
|
||||
<!-- <h3 class="sidebar-title">광고 영역</h3>-->
|
||||
<!-- 💡 [수정] 우측 모듈 영역에 고유 ID 부여 -->
|
||||
<div class="flex_box flex_box_r" data-layout="main-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</main>
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<script>
|
||||
function all_checked(sw) {
|
||||
var f = document.fboardlist;
|
||||
for (var i = 0; i < f.length; i++) {
|
||||
if (f.elements[i].name == "chk_wr_id[]" || f.elements[i].name == "chk_wr_id_card[]")
|
||||
f.elements[i].checked = sw;
|
||||
}
|
||||
}
|
||||
|
||||
function fboardlist_submit(f) {
|
||||
var chk_count = 0;
|
||||
for (var i = 0; i < f.length; i++) {
|
||||
if ((f.elements[i].name == "chk_wr_id[]" || f.elements[i].name == "chk_wr_id_card[]") && f.elements[i].checked)
|
||||
chk_count++;
|
||||
}
|
||||
|
||||
if (!chk_count) {
|
||||
alert(document.pressed + "할 게시물을 하나 이상 선택하세요.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (document.pressed == "선택삭제") {
|
||||
if (!confirm("선택한 게시물을 정말 삭제하시겠습니까?\n\n한번 삭제한 자료는 복구할 수 없습니다."))
|
||||
return false;
|
||||
f.removeAttribute("target");
|
||||
f.action = "<?php echo G5_BBS_URL; ?>/board_list_update.php";
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function delete_confirm(link) {
|
||||
if (confirm("한번 삭제한 자료는 복구할 수 없습니다.\n\n정말 삭제하시겠습니까?")) {
|
||||
window.location.href = link.href;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
</script>
|
||||
<?php } ?>
|
||||
@@ -0,0 +1,168 @@
|
||||
<?php
|
||||
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
include_once(G5_LIB_PATH.'/thumbnail.lib.php');
|
||||
|
||||
// 이 페이지에서도 스킨의 CSS 파일을 불러옵니다.
|
||||
add_stylesheet('<link rel="stylesheet" href="' . $board_skin_url . '/style.css?ver=' . time() . '">', 0);
|
||||
?>
|
||||
|
||||
<section id="bo_v">
|
||||
<h2 id="bo_v_title">
|
||||
<?php if ($category_name) { ?><span class="item-category"><?php echo $view['ca_name']; ?></span><?php } ?>
|
||||
<?php echo cut_str(get_text($view['wr_subject']), 70); // 글제목 출력 ?>
|
||||
</h2>
|
||||
|
||||
<div id="bo_v_info">
|
||||
<!-- 예약 노출 여부 표시 -->
|
||||
<label class="frm_label"><?php echo $board['bo_1_subj'] ?></label>
|
||||
<div class="option_group">
|
||||
<label>
|
||||
<input type="radio" name="wr_1_view" value="IMMEDIATE"
|
||||
<?php echo ($view['wr_1'] !== 'RESERVED') ? 'checked' : ''; ?>
|
||||
disabled> 즉시 노출
|
||||
</label>
|
||||
<label>
|
||||
<input type="radio" name="wr_1_view" value="RESERVED"
|
||||
<?php echo ($view['wr_1'] === 'RESERVED') ? 'checked' : ''; ?>
|
||||
disabled> 예약 노출
|
||||
</label>
|
||||
</div>
|
||||
<?php if ($view['wr_1'] === 'RESERVED') { ?>
|
||||
<div id="reservation_fields" class="write_div">
|
||||
<div class="date_picker_group">
|
||||
<div class="date_item">
|
||||
<label class="frm_label"><?php echo $board['bo_2_subj'] ?></label>
|
||||
<div class="frm_static"><?php echo $view['wr_2']; ?></div>
|
||||
</div>
|
||||
<span class="date_divider">~</span>
|
||||
<div class="date_item">
|
||||
<label class="frm_label"><?php echo $board['bo_3_subj'] ?></label>
|
||||
<div class="frm_static"><?php echo $view['wr_3']; ?></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<div id="bo_v_atc">
|
||||
<!-- --><?php
|
||||
// // 📌 [핵심] 첫번째 첨부파일을 메인 비주얼로 상단에 크게 표시합니다.
|
||||
// if (isset($view['file'][0]['file']) && $view['file'][0]['file']) {
|
||||
// $file = $view['file'][0];
|
||||
// $file_ext = strtolower(pathinfo($file['file'], PATHINFO_EXTENSION));
|
||||
// $is_video = in_array($file_ext, ['mp4', 'mov', 'webm']);
|
||||
// $file_url = $file['path'].'/'.$file['file'];
|
||||
//
|
||||
// echo "<div id=\"bo_v_main_visual\">\n";
|
||||
// if ($is_video) {
|
||||
// // 동영상 파일일 경우 video 태그로 출력
|
||||
// echo '<video src="'.$file_url.'" controls preload="metadata" playsinline></video>';
|
||||
// } else {
|
||||
// // 이미지 파일일 경우 img 태그로 출력
|
||||
// echo '<img src="'.$file_url.'" alt="'.get_text($file['source']).'">';
|
||||
// }
|
||||
// echo "</div>\n";
|
||||
// }
|
||||
// ?>
|
||||
|
||||
<!-- 본문 내용 -->
|
||||
<div class="write_div">
|
||||
<label for="wr_content" class="frm_label">상세 내용</label>
|
||||
<div class="view_content">
|
||||
<?php echo conv_content($view['wr_content'], 1); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- <div id="bo_v_con">-->
|
||||
<!-- --><?php //echo get_view_thumbnail($view['content']); ?>
|
||||
<!-- </div>-->
|
||||
|
||||
<?php
|
||||
// 📌 [핵심] 두번째 첨부파일부터는 하단에 갤러리 형태로 표시합니다.
|
||||
if (isset($view['file']) && count($view['file']) > 0) {
|
||||
echo "<div id=\"bo_v_gallery\">\n";
|
||||
echo "<h3>첨부 파일</h3>";
|
||||
echo "<div class='gallery_grid'>";
|
||||
// 첫 번째 파일(메인 비주얼)을 제외하고 루프를 시작합니다.
|
||||
for ($i = 0; $i < $view['file']['count']; $i++) {
|
||||
$file = $view['file'][$i];
|
||||
if (empty($file['file'])) continue;
|
||||
$file_ext = strtolower(pathinfo($file['file'], PATHINFO_EXTENSION));
|
||||
$is_image = in_array($file_ext, ['gif', 'jpg', 'jpeg', 'png', 'webp']);
|
||||
$file_url = $file['path'].'/'.$file['file'];
|
||||
if ($is_image) {
|
||||
// 썸네일 생성
|
||||
$source_path = G5_DATA_PATH.'/file/'.$bo_table;
|
||||
$thumb = thumbnail($file['file'], $source_path, $source_path, 200, 200, false, true);
|
||||
$thumb_url = G5_DATA_URL.'/file/'.$bo_table.'/'.$thumb;
|
||||
|
||||
echo '<a href="'.$file_url.'" class="view_image_link">';
|
||||
echo '<img src="'.$thumb_url.'" alt="'.get_text($file['source']).'">';
|
||||
echo '</a>';
|
||||
} else {
|
||||
// 이미지가 아닌 파일은 다운로드 링크 제공
|
||||
echo '<div class="gallery_item_other">';
|
||||
echo '<a href="'.$file['href'].'" class="view_file_link">';
|
||||
echo '<i class="fa fa-download"></i> '.get_text($file['source']);
|
||||
echo '</a>';
|
||||
echo '</div>';
|
||||
}
|
||||
}
|
||||
echo "</div>"; // .gallery_grid
|
||||
echo "</div>\n"; // #bo_v_gallery
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
<div id="bo_v_bot">
|
||||
<div class="btn_area">
|
||||
<?php if ($update_href) { ?><a href="<?php echo $update_href ?>" class="btn_b02 btn">수정</a><?php } ?>
|
||||
<?php if ($delete_href) { ?><a href="<?php echo $delete_href ?>" onclick="del(this.href); return false;" class="btn_b02 btn">삭제</a><?php } ?>
|
||||
<?php if ($write_href) { ?><a href="<?php echo $write_href ?>" class="btn_b02 btn">글쓰기</a><?php } ?>
|
||||
<a href="<?php echo $list_href ?>" class="btn_b01 btn">목록</a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<!-- 이미지 팝업(라이트박스) HTML과 스크립트 -->
|
||||
<div id="image_lightbox" class="image_lightbox">
|
||||
<span class="lightbox_close">×</span>
|
||||
<img class="lightbox_content" id="lightbox_image">
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const lightbox = document.getElementById('image_lightbox');
|
||||
const lightboxImage = document.getElementById('lightbox_image');
|
||||
const imageLinks = document.querySelectorAll('.view_image_link');
|
||||
const closeBtn = document.querySelector('.lightbox_close');
|
||||
|
||||
if (!lightbox || !imageLinks.length) return;
|
||||
|
||||
imageLinks.forEach(link => {
|
||||
link.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
lightboxImage.src = this.href;
|
||||
lightbox.style.display = 'flex';
|
||||
});
|
||||
});
|
||||
|
||||
function closeModal() {
|
||||
lightbox.style.display = 'none';
|
||||
lightboxImage.src = '';
|
||||
}
|
||||
|
||||
if(closeBtn) {
|
||||
closeBtn.addEventListener('click', closeModal);
|
||||
}
|
||||
lightbox.addEventListener('click', function(e) {
|
||||
if (e.target === lightbox) {
|
||||
closeModal();
|
||||
}
|
||||
});
|
||||
document.addEventListener('keydown', function(e) {
|
||||
if (e.key === 'Escape' && lightbox.style.display === 'flex') {
|
||||
closeModal();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,355 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
?>
|
||||
|
||||
<script>
|
||||
// 글자수 제한
|
||||
var char_min = parseInt(<?php echo $comment_min ?>); // 최소
|
||||
var char_max = parseInt(<?php echo $comment_max ?>); // 최대
|
||||
</script>
|
||||
<button type="button" class="cmt_btn"><span class="total"><b>댓글</b> <?php echo $view['wr_comment']; ?></span><span class="cmt_more"></span></button>
|
||||
<!-- 댓글 시작 { -->
|
||||
<section id="bo_vc">
|
||||
<h2>댓글목록</h2>
|
||||
<?php
|
||||
$cmt_amt = count($list);
|
||||
for ($i=0; $i<$cmt_amt; $i++) {
|
||||
$comment_id = $list[$i]['wr_id'];
|
||||
$cmt_depth = strlen($list[$i]['wr_comment_reply']) * 50;
|
||||
$comment = $list[$i]['content'];
|
||||
/*
|
||||
if (strstr($list[$i]['wr_option'], "secret")) {
|
||||
$str = $str;
|
||||
}
|
||||
*/
|
||||
$comment = preg_replace("/\[\<a\s.*href\=\"(http|https|ftp|mms)\:\/\/([^[:space:]]+)\.(mp3|wma|wmv|asf|asx|mpg|mpeg)\".*\<\/a\>\]/i", "<script>doc_write(obj_movie('$1://$2.$3'));</script>", $comment);
|
||||
$cmt_sv = $cmt_amt - $i + 1; // 댓글 헤더 z-index 재설정 ie8 이하 사이드뷰 겹침 문제 해결
|
||||
$c_reply_href = $comment_common_url.'&c_id='.$comment_id.'&w=c#bo_vc_w';
|
||||
$c_edit_href = $comment_common_url.'&c_id='.$comment_id.'&w=cu#bo_vc_w';
|
||||
$is_comment_reply_edit = ($list[$i]['is_reply'] || $list[$i]['is_edit'] || $list[$i]['is_del']) ? 1 : 0;
|
||||
?>
|
||||
|
||||
<article id="c_<?php echo $comment_id ?>" <?php if ($cmt_depth) { ?>style="margin-left:<?php echo $cmt_depth ?>px;border-top-color:#e0e0e0"<?php } ?>>
|
||||
<div class="pf_img"><?php echo get_member_profile_img($list[$i]['mb_id']); ?></div>
|
||||
|
||||
<div class="cm_wrap">
|
||||
|
||||
<header style="z-index:<?php echo $cmt_sv; ?>">
|
||||
<h2><?php echo get_text($list[$i]['wr_name']); ?>님의 <?php if ($cmt_depth) { ?><span class="sound_only">댓글의</span><?php } ?> 댓글</h2>
|
||||
<?php echo $list[$i]['name'] ?>
|
||||
<?php if ($is_ip_view) { ?>
|
||||
<span class="sound_only">아이피</span>
|
||||
<span>(<?php echo $list[$i]['ip']; ?>)</span>
|
||||
<?php } ?>
|
||||
<span class="sound_only">작성일</span>
|
||||
<span class="bo_vc_hdinfo"><i class="fa fa-clock-o" aria-hidden="true"></i> <time datetime="<?php echo date('Y-m-d\TH:i:s+09:00', strtotime($list[$i]['datetime'])) ?>"><?php echo $list[$i]['datetime'] ?></time></span>
|
||||
<?php
|
||||
include(G5_SNS_PATH.'/view_comment_list.sns.skin.php');
|
||||
?>
|
||||
</header>
|
||||
|
||||
<!-- 댓글 출력 -->
|
||||
<div class="cmt_contents">
|
||||
<p>
|
||||
<?php if (strstr($list[$i]['wr_option'], "secret")) { ?><img src="<?php echo $board_skin_url; ?>/img/icon_secret.gif" alt="비밀글"><?php } ?>
|
||||
<?php echo $comment ?>
|
||||
</p>
|
||||
<?php if($is_comment_reply_edit) {
|
||||
if($w == 'cu') {
|
||||
$sql = " select wr_id, wr_content, mb_id from $write_table where wr_id = '$c_id' and wr_is_comment = '1' ";
|
||||
$cmt = sql_fetch($sql);
|
||||
if (isset($cmt)) {
|
||||
if (!($is_admin || ($member['mb_id'] == $cmt['mb_id'] && $cmt['mb_id']))) {
|
||||
$cmt['wr_content'] = '';
|
||||
}
|
||||
$c_wr_content = $cmt['wr_content'];
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<span id="edit_<?php echo $comment_id ?>" class="bo_vc_w"></span><!-- 수정 -->
|
||||
<span id="reply_<?php echo $comment_id ?>" class="bo_vc_w"></span><!-- 답변 -->
|
||||
|
||||
<input type="hidden" value="<?php echo strstr($list[$i]['wr_option'],"secret") ?>" id="secret_comment_<?php echo $comment_id ?>">
|
||||
<textarea id="save_comment_<?php echo $comment_id ?>" style="display:none"><?php echo get_text($list[$i]['content1'], 0) ?></textarea>
|
||||
</div>
|
||||
<?php if($is_comment_reply_edit) { ?>
|
||||
<div class="bo_vl_opt">
|
||||
<button type="button" class="btn_cm_opt btn_b01 btn"><i class="fa fa-ellipsis-v" aria-hidden="true"></i><span class="sound_only">댓글 옵션</span></button>
|
||||
<ul class="bo_vc_act">
|
||||
<?php if ($list[$i]['is_reply']) { ?><li><a href="<?php echo $c_reply_href; ?>" onclick="comment_box('<?php echo $comment_id ?>', 'c'); return false;">답변</a></li><?php } ?>
|
||||
<?php if ($list[$i]['is_edit']) { ?><li><a href="<?php echo $c_edit_href; ?>" onclick="comment_box('<?php echo $comment_id ?>', 'cu'); return false;">수정</a></li><?php } ?>
|
||||
<?php if ($list[$i]['is_del']) { ?><li><a href="<?php echo $list[$i]['del_link']; ?>" onclick="return comment_delete();">삭제</a></li><?php } ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<script>
|
||||
$(function() {
|
||||
// 댓글 옵션창 열기
|
||||
$(".btn_cm_opt").on("click", function(){
|
||||
$(this).parent("div").children(".bo_vc_act").show();
|
||||
});
|
||||
|
||||
// 댓글 옵션창 닫기
|
||||
$(document).mouseup(function (e){
|
||||
var container = $(".bo_vc_act");
|
||||
if( container.has(e.target).length === 0)
|
||||
container.hide();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</article>
|
||||
<?php } ?>
|
||||
<?php if ($i == 0) { //댓글이 없다면 ?><p id="bo_vc_empty">등록된 댓글이 없습니다.</p><?php } ?>
|
||||
|
||||
</section>
|
||||
<!-- } 댓글 끝 -->
|
||||
|
||||
<?php if ($is_comment_write) {
|
||||
if($w == '')
|
||||
$w = 'c';
|
||||
?>
|
||||
<!-- 댓글 쓰기 시작 { -->
|
||||
<aside id="bo_vc_w" class="bo_vc_w">
|
||||
<h2>댓글쓰기</h2>
|
||||
<form name="fviewcomment" id="fviewcomment" action="<?php echo $comment_action_url; ?>" onsubmit="return fviewcomment_submit(this);" method="post" autocomplete="off">
|
||||
<input type="hidden" name="w" value="<?php echo $w ?>" id="w">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="wr_id" value="<?php echo $wr_id ?>">
|
||||
<input type="hidden" name="comment_id" value="<?php echo $c_id ?>" id="comment_id">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<input type="hidden" name="sfl" value="<?php echo $sfl ?>">
|
||||
<input type="hidden" name="stx" value="<?php echo $stx ?>">
|
||||
<input type="hidden" name="spt" value="<?php echo $spt ?>">
|
||||
<input type="hidden" name="page" value="<?php echo $page ?>">
|
||||
<input type="hidden" name="is_good" value="">
|
||||
|
||||
<span class="sound_only">내용</span>
|
||||
<?php if ($comment_min || $comment_max) { ?><strong id="char_cnt"><span id="char_count"></span>글자</strong><?php } ?>
|
||||
<textarea id="wr_content" name="wr_content" maxlength="10000" required class="required" title="내용" placeholder="댓글내용을 입력해주세요"
|
||||
<?php if ($comment_min || $comment_max) { ?>onkeyup="check_byte('wr_content', 'char_count');"<?php } ?>><?php echo $c_wr_content; ?></textarea>
|
||||
<?php if ($comment_min || $comment_max) { ?><script> check_byte('wr_content', 'char_count'); </script><?php } ?>
|
||||
<script>
|
||||
$(document).on("keyup change", "textarea#wr_content[maxlength]", function() {
|
||||
var str = $(this).val()
|
||||
var mx = parseInt($(this).attr("maxlength"))
|
||||
if (str.length > mx) {
|
||||
$(this).val(str.substr(0, mx));
|
||||
return false;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<div class="bo_vc_w_wr">
|
||||
<div class="bo_vc_w_info">
|
||||
<?php if ($is_guest) { ?>
|
||||
<label for="wr_name" class="sound_only">이름<strong> 필수</strong></label>
|
||||
<input type="text" name="wr_name" value="<?php echo get_cookie("ck_sns_name"); ?>" id="wr_name" required class="frm_input required" size="25" placeholder="이름">
|
||||
<label for="wr_password" class="sound_only">비밀번호<strong> 필수</strong></label>
|
||||
<input type="password" name="wr_password" id="wr_password" required class="frm_input required" size="25" placeholder="비밀번호">
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
if($board['bo_use_sns'] && ($config['cf_facebook_appid'] || $config['cf_twitter_key'])) {
|
||||
?>
|
||||
<span class="sound_only">SNS 동시등록</span>
|
||||
<span id="bo_vc_send_sns"></span>
|
||||
<?php } ?>
|
||||
<?php if ($is_guest) { ?>
|
||||
<?php echo $captcha_html; ?>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<div class="btn_confirm">
|
||||
<span class="secret_cm chk_box">
|
||||
<input type="checkbox" name="wr_secret" value="secret" id="wr_secret" class="selec_chk">
|
||||
<label for="wr_secret"><span></span>비밀글</label>
|
||||
</span>
|
||||
<button type="submit" id="btn_submit" class="btn_submit">댓글등록</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</aside>
|
||||
|
||||
<script>
|
||||
var save_before = '';
|
||||
var save_html = document.getElementById('bo_vc_w').innerHTML;
|
||||
|
||||
function good_and_write()
|
||||
{
|
||||
var f = document.fviewcomment;
|
||||
if (fviewcomment_submit(f)) {
|
||||
f.is_good.value = 1;
|
||||
f.submit();
|
||||
} else {
|
||||
f.is_good.value = 0;
|
||||
}
|
||||
}
|
||||
|
||||
function fviewcomment_submit(f)
|
||||
{
|
||||
var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자
|
||||
|
||||
f.is_good.value = 0;
|
||||
|
||||
var subject = "";
|
||||
var content = "";
|
||||
$.ajax({
|
||||
url: g5_bbs_url+"/ajax.filter.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
"subject": "",
|
||||
"content": f.wr_content.value
|
||||
},
|
||||
dataType: "json",
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function(data, textStatus) {
|
||||
subject = data.subject;
|
||||
content = data.content;
|
||||
}
|
||||
});
|
||||
|
||||
if (content) {
|
||||
alert("내용에 금지단어('"+content+"')가 포함되어있습니다");
|
||||
f.wr_content.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 양쪽 공백 없애기
|
||||
var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자
|
||||
document.getElementById('wr_content').value = document.getElementById('wr_content').value.replace(pattern, "");
|
||||
if (char_min > 0 || char_max > 0)
|
||||
{
|
||||
check_byte('wr_content', 'char_count');
|
||||
var cnt = parseInt(document.getElementById('char_count').innerHTML);
|
||||
if (char_min > 0 && char_min > cnt)
|
||||
{
|
||||
alert("댓글은 "+char_min+"글자 이상 쓰셔야 합니다.");
|
||||
return false;
|
||||
} else if (char_max > 0 && char_max < cnt)
|
||||
{
|
||||
alert("댓글은 "+char_max+"글자 이하로 쓰셔야 합니다.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (!document.getElementById('wr_content').value)
|
||||
{
|
||||
alert("댓글을 입력하여 주십시오.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (typeof(f.wr_name) != 'undefined')
|
||||
{
|
||||
f.wr_name.value = f.wr_name.value.replace(pattern, "");
|
||||
if (f.wr_name.value == '')
|
||||
{
|
||||
alert('이름이 입력되지 않았습니다.');
|
||||
f.wr_name.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof(f.wr_password) != 'undefined')
|
||||
{
|
||||
f.wr_password.value = f.wr_password.value.replace(pattern, "");
|
||||
if (f.wr_password.value == '')
|
||||
{
|
||||
alert('비밀번호가 입력되지 않았습니다.');
|
||||
f.wr_password.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
<?php if($is_guest) echo chk_captcha_js(); ?>
|
||||
|
||||
set_comment_token(f);
|
||||
|
||||
document.getElementById("btn_submit").disabled = "disabled";
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function comment_box(comment_id, work)
|
||||
{
|
||||
var el_id,
|
||||
form_el = 'fviewcomment',
|
||||
respond = document.getElementById(form_el);
|
||||
|
||||
// 댓글 아이디가 넘어오면 답변, 수정
|
||||
if (comment_id)
|
||||
{
|
||||
if (work == 'c')
|
||||
el_id = 'reply_' + comment_id;
|
||||
else
|
||||
el_id = 'edit_' + comment_id;
|
||||
}
|
||||
else
|
||||
el_id = 'bo_vc_w';
|
||||
|
||||
if (save_before != el_id)
|
||||
{
|
||||
if (save_before)
|
||||
{
|
||||
document.getElementById(save_before).style.display = 'none';
|
||||
}
|
||||
|
||||
document.getElementById(el_id).style.display = '';
|
||||
document.getElementById(el_id).appendChild(respond);
|
||||
//입력값 초기화
|
||||
document.getElementById('wr_content').value = '';
|
||||
|
||||
// 댓글 수정
|
||||
if (work == 'cu')
|
||||
{
|
||||
document.getElementById('wr_content').value = document.getElementById('save_comment_' + comment_id).value;
|
||||
if (typeof char_count != 'undefined')
|
||||
check_byte('wr_content', 'char_count');
|
||||
if (document.getElementById('secret_comment_'+comment_id).value)
|
||||
document.getElementById('wr_secret').checked = true;
|
||||
else
|
||||
document.getElementById('wr_secret').checked = false;
|
||||
}
|
||||
|
||||
document.getElementById('comment_id').value = comment_id;
|
||||
document.getElementById('w').value = work;
|
||||
|
||||
if(save_before)
|
||||
$("#captcha_reload").trigger("click");
|
||||
|
||||
save_before = el_id;
|
||||
}
|
||||
}
|
||||
|
||||
function comment_delete()
|
||||
{
|
||||
return confirm("이 댓글을 삭제하시겠습니까?");
|
||||
}
|
||||
|
||||
comment_box('', 'c'); // 댓글 입력폼이 보이도록 처리하기위해서 추가 (root님)
|
||||
|
||||
<?php if($board['bo_use_sns'] && ($config['cf_facebook_appid'] || $config['cf_twitter_key'])) { ?>
|
||||
|
||||
$(function() {
|
||||
// sns 등록
|
||||
$("#bo_vc_send_sns").load(
|
||||
"<?php echo G5_SNS_URL; ?>/view_comment_write.sns.skin.php?bo_table=<?php echo $bo_table; ?>",
|
||||
function() {
|
||||
save_html = document.getElementById('bo_vc_w').innerHTML;
|
||||
}
|
||||
);
|
||||
});
|
||||
<?php } ?>
|
||||
</script>
|
||||
<?php } ?>
|
||||
<!-- } 댓글 쓰기 끝 -->
|
||||
<script>
|
||||
jQuery(function($) {
|
||||
//댓글열기
|
||||
$(".cmt_btn").click(function(e){
|
||||
e.preventDefault();
|
||||
$(this).toggleClass("cmt_btn_op");
|
||||
$("#bo_vc").toggle();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,107 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// jQuery UI의 CSS와 JS를 불러와 달력(Datepicker) 기능을 사용합니다.
|
||||
add_stylesheet('<link rel="stylesheet" href="//code.jquery.com/ui/1.13.2/themes/base/jquery-ui.css">', 0);
|
||||
add_javascript('<script src="https://code.jquery.com/ui/1.13.2/jquery-ui.js"></script>', 0);
|
||||
|
||||
// 이 스킨의 전용 스타일시트를 불러옵니다.
|
||||
add_stylesheet('<link rel="stylesheet" href="' . $board_skin_url . '/style.css?ver=' . time() . '">', 0);
|
||||
|
||||
// 이 스킨의 전용 자바스크립트 파일을 불러옵니다.
|
||||
add_javascript('<script src="' . $board_skin_url . '/js/write.js?ver=' . time() . '"></script>', 0);
|
||||
?>
|
||||
|
||||
<div id="bo_w">
|
||||
<form name="fwrite" id="fwrite" action="<?php echo $action_url ?>" onsubmit="return fwrite_submit(this);" method="post" enctype="multipart/form-data" autocomplete="off">
|
||||
<input type="hidden" name="uid" value="<?php echo get_uniqid(); ?>">
|
||||
<input type="hidden" name="w" value="<?php echo $w ?>">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="wr_id" value="<?php echo $wr_id ?>">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<input type="hidden" name="sfl" value="<?php echo $sfl ?>">
|
||||
<input type="hidden" name="stx" value="<?php echo $stx ?>">
|
||||
<input type="hidden" name="spt" value="<?php echo $spt ?>">
|
||||
<input type="hidden" name="sst" value="<?php echo $sst ?>">
|
||||
<input type="hidden" name="sod" value="<?php echo $sod ?>">
|
||||
<input type="hidden" name="page" value="<?php echo $page ?>">
|
||||
<?php
|
||||
// 스마트에디터를 사용하기 위해 html1로 고정
|
||||
$option_hidden = '<input type="hidden" name="html" value="1">';
|
||||
echo $option_hidden;
|
||||
?>
|
||||
|
||||
<div class="write_div">
|
||||
<label for="wr_subject" class="frm_label">제목</label>
|
||||
<input type="text" name="wr_subject" value="<?php echo $subject ?>" id="wr_subject" required class="frm_input" size="50" maxlength="255" placeholder="메인 화면에 노출될 제목을 입력하세요.">
|
||||
</div>
|
||||
<div class="write_div">
|
||||
<label for="wr_content" class="frm_label">상세 내용</label>
|
||||
<?php echo $editor_html; // 스마트에디터 출력 ?>
|
||||
</div>
|
||||
|
||||
<div class="write_div">
|
||||
<label class="frm_label">이미지 또는 동영상 (최대 <?php echo $board['bo_upload_count']; ?>개, 각 10MB 이하)</label>
|
||||
<div class="file_upload_grid">
|
||||
<?php
|
||||
for ($i=0; $i<$board['bo_upload_count']; $i++) {
|
||||
$file_label_id = 'bf_file_'.$i;
|
||||
?>
|
||||
<div class="file_preview_wrapper">
|
||||
<?php
|
||||
// 💡 [핵심 수정] 수정 모드일 때 기존 파일의 URL을 가져와 미리보기 스타일을 생성합니다.
|
||||
$file_preview_style = '';
|
||||
if ($w == 'u' && isset($file[$i]['file']) && $file[$i]['file']) {
|
||||
$file_url = $file[$i]['path'].'/'.$file[$i]['file'];
|
||||
$file_preview_style = "background-image: url('{$file_url}');";
|
||||
}
|
||||
?>
|
||||
<div class="file_preview" id="preview_<?php echo $i; ?>" style="<?php echo $file_preview_style; ?>">
|
||||
<span class="preview_text" style="<?php echo $file_preview_style ? 'display:none;' : ''; ?>">클릭하여 파일 업로드</span>
|
||||
</div>
|
||||
|
||||
<!-- 수정 모드이고, 이 슬롯에 파일이 이미 등록되어 있을 경우 파일 정보 표시 -->
|
||||
<?php if ($w == 'u' && isset($file[$i]['file']) && $file[$i]['file']) { ?>
|
||||
<div class="preview_info">
|
||||
<span class="current_file_name" title="<?php echo $file[$i]['source'] ?>">
|
||||
<?php echo $file[$i]['source'] ?>
|
||||
</span>
|
||||
<span class="file_del">
|
||||
<input type="checkbox" id="bf_file_del_<?php echo $i ?>" name="bf_file_del[<?php echo $i ?>]" value="1">
|
||||
<label for="bf_file_del_<?php echo $i ?>">삭제</label>
|
||||
</span>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<!-- 실제 파일 입력 필드 (숨겨져 있음) -->
|
||||
<input type="file" name="bf_file[]" id="<?php echo $file_label_id; ?>" style="display:none;" accept="image/*, video/mp4">
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="btn_confirm">
|
||||
<a href="<?php echo get_pretty_url($bo_table); ?>" class="btn btn_cancel">취소</a>
|
||||
<input type="submit" value="작성완료" id="btn_submit" accesskey="s" class="btn btn_submit">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function fwrite_submit(f) {
|
||||
<?php echo $editor_js; // 에디터 사용시 자바스크립트 부분 ?>
|
||||
|
||||
// 예약 노출 선택 시 날짜 입력 유효성 검사
|
||||
if (document.querySelector('input[name="wr_1"]:checked').value === 'RESERVED') {
|
||||
if (f.wr_2.value === '' || f.wr_3.value === '') {
|
||||
alert('예약 시작일과 종료일을 모두 선택해주세요.');
|
||||
return false;
|
||||
}
|
||||
if (f.wr_2.value > f.wr_3.value) {
|
||||
alert('예약 종료일은 시작일보다 빠를 수 없습니다.');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| 💡 [핵심] 메인 비주얼 게시판 전용 백엔드 유효성 검사
|
||||
|--------------------------------------------------------------------------
|
||||
| 이 파일은 그누보드의 write_update.php 파일이 실행되기 직전에 자동으로
|
||||
| 실행되어, 우리가 원하는 추가 규칙을 검사할 수 있게 해줍니다.
|
||||
*/
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// 규칙 1: 하루 최대 등록 개수 제한 (새 글 작성 시에만 적용)
|
||||
// -----------------------------------------------------------------------------
|
||||
if ($w == '') { // $w가 ''이면 '새 글 작성'을 의미합니다.
|
||||
$daily_limit = 3; // 하루 최대 등록 개수를 3으로 설정합니다.
|
||||
|
||||
// 오늘 날짜(00:00:00 ~ 23:59:59)를 기준으로 작성된 게시물 수를 센다.
|
||||
$sql = " SELECT count(*) as cnt FROM {$write_table}
|
||||
WHERE wr_is_comment = 0
|
||||
AND wr_datetime BETWEEN '".G5_TIME_YMD." 00:00:00' AND '".G5_TIME_YMD." 23:59:59' ";
|
||||
$row = sql_fetch($sql);
|
||||
|
||||
// 만약 오늘 작성된 글이 3개 이상이면, 오류 메시지를 띄우고 중단합니다.
|
||||
if ($row['cnt'] >= $daily_limit) {
|
||||
alert("하루에 등록 가능한 비주얼은 최대 {$daily_limit}개입니다. 내일 다시 시도해주세요.");
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// 규칙 2: 예약 기간 중복 검사
|
||||
// -----------------------------------------------------------------------------
|
||||
// '예약 노출'을 선택했을 때만 검사합니다.
|
||||
if (isset($_POST['wr_1']) && $_POST['wr_1'] == 'RESERVED') {
|
||||
|
||||
// 폼에서 전송된 시작일과 종료일을 가져옵니다.
|
||||
$start_date = isset($_POST['wr_2']) ? trim($_POST['wr_2']) : '';
|
||||
$end_date = isset($_POST['wr_3']) ? trim($_POST['wr_3']) : '';
|
||||
|
||||
// 두 날짜가 모두 입력되었을 때만 검사를 실행합니다.
|
||||
if ($start_date && $end_date) {
|
||||
|
||||
// '예약 노출'로 설정된 다른 게시물 중, 날짜가 겹치는 것이 있는지 찾습니다.
|
||||
// (신규 시작일 <= 기존 종료일) AND (신규 종료일 >= 기존 시작일) -> 이 조건이 참이면 겹치는 것입니다.
|
||||
$sql = " SELECT wr_id, wr_subject FROM {$write_table}
|
||||
WHERE wr_is_comment = 0
|
||||
AND wr_1 = 'RESERVED'
|
||||
AND (
|
||||
'{$start_date}' <= wr_3 AND '{$end_date}' >= wr_2
|
||||
) ";
|
||||
|
||||
// 글 수정($w == 'u') 시에는, 현재 수정 중인 자기 자신은 검사 대상에서 제외합니다.
|
||||
if ($w == 'u' && $wr_id) {
|
||||
$sql .= " AND wr_id != '{$wr_id}' ";
|
||||
}
|
||||
|
||||
$sql .= " LIMIT 1 "; // 겹치는 것이 하나라도 있으면 바로 찾기를 중단합니다.
|
||||
$row = sql_fetch($sql);
|
||||
|
||||
// 만약 겹치는 게시물이 발견되면, 오류 메시지를 띄우고 중단합니다.
|
||||
if (isset($row['wr_id']) && $row['wr_id']) {
|
||||
$colliding_subject = get_text(cut_str($row['wr_subject'], 30));
|
||||
alert("선택하신 예약 기간에 이미 다른 비주얼이 등록되어 있습니다.\\n\\n[중복된 게시물: {$colliding_subject}]\\n\\n날짜를 다시 확인해주세요.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,56 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
/**
|
||||
* coverage :: config.php
|
||||
* '심층취재' 게시판 전용 설정 파일
|
||||
*/
|
||||
|
||||
// 💡 [핵심] 게시판의 특징을 정의합니다.
|
||||
$board_config = array(
|
||||
'list' => array(
|
||||
'default_view_mode' => 'card', // 기본 뷰 모드 (card, list)
|
||||
),
|
||||
'write' => array(
|
||||
'use_summary' => true, // 요약 내용 필드 사용 여부
|
||||
'summary_label' => '기사 요약',
|
||||
'summary_placeholder' => '목록에 표시될 기사의 핵심 요약 내용을 입력하세요.',
|
||||
|
||||
'use_external_link' => false, // 외부 링크 필드는 사용하지 않음
|
||||
|
||||
// 💡 [추가] 파일 필드별 라벨 및 설명
|
||||
'file_labels' => array(
|
||||
1 => '썸네일 이미지 (필수)',
|
||||
2 => '본문 이미지 #1',
|
||||
3 => '본문 이미지 #2',
|
||||
4 => '본문 이미지 #3',
|
||||
5 => '본문 이미지 #4',
|
||||
6 => '본문 이미지 #5',
|
||||
),
|
||||
'file_texts' => array(
|
||||
1 => '목록 페이지의 카드형 뷰에 표시될 대표 이미지입니다.',
|
||||
2 => '본문 내용에 삽입될 이미지를 첨부하세요.',
|
||||
3 => '본문 내용에 삽입될 이미지를 첨부하세요.',
|
||||
4 => '본문 내용에 삽입될 이미지를 첨부하세요.',
|
||||
5 => '본문 내용에 삽입될 이미지를 첨부하세요.',
|
||||
6 => '본문 내용에 삽입될 이미지를 첨부하세요.',
|
||||
),
|
||||
),
|
||||
'view' => array(
|
||||
// 💡 [핵심 추가] 어떤 전문 코어 뷰 파일을 사용할지 정의합니다.
|
||||
'core_type' => 'coverage', // 'coverage' 타입의 뷰 코어를 사용
|
||||
'use_pdf_viewer' => false, // PDF 뷰어는 사용하지 않음
|
||||
'show_summary_in_view' => false, // 💡 [추가] 보기 화면에서 요약 내용을 숨김
|
||||
),
|
||||
);
|
||||
|
||||
// 💡 [추가] 게시판 설정값을 재정의합니다.
|
||||
// 이 설정은 관리자 페이지의 게시판 설정보다 우선 적용됩니다.
|
||||
// $board['bo_upload_count'] = 6; // 파일 업로드 개수 (썸네일 1 + 본문 이미지 5)
|
||||
$board['bo_use_dhtml_editor'] = 1; // HTML 에디터 사용
|
||||
// coverage 스킨 광고 영역 설정
|
||||
$coverage_skin_config = [
|
||||
'left_ad' => false, // 좌측 광고 사용 안함
|
||||
'right_ad' => true, // 우측 광고 사용 안함
|
||||
];
|
||||
?>
|
||||
@@ -0,0 +1,236 @@
|
||||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* coverage :: style.css
|
||||
* 💡 [수정] 고유 ID 선택자를 #coverage-board로 변경합니다.
|
||||
*/
|
||||
|
||||
/* ==========================================================================
|
||||
Board Common Styles
|
||||
========================================================================== */
|
||||
#coverage-board .board-container,
|
||||
#coverage-board .board-write-container,
|
||||
#coverage-board .board-view-container {
|
||||
background-color: #fff;
|
||||
padding: 40px;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 6px 30px rgba(0, 0, 0, 0.08);
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* 이하 모든 #coverage-board 선택자를 #coverage-board로 변경 */
|
||||
|
||||
#coverage-board .board-header {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
gap: 20px;
|
||||
padding-bottom: 25px;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
#coverage-board .board-total { font-size: 1.2rem; color: #555; font-weight: 500; text-align: left; }
|
||||
#coverage-board .board-total .text-primary { color: #0056b3; font-weight: 700; }
|
||||
#coverage-board .board-controls { display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap; }
|
||||
#coverage-board .view-mode-switcher { display: flex; border: 1px solid #ddd; border-radius: 8px; overflow: hidden; }
|
||||
#coverage-board .btn-view-mode { background: #fff; border: none; padding: 10px 15px; cursor: pointer; color: #888; font-size: 1.2rem; line-height: 1; transition: all 0.2s ease; }
|
||||
#coverage-board .btn-view-mode.active { background: #0056b3; color: #fff; }
|
||||
#coverage-board .btn-view-mode:hover:not(.active) { background: #f0f0f0; color: #333; }
|
||||
#coverage-board .board-search { flex-grow: 1; }
|
||||
#coverage-board .board-search .input-group { display: flex; align-items: center; width: 100%; max-width: 400px; margin-left: auto; }
|
||||
#coverage-board .board-search select,
|
||||
#coverage-board .board-search input[type="text"] { border: 1px solid #ddd; padding: 0 15px; height: 42px; font-size: 1rem; background: #fff; border-radius: 8px; transition: border-color 0.2s ease; }
|
||||
#coverage-board .board-search select { border-radius: 8px 0 0 8px; border-right: none; }
|
||||
#coverage-board .board-search input[type="text"]:focus { border-color: #0056b3; outline: none; box-shadow: 0 0 0 2px rgba(0, 86, 179, 0.2); }
|
||||
#coverage-board .board-search .btn { border-radius: 0 8px 8px 0; height: 42px; padding: 0 20px; background: #0056b3; color: #fff; border: none; transition: background-color 0.2s ease; }
|
||||
#coverage-board .board-search .btn:hover { background-color: #003d82; }
|
||||
|
||||
#coverage-board .list-separator { text-align: center; padding: 40px 20px; margin: 40px 0; border-top: 1px solid #e0e0e0; border-bottom: 1px solid #e0e0e0; background-color: #f9f9f9; }
|
||||
#coverage-board .list-separator p { font-size: 1.1rem; color: #666; font-weight: 500; }
|
||||
|
||||
/* 💡 [최종 수정] 뷰 전환이 올바르게 동작하도록 선택자를 .board-list-wrapper 로 수정합니다. */
|
||||
#coverage-board .board-list-wrapper[data-view-mode="card"] .card-list-view { display: block; }
|
||||
#coverage-board .board-list-wrapper[data-view-mode="list"] .list-view { display: block; }
|
||||
#coverage-board .board-list-wrapper .card-list-view,
|
||||
#coverage-board .board-list-wrapper .list-view { display: none; }
|
||||
|
||||
#coverage-board .empty-list { padding: 100px 20px; text-align: center; color: #888; font-size: 1.6rem; font-weight: 600; }
|
||||
#coverage-board .card-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 30px; }
|
||||
#coverage-board .card-item { background: #fff; border-radius: 12px; overflow: hidden; box-shadow: 0 8px 25px rgba(0,0,0,0.08); transition: transform 0.3s ease, box-shadow 0.3s ease; border: none; }
|
||||
#coverage-board .card-item:hover { transform: translateY(-7px); box-shadow: 0 12px 35px rgba(0,0,0,0.15); }
|
||||
#coverage-board .card-link { display: block; text-decoration: none; color: inherit; }
|
||||
#coverage-board .card-thumbnail { position: relative; width: 100%; padding-top: 70%; background-color: #f0f0f0; }
|
||||
#coverage-board .card-thumbnail img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; }
|
||||
#coverage-board .badge-pdf, #coverage-board .badge-link, #coverage-board .badge-featured { position: absolute; top: 15px; right: 15px; padding: 8px 15px; border-radius: 20px; font-size: 0.85rem; font-weight: 700; color: #fff; text-transform: uppercase; letter-spacing: 0.5px; }
|
||||
#coverage-board .badge-pdf { background-color: #e74c3c; }
|
||||
#coverage-board .badge-link { background-color: #3498db; }
|
||||
#coverage-board .badge-featured { background-color: #9b59b6; }
|
||||
#coverage-board .card-content { padding: 25px; }
|
||||
#coverage-board .card-category { display: inline-block; font-size: 0.9rem; font-weight: 700; color: #0056b3; margin-bottom: 10px; }
|
||||
#coverage-board .card-title { font-size: 1.5rem; font-weight: 800; margin: 0 0 15px 0; line-height: 1.4; min-height: 2.8em; color: #222; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
|
||||
#coverage-board .card-summary { font-size: 1rem; color: #666; line-height: 1.7; height: 5.1em; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; }
|
||||
#coverage-board .card-meta { margin-top: 20px; padding-top: 15px; border-top: 1px solid #f0f0f0; font-size: 0.9rem; color: #888; }
|
||||
#coverage-board .card-item.is-featured { border: 2px solid #9b59b6; box-shadow: 0 8px 25px rgba(155, 89, 182, 0.2); }
|
||||
#coverage-board .list-group { border-top: 2px solid #333; }
|
||||
#coverage-board .list-group-header, #coverage-board .list-group-item { display: flex; align-items: center; padding: 18px 10px; border-bottom: 1px solid #f0f0f0; }
|
||||
#coverage-board .list-group-header { font-weight: 700; background-color: #f9f9f9; font-size: 1.05rem; }
|
||||
#coverage-board .list-group-item:hover { background-color: #f5f5f5; }
|
||||
#coverage-board .list-cell { padding: 0 10px; text-align: center; color: #555; }
|
||||
#coverage-board .list-cell.num { flex: 0 0 80px; }
|
||||
#coverage-board .list-cell.title { flex: 1; text-align: left; }
|
||||
#coverage-board .list-cell.title a { color: #333; text-decoration: none; font-weight: 500; }
|
||||
#coverage-board .list-group-item.is-featured { background-color: #fdf8ff; }
|
||||
#coverage-board .badge-featured-list { color: #9b59b6; margin-right: 8px; }
|
||||
|
||||
#coverage-board .view-header { padding-bottom: 20px; border-bottom: 1px solid #e0e0e0; margin-bottom: 30px; }
|
||||
#coverage-board .view-header h1 { font-size: 2.5rem; font-weight: 800; margin-bottom: 15px; line-height: 1.3; }
|
||||
#coverage-board .view-meta { display: flex; flex-wrap: wrap; gap: 10px 20px; color: #888; font-size: 0.95rem; }
|
||||
#coverage-board .view-meta .meta-item i { margin-right: 5px; color: #aaa; }
|
||||
#coverage-board .view-content { padding: 30px 0; }
|
||||
#coverage-board .view-body-images { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 25px; margin-top: 40px; padding-top: 30px; border-top: 1px solid #eee; justify-items: center; }
|
||||
#coverage-board .view-body-images .body-image-item { max-width: 100%; text-align: center; background-color: #fcfcfc; border-radius: 10px; overflow: hidden; box-shadow: 0 5px 20px rgba(0,0,0,0.08); transition: transform 0.2s ease; }
|
||||
#coverage-board .view-body-images .body-image-item:hover { transform: translateY(-5px); }
|
||||
#coverage-board .view-body-images .body-image-item img { max-width: 100%; height: auto; display: block; margin: 0 auto; object-fit: contain; border-bottom: 1px solid #eee; }
|
||||
#coverage-board .view-body-images .body-image-item figcaption { padding: 15px; font-size: 0.9rem; color: #666; line-height: 1.5; }
|
||||
|
||||
/* ==========================================================================
|
||||
View Detail Content Styles (본문 스타일)
|
||||
========================================================================== */
|
||||
#coverage-board .view-detail-content {
|
||||
margin-top: 40px;
|
||||
font-size: 1.1rem;
|
||||
line-height: 1.8; /* 전체적인 줄 높이 */
|
||||
color: #333;
|
||||
white-space: normal; /* 💡 [수정] 소스 코드 줄바꿈이 공백으로 표시되지 않도록 normal로 변경 */
|
||||
word-break: break-word;
|
||||
}
|
||||
#coverage-board .view-detail-content * {
|
||||
max-width: 100%;
|
||||
word-break: break-word;
|
||||
/* 💡 [추가] 에디터가 삽입하는 인라인 스타일의 line-height를 재정의 */
|
||||
line-height: inherit !important;
|
||||
}
|
||||
#coverage-board .view-detail-content p {
|
||||
margin-top: 0;
|
||||
margin-bottom: 16px; /* 💡 [수정] 문단 간격 (news4j와 유사하게) */
|
||||
line-height: 1.7; /* 💡 [수정] 문단 내 줄 높이 */
|
||||
}
|
||||
/* 💡 [추가] 빈 p 태그의 높이를 없애 불필요한 공백 제거 */
|
||||
#coverage-board .view-detail-content p:empty {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
line-height: 0;
|
||||
height: 0;
|
||||
}
|
||||
#coverage-board .view-detail-content p:empty::before {
|
||||
content: "";
|
||||
display: block;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
#coverage-board .view-detail-content h1,
|
||||
#coverage-board .view-detail-content h2,
|
||||
#coverage-board .view-detail-content h3,
|
||||
#coverage-board .view-detail-content h4,
|
||||
#coverage-board .view-detail-content h5,
|
||||
#coverage-board .view-detail-content h6 {
|
||||
margin-top: 30px; /* 💡 [수정] 제목 위 간격 */
|
||||
margin-bottom: 15px; /* 💡 [수정] 제목 아래 간격 */
|
||||
font-weight: 700;
|
||||
line-height: 1.4;
|
||||
color: #222;
|
||||
}
|
||||
#coverage-board .view-detail-content h1 { font-size: 2.2rem; } /* 💡 [수정] news4j와 유사하게 조정 */
|
||||
#coverage-board .view-detail-content h2 { font-size: 2rem; }
|
||||
#coverage-board .view-detail-content h3 { font-size: 1.7rem; }
|
||||
#coverage-board .view-detail-content h4 { font-size: 1.4rem; }
|
||||
|
||||
/* 💡 [추가] 블록 요소 바로 뒤에 오는 불필요한 br 태그 숨김 (에디터가 삽입하는 경우) */
|
||||
#coverage-board .view-detail-content p + br,
|
||||
#coverage-board .view-detail-content h1 + br,
|
||||
#coverage-board .view-detail-content h2 + br,
|
||||
#coverage-board .view-detail-content h3 + br,
|
||||
#coverage-board .view-detail-content div + br {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#coverage-board .view-detail-content ul, #coverage-board .view-detail-content ol { margin-left: 20px; margin-bottom: 1.5em; }
|
||||
#coverage-board .view-detail-content ul li { list-style: disc; margin-bottom: 0.5em; }
|
||||
#coverage-board .view-detail-content ol li { list-style: decimal; margin-bottom: 0.5em; }
|
||||
#coverage-board .view-detail-content blockquote { border-left: 4px solid #0056b3; padding: 10px 20px; margin: 1.5em 0; background-color: #f8f8f8; color: #555; font-style: italic; }
|
||||
|
||||
#coverage-board .download-box { margin-top: 30px; padding-top: 30px; border-top: 1px solid #eee; }
|
||||
#coverage-board .download-box h3 { font-size: 1.3rem; font-weight: 700; margin-bottom: 15px; color: #333; }
|
||||
#coverage-board .download-list { list-style: none; padding: 0; margin: 0; border: 1px solid #e0e0e0; border-radius: 8px; overflow: hidden; }
|
||||
#coverage-board .download-list li { border-bottom: 1px solid #e0e0e0; }
|
||||
#coverage-board .download-list li:last-child { border-bottom: none; }
|
||||
#coverage-board .download-list a { display: flex; align-items: center; padding: 15px 20px; text-decoration: none; color: #555; transition: background-color 0.2s ease; }
|
||||
#coverage-board .download-list a:hover { background-color: #f9f9f9; }
|
||||
#coverage-board .download-list .file-icon { font-size: 1.5rem; color: #888; margin-right: 15px; width: 25px; text-align: center; }
|
||||
#coverage-board .download-list .fa-file-pdf-o { color: #e74c3c; }
|
||||
#coverage-board .download-list .fa-file-image-o { color: #3498db; }
|
||||
#coverage-board .download-list .fa-file-archive-o { color: #f39c12; }
|
||||
#coverage-board .download-list .file-name { flex-grow: 1; font-weight: 500; }
|
||||
#coverage-board .download-list .file-size { font-size: 0.9rem; color: #888; }
|
||||
#coverage-board .view-footer { margin-top: 40px; padding-top: 30px; border-top: 1px solid #e0e0e0; display: flex; justify-content: space-between; align-items: center; }
|
||||
#coverage-board .btn-group-left, #coverage-board .btn-group-right { display: flex; gap: 10px; }
|
||||
|
||||
#coverage-board .board-footer { margin-top: 40px; display: flex; justify-content: space-between; align-items: center; }
|
||||
#coverage-board .pagination-wrapper, #coverage-board .load-more-wrapper { flex-grow: 1; text-align: center; }
|
||||
#coverage-board .board-footer .btn-group { display: flex; gap: 10px; margin-left: auto; }
|
||||
#coverage-board .board-footer .btn, #coverage-board .view-footer .btn { display: inline-flex; align-items: center; justify-content: center; text-decoration: none; border-radius: 8px; font-size: 1.1rem; text-align: center; font-weight: 700; transition: all 0.2s ease; border: none; }
|
||||
#coverage-board .board-footer .btn:hover, #coverage-board .view-footer .btn:hover { transform: translateY(-2px); box-shadow: 0 4px 10px rgba(0,0,0,0.1); }
|
||||
#coverage-board .board-footer .btn-secondary, #coverage-board .view-footer .btn-secondary { background-color: #6c757d; color: #fff; }
|
||||
#coverage-board .board-footer .btn-primary, #coverage-board .view-footer .btn-primary { background-color: #0056b3; color: #fff; }
|
||||
|
||||
#coverage-board .write-form-group { margin-bottom: 25px; }
|
||||
#coverage-board .form-divider { margin: 40px 0; border: 0; border-top: 1px solid #e0e0e0; }
|
||||
#coverage-board .admin-options-group { background-color: #fcfcfc; padding: 25px; border-radius: 8px; margin-top: 30px; border: 1px solid #e0e0e0; }
|
||||
#coverage-board .form-section-title { font-size: 1.3rem; font-weight: 700; margin: 0 0 20px 0; color: #333; }
|
||||
/*#coverage-board .form-check-label { display: flex; align-items: center; gap: 10px; font-size: 1.1rem; cursor: pointer; }*/
|
||||
/*#coverage-board .form-check-label input[type="checkbox"] { -webkit-appearance: checkbox; -moz-appearance: checkbox; appearance: checkbox; width: 18px; height: 18px; opacity: 1; position: static; }*/
|
||||
#coverage-board .write-form-footer { margin-top: 40px; display: flex; justify-content: flex-end; gap: 10px; }
|
||||
#coverage-board .write-form-footer .btn { text-decoration: none; border-radius: 8px; font-size: 1.1rem; font-weight: 700; border: none; transition: all 0.2s ease; }
|
||||
#coverage-board .write-form-footer .btn:hover { transform: translateY(-2px); box-shadow: 0 4px 10px rgba(0,0,0,0.1); }
|
||||
#coverage-board .write-form-footer .btn-secondary { background-color: #6c757d; color: #fff; }
|
||||
#coverage-board .write-form-footer .btn-primary { background-color: #0056b3; color: #fff; }
|
||||
|
||||
/* 3-Column Layout - PC 전용 */
|
||||
#coverage-board .three-column-layout { display: flex; gap: 30px; }
|
||||
#coverage-board .layout-sidebar-left, #coverage-board .layout-sidebar-right { flex: 0 0 240px; position: sticky; top: 100px; align-self: flex-start; }
|
||||
#coverage-board .layout-main-content1 { flex: 1; min-width: 0; }
|
||||
.sub-page-container {
|
||||
padding-top: 0px !important;
|
||||
padding-bottom: 0px !important;
|
||||
/*background: #fff;*/
|
||||
/*min-height: 500px;*/
|
||||
}
|
||||
.layout-main-content1 {
|
||||
padding-top: 0px !important;
|
||||
}
|
||||
|
||||
/* 💡 [추가] 관리자 옵션 체크박스 스타일 */
|
||||
#coverage-board .admin-option-item {
|
||||
background: #f9f9f9;
|
||||
padding: 15px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 5px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
#coverage-board .admin-option-checkbox {
|
||||
appearance: checkbox !important;
|
||||
-webkit-appearance: checkbox !important;
|
||||
width: 20px !important;
|
||||
height: 20px !important;
|
||||
cursor: pointer !important;
|
||||
opacity: 1 !important;
|
||||
visibility: visible !important;
|
||||
display: inline-block !important;
|
||||
position: static !important;
|
||||
margin-right: 10px !important;
|
||||
}
|
||||
#coverage-board .admin-option-item .option-text {
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
font-size: 16px;
|
||||
}
|
||||
@@ -0,0 +1,192 @@
|
||||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* coverage :: style.css
|
||||
* 💡 [수정] 고유 ID 선택자를 #coverage-board로 변경합니다.
|
||||
*/
|
||||
|
||||
/* ==========================================================================
|
||||
Board Common Styles
|
||||
========================================================================== */
|
||||
#coverage-board .board-container,
|
||||
#coverage-board .board-write-container,
|
||||
#coverage-board .board-view-container {
|
||||
background-color: #fff;
|
||||
padding: 40px;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 6px 30px rgba(0, 0, 0, 0.08);
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* 이하 모든 #coverage-board 선택자를 #coverage-board로 변경 */
|
||||
|
||||
#coverage-board .board-header {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
gap: 20px;
|
||||
padding-bottom: 25px;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
#coverage-board .board-total { font-size: 1.2rem; color: #555; font-weight: 500; text-align: left; }
|
||||
#coverage-board .board-total .text-primary { color: #0056b3; font-weight: 700; }
|
||||
#coverage-board .board-controls { display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap; }
|
||||
#coverage-board .view-mode-switcher { display: flex; border: 1px solid #ddd; border-radius: 8px; overflow: hidden; }
|
||||
#coverage-board .btn-view-mode { background: #fff; border: none; padding: 10px 15px; cursor: pointer; color: #888; font-size: 1.2rem; line-height: 1; transition: all 0.2s ease; }
|
||||
#coverage-board .btn-view-mode.active { background: #0056b3; color: #fff; }
|
||||
#coverage-board .btn-view-mode:hover:not(.active) { background: #f0f0f0; color: #333; }
|
||||
#coverage-board .board-search { flex-grow: 1; }
|
||||
#coverage-board .board-search .input-group { display: flex; align-items: center; width: 100%; max-width: 400px; margin-left: auto; }
|
||||
#coverage-board .board-search select,
|
||||
#coverage-board .board-search input[type="text"] { border: 1px solid #ddd; padding: 0 15px; height: 42px; font-size: 1rem; background: #fff; border-radius: 8px; transition: border-color 0.2s ease; }
|
||||
#coverage-board .board-search select { border-radius: 8px 0 0 8px; border-right: none; }
|
||||
#coverage-board .board-search input[type="text"]:focus { border-color: #0056b3; outline: none; box-shadow: 0 0 0 2px rgba(0, 86, 179, 0.2); }
|
||||
#coverage-board .board-search .btn { border-radius: 0 8px 8px 0; height: 42px; padding: 0 20px; background: #0056b3; color: #fff; border: none; transition: background-color 0.2s ease; }
|
||||
#coverage-board .board-search .btn:hover { background-color: #003d82; }
|
||||
|
||||
#coverage-board .list-separator { text-align: center; padding: 40px 20px; margin: 40px 0; border-top: 1px solid #e0e0e0; border-bottom: 1px solid #e0e0e0; background-color: #f9f9f9; }
|
||||
#coverage-board .list-separator p { font-size: 1.1rem; color: #666; font-weight: 500; }
|
||||
|
||||
/* 💡 [최종 수정] 뷰 전환이 올바르게 동작하도록 선택자를 .board-list-wrapper 로 수정합니다. */
|
||||
#coverage-board .board-list-wrapper[data-view-mode="card"] .card-list-view { display: block; }
|
||||
#coverage-board .board-list-wrapper[data-view-mode="list"] .list-view { display: block; }
|
||||
#coverage-board .board-list-wrapper .card-list-view,
|
||||
#coverage-board .board-list-wrapper .list-view { display: none; }
|
||||
|
||||
#coverage-board .empty-list { padding: 100px 20px; text-align: center; color: #888; font-size: 1.6rem; font-weight: 600; }
|
||||
#coverage-board .card-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 30px; }
|
||||
#coverage-board .card-item { background: #fff; border-radius: 12px; overflow: hidden; box-shadow: 0 8px 25px rgba(0,0,0,0.08); transition: transform 0.3s ease, box-shadow 0.3s ease; border: none; }
|
||||
#coverage-board .card-item:hover { transform: translateY(-7px); box-shadow: 0 12px 35px rgba(0,0,0,0.15); }
|
||||
#coverage-board .card-link { display: block; text-decoration: none; color: inherit; }
|
||||
#coverage-board .card-thumbnail { position: relative; width: 100%; padding-top: 70%; background-color: #f0f0f0; }
|
||||
#coverage-board .card-thumbnail img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; }
|
||||
#coverage-board .badge-pdf, #coverage-board .badge-link, #coverage-board .badge-featured { position: absolute; top: 15px; right: 15px; padding: 8px 15px; border-radius: 20px; font-size: 0.85rem; font-weight: 700; color: #fff; text-transform: uppercase; letter-spacing: 0.5px; }
|
||||
#coverage-board .badge-pdf { background-color: #e74c3c; }
|
||||
#coverage-board .badge-link { background-color: #3498db; }
|
||||
#coverage-board .badge-featured { background-color: #9b59b6; }
|
||||
#coverage-board .card-content { padding: 25px; }
|
||||
#coverage-board .card-category { display: inline-block; font-size: 0.9rem; font-weight: 700; color: #0056b3; margin-bottom: 10px; }
|
||||
#coverage-board .card-title { font-size: 1.5rem; font-weight: 800; margin: 0 0 15px 0; line-height: 1.4; min-height: 2.8em; color: #222; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
|
||||
#coverage-board .card-summary { font-size: 1rem; color: #666; line-height: 1.7; height: 5.1em; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; }
|
||||
#coverage-board .card-meta { margin-top: 20px; padding-top: 15px; border-top: 1px solid #f0f0f0; font-size: 0.9rem; color: #888; }
|
||||
#coverage-board .card-item.is-featured { border: 2px solid #9b59b6; box-shadow: 0 8px 25px rgba(155, 89, 182, 0.2); }
|
||||
#coverage-board .list-group { border-top: 2px solid #333; }
|
||||
#coverage-board .list-group-header, #coverage-board .list-group-item { display: flex; align-items: center; padding: 18px 10px; border-bottom: 1px solid #f0f0f0; }
|
||||
#coverage-board .list-group-header { font-weight: 700; background-color: #f9f9f9; font-size: 1.05rem; }
|
||||
#coverage-board .list-group-item:hover { background-color: #f5f5f5; }
|
||||
#coverage-board .list-cell { padding: 0 10px; text-align: center; color: #555; }
|
||||
#coverage-board .list-cell.num { flex: 0 0 80px; }
|
||||
#coverage-board .list-cell.title { flex: 1; text-align: left; }
|
||||
#coverage-board .list-cell.title a { color: #333; text-decoration: none; font-weight: 500; }
|
||||
#coverage-board .list-group-item.is-featured { background-color: #fdf8ff; }
|
||||
#coverage-board .badge-featured-list { color: #9b59b6; margin-right: 8px; }
|
||||
|
||||
#coverage-board .view-header { padding-bottom: 20px; border-bottom: 1px solid #e0e0e0; margin-bottom: 30px; }
|
||||
#coverage-board .view-header h1 { font-size: 2.5rem; font-weight: 800; margin-bottom: 15px; line-height: 1.3; }
|
||||
#coverage-board .view-meta { display: flex; flex-wrap: wrap; gap: 10px 20px; color: #888; font-size: 0.95rem; }
|
||||
#coverage-board .view-meta .meta-item i { margin-right: 5px; color: #aaa; }
|
||||
#coverage-board .view-content { padding: 30px 0; }
|
||||
#coverage-board .view-body-images { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 25px; margin-top: 40px; padding-top: 30px; border-top: 1px solid #eee; justify-items: center; }
|
||||
#coverage-board .view-body-images .body-image-item { max-width: 100%; text-align: center; background-color: #fcfcfc; border-radius: 10px; overflow: hidden; box-shadow: 0 5px 20px rgba(0,0,0,0.08); transition: transform 0.2s ease; }
|
||||
#coverage-board .view-body-images .body-image-item:hover { transform: translateY(-5px); }
|
||||
#coverage-board .view-body-images .body-image-item img { max-width: 100%; height: auto; display: block; margin: 0 auto; object-fit: contain; border-bottom: 1px solid #eee; }
|
||||
#coverage-board .view-body-images .body-image-item figcaption { padding: 15px; font-size: 0.9rem; color: #666; line-height: 1.5; }
|
||||
#coverage-board .view-detail-content { margin-top: 40px; font-size: 1.1rem; line-height: 1.8; color: #333; }
|
||||
#coverage-board .view-detail-content p { margin-bottom: 1.5em; }
|
||||
#coverage-board .view-detail-content h1, #coverage-board .view-detail-content h2, #coverage-board .view-detail-content h3, #coverage-board .view-detail-content h4, #coverage-board .view-detail-content h5, #coverage-board .view-detail-content h6 { margin-top: 2em; margin-bottom: 0.8em; font-weight: 700; line-height: 1.3; color: #222; }
|
||||
#coverage-board .view-detail-content h2 { font-size: 2rem; }
|
||||
#coverage-board .view-detail-content h3 { font-size: 1.7rem; }
|
||||
#coverage-board .view-detail-content h4 { font-size: 1.4rem; }
|
||||
#coverage-board .view-detail-content ul, #coverage-board .view-detail-content ol { margin-left: 20px; margin-bottom: 1.5em; }
|
||||
#coverage-board .view-detail-content ul li { list-style: disc; margin-bottom: 0.5em; }
|
||||
#coverage-board .view-detail-content ol li { list-style: decimal; margin-bottom: 0.5em; }
|
||||
#coverage-board .view-detail-content blockquote { border-left: 4px solid #0056b3; padding: 10px 20px; margin: 1.5em 0; background-color: #f8f8f8; color: #555; font-style: italic; }
|
||||
#coverage-board .download-box { margin-top: 30px; padding-top: 30px; border-top: 1px solid #eee; }
|
||||
#coverage-board .download-box h3 { font-size: 1.3rem; font-weight: 700; margin-bottom: 15px; color: #333; }
|
||||
#coverage-board .download-list { list-style: none; padding: 0; margin: 0; border: 1px solid #e0e0e0; border-radius: 8px; overflow: hidden; }
|
||||
#coverage-board .download-list li { border-bottom: 1px solid #e0e0e0; }
|
||||
#coverage-board .download-list li:last-child { border-bottom: none; }
|
||||
#coverage-board .download-list a { display: flex; align-items: center; padding: 15px 20px; text-decoration: none; color: #555; transition: background-color 0.2s ease; }
|
||||
#coverage-board .download-list a:hover { background-color: #f9f9f9; }
|
||||
#coverage-board .download-list .file-icon { font-size: 1.5rem; color: #888; margin-right: 15px; width: 25px; text-align: center; }
|
||||
#coverage-board .download-list .fa-file-pdf-o { color: #e74c3c; }
|
||||
#coverage-board .download-list .fa-file-image-o { color: #3498db; }
|
||||
#coverage-board .download-list .fa-file-archive-o { color: #f39c12; }
|
||||
#coverage-board .download-list .file-name { flex-grow: 1; font-weight: 500; }
|
||||
#coverage-board .download-list .file-size { font-size: 0.9rem; color: #888; }
|
||||
#coverage-board .view-footer { margin-top: 40px; padding-top: 30px; border-top: 1px solid #e0e0e0; display: flex; justify-content: space-between; align-items: center; }
|
||||
#coverage-board .btn-group-left, #coverage-board .btn-group-right { display: flex; gap: 10px; }
|
||||
|
||||
#coverage-board .board-footer { margin-top: 40px; display: flex; justify-content: space-between; align-items: center; }
|
||||
#coverage-board .pagination-wrapper, #coverage-board .load-more-wrapper { flex-grow: 1; text-align: center; }
|
||||
#coverage-board .board-footer .btn-group { display: flex; gap: 10px; margin-left: auto; }
|
||||
#coverage-board .board-footer .btn, #coverage-board .view-footer .btn { display: inline-flex; align-items: center; justify-content: center; text-decoration: none; border-radius: 8px; font-size: 1.1rem; text-align: center; font-weight: 700; transition: all 0.2s ease; border: none; }
|
||||
#coverage-board .board-footer .btn:hover, #coverage-board .view-footer .btn:hover { transform: translateY(-2px); box-shadow: 0 4px 10px rgba(0,0,0,0.1); }
|
||||
#coverage-board .board-footer .btn-secondary, #coverage-board .view-footer .btn-secondary { background-color: #6c757d; color: #fff; }
|
||||
#coverage-board .board-footer .btn-primary, #coverage-board .view-footer .btn-primary { background-color: #0056b3; color: #fff; }
|
||||
|
||||
#coverage-board .write-form-group { margin-bottom: 25px; }
|
||||
#coverage-board .form-divider { margin: 40px 0; border: 0; border-top: 1px solid #e0e0e0; }
|
||||
#coverage-board .admin-options-group { background-color: #fcfcfc; padding: 25px; border-radius: 8px; margin-top: 30px; border: 1px solid #e0e0e0; }
|
||||
#coverage-board .form-section-title { font-size: 1.3rem; font-weight: 700; margin: 0 0 20px 0; color: #333; }
|
||||
/*#coverage-board .form-check-label { display: flex; align-items: center; gap: 10px; font-size: 1.1rem; cursor: pointer; }*/
|
||||
/*#coverage-board .form-check-label input[type="checkbox"] { -webkit-appearance: checkbox; -moz-appearance: checkbox; appearance: checkbox; width: 18px; height: 18px; opacity: 1; position: static; }*/
|
||||
#coverage-board .write-form-footer { margin-top: 40px; display: flex; justify-content: flex-end; gap: 10px; }
|
||||
#coverage-board .write-form-footer .btn { text-decoration: none; border-radius: 8px; font-size: 1.1rem; font-weight: 700; border: none; transition: all 0.2s ease; }
|
||||
#coverage-board .write-form-footer .btn:hover { transform: translateY(-2px); box-shadow: 0 4px 10px rgba(0,0,0,0.1); }
|
||||
#coverage-board .write-form-footer .btn-secondary { background-color: #6c757d; color: #fff; }
|
||||
#coverage-board .write-form-footer .btn-primary { background-color: #0056b3; color: #fff; }
|
||||
|
||||
#coverage-board .three-column-layout { display: flex; gap: 30px; }
|
||||
#coverage-board .layout-sidebar-left, #coverage-board .layout-sidebar-right { flex: 0 0 240px; position: sticky; top: 100px; }
|
||||
#coverage-board .layout-main-content { flex: 1; min-width: 0; }
|
||||
@media (max-width: 1024px) {
|
||||
#coverage-board .three-column-layout { flex-direction: column; }
|
||||
#coverage-board .layout-sidebar-left, #coverage-board .layout-sidebar-right { position: static; flex-basis: 100%; }
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
#coverage-board .board-container, #coverage-board .board-write-container, #coverage-board .board-view-container { padding: 15px; }
|
||||
#coverage-board .board-controls { flex-direction: column-reverse; align-items: stretch; gap: 15px; }
|
||||
#coverage-board .card-list { grid-template-columns: 1fr; }
|
||||
#coverage-board .list-cell.category, #coverage-board .list-cell.name, #coverage-board .list-cell.hit { display: none; }
|
||||
#coverage-board .view-footer { flex-direction: column; gap: 15px; }
|
||||
#coverage-board .btn-group-left, #coverage-board .btn-group-right { justify-content: center; width: 100%; }
|
||||
#coverage-board .view-header h1 { font-size: 1.8rem; }
|
||||
#coverage-board .view-meta { flex-direction: column; gap: 5px; }
|
||||
}
|
||||
.sub-page-container {
|
||||
padding-top: 0px; !important;
|
||||
padding-bottom: 0px; !important;
|
||||
/*background: #fff;*/
|
||||
/*min-height: 500px;*/
|
||||
}
|
||||
.layout-main-content {
|
||||
padding-top: 0px; !important;
|
||||
}
|
||||
|
||||
/* 💡 [추가] 관리자 옵션 체크박스 스타일 */
|
||||
#coverage-board .admin-option-item {
|
||||
background: #f9f9f9;
|
||||
padding: 15px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 5px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
#coverage-board .admin-option-checkbox {
|
||||
appearance: checkbox !important;
|
||||
-webkit-appearance: checkbox !important;
|
||||
width: 20px !important;
|
||||
height: 20px !important;
|
||||
cursor: pointer !important;
|
||||
opacity: 1 !important;
|
||||
visibility: visible !important;
|
||||
display: inline-block !important;
|
||||
position: static !important;
|
||||
margin-right: 10px !important;
|
||||
}
|
||||
#coverage-board .admin-option-item .option-text {
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
font-size: 16px;
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const boardWrapper = document.getElementById('coverage-board');
|
||||
if (!boardWrapper) return;
|
||||
|
||||
const boardListWrapper = boardWrapper.querySelector('.board-list-wrapper');
|
||||
if (!boardListWrapper) return;
|
||||
|
||||
const viewModeButtons = document.querySelectorAll('.btn-view-mode');
|
||||
const paginationWrapper = document.querySelector('.pagination-wrapper');
|
||||
const loadMoreWrapper = document.querySelector('.load-more-wrapper');
|
||||
|
||||
viewModeButtons.forEach(button => {
|
||||
button.addEventListener('click', function() {
|
||||
const mode = this.dataset.mode;
|
||||
viewModeButtons.forEach(btn => btn.classList.remove('active'));
|
||||
this.classList.add('active');
|
||||
|
||||
boardListWrapper.dataset.viewMode = mode;
|
||||
|
||||
set_cookie('board_coverage_view_mode', mode, 365, '/', '');
|
||||
|
||||
if (paginationWrapper) paginationWrapper.style.display = (mode === 'list') ? 'block' : 'none';
|
||||
if (loadMoreWrapper) loadMoreWrapper.style.display = (mode === 'card') ? 'block' : 'none';
|
||||
});
|
||||
});
|
||||
|
||||
const loadMoreButton = document.getElementById('btn-load-more');
|
||||
if (loadMoreButton) {
|
||||
loadMoreButton.addEventListener('click', function() {
|
||||
let currentPage = parseInt(this.dataset.page, 10);
|
||||
this.textContent = '로딩 중...';
|
||||
this.disabled = true;
|
||||
|
||||
const url = new URL(window.location.href);
|
||||
url.searchParams.set('page', currentPage);
|
||||
|
||||
fetch(url)
|
||||
.then(response => response.text())
|
||||
.then(html => {
|
||||
const parser = new DOMParser();
|
||||
const doc = parser.parseFromString(html, 'text/html');
|
||||
|
||||
const newItems = doc.querySelectorAll('.board-list-wrapper .card-item');
|
||||
const cardList = boardListWrapper.querySelector('.card-list');
|
||||
|
||||
if (newItems.length > 0 && cardList) {
|
||||
newItems.forEach(item => {
|
||||
cardList.appendChild(item);
|
||||
});
|
||||
|
||||
currentPage++;
|
||||
this.dataset.page = currentPage;
|
||||
this.textContent = '더보기';
|
||||
this.disabled = false;
|
||||
|
||||
const nextLoadMoreButton = doc.getElementById('btn-load-more');
|
||||
if (!nextLoadMoreButton) {
|
||||
this.style.display = 'none';
|
||||
}
|
||||
} else {
|
||||
this.textContent = '마지막 페이지입니다.';
|
||||
this.disabled = true;
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error loading more items:', error);
|
||||
this.textContent = '오류 발생';
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function set_cookie(name, value, time, domain, path) {
|
||||
let expires = "";
|
||||
if (time) {
|
||||
const date = new Date();
|
||||
date.setTime(date.getTime() + (time * 24 * 60 * 60 * 1000));
|
||||
expires = "; expires=" + date.toUTCString();
|
||||
}
|
||||
document.cookie = name + "=" + (value || "") + expires + "; path=" + path + "; domain=" + domain;
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
/**
|
||||
* coverage :: list.skin.php
|
||||
*/
|
||||
|
||||
// 0. 중앙 광고 설정 파일을 로드합니다.
|
||||
include_once(G5_THEME_PATH . '/skin/board/board_ad_config.php');
|
||||
|
||||
// 1. 자식 스킨의 설정 파일을 로드합니다.
|
||||
$config_path = __DIR__ . '/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
}
|
||||
|
||||
// 2. 자식 스킨이 자신의 CSS와 JS를 직접 로드합니다.
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/css/style.css?ver='.G5_SERVER_TIME.'">', 0);
|
||||
add_javascript('<script src="'.$board_skin_url.'/js/script.js?ver='.G5_SERVER_TIME.'"></script>', 0);
|
||||
|
||||
// 3. 뷰 모드를 미리 결정합니다.
|
||||
$default_view_mode = isset($board_config['list']['default_view_mode']) ? $board_config['list']['default_view_mode'] : 'card';
|
||||
$view_mode = get_cookie('board_' . $bo_table . '_view_mode') ?: $default_view_mode;
|
||||
?>
|
||||
|
||||
<!-- 💡 [수정] 스킨 전체를 감싸는 고유 ID를 'coverage-board'로 변경합니다. -->
|
||||
<div id="coverage-board">
|
||||
<div class="three-column-layout container">
|
||||
|
||||
<!-- 1. 좌측 사이드바 -->
|
||||
<?php if (isset($board_ad_config['list_ad']['left']) && $board_ad_config['list_ad']['left'] === true): ?>
|
||||
<aside class="layout-sidebar-left">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">좌측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_l" data-layout="coverage-list-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- 2. 중앙 메인 콘텐츠 -->
|
||||
<main class="layout-main-content1">
|
||||
<?php
|
||||
// 💡 [핵심 수정] '심층취재' 타입 전용 코어 목록 파일을 불러옵니다.
|
||||
$core_skin_path = G5_THEME_PATH . '/skin/board/rb.board.core.coverage/list.skin.php';
|
||||
if (file_exists($core_skin_path)) {
|
||||
include($core_skin_path);
|
||||
} else {
|
||||
echo '<div class="empty-list">코어 게시판 스킨 파일을 찾을 수 없습니다.</div>';
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="board-footer">
|
||||
<div class="pagination-wrapper" style="display: <?php echo ($view_mode === 'list') ? 'block' : 'none'; ?>;">
|
||||
<?php echo $write_pages; ?>
|
||||
</div>
|
||||
<?php if ($page < $total_page): ?>
|
||||
<div class="load-more-wrapper" style="display: <?php echo ($view_mode === 'card') ? 'block' : 'none'; ?>;">
|
||||
<button type="button" id="btn-load-more" class="btn btn-primary" data-page="<?php echo $page + 1; ?>">더보기</button>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<div class="btn-group">
|
||||
<?php if ($list_href) { ?><a href="<?php echo $list_href ?>" class="btn btn-secondary">목록</a><?php } ?>
|
||||
<?php if ($write_href) { ?><a href="<?php echo $write_href ?>" class="btn btn-primary">글쓰기</a><?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- 3. 우측 사이드바 -->
|
||||
<?php if (isset($board_ad_config['list_ad']['right']) && $board_ad_config['list_ad']['right'] === true): ?>
|
||||
<aside class="layout-sidebar-right">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">우측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_r" data-layout="coverage-list-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
/**
|
||||
* coverage :: view.skin.php
|
||||
*/
|
||||
|
||||
// 0. 중앙 광고 설정 파일을 로드합니다.
|
||||
include_once(G5_THEME_PATH . '/skin/board/board_ad_config.php');
|
||||
|
||||
// 1. 자식 스킨의 설정 파일을 로드합니다.
|
||||
$config_path = __DIR__ . '/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
}
|
||||
|
||||
// 2. 자식 스킨이 자신의 CSS와 JS를 직접 로드합니다.
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/css/style.css?ver='.G5_SERVER_TIME.'">', 0);
|
||||
add_javascript('<script src="'.$board_skin_url.'/js/script.js?ver='.G5_SERVER_TIME.'"></script>', 0);
|
||||
|
||||
?>
|
||||
|
||||
<!-- 💡 [수정] 스킨 전체를 감싸는 고유 ID를 'coverage-board'로 변경합니다. -->
|
||||
<div id="coverage-board">
|
||||
<div class="three-column-layout container">
|
||||
|
||||
<!-- 1. 좌측 사이드바 -->
|
||||
<?php if ((isset($board_ad_config['view_ad']['left']) && $board_ad_config['view_ad']['left'] === true) || (isset($coverage_skin_config['left_ad']) && $coverage_skin_config['left_ad'] === true)): ?>
|
||||
<aside class="layout-sidebar-left">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">좌측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_l" data-layout="coverage-view-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- 2. 중앙 메인 콘텐츠 -->
|
||||
<main class="layout-main-content">
|
||||
<?php
|
||||
// 💡 [핵심 수정] '심층취재' 타입 전용 코어 뷰 파일을 불러옵니다.
|
||||
$core_skin_path = G5_THEME_PATH . '/skin/board/rb.board.core.coverage/view.skin.php';
|
||||
if (file_exists($core_skin_path)) {
|
||||
include($core_skin_path);
|
||||
} else {
|
||||
echo '<div class="empty-list">코어 게시판 스킨 파일을 찾을 수 없습니다.</div>';
|
||||
}
|
||||
?>
|
||||
</main>
|
||||
|
||||
<!-- 3. 우측 사이드바 -->
|
||||
<?php if ((isset($board_ad_config['view_ad']['right']) && $board_ad_config['view_ad']['right'] === true) || (isset($coverage_skin_config['right_ad']) && $coverage_skin_config['right_ad'] === true)): ?>
|
||||
<aside class="layout-sidebar-right">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">우측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_r" data-layout="coverage-view-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
/**
|
||||
* coverage :: write.skin.php
|
||||
*/
|
||||
|
||||
// 0. 중앙 광고 설정 파일을 로드합니다.
|
||||
include_once(G5_THEME_PATH . '/skin/board/board_ad_config.php');
|
||||
|
||||
// 1. 자식 스킨의 설정 파일을 로드합니다.
|
||||
$config_path = __DIR__ . '/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
}
|
||||
|
||||
// 2. 자식 스킨이 자신의 CSS와 JS를 직접 로드합니다.
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/css/style.css?ver='.G5_SERVER_TIME.'">', 0);
|
||||
add_javascript('<script src="'.$board_skin_url.'/js/script.js?ver='.G5_SERVER_TIME.'"></script>', 0);
|
||||
|
||||
?>
|
||||
|
||||
<!-- 💡 [수정] 스킨 전체를 감싸는 고유 ID를 'coverage-board'로 변경합니다. -->
|
||||
<div id="coverage-board">
|
||||
<div class="three-column-layout container">
|
||||
|
||||
<!-- 1. 좌측 사이드바 -->
|
||||
<?php if (isset($board_ad_config['write_ad']['left']) && $board_ad_config['write_ad']['left'] === true): ?>
|
||||
<aside class="layout-sidebar-left">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">좌측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_l" data-layout="coverage-write-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- 2. 중앙 메인 콘텐츠 -->
|
||||
<main class="layout-main-content">
|
||||
<?php
|
||||
// 💡 [핵심 수정] '심층취재' 타입 전용 코어 글쓰기 파일을 불러옵니다.
|
||||
$core_skin_path = G5_THEME_PATH . '/skin/board/rb.board.core.coverage/write.skin.php';
|
||||
if (file_exists($core_skin_path)) {
|
||||
include($core_skin_path);
|
||||
} else {
|
||||
echo '<div class="empty-list">코어 게시판 스킨 파일을 찾을 수 없습니다.</div>';
|
||||
}
|
||||
?>
|
||||
</main>
|
||||
|
||||
<!-- 3. 우측 사이드바 -->
|
||||
<?php if (isset($board_ad_config['write_ad']['right']) && $board_ad_config['write_ad']['right'] === true): ?>
|
||||
<aside class="layout-sidebar-right">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">우측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_r" data-layout="coverage-write-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 62 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 318 B |
@@ -0,0 +1,792 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
include_once(G5_LIB_PATH.'/thumbnail.lib.php');
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
<!-- 게시판 목록 시작 { -->
|
||||
<div id="bo_gall" style="width:<?php echo $width; ?>">
|
||||
|
||||
<?php if ($is_category) { ?>
|
||||
<nav id="bo_cate" class="mnone">
|
||||
<h2><?php echo $board['bo_subject'] ?> 카테고리</h2>
|
||||
<ul id="bo_cate_ul">
|
||||
<?php echo $category_option ?>
|
||||
</ul>
|
||||
</nav>
|
||||
<div class="select_bo_cate mview">
|
||||
<a class="sel" rel="선택"><?php if($sca) echo $sca; else echo "전체";?></a>
|
||||
<ul style="display:none;">
|
||||
<?php echo $category_option ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<form name="fboardlist" id="fboardlist" action="<?php echo G5_BBS_URL; ?>/board_list_update.php" onsubmit="return fboardlist_submit(this);" method="post">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="sfl" value="<?php echo $sfl ?>">
|
||||
<input type="hidden" name="stx" value="<?php echo $stx ?>">
|
||||
<input type="hidden" name="spt" value="<?php echo $spt ?>">
|
||||
<input type="hidden" name="sst" value="<?php echo $sst ?>">
|
||||
<input type="hidden" name="sod" value="<?php echo $sod ?>">
|
||||
<input type="hidden" name="page" value="<?php echo $page ?>">
|
||||
<input type="hidden" name="sw" value="">
|
||||
|
||||
<!-- 게시판 페이지 정보 및 버튼 시작 { -->
|
||||
<div id="bo_btn_top">
|
||||
<div id="bo_list_total">
|
||||
<span>Total <?php echo number_format($total_count) ?>건</span>
|
||||
<?php echo $page ?> 페이지
|
||||
</div>
|
||||
|
||||
<ul class="btn_bo_user">
|
||||
<?php if ($admin_href) { ?><li><a href="<?php echo $admin_href ?>" class="btn_admin btn" title="관리자"><i class="fa fa-cog fa-spin fa-fw"></i><span class="sound_only">관리자</span></a></li><?php } ?>
|
||||
<?php if ($rss_href) { ?><li><a href="<?php echo $rss_href ?>" class="btn_b01 btn" title="RSS" target="_blank"><i class="fa fa-rss" aria-hidden="true"></i><span class="sound_only">RSS</span></a></li><?php } ?>
|
||||
<li>
|
||||
<button type="button" class="btn_bo_sch btn_b01 btn" title="게시판 검색"><i class="fa fa-search" aria-hidden="true"></i><span class="sound_only">게시판 검색</span></button>
|
||||
</li>
|
||||
<!-- <?php if ($write_href) { ?><li><a href="<?php echo $write_href ?>" class="btn_b01 btn" title="글쓰기"><i class="fas fa-pencil-alt"></i><span class="sound_only">글쓰기</span></a></li><?php } ?> -->
|
||||
<?php if ($is_admin == 'super' || $is_auth) { ?>
|
||||
<li>
|
||||
<button type="button" class="btn_more_opt is_list_btn btn_b01 btn" title="게시판 리스트 옵션"><i class="fa fa-ellipsis-v" aria-hidden="true"></i><span class="sound_only">게시판 리스트 옵션</span></button>
|
||||
<?php if ($is_checkbox) {?>
|
||||
<ul class="more_opt is_list_btn">
|
||||
<li><button type="submit" name="btn_submit" value="선택삭제" onclick="document.pressed=this.value"><i class="fas fa-trash-alt"></i>선택삭제</button></li>
|
||||
<li><button type="submit" name="btn_submit" value="선택복사" onclick="document.pressed=this.value"><i class="fa fa-files-o" aria-hidden="true"></i>선택복사</button></li>
|
||||
<li><button type="submit" name="btn_submit" value="선택이동" onclick="document.pressed=this.value"><i class="fas fa-arrows-alt-h"></i>선택이동</button></li>
|
||||
<li><button type="button" value="닫기" class="more_opt_close"><i class="fas fa-times"></i>메뉴닫기</button></li>
|
||||
</ul>
|
||||
<?php } ?>
|
||||
</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
<!-- } 게시판 페이지 정보 및 버튼 끝 -->
|
||||
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<div id="gall_allchk" class="all_chk chk_box">
|
||||
<input type="checkbox" id="chkall" onclick="if (this.checked) all_checked(true); else all_checked(false);" class="selec_chk">
|
||||
<label for="chkall">
|
||||
<span></span>
|
||||
<b class="sound_only">현재 페이지 게시물 </b> 전체선택
|
||||
</label>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<ul id="gall_ul" class="gall_row">
|
||||
<?php for ($i=0; $i<count($list); $i++) {
|
||||
|
||||
$classes = array();
|
||||
|
||||
$classes[] = 'gall_li';
|
||||
$classes[] = 'col-gn-'.$bo_gallery_cols;
|
||||
|
||||
if( $i && ($i % $bo_gallery_cols == 0) ){
|
||||
$classes[] = 'box_clear';
|
||||
}
|
||||
|
||||
if( $wr_id && $wr_id == $list[$i]['wr_id'] ){
|
||||
$classes[] = 'gall_now';
|
||||
}
|
||||
?>
|
||||
<li class="<?php echo implode(' ', $classes); ?>">
|
||||
<div class="gall_box">
|
||||
<div class="gall_chk chk_box">
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<input type="checkbox" name="chk_wr_id[]" value="<?php echo $list[$i]['wr_id'] ?>" id="chk_wr_id_<?php echo $i ?>" class="selec_chk">
|
||||
<label for="chk_wr_id_<?php echo $i ?>">
|
||||
<span></span>
|
||||
<b class="sound_only"><?php echo $list[$i]['subject'] ?></b>
|
||||
</label>
|
||||
|
||||
<?php } ?>
|
||||
<span class="sound_only">
|
||||
<?php
|
||||
if ($wr_id == $list[$i]['wr_id'])
|
||||
echo "<span class=\"bo_current\">열람중</span>";
|
||||
else
|
||||
echo $list[$i]['num'];
|
||||
?>
|
||||
</span>
|
||||
</div>
|
||||
<div class="gall_con">
|
||||
<div class="gall_img" >
|
||||
<a href="<?php echo $list[$i]['href'] ?>">
|
||||
<?php
|
||||
if ($list[$i]['is_notice']) { // 공지사항 ?>
|
||||
<span class="is_notice">공지</span>
|
||||
<?php } else {
|
||||
$thumb = get_list_thumbnail($board['bo_table'], $list[$i]['wr_id'], $board['bo_gallery_width'], $board['bo_gallery_height'], false, true);
|
||||
|
||||
if($thumb['src']) {
|
||||
$img_content = '<img src="'.$thumb['src'].'" alt="'.$thumb['alt'].'" >';
|
||||
} else {
|
||||
$img_content = '<span class="no_image">no image</span>';
|
||||
}
|
||||
|
||||
preg_match_all("/<iframe[^>]*src=[\"']?([^>\"']+)[\"']?[^>]*>/i", $list[$i]['wr_content'], $matches);
|
||||
if(isset($matches[1][0])) $youtube_url = $matches[1][0];
|
||||
|
||||
$regExp = '/^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#\&\?]*).*/';
|
||||
if(isset($matches[1][0])) preg_match($regExp, $matches[1][0], $yurl);
|
||||
|
||||
if(isset($yurl[7])) $youtube_id = trim($yurl[7]); else $youtube_id = "";
|
||||
|
||||
|
||||
if($youtube_id){
|
||||
|
||||
$img_content = '<img src="https://img.youtube.com/vi/'.$youtube_id.'/0.jpg" alt="'.$thumb['alt'].'" style="width:'.$board['bo_gallery_width'].'px; height:'.$board['bo_gallery_height'].'px; ">';
|
||||
|
||||
}
|
||||
|
||||
echo run_replace('thumb_image_tag', $img_content, $thumb);
|
||||
unset($matches, $yurl, $youtube_id);
|
||||
}
|
||||
?>
|
||||
</a>
|
||||
</div>
|
||||
<div class="gall_text_href" >
|
||||
|
||||
<a href="<?php echo $list[$i]['href'] ?>" class="bo_tit" >
|
||||
|
||||
<?php if ($is_category && $list[$i]['ca_name']) { ?>
|
||||
<span class="bo_cate_link"><?php echo $list[$i]['ca_name'] ?></span><!-- <a href="<?php echo $list[$i]['ca_name_href'] ?>" class="bo_cate_link"> -->
|
||||
<?php } ?>
|
||||
|
||||
|
||||
<?php // echo $list[$i]['icon_reply']; ?>
|
||||
<!-- 갤러리 댓글기능 사용시 주석을 제거하세요. -->
|
||||
|
||||
<span style="display:inline-block; text-overflow:ellipsis;white-space:nowrap;word-wrap:normal;overflow:hidden; width:100%;"><?php echo $list[$i]['subject'] ?>
|
||||
<?php
|
||||
// if ($list[$i]['file']['count']) { echo '<'.$list[$i]['file']['count'].'>'; }
|
||||
if ($list[$i]['icon_new']) echo "<span class=\"new_icon\">new<span class=\"sound_only\">새글</span></span>";
|
||||
if (isset($list[$i]['icon_hot'])) echo rtrim($list[$i]['icon_hot']);
|
||||
//if (isset($list[$i]['icon_file'])) echo rtrim($list[$i]['icon_file']);
|
||||
//if (isset($list[$i]['icon_link'])) echo rtrim($list[$i]['icon_link']);
|
||||
if (isset($list[$i]['icon_secret'])) echo rtrim($list[$i]['icon_secret']);
|
||||
?>
|
||||
<?php if ($list[$i]['comment_cnt']) { ?><span class="sound_only">댓글</span><span class="cnt_cmt">+ <?php echo $list[$i]['wr_comment']; ?></span><span class="sound_only">개</span><?php } ?>
|
||||
</span>
|
||||
</a>
|
||||
<span class="bo_cnt"><?php echo utf8_strcut(strip_tags($list[$i]['wr_content']), 68, '..'); ?></span>
|
||||
</div>
|
||||
<div class="gall_name">
|
||||
<span class="sound_only">작성자 </span><span class="profile_img"><?php echo $list[$i]['name'] ?></span>
|
||||
</div>
|
||||
<div class="gall_info">
|
||||
<!-- <span class="sound_only">작성자 </span><?php echo $list[$i]['name'] ?> -->
|
||||
<span class="gall_date"><span class="sound_only">작성일 </span>Date <?php echo $list[$i]['datetime'] ?></span>
|
||||
<span class="gall_view"><span class="sound_only">조회 </span>Hit <?php echo $list[$i]['wr_hit'] ?></span>
|
||||
</div>
|
||||
<?php if ($is_good || $is_nogood) { ?>
|
||||
<div class="gall_option">
|
||||
<?php if ($is_good) { ?><span class="sound_only">추천</span><strong><i class="far fa-thumbs-up"></i> <?php echo $list[$i]['wr_good'] ?></strong><?php } ?>
|
||||
<?php if ($is_nogood) { ?><span class="sound_only">비추천</span><strong><i class="far fa-thumbs-down"></i> <?php echo $list[$i]['wr_nogood'] ?></strong><?php } ?>
|
||||
</div>
|
||||
<?php }?>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<?php if (count($list) == 0) { echo "<li class=\"empty_list\">게시물이 없습니다.</li>"; } ?>
|
||||
</ul>
|
||||
|
||||
<!-- 페이지 -->
|
||||
<?php echo $write_pages; ?>
|
||||
<!-- 페이지 -->
|
||||
|
||||
<?php if ($list_href || $is_checkbox || $write_href) { ?>
|
||||
<div class="bo_fx">
|
||||
<?php if ($list_href || $write_href) { ?>
|
||||
<ul class="btn_bo_user">
|
||||
<!-- <?php if ($admin_href) { ?><li><a href="<?php echo $admin_href ?>" class="btn_b011 btn_admin btn" title="관리자"><i class="fa fa-cog fa-spin fa-fw"></i><span class="">관리자</span></a></li><?php } ?>
|
||||
<?php if ($rss_href) { ?><li><a href="<?php echo $rss_href ?>" class="btn_b011 btn" title="RSS" target="_blank"><i class="fa fa-rss" aria-hidden="true"></i><span class="">RSS</span></a></li><?php } ?> -->
|
||||
<?php if ($write_href) { ?><li><a href="<?php echo $write_href ?>" class="btn_b011 btn" title="글쓰기"><i class="fas fa-pencil-alt"></i><span class="">글쓰기</span></a></li><?php } ?>
|
||||
</ul>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</form>
|
||||
|
||||
<!-- 게시판 검색 시작 { -->
|
||||
<div class="bo_sch_wrap">
|
||||
<fieldset class="bo_sch">
|
||||
<h3>검색</h3>
|
||||
<form name="fsearch" method="get">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<input type="hidden" name="sop" value="and">
|
||||
<label for="sfl" class="sound_only">검색대상</label>
|
||||
<select name="sfl" id="sfl">
|
||||
<?php echo get_board_sfl_select_options($sfl); ?>
|
||||
</select>
|
||||
<label for="stx" class="sound_only">검색어<strong class="sound_only"> 필수</strong></label>
|
||||
<div class="sch_bar">
|
||||
<input type="text" name="stx" value="<?php echo stripslashes($stx) ?>" required id="stx" class="sch_input" size="25" maxlength="20" placeholder="검색어를 입력해주세요">
|
||||
<button type="submit" value="검색" class="sch_btn"><i class="fa fa-search" aria-hidden="true"></i><span class="sound_only">검색</span></button>
|
||||
</div>
|
||||
<button type="button" class="bo_sch_cls"><i class="fa fa-times" aria-hidden="true"></i><span class="sound_only">닫기</span></button>
|
||||
</form>
|
||||
</fieldset>
|
||||
<div class="bo_sch_bg"></div>
|
||||
</div>
|
||||
<script>
|
||||
jQuery(function($){
|
||||
// 게시판 검색
|
||||
$(".btn_bo_sch").on("click", function() {
|
||||
$(".bo_sch_wrap").fadeToggle();
|
||||
})
|
||||
$('.bo_sch_bg, .bo_sch_cls').click(function(){
|
||||
$('.bo_sch_wrap').fadeOut();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<!-- } 게시판 검색 끝 -->
|
||||
</div>
|
||||
|
||||
<?php if($is_checkbox) { ?>
|
||||
<noscript>
|
||||
<p>자바스크립트를 사용하지 않는 경우<br>별도의 확인 절차 없이 바로 선택삭제 처리하므로 주의하시기 바랍니다.</p>
|
||||
</noscript>
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<script>
|
||||
function all_checked(sw) {
|
||||
var f = document.fboardlist;
|
||||
|
||||
for (var i=0; i<f.length; i++) {
|
||||
if (f.elements[i].name == "chk_wr_id[]")
|
||||
f.elements[i].checked = sw;
|
||||
}
|
||||
}
|
||||
|
||||
function fboardlist_submit(f) {
|
||||
var chk_count = 0;
|
||||
|
||||
for (var i=0; i<f.length; i++) {
|
||||
if (f.elements[i].name == "chk_wr_id[]" && f.elements[i].checked)
|
||||
chk_count++;
|
||||
}
|
||||
|
||||
if (!chk_count) {
|
||||
alert(document.pressed + "할 게시물을 하나 이상 선택하세요.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(document.pressed == "선택복사") {
|
||||
select_copy("copy");
|
||||
return;
|
||||
}
|
||||
|
||||
if(document.pressed == "선택이동") {
|
||||
select_copy("move");
|
||||
return;
|
||||
}
|
||||
|
||||
if(document.pressed == "선택삭제") {
|
||||
if (!confirm("선택한 게시물을 정말 삭제하시겠습니까?\n\n한번 삭제한 자료는 복구할 수 없습니다\n\n답변글이 있는 게시글을 선택하신 경우\n답변글도 선택하셔야 게시글이 삭제됩니다."))
|
||||
return false;
|
||||
|
||||
f.removeAttribute("target");
|
||||
f.action = g5_bbs_url+"/board_list_update.php";
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// 선택한 게시물 복사 및 이동
|
||||
function select_copy(sw) {
|
||||
var f = document.fboardlist;
|
||||
|
||||
if (sw == 'copy')
|
||||
str = "복사";
|
||||
else
|
||||
str = "이동";
|
||||
|
||||
var sub_win = window.open("", "move", "left=50, top=50, width=500, height=550, scrollbars=1");
|
||||
|
||||
f.sw.value = sw;
|
||||
f.target = "move";
|
||||
f.action = g5_bbs_url+"/move.php";
|
||||
f.submit();
|
||||
}
|
||||
|
||||
// 게시판 리스트 관리자 옵션
|
||||
jQuery(function($){
|
||||
$(".btn_more_opt.is_list_btn").on("click", function(e) {
|
||||
e.stopPropagation();
|
||||
$(".more_opt.is_list_btn").toggle();
|
||||
});
|
||||
$(document).on("click", function (e) {
|
||||
if(!$(e.target).closest('.is_list_btn').length) {
|
||||
$(".more_opt.is_list_btn").hide();
|
||||
}
|
||||
});
|
||||
$(".more_opt_close").on("click", function (e) {
|
||||
$(".more_opt.is_list_btn").hide();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<?php } ?>
|
||||
<!-- } 게시판 목록 끝 -->
|
||||
|
||||
|
||||
<style>
|
||||
@charset "utf-8";
|
||||
|
||||
/* ### 기본 스타일 커스터마이징 시작 ### */
|
||||
|
||||
/* 게시판 버튼 */
|
||||
/* 목록 버튼 */
|
||||
#bo_gall a.btn_b01 {}
|
||||
#bo_gall a.btn_b01:focus, #bo_gall a.btn_b01:hover {}
|
||||
#bo_gall a.btn_b02 {}
|
||||
#bo_gall a.btn_b02:focus, #bo_gall a.btn_b02:hover {}
|
||||
#bo_gall a.btn_admin {} /* 관리자 전용 버튼 */
|
||||
#bo_gall a.btn_admin:focus, #bo_gall .btn_admin:hover {}
|
||||
|
||||
/* 읽기 버튼 */
|
||||
#bo_v a.btn_b01 {}
|
||||
#bo_v a.btn_b01:focus, #bo_v a.btn_b01:hover {}
|
||||
#bo_v a.btn_b02 {}
|
||||
#bo_v a.btn_b02:focus, #bo_v a.btn_b02:hover {}
|
||||
#bo_v a.btn_admin {} /* 관리자 전용 버튼 */
|
||||
#bo_v a.btn_admin:focus, #bo_v a.btn_admin:hover {}
|
||||
|
||||
/* 쓰기 버튼 */
|
||||
#bo_w .btn_confirm {} /* 서식단계 진행 */
|
||||
#bo_w .btn_submit {padding:0 20px;font-size:1.167em}
|
||||
#bo_w button.btn_submit {}
|
||||
#bo_w fieldset .btn_submit {}
|
||||
#bo_w .btn_cancel {font-size:1.167em;border-radius:3px}
|
||||
#bo_w button.btn_cancel {}
|
||||
#bo_w .btn_cancel:focus, #bo_w .btn_cancel:hover {}
|
||||
#bo_w a.btn_frmline, #bo_w button.btn_frmline {} /* 우편번호검색버튼 등 */
|
||||
#bo_w button.btn_frmline {}
|
||||
|
||||
/* 기본 테이블 */
|
||||
/* 읽기 내 테이블 */
|
||||
#bo_v .tbl_head01 {}
|
||||
#bo_v .tbl_head01 caption {}
|
||||
#bo_v .tbl_head01 thead th {}
|
||||
#bo_v .tbl_head01 thead a {}
|
||||
#bo_v .tbl_head01 thead th input {} /* middle 로 하면 게시판 읽기에서 목록 사용시 체크박스 라인 깨짐 */
|
||||
#bo_v .tbl_head01 tfoot th {}
|
||||
#bo_v .tbl_head01 tfoot td {}
|
||||
#bo_v .tbl_head01 tbody th {}
|
||||
#bo_v .tbl_head01 td {}
|
||||
#bo_v .tbl_head01 a {}
|
||||
#bo_v td.empty_table {}
|
||||
|
||||
/* 쓰기 테이블 */
|
||||
#bo_w table {}
|
||||
#bo_w caption {}
|
||||
#bo_w .frm_info {}
|
||||
#bo_w .frm_address {}
|
||||
#bo_w .frm_file {}
|
||||
|
||||
#bo_w .tbl_frm01 {}
|
||||
#bo_w .tbl_frm01 th {}
|
||||
#bo_w .tbl_frm01 td {}
|
||||
#bo_w .tbl_frm01 textarea, #bo_w tbl_frm01 .frm_input {}
|
||||
#bo_w .tbl_frm01 textarea {}
|
||||
#bo_w .tbl_frm01 a {}
|
||||
|
||||
/* 필수입력 */
|
||||
#bo_w .required, #bo_w textarea.required {}
|
||||
|
||||
#bo_w .cke_sc {}
|
||||
#bo_w button.btn_cke_sc {}
|
||||
#bo_w .cke_sc_def {}
|
||||
#bo_w .cke_sc_def dl {}
|
||||
#bo_w .cke_sc_def dl:after {}
|
||||
#bo_w .cke_sc_def dt, #bo_w .cke_sc_def dd {}
|
||||
#bo_w .cke_sc_def dt {}
|
||||
#bo_w .cke_sc_def dd {}
|
||||
|
||||
/* ### 기본 스타일 커스터마이징 끝 ### */
|
||||
|
||||
/* 게시판 목록 */
|
||||
#bo_cate {padding:0px;margin:10px 0; margin-bottom:20px; border-bottom:1px solid #ddd}
|
||||
#bo_cate h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_cate ul {zoom:1}
|
||||
#bo_cate ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_cate li {display:inline-block;padding:0px; min-width:150px; padding-right:2px; text-align:center;}
|
||||
#bo_cate a {display:block;line-height:40px;padding:0 20px;border-radius:0px;border:1px solid #ddd; background:#fff; border-bottom:0px; text-align:center;}
|
||||
#bo_cate a:focus, #bo_cate a:hover, #bo_cate a:active {text-decoration:none;background:#d2d6dc; border:1px solid #d2d6dc; border-bottom:0px;}
|
||||
#bo_cate #bo_cate_on {z-index:2;background:#333;color:#fff;font-weight:500; border:1px solid #333; border-bottom:0px; /*border-bottom-color:#1977b5;
|
||||
-webkit-box-shadow: inset 0 2px 5px rgb(33, 135, 202);
|
||||
-moz-box-shadow: inset 0 2px 5px rgb(33, 135, 202);
|
||||
box-shadow:inset 0 2px 5px rgb(33, 135, 202);*/}
|
||||
.td_subject img {margin-left:3px}
|
||||
|
||||
.selec_chk {position:absolute;top:0;left:0;width:0;height:0;opacity:0;outline:0;z-index:-1;overflow:hidden}
|
||||
.chk_box {position:relative}
|
||||
.chk_box input[type="checkbox"] + label {position:relative;padding-left:20px;color:#676e70;vertical-align:baseline; }
|
||||
.chk_box input[type="checkbox"] + label:hover{color:#2172f8}
|
||||
.chk_box input[type="checkbox"] + label span {position:absolute;top:10px;left:10px;width:15px;height:15px;display:block;background:#fff;border:1px solid #d0d4df;border-radius:3px; z-index:10;}
|
||||
.chk_box input[type="checkbox"]:checked + label {color:#000}
|
||||
.chk_box input[type="checkbox"]:checked + label span {background:url(./img/chk.png) no-repeat 50% 50% #3a8afd;border-color:#1471f6;border-radius:3px; }
|
||||
.all_chk.chk_box input[type="checkbox"] + label span {top:0;left:0; margin-left:0px; margin-top:3px; margin-right:5px;}
|
||||
|
||||
|
||||
/* 갤러리 목록 */
|
||||
#bo_gall h2 {margin:0;padding:0;width:1px;height:1px;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_gall #gall_ul {margin:10px -10px 0;padding:0;list-style:none;zoom:1}
|
||||
#bo_gall #gall_ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_gall .gall_li {}
|
||||
#bo_gall .gall_li .gall_chk {position:absolute;top:0;left:0;padding:5px}
|
||||
#bo_gall .gall_box {position:relative;margin:0 0 50px 0;border-radius:0 0 2px 2px}
|
||||
|
||||
.gall_row .col-gn-0,.gall_row .col-gn-1,.gall_row .col-gn-2,.gall_row .col-gn-3,.gall_row .col-gn-4,.gall_row .col-gn-5,.gall_row .col-gn-6,.gall_row .col-gn-7,.gall_row .col-gn-8,.gall_row .col-gn-9,.gall_row .col-gn-10 {position:relative;min-height:1px;padding-left:10px;*padding-left:0;padding-right:10px;*padding-right:0;float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-left:0}
|
||||
.gall_row .col-gn-0,.gall_row .col-gn-1 {width:100%}
|
||||
.gall_row .col-gn-2 {width:50%}
|
||||
.gall_row .col-gn-3 {width:33.33333333%}
|
||||
.gall_row .col-gn-4 {width:25%}
|
||||
.gall_row .col-gn-5 {width:20%}
|
||||
.gall_row .col-gn-6 {width:16.66666667%}
|
||||
.gall_row .col-gn-7 {width:14.28571428%}
|
||||
.gall_row .col-gn-8 {width:12.5%}
|
||||
.gall_row .col-gn-9 {width:11.11111111%}
|
||||
.gall_row .col-gn-10 {width:10%}
|
||||
|
||||
.gall_row .box_clear {clear:both}
|
||||
|
||||
#bo_gall .gall_now .gall_text_href a {color:#ff3061}
|
||||
|
||||
#bo_gall .gall_href a:link, #bo_gall .gall_href a:focus, #bo_gall .gall_href a:hover {text-decoration:none}
|
||||
#bo_gall .gall_img {border-bottom:1px solid #eee;text-align:center; /*max-height:200px;*/overflow:hidden}
|
||||
#bo_gall .gall_img a,#bo_gall .gall_img .no_image,#bo_gall .gall_img .is_notice {display:block}
|
||||
#bo_gall .gall_img img{max-width:100%;height:auto !important; transition: transform 1s; -webkit-transition: -webkit-transform 1s;}
|
||||
#bo_gall .gall_img img:hover { transform: scale(1.2, 1.2); -webkit-transform: scale(1.2, 1.2); }
|
||||
#bo_gall .gall_img video{max-width:100%;height:auto !important;}
|
||||
#bo_gall .gall_img video:hover {}
|
||||
|
||||
#bo_gall .gall_img span {display:inline-block;background:#eaeaea;text-align:center;line-height:200px;text-transform:uppercase;font-weight:bold;font-size:1.25em;color:#777}
|
||||
|
||||
#bo_gall .gall_text_href {margin:0px 0; padding:10px; background-color:#f6f6f6}
|
||||
#bo_gall .gall_text_href a {font-weight:bold}
|
||||
#bo_gall .gall_text_href img {margin:0 0 0 4px}
|
||||
#bo_gall .bo_tit {display:block; /*line-height:30px;*/ font-weight:700;color:#000;font-size:1.1em}
|
||||
#bo_gall .bo_tit .cnt_cmt {background:#fff;color:#333;font-size:0.7em;height:15px;line-height:15px;padding:0px 5px; padding-bottom:0px; border-radius:3px;vertical-align:middle; border:1px solid #aaa; margin-left:3px; }
|
||||
#bo_gall .bo_cnt {color:#acacac;line-height:18px; display:none;}
|
||||
#bo_gall .profile_img img {border-radius:50%}
|
||||
#bo_gall .bo_tit .fa-heart {display:inline-block;line-height:14px;width:16px;font-size:0.833em;color:#C42828;background:none;text-align:center;border-radius:2px;font-size:12px;border:0px solid #cbe3e8;vertical-align:middle; margin-top:3px;}
|
||||
#bo_gall .bo_tit .fa-lock {display:inline-block;line-height:14px;width:16px;font-size:0.833em;color:#666;background:none;text-align:center;border-radius:2px;font-size:12px;border:0px solid #cbe3e8;vertical-align:middle; margin-top:3px;}
|
||||
#bo_gall .bo_tit .new_icon {display:inline-block;width:28px; height:15px; line-height:13px;font-size:0.7em; letter-spacing:0.05em; color:#fff;background:#3071CA;text-align:center;border-radius:2px;margin-left:2px;font-weight:normal;vertical-align:middle; margin-top:0px; margin-right:1px;}
|
||||
#bo_gall .bo_tit .hot_icon {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#1EA362;background:#ffb9b9;text-align:center;border-radius:2px;vertical-align:middle}
|
||||
#bo_gall .bo_tit .fa-download {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#F19717;background:none;text-align:center;border-radius:2px;margin-left:5px;vertical-align:middle; margin-top:3px;}
|
||||
#bo_gall .bo_tit .fa-link {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#BB51FD;background:none;text-align:center; border-radius:2px;margin-left:5px;vertical-align:middle; margin-top:3px;}
|
||||
|
||||
|
||||
|
||||
|
||||
#bo_gall .gall_info {line-height:1.5em;line-height:20px; padding:5px 10px; padding-bottom:10px; background:#f6f6f6; font-size:0.9em;}
|
||||
#bo_gall .gall_info strong {display:inline-block;margin:0}
|
||||
#bo_gall .gall_info i {font-size:12px}
|
||||
#bo_gall .gall_info .gall_date,
|
||||
#bo_gall .gall_info .gall_view {display:inline-block;margin-right:10px;color:#777}
|
||||
#bo_gall .gall_name{padding:5px 10px; background:#f6f6f6;}
|
||||
|
||||
#bo_gall .gall_option {position:absolute;bottom:10px;right:10px; font-size:0.9em;}
|
||||
#bo_gall .gall_option strong {background:#f6f6f6;padding:5px 10px;border-radius:30px;
|
||||
/*-webkit-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
-moz-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2)*/}
|
||||
|
||||
/* 게시판 목록 공통 */
|
||||
#bo_btn_top {margin:10px 0}
|
||||
#bo_btn_top:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_fx {margin-bottom:5px;float:right;zoom:1}
|
||||
.bo_fx:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_fx ul {margin:0;padding:0;list-style:none}
|
||||
#bo_list_total {float:left;line-height:34px;font-size:0.92em;color:#4e546f}
|
||||
|
||||
.btn_bo_user {float:right;margin:0;padding:0;list-style:none}
|
||||
.btn_bo_user li {float:left;width:auto;text-align:center;margin-left:5px;background:#fff}
|
||||
.btn_bo_user > li {position:relative}
|
||||
.btn_bo_adm {float:left}
|
||||
.btn_bo_adm li {float:left;margin-right:5px}
|
||||
.btn_bo_adm input {padding:0 8px;border:0;background:#d4d4d4;color:#666;text-decoration:none;vertical-align:middle}
|
||||
.bo_notice td {background:#fff6fa !important;border-bottom:1px solid #f8e6ee}
|
||||
.bo_notice td a {font-weight:bold}
|
||||
.bo_notice .notice_icon {display:inline-block;line-height:25px;border-radius:5px;font-weight:bold;color:#f9267f}
|
||||
|
||||
.more_opt {display:none;position:absolute;top:45px;right:0;background:#fff;border:1px solid #b8bfc4;z-index:999}
|
||||
.more_opt:before {content:"";position:absolute;top:-8px;right:13px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent}
|
||||
.more_opt:after {content:"";position:absolute;top:-6px;right:13px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
.more_opt li {border-bottom:1px solid #f1f1f1;padding:10px;float:inherit;width:120px;margin:0;color:#6b757c;text-align:left}
|
||||
.more_opt li.wid_s {width:70px;}
|
||||
.more_opt li:last-child {border-bottom:0}
|
||||
.more_opt li button, .more_opt li a {width:100%;border:0;background:#fff;color:#6b757c; text-align:left;}
|
||||
.more_opt li:hover a,
|
||||
.more_opt li:hover button {color:#000}
|
||||
.more_opt li i {float:right;line-height:20px}
|
||||
|
||||
.td_num strong {color:#000}
|
||||
/*.bo_cate_link {font-size:0.9em; float:left;display:block;margin-right:10px;background:#666;color:#fff;font-weight:normal !important;height:20px;line-height:10px;padding:5px 8px;border-radius:5px;font-size:0.95em} *//* 글제목줄 분류스타일 */
|
||||
.bo_cate_link{display:block; background:none; color:#333; border-bottom:1px solid #ddd; padding-bottom:10px; margin-bottom:5px; overflow:hidden; width:100%; text-align:center;}
|
||||
.bo_cate_link:hover {text-decoration:none}
|
||||
.bo_current {color:#e8180c}
|
||||
#bo_list .profile_img {display:inline-block;margin-right:5px}
|
||||
#bo_list .profile_img img {border-radius:50%}
|
||||
#bo_list .cnt_cmt {background:#fff;color:#333;font-size:11px;height:16px;line-height:16px;padding:3px 5px; padding-bottom:1px; border-radius:3px;vertical-align:middle; border:1px solid #666; margin-left:3px; }
|
||||
#bo_gall li.empty_list {padding:85px 0;text-align:center}
|
||||
|
||||
.bo_sch_wrap {display:none;width:100%;height:100%;position:fixed;top:0;left:0;z-index:999999999;}
|
||||
.bo_sch {position:absolute;top:50%;left:50%;background:#fff;text-align:left;width:500px;max-height:300px;margin-left:-250px;margin-top:-150px;overflow-y:auto;border-radius:5px;-webkit-box-shadow:1px 1px 18px rgba(0,0,0,0.2);-moz-box-shadow:1px 1px 18px rgba(0,0,0,0.2);box-shadow:1px 1px 18px rgba(0,0,0,0.2);border:1px solid #dde7e9;background:#fff;border-radius:3px}
|
||||
.bo_sch:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_sch h3 {padding:15px;border-bottom:1px solid #e8e8e8}
|
||||
.bo_sch legend {background:red}
|
||||
.bo_sch form {padding:15px;display:block}
|
||||
.bo_sch select {border:0;width:100%;height:40px;border:1px solid #dddddd;border-radius:2px; /*-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075)*/}
|
||||
.bo_sch .sch_bar {display:inline-block;width:100%;clear:both;margin-top:15px;border:1px solid #dddddd;border-radius:2px; /*-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075)*/}
|
||||
.bo_sch .sch_input {width:80%;height:38px;border:0;padding:0;background-color:transparent;float:left}
|
||||
.bo_sch .sch_btn {height:38px;float:right;color:#656565;background:none;border:0;width:40px;font-size:15px}
|
||||
.bo_sch .bo_sch_cls {position:absolute;right:0;top:0;color:#b5b8bb;border:0;padding:12px 15px;font-size:16px;background:#fff}
|
||||
.bo_sch_bg {background:#000;background:rgba(0,0,0,0.5);width:100%;height:100%;}
|
||||
|
||||
/* 게시판 쓰기 */
|
||||
#char_count_desc {display:block;margin:0 0 5px;padding:0}
|
||||
#char_count_wrap {margin:5px 0 0;text-align:right}
|
||||
#char_count {font-weight:bold}
|
||||
|
||||
#autosave_wrapper {position:relative}
|
||||
#autosave_pop {display:none;z-index:10;position:absolute !important;top:34px;right:0;width:350px;height:auto !important;height:180px;max-height:180px;border:1px solid #565656;background:#fff;
|
||||
-webkit-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
-moz-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2)}
|
||||
#autosave_pop:before {content:"";position:absolute;top:-8px;right:45px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #000 transparent}
|
||||
#autosave_pop:after {content:"";position:absolute;top:-7px;right:45px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
html.no-overflowscrolling #autosave_pop {height:auto;max-height:10000px !important} /* overflow 미지원 기기 대응 */
|
||||
#autosave_pop strong {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#autosave_pop div {text-align:center;margin:0 !important}
|
||||
#autosave_pop button {margin:0;padding:0;border:0}
|
||||
#autosave_pop ul {padding:15px;border-top:1px solid #e9e9e9;list-style:none;overflow-y:scroll;height:130px;border-bottom:1px solid #e8e8e8}
|
||||
#autosave_pop li {padding:8px 5px;border-bottom:1px solid #fff;background:#eee;zoom:1}
|
||||
#autosave_pop li:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#autosave_pop a {display:block;float:left}
|
||||
#autosave_pop span {display:block;float:right;font-size:0.92em;font-style:italic;color:#999}
|
||||
.autosave_close {cursor:pointer;width:100%;height:30px;background:none;color:#888;font-weight:bold;font-size:0.92em}
|
||||
.autosave_close:hover {background:#f3f3f3;color:#3597d9}
|
||||
.autosave_content {display:none}
|
||||
.autosave_del {background:url(./img/close_btn.png) no-repeat 50% 50%;text-indent:-999px;overflow:hidden;height:20px;width:20px}
|
||||
|
||||
/* 게시판 읽기 */
|
||||
#bo_v {margin-bottom:20px;background:#fff;box-sizing:border-box}
|
||||
|
||||
#bo_v_table {position:absolute;top:0;right:16px;margin:0;padding:0 5px;height:25px;background:#ff3061;color:#fff;font-weight:bold;line-height:2.2em}
|
||||
|
||||
#bo_v_title {border-top:1px solid #000; border-bottom:1px solid #ddd; padding:15px 15px; padding-left:10px; background-color:#F7F7F7;}
|
||||
#bo_v_title .bo_v_cate {display:inline-block;line-height:20px;background:#666;color:#fff;padding:0 10px;border-radius:3px; font-size:0.9em;}
|
||||
#bo_v_title .bo_v_tit {display:inline-block;font-size:1.5em;margin:5px 0 0;word-break:break-all}
|
||||
|
||||
#bo_v_info {margin:0;border-bottom:1px solid #f1f1f1;color:#666}
|
||||
#bo_v_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_info h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
|
||||
#bo_v_info .profile_info {margin:20px 0 10px;display:inline-block;float:left}
|
||||
#bo_v_info .profile_info .pf_img {float:left;margin-right:10px}
|
||||
#bo_v_info .profile_info .pf_img img {border-radius:50%;width:50px;height:50px}
|
||||
#bo_v_info .profile_info .profile_info_ct {float:left;padding:5px 0;line-height:18px}
|
||||
|
||||
#bo_v_info strong {display:inline-block;margin:0 10px 0 0;font-weight:normal}
|
||||
#bo_v_info .sv_member,
|
||||
#bo_v_info .sv_guest,
|
||||
#bo_v_info .member,
|
||||
#bo_v_info .guest {font-weight:bold}
|
||||
#bo_v_info .profile_img {display:none}
|
||||
#bo_v_info .sv_member {color:#000}
|
||||
#bo_v_info .if_date {margin:0;color:#888}
|
||||
|
||||
#bo_v_file h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_file ul {margin:0;list-style:none}
|
||||
#bo_v_file li {padding:15px;position:relative;margin:10px 0;border:1px solid #dfdfdf;border-radius:5px;
|
||||
-webkit-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
-moz-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%)}
|
||||
#bo_v_file li i {float:left;color:#b2b2b2;font-size:2.35em;margin-right:20px}
|
||||
#bo_v_file a {float:left;display:block;text-decoration:none;word-wrap:break-word;color:#000}
|
||||
#bo_v_file a:focus, #bo_v_file li:hover a, #bo_v_file a:active {text-decoration:underline;color:#3a8afd}
|
||||
#bo_v_file img {float:left;margin:0 10px 0 0}
|
||||
#bo_v_file .bo_v_file_cnt {color:#b2b2b2;font-size:0.92em}
|
||||
#bo_v_file li:hover {border-color:#bed4f4;color:#bed4f4}
|
||||
#bo_v_file li:hover i {color:#3a8afd}
|
||||
#bo_v_file li:hover .bo_v_file_cnt {color:#99c2fc}
|
||||
|
||||
|
||||
#bo_v_link h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_file ul {margin:0;list-style:none}
|
||||
#bo_v_link li {padding:15px;position:relative;margin:10px 0;border:1px solid #dfdfdf;border-radius:5px;
|
||||
-webkit-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
-moz-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%)}
|
||||
#bo_v_link li i {float:left;color:#b2b2b2;font-size:2.35em;margin-right:20px}
|
||||
#bo_v_link a {float:left;display:block;text-decoration:none;word-wrap:break-word;color:#000}
|
||||
#bo_v_link a:focus, #bo_v_link li:hover a, #bo_v_link a:active {text-decoration:underline;color:#3a8afd}
|
||||
#bo_v_link .bo_v_link_cnt {color:#b2b2b2;font-size:0.92em}
|
||||
#bo_v_link li:hover {border-color:#bed4f4;color:#bed4f4}
|
||||
#bo_v_link li:hover i {color:#3a8afd}
|
||||
#bo_v_link li:hover .bo_v_link_cnt {color:#99c2fc}
|
||||
|
||||
|
||||
#bo_v_top {zoom:1}
|
||||
#bo_v_top:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_top h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_top ul {padding:0;list-style:none;word-break:break-all}
|
||||
|
||||
#bo_v_bot {zoom:1}
|
||||
#bo_v_bot:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_bot h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_bot ul {padding:0;list-style:none}
|
||||
|
||||
.bo_v_com {margin:20px 0;float:right}
|
||||
.bo_v_com > li {position:relative;float:left;margin-left:5px}
|
||||
|
||||
.bo_v_nb {margin:20px 0;position:relative;clear:both;text-align:left}
|
||||
.bo_v_nb:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_v_nb li {border-top:1px solid #f1f1f1;padding:13px}
|
||||
.bo_v_nb li:last-child {border-bottom:1px solid #f1f1f1}
|
||||
.bo_v_nb li:hover {background:#f6f6f6}
|
||||
.bo_v_nb li i {font-size:13px;color:#b3b3b3}
|
||||
.bo_v_nb li .nb_tit {display:inline-block;padding-right:20px;color:#b3b3b3}
|
||||
.bo_v_nb li .nb_date {float:right;color:#b3b3b3}
|
||||
|
||||
#bo_v_atc {min-height:200px;height:auto !important;height:200px}
|
||||
#bo_v_atc_title {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
|
||||
#bo_v_img {width:100%;overflow:hidden;zoom:1}
|
||||
#bo_v_img:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_img a.view_image {display:block}
|
||||
#bo_v_img img {margin-bottom:20px;max-width:100%;height:auto}
|
||||
|
||||
#bo_v_con {margin:10px 0 30px;width:100%;line-height:1.7em;min-height:200px;word-break:break-all;overflow:hidden; padding-top:50px;}
|
||||
#bo_v_con a {color:#000;text-decoration:underline}
|
||||
#bo_v_con img {max-width:100%;height:auto}
|
||||
|
||||
#bo_v_act {margin-bottom:30px;text-align:center}
|
||||
#bo_v_act .bo_v_act_gng {position:relative}
|
||||
#bo_v_act a {margin-right:5px;vertical-align:middle;color:#4a5158}
|
||||
#bo_v_act a:hover {background-color:#fff;color:#ff484f;border-color:#ff484f}
|
||||
#bo_v_act i {font-size:1.4em;margin-right:5px}
|
||||
#bo_v_act_good, #bo_v_act_nogood {display:none;position:absolute;top:30px;left:0;z-index:9999;padding:10px 0;width:165px;background:#ff3061;color:#fff;text-align:center}
|
||||
#bo_v_act .bo_v_good {display:inline-block;border:1px solid #dedede;width:70px;line-height:46px;border-radius:30px}
|
||||
#bo_v_act .bo_v_nogood {display:inline-block;border:1px solid #dedede;width:70px;line-height:46px;border-radius:30px}
|
||||
|
||||
#bo_v_sns {padding:0;list-style:none;zoom:1; display:inline-block; text-align:center;}
|
||||
#bo_v_sns:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_sns li {display:inline-block; width:135px;margin-right:5px;text-align:left}
|
||||
#bo_v_sns li a {height:35px;line-height:35px;text-align:center;border-radius:5px;color:#fff;font-size:0.95em}
|
||||
#bo_v_sns li img {vertical-align:middle;margin-right:5px}
|
||||
#bo_v_sns li .sns_f {display:block;background:#3b5997}
|
||||
#bo_v_sns li .sns_t {display:block;background:#09aeee}
|
||||
#bo_v_sns li .sns_g {display:block;background:#ea4026}
|
||||
#bo_v_sns li .sns_k {display:block;background:#fbe300}
|
||||
|
||||
#bo_v_share {position:relative;padding:20px 0; text-align:center;}
|
||||
#bo_v_share:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_share .btn {padding:0 10px;color:#555;font-weight:normal;font-size:1em;width:80px;line-height:35px;height:35px;border-color:#d5d5d5;border-radius:5px; margin-top:-3px;}
|
||||
#bo_v_share .btn:hover {background:#fff}
|
||||
#bo_v_share .btn i {margin-right:5px;color:#4b5259;vertical-align:middle}
|
||||
|
||||
/* 게시판 댓글 */
|
||||
.cmt_btn {width:100%;text-align:left;border:0;border-bottom:1px solid #f0f0f0;background:#fff;font-weight:bold;margin:30px 0 0px;padding:0 0 15px}
|
||||
.cmt_btn span.total {position:relative;display:inline-block;margin-right:5px;font-size:1em;color:#3a8afd}
|
||||
.cmt_btn span.cmt_more {float:right;display:inline-block;width:15px;height:10px;background:url(./img/btn_cmt.png) no-repeat right 2px;margin-top:5px}
|
||||
.cmt_btn_op span.cmt_more {background-position:right -8px}
|
||||
.cmt_btn b {font-size:1.2em;color:#000}
|
||||
.cmt_btn span.total:after {position:absolute;bottom:-17px;left:0;display:inline-block;background:#000000;content:"";width:100%;height:2px}
|
||||
#bo_vc {}
|
||||
#bo_vc h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc article {margin:20px 0;position:relative;border-bottom:1px solid #f0f0f0}
|
||||
#bo_vc article:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc article .profile_img img {border-radius:50%}
|
||||
#bo_vc article .pf_img {float:left;margin-right:10px}
|
||||
#bo_vc article .pf_img img {border-radius:50%;width:50px;height:50px}
|
||||
#bo_vc article .cm_wrap {float:left;max-width:100%;width:90%;}
|
||||
#bo_vc header {position:relative;width:100%}
|
||||
#bo_vc header:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc header .profile_img {display:none}
|
||||
#bo_vc header .icon_reply {position:absolute;top:15px;left:-20px}
|
||||
#bo_vc .member, #bo_vc .guest, #bo_vc .sv_member, #bo_vc .sv_guest {font-weight:bold}
|
||||
.bo_vc_hdinfo {color:#777; padding-left:15px;}
|
||||
#bo_vc h1 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc .cmt_contents {line-height:1.8em;padding:0 0 20px}
|
||||
#bo_vc p a {text-decoration:underline}
|
||||
#bo_vc p a.s_cmt {text-decoration:underline;color:#ed6479}
|
||||
#bo_vc_empty {margin:0;padding:80px 0 !important;color:#777;text-align:center}
|
||||
#bo_vc #bo_vc_winfo {float:left}
|
||||
#bo_vc .bo_vl_opt {position:absolute;top:0;right:0}
|
||||
|
||||
.bo_vc_act {display:none;position:absolute;right:0;top:40px;width:70px;text-align:left;border:1px solid #b8bfc4;margin:0;list-style:none;background:#fff;zoom:1;z-index:9999}
|
||||
.bo_vc_act:before {content:"";position:absolute;top:-8px;right:5px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent}
|
||||
.bo_vc_act:after {content:"";position:absolute;top:-6px;right:5px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
.bo_vc_act li {border-bottom:1px solid #f0f0f0; width:100%;}
|
||||
.bo_vc_act li:last-child {border-bottom:0}
|
||||
.bo_vc_act li a {display:inline-block; width:100%; padding:10px 10px; color:#6b757c; text-align:left;}
|
||||
.bo_vc_act li a i {display:block; float:right;line-height:20px;}
|
||||
.bo_vc_act li a:hover {color:#3a8afd}
|
||||
|
||||
.bo_vc_w {position:relative;margin:10px 0;display:block}
|
||||
.bo_vc_w:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_vc_w h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
.bo_vc_w #char_cnt {display:block;margin:0 0 5px}
|
||||
.bo_vc_w textarea {border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;width:100%;height:120px;
|
||||
/*-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||
-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||
box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1)*/}
|
||||
#wr_secret {}
|
||||
.bo_vc_w_info {margin:10px 0;float:left}
|
||||
.bo_vc_w_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_vc_w_info .frm_input {float:left;margin-right:5px}
|
||||
.bo_vc_w_info #captcha {padding-top:10px;display:block;clear:both}
|
||||
.bo_vc_w .btn_confirm {clear:both;margin-top:10px}
|
||||
.bo_vc_w .btn_confirm label {display:inline-block;margin-right:10px;border-radius:3px;font-size:1.5em;text-align:center}
|
||||
.bo_vc_w .btn_submit {height:45px;padding:0 20px;border-radius:3px;font-weight:bold;font-size:1.083em}
|
||||
.bo_vc_w .btn_confirm .secret_cm label {font-size:1em !important}
|
||||
.bo_vc_w_wr:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.secret_cm {display:inline-block;float:left; position:absolute; left:0;}
|
||||
|
||||
#bo_vc_send_sns {display:inline-block;float:left}
|
||||
#bo_vc_sns {display:inline-block;margin:0;padding:0;list-style:none;zoom:1}
|
||||
#bo_vc_sns:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc_sns li {float:left;margin:0 5px 0 0}
|
||||
#bo_vc_sns .sns_li_f {border-radius:3px;background:#3a589b;height:40px;line-height:40px;padding:0 0 0 10px}
|
||||
#bo_vc_sns .sns_li_t {border-radius:3px;background:#00aced;height:40px;line-height:40px;padding:0 0 0 10px}
|
||||
#bo_vc_sns .sns_li_off {background:#bbb}
|
||||
#bo_vc_sns a {display:inline-block;padding:0 15px 0 5px}
|
||||
#bo_vc_sns input {margin:0 5px 0 0}
|
||||
|
||||
/*글쓰기*/
|
||||
#bo_w .bo_v_option li {display:inline-block;float:left;text-align:left;margin:0 5px 0 0; margin-right:15px;}
|
||||
#bo_w .bo_v_option li label {vertical-align:baseline}
|
||||
#bo_w .bo_v_option .chk_box input[type="checkbox"] + label span {margin-left:-10px; margin-top:-6px; margin-right:5px;}
|
||||
#bo_w .write_div {margin:10px 0;position:relative}
|
||||
#bo_w .write_div:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_w .bo_w_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_w .bo_w_info .frm_input {float:left;margin-bottom:1%}
|
||||
#bo_w #wr_password, #bo_w #wr_homepage {margin-left:1%}
|
||||
#bo_w .wr_content.smarteditor2 iframe {background:#fff}
|
||||
#bo_w .bo_w_tit {position:relative}
|
||||
#bo_w .bo_w_tit .frm_input {padding-right:120px}
|
||||
#bo_w .bo_w_tit #btn_autosave {position:absolute;top:5px;right:5px;line-height:30px;height:30px}
|
||||
#bo_w .bo_w_link label {position:absolute;top:1px;left:1px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;font-size:1.2em;text-align:center;color:#b2b2b2}
|
||||
#bo_w .bo_w_link .frm_input {padding-left:50px}
|
||||
#bo_w .bo_w_flie .lb_icon {position:absolute;top:0px;left:0px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;font-size:1.2em;text-align:center;color:#b2b2b2}
|
||||
#bo_w .bo_w_flie .frm_file {padding-left:50px;margin-top:3px}
|
||||
#bo_w .bo_w_flie .file_wr {position:relative;border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;height:40px;margin:0}
|
||||
#bo_w .bo_w_flie .frm_input {margin:10px 0 0}
|
||||
#bo_w .bo_w_flie .file_del {position:absolute;top:10px;right:10px;font-size:0.92em;color:#7d7d7d}
|
||||
#bo_w .bo_w_select select {border:1px solid #dddddd;width:100%;height:40px;border-radius:3px}
|
||||
|
||||
.secret_cm.chk_box input[type="checkbox"] + label span {margin-left:-10px; margin-top:-6px; margin-right:5px;}
|
||||
</style>
|
||||
@@ -0,0 +1,452 @@
|
||||
@charset "utf-8";
|
||||
|
||||
/* ### 기본 스타일 커스터마이징 시작 ### */
|
||||
|
||||
/* 게시판 버튼 */
|
||||
/* 목록 버튼 */
|
||||
#bo_gall a.btn_b01 {}
|
||||
#bo_gall a.btn_b01:focus, #bo_gall a.btn_b01:hover {}
|
||||
#bo_gall a.btn_b02 {}
|
||||
#bo_gall a.btn_b02:focus, #bo_gall a.btn_b02:hover {}
|
||||
#bo_gall a.btn_admin {} /* 관리자 전용 버튼 */
|
||||
#bo_gall a.btn_admin:focus, #bo_gall .btn_admin:hover {}
|
||||
|
||||
/* 읽기 버튼 */
|
||||
#bo_v a.btn_b01 {}
|
||||
#bo_v a.btn_b01:focus, #bo_v a.btn_b01:hover {}
|
||||
#bo_v a.btn_b02 {}
|
||||
#bo_v a.btn_b02:focus, #bo_v a.btn_b02:hover {}
|
||||
#bo_v a.btn_admin {} /* 관리자 전용 버튼 */
|
||||
#bo_v a.btn_admin:focus, #bo_v a.btn_admin:hover {}
|
||||
|
||||
/* 쓰기 버튼 */
|
||||
#bo_w .btn_confirm {} /* 서식단계 진행 */
|
||||
#bo_w .btn_submit {padding:0 20px;font-size:1.167em}
|
||||
#bo_w button.btn_submit {}
|
||||
#bo_w fieldset .btn_submit {}
|
||||
#bo_w .btn_cancel {font-size:1.167em;border-radius:3px}
|
||||
#bo_w button.btn_cancel {}
|
||||
#bo_w .btn_cancel:focus, #bo_w .btn_cancel:hover {}
|
||||
#bo_w a.btn_frmline, #bo_w button.btn_frmline {} /* 우편번호검색버튼 등 */
|
||||
#bo_w button.btn_frmline {}
|
||||
|
||||
/* 기본 테이블 */
|
||||
/* 읽기 내 테이블 */
|
||||
#bo_v .tbl_head01 {}
|
||||
#bo_v .tbl_head01 caption {}
|
||||
#bo_v .tbl_head01 thead th {}
|
||||
#bo_v .tbl_head01 thead a {}
|
||||
#bo_v .tbl_head01 thead th input {} /* middle 로 하면 게시판 읽기에서 목록 사용시 체크박스 라인 깨짐 */
|
||||
#bo_v .tbl_head01 tfoot th {}
|
||||
#bo_v .tbl_head01 tfoot td {}
|
||||
#bo_v .tbl_head01 tbody th {}
|
||||
#bo_v .tbl_head01 td {}
|
||||
#bo_v .tbl_head01 a {}
|
||||
#bo_v td.empty_table {}
|
||||
|
||||
/* 쓰기 테이블 */
|
||||
#bo_w table {}
|
||||
#bo_w caption {}
|
||||
#bo_w .frm_info {}
|
||||
#bo_w .frm_address {}
|
||||
#bo_w .frm_file {}
|
||||
|
||||
#bo_w .tbl_frm01 {}
|
||||
#bo_w .tbl_frm01 th {}
|
||||
#bo_w .tbl_frm01 td {}
|
||||
#bo_w .tbl_frm01 textarea, #bo_w tbl_frm01 .frm_input {}
|
||||
#bo_w .tbl_frm01 textarea {}
|
||||
#bo_w .tbl_frm01 a {}
|
||||
|
||||
/* 필수입력 */
|
||||
#bo_w .required, #bo_w textarea.required {}
|
||||
|
||||
#bo_w .cke_sc {}
|
||||
#bo_w button.btn_cke_sc {}
|
||||
#bo_w .cke_sc_def {}
|
||||
#bo_w .cke_sc_def dl {}
|
||||
#bo_w .cke_sc_def dl:after {}
|
||||
#bo_w .cke_sc_def dt, #bo_w .cke_sc_def dd {}
|
||||
#bo_w .cke_sc_def dt {}
|
||||
#bo_w .cke_sc_def dd {}
|
||||
|
||||
/* ### 기본 스타일 커스터마이징 끝 ### */
|
||||
|
||||
/* 게시판 목록 */
|
||||
#bo_cate {padding:0px;margin:10px 0; margin-bottom:20px; border-bottom:1px solid #ddd}
|
||||
#bo_cate h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_cate ul {zoom:1}
|
||||
#bo_cate ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_cate li {display:inline-block;padding:0px; min-width:150px; padding-right:2px; text-align:center;}
|
||||
#bo_cate a {display:block;line-height:40px;padding:0 20px;border-radius:0px;border:1px solid #ddd; background:#fff; border-bottom:0px; text-align:center;}
|
||||
#bo_cate a:focus, #bo_cate a:hover, #bo_cate a:active {text-decoration:none;background:#d2d6dc; border:1px solid #d2d6dc; border-bottom:0px;}
|
||||
#bo_cate #bo_cate_on {z-index:2;background:#333;color:#fff;font-weight:500; border:1px solid #333; border-bottom:0px; /*border-bottom-color:#1977b5;
|
||||
-webkit-box-shadow: inset 0 2px 5px rgb(33, 135, 202);
|
||||
-moz-box-shadow: inset 0 2px 5px rgb(33, 135, 202);
|
||||
box-shadow:inset 0 2px 5px rgb(33, 135, 202);*/}
|
||||
.td_subject img {margin-left:3px}
|
||||
|
||||
.selec_chk {position:absolute;top:0;left:0;width:0;height:0;opacity:0;outline:0;z-index:-1;overflow:hidden}
|
||||
.chk_box {position:relative}
|
||||
.chk_box input[type="checkbox"] + label {position:relative;padding-left:20px;color:#676e70;vertical-align:baseline; }
|
||||
.chk_box input[type="checkbox"] + label:hover{color:#2172f8}
|
||||
.chk_box input[type="checkbox"] + label span {position:absolute;top:10px;left:10px;width:15px;height:15px;display:block;background:#fff;border:1px solid #d0d4df;border-radius:3px; z-index:10;}
|
||||
.chk_box input[type="checkbox"]:checked + label {color:#000}
|
||||
.chk_box input[type="checkbox"]:checked + label span {background:url(./img/chk.png) no-repeat 50% 50% #3a8afd;border-color:#1471f6;border-radius:3px; }
|
||||
.all_chk.chk_box input[type="checkbox"] + label span {top:0;left:0; margin-left:0px; margin-top:3px; margin-right:5px;}
|
||||
|
||||
|
||||
/* 갤러리 목록 */
|
||||
#bo_gall h2 {margin:0;padding:0;width:1px;height:1px;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_gall #gall_ul {margin:10px -10px 0;padding:0;list-style:none;zoom:1}
|
||||
#bo_gall #gall_ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_gall .gall_li {}
|
||||
#bo_gall .gall_li .gall_chk {position:absolute;top:0;left:0;padding:5px}
|
||||
#bo_gall .gall_box {position:relative;margin:0 0 50px 0;border-radius:0 0 2px 2px}
|
||||
|
||||
.gall_row .col-gn-0,.gall_row .col-gn-1,.gall_row .col-gn-2,.gall_row .col-gn-3,.gall_row .col-gn-4,.gall_row .col-gn-5,.gall_row .col-gn-6,.gall_row .col-gn-7,.gall_row .col-gn-8,.gall_row .col-gn-9,.gall_row .col-gn-10 {position:relative;min-height:1px;padding-left:10px;*padding-left:0;padding-right:10px;*padding-right:0;float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-left:0}
|
||||
.gall_row .col-gn-0,.gall_row .col-gn-1 {width:100%}
|
||||
.gall_row .col-gn-2 {width:50%}
|
||||
.gall_row .col-gn-3 {width:33.33333333%}
|
||||
.gall_row .col-gn-4 {width:25%}
|
||||
.gall_row .col-gn-5 {width:20%}
|
||||
.gall_row .col-gn-6 {width:16.66666667%}
|
||||
.gall_row .col-gn-7 {width:14.28571428%}
|
||||
.gall_row .col-gn-8 {width:12.5%}
|
||||
.gall_row .col-gn-9 {width:11.11111111%}
|
||||
.gall_row .col-gn-10 {width:10%}
|
||||
|
||||
.gall_row .box_clear {clear:both}
|
||||
|
||||
#bo_gall .gall_now .gall_text_href a {color:#ff3061}
|
||||
|
||||
#bo_gall .gall_href a:link, #bo_gall .gall_href a:focus, #bo_gall .gall_href a:hover {text-decoration:none}
|
||||
#bo_gall .gall_img {border-bottom:1px solid #eee;text-align:center; /*max-height:200px;*/overflow:hidden}
|
||||
#bo_gall .gall_img a,#bo_gall .gall_img .no_image,#bo_gall .gall_img .is_notice {display:block}
|
||||
#bo_gall .gall_img img{max-width:100%;height:auto !important; transition: transform 1s; -webkit-transition: -webkit-transform 1s;}
|
||||
#bo_gall .gall_img img:hover { transform: scale(1.2, 1.2); -webkit-transform: scale(1.2, 1.2); }
|
||||
#bo_gall .gall_img video{max-width:100%;height:auto !important;}
|
||||
#bo_gall .gall_img video:hover {}
|
||||
|
||||
#bo_gall .gall_img span {display:inline-block;background:#eaeaea;text-align:center;line-height:200px;text-transform:uppercase;font-weight:bold;font-size:1.25em;color:#777}
|
||||
|
||||
#bo_gall .gall_text_href {margin:0px 0; padding:10px; background-color:#f6f6f6}
|
||||
#bo_gall .gall_text_href a {font-weight:bold}
|
||||
#bo_gall .gall_text_href img {margin:0 0 0 4px}
|
||||
#bo_gall .bo_tit {display:block; /*line-height:30px;*/ font-weight:700;color:#000;font-size:1.1em}
|
||||
#bo_gall .bo_tit .cnt_cmt {background:#fff;color:#333;font-size:0.7em;height:15px;line-height:15px;padding:0px 5px; padding-bottom:0px; border-radius:3px;vertical-align:middle; border:1px solid #aaa; margin-left:3px; }
|
||||
#bo_gall .bo_cnt {color:#acacac;line-height:18px; display:none;}
|
||||
#bo_gall .profile_img img {border-radius:50%}
|
||||
#bo_gall .bo_tit .fa-heart {display:inline-block;line-height:14px;width:16px;font-size:0.833em;color:#C42828;background:none;text-align:center;border-radius:2px;font-size:12px;border:0px solid #cbe3e8;vertical-align:middle; margin-top:3px;}
|
||||
#bo_gall .bo_tit .fa-lock {display:inline-block;line-height:14px;width:16px;font-size:0.833em;color:#666;background:none;text-align:center;border-radius:2px;font-size:12px;border:0px solid #cbe3e8;vertical-align:middle; margin-top:3px;}
|
||||
#bo_gall .bo_tit .new_icon {display:inline-block;width:28px; height:15px; line-height:13px;font-size:0.7em; letter-spacing:0.05em; color:#fff;background:#3071CA;text-align:center;border-radius:2px;margin-left:2px;font-weight:normal;vertical-align:middle; margin-top:0px; margin-right:1px;}
|
||||
#bo_gall .bo_tit .hot_icon {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#1EA362;background:#ffb9b9;text-align:center;border-radius:2px;vertical-align:middle}
|
||||
#bo_gall .bo_tit .fa-download {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#F19717;background:none;text-align:center;border-radius:2px;margin-left:5px;vertical-align:middle; margin-top:3px;}
|
||||
#bo_gall .bo_tit .fa-link {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#BB51FD;background:none;text-align:center; border-radius:2px;margin-left:5px;vertical-align:middle; margin-top:3px;}
|
||||
|
||||
|
||||
|
||||
|
||||
#bo_gall .gall_info {line-height:1.5em;line-height:20px; padding:5px 10px; padding-bottom:10px; background:#f6f6f6; font-size:0.9em;}
|
||||
#bo_gall .gall_info strong {display:inline-block;margin:0}
|
||||
#bo_gall .gall_info i {font-size:12px}
|
||||
#bo_gall .gall_info .gall_date,
|
||||
#bo_gall .gall_info .gall_view {display:inline-block;margin-right:10px;color:#777}
|
||||
#bo_gall .gall_name{padding:5px 10px; background:#f6f6f6;}
|
||||
|
||||
#bo_gall .gall_option {position:absolute;bottom:10px;right:10px; font-size:0.9em;}
|
||||
#bo_gall .gall_option strong {background:#f6f6f6;padding:5px 10px;border-radius:30px;
|
||||
/*-webkit-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
-moz-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2)*/}
|
||||
|
||||
/* 게시판 목록 공통 */
|
||||
#bo_btn_top {margin:10px 0}
|
||||
#bo_btn_top:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_fx {margin-bottom:5px;float:right;zoom:1}
|
||||
.bo_fx:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_fx ul {margin:0;padding:0;list-style:none}
|
||||
#bo_list_total {float:left;line-height:34px;font-size:0.92em;color:#4e546f}
|
||||
|
||||
.btn_bo_user {float:right;margin:0;padding:0;list-style:none}
|
||||
.btn_bo_user li {float:left;width:auto;text-align:center;margin-left:5px;background:#fff}
|
||||
.btn_bo_user > li {position:relative}
|
||||
.btn_bo_adm {float:left}
|
||||
.btn_bo_adm li {float:left;margin-right:5px}
|
||||
.btn_bo_adm input {padding:0 8px;border:0;background:#d4d4d4;color:#666;text-decoration:none;vertical-align:middle}
|
||||
.bo_notice td {background:#fff6fa !important;border-bottom:1px solid #f8e6ee}
|
||||
.bo_notice td a {font-weight:bold}
|
||||
.bo_notice .notice_icon {display:inline-block;line-height:25px;border-radius:5px;font-weight:bold;color:#f9267f}
|
||||
|
||||
.more_opt {display:none;position:absolute;top:45px;right:0;background:#fff;border:1px solid #b8bfc4;z-index:999}
|
||||
.more_opt:before {content:"";position:absolute;top:-8px;right:13px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent}
|
||||
.more_opt:after {content:"";position:absolute;top:-6px;right:13px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
.more_opt li {border-bottom:1px solid #f1f1f1;padding:10px;float:inherit;width:120px;margin:0;color:#6b757c;text-align:left}
|
||||
.more_opt li.wid_s {width:70px;}
|
||||
.more_opt li:last-child {border-bottom:0}
|
||||
.more_opt li button, .more_opt li a {width:100%;border:0;background:#fff;color:#6b757c; text-align:left;}
|
||||
.more_opt li:hover a,
|
||||
.more_opt li:hover button {color:#000}
|
||||
.more_opt li i {float:right;line-height:20px}
|
||||
|
||||
.td_num strong {color:#000}
|
||||
/*.bo_cate_link {font-size:0.9em; float:left;display:block;margin-right:10px;background:#666;color:#fff;font-weight:normal !important;height:20px;line-height:10px;padding:5px 8px;border-radius:5px;font-size:0.95em} *//* 글제목줄 분류스타일 */
|
||||
.bo_cate_link{display:block; background:none; color:#333; border-bottom:1px solid #ddd; padding-bottom:10px; margin-bottom:5px; overflow:hidden; width:100%; text-align:center;}
|
||||
.bo_cate_link:hover {text-decoration:none}
|
||||
.bo_current {color:#e8180c}
|
||||
#bo_list .profile_img {display:inline-block;margin-right:5px}
|
||||
#bo_list .profile_img img {border-radius:50%}
|
||||
#bo_list .cnt_cmt {background:#fff;color:#333;font-size:11px;height:16px;line-height:16px;padding:3px 5px; padding-bottom:1px; border-radius:3px;vertical-align:middle; border:1px solid #666; margin-left:3px; }
|
||||
#bo_gall li.empty_list {padding:85px 0;text-align:center}
|
||||
|
||||
.bo_sch_wrap {display:none;width:100%;height:100%;position:fixed;top:0;left:0;z-index:999999999;}
|
||||
.bo_sch {position:absolute;top:50%;left:50%;background:#fff;text-align:left;width:500px;max-height:300px;margin-left:-250px;margin-top:-150px;overflow-y:auto;border-radius:5px;-webkit-box-shadow:1px 1px 18px rgba(0,0,0,0.2);-moz-box-shadow:1px 1px 18px rgba(0,0,0,0.2);box-shadow:1px 1px 18px rgba(0,0,0,0.2);border:1px solid #dde7e9;background:#fff;border-radius:3px}
|
||||
.bo_sch:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_sch h3 {padding:15px;border-bottom:1px solid #e8e8e8}
|
||||
.bo_sch legend {background:red}
|
||||
.bo_sch form {padding:15px;display:block}
|
||||
.bo_sch select {border:0;width:100%;height:40px;border:1px solid #dddddd;border-radius:2px; /*-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075)*/}
|
||||
.bo_sch .sch_bar {display:inline-block;width:100%;clear:both;margin-top:15px;border:1px solid #dddddd;border-radius:2px; /*-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075)*/}
|
||||
.bo_sch .sch_input {width:80%;height:38px;border:0;padding:0;background-color:transparent;float:left}
|
||||
.bo_sch .sch_btn {height:38px;float:right;color:#656565;background:none;border:0;width:40px;font-size:15px}
|
||||
.bo_sch .bo_sch_cls {position:absolute;right:0;top:0;color:#b5b8bb;border:0;padding:12px 15px;font-size:16px;background:#fff}
|
||||
.bo_sch_bg {background:#000;background:rgba(0,0,0,0.5);width:100%;height:100%;}
|
||||
|
||||
/* 게시판 쓰기 */
|
||||
#char_count_desc {display:block;margin:0 0 5px;padding:0}
|
||||
#char_count_wrap {margin:5px 0 0;text-align:right}
|
||||
#char_count {font-weight:bold}
|
||||
|
||||
#autosave_wrapper {position:relative}
|
||||
#autosave_pop {display:none;z-index:10;position:absolute !important;top:34px;right:0;width:350px;height:auto !important;height:180px;max-height:180px;border:1px solid #565656;background:#fff;
|
||||
-webkit-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
-moz-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2)}
|
||||
#autosave_pop:before {content:"";position:absolute;top:-8px;right:45px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #000 transparent}
|
||||
#autosave_pop:after {content:"";position:absolute;top:-7px;right:45px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
html.no-overflowscrolling #autosave_pop {height:auto;max-height:10000px !important} /* overflow 미지원 기기 대응 */
|
||||
#autosave_pop strong {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#autosave_pop div {text-align:center;margin:0 !important}
|
||||
#autosave_pop button {margin:0;padding:0;border:0}
|
||||
#autosave_pop ul {padding:15px;border-top:1px solid #e9e9e9;list-style:none;overflow-y:scroll;height:130px;border-bottom:1px solid #e8e8e8}
|
||||
#autosave_pop li {padding:8px 5px;border-bottom:1px solid #fff;background:#eee;zoom:1}
|
||||
#autosave_pop li:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#autosave_pop a {display:block;float:left}
|
||||
#autosave_pop span {display:block;float:right;font-size:0.92em;font-style:italic;color:#999}
|
||||
.autosave_close {cursor:pointer;width:100%;height:30px;background:none;color:#888;font-weight:bold;font-size:0.92em}
|
||||
.autosave_close:hover {background:#f3f3f3;color:#3597d9}
|
||||
.autosave_content {display:none}
|
||||
.autosave_del {background:url(./img/close_btn.png) no-repeat 50% 50%;text-indent:-999px;overflow:hidden;height:20px;width:20px}
|
||||
|
||||
/* 게시판 읽기 */
|
||||
#bo_v {margin-bottom:20px;background:#fff;box-sizing:border-box}
|
||||
|
||||
#bo_v_table {position:absolute;top:0;right:16px;margin:0;padding:0 5px;height:25px;background:#ff3061;color:#fff;font-weight:bold;line-height:2.2em}
|
||||
|
||||
#bo_v_title {border-top:1px solid #000; border-bottom:1px solid #ddd; padding:15px 15px; padding-left:10px; background-color:#F7F7F7;}
|
||||
#bo_v_title .bo_v_cate {display:inline-block;line-height:20px;background:#666;color:#fff;padding:0 10px;border-radius:3px; font-size:0.9em;}
|
||||
#bo_v_title .bo_v_tit {display:inline-block;font-size:1.5em;margin:5px 0 0;word-break:break-all}
|
||||
|
||||
#bo_v_info {margin:0;border-bottom:1px solid #f1f1f1;color:#666}
|
||||
#bo_v_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_info h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
|
||||
#bo_v_info .profile_info {margin:20px 0 10px;display:inline-block;float:left}
|
||||
#bo_v_info .profile_info .pf_img {float:left;margin-right:10px}
|
||||
#bo_v_info .profile_info .pf_img img {border-radius:50%;width:50px;height:50px}
|
||||
#bo_v_info .profile_info .profile_info_ct {float:left;padding:5px 0;line-height:18px}
|
||||
|
||||
#bo_v_info strong {display:inline-block;margin:0 10px 0 0;font-weight:normal}
|
||||
#bo_v_info .sv_member,
|
||||
#bo_v_info .sv_guest,
|
||||
#bo_v_info .member,
|
||||
#bo_v_info .guest {font-weight:bold}
|
||||
#bo_v_info .profile_img {display:none}
|
||||
#bo_v_info .sv_member {color:#000}
|
||||
#bo_v_info .if_date {margin:0;color:#888}
|
||||
|
||||
#bo_v_file h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_file ul {margin:0;list-style:none}
|
||||
#bo_v_file li {padding:15px;position:relative;margin:10px 0;border:1px solid #dfdfdf;border-radius:5px;
|
||||
-webkit-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
-moz-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%)}
|
||||
#bo_v_file li i {float:left;color:#b2b2b2;font-size:2.35em;margin-right:20px}
|
||||
#bo_v_file a {float:left;display:block;text-decoration:none;word-wrap:break-word;color:#000}
|
||||
#bo_v_file a:focus, #bo_v_file li:hover a, #bo_v_file a:active {text-decoration:underline;color:#3a8afd}
|
||||
#bo_v_file img {float:left;margin:0 10px 0 0}
|
||||
#bo_v_file .bo_v_file_cnt {color:#b2b2b2;font-size:0.92em}
|
||||
#bo_v_file li:hover {border-color:#bed4f4;color:#bed4f4}
|
||||
#bo_v_file li:hover i {color:#3a8afd}
|
||||
#bo_v_file li:hover .bo_v_file_cnt {color:#99c2fc}
|
||||
|
||||
|
||||
#bo_v_link h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_file ul {margin:0;list-style:none}
|
||||
#bo_v_link li {padding:15px;position:relative;margin:10px 0;border:1px solid #dfdfdf;border-radius:5px;
|
||||
-webkit-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
-moz-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%)}
|
||||
#bo_v_link li i {float:left;color:#b2b2b2;font-size:2.35em;margin-right:20px}
|
||||
#bo_v_link a {float:left;display:block;text-decoration:none;word-wrap:break-word;color:#000}
|
||||
#bo_v_link a:focus, #bo_v_link li:hover a, #bo_v_link a:active {text-decoration:underline;color:#3a8afd}
|
||||
#bo_v_link .bo_v_link_cnt {color:#b2b2b2;font-size:0.92em}
|
||||
#bo_v_link li:hover {border-color:#bed4f4;color:#bed4f4}
|
||||
#bo_v_link li:hover i {color:#3a8afd}
|
||||
#bo_v_link li:hover .bo_v_link_cnt {color:#99c2fc}
|
||||
|
||||
|
||||
#bo_v_top {zoom:1}
|
||||
#bo_v_top:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_top h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_top ul {padding:0;list-style:none;word-break:break-all}
|
||||
|
||||
#bo_v_bot {zoom:1}
|
||||
#bo_v_bot:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_bot h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_bot ul {padding:0;list-style:none}
|
||||
|
||||
.bo_v_com {margin:20px 0;float:right}
|
||||
.bo_v_com > li {position:relative;float:left;margin-left:5px}
|
||||
|
||||
.bo_v_nb {margin:20px 0;position:relative;clear:both;text-align:left}
|
||||
.bo_v_nb:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_v_nb li {border-top:1px solid #f1f1f1;padding:13px}
|
||||
.bo_v_nb li:last-child {border-bottom:1px solid #f1f1f1}
|
||||
.bo_v_nb li:hover {background:#f6f6f6}
|
||||
.bo_v_nb li i {font-size:13px;color:#b3b3b3}
|
||||
.bo_v_nb li .nb_tit {display:inline-block;padding-right:20px;color:#b3b3b3}
|
||||
.bo_v_nb li .nb_date {float:right;color:#b3b3b3}
|
||||
|
||||
#bo_v_atc {min-height:200px;height:auto !important;height:200px}
|
||||
#bo_v_atc_title {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
|
||||
#bo_v_img {width:100%;overflow:hidden;zoom:1}
|
||||
#bo_v_img:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_img a.view_image {display:block}
|
||||
#bo_v_img img {margin-bottom:20px;max-width:100%;height:auto}
|
||||
|
||||
#bo_v_con {margin:10px 0 30px;width:100%;line-height:1.7em;min-height:200px;word-break:break-all;overflow:hidden; padding-top:50px;}
|
||||
#bo_v_con a {color:#000;text-decoration:underline}
|
||||
#bo_v_con img {max-width:100%;height:auto}
|
||||
|
||||
#bo_v_act {margin-bottom:30px;text-align:center}
|
||||
#bo_v_act .bo_v_act_gng {position:relative}
|
||||
#bo_v_act a {margin-right:5px;vertical-align:middle;color:#4a5158}
|
||||
#bo_v_act a:hover {background-color:#fff;color:#ff484f;border-color:#ff484f}
|
||||
#bo_v_act i {font-size:1.4em;margin-right:5px}
|
||||
#bo_v_act_good, #bo_v_act_nogood {display:none;position:absolute;top:30px;left:0;z-index:9999;padding:10px 0;width:165px;background:#ff3061;color:#fff;text-align:center}
|
||||
#bo_v_act .bo_v_good {display:inline-block;border:1px solid #dedede;width:70px;line-height:46px;border-radius:30px}
|
||||
#bo_v_act .bo_v_nogood {display:inline-block;border:1px solid #dedede;width:70px;line-height:46px;border-radius:30px}
|
||||
|
||||
#bo_v_sns {padding:0;list-style:none;zoom:1; display:inline-block; text-align:center;}
|
||||
#bo_v_sns:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_sns li {display:inline-block; width:135px;margin-right:5px;text-align:left}
|
||||
#bo_v_sns li a {height:35px;line-height:35px;text-align:center;border-radius:5px;color:#fff;font-size:0.95em}
|
||||
#bo_v_sns li img {vertical-align:middle;margin-right:5px}
|
||||
#bo_v_sns li .sns_f {display:block;background:#3b5997}
|
||||
#bo_v_sns li .sns_t {display:block;background:#09aeee}
|
||||
#bo_v_sns li .sns_g {display:block;background:#ea4026}
|
||||
#bo_v_sns li .sns_k {display:block;background:#fbe300}
|
||||
|
||||
#bo_v_share {position:relative;padding:20px 0; text-align:center;}
|
||||
#bo_v_share:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_share .btn {padding:0 10px;color:#555;font-weight:normal;font-size:1em;width:80px;line-height:35px;height:35px;border-color:#d5d5d5;border-radius:5px; margin-top:-3px;}
|
||||
#bo_v_share .btn:hover {background:#fff}
|
||||
#bo_v_share .btn i {margin-right:5px;color:#4b5259;vertical-align:middle}
|
||||
|
||||
/* 게시판 댓글 */
|
||||
.cmt_btn {width:100%;text-align:left;border:0;border-bottom:1px solid #f0f0f0;background:#fff;font-weight:bold;margin:30px 0 0px;padding:0 0 15px}
|
||||
.cmt_btn span.total {position:relative;display:inline-block;margin-right:5px;font-size:1em;color:#3a8afd}
|
||||
.cmt_btn span.cmt_more {float:right;display:inline-block;width:15px;height:10px;background:url(./img/btn_cmt.png) no-repeat right 2px;margin-top:5px}
|
||||
.cmt_btn_op span.cmt_more {background-position:right -8px}
|
||||
.cmt_btn b {font-size:1.2em;color:#000}
|
||||
.cmt_btn span.total:after {position:absolute;bottom:-17px;left:0;display:inline-block;background:#000000;content:"";width:100%;height:2px}
|
||||
#bo_vc {}
|
||||
#bo_vc h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc article {margin:20px 0;position:relative;border-bottom:1px solid #f0f0f0}
|
||||
#bo_vc article:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc article .profile_img img {border-radius:50%}
|
||||
#bo_vc article .pf_img {float:left;margin-right:10px}
|
||||
#bo_vc article .pf_img img {border-radius:50%;width:50px;height:50px}
|
||||
#bo_vc article .cm_wrap {float:left;max-width:100%;width:90%;}
|
||||
#bo_vc header {position:relative;width:100%}
|
||||
#bo_vc header:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc header .profile_img {display:none}
|
||||
#bo_vc header .icon_reply {position:absolute;top:15px;left:-20px}
|
||||
#bo_vc .member, #bo_vc .guest, #bo_vc .sv_member, #bo_vc .sv_guest {font-weight:bold}
|
||||
.bo_vc_hdinfo {color:#777; padding-left:15px;}
|
||||
#bo_vc h1 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc .cmt_contents {line-height:1.8em;padding:0 0 20px}
|
||||
#bo_vc p a {text-decoration:underline}
|
||||
#bo_vc p a.s_cmt {text-decoration:underline;color:#ed6479}
|
||||
#bo_vc_empty {margin:0;padding:80px 0 !important;color:#777;text-align:center}
|
||||
#bo_vc #bo_vc_winfo {float:left}
|
||||
#bo_vc .bo_vl_opt {position:absolute;top:0;right:0}
|
||||
|
||||
.bo_vc_act {display:none;position:absolute;right:0;top:40px;width:70px;text-align:left;border:1px solid #b8bfc4;margin:0;list-style:none;background:#fff;zoom:1;z-index:9999}
|
||||
.bo_vc_act:before {content:"";position:absolute;top:-8px;right:5px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent}
|
||||
.bo_vc_act:after {content:"";position:absolute;top:-6px;right:5px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
.bo_vc_act li {border-bottom:1px solid #f0f0f0; width:100%;}
|
||||
.bo_vc_act li:last-child {border-bottom:0}
|
||||
.bo_vc_act li a {display:inline-block; width:100%; padding:10px 10px; color:#6b757c; text-align:left;}
|
||||
.bo_vc_act li a i {display:block; float:right;line-height:20px;}
|
||||
.bo_vc_act li a:hover {color:#3a8afd}
|
||||
|
||||
.bo_vc_w {position:relative;margin:10px 0;display:block}
|
||||
.bo_vc_w:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_vc_w h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
.bo_vc_w #char_cnt {display:block;margin:0 0 5px}
|
||||
.bo_vc_w textarea {border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;width:100%;height:120px;
|
||||
/*-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||
-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||
box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1)*/}
|
||||
#wr_secret {}
|
||||
.bo_vc_w_info {margin:10px 0;float:left}
|
||||
.bo_vc_w_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_vc_w_info .frm_input {float:left;margin-right:5px}
|
||||
.bo_vc_w_info #captcha {padding-top:10px;display:block;clear:both}
|
||||
.bo_vc_w .btn_confirm {clear:both;margin-top:10px}
|
||||
.bo_vc_w .btn_confirm label {display:inline-block;margin-right:10px;border-radius:3px;font-size:1.5em;text-align:center}
|
||||
.bo_vc_w .btn_submit {height:45px;padding:0 20px;border-radius:3px;font-weight:bold;font-size:1.083em}
|
||||
.bo_vc_w .btn_confirm .secret_cm label {font-size:1em !important}
|
||||
.bo_vc_w_wr:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.secret_cm {display:inline-block;float:left; position:absolute; left:0;}
|
||||
|
||||
#bo_vc_send_sns {display:inline-block;float:left}
|
||||
#bo_vc_sns {display:inline-block;margin:0;padding:0;list-style:none;zoom:1}
|
||||
#bo_vc_sns:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc_sns li {float:left;margin:0 5px 0 0}
|
||||
#bo_vc_sns .sns_li_f {border-radius:3px;background:#3a589b;height:40px;line-height:40px;padding:0 0 0 10px}
|
||||
#bo_vc_sns .sns_li_t {border-radius:3px;background:#00aced;height:40px;line-height:40px;padding:0 0 0 10px}
|
||||
#bo_vc_sns .sns_li_off {background:#bbb}
|
||||
#bo_vc_sns a {display:inline-block;padding:0 15px 0 5px}
|
||||
#bo_vc_sns input {margin:0 5px 0 0}
|
||||
|
||||
/*글쓰기*/
|
||||
#bo_w .bo_v_option li {display:inline-block;float:left;text-align:left;margin:0 5px 0 0; margin-right:15px;}
|
||||
#bo_w .bo_v_option li label {vertical-align:baseline}
|
||||
#bo_w .bo_v_option .chk_box input[type="checkbox"] + label span {margin-left:-10px; margin-top:-6px; margin-right:5px;}
|
||||
#bo_w .write_div {margin:10px 0;position:relative}
|
||||
#bo_w .write_div:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_w .bo_w_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_w .bo_w_info .frm_input {float:left;margin-bottom:1%}
|
||||
#bo_w #wr_password, #bo_w #wr_homepage {margin-left:1%}
|
||||
#bo_w .wr_content.smarteditor2 iframe {background:#fff}
|
||||
#bo_w .bo_w_tit {position:relative}
|
||||
#bo_w .bo_w_tit .frm_input {padding-right:120px}
|
||||
#bo_w .bo_w_tit #btn_autosave {position:absolute;top:5px;right:5px;line-height:30px;height:30px}
|
||||
#bo_w .bo_w_link label {position:absolute;top:1px;left:1px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;font-size:1.2em;text-align:center;color:#b2b2b2}
|
||||
#bo_w .bo_w_link .frm_input {padding-left:50px}
|
||||
#bo_w .bo_w_flie .lb_icon {position:absolute;top:0px;left:0px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;font-size:1.2em;text-align:center;color:#b2b2b2}
|
||||
#bo_w .bo_w_flie .frm_file {padding-left:50px;margin-top:3px}
|
||||
#bo_w .bo_w_flie .file_wr {position:relative;border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;height:40px;margin:0}
|
||||
#bo_w .bo_w_flie .frm_input {margin:10px 0 0}
|
||||
#bo_w .bo_w_flie .file_del {position:absolute;top:10px;right:10px;font-size:0.92em;color:#7d7d7d}
|
||||
#bo_w .bo_w_select select {border:1px solid #dddddd;width:100%;height:40px;border-radius:3px}
|
||||
|
||||
.secret_cm.chk_box input[type="checkbox"] + label span {margin-left:-10px; margin-top:-6px; margin-right:5px;}
|
||||
@@ -0,0 +1,771 @@
|
||||
<?php
|
||||
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
include_once(G5_LIB_PATH.'/thumbnail.lib.php');
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
<script src="<?php echo G5_JS_URL; ?>/viewimageresize.js"></script>
|
||||
|
||||
<!-- 게시물 읽기 시작 { -->
|
||||
|
||||
<article id="bo_v" style="width:<?php echo $width; ?>">
|
||||
<header>
|
||||
<h2 id="bo_v_title">
|
||||
<?php if ($category_name) { ?>
|
||||
<span class="bo_v_cate"><?php echo $view['ca_name']; // 분류 출력 끝 ?></span>
|
||||
<?php } ?>
|
||||
<span class="bo_v_tit">
|
||||
<?php
|
||||
echo cut_str(get_text($view['wr_subject']), 70); // 글제목 출력
|
||||
?></span>
|
||||
</h2>
|
||||
</header>
|
||||
|
||||
|
||||
<section id="bo_v_info">
|
||||
<h2>페이지 정보</h2>
|
||||
<div class="profile_info">
|
||||
<div class="pf_img"><?php echo get_member_profile_img($view['mb_id']) ?></div>
|
||||
<div class="profile_info_ct">
|
||||
<span class="sound_only">작성자</span> <strong><?php echo $view['name'] ?><?php if ($is_ip_view) { echo " ($ip)"; } ?></strong><br>
|
||||
<span class="sound_only">댓글</span><strong><a href="#bo_vc"> 댓글 <?php echo number_format($view['wr_comment']) ?>건</a></strong>
|
||||
<span class="sound_only">조회</span><strong>Hit <?php echo number_format($view['wr_hit']) ?>회</strong>
|
||||
<strong class="if_date"><span class="sound_only">작성일</span>Date <?php echo date("y-m-d H:i", strtotime($view['wr_datetime'])) ?></strong>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 게시물 상단 버튼 시작 { -->
|
||||
<div id="bo_v_top">
|
||||
|
||||
|
||||
<?php ob_start(); ?>
|
||||
|
||||
<ul class="btn_bo_user bo_v_com">
|
||||
<li><a href="<?php echo $list_href ?>" class="btn_b011 btn" title="목록"><i class="fa fa-list" aria-hidden="true"></i><span class="">목록</span></a></li>
|
||||
<?php if ($reply_href) { ?><li><a href="<?php echo $reply_href ?>" class="btn_b011 btn" title="답변"><i class="fa fa-reply" aria-hidden="true"></i><span class="">답변</span></a></li><?php } ?>
|
||||
<?php if ($write_href) { ?><li><a href="<?php echo $write_href ?>" class="btn_b011 btn" title="글쓰기"><i class="fas fa-pencil-alt"></i><span class="">글쓰기</span></a></li><?php } ?>
|
||||
<?php if($update_href || $delete_href || $copy_href || $move_href || $search_href) { ?>
|
||||
<li>
|
||||
<button type="button" class="btn_more_opt is_view_btn btn_b01 btn"><i class="fa fa-ellipsis-v" aria-hidden="true"></i><span class="sound_only">게시판 리스트 옵션</span></button>
|
||||
<ul class="more_opt is_view_btn">
|
||||
<?php if ($update_href) { ?><li class="wid_s"><a href="<?php echo $update_href ?>">수정<i class="fa fa-pencil-square-o" aria-hidden="true"></i></a></li><?php } ?>
|
||||
<?php if ($delete_href) { ?><li class="wid_s"><a href="<?php echo $delete_href ?>" onclick="del(this.href); return false;">삭제<i class="fas fa-trash-alt"></i></a></li><?php } ?>
|
||||
<?php if ($copy_href) { ?><li class="wid_s"><a href="<?php echo $copy_href ?>" onclick="board_move(this.href); return false;">복사<i class="fa fa-files-o" aria-hidden="true"></i></a></li><?php } ?>
|
||||
<?php if ($move_href) { ?><li class="wid_s"><a href="<?php echo $move_href ?>" onclick="board_move(this.href); return false;">이동<i class="fas fa-arrows-alt-h"></i></a></li><?php } ?>
|
||||
<?php if ($search_href) { ?><li class="wid_s"><a href="<?php echo $search_href ?>">검색<i class="fa fa-search" aria-hidden="true"></i></a></li><?php } ?>
|
||||
<li class="wid_s"><a href="#none" class="more_opt_close1">닫기<i class="fas fa-times"></i></a></li>
|
||||
</ul>
|
||||
</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
<script>
|
||||
|
||||
jQuery(function($){
|
||||
// 게시판 보기 버튼 옵션
|
||||
$(".btn_more_opt.is_view_btn").on("click", function(e) {
|
||||
e.stopPropagation();
|
||||
$(".more_opt.is_view_btn").toggle();
|
||||
});
|
||||
;
|
||||
$(".more_opt_close1").on("click", function(){
|
||||
$('.more_opt.is_view_btn').hide();
|
||||
});
|
||||
|
||||
$(document).on("click", function (e) {
|
||||
if(!$(e.target).closest('.is_view_btn').length) {
|
||||
$(".more_opt.is_view_btn").hide();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<?php
|
||||
$link_buttons = ob_get_contents();
|
||||
// ob_end_flush();
|
||||
ob_end_clean();
|
||||
?>
|
||||
</div>
|
||||
<!-- } 게시물 상단 버튼 끝 -->
|
||||
</section>
|
||||
|
||||
<section id="bo_v_atc">
|
||||
<h2 id="bo_v_atc_title">본문</h2>
|
||||
|
||||
<?php
|
||||
// 파일 출력
|
||||
$v_img_count = count($view['file']);
|
||||
if($v_img_count) {
|
||||
echo "<div id=\"bo_v_img\">\n";
|
||||
|
||||
foreach($view['file'] as $view_file) {
|
||||
echo get_file_thumbnail($view_file);
|
||||
}
|
||||
|
||||
echo "</div>\n";
|
||||
}
|
||||
?>
|
||||
|
||||
<!-- 본문 내용 시작 { -->
|
||||
<div id="bo_v_con"><?php echo get_view_thumbnail($view['content']); ?></div>
|
||||
<?php //echo $view['rich_content']; // {이미지:0} 과 같은 코드를 사용할 경우 ?>
|
||||
<!-- } 본문 내용 끝 -->
|
||||
|
||||
<?php if ($is_signature) { ?><p><?php echo $signature ?></p><?php } ?>
|
||||
|
||||
|
||||
<!-- 추천 비추천 시작 { -->
|
||||
<?php if ( $good_href || $nogood_href) { ?>
|
||||
<div id="bo_v_act">
|
||||
<?php if ($good_href) { ?>
|
||||
<span class="bo_v_act_gng">
|
||||
<a href="<?php echo $good_href.'&'.$qstr ?>" id="good_button" class="bo_v_good"><i class="far fa-thumbs-up"></i><span class="sound_only">추천</span><strong><?php echo number_format($view['wr_good']) ?></strong></a>
|
||||
<b id="bo_v_act_good"></b>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php if ($nogood_href) { ?>
|
||||
<span class="bo_v_act_gng">
|
||||
<a href="<?php echo $nogood_href.'&'.$qstr ?>" id="nogood_button" class="bo_v_nogood"><i class="far fa-thumbs-down"></i><span class="sound_only">비추천</span><strong><?php echo number_format($view['wr_nogood']) ?></strong></a>
|
||||
<b id="bo_v_act_nogood"></b>
|
||||
</span>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php } else {
|
||||
if($board['bo_use_good'] || $board['bo_use_nogood']) {
|
||||
?>
|
||||
<div id="bo_v_act">
|
||||
<?php if($board['bo_use_good']) { ?><span class="bo_v_good"><i class="far fa-thumbs-up"></i><span class="sound_only">추천</span><strong><?php echo number_format($view['wr_good']) ?></strong></span><?php } ?>
|
||||
<?php if($board['bo_use_nogood']) { ?><span class="bo_v_nogood"><i class="far fa-thumbs-down"></i><span class="sound_only">비추천</span><strong><?php echo number_format($view['wr_nogood']) ?></strong></span><?php } ?>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
<!-- } 추천 비추천 끝 -->
|
||||
|
||||
<div id="bo_v_share">
|
||||
<?php include_once(G5_SNS_PATH."/view.sns.skin.php"); ?>
|
||||
<?php if ($scrap_href) { ?><a href="<?php echo $scrap_href; ?>" target="_blank" class="btn btn_b03" onclick="win_scrap(this.href); return false;"><i class="fa fa-bookmark" aria-hidden="true"></i> 스크랩</a><?php } ?>
|
||||
</div>
|
||||
|
||||
</section>
|
||||
|
||||
<?php
|
||||
$cnt = 0;
|
||||
if ($view['file']['count']) {
|
||||
for ($i=0; $i<count($view['file']); $i++) {
|
||||
if (isset($view['file'][$i]['source']) && $view['file'][$i]['source'] && !$view['file'][$i]['view'])
|
||||
$cnt++;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<?php if($cnt) { ?>
|
||||
<!-- 첨부파일 시작 { -->
|
||||
<section id="bo_v_file">
|
||||
<h2>첨부파일</h2>
|
||||
<ul>
|
||||
<?php
|
||||
// 가변 파일
|
||||
for ($i=0; $i<count($view['file']); $i++) {
|
||||
if (isset($view['file'][$i]['source']) && $view['file'][$i]['source'] && !$view['file'][$i]['view']) {
|
||||
?>
|
||||
<li>
|
||||
<i class="fa fa-folder-open" aria-hidden="true"></i>
|
||||
<a href="<?php echo $view['file'][$i]['href']; ?>" class="view_file_download">
|
||||
<strong><?php echo $view['file'][$i]['source'] ?></strong> <?php echo $view['file'][$i]['content'] ?> (<?php echo $view['file'][$i]['size'] ?>)
|
||||
</a>
|
||||
<br>
|
||||
<span class="bo_v_file_cnt"><?php echo $view['file'][$i]['download'] ?>회 다운로드 | DATE : <?php echo $view['file'][$i]['datetime'] ?></span>
|
||||
</li>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</section>
|
||||
<!-- } 첨부파일 끝 -->
|
||||
<?php } ?>
|
||||
|
||||
<?php if(isset($view['link']) && array_filter($view['link'])) { ?>
|
||||
<!-- 관련링크 시작 { -->
|
||||
<section id="bo_v_link">
|
||||
<h2>관련링크</h2>
|
||||
<ul>
|
||||
<?php
|
||||
// 링크
|
||||
$cnt = 0;
|
||||
for ($i=1; $i<=count($view['link']); $i++) {
|
||||
if ($view['link'][$i]) {
|
||||
$cnt++;
|
||||
$link = cut_str($view['link'][$i], 70);
|
||||
?>
|
||||
<li>
|
||||
<i class="fa fa-link" aria-hidden="true"></i>
|
||||
<a href="<?php echo $view['link_href'][$i] ?>" target="_blank">
|
||||
<strong><?php echo $link ?></strong>
|
||||
</a>
|
||||
<br>
|
||||
<span class="bo_v_link_cnt"><?php echo $view['link_hit'][$i] ?>회 연결</span>
|
||||
</li>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</section>
|
||||
<!-- } 관련링크 끝 -->
|
||||
<?php } ?>
|
||||
|
||||
<div class="view_bt">
|
||||
<?php echo $link_buttons;?>
|
||||
</div>
|
||||
|
||||
<?php if ($prev_href || $next_href) { ?>
|
||||
<ul class="bo_v_nb">
|
||||
<?php if ($prev_href) { ?><li class="btn_prv"><span class="nb_tit"><i class="fa fa-chevron-up" aria-hidden="true"></i> 이전글</span><a href="<?php echo $prev_href ?>"><?php echo $prev_wr_subject;?></a> <span class="nb_date"><?php echo str_replace('-', '.', substr($prev_wr_date, '2', '8')); ?></span></li><?php } ?>
|
||||
<?php if ($next_href) { ?><li class="btn_next"><span class="nb_tit"><i class="fa fa-chevron-down" aria-hidden="true"></i> 다음글</span><a href="<?php echo $next_href ?>"><?php echo $next_wr_subject;?></a> <span class="nb_date"><?php echo str_replace('-', '.', substr($next_wr_date, '2', '8')); ?></span></li><?php } ?>
|
||||
</ul>
|
||||
<?php } ?>
|
||||
|
||||
<?php
|
||||
// 코멘트 입출력
|
||||
include_once(G5_BBS_PATH.'/view_comment.php');
|
||||
?>
|
||||
</article>
|
||||
<!-- } 게시판 읽기 끝 -->
|
||||
|
||||
<script>
|
||||
<?php if ($board['bo_download_point'] < 0) { ?>
|
||||
$(function() {
|
||||
$("a.view_file_download").click(function() {
|
||||
if(!g5_is_member) {
|
||||
alert("다운로드 권한이 없습니다.\n회원이시라면 로그인 후 이용해 보십시오.");
|
||||
return false;
|
||||
}
|
||||
|
||||
var msg = "파일을 다운로드 하시면 포인트가 차감(<?php echo number_format($board['bo_download_point']) ?>점)됩니다.\n\n포인트는 게시물당 한번만 차감되며 다음에 다시 다운로드 하셔도 중복하여 차감하지 않습니다.\n\n그래도 다운로드 하시겠습니까?";
|
||||
|
||||
if(confirm(msg)) {
|
||||
var href = $(this).attr("href")+"&js=on";
|
||||
$(this).attr("href", href);
|
||||
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
});
|
||||
<?php } ?>
|
||||
|
||||
function board_move(href)
|
||||
{
|
||||
window.open(href, "boardmove", "left=50, top=50, width=500, height=550, scrollbars=1");
|
||||
}
|
||||
</script>
|
||||
|
||||
<script>
|
||||
$(function() {
|
||||
$("a.view_image").click(function() {
|
||||
window.open(this.href, "large_image", "location=yes,links=no,toolbar=no,top=10,left=10,width=10,height=10,resizable=yes,scrollbars=no,status=no");
|
||||
return false;
|
||||
});
|
||||
|
||||
// 추천, 비추천
|
||||
$("#good_button, #nogood_button").click(function() {
|
||||
var $tx;
|
||||
if(this.id == "good_button")
|
||||
$tx = $("#bo_v_act_good");
|
||||
else
|
||||
$tx = $("#bo_v_act_nogood");
|
||||
|
||||
excute_good(this.href, $(this), $tx);
|
||||
return false;
|
||||
});
|
||||
|
||||
// 이미지 리사이즈
|
||||
$("#bo_v_atc").viewimageresize();
|
||||
});
|
||||
|
||||
function excute_good(href, $el, $tx)
|
||||
{
|
||||
$.post(
|
||||
href,
|
||||
{ js: "on" },
|
||||
function(data) {
|
||||
if(data.error) {
|
||||
alert(data.error);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(data.count) {
|
||||
$el.find("strong").text(number_format(String(data.count)));
|
||||
if($tx.attr("id").search("nogood") > -1) {
|
||||
$tx.text("이 글을 비추천하셨습니다.");
|
||||
$tx.fadeIn(200).delay(2500).fadeOut(200);
|
||||
} else {
|
||||
$tx.text("이 글을 추천하셨습니다.");
|
||||
$tx.fadeIn(200).delay(2500).fadeOut(200);
|
||||
}
|
||||
}
|
||||
}, "json"
|
||||
);
|
||||
}
|
||||
</script>
|
||||
<!-- } 게시글 읽기 끝 -->
|
||||
|
||||
|
||||
<style>
|
||||
@charset "utf-8";
|
||||
|
||||
/* ### 기본 스타일 커스터마이징 시작 ### */
|
||||
|
||||
/* 게시판 버튼 */
|
||||
/* 목록 버튼 */
|
||||
#bo_gall a.btn_b01 {}
|
||||
#bo_gall a.btn_b01:focus, #bo_gall a.btn_b01:hover {}
|
||||
#bo_gall a.btn_b02 {}
|
||||
#bo_gall a.btn_b02:focus, #bo_gall a.btn_b02:hover {}
|
||||
#bo_gall a.btn_admin {} /* 관리자 전용 버튼 */
|
||||
#bo_gall a.btn_admin:focus, #bo_gall .btn_admin:hover {}
|
||||
|
||||
/* 읽기 버튼 */
|
||||
#bo_v a.btn_b01 {}
|
||||
#bo_v a.btn_b01:focus, #bo_v a.btn_b01:hover {}
|
||||
#bo_v a.btn_b02 {}
|
||||
#bo_v a.btn_b02:focus, #bo_v a.btn_b02:hover {}
|
||||
#bo_v a.btn_admin {} /* 관리자 전용 버튼 */
|
||||
#bo_v a.btn_admin:focus, #bo_v a.btn_admin:hover {}
|
||||
|
||||
/* 쓰기 버튼 */
|
||||
#bo_w .btn_confirm {} /* 서식단계 진행 */
|
||||
#bo_w .btn_submit {padding:0 20px;font-size:1.167em}
|
||||
#bo_w button.btn_submit {}
|
||||
#bo_w fieldset .btn_submit {}
|
||||
#bo_w .btn_cancel {font-size:1.167em;border-radius:3px}
|
||||
#bo_w button.btn_cancel {}
|
||||
#bo_w .btn_cancel:focus, #bo_w .btn_cancel:hover {}
|
||||
#bo_w a.btn_frmline, #bo_w button.btn_frmline {} /* 우편번호검색버튼 등 */
|
||||
#bo_w button.btn_frmline {}
|
||||
|
||||
/* 기본 테이블 */
|
||||
/* 읽기 내 테이블 */
|
||||
#bo_v .tbl_head01 {}
|
||||
#bo_v .tbl_head01 caption {}
|
||||
#bo_v .tbl_head01 thead th {}
|
||||
#bo_v .tbl_head01 thead a {}
|
||||
#bo_v .tbl_head01 thead th input {} /* middle 로 하면 게시판 읽기에서 목록 사용시 체크박스 라인 깨짐 */
|
||||
#bo_v .tbl_head01 tfoot th {}
|
||||
#bo_v .tbl_head01 tfoot td {}
|
||||
#bo_v .tbl_head01 tbody th {}
|
||||
#bo_v .tbl_head01 td {}
|
||||
#bo_v .tbl_head01 a {}
|
||||
#bo_v td.empty_table {}
|
||||
|
||||
/* 쓰기 테이블 */
|
||||
#bo_w table {}
|
||||
#bo_w caption {}
|
||||
#bo_w .frm_info {}
|
||||
#bo_w .frm_address {}
|
||||
#bo_w .frm_file {}
|
||||
|
||||
#bo_w .tbl_frm01 {}
|
||||
#bo_w .tbl_frm01 th {}
|
||||
#bo_w .tbl_frm01 td {}
|
||||
#bo_w .tbl_frm01 textarea, #bo_w tbl_frm01 .frm_input {}
|
||||
#bo_w .tbl_frm01 textarea {}
|
||||
#bo_w .tbl_frm01 a {}
|
||||
|
||||
/* 필수입력 */
|
||||
#bo_w .required, #bo_w textarea.required {}
|
||||
|
||||
#bo_w .cke_sc {}
|
||||
#bo_w button.btn_cke_sc {}
|
||||
#bo_w .cke_sc_def {}
|
||||
#bo_w .cke_sc_def dl {}
|
||||
#bo_w .cke_sc_def dl:after {}
|
||||
#bo_w .cke_sc_def dt, #bo_w .cke_sc_def dd {}
|
||||
#bo_w .cke_sc_def dt {}
|
||||
#bo_w .cke_sc_def dd {}
|
||||
|
||||
/* ### 기본 스타일 커스터마이징 끝 ### */
|
||||
|
||||
/* 게시판 목록 */
|
||||
#bo_cate {padding:0px;margin:10px 0; margin-bottom:20px; border-bottom:1px solid #ddd}
|
||||
#bo_cate h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_cate ul {zoom:1}
|
||||
#bo_cate ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_cate li {display:inline-block;padding:0px; min-width:150px; padding-right:2px; text-align:center;}
|
||||
#bo_cate a {display:block;line-height:40px;padding:0 20px;border-radius:0px;border:1px solid #ddd; background:#fff; border-bottom:0px; text-align:center;}
|
||||
#bo_cate a:focus, #bo_cate a:hover, #bo_cate a:active {text-decoration:none;background:#d2d6dc; border:1px solid #d2d6dc; border-bottom:0px;}
|
||||
#bo_cate #bo_cate_on {z-index:2;background:#333;color:#fff;font-weight:500; border:1px solid #333; border-bottom:0px; /*border-bottom-color:#1977b5;
|
||||
-webkit-box-shadow: inset 0 2px 5px rgb(33, 135, 202);
|
||||
-moz-box-shadow: inset 0 2px 5px rgb(33, 135, 202);
|
||||
box-shadow:inset 0 2px 5px rgb(33, 135, 202);*/}
|
||||
.td_subject img {margin-left:3px}
|
||||
|
||||
.selec_chk {position:absolute;top:0;left:0;width:0;height:0;opacity:0;outline:0;z-index:-1;overflow:hidden}
|
||||
.chk_box {position:relative}
|
||||
.chk_box input[type="checkbox"] + label {position:relative;padding-left:20px;color:#676e70;vertical-align:baseline; }
|
||||
.chk_box input[type="checkbox"] + label:hover{color:#2172f8}
|
||||
.chk_box input[type="checkbox"] + label span {position:absolute;top:10px;left:10px;width:15px;height:15px;display:block;background:#fff;border:1px solid #d0d4df;border-radius:3px; z-index:10;}
|
||||
.chk_box input[type="checkbox"]:checked + label {color:#000}
|
||||
.chk_box input[type="checkbox"]:checked + label span {background:url(./img/chk.png) no-repeat 50% 50% #3a8afd;border-color:#1471f6;border-radius:3px; }
|
||||
.all_chk.chk_box input[type="checkbox"] + label span {top:0;left:0; margin-left:0px; margin-top:3px; margin-right:5px;}
|
||||
|
||||
|
||||
/* 갤러리 목록 */
|
||||
#bo_gall h2 {margin:0;padding:0;width:1px;height:1px;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_gall #gall_ul {margin:10px -10px 0;padding:0;list-style:none;zoom:1}
|
||||
#bo_gall #gall_ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_gall .gall_li {}
|
||||
#bo_gall .gall_li .gall_chk {position:absolute;top:0;left:0;padding:5px}
|
||||
#bo_gall .gall_box {position:relative;margin:0 0 50px 0;border-radius:0 0 2px 2px}
|
||||
|
||||
.gall_row .col-gn-0,.gall_row .col-gn-1,.gall_row .col-gn-2,.gall_row .col-gn-3,.gall_row .col-gn-4,.gall_row .col-gn-5,.gall_row .col-gn-6,.gall_row .col-gn-7,.gall_row .col-gn-8,.gall_row .col-gn-9,.gall_row .col-gn-10 {position:relative;min-height:1px;padding-left:10px;*padding-left:0;padding-right:10px;*padding-right:0;float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-left:0}
|
||||
.gall_row .col-gn-0,.gall_row .col-gn-1 {width:100%}
|
||||
.gall_row .col-gn-2 {width:50%}
|
||||
.gall_row .col-gn-3 {width:33.33333333%}
|
||||
.gall_row .col-gn-4 {width:25%}
|
||||
.gall_row .col-gn-5 {width:20%}
|
||||
.gall_row .col-gn-6 {width:16.66666667%}
|
||||
.gall_row .col-gn-7 {width:14.28571428%}
|
||||
.gall_row .col-gn-8 {width:12.5%}
|
||||
.gall_row .col-gn-9 {width:11.11111111%}
|
||||
.gall_row .col-gn-10 {width:10%}
|
||||
|
||||
.gall_row .box_clear {clear:both}
|
||||
|
||||
#bo_gall .gall_now .gall_text_href a {color:#ff3061}
|
||||
|
||||
#bo_gall .gall_href a:link, #bo_gall .gall_href a:focus, #bo_gall .gall_href a:hover {text-decoration:none}
|
||||
#bo_gall .gall_img {border-bottom:1px solid #eee;text-align:center; /*max-height:200px;*/overflow:hidden}
|
||||
#bo_gall .gall_img a,#bo_gall .gall_img .no_image,#bo_gall .gall_img .is_notice {display:block}
|
||||
#bo_gall .gall_img img{max-width:100%;height:auto !important; transition: transform 1s; -webkit-transition: -webkit-transform 1s;}
|
||||
#bo_gall .gall_img img:hover { transform: scale(1.2, 1.2); -webkit-transform: scale(1.2, 1.2); }
|
||||
#bo_gall .gall_img video{max-width:100%;height:auto !important;}
|
||||
#bo_gall .gall_img video:hover {}
|
||||
|
||||
#bo_gall .gall_img span {display:inline-block;background:#eaeaea;text-align:center;line-height:200px;text-transform:uppercase;font-weight:bold;font-size:1.25em;color:#777}
|
||||
|
||||
#bo_gall .gall_text_href {margin:0px 0; padding:10px; background-color:#f6f6f6}
|
||||
#bo_gall .gall_text_href a {font-weight:bold}
|
||||
#bo_gall .gall_text_href img {margin:0 0 0 4px}
|
||||
#bo_gall .bo_tit {display:block; /*line-height:30px;*/ font-weight:700;color:#000;font-size:1.1em}
|
||||
#bo_gall .bo_tit .cnt_cmt {background:#fff;color:#333;font-size:0.7em;height:15px;line-height:15px;padding:0px 5px; padding-bottom:0px; border-radius:3px;vertical-align:middle; border:1px solid #aaa; margin-left:3px; }
|
||||
#bo_gall .bo_cnt {color:#acacac;line-height:18px; display:none;}
|
||||
#bo_gall .profile_img img {border-radius:50%}
|
||||
#bo_gall .bo_tit .fa-heart {display:inline-block;line-height:14px;width:16px;font-size:0.833em;color:#C42828;background:none;text-align:center;border-radius:2px;font-size:12px;border:0px solid #cbe3e8;vertical-align:middle; margin-top:3px;}
|
||||
#bo_gall .bo_tit .fa-lock {display:inline-block;line-height:14px;width:16px;font-size:0.833em;color:#666;background:none;text-align:center;border-radius:2px;font-size:12px;border:0px solid #cbe3e8;vertical-align:middle; margin-top:3px;}
|
||||
#bo_gall .bo_tit .new_icon {display:inline-block;width:28px; height:15px; line-height:13px;font-size:0.7em; letter-spacing:0.05em; color:#fff;background:#3071CA;text-align:center;border-radius:2px;margin-left:2px;font-weight:normal;vertical-align:middle; margin-top:0px; margin-right:1px;}
|
||||
#bo_gall .bo_tit .hot_icon {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#1EA362;background:#ffb9b9;text-align:center;border-radius:2px;vertical-align:middle}
|
||||
#bo_gall .bo_tit .fa-download {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#F19717;background:none;text-align:center;border-radius:2px;margin-left:5px;vertical-align:middle; margin-top:3px;}
|
||||
#bo_gall .bo_tit .fa-link {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#BB51FD;background:none;text-align:center; border-radius:2px;margin-left:5px;vertical-align:middle; margin-top:3px;}
|
||||
|
||||
|
||||
|
||||
|
||||
#bo_gall .gall_info {line-height:1.5em;line-height:20px; padding:5px 10px; padding-bottom:10px; background:#f6f6f6; font-size:0.9em;}
|
||||
#bo_gall .gall_info strong {display:inline-block;margin:0}
|
||||
#bo_gall .gall_info i {font-size:12px}
|
||||
#bo_gall .gall_info .gall_date,
|
||||
#bo_gall .gall_info .gall_view {display:inline-block;margin-right:10px;color:#777}
|
||||
#bo_gall .gall_name{padding:5px 10px; background:#f6f6f6;}
|
||||
|
||||
#bo_gall .gall_option {position:absolute;bottom:10px;right:10px; font-size:0.9em;}
|
||||
#bo_gall .gall_option strong {background:#f6f6f6;padding:5px 10px;border-radius:30px;
|
||||
/*-webkit-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
-moz-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2)*/}
|
||||
|
||||
/* 게시판 목록 공통 */
|
||||
#bo_btn_top {margin:10px 0}
|
||||
#bo_btn_top:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_fx {margin-bottom:5px;float:right;zoom:1}
|
||||
.bo_fx:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_fx ul {margin:0;padding:0;list-style:none}
|
||||
#bo_list_total {float:left;line-height:34px;font-size:0.92em;color:#4e546f}
|
||||
|
||||
.btn_bo_user {float:right;margin:0;padding:0;list-style:none}
|
||||
.btn_bo_user li {float:left;width:auto;text-align:center;margin-left:5px;background:#fff}
|
||||
.btn_bo_user > li {position:relative}
|
||||
.btn_bo_adm {float:left}
|
||||
.btn_bo_adm li {float:left;margin-right:5px}
|
||||
.btn_bo_adm input {padding:0 8px;border:0;background:#d4d4d4;color:#666;text-decoration:none;vertical-align:middle}
|
||||
.bo_notice td {background:#fff6fa !important;border-bottom:1px solid #f8e6ee}
|
||||
.bo_notice td a {font-weight:bold}
|
||||
.bo_notice .notice_icon {display:inline-block;line-height:25px;border-radius:5px;font-weight:bold;color:#f9267f}
|
||||
|
||||
.more_opt {display:none;position:absolute;top:45px;right:0;background:#fff;border:1px solid #b8bfc4;z-index:999}
|
||||
.more_opt:before {content:"";position:absolute;top:-8px;right:13px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent}
|
||||
.more_opt:after {content:"";position:absolute;top:-6px;right:13px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
.more_opt li {border-bottom:1px solid #f1f1f1;padding:10px;float:inherit;width:120px;margin:0;color:#6b757c;text-align:left}
|
||||
.more_opt li.wid_s {width:70px;}
|
||||
.more_opt li:last-child {border-bottom:0}
|
||||
.more_opt li button, .more_opt li a {width:100%;border:0;background:#fff;color:#6b757c; text-align:left;}
|
||||
.more_opt li:hover a,
|
||||
.more_opt li:hover button {color:#000}
|
||||
.more_opt li i {float:right;line-height:20px}
|
||||
|
||||
.td_num strong {color:#000}
|
||||
/*.bo_cate_link {font-size:0.9em; float:left;display:block;margin-right:10px;background:#666;color:#fff;font-weight:normal !important;height:20px;line-height:10px;padding:5px 8px;border-radius:5px;font-size:0.95em} *//* 글제목줄 분류스타일 */
|
||||
.bo_cate_link{display:block; background:none; color:#333; border-bottom:1px solid #ddd; padding-bottom:10px; margin-bottom:5px; overflow:hidden; width:100%; text-align:center;}
|
||||
.bo_cate_link:hover {text-decoration:none}
|
||||
.bo_current {color:#e8180c}
|
||||
#bo_list .profile_img {display:inline-block;margin-right:5px}
|
||||
#bo_list .profile_img img {border-radius:50%}
|
||||
#bo_list .cnt_cmt {background:#fff;color:#333;font-size:11px;height:16px;line-height:16px;padding:3px 5px; padding-bottom:1px; border-radius:3px;vertical-align:middle; border:1px solid #666; margin-left:3px; }
|
||||
#bo_gall li.empty_list {padding:85px 0;text-align:center}
|
||||
|
||||
.bo_sch_wrap {display:none;width:100%;height:100%;position:fixed;top:0;left:0;z-index:999999999;}
|
||||
.bo_sch {position:absolute;top:50%;left:50%;background:#fff;text-align:left;width:500px;max-height:300px;margin-left:-250px;margin-top:-150px;overflow-y:auto;border-radius:5px;-webkit-box-shadow:1px 1px 18px rgba(0,0,0,0.2);-moz-box-shadow:1px 1px 18px rgba(0,0,0,0.2);box-shadow:1px 1px 18px rgba(0,0,0,0.2);border:1px solid #dde7e9;background:#fff;border-radius:3px}
|
||||
.bo_sch:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_sch h3 {padding:15px;border-bottom:1px solid #e8e8e8}
|
||||
.bo_sch legend {background:red}
|
||||
.bo_sch form {padding:15px;display:block}
|
||||
.bo_sch select {border:0;width:100%;height:40px;border:1px solid #dddddd;border-radius:2px; /*-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075)*/}
|
||||
.bo_sch .sch_bar {display:inline-block;width:100%;clear:both;margin-top:15px;border:1px solid #dddddd;border-radius:2px; /*-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075)*/}
|
||||
.bo_sch .sch_input {width:80%;height:38px;border:0;padding:0;background-color:transparent;float:left}
|
||||
.bo_sch .sch_btn {height:38px;float:right;color:#656565;background:none;border:0;width:40px;font-size:15px}
|
||||
.bo_sch .bo_sch_cls {position:absolute;right:0;top:0;color:#b5b8bb;border:0;padding:12px 15px;font-size:16px;background:#fff}
|
||||
.bo_sch_bg {background:#000;background:rgba(0,0,0,0.5);width:100%;height:100%;}
|
||||
|
||||
/* 게시판 쓰기 */
|
||||
#char_count_desc {display:block;margin:0 0 5px;padding:0}
|
||||
#char_count_wrap {margin:5px 0 0;text-align:right}
|
||||
#char_count {font-weight:bold}
|
||||
|
||||
#autosave_wrapper {position:relative}
|
||||
#autosave_pop {display:none;z-index:10;position:absolute !important;top:34px;right:0;width:350px;height:auto !important;height:180px;max-height:180px;border:1px solid #565656;background:#fff;
|
||||
-webkit-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
-moz-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2)}
|
||||
#autosave_pop:before {content:"";position:absolute;top:-8px;right:45px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #000 transparent}
|
||||
#autosave_pop:after {content:"";position:absolute;top:-7px;right:45px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
html.no-overflowscrolling #autosave_pop {height:auto;max-height:10000px !important} /* overflow 미지원 기기 대응 */
|
||||
#autosave_pop strong {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#autosave_pop div {text-align:center;margin:0 !important}
|
||||
#autosave_pop button {margin:0;padding:0;border:0}
|
||||
#autosave_pop ul {padding:15px;border-top:1px solid #e9e9e9;list-style:none;overflow-y:scroll;height:130px;border-bottom:1px solid #e8e8e8}
|
||||
#autosave_pop li {padding:8px 5px;border-bottom:1px solid #fff;background:#eee;zoom:1}
|
||||
#autosave_pop li:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#autosave_pop a {display:block;float:left}
|
||||
#autosave_pop span {display:block;float:right;font-size:0.92em;font-style:italic;color:#999}
|
||||
.autosave_close {cursor:pointer;width:100%;height:30px;background:none;color:#888;font-weight:bold;font-size:0.92em}
|
||||
.autosave_close:hover {background:#f3f3f3;color:#3597d9}
|
||||
.autosave_content {display:none}
|
||||
.autosave_del {background:url(./img/close_btn.png) no-repeat 50% 50%;text-indent:-999px;overflow:hidden;height:20px;width:20px}
|
||||
|
||||
/* 게시판 읽기 */
|
||||
#bo_v {margin-bottom:20px;background:#fff;box-sizing:border-box}
|
||||
|
||||
#bo_v_table {position:absolute;top:0;right:16px;margin:0;padding:0 5px;height:25px;background:#ff3061;color:#fff;font-weight:bold;line-height:2.2em}
|
||||
|
||||
#bo_v_title {border-top:1px solid #000; border-bottom:1px solid #ddd; padding:15px 15px; padding-left:10px; background-color:#F7F7F7;}
|
||||
#bo_v_title .bo_v_cate {display:inline-block;line-height:20px;background:#666;color:#fff;padding:0 10px;border-radius:3px; font-size:0.9em;}
|
||||
#bo_v_title .bo_v_tit {display:inline-block;font-size:0.8em;margin:5px 0 0;word-break:break-all}
|
||||
|
||||
#bo_v_info {margin:0;border-bottom:1px solid #f1f1f1;color:#666}
|
||||
#bo_v_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_info h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
|
||||
#bo_v_info .profile_info {margin:20px 0 10px;display:inline-block;float:left}
|
||||
#bo_v_info .profile_info .pf_img {float:left;margin-right:10px}
|
||||
#bo_v_info .profile_info .pf_img img {border-radius:50%;width:50px;height:50px}
|
||||
#bo_v_info .profile_info .profile_info_ct {float:left;padding:5px 0;line-height:23px}
|
||||
|
||||
#bo_v_info strong {display:inline-block;margin:0 10px 0 0;font-weight:normal}
|
||||
#bo_v_info .sv_member,
|
||||
#bo_v_info .sv_guest,
|
||||
#bo_v_info .member,
|
||||
#bo_v_info .guest {font-weight:bold}
|
||||
#bo_v_info .profile_img {display:none}
|
||||
#bo_v_info .sv_member {color:#000}
|
||||
#bo_v_info .if_date {margin:0;color:#888}
|
||||
|
||||
#bo_v_file h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_file ul {margin:0;list-style:none}
|
||||
#bo_v_file li {padding:15px;position:relative;margin:10px 0;border:1px solid #dfdfdf;border-radius:5px;
|
||||
-webkit-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
-moz-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%)}
|
||||
#bo_v_file li i {float:left;color:#b2b2b2;font-size:2.35em;margin-right:20px}
|
||||
#bo_v_file a {float:left;display:block;text-decoration:none;word-wrap:break-word;color:#000}
|
||||
#bo_v_file a:focus, #bo_v_file li:hover a, #bo_v_file a:active {text-decoration:underline;color:#3a8afd}
|
||||
#bo_v_file img {float:left;margin:0 10px 0 0}
|
||||
#bo_v_file .bo_v_file_cnt {color:#b2b2b2;font-size:0.92em}
|
||||
#bo_v_file li:hover {border-color:#bed4f4;color:#bed4f4}
|
||||
#bo_v_file li:hover i {color:#3a8afd}
|
||||
#bo_v_file li:hover .bo_v_file_cnt {color:#99c2fc}
|
||||
|
||||
|
||||
#bo_v_link h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_file ul {margin:0;list-style:none}
|
||||
#bo_v_link li {padding:15px;position:relative;margin:10px 0;border:1px solid #dfdfdf;border-radius:5px;
|
||||
-webkit-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
-moz-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%)}
|
||||
#bo_v_link li i {float:left;color:#b2b2b2;font-size:2.35em;margin-right:20px}
|
||||
#bo_v_link a {float:left;display:block;text-decoration:none;word-wrap:break-word;color:#000}
|
||||
#bo_v_link a:focus, #bo_v_link li:hover a, #bo_v_link a:active {text-decoration:underline;color:#3a8afd}
|
||||
#bo_v_link .bo_v_link_cnt {color:#b2b2b2;font-size:0.92em}
|
||||
#bo_v_link li:hover {border-color:#bed4f4;color:#bed4f4}
|
||||
#bo_v_link li:hover i {color:#3a8afd}
|
||||
#bo_v_link li:hover .bo_v_link_cnt {color:#99c2fc}
|
||||
|
||||
|
||||
#bo_v_top {zoom:1}
|
||||
#bo_v_top:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_top h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_top ul {padding:0;list-style:none;word-break:break-all}
|
||||
|
||||
#bo_v_bot {zoom:1}
|
||||
#bo_v_bot:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_bot h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_bot ul {padding:0;list-style:none}
|
||||
|
||||
.bo_v_com {margin:20px 0;float:right}
|
||||
.bo_v_com > li {position:relative;float:left;margin-left:5px}
|
||||
|
||||
.bo_v_nb {margin:20px 0;position:relative;clear:both;text-align:left}
|
||||
.bo_v_nb:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_v_nb li {border-top:1px solid #f1f1f1;padding:13px}
|
||||
.bo_v_nb li:last-child {border-bottom:1px solid #f1f1f1}
|
||||
.bo_v_nb li:hover {background:#f6f6f6}
|
||||
.bo_v_nb li i {font-size:13px;color:#b3b3b3}
|
||||
.bo_v_nb li .nb_tit {display:inline-block;padding-right:20px;color:#b3b3b3}
|
||||
.bo_v_nb li .nb_date {float:right;color:#b3b3b3}
|
||||
|
||||
#bo_v_atc {min-height:200px;height:auto !important;height:200px}
|
||||
#bo_v_atc_title {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
|
||||
#bo_v_img {width:100%;overflow:hidden;zoom:1}
|
||||
#bo_v_img:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_img a.view_image {display:block}
|
||||
#bo_v_img img {margin-bottom:20px;max-width:100%;height:auto}
|
||||
|
||||
#bo_v_con {margin:10px 0 30px;width:100%;line-height:1.7em;min-height:200px;word-break:break-all;overflow:hidden; padding-top:50px;}
|
||||
#bo_v_con a {color:#000;text-decoration:underline}
|
||||
#bo_v_con img {max-width:100%;height:auto}
|
||||
|
||||
#bo_v_act {margin-bottom:30px;text-align:center}
|
||||
#bo_v_act .bo_v_act_gng {position:relative}
|
||||
#bo_v_act a {margin-right:5px;vertical-align:middle;color:#4a5158}
|
||||
#bo_v_act a:hover {background-color:#fff;color:#ff484f;border-color:#ff484f}
|
||||
#bo_v_act i {font-size:1.4em;margin-right:5px}
|
||||
#bo_v_act_good, #bo_v_act_nogood {display:none;position:absolute;top:30px;left:0;z-index:9999;padding:10px 0;width:165px;background:#ff3061;color:#fff;text-align:center}
|
||||
#bo_v_act .bo_v_good {display:inline-block;border:1px solid #dedede;width:70px;line-height:46px;border-radius:30px}
|
||||
#bo_v_act .bo_v_nogood {display:inline-block;border:1px solid #dedede;width:70px;line-height:46px;border-radius:30px}
|
||||
|
||||
#bo_v_sns {padding:0;list-style:none;zoom:1; display:inline-block; text-align:center;}
|
||||
#bo_v_sns:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_sns li {display:inline-block; width:135px;margin-right:5px;text-align:left}
|
||||
#bo_v_sns li a {height:35px;line-height:35px;text-align:center;border-radius:5px;color:#fff;font-size:0.95em}
|
||||
#bo_v_sns li img {vertical-align:middle;margin-right:5px}
|
||||
#bo_v_sns li .sns_f {display:block;background:#3b5997}
|
||||
#bo_v_sns li .sns_t {display:block;background:#09aeee}
|
||||
#bo_v_sns li .sns_g {display:block;background:#ea4026}
|
||||
#bo_v_sns li .sns_k {display:block;background:#fbe300}
|
||||
|
||||
#bo_v_share {position:relative;padding:20px 0; text-align:center;}
|
||||
#bo_v_share:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_share .btn {padding:0 10px;color:#555;font-weight:normal;font-size:1em;width:80px;line-height:35px;height:35px;border-color:#d5d5d5;border-radius:5px; margin-top:-3px;}
|
||||
#bo_v_share .btn:hover {background:#fff}
|
||||
#bo_v_share .btn i {margin-right:5px;color:#4b5259;vertical-align:middle}
|
||||
|
||||
/* 게시판 댓글 */
|
||||
.cmt_btn {width:100%;text-align:left;border:0;border-bottom:1px solid #f0f0f0;background:#fff;font-weight:bold;margin:30px 0 0px;padding:0 0 15px}
|
||||
.cmt_btn span.total {position:relative;display:inline-block;margin-right:5px;font-size:1em;color:#3a8afd}
|
||||
.cmt_btn span.cmt_more {float:right;display:inline-block;width:15px;height:10px;background:url(./img/btn_cmt.png) no-repeat right 2px;margin-top:5px}
|
||||
.cmt_btn_op span.cmt_more {background-position:right -8px}
|
||||
.cmt_btn b {font-size:1.2em;color:#000}
|
||||
.cmt_btn span.total:after {position:absolute;bottom:-17px;left:0;display:inline-block;background:#000000;content:"";width:100%;height:2px}
|
||||
#bo_vc {}
|
||||
#bo_vc h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc article {margin:20px 0;position:relative;border-bottom:1px solid #f0f0f0}
|
||||
#bo_vc article:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc article .profile_img img {border-radius:50%}
|
||||
#bo_vc article .pf_img {float:left;margin-right:10px}
|
||||
#bo_vc article .pf_img img {border-radius:50%;width:50px;height:50px}
|
||||
#bo_vc article .cm_wrap {float:left;max-width:100%;width:90%;}
|
||||
#bo_vc header {position:relative;width:100%}
|
||||
#bo_vc header:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc header .profile_img {display:none}
|
||||
#bo_vc header .icon_reply {position:absolute;top:15px;left:-20px}
|
||||
#bo_vc .member, #bo_vc .guest, #bo_vc .sv_member, #bo_vc .sv_guest {font-weight:bold}
|
||||
.bo_vc_hdinfo {color:#777; padding-left:15px;}
|
||||
#bo_vc h1 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc .cmt_contents {line-height:1.8em;padding:0 0 20px}
|
||||
#bo_vc p a {text-decoration:underline}
|
||||
#bo_vc p a.s_cmt {text-decoration:underline;color:#ed6479}
|
||||
#bo_vc_empty {margin:0;padding:80px 0 !important;color:#777;text-align:center}
|
||||
#bo_vc #bo_vc_winfo {float:left}
|
||||
#bo_vc .bo_vl_opt {position:absolute;top:0;right:0}
|
||||
|
||||
.bo_vc_act {display:none;position:absolute;right:0;top:40px;width:70px;text-align:left;border:1px solid #b8bfc4;margin:0;list-style:none;background:#fff;zoom:1;z-index:9999}
|
||||
.bo_vc_act:before {content:"";position:absolute;top:-8px;right:5px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent}
|
||||
.bo_vc_act:after {content:"";position:absolute;top:-6px;right:5px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
.bo_vc_act li {border-bottom:1px solid #f0f0f0; width:100%;}
|
||||
.bo_vc_act li:last-child {border-bottom:0}
|
||||
.bo_vc_act li a {display:inline-block; width:100%; padding:10px 10px; color:#6b757c; text-align:left;}
|
||||
.bo_vc_act li a i {display:block; float:right;line-height:20px;}
|
||||
.bo_vc_act li a:hover {color:#3a8afd}
|
||||
|
||||
.bo_vc_w {position:relative;margin:10px 0;display:block}
|
||||
.bo_vc_w:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_vc_w h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
.bo_vc_w #char_cnt {display:block;margin:0 0 5px}
|
||||
.bo_vc_w textarea {border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;width:100%;height:120px;
|
||||
/*-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||
-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||
box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1)*/}
|
||||
#wr_secret {}
|
||||
.bo_vc_w_info {margin:10px 0;float:left}
|
||||
.bo_vc_w_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_vc_w_info .frm_input {float:left;margin-right:5px}
|
||||
.bo_vc_w_info #captcha {padding-top:10px;display:block;clear:both}
|
||||
.bo_vc_w .btn_confirm {clear:both;margin-top:10px}
|
||||
.bo_vc_w .btn_confirm label {display:inline-block;margin-right:10px;border-radius:3px;font-size:1.5em;text-align:center}
|
||||
.bo_vc_w .btn_submit {height:45px;padding:0 20px;border-radius:3px;font-weight:bold;font-size:1.083em}
|
||||
.bo_vc_w .btn_confirm .secret_cm label {font-size:1em !important}
|
||||
.bo_vc_w_wr:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.secret_cm {display:inline-block;float:left; position:absolute; left:0;}
|
||||
|
||||
#bo_vc_send_sns {display:inline-block;float:left}
|
||||
#bo_vc_sns {display:inline-block;margin:0;padding:0;list-style:none;zoom:1}
|
||||
#bo_vc_sns:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc_sns li {float:left;margin:0 5px 0 0}
|
||||
#bo_vc_sns .sns_li_f {border-radius:3px;background:#3a589b;height:40px;line-height:40px;padding:0 0 0 10px}
|
||||
#bo_vc_sns .sns_li_t {border-radius:3px;background:#00aced;height:40px;line-height:40px;padding:0 0 0 10px}
|
||||
#bo_vc_sns .sns_li_off {background:#bbb}
|
||||
#bo_vc_sns a {display:inline-block;padding:0 15px 0 5px}
|
||||
#bo_vc_sns input {margin:0 5px 0 0}
|
||||
|
||||
/*글쓰기*/
|
||||
#bo_w .bo_v_option li {display:inline-block;float:left;text-align:left;margin:0 5px 0 0; margin-right:15px;}
|
||||
#bo_w .bo_v_option li label {vertical-align:baseline}
|
||||
#bo_w .bo_v_option .chk_box input[type="checkbox"] + label span {margin-left:-10px; margin-top:-6px; margin-right:5px;}
|
||||
#bo_w .write_div {margin:10px 0;position:relative}
|
||||
#bo_w .write_div:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_w .bo_w_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_w .bo_w_info .frm_input {float:left;margin-bottom:1%}
|
||||
#bo_w #wr_password, #bo_w #wr_homepage {margin-left:1%}
|
||||
#bo_w .wr_content.smarteditor2 iframe {background:#fff}
|
||||
#bo_w .bo_w_tit {position:relative}
|
||||
#bo_w .bo_w_tit .frm_input {padding-right:120px}
|
||||
#bo_w .bo_w_tit #btn_autosave {position:absolute;top:5px;right:5px;line-height:30px;height:30px}
|
||||
#bo_w .bo_w_link label {position:absolute;top:1px;left:1px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;font-size:1.2em;text-align:center;color:#b2b2b2}
|
||||
#bo_w .bo_w_link .frm_input {padding-left:50px}
|
||||
#bo_w .bo_w_flie .lb_icon {position:absolute;top:0px;left:0px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;font-size:1.2em;text-align:center;color:#b2b2b2}
|
||||
#bo_w .bo_w_flie .frm_file {padding-left:50px;margin-top:3px}
|
||||
#bo_w .bo_w_flie .file_wr {position:relative;border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;height:40px;margin:0}
|
||||
#bo_w .bo_w_flie .frm_input {margin:10px 0 0}
|
||||
#bo_w .bo_w_flie .file_del {position:absolute;top:10px;right:10px;font-size:0.92em;color:#7d7d7d}
|
||||
#bo_w .bo_w_select select {border:1px solid #dddddd;width:100%;height:40px;border-radius:3px}
|
||||
|
||||
.secret_cm.chk_box input[type="checkbox"] + label span {margin-left:-10px; margin-top:-6px; margin-right:5px;}
|
||||
</style>
|
||||
@@ -0,0 +1,814 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
?>
|
||||
|
||||
<script>
|
||||
// 글자수 제한
|
||||
var char_min = parseInt(<?php echo $comment_min ?>); // 최소
|
||||
var char_max = parseInt(<?php echo $comment_max ?>); // 최대
|
||||
</script>
|
||||
<button type="button" class="cmt_btn"><span class="total"><b>댓글</b> <?php echo $view['wr_comment']; ?></span><span class="cmt_more"></span></button>
|
||||
<!-- 댓글 시작 { -->
|
||||
<section id="bo_vc">
|
||||
<h2>댓글목록</h2>
|
||||
<?php
|
||||
$cmt_amt = count($list);
|
||||
for ($i=0; $i<$cmt_amt; $i++) {
|
||||
$comment_id = $list[$i]['wr_id'];
|
||||
$cmt_depth = strlen($list[$i]['wr_comment_reply']) * 50;
|
||||
$comment = $list[$i]['content'];
|
||||
/*
|
||||
if (strstr($list[$i]['wr_option'], "secret")) {
|
||||
$str = $str;
|
||||
}
|
||||
*/
|
||||
$comment = preg_replace("/\[\<a\s.*href\=\"(http|https|ftp|mms)\:\/\/([^[:space:]]+)\.(mp3|wma|wmv|asf|asx|mpg|mpeg)\".*\<\/a\>\]/i", "<script>doc_write(obj_movie('$1://$2.$3'));</script>", $comment);
|
||||
$cmt_sv = $cmt_amt - $i + 1; // 댓글 헤더 z-index 재설정 ie8 이하 사이드뷰 겹침 문제 해결
|
||||
$c_reply_href = $comment_common_url.'&c_id='.$comment_id.'&w=c#bo_vc_w';
|
||||
$c_edit_href = $comment_common_url.'&c_id='.$comment_id.'&w=cu#bo_vc_w';
|
||||
$is_comment_reply_edit = ($list[$i]['is_reply'] || $list[$i]['is_edit'] || $list[$i]['is_del']) ? 1 : 0;
|
||||
?>
|
||||
|
||||
<article id="c_<?php echo $comment_id ?>" <?php if ($cmt_depth) { ?>style="margin-left:<?php echo $cmt_depth ?>px;border-top-color:#e0e0e0"<?php } ?>>
|
||||
<div class="pf_img"><?php echo get_member_profile_img($list[$i]['mb_id']); ?></div>
|
||||
|
||||
<div class="cm_wrap">
|
||||
|
||||
<header style="z-index:<?php echo $cmt_sv; ?>">
|
||||
<h2><?php echo get_text($list[$i]['wr_name']); ?>님의 <?php if ($cmt_depth) { ?><span class="sound_only">댓글의</span><?php } ?> 댓글</h2>
|
||||
<?php echo $list[$i]['name'] ?>
|
||||
<?php if ($is_ip_view) { ?>
|
||||
<span class="sound_only">아이피</span>
|
||||
<span>(<?php echo $list[$i]['ip']; ?>)</span>
|
||||
<?php } ?>
|
||||
<span class="sound_only">작성일</span>
|
||||
<span class="bo_vc_hdinfo">Date <time datetime="<?php echo date('Y-m-d\TH:i:s+09:00', strtotime($list[$i]['datetime'])) ?>"><?php echo $list[$i]['datetime'] ?></time></span>
|
||||
<?php
|
||||
include(G5_SNS_PATH.'/view_comment_list.sns.skin.php');
|
||||
?>
|
||||
</header>
|
||||
|
||||
<!-- 댓글 출력 -->
|
||||
<div class="cmt_contents">
|
||||
<p>
|
||||
<?php if (strstr($list[$i]['wr_option'], "secret")) { ?><img src="<?php echo $board_skin_url; ?>/img/icon_secret.gif" alt="비밀글"><?php } ?>
|
||||
<?php echo $comment ?>
|
||||
</p>
|
||||
<?php if($is_comment_reply_edit) {
|
||||
if($w == 'cu') {
|
||||
$sql = " select wr_id, wr_content, mb_id from $write_table where wr_id = '$c_id' and wr_is_comment = '1' ";
|
||||
$cmt = sql_fetch($sql);
|
||||
if (!($is_admin || ($member['mb_id'] == $cmt['mb_id'] && $cmt['mb_id'])))
|
||||
$cmt['wr_content'] = '';
|
||||
$c_wr_content = $cmt['wr_content'];
|
||||
}
|
||||
?>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<span id="edit_<?php echo $comment_id ?>" class="bo_vc_w"></span><!-- 수정 -->
|
||||
<span id="reply_<?php echo $comment_id ?>" class="bo_vc_w"></span><!-- 답변 -->
|
||||
|
||||
<input type="hidden" value="<?php echo strstr($list[$i]['wr_option'],"secret") ?>" id="secret_comment_<?php echo $comment_id ?>">
|
||||
<textarea id="save_comment_<?php echo $comment_id ?>" style="display:none"><?php echo get_text($list[$i]['content1'], 0) ?></textarea>
|
||||
</div>
|
||||
<?php if($is_comment_reply_edit) { ?>
|
||||
<div class="bo_vl_opt">
|
||||
<button type="button" class="btn_cm_opt btn_b01 btn"><i class="fa fa-ellipsis-v" aria-hidden="true"></i><span class="sound_only">댓글 옵션</span></button>
|
||||
<ul class="bo_vc_act">
|
||||
<?php if ($list[$i]['is_reply']) { ?><li><a href="<?php echo $c_reply_href; ?>" onclick="comment_box('<?php echo $comment_id ?>', 'c'); return false;">답변<i class="fa fa-reply" aria-hidden="true"></i></a></li><?php } ?>
|
||||
<?php if ($list[$i]['is_edit']) { ?><li><a href="<?php echo $c_edit_href; ?>" onclick="comment_box('<?php echo $comment_id ?>', 'cu'); return false;">수정<i class="fa fa-pencil-square-o" aria-hidden="true"></i></a></li><?php } ?>
|
||||
<?php if ($list[$i]['is_del']) { ?><li><a href="<?php echo $list[$i]['del_link']; ?>" onclick="return comment_delete();">삭제<i class="fas fa-trash-alt"></i></a></li><?php } ?>
|
||||
<li><a href="#none" class="more_opt_close">닫기<i class="fas fa-times"></i></a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<script>
|
||||
$(function() {
|
||||
// 댓글 옵션창 열기
|
||||
$(".btn_cm_opt").on("click", function(){
|
||||
$(this).parent("div").children(".bo_vc_act").show();
|
||||
});
|
||||
|
||||
$(".more_opt_close").on("click", function(){
|
||||
$('.bo_vc_act').hide();
|
||||
});
|
||||
|
||||
// 댓글 옵션창 닫기
|
||||
$(document).mouseup(function (e){
|
||||
var container = $(".bo_vc_act");
|
||||
if( container.has(e.target).length === 0)
|
||||
container.hide();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</article>
|
||||
<?php } ?>
|
||||
<?php if ($i == 0) { //댓글이 없다면 ?><p id="bo_vc_empty">등록된 댓글이 없습니다.</p><?php } ?>
|
||||
|
||||
</section>
|
||||
<!-- } 댓글 끝 -->
|
||||
|
||||
<?php if ($is_comment_write) {
|
||||
if($w == '')
|
||||
$w = 'c';
|
||||
?>
|
||||
<!-- 댓글 쓰기 시작 { -->
|
||||
<aside id="bo_vc_w" class="bo_vc_w">
|
||||
<h2>댓글쓰기</h2>
|
||||
<form name="fviewcomment" id="fviewcomment" action="<?php echo $comment_action_url; ?>" onsubmit="return fviewcomment_submit(this);" method="post" autocomplete="off">
|
||||
<input type="hidden" name="w" value="<?php echo $w ?>" id="w">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="wr_id" value="<?php echo $wr_id ?>">
|
||||
<input type="hidden" name="comment_id" value="<?php echo $c_id ?>" id="comment_id">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<input type="hidden" name="sfl" value="<?php echo $sfl ?>">
|
||||
<input type="hidden" name="stx" value="<?php echo $stx ?>">
|
||||
<input type="hidden" name="spt" value="<?php echo $spt ?>">
|
||||
<input type="hidden" name="page" value="<?php echo $page ?>">
|
||||
<input type="hidden" name="is_good" value="">
|
||||
|
||||
<span class="sound_only">내용</span>
|
||||
<?php if ($comment_min || $comment_max) { ?><strong id="char_cnt"><span id="char_count"></span>글자</strong><?php } ?>
|
||||
<textarea id="wr_content" name="wr_content" maxlength="10000" required class="required" title="내용" placeholder="댓글내용을 입력해주세요"
|
||||
<?php if ($comment_min || $comment_max) { ?>onkeyup="check_byte('wr_content', 'char_count');"<?php } ?>><?php echo $c_wr_content; ?></textarea>
|
||||
<?php if ($comment_min || $comment_max) { ?><script> check_byte('wr_content', 'char_count'); </script><?php } ?>
|
||||
<script>
|
||||
$(document).on("keyup change", "textarea#wr_content[maxlength]", function() {
|
||||
var str = $(this).val()
|
||||
var mx = parseInt($(this).attr("maxlength"))
|
||||
if (str.length > mx) {
|
||||
$(this).val(str.substr(0, mx));
|
||||
return false;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<div class="bo_vc_w_wr">
|
||||
<div class="bo_vc_w_info">
|
||||
<?php if ($is_guest) { ?>
|
||||
<label for="wr_name" class="sound_only">이름<strong> 필수</strong></label>
|
||||
<input type="text" name="wr_name" value="<?php echo get_cookie("ck_sns_name"); ?>" id="wr_name" required class="frm_input required" size="25" placeholder="이름">
|
||||
<label for="wr_password" class="sound_only">비밀번호<strong> 필수</strong></label>
|
||||
<input type="password" name="wr_password" id="wr_password" required class="frm_input required" size="25" placeholder="비밀번호">
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
if($board['bo_use_sns'] && ($config['cf_facebook_appid'] || $config['cf_twitter_key'])) {
|
||||
?>
|
||||
<span class="sound_only">SNS 동시등록</span>
|
||||
<span id="bo_vc_send_sns"></span>
|
||||
<?php } ?>
|
||||
<?php if ($is_guest) { ?>
|
||||
<?php echo $captcha_html; ?>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<div class="btn_confirm">
|
||||
<span class="secret_cm chk_box">
|
||||
<input type="checkbox" name="wr_secret" value="secret" id="wr_secret" class="selec_chk">
|
||||
<label for="wr_secret"><span></span>비밀글</label>
|
||||
</span>
|
||||
<button type="submit" id="btn_submit" class="btn_submit">댓글등록</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</aside>
|
||||
|
||||
<script>
|
||||
var save_before = '';
|
||||
var save_html = document.getElementById('bo_vc_w').innerHTML;
|
||||
|
||||
function good_and_write()
|
||||
{
|
||||
var f = document.fviewcomment;
|
||||
if (fviewcomment_submit(f)) {
|
||||
f.is_good.value = 1;
|
||||
f.submit();
|
||||
} else {
|
||||
f.is_good.value = 0;
|
||||
}
|
||||
}
|
||||
|
||||
function fviewcomment_submit(f)
|
||||
{
|
||||
var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자
|
||||
|
||||
f.is_good.value = 0;
|
||||
|
||||
var subject = "";
|
||||
var content = "";
|
||||
$.ajax({
|
||||
url: g5_bbs_url+"/ajax.filter.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
"subject": "",
|
||||
"content": f.wr_content.value
|
||||
},
|
||||
dataType: "json",
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function(data, textStatus) {
|
||||
subject = data.subject;
|
||||
content = data.content;
|
||||
}
|
||||
});
|
||||
|
||||
if (content) {
|
||||
alert("내용에 금지단어('"+content+"')가 포함되어있습니다");
|
||||
f.wr_content.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 양쪽 공백 없애기
|
||||
var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자
|
||||
document.getElementById('wr_content').value = document.getElementById('wr_content').value.replace(pattern, "");
|
||||
if (char_min > 0 || char_max > 0)
|
||||
{
|
||||
check_byte('wr_content', 'char_count');
|
||||
var cnt = parseInt(document.getElementById('char_count').innerHTML);
|
||||
if (char_min > 0 && char_min > cnt)
|
||||
{
|
||||
alert("댓글은 "+char_min+"글자 이상 쓰셔야 합니다.");
|
||||
return false;
|
||||
} else if (char_max > 0 && char_max < cnt)
|
||||
{
|
||||
alert("댓글은 "+char_max+"글자 이하로 쓰셔야 합니다.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (!document.getElementById('wr_content').value)
|
||||
{
|
||||
alert("댓글을 입력하여 주십시오.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (typeof(f.wr_name) != 'undefined')
|
||||
{
|
||||
f.wr_name.value = f.wr_name.value.replace(pattern, "");
|
||||
if (f.wr_name.value == '')
|
||||
{
|
||||
alert('이름이 입력되지 않았습니다.');
|
||||
f.wr_name.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof(f.wr_password) != 'undefined')
|
||||
{
|
||||
f.wr_password.value = f.wr_password.value.replace(pattern, "");
|
||||
if (f.wr_password.value == '')
|
||||
{
|
||||
alert('비밀번호가 입력되지 않았습니다.');
|
||||
f.wr_password.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
<?php if($is_guest) echo chk_captcha_js(); ?>
|
||||
|
||||
set_comment_token(f);
|
||||
|
||||
document.getElementById("btn_submit").disabled = "disabled";
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function comment_box(comment_id, work)
|
||||
{
|
||||
var el_id,
|
||||
form_el = 'fviewcomment',
|
||||
respond = document.getElementById(form_el);
|
||||
|
||||
// 댓글 아이디가 넘어오면 답변, 수정
|
||||
if (comment_id)
|
||||
{
|
||||
if (work == 'c')
|
||||
el_id = 'reply_' + comment_id;
|
||||
else
|
||||
el_id = 'edit_' + comment_id;
|
||||
}
|
||||
else
|
||||
el_id = 'bo_vc_w';
|
||||
|
||||
if (save_before != el_id)
|
||||
{
|
||||
if (save_before)
|
||||
{
|
||||
document.getElementById(save_before).style.display = 'none';
|
||||
}
|
||||
|
||||
document.getElementById(el_id).style.display = '';
|
||||
document.getElementById(el_id).appendChild(respond);
|
||||
//입력값 초기화
|
||||
document.getElementById('wr_content').value = '';
|
||||
|
||||
// 댓글 수정
|
||||
if (work == 'cu')
|
||||
{
|
||||
document.getElementById('wr_content').value = document.getElementById('save_comment_' + comment_id).value;
|
||||
if (typeof char_count != 'undefined')
|
||||
check_byte('wr_content', 'char_count');
|
||||
if (document.getElementById('secret_comment_'+comment_id).value)
|
||||
document.getElementById('wr_secret').checked = true;
|
||||
else
|
||||
document.getElementById('wr_secret').checked = false;
|
||||
}
|
||||
|
||||
document.getElementById('comment_id').value = comment_id;
|
||||
document.getElementById('w').value = work;
|
||||
|
||||
if(save_before)
|
||||
$("#captcha_reload").trigger("click");
|
||||
|
||||
save_before = el_id;
|
||||
}
|
||||
}
|
||||
|
||||
function comment_delete()
|
||||
{
|
||||
return confirm("이 댓글을 삭제하시겠습니까?");
|
||||
}
|
||||
|
||||
comment_box('', 'c'); // 댓글 입력폼이 보이도록 처리하기위해서 추가 (root님)
|
||||
|
||||
<?php if($board['bo_use_sns'] && ($config['cf_facebook_appid'] || $config['cf_twitter_key'])) { ?>
|
||||
|
||||
$(function() {
|
||||
// sns 등록
|
||||
$("#bo_vc_send_sns").load(
|
||||
"<?php echo G5_SNS_URL; ?>/view_comment_write.sns.skin.php?bo_table=<?php echo $bo_table; ?>",
|
||||
function() {
|
||||
save_html = document.getElementById('bo_vc_w').innerHTML;
|
||||
}
|
||||
);
|
||||
});
|
||||
<?php } ?>
|
||||
</script>
|
||||
<?php } ?>
|
||||
<!-- } 댓글 쓰기 끝 -->
|
||||
<script>
|
||||
jQuery(function($) {
|
||||
//댓글열기
|
||||
$(".cmt_btn").click(function(e){
|
||||
e.preventDefault();
|
||||
$(this).toggleClass("cmt_btn_op");
|
||||
$("#bo_vc").toggle();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
@charset "utf-8";
|
||||
|
||||
/* ### 기본 스타일 커스터마이징 시작 ### */
|
||||
|
||||
/* 게시판 버튼 */
|
||||
/* 목록 버튼 */
|
||||
#bo_gall a.btn_b01 {}
|
||||
#bo_gall a.btn_b01:focus, #bo_gall a.btn_b01:hover {}
|
||||
#bo_gall a.btn_b02 {}
|
||||
#bo_gall a.btn_b02:focus, #bo_gall a.btn_b02:hover {}
|
||||
#bo_gall a.btn_admin {} /* 관리자 전용 버튼 */
|
||||
#bo_gall a.btn_admin:focus, #bo_gall .btn_admin:hover {}
|
||||
|
||||
/* 읽기 버튼 */
|
||||
#bo_v a.btn_b01 {}
|
||||
#bo_v a.btn_b01:focus, #bo_v a.btn_b01:hover {}
|
||||
#bo_v a.btn_b02 {}
|
||||
#bo_v a.btn_b02:focus, #bo_v a.btn_b02:hover {}
|
||||
#bo_v a.btn_admin {} /* 관리자 전용 버튼 */
|
||||
#bo_v a.btn_admin:focus, #bo_v a.btn_admin:hover {}
|
||||
|
||||
/* 쓰기 버튼 */
|
||||
#bo_w .btn_confirm {} /* 서식단계 진행 */
|
||||
#bo_w .btn_submit {padding:0 20px;font-size:1.167em}
|
||||
#bo_w button.btn_submit {}
|
||||
#bo_w fieldset .btn_submit {}
|
||||
#bo_w .btn_cancel {font-size:1.167em;border-radius:3px}
|
||||
#bo_w button.btn_cancel {}
|
||||
#bo_w .btn_cancel:focus, #bo_w .btn_cancel:hover {}
|
||||
#bo_w a.btn_frmline, #bo_w button.btn_frmline {} /* 우편번호검색버튼 등 */
|
||||
#bo_w button.btn_frmline {}
|
||||
|
||||
/* 기본 테이블 */
|
||||
/* 읽기 내 테이블 */
|
||||
#bo_v .tbl_head01 {}
|
||||
#bo_v .tbl_head01 caption {}
|
||||
#bo_v .tbl_head01 thead th {}
|
||||
#bo_v .tbl_head01 thead a {}
|
||||
#bo_v .tbl_head01 thead th input {} /* middle 로 하면 게시판 읽기에서 목록 사용시 체크박스 라인 깨짐 */
|
||||
#bo_v .tbl_head01 tfoot th {}
|
||||
#bo_v .tbl_head01 tfoot td {}
|
||||
#bo_v .tbl_head01 tbody th {}
|
||||
#bo_v .tbl_head01 td {}
|
||||
#bo_v .tbl_head01 a {}
|
||||
#bo_v td.empty_table {}
|
||||
|
||||
/* 쓰기 테이블 */
|
||||
#bo_w table {}
|
||||
#bo_w caption {}
|
||||
#bo_w .frm_info {}
|
||||
#bo_w .frm_address {}
|
||||
#bo_w .frm_file {}
|
||||
|
||||
#bo_w .tbl_frm01 {}
|
||||
#bo_w .tbl_frm01 th {}
|
||||
#bo_w .tbl_frm01 td {}
|
||||
#bo_w .tbl_frm01 textarea, #bo_w tbl_frm01 .frm_input {}
|
||||
#bo_w .tbl_frm01 textarea {}
|
||||
#bo_w .tbl_frm01 a {}
|
||||
|
||||
/* 필수입력 */
|
||||
#bo_w .required, #bo_w textarea.required {}
|
||||
|
||||
#bo_w .cke_sc {}
|
||||
#bo_w button.btn_cke_sc {}
|
||||
#bo_w .cke_sc_def {}
|
||||
#bo_w .cke_sc_def dl {}
|
||||
#bo_w .cke_sc_def dl:after {}
|
||||
#bo_w .cke_sc_def dt, #bo_w .cke_sc_def dd {}
|
||||
#bo_w .cke_sc_def dt {}
|
||||
#bo_w .cke_sc_def dd {}
|
||||
|
||||
/* ### 기본 스타일 커스터마이징 끝 ### */
|
||||
|
||||
/* 게시판 목록 */
|
||||
#bo_cate {padding:0px;margin:10px 0; margin-bottom:20px; border-bottom:1px solid #ddd}
|
||||
#bo_cate h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_cate ul {zoom:1}
|
||||
#bo_cate ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_cate li {display:inline-block;padding:0px; min-width:150px; padding-right:2px; text-align:center;}
|
||||
#bo_cate a {display:block;line-height:40px;padding:0 20px;border-radius:0px;border:1px solid #ddd; background:#fff; border-bottom:0px; text-align:center;}
|
||||
#bo_cate a:focus, #bo_cate a:hover, #bo_cate a:active {text-decoration:none;background:#d2d6dc; border:1px solid #d2d6dc; border-bottom:0px;}
|
||||
#bo_cate #bo_cate_on {z-index:2;background:#333;color:#fff;font-weight:500; border:1px solid #333; border-bottom:0px; /*border-bottom-color:#1977b5;
|
||||
-webkit-box-shadow: inset 0 2px 5px rgb(33, 135, 202);
|
||||
-moz-box-shadow: inset 0 2px 5px rgb(33, 135, 202);
|
||||
box-shadow:inset 0 2px 5px rgb(33, 135, 202);*/}
|
||||
.td_subject img {margin-left:3px}
|
||||
|
||||
.selec_chk {position:absolute;top:0;left:0;width:0;height:0;opacity:0;outline:0;z-index:-1;overflow:hidden}
|
||||
.chk_box {position:relative}
|
||||
.chk_box input[type="checkbox"] + label {position:relative;padding-left:20px;color:#676e70;vertical-align:baseline; }
|
||||
.chk_box input[type="checkbox"] + label:hover{color:#2172f8}
|
||||
.chk_box input[type="checkbox"] + label span {position:absolute;top:10px;left:10px;width:15px;height:15px;display:block;background:#fff;border:1px solid #d0d4df;border-radius:3px; z-index:10;}
|
||||
.chk_box input[type="checkbox"]:checked + label {color:#000}
|
||||
.chk_box input[type="checkbox"]:checked + label span {background:url(./img/chk.png) no-repeat 50% 50% #3a8afd;border-color:#1471f6;border-radius:3px; }
|
||||
.all_chk.chk_box input[type="checkbox"] + label span {top:0;left:0; margin-left:0px; margin-top:3px; margin-right:5px;}
|
||||
|
||||
|
||||
/* 갤러리 목록 */
|
||||
#bo_gall h2 {margin:0;padding:0;width:1px;height:1px;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_gall #gall_ul {margin:10px -10px 0;padding:0;list-style:none;zoom:1}
|
||||
#bo_gall #gall_ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_gall .gall_li {}
|
||||
#bo_gall .gall_li .gall_chk {position:absolute;top:0;left:0;padding:5px}
|
||||
#bo_gall .gall_box {position:relative;margin:0 0 50px 0;border-radius:0 0 2px 2px}
|
||||
|
||||
.gall_row .col-gn-0,.gall_row .col-gn-1,.gall_row .col-gn-2,.gall_row .col-gn-3,.gall_row .col-gn-4,.gall_row .col-gn-5,.gall_row .col-gn-6,.gall_row .col-gn-7,.gall_row .col-gn-8,.gall_row .col-gn-9,.gall_row .col-gn-10 {position:relative;min-height:1px;padding-left:10px;*padding-left:0;padding-right:10px;*padding-right:0;float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-left:0}
|
||||
.gall_row .col-gn-0,.gall_row .col-gn-1 {width:100%}
|
||||
.gall_row .col-gn-2 {width:50%}
|
||||
.gall_row .col-gn-3 {width:33.33333333%}
|
||||
.gall_row .col-gn-4 {width:25%}
|
||||
.gall_row .col-gn-5 {width:20%}
|
||||
.gall_row .col-gn-6 {width:16.66666667%}
|
||||
.gall_row .col-gn-7 {width:14.28571428%}
|
||||
.gall_row .col-gn-8 {width:12.5%}
|
||||
.gall_row .col-gn-9 {width:11.11111111%}
|
||||
.gall_row .col-gn-10 {width:10%}
|
||||
|
||||
.gall_row .box_clear {clear:both}
|
||||
|
||||
#bo_gall .gall_now .gall_text_href a {color:#ff3061}
|
||||
|
||||
#bo_gall .gall_href a:link, #bo_gall .gall_href a:focus, #bo_gall .gall_href a:hover {text-decoration:none}
|
||||
#bo_gall .gall_img {border-bottom:1px solid #eee;text-align:center; /*max-height:200px;*/overflow:hidden}
|
||||
#bo_gall .gall_img a,#bo_gall .gall_img .no_image,#bo_gall .gall_img .is_notice {display:block}
|
||||
#bo_gall .gall_img img{max-width:100%;height:auto !important; transition: transform 1s; -webkit-transition: -webkit-transform 1s;}
|
||||
#bo_gall .gall_img img:hover { transform: scale(1.2, 1.2); -webkit-transform: scale(1.2, 1.2); }
|
||||
#bo_gall .gall_img video{max-width:100%;height:auto !important;}
|
||||
#bo_gall .gall_img video:hover {}
|
||||
|
||||
#bo_gall .gall_img span {display:inline-block;background:#eaeaea;text-align:center;line-height:200px;text-transform:uppercase;font-weight:bold;font-size:1.25em;color:#777}
|
||||
|
||||
#bo_gall .gall_text_href {margin:0px 0; padding:10px; background-color:#f6f6f6}
|
||||
#bo_gall .gall_text_href a {font-weight:bold}
|
||||
#bo_gall .gall_text_href img {margin:0 0 0 4px}
|
||||
#bo_gall .bo_tit {display:block; /*line-height:30px;*/ font-weight:700;color:#000;font-size:1.1em}
|
||||
#bo_gall .bo_tit .cnt_cmt {background:#fff;color:#333;font-size:0.7em;height:15px;line-height:15px;padding:0px 5px; padding-bottom:0px; border-radius:3px;vertical-align:middle; border:1px solid #aaa; margin-left:3px; }
|
||||
#bo_gall .bo_cnt {color:#acacac;line-height:18px; display:none;}
|
||||
#bo_gall .profile_img img {border-radius:50%}
|
||||
#bo_gall .bo_tit .fa-heart {display:inline-block;line-height:14px;width:16px;font-size:0.833em;color:#C42828;background:none;text-align:center;border-radius:2px;font-size:12px;border:0px solid #cbe3e8;vertical-align:middle; margin-top:3px;}
|
||||
#bo_gall .bo_tit .fa-lock {display:inline-block;line-height:14px;width:16px;font-size:0.833em;color:#666;background:none;text-align:center;border-radius:2px;font-size:12px;border:0px solid #cbe3e8;vertical-align:middle; margin-top:3px;}
|
||||
#bo_gall .bo_tit .new_icon {display:inline-block;width:28px; height:15px; line-height:13px;font-size:0.7em; letter-spacing:0.05em; color:#fff;background:#3071CA;text-align:center;border-radius:2px;margin-left:2px;font-weight:normal;vertical-align:middle; margin-top:0px; margin-right:1px;}
|
||||
#bo_gall .bo_tit .hot_icon {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#1EA362;background:#ffb9b9;text-align:center;border-radius:2px;vertical-align:middle}
|
||||
#bo_gall .bo_tit .fa-download {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#F19717;background:none;text-align:center;border-radius:2px;margin-left:5px;vertical-align:middle; margin-top:3px;}
|
||||
#bo_gall .bo_tit .fa-link {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#BB51FD;background:none;text-align:center; border-radius:2px;margin-left:5px;vertical-align:middle; margin-top:3px;}
|
||||
|
||||
|
||||
|
||||
|
||||
#bo_gall .gall_info {line-height:1.5em;line-height:20px; padding:5px 10px; padding-bottom:10px; background:#f6f6f6; font-size:0.9em;}
|
||||
#bo_gall .gall_info strong {display:inline-block;margin:0}
|
||||
#bo_gall .gall_info i {font-size:12px}
|
||||
#bo_gall .gall_info .gall_date,
|
||||
#bo_gall .gall_info .gall_view {display:inline-block;margin-right:10px;color:#777}
|
||||
#bo_gall .gall_name{padding:5px 10px; background:#f6f6f6;}
|
||||
|
||||
#bo_gall .gall_option {position:absolute;bottom:10px;right:10px; font-size:0.9em;}
|
||||
#bo_gall .gall_option strong {background:#f6f6f6;padding:5px 10px;border-radius:30px;
|
||||
/*-webkit-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
-moz-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2)*/}
|
||||
|
||||
/* 게시판 목록 공통 */
|
||||
#bo_btn_top {margin:10px 0}
|
||||
#bo_btn_top:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_fx {margin-bottom:5px;float:right;zoom:1}
|
||||
.bo_fx:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_fx ul {margin:0;padding:0;list-style:none}
|
||||
#bo_list_total {float:left;line-height:34px;font-size:0.92em;color:#4e546f}
|
||||
|
||||
.btn_bo_user {float:right;margin:0;padding:0;list-style:none}
|
||||
.btn_bo_user li {float:left;width:auto;text-align:center;margin-left:5px;background:#fff}
|
||||
.btn_bo_user > li {position:relative}
|
||||
.btn_bo_adm {float:left}
|
||||
.btn_bo_adm li {float:left;margin-right:5px}
|
||||
.btn_bo_adm input {padding:0 8px;border:0;background:#d4d4d4;color:#666;text-decoration:none;vertical-align:middle}
|
||||
.bo_notice td {background:#fff6fa !important;border-bottom:1px solid #f8e6ee}
|
||||
.bo_notice td a {font-weight:bold}
|
||||
.bo_notice .notice_icon {display:inline-block;line-height:25px;border-radius:5px;font-weight:bold;color:#f9267f}
|
||||
|
||||
.more_opt {display:none;position:absolute;top:45px;right:0;background:#fff;border:1px solid #b8bfc4;z-index:999}
|
||||
.more_opt:before {content:"";position:absolute;top:-8px;right:13px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent}
|
||||
.more_opt:after {content:"";position:absolute;top:-6px;right:13px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
.more_opt li {border-bottom:1px solid #f1f1f1;padding:10px;float:inherit;width:120px;margin:0;color:#6b757c;text-align:left}
|
||||
.more_opt li.wid_s {width:70px;}
|
||||
.more_opt li:last-child {border-bottom:0}
|
||||
.more_opt li button, .more_opt li a {width:100%;border:0;background:#fff;color:#6b757c; text-align:left;}
|
||||
.more_opt li:hover a,
|
||||
.more_opt li:hover button {color:#000}
|
||||
.more_opt li i {float:right;line-height:20px}
|
||||
|
||||
.td_num strong {color:#000}
|
||||
/*.bo_cate_link {font-size:0.9em; float:left;display:block;margin-right:10px;background:#666;color:#fff;font-weight:normal !important;height:20px;line-height:10px;padding:5px 8px;border-radius:5px;font-size:0.95em} *//* 글제목줄 분류스타일 */
|
||||
.bo_cate_link{display:block; background:none; color:#333; border-bottom:1px solid #ddd; padding-bottom:10px; margin-bottom:5px; overflow:hidden; width:100%; text-align:center;}
|
||||
.bo_cate_link:hover {text-decoration:none}
|
||||
.bo_current {color:#e8180c}
|
||||
#bo_list .profile_img {display:inline-block;margin-right:5px}
|
||||
#bo_list .profile_img img {border-radius:50%}
|
||||
#bo_list .cnt_cmt {background:#fff;color:#333;font-size:11px;height:16px;line-height:16px;padding:3px 5px; padding-bottom:1px; border-radius:3px;vertical-align:middle; border:1px solid #666; margin-left:3px; }
|
||||
#bo_gall li.empty_list {padding:85px 0;text-align:center}
|
||||
|
||||
.bo_sch_wrap {display:none;width:100%;height:100%;position:fixed;top:0;left:0;z-index:999999999;}
|
||||
.bo_sch {position:absolute;top:50%;left:50%;background:#fff;text-align:left;width:500px;max-height:300px;margin-left:-250px;margin-top:-150px;overflow-y:auto;border-radius:5px;-webkit-box-shadow:1px 1px 18px rgba(0,0,0,0.2);-moz-box-shadow:1px 1px 18px rgba(0,0,0,0.2);box-shadow:1px 1px 18px rgba(0,0,0,0.2);border:1px solid #dde7e9;background:#fff;border-radius:3px}
|
||||
.bo_sch:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_sch h3 {padding:15px;border-bottom:1px solid #e8e8e8}
|
||||
.bo_sch legend {background:red}
|
||||
.bo_sch form {padding:15px;display:block}
|
||||
.bo_sch select {border:0;width:100%;height:40px;border:1px solid #dddddd;border-radius:2px; /*-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075)*/}
|
||||
.bo_sch .sch_bar {display:inline-block;width:100%;clear:both;margin-top:15px;border:1px solid #dddddd;border-radius:2px; /*-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075)*/}
|
||||
.bo_sch .sch_input {width:80%;height:38px;border:0;padding:0;background-color:transparent;float:left}
|
||||
.bo_sch .sch_btn {height:38px;float:right;color:#656565;background:none;border:0;width:40px;font-size:15px}
|
||||
.bo_sch .bo_sch_cls {position:absolute;right:0;top:0;color:#b5b8bb;border:0;padding:12px 15px;font-size:16px;background:#fff}
|
||||
.bo_sch_bg {background:#000;background:rgba(0,0,0,0.5);width:100%;height:100%;}
|
||||
|
||||
/* 게시판 쓰기 */
|
||||
#char_count_desc {display:block;margin:0 0 5px;padding:0}
|
||||
#char_count_wrap {margin:5px 0 0;text-align:right}
|
||||
#char_count {font-weight:bold}
|
||||
|
||||
#autosave_wrapper {position:relative}
|
||||
#autosave_pop {display:none;z-index:10;position:absolute !important;top:34px;right:0;width:350px;height:auto !important;height:180px;max-height:180px;border:1px solid #565656;background:#fff;
|
||||
-webkit-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
-moz-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2)}
|
||||
#autosave_pop:before {content:"";position:absolute;top:-8px;right:45px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #000 transparent}
|
||||
#autosave_pop:after {content:"";position:absolute;top:-7px;right:45px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
html.no-overflowscrolling #autosave_pop {height:auto;max-height:10000px !important} /* overflow 미지원 기기 대응 */
|
||||
#autosave_pop strong {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#autosave_pop div {text-align:center;margin:0 !important}
|
||||
#autosave_pop button {margin:0;padding:0;border:0}
|
||||
#autosave_pop ul {padding:15px;border-top:1px solid #e9e9e9;list-style:none;overflow-y:scroll;height:130px;border-bottom:1px solid #e8e8e8}
|
||||
#autosave_pop li {padding:8px 5px;border-bottom:1px solid #fff;background:#eee;zoom:1}
|
||||
#autosave_pop li:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#autosave_pop a {display:block;float:left}
|
||||
#autosave_pop span {display:block;float:right;font-size:0.92em;font-style:italic;color:#999}
|
||||
.autosave_close {cursor:pointer;width:100%;height:30px;background:none;color:#888;font-weight:bold;font-size:0.92em}
|
||||
.autosave_close:hover {background:#f3f3f3;color:#3597d9}
|
||||
.autosave_content {display:none}
|
||||
.autosave_del {background:url(./img/close_btn.png) no-repeat 50% 50%;text-indent:-999px;overflow:hidden;height:20px;width:20px}
|
||||
|
||||
/* 게시판 읽기 */
|
||||
#bo_v {margin-bottom:20px;background:#fff;box-sizing:border-box}
|
||||
|
||||
#bo_v_table {position:absolute;top:0;right:16px;margin:0;padding:0 5px;height:25px;background:#ff3061;color:#fff;font-weight:bold;line-height:2.2em}
|
||||
|
||||
#bo_v_title {border-top:1px solid #000; border-bottom:1px solid #ddd; padding:15px 15px; padding-left:10px; background-color:#F7F7F7;}
|
||||
#bo_v_title .bo_v_cate {display:inline-block;line-height:20px;background:#666;color:#fff;padding:0 10px;border-radius:3px; font-size:0.9em;}
|
||||
#bo_v_title .bo_v_tit {display:inline-block;font-size:1.5em;margin:5px 0 0;word-break:break-all}
|
||||
|
||||
#bo_v_info {margin:0;border-bottom:1px solid #f1f1f1;color:#666}
|
||||
#bo_v_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_info h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
|
||||
#bo_v_info .profile_info {margin:20px 0 10px;display:inline-block;float:left}
|
||||
#bo_v_info .profile_info .pf_img {float:left;margin-right:10px}
|
||||
#bo_v_info .profile_info .pf_img img {border-radius:50%;width:50px;height:50px}
|
||||
#bo_v_info .profile_info .profile_info_ct {float:left;padding:5px 0;line-height:18px}
|
||||
|
||||
#bo_v_info strong {display:inline-block;margin:0 10px 0 0;font-weight:normal}
|
||||
#bo_v_info .sv_member,
|
||||
#bo_v_info .sv_guest,
|
||||
#bo_v_info .member,
|
||||
#bo_v_info .guest {font-weight:bold}
|
||||
#bo_v_info .profile_img {display:none}
|
||||
#bo_v_info .sv_member {color:#000}
|
||||
#bo_v_info .if_date {margin:0;color:#888}
|
||||
|
||||
#bo_v_file h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_file ul {margin:0;list-style:none}
|
||||
#bo_v_file li {padding:15px;position:relative;margin:10px 0;border:1px solid #dfdfdf;border-radius:5px;
|
||||
-webkit-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
-moz-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%)}
|
||||
#bo_v_file li i {float:left;color:#b2b2b2;font-size:2.35em;margin-right:20px}
|
||||
#bo_v_file a {float:left;display:block;text-decoration:none;word-wrap:break-word;color:#000}
|
||||
#bo_v_file a:focus, #bo_v_file li:hover a, #bo_v_file a:active {text-decoration:underline;color:#3a8afd}
|
||||
#bo_v_file img {float:left;margin:0 10px 0 0}
|
||||
#bo_v_file .bo_v_file_cnt {color:#b2b2b2;font-size:0.92em}
|
||||
#bo_v_file li:hover {border-color:#bed4f4;color:#bed4f4}
|
||||
#bo_v_file li:hover i {color:#3a8afd}
|
||||
#bo_v_file li:hover .bo_v_file_cnt {color:#99c2fc}
|
||||
|
||||
|
||||
#bo_v_link h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_file ul {margin:0;list-style:none}
|
||||
#bo_v_link li {padding:15px;position:relative;margin:10px 0;border:1px solid #dfdfdf;border-radius:5px;
|
||||
-webkit-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
-moz-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%)}
|
||||
#bo_v_link li i {float:left;color:#b2b2b2;font-size:2.35em;margin-right:20px}
|
||||
#bo_v_link a {float:left;display:block;text-decoration:none;word-wrap:break-word;color:#000}
|
||||
#bo_v_link a:focus, #bo_v_link li:hover a, #bo_v_link a:active {text-decoration:underline;color:#3a8afd}
|
||||
#bo_v_link .bo_v_link_cnt {color:#b2b2b2;font-size:0.92em}
|
||||
#bo_v_link li:hover {border-color:#bed4f4;color:#bed4f4}
|
||||
#bo_v_link li:hover i {color:#3a8afd}
|
||||
#bo_v_link li:hover .bo_v_link_cnt {color:#99c2fc}
|
||||
|
||||
|
||||
#bo_v_top {zoom:1}
|
||||
#bo_v_top:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_top h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_top ul {padding:0;list-style:none;word-break:break-all}
|
||||
|
||||
#bo_v_bot {zoom:1}
|
||||
#bo_v_bot:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_bot h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_bot ul {padding:0;list-style:none}
|
||||
|
||||
.bo_v_com {margin:20px 0;float:right}
|
||||
.bo_v_com > li {position:relative;float:left;margin-left:5px}
|
||||
|
||||
.bo_v_nb {margin:20px 0;position:relative;clear:both;text-align:left}
|
||||
.bo_v_nb:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_v_nb li {border-top:1px solid #f1f1f1;padding:13px}
|
||||
.bo_v_nb li:last-child {border-bottom:1px solid #f1f1f1}
|
||||
.bo_v_nb li:hover {background:#f6f6f6}
|
||||
.bo_v_nb li i {font-size:13px;color:#b3b3b3}
|
||||
.bo_v_nb li .nb_tit {display:inline-block;padding-right:20px;color:#b3b3b3}
|
||||
.bo_v_nb li .nb_date {float:right;color:#b3b3b3}
|
||||
|
||||
#bo_v_atc {min-height:200px;height:auto !important;height:200px}
|
||||
#bo_v_atc_title {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
|
||||
#bo_v_img {width:100%;overflow:hidden;zoom:1}
|
||||
#bo_v_img:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_img a.view_image {display:block}
|
||||
#bo_v_img img {margin-bottom:20px;max-width:100%;height:auto}
|
||||
|
||||
#bo_v_con {margin:10px 0 30px;width:100%;line-height:1.7em;min-height:200px;word-break:break-all;overflow:hidden; padding-top:50px;}
|
||||
#bo_v_con a {color:#000;text-decoration:underline}
|
||||
#bo_v_con img {max-width:100%;height:auto}
|
||||
|
||||
#bo_v_act {margin-bottom:30px;text-align:center}
|
||||
#bo_v_act .bo_v_act_gng {position:relative}
|
||||
#bo_v_act a {margin-right:5px;vertical-align:middle;color:#4a5158}
|
||||
#bo_v_act a:hover {background-color:#fff;color:#ff484f;border-color:#ff484f}
|
||||
#bo_v_act i {font-size:1.4em;margin-right:5px}
|
||||
#bo_v_act_good, #bo_v_act_nogood {display:none;position:absolute;top:30px;left:0;z-index:9999;padding:10px 0;width:165px;background:#ff3061;color:#fff;text-align:center}
|
||||
#bo_v_act .bo_v_good {display:inline-block;border:1px solid #dedede;width:70px;line-height:46px;border-radius:30px}
|
||||
#bo_v_act .bo_v_nogood {display:inline-block;border:1px solid #dedede;width:70px;line-height:46px;border-radius:30px}
|
||||
|
||||
#bo_v_sns {padding:0;list-style:none;zoom:1; display:inline-block; text-align:center;}
|
||||
#bo_v_sns:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_sns li {display:inline-block; width:135px;margin-right:5px;text-align:left}
|
||||
#bo_v_sns li a {height:35px;line-height:35px;text-align:center;border-radius:5px;color:#fff;font-size:0.95em}
|
||||
#bo_v_sns li img {vertical-align:middle;margin-right:5px}
|
||||
#bo_v_sns li .sns_f {display:block;background:#3b5997}
|
||||
#bo_v_sns li .sns_t {display:block;background:#09aeee}
|
||||
#bo_v_sns li .sns_g {display:block;background:#ea4026}
|
||||
#bo_v_sns li .sns_k {display:block;background:#fbe300}
|
||||
|
||||
#bo_v_share {position:relative;padding:20px 0; text-align:center;}
|
||||
#bo_v_share:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_share .btn {padding:0 10px;color:#555;font-weight:normal;font-size:1em;width:80px;line-height:35px;height:35px;border-color:#d5d5d5;border-radius:5px; margin-top:-3px;}
|
||||
#bo_v_share .btn:hover {background:#fff}
|
||||
#bo_v_share .btn i {margin-right:5px;color:#4b5259;vertical-align:middle}
|
||||
|
||||
/* 게시판 댓글 */
|
||||
.cmt_btn {width:100%;text-align:left;border:0;border-bottom:1px solid #f0f0f0;background:#fff;font-weight:bold;margin:30px 0 0px;padding:0 0 15px}
|
||||
.cmt_btn span.total {position:relative;display:inline-block;margin-right:5px;font-size:1em;color:#3a8afd}
|
||||
.cmt_btn span.cmt_more {float:right;display:inline-block;width:15px;height:10px;background:url(./img/btn_cmt.png) no-repeat right 2px;margin-top:5px}
|
||||
.cmt_btn_op span.cmt_more {background-position:right -8px}
|
||||
.cmt_btn b {font-size:1.2em;color:#000}
|
||||
.cmt_btn span.total:after {position:absolute;bottom:-17px;left:0;display:inline-block;background:#000000;content:"";width:100%;height:2px}
|
||||
#bo_vc {}
|
||||
#bo_vc h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc article {margin:20px 0;position:relative;border-bottom:1px solid #f0f0f0}
|
||||
#bo_vc article:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc article .profile_img img {border-radius:50%}
|
||||
#bo_vc article .pf_img {float:left;margin-right:10px}
|
||||
#bo_vc article .pf_img img {border-radius:50%;width:50px;height:50px}
|
||||
#bo_vc article .cm_wrap {float:left;max-width:100%;width:90%;}
|
||||
#bo_vc header {position:relative;width:100%}
|
||||
#bo_vc header:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc header .profile_img {display:none}
|
||||
#bo_vc header .icon_reply {position:absolute;top:15px;left:-20px}
|
||||
#bo_vc .member, #bo_vc .guest, #bo_vc .sv_member, #bo_vc .sv_guest {font-weight:bold}
|
||||
.bo_vc_hdinfo {color:#777; padding-left:15px;}
|
||||
#bo_vc h1 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc .cmt_contents {line-height:1.8em;padding:0 0 20px}
|
||||
#bo_vc p a {text-decoration:underline}
|
||||
#bo_vc p a.s_cmt {text-decoration:underline;color:#ed6479}
|
||||
#bo_vc_empty {margin:0;padding:80px 0 !important;color:#777;text-align:center}
|
||||
#bo_vc #bo_vc_winfo {float:left}
|
||||
#bo_vc .bo_vl_opt {position:absolute;top:0;right:0}
|
||||
|
||||
.bo_vc_act {display:none;position:absolute;right:0;top:40px;width:70px;text-align:left;border:1px solid #b8bfc4;margin:0;list-style:none;background:#fff;zoom:1;z-index:9999}
|
||||
.bo_vc_act:before {content:"";position:absolute;top:-8px;right:5px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent}
|
||||
.bo_vc_act:after {content:"";position:absolute;top:-6px;right:5px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
.bo_vc_act li {border-bottom:1px solid #f0f0f0; width:100%;}
|
||||
.bo_vc_act li:last-child {border-bottom:0}
|
||||
.bo_vc_act li a {display:inline-block; width:100%; padding:10px 10px; color:#6b757c; text-align:left;}
|
||||
.bo_vc_act li a i {display:block; float:right;line-height:20px;}
|
||||
.bo_vc_act li a:hover {color:#3a8afd}
|
||||
|
||||
.bo_vc_w {position:relative;margin:10px 0;display:block}
|
||||
.bo_vc_w:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_vc_w h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
.bo_vc_w #char_cnt {display:block;margin:0 0 5px}
|
||||
.bo_vc_w textarea {border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;width:100%;height:120px;
|
||||
/*-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||
-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||
box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1)*/}
|
||||
#wr_secret {}
|
||||
.bo_vc_w_info {margin:10px 0;float:left}
|
||||
.bo_vc_w_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_vc_w_info .frm_input {float:left;margin-right:5px}
|
||||
.bo_vc_w_info #captcha {padding-top:10px;display:block;clear:both}
|
||||
.bo_vc_w .btn_confirm {clear:both;margin-top:10px}
|
||||
.bo_vc_w .btn_confirm label {display:inline-block;margin-right:10px;border-radius:3px;font-size:1.5em;text-align:center}
|
||||
.bo_vc_w .btn_submit {height:45px;padding:0 20px;border-radius:3px;font-weight:bold;font-size:1.083em}
|
||||
.bo_vc_w .btn_confirm .secret_cm label {font-size:1em !important}
|
||||
.bo_vc_w_wr:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.secret_cm {display:inline-block;float:left; position:absolute; left:0;}
|
||||
|
||||
#bo_vc_send_sns {display:inline-block;float:left}
|
||||
#bo_vc_sns {display:inline-block;margin:0;padding:0;list-style:none;zoom:1}
|
||||
#bo_vc_sns:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc_sns li {float:left;margin:0 5px 0 0}
|
||||
#bo_vc_sns .sns_li_f {border-radius:3px;background:#3a589b;height:40px;line-height:40px;padding:0 0 0 10px}
|
||||
#bo_vc_sns .sns_li_t {border-radius:3px;background:#00aced;height:40px;line-height:40px;padding:0 0 0 10px}
|
||||
#bo_vc_sns .sns_li_off {background:#bbb}
|
||||
#bo_vc_sns a {display:inline-block;padding:0 15px 0 5px}
|
||||
#bo_vc_sns input {margin:0 5px 0 0}
|
||||
|
||||
/*글쓰기*/
|
||||
#bo_w .bo_v_option li {display:inline-block;float:left;text-align:left;margin:0 5px 0 0; margin-right:15px;}
|
||||
#bo_w .bo_v_option li label {vertical-align:baseline}
|
||||
#bo_w .bo_v_option .chk_box input[type="checkbox"] + label span {margin-left:-10px; margin-top:-6px; margin-right:5px;}
|
||||
#bo_w .write_div {margin:10px 0;position:relative}
|
||||
#bo_w .write_div:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_w .bo_w_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_w .bo_w_info .frm_input {float:left;margin-bottom:1%}
|
||||
#bo_w #wr_password, #bo_w #wr_homepage {margin-left:1%}
|
||||
#bo_w .wr_content.smarteditor2 iframe {background:#fff}
|
||||
#bo_w .bo_w_tit {position:relative}
|
||||
#bo_w .bo_w_tit .frm_input {padding-right:120px}
|
||||
#bo_w .bo_w_tit #btn_autosave {position:absolute;top:5px;right:5px;line-height:30px;height:30px}
|
||||
#bo_w .bo_w_link label {position:absolute;top:1px;left:1px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;font-size:1.2em;text-align:center;color:#b2b2b2}
|
||||
#bo_w .bo_w_link .frm_input {padding-left:50px}
|
||||
#bo_w .bo_w_flie .lb_icon {position:absolute;top:0px;left:0px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;font-size:1.2em;text-align:center;color:#b2b2b2}
|
||||
#bo_w .bo_w_flie .frm_file {padding-left:50px;margin-top:3px}
|
||||
#bo_w .bo_w_flie .file_wr {position:relative;border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;height:40px;margin:0}
|
||||
#bo_w .bo_w_flie .frm_input {margin:10px 0 0}
|
||||
#bo_w .bo_w_flie .file_del {position:absolute;top:10px;right:10px;font-size:0.92em;color:#7d7d7d}
|
||||
#bo_w .bo_w_select select {border:1px solid #dddddd;width:100%;height:40px;border-radius:3px}
|
||||
|
||||
.secret_cm.chk_box input[type="checkbox"] + label span {margin-left:-10px; margin-top:-6px; margin-right:5px;}
|
||||
</style>
|
||||
@@ -0,0 +1,712 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
<section id="bo_w">
|
||||
<h2 class="sound_only"><?php echo $g5['title'] ?></h2>
|
||||
|
||||
<!-- 게시물 작성/수정 시작 { -->
|
||||
<form name="fwrite" id="fwrite" action="<?php echo $action_url ?>" onsubmit="return fwrite_submit(this);" method="post" enctype="multipart/form-data" autocomplete="off" style="width:<?php echo $width; ?>">
|
||||
<input type="hidden" name="uid" value="<?php echo get_uniqid(); ?>">
|
||||
<input type="hidden" name="w" value="<?php echo $w ?>">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="wr_id" value="<?php echo $wr_id ?>">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<input type="hidden" name="sfl" value="<?php echo $sfl ?>">
|
||||
<input type="hidden" name="stx" value="<?php echo $stx ?>">
|
||||
<input type="hidden" name="spt" value="<?php echo $spt ?>">
|
||||
<input type="hidden" name="sst" value="<?php echo $sst ?>">
|
||||
<input type="hidden" name="sod" value="<?php echo $sod ?>">
|
||||
<input type="hidden" name="page" value="<?php echo $page ?>">
|
||||
<?php
|
||||
$option = '';
|
||||
$option_hidden = '';
|
||||
if ($is_notice || $is_html || $is_secret || $is_mail) {
|
||||
$option = '';
|
||||
if ($is_notice) {
|
||||
$option .= PHP_EOL.'<li class="chk_box"><input type="checkbox" id="notice" name="notice" class="selec_chk" value="1" '.$notice_checked.'>'.PHP_EOL.'<label for="notice"><span></span>공지</label></li>';
|
||||
}
|
||||
if ($is_html) {
|
||||
if ($is_dhtml_editor) {
|
||||
$option_hidden .= '<input type="hidden" value="html1" name="html">';
|
||||
} else {
|
||||
$option .= PHP_EOL.'<li class="chk_box"><input type="checkbox" id="html" name="html" onclick="html_auto_br(this);" class="selec_chk" value="'.$html_value.'" '.$html_checked.'>'.PHP_EOL.'<label for="html"><span></span>html</label></li>';
|
||||
}
|
||||
}
|
||||
if ($is_secret) {
|
||||
if ($is_admin || $is_secret==1) {
|
||||
$option .= PHP_EOL.'<li class="chk_box"><input type="checkbox" id="secret" name="secret" class="selec_chk" value="secret" '.$secret_checked.'>'.PHP_EOL.'<label for="secret"><span></span>비밀글</label></li>';
|
||||
} else {
|
||||
$option_hidden .= '<input type="hidden" name="secret" value="secret">';
|
||||
}
|
||||
}
|
||||
if ($is_mail) {
|
||||
$option .= PHP_EOL.'<li class="chk_box"><input type="checkbox" id="mail" name="mail" class="selec_chk" value="mail" '.$recv_email_checked.'>'.PHP_EOL.'<label for="mail"><span></span>답변메일받기</label></li>';
|
||||
}
|
||||
}
|
||||
echo $option_hidden;
|
||||
?>
|
||||
|
||||
<?php if ($is_category) { ?>
|
||||
<div class="bo_w_select write_div">
|
||||
<label for="ca_name" class="sound_only">분류<strong>필수</strong></label>
|
||||
<select name="ca_name" id="ca_name" required>
|
||||
<option value="">분류를 선택하세요</option>
|
||||
<?php echo $category_option ?>
|
||||
</select>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<div class="bo_w_info write_div">
|
||||
<?php if ($is_name) { ?>
|
||||
<label for="wr_name" class="sound_only">이름<strong>필수</strong></label>
|
||||
<input type="text" name="wr_name" value="<?php echo $name ?>" id="wr_name" required class="frm_input half_input required" placeholder="이름">
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($is_password) { ?>
|
||||
<label for="wr_password" class="sound_only">비밀번호<strong>필수</strong></label>
|
||||
<input type="password" name="wr_password" id="wr_password" <?php echo $password_required ?> class="frm_input half_input <?php echo $password_required ?>" placeholder="비밀번호">
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($is_email) { ?>
|
||||
<label for="wr_email" class="sound_only">이메일</label>
|
||||
<input type="text" name="wr_email" value="<?php echo $email ?>" id="wr_email" class="frm_input half_input email " placeholder="이메일">
|
||||
<?php } ?>
|
||||
|
||||
|
||||
<?php if ($is_homepage) { ?>
|
||||
<label for="wr_homepage" class="sound_only">홈페이지</label>
|
||||
<input type="text" name="wr_homepage" value="<?php echo $homepage ?>" id="wr_homepage" class="frm_input half_input" size="50" placeholder="홈페이지">
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
<?php if ($option) { ?>
|
||||
<div class="write_div">
|
||||
<span class="sound_only">옵션</span>
|
||||
<ul class="bo_v_option">
|
||||
<?php echo $option ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<div class="bo_w_tit write_div">
|
||||
<label for="wr_subject" class="sound_only">제목<strong>필수</strong></label>
|
||||
|
||||
<div id="autosave_wrapper" class="write_div">
|
||||
<input type="text" name="wr_subject" value="<?php echo $subject ?>" id="wr_subject" required class="frm_input full_input required" size="50" maxlength="255" placeholder="제목">
|
||||
<?php if ($is_member) { // 임시 저장된 글 기능 ?>
|
||||
<script src="<?php echo G5_JS_URL; ?>/autosave.js"></script>
|
||||
<?php if($editor_content_js) echo $editor_content_js; ?>
|
||||
<button type="button" id="btn_autosave" class="btn_frmline">임시 저장된 글 (<span id="autosave_count"><?php echo $autosave_count; ?></span>)</button>
|
||||
<div id="autosave_pop">
|
||||
<strong>임시 저장된 글 목록</strong>
|
||||
<ul></ul>
|
||||
<div><button type="button" class="autosave_close">닫기</button></div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<div class="write_div">
|
||||
<label for="wr_content" class="sound_only">내용<strong>필수</strong></label>
|
||||
<div class="wr_content <?php echo $is_dhtml_editor ? $config['cf_editor'] : ''; ?>">
|
||||
<?php if($write_min || $write_max) { ?>
|
||||
<!-- 최소/최대 글자 수 사용 시 -->
|
||||
<p id="char_count_desc">이 게시판은 최소 <strong><?php echo $write_min; ?></strong>글자 이상, 최대 <strong><?php echo $write_max; ?></strong>글자 이하까지 글을 쓰실 수 있습니다.</p>
|
||||
<?php } ?>
|
||||
<?php echo $editor_html; // 에디터 사용시는 에디터로, 아니면 textarea 로 노출 ?>
|
||||
<?php if($write_min || $write_max) { ?>
|
||||
<!-- 최소/최대 글자 수 사용 시 -->
|
||||
<div id="char_count_wrap"><span id="char_count"></span>글자</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<?php for ($i=1; $is_link && $i<=G5_LINK_COUNT; $i++) { ?>
|
||||
<div class="bo_w_link write_div">
|
||||
<label for="wr_link<?php echo $i ?>"><i class="fa fa-link" aria-hidden="true"></i><span class="sound_only"> 링크 #<?php echo $i ?></span></label>
|
||||
<input type="text" name="wr_link<?php echo $i ?>" value="<?php if($w=="u"){ echo $write['wr_link'.$i]; } ?>" id="wr_link<?php echo $i ?>" class="frm_input full_input" size="50">
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<?php for ($i=0; $is_file && $i<$file_count; $i++) { ?>
|
||||
<div class="bo_w_flie write_div">
|
||||
<div class="file_wr write_div">
|
||||
<label for="bf_file_<?php echo $i+1 ?>" class="lb_icon"><i class="fa fa-folder-open" aria-hidden="true"></i><span class="sound_only"> 파일 #<?php echo $i+1 ?></span></label>
|
||||
<input type="file" name="bf_file[]" id="bf_file_<?php echo $i+1 ?>" title="파일첨부 <?php echo $i+1 ?> : 용량 <?php echo $upload_max_filesize ?> 이하만 업로드 가능" class="frm_file ">
|
||||
</div>
|
||||
<?php if ($is_file_content) { ?>
|
||||
<input type="text" name="bf_content[]" value="<?php echo ($w == 'u') ? $file[$i]['bf_content'] : ''; ?>" title="파일 설명을 입력해주세요." class="full_input frm_input" size="50" placeholder="파일 설명을 입력해주세요.">
|
||||
<?php } ?>
|
||||
|
||||
<?php if($w == 'u' && $file[$i]['file']) { ?>
|
||||
<span class="file_del">
|
||||
<input type="checkbox" id="bf_file_del<?php echo $i ?>" name="bf_file_del[<?php echo $i; ?>]" value="1"> <label for="bf_file_del<?php echo $i ?>"><?php echo $file[$i]['source'].'('.$file[$i]['size'].')'; ?> 파일 삭제</label>
|
||||
</span>
|
||||
<?php } ?>
|
||||
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
|
||||
<?php if ($is_use_captcha) { //자동등록방지 ?>
|
||||
<div class="write_div">
|
||||
<?php echo $captcha_html ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<div class="btn_confirm write_div">
|
||||
<a href="<?php echo get_pretty_url($bo_table); ?>" class="btn_cancel btn">취소</a>
|
||||
<button type="submit" id="btn_submit" accesskey="s" class="btn_submit btn">작성완료</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
<?php if($write_min || $write_max) { ?>
|
||||
// 글자수 제한
|
||||
var char_min = parseInt(<?php echo $write_min; ?>); // 최소
|
||||
var char_max = parseInt(<?php echo $write_max; ?>); // 최대
|
||||
check_byte("wr_content", "char_count");
|
||||
|
||||
$(function() {
|
||||
$("#wr_content").on("keyup", function() {
|
||||
check_byte("wr_content", "char_count");
|
||||
});
|
||||
});
|
||||
|
||||
<?php } ?>
|
||||
function html_auto_br(obj)
|
||||
{
|
||||
if (obj.checked) {
|
||||
result = confirm("자동 줄바꿈을 하시겠습니까?\n\n자동 줄바꿈은 게시물 내용중 줄바뀐 곳을<br>태그로 변환하는 기능입니다.");
|
||||
if (result)
|
||||
obj.value = "html2";
|
||||
else
|
||||
obj.value = "html1";
|
||||
}
|
||||
else
|
||||
obj.value = "";
|
||||
}
|
||||
|
||||
function fwrite_submit(f)
|
||||
{
|
||||
<?php echo $editor_js; // 에디터 사용시 자바스크립트에서 내용을 폼필드로 넣어주며 내용이 입력되었는지 검사함 ?>
|
||||
|
||||
var subject = "";
|
||||
var content = "";
|
||||
$.ajax({
|
||||
url: g5_bbs_url+"/ajax.filter.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
"subject": f.wr_subject.value,
|
||||
"content": f.wr_content.value
|
||||
},
|
||||
dataType: "json",
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function(data, textStatus) {
|
||||
subject = data.subject;
|
||||
content = data.content;
|
||||
}
|
||||
});
|
||||
|
||||
if (subject) {
|
||||
alert("제목에 금지단어('"+subject+"')가 포함되어있습니다");
|
||||
f.wr_subject.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (content) {
|
||||
alert("내용에 금지단어('"+content+"')가 포함되어있습니다");
|
||||
if (typeof(ed_wr_content) != "undefined")
|
||||
ed_wr_content.returnFalse();
|
||||
else
|
||||
f.wr_content.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (document.getElementById("char_count")) {
|
||||
if (char_min > 0 || char_max > 0) {
|
||||
var cnt = parseInt(check_byte("wr_content", "char_count"));
|
||||
if (char_min > 0 && char_min > cnt) {
|
||||
alert("내용은 "+char_min+"글자 이상 쓰셔야 합니다.");
|
||||
return false;
|
||||
}
|
||||
else if (char_max > 0 && char_max < cnt) {
|
||||
alert("내용은 "+char_max+"글자 이하로 쓰셔야 합니다.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<?php echo $captcha_js; // 캡챠 사용시 자바스크립트에서 입력된 캡챠를 검사함 ?>
|
||||
|
||||
document.getElementById("btn_submit").disabled = "disabled";
|
||||
|
||||
return true;
|
||||
}
|
||||
</script>
|
||||
</section>
|
||||
<!-- } 게시물 작성/수정 끝 -->
|
||||
|
||||
|
||||
|
||||
<style>
|
||||
@charset "utf-8";
|
||||
|
||||
/* ### 기본 스타일 커스터마이징 시작 ### */
|
||||
|
||||
/* 게시판 버튼 */
|
||||
/* 목록 버튼 */
|
||||
#bo_gall a.btn_b01 {}
|
||||
#bo_gall a.btn_b01:focus, #bo_gall a.btn_b01:hover {}
|
||||
#bo_gall a.btn_b02 {}
|
||||
#bo_gall a.btn_b02:focus, #bo_gall a.btn_b02:hover {}
|
||||
#bo_gall a.btn_admin {} /* 관리자 전용 버튼 */
|
||||
#bo_gall a.btn_admin:focus, #bo_gall .btn_admin:hover {}
|
||||
|
||||
/* 읽기 버튼 */
|
||||
#bo_v a.btn_b01 {}
|
||||
#bo_v a.btn_b01:focus, #bo_v a.btn_b01:hover {}
|
||||
#bo_v a.btn_b02 {}
|
||||
#bo_v a.btn_b02:focus, #bo_v a.btn_b02:hover {}
|
||||
#bo_v a.btn_admin {} /* 관리자 전용 버튼 */
|
||||
#bo_v a.btn_admin:focus, #bo_v a.btn_admin:hover {}
|
||||
|
||||
/* 쓰기 버튼 */
|
||||
#bo_w .btn_confirm {} /* 서식단계 진행 */
|
||||
#bo_w .btn_submit {padding:0 20px;font-size:1.167em}
|
||||
#bo_w button.btn_submit {}
|
||||
#bo_w fieldset .btn_submit {}
|
||||
#bo_w .btn_cancel {font-size:1.167em;border-radius:3px}
|
||||
#bo_w button.btn_cancel {}
|
||||
#bo_w .btn_cancel:focus, #bo_w .btn_cancel:hover {}
|
||||
#bo_w a.btn_frmline, #bo_w button.btn_frmline {} /* 우편번호검색버튼 등 */
|
||||
#bo_w button.btn_frmline {}
|
||||
|
||||
/* 기본 테이블 */
|
||||
/* 읽기 내 테이블 */
|
||||
#bo_v .tbl_head01 {}
|
||||
#bo_v .tbl_head01 caption {}
|
||||
#bo_v .tbl_head01 thead th {}
|
||||
#bo_v .tbl_head01 thead a {}
|
||||
#bo_v .tbl_head01 thead th input {} /* middle 로 하면 게시판 읽기에서 목록 사용시 체크박스 라인 깨짐 */
|
||||
#bo_v .tbl_head01 tfoot th {}
|
||||
#bo_v .tbl_head01 tfoot td {}
|
||||
#bo_v .tbl_head01 tbody th {}
|
||||
#bo_v .tbl_head01 td {}
|
||||
#bo_v .tbl_head01 a {}
|
||||
#bo_v td.empty_table {}
|
||||
|
||||
/* 쓰기 테이블 */
|
||||
#bo_w table {}
|
||||
#bo_w caption {}
|
||||
#bo_w .frm_info {}
|
||||
#bo_w .frm_address {}
|
||||
#bo_w .frm_file {}
|
||||
|
||||
#bo_w .tbl_frm01 {}
|
||||
#bo_w .tbl_frm01 th {}
|
||||
#bo_w .tbl_frm01 td {}
|
||||
#bo_w .tbl_frm01 textarea, #bo_w tbl_frm01 .frm_input {}
|
||||
#bo_w .tbl_frm01 textarea {}
|
||||
#bo_w .tbl_frm01 a {}
|
||||
|
||||
/* 필수입력 */
|
||||
#bo_w .required, #bo_w textarea.required {}
|
||||
|
||||
#bo_w .cke_sc {}
|
||||
#bo_w button.btn_cke_sc {}
|
||||
#bo_w .cke_sc_def {}
|
||||
#bo_w .cke_sc_def dl {}
|
||||
#bo_w .cke_sc_def dl:after {}
|
||||
#bo_w .cke_sc_def dt, #bo_w .cke_sc_def dd {}
|
||||
#bo_w .cke_sc_def dt {}
|
||||
#bo_w .cke_sc_def dd {}
|
||||
|
||||
/* ### 기본 스타일 커스터마이징 끝 ### */
|
||||
|
||||
/* 게시판 목록 */
|
||||
#bo_cate {padding:0px;margin:10px 0; margin-bottom:20px; border-bottom:1px solid #ddd}
|
||||
#bo_cate h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_cate ul {zoom:1}
|
||||
#bo_cate ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_cate li {display:inline-block;padding:0px; min-width:150px; padding-right:2px; text-align:center;}
|
||||
#bo_cate a {display:block;line-height:40px;padding:0 20px;border-radius:0px;border:1px solid #ddd; background:#fff; border-bottom:0px; text-align:center;}
|
||||
#bo_cate a:focus, #bo_cate a:hover, #bo_cate a:active {text-decoration:none;background:#d2d6dc; border:1px solid #d2d6dc; border-bottom:0px;}
|
||||
#bo_cate #bo_cate_on {z-index:2;background:#333;color:#fff;font-weight:500; border:1px solid #333; border-bottom:0px; /*border-bottom-color:#1977b5;
|
||||
-webkit-box-shadow: inset 0 2px 5px rgb(33, 135, 202);
|
||||
-moz-box-shadow: inset 0 2px 5px rgb(33, 135, 202);
|
||||
box-shadow:inset 0 2px 5px rgb(33, 135, 202);*/}
|
||||
.td_subject img {margin-left:3px}
|
||||
|
||||
.selec_chk {position:absolute;top:0;left:0;width:0;height:0;opacity:0;outline:0;z-index:-1;overflow:hidden}
|
||||
.chk_box {position:relative}
|
||||
.chk_box input[type="checkbox"] + label {position:relative;padding-left:20px;color:#676e70;vertical-align:baseline; }
|
||||
.chk_box input[type="checkbox"] + label:hover{color:#2172f8}
|
||||
.chk_box input[type="checkbox"] + label span {position:absolute;top:10px;left:10px;width:15px;height:15px;display:block;background:#fff;border:1px solid #d0d4df;border-radius:3px; z-index:10;}
|
||||
.chk_box input[type="checkbox"]:checked + label {color:#000}
|
||||
.chk_box input[type="checkbox"]:checked + label span {background:url(./img/chk.png) no-repeat 50% 50% #3a8afd;border-color:#1471f6;border-radius:3px; }
|
||||
.all_chk.chk_box input[type="checkbox"] + label span {top:0;left:0; margin-left:0px; margin-top:3px; margin-right:5px;}
|
||||
|
||||
|
||||
/* 갤러리 목록 */
|
||||
#bo_gall h2 {margin:0;padding:0;width:1px;height:1px;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_gall #gall_ul {margin:10px -10px 0;padding:0;list-style:none;zoom:1}
|
||||
#bo_gall #gall_ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_gall .gall_li {}
|
||||
#bo_gall .gall_li .gall_chk {position:absolute;top:0;left:0;padding:5px}
|
||||
#bo_gall .gall_box {position:relative;margin:0 0 50px 0;border-radius:0 0 2px 2px}
|
||||
|
||||
.gall_row .col-gn-0,.gall_row .col-gn-1,.gall_row .col-gn-2,.gall_row .col-gn-3,.gall_row .col-gn-4,.gall_row .col-gn-5,.gall_row .col-gn-6,.gall_row .col-gn-7,.gall_row .col-gn-8,.gall_row .col-gn-9,.gall_row .col-gn-10 {position:relative;min-height:1px;padding-left:10px;*padding-left:0;padding-right:10px;*padding-right:0;float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-left:0}
|
||||
.gall_row .col-gn-0,.gall_row .col-gn-1 {width:100%}
|
||||
.gall_row .col-gn-2 {width:50%}
|
||||
.gall_row .col-gn-3 {width:33.33333333%}
|
||||
.gall_row .col-gn-4 {width:25%}
|
||||
.gall_row .col-gn-5 {width:20%}
|
||||
.gall_row .col-gn-6 {width:16.66666667%}
|
||||
.gall_row .col-gn-7 {width:14.28571428%}
|
||||
.gall_row .col-gn-8 {width:12.5%}
|
||||
.gall_row .col-gn-9 {width:11.11111111%}
|
||||
.gall_row .col-gn-10 {width:10%}
|
||||
|
||||
.gall_row .box_clear {clear:both}
|
||||
|
||||
#bo_gall .gall_now .gall_text_href a {color:#ff3061}
|
||||
|
||||
#bo_gall .gall_href a:link, #bo_gall .gall_href a:focus, #bo_gall .gall_href a:hover {text-decoration:none}
|
||||
#bo_gall .gall_img {border-bottom:1px solid #eee;text-align:center; /*max-height:200px;*/overflow:hidden}
|
||||
#bo_gall .gall_img a,#bo_gall .gall_img .no_image,#bo_gall .gall_img .is_notice {display:block}
|
||||
#bo_gall .gall_img img{max-width:100%;height:auto !important; transition: transform 1s; -webkit-transition: -webkit-transform 1s;}
|
||||
#bo_gall .gall_img img:hover { transform: scale(1.2, 1.2); -webkit-transform: scale(1.2, 1.2); }
|
||||
#bo_gall .gall_img video{max-width:100%;height:auto !important;}
|
||||
#bo_gall .gall_img video:hover {}
|
||||
|
||||
#bo_gall .gall_img span {display:inline-block;background:#eaeaea;text-align:center;line-height:200px;text-transform:uppercase;font-weight:bold;font-size:1.25em;color:#777}
|
||||
|
||||
#bo_gall .gall_text_href {margin:0px 0; padding:10px; background-color:#f6f6f6}
|
||||
#bo_gall .gall_text_href a {font-weight:bold}
|
||||
#bo_gall .gall_text_href img {margin:0 0 0 4px}
|
||||
#bo_gall .bo_tit {display:block; /*line-height:30px;*/ font-weight:700;color:#000;font-size:1.1em}
|
||||
#bo_gall .bo_tit .cnt_cmt {background:#fff;color:#333;font-size:0.7em;height:15px;line-height:15px;padding:0px 5px; padding-bottom:0px; border-radius:3px;vertical-align:middle; border:1px solid #aaa; margin-left:3px; }
|
||||
#bo_gall .bo_cnt {color:#acacac;line-height:18px; display:none;}
|
||||
#bo_gall .profile_img img {border-radius:50%}
|
||||
#bo_gall .bo_tit .fa-heart {display:inline-block;line-height:14px;width:16px;font-size:0.833em;color:#C42828;background:none;text-align:center;border-radius:2px;font-size:12px;border:0px solid #cbe3e8;vertical-align:middle; margin-top:3px;}
|
||||
#bo_gall .bo_tit .fa-lock {display:inline-block;line-height:14px;width:16px;font-size:0.833em;color:#666;background:none;text-align:center;border-radius:2px;font-size:12px;border:0px solid #cbe3e8;vertical-align:middle; margin-top:3px;}
|
||||
#bo_gall .bo_tit .new_icon {display:inline-block;width:28px; height:15px; line-height:13px;font-size:0.7em; letter-spacing:0.05em; color:#fff;background:#3071CA;text-align:center;border-radius:2px;margin-left:2px;font-weight:normal;vertical-align:middle; margin-top:0px; margin-right:1px;}
|
||||
#bo_gall .bo_tit .hot_icon {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#1EA362;background:#ffb9b9;text-align:center;border-radius:2px;vertical-align:middle}
|
||||
#bo_gall .bo_tit .fa-download {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#F19717;background:none;text-align:center;border-radius:2px;margin-left:5px;vertical-align:middle; margin-top:3px;}
|
||||
#bo_gall .bo_tit .fa-link {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#BB51FD;background:none;text-align:center; border-radius:2px;margin-left:5px;vertical-align:middle; margin-top:3px;}
|
||||
|
||||
|
||||
|
||||
|
||||
#bo_gall .gall_info {line-height:1.5em;line-height:20px; padding:5px 10px; padding-bottom:10px; background:#f6f6f6; font-size:0.9em;}
|
||||
#bo_gall .gall_info strong {display:inline-block;margin:0}
|
||||
#bo_gall .gall_info i {font-size:12px}
|
||||
#bo_gall .gall_info .gall_date,
|
||||
#bo_gall .gall_info .gall_view {display:inline-block;margin-right:10px;color:#777}
|
||||
#bo_gall .gall_name{padding:5px 10px; background:#f6f6f6;}
|
||||
|
||||
#bo_gall .gall_option {position:absolute;bottom:10px;right:10px; font-size:0.9em;}
|
||||
#bo_gall .gall_option strong {background:#f6f6f6;padding:5px 10px;border-radius:30px;
|
||||
/*-webkit-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
-moz-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2)*/}
|
||||
|
||||
/* 게시판 목록 공통 */
|
||||
#bo_btn_top {margin:10px 0}
|
||||
#bo_btn_top:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_fx {margin-bottom:5px;float:right;zoom:1}
|
||||
.bo_fx:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_fx ul {margin:0;padding:0;list-style:none}
|
||||
#bo_list_total {float:left;line-height:34px;font-size:0.92em;color:#4e546f}
|
||||
|
||||
.btn_bo_user {float:right;margin:0;padding:0;list-style:none}
|
||||
.btn_bo_user li {float:left;width:auto;text-align:center;margin-left:5px;background:#fff}
|
||||
.btn_bo_user > li {position:relative}
|
||||
.btn_bo_adm {float:left}
|
||||
.btn_bo_adm li {float:left;margin-right:5px}
|
||||
.btn_bo_adm input {padding:0 8px;border:0;background:#d4d4d4;color:#666;text-decoration:none;vertical-align:middle}
|
||||
.bo_notice td {background:#fff6fa !important;border-bottom:1px solid #f8e6ee}
|
||||
.bo_notice td a {font-weight:bold}
|
||||
.bo_notice .notice_icon {display:inline-block;line-height:25px;border-radius:5px;font-weight:bold;color:#f9267f}
|
||||
|
||||
.more_opt {display:none;position:absolute;top:45px;right:0;background:#fff;border:1px solid #b8bfc4;z-index:999}
|
||||
.more_opt:before {content:"";position:absolute;top:-8px;right:13px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent}
|
||||
.more_opt:after {content:"";position:absolute;top:-6px;right:13px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
.more_opt li {border-bottom:1px solid #f1f1f1;padding:10px;float:inherit;width:120px;margin:0;color:#6b757c;text-align:left}
|
||||
.more_opt li.wid_s {width:70px;}
|
||||
.more_opt li:last-child {border-bottom:0}
|
||||
.more_opt li button, .more_opt li a {width:100%;border:0;background:#fff;color:#6b757c; text-align:left;}
|
||||
.more_opt li:hover a,
|
||||
.more_opt li:hover button {color:#000}
|
||||
.more_opt li i {float:right;line-height:20px}
|
||||
|
||||
.td_num strong {color:#000}
|
||||
/*.bo_cate_link {font-size:0.9em; float:left;display:block;margin-right:10px;background:#666;color:#fff;font-weight:normal !important;height:20px;line-height:10px;padding:5px 8px;border-radius:5px;font-size:0.95em} *//* 글제목줄 분류스타일 */
|
||||
.bo_cate_link{display:block; background:none; color:#333; border-bottom:1px solid #ddd; padding-bottom:10px; margin-bottom:5px; overflow:hidden; width:100%; text-align:center;}
|
||||
.bo_cate_link:hover {text-decoration:none}
|
||||
.bo_current {color:#e8180c}
|
||||
#bo_list .profile_img {display:inline-block;margin-right:5px}
|
||||
#bo_list .profile_img img {border-radius:50%}
|
||||
#bo_list .cnt_cmt {background:#fff;color:#333;font-size:11px;height:16px;line-height:16px;padding:3px 5px; padding-bottom:1px; border-radius:3px;vertical-align:middle; border:1px solid #666; margin-left:3px; }
|
||||
#bo_gall li.empty_list {padding:85px 0;text-align:center}
|
||||
|
||||
.bo_sch_wrap {display:none;width:100%;height:100%;position:fixed;top:0;left:0;z-index:999999999;}
|
||||
.bo_sch {position:absolute;top:50%;left:50%;background:#fff;text-align:left;width:500px;max-height:300px;margin-left:-250px;margin-top:-150px;overflow-y:auto;border-radius:5px;-webkit-box-shadow:1px 1px 18px rgba(0,0,0,0.2);-moz-box-shadow:1px 1px 18px rgba(0,0,0,0.2);box-shadow:1px 1px 18px rgba(0,0,0,0.2);border:1px solid #dde7e9;background:#fff;border-radius:3px}
|
||||
.bo_sch:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_sch h3 {padding:15px;border-bottom:1px solid #e8e8e8}
|
||||
.bo_sch legend {background:red}
|
||||
.bo_sch form {padding:15px;display:block}
|
||||
.bo_sch select {border:0;width:100%;height:40px;border:1px solid #dddddd;border-radius:2px; /*-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075)*/}
|
||||
.bo_sch .sch_bar {display:inline-block;width:100%;clear:both;margin-top:15px;border:1px solid #dddddd;border-radius:2px; /*-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075)*/}
|
||||
.bo_sch .sch_input {width:80%;height:38px;border:0;padding:0;background-color:transparent;float:left}
|
||||
.bo_sch .sch_btn {height:38px;float:right;color:#656565;background:none;border:0;width:40px;font-size:15px}
|
||||
.bo_sch .bo_sch_cls {position:absolute;right:0;top:0;color:#b5b8bb;border:0;padding:12px 15px;font-size:16px;background:#fff}
|
||||
.bo_sch_bg {background:#000;background:rgba(0,0,0,0.5);width:100%;height:100%;}
|
||||
|
||||
/* 게시판 쓰기 */
|
||||
#char_count_desc {display:block;margin:0 0 5px;padding:0}
|
||||
#char_count_wrap {margin:5px 0 0;text-align:right}
|
||||
#char_count {font-weight:bold}
|
||||
|
||||
#autosave_wrapper {position:relative}
|
||||
#autosave_pop {display:none;z-index:10;position:absolute !important;top:34px;right:0;width:350px;height:auto !important;height:180px;max-height:180px;border:1px solid #565656;background:#fff;
|
||||
-webkit-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
-moz-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2)}
|
||||
#autosave_pop:before {content:"";position:absolute;top:-8px;right:45px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #000 transparent}
|
||||
#autosave_pop:after {content:"";position:absolute;top:-7px;right:45px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
html.no-overflowscrolling #autosave_pop {height:auto;max-height:10000px !important} /* overflow 미지원 기기 대응 */
|
||||
#autosave_pop strong {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#autosave_pop div {text-align:center;margin:0 !important}
|
||||
#autosave_pop button {margin:0;padding:0;border:0}
|
||||
#autosave_pop ul {padding:15px;border-top:1px solid #e9e9e9;list-style:none;overflow-y:scroll;height:130px;border-bottom:1px solid #e8e8e8}
|
||||
#autosave_pop li {padding:8px 5px;border-bottom:1px solid #fff;background:#eee;zoom:1}
|
||||
#autosave_pop li:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#autosave_pop a {display:block;float:left}
|
||||
#autosave_pop span {display:block;float:right;font-size:0.92em;font-style:italic;color:#999}
|
||||
.autosave_close {cursor:pointer;width:100%;height:30px;background:none;color:#888;font-weight:bold;font-size:0.92em}
|
||||
.autosave_close:hover {background:#f3f3f3;color:#3597d9}
|
||||
.autosave_content {display:none}
|
||||
.autosave_del {background:url(./img/close_btn.png) no-repeat 50% 50%;text-indent:-999px;overflow:hidden;height:20px;width:20px}
|
||||
|
||||
/* 게시판 읽기 */
|
||||
#bo_v {margin-bottom:20px;background:#fff;box-sizing:border-box}
|
||||
|
||||
#bo_v_table {position:absolute;top:0;right:16px;margin:0;padding:0 5px;height:25px;background:#ff3061;color:#fff;font-weight:bold;line-height:2.2em}
|
||||
|
||||
#bo_v_title {border-top:1px solid #000; border-bottom:1px solid #ddd; padding:15px 15px; padding-left:10px; background-color:#F7F7F7;}
|
||||
#bo_v_title .bo_v_cate {display:inline-block;line-height:20px;background:#666;color:#fff;padding:0 10px;border-radius:3px; font-size:0.9em;}
|
||||
#bo_v_title .bo_v_tit {display:inline-block;font-size:1.5em;margin:5px 0 0;word-break:break-all}
|
||||
|
||||
#bo_v_info {margin:0;border-bottom:1px solid #f1f1f1;color:#666}
|
||||
#bo_v_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_info h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
|
||||
#bo_v_info .profile_info {margin:20px 0 10px;display:inline-block;float:left}
|
||||
#bo_v_info .profile_info .pf_img {float:left;margin-right:10px}
|
||||
#bo_v_info .profile_info .pf_img img {border-radius:50%;width:50px;height:50px}
|
||||
#bo_v_info .profile_info .profile_info_ct {float:left;padding:5px 0;line-height:18px}
|
||||
|
||||
#bo_v_info strong {display:inline-block;margin:0 10px 0 0;font-weight:normal}
|
||||
#bo_v_info .sv_member,
|
||||
#bo_v_info .sv_guest,
|
||||
#bo_v_info .member,
|
||||
#bo_v_info .guest {font-weight:bold}
|
||||
#bo_v_info .profile_img {display:none}
|
||||
#bo_v_info .sv_member {color:#000}
|
||||
#bo_v_info .if_date {margin:0;color:#888}
|
||||
|
||||
#bo_v_file h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_file ul {margin:0;list-style:none}
|
||||
#bo_v_file li {padding:15px;position:relative;margin:10px 0;border:1px solid #dfdfdf;border-radius:5px;
|
||||
-webkit-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
-moz-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%)}
|
||||
#bo_v_file li i {float:left;color:#b2b2b2;font-size:2.35em;margin-right:20px}
|
||||
#bo_v_file a {float:left;display:block;text-decoration:none;word-wrap:break-word;color:#000}
|
||||
#bo_v_file a:focus, #bo_v_file li:hover a, #bo_v_file a:active {text-decoration:underline;color:#3a8afd}
|
||||
#bo_v_file img {float:left;margin:0 10px 0 0}
|
||||
#bo_v_file .bo_v_file_cnt {color:#b2b2b2;font-size:0.92em}
|
||||
#bo_v_file li:hover {border-color:#bed4f4;color:#bed4f4}
|
||||
#bo_v_file li:hover i {color:#3a8afd}
|
||||
#bo_v_file li:hover .bo_v_file_cnt {color:#99c2fc}
|
||||
|
||||
|
||||
#bo_v_link h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_file ul {margin:0;list-style:none}
|
||||
#bo_v_link li {padding:15px;position:relative;margin:10px 0;border:1px solid #dfdfdf;border-radius:5px;
|
||||
-webkit-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
-moz-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%)}
|
||||
#bo_v_link li i {float:left;color:#b2b2b2;font-size:2.35em;margin-right:20px}
|
||||
#bo_v_link a {float:left;display:block;text-decoration:none;word-wrap:break-word;color:#000}
|
||||
#bo_v_link a:focus, #bo_v_link li:hover a, #bo_v_link a:active {text-decoration:underline;color:#3a8afd}
|
||||
#bo_v_link .bo_v_link_cnt {color:#b2b2b2;font-size:0.92em}
|
||||
#bo_v_link li:hover {border-color:#bed4f4;color:#bed4f4}
|
||||
#bo_v_link li:hover i {color:#3a8afd}
|
||||
#bo_v_link li:hover .bo_v_link_cnt {color:#99c2fc}
|
||||
|
||||
|
||||
#bo_v_top {zoom:1}
|
||||
#bo_v_top:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_top h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_top ul {padding:0;list-style:none;word-break:break-all}
|
||||
|
||||
#bo_v_bot {zoom:1}
|
||||
#bo_v_bot:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_bot h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_bot ul {padding:0;list-style:none}
|
||||
|
||||
.bo_v_com {margin:20px 0;float:right}
|
||||
.bo_v_com > li {position:relative;float:left;margin-left:5px}
|
||||
|
||||
.bo_v_nb {margin:20px 0;position:relative;clear:both;text-align:left}
|
||||
.bo_v_nb:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_v_nb li {border-top:1px solid #f1f1f1;padding:13px}
|
||||
.bo_v_nb li:last-child {border-bottom:1px solid #f1f1f1}
|
||||
.bo_v_nb li:hover {background:#f6f6f6}
|
||||
.bo_v_nb li i {font-size:13px;color:#b3b3b3}
|
||||
.bo_v_nb li .nb_tit {display:inline-block;padding-right:20px;color:#b3b3b3}
|
||||
.bo_v_nb li .nb_date {float:right;color:#b3b3b3}
|
||||
|
||||
#bo_v_atc {min-height:200px;height:auto !important;height:200px}
|
||||
#bo_v_atc_title {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
|
||||
#bo_v_img {width:100%;overflow:hidden;zoom:1}
|
||||
#bo_v_img:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_img a.view_image {display:block}
|
||||
#bo_v_img img {margin-bottom:20px;max-width:100%;height:auto}
|
||||
|
||||
#bo_v_con {margin:10px 0 30px;width:100%;line-height:1.7em;min-height:200px;word-break:break-all;overflow:hidden; padding-top:50px;}
|
||||
#bo_v_con a {color:#000;text-decoration:underline}
|
||||
#bo_v_con img {max-width:100%;height:auto}
|
||||
|
||||
#bo_v_act {margin-bottom:30px;text-align:center}
|
||||
#bo_v_act .bo_v_act_gng {position:relative}
|
||||
#bo_v_act a {margin-right:5px;vertical-align:middle;color:#4a5158}
|
||||
#bo_v_act a:hover {background-color:#fff;color:#ff484f;border-color:#ff484f}
|
||||
#bo_v_act i {font-size:1.4em;margin-right:5px}
|
||||
#bo_v_act_good, #bo_v_act_nogood {display:none;position:absolute;top:30px;left:0;z-index:9999;padding:10px 0;width:165px;background:#ff3061;color:#fff;text-align:center}
|
||||
#bo_v_act .bo_v_good {display:inline-block;border:1px solid #dedede;width:70px;line-height:46px;border-radius:30px}
|
||||
#bo_v_act .bo_v_nogood {display:inline-block;border:1px solid #dedede;width:70px;line-height:46px;border-radius:30px}
|
||||
|
||||
#bo_v_sns {padding:0;list-style:none;zoom:1; display:inline-block; text-align:center;}
|
||||
#bo_v_sns:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_sns li {display:inline-block; width:135px;margin-right:5px;text-align:left}
|
||||
#bo_v_sns li a {height:35px;line-height:35px;text-align:center;border-radius:5px;color:#fff;font-size:0.95em}
|
||||
#bo_v_sns li img {vertical-align:middle;margin-right:5px}
|
||||
#bo_v_sns li .sns_f {display:block;background:#3b5997}
|
||||
#bo_v_sns li .sns_t {display:block;background:#09aeee}
|
||||
#bo_v_sns li .sns_g {display:block;background:#ea4026}
|
||||
#bo_v_sns li .sns_k {display:block;background:#fbe300}
|
||||
|
||||
#bo_v_share {position:relative;padding:20px 0; text-align:center;}
|
||||
#bo_v_share:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_share .btn {padding:0 10px;color:#555;font-weight:normal;font-size:1em;width:80px;line-height:35px;height:35px;border-color:#d5d5d5;border-radius:5px; margin-top:-3px;}
|
||||
#bo_v_share .btn:hover {background:#fff}
|
||||
#bo_v_share .btn i {margin-right:5px;color:#4b5259;vertical-align:middle}
|
||||
|
||||
/* 게시판 댓글 */
|
||||
.cmt_btn {width:100%;text-align:left;border:0;border-bottom:1px solid #f0f0f0;background:#fff;font-weight:bold;margin:30px 0 0px;padding:0 0 15px}
|
||||
.cmt_btn span.total {position:relative;display:inline-block;margin-right:5px;font-size:1em;color:#3a8afd}
|
||||
.cmt_btn span.cmt_more {float:right;display:inline-block;width:15px;height:10px;background:url(./img/btn_cmt.png) no-repeat right 2px;margin-top:5px}
|
||||
.cmt_btn_op span.cmt_more {background-position:right -8px}
|
||||
.cmt_btn b {font-size:1.2em;color:#000}
|
||||
.cmt_btn span.total:after {position:absolute;bottom:-17px;left:0;display:inline-block;background:#000000;content:"";width:100%;height:2px}
|
||||
#bo_vc {}
|
||||
#bo_vc h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc article {margin:20px 0;position:relative;border-bottom:1px solid #f0f0f0}
|
||||
#bo_vc article:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc article .profile_img img {border-radius:50%}
|
||||
#bo_vc article .pf_img {float:left;margin-right:10px}
|
||||
#bo_vc article .pf_img img {border-radius:50%;width:50px;height:50px}
|
||||
#bo_vc article .cm_wrap {float:left;max-width:100%;width:90%;}
|
||||
#bo_vc header {position:relative;width:100%}
|
||||
#bo_vc header:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc header .profile_img {display:none}
|
||||
#bo_vc header .icon_reply {position:absolute;top:15px;left:-20px}
|
||||
#bo_vc .member, #bo_vc .guest, #bo_vc .sv_member, #bo_vc .sv_guest {font-weight:bold}
|
||||
.bo_vc_hdinfo {color:#777; padding-left:15px;}
|
||||
#bo_vc h1 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc .cmt_contents {line-height:1.8em;padding:0 0 20px}
|
||||
#bo_vc p a {text-decoration:underline}
|
||||
#bo_vc p a.s_cmt {text-decoration:underline;color:#ed6479}
|
||||
#bo_vc_empty {margin:0;padding:80px 0 !important;color:#777;text-align:center}
|
||||
#bo_vc #bo_vc_winfo {float:left}
|
||||
#bo_vc .bo_vl_opt {position:absolute;top:0;right:0}
|
||||
|
||||
.bo_vc_act {display:none;position:absolute;right:0;top:40px;width:70px;text-align:left;border:1px solid #b8bfc4;margin:0;list-style:none;background:#fff;zoom:1;z-index:9999}
|
||||
.bo_vc_act:before {content:"";position:absolute;top:-8px;right:5px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent}
|
||||
.bo_vc_act:after {content:"";position:absolute;top:-6px;right:5px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
.bo_vc_act li {border-bottom:1px solid #f0f0f0; width:100%;}
|
||||
.bo_vc_act li:last-child {border-bottom:0}
|
||||
.bo_vc_act li a {display:inline-block; width:100%; padding:10px 10px; color:#6b757c; text-align:left;}
|
||||
.bo_vc_act li a i {display:block; float:right;line-height:20px;}
|
||||
.bo_vc_act li a:hover {color:#3a8afd}
|
||||
|
||||
.bo_vc_w {position:relative;margin:10px 0;display:block}
|
||||
.bo_vc_w:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_vc_w h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
.bo_vc_w #char_cnt {display:block;margin:0 0 5px}
|
||||
.bo_vc_w textarea {border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;width:100%;height:120px;
|
||||
/*-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||
-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||
box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1)*/}
|
||||
#wr_secret {}
|
||||
.bo_vc_w_info {margin:10px 0;float:left}
|
||||
.bo_vc_w_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_vc_w_info .frm_input {float:left;margin-right:5px}
|
||||
.bo_vc_w_info #captcha {padding-top:10px;display:block;clear:both}
|
||||
.bo_vc_w .btn_confirm {clear:both;margin-top:10px}
|
||||
.bo_vc_w .btn_confirm label {display:inline-block;margin-right:10px;border-radius:3px;font-size:1.5em;text-align:center}
|
||||
.bo_vc_w .btn_submit {height:45px;padding:0 20px;border-radius:3px;font-weight:bold;font-size:1.083em}
|
||||
.bo_vc_w .btn_confirm .secret_cm label {font-size:1em !important}
|
||||
.bo_vc_w_wr:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.secret_cm {display:inline-block;float:left; position:absolute; left:0;}
|
||||
|
||||
#bo_vc_send_sns {display:inline-block;float:left}
|
||||
#bo_vc_sns {display:inline-block;margin:0;padding:0;list-style:none;zoom:1}
|
||||
#bo_vc_sns:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc_sns li {float:left;margin:0 5px 0 0}
|
||||
#bo_vc_sns .sns_li_f {border-radius:3px;background:#3a589b;height:40px;line-height:40px;padding:0 0 0 10px}
|
||||
#bo_vc_sns .sns_li_t {border-radius:3px;background:#00aced;height:40px;line-height:40px;padding:0 0 0 10px}
|
||||
#bo_vc_sns .sns_li_off {background:#bbb}
|
||||
#bo_vc_sns a {display:inline-block;padding:0 15px 0 5px}
|
||||
#bo_vc_sns input {margin:0 5px 0 0}
|
||||
|
||||
/*글쓰기*/
|
||||
#bo_w .bo_v_option li {display:inline-block;float:left;text-align:left;margin:0 5px 0 0; margin-right:15px;}
|
||||
#bo_w .bo_v_option li label {vertical-align:baseline}
|
||||
#bo_w .bo_v_option .chk_box input[type="checkbox"] + label span {margin-left:-10px; margin-top:-6px; margin-right:5px;}
|
||||
#bo_w .write_div {margin:10px 0;position:relative}
|
||||
#bo_w .write_div:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_w .bo_w_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_w .bo_w_info .frm_input {float:left;margin-bottom:1%}
|
||||
#bo_w #wr_password, #bo_w #wr_homepage {margin-left:1%}
|
||||
#bo_w .wr_content.smarteditor2 iframe {background:#fff}
|
||||
#bo_w .bo_w_tit {position:relative}
|
||||
#bo_w .bo_w_tit .frm_input {padding-right:120px}
|
||||
#bo_w .bo_w_tit #btn_autosave {position:absolute;top:5px;right:5px;line-height:30px;height:30px}
|
||||
#bo_w .bo_w_link label {position:absolute;top:1px;left:1px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;font-size:1.2em;text-align:center;color:#b2b2b2}
|
||||
#bo_w .bo_w_link .frm_input {padding-left:50px}
|
||||
#bo_w .bo_w_flie .lb_icon {position:absolute;top:0px;left:0px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;font-size:1.2em;text-align:center;color:#b2b2b2}
|
||||
#bo_w .bo_w_flie .frm_file {padding-left:50px;margin-top:-2px}
|
||||
#bo_w .bo_w_flie .file_wr {position:relative;border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;height:40px;margin:0}
|
||||
#bo_w .bo_w_flie .frm_input {margin:10px 0 0}
|
||||
#bo_w .bo_w_flie .file_del {position:absolute;top:10px;right:10px;font-size:0.92em;color:#7d7d7d}
|
||||
#bo_w .bo_w_select select {border:1px solid #dddddd;width:100%;height:40px;border-radius:3px}
|
||||
|
||||
.secret_cm.chk_box input[type="checkbox"] + label span {margin-left:-10px; margin-top:-6px; margin-right:5px;}
|
||||
</style>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
// gallery 스킨 광고 영역 설정
|
||||
$gallery_skin_config = [
|
||||
'left_ad' => false, // 좌측 광고 사용 안함
|
||||
'right_ad' => false, // 우측 광고 사용 안함
|
||||
];
|
||||
?>
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 62 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 318 B |
@@ -0,0 +1,302 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
include_once(G5_LIB_PATH.'/thumbnail.lib.php');
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
|
||||
<!-- 게시판 목록 시작 { -->
|
||||
<div id="bo_gall" style="width:<?php echo $width; ?>">
|
||||
|
||||
<?php if ($is_category) { ?>
|
||||
<nav id="bo_cate">
|
||||
<h2><?php echo $board['bo_subject'] ?> 카테고리</h2>
|
||||
<ul id="bo_cate_ul">
|
||||
<?php echo $category_option ?>
|
||||
</ul>
|
||||
</nav>
|
||||
<?php } ?>
|
||||
|
||||
<form name="fboardlist" id="fboardlist" action="<?php echo G5_BBS_URL; ?>/board_list_update.php" onsubmit="return fboardlist_submit(this);" method="post">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="sfl" value="<?php echo $sfl ?>">
|
||||
<input type="hidden" name="stx" value="<?php echo $stx ?>">
|
||||
<input type="hidden" name="spt" value="<?php echo $spt ?>">
|
||||
<input type="hidden" name="sst" value="<?php echo $sst ?>">
|
||||
<input type="hidden" name="sod" value="<?php echo $sod ?>">
|
||||
<input type="hidden" name="page" value="<?php echo $page ?>">
|
||||
<input type="hidden" name="sw" value="">
|
||||
|
||||
<!-- 게시판 페이지 정보 및 버튼 시작 { -->
|
||||
<div id="bo_btn_top">
|
||||
<div id="bo_list_total">
|
||||
<span>Total <?php echo number_format($total_count) ?>건</span>
|
||||
<?php echo $page ?> 페이지
|
||||
</div>
|
||||
|
||||
<ul class="btn_bo_user">
|
||||
<?php if ($admin_href) { ?><li><a href="<?php echo $admin_href ?>" class="btn_admin btn" title="관리자"><i class="fa fa-cog fa-spin fa-fw"></i><span class="sound_only">관리자</span></a></li><?php } ?>
|
||||
<?php if ($rss_href) { ?><li><a href="<?php echo $rss_href ?>" class="btn_b01 btn" title="RSS"><i class="fa fa-rss" aria-hidden="true"></i><span class="sound_only">RSS</span></a></li><?php } ?>
|
||||
<li>
|
||||
<button type="button" class="btn_bo_sch btn_b01 btn" title="게시판 검색"><i class="fa fa-search" aria-hidden="true"></i><span class="sound_only">게시판 검색</span></button>
|
||||
</li>
|
||||
<?php if ($write_href) { ?><li><a href="<?php echo $write_href ?>" class="btn_b01 btn" title="글쓰기"><i class="fa fa-pencil" aria-hidden="true"></i><span class="sound_only">글쓰기</span></a></li><?php } ?>
|
||||
<?php if ($is_admin == 'super' || $is_auth) { ?>
|
||||
<li>
|
||||
<button type="button" class="btn_more_opt is_list_btn btn_b01 btn" title="게시판 리스트 옵션"><i class="fa fa-ellipsis-v" aria-hidden="true"></i><span class="sound_only">게시판 리스트 옵션</span></button>
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<ul class="more_opt is_list_btn">
|
||||
<li><button type="submit" name="btn_submit" value="선택삭제" onclick="document.pressed=this.value"><i class="fa fa-trash-o" aria-hidden="true"></i> 선택삭제</button></li>
|
||||
<li><button type="submit" name="btn_submit" value="선택복사" onclick="document.pressed=this.value"><i class="fa fa-files-o" aria-hidden="true"></i> 선택복사</button></li>
|
||||
<li><button type="submit" name="btn_submit" value="선택이동" onclick="document.pressed=this.value"><i class="fa fa-arrows" aria-hidden="true"></i> 선택이동</button></li>
|
||||
</ul>
|
||||
<?php } ?>
|
||||
</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
</div>
|
||||
<!-- } 게시판 페이지 정보 및 버튼 끝 -->
|
||||
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<div id="gall_allchk" class="all_chk chk_box">
|
||||
<input type="checkbox" id="chkall" onclick="if (this.checked) all_checked(true); else all_checked(false);" class="selec_chk">
|
||||
<label for="chkall">
|
||||
<span></span>
|
||||
<b class="sound_only">현재 페이지 게시물 </b> 전체선택
|
||||
</label>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<ul id="gall_ul" class="gall_row">
|
||||
<?php for ($i=0; $i<count($list); $i++) {
|
||||
|
||||
$classes = array();
|
||||
|
||||
$classes[] = 'gall_li';
|
||||
$classes[] = 'col-gn-'.$bo_gallery_cols;
|
||||
|
||||
if( $i && ($i % $bo_gallery_cols == 0) ){
|
||||
$classes[] = 'box_clear';
|
||||
}
|
||||
|
||||
if( $wr_id && $wr_id == $list[$i]['wr_id'] ){
|
||||
$classes[] = 'gall_now';
|
||||
}
|
||||
|
||||
$line_height_style = ($board['bo_gallery_height'] > 0) ? 'line-height:'.$board['bo_gallery_height'].'px' : '';
|
||||
?>
|
||||
<li class="<?php echo implode(' ', $classes); ?>">
|
||||
<div class="gall_box">
|
||||
<div class="gall_chk chk_box">
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<input type="checkbox" name="chk_wr_id[]" value="<?php echo $list[$i]['wr_id'] ?>" id="chk_wr_id_<?php echo $i ?>" class="selec_chk">
|
||||
<label for="chk_wr_id_<?php echo $i ?>">
|
||||
<span></span>
|
||||
<b class="sound_only"><?php echo $list[$i]['subject'] ?></b>
|
||||
</label>
|
||||
|
||||
<?php } ?>
|
||||
<span class="sound_only">
|
||||
<?php
|
||||
if ($wr_id == $list[$i]['wr_id'])
|
||||
echo "<span class=\"bo_current\">열람중</span>";
|
||||
else
|
||||
echo $list[$i]['num'];
|
||||
?>
|
||||
</span>
|
||||
</div>
|
||||
<div class="gall_con">
|
||||
<div class="gall_img" style="<?php if ($board['bo_gallery_height'] > 0) echo 'height:'.$board['bo_gallery_height'].'px;max-height:'.$board['bo_gallery_height'].'px'; ?>">
|
||||
<a href="<?php echo $list[$i]['href'] ?>">
|
||||
<?php
|
||||
if ($list[$i]['is_notice']) { // 공지사항 ?>
|
||||
<span class="is_notice" style="<?php echo $line_height_style; ?>">공지</span>
|
||||
<?php } else {
|
||||
$thumb = get_list_thumbnail($board['bo_table'], $list[$i]['wr_id'], $board['bo_gallery_width'], $board['bo_gallery_height'], false, true);
|
||||
|
||||
if($thumb['src']) {
|
||||
$img_content = '<img src="'.$thumb['src'].'" alt="'.$thumb['alt'].'" >';
|
||||
} else {
|
||||
$img_content = '<span class="no_image" style="'.$line_height_style.'">no image</span>';
|
||||
}
|
||||
|
||||
echo run_replace('thumb_image_tag', $img_content, $thumb);
|
||||
}
|
||||
?>
|
||||
</a>
|
||||
</div>
|
||||
<div class="gall_text_href">
|
||||
<?php if ($is_category && $list[$i]['ca_name']) { ?>
|
||||
<a href="<?php echo $list[$i]['ca_name_href'] ?>" class="bo_cate_link"><?php echo $list[$i]['ca_name'] ?></a>
|
||||
<?php } ?>
|
||||
<a href="<?php echo $list[$i]['href'] ?>" class="bo_tit">
|
||||
|
||||
<?php // echo $list[$i]['icon_reply']; ?>
|
||||
<!-- 갤러리 댓글기능 사용시 주석을 제거하세요. -->
|
||||
|
||||
<?php echo $list[$i]['subject'] ?>
|
||||
<?php
|
||||
// if ($list[$i]['file']['count']) { echo '<'.$list[$i]['file']['count'].'>'; }
|
||||
if ($list[$i]['icon_new']) echo "<span class=\"new_icon\">N<span class=\"sound_only\">새글</span></span>";
|
||||
if (isset($list[$i]['icon_hot'])) echo rtrim($list[$i]['icon_hot']);
|
||||
//if (isset($list[$i]['icon_file'])) echo rtrim($list[$i]['icon_file']);
|
||||
//if (isset($list[$i]['icon_link'])) echo rtrim($list[$i]['icon_link']);
|
||||
if (isset($list[$i]['icon_secret'])) echo rtrim($list[$i]['icon_secret']);
|
||||
?>
|
||||
<?php if ($list[$i]['comment_cnt']) { ?><span class="sound_only">댓글</span><span class="cnt_cmt"><?php echo $list[$i]['wr_comment']; ?></span><span class="sound_only">개</span><?php } ?>
|
||||
</a>
|
||||
<span class="bo_cnt"><?php echo utf8_strcut(strip_tags($list[$i]['wr_content']), 68, '..'); ?></span>
|
||||
</div>
|
||||
|
||||
<div class="gall_info">
|
||||
<span class="sound_only">작성자 </span><?php echo $list[$i]['name'] ?>
|
||||
<span class="gall_date"><span class="sound_only">작성일 </span><i class="fa fa-clock-o" aria-hidden="true"></i> <?php echo $list[$i]['datetime2'] ?></span>
|
||||
<span class="gall_view"><span class="sound_only">조회 </span><i class="fa fa-eye" aria-hidden="true"></i> <?php echo $list[$i]['wr_hit'] ?></span>
|
||||
</div>
|
||||
<div class="gall_option">
|
||||
<?php if ($is_good) { ?><span class="sound_only">추천</span><strong><i class="fa fa-thumbs-o-up" aria-hidden="true"></i> <?php echo $list[$i]['wr_good'] ?></strong><?php } ?>
|
||||
<?php if ($is_nogood) { ?><span class="sound_only">비추천</span><strong><i class="fa fa-thumbs-o-down" aria-hidden="true"></i> <?php echo $list[$i]['wr_nogood'] ?></strong><?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</li>
|
||||
<?php } ?>
|
||||
<?php if (count($list) == 0) { echo "<li class=\"empty_list\">게시물이 없습니다.</li>"; } ?>
|
||||
</ul>
|
||||
|
||||
<!-- 페이지 -->
|
||||
<?php echo $write_pages; ?>
|
||||
<!-- 페이지 -->
|
||||
|
||||
<?php if ($list_href || $is_checkbox || $write_href) { ?>
|
||||
<div class="bo_fx">
|
||||
<?php if ($list_href || $write_href) { ?>
|
||||
<ul class="btn_bo_user">
|
||||
<?php if ($admin_href) { ?><li><a href="<?php echo $admin_href ?>" class="btn_admin btn" title="관리자"><i class="fa fa-cog fa-spin fa-fw"></i><span class="sound_only">관리자</span></a></li><?php } ?>
|
||||
<?php if ($rss_href) { ?><li><a href="<?php echo $rss_href ?>" class="btn_b01 btn" title="RSS"><i class="fa fa-rss" aria-hidden="true"></i><span class="sound_only">RSS</span></a></li><?php } ?>
|
||||
<?php if ($write_href) { ?><li><a href="<?php echo $write_href ?>" class="btn_b01 btn" title="글쓰기"><i class="fa fa-pencil" aria-hidden="true"></i><span class="sound_only">글쓰기</span></a></li><?php } ?>
|
||||
</ul>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</form>
|
||||
|
||||
<!-- 게시판 검색 시작 { -->
|
||||
<div class="bo_sch_wrap">
|
||||
<fieldset class="bo_sch">
|
||||
<h3>검색</h3>
|
||||
<form name="fsearch" method="get">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<input type="hidden" name="sop" value="and">
|
||||
<label for="sfl" class="sound_only">검색대상</label>
|
||||
<select name="sfl" id="sfl">
|
||||
<?php echo get_board_sfl_select_options($sfl); ?>
|
||||
</select>
|
||||
<label for="stx" class="sound_only">검색어<strong class="sound_only"> 필수</strong></label>
|
||||
<div class="sch_bar">
|
||||
<input type="text" name="stx" value="<?php echo stripslashes($stx) ?>" required id="stx" class="sch_input" size="25" maxlength="20" placeholder="검색어를 입력해주세요">
|
||||
<button type="submit" value="검색" class="sch_btn"><i class="fa fa-search" aria-hidden="true"></i><span class="sound_only">검색</span></button>
|
||||
</div>
|
||||
<button type="button" class="bo_sch_cls"><i class="fa fa-times" aria-hidden="true"></i><span class="sound_only">닫기</span></button>
|
||||
</form>
|
||||
</fieldset>
|
||||
<div class="bo_sch_bg"></div>
|
||||
</div>
|
||||
<script>
|
||||
// 게시판 검색
|
||||
$(".btn_bo_sch").on("click", function() {
|
||||
$(".bo_sch_wrap").toggle();
|
||||
})
|
||||
$('.bo_sch_bg, .bo_sch_cls').click(function(){
|
||||
$('.bo_sch_wrap').hide();
|
||||
});
|
||||
</script>
|
||||
<!-- } 게시판 검색 끝 -->
|
||||
</div>
|
||||
|
||||
<?php if($is_checkbox) { ?>
|
||||
<noscript>
|
||||
<p>자바스크립트를 사용하지 않는 경우<br>별도의 확인 절차 없이 바로 선택삭제 처리하므로 주의하시기 바랍니다.</p>
|
||||
</noscript>
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<script>
|
||||
function all_checked(sw) {
|
||||
var f = document.fboardlist;
|
||||
|
||||
for (var i=0; i<f.length; i++) {
|
||||
if (f.elements[i].name == "chk_wr_id[]")
|
||||
f.elements[i].checked = sw;
|
||||
}
|
||||
}
|
||||
|
||||
function fboardlist_submit(f) {
|
||||
var chk_count = 0;
|
||||
|
||||
for (var i=0; i<f.length; i++) {
|
||||
if (f.elements[i].name == "chk_wr_id[]" && f.elements[i].checked)
|
||||
chk_count++;
|
||||
}
|
||||
|
||||
if (!chk_count) {
|
||||
alert(document.pressed + "할 게시물을 하나 이상 선택하세요.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if(document.pressed == "선택복사") {
|
||||
select_copy("copy");
|
||||
return;
|
||||
}
|
||||
|
||||
if(document.pressed == "선택이동") {
|
||||
select_copy("move");
|
||||
return;
|
||||
}
|
||||
|
||||
if(document.pressed == "선택삭제") {
|
||||
if (!confirm("선택한 게시물을 정말 삭제하시겠습니까?\n\n한번 삭제한 자료는 복구할 수 없습니다\n\n답변글이 있는 게시글을 선택하신 경우\n답변글도 선택하셔야 게시글이 삭제됩니다."))
|
||||
return false;
|
||||
|
||||
f.removeAttribute("target");
|
||||
f.action = g5_bbs_url+"/board_list_update.php";
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
// 선택한 게시물 복사 및 이동
|
||||
function select_copy(sw) {
|
||||
var f = document.fboardlist;
|
||||
|
||||
if (sw == 'copy')
|
||||
str = "복사";
|
||||
else
|
||||
str = "이동";
|
||||
|
||||
var sub_win = window.open("", "move", "left=50, top=50, width=500, height=550, scrollbars=1");
|
||||
|
||||
f.sw.value = sw;
|
||||
f.target = "move";
|
||||
f.action = g5_bbs_url+"/move.php";
|
||||
f.submit();
|
||||
}
|
||||
|
||||
// 게시판 리스트 관리자 옵션
|
||||
jQuery(function($){
|
||||
$(".btn_more_opt.is_list_btn").on("click", function(e) {
|
||||
e.stopPropagation();
|
||||
$(".more_opt.is_list_btn").toggle();
|
||||
});
|
||||
$(document).on("click", function (e) {
|
||||
if(!$(e.target).closest('.is_list_btn').length) {
|
||||
$(".more_opt.is_list_btn").hide();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<?php } ?>
|
||||
<!-- } 게시판 목록 끝 -->
|
||||
@@ -0,0 +1,375 @@
|
||||
@charset "utf-8";
|
||||
|
||||
/* 게시판 목록 */
|
||||
#bo_cate {margin:25px 0}
|
||||
#bo_cate h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_cate ul {zoom:1}
|
||||
#bo_cate ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_cate li {display:inline-block;padding:2px}
|
||||
#bo_cate a {display:block;line-height:28px;padding:5px 15px;border-radius:30px;border:1px solid #d6e9ff;color:#6794d3}
|
||||
#bo_cate a:focus, #bo_cate a:hover, #bo_cate a:active {text-decoration:none;background:#3a8afd;color:#fff}
|
||||
#bo_cate #bo_cate_on {z-index:2;background:#3a8afd;color:#fff;font-weight:bold;border:1px solid #3a8afd;
|
||||
-webkit-box-shadow:inset 0 2px 5px rgb(33, 135, 202);
|
||||
-moz-box-shadow:inset 0 2px 5px rgb(33, 135, 202);
|
||||
box-shadow:inset 0 2px 5px rgb(33, 135, 202)}
|
||||
.td_subject img {margin-left:3px}
|
||||
|
||||
.selec_chk {position:absolute;top:0;left:0;width:0;height:0;opacity:0;outline:0;z-index:-1;overflow:hidden}
|
||||
.chk_box {position:relative}
|
||||
.chk_box input[type="checkbox"] + label {position:relative;padding-left:20px;color:#676e70;vertical-align:baseline}
|
||||
.chk_box input[type="checkbox"] + label:hover{color:#2172f8}
|
||||
.chk_box input[type="checkbox"] + label span {position:absolute;top:10px;left:10px;width:15px;height:15px;display:block;background:#fff;border:1px solid #d0d4df;border-radius:3px}
|
||||
.write_div .chk_box input[type="checkbox"] + label, .bo_vc_w .chk_box input[type="checkbox"] + label {padding-left:20px}
|
||||
.write_div .chk_box input[type="checkbox"] + label span, .bo_vc_w .chk_box input[type="checkbox"] + label span {position:absolute;top:2px;left:0;width:15px;height:15px;display:block;margin:0;background:#fff;border:1px solid #d0d4df;border-radius:3px}
|
||||
.chk_box input[type="checkbox"]:checked + label {color:#000}
|
||||
.chk_box input[type="checkbox"]:checked + label span {background:url(./img/chk.png) no-repeat 50% 50% #3a8afd;border-color:#1471f6;border-radius:3px}
|
||||
.all_chk.chk_box input[type="checkbox"] + label span {top:0;left:0}
|
||||
|
||||
|
||||
/* 갤러리 목록 */
|
||||
#bo_gall h2 {margin:0;padding:0;width:1px;height:1px;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_gall #gall_ul {margin:10px -10px 0;padding:0;list-style:none;zoom:1}
|
||||
#bo_gall #gall_ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_gall .gall_li {}
|
||||
#bo_gall .gall_li .gall_chk {position:absolute;top:0;left:0;padding:5px;z-index:1}
|
||||
#bo_gall .gall_box {position:relative;margin:0 0 50px 0;border-radius:0 0 2px 2px}
|
||||
#bo_gall .gall_con {position:relative}
|
||||
|
||||
.gall_row .col-gn-0,.gall_row .col-gn-1,.gall_row .col-gn-2,.gall_row .col-gn-3,.gall_row .col-gn-4,.gall_row .col-gn-5,.gall_row .col-gn-6,.gall_row .col-gn-7,.gall_row .col-gn-8,.gall_row .col-gn-9,.gall_row .col-gn-10 {position:relative;min-height:1px;padding-left:10px;*padding-left:0;padding-right:10px;*padding-right:0;float:left;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-left:0}
|
||||
.gall_row .col-gn-0,.gall_row .col-gn-1 {width:100%}
|
||||
.gall_row .col-gn-2 {width:50%}
|
||||
.gall_row .col-gn-3 {width:33.33333333%}
|
||||
.gall_row .col-gn-4 {width:25%}
|
||||
.gall_row .col-gn-5 {width:20%}
|
||||
.gall_row .col-gn-6 {width:16.66666667%}
|
||||
.gall_row .col-gn-7 {width:14.28571428%}
|
||||
.gall_row .col-gn-8 {width:12.5%}
|
||||
.gall_row .col-gn-9 {width:11.11111111%}
|
||||
.gall_row .col-gn-10 {width:10%}
|
||||
|
||||
.gall_row .box_clear {clear:both}
|
||||
|
||||
#bo_gall .gall_now .gall_text_href a {color:#ff3061}
|
||||
|
||||
#bo_gall .gall_href a:link, #bo_gall .gall_href a:focus, #bo_gall .gall_href a:hover {text-decoration:none}
|
||||
#bo_gall .gall_img {border-bottom:1px solid #eee;text-align:center;overflow:hidden}
|
||||
#bo_gall .gall_img a,#bo_gall .gall_img .no_image,#bo_gall .gall_img .is_notice {display:block}
|
||||
#bo_gall .gall_img img, #bo_gall .gall_img video {max-width:100%;height:auto !important}
|
||||
#bo_gall .gall_img span {display:inline-block;background:#eaeaea;text-align:center;text-transform:uppercase;font-weight:bold;font-size:1.25em;color:#777}
|
||||
|
||||
#bo_gall .gall_text_href {margin:10px 0}
|
||||
#bo_gall .gall_text_href a {font-weight:bold}
|
||||
#bo_gall .gall_text_href img {margin:0 0 0 4px}
|
||||
#bo_gall .bo_tit {display:block;line-height:30px;font-weight:bold;color:#000;font-size:1.2em}
|
||||
#bo_gall .bo_tit .cnt_cmt {background:#e9eff5;color:#3a8afd;font-size:11px;height:16px;line-height:16px;padding:0 5px;border-radius:3px;vertical-align:middle}
|
||||
|
||||
#bo_gall .bo_cnt {color:#acacac;line-height:18px}
|
||||
#bo_gall .profile_img img {border-radius:50%}
|
||||
#bo_gall .bo_tit .fa-download {width:16px;height:16px;line-height:16px;background:#e89f31;color:#fff;text-align:center;font-size:10px;border-radius:2px;margin-right:2px;vertical-align:middle}
|
||||
#bo_gall .bo_tit .fa-link {width:16px;height:16px;line-height:16px;background:#ad68d8;color:#fff;text-align:center;font-size:10px;border-radius:2px;margin-right:2px;vertical-align:middle;font-weight:normal}
|
||||
#bo_gall .bo_tit .fa-link {width:16px;height:16px;line-height:16px;background:#ad68d8;color:#fff;text-align:center;font-size:10px;border-radius:2px;margin-right:2px;vertical-align:middle;margin-right:2px}
|
||||
#bo_gall .bo_tit .new_icon {display:inline-block;width:16px;line-height:16px;font-size:0.825em;color:#23db79;background:#b9ffda;text-align:center;border-radius:2px;margin-left:2px;font-weight:bold;vertical-align:baseline}
|
||||
#bo_gall .bo_tit .hot_icon {display:inline-block;width:16px;line-height:16px;font-size:0.833em;color:#fff;background:#e52955;text-align:center;border-radius:2px;vertical-align:middle;margin-right:2px}
|
||||
#bo_gall .bo_tit .fa-lock {display:inline-block;line-height:16px;color:#999;text-align:center;vertical-align:middle}
|
||||
|
||||
#bo_gall .gall_info {line-height:1.5em;line-height:20px}
|
||||
#bo_gall .gall_info strong {display:inline-block;margin:0}
|
||||
#bo_gall .gall_info i {font-size:12px}
|
||||
#bo_gall .gall_info .gall_date,
|
||||
#bo_gall .gall_info .gall_view {display:inline-block;margin-left:10px;color:#777}
|
||||
|
||||
#bo_gall .gall_option {position:absolute;top:10px;right:10px}
|
||||
#bo_gall .gall_option strong {background:#fff;padding:5px 10px;border-radius:30px;-webkit-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
-moz-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2)}
|
||||
|
||||
/* 게시판 목록 공통 */
|
||||
#bo_btn_top {margin:10px 0}
|
||||
#bo_btn_top:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_fx {margin-bottom:5px;float:right;zoom:1}
|
||||
.bo_fx:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_fx ul {margin:0;padding:0;list-style:none}
|
||||
#bo_list_total {float:left;line-height:34px;font-size:0.92em;color:#4e546f}
|
||||
|
||||
.btn_bo_user {float:right;margin:0;padding:0;list-style:none}
|
||||
.btn_bo_user li {float:left;width:40px;text-align:center;margin-left:5px;background:#fff}
|
||||
.btn_bo_user > li {position:relative}
|
||||
.btn_bo_adm {float:left}
|
||||
.btn_bo_adm li {float:left;margin-right:5px}
|
||||
.btn_bo_adm input {padding:0 8px;border:0;background:#d4d4d4;color:#666;text-decoration:none;vertical-align:middle}
|
||||
.bo_notice td {background:#fff6fa !important;border-bottom:1px solid #f8e6ee}
|
||||
.bo_notice td a {font-weight:bold}
|
||||
.bo_notice .notice_icon {display:inline-block;line-height:25px;border-radius:5px;font-weight:bold;color:#f9267f}
|
||||
|
||||
.more_opt {display:none;position:absolute;top:45px;right:0;background:#fff;border:1px solid #b8bfc4;z-index:999}
|
||||
.more_opt:before {content:"";position:absolute;top:-8px;right:13px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent}
|
||||
.more_opt:after {content:"";position:absolute;top:-6px;right:13px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
.more_opt li {border-bottom:1px solid #f1f1f1;padding:10px;float:inherit;width:90px;margin:0;color:#6b757c;text-align:left}
|
||||
.more_opt li:last-child {border-bottom:0}
|
||||
.more_opt li button, .more_opt li a {width:100%;border:0;background:#fff;color:#6b757c}
|
||||
.more_opt li:hover a,
|
||||
.more_opt li:hover button {color:#000}
|
||||
.more_opt li i {float:right;line-height:20px}
|
||||
|
||||
.td_num strong {color:#000}
|
||||
.bo_cate_link {display:inline-block;background:#e2eaf6;color:#3a8afd;font-weight:normal !important;height:20px;line-height:10px;padding:5px 8px;border-radius:5px;font-size:0.95em} /* 글제목줄 분류스타일 */
|
||||
.bo_cate_link:hover {text-decoration:none}
|
||||
.bo_current {color:#e8180c}
|
||||
#bo_list .profile_img {display:inline-block;margin-right:5px}
|
||||
#bo_list .profile_img img {border-radius:50%}
|
||||
#bo_list .cnt_cmt {display:inline-block;margin:0 0 0 3px;font-weight:bold;color:#ed6478;font-size:0.86em}
|
||||
|
||||
#bo_gall li.empty_list {padding:85px 0;text-align:center}
|
||||
|
||||
.bo_sch_wrap {display:none;width:100%;height:100%;position:fixed;top:0;left:0;z-index:999}
|
||||
.bo_sch {position:absolute;top:50%;left:50%;background:#fff;text-align:left;width:330px;max-height:300px;margin-left:-125px;margin-top:-180px;overflow-y:auto;border-radius:5px;-webkit-box-shadow:1px 1px 18px rgba(0,0,0,0.2);-moz-box-shadow:1px 1px 18px rgba(0,0,0,0.2);box-shadow:1px 1px 18px rgba(0,0,0,0.2);border:1px solid #dde7e9;background:#fff;border-radius:3px}
|
||||
.bo_sch:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_sch h3 {padding:15px;border-bottom:1px solid #e8e8e8}
|
||||
.bo_sch legend {background:red}
|
||||
.bo_sch form {padding:15px;display:block}
|
||||
.bo_sch select {border:0;width:100%;height:40px;border:1px solid #d0d3db;border-radius:2px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075)}
|
||||
.bo_sch .sch_bar {display:inline-block;width:100%;clear:both;margin-top:15px;border:1px solid #d0d3db;border-radius:2px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075)}
|
||||
.bo_sch .sch_input {width:250px;height:38px;border:0;padding:0;background-color:transparent;float:left}
|
||||
.bo_sch .sch_btn {height:38px;float:right;color:#656565;background:none;border:0;width:40px;font-size:15px}
|
||||
.bo_sch .bo_sch_cls {position:absolute;right:0;top:0;color:#b5b8bb;border:0;padding:12px 15px;font-size:16px;background:#fff}
|
||||
.bo_sch_bg {background:#000;background:rgba(0,0,0,0.1);width:100%;height:100%}
|
||||
|
||||
|
||||
/* 게시판 쓰기 */
|
||||
#char_count_desc {display:block;margin:0 0 5px;padding:0}
|
||||
#char_count_wrap {margin:5px 0 0;text-align:right}
|
||||
#char_count {font-weight:bold}
|
||||
|
||||
#autosave_wrapper {position:relative}
|
||||
#autosave_pop {display:none;z-index:10;position:absolute !important;top:34px;right:0;width:350px;height:auto !important;height:180px;max-height:180px;border:1px solid #565656;background:#fff;
|
||||
-webkit-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
-moz-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2)}
|
||||
#autosave_pop:before {content:"";position:absolute;top:-8px;right:45px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #000 transparent}
|
||||
#autosave_pop:after {content:"";position:absolute;top:-7px;right:45px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
html.no-overflowscrolling #autosave_pop {height:auto;max-height:10000px !important} /* overflow 미지원 기기 대응 */
|
||||
#autosave_pop strong {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#autosave_pop div {text-align:center;margin:0 !important}
|
||||
#autosave_pop button {margin:0;padding:0;border:0}
|
||||
#autosave_pop ul {padding:15px;border-top:1px solid #e9e9e9;list-style:none;overflow-y:scroll;height:130px;border-bottom:1px solid #e8e8e8}
|
||||
#autosave_pop li {padding:8px 5px;border-bottom:1px solid #fff;background:#eee;zoom:1}
|
||||
#autosave_pop li:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#autosave_pop a {display:block;float:left}
|
||||
#autosave_pop span {display:block;float:right;font-size:0.92em;font-style:italic;color:#999}
|
||||
.autosave_close {cursor:pointer;width:100%;height:30px;background:none;color:#888;font-weight:bold;font-size:0.92em}
|
||||
.autosave_close:hover {background:#f3f3f3;color:#3597d9}
|
||||
.autosave_content {display:none}
|
||||
.autosave_del {background:url(./img/close_btn.png) no-repeat 50% 50%;text-indent:-999px;overflow:hidden;height:20px;width:20px}
|
||||
|
||||
/* 게시판 읽기 */
|
||||
#bo_v {margin-bottom:20px;background:#fff;box-sizing:border-box}
|
||||
|
||||
#bo_v_table {position:absolute;top:0;right:16px;margin:0;padding:0 5px;height:25px;background:#ff3061;color:#fff;font-weight:bold;line-height:2.2em}
|
||||
|
||||
#bo_v_title {}
|
||||
#bo_v_title .bo_v_cate {display:inline-block;line-height:20px;background:#e2eaf6;color:#3a8afd;padding:0 10px;border-radius:3px;}
|
||||
#bo_v_title .bo_v_tit {display:block;font-size:2em;margin:5px 0 0;word-break:break-all}
|
||||
|
||||
#bo_v_info {margin:0;border-bottom:1px solid #f1f1f1;color:#666}
|
||||
#bo_v_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_info h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
|
||||
#bo_v_info .profile_info {margin:20px 0 10px;display:inline-block;float:left}
|
||||
#bo_v_info .profile_info .pf_img {float:left;margin-right:10px}
|
||||
#bo_v_info .profile_info .pf_img img {border-radius:50%;width:50px;height:50px}
|
||||
#bo_v_info .profile_info .profile_info_ct {float:left;padding:5px 0;line-height:18px}
|
||||
|
||||
#bo_v_info strong {display:inline-block;margin:0 10px 0 0;font-weight:normal}
|
||||
#bo_v_info .sv_member,
|
||||
#bo_v_info .sv_guest,
|
||||
#bo_v_info .member,
|
||||
#bo_v_info .guest {font-weight:bold}
|
||||
#bo_v_info .profile_img {display:none}
|
||||
#bo_v_info .sv_member {color:#000}
|
||||
#bo_v_info .if_date {margin:0;color:#888}
|
||||
|
||||
#bo_v_file h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_file ul {margin:0;list-style:none}
|
||||
#bo_v_file li {padding:15px;position:relative;margin:10px 0;border:1px solid #dfdfdf;border-radius:5px;
|
||||
-webkit-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
-moz-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%)}
|
||||
#bo_v_file li i {float:left;color:#b2b2b2;font-size:2.35em;margin-right:20px}
|
||||
#bo_v_file a {float:left;display:block;text-decoration:none;word-wrap:break-word;color:#000}
|
||||
#bo_v_file a:focus, #bo_v_file li:hover a, #bo_v_file a:active {text-decoration:underline;color:#3a8afd}
|
||||
#bo_v_file img {float:left;margin:0 10px 0 0}
|
||||
#bo_v_file .bo_v_file_cnt {color:#b2b2b2;font-size:0.92em}
|
||||
#bo_v_file li:hover {border-color:#bed4f4;color:#bed4f4}
|
||||
#bo_v_file li:hover i {color:#3a8afd}
|
||||
#bo_v_file li:hover .bo_v_file_cnt {color:#99c2fc}
|
||||
|
||||
|
||||
#bo_v_link h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_file ul {margin:0;list-style:none}
|
||||
#bo_v_link li {padding:15px;position:relative;margin:10px 0;border:1px solid #dfdfdf;border-radius:5px;
|
||||
-webkit-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
-moz-box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%);
|
||||
box-shadow:1px 1px 5px 0px hsl(232, 36%, 96%)}
|
||||
#bo_v_link li i {float:left;color:#b2b2b2;font-size:2.35em;margin-right:20px}
|
||||
#bo_v_link a {float:left;display:block;text-decoration:none;word-wrap:break-word;color:#000}
|
||||
#bo_v_link a:focus, #bo_v_link li:hover a, #bo_v_link a:active {text-decoration:underline;color:#3a8afd}
|
||||
#bo_v_link .bo_v_link_cnt {color:#b2b2b2;font-size:0.92em}
|
||||
#bo_v_link li:hover {border-color:#bed4f4;color:#bed4f4}
|
||||
#bo_v_link li:hover i {color:#3a8afd}
|
||||
#bo_v_link li:hover .bo_v_link_cnt {color:#99c2fc}
|
||||
|
||||
|
||||
#bo_v_top {zoom:1}
|
||||
#bo_v_top:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_top h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_top ul {padding:0;list-style:none;word-break:break-all}
|
||||
|
||||
#bo_v_bot {zoom:1}
|
||||
#bo_v_bot:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_bot h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_v_bot ul {padding:0;list-style:none}
|
||||
|
||||
.bo_v_com {margin:20px 0;float:right}
|
||||
.bo_v_com > li {position:relative;float:left;margin-left:5px}
|
||||
|
||||
.bo_v_nb {margin:20px 0;position:relative;clear:both;text-align:left}
|
||||
.bo_v_nb:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_v_nb li {border-top:1px solid #f1f1f1;padding:13px}
|
||||
.bo_v_nb li:last-child {border-bottom:1px solid #f1f1f1}
|
||||
.bo_v_nb li:hover {background:#f6f6f6}
|
||||
.bo_v_nb li i {font-size:13px;color:#b3b3b3}
|
||||
.bo_v_nb li .nb_tit {display:inline-block;padding-right:20px;color:#b3b3b3}
|
||||
.bo_v_nb li .nb_date {float:right;color:#b3b3b3}
|
||||
|
||||
#bo_v_atc {min-height:200px;height:auto !important;height:200px}
|
||||
#bo_v_atc_title {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
|
||||
#bo_v_img {width:100%;overflow:hidden;zoom:1}
|
||||
#bo_v_img:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_img a.view_image {display:block}
|
||||
#bo_v_img img {margin-bottom:20px;max-width:100%;height:auto}
|
||||
|
||||
#bo_v_con {margin:10px 0 30px;width:100%;line-height:1.7em;min-height:200px;word-break:break-all;overflow:hidden}
|
||||
#bo_v_con a {color:#000;text-decoration:underline}
|
||||
#bo_v_con img {max-width:100%;height:auto}
|
||||
|
||||
#bo_v_act {margin-bottom:30px;text-align:center}
|
||||
#bo_v_act .bo_v_act_gng {position:relative}
|
||||
#bo_v_act a {margin-right:5px;vertical-align:middle;color:#4a5158}
|
||||
#bo_v_act a:hover {background-color:#fff;color:#ff484f;border-color:#ff484f}
|
||||
#bo_v_act i {font-size:1.4em;margin-right:5px}
|
||||
#bo_v_act_good, #bo_v_act_nogood {display:none;position:absolute;top:30px;left:0;z-index:9999;padding:10px 0;width:165px;background:#ff3061;color:#fff;text-align:center}
|
||||
#bo_v_act .bo_v_good {display:inline-block;border:1px solid #dedede;width:70px;line-height:46px;border-radius:30px}
|
||||
#bo_v_act .bo_v_nogood {display:inline-block;border:1px solid #dedede;width:70px;line-height:46px;border-radius:30px}
|
||||
|
||||
#bo_v_sns {padding:0;list-style:none;zoom:1;float:left;display:inline-block}
|
||||
#bo_v_sns:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_sns li {float:left;width:135px;margin-right:5px;text-align:left}
|
||||
#bo_v_sns li a {height:35px;line-height:35px;text-align:center;border-radius:5px;color:#fff;font-size:0.95em}
|
||||
#bo_v_sns li img {vertical-align:middle;margin-right:5px}
|
||||
#bo_v_sns li .sns_f {display:block;background:#3b5997}
|
||||
#bo_v_sns li .sns_t {display:block;background:#09aeee}
|
||||
#bo_v_sns li .sns_g {display:block;background:#ea4026}
|
||||
#bo_v_sns li .sns_k {display:block;background:#fbe300}
|
||||
|
||||
#bo_v_share {position:relative;padding:20px 0}
|
||||
#bo_v_share:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_v_share .btn {padding:0 10px;color:#555;font-weight:normal;font-size:1em;width:80px;line-height:35px;height:35px;border-color:#d5d5d5;border-radius:5px}
|
||||
#bo_v_share .btn:hover {background:#fff}
|
||||
#bo_v_share .btn i {margin-right:5px;color:#4b5259;vertical-align:middle}
|
||||
|
||||
|
||||
/* 게시판 댓글 */
|
||||
.cmt_btn {width:100%;text-align:left;border:0;border-bottom:1px solid #f0f0f0;background:#fff;font-weight:bold;margin:30px 0 0px;padding:0 0 15px}
|
||||
.cmt_btn span.total {position:relative;display:inline-block;margin-right:5px;font-size:1em;color:#3a8afd}
|
||||
.cmt_btn span.cmt_more {float:right;display:inline-block;width:15px;height:10px;background:url(./img/btn_cmt.png) no-repeat right 2px;margin-top:5px}
|
||||
.cmt_btn_op span.cmt_more {background-position:right -8px}
|
||||
.cmt_btn b {font-size:1.2em;color:#000}
|
||||
.cmt_btn span.total:after {position:absolute;bottom:-17px;left:0;display:inline-block;background:#3a8afd;content:"";width:100%;height:2px}
|
||||
#bo_vc {}
|
||||
#bo_vc h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc article {margin:20px 0;position:relative;border-bottom:1px solid #f0f0f0}
|
||||
#bo_vc article:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc article .profile_img img {border-radius:50%}
|
||||
#bo_vc article .pf_img {float:left;margin-right:10px}
|
||||
#bo_vc article .pf_img img {border-radius:50%;width:50px;height:50px}
|
||||
#bo_vc article .cm_wrap {float:left;max-width:870px;width:90%}
|
||||
#bo_vc header {position:relative;width:100%}
|
||||
#bo_vc header:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc header .profile_img {display:none}
|
||||
#bo_vc header .icon_reply {position:absolute;top:15px;left:-20px}
|
||||
#bo_vc .member, #bo_vc .guest, #bo_vc .sv_member, #bo_vc .sv_guest {font-weight:bold}
|
||||
.bo_vc_hdinfo {color:#777}
|
||||
#bo_vc h1 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#bo_vc .cmt_contents {line-height:1.8em;padding:0 0 20px}
|
||||
#bo_vc p a {text-decoration:underline}
|
||||
#bo_vc p a.s_cmt {text-decoration:underline;color:#ed6479}
|
||||
#bo_vc_empty {margin:0;padding:80px 0 !important;color:#777;text-align:center}
|
||||
#bo_vc #bo_vc_winfo {float:left}
|
||||
#bo_vc .bo_vl_opt {position:absolute;top:0;right:0}
|
||||
|
||||
.bo_vc_act {display:none;position:absolute;right:0;top:40px;width:58px;text-align:right;border:1px solid #b8bfc4;margin:0;list-style:none;background:#fff;zoom:1;z-index:9999}
|
||||
.bo_vc_act:before {content:"";position:absolute;top:-8px;right:5px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #b8bfc4 transparent}
|
||||
.bo_vc_act:after {content:"";position:absolute;top:-6px;right:5px;width:0;height:0;border-style:solid;border-width:0 6px 8px 6px;border-color:transparent transparent #fff transparent}
|
||||
.bo_vc_act li {border-bottom:1px solid #f0f0f0}
|
||||
.bo_vc_act li:last-child {border-bottom:0}
|
||||
.bo_vc_act li a {display:inline-block;padding:10px 15px}
|
||||
.bo_vc_act li a:hover {color:#3a8afd}
|
||||
|
||||
.bo_vc_w {position:relative;margin:10px 0;display:block}
|
||||
.bo_vc_w:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_vc_w h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
.bo_vc_w #char_cnt {display:block;margin:0 0 5px}
|
||||
.bo_vc_w textarea {border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;width:100%;height:120px;
|
||||
-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||
-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);
|
||||
box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1)}
|
||||
#wr_secret {}
|
||||
.bo_vc_w_info {margin:10px 0;float:left}
|
||||
.bo_vc_w_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.bo_vc_w_info .frm_input {float:left;margin-right:5px}
|
||||
.bo_vc_w_info #captcha {padding-top:10px;display:block;clear:both}
|
||||
.bo_vc_w .btn_confirm {clear:both;margin-top:10px}
|
||||
.bo_vc_w .btn_confirm label {display:inline-block;margin-right:10px;border-radius:3px;font-size:1.5em;text-align:center}
|
||||
.bo_vc_w .btn_submit {height:45px;padding:0 20px;border-radius:3px;font-weight:bold;font-size:1.083em}
|
||||
.bo_vc_w .btn_confirm .secret_cm label {font-size:1em !important}
|
||||
.bo_vc_w_wr:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.secret_cm {display:inline-block;float:left}
|
||||
|
||||
#bo_vc_send_sns {display:inline-block;float:left}
|
||||
#bo_vc_sns {display:inline-block;margin:0;padding:0;list-style:none;zoom:1}
|
||||
#bo_vc_sns:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_vc_sns li {float:left;margin:0 5px 0 0}
|
||||
#bo_vc_sns .sns_li_f {border-radius:3px;background:#3a589b;height:40px;line-height:40px;padding:0 0 0 10px}
|
||||
#bo_vc_sns .sns_li_t {border-radius:3px;background:#00aced;height:40px;line-height:40px;padding:0 0 0 10px}
|
||||
#bo_vc_sns .sns_li_off {background:#bbb}
|
||||
#bo_vc_sns a {display:inline-block;padding:0 15px 0 5px}
|
||||
#bo_vc_sns input {margin:0 5px 0 0}
|
||||
|
||||
/*글쓰기*/
|
||||
#bo_w .bo_v_option li {display:inline-block;float:left;text-align:left;margin:0 5px 0 0}
|
||||
#bo_w .bo_v_option li label {vertical-align:baseline}
|
||||
#bo_w .bo_v_option .chk_box input[type="checkbox"] + label span {margin-left:0;margin-right:5px}
|
||||
#bo_w .write_div {margin:10px 0;position:relative}
|
||||
#bo_w .write_div:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_w .bo_w_info:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#bo_w .bo_w_info .frm_input {float:left;margin-bottom:1%}
|
||||
#bo_w #wr_password, #bo_w #wr_homepage {margin-left:1%}
|
||||
#bo_w .wr_content.smarteditor2 iframe {background:#fff}
|
||||
#bo_w .bo_w_tit {position:relative}
|
||||
#bo_w .bo_w_tit .frm_input {padding-right:120px}
|
||||
#bo_w .bo_w_tit #btn_autosave {position:absolute;top:5px;right:5px;line-height:30px;height:30px}
|
||||
#bo_w .bo_w_link label {position:absolute;top:1px;left:1px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;font-size:1.2em;text-align:center;color:#b2b2b2}
|
||||
#bo_w .bo_w_link .frm_input {padding-left:50px}
|
||||
#bo_w .bo_w_flie .lb_icon {position:absolute;top:0px;left:0px;border-radius:3px 0 0 3px;height:38px;line-height:38px;width:40px;font-size:1.2em;text-align:center;color:#b2b2b2}
|
||||
#bo_w .bo_w_flie .frm_file {padding-left:50px;margin-top:3px}
|
||||
#bo_w .bo_w_flie .file_wr {position:relative;border:1px solid #ccc;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;height:40px;margin:0}
|
||||
#bo_w .bo_w_flie .frm_input {margin:10px 0 0}
|
||||
#bo_w .bo_w_flie .file_del {position:absolute;top:10px;right:10px;font-size:0.92em;color:#7d7d7d}
|
||||
#bo_w .bo_w_select select {border:1px solid #d0d3db;width:100%;height:40px;border-radius:3px}
|
||||
#bo_w .btn_submit {padding:0 20px;font-size:1.167em}
|
||||
#bo_w .btn_cancel {border-radius:3px;font-size:1.167em}
|
||||
@@ -0,0 +1,300 @@
|
||||
<?php
|
||||
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
include_once(G5_LIB_PATH.'/thumbnail.lib.php');
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
<script src="<?php echo G5_JS_URL; ?>/viewimageresize.js"></script>
|
||||
|
||||
<!-- 게시물 읽기 시작 { -->
|
||||
|
||||
<article id="bo_v" style="width:<?php echo $width; ?>">
|
||||
<header>
|
||||
<h2 id="bo_v_title">
|
||||
<?php if ($category_name) { ?>
|
||||
<span class="bo_v_cate"><?php echo $view['ca_name']; // 분류 출력 끝 ?></span>
|
||||
<?php } ?>
|
||||
<span class="bo_v_tit">
|
||||
<?php
|
||||
echo cut_str(get_text($view['wr_subject']), 70); // 글제목 출력
|
||||
?></span>
|
||||
</h2>
|
||||
</header>
|
||||
|
||||
<section id="bo_v_info">
|
||||
<h2>페이지 정보</h2>
|
||||
<div class="profile_info">
|
||||
<div class="pf_img"><?php echo get_member_profile_img($view['mb_id']) ?></div>
|
||||
<div class="profile_info_ct">
|
||||
<span class="sound_only">작성자</span> <strong><?php echo $view['name'] ?><?php if ($is_ip_view) { echo " ($ip)"; } ?></strong><br>
|
||||
<span class="sound_only">댓글</span><strong><a href="#bo_vc"> <i class="fa fa-commenting-o" aria-hidden="true"></i> <?php echo number_format($view['wr_comment']) ?>건</a></strong>
|
||||
<span class="sound_only">조회</span><strong><i class="fa fa-eye" aria-hidden="true"></i> <?php echo number_format($view['wr_hit']) ?>회</strong>
|
||||
<strong class="if_date"><span class="sound_only">작성일</span><i class="fa fa-clock-o" aria-hidden="true"></i> <?php echo date("y-m-d H:i", strtotime($view['wr_datetime'])) ?></strong>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 게시물 상단 버튼 시작 { -->
|
||||
<div id="bo_v_top">
|
||||
<?php ob_start(); ?>
|
||||
|
||||
<ul class="btn_bo_user bo_v_com">
|
||||
<li><a href="<?php echo $list_href ?>" class="btn_b01 btn" title="목록"><i class="fa fa-list" aria-hidden="true"></i><span class="sound_only">목록</span></a></li>
|
||||
<?php if ($reply_href) { ?><li><a href="<?php echo $reply_href ?>" class="btn_b01 btn" title="답변"><i class="fa fa-reply" aria-hidden="true"></i><span class="sound_only">답변</span></a></li><?php } ?>
|
||||
<?php if ($write_href) { ?><li><a href="<?php echo $write_href ?>" class="btn_b01 btn" title="글쓰기"><i class="fa fa-pencil" aria-hidden="true"></i><span class="sound_only">글쓰기</span></a></li><?php } ?>
|
||||
<?php if($update_href || $delete_href || $copy_href || $move_href || $search_href) { ?>
|
||||
<li>
|
||||
<button type="button" class="btn_more_opt is_view_btn btn_b01 btn" title="게시판 리스트 옵션"><i class="fa fa-ellipsis-v" aria-hidden="true"></i><span class="sound_only">게시판 리스트 옵션</span></button>
|
||||
<ul class="more_opt is_view_btn">
|
||||
<?php if ($update_href) { ?><li><a href="<?php echo $update_href ?>">수정<i class="fa fa-pencil-square-o" aria-hidden="true"></i></a></li><?php } ?>
|
||||
<?php if ($delete_href) { ?><li><a href="<?php echo $delete_href ?>" onclick="del(this.href); return false;">삭제<i class="fa fa-trash-o" aria-hidden="true"></i></a></li><?php } ?>
|
||||
<?php if ($copy_href) { ?><li><a href="<?php echo $copy_href ?>" onclick="board_move(this.href); return false;">복사<i class="fa fa-files-o" aria-hidden="true"></i></a></li><?php } ?>
|
||||
<?php if ($move_href) { ?><li><a href="<?php echo $move_href ?>" onclick="board_move(this.href); return false;">이동<i class="fa fa-arrows" aria-hidden="true"></i></a></li><?php } ?>
|
||||
<?php if ($search_href) { ?><li><a href="<?php echo $search_href ?>">검색<i class="fa fa-search" aria-hidden="true"></i></a></li><?php } ?>
|
||||
</ul>
|
||||
</li>
|
||||
<?php } ?>
|
||||
</ul>
|
||||
<script>
|
||||
|
||||
jQuery(function($){
|
||||
// 게시판 보기 버튼 옵션
|
||||
$(".btn_more_opt.is_view_btn").on("click", function(e) {
|
||||
e.stopPropagation();
|
||||
$(".more_opt.is_view_btn").toggle();
|
||||
})
|
||||
;
|
||||
$(document).on("click", function (e) {
|
||||
if(!$(e.target).closest('.is_view_btn').length) {
|
||||
$(".more_opt.is_view_btn").hide();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
<?php
|
||||
$link_buttons = ob_get_contents();
|
||||
ob_end_flush();
|
||||
?>
|
||||
</div>
|
||||
<!-- } 게시물 상단 버튼 끝 -->
|
||||
</section>
|
||||
|
||||
<section id="bo_v_atc">
|
||||
<h2 id="bo_v_atc_title">본문</h2>
|
||||
<div id="bo_v_share">
|
||||
<?php include_once(G5_SNS_PATH."/view.sns.skin.php"); ?>
|
||||
<?php if ($scrap_href) { ?><a href="<?php echo $scrap_href; ?>" target="_blank" class="btn btn_b03" onclick="win_scrap(this.href); return false;"><i class="fa fa-bookmark" aria-hidden="true"></i> 스크랩</a><?php } ?>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
// 파일 출력
|
||||
$v_img_count = count($view['file']);
|
||||
if($v_img_count) {
|
||||
echo "<div id=\"bo_v_img\">\n";
|
||||
|
||||
foreach($view['file'] as $view_file) {
|
||||
echo get_file_thumbnail($view_file);
|
||||
}
|
||||
|
||||
echo "</div>\n";
|
||||
}
|
||||
?>
|
||||
|
||||
<!-- 본문 내용 시작 { -->
|
||||
<div id="bo_v_con"><?php echo get_view_thumbnail($view['content']); ?></div>
|
||||
<?php //echo $view['rich_content']; // {이미지:0} 과 같은 코드를 사용할 경우 ?>
|
||||
<!-- } 본문 내용 끝 -->
|
||||
|
||||
<?php if ($is_signature) { ?><p><?php echo $signature ?></p><?php } ?>
|
||||
|
||||
|
||||
<!-- 추천 비추천 시작 { -->
|
||||
<?php if ( $good_href || $nogood_href) { ?>
|
||||
<div id="bo_v_act">
|
||||
<?php if ($good_href) { ?>
|
||||
<span class="bo_v_act_gng">
|
||||
<a href="<?php echo $good_href.'&'.$qstr ?>" id="good_button" class="bo_v_good"><i class="fa fa-thumbs-o-up" aria-hidden="true"></i><span class="sound_only">추천</span><strong><?php echo number_format($view['wr_good']) ?></strong></a>
|
||||
<b id="bo_v_act_good"></b>
|
||||
</span>
|
||||
<?php } ?>
|
||||
<?php if ($nogood_href) { ?>
|
||||
<span class="bo_v_act_gng">
|
||||
<a href="<?php echo $nogood_href.'&'.$qstr ?>" id="nogood_button" class="bo_v_nogood"><i class="fa fa-thumbs-o-down" aria-hidden="true"></i><span class="sound_only">비추천</span><strong><?php echo number_format($view['wr_nogood']) ?></strong></a>
|
||||
<b id="bo_v_act_nogood"></b>
|
||||
</span>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<?php } else {
|
||||
if($board['bo_use_good'] || $board['bo_use_nogood']) {
|
||||
?>
|
||||
<div id="bo_v_act">
|
||||
<?php if($board['bo_use_good']) { ?><span class="bo_v_good"><i class="fa fa-thumbs-o-up" aria-hidden="true"></i><span class="sound_only">추천</span><strong><?php echo number_format($view['wr_good']) ?></strong></span><?php } ?>
|
||||
<?php if($board['bo_use_nogood']) { ?><span class="bo_v_nogood"><i class="fa fa-thumbs-o-down" aria-hidden="true"></i><span class="sound_only">비추천</span><strong><?php echo number_format($view['wr_nogood']) ?></strong></span><?php } ?>
|
||||
</div>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
<!-- } 추천 비추천 끝 -->
|
||||
</section>
|
||||
|
||||
<?php
|
||||
$cnt = 0;
|
||||
if ($view['file']['count']) {
|
||||
for ($i=0; $i<count($view['file']); $i++) {
|
||||
if (isset($view['file'][$i]['source']) && $view['file'][$i]['source'] && !$view['file'][$i]['view'])
|
||||
$cnt++;
|
||||
}
|
||||
}
|
||||
?>
|
||||
|
||||
<?php if($cnt) { ?>
|
||||
<!-- 첨부파일 시작 { -->
|
||||
<section id="bo_v_file">
|
||||
<h2>첨부파일</h2>
|
||||
<ul>
|
||||
<?php
|
||||
// 가변 파일
|
||||
for ($i=0; $i<count($view['file']); $i++) {
|
||||
if (isset($view['file'][$i]['source']) && $view['file'][$i]['source'] && !$view['file'][$i]['view']) {
|
||||
?>
|
||||
<li>
|
||||
<i class="fa fa-folder-open" aria-hidden="true"></i>
|
||||
<a href="<?php echo $view['file'][$i]['href']; ?>" class="view_file_download">
|
||||
<strong><?php echo $view['file'][$i]['source'] ?></strong> <?php echo $view['file'][$i]['content'] ?> (<?php echo $view['file'][$i]['size'] ?>)
|
||||
</a>
|
||||
<br>
|
||||
<span class="bo_v_file_cnt"><?php echo $view['file'][$i]['download'] ?>회 다운로드 | DATE : <?php echo $view['file'][$i]['datetime'] ?></span>
|
||||
</li>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</section>
|
||||
<!-- } 첨부파일 끝 -->
|
||||
<?php } ?>
|
||||
|
||||
<?php if(isset($view['link']) && array_filter($view['link'])) { ?>
|
||||
<!-- 관련링크 시작 { -->
|
||||
<section id="bo_v_link">
|
||||
<h2>관련링크</h2>
|
||||
<ul>
|
||||
<?php
|
||||
// 링크
|
||||
$cnt = 0;
|
||||
for ($i=1; $i<=count($view['link']); $i++) {
|
||||
if ($view['link'][$i]) {
|
||||
$cnt++;
|
||||
$link = cut_str($view['link'][$i], 70);
|
||||
?>
|
||||
<li>
|
||||
<i class="fa fa-link" aria-hidden="true"></i>
|
||||
<a href="<?php echo $view['link_href'][$i] ?>" target="_blank">
|
||||
<strong><?php echo $link ?></strong>
|
||||
</a>
|
||||
<br>
|
||||
<span class="bo_v_link_cnt"><?php echo $view['link_hit'][$i] ?>회 연결</span>
|
||||
</li>
|
||||
<?php
|
||||
}
|
||||
}
|
||||
?>
|
||||
</ul>
|
||||
</section>
|
||||
<!-- } 관련링크 끝 -->
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($prev_href || $next_href) { ?>
|
||||
<ul class="bo_v_nb">
|
||||
<?php if ($prev_href) { ?><li class="btn_prv"><span class="nb_tit"><i class="fa fa-chevron-up" aria-hidden="true"></i> 이전글</span><a href="<?php echo $prev_href ?>"><?php echo $prev_wr_subject;?></a> <span class="nb_date"><?php echo str_replace('-', '.', substr($prev_wr_date, '2', '8')); ?></span></li><?php } ?>
|
||||
<?php if ($next_href) { ?><li class="btn_next"><span class="nb_tit"><i class="fa fa-chevron-down" aria-hidden="true"></i> 다음글</span><a href="<?php echo $next_href ?>"><?php echo $next_wr_subject;?></a> <span class="nb_date"><?php echo str_replace('-', '.', substr($next_wr_date, '2', '8')); ?></span></li><?php } ?>
|
||||
</ul>
|
||||
<?php } ?>
|
||||
|
||||
<?php
|
||||
// 코멘트 입출력
|
||||
include_once(G5_BBS_PATH.'/view_comment.php');
|
||||
?>
|
||||
</article>
|
||||
<!-- } 게시판 읽기 끝 -->
|
||||
|
||||
<script>
|
||||
<?php if ($board['bo_download_point'] < 0) { ?>
|
||||
$(function() {
|
||||
$("a.view_file_download").click(function() {
|
||||
if(!g5_is_member) {
|
||||
alert("다운로드 권한이 없습니다.\n회원이시라면 로그인 후 이용해 보십시오.");
|
||||
return false;
|
||||
}
|
||||
|
||||
var msg = "파일을 다운로드 하시면 포인트가 차감(<?php echo number_format($board['bo_download_point']) ?>점)됩니다.\n\n포인트는 게시물당 한번만 차감되며 다음에 다시 다운로드 하셔도 중복하여 차감하지 않습니다.\n\n그래도 다운로드 하시겠습니까?";
|
||||
|
||||
if(confirm(msg)) {
|
||||
var href = $(this).attr("href")+"&js=on";
|
||||
$(this).attr("href", href);
|
||||
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
});
|
||||
<?php } ?>
|
||||
|
||||
function board_move(href)
|
||||
{
|
||||
window.open(href, "boardmove", "left=50, top=50, width=500, height=550, scrollbars=1");
|
||||
}
|
||||
</script>
|
||||
|
||||
<script>
|
||||
$(function() {
|
||||
$("a.view_image").click(function() {
|
||||
window.open(this.href, "large_image", "location=yes,links=no,toolbar=no,top=10,left=10,width=10,height=10,resizable=yes,scrollbars=no,status=no");
|
||||
return false;
|
||||
});
|
||||
|
||||
// 추천, 비추천
|
||||
$("#good_button, #nogood_button").click(function() {
|
||||
var $tx;
|
||||
if(this.id == "good_button")
|
||||
$tx = $("#bo_v_act_good");
|
||||
else
|
||||
$tx = $("#bo_v_act_nogood");
|
||||
|
||||
excute_good(this.href, $(this), $tx);
|
||||
return false;
|
||||
});
|
||||
|
||||
// 이미지 리사이즈
|
||||
$("#bo_v_atc").viewimageresize();
|
||||
});
|
||||
|
||||
function excute_good(href, $el, $tx)
|
||||
{
|
||||
$.post(
|
||||
href,
|
||||
{ js: "on" },
|
||||
function(data) {
|
||||
if(data.error) {
|
||||
alert(data.error);
|
||||
return false;
|
||||
}
|
||||
|
||||
if(data.count) {
|
||||
$el.find("strong").text(number_format(String(data.count)));
|
||||
if($tx.attr("id").search("nogood") > -1) {
|
||||
$tx.text("이 글을 비추천하셨습니다.");
|
||||
$tx.fadeIn(200).delay(2500).fadeOut(200);
|
||||
} else {
|
||||
$tx.text("이 글을 추천하셨습니다.");
|
||||
$tx.fadeIn(200).delay(2500).fadeOut(200);
|
||||
}
|
||||
}
|
||||
}, "json"
|
||||
);
|
||||
}
|
||||
</script>
|
||||
<!-- } 게시글 읽기 끝 -->
|
||||
@@ -0,0 +1,356 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
?>
|
||||
|
||||
<script>
|
||||
// 글자수 제한
|
||||
var char_min = parseInt(<?php echo $comment_min ?>); // 최소
|
||||
var char_max = parseInt(<?php echo $comment_max ?>); // 최대
|
||||
</script>
|
||||
<button type="button" class="cmt_btn"><span class="total"><b>댓글</b> <?php echo $view['wr_comment']; ?></span><span class="cmt_more"></span></button>
|
||||
<!-- 댓글 시작 { -->
|
||||
<section id="bo_vc">
|
||||
<h2>댓글목록</h2>
|
||||
<?php
|
||||
$cmt_amt = count($list);
|
||||
for ($i=0; $i<$cmt_amt; $i++) {
|
||||
$comment_id = $list[$i]['wr_id'];
|
||||
$cmt_depth = strlen($list[$i]['wr_comment_reply']) * 50;
|
||||
$comment = $list[$i]['content'];
|
||||
/*
|
||||
if (strstr($list[$i]['wr_option'], "secret")) {
|
||||
$str = $str;
|
||||
}
|
||||
*/
|
||||
$comment = preg_replace("/\[\<a\s.*href\=\"(http|https|ftp|mms)\:\/\/([^[:space:]]+)\.(mp3|wma|wmv|asf|asx|mpg|mpeg)\".*\<\/a\>\]/i", "<script>doc_write(obj_movie('$1://$2.$3'));</script>", $comment);
|
||||
$cmt_sv = $cmt_amt - $i + 1; // 댓글 헤더 z-index 재설정 ie8 이하 사이드뷰 겹침 문제 해결
|
||||
$c_reply_href = $comment_common_url.'&c_id='.$comment_id.'&w=c#bo_vc_w';
|
||||
$c_edit_href = $comment_common_url.'&c_id='.$comment_id.'&w=cu#bo_vc_w';
|
||||
$is_comment_reply_edit = ($list[$i]['is_reply'] || $list[$i]['is_edit'] || $list[$i]['is_del']) ? 1 : 0;
|
||||
?>
|
||||
|
||||
<article id="c_<?php echo $comment_id ?>" <?php if ($cmt_depth) { ?>style="margin-left:<?php echo $cmt_depth ?>px;border-top-color:#e0e0e0"<?php } ?>>
|
||||
<div class="pf_img"><?php echo get_member_profile_img($list[$i]['mb_id']) ?></div>
|
||||
|
||||
<div class="cm_wrap">
|
||||
|
||||
<header style="z-index:<?php echo $cmt_sv; ?>">
|
||||
<h2><?php echo get_text($list[$i]['wr_name']); ?>님의 <?php if ($cmt_depth) { ?><span class="sound_only">댓글의</span><?php } ?> 댓글</h2>
|
||||
<?php echo $list[$i]['name'] ?>
|
||||
<?php if ($is_ip_view) { ?>
|
||||
<span class="sound_only">아이피</span>
|
||||
<span>(<?php echo $list[$i]['ip']; ?>)</span>
|
||||
<?php } ?>
|
||||
<span class="sound_only">작성일</span>
|
||||
<span class="bo_vc_hdinfo"><i class="fa fa-clock-o" aria-hidden="true"></i> <time datetime="<?php echo date('Y-m-d\TH:i:s+09:00', strtotime($list[$i]['datetime'])) ?>"><?php echo $list[$i]['datetime'] ?></time></span>
|
||||
<?php
|
||||
include(G5_SNS_PATH.'/view_comment_list.sns.skin.php');
|
||||
?>
|
||||
</header>
|
||||
|
||||
<!-- 댓글 출력 -->
|
||||
<div class="cmt_contents">
|
||||
<p>
|
||||
<?php if (strstr($list[$i]['wr_option'], "secret")) { ?><img src="<?php echo $board_skin_url; ?>/img/icon_secret.gif" alt="비밀글"><?php } ?>
|
||||
<?php echo $comment ?>
|
||||
</p>
|
||||
<?php if($is_comment_reply_edit) {
|
||||
if($w == 'cu') {
|
||||
$sql = " select wr_id, wr_content, mb_id from $write_table where wr_id = '$c_id' and wr_is_comment = '1' ";
|
||||
$cmt = sql_fetch($sql);
|
||||
if (isset($cmt)) {
|
||||
if (!($is_admin || ($member['mb_id'] == $cmt['mb_id'] && $cmt['mb_id']))) {
|
||||
$cmt['wr_content'] = '';
|
||||
}
|
||||
$c_wr_content = $cmt['wr_content'];
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<span id="edit_<?php echo $comment_id ?>" class="bo_vc_w"></span><!-- 수정 -->
|
||||
<span id="reply_<?php echo $comment_id ?>" class="bo_vc_w"></span><!-- 답변 -->
|
||||
|
||||
<input type="hidden" value="<?php echo strstr($list[$i]['wr_option'],"secret") ?>" id="secret_comment_<?php echo $comment_id ?>">
|
||||
<textarea id="save_comment_<?php echo $comment_id ?>" style="display:none"><?php echo get_text($list[$i]['content1'], 0) ?></textarea>
|
||||
</div>
|
||||
<?php if($is_comment_reply_edit) { ?>
|
||||
<div class="bo_vl_opt">
|
||||
<button type="button" class="btn_cm_opt btn_b01 btn"><i class="fa fa-ellipsis-v" aria-hidden="true"></i><span class="sound_only">댓글 옵션</span></button>
|
||||
<ul class="bo_vc_act">
|
||||
<?php if ($list[$i]['is_reply']) { ?><li><a href="<?php echo $c_reply_href; ?>" onclick="comment_box('<?php echo $comment_id ?>', 'c'); return false;">답변</a></li><?php } ?>
|
||||
<?php if ($list[$i]['is_edit']) { ?><li><a href="<?php echo $c_edit_href; ?>" onclick="comment_box('<?php echo $comment_id ?>', 'cu'); return false;">수정</a></li><?php } ?>
|
||||
<?php if ($list[$i]['is_del']) { ?><li><a href="<?php echo $list[$i]['del_link']; ?>" onclick="return comment_delete();">삭제</a></li><?php } ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<script>
|
||||
$(function() {
|
||||
// 댓글 옵션창 열기
|
||||
$(".btn_cm_opt").on("click", function(){
|
||||
$(this).parent("div").children(".bo_vc_act").show();
|
||||
});
|
||||
|
||||
// 댓글 옵션창 닫기
|
||||
$(document).mouseup(function (e){
|
||||
var container = $(".bo_vc_act");
|
||||
if( container.has(e.target).length === 0)
|
||||
container.hide();
|
||||
});
|
||||
});
|
||||
|
||||
</script>
|
||||
</article>
|
||||
<?php } ?>
|
||||
<?php if ($i == 0) { //댓글이 없다면 ?><p id="bo_vc_empty">등록된 댓글이 없습니다.</p><?php } ?>
|
||||
|
||||
</section>
|
||||
<!-- } 댓글 끝 -->
|
||||
|
||||
<?php if ($is_comment_write) {
|
||||
if($w == '')
|
||||
$w = 'c';
|
||||
?>
|
||||
<!-- 댓글 쓰기 시작 { -->
|
||||
<aside id="bo_vc_w" class="bo_vc_w">
|
||||
<h2>댓글쓰기</h2>
|
||||
<form name="fviewcomment" id="fviewcomment" action="<?php echo $comment_action_url; ?>" onsubmit="return fviewcomment_submit(this);" method="post" autocomplete="off">
|
||||
<input type="hidden" name="w" value="<?php echo $w ?>" id="w">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="wr_id" value="<?php echo $wr_id ?>">
|
||||
<input type="hidden" name="comment_id" value="<?php echo $c_id ?>" id="comment_id">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<input type="hidden" name="sfl" value="<?php echo $sfl ?>">
|
||||
<input type="hidden" name="stx" value="<?php echo $stx ?>">
|
||||
<input type="hidden" name="spt" value="<?php echo $spt ?>">
|
||||
<input type="hidden" name="page" value="<?php echo $page ?>">
|
||||
<input type="hidden" name="is_good" value="">
|
||||
|
||||
<span class="sound_only">내용</span>
|
||||
<?php if ($comment_min || $comment_max) { ?><strong id="char_cnt"><span id="char_count"></span>글자</strong><?php } ?>
|
||||
<textarea id="wr_content" name="wr_content" maxlength="10000" required class="required" title="내용" placeholder="댓글내용을 입력해주세요"
|
||||
<?php if ($comment_min || $comment_max) { ?>onkeyup="check_byte('wr_content', 'char_count');"<?php } ?>><?php echo $c_wr_content; ?></textarea>
|
||||
<?php if ($comment_min || $comment_max) { ?><script> check_byte('wr_content', 'char_count'); </script><?php } ?>
|
||||
<script>
|
||||
$(document).on("keyup change", "textarea#wr_content[maxlength]", function() {
|
||||
var str = $(this).val()
|
||||
var mx = parseInt($(this).attr("maxlength"))
|
||||
if (str.length > mx) {
|
||||
$(this).val(str.substr(0, mx));
|
||||
return false;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<div class="bo_vc_w_wr">
|
||||
<div class="bo_vc_w_info">
|
||||
<?php if ($is_guest) { ?>
|
||||
<label for="wr_name" class="sound_only">이름<strong> 필수</strong></label>
|
||||
<input type="text" name="wr_name" value="<?php echo get_cookie("ck_sns_name"); ?>" id="wr_name" required class="frm_input required" size="25" placeholder="이름">
|
||||
<label for="wr_password" class="sound_only">비밀번호<strong> 필수</strong></label>
|
||||
<input type="password" name="wr_password" id="wr_password" required class="frm_input required" size="25" placeholder="비밀번호">
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
if($board['bo_use_sns'] && ($config['cf_facebook_appid'] || $config['cf_twitter_key'])) {
|
||||
?>
|
||||
<span class="sound_only">SNS 동시등록</span>
|
||||
<span id="bo_vc_send_sns"></span>
|
||||
<?php } ?>
|
||||
<?php if ($is_guest) { ?>
|
||||
<?php echo $captcha_html; ?>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<div class="btn_confirm">
|
||||
<span class="secret_cm chk_box">
|
||||
<input type="checkbox" name="wr_secret" value="secret" id="wr_secret" class="selec_chk">
|
||||
<label for="wr_secret"><span></span>비밀글</label>
|
||||
</span>
|
||||
<button type="submit" id="btn_submit" class="btn_submit">댓글등록</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</aside>
|
||||
|
||||
<script>
|
||||
var save_before = '';
|
||||
var save_html = document.getElementById('bo_vc_w').innerHTML;
|
||||
|
||||
function good_and_write()
|
||||
{
|
||||
var f = document.fviewcomment;
|
||||
if (fviewcomment_submit(f)) {
|
||||
f.is_good.value = 1;
|
||||
f.submit();
|
||||
} else {
|
||||
f.is_good.value = 0;
|
||||
}
|
||||
}
|
||||
|
||||
function fviewcomment_submit(f)
|
||||
{
|
||||
var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자
|
||||
|
||||
f.is_good.value = 0;
|
||||
|
||||
var subject = "";
|
||||
var content = "";
|
||||
$.ajax({
|
||||
url: g5_bbs_url+"/ajax.filter.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
"subject": "",
|
||||
"content": f.wr_content.value
|
||||
},
|
||||
dataType: "json",
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function(data, textStatus) {
|
||||
subject = data.subject;
|
||||
content = data.content;
|
||||
}
|
||||
});
|
||||
|
||||
if (content) {
|
||||
alert("내용에 금지단어('"+content+"')가 포함되어있습니다");
|
||||
f.wr_content.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 양쪽 공백 없애기
|
||||
var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자
|
||||
document.getElementById('wr_content').value = document.getElementById('wr_content').value.replace(pattern, "");
|
||||
if (char_min > 0 || char_max > 0)
|
||||
{
|
||||
check_byte('wr_content', 'char_count');
|
||||
var cnt = parseInt(document.getElementById('char_count').innerHTML);
|
||||
if (char_min > 0 && char_min > cnt)
|
||||
{
|
||||
alert("댓글은 "+char_min+"글자 이상 쓰셔야 합니다.");
|
||||
return false;
|
||||
} else if (char_max > 0 && char_max < cnt)
|
||||
{
|
||||
alert("댓글은 "+char_max+"글자 이하로 쓰셔야 합니다.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (!document.getElementById('wr_content').value)
|
||||
{
|
||||
alert("댓글을 입력하여 주십시오.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (typeof(f.wr_name) != 'undefined')
|
||||
{
|
||||
f.wr_name.value = f.wr_name.value.replace(pattern, "");
|
||||
if (f.wr_name.value == '')
|
||||
{
|
||||
alert('이름이 입력되지 않았습니다.');
|
||||
f.wr_name.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof(f.wr_password) != 'undefined')
|
||||
{
|
||||
f.wr_password.value = f.wr_password.value.replace(pattern, "");
|
||||
if (f.wr_password.value == '')
|
||||
{
|
||||
alert('비밀번호가 입력되지 않았습니다.');
|
||||
f.wr_password.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
<?php if($is_guest) echo chk_captcha_js(); ?>
|
||||
|
||||
set_comment_token(f);
|
||||
|
||||
document.getElementById("btn_submit").disabled = "disabled";
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function comment_box(comment_id, work)
|
||||
{
|
||||
var el_id,
|
||||
form_el = 'fviewcomment',
|
||||
respond = document.getElementById(form_el);
|
||||
|
||||
// 댓글 아이디가 넘어오면 답변, 수정
|
||||
if (comment_id)
|
||||
{
|
||||
if (work == 'c')
|
||||
el_id = 'reply_' + comment_id;
|
||||
else
|
||||
el_id = 'edit_' + comment_id;
|
||||
}
|
||||
else
|
||||
el_id = 'bo_vc_w';
|
||||
|
||||
if (save_before != el_id)
|
||||
{
|
||||
if (save_before)
|
||||
{
|
||||
document.getElementById(save_before).style.display = 'none';
|
||||
}
|
||||
|
||||
document.getElementById(el_id).style.display = '';
|
||||
document.getElementById(el_id).appendChild(respond);
|
||||
//입력값 초기화
|
||||
document.getElementById('wr_content').value = '';
|
||||
|
||||
// 댓글 수정
|
||||
if (work == 'cu')
|
||||
{
|
||||
document.getElementById('wr_content').value = document.getElementById('save_comment_' + comment_id).value;
|
||||
if (typeof char_count != 'undefined')
|
||||
check_byte('wr_content', 'char_count');
|
||||
if (document.getElementById('secret_comment_'+comment_id).value)
|
||||
document.getElementById('wr_secret').checked = true;
|
||||
else
|
||||
document.getElementById('wr_secret').checked = false;
|
||||
}
|
||||
|
||||
document.getElementById('comment_id').value = comment_id;
|
||||
document.getElementById('w').value = work;
|
||||
|
||||
if(save_before)
|
||||
$("#captcha_reload").trigger("click");
|
||||
|
||||
save_before = el_id;
|
||||
}
|
||||
}
|
||||
|
||||
function comment_delete()
|
||||
{
|
||||
return confirm("이 댓글을 삭제하시겠습니까?");
|
||||
}
|
||||
|
||||
comment_box('', 'c'); // 댓글 입력폼이 보이도록 처리하기위해서 추가 (root님)
|
||||
|
||||
<?php if($board['bo_use_sns'] && ($config['cf_facebook_appid'] || $config['cf_twitter_key'])) { ?>
|
||||
|
||||
$(function() {
|
||||
// sns 등록
|
||||
$("#bo_vc_send_sns").load(
|
||||
"<?php echo G5_SNS_URL; ?>/view_comment_write.sns.skin.php?bo_table=<?php echo $bo_table; ?>",
|
||||
function() {
|
||||
save_html = document.getElementById('bo_vc_w').innerHTML;
|
||||
}
|
||||
);
|
||||
});
|
||||
<?php } ?>
|
||||
</script>
|
||||
<?php } ?>
|
||||
<!-- } 댓글 쓰기 끝 -->
|
||||
<script>
|
||||
jQuery(function($) {
|
||||
//댓글열기
|
||||
$(".cmt_btn").click(function(e){
|
||||
e.preventDefault();
|
||||
$(this).toggleClass("cmt_btn_op");
|
||||
$("#bo_vc").toggle();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,253 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// add_stylesheet('css 구문', 출력순서); 숫자가 작을 수록 먼저 출력됨
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css">', 0);
|
||||
?>
|
||||
|
||||
<section id="bo_w">
|
||||
<h2 class="sound_only"><?php echo $g5['title'] ?></h2>
|
||||
|
||||
<!-- 게시물 작성/수정 시작 { -->
|
||||
<form name="fwrite" id="fwrite" action="<?php echo $action_url ?>" onsubmit="return fwrite_submit(this);" method="post" enctype="multipart/form-data" autocomplete="off" style="width:<?php echo $width; ?>">
|
||||
<input type="hidden" name="uid" value="<?php echo get_uniqid(); ?>">
|
||||
<input type="hidden" name="w" value="<?php echo $w ?>">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="wr_id" value="<?php echo $wr_id ?>">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<input type="hidden" name="sfl" value="<?php echo $sfl ?>">
|
||||
<input type="hidden" name="stx" value="<?php echo $stx ?>">
|
||||
<input type="hidden" name="spt" value="<?php echo $spt ?>">
|
||||
<input type="hidden" name="sst" value="<?php echo $sst ?>">
|
||||
<input type="hidden" name="sod" value="<?php echo $sod ?>">
|
||||
<input type="hidden" name="page" value="<?php echo $page ?>">
|
||||
<?php
|
||||
$option = '';
|
||||
$option_hidden = '';
|
||||
if ($is_notice || $is_html || $is_secret || $is_mail) {
|
||||
$option = '';
|
||||
if ($is_notice) {
|
||||
$option .= PHP_EOL.'<li class="chk_box"><input type="checkbox" id="notice" name="notice" class="selec_chk" value="1" '.$notice_checked.'>'.PHP_EOL.'<label for="notice"><span></span>공지</label></li>';
|
||||
}
|
||||
if ($is_html) {
|
||||
if ($is_dhtml_editor) {
|
||||
$option_hidden .= '<input type="hidden" value="html1" name="html">';
|
||||
} else {
|
||||
$option .= PHP_EOL.'<li class="chk_box"><input type="checkbox" id="html" name="html" onclick="html_auto_br(this);" class="selec_chk" value="'.$html_value.'" '.$html_checked.'>'.PHP_EOL.'<label for="html"><span></span>html</label></li>';
|
||||
}
|
||||
}
|
||||
if ($is_secret) {
|
||||
if ($is_admin || $is_secret==1) {
|
||||
$option .= PHP_EOL.'<li class="chk_box"><input type="checkbox" id="secret" name="secret" class="selec_chk" value="secret" '.$secret_checked.'>'.PHP_EOL.'<label for="secret"><span></span>비밀글</label></li>';
|
||||
} else {
|
||||
$option_hidden .= '<input type="hidden" name="secret" value="secret">';
|
||||
}
|
||||
}
|
||||
if ($is_mail) {
|
||||
$option .= PHP_EOL.'<li class="chk_box"><input type="checkbox" id="mail" name="mail" class="selec_chk" value="mail" '.$recv_email_checked.'>'.PHP_EOL.'<label for="mail"><span></span>답변메일받기</label></li>';
|
||||
}
|
||||
}
|
||||
echo $option_hidden;
|
||||
?>
|
||||
|
||||
<?php if ($is_category) { ?>
|
||||
<div class="bo_w_select write_div">
|
||||
<label for="ca_name" class="sound_only">분류<strong>필수</strong></label>
|
||||
<select name="ca_name" id="ca_name" required>
|
||||
<option value="">분류를 선택하세요</option>
|
||||
<?php echo $category_option ?>
|
||||
</select>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<div class="bo_w_info write_div">
|
||||
<?php if ($is_name) { ?>
|
||||
<label for="wr_name" class="sound_only">이름<strong>필수</strong></label>
|
||||
<input type="text" name="wr_name" value="<?php echo $name ?>" id="wr_name" required class="frm_input half_input required" placeholder="이름">
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($is_password) { ?>
|
||||
<label for="wr_password" class="sound_only">비밀번호<strong>필수</strong></label>
|
||||
<input type="password" name="wr_password" id="wr_password" <?php echo $password_required ?> class="frm_input half_input <?php echo $password_required ?>" placeholder="비밀번호">
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($is_email) { ?>
|
||||
<label for="wr_email" class="sound_only">이메일</label>
|
||||
<input type="text" name="wr_email" value="<?php echo $email ?>" id="wr_email" class="frm_input half_input email " placeholder="이메일">
|
||||
<?php } ?>
|
||||
|
||||
<?php if ($is_homepage) { ?>
|
||||
<label for="wr_homepage" class="sound_only">홈페이지</label>
|
||||
<input type="text" name="wr_homepage" value="<?php echo $homepage ?>" id="wr_homepage" class="frm_input half_input" size="50" placeholder="홈페이지">
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
<?php if ($option) { ?>
|
||||
<div class="write_div">
|
||||
<span class="sound_only">옵션</span>
|
||||
<ul class="bo_v_option">
|
||||
<?php echo $option ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<div class="bo_w_tit write_div">
|
||||
<label for="wr_subject" class="sound_only">제목<strong>필수</strong></label>
|
||||
|
||||
<div id="autosave_wrapper" class="write_div">
|
||||
<input type="text" name="wr_subject" value="<?php echo $subject ?>" id="wr_subject" required class="frm_input full_input required" size="50" maxlength="255" placeholder="제목">
|
||||
<?php if ($is_member) { // 임시 저장된 글 기능 ?>
|
||||
<script src="<?php echo G5_JS_URL; ?>/autosave.js"></script>
|
||||
<?php if($editor_content_js) echo $editor_content_js; ?>
|
||||
<button type="button" id="btn_autosave" class="btn_frmline">임시 저장된 글 (<span id="autosave_count"><?php echo $autosave_count; ?></span>)</button>
|
||||
<div id="autosave_pop">
|
||||
<strong>임시 저장된 글 목록</strong>
|
||||
<ul></ul>
|
||||
<div><button type="button" class="autosave_close">닫기</button></div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="write_div">
|
||||
<label for="wr_content" class="sound_only">내용<strong>필수</strong></label>
|
||||
<div class="wr_content <?php echo $is_dhtml_editor ? $config['cf_editor'] : ''; ?>">
|
||||
<?php if($write_min || $write_max) { ?>
|
||||
<!-- 최소/최대 글자 수 사용 시 -->
|
||||
<p id="char_count_desc">이 게시판은 최소 <strong><?php echo $write_min; ?></strong>글자 이상, 최대 <strong><?php echo $write_max; ?></strong>글자 이하까지 글을 쓰실 수 있습니다.</p>
|
||||
<?php } ?>
|
||||
<?php echo $editor_html; // 에디터 사용시는 에디터로, 아니면 textarea 로 노출 ?>
|
||||
<?php if($write_min || $write_max) { ?>
|
||||
<!-- 최소/최대 글자 수 사용 시 -->
|
||||
<div id="char_count_wrap"><span id="char_count"></span>글자</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<?php for ($i=1; $is_link && $i<=G5_LINK_COUNT; $i++) { ?>
|
||||
<div class="bo_w_link write_div">
|
||||
<label for="wr_link<?php echo $i ?>"><i class="fa fa-link" aria-hidden="true"></i><span class="sound_only"> 링크 #<?php echo $i ?></span></label>
|
||||
<input type="text" name="wr_link<?php echo $i ?>" value="<?php if($w=="u"){ echo $write['wr_link'.$i]; } ?>" id="wr_link<?php echo $i ?>" class="frm_input full_input" size="50">
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<?php for ($i=0; $is_file && $i<$file_count; $i++) { ?>
|
||||
<div class="bo_w_flie write_div">
|
||||
<div class="file_wr write_div">
|
||||
<label for="bf_file_<?php echo $i+1 ?>" class="lb_icon"><i class="fa fa-folder-open" aria-hidden="true"></i><span class="sound_only"> 파일 #<?php echo $i+1 ?></span></label>
|
||||
<input type="file" name="bf_file[]" id="bf_file_<?php echo $i+1 ?>" title="파일첨부 <?php echo $i+1 ?> : 용량 <?php echo $upload_max_filesize ?> 이하만 업로드 가능" class="frm_file ">
|
||||
</div>
|
||||
<?php if ($is_file_content) { ?>
|
||||
<input type="text" name="bf_content[]" value="<?php echo ($w == 'u') ? $file[$i]['bf_content'] : ''; ?>" title="파일 설명을 입력해주세요." class="full_input frm_input" size="50" placeholder="파일 설명을 입력해주세요.">
|
||||
<?php } ?>
|
||||
|
||||
<?php if($w == 'u' && $file[$i]['file']) { ?>
|
||||
<span class="file_del">
|
||||
<input type="checkbox" id="bf_file_del<?php echo $i ?>" name="bf_file_del[<?php echo $i; ?>]" value="1"> <label for="bf_file_del<?php echo $i ?>"><?php echo $file[$i]['source'].'('.$file[$i]['size'].')'; ?> 파일 삭제</label>
|
||||
</span>
|
||||
<?php } ?>
|
||||
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
|
||||
<?php if ($is_use_captcha) { //자동등록방지 ?>
|
||||
<div class="write_div">
|
||||
<?php echo $captcha_html ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<div class="btn_confirm write_div">
|
||||
<a href="<?php echo get_pretty_url($bo_table); ?>" class="btn_cancel btn">취소</a>
|
||||
<button type="submit" id="btn_submit" accesskey="s" class="btn_submit btn">작성완료</button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
<?php if($write_min || $write_max) { ?>
|
||||
// 글자수 제한
|
||||
var char_min = parseInt(<?php echo $write_min; ?>); // 최소
|
||||
var char_max = parseInt(<?php echo $write_max; ?>); // 최대
|
||||
check_byte("wr_content", "char_count");
|
||||
|
||||
$(function() {
|
||||
$("#wr_content").on("keyup", function() {
|
||||
check_byte("wr_content", "char_count");
|
||||
});
|
||||
});
|
||||
|
||||
<?php } ?>
|
||||
function html_auto_br(obj)
|
||||
{
|
||||
if (obj.checked) {
|
||||
result = confirm("자동 줄바꿈을 하시겠습니까?\n\n자동 줄바꿈은 게시물 내용중 줄바뀐 곳을<br>태그로 변환하는 기능입니다.");
|
||||
if (result)
|
||||
obj.value = "html2";
|
||||
else
|
||||
obj.value = "html1";
|
||||
}
|
||||
else
|
||||
obj.value = "";
|
||||
}
|
||||
|
||||
function fwrite_submit(f)
|
||||
{
|
||||
<?php echo $editor_js; // 에디터 사용시 자바스크립트에서 내용을 폼필드로 넣어주며 내용이 입력되었는지 검사함 ?>
|
||||
|
||||
var subject = "";
|
||||
var content = "";
|
||||
$.ajax({
|
||||
url: g5_bbs_url+"/ajax.filter.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
"subject": f.wr_subject.value,
|
||||
"content": f.wr_content.value
|
||||
},
|
||||
dataType: "json",
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function(data, textStatus) {
|
||||
subject = data.subject;
|
||||
content = data.content;
|
||||
}
|
||||
});
|
||||
|
||||
if (subject) {
|
||||
alert("제목에 금지단어('"+subject+"')가 포함되어있습니다");
|
||||
f.wr_subject.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (content) {
|
||||
alert("내용에 금지단어('"+content+"')가 포함되어있습니다");
|
||||
if (typeof(ed_wr_content) != "undefined")
|
||||
ed_wr_content.returnFalse();
|
||||
else
|
||||
f.wr_content.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (document.getElementById("char_count")) {
|
||||
if (char_min > 0 || char_max > 0) {
|
||||
var cnt = parseInt(check_byte("wr_content", "char_count"));
|
||||
if (char_min > 0 && char_min > cnt) {
|
||||
alert("내용은 "+char_min+"글자 이상 쓰셔야 합니다.");
|
||||
return false;
|
||||
}
|
||||
else if (char_max > 0 && char_max < cnt) {
|
||||
alert("내용은 "+char_max+"글자 이하로 쓰셔야 합니다.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
<?php echo $captcha_js; // 캡챠 사용시 자바스크립트에서 입력된 캡챠를 검사함 ?>
|
||||
|
||||
document.getElementById("btn_submit").disabled = "disabled";
|
||||
|
||||
return true;
|
||||
}
|
||||
</script>
|
||||
</section>
|
||||
<!-- } 게시물 작성/수정 끝 -->
|
||||
@@ -0,0 +1,48 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
/**
|
||||
* interview :: config.php
|
||||
* '인터뷰' 게시판 전용 설정 파일
|
||||
*/
|
||||
|
||||
// 💡 [핵심] '심층취재(coverage)'와 동일한 코어 및 설정을 사용합니다.
|
||||
$board_config = array(
|
||||
'list' => array(
|
||||
'default_view_mode' => 'card',
|
||||
),
|
||||
'write' => array(
|
||||
'use_summary' => true,
|
||||
'summary_label' => '인터뷰 요약',
|
||||
'summary_placeholder' => '목록에 표시될 인터뷰의 핵심 요약 내용을 입력하세요.',
|
||||
|
||||
'use_external_link' => false,
|
||||
|
||||
'file_labels' => array(
|
||||
1 => '썸네일 이미지 (필수)',
|
||||
2 => '본문 이미지 #1',
|
||||
3 => '본문 이미지 #2',
|
||||
4 => '본문 이미지 #3',
|
||||
5 => '본문 이미지 #4',
|
||||
6 => '본문 이미지 #5',
|
||||
),
|
||||
'file_texts' => array(
|
||||
1 => '목록 페이지의 카드형 뷰에 표시될 대표 이미지입니다.',
|
||||
2 => '본문 내용에 삽입될 이미지를 첨부하세요.',
|
||||
),
|
||||
),
|
||||
'view' => array(
|
||||
'core_type' => 'coverage', // 💡 [핵심] 'coverage' 타입의 뷰 코어를 사용
|
||||
'show_summary_in_view' => true, // 보기 화면에서 요약 내용을 다시 표시 (선택)
|
||||
),
|
||||
);
|
||||
|
||||
// $board['bo_upload_count'] = 6;
|
||||
$board['bo_use_dhtml_editor'] = 1;
|
||||
// interview 스킨 광고 영역 설정
|
||||
$interview_skin_config = [
|
||||
'left_ad' => false, // 좌측 광고 사용 안함
|
||||
'right_ad' => true, // 우측 광고 사용 안함
|
||||
];
|
||||
?>
|
||||
|
||||
@@ -0,0 +1,237 @@
|
||||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* interview :: style.css
|
||||
* 💡 [수정] 고유 ID 선택자를 #interview-board로 변경합니다.
|
||||
*/
|
||||
|
||||
/* ==========================================================================
|
||||
Board Common Styles
|
||||
========================================================================== */
|
||||
#interview-board .board-container,
|
||||
#interview-board .board-write-container,
|
||||
#interview-board .board-view-container {
|
||||
background-color: #fff;
|
||||
padding: 40px;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 6px 30px rgba(0, 0, 0, 0.08);
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* 이하 모든 #coverage-board 선택자를 #interview-board로 변경 */
|
||||
|
||||
#interview-board .board-header {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
gap: 20px;
|
||||
padding-bottom: 25px;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
#interview-board .board-total { font-size: 1.2rem; color: #555; font-weight: 500; text-align: left; }
|
||||
#interview-board .board-total .text-primary { color: #0056b3; font-weight: 700; }
|
||||
#interview-board .board-controls { display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap; }
|
||||
#interview-board .view-mode-switcher { display: flex; border: 1px solid #ddd; border-radius: 8px; overflow: hidden; }
|
||||
#interview-board .btn-view-mode { background: #fff; border: none; padding: 10px 15px; cursor: pointer; color: #888; font-size: 1.2rem; line-height: 1; transition: all 0.2s ease; }
|
||||
#interview-board .btn-view-mode.active { background: #0056b3; color: #fff; }
|
||||
#interview-board .btn-view-mode:hover:not(.active) { background: #f0f0f0; color: #333; }
|
||||
#interview-board .board-search { flex-grow: 1; }
|
||||
#interview-board .board-search .input-group { display: flex; align-items: center; width: 100%; max-width: 400px; margin-left: auto; }
|
||||
#interview-board .board-search select,
|
||||
#interview-board .board-search input[type="text"] { border: 1px solid #ddd; padding: 0 15px; height: 42px; font-size: 1rem; background: #fff; border-radius: 8px; transition: border-color 0.2s ease; }
|
||||
#interview-board .board-search select { border-radius: 8px 0 0 8px; border-right: none; }
|
||||
#interview-board .board-search input[type="text"]:focus { border-color: #0056b3; outline: none; box-shadow: 0 0 0 2px rgba(0, 86, 179, 0.2); }
|
||||
#interview-board .board-search .btn { border-radius: 0 8px 8px 0; height: 42px; padding: 0 20px; background: #0056b3; color: #fff; border: none; transition: background-color 0.2s ease; }
|
||||
#interview-board .board-search .btn:hover { background-color: #003d82; }
|
||||
|
||||
#interview-board .list-separator { text-align: center; padding: 40px 20px; margin: 40px 0; border-top: 1px solid #e0e0e0; border-bottom: 1px solid #e0e0e0; background-color: #f9f9f9; }
|
||||
#interview-board .list-separator p { font-size: 1.1rem; color: #666; font-weight: 500; }
|
||||
|
||||
/* 💡 [최종 수정] 뷰 전환이 올바르게 동작하도록 선택자를 .board-list-wrapper 로 수정합니다. */
|
||||
#interview-board .board-list-wrapper[data-view-mode="card"] .card-list-view { display: block; }
|
||||
#interview-board .board-list-wrapper[data-view-mode="list"] .list-view { display: block; }
|
||||
#interview-board .board-list-wrapper .card-list-view,
|
||||
#interview-board .board-list-wrapper .list-view { display: none; }
|
||||
|
||||
#interview-board .empty-list { padding: 100px 20px; text-align: center; color: #888; font-size: 1.6rem; font-weight: 600; }
|
||||
#interview-board .card-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 30px; }
|
||||
#interview-board .card-item { background: #fff; border-radius: 12px; overflow: hidden; box-shadow: 0 8px 25px rgba(0,0,0,0.08); transition: transform 0.3s ease, box-shadow 0.3s ease; border: none; }
|
||||
#interview-board .card-item:hover { transform: translateY(-7px); box-shadow: 0 12px 35px rgba(0,0,0,0.15); }
|
||||
#interview-board .card-link { display: block; text-decoration: none; color: inherit; }
|
||||
#interview-board .card-thumbnail { position: relative; width: 100%; padding-top: 70%; background-color: #f0f0f0; }
|
||||
#interview-board .card-thumbnail img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; }
|
||||
#interview-board .badge-pdf, #interview-board .badge-link, #interview-board .badge-featured { position: absolute; top: 15px; right: 15px; padding: 8px 15px; border-radius: 20px; font-size: 0.85rem; font-weight: 700; color: #fff; text-transform: uppercase; letter-spacing: 0.5px; }
|
||||
#interview-board .badge-pdf { background-color: #e74c3c; }
|
||||
#interview-board .badge-link { background-color: #3498db; }
|
||||
#interview-board .badge-featured { background-color: #9b59b6; }
|
||||
#interview-board .card-content { padding: 25px; }
|
||||
#interview-board .card-category { display: inline-block; font-size: 0.9rem; font-weight: 700; color: #0056b3; margin-bottom: 10px; }
|
||||
#interview-board .card-title { font-size: 1.5rem; font-weight: 800; margin: 0 0 15px 0; line-height: 1.4; min-height: 2.8em; color: #222; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
|
||||
#interview-board .card-summary { font-size: 1rem; color: #666; line-height: 1.7; height: 5.1em; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; }
|
||||
#interview-board .card-meta { margin-top: 20px; padding-top: 15px; border-top: 1px solid #f0f0f0; font-size: 0.9rem; color: #888; }
|
||||
#interview-board .card-item.is-featured { border: 2px solid #9b59b6; box-shadow: 0 8px 25px rgba(155, 89, 182, 0.2); }
|
||||
#interview-board .list-group { border-top: 2px solid #333; }
|
||||
#interview-board .list-group-header, #interview-board .list-group-item { display: flex; align-items: center; padding: 18px 10px; border-bottom: 1px solid #f0f0f0; }
|
||||
#interview-board .list-group-header { font-weight: 700; background-color: #f9f9f9; font-size: 1.05rem; }
|
||||
#interview-board .list-group-item:hover { background-color: #f5f5f5; }
|
||||
#interview-board .list-cell { padding: 0 10px; text-align: center; color: #555; }
|
||||
#interview-board .list-cell.num { flex: 0 0 80px; }
|
||||
#interview-board .list-cell.title { flex: 1; text-align: left; }
|
||||
#interview-board .list-cell.title a { color: #333; text-decoration: none; font-weight: 500; }
|
||||
#interview-board .list-group-item.is-featured { background-color: #fdf8ff; }
|
||||
#interview-board .badge-featured-list { color: #9b59b6; margin-right: 8px; }
|
||||
|
||||
#interview-board .view-header { padding-bottom: 20px; border-bottom: 1px solid #e0e0e0; margin-bottom: 30px; }
|
||||
#interview-board .view-header h1 { font-size: 2.5rem; font-weight: 800; margin-bottom: 15px; line-height: 1.3; }
|
||||
#interview-board .view-meta { display: flex; flex-wrap: wrap; gap: 10px 20px; color: #888; font-size: 0.95rem; }
|
||||
#interview-board .view-meta .meta-item i { margin-right: 5px; color: #aaa; }
|
||||
#interview-board .view-content { padding: 30px 0; }
|
||||
#interview-board .view-body-images { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 25px; margin-top: 40px; padding-top: 30px; border-top: 1px solid #eee; justify-items: center; }
|
||||
#interview-board .view-body-images .body-image-item { max-width: 100%; text-align: center; background-color: #fcfcfc; border-radius: 10px; overflow: hidden; box-shadow: 0 5px 20px rgba(0,0,0,0.08); transition: transform 0.2s ease; }
|
||||
#interview-board .view-body-images .body-image-item:hover { transform: translateY(-5px); }
|
||||
#interview-board .view-body-images .body-image-item img { max-width: 100%; height: auto; display: block; margin: 0 auto; object-fit: contain; border-bottom: 1px solid #eee; }
|
||||
#interview-board .view-body-images .body-image-item figcaption { padding: 15px; font-size: 0.9rem; color: #666; line-height: 1.5; }
|
||||
|
||||
/* ==========================================================================
|
||||
View Detail Content Styles (본문 스타일)
|
||||
========================================================================== */
|
||||
#interview-board .view-detail-content {
|
||||
margin-top: 40px;
|
||||
font-size: 1.1rem;
|
||||
line-height: 1.8; /* 전체적인 줄 높이 */
|
||||
color: #333;
|
||||
white-space: normal; /* 💡 [수정] 소스 코드 줄바꿈이 공백으로 표시되지 않도록 normal로 변경 */
|
||||
word-break: break-word;
|
||||
}
|
||||
#interview-board .view-detail-content * {
|
||||
max-width: 100%;
|
||||
word-break: break-word;
|
||||
/* 💡 [추가] 에디터가 삽입하는 인라인 스타일의 line-height를 재정의 */
|
||||
line-height: inherit !important;
|
||||
}
|
||||
#interview-board .view-detail-content p {
|
||||
margin-top: 0;
|
||||
margin-bottom: 16px; /* 💡 [수정] 문단 간격 (news4j와 유사하게) */
|
||||
line-height: 1.7; /* 💡 [수정] 문단 내 줄 높이 */
|
||||
}
|
||||
/* 💡 [추가] 빈 p 태그의 높이를 없애 불필요한 공백 제거 */
|
||||
#interview-board .view-detail-content p:empty {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
line-height: 0;
|
||||
height: 0;
|
||||
}
|
||||
#interview-board .view-detail-content p:empty::before {
|
||||
content: "";
|
||||
display: block;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
#interview-board .view-detail-content h1,
|
||||
#interview-board .view-detail-content h2,
|
||||
#interview-board .view-detail-content h3,
|
||||
#interview-board .view-detail-content h4,
|
||||
#interview-board .view-detail-content h5,
|
||||
#interview-board .view-detail-content h6 {
|
||||
margin-top: 30px; /* 💡 [수정] 제목 위 간격 */
|
||||
margin-bottom: 15px; /* 💡 [수정] 제목 아래 간격 */
|
||||
font-weight: 700;
|
||||
line-height: 1.4;
|
||||
color: #222;
|
||||
}
|
||||
#interview-board .view-detail-content h1 { font-size: 2.2rem; } /* 💡 [수정] news4j와 유사하게 조정 */
|
||||
#interview-board .view-detail-content h2 { font-size: 2rem; }
|
||||
#interview-board .view-detail-content h3 { font-size: 1.7rem; }
|
||||
#interview-board .view-detail-content h4 { font-size: 1.4rem; }
|
||||
|
||||
/* 💡 [추가] 블록 요소 바로 뒤에 오는 불필요한 br 태그 숨김 (에디터가 삽입하는 경우) */
|
||||
#interview-board .view-detail-content p + br,
|
||||
#interview-board .view-detail-content h1 + br,
|
||||
#interview-board .view-detail-content h2 + br,
|
||||
#interview-board .view-detail-content h3 + br,
|
||||
#interview-board .view-detail-content div + br {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#interview-board .view-detail-content ul, #interview-board .view-detail-content ol { margin-left: 20px; margin-bottom: 1.5em; }
|
||||
#interview-board .view-detail-content ul li { list-style: disc; margin-bottom: 0.5em; }
|
||||
#interview-board .view-detail-content ol li { list-style: decimal; margin-bottom: 0.5em; }
|
||||
#interview-board .view-detail-content blockquote { border-left: 4px solid #0056b3; padding: 10px 20px; margin: 1.5em 0; background-color: #f8f8f8; color: #555; font-style: italic; }
|
||||
|
||||
#interview-board .download-box { margin-top: 30px; padding-top: 30px; border-top: 1px solid #eee; }
|
||||
#interview-board .download-box h3 { font-size: 1.3rem; font-weight: 700; margin-bottom: 15px; color: #333; }
|
||||
#interview-board .download-list { list-style: none; padding: 0; margin: 0; border: 1px solid #e0e0e0; border-radius: 8px; overflow: hidden; }
|
||||
#interview-board .download-list li { border-bottom: 1px solid #e0e0e0; }
|
||||
#interview-board .download-list li:last-child { border-bottom: none; }
|
||||
#interview-board .download-list a { display: flex; align-items: center; padding: 15px 20px; text-decoration: none; color: #555; transition: background-color 0.2s ease; }
|
||||
#interview-board .download-list a:hover { background-color: #f9f9f9; }
|
||||
#interview-board .download-list .file-icon { font-size: 1.5rem; color: #888; margin-right: 15px; width: 25px; text-align: center; }
|
||||
#interview-board .download-list .fa-file-pdf-o { color: #e74c3c; }
|
||||
#interview-board .download-list .fa-file-image-o { color: #3498db; }
|
||||
#interview-board .download-list .fa-file-archive-o { color: #f39c12; }
|
||||
#interview-board .download-list .file-name { flex-grow: 1; font-weight: 500; }
|
||||
#interview-board .download-list .file-size { font-size: 0.9rem; color: #888; }
|
||||
#interview-board .view-footer { margin-top: 40px; padding-top: 30px; border-top: 1px solid #e0e0e0; display: flex; justify-content: space-between; align-items: center; }
|
||||
#interview-board .btn-group-left, #interview-board .btn-group-right { display: flex; gap: 10px; }
|
||||
|
||||
#interview-board .board-footer { margin-top: 40px; display: flex; justify-content: space-between; align-items: center; }
|
||||
#interview-board .pagination-wrapper, #interview-board .load-more-wrapper { flex-grow: 1; text-align: center; }
|
||||
#interview-board .board-footer .btn-group { display: flex; gap: 10px; margin-left: auto; }
|
||||
#interview-board .board-footer .btn, #interview-board .view-footer .btn { display: inline-flex; align-items: center; justify-content: center; text-decoration: none; border-radius: 8px; font-size: 1.1rem; text-align: center; font-weight: 700; transition: all 0.2s ease; border: none; }
|
||||
#interview-board .board-footer .btn:hover, #interview-board .view-footer .btn:hover { transform: translateY(-2px); box-shadow: 0 4px 10px rgba(0,0,0,0.1); }
|
||||
#interview-board .board-footer .btn-secondary, #interview-board .view-footer .btn-secondary { background-color: #6c757d; color: #fff; }
|
||||
#interview-board .board-footer .btn-primary, #interview-board .view-footer .btn-primary { background-color: #0056b3; color: #fff; }
|
||||
|
||||
#interview-board .write-form-group { margin-bottom: 25px; }
|
||||
#interview-board .form-divider { margin: 40px 0; border: 0; border-top: 1px solid #e0e0e0; }
|
||||
#interview-board .admin-options-group { background-color: #fcfcfc; padding: 25px; border-radius: 8px; margin-top: 30px; border: 1px solid #e0e0e0; }
|
||||
#interview-board .form-section-title { font-size: 1.3rem; font-weight: 700; margin: 0 0 20px 0; color: #333; }
|
||||
#interview-board .form-check-label { display: flex; align-items: center; gap: 10px; font-size: 1.1rem; cursor: pointer; }
|
||||
#interview-board .form-check-label input[type="checkbox"] { -webkit-appearance: checkbox; -moz-appearance: checkbox; appearance: checkbox; width: 18px; height: 18px; opacity: 1; position: static; }
|
||||
#interview-board .write-form-footer { margin-top: 40px; display: flex; justify-content: flex-end; gap: 10px; }
|
||||
#interview-board .write-form-footer .btn { text-decoration: none; border-radius: 8px; font-size: 1.1rem; font-weight: 700; border: none; transition: all 0.2s ease; }
|
||||
#interview-board .write-form-footer .btn:hover { transform: translateY(-2px); box-shadow: 0 4px 10px rgba(0,0,0,0.1); }
|
||||
#interview-board .write-form-footer .btn-secondary { background-color: #6c757d; color: #fff; }
|
||||
#interview-board .write-form-footer .btn-primary { background-color: #0056b3; color: #fff; }
|
||||
|
||||
#interview-board .three-column-layout { display: flex; gap: 30px; }
|
||||
#interview-board .layout-sidebar-left, #interview-board .layout-sidebar-right { flex: 0 0 240px; position: sticky; top: 100px; align-self: flex-start; }
|
||||
#interview-board .layout-main-content { flex: 1; min-width: 0; }
|
||||
/* PC 전용 - 모바일 반응형 제거 */
|
||||
/* PC 전용 - 모바일 반응형 제거 */
|
||||
.sub-page-container {
|
||||
padding-top: 0px; !important;
|
||||
padding-bottom: 0px; !important;
|
||||
/*background: #fff;*/
|
||||
/*min-height: 500px;*/
|
||||
}
|
||||
.layout-main-content {
|
||||
padding-top: 0px; !important;
|
||||
}
|
||||
|
||||
/* 💡 [추가] 관리자 옵션 체크박스 스타일 */
|
||||
#interview-board .admin-option-item {
|
||||
background: #f9f9f9;
|
||||
padding: 15px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 5px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
#interview-board .admin-option-checkbox {
|
||||
appearance: checkbox !important;
|
||||
-webkit-appearance: checkbox !important;
|
||||
width: 20px !important;
|
||||
height: 20px !important;
|
||||
cursor: pointer !important;
|
||||
opacity: 1 !important;
|
||||
visibility: visible !important;
|
||||
display: inline-block !important;
|
||||
position: static !important;
|
||||
margin-right: 10px !important;
|
||||
}
|
||||
#interview-board .admin-option-item .option-text {
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
font-size: 16px;
|
||||
}
|
||||
@@ -0,0 +1,192 @@
|
||||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* interview :: style.css
|
||||
* 💡 [수정] 고유 ID 선택자를 #interview-board로 변경합니다.
|
||||
*/
|
||||
|
||||
/* ==========================================================================
|
||||
Board Common Styles
|
||||
========================================================================== */
|
||||
#interview-board .board-container,
|
||||
#interview-board .board-write-container,
|
||||
#interview-board .board-view-container {
|
||||
background-color: #fff;
|
||||
padding: 40px;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 6px 30px rgba(0, 0, 0, 0.08);
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* 이하 모든 #coverage-board 선택자를 #interview-board로 변경 */
|
||||
|
||||
#interview-board .board-header {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
gap: 20px;
|
||||
padding-bottom: 25px;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
#interview-board .board-total { font-size: 1.2rem; color: #555; font-weight: 500; text-align: left; }
|
||||
#interview-board .board-total .text-primary { color: #0056b3; font-weight: 700; }
|
||||
#interview-board .board-controls { display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap; }
|
||||
#interview-board .view-mode-switcher { display: flex; border: 1px solid #ddd; border-radius: 8px; overflow: hidden; }
|
||||
#interview-board .btn-view-mode { background: #fff; border: none; padding: 10px 15px; cursor: pointer; color: #888; font-size: 1.2rem; line-height: 1; transition: all 0.2s ease; }
|
||||
#interview-board .btn-view-mode.active { background: #0056b3; color: #fff; }
|
||||
#interview-board .btn-view-mode:hover:not(.active) { background: #f0f0f0; color: #333; }
|
||||
#interview-board .board-search { flex-grow: 1; }
|
||||
#interview-board .board-search .input-group { display: flex; align-items: center; width: 100%; max-width: 400px; margin-left: auto; }
|
||||
#interview-board .board-search select,
|
||||
#interview-board .board-search input[type="text"] { border: 1px solid #ddd; padding: 0 15px; height: 42px; font-size: 1rem; background: #fff; border-radius: 8px; transition: border-color 0.2s ease; }
|
||||
#interview-board .board-search select { border-radius: 8px 0 0 8px; border-right: none; }
|
||||
#interview-board .board-search input[type="text"]:focus { border-color: #0056b3; outline: none; box-shadow: 0 0 0 2px rgba(0, 86, 179, 0.2); }
|
||||
#interview-board .board-search .btn { border-radius: 0 8px 8px 0; height: 42px; padding: 0 20px; background: #0056b3; color: #fff; border: none; transition: background-color 0.2s ease; }
|
||||
#interview-board .board-search .btn:hover { background-color: #003d82; }
|
||||
|
||||
#interview-board .list-separator { text-align: center; padding: 40px 20px; margin: 40px 0; border-top: 1px solid #e0e0e0; border-bottom: 1px solid #e0e0e0; background-color: #f9f9f9; }
|
||||
#interview-board .list-separator p { font-size: 1.1rem; color: #666; font-weight: 500; }
|
||||
|
||||
/* 💡 [최종 수정] 뷰 전환이 올바르게 동작하도록 선택자를 .board-list-wrapper 로 수정합니다. */
|
||||
#interview-board .board-list-wrapper[data-view-mode="card"] .card-list-view { display: block; }
|
||||
#interview-board .board-list-wrapper[data-view-mode="list"] .list-view { display: block; }
|
||||
#interview-board .board-list-wrapper .card-list-view,
|
||||
#interview-board .board-list-wrapper .list-view { display: none; }
|
||||
|
||||
#interview-board .empty-list { padding: 100px 20px; text-align: center; color: #888; font-size: 1.6rem; font-weight: 600; }
|
||||
#interview-board .card-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 30px; }
|
||||
#interview-board .card-item { background: #fff; border-radius: 12px; overflow: hidden; box-shadow: 0 8px 25px rgba(0,0,0,0.08); transition: transform 0.3s ease, box-shadow 0.3s ease; border: none; }
|
||||
#interview-board .card-item:hover { transform: translateY(-7px); box-shadow: 0 12px 35px rgba(0,0,0,0.15); }
|
||||
#interview-board .card-link { display: block; text-decoration: none; color: inherit; }
|
||||
#interview-board .card-thumbnail { position: relative; width: 100%; padding-top: 70%; background-color: #f0f0f0; }
|
||||
#interview-board .card-thumbnail img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; }
|
||||
#interview-board .badge-pdf, #interview-board .badge-link, #interview-board .badge-featured { position: absolute; top: 15px; right: 15px; padding: 8px 15px; border-radius: 20px; font-size: 0.85rem; font-weight: 700; color: #fff; text-transform: uppercase; letter-spacing: 0.5px; }
|
||||
#interview-board .badge-pdf { background-color: #e74c3c; }
|
||||
#interview-board .badge-link { background-color: #3498db; }
|
||||
#interview-board .badge-featured { background-color: #9b59b6; }
|
||||
#interview-board .card-content { padding: 25px; }
|
||||
#interview-board .card-category { display: inline-block; font-size: 0.9rem; font-weight: 700; color: #0056b3; margin-bottom: 10px; }
|
||||
#interview-board .card-title { font-size: 1.5rem; font-weight: 800; margin: 0 0 15px 0; line-height: 1.4; min-height: 2.8em; color: #222; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
|
||||
#interview-board .card-summary { font-size: 1rem; color: #666; line-height: 1.7; height: 5.1em; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; }
|
||||
#interview-board .card-meta { margin-top: 20px; padding-top: 15px; border-top: 1px solid #f0f0f0; font-size: 0.9rem; color: #888; }
|
||||
#interview-board .card-item.is-featured { border: 2px solid #9b59b6; box-shadow: 0 8px 25px rgba(155, 89, 182, 0.2); }
|
||||
#interview-board .list-group { border-top: 2px solid #333; }
|
||||
#interview-board .list-group-header, #interview-board .list-group-item { display: flex; align-items: center; padding: 18px 10px; border-bottom: 1px solid #f0f0f0; }
|
||||
#interview-board .list-group-header { font-weight: 700; background-color: #f9f9f9; font-size: 1.05rem; }
|
||||
#interview-board .list-group-item:hover { background-color: #f5f5f5; }
|
||||
#interview-board .list-cell { padding: 0 10px; text-align: center; color: #555; }
|
||||
#interview-board .list-cell.num { flex: 0 0 80px; }
|
||||
#interview-board .list-cell.title { flex: 1; text-align: left; }
|
||||
#interview-board .list-cell.title a { color: #333; text-decoration: none; font-weight: 500; }
|
||||
#interview-board .list-group-item.is-featured { background-color: #fdf8ff; }
|
||||
#interview-board .badge-featured-list { color: #9b59b6; margin-right: 8px; }
|
||||
|
||||
#interview-board .view-header { padding-bottom: 20px; border-bottom: 1px solid #e0e0e0; margin-bottom: 30px; }
|
||||
#interview-board .view-header h1 { font-size: 2.5rem; font-weight: 800; margin-bottom: 15px; line-height: 1.3; }
|
||||
#interview-board .view-meta { display: flex; flex-wrap: wrap; gap: 10px 20px; color: #888; font-size: 0.95rem; }
|
||||
#interview-board .view-meta .meta-item i { margin-right: 5px; color: #aaa; }
|
||||
#interview-board .view-content { padding: 30px 0; }
|
||||
#interview-board .view-body-images { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 25px; margin-top: 40px; padding-top: 30px; border-top: 1px solid #eee; justify-items: center; }
|
||||
#interview-board .view-body-images .body-image-item { max-width: 100%; text-align: center; background-color: #fcfcfc; border-radius: 10px; overflow: hidden; box-shadow: 0 5px 20px rgba(0,0,0,0.08); transition: transform 0.2s ease; }
|
||||
#interview-board .view-body-images .body-image-item:hover { transform: translateY(-5px); }
|
||||
#interview-board .view-body-images .body-image-item img { max-width: 100%; height: auto; display: block; margin: 0 auto; object-fit: contain; border-bottom: 1px solid #eee; }
|
||||
#interview-board .view-body-images .body-image-item figcaption { padding: 15px; font-size: 0.9rem; color: #666; line-height: 1.5; }
|
||||
#interview-board .view-detail-content { margin-top: 40px; font-size: 1.1rem; line-height: 1.8; color: #333; }
|
||||
#interview-board .view-detail-content p { margin-bottom: 1.5em; }
|
||||
#interview-board .view-detail-content h1, #interview-board .view-detail-content h2, #interview-board .view-detail-content h3, #interview-board .view-detail-content h4, #interview-board .view-detail-content h5, #interview-board .view-detail-content h6 { margin-top: 2em; margin-bottom: 0.8em; font-weight: 700; line-height: 1.3; color: #222; }
|
||||
#interview-board .view-detail-content h2 { font-size: 2rem; }
|
||||
#interview-board .view-detail-content h3 { font-size: 1.7rem; }
|
||||
#interview-board .view-detail-content h4 { font-size: 1.4rem; }
|
||||
#interview-board .view-detail-content ul, #interview-board .view-detail-content ol { margin-left: 20px; margin-bottom: 1.5em; }
|
||||
#interview-board .view-detail-content ul li { list-style: disc; margin-bottom: 0.5em; }
|
||||
#interview-board .view-detail-content ol li { list-style: decimal; margin-bottom: 0.5em; }
|
||||
#interview-board .view-detail-content blockquote { border-left: 4px solid #0056b3; padding: 10px 20px; margin: 1.5em 0; background-color: #f8f8f8; color: #555; font-style: italic; }
|
||||
#interview-board .download-box { margin-top: 30px; padding-top: 30px; border-top: 1px solid #eee; }
|
||||
#interview-board .download-box h3 { font-size: 1.3rem; font-weight: 700; margin-bottom: 15px; color: #333; }
|
||||
#interview-board .download-list { list-style: none; padding: 0; margin: 0; border: 1px solid #e0e0e0; border-radius: 8px; overflow: hidden; }
|
||||
#interview-board .download-list li { border-bottom: 1px solid #e0e0e0; }
|
||||
#interview-board .download-list li:last-child { border-bottom: none; }
|
||||
#interview-board .download-list a { display: flex; align-items: center; padding: 15px 20px; text-decoration: none; color: #555; transition: background-color 0.2s ease; }
|
||||
#interview-board .download-list a:hover { background-color: #f9f9f9; }
|
||||
#interview-board .download-list .file-icon { font-size: 1.5rem; color: #888; margin-right: 15px; width: 25px; text-align: center; }
|
||||
#interview-board .download-list .fa-file-pdf-o { color: #e74c3c; }
|
||||
#interview-board .download-list .fa-file-image-o { color: #3498db; }
|
||||
#interview-board .download-list .fa-file-archive-o { color: #f39c12; }
|
||||
#interview-board .download-list .file-name { flex-grow: 1; font-weight: 500; }
|
||||
#interview-board .download-list .file-size { font-size: 0.9rem; color: #888; }
|
||||
#interview-board .view-footer { margin-top: 40px; padding-top: 30px; border-top: 1px solid #e0e0e0; display: flex; justify-content: space-between; align-items: center; }
|
||||
#interview-board .btn-group-left, #interview-board .btn-group-right { display: flex; gap: 10px; }
|
||||
|
||||
#interview-board .board-footer { margin-top: 40px; display: flex; justify-content: space-between; align-items: center; }
|
||||
#interview-board .pagination-wrapper, #interview-board .load-more-wrapper { flex-grow: 1; text-align: center; }
|
||||
#interview-board .board-footer .btn-group { display: flex; gap: 10px; margin-left: auto; }
|
||||
#interview-board .board-footer .btn, #interview-board .view-footer .btn { display: inline-flex; align-items: center; justify-content: center; text-decoration: none; border-radius: 8px; font-size: 1.1rem; text-align: center; font-weight: 700; transition: all 0.2s ease; border: none; }
|
||||
#interview-board .board-footer .btn:hover, #interview-board .view-footer .btn:hover { transform: translateY(-2px); box-shadow: 0 4px 10px rgba(0,0,0,0.1); }
|
||||
#interview-board .board-footer .btn-secondary, #interview-board .view-footer .btn-secondary { background-color: #6c757d; color: #fff; }
|
||||
#interview-board .board-footer .btn-primary, #interview-board .view-footer .btn-primary { background-color: #0056b3; color: #fff; }
|
||||
|
||||
#interview-board .write-form-group { margin-bottom: 25px; }
|
||||
#interview-board .form-divider { margin: 40px 0; border: 0; border-top: 1px solid #e0e0e0; }
|
||||
#interview-board .admin-options-group { background-color: #fcfcfc; padding: 25px; border-radius: 8px; margin-top: 30px; border: 1px solid #e0e0e0; }
|
||||
#interview-board .form-section-title { font-size: 1.3rem; font-weight: 700; margin: 0 0 20px 0; color: #333; }
|
||||
#interview-board .form-check-label { display: flex; align-items: center; gap: 10px; font-size: 1.1rem; cursor: pointer; }
|
||||
#interview-board .form-check-label input[type="checkbox"] { -webkit-appearance: checkbox; -moz-appearance: checkbox; appearance: checkbox; width: 18px; height: 18px; opacity: 1; position: static; }
|
||||
#interview-board .write-form-footer { margin-top: 40px; display: flex; justify-content: flex-end; gap: 10px; }
|
||||
#interview-board .write-form-footer .btn { text-decoration: none; border-radius: 8px; font-size: 1.1rem; font-weight: 700; border: none; transition: all 0.2s ease; }
|
||||
#interview-board .write-form-footer .btn:hover { transform: translateY(-2px); box-shadow: 0 4px 10px rgba(0,0,0,0.1); }
|
||||
#interview-board .write-form-footer .btn-secondary { background-color: #6c757d; color: #fff; }
|
||||
#interview-board .write-form-footer .btn-primary { background-color: #0056b3; color: #fff; }
|
||||
|
||||
#interview-board .three-column-layout { display: flex; gap: 30px; }
|
||||
#interview-board .layout-sidebar-left, #interview-board .layout-sidebar-right { flex: 0 0 240px; position: sticky; top: 100px; }
|
||||
#interview-board .layout-main-content { flex: 1; min-width: 0; }
|
||||
@media (max-width: 1024px) {
|
||||
#interview-board .three-column-layout { flex-direction: column; }
|
||||
#interview-board .layout-sidebar-left, #interview-board .layout-sidebar-right { position: static; flex-basis: 100%; }
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
#interview-board .board-container, #interview-board .board-write-container, #interview-board .board-view-container { padding: 15px; }
|
||||
#interview-board .board-controls { flex-direction: column-reverse; align-items: stretch; gap: 15px; }
|
||||
#interview-board .card-list { grid-template-columns: 1fr; }
|
||||
#interview-board .list-cell.category, #interview-board .list-cell.name, #interview-board .list-cell.hit { display: none; }
|
||||
#interview-board .view-footer { flex-direction: column; gap: 15px; }
|
||||
#interview-board .btn-group-left, #interview-board .btn-group-right { justify-content: center; width: 100%; }
|
||||
#interview-board .view-header h1 { font-size: 1.8rem; }
|
||||
#interview-board .view-meta { flex-direction: column; gap: 5px; }
|
||||
}
|
||||
.sub-page-container {
|
||||
padding-top: 0px; !important;
|
||||
padding-bottom: 0px; !important;
|
||||
/*background: #fff;*/
|
||||
/*min-height: 500px;*/
|
||||
}
|
||||
.layout-main-content {
|
||||
padding-top: 0px; !important;
|
||||
}
|
||||
|
||||
/* 💡 [추가] 관리자 옵션 체크박스 스타일 */
|
||||
#interview-board .admin-option-item {
|
||||
background: #f9f9f9;
|
||||
padding: 15px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 5px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
#interview-board .admin-option-checkbox {
|
||||
appearance: checkbox !important;
|
||||
-webkit-appearance: checkbox !important;
|
||||
width: 20px !important;
|
||||
height: 20px !important;
|
||||
cursor: pointer !important;
|
||||
opacity: 1 !important;
|
||||
visibility: visible !important;
|
||||
display: inline-block !important;
|
||||
position: static !important;
|
||||
margin-right: 10px !important;
|
||||
}
|
||||
#interview-board .admin-option-item .option-text {
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
font-size: 16px;
|
||||
}
|
||||
@@ -0,0 +1,81 @@
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const boardWrapper = document.getElementById('interview-board');
|
||||
if (!boardWrapper) return;
|
||||
|
||||
const boardListWrapper = boardWrapper.querySelector('.board-list-wrapper');
|
||||
if (!boardListWrapper) return;
|
||||
|
||||
const viewModeButtons = document.querySelectorAll('.btn-view-mode');
|
||||
const paginationWrapper = document.querySelector('.pagination-wrapper');
|
||||
const loadMoreWrapper = document.querySelector('.load-more-wrapper');
|
||||
|
||||
viewModeButtons.forEach(button => {
|
||||
button.addEventListener('click', function() {
|
||||
const mode = this.dataset.mode;
|
||||
viewModeButtons.forEach(btn => btn.classList.remove('active'));
|
||||
this.classList.add('active');
|
||||
|
||||
boardListWrapper.dataset.viewMode = mode;
|
||||
|
||||
set_cookie('board_interview_view_mode', mode, 365, '/', '');
|
||||
|
||||
if (paginationWrapper) paginationWrapper.style.display = (mode === 'list') ? 'block' : 'none';
|
||||
if (loadMoreWrapper) loadMoreWrapper.style.display = (mode === 'card') ? 'block' : 'none';
|
||||
});
|
||||
});
|
||||
|
||||
const loadMoreButton = document.getElementById('btn-load-more');
|
||||
if (loadMoreButton) {
|
||||
loadMoreButton.addEventListener('click', function() {
|
||||
let currentPage = parseInt(this.dataset.page, 10);
|
||||
this.textContent = '로딩 중...';
|
||||
this.disabled = true;
|
||||
|
||||
const url = new URL(window.location.href);
|
||||
url.searchParams.set('page', currentPage);
|
||||
|
||||
fetch(url)
|
||||
.then(response => response.text())
|
||||
.then(html => {
|
||||
const parser = new DOMParser();
|
||||
const doc = parser.parseFromString(html, 'text/html');
|
||||
|
||||
const newItems = doc.querySelectorAll('.board-list-wrapper .card-item');
|
||||
const cardList = boardListWrapper.querySelector('.card-list');
|
||||
|
||||
if (newItems.length > 0 && cardList) {
|
||||
newItems.forEach(item => {
|
||||
cardList.appendChild(item);
|
||||
});
|
||||
|
||||
currentPage++;
|
||||
this.dataset.page = currentPage;
|
||||
this.textContent = '더보기';
|
||||
this.disabled = false;
|
||||
|
||||
const nextLoadMoreButton = doc.getElementById('btn-load-more');
|
||||
if (!nextLoadMoreButton) {
|
||||
this.style.display = 'none';
|
||||
}
|
||||
} else {
|
||||
this.textContent = '마지막 페이지입니다.';
|
||||
this.disabled = true;
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error loading more items:', error);
|
||||
this.textContent = '오류 발생';
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function set_cookie(name, value, time, domain, path) {
|
||||
let expires = "";
|
||||
if (time) {
|
||||
const date = new Date();
|
||||
date.setTime(date.getTime() + (time * 24 * 60 * 60 * 1000));
|
||||
expires = "; expires=" + date.toUTCString();
|
||||
}
|
||||
document.cookie = name + "=" + (value || "") + expires + "; path=" + path + "; domain=" + domain;
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,69 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
/**
|
||||
* interview :: list.skin.php
|
||||
*/
|
||||
|
||||
// 0. 중앙 광고 설정 파일을 로드합니다.
|
||||
include_once(G5_THEME_PATH . '/skin/board/board_ad_config.php');
|
||||
|
||||
// 1. 자식 스킨의 설정 파일을 로드합니다.
|
||||
$config_path = __DIR__ . '/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
}
|
||||
|
||||
// 2. 자식 스킨이 자신의 CSS와 JS를 직접 로드합니다.
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/css/style.css?ver='.G5_SERVER_TIME.'">', 0);
|
||||
add_javascript('<script src="'.$board_skin_url.'/js/script.js?ver='.G5_SERVER_TIME.'"></script>', 0);
|
||||
|
||||
// 3. 뷰 모드를 미리 결정합니다.
|
||||
$default_view_mode = isset($board_config['list']['default_view_mode']) ? $board_config['list']['default_view_mode'] : 'card';
|
||||
$view_mode = get_cookie('board_' . $bo_table . '_view_mode') ?: $default_view_mode;
|
||||
?>
|
||||
|
||||
<div id="interview-board">
|
||||
<div class="three-column-layout container">
|
||||
<?php if (isset($board_ad_config['list_ad']['left']) && $board_ad_config['list_ad']['left'] === true): ?>
|
||||
<aside class="layout-sidebar-left">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">좌측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_l" data-layout="interview-list-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
<main class="layout-main-content1">
|
||||
<?php
|
||||
$core_skin_path = G5_THEME_PATH . '/skin/board/rb.board.core.coverage/list.skin.php';
|
||||
if (file_exists($core_skin_path)) {
|
||||
include($core_skin_path);
|
||||
} else {
|
||||
echo '<div class="empty-list">코어 게시판 스킨 파일을 찾을 수 없습니다.</div>';
|
||||
}
|
||||
?>
|
||||
<div class="board-footer">
|
||||
<div class="pagination-wrapper" style="display: <?php echo ($view_mode === 'list') ? 'block' : 'none'; ?>;">
|
||||
<?php echo $write_pages; ?>
|
||||
</div>
|
||||
<?php if ($page < $total_page): ?>
|
||||
<div class="load-more-wrapper" style="display: <?php echo ($view_mode === 'card') ? 'block' : 'none'; ?>;">
|
||||
<button type="button" id="btn-load-more" class="btn btn-primary" data-page="<?php echo $page + 1; ?>">더보기</button>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<div class="btn-group">
|
||||
<?php if ($list_href) { ?><a href="<?php echo $list_href ?>" class="btn btn-secondary">목록</a><?php } ?>
|
||||
<?php if ($write_href) { ?><a href="<?php echo $write_href ?>" class="btn btn-primary">글쓰기</a><?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<?php if (isset($board_ad_config['list_ad']['right']) && $board_ad_config['list_ad']['right'] === true): ?>
|
||||
<aside class="layout-sidebar-right">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">우측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_r" data-layout="interview-list-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
/**
|
||||
* interview :: view.skin.php
|
||||
*/
|
||||
|
||||
// 0. 중앙 광고 설정 파일을 로드합니다.
|
||||
include_once(G5_THEME_PATH . '/skin/board/board_ad_config.php');
|
||||
|
||||
$config_path = __DIR__ . '/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
}
|
||||
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/css/style.css?ver='.G5_SERVER_TIME.'">', 0);
|
||||
add_javascript('<script src="'.$board_skin_url.'/js/script.js?ver='.G5_SERVER_TIME.'"></script>', 0);
|
||||
?>
|
||||
|
||||
<div id="interview-board">
|
||||
<div class="three-column-layout container">
|
||||
<?php if ((isset($board_ad_config['view_ad']['left']) && $board_ad_config['view_ad']['left'] === true) || (isset($interview_skin_config['left_ad']) && $interview_skin_config['left_ad'] === true)): ?>
|
||||
<aside class="layout-sidebar-left">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">좌측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_l" data-layout="interview-view-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
<main class="layout-main-content">
|
||||
<?php
|
||||
$core_skin_path = G5_THEME_PATH . '/skin/board/rb.board.core.coverage/view.skin.php';
|
||||
if (file_exists($core_skin_path)) {
|
||||
include($core_skin_path);
|
||||
} else {
|
||||
echo '<div class="empty-list">코어 게시판 스킨 파일을 찾을 수 없습니다.</div>';
|
||||
}
|
||||
?>
|
||||
</main>
|
||||
<?php if ((isset($board_ad_config['view_ad']['right']) && $board_ad_config['view_ad']['right'] === true) || (isset($interview_skin_config['right_ad']) && $interview_skin_config['right_ad'] === true)): ?>
|
||||
<aside class="layout-sidebar-right">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">우측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_r" data-layout="interview-view-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,49 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
/**
|
||||
* interview :: write.skin.php
|
||||
*/
|
||||
|
||||
// 0. 중앙 광고 설정 파일을 로드합니다.
|
||||
include_once(G5_THEME_PATH . '/skin/board/board_ad_config.php');
|
||||
|
||||
$config_path = __DIR__ . '/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
}
|
||||
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/css/style.css?ver='.G5_SERVER_TIME.'">', 0);
|
||||
add_javascript('<script src="'.$board_skin_url.'/js/script.js?ver='.G5_SERVER_TIME.'"></script>', 0);
|
||||
?>
|
||||
|
||||
<div id="interview-board">
|
||||
<div class="three-column-layout container">
|
||||
<?php if (isset($board_ad_config['write_ad']['left']) && $board_ad_config['write_ad']['left'] === true): ?>
|
||||
<aside class="layout-sidebar-left">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">좌측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_l" data-layout="interview-write-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
<main class="layout-main-content">
|
||||
<?php
|
||||
$core_skin_path = G5_THEME_PATH . '/skin/board/rb.board.core.coverage/write.skin.php';
|
||||
if (file_exists($core_skin_path)) {
|
||||
include($core_skin_path);
|
||||
} else {
|
||||
echo '<div class="empty-list">코어 게시판 스킨 파일을 찾을 수 없습니다.</div>';
|
||||
}
|
||||
?>
|
||||
</main>
|
||||
<?php if (isset($board_ad_config['write_ad']['right']) && $board_ad_config['write_ad']['right'] === true): ?>
|
||||
<aside class="layout-sidebar-right">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">우측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_r" data-layout="interview-write-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,87 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
/**
|
||||
* journal :: config.php
|
||||
*
|
||||
* '저널' 게시판의 특징과 동작을 정의하는 설정 파일입니다.
|
||||
* 코어 스킨(rb.board.core)은 이 설정을 읽어 그에 맞게 동작합니다.
|
||||
*/
|
||||
|
||||
$board_config = array(
|
||||
// =================================================================================
|
||||
// 1. 글쓰기(write) 페이지 설정
|
||||
// =================================================================================
|
||||
'write' => array(
|
||||
// '요약' 필드 사용 여부 (목록 페이지에 노출될 짧은 내용)
|
||||
'use_summary' => true,
|
||||
'summary_label' => '요약 내용',
|
||||
'summary_placeholder' => '목록에 표시될 간단한 요약 내용을 입력하세요.',
|
||||
|
||||
// '외부 링크' 필드 사용 여부
|
||||
'use_external_link' => true,
|
||||
'external_link_label' => '외부 링크 (URL)',
|
||||
'external_link_placeholder' => 'https://example.com',
|
||||
|
||||
// '시작일', '종료일' 필드 사용 여부 (이벤트/일정 게시판용)
|
||||
'use_dates' => false,
|
||||
|
||||
// 파일 필드별 라벨 및 설명
|
||||
'file_labels' => array(
|
||||
1 => '썸네일 이미지 (필수)',
|
||||
2 => 'PDF 파일 (필수)',
|
||||
),
|
||||
'file_texts' => array(
|
||||
1 => '목록 페이지의 카드형 뷰에 표시될 대표 이미지입니다.',
|
||||
2 => '뷰어에 표시될 PDF 파일을 첨부하세요.',
|
||||
),
|
||||
),
|
||||
|
||||
// =================================================================================
|
||||
// 2. 목록(list) 페이지 설정
|
||||
// =================================================================================
|
||||
'list' => array(
|
||||
// 기본 뷰 모드 ('card' 또는 'list')
|
||||
'default_view_mode' => 'card',
|
||||
|
||||
// 카드형 뷰에서 표시할 정보
|
||||
'card_view' => array(
|
||||
'show_category' => true, // 카테고리
|
||||
'show_thumbnail' => true, // 썸네일
|
||||
'show_summary' => true, // 요약 내용
|
||||
'summary_length' => 120, // 요약 내용 글자 수 제한
|
||||
'show_date' => true, // 날짜
|
||||
'show_hit' => false, // 조회수
|
||||
),
|
||||
|
||||
// 리스트형 뷰에서 표시할 정보
|
||||
'list_view' => array(
|
||||
'show_category' => true, // 카테고리
|
||||
'show_icon_file' => true, // 파일 아이콘 (PDF, ZIP 등)
|
||||
'show_icon_new' => true, // 새 글 아이콘
|
||||
'show_icon_hot' => true, // 인기 글 아이콘
|
||||
'show_date' => true, // 날짜
|
||||
'show_hit' => true, // 조회수
|
||||
),
|
||||
),
|
||||
|
||||
// =================================================================================
|
||||
// 3. 내용(view) 페이지 설정
|
||||
// =================================================================================
|
||||
'view' => array(
|
||||
// 💡 [핵심 추가] 어떤 전문 코어 뷰 파일을 사용할지 정의합니다.
|
||||
'core_type' => 'journal', // 'journal' 타입의 뷰 코어를 사용
|
||||
'use_pdf_viewer' => true, // PDF 뷰어 사용 여부 (전문 코어 내부에서 사용)
|
||||
),
|
||||
);
|
||||
|
||||
// 게시판 설정값을 재정의합니다.
|
||||
$board['bo_upload_count'] = 2; // 썸네일 1 + PDF 1
|
||||
$board['bo_use_dhtml_editor'] = 1; // HTML 에디터 사용
|
||||
|
||||
// 저널 스킨 광고 영역 설정
|
||||
$journal_skin_config = [
|
||||
'left_ad' => false, // 좌측 광고 사용 안함
|
||||
'right_ad' => false, // 우측 광고 사용 안함
|
||||
];
|
||||
?>
|
||||
@@ -0,0 +1,239 @@
|
||||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* journal :: style.css
|
||||
* 💡 [최종 수정] 뷰 전환 오류를 해결하기 위해 CSS 선택자를 원래대로 복원하고, 하이브리드 레이아웃을 올바르게 지원합니다.
|
||||
*/
|
||||
|
||||
/* ==========================================================================
|
||||
Board Common Styles
|
||||
========================================================================== */
|
||||
#journal-board .board-container,
|
||||
#journal-board .board-write-container,
|
||||
#journal-board .board-view-container {
|
||||
background-color: #fff;
|
||||
padding: 40px;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 6px 30px rgba(0, 0, 0, 0.08);
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
List View: Header
|
||||
========================================================================== */
|
||||
#journal-board .board-header {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
gap: 20px;
|
||||
padding-bottom: 25px;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
#journal-board .board-total { font-size: 1.2rem; color: #555; font-weight: 500; text-align: left; }
|
||||
#journal-board .board-total .text-primary { color: #0056b3; font-weight: 700; }
|
||||
#journal-board .board-controls { display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap; }
|
||||
#journal-board .view-mode-switcher { display: flex; border: 1px solid #ddd; border-radius: 8px; overflow: hidden; }
|
||||
#journal-board .btn-view-mode { background: #fff; border: none; padding: 10px 15px; cursor: pointer; color: #888; font-size: 1.2rem; line-height: 1; transition: all 0.2s ease; }
|
||||
#journal-board .btn-view-mode.active { background: #0056b3; color: #fff; }
|
||||
#journal-board .btn-view-mode:hover:not(.active) { background: #f0f0f0; color: #333; }
|
||||
#journal-board .board-search { flex-grow: 1; }
|
||||
#journal-board .board-search .input-group { display: flex; align-items: center; width: 100%; max-width: 400px; margin-left: auto; }
|
||||
#journal-board .board-search select,
|
||||
#journal-board .board-search input[type="text"] { border: 1px solid #ddd; padding: 0 15px; height: 42px; font-size: 1rem; background: #fff; border-radius: 8px; transition: border-color 0.2s ease; }
|
||||
#journal-board .board-search select { border-radius: 8px 0 0 8px; border-right: none; }
|
||||
#journal-board .board-search input[type="text"]:focus { border-color: #0056b3; outline: none; box-shadow: 0 0 0 2px rgba(0, 86, 179, 0.2); }
|
||||
#journal-board .board-search .btn { border-radius: 0 8px 8px 0; height: 42px; padding: 0 20px; background: #0056b3; color: #fff; border: none; transition: background-color 0.2s ease; }
|
||||
#journal-board .board-search .btn:hover { background-color: #003d82; }
|
||||
|
||||
/* ==========================================================================
|
||||
List View: Hybrid Layout & View Switching
|
||||
========================================================================== */
|
||||
#journal-board .list-separator {
|
||||
text-align: center;
|
||||
padding: 40px 20px;
|
||||
margin: 40px 0;
|
||||
border-top: 1px solid #e0e0e0;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
#journal-board .list-separator p {
|
||||
font-size: 1.1rem;
|
||||
color: #666;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
/* 💡 [최종 수정] 뷰 전환이 올바르게 동작하도록 선택자를 수정합니다. */
|
||||
#journal-board .board-list-wrapper[data-view-mode="card"] .card-list-view { display: block; }
|
||||
#journal-board .board-list-wrapper[data-view-mode="list"] .list-view { display: block; }
|
||||
#journal-board .board-list-wrapper .card-list-view,
|
||||
#journal-board .board-list-wrapper .list-view { display: none; }
|
||||
|
||||
/* ==========================================================================
|
||||
List View: Card & List
|
||||
========================================================================== */
|
||||
#journal-board .empty-list { padding: 100px 20px; text-align: center; color: #888; font-size: 1.6rem; font-weight: 600; }
|
||||
#journal-board .card-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 30px; }
|
||||
#journal-board .card-item { position: relative; background: #fff; border-radius: 12px; overflow: hidden; box-shadow: 0 8px 25px rgba(0,0,0,0.08); transition: transform 0.3s ease, box-shadow 0.3s ease; border: none; }
|
||||
#journal-board .card-item:hover { transform: translateY(-7px); box-shadow: 0 12px 35px rgba(0,0,0,0.15); }
|
||||
#journal-board .card-link { display: block; text-decoration: none; color: inherit; }
|
||||
#journal-board .card-thumbnail { position: relative; width: 100%; padding-top: 70%; background-color: #f0f0f0; }
|
||||
#journal-board .card-thumbnail img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; }
|
||||
#journal-board .badge-pdf, #journal-board .badge-link, #journal-board .badge-featured { position: absolute; top: 15px; right: 15px; padding: 8px 15px; border-radius: 20px; font-size: 0.85rem; font-weight: 700; color: #fff; text-transform: uppercase; letter-spacing: 0.5px; }
|
||||
#journal-board .badge-pdf { background-color: #e74c3c; }
|
||||
#journal-board .badge-link { background-color: #3498db; }
|
||||
#journal-board .badge-featured { background-color: #9b59b6; }
|
||||
#journal-board .card-content { padding: 25px; }
|
||||
#journal-board .card-category { display: inline-block; font-size: 0.9rem; font-weight: 700; color: #0056b3; margin-bottom: 10px; }
|
||||
#journal-board .card-title { font-size: 1.5rem; font-weight: 800; margin: 0 0 15px 0; line-height: 1.4; min-height: 2.8em; color: #222; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
|
||||
#journal-board .card-summary { font-size: 1rem; color: #666; line-height: 1.7; height: 5.1em; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; }
|
||||
#journal-board .card-meta { margin-top: 20px; padding-top: 15px; border-top: 1px solid #f0f0f0; font-size: 0.9rem; color: #888; }
|
||||
#journal-board .card-item.is-featured { border: 2px solid #9b59b6; box-shadow: 0 8px 25px rgba(155, 89, 182, 0.2); }
|
||||
#journal-board .list-group { border-top: 2px solid #333; }
|
||||
#journal-board .list-group-header, #journal-board .list-group-item { display: flex; align-items: center; padding: 18px 10px; border-bottom: 1px solid #f0f0f0; }
|
||||
#journal-board .list-group-header { font-weight: 700; background-color: #f9f9f9; font-size: 1.05rem; }
|
||||
#journal-board .list-group-item:hover { background-color: #f5f5f5; }
|
||||
#journal-board .list-cell { padding: 0 10px; text-align: center; color: #555; }
|
||||
#journal-board .list-cell.num { flex: 0 0 80px; }
|
||||
#journal-board .list-cell.title { flex: 1; text-align: left; }
|
||||
#journal-board .list-cell.title a { color: #333; text-decoration: none; font-weight: 500; }
|
||||
#journal-board .list-group-item.is-featured { background-color: #fdf8ff; }
|
||||
#journal-board .badge-featured-list { color: #9b59b6; margin-right: 8px; }
|
||||
|
||||
/* ==========================================================================
|
||||
Admin Checkbox Styles
|
||||
========================================================================== */
|
||||
#journal-board .chk-box input[type="checkbox"] {
|
||||
-webkit-appearance: checkbox !important;
|
||||
-moz-appearance: checkbox !important;
|
||||
appearance: checkbox !important;
|
||||
opacity: 1 !important;
|
||||
visibility: visible !important;
|
||||
display: inline-block !important;
|
||||
position: static !important;
|
||||
width: 20px !important;
|
||||
height: 20px !important;
|
||||
cursor: pointer !important;
|
||||
}
|
||||
|
||||
#journal-board .list-cell.chk input[type="checkbox"] {
|
||||
-webkit-appearance: checkbox !important;
|
||||
-moz-appearance: checkbox !important;
|
||||
appearance: checkbox !important;
|
||||
opacity: 1 !important;
|
||||
visibility: visible !important;
|
||||
display: inline-block !important;
|
||||
width: 20px !important;
|
||||
height: 20px !important;
|
||||
cursor: pointer !important;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
View Page Styles
|
||||
========================================================================== */
|
||||
#journal-board .view-header { padding-bottom: 20px; border-bottom: 1px solid #e0e0e0; margin-bottom: 30px; }
|
||||
#journal-board .view-header h1 { font-size: 2.5rem; font-weight: 800; margin-bottom: 15px; line-height: 1.3; }
|
||||
#journal-board .view-meta { display: flex; flex-wrap: wrap; gap: 10px 20px; color: #888; font-size: 0.95rem; }
|
||||
#journal-board .view-meta .meta-item i { margin-right: 5px; color: #aaa; }
|
||||
#journal-board .view-content { padding: 30px 0; }
|
||||
|
||||
#journal-board #pdf-viewer-container { display: block; margin-bottom: 40px; border: 1px solid #e0e0e0; border-radius: 8px; }
|
||||
#journal-board #pdf-viewer-header {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 10;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 12px 20px;
|
||||
background: rgba(248, 248, 248, 0.95);
|
||||
backdrop-filter: blur(5px);
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
}
|
||||
#journal-board #pdf-viewer-header .page-indicator { font-size: 1rem; color: #333; font-weight: 500; }
|
||||
#journal-board #pdf-viewer-header #page-num-input { width: 60px; text-align: center; border: 1px solid #ddd; border-radius: 5px; padding: 5px; font-size: 1rem; }
|
||||
#journal-board #canvas-wrapper { overflow: auto; background: #f9f9f9; cursor: pointer; }
|
||||
#journal-board #pdf-canvas { display: block; margin: 0 auto; }
|
||||
#journal-board #pdf-loading { padding: 100px 20px; display: flex; flex-direction: column; justify-content: center; align-items: center; gap: 20px; font-size: 1.3rem; color: #666; font-weight: 500; }
|
||||
#journal-board .spinner { width: 40px; height: 40px; border: 4px solid #e0e0e0; border-top: 4px solid #0056b3; border-radius: 50%; animation: spin 1s linear infinite; }
|
||||
@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
|
||||
|
||||
#journal-board .download-box { margin-top: 30px; padding-top: 30px; border-top: 1px solid #eee; }
|
||||
#journal-board .download-box h3 { font-size: 1.3rem; font-weight: 700; margin-bottom: 15px; color: #333; }
|
||||
#journal-board .download-list { list-style: none; padding: 0; margin: 0; border: 1px solid #e0e0e0; border-radius: 8px; overflow: hidden; }
|
||||
#journal-board .download-list li { border-bottom: 1px solid #e0e0e0; }
|
||||
#journal-board .download-list li:last-child { border-bottom: none; }
|
||||
#journal-board .download-list a { display: flex; align-items: center; padding: 15px 20px; text-decoration: none; color: #555; transition: background-color 0.2s ease; }
|
||||
#journal-board .download-list a:hover { background-color: #f9f9f9; }
|
||||
#journal-board .download-list .file-icon { font-size: 1.5rem; color: #888; margin-right: 15px; width: 25px; text-align: center; }
|
||||
#journal-board .download-list .fa-file-pdf-o { color: #e74c3c; }
|
||||
#journal-board .download-list .fa-file-image-o { color: #3498db; }
|
||||
#journal-board .download-list .fa-file-archive-o { color: #f39c12; }
|
||||
#journal-board .download-list .file-name { flex-grow: 1; font-weight: 500; }
|
||||
#journal-board .download-list .file-size { font-size: 0.9rem; color: #888; }
|
||||
#journal-board .view-summary { font-size: 1.1rem; line-height: 1.7; color: #555; padding: 25px; background: #f8f8f8; border-radius: 8px; margin-top: 40px; }
|
||||
#journal-board .view-detail-content { margin-top: 40px; }
|
||||
#journal-board .view-footer { margin-top: 40px; padding-top: 30px; border-top: 1px solid #e0e0e0; display: flex; justify-content: space-between; align-items: center; }
|
||||
#journal-board .btn-group-left, #journal-board .btn-group-right { display: flex; gap: 10px; }
|
||||
|
||||
/* ==========================================================================
|
||||
Common Footer & Write Form
|
||||
========================================================================== */
|
||||
#journal-board .board-footer { margin-top: 40px; display: flex; justify-content: space-between; align-items: center; }
|
||||
#journal-board .pagination-wrapper, #journal-board .load-more-wrapper { flex-grow: 1; text-align: center; }
|
||||
#journal-board .board-footer .btn-group { display: flex; gap: 10px; margin-left: auto; }
|
||||
#journal-board .board-footer .btn, #journal-board .view-footer .btn { display: inline-flex; align-items: center; justify-content: center; text-decoration: none; border-radius: 8px; font-size: 1.1rem; text-align: center; font-weight: 700; transition: all 0.2s ease; border: none; }
|
||||
#journal-board .board-footer .btn:hover, #journal-board .view-footer .btn:hover { transform: translateY(-2px); box-shadow: 0 4px 10px rgba(0,0,0,0.1); }
|
||||
#journal-board .board-footer .btn-secondary, #journal-board .view-footer .btn-secondary { background-color: #6c757d; color: #fff; }
|
||||
#journal-board .board-footer .btn-primary, #journal-board .view-footer .btn-primary { background-color: #0056b3; color: #fff; }
|
||||
|
||||
#journal-board .write-form-group { margin-bottom: 25px; }
|
||||
#journal-board .form-divider { margin: 40px 0; border: 0; border-top: 1px solid #e0e0e0; }
|
||||
#journal-board .admin-options-group { background-color: #fcfcfc; padding: 25px; border-radius: 8px; margin-top: 30px; border: 1px solid #e0e0e0; }
|
||||
#journal-board .form-section-title { font-size: 1.3rem; font-weight: 700; margin: 0 0 20px 0; color: #333; }
|
||||
#journal-board .form-check-label { display: flex; align-items: center; gap: 10px; font-size: 1.1rem; cursor: pointer; }
|
||||
#journal-board .form-check-label input[type="checkbox"] { -webkit-appearance: checkbox; -moz-appearance: checkbox; appearance: checkbox; width: 18px; height: 18px; opacity: 1; position: static; }
|
||||
#journal-board .write-form-footer { margin-top: 40px; display: flex; justify-content: flex-end; gap: 10px; }
|
||||
#journal-board .write-form-footer .btn { text-decoration: none; border-radius: 8px; font-size: 1.1rem; font-weight: 700; border: none; transition: all 0.2s ease; }
|
||||
#journal-board .write-form-footer .btn:hover { transform: translateY(-2px); box-shadow: 0 4px 10px rgba(0,0,0,0.1); }
|
||||
#journal-board .write-form-footer .btn-secondary { background-color: #6c757d; color: #fff; }
|
||||
#journal-board .write-form-footer .btn-primary { background-color: #0056b3; color: #fff; }
|
||||
|
||||
/* 3-Column Layout - PC 전용 */
|
||||
#journal-board .three-column-layout { display: flex; gap: 30px; }
|
||||
#journal-board .layout-sidebar-left, #journal-board .layout-sidebar-right { flex: 0 0 240px; position: sticky; top: 100px; align-self: flex-start; }
|
||||
#journal-board .layout-main-content { flex: 1; min-width: 0; }
|
||||
|
||||
.sub-page-container {
|
||||
padding-top: 0px;
|
||||
padding-bottom: 0px;
|
||||
}
|
||||
.layout-main-content {
|
||||
padding-top: 0px;
|
||||
}
|
||||
|
||||
/* 💡 [추가] 관리자 옵션 체크박스 스타일 */
|
||||
#journal-board .admin-option-item {
|
||||
background: #f9f9f9;
|
||||
padding: 15px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 5px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
#journal-board .admin-option-checkbox {
|
||||
appearance: checkbox !important;
|
||||
-webkit-appearance: checkbox !important;
|
||||
width: 20px !important;
|
||||
height: 20px !important;
|
||||
cursor: pointer !important;
|
||||
opacity: 1 !important;
|
||||
visibility: visible !important;
|
||||
display: inline-block !important;
|
||||
position: static !important;
|
||||
margin-right: 10px !important;
|
||||
}
|
||||
#journal-board .admin-option-item .option-text {
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
font-size: 16px;
|
||||
}
|
||||
@@ -0,0 +1,295 @@
|
||||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* journal :: style.css
|
||||
* 💡 [최종 수정] 뷰 전환 오류를 해결하기 위해 CSS 선택자를 원래대로 복원하고, 하이브리드 레이아웃을 올바르게 지원합니다.
|
||||
*/
|
||||
|
||||
/* ==========================================================================
|
||||
Board Common Styles
|
||||
========================================================================== */
|
||||
#journal-board .board-container,
|
||||
#journal-board .board-write-container,
|
||||
#journal-board .board-view-container {
|
||||
background-color: #fff;
|
||||
padding: 40px;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 6px 30px rgba(0, 0, 0, 0.08);
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
List View: Header
|
||||
========================================================================== */
|
||||
#journal-board .board-header {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
gap: 20px;
|
||||
padding-bottom: 25px;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
#journal-board .board-total { font-size: 1.2rem; color: #555; font-weight: 500; text-align: left; }
|
||||
#journal-board .board-total .text-primary { color: #0056b3; font-weight: 700; }
|
||||
#journal-board .board-controls { display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap; }
|
||||
#journal-board .view-mode-switcher { display: flex; border: 1px solid #ddd; border-radius: 8px; overflow: hidden; }
|
||||
#journal-board .btn-view-mode { background: #fff; border: none; padding: 10px 15px; cursor: pointer; color: #888; font-size: 1.2rem; line-height: 1; transition: all 0.2s ease; }
|
||||
#journal-board .btn-view-mode.active { background: #0056b3; color: #fff; }
|
||||
#journal-board .btn-view-mode:hover:not(.active) { background: #f0f0f0; color: #333; }
|
||||
#journal-board .board-search { flex-grow: 1; }
|
||||
#journal-board .board-search .input-group { display: flex; align-items: center; width: 100%; max-width: 400px; margin-left: auto; }
|
||||
#journal-board .board-search select,
|
||||
#journal-board .board-search input[type="text"] { border: 1px solid #ddd; padding: 0 15px; height: 42px; font-size: 1rem; background: #fff; border-radius: 8px; transition: border-color 0.2s ease; }
|
||||
#journal-board .board-search select { border-radius: 8px 0 0 8px; border-right: none; }
|
||||
#journal-board .board-search input[type="text"]:focus { border-color: #0056b3; outline: none; box-shadow: 0 0 0 2px rgba(0, 86, 179, 0.2); }
|
||||
#journal-board .board-search .btn { border-radius: 0 8px 8px 0; height: 42px; padding: 0 20px; background: #0056b3; color: #fff; border: none; transition: background-color 0.2s ease; }
|
||||
#journal-board .board-search .btn:hover { background-color: #003d82; }
|
||||
|
||||
/* ==========================================================================
|
||||
List View: Hybrid Layout & View Switching
|
||||
========================================================================== */
|
||||
#journal-board .list-separator {
|
||||
text-align: center;
|
||||
padding: 40px 20px;
|
||||
margin: 40px 0;
|
||||
border-top: 1px solid #e0e0e0;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
#journal-board .list-separator p {
|
||||
font-size: 1.1rem;
|
||||
color: #666;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
/* 💡 [최종 수정] 뷰 전환이 올바르게 동작하도록 선택자를 수정합니다. */
|
||||
#journal-board .board-list-wrapper[data-view-mode="card"] .card-list-view { display: block; }
|
||||
#journal-board .board-list-wrapper[data-view-mode="list"] .list-view { display: block; }
|
||||
#journal-board .board-list-wrapper .card-list-view,
|
||||
#journal-board .board-list-wrapper .list-view { display: none; }
|
||||
|
||||
/* ==========================================================================
|
||||
List View: Card & List
|
||||
========================================================================== */
|
||||
#journal-board .empty-list { padding: 100px 20px; text-align: center; color: #888; font-size: 1.6rem; font-weight: 600; }
|
||||
#journal-board .card-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(320px, 1fr)); gap: 30px; }
|
||||
#journal-board .card-item { background: #fff; border-radius: 12px; overflow: hidden; box-shadow: 0 8px 25px rgba(0,0,0,0.08); transition: transform 0.3s ease, box-shadow 0.3s ease; border: none; }
|
||||
#journal-board .card-item:hover { transform: translateY(-7px); box-shadow: 0 12px 35px rgba(0,0,0,0.15); }
|
||||
#journal-board .card-link { display: block; text-decoration: none; color: inherit; }
|
||||
#journal-board .card-thumbnail { position: relative; width: 100%; padding-top: 70%; background-color: #f0f0f0; }
|
||||
#journal-board .card-thumbnail img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; }
|
||||
#journal-board .badge-pdf, #journal-board .badge-link, #journal-board .badge-featured { position: absolute; top: 15px; right: 15px; padding: 8px 15px; border-radius: 20px; font-size: 0.85rem; font-weight: 700; color: #fff; text-transform: uppercase; letter-spacing: 0.5px; }
|
||||
#journal-board .badge-pdf { background-color: #e74c3c; }
|
||||
#journal-board .badge-link { background-color: #3498db; }
|
||||
#journal-board .badge-featured { background-color: #9b59b6; }
|
||||
#journal-board .card-content { padding: 25px; }
|
||||
#journal-board .card-category { display: inline-block; font-size: 0.9rem; font-weight: 700; color: #0056b3; margin-bottom: 10px; }
|
||||
#journal-board .card-title { font-size: 1.5rem; font-weight: 800; margin: 0 0 15px 0; line-height: 1.4; min-height: 2.8em; color: #222; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
|
||||
#journal-board .card-summary { font-size: 1rem; color: #666; line-height: 1.7; height: 5.1em; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; }
|
||||
#journal-board .card-meta { margin-top: 20px; padding-top: 15px; border-top: 1px solid #f0f0f0; font-size: 0.9rem; color: #888; }
|
||||
#journal-board .card-item.is-featured { border: 2px solid #9b59b6; box-shadow: 0 8px 25px rgba(155, 89, 182, 0.2); }
|
||||
#journal-board .list-group { border-top: 2px solid #333; }
|
||||
#journal-board .list-group-header, #journal-board .list-group-item { display: flex; align-items: center; padding: 18px 10px; border-bottom: 1px solid #f0f0f0; }
|
||||
#journal-board .list-group-header { font-weight: 700; background-color: #f9f9f9; font-size: 1.05rem; }
|
||||
#journal-board .list-group-item:hover { background-color: #f5f5f5; }
|
||||
#journal-board .list-cell { padding: 0 10px; text-align: center; color: #555; }
|
||||
#journal-board .list-cell.num { flex: 0 0 80px; }
|
||||
#journal-board .list-cell.title { flex: 1; text-align: left; }
|
||||
#journal-board .list-cell.title a { color: #333; text-decoration: none; font-weight: 500; }
|
||||
#journal-board .list-group-item.is-featured { background-color: #fdf8ff; }
|
||||
#journal-board .badge-featured-list { color: #9b59b6; margin-right: 8px; }
|
||||
|
||||
/* ==========================================================================
|
||||
View Page Styles
|
||||
========================================================================== */
|
||||
#journal-board .view-header { padding-bottom: 20px; border-bottom: 1px solid #e0e0e0; margin-bottom: 30px; }
|
||||
#journal-board .view-header h1 { font-size: 2.5rem; font-weight: 800; margin-bottom: 15px; line-height: 1.3; }
|
||||
#journal-board .view-meta { display: flex; flex-wrap: wrap; gap: 10px 20px; color: #888; font-size: 0.95rem; }
|
||||
#journal-board .view-meta .meta-item i { margin-right: 5px; color: #aaa; }
|
||||
#journal-board .view-content { padding: 30px 0; }
|
||||
|
||||
#journal-board #pdf-viewer-container { display: block; margin-bottom: 40px; border: 1px solid #e0e0e0; border-radius: 8px; }
|
||||
#journal-board #pdf-viewer-header {
|
||||
position: sticky;
|
||||
top: 80px;
|
||||
z-index: 10;
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
padding: 12px 20px;
|
||||
background: rgba(248, 248, 248, 0.95);
|
||||
backdrop-filter: blur(5px);
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
}
|
||||
#journal-board #pdf-viewer-header .page-indicator { font-size: 1rem; color: #333; font-weight: 500; }
|
||||
#journal-board #pdf-viewer-header #page-num-input { width: 60px; text-align: center; border: 1px solid #ddd; border-radius: 5px; padding: 5px; font-size: 1rem; }
|
||||
#journal-board #canvas-wrapper { overflow: auto; background: #f9f9f9; cursor: pointer; }
|
||||
#journal-board #pdf-canvas { display: block; margin: 0 auto; }
|
||||
#journal-board #pdf-loading { padding: 100px 20px; display: flex; flex-direction: column; justify-content: center; align-items: center; gap: 20px; font-size: 1.3rem; color: #666; font-weight: 500; }
|
||||
#journal-board .spinner { width: 40px; height: 40px; border: 4px solid #e0e0e0; border-top: 4px solid #0056b3; border-radius: 50%; animation: spin 1s linear infinite; }
|
||||
@keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }
|
||||
|
||||
#journal-board .download-box { margin-top: 30px; padding-top: 30px; border-top: 1px solid #eee; }
|
||||
#journal-board .download-box h3 { font-size: 1.3rem; font-weight: 700; margin-bottom: 15px; color: #333; }
|
||||
#journal-board .download-list { list-style: none; padding: 0; margin: 0; border: 1px solid #e0e0e0; border-radius: 8px; overflow: hidden; }
|
||||
#journal-board .download-list li { border-bottom: 1px solid #e0e0e0; }
|
||||
#journal-board .download-list li:last-child { border-bottom: none; }
|
||||
#journal-board .download-list a { display: flex; align-items: center; padding: 15px 20px; text-decoration: none; color: #555; transition: background-color 0.2s ease; }
|
||||
#journal-board .download-list a:hover { background-color: #f9f9f9; }
|
||||
#journal-board .download-list .file-icon { font-size: 1.5rem; color: #888; margin-right: 15px; width: 25px; text-align: center; }
|
||||
#journal-board .download-list .fa-file-pdf-o { color: #e74c3c; }
|
||||
#journal-board .download-list .fa-file-image-o { color: #3498db; }
|
||||
#journal-board .download-list .fa-file-archive-o { color: #f39c12; }
|
||||
#journal-board .download-list .file-name { flex-grow: 1; font-weight: 500; }
|
||||
#journal-board .download-list .file-size { font-size: 0.9rem; color: #888; }
|
||||
#journal-board .view-summary { font-size: 1.1rem; line-height: 1.7; color: #555; padding: 25px; background: #f8f8f8; border-radius: 8px; margin-top: 40px; }
|
||||
#journal-board .view-detail-content { margin-top: 40px; }
|
||||
#journal-board .view-footer { margin-top: 40px; padding-top: 30px; border-top: 1px solid #e0e0e0; display: flex; justify-content: space-between; align-items: center; }
|
||||
#journal-board .btn-group-left, #journal-board .btn-group-right { display: flex; gap: 10px; }
|
||||
|
||||
/* ==========================================================================
|
||||
Common Footer & Write Form
|
||||
========================================================================== */
|
||||
#journal-board .board-footer { margin-top: 40px; display: flex; justify-content: space-between; align-items: center; }
|
||||
#journal-board .pagination-wrapper, #journal-board .load-more-wrapper { flex-grow: 1; text-align: center; }
|
||||
#journal-board .board-footer .btn-group { display: flex; gap: 10px; margin-left: auto; }
|
||||
#journal-board .board-footer .btn, #journal-board .view-footer .btn { display: inline-flex; align-items: center; justify-content: center; text-decoration: none; border-radius: 8px; font-size: 1.1rem; text-align: center; font-weight: 700; transition: all 0.2s ease; border: none; }
|
||||
#journal-board .board-footer .btn:hover, #journal-board .view-footer .btn:hover { transform: translateY(-2px); box-shadow: 0 4px 10px rgba(0,0,0,0.1); }
|
||||
#journal-board .board-footer .btn-secondary, #journal-board .view-footer .btn-secondary { background-color: #6c757d; color: #fff; }
|
||||
#journal-board .board-footer .btn-primary, #journal-board .view-footer .btn-primary { background-color: #0056b3; color: #fff; }
|
||||
|
||||
#journal-board .write-form-group { margin-bottom: 25px; }
|
||||
#journal-board .form-divider { margin: 40px 0; border: 0; border-top: 1px solid #e0e0e0; }
|
||||
#journal-board .admin-options-group { background-color: #fcfcfc; padding: 25px; border-radius: 8px; margin-top: 30px; border: 1px solid #e0e0e0; }
|
||||
#journal-board .form-section-title { font-size: 1.3rem; font-weight: 700; margin: 0 0 20px 0; color: #333; }
|
||||
#journal-board .form-check-label { display: flex; align-items: center; gap: 10px; font-size: 1.1rem; cursor: pointer; }
|
||||
#journal-board .form-check-label input[type="checkbox"] { -webkit-appearance: checkbox; -moz-appearance: checkbox; appearance: checkbox; width: 18px; height: 18px; opacity: 1; position: static; }
|
||||
#journal-board .write-form-footer { margin-top: 40px; display: flex; justify-content: flex-end; gap: 10px; }
|
||||
#journal-board .write-form-footer .btn { text-decoration: none; border-radius: 8px; font-size: 1.1rem; font-weight: 700; border: none; transition: all 0.2s ease; }
|
||||
#journal-board .write-form-footer .btn:hover { transform: translateY(-2px); box-shadow: 0 4px 10px rgba(0,0,0,0.1); }
|
||||
#journal-board .write-form-footer .btn-secondary { background-color: #6c757d; color: #fff; }
|
||||
#journal-board .write-form-footer .btn-primary { background-color: #0056b3; color: #fff; }
|
||||
|
||||
/* ==========================================================================
|
||||
3-Column Layout & Responsive
|
||||
========================================================================== */
|
||||
#journal-board .three-column-layout { display: flex; gap: 30px; }
|
||||
#journal-board .layout-sidebar-left, #journal-board .layout-sidebar-right { flex: 0 0 240px; position: sticky; top: 100px; }
|
||||
#journal-board .layout-main-content { flex: 1; min-width: 0; }
|
||||
@media (max-width: 1024px) {
|
||||
#journal-board .three-column-layout { flex-direction: column; }
|
||||
#journal-board .layout-sidebar-left, #journal-board .layout-sidebar-right { position: static; flex-basis: 100%; }
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
#journal-board .board-container, #journal-board .board-write-container, #journal-board .board-view-container { padding: 15px; }
|
||||
#journal-board .board-controls { flex-direction: column-reverse; align-items: stretch; gap: 15px; }
|
||||
#journal-board .card-list { grid-template-columns: 1fr; }
|
||||
#journal-board .list-cell.category, #journal-board .list-cell.name, #journal-board .list-cell.hit { display: none; }
|
||||
#journal-board .view-footer { flex-direction: column; gap: 15px; }
|
||||
#journal-board .btn-group-left, #journal-board .btn-group-right { justify-content: center; width: 100%; }
|
||||
#journal-board .view-header h1 { font-size: 1.8rem; }
|
||||
#journal-board .view-meta { flex-direction: column; gap: 5px; }
|
||||
/* ===============================
|
||||
PDF Viewer - Mobile Fix
|
||||
=============================== */
|
||||
#pdf-viewer-container {
|
||||
width: 100%;
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
|
||||
/* 상단 컨트롤 영역 */
|
||||
#pdf-viewer-header {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 8px;
|
||||
padding: 10px;
|
||||
align-items: stretch;
|
||||
}
|
||||
|
||||
#pdf-viewer-header button,
|
||||
#pdf-viewer-header a {
|
||||
width: 100%;
|
||||
justify-content: center;
|
||||
font-size: 0.9rem;
|
||||
padding: 8px 10px;
|
||||
}
|
||||
|
||||
/* 페이지 표시 영역 */
|
||||
#pdf-viewer-header .page-indicator {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
gap: 5px;
|
||||
font-size: 0.85rem;
|
||||
}
|
||||
|
||||
#page-num-input {
|
||||
width: 60px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* PDF 캔버스 영역 */
|
||||
#canvas-wrapper {
|
||||
width: 100%;
|
||||
overflow-x: auto;
|
||||
overflow-y: hidden;
|
||||
-webkit-overflow-scrolling: touch;
|
||||
background: #f5f5f5;
|
||||
padding: 10px 0;
|
||||
}
|
||||
|
||||
#pdf-canvas {
|
||||
width: 100% !important;
|
||||
height: auto !important;
|
||||
max-width: 100%;
|
||||
display: block;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
/* 로딩 화면 */
|
||||
#pdf-loading {
|
||||
position: relative;
|
||||
padding: 20px;
|
||||
text-align: center;
|
||||
}
|
||||
}
|
||||
|
||||
.sub-page-container {
|
||||
padding-top: 0px; !important;
|
||||
padding-bottom: 0px; !important;
|
||||
/*background: #fff;*/
|
||||
/*min-height: 500px;*/
|
||||
}
|
||||
.layout-main-content {
|
||||
padding-top: 0px; !important;
|
||||
}
|
||||
|
||||
/* 💡 [추가] 관리자 옵션 체크박스 스타일 */
|
||||
#journal-board .admin-option-item {
|
||||
background: #f9f9f9;
|
||||
padding: 15px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 5px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
#journal-board .admin-option-checkbox {
|
||||
appearance: checkbox !important;
|
||||
-webkit-appearance: checkbox !important;
|
||||
width: 20px !important;
|
||||
height: 20px !important;
|
||||
cursor: pointer !important;
|
||||
opacity: 1 !important;
|
||||
visibility: visible !important;
|
||||
display: inline-block !important;
|
||||
position: static !important;
|
||||
margin-right: 10px !important;
|
||||
}
|
||||
#journal-board .admin-option-item .option-text {
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
font-size: 16px;
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const journalBoard = document.getElementById('journal-board');
|
||||
if (!journalBoard) return;
|
||||
|
||||
// 💡 [최종 수정] data-view-mode 속성이 있는 실제 요소인 .board-list-wrapper를 선택합니다.
|
||||
const boardListWrapper = journalBoard.querySelector('.board-list-wrapper');
|
||||
if (!boardListWrapper) return;
|
||||
|
||||
const viewModeButtons = document.querySelectorAll('.btn-view-mode');
|
||||
const paginationWrapper = document.querySelector('.pagination-wrapper');
|
||||
const loadMoreWrapper = document.querySelector('.load-more-wrapper');
|
||||
|
||||
viewModeButtons.forEach(button => {
|
||||
button.addEventListener('click', function() {
|
||||
const mode = this.dataset.mode;
|
||||
viewModeButtons.forEach(btn => btn.classList.remove('active'));
|
||||
this.classList.add('active');
|
||||
|
||||
// 💡 [최종 수정] boardListWrapper의 data-view-mode 속성을 변경합니다.
|
||||
boardListWrapper.dataset.viewMode = mode;
|
||||
|
||||
// PHP에서 전달받은 JavaScript 전역 변수를 사용합니다.
|
||||
if (typeof journal_skin_options !== 'undefined') {
|
||||
set_cookie('board_' + journal_skin_options.bo_table + '_view_mode', mode, 365, journal_skin_options.cookie_domain, journal_skin_options.cookie_path);
|
||||
}
|
||||
|
||||
// 뷰 모드에 따라 페이지네이션/더보기 버튼 보이기/숨기기
|
||||
if (paginationWrapper) paginationWrapper.style.display = (mode === 'list') ? 'block' : 'none';
|
||||
if (loadMoreWrapper) loadMoreWrapper.style.display = (mode === 'card') ? 'block' : 'none';
|
||||
});
|
||||
});
|
||||
|
||||
// --- '더보기' 버튼 기능 ---
|
||||
const loadMoreButton = document.getElementById('btn-load-more');
|
||||
if (loadMoreButton) {
|
||||
loadMoreButton.addEventListener('click', function() {
|
||||
let currentPage = parseInt(this.dataset.page, 10);
|
||||
this.textContent = '로딩 중...';
|
||||
this.disabled = true;
|
||||
|
||||
const url = new URL(window.location.href);
|
||||
url.searchParams.set('page', currentPage);
|
||||
|
||||
fetch(url)
|
||||
.then(response => response.text())
|
||||
.then(html => {
|
||||
const parser = new DOMParser();
|
||||
const doc = parser.parseFromString(html, 'text/html');
|
||||
|
||||
const newItems = doc.querySelectorAll('#board-list-wrapper .card-item');
|
||||
const cardList = boardListWrapper.querySelector('#board-list-wrapper .card-list'); // boardListWrapper 안에서 찾음
|
||||
|
||||
if (newItems.length > 0 && cardList) {
|
||||
newItems.forEach(item => {
|
||||
cardList.appendChild(item);
|
||||
});
|
||||
|
||||
currentPage++;
|
||||
this.dataset.page = currentPage;
|
||||
this.textContent = '더보기';
|
||||
this.disabled = false;
|
||||
|
||||
const nextLoadMoreButton = doc.getElementById('btn-load-more');
|
||||
if (!nextLoadMoreButton) {
|
||||
this.style.display = 'none';
|
||||
}
|
||||
} else {
|
||||
this.textContent = '마지막 페이지입니다.';
|
||||
this.disabled = true;
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error loading more items:', error);
|
||||
this.textContent = '오류 발생';
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function set_cookie(name, value, time, domain, path) {
|
||||
let expires = "";
|
||||
if (time) {
|
||||
const date = new Date();
|
||||
date.setTime(date.getTime() + (time * 24 * 60 * 60 * 1000));
|
||||
expires = "; expires=" + date.toUTCString();
|
||||
}
|
||||
document.cookie = name + "=" + (value || "") + expires + "; path=" + path + "; domain=" + domain;
|
||||
}
|
||||
});
|
||||
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
/**
|
||||
* journal :: list.skin.php
|
||||
*/
|
||||
|
||||
// 0. 중앙 광고 설정 파일을 로드합니다.
|
||||
include_once(G5_THEME_PATH . '/skin/board/board_ad_config.php');
|
||||
|
||||
// 1. 자식 스킨의 설정 파일을 로드합니다.
|
||||
$config_path = __DIR__ . '/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
}
|
||||
|
||||
// 2. 자식 스킨이 자신의 CSS와 JS를 직접 로드합니다.
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/css/style.css?ver='.G5_SERVER_TIME.'">', 0);
|
||||
add_javascript('<script src="'.$board_skin_url.'/js/script.js?ver='.G5_SERVER_TIME.'"></script>', 0);
|
||||
|
||||
// 3. 뷰 모드를 미리 결정합니다.
|
||||
$default_view_mode = isset($board_config['list']['default_view_mode']) ? $board_config['list']['default_view_mode'] : 'card';
|
||||
$view_mode = get_cookie('board_' . $bo_table . '_view_mode') ?: $default_view_mode;
|
||||
?>
|
||||
|
||||
<!-- 💡 [수정] 스킨 전체를 감싸는 고유 ID를 'journal-board'로 변경합니다. -->
|
||||
<div id="journal-board">
|
||||
<div class="three-column-layout container">
|
||||
|
||||
<!-- 1. 좌측 사이드바 -->
|
||||
<?php if (isset($board_ad_config['list_ad']['left']) && $board_ad_config['list_ad']['left'] === true): ?>
|
||||
<aside class="layout-sidebar-left">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">좌측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_l" data-layout="journal-list-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- 2. 중앙 메인 콘텐츠 -->
|
||||
<main class="layout-main-content1">
|
||||
<?php
|
||||
// 💡 [핵심 수정] '저널' 타입 전용 코어 목록 파일을 불러옵니다.
|
||||
$core_skin_path = G5_THEME_PATH . '/skin/board/rb.board.core.journal/list.skin.php';
|
||||
if (file_exists($core_skin_path)) {
|
||||
include($core_skin_path);
|
||||
} else {
|
||||
echo '<div class="empty-list">코어 게시판 스킨 파일을 찾을 수 없습니다.</div>';
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="board-footer">
|
||||
<div class="pagination-wrapper" style="display: <?php echo ($view_mode === 'list') ? 'block' : 'none'; ?>;">
|
||||
<?php echo $write_pages; ?>
|
||||
</div>
|
||||
<?php if ($page < $total_page): ?>
|
||||
<div class="load-more-wrapper" style="display: <?php echo ($view_mode === 'card') ? 'block' : 'none'; ?>;">
|
||||
<button type="button" id="btn-load-more" class="btn btn-primary" data-page="<?php echo $page + 1; ?>">더보기</button>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<!-- <div class="btn-group">-->
|
||||
<!-- --><?php //if ($list_href) { ?><!--<a href="--><?php //echo $list_href ?><!--" class="btn btn-secondary">목록</a>--><?php //} ?>
|
||||
<!-- --><?php //if ($write_href) { ?><!--<a href="--><?php //echo $write_href ?><!--" class="btn btn-primary">글쓰기</a>--><?php //} ?>
|
||||
<!-- </div>-->
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- 3. 우측 사이드바 -->
|
||||
<?php if (isset($board_ad_config['list_ad']['right']) && $board_ad_config['list_ad']['right'] === true): ?>
|
||||
<aside class="layout-sidebar-right">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">우측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_r" data-layout="journal-list-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,79 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
/**
|
||||
* journal :: list.skin.php
|
||||
*/
|
||||
|
||||
// 0. 중앙 광고 설정 파일을 로드합니다.
|
||||
include_once(G5_THEME_PATH . '/skin/board/board_ad_config.php');
|
||||
|
||||
// 1. 자식 스킨의 설정 파일을 로드합니다.
|
||||
$config_path = __DIR__ . '/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
}
|
||||
|
||||
// 2. 자식 스킨이 자신의 CSS와 JS를 직접 로드합니다.
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/css/style.css?ver='.G5_SERVER_TIME.'">', 0);
|
||||
add_javascript('<script src="'.$board_skin_url.'/js/script.js?ver='.G5_SERVER_TIME.'"></script>', 0);
|
||||
|
||||
// 3. 뷰 모드를 미리 결정합니다.
|
||||
$default_view_mode = isset($board_config['list']['default_view_mode']) ? $board_config['list']['default_view_mode'] : 'card';
|
||||
$view_mode = get_cookie('board_' . $bo_table . '_view_mode') ?: $default_view_mode;
|
||||
?>
|
||||
|
||||
<!-- 💡 [수정] 스킨 전체를 감싸는 고유 ID를 'journal-board'로 변경합니다. -->
|
||||
<div id="journal-board">
|
||||
<div class="three-column-layout container">
|
||||
|
||||
<!-- 1. 좌측 사이드바 -->
|
||||
<?php if (isset($board_ad_config['list_ad']['left']) && $board_ad_config['list_ad']['left'] === true): ?>
|
||||
<aside class="layout-sidebar-left">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">좌측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_l" data-layout="journal-list-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- 2. 중앙 메인 콘텐츠 -->
|
||||
<main class="layout-main-content1">
|
||||
<?php
|
||||
// 💡 [핵심 수정] '저널' 타입 전용 코어 목록 파일을 불러옵니다.
|
||||
$core_skin_path = G5_THEME_PATH . '/skin/board/rb.board.core.journal/list.skin.php';
|
||||
if (file_exists($core_skin_path)) {
|
||||
include($core_skin_path);
|
||||
} else {
|
||||
echo '<div class="empty-list">코어 게시판 스킨 파일을 찾을 수 없습니다.</div>';
|
||||
}
|
||||
?>
|
||||
|
||||
<div class="board-footer">
|
||||
<div class="pagination-wrapper" style="display: <?php echo ($view_mode === 'list') ? 'block' : 'none'; ?>;">
|
||||
<?php echo $write_pages; ?>
|
||||
</div>
|
||||
<?php if ($page < $total_page): ?>
|
||||
<div class="load-more-wrapper" style="display: <?php echo ($view_mode === 'card') ? 'block' : 'none'; ?>;">
|
||||
<button type="button" id="btn-load-more" class="btn btn-primary" data-page="<?php echo $page + 1; ?>">더보기</button>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
<div class="btn-group">
|
||||
<?php if ($list_href) { ?><a href="<?php echo $list_href ?>" class="btn btn-secondary">목록</a><?php } ?>
|
||||
<?php if ($write_href) { ?><a href="<?php echo $write_href ?>" class="btn btn-primary">글쓰기</a><?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
|
||||
<!-- 3. 우측 사이드바 -->
|
||||
<?php if (isset($board_ad_config['list_ad']['right']) && $board_ad_config['list_ad']['right'] === true): ?>
|
||||
<aside class="layout-sidebar-right">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">우측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_r" data-layout="journal-list-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
/**
|
||||
* journal :: view.skin.php
|
||||
*/
|
||||
|
||||
// 0. 중앙 광고 설정 파일을 로드합니다.
|
||||
include_once(G5_THEME_PATH . '/skin/board/board_ad_config.php');
|
||||
|
||||
// 1. 자식 스킨의 설정 파일을 로드합니다.
|
||||
$config_path = __DIR__ . '/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
}
|
||||
|
||||
// 2. 자식 스킨이 자신의 CSS와 JS를 직접 로드합니다.
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/css/style.css?ver='.G5_SERVER_TIME.'">', 0);
|
||||
add_javascript('<script src="'.$board_skin_url.'/js/script.js?ver='.G5_SERVER_TIME.'"></script>', 0);
|
||||
|
||||
?>
|
||||
|
||||
<!-- 💡 [수정] 스킨 전체를 감싸는 고유 ID를 'journal-board'로 변경합니다. -->
|
||||
<div id="journal-board">
|
||||
<div class="three-column-layout container">
|
||||
|
||||
<!-- 1. 좌측 사이드바 -->
|
||||
<?php if ((isset($board_ad_config['view_ad']['left']) && $board_ad_config['view_ad']['left'] === true) || (isset($journal_skin_config['left_ad']) && $journal_skin_config['left_ad'] === true)): ?>
|
||||
<aside class="layout-sidebar-left">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">좌측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_l" data-layout="journal-view-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- 2. 중앙 메인 콘텐츠 -->
|
||||
<main class="layout-main-content">
|
||||
<?php
|
||||
// 💡 [핵심 수정] '저널' 타입 전용 코어 뷰 파일을 불러옵니다.
|
||||
$core_skin_path = G5_THEME_PATH . '/skin/board/rb.board.core.journal/view.skin.php';
|
||||
if (file_exists($core_skin_path)) {
|
||||
include($core_skin_path);
|
||||
} else {
|
||||
echo '<div class="empty-list">코어 게시판 스킨 파일을 찾을 수 없습니다.</div>';
|
||||
}
|
||||
?>
|
||||
</main>
|
||||
|
||||
<!-- 3. 우측 사이드바 -->
|
||||
<?php if ((isset($board_ad_config['view_ad']['right']) && $board_ad_config['view_ad']['right'] === true) || (isset($journal_skin_config['right_ad']) && $journal_skin_config['right_ad'] === true)): ?>
|
||||
<aside class="layout-sidebar-right">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">우측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_r" data-layout="journal-view-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,61 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
/**
|
||||
* journal :: write.skin.php
|
||||
*/
|
||||
|
||||
// 0. 중앙 광고 설정 파일을 로드합니다.
|
||||
include_once(G5_THEME_PATH . '/skin/board/board_ad_config.php');
|
||||
|
||||
// 1. 자식 스킨의 설정 파일을 로드합니다.
|
||||
$config_path = __DIR__ . '/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
}
|
||||
|
||||
// 2. 자식 스킨이 자신의 CSS와 JS를 직접 로드합니다.
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/css/style.css?ver='.G5_SERVER_TIME.'">', 0);
|
||||
add_javascript('<script src="'.$board_skin_url.'/js/script.js?ver='.G5_SERVER_TIME.'"></script>', 0);
|
||||
|
||||
?>
|
||||
|
||||
<!-- 💡 [수정] 스킨 전체를 감싸는 고유 ID를 'journal-board'로 변경합니다. -->
|
||||
<div id="journal-board">
|
||||
<div class="three-column-layout container">
|
||||
|
||||
<!-- 1. 좌측 사이드바 -->
|
||||
<?php if (isset($board_ad_config['write_ad']['left']) && $board_ad_config['write_ad']['left'] === true): ?>
|
||||
<aside class="layout-sidebar-left">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">좌측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_l" data-layout="journal-write-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- 2. 중앙 메인 콘텐츠 -->
|
||||
<main class="layout-main-content">
|
||||
<?php
|
||||
// 💡 [핵심 수정] '저널' 타입 전용 코어 글쓰기 파일을 불러옵니다.
|
||||
$core_skin_path = G5_THEME_PATH . '/skin/board/rb.board.core.journal/write.skin.php';
|
||||
if (file_exists($core_skin_path)) {
|
||||
include($core_skin_path);
|
||||
} else {
|
||||
echo '<div class="empty-list">코어 게시판 스킨 파일을 찾을 수 없습니다.</div>';
|
||||
}
|
||||
?>
|
||||
</main>
|
||||
|
||||
<!-- 3. 우측 사이드바 -->
|
||||
<?php if (isset($board_ad_config['write_ad']['right']) && $board_ad_config['write_ad']['right'] === true): ?>
|
||||
<aside class="layout-sidebar-right">
|
||||
<div class="sidebar-inner">
|
||||
<?php if($is_admin) { ?> <h3 class="sidebar-title">우측 광고 영역</h3> <?php } ?>
|
||||
<div class="flex_box flex_box_r" data-layout="journal-write-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
@@ -0,0 +1,33 @@
|
||||
<?php
|
||||
include_once('../../../../../common.php');
|
||||
|
||||
// 관리자가 아니면 실행 중단
|
||||
if (!$is_admin) {
|
||||
die(json_encode(['error' => '관리자만 접근 가능합니다.']));
|
||||
}
|
||||
|
||||
header('Content-Type: application/json');
|
||||
|
||||
$bo_table = isset($_POST['bo_table']) ? trim($_POST['bo_table']) : '';
|
||||
$wr_id = isset($_POST['wr_id']) ? intval($_POST['wr_id']) : 0;
|
||||
$status = isset($_POST['status']) ? trim($_POST['status']) : '';
|
||||
|
||||
if (!$bo_table || !$wr_id || !in_array($status, ['show', 'hide'])) {
|
||||
die(json_encode(['error' => '필수 정보가 누락되었습니다.']));
|
||||
}
|
||||
|
||||
// '숨김' 상태일 때는 wr_10 필드에 1을, '보임' 상태일 때는 0을 저장합니다.
|
||||
$new_value = ($status == 'hide') ? '1' : '0';
|
||||
|
||||
$write_table = $g5['write_prefix'] . $bo_table;
|
||||
|
||||
$sql = " UPDATE {$write_table} SET wr_10 = '{$new_value}' WHERE wr_id = '{$wr_id}' ";
|
||||
$result = sql_query($sql);
|
||||
|
||||
if ($result) {
|
||||
// 성공 시 새로운 상태를 반환
|
||||
echo json_encode(['success' => true, 'new_status' => ($new_value == '1' ? 'hidden' : 'visible')]);
|
||||
} else {
|
||||
echo json_encode(['error' => '데이터베이스 업데이트에 실패했습니다.']);
|
||||
}
|
||||
?>
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
// main_visual 스킨 광고 영역 설정
|
||||
$main_visual_skin_config = [
|
||||
'left_ad' => false, // 좌측 광고 사용 안함
|
||||
'right_ad' => false, // 우측 광고 사용 안함
|
||||
];
|
||||
?>
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 1.0 KiB |
|
After Width: | Height: | Size: 1.1 KiB |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 339 B |
|
After Width: | Height: | Size: 1.2 KiB |
|
After Width: | Height: | Size: 318 B |
@@ -0,0 +1,203 @@
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
|
||||
const listBody = document.getElementById('bo_list_body');
|
||||
const toggleBtn = document.getElementById('view-toggle-btn1');
|
||||
const chkAll = document.getElementById('chkall');
|
||||
const loadMoreBtn = document.getElementById('btn-load-more'); // 💡 [추가] 더보기 버튼
|
||||
const pagination = document.querySelector('.bo-pagination'); // 💡 [추가] 페이지네이션
|
||||
|
||||
if (!listBody || !toggleBtn) {
|
||||
return; // 필수 요소가 없으면 스크립트 중단
|
||||
}
|
||||
|
||||
const toggleIcon = toggleBtn.querySelector('i');
|
||||
|
||||
// 초기 뷰 모드는 HTML의 data-view-mode 속성에서 가져옴 (PHP에서 설정됨)
|
||||
let currentViewMode = listBody.dataset.viewMode || 'card';
|
||||
|
||||
// 뷰 모드를 설정하고 버튼의 아이콘과 툴팁을 업데이트하는 함수
|
||||
function setViewMode(mode) {
|
||||
// data-view-mode 속성 변경
|
||||
listBody.dataset.viewMode = mode;
|
||||
|
||||
if (mode === 'card') {
|
||||
// 현재 카드뷰 -> 다음 행동은 '목록형 보기'
|
||||
toggleIcon.className = 'fa fa-bars'; // 목록 아이콘
|
||||
toggleBtn.title = '목록형으로 보기';
|
||||
|
||||
// 💡 [추가] 더보기 버튼 보이기, 페이지네이션 숨기기
|
||||
if (loadMoreBtn) loadMoreBtn.parentElement.style.display = 'block';
|
||||
if (pagination) pagination.style.display = 'none';
|
||||
|
||||
} else { // 'list'
|
||||
// 현재 목록뷰 -> 다음 행동은 '카드형 보기'
|
||||
toggleIcon.className = 'fa fa-th-large'; // 카드 아이콘
|
||||
toggleBtn.title = '카드형으로 보기';
|
||||
|
||||
// 💡 [추가] 더보기 버튼 숨기기, 페이지네이션 보이기
|
||||
if (loadMoreBtn) loadMoreBtn.parentElement.style.display = 'none';
|
||||
if (pagination) pagination.style.display = 'flex';
|
||||
}
|
||||
|
||||
// 쿠키에 저장 (PHP와 연동)
|
||||
set_cookie('board_' + g5_bo_table + '_view_mode', mode, 365);
|
||||
}
|
||||
|
||||
// 토글 버튼 클릭 이벤트
|
||||
toggleBtn.addEventListener('click', function() {
|
||||
// 현재 뷰 모드를 확인하고 반대 모드로 전환
|
||||
const newMode = (listBody.dataset.viewMode === 'card') ? 'list' : 'card';
|
||||
setViewMode(newMode);
|
||||
});
|
||||
|
||||
// 페이지 로드 시 초기 상태 설정
|
||||
setViewMode(currentViewMode);
|
||||
|
||||
// 체크박스 동기화 및 전체 선택 상태 업데이트
|
||||
const listCheckboxes = document.querySelectorAll('input[name="chk_wr_id[]"]');
|
||||
const cardCheckboxes = document.querySelectorAll('input[name="chk_wr_id_card[]"]');
|
||||
|
||||
function updateCheckAllState() {
|
||||
if (!chkAll) return;
|
||||
|
||||
const total = listCheckboxes.length;
|
||||
let checkedCount = 0;
|
||||
|
||||
listCheckboxes.forEach(chk => {
|
||||
if (chk.checked) checkedCount++;
|
||||
});
|
||||
|
||||
chkAll.checked = (total > 0 && total === checkedCount);
|
||||
}
|
||||
|
||||
// 리스트형 체크박스 변경 시
|
||||
listCheckboxes.forEach((listChk, index) => {
|
||||
listChk.addEventListener('change', function() {
|
||||
if (cardCheckboxes[index]) {
|
||||
cardCheckboxes[index].checked = this.checked;
|
||||
}
|
||||
updateCheckAllState();
|
||||
});
|
||||
});
|
||||
|
||||
// 카드형 체크박스 변경 시
|
||||
cardCheckboxes.forEach((cardChk, index) => {
|
||||
cardChk.addEventListener('change', function() {
|
||||
const listChk = document.getElementById('chk_wr_id_' + index);
|
||||
if (listChk) {
|
||||
listChk.checked = this.checked;
|
||||
}
|
||||
updateCheckAllState();
|
||||
});
|
||||
});
|
||||
|
||||
// 전체 선택 체크박스 클릭 시
|
||||
if (chkAll) {
|
||||
chkAll.addEventListener('change', function() {
|
||||
const isChecked = this.checked;
|
||||
listCheckboxes.forEach(chk => chk.checked = isChecked);
|
||||
cardCheckboxes.forEach(chk => chk.checked = isChecked);
|
||||
});
|
||||
}
|
||||
|
||||
// ▼▼▼ [추가] 더보기 버튼 기능 구현 ▼▼▼
|
||||
if (loadMoreBtn) {
|
||||
loadMoreBtn.addEventListener('click', function() {
|
||||
const nextPage = parseInt(this.dataset.page);
|
||||
const originalText = this.textContent;
|
||||
|
||||
this.disabled = true;
|
||||
this.textContent = '로딩 중...';
|
||||
|
||||
// 현재 URL에서 페이지 파라미터만 변경
|
||||
const url = new URL(window.location.href);
|
||||
url.searchParams.set('page', nextPage);
|
||||
|
||||
fetch(url)
|
||||
.then(response => response.text())
|
||||
.then(html => {
|
||||
const parser = new DOMParser();
|
||||
const doc = parser.parseFromString(html, 'text/html');
|
||||
|
||||
// 다음 페이지의 카드 아이템들 가져오기
|
||||
const newItems = doc.querySelectorAll('#bo_list_body .bo-card-item');
|
||||
|
||||
if (newItems.length > 0) {
|
||||
newItems.forEach(item => {
|
||||
// 💡 [중요] 새로 가져온 아이템의 체크박스 ID 충돌 방지 및 이벤트 연결 필요
|
||||
// 하지만 여기서는 단순 추가만 하고, 체크박스 기능은 복잡해지므로 생략하거나
|
||||
// 필요하다면 추가 로직 구현해야 함. (일단은 추가만)
|
||||
listBody.appendChild(item);
|
||||
});
|
||||
|
||||
// 다음 페이지 번호 업데이트
|
||||
this.dataset.page = nextPage + 1;
|
||||
this.disabled = false;
|
||||
this.textContent = originalText;
|
||||
|
||||
// 다음 페이지에 더보기 버튼이 없으면 현재 버튼 숨김
|
||||
const nextLoadMoreBtn = doc.getElementById('btn-load-more');
|
||||
if (!nextLoadMoreBtn) {
|
||||
this.parentElement.style.display = 'none';
|
||||
}
|
||||
} else {
|
||||
this.parentElement.style.display = 'none';
|
||||
}
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error:', error);
|
||||
this.disabled = false;
|
||||
this.textContent = originalText;
|
||||
alert('게시물을 불러오는 중 오류가 발생했습니다.');
|
||||
});
|
||||
});
|
||||
}
|
||||
// ▲▲▲ 여기까지 ▲▲▲
|
||||
|
||||
// 노출 상태 토글 기능
|
||||
$('#bo_list_body').on('click', '.btn-status-toggle', function(e) {
|
||||
e.preventDefault();
|
||||
|
||||
const button = $(this);
|
||||
const wr_id = button.data('wr-id');
|
||||
const is_on = button.hasClass('status-on');
|
||||
const new_status = is_on ? 'hide' : 'show';
|
||||
const bo_table = $('input[name="bo_table"]').val();
|
||||
|
||||
button.find('i').removeClass('fa-toggle-on fa-toggle-off').addClass('fa-spinner fa-spin');
|
||||
|
||||
$.ajax({
|
||||
url: board_skin_url + '/ajax.status_update.php',
|
||||
type: 'POST',
|
||||
data: {
|
||||
bo_table: bo_table,
|
||||
wr_id: wr_id,
|
||||
status: new_status
|
||||
},
|
||||
dataType: 'json',
|
||||
success: function(data) {
|
||||
if (data.success) {
|
||||
button.removeClass('status-on status-off');
|
||||
button.find('i').removeClass('fa-spinner fa-spin');
|
||||
|
||||
if (data.new_status === 'hidden') {
|
||||
button.addClass('status-off').attr('title', '노출 상태로 변경');
|
||||
button.find('i').addClass('fa-toggle-off');
|
||||
} else {
|
||||
button.addClass('status-on').attr('title', '숨김 상태로 변경');
|
||||
button.find('i').addClass('fa-toggle-on');
|
||||
}
|
||||
location.reload();
|
||||
} else {
|
||||
alert(data.error || '상태 변경에 실패했습니다.');
|
||||
button.find('i').removeClass('fa-spinner fa-spin').addClass(is_on ? 'fa-toggle-on' : 'fa-toggle-off');
|
||||
}
|
||||
},
|
||||
error: function() {
|
||||
alert('서버와 통신 중 오류가 발생했습니다.');
|
||||
button.find('i').removeClass('fa-spinner fa-spin').addClass(is_on ? 'fa-toggle-on' : 'fa-toggle-off');
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
@@ -0,0 +1,56 @@
|
||||
// jQuery가 로드된 후 이 스크립트가 실행되어야 합니다.
|
||||
$(function() {
|
||||
// Datepicker 초기화
|
||||
$(".datepicker").datepicker({
|
||||
dateFormat: "yy-mm-dd",
|
||||
changeMonth: true,
|
||||
changeYear: true,
|
||||
dayNamesMin: ["일", "월", "화", "수", "목", "금", "토"],
|
||||
monthNamesShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
|
||||
});
|
||||
|
||||
// ▼▼▼ [핵심 수정] 여러 파일 미리보기 기능 ▼▼▼
|
||||
const fileWrappers = document.querySelectorAll('.file_preview_wrapper');
|
||||
|
||||
fileWrappers.forEach((wrapper, index) => {
|
||||
const previewBox = wrapper.querySelector('.file_preview');
|
||||
const fileInput = wrapper.querySelector('input[type="file"]');
|
||||
const previewText = previewBox.querySelector('.preview_text');
|
||||
const existingFileInfo = wrapper.querySelector('.preview_info');
|
||||
|
||||
if (!previewBox || !fileInput) return;
|
||||
|
||||
// 1. 미리보기 박스를 클릭하면 숨겨진 파일 입력 필드가 클릭되도록 함
|
||||
// previewBox.addEventListener('click', () => {
|
||||
// fileInput.click();
|
||||
// });
|
||||
|
||||
// 2. 파일이 선택되었을 때의 동작
|
||||
fileInput.addEventListener('change', (event) => {
|
||||
const file = event.target.files[0];
|
||||
if (file) {
|
||||
// 기존 파일 정보가 있다면 숨김 (새 파일로 교체되므로)
|
||||
if (existingFileInfo) {
|
||||
existingFileInfo.style.display = 'none';
|
||||
}
|
||||
|
||||
if (file.type.startsWith('video/')) {
|
||||
// 동영상은 미리보기를 생성하지 않고 파일 이름만 표시
|
||||
previewBox.style.backgroundImage = 'none';
|
||||
previewText.textContent = `동영상: ${file.name}`;
|
||||
previewText.style.display = 'block';
|
||||
} else if (file.type.startsWith('image/')) {
|
||||
// 이미지는 FileReader를 사용해 미리보기 생성
|
||||
const reader = new FileReader();
|
||||
reader.onload = function(e) {
|
||||
console.log("sdfasdfasfd= > ",`url(${e.target.result})`)
|
||||
previewBox.style.backgroundImage = `url(${e.target.result})`;
|
||||
previewText.style.display = 'none'; // '클릭하여 파일 업로드' 텍스트 숨김
|
||||
}
|
||||
reader.readAsDataURL(file);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
// ▲▲▲ 여기까지 ▲▲▲
|
||||
});
|
||||
@@ -0,0 +1,71 @@
|
||||
// jQuery가 로드된 후 이 스크립트가 실행되어야 합니다.
|
||||
$(function() {
|
||||
// Datepicker 초기화
|
||||
$(".datepicker").datepicker({
|
||||
dateFormat: "yy-mm-dd",
|
||||
changeMonth: true,
|
||||
changeYear: true,
|
||||
dayNamesMin: ["일", "월", "화", "수", "목", "금", "토"],
|
||||
monthNamesShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"],
|
||||
});
|
||||
|
||||
// 노출 방식 라디오 버튼 제어
|
||||
const exposureRadios = $('input[name="wr_9"]');
|
||||
const reservationFields = $('#reservation_fields');
|
||||
|
||||
function toggleReservationFields() {
|
||||
if ($('input[name="wr_9"]:checked').val() === 'RESERVED') {
|
||||
reservationFields.slideDown();
|
||||
} else {
|
||||
reservationFields.slideUp();
|
||||
}
|
||||
}
|
||||
exposureRadios.on('change', toggleReservationFields);
|
||||
toggleReservationFields();
|
||||
|
||||
|
||||
// ▼▼▼ [핵심 수정] 여러 파일 미리보기 기능 ▼▼▼
|
||||
const fileWrappers = document.querySelectorAll('.file_preview_wrapper');
|
||||
|
||||
fileWrappers.forEach((wrapper, index) => {
|
||||
const previewBox = wrapper.querySelector('.file_preview');
|
||||
const fileInput = wrapper.querySelector('input[type="file"]');
|
||||
const previewText = previewBox.querySelector('.preview_text');
|
||||
const existingFileInfo = wrapper.querySelector('.preview_info');
|
||||
|
||||
if (!previewBox || !fileInput) return;
|
||||
|
||||
// 1. 미리보기 박스를 클릭하면 숨겨진 파일 입력 필드가 클릭되도록 함
|
||||
previewBox.addEventListener('click', () => {
|
||||
fileInput.click();
|
||||
});
|
||||
|
||||
// 2. 파일이 선택되었을 때의 동작
|
||||
fileInput.addEventListener('change', (event) => {
|
||||
const file = event.target.files[0];
|
||||
if (file) {
|
||||
// 기존 파일 정보가 있다면 숨김 (새 파일로 교체되므로)
|
||||
if (existingFileInfo) {
|
||||
existingFileInfo.style.display = 'none';
|
||||
}
|
||||
|
||||
if (file.type.startsWith('video/')) {
|
||||
// 동영상은 미리보기를 생성하지 않고 파일 이름만 표시
|
||||
previewBox.style.backgroundImage = 'none';
|
||||
previewText.textContent = `동영상: ${file.name}`;
|
||||
previewText.style.display = 'block';
|
||||
} else if (file.type.startsWith('image/')) {
|
||||
// 이미지는 FileReader를 사용해 미리보기 생성
|
||||
const reader = new FileReader();
|
||||
reader.onload = function(e) {
|
||||
console.log("sdfasdfasfd= > ",`url(${e.target.result})`)
|
||||
previewBox.style.backgroundImage = `url(${e.target.result})`;
|
||||
previewText.style.display = 'none'; // '클릭하여 파일 업로드' 텍스트 숨김
|
||||
}
|
||||
reader.readAsDataURL(file);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
// ▲▲▲ 여기까지 ▲▲▲
|
||||
});
|
||||
@@ -0,0 +1,357 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// 0. 중앙 광고 설정 파일을 로드합니다.
|
||||
include_once(G5_THEME_PATH . '/skin/board/board_ad_config.php');
|
||||
|
||||
// 1. 자식 스킨의 설정 파일을 로드합니다.
|
||||
$config_path = __DIR__ . '/config.php';
|
||||
if (file_exists($config_path)) {
|
||||
include_once($config_path);
|
||||
}
|
||||
|
||||
// 이 스킨의 전용 스타일시트와 자바스크립트를 불러옵니다.
|
||||
add_stylesheet('<link rel="stylesheet" href="'.$board_skin_url.'/style.css?ver='.G5_SERVER_TIME.'">', 0);
|
||||
add_javascript('<script src="'.$board_skin_url.'/js/list.js?ver='.G5_SERVER_TIME.'"></script>', 0);
|
||||
|
||||
// 수정 링크 생성 함수
|
||||
function write_url($wr_id)
|
||||
{
|
||||
global $bo_table, $qstr;
|
||||
return G5_BBS_URL . "/write.php?w=u&bo_table={$bo_table}&wr_id={$wr_id}&{$qstr}";
|
||||
}
|
||||
|
||||
// 삭제 링크 생성 함수
|
||||
function delete_url($href)
|
||||
{
|
||||
return $href . "&sw=delete";
|
||||
}
|
||||
|
||||
$default_view_mode = isset($board_config['list']['default_view_mode']) ? $board_config['list']['default_view_mode'] : 'card';
|
||||
$view_mode = get_cookie('board_' . $bo_table . '_view_mode') ?: $default_view_mode;
|
||||
?>
|
||||
<!-- ▼▼▼ [핵심 수정] JS에서 사용할 PHP 변수를 전역 JS 변수로 선언합니다. ▼▼▼ -->
|
||||
<script>
|
||||
const board_skin_url = "<?php echo $board_skin_url; ?>";
|
||||
const total_page = <?php echo $total_page; ?>;
|
||||
const current_page = <?php echo $page; ?>;
|
||||
</script>
|
||||
<!-- ▲▲▲ 여기까지 ▲▲▲ -->
|
||||
|
||||
<!-- 게시판 목록 시작 -->
|
||||
<main class="main-content-wrapper">
|
||||
<div class="three-column-layout container">
|
||||
<?php if (isset($board_ad_config['list_ad']['left']) && $board_ad_config['list_ad']['left'] === true): ?>
|
||||
<aside class="layout-sidebar-left reveal-up">
|
||||
<div class="sidebar-inner">
|
||||
<!-- <h3 class="sidebar-title">광고 영역</h3>-->
|
||||
<!-- 💡 [수정] 좌측 모듈 영역에 고유 ID 부여 -->
|
||||
<div class="flex_box flex_box_l" data-layout="main-left"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
<main class="layout-main-content">
|
||||
<div id="bo_list" class="bo-list-container">
|
||||
|
||||
<!-- 게시판 상단 정보 및 버튼 영역 -->
|
||||
<div class="bo-list-header">
|
||||
<div class="bo-list-total">
|
||||
<span>Total <?php echo number_format($total_count) ?>건</span>
|
||||
<span class="sound_only"><?php echo $page ?> 페이지</span>
|
||||
</div>
|
||||
|
||||
<div class="bo-list-buttons">
|
||||
<button type="button" id="view-toggle-btn1" class="btn-view-toggle" title="보기 모드 전환">
|
||||
<i class="fa <?php echo ($view_mode === 'card') ? 'fa-list' : 'fa-th-large'; ?>" aria-hidden="true"></i>
|
||||
</button>
|
||||
<?php if ($admin_href) { ?><a href="<?php echo $admin_href ?>" class="btn-admin">
|
||||
관리자</a><?php } ?>
|
||||
<?php if ($write_href) { ?><a href="<?php echo $write_href ?>" class="btn-write">
|
||||
글쓰기</a><?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<form name="fboardlist" id="fboardlist" action="<?php echo G5_BBS_URL; ?>/board_list_update.php"
|
||||
onsubmit="return fboardlist_submit(this);" method="post">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="sfl" value="<?php echo $sfl ?>">
|
||||
<input type="hidden" name="stx" value="<?php echo $stx ?>">
|
||||
<input type="hidden" name="spt" value="<?php echo $spt ?>">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<input type="hidden" name="sst" value="<?php echo $sst ?>">
|
||||
<input type="hidden" name="sod" value="<?php echo $sod ?>">
|
||||
<input type="hidden" name="page" value="<?php echo $page ?>">
|
||||
<input type="hidden" name="sw" value="">
|
||||
|
||||
<!-- 💡 [수정] 전체 선택 체크박스를 bo_list_body 밖으로 이동 -->
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<div class="list-chk-all">
|
||||
<input type="checkbox" id="chkall"
|
||||
onclick="if (this.checked) all_checked(true); else all_checked(false);"
|
||||
class="selec_chk">
|
||||
<label for="chkall"><span></span> 전체선택</label>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<!-- 💡 [수정] data-view-mode 속성 추가 -->
|
||||
<div id="bo_list_body" class="list-view" data-view-mode="<?php echo $view_mode; ?>">
|
||||
|
||||
<?php
|
||||
for ($i = 0; $i < count($list); $i++) {
|
||||
|
||||
// --- 💡 [핵심 수정] 게시물 상세 정보 및 상태 정보 가져오기 ---
|
||||
$write_table = $g5['write_prefix'] . $bo_table;
|
||||
$post_data = get_write($write_table, $list[$i]['wr_id']);
|
||||
|
||||
// 1. 썸네일 이미지 가져오기
|
||||
$thumbnail = get_list_thumbnail($board['bo_table'], $list[$i]['wr_id'], 280, 180);
|
||||
|
||||
// 2. 이미지가 없을 경우, 본문 내용의 일부를 가져오기
|
||||
$content_preview = '';
|
||||
if (!$thumbnail['src'] && isset($post_data['wr_content'])) {
|
||||
$content_preview = cut_str(strip_tags($post_data['wr_content']), 150);
|
||||
}
|
||||
|
||||
// 3. 노출 상태 정보 처리
|
||||
$status_text = '정보 없음';
|
||||
$status_class = 'expired';
|
||||
$reservation_period = '';
|
||||
$is_hidden = !empty($post_data['wr_10']); // wr_10 필드가 1이면 '숨김' 상태
|
||||
$today = G5_TIME_YMD;
|
||||
|
||||
if ($is_hidden) {
|
||||
$status_text = '숨김';
|
||||
$status_class = 'hidden';
|
||||
} else if (isset($post_data['wr_9'])) {
|
||||
if ($post_data['wr_9'] == 'RESERVED') {
|
||||
$start_date = $post_data['wr_2'];
|
||||
$end_date = $post_data['wr_3'];
|
||||
$reservation_period = $start_date . ' ~ ' . $end_date;
|
||||
|
||||
if ($today >= $start_date && $today <= $end_date) {
|
||||
$status_text = '노출중';
|
||||
$status_class = 'active';
|
||||
} elseif ($today < $start_date) {
|
||||
$status_text = '예약됨';
|
||||
$status_class = 'scheduled';
|
||||
} else {
|
||||
$status_text = '기간만료';
|
||||
$status_class = 'expired';
|
||||
}
|
||||
} else { // IMMEDIATE
|
||||
$status_text = '즉시 노출';
|
||||
$status_class = 'active';
|
||||
}
|
||||
}
|
||||
// --- 데이터 준비 끝 ---
|
||||
?>
|
||||
<!-- 1. 목록형 아이템 (bo-list-item) -->
|
||||
<div class="bo-list-item">
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<div class="item-chk">
|
||||
<input type="checkbox" name="chk_wr_id[]"
|
||||
value="<?php echo $list[$i]['wr_id'] ?>"
|
||||
id="chk_wr_id_<?php echo $i ?>" class="selec_chk">
|
||||
<!-- 💡 [수정] 라벨 추가 -->
|
||||
<label for="chk_wr_id_<?php echo $i ?>"><span></span><b class="sound_only"><?php echo $list[$i]['subject'] ?></b></label>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<div class="item-main">
|
||||
<div class="item-subject">
|
||||
<a href="<?php echo $list[$i]['href'] ?>" class="item-title">
|
||||
<?php echo $list[$i]['subject'] ?>
|
||||
</a>
|
||||
<?php if ($list[$i]['comment_cnt']) { ?><span
|
||||
class="item-comment-count"><?php echo $list[$i]['wr_comment']; ?></span><?php } ?>
|
||||
</div>
|
||||
<div class="item-meta">
|
||||
<span class="item-author"><?php echo $list[$i]['name'] ?></span>
|
||||
<span class="item-date"><?php echo $list[$i]['datetime2'] ?></span>
|
||||
<span class="item-views">조회 <?php echo $list[$i]['wr_hit'] ?></span>
|
||||
<span class="item-status-wrapper">
|
||||
<span class="status-badge status-<?php echo $status_class; ?>"><?php echo $status_text; ?></span>
|
||||
<?php if ($reservation_period) { ?>
|
||||
<span class="reservation-info">(<?php echo $reservation_period; ?>)</span>
|
||||
<?php } ?>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
<?php if ($is_admin) { ?>
|
||||
<div class="item-actions">
|
||||
<div class="actions-group">
|
||||
<strong class="item-actions-label">노출 여부</strong>
|
||||
<button type="button"
|
||||
class="btn-status-toggle <?php echo $is_hidden ? 'status-off' : 'status-on'; ?>"
|
||||
data-wr-id="<?php echo $list[$i]['wr_id']; ?>"
|
||||
title="<?php echo $is_hidden ? '노출 상태로 변경' : '숨김 상태로 변경'; ?>">
|
||||
<i class="fa <?php echo $is_hidden ? 'fa-toggle-off' : 'fa-toggle-on'; ?>"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="action-group">
|
||||
<a href="<?php echo write_url($list[$i]['wr_id']); ?>"
|
||||
class="btn-action btn-modify">수정</a>
|
||||
<a href="<?php echo delete_url($list[$i]['href']); ?>"
|
||||
class="btn-action btn-delete" onclick="return delete_confirm(this);">삭제</a>
|
||||
</div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
<!-- 2. 카드형 아이템 (bo-card-item) -->
|
||||
<div class="bo-card-item">
|
||||
<a href="<?php echo $list[$i]['href'] ?>" class="card-link">
|
||||
<div class="card-thumbnail">
|
||||
<?php if ($thumbnail['src']) { ?>
|
||||
<img src="<?php echo $thumbnail['src']; ?>"
|
||||
alt="<?php echo $thumbnail['alt']; ?>">
|
||||
<?php } else { ?>
|
||||
<div class="card-content-preview">
|
||||
<p><?php echo $content_preview ? $content_preview : '내용이 없습니다.'; ?></p>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<div class="card-info">
|
||||
<div class="card-subject">
|
||||
<?php echo $list[$i]['subject'] ?>
|
||||
<?php if ($list[$i]['comment_cnt']) { ?><span
|
||||
class="item-comment-count"><?php echo $list[$i]['wr_comment']; ?></span><?php } ?>
|
||||
</div>
|
||||
<div class="card-status-wrapper">
|
||||
<span class="status-badge status-<?php echo $status_class; ?>"><?php echo $status_text; ?></span>
|
||||
<?php if ($reservation_period) { ?>
|
||||
<span class="reservation-info"><?php echo $reservation_period; ?></span>
|
||||
<?php } ?>
|
||||
</div>
|
||||
</div>
|
||||
</a>
|
||||
|
||||
<!-- ▼▼▼ [핵심 추가] 카드형 보기용 토글 스위치 ▼▼▼ -->
|
||||
<?php if ($is_admin) { ?>
|
||||
<div class="card-actions">
|
||||
<div class="action-group">
|
||||
<strong class="item-actions-label">노출 여부</strong>
|
||||
<button type="button"
|
||||
class="btn-status-toggle <?php echo $is_hidden ? 'status-off' : 'status-on'; ?>"
|
||||
data-wr-id="<?php echo $list[$i]['wr_id']; ?>"
|
||||
title="<?php echo $is_hidden ? '노출 상태로 변경' : '숨김 상태로 변경'; ?>">
|
||||
<i class="fa <?php echo $is_hidden ? 'fa-toggle-off' : 'fa-toggle-on'; ?>"></i>
|
||||
</button>
|
||||
</div>
|
||||
<div class="action-group">
|
||||
<a href="<?php echo write_url($list[$i]['wr_id']); ?>"
|
||||
class="btn-action btn-modify">수정</a>
|
||||
<a href="<?php echo delete_url($list[$i]['href']); ?>"
|
||||
class="btn-action btn-delete" onclick="return delete_confirm(this);">삭제</a>
|
||||
</div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<!-- ▲▲▲ 여기까지 ▲▲▲ -->
|
||||
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<div class="card-chk">
|
||||
<input type="checkbox" name="chk_wr_id_card[]"
|
||||
value="<?php echo $list[$i]['wr_id'] ?>"
|
||||
id="chk_wr_id_card_<?php echo $i ?>" class="selec_chk">
|
||||
<!-- 💡 [수정] 라벨 추가 -->
|
||||
<label for="chk_wr_id_card_<?php echo $i ?>"><span></span><b class="sound_only"><?php echo $list[$i]['subject'] ?></b></label>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
<?php } ?>
|
||||
|
||||
<?php if (count($list) == 0) {
|
||||
echo '<div class="empty-list">게시물이 없습니다.</div>';
|
||||
} ?>
|
||||
</div>
|
||||
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<div class="bo-list-footer">
|
||||
<button type="submit" name="btn_submit" value="선택삭제"
|
||||
onclick="document.pressed=this.value"
|
||||
class="btn-admin">선택삭제
|
||||
</button>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</form>
|
||||
|
||||
<div class="bo-list-bottom-wrapper">
|
||||
<!-- 💡 [수정] 더보기 버튼 추가 (카드형일 때만 표시) -->
|
||||
<?php if ($page < $total_page): ?>
|
||||
<div class="load-more-wrapper" style="display: <?php echo ($view_mode === 'card') ? 'block' : 'none'; ?>;">
|
||||
<button type="button" id="btn-load-more" class="btn btn-primary" data-page="<?php echo $page + 1; ?>">더보기</button>
|
||||
</div>
|
||||
<?php endif; ?>
|
||||
|
||||
<!-- 💡 [수정] 페이지네이션 (리스트형일 때만 표시) -->
|
||||
<div class="bo-pagination" style="display: <?php echo ($view_mode === 'list') ? 'flex' : 'none'; ?>;">
|
||||
<?php echo $write_pages; ?>
|
||||
</div>
|
||||
|
||||
<fieldset id="bo_sch" class="bo-search-box">
|
||||
<legend class="sound_only">게시물 검색</legend>
|
||||
<form name="fsearch" method="get">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<input type="hidden" name="sop" value="and">
|
||||
<select name="sfl" id="sfl"><?php echo get_board_sfl_select_options($sfl); ?></select>
|
||||
<input type="text" name="stx" value="<?php echo stripslashes($stx) ?>" required id="stx"
|
||||
class="sch-input" size="25" maxlength="20" placeholder="검색어를 입력해주세요">
|
||||
<button type="submit" class="sch-btn">검색</button>
|
||||
</form>
|
||||
</fieldset>
|
||||
</div>
|
||||
</div>
|
||||
</main>
|
||||
<!-- 3. 우측 사이드바 -->
|
||||
<?php if (isset($board_ad_config['list_ad']['right']) && $board_ad_config['list_ad']['right'] === true): ?>
|
||||
<aside class="layout-sidebar-right reveal-up">
|
||||
<div class="sidebar-inner">
|
||||
<!-- <h3 class="sidebar-title">광고 영역</h3>-->
|
||||
<!-- 💡 [수정] 우측 모듈 영역에 고유 ID 부여 -->
|
||||
<div class="flex_box flex_box_r" data-layout="main-right"></div>
|
||||
</div>
|
||||
</aside>
|
||||
<?php endif; ?>
|
||||
</div>
|
||||
</main>
|
||||
<?php if ($is_checkbox) { ?>
|
||||
<script>
|
||||
function all_checked(sw) {
|
||||
var f = document.fboardlist;
|
||||
for (var i = 0; i < f.length; i++) {
|
||||
if (f.elements[i].name == "chk_wr_id[]" || f.elements[i].name == "chk_wr_id_card[]")
|
||||
f.elements[i].checked = sw;
|
||||
}
|
||||
}
|
||||
|
||||
function fboardlist_submit(f) {
|
||||
var chk_count = 0;
|
||||
for (var i = 0; i < f.length; i++) {
|
||||
if ((f.elements[i].name == "chk_wr_id[]" || f.elements[i].name == "chk_wr_id_card[]") && f.elements[i].checked)
|
||||
chk_count++;
|
||||
}
|
||||
|
||||
if (!chk_count) {
|
||||
alert(document.pressed + "할 게시물을 하나 이상 선택하세요.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (document.pressed == "선택삭제") {
|
||||
if (!confirm("선택한 게시물을 정말 삭제하시겠습니까?\n\n한번 삭제한 자료는 복구할 수 없습니다."))
|
||||
return false;
|
||||
f.removeAttribute("target");
|
||||
f.action = "<?php echo G5_BBS_URL; ?>/board_list_update.php";
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function delete_confirm(link) {
|
||||
if (confirm("한번 삭제한 자료는 복구할 수 없습니다.\n\n정말 삭제하시겠습니까?")) {
|
||||
window.location.href = link.href;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
</script>
|
||||
<?php } ?>
|
||||
@@ -0,0 +1,197 @@
|
||||
<?php
|
||||
if (!defined("_GNUBOARD_")) exit; // 개별 페이지 접근 불가
|
||||
include_once(G5_LIB_PATH.'/thumbnail.lib.php');
|
||||
|
||||
// 이 스킨의 전용 스타일시트를 불러옵니다.
|
||||
$style_ver = file_exists($board_skin_path . '/style.css') ? filemtime($board_skin_path . '/style.css') : G5_CSS_VER;
|
||||
add_stylesheet('<link rel="stylesheet" href="' . $board_skin_url . '/style.css?ver=' . $style_ver . '">', 0);
|
||||
|
||||
// 노출 상태 계산
|
||||
$status_text = '정보 없음';
|
||||
$status_class = 'expired';
|
||||
$is_hidden = ($view['wr_10'] == '1');
|
||||
$today = G5_TIME_YMD;
|
||||
|
||||
if ($is_hidden) {
|
||||
$status_text = '숨김 (노출 안 함)';
|
||||
$status_class = 'hidden';
|
||||
} else if ($view['wr_9'] == 'RESERVED') {
|
||||
$start_date = $view['wr_2'];
|
||||
$end_date = $view['wr_3'];
|
||||
|
||||
if ($today >= $start_date && $today <= $end_date) {
|
||||
$status_text = '노출중 (예약)';
|
||||
$status_class = 'active';
|
||||
} elseif ($today < $start_date) {
|
||||
$status_text = '예약됨 (대기)';
|
||||
$status_class = 'scheduled';
|
||||
} else {
|
||||
$status_text = '기간만료';
|
||||
$status_class = 'expired';
|
||||
}
|
||||
} else {
|
||||
$status_text = '즉시 노출';
|
||||
$status_class = 'active';
|
||||
}
|
||||
?>
|
||||
|
||||
<div id="bo_v">
|
||||
<h2>제목</h2>
|
||||
<h3 id="bo_v_title">
|
||||
<?php if ($category_name) { ?><span class="item-category"><?php echo $view['ca_name']; ?></span><?php } ?>
|
||||
<?php echo cut_str(get_text($view['wr_subject']), 70); // 글제목 출력 ?>
|
||||
<span class="status-badge status-<?php echo $status_class; ?>" style="font-size: 14px; vertical-align: middle; margin-left: 10px;"><?php echo $status_text; ?></span>
|
||||
</h3>
|
||||
|
||||
<div id="bo_v_info">
|
||||
<fieldset class="write_div">
|
||||
<h3 class="frm_label" style="margin-bottom: 0;"><strong>노출 설정</strong></h3>
|
||||
<div class="option_group">
|
||||
<label>
|
||||
<input type="radio" name="wr_9_view" value="IMMEDIATE" <?php echo ($view['wr_9'] !== 'RESERVED') ? 'checked' : ''; ?> disabled>
|
||||
<span class="custom-radio"></span> 즉시 노출
|
||||
</label>
|
||||
<label>
|
||||
<input type="radio" name="wr_9_view" value="RESERVED" <?php echo ($view['wr_9'] === 'RESERVED') ? 'checked' : ''; ?> disabled>
|
||||
<span class="custom-radio"></span> 예약 노출
|
||||
</label>
|
||||
<!-- 💡 [수정] 숨김 설정 표시 -->
|
||||
<label style="margin-left: 20px;">
|
||||
<input type="checkbox" name="wr_10_view" value="1" <?php echo $is_hidden ? 'checked': '0' ; ?> disabled>
|
||||
<span class="custom-checkbox"></span> 숨김 (노출 안 함)
|
||||
</label>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<?php if ($view['wr_9'] === 'RESERVED') { ?>
|
||||
<div id="reservation_fields" class="write_div">
|
||||
<div class="date_picker_group">
|
||||
<div class="date_item">
|
||||
<label class="frm_label"><?php echo $board['bo_2_subj'] ?: '시작일' ?></label>
|
||||
<div class="frm_static"><?php echo $view['wr_2']; ?></div>
|
||||
</div>
|
||||
<span class="date_divider">~</span>
|
||||
<div class="date_item">
|
||||
<label class="frm_label"><?php echo $board['bo_3_subj'] ?: '종료일' ?></label>
|
||||
<div class="frm_static"><?php echo $view['wr_3']; ?></div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<!-- 💡 [추가] 링크 정보 표시 -->
|
||||
<?php if ($view['wr_link1']) { ?>
|
||||
<div class="write_div">
|
||||
<h3 class="frm_label"><strong>링크 #1</strong></h3>
|
||||
<div class="frm_static">
|
||||
<a href="<?php echo $view['wr_link1']; ?>" target="_blank"><?php echo $view['wr_link1']; ?></a>
|
||||
</div>
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
|
||||
<div id="bo_v_atc">
|
||||
<!-- 본문 내용 -->
|
||||
<div id="write_div">
|
||||
<h3 >상세 내용</h3>
|
||||
<div class="view_content">
|
||||
<?php echo conv_content($view['wr_content'], 1); ?>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<?php
|
||||
// 📌 [핵심] 첨부파일을 하단에 갤러리 형태로 표시합니다.
|
||||
if (isset($view['file']) && count($view['file']) > 0) {
|
||||
echo "<div id=\"bo_v_gallery\">\n";
|
||||
echo "<h3>첨부 파일</h3>";
|
||||
echo "<div class='gallery_grid'>";
|
||||
for ($i = 0; $i < $view['file']['count']; $i++) {
|
||||
$file = $view['file'][$i];
|
||||
if (empty($file['file'])) continue;
|
||||
|
||||
$file_ext = strtolower(pathinfo($file['file'], PATHINFO_EXTENSION));
|
||||
$is_image = in_array($file_ext, ['gif', 'jpg', 'jpeg', 'png', 'webp']);
|
||||
$file_url = $file['path'].'/'.$file['file'];
|
||||
|
||||
if ($is_image) {
|
||||
// 썸네일 생성
|
||||
$source_path = G5_DATA_PATH.'/file/'.$bo_table;
|
||||
$thumb = thumbnail($file['file'], $source_path, $source_path, 200, 200, false, true);
|
||||
$thumb_url = G5_DATA_URL.'/file/'.$bo_table.'/'.$thumb;
|
||||
|
||||
echo '<a href="'.$file_url.'" class="view_image_link">';
|
||||
echo '<img src="'.$thumb_url.'" alt="'.get_text($file['source']).'">';
|
||||
echo '</a>';
|
||||
} else {
|
||||
// 이미지가 아닌 파일은 다운로드 링크 제공
|
||||
echo '<div class="gallery_item_other">';
|
||||
echo '<a href="'.$file['href'].'" class="view_file_link" download>';
|
||||
echo '<i class="fa fa-download"></i> '.get_text($file['source']);
|
||||
echo '</a>';
|
||||
echo '</div>';
|
||||
}
|
||||
}
|
||||
echo "</div>"; // .gallery_grid
|
||||
echo "</div>\n"; // #bo_v_gallery
|
||||
}
|
||||
?>
|
||||
</div>
|
||||
|
||||
<div id="bo_v_bot">
|
||||
<div class="btn_area">
|
||||
<?php if ($update_href) { ?><a href="<?php echo $update_href ?>" class="btn_b02 btn">수정</a><?php } ?>
|
||||
<?php if ($delete_href) { ?><a href="<?php echo $delete_href ?>" onclick="del(this.href); return false;" class="btn_b02 btn">삭제</a><?php } ?>
|
||||
<?php if ($write_href) { ?><a href="<?php echo $write_href ?>" class="btn_b02 btn">글쓰기</a><?php } ?>
|
||||
<a href="<?php echo $list_href ?>" class="btn_b01 btn">목록</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 이미지 팝업(라이트박스) HTML과 스크립트 -->
|
||||
<div id="image_lightbox" class="image_lightbox">
|
||||
<span class="lightbox_close">×</span>
|
||||
<img class="lightbox_content" id="lightbox_image">
|
||||
</div>
|
||||
|
||||
<script>
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const lightbox = document.getElementById('image_lightbox');
|
||||
const lightboxImage = document.getElementById('lightbox_image');
|
||||
const imageLinks = document.querySelectorAll('.view_image_link');
|
||||
const closeBtn = document.querySelector('.lightbox_close');
|
||||
|
||||
if (!lightbox || !imageLinks.length) return;
|
||||
|
||||
imageLinks.forEach(link => {
|
||||
// 💡 [개선] 이미지 파일이 아닌 경우 라이트박스 이벤트를 적용하지 않습니다.
|
||||
if (!link.hasAttribute('download')) {
|
||||
link.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
lightboxImage.src = this.href;
|
||||
lightbox.style.display = 'flex';
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
function closeModal() {
|
||||
lightbox.style.display = 'none';
|
||||
lightboxImage.src = '';
|
||||
}
|
||||
|
||||
if(closeBtn) {
|
||||
closeBtn.addEventListener('click', closeModal);
|
||||
}
|
||||
|
||||
lightbox.addEventListener('click', function(e) {
|
||||
if (e.target === lightbox) {
|
||||
closeModal();
|
||||
}
|
||||
});
|
||||
|
||||
document.addEventListener('keydown', function(e) {
|
||||
if (e.key === 'Escape' && lightbox.style.display === 'flex') {
|
||||
closeModal();
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,355 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
?>
|
||||
|
||||
<script>
|
||||
// 글자수 제한
|
||||
var char_min = parseInt(<?php echo $comment_min ?>); // 최소
|
||||
var char_max = parseInt(<?php echo $comment_max ?>); // 최대
|
||||
</script>
|
||||
<button type="button" class="cmt_btn"><span class="total"><b>댓글</b> <?php echo $view['wr_comment']; ?></span><span class="cmt_more"></span></button>
|
||||
<!-- 댓글 시작 { -->
|
||||
<section id="bo_vc">
|
||||
<h2>댓글목록</h2>
|
||||
<?php
|
||||
$cmt_amt = count($list);
|
||||
for ($i=0; $i<$cmt_amt; $i++) {
|
||||
$comment_id = $list[$i]['wr_id'];
|
||||
$cmt_depth = strlen($list[$i]['wr_comment_reply']) * 50;
|
||||
$comment = $list[$i]['content'];
|
||||
/*
|
||||
if (strstr($list[$i]['wr_option'], "secret")) {
|
||||
$str = $str;
|
||||
}
|
||||
*/
|
||||
$comment = preg_replace("/\[\<a\s.*href\=\"(http|https|ftp|mms)\:\/\/([^[:space:]]+)\.(mp3|wma|wmv|asf|asx|mpg|mpeg)\".*\<\/a\>\]/i", "<script>doc_write(obj_movie('$1://$2.$3'));</script>", $comment);
|
||||
$cmt_sv = $cmt_amt - $i + 1; // 댓글 헤더 z-index 재설정 ie8 이하 사이드뷰 겹침 문제 해결
|
||||
$c_reply_href = $comment_common_url.'&c_id='.$comment_id.'&w=c#bo_vc_w';
|
||||
$c_edit_href = $comment_common_url.'&c_id='.$comment_id.'&w=cu#bo_vc_w';
|
||||
$is_comment_reply_edit = ($list[$i]['is_reply'] || $list[$i]['is_edit'] || $list[$i]['is_del']) ? 1 : 0;
|
||||
?>
|
||||
|
||||
<article id="c_<?php echo $comment_id ?>" <?php if ($cmt_depth) { ?>style="margin-left:<?php echo $cmt_depth ?>px;border-top-color:#e0e0e0"<?php } ?>>
|
||||
<div class="pf_img"><?php echo get_member_profile_img($list[$i]['mb_id']); ?></div>
|
||||
|
||||
<div class="cm_wrap">
|
||||
|
||||
<header style="z-index:<?php echo $cmt_sv; ?>">
|
||||
<h2><?php echo get_text($list[$i]['wr_name']); ?>님의 <?php if ($cmt_depth) { ?><span class="sound_only">댓글의</span><?php } ?> 댓글</h2>
|
||||
<?php echo $list[$i]['name'] ?>
|
||||
<?php if ($is_ip_view) { ?>
|
||||
<span class="sound_only">아이피</span>
|
||||
<span>(<?php echo $list[$i]['ip']; ?>)</span>
|
||||
<?php } ?>
|
||||
<span class="sound_only">작성일</span>
|
||||
<span class="bo_vc_hdinfo"><i class="fa fa-clock-o" aria-hidden="true"></i> <time datetime="<?php echo date('Y-m-d\TH:i:s+09:00', strtotime($list[$i]['datetime'])) ?>"><?php echo $list[$i]['datetime'] ?></time></span>
|
||||
<?php
|
||||
include(G5_SNS_PATH.'/view_comment_list.sns.skin.php');
|
||||
?>
|
||||
</header>
|
||||
|
||||
<!-- 댓글 출력 -->
|
||||
<div class="cmt_contents">
|
||||
<p>
|
||||
<?php if (strstr($list[$i]['wr_option'], "secret")) { ?><img src="<?php echo $board_skin_url; ?>/img/icon_secret.gif" alt="비밀글"><?php } ?>
|
||||
<?php echo $comment ?>
|
||||
</p>
|
||||
<?php if($is_comment_reply_edit) {
|
||||
if($w == 'cu') {
|
||||
$sql = " select wr_id, wr_content, mb_id from $write_table where wr_id = '$c_id' and wr_is_comment = '1' ";
|
||||
$cmt = sql_fetch($sql);
|
||||
if (isset($cmt)) {
|
||||
if (!($is_admin || ($member['mb_id'] == $cmt['mb_id'] && $cmt['mb_id']))) {
|
||||
$cmt['wr_content'] = '';
|
||||
}
|
||||
$c_wr_content = $cmt['wr_content'];
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<span id="edit_<?php echo $comment_id ?>" class="bo_vc_w"></span><!-- 수정 -->
|
||||
<span id="reply_<?php echo $comment_id ?>" class="bo_vc_w"></span><!-- 답변 -->
|
||||
|
||||
<input type="hidden" value="<?php echo strstr($list[$i]['wr_option'],"secret") ?>" id="secret_comment_<?php echo $comment_id ?>">
|
||||
<textarea id="save_comment_<?php echo $comment_id ?>" style="display:none"><?php echo get_text($list[$i]['content1'], 0) ?></textarea>
|
||||
</div>
|
||||
<?php if($is_comment_reply_edit) { ?>
|
||||
<div class="bo_vl_opt">
|
||||
<button type="button" class="btn_cm_opt btn_b01 btn"><i class="fa fa-ellipsis-v" aria-hidden="true"></i><span class="sound_only">댓글 옵션</span></button>
|
||||
<ul class="bo_vc_act">
|
||||
<?php if ($list[$i]['is_reply']) { ?><li><a href="<?php echo $c_reply_href; ?>" onclick="comment_box('<?php echo $comment_id ?>', 'c'); return false;">답변</a></li><?php } ?>
|
||||
<?php if ($list[$i]['is_edit']) { ?><li><a href="<?php echo $c_edit_href; ?>" onclick="comment_box('<?php echo $comment_id ?>', 'cu'); return false;">수정</a></li><?php } ?>
|
||||
<?php if ($list[$i]['is_del']) { ?><li><a href="<?php echo $list[$i]['del_link']; ?>" onclick="return comment_delete();">삭제</a></li><?php } ?>
|
||||
</ul>
|
||||
</div>
|
||||
<?php } ?>
|
||||
<script>
|
||||
$(function() {
|
||||
// 댓글 옵션창 열기
|
||||
$(".btn_cm_opt").on("click", function(){
|
||||
$(this).parent("div").children(".bo_vc_act").show();
|
||||
});
|
||||
|
||||
// 댓글 옵션창 닫기
|
||||
$(document).mouseup(function (e){
|
||||
var container = $(".bo_vc_act");
|
||||
if( container.has(e.target).length === 0)
|
||||
container.hide();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
</article>
|
||||
<?php } ?>
|
||||
<?php if ($i == 0) { //댓글이 없다면 ?><p id="bo_vc_empty">등록된 댓글이 없습니다.</p><?php } ?>
|
||||
|
||||
</section>
|
||||
<!-- } 댓글 끝 -->
|
||||
|
||||
<?php if ($is_comment_write) {
|
||||
if($w == '')
|
||||
$w = 'c';
|
||||
?>
|
||||
<!-- 댓글 쓰기 시작 { -->
|
||||
<aside id="bo_vc_w" class="bo_vc_w">
|
||||
<h2>댓글쓰기</h2>
|
||||
<form name="fviewcomment" id="fviewcomment" action="<?php echo $comment_action_url; ?>" onsubmit="return fviewcomment_submit(this);" method="post" autocomplete="off">
|
||||
<input type="hidden" name="w" value="<?php echo $w ?>" id="w">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="wr_id" value="<?php echo $wr_id ?>">
|
||||
<input type="hidden" name="comment_id" value="<?php echo $c_id ?>" id="comment_id">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<input type="hidden" name="sfl" value="<?php echo $sfl ?>">
|
||||
<input type="hidden" name="stx" value="<?php echo $stx ?>">
|
||||
<input type="hidden" name="spt" value="<?php echo $spt ?>">
|
||||
<input type="hidden" name="page" value="<?php echo $page ?>">
|
||||
<input type="hidden" name="is_good" value="">
|
||||
|
||||
<span class="sound_only">내용</span>
|
||||
<?php if ($comment_min || $comment_max) { ?><strong id="char_cnt"><span id="char_count"></span>글자</strong><?php } ?>
|
||||
<textarea id="wr_content" name="wr_content" maxlength="10000" required class="required" title="내용" placeholder="댓글내용을 입력해주세요"
|
||||
<?php if ($comment_min || $comment_max) { ?>onkeyup="check_byte('wr_content', 'char_count');"<?php } ?>><?php echo $c_wr_content; ?></textarea>
|
||||
<?php if ($comment_min || $comment_max) { ?><script> check_byte('wr_content', 'char_count'); </script><?php } ?>
|
||||
<script>
|
||||
$(document).on("keyup change", "textarea#wr_content[maxlength]", function() {
|
||||
var str = $(this).val()
|
||||
var mx = parseInt($(this).attr("maxlength"))
|
||||
if (str.length > mx) {
|
||||
$(this).val(str.substr(0, mx));
|
||||
return false;
|
||||
}
|
||||
});
|
||||
</script>
|
||||
<div class="bo_vc_w_wr">
|
||||
<div class="bo_vc_w_info">
|
||||
<?php if ($is_guest) { ?>
|
||||
<label for="wr_name" class="sound_only">이름<strong> 필수</strong></label>
|
||||
<input type="text" name="wr_name" value="<?php echo get_cookie("ck_sns_name"); ?>" id="wr_name" required class="frm_input required" size="25" placeholder="이름">
|
||||
<label for="wr_password" class="sound_only">비밀번호<strong> 필수</strong></label>
|
||||
<input type="password" name="wr_password" id="wr_password" required class="frm_input required" size="25" placeholder="비밀번호">
|
||||
<?php
|
||||
}
|
||||
?>
|
||||
<?php
|
||||
if($board['bo_use_sns'] && ($config['cf_facebook_appid'] || $config['cf_twitter_key'])) {
|
||||
?>
|
||||
<span class="sound_only">SNS 동시등록</span>
|
||||
<span id="bo_vc_send_sns"></span>
|
||||
<?php } ?>
|
||||
<?php if ($is_guest) { ?>
|
||||
<?php echo $captcha_html; ?>
|
||||
<?php } ?>
|
||||
</div>
|
||||
<div class="btn_confirm">
|
||||
<span class="secret_cm chk_box">
|
||||
<input type="checkbox" name="wr_secret" value="secret" id="wr_secret" class="selec_chk">
|
||||
<label for="wr_secret"><span></span>비밀글</label>
|
||||
</span>
|
||||
<button type="submit" id="btn_submit" class="btn_submit">댓글등록</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
</aside>
|
||||
|
||||
<script>
|
||||
var save_before = '';
|
||||
var save_html = document.getElementById('bo_vc_w').innerHTML;
|
||||
|
||||
function good_and_write()
|
||||
{
|
||||
var f = document.fviewcomment;
|
||||
if (fviewcomment_submit(f)) {
|
||||
f.is_good.value = 1;
|
||||
f.submit();
|
||||
} else {
|
||||
f.is_good.value = 0;
|
||||
}
|
||||
}
|
||||
|
||||
function fviewcomment_submit(f)
|
||||
{
|
||||
var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자
|
||||
|
||||
f.is_good.value = 0;
|
||||
|
||||
var subject = "";
|
||||
var content = "";
|
||||
$.ajax({
|
||||
url: g5_bbs_url+"/ajax.filter.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
"subject": "",
|
||||
"content": f.wr_content.value
|
||||
},
|
||||
dataType: "json",
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function(data, textStatus) {
|
||||
subject = data.subject;
|
||||
content = data.content;
|
||||
}
|
||||
});
|
||||
|
||||
if (content) {
|
||||
alert("내용에 금지단어('"+content+"')가 포함되어있습니다");
|
||||
f.wr_content.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
// 양쪽 공백 없애기
|
||||
var pattern = /(^\s*)|(\s*$)/g; // \s 공백 문자
|
||||
document.getElementById('wr_content').value = document.getElementById('wr_content').value.replace(pattern, "");
|
||||
if (char_min > 0 || char_max > 0)
|
||||
{
|
||||
check_byte('wr_content', 'char_count');
|
||||
var cnt = parseInt(document.getElementById('char_count').innerHTML);
|
||||
if (char_min > 0 && char_min > cnt)
|
||||
{
|
||||
alert("댓글은 "+char_min+"글자 이상 쓰셔야 합니다.");
|
||||
return false;
|
||||
} else if (char_max > 0 && char_max < cnt)
|
||||
{
|
||||
alert("댓글은 "+char_max+"글자 이하로 쓰셔야 합니다.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else if (!document.getElementById('wr_content').value)
|
||||
{
|
||||
alert("댓글을 입력하여 주십시오.");
|
||||
return false;
|
||||
}
|
||||
|
||||
if (typeof(f.wr_name) != 'undefined')
|
||||
{
|
||||
f.wr_name.value = f.wr_name.value.replace(pattern, "");
|
||||
if (f.wr_name.value == '')
|
||||
{
|
||||
alert('이름이 입력되지 않았습니다.');
|
||||
f.wr_name.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (typeof(f.wr_password) != 'undefined')
|
||||
{
|
||||
f.wr_password.value = f.wr_password.value.replace(pattern, "");
|
||||
if (f.wr_password.value == '')
|
||||
{
|
||||
alert('비밀번호가 입력되지 않았습니다.');
|
||||
f.wr_password.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
<?php if($is_guest) echo chk_captcha_js(); ?>
|
||||
|
||||
set_comment_token(f);
|
||||
|
||||
document.getElementById("btn_submit").disabled = "disabled";
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
function comment_box(comment_id, work)
|
||||
{
|
||||
var el_id,
|
||||
form_el = 'fviewcomment',
|
||||
respond = document.getElementById(form_el);
|
||||
|
||||
// 댓글 아이디가 넘어오면 답변, 수정
|
||||
if (comment_id)
|
||||
{
|
||||
if (work == 'c')
|
||||
el_id = 'reply_' + comment_id;
|
||||
else
|
||||
el_id = 'edit_' + comment_id;
|
||||
}
|
||||
else
|
||||
el_id = 'bo_vc_w';
|
||||
|
||||
if (save_before != el_id)
|
||||
{
|
||||
if (save_before)
|
||||
{
|
||||
document.getElementById(save_before).style.display = 'none';
|
||||
}
|
||||
|
||||
document.getElementById(el_id).style.display = '';
|
||||
document.getElementById(el_id).appendChild(respond);
|
||||
//입력값 초기화
|
||||
document.getElementById('wr_content').value = '';
|
||||
|
||||
// 댓글 수정
|
||||
if (work == 'cu')
|
||||
{
|
||||
document.getElementById('wr_content').value = document.getElementById('save_comment_' + comment_id).value;
|
||||
if (typeof char_count != 'undefined')
|
||||
check_byte('wr_content', 'char_count');
|
||||
if (document.getElementById('secret_comment_'+comment_id).value)
|
||||
document.getElementById('wr_secret').checked = true;
|
||||
else
|
||||
document.getElementById('wr_secret').checked = false;
|
||||
}
|
||||
|
||||
document.getElementById('comment_id').value = comment_id;
|
||||
document.getElementById('w').value = work;
|
||||
|
||||
if(save_before)
|
||||
$("#captcha_reload").trigger("click");
|
||||
|
||||
save_before = el_id;
|
||||
}
|
||||
}
|
||||
|
||||
function comment_delete()
|
||||
{
|
||||
return confirm("이 댓글을 삭제하시겠습니까?");
|
||||
}
|
||||
|
||||
comment_box('', 'c'); // 댓글 입력폼이 보이도록 처리하기위해서 추가 (root님)
|
||||
|
||||
<?php if($board['bo_use_sns'] && ($config['cf_facebook_appid'] || $config['cf_twitter_key'])) { ?>
|
||||
|
||||
$(function() {
|
||||
// sns 등록
|
||||
$("#bo_vc_send_sns").load(
|
||||
"<?php echo G5_SNS_URL; ?>/view_comment_write.sns.skin.php?bo_table=<?php echo $bo_table; ?>",
|
||||
function() {
|
||||
save_html = document.getElementById('bo_vc_w').innerHTML;
|
||||
}
|
||||
);
|
||||
});
|
||||
<?php } ?>
|
||||
</script>
|
||||
<?php } ?>
|
||||
<!-- } 댓글 쓰기 끝 -->
|
||||
<script>
|
||||
jQuery(function($) {
|
||||
//댓글열기
|
||||
$(".cmt_btn").click(function(e){
|
||||
e.preventDefault();
|
||||
$(this).toggleClass("cmt_btn_op");
|
||||
$("#bo_vc").toggle();
|
||||
});
|
||||
});
|
||||
</script>
|
||||
@@ -0,0 +1,231 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// jQuery UI의 CSS와 JS를 불러와 달력(Datepicker) 기능을 사용합니다.
|
||||
add_stylesheet('<link rel="stylesheet" href="//code.jquery.com/ui/1.13.2/themes/base/jquery-ui.css">', 0);
|
||||
add_javascript('<script src="https://code.jquery.com/ui/1.13.2/jquery-ui.js"></script>', 0);
|
||||
|
||||
// 이 스킨의 전용 스타일시트를 불러옵니다.
|
||||
$style_ver = file_exists($board_skin_path . '/style.css') ? filemtime($board_skin_path . '/style.css') : G5_CSS_VER;
|
||||
add_stylesheet('<link rel="stylesheet" href="' . $board_skin_url . '/style.css?ver=' . $style_ver . '">', 0);
|
||||
|
||||
// 이 스킨의 전용 자바스크립트 파일을 불러옵니다.
|
||||
$write_js_path = $board_skin_path . '/js/write.js';
|
||||
$write_js_ver = file_exists($write_js_path) ? filemtime($write_js_path) : G5_JS_VER;
|
||||
add_javascript('<script src="' . $board_skin_url . '/js/write.js?ver=' . $write_js_ver . '"></script>', 0);
|
||||
|
||||
// 💡 [추가] 메인 노출 관련 로직
|
||||
$main_view_max = null;
|
||||
|
||||
// 게시판 여분필드(bo_1 ~ bo_10) 중 제목이 'main_view_max'인 필드의 값을 가져옵니다.
|
||||
for ($i = 1; $i <= 10; $i++) {
|
||||
if (isset($board['bo_'.$i.'_subj']) && $board['bo_'.$i.'_subj'] == 'main_view_max') {
|
||||
$main_view_max = $board['bo_'.$i];
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
$main_display_count = 0;
|
||||
$main_display_titles = '';
|
||||
|
||||
// main_view_max가 숫자이거나, 비어있거나, null일 때만 유효한 것으로 간주
|
||||
$is_main_view_max_valid = ($main_view_max === null || $main_view_max === '' || is_numeric($main_view_max));
|
||||
|
||||
if ($is_main_view_max_valid && is_numeric($main_view_max) && $main_view_max !== '') {
|
||||
// wr_10 != '1' 인 글 (숨김 처리되지 않은 글)을 카운트
|
||||
$sql = "SELECT wr_subject FROM {$g5['write_prefix']}{$bo_table} WHERE (wr_10 != '1' OR wr_10 IS NULL)";
|
||||
if ($w == 'u') {
|
||||
// 수정 모드에서는 현재 글을 제외하고 카운트
|
||||
$sql .= " AND wr_id != '{$wr_id}'";
|
||||
}
|
||||
$result = sql_query($sql);
|
||||
$titles = array();
|
||||
while ($row = sql_fetch_array($result)) {
|
||||
$titles[] = $row['wr_subject'];
|
||||
}
|
||||
$main_display_count = count($titles);
|
||||
$main_display_titles = implode(', ', $titles);
|
||||
}
|
||||
?>
|
||||
|
||||
<div id="bo_w">
|
||||
<form name="fwrite" id="fwrite" action="<?php echo $action_url ?>" onsubmit="return fwrite_submit(this);"
|
||||
method="post" enctype="multipart/form-data" autocomplete="off">
|
||||
<input type="hidden" name="uid" value="<?php echo get_uniqid(); ?>">
|
||||
<input type="hidden" name="w" value="<?php echo $w ?>">
|
||||
<input type="hidden" name="bo_table" value="<?php echo $bo_table ?>">
|
||||
<input type="hidden" name="wr_id" value="<?php echo $wr_id ?>">
|
||||
<input type="hidden" name="sca" value="<?php echo $sca ?>">
|
||||
<input type="hidden" name="sfl" value="<?php echo $sfl ?>">
|
||||
<input type="hidden" name="stx" value="<?php echo $stx ?>">
|
||||
<input type="hidden" name="spt" value="<?php echo $spt ?>">
|
||||
<input type="hidden" name="sst" value="<?php echo $sst ?>">
|
||||
<input type="hidden" name="sod" value="<?php echo $sod ?>">
|
||||
<input type="hidden" name="page" value="<?php echo $page ?>">
|
||||
<?php
|
||||
// 스마트에디터를 사용하기 위해 html1로 고정
|
||||
$option_hidden = '<input type="hidden" name="html" value="1">';
|
||||
echo $option_hidden;
|
||||
?>
|
||||
|
||||
<div class="write_div">
|
||||
<label for="wr_subject" class="frm_label">제목</label>
|
||||
<input type="text" name="wr_subject" value="<?php echo $subject ?>" id="wr_subject" required
|
||||
class="frm_input" size="50" maxlength="255" placeholder="메인 화면에 노출될 제목을 입력하세요.">
|
||||
</div>
|
||||
|
||||
<div class="write_div">
|
||||
<label class="frm_label">노출 설정</label>
|
||||
<div class="option_group">
|
||||
<label>
|
||||
<input type="radio" name="wr_9"
|
||||
value="IMMEDIATE" <?php if ($w == '' || $write['wr_9'] != 'RESERVED') echo 'checked'; ?>>
|
||||
<span class="custom-radio"></span> 즉시 노출
|
||||
</label>
|
||||
<label>
|
||||
<input type="radio" name="wr_9"
|
||||
value="RESERVED" <?php if ($w == 'u' && $write['wr_9'] == 'RESERVED') echo 'checked'; ?>>
|
||||
<span class="custom-radio"></span> 예약 노출
|
||||
</label>
|
||||
<!-- 💡 [수정] 숨김 설정을 체크박스로 변경 -->
|
||||
<label style="margin-left: 20px;">
|
||||
<input type="hidden" name="wr_10" value="0">
|
||||
<input type="checkbox" name="wr_10" id="wr_10" value="1" <?php echo ($write['wr_10'] == '1') ? 'checked' : ''; ?>>
|
||||
<span class="custom-checkbox"></span> 숨김 (노출 안 함)
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="reservation_fields" class="write_div"
|
||||
style="display: <?php echo ($w == 'u' && $write['wr_9'] == 'RESERVED') ? 'block' : 'none'; ?>;">
|
||||
<div class="date_picker_group">
|
||||
<div class="date_item">
|
||||
<label for="wr_2" class="frm_label"><?php echo $board['bo_2_subj'] ?: '시작일' ?></label>
|
||||
<input type="text" name="wr_2" value="<?php echo $wr_2 ?>" id="wr_2" class="frm_input datepicker"
|
||||
maxlength="10" placeholder="YYYY-MM-DD">
|
||||
</div>
|
||||
<span class="date_divider">~</span>
|
||||
<div class="date_item">
|
||||
<label for="wr_3" class="frm_label"><?php echo $board['bo_3_subj'] ?: '종료일' ?></label>
|
||||
<input type="text" name="wr_3" value="<?php echo $wr_3 ?>" id="wr_3" class="frm_input datepicker"
|
||||
maxlength="10" placeholder="YYYY-MM-DD">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- 💡 [추가] 링크 입력 필드 -->
|
||||
<div class="write_div">
|
||||
<label for="wr_link1" class="frm_label">링크 #1</label>
|
||||
<input type="text" name="wr_link1" value="<?php echo $write['wr_link1']; ?>" id="wr_link1" class="frm_input" size="50" placeholder="http://...">
|
||||
<span class="text-muted font-12">링크를 입력하면 '자세히 보기' 클릭 시 해당 URL로 이동합니다. (입력하지 않으면 이미지 팝업)</span>
|
||||
</div>
|
||||
|
||||
<div class="write_div">
|
||||
<label for="wr_1" class="form-label">요약 내용</label>
|
||||
<textarea name="wr_1" id="wr_1" class="form-control" rows="3" placeholder="목록에 표시될 뉴스의 핵심 요약 내용을 입력하세요."><?php echo $write['wr_1']; ?></textarea>
|
||||
</div>
|
||||
|
||||
<div class="write_div">
|
||||
<label for="wr_content" class="frm_label">상세 내용</label>
|
||||
<?php echo $editor_html; // 스마트에디터 출력 ?>
|
||||
</div>
|
||||
|
||||
<?php // 💡 [Accessibility Improvement] Use <fieldset> and <legend> for the file upload group. ?>
|
||||
<fieldset class="write_div">
|
||||
<legend class="frm_label">이미지 또는 동영상 (최대 <?php echo $board['bo_upload_count']; ?>개, 각 10MB 이하)</legend>
|
||||
<div class="file_upload_grid">
|
||||
<?php
|
||||
for ($i = 0; $i < $board['bo_upload_count']; $i++) {
|
||||
$file_label_id = 'bf_file_' . $i;
|
||||
$is_existing_file = ($w == 'u' && isset($file[$i]['file']) && $file[$i]['file']);
|
||||
$preview_class = '';
|
||||
$preview_style = '';
|
||||
$preview_text_style = '';
|
||||
|
||||
if ($is_existing_file) {
|
||||
$file_url = $file[$i]['path'] . '/' . $file[$i]['file'];
|
||||
$file_ext = strtolower(pathinfo($file_url, PATHINFO_EXTENSION));
|
||||
|
||||
if (in_array($file_ext, ['mp4', 'mov', 'webm'])) {
|
||||
$preview_class = 'is-video';
|
||||
} else {
|
||||
$preview_style = "background-image: url('{$file_url}');";
|
||||
}
|
||||
$preview_text_style = 'display:none;';
|
||||
}
|
||||
?>
|
||||
<div class="file_preview_wrapper">
|
||||
<div class="file_preview <?php echo $preview_class; ?>" id="preview_<?php echo $i; ?>"
|
||||
style="<?php echo $preview_style; ?>">
|
||||
<span class="preview_text" style="<?php echo $preview_text_style; ?>">클릭하여 파일 업로드</span>
|
||||
</div>
|
||||
|
||||
<?php if ($is_existing_file) { ?>
|
||||
<div class="preview_info">
|
||||
<span class="current_file_name" title="<?php echo $file[$i]['source'] ?>">
|
||||
<?php echo $file[$i]['source'] ?>
|
||||
</span>
|
||||
<span class="file_del">
|
||||
<input type="checkbox" id="bf_file_del_<?php echo $i ?>"
|
||||
name="bf_file_del[<?php echo $i ?>]" value="1">
|
||||
<label for="bf_file_del_<?php echo $i ?>">삭제</label>
|
||||
</span>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
<input type="file" name="bf_file[]" id="<?php echo $file_label_id; ?>" style="display:none;"
|
||||
accept="image/*, video/mp4, video/mov, video/webm">
|
||||
</div>
|
||||
<?php } ?>
|
||||
</div>
|
||||
</fieldset>
|
||||
|
||||
<div class="btn_confirm">
|
||||
<a href="<?php echo get_pretty_url($bo_table); ?>" class="btn btn_cancel">취소</a>
|
||||
<input type="submit" value="작성완료" id="btn_submit" accesskey="s" class="btn btn_submit">
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
function fwrite_submit(f) {
|
||||
<?php echo $editor_js; // 에디터 사용시 자바스크립트 부분 ?>
|
||||
|
||||
// 💡 [추가] 메인 노출 개수 제한 검사
|
||||
const isHiddenCheckbox = document.getElementById('wr_10');
|
||||
// 숨김 체크박스가 체크되어 있지 않으면 '노출' 상태임
|
||||
if (isHiddenCheckbox && !isHiddenCheckbox.checked) {
|
||||
const mainViewMax = <?php echo json_encode($main_view_max); ?>;
|
||||
const isMainViewMaxValid = <?php echo json_encode($is_main_view_max_valid); ?>;
|
||||
|
||||
if (!isMainViewMaxValid) {
|
||||
alert('게시판의 "main_view_max" 여분 필드 설정값이 숫자가 아닙니다. 관리자에게 문의하여 설정을 수정해주세요.');
|
||||
return false;
|
||||
}
|
||||
|
||||
if (mainViewMax !== null && mainViewMax !== '' && !isNaN(parseInt(mainViewMax))) {
|
||||
const mainViewMaxInt = parseInt(mainViewMax, 10);
|
||||
const mainDisplayCount = <?php echo (int)$main_display_count; ?>;
|
||||
|
||||
if (mainDisplayCount >= mainViewMaxInt) {
|
||||
const mainDisplayTitles = <?php echo json_encode($main_display_titles); ?>;
|
||||
alert('메인 노출 최대 개수(' + mainViewMaxInt + '개)를 초과하여 더 이상 설정할 수 없습니다.\n\n현재 노출 중인 글:\n' + mainDisplayTitles + '\n\n"숨김 (노출 안 함)"을 체크하거나 기존 글을 숨김 처리해주세요.');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 예약 노출 선택 시 날짜 입력 유효성 검사
|
||||
if (document.querySelector('input[name="wr_9"]:checked').value === 'RESERVED') {
|
||||
if (f.wr_2.value === '' || f.wr_3.value === '') {
|
||||
alert('예약 시작일과 종료일을 모두 선택해주세요.');
|
||||
return false;
|
||||
}
|
||||
if (f.wr_2.value > f.wr_3.value) {
|
||||
alert('예약 종료일은 시작일보다 빠를 수 없습니다.');
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
</script>
|
||||
@@ -0,0 +1,68 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
/*
|
||||
|--------------------------------------------------------------------------
|
||||
| 💡 [핵심] 메인 비주얼 게시판 전용 백엔드 유효성 검사
|
||||
|--------------------------------------------------------------------------
|
||||
| 이 파일은 그누보드의 write_update.php 파일이 실행되기 직전에 자동으로
|
||||
| 실행되어, 우리가 원하는 추가 규칙을 검사할 수 있게 해줍니다.
|
||||
*/
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// 규칙 1: 하루 최대 등록 개수 제한 (새 글 작성 시에만 적용)
|
||||
// -----------------------------------------------------------------------------
|
||||
if ($w == '') { // $w가 ''이면 '새 글 작성'을 의미합니다.
|
||||
$daily_limit = 3; // 하루 최대 등록 개수를 3으로 설정합니다.
|
||||
|
||||
// 오늘 날짜(00:00:00 ~ 23:59:59)를 기준으로 작성된 게시물 수를 센다.
|
||||
$sql = " SELECT count(*) as cnt FROM {$write_table}
|
||||
WHERE wr_is_comment = 0
|
||||
AND wr_datetime BETWEEN '".G5_TIME_YMD." 00:00:00' AND '".G5_TIME_YMD." 23:59:59' ";
|
||||
$row = sql_fetch($sql);
|
||||
|
||||
// 만약 오늘 작성된 글이 3개 이상이면, 오류 메시지를 띄우고 중단합니다.
|
||||
if ($row['cnt'] >= $daily_limit) {
|
||||
alert("하루에 등록 가능한 비주얼은 최대 {$daily_limit}개입니다. 내일 다시 시도해주세요.");
|
||||
}
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------------------------
|
||||
// 규칙 2: 예약 기간 중복 검사
|
||||
// -----------------------------------------------------------------------------
|
||||
// '예약 노출'을 선택했을 때만 검사합니다.
|
||||
if (isset($_POST['wr_9']) && $_POST['wr_9'] == 'RESERVED') {
|
||||
|
||||
// 폼에서 전송된 시작일과 종료일을 가져옵니다.
|
||||
$start_date = isset($_POST['wr_2']) ? trim($_POST['wr_2']) : '';
|
||||
$end_date = isset($_POST['wr_3']) ? trim($_POST['wr_3']) : '';
|
||||
|
||||
// 두 날짜가 모두 입력되었을 때만 검사를 실행합니다.
|
||||
if ($start_date && $end_date) {
|
||||
|
||||
// '예약 노출'로 설정된 다른 게시물 중, 날짜가 겹치는 것이 있는지 찾습니다.
|
||||
// (신규 시작일 <= 기존 종료일) AND (신규 종료일 >= 기존 시작일) -> 이 조건이 참이면 겹치는 것입니다.
|
||||
$sql = " SELECT wr_id, wr_subject FROM {$write_table}
|
||||
WHERE wr_is_comment = 0
|
||||
AND wr_9 = 'RESERVED'
|
||||
AND (
|
||||
'{$start_date}' <= wr_3 AND '{$end_date}' >= wr_2
|
||||
) ";
|
||||
|
||||
// 글 수정($w == 'u') 시에는, 현재 수정 중인 자기 자신은 검사 대상에서 제외합니다.
|
||||
if ($w == 'u' && $wr_id) {
|
||||
$sql .= " AND wr_id != '{$wr_id}' ";
|
||||
}
|
||||
|
||||
$sql .= " LIMIT 1 "; // 겹치는 것이 하나라도 있으면 바로 찾기를 중단합니다.
|
||||
$row = sql_fetch($sql);
|
||||
|
||||
// 만약 겹치는 게시물이 발견되면, 오류 메시지를 띄우고 중단합니다.
|
||||
if (isset($row['wr_id']) && $row['wr_id']) {
|
||||
$colliding_subject = get_text(cut_str($row['wr_subject'], 30));
|
||||
alert("선택하신 예약 기간에 이미 다른 비주얼이 등록되어 있습니다.\\n\\n[중복된 게시물: {$colliding_subject}]\\n\\n날짜를 다시 확인해주세요.");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
?>
|
||||
@@ -0,0 +1,41 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
/**
|
||||
* newproduct :: config.php
|
||||
* '신제품' 게시판 전용 설정 파일
|
||||
*/
|
||||
|
||||
$board_config = array(
|
||||
'list' => array(
|
||||
'default_view_mode' => 'card',
|
||||
),
|
||||
'write' => array(
|
||||
'use_summary' => true,
|
||||
'summary_label' => '제품 요약',
|
||||
'summary_placeholder' => '목록에 표시될 신제품의 핵심 요약 내용을 입력하세요.',
|
||||
|
||||
'file_labels' => array(
|
||||
1 => '썸네일 이미지 (필수)',
|
||||
2 => '본문 이미지 #1',
|
||||
3 => '본문 이미지 #2',
|
||||
4 => '본문 이미지 #3',
|
||||
5 => '본문 이미지 #4',
|
||||
),
|
||||
'file_texts' => array(
|
||||
1 => '목록 페이지의 카드형 뷰에 표시될 대표 이미지입니다.',
|
||||
),
|
||||
),
|
||||
'view' => array(
|
||||
'core_type' => 'coverage', // 💡 [핵심] 'coverage' 타입의 뷰 코어를 사용
|
||||
),
|
||||
);
|
||||
|
||||
// $board['bo_upload_count'] = 5; // 썸네일 1 + 본문 이미지 4
|
||||
$board['bo_use_dhtml_editor'] = 1;
|
||||
// newproduct 스킨 광고 영역 설정
|
||||
$newproduct_skin_config = [
|
||||
'left_ad' => false, // 좌측 광고 사용 안함
|
||||
'right_ad' => true, // 우측 광고 사용 안함
|
||||
];
|
||||
?>
|
||||
@@ -0,0 +1,223 @@
|
||||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* newproduct :: style.css
|
||||
* 💡 [수정] 고유 ID 선택자를 #newproduct-board로 변경합니다.
|
||||
*/
|
||||
|
||||
/* ==========================================================================
|
||||
Board Common Styles
|
||||
========================================================================== */
|
||||
#newproduct-board .board-container,
|
||||
#newproduct-board .board-write-container,
|
||||
#newproduct-board .board-view-container {
|
||||
background-color: #fff;
|
||||
padding: 40px;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 6px 30px rgba(0, 0, 0, 0.08);
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* 이하 모든 #coverage-board 선택자를 #newproduct-board로 변경 */
|
||||
|
||||
#newproduct-board .board-header {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
gap: 20px;
|
||||
padding-bottom: 25px;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
#newproduct-board .board-total { font-size: 1.2rem; color: #555; font-weight: 500; text-align: left; }
|
||||
#newproduct-board .board-total .text-primary { color: #0056b3; font-weight: 700; }
|
||||
#newproduct-board .board-controls { display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap; }
|
||||
#newproduct-board .view-mode-switcher { display: flex; border: 1px solid #ddd; border-radius: 8px; overflow: hidden; }
|
||||
#newproduct-board .btn-view-mode { background: #fff; border: none; padding: 10px 15px; cursor: pointer; color: #888; font-size: 1.2rem; line-height: 1; transition: all 0.2s ease; }
|
||||
#newproduct-board .btn-view-mode.active { background: #0056b3; color: #fff; }
|
||||
#newproduct-board .btn-view-mode:hover:not(.active) { background: #f0f0f0; color: #333; }
|
||||
#newproduct-board .board-search { flex-grow: 1; }
|
||||
#newproduct-board .board-search .input-group { display: flex; align-items: center; width: 100%; max-width: 400px; margin-left: auto; }
|
||||
#newproduct-board .board-search select,
|
||||
#newproduct-board .board-search input[type="text"] { border: 1px solid #ddd; padding: 0 15px; height: 42px; font-size: 1rem; background: #fff; border-radius: 8px; transition: border-color 0.2s ease; }
|
||||
#newproduct-board .board-search select { border-radius: 8px 0 0 8px; border-right: none; }
|
||||
#newproduct-board .board-search input[type="text"]:focus { border-color: #0056b3; outline: none; box-shadow: 0 0 0 2px rgba(0, 86, 179, 0.2); }
|
||||
#newproduct-board .board-search .btn { border-radius: 0 8px 8px 0; height: 42px; padding: 0 20px; background: #0056b3; color: #fff; border: none; transition: background-color 0.2s ease; }
|
||||
#newproduct-board .board-search .btn:hover { background-color: #003d82; }
|
||||
|
||||
#newproduct-board .list-separator { text-align: center; padding: 40px 20px; margin: 40px 0; border-top: 1px solid #e0e0e0; border-bottom: 1px solid #e0e0e0; background-color: #f9f9f9; }
|
||||
#newproduct-board .list-separator p { font-size: 1.1rem; color: #666; font-weight: 500; }
|
||||
|
||||
/* 💡 [최종 수정] 뷰 전환이 올바르게 동작하도록 선택자를 .board-list-wrapper 로 수정합니다. */
|
||||
#newproduct-board .board-list-wrapper[data-view-mode="card"] .card-list-view { display: block; }
|
||||
#newproduct-board .board-list-wrapper[data-view-mode="list"] .list-view { display: block; }
|
||||
#newproduct-board .board-list-wrapper .card-list-view,
|
||||
#newproduct-board .board-list-wrapper .list-view { display: none; }
|
||||
|
||||
#newproduct-board .empty-list { padding: 100px 20px; text-align: center; color: #888; font-size: 1.6rem; font-weight: 600; }
|
||||
|
||||
/* 💡 [수정] 카드형 리스트 가로 4개 고정 */
|
||||
#newproduct-board .card-list {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, 1fr); /* 4개 고정 */
|
||||
gap: 30px;
|
||||
}
|
||||
|
||||
#newproduct-board .card-item { background: #fff; border-radius: 12px; overflow: hidden; box-shadow: 0 8px 25px rgba(0,0,0,0.08); transition: transform 0.3s ease, box-shadow 0.3s ease; border: none; }
|
||||
#newproduct-board .card-item:hover { transform: translateY(-7px); box-shadow: 0 12px 35px rgba(0,0,0,0.15); }
|
||||
#newproduct-board .card-link { display: block; text-decoration: none; color: inherit; }
|
||||
#newproduct-board .card-thumbnail { position: relative; width: 100%; padding-top: 70%; background-color: #f0f0f0; }
|
||||
#newproduct-board .card-thumbnail img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; }
|
||||
#newproduct-board .badge-pdf, #newproduct-board .badge-link, #newproduct-board .badge-featured { position: absolute; top: 15px; right: 15px; padding: 8px 15px; border-radius: 20px; font-size: 0.85rem; font-weight: 700; color: #fff; text-transform: uppercase; letter-spacing: 0.5px; }
|
||||
#newproduct-board .badge-pdf { background-color: #e74c3c; }
|
||||
#newproduct-board .badge-link { background-color: #3498db; }
|
||||
#newproduct-board .badge-featured { background-color: #9b59b6; }
|
||||
#newproduct-board .card-content { padding: 25px; }
|
||||
#newproduct-board .card-category { display: inline-block; font-size: 0.9rem; font-weight: 700; color: #0056b3; margin-bottom: 10px; }
|
||||
#newproduct-board .card-title { font-size: 1.5rem; font-weight: 800; margin: 0 0 15px 0; line-height: 1.4; min-height: 2.8em; color: #222; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
|
||||
#newproduct-board .card-summary { font-size: 1rem; color: #666; line-height: 1.7; height: 5.1em; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; }
|
||||
#newproduct-board .card-meta { margin-top: 20px; padding-top: 15px; border-top: 1px solid #f0f0f0; font-size: 0.9rem; color: #888; }
|
||||
#newproduct-board .card-item.is-featured { border: 2px solid #9b59b6; box-shadow: 0 8px 25px rgba(155, 89, 182, 0.2); }
|
||||
#newproduct-board .list-group { border-top: 2px solid #333; }
|
||||
#newproduct-board .list-group-header, #newproduct-board .list-group-item { display: flex; align-items: center; padding: 18px 10px; border-bottom: 1px solid #f0f0f0; }
|
||||
#newproduct-board .list-group-header { font-weight: 700; background-color: #f9f9f9; font-size: 1.05rem; }
|
||||
#newproduct-board .list-group-item:hover { background-color: #f5f5f5; }
|
||||
#newproduct-board .list-cell { padding: 0 10px; text-align: center; color: #555; }
|
||||
#newproduct-board .list-cell.num { flex: 0 0 80px; }
|
||||
#newproduct-board .list-cell.title { flex: 1; text-align: left; }
|
||||
#newproduct-board .list-cell.title a { color: #333; text-decoration: none; font-weight: 500; }
|
||||
#newproduct-board .list-group-item.is-featured { background-color: #fdf8ff; }
|
||||
#newproduct-board .badge-featured-list { color: #9b59b6; margin-right: 8px; }
|
||||
|
||||
#newproduct-board .view-header { padding-bottom: 20px; border-bottom: 1px solid #e0e0e0; margin-bottom: 30px; }
|
||||
#newproduct-board .view-header h1 { font-size: 2.5rem; font-weight: 800; margin-bottom: 15px; line-height: 1.3; }
|
||||
#newproduct-board .view-meta { display: flex; flex-wrap: wrap; gap: 10px 20px; color: #888; font-size: 0.95rem; }
|
||||
#newproduct-board .view-meta .meta-item i { margin-right: 5px; color: #aaa; }
|
||||
#newproduct-board .view-content { padding: 30px 0; }
|
||||
#newproduct-board .view-body-images { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 25px; margin-top: 40px; padding-top: 30px; border-top: 1px solid #eee; justify-items: center; }
|
||||
#newproduct-board .view-body-images .body-image-item { max-width: 100%; text-align: center; background-color: #fcfcfc; border-radius: 10px; overflow: hidden; box-shadow: 0 5px 20px rgba(0,0,0,0.08); transition: transform 0.2s ease; }
|
||||
#newproduct-board .view-body-images .body-image-item:hover { transform: translateY(-5px); }
|
||||
#newproduct-board .view-body-images .body-image-item img { max-width: 100%; height: auto; display: block; margin: 0 auto; object-fit: contain; border-bottom: 1px solid #eee; }
|
||||
#newproduct-board .view-body-images .body-image-item figcaption { padding: 15px; font-size: 0.9rem; color: #666; line-height: 1.5; }
|
||||
|
||||
/* ==========================================================================
|
||||
View Detail Content Styles (본문 스타일)
|
||||
========================================================================== */
|
||||
#newproduct-board .view-detail-content {
|
||||
margin-top: 40px;
|
||||
font-size: 1.1rem;
|
||||
line-height: 1.8; /* 전체적인 줄 높이 */
|
||||
color: #333;
|
||||
white-space: normal; /* 💡 [수정] 소스 코드 줄바꿈이 공백으로 표시되지 않도록 normal로 변경 */
|
||||
word-break: break-word;
|
||||
}
|
||||
#newproduct-board .view-detail-content * {
|
||||
max-width: 100%;
|
||||
word-break: break-word;
|
||||
/* 💡 [추가] 에디터가 삽입하는 인라인 스타일의 line-height를 재정의 */
|
||||
line-height: inherit !important;
|
||||
}
|
||||
#newproduct-board .view-detail-content p {
|
||||
margin-top: 0;
|
||||
margin-bottom: 16px; /* 💡 [수정] 문단 간격 (news4j와 유사하게) */
|
||||
line-height: 1.7; /* 💡 [수정] 문단 내 줄 높이 */
|
||||
}
|
||||
/* 💡 [추가] 빈 p 태그의 높이를 없애 불필요한 공백 제거 */
|
||||
#newproduct-board .view-detail-content p:empty {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
line-height: 0;
|
||||
height: 0;
|
||||
}
|
||||
#newproduct-board .view-detail-content p:empty::before {
|
||||
content: "";
|
||||
display: block;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
#newproduct-board .view-detail-content h1,
|
||||
#newproduct-board .view-detail-content h2,
|
||||
#newproduct-board .view-detail-content h3,
|
||||
#newproduct-board .view-detail-content h4,
|
||||
#newproduct-board .view-detail-content h5,
|
||||
#newproduct-board .view-detail-content h6 {
|
||||
margin-top: 30px; /* 💡 [수정] 제목 위 간격 */
|
||||
margin-bottom: 15px; /* 💡 [수정] 제목 아래 간격 */
|
||||
font-weight: 700;
|
||||
line-height: 1.4;
|
||||
color: #222;
|
||||
}
|
||||
#newproduct-board .view-detail-content h1 { font-size: 2.2rem; } /* 💡 [수정] news4j와 유사하게 조정 */
|
||||
#newproduct-board .view-detail-content h2 { font-size: 2rem; }
|
||||
#newproduct-board .view-detail-content h3 { font-size: 1.7rem; }
|
||||
#newproduct-board .view-detail-content h4 { font-size: 1.4rem; }
|
||||
|
||||
/* 💡 [추가] 블록 요소 바로 뒤에 오는 불필요한 br 태그 숨김 (에디터가 삽입하는 경우) */
|
||||
#newproduct-board .view-detail-content p + br,
|
||||
#newproduct-board .view-detail-content h1 + br,
|
||||
#newproduct-board .view-detail-content h2 + br,
|
||||
#newproduct-board .view-detail-content h3 + br,
|
||||
#newproduct-board .view-detail-content div + br {
|
||||
display: none;
|
||||
}
|
||||
|
||||
#newproduct-board .view-detail-content ul, #newproduct-board .view-detail-content ol { margin-left: 20px; margin-bottom: 1.5em; }
|
||||
#newproduct-board .view-detail-content ul li { list-style: disc; margin-bottom: 0.5em; }
|
||||
#newproduct-board .view-detail-content ol li { list-style: decimal; margin-bottom: 0.5em; }
|
||||
#newproduct-board .view-detail-content blockquote { border-left: 4px solid #0056b3; padding: 10px 20px; margin: 1.5em 0; background-color: #f8f8f8; color: #555; font-style: italic; }
|
||||
|
||||
#newproduct-board .download-box { margin-top: 30px; padding-top: 30px; border-top: 1px solid #eee; }
|
||||
#newproduct-board .download-box h3 { font-size: 1.3rem; font-weight: 700; margin-bottom: 15px; color: #333; }
|
||||
#newproduct-board .download-list { list-style: none; padding: 0; margin: 0; border: 1px solid #e0e0e0; border-radius: 8px; overflow: hidden; }
|
||||
#newproduct-board .download-list li { border-bottom: 1px solid #e0e0e0; }
|
||||
#newproduct-board .download-list li:last-child { border-bottom: none; }
|
||||
#newproduct-board .download-list a { display: flex; align-items: center; padding: 15px 20px; text-decoration: none; color: #555; transition: background-color 0.2s ease; }
|
||||
#newproduct-board .download-list a:hover { background-color: #f9f9f9; }
|
||||
#newproduct-board .download-list .file-icon { font-size: 1.5rem; color: #888; margin-right: 15px; width: 25px; text-align: center; }
|
||||
#newproduct-board .download-list .fa-file-pdf-o { color: #e74c3c; }
|
||||
#newproduct-board .download-list .fa-file-image-o { color: #3498db; }
|
||||
#newproduct-board .download-list .fa-file-archive-o { color: #f39c12; }
|
||||
#newproduct-board .download-list .file-name { flex-grow: 1; font-weight: 500; }
|
||||
#newproduct-board .download-list .file-size { font-size: 0.9rem; color: #888; }
|
||||
#newproduct-board .view-footer { margin-top: 40px; padding-top: 30px; border-top: 1px solid #e0e0e0; display: flex; justify-content: space-between; align-items: center; }
|
||||
#newproduct-board .btn-group-left, #newproduct-board .btn-group-right { display: flex; gap: 10px; }
|
||||
|
||||
#newproduct-board .board-footer { margin-top: 40px; display: flex; justify-content: space-between; align-items: center; }
|
||||
#newproduct-board .pagination-wrapper, #newproduct-board .load-more-wrapper { flex-grow: 1; text-align: center; }
|
||||
#newproduct-board .board-footer .btn-group { display: flex; gap: 10px; margin-left: auto; }
|
||||
#newproduct-board .board-footer .btn, #newproduct-board .view-footer .btn { display: inline-flex; align-items: center; justify-content: center; text-decoration: none; border-radius: 8px; font-size: 1.1rem; text-align: center; font-weight: 700; transition: all 0.2s ease; border: none; }
|
||||
#newproduct-board .board-footer .btn:hover, #newproduct-board .view-footer .btn:hover { transform: translateY(-2px); box-shadow: 0 4px 10px rgba(0,0,0,0.1); }
|
||||
#newproduct-board .board-footer .btn-secondary, #newproduct-board .view-footer .btn-secondary { background-color: #6c757d; color: #fff; }
|
||||
#newproduct-board .board-footer .btn-primary, #newproduct-board .view-footer .btn-primary { background-color: #0056b3; color: #fff; }
|
||||
|
||||
#newproduct-board .write-form-group { margin-bottom: 25px; }
|
||||
#newproduct-board .form-divider { margin: 40px 0; border: 0; border-top: 1px solid #e0e0e0; }
|
||||
#newproduct-board .admin-options-group { background-color: #fcfcfc; padding: 25px; border-radius: 8px; margin-top: 30px; border: 1px solid #e0e0e0; }
|
||||
#newproduct-board .form-section-title { font-size: 1.3rem; font-weight: 700; margin: 0 0 20px 0; color: #333; }
|
||||
#newproduct-board .form-check-label { display: flex; align-items: center; gap: 10px; font-size: 1.1rem; cursor: pointer; }
|
||||
#newproduct-board .form-check-label input[type="checkbox"] { -webkit-appearance: checkbox; -moz-appearance: checkbox; appearance: checkbox; width: 18px; height: 18px; opacity: 1; position: static; }
|
||||
#newproduct-board .write-form-footer { margin-top: 40px; display: flex; justify-content: flex-end; gap: 10px; }
|
||||
#newproduct-board .write-form-footer .btn { text-decoration: none; border-radius: 8px; font-size: 1.1rem; font-weight: 700; border: none; transition: all 0.2s ease; }
|
||||
#newproduct-board .write-form-footer .btn:hover { transform: translateY(-2px); box-shadow: 0 4px 10px rgba(0,0,0,0.1); }
|
||||
#newproduct-board .write-form-footer .btn-secondary { background-color: #6c757d; color: #fff; }
|
||||
#newproduct-board .write-form-footer .btn-primary { background-color: #0056b3; color: #fff; }
|
||||
|
||||
#newproduct-board .three-column-layout { display: flex; gap: 30px; }
|
||||
#newproduct-board .layout-sidebar-left, #newproduct-board .layout-sidebar-right { flex: 0 0 240px; position: sticky; top: 100px; align-self: flex-start; }
|
||||
#newproduct-board .layout-main-content { flex: 1; min-width: 0; }
|
||||
/* PC 전용 - 모바일 반응형 제거 */
|
||||
/* PC 전용 - 모바일 반응형 제거 */
|
||||
|
||||
/* 💡 [추가] 태블릿 등 중간 화면에서는 3열, 2열로 조정 */
|
||||
/* PC 전용 - 모바일 반응형 제거 */
|
||||
/* PC 전용 - 모바일 반응형 제거 */
|
||||
|
||||
.sub-page-container {
|
||||
padding-top: 0px; !important;
|
||||
padding-bottom: 0px; !important;
|
||||
/*background: #fff;*/
|
||||
/*min-height: 500px;*/
|
||||
}
|
||||
.layout-main-content {
|
||||
padding-top: 0px; !important;
|
||||
}
|
||||
@@ -0,0 +1,183 @@
|
||||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* newproduct :: style.css
|
||||
* 💡 [수정] 고유 ID 선택자를 #newproduct-board로 변경합니다.
|
||||
*/
|
||||
|
||||
/* ==========================================================================
|
||||
Board Common Styles
|
||||
========================================================================== */
|
||||
#newproduct-board .board-container,
|
||||
#newproduct-board .board-write-container,
|
||||
#newproduct-board .board-view-container {
|
||||
background-color: #fff;
|
||||
padding: 40px;
|
||||
border-radius: 12px;
|
||||
box-shadow: 0 6px 30px rgba(0, 0, 0, 0.08);
|
||||
border: none;
|
||||
}
|
||||
|
||||
/* 이하 모든 #coverage-board 선택자를 #newproduct-board로 변경 */
|
||||
|
||||
#newproduct-board .board-header {
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
align-items: stretch;
|
||||
gap: 20px;
|
||||
padding-bottom: 25px;
|
||||
border-bottom: 1px solid #e0e0e0;
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
#newproduct-board .board-total { font-size: 1.2rem; color: #555; font-weight: 500; text-align: left; }
|
||||
#newproduct-board .board-total .text-primary { color: #0056b3; font-weight: 700; }
|
||||
#newproduct-board .board-controls { display: flex; align-items: center; justify-content: space-between; gap: 20px; flex-wrap: wrap; }
|
||||
#newproduct-board .view-mode-switcher { display: flex; border: 1px solid #ddd; border-radius: 8px; overflow: hidden; }
|
||||
#newproduct-board .btn-view-mode { background: #fff; border: none; padding: 10px 15px; cursor: pointer; color: #888; font-size: 1.2rem; line-height: 1; transition: all 0.2s ease; }
|
||||
#newproduct-board .btn-view-mode.active { background: #0056b3; color: #fff; }
|
||||
#newproduct-board .btn-view-mode:hover:not(.active) { background: #f0f0f0; color: #333; }
|
||||
#newproduct-board .board-search { flex-grow: 1; }
|
||||
#newproduct-board .board-search .input-group { display: flex; align-items: center; width: 100%; max-width: 400px; margin-left: auto; }
|
||||
#newproduct-board .board-search select,
|
||||
#newproduct-board .board-search input[type="text"] { border: 1px solid #ddd; padding: 0 15px; height: 42px; font-size: 1rem; background: #fff; border-radius: 8px; transition: border-color 0.2s ease; }
|
||||
#newproduct-board .board-search select { border-radius: 8px 0 0 8px; border-right: none; }
|
||||
#newproduct-board .board-search input[type="text"]:focus { border-color: #0056b3; outline: none; box-shadow: 0 0 0 2px rgba(0, 86, 179, 0.2); }
|
||||
#newproduct-board .board-search .btn { border-radius: 0 8px 8px 0; height: 42px; padding: 0 20px; background: #0056b3; color: #fff; border: none; transition: background-color 0.2s ease; }
|
||||
#newproduct-board .board-search .btn:hover { background-color: #003d82; }
|
||||
|
||||
#newproduct-board .list-separator { text-align: center; padding: 40px 20px; margin: 40px 0; border-top: 1px solid #e0e0e0; border-bottom: 1px solid #e0e0e0; background-color: #f9f9f9; }
|
||||
#newproduct-board .list-separator p { font-size: 1.1rem; color: #666; font-weight: 500; }
|
||||
|
||||
/* 💡 [최종 수정] 뷰 전환이 올바르게 동작하도록 선택자를 .board-list-wrapper 로 수정합니다. */
|
||||
#newproduct-board .board-list-wrapper[data-view-mode="card"] .card-list-view { display: block; }
|
||||
#newproduct-board .board-list-wrapper[data-view-mode="list"] .list-view { display: block; }
|
||||
#newproduct-board .board-list-wrapper .card-list-view,
|
||||
#newproduct-board .board-list-wrapper .list-view { display: none; }
|
||||
|
||||
#newproduct-board .empty-list { padding: 100px 20px; text-align: center; color: #888; font-size: 1.6rem; font-weight: 600; }
|
||||
|
||||
/* 💡 [수정] 카드형 리스트 가로 4개 고정 */
|
||||
#newproduct-board .card-list {
|
||||
display: grid;
|
||||
grid-template-columns: repeat(4, 1fr); /* 4개 고정 */
|
||||
gap: 30px;
|
||||
}
|
||||
|
||||
#newproduct-board .card-item { background: #fff; border-radius: 12px; overflow: hidden; box-shadow: 0 8px 25px rgba(0,0,0,0.08); transition: transform 0.3s ease, box-shadow 0.3s ease; border: none; }
|
||||
#newproduct-board .card-item:hover { transform: translateY(-7px); box-shadow: 0 12px 35px rgba(0,0,0,0.15); }
|
||||
#newproduct-board .card-link { display: block; text-decoration: none; color: inherit; }
|
||||
#newproduct-board .card-thumbnail { position: relative; width: 100%; padding-top: 70%; background-color: #f0f0f0; }
|
||||
#newproduct-board .card-thumbnail img { position: absolute; top: 0; left: 0; width: 100%; height: 100%; object-fit: cover; }
|
||||
#newproduct-board .badge-pdf, #newproduct-board .badge-link, #newproduct-board .badge-featured { position: absolute; top: 15px; right: 15px; padding: 8px 15px; border-radius: 20px; font-size: 0.85rem; font-weight: 700; color: #fff; text-transform: uppercase; letter-spacing: 0.5px; }
|
||||
#newproduct-board .badge-pdf { background-color: #e74c3c; }
|
||||
#newproduct-board .badge-link { background-color: #3498db; }
|
||||
#newproduct-board .badge-featured { background-color: #9b59b6; }
|
||||
#newproduct-board .card-content { padding: 25px; }
|
||||
#newproduct-board .card-category { display: inline-block; font-size: 0.9rem; font-weight: 700; color: #0056b3; margin-bottom: 10px; }
|
||||
#newproduct-board .card-title { font-size: 1.5rem; font-weight: 800; margin: 0 0 15px 0; line-height: 1.4; min-height: 2.8em; color: #222; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
|
||||
#newproduct-board .card-summary { font-size: 1rem; color: #666; line-height: 1.7; height: 5.1em; overflow: hidden; text-overflow: ellipsis; display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; }
|
||||
#newproduct-board .card-meta { margin-top: 20px; padding-top: 15px; border-top: 1px solid #f0f0f0; font-size: 0.9rem; color: #888; }
|
||||
#newproduct-board .card-item.is-featured { border: 2px solid #9b59b6; box-shadow: 0 8px 25px rgba(155, 89, 182, 0.2); }
|
||||
#newproduct-board .list-group { border-top: 2px solid #333; }
|
||||
#newproduct-board .list-group-header, #newproduct-board .list-group-item { display: flex; align-items: center; padding: 18px 10px; border-bottom: 1px solid #f0f0f0; }
|
||||
#newproduct-board .list-group-header { font-weight: 700; background-color: #f9f9f9; font-size: 1.05rem; }
|
||||
#newproduct-board .list-group-item:hover { background-color: #f5f5f5; }
|
||||
#newproduct-board .list-cell { padding: 0 10px; text-align: center; color: #555; }
|
||||
#newproduct-board .list-cell.num { flex: 0 0 80px; }
|
||||
#newproduct-board .list-cell.title { flex: 1; text-align: left; }
|
||||
#newproduct-board .list-cell.title a { color: #333; text-decoration: none; font-weight: 500; }
|
||||
#newproduct-board .list-group-item.is-featured { background-color: #fdf8ff; }
|
||||
#newproduct-board .badge-featured-list { color: #9b59b6; margin-right: 8px; }
|
||||
|
||||
#newproduct-board .view-header { padding-bottom: 20px; border-bottom: 1px solid #e0e0e0; margin-bottom: 30px; }
|
||||
#newproduct-board .view-header h1 { font-size: 2.5rem; font-weight: 800; margin-bottom: 15px; line-height: 1.3; }
|
||||
#newproduct-board .view-meta { display: flex; flex-wrap: wrap; gap: 10px 20px; color: #888; font-size: 0.95rem; }
|
||||
#newproduct-board .view-meta .meta-item i { margin-right: 5px; color: #aaa; }
|
||||
#newproduct-board .view-content { padding: 30px 0; }
|
||||
#newproduct-board .view-body-images { display: grid; grid-template-columns: repeat(auto-fit, minmax(280px, 1fr)); gap: 25px; margin-top: 40px; padding-top: 30px; border-top: 1px solid #eee; justify-items: center; }
|
||||
#newproduct-board .view-body-images .body-image-item { max-width: 100%; text-align: center; background-color: #fcfcfc; border-radius: 10px; overflow: hidden; box-shadow: 0 5px 20px rgba(0,0,0,0.08); transition: transform 0.2s ease; }
|
||||
#newproduct-board .view-body-images .body-image-item:hover { transform: translateY(-5px); }
|
||||
#newproduct-board .view-body-images .body-image-item img { max-width: 100%; height: auto; display: block; margin: 0 auto; object-fit: contain; border-bottom: 1px solid #eee; }
|
||||
#newproduct-board .view-body-images .body-image-item figcaption { padding: 15px; font-size: 0.9rem; color: #666; line-height: 1.5; }
|
||||
#newproduct-board .view-detail-content { margin-top: 40px; font-size: 1.1rem; line-height: 1.8; color: #333; }
|
||||
#newproduct-board .view-detail-content p { margin-bottom: 1.5em; }
|
||||
#newproduct-board .view-detail-content h1, #newproduct-board .view-detail-content h2, #newproduct-board .view-detail-content h3, #newproduct-board .view-detail-content h4, #newproduct-board .view-detail-content h5, #newproduct-board .view-detail-content h6 { margin-top: 2em; margin-bottom: 0.8em; font-weight: 700; line-height: 1.3; color: #222; }
|
||||
#newproduct-board .view-detail-content h2 { font-size: 2rem; }
|
||||
#newproduct-board .view-detail-content h3 { font-size: 1.7rem; }
|
||||
#newproduct-board .view-detail-content h4 { font-size: 1.4rem; }
|
||||
#newproduct-board .view-detail-content ul, #newproduct-board .view-detail-content ol { margin-left: 20px; margin-bottom: 1.5em; }
|
||||
#newproduct-board .view-detail-content ul li { list-style: disc; margin-bottom: 0.5em; }
|
||||
#newproduct-board .view-detail-content ol li { list-style: decimal; margin-bottom: 0.5em; }
|
||||
#newproduct-board .view-detail-content blockquote { border-left: 4px solid #0056b3; padding: 10px 20px; margin: 1.5em 0; background-color: #f8f8f8; color: #555; font-style: italic; }
|
||||
#newproduct-board .download-box { margin-top: 30px; padding-top: 30px; border-top: 1px solid #eee; }
|
||||
#newproduct-board .download-box h3 { font-size: 1.3rem; font-weight: 700; margin-bottom: 15px; color: #333; }
|
||||
#newproduct-board .download-list { list-style: none; padding: 0; margin: 0; border: 1px solid #e0e0e0; border-radius: 8px; overflow: hidden; }
|
||||
#newproduct-board .download-list li { border-bottom: 1px solid #e0e0e0; }
|
||||
#newproduct-board .download-list li:last-child { border-bottom: none; }
|
||||
#newproduct-board .download-list a { display: flex; align-items: center; padding: 15px 20px; text-decoration: none; color: #555; transition: background-color 0.2s ease; }
|
||||
#newproduct-board .download-list a:hover { background-color: #f9f9f9; }
|
||||
#newproduct-board .download-list .file-icon { font-size: 1.5rem; color: #888; margin-right: 15px; width: 25px; text-align: center; }
|
||||
#newproduct-board .download-list .fa-file-pdf-o { color: #e74c3c; }
|
||||
#newproduct-board .download-list .fa-file-image-o { color: #3498db; }
|
||||
#newproduct-board .download-list .fa-file-archive-o { color: #f39c12; }
|
||||
#newproduct-board .download-list .file-name { flex-grow: 1; font-weight: 500; }
|
||||
#newproduct-board .download-list .file-size { font-size: 0.9rem; color: #888; }
|
||||
#newproduct-board .view-footer { margin-top: 40px; padding-top: 30px; border-top: 1px solid #e0e0e0; display: flex; justify-content: space-between; align-items: center; }
|
||||
#newproduct-board .btn-group-left, #newproduct-board .btn-group-right { display: flex; gap: 10px; }
|
||||
|
||||
#newproduct-board .board-footer { margin-top: 40px; display: flex; justify-content: space-between; align-items: center; }
|
||||
#newproduct-board .pagination-wrapper, #newproduct-board .load-more-wrapper { flex-grow: 1; text-align: center; }
|
||||
#newproduct-board .board-footer .btn-group { display: flex; gap: 10px; margin-left: auto; }
|
||||
#newproduct-board .board-footer .btn, #newproduct-board .view-footer .btn { display: inline-flex; align-items: center; justify-content: center; text-decoration: none; border-radius: 8px; font-size: 1.1rem; text-align: center; font-weight: 700; transition: all 0.2s ease; border: none; }
|
||||
#newproduct-board .board-footer .btn:hover, #newproduct-board .view-footer .btn:hover { transform: translateY(-2px); box-shadow: 0 4px 10px rgba(0,0,0,0.1); }
|
||||
#newproduct-board .board-footer .btn-secondary, #newproduct-board .view-footer .btn-secondary { background-color: #6c757d; color: #fff; }
|
||||
#newproduct-board .board-footer .btn-primary, #newproduct-board .view-footer .btn-primary { background-color: #0056b3; color: #fff; }
|
||||
|
||||
#newproduct-board .write-form-group { margin-bottom: 25px; }
|
||||
#newproduct-board .form-divider { margin: 40px 0; border: 0; border-top: 1px solid #e0e0e0; }
|
||||
#newproduct-board .admin-options-group { background-color: #fcfcfc; padding: 25px; border-radius: 8px; margin-top: 30px; border: 1px solid #e0e0e0; }
|
||||
#newproduct-board .form-section-title { font-size: 1.3rem; font-weight: 700; margin: 0 0 20px 0; color: #333; }
|
||||
#newproduct-board .form-check-label { display: flex; align-items: center; gap: 10px; font-size: 1.1rem; cursor: pointer; }
|
||||
#newproduct-board .form-check-label input[type="checkbox"] { -webkit-appearance: checkbox; -moz-appearance: checkbox; appearance: checkbox; width: 18px; height: 18px; opacity: 1; position: static; }
|
||||
#newproduct-board .write-form-footer { margin-top: 40px; display: flex; justify-content: flex-end; gap: 10px; }
|
||||
#newproduct-board .write-form-footer .btn { text-decoration: none; border-radius: 8px; font-size: 1.1rem; font-weight: 700; border: none; transition: all 0.2s ease; }
|
||||
#newproduct-board .write-form-footer .btn:hover { transform: translateY(-2px); box-shadow: 0 4px 10px rgba(0,0,0,0.1); }
|
||||
#newproduct-board .write-form-footer .btn-secondary { background-color: #6c757d; color: #fff; }
|
||||
#newproduct-board .write-form-footer .btn-primary { background-color: #0056b3; color: #fff; }
|
||||
|
||||
#newproduct-board .three-column-layout { display: flex; gap: 30px; }
|
||||
#newproduct-board .layout-sidebar-left, #newproduct-board .layout-sidebar-right { flex: 0 0 240px; position: sticky; top: 100px; }
|
||||
#newproduct-board .layout-main-content { flex: 1; min-width: 0; }
|
||||
@media (max-width: 1024px) {
|
||||
#newproduct-board .three-column-layout { flex-direction: column; }
|
||||
#newproduct-board .layout-sidebar-left, #newproduct-board .layout-sidebar-right { position: static; flex-basis: 100%; }
|
||||
}
|
||||
@media (max-width: 768px) {
|
||||
#newproduct-board .board-container, #newproduct-board .board-write-container, #newproduct-board .board-view-container { padding: 15px; }
|
||||
#newproduct-board .board-controls { flex-direction: column-reverse; align-items: stretch; gap: 15px; }
|
||||
/* 💡 [수정] 모바일에서는 1열로 */
|
||||
#newproduct-board .card-list { grid-template-columns: 1fr; }
|
||||
#newproduct-board .list-cell.category, #newproduct-board .list-cell.name, #newproduct-board .list-cell.hit { display: none; }
|
||||
#newproduct-board .view-footer { flex-direction: column; gap: 15px; }
|
||||
#newproduct-board .btn-group-left, #newproduct-board .btn-group-right { justify-content: center; width: 100%; }
|
||||
#newproduct-board .view-header h1 { font-size: 1.8rem; }
|
||||
#newproduct-board .view-meta { flex-direction: column; gap: 5px; }
|
||||
}
|
||||
|
||||
/* 💡 [추가] 태블릿 등 중간 화면에서는 3열, 2열로 조정 */
|
||||
@media (min-width: 769px) and (max-width: 1200px) {
|
||||
#newproduct-board .card-list { grid-template-columns: repeat(3, 1fr); }
|
||||
}
|
||||
@media (min-width: 576px) and (max-width: 768px) {
|
||||
#newproduct-board .card-list { grid-template-columns: repeat(2, 1fr); }
|
||||
}
|
||||
|
||||
.sub-page-container {
|
||||
padding-top: 0px; !important;
|
||||
padding-bottom: 0px; !important;
|
||||
/*background: #fff;*/
|
||||
/*min-height: 500px;*/
|
||||
}
|
||||
.layout-main-content {
|
||||
padding-top: 0px; !important;
|
||||
}
|
||||