Add kendal2 theme
This commit is contained in:
parent
5b68510c0d
commit
e19cc078da
|
@ -34,6 +34,7 @@ import (
|
|||
"jsonresume/model"
|
||||
"jsonresume/themes"
|
||||
_ "jsonresume/themes/kendall"
|
||||
_ "jsonresume/themes/kendall2"
|
||||
_ "jsonresume/themes/stackoverflow"
|
||||
_ "jsonresume/themes/tex"
|
||||
)
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
#!/bin/bash
|
||||
|
||||
go-bindata -pkg kendall -o themes/kendall/kendall-assets.go themes/kendall/{resume.template,style.css,print.css}
|
||||
for theme in kendall kendall2; do
|
||||
go-bindata -pkg ${theme} -o themes/${theme}/${theme}-assets.go themes/${theme}/{resume.template,style.css,print.css}
|
||||
done
|
||||
go-bindata -pkg stackoverflow -o themes/stackoverflow/stackoverflow-assets.go themes/stackoverflow/{resume.template,style.css}
|
||||
go-bindata -pkg tex -o themes/tex/tex-assets.go themes/tex/resume_template.tex
|
||||
|
|
|
@ -134,6 +134,7 @@ type Volunteer struct {
|
|||
type Education struct {
|
||||
Institution string `json:"institution"`
|
||||
Hide bool `json:"hide"`
|
||||
Location string `json:"location"`
|
||||
Area string `json:"area"`
|
||||
StudyType string `json:"studyType"`
|
||||
StartDate ResumeDate `json:"startDate"`
|
||||
|
|
|
@ -95,7 +95,7 @@ func themesKendallResumeTemplate() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "themes/kendall/resume.template", size: 12378, mode: os.FileMode(420), modTime: time.Unix(1612213494, 0)}
|
||||
info := bindataFileInfo{name: "themes/kendall/resume.template", size: 12378, mode: os.FileMode(420), modTime: time.Unix(1612727562, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
@ -115,7 +115,7 @@ func themesKendallStyleCss() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "themes/kendall/style.css", size: 5262, mode: os.FileMode(420), modTime: time.Unix(1596890556, 0)}
|
||||
info := bindataFileInfo{name: "themes/kendall/style.css", size: 5262, mode: os.FileMode(420), modTime: time.Unix(1612707068, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
@ -135,7 +135,7 @@ func themesKendallPrintCss() (*asset, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
info := bindataFileInfo{name: "themes/kendall/print.css", size: 1186, mode: os.FileMode(420), modTime: time.Unix(1596890556, 0)}
|
||||
info := bindataFileInfo{name: "themes/kendall/print.css", size: 1186, mode: os.FileMode(420), modTime: time.Unix(1612727562, 0)}
|
||||
a := &asset{bytes: bytes, info: info}
|
||||
return a, nil
|
||||
}
|
||||
|
|
6
themes/kendall2/bootstrap.min.css
vendored
Normal file
6
themes/kendall2/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
295
themes/kendall2/kendall2-assets.go
Normal file
295
themes/kendall2/kendall2-assets.go
Normal file
File diff suppressed because one or more lines are too long
70
themes/kendall2/kendall2.go
Normal file
70
themes/kendall2/kendall2.go
Normal file
|
@ -0,0 +1,70 @@
|
|||
/*
|
||||
* Copyright (c) 2018 Arnaud Ysmal. All Rights Reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in the
|
||||
* documentation and/or other materials provided with the distribution.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
|
||||
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
||||
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
|
||||
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
|
||||
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
|
||||
* SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
|
||||
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
||||
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
|
||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
package kendall2
|
||||
|
||||
import (
|
||||
"jsonresume/model"
|
||||
"jsonresume/themes"
|
||||
"path"
|
||||
"text/template"
|
||||
)
|
||||
|
||||
const (
|
||||
packageDirectory = "themes/kendall2"
|
||||
fileCSS = "style.css"
|
||||
fileCSSPrint = "print.css"
|
||||
fileTemplate = "resume.template"
|
||||
)
|
||||
|
||||
var Theme = themes.Theme{
|
||||
Name: "kendall2",
|
||||
Directory: packageDirectory,
|
||||
Functions: template.FuncMap{
|
||||
"css": getCSS,
|
||||
"printcss": getPrintCSS,
|
||||
"md2html": md2html,
|
||||
},
|
||||
}
|
||||
|
||||
func init() {
|
||||
t, _ := Asset(path.Join(packageDirectory, fileTemplate))
|
||||
Theme.Template = string(t)
|
||||
(&Theme).Register()
|
||||
}
|
||||
|
||||
func getCSS() string {
|
||||
r, _ := Asset(path.Join(packageDirectory, fileCSS))
|
||||
return string(r)
|
||||
}
|
||||
|
||||
func getPrintCSS() string {
|
||||
r, _ := Asset(path.Join(packageDirectory, fileCSSPrint))
|
||||
return string(r)
|
||||
}
|
||||
|
||||
func md2html(s string) string {
|
||||
return model.MarkdownURLRegexp.ReplaceAllString(s, `<a href="$2" target="_blank">$1</a>`)
|
||||
}
|
337
themes/kendall2/print.css
Normal file
337
themes/kendall2/print.css
Normal file
|
@ -0,0 +1,337 @@
|
|||
@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,600,700,800);
|
||||
@charset "utf-8";
|
||||
|
||||
@-webkit-viewport { width: device-width; }
|
||||
@-moz-viewport { width: device-width; }
|
||||
@-ms-viewport { width: device-width; }
|
||||
@-o-viewport { width: device-width; }
|
||||
@viewport { width: device-width; }
|
||||
|
||||
body{
|
||||
font-family: 'Open Sans', Arial, Tahoma;
|
||||
font-weight: 400;
|
||||
color: #363636;
|
||||
background: none;
|
||||
}
|
||||
blockquote {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
blockquote,
|
||||
#education,
|
||||
#awards,
|
||||
.contact-item,
|
||||
.publication,
|
||||
.skills,
|
||||
.interests,
|
||||
.clearfix{
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
|
||||
.container{
|
||||
margin-top: 0px;
|
||||
margin-bottom: 0px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
#photo-header{
|
||||
margin-top: -75px;
|
||||
}
|
||||
#photo{
|
||||
width: 160px;
|
||||
height: 160px;
|
||||
border-radius: 50%;
|
||||
overflow: hidden;
|
||||
padding: 5px;
|
||||
background: #334960;
|
||||
display: inline-block;
|
||||
}
|
||||
#photo img{
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
#text-header h1{
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 1.5em;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: -1px;
|
||||
}
|
||||
#text-header h1::first-line{
|
||||
font-size: 1.5em;
|
||||
font-weight: 800;
|
||||
line-height: 1.5em;
|
||||
}
|
||||
#text-header h1 span{
|
||||
color: #334960;
|
||||
opacity: 0.7;
|
||||
}
|
||||
#text-header h1 sup{
|
||||
opacity: 0.5;
|
||||
}
|
||||
#text-header:after{
|
||||
width: 100%;
|
||||
height: 3px;
|
||||
border-bottom: 1px solid #ddd;
|
||||
margin-top: 15px;
|
||||
content: '';
|
||||
display: block;
|
||||
}
|
||||
|
||||
.box{
|
||||
padding-bottom: 10px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
.box h2{
|
||||
color: #227c74;
|
||||
font-size: 1.5em;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
#awards,
|
||||
#education{
|
||||
margin-top: 20px;
|
||||
margin-bottom: 0;
|
||||
position: relative;
|
||||
padding: 1em 0;
|
||||
list-style: none;
|
||||
}
|
||||
#awards:before,
|
||||
#education:before {
|
||||
background: none;
|
||||
}
|
||||
/*
|
||||
#awards:before,
|
||||
#education:before {
|
||||
width: 5px;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
left: 35px;
|
||||
top: 0;
|
||||
content: ' ';
|
||||
display: block;
|
||||
background: #32475c;
|
||||
background: -moz-linear-gradient(top, #ffffff 0%, #32475c 7%, #32475c 89%, #ffffff 100%);
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(7%,#32475c), color-stop(89%,#32475c), color-stop(100%,#ffffff));
|
||||
background: -webkit-linear-gradient(top, #ffffff 0%,#32475c 7%,#32475c 89%,#ffffff 100%);
|
||||
background: -o-linear-gradient(top, #ffffff 0%,#32475c 7%,#32475c 89%,#ffffff 100%);
|
||||
background: -ms-linear-gradient(top, #ffffff 0%,#32475c 7%,#32475c 89%,#ffffff 100%);
|
||||
background: linear-gradient(to bottom, #ffffff 0%,#32475c 7%,#32475c 89%,#ffffff 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#ffffff',GradientType=0 );
|
||||
}
|
||||
*/
|
||||
#awards li,
|
||||
#education li{
|
||||
width: 100%;
|
||||
z-index: 2;
|
||||
position: relative;
|
||||
float: left;
|
||||
}
|
||||
#awards .year,
|
||||
#education .year{
|
||||
width: 14%;
|
||||
background: #fff;
|
||||
padding: 10px;
|
||||
font-weight: 700;
|
||||
display: inline-block;
|
||||
}
|
||||
#awards .description,
|
||||
#education .description{
|
||||
width: 83%;
|
||||
display: inline-block;
|
||||
background: #eee;
|
||||
margin-bottom: 10px;
|
||||
position: relative;
|
||||
padding: 10px;
|
||||
border-bottom: 1px solid #ccc;
|
||||
border-right: 1px solid #ccc;
|
||||
}
|
||||
/*
|
||||
#awards .description:after,
|
||||
#education .description:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 15px;
|
||||
right: 0;
|
||||
left: -16px;
|
||||
height: 0;
|
||||
width: 0;
|
||||
border: solid transparent;
|
||||
border-right-color: #eee;
|
||||
border-width: 8px;
|
||||
pointer-events: none;
|
||||
}
|
||||
*/
|
||||
#awards .description h3,
|
||||
#education .description h3{
|
||||
font-size: 1.2em;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-weight: 700;
|
||||
}
|
||||
#awards .description p,
|
||||
#education .description p{
|
||||
margin-top: 5px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.job{
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.job .details {
|
||||
margin-left: 3%;
|
||||
width: 95%;
|
||||
padding: 10px;
|
||||
margin-bottom: 10px;
|
||||
background: #eee;
|
||||
border-bottom: 1px solid #ccc;
|
||||
border-right: 1px solid #ccc;
|
||||
}
|
||||
.job .where{
|
||||
font-size: 1.2em;
|
||||
font-weight: bold;
|
||||
}
|
||||
.job .year{
|
||||
opacity: 0.7;
|
||||
}
|
||||
.job .profession{
|
||||
font-size: 1.2em;
|
||||
font-weight: bold;
|
||||
}
|
||||
.job .description{
|
||||
line-height: 1.5em;
|
||||
}
|
||||
.job .highlights{
|
||||
padding: 5px 0;
|
||||
font-weight: bold;
|
||||
}
|
||||
.job .job-details {
|
||||
padding-left: 5%;
|
||||
width: 100%;
|
||||
}
|
||||
.publication {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.publication .name{
|
||||
font-size: 1em;
|
||||
font-weight: bold;
|
||||
}
|
||||
.publication .year{
|
||||
opacity: 0.7;
|
||||
}
|
||||
.publication p{
|
||||
margin: 0;
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
.contact-item{
|
||||
width: 100%;
|
||||
float: left;
|
||||
}
|
||||
.contact-item .icon{
|
||||
padding: 10px;
|
||||
border-right: 1px solid #ccc;
|
||||
border-bottom: 1px solid #ccc;
|
||||
color: #32475c;
|
||||
background: #eee;
|
||||
}
|
||||
.contact-item:last-child .icon{
|
||||
border-bottom: none;
|
||||
}
|
||||
.contact-item .title{
|
||||
width: 80%;
|
||||
width: calc(100% - 55px);
|
||||
font-weight: 700;
|
||||
opacity: 0.9;
|
||||
}
|
||||
.contact-item .title.only{
|
||||
margin-top: 10px;
|
||||
}
|
||||
.contact-item .description{
|
||||
width: 80%;
|
||||
width: calc(100% - 55px);
|
||||
color: #334960;
|
||||
}
|
||||
|
||||
.item-interests,
|
||||
.item-skills{
|
||||
height: 30px;
|
||||
color: #334960;
|
||||
padding: 5px 10px;
|
||||
margin-bottom: 5px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
font-size: 1.1em;
|
||||
font-weight: 600;
|
||||
}
|
||||
.interest,
|
||||
.skill{
|
||||
color: #fff;
|
||||
display: inline-block;
|
||||
margin-right: 5px;
|
||||
margin-bottom: 5px;
|
||||
padding: 5px 10px;
|
||||
background: #32475c;
|
||||
position: relative;
|
||||
font-size: .85em;
|
||||
}
|
||||
.skill-level {
|
||||
background-color: #227c74;
|
||||
border-radius: 4px;
|
||||
color: #fff;
|
||||
padding: 1px 8px;
|
||||
font-size: .75em;
|
||||
position: absolute;
|
||||
margin: 1px 10px;
|
||||
}
|
||||
|
||||
#language-skills .skill{
|
||||
margin: 10px 0;
|
||||
padding-bottom: 10px;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
/*
|
||||
body {
|
||||
font-size: .90em;
|
||||
}
|
||||
.box {
|
||||
margin-bottom: -10px;
|
||||
}
|
||||
*/
|
||||
.col-sm-5{
|
||||
width: 40%;
|
||||
padding: 0 15px;
|
||||
}
|
||||
|
||||
.col-sm-7{
|
||||
width: 60%;
|
||||
padding: 0 15px;
|
||||
}
|
||||
.list-group-item{
|
||||
margin: 0;
|
||||
padding: 5px 15px;
|
||||
border: none;
|
||||
}
|
||||
|
||||
.body{
|
||||
margin: 0 !important;
|
||||
}
|
||||
|
||||
a[href]:after {
|
||||
content: none !important;
|
||||
}
|
||||
|
||||
.box:after {
|
||||
background: none;
|
||||
}
|
||||
.colle {
|
||||
page-break-inside: avoid;
|
||||
}
|
||||
ul li .list-group-item {
|
||||
list-style-type: decimal !important;
|
||||
}
|
305
themes/kendall2/resume.template
Normal file
305
themes/kendall2/resume.template
Normal file
|
@ -0,0 +1,305 @@
|
|||
<!DOCTYPE html>
|
||||
<html lang="{{.Language}}">
|
||||
<head>
|
||||
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<title>{{.Lang.TitlePrefix}} {{.Basic.Name}}</title>
|
||||
<link href="bootstrap.min.css" rel="stylesheet">
|
||||
<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
|
||||
<style>{{css}}</style>
|
||||
<style media="print">{{printcss}}</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-xs-12">
|
||||
<div id="photo-header" class="text-center">
|
||||
<!-- PHOTO (AVATAR) -->
|
||||
{{if .Basic.Image -}}
|
||||
<div id="photo">
|
||||
<img src="{{.Basic.Image}}" alt="avatar">
|
||||
</div>
|
||||
{{- end}}
|
||||
<div id="text-header" {{if not .Basic.Image}}style="margin-top: 90px;"{{- end}}>
|
||||
<h1>{{.Basic.Name}}<br>{{if .Basic.Label}}<span>{{.Basic.Label}}</span>{{- end}}</h1>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="col-xs-12 col-sm-7">
|
||||
{{if .Basic.Summary -}}
|
||||
<!-- ABOUT ME -->
|
||||
<div class="box">
|
||||
<h2><i class="fa fa-user ico"></i> {{.Lang.About}}</h2>
|
||||
<p>{{.Basic.Summary}}</p>
|
||||
</div>
|
||||
{{- end}}
|
||||
{{if .Work -}}
|
||||
<!-- WORK EXPERIENCE -->
|
||||
<div class="box">
|
||||
<h2><i class= "fa fa-suitcase ico"></i> {{.Lang.WorkExperience}}</h2>
|
||||
{{range .Work -}}
|
||||
<div class="job clearfix">
|
||||
<div class="row">
|
||||
<div class="details">
|
||||
<div class="where">{{.Position}}</div>
|
||||
{{if .URL -}}
|
||||
<div class="address">
|
||||
<a href="{{.URL}}" target= "_blank"><i class="fa fa-globe ico"></i> {{.URL}}</a>
|
||||
</div>
|
||||
{{- end}}
|
||||
<div class="year">{{formatDateShortMY .StartDate}} – {{formatDateShortMY .EndDate}} | <b>{{.Name}}</b> <i>({{.Location}})</i></div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="job-details col-xs-11">
|
||||
<div class="description">
|
||||
{{.Summary -}}
|
||||
{{if .Highlights -}}
|
||||
<div class="highlights"></div>
|
||||
<ul class="list-group">
|
||||
{{range .Highlights -}}
|
||||
<li class="list-group-item">
|
||||
{{.Title}}
|
||||
{{if .Items -}}
|
||||
<ul>
|
||||
{{range .Items}}<li>{{.}}</li>{{end}}
|
||||
</ul>
|
||||
{{- end}}
|
||||
</li>
|
||||
{{- end}}
|
||||
</ul>
|
||||
{{- end}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{- end}}
|
||||
</div>
|
||||
{{- end}}
|
||||
{{if .Awards -}}
|
||||
<!-- AWARDS -->
|
||||
<div class="box">
|
||||
<h2><i class="fa fa-certificate ico"></i> {{.Lang.Awards}}</h2>
|
||||
<ul id="awards" class="clearfix">
|
||||
{{range .Awards -}}
|
||||
<li>
|
||||
<div class="year pull-left">{{formatDateDMY .Date}}</div>
|
||||
<div class="description pull-right">
|
||||
<h3>{{.Awarder}}</h3>
|
||||
<p><i class="fa fa-trophy ico"></i> {{.Title}}</p>
|
||||
<p>{{.Summary}}</p>
|
||||
</div>
|
||||
</li>
|
||||
{{- end}}
|
||||
</ul>
|
||||
</div>
|
||||
{{- end}}
|
||||
{{if .Volunteer -}}
|
||||
<!-- VOLUNTEER -->
|
||||
<div class="box">
|
||||
<h2><i class= "fa fa-group ico"></i> {{.Lang.Volunteer}}</h2>
|
||||
{{range .Volunteer -}}
|
||||
<div class="job clearfix">
|
||||
<div class="row">
|
||||
<div class="details">
|
||||
<div class="where">{{.Organization}}</div>
|
||||
{{if .URL -}}
|
||||
<div class="address">
|
||||
<a href="{{.URL}}" target= "_blank"><i class="fa fa-globe ico"></i> {{.URL}}</a>
|
||||
</div>
|
||||
{{- end}}
|
||||
<div class="year">{{formatDateShortMY .StartDate}} – {{formatDateShortMY .EndDate}}</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="row">
|
||||
<div class="job-details col-xs-11">
|
||||
<div class="profession">{{.Position}}</div>
|
||||
<div class="description">
|
||||
{{.Summary -}}
|
||||
{{if .Highlights -}}
|
||||
<div class="highlights"></div>
|
||||
<ul class="list-group">
|
||||
{{range .Highlights -}}
|
||||
<li class="list-group-item">
|
||||
{{md2html .Title}}
|
||||
{{if .Items -}}
|
||||
<ul>
|
||||
{{range .Items}}<li>{{md2html .}}</li>{{end}}
|
||||
</ul>
|
||||
{{- end}}
|
||||
</li>
|
||||
{{- end}}
|
||||
</ul>
|
||||
{{- end}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
{{- end}}
|
||||
</div>
|
||||
{{- end}}
|
||||
</div>
|
||||
<div class="col-xs-12 col-sm-5">
|
||||
<!-- CONTACT -->
|
||||
<div class="box clearfix">
|
||||
<h2><i class="fa fa-bullseye ico"></i> {{.Lang.Contact}}</h2>
|
||||
{{if .Basic.Location.City -}}
|
||||
<div class="contact-item">
|
||||
<div class="icon pull-left text-center"><span class="fa fa-map-marker fa-fw"></span></div>
|
||||
{{if .Basic.Location.Address}}<div class="title pull-right">{{.Basic.Location.Address}}</div>{{- end}}
|
||||
<div class="title {{if not .Basic.Location.Address}}only {{- end}} pull-right">{{if .Basic.Location.PostalCode}} {{.Basic.Location.PostalCode}}{{- end}} {{.Basic.Location.City}}{{if .Basic.Location.Region}}, {{.Basic.Location.Region}}{{- end}}{{if .Basic.Location.CountryCode}} {{.Basic.Location.CountryCode}}{{- end}}</div>
|
||||
</div>
|
||||
{{- end}}
|
||||
{{if .Basic.Phone -}}
|
||||
<div class="contact-item">
|
||||
<div class="icon pull-left text-center"><span class="fa fa-phone fa-fw"></span></div>
|
||||
<div class="title only pull-right">{{.Basic.Phone}}</div>
|
||||
</div>
|
||||
{{- end}}
|
||||
{{if .Basic.Email -}}
|
||||
<div class="contact-item">
|
||||
<div class="icon pull-left text-center"><span class="fa fa-envelope fa-fw"></span></div>
|
||||
<div class="title only pull-right"><a href="mailto:{{.Basic.Email}}" target="_blank">{{.Basic.Email}}</a></div>
|
||||
</div>
|
||||
{{- end}}
|
||||
{{if .Basic.URL -}}
|
||||
<div class="contact-item">
|
||||
<div class="icon pull-left text-center"><span class="fa fa-globe fa-fw"></span></div>
|
||||
<div class="title only pull-right"><a href="{{.Basic.URL}}" target="_blank">{{.Basic.URL}}</a></div>
|
||||
</div>
|
||||
{{- end}}
|
||||
{{range .Basic.Profiles -}}
|
||||
<div class="contact-item">
|
||||
<div class="icon pull-left text-center"><span class="{{iconClass .Network}} fa-fw"></span></div>
|
||||
<div class="title pull-right">{{.Network}}</div>
|
||||
<div class="description pull-right"><a href="{{.URL}}" target="_blank">{{if .UserName}}{{.UserName}}{{- end}}{{if not .UserName}}{{.URL}}{{- end}}</a></div>
|
||||
</div>
|
||||
{{- end}}
|
||||
</div>
|
||||
{{if .Education -}}
|
||||
<!-- EDUCATION -->
|
||||
<div class="box">
|
||||
<h2><i class="fa fa-university ico"></i> {{.Lang.Education}}</h2>
|
||||
<ul id="education" class="clearfix">
|
||||
{{range .Education -}}
|
||||
<li>
|
||||
<div class="year pull-left">{{formatDateY .StartDate}} {{formatDateY .EndDate}}</div>
|
||||
<div class="description pull-right">
|
||||
<h3>{{.Institution}}</h3>
|
||||
<p><i>({{.Location}})</i></p>
|
||||
{{if .StudyType}}<p><i class= "fa fa-graduation-cap ico"></i> {{.StudyType}}</p>{{end}}
|
||||
<p>{{.Area}}</p>
|
||||
{{if .GPA -}}
|
||||
<p>
|
||||
GPA: {{.GPA}}
|
||||
</p>
|
||||
{{- end}}
|
||||
{{if .Courses -}}
|
||||
<div>Courses</div>
|
||||
<ul class="list-group">
|
||||
{{range .Courses -}}
|
||||
<li class="list-group-item">{{.}}</li>
|
||||
{{- end}}
|
||||
</ul>
|
||||
{{- end}}
|
||||
</div>
|
||||
</li>
|
||||
{{- end}}
|
||||
</ul>
|
||||
</div>
|
||||
{{- end}}
|
||||
{{if .Skills -}}
|
||||
<!-- SKILLS -->
|
||||
<div class="box">
|
||||
<h2><i class="fa fa-tasks ico"></i> {{.Lang.Skills}}</h2>
|
||||
{{range .Skills -}}
|
||||
<div class="skills clearfix">
|
||||
<div class="item-skills">
|
||||
{{.Name}}
|
||||
{{if .Level}}<span class="skill-level">{{.Level}}</span>{{- end}}
|
||||
</div>
|
||||
<div class="col-sm-offset-1 col-sm-12 clearfix">
|
||||
{{range .Keywords -}}
|
||||
<span class= "skill badge">{{.}}</span>
|
||||
{{- end}}
|
||||
</div>
|
||||
</div>
|
||||
{{- end}}
|
||||
</div>
|
||||
{{- end}}
|
||||
{{if .Publications -}}
|
||||
<!-- PUBLICATIONS -->
|
||||
<div class="box">
|
||||
<h2><i class="fa fa-book ico"></i> {{.Lang.Publications}}</h2>
|
||||
{{range .Publications -}}
|
||||
<div class="publication panel panel-default">
|
||||
<div class="panel-heading">
|
||||
<div class="name panel-title">{{.Name}}</div>
|
||||
</div>
|
||||
<div class="panel-body">
|
||||
{{if .Publisher -}}
|
||||
<div class="publisher"><i class= "fa fa-bookmark ico"></i> {{.Publisher}}</div>
|
||||
{{- end}}
|
||||
<div class="year">{{formatDateDMY .ReleaseDate}}</div>
|
||||
{{if .URL -}}
|
||||
<div class="address">
|
||||
<a href="{{.URL}}" target= "_blank"><i class="fa fa-globe ico"></i> {{.URL}}</a>
|
||||
</div>
|
||||
{{- end}}
|
||||
{{if .Summary -}}
|
||||
<p>{{.Summary}}</p>
|
||||
{{- end}}
|
||||
</div>
|
||||
</div>
|
||||
{{- end}}
|
||||
</div>
|
||||
{{- end}}
|
||||
{{if .Languages -}}
|
||||
<!-- LANGUAGES -->
|
||||
<div class="box colle">
|
||||
<h2><i class="fa fa-language ico"></i> {{.Lang.Languages}}</h2>
|
||||
<ul class="list-group">
|
||||
{{range .Languages -}}
|
||||
<li class=" list-group-item">{{.Language}}<span class="skill badge pull-right">{{.Fluency}}</span></li>
|
||||
{{- end}}
|
||||
</ul>
|
||||
</div>
|
||||
{{- end}}
|
||||
{{if .Interests -}}
|
||||
<!-- HOBBIES -->
|
||||
<div class="box">
|
||||
<h2><i class="fa fa-heart ico"></i> {{.Lang.Interests}}</h2>
|
||||
{{range .Interests -}}
|
||||
<div class="interests clearfix">
|
||||
<div class="item-interests">
|
||||
{{.Name -}}
|
||||
</div>
|
||||
<div class="col-sm-offset-1 col-sm-12 clearfix">
|
||||
{{range .Keywords -}}
|
||||
<span class= "interest badge">{{.}}</span>
|
||||
{{- end}}
|
||||
</div>
|
||||
</div>
|
||||
{{- end}}
|
||||
</div>
|
||||
{{- end}}
|
||||
{{if .References -}}
|
||||
<div class="box">
|
||||
<h2><i class= "fa fa-check-square ico"></i> {{.Lang.References}}</h2>
|
||||
{{range .References -}}
|
||||
<blockquote>
|
||||
<div>{{.Reference}}</div>
|
||||
<footer>{{.Name}}</footer>
|
||||
</blockquote><br>
|
||||
{{- end}}
|
||||
</div>
|
||||
{{- end}}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
276
themes/kendall2/style.css
Normal file
276
themes/kendall2/style.css
Normal file
|
@ -0,0 +1,276 @@
|
|||
@import url(https://fonts.googleapis.com/css?family=Open+Sans:400,600,700,800);
|
||||
@charset "utf-8";
|
||||
@-webkit-viewport { width: device-width; }
|
||||
@-moz-viewport { width: device-width; }
|
||||
@-ms-viewport { width: device-width; }
|
||||
@-o-viewport { width: device-width; }
|
||||
@viewport { width: device-width; }
|
||||
|
||||
body{
|
||||
font-family: 'Open Sans', Arial, Tahoma;
|
||||
font-weight: 400;
|
||||
color: #363636;
|
||||
background: #334960;
|
||||
}
|
||||
blockquote {
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
.container{
|
||||
margin-top: 80px;
|
||||
margin-bottom: 15px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
#photo-header{
|
||||
margin-top: -75px;
|
||||
}
|
||||
#photo{
|
||||
width: 160px;
|
||||
height: 160px;
|
||||
border-radius: 50%;
|
||||
overflow: hidden;
|
||||
padding: 5px;
|
||||
background: #334960;
|
||||
display: inline-block;
|
||||
}
|
||||
#photo img{
|
||||
width: 150px;
|
||||
height: 150px;
|
||||
border-radius: 50%;
|
||||
}
|
||||
#text-header h1{
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 1.5em;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: -1px;
|
||||
}
|
||||
#text-header h1::first-line{
|
||||
font-size: 1.5em;
|
||||
font-weight: 800;
|
||||
line-height: 1.5em;
|
||||
}
|
||||
#text-header h1 span{
|
||||
color: #334960;
|
||||
opacity: 0.7;
|
||||
}
|
||||
#text-header h1 sup{
|
||||
opacity: 0.5;
|
||||
}
|
||||
#text-header:after{
|
||||
width: 100%;
|
||||
height: 3px;
|
||||
border-bottom: 1px solid #ddd;
|
||||
margin-top: 15px;
|
||||
content: '';
|
||||
display: block;
|
||||
}
|
||||
|
||||
.box{
|
||||
padding-bottom: 10px;
|
||||
margin-bottom: 25px;
|
||||
}
|
||||
.box h2{
|
||||
color: #227c74;
|
||||
font-size: 1.5em;
|
||||
font-weight: 700;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
#awards,
|
||||
#education{
|
||||
margin-top: 20px;
|
||||
margin-bottom: 0;
|
||||
position: relative;
|
||||
padding: 1em 0;
|
||||
list-style: none;
|
||||
}
|
||||
#awards:before,
|
||||
#education:before {
|
||||
width: 5px;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
left: 35px;
|
||||
top: 0;
|
||||
content: ' ';
|
||||
display: block;
|
||||
background: #32475c;
|
||||
background: -moz-linear-gradient(top, #ffffff 0%, #32475c 7%, #32475c 89%, #ffffff 100%);
|
||||
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#ffffff), color-stop(7%,#32475c), color-stop(89%,#32475c), color-stop(100%,#ffffff));
|
||||
background: -webkit-linear-gradient(top, #ffffff 0%,#32475c 7%,#32475c 89%,#ffffff 100%);
|
||||
background: -o-linear-gradient(top, #ffffff 0%,#32475c 7%,#32475c 89%,#ffffff 100%);
|
||||
background: -ms-linear-gradient(top, #ffffff 0%,#32475c 7%,#32475c 89%,#ffffff 100%);
|
||||
background: linear-gradient(to bottom, #ffffff 0%,#32475c 7%,#32475c 89%,#ffffff 100%);
|
||||
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ffffff', endColorstr='#ffffff',GradientType=0 );
|
||||
}
|
||||
#awards li,
|
||||
#education li{
|
||||
width: 100%;
|
||||
z-index: 2;
|
||||
position: relative;
|
||||
float: left;
|
||||
}
|
||||
#awards .year,
|
||||
#education .year{
|
||||
width: 14%;
|
||||
background: #fff;
|
||||
padding: 10px;
|
||||
font-weight: 700;
|
||||
display: inline-block;
|
||||
}
|
||||
#awards .description,
|
||||
#education .description{
|
||||
width: 83%;
|
||||
display: inline-block;
|
||||
background: #eee;
|
||||
margin-bottom: 10px;
|
||||
position: relative;
|
||||
padding: 10px;
|
||||
border-bottom: 1px solid #ccc;
|
||||
border-right: 1px solid #ccc;
|
||||
}
|
||||
#awards .description:after,
|
||||
#education .description:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
top: 15px;
|
||||
right: 0;
|
||||
left: -16px;
|
||||
height: 0;
|
||||
width: 0;
|
||||
border: solid transparent;
|
||||
border-right-color: #eee;
|
||||
border-width: 8px;
|
||||
pointer-events: none;
|
||||
}
|
||||
#awards .description h3,
|
||||
#education .description h3{
|
||||
font-size: 1.2em;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-weight: 700;
|
||||
}
|
||||
#awards .description p,
|
||||
#education .description p{
|
||||
margin-top: 5px;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
.job{
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.job .details {
|
||||
margin-left: 3%;
|
||||
width: 95%;
|
||||
padding: 10px;
|
||||
margin-bottom: 10px;
|
||||
background: #eee;
|
||||
border-bottom: 1px solid #ccc;
|
||||
border-right: 1px solid #ccc;
|
||||
}
|
||||
.job .where{
|
||||
font-size: 1.2em;
|
||||
font-weight: bold;
|
||||
}
|
||||
.job .year{
|
||||
opacity: 0.7;
|
||||
}
|
||||
.job .profession{
|
||||
font-size: 1.2em;
|
||||
font-weight: bold;
|
||||
}
|
||||
.job .description{
|
||||
line-height: 1.5em;
|
||||
}
|
||||
.job .highlights{
|
||||
padding: 5px 0;
|
||||
font-weight: bold;
|
||||
}
|
||||
.job .job-details {
|
||||
padding-left: 5%;
|
||||
width: 100%;
|
||||
}
|
||||
.publication {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.publication .name{
|
||||
font-size: 1em;
|
||||
font-weight: bold;
|
||||
}
|
||||
.publication .year{
|
||||
opacity: 0.7;
|
||||
}
|
||||
.publication p{
|
||||
margin: 0;
|
||||
padding-top: 10px;
|
||||
}
|
||||
|
||||
.contact-item{
|
||||
width: 100%;
|
||||
float: left;
|
||||
}
|
||||
.contact-item .icon{
|
||||
padding: 10px;
|
||||
border-right: 1px solid #ccc;
|
||||
border-bottom: 1px solid #ccc;
|
||||
color: #32475c;
|
||||
background: #eee;
|
||||
}
|
||||
.contact-item:last-child .icon{
|
||||
border-bottom: none;
|
||||
}
|
||||
.contact-item .title{
|
||||
width: 80%;
|
||||
width: calc(100% - 55px);
|
||||
font-weight: 700;
|
||||
opacity: 0.9;
|
||||
}
|
||||
.contact-item .title.only{
|
||||
margin-top: 10px;
|
||||
}
|
||||
.contact-item .description{
|
||||
width: 80%;
|
||||
width: calc(100% - 55px);
|
||||
color: #334960;
|
||||
}
|
||||
|
||||
.item-interests,
|
||||
.item-skills{
|
||||
height: 30px;
|
||||
color: #334960;
|
||||
padding: 5px 10px;
|
||||
margin-bottom: 5px;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
font-size: 1.1em;
|
||||
font-weight: 600;
|
||||
}
|
||||
.interest,
|
||||
.skill{
|
||||
color: #fff;
|
||||
display: inline-block;
|
||||
margin-right: 5px;
|
||||
margin-bottom: 5px;
|
||||
padding: 5px 10px;
|
||||
background: #32475c;
|
||||
position: relative;
|
||||
font-size: .85em;
|
||||
}
|
||||
.skill-level {
|
||||
background-color: #227c74;
|
||||
border-radius: 4px;
|
||||
color: #fff;
|
||||
padding: 1px 8px;
|
||||
font-size: .75em;
|
||||
position: absolute;
|
||||
margin: 1px 10px;
|
||||
}
|
||||
|
||||
#language-skills .skill{
|
||||
margin: 10px 0;
|
||||
padding-bottom: 10px;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
|
@ -81,10 +81,12 @@ var Langs = map[string]LangString{
|
|||
}
|
||||
var CommonFuncs = map[string]template.FuncMap{
|
||||
"en": template.FuncMap{
|
||||
"iconClass": iconClass,
|
||||
"formatDateY": formatDateY,
|
||||
"formatDateMY": formatDateMY,
|
||||
"formatDateDMY": formatDateDMY,
|
||||
"iconClass": iconClass,
|
||||
"formatDateY": formatDateY,
|
||||
"formatDateMY": formatDateMY,
|
||||
"formatDateDMY": formatDateDMY,
|
||||
"formatDateShortMY": formatDateShortMY,
|
||||
"formatDateDShortMY": formatDateDShortMY,
|
||||
},
|
||||
}
|
||||
|
||||
|
@ -180,6 +182,20 @@ func formatDateDMY(date model.ResumeDate) string {
|
|||
return fmt.Sprintf("%d %s %d", date.Day(), date.Month().String(), date.Year())
|
||||
}
|
||||
|
||||
func formatDateShortMY(date model.ResumeDate) string {
|
||||
if date.IsZero() {
|
||||
return "Present"
|
||||
}
|
||||
return fmt.Sprintf("%s %d", date.Format("Jan"), date.Year())
|
||||
}
|
||||
|
||||
func formatDateDShortMY(date model.ResumeDate) string {
|
||||
if date.IsZero() {
|
||||
return "Present"
|
||||
}
|
||||
return fmt.Sprintf("%d %s %d", date.Day(), date.Format("Jan"), date.Year())
|
||||
}
|
||||
|
||||
func setupFrenchTranslation() {
|
||||
Langs["fr"] = LangString{
|
||||
TitlePrefix: "CV de",
|
||||
|
@ -199,13 +215,45 @@ func setupFrenchTranslation() {
|
|||
At: "à",
|
||||
}
|
||||
CommonFuncs["fr"] = template.FuncMap{
|
||||
"iconClass": iconClass,
|
||||
"formatDateY": formatDateYFR,
|
||||
"formatDateMY": formatDateMYFR,
|
||||
"formatDateDMY": formatDateDMYFR,
|
||||
"iconClass": iconClass,
|
||||
"formatDateY": formatDateYFR,
|
||||
"formatDateMY": formatDateMYFR,
|
||||
"formatDateDMY": formatDateDMYFR,
|
||||
"formatDateShortMY": formatDateShortMYFR,
|
||||
"formatDateDShortMY": formatDateDShortMYFR,
|
||||
}
|
||||
}
|
||||
|
||||
func getMonthFRShort(date model.ResumeDate) string {
|
||||
switch date.Month() {
|
||||
case time.January:
|
||||
return "Janv."
|
||||
case time.February:
|
||||
return "Fév."
|
||||
case time.March:
|
||||
return "Mars"
|
||||
case time.April:
|
||||
return "Avril"
|
||||
case time.May:
|
||||
return "Mai"
|
||||
case time.June:
|
||||
return "Juin"
|
||||
case time.July:
|
||||
return "Juil."
|
||||
case time.August:
|
||||
return "Août"
|
||||
case time.September:
|
||||
return "Sept."
|
||||
case time.October:
|
||||
return "Oct."
|
||||
case time.November:
|
||||
return "Nov."
|
||||
case time.December:
|
||||
return "Déc."
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func getMonthFR(date model.ResumeDate) string {
|
||||
switch date.Month() {
|
||||
case time.January:
|
||||
|
@ -256,3 +304,17 @@ func formatDateDMYFR(date model.ResumeDate) string {
|
|||
}
|
||||
return fmt.Sprintf("%d %s %d", date.Day(), getMonthFR(date), date.Year())
|
||||
}
|
||||
|
||||
func formatDateShortMYFR(date model.ResumeDate) string {
|
||||
if date.IsZero() {
|
||||
return "Présent"
|
||||
}
|
||||
return fmt.Sprintf("%s %d", getMonthFRShort(date), date.Year())
|
||||
}
|
||||
|
||||
func formatDateDShortMYFR(date model.ResumeDate) string {
|
||||
if date.IsZero() {
|
||||
return "Présent"
|
||||
}
|
||||
return fmt.Sprintf("%d %s %d", date.Day(), getMonthFRShort(date), date.Year())
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user