장선근
7 years ago
77 changed files with 66455 additions and 1 deletions
-
1.gitignore
-
40README.md
-
2dist/assets/css/style.min.css
-
1dist/assets/css/style.min.css.map
-
BINdist/assets/fonts/fa-brands-400.eot
-
3570dist/assets/fonts/fa-brands-400.svg
-
BINdist/assets/fonts/fa-brands-400.ttf
-
BINdist/assets/fonts/fa-brands-400.woff
-
BINdist/assets/fonts/fa-brands-400.woff2
-
BINdist/assets/fonts/fa-duotone-900.eot
-
15055dist/assets/fonts/fa-duotone-900.svg
-
BINdist/assets/fonts/fa-duotone-900.ttf
-
BINdist/assets/fonts/fa-duotone-900.woff
-
BINdist/assets/fonts/fa-duotone-900.woff2
-
BINdist/assets/fonts/fa-light-300.eot
-
12330dist/assets/fonts/fa-light-300.svg
-
BINdist/assets/fonts/fa-light-300.ttf
-
BINdist/assets/fonts/fa-light-300.woff
-
BINdist/assets/fonts/fa-light-300.woff2
-
BINdist/assets/fonts/fa-regular-400.eot
-
11256dist/assets/fonts/fa-regular-400.svg
-
BINdist/assets/fonts/fa-regular-400.ttf
-
BINdist/assets/fonts/fa-regular-400.woff
-
BINdist/assets/fonts/fa-regular-400.woff2
-
BINdist/assets/fonts/fa-solid-900.eot
-
9588dist/assets/fonts/fa-solid-900.svg
-
BINdist/assets/fonts/fa-solid-900.ttf
-
BINdist/assets/fonts/fa-solid-900.woff
-
BINdist/assets/fonts/fa-solid-900.woff2
-
2dist/assets/js/common.min.js
-
1dist/assets/js/common.min.js.map
-
34dist/index.html
-
113gulpfile.js
-
28package.json
-
29source.info.json
-
6src/html/include/footer.html
-
13src/html/include/header.html
-
12src/html/include/meta.html
-
2src/html/include/tail.html
-
5src/html/index.html
-
25src/icons/iconsTemplates.scss.handlebars
-
0src/js/common.js
-
862src/js/wheeparam.js
-
29src/scss/_variables.scss
-
3src/scss/boot/_fonts.scss
-
37src/scss/boot/_function.scss
-
125src/scss/boot/_mixins.scss
-
330src/scss/boot/_reset.scss
-
3src/scss/common/_animation.scss
-
3src/scss/common/_layout.scss
-
108src/scss/common/_utility.scss
-
3src/scss/components/_button.scss
-
3src/scss/components/_icons.scss
-
3src/scss/pages/main.scss
-
20src/scss/plugins/FontAwesome-5.13.0/_animated.scss
-
20src/scss/plugins/FontAwesome-5.13.0/_bordered-pulled.scss
-
21src/scss/plugins/FontAwesome-5.13.0/_core.scss
-
6src/scss/plugins/FontAwesome-5.13.0/_fixed-width.scss
-
2296src/scss/plugins/FontAwesome-5.13.0/_icons.scss
-
23src/scss/plugins/FontAwesome-5.13.0/_larger.scss
-
18src/scss/plugins/FontAwesome-5.13.0/_list.scss
-
56src/scss/plugins/FontAwesome-5.13.0/_mixins.scss
-
24src/scss/plugins/FontAwesome-5.13.0/_rotated-flipped.scss
-
5src/scss/plugins/FontAwesome-5.13.0/_screen-reader.scss
-
2066src/scss/plugins/FontAwesome-5.13.0/_shims.scss
-
31src/scss/plugins/FontAwesome-5.13.0/_stacked.scss
-
2313src/scss/plugins/FontAwesome-5.13.0/_variables.scss
-
23src/scss/plugins/FontAwesome-5.13.0/brands.scss
-
1916src/scss/plugins/FontAwesome-5.13.0/duotone.scss
-
16src/scss/plugins/FontAwesome-5.13.0/fontawesome.scss
-
23src/scss/plugins/FontAwesome-5.13.0/light.scss
-
23src/scss/plugins/FontAwesome-5.13.0/regular.scss
-
24src/scss/plugins/FontAwesome-5.13.0/solid.scss
-
6src/scss/plugins/FontAwesome-5.13.0/v4-shims.scss
-
3src/scss/plugins/_custom.scss
-
28src/scss/style.scss
-
3873yarn.lock
@ -1,3 +1,41 @@ |
|||
# publisingTemplate |
|||
|
|||
퍼블리싱용 기본 템플릿 |
|||
### 초기 세팅 |
|||
초기 세팅시 npm 또는 yarn 을 이용한 의존패키지 설치가 필요합니다. |
|||
다음의 명령어를 입력하여 의존패키지를 먼저 설치해 주세요. |
|||
<code>npm install</code> |
|||
또는 |
|||
<code>yarn install</code> |
|||
※ 가급적 yarn 을 사용하길 권장합니다. |
|||
|
|||
### 폴더 구조 |
|||
``` |
|||
+-- dist # 배포용 폴더 |
|||
+-- src # 소스 폴더 |
|||
| +-- html # HTML 소스 폴더 |
|||
| | +-- include # HTML 소스에 Include 해서 사용할 파일들을 넣어놓는 폴더 |
|||
| +-- js # Javascript 소스 폴더 |
|||
| +-- scss # Sass 소스 폴더 |
|||
| +-- icons # Sprite 소스 폴더 |
|||
+-- .gitignore |
|||
+-- gulpfile.js |
|||
+-- package.json |
|||
+-- README.md |
|||
+-- source.info.json # Gulp 사용시 소스디렉토리 설정 파일 |
|||
``` |
|||
- 패킹이 완료된 파일은 배포용폴더 /dist 에 자동으로 파일이 생성됩니다. |
|||
- source.info.json 파일에서 패킹할 파일을 정의하거나 디렉토리를 지정할 수 있습니다. |
|||
- src/html/include 에 들어있는 파일은 HTML 패킹시 파일을 생성하지 않습니다. |
|||
|
|||
### GULP 명령어 |
|||
``` |
|||
gulp # 전체 패키징을 처리합니다. |
|||
gulp html # HTML 파일 패킹을 처리합니다. |
|||
gulp scss:compile # sass 패킹을 처리합니다. |
|||
gulp js:compile # javascript 패킹을 처리합니다. |
|||
gulp sprite # Sprite 패킹을 처리합니다. |
|||
gulp watch # 파일변경을 감지하여 자동으로 패킹을 처리합니다. (추천) |
|||
``` |
|||
|
|||
### 포함된 플러그인 |
|||
FontAwesome Pro 5.13.0 (http://fontawesome.io) |
2
dist/assets/css/style.min.css
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1
dist/assets/css/style.min.css.map
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
3570
dist/assets/fonts/fa-brands-400.svg
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
15055
dist/assets/fonts/fa-duotone-900.svg
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
12330
dist/assets/fonts/fa-light-300.svg
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
11256
dist/assets/fonts/fa-regular-400.svg
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
9588
dist/assets/fonts/fa-solid-900.svg
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
2
dist/assets/js/common.min.js
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
1
dist/assets/js/common.min.js.map
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,34 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="ko"> |
|||
<head> |
|||
<meta charset="utf-8"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"> |
|||
<title>메인 페이지</title> |
|||
<link rel="stylesheet" href="https://fonts.googleapis.com/earlyaccess/notosanskr.css"> |
|||
<link rel="stylesheet" href="./assets/css/style.min.css"> |
|||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> |
|||
<script src="./assets/js/common.min.js"></script> |
|||
</head> |
|||
<body> |
|||
<!--S: 숨김 메뉴--> |
|||
<ul class="sr-only sr-only-focusable"> |
|||
<li><a href="#contents">컨텐츠 바로가기</a></li> |
|||
<li><a href="#nav">메뉴 바로가기</a></li> |
|||
</ul> |
|||
<!--E: 숨김 메뉴--> |
|||
|
|||
<!--S: 헤더 영역--> |
|||
|
|||
<!--E: 헤더 영역--> |
|||
|
|||
<!--S: 컨텐츠 영역--> |
|||
<section id="contents"> |
|||
|
|||
</section> |
|||
<!--E: 컨텐츠 영역--> |
|||
|
|||
<!--S: 푸터 영역--> |
|||
|
|||
<!--E: 푸터 영역--> |
|||
</body> |
|||
</html> |
@ -0,0 +1,113 @@ |
|||
let fs = require('fs'), |
|||
gulp = require('gulp'), |
|||
concat = require('gulp-concat'), |
|||
cleanCSS = require('gulp-clean-css'), |
|||
sass = require('gulp-sass'), |
|||
minify = require('gulp-minify'), |
|||
size = require('gulp-size'), |
|||
cached = require('gulp-cached'), |
|||
fileInclude = require('gulp-file-include'), |
|||
sourcemaps = require('gulp-sourcemaps'), |
|||
spritesmith = require('gulp.spritesmith'); |
|||
|
|||
|
|||
let packageFile = JSON.parse(fs.readFileSync('source.info.json')); |
|||
let source = packageFile.source; |
|||
let destPath = packageFile.destPath; |
|||
let watchPath = packageFile.watch; |
|||
|
|||
function reloadSourceData() |
|||
{ |
|||
packageFile = JSON.parse(fs.readFileSync('source.info.json')); |
|||
source = packageFile.source; |
|||
destPath = packageFile.destPath; |
|||
watchPath = packageFile.watch; |
|||
} |
|||
|
|||
/********************************************************************************************************** |
|||
* TASKS |
|||
***********************************************************************************************************/ |
|||
gulp.task('html', function(){ |
|||
reloadSourceData(); |
|||
|
|||
let dest = destPath.root + "/"; |
|||
|
|||
return gulp.src(source.html) |
|||
.pipe(fileInclude({ |
|||
prefix : '@@', |
|||
context : { |
|||
ROOT : '.' |
|||
} |
|||
})) |
|||
.pipe(cached('include')) |
|||
.pipe(size({ gzip:true, showFiles:true })) |
|||
.pipe(gulp.dest(dest)); |
|||
}); |
|||
|
|||
|
|||
gulp.task('scss:compile', function () { |
|||
reloadSourceData(); |
|||
|
|||
let dest = destPath.root + "/" + destPath.assets + "/" + destPath.css; |
|||
let fileName = "style.min.css"; |
|||
|
|||
return gulp.src( source.css ) |
|||
.pipe(sourcemaps.init()) |
|||
.pipe( sass({outputStyle: 'compact'}).on('error', sass.logError)) |
|||
.pipe( concat(fileName)) //병합하고
|
|||
.pipe(cleanCSS().on('error', function(e){console.log(e);})) |
|||
.pipe(size({ gzip: true, showFiles: true })) |
|||
.pipe(sourcemaps.write('.')) |
|||
.pipe(gulp.dest(dest)); |
|||
}); |
|||
|
|||
|
|||
gulp.task('js:combine', function(){ |
|||
reloadSourceData(); |
|||
|
|||
let dest = destPath.root + "/" + destPath.assets + "/" + destPath.js; |
|||
let fileName = "common.js"; |
|||
|
|||
return gulp.src( source.js ) |
|||
.pipe(sourcemaps.init()) |
|||
.pipe(concat(fileName)) |
|||
.pipe(minify({ext: {min : '.min.js'},noSource:true})) |
|||
.pipe(size({ gzip: true, showFiles: true })) |
|||
.pipe(sourcemaps.write('.')) |
|||
.pipe(gulp.dest(dest)); |
|||
}); |
|||
|
|||
|
|||
gulp.task('sprite', function () { |
|||
reloadSourceData(); |
|||
|
|||
var spriteData = null; |
|||
let dest = destPath.root + "/" + destPath.assets + "/icons"; |
|||
|
|||
var packages = fs.readdirSync(source.icons); |
|||
for(var i in packages) { |
|||
spriteData = gulp.src('src/icons/'+packages[i]+'/*.png').pipe(spritesmith({ |
|||
imgName: packages[i] + '.png', |
|||
cssName: packages[i] +'.css', |
|||
padding:2, |
|||
cssTemplate: 'src/icons/iconsTemplates.scss.handlebars', |
|||
cssHandlebarsHelpers : {'packageName' : packages[i]}, |
|||
imgPath : '../icons/' + packages[i] + '.png', |
|||
algorithm:'left-right', |
|||
algorithmOpts:false |
|||
})); |
|||
spriteData.img.pipe(gulp.dest(dest)); |
|||
spriteData.css.pipe(gulp.dest("src/icons/")); |
|||
} |
|||
return true; |
|||
}); |
|||
|
|||
gulp.task('watch', function(){ |
|||
gulp.watch(watchPath.html, gulp.series(['html'])); |
|||
gulp.watch(watchPath.js, gulp.series(['js:combine'])); |
|||
gulp.watch(watchPath.css, gulp.series(['scss:compile'])); |
|||
}); |
|||
|
|||
|
|||
|
|||
gulp.task('default', gulp.series(['html', 'js:combine', 'scss:compile'])); |
@ -0,0 +1,28 @@ |
|||
{ |
|||
"name": "wheeparam", |
|||
"version": "1.0.0", |
|||
"description": "퍼블리싱용 기본 템플릿", |
|||
"main": "index.js", |
|||
"scripts": { |
|||
"test": "echo \"Error: no test specified\" && exit 1" |
|||
}, |
|||
"repository": { |
|||
"type": "git", |
|||
"url": "http://git.wheeparam.com/wheeparam/publisingTemplate.git" |
|||
}, |
|||
"author": "", |
|||
"license": "ISC", |
|||
"devDependencies": { |
|||
"gulp": "^4.0.2", |
|||
"gulp-cached": "^1.1.1", |
|||
"gulp-clean-css": "^4.3.0", |
|||
"gulp-concat": "^2.6.1", |
|||
"gulp-file-include": "^2.2.2", |
|||
"gulp-minify": "^3.1.0", |
|||
"gulp-sass": "^4.1.0", |
|||
"gulp-size": "^3.0.0", |
|||
"gulp-sourcemaps": "^2.6.5", |
|||
"gulp.spritesmith": "^6.11.0" |
|||
}, |
|||
"dependencies": {} |
|||
} |
@ -0,0 +1,29 @@ |
|||
{ |
|||
"destPath" : { |
|||
"root" : "dist", |
|||
"assets" : "assets", |
|||
"css" : "css", |
|||
"js" : "js" |
|||
}, |
|||
"source" : { |
|||
"html" : [ |
|||
"src/html/*.html", |
|||
"src/html/**/*.html", |
|||
"src/html/**/**/*.html", |
|||
"!src/html/include/**" |
|||
], |
|||
"css" : [ |
|||
"src/scss/style.scss" |
|||
], |
|||
"js" : [ |
|||
"src/js/wheeparam.js", |
|||
"src/js/common.js" |
|||
], |
|||
"icons": "src/icons" |
|||
}, |
|||
"watch" : { |
|||
"html" : ["src/html/*.html", "src/html/**/*.html","!src/html/include/*.html","src/html/**/**/*.html"], |
|||
"css" : ["src/scss/*.scss","src/scss/**/*.scss"], |
|||
"js" : [ "src/js/*.js","src/js/**/*.js"] |
|||
} |
|||
} |
@ -0,0 +1,6 @@ |
|||
</section> |
|||
<!--E: 컨텐츠 영역--> |
|||
|
|||
<!--S: 푸터 영역--> |
|||
|
|||
<!--E: 푸터 영역--> |
@ -0,0 +1,13 @@ |
|||
<!--S: 숨김 메뉴--> |
|||
<ul class="sr-only sr-only-focusable"> |
|||
<li><a href="#contents">컨텐츠 바로가기</a></li> |
|||
<li><a href="#nav">메뉴 바로가기</a></li> |
|||
</ul> |
|||
<!--E: 숨김 메뉴--> |
|||
|
|||
<!--S: 헤더 영역--> |
|||
|
|||
<!--E: 헤더 영역--> |
|||
|
|||
<!--S: 컨텐츠 영역--> |
|||
<section id="contents"> |
@ -0,0 +1,12 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="ko"> |
|||
<head> |
|||
<meta charset="utf-8"> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no"> |
|||
<title>@@pageTitle</title> |
|||
<link rel="stylesheet" href="https://fonts.googleapis.com/earlyaccess/notosanskr.css"> |
|||
<link rel="stylesheet" href="@@ROOT/assets/css/style.min.css"> |
|||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> |
|||
<script src="@@ROOT/assets/js/common.min.js"></script> |
|||
</head> |
|||
<body> |
@ -0,0 +1,2 @@ |
|||
</body> |
|||
</html> |
@ -0,0 +1,5 @@ |
|||
@@include("./include/meta.html", {"pageTitle" : "메인 페이지"}) |
|||
@@include("./include/header.html") |
|||
|
|||
@@include("./include/footer.html") |
|||
@@include("./include/tail.html") |
@ -0,0 +1,25 @@ |
|||
[class^={{packageName}}-] { |
|||
display:inline-block; |
|||
vertical-align:middle; |
|||
position: relative; |
|||
text-indent: -99999px; |
|||
overflow: hidden; |
|||
background-repeat: no-repeat; |
|||
background-image: url('{{{spritesheet.escaped_image}}}'); |
|||
|
|||
{{#spritesheet}} |
|||
$total_width: {{width}}; |
|||
$total_height: {{height}}; |
|||
{{/spritesheet}} |
|||
|
|||
{{#block "sprites"}} |
|||
{{#each sprites}} |
|||
&.{{packageName}}-{{name}} { |
|||
background-size: (($total_width / {{width}}) * 100%) (($total_height / {{height}}) * 100%); |
|||
background-position: (({{offset_x}} / ($total_width - {{width}})) * -100%) (({{offset_y}} / ($total_height - {{height}})) * -100%); |
|||
width: {{px.width}}; |
|||
height: {{px.height}}; |
|||
} |
|||
{{/each}} |
|||
{{/block}} |
|||
} |
@ -0,0 +1,862 @@ |
|||
var Wheeparam = { |
|||
version: '0.0.1' |
|||
}; |
|||
|
|||
Wheeparam.init = function() {}; |
|||
Wheeparam.onDocuemntReady = function(fn) { |
|||
if (document.attachEvent ? document.readyState === "complete" : document.readyState !== "loading"){ |
|||
fn(); |
|||
} else { |
|||
document.addEventListener('DOMContentLoaded', fn); |
|||
} |
|||
}; |
|||
Wheeparam.Easing = { |
|||
easeInQuad: function (t, b, c, d) { |
|||
return c*(t/=d)*t + b; |
|||
}, |
|||
easeOutQuad: function (t, b, c, d) { |
|||
return -c *(t/=d)*(t-2) + b; |
|||
}, |
|||
easeInOutQuad: function (t, b, c, d) { |
|||
if ((t/=d/2) < 1) return c/2*t*t + b; |
|||
return -c/2 * ((--t)*(t-2) - 1) + b; |
|||
}, |
|||
easeInCubic: function (t, b, c, d) { |
|||
return c*(t/=d)*t*t + b; |
|||
}, |
|||
easeOutCubic: function (t, b, c, d) { |
|||
return c*((t=t/d-1)*t*t + 1) + b; |
|||
}, |
|||
easeInOutCubic: function (t, b, c, d) { |
|||
if ((t/=d/2) < 1) return c/2*t*t*t + b; |
|||
return c/2*((t-=2)*t*t + 2) + b; |
|||
}, |
|||
easeInQuart: function (t, b, c, d) { |
|||
return c*(t/=d)*t*t*t + b; |
|||
}, |
|||
easeOutQuart: function (t, b, c, d) { |
|||
return -c * ((t=t/d-1)*t*t*t - 1) + b; |
|||
}, |
|||
easeInOutQuart: function (t, b, c, d) { |
|||
if ((t/=d/2) < 1) return c/2*t*t*t*t + b; |
|||
return -c/2 * ((t-=2)*t*t*t - 2) + b; |
|||
}, |
|||
easeInQuint: function (t, b, c, d) { |
|||
return c*(t/=d)*t*t*t*t + b; |
|||
}, |
|||
easeOutQuint: function (t, b, c, d) { |
|||
return c*((t=t/d-1)*t*t*t*t + 1) + b; |
|||
}, |
|||
easeInOutQuint: function (t, b, c, d) { |
|||
if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b; |
|||
return c/2*((t-=2)*t*t*t*t + 2) + b; |
|||
}, |
|||
easeInSine: function (t, b, c, d) { |
|||
return -c * Math.cos(t/d * (Math.PI/2)) + c + b; |
|||
}, |
|||
easeOutSine: function (t, b, c, d) { |
|||
return c * Math.sin(t/d * (Math.PI/2)) + b; |
|||
}, |
|||
easeInOutSine: function (t, b, c, d) { |
|||
return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b; |
|||
}, |
|||
easeInExpo: function (t, b, c, d) { |
|||
return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b; |
|||
}, |
|||
easeOutExpo: function (t, b, c, d) { |
|||
return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b; |
|||
}, |
|||
easeInOutExpo: function (t, b, c, d) { |
|||
if (t==0) return b; |
|||
if (t==d) return b+c; |
|||
if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b; |
|||
return c/2 * (-Math.pow(2, -10 * --t) + 2) + b; |
|||
}, |
|||
easeInCirc: function (t, b, c, d) { |
|||
return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b; |
|||
}, |
|||
easeOutCirc: function (t, b, c, d) { |
|||
return c * Math.sqrt(1 - (t=t/d-1)*t) + b; |
|||
}, |
|||
easeInOutCirc: function (t, b, c, d) { |
|||
if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b; |
|||
return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b; |
|||
}, |
|||
easeInElastic: function (t, b, c, d) { |
|||
var s=1.70158;var p=0;var a=c; |
|||
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; |
|||
if (a < Math.abs(c)) { a=c; var s=p/4; } |
|||
else var s = p/(2*Math.PI) * Math.asin (c/a); |
|||
return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; |
|||
}, |
|||
easeOutElastic: function (t, b, c, d) { |
|||
var s=1.70158;var p=0;var a=c; |
|||
if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3; |
|||
if (a < Math.abs(c)) { a=c; var s=p/4; } |
|||
else var s = p/(2*Math.PI) * Math.asin (c/a); |
|||
return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b; |
|||
}, |
|||
easeInOutElastic: function (t, b, c, d) { |
|||
var s=1.70158;var p=0;var a=c; |
|||
if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5); |
|||
if (a < Math.abs(c)) { a=c; var s=p/4; } |
|||
else var s = p/(2*Math.PI) * Math.asin (c/a); |
|||
if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b; |
|||
return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b; |
|||
}, |
|||
easeInBack: function (t, b, c, d, s) { |
|||
if (s == undefined) s = 1.70158; |
|||
return c*(t/=d)*t*((s+1)*t - s) + b; |
|||
}, |
|||
easeOutBack: function (t, b, c, d, s) { |
|||
if (s == undefined) s = 1.70158; |
|||
return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b; |
|||
}, |
|||
easeInOutBack: function (t, b, c, d, s) { |
|||
if (s == undefined) s = 1.70158; |
|||
if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b; |
|||
return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b; |
|||
}, |
|||
easeInBounce: function (t, b, c, d) { |
|||
return c - Wheeparam.Easing.easeOutBounce (d-t, 0, c, d) + b; |
|||
}, |
|||
easeOutBounce: function (t, b, c, d) { |
|||
if ((t/=d) < (1/2.75)) { |
|||
return c*(7.5625*t*t) + b; |
|||
} else if (t < (2/2.75)) { |
|||
return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b; |
|||
} else if (t < (2.5/2.75)) { |
|||
return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b; |
|||
} else { |
|||
return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b; |
|||
} |
|||
}, |
|||
easeInOutBounce: function (t, b, c, d) { |
|||
if (t < d/2) return Wheeparam.Easing.easeInBounce (t*2, 0, c, d) * .5 + b; |
|||
return Wheeparam.Easing.easeOutBounce (t*2-d, 0, c, d) * .5 + c*.5 + b; |
|||
} |
|||
}; |
|||
/*! |
|||
autosize 4.0.2 |
|||
license: MIT |
|||
http://www.jacklmoore.com/autosize
|
|||
*/ |
|||
(function (global, factory) { |
|||
if (typeof define === "function" && define.amd) { |
|||
define(['module', 'exports'], factory); |
|||
} else if (typeof exports !== "undefined") { |
|||
factory(module, exports); |
|||
} else { |
|||
var mod = { |
|||
exports: {} |
|||
}; |
|||
factory(mod, mod.exports); |
|||
global.autosize = mod.exports; |
|||
} |
|||
})(this, function (module, exports) { |
|||
'use strict'; |
|||
|
|||
var map = typeof Map === "function" ? new Map() : function () { |
|||
var keys = []; |
|||
var values = []; |
|||
|
|||
return { |
|||
has: function has(key) { |
|||
return keys.indexOf(key) > -1; |
|||
}, |
|||
get: function get(key) { |
|||
return values[keys.indexOf(key)]; |
|||
}, |
|||
set: function set(key, value) { |
|||
if (keys.indexOf(key) === -1) { |
|||
keys.push(key); |
|||
values.push(value); |
|||
} |
|||
}, |
|||
delete: function _delete(key) { |
|||
var index = keys.indexOf(key); |
|||
if (index > -1) { |
|||
keys.splice(index, 1); |
|||
values.splice(index, 1); |
|||
} |
|||
} |
|||
}; |
|||
}(); |
|||
|
|||
var createEvent = function createEvent(name) { |
|||
return new Event(name, { bubbles: true }); |
|||
}; |
|||
try { |
|||
new Event('test'); |
|||
} catch (e) { |
|||
// IE does not support `new Event()`
|
|||
createEvent = function createEvent(name) { |
|||
var evt = document.createEvent('Event'); |
|||
evt.initEvent(name, true, false); |
|||
return evt; |
|||
}; |
|||
} |
|||
|
|||
function assign(ta) { |
|||
if (!ta || !ta.nodeName || ta.nodeName !== 'TEXTAREA' || map.has(ta)) return; |
|||
|
|||
var heightOffset = null; |
|||
var clientWidth = null; |
|||
var cachedHeight = null; |
|||
|
|||
function init() { |
|||
var style = window.getComputedStyle(ta, null); |
|||
|
|||
if (style.resize === 'vertical') { |
|||
ta.style.resize = 'none'; |
|||
} else if (style.resize === 'both') { |
|||
ta.style.resize = 'horizontal'; |
|||
} |
|||
|
|||
if (style.boxSizing === 'content-box') { |
|||
heightOffset = -(parseFloat(style.paddingTop) + parseFloat(style.paddingBottom)); |
|||
} else { |
|||
heightOffset = parseFloat(style.borderTopWidth) + parseFloat(style.borderBottomWidth); |
|||
} |
|||
// Fix when a textarea is not on document body and heightOffset is Not a Number
|
|||
if (isNaN(heightOffset)) { |
|||
heightOffset = 0; |
|||
} |
|||
|
|||
update(); |
|||
} |
|||
|
|||
function changeOverflow(value) { |
|||
{ |
|||
// Chrome/Safari-specific fix:
|
|||
// When the textarea y-overflow is hidden, Chrome/Safari do not reflow the text to account for the space
|
|||
// made available by removing the scrollbar. The following forces the necessary text reflow.
|
|||
var width = ta.style.width; |
|||
ta.style.width = '0px'; |
|||
// Force reflow:
|
|||
/* jshint ignore:start */ |
|||
ta.offsetWidth; |
|||
/* jshint ignore:end */ |
|||
ta.style.width = width; |
|||
} |
|||
|
|||
ta.style.overflowY = value; |
|||
} |
|||
|
|||
function getParentOverflows(el) { |
|||
var arr = []; |
|||
|
|||
while (el && el.parentNode && el.parentNode instanceof Element) { |
|||
if (el.parentNode.scrollTop) { |
|||
arr.push({ |
|||
node: el.parentNode, |
|||
scrollTop: el.parentNode.scrollTop |
|||
}); |
|||
} |
|||
el = el.parentNode; |
|||
} |
|||
|
|||
return arr; |
|||
} |
|||
|
|||
function resize() { |
|||
if (ta.scrollHeight === 0) { |
|||
// If the scrollHeight is 0, then the element probably has display:none or is detached from the DOM.
|
|||
return; |
|||
} |
|||
|
|||
var overflows = getParentOverflows(ta); |
|||
var docTop = document.documentElement && document.documentElement.scrollTop; // Needed for Mobile IE (ticket #240)
|
|||
|
|||
ta.style.height = ''; |
|||
ta.style.height = ta.scrollHeight + heightOffset + 'px'; |
|||
|
|||
// used to check if an update is actually necessary on window.resize
|
|||
clientWidth = ta.clientWidth; |
|||
|
|||
// prevents scroll-position jumping
|
|||
overflows.forEach(function (el) { |
|||
el.node.scrollTop = el.scrollTop; |
|||
}); |
|||
|
|||
if (docTop) { |
|||
document.documentElement.scrollTop = docTop; |
|||
} |
|||
} |
|||
|
|||
function update() { |
|||
resize(); |
|||
|
|||
var styleHeight = Math.round(parseFloat(ta.style.height)); |
|||
var computed = window.getComputedStyle(ta, null); |
|||
|
|||
// Using offsetHeight as a replacement for computed.height in IE, because IE does not account use of border-box
|
|||
var actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(computed.height)) : ta.offsetHeight; |
|||
|
|||
// The actual height not matching the style height (set via the resize method) indicates that
|
|||
// the max-height has been exceeded, in which case the overflow should be allowed.
|
|||
if (actualHeight < styleHeight) { |
|||
if (computed.overflowY === 'hidden') { |
|||
changeOverflow('scroll'); |
|||
resize(); |
|||
actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight; |
|||
} |
|||
} else { |
|||
// Normally keep overflow set to hidden, to avoid flash of scrollbar as the textarea expands.
|
|||
if (computed.overflowY !== 'hidden') { |
|||
changeOverflow('hidden'); |
|||
resize(); |
|||
actualHeight = computed.boxSizing === 'content-box' ? Math.round(parseFloat(window.getComputedStyle(ta, null).height)) : ta.offsetHeight; |
|||
} |
|||
} |
|||
|
|||
if (cachedHeight !== actualHeight) { |
|||
cachedHeight = actualHeight; |
|||
var evt = createEvent('autosize:resized'); |
|||
try { |
|||
ta.dispatchEvent(evt); |
|||
} catch (err) { |
|||
// Firefox will throw an error on dispatchEvent for a detached element
|
|||
// https://bugzilla.mozilla.org/show_bug.cgi?id=889376
|
|||
} |
|||
} |
|||
} |
|||
|
|||
var pageResize = function pageResize() { |
|||
if (ta.clientWidth !== clientWidth) { |
|||
update(); |
|||
} |
|||
}; |
|||
|
|||
var destroy = function (style) { |
|||
window.removeEventListener('resize', pageResize, false); |
|||
ta.removeEventListener('input', update, false); |
|||
ta.removeEventListener('keyup', update, false); |
|||
ta.removeEventListener('autosize:destroy', destroy, false); |
|||
ta.removeEventListener('autosize:update', update, false); |
|||
|
|||
Object.keys(style).forEach(function (key) { |
|||
ta.style[key] = style[key]; |
|||
}); |
|||
|
|||
map.delete(ta); |
|||
}.bind(ta, { |
|||
height: ta.style.height, |
|||
resize: ta.style.resize, |
|||
overflowY: ta.style.overflowY, |
|||
overflowX: ta.style.overflowX, |
|||
wordWrap: ta.style.wordWrap |
|||
}); |
|||
|
|||
ta.addEventListener('autosize:destroy', destroy, false); |
|||
|
|||
// IE9 does not fire onpropertychange or oninput for deletions,
|
|||
// so binding to onkeyup to catch most of those events.
|
|||
// There is no way that I know of to detect something like 'cut' in IE9.
|
|||
if ('onpropertychange' in ta && 'oninput' in ta) { |
|||
ta.addEventListener('keyup', update, false); |
|||
} |
|||
|
|||
window.addEventListener('resize', pageResize, false); |
|||
ta.addEventListener('input', update, false); |
|||
ta.addEventListener('autosize:update', update, false); |
|||
ta.style.overflowX = 'hidden'; |
|||
ta.style.wordWrap = 'break-word'; |
|||
|
|||
map.set(ta, { |
|||
destroy: destroy, |
|||
update: update |
|||
}); |
|||
|
|||
init(); |
|||
} |
|||
|
|||
function destroy(ta) { |
|||
var methods = map.get(ta); |
|||
if (methods) { |
|||
methods.destroy(); |
|||
} |
|||
} |
|||
|
|||
function update(ta) { |
|||
var methods = map.get(ta); |
|||
if (methods) { |
|||
methods.update(); |
|||
} |
|||
} |
|||
|
|||
var autosize = null; |
|||
|
|||
// Do nothing in Node.js environment and IE8 (or lower)
|
|||
if (typeof window === 'undefined' || typeof window.getComputedStyle !== 'function') { |
|||
autosize = function autosize(el) { |
|||
return el; |
|||
}; |
|||
autosize.destroy = function (el) { |
|||
return el; |
|||
}; |
|||
autosize.update = function (el) { |
|||
return el; |
|||
}; |
|||
} else { |
|||
autosize = function autosize(el, options) { |
|||
if (el) { |
|||
Array.prototype.forEach.call(el.length ? el : [el], function (x) { |
|||
return assign(x, options); |
|||
}); |
|||
} |
|||
return el; |
|||
}; |
|||
autosize.destroy = function (el) { |
|||
if (el) { |
|||
Array.prototype.forEach.call(el.length ? el : [el], destroy); |
|||
} |
|||
return el; |
|||
}; |
|||
autosize.update = function (el) { |
|||
if (el) { |
|||
Array.prototype.forEach.call(el.length ? el : [el], update); |
|||
} |
|||
return el; |
|||
}; |
|||
} |
|||
|
|||
exports.default = autosize; |
|||
module.exports = exports['default']; |
|||
}); |
|||
/********************************************************************************************************************** |
|||
* 숫자에 컴마를 붙여서 리턴한다 |
|||
* @returns {*} |
|||
*********************************************************************************************************************/ |
|||
Number.prototype.numberFormat = function(){ |
|||
if(this==0) return 0; |
|||
|
|||
var reg = /(^[+-]?\d+)(\d{3})/; |
|||
var n = (this + ''); |
|||
|
|||
while (reg.test(n)) n = n.replace(reg, '$1' + ',' + '$2'); |
|||
|
|||
return n; |
|||
}; |
|||
String.prototype.numberFormat = function() { return isNaN( parseFloat(this) ) ? "0" : (parseFloat(this)).numberFormat(); }; |
|||
|
|||
/********************************************************************************************************************** |
|||
* 컴마가 붙어있는 숫자에서 콤마를 삭제하고 숫자로 반환한다. |
|||
* @returns {*} |
|||
*********************************************************************************************************************/ |
|||
String.prototype.unNumberFormat = function() { |
|||
var str = this; |
|||
if(typeof str == 'number') return str; |
|||
str = ("" + str).replace(/,/gi,''); // 콤마 제거
|
|||
str = str.replace(/(^\s*)|(\s*$)/g, ""); // trim
|
|||
|
|||
var returnStr = new Number(str); |
|||
return isNaN(returnStr) ? str : returnStr; |
|||
}; |
|||
Number.prototype.unNumberFormat = function() { |
|||
return this; |
|||
}; |
|||
|
|||
/********************************************************************************************************************** |
|||
* 날짜를 원하는 포맷 형식으로 출력 |
|||
* @param f |
|||
* @returns {*} |
|||
*********************************************************************************************************************/ |
|||
Date.prototype.dateFormat = function(f) { |
|||
if (!this.valueOf()) return " "; |
|||
if (!f) return this; |
|||
|
|||
var weekName = ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일"], |
|||
shortWeekName = ["일", "월", "화", "수", "목", "금", "토"], |
|||
d = this; |
|||
|
|||
return f.replace(/(yyyy|yy|MM|dd|E|hh|mm|ss|a\/p)/gi, function($1) { |
|||
switch ($1) { |
|||
case "yyyy": return d.getFullYear(); |
|||
case "yy": return (d.getFullYear() % 1000).zf(2); |
|||
case "MM": return (d.getMonth() + 1).zf(2); |
|||
case "dd": return d.getDate().zf(2); |
|||
case "E": return weekName[d.getDay()]; |
|||
case "e": return shortWeekName[d.getDay()]; |
|||
case "HH": return d.getHours().zf(2); |
|||
case "hh": return ((h = d.getHours() % 12) ? h : 12).zf(2); |
|||
case "mm": return d.getMinutes().zf(2); |
|||
case "ss": return d.getSeconds().zf(2); |
|||
case "a/p": return d.getHours() < 12 ? "오전" : "오후"; |
|||
default: return $1; |
|||
} |
|||
}); |
|||
}; |
|||
String.prototype.string = function(len){var s = '', i = 0; while (i++ < len) { s += this; } return s;}; |
|||
String.prototype.zf = function(len){return "0".string(len - this.length) + this;}; |
|||
Number.prototype.zf = function(len){return this.toString().zf(len);}; |
|||
String.prototype.dateFormat = function(f) { |
|||
var d = new Date(this); |
|||
return ( d == 'Invalid Date') ? '' : d.dateFormat(f); |
|||
} |
|||
|
|||
/********************************************************************************************************************** |
|||
* 숫자를 한글명으로 바꿔서 보여줍니다. |
|||
*********************************************************************************************************************/ |
|||
Number.prototype.toKorean = function() { |
|||
var hanA = new Array("","일","이","삼","사","오","육","칠","팔","구","십"), |
|||
danA = new Array("","십","백","천","","십","백","천","","십","백","천","","십","백","천"), |
|||
num = new String(this), |
|||
result = ''; |
|||
|
|||
for(var i=0; i<num.length; i++) { |
|||
var str = "", |
|||
han = hanA[num.charAt(num.length-(i+1))]; |
|||
|
|||
if(han != "") str += han+danA[i]; |
|||
|
|||
if(i == 4) str += "만"; |
|||
if(i == 8) str += "억"; |
|||
if(i == 12) str += "조"; |
|||
|
|||
result = str + result; |
|||
} |
|||
|
|||
return result; |
|||
} |
|||
String.prototype.toKorean = function() { |
|||
return (this.unNumberFormat()).toKorean(); |
|||
} |
|||
/************************************************************************************************************************ |
|||
* 해당 문자열의 regex 검사 |
|||
* @param regexType |
|||
*************************************************************************************************************************/ |
|||
String.prototype.regex = function(regexType) { |
|||
var phoneRegex = /^(01[016789]{1}|02|0[3-9]{1}[0-9]{1})([0-9]{3,4})([0-9]{4})$/, |
|||
phoneWithHypenRegex = /^(01[016789]{1}|02|0[3-9]{1}[0-9]{1})-?([0-9]{3,4})-?([0-9]{4})$/, |
|||
telRegex = /(^02.{0}|^01.{1}|[0-9]{3})([0-9]{3,4})([0-9]{4})/, |
|||
telCheckRegex = /^\d{2,3}-\d{3,4}-\d{4}$/, |
|||
emailRegex = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/, |
|||
str = this; |
|||
|
|||
switch(regexType) { |
|||
case "phone" : |
|||
var transNum = str.replace(/\s/gi, '').replace(/-/gi,''); |
|||
if(transNum.length == 11 || transNum.length == 10) { |
|||
if( phoneRegex.test(transNum) ) { |
|||
transNum = transNum.replace(phoneWithHypenRegex, '$1-$2-$3'); |
|||
return transNum; |
|||
} |
|||
} |
|||
return false; |
|||
case "tel": |
|||
var transNum = str.replace(/\s/gi, '').replace(/-/gi,''); |
|||
transNum = transNum.replace(telRegex, '$1-$2-$3'); |
|||
if(telCheckRegex.test(transNum)) { |
|||
return transNum; |
|||
} |
|||
return false; |
|||
case "email": |
|||
return emailRegex.test(str); |
|||
|
|||
case "biznum" : |
|||
var checkID = new Array(1, 3, 7, 1, 3, 7, 1, 3, 5, 1), |
|||
tmpBizID, i, chkSum=0, c2, remander, |
|||
bizID = str.replace(/-/gi,''); |
|||
|
|||
for (i=0; i<=7; i++) chkSum += checkID[i] * bizID.charAt(i); |
|||
c2 = "0" + (checkID[8] * bizID.charAt(8)); |
|||
c2 = c2.substring(c2.length - 2, c2.length); |
|||
chkSum += Math.floor(c2.charAt(0)) + Math.floor(c2.charAt(1)); |
|||
remander = (10 - (chkSum % 10)) % 10 ; |
|||
|
|||
if (Math.floor(bizID.charAt(9)) == remander) return bizID.replace(/(\d{3})(\d{2})(\d{5})/, '$1-$2-$3'); |
|||
return false; |
|||
} |
|||
}; |
|||
/************************************************************************************************************ |
|||
* 특정 엘리먼트 또는 최상단으로 스크롤을 이동시킵니다. |
|||
* @param elementSelector 셀렉터 |
|||
* @param animation 애니메이션 효과 |
|||
* @param duration 지속시간 |
|||
* @constructor |
|||
*************************************************************************************************************/ |
|||
Wheeparam.ScrollTo = function( elementSelector, animation, duration ) { |
|||
elementSelector = typeof elementSelector != 'undefined' && elementSelector ? elementSelector : false; |
|||
animation = typeof animation != 'undefined' && animation ? animation : false; |
|||
duration = typeof duration != 'undefined' && duration && animation ? duration : 0; |
|||
|
|||
var start = window.pageYOffset || document.body.scrollTop, |
|||
element = elementSelector ? document.querySelector(elementSelector) : document.body, |
|||
to = element.offsetTop, |
|||
change = to - start, |
|||
currentTime = 0, |
|||
increment = 20; |
|||
|
|||
var animateScroll = function() { |
|||
currentTime += increment; |
|||
var value = animation ? Wheeparam.Easing[animation]( currentTime, start, change, duration ) : to; |
|||
|
|||
window.scrollTo(0, value); |
|||
|
|||
if(currentTime < duration) { |
|||
setTimeout(animateScroll, increment); |
|||
} |
|||
} |
|||
animateScroll(); |
|||
}; |
|||
|
|||
/************************************************************************************************************ |
|||
* 두 배열을 합쳐줍니다. |
|||
* @param out 합칠 배열들 |
|||
* @returns {*|{}} |
|||
************************************************************************************************************/ |
|||
Wheeparam.extend = function( out ) { |
|||
out = out || {}; |
|||
|
|||
for (var i = 1; i < arguments.length; i++) { |
|||
var obj = arguments[i]; |
|||
|
|||
if (!obj) |
|||
continue; |
|||
|
|||
for (var key in obj) { |
|||
if (obj.hasOwnProperty(key)) { |
|||
if (typeof obj[key] === 'object') |
|||
out[key] = Wheeparam.extend(out[key], obj[key]); |
|||
else |
|||
out[key] = obj[key]; |
|||
} |
|||
} |
|||
} |
|||
|
|||
return out; |
|||
}; |
|||
|
|||
/************************************************************************************************************ |
|||
* 팝업창을 띄웁니다. |
|||
* @param options |
|||
************************************************************************************************************/ |
|||
Wheeparam.popup = function( options ) { |
|||
var defaults={ |
|||
title : '_blank', |
|||
width : 800, |
|||
height : 600, |
|||
url : '', |
|||
onFailed: function() { |
|||
alert("팝업 차단 기능이 설정되어있습니다.\n차단 기능을 해제(팝업허용) 한 후 다시 이용해 주십시오."); |
|||
} |
|||
}; |
|||
|
|||
var option = Wheeparam.extend({}, defaults, options), |
|||
cw = screen.availWidth, |
|||
ch = screen.availHeight, |
|||
sw = option.width, |
|||
sh = option.height, |
|||
ml = (cw - sw) / 2, |
|||
mt = (ch - sh) / 2, |
|||
opt = 'width='+sw+',height='+sh+',top='+mt+',left='+ml+',scrollbars=yes,resizable=no', |
|||
win = window.open(options.url, options.title, opt); |
|||
|
|||
if (win == null || typeof(win) == "undefined" || (win == null && win.outerWidth == 0) || (win != null && win.outerHeight == 0)) |
|||
{ |
|||
option.onFailed(); |
|||
return; |
|||
} |
|||
}; |
|||
|
|||
/************************************************************************************************************ |
|||
* 소셜 공유 팝업창을 띄우거나 페이지로 이동합니다. |
|||
* @param options |
|||
************************************************************************************************************/ |
|||
Wheeparam.shareSNS = function( options ) { |
|||
var defaults = { |
|||
title : '', |
|||
provider: '', |
|||
url: '', |
|||
imgSrc: '', |
|||
width: 800, |
|||
height: 600, |
|||
onFailed: function() { |
|||
alert("팝업 차단 기능이 설정되어있습니다.\n차단 기능을 해제(팝업허용) 한 후 다시 이용해 주십시오."); |
|||
} |
|||
}; |
|||
var option = Wheeparam.extend({}, defaults, options); |
|||
|
|||
if(! option.title) { |
|||
option.title = document.querySelector('meta[property="og:title"]') |
|||
? document.querySelector('meta[property="og:title"]').getAttribute('content') |
|||
: (document.querySelector('title') |
|||
? document.querySelector('title').innerText |
|||
: '' |
|||
); |
|||
} |
|||
|
|||
if(! option.url) { |
|||
option.url = window.location.href; |
|||
} |
|||
|
|||
if(! option.imgSrc) { |
|||
option.imgSrc = document.querySelector('meta[property="og:image"]') |
|||
? document.querySelector('meta[property="og:image"]').getAttribute('content') |
|||
: (document.querySelector('link[rel="image_src"]') |
|||
? document.querySelector('link[rel="image_src"]').innerText |
|||
: '' |
|||
); |
|||
} |
|||
|
|||
option.url = encodeURIComponent(option.url); |
|||
option.title = encodeURIComponent(option.title); |
|||
|
|||
var loc = ""; |
|||
|
|||
switch (option.provider) { |
|||
case 'facebook' : |
|||
loc = '//www.facebook.com/sharer/sharer.php?u='+option.url; |
|||
break; |
|||
case 'twitter': |
|||
loc = '//twitter.com/home?status='+option.title+' '+ option.url; |
|||
break; |
|||
case 'google': |
|||
loc = '//plus.google.com/share?url='+option.url; |
|||
break; |
|||
case 'pinterest': |
|||
loc = '//www.pinterest.com/pin/create/button/?url='+option.url+ ( option.imgSrc ? '&media='+ option.imgSrc : '' )+'&description='+option.title; |
|||
break; |
|||
case 'kakaostory': |
|||
loc = 'https://story.kakao.com/share?url='+option.url; |
|||
break; |
|||
case 'band': |
|||
loc = 'http://www.band.us/plugin/share?body='+option.title+'%0A'+option.url; |
|||
break; |
|||
case 'naver': |
|||
loc = "http://share.naver.com/web/shareView.nhn?url="+option.url+"&title="+option.title; |
|||
break; |
|||
case 'line': |
|||
loc = "http://line.me/R/msg/text/?" + option.title + encodeURIComponent("\n") + option.url; |
|||
break; |
|||
} |
|||
|
|||
if( loc ) { |
|||
Wheeparam.popup({ url : loc, width: option.width, height: option.height, onFailed:option.onFailed }); |
|||
} |
|||
|
|||
return false; |
|||
}; |
|||
/*********************************************************************************************************************** |
|||
* 전체체크박스 / 체크박스 연동 |
|||
***********************************************************************************************************************/ |
|||
Wheeparam.onDocuemntReady(function() { |
|||
var checkboxs = document.querySelectorAll('[data-checkbox]'); |
|||
if(checkboxs.length > 0) { |
|||
for( var i = 0; i<checkboxs.length; i++) { |
|||
checkboxs[i].addEventListener('change', function(event) { |
|||
var $check = this, |
|||
is_all = this.getAttribute('data-checkbox-all') != null ? true : false, |
|||
name = this.getAttribute('data-checkbox'), |
|||
checked = this.checked, |
|||
$allCheck = is_all ? $check : (document.querySelectorAll('[data-checkbox="'+name+'"][data-checkbox-all]').length > 0 ? document.querySelectorAll('[data-checkbox="'+name+'"][data-checkbox-all]')[0] : null ), |
|||
checks = document.querySelectorAll('[data-checkbox="'+name+'"]'); |
|||
|
|||
if(! $allCheck) return; |
|||
|
|||
if( is_all ) { |
|||
for(var k =0; k<checks.length; k++) { |
|||
checks[k].checked = checked; |
|||
} |
|||
} |
|||
else { |
|||
var is_all_check = true; |
|||
for(var k =0; k<checks.length; k++) { |
|||
if(checks[k].getAttribute('data-checkbox-all') != null) continue; |
|||
if(checks[k].checked == false) { |
|||
is_all_check = false; |
|||
break; |
|||
} |
|||
} |
|||
$allCheck.checked = is_all_check; |
|||
} |
|||
}); |
|||
} |
|||
} |
|||
}); |
|||
|
|||
/*********************************************************************************************************************** |
|||
* 숫자 3자리마다 Comma 자동 입력 Input |
|||
***********************************************************************************************************************/ |
|||
Wheeparam.onDocuemntReady(function() { |
|||
var $input = document.querySelectorAll('input[data-number-format]'); |
|||
if($input.length > 0) { |
|||
for(var i=0; i<$input.length; i++) |
|||
{ |
|||
$input[i].addEventListener('keyup', function() { |
|||
var value = this.value.unNumberFormat().numberFormat(); |
|||
this.value = value; |
|||
}); |
|||
} |
|||
} |
|||
}); |
|||
|
|||
/*********************************************************************************************************************** |
|||
* 숫자만 입력가능한 Input |
|||
***********************************************************************************************************************/ |
|||
Wheeparam.onDocuemntReady(function() { |
|||
var $input = document.querySelectorAll('[data-number-only]'); |
|||
if($input.length <=0 ) return; |
|||
|
|||
for(var i=0; i<$input.length; i++) { |
|||
$input[i].addEventListener('keypress', function(e) { |
|||
if (e.which != 8 && e.which != 0 && e.which != 45 && (e.which < 48 || e.which > 57)) { |
|||
e.preventDefault(); |
|||
} |
|||
}) |
|||
} |
|||
}); |
|||
|
|||
/*********************************************************************************************************************** |
|||
* 높이가 자동 조정되는 textarea |
|||
***********************************************************************************************************************/ |
|||
Wheeparam.onDocuemntReady(function() { |
|||
var $input = document.querySelectorAll('textarea[data-autosize]'); |
|||
if($input.length > 0) |
|||
{ |
|||
for(var i =0; i<$input.length; i++) |
|||
{ |
|||
$input[i].addEventListener('keyup', function() { |
|||
autosize(this); |
|||
}); |
|||
} |
|||
} |
|||
}); |
|||
|
|||
/*********************************************************************************************************************** |
|||
* 소셜 공유 버튼 |
|||
***********************************************************************************************************************/ |
|||
Wheeparam.onDocuemntReady(function() { |
|||
var $socialParentElement = document.querySelectorAll('[data-sns-share]'); |
|||
if($socialParentElement.length > 0) |
|||
{ |
|||
for(var i =0; i<$socialParentElement.length; i++) |
|||
{ |
|||
var el = $socialParentElement[i], |
|||
title = el.getAttribute('data-title') ? el.getAttribute('data-title') : '', |
|||
url = el.getAttribute('data-url') ? el.getAttribute('data-url') : '', |
|||
imgSrc = el.getAttribute('data-img-src') ? el.getAttribute('data-img-src') : '', |
|||
width = el.getAttribute('data-width') ? el.getAttribute('data-width') : 800, |
|||
height = el.getAttribute('data-height') ? el.getAttribute('data-height') : 600, |
|||
providers = el.querySelectorAll('[data-sns-provider]'); |
|||
|
|||
for(var k=0; k<providers.length; k ++) |
|||
{ |
|||
providers[k].addEventListener('click', function() { |
|||
var provider = this.getAttribute('data-sns-provider') ? this.getAttribute('data-sns-provider') : ''; |
|||
if(! provider) return false; |
|||
|
|||
Wheeparam.shareSNS({ |
|||
title : title, |
|||
provider : provider, |
|||
url : url, |
|||
imgSrc: imgSrc, |
|||
width: width, |
|||
height: height |
|||
}) |
|||
}); |
|||
} |
|||
} |
|||
} |
|||
}); |
@ -0,0 +1,29 @@ |
|||
// 색상 변수 |
|||
$color-primary : #282828; // 메인 컬러 |
|||
$color-secondary : #282828; // 서브 컬러 |
|||
|
|||
$body-color : #212529; // 기본 텍스트 색상 |
|||
$body-bg-color : #FFFFFF; // 기본 배경 색상 |
|||
|
|||
$link-color : $body-color; // 링크 텍스트 색상 |
|||
$link-hover-color : $color-primary; // 링크 오버시 텍스트 색상 |
|||
|
|||
// 폰트 관련 |
|||
$font-family-base : 'Noto Sans KR',sans-serif; // 기본글자에 사용 되는 폰트 |
|||
$font-family-heading : $font-family-base; // 헤딩태그에 사용 되는 폰트 |
|||
$font-size-base : 16px; |
|||
$font-weight-base : 400; |
|||
$font-weight-bold : 700; |
|||
$line-height-base : 1.5em; |
|||
|
|||
// 애니메이션 |
|||
$default-animation : ease; |
|||
|
|||
// 반응형 포인트 |
|||
$break-lg : 1200px; |
|||
$break-md : 992px; |
|||
$break-sm : 768px; |
|||
|
|||
// 테이블 관련 |
|||
$table-cell-padding: .75rem !default; |
|||
$table-cell-padding-sm: .3rem !default; |
@ -0,0 +1,3 @@ |
|||
/*************************************************************************************** |
|||
* 폰트 |
|||
****************************************************************************************/ |
@ -0,0 +1,37 @@ |
|||
// 기본 픽셀 사이즈를 rem 단위 사이즈로 변환 |
|||
@function REM($pxSize:16px){ |
|||
$remSize : $pxSize / $font-size-base !global; |
|||
@return #{$remSize}rem; |
|||
} |
|||
|
|||
@function strip-unit($number) { |
|||
@if type-of($number) == 'number' and not unitless($number) { |
|||
@return $number / ($number * 0 + 1); |
|||
} |
|||
|
|||
@return $number; |
|||
} |
|||
|
|||
@function VW($pxSize:16px) { |
|||
$vwSize: strip-unit($pxSize) / 1080 * 100; |
|||
@return #{$vwSize}vw; |
|||
} |
|||
|
|||
// Media Query를 위한 함수 |
|||
@function translate-media-condition($c) { |
|||
$break-desktop: $break-desktop !global; |
|||
$break-tablet : $break-tablet !global; |
|||
$break-mobile : $break-mobile !global; |
|||
|
|||
$condMap: ( |
|||
"screen": "only screen", |
|||
"print": "only print", |
|||
"retina": "(-webkit-min-device-pixel-ratio: 1.5), (min--moz-device-pixel-ratio: 1.5), (-o-min-device-pixel-ratio: 3/2), (min-device-pixel-ratio: 1.5), (min-resolution: 120dpi)", |
|||
">desktop" : "(min-width: #{$break-desktop + 1})", |
|||
'<desktop' : "(max-width: #{$break-desktop})", |
|||
">tablet": "(min-width: #{$break-tablet + 1})", |
|||
"<tablet": "(max-width: #{$break-tablet})", |
|||
">mobile": "(min-width: #{$break-mobile})" |
|||
); |
|||
@return map-get( $condMap, $c ); |
|||
} |
@ -0,0 +1,125 @@ |
|||
// Clear FIX |
|||
@mixin clear-fix() { |
|||
display:block; |
|||
clear:both; |
|||
content:""; |
|||
} |
|||
|
|||
@mixin clear-fix-after() { |
|||
&:after { |
|||
@include clear-fix(); |
|||
} |
|||
} |
|||
|
|||
// Button Default Style |
|||
@mixin button-default() { |
|||
display: inline-block; |
|||
margin:0; |
|||
font-weight: normal; |
|||
text-align: center; |
|||
white-space: nowrap; |
|||
user-select: none; |
|||
text-decoration: none; |
|||
outline:0; |
|||
vertical-align:middle; |
|||
|
|||
&:disabled, |
|||
&.disabled { |
|||
opacity:0.65; |
|||
} |
|||
|
|||
&:not([disabled]):not(.disabled) { |
|||
cursor: pointer; |
|||
} |
|||
} |
|||
|
|||
// background Image |
|||
@mixin background-image( $image_url, $bg_color:transparent, $background-repeat:no-repeat, $background-position-x:center, $background-position-y:center ) |
|||
{ |
|||
background-color:$bg_color; |
|||
background-image:url($image_url); |
|||
background-repeat: $background-repeat; |
|||
background-position-x:$background-position-x; |
|||
background-position-y:$background-position-y; |
|||
} |
|||
|
|||
// Global Transition |
|||
@mixin transition($second:.3s, $target:all, $animation:$default-animation) |
|||
{ |
|||
-webkit-transition: $target $second $animation; |
|||
-moz-transition: $target $second $animation; |
|||
-ms-transition: $target $second $animation; |
|||
-o-transition: $target $second $animation; |
|||
transition: $target $second $animation; |
|||
} |
|||
|
|||
// Display flex & Prefix |
|||
@mixin display-flex() |
|||
{ |
|||
-webkit-display:flex; |
|||
display:-ms-flex; |
|||
display:flex; |
|||
} |
|||
|
|||
// Media Query |
|||
@mixin media($args...) { |
|||
$query: ""; |
|||
@each $arg in $args { |
|||
$op: ""; |
|||
@if ( $query != "" ) { |
|||
$op: " and "; |
|||
} |
|||
$query: $query + $op + translate-media-condition($arg); |
|||
} |
|||
@media #{$query} { @content; } |
|||
} |
|||
|
|||
@mixin display-lg() { |
|||
@media screen and (min-width:$break-lg + 1) { |
|||
@content; |
|||
} |
|||
} |
|||
|
|||
@mixin display-md() { |
|||
@media screen and (max-width:$break-lg) { |
|||
@content; |
|||
} |
|||
} |
|||
|
|||
@mixin display-sm() { |
|||
@media screen and (max-width:$break-md) { |
|||
@content; |
|||
} |
|||
} |
|||
|
|||
@mixin display-xs() { |
|||
@media screen and (max-width:$break-sm) { |
|||
@content; |
|||
} |
|||
} |
|||
|
|||
|
|||
@mixin background-image-retina($path, $ext: "png", $w: 100%, $h: 100%, $pos-x: center, $pos-y:center, $repeat: no-repeat) { |
|||
$at1x_path: "#{$path}.#{$ext}"; |
|||
$at2x_path: "#{$path}@2x.#{$ext}"; |
|||
$at3x_path: "#{$path}@3x.#{$ext}"; |
|||
|
|||
background-image: url("#{$at1x_path}"); |
|||
background-size: $w $h; |
|||
background-position-x: $pos-x; |
|||
background-position-y: $pos-y; |
|||
background-repeat: $repeat; |
|||
|
|||
@media all and (-webkit-min-device-pixel-ratio : 1.5), |
|||
all and (-o-min-device-pixel-ratio: 3/2), |
|||
all and (min--moz-device-pixel-ratio: 1.5), |
|||
all and (min-device-pixel-ratio: 1.5) { |
|||
background-image: url("#{$at2x_path}"); |
|||
} |
|||
@media all and (-webkit-min-device-pixel-ratio : 2.5), |
|||
all and (-o-min-device-pixel-ratio: 5/2), |
|||
all and (min--moz-device-pixel-ratio: 2.5), |
|||
all and (min-device-pixel-ratio: 2.5) { |
|||
background-image: url("#{$at3x_path}"); |
|||
} |
|||
} |
@ -0,0 +1,330 @@ |
|||
/********************************************************************************************************************** |
|||
* RESET |
|||
***********************************************************************************************************************/ |
|||
*, |
|||
*::before, |
|||
*::after { |
|||
box-sizing: border-box; |
|||
} |
|||
|
|||
html { |
|||
font-family: sans-serif; // 2 |
|||
line-height: 1.15; // 3 |
|||
-webkit-text-size-adjust: 100%; // 4 |
|||
-ms-text-size-adjust: 100%; // 4 |
|||
-ms-overflow-style: scrollbar; // 5 |
|||
-webkit-tap-highlight-color: rgba(#000, 0); // 6 |
|||
} |
|||
|
|||
// IE10+ 에서 viewport 메타 태그가 먹지않는경우를 대비 |
|||
@at-root { |
|||
@-ms-viewport { |
|||
width: device-width; |
|||
} |
|||
} |
|||
|
|||
article, aside, figcaption, figure, footer, header, hgroup, main, nav, section { |
|||
display: block; |
|||
} |
|||
|
|||
body { |
|||
margin: 0; |
|||
font-family: $font-family-base; |
|||
font-size: $font-size-base; |
|||
font-weight: $font-weight-base; |
|||
line-height: $line-height-base; |
|||
color: $body-color; |
|||
text-align: left; |
|||
background-color: $body-bg-color; |
|||
} |
|||
|
|||
[tabindex="-1"]:focus { |
|||
outline: 0 !important; |
|||
} |
|||
|
|||
hr { |
|||
box-sizing: content-box; |
|||
height: 0; |
|||
overflow: visible; |
|||
} |
|||
|
|||
h1, h2, h3, h4, h5, h6 { |
|||
margin:0; |
|||
font-family:$font-family-heading; |
|||
line-height:$line-height-base; |
|||
} |
|||
|
|||
p { |
|||
margin:0; |
|||
} |
|||
|
|||
abbr[title], |
|||
abbr[data-original-title] { |
|||
text-decoration: underline; |
|||
text-decoration: underline dotted; |
|||
cursor: help; // 3 |
|||
border-bottom: 0; // 1 |
|||
} |
|||
|
|||
address { |
|||
margin:0; |
|||
font-style: normal; |
|||
line-height: inherit; |
|||
} |
|||
|
|||
ol, |
|||
ul, |
|||
dl { |
|||
margin:0; |
|||
list-style:none; |
|||
padding:0; |
|||
} |
|||
|
|||
|
|||
ol ol, |
|||
ul ul, |
|||
ol ul, |
|||
ul ol { |
|||
margin:0; |
|||
} |
|||
|
|||
dt { |
|||
font-weight: $font-weight-base; |
|||
} |
|||
|
|||
dd { |
|||
margin:0; |
|||
} |
|||
|
|||
blockquote { |
|||
margin:0; |
|||
} |
|||
|
|||
dfn { |
|||
font-style: italic; |
|||
} |
|||
|
|||
b, |
|||
strong { |
|||
font-weight: $font-weight-bold; |
|||
} |
|||
|
|||
small { |
|||
font-size: 80%; |
|||
} |
|||
|
|||
sub, |
|||
sup { |
|||
position: relative; |
|||
font-size: 75%; |
|||
line-height: 0; |
|||
vertical-align: baseline; |
|||
} |
|||
|
|||
sub { bottom: -.25em; } |
|||
sup { top: -.5em; } |
|||
|
|||
// 링크 |
|||
a { |
|||
color: $link-color; |
|||
text-decoration: none; |
|||
background-color: transparent; |
|||
-webkit-text-decoration-skip: objects; |
|||
|
|||
&:hover { |
|||
color: $link-hover-color; |
|||
text-decoration:none; |
|||
} |
|||
|
|||
&:not([href]):not([tabindedx]) { |
|||
color: inherit; |
|||
text-decoration: none; |
|||
|
|||
&:hover, |
|||
&:focus { |
|||
color: inherit; |
|||
text-decoration: none; |
|||
} |
|||
|
|||
&:focus { |
|||
outline: 0; |
|||
} |
|||
} |
|||
} |
|||
|
|||
// 코드 관련 |
|||
pre, |
|||
code, |
|||
kbd, |
|||
samp { |
|||
font-family: $font-family-base; |
|||
font-size: 1em; |
|||
} |
|||
|
|||
pre { |
|||
margin:0; |
|||
overflow: auto; |
|||
-ms-overflow-style: scrollbar; |
|||
} |
|||
|
|||
// 이미지 관련 |
|||
figure { |
|||
margin: 0; |
|||
} |
|||
|
|||
img { |
|||
vertical-align: middle; |
|||
border-style: none; |
|||
} |
|||
|
|||
svg:not(:root) { |
|||
overflow: hidden; |
|||
} |
|||
|
|||
// 테이블 관련 |
|||
table { |
|||
border-collapse: collapse; |
|||
} |
|||
|
|||
caption { |
|||
padding-top: $table-cell-padding; |
|||
padding-bottom: $table-cell-padding; |
|||
color: $body-color; |
|||
text-align: left; |
|||
caption-side: bottom; |
|||
} |
|||
|
|||
th { |
|||
text-align: inherit; |
|||
} |
|||
|
|||
// 폼관련 |
|||
label { |
|||
display: inline-block; |
|||
margin:0; |
|||
} |
|||
|
|||
button { |
|||
border-radius: 0; |
|||
|
|||
&:focus { |
|||
outline: 1px dotted; |
|||
outline: 5px auto -webkit-focus-ring-color; |
|||
} |
|||
} |
|||
|
|||
input, |
|||
button, |
|||
select, |
|||
optgroup, |
|||
textarea { |
|||
margin: 0; |
|||
font-family: inherit; |
|||
font-size: inherit; |
|||
line-height: inherit; |
|||
} |
|||
|
|||
button, |
|||
input { |
|||
overflow: visible; |
|||
} |
|||
|
|||
button, |
|||
select { |
|||
text-transform: none; |
|||
} |
|||
|
|||
button, |
|||
html [type="button"], |
|||
[type="reset"], |
|||
[type="submit"] { |
|||
-webkit-appearance: button; |
|||
} |
|||
|
|||
button::-moz-focus-inner, |
|||
[type="button"]::-moz-focus-inner, |
|||
[type="reset"]::-moz-focus-inner, |
|||
[type="submit"]::-moz-focus-inner { |
|||
padding: 0; |
|||
border-style: none; |
|||
} |
|||
|
|||
input[type="radio"], |
|||
input[type="checkbox"] { |
|||
box-sizing: border-box; |
|||
padding: 0; |
|||
} |
|||
|
|||
input[type="date"], |
|||
input[type="time"], |
|||
input[type="datetime-local"], |
|||
input[type="month"] { |
|||
-webkit-appearance: listbox; |
|||
} |
|||
|
|||
textarea { |
|||
overflow: auto; |
|||
resize: vertical; |
|||
} |
|||
|
|||
fieldset { |
|||
min-width: 0; |
|||
padding: 0; |
|||
margin: 0; |
|||
border: 0; |
|||
} |
|||
|
|||
legend { |
|||
display: block; |
|||
width: 100%; |
|||
max-width: 100%; |
|||
padding: 0; |
|||
margin:0; |
|||
font-size: 1.5rem; |
|||
line-height: inherit; |
|||
color: inherit; |
|||
white-space: normal; |
|||
} |
|||
|
|||
progress { |
|||
vertical-align: baseline; |
|||
} |
|||
|
|||
[type="number"]::-webkit-inner-spin-button, |
|||
[type="number"]::-webkit-outer-spin-button { |
|||
height: auto; |
|||
} |
|||
|
|||
[type="search"] { |
|||
outline-offset: -2px; |
|||
-webkit-appearance: none; |
|||
} |
|||
|
|||
[type="search"]::-webkit-search-cancel-button, |
|||
[type="search"]::-webkit-search-decoration { |
|||
-webkit-appearance: none; |
|||
} |
|||
|
|||
|
|||
::-webkit-file-upload-button { |
|||
font: inherit; |
|||
-webkit-appearance: button; |
|||
} |
|||
|
|||
|
|||
output { |
|||
display: inline-block; |
|||
} |
|||
|
|||
summary { |
|||
display: list-item; |
|||
cursor: pointer; |
|||
} |
|||
|
|||
template { |
|||
display: none; |
|||
} |
|||
|
|||
[hidden] { |
|||
display: none !important; |
|||
} |
@ -0,0 +1,3 @@ |
|||
/*************************************************************************************** |
|||
* 애니메이션 |
|||
****************************************************************************************/ |
@ -0,0 +1,3 @@ |
|||
/*************************************************************************************** |
|||
* 레이아웃 |
|||
****************************************************************************************/ |
@ -0,0 +1,108 @@ |
|||
/*************************************************************************************** |
|||
* 유틸리티 |
|||
****************************************************************************************/ |
|||
.sr-only { |
|||
position: absolute; |
|||
width: 1px; |
|||
height: 1px; |
|||
padding: 0; |
|||
overflow: hidden; |
|||
clip: rect(0, 0, 0, 0); |
|||
white-space: nowrap; |
|||
border: 0; |
|||
|
|||
&.sr-only-focusable { |
|||
&:active, |
|||
&:focus { |
|||
position: static; |
|||
width: auto; |
|||
height: auto; |
|||
overflow: visible; |
|||
clip: auto; |
|||
white-space: normal; |
|||
} |
|||
} |
|||
} |
|||
|
|||
.clearfix { |
|||
&, |
|||
&:before, |
|||
&:after { |
|||
@include clear-fix(); |
|||
} |
|||
} |
|||
|
|||
@for $i from 1 to 100{ |
|||
.W#{$i * 5} { |
|||
width: 5px * $i !important; |
|||
} |
|||
.H#{$i * 5} { |
|||
height:5px * $i !important; |
|||
} |
|||
} |
|||
@for $i from 0 to 21 { |
|||
.M#{$i * 5} { |
|||
margin:5px * $i !important; |
|||
} |
|||
.MT#{$i * 5} { |
|||
margin-top:5px * $i !important; |
|||
} |
|||
.MR#{$i*5} { |
|||
margin-right:5px * $i !important; |
|||
} |
|||
.MB#{$i * 5} { |
|||
margin-bottom:5px * $i !important; |
|||
} |
|||
.ML#{$i * 5} { |
|||
margin-left:5px * $i !important; |
|||
} |
|||
.PT#{$i * 5} { |
|||
padding-top:5px * $i !important; |
|||
} |
|||
.PR#{$i * 5} { |
|||
padding-right:5px * $i !important; |
|||
} |
|||
.PB#{$i * 5} { |
|||
padding-bottom:5px * $i !important; |
|||
} |
|||
.PL#{$i * 5} { |
|||
padding-left:5px * $i !important; |
|||
} |
|||
.P#{$i * 5} { |
|||
padding:5px * $i !important; |
|||
} |
|||
} |
|||
|
|||
@for $i from 1 to 21{ |
|||
.W#{$i * 5}P { |
|||
width: 5% * $i !important; |
|||
} |
|||
} |
|||
|
|||
.text-left { |
|||
text-align: left !important; |
|||
} |
|||
|
|||
.text-right { |
|||
text-align:right !important;; |
|||
} |
|||
|
|||
.text-center { |
|||
text-align:center !important; |
|||
} |
|||
|
|||
.display-flex { |
|||
@include display-flex; |
|||
|
|||
&.align-center { |
|||
align-items: center; |
|||
} |
|||
|
|||
&.justify-center { |
|||
justify-content: center; |
|||
} |
|||
|
|||
&.dir-column { |
|||
flex-direction: column; |
|||
} |
|||
} |
@ -0,0 +1,3 @@ |
|||
/*************************************************************************************** |
|||
* 버튼 |
|||
****************************************************************************************/ |
@ -0,0 +1,3 @@ |
|||
/*************************************************************************************** |
|||
* 아이콘 |
|||
****************************************************************************************/ |
@ -0,0 +1,3 @@ |
|||
/********************************************************************************************************************** |
|||
* 메인페이지 |
|||
***********************************************************************************************************************/ |
@ -0,0 +1,20 @@ |
|||
// Animated Icons |
|||
// -------------------------- |
|||
|
|||
.#{$fa-css-prefix}-spin { |
|||
animation: fa-spin 2s infinite linear; |
|||
} |
|||
|
|||
.#{$fa-css-prefix}-pulse { |
|||
animation: fa-spin 1s infinite steps(8); |
|||
} |
|||
|
|||
@keyframes fa-spin { |
|||
0% { |
|||
transform: rotate(0deg); |
|||
} |
|||
|
|||
100% { |
|||
transform: rotate(360deg); |
|||
} |
|||
} |
@ -0,0 +1,20 @@ |
|||
// Bordered & Pulled |
|||
// ------------------------- |
|||
|
|||
.#{$fa-css-prefix}-border { |
|||
border: solid .08em $fa-border-color; |
|||
border-radius: .1em; |
|||
padding: .2em .25em .15em; |
|||
} |
|||
|
|||
.#{$fa-css-prefix}-pull-left { float: left; } |
|||
.#{$fa-css-prefix}-pull-right { float: right; } |
|||
|
|||
.#{$fa-css-prefix}, |
|||
.fas, |
|||
.far, |
|||
.fal, |
|||
.fab { |
|||
&.#{$fa-css-prefix}-pull-left { margin-right: .3em; } |
|||
&.#{$fa-css-prefix}-pull-right { margin-left: .3em; } |
|||
} |
@ -0,0 +1,21 @@ |
|||
// Base Class Definition |
|||
// ------------------------- |
|||
|
|||
.#{$fa-css-prefix}, |
|||
.fas, |
|||
.far, |
|||
.fal, |
|||
.fad, |
|||
.fab { |
|||
-moz-osx-font-smoothing: grayscale; |
|||
-webkit-font-smoothing: antialiased; |
|||
display: inline-block; |
|||
font-style: normal; |
|||
font-variant: normal; |
|||
text-rendering: auto; |
|||
line-height: 1; |
|||
} |
|||
|
|||
%fa-icon { |
|||
@include fa-icon; |
|||
} |
@ -0,0 +1,6 @@ |
|||
// Fixed Width Icons |
|||
// ------------------------- |
|||
.#{$fa-css-prefix}-fw { |
|||
text-align: center; |
|||
width: $fa-fw-width; |
|||
} |
2296
src/scss/plugins/FontAwesome-5.13.0/_icons.scss
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,23 @@ |
|||
// Icon Sizes |
|||
// ------------------------- |
|||
|
|||
// makes the font 33% larger relative to the icon container |
|||
.#{$fa-css-prefix}-lg { |
|||
font-size: (4em / 3); |
|||
line-height: (3em / 4); |
|||
vertical-align: -.0667em; |
|||
} |
|||
|
|||
.#{$fa-css-prefix}-xs { |
|||
font-size: .75em; |
|||
} |
|||
|
|||
.#{$fa-css-prefix}-sm { |
|||
font-size: .875em; |
|||
} |
|||
|
|||
@for $i from 1 through 10 { |
|||
.#{$fa-css-prefix}-#{$i}x { |
|||
font-size: $i * 1em; |
|||
} |
|||
} |
@ -0,0 +1,18 @@ |
|||
// List Icons |
|||
// ------------------------- |
|||
|
|||
.#{$fa-css-prefix}-ul { |
|||
list-style-type: none; |
|||
margin-left: $fa-li-width * 5/4; |
|||
padding-left: 0; |
|||
|
|||
> li { position: relative; } |
|||
} |
|||
|
|||
.#{$fa-css-prefix}-li { |
|||
left: -$fa-li-width; |
|||
position: absolute; |
|||
text-align: center; |
|||
width: $fa-li-width; |
|||
line-height: inherit; |
|||
} |
@ -0,0 +1,56 @@ |
|||
// Mixins |
|||
// -------------------------- |
|||
|
|||
@mixin fa-icon { |
|||
-webkit-font-smoothing: antialiased; |
|||
-moz-osx-font-smoothing: grayscale; |
|||
display: inline-block; |
|||
font-style: normal; |
|||
font-variant: normal; |
|||
font-weight: normal; |
|||
line-height: 1; |
|||
} |
|||
|
|||
@mixin fa-icon-rotate($degrees, $rotation) { |
|||
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; |
|||
transform: rotate($degrees); |
|||
} |
|||
|
|||
@mixin fa-icon-flip($horiz, $vert, $rotation) { |
|||
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; |
|||
transform: scale($horiz, $vert); |
|||
} |
|||
|
|||
|
|||
// Only display content to screen readers. A la Bootstrap 4. |
|||
// |
|||
// See: http://a11yproject.com/posts/how-to-hide-content/ |
|||
|
|||
@mixin sr-only { |
|||
border: 0; |
|||
clip: rect(0, 0, 0, 0); |
|||
height: 1px; |
|||
margin: -1px; |
|||
overflow: hidden; |
|||
padding: 0; |
|||
position: absolute; |
|||
width: 1px; |
|||
} |
|||
|
|||
// Use in conjunction with .sr-only to only display content when it's focused. |
|||
// |
|||
// Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 |
|||
// |
|||
// Credit: HTML5 Boilerplate |
|||
|
|||
@mixin sr-only-focusable { |
|||
&:active, |
|||
&:focus { |
|||
clip: auto; |
|||
height: auto; |
|||
margin: 0; |
|||
overflow: visible; |
|||
position: static; |
|||
width: auto; |
|||
} |
|||
} |
@ -0,0 +1,24 @@ |
|||
// Rotated & Flipped Icons |
|||
// ------------------------- |
|||
|
|||
.#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } |
|||
.#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } |
|||
.#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } |
|||
|
|||
.#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } |
|||
.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } |
|||
.#{$fa-css-prefix}-flip-both, .#{$fa-css-prefix}-flip-horizontal.#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(-1, -1, 2); } |
|||
|
|||
// Hook for IE8-9 |
|||
// ------------------------- |
|||
|
|||
:root { |
|||
.#{$fa-css-prefix}-rotate-90, |
|||
.#{$fa-css-prefix}-rotate-180, |
|||
.#{$fa-css-prefix}-rotate-270, |
|||
.#{$fa-css-prefix}-flip-horizontal, |
|||
.#{$fa-css-prefix}-flip-vertical, |
|||
.#{$fa-css-prefix}-flip-both { |
|||
filter: none; |
|||
} |
|||
} |
@ -0,0 +1,5 @@ |
|||
// Screen Readers |
|||
// ------------------------- |
|||
|
|||
.sr-only { @include sr-only; } |
|||
.sr-only-focusable { @include sr-only-focusable; } |
2066
src/scss/plugins/FontAwesome-5.13.0/_shims.scss
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,31 @@ |
|||
// Stacked Icons |
|||
// ------------------------- |
|||
|
|||
.#{$fa-css-prefix}-stack { |
|||
display: inline-block; |
|||
height: 2em; |
|||
line-height: 2em; |
|||
position: relative; |
|||
vertical-align: middle; |
|||
width: ($fa-fw-width*2); |
|||
} |
|||
|
|||
.#{$fa-css-prefix}-stack-1x, |
|||
.#{$fa-css-prefix}-stack-2x { |
|||
left: 0; |
|||
position: absolute; |
|||
text-align: center; |
|||
width: 100%; |
|||
} |
|||
|
|||
.#{$fa-css-prefix}-stack-1x { |
|||
line-height: inherit; |
|||
} |
|||
|
|||
.#{$fa-css-prefix}-stack-2x { |
|||
font-size: 2em; |
|||
} |
|||
|
|||
.#{$fa-css-prefix}-inverse { |
|||
color: $fa-inverse; |
|||
} |
2313
src/scss/plugins/FontAwesome-5.13.0/_variables.scss
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,23 @@ |
|||
/*! |
|||
* Font Awesome Pro 5.13.0 by @fontawesome - https://fontawesome.com |
|||
* License - https://fontawesome.com/license (Commercial License) |
|||
*/ |
|||
@import 'variables'; |
|||
|
|||
@font-face { |
|||
font-family: 'Font Awesome 5 Brands'; |
|||
font-style: normal; |
|||
font-weight: 400; |
|||
font-display: $fa-font-display; |
|||
src: url('#{$fa-font-path}/fa-brands-400.eot'); |
|||
src: url('#{$fa-font-path}/fa-brands-400.eot?#iefix') format('embedded-opentype'), |
|||
url('#{$fa-font-path}/fa-brands-400.woff2') format('woff2'), |
|||
url('#{$fa-font-path}/fa-brands-400.woff') format('woff'), |
|||
url('#{$fa-font-path}/fa-brands-400.ttf') format('truetype'), |
|||
url('#{$fa-font-path}/fa-brands-400.svg#fontawesome') format('svg'); |
|||
} |
|||
|
|||
.fab { |
|||
font-family: 'Font Awesome 5 Brands'; |
|||
font-weight: 400; |
|||
} |
1916
src/scss/plugins/FontAwesome-5.13.0/duotone.scss
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -0,0 +1,16 @@ |
|||
/*! |
|||
* Font Awesome Pro 5.13.0 by @fontawesome - https://fontawesome.com |
|||
* License - https://fontawesome.com/license (Commercial License) |
|||
*/ |
|||
@import 'variables'; |
|||
@import 'mixins'; |
|||
@import 'core'; |
|||
@import 'larger'; |
|||
@import 'fixed-width'; |
|||
@import 'list'; |
|||
@import 'bordered-pulled'; |
|||
@import 'animated'; |
|||
@import 'rotated-flipped'; |
|||
@import 'stacked'; |
|||
@import 'icons'; |
|||
@import 'screen-reader'; |
@ -0,0 +1,23 @@ |
|||
/*! |
|||
* Font Awesome Pro 5.13.0 by @fontawesome - https://fontawesome.com |
|||
* License - https://fontawesome.com/license (Commercial License) |
|||
*/ |
|||
@import 'variables'; |
|||
|
|||
@font-face { |
|||
font-family: 'Font Awesome 5 Pro'; |
|||
font-style: normal; |
|||
font-weight: 300; |
|||
font-display: $fa-font-display; |
|||
src: url('#{$fa-font-path}/fa-light-300.eot'); |
|||
src: url('#{$fa-font-path}/fa-light-300.eot?#iefix') format('embedded-opentype'), |
|||
url('#{$fa-font-path}/fa-light-300.woff2') format('woff2'), |
|||
url('#{$fa-font-path}/fa-light-300.woff') format('woff'), |
|||
url('#{$fa-font-path}/fa-light-300.ttf') format('truetype'), |
|||
url('#{$fa-font-path}/fa-light-300.svg#fontawesome') format('svg'); |
|||
} |
|||
|
|||
.fal { |
|||
font-family: 'Font Awesome 5 Pro'; |
|||
font-weight: 300; |
|||
} |
@ -0,0 +1,23 @@ |
|||
/*! |
|||
* Font Awesome Pro 5.13.0 by @fontawesome - https://fontawesome.com |
|||
* License - https://fontawesome.com/license (Commercial License) |
|||
*/ |
|||
@import 'variables'; |
|||
|
|||
@font-face { |
|||
font-family: 'Font Awesome 5 Pro'; |
|||
font-style: normal; |
|||
font-weight: 400; |
|||
font-display: $fa-font-display; |
|||
src: url('#{$fa-font-path}/fa-regular-400.eot'); |
|||
src: url('#{$fa-font-path}/fa-regular-400.eot?#iefix') format('embedded-opentype'), |
|||
url('#{$fa-font-path}/fa-regular-400.woff2') format('woff2'), |
|||
url('#{$fa-font-path}/fa-regular-400.woff') format('woff'), |
|||
url('#{$fa-font-path}/fa-regular-400.ttf') format('truetype'), |
|||
url('#{$fa-font-path}/fa-regular-400.svg#fontawesome') format('svg'); |
|||
} |
|||
|
|||
.far { |
|||
font-family: 'Font Awesome 5 Pro'; |
|||
font-weight: 400; |
|||
} |
@ -0,0 +1,24 @@ |
|||
/*! |
|||
* Font Awesome Pro 5.13.0 by @fontawesome - https://fontawesome.com |
|||
* License - https://fontawesome.com/license (Commercial License) |
|||
*/ |
|||
@import 'variables'; |
|||
|
|||
@font-face { |
|||
font-family: 'Font Awesome 5 Pro'; |
|||
font-style: normal; |
|||
font-weight: 900; |
|||
font-display: $fa-font-display; |
|||
src: url('#{$fa-font-path}/fa-solid-900.eot'); |
|||
src: url('#{$fa-font-path}/fa-solid-900.eot?#iefix') format('embedded-opentype'), |
|||
url('#{$fa-font-path}/fa-solid-900.woff2') format('woff2'), |
|||
url('#{$fa-font-path}/fa-solid-900.woff') format('woff'), |
|||
url('#{$fa-font-path}/fa-solid-900.ttf') format('truetype'), |
|||
url('#{$fa-font-path}/fa-solid-900.svg#fontawesome') format('svg'); |
|||
} |
|||
|
|||
.fa, |
|||
.fas { |
|||
font-family: 'Font Awesome 5 Pro'; |
|||
font-weight: 900; |
|||
} |
@ -0,0 +1,6 @@ |
|||
/*! |
|||
* Font Awesome Pro 5.13.0 by @fontawesome - https://fontawesome.com |
|||
* License - https://fontawesome.com/license (Commercial License) |
|||
*/ |
|||
@import 'FontAwesome-5.13.0/variables'; |
|||
@import 'FontAwesome-5.13.0/shims'; |
@ -0,0 +1,3 @@ |
|||
/*************************************************************************************** |
|||
* 플러그인 커스텀 |
|||
****************************************************************************************/ |
@ -0,0 +1,28 @@ |
|||
// 기본 |
|||
@import "boot/fonts"; |
|||
@import "boot/mixins"; |
|||
@import "boot/function"; |
|||
@import "variables"; |
|||
@import "boot/reset"; |
|||
|
|||
// FontAwesome |
|||
@import "plugins/FontAwesome-5.13.0/fontawesome"; |
|||
@import "plugins/FontAwesome-5.13.0/regular"; |
|||
@import "plugins/FontAwesome-5.13.0/light"; |
|||
@import "plugins/FontAwesome-5.13.0/solid"; |
|||
@import "plugins/FontAwesome-5.13.0/brands"; |
|||
|
|||
// 애니메이션,레이아웃,유틸리티,컴포넌트 |
|||
@import "common/animation"; |
|||
@import "common/layout"; |
|||
@import "common/utility"; |
|||
|
|||
// 각종 컴포넌트 |
|||
@import "components/icons"; |
|||
@import "components/button"; |
|||
|
|||
// 각종 플러그인 SCSS 및 플러그인 커스텀 |
|||
@import "plugins/custom"; |
|||
|
|||
// 레이아웃 및 각 페이지 SCSS 파일 |
|||
@import 'pages/main'; |
3873
yarn.lock
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
Write
Preview
Loading…
Cancel
Save
Reference in new issue