This commit is contained in:
shim
2023-04-17 11:06:08 +09:00
parent d0b393aa97
commit 76264e09ad
4686 changed files with 552713 additions and 0 deletions

View File

@@ -0,0 +1,21 @@
The RBL License
Copyright (c) 2011-2018 Redblock, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@@ -0,0 +1,17 @@
# 부트스트랩 4 댓글 기본형 테마
안녕하세요. 감사합니다.
## 주요기능
- Automated website building technology
- Powerful content managing system
- Multiple virtual site system
- Unlimited extension
- Multi Screen implementations
## 서버 요구사항
- PHP version 5.2.x
- MYSQL version 3.23.x or greater (recommend MYSQL >= 5.x)
- GD Library
- ICONV

View File

@@ -0,0 +1,235 @@
@charset "utf-8";
.hidden {
display: none !important;
}
[data-role="comment-item"],
[data-role="comment-item"] .markdown-body {
font-size: 13px;
word-break: break-all;
}
[data-role="oneline-item"],
[data-role="oneline-item"].markdown-body {
font-size: 12px
}
[data-role="oneline-item"] blockquote {
margin-bottom: 0;
padding: 0 1em;
color: #6a737d;
border-left: 0.25em solid #dfe2e5;
}
.js-like.active {
color: #007bff !important
}
.js-like.active::after {
content: ' 취소'
}
.js-new.active::before {
padding-left: 3px;
content: 'new';
color: red;
font-size: 80%
}
.rb-comments-write .card textarea {
height: 34px;
background-color: #fafbfc;
-webkit-transition: height 1s;
/* For Safari 3.1 to 6.0 */
transition: height 1s;
transition-delay: 1s;
-webkit-transition-delay: 1s;
}
.rb-comments-write .card.active textarea {
min-height: 70px !important;
background-color: #fff;
}
.rb-comments-write .card .card-footer {
display: none
}
.rb-comments-write .card.active .card-footer {
display: block
}
.media[data-role="comment-item"].border-bottom {
border-bottom: 1px dotted #dee2e6 !important;
}
.list-group-item[data-role="oneline-item"] {
border-style: dotted;
}
.form-control {
background-color: #fafbfc;
}
.list-group:empty {
margin-top: 0 !important;
margin-bottom: 0 !important
}
.flex-column-reverse .list-group-item:last-child {
margin-bottom: -1px;
}
/* notify */
#commentting-container,
[data-role=comment-container],
[data-role=moreBtn-container] {
position: relative;
}
#comment-notify {
visibility: hidden;
width: 100%;
position: absolute;
z-index: 1;
bottom: 30px;
top: auto
}
#comment-notify .comment-notify-msg {
width: 80%;
margin: 0 auto;
background-color: #333;
color: #fff;
text-align: center;
border-radius: 5px;
padding: 12px 6px;
font-size: 14px;
}
#comment-notify.active {
visibility: visible;
-webkit-animation: fadein 0.5s, fadeout 0.5s 1.1s;
animation: fadein 0.5s, fadeout 0.5s 1.1s;
}
@-webkit-keyframes fadein {
from {
bottom: 0;
opacity: 0;
}
to {
bottom: 30px;
opacity: 1;
}
}
@keyframes fadein {
from {
bottom: 0;
opacity: 0;
}
to {
bottom: 30px;
opacity: 1;
}
}
@-webkit-keyframes fadeout {
from {
bottom: 30px;
opacity: 1;
}
to {
bottom: 0;
opacity: 0;
}
}
@keyframes fadeout {
from {
bottom: 30px;
opacity: 1;
}
to {
bottom: 0;
opacity: 0;
}
}
/* notify */
/* attach trigger */
#commentting-container .comment-attach {
position: relative;
display: block;
height: 100%;
width: 100%;
padding: 8px 0;
cursor: pointer;
}
#commentting-container span.comment-attach input[type='file'] {
cursor: pointer;
position: absolute;
display: block;
top: 0;
right: -9px;
margin: 0;
padding: 0;
opacity: 0;
font-size: 0;
width: 180%;
height: 100%;
}
/* emoticon */
#commentting-container .emoticon-wrapper {
display: none;
overflow: hidden;
padding: 15px 5px;
}
#commentting-container .emoticon-wrapper ul {
padding: 0;
margin: 0;
width: 100%;
}
#commentting-container .emoticon-wrapper li {
display: inline-block;
float: left;
text-align: center;
width: 12.5%;
cursor: pointer;
}
#commentting-container .emoticon-wrapper li img {
width: 25px;
height: 25px;
border-radius: 100%;
}
[data-role|=oneline-input-wrapper],
[data-role|=comment-modify-btn-wrapper],
[data-role|=oneline-modify-btn-wrapper] {
display: none;
}
/* loader */
#comment-spinner-wrap {
position: absolute;
left: 50%;
}
.comment-top5p {
top: 5%;
}
.comment-bottom5p {
bottom: 5%;
}

View File

@@ -0,0 +1,4 @@
<div data-role="{$entry_type}-modify-btn-wrapper-{$uid}" class="my-2">
<button class="btn btn-light btn-sm" data-toggle="cancel-edit" data-type="{$entry_type}" data-uid="{$uid}">수정취소</button>
<button class="btn btn-primary btn-sm" data-kcact="edit" data-type="{$entry_type}" data-uid="{$uid}" data-parent="{$parent}">수정완료</button>
</div>

View File

@@ -0,0 +1,12 @@
<div class="btn-group">
<button class="btn btn-link btn-sm dropdown-toggle" type="button" data-toggle="dropdown" data-role="showHide-menu" data-type="{$entry_type}">
</button>
<div class="dropdown-menu dropdown-menu-right" data-role="menu-container-{$entry_type}">
<a href="#" class="dropdown-item" data-toggle="edit" data-type="{$entry_type}" data-uid="{$uid}">
<i class="fa fa-edit"></i> 수정
</a>
<a href="#" class="dropdown-item" data-kcact="delete" data-type="{$entry_type}" data-uid="{$uid}" data-parent="{$entry_parent}">
<i class="fa fa-trash-o"></i> 삭제
</a>
</div>
</div>

View File

@@ -0,0 +1,116 @@
<!-- 공통 사항 data-* ="*" 과 {$*} 는 수정 금지 -->
<header class="d-flex justify-content-start" data-role="header-container">
{$comment_header} <!-- 댓글 header : comment_header.html -->
</header>
<div class="rb-comments-write" data-role="commentWrite-container"> <!-- 댓글 입렵부 : comment_write.html -->
{$comment_write}
</div>
<main data-role="comment-main">
<nav class="d-flex">
<div class="btn-group btn-group-sm btn-group-toggle" data-toggle="buttons" role="group">
<label class="btn btn-light active" data-kcact="changeSort" data-sort="uid" data-orderby="asc">
<input type="radio" name="changeSort" id="sort_uid_asc" autocomplete="off" checked> 최신순
</label>
<label class="btn btn-light" data-kcact="changeSort" data-sort="uid" data-orderby="desc">
<input type="radio" name="changeSort" id="sort_uid_desc" autocomplete="off"> 과거순
</label>
<label class="btn btn-light" data-kcact="changeSort" data-sort="likes" data-orderby="desc">
<input type="radio" name="changeSort" id="sort_likes_desc" autocomplete="off"> 추천순
</label>
</div>
<button type="button" class="btn btn-light btn-sm d-print-none ml-auto" role="button" data-kcact="reload" data-toggle="tooltip" title="새로고침">
<i class="fa fa-refresh" aria-hidden="true"></i>
</button>
</nav>
<hr>
<ul class="list-unstyled" data-role="comment-container"> <!-- 댓글 출력부 : comment_row.html -->
{$comment_rows}
</ul>
<div data-role="btnMore-container"> <!-- 더보기 버튼 -->
<a class="btn btn-block btn-light" data-role="trigger-getMoreComment">더보기</a>
</div>
</main>
<div class="d-none animated fadeIn" data-role="comment-none">
<div class="d-flex justify-content-center align-items-center" style="height: 30vh;">
<div class="text-muted text-center">
<div class="display-2 mb-3">
<i class="fa fa-comment-o" aria-hidden="true"></i>
</div>
<button type="button" class="btn btn-link text-muted js-comment-focus">첫번째 댓글을 남겨주세요.</button>
</div>
</div>
</div>
<!-- Modal -->
<div class="modal fade" id="modal_reaction" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<div class="modal-dialog modal-sm modal-dialog-centered" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">
<i class="fa fa-thumbs-o-up fa-lg fa-fw" aria-hidden="true"></i> 공감한 사람 <span class="badge badge-light js-count">9</span>
</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body p-0">
<ul class="list-group list-group-flush">
<li class="list-group-item d-flex justify-content-between align-items-center">
<div class="media w-100">
<img class="mr-3 border rounded-circle" src="/_core/opensrc/timthumb/thumb.php?src=https://kimsq.com/_var/avatar/180.break93.png&amp;w=38&amp;h=38" alt="아바타" width="38">
<div class="media-body">
<strong>벽돌공장</strong>
<p class="text-muted small mt-1 mb-0">
엑스퍼트
</p>
</div>
</div>
<span class="badge badge-light badge-pill">36분 전</span>
</li>
<li class="list-group-item d-flex justify-content-between align-items-center">
<div class="media w-100">
<img class="mr-3 border rounded-circle" src="/_core/opensrc/timthumb/thumb.php?src=https://kimsq.com/_var/avatar/180.break93.png&amp;w=38&amp;h=38" alt="아바타" width="38">
<div class="media-body">
<strong>벽돌공장</strong>
<p class="text-muted small mt-1 mb-0">
엑스퍼트
</p>
</div>
</div>
<span class="badge badge-light badge-pill">36분 전</span>
</li>
</ul>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-light btn-block" data-dismiss="modal">확인</button>
</div>
</div>
</div>
</div>
<script>
jQuery(function($) {
$('[data-toggle="tooltip"]').tooltip()
$(".js-modal-window").click(function() {
modalSetting('modal_window',$(this).attr("data-href"));
});
$('.add-comment').click(function() {
var uid = $(this).data('parent')
var textarea = $('[data-role="oneline-input-'+uid+'"]')
setTimeout(function(){ textarea.focus(); }, 200); // 한줄의견 추가시에 textarea focus 처리하기
});
$('.js-comment-focus').click(function() {
$('#meta-description-content').focus()
});
});
</script>

