jsonresume-theme-zurb
Version:
JSON Resume Template with zurb Foundation for Sites.
162 lines (141 loc) • 6.12 kB
JavaScript
var fs = require("fs");
var Handlebars = require("handlebars");
var URL = require("url");
var months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'June', 'July', 'Aug', 'Sept', 'Oct', 'Nov', 'Dec'];
var nets = ["500px", "8tracks", "airbnb", "alliance", "amazon", "amplement", "android", "angellist", "apple", "appnet", "baidu", "bandcamp", "battlenet", "beam", "bebee", "bebo", "behance", "blizzard", "blogger", "buffer", "chrome", "coderwall", "curse", "dailymotion", "deezer", "delicious", "deviantart", "diablo", "digg", "discord", "disqus", "douban", "draugiem", "dribbble", "drupal", "ebay", "ello", "endomondo", "envato", "etsy", "facebook", "feedburner", "filmweb", "firefox", "flattr", "flickr", "formulr", "forrst", "foursquare", "friendfeed", "github", "goodreads", "google", "googlegroups", "googlephotos", "googleplus", "googlescholar", "grooveshark", "hackerrank", "hearthstone", "hellocoton", "hereos", "hitbox", "horde", "houzz", "icq", "identica", "imdb", "instagram", "issuu", "istock", "itunes", "keybase", "lanyrd", "lastfm", "line", "linkedin", "livejournal", "lyft", "macos", "mail", "medium", "meetup", "mixcloud", "modelmayhem", "mumble", "myspace", "newsvine", "nintendo", "npm", "odnoklassniki", "openid", "opera", "outlook", "overwatch", "pandora", "patreon", "paypal", "periscope", "persona", "pinterest", "play", "player", "playstation", "pocket", "qq", "quora", "raidcall", "ravelry", "reddit", "renren", "researchgate", "residentadvisor", "reverbnation", "rss", "sharethis", "skype", "slideshare", "smugmug", "snapchat", "songkick", "soundcloud", "spotify", "stackexchange", "stackoverflow", "starcraft", "stayfriends", "steam", "storehouse", "strava", "streamjar", "stumbleupon", "swarm", "teamspeak", "teamviewer", "technorati", "telegram", "tripadvisor", "tripit", "triplej", "tumblr", "twitch", "twitter", "uber", "ventrilo", "viadeo", "viber", "viewbug", "vimeo", "vine", "vkontakte", "warcraft", "wechat", "weibo", "whatsapp", "wikipedia", "windows", "wordpress", "wykop", "xbox", "xing", "yahoo", "yammer", "yandex", "yelp", "younow", "youtube", "zapier", "zerply", "zomato", "zynga", "spreadshirt", "trello", "gamejolt", "tunein", "bloglovin", "gamewisp", "messenger"];
module.exports = {
render: render
};
function render(resume) {
var css = fs.readFileSync(__dirname + "/style.css", "utf-8");
var template = fs.readFileSync(__dirname + "/resume.hbs", "utf-8");
return Handlebars.compile(template)({
css: css,
resume: resume
});
}
/* HANDLEBARS HELPERS */
Handlebars.registerHelper('paragraphSplit', function(plaintext) {
var output = '';
var lines = plaintext instanceof Array ? plaintext.join('').split(/\r\n|\r|\n/g) : plaintext.split(/\r\n|\r|\n/g);
var i = 0;
while (i < lines.length) {
if (lines[i]) {
output += '<p>' + lines[i] + '</p>';
}
i += 1;
}
return new Handlebars.SafeString(output);
});
Handlebars.registerHelper('toLower', function(str) {
if (str && typeof str === 'string') {
return str.toLowerCase();
}
});
Handlebars.registerHelper('santify', function(url, network) {
if (!!url) { // first parse the url to see if can match to socion icons.
var str = URL.parse(url).hostname;
var parts = str.toLowerCase().split('.');
// Check for "googlegroups", "googlephotos", "googleplus", "googlescholar", may have to add others ...
if (parts[1] == 'google') {
return parts[1] + parts[0];
}
str = (parts.length == 2) ? parts[0] : parts[1];
for (var i = 0; i < nets.length; i++) {
if (nets[i].indexOf(str) > -1) {
return nets[i];
}
}
}
// url didn't parse to known icon, go with network without spaces or dash
if (network && typeof network === 'string') {
return network.split(' ').join('').split('-').join('').toLowerCase();
} else {
return "rss";
}
});
Handlebars.registerHelper('decodeURI', function(str) {
if (str && typeof str === 'string') {
return decodeURIComponent(str);
}
});
Handlebars.registerHelper('spaceToDash', function(str) {
if (str && typeof str === 'string') {
return str.replace(/\s/g, '-').toLowerCase();
}
});
Handlebars.registerHelper('theYear', function() {
return new Date().getFullYear();
});
Handlebars.registerHelper('prettifyDate', function(d) {
var date = Date.parse(d);
if (isNaN(date)) {
return d
} else {
var month = new Date(date).getMonth();
var year = new Date(date).getFullYear();
return months[month] + ' ' + year;
}
});
Handlebars.registerHelper('map', function(level) {
if (typeof level === 'undefined' || typeof level === null) {
return ""
} else {
level = level.toLowerCase();
switch (level) {
case "advanced":
case "professionial":
case "pro":
return "primary";
break;
case "basic":
case "novice":
case "student":
case "rookie":
case "amateur":
case "knowledgeable":
return "secondary";
break;
case "learning":
case "beginner":
case "dabbler":
return "info";
break;
case "average":
case "competent":
case "moderate":
case "intermediate":
case "proficient":
case "skillful":
case "junior":
case "jr":
case "jr.":
return "warning";
break;
case "experienced":
case "master":
case "working knowledge":
return "success";
break;
case "comfortable":
case "expert":
case "junor":
case "senior":
case "sr":
case "sr.":
case "architect":
return "alert";
break;
default:
return "";
}
}
});
/*
Handlebars.registerHelper('Y', function(date) {
return moment(date.toString(), ['YYYY-MM-DD']).format('YYYY');
});
Handlebars.registerHelper('DMY', function(date) {
return moment(date.toString(), ['YYYY-MM-DD']).format('D MMMM YYYY');
});
*/