├── .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 |
2 |
3 |
6 |
7 |
8 |
9 |
10 |
11 |
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 |
2 |
3 |
{{ msg }}
4 |
Essential Links
5 |
13 |
Ecosystem
14 |
20 |
21 |
22 |
23 |
33 |
34 |
35 |
54 |
--------------------------------------------------------------------------------
/resumer/src/components/ResumePreview.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 | I am resumePreview
4 |
5 |
6 |
7 |
12 |
13 |
19 |
--------------------------------------------------------------------------------
/resumer/src/components/Topbar.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
Resumer
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
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 |
2 |
3 |
4 |
5 |
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 |
2 |
3 |
4 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
26 |
27 |
54 |
--------------------------------------------------------------------------------
/step-10-resumer/src/components/Preview.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/step-10-resumer/src/components/Resume.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
28 |
29 |
40 |
--------------------------------------------------------------------------------
/step-10-resumer/src/components/SignInForm.vue:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
20 |
49 |
--------------------------------------------------------------------------------
/step-10-resumer/src/components/SignUpForm.vue:
--------------------------------------------------------------------------------
1 |
2 |
18 |
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 |
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 |
2 |
3 |
6 |
7 |
8 |
9 |
10 |
11 |
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 |
2 |
3 |
{{ msg }}
4 |
Essential Links
5 |
13 |
Ecosystem
14 |
20 |
21 |
22 |
23 |
33 |
34 |
35 |
54 |
--------------------------------------------------------------------------------
/step-8-resumer/src/components/Topbar.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
Resumer
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
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 |
2 |
3 |
4 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
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 |
2 |
3 |
{{ msg }}
4 |
Essential Links
5 |
13 |
Ecosystem
14 |
20 |
21 |
22 |
23 |
33 |
34 |
35 |
54 |
--------------------------------------------------------------------------------
/step-9-resumer/src/components/MyDialog.vue:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
26 |
27 |
54 |
--------------------------------------------------------------------------------
/step-9-resumer/src/components/SignInForm.vue:
--------------------------------------------------------------------------------
1 |
2 |
18 |
19 |
20 |
49 |
--------------------------------------------------------------------------------
/step-9-resumer/src/components/SignUpForm.vue:
--------------------------------------------------------------------------------
1 |
2 |
18 |
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 |
--------------------------------------------------------------------------------