particular-theme-jekyll 0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE +21 -0
- data/README.md +109 -0
- data/_includes/404.html +20 -0
- data/_includes/about.html +26 -0
- data/_includes/formbutton.html +65 -0
- data/_includes/head.html +20 -0
- data/_includes/home.html +16 -0
- data/_includes/js.html +15 -0
- data/_includes/nav.html +27 -0
- data/_includes/particles.html +24 -0
- data/_includes/projects.html +48 -0
- data/_includes/resume.html +147 -0
- data/_includes/typewrite.html +71 -0
- data/_layouts/default.html +14 -0
- metadata +198 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 9f7475049af9c183aed8c4db12e7a82337f68e6e51918b7c8e53d60fd52067c1
|
4
|
+
data.tar.gz: 1a83d6f13faef34ff33c2370cb216c48fae903b4a3ae53408f8211f6d56604b4
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e490bb398c8ab69099426e50df4da98250929192dc35c0332e84d8aa567f9c5d9a92338f185797b811b83ac6ea9bb6cf1e2cd86dd6b54da142d2c097d1be8f46
|
7
|
+
data.tar.gz: b0cc0d87743d3f22161e3b7e4afcfa2a982f11efc30b35dd256dfb8eea51b2088c2f96a34af4d5a7196925d7f3a687aae779e6975e136f034ef3f806e303020e
|
data/LICENSE
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2013-2018 Blackrock Digital LLC
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
<img src="favicon.ico" width="100px"></image>
|
2
|
+
|
3
|
+
<img src="img/screenshot_home.png" width="600px"></image>
|
4
|
+
|
5
|
+
<img src="img/screenshot_resume.png" width="600px"></image>
|
6
|
+
|
7
|
+
# About
|
8
|
+
Particular is a jekyll theme for personal websites.
|
9
|
+
|
10
|
+
[Live Demo](https://www.michael-ashton.com)
|
11
|
+
|
12
|
+
It's best suited for hosting an interactive-resume site, but can easily be tweaked for
|
13
|
+
lots of other purposes.
|
14
|
+
|
15
|
+
The theme is loosely built on pieces from [freelancer](https://github.com/jeromelachaud/freelancer-theme),
|
16
|
+
and imports the very cool [particleground.js](https://github.com/jnicol/particleground) tool for its backgrounds.
|
17
|
+
|
18
|
+
If you have any questions or have a bug to report, please so so via the [issues page](https://github.com/ashtonmv/particular_theme/issues).
|
19
|
+
|
20
|
+
# Installation and setup
|
21
|
+
You will need ruby and bundler installed, just like for any other jekyll site.
|
22
|
+
Ruby is probably already on your machine; instructions for installing bundler can be found [here](https://bundler.io/).
|
23
|
+
|
24
|
+
```
|
25
|
+
git clone https://github.com/ashtonmv/particular_theme.git
|
26
|
+
cd particular_theme
|
27
|
+
bundle install
|
28
|
+
bundle exec jekyll serve
|
29
|
+
```
|
30
|
+
|
31
|
+
If you've installed everything correctly, this will start the local server. Visit `localhost` to view the site.
|
32
|
+
|
33
|
+
# Configuration
|
34
|
+
My design principle for this theme was to make nearly everything editable via `.yml` files, because I find them
|
35
|
+
super intuitive.
|
36
|
+
|
37
|
+
## Basic Settings
|
38
|
+
The most fundamental settings for the theme are configured via `_config.yml`:
|
39
|
+
|
40
|
+
```yaml
|
41
|
+
title: Particular
|
42
|
+
email: your@email.com
|
43
|
+
baseurl: ""
|
44
|
+
description: A clean, comfortable home for your resumé.
|
45
|
+
keywords: Web, Development, Software, Programmer, Coding, Resume, resume
|
46
|
+
meta_author: Your Name
|
47
|
+
|
48
|
+
# Build settings
|
49
|
+
markdown: kramdown
|
50
|
+
permalink: pretty
|
51
|
+
```
|
52
|
+
|
53
|
+
## Other settings
|
54
|
+
Most other settings are configured via files under `_data`:
|
55
|
+
|
56
|
+
- `about.yml`: configure image and text on the "About Me" page
|
57
|
+
- `formbutton.yml`: create and configure a formspree formbutton for your site
|
58
|
+
- `nav-icons.yml`: main navigation icons on all pages. Change these to showcase the internal/external pages you want.
|
59
|
+
- `particles.yml`: styling options for the particleground backgrounds
|
60
|
+
- `resume.yml`: data to fill in your "Resume" page
|
61
|
+
|
62
|
+
### Styling
|
63
|
+
The best way to change the basic style of the theme is via `_sass/head.scss`, which contains the main
|
64
|
+
Sass variables used in the theme's stylesheet (`_sass/style.scss`).
|
65
|
+
|
66
|
+
In addition to controlling the theme colors, `_sass/head.scss` is where custom fonts should be imported
|
67
|
+
and where responsive CSS breakpionts can be controlled. The current breakpoints work well for most mobile
|
68
|
+
devices and probably don't need to be changed (I hope).
|
69
|
+
|
70
|
+
Technically the theme also uses bootstrap, which is included via `style/bootstrap.min.css`.
|
71
|
+
|
72
|
+
## HTML files
|
73
|
+
Even though it was my goal to shelter you from them, you will occasionally need to directly edit the
|
74
|
+
HTML files under `_includes`. For example, if you want to include different fields in your resumé, or
|
75
|
+
add some new JavaScript, you'll need to understand the HTML file layout.
|
76
|
+
|
77
|
+
Every page on the theme inherits its layout from `_layouts/default.html`, and only the content of the
|
78
|
+
page depends on the specific url. Below are all of the HTML files that live in `_includes`, and a
|
79
|
+
description of the urls for which they are included in `_layouts/default.html`.
|
80
|
+
|
81
|
+
- `404.html`: included when url == /404 (or anything not found)
|
82
|
+
- `about.html`: included when url == /about
|
83
|
+
- `formbutton.html`: included everywhere (if `_data/formbutton.yml` has been appropriately configured)
|
84
|
+
- `head.html`: included everywhere for metadata, stylesheets and JS imports
|
85
|
+
- `home.html`: included when url == /
|
86
|
+
- `js.html`: included everywhere (via `head.html`)
|
87
|
+
- `nav.html`: included everywhere; just looks different when url == / or /404
|
88
|
+
- `particles.html`: included everywhere to create particleground backgrounds
|
89
|
+
- `projects.html`: included when url == /projects
|
90
|
+
- `resume.html`: included when url == /resume
|
91
|
+
- `typewrite.html`: included when url == /home or /404 for "typewriting" the text when nav-icon:hover
|
92
|
+
|
93
|
+
# Adding your own content
|
94
|
+
## Projects
|
95
|
+
You can manage your projects under `projects/_posts`. I've included 6 dummy projects in there that you
|
96
|
+
can change or replace with your own projects. Unfortunately, the file naming convention for jekyll-based posts
|
97
|
+
is quite strict (YYYY-MM-DD-title.md). Posts with different naming conventions will probably not show in this or
|
98
|
+
any other theme.
|
99
|
+
|
100
|
+
## Images
|
101
|
+
All images can be added to and imported from the `img/` folder in the theme root. The only exception is
|
102
|
+
`favicon.ico`, which lives in the theme root.
|
103
|
+
|
104
|
+
## Resumé
|
105
|
+
You'll need to upload your resumé as a PDF file (under `downloads/`) so that visitors can download it
|
106
|
+
using the button at the bottom of the /resume page.
|
107
|
+
|
108
|
+
I wish there was a good way to automatically render the HTML resume from this theme as a PDF, but
|
109
|
+
so far I haven't found any.
|
data/_includes/404.html
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
<!-- Header -->
|
2
|
+
|
3
|
+
<div class="header particles">
|
4
|
+
<div class="container instaFade">
|
5
|
+
<div class="row">
|
6
|
+
<div class="col-lg-12">
|
7
|
+
<div class="intro-text">
|
8
|
+
<span class="name">...oops!</span>
|
9
|
+
<span class="description">
|
10
|
+
<p>Either you broke my website, or I did.</p>
|
11
|
+
<p>If you think it was me, please <a style="cursor: pointer" onclick="$('.formbutton').click();">let me know.</a></p>
|
12
|
+
<p>If you think it was you, try a different page.</p>
|
13
|
+
</span>
|
14
|
+
</div>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
{% include nav.html %}
|
18
|
+
{% include typewrite.html %}
|
19
|
+
</div>
|
20
|
+
</div>
|
@@ -0,0 +1,26 @@
|
|
1
|
+
<!-- About Section -->
|
2
|
+
<section id="about" class="page particles">
|
3
|
+
<div class="page-container">
|
4
|
+
{% include nav.html %}
|
5
|
+
<div class="row">
|
6
|
+
<div class="col-lg-12 page-title fade-0">
|
7
|
+
<h2>{{ site.data.about.title }}</h2>
|
8
|
+
</div>
|
9
|
+
</div>
|
10
|
+
<div class="row">
|
11
|
+
<img class="img-featured img-centered fade-1"
|
12
|
+
src="{{ site.data.about.image | relative_url }}"></img>
|
13
|
+
</div>
|
14
|
+
{% for row in site.data.about.rows %}
|
15
|
+
{% assign i = 1 %}
|
16
|
+
<div class="row">
|
17
|
+
{% for paragraph in row %}
|
18
|
+
<div class="left-justified col-lg-4 {% if i == 1 %} col-lg-offset-2 {% endif %} fade-{{ i }}">
|
19
|
+
<p>{{ paragraph }}</p>
|
20
|
+
</div>
|
21
|
+
{% assign i = i | plus: 1 %}
|
22
|
+
{% endfor %}
|
23
|
+
</div>
|
24
|
+
{% endfor %}
|
25
|
+
</div>
|
26
|
+
</section>
|
@@ -0,0 +1,65 @@
|
|
1
|
+
<script src="https://formspree.io/js/formbutton-v1.min.js" defer></script>
|
2
|
+
|
3
|
+
<!-- Add contact button (see https://formspree.io/formbutton/docs) -->
|
4
|
+
<script>
|
5
|
+
window.formbutton=window.formbutton||function(){(formbutton.q=formbutton.q||[]).push(arguments)};
|
6
|
+
formbutton("create", {
|
7
|
+
title: "{{ site.data.formbutton.title }}",
|
8
|
+
description: null,
|
9
|
+
buttonImg: "<i class='fas fa-comment-alt' style='font-size: 24px;'/>",
|
10
|
+
action: "https://formspree.io/{{ site.data.formbutton.link }}",
|
11
|
+
theme: "{{ site.data.formbutton.theme }}",
|
12
|
+
onResponse: function(ok, setStatus) {
|
13
|
+
if (ok) {
|
14
|
+
setStatus("<span>{{ site.data.formbutton.response }}</span>");
|
15
|
+
} else {
|
16
|
+
setStatus("<span style='color: red'>{{ site.data.formbutton.error_message }}</span>");
|
17
|
+
}
|
18
|
+
},
|
19
|
+
fields: [{
|
20
|
+
name: "name",
|
21
|
+
type: "text",
|
22
|
+
label: "Your Name",
|
23
|
+
required: true,
|
24
|
+
},
|
25
|
+
{
|
26
|
+
name: "email",
|
27
|
+
type: "email",
|
28
|
+
label: "Your Email",
|
29
|
+
required: true
|
30
|
+
},
|
31
|
+
{
|
32
|
+
name: "Message",
|
33
|
+
type: "textarea"
|
34
|
+
},
|
35
|
+
{
|
36
|
+
type: "submit"
|
37
|
+
}],
|
38
|
+
styles: {
|
39
|
+
fontSize: "14px",
|
40
|
+
fontFamily: "{{ site.data.formbutton.font.body }}",
|
41
|
+
lineHeight: "1",
|
42
|
+
body: {
|
43
|
+
background: "{{ site.data.formbutton.color.body-background }}"
|
44
|
+
},
|
45
|
+
button: {
|
46
|
+
border: "2px solid {{ site.data.formbutton.color.button }}",
|
47
|
+
borderRadius: "20px",
|
48
|
+
background: "{{ site.data.formbutton.color.button-background }}",
|
49
|
+
color: "{{ site.data.formbutton.color.button }}",
|
50
|
+
boxShadow: "None",
|
51
|
+
width: "50px",
|
52
|
+
height: "50px"
|
53
|
+
},
|
54
|
+
title: {
|
55
|
+
fontFamily: "{{ site.data.formbutton.font.title }}",
|
56
|
+
background: "{{ site.data.formbutton.color.title-background }}",
|
57
|
+
color: "{{ site.data.formbutton.color.title }}",
|
58
|
+
letterSpacing: "0.05em",
|
59
|
+
},
|
60
|
+
closeButton: {
|
61
|
+
display: "None"
|
62
|
+
}
|
63
|
+
}
|
64
|
+
});
|
65
|
+
</script>
|
data/_includes/head.html
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
<head>
|
2
|
+
<meta charset="utf-8">
|
3
|
+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
4
|
+
<title>{{ site.title }}</title>
|
5
|
+
<meta name="viewport" content="width=device-width">
|
6
|
+
<meta name="description" content="{{ site.description }}">
|
7
|
+
<meta name="keywords" content="{{ site.keywords }}" />
|
8
|
+
{% if site.meta_author %}<meta name="author" content="{{ site.meta_author }}">{% endif %}
|
9
|
+
<link rel="shortcut icon" type="image/png" href="{{ favicon.ico | relative_url}}">
|
10
|
+
<link rel="canonical" href="{{ page.url | replace:'index.html','' | prepend: site.baseurl }}">
|
11
|
+
<link rel="alternate" type="application/rss+xml" title="RSS" href="/feed.xml">
|
12
|
+
|
13
|
+
<!-- Custom CSS & Bootstrap Core CSS - Uses Bootswatch Flatly Theme: http://bootswatch.com/flatly/ -->
|
14
|
+
<link rel="stylesheet" href="{{ 'style/bootstrap.min.css' | relative_url }}">
|
15
|
+
<link rel="stylesheet" href="{{ 'style/main.css' | relative_url }}">
|
16
|
+
{% include js.html %}
|
17
|
+
|
18
|
+
<!-- Font Awesome 5.14 -->
|
19
|
+
<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.14.0/css/all.min.css" rel="stylesheet">
|
20
|
+
</head>
|
data/_includes/home.html
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
<!-- Header -->
|
2
|
+
|
3
|
+
<div class="header particles">
|
4
|
+
<div class="container instaFade">
|
5
|
+
<div class="row">
|
6
|
+
<div class="col-lg-12">
|
7
|
+
<div class="intro-text">
|
8
|
+
<span class="name">{{ site.title }}</span>
|
9
|
+
<span class="description">{{ site.description }}</span>
|
10
|
+
</div>
|
11
|
+
</div>
|
12
|
+
</div>
|
13
|
+
{% include nav.html %}
|
14
|
+
{% include typewrite.html %}
|
15
|
+
</div>
|
16
|
+
</div>
|
data/_includes/js.html
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
<!-- JQuery -->
|
2
|
+
<script src="{{ 'js/jquery-1.11.0.js' | relative_url }}"></script>
|
3
|
+
|
4
|
+
<!-- Bootstrap Core JavaScript -->
|
5
|
+
<script src="{{ 'js/bootstrap.min.js' | relative_url }}"></script>
|
6
|
+
|
7
|
+
<!-- Plugin JavaScript -->
|
8
|
+
<script src="{{ 'js/jquery.easing.min.js' | relative_url }}"></script>
|
9
|
+
<script src="{{ 'js/classie.js' | relative_url }}"></script>
|
10
|
+
<script src="{{ 'js/cbpAnimatedHeader.js' | relative_url }}"></script>
|
11
|
+
|
12
|
+
<script src="{{ 'js/freelancer.js' | relative_url }}"></script>
|
13
|
+
|
14
|
+
<!-- Particleground -->
|
15
|
+
<script src="{{ '/js/jquery.particleground.min.js' | relative_url }}"></script>
|
data/_includes/nav.html
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
<div id="nav" class="nav-row {% unless page.url == '/' or page.url contains '404' %}page-nav{% endunless %}">
|
2
|
+
{% if page.url == "/" %}
|
3
|
+
{% assign i = 1 %}
|
4
|
+
{% for nav-icon in site.data.nav-icons %} {% unless nav-icon.url == "/" %}
|
5
|
+
|
6
|
+
<div id="{{ nav-icon.id }}" data-typewrite="{{ nav-icon.typewrite }}" class="nav-icon fade-{{ i }} {{ nav-icon.icon }}"
|
7
|
+
{% if nav-icon.url contains 'https' %} onclick="window.open('{{ nav-icon.url }}');"
|
8
|
+
{% else %} onclick="location.href='{{ nav-icon.url | relative_url }}';"
|
9
|
+
{% endif %}></div>
|
10
|
+
|
11
|
+
{% assign i = i | plus:1 %}
|
12
|
+
{% endunless %}{% endfor %}
|
13
|
+
{% else %}
|
14
|
+
{% assign i = 1 %}
|
15
|
+
{% for nav-icon in site.data.nav-icons %}
|
16
|
+
<div id="{{ nav-icon.id }}" data-typewrite="{{ nav-icon.typewrite }}" class="nav-icon {{ nav-icon.icon }} {% if page.url contains nav-icon.url and nav-icon.url != '/' %}active{% endif %}"
|
17
|
+
{% if nav-icon.url contains 'https' %} onclick="window.open('{{ nav-icon.url }}');"
|
18
|
+
{% else %} onclick="location.href='{{ nav-icon.url | relative_url }}';"
|
19
|
+
{% endif %}></div>
|
20
|
+
{% if i == 3 %}
|
21
|
+
<div class="nav-break"></div>
|
22
|
+
{% assign i = 0 %}
|
23
|
+
{% endif %}
|
24
|
+
{% assign i = i | plus:1 %}
|
25
|
+
{% endfor %}
|
26
|
+
{% endif %}
|
27
|
+
</div>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<!-- Add particles to all elements with class "particles" -->
|
2
|
+
<script>
|
3
|
+
$(document).ready(function() {
|
4
|
+
$('.particles').particleground({
|
5
|
+
minSpeedX: {{ site.data.particles.speed.xmin }},
|
6
|
+
maxSpeedX: {{ site.data.particles.speed.xmax }},
|
7
|
+
minSpeedY: {{ site.data.particles.speed.ymin }},
|
8
|
+
maxSpeedY: {{ site.data.particles.speed.ymax }},
|
9
|
+
directionX: '{{ site.data.particles.direction.x }}',
|
10
|
+
directionY: '{{ site.data.particles.direction.y }}',
|
11
|
+
density: {{ site.data.particles.density }},
|
12
|
+
dotColor: '{{ site.data.particles.color }}',
|
13
|
+
lineColor: '{{ site.data.particles.line.color }}',
|
14
|
+
particleRadius: {{ site.data.particles.radius }},
|
15
|
+
lineWidth: {{ site.data.particles.line.width }},
|
16
|
+
curvedLines: {{ site.data.particles.line.curved }},
|
17
|
+
proximity: {{ site.data.particles.proximity }},
|
18
|
+
parallax: {{ site.data.particles.parallax.activate }},
|
19
|
+
parallaxMultiplier: {{ site.data.particles.parallax.multiplier }},
|
20
|
+
onInit: function() {},
|
21
|
+
onDestroy: function() {}
|
22
|
+
});
|
23
|
+
});
|
24
|
+
</script>
|
@@ -0,0 +1,48 @@
|
|
1
|
+
<!-- project Grid Section -->
|
2
|
+
<section id="project" class="page particles">
|
3
|
+
<div class="page-container">
|
4
|
+
{% include nav.html %}
|
5
|
+
<div class="row">
|
6
|
+
<div class="col-lg-12 page-title fade-0">
|
7
|
+
<h2>Projects</h2>
|
8
|
+
</div>
|
9
|
+
</div>
|
10
|
+
<div class="project-row">
|
11
|
+
{% assign i = 1 %}
|
12
|
+
{% for post in site.categories.projects reversed %}
|
13
|
+
<div class="project-item fade-{{ i }}">
|
14
|
+
{% assign i = i | plus: 1 %}
|
15
|
+
<a href="#projectModal-{{ post.modal-id }}" class="project-link" data-toggle="modal">
|
16
|
+
<img src="{{ post.image | relative_url }}" class="img-responsive fade-{{ i }}" alt="{{ post.alt }}">
|
17
|
+
</a>
|
18
|
+
</div>
|
19
|
+
{% endfor %}
|
20
|
+
</div>
|
21
|
+
</div>
|
22
|
+
</section>
|
23
|
+
|
24
|
+
<!-- project Modals -->
|
25
|
+
{% for post in site.categories.projects %}
|
26
|
+
<div class="project-modal modal fade-0" id="projectModal-{{ post.modal-id }}" tabindex="-1" role="dialog" aria-hidden="true">
|
27
|
+
<div class="modal-content">
|
28
|
+
<div class="close-modal" data-dismiss="modal">
|
29
|
+
<div class="lr">
|
30
|
+
<div class="rl">
|
31
|
+
</div>
|
32
|
+
</div>
|
33
|
+
</div>
|
34
|
+
<div class="container">
|
35
|
+
<div class="row">
|
36
|
+
<div class="col-lg-8 col-lg-offset-2">
|
37
|
+
<div class="modal-body">
|
38
|
+
<h2>{{ post.title }}</h2>
|
39
|
+
<hr>
|
40
|
+
<img src="{{ post.image | relative_url }}" class="img-featured img-centered" alt="{{ post.alt }}">
|
41
|
+
{{ post.content }}
|
42
|
+
</div>
|
43
|
+
</div>
|
44
|
+
</div>
|
45
|
+
</div>
|
46
|
+
</div>
|
47
|
+
</div>
|
48
|
+
{% endfor %}
|
@@ -0,0 +1,147 @@
|
|
1
|
+
<div id="resume-body" class="fade-0 particles">
|
2
|
+
<div>
|
3
|
+
<div class="mainDetails resume-section">
|
4
|
+
{% include nav.html %}
|
5
|
+
|
6
|
+
<div id="headshot" class="fade-0">
|
7
|
+
<img src="{{ site.data.resume.image | relative_url }}" alt="{{ site.title }}" />
|
8
|
+
</div>
|
9
|
+
|
10
|
+
<div id="name">
|
11
|
+
<h1 class="fade-1">{{ site.data.resume.name }}</h1>
|
12
|
+
<h2 class="fade-2">{{ site.data.resume.role }}</h2>
|
13
|
+
</div>
|
14
|
+
|
15
|
+
<div id="contactDetails" class="fade-4">
|
16
|
+
<ul>
|
17
|
+
<li><i class="fas fa-envelope"></i><a href="mailto:{{ site.email }}" target="_blank"> {{ site.email }}</a></li>
|
18
|
+
<li><i class="fas fa-globe"></i><a href="/"> {{ site.url }}</a></li>
|
19
|
+
<li><i class="fas fa-phone"></i> {{ site.phone }}</li>
|
20
|
+
<li><i class="fas fa-home"></i> {{ site.address }}</li>
|
21
|
+
</ul>
|
22
|
+
</div>
|
23
|
+
<div class="clear"></div>
|
24
|
+
</div>
|
25
|
+
|
26
|
+
<div id="mainArea" class="fade-5">
|
27
|
+
<section class="resume-section">
|
28
|
+
<article>
|
29
|
+
<div class="sectionTitle">
|
30
|
+
<h1>Personal Profile</h1>
|
31
|
+
<hr>
|
32
|
+
</div>
|
33
|
+
|
34
|
+
<div class="sectionContent">
|
35
|
+
<p>{{ site.data.resume.personal-profile }}</p>
|
36
|
+
</div>
|
37
|
+
</article>
|
38
|
+
<div class="clear"></div>
|
39
|
+
</section>
|
40
|
+
|
41
|
+
<section class="resume-section">
|
42
|
+
<div class="sectionTitle">
|
43
|
+
<h1>Skills</h1>
|
44
|
+
<hr>
|
45
|
+
</div>
|
46
|
+
|
47
|
+
<div class="sectionContent">
|
48
|
+
<ul class="keySkills">
|
49
|
+
{% for skill in site.data.resume.skills %}
|
50
|
+
<li>{{ skill }}</li>
|
51
|
+
{% endfor %}
|
52
|
+
</ul>
|
53
|
+
</div>
|
54
|
+
<div class="clear"></div>
|
55
|
+
</section>
|
56
|
+
|
57
|
+
<section class="resume-section">
|
58
|
+
<div class="sectionTitle">
|
59
|
+
<h1>Education</h1>
|
60
|
+
<hr>
|
61
|
+
</div>
|
62
|
+
|
63
|
+
<div class="sectionContent">
|
64
|
+
{% assign i=0 %}
|
65
|
+
{% for degree in site.data.resume.education %}
|
66
|
+
{% if i != 0%}<hr>{% endif %}
|
67
|
+
{% assign i = i | plus:1 %}
|
68
|
+
<article>
|
69
|
+
<h2>{{ degree.title }}, {{ degree.institute }}</h2>
|
70
|
+
<p class="subDetails">{{ position.dates }}</p>
|
71
|
+
{% for bullet in position.bullets %}
|
72
|
+
<p class="resume-bullet">{% if bullet.title %}{{ bullet.title }}: {% endif %}{{ bullet.info }}</p>
|
73
|
+
{% endfor %}
|
74
|
+
</article>
|
75
|
+
{% endfor %}
|
76
|
+
</div>
|
77
|
+
<div class="clear"></div>
|
78
|
+
</section>
|
79
|
+
|
80
|
+
<section class="resume-section">
|
81
|
+
<div class="sectionTitle">
|
82
|
+
<h1>Work History</h1>
|
83
|
+
<hr>
|
84
|
+
</div>
|
85
|
+
|
86
|
+
<div class="sectionContent">
|
87
|
+
{% assign i=0 %}
|
88
|
+
{% for job in site.data.resume.work-history %}
|
89
|
+
{% if i != 0%}<hr>{% endif %}
|
90
|
+
{% assign i = i | plus:1 %}
|
91
|
+
<article>
|
92
|
+
<h2>{{ job.title }}</h2>
|
93
|
+
<p class="subDetails">{{ job.employer }}, {{ job.dates }}</p>
|
94
|
+
{% for bullet in job.bullets %}
|
95
|
+
<p class="resume-bullet">{{ bullet }}</p>
|
96
|
+
{% endfor %}
|
97
|
+
</article>
|
98
|
+
{% endfor %}
|
99
|
+
</div>
|
100
|
+
<div class="clear"></div>
|
101
|
+
</section>
|
102
|
+
|
103
|
+
<section class="resume-section">
|
104
|
+
<div class="sectionTitle">
|
105
|
+
<h1>Awards and Other Work</h1>
|
106
|
+
<hr>
|
107
|
+
</div>
|
108
|
+
|
109
|
+
<div class="sectionContent">
|
110
|
+
{% assign i=0 %}
|
111
|
+
{% for award in site.data.resume.awards %}
|
112
|
+
{% if i != 0%}<hr>{% endif %}
|
113
|
+
{% assign i = i | plus:1 %}
|
114
|
+
<h2>{{ award.title }}</h2>
|
115
|
+
{% for bullet in award.bullets %}
|
116
|
+
<p class="resume-bullet">{{ bullet }}</p>
|
117
|
+
{% endfor %}
|
118
|
+
{% endfor %}
|
119
|
+
</div>
|
120
|
+
<div class="clear"></div>
|
121
|
+
</section>
|
122
|
+
|
123
|
+
<section class="resume-section">
|
124
|
+
<div class="sectionTitle">
|
125
|
+
<h1>References</h1>
|
126
|
+
<hr>
|
127
|
+
</div>
|
128
|
+
|
129
|
+
<div class="sectionContent">
|
130
|
+
{% assign i=0 %}
|
131
|
+
{% for reference in site.data.resume.references %}
|
132
|
+
{% if i != 0%}<hr>{% endif %}
|
133
|
+
{% assign i = i | plus:1 %}
|
134
|
+
<p>{{ reference.name }}, {{ reference.position }} | <a href="mailto:{{ reference.email }}"><i class="fas fa-envelope"></i></a></p>
|
135
|
+
{% endfor %}
|
136
|
+
</div>
|
137
|
+
<div class="clear"></div>
|
138
|
+
</section>
|
139
|
+
<div style="display: flex; justify-content: center;">
|
140
|
+
<a class="fade-3" href="{{ site.data.resume.download | relative_url }}" download>
|
141
|
+
<div class="resume-section btn-outline"><i class="fa fa-download"></i></div>
|
142
|
+
</a>
|
143
|
+
</div>
|
144
|
+
</div>
|
145
|
+
</div>
|
146
|
+
</div>
|
147
|
+
</div>
|
@@ -0,0 +1,71 @@
|
|
1
|
+
<h1 class="typewrite">
|
2
|
+
<a id="typewrite" href="" class="typewrite">
|
3
|
+
<span class="wrap" id="wrap"></span>
|
4
|
+
</a>
|
5
|
+
</h1>
|
6
|
+
|
7
|
+
<script>
|
8
|
+
|
9
|
+
function delay(ms) {
|
10
|
+
return new Promise(resolve => setTimeout(resolve, ms));
|
11
|
+
}
|
12
|
+
|
13
|
+
if (!window.matchMedia( "(hover: none)" ).matches) {
|
14
|
+
$(".nav-icon").on({
|
15
|
+
mouseenter: function () {
|
16
|
+
new TxtType($("#typewrite"), $("#wrap").html(), $(this).attr("data-typewrite")).type();
|
17
|
+
},
|
18
|
+
mouseleave: function () {
|
19
|
+
new TxtType($("#typewrite"), $("#wrap").html(), "").wipe();
|
20
|
+
}
|
21
|
+
});
|
22
|
+
} else {
|
23
|
+
$( document ).ready(function() {
|
24
|
+
var t = 500;
|
25
|
+
var nLoops = 0;
|
26
|
+
while (nLoops < 5) {
|
27
|
+
$('.nav-icon').each(function(i, obj) {
|
28
|
+
delay(t).then(() => $(obj).addClass("active"));
|
29
|
+
delay(t+500).then(() => new TxtType($("#typewrite"), "", $(obj).attr("data-typewrite")).type());
|
30
|
+
delay(t+2500).then(() => new TxtType($("#typewrite"), $("#wrap").html(), "").wipe());
|
31
|
+
delay(t+2500).then(() => $(obj).removeClass("active"));
|
32
|
+
t += 2500;
|
33
|
+
});
|
34
|
+
nLoops += 1;
|
35
|
+
};
|
36
|
+
});
|
37
|
+
}
|
38
|
+
|
39
|
+
var TxtType = function(el, startTxt, endTxt) {
|
40
|
+
this.el = el;
|
41
|
+
this.txt = startTxt;
|
42
|
+
this.endTxt = endTxt;
|
43
|
+
};
|
44
|
+
|
45
|
+
TxtType.prototype.type = function() {
|
46
|
+
if (this.txt.length < this.endTxt.length) {
|
47
|
+
this.txt = this.endTxt.substring(0, this.txt.length + 1);
|
48
|
+
this.el.html('<span class="wrap blinking-cursor" id="wrap">'+this.txt+'</span>');
|
49
|
+
} else {
|
50
|
+
return;
|
51
|
+
};
|
52
|
+
var that = this;
|
53
|
+
setTimeout(function() {
|
54
|
+
that.type();
|
55
|
+
}, 50);
|
56
|
+
};
|
57
|
+
|
58
|
+
TxtType.prototype.wipe = function() {
|
59
|
+
if (this.txt.length) {
|
60
|
+
this.txt = this.txt.substring(0, this.txt.length - 1);
|
61
|
+
this.el.html('<span class="wrap blinking-cursor" id="wrap">'+this.txt+'</span>');
|
62
|
+
} else {
|
63
|
+
this.el.html('<span class="wrap" id="wrap">'+this.txt+'</span>');
|
64
|
+
return;
|
65
|
+
};
|
66
|
+
var that = this;
|
67
|
+
setTimeout(function() {
|
68
|
+
that.wipe();
|
69
|
+
}, 20);
|
70
|
+
};
|
71
|
+
</script>
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
{% if site.data.formbutton.link %}
|
4
|
+
{% include formbutton.html %}
|
5
|
+
{% endif %}
|
6
|
+
{% include head.html %}
|
7
|
+
<body id="page-top" class="index">
|
8
|
+
|
9
|
+
{% include {{ page.include }} %}
|
10
|
+
|
11
|
+
{% include particles.html %}
|
12
|
+
|
13
|
+
</body>
|
14
|
+
</html>
|
metadata
ADDED
@@ -0,0 +1,198 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: particular-theme-jekyll
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Michael Ashton
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2020-09-15 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: jekyll
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '4.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '4.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: jekyll-paginate
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.1'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.1'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: jekyll-sitemap
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.3'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.3'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: jekyll-gist
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '1.5'
|
62
|
+
type: :runtime
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '1.5'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: jekyll-feed
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.12'
|
76
|
+
type: :runtime
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.12'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: jekyll-data
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '1.1'
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '1.1'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: jemoji
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0.11'
|
104
|
+
type: :runtime
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0.11'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: bundler
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '2.0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '2.0'
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rake
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - "~>"
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: '13.0'
|
132
|
+
type: :development
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - "~>"
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '13.0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: html-proofer
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '3.15'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '3.15'
|
153
|
+
description:
|
154
|
+
email:
|
155
|
+
executables: []
|
156
|
+
extensions: []
|
157
|
+
extra_rdoc_files: []
|
158
|
+
files:
|
159
|
+
- LICENSE
|
160
|
+
- README.md
|
161
|
+
- _includes/404.html
|
162
|
+
- _includes/about.html
|
163
|
+
- _includes/formbutton.html
|
164
|
+
- _includes/head.html
|
165
|
+
- _includes/home.html
|
166
|
+
- _includes/js.html
|
167
|
+
- _includes/nav.html
|
168
|
+
- _includes/particles.html
|
169
|
+
- _includes/projects.html
|
170
|
+
- _includes/resume.html
|
171
|
+
- _includes/typewrite.html
|
172
|
+
- _layouts/default.html
|
173
|
+
homepage: https://github.com/ashtonmv/particular-theme
|
174
|
+
licenses:
|
175
|
+
- MIT
|
176
|
+
metadata:
|
177
|
+
plugin_type: theme
|
178
|
+
post_install_message:
|
179
|
+
rdoc_options: []
|
180
|
+
require_paths:
|
181
|
+
- lib
|
182
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
183
|
+
requirements:
|
184
|
+
- - ">="
|
185
|
+
- !ruby/object:Gem::Version
|
186
|
+
version: '0'
|
187
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
188
|
+
requirements:
|
189
|
+
- - ">="
|
190
|
+
- !ruby/object:Gem::Version
|
191
|
+
version: '0'
|
192
|
+
requirements: []
|
193
|
+
rubygems_version: 3.0.3
|
194
|
+
signing_key:
|
195
|
+
specification_version: 4
|
196
|
+
summary: Particular is a cheerful, responsive Bootstrap theme for hosting personal
|
197
|
+
resumés.
|
198
|
+
test_files: []
|