├── .gitignore ├── README.md ├── resumer ├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── README.md ├── build │ ├── build.js │ ├── check-versions.js │ ├── dev-client.js │ ├── dev-server.js │ ├── svg-symbols.js │ ├── utils.js │ ├── vue-loader.conf.js │ ├── webpack.base.conf.js │ ├── webpack.dev.conf.js │ ├── webpack.prod.conf.js │ └── webpack.test.conf.js ├── config │ ├── dev.env.js │ ├── index.js │ ├── prod.env.js │ └── test.env.js ├── dist │ ├── index.html │ └── static │ │ ├── css │ │ ├── app.6e2b66d99a3a383e6ba05bda130b101a.css │ │ └── app.6e2b66d99a3a383e6ba05bda130b101a.css.map │ │ ├── js │ │ ├── app.bff82363c3c5b968c55d.js │ │ ├── manifest.d4a8a6799f13bc343aa6.js │ │ └── vendor.663f1ed9bebfb4179c4c.js │ │ └── svg_icons │ │ ├── add.svg │ │ ├── book.svg │ │ ├── cup.svg │ │ ├── heart.svg │ │ ├── id.svg │ │ ├── phone.svg │ │ └── work.svg ├── index.html ├── package.json ├── src │ ├── App.vue │ ├── assets │ │ ├── icons.js │ │ ├── logo.png │ │ └── reset.css │ ├── components │ │ ├── Hello.vue │ │ ├── ResumeEditor.vue │ │ ├── ResumePreview.vue │ │ └── Topbar.vue │ ├── main.js │ └── router │ │ └── index.js ├── static │ ├── .gitkeep │ └── svg_icons │ │ ├── add.svg │ │ ├── book.svg │ │ ├── cup.svg │ │ ├── heart.svg │ │ ├── id.svg │ │ ├── phone.svg │ │ └── work.svg └── test │ └── unit │ ├── .eslintrc │ ├── index.js │ ├── karma.conf.js │ └── specs │ └── Hello.spec.js ├── resumer_assets ├── iconfont.zip └── svg.zip ├── resumer_mockups ├── 0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3 │ ├── 1E72AA7E-408E-45B9-A564-9270EC48E4F2@1x.png │ ├── 1E72AA7E-408E-45B9-A564-9270EC48E4F2@2x.png │ ├── 2180CFD9-7104-4565-8033-56A5EE6DA23B@1x.png │ ├── 2180CFD9-7104-4565-8033-56A5EE6DA23B@2x.png │ ├── 27CF0691-F678-4CDA-8580-5DC240EF46E1@1x.png │ ├── 27CF0691-F678-4CDA-8580-5DC240EF46E1@2x.png │ ├── 34901A7D-A1A0-4354-B2C7-DAE4A296FD40@1x.png │ ├── 34901A7D-A1A0-4354-B2C7-DAE4A296FD40@2x.png │ ├── 392629DD-BB20-4A7D-867F-33461596BA5C@1x.png │ ├── 392629DD-BB20-4A7D-867F-33461596BA5C@2x.png │ ├── 41C3E9A2-3271-4C92-81AD-69C76002F9A1@1x.png │ ├── 41C3E9A2-3271-4C92-81AD-69C76002F9A1@2x.png │ ├── 467EED8B-8622-4973-A98E-402EFFF4F3F8@1x.png │ ├── 467EED8B-8622-4973-A98E-402EFFF4F3F8@2x.png │ ├── 589E5094-E98F-4327-981C-3004D8568023@1x.png │ ├── 589E5094-E98F-4327-981C-3004D8568023@2x.png │ ├── 5AAA9C61-77D1-4D0C-A789-3900BA949BE6@1x.png │ ├── 5AAA9C61-77D1-4D0C-A789-3900BA949BE6@2x.png │ ├── 60E5F268-3379-49A7-B9DA-D028489B75CE@1x.png │ ├── 60E5F268-3379-49A7-B9DA-D028489B75CE@2x.png │ ├── 66FC8E99-BE77-4B56-83C9-2703EE22198B@1x.png │ ├── 66FC8E99-BE77-4B56-83C9-2703EE22198B@2x.png │ ├── 7281EE4D-C384-4D1F-96F3-67BDC55BF5B5@1x.png │ ├── 7281EE4D-C384-4D1F-96F3-67BDC55BF5B5@2x.png │ ├── 817A235A-424A-410C-9136-C59AB5AD9317@1x.png │ ├── 817A235A-424A-410C-9136-C59AB5AD9317@2x.png │ ├── 83D6E8A0-7568-4820-AF69-EB1ED342FC92@1x.png │ ├── 83D6E8A0-7568-4820-AF69-EB1ED342FC92@2x.png │ ├── 91133489-7E76-4110-9B3B-255D185D090B@1x.png │ ├── 91133489-7E76-4110-9B3B-255D185D090B@2x.png │ ├── 91662134-6C3D-46C7-BC30-5EFCC56E1BC3@1x.png │ ├── 91662134-6C3D-46C7-BC30-5EFCC56E1BC3@2x.png │ ├── 98D343FA-0356-4A4B-A22A-862248DC5466@1x.png │ ├── 98D343FA-0356-4A4B-A22A-862248DC5466@2x.png │ ├── 9E02FB80-89A1-44FA-B9B8-9675D5504045@1x.png │ ├── 9E02FB80-89A1-44FA-B9B8-9675D5504045@2x.png │ ├── A1C6FC61-18BB-492F-9FC6-6CB97511D52B@1x.png │ ├── A1C6FC61-18BB-492F-9FC6-6CB97511D52B@2x.png │ ├── A1C7517C-95C7-4A2C-8904-C9875682B182@1x.png │ ├── A1C7517C-95C7-4A2C-8904-C9875682B182@2x.png │ ├── ACE82564-B74B-4718-A4ED-ADFBA133D46E@1x.png │ ├── ACE82564-B74B-4718-A4ED-ADFBA133D46E@2x.png │ ├── CC7E00DD-4C48-4DEC-A18C-F20450D74BCA@1x.png │ ├── CC7E00DD-4C48-4DEC-A18C-F20450D74BCA@2x.png │ ├── D04673F9-AE8C-44BB-9238-8BB3AA791C33@1x.png │ ├── D04673F9-AE8C-44BB-9238-8BB3AA791C33@2x.png │ ├── D5D9BE10-0693-443D-81EC-91D6AC2EA492@1x.png │ ├── D5D9BE10-0693-443D-81EC-91D6AC2EA492@2x.png │ ├── D5EE6EC4-A5C2-4E15-9CC9-070EEB697248@1x.png │ ├── D5EE6EC4-A5C2-4E15-9CC9-070EEB697248@2x.png │ ├── E4F70517-EB4B-4B82-95CF-98BB9ADAC48B@1x.png │ ├── E4F70517-EB4B-4B82-95CF-98BB9ADAC48B@2x.png │ ├── ED697A31-1335-4673-945E-1C4A1AFB1606@1x.png │ ├── ED697A31-1335-4673-945E-1C4A1AFB1606@2x.png │ ├── EFD59A59-E8B3-4270-865E-F10B71ECE237@1x.png │ ├── EFD59A59-E8B3-4270-865E-F10B71ECE237@2x.png │ ├── F11DE78D-9526-453F-8321-76DA562C490A@1x.png │ ├── F11DE78D-9526-453F-8321-76DA562C490A@2x.png │ ├── F7838C06-456A-4EE4-9863-52E18C1ADF73@1x.png │ ├── F7838C06-456A-4EE4-9863-52E18C1ADF73@2x.png │ ├── FC9995AE-FDF2-4BA5-9146-4DD0676F9956@1x.png │ ├── FC9995AE-FDF2-4BA5-9146-4DD0676F9956@2x.png │ └── artboard.png ├── 6718EAE6-88C8-43BA-B638-DE453FCB6C26 │ ├── 6F78CC22-E161-4F60-9FA1-1729CA4E2C9D@1x.png │ ├── 6F78CC22-E161-4F60-9FA1-1729CA4E2C9D@2x.png │ └── artboard.png ├── 79CF71A1-30DE-4CA1-A009-953013973EF4 │ ├── D9B08DD3-880C-46EC-A6AD-45AAA451B393@1x.png │ ├── D9B08DD3-880C-46EC-A6AD-45AAA451B393@2x.png │ └── artboard.png ├── 990BDB1A-4174-4A06-8CA0-72000A029DA1 │ ├── 0AF7E79F-8480-4140-ACFD-B19D0405670D@1x.png │ ├── 0AF7E79F-8480-4140-ACFD-B19D0405670D@2x.png │ ├── 43D8FB4F-785D-45AC-9641-84B9AB953F70@1x.png │ ├── 43D8FB4F-785D-45AC-9641-84B9AB953F70@2x.png │ ├── 6CF83107-4CC4-4CFC-A806-8F05B69E3A67@1x.png │ ├── 6CF83107-4CC4-4CFC-A806-8F05B69E3A67@2x.png │ ├── 933C73F9-87CC-490E-ABF9-50B2FFABE10C@1x.png │ ├── 933C73F9-87CC-490E-ABF9-50B2FFABE10C@2x.png │ └── artboard.png ├── B3DEB190-1925-4395-87C5-07293BF496AF │ ├── 39B0009B-057A-4689-9E0A-82CD45EF5C67@1x.png │ ├── 39B0009B-057A-4689-9E0A-82CD45EF5C67@2x.png │ ├── 74ED0CD5-1EA5-4293-91E5-C1F16FDB3F7A@1x.png │ ├── 74ED0CD5-1EA5-4293-91E5-C1F16FDB3F7A@2x.png │ ├── 9F33BDC4-FDD7-4E42-BA8B-8E138B52953E@1x.png │ ├── 9F33BDC4-FDD7-4E42-BA8B-8E138B52953E@2x.png │ ├── ADE6DC09-F208-4200-A811-6BE22AAE4E5A@1x.png │ ├── ADE6DC09-F208-4200-A811-6BE22AAE4E5A@2x.png │ ├── B14F23E7-A923-4163-8EBF-81477C711806@1x.png │ ├── B14F23E7-A923-4163-8EBF-81477C711806@2x.png │ ├── DD96192F-4B5C-4019-89D0-859F3C6811E8@1x.png │ ├── DD96192F-4B5C-4019-89D0-859F3C6811E8@2x.png │ └── artboard.png ├── B583A351-005E-4EF2-97DD-F6ABD146321D │ ├── 731750E0-E421-46AA-B916-8D4A71F0DF83@1x.png │ ├── 731750E0-E421-46AA-B916-8D4A71F0DF83@2x.png │ ├── A902F844-52A3-4E0A-85C8-1B6C10161701@1x.png │ ├── A902F844-52A3-4E0A-85C8-1B6C10161701@2x.png │ └── artboard.png ├── C5262C1F-4EAB-433C-9F6C-AE2DF60C2618 │ ├── 3B849368-DBA2-4C14-AEA2-1D8BCD917FD8@1x.png │ ├── 3B849368-DBA2-4C14-AEA2-1D8BCD917FD8@2x.png │ └── artboard.png ├── D336D74D-1CC5-46A6-AB44-886858B107DE │ ├── 2F768C95-2A1F-428A-A610-D0063C56686F@1x.png │ ├── 2F768C95-2A1F-428A-A610-D0063C56686F@2x.png │ └── artboard.png ├── D9ED567B-592C-41A3-B581-515C4CEFFF4E │ ├── 1DC64102-A67B-4CF8-BFE3-158062E42E37@1x.png │ ├── 1DC64102-A67B-4CF8-BFE3-158062E42E37@2x.png │ └── artboard.png ├── data.js └── index.html ├── step-1 ├── README.md ├── app.js ├── bar.js ├── bundle.js ├── page.html └── webpack.config.js ├── step-10-resumer ├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── README.md ├── build │ ├── build.js │ ├── check-versions.js │ ├── dev-client.js │ ├── dev-server.js │ ├── svg-symbols.js │ ├── utils.js │ ├── vue-loader.conf.js │ ├── webpack.base.conf.js │ ├── webpack.dev.conf.js │ ├── webpack.prod.conf.js │ └── webpack.test.conf.js ├── config │ ├── dev.env.js │ ├── index.js │ ├── prod.env.js │ └── test.env.js ├── dist │ ├── index.html │ └── static │ │ ├── css │ │ ├── app.c7107ee926843444bdd052f844e1a3cb.css │ │ └── app.c7107ee926843444bdd052f844e1a3cb.css.map │ │ ├── js │ │ ├── app.f9a686ec115616af7462.js │ │ ├── manifest.40bd4a013aec4fcf407c.js │ │ └── vendor.0e0becce4467539492cb.js │ │ └── svg_icons │ │ ├── add.svg │ │ ├── book.svg │ │ ├── cup.svg │ │ ├── heart.svg │ │ ├── id.svg │ │ ├── phone.svg │ │ └── work.svg ├── index.html ├── package.json ├── src │ ├── App.vue │ ├── assets │ │ ├── icons.js │ │ ├── logo.png │ │ ├── reset.css │ │ └── ui.scss │ ├── components │ │ ├── MyDialog.vue │ │ ├── Preview.vue │ │ ├── Resume.vue │ │ ├── ResumeEditor.vue │ │ ├── ResumePreview.vue │ │ ├── SignInForm.vue │ │ ├── SignUpForm.vue │ │ └── Topbar.vue │ ├── i18n │ │ └── index.js │ ├── lib │ │ ├── getAVUser.js │ │ ├── getErrorMessage.js │ │ └── leancloud.js │ ├── main.js │ ├── router │ │ └── index.js │ └── store │ │ └── index.js ├── static │ ├── .gitkeep │ └── svg_icons │ │ ├── add.svg │ │ ├── book.svg │ │ ├── cup.svg │ │ ├── heart.svg │ │ ├── id.svg │ │ ├── phone.svg │ │ └── work.svg └── test │ └── unit │ ├── .eslintrc │ ├── index.js │ ├── karma.conf.js │ └── specs │ └── Hello.spec.js ├── step-2 ├── .gitignore ├── README.md ├── app.js ├── bar.js ├── bundle.js ├── package.json ├── page.html └── webpack.config.js ├── step-3 ├── .gitignore ├── README.md ├── app.js ├── bar.js ├── bundle.js ├── package.json ├── page.html └── webpack.config.js ├── step-4 ├── .gitignore ├── README.md ├── app.js ├── bar.js ├── bundle.js ├── package.json ├── page.html └── webpack.config.js ├── step-5 ├── .gitignore ├── README.md ├── app.js ├── bar.js ├── bundle.js ├── package.json ├── page.html └── webpack.config.js ├── step-8-resumer ├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── README.md ├── build │ ├── build.js │ ├── check-versions.js │ ├── dev-client.js │ ├── dev-server.js │ ├── svg-symbols.js │ ├── utils.js │ ├── vue-loader.conf.js │ ├── webpack.base.conf.js │ ├── webpack.dev.conf.js │ ├── webpack.prod.conf.js │ └── webpack.test.conf.js ├── config │ ├── dev.env.js │ ├── index.js │ ├── prod.env.js │ └── test.env.js ├── dist │ ├── index.html │ └── static │ │ ├── css │ │ ├── app.d976c0b1e5759c9cdae92317de5460a0.css │ │ └── app.d976c0b1e5759c9cdae92317de5460a0.css.map │ │ ├── js │ │ ├── app.b593f68d93733befbbfa.js │ │ ├── manifest.1c9c1a43bee8c60eb5fc.js │ │ └── vendor.586732913becf0c1108f.js │ │ └── svg_icons │ │ ├── add.svg │ │ ├── book.svg │ │ ├── cup.svg │ │ ├── heart.svg │ │ ├── id.svg │ │ ├── phone.svg │ │ └── work.svg ├── index.html ├── package.json ├── src │ ├── App.vue │ ├── assets │ │ ├── icons.js │ │ ├── logo.png │ │ └── reset.css │ ├── components │ │ ├── Hello.vue │ │ ├── ResumeEditor.vue │ │ ├── ResumePreview.vue │ │ └── Topbar.vue │ ├── main.js │ ├── router │ │ └── index.js │ └── store │ │ └── index.js ├── static │ ├── .gitkeep │ └── svg_icons │ │ ├── add.svg │ │ ├── book.svg │ │ ├── cup.svg │ │ ├── heart.svg │ │ ├── id.svg │ │ ├── phone.svg │ │ └── work.svg └── test │ └── unit │ ├── .eslintrc │ ├── index.js │ ├── karma.conf.js │ └── specs │ └── Hello.spec.js └── step-9-resumer ├── .babelrc ├── .editorconfig ├── .eslintignore ├── .eslintrc.js ├── .gitignore ├── README.md ├── build ├── build.js ├── check-versions.js ├── dev-client.js ├── dev-server.js ├── svg-symbols.js ├── utils.js ├── vue-loader.conf.js ├── webpack.base.conf.js ├── webpack.dev.conf.js ├── webpack.prod.conf.js └── webpack.test.conf.js ├── config ├── dev.env.js ├── index.js ├── prod.env.js └── test.env.js ├── dist ├── index.html └── static │ ├── css │ ├── app.c7107ee926843444bdd052f844e1a3cb.css │ └── app.c7107ee926843444bdd052f844e1a3cb.css.map │ ├── js │ ├── app.f9a686ec115616af7462.js │ ├── manifest.40bd4a013aec4fcf407c.js │ └── vendor.0e0becce4467539492cb.js │ └── svg_icons │ ├── add.svg │ ├── book.svg │ ├── cup.svg │ ├── heart.svg │ ├── id.svg │ ├── phone.svg │ └── work.svg ├── index.html ├── package.json ├── src ├── App.vue ├── assets │ ├── icons.js │ ├── logo.png │ └── reset.css ├── components │ ├── Hello.vue │ ├── MyDialog.vue │ ├── ResumeEditor.vue │ ├── ResumePreview.vue │ ├── SignInForm.vue │ ├── SignUpForm.vue │ └── Topbar.vue ├── lib │ ├── getAVUser.js │ ├── getErrorMessage.js │ └── leancloud.js ├── main.js ├── router │ └── index.js └── store │ └── index.js ├── static ├── .gitkeep └── svg_icons │ ├── add.svg │ ├── book.svg │ ├── cup.svg │ ├── heart.svg │ ├── id.svg │ ├── phone.svg │ └── work.svg └── test └── unit ├── .eslintrc ├── index.js ├── karma.conf.js └── specs └── Hello.spec.js /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | 6 | # Runtime data 7 | pids 8 | *.pid 9 | *.seed 10 | 11 | # Directory for instrumented libs generated by jscoverage/JSCover 12 | lib-cov 13 | 14 | # Coverage directory used by tools like istanbul 15 | coverage 16 | 17 | # nyc test coverage 18 | .nyc_output 19 | 20 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 21 | .grunt 22 | 23 | # node-waf configuration 24 | .lock-wscript 25 | 26 | # Compiled binary addons (http://nodejs.org/api/addons.html) 27 | build/Release 28 | 29 | # Dependency directories 30 | node_modules 31 | jspm_packages 32 | 33 | # Optional npm cache directory 34 | .npm 35 | 36 | # Optional REPL history 37 | .node_repl_history 38 | 39 | .vscode 40 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Resumer 2 | 3 | 「通过项目学知识」之「一个在线简历编辑器」。 4 | 5 | > 注意:如果你在 npm install 的时候卡在 phantomjs,就在 package.json 把 phantom 相关的依赖全部删掉,我们用不到它们。 6 | 7 | # 任务一 8 | 9 | 首先我们要学会使用目前最新的模块加载器:Webpack 10 | 11 | 请进入下面的链接开始学习: 12 | 13 | [我也会 Webpack 啊啊啊](https://github.com/jirengu-inc/jrg-project-5/issues/1) 14 | 15 | # 任务二 16 | 17 | 接下来我们要用「copy - run - modify」的套路学 Vue.js 18 | 19 | 请进入下面的链接开始学习: 20 | 21 | [Vue.js 我来了](https://github.com/jirengu-inc/jrg-project-5/issues/2) 22 | 23 | # 任务三 24 | 25 | JS 文件已经可以运行了,Vue 也引入了,那我们就直接开始撸代码了。 26 | 27 | 期间会有一些你不懂的东西,比如 Vue 组件、Vue 事件绑定、双向绑定等。 28 | 29 | 遇到不懂的东西,你应该用「copy - run - modify」的套路把官网上的例子运行一遍,然后改点东西。只需要知道你改一个东西会有什么作用就可以了。 30 | 31 | 如果想了解具体原理,就等这个任务做完了之后再了解。 32 | 33 | 请进入下面的链接开始学习: 34 | 35 | [Todo 小应用](https://github.com/jirengu-inc/jrg-project-5/issues/3) 36 | 37 | # 任务四 38 | 39 | 总不能总把资料存在 localStorge 吧,我们需要存到服务器上。 40 | 41 | 但是我们不想买服务器啊! 42 | 于是有了这篇教程: 43 | 44 | [No Backend!](https://github.com/jirengu-inc/jrg-project-5/issues/4) 45 | 46 | # 任务五 47 | 48 | 完善任务四 49 | 50 | [No Backend 2](https://github.com/jirengu-inc/jrg-project-5/issues/5) 51 | 52 | # 任务六 53 | 我们已经基本知道怎么使用 Vue 和 LeanCloud 了,那么我们开始真正做项目吧! 54 | 55 | [My Project](https://github.com/jirengu-inc/jrg-project-5/issues/7) 56 | 57 | 58 | # 任务七 59 | 实现导航功能和表单 60 | 61 | [Hello Modules](https://github.com/jirengu-inc/jrg-project-5/issues/8) 62 | 63 | # 任务八 64 | 使用 Vuex 管理数据 65 | 66 | [数据!](https://github.com/jirengu-inc/jrg-project-5/issues/9) 67 | 68 | # 任务九 69 | 70 | 删掉所有双向绑定,改为单向数据流 71 | 72 | [单向数据流](https://github.com/jirengu-inc/jrg-project-5/issues/10) 73 | 74 | # 任务十 75 | 76 | [重来](https://github.com/jirengu-inc/jrg-project-5/issues/12) 77 | -------------------------------------------------------------------------------- /resumer/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["es2015", { "modules": false }], 4 | "stage-2" 5 | ], 6 | "plugins": ["transform-runtime"], 7 | "comments": false, 8 | "env": { 9 | "test": { 10 | "plugins": [ "istanbul" ] 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /resumer/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /resumer/.eslintignore: -------------------------------------------------------------------------------- 1 | build/*.js 2 | config/*.js 3 | -------------------------------------------------------------------------------- /resumer/.eslintrc.js: -------------------------------------------------------------------------------- 1 | // http://eslint.org/docs/user-guide/configuring 2 | 3 | module.exports = { 4 | root: true, 5 | parser: 'babel-eslint', 6 | parserOptions: { 7 | sourceType: 'module' 8 | }, 9 | env: { 10 | browser: true, 11 | }, 12 | // https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style 13 | extends: 'standard', 14 | // required to lint *.vue files 15 | plugins: [ 16 | 'html' 17 | ], 18 | // add your custom rules here 19 | 'rules': { 20 | // allow paren-less arrow functions 21 | 'arrow-parens': 0, 22 | // allow async-await 23 | 'generator-star-spacing': 0, 24 | // allow debugger during development 25 | 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /resumer/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | npm-debug.log 4 | test/unit/coverage 5 | -------------------------------------------------------------------------------- /resumer/README.md: -------------------------------------------------------------------------------- 1 | # resumer 2 | 3 | > A Vue.js project 4 | 5 | ## Build Setup 6 | 7 | ``` bash 8 | # install dependencies 9 | npm install 10 | 11 | # serve with hot reload at localhost:8080 12 | npm run dev 13 | 14 | # build for production with minification 15 | npm run build 16 | 17 | # build for production and view the bundle analyzer report 18 | npm run build --report 19 | 20 | # run unit tests 21 | npm run unit 22 | 23 | # run all tests 24 | npm test 25 | ``` 26 | 27 | For detailed explanation on how things work, checkout the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). 28 | -------------------------------------------------------------------------------- /resumer/build/build.js: -------------------------------------------------------------------------------- 1 | // https://github.com/shelljs/shelljs 2 | require('./check-versions')() 3 | 4 | process.env.NODE_ENV = 'production' 5 | 6 | var ora = require('ora') 7 | var path = require('path') 8 | var chalk = require('chalk') 9 | var shell = require('shelljs') 10 | var webpack = require('webpack') 11 | var config = require('../config') 12 | var webpackConfig = require('./webpack.prod.conf') 13 | 14 | var spinner = ora('building for production...') 15 | spinner.start() 16 | 17 | var assetsPath = path.join(config.build.assetsRoot, config.build.assetsSubDirectory) 18 | shell.rm('-rf', assetsPath) 19 | shell.mkdir('-p', assetsPath) 20 | shell.config.silent = true 21 | shell.cp('-R', 'static/*', assetsPath) 22 | shell.config.silent = false 23 | 24 | webpack(webpackConfig, function (err, stats) { 25 | spinner.stop() 26 | if (err) throw err 27 | process.stdout.write(stats.toString({ 28 | colors: true, 29 | modules: false, 30 | children: false, 31 | chunks: false, 32 | chunkModules: false 33 | }) + '\n\n') 34 | 35 | console.log(chalk.cyan(' Build complete.\n')) 36 | console.log(chalk.yellow( 37 | ' Tip: built files are meant to be served over an HTTP server.\n' + 38 | ' Opening index.html over file:// won\'t work.\n' 39 | )) 40 | }) 41 | -------------------------------------------------------------------------------- /resumer/build/check-versions.js: -------------------------------------------------------------------------------- 1 | var chalk = require('chalk') 2 | var semver = require('semver') 3 | var packageConfig = require('../package.json') 4 | 5 | function exec (cmd) { 6 | return require('child_process').execSync(cmd).toString().trim() 7 | } 8 | 9 | var versionRequirements = [ 10 | { 11 | name: 'node', 12 | currentVersion: semver.clean(process.version), 13 | versionRequirement: packageConfig.engines.node 14 | }, 15 | { 16 | name: 'npm', 17 | currentVersion: exec('npm --version'), 18 | versionRequirement: packageConfig.engines.npm 19 | } 20 | ] 21 | 22 | module.exports = function () { 23 | var warnings = [] 24 | for (var i = 0; i < versionRequirements.length; i++) { 25 | var mod = versionRequirements[i] 26 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 27 | warnings.push(mod.name + ': ' + 28 | chalk.red(mod.currentVersion) + ' should be ' + 29 | chalk.green(mod.versionRequirement) 30 | ) 31 | } 32 | } 33 | 34 | if (warnings.length) { 35 | console.log('') 36 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 37 | console.log() 38 | for (var i = 0; i < warnings.length; i++) { 39 | var warning = warnings[i] 40 | console.log(' ' + warning) 41 | } 42 | console.log() 43 | process.exit(1) 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /resumer/build/dev-client.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | require('eventsource-polyfill') 3 | var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') 4 | 5 | hotClient.subscribe(function (event) { 6 | if (event.action === 'reload') { 7 | window.location.reload() 8 | } 9 | }) 10 | -------------------------------------------------------------------------------- /resumer/build/svg-symbols.js: -------------------------------------------------------------------------------- 1 | // 这是一个 Node.js 脚本,并没有被 webpack 打包,所以我们不能使用 import path from 'path' 2 | const path = require('path') // 路径工具 3 | const fs = require('fs') // 文件系统工具 4 | 5 | let svgFolder = path.join(__dirname, '../static/svg_icons/') 6 | let jsPath = path.join(__dirname, '../src/assets/icons.js') 7 | 8 | let svgFiles = fs.readdirSync(svgFolder) // [ 'add.svg', 'book.svg', 'cup.svg', 'heart.svg', 'id.svg', 'phone.svg', 'work.svg' ] 9 | 10 | let symbols = svgFiles.map(function (filename) { 11 | let absolutePath = path.join(svgFolder, filename) 12 | let fileContent = fs.readFileSync(absolutePath).toString('utf8') 13 | let name = path.basename(filename, '.svg') 14 | return fileContent 15 | .replace(/<\?.+?\?>/g, '') // 去掉 16 | .replace(//g, '') // 去掉 17 | .replace(/version=".+?"/g, '') 18 | .replace(/xmlns=".+?"/g, '') 19 | .replace(/class=".+?"/g, '') 20 | .replace(/fill=".+?"/g, '') 21 | .replace(/stroke=".+?"/g, '') 22 | .replace(/\`\n` 28 | 29 | fs.writeFileSync(jsPath, js, {flag: 'w'}) -------------------------------------------------------------------------------- /resumer/build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var config = require('../config') 3 | var isProduction = process.env.NODE_ENV === 'production' 4 | 5 | module.exports = { 6 | loaders: utils.cssLoaders({ 7 | sourceMap: isProduction 8 | ? config.build.productionSourceMap 9 | : config.dev.cssSourceMap, 10 | extract: isProduction 11 | }), 12 | postcss: [ 13 | require('autoprefixer')({ 14 | browsers: ['last 2 versions'] 15 | }) 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /resumer/build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var webpack = require('webpack') 3 | var config = require('../config') 4 | var merge = require('webpack-merge') 5 | var baseWebpackConfig = require('./webpack.base.conf') 6 | var HtmlWebpackPlugin = require('html-webpack-plugin') 7 | var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 8 | 9 | // add hot-reload related code to entry chunks 10 | Object.keys(baseWebpackConfig.entry).forEach(function (name) { 11 | baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name]) 12 | }) 13 | 14 | module.exports = merge(baseWebpackConfig, { 15 | module: { 16 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap }) 17 | }, 18 | // cheap-module-eval-source-map is faster for development 19 | devtool: '#cheap-module-eval-source-map', 20 | plugins: [ 21 | new webpack.DefinePlugin({ 22 | 'process.env': config.dev.env 23 | }), 24 | // https://github.com/glenjamin/webpack-hot-middleware#installation--usage 25 | new webpack.HotModuleReplacementPlugin(), 26 | new webpack.NoEmitOnErrorsPlugin(), 27 | // https://github.com/ampedandwired/html-webpack-plugin 28 | new HtmlWebpackPlugin({ 29 | filename: 'index.html', 30 | template: 'index.html', 31 | inject: true 32 | }), 33 | new FriendlyErrorsPlugin() 34 | ] 35 | }) 36 | -------------------------------------------------------------------------------- /resumer/build/webpack.test.conf.js: -------------------------------------------------------------------------------- 1 | // This is the webpack config used for unit tests. 2 | 3 | var utils = require('./utils') 4 | var webpack = require('webpack') 5 | var merge = require('webpack-merge') 6 | var baseConfig = require('./webpack.base.conf') 7 | 8 | var webpackConfig = merge(baseConfig, { 9 | // use inline sourcemap for karma-sourcemap-loader 10 | module: { 11 | rules: utils.styleLoaders() 12 | }, 13 | devtool: '#inline-source-map', 14 | plugins: [ 15 | new webpack.DefinePlugin({ 16 | 'process.env': require('../config/test.env') 17 | }) 18 | ] 19 | }) 20 | 21 | // no need for app entry during tests 22 | delete webpackConfig.entry 23 | 24 | module.exports = webpackConfig 25 | -------------------------------------------------------------------------------- /resumer/config/dev.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var prodEnv = require('./prod.env') 3 | 4 | module.exports = merge(prodEnv, { 5 | NODE_ENV: '"development"' 6 | }) 7 | -------------------------------------------------------------------------------- /resumer/config/index.js: -------------------------------------------------------------------------------- 1 | // see http://vuejs-templates.github.io/webpack for documentation. 2 | var path = require('path') 3 | 4 | module.exports = { 5 | build: { 6 | env: require('./prod.env'), 7 | index: path.resolve(__dirname, '../dist/index.html'), 8 | assetsRoot: path.resolve(__dirname, '../dist'), 9 | assetsSubDirectory: 'static', 10 | assetsPublicPath: '/jrg-project-5/resumer/dist', 11 | productionSourceMap: true, 12 | // Gzip off by default as many popular static hosts such as 13 | // Surge or Netlify already gzip all static assets for you. 14 | // Before setting to `true`, make sure to: 15 | // npm install --save-dev compression-webpack-plugin 16 | productionGzip: false, 17 | productionGzipExtensions: ['js', 'css'], 18 | // Run the build command with an extra argument to 19 | // View the bundle analyzer report after build finishes: 20 | // `npm run build --report` 21 | // Set to `true` or `false` to always turn it on or off 22 | bundleAnalyzerReport: process.env.npm_config_report 23 | }, 24 | dev: { 25 | env: require('./dev.env'), 26 | port: 8080, 27 | autoOpenBrowser: true, 28 | assetsSubDirectory: 'static', 29 | assetsPublicPath: '/', 30 | proxyTable: {}, 31 | // CSS Sourcemaps off by default because relative paths are "buggy" 32 | // with this option, according to the CSS-Loader README 33 | // (https://github.com/webpack/css-loader#sourcemaps) 34 | // In our experience, they generally work as expected, 35 | // just be aware of this issue when enabling this option. 36 | cssSourceMap: false 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /resumer/config/prod.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NODE_ENV: '"production"' 3 | } 4 | -------------------------------------------------------------------------------- /resumer/config/test.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var devEnv = require('./dev.env') 3 | 4 | module.exports = merge(devEnv, { 5 | NODE_ENV: '"testing"' 6 | }) 7 | -------------------------------------------------------------------------------- /resumer/dist/index.html: -------------------------------------------------------------------------------- 1 | resumer
-------------------------------------------------------------------------------- /resumer/dist/static/js/manifest.d4a8a6799f13bc343aa6.js: -------------------------------------------------------------------------------- 1 | !function(e){function r(t){if(n[t])return n[t].exports;var o=n[t]={i:t,l:!1,exports:{}};return e[t].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var t=window.webpackJsonp;window.webpackJsonp=function(n,c,i){for(var u,a,f,s=0,l=[];s -------------------------------------------------------------------------------- /resumer/dist/static/svg_icons/heart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resumer/dist/static/svg_icons/id.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resumer/dist/static/svg_icons/work.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resumer/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | resumer 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /resumer/src/App.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 35 | 36 | -------------------------------------------------------------------------------- /resumer/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer/src/assets/logo.png -------------------------------------------------------------------------------- /resumer/src/assets/reset.css: -------------------------------------------------------------------------------- 1 | *{margin:0; padding:0; box-sizing: border-box; } 2 | *::after, *::before{box-sizing:border-box;} 3 | -------------------------------------------------------------------------------- /resumer/src/components/Hello.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 33 | 34 | 35 | 54 | -------------------------------------------------------------------------------- /resumer/src/components/ResumePreview.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 12 | 13 | 19 | -------------------------------------------------------------------------------- /resumer/src/components/Topbar.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 19 | 20 | 62 | -------------------------------------------------------------------------------- /resumer/src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from 'vue' 4 | import App from './App' 5 | import router from './router' 6 | 7 | /* eslint-disable no-new */ 8 | new Vue({ 9 | el: '#app', 10 | router, 11 | template: '', 12 | components: { App } 13 | }) 14 | -------------------------------------------------------------------------------- /resumer/src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | 4 | Vue.use(Router) 5 | 6 | import Hello from 'components/Hello' 7 | 8 | export default new Router({ 9 | routes: [ 10 | { 11 | path: '/', 12 | name: 'Hello', 13 | component: Hello 14 | } 15 | ] 16 | }) 17 | -------------------------------------------------------------------------------- /resumer/static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer/static/.gitkeep -------------------------------------------------------------------------------- /resumer/static/svg_icons/book.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resumer/static/svg_icons/heart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resumer/static/svg_icons/id.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resumer/static/svg_icons/work.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /resumer/test/unit/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "mocha": true 4 | }, 5 | "globals": { 6 | "expect": true, 7 | "sinon": true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /resumer/test/unit/index.js: -------------------------------------------------------------------------------- 1 | // Polyfill fn.bind() for PhantomJS 2 | /* eslint-disable no-extend-native */ 3 | Function.prototype.bind = require('function-bind') 4 | 5 | // require all test files (files that ends with .spec.js) 6 | const testsContext = require.context('./specs', true, /\.spec$/) 7 | testsContext.keys().forEach(testsContext) 8 | 9 | // require all src files except main.js for coverage. 10 | // you can also change this to match only the subset of files that 11 | // you want coverage for. 12 | const srcContext = require.context('src', true, /^\.\/(?!main(\.js)?$)/) 13 | srcContext.keys().forEach(srcContext) 14 | -------------------------------------------------------------------------------- /resumer/test/unit/karma.conf.js: -------------------------------------------------------------------------------- 1 | // This is a karma config file. For more details see 2 | // http://karma-runner.github.io/0.13/config/configuration-file.html 3 | // we are also using it with karma-webpack 4 | // https://github.com/webpack/karma-webpack 5 | 6 | var webpackConfig = require('../../build/webpack.test.conf') 7 | 8 | module.exports = function (config) { 9 | config.set({ 10 | // to run in additional browsers: 11 | // 1. install corresponding karma launcher 12 | // http://karma-runner.github.io/0.13/config/browsers.html 13 | // 2. add it to the `browsers` array below. 14 | browsers: ['PhantomJS'], 15 | frameworks: ['mocha', 'sinon-chai'], 16 | reporters: ['spec', 'coverage'], 17 | files: ['./index.js'], 18 | preprocessors: { 19 | './index.js': ['webpack', 'sourcemap'] 20 | }, 21 | webpack: webpackConfig, 22 | webpackMiddleware: { 23 | noInfo: true 24 | }, 25 | coverageReporter: { 26 | dir: './coverage', 27 | reporters: [ 28 | { type: 'lcov', subdir: '.' }, 29 | { type: 'text-summary' } 30 | ] 31 | } 32 | }) 33 | } 34 | -------------------------------------------------------------------------------- /resumer/test/unit/specs/Hello.spec.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Hello from 'src/components/Hello' 3 | 4 | describe('Hello.vue', () => { 5 | it('should render correct contents', () => { 6 | const vm = new Vue({ 7 | el: document.createElement('div'), 8 | render: (h) => h(Hello) 9 | }) 10 | expect(vm.$el.querySelector('.hello h1').textContent) 11 | .to.equal('Welcome to Your Vue.js App') 12 | }) 13 | }) 14 | -------------------------------------------------------------------------------- /resumer_assets/iconfont.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_assets/iconfont.zip -------------------------------------------------------------------------------- /resumer_assets/svg.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_assets/svg.zip -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/1E72AA7E-408E-45B9-A564-9270EC48E4F2@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/1E72AA7E-408E-45B9-A564-9270EC48E4F2@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/1E72AA7E-408E-45B9-A564-9270EC48E4F2@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/1E72AA7E-408E-45B9-A564-9270EC48E4F2@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/2180CFD9-7104-4565-8033-56A5EE6DA23B@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/2180CFD9-7104-4565-8033-56A5EE6DA23B@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/2180CFD9-7104-4565-8033-56A5EE6DA23B@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/2180CFD9-7104-4565-8033-56A5EE6DA23B@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/27CF0691-F678-4CDA-8580-5DC240EF46E1@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/27CF0691-F678-4CDA-8580-5DC240EF46E1@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/27CF0691-F678-4CDA-8580-5DC240EF46E1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/27CF0691-F678-4CDA-8580-5DC240EF46E1@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/34901A7D-A1A0-4354-B2C7-DAE4A296FD40@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/34901A7D-A1A0-4354-B2C7-DAE4A296FD40@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/34901A7D-A1A0-4354-B2C7-DAE4A296FD40@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/34901A7D-A1A0-4354-B2C7-DAE4A296FD40@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/392629DD-BB20-4A7D-867F-33461596BA5C@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/392629DD-BB20-4A7D-867F-33461596BA5C@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/392629DD-BB20-4A7D-867F-33461596BA5C@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/392629DD-BB20-4A7D-867F-33461596BA5C@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/41C3E9A2-3271-4C92-81AD-69C76002F9A1@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/41C3E9A2-3271-4C92-81AD-69C76002F9A1@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/41C3E9A2-3271-4C92-81AD-69C76002F9A1@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/41C3E9A2-3271-4C92-81AD-69C76002F9A1@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/467EED8B-8622-4973-A98E-402EFFF4F3F8@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/467EED8B-8622-4973-A98E-402EFFF4F3F8@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/467EED8B-8622-4973-A98E-402EFFF4F3F8@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/467EED8B-8622-4973-A98E-402EFFF4F3F8@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/589E5094-E98F-4327-981C-3004D8568023@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/589E5094-E98F-4327-981C-3004D8568023@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/589E5094-E98F-4327-981C-3004D8568023@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/589E5094-E98F-4327-981C-3004D8568023@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/5AAA9C61-77D1-4D0C-A789-3900BA949BE6@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/5AAA9C61-77D1-4D0C-A789-3900BA949BE6@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/5AAA9C61-77D1-4D0C-A789-3900BA949BE6@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/5AAA9C61-77D1-4D0C-A789-3900BA949BE6@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/60E5F268-3379-49A7-B9DA-D028489B75CE@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/60E5F268-3379-49A7-B9DA-D028489B75CE@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/60E5F268-3379-49A7-B9DA-D028489B75CE@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/60E5F268-3379-49A7-B9DA-D028489B75CE@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/66FC8E99-BE77-4B56-83C9-2703EE22198B@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/66FC8E99-BE77-4B56-83C9-2703EE22198B@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/66FC8E99-BE77-4B56-83C9-2703EE22198B@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/66FC8E99-BE77-4B56-83C9-2703EE22198B@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/7281EE4D-C384-4D1F-96F3-67BDC55BF5B5@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/7281EE4D-C384-4D1F-96F3-67BDC55BF5B5@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/7281EE4D-C384-4D1F-96F3-67BDC55BF5B5@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/7281EE4D-C384-4D1F-96F3-67BDC55BF5B5@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/817A235A-424A-410C-9136-C59AB5AD9317@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/817A235A-424A-410C-9136-C59AB5AD9317@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/817A235A-424A-410C-9136-C59AB5AD9317@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/817A235A-424A-410C-9136-C59AB5AD9317@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/83D6E8A0-7568-4820-AF69-EB1ED342FC92@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/83D6E8A0-7568-4820-AF69-EB1ED342FC92@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/83D6E8A0-7568-4820-AF69-EB1ED342FC92@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/83D6E8A0-7568-4820-AF69-EB1ED342FC92@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/91133489-7E76-4110-9B3B-255D185D090B@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/91133489-7E76-4110-9B3B-255D185D090B@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/91133489-7E76-4110-9B3B-255D185D090B@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/91133489-7E76-4110-9B3B-255D185D090B@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/91662134-6C3D-46C7-BC30-5EFCC56E1BC3@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/91662134-6C3D-46C7-BC30-5EFCC56E1BC3@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/91662134-6C3D-46C7-BC30-5EFCC56E1BC3@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/91662134-6C3D-46C7-BC30-5EFCC56E1BC3@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/98D343FA-0356-4A4B-A22A-862248DC5466@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/98D343FA-0356-4A4B-A22A-862248DC5466@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/98D343FA-0356-4A4B-A22A-862248DC5466@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/98D343FA-0356-4A4B-A22A-862248DC5466@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/9E02FB80-89A1-44FA-B9B8-9675D5504045@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/9E02FB80-89A1-44FA-B9B8-9675D5504045@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/9E02FB80-89A1-44FA-B9B8-9675D5504045@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/9E02FB80-89A1-44FA-B9B8-9675D5504045@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/A1C6FC61-18BB-492F-9FC6-6CB97511D52B@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/A1C6FC61-18BB-492F-9FC6-6CB97511D52B@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/A1C6FC61-18BB-492F-9FC6-6CB97511D52B@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/A1C6FC61-18BB-492F-9FC6-6CB97511D52B@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/A1C7517C-95C7-4A2C-8904-C9875682B182@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/A1C7517C-95C7-4A2C-8904-C9875682B182@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/A1C7517C-95C7-4A2C-8904-C9875682B182@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/A1C7517C-95C7-4A2C-8904-C9875682B182@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/ACE82564-B74B-4718-A4ED-ADFBA133D46E@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/ACE82564-B74B-4718-A4ED-ADFBA133D46E@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/ACE82564-B74B-4718-A4ED-ADFBA133D46E@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/ACE82564-B74B-4718-A4ED-ADFBA133D46E@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/CC7E00DD-4C48-4DEC-A18C-F20450D74BCA@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/CC7E00DD-4C48-4DEC-A18C-F20450D74BCA@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/CC7E00DD-4C48-4DEC-A18C-F20450D74BCA@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/CC7E00DD-4C48-4DEC-A18C-F20450D74BCA@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/D04673F9-AE8C-44BB-9238-8BB3AA791C33@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/D04673F9-AE8C-44BB-9238-8BB3AA791C33@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/D04673F9-AE8C-44BB-9238-8BB3AA791C33@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/D04673F9-AE8C-44BB-9238-8BB3AA791C33@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/D5D9BE10-0693-443D-81EC-91D6AC2EA492@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/D5D9BE10-0693-443D-81EC-91D6AC2EA492@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/D5D9BE10-0693-443D-81EC-91D6AC2EA492@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/D5D9BE10-0693-443D-81EC-91D6AC2EA492@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/D5EE6EC4-A5C2-4E15-9CC9-070EEB697248@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/D5EE6EC4-A5C2-4E15-9CC9-070EEB697248@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/D5EE6EC4-A5C2-4E15-9CC9-070EEB697248@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/D5EE6EC4-A5C2-4E15-9CC9-070EEB697248@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/E4F70517-EB4B-4B82-95CF-98BB9ADAC48B@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/E4F70517-EB4B-4B82-95CF-98BB9ADAC48B@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/E4F70517-EB4B-4B82-95CF-98BB9ADAC48B@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/E4F70517-EB4B-4B82-95CF-98BB9ADAC48B@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/ED697A31-1335-4673-945E-1C4A1AFB1606@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/ED697A31-1335-4673-945E-1C4A1AFB1606@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/ED697A31-1335-4673-945E-1C4A1AFB1606@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/ED697A31-1335-4673-945E-1C4A1AFB1606@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/EFD59A59-E8B3-4270-865E-F10B71ECE237@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/EFD59A59-E8B3-4270-865E-F10B71ECE237@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/EFD59A59-E8B3-4270-865E-F10B71ECE237@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/EFD59A59-E8B3-4270-865E-F10B71ECE237@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/F11DE78D-9526-453F-8321-76DA562C490A@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/F11DE78D-9526-453F-8321-76DA562C490A@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/F11DE78D-9526-453F-8321-76DA562C490A@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/F11DE78D-9526-453F-8321-76DA562C490A@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/F7838C06-456A-4EE4-9863-52E18C1ADF73@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/F7838C06-456A-4EE4-9863-52E18C1ADF73@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/F7838C06-456A-4EE4-9863-52E18C1ADF73@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/F7838C06-456A-4EE4-9863-52E18C1ADF73@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/FC9995AE-FDF2-4BA5-9146-4DD0676F9956@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/FC9995AE-FDF2-4BA5-9146-4DD0676F9956@1x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/FC9995AE-FDF2-4BA5-9146-4DD0676F9956@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/FC9995AE-FDF2-4BA5-9146-4DD0676F9956@2x.png -------------------------------------------------------------------------------- /resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/artboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/0BE37999-6496-4C69-BA7B-3A8CEC8BCDD3/artboard.png -------------------------------------------------------------------------------- /resumer_mockups/6718EAE6-88C8-43BA-B638-DE453FCB6C26/6F78CC22-E161-4F60-9FA1-1729CA4E2C9D@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/6718EAE6-88C8-43BA-B638-DE453FCB6C26/6F78CC22-E161-4F60-9FA1-1729CA4E2C9D@1x.png -------------------------------------------------------------------------------- /resumer_mockups/6718EAE6-88C8-43BA-B638-DE453FCB6C26/6F78CC22-E161-4F60-9FA1-1729CA4E2C9D@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/6718EAE6-88C8-43BA-B638-DE453FCB6C26/6F78CC22-E161-4F60-9FA1-1729CA4E2C9D@2x.png -------------------------------------------------------------------------------- /resumer_mockups/6718EAE6-88C8-43BA-B638-DE453FCB6C26/artboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/6718EAE6-88C8-43BA-B638-DE453FCB6C26/artboard.png -------------------------------------------------------------------------------- /resumer_mockups/79CF71A1-30DE-4CA1-A009-953013973EF4/D9B08DD3-880C-46EC-A6AD-45AAA451B393@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/79CF71A1-30DE-4CA1-A009-953013973EF4/D9B08DD3-880C-46EC-A6AD-45AAA451B393@1x.png -------------------------------------------------------------------------------- /resumer_mockups/79CF71A1-30DE-4CA1-A009-953013973EF4/D9B08DD3-880C-46EC-A6AD-45AAA451B393@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/79CF71A1-30DE-4CA1-A009-953013973EF4/D9B08DD3-880C-46EC-A6AD-45AAA451B393@2x.png -------------------------------------------------------------------------------- /resumer_mockups/79CF71A1-30DE-4CA1-A009-953013973EF4/artboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/79CF71A1-30DE-4CA1-A009-953013973EF4/artboard.png -------------------------------------------------------------------------------- /resumer_mockups/990BDB1A-4174-4A06-8CA0-72000A029DA1/0AF7E79F-8480-4140-ACFD-B19D0405670D@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/990BDB1A-4174-4A06-8CA0-72000A029DA1/0AF7E79F-8480-4140-ACFD-B19D0405670D@1x.png -------------------------------------------------------------------------------- /resumer_mockups/990BDB1A-4174-4A06-8CA0-72000A029DA1/0AF7E79F-8480-4140-ACFD-B19D0405670D@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/990BDB1A-4174-4A06-8CA0-72000A029DA1/0AF7E79F-8480-4140-ACFD-B19D0405670D@2x.png -------------------------------------------------------------------------------- /resumer_mockups/990BDB1A-4174-4A06-8CA0-72000A029DA1/43D8FB4F-785D-45AC-9641-84B9AB953F70@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/990BDB1A-4174-4A06-8CA0-72000A029DA1/43D8FB4F-785D-45AC-9641-84B9AB953F70@1x.png -------------------------------------------------------------------------------- /resumer_mockups/990BDB1A-4174-4A06-8CA0-72000A029DA1/43D8FB4F-785D-45AC-9641-84B9AB953F70@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/990BDB1A-4174-4A06-8CA0-72000A029DA1/43D8FB4F-785D-45AC-9641-84B9AB953F70@2x.png -------------------------------------------------------------------------------- /resumer_mockups/990BDB1A-4174-4A06-8CA0-72000A029DA1/6CF83107-4CC4-4CFC-A806-8F05B69E3A67@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/990BDB1A-4174-4A06-8CA0-72000A029DA1/6CF83107-4CC4-4CFC-A806-8F05B69E3A67@1x.png -------------------------------------------------------------------------------- /resumer_mockups/990BDB1A-4174-4A06-8CA0-72000A029DA1/6CF83107-4CC4-4CFC-A806-8F05B69E3A67@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/990BDB1A-4174-4A06-8CA0-72000A029DA1/6CF83107-4CC4-4CFC-A806-8F05B69E3A67@2x.png -------------------------------------------------------------------------------- /resumer_mockups/990BDB1A-4174-4A06-8CA0-72000A029DA1/933C73F9-87CC-490E-ABF9-50B2FFABE10C@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/990BDB1A-4174-4A06-8CA0-72000A029DA1/933C73F9-87CC-490E-ABF9-50B2FFABE10C@1x.png -------------------------------------------------------------------------------- /resumer_mockups/990BDB1A-4174-4A06-8CA0-72000A029DA1/933C73F9-87CC-490E-ABF9-50B2FFABE10C@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/990BDB1A-4174-4A06-8CA0-72000A029DA1/933C73F9-87CC-490E-ABF9-50B2FFABE10C@2x.png -------------------------------------------------------------------------------- /resumer_mockups/990BDB1A-4174-4A06-8CA0-72000A029DA1/artboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/990BDB1A-4174-4A06-8CA0-72000A029DA1/artboard.png -------------------------------------------------------------------------------- /resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/39B0009B-057A-4689-9E0A-82CD45EF5C67@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/39B0009B-057A-4689-9E0A-82CD45EF5C67@1x.png -------------------------------------------------------------------------------- /resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/39B0009B-057A-4689-9E0A-82CD45EF5C67@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/39B0009B-057A-4689-9E0A-82CD45EF5C67@2x.png -------------------------------------------------------------------------------- /resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/74ED0CD5-1EA5-4293-91E5-C1F16FDB3F7A@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/74ED0CD5-1EA5-4293-91E5-C1F16FDB3F7A@1x.png -------------------------------------------------------------------------------- /resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/74ED0CD5-1EA5-4293-91E5-C1F16FDB3F7A@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/74ED0CD5-1EA5-4293-91E5-C1F16FDB3F7A@2x.png -------------------------------------------------------------------------------- /resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/9F33BDC4-FDD7-4E42-BA8B-8E138B52953E@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/9F33BDC4-FDD7-4E42-BA8B-8E138B52953E@1x.png -------------------------------------------------------------------------------- /resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/9F33BDC4-FDD7-4E42-BA8B-8E138B52953E@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/9F33BDC4-FDD7-4E42-BA8B-8E138B52953E@2x.png -------------------------------------------------------------------------------- /resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/ADE6DC09-F208-4200-A811-6BE22AAE4E5A@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/ADE6DC09-F208-4200-A811-6BE22AAE4E5A@1x.png -------------------------------------------------------------------------------- /resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/ADE6DC09-F208-4200-A811-6BE22AAE4E5A@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/ADE6DC09-F208-4200-A811-6BE22AAE4E5A@2x.png -------------------------------------------------------------------------------- /resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/B14F23E7-A923-4163-8EBF-81477C711806@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/B14F23E7-A923-4163-8EBF-81477C711806@1x.png -------------------------------------------------------------------------------- /resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/B14F23E7-A923-4163-8EBF-81477C711806@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/B14F23E7-A923-4163-8EBF-81477C711806@2x.png -------------------------------------------------------------------------------- /resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/DD96192F-4B5C-4019-89D0-859F3C6811E8@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/DD96192F-4B5C-4019-89D0-859F3C6811E8@1x.png -------------------------------------------------------------------------------- /resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/DD96192F-4B5C-4019-89D0-859F3C6811E8@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/DD96192F-4B5C-4019-89D0-859F3C6811E8@2x.png -------------------------------------------------------------------------------- /resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/artboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/B3DEB190-1925-4395-87C5-07293BF496AF/artboard.png -------------------------------------------------------------------------------- /resumer_mockups/B583A351-005E-4EF2-97DD-F6ABD146321D/731750E0-E421-46AA-B916-8D4A71F0DF83@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/B583A351-005E-4EF2-97DD-F6ABD146321D/731750E0-E421-46AA-B916-8D4A71F0DF83@1x.png -------------------------------------------------------------------------------- /resumer_mockups/B583A351-005E-4EF2-97DD-F6ABD146321D/731750E0-E421-46AA-B916-8D4A71F0DF83@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/B583A351-005E-4EF2-97DD-F6ABD146321D/731750E0-E421-46AA-B916-8D4A71F0DF83@2x.png -------------------------------------------------------------------------------- /resumer_mockups/B583A351-005E-4EF2-97DD-F6ABD146321D/A902F844-52A3-4E0A-85C8-1B6C10161701@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/B583A351-005E-4EF2-97DD-F6ABD146321D/A902F844-52A3-4E0A-85C8-1B6C10161701@1x.png -------------------------------------------------------------------------------- /resumer_mockups/B583A351-005E-4EF2-97DD-F6ABD146321D/A902F844-52A3-4E0A-85C8-1B6C10161701@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/B583A351-005E-4EF2-97DD-F6ABD146321D/A902F844-52A3-4E0A-85C8-1B6C10161701@2x.png -------------------------------------------------------------------------------- /resumer_mockups/B583A351-005E-4EF2-97DD-F6ABD146321D/artboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/B583A351-005E-4EF2-97DD-F6ABD146321D/artboard.png -------------------------------------------------------------------------------- /resumer_mockups/C5262C1F-4EAB-433C-9F6C-AE2DF60C2618/3B849368-DBA2-4C14-AEA2-1D8BCD917FD8@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/C5262C1F-4EAB-433C-9F6C-AE2DF60C2618/3B849368-DBA2-4C14-AEA2-1D8BCD917FD8@1x.png -------------------------------------------------------------------------------- /resumer_mockups/C5262C1F-4EAB-433C-9F6C-AE2DF60C2618/3B849368-DBA2-4C14-AEA2-1D8BCD917FD8@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/C5262C1F-4EAB-433C-9F6C-AE2DF60C2618/3B849368-DBA2-4C14-AEA2-1D8BCD917FD8@2x.png -------------------------------------------------------------------------------- /resumer_mockups/C5262C1F-4EAB-433C-9F6C-AE2DF60C2618/artboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/C5262C1F-4EAB-433C-9F6C-AE2DF60C2618/artboard.png -------------------------------------------------------------------------------- /resumer_mockups/D336D74D-1CC5-46A6-AB44-886858B107DE/2F768C95-2A1F-428A-A610-D0063C56686F@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/D336D74D-1CC5-46A6-AB44-886858B107DE/2F768C95-2A1F-428A-A610-D0063C56686F@1x.png -------------------------------------------------------------------------------- /resumer_mockups/D336D74D-1CC5-46A6-AB44-886858B107DE/2F768C95-2A1F-428A-A610-D0063C56686F@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/D336D74D-1CC5-46A6-AB44-886858B107DE/2F768C95-2A1F-428A-A610-D0063C56686F@2x.png -------------------------------------------------------------------------------- /resumer_mockups/D336D74D-1CC5-46A6-AB44-886858B107DE/artboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/D336D74D-1CC5-46A6-AB44-886858B107DE/artboard.png -------------------------------------------------------------------------------- /resumer_mockups/D9ED567B-592C-41A3-B581-515C4CEFFF4E/1DC64102-A67B-4CF8-BFE3-158062E42E37@1x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/D9ED567B-592C-41A3-B581-515C4CEFFF4E/1DC64102-A67B-4CF8-BFE3-158062E42E37@1x.png -------------------------------------------------------------------------------- /resumer_mockups/D9ED567B-592C-41A3-B581-515C4CEFFF4E/1DC64102-A67B-4CF8-BFE3-158062E42E37@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/D9ED567B-592C-41A3-B581-515C4CEFFF4E/1DC64102-A67B-4CF8-BFE3-158062E42E37@2x.png -------------------------------------------------------------------------------- /resumer_mockups/D9ED567B-592C-41A3-B581-515C4CEFFF4E/artboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/resumer_mockups/D9ED567B-592C-41A3-B581-515C4CEFFF4E/artboard.png -------------------------------------------------------------------------------- /step-1/README.md: -------------------------------------------------------------------------------- 1 | # 如何运行本 demo 2 | 3 | 1. 安装 Node.js 和 NPM 4 | 2. `npm i -g webpack` 5 | 3. `npm i babel-loader babel-core babel-preset-es2015 babel-preset-react` 6 | 4. `webpack` 7 | 5. 打开 page.html 8 | -------------------------------------------------------------------------------- /step-1/app.js: -------------------------------------------------------------------------------- 1 | import bar from './bar'; 2 | 3 | bar(); 4 | -------------------------------------------------------------------------------- /step-1/bar.js: -------------------------------------------------------------------------------- 1 | export default function bar() { 2 | alert('Hello Webpack!') 3 | } 4 | -------------------------------------------------------------------------------- /step-1/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | ... 4 | 5 | 6 | ... 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /step-1/webpack.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | entry: './app.js', 3 | output: { 4 | filename: 'bundle.js' 5 | }, 6 | module: { 7 | loaders:[ 8 | { 9 | test: /\.js[x]?$/, 10 | exclude: /node_modules/, 11 | loader: 'babel-loader?presets[]=es2015&presets[]=react' 12 | }, 13 | ] 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /step-10-resumer/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["es2015", { "modules": false }], 4 | "stage-2" 5 | ], 6 | "plugins": ["transform-runtime"], 7 | "comments": false, 8 | "env": { 9 | "test": { 10 | "plugins": [ "istanbul" ] 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /step-10-resumer/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /step-10-resumer/.eslintignore: -------------------------------------------------------------------------------- 1 | build/*.js 2 | config/*.js 3 | -------------------------------------------------------------------------------- /step-10-resumer/.eslintrc.js: -------------------------------------------------------------------------------- 1 | // http://eslint.org/docs/user-guide/configuring 2 | 3 | module.exports = { 4 | root: true, 5 | parser: 'babel-eslint', 6 | parserOptions: { 7 | sourceType: 'module' 8 | }, 9 | env: { 10 | browser: true, 11 | }, 12 | // https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style 13 | extends: 'standard', 14 | // required to lint *.vue files 15 | plugins: [ 16 | 'html' 17 | ], 18 | // add your custom rules here 19 | 'rules': { 20 | // allow paren-less arrow functions 21 | 'arrow-parens': 0, 22 | // allow async-await 23 | 'generator-star-spacing': 0, 24 | // allow debugger during development 25 | 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /step-10-resumer/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | npm-debug.log 4 | test/unit/coverage 5 | log 6 | -------------------------------------------------------------------------------- /step-10-resumer/README.md: -------------------------------------------------------------------------------- 1 | # resumer 2 | 3 | > A Vue.js project 4 | 5 | ## Build Setup 6 | 7 | ``` bash 8 | # install dependencies 9 | npm install 10 | 11 | # serve with hot reload at localhost:8080 12 | npm run dev 13 | 14 | # build for production with minification 15 | npm run build 16 | 17 | # build for production and view the bundle analyzer report 18 | npm run build --report 19 | 20 | # run unit tests 21 | npm run unit 22 | 23 | # run all tests 24 | npm test 25 | ``` 26 | 27 | For detailed explanation on how things work, checkout the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). 28 | -------------------------------------------------------------------------------- /step-10-resumer/build/build.js: -------------------------------------------------------------------------------- 1 | // https://github.com/shelljs/shelljs 2 | require('./check-versions')() 3 | 4 | process.env.NODE_ENV = 'production' 5 | 6 | var ora = require('ora') 7 | var path = require('path') 8 | var chalk = require('chalk') 9 | var shell = require('shelljs') 10 | var webpack = require('webpack') 11 | var config = require('../config') 12 | var webpackConfig = require('./webpack.prod.conf') 13 | 14 | var spinner = ora('building for production...') 15 | spinner.start() 16 | 17 | var assetsPath = path.join(config.build.assetsRoot, config.build.assetsSubDirectory) 18 | shell.rm('-rf', assetsPath) 19 | shell.mkdir('-p', assetsPath) 20 | shell.config.silent = true 21 | shell.cp('-R', 'static/*', assetsPath) 22 | shell.config.silent = false 23 | 24 | webpack(webpackConfig, function (err, stats) { 25 | spinner.stop() 26 | if (err) throw err 27 | process.stdout.write(stats.toString({ 28 | colors: true, 29 | modules: false, 30 | children: false, 31 | chunks: false, 32 | chunkModules: false 33 | }) + '\n\n') 34 | 35 | console.log(chalk.cyan(' Build complete.\n')) 36 | console.log(chalk.yellow( 37 | ' Tip: built files are meant to be served over an HTTP server.\n' + 38 | ' Opening index.html over file:// won\'t work.\n' 39 | )) 40 | }) 41 | -------------------------------------------------------------------------------- /step-10-resumer/build/check-versions.js: -------------------------------------------------------------------------------- 1 | var chalk = require('chalk') 2 | var semver = require('semver') 3 | var packageConfig = require('../package.json') 4 | 5 | function exec (cmd) { 6 | return require('child_process').execSync(cmd).toString().trim() 7 | } 8 | 9 | var versionRequirements = [ 10 | { 11 | name: 'node', 12 | currentVersion: semver.clean(process.version), 13 | versionRequirement: packageConfig.engines.node 14 | }, 15 | { 16 | name: 'npm', 17 | currentVersion: exec('npm --version'), 18 | versionRequirement: packageConfig.engines.npm 19 | } 20 | ] 21 | 22 | module.exports = function () { 23 | var warnings = [] 24 | for (var i = 0; i < versionRequirements.length; i++) { 25 | var mod = versionRequirements[i] 26 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 27 | warnings.push(mod.name + ': ' + 28 | chalk.red(mod.currentVersion) + ' should be ' + 29 | chalk.green(mod.versionRequirement) 30 | ) 31 | } 32 | } 33 | 34 | if (warnings.length) { 35 | console.log('') 36 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 37 | console.log() 38 | for (var i = 0; i < warnings.length; i++) { 39 | var warning = warnings[i] 40 | console.log(' ' + warning) 41 | } 42 | console.log() 43 | process.exit(1) 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /step-10-resumer/build/dev-client.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | require('eventsource-polyfill') 3 | var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') 4 | 5 | hotClient.subscribe(function (event) { 6 | if (event.action === 'reload') { 7 | window.location.reload() 8 | } 9 | }) 10 | -------------------------------------------------------------------------------- /step-10-resumer/build/svg-symbols.js: -------------------------------------------------------------------------------- 1 | // 这是一个 Node.js 脚本,并没有被 webpack 打包,所以我们不能使用 import path from 'path' 2 | const path = require('path') // 路径工具 3 | const fs = require('fs') // 文件系统工具 4 | 5 | let svgFolder = path.join(__dirname, '../static/svg_icons/') 6 | let jsPath = path.join(__dirname, '../src/assets/icons.js') 7 | 8 | let svgFiles = fs.readdirSync(svgFolder) // [ 'add.svg', 'book.svg', 'cup.svg', 'heart.svg', 'id.svg', 'phone.svg', 'work.svg' ] 9 | 10 | let symbols = svgFiles.map(function (filename) { 11 | let absolutePath = path.join(svgFolder, filename) 12 | let fileContent = fs.readFileSync(absolutePath).toString('utf8') 13 | let name = path.basename(filename, '.svg') 14 | return fileContent 15 | .replace(/<\?.+?\?>/g, '') // 去掉 16 | .replace(//g, '') // 去掉 17 | .replace(/version=".+?"/g, '') 18 | .replace(/xmlns=".+?"/g, '') 19 | .replace(/class=".+?"/g, '') 20 | .replace(/fill=".+?"/g, '') 21 | .replace(/stroke=".+?"/g, '') 22 | .replace(/\`\n` 28 | 29 | fs.writeFileSync(jsPath, js, {flag: 'w'}) -------------------------------------------------------------------------------- /step-10-resumer/build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var config = require('../config') 3 | var isProduction = process.env.NODE_ENV === 'production' 4 | 5 | module.exports = { 6 | loaders: utils.cssLoaders({ 7 | sourceMap: isProduction 8 | ? config.build.productionSourceMap 9 | : config.dev.cssSourceMap, 10 | extract: isProduction 11 | }), 12 | postcss: [ 13 | require('autoprefixer')({ 14 | browsers: ['last 2 versions'] 15 | }) 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /step-10-resumer/build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var webpack = require('webpack') 3 | var config = require('../config') 4 | var merge = require('webpack-merge') 5 | var baseWebpackConfig = require('./webpack.base.conf') 6 | var HtmlWebpackPlugin = require('html-webpack-plugin') 7 | var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 8 | 9 | // add hot-reload related code to entry chunks 10 | Object.keys(baseWebpackConfig.entry).forEach(function (name) { 11 | baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name]) 12 | }) 13 | 14 | module.exports = merge(baseWebpackConfig, { 15 | module: { 16 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap }) 17 | }, 18 | // cheap-module-eval-source-map is faster for development 19 | devtool: '#source-map', 20 | plugins: [ 21 | new webpack.DefinePlugin({ 22 | 'process.env': config.dev.env 23 | }), 24 | // https://github.com/glenjamin/webpack-hot-middleware#installation--usage 25 | new webpack.HotModuleReplacementPlugin(), 26 | new webpack.NoEmitOnErrorsPlugin(), 27 | // https://github.com/ampedandwired/html-webpack-plugin 28 | new HtmlWebpackPlugin({ 29 | filename: 'index.html', 30 | template: 'index.html', 31 | inject: true 32 | }), 33 | new FriendlyErrorsPlugin() 34 | ] 35 | }) 36 | -------------------------------------------------------------------------------- /step-10-resumer/build/webpack.test.conf.js: -------------------------------------------------------------------------------- 1 | // This is the webpack config used for unit tests. 2 | 3 | var utils = require('./utils') 4 | var webpack = require('webpack') 5 | var merge = require('webpack-merge') 6 | var baseConfig = require('./webpack.base.conf') 7 | 8 | var webpackConfig = merge(baseConfig, { 9 | // use inline sourcemap for karma-sourcemap-loader 10 | module: { 11 | rules: utils.styleLoaders() 12 | }, 13 | devtool: '#inline-source-map', 14 | plugins: [ 15 | new webpack.DefinePlugin({ 16 | 'process.env': require('../config/test.env') 17 | }) 18 | ] 19 | }) 20 | 21 | // no need for app entry during tests 22 | delete webpackConfig.entry 23 | 24 | module.exports = webpackConfig 25 | -------------------------------------------------------------------------------- /step-10-resumer/config/dev.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var prodEnv = require('./prod.env') 3 | 4 | module.exports = merge(prodEnv, { 5 | NODE_ENV: '"development"' 6 | }) 7 | -------------------------------------------------------------------------------- /step-10-resumer/config/index.js: -------------------------------------------------------------------------------- 1 | // see http://vuejs-templates.github.io/webpack for documentation. 2 | var path = require('path') 3 | 4 | module.exports = { 5 | build: { 6 | env: require('./prod.env'), 7 | index: path.resolve(__dirname, '../dist/index.html'), 8 | assetsRoot: path.resolve(__dirname, '../dist'), 9 | assetsSubDirectory: 'static', 10 | assetsPublicPath: '/jrg-project-5/step-9-resumer/dist', 11 | productionSourceMap: true, 12 | // Gzip off by default as many popular static hosts such as 13 | // Surge or Netlify already gzip all static assets for you. 14 | // Before setting to `true`, make sure to: 15 | // npm install --save-dev compression-webpack-plugin 16 | productionGzip: false, 17 | productionGzipExtensions: ['js', 'css'], 18 | // Run the build command with an extra argument to 19 | // View the bundle analyzer report after build finishes: 20 | // `npm run build --report` 21 | // Set to `true` or `false` to always turn it on or off 22 | bundleAnalyzerReport: process.env.npm_config_report 23 | }, 24 | dev: { 25 | env: require('./dev.env'), 26 | port: 8080, 27 | autoOpenBrowser: true, 28 | assetsSubDirectory: 'static', 29 | assetsPublicPath: '/', 30 | proxyTable: {}, 31 | // CSS Sourcemaps off by default because relative paths are "buggy" 32 | // with this option, according to the CSS-Loader README 33 | // (https://github.com/webpack/css-loader#sourcemaps) 34 | // In our experience, they generally work as expected, 35 | // just be aware of this issue when enabling this option. 36 | cssSourceMap: false 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /step-10-resumer/config/prod.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NODE_ENV: '"production"' 3 | } 4 | -------------------------------------------------------------------------------- /step-10-resumer/config/test.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var devEnv = require('./dev.env') 3 | 4 | module.exports = merge(devEnv, { 5 | NODE_ENV: '"testing"' 6 | }) 7 | -------------------------------------------------------------------------------- /step-10-resumer/dist/index.html: -------------------------------------------------------------------------------- 1 | resumer
-------------------------------------------------------------------------------- /step-10-resumer/dist/static/js/manifest.40bd4a013aec4fcf407c.js: -------------------------------------------------------------------------------- 1 | !function(e){function r(t){if(n[t])return n[t].exports;var o=n[t]={i:t,l:!1,exports:{}};return e[t].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var t=window.webpackJsonp;window.webpackJsonp=function(n,c,i){for(var u,a,s,f=0,l=[];f -------------------------------------------------------------------------------- /step-10-resumer/dist/static/svg_icons/heart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /step-10-resumer/dist/static/svg_icons/id.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /step-10-resumer/dist/static/svg_icons/work.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /step-10-resumer/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | resumer 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /step-10-resumer/src/App.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | 43 | 44 | 47 | -------------------------------------------------------------------------------- /step-10-resumer/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/step-10-resumer/src/assets/logo.png -------------------------------------------------------------------------------- /step-10-resumer/src/assets/reset.css: -------------------------------------------------------------------------------- 1 | *{margin:0; padding:0; box-sizing: border-box; } 2 | *::after, *::before{box-sizing:border-box;} 3 | -------------------------------------------------------------------------------- /step-10-resumer/src/assets/ui.scss: -------------------------------------------------------------------------------- 1 | svg.icon{ 2 | height: 1em; 3 | width: 1em; 4 | fill: currentColor; 5 | vertical-align: -0.1em; 6 | font-size:16px; 7 | } 8 | .button{ 9 | width:72px; 10 | height:32px; 11 | border: none; 12 | cursor: pointer; 13 | font-size: 18px; // 设计稿上是 20px,看起来太大,就改成 18px 了 14 | background:#ddd; 15 | color: #222; 16 | text-decoration: none; 17 | display: inline-flex; 18 | justify-content: center; 19 | align-items: center; 20 | vertical-align: middle; 21 | &:hover{ 22 | box-shadow: 1px 1px 1px hsla(0, 0, 0, 0.50); 23 | } 24 | &.primary{ 25 | background:#02af5f; 26 | color: white; 27 | } 28 | &.small { 29 | height: 24px; 30 | font-size: inherit; 31 | width: auto; 32 | padding-left: 1em; 33 | padding-right: 1em; 34 | } 35 | 36 | } 37 | .page{ 38 | height: 100vh; 39 | display: flex; 40 | flex-direction: column; 41 | background: #EAEBEC; 42 | >main{ 43 | flex-grow: 1; 44 | } 45 | >main{ 46 | min-width: 1024px; 47 | max-width: 1440px; 48 | margin-top: 16px; 49 | margin-bottom: 16px; 50 | display: flex; 51 | justify-content: space-between; 52 | padding: 0 16px; 53 | width: 100%; /* 试试不加这句会怎样 */ 54 | align-self: center; 55 | } 56 | } 57 | -------------------------------------------------------------------------------- /step-10-resumer/src/components/MyDialog.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 26 | 27 | 54 | -------------------------------------------------------------------------------- /step-10-resumer/src/components/Preview.vue: -------------------------------------------------------------------------------- 1 | 6 | 7 | -------------------------------------------------------------------------------- /step-10-resumer/src/components/Resume.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 28 | 29 | 40 | -------------------------------------------------------------------------------- /step-10-resumer/src/components/SignInForm.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 49 | -------------------------------------------------------------------------------- /step-10-resumer/src/components/SignUpForm.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 54 | -------------------------------------------------------------------------------- /step-10-resumer/src/i18n/index.js: -------------------------------------------------------------------------------- 1 | export default { 2 | en: { 3 | resume: { 4 | profile: { 5 | name: 'Name', 6 | city: 'City', 7 | title: 'Job Title', 8 | birthday: 'Birthday' 9 | } 10 | } 11 | }, 12 | zh_CN: { 13 | resume: { 14 | profile: { 15 | name: '名称', 16 | city: '城市', 17 | title: '职位', 18 | birthday: '生日' 19 | }, 20 | workHistory: { 21 | _: '工作经历', 22 | company: '工作单位', 23 | details: '详情' 24 | }, 25 | education: { 26 | _: '教育经历', 27 | school: '毕业院校', 28 | details: '详情' 29 | }, 30 | projects: { 31 | _: '项目经历', 32 | name: '项目名称', 33 | details: '项目介绍' 34 | }, 35 | awards: { 36 | _: '获奖经历', 37 | name: '奖项名称', 38 | details: '详情' 39 | }, 40 | contacts: { 41 | _: '联系方式', 42 | contact: '途径', 43 | content: '内容' 44 | } 45 | } 46 | } 47 | } 48 | 49 | -------------------------------------------------------------------------------- /step-10-resumer/src/lib/getAVUser.js: -------------------------------------------------------------------------------- 1 | import AV from '../lib/leancloud' 2 | export default function(user){ 3 | var {id, attributes:{username}} = user || AV.User.current() || {attributes:{}} 4 | return { 5 | id: id || '', 6 | username: username|| '' 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /step-10-resumer/src/lib/getErrorMessage.js: -------------------------------------------------------------------------------- 1 | const map = { 2 | 202: '用户名已被占用', 3 | 210: '用户名和密码不匹配', 4 | 211: '找不到该用户', 5 | 217: '无效的用户名', 6 | unknown: '请求失败,请稍后再试' 7 | } 8 | export default function({code}){ 9 | return map[code] || map.unknown 10 | } 11 | -------------------------------------------------------------------------------- /step-10-resumer/src/lib/leancloud.js: -------------------------------------------------------------------------------- 1 | import AV from 'leancloud-storage' 2 | 3 | var APP_ID = 'dMCAfvAY0m9PAzthjX9xXWPH-gzGzoHsz'; 4 | var APP_KEY = 'mIOLcTqescfST8fKTLjlBuyR'; 5 | AV.init({ 6 | appId: APP_ID, 7 | appKey: APP_KEY 8 | }); 9 | 10 | export default AV 11 | -------------------------------------------------------------------------------- /step-10-resumer/src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from 'vue' 4 | import App from './App' 5 | import router from './router' 6 | import VueI18n from 'vue-i18n' 7 | import i18n from './i18n/' 8 | import store from './store/index' 9 | 10 | var locales = i18n 11 | 12 | Vue.use(VueI18n) 13 | Vue.config.lang = 'zh_CN' 14 | 15 | Object.keys(locales).forEach(function (lang) { 16 | Vue.locale(lang, locales[lang]) 17 | }) 18 | 19 | /* eslint-disable no-new */ 20 | new Vue({ 21 | el: '#app', 22 | router, 23 | store, 24 | template: '', 25 | components: { App } 26 | }) 27 | -------------------------------------------------------------------------------- /step-10-resumer/src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | 4 | Vue.use(Router) 5 | 6 | import Resume from 'components/Resume' 7 | import Preview from 'components/Preview' 8 | 9 | export default new Router({ 10 | routes: [ 11 | { 12 | path: '/', 13 | name: 'Resume', 14 | component: Resume 15 | }, 16 | { 17 | path: '/preview', 18 | name: 'Preview', 19 | component: Preview 20 | } 21 | ] 22 | }) 23 | -------------------------------------------------------------------------------- /step-10-resumer/static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/step-10-resumer/static/.gitkeep -------------------------------------------------------------------------------- /step-10-resumer/static/svg_icons/book.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /step-10-resumer/static/svg_icons/heart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /step-10-resumer/static/svg_icons/id.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /step-10-resumer/static/svg_icons/work.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /step-10-resumer/test/unit/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "mocha": true 4 | }, 5 | "globals": { 6 | "expect": true, 7 | "sinon": true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /step-10-resumer/test/unit/index.js: -------------------------------------------------------------------------------- 1 | // Polyfill fn.bind() for PhantomJS 2 | /* eslint-disable no-extend-native */ 3 | Function.prototype.bind = require('function-bind') 4 | 5 | // require all test files (files that ends with .spec.js) 6 | const testsContext = require.context('./specs', true, /\.spec$/) 7 | testsContext.keys().forEach(testsContext) 8 | 9 | // require all src files except main.js for coverage. 10 | // you can also change this to match only the subset of files that 11 | // you want coverage for. 12 | const srcContext = require.context('src', true, /^\.\/(?!main(\.js)?$)/) 13 | srcContext.keys().forEach(srcContext) 14 | -------------------------------------------------------------------------------- /step-10-resumer/test/unit/karma.conf.js: -------------------------------------------------------------------------------- 1 | // This is a karma config file. For more details see 2 | // http://karma-runner.github.io/0.13/config/configuration-file.html 3 | // we are also using it with karma-webpack 4 | // https://github.com/webpack/karma-webpack 5 | 6 | var webpackConfig = require('../../build/webpack.test.conf') 7 | 8 | module.exports = function (config) { 9 | config.set({ 10 | // to run in additional browsers: 11 | // 1. install corresponding karma launcher 12 | // http://karma-runner.github.io/0.13/config/browsers.html 13 | // 2. add it to the `browsers` array below. 14 | browsers: ['PhantomJS'], 15 | frameworks: ['mocha', 'sinon-chai'], 16 | reporters: ['spec', 'coverage'], 17 | files: ['./index.js'], 18 | preprocessors: { 19 | './index.js': ['webpack', 'sourcemap'] 20 | }, 21 | webpack: webpackConfig, 22 | webpackMiddleware: { 23 | noInfo: true 24 | }, 25 | coverageReporter: { 26 | dir: './coverage', 27 | reporters: [ 28 | { type: 'lcov', subdir: '.' }, 29 | { type: 'text-summary' } 30 | ] 31 | } 32 | }) 33 | } 34 | -------------------------------------------------------------------------------- /step-10-resumer/test/unit/specs/Hello.spec.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Hello from 'src/components/Hello' 3 | 4 | describe('Hello.vue', () => { 5 | it('should render correct contents', () => { 6 | const vm = new Vue({ 7 | el: document.createElement('div'), 8 | render: (h) => h(Hello) 9 | }) 10 | expect(vm.$el.querySelector('.hello h1').textContent) 11 | .to.equal('Welcome to Your Vue.js App') 12 | }) 13 | }) 14 | -------------------------------------------------------------------------------- /step-2/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /step-2/README.md: -------------------------------------------------------------------------------- 1 | # 如何运行本 demo 2 | 3 | 1. 安装 Node.js 和 NPM 4 | 3. `npm i` 5 | 4. `webpack` 6 | 5. 打开 page.html 7 | -------------------------------------------------------------------------------- /step-2/app.js: -------------------------------------------------------------------------------- 1 | import bar from './bar' 2 | import Vue from 'vue' 3 | 4 | var app = new Vue({ 5 | el: '#app', 6 | data: { 7 | message: 'Hello Frank!' 8 | } 9 | }) 10 | -------------------------------------------------------------------------------- /step-2/bar.js: -------------------------------------------------------------------------------- 1 | export default function bar() { 2 | alert('Hello Webpack!') 3 | } 4 | -------------------------------------------------------------------------------- /step-2/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "step-2", 3 | "version": "1.0.0", 4 | "description": "A vue.js demo", 5 | "main": "app.js", 6 | "dependencies": { 7 | "babel-core": "^6.21.0", 8 | "babel-loader": "^6.2.10", 9 | "babel-preset-es2015": "^6.18.0", 10 | "babel-preset-react": "^6.16.0", 11 | "vue": "^2.1.8", 12 | "webpack": "^1.14.0" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "git+https://github.com/FrankFang/xxx.git" 17 | }, 18 | "devDependencies": {}, 19 | "scripts": { 20 | "test": "echo \"Error: no test specified\" && exit 1" 21 | }, 22 | "author": "", 23 | "license": "ISC" 24 | } 25 | -------------------------------------------------------------------------------- /step-2/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 |
6 | {{ message }} 7 |
8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /step-2/webpack.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | entry: './app.js', 3 | output: { 4 | filename: 'bundle.js' 5 | }, 6 | module: { 7 | loaders:[ 8 | { 9 | test: /\.js[x]?$/, 10 | exclude: /node_modules/, 11 | loader: 'babel-loader?presets[]=es2015&presets[]=react' 12 | }, 13 | ] 14 | }, 15 | resolve: { 16 | alias: { 17 | 'vue$': 'vue/dist/vue.common.js' 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /step-3/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /step-3/README.md: -------------------------------------------------------------------------------- 1 | # 如何运行本 demo 2 | 3 | 1. 安装 Node.js 和 NPM 4 | 3. `npm i` 5 | 4. `webpack` 6 | 5. 打开 page.html 7 | 8 | # 预览 9 | 10 | https://jirengu-inc.github.io/jrg-project-5/step-3/page.html 11 | -------------------------------------------------------------------------------- /step-3/app.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | 3 | var app = new Vue({ 4 | el: '#app', 5 | data: { 6 | newTodo: '', 7 | todoList: [] 8 | }, 9 | created: function(){ 10 | // onbeforeunload文档:https://developer.mozilla.org/zh-CN/docs/Web/API/Window/onbeforeunload 11 | window.onbeforeunload = ()=>{ 12 | let dataString = JSON.stringify(this.todoList) // JSON 文档: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON 13 | window.localStorage.setItem('myTodos', dataString) // 看文档https://developer.mozilla.org/zh-CN/docs/Web/API/Window/localStorage 14 | } 15 | 16 | let oldDataString = window.localStorage.getItem('myTodos') 17 | let oldData = JSON.parse(oldDataString) 18 | this.todoList = oldData || [] 19 | 20 | }, 21 | methods: { 22 | addTodo: function(){ 23 | this.todoList.push({ 24 | title: this.newTodo, 25 | createdAt: new Date(), 26 | done: false // 添加一个 done 属性 27 | }) 28 | this.newTodo = '' 29 | }, 30 | removeTodo: function(todo){ 31 | let index = this.todoList.indexOf(todo) // Array.prototype.indexOf 是 ES 5 新加的 API 32 | this.todoList.splice(index,1) // 不懂 splice?赶紧看 MDN 文档! 33 | } 34 | } 35 | }) 36 | -------------------------------------------------------------------------------- /step-3/bar.js: -------------------------------------------------------------------------------- 1 | export default function bar() { 2 | alert('Hello Webpack!') 3 | } 4 | -------------------------------------------------------------------------------- /step-3/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "step-2", 3 | "version": "1.0.0", 4 | "description": "A vue.js demo", 5 | "main": "app.js", 6 | "dependencies": { 7 | "babel-core": "^6.21.0", 8 | "babel-loader": "^6.2.10", 9 | "babel-preset-es2015": "^6.18.0", 10 | "babel-preset-react": "^6.16.0", 11 | "vue": "^2.1.8", 12 | "webpack": "^1.14.0" 13 | }, 14 | "repository": { 15 | "type": "git", 16 | "url": "git+https://github.com/FrankFang/xxx.git" 17 | }, 18 | "devDependencies": {}, 19 | "scripts": { 20 | "test": "echo \"Error: no test specified\" && exit 1" 21 | }, 22 | "author": "", 23 | "license": "ISC" 24 | } 25 | -------------------------------------------------------------------------------- /step-3/page.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 |
7 |
8 | 9 |
10 |
    11 |
  1. 12 | {{ todo.title }} 13 | 14 | 已完成 15 | 未完成 16 | 17 | 18 |
  2. 19 |
20 |
21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /step-3/webpack.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | entry: './app.js', 3 | output: { 4 | filename: 'bundle.js' 5 | }, 6 | module: { 7 | loaders:[ 8 | { 9 | test: /\.js[x]?$/, 10 | exclude: /node_modules/, 11 | loader: 'babel-loader?presets[]=es2015' 12 | }, 13 | ] 14 | }, 15 | resolve: { 16 | alias: { 17 | 'vue$': 'vue/dist/vue.common.js' 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /step-4/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /step-4/README.md: -------------------------------------------------------------------------------- 1 | # 如何运行本 demo 2 | 3 | 1. 安装 Node.js 和 NPM 4 | 3. `npm i` 5 | 4. `webpack` 6 | 5. 打开 page.html 7 | 8 | # 预览 9 | 10 | https://jirengu-inc.github.io/jrg-project-5/step-3/page.html 11 | -------------------------------------------------------------------------------- /step-4/bar.js: -------------------------------------------------------------------------------- 1 | export default function bar() { 2 | alert('Hello Webpack!') 3 | } 4 | -------------------------------------------------------------------------------- /step-4/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "step-2", 3 | "version": "1.0.0", 4 | "description": "A vue.js demo", 5 | "main": "app.js", 6 | "dependencies": { 7 | "babel-core": "^6.21.0", 8 | "babel-loader": "^6.2.10", 9 | "babel-preset-es2015": "^6.18.0", 10 | "babel-preset-react": "^6.16.0", 11 | "leancloud-storage": "^2.0.1", 12 | "vue": "^2.1.8", 13 | "webpack": "^1.14.0" 14 | }, 15 | "repository": { 16 | "type": "git", 17 | "url": "git+https://github.com/FrankFang/xxx.git" 18 | }, 19 | "devDependencies": {}, 20 | "scripts": { 21 | "test": "echo \"Error: no test specified\" && exit 1" 22 | }, 23 | "author": "", 24 | "license": "ISC" 25 | } 26 | -------------------------------------------------------------------------------- /step-4/webpack.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | entry: './app.js', 3 | output: { 4 | filename: 'bundle.js' 5 | }, 6 | module: { 7 | loaders:[ 8 | { 9 | test: /\.js[x]?$/, 10 | exclude: /node_modules/, 11 | loader: 'babel-loader?presets[]=es2015' 12 | }, 13 | ] 14 | }, 15 | resolve: { 16 | alias: { 17 | 'vue$': 'vue/dist/vue.common.js' 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /step-5/.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | -------------------------------------------------------------------------------- /step-5/README.md: -------------------------------------------------------------------------------- 1 | # 如何运行本 demo 2 | 3 | 1. 安装 Node.js 和 NPM 4 | 3. `npm i` 5 | 4. `webpack` 6 | 5. 打开 page.html 7 | 8 | # 预览 9 | 10 | https://jirengu-inc.github.io/jrg-project-5/step-3/page.html 11 | -------------------------------------------------------------------------------- /step-5/bar.js: -------------------------------------------------------------------------------- 1 | export default function bar() { 2 | alert('Hello Webpack!') 3 | } 4 | -------------------------------------------------------------------------------- /step-5/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "step-2", 3 | "version": "1.0.0", 4 | "description": "A vue.js demo", 5 | "main": "app.js", 6 | "dependencies": { 7 | "babel-core": "^6.21.0", 8 | "babel-loader": "^6.2.10", 9 | "babel-preset-es2015": "^6.18.0", 10 | "babel-preset-react": "^6.16.0", 11 | "leancloud-storage": "^2.0.1", 12 | "vue": "^2.1.8", 13 | "webpack": "^1.14.0" 14 | }, 15 | "repository": { 16 | "type": "git", 17 | "url": "git+https://github.com/FrankFang/xxx.git" 18 | }, 19 | "devDependencies": {}, 20 | "scripts": { 21 | "test": "echo \"Error: no test specified\" && exit 1" 22 | }, 23 | "author": "", 24 | "license": "ISC" 25 | } 26 | -------------------------------------------------------------------------------- /step-5/webpack.config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | entry: './app.js', 3 | output: { 4 | filename: 'bundle.js' 5 | }, 6 | module: { 7 | loaders:[ 8 | { 9 | test: /\.js[x]?$/, 10 | exclude: /node_modules/, 11 | loader: 'babel-loader?presets[]=es2015' 12 | }, 13 | ] 14 | }, 15 | resolve: { 16 | alias: { 17 | 'vue$': 'vue/dist/vue.common.js' 18 | } 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /step-8-resumer/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["es2015", { "modules": false }], 4 | "stage-2" 5 | ], 6 | "plugins": ["transform-runtime"], 7 | "comments": false, 8 | "env": { 9 | "test": { 10 | "plugins": [ "istanbul" ] 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /step-8-resumer/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /step-8-resumer/.eslintignore: -------------------------------------------------------------------------------- 1 | build/*.js 2 | config/*.js 3 | -------------------------------------------------------------------------------- /step-8-resumer/.eslintrc.js: -------------------------------------------------------------------------------- 1 | // http://eslint.org/docs/user-guide/configuring 2 | 3 | module.exports = { 4 | root: true, 5 | parser: 'babel-eslint', 6 | parserOptions: { 7 | sourceType: 'module' 8 | }, 9 | env: { 10 | browser: true, 11 | }, 12 | // https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style 13 | extends: 'standard', 14 | // required to lint *.vue files 15 | plugins: [ 16 | 'html' 17 | ], 18 | // add your custom rules here 19 | 'rules': { 20 | // allow paren-less arrow functions 21 | 'arrow-parens': 0, 22 | // allow async-await 23 | 'generator-star-spacing': 0, 24 | // allow debugger during development 25 | 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /step-8-resumer/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | npm-debug.log 4 | test/unit/coverage 5 | -------------------------------------------------------------------------------- /step-8-resumer/README.md: -------------------------------------------------------------------------------- 1 | # resumer 2 | 3 | > A Vue.js project 4 | 5 | ## Build Setup 6 | 7 | ``` bash 8 | # install dependencies 9 | npm install 10 | 11 | # serve with hot reload at localhost:8080 12 | npm run dev 13 | 14 | # build for production with minification 15 | npm run build 16 | 17 | # build for production and view the bundle analyzer report 18 | npm run build --report 19 | 20 | # run unit tests 21 | npm run unit 22 | 23 | # run all tests 24 | npm test 25 | ``` 26 | 27 | For detailed explanation on how things work, checkout the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). 28 | -------------------------------------------------------------------------------- /step-8-resumer/build/build.js: -------------------------------------------------------------------------------- 1 | // https://github.com/shelljs/shelljs 2 | require('./check-versions')() 3 | 4 | process.env.NODE_ENV = 'production' 5 | 6 | var ora = require('ora') 7 | var path = require('path') 8 | var chalk = require('chalk') 9 | var shell = require('shelljs') 10 | var webpack = require('webpack') 11 | var config = require('../config') 12 | var webpackConfig = require('./webpack.prod.conf') 13 | 14 | var spinner = ora('building for production...') 15 | spinner.start() 16 | 17 | var assetsPath = path.join(config.build.assetsRoot, config.build.assetsSubDirectory) 18 | shell.rm('-rf', assetsPath) 19 | shell.mkdir('-p', assetsPath) 20 | shell.config.silent = true 21 | shell.cp('-R', 'static/*', assetsPath) 22 | shell.config.silent = false 23 | 24 | webpack(webpackConfig, function (err, stats) { 25 | spinner.stop() 26 | if (err) throw err 27 | process.stdout.write(stats.toString({ 28 | colors: true, 29 | modules: false, 30 | children: false, 31 | chunks: false, 32 | chunkModules: false 33 | }) + '\n\n') 34 | 35 | console.log(chalk.cyan(' Build complete.\n')) 36 | console.log(chalk.yellow( 37 | ' Tip: built files are meant to be served over an HTTP server.\n' + 38 | ' Opening index.html over file:// won\'t work.\n' 39 | )) 40 | }) 41 | -------------------------------------------------------------------------------- /step-8-resumer/build/check-versions.js: -------------------------------------------------------------------------------- 1 | var chalk = require('chalk') 2 | var semver = require('semver') 3 | var packageConfig = require('../package.json') 4 | 5 | function exec (cmd) { 6 | return require('child_process').execSync(cmd).toString().trim() 7 | } 8 | 9 | var versionRequirements = [ 10 | { 11 | name: 'node', 12 | currentVersion: semver.clean(process.version), 13 | versionRequirement: packageConfig.engines.node 14 | }, 15 | { 16 | name: 'npm', 17 | currentVersion: exec('npm --version'), 18 | versionRequirement: packageConfig.engines.npm 19 | } 20 | ] 21 | 22 | module.exports = function () { 23 | var warnings = [] 24 | for (var i = 0; i < versionRequirements.length; i++) { 25 | var mod = versionRequirements[i] 26 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 27 | warnings.push(mod.name + ': ' + 28 | chalk.red(mod.currentVersion) + ' should be ' + 29 | chalk.green(mod.versionRequirement) 30 | ) 31 | } 32 | } 33 | 34 | if (warnings.length) { 35 | console.log('') 36 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 37 | console.log() 38 | for (var i = 0; i < warnings.length; i++) { 39 | var warning = warnings[i] 40 | console.log(' ' + warning) 41 | } 42 | console.log() 43 | process.exit(1) 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /step-8-resumer/build/dev-client.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | require('eventsource-polyfill') 3 | var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') 4 | 5 | hotClient.subscribe(function (event) { 6 | if (event.action === 'reload') { 7 | window.location.reload() 8 | } 9 | }) 10 | -------------------------------------------------------------------------------- /step-8-resumer/build/svg-symbols.js: -------------------------------------------------------------------------------- 1 | // 这是一个 Node.js 脚本,并没有被 webpack 打包,所以我们不能使用 import path from 'path' 2 | const path = require('path') // 路径工具 3 | const fs = require('fs') // 文件系统工具 4 | 5 | let svgFolder = path.join(__dirname, '../static/svg_icons/') 6 | let jsPath = path.join(__dirname, '../src/assets/icons.js') 7 | 8 | let svgFiles = fs.readdirSync(svgFolder) // [ 'add.svg', 'book.svg', 'cup.svg', 'heart.svg', 'id.svg', 'phone.svg', 'work.svg' ] 9 | 10 | let symbols = svgFiles.map(function (filename) { 11 | let absolutePath = path.join(svgFolder, filename) 12 | let fileContent = fs.readFileSync(absolutePath).toString('utf8') 13 | let name = path.basename(filename, '.svg') 14 | return fileContent 15 | .replace(/<\?.+?\?>/g, '') // 去掉 16 | .replace(//g, '') // 去掉 17 | .replace(/version=".+?"/g, '') 18 | .replace(/xmlns=".+?"/g, '') 19 | .replace(/class=".+?"/g, '') 20 | .replace(/fill=".+?"/g, '') 21 | .replace(/stroke=".+?"/g, '') 22 | .replace(/\`\n` 28 | 29 | fs.writeFileSync(jsPath, js, {flag: 'w'}) -------------------------------------------------------------------------------- /step-8-resumer/build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var config = require('../config') 3 | var isProduction = process.env.NODE_ENV === 'production' 4 | 5 | module.exports = { 6 | loaders: utils.cssLoaders({ 7 | sourceMap: isProduction 8 | ? config.build.productionSourceMap 9 | : config.dev.cssSourceMap, 10 | extract: isProduction 11 | }), 12 | postcss: [ 13 | require('autoprefixer')({ 14 | browsers: ['last 2 versions'] 15 | }) 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /step-8-resumer/build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var webpack = require('webpack') 3 | var config = require('../config') 4 | var merge = require('webpack-merge') 5 | var baseWebpackConfig = require('./webpack.base.conf') 6 | var HtmlWebpackPlugin = require('html-webpack-plugin') 7 | var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 8 | 9 | // add hot-reload related code to entry chunks 10 | Object.keys(baseWebpackConfig.entry).forEach(function (name) { 11 | baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name]) 12 | }) 13 | 14 | module.exports = merge(baseWebpackConfig, { 15 | module: { 16 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap }) 17 | }, 18 | // cheap-module-eval-source-map is faster for development 19 | devtool: '#cheap-module-eval-source-map', 20 | plugins: [ 21 | new webpack.DefinePlugin({ 22 | 'process.env': config.dev.env 23 | }), 24 | // https://github.com/glenjamin/webpack-hot-middleware#installation--usage 25 | new webpack.HotModuleReplacementPlugin(), 26 | new webpack.NoEmitOnErrorsPlugin(), 27 | // https://github.com/ampedandwired/html-webpack-plugin 28 | new HtmlWebpackPlugin({ 29 | filename: 'index.html', 30 | template: 'index.html', 31 | inject: true 32 | }), 33 | new FriendlyErrorsPlugin() 34 | ] 35 | }) 36 | -------------------------------------------------------------------------------- /step-8-resumer/build/webpack.test.conf.js: -------------------------------------------------------------------------------- 1 | // This is the webpack config used for unit tests. 2 | 3 | var utils = require('./utils') 4 | var webpack = require('webpack') 5 | var merge = require('webpack-merge') 6 | var baseConfig = require('./webpack.base.conf') 7 | 8 | var webpackConfig = merge(baseConfig, { 9 | // use inline sourcemap for karma-sourcemap-loader 10 | module: { 11 | rules: utils.styleLoaders() 12 | }, 13 | devtool: '#inline-source-map', 14 | plugins: [ 15 | new webpack.DefinePlugin({ 16 | 'process.env': require('../config/test.env') 17 | }) 18 | ] 19 | }) 20 | 21 | // no need for app entry during tests 22 | delete webpackConfig.entry 23 | 24 | module.exports = webpackConfig 25 | -------------------------------------------------------------------------------- /step-8-resumer/config/dev.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var prodEnv = require('./prod.env') 3 | 4 | module.exports = merge(prodEnv, { 5 | NODE_ENV: '"development"' 6 | }) 7 | -------------------------------------------------------------------------------- /step-8-resumer/config/index.js: -------------------------------------------------------------------------------- 1 | // see http://vuejs-templates.github.io/webpack for documentation. 2 | var path = require('path') 3 | 4 | module.exports = { 5 | build: { 6 | env: require('./prod.env'), 7 | index: path.resolve(__dirname, '../dist/index.html'), 8 | assetsRoot: path.resolve(__dirname, '../dist'), 9 | assetsSubDirectory: 'static', 10 | assetsPublicPath: '/jrg-project-5/step-8-resumer/dist', 11 | productionSourceMap: true, 12 | // Gzip off by default as many popular static hosts such as 13 | // Surge or Netlify already gzip all static assets for you. 14 | // Before setting to `true`, make sure to: 15 | // npm install --save-dev compression-webpack-plugin 16 | productionGzip: false, 17 | productionGzipExtensions: ['js', 'css'], 18 | // Run the build command with an extra argument to 19 | // View the bundle analyzer report after build finishes: 20 | // `npm run build --report` 21 | // Set to `true` or `false` to always turn it on or off 22 | bundleAnalyzerReport: process.env.npm_config_report 23 | }, 24 | dev: { 25 | env: require('./dev.env'), 26 | port: 8080, 27 | autoOpenBrowser: true, 28 | assetsSubDirectory: 'static', 29 | assetsPublicPath: '/', 30 | proxyTable: {}, 31 | // CSS Sourcemaps off by default because relative paths are "buggy" 32 | // with this option, according to the CSS-Loader README 33 | // (https://github.com/webpack/css-loader#sourcemaps) 34 | // In our experience, they generally work as expected, 35 | // just be aware of this issue when enabling this option. 36 | cssSourceMap: false 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /step-8-resumer/config/prod.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NODE_ENV: '"production"' 3 | } 4 | -------------------------------------------------------------------------------- /step-8-resumer/config/test.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var devEnv = require('./dev.env') 3 | 4 | module.exports = merge(devEnv, { 5 | NODE_ENV: '"testing"' 6 | }) 7 | -------------------------------------------------------------------------------- /step-8-resumer/dist/index.html: -------------------------------------------------------------------------------- 1 | resumer
-------------------------------------------------------------------------------- /step-8-resumer/dist/static/js/manifest.1c9c1a43bee8c60eb5fc.js: -------------------------------------------------------------------------------- 1 | !function(e){function r(t){if(n[t])return n[t].exports;var o=n[t]={i:t,l:!1,exports:{}};return e[t].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var t=window.webpackJsonp;window.webpackJsonp=function(n,c,i){for(var u,a,f,s=0,l=[];s -------------------------------------------------------------------------------- /step-8-resumer/dist/static/svg_icons/heart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /step-8-resumer/dist/static/svg_icons/id.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /step-8-resumer/dist/static/svg_icons/work.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /step-8-resumer/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | resumer 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /step-8-resumer/src/App.vue: -------------------------------------------------------------------------------- 1 | 12 | 13 | 33 | 34 | 74 | -------------------------------------------------------------------------------- /step-8-resumer/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/step-8-resumer/src/assets/logo.png -------------------------------------------------------------------------------- /step-8-resumer/src/assets/reset.css: -------------------------------------------------------------------------------- 1 | *{margin:0; padding:0; box-sizing: border-box; } 2 | *::after, *::before{box-sizing:border-box;} 3 | -------------------------------------------------------------------------------- /step-8-resumer/src/components/Hello.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 33 | 34 | 35 | 54 | -------------------------------------------------------------------------------- /step-8-resumer/src/components/Topbar.vue: -------------------------------------------------------------------------------- 1 | 13 | 14 | 19 | 20 | 62 | -------------------------------------------------------------------------------- /step-8-resumer/src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from 'vue' 4 | import App from './App' 5 | import router from './router' 6 | 7 | /* eslint-disable no-new */ 8 | new Vue({ 9 | el: '#app', 10 | router, 11 | template: '', 12 | components: { App } 13 | }) 14 | -------------------------------------------------------------------------------- /step-8-resumer/src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | 4 | Vue.use(Router) 5 | 6 | import Hello from 'components/Hello' 7 | 8 | export default new Router({ 9 | routes: [ 10 | { 11 | path: '/', 12 | name: 'Hello', 13 | component: Hello 14 | } 15 | ] 16 | }) 17 | -------------------------------------------------------------------------------- /step-8-resumer/src/store/index.js: -------------------------------------------------------------------------------- 1 | import Vuex from 'vuex' 2 | import Vue from 'vue' // 思考:在多个文件 import vue ,会怎样 3 | 4 | Vue.use(Vuex) // 不写这句话浏览器控制台就会报错,于是我就写了 5 | 6 | export default new Vuex.Store({ 7 | state: { 8 | selected: 'profile', 9 | resume: { 10 | config: [ 11 | { field: 'profile', icon: 'id' }, 12 | { field: 'workHistory', icon: 'work' }, 13 | { field: 'education', icon: 'book' }, 14 | { field: 'projects', icon: 'heart' }, 15 | { field: 'awards', icon: 'cup' }, 16 | { field: 'contacts', icon: 'phone' }, 17 | ], 18 | profile: { 19 | name: '方某某', 20 | city: '大城市铁岭', 21 | title: '首席装逼师', 22 | birthday: '1990-01-01' 23 | }, 24 | workHistory: [ 25 | { 26 | company: '鸡飞狗跳公司', content: `公司总部设在XXXX区,先后在北京、上海成立分公司。专注于移动XXX领域,主打产品XXXXX,它将资讯、报纸、杂志、图片、微信等众多内容,按照用户意愿聚合到一起,实现深度个性化 定制。 27 | 我的主要工作如下: 28 | 1. 完成既定产品需求。 29 | 2. 修复 bug。` 30 | }, 31 | { company: '狗急跳墙责任有限公司', content: `公司总部设在XXXX区,先后在北京、上海成立分公司。专注于移动XXX领域,主打产品XXXXX,它将资讯、报纸、杂志、图片、微信等众多内容,按照用户意愿聚合到一起,实现深度个性化 定制。 32 | 我的主要工作如下: 33 | 1. 完成既定产品需求。 34 | 2. 修复 bug` }, 35 | ], 36 | education: [ 37 | { school: '黄志诚警官大学', content: '本科' }, 38 | { school: '韩琛古惑仔高中'}, 39 | ], 40 | projects: [ 41 | { name: 'project A', content: '文字' }, 42 | { name: 'project B', content: '文字' }, 43 | ], 44 | awards: [ 45 | { name: '再来十瓶', content: '连续十次获得「再来一瓶」奖励' }, 46 | { name: '三好学生'}, 47 | ], 48 | contacts: [ 49 | { contact: 'phone', content: '13812345678' }, 50 | { contact: 'qq', content: '12345678' }, 51 | ], 52 | } 53 | }, 54 | mutations: { 55 | switchTab(state, payload) { 56 | state.selected = payload // 关于 payload 看这里 http://vuex.vuejs.org/zh-cn/mutations.html#提交载荷(payload) 57 | } 58 | } 59 | }) 60 | -------------------------------------------------------------------------------- /step-8-resumer/static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/step-8-resumer/static/.gitkeep -------------------------------------------------------------------------------- /step-8-resumer/static/svg_icons/book.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /step-8-resumer/static/svg_icons/heart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /step-8-resumer/static/svg_icons/id.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /step-8-resumer/static/svg_icons/work.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /step-8-resumer/test/unit/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "mocha": true 4 | }, 5 | "globals": { 6 | "expect": true, 7 | "sinon": true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /step-8-resumer/test/unit/index.js: -------------------------------------------------------------------------------- 1 | // Polyfill fn.bind() for PhantomJS 2 | /* eslint-disable no-extend-native */ 3 | Function.prototype.bind = require('function-bind') 4 | 5 | // require all test files (files that ends with .spec.js) 6 | const testsContext = require.context('./specs', true, /\.spec$/) 7 | testsContext.keys().forEach(testsContext) 8 | 9 | // require all src files except main.js for coverage. 10 | // you can also change this to match only the subset of files that 11 | // you want coverage for. 12 | const srcContext = require.context('src', true, /^\.\/(?!main(\.js)?$)/) 13 | srcContext.keys().forEach(srcContext) 14 | -------------------------------------------------------------------------------- /step-8-resumer/test/unit/karma.conf.js: -------------------------------------------------------------------------------- 1 | // This is a karma config file. For more details see 2 | // http://karma-runner.github.io/0.13/config/configuration-file.html 3 | // we are also using it with karma-webpack 4 | // https://github.com/webpack/karma-webpack 5 | 6 | var webpackConfig = require('../../build/webpack.test.conf') 7 | 8 | module.exports = function (config) { 9 | config.set({ 10 | // to run in additional browsers: 11 | // 1. install corresponding karma launcher 12 | // http://karma-runner.github.io/0.13/config/browsers.html 13 | // 2. add it to the `browsers` array below. 14 | browsers: ['PhantomJS'], 15 | frameworks: ['mocha', 'sinon-chai'], 16 | reporters: ['spec', 'coverage'], 17 | files: ['./index.js'], 18 | preprocessors: { 19 | './index.js': ['webpack', 'sourcemap'] 20 | }, 21 | webpack: webpackConfig, 22 | webpackMiddleware: { 23 | noInfo: true 24 | }, 25 | coverageReporter: { 26 | dir: './coverage', 27 | reporters: [ 28 | { type: 'lcov', subdir: '.' }, 29 | { type: 'text-summary' } 30 | ] 31 | } 32 | }) 33 | } 34 | -------------------------------------------------------------------------------- /step-8-resumer/test/unit/specs/Hello.spec.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Hello from 'src/components/Hello' 3 | 4 | describe('Hello.vue', () => { 5 | it('should render correct contents', () => { 6 | const vm = new Vue({ 7 | el: document.createElement('div'), 8 | render: (h) => h(Hello) 9 | }) 10 | expect(vm.$el.querySelector('.hello h1').textContent) 11 | .to.equal('Welcome to Your Vue.js App') 12 | }) 13 | }) 14 | -------------------------------------------------------------------------------- /step-9-resumer/.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": [ 3 | ["es2015", { "modules": false }], 4 | "stage-2" 5 | ], 6 | "plugins": ["transform-runtime"], 7 | "comments": false, 8 | "env": { 9 | "test": { 10 | "plugins": [ "istanbul" ] 11 | } 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /step-9-resumer/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | charset = utf-8 5 | indent_style = space 6 | indent_size = 2 7 | end_of_line = lf 8 | insert_final_newline = true 9 | trim_trailing_whitespace = true 10 | -------------------------------------------------------------------------------- /step-9-resumer/.eslintignore: -------------------------------------------------------------------------------- 1 | build/*.js 2 | config/*.js 3 | -------------------------------------------------------------------------------- /step-9-resumer/.eslintrc.js: -------------------------------------------------------------------------------- 1 | // http://eslint.org/docs/user-guide/configuring 2 | 3 | module.exports = { 4 | root: true, 5 | parser: 'babel-eslint', 6 | parserOptions: { 7 | sourceType: 'module' 8 | }, 9 | env: { 10 | browser: true, 11 | }, 12 | // https://github.com/feross/standard/blob/master/RULES.md#javascript-standard-style 13 | extends: 'standard', 14 | // required to lint *.vue files 15 | plugins: [ 16 | 'html' 17 | ], 18 | // add your custom rules here 19 | 'rules': { 20 | // allow paren-less arrow functions 21 | 'arrow-parens': 0, 22 | // allow async-await 23 | 'generator-star-spacing': 0, 24 | // allow debugger during development 25 | 'no-debugger': process.env.NODE_ENV === 'production' ? 2 : 0 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /step-9-resumer/.gitignore: -------------------------------------------------------------------------------- 1 | .DS_Store 2 | node_modules/ 3 | npm-debug.log 4 | test/unit/coverage 5 | -------------------------------------------------------------------------------- /step-9-resumer/README.md: -------------------------------------------------------------------------------- 1 | # resumer 2 | 3 | > A Vue.js project 4 | 5 | ## Build Setup 6 | 7 | ``` bash 8 | # install dependencies 9 | npm install 10 | 11 | # serve with hot reload at localhost:8080 12 | npm run dev 13 | 14 | # build for production with minification 15 | npm run build 16 | 17 | # build for production and view the bundle analyzer report 18 | npm run build --report 19 | 20 | # run unit tests 21 | npm run unit 22 | 23 | # run all tests 24 | npm test 25 | ``` 26 | 27 | For detailed explanation on how things work, checkout the [guide](http://vuejs-templates.github.io/webpack/) and [docs for vue-loader](http://vuejs.github.io/vue-loader). 28 | -------------------------------------------------------------------------------- /step-9-resumer/build/build.js: -------------------------------------------------------------------------------- 1 | // https://github.com/shelljs/shelljs 2 | require('./check-versions')() 3 | 4 | process.env.NODE_ENV = 'production' 5 | 6 | var ora = require('ora') 7 | var path = require('path') 8 | var chalk = require('chalk') 9 | var shell = require('shelljs') 10 | var webpack = require('webpack') 11 | var config = require('../config') 12 | var webpackConfig = require('./webpack.prod.conf') 13 | 14 | var spinner = ora('building for production...') 15 | spinner.start() 16 | 17 | var assetsPath = path.join(config.build.assetsRoot, config.build.assetsSubDirectory) 18 | shell.rm('-rf', assetsPath) 19 | shell.mkdir('-p', assetsPath) 20 | shell.config.silent = true 21 | shell.cp('-R', 'static/*', assetsPath) 22 | shell.config.silent = false 23 | 24 | webpack(webpackConfig, function (err, stats) { 25 | spinner.stop() 26 | if (err) throw err 27 | process.stdout.write(stats.toString({ 28 | colors: true, 29 | modules: false, 30 | children: false, 31 | chunks: false, 32 | chunkModules: false 33 | }) + '\n\n') 34 | 35 | console.log(chalk.cyan(' Build complete.\n')) 36 | console.log(chalk.yellow( 37 | ' Tip: built files are meant to be served over an HTTP server.\n' + 38 | ' Opening index.html over file:// won\'t work.\n' 39 | )) 40 | }) 41 | -------------------------------------------------------------------------------- /step-9-resumer/build/check-versions.js: -------------------------------------------------------------------------------- 1 | var chalk = require('chalk') 2 | var semver = require('semver') 3 | var packageConfig = require('../package.json') 4 | 5 | function exec (cmd) { 6 | return require('child_process').execSync(cmd).toString().trim() 7 | } 8 | 9 | var versionRequirements = [ 10 | { 11 | name: 'node', 12 | currentVersion: semver.clean(process.version), 13 | versionRequirement: packageConfig.engines.node 14 | }, 15 | { 16 | name: 'npm', 17 | currentVersion: exec('npm --version'), 18 | versionRequirement: packageConfig.engines.npm 19 | } 20 | ] 21 | 22 | module.exports = function () { 23 | var warnings = [] 24 | for (var i = 0; i < versionRequirements.length; i++) { 25 | var mod = versionRequirements[i] 26 | if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) { 27 | warnings.push(mod.name + ': ' + 28 | chalk.red(mod.currentVersion) + ' should be ' + 29 | chalk.green(mod.versionRequirement) 30 | ) 31 | } 32 | } 33 | 34 | if (warnings.length) { 35 | console.log('') 36 | console.log(chalk.yellow('To use this template, you must update following to modules:')) 37 | console.log() 38 | for (var i = 0; i < warnings.length; i++) { 39 | var warning = warnings[i] 40 | console.log(' ' + warning) 41 | } 42 | console.log() 43 | process.exit(1) 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /step-9-resumer/build/dev-client.js: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | require('eventsource-polyfill') 3 | var hotClient = require('webpack-hot-middleware/client?noInfo=true&reload=true') 4 | 5 | hotClient.subscribe(function (event) { 6 | if (event.action === 'reload') { 7 | window.location.reload() 8 | } 9 | }) 10 | -------------------------------------------------------------------------------- /step-9-resumer/build/svg-symbols.js: -------------------------------------------------------------------------------- 1 | // 这是一个 Node.js 脚本,并没有被 webpack 打包,所以我们不能使用 import path from 'path' 2 | const path = require('path') // 路径工具 3 | const fs = require('fs') // 文件系统工具 4 | 5 | let svgFolder = path.join(__dirname, '../static/svg_icons/') 6 | let jsPath = path.join(__dirname, '../src/assets/icons.js') 7 | 8 | let svgFiles = fs.readdirSync(svgFolder) // [ 'add.svg', 'book.svg', 'cup.svg', 'heart.svg', 'id.svg', 'phone.svg', 'work.svg' ] 9 | 10 | let symbols = svgFiles.map(function (filename) { 11 | let absolutePath = path.join(svgFolder, filename) 12 | let fileContent = fs.readFileSync(absolutePath).toString('utf8') 13 | let name = path.basename(filename, '.svg') 14 | return fileContent 15 | .replace(/<\?.+?\?>/g, '') // 去掉 16 | .replace(//g, '') // 去掉 17 | .replace(/version=".+?"/g, '') 18 | .replace(/xmlns=".+?"/g, '') 19 | .replace(/class=".+?"/g, '') 20 | .replace(/fill=".+?"/g, '') 21 | .replace(/stroke=".+?"/g, '') 22 | .replace(/\`\n` 28 | 29 | fs.writeFileSync(jsPath, js, {flag: 'w'}) -------------------------------------------------------------------------------- /step-9-resumer/build/vue-loader.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var config = require('../config') 3 | var isProduction = process.env.NODE_ENV === 'production' 4 | 5 | module.exports = { 6 | loaders: utils.cssLoaders({ 7 | sourceMap: isProduction 8 | ? config.build.productionSourceMap 9 | : config.dev.cssSourceMap, 10 | extract: isProduction 11 | }), 12 | postcss: [ 13 | require('autoprefixer')({ 14 | browsers: ['last 2 versions'] 15 | }) 16 | ] 17 | } 18 | -------------------------------------------------------------------------------- /step-9-resumer/build/webpack.dev.conf.js: -------------------------------------------------------------------------------- 1 | var utils = require('./utils') 2 | var webpack = require('webpack') 3 | var config = require('../config') 4 | var merge = require('webpack-merge') 5 | var baseWebpackConfig = require('./webpack.base.conf') 6 | var HtmlWebpackPlugin = require('html-webpack-plugin') 7 | var FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin') 8 | 9 | // add hot-reload related code to entry chunks 10 | Object.keys(baseWebpackConfig.entry).forEach(function (name) { 11 | baseWebpackConfig.entry[name] = ['./build/dev-client'].concat(baseWebpackConfig.entry[name]) 12 | }) 13 | 14 | module.exports = merge(baseWebpackConfig, { 15 | module: { 16 | rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap }) 17 | }, 18 | // cheap-module-eval-source-map is faster for development 19 | devtool: '#cheap-module-eval-source-map', 20 | plugins: [ 21 | new webpack.DefinePlugin({ 22 | 'process.env': config.dev.env 23 | }), 24 | // https://github.com/glenjamin/webpack-hot-middleware#installation--usage 25 | new webpack.HotModuleReplacementPlugin(), 26 | new webpack.NoEmitOnErrorsPlugin(), 27 | // https://github.com/ampedandwired/html-webpack-plugin 28 | new HtmlWebpackPlugin({ 29 | filename: 'index.html', 30 | template: 'index.html', 31 | inject: true 32 | }), 33 | new FriendlyErrorsPlugin() 34 | ] 35 | }) 36 | -------------------------------------------------------------------------------- /step-9-resumer/build/webpack.test.conf.js: -------------------------------------------------------------------------------- 1 | // This is the webpack config used for unit tests. 2 | 3 | var utils = require('./utils') 4 | var webpack = require('webpack') 5 | var merge = require('webpack-merge') 6 | var baseConfig = require('./webpack.base.conf') 7 | 8 | var webpackConfig = merge(baseConfig, { 9 | // use inline sourcemap for karma-sourcemap-loader 10 | module: { 11 | rules: utils.styleLoaders() 12 | }, 13 | devtool: '#inline-source-map', 14 | plugins: [ 15 | new webpack.DefinePlugin({ 16 | 'process.env': require('../config/test.env') 17 | }) 18 | ] 19 | }) 20 | 21 | // no need for app entry during tests 22 | delete webpackConfig.entry 23 | 24 | module.exports = webpackConfig 25 | -------------------------------------------------------------------------------- /step-9-resumer/config/dev.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var prodEnv = require('./prod.env') 3 | 4 | module.exports = merge(prodEnv, { 5 | NODE_ENV: '"development"' 6 | }) 7 | -------------------------------------------------------------------------------- /step-9-resumer/config/index.js: -------------------------------------------------------------------------------- 1 | // see http://vuejs-templates.github.io/webpack for documentation. 2 | var path = require('path') 3 | 4 | module.exports = { 5 | build: { 6 | env: require('./prod.env'), 7 | index: path.resolve(__dirname, '../dist/index.html'), 8 | assetsRoot: path.resolve(__dirname, '../dist'), 9 | assetsSubDirectory: 'static', 10 | assetsPublicPath: '/jrg-project-5/step-9-resumer/dist', 11 | productionSourceMap: true, 12 | // Gzip off by default as many popular static hosts such as 13 | // Surge or Netlify already gzip all static assets for you. 14 | // Before setting to `true`, make sure to: 15 | // npm install --save-dev compression-webpack-plugin 16 | productionGzip: false, 17 | productionGzipExtensions: ['js', 'css'], 18 | // Run the build command with an extra argument to 19 | // View the bundle analyzer report after build finishes: 20 | // `npm run build --report` 21 | // Set to `true` or `false` to always turn it on or off 22 | bundleAnalyzerReport: process.env.npm_config_report 23 | }, 24 | dev: { 25 | env: require('./dev.env'), 26 | port: 8080, 27 | autoOpenBrowser: true, 28 | assetsSubDirectory: 'static', 29 | assetsPublicPath: '/', 30 | proxyTable: {}, 31 | // CSS Sourcemaps off by default because relative paths are "buggy" 32 | // with this option, according to the CSS-Loader README 33 | // (https://github.com/webpack/css-loader#sourcemaps) 34 | // In our experience, they generally work as expected, 35 | // just be aware of this issue when enabling this option. 36 | cssSourceMap: false 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /step-9-resumer/config/prod.env.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | NODE_ENV: '"production"' 3 | } 4 | -------------------------------------------------------------------------------- /step-9-resumer/config/test.env.js: -------------------------------------------------------------------------------- 1 | var merge = require('webpack-merge') 2 | var devEnv = require('./dev.env') 3 | 4 | module.exports = merge(devEnv, { 5 | NODE_ENV: '"testing"' 6 | }) 7 | -------------------------------------------------------------------------------- /step-9-resumer/dist/index.html: -------------------------------------------------------------------------------- 1 | resumer
-------------------------------------------------------------------------------- /step-9-resumer/dist/static/js/manifest.40bd4a013aec4fcf407c.js: -------------------------------------------------------------------------------- 1 | !function(e){function r(t){if(n[t])return n[t].exports;var o=n[t]={i:t,l:!1,exports:{}};return e[t].call(o.exports,o,o.exports,r),o.l=!0,o.exports}var t=window.webpackJsonp;window.webpackJsonp=function(n,c,i){for(var u,a,s,f=0,l=[];f -------------------------------------------------------------------------------- /step-9-resumer/dist/static/svg_icons/heart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /step-9-resumer/dist/static/svg_icons/id.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /step-9-resumer/dist/static/svg_icons/work.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /step-9-resumer/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | resumer 6 | 7 | 8 |
9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /step-9-resumer/src/App.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 44 | 45 | 85 | -------------------------------------------------------------------------------- /step-9-resumer/src/assets/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/step-9-resumer/src/assets/logo.png -------------------------------------------------------------------------------- /step-9-resumer/src/assets/reset.css: -------------------------------------------------------------------------------- 1 | *{margin:0; padding:0; box-sizing: border-box; } 2 | *::after, *::before{box-sizing:border-box;} 3 | -------------------------------------------------------------------------------- /step-9-resumer/src/components/Hello.vue: -------------------------------------------------------------------------------- 1 | 22 | 23 | 33 | 34 | 35 | 54 | -------------------------------------------------------------------------------- /step-9-resumer/src/components/MyDialog.vue: -------------------------------------------------------------------------------- 1 | 14 | 15 | 26 | 27 | 54 | -------------------------------------------------------------------------------- /step-9-resumer/src/components/SignInForm.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 49 | -------------------------------------------------------------------------------- /step-9-resumer/src/components/SignUpForm.vue: -------------------------------------------------------------------------------- 1 | 19 | 20 | 54 | -------------------------------------------------------------------------------- /step-9-resumer/src/lib/getAVUser.js: -------------------------------------------------------------------------------- 1 | import AV from '../lib/leancloud' 2 | export default function(user){ 3 | var {id, attributes:{username}} = user || AV.User.current() || {attributes:{}} 4 | return {id, username} 5 | } 6 | -------------------------------------------------------------------------------- /step-9-resumer/src/lib/getErrorMessage.js: -------------------------------------------------------------------------------- 1 | const map = { 2 | 202: '用户名已被占用', 3 | 210: '用户名和密码不匹配', 4 | 211: '找不到该用户', 5 | 217: '无效的用户名', 6 | unknown: '请求失败,请稍后再试' 7 | } 8 | export default function({code}){ 9 | return map[code] || map.unknown 10 | } 11 | -------------------------------------------------------------------------------- /step-9-resumer/src/lib/leancloud.js: -------------------------------------------------------------------------------- 1 | import AV from 'leancloud-storage' 2 | 3 | var APP_ID = 'dMCAfvAY0m9PAzthjX9xXWPH-gzGzoHsz'; 4 | var APP_KEY = 'mIOLcTqescfST8fKTLjlBuyR'; 5 | AV.init({ 6 | appId: APP_ID, 7 | appKey: APP_KEY 8 | }); 9 | 10 | export default AV 11 | -------------------------------------------------------------------------------- /step-9-resumer/src/main.js: -------------------------------------------------------------------------------- 1 | // The Vue build version to load with the `import` command 2 | // (runtime-only or standalone) has been set in webpack.base.conf with an alias. 3 | import Vue from 'vue' 4 | import App from './App' 5 | import router from './router' 6 | 7 | /* eslint-disable no-new */ 8 | new Vue({ 9 | el: '#app', 10 | router, 11 | template: '', 12 | components: { App } 13 | }) 14 | -------------------------------------------------------------------------------- /step-9-resumer/src/router/index.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Router from 'vue-router' 3 | 4 | Vue.use(Router) 5 | 6 | import Hello from 'components/Hello' 7 | 8 | export default new Router({ 9 | routes: [ 10 | { 11 | path: '/', 12 | name: 'Hello', 13 | component: Hello 14 | } 15 | ] 16 | }) 17 | -------------------------------------------------------------------------------- /step-9-resumer/static/.gitkeep: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jirengu-inc/jrg-project-5/d14f63fd2f43591249a935023b0e31655ea965d4/step-9-resumer/static/.gitkeep -------------------------------------------------------------------------------- /step-9-resumer/static/svg_icons/book.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /step-9-resumer/static/svg_icons/heart.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /step-9-resumer/static/svg_icons/id.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /step-9-resumer/static/svg_icons/work.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /step-9-resumer/test/unit/.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "mocha": true 4 | }, 5 | "globals": { 6 | "expect": true, 7 | "sinon": true 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /step-9-resumer/test/unit/index.js: -------------------------------------------------------------------------------- 1 | // Polyfill fn.bind() for PhantomJS 2 | /* eslint-disable no-extend-native */ 3 | Function.prototype.bind = require('function-bind') 4 | 5 | // require all test files (files that ends with .spec.js) 6 | const testsContext = require.context('./specs', true, /\.spec$/) 7 | testsContext.keys().forEach(testsContext) 8 | 9 | // require all src files except main.js for coverage. 10 | // you can also change this to match only the subset of files that 11 | // you want coverage for. 12 | const srcContext = require.context('src', true, /^\.\/(?!main(\.js)?$)/) 13 | srcContext.keys().forEach(srcContext) 14 | -------------------------------------------------------------------------------- /step-9-resumer/test/unit/karma.conf.js: -------------------------------------------------------------------------------- 1 | // This is a karma config file. For more details see 2 | // http://karma-runner.github.io/0.13/config/configuration-file.html 3 | // we are also using it with karma-webpack 4 | // https://github.com/webpack/karma-webpack 5 | 6 | var webpackConfig = require('../../build/webpack.test.conf') 7 | 8 | module.exports = function (config) { 9 | config.set({ 10 | // to run in additional browsers: 11 | // 1. install corresponding karma launcher 12 | // http://karma-runner.github.io/0.13/config/browsers.html 13 | // 2. add it to the `browsers` array below. 14 | browsers: ['PhantomJS'], 15 | frameworks: ['mocha', 'sinon-chai'], 16 | reporters: ['spec', 'coverage'], 17 | files: ['./index.js'], 18 | preprocessors: { 19 | './index.js': ['webpack', 'sourcemap'] 20 | }, 21 | webpack: webpackConfig, 22 | webpackMiddleware: { 23 | noInfo: true 24 | }, 25 | coverageReporter: { 26 | dir: './coverage', 27 | reporters: [ 28 | { type: 'lcov', subdir: '.' }, 29 | { type: 'text-summary' } 30 | ] 31 | } 32 | }) 33 | } 34 | -------------------------------------------------------------------------------- /step-9-resumer/test/unit/specs/Hello.spec.js: -------------------------------------------------------------------------------- 1 | import Vue from 'vue' 2 | import Hello from 'src/components/Hello' 3 | 4 | describe('Hello.vue', () => { 5 | it('should render correct contents', () => { 6 | const vm = new Vue({ 7 | el: document.createElement('div'), 8 | render: (h) => h(Hello) 9 | }) 10 | expect(vm.$el.querySelector('.hello h1').textContent) 11 | .to.equal('Welcome to Your Vue.js App') 12 | }) 13 | }) 14 | --------------------------------------------------------------------------------