View File

@@ -0,0 +1,4 @@
<h1 class="h5 text-muted">
<i class="fa fa-commenting-o fa-fw" aria-hidden="true"></i> 댓글
<span class="text-primary" data-role="show-totalRow">{$comment_total}</span>
</h1>

View File

@@ -0,0 +1,71 @@
<li class="media border-bottom mb-3" data-role="comment-item" data-uid="{$comment_uid}" data-page="{$comment_page}" data-totalPage="{$total_page}" data-type="comment" data-hidden="{$comment_getHidden}" data-notice="{$comment_getNoitce}">
<div data-role="comment-origin-content-{$comment_uid}" class="d-none">{$comment_content}</div>
<img class="mr-3 border rounded-circle" src="{$comment_user_pic}" alt="아바타" width="50">
<div class="media-body">
<div class="d-flex w-100 justify-content-between align-items-center">
<span>
<span data-role="comment-hidden" class="badge"><i class="fa fa-lock fa-lg" aria-hidden="true"></i></span>
<strong class="mr-2">{$comment_user_name}</strong>
<i class="fa fa-clock-o" aria-hidden="true"></i>
<time data-role="comment-time-wrapper-{$comment_uid}">{$comment_regis_time}</time>
<small class="ml-1 {$comment_getNew}"></small><!-- 24시간이내 new 출력 -->
</span>
<span>
{$btn_showHideMenu} <!-- 메뉴 출력/숨기 버튼 btn_showHideMenu.html : 권한이 있는 경우(로그인,작성자,관리자) 에만 노출됨 -->
</span>
</div><!-- /.d-flex -->
<div class="markdown-body">
<article class="mb-0" data-role="comment-content-editable-{$comment_uid}">{$comment_content}</article>
</div>
{$btn_editMod} <!-- 수정 모드시 취소/완료 버튼 btn_ediMod.html -->
<div class="mb-2">
<button class="btn btn-link btn-sm add-comment px-0 muted-link" data-role="toggle-oneline-input" data-parent="{$comment_uid}">
<i class="fa fa-comment-o fa-lg fa-fw" aria-hidden="true"></i>
의견달기
</button>
<button class="btn btn-link btn-sm muted-link js-like pr-0 {$comment_getIsLiked}"
data-kcact="like"
data-type="comment"
data-entry="{$comment_uid}"
data-effect="animated bounceIn delay-1"
data-role="comment-isLiked-{$comment_uid}">
<i class="fa fa-thumbs-o-up fa-lg fa-fw" aria-hidden="true"></i>
좋아요
</button>
<a href="#modal_reaction" class="badge badge-light"
data-toggle="modal"
data-type="comment"
data-count="{$comment_like_total}"
data-entry="{$comment_uid}"
data-role="comment-likeTotal-{$comment_uid}" title="좋아요한 사람">
{$comment_like_total}
</a>
</div>
<section>
<div class="my-2" data-role="oneline-input-wrapper-{$comment_uid}"> <!-- 한줄의견 등록폼 -->
<form class="input-group">
<input type="text" class="form-control" data-role="oneline-input-{$comment_uid}"><!-- 주의 : comment_uid 가 들어가야 함 -->
<div class="input-group-append">
<button class="btn btn-light" type="submit"
title="의견추가"
data-kcact="regis"
data-type="oneline"
data-parent="{$comment_uid}"
data-effect="animated fadeInUp"
data-grant="{$grant_uid}">
<i class="fa fa-paper-plane fa-lg" aria-hidden="true"></i>
</button>
</div>
</form><!-- /.input-group -->
</div>
<ul class="list-group my-2" data-role="oneline-container-{$comment_uid}">
{$oneline_rows} <!-- 한줄의견 리스트 -->
</ul>
</section>
</div>
</li>

View File

@@ -0,0 +1,72 @@
<li class="media border-bottom mb-3" data-role="comment-item" data-uid="{$comment_uid}" data-page="{$comment_page}" data-totalPage="{$total_page}" data-type="comment" data-hidden="{$comment_getHidden}" data-notice="{$comment_getNoitce}">
<div data-role="comment-origin-content-{$comment_uid}" class="d-none">{$comment_content}</div>
<img class="mr-3 border rounded-circle" src="{$comment_user_pic}" alt="아바타" width="50">
<div class="media-body">
<div class="d-flex w-100 justify-content-between align-items-center">
<span>
<strong class="mr-2">{$comment_user_name}</strong>
<i class="fa fa-clock-o" aria-hidden="true"></i>
<time data-role="comment-time-wrapper-{$comment_uid}">{$comment_regis_time}</time>
<small class="ml-1 {$comment_getNew}"></small><!-- 24시간이내 new 출력 -->
</span>
<span>
{$btn_showHideMenu} <!-- 메뉴 출력/숨기 버튼 btn_showHideMenu.html : 권한이 있는 경우(로그인,작성자,관리자) 에만 노출됨 -->
</span>
</div><!-- /.d-flex -->
<div class="markdown-body">
<article class="mb-0" data-role="comment-content-editable-{$comment_uid}">
<div class="text-center text-muted bg-light p-4 my-2"><i class="fa fa-lock fa-fw" aria-hidden="true"></i> 비밀글</div>
</article>
</div>
{$btn_editMod} <!-- 수정 모드시 취소/완료 버튼 btn_ediMod.html -->
<div class="mb-2">
<button class="btn btn-link btn-sm add-comment px-0 muted-link" data-role="toggle-oneline-input" data-parent="{$comment_uid}">
<i class="fa fa-comment-o fa-lg fa-fw" aria-hidden="true"></i>
의견달기
</button>
<button class="btn btn-link btn-sm muted-link js-like pr-0 {$comment_getIsLiked}"
data-kcact="like"
data-type="comment"
data-entry="{$comment_uid}"
data-effect="animated bounceIn delay-1"
data-role="comment-isLiked-{$comment_uid}">
<i class="fa fa-thumbs-o-up fa-lg fa-fw" aria-hidden="true"></i>
좋아요
</button>
<a href="#modal_reaction" class="badge badge-light"
data-toggle="modal"
data-type="comment"
data-count="{$comment_like_total}"
data-entry="{$comment_uid}"
data-role="comment-likeTotal-{$comment_uid}" title="좋아요한 사람">
{$comment_like_total}
</a>
</div>
<section>
<div class="my-2" data-role="oneline-input-wrapper-{$comment_uid}"> <!-- 한줄의견 등록폼 -->
<form class="input-group">
<input type="text" class="form-control" data-role="oneline-input-{$comment_uid}"><!-- 주의 : comment_uid 가 들어가야 함 -->
<div class="input-group-append">
<button class="btn btn-light" type="submit"
title="의견추가"
data-kcact="regis"
data-type="oneline"
data-parent="{$comment_uid}"
data-effect="animated fadeInUp"
data-grant="{$grant_uid}">
<i class="fa fa-paper-plane fa-lg" aria-hidden="true"></i>
</button>
</div>
</form><!-- /.input-group -->
</div>
<ul class="list-group my-2" data-role="oneline-container-{$comment_uid}">
{$oneline_rows} <!-- 한줄의견 리스트 -->
</ul>
</section>
</div>
</li>

