오윤석

Merge branch 'feature/2-character_page' into develop

...@@ -6,6 +6,6 @@ let routes = require('./routes'); ...@@ -6,6 +6,6 @@ let routes = require('./routes');
6 app.use(bodyParser.urlencoded({ extended: false })); 6 app.use(bodyParser.urlencoded({ extended: false }));
7 app.use(bodyParser.json()); 7 app.use(bodyParser.json());
8 8
9 -app.get('/api/home', routes.home); 9 +app.get('/api/character', routes.character.getCharacter);
10 10
11 let server = app.listen(80); 11 let server = app.listen(80);
...\ No newline at end of file ...\ No newline at end of file
......
This diff is collapsed. Click to expand it.
1 +module.exports = {
2 + 'STR': {
3 + 'korean': '힘'
4 + },
5 + 'DEX': {
6 + 'korean': '민첩성'
7 + },
8 + 'INT': {
9 + 'korean': '지력'
10 + },
11 + 'LUK': {
12 + 'korean': '운'
13 + }
14 +}
...\ No newline at end of file ...\ No newline at end of file
1 +module.exports = {
2 + '한손검': 1.2,
3 + '한손도끼': 1.2,
4 + '한손둔기': 1.2,
5 + '스태프': 1,
6 + '완드': 1,
7 + '샤이닝 로드': 1.2,
8 + '단검': 1.3,
9 + '케인': 1.3,
10 + '데스페라도': 1.3,
11 + '에너지소드': 1.5,
12 + '소울 슈터': 1.7,
13 + 'ESP 리미터': 1.2,
14 + '체인': 1.3,
15 + '매직 건틀렛': 1.2,
16 + '부채': 1.3,
17 + '튜너': 1.3,
18 + '두손검': 1.34,
19 + '두손도끼': 1.34,
20 + '두손둔기': 1.34,
21 + '창': 1.34,
22 + '폴암': 1.49,
23 + '태도': 1.34,
24 + '건틀렛 리볼버': 1.7,
25 + '활': 1.3,
26 + '석궁': 1.35,
27 + '듀얼 보우건': 1.3,
28 + '에인션트 보우': 1.3,
29 + '아대': 1.75,
30 + '건': 1.5,
31 + '너클': 1.7,
32 + '핸드캐논': 1.5
33 +}
...\ No newline at end of file ...\ No newline at end of file
This diff is collapsed. Click to expand it.
...@@ -9,8 +9,11 @@ ...@@ -9,8 +9,11 @@
9 "author": "", 9 "author": "",
10 "license": "ISC", 10 "license": "ISC",
11 "dependencies": { 11 "dependencies": {
12 + "axios": "^0.19.2",
12 "express": "^4.17.1", 13 "express": "^4.17.1",
13 "http": "0.0.1-security", 14 "http": "0.0.1-security",
15 + "jquery": "^3.5.1",
16 + "jsdom": "^16.2.2",
14 "nodemon": "^2.0.4" 17 "nodemon": "^2.0.4"
15 } 18 }
16 } 19 }
......
This diff is collapsed. Click to expand it.
1 -module.exports = function(req, res) {
2 - res.send('this is home');
3 -}
...\ No newline at end of file ...\ No newline at end of file
1 let routes = {}; 1 let routes = {};
2 -routes.home = require('./home'); 2 +routes.character = require('./character');
3 3
4 module.exports = routes; 4 module.exports = routes;
...\ No newline at end of file ...\ No newline at end of file
......
...@@ -30,6 +30,14 @@ ...@@ -30,6 +30,14 @@
30 "js-tokens": "^4.0.0" 30 "js-tokens": "^4.0.0"
31 } 31 }
32 }, 32 },
33 + "@lottiefiles/svelte-lottie-player": {
34 + "version": "0.1.4",
35 + "resolved": "https://registry.npmjs.org/@lottiefiles/svelte-lottie-player/-/svelte-lottie-player-0.1.4.tgz",
36 + "integrity": "sha512-NVNDdB1kQLIOytWsTxEYRRHhl2T9oZFfKSkUEr8m73JM7jaLP8J8GGH9B6A0vXU4wKsjR69ET6JEvib6z1QH+g==",
37 + "requires": {
38 + "lottie-web": "^5.6.8"
39 + }
40 + },
33 "@nodelib/fs.scandir": { 41 "@nodelib/fs.scandir": {
34 "version": "2.1.3", 42 "version": "2.1.3",
35 "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz", 43 "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.3.tgz",
...@@ -85,9 +93,9 @@ ...@@ -85,9 +93,9 @@
85 } 93 }
86 }, 94 },
87 "@rollup/pluginutils": { 95 "@rollup/pluginutils": {
88 - "version": "3.0.10", 96 + "version": "3.1.0",
89 - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.0.10.tgz", 97 + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz",
90 - "integrity": "sha512-d44M7t+PjmMrASHbhgpSbVgtL6EFyX7J4mYxwQ/c5eoaE6N2VgCgEcWVzNnwycIloti+/MpwFr8qfw+nRw00sw==", 98 + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==",
91 "dev": true, 99 "dev": true,
92 "requires": { 100 "requires": {
93 "@types/estree": "0.0.39", 101 "@types/estree": "0.0.39",
...@@ -101,11 +109,6 @@ ...@@ -101,11 +109,6 @@
101 "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", 109 "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==",
102 "dev": true 110 "dev": true
103 }, 111 },
104 - "@types/events": {
105 - "version": "3.0.0",
106 - "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz",
107 - "integrity": "sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g=="
108 - },
109 "@types/fs-extra": { 112 "@types/fs-extra": {
110 "version": "8.1.1", 113 "version": "8.1.1",
111 "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.1.tgz", 114 "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-8.1.1.tgz",
...@@ -115,11 +118,10 @@ ...@@ -115,11 +118,10 @@
115 } 118 }
116 }, 119 },
117 "@types/glob": { 120 "@types/glob": {
118 - "version": "7.1.1", 121 + "version": "7.1.2",
119 - "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.1.tgz", 122 + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.2.tgz",
120 - "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", 123 + "integrity": "sha512-VgNIkxK+j7Nz5P7jvUZlRvhuPSmsEfS03b0alKcq5V/STUKAa3Plemsn5mrQUO7am6OErJ4rhGEGJbACclrtRA==",
121 "requires": { 124 "requires": {
122 - "@types/events": "*",
123 "@types/minimatch": "*", 125 "@types/minimatch": "*",
124 "@types/node": "*" 126 "@types/node": "*"
125 } 127 }
...@@ -130,9 +132,9 @@ ...@@ -130,9 +132,9 @@
130 "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==" 132 "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA=="
131 }, 133 },
132 "@types/node": { 134 "@types/node": {
133 - "version": "14.0.9", 135 + "version": "14.0.13",
134 - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.9.tgz", 136 + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.0.13.tgz",
135 - "integrity": "sha512-0sCTiXKXELOBxvZLN4krQ0FPOAA7ij+6WwvD0k/PHd9/KAkr4dXel5J9fh6F4x1FwAQILqAWkmpeuS6mjf1iKA==" 137 + "integrity": "sha512-rouEWBImiRaSJsVA+ITTFM6ZxibuAlTuNOCyxVbwreu6k6+ujs7DfnU9o+PShFhET78pMBl3eH+AGSI5eOTkPA=="
136 }, 138 },
137 "@types/resolve": { 139 "@types/resolve": {
138 "version": "0.0.8", 140 "version": "0.0.8",
...@@ -144,9 +146,9 @@ ...@@ -144,9 +146,9 @@
144 } 146 }
145 }, 147 },
146 "acorn": { 148 "acorn": {
147 - "version": "7.2.0", 149 + "version": "7.3.1",
148 - "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.2.0.tgz", 150 + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.3.1.tgz",
149 - "integrity": "sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ==", 151 + "integrity": "sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA==",
150 "dev": true 152 "dev": true
151 }, 153 },
152 "ansi-styles": { 154 "ansi-styles": {
...@@ -163,6 +165,14 @@ ...@@ -163,6 +165,14 @@
163 "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 165 "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
164 "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==" 166 "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw=="
165 }, 167 },
168 + "axios": {
169 + "version": "0.19.2",
170 + "resolved": "https://registry.npmjs.org/axios/-/axios-0.19.2.tgz",
171 + "integrity": "sha512-fjgm5MvRHLhx+osE2xoekY70AhARk3a6hkN+3Io1jc00jtquGvxYlKlsFUhmUET0V5te6CcZI7lcv2Ym61mjHA==",
172 + "requires": {
173 + "follow-redirects": "1.5.10"
174 + }
175 + },
166 "balanced-match": { 176 "balanced-match": {
167 "version": "1.0.0", 177 "version": "1.0.0",
168 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 178 "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz",
...@@ -244,6 +254,14 @@ ...@@ -244,6 +254,14 @@
244 "resolved": "https://registry.npmjs.org/console-clear/-/console-clear-1.1.1.tgz", 254 "resolved": "https://registry.npmjs.org/console-clear/-/console-clear-1.1.1.tgz",
245 "integrity": "sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ==" 255 "integrity": "sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ=="
246 }, 256 },
257 + "debug": {
258 + "version": "3.1.0",
259 + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz",
260 + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==",
261 + "requires": {
262 + "ms": "2.0.0"
263 + }
264 + },
247 "dir-glob": { 265 "dir-glob": {
248 "version": "3.0.1", 266 "version": "3.0.1",
249 "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 267 "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
...@@ -293,6 +311,14 @@ ...@@ -293,6 +311,14 @@
293 "to-regex-range": "^5.0.1" 311 "to-regex-range": "^5.0.1"
294 } 312 }
295 }, 313 },
314 + "follow-redirects": {
315 + "version": "1.5.10",
316 + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.5.10.tgz",
317 + "integrity": "sha512-0V5l4Cizzvqt5D44aTXbFZz+FtyXV1vrDN6qrelxtfYQKW0KO0W2T/hkE8xvGa/540LkZlkaUjO4ailYTFtHVQ==",
318 + "requires": {
319 + "debug": "=3.1.0"
320 + }
321 + },
296 "fs-extra": { 322 "fs-extra": {
297 "version": "8.1.0", 323 "version": "8.1.0",
298 "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", 324 "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz",
...@@ -478,6 +504,11 @@ ...@@ -478,6 +504,11 @@
478 "resolved": "https://registry.npmjs.org/local-access/-/local-access-1.0.1.tgz", 504 "resolved": "https://registry.npmjs.org/local-access/-/local-access-1.0.1.tgz",
479 "integrity": "sha512-ykt2pgN0aqIy6KQC1CqdWTWkmUwNgaOS6dcpHVjyBJONA+Xi7AtSB1vuxC/U/0tjIP3wcRudwQk1YYzUvzk2bA==" 505 "integrity": "sha512-ykt2pgN0aqIy6KQC1CqdWTWkmUwNgaOS6dcpHVjyBJONA+Xi7AtSB1vuxC/U/0tjIP3wcRudwQk1YYzUvzk2bA=="
480 }, 506 },
507 + "lottie-web": {
508 + "version": "5.6.10",
509 + "resolved": "https://registry.npmjs.org/lottie-web/-/lottie-web-5.6.10.tgz",
510 + "integrity": "sha512-ucTzaiBJOMm56/K7Wqjajyh7qXlonHKB3+b5fHvhSiz+jOrXt6QDNKAinI3qdw/zvvYHKzXvFMy5SgOXbOJ5ng=="
511 + },
481 "magic-string": { 512 "magic-string": {
482 "version": "0.25.7", 513 "version": "0.25.7",
483 "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", 514 "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz",
...@@ -525,6 +556,11 @@ ...@@ -525,6 +556,11 @@
525 "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.5.tgz", 556 "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.5.tgz",
526 "integrity": "sha512-d2RKzMD4JNyHMbnbWnznPaa8vbdlq/4pNZ3IgdaGrVbBhebBsGUUE/6qorTMYNS6TwuH3ilfOlD2bf4Igh8CKg==" 557 "integrity": "sha512-d2RKzMD4JNyHMbnbWnznPaa8vbdlq/4pNZ3IgdaGrVbBhebBsGUUE/6qorTMYNS6TwuH3ilfOlD2bf4Igh8CKg=="
527 }, 558 },
559 + "ms": {
560 + "version": "2.0.0",
561 + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz",
562 + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g="
563 + },
528 "once": { 564 "once": {
529 "version": "1.4.0", 565 "version": "1.4.0",
530 "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 566 "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
...@@ -722,9 +758,9 @@ ...@@ -722,9 +758,9 @@
722 } 758 }
723 }, 759 },
724 "svelte": { 760 "svelte": {
725 - "version": "3.23.0", 761 + "version": "3.23.2",
726 - "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.23.0.tgz", 762 + "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.23.2.tgz",
727 - "integrity": "sha512-cnyd96bK/Nw5DnYuB1hzm5cl6+I1fpmdKOteA7KLzU9KGLsLmvWsSkSKbcntzODCLmSySN3HjcgTHRo6/rJNTw==", 763 + "integrity": "sha512-hE8GeTM83YVR4GY6/6PeDEcGct4JS5aCi+IYbCAa76oaPSfuF7L85DQYULQxlTK/KPWzw3L1GRGmC3oPG/PQoA==",
728 "dev": true 764 "dev": true
729 }, 765 },
730 "svelte-spa-router": { 766 "svelte-spa-router": {
......
...@@ -15,6 +15,8 @@ ...@@ -15,6 +15,8 @@
15 "svelte": "^3.0.0" 15 "svelte": "^3.0.0"
16 }, 16 },
17 "dependencies": { 17 "dependencies": {
18 + "@lottiefiles/svelte-lottie-player": "^0.1.4",
19 + "axios": "^0.19.2",
18 "rollup-plugin-copy": "^3.3.0", 20 "rollup-plugin-copy": "^3.3.0",
19 "sirv-cli": "^0.4.4", 21 "sirv-cli": "^0.4.4",
20 "svelte-spa-router": "^2.1.0" 22 "svelte-spa-router": "^2.1.0"
......
1 <!DOCTYPE html> 1 <!DOCTYPE html>
2 <html lang="en"> 2 <html lang="en">
3 3
4 -<head> 4 +<head lang="ko">
5 <meta charset='utf-8'> 5 <meta charset='utf-8'>
6 <meta name='viewport' content='width=device-width,initial-scale=1'> 6 <meta name='viewport' content='width=device-width,initial-scale=1'>
7 7
8 <title>::메이플스토리 스펙 계산기::</title> 8 <title>::메이플스토리 스펙 계산기::</title>
9 9
10 - <link rel='icon' type='image/png' href='/favicon.png'> 10 + <link rel='icon' type='shortcut icon' href='./build/static/images/favicon.ico'>
11 - <link rel='stylesheet' href='/global.css'> 11 + <link rel='stylesheet' href='./static/css/global.css'>
12 <link rel='stylesheet' href='/build/bundle.css'> 12 <link rel='stylesheet' href='/build/bundle.css'>
13 + <meta property="og:image" content="./build/static/images/ogimage.png">
14 + <meta property="og:title" content="::메이플스토리 스펙 계산기::">
15 + <meta property="og:description" content="당신의 메이플스토리 스펙 효율을 빠르게 계산해보세요!">
13 16
14 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css"> 17 <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/css/materialize.min.css">
15 <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script> 18 <script src="https://cdnjs.cloudflare.com/ajax/libs/materialize/1.0.0/js/materialize.min.js"></script>
......
...@@ -38,7 +38,7 @@ export default { ...@@ -38,7 +38,7 @@ export default {
38 38
39 copy({ 39 copy({
40 targets: [ 40 targets: [
41 - { src: 'src/images', dest: 'public' } 41 + { src: 'src/images', dest: 'public/build/static' }
42 ] 42 ]
43 }), 43 }),
44 44
......
1 +<script>
2 + import {LottiePlayer} from '@lottiefiles/svelte-lottie-player';
3 +
4 + export let count = 0;
5 +</script>
6 +
7 +<div id="loading" class:show={count > 0}>
8 + <LottiePlayer
9 + src="https://assets5.lottiefiles.com/packages/lf20_kblbXu.json" background="transparent" speed="1" width={300} height={300} controls={false} controlsLayout={null} loop autoplay>
10 + </LottiePlayer>
11 +</div>
12 +
13 +<style>
14 +#loading { position:fixed; width:100%; height:100%; z-index:9999; background-color:rgba(0,0,0,0.3); align-items:center; justify-content:center; display:none; }
15 +#loading.show { display:flex; }
16 +</style>
...\ No newline at end of file ...\ No newline at end of file
No preview for this file type
1 import Search from './routes/Search.svelte'; 1 import Search from './routes/Search.svelte';
2 +import Character from './routes/Character.svelte';
2 3
3 const routes = { 4 const routes = {
4 '/': Search, 5 '/': Search,
6 + '/character': Character,
7 + '/character/:character': Character,
5 }; 8 };
6 9
7 export default routes; 10 export default routes;
...\ No newline at end of file ...\ No newline at end of file
......
1 +<script>
2 + export let params = {};
3 +
4 + import {push} from 'svelte-spa-router';
5 + import axios from 'axios';
6 + import Loading from '../components/Loading.svelte';
7 +
8 + let callCount = 0;
9 + let isBuff = false;
10 + let isCharacterLoading = false;
11 + let stats;
12 +
13 + let character = {
14 + info:{
15 + avatar:'',
16 + nickname:'',
17 + characterCode:'',
18 + job:'',
19 + majorName:'',
20 + attackPowerName:'',
21 + server:{
22 + name:'',
23 + icon:''
24 + },
25 + level:237
26 + },
27 + analysis:{
28 + default:{
29 + stats:{
30 + major:{
31 + pure:0,
32 + percent:0,
33 + added:0,
34 + },
35 + minor:0,
36 + damage:{
37 + all:0,
38 + boss:0
39 + },
40 + finalDamage:0,
41 + criticalDamage:0,
42 + attackPower:{
43 + pure:0,
44 + percent:0,
45 + },
46 + ignoreGuard:0
47 + },
48 + efficiency:{
49 + major:{
50 + pure:1,
51 + percent:1
52 + },
53 + attackPower:{
54 + pure:1,
55 + percent:1
56 + },
57 + damage:1,
58 + criticalDamage:1,
59 + ignoreGuard:1
60 + }
61 + }
62 + },
63 + buff:{
64 + stats:{
65 + major:{
66 + pure:0,
67 + percent:0,
68 + added:0,
69 + },
70 + minor:0,
71 + damage:{
72 + all:0,
73 + boss:0
74 + },
75 + finalDamage:0,
76 + criticalDamage:0,
77 + attackPower:{
78 + pure:0,
79 + percent:0,
80 + },
81 + ignoreGuard:0
82 + },
83 + efficiency:{
84 + major:{
85 + pure:1,
86 + percent:1
87 + },
88 + attackPower:{
89 + pure:1,
90 + percent:1
91 + },
92 + damage:1,
93 + criticalDamage:1,
94 + ignoreGuard:1
95 + }
96 + }
97 + }
98 +
99 + function init() {
100 + let nickname;
101 +
102 + if(!params.character) {
103 + M.toast({html:"캐릭터명을 입력해주세요."});
104 + push("/");
105 + }
106 +
107 + nickname = decodeURI(params.character);
108 +
109 + callCount++;
110 + axios.get('/api/character', {
111 + params:{
112 + nickname:nickname
113 + }
114 + }).then(function(response) {
115 + character = response.data;
116 + isCharacterLoading = true;
117 + }).catch(function(error) {
118 + switch(error.response.status) {
119 + case 404:
120 + M.toast({html:"존재하지 않는 캐릭터입니다."});
121 + break;
122 + case 403:
123 + M.toast({html:"캐릭터 정보 공개설정이 필요합니다."});
124 + setTimeout(function() {
125 + window.open("https://maplestory.nexon.com/MyMaple/Account/Character/Visibility");
126 + }, 2000);
127 + break;
128 + case 503:
129 + M.toast({html:"메이플스토리가 점검중입니다."});
130 + break;
131 + default:
132 + M.toast({html:"서버와의 통신이 원활하지 않습니다.<br><br>잠시 후에 시도해주세요."});
133 + break;
134 + }
135 + push('/');
136 + }).finally(function() {
137 + callCount--;
138 + });
139 + }
140 +
141 + function showValue(value) {
142 + return parseFloat(value).toFixed(2);
143 + }
144 +
145 + function goBack() {
146 + push('/');
147 + }
148 +
149 + $:
150 + if(isCharacterLoading && isBuff) {
151 + stats = character.analysis.buff;
152 + } else {
153 + stats = character.analysis.default;
154 + }
155 +
156 + init();
157 +</script>
158 +
159 +<svelte:head>
160 +
161 +</svelte:head>
162 +
163 +<Loading count={callCount} />
164 +<section>
165 + {#if isCharacterLoading}
166 + <article class="info-box">
167 + <div class="row">
168 + <div class="col s12 m10 l8 offset-m1 offset-l2">
169 + <div class="row">
170 + <div class="col s12 m4 l3">
171 + <div class="card character-card">
172 + <div class="card-stacked">
173 + <div class="card-content">
174 + <div class="character-img">
175 + <img src={character.info.avatar} class="responsive-img" alt="캐릭터">
176 + </div>
177 + <h6 class="pink-text text-accent-3">
178 + <img src={character.info.server.icon} alt={character.info.server.name}>
179 + {character.info.nickname}
180 + </h6>
181 + <div class="job grey-text text-darken-2">
182 + {character.info.job}
183 + </div>
184 + <div class="level grey-text text-darken-2">
185 + Lv.{character.info.level}
186 + </div>
187 + </div>
188 + </div>
189 + </div>
190 + <div class="back-button-box">
191 + <button class="btn waves-light btn red accent-2" on:click={goBack}>
192 + <i class="material-icons">arrow_back</i>
193 + <span>뒤로가기</span>
194 + </button>
195 + </div>
196 + </div>
197 + <div class="col s12 m8 l9">
198 + <div class="card character-card">
199 + <div class="card-stacked">
200 + <div class="card-content">
201 + <div class="buff-switch">
202 + <div class="switch">
203 + <label>
204 + 노버프
205 + <input type="checkbox" bind:checked={isBuff}>
206 + <span class="lever"></span>
207 + 버프(자벞,링크,노블,영메)
208 + </label>
209 + </div>
210 + </div>
211 + <table class="table-efficiency">
212 + <thead>
213 + <tr>
214 + <th>스탯</th>
215 + <th>효율</th>
216 + </tr>
217 + </thead>
218 + <tbody>
219 + <tr>
220 + <th rowspan="2">{character.info.majorName} 1%</th>
221 + <td>{character.info.majorName} {showValue(stats.efficiency.major.percent)}</td>
222 + </tr>
223 + <tr>
224 + <td>{character.info.attackPowerName} {showValue(stats.efficiency.major.percent / stats.efficiency.attackPower.pure)}</td>
225 + </tr>
226 + <tr>
227 + <th>{character.info.attackPowerName} 1</th>
228 + <td>{character.info.majorName} {showValue(stats.efficiency.attackPower.pure)}</td>
229 + </tr>
230 + <tr>
231 + <th rowspan="5">{character.info.attackPowerName} 1%</th>
232 + <td>{character.info.majorName} {showValue(stats.efficiency.attackPower.percent)}</td>
233 + </tr>
234 + <tr>
235 + <td>{character.info.majorName} {showValue(stats.efficiency.attackPower.percent / stats.efficiency.major.percent)}%</td>
236 + </tr>
237 + <tr>
238 + <td>{character.info.attackPowerName} {showValue(stats.efficiency.attackPower.percent / stats.efficiency.attackPower.pure)}</td>
239 + </tr>
240 + <tr>
241 + <td>데미지(보공) {showValue(stats.efficiency.attackPower.percent / stats.efficiency.damage)}%</td>
242 + </tr>
243 + <tr>
244 + <td>방무 {showValue(stats.efficiency.attackPower.percent / stats.efficiency.ignoreGuard)}%</td>
245 + </tr>
246 + <tr>
247 + <th rowspan="2">데미지(보공) 1%</th>
248 + <td>{character.info.majorName} {showValue(stats.efficiency.damage)}</td>
249 + </tr>
250 + <tr>
251 + <td>방무 {showValue(stats.efficiency.damage / stats.efficiency.ignoreGuard)}%</td>
252 + </tr>
253 + <tr>
254 + <th rowspan="2">크뎀 1%</th>
255 + <td>{character.info.majorName} {showValue(stats.efficiency.criticalDamage)}</td>
256 + </tr>
257 + <tr>
258 + <td>{character.info.majorName} {showValue(stats.efficiency.criticalDamage / stats.efficiency.major.percent)}%</td>
259 + </tr>
260 + <tr>
261 + <th>방무 1%</th>
262 + <td>{character.info.majorName} {showValue(stats.efficiency.ignoreGuard)}</td>
263 + </tr>
264 + </tbody>
265 + </table>
266 + </div>
267 + </div>
268 + </div>
269 + </div>
270 + </div>
271 + </div>
272 + </div>
273 + </article>
274 + {/if}
275 +</section>
276 +
277 +<style>
278 +section { width:100%; height:100%; display:flex; flex-direction:column; padding:20px 0; }
279 +.info-box { margin:auto 0; }
280 +.info-box > .row > .col > .row > .col { margin-bottom:.5rem; }
281 +.character-card .card-content { text-align:center; }
282 +.character-card .card-content .job { font-size:0.8em }
283 +.character-card .card-content .level { font-size:0.8em }
284 +.character-card .card-content h6 img { width:14px; height:14px; }
285 +.character-card .card-content h6 { font-weight:bold; }
286 +.table-efficiency td, .table-efficiency th { text-align:left; }
287 +.back-button-box button { width:100%; display:block; height:48px; line-height:48px; }
288 +.back-button-box button i.material-icons { vertical-align:middle; }
289 +.back-button-box button span { vertical-align:middle; }
290 +.buff-switch .switch label input[type=checkbox]:checked+.lever:after { background-color:#e57373; }
291 +.buff-switch .switch label input[type=checkbox]:not(:checked)+.lever { background-color:#ffcdd2; }
292 +.buff-switch .switch label input[type=checkbox]:checked+.lever { background-color:#ef9a9a ; }
293 +</style>
...\ No newline at end of file ...\ No newline at end of file
...@@ -38,6 +38,10 @@ ...@@ -38,6 +38,10 @@
38 </p> 38 </p>
39 <p> 39 <p>
40 <a href="https://maplestory.nexon.com/MyMaple/Account/Character/Visibility" target="_BLANK">공개설정하러 가기</a> 40 <a href="https://maplestory.nexon.com/MyMaple/Account/Character/Visibility" target="_BLANK">공개설정하러 가기</a>
41 + </p>
42 + <p class="red-text text-accent-1">
43 + <i class="material-icons">info_outline</i>
44 + <span>제논, 데몬어벤져는 지원하지 않습니다.</span>
41 </p> 45 </p>
42 </div> 46 </div>
43 </div> 47 </div>
...@@ -47,9 +51,11 @@ ...@@ -47,9 +51,11 @@
47 </section> 51 </section>
48 52
49 <style> 53 <style>
50 -section { width:100%; height:100%; display:flex; flex-direction:column; justify-content:center; } 54 +section { width:100%; height:100%; display:flex; flex-direction:column; }
51 -.search-box { width:100%; } 55 +.search-box { width:100%; margin:auto 0; }
52 h4 { font-size:20px; text-align:center; } 56 h4 { font-size:20px; text-align:center; }
53 .input-field { padding-right:70px; } 57 .input-field { padding-right:70px; }
54 .input-field button { position:absolute; right:0; top:7px; } 58 .input-field button { position:absolute; right:0; top:7px; }
59 +.card-action i.material-icons { font-size:1.1em; vertical-align:middle; }
60 +.card-action i.material-icons ~ span { vertical-align:middle; }
55 </style> 61 </style>
...\ No newline at end of file ...\ No newline at end of file
......