필요 는거 삭제
@@ -1,2 +0,0 @@
|
||||
<?php
|
||||
include_once('../../common.php');
|
||||
@@ -1,232 +0,0 @@
|
||||
# rd.laser 테마 수정 이력
|
||||
|
||||
> 프로젝트: `E:\project\cafe24_laser`
|
||||
> 테마 경로: `theme/rd.laser`
|
||||
> 작업 목적: PC 전용 고정 레이아웃 구현 + 모바일 반응형 제거 + 게시판/메뉴/서브타이틀 정상화
|
||||
|
||||
---
|
||||
|
||||
## 핵심 개념 (다음 작업 시 참고)
|
||||
|
||||
### 이 사이트의 레이아웃 구조
|
||||
```
|
||||
head.sub.php → HTML <head> 태그, viewport, CSS/JS 로드
|
||||
head.php → 헤더 출력 (메뉴 + 유동형 광고 + 서브타이틀)
|
||||
└ rb.layout_hd/lwd_laser/header.php → 헤더 레이아웃 선택
|
||||
└ skin/nav/lwd_laser/nav.skin.php → 실제 메뉴 HTML/CSS/JS
|
||||
tail.php → 푸터 출력 + sub-page-container 닫는 태그
|
||||
```
|
||||
|
||||
### PC 고정 레이아웃 원리
|
||||
- `<meta name="viewport" content="width=1280, ...">` → 모바일에서도 1280px 기준으로 렌더링
|
||||
- `body { min-width: 1280px }` → body 최소 너비 고정 (html에 걸면 안 됨 - 아래 주의사항 참고)
|
||||
- 헤더 `position: static` (fixed 아님) → 스크롤 시 헤더도 같이 올라감 (laser.or.kr 방식)
|
||||
|
||||
### 주의사항 - html vs body min-width
|
||||
```
|
||||
❌ html { min-width: 1280px }
|
||||
→ html이 스크롤 컨테이너가 되어 position:fixed 헤더가 viewport 기준이 아닌
|
||||
html 기준으로 고정됨 → 가로 스크롤 시 헤더/메뉴가 따라오지 않음
|
||||
|
||||
✅ body { min-width: 1280px }
|
||||
→ 브라우저 viewport 기준으로 동작, 가로 스크롤 정상
|
||||
```
|
||||
|
||||
### 게시판 스킨 CSS 로드 방식
|
||||
그누보드는 board 스킨 CSS를 자동 로드하지 않음.
|
||||
각 스킨의 `list.skin.php`, `view.skin.php`, `write.skin.php` 상단에 직접 추가해야 함:
|
||||
```php
|
||||
$_skin_url = G5_THEME_URL . '/skin/board/스킨폴더명';
|
||||
add_stylesheet('<link rel="stylesheet" href="' . $_skin_url . '/style.css?ver=' . G5_SERVER_TIME . '">', 0);
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 요청별 수정 내용
|
||||
|
||||
---
|
||||
|
||||
### [요청 1] 모바일 반응형 전부 제거 → PC 전용
|
||||
|
||||
**문제:** 모바일 미디어쿼리가 PC 레이아웃을 깨뜨림
|
||||
|
||||
**수정 파일:**
|
||||
| 파일 | 변경 내용 |
|
||||
|------|-----------|
|
||||
| `rb.css/mobile.css` | `@media (max-width:1024px)` 블록 전체 제거 |
|
||||
| `rb.css/custom.css` | `@media all and (max-width:1024px)` 블록 전체 제거 |
|
||||
| `rb.layout/laser/style.css` | `@media (max-width:768px)`, `@media (max-width:480px)` 제거 |
|
||||
| `skin/board/journal/css/style.css` | 모바일 미디어쿼리 제거 |
|
||||
| `skin/board/coverage/css/style.css` | 모바일 미디어쿼리 제거 |
|
||||
| `skin/board/interview,newsfocus1,2,newtech,photonews,newproduct,notice,rb.bbs,rb.bbs_three_column_layout/css/style.css` | 모바일 미디어쿼리 제거 |
|
||||
| `skin/page/greeting,greeting_new,lasertech,lasertech_new,moldjournal,moldjournal_new/css/style.css` | 모바일 미디어쿼리 제거 |
|
||||
| `rb.layout,rb.layout_ft,rb.layout_hd` 하위 모든 `style.css` (약 30개) | 모바일 미디어쿼리 제거 |
|
||||
| `rb.custom` 하위 모든 `module.css` (약 10개) | 모바일 미디어쿼리 제거 |
|
||||
| `css/custom_header.css` | 모바일 패널/오버레이/GNB 스타일 제거 |
|
||||
| `skin/nav/lwd_laser/style.css` | 모바일 미디어쿼리 제거 |
|
||||
| `skin/nav/lwd_laser_nohp/style.css` | 모바일 미디어쿼리 제거 |
|
||||
|
||||
---
|
||||
|
||||
### [요청 2] 메뉴 스킨 모바일 코드 제거
|
||||
|
||||
**수정 파일:**
|
||||
| 파일 | 변경 내용 |
|
||||
|------|-----------|
|
||||
| `skin/nav/lwd_laser/nav.skin.php` | 모바일 타입 설정 변수, 햄버거 버튼, 모바일 패널 HTML, 모바일 메뉴 JS 제거 |
|
||||
| `skin/nav/lwd_laser_nohp/nav.skin.php` | 동일 |
|
||||
|
||||
---
|
||||
|
||||
### [요청 3] 가로 스크롤 안 되는 문제 해결
|
||||
|
||||
**원인:** `html { min-width: 1280px }` → html이 스크롤 컨테이너가 되어 fixed 헤더가 따라오지 않음
|
||||
|
||||
**수정 파일:**
|
||||
| 파일 | 변경 내용 |
|
||||
|------|-----------|
|
||||
| `css/style_prestige_1.css` | `html { min-width: 1280px }` → `body { min-width: 1280px }` 로 이동 |
|
||||
| `rb.css/custom.css` | 동작하지 않던 `body.pc-only-layout { min-width }` 제거 |
|
||||
|
||||
---
|
||||
|
||||
### [요청 4] 게시판 스킨 CSS 미적용 문제
|
||||
|
||||
**원인:** `rb.board.core.*` 스킨 폴더에 CSS 파일이 없고, 로드 코드도 없었음
|
||||
|
||||
**수정 파일:**
|
||||
| 파일 | 변경 내용 |
|
||||
|------|-----------|
|
||||
| `skin/board/rb.board.core.journal/style.css` | `journal/css/style.css` 복사하여 생성 |
|
||||
| `skin/board/rb.board.core.journal/list.skin.php` | 상단에 `add_stylesheet` CSS 로드 코드 추가 |
|
||||
| `skin/board/rb.board.core.journal/view.skin.php` | 동일 |
|
||||
| `skin/board/rb.board.core.journal/write.skin.php` | 동일 |
|
||||
| `skin/board/rb.board.core.coverage/style.css` | `coverage/css/style.css` 복사하여 생성 |
|
||||
| `skin/board/rb.board.core.coverage/list.skin.php` | CSS 로드 코드 추가 |
|
||||
| `skin/board/rb.board.core.coverage/view.skin.php` | 동일 |
|
||||
| `skin/board/rb.board.core.coverage/write.skin.php` | 동일 |
|
||||
| `skin/board/rb.board.core/style.css` | journal style.css 복사하여 생성 |
|
||||
| `skin/board/rb.board.core/list.skin.php` | CSS 로드 코드 추가 |
|
||||
| `skin/board/rb.board.core/view.skin.php` | 동일 |
|
||||
| `skin/board/rb.board.core/write.skin.php` | 동일 |
|
||||
|
||||
**추가 수정:**
|
||||
- `journal/css/style.css`, `coverage/css/style.css` 의 `.sub-page-container { padding-top: 0px; !important }` 문법 오류 수정 (`!important` 위치 잘못됨)
|
||||
|
||||
---
|
||||
|
||||
### [요청 5] 헤더 fixed → 스크롤과 함께 이동 (laser.or.kr 방식)
|
||||
|
||||
**원인:** `.lwd-header-wrap { position: fixed }` 로 헤더가 화면에 고정되어 있었음
|
||||
|
||||
**수정 파일:**
|
||||
| 파일 | 변경 내용 |
|
||||
|------|-----------|
|
||||
| `skin/nav/lwd_laser/style.css` | `.lwd-header-wrap` 에서 `position: fixed; top: 0; left: 0; z-index: 1000` 제거 |
|
||||
| `css/style_prestige_1.css` | `body { padding-top: 270px }` → `padding-top: 0` 으로 변경 |
|
||||
| `css/style_prestige_1.css` | `.sidebar-inner { top: 290px }` → `top: 20px` 으로 변경 |
|
||||
| `skin/nav/lwd_laser/nav.skin.php` | 헤더 높이 동적 계산 JS (`adjustBodyPadding`) 제거 |
|
||||
| `skin/board/journal/css/style.css` | PDF viewer header `top: 80px` → `top: 0` |
|
||||
| `skin/board/rb.board.core.journal/style.css` | 동일 |
|
||||
|
||||
---
|
||||
|
||||
### [요청 6] 서브타이틀 함수 독립화 (게시판에서 서브타이틀 안 나오는 문제)
|
||||
|
||||
**원인:**
|
||||
- `get_sub_title()` 함수가 `nav.skin.php`의 `split_menu_name()`에 의존
|
||||
- 게시판 페이지에서 함수 로드 순서 문제로 `split_menu_name` 미정의 오류 발생 가능
|
||||
- `$bo_table` 변수를 `$_GET`에서만 읽어서 pretty URL 환경에서 값이 없었음
|
||||
|
||||
**수정 파일:**
|
||||
| 파일 | 변경 내용 |
|
||||
|------|-----------|
|
||||
| `head.php` | `get_sub_title()`, `get_bo_table_from_url_regex()` 를 `function_exists()` 체크로 감싸 중복 선언 방지 |
|
||||
| `head.php` | `split_menu_name` 없어도 동작하는 `get_menu_name_ko()` 독립 함수 추가 |
|
||||
| `head.php` | `$bo_table` 변수를 그누보드 전역변수 우선 사용, 없으면 `$_GET` 폴백 |
|
||||
|
||||
---
|
||||
|
||||
### [요청 7] 유동형 광고 - 화면 절반 이하로 좁아지면 자동 숨김
|
||||
|
||||
**원인:** 화면이 좁아지면 광고가 콘텐츠 영역과 겹침
|
||||
|
||||
**계산 기준:**
|
||||
```
|
||||
콘텐츠 max-width(1400) + 광고 너비(140) × 2 + 여백(20) × 2 = 1720px
|
||||
→ 1720px 이하에서 광고 숨김
|
||||
```
|
||||
|
||||
**수정 파일:**
|
||||
| 파일 | 변경 내용 |
|
||||
|------|-----------|
|
||||
| `css/floating_ads.css` | 파일 끝에 `@media (max-width: 1720px) { .floating-ad { display: none !important; } }` 추가 |
|
||||
|
||||
---
|
||||
|
||||
### [요청 8] PC 고정 화면 크기 설정 (모바일에서 PC 레이아웃 그대로 보기)
|
||||
|
||||
**수정 파일:**
|
||||
| 파일 | 변경 내용 |
|
||||
|------|-----------|
|
||||
| `head.sub.php` | viewport를 `width=1280, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no` 로 변경 |
|
||||
|
||||
---
|
||||
|
||||
### [요청 9] 게시판 sticky 사이드바 배경 이동 문제
|
||||
|
||||
**원인:** `position: sticky` 사이드바에 `align-self: flex-start` 누락
|
||||
flex 컨테이너에서 sticky가 동작하려면 반드시 필요
|
||||
|
||||
**수정 파일:**
|
||||
| 파일 | 변경 내용 |
|
||||
|------|-----------|
|
||||
| `skin/board/journal/css/style.css` | `.layout-sidebar-left, .layout-sidebar-right` 에 `align-self: flex-start` 추가 |
|
||||
| `skin/board/coverage/css/style.css` | 동일 |
|
||||
| `skin/board/interview,newsfocus1,2,newtech,photonews,newproduct,notice,rb.bbs_three_column_layout/css/style.css` | 동일 (8개 파일) |
|
||||
|
||||
---
|
||||
|
||||
## 현재 최종 설정 요약
|
||||
|
||||
```
|
||||
viewport : width=1280 고정 (모바일에서도 PC 레이아웃)
|
||||
body : min-width: 1280px, padding-top: 0
|
||||
헤더 : position: static (스크롤과 함께 이동)
|
||||
유동형 광고 : 화면 1720px 이하에서 자동 숨김
|
||||
게시판 CSS : 각 skin.php 상단에서 add_stylesheet로 직접 로드
|
||||
서브타이틀 : head.php에서 독립 함수로 처리 (nav.skin.php 의존 없음)
|
||||
모바일 코드 : 전체 제거 (미디어쿼리, 햄버거 메뉴, 모바일 패널 등)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 파일 구조 참고
|
||||
|
||||
```
|
||||
theme/rd.laser/
|
||||
├── head.php ← 헤더 출력 (메뉴+광고+서브타이틀)
|
||||
├── head.sub.php ← HTML head 태그 (viewport, CSS/JS)
|
||||
├── tail.php ← 푸터 출력
|
||||
├── css/
|
||||
│ ├── style_prestige_1.css ← 전체 레이아웃 기본 스타일
|
||||
│ └── floating_ads.css ← 유동형 광고 스타일
|
||||
├── rb.css/
|
||||
│ ├── style.css ← 그누보드 공통 스타일
|
||||
│ ├── mobile.css ← 모바일 스타일 (현재 내용 비움)
|
||||
│ └── custom.css ← 커스텀 스타일
|
||||
├── rb.layout_hd/lwd_laser/
|
||||
│ └── header.php ← 헤더 레이아웃 선택
|
||||
└── skin/
|
||||
├── nav/lwd_laser/
|
||||
│ ├── nav.skin.php ← 메뉴 HTML/JS
|
||||
│ └── style.css ← 메뉴 스타일
|
||||
└── board/
|
||||
├── rb.board.core.journal/
|
||||
│ ├── style.css ← 저널 게시판 스타일
|
||||
│ ├── list.skin.php ← 목록 (CSS 로드 포함)
|
||||
│ ├── view.skin.php ← 뷰 (CSS 로드 포함)
|
||||
│ └── write.skin.php ← 쓰기 (CSS 로드 포함)
|
||||
├── rb.board.core.coverage/ ← 동일 구조
|
||||
└── rb.board.core/ ← 동일 구조
|
||||
```
|
||||
@@ -1,15 +0,0 @@
|
||||
<?php
|
||||
// 1. 💡 [핵심 수정] 사이트 전체 환경을 불러옵니다.
|
||||
include_once('../../../common.php');
|
||||
|
||||
// 2. 💡 [핵심] 관리자 페이지에서는 테마의 헤더/푸터를 사용하지 않도록 분기 처리
|
||||
if (defined('G5_IS_ADMIN') && G5_IS_ADMIN) {
|
||||
// 관리자 페이지에서는 원본 파일을 그대로 실행하여 관리자 전용 레이아웃을 따릅니다.
|
||||
include_once(G5_BBS_PATH.'/list.php');
|
||||
} else {
|
||||
// 일반 사용자 페이지에서는 우리 테마의 레이아웃을 적용합니다.
|
||||
include_once(G5_THEME_PATH.'/head.php');
|
||||
include_once(G5_BBS_PATH.'/list.php');
|
||||
include_once(G5_THEME_PATH.'/tail.php');
|
||||
}
|
||||
?>
|
||||
@@ -1,53 +0,0 @@
|
||||
@charset "utf-8";
|
||||
|
||||
/* ==========================================================================
|
||||
헤더 메뉴 커스텀 스타일 (Header Menu Custom Style)
|
||||
========================================================================== */
|
||||
|
||||
/* 1. 전체 메뉴 폰트 설정 (글꼴, 기본 색상) */
|
||||
.main-header .gnb .gnb-list a {
|
||||
/* font-family: 'Noto Sans KR', sans-serif; */ /* 💡 [수정] 관리자 설정 폰트 사용을 위해 주석 처리 */
|
||||
color: #333;
|
||||
}
|
||||
|
||||
/* 메인 페이지의 투명 헤더 상태일 때의 글자 색상 */
|
||||
.main-header.is-transparent .gnb .gnb-list a {
|
||||
color: #333;
|
||||
}
|
||||
|
||||
|
||||
/* 2. 1차 메뉴와 2차 메뉴 폰트 크기 및 굵기 동일하게 설정 */
|
||||
.main-header .gnb .gnb-list .gnb-link,
|
||||
.main-header .gnb .sub-menu a {
|
||||
font-size: 18px;
|
||||
font-weight: 500;
|
||||
}
|
||||
|
||||
|
||||
/* 3. 메뉴에 마우스를 올렸을 때(hover) 스타일 */
|
||||
.main-header .gnb .gnb-list > .gnb-item:hover > .gnb-link,
|
||||
.main-header .gnb .sub-menu li:hover > a {
|
||||
color: #1768aa;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/* 메인 페이지의 투명 헤더 상태에서 마우스를 올렸을 때 */
|
||||
.main-header.is-transparent .gnb .gnb-list > .gnb-item:hover > .gnb-link {
|
||||
color: #c8e6c9;
|
||||
}
|
||||
|
||||
/* 4. 2차 메뉴(서브메뉴) 배경 및 패딩 조절 */
|
||||
.main-header .gnb .sub-menu {
|
||||
background-color: rgba(255, 255, 255, 0.95);
|
||||
padding: 10px 0;
|
||||
}
|
||||
|
||||
.main-header .gnb .sub-menu a {
|
||||
padding: 10px 20px;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
PC/Mobile 표시 제어
|
||||
========================================================================== */
|
||||
.mobile-only { display: none !important; }
|
||||
.pc-only { display: block !important; }
|
||||
@@ -1,456 +0,0 @@
|
||||
@charset "utf-8";
|
||||
|
||||
/* 초기화 */
|
||||
html {overflow-y:scroll}
|
||||
body {margin:0;padding:0;font-size:0.75em;font-family:'Malgun Gothic', dotum, sans-serif;background:#fff}
|
||||
html, h1, h2, h3, h4, h5, h6, form, fieldset, img {margin:0;padding:0;border:0}
|
||||
h1, h2, h3, h4, h5, h6 {font-size:1em;font-family:'Malgun Gothic', dotum, sans-serif}
|
||||
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {display:block}
|
||||
|
||||
ul, dl,dt,dd {margin:0;padding:0;list-style:none}
|
||||
legend {position:absolute;margin:0;padding:0;font-size:0;line-height:0;text-indent:-9999em;overflow:hidden}
|
||||
label, input, button, select, img {vertical-align:middle;font-size:1em}
|
||||
input, button {margin:0;padding:0;font-family:'Malgun Gothic', dotum, sans-serif;font-size:1em}
|
||||
input[type="submit"] {cursor:pointer}
|
||||
button {cursor:pointer}
|
||||
|
||||
textarea, select {font-family:'Malgun Gothic', dotum, sans-serif;font-size:1em}
|
||||
select {margin:0}
|
||||
p {margin:0;padding:0;word-break:break-all}
|
||||
hr {display:none}
|
||||
pre {overflow-x:scroll;font-size:1.1em}
|
||||
a {color:#000;text-decoration:none}
|
||||
|
||||
*, :after, :before {
|
||||
-webkit-box-sizing:border-box;
|
||||
-moz-box-sizing:border-box;
|
||||
box-sizing:border-box;
|
||||
}
|
||||
|
||||
input[type=text],input[type=password], textarea {
|
||||
-webkit-transition:all 0.30s ease-in-out;
|
||||
-moz-transition:all 0.30s ease-in-out;
|
||||
-ms-transition:all 0.30s ease-in-out;
|
||||
-o-transition:all 0.30s ease-in-out;
|
||||
outline:none;
|
||||
}
|
||||
|
||||
input[type=text]:focus,input[type=password]:focus, textarea:focus,select:focus {
|
||||
-webkit-box-shadow:0 0 5px #9ed4ff;
|
||||
-moz-box-shadow:0 0 5px #9ed4ff;
|
||||
box-shadow:0 0 5px #9ed4ff;
|
||||
border:1px solid #558ab7 !important;
|
||||
}
|
||||
|
||||
.placeholdersjs {color:#aaa !important}
|
||||
|
||||
/* 레이아웃 크기 지정 */
|
||||
#hd, #wrapper, #ft {min-width:1280px}
|
||||
|
||||
#hd_pop,
|
||||
#hd_wrapper,
|
||||
#tnb .inner,
|
||||
|
||||
#gnb .gnb_wrap,
|
||||
#container_wr,
|
||||
#ft_wr {width:1280px}
|
||||
|
||||
/* 팝업레이어 */
|
||||
#hd_pop {z-index:1000;position:relative;margin:0 auto;height:0}
|
||||
#hd_pop h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
.hd_pops {position:absolute;border:1px solid #e9e9e9;background:#fff}
|
||||
.hd_pops img {max-width:100%}
|
||||
.hd_pops_con {}
|
||||
.hd_pops_footer {padding:0;background:#000;color:#fff;text-align:left;position:relative}
|
||||
.hd_pops_footer:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.hd_pops_footer button {padding:10px;border:0;color:#fff}
|
||||
.hd_pops_footer .hd_pops_reject {background:#000;text-align:left}
|
||||
.hd_pops_footer .hd_pops_close {background:#393939;position:absolute;top:0;right:0}
|
||||
|
||||
/* 상단 레이아웃 */
|
||||
#hd {background:#212020}
|
||||
#hd_h1 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
|
||||
#tnb {border-bottom:1px solid #383838;margin:0 auto}
|
||||
#tnb:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#tnb .inner {margin:0 auto}
|
||||
|
||||
#hd_wrapper {position:relative;margin:0 auto;height:140px;zoom:1}
|
||||
#hd_wrapper:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
|
||||
#logo {float:left;padding:30px 0 0}
|
||||
|
||||
.hd_sch_wr {float:left;padding:30px 0;width:445px;margin-left:65px}
|
||||
#hd_sch h3 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#hd_sch {border-radius:30px;overflow:hidden}
|
||||
#hd_sch #sch_stx {float:left;width:385px;height:45px;padding-left:10px;border-radius:30px 0 0 30px;background:#2c2c2c;border:0;border-right:0;font-size:1.25em;color:#fff}
|
||||
#hd_sch #sch_submit {float:left;width:60px;height:45px;border:0;background:#2c2c2c;color:#fff;border-radius:0 30px 30px 0;cursor:pointer;font-size:16px}
|
||||
|
||||
#hd_define {float:left}
|
||||
#hd_define:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#hd_define li {float:left;font-size:1.083em;line-height:14px;border-right:1px solid #4a4a4a;position:relative;text-align:center;margin:15px 10px 15px 0;padding-right:10px}
|
||||
#hd_define li:last-child {padding-right:0;margin-right:0;border-right:0}
|
||||
#hd_define li a {display:inline-block;color:#919191}
|
||||
#hd_define li.active a {color:#fff}
|
||||
|
||||
|
||||
#hd_qnb {float:right;text-align:right}
|
||||
#hd_qnb:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#hd_qnb li {float:left;font-size:1.083em;line-height:14px;border-right:1px solid #4a4a4a;position:relative;text-align:center;margin:15px 10px 15px 0;padding-right:10px}
|
||||
#hd_qnb li:last-child {padding-right:0;margin-right:0;border-right:0}
|
||||
#hd_qnb li span {display:block;margin-top:5px;font-size:0.92em}
|
||||
#hd_qnb li a {display:inline-block;color:#919191}
|
||||
#hd_qnb .visit .visit-num {display:inline-block;line-height:16px;padding:0 5px;margin-left:5px;border-radius:10px;background:#da22f5;color:#fff;font-size:10px}
|
||||
|
||||
|
||||
.hd_login {position:absolute;right:0;top:60px}
|
||||
.hd_login li {float:left;margin:0 5px;border-left:1px solid #616161;padding-left:10px;line-height:13px}
|
||||
.hd_login li:first-child {border-left:0}
|
||||
.hd_login a {color:#fff}
|
||||
|
||||
|
||||
/* 메인메뉴 */
|
||||
#gnb {position:relative;background:#fff}
|
||||
#gnb > h2 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#gnb .gnb_wrap {margin:0 auto;position:relative}
|
||||
#gnb .gnb_wrap:hover, #gnb .gnb_wrap:focus, #gnb .gnb_wrap:active{z-index:3}
|
||||
#gnb #gnb_1dul {font-size:1.083em;padding:0;border-bottom:1px solid #e0e2e5;zoom:1}
|
||||
#gnb ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#gnb .gnb_1dli {float:left;line-height:55px;padding:0px;position:relative}
|
||||
#gnb .gnb_1dli:hover > a {color:#3a8afd;
|
||||
-webkit-transition:background-color 2s ease-out;
|
||||
-moz-transition:background-color 0.3s ease-out;
|
||||
-o-transition:background-color 0.3s ease-out;
|
||||
transition:background-color 0.3s ease-out}
|
||||
|
||||
.gnb_1dli .bg {position:absolute;top:24px;right:8px;display:inline-block;width:10px;height:10px;overflow:hidden;background:url('../img/gnb_bg2.gif') no-repeat 50% 50%;text-indent:-999px}
|
||||
.gnb_1da {display:block;font-weight:bold;padding:0 15px;color:#080808;text-decoration:none}
|
||||
.gnb_1dli.gnb_al_li_plus .gnb_1da{padding-right:25px}
|
||||
.gnb_2dli:first-child {border:0}
|
||||
.gnb_2dul {display:none;position:absolute;top:54px;min-width:140px;padding-top:2px}
|
||||
.gnb_2dul .gnb_2dul_box {border:1px solid #e0e2e5;border-top:0;padding:0;
|
||||
-webkit-box-shadow:0px 1px 5px rgba(97, 97, 97, 0.2);
|
||||
-moz-box-shadow:0px 1px 5px rgba(97, 97, 97, 0.2);
|
||||
box-shadow:0px 1px 5px rgba(97, 97, 97, 0.2)}
|
||||
.gnb_2da {display:block;padding:0 10px;line-height:40px;background:#fff;color:#080808;text-align:left;text-decoration:none}
|
||||
a.gnb_2da:hover {color:#3a8afd;background:#f7f7f8;
|
||||
-moz-transition:all 0.3s ease-out;
|
||||
-o-transition:all 0.3s ease-out;
|
||||
transition:all 0.3s ease-out}
|
||||
|
||||
.gnb_1dli_air .gnb_2da {}
|
||||
.gnb_1dli_on .gnb_2da {}
|
||||
.gnb_2da:focus, .gnb_2da:hover {color:#fff}
|
||||
.gnb_1dli_over .gnb_2dul {display:block;left:0}
|
||||
.gnb_1dli_over2 .gnb_2dul {display:block;right:0}
|
||||
.gnb_wrap .gnb_empty {padding:10px 0;width:100%;text-align:center;line-height:2.7em;color:#080808}
|
||||
.gnb_wrap .gnb_empty a {color:#3a8afd;text-decoration:underline}
|
||||
.gnb_wrap .gnb_al_ul .gnb_empty, .gnb_wrap .gnb_al_ul .gnb_empty a {color:#555}
|
||||
|
||||
#gnb .gnb_menu_btn {background:#4158d1;color:#fff;width:50px;height:55px;border:0;vertical-align:top;font-size:18px}
|
||||
#gnb .gnb_close_btn {background:#fff;color:#b6b9bb;width:50px;height:50px;border:0;vertical-align:top;font-size:18px;position:absolute;top:0;right:0}
|
||||
#gnb .gnb_mnal {float:right;padding:0}
|
||||
|
||||
#gnb_all {display:none;position:absolute;border:1px solid #c5d6da;width:100%;background:#fff;z-index:1000;-webkit-box-shadow:0 2px 5px rgba(0,0,0,0.2);
|
||||
-moz-box-shadow:0 2px 5px rgba(0,0,0,0.2);
|
||||
box-shadow:0 2px 5px rgba(0,0,0,0.2)}
|
||||
#gnb_all h2 {font-size:1.3em;padding:15px 20px;border-bottom:1px solid #e7eeef}
|
||||
#gnb_all .gnb_al_ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#gnb_all .gnb_al_ul > li:nth-child(5n+1) {border-left:0}
|
||||
#gnb_all .gnb_al_li {float:left;width:20%;min-height:150px;padding:20px;border-left:1px solid #e7eeef}
|
||||
#gnb_all .gnb_al_li .gnb_al_a {font-size:1.2em;display:block;position:relative;margin-bottom:10px;font-weight:bold;color:#3a8afd}
|
||||
#gnb_all .gnb_al_li li {line-height:2em}
|
||||
#gnb_all .gnb_al_li li a {color:#555}
|
||||
#gnb_all_bg {display:none;background:rgba(0,0,0,0.1);width:100%;height:100%;position:fixed;left:0;top:0;z-index:999}
|
||||
|
||||
/* 중간 레이아웃 */
|
||||
#wrapper {}
|
||||
#container_wr:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#container_wr {margin:0 auto;zoom:1}
|
||||
#aside {float:right;width:235px;padding:0;height:100%;margin:20px 0 20px 20px}
|
||||
|
||||
#container {position:relative;float:left;min-height:500px;height:auto !important;margin:20px 0;font-size:1em;width:930px;zoom:1}
|
||||
#container:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#container_title {font-size:1.333em;margin:0 auto;font-weight:bold}
|
||||
#container_title span {margin:0 auto 10px;display:block;line-height:30px}
|
||||
|
||||
.lt_wr {width:32%}
|
||||
.lt_wr:nth-child(3n+1) {clear:both}
|
||||
.latest_wr {margin-bottom:20px}
|
||||
.latest_wr:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.latest_top_wr {margin:0 -10px 20px}
|
||||
.latest_top_wr:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
|
||||
/* 하단 레이아웃 */
|
||||
#ft {background:#212020;margin:0 auto;text-align:center}
|
||||
#ft h1 {position:absolute;font-size:0;line-height:0;overflow:hidden}
|
||||
#ft_wr {max-width:1240px;margin:0;padding:40px 0;position:relative;display:inline-block;text-align:left}
|
||||
#ft_wr:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#ft_wr .ft_cnt {width:25%;float:left;padding:0 20px}
|
||||
|
||||
#ft_link {text-align:left}
|
||||
#ft_link a {display:block;color:#fff;line-height:2em;font-weight:bold}
|
||||
#ft_company h2 {font-size:1.2em;margin-bottom:20px}
|
||||
#ft_company {font-weight:normal;color:#e3e3e3;line-height:2em}
|
||||
#ft_catch {margin:20px 0 10px}
|
||||
#ft_copy {text-align:center;width:1280px;margin:0 auto;padding:20px 0;color:#5b5b5b;font-size:0.92em;border-top:1px solid #383838}
|
||||
#top_btn {position:fixed;bottom:20px;right:20px;width:50px;height:50px;line-height:46px;border:2px solid #333;color:#333;text-align:center;font-size:15px;z-index:90;background:rgba(255,255,255,0.5)}
|
||||
#top_btn:hover {border-color:#3059c7;background:#3059c7;color:#fff}
|
||||
|
||||
/* 게시물 선택복사 선택이동 */
|
||||
#copymove {}
|
||||
#copymove .win_desc {text-align:center;display:block}
|
||||
#copymove .tbl_wrap {margin:20px}
|
||||
#copymove .win_btn {padding:0 20px 20px}
|
||||
.copymove_current {float:right;background:#ff3061;padding:5px;color:#fff;border-radius:3px}
|
||||
.copymove_currentbg {background:#f4f4f4}
|
||||
|
||||
/* 화면낭독기 사용자용 */
|
||||
#hd_login_msg {position:absolute;top:0;left:0;font-size:0;line-height:0;overflow:hidden}
|
||||
.msg_sound_only, .sound_only {display:inline-block !important;position:absolute;top:0;left:0;width:0;height:0;margin:0 !important;padding:0 !important;font-size:0;line-height:0;border:0 !important;overflow:hidden !important}
|
||||
|
||||
/* 본문 바로가기 */
|
||||
#skip_to_container a {z-index:100000;position:absolute;top:0;left:0;width:1px;height:1px;font-size:0;line-height:0;overflow:hidden}
|
||||
#skip_to_container a:focus, #skip_to_container a:active {width:100%;height:75px;background:#21272e;color:#fff;font-size:2em;font-weight:bold;text-align:center;text-decoration:none;line-height:3.3em}
|
||||
|
||||
/* ie6 이미지 너비 지정 */
|
||||
.img_fix {width:100%;height:auto}
|
||||
|
||||
/* 캡챠 자동등록(입력)방지 기본 -pc */
|
||||
#captcha {display:inline-block;position:relative}
|
||||
#captcha legend {position:absolute;margin:0;padding:0;font-size:0;line-height:0;text-indent:-9999em;overflow:hidden}
|
||||
#captcha #captcha_img {height:40px;border:1px solid #898989;vertical-align:top;padding:0;margin:0}
|
||||
#captcha #captcha_mp3 {margin:0;padding:0;width:40px;height:40px;border:0;background:transparent;vertical-align:middle;overflow:hidden;cursor:pointer;background:url('../../../img/captcha2.png') no-repeat;text-indent:-999px;border-radius:3px}
|
||||
#captcha #captcha_reload {margin:0;padding:0;width:40px;height:40px;border:0;background:transparent;vertical-align:middle;overflow:hidden;cursor:pointer;background:url('../../../img/captcha2.png') no-repeat 0 -40px;text-indent:-999px;border-radius:3px}
|
||||
#captcha #captcha_key {margin:0 0 0 3px;padding:0 5px;width:90px;height:40px;border:1px solid #ccc;background:#fff;font-size:1.333em;font-weight:bold;text-align:center;border-radius:3px;vertical-align:top}
|
||||
#captcha #captcha_info {display:block;margin:5px 0 0;font-size:0.95em;letter-spacing:-0.1em}
|
||||
|
||||
/* 캡챠 자동등록(입력)방지 기본 - mobile */
|
||||
#captcha.m_captcha audio {display:block;margin:0 0 5px;width:187px}
|
||||
#captcha.m_captcha #captcha_img {width:160px;height:60px;border:1px solid #e9e9e9;margin-bottom:3px;margin-top:5px;display:block}
|
||||
#captcha.m_captcha #captcha_reload {position:static;margin:0;padding:0;width:40px;height:40px;border:0;background:transparent;vertical-align:middle;overflow:hidden;cursor:pointer;background:url('../../../img/captcha2.png') no-repeat 0 -40px;text-indent:-999px}
|
||||
#captcha.m_captcha #captcha_reload span {display:none}
|
||||
#captcha.m_captcha #captcha_key {margin:0;padding:0 5px;width:115px;height:29px;border:1px solid #b8c9c2;background:#f7f7f7;font-size:1.333em;font-weight:bold;text-align:center;line-height:29px;margin-left:3px}
|
||||
#captcha.m_captcha #captcha_info {display:block;margin:5px 0 0;font-size:0.95em;letter-spacing:-0.1em}
|
||||
#captcha.m_captcha #captcha_mp3 {width:31px;height:31px;background:url('../../../img/captcha2.png') no-repeat 0 0 ; vertical-align:top;overflow:hidden;cursor:pointer;text-indent:-9999px;border:none}
|
||||
|
||||
/* ckeditor 단축키 */
|
||||
.cke_sc {margin:0 0 5px;text-align:right}
|
||||
.btn_cke_sc {display:inline-block;padding:0 10px;height:23px;border:1px solid #ccc;background:#fafafa;color:#000;text-decoration:none;line-height:1.9em;vertical-align:middle;cursor:pointer}
|
||||
.cke_sc_def {margin:0 0 5px;padding:10px;border:1px solid #ccc;background:#f7f7f7;text-align:center}
|
||||
.cke_sc_def dl {margin:0 0 5px;text-align:left;zoom:1}
|
||||
.cke_sc_def dl:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.cke_sc_def dt, .cke_sc_def dd {float:left;margin:0;padding:5px 0;border-bottom:1px solid #e9e9e9}
|
||||
.cke_sc_def dt {width:20%;font-weight:bold}
|
||||
.cke_sc_def dd {width:30%}
|
||||
|
||||
/* ckeditor 태그 기본값 */
|
||||
#bo_v_con ul {display:block;list-style-type:disc;margin-top:1em;margin-bottom:1em;margin-left:0;margin-right:0;padding-left:40px}
|
||||
#bo_v_con ol {display:block;list-style-type:decimal;margin-top:1em;margin-bottom:1em;margin-left:0;margin-right:0;padding-left:40px}
|
||||
#bo_v_con li {display:list-item}
|
||||
|
||||
/* 버튼 */
|
||||
a.btn,.btn {line-height:35px;height:35px;padding:0 10px;text-align:center;font-weight:bold;border:0;font-size:1.4em;
|
||||
-webkit-transition:background-color 0.3s ease-out;
|
||||
-moz-transition:background-color 0.3s ease-out;
|
||||
-o-transition:background-color 0.3s ease-out;
|
||||
transition:background-color 0.3s ease-out}
|
||||
|
||||
a.btn01 {display:inline-block;padding:7px;border:1px solid #ccc;background:#fafafa;color:#000;text-decoration:none;vertical-align:middle}
|
||||
a.btn01:focus, a.btn01:hover {text-decoration:none}
|
||||
button.btn01 {display:inline-block;margin:0;padding:7px;border:1px solid #ccc;background:#fafafa;color:#000;text-decoration:none}
|
||||
a.btn02 {display:inline-block;padding:7px;border:1px solid #3b3c3f;background:#4b545e;color:#fff;text-decoration:none;vertical-align:middle}
|
||||
a.btn02:focus, .btn02:hover {text-decoration:none}
|
||||
button.btn02 {display:inline-block;margin:0;padding:7px;border:1px solid #3b3c3f;background:#4b545e;color:#fff;text-decoration:none}
|
||||
|
||||
.btn_confirm {text-align:right} /* 서식단계 진행 */
|
||||
|
||||
.btn_submit {border:0;background:#3a8afd;color:#fff;cursor:pointer;border-radius:3px}
|
||||
.btn_submit:hover {background:#2375eb}
|
||||
.btn_close {border:1px solid #dcdcdc;cursor:pointer;border-radius:3px;background:#fff}
|
||||
a.btn_close {text-align:center;line-height:50px}
|
||||
|
||||
a.btn_cancel {display:inline-block;background:#969696;color:#fff;text-decoration:none;vertical-align:middle}
|
||||
button.btn_cancel {display:inline-block;background:#969696;color:#fff;text-decoration:none;vertical-align:middle}
|
||||
.btn_cancel:hover {background:#aaa}
|
||||
a.btn_frmline, button.btn_frmline {display:inline-block;width:128px;padding:0 5px;height:40px;border:0;background:#434a54;border-radius:3px;color:#fff;text-decoration:none;vertical-align:top} /* 우편번호검색버튼 등 */
|
||||
a.btn_frmline {}
|
||||
button.btn_frmline {font-size:1em}
|
||||
|
||||
/* 게시판용 버튼 */
|
||||
a.btn_b01,.btn_b01 {display:inline-block;color:#bababa;text-decoration:none;vertical-align:middle;border:0;background:transparent}
|
||||
.btn_b01:hover, .btn_b01:hover {color:#000}
|
||||
a.btn_b02,.btn_b02 {display:inline-block;background:#253dbe;padding:0 10px;color:#fff;text-decoration:none;border:0;vertical-align:middle}
|
||||
a.btn_b02:hover, .btn_b02:hover {background:#0025eb}
|
||||
a.btn_b03, .btn_b03 {display:inline-block;background:#fff;border:1px solid #b9bdd3;color:#646982;text-decoration:none;vertical-align:middle}
|
||||
a.btn_b03:hover, .btn_b03:hover {background:#ebedf6}
|
||||
a.btn_b04, .btn_b04 {display:inline-block;background:#fff;border:1px solid #ccc;color:#707070;text-decoration:none;vertical-align:middle}
|
||||
a.btn_b04:hover, .btn_b04:hover {color:#333;background:#f9f9f9}
|
||||
a.btn_admin,.btn_admin {display:inline-block;color:#d13f4a;text-decoration:none;vertical-align:middle} /* 관리자 전용 버튼 */
|
||||
.btn_admin:hover, a.btn_admin:hover {color:#ff3746}
|
||||
|
||||
|
||||
/* 기본테이블 */
|
||||
.tbl_wrap table {width:100%;border-collapse:collapse;border-spacing:0 5px;background:#fff;border-top:1px solid #ececec;border-bottom:1px solid #ececec}
|
||||
.tbl_wrap caption {padding:10px 0;font-weight:bold;text-align:left}
|
||||
.tbl_head01 {margin:0 0 10px}
|
||||
.tbl_head01 caption {padding:0;font-size:0;line-height:0;overflow:hidden}
|
||||
.tbl_head01 thead th {padding:20px 0;font-weight:normal;text-align:center;border-bottom:1px solid #ececec;height:40px}
|
||||
.tbl_head01 thead th input {vertical-align:top} /* middle 로 하면 게시판 읽기에서 목록 사용시 체크박스 라인 깨짐 */
|
||||
.tbl_head01 tfoot th, .tbl_head01 tfoot td {padding:10px 0;border-top:1px solid #c1d1d5;border-bottom:1px solid #c1d1d5;background:#d7e0e2;text-align:center}
|
||||
.tbl_head01 tbody th {padding:8px 0;border-bottom:1px solid #e8e8e8}
|
||||
.tbl_head01 td {color:#666;padding:10px 5px;border-top:1px solid #ecf0f1;border-bottom:1px solid #ecf0f1;line-height:1.4em;height:60px;word-break:break-all}
|
||||
.tbl_head01 tbody tr:hover td {background:#fafafa}
|
||||
.tbl_head01 a:hover {text-decoration:underline}
|
||||
|
||||
.tbl_head02 {margin:0 0 10px}
|
||||
.tbl_head02 caption {padding:0;font-size:0;line-height:0;overflow:hidden}
|
||||
.tbl_head02 thead th {padding:5px 0;border-top:1px solid #d1dee2;border-bottom:1px solid #d1dee2;background:#e5ecef;color:#383838;font-size:0.95em;text-align:center;letter-spacing:-0.1em}
|
||||
.tbl_head02 thead a {color:#383838}
|
||||
.tbl_head02 thead th input {vertical-align:top} /* middle 로 하면 게시판 읽기에서 목록 사용시 체크박스 라인 깨짐 */
|
||||
.tbl_head02 tfoot th, .tbl_head02 tfoot td {padding:10px 0;border-top:1px solid #c1d1d5;border-bottom:1px solid #c1d1d5;background:#d7e0e2;text-align:center}
|
||||
.tbl_head02 tbody th {padding:5px 0;border-top:1px solid #e9e9e9;border-bottom:1px solid #e9e9e9;background:#fff}
|
||||
.tbl_head02 td {padding:5px 3px;border-top:1px solid #e9e9e9;border-bottom:1px solid #e9e9e9;background:#fff;line-height:1.4em;word-break:break-all}
|
||||
.tbl_head02 a {}
|
||||
|
||||
/* 폼 테이블 */
|
||||
.tbl_frm01 {margin:0 0 20px}
|
||||
.tbl_frm01 table {width:100%;border-collapse:collapse;border-spacing:0}
|
||||
.tbl_frm01 th {width:70px;padding:7px 13px;border:1px solid #e9e9e9;border-left:0;background:#f5f8f9;text-align:left}
|
||||
.tbl_frm01 td {padding:7px 10px;border-top:1px solid #e9e9e9;border-bottom:1px solid #e9e9e9;background:transparent}
|
||||
.wr_content textarea,.tbl_frm01 textarea,.form_01 textarea, .frm_input {border:1px solid #d0d3db;background:#fff;color:#000;vertical-align:middle;border-radius:3px;padding:5px;
|
||||
-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
box-shadow:inset 0 1px 1px rgba(0, 0, 0, .075);
|
||||
}
|
||||
.tbl_frm01 textarea {padding:2px 2px 3px}
|
||||
.frm_input {height:40px}
|
||||
|
||||
.full_input {width:100%}
|
||||
.half_input {width:49.5%}
|
||||
.twopart_input {width:385px;margin-right:10px}
|
||||
.tbl_frm01 textarea, .write_div textarea {width:100%;height:100px}
|
||||
.tbl_frm01 a {text-decoration:none}
|
||||
.tbl_frm01 .frm_file {display:block;margin-bottom:5px}
|
||||
.tbl_frm01 .frm_info {display:block;padding:0 0 5px;line-height:1.4em}
|
||||
|
||||
/*기본 리스트*/
|
||||
.list_01 ul {border-top:1px solid #ececec}
|
||||
.list_01 li {border-bottom:1px solid #ececec;background:#fff;padding:10px 15px;list-style:none;position:relative}
|
||||
.list_01 li:nth-child(odd) {background:#f6f6f6}
|
||||
.list_01 li:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.list_01 li:hover {background:#f9f9f9}
|
||||
.list_01 li.empty_li {text-align:center;padding:20px 0;color:#666}
|
||||
|
||||
/*폼 리스트*/
|
||||
.form_01 h2 {font-size:1.167em}
|
||||
.form_01 li {margin-bottom:10px}
|
||||
.form_01 ul:after,
|
||||
.form_01 li:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.form_01 .left_input {float:left}
|
||||
.form_01 .margin_input {margin-right:1%}
|
||||
.form_01 textarea {height:100px;width:100%}
|
||||
.form_01 .frm_label {display:inline-block;width:130px}
|
||||
|
||||
/* 자료 없는 목록 */
|
||||
.empty_table {padding:50px 0 !important;text-align:center}
|
||||
.empty_list {padding:20px 0 !important;color:#666;text-align:center}
|
||||
|
||||
/* 필수입력 */
|
||||
.required, textarea.required {background-image:url('../img/require.png') !important;background-repeat:no-repeat !important;background-position:right top !important}
|
||||
|
||||
/* 테이블 항목별 정의 */
|
||||
.td_board {width:80px;text-align:center}
|
||||
.td_category {width:80px;text-align:center}
|
||||
.td_chk {width:30px;text-align:center}
|
||||
.td_date {width:60px;text-align:center}
|
||||
.td_datetime {width:110px;text-align:center}
|
||||
.td_group {width:80px;text-align:center}
|
||||
.td_mb_id {width:100px;text-align:center}
|
||||
.td_mng {width:80px;text-align:center}
|
||||
.td_name {width:100px;text-align:left}
|
||||
.td_nick {width:100px;text-align:center}
|
||||
.td_num {width:50px;text-align:center}
|
||||
.td_numbig {width:80px;text-align:center}
|
||||
.td_stat {width:60px;text-align:center}
|
||||
|
||||
.txt_active {color:#5d910b}
|
||||
.txt_done {color:#e8180c}
|
||||
.txt_expired {color:#ccc}
|
||||
.txt_rdy {color:#8abc2a}
|
||||
|
||||
/* 새창 기본 스타일 */
|
||||
.new_win {position:relative}
|
||||
.new_win .tbl_wrap {margin:0 20px}
|
||||
.new_win #win_title {font-size:1.3em;height:50px;line-height:30px;padding:10px 20px;background:#fff;color:#000;-webkit-box-shadow:0 1px 10px rgba(0,0,0,.1);
|
||||
-moz-box-shadow:0 1px 10px rgba(0,0,0,.1);
|
||||
box-shadow:0 1px 10px rgba(0,0,0,.1)}
|
||||
.new_win #win_title .sv {font-size:0.75em;line-height:1.2em}
|
||||
.new_win .win_ul {margin-bottom:15px;padding:0 20px}
|
||||
.new_win .win_ul:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.new_win .win_ul li {float:left;background:#fff;text-align:center;padding:0 10px;border:1px solid #d6e9ff;border-radius:30px;margin-left:5px}
|
||||
.new_win .win_ul li:first-child {margin-left:0}
|
||||
.new_win .win_ul li a {display:block;padding:8px 0;color:#6794d3}
|
||||
.new_win .win_ul .selected {background:#3a8afd;border-color:#3a8afd;position:relative;z-index:5}
|
||||
.new_win .win_ul .selected a {color:#fff;font-weight:bold}
|
||||
.new_win .win_desc {position:relative;margin:10px;border-radius:5px;font-size:1em;background:#f2838f;color:#fff;line-height:50px;text-align:left;padding:0 20px}
|
||||
.new_win .win_desc i {font-size:1.2em;vertical-align:baseline}
|
||||
.new_win .win_desc:after {content:"";position:absolute;left:0;top:0;width:4px;height:50px;background:#da4453;border-radius:3px 0 0 3px}
|
||||
.new_win .frm_info {font-size:0.92em;color:#919191}
|
||||
.new_win .win_total {float:right;display:inline-block;line-height:30px;font-weight:normal;font-size:0.75em;color:#3a8afd;background:#f6f6f6;padding:0 10px;border-radius:5px}
|
||||
.new_win .new_win_con {margin:20px 0;padding:20px}
|
||||
.new_win .new_win_con:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.new_win .new_win_con2 {margin:20px 0}
|
||||
.new_win .btn_confirm:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.new_win .win_btn {text-align:center}
|
||||
.new_win .cert_btn {margin-bottom:30px;text-align:center}
|
||||
.new_win .btn_close {padding:0 20px;height:45px;overflow:hidden;cursor:pointer}
|
||||
.new_win .btn_submit {padding:0 20px;height:45px;font-weight:bold;font-size:1.083em}
|
||||
|
||||
/* 검색결과 색상 */
|
||||
.sch_word {color:#fff;background:#ff005a;padding:2px 5px 3px;line-height:18px;margin:0 2px}
|
||||
|
||||
/* 자바스크립트 alert 대안 */
|
||||
#validation_check {margin:100px auto;width:500px}
|
||||
#validation_check h1 {margin-bottom:20px;font-size:1.3em}
|
||||
#validation_check p {margin-bottom:20px;padding:30px 20px;border:1px solid #e9e9e9;background:#fff}
|
||||
|
||||
/* 사이드뷰 */
|
||||
.sv_wrap {position:relative;font-weight:normal}
|
||||
.sv_wrap .sv {z-index:1000;display:none;margin:5px 0 0;font-size:0.92em;background:#333;
|
||||
-webkit-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
-moz-box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2);
|
||||
box-shadow:2px 2px 3px 0px rgba(0,0,0,0.2)}
|
||||
.sv_wrap .sv:before {content:"";position:absolute;top:-6px;left:15px;width:0;height:0;border-style:solid;border-width:0 6px 6px 6px;border-color:transparent transparent #333 transparent}
|
||||
.sv_wrap .sv a {display:inline-block;margin:0;padding:0 10px;line-height:30px;width:100px;font-weight:normal;color:#bbb}
|
||||
.sv_wrap .sv a:hover {background:#000;color:#fff}
|
||||
.sv_member {color:#333}
|
||||
.sv_on {display:block !important;position:absolute;top:23px;left:0px;width:auto;height:auto}
|
||||
.sv_nojs .sv {display:block}
|
||||
|
||||
/* 페이징 */
|
||||
.pg_wrap {clear:both;float:left;display:inline-block}
|
||||
.pg_wrap:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
.pg {text-align:center}
|
||||
.pg_page, .pg_current {display:inline-block;vertical-align:middle;background:#eee;border:1px solid #eee}
|
||||
.pg a:focus, .pg a:hover {text-decoration:none}
|
||||
.pg_page {color:#959595;font-size:1.083em;height:30px;line-height:28px;padding:0 5px;min-width:30px;text-decoration:none;border-radius:3px}
|
||||
.pg_page:hover {background-color:#fafafa}
|
||||
.pg_start {text-indent:-999px;overflow:hidden;background:url('../img/btn_first.gif') no-repeat 50% 50% #eee;padding:0;border:1px solid #eee}
|
||||
.pg_prev {text-indent:-999px;overflow:hidden;background:url('../img/btn_prev.gif') no-repeat 50% 50% #eee;padding:0;border:1px solid #eee}
|
||||
.pg_end {text-indent:-999px;overflow:hidden;background:url('../img/btn_end.gif') no-repeat 50% 50% #eee;padding:0;border:1px solid #eee}
|
||||
.pg_next {text-indent:-999px;overflow:hidden;background:url('../img/btn_next.gif') no-repeat 50% 50% #eee;padding:0;border:1px solid #eee}
|
||||
.pg_start:hover,.pg_prev:hover,.pg_end:hover,.pg_next:hover {background-color:#fafafa}
|
||||
|
||||
.pg_current {display:inline-block;background:#3a8afd;border:1px solid #3a8afd;color:#fff;font-weight:bold;height:30px;line-height:30px;padding:0 10px;min-width:30px;border-radius:3px}
|
||||
|
||||
/* cheditor 이슈 */
|
||||
.cheditor-popup-window *, .cheditor-popup-window :after, .cheditor-popup-window :before {
|
||||
-webkit-box-sizing:content-box;
|
||||
-moz-box-sizing:content-box;
|
||||
box-sizing:content-box;
|
||||
}
|
||||
|
||||
/* Mobile화면으로 */
|
||||
#device_change {display:block;margin:0.3em;padding:0.5em 0;border:1px solid #eee;border-radius:2em;background:#fff;color:#000;font-size:2em;text-decoration:none;text-align:center}
|
||||
|
||||
@@ -1,79 +0,0 @@
|
||||
/* Floating Ads Style */
|
||||
/* viewport=1700, body min-width=1700 기준
|
||||
콘텐츠 max-width=1400px, 광고 width=140px
|
||||
50vw = 850px (페이지 중앙)
|
||||
콘텐츠 왼쪽 끝: 50vw - 700px = 150px
|
||||
광고 왼쪽 위치: 콘텐츠 왼쪽 끝 - 광고너비 - 여백 = 150 - 140 - 10 = 0px
|
||||
→ left: calc(50vw - 700px - 150px) = calc(50vw - 850px) = 0
|
||||
실제: left: calc(50vw - 850px) = 0 → 화면 왼쪽 끝
|
||||
right: calc(50vw - 850px) = 0 → 화면 오른쪽 끝
|
||||
콘텐츠(1400) + 광고(140)*2 + 여백(10)*2 = 1700 → 딱 맞음 */
|
||||
|
||||
.floating-ad {
|
||||
position: fixed;
|
||||
top: 150px;
|
||||
width: 140px;
|
||||
z-index: 990;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 20px;
|
||||
max-height: calc(100vh - 200px);
|
||||
pointer-events: none;
|
||||
}
|
||||
|
||||
.floating-ad a {
|
||||
pointer-events: auto;
|
||||
}
|
||||
|
||||
/* 콘텐츠(1400px) 바깥 좌우에 배치
|
||||
left = (페이지너비 - 콘텐츠너비) / 2 - 광고너비 - 여백
|
||||
= (1700 - 1400) / 2 - 140 - 10 = 150 - 150 = 0
|
||||
→ 화면 가장자리에 딱 붙음, 콘텐츠와 겹치지 않음 */
|
||||
.floating-ad.left {
|
||||
left: 0;
|
||||
}
|
||||
|
||||
.floating-ad.right {
|
||||
right: 0;
|
||||
}
|
||||
|
||||
.floating-ad a {
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
transition: transform 0.2s;
|
||||
}
|
||||
|
||||
.floating-ad a:not(.floating-contact-btn) {
|
||||
width: 140px;
|
||||
height: 450px;
|
||||
background-color: #f0f0f0;
|
||||
}
|
||||
|
||||
.floating-ad a:hover {
|
||||
transform: scale(1.05);
|
||||
}
|
||||
|
||||
.floating-contact-btn {
|
||||
display: block;
|
||||
margin-top: 15px;
|
||||
background-color: #009fe3;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
padding: 12px 0;
|
||||
border-radius: 8px;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
transition: background-color 0.3s;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
.floating-contact-btn:hover {
|
||||
background-color: #007bb5;
|
||||
}
|
||||
|
||||
.floating-ad img {
|
||||
width: 100% !important;
|
||||
height: 100% !important;
|
||||
object-fit: fill !important;
|
||||
display: block;
|
||||
}
|
||||
@@ -1,107 +0,0 @@
|
||||
/* Floating Ads Style (Responsive Height) */
|
||||
|
||||
.floating-ad {
|
||||
position: fixed;
|
||||
top: 150px; /* 헤더 높이만큼 띄움 (필요시 조절) */
|
||||
width: 120px; /* 배너 가로폭 고정 */
|
||||
z-index: 990;
|
||||
|
||||
/* 💡 [핵심] Flexbox를 사용하여 높이 분배 */
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
gap: 20px; /* 배너 사이 간격 */
|
||||
|
||||
/* 💡 [핵심] 화면 높이의 80%를 넘지 않도록 제한 */
|
||||
max-height: calc(100vh - 200px);
|
||||
}
|
||||
|
||||
.floating-ad.left {
|
||||
left: 20px; /* 왼쪽 여백 */
|
||||
}
|
||||
|
||||
.floating-ad.right {
|
||||
right: 20px; /* 오른쪽 여백 */
|
||||
}
|
||||
|
||||
.floating-ad a {
|
||||
display: block;
|
||||
/* 💡 [핵심] 공간을 균등하게 나눠 가짐 */
|
||||
flex: 1;
|
||||
/* 💡 [핵심] 내용물보다 작아질 수 있도록 허용 (이게 없으면 이미지가 안 줄어듦) */
|
||||
min-height: 0;
|
||||
overflow: hidden;
|
||||
transition: transform 0.2s;
|
||||
}
|
||||
|
||||
.floating-ad a:hover {
|
||||
transform: scale(1.05); /* 호버 시 살짝 커짐 */
|
||||
}
|
||||
/* 💡 [추가] 플로팅 버튼 스타일 */
|
||||
.floating-contact-btn {
|
||||
display: block;
|
||||
margin-top: 15px;
|
||||
background-color: #009fe3;
|
||||
color: #fff;
|
||||
text-align: center;
|
||||
padding: 12px 0;
|
||||
border-radius: 8px;
|
||||
text-decoration: none;
|
||||
font-weight: bold;
|
||||
transition: background-color 0.3s;
|
||||
}
|
||||
.floating-contact-btn:hover {
|
||||
background-color: #007bb5;
|
||||
}
|
||||
.floating-ad img {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
/* 💡 [핵심] 비율을 유지하며 컨테이너 안에 쏙 들어오게 함 */
|
||||
object-fit: contain;
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* 모바일 반응형 스타일 */
|
||||
@media (max-width: 1024px) {
|
||||
/* 왼쪽 플로팅 영역 전체 숨김 */
|
||||
.floating-ad.left {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/* 오른쪽 플로팅 영역 스타일 재정의 */
|
||||
.floating-ad.right {
|
||||
top: auto;
|
||||
bottom: 20px;
|
||||
right: 15px;
|
||||
width: auto;
|
||||
max-height: none;
|
||||
gap: 0;
|
||||
z-index: 999;
|
||||
}
|
||||
|
||||
/* 오른쪽 영역 내의 일반 배너(이미지) 숨김 */
|
||||
.floating-ad.right > a:not(.floating-contact-btn) {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
/* 문의하기 버튼 스타일 (모바일용 원형 버튼) */
|
||||
.floating-contact-btn {
|
||||
margin-top: 0;
|
||||
padding: 0;
|
||||
width: 50px;
|
||||
height: 50px;
|
||||
border-radius: 50%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
box-shadow: 0 4px 10px rgba(0,0,0,0.3);
|
||||
}
|
||||
|
||||
.floating-contact-btn .text {
|
||||
display: none; /* 텍스트 숨김 */
|
||||
}
|
||||
|
||||
.floating-contact-btn .icon {
|
||||
font-size: 24px;
|
||||
margin: 0;
|
||||
}
|
||||
}
|
||||
@@ -1,205 +0,0 @@
|
||||
@charset "utf-8";
|
||||
|
||||
/* 초기화 */
|
||||
html {overflow-y:scroll;height:100%;min-width:320px}
|
||||
body {margin:0;padding:0;font-size:0.75em;background:#f8f8f8;height:100%;font-family:'Malgun Gothic', dotum, sans-serif}
|
||||
html, h1, h2, h3, h4, h5, h6, form, fieldset, img {margin:0;padding:0;border:0}
|
||||
h1, h2, h3, h4, h5, h6 {font-size:1em;font-family:'Malgun Gothic', dotum, sans-serif}
|
||||
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {display:block}
|
||||
legend {position:absolute;font-size:0;line-height:0;text-indent:-9999em;overflow:hidden}
|
||||
label, input, button, select, img {vertical-align:middle}
|
||||
input, button {margin:0;padding:0;font-size:1em;font-family:'Malgun Gothic', dotum, sans-serif}
|
||||
button {cursor:pointer}
|
||||
input[type=text], input[type=password], input[type=submit], input[type=image], button {font-size:1em;-webkit-appearance:none}
|
||||
textarea, select {font-size:1em;font-family:'Malgun Gothic', dotum, sans-serif}
|
||||
textarea {border-radius:0;-webkit-appearance:none;font-family:'Malgun Gothic', dotum, sans-serif}
|
||||
select {margin:0;background:none;font-family:'Malgun Gothic', dotum, sans-serif}
|
||||
p {margin:0;padding:0;word-break:break-all}
|
||||
hr {display:none}
|
||||
pre {overflow-x:scroll;font-size:1.1em}
|
||||
a {color:#000;text-decoration:none}
|
||||
ul,li,dl,dt,dd {padding:0;margin:0}
|
||||
ul {list-style:none}
|
||||
|
||||
*,:after,:before {
|
||||
-webkit-box-sizing:border-box;
|
||||
-moz-box-sizing:border-box;
|
||||
box-sizing:border-box;
|
||||
}
|
||||
|
||||
/* 중간 레이아웃 */
|
||||
#wrapper {}
|
||||
#wrapper:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#container {position:relative;min-height:300px}
|
||||
#container:after {display:block;visibility:hidden;clear:both;content:""}
|
||||
#container_title {font-size:1.2em;font-weight:bold;height:50px;padding:10px 15px;line-height:30px;background:#fff;color:#333;
|
||||
-webkit-box-shadow:0 0 10px rgba(181, 181, 181, 0.4);
|
||||
-moz-box-shadow:0 0 10px rgba(181, 181, 181, 0.4);
|
||||
box-shadow:0 0 10px rgba(181, 181, 181, 0.4);
|
||||
}
|
||||
#container_title a {display:inline-block;margin-right:5px}
|
||||
.fixed {position:fixed;top:0;right:0;z-index:999}
|
||||
#container_title.fixed {width:100%}
|
||||
|
||||
/* 하단 레이아웃 */
|
||||
#ft {background:#222;padding:0px 20px 20px}
|
||||
#ft h1 {width:0;height:0;font-size:0;line-height:0;overflow:hidden}
|
||||
#ft p {margin:0;padding:10px 0;line-height:1.8em}
|
||||
|
||||
#ft_copy {padding:10px;line-height:2em;text-align:center;color:#777}
|
||||
#ft_copy #ft_company {text-align:center}
|
||||
#ft_copy #ft_company a {display:inline-block;padding:0 10px;line-height:1em;border-left:1px solid #333;color:#fff}
|
||||
#ft_copy #ft_company a:first-child {border:0}
|
||||
.ft_cnt {font-weight:normal;color:#e3e3e3;line-height:2em;text-align:center}
|
||||
.ft_cnt h2 {width:0;height:0;font-size:0;line-height:0;overflow:hidden}
|
||||
#ft_copy b {color:inherit}
|
||||
#ft_copy a {color:inherit;text-decoration:none}
|
||||
|
||||
#top_btn {position:fixed;bottom:10px;right:15px;width:50px;height:50px;line-height:36px;border:2px solid #d2d2d2;border-radius:50%;background:#fff;color:#d2d2d2;text-align:center;font-size:15px;z-index:99;}
|
||||
#top_btn i {font-size:1.4em}
|
||||
#top_btn:hover {background:#3b8afb;border-color:#3b8afb;color:#fff}
|
||||
#device_change {display:block;line-height:40px;border-radius:5px;background:#302e2e;color:#777;font-size:1em;text-decoration:none;text-align:center}
|
||||
|
||||
/* ==========================================================================
|
||||
[LOGICAL FIX] Mobile Navigation Panel
|
||||
========================================================================== */
|
||||
|
||||
/* Mobile Header */
|
||||
header#header #mobile-header {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 1000;
|
||||
background-color: #fff;
|
||||
box-shadow: 0 2px 4px rgba(0,0,0,0.1);
|
||||
}
|
||||
header#header .mobile-header-container {
|
||||
display: flex;
|
||||
justify-content: space-between;
|
||||
align-items: center;
|
||||
height: 60px;
|
||||
padding: 0 15px;
|
||||
}
|
||||
header#header .mobile-logo img {
|
||||
height: 30px;
|
||||
}
|
||||
header#header .mobile-menu-open-btn {
|
||||
font-size: 1.5rem;
|
||||
color: #333;
|
||||
background: none;
|
||||
border: none;
|
||||
padding: 5px;
|
||||
}
|
||||
|
||||
/* Navigation Panel (메뉴 패널) */
|
||||
header#header > #mobile-nav-panel {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 85%;
|
||||
max-width: 320px;
|
||||
height: 100%;
|
||||
background-color: #fff;
|
||||
z-index: 1002; /* 💡 [수정] 오버레이보다 높은 z-index */
|
||||
transform: translateX(-100%);
|
||||
transition: transform 0.3s ease-in-out;
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
}
|
||||
header#header > #mobile-nav-panel.is-active {
|
||||
transform: translateX(0);
|
||||
}
|
||||
|
||||
/* Panel Header */
|
||||
header#header > #mobile-nav-panel .mobile-nav-header {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 15px;
|
||||
border-bottom: 1px solid #eee;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
header#header > #mobile-nav-panel .btn-mobile-login,
|
||||
header#header > #mobile-nav-panel .btn-mobile-join {
|
||||
padding: 8px 15px;
|
||||
border: 1px solid #ddd;
|
||||
border-radius: 5px;
|
||||
font-size: 0.9rem;
|
||||
margin-right: 10px;
|
||||
}
|
||||
header#header > #mobile-nav-panel .btn-mobile-join {
|
||||
background-color: #0056b3;
|
||||
color: #fff;
|
||||
border-color: #0056b3;
|
||||
}
|
||||
header#header > #mobile-nav-panel .mobile-user-info {
|
||||
font-size: 1rem;
|
||||
font-weight: 700;
|
||||
}
|
||||
header#header > #mobile-nav-panel .mobile-menu-close-btn {
|
||||
margin-left: auto;
|
||||
font-size: 2rem;
|
||||
background: none;
|
||||
border: none;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
/* GNB (Global Navigation) */
|
||||
header#header > #mobile-nav-panel .mobile-gnb {
|
||||
flex-grow: 1;
|
||||
|
||||
}
|
||||
header#header > #mobile-nav-panel .mobile-gnb ul {
|
||||
list-style: none;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
header#header > #mobile-nav-panel .mobile-gnb li {
|
||||
border-bottom: 1px solid #f5f5f5;
|
||||
}
|
||||
header#header > #mobile-nav-panel .mobile-gnb li a {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
padding: 15px 20px;
|
||||
font-size: 1.1rem;
|
||||
color: #333;
|
||||
text-decoration: none;
|
||||
}
|
||||
header#header > #mobile-nav-panel .sub-menu-indicator {
|
||||
margin-left: auto;
|
||||
font-size: 0.9rem;
|
||||
color: #aaa;
|
||||
padding: 5px;
|
||||
}
|
||||
header#header > #mobile-nav-panel .sub-menu {
|
||||
display: none;
|
||||
background-color: #f9f9f9;
|
||||
}
|
||||
header#header > #mobile-nav-panel .sub-menu li a {
|
||||
padding-left: 40px;
|
||||
font-size: 1rem;
|
||||
color: #555;
|
||||
}
|
||||
|
||||
/* Overlay (뒷배경) */
|
||||
header#header > #mobile-nav-overlay {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
background-color: rgba(0,0,0,0.5);
|
||||
z-index: 1001; /* 💡 [수정] 메뉴 패널보다 낮은 z-index */
|
||||
opacity: 0;
|
||||
visibility: hidden;
|
||||
transition: opacity 0.3s, visibility 0.3s;
|
||||
}
|
||||
header#header > #mobile-nav-overlay.is-active {
|
||||
opacity: 1;
|
||||
visibility: visible;
|
||||
}
|
||||
|
||||
/* 화면낭독기 사용자용 */
|
||||
.sound_only {display:inline-block;position:absolute;top:0;left:0;margin:0 !important;padding:0 !important;width:1px !important;height:1px !important;font-size:0 !important;line-height:0 !important;overflow:hidden}
|
||||
/* 본문 바로가기 */
|
||||
.to_content a {z-index:100000;position:absolute;top:0;left:0;width:0;height:0;font-size:0;line-height:0;overflow:hidden}
|
||||
/* 이미지 등비율 리사이징 */
|
||||
.img_fix {width:100%;height:auto}
|
||||
@@ -1,129 +0,0 @@
|
||||
/* --- STORY 섹션 레이아웃 --- */
|
||||
.story-section {
|
||||
width: 100%;
|
||||
padding: 80px 0;
|
||||
background-color: #f8f9fa;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* 📌 [분할] 내용과 미디어가 함께 있는 경우 (좌우 2단) */
|
||||
.story-layout-split {
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
gap: 10px;
|
||||
}
|
||||
.story-layout-split .story-text {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
text-align: left; /* 기본 좌측 정렬 */
|
||||
display: flex;
|
||||
flex-direction: column;
|
||||
justify-content: center;
|
||||
}
|
||||
/* 💡 [수정] 분할 레이아웃일 때 제목(h2)만 가운데 정렬 */
|
||||
.story-layout-split .story-text h2 {
|
||||
text-align: center;
|
||||
}
|
||||
.story-layout-split .story-image {
|
||||
flex: 1;
|
||||
min-width: 0;
|
||||
display: block; /* 이미지 영역 보이기 */
|
||||
border-radius: 12px;
|
||||
overflow: hidden;
|
||||
box-shadow: 0 10px 30px rgba(0,0,0,0.1);
|
||||
/*aspect-ratio: 4 / 3;*/
|
||||
}
|
||||
|
||||
/* 📌 [전체] 내용만 있는 경우 (텍스트가 중앙에 넓게 배치) */
|
||||
.story-layout-full {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
}
|
||||
.story-layout-full .story-text {
|
||||
flex: none;
|
||||
width: 100%;
|
||||
max-width: 800px;
|
||||
margin: 0 auto;
|
||||
text-align: center; /* 모든 텍스트 가운데 정렬 */
|
||||
}
|
||||
.story-layout-full .story-image {
|
||||
display: none; /* 이미지/슬라이더 영역 숨김 */
|
||||
}
|
||||
|
||||
/* 공통 텍스트 스타일 */
|
||||
.story-text .subtitle {
|
||||
font-size: 16px;
|
||||
font-weight: 700;
|
||||
color: var(--accent-color);
|
||||
margin-bottom: 10px;
|
||||
display: block;
|
||||
text-align: center; /* 💡 추가: 텍스트 가운데 정렬 */
|
||||
}
|
||||
/* h2는 각 레이아웃 클래스에서 정렬을 제어하므로 여기서는 공통 스타일만 정의 */
|
||||
.story-text h2 {
|
||||
font-size: 36px;
|
||||
font-weight: 900;
|
||||
color: var(--primary-color);
|
||||
margin-bottom: 20px;
|
||||
line-height: 1.4;
|
||||
}
|
||||
.story-text p {
|
||||
font-size: 16px;
|
||||
line-height: 1.8;
|
||||
color: var(--secondary-color);
|
||||
}
|
||||
.story-text img,
|
||||
.story-text video {
|
||||
max-width: 100%;
|
||||
height: auto;
|
||||
border-radius: 8px;
|
||||
margin: 20px 0;
|
||||
}
|
||||
|
||||
/* --- 슬라이더(Swiper) 스타일 --- */
|
||||
.story-slider {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.story-slider .swiper-slide {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
}
|
||||
.story-slider img,
|
||||
.story-slider video {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
object-fit: cover;
|
||||
display: block;
|
||||
}
|
||||
.story-slider .swiper-pagination-bullet {
|
||||
background-color: rgba(0, 0, 0, 0.5);
|
||||
opacity: 1;
|
||||
}
|
||||
.story-slider .swiper-pagination-bullet-active {
|
||||
background-color: var(--accent-color);
|
||||
}
|
||||
|
||||
/* 📌 [추가] DB에 게시물이 없을 때의 기본 레이아웃 (위아래 배치) */
|
||||
.story-layout-static {
|
||||
display: flex;
|
||||
flex-direction: column; /* 💡 핵심: 아이템을 세로로 쌓습니다. */
|
||||
align-items: center; /* 가운데 정렬 */
|
||||
gap: 40px; /* 텍스트와 이미지 사이의 간격 */
|
||||
text-align: center; /* 모든 텍스트 가운데 정렬 */
|
||||
}
|
||||
|
||||
.story-layout-static .story-text {
|
||||
max-width: 800px; /* 텍스트 최대 너비 제한 */
|
||||
}
|
||||
|
||||
.story-layout-static .story-image {
|
||||
width: 100%;
|
||||
max-width: 800px; /* 이미지 최대 너비 제한 */
|
||||
}
|
||||
|
||||
.story-layout-static .story-image img {
|
||||
width: 100%;
|
||||
border-radius: 12px;
|
||||
}
|
||||
/* 반응형 스타일 */
|
||||
@@ -1,137 +0,0 @@
|
||||
@charset "UTF-8";
|
||||
|
||||
/* ==========================================================================
|
||||
기본 스타일 및 레이아웃
|
||||
========================================================================== */
|
||||
html { height: 100%; }
|
||||
body { margin: 0; padding-top: 0; font-size: 16px; background: #fff; height: 100%; color: #333; min-width: 1700px; }
|
||||
html, h1, h2, h3, h4, h5, h6, form, fieldset, img { margin: 0; padding: 0; border: 0; }
|
||||
h1, h2, h3, h4, h5, h6 { font-size: 1em; font-weight: 700; }
|
||||
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section { display: block; }
|
||||
ul, li, dl, dt, dd { padding: 0; margin: 0; list-style: none; }
|
||||
a { color: inherit; text-decoration: none; }
|
||||
*, :after, :before { box-sizing: border-box; }
|
||||
|
||||
/* 스크롤바 숨김 - 스크롤 기능은 유지하되 스크롤바 UI만 숨김 */
|
||||
html::-webkit-scrollbar,
|
||||
body::-webkit-scrollbar { display: none; }
|
||||
html, body { -ms-overflow-style: none; scrollbar-width: none; }
|
||||
|
||||
.container { width: 100%; max-width: 1400px; margin: 0 auto; padding: 0 20px; }
|
||||
|
||||
/* 서브 페이지 상단 제목 영역 */
|
||||
.sub-page-visual {
|
||||
padding-top: 30px;
|
||||
padding-bottom: 30px;
|
||||
background: #0056b3;
|
||||
text-align: center;
|
||||
border-bottom: 1px solid #004494;
|
||||
}
|
||||
#container_title {
|
||||
font-size: 2.5rem;
|
||||
font-weight: 900;
|
||||
color: #fff;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
.sub-title-eng {
|
||||
font-size: 1rem;
|
||||
color: rgba(255,255,255,0.7);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 1px;
|
||||
}
|
||||
.sub-page-container {
|
||||
padding-top: 50px;
|
||||
padding-bottom: 80px;
|
||||
background: #fff;
|
||||
min-height: 500px;
|
||||
}
|
||||
|
||||
/* ==========================================================================
|
||||
헤더 (Header)
|
||||
========================================================================== */
|
||||
header#header.main-header {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
z-index: 1000;
|
||||
transition: background-color 0.4s ease, padding 0.4s ease, box-shadow 0.4s ease;
|
||||
height: 80px;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
}
|
||||
header#header.main-header.is-transparent {
|
||||
background-color: transparent !important;
|
||||
border-bottom: 0 !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
header#header.main-header.is-scrolled {
|
||||
background-color: #0056b3 !important;
|
||||
backdrop-filter: blur(10px);
|
||||
-webkit-backdrop-filter: blur(10px);
|
||||
box-shadow: 0 2px 10px rgba(0, 0, 0, 0.05) !important;
|
||||
border-bottom: 1px solid #eee !important;
|
||||
}
|
||||
.header-inner { display: flex; justify-content: center; align-items: center; width: 100%; }
|
||||
.header-left { display: flex; align-items: center; flex-shrink: 0; margin-right: 80px; }
|
||||
.header-right { display: flex; align-items: center; flex-shrink: 0; margin-left: 80px; }
|
||||
.header-logo img { height: 40px; transition: all 0.3s; }
|
||||
|
||||
/* GNB (PC) */
|
||||
.gnb { display: flex; justify-content: center; }
|
||||
.gnb-list { display: flex; gap: 40px; }
|
||||
.gnb-item { position: relative; }
|
||||
.gnb-link { display: block; padding: 28px 0; font-size: 1.1rem; font-weight: 700; color: #333; position: relative; }
|
||||
header#header.is-transparent .gnb-link,
|
||||
header#header.is-transparent .utility-nav a,
|
||||
header#header.is-transparent .utility-nav button { color: #fff; }
|
||||
header#header.is-scrolled .gnb-link,
|
||||
header#header.is-scrolled .utility-nav a,
|
||||
header#header.is-scrolled .utility-nav button { color: #fff; }
|
||||
.gnb-link::after { content: ''; position: absolute; bottom: 20px; left: 0; width: 0; height: 2px; background-color: #0056b3; transition: width 0.3s ease; }
|
||||
header#header.is-transparent .gnb-link::after { background-color: #fff; }
|
||||
.gnb-item:hover .gnb-link::after, .gnb-item.active .gnb-link::after { width: 100%; color: #00A3FF; }
|
||||
.sub-menu { position: absolute; top: 100%; left: 50%; transform: translateX(-50%); background: #0056b3; border-radius: 8px; box-shadow: 0 5px 25px rgba(0, 0, 0, 0.1); padding: 15px; min-width: 180px; opacity: 0; visibility: hidden; transition: opacity 0.3s ease, top 0.3s ease; border: 1px solid #eee; }
|
||||
.gnb-item:hover .sub-menu { opacity: 1; visibility: visible; top: 90%; }
|
||||
.sub-menu li a { display: block; padding: 10px 15px; color: #fff; white-space: nowrap; border-radius: 4px; transition: background-color 0.2s, color 0.2s; }
|
||||
.sub-menu li a:hover { background-color: #0056b3; color: #00A3FF; }
|
||||
|
||||
/* 유틸리티 메뉴 */
|
||||
.utility-nav { display: flex; align-items: center; gap: 20px; }
|
||||
.utility-nav a, .utility-nav button { background: none; border: none; cursor: pointer; font-size: 1rem; }
|
||||
.utility-nav .btn-join { background-color: #0056b3; color: #fff !important; padding: 8px 16px; border-radius: 20px; font-weight: 700; transition: background-color 0.3s; }
|
||||
header#header.is-transparent .utility-nav .btn-join { background-color: rgba(255, 255, 255, 0.2); }
|
||||
.utility-nav .btn-join:hover { background-color: #003d82; }
|
||||
.utility-nav .fa { font-size: 1.3rem; }
|
||||
.user-menu-container { position: relative; }
|
||||
.user-menu-dropdown { display: none; position: absolute; top: 140%; right: 0; background: #00A3FF; border-radius: 8px; box-shadow: 0 5px 25px rgba(0, 0, 0, 0.1); padding: 10px; min-width: 180px; border: 1px solid #eee; }
|
||||
.user-menu-container.open .user-menu-dropdown, .user-menu-container:hover .user-menu-dropdown { display: block; }
|
||||
.user-menu-dropdown .user-info { padding: 10px 15px; border-bottom: 1px solid #f0f0f0; margin-bottom: 5px; }
|
||||
.user-menu-dropdown .user-info strong { color: #000; }
|
||||
.user-menu-dropdown .user-points { font-size: 0.9em; color: #0056b3; margin-left: 5px; }
|
||||
.user-menu-dropdown ul li a { display: block; padding: 10px 15px; color: #555; border-radius: 4px; }
|
||||
.user-menu-dropdown ul li a:hover { background-color: #0056b3; color: #00A3FF; }
|
||||
.new-badge { background-color: #e74c3c; color: white; font-size: 0.7em; padding: 2px 5px; border-radius: 10px; margin-left: 5px; vertical-align: middle; }
|
||||
header#header.is-transparent .user-menu-dropdown,
|
||||
header#header.is-transparent .user-menu-dropdown .user-info strong,
|
||||
header#header.is-transparent .user-menu-dropdown .user-points,
|
||||
header#header.is-transparent .user-menu-dropdown ul li a { color: #333; }
|
||||
|
||||
/* 검색창 */
|
||||
#search-bar-wrap { position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(255, 255, 255, 0.98); display: flex; justify-content: center; align-items: center; opacity: 0; visibility: hidden; transition: opacity 0.3s, visibility 0.3s; z-index: 1001; }
|
||||
#search-bar-wrap.is-active { opacity: 1; visibility: visible; }
|
||||
#search-bar-wrap form { width: 100%; max-width: 600px; position: relative; }
|
||||
#search-bar-input { width: 100%; border: none; border-bottom: 2px solid #333; background: transparent; font-size: 1.8rem; padding: 10px 50px 10px 10px; outline: none; }
|
||||
.search-bar-submit { position: absolute; right: 10px; top: 50%; transform: translateY(-50%); font-size: 1.8rem; color: #333; background: none; border: none; cursor: pointer; }
|
||||
.search-bar-close { position: fixed; top: 30px; right: 30px; font-size: 2.5rem; color: #555; background: none; border: none; cursor: pointer; }
|
||||
|
||||
/* PC 전용 */
|
||||
.pc-only { display: flex; align-items: center; }
|
||||
.mobile-only { display: none; }
|
||||
|
||||
/* 기타 */
|
||||
.main-content-wrapper { padding: 80px 0; background-color: #fff; }
|
||||
.three-column-layout { display: flex; gap: 30px; align-items: flex-start; width: 100%; max-width: 1600px; margin: 0 auto; box-sizing: border-box; }
|
||||
.layout-sidebar-left, .layout-sidebar-right { flex: 0 0 240px; }
|
||||
.layout-main-content { flex: 1; min-width: 0; }
|
||||
.sidebar-inner { position: sticky; top: 20px; }
|
||||
@@ -1,92 +0,0 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit;
|
||||
|
||||
/**
|
||||
* 💡 [핵심] 서버 측 디버깅을 위한 커스텀 로그 함수.
|
||||
* 테마의 어느 곳에서든 호출할 수 있습니다.
|
||||
*
|
||||
* @param mixed $data 로그로 남길 데이터 (문자열, 배열, 객체 등)
|
||||
*/
|
||||
if (!function_exists('rb_log')) {
|
||||
function rb_log($data) {
|
||||
$log_path = G5_DATA_PATH . '/log'; // 로그 저장 폴더
|
||||
if (!is_dir($log_path)) {
|
||||
@mkdir($log_path, G5_DIR_PERMISSION, true);
|
||||
@chmod($log_path, G5_DIR_PERMISSION);
|
||||
}
|
||||
$log_file = $log_path . '/debug.log'; // 로그 파일명
|
||||
|
||||
// 로그를 호출한 파일과 라인 정보를 가져옵니다.
|
||||
$backtrace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 1);
|
||||
$caller = isset($backtrace[0]) ? "{$backtrace[0]['file']}:{$backtrace[0]['line']}" : 'unknown';
|
||||
|
||||
// 현재 시간과 함께 로그 메시지를 포맷팅합니다.
|
||||
$log_message = "[" . date("Y-m-d H:i:s") . "] (" . $caller . ")\n";
|
||||
|
||||
// 데이터가 배열이나 객체이면 print_r로, 아니면 그대로 기록합니다.
|
||||
if (is_array($data) || is_object($data)) {
|
||||
$log_message .= print_r($data, true);
|
||||
} else {
|
||||
$log_message .= $data;
|
||||
}
|
||||
|
||||
// 파일 끝에 로그를 추가합니다.
|
||||
file_put_contents($log_file, $log_message . "\n\n", FILE_APPEND | LOCK_EX);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 💡 [핵심] 최신글 데이터를 배열로 반환하는 함수
|
||||
* latest() 함수와 거의 동일하지만, echo로 출력하는 대신 배열로 반환합니다.
|
||||
*
|
||||
* @param string $bo_table 게시판 테이블명
|
||||
* @param int $rows 가져올 게시물 수
|
||||
* @param int $subject_len 제목 글자 수 제한
|
||||
* @return array 최신글 데이터 배열
|
||||
*/
|
||||
if (!function_exists('get_latest')) {
|
||||
function get_latest($bo_table, $rows, $subject_len) {
|
||||
global $g5;
|
||||
|
||||
if (!$bo_table) {
|
||||
return array();
|
||||
}
|
||||
|
||||
$sql = " select * from {$g5['write_prefix']}{$bo_table} where wr_is_comment = 0 order by wr_num, wr_reply limit 0, {$rows} ";
|
||||
$result = sql_query($sql);
|
||||
$list = array();
|
||||
for ($i=0; $row=sql_fetch_array($result); $i++) {
|
||||
$list[$i] = $row;
|
||||
$list[$i]['href'] = get_pretty_url($bo_table, $row['wr_id']);
|
||||
$list[$i]['subject'] = cut_str(get_text($row['wr_subject']), $subject_len);
|
||||
$list[$i]['summary'] = cut_str(strip_tags($row['wr_1'] ?: $row['wr_content']), 120);
|
||||
$thumb = get_list_thumbnail($bo_table, $row['wr_id'], 200, 150, false, true);
|
||||
// 💡 [최종 수정] 썸네일이 없을 경우 기본 이미지 경로 사용
|
||||
$list[$i]['thumb_src'] = $thumb['src'] ?: G5_THEME_URL . '/rb.img/no_image.png';
|
||||
$list[$i]['thumb_alt'] = $thumb['alt'] ?: get_text($row['wr_subject']);
|
||||
$list[$i]['datetime2'] = substr($row['wr_datetime'], 5, 5);
|
||||
}
|
||||
return $list;
|
||||
}
|
||||
}
|
||||
|
||||
// 💡 [핵심 추가] 이미지 주소를 현재 도메인에 맞게 동적으로 변경하는 함수
|
||||
if (!function_exists('g5_dynamic_img_url')) {
|
||||
function g5_dynamic_img_url($content) {
|
||||
if (!$content) return $content;
|
||||
|
||||
$base = G5_URL; // 현재 접속 도메인 (예: http://localhost)
|
||||
|
||||
// 정규식을 사용하여 이미지 URL을 동적으로 변경합니다.
|
||||
// http(s)://도메인/data/editor/ 경로를 현재 G5_URL/data/editor/ 경로로 변경
|
||||
$content = preg_replace(
|
||||
'#https?://[^/]+(/data/editor/)#i',
|
||||
$base . '$1',
|
||||
$content
|
||||
);
|
||||
|
||||
return $content;
|
||||
}
|
||||
}
|
||||
|
||||
// 앞으로 테마 전역에서 사용할 다른 헬퍼 함수들을 이곳에 추가할 수 있습니다.
|
||||
@@ -1,23 +0,0 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// PC 전용 - 모바일 분기 제거 (모바일에서도 PC 레이아웃 유지)
|
||||
|
||||
if(!$is_admin && $group['gr_device'] == 'mobile')
|
||||
alert($group['gr_subject'].' 그룹은 모바일에서만 접근할 수 있습니다.');
|
||||
|
||||
$g5['title'] = $group['gr_subject'];
|
||||
include_once(G5_THEME_PATH.'/head.php');
|
||||
include_once(G5_LIB_PATH.'/latest.lib.php');
|
||||
?>
|
||||
|
||||
<style>
|
||||
#container_title {display: none;}
|
||||
</style>
|
||||
|
||||
<?php if(isset($gr_id) && $gr_id) { ?>
|
||||
<div class="rb_gr flex_box" data-layout="rb_gr_<?php echo $gr_id ?>"></div>
|
||||
<?php } ?>
|
||||
|
||||
<?php
|
||||
include_once(G5_THEME_PATH.'/tail.php');
|
||||
@@ -1,158 +0,0 @@
|
||||
<?php
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
if(G5_COMMUNITY_USE === false) {
|
||||
define('G5_IS_COMMUNITY_PAGE', true);
|
||||
include_once(G5_THEME_SHOP_PATH.'/shop.head.php');
|
||||
return;
|
||||
}
|
||||
|
||||
include_once (G5_THEME_PATH.'/functions.php');
|
||||
include_once(G5_THEME_PATH.'/head.sub.php');
|
||||
include_once(G5_LIB_PATH.'/latest.lib.php');
|
||||
include_once(G5_LIB_PATH.'/outlogin.lib.php');
|
||||
include_once(G5_LIB_PATH.'/poll.lib.php');
|
||||
include_once(G5_LIB_PATH.'/visit.lib.php');
|
||||
include_once(G5_LIB_PATH.'/connect.lib.php');
|
||||
include_once(G5_LIB_PATH.'/popular.lib.php');
|
||||
|
||||
if(defined('_INDEX_')) {
|
||||
include G5_THEME_PATH.'/skin/newwin/modal/newwin.skin.php';
|
||||
}
|
||||
|
||||
$version_string = G5_SERVER_TIME;
|
||||
|
||||
add_stylesheet('<link rel="stylesheet" href="'.G5_THEME_CSS_URL.'/style_prestige_1.css?ver='.$version_string.'">', 0);
|
||||
add_stylesheet('<link rel="preconnect" href="https://fonts.googleapis.com">', 0);
|
||||
add_stylesheet('<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>', 0);
|
||||
add_stylesheet('<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@400;700;900&display=swap" rel="stylesheet">', 0);
|
||||
add_stylesheet('<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css">', 0);
|
||||
// add_stylesheet('<link rel="stylesheet" href="'.G5_THEME_URL.'/css/custom_header.css?ver='.$version_string.'">', 1);
|
||||
add_stylesheet('<link rel="stylesheet" href="'.G5_THEME_URL.'/css/floating_ads.css?ver='.$version_string.'">', 2);
|
||||
|
||||
add_javascript('<script src="'.G5_THEME_JS_URL.'/script_trend_1.js?ver='.$version_string.'"></script>', 100);
|
||||
add_javascript('<script src="'.G5_THEME_JS_URL.'/member/member.js?ver='.$version_string.'"></script>', 101);
|
||||
add_javascript('<script src="'.G5_THEME_URL.'/js/module-helper.js?ver='.$version_string.'"></script>', 1);
|
||||
|
||||
|
||||
if (isset($rb_core['layout_hd']) && $rb_core['layout_hd']) {
|
||||
include_once(G5_THEME_PATH . '/rb.layout_hd/' . $rb_core['layout_hd'] . '/header.php');
|
||||
} else {
|
||||
echo "<div class='no_data' style='padding:30px 0 !important; text-align:center; background-color:#f9f9f9;'><span class='font-B color-000'>선택된 헤더 레이아웃이 없습니다.</span><br>관리자 > 리빌더 > 환경설정 패널에서 헤더 레이아웃을 설정해주세요.</div>";
|
||||
}
|
||||
|
||||
// 유동형 광고 출력 로직
|
||||
$left_banners = array();
|
||||
$right_banners = array();
|
||||
// 💡 [수정] 모바일이 아닐 때만 배너 데이터 조회 및 좌측 배너 출력 (조건문 제거)
|
||||
// 💡 [최종 수정] ORDER BY 구문 추가
|
||||
$sql = " SELECT * FROM `rb_banner` WHERE (bn_position = 'floating_left' OR bn_position = 'floating_right') AND bn_begin_time <= NOW() AND bn_end_time >= NOW() ORDER BY bn_order ASC, bn_id DESC ";
|
||||
$result = sql_query($sql);
|
||||
|
||||
for ($i=0; $row=sql_fetch_array($result); $i++) {
|
||||
if ($row['bn_position'] == 'floating_left') {
|
||||
$left_banners[] = $row;
|
||||
} else {
|
||||
$right_banners[] = $row;
|
||||
}
|
||||
}
|
||||
?>
|
||||
<?php if (!empty($left_banners)) { ?>
|
||||
<div class="floating-ad left">
|
||||
<?php foreach ($left_banners as $banner) {
|
||||
$bimg = G5_DATA_PATH.'/banners/'.$banner['bn_id'];
|
||||
if (file_exists($bimg)) {
|
||||
echo '<a href="'.$banner['bn_url'].'" target="'.($banner['bn_new_win'] ? '_blank' : '_self').'" onclick="banner_click_count(this); return true;" data-banner-id="'.$banner['bn_id'].'"><img src="'.G5_DATA_URL.'/banners/'.$banner['bn_id'].'" alt="'.get_text($banner['bn_alt']).'"></a>';
|
||||
}
|
||||
} ?>
|
||||
</div>
|
||||
<?php } ?>
|
||||
|
||||
|
||||
<div class="floating-ad right">
|
||||
<?php if (!empty($right_banners)) {
|
||||
foreach ($right_banners as $banner) {
|
||||
$bimg = G5_DATA_PATH.'/banners/'.$banner['bn_id'];
|
||||
if (file_exists($bimg)) {
|
||||
echo '<a href="'.$banner['bn_url'].'" target="'.($banner['bn_new_win'] ? '_blank' : '_self').'" onclick="banner_click_count(this); return true;" data-banner-id="'.$banner['bn_id'].'"><img src="'.G5_DATA_URL.'/banners/'.$banner['bn_id'].'" alt="'.get_text($banner['bn_alt']).'"></a>';
|
||||
}
|
||||
}
|
||||
} ?>
|
||||
</div>
|
||||
<?php
|
||||
// 서브타이틀 관련 함수 (nav.skin.php의 split_menu_name에 의존하지 않는 독립 버전)
|
||||
|
||||
if (!function_exists('get_bo_table_from_url_regex')) {
|
||||
function get_bo_table_from_url_regex($url) {
|
||||
preg_match('/bo_table=([^&]+)/', $url, $board_matches);
|
||||
$boadid = isset($board_matches[1]) ? trim($board_matches[1]) : '';
|
||||
preg_match('/\?co_id=([^&]+)/', $url, $coid_matches);
|
||||
$coid = isset($coid_matches[1]) ? trim($coid_matches[1]) : '';
|
||||
return array($boadid, $coid);
|
||||
}
|
||||
}
|
||||
|
||||
// 메뉴명에서 한글 부분만 추출 (서브타이틀 표시용 독립 함수)
|
||||
if (!function_exists('get_menu_name_ko')) {
|
||||
function get_menu_name_ko($name) {
|
||||
// split_menu_name이 이미 로드된 경우 활용, 아니면 직접 처리
|
||||
if (function_exists('split_menu_name')) {
|
||||
list($ko, $en) = split_menu_name($name);
|
||||
return $ko;
|
||||
}
|
||||
// 한글 포함 여부 확인 후 한글 앞부분만 반환
|
||||
if (preg_match('/^(.*?)[a-zA-Z]{2,}/u', $name, $m)) {
|
||||
return trim($m[1]) ?: $name;
|
||||
}
|
||||
return $name;
|
||||
}
|
||||
}
|
||||
|
||||
if (!function_exists('get_sub_title')) {
|
||||
function get_sub_title($bo_table, $coid) {
|
||||
$menu_datas = get_menu_db(0, false);
|
||||
foreach ($menu_datas as $row) {
|
||||
if (empty($row['sub'])) continue;
|
||||
foreach ($row['sub'] as $sub) {
|
||||
list($board_id, $co_id) = get_bo_table_from_url_regex($sub['me_link']);
|
||||
$name_ko = get_menu_name_ko($sub['me_name']);
|
||||
if ($bo_table !== '' && $board_id === $bo_table) {
|
||||
return $name_ko;
|
||||
}
|
||||
if ($coid !== '' && $co_id === $coid) {
|
||||
return $name_ko;
|
||||
}
|
||||
}
|
||||
}
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
if (!defined("_INDEX_")) {
|
||||
// bo_table: common.php에서 이미 설정된 전역변수 우선 사용, 없으면 GET에서 읽기
|
||||
$co_id = isset($_GET['co_id']) ? preg_replace('/[^a-z0-9_]/i', '', $_GET['co_id']) : '';
|
||||
$bo_table_sub = '';
|
||||
if (isset($bo_table) && $bo_table) {
|
||||
// common.php에서 설정된 $bo_table 사용
|
||||
$bo_table_sub = $bo_table;
|
||||
} elseif (isset($_GET['bo_table'])) {
|
||||
$bo_table_sub = preg_replace('/[^a-z0-9_]/i', '', $_GET['bo_table']);
|
||||
}
|
||||
|
||||
$page_config_path = G5_THEME_PATH.'/skin/page/'.$co_id.'/config.php';
|
||||
if ($co_id && file_exists($page_config_path)) {
|
||||
include_once($page_config_path);
|
||||
}
|
||||
|
||||
$sub_title_text = get_sub_title($bo_table_sub, $co_id);
|
||||
|
||||
echo '<div class="sub-page-visual">';
|
||||
echo ' <div class="container" style="width:'.$rb_core['sub_width'].'px;">';
|
||||
echo ' <h2 id="container_title">' . $sub_title_text . '</h2>';
|
||||
echo ' </div>';
|
||||
echo '</div>';
|
||||
echo '<div class="sub-page-container" style="width:'.$rb_core['sub_width'].'px; margin: 0 auto;">';
|
||||
}
|
||||
?>
|
||||
@@ -1,304 +0,0 @@
|
||||
<?php
|
||||
// 이 파일은 새로운 파일 생성시 반드시 포함되어야 함
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
$g5_debug['php']['begin_time'] = $begin_time = get_microtime();
|
||||
|
||||
if (!isset($g5['title'])) {
|
||||
$g5['title'] = $config['cf_title'];
|
||||
$g5_head_title = $g5['title'];
|
||||
}
|
||||
else {
|
||||
// 상태바에 표시될 제목
|
||||
$g5_head_title = implode(' | ', array_filter(array($g5['title'], $config['cf_title'])));
|
||||
}
|
||||
|
||||
$g5['title'] = strip_tags($g5['title']);
|
||||
$g5_head_title = strip_tags($g5_head_title);
|
||||
|
||||
// 현재 접속자
|
||||
// 게시판 제목에 ' 포함되면 오류 발생
|
||||
$g5['lo_location'] = addslashes($g5['title']);
|
||||
if (!$g5['lo_location'])
|
||||
$g5['lo_location'] = addslashes(clean_xss_tags($_SERVER['REQUEST_URI']));
|
||||
$g5['lo_url'] = addslashes(clean_xss_tags($_SERVER['REQUEST_URI']));
|
||||
if (strstr($g5['lo_url'], '/'.G5_ADMIN_DIR.'/') || $is_admin == 'super') $g5['lo_url'] = '';
|
||||
|
||||
// 💡 [추가] 모든 게시판의 페이지당 목록 수를 20개로 강제 고정
|
||||
if (isset($bo_table) && $bo_table) {
|
||||
$board['bo_page_rows'] = 20;
|
||||
}
|
||||
|
||||
?>
|
||||
<!doctype html>
|
||||
<html lang="ko">
|
||||
<head>
|
||||
|
||||
<meta charset="utf-8">
|
||||
|
||||
<!-- viewport { -->
|
||||
<meta name="viewport" content="width=1700">
|
||||
<meta name="HandheldFriendly" content="true" />
|
||||
<meta http-equiv="imagetoolbar" content="no" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<!-- } -->
|
||||
|
||||
<?php if(isset($seo['se_title']) && $seo['se_title'] || isset($seo['se_keywords']) && $seo['se_keywords'] || isset($seo['se_description']) && $seo['se_description']) { ?>
|
||||
<!-- META { -->
|
||||
<meta name="title" content="<?php echo $seo['se_title'] ?>" />
|
||||
<meta name="keywords" content="<?php echo $seo['se_keywords'] ?>" />
|
||||
<meta name="description" content="<?php echo $seo['se_description'] ?>" />
|
||||
<meta name="robots" content="index,follow" />
|
||||
<!-- } --
|
||||
<?php } ?>
|
||||
|
||||
<!-- OG { -->
|
||||
<meta property="og:type" content="website">
|
||||
<meta property="og:url" content="<?php echo getCurrentUrl() ?>" />
|
||||
<?php if(isset($bo_table) && $bo_table && $wr_id) { ?>
|
||||
|
||||
<?php
|
||||
//게시물 정보
|
||||
$views = get_view($write, $board, $board_skin_path);
|
||||
$meta_title = $views['wr_subject'];
|
||||
|
||||
if(isset($views['file'][0]['file']) && $views['file'][0]['file']) {
|
||||
$meta_img = G5_DATA_URL.'/file/'.$bo_table.'/'.urlencode($views['file'][0]['file']);
|
||||
} else {
|
||||
$matches = get_editor_image($views['wr_content']);
|
||||
for ($i = 0; $i < count($matches[1]); $i++){
|
||||
$img = $matches[1][$i];
|
||||
preg_match("/src=[\'\"]?([^>\'\"]+[^>\'\"]+)/i", $img, $m); $src = $m[1];
|
||||
}
|
||||
$meta_img = isset($src) ? $src : '';
|
||||
}
|
||||
$meta_description_cut = strip_tags($views['wr_content']);
|
||||
$meta_description_cut = preg_replace("/<(.*?)\>/","",$meta_description_cut);
|
||||
$meta_description_cut = preg_replace("/ /","",$meta_description_cut);
|
||||
$meta_description = cut_str($meta_description_cut,100);
|
||||
?>
|
||||
<meta property="og:title" content="<?php echo $views['wr_subject'] ?>"/>
|
||||
<meta property="og:description" content="<?php echo $meta_description; ?>" />
|
||||
<meta property="og:image" content="<?php echo $meta_img ?>?ver=<?php echo G5_TIME_YMDHIS ?>"/>
|
||||
|
||||
<?php } else { ?>
|
||||
|
||||
<?php if(isset($seo['se_og_title']) && $seo['se_og_title']) { ?>
|
||||
<meta property="og:title" content="<?php echo $seo['se_og_title'] ?>" />
|
||||
<?php } ?>
|
||||
<?php if(isset($seo['se_og_description']) && $seo['se_og_description']) { ?>
|
||||
<?php if(defined('_INDEX_')) { ?>
|
||||
<meta property="og:description" content="<?php echo $seo['se_og_description'] ?>" />
|
||||
<?php } else { ?>
|
||||
<meta property="og:description" content="<?php echo $g5_head_title; ?>" />
|
||||
<?php } ?>
|
||||
<?php } ?>
|
||||
<?php if(isset($seo['se_og_image']) && $seo['se_og_image']) { ?>
|
||||
<meta property="og:image" content="<?php echo G5_URL ?>/data/seo/og_image?ver=<?php echo G5_TIME_YMDHIS ?>" />
|
||||
<?php } ?>
|
||||
|
||||
<?php } ?>
|
||||
<!-- } -->
|
||||
|
||||
<!-- ICO { -->
|
||||
<?php if(isset($seo['se_favicon']) && $seo['se_favicon']) { ?>
|
||||
<link rel="shortcut icon" href="<?php echo G5_URL ?>/data/seo/favicon?ver=<?php echo G5_TIME_YMDHIS ?>" type="image/x-icon">
|
||||
<link rel="icon" href="<?php echo G5_URL ?>/data/seo/favicon?ver=<?php echo G5_TIME_YMDHIS ?>" type="image/x-icon">
|
||||
<?php } ?>
|
||||
<!-- } -->
|
||||
|
||||
<?php
|
||||
if(isset($seo['se_naver_meta']) && $seo['se_naver_meta']) {
|
||||
echo $seo['se_naver_meta'];
|
||||
}
|
||||
|
||||
if(isset($seo['se_google_meta']) && $seo['se_google_meta']) {
|
||||
echo $seo['se_google_meta'];
|
||||
}
|
||||
?>
|
||||
|
||||
|
||||
<?php
|
||||
if(isset($config['cf_add_meta']) && $config['cf_add_meta'])
|
||||
echo $config['cf_add_meta'].PHP_EOL;
|
||||
?>
|
||||
|
||||
<title><?php echo $g5_head_title; ?></title>
|
||||
|
||||
<?php
|
||||
$shop_css = '';
|
||||
if (defined('_SHOP_')) $shop_css = '_shop';
|
||||
echo '<link rel="stylesheet" href="'.run_replace('head_css_url', G5_THEME_CSS_URL.'/'.(G5_IS_MOBILE?'mobile':'default').$shop_css.'.css?ver='.G5_CSS_VER, G5_THEME_URL).'">'.PHP_EOL;
|
||||
?>
|
||||
<!--[if lte IE 8]>
|
||||
<script src="<?php echo G5_JS_URL ?>/html5.js"></script>
|
||||
<![endif]-->
|
||||
|
||||
<script>
|
||||
const g5_url = "<?php echo G5_URL ?>";
|
||||
const g5_bbs_url = "<?php echo G5_BBS_URL ?>";
|
||||
const g5_theme_url = "<?php echo G5_THEME_URL; ?>";
|
||||
const g5_is_member = "<?php echo isset($is_member)?$is_member:''; ?>";
|
||||
const g5_is_admin = "<?php echo isset($is_admin)?$is_admin:''; ?>";
|
||||
const g5_is_mobile = "<?php echo G5_IS_MOBILE ?>";
|
||||
const g5_bo_table = "<?php echo isset($bo_table)?$bo_table:''; ?>";
|
||||
const g5_sca = "<?php echo isset($sca)?$sca:''; ?>";
|
||||
const g5_editor = "<?php echo ($config['cf_editor'] && $board['bo_use_dhtml_editor'])?$config['cf_editor']:''; ?>";
|
||||
const g5_cookie_domain = "<?php echo G5_COOKIE_DOMAIN ?>";
|
||||
<?php if (defined('G5_USE_SHOP') && G5_USE_SHOP) { ?>
|
||||
const g5_theme_shop_url = "<?php echo G5_THEME_SHOP_URL; ?>";
|
||||
const g5_shop_url = "<?php echo G5_SHOP_URL; ?>";
|
||||
<?php } ?>
|
||||
<?php if(defined('G5_IS_ADMIN')) { ?>
|
||||
const g5_admin_url = "<?php echo G5_ADMIN_URL; ?>";
|
||||
<?php } ?>
|
||||
</script>
|
||||
|
||||
<?php
|
||||
echo '<script src="'.G5_JS_URL.'/jquery-1.12.4.min.js"></script>'.PHP_EOL;
|
||||
echo '<script src="'.G5_JS_URL.'/jquery-migrate-1.4.1.min.js"></script>'.PHP_EOL;
|
||||
|
||||
if (isset($rb_core) && isset($rb_core['font'])) {
|
||||
$font = $rb_core['font'];
|
||||
} else {
|
||||
$font = 'YoonGothic';
|
||||
}
|
||||
|
||||
if(defined('_SHOP_')) {
|
||||
if (isset($rb_core['layout_shop'])) {
|
||||
add_javascript('<script src="' . G5_THEME_URL . '/rb.js/rb.layout.shop.js?v=2.2.1"></script>', 0);
|
||||
}
|
||||
} else {
|
||||
if (isset($rb_core['layout'])) {
|
||||
add_javascript('<script src="' . G5_THEME_URL . '/rb.js/rb.layout.js?v=2.2.1"></script>', 0);
|
||||
}
|
||||
}
|
||||
|
||||
if (defined('_SHOP_')) {
|
||||
if(!G5_IS_MOBILE) {
|
||||
add_javascript('<script src="'.G5_JS_URL.'/jquery.shop.menu.js?ver='.G5_JS_VER.'"></script>', 0);
|
||||
}
|
||||
} else {
|
||||
add_javascript('<script src="'.G5_JS_URL.'/jquery.menu.js?ver='.G5_JS_VER.'"></script>', 0);
|
||||
}
|
||||
add_javascript('<script src="'.G5_JS_URL.'/common.js?ver='.G5_JS_VER.'"></script>', 0);
|
||||
add_javascript('<script src="'.G5_JS_URL.'/wrest.js?ver='.G5_JS_VER.'"></script>', 0);
|
||||
add_javascript('<script src="'.G5_JS_URL.'/placeholders.min.js"></script>', 0);
|
||||
add_stylesheet('<link rel="stylesheet" href="'.G5_JS_URL.'/font-awesome/css/font-awesome.min.css">', 0);
|
||||
|
||||
if(defined('_SHOP_')) {
|
||||
add_stylesheet('<link rel="stylesheet" href="'.G5_THEME_URL.'/rb.css/style.shop.css?ver='.filemtime(G5_THEME_PATH.'/rb.css/style.shop.css').'" />', 0);
|
||||
}
|
||||
|
||||
/** 테마구성 **/
|
||||
$rb_css_files = [
|
||||
'reset.css',
|
||||
'style.css',
|
||||
'mobile.css',
|
||||
'form.css',
|
||||
'swiper.css',
|
||||
'custom.css',
|
||||
];
|
||||
|
||||
foreach ($rb_css_files as $rb_css_file) {
|
||||
$rb_css_path = G5_THEME_PATH . "/rb.css/$rb_css_file";
|
||||
$rb_css_url = G5_THEME_URL . "/rb.css/$rb_css_file";
|
||||
$rb_css_ver = file_exists($rb_css_path) ? filemtime($rb_css_path) : time();
|
||||
add_stylesheet("<link rel='stylesheet' href='{$rb_css_url}?ver={$rb_css_ver}' />", 0);
|
||||
}
|
||||
|
||||
add_javascript('<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>', 0);
|
||||
add_javascript('<script src="'.G5_THEME_URL.'/rb.js/swiper.js"></script>', 0);
|
||||
add_stylesheet('<link rel="stylesheet" href="'.G5_THEME_URL.'/rb.fonts/'.$font.'/'.$font.'.css?ver='.filemtime(G5_THEME_PATH.'/rb.fonts/'.$font.'/'.$font.'.css').'" />', 0);
|
||||
add_stylesheet('<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/base/jquery-ui.css" />', 0);
|
||||
|
||||
|
||||
if(!defined('G5_IS_ADMIN'))
|
||||
echo $config['cf_add_script'];
|
||||
?>
|
||||
|
||||
<style>
|
||||
/* 기본 폰트 설정 (강제성 완화, 변수 체계 활용) */
|
||||
body {
|
||||
font-family: 'YoonGothic', 'font-R', sans-serif;
|
||||
}
|
||||
|
||||
/* 글로벌 PC 뷰 고정 (뷰포트에 맞춰 최소 너비만 보장) */
|
||||
html, body {
|
||||
width: 100%;
|
||||
min-width: 1400px;
|
||||
background-color: #fff;
|
||||
}
|
||||
|
||||
/* 최상위 레이아웃 기본 구조 */
|
||||
#header, footer, .contents_wrap, #main {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/* 컨테이너 기본 중앙 정렬 (너비는 설정값에 따름) */
|
||||
.container, .inner, .wrap, .index, .sub {
|
||||
margin: 0 auto;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* 💡 [핵심] 모든 게시판 리스트 및 본문(HTML 에디터 내용 포함) 폰트 일괄 강제 연동 */
|
||||
.board-container, .board-container *,
|
||||
.rb_bbs_wrap, .rb_bbs_wrap *,
|
||||
#coverage-board, #coverage-board *,
|
||||
.view-detail-content, .view-detail-content *,
|
||||
#bo_v_con, #bo_v_con *,
|
||||
.board-view-content, .board-view-content *,
|
||||
.view-body-images figcaption {
|
||||
<?php if(isset($rb_core['font']) && $rb_core['font']) { ?>
|
||||
/* 인라인 스타일(font-family: arial 등)까지 모두 무시하고 강제 적용 */
|
||||
font-family: 'font-R', '<?php echo $rb_core['font'] ?>', sans-serif !important;
|
||||
<?php } ?>
|
||||
}
|
||||
|
||||
/* 게시판 내 굵은 글씨 및 강조 요소 보정 */
|
||||
.board-container strong, .board-container b,
|
||||
.view-detail-content strong, .view-detail-content b,
|
||||
#bo_v_con strong, #bo_v_con b,
|
||||
.gnb-txt-ko, .sub-txt-ko {
|
||||
<?php if(isset($rb_core['font']) && $rb_core['font']) { ?>
|
||||
font-family: 'font-B', '<?php echo $rb_core['font'] ?>', sans-serif !important;
|
||||
font-weight: 700 !important;
|
||||
<?php } ?>
|
||||
}
|
||||
|
||||
/* 모든 미디어 쿼리 효과 무력화 (PC 화면 유지용) */
|
||||
@media screen and (max-width: 1400px) {
|
||||
body {
|
||||
overflow-x: auto;
|
||||
}
|
||||
}
|
||||
</style>
|
||||
|
||||
|
||||
|
||||
|
||||
</head>
|
||||
<body<?php echo isset($g5['body_script']) ? $g5['body_script'] : ''; ?>>
|
||||
<?php
|
||||
if ($is_member) {
|
||||
$sr_admin_msg = '';
|
||||
if ($is_admin == 'super') $sr_admin_msg = "최고관리자 ";
|
||||
else if ($is_admin == 'group') $sr_admin_msg = "그룹관리자 ";
|
||||
else if ($is_admin == 'board') $sr_admin_msg = "게시판관리자 ";
|
||||
|
||||
echo '<div id="hd_login_msg">'.$sr_admin_msg.get_text($member['mb_nick']).'님 로그인 중 ';
|
||||
echo '<a href="'.G5_BBS_URL.'/logout.php">로그아웃</a></div>';
|
||||
}
|
||||
?>
|
||||
|
||||
<main class="<?php echo $rb_core['color'] ?> <?php echo $rb_core['header'] ?>" id="main">
|
||||
<?php if (!empty($rb_builder['bu_load'])) { ?>
|
||||
<div id="loadings">
|
||||
<div id="loadings_spin"></div>
|
||||
</div>
|
||||
<script>
|
||||
$(window).on("load", function() {
|
||||
$('#loadings').delay(1000).fadeOut(500);
|
||||
});
|
||||
</script>
|
||||
<?php } ?>
|
||||
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 3.1 KiB |
|
Before Width: | Height: | Size: 442 B |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 322 B |
|
Before Width: | Height: | Size: 1.8 KiB |
|
Before Width: | Height: | Size: 328 B |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 1.0 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.1 KiB |
|
Before Width: | Height: | Size: 54 B |
|
Before Width: | Height: | Size: 49 B |
|
Before Width: | Height: | Size: 3.2 KiB |
|
Before Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 2.8 KiB |
|
Before Width: | Height: | Size: 1.2 KiB |
|
Before Width: | Height: | Size: 1.9 KiB |
|
Before Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 51 B |
@@ -1,33 +0,0 @@
|
||||
<?php
|
||||
if (!defined('_INDEX_')) define('_INDEX_', true);
|
||||
if (!defined('_GNUBOARD_')) exit; // 개별 페이지 접근 불가
|
||||
|
||||
// PC 전용 - 모바일 분기 제거 (모바일에서도 PC 레이아웃 유지)
|
||||
|
||||
if(G5_COMMUNITY_USE === false) {
|
||||
include_once(G5_THEME_SHOP_PATH.'/index.php');
|
||||
return;
|
||||
}
|
||||
|
||||
include_once(G5_THEME_PATH.'/head.php');
|
||||
?>
|
||||
|
||||
|
||||
<?php
|
||||
|
||||
if (isset($rb_core['layout']) && $rb_core['layout'] == "") {
|
||||
echo "<div class='no_data' style='border:0px;'><span class='no_data_section_ul1 font-B color-000'>선택된 레이아웃이 없습니다.</span><br>환경설정 패널에서 먼저 레이아웃을 설정해주세요.</div>";
|
||||
} else if (isset($rb_core['layout'])) {
|
||||
// 레이아웃 인클루드
|
||||
include_once(G5_THEME_PATH . '/rb.layout/' . $rb_core['layout'] . '/index.php');
|
||||
//add_javascript('<script src="' . G5_THEME_URL . '/rb.js/rb.layout.js"></script>', 1);
|
||||
} else {
|
||||
echo "<div class='no_data' style='border:0px;'><span class='no_data_section_ul1 font-B color-000'>레이아웃 설정이 올바르지 않습니다.</span><br>환경설정 패널에서 먼저 레이아웃을 설정해주세요.</div>";
|
||||
}
|
||||
|
||||
?>
|
||||
|
||||
|
||||
|
||||
<?php
|
||||
include_once(G5_THEME_PATH.'/tail.php');
|
||||
@@ -1,67 +0,0 @@
|
||||
/**
|
||||
* 파일명: contact-form-handler.js
|
||||
* 설명: 홈페이지 메인의 상담 신청 폼을 처리하는 스크립트
|
||||
*/
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const contactForm = document.getElementById('contactForm');
|
||||
const formMessages = document.getElementById('form-messages');
|
||||
const submitButton = document.getElementById('contact-submit-btn');
|
||||
|
||||
if (contactForm && formMessages && submitButton) {
|
||||
contactForm.addEventListener('submit', function(e) {
|
||||
e.preventDefault(); // 기본 폼 전송을 막습니다.
|
||||
|
||||
const originalButtonText = submitButton.textContent;
|
||||
submitButton.disabled = true;
|
||||
submitButton.textContent = '전송 중...';
|
||||
formMessages.style.display = 'none';
|
||||
formMessages.className = 'form-message-area'; // CSS 클래스 초기화
|
||||
|
||||
const formData = new FormData(contactForm);
|
||||
const variables = {
|
||||
contact_subject: formData.get('contact_subject'),
|
||||
contact_name: formData.get('contact_name'),
|
||||
contact_hp: formData.get('contact_hp'),
|
||||
contact_email: formData.get('contact_email'),
|
||||
// textarea의 줄바꿈을 HTML <br> 태그로 변환하여 메일에 반영합니다.
|
||||
contact_message: formData.get('contact_message').replace(/\n/g, '<br>')
|
||||
};
|
||||
|
||||
// 💡 universalMailer 객체를 사용하여 메일 발송
|
||||
window.universalMailer.send({
|
||||
template_code: 'contact_inquiry', // 관리자에서 생성할 템플릿 코드
|
||||
to_email : variables.contact_email,
|
||||
// [추가] 참조 이메일 설정
|
||||
// 'ADMIN_EMAIL' 키워드를 사용하면 서버(ajax_universal_send.php)에서
|
||||
// 실제 관리자 이메일 주소(config.php의 cf_admin_email)로 자동 치환합니다.
|
||||
// 이렇게 하면 클라이언트 코드에 이메일 주소를 노출하지 않고도 관리자에게 발송할 수 있습니다.
|
||||
cc_email: ['ADMIN_EMAIL'],
|
||||
variables: variables,
|
||||
onSuccess: function(response) {
|
||||
alert(response.message || '상담 신청이 성공적으로 접수되었습니다. 빠른 시일 내에 연락드리겠습니다.');
|
||||
contactForm.reset(); // 폼 초기화
|
||||
// formMessages.textContent = response.message || '상담 신청이 성공적으로 접수되었습니다. 빠른 시일 내에 연락드리겠습니다.';
|
||||
// formMessages.classList.add('success');
|
||||
// formMessages.style.display = 'block';
|
||||
contactForm.reset();
|
||||
// 성공 시 팝업 닫기
|
||||
const contactModal = document.getElementById('contact-modal');
|
||||
if (contactModal) {
|
||||
// 모달의 닫기 버튼을 클릭하는 방식으로 닫습니다.
|
||||
const closeButton = contactModal.querySelector('.modal-close');
|
||||
if (closeButton) closeButton.click();
|
||||
}
|
||||
},
|
||||
onError: function(errorMessage) {
|
||||
formMessages.textContent = errorMessage || '오류가 발생했습니다. 잠시 후 다시 시도해주세요.';
|
||||
formMessages.classList.add('error');
|
||||
formMessages.style.display = 'block';
|
||||
},
|
||||
onComplete: function() {
|
||||
submitButton.disabled = false;
|
||||
submitButton.textContent = originalButtonText;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -1,525 +0,0 @@
|
||||
var charset = 'UTF-8';
|
||||
var domain = document.domain;
|
||||
var is_http = /\s(?:http|https):\/\/\S*(?:\s|$)/g;
|
||||
|
||||
function MM_swapImgRestore() { //v3.0
|
||||
var i,x,a=document.MM_sr; for(i=0;a&&i<a.length&&(x=a[i])&&x.oSrc;i++) x.src=x.oSrc;
|
||||
}
|
||||
function MM_preloadImages() { //v3.0
|
||||
var d=document; if(d.images){ if(!d.MM_p) d.MM_p=new Array();
|
||||
var i,j=d.MM_p.length,a=MM_preloadImages.arguments; for(i=0; i<a.length; i++)
|
||||
if (a[i].indexOf("#")!=0){ d.MM_p[j]=new Image; d.MM_p[j++].src=a[i];}}
|
||||
}
|
||||
|
||||
function MM_findObj(n, d) { //v4.01
|
||||
var p,i,x; if(!d) d=document; if((p=n.indexOf("?"))>0&&parent.frames.length) {
|
||||
d=parent.frames[n.substring(p+1)].document; n=n.substring(0,p);}
|
||||
if(!(x=d[n])&&d.all) x=d.all[n]; for (i=0;!x&&i<d.forms.length;i++) x=d.forms[i][n];
|
||||
for(i=0;!x&&d.layers&&i<d.layers.length;i++) x=MM_findObj(n,d.layers[i].document);
|
||||
if(!x && d.getElementById) x=d.getElementById(n); return x;
|
||||
}
|
||||
|
||||
function MM_swapImage() { //v3.0
|
||||
var i,j=0,x,a=MM_swapImage.arguments; document.MM_sr=new Array; for(i=0;i<(a.length-2);i+=3)
|
||||
if ((x=MM_findObj(a[i]))!=null){document.MM_sr[j++]=x; if(!x.oSrc) x.oSrc=x.src; x.src=a[i+2];}
|
||||
}
|
||||
|
||||
function MM_showHideLayers() { //v3.0
|
||||
var i,p,v,obj,args=MM_showHideLayers.arguments;
|
||||
for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
|
||||
if (obj.style) { obj=obj.style; v=(v=='show')?'':(v='hide')?'none':v; }
|
||||
obj.display=v; }
|
||||
}
|
||||
|
||||
function showhide() { //v3.0
|
||||
var i,p,v,obj,args=showhide.arguments;
|
||||
for (i=0; i<(args.length-2); i+=3) if ((obj=MM_findObj(args[i]))!=null) { v=args[i+2];
|
||||
if (obj.style) { obj=obj.style; v=(v=='show')?'visible':(v='hide')?'hidden':v; }
|
||||
obj.visibility=v; }
|
||||
}
|
||||
// TAB -------------------------------------------------------------------*/
|
||||
function Chtab(layername,xid,len){
|
||||
|
||||
try{
|
||||
for(i=1;i <= len; i++){
|
||||
if (i==xid) document.getElementById(layername+i).style.display="block";
|
||||
else document.getElementById(layername+i).style.display="none";
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
|
||||
function Ch_Class(layername,xid,len,class_name){
|
||||
|
||||
try{
|
||||
for(i=1;i <= len; i++){
|
||||
if (i==xid) document.getElementById(layername+i).className=class_name;
|
||||
else document.getElementById(layername+i).className="";
|
||||
}
|
||||
} catch (e) {}
|
||||
}
|
||||
// 포커싱 -------------------------------------------------------------------*/
|
||||
function bluring(){
|
||||
if(event.srcElement.tagName=="A"||event.srcElement.tagName=="IMG") document.body.focus();
|
||||
}
|
||||
document.onfocusin=bluring;
|
||||
// 인풋 비활성화 배경 -------------------------------------------------------------------*/
|
||||
isDisabled = function (){
|
||||
for (var i=0; i<this.length; i++){
|
||||
if(this.item(i).disabled) this.item(i).style.backgroundColor="#e5e5e5";
|
||||
}
|
||||
}
|
||||
window.onload = function (){
|
||||
var input = document.getElementsByTagName("INPUT");
|
||||
//isDisabled.apply(input);
|
||||
}
|
||||
// 플래시 출력 -------------------------------------------------------------------*/
|
||||
function get_embed(src,query,width,height,vars)
|
||||
{
|
||||
src += '?' + query;
|
||||
var codebase = "http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0";
|
||||
var pluginspage = "http://www.macromedia.com/go/getflashplayer";
|
||||
|
||||
if (document.location.protocol == "https:") {
|
||||
codebase = codebase.replace(/http:/, "https:");
|
||||
pluginspage = pluginspage.replace(/http:/, "https:");
|
||||
}
|
||||
|
||||
var widthAttr = (width > 0 ? 'width="'+width+'"' : '');
|
||||
var heightAttr = (height > 0 ? 'height="'+height+'"' : '');
|
||||
var tag = '';
|
||||
tag += '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="'+codebase+'" '+widthAttr+' '+heightAttr+'>';
|
||||
tag += '<param name="movie" value="'+src+'"/>';
|
||||
tag += '<param name="quality" value="high"/>';
|
||||
tag += '<param name="wmode" value="transparent"/>';
|
||||
tag += '<param name="bgcolor" value="#FFFFFF"/>';
|
||||
tag += '<param name="flashvars" value="' + vars + '"/>';
|
||||
tag += '<embed src="'+src+'" quality="high" wmode="transparent" bgcolor="#FFFFFF" '+widthAttr+' '+heightAttr+' type="application/x-shockwave-flash" pluginspage="'+pluginspage+'" flashvars="' + vars + '"></embed>';
|
||||
tag += '</object>';
|
||||
return tag;
|
||||
}
|
||||
function embed(src,query,width,height,vars)
|
||||
{
|
||||
var tag = get_embed(src,query,width,height,vars);
|
||||
document.write(tag);
|
||||
}
|
||||
// 플래시 활성화 -------------------------------------------------------------------*/
|
||||
function insertFlash( id, flashUri, vWidth, vHeight, winMode ) {
|
||||
var _obj_ = "";
|
||||
|
||||
_obj_ = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8.0.35.0" width="' + vWidth + '" height="' + vHeight + '" id="' + id + '" align="middle">';
|
||||
_obj_ += '<param name="allowScriptAccess" value="always" />';
|
||||
_obj_ += '<param name="movie" value="' + flashUri + '" />';
|
||||
_obj_ += '<param name="quality" value="high" />';
|
||||
_obj_ += '<param name="wmode" value="' + winMode + '" /> ';
|
||||
_obj_ += '<param name="bgcolor" value="#ffffff" /> ';
|
||||
_obj_ += '<param name="scale" value="exactfit" /> ';
|
||||
_obj_ += '<embed src="' + flashUri + '" quality="high" wmode="' + winMode + '" bgcolor="#ffffff" width="' + vWidth +'" height="' + vHeight + '" id="' + id + '" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" /></embed> ';
|
||||
_obj_ += '</object>';
|
||||
document.writeln( _obj_ );
|
||||
}
|
||||
var addslashes = function(str) {
|
||||
str=str.replace(/\\/g,'\\\\');
|
||||
str=str.replace(/\'/g,'\\\'');
|
||||
str=str.replace(/\"/g,'\\"');
|
||||
str=str.replace(/\0/g,'\\0');
|
||||
return str;
|
||||
}
|
||||
var stripslashes = function (str) {
|
||||
str=str.replace(/\\'/g,'\'');
|
||||
str=str.replace(/\\"/g,'"');
|
||||
str=str.replace(/\\0/g,'\0');
|
||||
str=str.replace(/\\\\/g,'\\');
|
||||
return str;
|
||||
}
|
||||
var nl2br = function(str, is_xhtml) {
|
||||
var breakTag = (is_xhtml || typeof is_xhtml === 'undefined') ? '<br ' + '/>' : '<br>'; // Adjust comment to avoid issue on phpjs.org display
|
||||
return (str + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1' + breakTag + '$2');
|
||||
}
|
||||
function length_count(num,filed, max_count) {
|
||||
var str;
|
||||
var str_count = 0;
|
||||
var cut_count = 0;
|
||||
var max_length = max_count;
|
||||
var str_length = filed.value.length;
|
||||
|
||||
//alert( str_length+"@"+max_length );
|
||||
|
||||
for (k=0;k<str_length;k++) {
|
||||
str = filed.value.charAt(k);
|
||||
if (escape(str).length > 4) {
|
||||
str_count += 2;
|
||||
max_length -= 2;
|
||||
} else {
|
||||
// (\r\n은 1byte 처리)
|
||||
if (escape(str) == '%0A') {
|
||||
} else {
|
||||
str_count++;
|
||||
max_length--;
|
||||
}
|
||||
}
|
||||
|
||||
if (max_count < str_count) {
|
||||
alert("글자수가 "+ max_count +" byte 이상은 사용불가능 합니다");
|
||||
if (escape(str).length > 4) {
|
||||
str_count -= 2;
|
||||
max_length += 2;
|
||||
} else {
|
||||
str_count--;
|
||||
max_length++;
|
||||
}
|
||||
filed.value = filed.value.substring(0,k);
|
||||
break;
|
||||
}
|
||||
}
|
||||
max_length=max_count-max_length;
|
||||
eval("this.span_byte"+num+".innerText = max_length;");
|
||||
}
|
||||
//텍스트에어리어 비우기
|
||||
function OnEnter( field ) { if( field.value == field.defaultValue ) { field.value = ""; } }
|
||||
var selAll = function(){ // 전체선택
|
||||
$('.check_all').each(function(){
|
||||
var sel = $(this).attr('checked');
|
||||
if(sel=='checked') {
|
||||
$('.check_all').attr('checked',false);
|
||||
$("input[name='check_all']").attr('checked',false);
|
||||
return false;
|
||||
} else {
|
||||
$('.check_all').attr('checked',true);
|
||||
$("input[name='check_all']").attr('checked',true);
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
// 이달 마지막날짜
|
||||
var LastDayOfMonth = function(Year, Month) {
|
||||
return(new Date((new Date(Year, Month+1,1))-1)).getDate();
|
||||
}
|
||||
// 기본 팝업창
|
||||
var win_open = function(a, b, c, k) {
|
||||
c = window.open(a, b, "width=" + c + ", height=" + k + ", scrollbars=no, resizable=no, status=no,top=" + (screen.height - 550) / 2 + ",left=" + (screen.width - 640) / 2);
|
||||
c.focus()
|
||||
}
|
||||
// input field 한글/숫자/영문 (onkeyup event)
|
||||
var field_types = function( sel, type ){
|
||||
|
||||
switch(type){
|
||||
case 'english':
|
||||
sel.value = sel.value.replace(/^a-zA-z]/g,'');
|
||||
break;
|
||||
case 'hangle':
|
||||
sel.value = sel.value.replace(/[^ㄱ-ㅎ가-횧]/g,'');
|
||||
break;
|
||||
case 'number':
|
||||
sel.value = sel.value.replace(/[^0-9]/g,'');
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
var file_download = function(link, file) { // 파일 다운로드
|
||||
document.location.href = link;
|
||||
}
|
||||
var isValidBlank = function(value) {
|
||||
var pattern = /[\s]/g; ///^\s+|\s+$/g;(/\s/g
|
||||
return (pattern.test(value)) ? true : false;
|
||||
}
|
||||
var CountChar = function( message, limit ){ // 문자 bytes 계산 msg_bytes id 값만 잘 체크하면 됨
|
||||
var nbytes = 0;
|
||||
var availMsg = "";
|
||||
var chk=0;
|
||||
for (var i=0; i <message.value.length; i++){
|
||||
ch = message.value.charAt(i);
|
||||
if(escape(ch).length > 4) {
|
||||
nbytes += 2;
|
||||
} else if (ch == '\n') {
|
||||
if (message.value.charAt(i-1) != '\r') {
|
||||
nbytes += 1;
|
||||
}
|
||||
} else {
|
||||
nbytes += 1;
|
||||
}
|
||||
if (limit*1 >= nbytes*1) {
|
||||
availMsg += message.value.charAt(i);
|
||||
}
|
||||
$('#msg_bytes').html(nbytes*1);
|
||||
}
|
||||
if (nbytes*1 > limit*1) { // 바이트를 초과했을경우
|
||||
alert("[" + availMsg + "] 까지 발송됩니다.");
|
||||
//message.value = availMsg;
|
||||
$('#msg_bytes').html(limit*1);
|
||||
//message.focus();
|
||||
return;
|
||||
}
|
||||
}
|
||||
var CountCharText = function( message, limit, msg_bytes ){ // text 필드 검사
|
||||
var nbytes = 0;
|
||||
var availMsg = "";
|
||||
var chk=0;
|
||||
for (var i=0; i <message.value.length; i++){
|
||||
ch = message.value.charAt(i);
|
||||
if(escape(ch).length > 4) {
|
||||
nbytes += 1;
|
||||
} else if (ch == '\n') {
|
||||
if (message.value.charAt(i-1) != '\r') {
|
||||
nbytes += 1;
|
||||
}
|
||||
} else {
|
||||
nbytes += 1;
|
||||
}
|
||||
if (limit*1 >= nbytes*1) {
|
||||
availMsg += message.value.charAt(i);
|
||||
}
|
||||
$('#'+msg_bytes).html(nbytes*1);
|
||||
}
|
||||
if (nbytes*1 > limit*1) { // 바이트를 초과했을경우
|
||||
//alert("[" + availMsg + "] 까지 입력 가능합니다.");
|
||||
$('#'+msg_bytes).html(limit*1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
jQuery.fn.center = function () { // 가운데 정렬
|
||||
this.css("position","absolute");
|
||||
//this.css("top", ((jQuery(window).height() - this.outerHeight()) / 2) + jQuery(window).scrollTop() + "px");
|
||||
this.css("left", ((jQuery(window).width() - this.outerWidth()) / 2) + jQuery(window).scrollLeft() + "px");
|
||||
return this;
|
||||
}
|
||||
$(function(){
|
||||
// 숫자만 입력 받기
|
||||
$('.tnum').keypress(function(event){
|
||||
//alert(event.which);
|
||||
if (event.which && (event.which > 47 && event.which < 58 || event.which == 8)) {
|
||||
} else {
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
// 핸드폰 번호만 입력 받기 ('-' 허용)
|
||||
$('.phone').keypress(function(event){
|
||||
//alert(event.which);
|
||||
if (event.which && (event.which > 47 && event.which < 58 || event.which == 8 || event.which == 45)) {
|
||||
} else {
|
||||
event.preventDefault();
|
||||
}
|
||||
});
|
||||
|
||||
// 기본 리스트 전체 체크 ( Check Box )
|
||||
$("input[name='check_all']").click(function(){
|
||||
var sel = $(this).attr('checked');
|
||||
if(sel=='checked') $('.check_all').attr('checked',true);
|
||||
else $('.check_all').attr('checked',false);
|
||||
});
|
||||
$('#start_day').datepicker({dateFormat: 'yy-mm-dd'});
|
||||
$('#end_day').datepicker({dateFormat: 'yy-mm-dd'});
|
||||
|
||||
/* 날짜 선택에 따른 Value Sets */
|
||||
$('.set_day').click(function(){
|
||||
var sel_date = $(this).attr('date');
|
||||
var todate = new Date();
|
||||
|
||||
switch(sel_date){
|
||||
case 'all': $('#start_day, #end_day').val(''); break;
|
||||
case 'today': $('#start_day, #end_day').datepicker('setDate', 'd'); break;
|
||||
case 'week': // 이번주
|
||||
startDate = new Date(todate.getFullYear(), todate.getMonth(), todate.getDate() - todate.getDay());
|
||||
endDate = new Date(todate.getFullYear(), todate.getMonth(), todate.getDate() - todate.getDay() + 6);
|
||||
$('#start_day').datepicker('setDate', startDate);
|
||||
$('#end_day').datepicker('setDate', endDate);
|
||||
break;
|
||||
case 'month': // 이번달
|
||||
startDate = new Date(todate.getFullYear(), todate.getMonth());
|
||||
endDate = new Date(todate.getFullYear(), todate.getMonth(), LastDayOfMonth(todate.getFullYear(), todate.getMonth()));
|
||||
$('#start_day').datepicker('setDate', startDate);
|
||||
$('#end_day').datepicker('setDate', endDate);
|
||||
break;
|
||||
case 'yesterday':
|
||||
$('#start_day').datepicker('setDate', '-1d');
|
||||
$('#end_day').datepicker('setDate', '-1d');
|
||||
break;
|
||||
case '3day':
|
||||
$('#start_day').datepicker('setDate', '-3d');
|
||||
$('#end_day').datepicker('setDate', 'd');
|
||||
break;
|
||||
case '7day':
|
||||
$('#start_day').datepicker('setDate', '-7d');
|
||||
$('#end_day').datepicker('setDate', 'd');
|
||||
break;
|
||||
case '15day':
|
||||
$('#start_day').datepicker('setDate', '-15d');
|
||||
$('#end_day').datepicker('setDate', 'd');
|
||||
break;
|
||||
case '30day':
|
||||
$('#start_day').datepicker('setDate', '-30d');
|
||||
$('#end_day').datepicker('setDate', 'd');
|
||||
break;
|
||||
case '60day':
|
||||
$('#start_day').datepicker('setDate', '-60d');
|
||||
$('#end_day').datepicker('setDate', 'd');
|
||||
break;
|
||||
case '90day':
|
||||
$('#start_day').datepicker('setDate', '-90d');
|
||||
$('#end_day').datepicker('setDate', 'd');
|
||||
break;
|
||||
case '120day':
|
||||
$('#start_day').datepicker('setDate', '-120d');
|
||||
$('#end_day').datepicker('setDate', 'd');
|
||||
break;
|
||||
}
|
||||
});
|
||||
});
|
||||
$(function(){
|
||||
$('#login_passwd').keydown(function(event){
|
||||
if(event.keyCode==13){ // 엔터키 이벤트
|
||||
member_login();
|
||||
}
|
||||
});
|
||||
});
|
||||
var member_login = function(){ // 회원 로그인
|
||||
$('#MemberLoginFrm').submit();
|
||||
}
|
||||
var member_logout = function( mb_id ){ // 회원 로그 아웃
|
||||
if(confirm('로그아웃 하시겠습니까?')){
|
||||
$.post("/include/regist.php", { mode:'logout_process'}, function(result){
|
||||
result = $.parseJSON(result);
|
||||
if(result.msg) alert(result.msg);
|
||||
if(result.move) location.href = result.move;
|
||||
});
|
||||
}
|
||||
}
|
||||
var is_members = function( url ){
|
||||
if( confirm('회원만 접근 가능합니다.\n\n로그인 하시겠습니까?') ){
|
||||
location.href = "/member/login.php?url=" + url;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
var bookmarks = function(){ // 즐겨찾기
|
||||
|
||||
// $('#favorite').on('click', function(e) {
|
||||
var bookmarkURL = window.location.href;
|
||||
var bookmarkTitle = document.title;
|
||||
var triggerDefault = false;
|
||||
|
||||
if (window.sidebar && window.sidebar.addPanel) {
|
||||
// Firefox version < 23
|
||||
window.sidebar.addPanel(bookmarkTitle, bookmarkURL, '');
|
||||
} else if ((window.sidebar && (navigator.userAgent.toLowerCase().indexOf('firefox') > -1)) || (window.opera && window.print)) {
|
||||
// Firefox version >= 23 and Opera Hotlist
|
||||
var $this = $(this);
|
||||
$this.attr('href', bookmarkURL);
|
||||
$this.attr('title', bookmarkTitle);
|
||||
$this.attr('rel', 'sidebar');
|
||||
$this.off(e);
|
||||
triggerDefault = true;
|
||||
} else if (window.external && ('AddFavorite' in window.external)) {
|
||||
// IE Favorite
|
||||
window.external.AddFavorite(bookmarkURL, bookmarkTitle);
|
||||
} else {
|
||||
// WebKit - Safari/Chrome
|
||||
alert((navigator.userAgent.toLowerCase().indexOf('mac') != -1 ? 'Cmd' : 'Ctrl') + '+D 키를 눌러 즐겨찾기에 등록하실 수 있습니다.');
|
||||
}
|
||||
|
||||
return triggerDefault;
|
||||
|
||||
// });
|
||||
}
|
||||
|
||||
function trim(str){
|
||||
//정규 표현식을 사용하여 화이트스페이스를 빈문자로 전환
|
||||
str = str.replace(/^\s*/,'').replace(/\s*$/, '');
|
||||
return str; //변환한 스트링을 리턴.
|
||||
}
|
||||
|
||||
// 쿠키 입력
|
||||
function set_cookies(name, value, expirehours, domain) {
|
||||
var today = new Date();
|
||||
today.setTime(today.getTime() + (60*60*1000*expirehours));
|
||||
document.cookie = name + "=" + escape( value ) + "; path=/; expires=" + today.toGMTString() + ";";
|
||||
if (domain) {
|
||||
document.cookie += "domain=" + domain + ";";
|
||||
}
|
||||
}
|
||||
|
||||
// 쿠키 얻음
|
||||
function get_cookies(name) {
|
||||
var find_sw = false;
|
||||
var start, end;
|
||||
var i = 0;
|
||||
for (i=0; i<= document.cookie.length; i++){
|
||||
start = i;
|
||||
end = start + name.length;
|
||||
if(document.cookie.substring(start, end) == name) {
|
||||
find_sw = true
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
if (find_sw == true) {
|
||||
start = end + 1;
|
||||
end = document.cookie.indexOf(";", start);
|
||||
|
||||
if(end < start)
|
||||
end = document.cookie.length;
|
||||
|
||||
return document.cookie.substring(start, end);
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
// 쿠키 지움
|
||||
function delete_cookies(name) {
|
||||
var today = new Date();
|
||||
|
||||
today.setTime(today.getTime() - 1);
|
||||
var value = get_cookie(name);
|
||||
if(value != "")
|
||||
document.cookie = name + "=" + value + "; path=/; expires=" + today.toGMTString();
|
||||
}
|
||||
var font_size = 14;
|
||||
var font_array = {12:14, 13:16, 14:18, 15:20};
|
||||
var last_font;
|
||||
var getFontSize = function () {
|
||||
var fontSize = parseInt(get_cookies("ck_fontsize")); // 폰트크기 조절
|
||||
if (isNaN(fontSize)) { fontSize = 14; }
|
||||
return fontSize;
|
||||
}
|
||||
var scroll_up = function(){// 페이지 상단으로 이동
|
||||
$('html, body').animate({scrollTop:0}, 800);
|
||||
}
|
||||
var leadingZeros = function (n, digits) {
|
||||
var zero = '';
|
||||
n = n.toString();
|
||||
if (n.length < digits) {
|
||||
for (i = 0; i < digits - n.length; i++)
|
||||
zero += '0';
|
||||
}
|
||||
return zero + n;
|
||||
}
|
||||
|
||||
// 삭제 검사 확인
|
||||
function del(href){
|
||||
if(confirm("한번 삭제한 자료는 복구할 방법이 없습니다.\n\n정말 삭제하시겠습니까?")) {
|
||||
var iev = -1;
|
||||
if (navigator.appName == 'Microsoft Internet Explorer') {
|
||||
var ua = navigator.userAgent;
|
||||
var re = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
|
||||
if (re.exec(ua) != null)
|
||||
iev = parseFloat(RegExp.$1);
|
||||
}
|
||||
|
||||
// IE6 이하에서 한글깨짐 방지
|
||||
if (iev != -1 && iev < 7) {
|
||||
document.location.href = encodeURI(href);
|
||||
} else {
|
||||
document.location.href = href;
|
||||
}
|
||||
}
|
||||
}
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
const topButton = document.getElementById('topBtn');
|
||||
if (topButton) {
|
||||
topButton.addEventListener('click', function() {
|
||||
window.scrollTo({
|
||||
top: 0,
|
||||
behavior: 'smooth' // 부드러운 스크롤 효과
|
||||
});
|
||||
});
|
||||
}
|
||||
});
|
||||
@@ -1,2 +0,0 @@
|
||||
/* Plugin for Cycle2; Copyright (c) 2012 M. Alsup; v20141007 */
|
||||
!function(a){"use strict";function b(b,c,d,e){"caption2"===c.captionPlugin&&a.each(["caption","overlay"],function(){var a,b=this+"Fx",f=c[b+"Out"]||"hide",g=d[this+"Template"],h=c.API.getComponent(this),i=c[b+"Sel"],j=c.speed;c.sync&&(j/=2),a=i?h.find(i):h,h.length&&g?("hide"==f&&(j=0),a[f](j,function(){var k=c.API.tmpl(g,d,c,e);h.html(k),a=i?h.find(i):h,i&&a.hide(),f=c[b+"In"]||"show",a[f](j)})):h.hide()})}function c(b,c,d,e){"caption2"===c.captionPlugin&&a.each(["caption","overlay"],function(){var a=d[this+"Template"],b=c.API.getComponent(this);b.length&&a&&b.html(c.API.tmpl(a,d,c,e))})}a.extend(a.fn.cycle.defaults,{captionFxOut:"fadeOut",captionFxIn:"fadeIn",captionFxSel:void 0,overlayFxOut:"fadeOut",overlayFxIn:"fadeIn",overlayFxSel:void 0}),a(document).on("cycle-bootstrap",function(a,d){d.container.on("cycle-update-view-before",b),d.container.one("cycle-update-view-after",c)})}(jQuery);
|
||||
@@ -1,2 +0,0 @@
|
||||
/* Plugin for Cycle2; Copyright (c) 2012 M. Alsup; v20141007 */
|
||||
!function(a){"use strict";a(document).on("cycle-bootstrap",function(a,b,c){"carousel"===b.fx&&(c.getSlideIndex=function(a){var b=this.opts()._carouselWrap.children(),c=b.index(a);return c%b.length},c.next=function(){var a=b.reverse?-1:1;b.allowWrap===!1&&b.currSlide+a>b.slideCount-b.carouselVisible||(b.API.advanceSlide(a),b.API.trigger("cycle-next",[b]).log("cycle-next"))})}),a.fn.cycle.transitions.carousel={preInit:function(b){b.hideNonActive=!1,b.container.on("cycle-destroyed",a.proxy(this.onDestroy,b.API)),b.API.stopTransition=this.stopTransition;for(var c=0;c<b.startingSlide;c++)b.container.append(b.slides[0])},postInit:function(b){var c,d,e,f,g=b.carouselVertical;b.carouselVisible&&b.carouselVisible>b.slideCount&&(b.carouselVisible=b.slideCount-1);var h=b.carouselVisible||b.slides.length,i={display:g?"block":"inline-block",position:"static"};if(b.container.css({position:"relative",overflow:"hidden"}),b.slides.css(i),b._currSlide=b.currSlide,f=a('<div class="cycle-carousel-wrap"></div>').prependTo(b.container).css({margin:0,padding:0,top:0,left:0,position:"absolute"}).append(b.slides),b._carouselWrap=f,g||f.css("white-space","nowrap"),b.allowWrap!==!1){for(d=0;d<(void 0===b.carouselVisible?2:1);d++){for(c=0;c<b.slideCount;c++)f.append(b.slides[c].cloneNode(!0));for(c=b.slideCount;c--;)f.prepend(b.slides[c].cloneNode(!0))}f.find(".cycle-slide-active").removeClass("cycle-slide-active"),b.slides.eq(b.startingSlide).addClass("cycle-slide-active")}b.pager&&b.allowWrap===!1&&(e=b.slideCount-h,a(b.pager).children().filter(":gt("+e+")").hide()),b._nextBoundry=b.slideCount-b.carouselVisible,this.prepareDimensions(b)},prepareDimensions:function(b){var c,d,e,f,g=b.carouselVertical,h=b.carouselVisible||b.slides.length;if(b.carouselFluid&&b.carouselVisible?b._carouselResizeThrottle||this.fluidSlides(b):b.carouselVisible&&b.carouselSlideDimension?(c=h*b.carouselSlideDimension,b.container[g?"height":"width"](c)):b.carouselVisible&&(c=h*a(b.slides[0])[g?"outerHeight":"outerWidth"](!0),b.container[g?"height":"width"](c)),d=b.carouselOffset||0,b.allowWrap!==!1)if(b.carouselSlideDimension)d-=(b.slideCount+b.currSlide)*b.carouselSlideDimension;else for(e=b._carouselWrap.children(),f=0;f<b.slideCount+b.currSlide;f++)d-=a(e[f])[g?"outerHeight":"outerWidth"](!0);b._carouselWrap.css(g?"top":"left",d)},fluidSlides:function(b){function c(){clearTimeout(e),e=setTimeout(d,20)}function d(){b._carouselWrap.stop(!1,!0);var a=b.container.width()/b.carouselVisible;a=Math.ceil(a-g),b._carouselWrap.children().width(a),b._sentinel&&b._sentinel.width(a),h(b)}var e,f=b.slides.eq(0),g=f.outerWidth()-f.width(),h=this.prepareDimensions;a(window).on("resize",c),b._carouselResizeThrottle=c,d()},transition:function(b,c,d,e,f){var g,h={},i=b.nextSlide-b.currSlide,j=b.carouselVertical,k=b.speed;if(b.allowWrap===!1){e=i>0;var l=b._currSlide,m=b.slideCount-b.carouselVisible;i>0&&b.nextSlide>m&&l==m?i=0:i>0&&b.nextSlide>m?i=b.nextSlide-l-(b.nextSlide-m):0>i&&b.currSlide>m&&b.nextSlide>m?i=0:0>i&&b.currSlide>m?i+=b.currSlide-m:l=b.currSlide,g=this.getScroll(b,j,l,i),b.API.opts()._currSlide=b.nextSlide>m?m:b.nextSlide}else e&&0===b.nextSlide?(g=this.getDim(b,b.currSlide,j),f=this.genCallback(b,e,j,f)):e||b.nextSlide!=b.slideCount-1?g=this.getScroll(b,j,b.currSlide,i):(g=this.getDim(b,b.currSlide,j),f=this.genCallback(b,e,j,f));h[j?"top":"left"]=e?"-="+g:"+="+g,b.throttleSpeed&&(k=g/a(b.slides[0])[j?"height":"width"]()*b.speed),b._carouselWrap.animate(h,k,b.easing,f)},getDim:function(b,c,d){var e=a(b.slides[c]);return e[d?"outerHeight":"outerWidth"](!0)},getScroll:function(a,b,c,d){var e,f=0;if(d>0)for(e=c;c+d>e;e++)f+=this.getDim(a,e,b);else for(e=c;e>c+d;e--)f+=this.getDim(a,e,b);return f},genCallback:function(b,c,d,e){return function(){var c=a(b.slides[b.nextSlide]).position(),f=0-c[d?"top":"left"]+(b.carouselOffset||0);b._carouselWrap.css(b.carouselVertical?"top":"left",f),e()}},stopTransition:function(){var a=this.opts();a.slides.stop(!1,!0),a._carouselWrap.stop(!1,!0)},onDestroy:function(){var b=this.opts();b._carouselResizeThrottle&&a(window).off("resize",b._carouselResizeThrottle),b.slides.prependTo(b.container),b._carouselWrap.remove()}}}(jQuery);
|
||||
@@ -1,2 +0,0 @@
|
||||
/* Plugin for Cycle2; Copyright (c) 2012 M. Alsup; v20141007 */
|
||||
!function(a){"use strict";a.extend(a.fn.cycle.defaults,{centerHorz:!1,centerVert:!1}),a(document).on("cycle-pre-initialize",function(b,c){function d(){clearTimeout(i),i=setTimeout(g,50)}function e(){clearTimeout(i),clearTimeout(j),a(window).off("resize orientationchange",d)}function f(){c.slides.each(h)}function g(){h.apply(c.container.find("."+c.slideActiveClass)),clearTimeout(j),j=setTimeout(f,50)}function h(){var b=a(this),d=c.container.width(),e=c.container.height(),f=b.outerWidth(),g=b.outerHeight();f&&(c.centerHorz&&d>=f&&b.css("marginLeft",(d-f)/2),c.centerVert&&e>=g&&b.css("marginTop",(e-g)/2))}if(c.centerHorz||c.centerVert){var i,j;a(window).on("resize orientationchange load",d),c.container.on("cycle-destroyed",e),c.container.on("cycle-initialized cycle-slide-added cycle-slide-removed",function(){d()}),g()}})}(jQuery);
|
||||
@@ -1,2 +0,0 @@
|
||||
/* Plugin for Cycle2; Copyright (c) 2012 M. Alsup; v20141007 */
|
||||
!function(a){"use strict";function b(b){return{preInit:function(a){a.slides.css(d)},transition:function(c,d,e,f,g){var h=c,i=a(d),j=a(e),k=h.speed/2;b.call(j,-90),j.css({display:"block",visibility:"visible","background-position":"-90px",opacity:1}),i.css("background-position","0px"),i.animate({backgroundPosition:90},{step:b,duration:k,easing:h.easeOut||h.easing,complete:function(){c.API.updateView(!1,!0),j.animate({backgroundPosition:0},{step:b,duration:k,easing:h.easeIn||h.easing,complete:g})}})}}}function c(b){return function(c){var d=a(this);d.css({"-webkit-transform":"rotate"+b+"("+c+"deg)","-moz-transform":"rotate"+b+"("+c+"deg)","-ms-transform":"rotate"+b+"("+c+"deg)","-o-transform":"rotate"+b+"("+c+"deg)",transform:"rotate"+b+"("+c+"deg)"})}}var d,e=document.createElement("div").style,f=a.fn.cycle.transitions,g=void 0!==e.transform||void 0!==e.MozTransform||void 0!==e.webkitTransform||void 0!==e.oTransform||void 0!==e.msTransform;g&&void 0!==e.msTransform&&(e.msTransform="rotateY(0deg)",e.msTransform||(g=!1)),g?(f.flipHorz=b(c("Y")),f.flipVert=b(c("X")),d={"-webkit-backface-visibility":"hidden","-moz-backface-visibility":"hidden","-o-backface-visibility":"hidden","backface-visibility":"hidden"}):(f.flipHorz=f.scrollHorz,f.flipVert=f.scrollVert||f.scrollHorz)}(jQuery);
|
||||
@@ -1,2 +0,0 @@
|
||||
/* Plugin for Cycle2; Copyright (c) 2012 M. Alsup; v20141007 */
|
||||
!function(a){"use strict";function b(a,b,c){if(a&&c.style.filter){b._filter=c.style.filter;try{c.style.removeAttribute("filter")}catch(d){}}else!a&&b._filter&&(c.style.filter=b._filter)}a.extend(a.fn.cycle.transitions,{fade:{before:function(c,d,e,f){var g=c.API.getSlideOpts(c.nextSlide).slideCss||{};c.API.stackSlides(d,e,f),c.cssBefore=a.extend(g,{opacity:0,visibility:"visible",display:"block"}),c.animIn={opacity:1},c.animOut={opacity:0},b(!0,c,e)},after:function(a,c,d){b(!1,a,d)}},fadeout:{before:function(c,d,e,f){var g=c.API.getSlideOpts(c.nextSlide).slideCss||{};c.API.stackSlides(d,e,f),c.cssAfter=a.extend(g,{opacity:0,visibility:"hidden"}),c.cssBefore=a.extend(g,{opacity:1,visibility:"visible",display:"block"}),c.animOut={opacity:0},b(!0,c,e)},after:function(a,c,d){b(!1,a,d)}}})}(jQuery);
|
||||
@@ -1,2 +0,0 @@
|
||||
/* Plugin for Cycle2; Copyright (c) 2012 M. Alsup; v20141007 */
|
||||
!function(a){"use strict";a.fn.cycle.transitions.scrollVert={before:function(a,b,c,d){a.API.stackSlides(a,b,c,d);var e=a.container.css("overflow","hidden").height();a.cssBefore={top:d?-e:e,left:0,opacity:1,display:"block",visibility:"visible"},a.animIn={top:0},a.animOut={top:d?e:-e}}}}(jQuery);
|
||||
@@ -1,2 +0,0 @@
|
||||
/* Plugin for Cycle2; Copyright (c) 2012 M. Alsup; v20141007 */
|
||||
!function(a){"use strict";a.fn.cycle.transitions.shuffle={transition:function(b,c,d,e,f){function g(a){this.stack(b,c,d,e),a()}a(d).css({display:"block",visibility:"visible"});var h=b.container.css("overflow","visible").width(),i=b.speed/2,j=e?c:d;b=b.API.getSlideOpts(e?b.currSlide:b.nextSlide);var k={left:-h,top:15},l=b.slideCss||{left:0,top:0};void 0!==b.shuffleLeft?k.left=k.left+parseInt(b.shuffleLeft,10)||0:void 0!==b.shuffleRight&&(k.left=h+parseInt(b.shuffleRight,10)||0),b.shuffleTop&&(k.top=b.shuffleTop),a(j).animate(k,i,b.easeIn||b.easing).queue("fx",a.proxy(g,this)).animate(l,i,b.easeOut||b.easing,f)},stack:function(b,c,d,e){var f,g;if(e)b.API.stackSlides(d,c,e),a(c).css("zIndex",1);else{for(g=1,f=b.nextSlide-1;f>=0;f--)a(b.slides[f]).css("zIndex",g++);for(f=b.slideCount-1;f>b.nextSlide;f--)a(b.slides[f]).css("zIndex",g++);a(d).css("zIndex",b.maxZ),a(c).css("zIndex",b.maxZ-1)}}}}(jQuery);
|
||||
@@ -1,2 +0,0 @@
|
||||
/* Plugin for Cycle2; Copyright (c) 2012 M. Alsup; v20141007 */
|
||||
!function(a){"use strict";a.fn.cycle.transitions.tileSlide=a.fn.cycle.transitions.tileBlind={before:function(b,c,d,e){b.API.stackSlides(c,d,e),a(c).css({display:"block",visibility:"visible"}),b.container.css("overflow","hidden"),b.tileDelay=b.tileDelay||"tileSlide"==b.fx?100:125,b.tileCount=b.tileCount||7,b.tileVertical=b.tileVertical!==!1,b.container.data("cycleTileInitialized")||(b.container.on("cycle-destroyed",a.proxy(this.onDestroy,b.API)),b.container.data("cycleTileInitialized",!0))},transition:function(b,c,d,e,f){function g(a){m.eq(a).animate(t,{duration:b.speed,easing:b.easing,complete:function(){(e?p-1===a:0===a)&&b._tileAniCallback()}}),setTimeout(function(){(e?p-1!==a:0!==a)&&g(e?a+1:a-1)},b.tileDelay)}b.slides.not(c).not(d).css("visibility","hidden");var h,i,j,k,l,m=a(),n=a(c),o=a(d),p=b.tileCount,q=b.tileVertical,r=b.container.height(),s=b.container.width();q?(i=Math.floor(s/p),k=s-i*(p-1),j=l=r):(i=k=s,j=Math.floor(r/p),l=r-j*(p-1)),b.container.find(".cycle-tiles-container").remove();var t,u={left:0,top:0,overflow:"hidden",position:"absolute",margin:0,padding:0};t=q?"tileSlide"==b.fx?{top:r}:{width:0}:"tileSlide"==b.fx?{left:s}:{height:0};var v=a('<div class="cycle-tiles-container"></div>');v.css({zIndex:n.css("z-index"),overflow:"visible",position:"absolute",top:0,left:0,direction:"ltr"}),v.insertBefore(d);for(var w=0;p>w;w++)h=a("<div></div>").css(u).css({width:p-1===w?k:i,height:p-1===w?l:j,marginLeft:q?w*i:0,marginTop:q?0:w*j}).append(n.clone().css({position:"relative",maxWidth:"none",width:n.width(),margin:0,padding:0,marginLeft:q?-(w*i):0,marginTop:q?0:-(w*j)})),m=m.add(h);v.append(m),n.css("visibility","hidden"),o.css({opacity:1,display:"block",visibility:"visible"}),g(e?0:p-1),b._tileAniCallback=function(){o.css({display:"block",visibility:"visible"}),n.css("visibility","hidden"),v.remove(),f()}},stopTransition:function(a){a.container.find("*").stop(!0,!0),a._tileAniCallback&&a._tileAniCallback()},onDestroy:function(){var a=this.opts();a.container.find(".cycle-tiles-container").remove()}}}(jQuery);
|
||||
@@ -1,2 +0,0 @@
|
||||
/* Plugin for Cycle2; Copyright (c) 2012 M. Alsup; v20141007 */
|
||||
!function(a){"use strict";function b(){try{this.playVideo()}catch(a){}}function c(){try{this.pauseVideo()}catch(a){}}var d='<div class=cycle-youtube><object width="640" height="360"><param name="movie" value="{{url}}"></param><param name="allowFullScreen" value="{{allowFullScreen}}"></param><param name="allowscriptaccess" value="always"></param><param name="wmode" value="opaque"></param><embed src="{{url}}" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="{{allowFullScreen}}" wmode="opaque"></embed></object></div>';a.extend(a.fn.cycle.defaults,{youtubeAllowFullScreen:!0,youtubeAutostart:!1,youtubeAutostop:!0}),a(document).on("cycle-bootstrap",function(e,f){f.youtube&&(f.hideNonActive=!1,f.container.find(f.slides).each(function(b){if(void 0!==a(this).attr("href")){var c,e=a(this),g=e.attr("href"),h=f.youtubeAllowFullScreen?"true":"false";g+=(/\?/.test(g)?"&":"?")+"enablejsapi=1",f.youtubeAutostart&&f.startingSlide===b&&(g+="&autoplay=1"),c=f.API.tmpl(d,{url:g,allowFullScreen:h}),e.replaceWith(c)}}),f.slides=f.slides.replace(/(\b>?a\b)/,"div.cycle-youtube"),f.youtubeAutostart&&f.container.on("cycle-initialized cycle-after",function(c,d){var e="cycle-initialized"==c.type?d.currSlide:d.nextSlide;a(d.slides[e]).find("object,embed").each(b)}),f.youtubeAutostop&&f.container.on("cycle-before",function(b,d){a(d.slides[d.currSlide]).find("object,embed").each(c)}))})}(jQuery);
|
||||
@@ -1,349 +0,0 @@
|
||||
/**
|
||||
* /application/_helpers/_js/form.js
|
||||
* @author Netfu
|
||||
* @since 2012/04/22
|
||||
* @last update 2014/04/28
|
||||
* @Module v4.0 ( SNOW )
|
||||
* @Brief :: Form Validate Script
|
||||
* @Comment :: Form 검증 및 필드 확인 Javascript
|
||||
*/
|
||||
|
||||
/// 에러메시지 포멧 정의 ///
|
||||
var NO_BLANK = "{name+을를} 입력하여 주십시오.";
|
||||
var NO_CHECK = "{name+을를} 선택하여 주십시오.";
|
||||
var NOT_VALID = "{name+이가} 올바르지 않습니다.";
|
||||
var TOO_LONG = "{name}의 길이가 초과되었습니다. (최대 {maxbyte}바이트)";
|
||||
var SPACE = (navigator.appVersion.indexOf("MSIE")!=-1) ? " " : "";
|
||||
|
||||
/// 스트링 객체에 메소드 추가 ///
|
||||
String.prototype.trim = function(str) {
|
||||
str = this != window ? this : str;
|
||||
return str.replace(/^\s+/g,'').replace(/\s+$/g,'');
|
||||
}
|
||||
String.prototype.text_trim = function(){
|
||||
return this.replace(/^\s+|\s+$/g, "");
|
||||
}
|
||||
|
||||
|
||||
String.prototype.hasFinalConsonant = function(str) {
|
||||
str = this != window ? this : str;
|
||||
var strTemp = str.substr(str.length-1);
|
||||
return ((strTemp.charCodeAt(0)-16)%28!=0);
|
||||
}
|
||||
|
||||
String.prototype.bytes = function(str) {
|
||||
str = this != window ? this : str;
|
||||
var len = 0;
|
||||
for(var j=0; j<str.length; j++) {
|
||||
var chr = str.charAt(j);
|
||||
len += (chr.charCodeAt() > 128) ? 2 : 1
|
||||
}
|
||||
return len;
|
||||
}
|
||||
|
||||
String.prototype.number_format=function(){
|
||||
return this.replace(/(\d)(?=(?:\d{3})+(?!\d))/g,'$1,');
|
||||
}
|
||||
|
||||
Array.prototype.shuffle = function() {
|
||||
return this.concat().sort(function() {
|
||||
return Math.random() - Math.random();
|
||||
});
|
||||
}
|
||||
|
||||
function in_array(value, array, similar) {
|
||||
for(var i=0; i<array.length; i++) {
|
||||
if(similar==true) {
|
||||
if(value.indexOf(array[i]) != -1) return true; // 비슷한 값
|
||||
} else {
|
||||
if(array[i]==value) return true; // 동일한 값
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
function validate(form, skip) {
|
||||
for (var i=0; i<form.elements.length; i++) {
|
||||
var el = form.elements[i];
|
||||
if (el.tagName == "FIELDSET") continue;
|
||||
if(skip && in_array(el.name, skip.split('|'), true) === true) continue; // 추가
|
||||
if(el.type.toLowerCase() != "file" && el.value) el.value = el.value.trim(); // 수정 :: 파폭 보안 문제
|
||||
|
||||
var _type = $(el).attr("type");
|
||||
if(_type=='editor') {
|
||||
el.value = _editor_use[el.name].outputBodyHTML();
|
||||
var _content = _editor_use[el.name].trimSpace(el.value.replace(/(<([^>]+)>)/gi, ""));
|
||||
}
|
||||
|
||||
var PATTERN = el.getAttribute("PATTERN");
|
||||
var minbyte = el.getAttribute("MINBYTE");
|
||||
var maxbyte = el.getAttribute("MAXBYTE");
|
||||
var minval = el.getAttribute("MINVAL");
|
||||
var maxval = el.getAttribute("MAXVAL");
|
||||
var option = el.getAttribute("OPTION");
|
||||
var match = el.getAttribute("MATCHING"); // 수정 :: Prototype JS 와 충돌하여 'MATCH' 에서 'MATCHING' 으로 변경
|
||||
var glue = el.getAttribute("GLUE");
|
||||
var unit = el.getAttribute("UNIT");
|
||||
var or = el.getAttribute("OR");
|
||||
if(unit == null) unit = '';
|
||||
|
||||
if (el.getAttribute("REQUIRED") != null) {
|
||||
var ERR_MSG = (el.getAttribute("MESSAGE") != null) ? el.getAttribute("MESSAGE") : null;
|
||||
if ((el.type.toLowerCase() == "radio" || el.type.toLowerCase() == "checkbox") && !checkMultiBox(el)) return (ERR_MSG) ? doError(el,ERR_MSG) : doError(el,NO_CHECK);
|
||||
if (el.tagName.toLowerCase() == "select" && (el.value == null || el.value == "")) {
|
||||
return (ERR_MSG) ? doError(el,ERR_MSG) : doError(el,NO_CHECK);
|
||||
}
|
||||
if (el.value == null || el.value == "" ) {
|
||||
if(el.tagName.toLowerCase()!='textarea' || (el.tagName.toLowerCase()=='textarea' && _type!='editor')) {
|
||||
return (ERR_MSG) ? doError(el,ERR_MSG) : doError(el,NO_BLANK);
|
||||
}
|
||||
}
|
||||
if(_type=='editor' && _editor_use[el.name] && !_content) {
|
||||
return doError(el,NO_BLANK);
|
||||
}
|
||||
}
|
||||
if (minbyte != null && el.value != "" && el.value.bytes() < parseInt(minbyte)) {
|
||||
if(unit=='') unit = "바이트";
|
||||
return doError(el,"{name+은는} 최소 "+minbyte+" "+unit+" 이상 입력해야 합니다.");
|
||||
}
|
||||
if (maxbyte != null && el.value != "" && el.value.bytes() > parseInt(maxbyte)) {
|
||||
if(unit=='') unit = "바이트";
|
||||
return doError(el,"{name+은는} 최대 "+maxbyte+" "+unit+" 이하로 입력해야 합니다.");
|
||||
}
|
||||
if (minval != null && el.value != "" && el.value < parseInt(minval)) return doError(el,"{name+은는} 최저 "+minval+" "+unit+" 이상 입력해야 합니다.");
|
||||
if (maxval != null && el.value != "" && el.value > parseInt(maxval)) return doError(el,"{name+은는} 최고 "+maxval+" "+unit+" 이하로 입력해야 합니다.");
|
||||
if (PATTERN != null && el.value != "" && !PATTERN(el,pattern)) return false;
|
||||
if (match != null && (el.value != form.elements[match].value)) return doError(el,"{name+이가} 일치하지 않습니다.");
|
||||
if (or != null && (el.value == null || el.value == "") && (form.elements[or].value==null || form.elements[or].value == "")) {
|
||||
var name2 = (hname = form.elements[or].getAttribute("HNAME")) ? hname : form.elements[or].getAttribute("NAME");
|
||||
return doError(el,"{name+} 또는 "+name2+" 중 하나는 입력해야 합니다.");
|
||||
}
|
||||
if (option != null && el.value != "") {
|
||||
if (el.getAttribute('SPAN') != null) {
|
||||
var _value = new Array();
|
||||
for (span=0; span<el.getAttribute('SPAN');span++ ) _value[span] = form.elements[i+span].value;
|
||||
var value = _value.join(glue == null ? '' : glue);
|
||||
if (!funcs[option](el,value)) return false;
|
||||
} else {
|
||||
try{
|
||||
if (!funcs[option](el)) return false;
|
||||
} catch(e) {
|
||||
//
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
function josa(str,tail) {
|
||||
return (str.hasFinalConsonant()) ? tail.substring(0,1) : tail.substring(1,2);
|
||||
}
|
||||
|
||||
function checkMultiBox(el) {
|
||||
var obj = document.getElementsByName(el.name);
|
||||
for (var i=0; i<obj.length; i++) if(obj[i].checked==true) return true;
|
||||
return false;
|
||||
}
|
||||
|
||||
function doError(el,type,action) {
|
||||
var _type = $(el).attr("type");
|
||||
var pattern = /{([a-zA-Z0-9_]+)\+?([가-힝]{2})?}/;
|
||||
var name = (hname = el.getAttribute("HNAME")) ? hname : el.getAttribute("NAME");
|
||||
pattern.exec(type);
|
||||
var tail = (RegExp.$2) ? josa(eval(RegExp.$1),RegExp.$2) : "";
|
||||
alert(type.replace(pattern,eval(RegExp.$1) + tail) + SPACE);
|
||||
try{
|
||||
if (action == "sel") el.select();
|
||||
else if (action == "del") el.value = "";
|
||||
if (el.getAttribute("NOFOCUS") == null) el.focus();
|
||||
if(el.getAttribute("SETFOCUS") != null && el.getAttribute("SETFOCUS") !='') el.form.elements[el.getAttribute("SETFOCUS")].focus();
|
||||
if(_type=='editor') {
|
||||
// : cheditor는 어떻게 focus해야하나..
|
||||
_editor_use[el.name].editArea.focus();
|
||||
//_editor_use[el.name].returnFalse();
|
||||
}
|
||||
} catch(e){
|
||||
return false;
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/// 특수 패턴 검사 함수 매핑 ///
|
||||
var funcs = new Array();
|
||||
funcs['domain'] = isValidDomain;
|
||||
funcs['email'] = isValidEmail;
|
||||
funcs['hphone'] = isValidHPhone;
|
||||
funcs['phone'] = isValidPhone;
|
||||
funcs['tel'] = isValidTel;
|
||||
funcs['userid'] = isValidUserid;
|
||||
funcs['userpw'] = isValidUserpw;
|
||||
funcs['number'] = isNumeric;
|
||||
funcs['float'] = isFloat;
|
||||
funcs['engonly'] = alphaOnly;
|
||||
funcs['jumin'] = isValidJumin;
|
||||
funcs['bizno'] = isValidBizNo;
|
||||
funcs['image'] = isValidImage;
|
||||
|
||||
/// 패턴 검사 함수들 ///
|
||||
function isValidDomain(el,value) {
|
||||
var value = value ? value : el.value;
|
||||
var pattern = /^[_a-zA-Z가-힝0-9-]+\.[a-zA-Z가-힝0-9-\.]+[a-zA-Z]+$/;
|
||||
return (pattern.test(value)) ? true : doError(el,NOT_VALID);
|
||||
}
|
||||
|
||||
function isValidEmail(el,value) {
|
||||
var value = value ? value : el.value;
|
||||
var pattern = /^[_a-zA-Z0-9-\.]+@[\.a-zA-Z0-9-]+\.[a-zA-Z]+$/;
|
||||
return (pattern.test(value)) ? true : doError(el,NOT_VALID);
|
||||
}
|
||||
|
||||
function isValidUserid(el) {
|
||||
var pattern = /^[a-z]{1}[a-z0-9_]{3,19}$/;
|
||||
return (pattern.test(el.value)) ? true : doError(el,"\n죄송합니다. 입력하신 아이디는 입력규칙에 어긋나므로 사용하실 수 없습니다.\n\n{name+은는} 영문자로 시작하는 6~20자의 영문 소문자와 숫자의 조합만 사용할 수 있습니다.");
|
||||
}
|
||||
|
||||
function isValidUserpw(el) {
|
||||
var pattern = /^[a-zA-Z0-9_.]{6,20}$/;
|
||||
return (pattern.test(el.value)) ? true : doError(el,"\n죄송합니다. 입력하신 비밀번호는 입력규칙에 어긋나므로 사용하실 수 없습니다."+SPACE+"\n\n{name+은는} 6~20자의 영문 소문자와 숫자의 조합만 사용할 수 있습니다.");
|
||||
}
|
||||
|
||||
function hasHangul(el) {
|
||||
var pattern = /[가-힝]/;
|
||||
return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 한글을 포함해야 합니다.");
|
||||
}
|
||||
|
||||
function alphaOnly(el) {
|
||||
var pattern = /^[a-zA-Z]+$/;
|
||||
return (pattern.test(el.value)) ? true : doError(el,NOT_VALID);
|
||||
}
|
||||
|
||||
function isNumeric(el) {
|
||||
var pattern = /^[0-9]+$/;
|
||||
return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 숫자로만 입력해야 합니다.");
|
||||
}
|
||||
|
||||
function isFloat(el) {
|
||||
var pattern = /^[0-9]+(\.[0-9]{1,4})?$/;
|
||||
return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 반드시 정수 또는 소수 넷째 자리까지만 입력해야 합니다.");
|
||||
}
|
||||
|
||||
function isValidImage(el) {
|
||||
var pattern = /(.+)(gif|jpeg|jpg|png)+$/i;
|
||||
return (pattern.test(el.value)) ? true : doError(el,"{name+은는} 이미지 형식만 가능합니다.");
|
||||
}
|
||||
|
||||
function isValidJumin(el,value) {
|
||||
var pattern = /^([0-9]{6})-?([0-9]{7})$/;
|
||||
var num = value ? value : el.value;
|
||||
if (!pattern.test(num)) return doError(el,NOT_VALID);
|
||||
num = RegExp.$1 + RegExp.$2;
|
||||
|
||||
var sum = 0;
|
||||
var last = num.charCodeAt(12) - 0x30;
|
||||
var bases = "234567892345";
|
||||
for (var i=0; i<12; i++) {
|
||||
if (isNaN(num.substring(i,i+1))) return doError(el,NOT_VALID);
|
||||
sum += (num.charCodeAt(i) - 0x30) * (bases.charCodeAt(i) - 0x30);
|
||||
}
|
||||
var mod = sum % 11;
|
||||
return ((11 - mod) % 10 == last) ? true : doError(el,NOT_VALID);
|
||||
|
||||
/* 상위 계산방식에 걸리는 주민등록번호가 있을 경우에 아래와 같이 처리
|
||||
var num = value ? value : el.value;
|
||||
num = num.replace(/[^0-9]/g,'');
|
||||
num = num.substr(0,13);
|
||||
if(num.length<13) doError(el, NOT_VALID);
|
||||
else {
|
||||
num = num.replace(/([0-9]{6})([0-9]{7}$)/,"$1-$2");
|
||||
el.value = num;
|
||||
return true;
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
function isValidBizNo(el, value) {
|
||||
var pattern = /([0-9]{3})-?([0-9]{2})-?([0-9]{5})/;
|
||||
var bizID = value ? value : el.value;
|
||||
if (!pattern.test(bizID)) return doError(el,NOT_VALID);
|
||||
bizID = RegExp.$1 + RegExp.$2 + RegExp.$3;
|
||||
var checkID = new Array(1, 3, 7, 1, 3, 7, 1, 3, 5, 1);
|
||||
var i, Sum=0, c2, remander;
|
||||
for (i=0; i<=7; i++) Sum += checkID[i] * bizID.charAt(i);
|
||||
|
||||
c2 = "0" + (checkID[8] * bizID.charAt(8));
|
||||
c2 = c2.substring(c2.length - 2, c2.length);
|
||||
Sum += Math.floor(c2.charAt(0)) + Math.floor(c2.charAt(1));
|
||||
remander = (10 - (Sum % 10)) % 10 ;
|
||||
if (Math.floor(bizID.charAt(9)) != remander) {
|
||||
return doError(el,NOT_VALID);
|
||||
}else{
|
||||
return true;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function isValidPhone(el,value) {
|
||||
var pattern = /^([0]{1}[0-9]{1,2})-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/;
|
||||
var num = value ? value : el.value;
|
||||
if (pattern.exec(num)) { // 2007-09-30 전화번호 추가(03, 067) by 이창우
|
||||
var phones = new Array("020","021","022","023","024","025","026","027","028","029","030","034","035","036","037","038","039","02","03","031","032","033","041","042","043","051","052","053","054","055","061","062","063","064","067", "070", "060");
|
||||
if(in_array(RegExp.$1, phones, false)) {
|
||||
if(!el.getAttribute('SPAN')) el.value = RegExp.$1 + "-" + RegExp.$2 + "-" + RegExp.$3;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return doError(el,NOT_VALID);
|
||||
}
|
||||
|
||||
function isValidHPhone(el,value, flag) {
|
||||
var pattern = /^([0]{1}[0-9]{1,2})-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/;
|
||||
var num = value ? value : el.value;
|
||||
if (pattern.exec(num)) {
|
||||
var hphones = new Array("011","016","017","018","019","010", "070", "060");
|
||||
if(in_array(RegExp.$1, hphones, false)) {
|
||||
if(!el.getAttribute('SPAN')) el.value = RegExp.$1 + "-" + RegExp.$2 + "-" + RegExp.$3;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
if(flag)
|
||||
return false;
|
||||
else
|
||||
return doError(el,NOT_VALID);
|
||||
}
|
||||
|
||||
function isValidTel(el, value){
|
||||
|
||||
var result = false;
|
||||
var result2 = false;
|
||||
var pattern = /^([0]{1}[0-9]{1,2})-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/;
|
||||
try{
|
||||
var num = value ? value : el.value;
|
||||
} catch(e){
|
||||
alert(e.message);
|
||||
}
|
||||
if (pattern.exec(num)) {
|
||||
var hphones = new Array("011","016","017","018","019","010", "070", "060");
|
||||
if(in_array(RegExp.$1, hphones, false)) {
|
||||
if(!el.getAttribute('SPAN')) el.value = RegExp.$1 + "-" + RegExp.$2 + "-" + RegExp.$3;
|
||||
return true
|
||||
}
|
||||
}
|
||||
|
||||
if(!result) {
|
||||
var pattern = /^([0]{1}[0-9]{1,2})-?([1-9]{1}[0-9]{2,3})-?([0-9]{4})$/;
|
||||
var num = value ? value : el.value;
|
||||
if (pattern.exec(num)) { // 2007-09-30 전화번호 추가(03, 067) by 이창우
|
||||
var phones = new Array("020","021","022","023","024","025","026","027","028","029","030","034","035","036","037","038","039","02","03","031","032","033","041","042","043","051","052","053","054","055","061","062","063","064","067", "070", "060");
|
||||
if(in_array(RegExp.$1, phones, false)) {
|
||||
if(!el.getAttribute('SPAN')) el.value = RegExp.$1 + "-" + RegExp.$2 + "-" + RegExp.$3;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return doError(el,NOT_VALID);
|
||||
|
||||
}
|
||||
@@ -1,363 +0,0 @@
|
||||
/*
|
||||
* JQuery Rolling
|
||||
* songsungkyun@naver.com
|
||||
* 2008/03/16
|
||||
*/
|
||||
(function(jQuery) {
|
||||
var rollingParam = {};
|
||||
|
||||
jQuery.fn.rolling = function(rollingDirection, rollingItemWidth, rollingItemHeight, viewingItemCount) {
|
||||
var rollingId = new Date().getTime();
|
||||
var id = this.attr("id");
|
||||
rollingParam[rollingId] = {
|
||||
id: id,
|
||||
rollingIsStarted: false,
|
||||
rollingItemCount: 0,
|
||||
rollingAnimationIndex: 0,
|
||||
rollingItemWidth: 0,
|
||||
rollingItemHeight: 0,
|
||||
viewingItemCount: 0,
|
||||
rollingTime: 0,
|
||||
viewingTime: 0,
|
||||
rollingAnimationFrame: 0,
|
||||
rollingDirection: null,
|
||||
rollingLeft: 0,
|
||||
rollingTop: 0,
|
||||
requestReverse: false,
|
||||
newRollingAnimationFrame: 0
|
||||
};
|
||||
|
||||
var param = rollingParam[rollingId];
|
||||
param.rollingDirection = rollingDirection;
|
||||
param.rollingItemWidth = rollingItemWidth;
|
||||
param.rollingItemHeight = rollingItemHeight;
|
||||
|
||||
if (viewingItemCount == undefined) {
|
||||
param.viewingItemCount = 1;
|
||||
} else {
|
||||
param.viewingItemCount = viewingItemCount;
|
||||
}
|
||||
|
||||
if (param.rollingDirection == "left" ||
|
||||
param.rollingDirection == "right") {
|
||||
this.css("width", param.rollingItemWidth * param.viewingItemCount);
|
||||
this.css("height", param.rollingItemHeight);
|
||||
} else if (param.rollingDirection == "up" ||
|
||||
param.rollingDirection == "down") {
|
||||
this.css("width", param.rollingItemWidth);
|
||||
this.css("height", param.rollingItemHeight * param.viewingItemCount);
|
||||
}
|
||||
|
||||
this.css("position", "relative");
|
||||
this.css("overflow", "hidden");
|
||||
this.attr("rollingId", rollingId);
|
||||
|
||||
this.empty();
|
||||
|
||||
rollingContentDiv = jQuery("<div/>").appendTo(this);
|
||||
rollingContentDiv.attr("id", rollingId);
|
||||
rollingContentDiv.css("position", "absolute");
|
||||
rollingContentDiv.attr("align", "left");
|
||||
rollingContentDiv.css("left", "0");
|
||||
rollingContentDiv.css("top", "0");
|
||||
return this;
|
||||
};
|
||||
|
||||
jQuery.fn.addRollingItem = function(html) {
|
||||
var param = rollingParam[this.attr("rollingId")];
|
||||
var rollingContentDiv = jQuery("#" + this.attr("rollingId"));
|
||||
param.rollingItemCount++;
|
||||
var rollingItem = null;
|
||||
|
||||
if (param.rollingDirection == "up") {
|
||||
rollingItem = jQuery("<div class='item'/>").appendTo(rollingContentDiv);
|
||||
} else if (param.rollingDirection == "right") {
|
||||
rollingItem = jQuery("<div class='item'/>").prependTo(rollingContentDiv);
|
||||
rollingItem.css("float", "left");
|
||||
rollingContentDiv.css("width", param.rollingItemCount * param.rollingItemWidth);
|
||||
rollingContentDiv.css("left", -(param.rollingItemCount - param.viewingItemCount) * param.rollingItemWidth);
|
||||
param.rollingLeft = -(param.rollingItemCount - param.viewingItemCount) * param.rollingItemWidth;
|
||||
} else if (param.rollingDirection == "down") {
|
||||
rollingItem = jQuery("<div class='item'/>").prependTo(rollingContentDiv);
|
||||
param.rollingTop = -(param.rollingItemCount - param.viewingItemCount) * param.rollingItemHeight;
|
||||
rollingContentDiv.css("top", -(param.rollingItemCount - param.viewingItemCount) * param.rollingItemHeight);
|
||||
} else if (param.rollingDirection == "left") {
|
||||
rollingItem = jQuery("<div class='item'/>").appendTo(rollingContentDiv);
|
||||
rollingItem.css("float", "left");
|
||||
rollingContentDiv.css("width", param.rollingItemCount * param.rollingItemWidth);
|
||||
}
|
||||
rollingItem.css("overflow", "hidden");
|
||||
rollingItem.css("width", param.rollingItemWidth);
|
||||
rollingItem.css("height", param.rollingItemHeight);
|
||||
rollingItem.html(html);
|
||||
return this;
|
||||
};
|
||||
|
||||
rollingAnimation = function(id) {
|
||||
var param = rollingParam[id];
|
||||
var rollingContentDiv = jQuery("#" + id);
|
||||
if (rollingContentDiv.size() == 0) {
|
||||
return;
|
||||
}
|
||||
var delayTime = param.rollingTime;
|
||||
|
||||
if (param.rollingIsStarted == false) {
|
||||
setTimeout("rollingAnimation('" + id + "')", delayTime);
|
||||
return;
|
||||
}
|
||||
|
||||
if (param.rollingAnimationIndex == 0) {
|
||||
if (param.newRollingAnimationFrame != param.rollingAnimationFrame) {
|
||||
param.rollingAnimationFrame = param.newRollingAnimationFrame;
|
||||
}
|
||||
}
|
||||
|
||||
var isReverse = false;
|
||||
if (param.requestReverse == true) {
|
||||
isReverse = true;
|
||||
param.requestReverse = false;
|
||||
param.rollingAnimationIndex = param.rollingAnimationFrame - param.rollingAnimationIndex;
|
||||
|
||||
if (param.rollingDirection == "left") {
|
||||
param.rollingDirection = "right";
|
||||
} else if (param.rollingDirection == "right") {
|
||||
param.rollingDirection = "left";
|
||||
} else if (param.rollingDirection == "down") {
|
||||
param.rollingDirection = "up";
|
||||
} else if (param.rollingDirection == "up") {
|
||||
param.rollingDirection = "down";
|
||||
}
|
||||
jQuery("#" + param.id).trigger("reverse");
|
||||
} else {
|
||||
if (param.rollingDirection == "up") {
|
||||
param.rollingTop -= param.rollingItemHeight/param.rollingAnimationFrame;
|
||||
if (-param.rollingTop > parseFloat(param.rollingItemHeight)* param.rollingItemCount) {
|
||||
param.rollingTop = - parseFloat(param.rollingItemHeight)* param.rollingItemCount;
|
||||
}
|
||||
rollingContentDiv.css("top", param.rollingTop);
|
||||
} else if (param.rollingDirection == "right") {
|
||||
param.rollingLeft += param.rollingItemWidth/param.rollingAnimationFrame;
|
||||
if (param.rollingLeft > parseFloat(param.rollingItemWidth)) {
|
||||
param.rollingLeft = parseFloat(param.rollingItemWidth);
|
||||
}
|
||||
rollingContentDiv.css("left", param.rollingLeft);
|
||||
} else if (param.rollingDirection == "down") {
|
||||
param.rollingTop += param.rollingItemHeight/param.rollingAnimationFrame;
|
||||
if (param.rollingTop > parseFloat(param.rollingItemHeight)) {
|
||||
param.rollingTop = parseFloat(param.rollingItemHeight);
|
||||
}
|
||||
rollingContentDiv.css("top", param.rollingTop);
|
||||
} else if (param.rollingDirection == "left") {
|
||||
param.rollingLeft -= param.rollingItemWidth/param.rollingAnimationFrame;
|
||||
if (-param.rollingLeft > parseFloat(param.rollingItemWidth) * param.rollingItemCount) {
|
||||
param.rollingLeft = -parseFloat(param.rollingItemWidth) * param.rollingItemCount;
|
||||
}
|
||||
rollingContentDiv.css("left", param.rollingLeft);
|
||||
}
|
||||
param.rollingAnimationIndex++;
|
||||
}
|
||||
|
||||
if (param.rollingAnimationIndex != 0 && param.rollingAnimationIndex%param.rollingAnimationFrame == 0) {
|
||||
var currentRollingItemIndex = 0;
|
||||
if (param.rollingDirection == "up" || param.rollingDirection == "left") {
|
||||
currentRollingItemIndex = 0;
|
||||
} else if (param.rollingDirection == "right" || param.rollingDirection == "down") {
|
||||
currentRollingItemIndex = param.rollingItemCount - 1;
|
||||
}
|
||||
|
||||
var currentRollingItem = jQuery("div[class='item']:eq(" + currentRollingItemIndex + ")", rollingContentDiv);
|
||||
var rollingItem = null;
|
||||
if (param.rollingDirection == "up") {
|
||||
rollingItem = currentRollingItem.clone(true).appendTo(rollingContentDiv);
|
||||
param.rollingTop += parseFloat(param.rollingItemHeight);
|
||||
param.rollingTop = param.rollingItemHeight * Math.round(param.rollingTop/param.rollingItemHeight);
|
||||
rollingContentDiv.css("top", param.rollingTop);
|
||||
} else if (param.rollingDirection == "right") {
|
||||
rollingItem = currentRollingItem.clone(true).prependTo(rollingContentDiv);
|
||||
param.rollingLeft -= parseFloat(param.rollingItemWidth);
|
||||
param.rollingLeft = param.rollingItemWidth * Math.round(param.rollingLeft/param.rollingItemWidth);
|
||||
jQuery("#debug").html("rollingLeft:" + param.rollingLeft);
|
||||
rollingItem.css("float", "left");
|
||||
rollingContentDiv.css("left", param.rollingLeft);
|
||||
} else if (param.rollingDirection == "down") {
|
||||
rollingItem = currentRollingItem.clone(true).prependTo(rollingContentDiv);
|
||||
param.rollingTop -= parseFloat(param.rollingItemHeight);
|
||||
param.rollingTop = param.rollingItemHeight * Math.round(param.rollingTop/param.rollingItemHeight);
|
||||
rollingContentDiv.css("top", param.rollingTop);
|
||||
} else if (param.rollingDirection == "left") {
|
||||
rollingItem = currentRollingItem.clone(true).appendTo(rollingContentDiv);
|
||||
param.rollingLeft += parseFloat(param.rollingItemWidth);
|
||||
param.rollingLeft = param.rollingItemWidth * Math.round(param.rollingLeft/param.rollingItemWidth);
|
||||
jQuery("#debug").html("rollingLeft:" + param.rollingLeft);
|
||||
rollingItem.css("float", "left");
|
||||
rollingContentDiv.css("left", param.rollingLeft);
|
||||
}
|
||||
|
||||
currentRollingItem.remove();
|
||||
|
||||
if (!isReverse) {
|
||||
delayTime = param.viewingTime;
|
||||
} else {
|
||||
delayTime = 0;
|
||||
}
|
||||
|
||||
var previousRollingItem = jQuery("div[class='item']:eq(" + currentRollingItemIndex + ")", rollingContentDiv);
|
||||
jQuery("#" + param.id).trigger("viewing", [previousRollingItem]);
|
||||
param.rollingAnimationIndex = 0;
|
||||
}
|
||||
|
||||
if (param.rollingAnimationIndex != 0) {
|
||||
var currentRollingItem = jQuery("div[class='item']:eq(0)", rollingContentDiv);
|
||||
jQuery("#" + param.id).trigger("rolling", [currentRollingItem]);
|
||||
}
|
||||
setTimeout("rollingAnimation('" + id + "')", delayTime);
|
||||
}
|
||||
|
||||
jQuery.fn.initRolling = function(rollingTime, viewingTime, rollingAnimationFrame) {
|
||||
var param = rollingParam[this.attr("rollingId")];
|
||||
var rollingContentDiv = jQuery("#" + this.attr("rollingId"));
|
||||
var currentRollingItemIndex = 0;
|
||||
|
||||
if (param.rollingDirection == "up" ||
|
||||
param.rollingDirection == "left") {
|
||||
currentRollingItemIndex = 0;
|
||||
} else if (param.rollingDirection == "right" ||
|
||||
param.rollingDirection == "down") {
|
||||
currentRollingItemIndex = param.rollingItemCount - 1;
|
||||
}
|
||||
var currentRollingItem = jQuery("div[class='item']:eq(" + currentRollingItemIndex + ")", rollingContentDiv);
|
||||
this.trigger("viewing", [currentRollingItem]);
|
||||
param.rollingTime = rollingTime
|
||||
param.viewingTime = viewingTime;
|
||||
param.rollingAnimationFrame = rollingAnimationFrame;
|
||||
param.newRollingAnimationFrame = rollingAnimationFrame;
|
||||
};
|
||||
|
||||
jQuery.fn.startRolling = function(rollingTime, viewingTime, rollingAnimationFrame) {
|
||||
this.initRolling(rollingTime, viewingTime, rollingAnimationFrame);
|
||||
var param = rollingParam[this.attr("rollingId")];
|
||||
if (param.rollingIsStarted == false) {
|
||||
param.rollingIsStarted = true;
|
||||
this.trigger("start");
|
||||
setTimeout("rollingAnimation('" + this.attr("rollingId") + "')", param.viewingTime);
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
jQuery.fn.readyRolling = function(rollingTime, viewingTime, rollingAnimationFrame) {
|
||||
this.initRolling(rollingTime, viewingTime, rollingAnimationFrame);
|
||||
var param = rollingParam[this.attr("rollingId")];
|
||||
param.rollingIsStarted = false;
|
||||
setTimeout("rollingAnimation('" + this.attr("rollingId") + "')", param.viewingTime);
|
||||
return this;
|
||||
};
|
||||
|
||||
jQuery.fn.stopRolling = function() {
|
||||
this.trigger("stop");
|
||||
rollingParam[this.attr("rollingId")].rollingIsStarted = false;
|
||||
return this;
|
||||
};
|
||||
|
||||
jQuery.fn.resumeRolling = function() {
|
||||
if (rollingParam[this.attr('rollingId')].rollingIsStarted == false) {
|
||||
rollingParam[this.attr('rollingId')].rollingIsStarted = true;
|
||||
this.trigger("start");
|
||||
}
|
||||
return this;
|
||||
};
|
||||
|
||||
jQuery.fn.getRollingTime = function() {
|
||||
return rollingParam[this.attr('rollingId')].rollingTime;
|
||||
};
|
||||
|
||||
jQuery.fn.getViewingTime = function() {
|
||||
return rollingParam[this.attr('rollingId')].viewingTime;
|
||||
};
|
||||
|
||||
jQuery.fn.getRollingAnimationFrame = function() {
|
||||
return rollingParam[this.attr('rollingId')].rollingAnimationFrame;
|
||||
};
|
||||
|
||||
jQuery.fn.getRollingDirection = function() {
|
||||
return rollingParam[this.attr('rollingId')].rollingDirection;
|
||||
};
|
||||
|
||||
jQuery.fn.setRollingTime = function(rollingTime) {
|
||||
rollingParam[this.attr('rollingId')].rollingTime = rollingTime;
|
||||
return this;
|
||||
};
|
||||
|
||||
jQuery.fn.setViewingTime = function(viewingTime) {
|
||||
rollingParam[this.attr('rollingId')].viewingTime = viewingTime;
|
||||
return this;
|
||||
};
|
||||
|
||||
jQuery.fn.setRollingAnimationFrame = function(rollingAnimationFrame) {
|
||||
var oldStep = rollingParam[this.attr('rollingId')].rollingAnimationFrame;
|
||||
var oldIndex = rollingParam[this.attr('rollingId')].rollingAnimationIndex;
|
||||
var multiplier = rollingAnimationFrame / oldStep;
|
||||
rollingParam[this.attr('rollingId')].rollingAnimationFrame = rollingAnimationFrame;
|
||||
rollingParam[this.attr('rollingId')].newRollingAnimationFrame = rollingAnimationFrame;
|
||||
rollingParam[this.attr('rollingId')].rollingAnimationIndex = Math.round(multiplier * oldIndex);
|
||||
return this;
|
||||
};
|
||||
|
||||
jQuery.fn.setRollingAnimationFrameNext = function(rollingAnimationFrame) {
|
||||
rollingParam[this.attr('rollingId')].newRollingAnimationFrame = rollingAnimationFrame;
|
||||
return this;
|
||||
}
|
||||
|
||||
jQuery.fn.getRollingItems = function() {
|
||||
return jQuery("div[class=item]", this);
|
||||
};
|
||||
|
||||
jQuery.fn.getViewingItemCount = function() {
|
||||
return rollingParam[this.attr('rollingId')].viewingItemCount;
|
||||
};
|
||||
|
||||
jQuery.fn.bindViewingEvent = function(rollingEvent) {
|
||||
return this.bind("viewing", rollingEvent);
|
||||
};
|
||||
|
||||
jQuery.fn.unbindViewingEvent = function() {
|
||||
return this.unbind("viewing");
|
||||
};
|
||||
|
||||
jQuery.fn.bindRollingEvent = function(rollingEvent) {
|
||||
return this.bind("rolling", rollingEvent);
|
||||
};
|
||||
|
||||
jQuery.fn.unbindRollingEvent = function() {
|
||||
return this.unbind("rolling");
|
||||
};
|
||||
|
||||
jQuery.fn.bindStartEvent = function(rollingEvent) {
|
||||
return this.bind("start", rollingEvent);
|
||||
};
|
||||
|
||||
jQuery.fn.unbindStartEvent = function() {
|
||||
return this.unbind("start");
|
||||
};
|
||||
|
||||
jQuery.fn.bindStopEvent = function(rollingEvent) {
|
||||
return this.bind("stop", rollingEvent);
|
||||
};
|
||||
|
||||
jQuery.fn.unbindStopEvent = function() {
|
||||
return this.unbind("stop");
|
||||
};
|
||||
|
||||
jQuery.fn.bindReverseEvent = function(rollingEvent) {
|
||||
return this.bind("reverse", rollingEvent);
|
||||
};
|
||||
|
||||
jQuery.fn.unbindReverseEvent = function() {
|
||||
return this.unbind("reverse");
|
||||
};
|
||||
|
||||
jQuery.fn.reverseRolling = function() {
|
||||
rollingParam[this.attr('rollingId')].requestReverse = true;
|
||||
return this;
|
||||
};
|
||||
|
||||
})(jQuery);
|
||||
@@ -1,247 +0,0 @@
|
||||
/**
|
||||
* jquery.scrollFollow.js
|
||||
* Copyright (c) 2008 Net Perspective (http://kitchen.net-perspective.com/)
|
||||
* Licensed under the MIT License (http://www.opensource.org/licenses/mit-license.php)
|
||||
*
|
||||
* @author R.A. Ray
|
||||
*
|
||||
* @projectDescription jQuery plugin for allowing an element to animate down as the user scrolls the page.
|
||||
*
|
||||
* @version 0.4.0
|
||||
*
|
||||
* @requires jquery.js (tested with 1.2.6)
|
||||
* @requires ui.core.js (tested with 1.5.2)
|
||||
*
|
||||
* @optional jquery.cookie.js (http://www.stilbuero.de/2006/09/17/cookie-plugin-for-jquery/)
|
||||
* @optional jquery.easing.js (http://gsgd.co.uk/sandbox/jquery/easing/ - tested with 1.3)
|
||||
*
|
||||
* @param speed int - Duration of animation (in milliseconds)
|
||||
* default: 500
|
||||
* @param offset int - Number of pixels box should remain from top of viewport
|
||||
* default: 0
|
||||
* @param easing string - Any one of the easing options from the easing plugin - Requires jQuery Easing Plugin < http://gsgd.co.uk/sandbox/jquery/easing/ >
|
||||
* default: 'linear'
|
||||
* @param container string - ID of the containing div
|
||||
* default: box's immediate parent
|
||||
* @param killSwitch string - ID of the On/Off toggle element
|
||||
* default: 'killSwitch'
|
||||
* @param onText string - killSwitch text to be displayed if sliding is enabled
|
||||
* default: 'Turn Slide Off'
|
||||
* @param offText string - killSwitch text to be displayed if sliding is disabled
|
||||
* default: 'Turn Slide On'
|
||||
* @param relativeTo string - Scroll animation can be relative to either the 'top' or 'bottom' of the viewport
|
||||
* default: 'top'
|
||||
* @param delay int - Time between the end of the scroll and the beginning of the animation in milliseconds
|
||||
* default: 0
|
||||
*/
|
||||
|
||||
( function( $ ) {
|
||||
|
||||
$.scrollFollow = function ( box, options )
|
||||
{
|
||||
// Convert box into a jQuery object
|
||||
box = $( box );
|
||||
|
||||
// 'box' is the object to be animated
|
||||
var position = box.css( 'position' );
|
||||
|
||||
function ani()
|
||||
{
|
||||
// The script runs on every scroll which really means many times during a scroll.
|
||||
// We don't want multiple slides to queue up.
|
||||
box.queue( [ ] );
|
||||
// A bunch of values we need to determine where to animate to
|
||||
var viewportHeight = parseInt( $( window ).height() );
|
||||
var pageScroll = parseInt( $( document ).scrollTop() );
|
||||
var parentTop = parseInt( $("body").offset().top );
|
||||
var parentHeight = parseInt( $("body").height() );
|
||||
var boxHeight = parseInt( box.height() + ( parseInt( box.css( 'marginTop' ) ) || 0 ) + ( parseInt( box.css( 'marginBottom' ) ) || 0 ) );
|
||||
var aniTop;
|
||||
|
||||
// Make sure the user wants the animation to happen
|
||||
if ( isActive )
|
||||
{
|
||||
// If the box should animate relative to the top of the window
|
||||
if ( options.relativeTo == 'top' )
|
||||
{
|
||||
// Don't animate until the top of the window is close enough to the top of the box
|
||||
if ( box.initialOffsetTop >= ( pageScroll + options.offset ) )
|
||||
{
|
||||
aniTop = box.initialTop;
|
||||
}
|
||||
else
|
||||
{
|
||||
aniTop = Math.min( ( Math.max( ( -parentTop ), ( pageScroll - box.initialOffsetTop + box.initialTop ) ) + options.offset ), ( parentHeight - boxHeight - box.paddingAdjustment ) );
|
||||
}
|
||||
}
|
||||
// If the box should animate relative to the bottom of the window
|
||||
else if ( options.relativeTo == 'bottom' )
|
||||
{
|
||||
// Don't animate until the bottom of the window is close enough to the bottom of the box
|
||||
if ( ( box.initialOffsetTop + boxHeight ) >= ( pageScroll + options.offset + viewportHeight ) )
|
||||
{
|
||||
aniTop = box.initialTop;
|
||||
}
|
||||
else
|
||||
{
|
||||
aniTop = Math.min( ( pageScroll + viewportHeight - boxHeight - options.offset ), ( parentHeight - boxHeight ) );
|
||||
}
|
||||
}
|
||||
|
||||
// Checks to see if the relevant scroll was the last one
|
||||
// "-20" is to account for inaccuracy in the timeout
|
||||
if ( ( new Date().getTime() - box.lastScroll ) >= ( options.delay - 20 ) )
|
||||
{
|
||||
box.animate(
|
||||
{
|
||||
top: aniTop
|
||||
}, options.speed, options.easing
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// For user-initiated stopping of the slide
|
||||
var isActive = true;
|
||||
|
||||
if ( $.cookie != undefined )
|
||||
{
|
||||
if( $.cookie( 'scrollFollowSetting' + box.attr( 'id' ) ) == 'false' )
|
||||
{
|
||||
var isActive = false;
|
||||
|
||||
$( '#' + options.killSwitch ).text( options.offText )
|
||||
.toggle(
|
||||
function ()
|
||||
{
|
||||
isActive = true;
|
||||
|
||||
$( this ).text( options.onText );
|
||||
|
||||
$.cookie( 'scrollFollowSetting' + box.attr( 'id' ), true, { expires: 365, path: '/'} );
|
||||
|
||||
ani();
|
||||
},
|
||||
function ()
|
||||
{
|
||||
isActive = false;
|
||||
|
||||
$( this ).text( options.offText );
|
||||
|
||||
box.animate(
|
||||
{
|
||||
top: box.initialTop
|
||||
}, options.speed, options.easing
|
||||
);
|
||||
|
||||
$.cookie( 'scrollFollowSetting' + box.attr( 'id' ), false, { expires: 365, path: '/'} );
|
||||
}
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
$( '#' + options.killSwitch ).text( options.onText )
|
||||
.toggle(
|
||||
function ()
|
||||
{
|
||||
isActive = false;
|
||||
|
||||
$( this ).text( options.offText );
|
||||
|
||||
box.animate(
|
||||
{
|
||||
top: box.initialTop
|
||||
}, 0
|
||||
);
|
||||
|
||||
$.cookie( 'scrollFollowSetting' + box.attr( 'id' ), false, { expires: 365, path: '/'} );
|
||||
},
|
||||
function ()
|
||||
{
|
||||
isActive = true;
|
||||
|
||||
$( this ).text( options.onText );
|
||||
|
||||
$.cookie( 'scrollFollowSetting' + box.attr( 'id' ), true, { expires: 365, path: '/'} );
|
||||
|
||||
ani();
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
// If no parent ID was specified, and the immediate parent does not have an ID
|
||||
// options.container will be undefined. So we need to figure out the parent element.
|
||||
if ( options.container == '')
|
||||
{
|
||||
box.cont = box.parent();
|
||||
}
|
||||
else
|
||||
{
|
||||
box.cont = $( '#' + options.container );
|
||||
}
|
||||
|
||||
// Finds the default positioning of the box.
|
||||
box.initialOffsetTop = parseInt( box.offset().top );
|
||||
box.initialTop = parseInt( box.css( 'top' ) ) || 0;
|
||||
|
||||
// Hack to fix different treatment of boxes positioned 'absolute' and 'relative'
|
||||
if ( box.css( 'position' ) == 'relative' )
|
||||
{
|
||||
box.paddingAdjustment = parseInt( $("body").css( 'paddingTop' ) ) + parseInt( $("body").css( 'paddingBottom' ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
box.paddingAdjustment = 0;
|
||||
}
|
||||
|
||||
// Animate the box when the page is scrolled
|
||||
$( window ).scroll( function ()
|
||||
{
|
||||
// Sets up the delay of the animation
|
||||
$.fn.scrollFollow.interval = setTimeout( function(){ ani();} , options.delay );
|
||||
|
||||
// To check against right before setting the animation
|
||||
box.lastScroll = new Date().getTime();
|
||||
}
|
||||
);
|
||||
|
||||
// Animate the box when the page is resized
|
||||
$( window ).resize( function ()
|
||||
{
|
||||
// Sets up the delay of the animation
|
||||
$.fn.scrollFollow.interval = setTimeout( function(){ ani();} , options.delay );
|
||||
|
||||
// To check against right before setting the animation
|
||||
box.lastScroll = new Date().getTime();
|
||||
}
|
||||
);
|
||||
|
||||
// Run an initial animation on page load
|
||||
box.lastScroll = 0;
|
||||
|
||||
ani();
|
||||
};
|
||||
|
||||
$.fn.scrollFollow = function ( options )
|
||||
{
|
||||
options = options || {};
|
||||
options.relativeTo = options.relativeTo || 'top';
|
||||
options.speed = options.speed || 1000;
|
||||
options.offset = options.offset || 10;
|
||||
options.easing = options.easing || 'swing';
|
||||
options.container = options.container || this.parent().attr( 'id' );
|
||||
options.killSwitch = options.killSwitch || 'killSwitch';
|
||||
options.onText = options.onText || 'Turn Slide Off';
|
||||
options.offText = options.offText || 'Turn Slide On';
|
||||
options.delay = options.delay || 0;
|
||||
|
||||
this.each( function()
|
||||
{
|
||||
new $.scrollFollow( this, options );
|
||||
}
|
||||
);
|
||||
|
||||
return this;
|
||||
};
|
||||
})( jQuery );
|
||||
@@ -1,23 +0,0 @@
|
||||
/* Korean initialisation for the jQuery calendar extension. */
|
||||
/* Written by DaeKwon Kang (ncrash.dk@gmail.com), Edited by Genie. */
|
||||
jQuery(function($){
|
||||
$.datepicker.regional['ko'] = {
|
||||
closeText: '닫기',
|
||||
prevText: '이전달',
|
||||
nextText: '다음달',
|
||||
currentText: '오늘',
|
||||
monthNames: ['1월','2월','3월','4월','5월','6월',
|
||||
'7월','8월','9월','10월','11월','12월'],
|
||||
monthNamesShort: ['1월','2월','3월','4월','5월','6월',
|
||||
'7월','8월','9월','10월','11월','12월'],
|
||||
dayNames: ['일요일','월요일','화요일','수요일','목요일','금요일','토요일'],
|
||||
dayNamesShort: ['일','월','화','수','목','금','토'],
|
||||
dayNamesMin: ['일','월','화','수','목','금','토'],
|
||||
weekHeader: 'Wk',
|
||||
dateFormat: 'yy-mm-dd',
|
||||
firstDay: 0,
|
||||
isRTL: false,
|
||||
showMonthAfterYear: true,
|
||||
yearSuffix: '년'};
|
||||
$.datepicker.setDefaults($.datepicker.regional['ko']);
|
||||
});
|
||||
@@ -1,6 +0,0 @@
|
||||
/*!
|
||||
* jQuery Cycle2 Carousel Plugin
|
||||
* http://jquery.malsup.com/cycle2/
|
||||
* Copyright (c) 2014 M. Alsup; Dual licensed: MIT/GPL
|
||||
*/
|
||||
!function(a){"use strict";a.fn.cycle.transitions.carousel={preInit:function(b){b.hideNonActive=!1,b.container.on("cycle-destroyed",a.proxy(this.onDestroy,b.API)),b.API.stop=this.stop;for(var c=0;c<b.slides.length;c++)a(b.slides[c]).css("position","static")},postInit:function(b){var c,d,e,f,g=b.carouselVertical;b.carouselWrap=b.container.wrap('<div class="cycle-carousel-wrap"></div>').parent(),b.carouselWrap.css({margin:0,padding:0,position:"absolute",top:0,left:0}),d=b.container.css("overflow","visible"),e=b.carouselWrap.css("overflow","hidden"),g?(f=b.carouselSlideDimension=b.slides.eq(0).outerHeight(!0),b.carouselWrap.css("height",b.carouselVisible*f),b.carouselOffset=0,b.API.getSlideExpr=function(a){return a},b.API.next=this.next,b.API.prev=this.prev,b.API.prepareTx=this.prepareTx,b.API.getTx=this.getTx,b.API.stop=this.stop,b.API.onDestroy=this.onDestroy,b.API.reinit=this.reinit,b.API.doTransition=this.doTransition,c=b.container.find(b.slides),b.slideCount=c.length):(f=b.carouselSlideDimension=b.slides.eq(0).outerWidth(!0),b.carouselWrap.css("width",b.carouselVisible*f),b.carouselOffset=0,b.API.getSlideExpr=function(a){return a},b.API.next=this.next,b.API.prev=this.prev,b.API.prepareTx=this.prepareTx,b.API.getTx=this.getTx,b.API.stop=this.stop,b.API.onDestroy=this.onDestroy,b.API.reinit=this.reinit,b.API.doTransition=this.doTransition,c=b.container.find(b.slides),b.slideCount=c.length),b.carouselWrap.on("cycle-update-view",function(){b.API.updateView()}),b.API.updateView()},getTx:function(a,b,c,d){var e={};return e.oldSlide=c,e.newSlide=b,e.opts=d,e.fx="carousel",e.slides=d.slides,e.slideCount=d.slides.length,[e]},prepareTx:function(a,b){var c,d,e,f,g=this.data("cycle.opts");if(g.busy)return;g.API.stop(),g.busy=!0,g.API.trigger("cycle-before",g),g.reverse=b,g.nextSlide=g.API.calcNextSlide(),g.currSlide=g.API.calcPrevSlide(),c=g.nextSlide-g.currSlide,g.allowWrap===!1&&g.currSlide===g.slideCount-1&&g.nextSlide===0&&g.reverse?c=-g.slideCount+1:g.allowWrap===!1&&g.currSlide===0&&g.nextSlide===g.slideCount-1&&!g.reverse&&(c=g.slideCount-1),d=g.carouselVertical,e=g.carouselSlideDimension*c,f=g.speed,g.carouselOffset+=e,g.container.animate(d?{top:g.carouselOffset}:{left:g.carouselOffset},f,g.easing,function(){g.API.doTransition()})},doTransition:function(){var a=this.data("cycle.opts");a.busy=!1,a.container.css(a.carouselVertical?{top:a.carouselOffset}:{left:a.carouselOffset}),a.API.trigger("cycle-after",a),a.API.queue()},next:function(){var a=this.data("cycle.opts");if(!a.busy||a.manualTrump){var b=a.API.calcNextSlide();a.allowWrap===!1&&b<a.currSlide&&a.currSlide!==a.slideCount-1||a.API.prepareTx(!1,a.reverse)}},prev:function(){var a=this.data("cycle.opts");if(!a.busy||a.manualTrump){var b=a.API.calcPrevSlide();a.allowWrap===!1&&b>a.currSlide&&a.currSlide!==0||a.API.prepareTx(!1,a.reverse)}},stop:function(){var b=this.data("cycle.opts");b.timeoutId&&clearTimeout(b.timeoutId),b.timeoutId=0,b.container.stop(),b.carouselWrap.stop(),b.API.trigger("cycle-stopped",b)},onDestroy:function(){var a=this.data("cycle.opts");a.carouselWrap.remove(),a.carouselWrap=null,a.container.unwrap()},reinit:function(){var b=this.data("cycle.opts"),c=a.extend({},b);this.cycle("destroy"),this.cycle(c)}}}(jQuery);
|
||||
@@ -1,22 +0,0 @@
|
||||
function flogin_submit(f) {
|
||||
if (!f.mb_id.value) {
|
||||
alert("아이디를 입력해주세요.");
|
||||
f.mb_id.focus();
|
||||
return false;
|
||||
}
|
||||
if (!f.mb_password.value) {
|
||||
alert("비밀번호를 입력해주세요.");
|
||||
f.mb_password.focus();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
// flogin_submit 함수는 member.js 파일에 있으므로 여기서는 자동로그인 확인 스크립트만 남겨둡니다.
|
||||
jQuery(function($){
|
||||
$("#login_auto_login").click(function(){
|
||||
if (this.checked) {
|
||||
this.checked = confirm("자동로그인을 사용하시면 다음부터 회원아이디와 비밀번호를 입력하실 필요가 없습니다.\n\n공공장소에서는 개인정보가 유출될 수 있으니 사용을 자제하여 주십시오.\n\n자동로그인을 사용하시겠습니까?");
|
||||
}
|
||||
});
|
||||
});
|
||||
@@ -1,38 +0,0 @@
|
||||
/**
|
||||
* 지정된 범위(scope) 내에서 '.rb-autounwrap' 클래스를 찾아 포장을 해제하는 함수
|
||||
* @param {HTMLElement} scope - 검색을 수행할 DOM 요소. 제공되지 않으면 문서 전체를 검색합니다.
|
||||
*/
|
||||
function unwrapModuleContainers(scope) {
|
||||
// 검색 범위를 지정합니다.
|
||||
const searchScope = scope || document;
|
||||
|
||||
// 'rb-autounwrap' 클래스를 가진 모든 모듈 컨테이너를 찾습니다.
|
||||
const autoUnwrapModules = searchScope.querySelectorAll('.rb-autounwrap');
|
||||
|
||||
autoUnwrapModules.forEach(moduleContainer => {
|
||||
// 이 모듈이 리빌더의 .content_box 안에 직접적으로 포함되어 있는지 확인합니다.
|
||||
if (moduleContainer.parentElement.closest('.content_box')) {
|
||||
// 부모가 .content_box라면, 이 모듈은 중첩된 상태입니다.
|
||||
// 따라서, moduleContainer의 포장을 해제합니다.
|
||||
|
||||
// 1. moduleContainer 안의 모든 자식 요소들을 가져옵니다.
|
||||
const children = Array.from(moduleContainer.childNodes);
|
||||
|
||||
// 2. moduleContainer의 부모 요소를 찾습니다.
|
||||
const parent = moduleContainer.parentNode;
|
||||
|
||||
// 3. 모든 자식 요소들을 moduleContainer의 앞으로 이동시킵니다.
|
||||
children.forEach(child => {
|
||||
parent.insertBefore(child, moduleContainer);
|
||||
});
|
||||
|
||||
// 4. 이제 비어있는 moduleContainer를 제거합니다.
|
||||
parent.removeChild(moduleContainer);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// 페이지가 처음 로드될 때 한 번 실행하여, 정적으로 포함된 모듈도 처리할 수 있도록 합니다.
|
||||
document.addEventListener('DOMContentLoaded', function() {
|
||||
unwrapModuleContainers(document.body);
|
||||
});
|
||||
@@ -1,164 +0,0 @@
|
||||
var netfu_board = function() {
|
||||
|
||||
this.del = function() {
|
||||
}
|
||||
|
||||
|
||||
this.board_read = function(el, bo_table, no) {
|
||||
$.post("/include/regist.php", "mode=board_read&bo_table="+bo_table+"&no="+no, function(data){
|
||||
data = $.parseJSON(data);
|
||||
if(data.msg) alert(data.msg);
|
||||
if(data.js) eval(data.js);
|
||||
if(data.move) location.href = data.move;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
this.board_btn_click = function(el, bo_table, no, code) {
|
||||
$.post("/include/regist.php", "mode=board_btn_click&code="+code+"&bo_table="+bo_table+"&no="+no, function(data) {
|
||||
data = $.parseJSON(data);
|
||||
if(data.msg) alert(data.msg);
|
||||
if(data.js) eval(data.js);
|
||||
if(data.move) location.href = data.move;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
this.board_add_file = function(el, code) {
|
||||
switch(code) {
|
||||
case "add":
|
||||
if(location.href.indexOf("/m/")==-1) {
|
||||
var tag = '<div class="file_item_"><div class="item_"><div class="file_bx"><input type="file" id="" name="file_name[]" value=""></div></div><div style="float:left; margin-bottom:5px; width:100%; "></div></div>';
|
||||
} else {
|
||||
var tag = '<div class="file_item_"><div class="item_"><span><input type="file" id="" name="file_name[]" value=""></span></div><div style="float:left; margin-bottom:5px; width:100%; "></div></div>';
|
||||
}
|
||||
$(el).closest("tr").find("td.file").find(".file-in-").append(tag);
|
||||
break;
|
||||
|
||||
case "del":
|
||||
if(confirm("삭제하시겠습니까?")) {
|
||||
var _len = $(el).closest("tr").find(".file").find(".file_item_").length;
|
||||
if(_len<=1) {
|
||||
alert("1개이하는 삭제할 수 없습니다.");
|
||||
return;
|
||||
}
|
||||
$(el).closest("tr").find(".file").find(".file_item_").eq(_len-1).remove();
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.board_file_delete = function(el, bo_table, no, k) {
|
||||
var chk = $(el).closest(".file_item_").find(".file_chk-")[0].checked;
|
||||
if(!chk) {
|
||||
alert("파일을 삭제하실려면 파일명앞에 체크박스에 체크해주셔야합니다.");
|
||||
} else {
|
||||
if(confirm("삭제하시겠습니까?")) {
|
||||
$.post(url+"/board/process/regist.php", "mode=file_delete&bo_table="+bo_table+"&no="+no+"&k="+k, function(data){
|
||||
data = $.parseJSON(data);
|
||||
if(data.msg) alert(data.msg);
|
||||
if(data.move) location.href = data.move;
|
||||
if(data.js) eval(data.js);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.is_goods = function(el) {
|
||||
var board_code = $(el).attr("board_code");
|
||||
var code = $(el).attr("code");
|
||||
var bo_table = $(el).attr("bo_table");
|
||||
var no = $(el).attr("no");
|
||||
$.post(url+"/board/process/good.php", { ajax:'true', good:'good', board_code:board_code, code:code, bo_table:bo_table, wr_no:no }, function(result){
|
||||
switch(result){
|
||||
case '0046': alert("회원만 추천 가능합니다."); break;
|
||||
case '0047': alert("값이 제대로 넘어오지 않았습니다."); break;
|
||||
case '0048': alert("해당 게시물에서만 추천 또는 비추천 하실 수 있습니다."); break;
|
||||
case '0049': alert("게시판이 존재하지 않습니다."); break;
|
||||
case '0050': alert("자신의 글에는 추천 또는 비추천 하실 수 없습니다."); break;
|
||||
case '0051': alert("이 게시판은 추천 기능을 사용하지 않습니다."); break;
|
||||
case '0052': alert("이 게시판은 비추천 기능을 사용하지 않습니다."); break;
|
||||
default :
|
||||
alert(result);
|
||||
if(result.indexOf('이 글을')>=0) location.reload();
|
||||
break;
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
this.fwrite_submit = function() {
|
||||
|
||||
var f = document.fwrite;
|
||||
var con = '';
|
||||
|
||||
if(location.href.indexOf("/m/")==-1) {
|
||||
if (document.getElementById('tx_wr_content')) {
|
||||
if (!ed_wr_content.outputBodyText()) {
|
||||
alert('내용을 입력하십시오.');
|
||||
ed_wr_content.returnFalse();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
// : 게시판 글쓸때 이 함수가 꼭 있어야함.
|
||||
editor_check();
|
||||
|
||||
document.getElementById('tx_wr_content').value = ed_wr_content.outputBodyHTML();
|
||||
}
|
||||
|
||||
var subject = "";
|
||||
var content = "";
|
||||
|
||||
if(validate(f)){
|
||||
|
||||
|
||||
if(_editor_use['wr_content']) con = _editor_use['wr_content'].outputBodyHTML();
|
||||
else con = f.wr_content.value;
|
||||
|
||||
$.ajax({
|
||||
url: "/include/regist.php",
|
||||
type: "POST",
|
||||
data: {
|
||||
"mode":"board_filter",
|
||||
"bo_table" : f.bo_table.value,
|
||||
"subject": f.wr_subject.value,
|
||||
"content": con
|
||||
},
|
||||
dataType: "json",
|
||||
async: false,
|
||||
cache: false,
|
||||
success: function(data, textStatus) {
|
||||
subject = data.subject;
|
||||
content = data.content;
|
||||
|
||||
if (subject) {
|
||||
alert("제목에 금지단어('"+subject+"')가 포함되어있습니다");
|
||||
f.wr_subject.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
if (content) {
|
||||
alert("내용에 금지단어('"+content+"')가 포함되어있습니다");
|
||||
if (typeof(ed_wr_content) != "undefined")
|
||||
ed_wr_content.returnFalse();
|
||||
else
|
||||
f.wr_content.focus();
|
||||
return false;
|
||||
}
|
||||
|
||||
f.action = '/board/process/regist.php';
|
||||
f.submit();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
var netfu_board = new netfu_board();
|
||||
@@ -1,310 +0,0 @@
|
||||
var netfu_news = function() {
|
||||
|
||||
this.page_code = '';
|
||||
|
||||
this.all_menu = function(code) {
|
||||
|
||||
//if(_display=='none') $(".side_menu2").fadeOut();
|
||||
//else $(".side_menu2").fadeIn('slow');
|
||||
|
||||
var _class = $(".allMenu").attr("class");
|
||||
switch(code) {
|
||||
case "open":
|
||||
$(".allMenu").fadeIn('slow');
|
||||
//$(".allMenu").removeClass("none_");
|
||||
break;
|
||||
case "close":
|
||||
$(".allMenu").fadeOut();
|
||||
//$(".allMenu").addClass("none_");
|
||||
break;
|
||||
default:
|
||||
if(_class.indexOf("none_")>=0) $(".allMenu").fadeIn('slow');
|
||||
else $(".allMenu").fadeOut();
|
||||
|
||||
//if(_class.indexOf("none_")>=0) $(".allMenu").removeClass("none_");
|
||||
//else $(".allMenu").addClass("none_");
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.click_more_page = {};
|
||||
this.click_more2 = function(el, code, section) {
|
||||
if(!this.click_more_page[code+section]) this.click_more_page[code+section] = 1;
|
||||
this.click_more_page[code+section]++;
|
||||
|
||||
$.post("/include/regist.php", "mode=ajax_more_click&code="+code+"&page="+this.click_more_page[code+section]+"§ion="+section, function(data) {
|
||||
data = $.parseJSON(data);
|
||||
if(data.js) eval(data.js);
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
this.login_tab = function(el, code) {
|
||||
$(".login_form_").css({"display":"none"});
|
||||
$(".login_tab").find(".tab").removeClass("on");
|
||||
$(el).addClass("on");
|
||||
switch(code) {
|
||||
case 'login':
|
||||
$(".login_form_.login_form").css({"display":"block"});
|
||||
break;
|
||||
|
||||
case 'sns':
|
||||
$(".login_form_.sns_login").css({"display":"block"});
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.search = function(el) {
|
||||
var form = $(el).closest("form");
|
||||
form.submit();
|
||||
}
|
||||
|
||||
|
||||
this.news_scrap = function(no) {
|
||||
$.post('/include/regist.php', { mode:'news_scrap', ajax:1, no:no }, function(result){
|
||||
if( result=='0012') {
|
||||
alert("회원만 스크랩 가능합니다.\n\n회원이시라면 로그인해 주세요.");
|
||||
if(netfu_util.page_check=='mobile') location.href = "/m/page/login.php?url="+encodeURIComponent(location.href);
|
||||
else location.href = "/member/login.php?url="+encodeURIComponent(location.href);
|
||||
} else {
|
||||
if( result == '0013' ){
|
||||
alert("기사 스크랩중 오류가 발생했습니다.");
|
||||
} else if( result == '0014' ){
|
||||
alert("이미 스크랩한 기사 입니다.");
|
||||
} else {
|
||||
alert("뉴스 기사를 스크랩 하였습니다.");
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
this.mail_send = function(){
|
||||
var send_mail = $('#send_mail').val();
|
||||
if( !send_mail || send_mail == '' ){
|
||||
alert("보내는분 이메일 주소를 입력해 주세요.");
|
||||
$('#send_mail').focus();
|
||||
return;
|
||||
}
|
||||
var receive_mail = $('#receive_mail').val();
|
||||
if( !receive_mail || receive_mail == '' ){
|
||||
alert("받는분 이메일 주소를 입력해 주세요.");
|
||||
$('#receive_mail').focus();
|
||||
return;
|
||||
}
|
||||
var mail_options = {
|
||||
beforeSubmit: function(formData, jqForm, form_options){
|
||||
var queryString = $.param(formData);
|
||||
return true;
|
||||
},
|
||||
success : function(responseText, statusText, xhr, $form){
|
||||
alert("기사 내용이 메일로 발송 되었습니다.");
|
||||
mail_layer_close();
|
||||
}
|
||||
};
|
||||
$('#mailLayerFrm').ajaxSubmit(mail_options);
|
||||
//$('#mailLayerFrm').submit();
|
||||
}
|
||||
|
||||
|
||||
this.comment_box = function(el, no, code) {
|
||||
|
||||
var form = document.forms['fcomment'];
|
||||
|
||||
switch(code) {
|
||||
case 'comment_insert':
|
||||
case 'comment_update':
|
||||
var obj = $(el).closest('.reply_con');
|
||||
$(".reply_list_start").find(".reply_con_write__").css({"display":"none"});
|
||||
var form_is = obj.find(".reply_con_write__");
|
||||
if(!form_is[0]) {
|
||||
var _clone = $(".reply_con_write__").eq(0).clone();
|
||||
_clone.find("[name='comment_id']").val(no);
|
||||
_clone.find("form").attr("name", "freply_"+no);
|
||||
_clone.removeClass("mt0");
|
||||
|
||||
if(location.href.indexOf("/m/")>=0) {
|
||||
obj.find(".comment01.comment_con").append(_clone);
|
||||
} else
|
||||
obj.append(_clone);
|
||||
|
||||
} else {
|
||||
obj.find(".reply_con_write__").css({"display":"block"});
|
||||
}
|
||||
if(code=='comment_update') obj.find("textarea").val(obj.find(".reply_text").find("p").html());
|
||||
obj.find("[name='mode']").val(code);
|
||||
break;
|
||||
|
||||
case 'comment_delete':
|
||||
if( is_member ) {
|
||||
if( confirm("댓글을 삭제하시겠습니까?")){
|
||||
var actions = form.action.indexOf("/board/")>=0 ? '/board/process/delete_comment.php' : form.action;
|
||||
var token = form.token ? form.token.value : '';
|
||||
$.post(actions,{ mode:'comment_delete', ajax:1, comment_id:no, bo_table:form.bo_table.value, token:token }, function(result){
|
||||
result = $.parseJSON(result);
|
||||
if(result.msg) alert(result.msg);
|
||||
location.reload();
|
||||
});
|
||||
}
|
||||
} else {
|
||||
netfu_util.password_click(el, form.bo_table.value, no, code, '.reply_con_list_');
|
||||
}
|
||||
break;
|
||||
|
||||
case 'comment_report':
|
||||
if( confirm("기사의 해당 댓글을 신고하시겠습니까?")){
|
||||
$.post('/include/regist.php',{ mode:'comment_report', ajax:1, comment_id:no }, function(result){
|
||||
switch(result){
|
||||
case '0011':
|
||||
alert("등록된 코멘트가 없거나 코멘트 글이 아닙니다.");
|
||||
break;
|
||||
case '0020':
|
||||
alert("이미 신고하신 글 입니다.");
|
||||
break;
|
||||
default:
|
||||
alert("해당 댓글을 신고 하였습니다.");
|
||||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
this.is_goods = function( el, wr_id, is_good ){
|
||||
var form = document.forms['fcomment'];
|
||||
var _para = $(form).serialize();
|
||||
$.post('/include/regist.php', _para+"&mode=comment_is_goods&ajax=1&wr_id="+wr_id+"&is_good="+is_good, function(result){
|
||||
result = $.parseJSON(result);
|
||||
|
||||
if(result.comment_is) {
|
||||
if(location.href.indexOf("/m/")>=0) {
|
||||
var _count = parseInt($(el).find("span").text());
|
||||
alert(_count);
|
||||
$(el).find("span").text((_count+1));
|
||||
} else {
|
||||
var _count = parseInt($(el).find("em").text());
|
||||
$(el).find("em").text((_count+1));
|
||||
}
|
||||
}
|
||||
|
||||
if(result.msg) {
|
||||
alert(result.msg);
|
||||
}
|
||||
else {
|
||||
if( is_good == 'good' ){
|
||||
$('#good_'+wr_id).html(result);
|
||||
} else {
|
||||
$('#nogood_'+wr_id).html(result);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
// : 이메일
|
||||
this.send_email = function(el, no) {
|
||||
|
||||
if(el) {
|
||||
var _offset = $(el).offset();
|
||||
var _width = $(".mail_box").width();
|
||||
$(".mail_box").css({"top":(_offset.top+37)+'px', "left":(_offset.left-_width+60)+'px'});
|
||||
}
|
||||
|
||||
var _class = $(".mail_box").attr("class");
|
||||
if(_class.indexOf("none_")>=0) $(".mail_box").removeClass("none_");
|
||||
else $(".mail_box").addClass("none_");
|
||||
}
|
||||
|
||||
this.send_mail_process = function() {
|
||||
var form = document.forms['mailLayerFrm'];
|
||||
|
||||
if( !form.send_mail.value ){
|
||||
alert("보내는분 이메일 주소를 입력해 주세요.");
|
||||
form.send_mail.focus();
|
||||
return;
|
||||
}
|
||||
if( !form.receive_mail.value ){
|
||||
alert("받는분 이메일 주소를 입력해 주세요.");
|
||||
form.send_mail.focus();
|
||||
return;
|
||||
}
|
||||
|
||||
var mail_options = {
|
||||
beforeSubmit: function(){
|
||||
},
|
||||
success : function(){
|
||||
alert("기사 내용이 메일로 발송 되었습니다.");
|
||||
netfu_news.send_email();
|
||||
}
|
||||
};
|
||||
|
||||
$(form).ajaxSubmit(mail_options);
|
||||
|
||||
}
|
||||
|
||||
|
||||
this.support_price_click = function(el, k) {
|
||||
var form = document.forms['fsupport'];
|
||||
var _para = $(form).serialize();
|
||||
$.post("/include/regist.php", _para+"&mode=support_price_click&k="+k, function(data){
|
||||
data = $.parseJSON(data);
|
||||
if(data.js) eval(data.js);
|
||||
$(el).closest(".tab").find("li").removeClass("on");
|
||||
$(el).addClass("on");
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
this.add_price = function(price) {
|
||||
var form = document.forms['fsupport'];
|
||||
var _para = $(form).serialize();
|
||||
$.post("/include/regist.php", _para+"&mode=support_price_add&price="+price, function(data){
|
||||
data = $.parseJSON(data);
|
||||
if(data.msg) alert(data.msg);
|
||||
if(data.js) eval(data.js);
|
||||
if(data.move) location.href = data.move;
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
this.more_page = {};
|
||||
this.more_view = function(type, limit, p_limit) {
|
||||
var _para = $(document.forms['base_form']).serialize();
|
||||
if(!netfu_news.more_page[type+'_use']) netfu_news.more_page[type+'_use'] = 'Y';
|
||||
if(netfu_news.more_page[type+'_use']=='Y') {
|
||||
if(!netfu_news.more_page[type]) netfu_news.more_page[type] = 1;
|
||||
p_limit = p_limit ? p_limit : '';
|
||||
$.post("/m/include/regist.php", _para+"&mode=more_view&type="+type+"&start="+limit+"&p_limit="+p_limit+"&page="+netfu_news.more_page[type]+"&page_code="+netfu_news.page_code, function(data){
|
||||
//alert(data);
|
||||
data = $.parseJSON(data);
|
||||
if(data.js) eval(data.js);
|
||||
$("."+type+"_news").find(".data_paste").append(data.html);
|
||||
netfu_news.more_page[type]++;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.ajax_cate_change = function(el) {
|
||||
if(el.value=='photo' || el.value=='movie') {
|
||||
netfu_util.ajax_cate(el, el.value, 1)
|
||||
} else {
|
||||
netfu_util.ajax_cate(el, 'section', 1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
// : 설문조사
|
||||
|
||||
|
||||
// : 설문조사
|
||||
}
|
||||
|
||||
var netfu_news = new netfu_news();
|
||||
@@ -1,638 +0,0 @@
|
||||
var netfu_util = function() {
|
||||
|
||||
this.page_check = location.href.indexOf("/m/")>=0 ? 'mobile' : 'pc';
|
||||
|
||||
this.all_check = function(el, c) {
|
||||
if(el.type=='checkbox') {
|
||||
is = el.checked;
|
||||
} else {
|
||||
is = $(".all_chk")[0].checked;
|
||||
is = is ? false : true;
|
||||
}
|
||||
|
||||
$(".all_chk").prop("checked", is);
|
||||
|
||||
$(c).prop("checked", is);
|
||||
}
|
||||
|
||||
this.agree_chk = function(fname, name_arr) {
|
||||
var form = document.forms[fname];
|
||||
var len = name_arr.length;
|
||||
if(len>0) {
|
||||
for(var i=0; i<len; i++) {
|
||||
var chk = $(form).find("[name='"+name_arr[i]+"']:checked").length;
|
||||
if(chk<=0) return name_arr[i];
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
this.put_text = function(el, obj) {
|
||||
obj.val(el.value);
|
||||
};
|
||||
|
||||
this.email_select = function(el, name) {
|
||||
$(el).closest("td").find("[name='"+name+"']").eq(1).val(el.value);
|
||||
}
|
||||
|
||||
|
||||
this.login_submit = function(form) {
|
||||
netfu_util.ajax_submit(form);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
this.ajax_cate = function(el, type, key, read_type) {
|
||||
var obj = $(el.form).find("[name='"+el.name+"']");
|
||||
var _put = $(el).attr("put");
|
||||
var put_obj = _put ? $("#"+_put) : obj.eq(key);
|
||||
var val = $(el).attr("val");
|
||||
var _this = $(el).attr("this");
|
||||
var _no = read_type!='auto' ? el.value : (el.value ? el.value : _this);
|
||||
|
||||
var _html = '<option value="">'+put_obj.find("option").eq(0).html()+'</option>';
|
||||
|
||||
if(!el.value && !read_type) {
|
||||
put_obj.html(_html);
|
||||
} else {
|
||||
if(_no) {
|
||||
$.post("/include/regist.php", "mode=get_cate_array&type="+type+"&no="+_no, function(data){
|
||||
data = $.parseJSON(data);
|
||||
var len = data.cate.length;
|
||||
if($(put_obj).closest(".third_section")[0]) {
|
||||
var _display = len>0 ? 'inline' : 'none';
|
||||
$(".third_section").css("display",_display);
|
||||
}
|
||||
put_obj.html('');
|
||||
for(var i=0; i<len; i++) {
|
||||
var selected = val==data.cate[i]['wr_code'] && val ? 'selected' : '';
|
||||
_html += '<option value="'+data.cate[i]['wr_code']+'" '+selected+'>'+data.cate[i]['wr_name']+'</option>';
|
||||
}
|
||||
put_obj.html(_html);
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.ajax_submit = function(el, noneObj) {
|
||||
var form = el;
|
||||
if(validate(form)) {
|
||||
$(form).ajaxSubmit({
|
||||
//보내기전 validation check가 필요할경우
|
||||
beforeSubmit: function (data, frm, opt) {
|
||||
//alert("전송전!!");
|
||||
return true;
|
||||
},
|
||||
//submit이후의 처리
|
||||
success: function(data, statusText) {
|
||||
//alert(data);
|
||||
data = $.parseJSON(data);
|
||||
if(data.msg) alert(data.msg);
|
||||
if(data.js) eval(data.js);
|
||||
if(data.move) location.href = data.move;
|
||||
if(noneObj) noneObj.css('display', 'none');
|
||||
return false;
|
||||
},
|
||||
//ajax error
|
||||
error: function(data,status,error){
|
||||
alert("에러발생!!");
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
this.calendar_sels = function(){
|
||||
$('#calendar_sel').datepicker({
|
||||
dateFormat: 'yy-mm-dd',
|
||||
maxDate: '+0d',
|
||||
onSelect: function(dateText, inst) {
|
||||
var date = $(this).val();
|
||||
location.href = "./all.php?date=" + date;
|
||||
/*
|
||||
var time = $('#time').val();
|
||||
alert('on select triggered');
|
||||
$("#start").val(date + time.toString(' HH:mm').toString());
|
||||
*/
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/* : 쿠키 저장하기*/
|
||||
this.setCookie = function( name, value, expiredays )
|
||||
{
|
||||
var todayDate = new Date();
|
||||
todayDate.setDate(todayDate.getDate() + expiredays);
|
||||
document.cookie = name + '=' + escape( value ) + '; path=/; expires=' + todayDate.toGMTString() + ';'
|
||||
};
|
||||
this.getCookie = function(name) {
|
||||
var value = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)');
|
||||
return value? value[2] : null;
|
||||
};
|
||||
|
||||
this.scaleFont = function (val, c) {
|
||||
var fontSize = getFontSize();
|
||||
var fontSizeSave = fontSize;
|
||||
if (val > 0) {
|
||||
if (fontSize <= 30) {
|
||||
fontSize = fontSize + val;
|
||||
}
|
||||
} else {
|
||||
if (fontSize > 14) {
|
||||
fontSize = fontSize + val;
|
||||
}
|
||||
}
|
||||
fontSize = fontSize + "px";
|
||||
$(c).css({'font-size':fontSize});
|
||||
|
||||
//$(c).css('fontSize',fontSize);
|
||||
set_cookies("ck_fontsize", fontSize, 30, domain);
|
||||
}
|
||||
|
||||
|
||||
this.password_reset_form = function(el, c) {
|
||||
var form = $(el).closest("form")[0];
|
||||
$(c).css({"display":"none"});
|
||||
form.reset();
|
||||
}
|
||||
|
||||
this.password_click = function(el, bo_table, no, code, c) {
|
||||
var form = document.forms['fpassword'];
|
||||
form.no.value = no;
|
||||
form.code.value = code;
|
||||
form.bo_table.value = bo_table;
|
||||
|
||||
$.post("/include/regist.php", "mode=get_token", function(data){
|
||||
data = $.parseJSON(data);
|
||||
form.token.value = data.token;
|
||||
|
||||
$(el).closest(c).css('position','relative');
|
||||
$(".password_div__").css({"display":"block"});
|
||||
$(".password_div__").parent().appendTo($(el).closest(c));
|
||||
|
||||
if(c=='.btn_board1_') $(".password_div__").css({"top":"40px", "left":"0px", "right":"auto"});
|
||||
if(location.href.indexOf("/m/")>=0) $(".password_div__").css({"top":"50px"});
|
||||
if(c=='.reply_con_list_') {
|
||||
if(location.href.indexOf("/m/")>=0) $(".password_div__").css({"top":"95px", "left":"5px"});
|
||||
else $(".password_div__").css({"top":"50px", "right":"5px"});
|
||||
}
|
||||
if(c=='.info_tag_') $(".password_div__").css({"top":"5px", "left":"30px"});
|
||||
|
||||
$(".password_div__").addClass("on");
|
||||
form.password.focus();
|
||||
});
|
||||
}
|
||||
|
||||
this.password_click_confirm = function(el) {
|
||||
|
||||
if(validate(el)) {
|
||||
var _para = $(el).serialize();
|
||||
$.post("/include/regist.php", _para+"&mode=password_confirm", function(data){
|
||||
data = $.parseJSON(data);
|
||||
if(data.msg) alert(data.msg);
|
||||
if(data.js) eval(data.js);
|
||||
if(data.move) location.href = data.move;
|
||||
});
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
this.search_page_rows = function(el, fname) {
|
||||
var form = document.forms[fname];
|
||||
|
||||
form.submit();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
this.mb_id_checking = function(fname){
|
||||
var form = document.forms[fname];
|
||||
var mb_id = form.mb_id.value;
|
||||
if( mb_id.trim() ){
|
||||
$('#duplicate_id_check').val(1);
|
||||
$.post('/member/process/regist.php', { mode:'mb_id_check', ajax:1, mb_id:mb_id }, function(result){
|
||||
if(result=='0007'){
|
||||
$('#is_duplicate_id').val(1);
|
||||
alert("이미 존재하는 아이디 입니다!");
|
||||
form.mb_id.value = "";
|
||||
} else if(result=='0003'){
|
||||
$('#is_duplicate_id').val(0);
|
||||
alert("사용 가능한 아이디 입니다.");
|
||||
}
|
||||
});
|
||||
} else {
|
||||
$('#duplicate_id_check').val(0);
|
||||
$('#is_duplicate_id').val(1);
|
||||
alert("아이디를 입력해 주세요.");
|
||||
form.mb_id.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
this.mb_nick_checking = function(fname){
|
||||
var form = document.forms[fname];
|
||||
var mb_nick = form.mb_nick.value;
|
||||
if( mb_nick.trim() ){
|
||||
$('#duplicate_nick_check').val(1);
|
||||
$.post('/member/process/regist.php', { mode:'mb_nick_check', ajax:1, mb_nick:mb_nick }, function(result){
|
||||
if(result=='0010'){
|
||||
$('#is_duplicate_nick').val(1);
|
||||
$('#duplicate_nick_check').val(0);
|
||||
alert("닉네임에 공백이 존재합니다.\n\n공백없이 입력해 주세요.");
|
||||
} else if(result=='0011'){
|
||||
$('#is_duplicate_nick').val(1);
|
||||
alert("이미 존재하는 닉네임 입니다!");
|
||||
if(location.href.indexOf('mypage/update_form.php')==-1) form.mb_nick.value = "";
|
||||
} else if(result=='0004'){
|
||||
$('#is_duplicate_nick').val(0);
|
||||
alert("사용 가능한 닉네임 입니다.");
|
||||
}
|
||||
});
|
||||
} else {
|
||||
$('#duplicate_nick_check').val(0);
|
||||
$('#is_duplicate_nick').val(1);
|
||||
alert("닉네임을 입력해 주세요.");
|
||||
form.mb_nick.focus();
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.find_id = function(){ // 아이디 찾기
|
||||
var form = document.forms['f_findid'];
|
||||
if( $('#find_id_use').length ){
|
||||
var use_sel = $('#find_id_use').val();
|
||||
} else {
|
||||
var use_sel = $("input[name='find_id_use']:checked").val();
|
||||
}
|
||||
if(validate(form)) {
|
||||
var find_name = $('#find_id_name').val(), find_email = $('#find_id_email').val();
|
||||
$.post('/member/process/regist.php', { mode:'find_id', find_type:use_sel, find_name:find_name, find_email:find_email }, function(result){
|
||||
if( result=='0026' ){
|
||||
alert("가입된 회원정보를 찾을 수 없습니다.");
|
||||
} else {
|
||||
alert("문의하신 아이디가 ["+find_email+"] 로 전송되었습니다.");
|
||||
form.reset();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
this.find_pass = function(){ // 비밀번호 찾기
|
||||
var form = document.forms['f_findpw'];
|
||||
if( $('#find_pass_use').length ){
|
||||
var use_sel = $('#find_pass_use').val();
|
||||
} else {
|
||||
var use_sel = $("input[name='find_pass_use']:checked").val();
|
||||
}
|
||||
if(validate(form)) {
|
||||
var find_name = $('#find_pass_name').val(), find_id = $('#find_pass_id').val(), find_email = $('#find_pass_email').val();
|
||||
$.post('/member/process/regist.php', { mode:'find_pass', find_type:use_sel, find_name:find_name, find_id:find_id, find_email:find_email }, function(result){
|
||||
if(result=='0026'){
|
||||
alert("가입된 회원정보를 찾을 수 없습니다.");
|
||||
} else {
|
||||
alert("문의하신 비밀번호가 ["+find_email+"] 로 전송되었습니다.");
|
||||
form.reset();
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.date_calc = function(date, sel_date) {
|
||||
var ch_date = new Date(date);
|
||||
var sel_date_arr = sel_date.split(" ");
|
||||
switch(sel_date_arr[1]) {
|
||||
case "day":
|
||||
ch_date.setDate(ch_date.getDate()-sel_date[0]);
|
||||
break;
|
||||
|
||||
case "month":
|
||||
ch_date.setDate(ch_date.getMonth()-sel_date[0]);
|
||||
break;
|
||||
|
||||
case "year":
|
||||
ch_date.setDate(ch_date.getFullYear()-sel_date[0]);
|
||||
break;
|
||||
}
|
||||
return ch_date.getFullYear()+'-'+('0'+(ch_date.getMonth() + 1)).slice(-2)+'-'+('0'+ch_date.getDate()).slice(-2);
|
||||
}
|
||||
|
||||
|
||||
this.put_date = function(el) {
|
||||
var sel_date = $(el).attr('date');
|
||||
var d_start = $(el).attr("d_start");
|
||||
var d_end = $(el).attr("d_end");
|
||||
|
||||
var todate = new Date();
|
||||
var day_txt = todate.getFullYear()+'-'+('0'+(todate.getMonth() + 1)).slice(-2)+'-'+('0'+todate.getDate()).slice(-2);
|
||||
|
||||
switch(sel_date) {
|
||||
case 'today':
|
||||
$('#'+d_start).val(day_txt);
|
||||
$('#'+d_end).val(day_txt);
|
||||
break;
|
||||
|
||||
default:
|
||||
var ch_date = netfu_util.date_calc(day_txt, sel_date);
|
||||
$('#'+d_start).datepicker('setDate', '-'+sel_date);
|
||||
$('#'+d_end).val(day_txt);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
this.editor_start = function() {
|
||||
$("textarea").each(function(){
|
||||
var _type = $(this).attr("type");
|
||||
if(_type=='editor') {
|
||||
var _name = $(this).attr("name");
|
||||
var _width = $(this).css("width");
|
||||
var _height = $(this).css("height");
|
||||
if(!$(this).attr("id")) $(this).attr("id", "tx_"+_name);
|
||||
try{
|
||||
_editor_use[_name] = new cheditor('ed_'+_name);
|
||||
_editor_use[_name].config.editorHeight = _height ? _height : '250px';
|
||||
_editor_use[_name].config.editorWidth = _width ? _width : '100%';
|
||||
_editor_use[_name].inputForm = 'tx_'+_name;
|
||||
_editor_use[_name].run();
|
||||
}catch(e){
|
||||
alert(e.message);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
this.tr_open = function(el, k) {
|
||||
var display = $(el).closest("tbody").find("tr").eq(k).css("display");
|
||||
display = display=='none' ? 'table-row' : 'none';
|
||||
$(el).closest("tbody").find("tr").eq(k).css({"display":display});
|
||||
}
|
||||
|
||||
|
||||
this.view_photo = function(el) {
|
||||
}
|
||||
|
||||
|
||||
|
||||
this.share_sns = function(el, code) {
|
||||
|
||||
var _subject = $(el).attr("txt_");
|
||||
var _link = location.href;
|
||||
|
||||
switch(code) {
|
||||
case "kakao_story":
|
||||
Kakao.Story.share({
|
||||
url: _link
|
||||
});
|
||||
break;
|
||||
|
||||
|
||||
case "facebook":
|
||||
window.open('http://www.facebook.com/sharer.php?u='+encodeURIComponent(_link),'sharer','toolbar=0,status=0,width=626,height=436');
|
||||
break;
|
||||
|
||||
|
||||
case "twitter":
|
||||
var url = "http://twitter.com/share?text="+encodeURIComponent(_subject)+"&url="+escape(_link);
|
||||
window.open(url);
|
||||
break;
|
||||
|
||||
|
||||
case "google":
|
||||
var url = "https://www.google.co.kr/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&ved=&url=https://plus.google.com/share?url="+_link;
|
||||
window.open(url);
|
||||
break;
|
||||
|
||||
|
||||
case "naver_band":
|
||||
window.open('http://band.us/plugin/share?body='+encodeURIComponent(_subject+" - "+_link)+'&route='+encodeURIComponent(url), 'share_band', 'width=410, height=540, resizable=no');
|
||||
break;
|
||||
|
||||
case "naver_blog":
|
||||
var url = encodeURI(encodeURIComponent(_link));
|
||||
var title = encodeURI(_subject);
|
||||
var shareURL = "https://share.naver.com/web/shareView?url=" + url + "&title=" + title;
|
||||
window.open(shareURL);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
this.share_btn_gp_click = function() {
|
||||
var display = $(".share_btn_gp").css("display")=='none' ? 'block' : 'none';
|
||||
$(".share_btn_gp").css("display", display);
|
||||
}
|
||||
|
||||
|
||||
this.get_date = function(val) {
|
||||
|
||||
var val_arr = val.split(" ");
|
||||
val_arr[0] = parseInt(val_arr[0]);
|
||||
if(val_arr[1]=='week') {
|
||||
val_arr[0] = val_arr[0]*7;
|
||||
val_arr[1] = 'day';
|
||||
}
|
||||
|
||||
// : 오늘날짜
|
||||
var today = new Date();
|
||||
var today_dd = (today.getDate()+1 < 10) ? '0' + (today.getDate()+1) : today.getDate()+1;
|
||||
var today_mm = (today.getMonth()+1 < 10) ? '0' + (today.getMonth()+1) : today.getMonth()+1;
|
||||
|
||||
var yy = today.getFullYear();
|
||||
var mm = today.getMonth();
|
||||
var dd = today.getDate();
|
||||
if(val_arr[1]=='year') yy = yy - val_arr[0];
|
||||
if(val_arr[1]=='month') mm = mm - val_arr[0];
|
||||
if(val_arr[1]=='day') dd = dd - val_arr[0];
|
||||
|
||||
// : 클릭날짜
|
||||
var prev_day = new Date(yy, mm, dd);
|
||||
var prev_mm = (prev_day.getMonth()+1 < 10) ? '0' + (prev_day.getMonth()+1) : prev_day.getMonth()+1;
|
||||
var prev_dd = (prev_day.getDate() < 10) ? '0' + (prev_day.getDate()+1) : prev_day.getDate()+1;
|
||||
|
||||
// : 결과
|
||||
var day1 = prev_day.getFullYear()+'-'+(prev_mm)+'-'+prev_dd;
|
||||
var day2 = today.getFullYear()+'-'+(today_mm)+'-'+today_dd;
|
||||
|
||||
return [day1, day2];
|
||||
}
|
||||
|
||||
this.add_tag_func = function(el) {
|
||||
var txt = $(el).text();
|
||||
switch(txt) {
|
||||
case "추가":
|
||||
var tag = $(el).parent().eq(0).clone(true).wrapAll("<div/>").parent();
|
||||
tag.find("input").val("");
|
||||
tag = tag.html();
|
||||
tag = tag.replace(/추가/gi, '삭제');
|
||||
$(el).closest(".paste_tag_").append(tag);
|
||||
break;
|
||||
|
||||
default:
|
||||
if(confirm("삭제하시겠습니까?"))
|
||||
$(el).parent().remove();
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*############## 설문조사 ###############*/
|
||||
this.poll_result = function(el) {
|
||||
$.post("/include/regist.php", "mode=poll_result", function(data){
|
||||
data = $.parseJSON(data);
|
||||
if(data.js) eval(data.js);
|
||||
});
|
||||
}
|
||||
|
||||
this.poll_position = function(el) {
|
||||
var _offset = $(el).closest(".poll_select_").offset();
|
||||
var _width = $(".poll_result_view").width();
|
||||
$(".poll_result_view").css({'top':_offset.top, 'left':(_offset.left-_width-30)+'px'});
|
||||
}
|
||||
|
||||
this.poll_insert = function( el, no ){
|
||||
var poll_answer = $("input[name='wr_answer']:checked").val();
|
||||
if(!poll_answer) {
|
||||
alert("설문조사를 선택해주시기 바랍니다.");
|
||||
} else {
|
||||
$.post('/include/process/poll.php', { mode:'poll_insert', no:no, answer:poll_answer }, function(result){
|
||||
switch(result){
|
||||
case '0085': // 회원만 투표 가능합니다.
|
||||
alert("회원만 투표 가능합니다.");
|
||||
location.href = "/member/login.php?url="+location.href;
|
||||
return false;
|
||||
break;
|
||||
case '0086': // 이미 투표하셨습니다.
|
||||
alert("이미 투표하셨습니다.");
|
||||
return false;
|
||||
break;
|
||||
default:
|
||||
if(confirm("투표가 완료 되었습니다.\n결과를 확인하시겠습니까?")) {
|
||||
netfu_util.poll_result(el);
|
||||
}
|
||||
return false;
|
||||
break;
|
||||
}
|
||||
$('#poll_quest_info').show();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
this.poll_questionAnswer = function(answer, mode, no, sels){ // 질의 응답에 따른 처리
|
||||
if(answer=='yes'){
|
||||
switch(mode){
|
||||
// 비회원일때 로그인 페이지로 이동
|
||||
case 'member_login':
|
||||
location.href = document.domain+"/member/login.php?url="+location.href;
|
||||
break;
|
||||
// 투표 결과 확인
|
||||
case 'poll_view':
|
||||
$.unblockUI();
|
||||
$('#poll_info').load('/include/process/poll.php', { mode:'poll_view', no:no }, function(result){
|
||||
$('#poll_info').show();
|
||||
});
|
||||
break;
|
||||
}
|
||||
} else {
|
||||
$.unblockUI();
|
||||
}
|
||||
}
|
||||
/*############## 설문조사 ###############*/
|
||||
|
||||
this.copyToClipboard = function(val, al) {
|
||||
var t = document.createElement("textarea");
|
||||
document.body.appendChild(t);
|
||||
t.value = val;
|
||||
t.select();
|
||||
document.execCommand('copy');
|
||||
document.body.removeChild(t);
|
||||
if(al) alert(al);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
var netfu_util = new netfu_util();
|
||||
|
||||
|
||||
|
||||
|
||||
var date_val = new Date();
|
||||
var datepicker_json = {
|
||||
dateFormat: "yy-mm-dd", /* 날짜 포맷 */
|
||||
prevText: '이전달',
|
||||
nextText: '다음달',
|
||||
showButtonPanel: true, /* 버튼 패널 사용 */
|
||||
changeMonth: true, /* 월 선택박스 사용 */
|
||||
changeYear: true, /* 년 선택박스 사용 */
|
||||
showOtherMonths: false, /* 이전/다음 달 일수 보이기 */
|
||||
selectOtherMonths: true, /* 이전/다음 달 일 선택하기 */
|
||||
yearSuffix: '년',
|
||||
closeText: '닫기',
|
||||
currentText: '오늘',
|
||||
showMonthAfterYear: true, /* 년과 달의 위치 바꾸기 */
|
||||
/* 한글화 */
|
||||
monthNames : ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'],
|
||||
monthNamesShort : ['1월', '2월', '3월', '4월', '5월', '6월', '7월', '8월', '9월', '10월', '11월', '12월'],
|
||||
dayNames : ['일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일'],
|
||||
dayNamesShort : ['일', '월', '화', '수', '목', '금', '토'],
|
||||
dayNamesMin : ['일', '월', '화', '수', '목', '금', '토'],
|
||||
weekHeader: 'Wk',
|
||||
yearRange :"-100:+0",
|
||||
firstDay: 0,
|
||||
isRTL: false,
|
||||
showAnim: 'slideDown',
|
||||
onSelect:function(dateText, inst){
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
var _editor_use = {};
|
||||
|
||||
$(window).ready(function() {
|
||||
|
||||
if(location.href.indexOf("/m/page/view.php")>=0) {
|
||||
|
||||
$(".news_body").find("iframe").css({"max-width":($( window ).width()-30)+"px"});
|
||||
$(".news_body").find("img").css({"max-width":($( window ).width()-30)+"px"});
|
||||
|
||||
}
|
||||
|
||||
netfu_util.editor_start();
|
||||
|
||||
// : 날짜
|
||||
$( ".datepicker_inp" ).datepicker(datepicker_json).keyup(function(e) {
|
||||
if(e.keyCode == 8 || e.keyCode == 46) {
|
||||
$.datepicker._clearDate(this);
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
|
||||
$('.set_day').click(function() {
|
||||
$(this).closest("ol").find("button").removeClass("on");
|
||||
$(this).parent().addClass("on");
|
||||
netfu_util.put_date($(this)[0]);
|
||||
});
|
||||
|
||||
});
|
||||
@@ -1,177 +0,0 @@
|
||||
|
||||
Apache License
|
||||
Version 2.0, January 2004
|
||||
http://www.apache.org/licenses/
|
||||
|
||||
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
||||
|
||||
1. Definitions.
|
||||
|
||||
"License" shall mean the terms and conditions for use, reproduction,
|
||||
and distribution as defined by Sections 1 through 9 of this document.
|
||||
|
||||
"Licensor" shall mean the copyright owner or entity authorized by
|
||||
the copyright owner that is granting the License.
|
||||
|
||||
"Legal Entity" shall mean the union of the acting entity and all
|
||||
other entities that control, are controlled by, or are under common
|
||||
control with that entity. For the purposes of this definition,
|
||||
"control" means (i) the power, direct or indirect, to cause the
|
||||
direction or management of such entity, whether by contract or
|
||||
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
||||
outstanding shares, or (iii) beneficial ownership of such entity.
|
||||
|
||||
"You" (or "Your") shall mean an individual or Legal Entity
|
||||
exercising permissions granted by this License.
|
||||
|
||||
"Source" form shall mean the preferred form for making modifications,
|
||||
including but not limited to software source code, documentation
|
||||
source, and configuration files.
|
||||
|
||||
"Object" form shall mean any form resulting from mechanical
|
||||
transformation or translation of a Source form, including but
|
||||
not limited to compiled object code, generated documentation,
|
||||
and conversions to other media types.
|
||||
|
||||
"Work" shall mean the work of authorship, whether in Source or
|
||||
Object form, made available under the License, as indicated by a
|
||||
copyright notice that is included in or attached to the work
|
||||
(an example is provided in the Appendix below).
|
||||
|
||||
"Derivative Works" shall mean any work, whether in Source or Object
|
||||
form, that is based on (or derived from) the Work and for which the
|
||||
editorial revisions, annotations, elaborations, or other modifications
|
||||
represent, as a whole, an original work of authorship. For the purposes
|
||||
of this License, Derivative Works shall not include works that remain
|
||||
separable from, or merely link (or bind by name) to the interfaces of,
|
||||
the Work and Derivative Works thereof.
|
||||
|
||||
"Contribution" shall mean any work of authorship, including
|
||||
the original version of the Work and any modifications or additions
|
||||
to that Work or Derivative Works thereof, that is intentionally
|
||||
submitted to Licensor for inclusion in the Work by the copyright owner
|
||||
or by an individual or Legal Entity authorized to submit on behalf of
|
||||
the copyright owner. For the purposes of this definition, "submitted"
|
||||
means any form of electronic, verbal, or written communication sent
|
||||
to the Licensor or its representatives, including but not limited to
|
||||
communication on electronic mailing lists, source code control systems,
|
||||
and issue tracking systems that are managed by, or on behalf of, the
|
||||
Licensor for the purpose of discussing and improving the Work, but
|
||||
excluding communication that is conspicuously marked or otherwise
|
||||
designated in writing by the copyright owner as "Not a Contribution."
|
||||
|
||||
"Contributor" shall mean Licensor and any individual or Legal Entity
|
||||
on behalf of whom a Contribution has been received by Licensor and
|
||||
subsequently incorporated within the Work.
|
||||
|
||||
2. Grant of Copyright License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
copyright license to reproduce, prepare Derivative Works of,
|
||||
publicly display, publicly perform, sublicense, and distribute the
|
||||
Work and such Derivative Works in Source or Object form.
|
||||
|
||||
3. Grant of Patent License. Subject to the terms and conditions of
|
||||
this License, each Contributor hereby grants to You a perpetual,
|
||||
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
||||
(except as stated in this section) patent license to make, have made,
|
||||
use, offer to sell, sell, import, and otherwise transfer the Work,
|
||||
where such license applies only to those patent claims licensable
|
||||
by such Contributor that are necessarily infringed by their
|
||||
Contribution(s) alone or by combination of their Contribution(s)
|
||||
with the Work to which such Contribution(s) was submitted. If You
|
||||
institute patent litigation against any entity (including a
|
||||
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
||||
or a Contribution incorporated within the Work constitutes direct
|
||||
or contributory patent infringement, then any patent licenses
|
||||
granted to You under this License for that Work shall terminate
|
||||
as of the date such litigation is filed.
|
||||
|
||||
4. Redistribution. You may reproduce and distribute copies of the
|
||||
Work or Derivative Works thereof in any medium, with or without
|
||||
modifications, and in Source or Object form, provided that You
|
||||
meet the following conditions:
|
||||
|
||||
(a) You must give any other recipients of the Work or
|
||||
Derivative Works a copy of this License; and
|
||||
|
||||
(b) You must cause any modified files to carry prominent notices
|
||||
stating that You changed the files; and
|
||||
|
||||
(c) You must retain, in the Source form of any Derivative Works
|
||||
that You distribute, all copyright, patent, trademark, and
|
||||
attribution notices from the Source form of the Work,
|
||||
excluding those notices that do not pertain to any part of
|
||||
the Derivative Works; and
|
||||
|
||||
(d) If the Work includes a "NOTICE" text file as part of its
|
||||
distribution, then any Derivative Works that You distribute must
|
||||
include a readable copy of the attribution notices contained
|
||||
within such NOTICE file, excluding those notices that do not
|
||||
pertain to any part of the Derivative Works, in at least one
|
||||
of the following places: within a NOTICE text file distributed
|
||||
as part of the Derivative Works; within the Source form or
|
||||
documentation, if provided along with the Derivative Works; or,
|
||||
within a display generated by the Derivative Works, if and
|
||||
wherever such third-party notices normally appear. The contents
|
||||
of the NOTICE file are for informational purposes only and
|
||||
do not modify the License. You may add Your own attribution
|
||||
notices within Derivative Works that You distribute, alongside
|
||||
or as an addendum to the NOTICE text from the Work, provided
|
||||
that such additional attribution notices cannot be construed
|
||||
as modifying the License.
|
||||
|
||||
You may add Your own copyright statement to Your modifications and
|
||||
may provide additional or different license terms and conditions
|
||||
for use, reproduction, or distribution of Your modifications, or
|
||||
for any such Derivative Works as a whole, provided Your use,
|
||||
reproduction, and distribution of the Work otherwise complies with
|
||||
the conditions stated in this License.
|
||||
|
||||
5. Submission of Contributions. Unless You explicitly state otherwise,
|
||||
any Contribution intentionally submitted for inclusion in the Work
|
||||
by You to the Licensor shall be under the terms and conditions of
|
||||
this License, without any additional terms or conditions.
|
||||
Notwithstanding the above, nothing herein shall supersede or modify
|
||||
the terms of any separate license agreement you may have executed
|
||||
with Licensor regarding such Contributions.
|
||||
|
||||
6. Trademarks. This License does not grant permission to use the trade
|
||||
names, trademarks, service marks, or product names of the Licensor,
|
||||
except as required for reasonable and customary use in describing the
|
||||
origin of the Work and reproducing the content of the NOTICE file.
|
||||
|
||||
7. Disclaimer of Warranty. Unless required by applicable law or
|
||||
agreed to in writing, Licensor provides the Work (and each
|
||||
Contributor provides its Contributions) on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
||||
implied, including, without limitation, any warranties or conditions
|
||||
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
||||
PARTICULAR PURPOSE. You are solely responsible for determining the
|
||||
appropriateness of using or redistributing the Work and assume any
|
||||
risks associated with Your exercise of permissions under this License.
|
||||
|
||||
8. Limitation of Liability. In no event and under no legal theory,
|
||||
whether in tort (including negligence), contract, or otherwise,
|
||||
unless required by applicable law (such as deliberate and grossly
|
||||
negligent acts) or agreed to in writing, shall any Contributor be
|
||||
liable to You for damages, including any direct, indirect, special,
|
||||
incidental, or consequential damages of any character arising as a
|
||||
result of this License or out of the use or inability to use the
|
||||
Work (including but not limited to damages for loss of goodwill,
|
||||
work stoppage, computer failure or malfunction, or any and all
|
||||
other commercial damages or losses), even if such Contributor
|
||||
has been advised of the possibility of such damages.
|
||||
|
||||
9. Accepting Warranty or Additional Liability. While redistributing
|
||||
the Work or Derivative Works thereof, You may choose to offer,
|
||||
and charge a fee for, acceptance of support, warranty, indemnity,
|
||||
or other liability obligations and/or rights consistent with this
|
||||
License. However, in accepting such obligations, You may act only
|
||||
on Your own behalf and on Your sole responsibility, not on behalf
|
||||
of any other Contributor, and only if You agree to indemnify,
|
||||
defend, and hold each Contributor harmless for any liability
|
||||
incurred by, or claims asserted against, such Contributor by reason
|
||||
of your accepting any such warranty or additional liability.
|
||||
|
||||
END OF TERMS AND CONDITIONS
|
||||