View File

@@ -0,0 +1,48 @@
<!-- 참조사항
1. 등록폼에 등록자 아바타가 필요한 경우 : <img src="{$login_user_pic}">
2. data-*="*" 필수
-->
<div class="card mb-4" data-role="comment-input-wrapper">
<textarea class="form-control border-0" name="content" rows="1" id="meta-description-content" data-role="comment-input"></textarea>
<div class="card-footer p-2">
<div class="d-flex justify-content-between align-items-center">
<small>글자수 <strong class="text-danger" data-role="show-inputLength">0</strong> / <span data-role="show-textLimit"><!-- 옵션에서 정한 값--></span></small>
<button type="button" class="btn btn-light" data-role="open-emoticon" hidden>
<i class="fa fa-smile-o fa-lg" aria-hidden="true"></i>
</button>
<button type="button" class="btn btn btn-outline-primary cmt-post ml-1 align-self-end"
data-kcact="regis"
data-type="comment"
data-effect="animated fadeInUp"
data-parent="{$comment_parent}">등록</button>
</div><!-- /.d-flex -->
</div>
</div>
<script>
// 입력창 자동 리사이즈
autosize($('#commentting-container textarea'));
var textarea_container = $('[data-role="comment-input-wrapper"]')
var textarea = $('#meta-description-content');
textarea.focus(function(){
textarea_container.addClass('active')
});
textarea.blur(function(){
setTimeout(function(){
textarea_container.removeClass('active')
}, 200);
});
// 댓글이 등록된 후에
$('#commentting-container').on('saved.rb.comment',function(){
textarea.removeAttr("style");
})
</script>

View File

@@ -0,0 +1 @@
<img src="{$emoticon_src}" style="width:50px"/>

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1,21 @@
<li class="list-group-item flex-column align-items-start p-0 border-left-0 rounded-0 list-group-item-light" data-role="oneline-item" data-uid="{$oneline_uid}" data-type="oneline" data-hidden="{$oneline_getHidden}">
<div data-role="oneline-origin-content-{$oneline_uid}" class="d-none">{$oneline_content}</div>
<blockquote class="py-2">
<div class="d-flex w-100 justify-content-between align-items-center">
<span>
<span data-role="oneline-hidden" class="badge"><i class="fa fa-lock fa-lg" aria-hidden="true"></i></span>
<cite>{$oneline_user_name}</cite>
<time class="small text-muted ml-2" data-role="oneline-time-wrapper-{$oneline_uid}">
{$oneline_regis_time}
</time>
<small class="ml-1 {$oneline_getNew}"></small><!-- 24시간이내 new 출력 -->
</span>
<span>
{$btn_showHideMenu} <!-- 메뉴 출력/숨기 버튼 btn_showHideMenu.html : 권한이 있는 경우(로그인,작성자,관리자) 에만 노출됨 -->
</span>
</div>
<article class="mb-0" data-role="oneline-content-editable-{$oneline_uid}">{$oneline_content}</article>
{$btn_editMod}
<!-- <a data-kcact="like" data-type="oneline" data-entry="{$oneline_uid}">좋아요(<span data-role="oneline-likeTotal-{$oneline_uid}">{$oneline_like_total}</span>)</a> -->
</blockquote>
</li>

View File

@@ -0,0 +1,22 @@
<li class="list-group-item flex-column align-items-start p-0 border-left-0 rounded-0 list-group-item-light" data-role="oneline-item" data-uid="{$oneline_uid}" data-type="oneline" data-hidden="{$oneline_getHidden}">
<div data-role="oneline-origin-content-{$oneline_uid}" class="d-none">{$oneline_content}</div>
<blockquote class="py-2">
<div class="d-flex w-100 justify-content-between align-items-center">
<span>
<cite>{$oneline_user_name}</cite>
<time class="small text-muted ml-2" data-role="oneline-time-wrapper-{$oneline_uid}">
{$oneline_regis_time}
</time>
<small class="ml-1 {$oneline_getNew}"></small><!-- 24시간이내 new 출력 -->
</span>
<span>
{$btn_showHideMenu} <!-- 메뉴 출력/숨기 버튼 btn_showHideMenu.html : 권한이 있는 경우(로그인,작성자,관리자) 에만 노출됨 -->
</span>
</div>
<article class="mb-0" data-role="oneline-content-editable-{$oneline_uid}">
<div class="text-center text-muted border p-4 my-2"><i class="fa fa-lock fa-fw" aria-hidden="true"></i> 비밀글</div>
</article>
{$btn_editMod}
<button class="btn btn-sm btn-link text-reset" data-kcact="like" data-type="oneline" data-entry="{$oneline_uid}">좋아요 <span class="badge badge-light" data-role="oneline-likeTotal-{$oneline_uid}">{$oneline_like_total}</span></button>
</blockquote>
</li>

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1 @@
부트스트랩4 기본형 댓글

View File

@@ -0,0 +1,21 @@
The RBL License
Copyright (c) 2011-2018 Redblock, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@@ -0,0 +1,17 @@
# 부트스트랩 4 댓글 기본형 테마
안녕하세요. 감사합니다.
## 주요기능
- Automated website building technology
- Powerful content managing system
- Multiple virtual site system
- Unlimited extension
- Multi Screen implementations
## 서버 요구사항
- PHP version 5.2.x
- MYSQL version 3.23.x or greater (recommend MYSQL >= 5.x)
- GD Library
- ICONV

View File

@@ -0,0 +1,317 @@
@charset "utf-8";
.hidden {
display: none !important;
}
[data-role="comment-container"] [data-role="comment-item"]:focus,
[data-role="comment-container"] [data-role="oneline-item"]:focus {
background-color: #F5FFFE !important;
}
[data-role="comment-item"],
[data-role="comment-item"] .markdown-body {
font-size: 13px;
word-break: break-all;
}
[data-role="comment-item"].highlight,
[data-role="oneline-item"].highlight {
padding: 15px;
background-color: #F9F9F3
}
[data-role="comment-item"] [data-role="anchor-link"] {
visibility: hidden;
}
[data-role="comment-item"]:hover [data-role="anchor-link"] {
visibility: visible;
}
[data-role="oneline-item"],
[data-role="oneline-item"].markdown-body {
font-size: 12px
}
[data-role="oneline-item"] [data-role="anchor-link"] {
visibility: hidden;
}
[data-role="oneline-item"]:hover [data-role="anchor-link"] {
visibility: visible;
}
[data-role="oneline-item"] blockquote {
margin-bottom: 0;
padding: 0 1em;
color: #6a737d;
border-left: 0.25em solid #dfe2e5;
}
[data-role="comment-item"] figure.image img {
max-width: 100%;
height: auto;
}
[data-role="comment-item"] [data-role="comment-hidden"],
[data-role="oneline-item"] [data-role="oneline-hidden"] {
display: none
}
[data-role="comment-item"][data-hidden="true"] [data-role="comment-hidden"] {
display: inline-block;
}
[data-role="oneline-item"][data-hidden="true"] [data-role="oneline-hidden"] {
display: inline-block;
}
.js-like.active {
color: #007bff !important
}
.js-like.active::after {
content: ' 취소'
}
.js-new.active::before {
padding-left: 3px;
content: 'new';
color: red;
font-size: 80%
}
.rb-comments-write .card textarea {
height: 34px;
background-color: #fafbfc;
-webkit-transition: height 1s;
/* For Safari 3.1 to 6.0 */
transition: height 1s;
transition-delay: 1s;
-webkit-transition-delay: 1s;
}
.rb-comments-write .card.active textarea {
min-height: 70px !important;
background-color: #fff;
}
[data-role="commentWrite-container"] .card-header,
[data-role="commentWrite-container"] .card-footer,
.rb-oneline-write .card .card-header,
.rb-oneline-write .card .card-footer {
display: none
}
[data-role="commentWrite-container"].active .card-header,
[data-role="commentWrite-container"].active .card-footer,
.rb-oneline-write .card.active .card-header,
.rb-oneline-write .card.active .card-footer {
display: block
}
.rb-comments-write .active .ck-editor__editable_inline {
min-height: 120px;
}
.media[data-role="comment-item"].border-bottom {
border-bottom: 1px dotted #dee2e6 !important;
}
.list-group-item[data-role="oneline-item"] {
border-style: dotted;
position: relative;
}
[data-role="comment-main"] .anchorjs-link {
font-size: 25px !important
}
[data-role="comment-main"] .anchorjs-link:hover {
text-decoration: none;
}
.list-group-item[data-role="oneline-item"] .anchorjs-link{
position: absolute;
top: 50%;
right: 20px;
margin-top: -7px;
}
.form-control {
background-color: #fafbfc;
}
.list-group:empty {
margin-top: 0 !important;
margin-bottom: 0 !important
}
.flex-column-reverse .list-group-item:last-child {
margin-bottom: -1px;
}
/* notify */
#commentting-container,
[data-role=comment-container],
[data-role=moreBtn-container] {
position: relative;
}
#comment-notify {
visibility: hidden;
width: 100%;
position: absolute;
z-index: 1;
bottom: 30px;
top: auto
}
#comment-notify .comment-notify-msg {
width: 80%;
margin: 0 auto;
background-color: #333;
color: #fff;
text-align: center;
border-radius: 5px;
padding: 12px 6px;
font-size: 14px;
}
#comment-notify.active {
visibility: visible;
-webkit-animation: fadein 0.5s, fadeout 0.5s 1.1s;
animation: fadein 0.5s, fadeout 0.5s 1.1s;
}
@-webkit-keyframes fadein {
from {
bottom: 0;
opacity: 0;
}
to {
bottom: 30px;
opacity: 1;
}
}
@keyframes fadein {
from {
bottom: 0;
opacity: 0;
}
to {
bottom: 30px;
opacity: 1;
}
}
@-webkit-keyframes fadeout {
from {
bottom: 30px;
opacity: 1;
}
to {
bottom: 0;
opacity: 0;
}
}
@keyframes fadeout {
from {
bottom: 30px;
opacity: 1;
}
to {
bottom: 0;
opacity: 0;
}
}
/* notify */
/* attach trigger */
#commentting-container .comment-attach {
position: relative;
display: block;
height: 100%;
width: 100%;
padding: 8px 0;
cursor: pointer;
}
#commentting-container span.comment-attach input[type='file'] {
cursor: pointer;
position: absolute;
display: block;
top: 0;
right: -9px;
margin: 0;
padding: 0;
opacity: 0;
font-size: 0;
width: 180%;
height: 100%;
}
/* emoticon */
#commentting-container .emoticon-wrapper {
display: none;
overflow: hidden;
padding: 15px 5px;
}
#commentting-container .emoticon-wrapper ul {
padding: 0;
margin: 0;
width: 100%;
}
#commentting-container .emoticon-wrapper li {
display: inline-block;
float: left;
text-align: center;
width: 12.5%;
cursor: pointer;
}
#commentting-container .emoticon-wrapper li img {
width: 25px;
height: 25px;
border-radius: 100%;
}
[data-role|=oneline-input-wrapper],
[data-role|=comment-modify-btn-wrapper],
[data-role|=oneline-modify-btn-wrapper] {
display: none;
}
/* loader */
#comment-spinner-wrap {
position: absolute;
left: 50%;
}
.comment-top5p {
top: 5%;
}
.comment-bottom5p {
bottom: 5%;
}
.ck-editor__editable.ck-blurred {
border : 1px solid #ccc
}
.ck.ck-editor__editable:not(.ck-editor__nested-editable).ck-focused {
outline: none;
border-radius: 0;
box-shadow: none;
}
figure.ck.ck-placeholder:before,
.ck figure.ck-placeholder:before {
content: none;
}
.ck.ck-toolbar {
border: 0;
background-color: transparent
}

