diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 0000000..40110be --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,22 @@ +The MIT License +=============== + +Copyright (c) 2016-18 FRESH Standard (https://freshstandard.org) + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md new file mode 100644 index 0000000..5ed159d --- /dev/null +++ b/README.md @@ -0,0 +1,26 @@ +fresh-theme-positive +=== +*A dynamic two-color [FRESH][f] résumé theme for technical professionals.* + +## Instructions + +1. Install [HackMyResume][hmr]. + +2. This theme currently comes pre-installed with HackMyResume as part of the +[fresh-themes repository][ftr], so you don't need to install it explicitly. But +you could, with `npm i fresh-theme-positive`. + +3. Run `hackmyresume build my-resume.json out/output.all -t positive`. + +## Screenshot + +![](theme.png) + +## License + +MIT. See [LICENSE.md][lic] for details. + +[hmr]: https://github.com/hacksalot/HackMyResume +[ftr]: https://github.com/fresh-standard/fresh-themes +[lic]: LICENSE.md +[f]: https://resume.freshstandard.org diff --git a/package.json b/package.json new file mode 100644 index 0000000..0ce9129 --- /dev/null +++ b/package.json @@ -0,0 +1,30 @@ +{ + "name": "fresh-theme-positive", + "version": "0.1.0", + "description": "A dynamic two-color FRESH resume theme for technical professionals.", + "main": "theme.json", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/fresh-standard/fresh-theme-positive.git" + }, + "keywords": [ + "resume", + "CV", + "FRESH", + "HackMyResume", + "FluentCV", + "employment", + "FRESH Resume Schema", + "FRESCA", + "career" + ], + "author": "Mackey James (https://indevious.com)", + "license": "MIT", + "bugs": { + "url": "https://github.com/fresh-standard/fresh-theme-positive/issues" + }, + "homepage": "https://github.com/fresh-standard/fresh-theme-positive#readme" +} diff --git a/src/partials/education.hbs b/src/partials/education.hbs new file mode 100644 index 0000000..5c5b35f --- /dev/null +++ b/src/partials/education.hbs @@ -0,0 +1,20 @@ +{{#section "education"}} +
+
+ {{#> header-education }} + {{> header-icon _title="EDUCATION" _section="education" _hdricon=(lookup . '_icon') }} + {{/header-education}} + {{#each r.education.history}} + {{#> body-education }} +
+

{{#if title}}{{{ title }}}, {{/if}}{{{ institution }}}

+ {{dateRange .}} + {{#if location}}{{location}}{{/if}} + {{{ summary }}} + {{> highlights }} + {{#if curriculum}}{{#each curriculum}}{{{ . }}} {{/each}}{{/if}} +
+ {{/body-education}} + {{/each}} +
+{{/section}} diff --git a/src/partials/employment.hbs b/src/partials/employment.hbs new file mode 100644 index 0000000..10e73a4 --- /dev/null +++ b/src/partials/employment.hbs @@ -0,0 +1,26 @@ +{{#section "employment"}} +
+
+ {{#> header-employment }} + {{> header-icon _title="EMPLOYMENT" _section="employment" _hdricon=(lookup . '_icon') }} + {{/header-employment}} + {{#each r.employment.history}} + {{#> body-employment }} +
+

{{ position }}, + {{#if url }} + {{ employer }} + {{else}} + {{ employer }} + {{/if}} +

+ {{dateRange .}} + {{#if location}}{{location}}{{/if}} +

{{{ summary }}}

+ {{> highlights }} + {{#if keywords}}{{#each keywords}}{{{ . }}} {{/each}}{{/if}} +
+ {{/body-employment}} + {{/each}} +
+{{/section}} diff --git a/src/partials/service.hbs b/src/partials/service.hbs new file mode 100644 index 0000000..3c4b1c6 --- /dev/null +++ b/src/partials/service.hbs @@ -0,0 +1,25 @@ +{{#section "service"}} +
+
+ {{#> header-samples }} + {{> header-icon _title="SERVICE" _section="service" _hdricon=(lookup . '_icon') }} + {{/header-samples}} + {{#each r.service.history}} + {{#> body-service }} +
+

{{ position }}, + {{#if url}} + {{ organization }} + {{else}} + {{ organization }} + {{/if}} +

+ {{dateRange .}} + {{#if location}}{{location}}{{/if}} +

{{{ summary }}}

+ {{> highlights }} +
+ {{/body-service }} + {{/each}} +
+{{/section}} diff --git a/src/partials/skills.xml b/src/partials/skills.xml new file mode 100644 index 0000000..e42a443 --- /dev/null +++ b/src/partials/skills.xml @@ -0,0 +1,61 @@ + + + + + + + {{{sectionTitle "SKILLS"}}} + + + + + + + + + + + + + {{#each r.skills.sets}} + + + + + + + + + + + + + + + + + {{ name }} + + + + + + + + + + + + + + + {{#each skills }}{{ this }}{{#unless @last}} {{/unless}}{{/each}} + + + + + + {{/each}} + + + diff --git a/src/partials/testimonials.hbs b/src/partials/testimonials.hbs new file mode 100644 index 0000000..ae998e7 --- /dev/null +++ b/src/partials/testimonials.hbs @@ -0,0 +1,16 @@ +{{#section "testimonials"}} +
+
+ {{#> header-testimonials }} + {{> header-icon _title="TESTIMONIALS" _section="testimonials" _hdricon=(lookup . '_icon') }} + {{/header-testimonials}} + {{#each r.testimonials}} + {{#> body-testimonials }} +
+

{{ name }}{{#if organization}}, {{ organization }}{{/if}}

+

{{{ quote }}}

+
+ {{/body-testimonials}} + {{/each}} +
+{{/section}} diff --git a/src/positive-doc.xml b/src/positive-doc.xml new file mode 100644 index 0000000..4ac584d --- /dev/null +++ b/src/positive-doc.xml @@ -0,0 +1,160 @@ + + + + + {{> doc-properties }} + {{> doc-fonts }} + {{> doc-lists }} + {{> doc-styles }} + {{> doc-pr }} + + + + + + + + + + + {{initialWords r.name }} + + + + + + {{lastWord r.name }} + + + + + + + + + {{ r.info.label }} + + + + + + + + + + + + + + + + {{ r.contact.email }} + + + + + + + - + + + + + + {{ r.contact.phone }} + + + + + + - + + + + + + + + {{ r.contact.website }} + + + + {{#has "info.brief"}} + + + + + {{{wpml r.info.brief true }}} + + {{/has}} + {{#section "skills"}}{{> skills }}{{/section}} + + {{#*inline "header-employment"}} + {{> header-icon _title="EMPLOYMENT" _section="employment" _icon="pict/emp" }} + {{/inline}} + {{#section "employment"}}{{> section/employment }}{{/section}} + + {{#*inline "header-projects"}} + {{> header-icon _title="PROJECTS" _section="projects" _icon="pict/star" }} + {{/inline}} + {{#section "projects"}}{{> section/projects }}{{/section}} + + {{#*inline "header-governance"}} + {{> header-icon _title="GOVERNANCE" _section="governance" _icon="pict/justice-scales" }} + {{/inline}} + {{#section "governance"}}{{> section/governance }}{{/section}} + + {{#*inline "header-affiliation"}} + {{> header-icon _title="AFFILIATION" _section="affiliation" _icon="pict/share-alt" }} + {{/inline}} + {{#section "affiliation"}}{{> section/affiliation }}{{/section}} + + {{#*inline "header-education"}} + {{> header-icon _title="EDUCATION" _section="education" _icon="pict/edu" }} + {{/inline}} + {{#section "education"}}{{> section/education }}{{/section}} + + {{#*inline "header-service"}} + {{> header-icon _title="SERVICE" _section="service" _icon="pict/srv" }} + {{/inline}} + {{#section "service"}}{{> section/service }}{{/section}} + + {{#*inline "header-writing"}} + {{> header-icon _title="WRITING" _section="writing" _icon="pict/wri" }} + {{/inline}} + {{#section "writing"}}{{> section/writing }}{{/section}} + + {{#*inline "header-reading"}} + {{> header-icon _title="READING" _section="reading" _icon="pict/book" }} + {{/inline}} + {{#section "reading"}}{{> section/reading }}{{/section}} + + {{#*inline "header-recognition"}} + {{> header-icon _title="RECOGNITION" _section="recognition" _icon="pict/rec" }} + {{/inline}} + {{#section "recognition"}}{{> section/recognition }}{{/section}} + + {{#*inline "header-speaking"}} + {{> header-icon _title="SPEAKING" _section="speaking" _icon="pict/group" }} + {{/inline}} + {{#section "speaking"}}{{> section/speaking }}{{/section}} + + {{#*inline "header-references"}} + {{> header-icon _title="REFERENCES" _section="references" _icon="pict/thumbs-up" }} + {{/inline}} + {{#section "references"}}{{> section/references }}{{/section}} + + {{#*inline "header-interests"}} + {{> header-icon _title="INTERESTS" _section="interests" _icon="pict/bicycle" }} + {{/inline}} + {{#section "interests"}}{{> section/interests }}{{/section}} + + + + + + + + + + diff --git a/src/positive-html.css b/src/positive-html.css new file mode 100644 index 0000000..8243e93 --- /dev/null +++ b/src/positive-html.css @@ -0,0 +1,218 @@ +html, body, main, section, header, ul, p, h1, h2, h3 { + font-family: {{{fontList 'default'}}}; + font-size: 14px; + line-height: 1.4; + margin: 0; padding: 0; + display: block; +} + +::selection { + color: #fff; + background: #e48a8a; /* WebKit/Blink Browsers */ +} +::-moz-selection { + color: #fff; + background: #e48a8a; /* Gecko Browsers */ +} + +p::selection { + color: #fff; +} + +a { + color: #{{color 'hyperlink'}}; + text-decoration: none; +} + +a:visited { + color: #7B0796; +} + +a:hover { + text-decoration: underline; +} + +h1 { + text-transform: uppercase; + font-size: +} + +h2 { + text-transform: uppercase; + color: #898989; + font-size: 2em; + position: relative; + font-weight: 400; +} + +h3, .tenure { + font-size: 1.5em; + font-weight: 400; +} + +h3 { + margin-top: 0; + margin-bottom: 5px; + /*width: 85%;*/ + float: left; +} + +table { + width: 100%; + text-transform: uppercase; +} + +td:first-child { + letter-spacing: 2px; + color: #bd5b5b; + font-size: 1.35rem; +} + +td:last-child { + text-align: justify; /* HTML justification sucks, but in this case... */ +} + +hr { + display: none; +} + +main { + padding: 15px; + max-width: 800px; + margin: 0 auto; +} + +section { + margin-top: 2em; +} + +section > div { + margin-top: 2em; + overflow: hidden; /* Clear floated children */ +} + +section > div p { + clear: both; +} + +section > header { + position: relative; +} + +p + ul { + margin: 1em; +} + +ul { + clear: both; +} + +li { + margin-left: 2em; +} + +p, li { + text-align: justify; +} + +.tenure { + float: right; + color: #6F6F6F; + background-color: #F5F5F5; + border-radius: 6px; + padding: 4px 6px; + font-size: 85%; + font-weight: 600; + margin-top: 3px; +} + +.location { + border: #e2aaaa dashed 1px; + background-color: #ffffff; + padding: 3px 6px; + border-radius: 6px; + float: right; + margin-right: 5px; + float: right; + font-size: 85%; + color: #717171; + font-weight: 600; + margin-top: 3px; +} + +.light-bubble { + +} + +span.keywords { + font-size: 12px; + color: #B16666; +} + +thead { + display: none; +} + +main > header { + width: 100%; + float: left; + margin-bottom: 1em; +} + +h1 { + float: left; +} + +h1, h2, .label { + font-size: 2.5em; + text-transform: uppercase; + font-weight: 300; + font-family: {{{fontList 'heading1'}}} +} + +#contact { + clear: both; + float: right; + margin-top: 2px; +} + +#contact span + span { + margin-left: 10px; +} + +header > span.fa { + text-align: center; + margin-right: 3px; + position: absolute; + width: 40px; + top: 14px; + font-size: 30px; + /*transform: translateX(-110%); PDF no likey */ + margin-left: -50px; + color: #DADADA; +} + +.label { + float: right; + color: #DADADA; +} + +#summary { + color: #717171; + font-size: 1.25em; + margin-top: 6em; +} + +#skills td { + padding-top: 7px; + padding-bottom: 7px; +} + +#references > p, #references > p > a { + color: #961e1e; + text-align: center; + margin: 30px; + font-weight: bold; + letter-spacing: 2px; + text-transform: uppercase; +} diff --git a/src/positive-html.html b/src/positive-html.html new file mode 100644 index 0000000..0e23774 --- /dev/null +++ b/src/positive-html.html @@ -0,0 +1,88 @@ + + + + + {{ r.name }} + + + {{{styleSheet "positive-html.css"}}} + + +
+
+

{{{initialWords r.name }}} {{{lastWord r.name }}}

+ {{{ r.info.label }}} +

+ {{#if r.contact.email}}{{/if}} + {{#if r.contact.phone}}{{{ r.contact.phone }}}{{/if}} + {{#if r.contact.website}}{{{ r.contact.website }}}{{/if}} +

+
+ + + {{#has "info.brief"}} +
+ {{{ r.info.brief }}} +
+ {{/has}} + + + {{!}} + + {{#*inline "icon-skills"}}{{/inline}} + {{> section/skills _icon="icon-skills"}} + + {{#*inline "icon-employment"}}{{/inline}} + {{> employment _icon="icon-employment"}} + + {{#*inline "icon-projects"}}{{/inline}} + {{> section/projects _icon="icon-projects"}} + + {{#*inline "icon-education"}}{{/inline}} + {{> education _icon="icon-education"}} + + {{#*inline "icon-affiliation"}}{{/inline}} + {{> section/affiliation _icon="icon-affiliation"}} + + {{#*inline "icon-service"}}{{/inline}} + {{> service _icon="icon-service"}} + + {{#*inline "icon-samples"}}{{/inline}} + {{> section/samples _icon="icon-samples"}} + + {{#*inline "icon-writing"}}{{/inline}} + {{> section/writing _icon="icon-writing"}} + + {{#*inline "icon-reading"}}{{/inline}} + {{> section/reading _icon="icon-reading"}} + + {{#*inline "icon-recognition"}}{{/inline}} + {{> section/recognition _icon="icon-recognition"}} + + {{#*inline "icon-speaking"}}{{/inline}} + {{> section/speaking _icon="icon-speaking"}} + + {{#*inline "icon-testimonials"}}{{/inline}} + {{> testimonials _icon="icon-testimonials"}} + + {{#if r.references}} + {{#section "references"}} +
+ {{#if r.contact.email}} +

References available on request

+ {{else}} +

References available on request

+ {{/if}} +
+ {{/section}} + {{/if}} + + +
+ + diff --git a/src/positive-pdf.css b/src/positive-pdf.css new file mode 100644 index 0000000..4017de9 --- /dev/null +++ b/src/positive-pdf.css @@ -0,0 +1,178 @@ +html, body, main, section, header, ul, p, h1, h2, h3 { + font-family: Calibri, 'Open Sans', sans-serif; + font-size: 14px; + line-height: 1.4; + margin: 0; padding: 0; + display: block; +} + +a { + color: #0064BD; + text-decoration: none; +} + +a:visited { + color: #7B0796; +} + +a:hover { + text-decoration: underline; +} + +h1 { + text-transform: uppercase; + font-size: +} + +h2 { + text-transform: uppercase; + color: #898989; + font-size: 2em; + position: relative; + font-weight: 400; +} + +h3, .tenure { + font-size: 1.5em; + font-weight: 300; +} + +h3 { + margin-top: 0; + margin-bottom: 5px; + width: 85%; + float: left; +} + +table { + width: 100%; + text-transform: uppercase; + font-size: 1.3em; +} + +td:first-child { + text-align: right; + color: #c00000; + /* letter-spacing: 2px; PDF hates letter spacing */ + font-weight: bold; +} + +td:last-child { + text-align: justify; /* HTML justification sucks, but in this case... */ +} + +hr { + display: none; +} + +main { + padding: 15px; + max-width: 800px; + margin: 0 auto; +} + +section { + margin-top: 2em; +} + +section > div { + margin-top: 1em; + overflow: hidden; /* Clear floated children */ +} + +section > div p { + clear: both; +} + +section > header { + position: relative; +} + +p + ul { + margin: 1em; +} + +ul { + clear: both; +} + +li { + margin-left: 2em; +} + +p, li { + text-align: justify; +} + +.tenure { + float: right; + color: #6F6F6F; + background-color: #F5F5F5; + border-radius: 6px; + padding: 4px 6px; + font-size: 85%; +} + +span.keywords { + font-size: 12px; + color: #B16666; +} + +thead { + display: none; +} + +main > header { + width: 100%; + float: left; + margin-bottom: 1em; +} + +h1 { + float: left; +} + +h1, h2, .label { + font-size: 2.5em; + text-transform: uppercase; + font-weight: 300; + font-family: 'Open Sans', 'Segoe UI', sans-serif; +} + +#contact { + clear: both; + float: right; + margin-top: 2px; +} + +#contact span + span { + margin-left: 10px; +} + +header > span.fa { + text-align: center; + margin-right: 3px; + position: absolute; + width: 40px; + top: 10px; + font-size: 30px; + /*transform: translateX(-110%); PDF no likey */ + margin-left: -50px; + color: #DADADA; +} + +.label { + float: right; + color: #DADADA; +} + +#summary { + color: #717171; + font-size: 1.25em; + margin-top: 6em; +} + +#skills td { + padding-top: 7px; + padding-bottom: 7px; +} diff --git a/src/positive-pdf.html b/src/positive-pdf.html new file mode 100644 index 0000000..3d63c75 --- /dev/null +++ b/src/positive-pdf.html @@ -0,0 +1,78 @@ + + + + + {{ r.name }} + + + {{{styleSheet "positive-pdf.css"}}} + + +
+
+

{{{initialWords r.name }}} {{{lastWord r.name }}}

+ {{{ r.info.label }}} +

+ {{#if r.contact.email}}{{/if}} + {{#if r.contact.phone}}{{{ r.contact.phone }}}{{/if}} + {{#if r.contact.website}}{{{ r.contact.website }}}{{/if}} +

+
+ + + {{#has "info.brief"}} +
+ {{{ r.info.brief }}} +
+ {{/has}} + + + {{!}} + + {{#*inline "icon-skills"}}{{/inline}} + {{> section/skills _icon="icon-skills"}} + + {{#*inline "icon-employment"}}{{/inline}} + {{> section/employment _icon="icon-employment" }} + + {{#*inline "icon-projects"}}{{/inline}} + {{> section/projects _icon="icon-projects"}} + + {{#*inline "icon-education"}}{{/inline}} + {{> section/education _icon="icon-education"}} + + {{#*inline "icon-affiliation"}}{{/inline}} + {{> section/affiliation _icon="icon-affiliation"}} + + {{#*inline "icon-service"}}{{/inline}} + {{> section/service _icon="icon-service"}} + + {{#*inline "icon-samples"}}{{/inline}} + {{> section/samples _icon="icon-samples"}} + + {{#*inline "icon-writing"}}{{/inline}} + {{> section/writing _icon="icon-writing"}} + + {{#*inline "icon-reading"}}{{/inline}} + {{> section/reading _icon="icon-reading"}} + + {{#*inline "icon-recognition"}}{{/inline}} + {{> section/recognition _icon="icon-recognition"}} + + {{#*inline "icon-speaking"}}{{/inline}} + {{> section/speaking _icon="icon-speaking"}} + + {{#*inline "icon-testimonials"}}{{/inline}} + {{> section/testimonials _icon="icon-testimonials"}} + + {{#*inline "icon-references"}}{{/inline}} + {{> section/references _icon="icon-references"}} + + +
+ diff --git a/theme.json b/theme.json new file mode 100644 index 0000000..0c6f074 --- /dev/null +++ b/theme.json @@ -0,0 +1,27 @@ +{ + "title": "positive", + "description": "A dynamic two-color résumé theme for technical professionals.", + "author": "hacksalot (https://github.com/hacksalot)", + "engine": "handlebars", + "inherits": { + "txt": "basis", + "md": "basis" + }, + "colors": { + "hyperlink": "C00000" + }, + "fonts": { + "all": { + "default": [ "Open Sans", "sans-serif" ], + "heading1": [ "Open Sans", "Helvetica Neue", "Helvetica", "Lato", "sans-serif" ], + "heading2": [ "Helvetica Neue", "Helvetica", "Lato", "sans-serif" ] + }, + "doc": { + "title": "Open Sans Light", + "heading1": "Open Sans Light", + "heading2": "Open Sans Light", + "heading3": "Open Sans Light", + "default": "Calibri" + } + } +} diff --git a/theme.png b/theme.png new file mode 100644 index 0000000..4a806fa Binary files /dev/null and b/theme.png differ