├── .idea ├── .name ├── vcs.xml ├── jsLibraryMappings.xml ├── modules.xml ├── resume-master.iml ├── libraries │ └── resume_master_node_modules.xml ├── misc.xml ├── watcherTasks.xml └── workspace.xml ├── .gitignore ├── src ├── img │ └── resume.png ├── handlebars │ ├── partials │ │ ├── description.hbs │ │ ├── skill.hbs │ │ ├── intern.hbs │ │ ├── experience.hbs │ │ ├── sidebar.hbs │ │ ├── education.hbs │ │ └── header.hbs │ └── index.hbs └── less │ ├── partials │ ├── description.less │ ├── intern.less │ ├── skill.less │ ├── sidebar.less │ ├── experience.less │ ├── headers.less │ └── educations.less │ ├── common │ ├── variables.less │ └── main.less │ └── index.less ├── bower.json ├── package.json ├── LICENSE ├── README.md ├── script.js ├── resume.json └── gulpfile.js /.idea/.name: -------------------------------------------------------------------------------- 1 | resume-master -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules* 2 | bower_components 3 | build 4 | .publish -------------------------------------------------------------------------------- /src/img/resume.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/hawx1993/resume-master/HEAD/src/img/resume.png -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/handlebars/partials/description.hbs: -------------------------------------------------------------------------------- 1 |