View File

@@ -0,0 +1,4 @@
<div data-role="{$entry_type}-modify-btn-wrapper-{$uid}" class="my-2">
<button class="btn btn-light btn-sm" data-toggle="cancel-edit" data-type="{$entry_type}" data-uid="{$uid}">수정취소</button>
<button class="btn btn-primary btn-sm" data-kcact="edit" data-type="{$entry_type}" data-uid="{$uid}" data-parent="{$parent}">수정완료</button>
</div>

View File

@@ -0,0 +1,12 @@
<div class="btn-group">
<button class="btn btn-link btn-sm dropdown-toggle" type="button" data-toggle="dropdown" data-role="showHide-menu" data-type="{$entry_type}">
</button>
<div class="dropdown-menu dropdown-menu-right" data-role="menu-container-{$entry_type}">
<button class="dropdown-item" data-toggle="edit" data-type="{$entry_type}" data-uid="{$uid}">
<i class="fa fa-edit"></i> 수정
</button>
<button class="dropdown-item" data-kcact="delete" data-type="{$entry_type}" data-uid="{$uid}" data-parent="{$entry_parent}">
<i class="fa fa-trash-o"></i> 삭제
</button>
</div>
</div>

View File

@@ -0,0 +1,57 @@
<!-- 공통 사항 data-* ="*" 과 {$*} 는 수정 금지 -->
<header class="d-flex justify-content-start" data-role="header-container">
{$comment_header} <!-- 댓글 header : comment_header.html -->
</header>
<div class="rb-comments-write rb-article mb-4" data-role="commentWrite-container"> <!-- 댓글 입렵부 : comment_write.html -->
{$comment_write}
</div>
<main data-role="comment-main">
<div data-role="comment-filter">
<nav class="d-flex">
<div class="btn-group btn-group-sm btn-group-toggle" data-toggle="buttons" role="group">
<label class="btn btn-light active" data-kcact="changeSort" data-sort="uid" data-orderby="asc">
<input type="radio" name="changeSort" id="sort_uid_asc" autocomplete="off" checked> 최신순
</label>
<label class="btn btn-light" data-kcact="changeSort" data-sort="uid" data-orderby="desc">
<input type="radio" name="changeSort" id="sort_uid_desc" autocomplete="off"> 과거순
</label>
<label class="btn btn-light" data-kcact="changeSort" data-sort="likes" data-orderby="desc">
<input type="radio" name="changeSort" id="sort_likes_desc" autocomplete="off"> 추천순
</label>
</div>
<button type="button" class="btn btn-light btn-sm d-print-none ml-auto" role="button" data-kcact="reload" data-toggle="tooltip" title="새로고침">
<i class="fa fa-refresh" aria-hidden="true"></i>
</button>
</nav>
<hr>
</div>
<ul class="list-unstyled" data-role="comment-container"> <!-- 댓글 출력부 : comment_row.html -->
{$comment_rows}
</ul>
<div data-role="btnMore-container"> <!-- 더보기 버튼 -->
<a class="btn btn-block btn-light" data-role="trigger-getMoreComment">더보기</a>
</div>
</main>
<div class="d-none animated fadeIn" data-role="comment-none">
<div class="d-flex justify-content-center align-items-center" style="height: 30vh;">
<div class="text-muted text-center">
<div class="display-2 mb-3">
<i class="fa fa-comment-o" aria-hidden="true"></i>
</div>
<button type="button" class="btn btn-link text-muted js-comment-focus">첫번째 댓글을 남겨주세요.</button>
</div>
</div>
</div>
<script>
jQuery(function($) {
$('[data-toggle="tooltip"]').tooltip()
});
</script>

View File

@@ -0,0 +1,4 @@
<h4 class="h6 mb-3">
댓글
<span data-role="total_comment">{$comment_total}</span>
</h4>

View File

@@ -0,0 +1,83 @@
<li class="media border-bottom mb-3 p-2" id="CMT-{$comment_uid}" data-role="comment-item" data-uid="{$comment_uid}" data-page="{$comment_page}" data-totalPage="{$total_page}" data-type="comment" data-hidden="{$comment_getHidden}" data-notice="{$comment_getNoitce}">
<img class="mr-3 border rounded-circle" src="{$comment_user_pic}" alt="아바타" width="50">
<div class="media-body">
<div class="d-flex w-100 justify-content-between align-items-center">
<span>
<span data-role="comment-hidden" class="badge"><i class="fa fa-lock fa-lg" aria-hidden="true"></i></span>
<strong class="mr-2">{$comment_user_name}</strong>
<i class="fa fa-clock-o" aria-hidden="true"></i>
<time data-role="comment-time-wrapper-{$comment_uid}">{$comment_regis_time}</time>
<small class="ml-1 {$comment_getNew}"></small><!-- 24시간이내 new 출력 -->
</span>
<span>
{$btn_showHideMenu} <!-- 메뉴 출력/숨기 버튼 btn_showHideMenu.html : 권한이 있는 경우(로그인,작성자,관리자) 에만 노출됨 -->
<a class="text-reset" data-role="anchor-link" href="#CMT-{$comment_uid}">
<i class="fa fa-hashtag" aria-hidden="true"></i>
</a>
</span>
</div><!-- /.d-flex -->
<div class="rb-article">
<article data-role="comment-origin-content-{$comment_uid}">{$comment_content}</article>
<div data-role="{$entry_type}-modify-btn-wrapper-{$uid}" class="toolbar-container" data-item="comment"></div>
<article style="display:none" data-role="comment-content-editable-{$comment_uid}">{$comment_content}</article>
</div>
{$btn_editMod} <!-- 수정 모드시 취소/완료 버튼 btn_ediMod.html -->
<div class="mb-2">
<button class="btn btn-link btn-sm add-comment px-0 muted-link" data-role="toggle-oneline-input" data-parent="{$comment_uid}">
<i class="fa fa-comment-o fa-lg fa-fw" aria-hidden="true"></i>
의견달기
</button>
<button class="btn btn-link btn-sm muted-link js-like pr-0 {$comment_getIsLiked}"
data-kcact="like"
data-type="comment"
data-entry="{$comment_uid}"
data-effect="animated bounceIn delay-1"
data-role="comment-isLiked-{$comment_uid}">
<i class="fa fa-thumbs-o-up fa-lg fa-fw" aria-hidden="true"></i>
좋아요
</button>
<a href="#modal_reaction" class="badge badge-light"
data-toggle="modal"
data-type="comment"
data-count="{$comment_like_total}"
data-entry="{$comment_uid}"
data-role="comment-likeTotal-{$comment_uid}" title="좋아요한 사람">
{$comment_like_total}
</a>
</div>
<section class="pl-5">
<div class="rb-oneline-write"> <!-- 한줄의견 등록폼 -->
<div class="card my-3 shadow-sm" data-role="oneline-input-wrapper-{$comment_uid}">
<section class="w-100">
<div data-role="editor">
<div data-role="oneline-input-{$comment_uid}" class="border-0"></div>
</div>
</section>
<div class="card-footer p-0 d-flex justify-content-between align-items-center">
<div class="toolbar-container align-self-end"></div>
<button class="btn btn-link" type="submit"
title="의견추가"
data-kcact="regis"
data-type="oneline"
data-parent="{$comment_uid}"
data-effect="animated fadeInUp"
data-grant="{$grant_uid}">
등록
</button>
</div><!-- /.d-flex -->
</div>
</div>
<ul class="list-group my-2" data-role="oneline-container-{$comment_uid}">
{$oneline_rows} <!-- 한줄의견 리스트 -->
</ul>
</section>
</div>
</li>

