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,3 @@
#rb-body {
font-family: 'NotoSans', sans-serif, '돋움', dotum, sans-serif;
}

View File

@@ -0,0 +1,45 @@
<div id="_box_layer_"></div>
<div id="_action_layer_"></div>
<div id="_hidden_layer_"></div>
<div id="_overLayer_"></div>
<iframe hidden name="_action_frame_<?php echo $m?>" width="0" height="0" frameborder="0" scrolling="no"></iframe>
<?php if($my['uid']&&$m=='admin') include $g['path_core'].'engine/notification.engine.admin.php'?>
<script>
(function ($) {
'use strict'
$(function () {
var clipboard = new ClipboardJS('.js-clipboard');
clipboard.on('success', function (e) {
$(e.trigger)
.attr('title', '복사완료!')
.tooltip('_fixTitle')
.tooltip('show')
.attr('title', '클립보드 복사')
.tooltip('_fixTitle')
e.clearSelection()
})
clipboard.on('error', function (e) {
var modifierKey = /Mac/i.test(navigator.userAgent) ? '\u2318' : 'Ctrl-'
var fallbackMsg = 'Press ' + modifierKey + 'C to copy'
$(e.trigger)
.attr('title', fallbackMsg)
.tooltip('_fixTitle')
.tooltip('show')
.attr('title', 'Copy to clipboard')
.tooltip('_fixTitle')
})
})
}(jQuery))
</script>

View File

@@ -0,0 +1,100 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<meta name="apple-mobile-web-app-capable" content="no">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<meta name="robots" content="NOINDEX,NOFOLLOW">
<title><?php echo $_HS['name']?></title>
<!-- Favicons -->
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="<?php echo $g['s']?>/_core/images/ico/apple-touch-icon-144-precomposed.png">
<link rel="shortcut icon" href="<?php echo $g['s']?>/_core/images/ico/favicon.ico">
<!-- bootstrap css -->
<?php getImport('bootstrap','css/bootstrap.min','4.4.1','css')?>
<!-- jQuery -->
<?php getImport('jquery','jquery.min','3.3.1','js')?>
<?php getImport('popper.js','umd/popper.min','1.14.0','js')?>
<!-- bootstrap js -->
<?php getImport('bootstrap','js/bootstrap.min','4.4.1','js')?>
<!-- 시스템 폰트 -->
<?php getImport('font-awesome','css/font-awesome','4.7.0','css')?>
<?php getImport('font-kimsq','css/font-kimsq',false,'css')?>
<!-- 한글 NotoSans 폰트 -->
<?php getImport('NotoSans','fonts','1.0','css')?>
<!-- is-loading : https://github.com/hekigan/is-loading-->
<?php getImport('is-loading','jquery.isloading.min','1.0.6','js')?>
<!-- js-cookie : https://github.com/js-cookie/js-cookie -->
<?php getImport('js-cookie','js.cookie.min','2.2.1','js')?>
<!-- bootstrap-notify : https://github.com/mouse0270/bootstrap-notify -->
<?php getImport('bootstrap-notify','bootstrap-notify.min','3.1.3','js')?>
<?php getImport('clipboard','clipboard.min','2.0.4','js') ?>
<!-- bootstrap-toc : https://github.com/afeld/bootstrap-toc -->
<?php getImport('bootstrap-toc','bootstrap-toc','1.0.1','css')?>
<?php getImport('bootstrap-toc','bootstrap-toc.min','1.0.1','js')?>
<?php getImport('smooth-scroll','smooth-scroll.min','16.1.0','js') ?>
<!-- global css -->
<link href="<?php echo $g['url_layout']?>/_css/style.css" rel="stylesheet">
<?php
$g['incdir'] = $g['incdir']?$g['incdir']:$g['path_layout'].$d['layout']['dir'].'/_includes/';
$g['wcache'] = $d['admin']['cache_flag']?'?nFlag='.$date[$d['admin']['cache_flag']]:'';
$g['cssset'] = array
(
$g['dir_module'].'main'=>$g['url_module'].'/main',
$g['dir_module_comm']=>$g['url_module_comm'],
$g['dir_module_mode']=>$g['url_module_mode'],
$g['dir_module_admin']=>$g['url_module_admin'],
);
?>
<script>
var rooturl = '<?php echo $g['url_root']?>';
var rootssl = '<?php echo $g['ssl_root']?>';
var raccount= '<?php echo $r?>';
var moduleid= '<?php echo $m?>';
var memberid= '<?php echo $my['id']?>';
var is_admin= '<?php echo $my['admin']?>';
// 알림 기본 셋팅값 정의
$.notifyDefaults({
placement: {
from: "top",
align: "right"
},
allow_dismiss: false,
offset: 20,
type: "success",
timer: 100,
delay: 1500,
animate: {
enter: "animated fadeInDown",
exit: "animated fadeOutUp"
}
});
</script>
<link href="<?php echo $g['s']?>/_core/css/sys.css<?php echo $g['wcache']?>" rel="stylesheet">
<script src="<?php echo $g['s']?>/_core/js/sys.js<?php echo $g['wcache']?>"></script>
<?php foreach ($g['cssset'] as $_key => $_val):?>
<?php if (is_file($_key.'.css')):?>
<link href="<?php echo $_val?>.css<?php echo $g['wcache']?>" rel="stylesheet">
<?php endif?>
<?php if (is_file($_key.'.js')):?>
<script src="<?php echo $_val?>.js<?php echo $g['wcache']?>"></script>
<?php endif?>
<?php endforeach?>

View File

@@ -0,0 +1,18 @@
<?php if($noTags=='Y'):?>
<?php include __KIMS_CONTENT__ ?>
<?php else:?>
<!DOCTYPE html>
<html lang="<?php echo $lang['admin']['flag']?>">
<head>
<?php include $g['dir_layout'].'/_includes/_import.head.php' ?>
</head>
<body id="rb-body" class="lang-<?php echo $lang['admin']['flag']?><?php if($g['device']):?> rb-device-connect<?php endif?>">
<div id="content-main">
<?php include __KIMS_CONTENT__ ?>
</div>
<?php include $g['dir_layout'].'/_includes/_import.foot.php' ?>
</body>
</html>
<?php endif?>

View File

@@ -0,0 +1,3 @@
The RBL License
Copyright (c) 2020 Redblock, Inc.

View File

@@ -0,0 +1,3 @@
# 데스크탑 기본형 레이아웃
## 부트스트랩 4

View File

@@ -0,0 +1,692 @@
@charset "utf-8";
.rb-article {
-webkit-text-size-adjust: 100%;
text-size-adjust: 100%;
line-height: 1.6;
word-wrap: break-word;
}
.rb-article a {
background-color: transparent;
}
.rb-article a:active,
.rb-article a:hover {
outline: 0;
}
.rb-article strong {
font-weight: bold;
}
.rb-article h1 {
font-size: 2em;
margin: 0.67em 0;
}
.rb-article img {
border: 0;
}
.rb-article hr {
box-sizing: content-box;
height: 0;
}
.rb-article pre {
overflow: auto;
}
.rb-article code,
.rb-article kbd,
.rb-article pre {
font-family: monospace, monospace;
font-size: 1em;
}
.rb-article input {
color: inherit;
font: inherit;
margin: 0;
}
.rb-article html input[disabled] {
cursor: default;
}
.rb-article input {
line-height: normal;
}
.rb-article input[type="checkbox"] {
box-sizing: border-box;
padding: 0;
}
.rb-article table {
border-collapse: collapse;
border-spacing: 0;
}
.rb-article td,
.rb-article th {
padding: 0;
}
.rb-article * {
box-sizing: border-box;
}
.rb-article input {
font: 13px / 1.4 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
}
.rb-article a {
color: #4078c0;
text-decoration: none;
}
.rb-article a:hover,
.rb-article a:active {
text-decoration: underline;
}
.rb-article hr {
height: 0;
margin: 15px 0;
overflow: hidden;
background: transparent;
border: 0;
border-bottom: 1px solid #ddd;
}
.rb-article hr:before {
display: table;
content: "";
}
.rb-article hr:after {
display: table;
clear: both;
content: "";
}
.rb-article h1,
.rb-article h2,
.rb-article h3,
.rb-article h4,
.rb-article h5,
.rb-article h6 {
margin-top: 15px;
margin-bottom: 15px;
line-height: 1.1;
}
.rb-article h1 {
font-size: 30px;
}
.rb-article h2 {
font-size: 21px;
}
.rb-article h3 {
font-size: 16px;
}
.rb-article h4 {
font-size: 14px;
}
.rb-article h5 {
font-size: 12px;
}
.rb-article h6 {
font-size: 11px;
}
.rb-article blockquote {
margin: 0;
}
.rb-article ul,
.rb-article ol {
padding: 0;
margin-top: 0;
margin-bottom: 0;
}
.rb-article ol ol,
.rb-article ul ol {
list-style-type: lower-roman;
}
.rb-article ul ul ol,
.rb-article ul ol ol,
.rb-article ol ul ol,
.rb-article ol ol ol {
list-style-type: lower-alpha;
}
.rb-article dd {
margin-left: 0;
}
.rb-article code {
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
font-size: 12px;
}
.rb-article pre {
margin-top: 0;
margin-bottom: 0;
font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace;
}
.rb-article .select::-ms-expand {
opacity: 0;
}
.rb-article .octicon {
font: normal normal normal 16px/1 octicons-link;
display: inline-block;
text-decoration: none;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.rb-article .octicon-link:before {
content: '\f05c';
}
.rb-article:before {
display: table;
content: "";
}
.rb-article:after {
display: table;
clear: both;
content: "";
}
.rb-article>*:first-child {
margin-top: 0 !important;
}
.rb-article>*:last-child {
margin-bottom: 0 !important;
}
.rb-article a:not([href]) {
color: inherit;
text-decoration: none;
}
.rb-article .anchor {
display: inline-block;
padding-right: 2px;
margin-left: -18px;
}
.rb-article .anchor:focus {
outline: none;
}
.rb-article h1,
.rb-article h2,
.rb-article h3,
.rb-article h4,
.rb-article h5,
.rb-article h6 {
margin-top: 1em;
margin-bottom: 16px;
font-weight: bold;
line-height: 1.4;
}
.rb-article h1 .octicon-link,
.rb-article h2 .octicon-link,
.rb-article h3 .octicon-link,
.rb-article h4 .octicon-link,
.rb-article h5 .octicon-link,
.rb-article h6 .octicon-link {
color: #000;
vertical-align: middle;
visibility: hidden;
}
.rb-article h1:hover .anchor,
.rb-article h2:hover .anchor,
.rb-article h3:hover .anchor,
.rb-article h4:hover .anchor,
.rb-article h5:hover .anchor,
.rb-article h6:hover .anchor {
text-decoration: none;
}
.rb-article h1:hover .anchor .octicon-link,
.rb-article h2:hover .anchor .octicon-link,
.rb-article h3:hover .anchor .octicon-link,
.rb-article h4:hover .anchor .octicon-link,
.rb-article h5:hover .anchor .octicon-link,
.rb-article h6:hover .anchor .octicon-link {
visibility: visible;
}
.rb-article h1 {
padding-bottom: 0.3em;
font-size: 2.25em;
line-height: 1.2;
border-bottom: 1px solid #eee;
}
.rb-article h1 .anchor {
line-height: 1;
}
.rb-article h2 {
padding-bottom: 0.3em;
font-size: 1.75em;
line-height: 1.225;
border-bottom: 1px solid #eee;
}
.rb-article h2 .anchor {
line-height: 1;
}
.rb-article h3 {
font-size: 1.5em;
line-height: 1.43;
}
.rb-article h3 .anchor {
line-height: 1.2;
}
.rb-article h4 {
font-size: 1.25em;
}
.rb-article h4 .anchor {
line-height: 1.2;
}
.rb-article h5 {
font-size: 1em;
}
.rb-article h5 .anchor {
line-height: 1.1;
}
.rb-article h6 {
font-size: 1em;
color: #777;
}
.rb-article h6 .anchor {
line-height: 1.1;
}
.rb-article p,
.rb-article blockquote,
.rb-article ul,
.rb-article ol,
.rb-article dl,
.rb-article table,
.rb-article pre {
margin-top: 0;
margin-bottom: 20px;
line-height: 24px
}
.rb-article hr {
height: 4px;
padding: 0;
margin: 16px 0;
background-color: #e7e7e7;
border: 0 none;
}
.rb-article ul,
.rb-article ol {
padding-left: 2em;
}
.rb-article ul ul,
.rb-article ul ol,
.rb-article ol ol,
.rb-article ol ul {
margin-top: 0;
margin-bottom: 0;
}
.rb-article li>p {
margin-top: 16px;
}
.rb-article dl {
padding: 0;
}
.rb-article dl dt {
padding: 0;
margin-top: 16px;
font-size: 1em;
font-style: italic;
font-weight: bold;
}
.rb-article dl dd {
padding: 0 16px;
margin-bottom: 16px;
}
.rb-article blockquote {
padding: 0 15px;
color: #333;
border-left: 4px solid #ddd;
}
.rb-article blockquote>:first-child {
margin-top: 0;
}
.rb-article blockquote>:last-child {
margin-bottom: 0;
}
.rb-article table {
width: 100%;
overflow: auto;
word-break: normal;
word-break: keep-all;
}
.rb-article table th {
font-weight: bold;
}
.rb-article table th,
.rb-article table td {
padding: 6px 13px;
border: 1px solid #ddd;
}
.rb-article table tr {
background-color: #fff;
border-top: 1px solid #ccc;
}
.rb-article img {
max-width: 100%;
box-sizing: content-box;
background-color: #fff;
}
.rb-article video,
.rb-article audio {
min-width: 100%;
margin-bottom: 2rem;
background-color: #ccc
}
.rb-article video {
background: #ccc url("video-box.png") no-repeat center center
}
.rb-blog-view .rb-article video {
background: #fff url("") no-repeat center center
}
.rb-article video source::before {
content: 'videos';
text-align: center
}
.rb-article code {
padding: 0;
padding-top: 0.2em;
padding-bottom: 0.2em;
margin: 0;
font-size: 85%;
background-color: rgba(0,0,0,0.04);
border-radius: 3px;
}
.rb-article code:before,
.rb-article code:after {
letter-spacing: -0.2em;
content: "\00a0";
}
.rb-article pre>code {
padding: 0;
margin: 0;
font-size: 100%;
word-break: normal;
white-space: pre;
background: transparent;
border: 0;
}
.rb-article .highlight {
margin-bottom: 16px;
}
.rb-article .highlight pre,
.rb-article pre {
padding: 16px;
overflow: auto;
font-size: 85%;
line-height: 1.45;
background-color: #f7f7f7;
border-radius: 3px;
}
.rb-article .highlight pre {
margin-bottom: 0;
word-break: normal;
}
.rb-article pre {
word-wrap: normal;
}
.rb-article pre code {
display: inline;
max-width: initial;
padding: 0;
margin: 0;
overflow: initial;
line-height: inherit;
word-wrap: normal;
background-color: transparent;
border: 0;
}
.rb-article pre code:before,
.rb-article pre code:after {
content: normal;
}
.rb-article kbd {
display: inline-block;
padding: 3px 5px;
font-size: 11px;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb;
}
.rb-article .pl-c {
color: #969896;
}
.rb-article .pl-c1,
.rb-article .pl-s .pl-v {
color: #0086b3;
}
.rb-article .pl-e,
.rb-article .pl-en {
color: #795da3;
}
.rb-article .pl-s .pl-s1,
.rb-article .pl-smi {
color: #333;
}
.rb-article .pl-ent {
color: #63a35c;
}
.rb-article .pl-k {
color: #a71d5d;
}
.rb-article .pl-pds,
.rb-article .pl-s,
.rb-article .pl-s .pl-pse .pl-s1,
.rb-article .pl-sr,
.rb-article .pl-sr .pl-cce,
.rb-article .pl-sr .pl-sra,
.rb-article .pl-sr .pl-sre {
color: #183691;
}
.rb-article .pl-v {
color: #ed6a43;
}
.rb-article .pl-id {
color: #b52a1d;
}
.rb-article .pl-ii {
background-color: #b52a1d;
color: #f8f8f8;
}
.rb-article .pl-sr .pl-cce {
color: #63a35c;
font-weight: bold;
}
.rb-article .pl-ml {
color: #693a17;
}
.rb-article .pl-mh,
.rb-article .pl-mh .pl-en,
.rb-article .pl-ms {
color: #1d3e81;
font-weight: bold;
}
.rb-article .pl-mq {
color: #008080;
}
.rb-article .pl-mi {
color: #333;
font-style: italic;
}
.rb-article .pl-mb {
color: #333;
font-weight: bold;
}
.rb-article .pl-md {
background-color: #ffecec;
color: #bd2c00;
}
.rb-article .pl-mi1 {
background-color: #eaffea;
color: #55a532;
}
.rb-article .pl-mdr {
color: #795da3;
font-weight: bold;
}
.rb-article .pl-mo {
color: #1d3e81;
}
.rb-article kbd {
display: inline-block;
padding: 3px 5px;
font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb;
}
.rb-article .task-list-item {
list-style-type: none;
}
.rb-article .task-list-item+.task-list-item {
margin-top: 3px;
}
.rb-article .task-list-item input {
margin: 0 0.35em 0.25em -1.6em;
vertical-align: middle;
}
.rb-article :checked+.radio-label {
z-index: 1;
position: relative;
border-color: #4078c0;
}
/*추가함*/
.rb-article .rb-media {
margin: 0;
margin-bottom: 2em;
}
.rb-article .rb-media figcaption {
margin-top: 10px;
padding-left: 10px;
padding-right: 10px;
font-size: 14px;
color: #777;
line-height: 1.6;
}
.rb-article .rb-media figcaption:before {
padding-right: 7px;
content: '▲';
font-size: 14px;
}
.rb-article figure {
margin: 0 0 2rem;
}

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 558 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 894 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.8 KiB

View File

@@ -0,0 +1,41 @@
<?php
//사이트별 레이아웃 설정 변수
$layout = dirname($_HS['layout']);
$g['layoutVarForSite'] = $g['dir_var_site'].'layout.'.$layout.'.var.php';
include is_file($g['layoutVarForSite']) ? $g['layoutVarForSite'] : $g['dir_layout'].'_var/_var.php';
//사이트 부가정보 변수
$g['siteinfo'] = $g['dir_var_site'].'siteinfo.php';
if (is_file($g['siteinfo'])) include $g['siteinfo'];
//사이트별 웹앱 매니페스트
$g['manifestForSite'] = $g['dir_var_site'].'manifest.json';
$g['url_manifest'] = $g['url_var_site'].'/manifest.json';
$manifestForSite = file_exists($g['manifestForSite']) ? $g['url_manifest'] : $g['path_module'].'site/var/manifest.json';
// 레이아웃 내장 메인페이지에 home 레이아웃 적용
if (strstr($g['main'],$g['dir_layout']) && !$prelayout && !$layoutPage) {
$d['layout']['php'] = $d['layout']['dir'].'/home.php';
}
if (isset($layoutPage)){
$g['dir_module_mode'] = $g['dir_layout'].'/_pages/'.$layoutPage;
$g['url_module_mode'] = $g['url_layout'].'/_pages/'.$layoutPage;
$g['main'] = $g['dir_layout'].'/_pages/'.$layoutPage.'.php';
}
function getLayoutLogo($layout,$mod) {
if ($mod=='header') {
if ($layout['header_logo']) {
return '<a class="navbar-brand p-0" href="'.RW(0).'" style="background-image:url('.$GLOBALS['g']['url_var_site'].'/'.$layout['header_logo'].$GLOBALS['g']['wcache'].');background-size:'.$layout['header_logo_size'].'%;background-position:'.$layout['header_logo_position'].'% 50%"></a>';
} else {
return '<a class="navbar-brand p-0" href="'.RW(0).'">'.$layout['header_title'].'</a>';
}
} elseif ($mod=='footer' && $layout['footer_logo']) {
return '<div class="footer-logo" style="background-image:url('.$GLOBALS['g']['url_var_site'].'/'.$layout['footer_logo'].$GLOBALS['g']['wcache'].');background-size:'.$layout['footer_logo_size'].'%;'.($layout['footer_logo_gray']=='true'?'filter: grayscale(100%)':'').'"></div>';
} else {
return;
}
}
?>

View File

@@ -0,0 +1,53 @@
<!-- 엔진코드:삭제하지마세요 -->
<?php include $g['path_core'].'engine/foot.engine.php'?>
<!-- 포토모달 : photoswipe http://photoswipe.com/documentation/getting-started.html -->
<?php getImport('photoswipe','photoswipe','4.1.1','css') ?>
<?php getImport('photoswipe','default-skin/default-skin','4.1.1','css') ?>
<?php getImport('photoswipe','photoswipe.min','4.1.1','js') ?>
<?php getImport('photoswipe','photoswipe-ui-default.min','4.1.1','js') ?>
<script src="<?php echo $g['url_layout']?>/_js/photoswipe.js"></script>
<!-- 소셜공유시 URL 클립보드저장 : clipboard.js : https://github.com/zenorocha/clipboard.js-->
<?php getImport('clipboard','clipboard.min','2.0.4','js') ?>
<!-- 입력 textarea 자동확장 -->
<?php getImport('autosize','autosize.min','3.0.14','js')?>
<!-- markjs js : https://github.com/julmot/mark.js -->
<?php getImport('markjs','jquery.mark.min','8.11.1','js')?>
<!-- linkifyjs : https://github.com/Soapbox/linkifyjs -->
<?php getImport('linkifyjs','linkify.min','2.1.8','js')?>
<?php getImport('linkifyjs','linkify-string.min','2.1.8','js')?>
<!-- bootstrap-notify : https://github.com/mouse0270/bootstrap-notify -->
<?php getImport('bootstrap-notify','bootstrap-notify.min','3.1.3','js')?>
<!-- 댓글출력시 필요 -->
<?php if ($g['broswer']!='MSIE 11' && $g['broswer']!='MSIE 10' && $g['broswer']!='MSIE 9'): ?>
<?php if ($mod!='write' && $my['uid']): ?>
<script src="https://cdn.ckeditor.com/ckeditor5/21.0.0/decoupled-document/ckeditor.js"></script>
<script src="https://cdn.ckeditor.com/ckeditor5/21.0.0/decoupled-document/translations/ko.js"></script>
<?php endif; ?>
<script src="<?php echo $g['url_root']?>/modules/comment/lib/Rb.comment.js<?php echo $g['wcache']?>"></script>
<?php else: ?>
<script src="<?php echo $g['url_root']?>/modules/comment/lib/Rb.comment.old.js"></script>
<?php endif; ?>
<!-- 레이아웃 공용 스크립트 -->
<script src="<?php echo $g['url_layout']?>/_js/main.js<?php echo $g['wcache']?>"></script>
<?php if($_SERVER['HTTPS'] == 'on' && $g['broswer']!='MSIE 10' && $g['broswer']!='MSIE 11'):?>
<script>
if ('serviceWorker' in navigator && 'PushManager' in window) {
console.log('서비스워커와 푸시가 지원되는 브라우저 입니다.');
window.addEventListener('load', () => {
navigator.serviceWorker.register('<?php echo $g['s']?>/sw.js');
});
} else {
console.warn('푸시 메시징이 지원되지 않는 브라우저 입니다.');
}
</script>
<?php endif?>

View File

@@ -0,0 +1,74 @@
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<!-- Seo -->
<meta name="robots" content="<?php echo strip_tags($g['meta_bot'])?>">
<meta name="title" content="<?php echo strip_tags($g['meta_tit'])?>">
<meta name="keywords" content="<?php echo strip_tags($g['meta_key'])?>">
<meta name="description" content="<?php echo strip_tags($g['meta_des'])?>">
<meta name="author" content="<?php echo $_HS['name'] ?>">
<link rel="image_src" href="<?php echo strip_tags($g['meta_img'])?>">
<link rel="canonical" href="<?php echo strip_tags($g['url_root'].$_SERVER['REQUEST_URI'])?>">
<meta property="og:site_name" content="<?php echo $_HS['name'] ?>">
<meta property="og:locale" content="ko_KR">
<meta property="og:type" content="article">
<meta property="og:url" content="<?php echo strip_tags($g['url_root'].$_SERVER['REQUEST_URI'])?>">
<meta property="og:title" content="<?php echo strip_tags($g['meta_tit'])?>">
<meta property="og:description" content="<?php echo strip_tags($g['meta_des'])?>">
<meta property="og:image" content="<?php echo strip_tags($g['meta_img'])?>">
<title><?php echo $g['browtitle']?></title>
<!-- 파비콘 -->
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="<?php echo $g['img_layout']?>/icon/homescreen.png">
<link rel="shortcut icon" href="<?php echo $g['img_layout']?>/icon/favicon.ico">
<!-- 웹앱 매니페스트 -->
<link rel="manifest" href="<?php echo $manifestForSite?>">
<!-- 사이트 헤드 코드 -->
<?php echo $_HS['headercode']?>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<!-- bootstrap css -->
<?php getImport('bootstrap','css/bootstrap.min','4.4.1','css')?>
<!-- jQuery -->
<?php getImport('jquery','jquery.min','3.3.1','js')?>
<?php getImport('popper.js','umd/popper.min','1.14.0','js')?>
<!-- bootstrap js -->
<?php getImport('bootstrap','js/bootstrap.min','4.4.1','js')?>
<!-- 시스템 폰트 -->
<?php getImport('font-awesome','css/font-awesome','4.7.0','css')?>
<?php getImport('font-kimsq','css/font-kimsq',false,'css')?>
<!-- anchorjs : https://github.com/bryanbraun/anchorjs -->
<?php getImport('anchorjs','anchor.min','4.2.0','js')?>
<!-- smooth-scroll: https://github.com/cferdinandi/smooth-scroll -->
<?php getImport('smooth-scroll','smooth-scroll.polyfills.min','16.1.0','js') ?>
<!-- 엔진코드:삭제하지마세요 -->
<?php include $g['path_core'].'engine/cssjs.engine.php' ?>
<!-- 레이아웃 스타일 -->
<link href="<?php echo $g['url_layout']?>/_css/style.css<?php echo $g['wcache']?>" rel="stylesheet">
<!-- 레이아웃 본문 컨텐츠 스타일 -->
<link href="<?php echo $g['s']?>/_core/css/article.css<?php echo $g['wcache']?>" rel="stylesheet">
<?php
if (file_exists($g['dir_layout'].'/_css/custom.css')) {
echo '<link href="'.$g['url_layout'].'/_css/custom.css'.$g['wcache'].'" rel="stylesheet">'; // 커스텀 레이아웃 스타일
}
?>
<!-- timeago : 상대시간 표기 -->
<?php getImport('jquery-timeago','jquery.timeago','1.6.7','js')?>
<?php getImport('jquery-timeago','locales/jquery.timeago.ko','1.6.7','js')?>

View File

@@ -0,0 +1,58 @@
<?php
// seo 데이타 -- 전송되는 타이틀 추출
$_MSEO = getDbData($table['s_seo'],'rel=1 and parent='.$_HM['uid'],'*');
$_PSEO = getDbData($table['s_seo'],'rel=2 and parent='.$_HP['uid'],'*');
$_WTIT=strip_tags($g['meta_tit']);
//$_link_domain = 'http'.($_SERVER['HTTPS']=='on'?'s':'').'://';
//$_link_url = $_link_domain.$_SERVER['REQUEST_URI']; // URL
$_link_url=$g['url_root'].$_SERVER['REQUEST_URI'];
?>
<ul class="list-inline mb-3">
<li data-toggle="tooltip" title="페이스북" class="list-inline-item">
<a href="" role="button">
<img src="<?php echo $g['img_core']?>/sns/facebook.png" alt="페이스북공유" class="rounded-circle" width="48">
</a>
</li>
<li data-toggle="tooltip" title="카카오스토리" class="list-inline-item">
<a href="" role="button">
<img src="<?php echo $g['img_core']?>/sns/kakaostory.png" alt="카카오스토리" class="rounded-circle" width="48">
</a>
</li>
<li data-toggle="tooltip" title="네이버" class="list-inline-item">
<a href="" role="button">
<img src="<?php echo $g['img_core']?>/sns/naver.png" alt="네이버" class="rounded-circle" width="48">
</a>
</li>
<li data-toggle="tooltip" title="트위터" class="list-inline-item">
<a href="" role="button">
<img src="<?php echo $g['img_core']?>/sns/twitter.png" alt="트위터" class="rounded-circle" width="48">
</a>
</li>
<li data-toggle="tooltip" title="메일보내기" class="list-inline-item">
<a href="mailto:<?php if($my['uid']):?><?php echo $my['email']?><?php endif?>?subject=경기방송%20기사공유-<?php echo $_WTIT?>&body=<?php echo $_link_url?>">
<img src="<?php echo $g['img_core']?>/sns/mail.png" alt="메일" class="rounded-circle" width="48">
</a>
</li>
</ul>
<script type="text/javascript">
// sns 이벤트
function snsWin(sns)
{
var snsset = new Array();
var enc_tit = "<?php echo urlencode($_HS['title'])?>";
var enc_sbj = "<?php echo urlencode($_WTIT)?>";
var enc_url = "<?php echo urlencode($_link_url)?>";
var enc_tag = "<?php echo urlencode(str_replace(',',' ',$R['tag']))?>";
snsset['t'] = 'https://twitter.com/intent/tweet?url=' + enc_url + '&text=' + enc_sbj;
snsset['f'] = 'http://www.facebook.com/sharer.php?u=' + enc_url;
snsset['n'] = 'http://share.naver.com/web/shareView.nhn?url=' + enc_url + '&title=' + enc_sbj;
snsset['ks'] = 'https://story.kakao.com/share?url=' + enc_url + '&title=' + enc_sbj;
window.open(snsset[sns]);
}
</script>

View File

@@ -0,0 +1,13 @@
<nav aria-label="breadcrumb" class="border-bottom">
<div class="<?php echo $d['layout']['sub_container'] ?> px-0">
<div class="d-flex justify-content-between align-items-center">
<ol class="breadcrumb mb-0">
<?php echo $g['location']?>
</ol>
<div class="">
</div>
</div>
</div>
</nav>

View File

@@ -0,0 +1,7 @@
<div class="d-flex d-flex justify-content-end">
<nav aria-label="breadcrumb">
<ol class="breadcrumb mb-0 py-0">
<?php echo $g['location']?>
</ol>
</nav>
</div>

View File

@@ -0,0 +1,349 @@
<!--
컴포넌트 모음
1. 일반모달 : 회원가입
2. 일반모달 : 로그인
3. 일반모달 : 알림
4. 일반모달 : 게시물 보기
5. 일반모달 : 게시물 쓰기
6. 포토모달 : 댓글형
7. 포토모달 : 갤러리형
8. 마크업 참조: 링크공유
-->
<!-- 1. 일반모달 : 회원가입 -->
<?php include_once $g['path_module'].'member/themes/'.$d['member']['theme_main'].'/join/component.php'; ?>
<!-- 2. 일반모달 : 로그인 -->
<?php include_once $g['path_module'].'member/themes/'.$d['member']['theme_main'].'/login/component.php'; ?>
<!-- 3. 일반모달 : 알림 -->
<?php include_once $g['path_module'].'member/themes/'.$d['member']['theme_main'].'/noti/component.php'; ?>
<!-- 4. 일반모달 : 게시물 보기-->
<div class="modal" id="modal-bbs-view" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<input type="hidden" name="bid" value="">
<input type="hidden" name="uid" value="">
<div class="modal-dialog modal-lg" role="document" style="max-width: 95%">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" data-role="title">게시물 보기</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close" data-toggle="tooltip" title="닫기(Esc)">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body p-0">
<div class="row no-gutters">
<main class="col-7">
<div data-role="article"></div>
</main>
<aside class="col-5 border-left">
<div class="commentting-container" data-role="comment-area"></div>
<div data-role="comment-alert" class="d-none">
<div class="d-flex align-items-center justify-content-center text-muted" style="height: calc(100vh - 9.5rem);">
댓글이 지원되지 않습니다.
</div>
</div>
</aside>
</div><!-- /.row -->
</div><!-- /.modal-body -->
</div>
</div>
</div>
<!-- 5. 일반모달 : 게시물 쓰기 -->
<?php
if ($m=='bbs') {
$bbs_component = $g['path_module'].'bbs/themes/'.$d['bbs']['skin'].'/component.php';
if (file_exists($bbs_component)) include_once $bbs_component;
}
?>
<!-- 6. 포토모달 : 댓글형 -->
<div class="pswp pswp-comment" tabindex="-1" role="dialog" aria-hidden="true">
<input type="hidden" name="uid" value="">
<input type="hidden" name="bid" value="">
<div class="pswp__bg"></div>
<!-- Slides wrapper with overflow:hidden. -->
<div class="pswp__scroll-wrap">
<!-- Container that holds slides.
PhotoSwipe keeps only 3 of them in the DOM to save memory.
Don't modify these 3 pswp__item elements, data is added later on. -->
<div class="pswp__container">
<div class="pswp__item"></div>
<div class="pswp__item"></div>
<div class="pswp__item"></div>
</div>
<!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
<div class="pswp__ui pswp__ui--hidden">
<div class="pswp__top-bar">
<!-- Controls are self-explanatory. Order can be changed. -->
<div class="pswp__subject">
<span data-role="category" class="text-primary"></span>
<span data-role="subject"></span>
</div>
<div class="pswp__counter"></div>
<button class="pswp__button pswp__button--fs" data-toggle="tooltip" title="전체 화면으로 보기"></button>
<!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->
<!-- element will get class pswp__preloader-active when preloader is running -->
<div class="pswp__preloader">
<div class="pswp__preloader__icn">
<div class="pswp__preloader__cut">
<div class="pswp__preloader__donut"></div>
</div>
</div>
</div>
</div>
<div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
<div class="pswp__share-tooltip"></div>
</div>
<button class="pswp__button pswp__button--arrow--left" title="이전">
</button>
<button class="pswp__button pswp__button--arrow--right" title="다음">
</button>
<div class="pswp__caption">
<div class="pswp__caption__center"></div>
</div>
</div>
</div>
<div class="rb__area">
<div data-role="article"></div>
<div class="commentting-container mt-4" data-role="comment-area"></div>
<div data-role="comment-alert" class="d-none">
<div class="d-flex align-items-center justify-content-center text-muted" style="height: calc(100vh - 27.5rem);">
댓글이 지원되지 않습니다.
</div>
</div>
</div>
<button class="pswp__button pswp__button--close" data-toggle="tooltip" title="닫기(Esc)"></button>
</div>
<!-- 7. 포토모달 : 갤러리형 -->
<div class="pswp pswp-gallery" tabindex="-1" role="dialog" aria-hidden="true">
<!-- Background of PhotoSwipe.
It's a separate element, as animating opacity is faster than rgba(). -->
<div class="pswp__bg"></div>
<!-- Slides wrapper with overflow:hidden. -->
<div class="pswp__scroll-wrap">
<!-- Container that holds slides. PhotoSwipe keeps only 3 slides in DOM to save memory. -->
<!-- don't modify these 3 pswp__item elements, data is added later on. -->
<div class="pswp__container">
<div class="pswp__item"></div>
<div class="pswp__item"></div>
<div class="pswp__item"></div>
</div>
<!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
<div class="pswp__ui pswp__ui--hidden">
<div class="pswp__top-bar">
<!-- Controls are self-explanatory. Order can be changed. -->
<div class="pswp__counter"></div>
<button class="pswp__button pswp__button--close" title="닫기 (Esc)"></button>
<button class="pswp__button pswp__button--fs" title="전체화면 보기"></button>
<button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
<!-- Preloader demo https://codepen.io/dimsemenov/pen/yyBWoR -->
<!-- element will get class pswp__preloader-active when preloader is running -->
<div class="pswp__preloader">
<div class="pswp__preloader__icn">
<div class="pswp__preloader__cut">
<div class="pswp__preloader__donut"></div>
</div>
</div>
</div>
</div>
<div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
<div class="pswp__share-tooltip"></div>
</div>
<button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
</button>
<button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
</button>
<div class="pswp__caption">
<div class="pswp__caption__center"></div>
</div>
</div>
</div>
</div>
<!-- 8. 마크업 참조 : 링크공유 -->
<div id="rb-share" hidden>
<ul class="share list-inline mt-2 mb-0 mx-2">
<li class="list-inline-item text-center">
<a href="" role="button" data-role="facebook" target="_blank" class="muted-link">
<img src="<?php echo $g['img_core']?>/sns/facebook.png" alt="페이스북공유" class="rounded-circle" style="width: 50px">
<p><small>페이스북</small></p>
</a>
</li>
<li class="list-inline-item text-center">
<a href="" role="button" data-role="kakaostory" target="_blank" class="muted-link">
<img src="<?php echo $g['img_core']?>/sns/kakaostory.png" alt="카카오스토리" class="rounded-circle" style="width: 50px">
<p><small>카카오스토리</small></p>
</a>
</li>
<li class="list-inline-item text-center">
<a href="" role="button" data-role="naver" target="_blank" class="muted-link">
<img src="<?php echo $g['img_core']?>/sns/naver.png" alt="네이버" class="rounded-circle" style="width: 50px">
<p><small>네이버</small></p>
</a>
</li>
<li class="list-inline-item text-center">
<a href="" role="button" data-role="twitter" target="_blank" class="muted-link">
<img src="<?php echo $g['img_core']?>/sns/twitter.png" alt="트위터" class="rounded-circle" style="width: 50px">
<p><small>트위터</small></p>
</a>
</li>
</ul>
<div class="input-group input-group-sm mb-2" hidden>
<input type="text" class="form-control" value="" readonly data-role="share" id="share-input">
<div class="input-group-append">
<button class="btn btn-light" type="button"
data-plugin="clipboard"
data-clipboard-target="#share-input"
data-toggle="tooltip" title="클립보드 복사">
<i class="fa fa-clipboard"></i>
</button>
</div>
</div>
</div>
<!-- 레이아웃 위젯 찾아보기 -->
<div class="modal" tabindex="-1" role="dialog" id="modal-widget-selector">
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">위젯 찾아보기 <span class="badge badge-secondary align-middle"><?php echo $d['layout']['dir'] ?></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" style="min-height: 400px">
<div class="row">
<div class="col-4">
<div class="form-group">
<label class="small text-muted">레이아웃 위젯목록</label>
<select class="form-control custom-select" name="widget_selector" data-area="">
<option>선택하세요.</option>
<?php include $g['dir_layout'].'_var/_var.config.php'; ?>
<?php $_i=1;foreach($d['layout']['widget'] as $_key => $_val):$__i=sprintf('%02d',$_i)?>
<optgroup label="<?php echo $_val[0]?>">
<?php foreach($_val[1] as $_v):?>
<option value="<?php echo $_key ?>/<?php echo $_v[0]?>"><?php echo $_v[1]?></option>
<?php endforeach?>
</optgroup>
<?php $_i++;endforeach?>
</select>
</div><!-- /.form-group -->
<div data-role="readme"></div>
</div>
<div class="col-8 text-center">
<div data-role="none">
<div class="d-flex justify-content-center align-items-center bg-light" style="height:370px">
<div class="text-muted">
<i class="fa fa-puzzle-piece" aria-hidden="true" style="color: #ccc;font-size: 100px"></i>
<p>위젯을 선택해주세요.</p>
</div>
</div>
</div>
<img src="" alt="" data-role="thumb" class="img-fluid d-none">
</div>
</div><!-- /.row -->
</div>
<div class="modal-footer">
<button type="button" class="btn btn-white" data-dismiss="modal">취소</button>
<button type="button" class="btn btn-primary" data-act="submit">적용</button>
</div>
</div>
</div>
</div>
<!-- 메인화면 꾸미기 게시판생성 -->
<div class="modal" tabindex="-1" role="dialog" id="modal-widget-makebbs">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">새 게시판</h5>
</div>
<div class="modal-body">
<div class="form-group">
<label>게시판 아이디</label>
<input type="text" class="form-control" name="id" autocomplete="off">
<div class="invalid-feedback"></div>
</div>
<div class="form-group">
<label>게시판 이름</label>
<input type="text" class="form-control" name="name" autocomplete="off">
<div class="invalid-feedback"></div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-link" data-dismiss="modal">취소</button>
<button type="button" class="btn btn-primary" data-act="submit">만들기</button>
</div>
</div>
</div>
</div>
<!-- 메인화면 꾸미기 리스트 생성 -->
<div class="modal" tabindex="-1" role="dialog" id="modal-widget-makelist">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">새 리스트</h5>
</div>
<div class="modal-body">
<div class="form-group">
<label>리스트 이름</label>
<input type="text" class="form-control" name="name" autocomplete="off">
<div class="invalid-feedback"></div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-link" data-dismiss="modal">취소</button>
<button type="button" class="btn btn-primary" data-act="submit">만들기</button>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,83 @@
<footer class="footer footer-<?php echo $d['layout']['footer_theme'] ?> mt-auto">
<div class="<?php echo $d['layout']['footer_container'] ?> px-0">
<div class="d-flex justify-content-between">
<div class="">
<?php echo getLayoutLogo($d['layout'],'footer')?>
<p>
<?php echo $d['layout']['company_name'] ?> <span class="split">|</span> 대표이사 : <?php echo $d['layout']['company_ceo'] ?> <span class="split">|</span> 개인정보 보호 최고책임자 : <?php echo $d['layout']['company_manager'] ?> <br>
사업자등록번호 : <?php echo $d['layout']['company_num'] ?> <span class="split">|</span> 통신판매업신고번호 <?php echo $d['layout']['company_num2'] ?> <br>
주소 : <?php echo $d['layout']['company_addr'] ?><br>
메일 : <?php echo $d['layout']['contact_email'] ?>
| 전화 : <?php echo $d['layout']['contact_tel'] ?>
<?php echo $d['layout']['contact_fax']?'| 팩스 : '.$d['layout']['contact_fax']:'' ?><br>
© <?php echo $d['layout']['company_name']?$d['layout']['company_name']:'company' ?> <?php echo $date['year']?></p>
</div>
<div class="text-right footer-contact">
<strong><?php echo $d['layout']['contact_tel'] ?></strong>
<p><?php echo $d['layout']['contact_hours'] ?></p>
<div class="sns">
<?php if ($d['layout']['sns_youtube']): ?>
<a href="<?php echo $d['layout']['sns_youtube'] ?>" target="_blank">
<img src="<?php echo $g['img_layout']?>/icon/ico_youtube.png" alt="">
</a>
<?php endif; ?>
<?php if ($d['layout']['sns_instagram']): ?>
<a href="<?php echo $d['layout']['sns_instagram'] ?>" target="_blank">
<img src="<?php echo $g['img_layout']?>/icon/ico_instagram.webp" alt="">
</a>
<?php endif; ?>
<?php if ($d['layout']['sns_facebook']): ?>
<a href="<?php echo $d['layout']['sns_facebook'] ?>" target="_blank">
<img src="<?php echo $g['img_layout']?>/icon/ico_facebook.webp" alt="">
</a>
<?php endif; ?>
<?php if ($d['layout']['sns_nblog']): ?>
<a href="<?php echo $d['layout']['sns_nblog'] ?>" target="_blank">
<img src="<?php echo $g['img_layout']?>/icon/ico_nblog.webp" alt="">
</a>
<?php endif; ?>
</div>
</div>
</div>
</div>
<div class="footer-quick">
<div class="<?php echo $d['layout']['footer_container'] ?> px-0">
<div class="d-flex justify-content-between align-items-center">
<ul class="list-inline mb-0">
<li class="list-inline-item">
<a href="<?php echo RW('mod=policy')?>" class="muted-link">이용약관</a>
</li>
<li class="list-inline-item">
<a href="<?php echo RW('mod=privacy')?>" class="muted-link">개인정보취급방침</a>
</li>
<?php if ($d['layout']['footer_link']) getWidget('bs4-default/site/menu/quickmenu/list-inline',array('smenu'=>$d['layout']['footer_link']));?>
</ul>
<!-- 스탠다드 라이센스 없이는 아래 킴스큐 로고를 삭제할 수 없습니다. -->
<div class="text-muted small">
powered by <a href="https://kimsq.com" target="_blank" class="text-reset ml-1"><i class="kf kf-bi-01 text-reset"></i></a>
</div>
<?php if ($d['layout']['footer_family']) getWidget('bs4-default/site/menu/quickmenu/dropdown-joint',array('smenu'=>$d['layout']['footer_family']));?>
</div><!-- /.d-flex -->
</div><!-- /.container -->
</div><!-- /.quick-menu -->
</footer>

View File

@@ -0,0 +1,85 @@
<footer class="footer footer-<?php echo $d['layout']['footer_theme'] ?> mt-auto">
<div class="<?php echo $d['layout']['footer_container'] ?> px-0">
<div class="d-flex justify-content-between align-items-center">
<?php echo getLayoutLogo($d['layout'],'footer') ?>
<div class="<?php echo $d['layout']['footer_logo']?'text-center':'' ?>">
<ul class="list-inline mb-3">
<li class="list-inline-item">
<a href="<?php echo RW('mod=policy')?>" class="muted-link">이용약관</a>
</li>
<li class="list-inline-item">
<a href="<?php echo RW('mod=privacy')?>" class="muted-link">개인정보취급방침</a>
</li>
<?php if ($d['layout']['footer_link']) getWidget('bs4-default/site/menu/quickmenu/list-inline',array('smenu'=>$d['layout']['footer_link']));?>
</ul>
<p>
<?php echo $d['layout']['company_name'] ?> <span class="split">|</span> 대표이사 : <?php echo $d['layout']['company_ceo'] ?> <span class="split">|</span> 개인정보 보호 최고책임자 : <?php echo $d['layout']['company_manager'] ?> <br>
사업자등록번호 : <?php echo $d['layout']['company_num'] ?> <span class="split">|</span> 통신판매업신고번호 <?php echo $d['layout']['company_num2'] ?> <br>
주소 : <?php echo $d['layout']['company_addr'] ?><br>
메일 : <?php echo $d['layout']['contact_email'] ?>
| 전화 : <?php echo $d['layout']['contact_tel'] ?>
<?php echo $d['layout']['contact_fax']?'| 팩스 : '.$d['layout']['contact_fax']:'' ?><br>
<span class="d-block text-muted mt-2">© <?php echo $d['layout']['company_name']?$d['layout']['company_name']:'company' ?> <?php echo $date['year']?></span>
</p>
</div>
<div class="text-right footer-contact">
<div class="sns">
<?php if ($d['layout']['sns_youtube']): ?>
<a href="<?php echo $d['layout']['sns_youtube'] ?>" target="_blank">
<img src="<?php echo $g['img_layout']?>/icon/ico_youtube.png" alt="">
</a>
<?php endif; ?>
<?php if ($d['layout']['sns_instagram']): ?>
<a href="<?php echo $d['layout']['sns_instagram'] ?>" target="_blank">
<img src="<?php echo $g['img_layout']?>/icon/ico_instagram.webp" alt="">
</a>
<?php endif; ?>
<?php if ($d['layout']['sns_facebook']): ?>
<a href="<?php echo $d['layout']['sns_facebook'] ?>" target="_blank">
<img src="<?php echo $g['img_layout']?>/icon/ico_facebook.webp" alt="">
</a>
<?php endif; ?>
<?php if ($d['layout']['sns_nblog']): ?>
<a href="<?php echo $d['layout']['sns_nblog'] ?>" target="_blank">
<img src="<?php echo $g['img_layout']?>/icon/ico_nblog.webp" alt="">
</a>
<?php endif; ?>
</div>
<?php if ($d['layout']['footer_family']): ?>
<!-- 패밀리 사이트 -->
<div class="mt-4">
<?php getWidget('bs4-default/site/menu/quickmenu/dropdown-joint',array('smenu'=>$d['layout']['footer_family']));?>
</div>
<?php endif; ?>
</div>
</div>
</div>
<!-- 스탠다드 라이센스 없이는 아래 킴스큐 로고를 삭제할 수 없습니다. -->
<div class="footer-quick">
<div class="<?php echo $d['layout']['footer_container'] ?> px-0">
<div class="text-center">
<div class="text-muted small">
powered by <a href="https://kimsq.com" target="_blank" class="text-reset ml-1"><i class="kf kf-bi-01 text-reset"></i></a>
</div>
</div><!-- /.d-flex -->
</div><!-- /.container -->
</div><!-- /.quick-menu -->
</footer>

View File

@@ -0,0 +1,44 @@
<footer class="footer footer-<?php echo $d['layout']['footer_theme'] ?> mt-auto border-top-0">
<div class="footer-quick">
<div class="<?php echo $d['layout']['footer_container'] ?> px-0">
<div class="d-flex justify-content-between align-items-center">
<ul class="list-inline mb-0">
<li class="list-inline-item">
<a href="<?php echo RW('mod=policy')?>" class="muted-link">이용약관</a>
</li>
<li class="list-inline-item">
<a href="<?php echo RW('mod=privacy')?>" class="muted-link">개인정보취급방침</a>
</li>
<?php if ($d['layout']['footer_link']) getWidget('bs4-default/site/menu/quickmenu/list-inline',array('smenu'=>$d['layout']['footer_link']));?>
</ul>
<!-- 스탠다드 라이센스 없이는 아래 킴스큐 로고를 삭제할 수 없습니다. -->
<div class="text-muted">
© <?php echo $d['layout']['company_name']?$d['layout']['company_name']:'company' ?> <?php echo $date['year']?>
</div>
<?php if ($d['layout']['footer_family']): ?>
<!-- 패밀리 사이트 -->
<?php getWidget('bs4-default/site/menu/quickmenu/dropdown-joint',array('smenu'=>$d['layout']['footer_family']));?>
<?php endif; ?>
</div><!-- /.d-flex -->
</div><!-- /.container -->
</div><!-- /.quick-menu -->
<!-- 스탠다드 라이센스 없이는 아래 킴스큐 로고를 삭제할 수 없습니다. -->
<div class="footer-quick">
<div class="<?php echo $d['layout']['footer_container'] ?> px-0">
<div class="text-center">
<div class="text-muted small">
powered by <a href="https://kimsq.com" target="_blank" class="text-reset ml-1"><i class="kf kf-bi-01 text-reset"></i></a>
</div>
</div><!-- /.d-flex -->
</div><!-- /.container -->
</div><!-- /.quick-menu -->
</footer>

View File

@@ -0,0 +1,41 @@
<header class="header">
<div class="container-fluid px-0">
<div class="d-flex justify-content-between align-items-center navbar p-0">
<h1 class="my-0 h5 font-weight-normal">
<a class="navbar-brand" href="<?php echo RW(0) ?>"
style="background-image:url(<?php echo $d['layout']['header_logo']?$g['url_var_site'].'/'.$d['layout']['header_logo'].$g['wcache']:''?>);background-size:<?php echo $d['layout']['header_logo_size'] ?>%">
<?php echo !$d['layout']['header_logo']?$d['layout']['header_title'] :'' ?>
</a>
</h1>
<div class="form-inline">
<?php if ($d['layout']['header_search']=='true'):?>
<form action="<?php echo $_HS['rewrite']? RW('m=search'):$g['s'].'/'?>" role="search">
<?php if (!$_HS['rewrite']): ?>
<input type="hidden" name="r" value="<?php echo $r ?>">
<input type="hidden" name="m" value="search">
<?php endif; ?>
<input class="form-control mr-sm-2" type="search" placeholder="통합검색" aria-label="Search" name="q" value="<?php echo $q ?>" autocomplete="off">
</form>
<?php endif?>
<ul class="nav">
<?php if ($my['uid']): ?>
<?php else: ?>
<?php if ($d['layout']['login_type']=='modal'): ?>
<a class="nav-link" href="#modal-login" data-toggle="modal">로그인</a>
<?php else: ?>
<a class="nav-link" href="<?php echo RW('mod=login')?>">로그인</a>
<?php endif; ?>
<?php endif; ?>
</ul>
</div>
</div><!-- /.d-flex -->
</div><!-- /.container -->
</header>

View File

@@ -0,0 +1,107 @@
<header class="header">
<div class="<?php echo $d['layout']['header_container'] ?> px-0">
<div class="d-flex align-items-center navbar p-0">
<?php echo getLayoutLogo($d['layout'],'header')?>
<div class="inner mr-auto flex-fill">
<ul class="nav" data-role="menu">
<?php if ($d['layout']['header_allcat']=='true'): ?>
<li class="nav-item">
<a class="nav-link" href="/c/1">
<i class="material-icons align-text-bottom">menu</i>
전체 카테고리
</a>
</li>
<?php endif; ?>
<?php getWidget('bs4-default/site/menu/navbar/'.$d['layout']['header_menu'],array('smenu'=>'0','limit'=>$d['layout']['header_menu_limit'],'dropdown'=>'1',));?>
</ul>
<?php if ($d['layout']['header_search']=='button'):?>
<form class="form-inline" action="<?php echo $_HS['rewrite']? RW('m=search'):$g['s'].'/'?>" role="search" data-role="searchbox">
<?php if (!$_HS['rewrite']): ?>
<input type="hidden" name="r" value="<?php echo $r ?>">
<input type="hidden" name="m" value="search">
<?php endif; ?>
<div class="input-group input-group-lg dropdown border-0 w-100">
<input type="text" name="q" class="form-control bg-white border-0 rounded-0" value="<?php echo $q ?>" data-plugin="autocomplete" autocomplete="off" required="" placeholder="검색어를 입력해주세요.">
</div>
</form>
<?php endif?>
</div>
<div class="form-inline">
<?php if ($d['layout']['header_search']=='input'):?>
<form action="<?php echo $_HS['rewrite']? RW('m=search'):$g['s'].'/'?>" role="search">
<?php if (!$_HS['rewrite']): ?>
<input type="hidden" name="r" value="<?php echo $r ?>">
<input type="hidden" name="m" value="search">
<?php endif; ?>
<input class="form-control mr-sm-2" type="search" placeholder="통합검색" aria-label="Search" name="q" value="<?php echo $q ?>" autocomplete="off">
</form>
<?php elseif ($d['layout']['header_search']=='button'): ?>
<button type="button" class="btn btn-link text-muted" data-toggle="searchbox">
<i class="fa fa-search fa-lg" aria-hidden="true"></i>
</button>
<?php endif?>
<?php if ($d['layout']['header_login']=='true'): ?>
<ul class="nav">
<?php if ($my['uid']): ?>
<div class="dropdown">
<button class="nav-link btn btn-link dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<?php echo $my['email'] ?>
</button>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownMenuButton">
<span class="dropdown-menu-arrow"></span>
<h6 class="dropdown-header"><?php echo $my['nic'] ?> 님</h6>
<?php if ($d['post']['writeperm']): ?>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo RW('m=post&mod=write')?>">
새 포스트
</a>
<?php endif; ?>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo RW('mod=dashboard')?>">
대시보드
</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo getProfileLink($my['uid'])?>">
프로필
</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo RW('mod=settings')?>">
설정
</a>
<button class="dropdown-item" type="button" data-act="logout" role="button">
로그아웃
</button>
<?php if ($my['admin']): ?>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="/admin" target="_top">관리자모드</a>
<?php endif; ?>
</div>
</div>
<?php else: ?>
<?php if ($d['layout']['login_type']=='modal'): ?>
<a class="nav-link" href="#modal-login" data-toggle="modal">로그인</a>
<?php else: ?>
<a class="nav-link" href="<?php echo RW('mod=login')?>">로그인</a>
<?php endif; ?>
<?php endif; ?>
</ul>
<?php endif; ?>
</div>
</div><!-- /.d-flex -->
</div><!-- /.container -->
</header>

View File

@@ -0,0 +1,123 @@
<header class="header">
<div class="border-bottom position-relative">
<div class="<?php echo $d['layout']['header_container'] ?> px-0">
<div class="d-flex justify-content-between align-items-center py-1">
<div class=""></div>
<div class="">
<nav class="nav top-nav">
<?php if ($d['layout']['header_login']=='true'): ?>
<?php if (!$my['uid']): ?>
<?php if ($d['layout']['login_type']=='modal'): ?>
<a class="nav-link" href="#modal-login" data-toggle="modal">로그인</a>
<?php else: ?>
<a class="nav-link" href="<?php echo RW('mod=login')?>">로그인</a>
<?php endif; ?>
<a class="nav-link" href="#modal-join" data-toggle="modal" data-backdrop="static">회원가입</a>
<?php else: ?>
<div class="dropdown">
<button class="nav-link btn btn-link dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<?php echo $my['email'] ?>
</button>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownMenuButton">
<span class="dropdown-menu-arrow"></span>
<h6 class="dropdown-header"><?php echo $my['nic'] ?> 님</h6>
<?php if ($d['post']['writeperm']): ?>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo RW('m=post&mod=write')?>">
새 포스트
</a>
<?php endif; ?>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo RW('mod=dashboard')?>">
대시보드
</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo getProfileLink($my['uid'])?>">
프로필
</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo RW('mod=settings')?>">
설정
</a>
<button class="dropdown-item" type="button" data-act="logout" role="button">
로그아웃
</button>
<?php if ($my['admin']): ?>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="/admin" target="_top">관리자모드</a>
<?php endif; ?>
</div>
</div>
<?php endif; ?>
<?php endif; ?>
<a class="nav-link" href="<?php echo RW('mod=cscenter')?>">고객센터</a>
</nav>
</div>
</div>
</div>
</div>
<div class="<?php echo $d['layout']['header_container'] ?> px-0">
<div class="d-flex align-items-center navbar p-0">
<?php echo getLayoutLogo($d['layout'],'header')?>
<div class="inner mr-auto flex-fill">
<ul class="nav" data-role="menu">
<?php if ($d['layout']['header_allcat']=='true'): ?>
<li class="nav-item">
<a class="nav-link" href="/c/1">
<i class="material-icons align-text-bottom">menu</i>
전체 카테고리
</a>
</li>
<?php endif; ?>
<?php getWidget('bs4-default/site/menu/navbar/'.$d['layout']['header_menu'],array('smenu'=>'0','limit'=>$d['layout']['header_menu_limit'],'dropdown'=>'1',));?>
</ul>
<?php if ($d['layout']['header_search']=='button'):?>
<form class="form-inline" action="<?php echo $_HS['rewrite']? RW('m=search'):$g['s'].'/'?>" role="search" data-role="searchbox">
<?php if (!$_HS['rewrite']): ?>
<input type="hidden" name="r" value="<?php echo $r ?>">
<input type="hidden" name="m" value="search">
<?php endif; ?>
<div class="input-group input-group-lg dropdown border-0 w-100">
<input type="text" name="q" class="form-control bg-white border-0 rounded-0" value="<?php echo $q ?>" data-plugin="autocomplete" autocomplete="off" required="" placeholder="검색어를 입력해주세요.">
</div>
</form>
<?php endif?>
</div>
<div class="form-inline">
<?php if ($d['layout']['header_search']=='input'):?>
<form action="<?php echo $_HS['rewrite']? RW('m=search'):$g['s'].'/'?>" role="search">
<?php if (!$_HS['rewrite']): ?>
<input type="hidden" name="r" value="<?php echo $r ?>">
<input type="hidden" name="m" value="search">
<?php endif; ?>
<input class="form-control mr-sm-2" type="search" placeholder="통합검색" aria-label="Search" name="q" value="<?php echo $q ?>" autocomplete="off">
</form>
<?php elseif ($d['layout']['header_search']=='button'): ?>
<button type="button" class="btn btn-link text-muted" data-toggle="searchbox">
<i class="fa fa-search fa-lg" aria-hidden="true"></i>
</button>
<?php endif?>
</div>
</div><!-- /.d-flex -->
</div><!-- /.container -->
</header>

View File

@@ -0,0 +1,112 @@
<header class="header">
<div class="<?php echo $d['layout']['header_container'] ?> px-0">
<div class="d-flex justify-content-between align-items-center pt-1">
<div class=""></div>
<div class="">
<nav class="nav top-nav">
<?php if (!$my['uid']): ?>
<?php if ($d['layout']['login_type']=='modal'): ?>
<a class="nav-link" href="#modal-login" data-toggle="modal">로그인</a>
<?php else: ?>
<a class="nav-link" href="<?php echo RW('mod=login')?>">로그인</a>
<?php endif; ?>
<a class="nav-link" href="#modal-join" data-toggle="modal" data-backdrop="static">회원가입</a>
<?php else: ?>
<div class="dropdown">
<button class="nav-link btn btn-link dropdown-toggle" type="button" id="dropdownMenuButton" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<?php echo $my['email'] ?>
</button>
<div class="dropdown-menu dropdown-menu-right" aria-labelledby="dropdownMenuButton">
<span class="dropdown-menu-arrow"></span>
<h6 class="dropdown-header"><?php echo $my['nic'] ?> 님</h6>
<?php if ($d['post']['writeperm']): ?>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo RW('m=post&mod=write')?>">
새 포스트
</a>
<?php endif; ?>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo RW('mod=dashboard')?>">
대시보드
</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo getProfileLink($my['uid'])?>">
프로필
</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo RW('mod=settings')?>">
설정
</a>
<button class="dropdown-item" type="button" data-act="logout" role="button">
로그아웃
</button>
<?php if ($my['admin']): ?>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="/admin" target="_top">관리자모드</a>
<?php endif; ?>
</div>
</div>
<?php endif; ?>
<a class="nav-link" href="<?php echo RW('mod=cscenter')?>">고객센터</a>
</nav>
</div>
</div>
</div>
<div class="<?php echo $d['layout']['header_container'] ?> px-0">
<div class="d-flex justify-content-start align-items-center navbar p-0">
<?php echo getLayoutLogo($d['layout'],'header')?>
<div class="ml-3" >
<form class="form-inline" action="<?php echo $_HS['rewrite']? RW('m=search'):$g['s'].'/'?>" role="search" data-role="searchform">
<?php if (!$_HS['rewrite']): ?>
<input type="hidden" name="r" value="<?php echo $r ?>">
<input type="hidden" name="m" value="search">
<?php endif; ?>
<div class="input-group input-group-lg dropdown shadow-sm">
<input type="search" name="q" class="form-control bg-white border-0 rounded-0" value="<?php echo $q ?>" data-plugin="autocomplete" autocomplete="off" required="">
<div class="input-group-append">
<button class="btn btn-white border-0 rounded-0" type="submit"><i class="fa fa-search"></i></button>
</div>
</div>
</form>
</div>
<div class="ml-auto">
<a href="https://pf.kakao.com/_XrQxkM" taget="_blank">
<img src="https://t1.daumcdn.net/daumtop_deco/banner/corona19_G.png" width="260" height="84" class="img_thumb" alt="광고 신종코로나바이러스감염증 예방수칙">
</a>
</div>
</div><!-- /.d-flex -->
</div><!-- /.container -->
<section class="border-top" style="margin-left:-15px;margin-right:-15px">
<div class="inner">
<div class="<?php echo $d['layout']['header_container'] ?> px-0">
<ul class="nav nav-fill" data-role="menu">
<?php if ($d['layout']['header_allcat']=='true'): ?>
<li class="nav-item">
<a class="nav-link" href="/c/1">
<i class="material-icons align-text-bottom">menu</i>
전체 카테고리
</a>
</li>
<?php endif; ?>
<?php getWidget('bs4-default/site/menu/navbar/'.$d['layout']['header_menu'],array('smenu'=>'0','limit'=>$d['layout']['header_menu_limit'],'dropdown'=>'1',));?>
</ul>
</div>
</div>
</section>
</header>

View File

@@ -0,0 +1,57 @@
<?php
// seo 데이타 -- 전송되는 타이틀 추출
$_MSEO = getDbData($table['s_seo'],'rel=1 and parent='.$_HM['uid'],'*');
$_PSEO = getDbData($table['s_seo'],'rel=2 and parent='.$_HP['uid'],'*');
$_WTIT=strip_tags($g['meta_tit']);
//$_link_domain = 'http'.($_SERVER['HTTPS']=='on'?'s':'').'://';
//$_link_url = $_link_domain.$_SERVER['REQUEST_URI']; // URL
$_link_url=$g['url_root'].$_SERVER['REQUEST_URI'];
?>
<ul class="list-inline mb-3">
<li data-toggle="tooltip" title="페이스북" class="list-inline-item">
<a href="" role="button">
<img src="<?php echo $g['img_core']?>/sns/facebook.png" alt="페이스북공유" class="rounded-circle" width="48">
</a>
</li>
<li data-toggle="tooltip" title="카카오스토리" class="list-inline-item">
<a href="" role="button">
<img src="<?php echo $g['img_core']?>/sns/kakaostory.png" alt="카카오스토리" class="rounded-circle" width="48">
</a>
</li>
<li data-toggle="tooltip" title="네이버" class="list-inline-item">
<a href="" role="button">
<img src="<?php echo $g['img_core']?>/sns/naver.png" alt="네이버" class="rounded-circle" width="48">
</a>
</li>
<li data-toggle="tooltip" title="트위터" class="list-inline-item">
<a href="" role="button">
<img src="<?php echo $g['img_core']?>/sns/twitter.png" alt="트위터" class="rounded-circle" width="48">
</a>
</li>
<li data-toggle="tooltip" title="메일보내기" class="list-inline-item">
<a href="mailto:<?php if($my['uid']):?><?php echo $my['email']?><?php endif?>?subject=경기방송%20기사공유-<?php echo $_WTIT?>&body=<?php echo $_link_url?>">
<img src="<?php echo $g['img_core']?>/sns/mail.png" alt="메일" class="rounded-circle" width="48">
</a>
</li>
</ul>
// sns 이벤트
function snsWin(sns)
{
var snsset = new Array();
var enc_tit = "<?php echo urlencode($_HS['title'])?>";
var enc_sbj = "<?php echo urlencode($_WTIT)?>";
var enc_url = "<?php echo urlencode($_link_url)?>";
var enc_tag = "<?php echo urlencode(str_replace(',',' ',$R['tag']))?>";
snsset['t'] = 'https://twitter.com/intent/tweet?url=' + enc_url + '&text=' + enc_sbj;
snsset['f'] = 'http://www.facebook.com/sharer.php?u=' + enc_url;
snsset['n'] = 'http://share.naver.com/web/shareView.nhn?url=' + enc_url + '&title=' + enc_sbj;
snsset['ks'] = 'https://story.kakao.com/share?url=' + enc_url + '&title=' + enc_sbj;
window.open(snsset[sns]);
}

View File

@@ -0,0 +1,12 @@
<!-- 알림수신을 위한 권한요청 (권한이 설정되지 않은 경우만 표시) -->
<div class="alert alert-light mb-0 rounded-0" role="alert" id="permission_alert" style="display: none">
<div class="d-flex justify-content-between">
<p class="f13 mb-0">
<i class="fa fa-bell fa-fw text-primary" aria-hidden="true"></i> 데스크탑 푸시알림을 수신하면 공지사항은 물론 회원님이 게시글에 대한 피드백 또는 내가 언급된 글에 대한 정보들을 실시간으로 받아보실 있습니다.
<a href="#" class="alert-link" onclick="requestPermission()"><u>권한 설정</u></a>
</p>
<button type="button" class="close" data-dismiss="alert" aria-label="Close" title="나중에 하기">
<span aria-hidden="true">&times;</span>
</button>
</div>
</div>

View File

@@ -0,0 +1,93 @@
<?php
$levelnum = getDbData($table['s_mbrlevel'],'gid=1','*');
$levelname= getDbData($table['s_mbrlevel'],'uid='.$my['level'],'*');
?>
<section class="pt-4 px-3">
<div class="text-reset text-center">
<a href="<?php echo getProfileLink($my['uid'])?>" class="d-inline-block" target="_blank">
<img src="<?php echo getAvatarSrc($my['uid'],'60') ?>" width="60" height="60" alt="" class="rounded-circle border">
</a>
<span class="d-block f16 mt-2">
<?php echo $my['nic'] ?>
</span>
</div>
<ul class="nav flex-column mt-3 py-3 border-top">
<li class="nav-item">
<a class="nav-link d-flex justify-content-between py-1 px-2 f13 text-reset" href="<?php echo RW('mod=dashboard&page=point')?>">
<span>포인트</span>
<span>
<strong class="text-primary"><?php echo number_format($my['point'])?> </strong> P
<i class="fa fa-angle-right text-muted ml-2" aria-hidden="true"></i>
</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link d-flex justify-content-between py-1 px-2 f13 text-reset" href="<?php echo RW('mod=dashboard&page=point')?>">
<span>등급</span>
<span>
<?php echo $levelname['name']?>
<small>(<?php echo $my['level']?>/<?php echo $levelnum['uid']?>)</small>
<i class="fa fa-angle-right text-muted ml-2" aria-hidden="true"></i>
</span>
</a>
</li>
</ul>
</section>
<ul class="nav nav-menu flex-column border-bottom">
<li class="nav-item<?php echo $page=='main'?' active':'' ?>">
<a class="nav-link" href="<?php echo RW('mod=dashboard')?>">대시보드</a>
</li>
<li class="nav-item<?php echo $page=='feed' || $page=='follower' ?' active':'' ?>">
<a class="nav-link d-flex justify-content-between align-items-center" href="<?php echo RW('mod=dashboard&page=feed')?>">
피드 <i class="fa fa-plus mr-4" aria-hidden="true"></i>
</a>
<ul class="nav flex-column">
<li class="nav-item<?php echo $page=='feed'?' active':'' ?>">
<a class="nav-link" href="<?php echo RW('mod=dashboard&page=feed')?>">피드</a>
</li>
<li class="nav-item<?php echo $page=='follower'?' active':'' ?>">
<a class="nav-link" href="<?php echo RW('mod=dashboard&page=follower')?>">구독자 관리</a>
</li>
</ul>
</li>
<?php if ($d['post']['writeperm']): ?>
<li class="nav-item<?php echo $page=='post'|| $page=='list' || $page=='list_view'?' active':'' ?>">
<a class="nav-link d-flex justify-content-between align-items-center" href="<?php echo RW('mod=dashboard&page=post')?>">
포스트 관리 <i class="fa fa-plus mr-4" aria-hidden="true"></i>
</a>
<ul class="nav flex-column">
<li class="nav-item<?php echo $page=='post'?' active':'' ?>">
<a class="nav-link" href="<?php echo RW('mod=dashboard&page=post')?>">포스트 관리</a>
</li>
<li class="nav-item<?php echo $page=='list' || $page=='list_view'?' active':'' ?>">
<a class="nav-link" href="<?php echo RW('mod=dashboard&page=list')?>">리스트 관리</a>
</li>
</ul>
</li>
<?php else: ?>
<li class="nav-item<?php echo $page=='list' || $page=='list_view'?' active':'' ?>">
<a class="nav-link" href="<?php echo RW('mod=dashboard&page=list')?>">리스트 관리</a>
</li>
<?php endif; ?>
<li class="nav-item<?php echo $page=='noti'?' active':'' ?>">
<a class="nav-link" href="<?php echo RW('mod=dashboard&page=noti')?>">알림내역</a>
</li>
<li class="nav-item<?php echo $page=='saved'?' active':'' ?>">
<a class="nav-link" href="<?php echo RW('mod=dashboard&page=saved')?>">저장내역</a>
</li>
<li class="nav-item<?php echo $page=='point'?' active':'' ?>">
<a class="nav-link" href="<?php echo RW('mod=dashboard&page=point')?>">포인트내역</a>
</li>
<li class="nav-item d-none<?php echo $page=='order'?' active':'' ?>">
<a class="nav-link" href="<?php echo RW('mod=dashboard&page=order')?>">구매내역 <span class="badge badge-pill badge-light">준비중</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="<?php echo RW('mod=settings')?>">설정</a>
</li>
</ul>

View File

@@ -0,0 +1,6 @@
<div class="">
<h3 class="tit_subject"><?php echo $_HM['name'] ?></h3>
<?php if ($_HM['addinfo']): ?>
<p class="tit_desc"><?php echo $_HM['addinfo'] ?></p>
<?php endif; ?>
</div>

View File

@@ -0,0 +1,6 @@
<div class="border-bottom mb-4">
<h3 class="tit_subject pb-2"><?php echo $_HM['name'] ?></h3>
<?php if ($_HM['addinfo']): ?>
<p class="tit_desc"><?php echo $_HM['addinfo'] ?></p>
<?php endif; ?>
</div>

View File

@@ -0,0 +1,34 @@
<?php $_MENUS2=getDbSelect($table['s_menu'],'site='.$s.' and parent='.$_FHM['uid'].' and hidden=0 and depth=2 order by gid asc','*')?>
<?php $_MENUSN=db_num_rows($_MENUS2)?>
<?php if($_MENUN || $_CA[0]):?>
<?php if ($d['layout']['sidebar_titlebar']=='false'): ?>
<h3 class="page-nav-title bg-secondary text-white"><?php echo $_FHM['name'] ?></h3>
<?php endif; ?>
<ul class="nav flex-column">
<?php $_i=0;while($_M2=db_fetch_array($_MENUS2)):$_i++?>
<li class="nav-item<?php if($_MENUSN==$_i):?> _last<?php endif?>">
<a class="nav-link<?php if($_M2['id']==$_CA[1]):?> active<?php endif?>" href="<?php echo RW('c='.$_CA[0].'/'.$_M2['id'])?>" target="<?php echo $_M2['target']?>">
<?php echo $_M2['name']?>
</a>
<?php if(($_HM['uid']==$_M2['uid']||$_HM['parent']==$_M2['uid'])&&$_M2['is_child']):?>
<ul class="nav flex-column ml-2">
<?php $_MENUS3=getDbSelect($table['s_menu'],'site='.$s.' and parent='.$_M2['uid'].' and hidden=0 and depth=3 order by gid asc','*')?>
<?php while($_M3=db_fetch_array($_MENUS3)):?>
<li class="nav-item">
<a class="nav-link<?php if($_M3['uid']==$_HM['uid']):?> active<?php endif?>" href="<?php echo RW('c='.$_CA[0].'/'.$_CA[1].'/'.$_M3['id'])?>" target="<?php echo $_M3['target']?>">
<?php echo $_M3['name']?>
</a>
</li>
<?php endwhile?>
</ul>
<?php endif?>
</li>
<?php endwhile?>
<?php if(!$_MENUSN):?>
<li class="text-muted text-center p-5 border">서브메뉴가 없습니다.</li>
<?php endif?>
</ul>
<?php endif?>

View File

@@ -0,0 +1,12 @@
<section class="bg-light">
<div class="<?php echo $d['layout']['main_container'] ?> px-0">
<div class="py-5">
<h3 class="tit_subject"><?php echo $_FHM['name'] ?></h3>
<?php if ($_FHM['addinfo']): ?>
<p class="tit_desc"><?php echo $_FHM['addinfo'] ?></p>
<?php endif; ?>
</div>
</div>
</section>

View File

@@ -0,0 +1,13 @@
<section class="bg-light">
<div class="<?php echo $d['layout']['main_container'] ?> px-0">
<div class="py-5">
<h3 class="tit_subject"><?php echo $_HM['name'] ?></h3>
<?php if ($_HM['addinfo']): ?>
<p class="tit_desc"><?php echo $_HM['addinfo'] ?></p>
<?php endif; ?>
</div>
</div>
</section>

View File

@@ -0,0 +1,161 @@
/**
* --------------------------------------------------------------------------
* kimsQ Rb v2.4 데스크탑 시작하기 레이아웃 스크립트 (bs4-starter)
* Homepage: http://www.kimsq.com
* Licensed under RBL
* Copyright 2019 redblock inc
* --------------------------------------------------------------------------
*/
var noti_sort = 'uid';
var noti_orderby = 'desc';
var noti_recnum = '10';
$('[data-plugin="timeago"]').timeago(); // 상대시간 플러그인 초기화
// 사용자 액션에 대한 피드백 메시지 제공을 위해 액션 실행후 쿠키에 저장된 결과 메시지를 출력시키고 초기화 시킵니다.
putCookieAlert('site_common_result') // 실행결과 알림 메시지 출력
$(document).ready(function() {
// navbar dropdown 로그인 - 실행
$('#popover-loginform').submit(function(e){
e.preventDefault();
e.stopPropagation();
var form = $(this)
siteLogin(form)
});
// navbar dropdown 로그인 - 로그인 영역 내부 클릭시 dropdown 닫히지 않도록
$(document).on('click', '#navbarPopoverLogin .dropdown-menu', function (e) {
e.stopPropagation();
});
// navbar dropdown 로그인 - dropdown 열릴때
$('#navbarPopoverLogin').on('shown.bs.dropdown', function () {
$(this).find('[name=id]').focus() // 아이디 focus
$(this).find('.form-control').val('').removeClass('is-invalid') //에러이력 초기화
})
$(document).on('keyup','#popover-loginform .form-control',function(){
$(this).removeClass('is-invalid') //에러 흔적 초기화
});
// navbar dropdown 내알림보기 - dropdown 열릴때
$('#navbarPopoverNoti').on('show.bs.dropdown', function () {
var dropdown = $(this)
var mobile = ''
$('.js-tooltip').tooltip('hide')
dropdown.attr('data-original-title','')
dropdown.find('[data-role="noti-list"]').isLoading({
text: "불러오는중...",
position: "inside"
});
$.post(rooturl+'/?r='+raccount+'&m=notification&a=get_notiList',{
sort: noti_sort,
orderby: noti_orderby,
recnum: noti_recnum,
callMod: 'unread'
},function(response){
var result = $.parseJSON(response);
var content=result.content;
dropdown.find('[data-role="noti-list"]').html(content);
dropdown.find('[data-plugin="timeago"]').timeago();
dropdown.find('[data-role="noti-status"]').text('');
});
})
// navbar dropdown 알림보기 - dropdown 닫힐때
$('#navbarPopoverNoti').on('hidden.bs.dropdown', function () {
var dropdown = $(this)
dropdown.attr('data-original-title','알림')
dropdown.find('[data-role="noti-list"]').html('');
})
//modal 로그인 - 실행
$('#modal-login').find('form').submit(function(e){
e.preventDefault();
e.stopPropagation();
var form = $(this)
siteLogin(form)
});
// modal 로그인 - modal 열릴때
$('#modal-login').on('shown.bs.modal', function () {
$(this).find('[name=id]').focus() // 아이디 focus
$(this).find('.form-control').val('').removeClass('is-invalid') //에러 흔적 초기화
})
$("#modal-login").find('.form-control').keyup(function() {
$(this).removeClass('is-invalid') //에러 흔적 초기화
});
//modal 변경
$(document).on('click','[data-toggle="changeModal"]', function (e) {
var $this = $(this)
var href = $this.attr('href')
var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, '')))
var $start = $($this.closest('.modal'))
if ($this.is('a')) e.preventDefault()
$start.modal('hide')
setTimeout(function(){ $target.modal({show:true,backdrop:'static'}); }, 300);
});
$('[data-toggle="tooltip"]').tooltip() // 툴팁 플러그인 초기화
$('.js-tooltip').tooltip();
initPhotoSwipeFromDOM('[data-plugin="photoswipe"]'); // 포토갤러리 초기화
//외부서비스 사용자 인증요청
$('[data-connect]').on("click", function(){
var provider = $(this).data('connect')
// /core/engine/cssjs.engine.php 참고
if (provider=='naver') var target = connect_naver
if (provider=='kakao') var target = connect_kakao
if (provider=='google') var target = connect_google
if (provider=='facebook') var target = connect_facebook
if (provider=='instagram') var target = connect_instagram
var referer = window.location.href // 연결후, 원래 페이지 복귀를 위해
$("body").isLoading({
text: "연결 중..",
position: "overlay"
});
$.post(rooturl+'/?r='+raccount+'&m=connect&a=save_referer',{
referer : referer
},function(response,status){
if(status=='success'){
document.location = target;
}else{
alert(status);
}
});
});
// 로그아웃
$('[data-act="logout"]').click(function(){
$('body').isLoading({
position: 'inside',
text: '<div class="d-flex justify-content-center align-items-center"><div class="spinner-border" role="status"><span class="sr-only">Loading...</span></div></div>',
});
getIframeForAction('');
setTimeout(function(){
frames.__iframe_for_action__.location.href = '/?r=home&m=site&a=logout';
}, 100);
});
// history.back
$(document).on('click','[data-history="back"]',function(){
window.history.back();
});
$('[data-toggle="searchbox"]').click(function(){
$('.header').toggleClass('searching')
$('.header [data-role="searchbox"] input').val('').focus()
});
})

View File

@@ -0,0 +1,271 @@
/**
* --------------------------------------------------------------------------
* FCM(Firebase 클라우드 메시징)을 활용한 포그라운드 알림 처리 (데스크탑 전용)
* 참조코드 : https://github.com/firebase/quickstart-js/tree/master/messaging
* Licensed under an Apache-2 license.
* Firebase Quickstart Samples for Web https://firebase.google.com
* --------------------------------------------------------------------------
*/
firebase.initializeApp({'messagingSenderId': fcmSenderId});
const messaging = firebase.messaging();
messaging.usePublicVapidKey(fcmVAPID); //FCM 웹 푸시 인증서 키쌍(VAPID)
const permissionDivId = 'permission_div';
const permissionAlertId = 'permission_alert';
const tokenDivId = 'token_div';
const pushSettingId = 'push_setting';
const pushDisabledId = 'push_disabled';
const modalNoti = $('#modal-noti');
if (isNewUser(memberid)) {
console.log('새 사용자로 로그인 되었습니다.')
deleteToken() // 기존 토큰 삭제
window.localStorage.clear(); // 로컬 스토리지 초기화
}
// 인스턴스 ID 토큰이 업데이트되면 콜백이 시작됩니다.
messaging.onTokenRefresh(function() {
messaging.getToken().then(function(refreshedToken) {
console.log('토큰이 새로고침 되었습니다.'); // 새 인스턴스 ID 토큰이 아직 전송되지 않았 음을 나타냅니다.
setTokenSentToServer(false);
sendTokenToServer(refreshedToken); // 인스턴스 ID 토큰을 앱 서버로 전송합니다.
resetNotiUI(); // 새로운 인스턴스 ID 토큰을 표시하고 모든 이전 메시지의 UI를 지웁니다.
}).catch(function(err) {
console.log('새로 변경된 토큰을 검색 할 수 없습니다. ', err);
});
});
// - 앱에 포커스가 있는 동안 메시지가 수신됩니다.
messaging.onMessage(function(payload) {
console.log('메시지가 도착했습니다. ', payload);
var result = JSON.stringify(payload, null, 2);
var msg = JSON.parse(result);
var title=msg.notification.title;
var mbody=msg.notification.body;
var icon=msg.notification.icon;
var _mbody = mbody.replace(/(\n|\r\n)/g, '<br>');
console.log(_mbody)
$.notify({
icon: icon,
title: title,
message: mbody
}, {
type: 'media',
delay: 3000,
icon_type: 'image',
template: '<div data-notify="container" class="col-xs-11 col-sm-3 alert alert-{0}" role="alert">' +
'<img data-notify="icon" class="img-circle pull-left">' +
'<span data-notify="title">{1}</span>' +
'<span data-notify="message">{2}</span>' +
'</div>'
});
});
function resetNotiUI() {
clearMessages();
showToken('처리중...');
setMemberId(memberid) // 로그인 사용자의 아이디를 로컬 스토리지에 저장
// Get Instance ID token. Initially this makes a network call, once retrieved
// subsequent calls to getToken will return from cache. 이후의 getToken의 호출은 캐쉬로부터 돌아옵니다.
messaging.getToken().then(function(currentToken) {
if (currentToken) {
sendTokenToServer(currentToken);
updateUIForPushEnabled(currentToken);
} else {
// Show permission request.
if (!isRequestPermission()) {
setRequestPermission(false)
}
console.log('사용할수 있는 인스턴스 ID 토큰이 없습니다. 알림권한을 요청하십시오.');
// 알림권한요청 UI 를 보여줌.
setTimeout(function(){
updateUIForPushPermissionRequired();
}, 1000);
setTokenSentToServer(false);
}
}).catch(function(err) {
console.log('알림권한이 없거나 토큰을 검색하는 중 오류가 발생했습니다. ', err);
updateUIForPushDisabled()
setRequestPermission(false)
});
}
function showToken(currentToken) {
// 콘솔과 페이지에서 토큰을 보여줌
var tokenElement = document.querySelector('.token');
if (tokenElement) {
tokenElement.textContent = currentToken;
}
}
// Rb2에 인스턴스 ID 토큰을 보내세요.:
// - 이 앱으로 메시지를 다시 보내세요.
// - 주제 토큰 구독 / 탈퇴
function sendTokenToServer(currentToken) {
if (!isTokenSentToServer()) {
console.log('Rb2 서버에 토큰 보내기 중 ...');
var agent = navigator.userAgent, match;
var browser, version;
if((match = agent.match(/MSIE ([0-9]+)/)) || (match = agent.match(/Trident.*rv:([0-9]+)/))) browser = 'Internet Explorer';
else if(match = agent.match(/Chrome\/([0-9]+)/)) browser = 'Chrome';
else if(match = agent.match(/Firefox\/([0-9]+)/)) browser = 'Firefox';
else if(match = agent.match(/Safari\/([0-9]+)/)) browser = 'Safari';
else if((match = agent.match(/OPR\/([0-9]+)/)) || (match = agent.match(/Opera\/([0-9]+)/))) browser = 'Opera';
else browser = 'Unknown';
if(browser !== 'Unknown') version = match[1];
$.post(rooturl+'/?r='+raccount+'&m=notification&a=save_token',{
browser : browser,
version : version,
token : currentToken
},function(response){
var result = $.parseJSON(response);
console.log('토큰이 저장되었습니다.' + currentToken)
});
setTokenSentToServer(true);
} else {
console.log('토큰이 이미 서버에 전송 되었으므로 토큰이 변경되지 않는한 재전송되지 않습니다.');
}
}
function isTokenSentToServer() {
return window.localStorage.getItem('sentToServer') == 1;
}
function setTokenSentToServer(sent) {
window.localStorage.setItem('sentToServer', sent ? 1 : 0);
}
function isRequestPermission() {
return window.localStorage.getItem('setRequestPermission') == 1;
}
function setRequestPermission(allow) {
window.localStorage.setItem('setRequestPermission', allow ? 1 : 0);
}
function isNewUser(memberid) {
return window.localStorage.getItem('setMemberId') != memberid;
}
function setMemberId(memberid) {
window.localStorage.setItem('setMemberId', memberid ? memberid : 0);
}
function showHideDiv(divId, show) {
const div = document.querySelector('#' + divId);
if (div) {
if (show) {
div.style = 'display: visible';
} else {
div.style = 'display: none';
}
}
}
function requestPermission() {
console.log('권한 요청 중 ...');
messaging.requestPermission().then(function() {
var nt_web = ''; //알림수신
var nt_fcm = '1'; //푸시 알림수신
console.log('알림권한이 부여 되었습니다.');
$.notify({message: '알림권한이 부여 되었습니다.'});
resetNotiUI();
$.post(rooturl+'/?r='+raccount+'&m=notification&a=notice_config_user',{
sendAjax : true,
nt_web : nt_web,
nt_email : nt_email,
nt_fcm : nt_fcm
},function(response){
var result = $.parseJSON(response);
var error=result.error;
if (!error) console.log('웹알림/푸시알림 수신처리 되었습니다.')
});
}).catch(function(err) {
var nt_fcm = '';
showHideDiv(permissionAlertId, false);
showHideDiv(permissionDivId, false);
showHideDiv(pushDisabledId, true);
console.log('알림을 실행 할수있는 권한이 없습니다.', err);
$.notify({message: '알림 권한이 차단 되었습니다.'},{type: 'danger'});
});
}
function deleteToken() {
// 인스턴스 ID 토큰 삭제.
// [START delete_token]
messaging.getToken().then(function(currentToken) {
messaging.deleteToken(currentToken).then(function() {
console.log('토큰이 삭제 되었습니다.');
setTokenSentToServer(false);
// [START_EXCLUDE]
// 토큰이 삭제되면 관련 UI를 업데이트 합니다..
resetNotiUI();
// [END_EXCLUDE]
}).catch(function(err) {
console.log('토큰을 삭제할 수 없습니다. ', err);
});
// [END delete_token]
}).catch(function(err) {
console.log('인스턴스 ID 토큰을 가져 오는 중 오류가 발생했습니다. ', err);
});
}
// 메시지 모달을 닫고 내용을 초기화 합니다.
function clearMessages() {
modalNoti.modal('hide')
}
function updateUIForPushEnabled(currentToken) {
showHideDiv(permissionAlertId, false);
showHideDiv(tokenDivId, true);
showHideDiv(pushSettingId, true);
showHideDiv(permissionDivId, false);
showToken(currentToken);
}
function updateUIForPushDisabled() {
showHideDiv(pushDisabledId, true);
showHideDiv(permissionAlertId, false);
}
function updateUIForPushPermissionRequired() {
if (!isRequestPermission()) {
console.log('브라우저 알림 권한요청 이력이 없음')
if (!nt_web) {
showHideDiv(permissionAlertId, true);
} else {
console.log('사용자의 모든 알림수신을 차단하였습니다.')
}
} else {
console.log('브라우저 알림 권한요청 이력이 있음')
showHideDiv(permissionDivId, true);
}
}
//알림권한 요청 alert가 닫혔을때(나중에 설정)
$('#permission_alert').on('closed.bs.alert', function () {
$.notify({message: '설정 페이지에서 다시 권한설정 할 수 있습니다.'},{type: 'primary'});
setRequestPermission(true) // 요청이력을 로컬 스토리지에 저장하여 이후에 띄우지 않음
showHideDiv(permissionDivId, true);
})
resetNotiUI();

View File

@@ -0,0 +1,199 @@
/*! PhotoSwipe
* http://photoswipe.com
* Copyright (c) 2017 Dmitry Semenov; */
var initPhotoSwipeFromDOM = function(gallerySelector) {
// parse slide data (url, title, size ...) from DOM elements
// (children of gallerySelector)
var parseThumbnailElements = function(el) {
var thumbElements = el.childNodes,
numNodes = thumbElements.length,
items = [],
figureEl,
linkEl,
size,
item;
for(var i = 0; i < numNodes; i++) {
figureEl = thumbElements[i]; // <figure> element
// include only element nodes
if(figureEl.nodeType !== 1) {
continue;
}
linkEl = figureEl.children[0]; // <a> element
size = linkEl.getAttribute('data-size').split('x');
// create slide object
item = {
src: linkEl.getAttribute('href'),
w: parseInt(size[0], 10),
h: parseInt(size[1], 10)
};
if(figureEl.children.length > 1) {
// <figcaption> content
item.title = figureEl.children[1].innerHTML;
}
if(linkEl.children.length > 0) {
// <img> thumbnail element, retrieving thumbnail url
item.msrc = linkEl.children[0].getAttribute('src');
}
item.el = figureEl; // save link to element for getThumbBoundsFn
items.push(item);
}
return items;
};
// find nearest parent element
var closest = function closest(el, fn) {
return el && ( fn(el) ? el : closest(el.parentNode, fn) );
};
// triggers when user clicks on thumbnail
var onThumbnailsClick = function(e) {
e = e || window.event;
e.preventDefault ? e.preventDefault() : e.returnValue = false;
var eTarget = e.target || e.srcElement;
// find root element of slide
var clickedListItem = closest(eTarget, function(el) {
return (el.tagName && el.tagName.toUpperCase() === 'FIGURE');
});
if(!clickedListItem) {
return;
}
// find index of clicked item by looping through all child nodes
// alternatively, you may define index via data- attribute
var clickedGallery = clickedListItem.parentNode,
childNodes = clickedListItem.parentNode.childNodes,
numChildNodes = childNodes.length,
nodeIndex = 0,
index;
for (var i = 0; i < numChildNodes; i++) {
if(childNodes[i].nodeType !== 1) {
continue;
}
if(childNodes[i] === clickedListItem) {
index = nodeIndex;
break;
}
nodeIndex++;
}
if(index >= 0) {
// open PhotoSwipe if valid index found
openPhotoSwipe( index, clickedGallery );
}
return false;
};
// parse picture index and gallery index from URL (#&pid=1&gid=2)
var photoswipeParseHash = function() {
var hash = window.location.hash.substring(1),
params = {};
if(hash.length < 5) {
return params;
}
var vars = hash.split('&');
for (var i = 0; i < vars.length; i++) {
if(!vars[i]) {
continue;
}
var pair = vars[i].split('=');
if(pair.length < 2) {
continue;
}
params[pair[0]] = pair[1];
}
if(params.gid) {
params.gid = parseInt(params.gid, 10);
}
return params;
};
var openPhotoSwipe = function(index, galleryElement, disableAnimation, fromURL) {
var pswpElement = document.querySelectorAll('.pswp-gallery')[0],
gallery,
options,
items;
items = parseThumbnailElements(galleryElement);
// define options (if needed)
options = {
// define gallery index (for URL)
galleryUID: galleryElement.getAttribute('data-pswp-uid'),
};
// PhotoSwipe opened from URL
if(fromURL) {
if(options.galleryPIDs) {
// parse real index when custom PIDs are used
// http://photoswipe.com/documentation/faq.html#custom-pid-in-url
for(var j = 0; j < items.length; j++) {
if(items[j].pid == index) {
options.index = j;
break;
}
}
} else {
// in URL indexes start from 1
options.index = parseInt(index, 10) - 1;
}
} else {
options.index = parseInt(index, 10);
}
// exit if index not found
if( isNaN(options.index) ) {
return;
}
if(disableAnimation) {
options.showAnimationDuration = 0;
}
// Pass data to PhotoSwipe and initialize it
gallery = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options);
gallery.init();
};
// loop through all gallery elements and bind events
var galleryElements = document.querySelectorAll( gallerySelector );
for(var i = 0, l = galleryElements.length; i < l; i++) {
galleryElements[i].setAttribute('data-pswp-uid', i+1);
galleryElements[i].onclick = onThumbnailsClick;
}
// Parse URL and open gallery if it contains #&pid=3&gid=1
var hashData = photoswipeParseHash();
if(hashData.pid && hashData.gid) {
openPhotoSwipe( hashData.pid , galleryElements[ hashData.gid - 1 ], true, true );
}
};

View File

@@ -0,0 +1,13 @@
<?php
if ($my['uid'] && $d['layout']['main_dashboard']=='true') getLink('/dashboard','','','');
$g['layoutPageVForSite'] = $g['path_var'].'site/'.$r.'/layout.'.$layout.'.main.php'; // 레이아웃 메인페이지 웨젯설정
include is_file($g['layoutPageVForSite']) ? $g['layoutPageVForSite'] : $g['dir_layout'].'_var/_var.main.php';
getWidgetList($d['layout']['main_widgets']);
?>
<?php if (!$d['layout']['main_widgets'] && $my['admin']): ?>
<div class="alert alert-danger text-center border-0 rounded-0" role="alert">
메인 꾸미기가 필요합니다.
</div>
<?php endif; ?>

View File

@@ -0,0 +1,174 @@
<?php
if(!defined('__KIMS__')) exit;
//***********************************************************************************
// 여기에 이 레이아웃에서 사용할 변수들을 정의합니다.
// 변수 작성법은 매뉴얼을 참고하세요.
//***********************************************************************************
$d['layout']['show'] = true; // 관리패널에 레이아웃 관리탭을 보여주기
$d['layout']['date'] = false; // 데이트픽커 사용
//***********************************************************************************
// 설정배열
//***********************************************************************************
$d['layout']['dom'] = array (
/* 헤더 */
'header' => array(
'헤더',
'',
array(
array('type','select','헤더 타입','타입1=type1,타입2=type2,타입3=type3'),
array('title','input','사이트 제목',''),
array('logo','file','이미지 로고',''),
array('logo_size','input','이미지 로고 크기 (1~100% 숫자만)','84'),
array('logo_position','select','이미지 로고 정렬','왼쪽=0,가운데=50,오른쪽=100','50'),
array('position','select','헤더 고정','고정안함=static,고정함=fixed'),
array('container','select','헤더 가로폭','보통(1000px)=container,넓게(1140px)=container-lg,아주넓게(1200px)=container-xl,와이드(100%)=container-fluid,좁게(940px)=container-sm,아주좁게(860px)=container-xs'),
array('menu','select','메뉴','dropdown-hover=dropdown-hover,mega-3depth=mega-3depth,출력안함=false'),
array('menu_limit','select','메뉴레벨','1차메뉴=1,2차메뉴=2,3차메뉴=3,출력안함=false','3'),
array('allcat','select','전체 카테고리','출력=true,미출력=false'),
array('search','select','검색 출력','입력형=input,버튼형=button,미출력=false'),
array('login','select','로그인폼 출력','예=true,아니오=false'),
),
),
'footer' => array(
'풋터',
'',
array(
array('container','select','가로폭','보통(1000px)=container,넓게(1140px)=container-lg,아주넓게(1200px)=container-xl,와이드(100%)=container-fluid,좁게(940px)=container-sm,아주좁게(860px)=container-xs'),
array('type','select','타입','타입1=type1,타입2=type2,타입3=type3'),
array('logo','file','이미지 로고',''),
array('logo_size','input','이미지 로고 크기 (1~100% 숫자만)','84'),
array('logo_gray','select','로고 흑백처리','처리함=true,처리안함=false','true'),
array('link','menu','하단링크',''),
array('family','menu','패밀리 사이트','')
),
),
/* 메인 페이지 */
'home' => array(
'home',
'데스크탑 메인페이지 설정을 관리합니다.',
array(
array('type','select','타입','기본=postAllFeed,직접 꾸미기=widget'),
array('container','select','가로폭','보통(1000px)=container,넓게(1140px)=container-lg,아주넓게(1200px)=container-xl,와이드(100%)=container-fluid,좁게(940px)=container-sm,아주좁게(860px)=container-xs'),
array('dashboard','select','로그인 후 대시보드 이동','아니오=false,예=true'),
),
),
'default' => array(
'default',
'데스크탑 레이아웃 설정을 관리합니다.',
array(
array('container','select','가로폭','보통(1000px)=container,넓게(1140px)=container-lg,아주넓게(1200px)=container-xl,와이드(100%)=container-fluid,좁게(940px)=container-sm,아주좁게(860px)=container-xs'),
array('bgcolor','select','배경색','흰색=bg-white,밝은회색=bg-light'),
array('breadcrumb','select','경로표시','미출력=false,타입1=type1,타입2=type2'),
array('titlebar','select','타이틀바','타입1=type1,타입2=type2,출력안함=false'),
array('menutitle','select','메뉴 타이틀','타입1=type1,타입2=type2,출력안함=false'),
),
),
'sidebar' => array(
'sidebar',
'데스크탑 레이아웃 설정을 관리합니다.',
array(
array('container','select','가로폭','보통(1000px)=container,넓게(1140px)=container-lg,아주넓게(1200px)=container-xl,와이드(100%)=container-fluid,좁게(940px)=container-sm,아주좁게(860px)=container-xs'),
array('bgcolor','select','배경색','흰색=bg-white,밝은회색=bg-light'),
array('breadcrumb','select','경로표시','미출력=false,타입1=type1,타입2=type2'),
array('titlebar','select','타이틀바','타입1=type1,타입2=type2,출력안함=false'),
array('menutitle','select','메뉴 타이틀','타입1=type1,타입2=type2,출력안함=false'),
),
),
'docs' => array(
'docs',
'데스크탑 레이아웃 설정을 관리합니다.',
array(
array('container','select','가로폭','보통(1000px)=container,넓게(1140px)=container-lg,아주넓게(1200px)=container-xl,와이드(100%)=container-fluid,좁게(940px)=container-sm,아주좁게(860px)=container-xs'),
array('bgcolor','select','배경색','흰색=bg-white,밝은회색=bg-light'),
array('footer','select','전용풋터','타입1=type1,타입2=type2,타입3=type3'),
),
),
'company' => array(
'기업정보',
'',
array(
array('name','input','회사명',''),
array('ceo','input','대표자',''),
array('num','input','사업자등록번호',''),
array('num2','input','통신판매업 신고번호',''),
array('manager','input','개인정보보호책임자',''),
array('addr','textarea','주소','3'),
),
),
'contact' => array(
'고객센터',
'',
array(
array('tel','input','전화번호',''),
array('email','input','이메일',''),
array('fax','input','팩스',''),
array('hours','input','업무시간',''),
),
),
'sns' => array(
'소셜미디어',
'URL을 입력하세요.',
array(
array('youtube','input','유튜브',''),
array('instagram','input','인스타그램',''),
array('facebook','input','페이스북',''),
array('nblog','input','네이버블로그',''),
),
),
);
$d['layout']['widget'] = array (
'post' => array(
'포스트',
array(
array('bs4-default/post/post/best/card-default','기간별 추천 포스트'),
array('bs4-default/post/post/new/card-default','최근 포스트'),
array('bs4-default/post/post/tag/card-default','특정 키워드'),
array('bs4-default/post/post/cat/card-default','특정 카테고리'),
array('bs4-default/post/list/new/card-default','최근 리스트'),
array('bs4-default/post/list/view/card-default','특정 리스트'),
),
),
'bbs' => array(
'게시판',
array(
array('bs4-default/bbs/all/list-default','최근 리스트 기본'),
array('bs4-default/bbs/all/gallery-default','최근 갤러리 기본'),
),
),
'mediaset' => array(
'미디어셋',
array(
array('bs4-default/mediaset/banner/carousel-jumbo','배너 캐러셀 점보'),
array('bs4-default/mediaset/banner/grid-default','배너 그리드 기본형'),
),
),
'profile' => array(
'채널',
array(
array('bs4-default/profile/best/card-default','기간별 추천채널')
),
),
);
//***********************************************************************************
?>

View File

@@ -0,0 +1,3 @@
<?php
$d['layout']['main_widgets'] = "";
?>

View File

@@ -0,0 +1,47 @@
<?php
$d['layout']['header_type'] = "type1";
$d['layout']['header_title'] = "마이홈";
$d['layout']['header_logo'] = "";
$d['layout']['header_logo_size'] = "70";
$d['layout']['header_logo_position'] = "0";
$d['layout']['header_position'] = "static";
$d['layout']['header_container'] = "container";
$d['layout']['header_menu'] = "dropdown-hover";
$d['layout']['header_menu_limit'] = "3";
$d['layout']['header_allcat'] = "false";
$d['layout']['header_search'] = "button";
$d['layout']['header_login'] = "true";
$d['layout']['footer_container'] = "container";
$d['layout']['footer_type'] = "type1";
$d['layout']['footer_theme'] = "white";
$d['layout']['home_type'] = "postAllFeed";
$d['layout']['home_container'] = "container";
$d['layout']['home_dashboard'] = "false";
$d['layout']['default_container'] = "container";
$d['layout']['default_bgcolor'] = "bg-white";
$d['layout']['default_breadcrumb'] = "false";
$d['layout']['default_titlebar'] = "type1";
$d['layout']['default_menutitle'] = "type1";
$d['layout']['sidebar_container'] = "container";
$d['layout']['sidebar_bgcolor'] = "bg-white";
$d['layout']['sidebar_breadcrumb'] = "false";
$d['layout']['sidebar_titlebar'] = "false";
$d['layout']['sidebar_menutitle'] = "type1";
$d['layout']['docs_container'] = "container";
$d['layout']['docs_bgcolor'] = "bg-light";
$d['layout']['docs_footer'] = "type3";
$d['layout']['company_name'] = "(주)우리회사";
$d['layout']['company_ceo'] = "홍길동";
$d['layout']['company_num'] = "000-00-00000";
$d['layout']['company_num2'] = "서울강남001";
$d['layout']['company_manager'] = "김길동";
$d['layout']['company_addr'] = "서울시 성동구 0000 1층";
$d['layout']['contact_tel'] = "1234-1234";
$d['layout']['contact_email'] = "test@test.com";
$d['layout']['contact_fax'] = "02-123-4567";
$d['layout']['contact_hours'] = "월-금 9:00-18:00 / 주말, 공휴일 휴무";
$d['layout']['sns_youtube'] = "";
$d['layout']['sns_instagram'] = "";
$d['layout']['sns_facebook'] = "";
$d['layout']['sns_nblog'] = "";
?>

View File

@@ -0,0 +1 @@
nopanel.txt

View File

@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html lang="ko">
<head>
<?php include $g['dir_layout'].'/_includes/_import.head.php' ?>
</head>
<body class="rb-layout-blank">
<main role="main">
<?php include __KIMS_CONTENT__ ?>
</main><!-- /.container -->
<?php include $g['dir_layout'].'/_includes/component.php' ?>
<?php include $g['dir_layout'].'/_includes/_import.foot.php'?>
</body>
</html>

View File

@@ -0,0 +1,180 @@
<?php
if (!$my['uid']) getLink('/','','','');
?>
<!DOCTYPE html>
<html lang="<?php echo $lang['xlayout']['lang']?>" class="h-100">
<head>
<?php include $g['dir_layout'].'/_includes/_import.head.php' ?>
<!-- Chart.js : https://github.com/chartjs/Chart.js/ -->
<?php getImport('Chart.js','Chart','2.8.0','css') ?>
</head>
<body class="rb-layout-dashboard d-flex flex-column h-100<?php echo $page=='main'?' bg-light':'' ?>" style="padding-top:67px">
<nav class="navbar fixed-top navbar-expand navbar-light bg-white border-bottom shadow-sm">
<div class="container-fluid">
<?php echo getLayoutLogo($d['layout'],'header')?>
<form name="PostSearchForm" class="mr-auto ml-3 w-50" action="<?php echo $_HS['rewrite']? RW('mod=dashboard&page=post'):$g['s'].'/'?>"role="form" data-role="searchform">
<?php if (!$_HS['rewrite']): ?>
<input type="hidden" name="r" value="<?php echo $r?>">
<input type="hidden" name="mod" value="dashboard">
<?php endif; ?>
<input type="hidden" name="page" value="post">
<input class="form-control" name="keyword" type="search" placeholder="내 포스트 검색" aria-label="Search" data-plugin="autocomplete" value="<?php echo $keyword ?>">
</form>
<div class="">
<ul class="navbar-nav">
<?php if ($my['uid']): ?>
<?php if ($d['post']['writeperm']): ?>
<li class="nav-item">
<a class="nav-link text-primary" href="<?php echo RW('m=post&mod=write')?>">새 포스트</a>
</li>
<?php endif; ?>
<li class="nav-item dropdown js-tooltip mr-2" title="알림" id="navbarPopoverNoti">
<a class="nav-link notification-indicator" href="/" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="badge badge-danger noti-status" data-role="noti-status"><?php echo $my['num_notice']==0?'':$my['num_notice']?></span>
<strong>새 알림</strong>
</a>
<div class="dropdown-menu dropdown-menu-right py-0" >
<h6 class="dropdown-header d-flex justify-content-between align-items-center py-2 f13">
<strong>새 알림</strong>
<ul class="list-inline small">
<li class="list-inline-item">
<span role="presentation" aria-hidden="true"> · </span>
<a href="/?r=<?php echo $r ?>&mod=settings&page=noti" class="muted-link">설정</a>
</li>
</ul>
</h6>
<div class="list-group list-group-flush" data-role="noti-list" style="max-height: 435px;overflow: auto;">
<!-- 드롭다운이 열릴때, 여기에 알림정보를 받아옴 -->
</div><!-- /.list-group -->
<a class="btn btn-block btn-link muted-link f13 py-2 border-top" href="<?php echo RW('mod=noti')?>">모두보기</a>
</div><!-- /.dropdown-menu -->
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-role="tooltip" title="프로필보기 및 회원계정관리">
<?php echo $my['email']?$my['email']:$my['phone'] ?>
</a>
<div class="dropdown-menu dropdown-menu-right">
<h6 class="dropdown-header"><?php echo $my['nic'] ?> 님</h6>
<div class="dropdown-divider"></div>
<h6 class="dropdown-header">포스트</h6>
<a class="dropdown-item" href="<?php echo RW('m=post&mod=write')?>">
<i class="fa fa-pencil fa-fw" aria-hidden="true"></i> 새 포스트
</a>
<button class="dropdown-item" type="button" data-act="logout" role="button">
<i class="fa fa-sign-out fa-fw" aria-hidden="true"></i> 로그아웃
</button>
<?php if ($my['admin']): ?>
<div class="dropdown-divider"></div>
<a class="dropdown-item text-danger" href="/?m=admin&pickmodule=site&panel=Y" target="_top">관리자모드</a>
<?php endif; ?>
</div>
</li>
<?php else: ?>
<li class="nav-item">
<a class="nav-link" href="#modal-join" data-toggle="modal" data-backdrop="static">회원가입</a>
</li>
<li class="nav-item position-relative" id="navbarPopoverLogin">
<a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="드롭다운형 로그인">
로그인
</a>
</li>
<?php endif; ?>
</ul>
</div>
</div><!-- /.container -->
</nav>
<nav class="sidebar d-print-none">
<?php include $g['dir_layout'].'/_includes/sidebar-dashboard.php' ?>
</nav>
<main role="main">
<!-- 알림수신을 위한 권한요청 (권한이 설정되지 않은 경우만 표시) -->
<div class="alert alert-light mb-0 rounded-0 border-bottom" role="alert" id="permission_alert" style="display: none">
<div class="d-flex justify-content-between">
<p class="f13 mb-0">
<i class="fa fa-bell fa-fw text-primary" aria-hidden="true"></i> 데스크탑 푸시알림을 수신하면 공지사항은 물론 회원님이 게시글에 대한 피드백 또는 내가 언급된 글에 대한 정보들을 실시간으로 받아보실 수 있습니다.
<a href="#" class="alert-link" onclick="requestPermission()"><u>권한 설정</u></a>
</p>
<button type="button" class="close" data-dismiss="alert" aria-label="Close" title="나중에 하기">
<span aria-hidden="true">&times;</span>
</button>
</div>
</div>
<?php include __KIMS_CONTENT__ ?>
</main>
<!-- Chart.js : https://github.com/chartjs/Chart.js/ -->
<?php getImport('Chart.js','Chart.bundle.min','2.8.0','js') ?>
<!-- jQuery-Autocomplete : https://github.com/devbridge/jQuery-Autocomplete -->
<?php getImport('jQuery-Autocomplete','jquery.autocomplete.min','1.3.0','js') ?>
<script type="text/javascript">
document.title = '대시보드 · <?php echo $my['nic'] ?> ';
$( document ).ready(function() {
$('body').on('click','[data-act="newNoti"]',function(){
var new_noti = getAjaxData('<?php echo $g['s']?>/?r=<?php echo $r?>&m=notification&a=notice_check&noticedata=Y');
$("#rb-alert-desk .alert").alert('close')
$("#rb-noti-timeline").prepend(new_noti)
$(".navbar").find('.mail-status').removeClass('unread')
$(".blankslate").addClass('d-none')
document.title = '킴스큐';
});
$('[data-plugin="autocomplete"]').autocomplete({
width : 625,
lookup: function (query, done) {
$.getJSON(rooturl+"/?m=post&a=search_data", {q: query}, function(res){
var sg_post = [];
var data_arr = res.postlist.split(',');//console.log(data.usernames);
$.each(data_arr,function(key,post){
var postData = post.split('|');
var subject = postData[0];
var cid = postData[1];
sg_post.push({"value":subject,"data":cid});
});
var result = {
suggestions: sg_post
};
done(result);
});
},
onSelect: function (suggestion) {
if ($('[data-plugin="autocomplete"]').val().length >= 1) {
location.href = suggestion.data;
}
}
});
});
</script>
<?php include $g['dir_layout'].'/_includes/component.php' ?>
<?php include $g['dir_layout'].'/_includes/_import.foot.php' ?>
</body>
</html>

View File

@@ -0,0 +1,34 @@
<!DOCTYPE html>
<html lang="ko" class="h-100">
<head>
<?php include $g['dir_layout'].'/_includes/_import.head.php' ?>
</head>
<body class="rb-layout-default d-flex flex-column h-100 <?php echo 'header-'.$d['layout']['header_position'] ?> <?php echo 'header-'.$d['layout']['header_type'] ?>">
<?php include $g['dir_layout'].'/_includes/permissionAlert.php' ?>
<?php include $g['dir_layout'].'/_includes/header.'.$d['layout']['header_type'].'.php' ?>
<?php if ($c && $d['layout']['default_breadcrumb']!='false') include $g['dir_layout'].'/_includes/breadcrumb.'.$d['layout']['default_breadcrumb'].'.php' ?>
<?php if ($c && $d['layout']['default_titlebar']!='false') include $g['dir_layout'].'/_includes/subtitlebar.'.$d['layout']['default_titlebar'].'.php' ?>
<main role="main" class="<?php echo $d['layout']['default_bgcolor'] ?>">
<div class="<?php echo $d['layout']['default_container'] ?> py-4">
<?php if ($c && $d['layout']['default_menutitle']!='false')
include $g['dir_layout'].'/_includes/submenutitle.'.$d['layout']['default_menutitle'].'.php' ?>
<article>
<?php include __KIMS_CONTENT__ ?>
</article>
</div><!-- /.container -->
</main>
<?php include $g['dir_layout'].'/_includes/footer.'.$d['layout']['footer_type'].'.php' ?>
<?php include $g['dir_layout'].'/_includes/component.php' ?>
<?php include $g['dir_layout'].'/_includes/_import.foot.php'?>
</body>
</html>

View File

@@ -0,0 +1,21 @@
<!DOCTYPE html>
<html lang="ko">
<head>
<?php include $g['dir_layout'].'/_includes/_import.head.php' ?>
</head>
<body class="rb-layout-docs d-flex flex-column h-100">
<?php include $g['dir_layout'].'/_includes/header.docs.php' ?>
<main role="main" class="<?php echo $d['layout']['docs_container'] ?> px-0 py-4 rb-article">
<article class="rb-article">
<?php include __KIMS_CONTENT__ ?>
</article>
</main><!-- /.container -->
<?php include $g['dir_layout'].'/_includes/footer.'.$d['layout']['docs_footer'].'.php' ?>
<?php include $g['dir_layout'].'/_includes/component.php' ?>
<?php include $g['dir_layout'].'/_includes/_import.foot.php'?>
</body>
</html>

View File

@@ -0,0 +1,21 @@
<!DOCTYPE html>
<html lang="ko" class="h-100">
<head>
<?php include $g['dir_layout'].'/_includes/_import.head.php' ?>
</head>
<body class="rb-layout-home d-flex flex-column h-100 <?php echo 'header-'.$d['layout']['header_position'] ?> <?php echo 'header-'.$d['layout']['header_type'] ?>">
<?php include $g['dir_layout'].'/_includes/permissionAlert.php' ?>
<?php include $g['dir_layout'].'/_includes/header.'.$d['layout']['header_type'].'.php' ?>
<main role="main" class="<?php echo $d['layout']['home_container'] ?>">
<?php include __KIMS_CONTENT__ ?>
</main><!-- /.container -->
<?php include $g['dir_layout'].'/_includes/footer.'.$d['layout']['footer_type'].'.php' ?>
<?php include $g['dir_layout'].'/_includes/component.php' ?>
<?php include $g['dir_layout'].'/_includes/_import.foot.php'?>
</body>
</html>

View File

@@ -0,0 +1 @@
데스크탑 기본

View File

@@ -0,0 +1,42 @@
<!DOCTYPE html>
<html lang="ko">
<head>
<?php include $g['dir_layout'].'/_includes/_import.head.php' ?>
</head>
<body class="rb-layout-sidebar d-flex flex-column h-100 <?php echo 'header-'.$d['layout']['header_position'] ?> <?php echo 'header-'.$d['layout']['header_type'] ?>">
<?php include $g['dir_layout'].'/_includes/header.'.$d['layout']['header_type'].'.php' ?>
<?php if ($c && $d['layout']['sidebar_titlebar']!='false') include $g['dir_layout'].'/_includes/subtitlebar.'.$d['layout']['sidebar_titlebar'].'.php' ?>
<main role="main" class="py-3 <?php echo $d['layout']['sidebar_bgcolor'] ?>">
<div class="<?php echo $d['layout']['sidebar_container'] ?>">
<div class="page-wrapper row">
<nav class="page-nav col bg-white pl-0">
<?php include $g['dir_layout'].'/_includes/subnav.php' ?>
</nav><!-- /.page-nav -->
<div class="page-main col bg-white py-3 px-4">
<?php if ($c && $d['layout']['sidebar_breadcrumb']!='false')
include $g['dir_layout'].'/_includes/breadcrumb.'.$d['layout']['sidebar_breadcrumb'].'.php' ?>
<?php if ($c && $d['layout']['sidebar_menutitle']!='false')
include $g['dir_layout'].'/_includes/submenutitle.'.$d['layout']['sidebar_menutitle'].'.php' ?>
<article>
<?php include __KIMS_CONTENT__ ?>
</article>
</div><!-- /.page-main -->
</div><!-- /.page-wrapper -->
</div><!-- /.container -->
</main>
<?php include $g['dir_layout'].'/_includes/footer.'.$d['layout']['footer_type'].'.php' ?>
<?php include $g['dir_layout'].'/_includes/component.php' ?>
<?php include $g['dir_layout'].'/_includes/_import.foot.php'?>
</body>
</html>

View File

@@ -0,0 +1,3 @@
The RBL License
Copyright (c) 2020 Redblock, Inc.

View File

@@ -0,0 +1,3 @@
# 데스크탑 시작하기 레이아웃
## 부트스트랩 4

View File

@@ -0,0 +1,692 @@
@charset "utf-8";
.rb-article {
-webkit-text-size-adjust: 100%;
text-size-adjust: 100%;
line-height: 1.6;
word-wrap: break-word;
}
.rb-article a {
background-color: transparent;
}
.rb-article a:active,
.rb-article a:hover {
outline: 0;
}
.rb-article strong {
font-weight: bold;
}
.rb-article h1 {
font-size: 2em;
margin: 0.67em 0;
}
.rb-article img {
border: 0;
}
.rb-article hr {
box-sizing: content-box;
height: 0;
}
.rb-article pre {
overflow: auto;
}
.rb-article code,
.rb-article kbd,
.rb-article pre {
font-family: monospace, monospace;
font-size: 1em;
}
.rb-article input {
color: inherit;
font: inherit;
margin: 0;
}
.rb-article html input[disabled] {
cursor: default;
}
.rb-article input {
line-height: normal;
}
.rb-article input[type="checkbox"] {
box-sizing: border-box;
padding: 0;
}
.rb-article table {
border-collapse: collapse;
border-spacing: 0;
}
.rb-article td,
.rb-article th {
padding: 0;
}
.rb-article * {
box-sizing: border-box;
}
.rb-article input {
font: 13px / 1.4 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
}
.rb-article a {
color: #4078c0;
text-decoration: none;
}
.rb-article a:hover,
.rb-article a:active {
text-decoration: underline;
}
.rb-article hr {
height: 0;
margin: 15px 0;
overflow: hidden;
background: transparent;
border: 0;
border-bottom: 1px solid #ddd;
}
.rb-article hr:before {
display: table;
content: "";
}
.rb-article hr:after {
display: table;
clear: both;
content: "";
}
.rb-article h1,
.rb-article h2,
.rb-article h3,
.rb-article h4,
.rb-article h5,
.rb-article h6 {
margin-top: 15px;
margin-bottom: 15px;
line-height: 1.1;
}
.rb-article h1 {
font-size: 30px;
}
.rb-article h2 {
font-size: 21px;
}
.rb-article h3 {
font-size: 16px;
}
.rb-article h4 {
font-size: 14px;
}
.rb-article h5 {
font-size: 12px;
}
.rb-article h6 {
font-size: 11px;
}
.rb-article blockquote {
margin: 0;
}
.rb-article ul,
.rb-article ol {
padding: 0;
margin-top: 0;
margin-bottom: 0;
}
.rb-article ol ol,
.rb-article ul ol {
list-style-type: lower-roman;
}
.rb-article ul ul ol,
.rb-article ul ol ol,
.rb-article ol ul ol,
.rb-article ol ol ol {
list-style-type: lower-alpha;
}
.rb-article dd {
margin-left: 0;
}
.rb-article code {
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
font-size: 12px;
}
.rb-article pre {
margin-top: 0;
margin-bottom: 0;
font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace;
}
.rb-article .select::-ms-expand {
opacity: 0;
}
.rb-article .octicon {
font: normal normal normal 16px/1 octicons-link;
display: inline-block;
text-decoration: none;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.rb-article .octicon-link:before {
content: '\f05c';
}
.rb-article:before {
display: table;
content: "";
}
.rb-article:after {
display: table;
clear: both;
content: "";
}
.rb-article>*:first-child {
margin-top: 0 !important;
}
.rb-article>*:last-child {
margin-bottom: 0 !important;
}
.rb-article a:not([href]) {
color: inherit;
text-decoration: none;
}
.rb-article .anchor {
display: inline-block;
padding-right: 2px;
margin-left: -18px;
}
.rb-article .anchor:focus {
outline: none;
}
.rb-article h1,
.rb-article h2,
.rb-article h3,
.rb-article h4,
.rb-article h5,
.rb-article h6 {
margin-top: 1em;
margin-bottom: 16px;
font-weight: bold;
line-height: 1.4;
}
.rb-article h1 .octicon-link,
.rb-article h2 .octicon-link,
.rb-article h3 .octicon-link,
.rb-article h4 .octicon-link,
.rb-article h5 .octicon-link,
.rb-article h6 .octicon-link {
color: #000;
vertical-align: middle;
visibility: hidden;
}
.rb-article h1:hover .anchor,
.rb-article h2:hover .anchor,
.rb-article h3:hover .anchor,
.rb-article h4:hover .anchor,
.rb-article h5:hover .anchor,
.rb-article h6:hover .anchor {
text-decoration: none;
}
.rb-article h1:hover .anchor .octicon-link,
.rb-article h2:hover .anchor .octicon-link,
.rb-article h3:hover .anchor .octicon-link,
.rb-article h4:hover .anchor .octicon-link,
.rb-article h5:hover .anchor .octicon-link,
.rb-article h6:hover .anchor .octicon-link {
visibility: visible;
}
.rb-article h1 {
padding-bottom: 0.3em;
font-size: 2.25em;
line-height: 1.2;
border-bottom: 1px solid #eee;
}
.rb-article h1 .anchor {
line-height: 1;
}
.rb-article h2 {
padding-bottom: 0.3em;
font-size: 1.75em;
line-height: 1.225;
border-bottom: 1px solid #eee;
}
.rb-article h2 .anchor {
line-height: 1;
}
.rb-article h3 {
font-size: 1.5em;
line-height: 1.43;
}
.rb-article h3 .anchor {
line-height: 1.2;
}
.rb-article h4 {
font-size: 1.25em;
}
.rb-article h4 .anchor {
line-height: 1.2;
}
.rb-article h5 {
font-size: 1em;
}
.rb-article h5 .anchor {
line-height: 1.1;
}
.rb-article h6 {
font-size: 1em;
color: #777;
}
.rb-article h6 .anchor {
line-height: 1.1;
}
.rb-article p,
.rb-article blockquote,
.rb-article ul,
.rb-article ol,
.rb-article dl,
.rb-article table,
.rb-article pre {
margin-top: 0;
margin-bottom: 20px;
line-height: 24px
}
.rb-article hr {
height: 4px;
padding: 0;
margin: 16px 0;
background-color: #e7e7e7;
border: 0 none;
}
.rb-article ul,
.rb-article ol {
padding-left: 2em;
}
.rb-article ul ul,
.rb-article ul ol,
.rb-article ol ol,
.rb-article ol ul {
margin-top: 0;
margin-bottom: 0;
}
.rb-article li>p {
margin-top: 16px;
}
.rb-article dl {
padding: 0;
}
.rb-article dl dt {
padding: 0;
margin-top: 16px;
font-size: 1em;
font-style: italic;
font-weight: bold;
}
.rb-article dl dd {
padding: 0 16px;
margin-bottom: 16px;
}
.rb-article blockquote {
padding: 0 15px;
color: #333;
border-left: 4px solid #ddd;
}
.rb-article blockquote>:first-child {
margin-top: 0;
}
.rb-article blockquote>:last-child {
margin-bottom: 0;
}
.rb-article table {
width: 100%;
overflow: auto;
word-break: normal;
word-break: keep-all;
}
.rb-article table th {
font-weight: bold;
}
.rb-article table th,
.rb-article table td {
padding: 6px 13px;
border: 1px solid #ddd;
}
.rb-article table tr {
background-color: #fff;
border-top: 1px solid #ccc;
}
.rb-article img {
max-width: 100%;
box-sizing: content-box;
background-color: #fff;
}
.rb-article video,
.rb-article audio {
min-width: 100%;
margin-bottom: 2rem;
background-color: #ccc
}
.rb-article video {
background: #ccc url("video-box.png") no-repeat center center
}
.rb-blog-view .rb-article video {
background: #fff url("") no-repeat center center
}
.rb-article video source::before {
content: 'videos';
text-align: center
}
.rb-article code {
padding: 0;
padding-top: 0.2em;
padding-bottom: 0.2em;
margin: 0;
font-size: 85%;
background-color: rgba(0,0,0,0.04);
border-radius: 3px;
}
.rb-article code:before,
.rb-article code:after {
letter-spacing: -0.2em;
content: "\00a0";
}
.rb-article pre>code {
padding: 0;
margin: 0;
font-size: 100%;
word-break: normal;
white-space: pre;
background: transparent;
border: 0;
}
.rb-article .highlight {
margin-bottom: 16px;
}
.rb-article .highlight pre,
.rb-article pre {
padding: 16px;
overflow: auto;
font-size: 85%;
line-height: 1.45;
background-color: #f7f7f7;
border-radius: 3px;
}
.rb-article .highlight pre {
margin-bottom: 0;
word-break: normal;
}
.rb-article pre {
word-wrap: normal;
}
.rb-article pre code {
display: inline;
max-width: initial;
padding: 0;
margin: 0;
overflow: initial;
line-height: inherit;
word-wrap: normal;
background-color: transparent;
border: 0;
}
.rb-article pre code:before,
.rb-article pre code:after {
content: normal;
}
.rb-article kbd {
display: inline-block;
padding: 3px 5px;
font-size: 11px;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb;
}
.rb-article .pl-c {
color: #969896;
}
.rb-article .pl-c1,
.rb-article .pl-s .pl-v {
color: #0086b3;
}
.rb-article .pl-e,
.rb-article .pl-en {
color: #795da3;
}
.rb-article .pl-s .pl-s1,
.rb-article .pl-smi {
color: #333;
}
.rb-article .pl-ent {
color: #63a35c;
}
.rb-article .pl-k {
color: #a71d5d;
}
.rb-article .pl-pds,
.rb-article .pl-s,
.rb-article .pl-s .pl-pse .pl-s1,
.rb-article .pl-sr,
.rb-article .pl-sr .pl-cce,
.rb-article .pl-sr .pl-sra,
.rb-article .pl-sr .pl-sre {
color: #183691;
}
.rb-article .pl-v {
color: #ed6a43;
}
.rb-article .pl-id {
color: #b52a1d;
}
.rb-article .pl-ii {
background-color: #b52a1d;
color: #f8f8f8;
}
.rb-article .pl-sr .pl-cce {
color: #63a35c;
font-weight: bold;
}
.rb-article .pl-ml {
color: #693a17;
}
.rb-article .pl-mh,
.rb-article .pl-mh .pl-en,
.rb-article .pl-ms {
color: #1d3e81;
font-weight: bold;
}
.rb-article .pl-mq {
color: #008080;
}
.rb-article .pl-mi {
color: #333;
font-style: italic;
}
.rb-article .pl-mb {
color: #333;
font-weight: bold;
}
.rb-article .pl-md {
background-color: #ffecec;
color: #bd2c00;
}
.rb-article .pl-mi1 {
background-color: #eaffea;
color: #55a532;
}
.rb-article .pl-mdr {
color: #795da3;
font-weight: bold;
}
.rb-article .pl-mo {
color: #1d3e81;
}
.rb-article kbd {
display: inline-block;
padding: 3px 5px;
font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb;
}
.rb-article .task-list-item {
list-style-type: none;
}
.rb-article .task-list-item+.task-list-item {
margin-top: 3px;
}
.rb-article .task-list-item input {
margin: 0 0.35em 0.25em -1.6em;
vertical-align: middle;
}
.rb-article :checked+.radio-label {
z-index: 1;
position: relative;
border-color: #4078c0;
}
/*추가함*/
.rb-article .rb-media {
margin: 0;
margin-bottom: 2em;
}
.rb-article .rb-media figcaption {
margin-top: 10px;
padding-left: 10px;
padding-right: 10px;
font-size: 14px;
color: #777;
line-height: 1.6;
}
.rb-article .rb-media figcaption:before {
padding-right: 7px;
content: '▲';
font-size: 14px;
}
.rb-article figure {
margin: 0 0 2rem;
}

View File

@@ -0,0 +1,858 @@
@charset "utf-8";
/*!
* kimsQ Rb v2.4 데스크탑 시작하기 레이아웃 글로벌 스타일 (bs4-starter)
* Homepage: http://www.kimsq.com
* Copyright 2019 redblock inc
* Licensed under RBL
* Based on Bootstrap v4
*/
/**
* 목차:
*
* 1 - Reset 초기화
* 2 - Structure 구조
* 3 - Header 헤더
* 4 - Content 컨텐츠
* 5 - Sidebar 사이드바
* 6 - Footer 풋터
* 7 - Component 컴포넌트
* 8 - Utilities 유틸리티
* 9 - Theme 테마
* ----------------------------------------------------------------------------
*/
/**
* 1 - Reset 초기화
* ----------------------------------------------------------------------------
*/
html {
font-size: 14.7px;
}
body {
line-height: 1.5;
font-family: AppleSDGothicNeo-Regular,'Malgun Gothic','맑은 고딕',dotum,'돋움',sans-serif;
color: #222;
}
body.rb-layout-docs {
background-color: #fafafa;
}
/**
* 2 - Structure 구조
*
* 컬럼,여백 사이즈 조정
* ----------------------------------------------------------------------------
*/
/* 컨테이터 폭수정 */
.container {
max-width: 975px !important;
}
.rb-layout-docs .container[role="main"] {
width: 20.8cm;
}
.rb-layout-docs .container .document {
min-height: 10cm;
padding: 1cm 2cm 1cm;
border: 1px hsl( 0,0%,82.7% ) solid;
border-radius: var(--ck-border-radius);
background: white;
box-shadow: 0 0 5px hsla( 0,0%,0%,.1 );
margin: 0 auto;
}
.page-nav {
-ms-flex: 0 0 23%;
flex: 0 0 23%;
max-width: 23%;
}
.page-main {
-ms-flex: 0 0 77%;
flex: 0 0 77%;
max-width: 77%;
}
.rb-layout-dashboard [role="main"] {
padding-left: 221px;
}
.rb-layout-dashboard [role="main"] .container {
position: relative;
box-sizing: content-box;
width: 940px;
padding: 0 60px 100px;
margin: 0 auto;
}
/**
* 3 - Header 헤더
* ----------------------------------------------------------------------------
*/
.rb-layout-dashboard .navbar {
padding: 1rem 1.5rem;
z-index: 1040;
}
.rb-layout-dashboard .navbar-brand {
font-size: 1.4rem;
}
.navbar-brand img {
max-width: 100px;
max-height: 100px
}
.navbar .dropdown-menu {
border: 1px solid rgba(27,31,35,0.15);
border-radius: 4px;
box-shadow: 0 3px 12px rgba(27,31,35,0.15);
}
.navbar .dropdown-menu::after {
top: -14px;
left: 15px;
right: auto;
}
.navbar .dropdown-menu-right::after {
right: 121px;
left: auto;
}
.navbar .dropdown-menu-right.dropdown-menu::after {
right: 20px;
}
.navbar .notification-indicator ~ .dropdown-menu-right.dropdown-menu::after {
right: 6px;
}
.navbar .dropdown-menu::before, .dropdown-menu::after {
position: absolute;
display: inline-block;
content: "";
}
.notification-indicator {
position: relative;
}
.notification-indicator .noti-status {
position: absolute;
top: 0;
right: 0;
z-index: 2;
min-width: 14px;
max-width: 24px;
min-height: 14px;
color: #fff;
overflow-x: hidden;
}
.notification-indicator .noti-status.unread {
display: inline-block;
}
#navbarPopoverNoti .dropdown-menu {
width: 380px;
}
/**
* 4 - Content 컨텐츠
* ----------------------------------------------------------------------------
*/
/* card-deck */
.card-deck {
margin-right: -6px;
margin-left: -6px;
}
.card-deck .card {
margin-right: 6px;
margin-left: 6px;
}
/* 포스트 리스트 마스크 */
.list_mask {
position: absolute;
top: 0;
right: 0;
width: 70px;
height: 100%;
background: rgba(0,0,0,.6);
}
.list_mask .txt {
position: absolute;
top: 50%;
width: 100%;
margin-top: -25px;
font-size: 20px;
line-height: 32px;
color: #fff;
text-align: center;
}
.list_avatar {
position: absolute;
bottom: 0;
left: 50%;
margin-bottom: -25px;
margin-left: -25px;
border-radius: 50%
}
/* 포토갤러리 */
[data-plugin="photoswipe"] .figure {
position: relative;
}
[data-plugin="photoswipe"] .figure .btn {
position: absolute;
bottom: .3rem;
right: .3rem;
padding: .5rem;
color: #fff;
background-color: rgba(0, 0, 0, 0.5);
}
/* 새글표시 */
.rb-new {
width: auto;
height: auto;
background-color: transparent;
}
.rb-new::before {
content: 'new';
font-size: 10px;
color: #dc3545;
}
/* 포커스된 아이템 강조표시 */
[data-role="bbs-list"] .list-group-item:focus {
background-color: #F5FFFE !important;
}
[data-role="bbs-list"] .card:focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
-webkit-box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, .5);
box-shadow: 0 0 0 0.2rem rgba(0, 123, 255, .5);
}
[data-role="bbs-list"] .card a:focus
[data-role="bbs-list"] .list-group-item a:focus {
outline: 0
}
.list-group-item.list-group-item-checked {
background-color: #f1f8ff;
}
/* 첨부파일 목록 */
.hidden-xs-up {
display: none
}
/* 구분선 */
.section-divider {
position: relative;
display: block;
margin: 20px 0 19px;
color: #888;
font-size: 13px;
text-align: center;
line-height: 16px;
}
.section-divider:before {
z-index: -1;
display: block;
position: absolute;
width: 100%;
height: 1px;
top: 50%;
left: 0;
-webkit-transform: translateY(-50%);
-ms-transform: translateY(-50%);
transform: translateY(-50%);
-webkit-transform: translateZ(0);
transform: translateZ(0);
background: #ebebeb;
content: '';
}
.section-divider span {
padding: 0 8px;
background: #fff;
}
.note {
min-height: 17px;
margin: 4px 0 2px;
font-size: 12px;
color: #586069;
}
/* 알림 */
.noti-mobule-badge.position-absolute {
top: 1.9rem;
right: -5px;
text-align: center;
border-radius: 4px;
font-size: .8rem;
width: 20px;
height: 20px;
line-height: 20px
}
.noti-mobule-badge.position-absolute::before {
color: #fff;
}
figure.media {
display: block
}
/* ckeditor content */
.ck-content p {
margin-bottom: 1.13em;
letter-spacing: -0.02em;
font-size: 1rem;
line-height: 1.63em;
color: #333;
}
.ck-content .image {
display: block;
max-width: 100%;
text-align: center
}
.ck-content .image figcaption {
padding: 15px 0 0;
text-align: left;
font-size: 13px;
line-height: 18px;
color: #919191;
}
.ck-content .image-style-side,
.ck-content .image-style-align-left,
.ck-content .image-style-align-center,
.ck-content .image-style-align-right {
max-width: 50%;
}
.ck-content .image.image-style-side {
float: right;
margin-left: 1.5em ;
}
.ck-content .image-style-align-left {
float: left;
margin-right: 1.5em;
}
.ck-content .image-style-align-center {
margin-left: auto;
margin-right: auto;
}
.ck-content .image-style-align-right {
float: right;
margin-left: 1.5em;
}
/* embed media */
figure.media oembed .media-body {
padding: 1rem
}
figure.media oembed iframe {
margin: 0 auto !important
}
/*attach*/
.attach-section figure,
.attach-section .card {
position: relative;
}
.attach-section figcaption,
.attach-section .card-img-overlay {
opacity: 0;
position: absolute;
top:0;
left: 0;
right: 0;
bottom: 0;
background-color: rgba(0, 0, 0, 0.5);
word-break: break-all;
cursor: pointer;
transition-timing-function: ease-in;
transition-duration: .3s;
transition-property: all;
transition-delay: 0s;
}
.attach-section figcaption {
color: #fff;
}
.attach-section .card-img-overlay:hover,
.attach-section figcaption:hover {
opacity: 1 !important;
-webkit-transform: translate(0, 0);
-ms-transform: translate(0, 0);
transform: translate(0, 0);
text-decoration: none;
}
.attach-section .card-img-overlay:hover {
background-color: #fff !important
}
.attach-section [data-role="caption"] {
display: none;
}
.attach-section .float-left:first-child {
margin-right: 10px
}
.attach-section .card__corner {
position: absolute;
top: 0;
right: 0;
width: 2em;
height: 2em;
background-color: #e6e7e8;
border: 1px solid rgba(0,0,0,.045);
border-top: 0;
}
.attach-section .card .card__corner {
top: -1px;
right: -1px;
}
.attach-section .card__corner .card__corner-triangle {
position: absolute;
width: 0;
height: 0;
border-style: solid;
border-width: 0 2em 2em 0;
border-color: transparent #fff transparent transparent;
}
.attach-section .card:hover .card__corner,
.attach-section figure:hover .card__corner {
display: none
}
.rb-layout-dashboard .subhead {
padding: 51px 0 12px;
}
.rb-layout-dashboard .subhead h3 {
display: inline-block;
font-weight: normal;
font-size: 28px;
}
/*검색어 추천*/
.autocomplete-suggestions {
overflow-y: auto;
padding-left: 0;
margin-top: .0625rem;
margin-bottom: 0.9375rem;
list-style: none;
background-color: transparent;
background-color: #fff;
border: 1px solid rgba(0,0,0,.15);
box-shadow: 0 .125rem .25rem rgba(0,0,0,.075)!important;
}
.autocomplete-suggestion {
position: relative;
padding:.6rem 1rem .5rem 1rem;
overflow: hidden;
border-bottom: 0.0625rem solid rgba(0, 0, 0, 0.075);
display: block;
overflow: hidden;
color: inherit;
cursor: pointer;
z-index: 9999999
}
.autocomplete-selected { background: #F0F0F0; }
.autocomplete-suggestion:empty {
display: none
}
.autocomplete-suggestion{color:#333}
.autocomplete-suggestion strong{
font-weight:normal;
color:#007bff
}
/* image-marker */
[data-role="image-marker-area"] {
position: relative
}
[data-role="image-marker-area"] a {
display: block;
width: 20px;
height: 20px;
background: #f30;
padding-left: 3.5px;
padding-top: 3.6px;
color: #fff;
border-radius: 50%;
position: absolute;
opacity: 0.7;
transition: all 0.4s
}
[data-role="image-marker-area"] a:hover {
opacity: 1;
text-decoration: none;
}
[data-role="image-marker-area"] .active {
animation: pulser 1s infinite
}
/* 메인화면 편집 */
[data-role="widgetPage"] .card.active {
background: #f2fbff;
border-color: #d2d1d1
}
[data-role="widgetPage"] .dd-item .badge {
display: none;
position: absolute;
width: 19px;
height: 16px;
border-radius: 0
}
[data-role="widgetPage"] .dd-item:hover .badge {
display: inline-block;
}
.dd-dragel .dd-item .badge {
display: none
}
[data-role="widgetPage"] .dd-item .badge[data-act="remove"] {
right: 5px;
top: 5px;
}
[data-role="widgetPage"] .dd-item .badge[data-act="move"] {
left: 5px;
top: 5px;
cursor: pointer;
}
[data-role="addWidget"] .card {
display: none
}
[data-role="addWidget"].active .card {
display: block
}
[data-role="addWidget"].active .btn {
display: none
}
.card-placeholder {
margin: 5px 0; padding: 0; min-height: 30px; background: #f2fbff; border: 1px dashed #b6bcbf; box-sizing: border-box; -moz-box-sizing: border-box;
}
/**
* Nestable
*/
.dd { }
.dd-list { display: block; position: relative; list-style: none; }
.dd-list .dd-list { }
.dd-collapsed .dd-list { display: none; }
.dd-item,
.dd-empty,
.dd-placeholder { }
.dd-placeholder,
.dd-empty { margin: 5px 0; padding: 0; min-height: 30px; background: #f2fbff; border: 1px dashed #b6bcbf; box-sizing: border-box; -moz-box-sizing: border-box; }
.dd-empty { border: 1px dashed #bbb; min-height: 100px; background-color: #e5e5e5;
background-image: -webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff),
-webkit-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);
background-image: -moz-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff),
-moz-linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);
background-image: linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff),
linear-gradient(45deg, #fff 25%, transparent 25%, transparent 75%, #fff 75%, #fff);
background-size: 60px 60px;
background-position: 0 0, 30px 30px;
}
.dd-dragel { position: absolute; pointer-events: none; z-index: 9999; }
.dd-dragel > .dd-item .dd-handle { margin-top: 0; }
.dd-dragel .dd-handle {
-webkit-box-shadow: 2px 4px 6px 0 rgba(0,0,0,.1);
box-shadow: 2px 4px 6px 0 rgba(0,0,0,.1);
}
/**
* 5 - Sidebar 사이드바
* ----------------------------------------------------------------------------
*/
.page-nav .nav-link {
font-size: 14px;
color: #4b4f56;
font-weight: 500;
margin: 4px 0;
padding: 0;
text-decoration: none;
word-break: break-word;
}
.page-nav .nav-link:hover {
color: #1d2129;
text-decoration: underline
}
.page-nav .nav-link.active {
color: #4080ff;
}
.rb-layout-dashboard .sidebar {
position: fixed;
top: 69px;
left: 0;
bottom: 0;
z-index: 1030;
width: 220px;
border-right: 1px solid rgb(221,221,221);
background-color: rgb(255,255,255);
overflow: auto;
}
.rb-layout-dashboard .sidebar > .nav-menu {
border-top: 1px solid rgb(221,221,221);
border-bottom: 1px solid rgb(221,221,221);
}
.rb-layout-dashboard .sidebar .nav-menu .nav-link {
display: block;
position: relative;
height: 49px;
padding: 0 0 0 32px;
font-size: 16px;
line-height: 50px;
color: rgb(51,51,51);
}
.rb-layout-dashboard .sidebar > .nav-menu > .nav-item + .nav-item {
border-top: 1px solid rgb(238,238,238);
}
.rb-layout-dashboard .sidebar .nav-menu .nav-link:hover {
color: #007bff;
-webkit-font-smoothing: antialiased;
text-decoration: none;
}
.rb-layout-dashboard .sidebar .nav-menu .nav-item > .nav-link .fa-plus {
color: #ccc;
font-size: 14px;
}
.rb-layout-dashboard .sidebar .nav-menu .nav-item.active > .nav-link {
font-weight: 600;
color: #007bff;
background-color: rgb(249,249,250);
-webkit-font-smoothing: antialiased;
}
.rb-layout-dashboard .sidebar .nav-menu > .nav-item.active > .nav-link {
border-left: 4.5px solid #007bff;
}
.rb-layout-dashboard .sidebar .nav-menu .nav-item.active > .nav-link .fa-plus::before {
content: "\f068";
}
.rb-layout-dashboard .sidebar .nav-menu .nav {
display: none;
padding: 12px 0 14px;
border-top: 1px solid rgb(238,238,238);
background-color: rgb(249,249,250);
}
.rb-layout-dashboard .sidebar .nav-menu .active .nav {
display: block;
}
.rb-layout-dashboard .sidebar .nav-menu .nav .nav-link {
display: block;
height: 27px;
padding-left: 43px;
font-size: 14px;
line-height: 29px;
color: rgb(102,102,102);
}
.rb-layout-dashboard .sidebar .nav-menu .nav .nav-link:hover {
text-decoration: underline;
}
/**
* 6 - Footer 풋터
* ----------------------------------------------------------------------------
*/
.rb-footer {
padding-top: 40px;
padding-bottom: 40px;
margin-top: 100px;
border-top: 1px solid #e5e5e5;
}
/**
* 7 - Component 컴포넌트
* ----------------------------------------------------------------------------
*/
/* form */
.form-control {
border-radius: 0
}
.invalid-feedback {
margin-top: .5rem!important;
}
/* button */
.btn {
border-radius: 0
}
.btn-white {
color: #24292e;
user-select: none;
background-color: #fff;
border: 1px solid rgba(27,31,35,0.2);
white-space: nowrap;
vertical-align: middle;
cursor: pointer;
}
.btn-white:hover {
border-color: #999;
background-color: #eff3f6;
}
.btn-white:disabled {
background-color: #eee;
color: #999;
}
.btn-white.active {
color: #856404;
background-color: #fff3cd;
border-color: #ffeeba;
}
.btn-light {
color: #24292e;
user-select: none;
background-color: #eff3f6;
background-image: linear-gradient(-180deg, #fafbfc 0%, #eff3f6 90%);
background-repeat: repeat-x;
background-position: -1px -1px;
background-size: 110% 110%;
border: 1px solid rgba(27,31,35,0.2);
white-space: nowrap;
vertical-align: middle;
cursor: pointer;
}
.btn-light:hover, .btn-light.hover {
background-color: #e6ebf1;
background-image: linear-gradient(-180deg, #f0f3f6 0%, #e6ebf1 90%);
background-position: -.5em;
border-color: rgba(27,31,35,0.35);
}
.btn-light:not(:disabled):not(.disabled).active,
.btn-light:not(:disabled):not(.disabled):active,
.show>.btn-light.dropdown-toggle {
background-color: #e9ecef;
background-image: none;
border-color: rgba(27,31,35,0.35);
box-shadow: inset 0 0.15em 0.3em rgba(27,31,35,0.15);
}
.btn-light:not(:disabled):not(.disabled).active:focus,
.btn-light:not(:disabled):not(.disabled):active:focus,
.show>.btn-light.dropdown-toggle:focus {
box-shadow: 0 0 0 0.2em rgba(3,102,214,0.3);
}
/* card */
.card {
border-radius: 0;
}
/* modal */
#modal-login {
z-index: 1070
}
/* alert */
.alert.alert-default {
background-color: #333;
color: #fff
}
/* badge */
.badge-light {
background-color: #fff;
border: solid 1px #ddd;
color: #777;
letter-spacing: -1px;
font-weight: normal;
}
.badge-default {
color: #fff;
background-color: #6c757d;
}
/* input-group */
.input-group-text {
border-radius: 0;
}
/* share */
.share .list-inline-item img {
width: 50px
}
/* dropdown */
.dropdown-menu {
border-radius: 0;
}
/**
* 8 - Utilities 유틸리티
* ----------------------------------------------------------------------------
*/
/* CKEditor 5 Balloon with Bootstrap 4 */
.ck.ck-balloon-panel {
z-index: 1090;
}
.ck.ck-balloon-panel[class*=arrow_n]:after {
z-index: 1090;
}
[data-notify="container"] {
text-align: center;
}
/**
* 9 - Theme 테마
* ----------------------------------------------------------------------------
*/
.modal-content {
border: 1px solid #999;
border-radius: 0;
box-shadow: 0 2px 4px rgba(17,17,17,0.06), 0 4px 15px rgba(17,17,17,0.08);
-webkit-box-shadow: 0 2px 4px rgba(17,17,17,0.06), 0 4px 15px rgba(17,17,17,0.08);
}
.modal-backdrop {
background-color: #fff;
}
.modal-backdrop.show {
opacity: .8;
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -0,0 +1,19 @@
<?php
//사이트별 레이아웃 설정 변수
$layout = dirname($_HS['layout']);
$g['layoutVarForSite'] = $g['dir_var_site'].'layout.'.$layout.'.var.php';
include is_file($g['layoutVarForSite']) ? $g['layoutVarForSite'] : $g['dir_layout'].'_var/_var.php';
//사이트 부가정보 변수
$g['siteinfo'] = $g['dir_var_site'].'siteinfo.php';
if (is_file($g['siteinfo'])) include $g['siteinfo'];
//사이트별 웹앱 매니페스트
$g['manifestForSite'] = $g['dir_var_site'].'manifest.json';
$g['url_manifest'] = $g['url_var_site'].'/manifest.json';
$manifestForSite = file_exists($g['manifestForSite']) ? $g['url_manifest'] : $g['path_module'].'site/var/manifest.json';
if ($layoutPage) {
$g['main'] = $g['path_layout'].$d['site_layout'].'/_pages/'.$layoutPage.'.php';
}
?>

View File

@@ -0,0 +1,53 @@
<!-- 엔진코드:삭제하지마세요 -->
<?php include $g['path_core'].'engine/foot.engine.php'?>
<!-- 포토모달 : photoswipe http://photoswipe.com/documentation/getting-started.html -->
<?php getImport('photoswipe','photoswipe','4.1.1','css') ?>
<?php getImport('photoswipe','default-skin/default-skin','4.1.1','css') ?>
<?php getImport('photoswipe','photoswipe.min','4.1.1','js') ?>
<?php getImport('photoswipe','photoswipe-ui-default.min','4.1.1','js') ?>
<script src="<?php echo $g['url_layout']?>/_js/photoswipe.js"></script>
<!-- 소셜공유시 URL 클립보드저장 : clipboard.js : https://github.com/zenorocha/clipboard.js-->
<?php getImport('clipboard','clipboard.min','2.0.4','js') ?>
<!-- 입력 textarea 자동확장 -->
<?php getImport('autosize','autosize.min','3.0.14','js')?>
<!-- markjs js : https://github.com/julmot/mark.js -->
<?php getImport('markjs','jquery.mark.min','8.11.1','js')?>
<!-- linkifyjs : https://github.com/Soapbox/linkifyjs -->
<?php getImport('linkifyjs','linkify.min','2.1.8','js')?>
<?php getImport('linkifyjs','linkify-string.min','2.1.8','js')?>
<!-- bootstrap-notify : https://github.com/mouse0270/bootstrap-notify -->
<?php getImport('bootstrap-notify','bootstrap-notify.min','3.1.3','js')?>
<!-- 댓글출력시 필요 -->
<?php if ($g['broswer']!='MSIE 11' && $g['broswer']!='MSIE 10' && $g['broswer']!='MSIE 9'): ?>
<?php if ($mod!='write'): ?>
<script src="https://cdn.ckeditor.com/ckeditor5/21.0.0/decoupled-document/ckeditor.js"></script>
<script src="https://cdn.ckeditor.com/ckeditor5/21.0.0/decoupled-document/translations/ko.js"></script>
<?php endif; ?>
<script src="<?php echo $g['url_root']?>/modules/comment/lib/Rb.comment.js"></script>
<?php else: ?>
<script src="<?php echo $g['url_root']?>/modules/comment/lib/Rb.comment.old.js"></script>
<?php endif; ?>
<!-- 레이아웃 공용 스크립트 -->
<script src="<?php echo $g['url_layout']?>/_js/main.js<?php echo $g['wcache']?>"></script>
<?php if($_SERVER['HTTPS'] == 'on' && $g['broswer']!='MSIE 10' && $g['broswer']!='MSIE 11'):?>
<script>
if ('serviceWorker' in navigator && 'PushManager' in window) {
console.log('서비스워커와 푸시가 지원되는 브라우저 입니다.');
window.addEventListener('load', () => {
navigator.serviceWorker.register('<?php echo $g['s']?>/sw.js');
});
} else {
console.warn('푸시 메시징이 지원되지 않는 브라우저 입니다.');
}
</script>
<?php endif?>

View File

@@ -0,0 +1,66 @@
<meta charset="utf-8">
<!-- Seo -->
<meta name="robots" content="<?php echo strip_tags($g['meta_bot'])?>">
<meta name="title" content="<?php echo strip_tags($g['meta_tit'])?>">
<meta name="keywords" content="<?php echo strip_tags($g['meta_key'])?>">
<meta name="description" content="<?php echo strip_tags($g['meta_des'])?>">
<meta name="author" content="<?php echo $_HS['name'] ?>">
<link rel="image_src" href="<?php echo strip_tags($g['meta_img'])?>">
<link rel="canonical" href="<?php echo strip_tags($g['url_root'].$_SERVER['REQUEST_URI'])?>">
<meta property="og:site_name" content="<?php echo $_HS['name'] ?>">
<meta property="og:locale" content="ko_KR">
<meta property="og:type" content="article">
<meta property="og:url" content="<?php echo strip_tags($g['url_root'].$_SERVER['REQUEST_URI'])?>">
<meta property="og:title" content="<?php echo strip_tags($g['meta_tit'])?>">
<meta property="og:description" content="<?php echo strip_tags($g['meta_des'])?>">
<meta property="og:image" content="<?php echo strip_tags($g['meta_img'])?>">
<title><?php echo $g['browtitle']?></title>
<!-- 파비콘 -->
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="<?php echo $g['img_layout']?>/icon/homescreen.png">
<link rel="shortcut icon" href="<?php echo $g['img_layout']?>/icon/favicon.ico">
<!-- 웹앱 매니페스트 -->
<link rel="manifest" href="<?php echo $manifestForSite?>">
<!-- 사이트 헤드 코드 -->
<?php echo $_HS['headercode']?>
<!-- bootstrap css -->
<?php getImport('bootstrap','css/bootstrap.min','4.4.1','css')?>
<!-- jQuery -->
<?php getImport('jquery','jquery.min','3.3.1','js')?>
<?php getImport('popper.js','umd/popper.min','1.14.0','js')?>
<!-- bootstrap js -->
<?php getImport('bootstrap','js/bootstrap.min','4.4.1','js')?>
<!-- 시스템 폰트 -->
<?php getImport('font-awesome','css/font-awesome','4.7.0','css')?>
<?php getImport('font-kimsq','css/font-kimsq',false,'css')?>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<!-- anchorjs : https://github.com/bryanbraun/anchorjs -->
<?php getImport('anchorjs','anchor.min','4.2.0','js')?>
<!-- smooth-scroll: https://github.com/cferdinandi/smooth-scroll -->
<?php getImport('smooth-scroll','smooth-scroll.polyfills.min','16.1.0','js') ?>
<!-- 엔진코드:삭제하지마세요 -->
<?php include $g['path_core'].'engine/cssjs.engine.php' ?>
<!-- 레이아웃 스타일 -->
<link href="<?php echo $g['url_layout']?>/_css/style.css<?php echo $g['wcache']?>" rel="stylesheet">
<!-- 레이아웃 본문 컨텐츠 스타일(선택) -->
<link href="<?php echo $g['url_layout']?>/_css/article.css" rel="stylesheet">
<!-- timeago : 상대시간 표기 -->
<?php getImport('jquery-timeago','jquery.timeago','1.6.7','js')?>
<?php getImport('jquery-timeago','locales/jquery.timeago.ko','1.6.7','js')?>

View File

@@ -0,0 +1,58 @@
<?php
// seo 데이타 -- 전송되는 타이틀 추출
$_MSEO = getDbData($table['s_seo'],'rel=1 and parent='.$_HM['uid'],'*');
$_PSEO = getDbData($table['s_seo'],'rel=2 and parent='.$_HP['uid'],'*');
$_WTIT=strip_tags($g['meta_tit']);
//$_link_domain = 'http'.($_SERVER['HTTPS']=='on'?'s':'').'://';
//$_link_url = $_link_domain.$_SERVER['REQUEST_URI']; // URL
$_link_url=$g['url_root'].$_SERVER['REQUEST_URI'];
?>
<ul class="list-inline mb-3">
<li data-toggle="tooltip" title="페이스북" class="list-inline-item">
<a href="" role="button">
<img src="<?php echo $g['img_core']?>/sns/facebook.png" alt="페이스북공유" class="rounded-circle" width="48">
</a>
</li>
<li data-toggle="tooltip" title="카카오스토리" class="list-inline-item">
<a href="" role="button">
<img src="<?php echo $g['img_core']?>/sns/kakaostory.png" alt="카카오스토리" class="rounded-circle" width="48">
</a>
</li>
<li data-toggle="tooltip" title="네이버" class="list-inline-item">
<a href="" role="button">
<img src="<?php echo $g['img_core']?>/sns/naver.png" alt="네이버" class="rounded-circle" width="48">
</a>
</li>
<li data-toggle="tooltip" title="트위터" class="list-inline-item">
<a href="" role="button">
<img src="<?php echo $g['img_core']?>/sns/twitter.png" alt="트위터" class="rounded-circle" width="48">
</a>
</li>
<li data-toggle="tooltip" title="메일보내기" class="list-inline-item">
<a href="mailto:<?php if($my['uid']):?><?php echo $my['email']?><?php endif?>?subject=경기방송%20기사공유-<?php echo $_WTIT?>&body=<?php echo $_link_url?>">
<img src="<?php echo $g['img_core']?>/sns/mail.png" alt="메일" class="rounded-circle" width="48">
</a>
</li>
</ul>
<script type="text/javascript">
// sns 이벤트
function snsWin(sns)
{
var snsset = new Array();
var enc_tit = "<?php echo urlencode($_HS['title'])?>";
var enc_sbj = "<?php echo urlencode($_WTIT)?>";
var enc_url = "<?php echo urlencode($_link_url)?>";
var enc_tag = "<?php echo urlencode(str_replace(',',' ',$R['tag']))?>";
snsset['t'] = 'https://twitter.com/intent/tweet?url=' + enc_url + '&text=' + enc_sbj;
snsset['f'] = 'http://www.facebook.com/sharer.php?u=' + enc_url;
snsset['n'] = 'http://share.naver.com/web/shareView.nhn?url=' + enc_url + '&title=' + enc_sbj;
snsset['ks'] = 'https://story.kakao.com/share?url=' + enc_url + '&title=' + enc_sbj;
window.open(snsset[sns]);
}
</script>

View File

@@ -0,0 +1,349 @@
<!--
컴포넌트 모음
1. 일반모달 : 회원가입
2. 일반모달 : 로그인
3. 일반모달 : 알림
4. 일반모달 : 게시물 보기
5. 일반모달 : 게시물 쓰기
6. 포토모달 : 댓글형
7. 포토모달 : 갤러리형
8. 마크업 참조: 링크공유
-->
<!-- 1. 일반모달 : 회원가입 -->
<?php include_once $g['path_module'].'member/themes/'.$d['member']['theme_main'].'/join/component.php'; ?>
<!-- 2. 일반모달 : 로그인 -->
<?php include_once $g['path_module'].'member/themes/'.$d['member']['theme_main'].'/login/component.php'; ?>
<!-- 3. 일반모달 : 알림 -->
<?php include_once $g['path_module'].'member/themes/'.$d['member']['theme_main'].'/noti/component.php'; ?>
<!-- 4. 일반모달 : 게시물 보기-->
<div class="modal" id="modal-bbs-view" tabindex="-1" role="dialog" aria-labelledby="exampleModalLabel" aria-hidden="true">
<input type="hidden" name="bid" value="">
<input type="hidden" name="uid" value="">
<div class="modal-dialog modal-lg" role="document" style="max-width: 95%">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" data-role="title">게시물 보기</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Close" data-toggle="tooltip" title="닫기(Esc)">
<span aria-hidden="true">&times;</span>
</button>
</div>
<div class="modal-body p-0">
<div class="row no-gutters">
<main class="col-7">
<div data-role="article"></div>
</main>
<aside class="col-5 border-left">
<div class="commentting-container" data-role="comment-area"></div>
<div data-role="comment-alert" class="d-none">
<div class="d-flex align-items-center justify-content-center text-muted" style="height: calc(100vh - 9.5rem);">
댓글이 지원되지 않습니다.
</div>
</div>
</aside>
</div><!-- /.row -->
</div><!-- /.modal-body -->
</div>
</div>
</div>
<!-- 5. 일반모달 : 게시물 쓰기 -->
<?php
if ($m=='bbs') {
$bbs_component = $g['path_module'].'bbs/themes/'.$d['bbs']['skin'].'/component.php';
if (file_exists($bbs_component)) include_once $bbs_component;
}
?>
<!-- 6. 포토모달 : 댓글형 -->
<div class="pswp pswp-comment" tabindex="-1" role="dialog" aria-hidden="true">
<input type="hidden" name="uid" value="">
<input type="hidden" name="bid" value="">
<div class="pswp__bg"></div>
<!-- Slides wrapper with overflow:hidden. -->
<div class="pswp__scroll-wrap">
<!-- Container that holds slides.
PhotoSwipe keeps only 3 of them in the DOM to save memory.
Don't modify these 3 pswp__item elements, data is added later on. -->
<div class="pswp__container">
<div class="pswp__item"></div>
<div class="pswp__item"></div>
<div class="pswp__item"></div>
</div>
<!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
<div class="pswp__ui pswp__ui--hidden">
<div class="pswp__top-bar">
<!-- Controls are self-explanatory. Order can be changed. -->
<div class="pswp__subject">
<span data-role="category" class="text-primary"></span>
<span data-role="subject"></span>
</div>
<div class="pswp__counter"></div>
<button class="pswp__button pswp__button--fs" data-toggle="tooltip" title="전체 화면으로 보기"></button>
<!-- Preloader demo http://codepen.io/dimsemenov/pen/yyBWoR -->
<!-- element will get class pswp__preloader-active when preloader is running -->
<div class="pswp__preloader">
<div class="pswp__preloader__icn">
<div class="pswp__preloader__cut">
<div class="pswp__preloader__donut"></div>
</div>
</div>
</div>
</div>
<div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
<div class="pswp__share-tooltip"></div>
</div>
<button class="pswp__button pswp__button--arrow--left" title="이전">
</button>
<button class="pswp__button pswp__button--arrow--right" title="다음">
</button>
<div class="pswp__caption">
<div class="pswp__caption__center"></div>
</div>
</div>
</div>
<div class="rb__area">
<div data-role="article"></div>
<div class="commentting-container mt-4" data-role="comment-area"></div>
<div data-role="comment-alert" class="d-none">
<div class="d-flex align-items-center justify-content-center text-muted" style="height: calc(100vh - 27.5rem);">
댓글이 지원되지 않습니다.
</div>
</div>
</div>
<button class="pswp__button pswp__button--close" data-toggle="tooltip" title="닫기(Esc)"></button>
</div>
<!-- 7. 포토모달 : 갤러리형 -->
<div class="pswp pswp-gallery" tabindex="-1" role="dialog" aria-hidden="true">
<!-- Background of PhotoSwipe.
It's a separate element, as animating opacity is faster than rgba(). -->
<div class="pswp__bg"></div>
<!-- Slides wrapper with overflow:hidden. -->
<div class="pswp__scroll-wrap">
<!-- Container that holds slides. PhotoSwipe keeps only 3 slides in DOM to save memory. -->
<!-- don't modify these 3 pswp__item elements, data is added later on. -->
<div class="pswp__container">
<div class="pswp__item"></div>
<div class="pswp__item"></div>
<div class="pswp__item"></div>
</div>
<!-- Default (PhotoSwipeUI_Default) interface on top of sliding area. Can be changed. -->
<div class="pswp__ui pswp__ui--hidden">
<div class="pswp__top-bar">
<!-- Controls are self-explanatory. Order can be changed. -->
<div class="pswp__counter"></div>
<button class="pswp__button pswp__button--close" title="닫기 (Esc)"></button>
<button class="pswp__button pswp__button--fs" title="전체화면 보기"></button>
<button class="pswp__button pswp__button--zoom" title="Zoom in/out"></button>
<!-- Preloader demo https://codepen.io/dimsemenov/pen/yyBWoR -->
<!-- element will get class pswp__preloader-active when preloader is running -->
<div class="pswp__preloader">
<div class="pswp__preloader__icn">
<div class="pswp__preloader__cut">
<div class="pswp__preloader__donut"></div>
</div>
</div>
</div>
</div>
<div class="pswp__share-modal pswp__share-modal--hidden pswp__single-tap">
<div class="pswp__share-tooltip"></div>
</div>
<button class="pswp__button pswp__button--arrow--left" title="Previous (arrow left)">
</button>
<button class="pswp__button pswp__button--arrow--right" title="Next (arrow right)">
</button>
<div class="pswp__caption">
<div class="pswp__caption__center"></div>
</div>
</div>
</div>
</div>
<!-- 8. 마크업 참조 : 링크공유 -->
<div id="rb-share" hidden>
<ul class="share list-inline mt-2 mb-0 mx-2">
<li class="list-inline-item text-center">
<a href="" role="button" data-role="facebook" target="_blank" class="muted-link">
<img src="<?php echo $g['img_core']?>/sns/facebook.png" alt="페이스북공유" class="rounded-circle" style="width: 50px">
<p><small>페이스북</small></p>
</a>
</li>
<li class="list-inline-item text-center">
<a href="" role="button" data-role="kakaostory" target="_blank" class="muted-link">
<img src="<?php echo $g['img_core']?>/sns/kakaostory.png" alt="카카오스토리" class="rounded-circle" style="width: 50px">
<p><small>카카오스토리</small></p>
</a>
</li>
<li class="list-inline-item text-center">
<a href="" role="button" data-role="naver" target="_blank" class="muted-link">
<img src="<?php echo $g['img_core']?>/sns/naver.png" alt="네이버" class="rounded-circle" style="width: 50px">
<p><small>네이버</small></p>
</a>
</li>
<li class="list-inline-item text-center">
<a href="" role="button" data-role="twitter" target="_blank" class="muted-link">
<img src="<?php echo $g['img_core']?>/sns/twitter.png" alt="트위터" class="rounded-circle" style="width: 50px">
<p><small>트위터</small></p>
</a>
</li>
</ul>
<div class="input-group input-group-sm mb-2" hidden>
<input type="text" class="form-control" value="" readonly data-role="share" id="share-input">
<div class="input-group-append">
<button class="btn btn-light" type="button"
data-plugin="clipboard"
data-clipboard-target="#share-input"
data-toggle="tooltip" title="클립보드 복사">
<i class="fa fa-clipboard"></i>
</button>
</div>
</div>
</div>
<!-- 레이아웃 위젯 찾아보기 -->
<div class="modal" tabindex="-1" role="dialog" id="modal-widget-selector">
<div class="modal-dialog modal-dialog-centered modal-lg" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">위젯 찾아보기 <span class="badge badge-secondary align-middle"><?php echo $d['layout']['dir'] ?></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" style="min-height: 400px">
<div class="row">
<div class="col-4">
<div class="form-group">
<label class="small text-muted">레이아웃 위젯목록</label>
<select class="form-control custom-select" name="widget_selector" data-area="">
<option>선택하세요.</option>
<?php include $g['dir_layout'].'_var/_var.config.php'; ?>
<?php $_i=1;foreach($d['layout']['widget'] as $_key => $_val):$__i=sprintf('%02d',$_i)?>
<optgroup label="<?php echo $_val[0]?>">
<?php foreach($_val[1] as $_v):?>
<option value="<?php echo $_key ?>/<?php echo $_v[0]?>"><?php echo $_v[1]?></option>
<?php endforeach?>
</optgroup>
<?php $_i++;endforeach?>
</select>
</div><!-- /.form-group -->
<div data-role="readme"></div>
</div>
<div class="col-8 text-center">
<div data-role="none">
<div class="d-flex justify-content-center align-items-center bg-light" style="height:370px">
<div class="text-muted">
<i class="fa fa-puzzle-piece" aria-hidden="true" style="color: #ccc;font-size: 100px"></i>
<p>위젯을 선택해주세요.</p>
</div>
</div>
</div>
<img src="" alt="" data-role="thumb" class="img-fluid d-none">
</div>
</div><!-- /.row -->
</div>
<div class="modal-footer">
<button type="button" class="btn btn-white" data-dismiss="modal">취소</button>
<button type="button" class="btn btn-primary" data-act="submit">적용</button>
</div>
</div>
</div>
</div>
<!-- 메인화면 꾸미기 게시판생성 -->
<div class="modal" tabindex="-1" role="dialog" id="modal-widget-makebbs">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">새 게시판</h5>
</div>
<div class="modal-body">
<div class="form-group">
<label>게시판 아이디</label>
<input type="text" class="form-control" name="id" autocomplete="off">
<div class="invalid-feedback"></div>
</div>
<div class="form-group">
<label>게시판 이름</label>
<input type="text" class="form-control" name="name" autocomplete="off">
<div class="invalid-feedback"></div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-link" data-dismiss="modal">취소</button>
<button type="button" class="btn btn-primary" data-act="submit">만들기</button>
</div>
</div>
</div>
</div>
<!-- 메인화면 꾸미기 리스트 생성 -->
<div class="modal" tabindex="-1" role="dialog" id="modal-widget-makelist">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">새 리스트</h5>
</div>
<div class="modal-body">
<div class="form-group">
<label>리스트 이름</label>
<input type="text" class="form-control" name="name" autocomplete="off">
<div class="invalid-feedback"></div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-link" data-dismiss="modal">취소</button>
<button type="button" class="btn btn-primary" data-act="submit">만들기</button>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,41 @@
<footer class="container my-5 border-top py-4">
<div class="d-flex justify-content-between">
<span class="text-muted">© <?php echo $d['layout']['company_name']?$d['layout']['company_name']:'company' ?> <?php echo $date['year']?></span>
<ul class="list-inline">
<li class="list-inline-item">
<a href="<?php echo RW('mod=policy')?>" class="muted-link">이용약관</a>
</li>
<li class="list-inline-item">
<a href="<?php echo RW('mod=privacy')?>" class="muted-link">개인정보취급방침</a>
</li>
<?php if ($my['uid']): ?>
<li class="list-inline-item">
<a href="#" data-act="logout" class="muted-link" title="">
로그아웃
</a>
</li>
<?php else: ?>
<li class="list-inline-item">
<a href="<?php echo RW('mod=login')?>" class="muted-link" title="페이지형 로그인">
로그인<span class="badge badge-pill badge-light align-middle">P</span>
</a>
</li>
<li class="list-inline-item">
<a href="#modal-login" data-toggle="modal" class="muted-link" title="모달형 로그인">
로그인<span class="badge badge-pill badge-light align-middle">M</span>
</a>
</li>
<?php endif; ?>
</ul>
</div>
<!-- 스탠다드 라이센스 없이는 아래 킴스큐 로고를 삭제할 수 없습니다. -->
<div class="text-center text-muted small">
powered by <a href="https://kimsq.com" target="_blank" class="text-reset ml-1"><i class="kf kf-bi-01 text-reset"></i></a>
</div>
</footer>

View File

@@ -0,0 +1,210 @@
<!-- 알림수신을 위한 권한요청 (권한이 설정되지 않은 경우만 표시) -->
<div class="alert alert-light mb-0 rounded-0" role="alert" id="permission_alert" style="display: none">
<div class="d-flex justify-content-between">
<p class="f13 mb-0">
<i class="fa fa-bell fa-fw text-primary" aria-hidden="true"></i> 데스크탑 푸시알림을 수신하면 공지사항은 물론 회원님이 게시글에 대한 피드백 또는 내가 언급된 글에 대한 정보들을 실시간으로 받아보실 있습니다.
<a href="#" class="alert-link" onclick="requestPermission()"><u>권한 설정</u></a>
</p>
<button type="button" class="close" data-dismiss="alert" aria-label="Close" title="나중에 하기">
<span aria-hidden="true">&times;</span>
</button>
</div>
</div>
<nav class="navbar navbar-expand navbar-dark bg-dark mb-3">
<div class="container">
<a class="navbar-brand" href="<?php echo RW(0) ?>">
<?php echo $d['layout']['header_file']?'<img src="'.$g['url_layout'].'/_var/'.$d['layout']['header_file'].'">':stripslashes($d['layout']['header_title'])?>
</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsDefault" aria-controls="navbarsDefault" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarsDefault">
<ul class="navbar-nav mr-auto">
<!-- 관리자모드 > 위젯코드 추출기를 활용하세요. -->
<?php getWidget('menu/bs4-navbar-nav',array('smenu'=>'0','limit'=>'2','link'=>'link','dropdown'=>'1',))?>
</ul>
<?php if($d['layout']['header_search']=='true'):?>
<form class="form-inline my-2 my-lg-0 mr-3" action="<?php echo $_HS['rewrite']? RW('m=search'):$g['s'].'/'?>" role="search">
<?php if (!$_HS['rewrite']): ?>
<input type="hidden" name="r" value="<?php echo $r ?>">
<input type="hidden" name="m" value="search">
<?php endif; ?>
<input class="form-control mr-sm-2" type="search" placeholder="통합검색" aria-label="Search" name="q" value="<?php echo $q ?>" autocomplete="off">
</form>
<?php endif?>
<?php if($d['layout']['header_login']=='true'):?>
<ul class="navbar-nav">
<?php if ($my['uid']): ?>
<li class="nav-item dropdown js-tooltip mr-2" title="알림" id="navbarPopoverNoti">
<a class="nav-link notification-indicator" href="/" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="badge badge-danger noti-status" data-role="noti-status"><?php echo $my['num_notice']==0?'':$my['num_notice']?></span>
<i class="fa fa-bell" aria-hidden="true"></i>
</a>
<div class="dropdown-menu dropdown-menu-right py-0" >
<h6 class="dropdown-header d-flex justify-content-between align-items-center py-2 f13">
<strong>새 알림</strong>
<ul class="list-inline small">
<li class="list-inline-item">
<span role="presentation" aria-hidden="true"> · </span>
<a href="/?r=<?php echo $r ?>&mod=settings&page=noti" class="muted-link">설정</a>
</li>
</ul>
</h6>
<div class="list-group list-group-flush" data-role="noti-list" style="max-height: 435px;overflow: auto;">
<!-- 드롭다운이 열릴때, 여기에 알림정보를 받아옴 -->
</div><!-- /.list-group -->
<a class="btn btn-block btn-link muted-link f13 py-2 border-top" href="<?php echo RW('mod=noti')?>">모두보기</a>
</div><!-- /.dropdown-menu -->
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-role="tooltip" title="프로필보기 및 회원계정관리">
<img src="<?php echo getAvatarSrc($my['uid'],'20') ?>" width="20" height="20" alt="" class="rounded d-inline-block align-top">
<?php echo $my['nic'] ?>
</a>
<div class="dropdown-menu dropdown-menu-right">
<h6 class="dropdown-header"><?php echo $my['nic'] ?> 님</h6>
<?php if ($d['post']['writeperm']): ?>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo RW('m=post&mod=write')?>">
새 포스트
</a>
<?php endif; ?>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo RW('mod=dashboard')?>">
대시보드
</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo getProfileLink($my['uid'])?>">
프로필
</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo RW('mod=settings')?>">
설정
</a>
<button class="dropdown-item" type="button" data-act="logout" role="button">
로그아웃
</button>
<?php if ($my['admin']): ?>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo $g['s'].'/?r='.$r.'&amp;layoutPage=settings' ?>">레이아웃 편집</a>
<a class="dropdown-item" href="<?php echo $g['s'].'/?r='.$r.'&amp;layoutPage=settings&amp;type=mainedit' ?>">메인 꾸미기</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="/admin" target="_top">관리자모드</a>
<?php endif; ?>
</div>
</li>
<?php else: ?>
<li class="nav-item">
<a class="nav-link" href="#modal-join" data-toggle="modal" data-backdrop="static">회원가입</a>
</li>
<li class="nav-item position-relative" id="navbarPopoverLogin">
<a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="드롭다운형 로그인">
로그인
</a>
<div class="dropdown-menu dropdown-menu-right">
<?php if ($d['member']['login_emailid']): ?>
<form class="px-4 py-3" id="popover-loginform" action="<?php echo $g['s']?>/" method="post" style="width:250px">
<input type="hidden" name="r" value="<?php echo $r?>">
<input type="hidden" name="a" value="login">
<input type="hidden" name="form" value="">
<div class="form-group position-relative">
<label for="">이메일<?php echo $d['member']['join_byPhone']?' 또는 휴대폰 번호':'' ?></label>
<input type="text" class="form-control" name="id" placeholder="" tabindex="1" autocorrect="off" autocapitalize="off" required tabindex="1">
<div class="invalid-tooltip" data-role="idErrorBlock"></div>
</div>
<div class="form-group position-relative">
<label for="">패스워드</label>
<input type="password" class="form-control" name="pw" tabindex="2" required tabindex="2">
<div class="invalid-tooltip" data-role="passwordErrorBlock"></div>
</div>
<?php if ($d['member']['login_cookie']): ?>
<div class="custom-control custom-checkbox" data-toggle="collapse" data-target="#popover-collapsealert">
<input type="checkbox" class="custom-control-input" id="popover-loginCookie" name="login_cookie" value="checked">
<label class="custom-control-label" for="popover-loginCookie">로그인 상태 유지</label>
</div>
<div class="collapse" id="popover-collapsealert">
<div class="alert alert-light border f12 mt-3">
개인정보 보호를 위해, 개인 PC에서만 사용해 주세요.
</div>
</div>
<?php endif; ?>
<button type="submit" class="btn btn-primary btn-block mt-2" data-role="submit" tabindex="3">
<span class="not-loading">로그인</span>
<span class="is-loading"><i class="fa fa-spinner fa-lg fa-spin fa-fw"></i> 로그인중 ...</span>
</button>
</form>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#modal-join" data-toggle="modal" data-backdrop="static">회원가입</a>
<a class="dropdown-item" href="#modal-pwReset" data-toggle="modal" data-backdrop="static">비밀번호를 잊으셨나요?</a>
<?php endif; ?>
<?php if ($d['member']['login_emailid'] && $d['member']['login_social']): ?>
<span class="section-divider"><span>또는</span></span>
<?php endif; ?>
<?php if ($d['member']['login_social']): ?>
<div class="px-2 mt-2">
<?php if ($d['connect']['use_k']): ?>
<button type="button" class="btn btn-block btn-social btn-kakao" data-connect="kakao" role="button">
<span></span>
카카오톡으로 로그인
</button>
<?php endif; ?>
<?php if ($d['connect']['use_n']): ?>
<button type="button" class="btn btn-block btn-social btn-naver" data-connect="naver" role="button">
<span></span>
네이버로 로그인
</button>
<?php endif; ?>
<?php if ($d['connect']['use_g']): ?>
<button type="button" class="btn btn-block btn-social btn-google" data-connect="google" role="button">
<span class="fa fa-google"></span>
구글로 로그인
</button>
<?php endif; ?>
<?php if ($d['connect']['use_f']): ?>
<button type="button" class="btn btn-block btn-social btn-facebook" data-connect="facebook" role="button">
<span class="fa fa-facebook"></span>
페이스북으로 로그인
</button>
<?php endif; ?>
<?php if ($d['connect']['use_i']): ?>
<button type="button" class="btn btn-block btn-social btn-instagram" data-connect="instagram" role="button">
<span class="fa fa-instagram"></span>
인스타그램으로 로그인
</button>
<?php endif; ?>
</div>
<?php endif; ?>
</div>
</li>
<?php endif; ?>
</ul>
<?php endif?>
</div>
</div><!-- /.container -->
</nav>

View File

@@ -0,0 +1,57 @@
<?php
// seo 데이타 -- 전송되는 타이틀 추출
$_MSEO = getDbData($table['s_seo'],'rel=1 and parent='.$_HM['uid'],'*');
$_PSEO = getDbData($table['s_seo'],'rel=2 and parent='.$_HP['uid'],'*');
$_WTIT=strip_tags($g['meta_tit']);
//$_link_domain = 'http'.($_SERVER['HTTPS']=='on'?'s':'').'://';
//$_link_url = $_link_domain.$_SERVER['REQUEST_URI']; // URL
$_link_url=$g['url_root'].$_SERVER['REQUEST_URI'];
?>
<ul class="list-inline mb-3">
<li data-toggle="tooltip" title="페이스북" class="list-inline-item">
<a href="" role="button">
<img src="<?php echo $g['img_core']?>/sns/facebook.png" alt="페이스북공유" class="rounded-circle" width="48">
</a>
</li>
<li data-toggle="tooltip" title="카카오스토리" class="list-inline-item">
<a href="" role="button">
<img src="<?php echo $g['img_core']?>/sns/kakaostory.png" alt="카카오스토리" class="rounded-circle" width="48">
</a>
</li>
<li data-toggle="tooltip" title="네이버" class="list-inline-item">
<a href="" role="button">
<img src="<?php echo $g['img_core']?>/sns/naver.png" alt="네이버" class="rounded-circle" width="48">
</a>
</li>
<li data-toggle="tooltip" title="트위터" class="list-inline-item">
<a href="" role="button">
<img src="<?php echo $g['img_core']?>/sns/twitter.png" alt="트위터" class="rounded-circle" width="48">
</a>
</li>
<li data-toggle="tooltip" title="메일보내기" class="list-inline-item">
<a href="mailto:<?php if($my['uid']):?><?php echo $my['email']?><?php endif?>?subject=경기방송%20기사공유-<?php echo $_WTIT?>&body=<?php echo $_link_url?>">
<img src="<?php echo $g['img_core']?>/sns/mail.png" alt="메일" class="rounded-circle" width="48">
</a>
</li>
</ul>
// sns 이벤트
function snsWin(sns)
{
var snsset = new Array();
var enc_tit = "<?php echo urlencode($_HS['title'])?>";
var enc_sbj = "<?php echo urlencode($_WTIT)?>";
var enc_url = "<?php echo urlencode($_link_url)?>";
var enc_tag = "<?php echo urlencode(str_replace(',',' ',$R['tag']))?>";
snsset['t'] = 'https://twitter.com/intent/tweet?url=' + enc_url + '&text=' + enc_sbj;
snsset['f'] = 'http://www.facebook.com/sharer.php?u=' + enc_url;
snsset['n'] = 'http://share.naver.com/web/shareView.nhn?url=' + enc_url + '&title=' + enc_sbj;
snsset['ks'] = 'https://story.kakao.com/share?url=' + enc_url + '&title=' + enc_sbj;
window.open(snsset[sns]);
}

View File

@@ -0,0 +1,14 @@
<ul class="nav nav-tabs mb-4">
<li class="nav-item">
<a class="nav-link rounded-0<?php echo $layoutPage=='settings' && !$type?' active':''?>"
href="<?php echo $g['s'].'/?r='.$r.'&amp;layoutPage=settings'?>">
레이아웃 편집
</a>
</li>
<li class="nav-item">
<a class="nav-link rounded-0<?php echo $layoutPage=='settings' && $type?' active':''?>"
href="<?php echo $g['s'].'/?r='.$r.'&amp;layoutPage=settings&type=mainedit'?>">
메인 꾸미기
</a>
</li>
</ul>

View File

@@ -0,0 +1,93 @@
<?php
$levelnum = getDbData($table['s_mbrlevel'],'gid=1','*');
$levelname= getDbData($table['s_mbrlevel'],'uid='.$my['level'],'*');
?>
<section class="pt-4 px-3">
<div class="text-reset text-center">
<a href="<?php echo getProfileLink($my['uid'])?>" class="d-inline-block" target="_blank">
<img src="<?php echo getAvatarSrc($my['uid'],'60') ?>" width="60" height="60" alt="" class="rounded-circle border">
</a>
<span class="d-block f16 mt-2">
<?php echo $my['nic'] ?>
</span>
</div>
<ul class="nav flex-column mt-3 py-3 border-top">
<li class="nav-item">
<a class="nav-link d-flex justify-content-between py-1 px-2 f13 text-reset" href="<?php echo RW('mod=dashboard&page=point')?>">
<span>포인트</span>
<span>
<strong class="text-primary"><?php echo number_format($my['point'])?> </strong> P
<i class="fa fa-angle-right text-muted ml-2" aria-hidden="true"></i>
</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link d-flex justify-content-between py-1 px-2 f13 text-reset" href="<?php echo RW('mod=dashboard&page=point')?>">
<span>등급</span>
<span>
<?php echo $levelname['name']?>
<small>(<?php echo $my['level']?>/<?php echo $levelnum['uid']?>)</small>
<i class="fa fa-angle-right text-muted ml-2" aria-hidden="true"></i>
</span>
</a>
</li>
</ul>
</section>
<ul class="nav nav-menu flex-column border-bottom">
<li class="nav-item<?php echo $page=='main'?' active':'' ?>">
<a class="nav-link" href="<?php echo RW('mod=dashboard')?>">대시보드</a>
</li>
<li class="nav-item<?php echo $page=='feed' || $page=='follower' ?' active':'' ?>">
<a class="nav-link d-flex justify-content-between align-items-center" href="<?php echo RW('mod=dashboard&page=feed')?>">
피드 <i class="fa fa-plus mr-4" aria-hidden="true"></i>
</a>
<ul class="nav flex-column">
<li class="nav-item<?php echo $page=='feed'?' active':'' ?>">
<a class="nav-link" href="<?php echo RW('mod=dashboard&page=feed')?>">피드</a>
</li>
<li class="nav-item<?php echo $page=='follower'?' active':'' ?>">
<a class="nav-link" href="<?php echo RW('mod=dashboard&page=follower')?>">구독자 관리</a>
</li>
</ul>
</li>
<?php if ($d['post']['writeperm']): ?>
<li class="nav-item<?php echo $page=='post'|| $page=='list' || $page=='list_view'?' active':'' ?>">
<a class="nav-link d-flex justify-content-between align-items-center" href="<?php echo RW('mod=dashboard&page=post')?>">
포스트 관리 <i class="fa fa-plus mr-4" aria-hidden="true"></i>
</a>
<ul class="nav flex-column">
<li class="nav-item<?php echo $page=='post'?' active':'' ?>">
<a class="nav-link" href="<?php echo RW('mod=dashboard&page=post')?>">포스트 관리</a>
</li>
<li class="nav-item<?php echo $page=='list' || $page=='list_view'?' active':'' ?>">
<a class="nav-link" href="<?php echo RW('mod=dashboard&page=list')?>">리스트 관리</a>
</li>
</ul>
</li>
<?php else: ?>
<li class="nav-item<?php echo $page=='list' || $page=='list_view'?' active':'' ?>">
<a class="nav-link" href="<?php echo RW('mod=dashboard&page=list')?>">리스트 관리</a>
</li>
<?php endif; ?>
<li class="nav-item<?php echo $page=='noti'?' active':'' ?>">
<a class="nav-link" href="<?php echo RW('mod=dashboard&page=noti')?>">알림내역</a>
</li>
<li class="nav-item<?php echo $page=='saved'?' active':'' ?>">
<a class="nav-link" href="<?php echo RW('mod=dashboard&page=saved')?>">저장내역</a>
</li>
<li class="nav-item<?php echo $page=='point'?' active':'' ?>">
<a class="nav-link" href="<?php echo RW('mod=dashboard&page=point')?>">포인트내역</a>
</li>
<li class="nav-item d-none<?php echo $page=='order'?' active':'' ?>">
<a class="nav-link" href="<?php echo RW('mod=dashboard&page=order')?>">구매내역 <span class="badge badge-pill badge-light">준비중</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="<?php echo RW('mod=settings')?>">설정</a>
</li>
</ul>

View File

@@ -0,0 +1,32 @@
<?php $_MENUS2=getDbSelect($table['s_menu'],'site='.$s.' and parent='.$_FHM['uid'].' and hidden=0 and depth=2 order by gid asc','*')?>
<?php $_MENUSN=db_num_rows($_MENUS2)?>
<?php if($_MENUN || $_CA[0]):?>
<h3><?php echo $_FHM['name'] ?></h3>
<ul class="nav flex-column">
<?php $_i=0;while($_M2=db_fetch_array($_MENUS2)):$_i++?>
<li class="nav-item<?php if($_MENUSN==$_i):?> _last<?php endif?>">
<a class="nav-link<?php if($_M2['id']==$_CA[1]):?> active<?php endif?>" href="<?php echo RW('c='.$_CA[0].'/'.$_M2['id'])?>" target="<?php echo $_M2['target']?>">
<?php echo $_M2['name']?>
</a>
<?php if(($_HM['uid']==$_M2['uid']||$_HM['parent']==$_M2['uid'])&&$_M2['is_child']):?>
<ul class="nav flex-column ml-2">
<?php $_MENUS3=getDbSelect($table['s_menu'],'site='.$s.' and parent='.$_M2['uid'].' and hidden=0 and depth=3 order by gid asc','*')?>
<?php while($_M3=db_fetch_array($_MENUS3)):?>
<li class="nav-item">
<a class="nav-link<?php if($_M3['uid']==$_HM['uid']):?> active<?php endif?>" href="<?php echo RW('c='.$_CA[0].'/'.$_CA[1].'/'.$_M3['id'])?>" target="<?php echo $_M3['target']?>">
<?php echo $_M3['name']?>
</a>
</li>
<?php endwhile?>
</ul>
<?php endif?>
</li>
<?php endwhile?>
<?php if(!$_MENUSN):?>
<li class="text-muted text-center p-5 small bg-light">서브메뉴가 없습니다.</li>
<?php endif?>
</ul>
<?php endif?>

View File

@@ -0,0 +1,153 @@
/**
* --------------------------------------------------------------------------
* kimsQ Rb v2.4 데스크탑 시작하기 레이아웃 스크립트 (bs4-starter)
* Homepage: http://www.kimsq.com
* Licensed under RBL
* Copyright 2019 redblock inc
* --------------------------------------------------------------------------
*/
var noti_sort = 'uid';
var noti_orderby = 'desc';
var noti_recnum = '10';
$('[data-plugin="timeago"]').timeago(); // 상대시간 플러그인 초기화
// 사용자 액션에 대한 피드백 메시지 제공을 위해 액션 실행후 쿠키에 저장된 결과 메시지를 출력시키고 초기화 시킵니다.
putCookieAlert('site_common_result') // 실행결과 알림 메시지 출력
$(document).ready(function() {
// navbar dropdown 로그인 - 실행
$('#popover-loginform').submit(function(e){
e.preventDefault();
e.stopPropagation();
var form = $(this)
siteLogin(form)
});
// navbar dropdown 로그인 - 로그인 영역 내부 클릭시 dropdown 닫히지 않도록
$(document).on('click', '#navbarPopoverLogin .dropdown-menu', function (e) {
e.stopPropagation();
});
// navbar dropdown 로그인 - dropdown 열릴때
$('#navbarPopoverLogin').on('shown.bs.dropdown', function () {
$(this).find('[name=id]').focus() // 아이디 focus
$(this).find('.form-control').val('').removeClass('is-invalid') //에러이력 초기화
})
$(document).on('keyup','#popover-loginform .form-control',function(){
$(this).removeClass('is-invalid') //에러 흔적 초기화
});
// navbar dropdown 내알림보기 - dropdown 열릴때
$('#navbarPopoverNoti').on('show.bs.dropdown', function () {
var dropdown = $(this)
var mobile = ''
$('.js-tooltip').tooltip('hide')
dropdown.attr('data-original-title','')
dropdown.find('[data-role="noti-list"]').isLoading({
text: "불러오는중...",
position: "inside"
});
$.post(rooturl+'/?r='+raccount+'&m=notification&a=get_notiList',{
sort: noti_sort,
orderby: noti_orderby,
recnum: noti_recnum,
callMod: 'unread'
},function(response){
var result = $.parseJSON(response);
var content=result.content;
dropdown.find('[data-role="noti-list"]').html(content);
dropdown.find('[data-plugin="timeago"]').timeago();
dropdown.find('[data-role="noti-status"]').text('');
});
})
// navbar dropdown 알림보기 - dropdown 닫힐때
$('#navbarPopoverNoti').on('hidden.bs.dropdown', function () {
var dropdown = $(this)
dropdown.attr('data-original-title','알림')
dropdown.find('[data-role="noti-list"]').html('');
})
//modal 로그인 - 실행
$('#modal-login').find('form').submit(function(e){
e.preventDefault();
e.stopPropagation();
var form = $(this)
siteLogin(form)
});
// modal 로그인 - modal 열릴때
$('#modal-login').on('shown.bs.modal', function () {
$(this).find('[name=id]').focus() // 아이디 focus
$(this).find('.form-control').val('').removeClass('is-invalid') //에러 흔적 초기화
})
$("#modal-login").find('.form-control').keyup(function() {
$(this).removeClass('is-invalid') //에러 흔적 초기화
});
//modal 변경
$(document).on('click','[data-toggle="changeModal"]', function (e) {
var $this = $(this)
var href = $this.attr('href')
var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, '')))
var $start = $($this.closest('.modal'))
if ($this.is('a')) e.preventDefault()
$start.modal('hide')
setTimeout(function(){ $target.modal({show:true,backdrop:'static'}); }, 300);
});
$('[data-toggle="tooltip"]').tooltip() // 툴팁 플러그인 초기화
$('.js-tooltip').tooltip();
initPhotoSwipeFromDOM('[data-plugin="photoswipe"]'); // 포토갤러리 초기화
//외부서비스 사용자 인증요청
$('[data-connect]').on("click", function(){
var provider = $(this).data('connect')
// /core/engine/cssjs.engine.php 참고
if (provider=='naver') var target = connect_naver
if (provider=='kakao') var target = connect_kakao
if (provider=='google') var target = connect_google
if (provider=='facebook') var target = connect_facebook
if (provider=='instagram') var target = connect_instagram
var referer = window.location.href // 연결후, 원래 페이지 복귀를 위해
$("body").isLoading({
text: "연결 중..",
position: "overlay"
});
$.post(rooturl+'/?r='+raccount+'&m=connect&a=save_referer',{
referer : referer
},function(response,status){
if(status=='success'){
document.location = target;
}else{
alert(status);
}
});
});
// 로그아웃
$('[data-act="logout"]').click(function(){
$('body').isLoading({
position: 'inside',
text: '<div class="d-flex justify-content-center align-items-center"><div class="spinner-border" role="status"><span class="sr-only">Loading...</span></div></div>',
});
getIframeForAction('');
setTimeout(function(){
frames.__iframe_for_action__.location.href = '/?r=home&m=site&a=logout';
}, 100);
});
// history.back
$(document).on('click','[data-history="back"]',function(){
window.history.back();
});
})

View File

@@ -0,0 +1,271 @@
/**
* --------------------------------------------------------------------------
* FCM(Firebase 클라우드 메시징)을 활용한 포그라운드 알림 처리 (데스크탑 전용)
* 참조코드 : https://github.com/firebase/quickstart-js/tree/master/messaging
* Licensed under an Apache-2 license.
* Firebase Quickstart Samples for Web https://firebase.google.com
* --------------------------------------------------------------------------
*/
firebase.initializeApp({'messagingSenderId': fcmSenderId});
const messaging = firebase.messaging();
messaging.usePublicVapidKey(fcmVAPID); //FCM 웹 푸시 인증서 키쌍(VAPID)
const permissionDivId = 'permission_div';
const permissionAlertId = 'permission_alert';
const tokenDivId = 'token_div';
const pushSettingId = 'push_setting';
const pushDisabledId = 'push_disabled';
const modalNoti = $('#modal-noti');
if (isNewUser(memberid)) {
console.log('새 사용자로 로그인 되었습니다.')
deleteToken() // 기존 토큰 삭제
window.localStorage.clear(); // 로컬 스토리지 초기화
}
// 인스턴스 ID 토큰이 업데이트되면 콜백이 시작됩니다.
messaging.onTokenRefresh(function() {
messaging.getToken().then(function(refreshedToken) {
console.log('토큰이 새로고침 되었습니다.'); // 새 인스턴스 ID 토큰이 아직 전송되지 않았 음을 나타냅니다.
setTokenSentToServer(false);
sendTokenToServer(refreshedToken); // 인스턴스 ID 토큰을 앱 서버로 전송합니다.
resetNotiUI(); // 새로운 인스턴스 ID 토큰을 표시하고 모든 이전 메시지의 UI를 지웁니다.
}).catch(function(err) {
console.log('새로 변경된 토큰을 검색 할 수 없습니다. ', err);
});
});
// - 앱에 포커스가 있는 동안 메시지가 수신됩니다.
messaging.onMessage(function(payload) {
console.log('메시지가 도착했습니다. ', payload);
var result = JSON.stringify(payload, null, 2);
var msg = JSON.parse(result);
var title=msg.notification.title;
var mbody=msg.notification.body;
var icon=msg.notification.icon;
var _mbody = mbody.replace(/(\n|\r\n)/g, '<br>');
console.log(_mbody)
$.notify({
icon: icon,
title: title,
message: mbody
}, {
type: 'media',
delay: 3000,
icon_type: 'image',
template: '<div data-notify="container" class="col-xs-11 col-sm-3 alert alert-{0}" role="alert">' +
'<img data-notify="icon" class="img-circle pull-left">' +
'<span data-notify="title">{1}</span>' +
'<span data-notify="message">{2}</span>' +
'</div>'
});
});
function resetNotiUI() {
clearMessages();
showToken('처리중...');
setMemberId(memberid) // 로그인 사용자의 아이디를 로컬 스토리지에 저장
// Get Instance ID token. Initially this makes a network call, once retrieved
// subsequent calls to getToken will return from cache. 이후의 getToken의 호출은 캐쉬로부터 돌아옵니다.
messaging.getToken().then(function(currentToken) {
if (currentToken) {
sendTokenToServer(currentToken);
updateUIForPushEnabled(currentToken);
} else {
// Show permission request.
if (!isRequestPermission()) {
setRequestPermission(false)
}
console.log('사용할수 있는 인스턴스 ID 토큰이 없습니다. 알림권한을 요청하십시오.');
// 알림권한요청 UI 를 보여줌.
setTimeout(function(){
updateUIForPushPermissionRequired();
}, 1000);
setTokenSentToServer(false);
}
}).catch(function(err) {
console.log('알림권한이 없거나 토큰을 검색하는 중 오류가 발생했습니다. ', err);
updateUIForPushDisabled()
setRequestPermission(false)
});
}
function showToken(currentToken) {
// 콘솔과 페이지에서 토큰을 보여줌
var tokenElement = document.querySelector('.token');
if (tokenElement) {
tokenElement.textContent = currentToken;
}
}
// Rb2에 인스턴스 ID 토큰을 보내세요.:
// - 이 앱으로 메시지를 다시 보내세요.
// - 주제 토큰 구독 / 탈퇴
function sendTokenToServer(currentToken) {
if (!isTokenSentToServer()) {
console.log('Rb2 서버에 토큰 보내기 중 ...');
var agent = navigator.userAgent, match;
var browser, version;
if((match = agent.match(/MSIE ([0-9]+)/)) || (match = agent.match(/Trident.*rv:([0-9]+)/))) browser = 'Internet Explorer';
else if(match = agent.match(/Chrome\/([0-9]+)/)) browser = 'Chrome';
else if(match = agent.match(/Firefox\/([0-9]+)/)) browser = 'Firefox';
else if(match = agent.match(/Safari\/([0-9]+)/)) browser = 'Safari';
else if((match = agent.match(/OPR\/([0-9]+)/)) || (match = agent.match(/Opera\/([0-9]+)/))) browser = 'Opera';
else browser = 'Unknown';
if(browser !== 'Unknown') version = match[1];
$.post(rooturl+'/?r='+raccount+'&m=notification&a=save_token',{
browser : browser,
version : version,
token : currentToken
},function(response){
var result = $.parseJSON(response);
console.log('토큰이 저장되었습니다.' + currentToken)
});
setTokenSentToServer(true);
} else {
console.log('토큰이 이미 서버에 전송 되었으므로 토큰이 변경되지 않는한 재전송되지 않습니다.');
}
}
function isTokenSentToServer() {
return window.localStorage.getItem('sentToServer') == 1;
}
function setTokenSentToServer(sent) {
window.localStorage.setItem('sentToServer', sent ? 1 : 0);
}
function isRequestPermission() {
return window.localStorage.getItem('setRequestPermission') == 1;
}
function setRequestPermission(allow) {
window.localStorage.setItem('setRequestPermission', allow ? 1 : 0);
}
function isNewUser(memberid) {
return window.localStorage.getItem('setMemberId') != memberid;
}
function setMemberId(memberid) {
window.localStorage.setItem('setMemberId', memberid ? memberid : 0);
}
function showHideDiv(divId, show) {
const div = document.querySelector('#' + divId);
if (div) {
if (show) {
div.style = 'display: visible';
} else {
div.style = 'display: none';
}
}
}
function requestPermission() {
console.log('권한 요청 중 ...');
messaging.requestPermission().then(function() {
var nt_web = ''; //알림수신
var nt_fcm = '1'; //푸시 알림수신
console.log('알림권한이 부여 되었습니다.');
$.notify({message: '알림권한이 부여 되었습니다.'});
resetNotiUI();
$.post(rooturl+'/?r='+raccount+'&m=notification&a=notice_config_user',{
sendAjax : true,
nt_web : nt_web,
nt_email : nt_email,
nt_fcm : nt_fcm
},function(response){
var result = $.parseJSON(response);
var error=result.error;
if (!error) console.log('웹알림/푸시알림 수신처리 되었습니다.')
});
}).catch(function(err) {
var nt_fcm = '';
showHideDiv(permissionAlertId, false);
showHideDiv(permissionDivId, false);
showHideDiv(pushDisabledId, true);
console.log('알림을 실행 할수있는 권한이 없습니다.', err);
$.notify({message: '알림 권한이 차단 되었습니다.'},{type: 'danger'});
});
}
function deleteToken() {
// 인스턴스 ID 토큰 삭제.
// [START delete_token]
messaging.getToken().then(function(currentToken) {
messaging.deleteToken(currentToken).then(function() {
console.log('토큰이 삭제 되었습니다.');
setTokenSentToServer(false);
// [START_EXCLUDE]
// 토큰이 삭제되면 관련 UI를 업데이트 합니다..
resetNotiUI();
// [END_EXCLUDE]
}).catch(function(err) {
console.log('토큰을 삭제할 수 없습니다. ', err);
});
// [END delete_token]
}).catch(function(err) {
console.log('인스턴스 ID 토큰을 가져 오는 중 오류가 발생했습니다. ', err);
});
}
// 메시지 모달을 닫고 내용을 초기화 합니다.
function clearMessages() {
modalNoti.modal('hide')
}
function updateUIForPushEnabled(currentToken) {
showHideDiv(permissionAlertId, false);
showHideDiv(tokenDivId, true);
showHideDiv(pushSettingId, true);
showHideDiv(permissionDivId, false);
showToken(currentToken);
}
function updateUIForPushDisabled() {
showHideDiv(pushDisabledId, true);
showHideDiv(permissionAlertId, false);
}
function updateUIForPushPermissionRequired() {
if (!isRequestPermission()) {
console.log('브라우저 알림 권한요청 이력이 없음')
if (!nt_web) {
showHideDiv(permissionAlertId, true);
} else {
console.log('사용자의 모든 알림수신을 차단하였습니다.')
}
} else {
console.log('브라우저 알림 권한요청 이력이 있음')
showHideDiv(permissionDivId, true);
}
}
//알림권한 요청 alert가 닫혔을때(나중에 설정)
$('#permission_alert').on('closed.bs.alert', function () {
$.notify({message: '설정 페이지에서 다시 권한설정 할 수 있습니다.'},{type: 'primary'});
setRequestPermission(true) // 요청이력을 로컬 스토리지에 저장하여 이후에 띄우지 않음
showHideDiv(permissionDivId, true);
})
resetNotiUI();

View File

@@ -0,0 +1,199 @@
/*! PhotoSwipe
* http://photoswipe.com
* Copyright (c) 2017 Dmitry Semenov; */
var initPhotoSwipeFromDOM = function(gallerySelector) {
// parse slide data (url, title, size ...) from DOM elements
// (children of gallerySelector)
var parseThumbnailElements = function(el) {
var thumbElements = el.childNodes,
numNodes = thumbElements.length,
items = [],
figureEl,
linkEl,
size,
item;
for(var i = 0; i < numNodes; i++) {
figureEl = thumbElements[i]; // <figure> element
// include only element nodes
if(figureEl.nodeType !== 1) {
continue;
}
linkEl = figureEl.children[0]; // <a> element
size = linkEl.getAttribute('data-size').split('x');
// create slide object
item = {
src: linkEl.getAttribute('href'),
w: parseInt(size[0], 10),
h: parseInt(size[1], 10)
};
if(figureEl.children.length > 1) {
// <figcaption> content
item.title = figureEl.children[1].innerHTML;
}
if(linkEl.children.length > 0) {
// <img> thumbnail element, retrieving thumbnail url
item.msrc = linkEl.children[0].getAttribute('src');
}
item.el = figureEl; // save link to element for getThumbBoundsFn
items.push(item);
}
return items;
};
// find nearest parent element
var closest = function closest(el, fn) {
return el && ( fn(el) ? el : closest(el.parentNode, fn) );
};
// triggers when user clicks on thumbnail
var onThumbnailsClick = function(e) {
e = e || window.event;
e.preventDefault ? e.preventDefault() : e.returnValue = false;
var eTarget = e.target || e.srcElement;
// find root element of slide
var clickedListItem = closest(eTarget, function(el) {
return (el.tagName && el.tagName.toUpperCase() === 'FIGURE');
});
if(!clickedListItem) {
return;
}
// find index of clicked item by looping through all child nodes
// alternatively, you may define index via data- attribute
var clickedGallery = clickedListItem.parentNode,
childNodes = clickedListItem.parentNode.childNodes,
numChildNodes = childNodes.length,
nodeIndex = 0,
index;
for (var i = 0; i < numChildNodes; i++) {
if(childNodes[i].nodeType !== 1) {
continue;
}
if(childNodes[i] === clickedListItem) {
index = nodeIndex;
break;
}
nodeIndex++;
}
if(index >= 0) {
// open PhotoSwipe if valid index found
openPhotoSwipe( index, clickedGallery );
}
return false;
};
// parse picture index and gallery index from URL (#&pid=1&gid=2)
var photoswipeParseHash = function() {
var hash = window.location.hash.substring(1),
params = {};
if(hash.length < 5) {
return params;
}
var vars = hash.split('&');
for (var i = 0; i < vars.length; i++) {
if(!vars[i]) {
continue;
}
var pair = vars[i].split('=');
if(pair.length < 2) {
continue;
}
params[pair[0]] = pair[1];
}
if(params.gid) {
params.gid = parseInt(params.gid, 10);
}
return params;
};
var openPhotoSwipe = function(index, galleryElement, disableAnimation, fromURL) {
var pswpElement = document.querySelectorAll('.pswp-gallery')[0],
gallery,
options,
items;
items = parseThumbnailElements(galleryElement);
// define options (if needed)
options = {
// define gallery index (for URL)
galleryUID: galleryElement.getAttribute('data-pswp-uid'),
};
// PhotoSwipe opened from URL
if(fromURL) {
if(options.galleryPIDs) {
// parse real index when custom PIDs are used
// http://photoswipe.com/documentation/faq.html#custom-pid-in-url
for(var j = 0; j < items.length; j++) {
if(items[j].pid == index) {
options.index = j;
break;
}
}
} else {
// in URL indexes start from 1
options.index = parseInt(index, 10) - 1;
}
} else {
options.index = parseInt(index, 10);
}
// exit if index not found
if( isNaN(options.index) ) {
return;
}
if(disableAnimation) {
options.showAnimationDuration = 0;
}
// Pass data to PhotoSwipe and initialize it
gallery = new PhotoSwipe( pswpElement, PhotoSwipeUI_Default, items, options);
gallery.init();
};
// loop through all gallery elements and bind events
var galleryElements = document.querySelectorAll( gallerySelector );
for(var i = 0, l = galleryElements.length; i < l; i++) {
galleryElements[i].setAttribute('data-pswp-uid', i+1);
galleryElements[i].onclick = onThumbnailsClick;
}
// Parse URL and open gallery if it contains #&pid=3&gid=1
var hashData = photoswipeParseHash();
if(hashData.pid && hashData.gid) {
openPhotoSwipe( hashData.pid , galleryElements[ hashData.gid - 1 ], true, true );
}
};

View File

@@ -0,0 +1,499 @@
function setWidgetConfig(id,name,path,wdgvar,area) {
$('[data-role="widgetConfig"] [data-role="form"]').html('');
$.post(rooturl+'/?r='+raccount+'&m=site&a=get_widgetConfig',{
name : name,
widget : path,
wdgvar : wdgvar,
area : area
},function(response,status){
if(status=='success'){
var result = $.parseJSON(response);
var page=result.page;
var widget=result.widget;
if (!page) {
$.notify({message: '위젯설정을 확인해주세요.'},{type: 'danger'});
resetPage()
return false
}
$('[data-role="widgetConfig"]').attr('data-id',id);
$('[data-role="widgetConfig"]').attr('data-name',name);
$('[data-role="widgetConfig"]').attr('data-path',path);
$('[data-role="widgetConfig"] [data-role="form"]').html(page);
$('[data-role="widgetConfig"]').removeClass('d-none');
$('[data-role="widgetConfig"] [data-toggle="tooltip"]').tooltip();
setTimeout(function(){
$('[data-role="widgetConfig"] [data-role="form"]').find('.form-control')[0].focus();
}, 100);
//게시판 선택시
$('[data-role="widgetConfig"]').find('[name="bid"]').change(function(){
var name = $(this).find('option:selected').attr('data-name');
var link = $(this).find('option:selected').attr('data-link');
var id = $(this).find('option:selected').val();
if (id) {
$('[data-role="widgetConfig"]').find('[name="title"]').val(name);
$('[data-role="widgetConfig"]').find('[name="link"]').val(link);
} else {
$('[data-role="widgetConfig"]').find('[name="title"]').val('');
$('[data-role="widgetConfig"]').find('[name="link"]').val('');
}
});
} else {
$.notify({message: '위젯설정을 확인해주세요.'},{type: 'danger'});
return false
}
});
}
function resetPage() {
$('[data-role="widgetConfig"]').addClass('d-none');
$('[data-role="addWidget"]').removeClass('active');
$('[name="widget_selector"]').prop('selectedIndex',0);
$('[data-role="widgetPage"] [data-role="item"]').removeClass('active shadow-sm')
}
var layout_settings_tab = Cookies.get('layout-settings-tab')?Cookies.get('layout-settings-tab'):'01';
$('#layout-settings-tab [data-order="'+layout_settings_tab+'"]').tab('show')
$('a[data-toggle="pill"]').on('shown.bs.tab', function (e) {
var order = $(e.target).attr('data-order');
Cookies.set('layout-settings-tab', order)
})
$('[data-act="submit"]').click(function(e){
var form = $(this).closest('form');
$(this).attr('disabled',true)
setTimeout(function(){ form.submit(); }, 300);
});
$('[data-act="reset"]').click(function(){
var page = $(this).attr('data-page');
$.post(rooturl+'/?r='+raccount+'&m=site&a=deletelayoutpage',{
page : page
},function(response,status){
if(status=='success'){
var result = $.parseJSON(response);
var error=result.error;
if (!error) location.reload();
} else {
alert('다시시도 해주세요.')
return false
}
});
});
$('[data-role="widgetPage"]').on('click','[data-act="edit"]',function(e) {
e.preventDefault();
var item = $(this).closest('[data-role="item"]')
var id = item.attr('id');
var name = item.attr('data-name');
var path = item.attr('data-path');
var wdgvar = item.find('[name="widget_members[]"]').val();
var area;
if (!wdgvar) wdgvar = 'blank';
setWidgetConfig(id,name,path,wdgvar,area)
$('[data-role="widgetPage"] [data-role="item"]').removeClass('active shadow-sm');
$('[data-role="widgetConfig"]').attr('data-id',id);
$('[data-role="addWidget"]').removeClass('active');
item.addClass('active shadow-sm');
});
$('[name="settingMain"] [data-act="submit"]').click(function(){
$(this).attr('disabled', true);
var top_widgets=$(document).find('[data-area="top"] input[name="widget_members[]"]').map(function(){return $(this).val()}).get();
var left_widgets=$(document).find('[data-area="left"] input[name="widget_members[]"]').map(function(){return $(this).val()}).get();
var right_widgets=$(document).find('[data-area="right"] input[name="widget_members[]"]').map(function(){return $(this).val()}).get();
var new_widgets='';
if(top_widgets){
for(var i=0;i<top_widgets.length;i++) {
new_widgets+=top_widgets[i];
}
$('input[name="main_widget_top"]').val(new_widgets);
}
var new_widgets='';
if(left_widgets){
for(var i=0;i<left_widgets.length;i++) {
new_widgets+=left_widgets[i];
}
$('input[name="main_widget_left"]').val(new_widgets);
}
var new_widgets='';
if(right_widgets){
for(var i=0;i<right_widgets.length;i++) {
new_widgets+=right_widgets[i];
}
$('input[name="main_widget_right"]').val(new_widgets);
}
setTimeout(function(){
$('[name="settingMain"]').submit();
resetPage(); // 상태초기화
}, 500);
});
$( document ).ready(function() {
//순서변경
$('[data-plugin="nestable"]').nestable({
group: 1,
maxDepth: 1
});
$('#modal-widget-selector').on('show.bs.modal', function (event) {
var modal = $(this)
var button = $(event.relatedTarget);
var area = button.attr('data-area');
resetPage();
setTimeout(function(){ modal.find('[name="widget_selector"]').attr('data-area',area).trigger('focus'); }, 100);
})
$('#modal-widget-selector').find('[name="widget_selector"]').change(function(){
var modal = $('#modal-widget-selector');
var path = $(this).val();
var name = $(this).find('option:selected').text();
var id = randomId();
var area = $(this).attr('data-area');
var wdgvar = '';
var button = $('#modal-widget-selector').find('[data-act="submit"]');
modal.find('[data-role="none"]').removeClass('d-none');
modal.find('[data-role="thumb"]').attr('src','').addClass('d-none');
modal.find('[data-role="readme"]').html('');
button.attr('data-path',path);
button.attr('data-name',name);
button.attr('data-id',id);
button.attr('data-area',area);
$.post(rooturl+'/?r='+raccount+'&m=site&a=get_widgetGuide',{
widget : path
},function(response,status){
if(status=='success'){
var result = $.parseJSON(response);
var readme=result.readme;
var thumb=result.thumb;
if (!thumb) {
modal.find('[data-role="none"]').removeClass('d-none');
modal.find('[data-role="thumb"]').addClass('d-none');
} else {
modal.find('[data-role="none"]').addClass('d-none');
modal.find('[data-role="thumb"]').attr('src',thumb).removeClass('d-none');
modal.find('[data-role="readme"]').html(readme);
}
} else {
alert('위젯설정을 확인해주세요.')
return false
}
});
});
$('#modal-widget-selector').find('[data-act="submit"]').click(function(){
var button = $(this)
var path = button.attr('data-path');
var name = button.attr('data-name');
var id = button.attr('data-id');
var area = button.attr('data-area');
var wdgvar = '';
var modal = $('#modal-widget-selector');
if (!path) {
modal.find('[name="widget_selector"]').focus();
return false;
}
modal.modal('hide');
$('[data-role="widgetConfig"] [data-role="form"]').html('');
$('[data-role="widgetPage"] [data-role="item"]').removeClass('active shadow-sm')
if (path) {
setWidgetConfig(id,name,path,wdgvar,area)
$('[data-role="widgetPage"][data-area="'+area+'"] [data-role="addWidget"]').addClass('active');
} else {
$('[data-role="widgetConfig"]').addClass('d-none');
}
});
$('#modal-widget-selector').on('hidden.bs.modal', function (event) {
var modal = $(this)
var button = modal.find('[data-act="submit"]');
var selector = modal.find('[name="widget_selector"]');
button.removeAttr('data-path').removeAttr('data-id').removeAttr('data-area').removeAttr('data-name');
selector.removeAttr('data-area');
modal.find('[name="widget_selector"]').prop('selectedIndex',0);
modal.find('[data-role="readme"]').html('');
modal.find('[data-role="thumb"]').attr('src','')
$('[data-role="addWidget"]').removeClass('active');
})
$('[data-role="widgetConfig"]').on('click','[data-act="save"]',function() {
var name = $('[data-role="widgetConfig"]').attr('data-name');
var title = $('[data-role="widgetConfig"] [name="title"]').val();
var path = $('[data-role="widgetConfig"]').attr('data-path');
var id = $('[data-role="widgetConfig"]').attr('data-id');
var mod = $(this).attr('data-mod');
var area = $(this).attr('data-area');
$(this).attr('disabled', true);
if (!title) title = $('[data-role="widgetConfig"] [name="title"]').attr('placeholder');
$(document).find('[data-role="widgetPage"] .card').removeClass('animated fadeInUp')
var widget_var = id+'^'+title+'^'+path+'^';
$('[data-role="widgetConfig"] [name]').each(function(index){
var _name = $(this).attr('name');
if ( !$(this).val() && $(this).attr('placeholder')) {
var _var = $(this).attr('placeholder');
} else {
var _var = $(this).val()?$(this).val():'';
}
widget_var += _name+'='+_var+',';
});
setTimeout(function(){
resetPage();
if (mod=='add') {
var box = '<li class="card round-0 mb-3 text-muted text-center animated fadeInUp dd-item" data-name="'+name+'" data-path="'+path+'" data-role="item" id="'+id+'">'+
'<a href="" data-act="remove" title="삭제" class="badge badge-light border-0"><i class="fa fa-times" aria-hidden="true"></i></a>'+
'<span data-act="move" class="badge badge-light border-0 dd-handle"><i class="fa fa-arrows" aria-hidden="true"></i></span>'+
'<input type="hidden" name="widget_members[]" value="['+widget_var+']">'+
'<div class="card-body"><a href="#" class="text-reset" data-role="title" data-act="edit">'+title+'</a></div>'+
'</li>';
$('[data-role="widgetPage"][data-area="'+area+'"] .dd-list').append(box);
$('[data-role="widgetPage"] [data-toggle="tooltip"]').tooltip();
} else {
$(document).find('#'+id+' [name="widget_members[]"]').val('['+widget_var+']');
$(document).find('#'+id+'').addClass('animated fadeInUp');
$(document).find('#'+id+' [data-role="title"]').text(title);
$('[data-role="widgetPage"] [data-role="item"]').removeClass('active shadow-sm')
}
$('[name="settingMain"] [data-act="submit"]').click();
}, 600);
});
$('[data-role="widgetConfig"]').on('click','[data-act="code"]',function() {
var name = $('[data-role="widgetConfig"]').attr('data-name');
var title = $('[data-role="widgetConfig"] [name="title"]').val();
var path = $('[data-role="widgetConfig"]').attr('data-path');
if (!title) title = name;
var widget_var = '';
$('[data-role="widgetConfig"] [name]').each(function(index){
var _name = $(this).attr('name');
var _var = $(this).val()?$(this).val():'';
widget_var += "'"+_name+"'=>'"+_var+"',";
});
var code = "<?php getWidget('"+path+"',array("+widget_var+")) ?>";
$('[data-role="widgetPage"] [data-toggle="tooltip"]').tooltip();
$('#widgetCode').val(code);
var clipboard = new ClipboardJS('.js-clipboard');
clipboard.on('success', function (e) {
$(e.trigger)
.attr('title', '클립보드 복사완료!')
.tooltip('_fixTitle')
.tooltip('show')
.attr('title', '클립보드 복사')
.tooltip('_fixTitle')
e.clearSelection()
})
clipboard.on('error', function (e) {
var modifierKey = /Mac/i.test(navigator.userAgent) ? '\u2318' : 'Ctrl-'
var fallbackMsg = 'Press ' + modifierKey + 'C to copy'
$(e.trigger)
.attr('title', fallbackMsg)
.tooltip('_fixTitle')
.tooltip('show')
.attr('title', 'Copy to clipboard')
.tooltip('_fixTitle')
})
});
$('[data-role="widgetConfig"]').on('click','[data-act="cancel"]',function(e) {
e.preventDefault();
resetPage();
});
$('[data-role="widgetPage"]').on('click','[data-act="remove"]',function(e){
e.preventDefault();
$(this).closest('.card').remove();
resetPage();
});
$(document).on('click','[data-role="widgetConfig"] [data-act="make"]',function() {
var button = $(this);
var mod = button.attr('data-mod')
if (mod=='bbs') modal = $('#modal-widget-makebbs');
if (mod=='postlist') modal = $('#modal-widget-makelist');
if (!mod) return false;
modal.modal('show');
})
$('#modal-widget-makebbs').on('shown.bs.modal', function (event) {
var modal = $(this)
modal.find('[name="id"]').trigger('focus')
})
$('#modal-widget-makebbs').on('hidden.bs.modal', function (event) {
var modal = $(this)
modal.find('input').val('').removeClass('is-invalid');
modal.find('[data-act="submit"]').attr('disabled',false);
modal.find('.invalid-tooltip').text('')
})
$('#modal-widget-makebbs').find('input').keyup(function() {
$(this).removeClass('is-invalid');
$('#modal-widget-makebbs').find('.invalid-feedback').text('')
});
$('#modal-widget-makebbs').on('click','[data-act="submit"]',function() {
var modal = $('#modal-widget-makebbs');
var button = $(this);
var id = modal.find('[name="id"]').val();
var name = modal.find('[name="name"]').val();
if (!id) {
modal.find('[name="id"]').focus().addClass('is-invalid');
modal.find('[name="id"]').nextAll('.invalid-feedback').text('게시판 아이디를 입력해주세요.')
return false
}
//아이디 유용성 체크
if (!chkIdValue(id)) {
modal.find('[name="id"]').focus().addClass('is-invalid');
modal.find('[name="id"]').nextAll('.invalid-feedback').text('영문 또는 숫자를 사용해주세요.')
return false
}
if (!name) {
modal.find('[name="name"]').focus().addClass('is-invalid');
modal.find('[name="name"]').nextAll('.invalid-feedback').text('게시판 이름을 입력해주세요.')
return false
}
button.attr('disabled',true);
setTimeout(function(){
$.post(rooturl+'/?r='+raccount+'&m=bbs&a=makebbs',{
id : id,
name : name,
send_mod : 'ajax'
},function(response,status){
if(status=='success'){
var result = $.parseJSON(response);
var error=result.error;
if (error=='id_exists') {
modal.find('[name="id"]').focus().addClass('is-invalid');
modal.find('[name="id"]').nextAll('.invalid-feedback').text('이미 같은 아이디의 게시판이 존재합니다.');
button.attr('disabled',false);
return false
}
modal.modal('hide');
$('[data-role="widgetConfig"]').find('[name="bid"]').append('<option value="'+id+'" data-name="'+name+'" data-link="/b/'+id+'">ㆍ '+name+'('+id+')</option>');
$('[data-role="widgetConfig"]').find('[name="bid"]').val(id).attr('selected','selected');
$('[data-role="widgetConfig"]').find('[name="title"]').val(name);
$('[data-role="widgetConfig"]').find('[name="link"]').val('/b/'+id);
} else {
button.attr('disabled',false);
alert('다시 시도해 주세요.')
return false
}
});
}, 500);
})
$('#modal-widget-makelist').on('shown.bs.modal', function (event) {
var modal = $(this)
modal.find('[name="name"]').trigger('focus')
})
$('#modal-widget-makelist').on('hidden.bs.modal', function (event) {
var modal = $(this)
modal.find('input').val('').removeClass('is-invalid');
modal.find('[data-act="submit"]').attr('disabled',false);
modal.find('.invalid-tooltip').text('')
})
$('#modal-widget-makelist').find('input').keyup(function() {
$(this).removeClass('is-invalid');
$('#modal-widget-makelist').find('.invalid-feedback').text('')
});
$('#modal-widget-makelist').on('click','[data-act="submit"]',function() {
var modal = $('#modal-widget-makelist');
var button = $(this);
var name = modal.find('[name="name"]').val();
if (!name) {
modal.find('[name="name"]').focus().addClass('is-invalid');
modal.find('[name="name"]').nextAll('.invalid-feedback').text('리스트명을 입력해주세요.')
return false
}
button.attr('disabled',true);
setTimeout(function(){
$.post(rooturl+'/?r='+raccount+'&m=post&a=regis_list',{
display : 3,
name : name,
send_mod : 'ajax'
},function(response,status){
if(status=='success'){
var result = $.parseJSON(response);
var error=result.error;
var id=result.id;
if (error=='name_exists') {
modal.find('[name="name"]').focus().addClass('is-invalid');
modal.find('[name="name"]').nextAll('.invalid-feedback').text('이미 같은 이름의 리스트가 존재합니다.');
button.attr('disabled',false);
return false
}
modal.modal('hide');
$('[data-role="widgetConfig"]').find('[name="listid"]').append('<option value="'+id+'">ㆍ '+name+'</option>');
$('[data-role="widgetConfig"]').find('[name="listid"]').val(id).attr('selected','selected');
} else {
button.attr('disabled',false);
alert('다시 시도해 주세요.')
return false
}
});
}, 500);
})
});

View File

@@ -0,0 +1,17 @@
<?php
if ($my['uid'] && $d['layout']['main_dashboard']=='true') getLink('/dashboard','','','');
$g['layoutPageVarForSite'] = $g['path_var'].'site/'.$r.'/layout.'.dirname($_HS['layout']).'.main.php';
include is_file($g['layoutPageVarForSite']) ? $g['layoutPageVarForSite'] : $g['dir_layout'].'_var/_var.main.php';
?>
<?php getWidgetList($d['layout']['main_widget_top']) ?>
<div class="row">
<div class="col-6">
<?php getWidgetList($d['layout']['main_widget_left']) ?>
</div>
<div class="col-6">
<?php getWidgetList($d['layout']['main_widget_right']) ?>
</div>
</div>

View File

@@ -0,0 +1,262 @@
<?php
if (!$my['admin']) getLink('/','','','');
$g['layoutPageVarForSite'] = $g['path_var'].'site/'.$r.'/layout.'.dirname($_HS['layout']).'.main.php';
include is_file($g['layoutPageVarForSite']) ? $g['layoutPageVarForSite'] : $g['dir_layout'].'_var/_var.main.php';
include $g['dir_layout'].'_var/_var.config.php';
?>
<div class="row">
<div class="col-8">
<?php include $g['dir_layout'].'/_includes/settings-nav.php' ?>
<?php if ($type=='mainedit'): ?>
<form name="settingMain" method="post" action="<?php echo $g['s']?>/" target="_action_frame_<?php echo $m?>" class="my-4" role="form">
<input type="hidden" name="r" value="<?php echo $r?>">
<input type="hidden" name="a" value="regislayoutpage">
<input type="hidden" name="m" value="site">
<input type="hidden" name="page" value="main">
<input type="hidden" name="area" value="main_widget_top,main_widget_left,main_widget_right">
<input type="hidden" name="main_widget_top" value="">
<input type="hidden" name="main_widget_left" value="">
<input type="hidden" name="main_widget_right" value="">
<div data-role="widgetPage" data-area="top">
<?php echo getWidgetListEdit($d['layout']['main_widget_top']) ?>
</div>
<div class="row gutter-half">
<div class="col-6">
<div data-role="widgetPage" data-area="left" data-plugin="nestable" class="dd">
<?php echo getWidgetListEdit($d['layout']['main_widget_left']) ?>
<div data-role="addWidget" class="">
<button type="button" class="btn btn-white text-muted btn-block f13 py-3" data-target="#modal-widget-selector" data-toggle="modal" data-area="left" style="border-style: dashed;">
<i class="fa fa-plus-circle fa-fw" aria-hidden="true"></i> 위젯 추가
</button>
<div class="card card-placeholder">
<div class="card-body">&nbsp;</div>
</div>
</div>
</div>
</div>
<div class="col-6">
<div data-role="widgetPage" data-area="right" data-plugin="nestable" class="dd">
<?php echo getWidgetListEdit($d['layout']['main_widget_right']) ?>
<div data-role="addWidget" class="">
<button type="button" class="btn btn-white text-muted btn-block f13 py-3" data-target="#modal-widget-selector" data-toggle="modal" data-area="right" style="border-style: dashed;">
<i class="fa fa-plus-circle fa-fw" aria-hidden="true"></i> 위젯 추가
</button>
<div class="card card-placeholder">
<div class="card-body">&nbsp;</div>
</div>
</div>
</div>
</div>
</div>
<div class="d-flex justify-content-between mt-4">
<div class="">
<?php if ($type=='mainedit'): ?>
<button type="button" class="btn btn-white <?php echo file_exists($g['layoutPageVarForSite'])?'':'d-none' ?>"
data-act="reset" data-page="main" data-toggle="tooltip" title="꾸미기 초기화">
초기화
</button>
<?php endif; ?>
</div>
<button type="button" data-act="submit" class="btn btn-outline-primary">
<span class="not-loading">
저장
</span>
<span class="is-loading">
처리중...
</span>
</button>
</div>
</form>
<?php else: ?>
<form name="settingLayout" action="<?php echo $g['s']?>/" method="post" enctype="multipart/form-data" target="_action_frame_<?php echo $m?>">
<input type="hidden" name="r" value="<?php echo $r?>">
<input type="hidden" name="m" value="<?php echo $m?>">
<input type="hidden" name="a" value="regislayoutsite">
<div class="row">
<div class="col-3">
<div class="nav flex-column nav-pills" id="layout-settings-tab" role="tablist" aria-orientation="vertical">
<?php $_i=1;foreach($d['layout']['dom'] as $_key => $_val):$__i=sprintf('%02d',$_i)?>
<a class="nav-link rounded-0" data-order="<?php echo $__i?>"
data-toggle="pill"
href="#layout-settings-<?php echo $__i?>-body"
role="tab">
<?php echo $_val[0]?>
</a>
<?php $_i++;endforeach?>
</div>
</div>
<div class="col-9">
<div class="tab-content" id="layout-settings-tabContent">
<?php $_i=1;foreach($d['layout']['dom'] as $_key => $_val):$__i=sprintf('%02d',$_i)?>
<div class="tab-pane fade" id="layout-settings-<?php echo $__i?>-body" role="tabpanel">
<?php if(count($_val[2])):?>
<?php foreach($_val[2] as $_v):?>
<div class="form-group">
<?php if($_v[1]!='hidden'):?>
<label><?php echo $_v[2]?></label>
<?php endif?>
<?php if($_v[1]=='hidden'):?>
<input type="hidden" name="layout_<?php echo $_key?>_<?php echo $_v[0]?>" value="<?php echo $d['layout'][$_key.'_'.$_v[0]]?>">
<?php endif?>
<?php if($_v[1]=='input'):?>
<input type="text" class="form-control" name="layout_<?php echo $_key?>_<?php echo $_v[0]?>" value="<?php echo stripslashes($d['layout'][$_key.'_'.$_v[0]])?>" autocomplete="off">
<?php endif?>
<?php if($_v[1]=='color'):?>
<div class="input-group">
<input type="text" class="form-control" name="layout_<?php echo $_key?>_<?php echo $_v[0]?>" id="layout_<?php echo $_key?>_<?php echo $_v[0]?>" value="<?php echo $d['layout'][$_key.'_'.$_v[0]]?>">
<span class="input-group-append">
<button class="btn btn-light" type="button" data-toggle="modal" data-target=".bs-example-modal-sm" onclick="getColorLayer(getId('layout_<?php echo $_key?>_<?php echo $_v[0]?>').value.replace('#',''),'layout_<?php echo $_key?>_<?php echo $_v[0]?>');"><i class="fa fa-tint"></i></button>
</span>
</div>
<?php endif?>
<?php if($_v[1]=='date'):?>
<div class="input-group input-daterange">
<input type="text" class="form-control" name="layout_<?php echo $_key?>_<?php echo $_v[0]?>" id="layout_<?php echo $_key?>_<?php echo $_v[0]?>" value="<?php echo $d['layout'][$_key.'_'.$_v[0]]?>">
<span class="input-group-append">
<button class="btn btn-light" type="button" onclick="getCalCheck('<?php echo $_key?>_<?php echo $_v[0]?>');"><i class="fa fa-calendar"></i></button>
</span>
</div>
<?php endif?>
<?php if($_v[1]=='mediaset'):?>
<div class="input-group">
<input type="text" class="form-control rb-modal-photo-drop js-tooltip" name="layout_<?php echo $_key?>_<?php echo $_v[0]?>" id="layout_<?php echo $_key?>_<?php echo $_v[0]?>" value="<?php echo $d['layout'][$_key.'_'.$_v[0]]?>" onmousedown="_mediasetField='layout_<?php echo $_key?>_<?php echo $_v[0]?>&dfiles='+this.value;" title="선택된 사진" data-toggle="modal" data-target="#modal_window">
<span class="input-group-append">
<button onmousedown="_mediasetField='layout_<?php echo $_key?>_<?php echo $_v[0]?>';" class="btn btn-light rb-modal-photo-drop js-tooltip" type="button" title="포토셋" data-toggle="modal" data-target="#modal_window"><i class="fa fa-picture-o"></i></button>
</span>
</div>
<?php endif?>
<?php if($_v[1]=='videoset'):?>
<div class="input-group">
<input type="text" class="form-control rb-modal-video-drop js-tooltip" name="layout_<?php echo $_key?>_<?php echo $_v[0]?>" id="layout_<?php echo $_key?>_<?php echo $_v[0]?>" value="<?php echo $d['layout'][$_key.'_'.$_v[0]]?>" onmousedown="_mediasetField='layout_<?php echo $_key?>_<?php echo $_v[0]?>&dfiles='+this.value;" title="선택된 비디오" data-toggle="modal" data-target="#modal_window">
<span class="input-group-append">
<button onmousedown="_mediasetField='layout_<?php echo $_key?>_<?php echo $_v[0]?>';" class="btn btn-light rb-modal-video-drop js-tooltip" type="button" title="비디오셋" data-toggle="modal" data-target="#modal_window"><i class="fa fa-video-camera"></i></button>
</span>
</div>
<?php endif?>
<?php if($_v[1]=='file'):?>
<div class="input-group">
<input type="text" class="form-control" id="layout_<?php echo $_key?>_<?php echo $_v[0]?>_name" value="<?php echo $d['layout'][$_key.'_'.$_v[0]]?>" onclick="$('#layout_<?php echo $_key?>_<?php echo $_v[0]?>').click();">
<input type="file" class="d-none" name="layout_<?php echo $_key?>_<?php echo $_v[0]?>" id="layout_<?php echo $_key?>_<?php echo $_v[0]?>" onchange="getId('layout_<?php echo $_key?>_<?php echo $_v[0]?>_name').value='파일 선택됨';">
<span class="input-group-append">
<button class="btn btn-light" type="button" onclick="$('#layout_<?php echo $_key?>_<?php echo $_v[0]?>').click();">
파일첨부
</button>
</span>
</div>
<?php if($d['layout'][$_key.'_'.$_v[0]]):?>
<div style="padding:3px 0 0 2px;"><input type="checkbox" name="layout_<?php echo $_key?>_<?php echo $_v[0]?>_del" value="1"> 현재파일 삭제</div>
<?php endif?>
<?php endif?>
<?php if($_v[1]=='textarea'):?>
<textarea type="text" rows="<?php echo $_v[3]?>" class="form-control" name="layout_<?php echo $_key?>_<?php echo $_v[0]?>"><?php echo stripslashes($d['layout'][$_key.'_'.$_v[0]])?></textarea>
<?php endif?>
<?php if($_v[1]=='select'):?>
<select name="layout_<?php echo $_key?>_<?php echo $_v[0]?>" class="form-control custom-select">
<?php $_sk=explode(',',$_v[3])?>
<?php foreach($_sk as $_sa):?>
<?php $_sa1=explode('=',$_sa)?>
<option value="<?php echo $_sa1[1]?>"<?php if($d['layout'][$_key.'_'.$_v[0]] == $_sa1[1]):?> selected<?php endif?>><?php echo $_sa1[0]?></option>
<?php endforeach?>
</select>
<?php endif?>
<?php if($_v[1]=='radio'):?>
<?php $_sk=explode(',',$_v[3])?>
<?php foreach($_sk as $_sa):?>
<?php $_sa1=explode('=',$_sa)?>
<label class="rb-rabel"><input type="radio" name="layout_<?php echo $_key?>_<?php echo $_v[0]?>" value="<?php echo $_sa1[1]?>"<?php if($d['layout'][$_key.'_'.$_v[0]] == $_sa1[1]):?> checked<?php endif?>> <?php echo $_sa1[0]?></label>
<?php endforeach?>
<?php endif?>
<?php if($_v[1]=='checkbox'):?>
<?php $_sk=explode(',',$_v[3])?>
<?php foreach($_sk as $_sa):?>
<?php $_sa1=explode('=',$_sa)?>
<label class="rb-rabel"><input type="checkbox" name="layout_<?php echo $_key?>_<?php echo $_v[0]?>_chk[]" value="<?php echo $_sa1[1]?>"<?php if(strstr($d['layout'][$_key.'_'.$_v[0]],$_sa1[1])):?> checked<?php endif?>> <?php echo $_sa1[0]?></label>
<?php endforeach?>
<?php endif?>
<?php if($_v[1]=='menu'):?>
<select name="layout_<?php echo $_key?>_<?php echo $_v[0]?>" class="form-control custom-select">
<option value="">사용안함</option>
<option value="" disabled>--------------------------------</option>
<?php include_once $g['path_core'].'function/menu1.func.php'?>
<?php $cat=$d['layout'][$_key.'_'.$_v[0]]?>
<?php getMenuShowSelectCode($s,$table['s_menu'],0,0,0,0,0,'')?>
</select>
<?php endif?>
<?php if($_v[1]=='bbs'):?>
<select name="layout_<?php echo $_key?>_<?php echo $_v[0]?>" class="form-control custom-select">
<option value="">사용안함</option>
<option value="" disabled>----------------------------------</option>
<?php $BBSLIST = getDbArray($table['bbslist'],'','*','gid','asc',0,1)?>
<?php while($R=db_fetch_array($BBSLIST)):?>
<option value="<?php echo $R['id']?>"<?php if($d['layout'][$_key.'_'.$_v[0]]==$R['id']):?> selected="selected"<?php endif?>>
ㆍ<?php echo $R['name']?>(<?php echo $R['id']?>)
</option>
<?php endwhile?>
</select>
<?php endif?>
</div>
<?php endforeach?>
<?php endif?>
</div>
<?php $_i++;endforeach?>
</div>
<button type="button" data-act="submit" class="btn btn-outline-primary mt-3">
<span class="not-loading">
저장하기
</span>
<span class="is-loading">
처리중...
</span>
</button>
</div>
</div>
</form>
<?php endif; ?>
</div>
<div class="col-4">
<div data-role="widgetConfig" class="sticky-top d-none" style="z-index: 999;">
<div data-role="form" class="my-3"></div>
</div>
</div>
</div><!-- /.row -->
<!-- nestable : https://github.com/dbushell/Nestable -->
<?php getImport('nestable','jquery.nestable',false,'js') ?>
<?php getImport('clipboard','clipboard.min','2.0.4','js') ?>
<script src="<?php echo $g['url_layout']?>/_js/settings.js"></script>

View File

@@ -0,0 +1,107 @@
<?php
if(!defined('__KIMS__')) exit;
//***********************************************************************************
// 여기에 이 레이아웃에서 사용할 변수들을 정의합니다.
// 변수 작성법은 매뉴얼을 참고하세요.
//***********************************************************************************
$d['layout']['show'] = true; // 관리패널에 레이아웃 관리탭을 보여주기
$d['layout']['date'] = false; // 데이트픽커 사용
//***********************************************************************************
// 설정배열
//***********************************************************************************
$d['layout']['dom'] = array (
/* 헤더 */
'header' => array(
'헤더',
'',
array(
array('title','input','사이트 제목',''),
array('file','file','이미지 로고',''),
array('search','select','검색폼 출력','예=true,아니오=false'),
array('login','select','로그인폼 출력','예=true,아니오=false'),
),
),
/* 메인 페이지 */
'main' => array(
'메인',
'데스크탑 메인페이지 설정을 관리합니다.',
array(
array('dashboard','select','로그인 후, 대시보드 이동','아니오=false,예=true'),
),
),
'company' => array(
'기업정보',
'',
array(
array('name','input','회사명',''),
array('ceo','input','대표자',''),
array('num','input','사업자등록번호',''),
array('num2','input','통신판매업',''),
array('manager','input','개인정보보호책임자',''),
array('addr','textarea','주소','3'),
),
),
'sns' => array(
'소셜미디어',
'URL을 입력하세요.',
array(
array('instagram','input','인스타그램',''),
array('facebook','input','페이스북',''),
array('nblog','input','네이버블로그',''),
array('youtube','input','유튜브',''),
),
),
'contact' => array(
'고객센터',
'',
array(
array('tel','input','전화번호',''),
array('email','input','이메일',''),
array('fax','input','팩스',''),
),
),
);
$d['layout']['widget'] = array (
'post' => array(
'포스트',
array(
array('bs4-default/post/best/card-default','기간별 추천 포스트'),
array('bs4-default/post/new/card-default','최근 포스트'),
array('bs4-default/post/tag/card-default','특정 키워드'),
array('bs4-default/post/cat/card-default','특정 카테고리'),
array('bs4-default/list/new/card-default','최근 리스트'),
array('bs4-default/list/view/card-default','특정 리스트'),
),
),
'bbs' => array(
'게시판',
array(
array('bs4-default/all/list-default','최근 리스트 기본'),
array('bs4-default/all/gallery-default','최근 갤러리 기본'),
),
),
'profile' => array(
'채널',
array(
array('bs4-default/best/card-default','기간별 추천채널')
),
),
);
//***********************************************************************************
?>

View File

@@ -0,0 +1,5 @@
<?php
$d['layout']['main_widget_top'] = "[main-top^추천 포스트^post/bs4-default/list/view/card-default^listid=9036592,limit=4,line=4,]";
$d['layout']['main_widget_left'] = "[1472^최근 포스트^post/bs4-default/post/new/card-default^title=최근 포스트,subtitle=,limit=4,line=2,link=/post,]";
$d['layout']['main_widget_right'] = "[82d8^최근 리스트^post/bs4-default/list/new/card-default^title=최근 리스트,subtitle=,limit=4,line=2,link=/list,][2eb6^자유게시판^bbs/bs4-default/all/list-default^bid=free,title=자유게시판,limit=4,view=modal,link=/b/free,][5175^자유 갤러리^bbs/bs4-default/all/gallery-default^bid=free,title=자유 갤러리,limit=4,line=2,view=modal,link=/b/free,]";
?>

View File

@@ -0,0 +1,7 @@
<?php
$d['layout']['header_title'] = "마이홈";
$d['layout']['header_file'] = "";
$d['layout']['header_search'] = "true";
$d['layout']['header_login'] = "true";
$d['layout']['main_dashboard'] = "false";
?>

View File

@@ -0,0 +1 @@
nopanel.txt

View File

@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html lang="ko">
<head>
<?php include $g['dir_layout'].'/_includes/_import.head.php' ?>
</head>
<body class="rb-layout-full">
<main role="main">
<?php include __KIMS_CONTENT__ ?>
</main><!-- /.container -->
<?php include $g['dir_layout'].'/_includes/component.php' ?>
<?php include $g['dir_layout'].'/_includes/_import.foot.php'?>
</body>
</html>

View File

@@ -0,0 +1,186 @@
<?php
if (!$my['uid']) getLink('/','','','');
?>
<!DOCTYPE html>
<html lang="<?php echo $lang['xlayout']['lang']?>" class="h-100">
<head>
<?php include $g['dir_layout'].'/_includes/_import.head.php' ?>
<!-- Chart.js : https://github.com/chartjs/Chart.js/ -->
<?php getImport('Chart.js','Chart','2.8.0','css') ?>
</head>
<body class="rb-layout-dashboard d-flex flex-column h-100<?php echo $page=='main'?' bg-light':'' ?>" style="padding-top:67px">
<nav class="navbar fixed-top navbar-expand navbar-light bg-white border-bottom shadow-sm">
<div class="container-fluid">
<span class="">
<a class="navbar-brand mr-1" href="<?php echo RW(0) ?>">
<i class="kf kf-bi-06 fa-lg mr-1"></i>
</a>
<a class="navbar-brand" href="<?php echo RW('mod=dashboard')?>">
<?php echo $d['layout']['header_file']?'<img src="'.$g['url_layout'].'/_var/'.$d['layout']['header_file'].'">':stripslashes($d['layout']['header_title'])?>
<strong>대시보드</strong></a>
</span>
<form name="PostSearchForm" class="mr-auto ml-3 w-50" action="<?php echo $_HS['rewrite']? RW('mod=dashboard&page=post'):$g['s'].'/'?>"role="form" data-role="searchform">
<?php if (!$_HS['rewrite']): ?>
<input type="hidden" name="r" value="<?php echo $r?>">
<input type="hidden" name="mod" value="dashboard">
<?php endif; ?>
<input type="hidden" name="page" value="post">
<input class="form-control" name="keyword" type="search" placeholder="내 포스트 검색" aria-label="Search" data-plugin="autocomplete" value="<?php echo $keyword ?>">
</form>
<div class="">
<ul class="navbar-nav">
<?php if ($my['uid']): ?>
<?php if ($d['post']['writeperm']): ?>
<li class="nav-item">
<a class="nav-link text-primary" href="<?php echo RW('m=post&mod=write')?>">새 포스트</a>
</li>
<?php endif; ?>
<li class="nav-item dropdown js-tooltip mr-2" title="알림" id="navbarPopoverNoti">
<a class="nav-link notification-indicator" href="/" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
<span class="badge badge-danger noti-status" data-role="noti-status"><?php echo $my['num_notice']==0?'':$my['num_notice']?></span>
<strong>새 알림</strong>
</a>
<div class="dropdown-menu dropdown-menu-right py-0" >
<h6 class="dropdown-header d-flex justify-content-between align-items-center py-2 f13">
<strong>새 알림</strong>
<ul class="list-inline small">
<li class="list-inline-item">
<span role="presentation" aria-hidden="true"> · </span>
<a href="/?r=<?php echo $r ?>&mod=settings&page=noti" class="muted-link">설정</a>
</li>
</ul>
</h6>
<div class="list-group list-group-flush" data-role="noti-list" style="max-height: 435px;overflow: auto;">
<!-- 드롭다운이 열릴때, 여기에 알림정보를 받아옴 -->
</div><!-- /.list-group -->
<a class="btn btn-block btn-link muted-link f13 py-2 border-top" href="<?php echo RW('mod=noti')?>">모두보기</a>
</div><!-- /.dropdown-menu -->
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-role="tooltip" title="프로필보기 및 회원계정관리">
<?php echo $my['email']?$my['email']:$my['phone'] ?>
</a>
<div class="dropdown-menu dropdown-menu-right">
<h6 class="dropdown-header"><?php echo $my['nic'] ?> 님</h6>
<div class="dropdown-divider"></div>
<h6 class="dropdown-header">포스트</h6>
<a class="dropdown-item" href="<?php echo RW('m=post&mod=write')?>">
<i class="fa fa-pencil fa-fw" aria-hidden="true"></i> 새 포스트
</a>
<button class="dropdown-item" type="button" data-act="logout" role="button">
<i class="fa fa-sign-out fa-fw" aria-hidden="true"></i> 로그아웃
</button>
<?php if ($my['admin']): ?>
<div class="dropdown-divider"></div>
<a class="dropdown-item text-danger" href="/?m=admin&pickmodule=site&panel=Y" target="_top">관리자모드</a>
<?php endif; ?>
</div>
</li>
<?php else: ?>
<li class="nav-item">
<a class="nav-link" href="#modal-join" data-toggle="modal" data-backdrop="static">회원가입</a>
</li>
<li class="nav-item position-relative" id="navbarPopoverLogin">
<a class="nav-link dropdown-toggle" href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="드롭다운형 로그인">
로그인
</a>
</li>
<?php endif; ?>
</ul>
</div>
</div><!-- /.container -->
</nav>
<nav class="sidebar d-print-none">
<?php include $g['dir_layout'].'/_includes/sidebar-dashboard.php' ?>
</nav>
<main role="main">
<!-- 알림수신을 위한 권한요청 (권한이 설정되지 않은 경우만 표시) -->
<div class="alert alert-light mb-0 rounded-0 border-bottom" role="alert" id="permission_alert" style="display: none">
<div class="d-flex justify-content-between">
<p class="f13 mb-0">
<i class="fa fa-bell fa-fw text-primary" aria-hidden="true"></i> 데스크탑 푸시알림을 수신하면 공지사항은 물론 회원님이 게시글에 대한 피드백 또는 내가 언급된 글에 대한 정보들을 실시간으로 받아보실 수 있습니다.
<a href="#" class="alert-link" onclick="requestPermission()"><u>권한 설정</u></a>
</p>
<button type="button" class="close" data-dismiss="alert" aria-label="Close" title="나중에 하기">
<span aria-hidden="true">&times;</span>
</button>
</div>
</div>
<?php include __KIMS_CONTENT__ ?>
</main>
<!-- Chart.js : https://github.com/chartjs/Chart.js/ -->
<?php getImport('Chart.js','Chart.bundle.min','2.8.0','js') ?>
<!-- jQuery-Autocomplete : https://github.com/devbridge/jQuery-Autocomplete -->
<?php getImport('jQuery-Autocomplete','jquery.autocomplete.min','1.3.0','js') ?>
<script type="text/javascript">
document.title = '대시보드 · <?php echo $my['nic'] ?> ';
$( document ).ready(function() {
$('body').on('click','[data-act="newNoti"]',function(){
var new_noti = getAjaxData('<?php echo $g['s']?>/?r=<?php echo $r?>&m=notification&a=notice_check&noticedata=Y');
$("#rb-alert-desk .alert").alert('close')
$("#rb-noti-timeline").prepend(new_noti)
$(".navbar").find('.mail-status').removeClass('unread')
$(".blankslate").addClass('d-none')
document.title = '킴스큐';
});
$('[data-plugin="autocomplete"]').autocomplete({
width : 625,
lookup: function (query, done) {
$.getJSON(rooturl+"/?m=post&a=search_data", {q: query}, function(res){
var sg_post = [];
var data_arr = res.postlist.split(',');//console.log(data.usernames);
$.each(data_arr,function(key,post){
var postData = post.split('|');
var subject = postData[0];
var cid = postData[1];
sg_post.push({"value":subject,"data":cid});
});
var result = {
suggestions: sg_post
};
done(result);
});
},
onSelect: function (suggestion) {
if ($('[data-plugin="autocomplete"]').val().length >= 1) {
location.href = suggestion.data;
}
}
});
});
</script>
<?php include $g['dir_layout'].'/_includes/component.php' ?>
<?php include $g['dir_layout'].'/_includes/_import.foot.php' ?>
</body>
</html>

View File

@@ -0,0 +1,19 @@
<!DOCTYPE html>
<html lang="ko">
<head>
<?php include $g['dir_layout'].'/_includes/_import.head.php' ?>
</head>
<body class="rb-layout-default">
<?php include $g['dir_layout'].'/_includes/header.php' ?>
<main role="main" class="container px-0">
<?php include __KIMS_CONTENT__ ?>
</main><!-- /.container -->
<?php include $g['dir_layout'].'/_includes/footer.php' ?>
<?php include $g['dir_layout'].'/_includes/component.php' ?>
<?php include $g['dir_layout'].'/_includes/_import.foot.php'?>
</body>
</html>

View File

@@ -0,0 +1,20 @@
<!DOCTYPE html>
<html lang="ko">
<head>
<?php include $g['dir_layout'].'/_includes/_import.head.php' ?>
</head>
<body class="rb-layout-docs">
<?php include $g['dir_layout'].'/_includes/header.php' ?>
<main role="main" class="container px-0 rb-article">
<article class="document mb-3">
<?php include __KIMS_CONTENT__ ?>
</article>
</main><!-- /.container -->
<?php include $g['dir_layout'].'/_includes/component.php' ?>
<?php include $g['dir_layout'].'/_includes/_import.foot.php'?>
</body>
</html>

View File

@@ -0,0 +1,72 @@
<!DOCTYPE html>
<html lang="ko">
<head>
<?php include $g['dir_layout'].'/_includes/_import.head.php' ?>
</head>
<body class="rb-layout-full" style="padding-top:50px">
<nav class="navbar fixed-top navbar-expand navbar-dark bg-dark">
<div class="container-fluid">
<a class="navbar-brand" href="<?php echo RW(0) ?>">
<?php echo $d['layout']['header_file']?'<img src="'.$g['url_layout'].'/_var/'.$d['layout']['header_file'].'">':stripslashes($d['layout']['header_title'])?>
</a>
<div class="">
<?php if($d['layout']['header_login']=='true'):?>
<ul class="navbar-nav">
<?php if ($my['uid']): ?>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-role="tooltip" title="프로필보기 및 회원계정관리">
<img src="<?php echo getAvatarSrc($my['uid'],'20') ?>" width="20" height="20" alt="" class="rounded d-inline-block align-top">
<?php echo $my['nic'] ?>
</a>
<div class="dropdown-menu dropdown-menu-right">
<h6 class="dropdown-header"><?php echo $my['nic'] ?> 님</h6>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo RW('m=post&mod=write')?>">
새 포스트
</a>
<a class="dropdown-item" href="<?php echo RW('mod=dashboard')?>">
대시보드
</a>
<a class="dropdown-item" href="<?php echo getProfileLink($my['uid'])?>">
프로필
</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="<?php echo RW('mod=settings')?>">
설정
</a>
<button class="dropdown-item" type="button" data-act="logout" role="button">
로그아웃
</button>
<?php if ($my['admin']): ?>
<div class="dropdown-divider"></div>
<a class="dropdown-item text-danger" href="/?m=admin&pickmodule=site&panel=Y" target="_top">관리자모드</a>
<?php endif; ?>
</div>
</li>
<?php else: ?>
<li class="nav-item">
<a class="nav-link" href="#modal-join" data-toggle="modal" data-backdrop="static">회원가입</a>
</li>
<li class="nav-item position-relative" id="navbarPopoverLogin">
<a class="nav-link dropdown-toggle" href="#modal-login" data-toggle="modal" aria-haspopup="true" aria-expanded="false" title="모달형 로그인">
로그인
</a>
</li>
<?php endif; ?>
</ul>
<?php endif?>
</div>
</div><!-- /.container -->
</nav>
<?php include __KIMS_CONTENT__ ?>
<?php include $g['dir_layout'].'/_includes/component.php' ?>
<?php include $g['dir_layout'].'/_includes/_import.foot.php'?>
</body>
</html>

View File

@@ -0,0 +1 @@
데스크탑 시작하기 레이아웃

View File

@@ -0,0 +1,26 @@
<!DOCTYPE html>
<html lang="ko">
<head>
<?php include $g['dir_layout'].'/_includes/_import.head.php' ?>
</head>
<body class="rb-layout-default">
<?php include $g['dir_layout'].'/_includes/header.php' ?>
<main role="main" class="container px-0">
<div class="page-wrapper row">
<nav class="page-nav col">
<?php include $g['dir_layout'].'/_includes/subnav.php' ?>
</nav><!-- /.page-nav -->
<div class="page-main col">
<?php include __KIMS_CONTENT__ ?>
</div><!-- /.page-main -->
</div><!-- /.page-wrapper -->
</main><!-- /.container -->
<?php include $g['dir_layout'].'/_includes/footer.php' ?>
<?php include $g['dir_layout'].'/_includes/component.php' ?>
<?php include $g['dir_layout'].'/_includes/_import.foot.php'?>
</body>
</html>

View File

@@ -0,0 +1,3 @@
The RBL License
Copyright (c) 2020 Redblock, Inc.

View File

@@ -0,0 +1 @@
## 모바일 기초 레이아웃

View File

@@ -0,0 +1,705 @@
.rb-article {
-webkit-text-size-adjust: 100%;
text-size-adjust: 100%;
line-height: 1.6;
word-wrap: break-word;
}
.rb-article p {
font-family: AppleSDGothicNeo, 'Malgun Gothic', '맑은 고딕', sans-serif;
font-size: 1.0625rem;
letter-spacing: -1px;
line-height: 1.6875rem;
letter-spacing: -0.04em;
word-break: break-all;
word-wrap: break-word;
}
.rb-article a {
background-color: transparent;
}
.rb-article a:active,
.rb-article a:hover {
outline: 0;
}
.rb-article strong {
font-weight: bold;
}
.rb-article h1 {
font-size: 2em;
margin: 0.67em 0;
}
.rb-article img {
border: 0;
}
.rb-article hr {
box-sizing: content-box;
height: 0;
}
.rb-article pre {
overflow: auto;
}
.rb-article code,
.rb-article kbd,
.rb-article pre {
font-family: monospace, monospace;
font-size: 1em;
}
.rb-article input {
color: inherit;
font: inherit;
margin: 0;
}
.rb-article html input[disabled] {
cursor: default;
}
.rb-article input {
line-height: normal;
}
.rb-article input[type="checkbox"] {
box-sizing: border-box;
padding: 0;
}
.rb-article table {
border-collapse: collapse;
border-spacing: 0;
}
.rb-article td,
.rb-article th {
padding: 0;
}
.rb-article * {
box-sizing: border-box;
}
.rb-article input {
font: 13px / 1.4 Helvetica, arial, nimbussansl, liberationsans, freesans, clean, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
}
.rb-article a {
color: #4078c0;
text-decoration: none;
}
.rb-article a:hover,
.rb-article a:active {
text-decoration: underline;
}
.rb-article hr {
height: 0;
margin: 15px 0;
overflow: hidden;
background: transparent;
border: 0;
border-bottom: 1px solid #ddd;
}
.rb-article hr:before {
display: table;
content: "";
}
.rb-article hr:after {
display: table;
clear: both;
content: "";
}
.rb-article h1,
.rb-article h2,
.rb-article h3,
.rb-article h4,
.rb-article h5,
.rb-article h6 {
margin-top: 15px;
margin-bottom: 15px;
line-height: 1.1;
}
.rb-article h1 {
font-size: 30px;
}
.rb-article h2 {
font-size: 21px;
}
.rb-article h3 {
font-size: 16px;
}
.rb-article h4 {
font-size: 14px;
}
.rb-article h5 {
font-size: 12px;
}
.rb-article h6 {
font-size: 11px;
}
.rb-article blockquote {
margin: 0;
}
.rb-article ul,
.rb-article ol {
padding: 0;
margin-top: 0;
margin-bottom: 0;
}
.rb-article ol ol,
.rb-article ul ol {
list-style-type: lower-roman;
}
.rb-article ul ul ol,
.rb-article ul ol ol,
.rb-article ol ul ol,
.rb-article ol ol ol {
list-style-type: lower-alpha;
}
.rb-article dd {
margin-left: 0;
}
.rb-article code {
font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
font-size: 12px;
}
.rb-article pre {
margin-top: 0;
margin-bottom: 0;
font: 12px Consolas, "Liberation Mono", Menlo, Courier, monospace;
}
.rb-article .select::-ms-expand {
opacity: 0;
}
.rb-article .octicon {
font: normal normal normal 16px/1 octicons-link;
display: inline-block;
text-decoration: none;
text-rendering: auto;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.rb-article .octicon-link:before {
content: '\f05c';
}
.rb-article:before {
display: table;
content: "";
}
.rb-article:after {
display: table;
clear: both;
content: "";
}
.rb-article>*:first-child {
margin-top: 0 !important;
}
.rb-article>*:last-child {
margin-bottom: 0 !important;
}
.rb-article a:not([href]) {
color: inherit;
text-decoration: none;
}
.rb-article .anchor {
display: inline-block;
padding-right: 2px;
margin-left: -18px;
}
.rb-article .anchor:focus {
outline: none;
}
.rb-article h1,
.rb-article h2,
.rb-article h3,
.rb-article h4,
.rb-article h5,
.rb-article h6 {
margin-top: 1em;
margin-bottom: 16px;
font-weight: bold;
line-height: 1.4;
}
.rb-article h1 .octicon-link,
.rb-article h2 .octicon-link,
.rb-article h3 .octicon-link,
.rb-article h4 .octicon-link,
.rb-article h5 .octicon-link,
.rb-article h6 .octicon-link {
color: #000;
vertical-align: middle;
visibility: hidden;
}
.rb-article h1:hover .anchor,
.rb-article h2:hover .anchor,
.rb-article h3:hover .anchor,
.rb-article h4:hover .anchor,
.rb-article h5:hover .anchor,
.rb-article h6:hover .anchor {
text-decoration: none;
}
.rb-article h1:hover .anchor .octicon-link,
.rb-article h2:hover .anchor .octicon-link,
.rb-article h3:hover .anchor .octicon-link,
.rb-article h4:hover .anchor .octicon-link,
.rb-article h5:hover .anchor .octicon-link,
.rb-article h6:hover .anchor .octicon-link {
visibility: visible;
}
.rb-article h1 {
padding-bottom: 0.3em;
font-size: 2.25em;
line-height: 1.2;
border-bottom: 1px solid #eee;
}
.rb-article h1 .anchor {
line-height: 1;
}
.rb-article h2 {
padding-bottom: 0.3em;
font-size: 1.75em;
line-height: 1.225;
border-bottom: 1px solid #eee;
}
.rb-article h2 .anchor {
line-height: 1;
}
.rb-article h3 {
font-size: 1.5em;
line-height: 1.43;
}
.rb-article h3 .anchor {
line-height: 1.2;
}
.rb-article h4 {
font-size: 1.25em;
}
.rb-article h4 .anchor {
line-height: 1.2;
}
.rb-article h5 {
font-size: 1em;
}
.rb-article h5 .anchor {
line-height: 1.1;
}
.rb-article h6 {
font-size: 1em;
color: #777;
}
.rb-article h6 .anchor {
line-height: 1.1;
}
.rb-article h1,
.rb-article h2,
.rb-article h3,
.rb-article h4,
.rb-article h5,
.rb-article h6,
.rb-article p,
.rb-article blockquote,
.rb-article ul,
.rb-article ol,
.rb-article dl,
.rb-article table,
.rb-article pre {
margin-top: 0;
margin-bottom: 1.6875rem;
padding-right: 1.25rem;
padding-left: 1.25rem;
}
.rb-article hr {
height: 4px;
padding: 0;
margin: 16px 0;
background-color: #e7e7e7;
border: 0 none;
}
.rb-article ul,
.rb-article ol {
padding-left: 2em;
}
.rb-article ul ul,
.rb-article ul ol,
.rb-article ol ol,
.rb-article ol ul {
margin-top: 0;
margin-bottom: 0;
}
.rb-article li>p {
margin-top: 16px;
}
.rb-article dl {
padding: 0;
}
.rb-article dl dt {
padding: 0;
margin-top: 16px;
font-size: 1em;
font-style: italic;
font-weight: bold;
}
.rb-article dl dd {
padding: 0 16px;
margin-bottom: 16px;
}
.rb-article blockquote {
padding: 0 15px;
color: #333;
border-left: 2px solid #ddd;
}
.rb-article blockquote>:first-child {
margin-top: 0;
}
.rb-article blockquote>:last-child {
margin-bottom: 0;
}
.rb-article table {
width: 100%;
overflow: auto;
word-break: normal;
word-break: keep-all;
}
.rb-article table th {
font-weight: bold;
}
.rb-article table th,
.rb-article table td {
padding: 6px 13px;
border: 1px solid #ddd;
}
.rb-article table tr {
background-color: #fff;
border-top: 1px solid #ccc;
}
.rb-article img {
max-width: 100%;
box-sizing: content-box;
background-color: #fff;
}
.rb-article video,
.rb-article audio {
min-width: 100%;
margin-bottom: 2rem;
background-color: #ccc
}
.rb-article video {
background: #ccc url("video-box.png") no-repeat center center
}
.rb-blog-view .rb-article video {
background: #fff url("") no-repeat center center
}
.rb-article video source::before {
content: 'videos';
text-align: center
}
.mejs__container {
margin-bottom: 2rem
}
.rb-article code {
padding: 0;
padding-top: 0.2em;
padding-bottom: 0.2em;
margin: 0;
font-size: 85%;
background-color: rgba(0, 0, 0, 0.04);
border-radius: 3px;
}
.rb-article code:before,
.rb-article code:after {
letter-spacing: -0.2em;
content: "\00a0";
}
.rb-article pre>code {
padding: 0;
margin: 0;
font-size: 100%;
word-break: normal;
white-space: pre;
background: transparent;
border: 0;
}
.rb-article .highlight {
margin-bottom: 16px;
}
.rb-article .highlight pre,
.rb-article pre {
padding: 16px;
overflow: auto;
font-size: 85%;
line-height: 1.45;
background-color: #f7f7f7;
border-radius: 3px;
}
.rb-article .highlight pre {
margin-bottom: 0;
word-break: normal;
}
.rb-article pre {
word-wrap: normal;
}
.rb-article pre code {
display: inline;
max-width: initial;
padding: 0;
margin: 0;
overflow: initial;
line-height: inherit;
word-wrap: normal;
background-color: transparent;
border: 0;
}
.rb-article pre code:before,
.rb-article pre code:after {
content: normal;
}
.rb-article kbd {
display: inline-block;
padding: 3px 5px;
font-size: 11px;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb;
}
.rb-article .pl-c {
color: #969896;
}
.rb-article .pl-c1,
.rb-article .pl-s .pl-v {
color: #0086b3;
}
.rb-article .pl-e,
.rb-article .pl-en {
color: #795da3;
}
.rb-article .pl-s .pl-s1,
.rb-article .pl-smi {
color: #333;
}
.rb-article .pl-ent {
color: #63a35c;
}
.rb-article .pl-k {
color: #a71d5d;
}
.rb-article .pl-pds,
.rb-article .pl-s,
.rb-article .pl-s .pl-pse .pl-s1,
.rb-article .pl-sr,
.rb-article .pl-sr .pl-cce,
.rb-article .pl-sr .pl-sra,
.rb-article .pl-sr .pl-sre {
color: #183691;
}
.rb-article .pl-v {
color: #ed6a43;
}
.rb-article .pl-id {
color: #b52a1d;
}
.rb-article .pl-ii {
background-color: #b52a1d;
color: #f8f8f8;
}
.rb-article .pl-sr .pl-cce {
color: #63a35c;
font-weight: bold;
}
.rb-article .pl-ml {
color: #693a17;
}
.rb-article .pl-mh,
.rb-article .pl-mh .pl-en,
.rb-article .pl-ms {
color: #1d3e81;
font-weight: bold;
}
.rb-article .pl-mq {
color: #008080;
}
.rb-article .pl-mi {
color: #333;
font-style: italic;
}
.rb-article .pl-mb {
color: #333;
font-weight: bold;
}
.rb-article .pl-md {
background-color: #ffecec;
color: #bd2c00;
}
.rb-article .pl-mi1 {
background-color: #eaffea;
color: #55a532;
}
.rb-article .pl-mdr {
color: #795da3;
font-weight: bold;
}
.rb-article .pl-mo {
color: #1d3e81;
}
.rb-article kbd {
display: inline-block;
padding: 3px 5px;
font: 11px Consolas, "Liberation Mono", Menlo, Courier, monospace;
line-height: 10px;
color: #555;
vertical-align: middle;
background-color: #fcfcfc;
border: solid 1px #ccc;
border-bottom-color: #bbb;
border-radius: 3px;
box-shadow: inset 0 -1px 0 #bbb;
}
.rb-article .task-list-item {
list-style-type: none;
}
.rb-article .task-list-item+.task-list-item {
margin-top: 3px;
}
.rb-article .task-list-item input {
margin: 0 0.35em 0.25em -1.6em;
vertical-align: middle;
}
.rb-article :checked+.radio-label {
z-index: 1;
position: relative;
border-color: #4078c0;
}
/*추가함*/
.rb-article figure.image {
margin: 0;
margin-bottom: 1.4375rem;
}
.rb-article figure.image figcaption {
padding: 0.5rem 1.25rem 0.25rem;
text-align: left;
font-size: 0.875rem;
line-height: 1.3125rem;
letter-spacing: -0.07em;
color: #828282;
caption-side: bottom;
}

File diff suppressed because it is too large Load Diff

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -0,0 +1,25 @@
<?php
//사이트별 레이아웃 설정 변수
$layout = dirname($_HS['m_layout']);
$g['layoutVarForSite'] = $g['dir_var_site'].'layout.'.$layout.'.var.php';
include is_file($g['layoutVarForSite']) ? $g['layoutVarForSite'] : $g['dir_layout'].'_var/_var.php';
//사이트 부가정보 변수
$g['siteinfo'] = $g['dir_var_site'].'siteinfo.php';
if (is_file($g['siteinfo'])) include $g['siteinfo'];
//사이트별 웹앱 매니페스트
$g['manifestForSite'] = $g['dir_var_site'].'manifest.json';
$g['url_manifest'] = $g['url_var_site'].'/manifest.json';
$manifestForSite = file_exists($g['manifestForSite']) ? $g['url_manifest'] : $g['path_module'].'site/var/manifest.json';
//아이폰 전용 apple-touch-icon
$g['touchIconForSite'] = $g['url_var_site'].'/homescreen.png';
$g['url_touchIcon'] = $g['url_var_site'].'/homescreen-180x180.png';
$touchIconForSite = file_exists($g['touchIconForSite']) ? $g['url_touchIcon'] : $g['img_core'].'/touch/homescreen-180x180.png';
if ($layoutPage) {
$g['main'] = $g['path_layout'].$d['site_layout'].'/_pages/'.$layoutPage.'.php';
}
?>

View File

@@ -0,0 +1,53 @@
<!-- 엔진코드:삭제하지마세요 -->
<?php include $g['path_core'].'engine/foot.engine.php'?>
<!-- youtube iframe_api -->
<script src="https://www.youtube.com/player_api"></script>
<!-- 입력 textarea 자동확장 -->
<?php getImport('autosize','autosize.min','3.0.14','js')?>
<!-- jQuery-Autocomplete : https://github.com/devbridge/jQuery-Autocomplete -->
<?php getImport('jQuery-Autocomplete','jquery.autocomplete.min','1.3.0','js') ?>
<!-- jquery.shorten : https://github.com/viralpatel/jquery.shorten -->
<?php getImport('jquery.shorten','jquery.shorten.min','1.0','js')?>
<!-- linkifyjs : https://github.com/Soapbox/linkifyjs -->
<?php getImport('linkifyjs','linkify.min','2.1.8','js')?>
<?php getImport('linkifyjs','linkify-string.min','2.1.8','js')?>
<!-- moment -->
<?php getImport('moment','moment','2.22.2','js');?>
<?php getImport('moment-duration-format','moment-duration-format','2.2.2','js');?>
<!-- Chart.js : https://github.com/chartjs/Chart.js/ -->
<?php getImport('Chart.js','Chart','2.8.0','css') ?>
<?php getImport('Chart.js','Chart.bundle.min','2.8.0','js') ?>
<!-- markjs js : https://github.com/julmot/mark.js -->
<?php getImport('markjs','jquery.mark.min','8.11.1','js')?>
<!-- 댓글출력시 필요 -->
<?php if ($mod!='write'): ?>
<script src="https://cdn.ckeditor.com/ckeditor5/21.0.0/decoupled-document/ckeditor.js"></script>
<script src="https://cdn.ckeditor.com/ckeditor5/21.0.0/decoupled-document/translations/ko.js"></script>
<?php endif; ?>
<script src="<?php echo $g['url_root']?>/modules/comment/lib/Rb.comment.js<?php echo $g['wcache']?>"></script>
<!-- 레이아웃 공용 스크립트 -->
<script src="<?php echo $g['url_layout']?>/_js/main.js<?php echo $g['wcache']?>"></script>
<?php if($_SERVER['HTTPS'] == 'on' && ($g['mobile']!='ipad' || $g['mobile']!='iphone') ):?>
<script>
if ('serviceWorker' in navigator && 'PushManager' in window) {
console.log('서비스워커와 푸시가 지원되는 브라우저 입니다.');
window.addEventListener('load', () => {
navigator.serviceWorker.register('<?php echo $g['s']?>/sw.js');
});
} else {
console.warn('푸시 메시징이 지원되지 않는 브라우저 입니다.');
}
</script>
<?php endif?>

View File

@@ -0,0 +1,89 @@
<meta charset="utf-8">
<meta name="viewport" content="initial-scale=1, maximum-scale=1">
<meta name="mobile-web-app-capable" content="yes">
<meta name="theme-color" content="#333">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-mobile-web-app-status-bar-style" content="black">
<!-- Seo -->
<meta name="robots" content="<?php echo strip_tags($g['meta_bot'])?>">
<meta name="title" content="<?php echo strip_tags($g['meta_tit'])?>">
<meta name="keywords" content="<?php echo strip_tags($g['meta_key'])?>">
<meta name="description" content="<?php echo strip_tags($g['meta_des'])?>">
<link rel="image_src" href="<?php echo strip_tags($g['meta_img'])?>">
<meta property="og:site_name" content="<?php echo $_HS['name'] ?>">
<meta property="og:locale" content="ko_KR">
<meta property="og:type" content="article">
<meta property="og:url" content="<?php echo strip_tags($g['url_root'].$_SERVER['REQUEST_URI'])?>">
<meta property="og:title" content="<?php echo strip_tags($g['meta_tit'])?>">
<meta property="og:description" content="<?php echo strip_tags($g['meta_des'])?>">
<meta property="og:image" content="<?php echo strip_tags($g['meta_img'])?>">
<!-- 파비콘 -->
<link rel="apple-touch-icon-precomposed" sizes="144x144" href="<?php echo $g['img_layout']?>/icon/homescreen.png">
<link rel="shortcut icon" href="<?php echo $g['img_layout']?>/icon/favicon.ico">
<title><?php echo $g['browtitle']?></title>
<!-- 웹앱 매니페스트 -->
<link rel="manifest" href="<?php echo $manifestForSite?>">
<link rel="apple-touch-icon" sizes="180x180" href="<?php echo $touchIconForSite ?>">
<!-- 사이트 헤드 코드 -->
<?php echo $_HS['headercode']?>
<!-- rc css -->
<?php getImport('rc','css/rc','1.0.0','css')?>
<?php getImport('rc','css/rc-add','1.0.0','css')?>
<!-- jQuery -->
<?php getImport('jquery','jquery.min','1.12.4','js')?>
<!-- rc js -->
<?php getImport('rc','js/rc','1.0.0','js')?>
<!-- 시스템 폰트 -->
<?php getImport('font-awesome','css/font-awesome','4.7.0','css')?>
<?php getImport('font-kimsq','css/font-kimsq',false,'css')?>
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<!-- swiper : http://idangero.us/swiper/ -->
<?php getImport('swiper','css/swiper','5.2.1','css')?>
<?php getImport('swiper','js/swiper.min','5.2.1','js')?>
<!-- timeago : 상대시간 표기 -->
<?php getImport('jquery-timeago','jquery.timeago','1.6.7','js')?>
<?php getImport('jquery-timeago','locales/jquery.timeago.ko','1.6.7','js')?>
<!-- markjs js : https://github.com/julmot/mark.js -->
<?php getImport('markjs','jquery.mark.min','8.11.1','js')?>
<!-- 소셜공유시 URL 클립보드저장 : clipboard.js : https://github.com/zenorocha/clipboard.js-->
<?php getImport('clipboard','clipboard.min','2.0.4','js') ?>
<!-- color-thief : https://github.com/lokesh/color-thief -->
<?php getImport('color-thief','color-thief.min','2.3.0','js') ?>
<!-- jQuery UI : https://jqueryui.com/-->
<?php getImport('jquery-ui','jquery-ui.sortable,min','1.12.1','js')?>
<!-- jquery-ui-touch-punch : https://github.com/furf/jquery-ui-touch-punch/ -->
<?php getImport('jquery-ui-touch-punch','jquery.ui.touch-punch.min','0.2.3','js')?>
<!-- 사이트 헤드 코드 -->
<?php echo $_HS['headercode']?>
<!-- 엔진코드:삭제하지마세요 -->
<?php include $g['path_core'].'engine/cssjs.engine.php' ?>
<!-- global css -->
<link href="<?php echo $g['url_layout']?>/_css/style.css<?php echo $g['wcache']?>" rel="stylesheet">
<link href="<?php echo $g['url_layout']?>/_css/article.css<?php echo $g['wcache']?>" rel="stylesheet">
<script src="//developers.kakao.com/sdk/js/kakao.min.js"></script>
<script>
var kakao_jskey = '<?php echo $d['connect']['jskey_k'] ?>';
Kakao.init(kakao_jskey);
</script>

View File

@@ -0,0 +1,265 @@
<?php
if ($my['uid'] && $d['layout']['main_dashboard']=='true') getLink('/dashboard','','','');
if ($d['layout']['main_type']=='postFeed') {
getWidget('post/rc-post-all-scroll',array('wrapper'=>'[data-role="postFeed"].widget','start'=>'#page-main','recnum'=>5));
} else {
$g['layoutPageVForSite'] = $g['path_var'].'site/'.$r.'/layout.'.$layout.'.main.php'; // 레이아웃 메인페이지 웨젯설정
include is_file($g['layoutPageVForSite']) ? $g['layoutPageVForSite'] : $g['dir_layout'].'_var/_var.main.php';
getWidgetList($d['layout']['main_widgets']);
}
?>
<div class="swiper-container" id="main--event">
<div class="swiper-wrapper">
<div class="swiper-slide">
<a href="#page-shop-category2" data-start="#page-main" data-toggle="page" data-title="풍성한 상차림" data-index="0" data-parent="2" data-category="2">
<img src="/thumb-ssl/640x360/u/i.ytimg.com/vi/7DFwLa-dyVk/maxresdefault_live.jpg" alt="" class="img-fluid">
</a>
</div>
<div class="swiper-slide">
<a href="#"><img src="/files/mobile-main-03.jpg" alt="" class="img-fluid"></a>
</div>
<div class="swiper-slide">
<a href="#"><img src="/files/mobile-main-04.jpg" alt="" class="img-fluid"></a>
</div>
<div class="swiper-slide">
<a href="#"><img src="/files/mobile-main-05.jpg" alt="" class="img-fluid"></a>
</div>
<div class="swiper-slide">
<a href="#"><img src="/files/mobile-main-06.jpg" alt="" class="img-fluid"></a>
</div>
<div class="swiper-slide">
<a href="#"><img src="/files/mobile-main-07.jpg" alt="" class="img-fluid"></a>
</div>
</div>
<!-- Add Pagination -->
<div class="swiper-pagination">
</div>
</div>
<section class="content-padded mt-3 mb-4 widget">
<header class="mb-1">
<h3>추천 스토리</h3>
<a href="#" data-act="swiperMainTo" data-index="3">
더보기 <i class="fa fa-angle-right" aria-hidden="true"></i>
</a>
</header>
<div class="row">
<div class="col-xs-6">
<a href="#page-post-view"
data-toggle="page"
data-start="#page-main"
data-uid=""
data-url="/post/0000000"
data-src="/files/tmp/review-01_600x600.jpg"
data-title="궁이 보이는 집, 어느 신혼부부의 평온한 한옥라이프">
<img src="/thumb-ssl/640x360/u/i.ytimg.com/vi/E-nve-V7GGQ/maxresdefault_live.jpg" class="img-fluid" alt="">
<div class="widget-title mt-2">
궁이 보이는 집, 어느 신혼부부의 평온한 한옥라이프
</div>
</a>
</div>
<div class="col-xs-6">
<a href="#page-post-view"
data-toggle="page"
data-start="#page-main"
data-uid=""
data-url="/post/0000000"
data-src="/files/tmp/review-02_600x600.jpg"
data-category="온라인 집들이"
data-title="특별한 거실 인테리어 팁! with 데스커">
<img src="/thumb-ssl/320x180/u/i.ytimg.com/vi/6Lhm65YCD7Q/mqdefault.jpg" class="img-fluid" alt="">
<div class="widget-title mt-2">
특별한 거실 인테리어 팁! with 데스커
</div>
</a>
</div>
<div class="col-xs-6">
<a href="#page-post-view-video"
data-toggle="page"
data-start="#page-main"
data-uid=""
data-url="/post/0000000"
data-src="t1u1tH-WaLg"
data-title="식물과 함께하는 온기(溫氣) 넘치는 신혼집">
<div class="position-relative">
<img src="/thumb-ssl/320x180/u/i.ytimg.com/vi/7DFwLa-dyVk/maxresdefault_live.jpg" class="img-fluid" alt="">
<span class="badge badge-default position-absolute card-meta card-meta-time">3:52</span>
</div>
<div class="widget-title mt-2">
식물과 함께하는 온기(溫氣) 넘치는 신혼집
</div>
</a>
</div>
<div class="col-xs-6">
<a href="#page-post-view-video"
data-toggle="page"
data-start="#page-main"
data-uid=""
data-url="/post/0000000"
data-src="4DzBFe91CZs"
data-title="[맘&앙팡] 제3회 엄마꿈틀 마켓 1편">
<div class="position-relative">
<img src="/thumb-ssl/320x180/u/i.vimeocdn.com/video/836550173_295x166.jpg" class="img-fluid" alt="">
<span class="badge badge-default position-absolute card-meta card-meta-time">2:30</span>
</div>
<div class="widget-title mt-2">
[맘&앙팡] 제3회 엄마꿈틀 마켓 1편
</div>
</a>
</div>
</div>
</section>
<section class="mt-4">
<a href="#page-site-page" data-start="#page-main" data-toggle="page" data-title="배송안내" data-id="delivery" data-type="page" data-url="<?php echo RW('mod=delivery')?>">
<img src="/files/mobile-banner-01.png" alt="" class="img-fluid">
</a>
</section>
<section class="ad_section mt-5 border-top bg-light" style="background-image: url(/files/banner-02.png);">
<div class="container text-xs-center">
<div class="position-relative">
<h4><strong>키즈룸</strong> 데코</h4>
<p>소중한 내 아이, 사랑스런 공간에서 자라나길.</p>
<a href="#page-shop-category" data-start="#page-main" data-toggle="page" data-title="키즈룸 데코" data-index="0" data-parent="11" data-category="11" class="btn btn-outline-secondary">자세히 보기</a>
</div>
</div>
</section>
<section class="widget rb-photogrid content-padded">
<header class="mb-1">
<h3>인기 키즈룸</h3>
<a href="#" data-act="swiperMainTo" data-index="2">
더보기 <i class="fa fa-angle-right" aria-hidden="true"></i>
</a>
</header>
<p class="mb-1">
<small class="text-muted">한주의 인기사진 1위,2위,3위는 5,000P를 드립니다.</small>
</p>
<div class="row gutter-half">
<div class="col-xs-4">
<a href="#page-detail" data-toggle="page" data-start="#page-main" data-src="">
<span class="rank-icon active"><span>1</span></span>
<small class="nic-name">틴틴이</small>
<img src="/files/tmp/kids-01_200x200.png" class="img-fluid img-rounded border" alt="">
</a>
</div>
<div class="col-xs-4">
<a href="#page-detail" data-toggle="page" data-start="#page-main" data-src="">
<span class="rank-icon active"><span>2</span></span>
<small class="nic-name">틴틴이</small>
<img src="/files/tmp/kids-02_200x200.png" class="img-fluid img-rounded border" alt="">
</a>
</div>
<div class="col-xs-4">
<a href="#page-detail" data-toggle="page" data-start="#page-main" data-src="">
<span class="rank-icon active"><span>3</span></span>
<small class="nic-name">틴틴이</small>
<img src="/files/tmp/kids-03_200x200.png" class="img-fluid img-rounded border" alt="">
</a>
</div>
<div class="col-xs-4">
<a href="#page-detail" data-toggle="page" data-start="#page-main" data-src="">
<span class="rank-icon"><span>4</span></span>
<small class="nic-name">틴틴이</small>
<img src="/files/tmp/kids-04_200x200.png" class="img-fluid img-rounded border" alt="">
</a>
</div>
<div class="col-xs-4">
<a href="#page-detail" data-toggle="page" data-start="#page-main" data-src="">
<span class="rank-icon"><span>5</span></span>
<small class="nic-name">틴틴이</small>
<img src="/files/tmp/kids-05_200x200.png" class="img-fluid img-rounded border" alt="">
</a>
</div>
<div class="col-xs-4">
<a href="#page-detail" data-toggle="page" data-start="#page-main" data-src="">
<span class="rank-icon"><span>6</span></span>
<small class="nic-name">틴틴이</small>
<img src="/files/tmp/kids-06_200x200.png" class="img-fluid img-rounded border" alt="">
</a>
</div>
<div class="col-xs-4">
<a href="#page-detail" data-toggle="page" data-start="#page-main" data-src="">
<span class="rank-icon"><span>7</span></span>
<small class="nic-name">틴틴이</small>
<img src="/files/tmp/kids-07_200x200.png" class="img-fluid img-rounded border" alt="">
</a>
</div>
<div class="col-xs-4">
<a href="#page-detail" data-toggle="page" data-start="#page-main" data-src="">
<span class="rank-icon"><span>8</span></span>
<small class="nic-name">틴틴이</small>
<img src="/files/tmp/kids-08_200x200.png" class="img-fluid img-rounded border" alt="">
</a>
</div>
<div class="col-xs-4">
<a href="#page-detail" data-toggle="page" data-start="#page-main" data-src="">
<span class="rank-icon"><span>9</span></span>
<small class="nic-name">틴틴이</small>
<img src="/files/tmp/kids-09_200x200.png" class="img-fluid img-rounded border" alt="">
</a>
</div>
</div>
</section>
<section class="mt-4">
<a href="#page-site-page" data-start="#page-main" data-toggle="page" data-title="배송안내" data-id="delivery" data-type="page" data-url="<?php echo RW('mod=delivery')?>">
<img src="/files/mobile-banner-01.png" alt="" class="img-fluid">
</a>
</section>
<ul class="table-view bg-white">
<li class="table-view-cell">
<a href="#page-post-view-video" class="navigate-right"
data-toggle="page"
data-start="#page-main"
data-uid=""
data-url="/post/0000000"
data-src="oEB54AcMJ6Q"
data-title="진짜로 입냄새가 없어졌다!😬 이걸로도 입냄새 안 없어지면 포기해야 한다는 전설의 아이템!">
<img class="media-object pull-left" src="/files/tmp/kids-01_200x200.png" style="width:64px">
<div class="media-body">
진짜로 입냄새가 없어졌다!😬 이걸로도 입냄새 안 없어지면 포기해야 한다는 전설의 아이템!
<p>
<small>틴틴이</small>
<small class="ml-1">조회 10</small>
<small class="ml-1">댓글 10+1</small>
<small class="ml-1">좋아요 10</small>
<small class="ml-1">3일전</small>
</p>
</div>
</a>
</li>
<li class="table-view-cell">
<a href="#page-post-view-video" class="navigate-right"
data-toggle="page"
data-start="#page-main"
data-uid=""
data-url="/post/0000000"
data-src="oEB54AcMJ6Q"
data-title="진짜로 입냄새가 없어졌다!😬 이걸로도 입냄새 안 없어지면 포기해야 한다는 전설의 아이템!">
<img class="media-object pull-left" src="/files/tmp/kids-01_200x200.png" style="width:64px">
<div class="media-body">
진짜로 입냄새가 없어졌다!😬
<p>
<small>틴틴이</small>
<small class="ml-1">조회 10</small>
<small class="ml-1">댓글 10+1</small>
<small class="ml-1">좋아요 10</small>
<small class="ml-1">3일전</small>
</p>
</div>
</a>
</li>
</ul>

View File

@@ -0,0 +1,293 @@
<?php
checkAdmin(0);
include $g['dir_layout'].'_var/_var.config.php';
?>
<section class="page center" id="page-layout-settings">
<header class="bar bar-nav bar-light bg-white p-x-0">
<a data-href="/" class="icon icon-home pull-left p-x-1" role="button"></a>
<button class="btn btn-link btn-nav pull-right px-4" data-act="submit">
<span class="not-loading">
저장
</span>
<span class="is-loading">
<div class="spinner-border spinner-border-sm text-primary" role="status">
<span class="sr-only">저장중...</span>
</div>
</span>
</button>
<h1 class="title">
<a data-location="reload" data-text="새로고침..">
레이아웃 편집1
</a>
</h1>
</header>
<main class="content bg-white">
<form action="<?php echo $g['s']?>/" method="post" enctype="multipart/form-data" target="_action_frame_<?php echo $m?>">
<input type="hidden" name="r" value="<?php echo $r?>">
<input type="hidden" name="m" value="<?php echo $m?>">
<input type="hidden" name="a" value="regislayoutsite">
<input type="hidden" name="send_mod" value="ajax">
<ul class="table-view table-view-full border-top-0" id="layout-settings-panels">
<?php $_i=1;foreach($d['layout']['dom'] as $_key => $_val):$__i=sprintf('%02d',$_i)?>
<li class="table-view-cell">
<a class="navigate-right collapsed" data-toggle="collapse" data-parent="#layout-settings-panels" data-target="#layout-settings-<?php echo $__i?>-body" aria-expanded="true">
<?php echo $_val[0]?>
</a>
<ul class="table-view collapse" id="layout-settings-<?php echo $__i?>-body" style="padding-right: 3.9rem">
<li class="table-view-cell">
<p class="text-muted small mb-1"><?php echo $_val[1]?></p>
<?php if(count($_val[2])):?>
<?php foreach($_val[2] as $_v):?>
<div class="form-group">
<?php if($_v[1]!='hidden'):?>
<label><?php echo $_v[2]?></label>
<?php endif?>
<?php if($_v[1]=='hidden'):?>
<input type="hidden" name="layout_<?php echo $_key?>_<?php echo $_v[0]?>" value="<?php echo $d['layout'][$_key.'_'.$_v[0]]?>">
<?php endif?>
<?php if($_v[1]=='input'):?>
<input type="text" class="form-control" name="layout_<?php echo $_key?>_<?php echo $_v[0]?>" value="<?php echo stripslashes($d['layout'][$_key.'_'.$_v[0]])?>">
<?php endif?>
<?php if($_v[1]=='color'):?>
<div class="input-group">
<input type="text" class="form-control" name="layout_<?php echo $_key?>_<?php echo $_v[0]?>" id="layout_<?php echo $_key?>_<?php echo $_v[0]?>" value="<?php echo $d['layout'][$_key.'_'.$_v[0]]?>">
<span class="input-group-append">
<button class="btn btn-light" type="button" data-toggle="modal" data-target=".bs-example-modal-sm" onclick="getColorLayer(getId('layout_<?php echo $_key?>_<?php echo $_v[0]?>').value.replace('#',''),'layout_<?php echo $_key?>_<?php echo $_v[0]?>');"><i class="fa fa-tint"></i></button>
</span>
</div>
<?php endif?>
<?php if($_v[1]=='date'):?>
<div class="input-group input-daterange">
<input type="text" class="form-control" name="layout_<?php echo $_key?>_<?php echo $_v[0]?>" id="layout_<?php echo $_key?>_<?php echo $_v[0]?>" value="<?php echo $d['layout'][$_key.'_'.$_v[0]]?>">
<span class="input-group-append">
<button class="btn btn-light" type="button" onclick="getCalCheck('<?php echo $_key?>_<?php echo $_v[0]?>');"><i class="fa fa-calendar"></i></button>
</span>
</div>
<?php endif?>
<?php if($_v[1]=='mediaset'):?>
<div class="input-group">
<input type="text" class="form-control rb-modal-photo-drop js-tooltip" name="layout_<?php echo $_key?>_<?php echo $_v[0]?>" id="layout_<?php echo $_key?>_<?php echo $_v[0]?>" value="<?php echo $d['layout'][$_key.'_'.$_v[0]]?>" onmousedown="_mediasetField='layout_<?php echo $_key?>_<?php echo $_v[0]?>&dfiles='+this.value;" title="선택된 사진" data-toggle="modal" data-target="#modal_window">
<span class="input-group-append">
<button onmousedown="_mediasetField='layout_<?php echo $_key?>_<?php echo $_v[0]?>';" class="btn btn-light rb-modal-photo-drop js-tooltip" type="button" title="포토셋" data-toggle="modal" data-target="#modal_window"><i class="fa fa-picture-o"></i></button>
</span>
</div>
<?php endif?>
<?php if($_v[1]=='videoset'):?>
<div class="input-group">
<input type="text" class="form-control rb-modal-video-drop js-tooltip" name="layout_<?php echo $_key?>_<?php echo $_v[0]?>" id="layout_<?php echo $_key?>_<?php echo $_v[0]?>" value="<?php echo $d['layout'][$_key.'_'.$_v[0]]?>" onmousedown="_mediasetField='layout_<?php echo $_key?>_<?php echo $_v[0]?>&dfiles='+this.value;" title="선택된 비디오" data-toggle="modal" data-target="#modal_window">
<span class="input-group-append">
<button onmousedown="_mediasetField='layout_<?php echo $_key?>_<?php echo $_v[0]?>';" class="btn btn-light rb-modal-video-drop js-tooltip" type="button" title="비디오셋" data-toggle="modal" data-target="#modal_window"><i class="fa fa-video-camera"></i></button>
</span>
</div>
<?php endif?>
<?php if($_v[1]=='file'):?>
<div class="input-group">
<input type="text" class="form-control" id="layout_<?php echo $_key?>_<?php echo $_v[0]?>_name" value="<?php echo $d['layout'][$_key.'_'.$_v[0]]?>" onclick="$('#layout_<?php echo $_key?>_<?php echo $_v[0]?>').click();">
<input type="file" class="d-none" name="layout_<?php echo $_key?>_<?php echo $_v[0]?>" id="layout_<?php echo $_key?>_<?php echo $_v[0]?>" onchange="getId('layout_<?php echo $_key?>_<?php echo $_v[0]?>_name').value='파일 선택됨';">
<span class="input-group-btn">
<button class="btn btn-secondary" type="button" onclick="$('#layout_<?php echo $_key?>_<?php echo $_v[0]?>').click();" style="padding: 0.5rem 0.75rem;font-size: 1rem;">
파일첨부
</button>
</span>
</div>
<?php if($d['layout'][$_key.'_'.$_v[0]]):?>
<div style="padding:3px 0 0 2px;"><input type="checkbox" name="layout_<?php echo $_key?>_<?php echo $_v[0]?>_del" value="1"> 현재파일 삭제</div>
<?php endif?>
<?php endif?>
<?php if($_v[1]=='textarea'):?>
<textarea type="text" rows="<?php echo $_v[3]?>" class="form-control" name="layout_<?php echo $_key?>_<?php echo $_v[0]?>"><?php echo stripslashes($d['layout'][$_key.'_'.$_v[0]])?></textarea>
<?php endif?>
<?php if($_v[1]=='select'):?>
<select name="layout_<?php echo $_key?>_<?php echo $_v[0]?>" class="form-control custom-select">
<?php $_sk=explode(',',$_v[3])?>
<?php foreach($_sk as $_sa):?>
<?php $_sa1=explode('=',$_sa)?>
<option value="<?php echo $_sa1[1]?>"<?php if($d['layout'][$_key.'_'.$_v[0]] == $_sa1[1]):?> selected<?php endif?>><?php echo $_sa1[0]?></option>
<?php endforeach?>
</select>
<?php endif?>
<?php if($_v[1]=='radio'):?>
<?php $_sk=explode(',',$_v[3])?>
<?php foreach($_sk as $_sa):?>
<?php $_sa1=explode('=',$_sa)?>
<label class="rb-rabel"><input type="radio" name="layout_<?php echo $_key?>_<?php echo $_v[0]?>" value="<?php echo $_sa1[1]?>"<?php if($d['layout'][$_key.'_'.$_v[0]] == $_sa1[1]):?> checked<?php endif?>> <?php echo $_sa1[0]?></label>
<?php endforeach?>
<?php endif?>
<?php if($_v[1]=='checkbox'):?>
<?php $_sk=explode(',',$_v[3])?>
<?php foreach($_sk as $_sa):?>
<?php $_sa1=explode('=',$_sa)?>
<label class="rb-rabel"><input type="checkbox" name="layout_<?php echo $_key?>_<?php echo $_v[0]?>_chk[]" value="<?php echo $_sa1[1]?>"<?php if(strstr($d['layout'][$_key.'_'.$_v[0]],$_sa1[1])):?> checked<?php endif?>> <?php echo $_sa1[0]?></label>
<?php endforeach?>
<?php endif?>
<?php if($_v[1]=='menu'):?>
<select name="layout_<?php echo $_key?>_<?php echo $_v[0]?>" class="form-control custom-select">
<option value="">사용안함</option>
<option value="" disabled>--------------------------------</option>
<?php include_once $g['path_core'].'function/menu1.func.php'?>
<?php $cat=$d['layout'][$_key.'_'.$_v[0]]?>
<?php getMenuShowSelectCode($s,$table['s_menu'],0,0,0,0,0,'')?>
</select>
<?php endif?>
<?php if($_v[1]=='bbs'):?>
<select name="layout_<?php echo $_key?>_<?php echo $_v[0]?>" class="form-control custom-select">
<option value="">사용안함</option>
<option value="" disabled>----------------------------------</option>
<?php $BBSLIST = getDbArray($table['bbslist'],'','*','gid','asc',0,1)?>
<?php while($R=db_fetch_array($BBSLIST)):?>
<option value="<?php echo $R['id']?>"<?php if($d['layout'][$_key.'_'.$_v[0]]==$R['id']):?> selected="selected"<?php endif?>>
ㆍ<?php echo $R['name']?>(<?php echo $R['id']?>)
</option>
<?php endwhile?>
</select>
<?php endif?>
</div>
<?php endforeach?>
<?php endif?>
</li>
</ul>
</li>
<?php $_i++;endforeach?>
<li class="table-view-cell<?php echo $d['layout']['main_type']=='widget'?'':' d-none' ?>" data-toggle="page" data-target="#page-widget-list" data-start="#page-layout-settings">
<a class="navigate-right">
메인 페이지 꾸미기
</a>
</li>
</ul>
</form>
</main>
</section>
<section class="page right" id="page-widget-list">
<header class="bar bar-nav bar-light bg-white p-x-0">
<a class="icon material-icons pull-left px-3" role="button" data-history="back">arrow_back</a>
<button class="btn btn-link btn-nav pull-right px-4" data-act="submit">
<span class="not-loading">
저장
</span>
<span class="is-loading">
<div class="spinner-border spinner-border-sm text-primary" role="status">
<span class="sr-only">저장중...</span>
</div>
</span>
</button>
<h1 class="title title-left" data-history="back">
메인 페이지 꾸미기
</h1>
</header>
<nav class="bar bar-tab">
<a class="tab-item bg-white text-primary" role="button" data-toggle="modal" href="#modal-widget-selector" data-area="main">
위젯 추가하기
</a>
</nav>
<main class="content bg-white">
<form name="layoutMainPage" method="post" action="<?php echo $g['s']?>/" target="_action_frame_<?php echo $m?>" class="" role="form">
<input type="hidden" name="r" value="<?php echo $r?>">
<input type="hidden" name="a" value="regislayoutpage">
<input type="hidden" name="m" value="site">
<input type="hidden" name="page" value="main">
<input type="hidden" name="area" value="main_widgets">
<input type="hidden" name="main_widgets" value="">
<div data-role="widgetPage" data-plugin="sortable" data-area="main">
</div>
</form>
</main>
</section>
<section class="page right" id="page-widget-view">
<header class="bar bar-nav bar-light bg-white px-0">
<a class="icon material-icons pull-left px-3" role="button" data-history="back">arrow_back</a>
<button class="btn btn-link btn-nav pull-right px-4" data-act="save">
<span class="not-loading">
저장
</span>
<span class="is-loading">
<div class="spinner-border spinner-border-sm text-primary" role="status">
<span class="sr-only">저장중...</span>
</div>
</span>
</button>
<h1 class="title title-left" data-history="back">
위젯 설정 <small class="text-muted ml-2" data-role="title"></small>
</h1>
</header>
<div class="content bg-white" data-role="widgetConfig">
<div class="content-padded pb-4" data-role="form">
</div>
</div>
</section>
<section class="page right" id="page-widget-makebbs">
<header class="bar bar-nav bar-light bg-white px-0">
<a class="icon material-icons pull-left px-3" role="button" data-history="back">arrow_back</a>
<button class="btn btn-link btn-nav pull-right px-4" data-act="save" data-mod="edit">
<span class="not-loading">
생성
</span>
<span class="is-loading">
<div class="spinner-border spinner-border-sm text-primary" role="status">
<span class="sr-only">생성중...</span>
</div>
</span>
</button>
<h1 class="title title-left" data-history="back">새 게시판</h1>
</header>
<div class="content">
<p class="content-padded">
게시판 생성 입력항목
</p>
</div>
</section>
<section class="page right" id="page-widget-makepostlist">
<header class="bar bar-nav bar-light bg-white px-0">
<a class="icon material-icons pull-left px-3" role="button" data-history="back">arrow_back</a>
<button class="btn btn-link btn-nav pull-right px-4" data-act="save" data-mod="edit">
<span class="not-loading">
생성
</span>
<span class="is-loading">
<div class="spinner-border spinner-border-sm text-primary" role="status">
<span class="sr-only">생성중...</span>
</div>
</span>
</button>
<h1 class="title title-left" data-history="back">새 리스트</h1>
</header>
<div class="content">
<p class="content-padded">
리스트 생성 입력항목
</p>
</div>
</section>
<script src="<?php echo $g['url_layout']?>/_js/settings.js<?php echo $g['wcache']?>"></script>

View File

@@ -0,0 +1,195 @@
<?php
checkAdmin(0);
include $g['path_module'].'admin/var/var.version.php';
include $g['path_core'].'function/rss.func.php';
$lastest_version = trim(getUrlData('https://kimsq.github.io/rb/lastest.v2.txt',10));
$_current_version = str_replace('.','',$d['admin']['version']);
$_lastest_version = str_replace('.','',$lastest_version);
$git_version = shell_exec('git --version');
if ($_lastest_version-$_current_version > 0) $try_update = true;
else $try_update = false;
$LASTUID = getDbCnt($table['s_gitlog'],'max(uid)','');
$R = getUidData($table['s_gitlog'],$LASTUID);
$d_last = $LASTUID?getDateFormat($R['d_regis'],'Y.m.d H:i'):'';
?>
<link href="<?php echo $g['s']?>/_core/css/github-markdown.css" rel="stylesheet">
<section class="page center" id="page-software-main">
<header class="bar bar-nav bar-light bg-faded px-0">
<a data-href="/" class="icon icon-home pull-left p-x-1" role="button"></a>
<a class="icon icon-refresh pull-right p-x-1" data-location="reload" data-text="업데이트를 확인하는 중.." role="button"></a>
<h1 class="title" data-location="reload" data-text="업데이트를 확인하는 중..">소프트웨어 정보</h1>
</header>
<div class="content bg-faded">
<form name="updateForm" method="post" action="<?php echo $g['s']?>/" target="_action_frame_site" class="py-4">
<input type="hidden" name="r" value="<?php echo $r?>">
<input type="hidden" name="m" value="admin">
<input type="hidden" name="a" value="update">
<input type="hidden" name="remote" value="https://github.com/kimsQ/rb.git">
<input type="hidden" name="current_version" value="<?php echo $d['admin']['version']?>">
<input type="hidden" name="lastest_version" value="<?php echo $lastest_version?>">
<div class="text-xs-center">
<i class="h1 kf kf-bi-01"></i>
<strong class="d-block mt-2">현재 버전 <?php echo $d['admin']['version']?></strong>
<?php if ($try_update): ?>
<small class="d-block text-muted">최신 버전 <?php echo $lastest_version ?></small>
<?php if ($git_version): ?>
<?php if (is_dir('./.git')): ?>
<a data-toggle="sheet" href="#sheet-update-confirm" class="btn btn-primary mt-3">
업데이트
</a>
<?php else: ?>
<button type="button" data-act="gitinit" class="btn btn-outline-success mt-3">
업데이트 환경 초기화
</button>
<?php endif; ?>
<?php else: ?>
<div class="alert alert-danger content-padded f14" role="alert">
<strong>[git 설치필요]</strong> 버전관리를 위해 git 설치가 필요합니다. 호스팅 제공업체 또는 서버 관리자에게 요청해주세요.
</div>
<?php endif; ?>
<?php else: ?>
<small class="d-block text-muted mt-2 animated shake delay-3">최신 버전 입니다.</small>
<?php endif; ?>
</div>
</form>
<ul class="table-view text-xs-left bg-white">
<?php if ($d_last): ?>
<li class="table-view-cell">
<a class="navigate-right" data-toggle="page" data-target="#page-software-loglist" data-start="#page-software-main">
<span class="badge badge-default badge-inverted"><?php echo $d_last ?></span>
업데이트 이력
</a>
</li>
<?php endif; ?>
<li class="table-view-cell">
<a class="navigate-right" data-toggle="page" data-target="#page-software-kimsq" data-start="#page-software-main">
설명서
</a>
</li>
<li class="table-view-cell">
<a class="navigate-right" data-toggle="page" data-target="#page-software-license" data-start="#page-software-main">
라이센스
</a>
</li>
</ul>
<ul class="table-view text-xs-left bg-white">
<li class="table-view-cell">
<span class="badge badge-default badge-inverted"><?php echo $_SERVER['SERVER_SOFTWARE']?></span>
웹서버
</li>
<li class="table-view-cell">
<span class="badge badge-default badge-inverted">PHP <?php echo phpversion()?></span>
개발언어
</li>
<li class="table-view-cell">
<span class="badge badge-default badge-inverted"><?php echo db_info()?> (<?php echo $DB['type']?>)</span>
데이터베이스
</li>
<li class="table-view-cell">
<span class="badge badge-default badge-inverted"><?php echo $git_version?$git_version:'git 미설치'?></span>
버전관리
</li>
</ul>
</div>
</section>
<section class="page right" id="page-software-loglist">
<header class="bar bar-nav bar-light bg-white px-0">
<a class="icon material-icons pull-left px-3" role="button" data-history="back">arrow_back</a>
<h1 class="title title-left" data-history="back">업데이트 이력</h1>
</header>
<div class="content">
<ul class="table-view mt-0 border-top-0 bg-white" data-role="list">
</ul>
</div>
</section>
<section class="page right" id="page-software-logview">
<header class="bar bar-nav bar-light bg-white px-0">
<a class="icon material-icons pull-left px-3" role="button" data-history="back">arrow_back</a>
<h1 class="title title-left" data-history="back"><code class="text-muted" data-role="title"></code> 업데이트 상세내역</h1>
</header>
<div class="content text-xs-left bg-white">
<table class="table f14 bg-white border-bottom mb-1" style="margin-top:-1px">
<tbody>
<tr>
<th scope="row" class="text-xs-center">버전</th>
<td><span data-role="version"></span></td>
</tr>
<tr>
<th scope="row" class="text-xs-center">일시</th>
<td><span data-role="d_regis"></span></td>
</tr>
<tr>
<th scope="row" class="text-xs-center">작업자</th>
<td><span data-role="name"></span></td>
</tr>
</tbody>
</table>
<div class="">
<textarea class="form-control border-0 f14" style="height:60vh" data-role="output"></textarea>
</div>
</div>
</section>
<section class="page right" id="page-software-kimsq">
<header class="bar bar-nav bar-light bg-white px-0">
<a class="icon material-icons pull-left px-3" role="button" data-history="back">arrow_back</a>
<h1 class="title title-left" data-history="back">설명서</h1>
</header>
<div class="content">
<div class="content-padded markdown-body text-xs-left">
<?php readfile('./README.md')?>
</div>
</div>
</section>
<section class="page right" id="page-software-license">
<header class="bar bar-nav bar-light bg-white px-0">
<a class="icon material-icons pull-left px-3" role="button" data-history="back">arrow_back</a>
<h1 class="title title-left" data-history="back">라이센스</h1>
</header>
<div class="content">
<textarea class="form-control border-0" style="height:90vh"><?php readfile('./LICENSE')?></textarea>
</div>
</section>
<div id="sheet-update-confirm" class="sheet" style="top: 50vh;">
<header class="bar bar-nav bar-inverse bg-primary">
<h1 class="title title-left px-3">업데이트 전 유의사항</h1>
</header>
<nav class="bar bar-tab bar-light bg-white">
<a class="tab-item text-muted" role="button" data-history="back">
취소
</a>
<a class="tab-item text-primary border-left" role="button" data-act="submit">
확인 했습니다.
</a>
</nav>
<main>
<div class="content-padded">
<p>업데이트시 최신 코드가 적용됩니다.</p>
<p>기본 패키지 파일에 직접 수정하거나 추가한 코드가 포함된 파일이 업데이트 내역에 포함되어 있을 경우, 해당사항이 덧씌워 집니다.</p>
<p><mark>업데이트 전에 반드시 코드를 별도파일로 분리하거나 파일명을 변경한 후 업데이트 해주세요.</mark></p>
</div>
</main>
</div>
<?php getImport('jquery-markdown','jquery.markdown','0.0.10','js')?>
<script src="<?php echo $g['url_layout']?>/_js/software.js<?php echo $g['wcache']?>"></script>

View File

@@ -0,0 +1,394 @@
<!-- 컴포넌트 모음 -->
<!-- 회원가입 -->
<?php include_once $g['path_module'].'member/themes/'.$d['member']['theme_mobile'].'/join/component.php'; ?>
<!-- 로그인 -->
<?php include_once $g['path_module'].'member/themes/'.$d['member']['theme_mobile'].'/login/component.php'; ?>
<!-- 알림 -->
<?php include_once $g['path_module'].'member/themes/'.$d['member']['theme_mobile'].'/noti/component.php'; ?>
<!-- 검색 -->
<?php include_once $g['path_module'].'search/themes/_mobile/rc-default/component.php'; ?>
<!-- 설정 -->
<?php include_once $g['path_module'].'member/themes/'.$d['member']['theme_mobile'].'/settings/component.php'; ?>
<!-- 프로필 -->
<?php include_once $g['path_module'].'member/themes/'.$d['member']['theme_mobile'].'/profile/component.php'; ?>
<!-- 포스트 -->
<?php include_once $g['path_module'].'post/themes/'.$d['post']['skin_mobile'].'/component.php'; ?>
<!-- 게시판 -->
<?php include_once $g['path_module'].'bbs/themes/'.$d['bbs']['skin_mobile'].'/component.php'; ?>
<!-- 댓글 -->
<?php include_once $g['path_module'].'comment/themes/'.$d['comment']['skin_mobile'].'/component.php'; ?>
<!-- 사이트 정보 -->
<div class="page right" id="page-site-info">
<header class="bar bar-nav bar-light bg-white px-0">
<a class="icon material-icons pull-left px-3" role="button" data-history="back">arrow_back</a>
<?php if ($my['admin']): ?>
<button class="btn btn-link btn-nav pull-right p-x-2" type="button"
data-href="<?php echo $g['s'].'/?r='.$r.'&amp;layoutPage=settings&prelayout=rc-starter/blank' ?>">
수정
</button>
<?php endif; ?>
<h1 class="title title-left" data-history="back">홈 정보 보기</h1>
</header>
<main role="main" class="content bg-white">
<?php if ($d['layout']['company_name']): ?>
<ul class="table-view mt-0 border-top-0">
<li class="table-view-cell">
<div class="media-body">
<p class="mb-0"><small>회사명</small></p>
<?php echo $d['layout']['company_name'] ?>
</div>
</li>
<?php endif; ?>
<?php if ($d['layout']['company_ceo']): ?>
<li class="table-view-cell">
<div class="media-body">
<p class="mb-0"><small>대표자</small></p>
<?php echo $d['layout']['company_ceo'] ?>
</div>
</li>
<?php endif; ?>
<?php if ($d['layout']['company_num']): ?>
<li class="table-view-cell">
<div class="media-body">
<p class="mb-0"><small>사업자등록번호</small></p>
<?php echo $d['layout']['company_num'] ?>
</div>
</li>
<?php endif; ?>
<?php if ($d['layout']['company_num2']): ?>
<li class="table-view-cell">
<div class="media-body">
<p class="mb-0"><small>통신판매업 신고번호</small></p>
<?php echo $d['layout']['company_num2'] ?>
</div>
</li>
<?php endif; ?>
<?php if ($d['layout']['company_manager']): ?>
<li class="table-view-cell">
<div class="media-body">
<p class="mb-0"><small>개인정보보호 책임자</small></p>
<?php echo $d['layout']['company_manager'] ?>
</div>
</li>
<?php endif; ?>
<?php if ($d['layout']['company_addr']): ?>
<li class="table-view-cell">
<div class="media-body">
<p class="mb-0"><small>주소</small></p>
<?php echo $d['layout']['company_addr'] ?>
</div>
</li>
<?php endif; ?>
<li class="table-view-cell table-view-divider bg-faded"><strong class="small">고객센터</strong></li>
<?php if ($d['layout']['contact_tel']): ?>
<li class="table-view-cell">
<a href="tel://<?php echo $d['layout']['contact_tel'] ?>" class="navigate-right">
<div class="media-body">
<p class="mb-0"><small>전화번호</small></p>
<?php echo $d['layout']['contact_tel'] ?>
</div>
</a>
</li>
<?php endif; ?>
<?php if ($d['layout']['contact_email']): ?>
<li class="table-view-cell">
<a href="mailto:<?php echo $d['layout']['contact_email'] ?>" class="navigate-right">
<div class="media-body">
<p class="mb-0"><small>이메일</small></p>
<?php echo $d['layout']['contact_email'] ?>
</div>
</a>
</li>
<?php endif; ?>
<?php if ($d['layout']['contact_fax']): ?>
<li class="table-view-cell">
<div class="media-body">
<p class="mb-0"><small>팩스</small></p>
<?php echo $d['layout']['contact_fax'] ?>
</div>
</li>
<?php endif; ?>
<li class="table-view-cell table-view-divider bg-faded"><strong class="small">소셜미디어</strong></li>
<?php if ($d['layout']['sns_youtube']): ?>
<li class="table-view-cell">
<a href="<?php echo $d['layout']['sns_youtube'] ?>" target="_blank" class="navigate-right">
<div class="media-body">
<img class="media-object pull-left" src="<?php echo $g['img_core'] ?>/sns/youtube.png" style="width:2.625rem;border-radius: .7rem;">
<p class="mb-0"><small>유튜브</small></p>
<small><?php echo $d['layout']['sns_youtube'] ?></small>
</div>
</a>
</li>
<?php endif; ?>
<?php if ($d['layout']['sns_instagram']): ?>
<li class="table-view-cell">
<a href="<?php echo $d['layout']['sns_instagram'] ?>" target="_blank" class="navigate-right">
<div class="media-body">
<img class="media-object pull-left img-rounded" src="<?php echo $g['img_core'] ?>/sns/instagram.png" style="width:2.625rem;border-radius: .7rem;">
<p class="mb-0"><small>인스타그램</small></p>
<small><?php echo $d['layout']['sns_instagram'] ?></small>
</div>
</a>
</li>
<?php endif; ?>
<?php if ($d['layout']['sns_facebook']): ?>
<li class="table-view-cell">
<a href="<?php echo $d['layout']['sns_facebook'] ?>" target="_blank" class="navigate-right">
<div class="media-body">
<img class="media-object pull-left img-rounded" src="<?php echo $g['img_core'] ?>/sns/facebook.png" style="width:2.625rem;border-radius: .7rem;">
<p class="mb-0"><small>페이스북</small></p>
<small><?php echo $d['layout']['sns_facebook'] ?></small>
</div>
</a>
</li>
<?php endif; ?>
<?php if ($d['layout']['sns_nblog']): ?>
<li class="table-view-cell">
<a href="<?php echo $d['layout']['sns_nblog'] ?>" target="_blank" class="navigate-right">
<div class="media-body">
<img class="media-object pull-left img-rounded" src="<?php echo $g['img_core'] ?>/sns/nblog.png" style="width:2.625rem;border-radius: .7rem;">
<p class="mb-0"><small>네이버 블로그</small></p>
<small><?php echo $d['layout']['sns_nblog'] ?></small>
</div>
</a>
</li>
<?php endif; ?>
<?php if ($d['layout']['sns_ncafe']): ?>
<li class="table-view-cell">
<a href="<?php echo $d['layout']['sns_ncafe'] ?>" target="_blank" class="navigate-right">
<div class="media-body">
<img class="media-object pull-left img-rounded" src="<?php echo $g['img_core'] ?>/sns/ncafe.png" style="width:2.625rem;border-radius: .7rem;">
<p class="mb-0"><small>네이버 카페</small></p>
<small><?php echo $d['layout']['sns_ncafe'] ?></small>
</div>
</a>
</li>
<?php endif; ?>
<?php if ($d['layout']['sns_dcafe']): ?>
<li class="table-view-cell">
<a href="<?php echo $d['layout']['sns_dcafe'] ?>" target="_blank" class="navigate-right">
<div class="media-body">
<img class="media-object pull-left img-rounded" src="<?php echo $g['img_core'] ?>/sns/dcafe.png" style="width:2.625rem;border-radius: .7rem;">
<p class="mb-0"><small>다음 카페</small></p>
<small><?php echo $d['layout']['sns_dcafe'] ?></small>
</div>
</a>
</li>
<?php endif; ?>
<?php if ($d['layout']['sns_band']): ?>
<li class="table-view-cell">
<a href="<?php echo $d['layout']['sns_band'] ?>" target="_blank" class="navigate-right">
<div class="media-body">
<img class="media-object pull-left img-rounded" src="<?php echo $g['img_core'] ?>/sns/band.png" style="width:2.625rem;border-radius: .7rem;">
<p class="mb-0"><small>밴드</small></p>
<small><?php echo $d['layout']['sns_band'] ?></small>
</div>
</a>
</li>
<?php endif; ?>
</ul>
</main>
</div>
<!-- 사이트 페이지 -->
<div class="page right" id="page-site-page">
<header class="bar bar-nav bar-light bg-white px-0">
<a class="icon material-icons pull-left px-3" role="button" data-history="back">arrow_back</a>
<a class="icon material-icons pull-right px-3 mirror" role="button" data-toggle="popup" data-target="#popup-link-share" data-url>reply</a>
<h1 class="title title-left" data-role="title" data-history="back"></h1>
</header>
<main role="main" class="content bg-white">
<div data-role="main" class="content-padded"></div>
</main>
</div>
<!-- 로그아웃-->
<div id="popup-logout" class="popup zoom">
<div class="popup-content">
<header class="bar bar-nav">
<h1 class="title">로그아웃 전에 확인해주세요.</h1>
</header>
<nav class="bar bar-standard bar-footer">
<div class="row">
<div class="col-xs-6">
<button type="button" class="btn btn-secondary btn-block" data-history="back">취소</button>
</div>
<div class="col-xs-6 p-l-0">
<button type="button" class="btn btn-primary btn-block" data-act="logout">로그이웃</button>
</div>
</div>
</nav>
<div class="content">
<div class="p-a-3 text-xs-center">
정말로 로그아웃 하시겠습니까?
</div>
</div>
</div>
</div>
<!-- 팝업 : 링크공유 -->
<div id="popup-link-share" class="popup zoom">
<div class="popup-content rounded-0">
<header class="bar bar-nav rounded-0">
<a class="icon icon-close pull-right" data-history="back" role="button"></a>
<h1 class="title">
링크 복사
</h1>
</header>
<div class="content text-xs-center rounded-0">
<ul class="table-view mt-0" style="max-height: 25rem;">
<li class="table-view-cell media align-items-center">
<img src="<?php echo $g['img_core']?>/sns/kakaotalk.png" alt="카카오톡" class="media-object pull-left img-circle" style="width:2.375rem">
카카오톡
<button class="btn btn-secondary" id="kakao-link-btn">링크공유</button>
</li>
<li class="table-view-cell media align-items-center">
<img src="<?php echo $g['img_core']?>/sns/youtube.png" alt="유튜브" class="media-object pull-left img-circle" style="width:2.375rem">
유튜브
<button class="btn btn-secondary" data-role="youtube" data-toggle="linkCopy" data-clipboard-text="">
링크복사
</button>
</li>
<li class="table-view-cell media align-items-center">
<img src="<?php echo $g['img_core']?>/sns/instagram.png" alt="인스타그램" class="media-object pull-left img-circle" style="width:2.375rem">
인스타그램
<button class="btn btn-secondary" data-role="instagram" data-toggle="linkCopy">링크복사</button>
</li>
<li class="table-view-cell media align-items-center">
<img src="<?php echo $g['img_core']?>/sns/facebook.png" alt="페이스북공유" class="media-object pull-left img-circle" style="width:2.375rem">
페이스북
<button class="btn btn-secondary" data-role="facebook" data-toggle="linkCopy">링크복사</button>
</li>
<li class="table-view-cell media align-items-center">
<img src="<?php echo $g['img_core']?>/sns/band.png" alt="밴드" class="media-object pull-left img-circle" style="width:2.375rem">
밴드
<button class="btn btn-secondary" data-role="band" data-toggle="linkCopy">링크복사</button>
</li>
<li class="table-view-cell media align-items-center">
<img src="<?php echo $g['img_core']?>/sns/naver.png" alt="네이버 카페" class="media-object pull-left img-circle" style="width:2.375rem">
네이버 카페
<button class="btn btn-secondary" data-role="naver" data-toggle="linkCopy">링크복사</button>
</li>
<li class="table-view-cell media align-items-center">
<img src="<?php echo $g['img_core']?>/sns/kakaostory.png" alt="카카오스토리" class="media-object pull-left img-circle" style="width:2.375rem">
카카오스토리
<button class="btn btn-secondary" data-role="kakaostory" data-toggle="linkCopy">링크복사</button>
</li>
<li class="table-view-cell media align-items-center">
<img src="<?php echo $g['img_core']?>/sns/twitter.png" alt="트위터" class="media-object pull-left img-circle" style="width:2.375rem">
트위터
<button class="btn btn-secondary" data-role="twitter" data-toggle="linkCopy">링크복사</button>
</li>
<li class="table-view-cell media align-items-center">
<img src="<?php echo $g['img_core']?>/sns/mail.png" alt="이메일" class="media-object pull-left img-circle" style="width:2.375rem">
이메일
<button class="btn btn-secondary" data-role="email" data-toggle="linkCopy">링크복사</button>
</li>
<li class="table-view-cell media align-items-center">
<img src="<?php echo $g['img_core']?>/sns/sms.png" alt="SMS" class="media-object pull-left img-circle" style="width:2.375rem">
SMS
<button class="btn btn-secondary" data-role="sms" data-toggle="linkCopy">링크복사</button>
</li>
<li class="table-view-cell media align-items-center">
<span class="ml-2">기타</span>
<button class="btn btn-secondary" data-role="etc" data-toggle="linkCopy">링크복사</button>
</li>
<?php if ($my['admin']): ?>
<li class="table-view-cell media align-items-center">
<span class="ml-2">고유번호</span>
<button class="btn btn-secondary" data-role="uid" data-toggle="linkCopy">복사</button>
</li>
<?php endif; ?>
</ul>
</div><!-- /.content -->
</div><!-- /.popup-content -->
</div><!-- /.popup -->
<!-- 푸시알림 권한요청 -->
<div id="permission_alert" class="sheet">
<div class="card card-full">
<div class="card-header bg-primary">
<i class="fa fa-bell-o fa-fw" aria-hidden="true"></i> 푸시알림 수신을 위한 권한요청
</div>
<div class="card-body">
<div class="content-padded text-muted">
<p>푸시알림을 허용하면 공지사항은 물론 게시글에 대한 피드백 또는 내가 언급된 글에 대한 정보들을 실시간으로 받아보실 수 있습니다.</p>
<p>나중에 하기를 선택하실 경우, 설정 페이지에서 재설정 할 수 있습니다.</p>
</div>
</div>
<div class="card-footer bg-white">
<div class="row">
<div class="col-xs-6">
<button type="button" class="btn btn-secondary btn-block" data-history="back">나중에 하기</button>
</div>
<div class="col-xs-6 p-l-0">
<button class="btn btn-outline-primary btn-block" onclick="requestPermission()">지금 설정하기</button>
</div>
</div>
</div>
</div><!-- /.card -->
</div>
<!-- 첨부파일 설정 -->
<div id="sheet-attach-moreAct" class="sheet bg-faded">
<ul class="table-view table-view-full bg-white mb-0">
<li class="table-view-cell table-view-divider" data-dismiss="sheet"><span data-role="title"></span></li>
<li class="table-view-cell">
<a data-attach-act="featured-img">
대표이미지 설정
</a>
</li>
<li class="table-view-cell d-none">
<a data-attach-act="showhide">
정보수정
</a>
</li>
<li class="table-view-cell">
<a data-attach-act="delete">
삭제
</a>
</li>
</ul>
</div>
<script src="<?php echo $g['url_layout']?>/_js/component.js"></script>

View File

@@ -0,0 +1,122 @@
<header class="bar bar-nav bar-light bg-white px-0">
<?php if ($my['uid']): ?>
<a class="icon icon icon-gear pull-right p-x-1" role="button" data-toggle="modal" href="#modal-settings-general" data-url="/settings"></a>
<h1 class="title" data-toggle="profile" data-target="#modal-member-profile" data-mbruid="<?php echo $my['uid'] ?>">
<img class="mt-2 mr-2 pull-left img-circle bg-faded" data-role="avatar" src="<?php echo getAvatarSrc($my['uid'],'56') ?>" style="width:1.75rem">
<small><?php echo $my['nic']?$my['nic']:$my['name'] ?></small>
</h1>
<?php else: ?>
<a class="icon icon icon-close pull-right p-x-1" role="button" data-toggle="drawer-close" title="드로어닫기"></a>
<h1 class="title" role="button" data-toggle="modal" href="#modal-login" data-title="<?php echo stripslashes($d['layout']['header_title'])?>">
로그인 하세요
</h1>
<?php endif; ?>
</header>
<?php if ($d['post']['writeperm']): ?>
<nav class="bar bar-tab bg-white">
<a class="tab-item active bg-primary<?php echo $m=='bbs'?' d-none':'' ?>" role="button"
data-open="newPost"
data-start="<?php echo $d['layout']['main_type']=='postAllFeed'?'#page-main':'#page-post-allpost' ?>"
data-url="/post/write">
새 포스트
</a>
</nav>
<?php endif; ?>
<?php if (!$my['uid']): ?>
<nav class="bar bar-tab bg-white">
<a class="tab-item" role="button" href="#modal-join" data-toggle="modal" data-url="">
<span class="icon material-icons">account_circle</span>
<span class="tab-label">회원가입</span>
</a>
<a class="tab-item" role="button" href="#modal-login" data-toggle="modal" data-title="<?php echo stripslashes($d['layout']['header_title'])?>">
<span class="icon material-icons">input</span>
<span class="tab-label">로그인</span>
</a>
</nav>
<?php endif; ?>
<div class="content bg-white">
<ul class="table-view bg-white mt-0 mb-2 border-top-0" id="drawer-menu">
<li class="table-view-cell">
<a class="" data-href="<?php echo RW(0)?>" data-toggle="drawer-close">
<div class="media-body">
</div>
</a>
</li>
<?php getWidget('rc-default/site/menu/drawer-default',array('smenu'=>'0','limit'=>'2','link'=>'link','collid'=>'drawer-menu','accordion'=>'1','collapse'=>'1',))?>
<?php if ($d['layout']['main_type']!='postAllFeed'): ?>
<li class="table-view-cell table-view-divider small">포스트</li>
<li class="table-view-cell">
<a data-toggle="goMypage" data-target="#page-post-allpost" data-start="#page-main" data-title="최신 포스트" data-url="/post">
<span class="badge badge-default badge-inverted"><?php echo $my['num_post']?number_format($my['num_post']):'' ?></span>
<div class="media-body">
최신 포스트
</div>
</a>
</li>
<?php endif; ?>
<?php if ($my['uid']): ?>
<li class="table-view-cell table-view-divider small">내 보관함</li>
<?php if ($d['post']['writeperm']): ?>
<li class="table-view-cell">
<a data-toggle="goMypage" data-target="#page-post-mypost" data-start="#page-main" data-title="내 포스트" data-url="<?php echo RW('mod=dashboard&page=post')?>">
<span class="badge badge-default badge-inverted"><?php echo $my['num_post']?number_format($my['num_post']):'' ?></span>
<div class="media-body">
내 포스트
</div>
</a>
</li>
<?php endif; ?>
<li class="table-view-cell">
<a data-toggle="goMypage" data-target="#page-post-mylist" data-start="#page-main" data-title="내 리스트" data-url="<?php echo RW('mod=dashboard&page=list')?>">
<span class="badge badge-default badge-inverted"><?php echo $my['num_list']?number_format($my['num_list']):'' ?></span>
<div class="media-body">
내 리스트
</div>
</a>
</li>
<li class="table-view-cell">
<a data-toggle="goMypage" data-target="#page-post-saved" data-start="#page-main" data-title="나중에 볼 포스트" data-url="<?php echo RW('mod=dashboard&page=saved')?>">
<span class="badge badge-default badge-inverted"></span>
<div class="media-body">
나중에 볼 포스트
</div>
</a>
</li>
<li class="table-view-cell">
<a data-toggle="goMypage" data-target="#page-post-liked" data-start="#page-main" data-title="좋아요 한 포스트">
<span class="badge badge-default badge-inverted"></span>
<div class="media-body">
좋아요 한 포스트
</div>
</a>
</li>
<?php endif; ?>
<?php if ($my['admin']): ?>
<li class="table-view-cell table-view-divider small">관리자 전용</li>
<li class="table-view-cell">
<a data-href="<?php echo $g['s'].'/?r='.$r.'&amp;layoutPage=settings&prelayout=rc-starter/blank' ?>" data-toggle="drawer-close">
레이아웃 편집
</a>
</li>
<li class="table-view-cell">
<a data-href="<?php echo $g['s'].'/?r='.$r.'&amp;layoutPage=system&prelayout=rc-starter/blank' ?>" data-toggle="drawer-close" data-text="업데이트를 확인하는 중..">
시스템 정보
</a>
</li>
<?php endif; ?>
</ul>
</div>

Some files were not shown because too many files have changed in this diff Show More