2 | 3 | {{#each self_desc}} 4 | {{#each description}} 5 |

{{this}}

6 | {{/each}} 7 | {{/each}} -------------------------------------------------------------------------------- /src/less/partials/description.less: -------------------------------------------------------------------------------- 1 | .desc_header{ 2 | background-color: #f3f3f3; 3 | height: 24px; 4 | margin-left: -30px; 5 | } 6 | .self_content{ 7 | .fontSet; 8 | text-indent: 14px; 9 | margin-top: -6px; 10 | } 11 | -------------------------------------------------------------------------------- /.idea/jsLibraryMappings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /src/less/common/variables.less: -------------------------------------------------------------------------------- 1 | 2 | @font-family: SimKai, 楷体, 楷体_GB2312, Kai, 华文楷体; 3 | *{font-weight: normal} 4 | @A4-width: 210mm; 5 | @A4-height: 297mm; 6 | *{ 7 | box-sizing: border-box; 8 | -webkit-box-sizing: border-box; 9 | -moz-box-sizing: border-box; 10 | } -------------------------------------------------------------------------------- /src/handlebars/partials/skill.hbs: -------------------------------------------------------------------------------- 1 | {{#each skill}} 2 |
3 |

{{summary}}

4 | {{#each description}} 5 | 8 | {{/each}} 9 |
10 | {{/each}} 11 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /src/less/index.less: -------------------------------------------------------------------------------- 1 | @import "common/variables"; 2 | 3 | @import "common/main"; 4 | 5 | @import "partials/headers"; 6 | 7 | @import "partials/sidebar"; 8 | 9 | @import "partials/educations"; 10 | 11 | @import "partials/experience"; 12 | 13 | @import "partials/intern"; 14 | 15 | @import "partials/skill"; 16 | 17 | @import "partials/description"; -------------------------------------------------------------------------------- /src/handlebars/partials/intern.hbs: -------------------------------------------------------------------------------- 1 | {{#each works}} 2 |
3 |

4 | {{intern_jobs}} 5 |

6 | {{#each description}} 7 | 10 | {{/each}} 11 |
12 | {{/each}} -------------------------------------------------------------------------------- /src/less/partials/intern.less: -------------------------------------------------------------------------------- 1 | .intern_column{ 2 | .fontSet; 3 | .intern_desc{ 4 | background-color: #f3f3f3; 5 | text-align: left; 6 | vertical-align: middle; 7 | line-height: 2; 8 | color: #3d85c6; 9 | width: 100%; 10 | height: 24px; 11 | font-weight: bold; 12 | padding-left: 10px; 13 | } 14 | ul{margin-left: 10px} 15 | } 16 | -------------------------------------------------------------------------------- /.idea/resume-master.iml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /src/handlebars/partials/experience.hbs: -------------------------------------------------------------------------------- 1 |

2 | 3 | {{#each experience}} 4 |
5 |

6 | {{project_name}} 7 | {{rightDescription}} 8 |

9 | {{#each description}} 10 | 13 | {{/each}} 14 |
15 | {{/each}} -------------------------------------------------------------------------------- /.idea/libraries/resume_master_node_modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /src/less/partials/skill.less: -------------------------------------------------------------------------------- 1 | .skill{ 2 | margin-left: -30px; 3 | .fontSet; 4 | font-size: 13px; 5 | .skill_border{ 6 | border-right: 3pt solid #93c47d; 7 | } 8 | .skill_desc{ 9 | background-color: #EEEEEE; 10 | height: 24px; 11 | text-align: left; 12 | vertical-align: middle; 13 | border-left: 3pt solid #93c47d; 14 | color: #666; 15 | font-size: 10pt; 16 | line-height: 2; 17 | padding-left: 10px; 18 | margin-top: 22px; 19 | } 20 | ul{margin-left: 30px;} 21 | } -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "resume-master", 3 | "description": "A resume generator read data from json", 4 | "main": "gulpfile.js", 5 | "authors": [ 6 | "trigkit4" 7 | ], 8 | "license": "MIT", 9 | "keywords": [ 10 | "resume" 11 | ], 12 | "repository": { 13 | "type": "git", 14 | "url": "https://github.com/hawx1993/resume-master.git" 15 | }, 16 | "moduleType": [], 17 | "homepage": "https://github.com/hawx1993/resume-master", 18 | "private": true, 19 | "ignore": [ 20 | "**/.*", 21 | "node_modules", 22 | "bower_components", 23 | "test", 24 | "tests" 25 | ], 26 | "dependencies": { 27 | "jquery": "~2.1.4" 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /src/less/partials/sidebar.less: -------------------------------------------------------------------------------- 1 | .timelineWrapper{ 2 | display: inline-block; 3 | border-right: 0.75pt solid #999999; 4 | width: 24%; 5 | height: 970px; 6 | float: left; 7 | p{ 8 | display: inline-block; 9 | } 10 | .eduction{ 11 | margin-top: 30px; 12 | .right_cell{ 13 | border-bottom: 1.5pt solid #cccccc 14 | } 15 | } 16 | 17 | .schoolTime{ 18 | display: inline-block; 19 | font-size: 10pt; 20 | color: #666; 21 | line-height: 1.5; 22 | font-weight: normal; 23 | padding-left: 50px; 24 | margin-top: 4px; 25 | } 26 | .project{ 27 | margin-top: 50px; 28 | } 29 | .skill{ 30 | float: left; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/less/partials/experience.less: -------------------------------------------------------------------------------- 1 | #border_line1{ 2 | display: flex; 3 | display: -ms-flexbox; 4 | width: 100%; 5 | border-bottom: 1.5pt solid #cccccc; 6 | } 7 | .experience{ 8 | display: inline-block; 9 | width: 100%; 10 | float: left; 11 | margin-top: 6px; 12 | border-bottom: 1px dashed #ccc; 13 | font-weight: bold; 14 | .project_name{ 15 | margin: 0 0.5mm 1.5mm 1.0mm; 16 | font-size: 11pt; 17 | color: #3d85c6; 18 | line-height: 1.5; 19 | .projectNameDesc{ 20 | float: right; 21 | color: teal; 22 | } 23 | } 24 | .project_desc{ 25 | font-family: Tahoma; 26 | margin: 0.5mm 0.5mm 1mm 1.0mm; 27 | font-size: 10pt; 28 | color: #666; 29 | line-height: 1.5; 30 | } 31 | } -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "resume-master", 3 | "version": "1.1.0", 4 | "description": "A resume generator read data from json", 5 | "main": "gulpfile.js", 6 | "repository": { 7 | "type": "git", 8 | "url": "git+ssh://git@github.com/hawx1993/resume-master.git" 9 | }, 10 | "keywords": [ 11 | "resume" 12 | ], 13 | "author": "trigkit4", 14 | "license": "MIT", 15 | "bugs": { 16 | "url": "https://github.com/hawx1993/resume-master/issues" 17 | }, 18 | "homepage": "https://github.com/hawx1993/resume-master#readme", 19 | "devDependencies": { 20 | "browser-sync": "^2.12.10", 21 | "gulp": "^3.9.1", 22 | "gulp-compile-handlebars": "^0.6.1", 23 | "gulp-cssmin": "^0.1.7", 24 | "gulp-gh-pages": "^0.5.4", 25 | "gulp-less": "^3.1.0", 26 | "gulp-load-plugins": "^1.2.4", 27 | "gulp-plumber": "^1.1.0", 28 | "gulp-rename": "^1.2.2", 29 | "gulp-sync": "^0.1.4", 30 | "run-sequence": "^1.2.1" 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/handlebars/partials/sidebar.hbs: -------------------------------------------------------------------------------- 1 | 2 |
3 | 4 |

教育背景

5 | 6 | {{#each personal_info}} 7 | {{start}} ~ {{end}} 8 | {{/each}} 9 | 10 |

项目经验

11 | 12 | {{#each sideBar}} 13 | 14 |

15 | {{column3}} 16 | 17 |

18 | {{#each personal_info}} 19 | {{start}} ~ {{end}} 20 | {{/each}} 21 | 22 | 23 |

24 | {{column4}} 25 | 26 |

27 | 28 | 29 |

30 | {{column5}} 31 | 32 |

33 | {{/each}} 34 |
-------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 trigkit4 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. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ## About this repo 2 | 3 | 4 | 5 | `resume-master` 是一个简历生成器,从json中读取数据,可部署到`github pages` 在线浏览,也可生成pdf格式简历。http://hawx1993.github.io/resume-master/ 6 | 7 | - 简历数据存放在`resume.json`文件中 8 | - 简历中的代码可高亮 9 | - 有任何问题欢迎提issue 10 | 11 | #### 简历效果如下图所示 12 | 13 | ![](src/img/resume.png) 14 | 15 | ## 环境安装 16 | 17 | 首先确保你的电脑已经安装了 18 | Node.js:https://nodejs.org/en/, 19 | 20 | 然后在终端输入如下命令安装gulp和bower: 21 | 22 | ```js 23 | $ npm install --global gulp 24 | $ npm install -g bower 25 | ``` 26 | 27 | ## Build 28 | 29 | 1.执行 `npm install` 安装依赖 30 | 31 | 2.执行 `bower install`安装所需库 32 | 33 | 3.填写你的个人信息于`resume.json`文件 34 | 35 | 4.执行 `gulp dev`来构建项目 36 | 37 | ## 生成PDF文件 38 | 39 | 请使用chrome或者Safari浏览器来打印。 40 | 41 | Mac chrome执行:文件 —— 打印,即可(Windows系统直接鼠标右键——打印) 42 | 43 | Safari执行:文件——导出为PDF 即可 44 | 45 | 或者点击下方的`print it`打印 46 | ## deploy to github pages 47 | 48 | 1.clone this repo 49 | 50 | 2.修改`package.json`文件的SSH git remote orgin为你的SSH 地址(你需要创建一个新的仓库) 51 | 52 | 3.创建`gh-pages`分支 53 | 54 | 4.终端执行`gulp deploy` 稍等片刻即可部署完毕 55 | 56 | 5.到你的`github pages`站点访问(url后面加上`/resume-master`即可访问) 57 | 58 | ## LICENSE 59 | 60 | (MIT License) 61 | 62 | Copyright (c) 2016 trigkit4 63 | -------------------------------------------------------------------------------- /src/handlebars/partials/education.hbs: -------------------------------------------------------------------------------- 1 |
2 | {{#each personal_info}} 3 |

4 | {{school_name}} 5 |

6 | {{Aboutme}} 7 | 19 | 32 | {{/each}} 33 |
-------------------------------------------------------------------------------- /src/handlebars/index.hbs: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | {{#if title}}{{title}}{{else}}Resume{{/if}} 6 | 7 | 8 | 9 |
10 |
11 | {{> header}} 12 | {{> sidebar}} 13 |
14 | {{> education}} 15 | {{> experience}} 16 | {{> intern}} 17 | {{> skill}} 18 | {{> description}} 19 |
20 |
21 |
22 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /script.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by trigkit4 on 16/6/6. 3 | */ 4 | 5 | var lastListPos = $(".experience ul li:eq(-1)").offset().top;//510 6 | var projectNamePos = $(".project_name")[0].offsetTop;//355 7 | 8 | var gapHeight = lastListPos - projectNamePos; 9 | 10 | var internExper = $('#column3')[0]; 11 | internExper.style.marginTop = gapHeight + 47 + 'px'; 12 | 13 | var internDesc = $('.intern_column')[0]; 14 | internDesc.style.marginTop = gapHeight + 65 + 'px'; 15 | 16 | //掌握技能定位 17 | var internLastlist = $(".intern_column ul li:eq(-1)").offset().top; 18 | var internDescTop = internDesc.offsetTop; 19 | var internListHeight = internLastlist - internDescTop; 20 | var masterSkillBar = $("#column4")[0]; 21 | masterSkillBar.style.marginTop = internListHeight + "px"; 22 | 23 | //自我描述定位 24 | var skillLastlist = $(".skill ul li:eq(-1)").offset().top; 25 | var skillDesc = $(".skill_desc")[0].offsetTop; 26 | var skillGapHeight = skillLastlist - skillDesc; 27 | 28 | var column5 = $("#column5")[0]; 29 | column5.style.marginTop = skillGapHeight + "px"; 30 | 31 | var descHead = $(".desc_header")[0]; 32 | descHead.style.marginTop = skillGapHeight +column5+ "px"; 33 | 34 | //print 35 | $('#print').click(function () { 36 | try { 37 | print(); 38 | } catch(e) { 39 | alert('Your browser does not support `print()` method.'); 40 | } 41 | }); 42 | -------------------------------------------------------------------------------- /src/less/partials/headers.less: -------------------------------------------------------------------------------- 1 | .row{ 2 | position: relative; 3 | padding-bottom: 0.6mm; 4 | border-spacing: 0; 5 | .headerFontSet; 6 | .personal_resume{ 7 | background-color: #999999; 8 | text-align: center; 9 | vertical-align: middle; 10 | width: 26%; 11 | height: 26px; 12 | color: #f3f3f3; 13 | .text_resume{ 14 | font-size: 12pt; 15 | background-color: transparent; 16 | font-weight: bold; 17 | font-style: oblique; 18 | text-decoration: none; 19 | line-height: 2.0; 20 | } 21 | } 22 | .jobs_wanted{ 23 | background-color: #fff; 24 | text-align: center; 25 | vertical-align: middle; 26 | border-bottom: 0.75pt dashed #999999; 27 | min-height: 12pt; 28 | } 29 | .row2{display: inline-block} 30 | .line2{ 31 | background-color: #f3f3f3; 32 | vertical-align: middle; 33 | padding: 0 0 0 4.0mm; 34 | border-right: 2.25pt solid #93c47d; 35 | .tel{ 36 | float: right; 37 | padding-right: 20px; 38 | } 39 | } 40 | .blog{text-align: right} 41 | .line3{ 42 | padding: 0 0 0 4.0mm; 43 | vertical-align: middle; 44 | } 45 | .line4{ 46 | padding: 0 0 0 4.0mm; 47 | vertical-align: middle; 48 | background-color: #f3f3f3; 49 | border-right: 2.25pt solid #93c47d; 50 | } 51 | } 52 | .line1{padding-bottom: 1mm} 53 | 54 | -------------------------------------------------------------------------------- /src/handlebars/partials/header.hbs: -------------------------------------------------------------------------------- 1 |
2 | 3 | 4 | 5 | 8 | {{#if jobs}} 9 | 12 | {{/if}} 13 | 14 | 15 |
6 | Person Resume 7 | 10 | 求职意向:{{#each jobs}} {{this}}{{/each}} 11 |
16 |
17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 |
{{xingming}}:{{name}}{{youxiang}}:{{ mail }} {{dianhua}}:{{phone}}
26 |
27 |
28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 |
{{boke}}:{{blog}}
36 |
37 |
38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 |
{{opensource}}:{{github}}
46 |
47 | -------------------------------------------------------------------------------- /.idea/watcherTasks.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 22 | 30 | 31 | -------------------------------------------------------------------------------- /src/less/partials/educations.less: -------------------------------------------------------------------------------- 1 | .education_column{ 2 | float: left; 3 | margin-bottom: 30px; 4 | .border_line{ 5 | display: inline-block; 6 | width: 100%; 7 | height: 36px; 8 | border-bottom: 1.5pt solid #cccccc; 9 | .schoolName{ 10 | font-size: 12pt; 11 | color: #444; 12 | line-height: 3; 13 | font-style: oblique; 14 | font-weight: bold; 15 | padding-left: 10px; 16 | } 17 | } 18 | .selfIntro{ 19 | display: inline-block; 20 | position: relative; 21 | right: -28px; 22 | top: -42px; 23 | background-color: #EEEEEE; 24 | width: 262px; 25 | height: 25px; 26 | font-size: 12pt; 27 | color: #666; 28 | padding: 2px 0 1px 10px; 29 | } 30 | .listCommon{ 31 | font-size: 10pt; 32 | color: #666; 33 | line-height: 1.25; 34 | } 35 | .edu_column1{ 36 | display: inline-block; 37 | float: left; 38 | width: 250px; 39 | .listCommon; 40 | li{ 41 | margin-bottom: 6px; 42 | } 43 | .type{ 44 | float: right; 45 | margin-right: 40px; 46 | } 47 | .level{ 48 | .type; 49 | } 50 | } 51 | .edu_column2{ 52 | display: inline-block; 53 | width: 264px; 54 | float: right; 55 | margin-top: -26px; 56 | .listCommon; 57 | li{ 58 | list-style-type: none; 59 | margin-bottom: 6px; 60 | } 61 | .now{ 62 | float: right; 63 | } 64 | .date{ 65 | .now; 66 | } 67 | } 68 | } -------------------------------------------------------------------------------- /src/less/common/main.less: -------------------------------------------------------------------------------- 1 | body{ 2 | font-family: "Open Sans","Helvetica Neue",Helvetica,Arial,sans-serif; 3 | margin: 0; 4 | padding: 0.5in 5 | //-webkit-font-smoothing: antialiased; 6 | 7 | } 8 | @media print{ 9 | padding: 0; 10 | box-shadow: none; 11 | } 12 | .columnSet{ 13 | display: inline-block; 14 | width: 184px; 15 | background-color: #d9d2e9; 16 | text-align: right; 17 | border-right: 8pt solid #999999; 18 | height: 24px; 19 | } 20 | .text{ 21 | display: inline-block; 22 | font-size: 12pt; 23 | color: #666666; 24 | margin: 0.5mm 4.0mm 0.5mm 0.0mm; 25 | background-color: transparent; 26 | font-weight: bold; 27 | font-style: normal; 28 | text-decoration: none; 29 | line-height: 1.15; 30 | } 31 | .fontSet{ 32 | font-size: 10pt; 33 | color: #666; 34 | line-height: 1.5; 35 | font-weight: normal; 36 | } 37 | .headerFontSet{ 38 | font-size: 11pt; 39 | color: #444; 40 | font-weight: normal; 41 | line-height: 1.5; 42 | } 43 | .resume{ 44 | width: @A4-width; 45 | height: @A4-height; 46 | border: 1px solid #ccc; 47 | box-shadow: 0 1px 10px rgba(0,0,0,0.5); 48 | margin: 0 auto; 49 | overflow: hidden; 50 | line-height: 1.5; 51 | flex-flow: row wrap; 52 | .inner_resume{ 53 | margin: 7.1mm 11.3mm 0.5mm 0.1mm; 54 | } 55 | } 56 | table{ 57 | border-collapse: separate; 58 | border-spacing: 0; 59 | width: 100%; 60 | } 61 | a{text-decoration: none} 62 | footer{ 63 | margin: 30px 6px; 64 | text-align: center; 65 | .resumeLinks{ 66 | color: teal; 67 | &:hover{ 68 | text-decoration: underline; 69 | } 70 | } 71 | #print{ 72 | color: teal; 73 | } 74 | @media print{ 75 | display: none; 76 | } 77 | } 78 | ul{ 79 | margin: 0; 80 | padding: 0; 81 | } 82 | li{ 83 | list-style-type: square; 84 | } 85 | code{ 86 | font-size: 1em; 87 | color: teal; 88 | background-color: rgb(248,248,248); 89 | } 90 | @media print{ 91 | @page { 92 | size: portrait; 93 | } 94 | } 95 | .resume_content{ 96 | margin-left: 210px; 97 | 98 | } 99 | #column4{ 100 | margin-left: 0px; 101 | } -------------------------------------------------------------------------------- /resume.json: -------------------------------------------------------------------------------- 1 | { 2 | "title": "黄文雄 - 个人简历", 3 | "jobs": ["前端开发工程师"], 4 | "xingming": "姓名", 5 | "name": "黄文雄", 6 | "youxiang": "邮箱", 7 | "dianhua": "电话", 8 | "mail": "trigkit@163.com", 9 | "phone": "(+86) 1586919xxxx", 10 | "boke": "博客", 11 | "opensource": "github", 12 | "blog": "http://segmentfault.com/u/trigkit4/blogs", 13 | "github": "https://github.com/hawx1993", 14 | "personal_info": [{ 15 | "Aboutme": "个人简介", 16 | "school_name": "学校名字", 17 | "major": "电子信息工程系", 18 | "type": "本科", 19 | "English_level": "CET-4", 20 | "start": "2012.09", 21 | "end": "2016.07", 22 | "enlevel": "英语水平", 23 | "desc": "能较为流畅阅读英文文档和书籍", 24 | "jiguan": "籍贯", 25 | "native": "福建泉州", 26 | "xianju": "现居", 27 | "now_place": "福建厦门", 28 | "xingbie": "性别", 29 | "sex": "男", 30 | "riqi": "出生日期", 31 | "date_of_birth": "1993-05-23", 32 | "aihao": "兴趣爱好", 33 | "interests": "篮球羽毛球乒乓球" 34 | }], 35 | "experience": [{ 36 | "project_name": "judgejs", 37 | "rightDescription": "核心开发者", 38 | "description": [ 39 | "轻量级前端判断类库,没有任何依赖,支持`AMD` & `CommonJS`", 40 | "主要封装一些常用信息判断,使用`Qunit`单元测试" 41 | ] 42 | },{ 43 | "project_name": "校园团购网--益乐团购", 44 | "rightDescription": "2014.02~2014.06", 45 | "description": [ 46 | "使用最土团购系统,开发短信注册等功能;开发一些通用的前端组件,并作网站性能优化", 47 | "主要使用原生`js`开发;页面开发与兼容处理;数据库使用`MySQL`,后端使用PHP开发" 48 | ] 49 | }], 50 | "works": [{ 51 | "intern_jobs": "微店前端实习生 (2015.12~2016.04)", 52 | "description": [ 53 | "微店助农项目开发,橱窗推荐开发,组件开发,数据埋点,分销项目开发等" 54 | ] 55 | },{ 56 | "intern_jobs": "美团前端开发实习生 (2015.07~2016.09)", 57 | "description": [ 58 | "修复内部系统`bug`,完成美团app页面开发,美团i版收银台`bug fix`,常规组件开发等" 59 | ] 60 | }], 61 | "skill": [{ 62 | "summary": "web前端:HTML / CSS、JavaScript", 63 | "description": [ 64 | "能够编写语义化的`html`代码,掌握常见布局,熟悉浏览器兼容性问题", 65 | "熟悉 `HTML5` / `CSS3` 新特性,并有相关项目经验,掌握`css`预处理器`LESS`" 66 | ] 67 | },{ 68 | "summary": "库/框架:jQuery、Zepto、Backbone.js", 69 | "description": [ 70 | "仔细阅读和研究过`jQuery`和`Zepto`源码,封装过DOM操作前端js类库", 71 | "了解 `Backbone.js` & `Angularjs` 及前端 MV* 模型" 72 | ]},{ 73 | "summary": "技 能 描 述:", 74 | "description": [ 75 | "熟悉`ECMAScript`,对`js`有一定深入研究和学习。 写过`jQuery`全屏滚动插件", 76 | "对`Sea.js` / `RequireJS` / `Browserify` / `Bower` / `WebPack` 等模块化解决方案有一定实践", 77 | "了解`ECMAScript 6`,了解 `JavaScript` 在浏览器环境中常见的兼容性问题及解决方案" 78 | ] 79 | }], 80 | "self_desc": [{ 81 | "description": [ 82 | "该项目依托于Node环境,使用LESS,Handlebars,Gulp进行构建,可部署至github pages 在线浏览,可直接打印成pdf格式,让您减少简历制作的各种后顾之忧", 83 | "About me:a front-end developer,open source developer,interned in meituan and weidian company" 84 | ] 85 | }], 86 | "sideBar":[{ 87 | "column3": "实习经验", 88 | "column4": "掌握技能", 89 | "column5": "自我描述" 90 | }] 91 | } -------------------------------------------------------------------------------- /gulpfile.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Created by trigkit4 on 16/6/3. 3 | */ 4 | var gulp = require('gulp'); 5 | var rename = require('gulp-rename'); 6 | var less = require('gulp-less'); 7 | var handlebars = require('gulp-compile-handlebars'); 8 | var browserSync = require('browser-sync').create(); 9 | var cssmin = require('gulp-cssmin'); 10 | var plumber = require('gulp-plumber'); 11 | var runSequence = require('run-sequence'); 12 | var plugins = require('gulp-load-plugins')(); 13 | 14 | // markdown syntax support 15 | var markdownify = function (json) { 16 | var jsonStr = JSON.stringify(json); 17 | 18 | return JSON.parse( 19 | jsonStr 20 | .replace(/(\*{2})(.*?)\1/g, '$2') 21 | .replace(/`([^`]+)`/g, '$1') 22 | .replace(/(\\{2})\[([^\\]*)\1\]\1\(([^\\]*)\1\)/g, '$2') 23 | ) 24 | }; 25 | 26 | //compile handlebars 27 | gulp.task('handlebars', function () { 28 | return gulp 29 | .src('src/handlebars/index.hbs') 30 | .pipe( 31 | plumber() 32 | ) 33 | .pipe( 34 | handlebars( 35 | markdownify(require('./resume.json')),{ 36 | ignorePartials: false, 37 | batch: ['src/handlebars/partials'] 38 | } 39 | ) 40 | ) 41 | .pipe( 42 | rename('index.html') 43 | ) 44 | .pipe( 45 | gulp.dest('build') 46 | ) 47 | .pipe( 48 | browserSync.stream() 49 | ) 50 | }); 51 | 52 | //compile less 53 | gulp.task('less', function () { 54 | return gulp 55 | .src('src/less/index.less') 56 | .pipe( 57 | plumber() 58 | ) 59 | .pipe( 60 | less() 61 | ) 62 | .pipe( 63 | gulp.dest('build/assets/css') 64 | ) 65 | .pipe( 66 | browserSync.stream() 67 | ) 68 | }); 69 | 70 | //copy static files to build/assets 71 | gulp.task('copy:static', function () { 72 | return gulp 73 | .src(['src/!(handlebars)/**']) 74 | .pipe( 75 | gulp.dest('build/assets') 76 | ) 77 | }); 78 | 79 | //copy js to build/assets/js 80 | gulp.task('copy:js', function () { 81 | return gulp 82 | .src([ 83 | 'bower_components/jquery/dist/jquery.js', 84 | 'script.js' 85 | ]) 86 | .pipe( 87 | gulp.dest('build/assets/js') 88 | ) 89 | .pipe( 90 | browserSync.stream() 91 | ) 92 | }); 93 | 94 | //minify css files 95 | gulp.task('cssmin', function () { 96 | return gulp 97 | .src('build/assets/css/*.css') 98 | .pipe( 99 | cssmin() 100 | ) 101 | .pipe( 102 | gulp.dest('build/assets/css') 103 | ) 104 | }); 105 | 106 | gulp.task('compile', [ 107 | 'handlebars', 108 | 'less' 109 | ]); 110 | 111 | gulp.task('build', function (cb) { 112 | runSequence( 113 | [ 114 | 'compile', 115 | 'copy:static', 116 | 'copy:js' 117 | ], 118 | cb 119 | ) 120 | }); 121 | 122 | gulp.task('dev',['build'], function () { 123 | browserSync.init({ 124 | server: 'build', 125 | port: 1234 126 | }); 127 | 128 | gulp.watch('src/less/**/*.less',['less']); 129 | gulp.watch([ 130 | 'src/handlebars/**/*.hbs', 131 | './resume.json' 132 | ], ['handlebars']); 133 | 134 | gulp.watch('*.js', function () { 135 | return gulp 136 | .src('*.js') 137 | .pipe(gulp.dest('build/assets/js')) 138 | .pipe( 139 | browserSync.stream() 140 | ); 141 | }) 142 | }); 143 | gulp.task('build-for-deploy',['less','handlebars']); 144 | 145 | //deploy to github pages 146 | gulp.task('deploy', ['build-for-deploy'], function() { 147 | return gulp.src('./build/**/*') 148 | .pipe(plugins.ghPages()); 149 | }); 150 | 151 | gulp.task('default', ['compile']); 152 | -------------------------------------------------------------------------------- /.idea/workspace.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 14 | 15 | 16 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 123 | 124 | 125 | 164 | 165 | 166 | 167 | true 168 | 169 | 170 | $PROJECT_DIR$/gulpfile.js 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | 211 | 212 | 213 | 214 | 215 | 216 | 219 | 220 | 221 | 222 | 225 | 226 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 273 | 274 | 275 | 276 | 277 | 278 | true 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 1464959845002 288 | 291 | 292 | 293 | 294 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | 316 | 317 | 318 | 320 | 321 | 322 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | 561 | 562 | 563 | 564 | 565 | 566 | 567 | 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 | 576 | 577 | 578 | 579 | 580 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | 615 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | 667 | 668 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | 681 | 682 | 683 | 684 | 685 | 686 | 687 | 688 | 689 | 690 | 691 | 692 | 693 | 694 | 695 | 696 | 697 | 698 | 699 | 700 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | --------------------------------------------------------------------------------