View File

@@ -0,0 +1,84 @@
<li class="media border-bottom mb-3" id="CMT-{$comment_uid}" data-role="comment-item" data-uid="{$comment_uid}" data-page="{$comment_page}" data-totalPage="{$total_page}" data-type="comment" data-hidden="{$comment_getHidden}" data-notice="{$comment_getNoitce}">
<img class="mr-3 border rounded-circle" src="{$comment_user_pic}" alt="아바타" width="50">
<div class="media-body">
<div class="d-flex w-100 justify-content-between align-items-center">
<span>
<strong class="mr-2">{$comment_user_name}</strong>
<i class="fa fa-clock-o" aria-hidden="true"></i>
<time data-role="comment-time-wrapper-{$comment_uid}">{$comment_regis_time}</time>
<small class="ml-1 {$comment_getNew}"></small><!-- 24시간이내 new 출력 -->
</span>
<span>
{$btn_showHideMenu} <!-- 메뉴 출력/숨기 버튼 btn_showHideMenu.html : 권한이 있는 경우(로그인,작성자,관리자) 에만 노출됨 -->
<a class="text-reset" data-role="anchor-link" href="#CMT-{$comment_uid}">
<i class="fa fa-hashtag" aria-hidden="true"></i>
</a>
</span>
</div><!-- /.d-flex -->
<div class="rb-article">
<article data-role="comment-content-editable-{$comment_uid}">
<div class="text-center text-muted bg-light p-4 my-2"><i class="fa fa-lock fa-fw" aria-hidden="true"></i> 비밀글</div>
</article>
</div>
{$btn_editMod} <!-- 수정 모드시 취소/완료 버튼 btn_ediMod.html -->
<div class="mb-2">
<button class="btn btn-link btn-sm add-comment px-0 muted-link" data-role="toggle-oneline-input" data-parent="{$comment_uid}">
<i class="fa fa-comment-o fa-lg fa-fw" aria-hidden="true"></i>
의견달기
</button>
<button class="btn btn-link btn-sm muted-link js-like pr-0 {$comment_getIsLiked}"
data-kcact="like"
data-type="comment"
data-entry="{$comment_uid}"
data-effect="animated bounceIn delay-1"
data-role="comment-isLiked-{$comment_uid}">
<i class="fa fa-thumbs-o-up fa-lg fa-fw" aria-hidden="true"></i>
좋아요
</button>
<a href="#modal_reaction" class="badge badge-light"
data-toggle="modal"
data-type="comment"
data-count="{$comment_like_total}"
data-entry="{$comment_uid}"
data-role="comment-likeTotal-{$comment_uid}" title="좋아요한 사람">
{$comment_like_total}
</a>
</div>
<section class="pl-5">
<div class="rb-oneline-write"> <!-- 한줄의견 등록폼 -->
<div class="card my-3 shadow-sm" data-role="oneline-input-wrapper-{$comment_uid}">
<section class="w-100">
<div data-role="editor">
<div data-role="oneline-input-{$comment_uid}" class="border-0"></div>
</div>
</section>
<div class="card-footer p-0 d-flex justify-content-between align-items-center">
<div class="toolbar-container align-self-end"></div>
<button class="btn btn-link" type="submit"
title="의견추가"
data-kcact="regis"
data-type="oneline"
data-parent="{$comment_uid}"
data-effect="animated fadeInUp"
data-grant="{$grant_uid}">
등록
</button>
</div><!-- /.d-flex -->
</div>
</div>
<ul class="list-group my-2" data-role="oneline-container-{$comment_uid}">
{$oneline_rows} <!-- 한줄의견 리스트 -->
</ul>
</section>
</div>
</li>

View File

@@ -0,0 +1,30 @@
<!-- 참조사항
1. 등록폼에 등록자 아바타가 필요한 경우 : <img src="{$login_user_pic}">
2. data-*="*" 필수
-->
<div class="card shadow-sm mb-4" data-role="comment-input-wrapper">
<div class="card-header py-0 pr-0">
<div class="d-flex justify-content-between align-items-center">
<span class="text-muted">{$login_user_nic}</span>
<div class="toolbar-container"></div>
</div><!-- /.d-flex -->
</div>
<section>
<div data-role="editor">
<div data-role="comment-input" class="border-0"></div>
</div>
</section>
<div class="card-footer bg-white p-2">
<div class="d-flex justify-content-between align-items-center">
<div class=""></div>
<button type="button" class="btn btn btn-link cmt-post ml-1 align-self-end"
data-kcact="regis"
data-type="comment"
data-effect="animated fadeInUp"
data-parent="{$comment_parent}">등록</button>
</div><!-- /.d-flex -->
</div>
</div>

View File

@@ -0,0 +1 @@
<img src="{$emoticon_src}" style="width:50px"/>

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1,26 @@
<li class="list-group-item flex-column align-items-start p-0 border-left-0 rounded-0 list-group-item-light" data-role="oneline-item" id="OLN-{$oneline_uid}" data-uid="{$oneline_uid}" data-type="oneline" data-hidden="{$oneline_getHidden}">
<span></span>
<blockquote class="py-2">
<div class="d-flex w-100 justify-content-between align-items-center">
<span>
<span data-role="oneline-hidden" class="badge"><i class="fa fa-lock fa-lg" aria-hidden="true"></i></span>
<cite>{$oneline_user_name}</cite>
<time class="small text-muted ml-2" data-role="oneline-time-wrapper-{$oneline_uid}">
{$oneline_regis_time}
</time>
<small class="ml-1 {$oneline_getNew}"></small><!-- 24시간이내 new 출력 -->
</span>
<span>
{$btn_showHideMenu} <!-- 메뉴 출력/숨기 버튼 btn_showHideMenu.html : 권한이 있는 경우(로그인,작성자,관리자) 에만 노출됨 -->
<a class="text-reset" data-role="anchor-link" href="#OLN-{$oneline_uid}">
<i class="fa fa-hashtag" aria-hidden="true"></i>
</a>
</span>
</div>
<article class="mb-0" data-role="oneline-origin-content-{$oneline_uid}">{$oneline_content}</article>
<div data-role="{$entry_type}-modify-btn-wrapper-{$uid}" class="toolbar-container" data-item="oneline"></div>
<article class="mb-0 bg-white" data-role="oneline-content-editable-{$oneline_uid}" style="display:none" >{$oneline_content}</article>
{$btn_editMod}
<button class="btn btn-sm btn-link text-reset" data-kcact="like" data-type="oneline" data-entry="{$oneline_uid}">좋아요 <span class="badge badge-light" data-role="oneline-likeTotal-{$oneline_uid}">{$oneline_like_total}</span></button>
</blockquote>
</li>

View File

