필요 는거 삭제

This commit is contained in:
msbfox
2026-06-14 10:48:46 +09:00
parent 0345b8cd08
commit 5df3158402
2276 changed files with 4 additions and 448513 deletions
-2
View File
@@ -1,2 +0,0 @@
<?php
include_once('../../common.php');
-232
View File
@@ -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/ ← 동일 구조
```
-15
View File
@@ -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');
}
?>
View File
View File
-53
View File
@@ -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; }
-456
View File
@@ -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}
File diff suppressed because it is too large Load Diff
-79
View File
@@ -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;
}
-107
View File
@@ -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;
}
}
-205
View File
@@ -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}
File diff suppressed because it is too large Load Diff
-129
View File
@@ -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;
}
/* 반응형 스타일 */
-137
View File
@@ -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; }
-92
View File
@@ -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;
}
}
// 앞으로 테마 전역에서 사용할 다른 헬퍼 함수들을 이곳에 추가할 수 있습니다.
-23
View File
@@ -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');
-158
View File
@@ -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;">';
}
?>
-304
View File
@@ -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("/&nbsp;/","",$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 } ?>
Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 442 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 322 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 328 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.1 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 54 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 49 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 51 B

-33
View File
@@ -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');
File diff suppressed because one or more lines are too long
-67
View File
@@ -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;
}
});
});
}
});
-525
View File
@@ -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);
-2
View File
@@ -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);
-2
View File
@@ -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);
-2
View File
@@ -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);
File diff suppressed because one or more lines are too long
@@ -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);
-2
View File
@@ -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);
-2
View File
@@ -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);
-2
View File
@@ -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);
-349
View File
@@ -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);
}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-363
View File
@@ -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);
-247
View File
@@ -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 );
-23
View File
@@ -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']);
});
-6
View File
@@ -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);
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-22
View File
@@ -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자동로그인을 사용하시겠습니까?");
}
});
});
-38
View File
@@ -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);
});
-164
View File
@@ -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();
-310
View File
@@ -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]+"&section="+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();
-638
View File
@@ -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]);
});
});
-177
View File
@@ -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
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
-18146
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because one or more lines are too long
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

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