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.
@@ -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.
@@ -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.
@@ -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>
@@ -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>
@@ -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>
@@ -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>
@@ -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: []