@@ -0,0 +1,29 @@
<li class="list-group-item flex-column align-items-start p-0 border-left-0 rounded-0 list-group-item-light" data-role="oneline-item" id="OLN-{$oneline_uid}" data-uid="{$oneline_uid}" data-type="oneline" data-hidden="{$oneline_getHidden}">
<span></span>
<blockquote class="py-2">
<div class="d-flex w-100 justify-content-between align-items-center">
<span>
<cite>{$oneline_user_name}</cite>
<time class="small text-muted ml-2" data-role="oneline-time-wrapper-{$oneline_uid}">
{$oneline_regis_time}
</time>
<small class="ml-1 {$oneline_getNew}"></small><!-- 24시간이내 new 출력 -->
</span>
<span>
{$btn_showHideMenu} <!-- 메뉴 출력/숨기 버튼 btn_showHideMenu.html : 권한이 있는 경우(로그인,작성자,관리자) 에만 노출됨 -->
<a class="text-reset" data-role="anchor-link" href="#OLN-{$oneline_uid}">
<i class="fa fa-hashtag" aria-hidden="true"></i>
</a>
</span>
</div>
<article class="mb-0" data-role="oneline-origin-content-{$oneline_uid}">
<div class="text-center text-muted border p-4 my-2"><i class="fa fa-lock fa-fw" aria-hidden="true"></i> 비밀글</div>
</article>
<div data-role="{$entry_type}-modify-btn-wrapper-{$uid}" class="toolbar-container" data-item="oneline"></div>
<article class="mb-0 bg-white" data-role="oneline-content-editable-{$oneline_uid}" style="display:none" >{$oneline_content}</article>
{$btn_editMod}
<button class="btn btn-sm btn-link text-reset" data-kcact="like" data-type="oneline" data-entry="{$oneline_uid}">좋아요 <span class="badge badge-light" data-role="oneline-likeTotal-{$oneline_uid}">{$oneline_like_total}</span></button>
</blockquote>
</li>

View File

@@ -0,0 +1 @@
라벨

View File

@@ -0,0 +1 @@
메뉴

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1 @@
부트스트랩4 ckeditor5 inline 댓글

View File

@@ -0,0 +1,21 @@
The RBL License
Copyright (c) 2011-2018 Redblock, Inc.
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.

View File

@@ -0,0 +1,17 @@
# 부트스트랩 4 댓글 기본형 테마
안녕하세요. 감사합니다.
## 주요기능
- Automated website building technology
- Powerful content managing system
- Multiple virtual site system
- Unlimited extension
- Multi Screen implementations
## 서버 요구사항
- PHP version 5.2.x
- MYSQL version 3.23.x or greater (recommend MYSQL >= 5.x)
- GD Library
- ICONV

View File

@@ -0,0 +1,368 @@
@charset "utf-8";
.hidden {
display: none !important;
}
[data-role="comment-container"] [data-role="comment-item"]:focus,
[data-role="comment-container"] [data-role="oneline-item"]:focus {
background-color: #F5FFFE !important;
}
[data-role="comment-item"],
[data-role="comment-item"] .markdown-body {
font-size: 13px;
word-break: break-all;
}
[data-role="oneline-item"],
[data-role="oneline-item"].markdown-body {
font-size: 12px
}
[data-role="comment-item"] .ck-editor__editable,
[data-role="oneline-item"] .ck-editor__editable {
border: 0.0625rem solid #dee2e6
}
[data-role="comment-item"] .ck-editor__editable.ck-focused,
[data-role="oneline-item"] .ck-editor__editable.ck-focused {
border: 0.0625rem solid #007bff !important;
box-shadow: none !important
}
[data-role="oneline-item"] blockquote {
margin-bottom: 0;
padding: 0 1em;
color: #6a737d;
border-left: 0.25em solid #dfe2e5;
}
[data-role="comment-item"] figure.media oembed .media .align-self-center img {
width: 155px
}
[data-role="comment-item"] [data-role="comment-hidden"],
[data-role="oneline-item"] [data-role="oneline-hidden"] {
display: none
}
[data-role="comment-item"][data-hidden="true"] [data-role="comment-hidden"] {
display: inline-block;
}
[data-role="oneline-item"][data-hidden="true"] [data-role="oneline-hidden"] {
display: inline-block;
}
.js-like.active {
color: #007bff !important
}
.js-like.active::after {
content: ' 취소'
}
.btn-link.muted-link:active,
.btn-link.muted-link:focus,
.btn-link.muted-link.focus {
text-decoration: none;
}
.btn-link.muted-link.active {
color: #007bff !important
}
.js-new.active::before {
padding-left: 3px;
content: 'new';
color: red;
font-size: 80%
}
[data-role="comment-main"] .timeline-vscroll {
position: absolute;
left: 0;
right: 0;
width: 100%;
max-height: calc(100vh - 14.3rem);
overflow-y: auto;
}
.rb-comments-write {
position: absolute;
bottom: 0;
left: 0;
right: 0;
top: auto;
width: 100%;
}
.rb-comments-write .card .card-footer {
display: none
}
.rb-comments-write .card.active .card-footer {
/* display: block */
}
.media[data-role="comment-item"] {
min-width: 100% !important;
}
.media[data-role="comment-item"].border-bottom {
border-bottom: 1px dotted #dee2e6 !important;
}
.media[data-role="comment-item"].border-bottom:last-child {
border-bottom: 0 !important;
}
.list-group-item[data-role="oneline-item"] {
border-style: dotted;
}
.rb-comments-write {
background-color: #fff
}
.rb-comments-write .form-control {
max-height: 250px;
background-color: transparent;
resize: none;
-webkit-transition: height 1s;
transition: height 1s;
transition-delay: 1s;
-webkit-transition-delay: 1s;
}
.rb-comments-write .input-group-text {
border: 0
}
.rb-comments-write .form-control:focus {
color: #495057;
background-color: transparent;
border: 0;
outline: 0;
box-shadow: none
}
[data-role="comment-input-wrapper"] .js-submit .fa {
display: inline-block;
margin-top: -3px;
font-size: 20px;
color: #0084FF;
}
.form-control {
background-color: #fafbfc;
}
.list-group:empty {
margin-top: 0 !important;
margin-bottom: 0 !important
}
.flex-column-reverse .list-group-item:last-child {
margin-bottom: -1px;
}
/* notify */
#commentting-container,
[data-role=comment-container],
[data-role=moreBtn-container] {
position: relative;
}
#comment-notify {
visibility: hidden;
width: 100%;
position: absolute;
z-index: 1;
bottom: 30px;
top: auto
}
#comment-notify .comment-notify-msg {
width: 80%;
margin: 0 auto;
background-color: #333;
color: #fff;
text-align: center;
border-radius: 5px;
padding: 12px 6px;
font-size: 14px;
}
#comment-notify.active {
visibility: visible;
-webkit-animation: fadein 0.5s, fadeout 0.5s 1.1s;
animation: fadein 0.5s, fadeout 0.5s 1.1s;
}
@-webkit-keyframes fadein {
from {
bottom: 0;
opacity: 0;
}
to {
bottom: 30px;
opacity: 1;
}
}
@keyframes fadein {
from {
bottom: 0;
opacity: 0;
}
to {
bottom: 30px;
opacity: 1;
}
}
@-webkit-keyframes fadeout {
from {
bottom: 30px;
opacity: 1;
}
to {
bottom: 0;
opacity: 0;
}
}
@keyframes fadeout {
from {
bottom: 30px;
opacity: 1;
}
to {
bottom: 0;
opacity: 0;
}
}
/* notify */
/* attach trigger */
#commentting-container .comment-attach {
position: relative;
display: block;
height: 100%;
width: 100%;
padding: 8px 0;
cursor: pointer;
}
#commentting-container span.comment-attach input[type='file'] {
cursor: pointer;
position: absolute;
display: block;
top: 0;
right: -9px;
margin: 0;
padding: 0;
opacity: 0;
font-size: 0;
width: 180%;
height: 100%;
}
/* emoticon */
#commentting-container .emoticon-wrapper {
display: none;
overflow: hidden;
padding: 15px 5px;
}
#commentting-container .emoticon-wrapper ul {
padding: 0;
margin: 0;
width: 100%;
}
#commentting-container .emoticon-wrapper li {
display: inline-block;
float: left;
text-align: center;
width: 12.5%;
cursor: pointer;
}
#commentting-container .emoticon-wrapper li img {
width: 25px;
height: 25px;
border-radius: 100%;
}
[data-role|=oneline-input-wrapper],
[data-role|=comment-modify-btn-wrapper],
[data-role|=oneline-modify-btn-wrapper] {
display: none;
}
/* loader */
#comment-spinner-wrap {
position: absolute;
left: 50%;
}
.comment-top5p {
top: 5%;
}
.comment-bottom5p {
bottom: 5%;
}
[data-role="comment-input"] {
overflow: auto;
-ms-overflow-style: -ms-autohiding-scrollbar;
}
.pswp .ck.ck-editor__editable_inline>:first-child,
.modal .ck.ck-editor__editable_inline>:first-child {
margin-top: 2px;
}
.pswp .ck.ck-editor__editable_inline>:last-child,
.modal .ck.ck-editor__editable_inline>:last-child {
margin-bottom: 2px;
}
.ck-editor__editable.ck-blurred {
border : 1px solid #ccc
}
.ck.ck-editor__editable:not(.ck-editor__nested-editable).ck-focused {
outline: none;
border-radius: 0;
box-shadow: none;
}
.ck.ck-block-toolbar-button,
.ck.ck-balloon-panel {
z-index: 1060
}
.ck.ck-block-toolbar-button {
margin-left: 10px;
background-color: #e6e6e6
}
.ck.ck-balloon-panel {
z-index: 999999;
}
figure.ck.ck-placeholder:before,
.ck figure.ck-placeholder:before {
content: none;
}
[data-role="comment-input-wrapper"] [data-role="comment-input"] {
max-width: 460px
}
.ck.ck-toolbar {
background: #fff;
padding: 0;
border: none;
}

