Initial commit

This commit is contained in:
BackIsBachus 2016-05-16 02:56:15 +02:00
commit 5fc53e78e8
27 changed files with 1723 additions and 0 deletions

29
.gitignore vendored Normal file
View File

@ -0,0 +1,29 @@
# Logs
logs
*.log
# Runtime data
pids
*.pid
*.seed
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# node-waf configuration
.lock-wscript
# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release
# Dependency directory
# https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
node_modules
out

21
LICENSE Normal file
View File

@ -0,0 +1,21 @@
The MIT License (MIT)
Copyright (c) 2016 Jean-Sébastien Renaud
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.

43
README.md Normal file
View File

@ -0,0 +1,43 @@
# fresh-theme-elegant
Responsive resume theme for [HackMyResume](https://github.com/hacksalot/HackMyResume) adapted for the FRESH schema from [Mudassir](https://github.com/mudassir0909)'s [jsonresume-theme-elegant](https://github.com/mudassir0909/jsonresume-theme-elegant).
I used [Antonio Ruberto](https://github.com/aruberto)'s [fresh-theme-bootstrap](https://github.com/aruberto/fresh-theme-bootstrap) theme as base guidelines to make this theme using the [Handlebar](http://handlebarsjs.com/) template engine.
For now this **only** a **HTML** theme.
I'm open to suggestion concerning the frontend code and the UI/UX, see [Contributing](#contributing) for more information.
## Sections
The sectionss currently available are:
* Profile (with name, photo, label, address, phone, email, website, languages and social links)
* About (with you info.brief)
* Work Experience (employment)
* Skills
* Education
* Projects
* Volunteer Work (service)
* Interests
* Awards (recognition)
* References
If a section is not used in your FRESH resume it will simply not be displayed
## How to use it
Go where your FRESH JSON resume is located and run:
```
npm install fresh-theme-elegant
```
Then to export your resume using this template run:
```
hackmyresume BUILD resume.json TO out/resume.all --theme node_modules/fresh-theme-elegant/
```
## Goals
In the long term this template will support all the FRESH sections and will let the final user decide what to put in their FRESH resume.
This template will also aim at supporting other languages that English.
## Contributing
There are many ways you can help improve this theme (and most don't even require coding):
* Open an issue to report a bug with the theme
* Open an issue to discuss the layout of a section (or of the entire resume) and we'll find what fits best
* Open an issue to request a particular section or field to be added (if you can describe how you imagine the layout it's even better)
* Open an issue to request the addition of a new feature, like displaying the duration between start to end (yes it is already on my to-do list)
* Fork the repo, make a new branch with your changes and make a pull request describing the changes you want to apply (bug fix, feature, section, layout, ...)

21
package.json Normal file
View File

@ -0,0 +1,21 @@
{
"name": "fresh-theme-elegant",
"version": "0.1.0",
"description": "Responsive resume theme using using the fresh theme from JSON-Resume.",
"repository": {
"type": "git",
"url": "https://github.com/BackIsBachus/fresh-theme-elegant"
},
"keywords": [
"fresh-themes",
"hackmyresume",
"fresh",
"fresca"
],
"author": "BackIsBachus (https://github.com/BackIsBachus)",
"license": "MIT",
"bugs": {
"url": "https://github.com/BackIsBachus/fresh-theme-elegant/issues"
},
"homepage": "https://github.com/BackIsBachus/fresh-theme-elegant#readme"
}

13
src/partials/about.html Normal file
View File

@ -0,0 +1,13 @@
{{#if r.info.brief}}
<div id="about" class="detail">
<div class="icon"><i class="fs-lg fa fa-user" aria-hidden="true"></i><span class="mobile-title">About</span></div>
<div class="info">
<h4 class="title text-uppercase">About</h4>
<div class="card card-nested">
<div itemprop="description" class="content mop-wrapper">
<p>{{r.info.brief}}</p>
</div>
</div>
</div>
</div>
{{/if}}

View File

@ -0,0 +1,17 @@
<section class="col-md-9 card-wrapper pull-right">
<div class="card background-card">
<h4 class="text-uppercase">Background</h4>
<hr/>
<div class="background-details">
{{> about}}
{{> experience}}
{{> skills}}
{{> education}}
{{> projects}}
{{> volunteer}}
{{> interests}}
{{> recognition}}
{{> references}}
</div>
</div>
</section>

8
src/partials/body.html Normal file
View File

@ -0,0 +1,8 @@
<div class="container-fluid">
<div class="row main clearfix">
{{> nav}}
{{> profile}}
{{> background}}
</div>
</div>
{{> bottom-script}}

View File

@ -0,0 +1,47 @@
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.2.0/js/tooltip.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.2.0/js/collapse.js"></script>
<script>
$(function() {
var toggleFloatingMenu = function() {
$('.js-floating-nav').toggleClass('is-visible');
$('.js-floating-nav-trigger').toggleClass('is-open');
};
$(".background-card").css("min-height", window.screen.availHeight + "px");
$("[rel=tooltip]").tooltip();
$('.js-floating-nav-trigger').on('click', function(e) {
e.preventDefault();
toggleFloatingMenu();
});
$('.js-floating-nav a').on('click', toggleFloatingMenu);
$("#remaining-profiles").on('show.bs.collapse', function() {
$('.js-profiles-collapse > i')
.removeClass('fa-chevron-down')
.addClass('fa-chevron-up');
});
$("#remaining-profiles").on('hidden.bs.collapse', function() {
$('.js-profiles-collapse > i')
.removeClass('fa-chevron-up')
.addClass('fa-chevron-down');
});
});
</script>
<script>
WebFontConfig = {
google: {
families: ['Lato:300,400,700:latin']
}
};
(function() {
var wf = document.createElement('script');
wf.src = ('https:' == document.location.protocol ? 'https' : 'http') +
'://ajax.googleapis.com/ajax/libs/webfont/1/webfont.js';
wf.type = 'text/javascript';
wf.async = 'true';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(wf, s);
})();
</script>

1
src/partials/date.html Normal file
View File

@ -0,0 +1 @@
<p class="text-muted"><small><span class="space-right">{{dateRange this}}</span>{{#if location}}{{location}}{{/if}}</small></p>

View File

@ -0,0 +1,26 @@
{{#if r.education}}
<div id="education" class="detail">
<div class="icon"><i class="fs-lg fa fa-graduation-cap"></i><span class="mobile-title">Education</span></div>
<div class="info">
<h4 class="title text-uppercase">Education</h4>
<div class="content">
<ul class="list-unstyled">
{{#each r.education.history}}
<li class="card card-nested">
<div class="content">
<p class="clear-margin relative"><strong>{{area}}{{title}}{{#if studyType}} ({{studyType}}){{/if}},&nbsp;</strong><a href="{{url}}" target="_blank">{{institution}}</a></p>
{{> date}}
<div class="space-top labels">
{{#each curriculum}}
<span class="label label-keyword">{{this}}</span>
{{/each}}
</div>
{{> highlights}}
</div>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
{{/if}}

View File

@ -0,0 +1,21 @@
{{#if r.employment}}
<div id="work-experience" class="detail">
<div class="icon"><i class="fs-lg fa fa-building"></i><span class="mobile-title">Work Experience</span></div>
<div class="info">
<h4 class="title text-uppercase">Work Experience</h4>
<p>{{r.employment.summary}}</p>
<ul class="list-unstyled">
{{#each r.employment.history}}
<li class="card card-nested clearfix">
<div class="content">
<p class="clear-margin relative"><strong>{{{position}}}</strong>,&nbsp;<a href="{{url}}" target="_blank">{{employer}}</a></p>
{{> date}}
{{{summary}}}
{{> highlights}}
</div>
</li>
{{/each}}
</ul>
</div>
</div>
{{/if}}

7
src/partials/head.html Normal file
View File

@ -0,0 +1,7 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<title>Jean-Sébastien Renaud</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" />
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.6.2/css/font-awesome.min.css" rel="stylesheet" integrity="sha384-aNUYGqSUL9wG/vP7+cWZ5QOM4gsQou3sBfWRr/8S3R1Lv0rysEmnwsRKMbhiQX/O" crossorigin="anonymous" />
{{> style}}

View File

@ -0,0 +1,5 @@
<ul>
{{#each highlights}}
<li>{{this}}</li>
{{/each}}
</ul>

View File

@ -0,0 +1,23 @@
{{#if r.interests}}
<div id="interests" class="detail">
<div class="icon"><i class="fs-lg fa fa-heart"></i><span class="mobile-title">Interests</span></div>
<div class="info">
<h4 class="title text-uppercase">Interests</h4>
<div class="content">
<ul class="list-unstyled">
{{#each r.interests}}
<li class="card card-nested">
<p><strong>{{name}}</strong></p>
{{{summary}}}
<div class="space-top labels">
{{#each keywords}}
<span class="label label-keyword">{{this}}</span>
{{/each}}
</div>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
{{/if}}

14
src/partials/nav.html Normal file
View File

@ -0,0 +1,14 @@
<a href="#" class="js-floating-nav-trigger floating-nav-trigger"><i class="fa fa-bars"></i><span class="close-icon">&times;</span></a>
<nav class="floating-nav js-floating-nav">
<ul class="list-unstyled">
{{#if r.info.brief}}<li><a href="#about"><i class="mr-10 fa fa-user"></i>About</a></li>{{/if}}
{{#if r.employment}}<li><a href="#work-experience"><i class="mr-10 fa fa-building"></i>Work Experience</a></li>{{/if}}
{{#if r.skills}}<li><a href="#skills"><i class="mr-10 fa fa-gears"></i>Skills</a></li>{{/if}}
{{#if r.education}}<li><a href="#education"><i class="mr-10 fa fa-graduation-cap"></i>Education</a></li>{{/if}}
{{#if r.projects}}<li><a href="#projects"><i class="mr-10 fa fa-star"></i>Projects</a></li>{{/if}}
{{#if r.service}}<li><a href="#volunteer-work"><i class="mr-10 fa fa-child"></i>Volunteer Work</a></li>{{/if}}
{{#if r.interests}}<li><a href="#interests"><i class="mr-10 fa fa-heart"></i>Interests</a></li>{{/if}}
{{#if r.recognition}}<li><a href="#awards"><i class="mr-10 fa fa-trophy"></i>Awards</a></li>{{/if}}
{{#if r.references}}<li><a href="#references"><i class="mr-10 fa fa-thumbs-up"></i>References</a></li>{{/if}}
</ul>
</nav>

27
src/partials/profile.html Normal file
View File

@ -0,0 +1,27 @@
<section class="col-md-3 card-wrapper profile-card-wrapper affix">
<div class="card profile-card"><span class="profile-pic-container">
<div class="profile-pic">
{{#if r.info.image}}
<img data-src="holder.js/100x100" alt="{{{r.name}}}" src="{{r.info.image}}" itemprop="image" class="media-object img-circle center-block"/>
{{/if}}
</div>
<div class="name-and-profession text-center"><h3 itemprop="name"><b>{{{r.name}}}</b></h3><h5 itemprop="jobTitle" class="text-muted">{{r.info.label}}</h5></div></span>
<hr/>
<div class="contact-details clearfix">
{{#if r.location.city}}<div class="detail"><span class="icon"><i class="icon fs-lg fa fa-map-marker"></i></span><span class="info">{{#if r.location.address}}{{r.location.address}}, {{/if}}{{r.location.city}}{{#if r.location.region}}, {{r.location.region}}{{/if}}{{#if r.location.country}}, {{r.location.country}}{{/if}}</span></div>{{/if}}
<div class="detail"><span class="icon"><i class="icon fs-lg fa fa-phone"></i></span><span itemprop="telephone" class="info">{{r.contact.phone}}</span></div>
<div class="detail"><span class="icon"><i class="icon fs-lg fa fa-envelope-o"></i></span><span class="info"><a href="mailto:{{{r.contact.email}}}" itemprop="email" class="link-disguise">{{{r.contact.email}}}</a></span>
</div>
<div class="detail"><span class="icon"><i class="icon fs-lg fa fa-link"></i></span><span class="info">{{{r.contact.website}}}</span></div>
<div class="detail"><span title="Languages I speak" class="icon"><i class="icon fs-lg fa fa-language"></i></span><span class="info">{{#each r.languages}}{{language}}{{#unless @last}}, {{/unless}}{{/each}}</span></div>
</div>
<hr/>
<div class="social-links text-center">
<div>
{{#each r.social}}
<a href="{{url}}" target="_blank" data-toggle="tooltip" title="{{../r.name}} on {{network}}" class="fs-2x social-link"><i class="link-{{toLower network}} fa fa-{{toLower network}}"></i></a>
{{/each}}
</div>
</div>
</div>
</section>

View File

@ -0,0 +1,20 @@
{{#if r.projects}}
<div id="projects" class="detail">
<div class="icon"><i class="fs-lg fa fa-star"></i><span class="mobile-title">Projects</span></div>
<div class="info">
<h4 class="title text-uppercase">Projects</h4>
<ul class="list-unstyled">
{{#each r.projects}}
<li class="card card-nested clearfix">
<div class="content">
<p class="clear-margin relative"><strong>{{role}}</strong>,&nbsp;<a href="{{url}}" target="_blank">{{title}}</a></p>
{{> date}}
{{{summary}}}
{{> highlights}}
</div>
</li>
{{/each}}
</ul>
</div>
</div>
{{/if}}

View File

@ -0,0 +1,23 @@
{{#if r.recognition}}
<div id="awards" class="detail">
<div class="icon"><i class="fs-lg fa fa-trophy"></i><span class="mobile-title">Awards</span></div>
<div class="info">
<h4 class="title text-uppercase">Awards</h4>
<div class="content">
<ul class="list-unstyled clear-margin">
{{#each r.recognition}}
<li class="card card-nested">
<div class="content">
<p itemprop="award" class="clear-margin"><strong>{{title}} </strong><a href="{{url}}" target="_blank">{{from}}</a></p>
<p class="text-muted"><small>Awarded on: {{date}}</small></p>
<div class="mop-wrapper">
{{{summary}}}
</div>
</div>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
{{/if}}

View File

@ -0,0 +1,23 @@
{{#if r.references}}
<div id="references" class="detail">
<div class="icon"><i class="fs-lg fa fa-thumbs-up"></i><span class="mobile-title">References</span></div>
<div class="info">
<h4 class="title text-uppercase">References</h4>
<div class="content">
<ul class="list-unstyled clear-margin">
{{#each r.references}}
{{#unless private}}
<li class="card card-nested"><strong>{{name}}, </strong>{{role}}
<blockquote class="quote">
<div class="mop-wrapper">
{{{summary}}}
</div>
</blockquote>
</li>
{{/unless}}
{{/each}}
</ul>
</div>
</div>
</div>
{{/if}}

36
src/partials/skills.html Normal file
View File

@ -0,0 +1,36 @@
<div id="skills" class="detail">
<div class="icon"><i class="fs-lg fa fa-cogs"></i><span class="mobile-title">Skills</span></div>
<div class="info">
<h4 class="title text-uppercase">Skills</h4>
<div class="content">
<ul class="list-unstyled">
{{#each r.skills.sets}}
<li class="card card-nested card-skills">
<div rel="tooltip" title="{{level}}" data-placement="left" class="skill-level">
<div class="skill-progress {{toLower level}}"></div>
</div>
<div class="skill-info"><strong>{{name}}</strong>
<div class="space-top labels">
{{#each skills}}
<span class="label label-keyword">{{this}}</span>
{{/each}}
</div>
</div>
</li>
{{/each}}
{{#each r.skills.list}}
<li class="card card-nested card-skills">
<div rel="tooltip" title="{{level}}" data-placement="left" class="skill-level">
<div class="skill-progress {{toLower level}}"></div>
</div>
<div class="skill-info"><strong>{{name}} ({{years}} years)</strong>
<div class="space-top">
<p>{{summary}}</p>
</div>
</div>
</li>
{{/each}}
</ul>
</div>
</div>
</div>

698
src/partials/style.html Normal file
View File

@ -0,0 +1,698 @@
<style>
..relative {
position: relative;
}
.clear-margin {
margin: 0;
}
.space-top {
margin-top: 10px;
}
.space-right {
margin-right: 10px;
}
.mr-5 {
margin-right: 5px;
}
.mr-10 {
margin-right: 10px;
}
.ml-5 {
margin-left: 5px;
}
.labels {
line-height: 2;
}
.label-keyword {
display: inline-block;
background: #7eb0db;
color: white;
font-size: 0.9em;
padding: 5px;
border: 1px solid #357ebd;
margin-right: 5px;
}
.label-keyword:last-child {
margin-right: 0;
}
.link-disguise {
color: inherit;
}
.link-disguise:hover {
color: inherit;
}
.clear-margin {
margin: 0;
}
@media (max-width: 992px) {
.clear-margin-sm {
margin-bottom: 0;
}
}
.fs-lg {
font-size: 1.33333333em;
line-height: .75em;
vertical-align: -15%;
}
.fs-2x {
font-size: 2em;
}
.fs-3x {
font-size: 3em;
}
.fs-4x {
font-size: 4em;
}
.btn-circle-sm {
width: 28px;
height: 28px;
line-height: 28px;
border-radius: 50%;
text-align: center;
padding: 0;
outline: none !important;
}
body {
font-family: 'Lato';
background: #f0f0f0;
color: #333333;
}
.main {
padding: 5px;
}
.card {
background: #ffffff;
border: 1px solid #e6e6e6;
border-radius: 3px;
min-height: 300px;
padding: 10px;
}
.card-nested {
min-height: 0;
margin-bottom: 10px;
border-width: 1px 0 0 0;
}
.card-nested:before,
.card-nested:after {
content: " ";
display: table;
}
.card-nested:after {
clear: both;
}
@media (max-width: 480px) {
.card-nested {
padding: 5px 0;
}
}
.background-card {
padding: 10px 20px;
}
.card-wrapper {
padding: 5px;
}
@media (max-width: 992px) {
.card-wrapper {
float: none !important;
}
}
.background-details .detail {
display: table;
padding: 10px 0;
}
.background-details .detail .icon {
min-width: 45px;
max-width: 45px;
text-align: center;
}
.background-details .detail .info {
width: 100%;
}
.background-details .detail .title,
.background-details .detail .icon {
color: #707070;
}
.background-details .detail .mobile-title {
display: none;
}
@media (max-width: 480px) {
.background-details .detail .mobile-title {
display: inline-block;
margin-left: 5px;
font-weight: bold;
text-transform: uppercase;
vertical-align: middle;
}
}
.background-details .detail .icon,
.background-details .detail .info {
display: table-cell;
padding: 0 10px;
}
@media (max-width: 480px) {
.background-details .detail {
display: block;
}
.background-details .detail .icon {
max-width: inherit;
min-width: inherit;
text-align: left;
}
.background-details .detail .icon,
.background-details .detail .info {
display: block;
padding: 10px 0;
}
.background-details .detail .title {
display: none;
}
}
.info .content.has-sidebar {
width: 80%;
box-sizing: border-box;
float: left;
padding: 0 10px;
border-right: 1px solid #cdcdcd;
}
@media (max-width: 992px) {
.info .content.has-sidebar {
width: 100%;
border-right: 0;
}
}
@media (max-width: 480px) {
.info .content.has-sidebar {
padding: 0 2px;
}
}
.info .sidebar {
margin-left: 80%;
box-sizing: border-box;
padding: 10px;
}
@media (max-width: 480px) {
ul {
padding-left: 25px;
}
}
.current-event {
font-size: 8px;
color: #5ACE24;
position: absolute;
right: 100%;
top: 4px;
left: -10px;
}
/*
Credits: http://codyhouse.co/demo/smart-fixed-navigation/index.html
*/
.floating-nav-trigger {
width: 50px;
height: 50px;
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.24);
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.24);
-webkit-transition: background-color 0.5s ease;
-o-transition: background-color 0.5s ease;
transition: background-color 0.5s ease;
display: block;
border-radius: 50%;
text-align: center;
background-color: white;
font-size: 1.5em;
color: #357ebd;
z-index: 100;
position: fixed;
bottom: 10px;
right: 10px;
text-decoration: none !important;
}
.floating-nav-trigger > [class^="fa-"],
.floating-nav-trigger [class*=" fa-"],
.floating-nav-trigger > .close-icon {
line-height: 50px;
}
.floating-nav-trigger .close-icon {
display: none;
}
.floating-nav-trigger:hover {
color: #1f496e;
background-color: #e6e6e6;
}
.floating-nav-trigger.is-open {
-webkit-box-shadow: none;
box-shadow: none;
}
.floating-nav-trigger.is-open .close-icon {
display: inherit;
}
.floating-nav-trigger.is-open .fa-bars {
display: none;
}
.floating-nav-trigger.is-open:hover {
background-color: white;
}
.floating-nav {
-webkit-transform: scale(0);
-ms-transform: scale(0);
-o-transform: scale(0);
transform: scale(0);
-webkit-transform-origin: 100% 100%;
-moz-transform-origin: 100% 100%;
-ms-transform-origin: 100% 100%;
transform-origin: 100% 100%;
-webkit-transition: transform 0.3s, visibility 0s 0.3s;
-o-transition: transform 0.3s, visibility 0s 0.3s;
transition: transform 0.3s, visibility 0s 0.3s;
-webkit-box-shadow: 0 1px 4px rgba(0, 0, 0, 0.24);
box-shadow: 0 1px 4px rgba(0, 0, 0, 0.24);
position: fixed;
z-index: 50;
right: 10px;
bottom: 10px;
background-color: white;
width: 90%;
max-width: 400px;
visibility: hidden;
overflow: hidden;
}
.floating-nav ul {
font-size: 1.2em;
margin: 0;
}
.floating-nav ul li {
border-bottom: 1px solid #eff2f6;
}
.floating-nav ul li a {
padding: 20px;
text-decoration: none;
color: #357ebd;
display: block;
}
.floating-nav ul li a:hover {
color: #1f496e;
}
.floating-nav ul li:last-child {
border-bottom: 0;
}
.floating-nav.is-visible {
-webkit-transform: scale(1);
-ms-transform: scale(1);
-o-transform: scale(1);
transform: scale(1);
-webkit-transition: transform 0.3s, visibility 0s 0s;
-o-transition: transform 0.3s, visibility 0s 0s;
transition: transform 0.3s, visibility 0s 0s;
visibility: visible;
}
@media (max-width: 992px) {
.profile-card-wrapper {
position: relative;
}
}
.profile-pic {
padding: 20px 0;
}
@media (max-width: 992px) {
.profile-pic {
padding: 10px 0;
}
}
.profile-pic img {
width: 100px;
height: 100px;
}
@media (max-width: 992px) {
.name {
margin-top: 10px;
}
}
@media (max-width: 768px) {
.contact-details {
text-align: center;
}
}
.contact-details .detail {
display: table;
padding: 10px 0;
}
.contact-details .detail .icon {
padding: 0 10px;
color: #707070;
}
@media (max-width: 992px) {
.contact-details .detail .icon {
padding: 0 5px 0 0;
}
}
.contact-details .detail .info {
font-size: 0.8em;
}
.contact-details .detail .icon,
.contact-details .detail .info {
display: table-cell;
vertical-align: middle;
}
@media (max-width: 768px) {
.contact-details .detail {
position: relative;
float: left;
width: 100%;
min-height: 1px;
padding-left: 15px;
padding-right: 15px;
}
}
@media (max-width: 992px) {
.contact-details .detail {
position: relative;
min-height: 1px;
padding-left: 15px;
padding-right: 15px;
padding: 10px;
}
.contact-details .detail .icon,
.contact-details .detail .info {
display: inline-block;
}
}
@media (max-width: 992px) and (min-width: 768px) {
.contact-details .detail {
float: left;
width: 25%;
}
}
.social-links {
line-height: 2.5;
}
.social-link {
margin-left: 5px;
min-width: 35px;
display: inline-block;
}
.social-link:first-child {
margin-left: 0;
}
.social-link:hover {
text-decoration: none;
}
.link-github {
color: #454545;
}
.link-github:hover,
.link-github:focus {
text-decoration: none;
color: #2b2b2b;
}
.link-twitter {
color: #33ccff;
}
.link-twitter:hover,
.link-twitter:focus {
text-decoration: none;
color: #00bfff;
}
.link-blog {
color: #f36f24;
}
.link-blog:hover,
.link-blog:focus {
text-decoration: none;
color: #d8560c;
}
.link-linkedin {
color: #007bb6;
}
.link-linkedin:hover,
.link-linkedin:focus {
text-decoration: none;
color: #005983;
}
.link-skype {
color: #12a5f4;
}
.link-skype:hover,
.link-skype:focus {
text-decoration: none;
color: #0986ca;
}
.link-instagram {
color: #3f729b;
}
.link-instagram:hover,
.link-instagram:focus {
text-decoration: none;
color: #305777;
}
.link-stackoverflow {
color: #8e8e92;
}
.link-stackoverflow:hover,
.link-stackoverflow:focus {
text-decoration: none;
color: #747479;
}
.link-stackexchange {
color: #62b0df;
}
.link-stackexchange:hover,
.link-stackexchange:focus {
text-decoration: none;
color: #389bd6;
}
.link-lastfm {
color: #d12127;
}
.link-lastfm:hover,
.link-lastfm:focus {
text-decoration: none;
color: #a51a1f;
}
.link-soundcloud {
color: #e8822d;
}
.link-soundcloud:hover,
.link-soundcloud:focus {
text-decoration: none;
color: #cc6916;
}
.link-googleplus {
color: #dd4b39;
}
.link-googleplus:hover,
.link-googleplus:focus {
text-decoration: none;
color: #c23321;
}
.link-youtube {
color: #dd4b39;
}
.link-youtube:hover,
.link-youtube:focus {
text-decoration: none;
color: #c23321;
}
.link-pinterest {
color: #bd091f;
}
.link-pinterest:hover,
.link-pinterest:focus {
text-decoration: none;
color: #8c0717;
}
.link-gratipay {
color: #663300;
}
.link-gratipay:hover,
.link-gratipay:focus {
text-decoration: none;
color: #331a00;
}
.link-vimeo {
color: #17b3e8;
}
.link-vimeo:hover,
.link-vimeo:focus {
text-decoration: none;
color: #128fba;
}
.link-behance {
color: #2c98cf;
}
.link-behance:hover,
.link-behance:focus {
text-decoration: none;
color: #2379a5;
}
.link-codepen {
color: #1c1c1c;
}
.link-codepen:hover,
.link-codepen:focus {
text-decoration: none;
color: #020202;
}
.link-foursquare {
color: #fa4778;
}
.link-foursquare:hover,
.link-foursquare:focus {
text-decoration: none;
color: #f91554;
}
.link-reddit {
color: #545454;
}
.link-reddit:hover,
.link-reddit:focus {
text-decoration: none;
color: #3b3b3b;
}
.link-spotify {
color: #acd200;
}
.link-spotify:hover,
.link-spotify:focus {
text-decoration: none;
color: #829f00;
}
.link-tumblr {
color: #2d4661;
}
.link-tumblr:hover,
.link-tumblr:focus {
text-decoration: none;
color: #1d2d3e;
}
.link-dribbble {
color: #ce366f;
}
.link-dribbble:hover,
.link-dribbble:focus {
text-decoration: none;
color: #a82959;
}
.link-facebook {
color: #4b6daa;
}
.link-facebook:hover,
.link-facebook:focus {
text-decoration: none;
color: #3b5687;
}
.link-angellist {
color: #000000;
}
.link-angellist:hover,
.link-angellist:focus {
text-decoration: none;
color: #000000;
}
.link-bitbucket {
color: #205081;
}
.link-bitbucket:hover,
.link-bitbucket:focus {
text-decoration: none;
color: #163758;
}
.link-hackernews {
color: #ff6600;
}
.link-hackernews:hover,
.link-hackernews:focus {
text-decoration: none;
color: #cc5200;
}
.link-exercism {
color: #d81d4e;
}
.link-exercism:hover,
.link-exercism:focus {
text-decoration: none;
color: #ab173e;
}
.card-skills {
position: relative;
}
.skill-level {
border-radius: 3px;
position: absolute;
top: 10px;
bottom: 10px;
left: 0;
width: 10px;
box-shadow: inset 0 0 1px rgba(0, 0, 0, 0.2);
}
.skill-level .skill-progress {
position: absolute;
border-radius: 3px;
bottom: 0;
width: 100%;
-webkit-transition: height 1s ease;
}
.skill-level .skill-progress.beginner {
height: 50%;
background: #e74c3c;
}
.skill-level .skill-progress.intermediate {
height: 70%;
background: #f1c40f;
}
.skill-level .skill-progress.advanced {
height: 80%;
background: #428bca;
}
.skill-level .skill-progress.master {
height: 95%;
background: #5cb85c;
}
.skill-info {
margin-left: 10px;
}
@media (max-width: 480px) {
.skill-info {
margin-left: 20px;
}
}
@media (max-width: 768px) {
.quote {
font-size: inherit;
}
}
@media print {
a[href]:after {
content: none !important;
}
.profile-card {
text-align: center;
}
.profile-pic {
display: inline-block;
vertical-align: middle;
}
.profile-pic img {
border-radius: 0;
}
.name-and-profession {
display: inline-block;
vertical-align: middle;
margin-left: 15px;
}
.contact-details .detail {
position: relative;
float: left;
width: 25%;
min-height: 1px;
padding-left: 15px;
padding-right: 15px;
padding: 0;
}
.floating-nav,
.floating-nav-trigger {
display: none;
}
.pagebreak {
page-break-before: always;
}
}
</style>

View File

@ -0,0 +1,22 @@
{{#if r.service}}
<div id="volunteer-work" class="detail">
<div class="icon"><i class="fs-lg fa fa-child"></i><span class="mobile-title">Volunteer Work</span></div>
<div class="info">
<h4 class="title text-uppercase">Volunteer Work</h4>
<div class="content">
<ul class="list-unstyled">
{{#each r.service.history}}
<li class="card card-nested">
<div class="content">
<p class="clear-margin relative"><strong>{{position}}, </strong><a href="{{url}}" target="_blank">{{organization}}</a></p>
{{> date}}
{{{summary}}}
{{> highlights}}
</div>
</li>
{{/each}}
</ul>
</div>
</div>
</div>
{{/if}}

10
src/template-html.html Normal file
View File

@ -0,0 +1,10 @@
<!DOCTYPE html>
<html>
<html lang="en">
<head>
{{> head}}
</head>
<body itemscope="itemscope" itemtype="http://schema.org/Person">
{{> body}}
</body>
</html>

1
test/README.md Normal file
View File

@ -0,0 +1 @@
# fresh-theme-elegant-test

16
test/package.json Normal file
View File

@ -0,0 +1,16 @@
{
"name": "fresh-theme-elegant-test",
"version": "0.1.0",
"description": "fresh-theme-elegant-test",
"repository": "https://github.com/BackIsBachus/fresh-theme-elegant/test",
"author": "BackIsBachus (https://github.com/BackIsBachus)",
"license": "MIT",
"bugs": {
"url": "https://github.com/BackIsBachus/fresh-theme-elegant/issues"
},
"homepage": "https://github.com/BackIsBachus/fresh-theme-elegant#readme",
"devDependencies": {
"fresh-theme-elegant": "../",
"hackmyresume": "^1.8.0"
}
}

547
test/resume.json Normal file
View File

@ -0,0 +1,547 @@
{
"name": "Jane Q. Fullstacker",
"meta": {
"format": "FRESH@0.4.0",
"version": "0.3.0"
},
"info": {
"label": "Senior Developer",
"characterClass": "Programmer",
"brief": "**Imaginary full-stack software developer with 6+ years industry experience** specializing in scalable cloud architectures for this, that, and the other. A native of southern CA, Jane enjoys hiking, mystery novels, and the company of Rufus, her two-year-old beagle.",
"image": "jane_doe.png",
"quote": "Be the change you want to see in the world."
},
"contact": {
"website": "http://janef.me/blog",
"phone": "1-650-999-7777",
"email": "jdoe@onecoolstartup.io",
"other": [
{
"label": "Home Phone",
"flavor": "phone",
"value": "1-650-999-4321"
},
{
"label": "Work Phone",
"flavor": "phone",
"value": "1-650-777-1234"
},
{
"label": "Personal Email",
"flavor": "email",
"value": "jane@janef.me"
}
]
},
"location": {
"address": "Jane Fullstacker\n123 Somewhere Rd.\nMountain View, CA 94035",
"city": "Mountain View",
"region": "CA",
"code": "94035",
"country": "US"
},
"projects": [
{
"title": "HackMyResume",
"category": "FOSS",
"role": "contributor",
"url": "http://please.hackmyresume.com",
"start": "2015-09",
"repo": "https://github.com/hacksalot/hackmyresume",
"description": "A resume authoring and analysis tool for OS X, Linux, and Windows.",
"summary": "Exemplar user for HackMyResume and FluentCV!",
"keywords": ["JavaScript", "Node.js", "cross-platform", "JSON"],
"media": [
{
"category": "download",
"url": "https://www.npmjs.com/package/hackmyresume"
}
]
},
{
"title": "Augmented Android",
"category": "commercial",
"role": "co-creator",
"url": "http://project.website.com",
"repo": "http://repo.website.com",
"description": "An augmented reality app for Android.",
"start": "2012-02",
"end": "2014-01",
"summary": "Performed flagship product conceptualization and development.",
"keywords": ["Android", "Java", "Xamarin"]
},
{
"title": "Blog",
"category": "personal",
"role": "creator",
"url": "http://myblog.jane.com/blog",
"description": "My programming blog. Powered by Jekyll.",
"summary": "Conceptualization, design, development, and deployment.",
"keywords": ["Jekyll", "Ruby", "HTML 5", "JavaScript", "HTTP", "LAMP"]
}
],
"social": [
{
"label": "GitHub",
"network": "GitHub",
"user": "janef-was-here",
"url": "https://github.com/janef-was-here"
},
{
"label": "Twitter",
"network": "Twitter",
"user": "janef-was-here",
"url": "https://twitter.com/janef-was-here"
}
],
"employment": {
"summary": "7+ years industry IT and software development experience.",
"history": [
{
"employer": "One Cool Startup",
"url": "https://onecool.io/does-not-exist",
"position": "Head Code Ninja",
"summary": "Development team manager for [OneCoolApp](https://en.wikipedia.org/wiki/Vaporware) and OneCoolWebsite, a free social network tiddlywink generator and lifestyle portal with over 200,000 users.",
"start": "2013-09",
"current": true,
"keywords": ["Agile","PM","Amazon Web Services","AWS"],
"highlights": ["Managed a 5-person development team", "Accomplishment 2", "Etc."]
},
{
"employer": "Veridian Dynamics",
"url": "https://en.wikipedia.org/wiki/Better_Off_Ted#Plot",
"position": "Principal Developer",
"summary": "Developer on numerous projects culminating in technical lead role for the [Jabberwocky project](http://betteroffted.wikia.com/wiki/Jabberwocky) and promotion to principal developer.",
"start": "2011-07",
"end": "2013-08",
"keywords": ["C++","C","Linux"],
"highlights": ["Managed a 5-person development team", "Accomplishment 2", "Etc."]
},
{
"employer": "Stark Industries",
"position": "IT Administrator",
"summary": "Junior programmer with heavy code responsibilities. Promoted to intermediate role after 6 months.",
"start": "2008-10",
"end": "2011-06",
"keywords": ["Novell","Active Directory","Linux","Windows"],
"highlights": ["Promoted to intermediate developer after 6 months", "Accomplishment 2", "Etc."]
},
{
"employer": "Dunder Mifflin",
"position": "Intern",
"summary": "Performed IT administration and deployments for Dunder Mifflin.",
"start": "2008-06",
"end": "2008-09",
"keywords": ["Novell","Active Directory","Linux","Windows"],
"highlights": ["Supervised roll-out of Dunder Mifflin Infinity website.", "Performed mission-critical system backups and ", "Etc."]
}
]
},
"education": {
"summary": "",
"level": "degree",
"degree": "BSCS",
"history": [
{
"institution": "Cornell University",
"title": "BSCS",
"url": "https://www.cornell.edu/",
"start": "2005-09",
"end": "2008-05",
"grade": "3.5",
"summary": "A multiline summary of the education.",
"curriculum": ["Course 1", "Course 2", "Course 2"]
},
{
"institution": "Medfield College",
"url": "https://en.wikipedia.org/wiki/Medfield_College",
"start": "2003-09",
"end": "2005-06",
"grade": "3.2",
"summary": "A multiline summary of the education.",
"curriculum": ["Course 1", "Course 2", "Course 2"]
}
]
},
"affiliation": {
"summary": "Member of numerous collegiate and professional groups and organizations.",
"history": [
{
"role": "Member",
"organization": "IEEE",
"url": "https://www.ieee.org/index.html",
"start": "2013-06",
"summary": "Member in good standing since 2013-06."
},
{
"role": "Member",
"organization": "Apple Developer Network",
"url": "https://developer.apple.com/",
"summary": "Member of the [Apple Developer program](https://developer.apple.com/) since 2008."
},
{
"role": "Subscriber",
"organization": "MSDN",
"url": "https://msdn.microsoft.com",
"start": "2010",
"summary": "Super-Ultra-gold level Ultimate Access MSDN subscriber package with subscription toaster and XBox ping pong racket."
},
{
"role": "Coordinator",
"organization": "Campus Coder's Meetup",
"start": "2003-02",
"end": "2004-04",
"summary": "Host of a monthly **campus-wide meetup for CS students**. Code, coffee, and crullers!"
}
]
},
"service": {
"summary": "Active US Army Reserve member and Technology for Tots technical consultant and volunteer coordinator.",
"history": [
{
"flavor": "volunteer",
"position": "Technical Consultant",
"organization": "Technology for Tots",
"url": "http://technology-for-tots.org",
"start": "2003-11",
"end": "2005-06",
"summary": "Summary of this volunteer stint.",
"highlights": ["Accomplishment 1", "Accomplishment 2", "etc"]
},
{
"flavor": "military",
"position": "NCO",
"organization": "US Army Reserves",
"url": "http://www.usar.army.mil/",
"start": "1999-11",
"end": "2003-06",
"summary": "Summary of this military stint.",
"highlights": ["Accomplishment 1", "Accomplishment 2", "etc"]
}
]
},
"skills": {
"sets": [
{
"name": "Web",
"level": "advanced",
"skills": [
"JavaScript", "HTML 5", "CSS", "LAMP", "MVC", "REST"
]
},
{
"name": "JavaScript",
"level": "master",
"skills": [
"Node.js", "Angular.js", "jQuery", "Bootstrap", "React.js", "Backbone.js"
]
},
{
"name": "Database",
"level": "intermediate",
"skills": [
"MySQL", "PostgreSQL", "NoSQL", "ORM", "Hibernate"
]
},
{
"name": "Cloud",
"level": "intermediate",
"skills": [
"AWS", "EC2", "RDS", "S3", "Azure", "Dropbox"
]
},
{
"name": "Project",
"level": "beginner",
"skills": [
"Agile", "TFS", "Unified Process", "MS Project"
]
}
],
"list": [
{
"name": "C++",
"id": "1",
"summary": "Optional summary of your experience with the skill.",
"level": "9",
"years": 7,
"proof": "http://myblog.com/interesting-cplusplus-post"
},
{
"name": "Ruby",
"id": "2",
"summary": "Optional summary of your experience with the skill.",
"level": "9",
"years": 7,
"proof": "http://myblog.com/interesting-cplusplus-post"
},
{
"name": "Xcode",
"summary": "Xcode 6 development.",
"level": "5",
"years": "3"
},
{
"name": "Linux",
"summary": "Optional summary of your experience with the skill.",
"level": "advanced",
"years": "4+"
},
{
"name": "Agile",
"summary": "Optional summary of your experience with the skill.",
"level": "B+",
"years": 2
}
]
},
"samples": [
{
"title": "Asteroids",
"summary": "A browser-based space shooter built on Three.js.",
"url": "http://janef.me/asteroids",
"date": "2014-09"
},
{
"title": "Rememberpedia",
"summary": "A website to help you remember things.",
"url": "https://rememberpedia.com",
"date": "2015-07"
}
],
"writing": [
{
"title": "Teach Yourself GORFF in 21 Days",
"flavor": "book",
"date": "2008",
"publisher": {
"name": "Amazon",
"url": "https://www.amazon.com"
},
"url": "http://url.to.publication.com/blah",
"author": [ "Jane Fullstacker", "John Smith" ],
"summary": "A primer on the programming language of GORFF, whose for loops are coterminous with all of time and space."
},
{
"title": "Building User Interfaces with Electron and Atom",
"flavor": "article",
"date": "2011",
"publisher": {
"name": "Code Project",
"url": "http://codeproject.com"
},
"url": "http://codeproject.com/build-ui-electron-atom.aspx"
},
{
"title": "Jane Fullstacker's Blog",
"flavor": "blog",
"date": "2011",
"publisher": {
"name": "self",
"url": "http://janef.me"
},
"url": "http://janef.me"
}
],
"reading": [
{
"title": "Code Complete",
"flavor": "book",
"url": "http://www.cc2e.com/Default.aspx",
"author": "Steve McConnell"
},
{
"title": "r/programming",
"flavor": "website",
"url": "https://www.reddit.com/r/programming/"
},
{
"title": "Hacker News / YCombinator",
"flavor": "website",
"url": "https://news.ycombinator.com/"
},
{
"title": "Coding Horror",
"flavor": "blog",
"url": "http://www.codinghorror.com",
"author": "Jeff Atwood"
}
],
"speaking": [
{
"title": "Data Warehousing Evolved: DARMA 2.0",
"role": "Speaker",
"event": "OPENSTART 2013 Developer's Conference",
"location": "Portland, OR",
"date": "2012",
"highlights": [
"Won 'Best Presentation on an Emerging Technical Field' prize."
]
}
],
"recognition": [
{
"flavor": "award",
"from": "Google",
"title": "Honorable Mention",
"event": "Summer of Code",
"date": "2012"
},
{
"flavor": "honor",
"from": "Cornell University",
"title": "Summa cum laude",
"event": "graduation",
"date": "2012"
}
],
"references": [
{
"name": "John Davidson",
"flavor": "professional",
"private": true,
"contact": [
{
"label": "Mobile",
"flavor": "phone",
"value": "9-(999)-999-9999"
},
{
"label": "Work email",
"flavor": "email",
"value": "jdavidson@veridiandynamics.com"
}
]
}
],
"testimonials": [
{
"name": "John Davidson",
"flavor": "professional",
"quote": "Jane is awesome! I'd hire her again in a heartbeat.",
"private": true
},
{
"name": "Elias Fullstacker",
"flavor": "technical",
"quote": "I worked with Jane on Jabberwocky and can vouch for her awesome technical capabilities and attention to detail. Insta-hire."
},
{
"name": "Dana Nevins",
"flavor": "personal",
"quote": "I've known Jane personally and professionally for almost ten years. She is one in a million."
}
],
"languages": [
{
"language": "English",
"level": "Native"
},
{
"language": "Spanish",
"level": "Moderate",
"years": 10
}
],
"extracurricular": [
{
"title": "Bay Area Crew Club",
"activity": "",
"location": "San Francisco, CA",
"start": "2014-05"
},
{
"title": "Organizer / Manager",
"activity": "JavaScript Game Development Meetup",
"location": "Austin, TX",
"start": "2011-03",
"end": "2014-01",
"highlights": [
"Monthly speaker on creative JavaScript development.",
"Founded group and oversaw growth to 500+ members."
]
}
],
"governance": [
{
"flavor": "board",
"role": "Member",
"organization": "The Mommies Network",
"url": "http://themommiesnetwork.org",
"start": "2008-02",
"end": "2010-01",
"summary": "Since 2008 I've been a full-time member of the board of directors for TMN."
},
{
"flavor": "committee",
"role": "Academic Contributor",
"organization": "Khronos Group",
"url": "https://www.khronos.org",
"start": "2015-01",
"highlights": [
"Participated in GORFF standardization process (Draft 2)."
]
}
],
"interests": [
{
"name": "reading",
"summary": "Jane is a fan of mystery novels and courtroom dramas including Agatha Christie and John Grisham.",
"keywords": [ "mystery", "Agatha Christie", "John Grisham" ]
},
{
"name": "hiking",
"summary": "Jane enjoys hiking, light mountain climbing, and has four summits under her belt!"
},
{
"name": "yoga"
}
]
}

4
theme.json Normal file
View File

@ -0,0 +1,4 @@
{
"title": "fresh-theme-elegant",
"engine": "handlebars"
}