├── .csslintrc
├── .eslintignore
├── .eslintrc.json
├── .gitignore
├── .htmlhintrc
├── .tern-project
├── .travis.yml
├── CNAME
├── Gruntfile.js
├── LICENSE
├── README.md
├── css
├── wd.css
├── wd.resume.css
└── wd.timeline.css
├── favicon.svg
├── index.html
├── js
├── bsz-page-footer.js
├── data.js
├── fork-me-github.js
├── main.js
├── resume.js
└── timeline.js
└── package.json
/.csslintrc:
--------------------------------------------------------------------------------
1 | {
2 | "order-alphabetical": false,
3 | "ids": false ,
4 | "box-model": false,
5 | "outline-none": false,
6 | "box-sizing": false
7 | }
8 |
--------------------------------------------------------------------------------
/.eslintignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | favicon.ico
3 | LICENSE
4 | CNAME
5 | *.html
6 | *.css
7 | *.md
8 | *.json
9 |
--------------------------------------------------------------------------------
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "env": {
3 | "browser": true,
4 | "jquery": true
5 | },
6 | "extends": "eslint:recommended",
7 | "rules": {
8 | "indent": [
9 | "error",
10 | 2,
11 | {
12 | "SwitchCase": 1,
13 | "VariableDeclarator": {"var": 2, "let": 2, "const": 3}
14 | }
15 | ],
16 | "linebreak-style": [
17 | "error",
18 | "unix"
19 | ],
20 | "quotes": [
21 | "error",
22 | "single"
23 | ],
24 | "semi": [
25 | "error",
26 | "always"
27 | ],
28 | "no-console": [
29 | "error",
30 | { "allow": ["error"] }
31 | ]
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 | npm-debug.log*
5 | yarn-debug.log*
6 | yarn-error.log*
7 |
8 | # Runtime data
9 | pids
10 | *.pid
11 | *.seed
12 | *.pid.lock
13 |
14 | # Directory for instrumented libs generated by jscoverage/JSCover
15 | lib-cov
16 |
17 | # Coverage directory used by tools like istanbul
18 | coverage
19 |
20 | # nyc test coverage
21 | .nyc_output
22 |
23 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
24 | .grunt
25 |
26 | # Bower dependency directory (https://bower.io/)
27 | bower_components
28 |
29 | # node-waf configuration
30 | .lock-wscript
31 |
32 | # Compiled binary addons (http://nodejs.org/api/addons.html)
33 | build/Release
34 |
35 | # Dependency directories
36 | node_modules/
37 | jspm_packages/
38 |
39 | # Typescript v1 declaration files
40 | typings/
41 |
42 | # Optional npm cache directory
43 | .npm
44 |
45 | # Optional eslint cache
46 | .eslintcache
47 |
48 | # Optional REPL history
49 | .node_repl_history
50 |
51 | # Output of 'npm pack'
52 | *.tgz
53 |
54 | # Yarn Integrity file
55 | .yarn-integrity
56 |
57 | # dotenv environment variables file
58 | .env
59 |
60 | dist/
61 |
--------------------------------------------------------------------------------
/.htmlhintrc:
--------------------------------------------------------------------------------
1 | {
2 | "tagname-lowercase": true,
3 | "attr-lowercase": true,
4 | "attr-value-double-quotes": true,
5 | "attr-value-not-empty": false,
6 | "attr-no-duplication": true,
7 | "doctype-first": true,
8 | "tag-pair": true,
9 | "tag-self-close": false,
10 | "spec-char-escape": true,
11 | "id-unique": true,
12 | "src-not-empty": true,
13 | "title-require": true,
14 | "alt-require": true,
15 | "doctype-html5": true,
16 | "id-class-value": "dash",
17 | "style-disabled": false,
18 | "inline-style-disabled": false,
19 | "inline-script-disabled": false,
20 | "space-tab-mixed-disabled": "space",
21 | "id-class-ad-disabled": false,
22 | "href-abs-or-rel": false,
23 | "attr-unsafe-chars": true,
24 | "head-script-disabled": true
25 | }
26 |
--------------------------------------------------------------------------------
/.tern-project:
--------------------------------------------------------------------------------
1 | {
2 | "libs": ["browser", "jquery"],
3 | "plugins": {
4 | "node": {}
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/.travis.yml:
--------------------------------------------------------------------------------
1 | language: node_js
2 | node_js:
3 | - "10"
4 |
5 | after_script:
6 | - npm run build
7 | - cp CNAME ./dist
8 | - cp favicon.svg ./dist
9 | - grunt upload
10 | - cd ./dist
11 | - git init
12 | - git config user.name "${USER_NAME}"
13 | - git config user.email "${USER_EMAIL}"
14 | - git add .
15 | - git commit -m "publish wet site"
16 | - git push --force --quiet "https://${ACC_TOKEN}@${GH_REF}" master:${BRANCH}
17 |
18 | branches:
19 | only:
20 | - master
21 |
--------------------------------------------------------------------------------
/CNAME:
--------------------------------------------------------------------------------
1 | i.wangding.co
2 |
--------------------------------------------------------------------------------
/Gruntfile.js:
--------------------------------------------------------------------------------
1 | /* global module: true */
2 | module.exports = function (grunt) {
3 | grunt.initConfig({
4 | eslint: {
5 | options: {
6 | configFile: '.eslintrc.json'
7 | },
8 | target: ['./js/*.js']
9 | },
10 | csslint: {
11 | options: {
12 | csslintrc: '.csslintrc'
13 | },
14 | src: 'css/*.css'
15 | },
16 | htmlhint: {
17 | options: {
18 | htmlhintrc: '.htmlhintrc'
19 | },
20 | src: '*.html'
21 | },
22 | htmlmin: {
23 | options: {
24 | collapseWhitespace: true,
25 | preserveLineBreaks: false
26 | },
27 | files: {
28 | src: 'dist/index.html',
29 | dest: 'dist/index.html'
30 | }
31 | },
32 | qiniu_qupload: {
33 | default_options: {
34 | options: {
35 | ak: 'QINIU_AK',
36 | sk: 'QINIU_SK',
37 | bucket: 'app-i',
38 | assets: [{src: 'dist', prefix: ''}]
39 | }
40 | }
41 | },
42 | copy: {
43 | html: {
44 | src: './index.html',
45 | dest: './dist/index.html'
46 | }
47 | },
48 | concat: {
49 | js: {
50 | src: ['js/*.js'],
51 | dest: 'dist/js/bundle.js'
52 | },
53 | css: {
54 | src: ['css/*.css'],
55 | dest: 'dist/css/bundle.css'
56 | }
57 | },
58 | uglify: {
59 | 'dist/js/bundle.min.js': 'dist/js/bundle.js',
60 | 'dist/js/fork-me-github.js': 'js/fork-me-github.js',
61 | 'dist/js/bsz-page-footer.js': 'js/bsz-page-footer.js'
62 | },
63 | cssmin: {
64 | 'dist/css/bundle.min.css': 'dist/css/bundle.css'
65 | },
66 | useminPrepare: {
67 | html: 'index.html',
68 | options: {
69 | dest: 'dist'
70 | }
71 | },
72 | usemin: {
73 | html: ['dist/index.html']
74 | },
75 | clean: {
76 | end: ['dist/css/bundle.css', 'dist/js/bundle.js', '.tmp']
77 | }
78 | });
79 |
80 | grunt.loadNpmTasks('grunt-contrib-csslint');
81 | grunt.loadNpmTasks('grunt-htmlhint');
82 | grunt.loadNpmTasks('grunt-contrib-concat');
83 | grunt.loadNpmTasks('grunt-contrib-uglify');
84 | grunt.loadNpmTasks('grunt-contrib-cssmin');
85 | grunt.loadNpmTasks('grunt-contrib-copy');
86 | grunt.loadNpmTasks('grunt-contrib-clean');
87 | grunt.loadNpmTasks('grunt-contrib-htmlmin');
88 | grunt.loadNpmTasks('grunt-eslint');
89 | grunt.loadNpmTasks('grunt-usemin');
90 | grunt.loadNpmTasks('@wangding/grunt-qiniu-qupload');
91 |
92 | grunt.registerTask('lint', ['htmlhint', 'csslint', 'eslint']);
93 | grunt.registerTask('build', ['copy:html', 'useminPrepare', 'concat', 'uglify', 'cssmin', 'usemin', 'htmlmin', 'clean:end']);
94 | grunt.registerTask('upload', ['qiniu_qupload']);
95 | };
96 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2017 王顶
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # i
2 |
3 | 王顶的个人简历
4 |
--------------------------------------------------------------------------------
/css/wd.css:
--------------------------------------------------------------------------------
1 | /*
2 | * wd.css
3 | * Root namespace styles
4 | */
5 |
6 | /* Begin reset */
7 | div {
8 | margin: 0;
9 | padding: 0;
10 | -webkit-box-sizing: border-box;
11 | -moz-box-sizing: border-box;
12 | box-sizing: border-box;
13 | }
14 | h1, h2, h3, h4, h5, h6, p { margin-bottom: 10px; }
15 | ol, ul, dl { list-style-position: inside; }
16 | /* End reset */
17 |
18 | /* Begin standard selectors */
19 | body {
20 | font: 13px 'Trebuchet MS', Verdana, Helvetica, Arial, sans-serif;
21 | color: #444;
22 | background-color: #333;
23 | }
24 |
25 | a { text-decoration: none; }
26 | a:link, a:visited { color: inherit; }
27 | a:hover { text-decoration: underline; }
28 |
29 | strong {
30 | font-size: 24px;
31 | color: #000;
32 | }
33 | /* End standard selectors */
34 |
--------------------------------------------------------------------------------
/css/wd.resume.css:
--------------------------------------------------------------------------------
1 | /*
2 | * wd.resume.css
3 | * resume namespace styles
4 | */
5 |
6 | /* Begin resume namespace selectors */
7 | #wd-resume {
8 | width: 1000px;
9 | margin: 10px auto;
10 | padding: 10px 0;
11 | min-width: 500px;
12 | overflow: visible;
13 | font-family: "Microsoft Yahei";
14 | font-size: 15px;
15 | line-height: 26px;
16 | background-color: #fff;
17 | border-radius: 8px 8px 8px 8px;
18 | }
19 |
20 | #wd-resume-logo {
21 | width: 250px;
22 | height: 250px;
23 | margin: 30px auto;
24 | border-radius: 125px;
25 | background-repeat: no-repeat;
26 | background-position: center;
27 | background-image: url('http://sample.wangding.co/images/wangding-250.jpeg');
28 | }
29 |
30 | #wd-resume-slogan {
31 | height: 125px;
32 | margin: 10px 0;
33 | padding: 10px;
34 | text-align: center;
35 | background-color: #eee;
36 | }
37 |
38 | #wd-resume-info-title {
39 | height: 170px;
40 | margin: 10px 0;
41 | padding: 10px;
42 | }
43 |
44 | #wd-resume-info, #wd-resume-contact {
45 | width: 50%;
46 | float: left;
47 | text-align: right;
48 | padding: 0 10px;
49 | }
50 |
51 | #wd-resume-title, #wd-resume-skills {
52 | width: 50%;
53 | float: right;
54 | padding: 0 10px;
55 | }
56 |
57 | #wd-resume-contact-skills {
58 | height: 170px;
59 | margin: 10px 0;
60 | padding: 10px;
61 | background-color: #eee;
62 | }
63 |
64 | .wd-resume-title {
65 | font-weight: bold;
66 | }
67 |
--------------------------------------------------------------------------------
/css/wd.timeline.css:
--------------------------------------------------------------------------------
1 | .timeline {
2 | position: relative;
3 | width: 660px;
4 | margin: 0 auto;
5 | margin-top: 20px;
6 | padding: 1em 0;
7 | list-style-type: none;
8 | }
9 |
10 | .timeline:before {
11 | position: absolute;
12 | left: 50%;
13 | top: 0;
14 | content: ' ';
15 | display: block;
16 | width: 6px;
17 | height: 100%;
18 | margin-left: -3px;
19 | background: rgb(80,80,80);
20 | background: -moz-linear-gradient(top, rgba(80,80,80,0) 0%, rgb(80,80,80) 8%, rgb(80,80,80) 92%, rgba(80,80,80,0) 100%);
21 | background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(30,87,153,1)), color-stop(100%,rgba(125,185,232,1)));
22 | background: -webkit-linear-gradient(top, rgba(80,80,80,0) 0%, rgb(80,80,80) 8%, rgb(80,80,80) 92%, rgba(80,80,80,0) 100%);
23 | background: -o-linear-gradient(top, rgba(80,80,80,0) 0%, rgb(80,80,80) 8%, rgb(80,80,80) 92%, rgba(80,80,80,0) 100%);
24 | background: -ms-linear-gradient(top, rgba(80,80,80,0) 0%, rgb(80,80,80) 8%, rgb(80,80,80) 92%, rgba(80,80,80,0) 100%);
25 | background: linear-gradient(to bottom, rgba(80,80,80,0) 0%, rgb(80,80,80) 8%, rgb(80,80,80) 92%, rgba(80,80,80,0) 100%);
26 | z-index: 5;
27 | }
28 |
29 | .timeline li {
30 | padding: 1em 0;
31 | }
32 |
33 | .timeline li:after {
34 | content: "";
35 | display: block;
36 | height: 0;
37 | clear: both;
38 | visibility: hidden;
39 | }
40 |
41 | .direction-l {
42 | position: relative;
43 | width: 300px;
44 | float: left;
45 | text-align: right;
46 | }
47 |
48 | .direction-r {
49 | position: relative;
50 | width: 300px;
51 | float: right;
52 | }
53 |
54 | .flag-wrapper {
55 | position: relative;
56 | display: inline-block;
57 | text-align: center;
58 | }
59 |
60 | .flag {
61 | position: relative;
62 | display: inline;
63 | background: rgb(248,248,248);
64 | padding: 6px 10px;
65 | border-radius: 5px;
66 |
67 | font-weight: 600;
68 | text-align: left;
69 | }
70 |
71 | .direction-l .flag {
72 | -webkit-box-shadow: -1px 1px 1px rgba(0,0,0,0.15), 0 0 1px rgba(0,0,0,0.15);
73 | -moz-box-shadow: -1px 1px 1px rgba(0,0,0,0.15), 0 0 1px rgba(0,0,0,0.15);
74 | box-shadow: -1px 1px 1px rgba(0,0,0,0.15), 0 0 1px rgba(0,0,0,0.15);
75 | }
76 |
77 | .direction-r .flag {
78 | -webkit-box-shadow: 1px 1px 1px rgba(0,0,0,0.15), 0 0 1px rgba(0,0,0,0.15);
79 | -moz-box-shadow: 1px 1px 1px rgba(0,0,0,0.15), 0 0 1px rgba(0,0,0,0.15);
80 | box-shadow: 1px 1px 1px rgba(0,0,0,0.15), 0 0 1px rgba(0,0,0,0.15);
81 | }
82 |
83 | .direction-l .flag:before,
84 | .direction-r .flag:before {
85 | position: absolute;
86 | top: 50%;
87 | right: -40px;
88 | content: ' ';
89 | display: block;
90 | width: 12px;
91 | height: 12px;
92 | margin-top: -10px;
93 | background: #fff;
94 | border-radius: 10px;
95 | border: 4px solid rgb(255,80,80);
96 | z-index: 10;
97 | }
98 |
99 | .direction-r .flag:before {
100 | left: -40px;
101 | }
102 |
103 | .direction-l .flag:after {
104 | content: "";
105 | position: absolute;
106 | left: 100%;
107 | top: 50%;
108 | height: 0;
109 | width: 0;
110 | margin-top: -8px;
111 | border: solid transparent;
112 | border-left-color: rgb(248,248,248);
113 | border-width: 8px;
114 | pointer-events: none;
115 | }
116 |
117 | .direction-r .flag:after {
118 | content: "";
119 | position: absolute;
120 | right: 100%;
121 | top: 50%;
122 | height: 0;
123 | width: 0;
124 | margin-top: -8px;
125 | border: solid transparent;
126 | border-right-color: rgb(248,248,248);
127 | border-width: 8px;
128 | pointer-events: none;
129 | }
130 |
131 | .direction-l {
132 | float: left;
133 | }
134 |
135 | .direction-r {
136 | float: right;
137 | }
138 |
139 | .desc {
140 | margin: 1em 0.75em 0 0;
141 |
142 | font-size: 0.77777em;
143 | font-style: italic;
144 | line-height: 1.5em;
145 | }
146 |
147 | .direction-r .desc {
148 | margin: 1em 0 0 0.75em;
149 | }
150 |
151 | /* ================ Timeline Media Queries ================ */
152 |
153 | @media screen and (max-width: 660px) {
154 |
155 | .timeline {
156 | width: 100%;
157 | padding: 4em 0 1em 0;
158 | }
159 |
160 | .timeline li {
161 | padding: 2em 0;
162 | }
163 |
164 | .direction-l,
165 | .direction-r {
166 | float: none;
167 | width: 100%;
168 |
169 | text-align: center;
170 | }
171 |
172 | .flag-wrapper {
173 | text-align: center;
174 | }
175 |
176 | .flag {
177 | background: rgb(255,255,255);
178 | z-index: 15;
179 | }
180 |
181 | .direction-l .flag:before,
182 | .direction-r .flag:before {
183 | position: absolute;
184 | top: -30px;
185 | left: 50%;
186 | content: ' ';
187 | display: block;
188 | width: 12px;
189 | height: 12px;
190 | margin-left: -9px;
191 | background: #fff;
192 | border-radius: 10px;
193 | border: 4px solid rgb(255,80,80);
194 | z-index: 10;
195 | }
196 |
197 | .direction-l .flag:after,
198 | .direction-r .flag:after {
199 | content: "";
200 | position: absolute;
201 | left: 50%;
202 | top: -8px;
203 | height: 0;
204 | width: 0;
205 | margin-left: -8px;
206 | border: solid transparent;
207 | border-bottom-color: rgb(255,255,255);
208 | border-width: 8px;
209 | pointer-events: none;
210 | }
211 |
212 | .direction-l {
213 | float: none;
214 | }
215 |
216 | .direction-r {
217 | float: none;
218 | }
219 |
220 | .desc {
221 | position: relative;
222 | margin: 1em 0 0 0;
223 | padding: 1em;
224 | background: rgb(245,245,245);
225 | -webkit-box-shadow: 0 0 1px rgba(0,0,0,0.20);
226 | -moz-box-shadow: 0 0 1px rgba(0,0,0,0.20);
227 | box-shadow: 0 0 1px rgba(0,0,0,0.20);
228 |
229 | z-index: 15;
230 | }
231 |
232 | .direction-l .desc,
233 | .direction-r .desc {
234 | position: relative;
235 | margin: 1em 1em 0 1em;
236 | padding: 1em;
237 |
238 | z-index: 15;
239 | }
240 | }
241 |
--------------------------------------------------------------------------------
/favicon.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | 王顶
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
21 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/js/bsz-page-footer.js:
--------------------------------------------------------------------------------
1 | /* exported $bszPageFooter */
2 | var $bszPageFooter = (function() {
3 | var $DOM = $(''
4 | + ''
7 | + '');
8 |
9 | function show(container) {
10 | var $ctn = $(container),
11 | pst = $ctn.css('position');
12 |
13 | if(pst === 'static') $ctn.css('position', 'relative');
14 |
15 | $ctn.append($DOM);
16 | }
17 |
18 | return {show: show};
19 | }());
20 |
--------------------------------------------------------------------------------
/js/data.js:
--------------------------------------------------------------------------------
1 | /*
2 | * data.js
3 | * resume data module for SPA
4 | */
5 |
6 | /* 数据模板
7 | {
8 | 'class' : '',
9 | 'date' : '',
10 | 'event' : '',
11 | 'href' : ''
12 | },
13 | */
14 |
15 | /* exported data */
16 | var wd = {};
17 | wd.data = {
18 | 'timeline' : [
19 | {
20 | 'class' : 'l',
21 | 'date' : '2020年6月8日',
22 | 'event' : '制作并上线了 Node.js 自动化测试',
23 | 'href' : 'https://study.163.com/course/introduction/1210126425.htm'
24 | },
25 | {
26 | 'class' : 'l',
27 | 'date' : '2020年6月1日',
28 | 'event' : '制作并上线了 SPA 富应用开发',
29 | 'href' : 'https://www.bilibili.com/video/BV1o7411L7L1'
30 | },
31 | {
32 | 'class' : 'l',
33 | 'date' : '2020年3月18日',
34 | 'event' : '制作并上线了 Node.js 代码调试',
35 | 'href' : 'https://ke.sifou.com/course/1650000021972874'
36 | },
37 | {
38 | 'class' : 'r',
39 | 'date' : '',
40 | 'event' : '2020 年',
41 | 'href' : ''
42 | },
43 | {
44 | 'class' : 'l',
45 | 'date' : '2019年9月12日',
46 | 'event' : '制作并上线了 SeIDE 自动化测试(上)',
47 | 'href' : 'https://www.bilibili.com/video/BV1fJ411w7mk'
48 | },
49 | {
50 | 'class' : 'l',
51 | 'date' : '2019年8月19日',
52 | 'event' : '制作并上线了思维导图实战课程',
53 | 'href' : 'https://www.bilibili.com/video/BV1rE411f7SY'
54 | },
55 | {
56 | 'class' : 'l',
57 | 'date' : '2019年6月10日',
58 | 'event' : '制作并上线了 gitbook-plugin-gtalk',
59 | 'href' : 'https://www.npmjs.com/package/gitbook-plugin-gtalk'
60 | },
61 | {
62 | 'class' : 'l',
63 | 'date' : '2019年5月28日',
64 | 'event' : '制作并上线了 gitbook-plugin-bsz',
65 | 'href' : 'https://www.npmjs.com/package/gitbook-plugin-bsz'
66 | },
67 | {
68 | 'class' : 'l',
69 | 'date' : '2019年4月24日',
70 | 'event' : '制作并上线了 jsnotepad',
71 | 'href' : 'https://np.wangding.co/'
72 | },
73 | {
74 | 'class' : 'r',
75 | 'date' : '2019年4月24日',
76 | 'event' : '开通 B 站账户',
77 | 'href' : 'https://space.bilibili.com/420780095'
78 | },
79 | {
80 | 'class' : 'l',
81 | 'date' : '2019年3月30日',
82 | 'event' : '制作并上线了矩形计算器',
83 | 'href' : 'https://wangding.github.io/rectangle/'
84 | },
85 | {
86 | 'class' : 'l',
87 | 'date' : '2019年2月26日',
88 | 'event' : '给经贸数统学院上信息科学基础',
89 | 'href' : ''
90 | },
91 | {
92 | 'class' : 'l',
93 | 'date' : '2019年2月26日',
94 | 'event' : '给师大软件学院上 SPA 富应用开发',
95 | 'href' : ''
96 | },
97 | {
98 | 'class' : 'l',
99 | 'date' : '2019年2月25日',
100 | 'event' : '给经贸数统学院上管理信息系统',
101 | 'href' : ''
102 | },
103 | {
104 | 'class' : 'r',
105 | 'date' : '2019年2月19日',
106 | 'event' : '柏林禅寺受三皈五戒',
107 | 'href' : ''
108 | },
109 | {
110 | 'class' : 'r',
111 | 'date' : '',
112 | 'event' : '2019 年',
113 | 'href' : ''
114 | },
115 | {
116 | 'class' : 'l',
117 | 'date' : '2018年12月17日',
118 | 'event' : '制作并上线了 SPA 课程在线通关任务',
119 | 'href' : 'https://spa.wangding.co'
120 | },
121 | {
122 | 'class' : 'l',
123 | 'date' : '2018年9月11日',
124 | 'event' : '给软件学院上 Node.js 应用开发课程',
125 | 'href' : ''
126 | },
127 | {
128 | 'class' : 'l',
129 | 'date' : '2018年9月4日',
130 | 'event' : '给经贸数统学院上软件测试课程',
131 | 'href' : ''
132 | },
133 | {
134 | 'class' : 'r',
135 | 'date' : '2018年8月20日',
136 | 'event' : '按照 Taiguanglin 禅修法开始修行',
137 | 'href' : ''
138 | },
139 | {
140 | 'class' : 'l',
141 | 'date' : '2018年6月17日',
142 | 'event' : '制作并上线了信息科学基础在线实验',
143 | 'href' : 'https://info-lab.wangding.co'
144 | },
145 | {
146 | 'class' : 'l',
147 | 'date' : '2018年6月4日',
148 | 'event' : '制作并上线了 Node.js 开发在线通关任务',
149 | 'href' : 'https://nodejs.wangding.co'
150 | },
151 | {
152 | 'class' : 'l',
153 | 'date' : '2018年5月22日',
154 | 'event' : '制作并上线了 SPA 课程案例网站',
155 | 'href' : 'https://fe.wangding.co'
156 | },
157 | {
158 | 'class' : 'l',
159 | 'date' : '2018年4月25日',
160 | 'event' : '制作并上线了信息科学基础在线实验手册',
161 | 'href' : 'https://manual.wangding.co'
162 | },
163 | {
164 | 'class' : 'l',
165 | 'date' : '2018年3月7日',
166 | 'event' : '给经贸数统学院上管理信息系统',
167 | 'href' : ''
168 | },
169 | {
170 | 'class' : 'l',
171 | 'date' : '2018年3月6日',
172 | 'event' : '给师大软件学院上 SPA 富应用开发',
173 | 'href' : ''
174 | },
175 | {
176 | 'class' : 'l',
177 | 'date' : '2018年3月6日',
178 | 'event' : '给经贸数统学院上信息科学基础',
179 | 'href' : ''
180 | },
181 | {
182 | 'class' : 'r',
183 | 'date' : '',
184 | 'event' : '2018 年',
185 | 'href' : ''
186 | },
187 | {
188 | 'class' : 'l',
189 | 'date' : '2017年12月31日',
190 | 'event' : '参与 reformat-markdown-table 项目',
191 | 'href' : 'https://reformat.wangding.co'
192 | },
193 | {
194 | 'class' : 'r',
195 | 'date' : '2017年11月29日',
196 | 'event' : '加入中科佰融',
197 | 'href' : ''
198 | },
199 | {
200 | 'class' : 'l',
201 | 'date' : '2017年11月21日',
202 | 'event' : '制作并上线了个人简介网站',
203 | 'href' : 'https://i.wangding.co'
204 | },
205 | {
206 | 'class' : 'r',
207 | 'date' : '2017年10月24日',
208 | 'event' : '开通 SegmentFault 网站账户',
209 | 'href' : 'https://sf.gg/u/wngding'
210 | },
211 | {
212 | 'class' : 'l',
213 | 'date' : '2017年10月1',
214 | 'event' : 'node.js 应用开发(中)视频课程上线',
215 | 'href' : 'https://ke.qq.com/course/252061'
216 | },
217 | {
218 | 'class' : 'l',
219 | 'date' : '2017年9月11日',
220 | 'event' : '给师大软件学院上 Node.js 应用开发',
221 | 'href' : ''
222 | },
223 | {
224 | 'class' : 'l',
225 | 'date' : '2017年9月5日',
226 | 'event' : 'node.js 应用开发(上)视频课程上线',
227 | 'href' : 'https://ke.qq.com/course/244604'
228 | },
229 | {
230 | 'class' : 'l',
231 | 'date' : '2017年9月4日',
232 | 'event' : '给经贸数统学院上软件测试基础',
233 | 'href' : ''
234 | },
235 | {
236 | 'class' : 'l',
237 | 'date' : '2017年8月11日',
238 | 'event' : '搭建 Git 服务器视频课程上线',
239 | 'href' : 'https://ke.qq.com/course/232908'
240 | },
241 | {
242 | 'class' : 'l',
243 | 'date' : '2017年8月7日',
244 | 'event' : '百度脑图入门视频课程上线',
245 | 'href' : 'https://www.bilibili.com/video/BV1R4411G7hb'
246 | },
247 | {
248 | 'class' : 'l',
249 | 'date' : '2017年7月10日',
250 | 'event' : 'Jekyll 静态站视频课程上线',
251 | 'href' : 'https://ke.qq.com/course/229345'
252 | },
253 | {
254 | 'class' : 'r',
255 | 'date' : '2017年7月1日',
256 | 'event' : '从物联网研究院离职,入职软件学院',
257 | 'href' : ''
258 | },
259 | {
260 | 'class' : 'l',
261 | 'date' : '2017年6月25日',
262 | 'event' : 'Linux Bash 入门(下)视频课程上线',
263 | 'href' : 'https://ke.qq.com/course/230595'
264 | },
265 | {
266 | 'class' : 'l',
267 | 'date' : '2017年5月28日',
268 | 'event' : 'JavaScript 异步编程视频课程上线',
269 | 'href' : 'https://ke.qq.com/course/230601'
270 | },
271 | {
272 | 'class' : 'l',
273 | 'date' : '2017年5月19日',
274 | 'event' : 'Linux Bash 入门(上)视频课程上线',
275 | 'href' : 'https://ke.qq.com/course/230588'
276 | },
277 | {
278 | 'class' : 'l',
279 | 'date' : '2017年5月4日',
280 | 'event' : 'Mocha 自动化测试(下)视频课程上线',
281 | 'href' : 'https://ke.qq.com/course/231595'
282 | },
283 | {
284 | 'class' : 'l',
285 | 'date' : '2017年4月28日',
286 | 'event' : 'Mocha 自动化测试(上)视频课程上线',
287 | 'href' : 'https://ke.qq.com/course/231593'
288 | },
289 | {
290 | 'class' : 'l',
291 | 'date' : '2017年4月17日',
292 | 'event' : 'how-to-markdown 视频课程上线',
293 | 'href' : 'https://ke.qq.com/course/227010'
294 | },
295 | {
296 | 'class' : 'l',
297 | 'date' : '2017年4月10日',
298 | 'event' : '信息科学基础习题课(下)视频课程上线',
299 | 'href' : 'http://edu.51cto.com/course/course_id-8836.html'
300 | },
301 | {
302 | 'class' : 'l',
303 | 'date' : '2017年3月19日',
304 | 'event' : 'GitBook 视频课程上线',
305 | 'href' : 'https://ke.qq.com/course/227227'
306 | },
307 | {
308 | 'class' : 'l',
309 | 'date' : '2017年3月13日',
310 | 'event' : 'stylish 网站换肤视频课程上线',
311 | 'href' : 'https://ke.qq.com/course/226828'
312 | },
313 | {
314 | 'class' : 'l',
315 | 'date' : '2017年3月7日',
316 | 'event' : '信息科学基础习题课(上)视频课程上线',
317 | 'href' : 'http://edu.51cto.com/course/course_id-8511.html'
318 | },
319 | {
320 | 'class' : 'l',
321 | 'date' : '2017年2月21日',
322 | 'event' : '给经贸数统学院上管理信息系统',
323 | 'href' : ''
324 | },
325 | {
326 | 'class' : 'l',
327 | 'date' : '2017年2月20日',
328 | 'event' : '给经贸数统学院上信息科学基础',
329 | 'href' : ''
330 | },
331 | {
332 | 'class' : 'l',
333 | 'date' : '2017年2月20日',
334 | 'event' : 'Git 团队协作视频课程上线',
335 | 'href' : 'https://ke.qq.com/course/226121'
336 | },
337 | {
338 | 'class' : 'l',
339 | 'date' : '2017年2月14日',
340 | 'event' : 'Git 进阶视频课程上线',
341 | 'href' : 'https://ke.qq.com/course/226116'
342 | },
343 | {
344 | 'class' : 'l',
345 | 'date' : '2017年2月31日',
346 | 'event' : 'MarkDown 视频课程上线',
347 | 'href' : 'https://ke.qq.com/course/225259'
348 | },
349 | {
350 | 'class' : 'l',
351 | 'date' : '2017年1月26日',
352 | 'event' : 'how-to-markdown 软件汉化',
353 | 'href' : 'https://github.com/workshopper/how-to-markdown/graphs/contributors'
354 | },
355 | {
356 | 'class' : 'l',
357 | 'date' : '2017年1月22日',
358 | 'event' : 'Git 入门视频课程上线',
359 | 'href' : 'https://ke.qq.com/course/225248'
360 | },
361 | {
362 | 'class' : 'r',
363 | 'date' : '',
364 | 'event' : '2017 年',
365 | 'href' : ''
366 | },
367 | {
368 | 'class' : 'l',
369 | 'date' : '2016年12月26日',
370 | 'event' : 'Vimperator 上网工具视频课程上线',
371 | 'href' : 'https://ke.qq.com/course/231600'
372 | },
373 | {
374 | 'class' : 'l',
375 | 'date' : '2016月12月19日',
376 | 'event' : 'Selenium IDE 案例实战视频课程上线',
377 | 'href' : 'https://ke.qq.com/course/233031'
378 | },
379 | {
380 | 'class' : 'l',
381 | 'date' : '2016年11月27日',
382 | 'event' : 'Selenium IDE(下)视频课程上线',
383 | 'href' : 'https://ke.qq.com/course/232711'
384 | },
385 | {
386 | 'class' : 'l',
387 | 'date' : '2016年11月6日',
388 | 'event' : 'Selenium IDE(中)视频课程上线',
389 | 'href' : 'https://ke.qq.com/course/232657'
390 | },
391 | {
392 | 'class' : 'l',
393 | 'date' : '2016年10月11日',
394 | 'event' : 'Selenium IDE(上)视频课程上线',
395 | 'href' : 'https://ke.qq.com/course/232231'
396 | },
397 | {
398 | 'class' : 'l',
399 | 'date' : '2016年9月12日',
400 | 'event' : '在线思维导图进阶视频课程上线',
401 | 'href' : 'https://ke.qq.com/course/232900'
402 | },
403 | {
404 | 'class' : 'l',
405 | 'date' : '2016年8月23日',
406 | 'event' : '信息科学基础(上)视频课程上线',
407 | 'href' : 'http://edu.51cto.com/course/course_id-6578.html'
408 | },
409 | {
410 | 'class' : 'l',
411 | 'date' : '2016年7月14日',
412 | 'event' : 'ProcessOn 在线思维导图视频课程上线',
413 | 'href' : 'https://ke.qq.com/course/232896'
414 | },
415 | {
416 | 'class' : 'l',
417 | 'date' : '2016年7月3日',
418 | 'event' : '界面原型设计视频课程上线',
419 | 'href' : 'https://ke.qq.com/course/234713'
420 | },
421 | {
422 | 'class' : 'l',
423 | 'date' : '2016年6月30日',
424 | 'event' : '产品设计简介视频课程上线',
425 | 'href' : 'https://ke.qq.com/course/234708'
426 | },
427 | {
428 | 'class' : 'r',
429 | 'date' : '',
430 | 'event' : '2016 年',
431 | 'href' : ''
432 | },
433 | {
434 | 'class' : 'r',
435 | 'date' : '2014年2月',
436 | 'event' : '开通 51CTO 学院讲师账户',
437 | 'href' : 'https://edu.51cto.com/lecturer/8606427.html'
438 | },
439 | {
440 | 'class' : 'r',
441 | 'date' : '',
442 | 'event' : '2014 年',
443 | 'href' : ''
444 | },
445 | {
446 | 'class' : 'l',
447 | 'date' : '2012年12月',
448 | 'event' : '参与 iSchool 项目',
449 | 'href' : ''
450 | },
451 | {
452 | 'class' : 'r',
453 | 'date' : '2012年12月',
454 | 'event' : '加入河北师范大学移动物联网研究院',
455 | 'href' : ''
456 | },
457 | {
458 | 'class' : 'l',
459 | 'date' : '2012年3月',
460 | 'event' : '软件测试管理图书出版',
461 | 'href' : 'http://product.china-pub.com/59771'
462 | },
463 | {
464 | 'class' : 'r',
465 | 'date' : '',
466 | 'event' : '2012 年',
467 | 'href' : ''
468 | },
469 | {
470 | 'class' : 'l',
471 | 'date' : '2010年1月28日',
472 | 'event' : 'C语言与程序设计大学教程图书出版',
473 | 'href' : 'http://product.china-pub.com/49727'
474 | },
475 | {
476 | 'class' : 'r',
477 | 'date' : '',
478 | 'event' : '2010 年',
479 | 'href' : ''
480 | },
481 | {
482 | 'class' : 'r',
483 | 'date' : '2008年10月9日',
484 | 'event' : '儿子王辰鑫出生',
485 | 'href' : ''
486 | },
487 | {
488 | 'class' : 'r',
489 | 'date' : '',
490 | 'event' : '2008 年',
491 | 'href' : ''
492 | },
493 | {
494 | 'class' : 'r',
495 | 'date' : '2007年9月10日',
496 | 'event' : '加入河北师大软件学院',
497 | 'href' : ''
498 | },
499 | {
500 | 'class' : 'l',
501 | 'date' : '2007年9月10日',
502 | 'event' : '数字图像处理原理与应用图书出版',
503 | 'href' : 'http://product.china-pub.com/36136'
504 | },
505 | {
506 | 'class' : 'r',
507 | 'date' : '',
508 | 'event' : '2007 年',
509 | 'href' : ''
510 | },
511 | {
512 | 'class' : 'l',
513 | 'date' : '2005年5月',
514 | 'event' : '给中国网通河北分公司培训项目管理',
515 | 'href' : ''
516 | },
517 | {
518 | 'class' : 'r',
519 | 'date' : '',
520 | 'event' : '2005 年',
521 | 'href' : ''
522 | },
523 | {
524 | 'class' : 'r',
525 | 'date' : '2003年11月',
526 | 'event' : '从佳诚公司离职',
527 | 'href' : ''
528 | },
529 | {
530 | 'class' : 'l',
531 | 'date' : '2003年4月',
532 | 'event' : '参与中国平安手机投保项目',
533 | 'href' : ''
534 | },
535 | {
536 | 'class' : 'r',
537 | 'date' : '',
538 | 'event' : '2003 年',
539 | 'href' : ''
540 | },
541 | {
542 | 'class' : 'l',
543 | 'date' : '2002年9月',
544 | 'event' : '参与河北省委移动办公项目',
545 | 'href' : ''
546 | },
547 | {
548 | 'class' : 'l',
549 | 'date' : '2002年8月',
550 | 'event' : '参与河北省委邮件服务器迁移项目',
551 | 'href' : ''
552 | },
553 | {
554 | 'class' : 'l',
555 | 'date' : '2002年7月',
556 | 'event' : '给省网通培训 Windows 2000 AD',
557 | 'href' : ''
558 | },
559 | {
560 | 'class' : 'l',
561 | 'date' : '2002年7月7日',
562 | 'event' : '给微软全国 CTEC 教师培训 .net 技术',
563 | 'href' : ''
564 | },
565 | {
566 | 'class' : 'r',
567 | 'date' : '',
568 | 'event' : '2002 年',
569 | 'href' : ''
570 | },
571 | {
572 | 'class' : 'l',
573 | 'date' : '2001年7月',
574 | 'event' : '给全通公司培训 VB6.0 和 MSF',
575 | 'href' : ''
576 | },
577 | {
578 | 'class' : 'l',
579 | 'date' : '2001年4月',
580 | 'event' : '给核工业航测遥感中心集体培训',
581 | 'href' : ''
582 | },
583 | {
584 | 'class' : 'l',
585 | 'date' : '2001年3月',
586 | 'event' : '给省测绘局培训 VB6.0 程序开发',
587 | 'href' : ''
588 | },
589 | {
590 | 'class' : 'r',
591 | 'date' : '2001年1月11日',
592 | 'event' : '获得 MCT 证书',
593 | 'href' : ''
594 | },
595 | {
596 | 'class' : 'r',
597 | 'date' : '',
598 | 'event' : '2001 年',
599 | 'href' : ''
600 | },
601 | {
602 | 'class' : 'l',
603 | 'date' : '2000年12月',
604 | 'event' : '给省建行培训 NT4.0 企业技术',
605 | 'href' : ''
606 | },
607 | {
608 | 'class' : 'r',
609 | 'date' : '2000年6月',
610 | 'event' : '进入佳诚公司',
611 | 'href' : ''
612 | },
613 | {
614 | 'class' : 'r',
615 | 'date' : '2000年5月25日',
616 | 'event' : '获得 MCSE 证书',
617 | 'href' : ''
618 | },
619 | {
620 | 'class' : 'r',
621 | 'date' : '',
622 | 'event' : '2000 年',
623 | 'href' : ''
624 | },
625 | {
626 | 'class' : 'r',
627 | 'date' : '1998年7月1日',
628 | 'event' : '入职河北经贸大学统计系',
629 | 'href' : ''
630 | },
631 | {
632 | 'class' : 'r',
633 | 'date' : '1994年9月1日',
634 | 'event' : '上海铁道大学入学',
635 | 'href' : ''
636 | },
637 | {
638 | 'class' : 'r',
639 | 'date' : '1991年9月1日',
640 | 'event' : '石家庄第十七中学入学',
641 | 'href' : ''
642 | },
643 | {
644 | 'class' : 'r',
645 | 'date' : '1988年9月1日',
646 | 'event' : '石家庄第三十八中学入学',
647 | 'href' : ''
648 | },
649 | {
650 | 'class' : 'r',
651 | 'date' : '1983年9月1日',
652 | 'event' : '国营胜利机械厂子弟小学入学',
653 | 'href' : ''
654 | },
655 | {
656 | 'class' : 'r',
657 | 'date' : '1977年4月30日',
658 | 'event' : '出生',
659 | 'href' : ''
660 | },
661 | ],
662 |
663 | 'slogan' : [
664 | '王顶',
665 | 'WANGDING',
666 | 'MCSE, MCP, MCT',
667 | '互联网技术的爱好者,开源技术的实践者'
668 | ],
669 |
670 | 'info' : [
671 | '基本信息',
672 | '男',
673 | '1977年4月30日',
674 | '石家庄',
675 | '机械设计与制造',
676 | '上海铁道大学'
677 | ],
678 |
679 | 'title' : [
680 | '担任职位',
681 | '河北经贸大学讲师',
682 | '河北师范大学软件学院讲师',
683 | '河北师范大学物联网研究院技术总监',
684 | '河北师范大学数信学院企业研究生导师',
685 | '河北省数字教育协同创新中心执行副主任'
686 | ],
687 |
688 | 'contact' : [
689 | '联系方式',
690 | '408 542 507',
691 | '135 8202 7613',
692 | '408552507@qq.com',
693 | 'https://sf.gg/u/wngding',
694 | 'https://github.com/wangding'
695 | ],
696 |
697 | 'skills' : [
698 | '技术背景',
699 | 'Linux Bash',
700 | 'JavaScript 前端开发',
701 | 'Node.js 后端应用开发',
702 | 'Git 分布式版本控制系统',
703 | 'Selenium webdriver 自动化测试'
704 | ]
705 | };
706 |
--------------------------------------------------------------------------------
/js/fork-me-github.js:
--------------------------------------------------------------------------------
1 | /* exported $forkMeGH */
2 | var $forkMeGH = (function () {
3 | //''
4 |
5 | function show(url) {
6 | var $box = document.createElement('div');
7 | $box.innerHTML = '

';
8 | $box.className = 'fork-me-github';
9 | $box.style = 'position: absolute; top: 0; right: 0; z-index: 20;';
10 | document.body.append($box);
11 | }
12 |
13 | return {show: show};
14 | })();
15 |
--------------------------------------------------------------------------------
/js/main.js:
--------------------------------------------------------------------------------
1 | /*
2 | * main.js
3 | * root module for SPA
4 | */
5 |
6 | /* global $forkMeGH $resume $bszPageFooter */
7 | $(function() {
8 | $resume.show($('#wd-resume'));
9 | $forkMeGH.show('https://github.com/wangding/i');
10 | $bszPageFooter.show('#wd-resume-timeline');
11 | });
12 |
--------------------------------------------------------------------------------
/js/resume.js:
--------------------------------------------------------------------------------
1 | /*
2 | * resume.js
3 | * resume module for SPA
4 | */
5 |
6 | /* global wd $timeline: true */
7 | /* exported $resume */
8 | var $resume = (function() {
9 | var $container,
10 | data = ['info', 'title', 'contact', 'skills'];
11 |
12 | var fillSlogan = function() {
13 | wd.data.slogan[0] = '
' + wd.data.slogan[0] + '';
14 | $container.find('#wd-resume-slogan').html(wd.data.slogan.join('
'));
15 | };
16 |
17 | var fillData = function() {
18 | data.forEach(function(id) {
19 | wd.data[id][0] = '
' + wd.data[id][0] + '';
20 | $container.find('#wd-resume-' + id).html(wd.data[id].join('
'));
21 | });
22 | };
23 |
24 | var show = function(container) {
25 | $container = container;
26 | fillSlogan();
27 | fillData();
28 | $timeline.show($container.find('#wd-resume-timeline'));
29 | };
30 |
31 | return { show: show };
32 | }());
33 |
--------------------------------------------------------------------------------
/js/timeline.js:
--------------------------------------------------------------------------------
1 | /*
2 | * timeline.js
3 | * timeline module for SPA
4 | */
5 |
6 | /* global wd: true */
7 | /* exported $timeline */
8 | var $timeline = (function() {
9 | var items = '',
10 | item = ''
11 | + '
'
12 | + ''
13 | + '
$
'
14 | + '
#
'
15 | + '
'
16 | + '';
17 |
18 | function show(container) {
19 | wd.data.timeline.forEach(function(e) {
20 | var ev_items = item;
21 | ev_items = ev_items.replace('#', e.date);
22 | if(e.class === 'l') ev_items = ev_items.replace('direction-r', 'direction-l');
23 | if(e.href === '') {
24 | ev_items = ev_items.replace('$','
' + e.event +'');
25 | } else {
26 | ev_items = ev_items.replace('$', '
' + e.event + '');
27 | }
28 | items += ev_items;
29 | });
30 |
31 | var $ul = $('
').append(items);
32 | container.append($ul);
33 | }
34 |
35 | return { show: show };
36 | }());
37 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "i",
3 | "version": "1.0.0",
4 | "description": "王顶的个人简历",
5 | "scripts": {
6 | "test": "grunt lint",
7 | "build": "grunt build"
8 | },
9 | "repository": {
10 | "type": "git",
11 | "url": "git+https://github.com/wangding/i.git"
12 | },
13 | "author": "wangding",
14 | "license": "MIT",
15 | "bugs": {
16 | "url": "https://github.com/wangding/i/issues"
17 | },
18 | "homepage": "https://github.com/wangding/i#readme",
19 | "devDependencies": {
20 | "grunt": "^1.0.1",
21 | "grunt-contrib-clean": "^1.1.0",
22 | "grunt-contrib-concat": "^1.0.1",
23 | "grunt-contrib-copy": "^1.0.0",
24 | "grunt-contrib-csslint": "^2.0.0",
25 | "grunt-contrib-cssmin": "^2.2.1",
26 | "grunt-contrib-htmlmin": "^2.4.0",
27 | "grunt-contrib-uglify": "^3.3.0",
28 | "grunt-eslint": "^21.0.0",
29 | "grunt-htmlhint": "^0.9.13",
30 | "@wangding/grunt-qiniu-qupload": "^0.2.1",
31 | "grunt-usemin": "^3.1.1"
32 | }
33 | }
34 |
--------------------------------------------------------------------------------