View File

@@ -0,0 +1,9 @@
<div data-role="{$entry_type}-modify-btn-wrapper-{$uid}">
<div class="d-flex justify-content-between my-2">
<div>
<button class="btn btn-light btn-sm" data-toggle="cancel-edit" data-type="{$entry_type}" data-uid="{$uid}">수정취소</button>
<button class="btn btn-primary btn-sm" data-kcact="edit" data-type="{$entry_type}" data-uid="{$uid}" data-parent="{$parent}">수정완료</button>
</div>
<div class="toolbar-container"></div>
</div>
</div>

View File

@@ -0,0 +1,12 @@
<div class="btn-group">
<button class="btn btn-link btn-sm dropdown-toggle" type="button" data-toggle="dropdown" data-role="showHide-menu" data-type="{$entry_type}">
</button>
<div class="dropdown-menu dropdown-menu-right" data-role="menu-container-{$entry_type}">
<button class="dropdown-item" data-toggle="edit" data-type="{$entry_type}" data-uid="{$uid}">
<i class="fa fa-edit"></i> 수정
</button>
<button class="dropdown-item" data-kcact="delete" data-type="{$entry_type}" data-uid="{$uid}" data-parent="{$entry_parent}">
<i class="fa fa-trash-o"></i> 삭제
</button>
</div>
</div>

View File

@@ -0,0 +1,57 @@
<!-- 공통 사항 data-* ="*" 과 {$*} 는 수정 금지 -->
<header class="d-flex justify-content-start px-3" data-role="header-container">
{$comment_header} <!-- 댓글 header : comment_header.html -->
</header>
<main data-role="comment-main">
<nav class="d-flex align-items-center px-3">
<div class="btn-group btn-group-sm btn-group-toggle" data-toggle="buttons" role="group">
<label class="btn btn-link muted-link active" data-kcact="changeSort" data-sort="uid" data-orderby="asc">
<input type="radio" name="changeSort" id="sort_uid_asc" autocomplete="off" checked> 최신순
</label>
<label class="btn btn-link muted-link" data-kcact="changeSort" data-sort="uid" data-orderby="desc">
<input type="radio" name="changeSort" id="sort_uid_desc" autocomplete="off"> 과거순
</label>
<label class="btn btn-link muted-link" data-kcact="changeSort" data-sort="likes" data-orderby="desc">
<input type="radio" name="changeSort" id="sort_likes_desc" autocomplete="off"> 추천순
</label>
</div>
<button type="button" class="btn btn-link muted-link btn-sm d-print-none ml-auto" role="button" data-kcact="reload" data-toggle="tooltip" title="새로고침">
<i class="fa fa-refresh" aria-hidden="true"></i>
</button>
</nav>
<div class="timeline-vscroll border-top pb-3">
<ul class="list-unstyled mb-0" data-role="comment-container"> <!-- 댓글 출력부 : comment_row.html -->
{$comment_rows}
</ul>
<div data-role="btnMore-container"> <!-- 더보기 버튼 -->
<div class="p-3">
<a class="btn btn-block btn-light" data-role="trigger-getMoreComment">더보기</a>
</div>
</div>
</div>
</main>
<div class="d-none animated fadeIn" data-role="comment-none">
<div class="d-flex justify-content-center align-items-center">
<div class="text-muted text-center">
<div class="display-2 mb-3">
<i class="fa fa-comment-o" aria-hidden="true"></i>
</div>
<button type="button" class="btn btn-link text-muted js-comment-focus">첫번째 댓글을 남겨주세요.</button>
</div>
</div>
</div>
<div class="rb-comments-write border-top py-1 px-2" data-role="commentWrite-container"> <!-- 댓글 입렵부 : comment_write.html -->
{$comment_write}
</div>
<script>
$('[data-toggle="tooltip"]').tooltip()
</script>

View File

@@ -0,0 +1 @@
<span class="d-none" data-role="show-totalRow">{$comment_total}</span>

View File

@@ -0,0 +1,74 @@
<li class="media border-bottom p-3 bg-white" data-role="comment-item" id="CMT-{$comment_uid}" data-uid="{$comment_uid}" data-page="{$comment_page}" data-totalPage="{$total_page}" data-type="comment" data-hidden="{$comment_getHidden}" data-notice="{$comment_getNoitce}">
<img class="mr-3 border rounded-circle" src="{$comment_user_pic}" alt="아바타" style="width:38px" data-toggle="popover" data-content="{$comment_user_name}" role="button">
<div class="media-body">
<div class="d-flex w-100 justify-content-between align-items-center">
<span>
<span data-role="comment-hidden" class="badge"><i class="fa fa-lock fa-lg" aria-hidden="true"></i></span>
<strong class="mr-2" data-toggle="popover" data-content="{$comment_user_name}" role="button">{$comment_user_name}</strong>
<i class="fa fa-clock-o" aria-hidden="true"></i>
<time data-role="comment-time-wrapper-{$comment_uid}">{$comment_regis_time}</time>
<small class="ml-1 {$comment_getNew}"></small><!-- 24시간이내 new 출력 -->
</span>
<span>
{$btn_showHideMenu} <!-- 메뉴 출력/숨기 버튼 btn_showHideMenu.html : 권한이 있는 경우(로그인,작성자,관리자) 에만 노출됨 -->
</span>
</div><!-- /.d-flex -->
<div class="rb-article">
<article data-role="comment-origin-content-{$comment_uid}">{$comment_content}</article>
<article class="border" style="display:none" data-role="comment-content-editable-{$comment_uid}">{$comment_content}</article>
</div>
{$btn_editMod} <!-- 수정 모드시 취소/완료 버튼 btn_ediMod.html -->
<div class="mt-1">
<button class="btn btn-link btn-sm add-comment px-0 muted-link" data-role="toggle-oneline-input" data-parent="{$comment_uid}">
<i class="fa fa-comment-o fa-fw" aria-hidden="true"></i>
의견달기
</button>
<button class="btn btn-link btn-sm muted-link js-like pr-0 {$comment_getIsLiked}"
data-kcact="like"
data-type="comment"
data-entry="{$comment_uid}"
data-effect="animated bounceIn delay-1"
data-role="comment-isLiked-{$comment_uid}">
<i class="fa fa-thumbs-o-up fa-fw" aria-hidden="true"></i>
좋아요
</button>
<a href="#modal_reaction" class="badge badge-light"
data-toggle="modal"
data-type="comment"
data-count="{$comment_like_total}"
data-entry="{$comment_uid}"
data-role="comment-likeTotal-{$comment_uid}" title="좋아요한 사람">
{$comment_like_total}
</a>
</div>
<section>
<div class="my-2" data-role="oneline-input-wrapper-{$comment_uid}"> <!-- 한줄의견 등록폼 -->
<div class="d-flex justify-content-between align-items-end">
<section class="w-100 align-self-center border">
<div data-role="editor">
<div data-role="oneline-input-{$comment_uid}" class="py-1 border-0"></div>
</div>
</section>
<div class="d-flex">
<div class="toolbar-container"></div>
<button class="btn btn-light ml-1" type="submit"
title="의견추가"
data-kcact="regis"
data-type="oneline"
data-parent="{$comment_uid}"
data-effect="animated fadeInUp"
data-grant="{$grant_uid}">
등록
</button>
</div>
</div><!-- /.d-flex -->
</div>
<ul class="list-group" data-role="oneline-container-{$comment_uid}">
{$oneline_rows} <!-- 한줄의견 리스트 -->
</ul>
</section>
</div>
</li>

View File

@@ -0,0 +1,74 @@
<li class="media border-bottom p-3 bg-white" data-role="comment-item" id="CMT-{$comment_uid}" data-uid="{$comment_uid}" data-page="{$comment_page}" data-totalPage="{$total_page}" data-type="comment" data-hidden="{$comment_getHidden}" data-notice="{$comment_getNoitce}">
<img class="mr-3 border rounded-circle" src="{$comment_user_pic}" alt="아바타" style="width:38px" data-toggle="popover" data-content="{$comment_user_name}" role="button">
<div class="media-body">
<div class="d-flex w-100 justify-content-between align-items-center">
<span>
<strong class="mr-2" data-toggle="popover" data-content="{$comment_user_name}" role="button">{$comment_user_name}</strong>
<i class="fa fa-clock-o" aria-hidden="true"></i>
<time data-role="comment-time-wrapper-{$comment_uid}">{$comment_regis_time}</time>
<small class="ml-1 {$comment_getNew}"></small><!-- 24시간이내 new 출력 -->
</span>
<span>
{$btn_showHideMenu} <!-- 메뉴 출력/숨기 버튼 btn_showHideMenu.html : 권한이 있는 경우(로그인,작성자,관리자) 에만 노출됨 -->
</span>
</div><!-- /.d-flex -->
<div class="rb-article">
<article data-role="comment-content-editable-{$comment_uid}">
<div class="text-center text-muted bg-light p-4 my-2"><i class="fa fa-lock fa-fw" aria-hidden="true"></i> 비밀글</div>
</article>
</div>
{$btn_editMod} <!-- 수정 모드시 취소/완료 버튼 btn_ediMod.html -->
<div class="mt-1">
<button class="btn btn-link btn-sm add-comment px-0 muted-link" data-role="toggle-oneline-input" data-parent="{$comment_uid}">
<i class="fa fa-comment-o fa-fw" aria-hidden="true"></i>
의견달기
</button>
<button class="btn btn-link btn-sm muted-link js-like pr-0 {$comment_getIsLiked}"
data-kcact="like"
data-type="comment"
data-entry="{$comment_uid}"
data-effect="animated bounceIn delay-1"
data-role="comment-isLiked-{$comment_uid}">
<i class="fa fa-thumbs-o-up fa-fw" aria-hidden="true"></i>
좋아요
</button>
<a href="#modal_reaction" class="badge badge-light"
data-toggle="modal"
data-type="comment"
data-count="{$comment_like_total}"
data-entry="{$comment_uid}"
data-role="comment-likeTotal-{$comment_uid}" title="좋아요한 사람">
{$comment_like_total}
</a>
</div>
<section>
<div class="my-2" data-role="oneline-input-wrapper-{$comment_uid}"> <!-- 한줄의견 등록폼 -->
<div class="d-flex justify-content-between align-items-end">
<section class="w-100 align-self-center border">
<div data-role="editor">
<div data-role="oneline-input-{$comment_uid}" class="py-1 border-0"></div>
</div>
</section>
<div class="d-flex">
<div class="toolbar-container"></div>
<button class="btn btn-light ml-1" type="submit"
title="의견추가"
data-kcact="regis"
data-type="oneline"
data-parent="{$comment_uid}"
data-effect="animated fadeInUp"
data-grant="{$grant_uid}">
등록
</button>
</div>
</div><!-- /.d-flex -->
</div>
<ul class="list-group" data-role="oneline-container-{$comment_uid}">
{$oneline_rows} <!-- 한줄의견 리스트 -->
</ul>
</section>
</div>
</li>

View File

@@ -0,0 +1,62 @@
<!-- 참조사항
1. 등록폼에 등록자 아바타가 필요한 경우 : <img src="{$login_user_pic}">
2. data-*="*" 필수
-->
<div class="d-flex border-0 rounded-0 bg-faded align-items-end" data-role="comment-input-wrapper">
<div class="border-0">
<span class="input-group-text p-1 bg-transparent">
<img src="{$login_user_pic}" width="28" class="rounded-circle border">
</span>
</div>
<section class="w-100 mb-1">
<div data-role="editor">
<div data-role="comment-input" id="meta-description-content" class="border-0"></div>
</div>
</section>
<div class="d-flex ml-auto">
<div class="toolbar-container"></div>
<button type="button" class="btn btn-link ml-1 js-submit "
data-kcact="regis"
data-type="comment"
data-effect="animated fadeInUp"
data-parent="{$comment_parent}">
<i class="fa fa-paper-plane" aria-hidden="true"></i>
</button>
</div>
</div>
<script>
$('[data-role="commentWrite-container"] textarea').on('keyup', function(event) {
var writeLine = $('[data-role="commentWrite-container"]')
writeLine.find('.js-submit').addClass('d-none').removeClass("animated bounceIn delay-3");
if ($(this).val().length >= 1) {
writeLine.find('.js-submit').removeClass('d-none').addClass("animated bounceIn delay-3");
}
});
var textarea_container = $('[data-role="comment-input-wrapper"]')
var textarea = $('#meta-description-content');
textarea.focus(function(){
textarea_container.addClass('active')
});
textarea.blur(function(){
setTimeout(function(){
textarea_container.removeClass('active')
}, 200);
});
// 댓글이 등록된 후에
$('#commentting-container').on('saved.rb.comment',function(){
textarea.removeAttr("style");
})
</script>

View File

@@ -0,0 +1 @@
<img src="{$emoticon_src}" style="width:50px"/>

View File

@@ -0,0 +1 @@

View File

@@ -0,0 +1,22 @@
<li class="list-group-item flex-column align-items-start p-0 border-left-0 rounded-0 list-group-item-light" data-role="oneline-item" id="OLN-{$oneline_uid}" data-uid="{$oneline_uid}" data-type="oneline" data-hidden="{$oneline_getHidden}">
<blockquote class="py-2">
<div class="d-flex w-100 justify-content-between align-items-center">
<span>
<span data-role="oneline-hidden" class="badge"><i class="fa fa-lock fa-lg" aria-hidden="true"></i></span>
<cite data-toggle="popover" data-content="{$oneline_user_name}" role="button">{$oneline_user_name}</cite>
<time class="small text-muted ml-2" data-role="oneline-time-wrapper-{$oneline_uid}">
{$oneline_regis_time}
</time>
<small class="ml-1 {$oneline_getNew}"></small><!-- 24시간이내 new 출력 -->
</span>
<span>
{$btn_showHideMenu} <!-- 메뉴 출력/숨기 버튼 btn_showHideMenu.html : 권한이 있는 경우(로그인,작성자,관리자) 에만 노출됨 -->
</span>
</div>
<article class="mb-0" data-role="oneline-origin-content-{$oneline_uid}">{$oneline_content}</article>
<article class="mb-0 bg-white" data-role="oneline-content-editable-{$oneline_uid}" style="display:none" >{$oneline_content}</article>
{$btn_editMod}
<button class="btn btn-sm btn-link text-reset" data-kcact="like" data-type="oneline" data-entry="{$oneline_uid}">좋아요 <span class="badge badge-light" data-role="oneline-likeTotal-{$oneline_uid}">{$oneline_like_total}</span></button>
</blockquote>
</li>

View File

@@ -0,0 +1,23 @@
<li class="list-group-item flex-column align-items-start p-0 border-left-0 rounded-0 list-group-item-light" data-role="oneline-item" id="OLN-{$oneline_uid}" data-uid="{$oneline_uid}" data-type="oneline" data-hidden="{$oneline_getHidden}">
<blockquote class="py-2">
<div class="d-flex w-100 justify-content-between align-items-center">
<span>
<cite data-toggle="popover" data-content="{$oneline_user_name}" role="button">{$oneline_user_name}</cite>
<time class="small text-muted ml-2" data-role="oneline-time-wrapper-{$oneline_uid}">
{$oneline_regis_time}
</time>
<small class="ml-1 {$oneline_getNew}"></small><!-- 24시간이내 new 출력 -->
</span>
<span>
{$btn_showHideMenu} <!-- 메뉴 출력/숨기 버튼 btn_showHideMenu.html : 권한이 있는 경우(로그인,작성자,관리자) 에만 노출됨 -->
</span>
</div>
<article class="mb-0" data-role="oneline-origin-content-{$oneline_uid}">
<div class="text-center text-muted border p-4 my-2"><i class="fa fa-lock fa-fw" aria-hidden="true"></i> 비밀글</div>
</article>
<article class="mb-0 bg-white" data-role="oneline-content-editable-{$oneline_uid}" style="display:none" >{$oneline_content}</article>
{$btn_editMod}
<button class="btn btn-sm btn-link text-reset" data-kcact="like" data-type="oneline" data-entry="{$oneline_uid}">좋아요 <span class="badge badge-light" data-role="oneline-likeTotal-{$oneline_uid}">{$oneline_like_total}</span></button>
</blockquote>
</li>

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

@@ -0,0 +1 @@
부트스트랩4 기본형 댓글