Update file extensions
This commit is contained in:
parent
364e2d887f
commit
91e638397d
9
source/_partials/availability.html.twig
Normal file
9
source/_partials/availability.html.twig
Normal file
|
@ -0,0 +1,9 @@
|
|||
<div class="availability panel panel-default">
|
||||
<div class="panel-heading">Availability</div>
|
||||
|
||||
<div class="panel-body">
|
||||
{% for key, availability in site.availability %}
|
||||
{% include 'availability/' ~ availability with { value: key } %}
|
||||
{% endfor %}
|
||||
</div>
|
||||
</div>
|
6
source/_partials/availability/limited.html.twig
Normal file
6
source/_partials/availability/limited.html.twig
Normal file
|
@ -0,0 +1,6 @@
|
|||
<p>
|
||||
<i class="fa fa-thumbs-o-up text-warning"></i>
|
||||
|
||||
{{ value == 'full' ? 'Currently have limited full-time capacity' }}
|
||||
{{ value == 'part' ? 'Currently have limited part-time capacity' }}
|
||||
</p>
|
6
source/_partials/availability/no.html.twig
Normal file
6
source/_partials/availability/no.html.twig
Normal file
|
@ -0,0 +1,6 @@
|
|||
<p>
|
||||
<i class="fa fa-thumbs-o-down text-danger"></i>
|
||||
|
||||
{{ value == 'full' ? 'Currently no spare full-time capacity.' }}
|
||||
{{ value == 'part' ? 'Currently no spare part-time capacity.' }}
|
||||
</p>
|
6
source/_partials/availability/yes.html.twig
Normal file
6
source/_partials/availability/yes.html.twig
Normal file
|
@ -0,0 +1,6 @@
|
|||
<p>
|
||||
<i class="fa fa-thumbs-o-up text-success"></i>
|
||||
|
||||
{{ value == 'full' ? 'Currently have available full-time capacity' }}
|
||||
{{ value == 'part' ? 'Currently have available part-time capacity' }}
|
||||
</p>
|
26
source/_partials/badges.html.twig
Normal file
26
source/_partials/badges.html.twig
Normal file
|
@ -0,0 +1,26 @@
|
|||
<div class="panel badges text-center">
|
||||
<a class="badge--da-member" href="https://assoc.drupal.org/membership" title="I’m a Drupal Association member.">
|
||||
<img
|
||||
src="{{ site.images_url }}/assets/images/da-individual-member.png"
|
||||
alt="Drupal Association Individual Member"
|
||||
width="152"
|
||||
>
|
||||
</a>
|
||||
|
||||
<a href="http://drupalcores.com/#{{ site.drupalorg.name }}">
|
||||
<img
|
||||
alt="I built Drupal 8 with hand holding a wrench on blue background"
|
||||
src="{{ site.images_url }}/assets/images/drupal-8.jpg"
|
||||
/>
|
||||
</a>
|
||||
|
||||
<img
|
||||
src="{{ site.images_url }}/assets/images/badges/acquia-certified-developer-drupal-8.png"
|
||||
alt="Acquia Certified Developer - Drupal 8 Exam Badge"
|
||||
height="147" width="147"
|
||||
/>
|
||||
|
||||
<a href="http://conference.phpnw.org.uk/phpnw17">
|
||||
<img src="{{ site.images_url }}/assets/images/badges/phpnw17.png" alt="">
|
||||
</a>
|
||||
</div>
|
0
source/_partials/head.html.twig
Normal file
0
source/_partials/head.html.twig
Normal file
12
source/_partials/meetups.html.twig
Normal file
12
source/_partials/meetups.html.twig
Normal file
|
@ -0,0 +1,12 @@
|
|||
<div class="meetups">
|
||||
<h2>Things that I organise</h2>
|
||||
<ul>
|
||||
{% for meetup in site.meetups %}
|
||||
<li class="meetups--{{ meetup.name|lower|replace({ ' ': '-' }) }}">
|
||||
<a href="{{ meetup.url }}" title="{{ meetup.name }}">
|
||||
<img src="{{ site.images_url }}/assets/images/meetups/{{ meetup.logo }}" alt="{{ meetup.name }}">
|
||||
</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
41
source/_partials/nav.html.twig
Normal file
41
source/_partials/nav.html.twig
Normal file
|
@ -0,0 +1,41 @@
|
|||
<nav class="navbar navbar-inverse navbar-fixed-top">
|
||||
<div class="container">
|
||||
<div class="navbar-header">
|
||||
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
|
||||
<span class="sr-only">Toggle navigation</span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
<span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="{{ site.url }}/">{{ site.title }}</a>
|
||||
</div>
|
||||
|
||||
<div id="navbar" class="collapse navbar-collapse" role="navigation">
|
||||
<ul class="nav navbar-nav">
|
||||
<li class="{{ page.url == '/.' ? 'active' }}">
|
||||
<a href="/">About</a>
|
||||
</li>
|
||||
|
||||
<li class="{{ page.url == '/experience' ? 'active' }}">
|
||||
<a href="/experience">Experience</a>
|
||||
</li>
|
||||
|
||||
<li class="{{ page.url == '/testimonials' ? 'active' }}">
|
||||
<a href="/testimonials">Testimonials</a>
|
||||
</li>
|
||||
|
||||
<li class="{{ page.url == '/talks' or '/talks/' in page.url ? 'active' }}">
|
||||
<a href="/talks">Talks</a>
|
||||
</li>
|
||||
|
||||
<li class="{{ page.url == '/blog' or '/blog/' in page.url ? 'active' }}">
|
||||
<a href="/blog">Blog</a>
|
||||
</li>
|
||||
|
||||
<li class="{{ page.url == '/contact' or '/contact/' in page.url ? 'active' }}">
|
||||
<a href="/contact">Contact</a>
|
||||
</li>
|
||||
</ul>
|
||||
</div>{# .nav-collapse #}
|
||||
</div>
|
||||
</nav>
|
46
source/_partials/og.html.twig
Normal file
46
source/_partials/og.html.twig
Normal file
|
@ -0,0 +1,46 @@
|
|||
<meta property="og:url" content="{{ site.url }}{{ page.url }}">
|
||||
<meta property="og:title" content="{{ og.title ? og.title|raw : page.title|raw }}"/>
|
||||
|
||||
{% if og.description %}
|
||||
<meta property="og:description" content="{{ og.description|raw }}"/>
|
||||
{% endif %}
|
||||
|
||||
{% if og.type %}
|
||||
<meta property="og:type" content="{{ og.type }}"/>
|
||||
{% endif %}
|
||||
|
||||
{% if og.image and og.image.url %}
|
||||
<meta property="og:image" content="{{ site.url }}{{ og.image.url }}"/>
|
||||
{% if og.image.type %}
|
||||
<meta property="og:image:type" content="{{ og.image.type }}"/>
|
||||
{% endif %}
|
||||
{% if og.image.width %}
|
||||
<meta property="og:image:width" content="{{ og.image.width }}"/>
|
||||
{% endif %}
|
||||
{% if og.image.height %}
|
||||
<meta property="og:image:height" content="{{ og.image.height }}"/>
|
||||
{% endif %}
|
||||
{% else %}
|
||||
<meta property="og:image" content="{{ site.url }}{{ site.avatar.url }}"/>
|
||||
<meta property="og:image:height" content="327"/>
|
||||
<meta property="og:image:type" content="image/jpg">
|
||||
<meta property="og:image:width" content="327"/>
|
||||
{% endif %}
|
||||
|
||||
{% if og.title %}
|
||||
{% if og.image %}
|
||||
<meta name="twitter:card" content="summary_large_image"/>
|
||||
<meta name="twitter:image:src" content="{{ site.url }}{{ og.image.url }}">
|
||||
{% else %}
|
||||
<meta name="twitter:card" content="summary"/>
|
||||
<meta name="twitter:image:src" content="{{ site.url }}{{ site.avatar.url }}">
|
||||
{% endif %}
|
||||
<meta name="twitter:creator" content="@{{ site.twitter.name }}"/>
|
||||
<meta name="twitter:title" content="{{ og.title|raw }}"/>
|
||||
<meta name="twitter:text:description" content="{{ og.description|raw }}"/>
|
||||
<meta name="twitter:site" content="@{{ site.twitter.name }}"/>
|
||||
{% endif %}
|
||||
|
||||
{% if page.hide_page %}
|
||||
<meta name="robots" content="no-index, no-follow">
|
||||
{% endif %}
|
7
source/_partials/post/about-author.html.twig
Normal file
7
source/_partials/post/about-author.html.twig
Normal file
|
@ -0,0 +1,7 @@
|
|||
<div class="about-author">
|
||||
<h2>About the Author</h2>
|
||||
|
||||
<img src="{{ site.images_url }}{{ site.avatar.url }}" alt="Picture of Oliver" class="img-circle">
|
||||
|
||||
<p>Oliver Davies is a Web Developer, System Administrator and Drupal specialist based in the UK. He is a {{ site.work.role }} at <a href="{{ site.companies[site.work.company].url }}">{{ site.companies[site.work.company].name }}</a> and also provides freelance consultancy services for Drupal websites, PHP applications and Linux servers.</p>
|
||||
</div>
|
3
source/_partials/post/feedback.html.twig
Normal file
3
source/_partials/post/feedback.html.twig
Normal file
|
@ -0,0 +1,3 @@
|
|||
<p class="post-feedback" style="font-style: italic">
|
||||
<b>Have feedback on this post?</b> <a href="mailto:{{ site.email }}?subject=Feedback: {{ page.title }}">Email me</a> or <a href="https://twitter.com/intent/tweet?text=@{{ site.twitter.name }}&url={{ site.url }}{{ page.url|url_encode }}">send me a tweet</a>.
|
||||
</p>
|
4
source/_partials/post/header.html.twig
Normal file
4
source/_partials/post/header.html.twig
Normal file
|
@ -0,0 +1,4 @@
|
|||
{% set title_tag = title_tag|default('h1') %}
|
||||
<{{ title_tag }}>{{ page.title }}</{{ title_tag }}>
|
||||
|
||||
<p class="posted">{{ page.date|date('jS F Y') }}</p>
|
17
source/_partials/post/pager.html.twig
Normal file
17
source/_partials/post/pager.html.twig
Normal file
|
@ -0,0 +1,17 @@
|
|||
<div class="post-pager is-flex">
|
||||
{% if page.previous_post %}
|
||||
<div class="is-half">
|
||||
<a href="{{ page.previous_post.url }}">
|
||||
« {{ page.previous_post.title }}
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{% if page.next_post %}
|
||||
<div class="is-half text-right">
|
||||
<a href="{{ page.next_post.url }}">
|
||||
{{ page.next_post.title }} »
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
</div>
|
11
source/_partials/post/related.html.twig
Normal file
11
source/_partials/post/related.html.twig
Normal file
|
@ -0,0 +1,11 @@
|
|||
{% if page.related -%}
|
||||
<h2>Related Posts</h2>
|
||||
|
||||
<ul>
|
||||
{% for relate in page.related -%}
|
||||
<li>
|
||||
<a href="{{ relate.source.url }}">{{ relate.title }}</a>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
{%- endif %}
|
8
source/_partials/post/tags.html.twig
Normal file
8
source/_partials/post/tags.html.twig
Normal file
|
@ -0,0 +1,8 @@
|
|||
{% if page.tags %}
|
||||
<p class="tags">
|
||||
Tags:
|
||||
{% for tag in page.tags %}
|
||||
<a href="{{ site.url }}/blog/tags/{{ tag|url_encode(true) }}">{{ tag }}</a>{% if not loop.last %}, {% endif %}
|
||||
{% endfor %}
|
||||
</p>
|
||||
{% endif %}
|
18
source/_partials/posts/latest.html.twig
Normal file
18
source/_partials/posts/latest.html.twig
Normal file
|
@ -0,0 +1,18 @@
|
|||
{% if data.posts and page.url != '/blog' %}
|
||||
<div class="latest-posts panel panel-default">
|
||||
<div class="latest-posts__heading panel-heading">Latest blog posts</div>
|
||||
|
||||
<ul class="list-group">
|
||||
{% for post in data.posts|slice(0, site.latest_posts) %}
|
||||
<li class="post list-group-item">
|
||||
<span class="post__title">
|
||||
<a href="{{ post.url }}">
|
||||
{{ post.title }}
|
||||
</a>
|
||||
</span> -
|
||||
<span class="post__date">{{ post.date|date(site.default_date_format) }}</span>
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
21
source/_partials/project/company.html.twig
Normal file
21
source/_partials/project/company.html.twig
Normal file
|
@ -0,0 +1,21 @@
|
|||
{% if page.company %}
|
||||
{% set company = site.companies[page.company] %}
|
||||
|
||||
<div class="project-company {{ company.logo ? 'has-logo' : 'no-logo' }}">
|
||||
<h2>Built {{ page.freelance ? 'for' : 'whilst at' }}</h2>
|
||||
|
||||
{% if company.logo %}
|
||||
{% set name = '<img src="/assets/images/experience/' ~ company.logo ~ '" alt="' ~ company.name ~ '">' %}
|
||||
{% else %}
|
||||
{% set name = company.name %}
|
||||
{% endif %}
|
||||
|
||||
{% if company.url %}
|
||||
<a href="{{ company.url }}" title="{{ company.name }}">
|
||||
{{ name|raw }}
|
||||
</a>
|
||||
{% else %}
|
||||
{{ name|raw }}
|
||||
{% endif %}
|
||||
</div>
|
||||
{% endif %}
|
3
source/_partials/project/image.html.twig
Normal file
3
source/_partials/project/image.html.twig
Normal file
|
@ -0,0 +1,3 @@
|
|||
{% if page.image -%}
|
||||
<img src="/assets/images/projects/{{ page.image.name ?: page.image }}" alt="{{ page.image.alt }}">
|
||||
{%- endif %}
|
11
source/_partials/project/skills.html.twig
Normal file
11
source/_partials/project/skills.html.twig
Normal file
|
@ -0,0 +1,11 @@
|
|||
{% if page.skills %}
|
||||
<div class="project--skills">
|
||||
<h2>Skills</h2>
|
||||
|
||||
<ul>
|
||||
{% for item in page.skills|sort %}
|
||||
<li>{{ site.skills[item].title }}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
||||
</div>
|
||||
{% endif %}
|
5
source/_partials/project/website.html.twig
Normal file
5
source/_partials/project/website.html.twig
Normal file
|
@ -0,0 +1,5 @@
|
|||
{% if page.website %}
|
||||
<a class="project-website btn btn-primary" href="{{ page.website }}">
|
||||
View the website
|
||||
</a>
|
||||
{% endif %}
|
11
source/_partials/skills-list.html.twig
Normal file
11
source/_partials/skills-list.html.twig
Normal file
|
@ -0,0 +1,11 @@
|
|||
<ul class="skills-list is-flex flex-wrap list-style-none">
|
||||
{% for skill in skills %}
|
||||
<li class="skill">
|
||||
<img
|
||||
class="skill-image"
|
||||
src="/assets/images/skills/{{ skill.image }}"
|
||||
title="{{ skill.name }}"
|
||||
alt="{{ skill.name }} logo">
|
||||
</li>
|
||||
{% endfor %}
|
||||
</ul>
|
13
source/_partials/skills.html.twig
Normal file
13
source/_partials/skills.html.twig
Normal file
|
@ -0,0 +1,13 @@
|
|||
<h2>Skills</h2>
|
||||
|
||||
<p>I regularly use:</p>
|
||||
|
||||
{% include 'skills-list' with { skills: site.skills[0] } %}
|
||||
|
||||
<p>I am also familiar with:</p>
|
||||
|
||||
{% include 'skills-list' with { skills: site.skills[1] } %}
|
||||
|
||||
<p>I would like to do more:</p>
|
||||
|
||||
{% include 'skills-list' with { skills: site.skills[2] } %}
|
1
source/_partials/speakerdeck.html.twig
Normal file
1
source/_partials/speakerdeck.html.twig
Normal file
|
@ -0,0 +1 @@
|
|||
<script async class="speakerdeck-embed" data-id="{{ data_id }}" data-ratio="1.29456384323641" src="//speakerdeck.com/assets/embed.js"></script>
|
81
source/_partials/talks-table.html.twig
Normal file
81
source/_partials/talks-table.html.twig
Normal file
|
@ -0,0 +1,81 @@
|
|||
<div class="table-responsive">
|
||||
<table class="table table-striped talks-table">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 20%">Date</th>
|
||||
|
||||
{% if not talk_page %}
|
||||
<th style="width: 40%">Talk</th>
|
||||
{% endif %}
|
||||
|
||||
<th>Event</th>
|
||||
|
||||
{% if not upcoming %}
|
||||
<th style="width: 10%">Feedback</th>
|
||||
{% endif %}
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
{% for row in events %}
|
||||
{% set talk = false %}
|
||||
{% set key = row.date.talk.id ?: row.date.talk %}
|
||||
|
||||
{% for item in row.talks if key == item.filename|split('.')|first %}
|
||||
{% set talk = item %}
|
||||
{% endfor %}
|
||||
<tr>
|
||||
<td class="vertical-middle">
|
||||
{{ row.date.date|date(row.date.fuzzy_date ? 'F Y' : 'j F Y') }}
|
||||
|
||||
{% if row.date.time %}
|
||||
<small class="display-block">{{ row.date.time }}</small>
|
||||
{% endif %}
|
||||
</td>
|
||||
|
||||
{% if not talk_page %}
|
||||
<td>
|
||||
{% if row.date.talk.title is defined %}
|
||||
{{ row.date.talk.title }}
|
||||
{% else %}
|
||||
<a href="{{ talk.url }}">{{ talk.title }}</a>
|
||||
{% endif %}
|
||||
|
||||
<small class="display-block">
|
||||
{{ row.date.talk.type ?: talk.type }}
|
||||
</small>
|
||||
</td>
|
||||
{% endif %}
|
||||
|
||||
<td class="vertical-middle">
|
||||
{% if row.event.website %}
|
||||
<a href="{{ row.event.website }}">
|
||||
{{ row.event.name }}
|
||||
</a>
|
||||
{% else %}
|
||||
{{ row.event.name }}
|
||||
{% endif %}
|
||||
|
||||
<small class="display-block">
|
||||
{{ row.event.location }}
|
||||
</small>
|
||||
</td>
|
||||
|
||||
{% if not upcoming %}
|
||||
<td class="vertical-middle">
|
||||
{% if row.date.feedback %}
|
||||
<a
|
||||
href="{{ row.date.feedback }}"
|
||||
class="btn btn-primary"
|
||||
title="Read or leave feedback for this talk"
|
||||
>
|
||||
<i class="fa fa-comment-o"></i> joind.in
|
||||
</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
{% endif %}
|
||||
|
||||
</tr>
|
||||
{% endfor %}
|
||||
</tbody>
|
||||
</table>
|
||||
</div>
|
5
source/_partials/tweet.html.twig
Normal file
5
source/_partials/tweet.html.twig
Normal file
|
@ -0,0 +1,5 @@
|
|||
<p>
|
||||
<blockquote class="twitter-tweet" data-cards="hidden" lang="en">
|
||||
{{ content|raw }}
|
||||
</blockquote>
|
||||
</p>
|
68
source/_views/default.html.twig
Normal file
68
source/_views/default.html.twig
Normal file
|
@ -0,0 +1,68 @@
|
|||
<!DOCTYPE html>
|
||||
<html class="no-js" lang="en-GB">
|
||||
<head>
|
||||
<title>{% if page.url == '/.' %}{{ site.subtitle }} | {{ site.title }}{% else %}{{ page.title }} | {{ site.title }}{% endif %}</title>
|
||||
|
||||
<meta charset="UTF-8">
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
|
||||
{% if page.meta.description %}
|
||||
<meta name="description" content="{{ page.meta.description|e('html') }}">
|
||||
{% endif %}
|
||||
|
||||
{% include 'og' with { og: page.meta.og } %}
|
||||
|
||||
<link rel="stylesheet" href="{{ site.url }}/assets/css/main.css">
|
||||
{% block stylesheets '' %}
|
||||
|
||||
{% for size in site.apple_touch_icon_sizes %}
|
||||
<link rel="apple-touch-icon" href="{{ site.avatar.url }}?s={{ size }}" sizes="{{ size }}x{{ size }}">
|
||||
{% endfor %}
|
||||
|
||||
{% for size in site.favicon_sizes %}
|
||||
<link rel="icon" href="{{ site.avatar.url }}?s={{ size }}" sizes="{{ size }}x{{ size }}">
|
||||
{% endfor %}
|
||||
</head>
|
||||
<body class="{{ page.blocks.body_classes }}">
|
||||
{% include 'nav' %}
|
||||
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<main class="col-md-9">
|
||||
{% block content_top %}{% endblock %}
|
||||
{% block content_wrapper %}{% block content %}{% endblock %}{% endblock %}
|
||||
{% block content_bottom %}{% endblock %}
|
||||
</main>
|
||||
|
||||
{% block sidebar_wrapper %}
|
||||
<div class="col-md-3">
|
||||
{% block sidebar %}
|
||||
{% include 'badges' %}
|
||||
{% include 'availability' %}
|
||||
{% include 'posts/latest' %}
|
||||
{# {% include 'skills' %} #}
|
||||
{% endblock %}
|
||||
</div>
|
||||
{% endblock %}
|
||||
|
||||
</div>{# .row #}
|
||||
</div>{# .container #}
|
||||
|
||||
<footer class="container">
|
||||
<p class="copyright">
|
||||
© 2010-{{ 'now'|date('Y') }} {{ site.title }}. Built with <a href="https://sculpin.io">Sculpin</a>.
|
||||
</p>
|
||||
|
||||
{% include 'meetups' %}
|
||||
</footer>
|
||||
|
||||
<script src="{{ site.url }}/assets/js/site.js"></script>
|
||||
|
||||
{% if site.google_analytics_tracking_id %}
|
||||
<script>(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){ (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m) })(window,document,'script','//www.google-analytics.com/analytics.js','ga'); ga('create', '{{ site.google_analytics_tracking_id }}', 'auto'); ga('send', 'pageview');</script>
|
||||
{% endif %}
|
||||
|
||||
{% block scripts '' %}
|
||||
</body>
|
||||
</html>
|
5
source/_views/page.html.twig
Normal file
5
source/_views/page.html.twig
Normal file
|
@ -0,0 +1,5 @@
|
|||
{% extends 'default' %}
|
||||
|
||||
{% block content_top %}
|
||||
<h1>{{ page.title }}</h1>
|
||||
{% endblock %}
|
17
source/_views/post.html.twig
Normal file
17
source/_views/post.html.twig
Normal file
|
@ -0,0 +1,17 @@
|
|||
{% extends 'default' %}
|
||||
|
||||
{% block content_wrapper %}
|
||||
{% include 'post/header' %}
|
||||
|
||||
{% block content %}{% endblock %}
|
||||
|
||||
{# {% include 'post/feedback' %} #}
|
||||
{# {% include 'post/related' %} #}
|
||||
{% include 'post/tags' %}
|
||||
{% include 'post/pager' %}
|
||||
{% include 'post/about-author' %}
|
||||
{% endblock %}
|
||||
|
||||
{% block stylesheets %}
|
||||
<link rel="stylesheet" href="{{ site.url }}/assets/css/blog-post.css">
|
||||
{% endblock %}
|
17
source/_views/project.html.twig
Normal file
17
source/_views/project.html.twig
Normal file
|
@ -0,0 +1,17 @@
|
|||
{% extends 'page' %}
|
||||
|
||||
{% block body_classes 'page--project' %}
|
||||
|
||||
{% block content_wrapper %}
|
||||
{% include 'project/image' %}
|
||||
|
||||
{% block content %}{% endblock %}
|
||||
|
||||
{% include 'project/website' %}
|
||||
{% include 'project/skills' %}
|
||||
{% include 'project/company' %}
|
||||
{% endblock %}
|
||||
|
||||
{% block stylesheets %}
|
||||
<link rel="stylesheet" href="{{ site.url }}/assets/css/project.css">
|
||||
{% endblock %}
|
9
source/_views/redirect.html.twig
Normal file
9
source/_views/redirect.html.twig
Normal file
|
@ -0,0 +1,9 @@
|
|||
<!DOCTYPE html>
|
||||
{% spaceless %}
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
|
||||
<meta http-equiv="refresh" content="0;url={{ page.destination.url }}" />
|
||||
</head>
|
||||
</html>
|
||||
{% endspaceless %}
|
56
source/_views/talk.html.twig
Normal file
56
source/_views/talk.html.twig
Normal file
|
@ -0,0 +1,56 @@
|
|||
{% extends 'default' %}
|
||||
|
||||
{% block body_classes 'talk talk-full' %}
|
||||
|
||||
{% block content_top %}
|
||||
<h1>{{ page.title }}</h1>
|
||||
{% endblock %}
|
||||
|
||||
{% block content_wrapper %}
|
||||
<div class="talk-description">
|
||||
{% block content %}{% endblock %}
|
||||
</div>
|
||||
|
||||
{% if page.slides.embed %}
|
||||
<div class="talk-slides">
|
||||
<h2>Slides</h2>
|
||||
<div class="presentation">
|
||||
{{ page.slides.embed|raw }}
|
||||
</div>{# .presentation #}
|
||||
</div>{# .talk-slides #}
|
||||
{% endif %}
|
||||
|
||||
{% if page.video.embed %}
|
||||
<div class="talk-video">
|
||||
<h2>Video</h2>
|
||||
<div class="embed-container">
|
||||
{{ page.video.embed|raw }}
|
||||
</div>
|
||||
</div>{# .talk-video #}
|
||||
{% endif %}
|
||||
|
||||
<div class="talk-events">
|
||||
<h2>Events</h2>
|
||||
|
||||
{% set events = [] %}
|
||||
{% for date in site.events.dates %}
|
||||
{% set key = (date.talk.id is defined) ? date.talk.id : date.talk %}
|
||||
{% set talk = (page.id is defined) ? page.id : page.url|split('/')|last %}
|
||||
{% if key == talk %}
|
||||
{% set events = events|merge([{
|
||||
date: date,
|
||||
event: site.events.events[date.event],
|
||||
}]) %}
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
|
||||
{% include 'talks-table' with {
|
||||
events: events,
|
||||
talk_page: true,
|
||||
} %}
|
||||
</div>{# .talk-events #}
|
||||
{% endblock %}
|
||||
|
||||
{% block stylesheets %}
|
||||
<link rel="stylesheet" href="{{ site.url }}/assets/css/talk.css">
|
||||
{% endblock %}
|
43
source/contact.html.twig
Normal file
43
source/contact.html.twig
Normal file
|
@ -0,0 +1,43 @@
|
|||
---
|
||||
title: Contact
|
||||
layout: page
|
||||
use: [posts]
|
||||
---
|
||||
{% block content %}
|
||||
<p>To send me an email, complete the form below.</p>
|
||||
|
||||
<form action="https://formspree.io/{{ site.email }}" method="POST">
|
||||
<div class="form__name form-group">
|
||||
<label for="name">Name</label>
|
||||
<input type="text" class="form-control" name="name" required>
|
||||
</div>
|
||||
|
||||
<div class="form__email form-group">
|
||||
<label for="email">Email</label>
|
||||
<input type="email" class="form-control" name="email" required>
|
||||
</div>
|
||||
|
||||
<div class="form__subject form-group">
|
||||
<label for="subject">Subject</label>
|
||||
<input type="text" class="form-control" name="subject" required>
|
||||
</div>
|
||||
|
||||
<div class="form__message form-group">
|
||||
<label for="message">Message</label>
|
||||
<textarea name="message" class="form-control" rows="5" required></textarea>
|
||||
</div>
|
||||
|
||||
<div class="form__actions">
|
||||
<button class="btn btn-primary" type="submit">
|
||||
<i class="fa fa-send"></i>
|
||||
Send email
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<input type="hidden" name="_next" value="{{ site.url }}/contact-thanks/" />
|
||||
|
||||
<input type="text" name="_gotcha" style="display: none" />
|
||||
</form>
|
||||
{% endblock %}
|
||||
|
||||
{% block body_classes 'page--contact' %}
|
145
source/experience.html.twig
Normal file
145
source/experience.html.twig
Normal file
|
@ -0,0 +1,145 @@
|
|||
---
|
||||
layout: default
|
||||
title: Experience
|
||||
experiences:
|
||||
- company: microserve
|
||||
location: Bristol, England
|
||||
role: Senior Drupal Developer
|
||||
start: March 2017
|
||||
end: ~
|
||||
description: ~
|
||||
|
||||
- company: freelance
|
||||
location: Remote
|
||||
role: 'Web Developer & System Administrator'
|
||||
start: 2007
|
||||
end: ~
|
||||
featured: true
|
||||
description: |
|
||||
Working on Drupal and Symfony development, maintenance and support projects in my spare time.
|
||||
|
||||
Administration of Debian, Ubuntu and CentOS servers, and configuration using Puppet, or more recently, Ansible.
|
||||
|
||||
- company: appnovation
|
||||
location: Cardiff, Wales
|
||||
role: Senior Drupal Developer
|
||||
start: May 2016
|
||||
end: March 2017
|
||||
description: |
|
||||
Drupal 7 and 8 site building, custom module development and theming.
|
||||
|
||||
Part of various pre-sales teams, including the company’s first UK Drupal 8 project and first FTSE 100 client.
|
||||
|
||||
- company: cti
|
||||
role: Lead Drupal Developer
|
||||
location: Remote
|
||||
start: November 2015
|
||||
end: May 2016
|
||||
description: |
|
||||
Working on various Drupal 7 projects for clients including Greater London Authority (http://www.london.gov.uk), British Land and British Council, as well as various retainer contracts.
|
||||
|
||||
Working on internal Drupal 8 learning initiatives, focussing on custom module development and data migration.
|
||||
|
||||
Initial development of a CLI application for generating new and auditing existing codebases to ensure consistency across projects. This uses various Symfony components - mainly the Console and Filesystem components.
|
||||
|
||||
- company: microserve
|
||||
location: Bristol, England
|
||||
role: Senior Drupal Developer
|
||||
start: July 2015
|
||||
end: November 2015
|
||||
description: |
|
||||
Full-stack Drupal development, focussing on data migration.
|
||||
|
||||
Lead Developer of the [road.cc](http://road.cc) rebuild project onto Drupal 7, including working with non-Drupal PHP applications and utilising of Symfony components, and interacting with Drupal via REST.
|
||||
|
||||
Community and contribution advocate.
|
||||
|
||||
- company: drupal_association
|
||||
role: Drupal.org Developer
|
||||
location: Remote
|
||||
start: 2014
|
||||
end: July 2015
|
||||
description: |
|
||||
Maintaining and improving Drupal.org - the home of the Drupal community.
|
||||
|
||||
Speaking at user groups and DrupalCamps to promote the Drupal Association.
|
||||
|
||||
- company: precedent
|
||||
location: Cardiff, Wales
|
||||
role: Senior Drupal Developer
|
||||
start: 2013
|
||||
end: 2014
|
||||
description: |
|
||||
Drupal 7 website development, including site building, theming, module development, data migration and server configuration.
|
||||
|
||||
- company: nomensa
|
||||
location: Bristol, England
|
||||
role: 'Contract Drupal Developer / Application Developer & System Administrator'
|
||||
start: 2012
|
||||
end: 2013
|
||||
description: |
|
||||
Drupal 7 website development and Linux server administration.
|
||||
|
||||
I originally started as a contractor, and later took a staff role.
|
||||
|
||||
- company: proctors
|
||||
location: Bristol, England
|
||||
role: 'PHP Developer'
|
||||
start: 2011
|
||||
end: 2012
|
||||
description: |
|
||||
Website development, mainly with Drupal and PHP, including the agency’s first Drupal 7 project.
|
||||
|
||||
- company: horse_country
|
||||
location: Cwmbran, Wales
|
||||
role: Web Developer
|
||||
start: 2010
|
||||
end: 2011
|
||||
description: |
|
||||
Maintaining and adding new features to the Horse & Country TV website (Drupal 6).
|
||||
use: [posts]
|
||||
redirect:
|
||||
- services/
|
||||
- work/
|
||||
---
|
||||
{% block content %}
|
||||
<h1>Experience</h1>
|
||||
|
||||
{% for experience in page.experiences %}
|
||||
{% set company = site.companies[experience.company] %}
|
||||
|
||||
<div class="experience-item{% if company.logo %} has-logo{% endif %}">
|
||||
{% if company.logo %}
|
||||
<div class="experience-item-logo">
|
||||
<img src="{{ site.images_url }}/assets/images/experience/{{ company.logo }}" alt="{{ company.name }} logo">
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
<div class="experience-item-inner">
|
||||
<h2>{{ company.name }}</h2>
|
||||
|
||||
{% if company.url -%}
|
||||
<a class="experience-item-website" href="{{ company.url }}">
|
||||
{{- company.url -}}
|
||||
</a>
|
||||
{%- endif %}
|
||||
|
||||
<div class="experience-item-role">
|
||||
{{- experience.role }} from {{ experience.start }} to {{ experience.end|default('Present') -}}
|
||||
{%- if experience.location %} ({{ experience.location }}){% endif %}.
|
||||
</div>
|
||||
|
||||
{% if experience.description %}
|
||||
<div class="experience-item-description">
|
||||
{{ experience.description|markdown }}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
</div>{# /.inner #}
|
||||
</div>
|
||||
{% endfor %}
|
||||
{% endblock %}
|
||||
|
||||
{% block stylesheets %}
|
||||
<link rel="stylesheet" href="{{ site.url }}/assets/css/experience.css">
|
||||
{% endblock %}
|
14
source/projects.html.twig
Normal file
14
source/projects.html.twig
Normal file
|
@ -0,0 +1,14 @@
|
|||
---
|
||||
layout: page
|
||||
title: Projects
|
||||
use: [projects, posts]
|
||||
redirect:
|
||||
- portfolio/
|
||||
---
|
||||
<ul>
|
||||
{% for project in data.projects|reverse %}
|
||||
<li>{% spaceless %}
|
||||
<a href="{{ project.url }}">{{ project.title }}</a>
|
||||
{% endspaceless %}</li>
|
||||
{% endfor %}
|
||||
</ul>
|
95
source/testimonials.html.twig
Normal file
95
source/testimonials.html.twig
Normal file
|
@ -0,0 +1,95 @@
|
|||
---
|
||||
layout: default
|
||||
title: Testimonials
|
||||
testimonials:
|
||||
- name: Chris Jarvis
|
||||
image: chris-jarvis.jpg
|
||||
role: Developer at [Microserve](https://microserve.io)
|
||||
text: |
|
||||
Oliver is an amazing colleague, he's professional, full of knowledge and I could not recommend him more.</p>
|
||||
|
||||
- name: Josh Mitchell
|
||||
role: CTO at the [Drupal Association](https://assoc.drupal.org)
|
||||
image: josh-mitchell.png
|
||||
text: |
|
||||
Oliver is a skilled Drupal developer with a passion for the Drupal community. As his direct supervisor, I was able to watch Oliver grow with the Drupal Association and contribute an amazing amount of effort and integrity to all of his work.
|
||||
|
||||
Everything we have thrown at Oliver, he has approached with an open and flexible mind that has allowed him to work on a wide range of projects and features for Drupal products.
|
||||
|
||||
- name: Holly Ross
|
||||
role: Executive Director at the [Drupal Association](https://assoc.drupal.org)
|
||||
image: holly-ross.png
|
||||
text: |
|
||||
Oliver has been an outstanding contributor to the Drupal Association team. He is a talented developer who writes great code and applies his curiosity and love of learning to every project. He is also a fantastic team member, who gives to the team as much as he gets.
|
||||
|
||||
Oliver is the embodiment of everything good about the Drupal community.
|
||||
|
||||
- name: Léonie Watson
|
||||
role: Director of Accessibility at [Nomensa](http://www.nomensa.com)
|
||||
image: leonie-watson.jpg
|
||||
text: |
|
||||
Oliver is a flexible and hardworking developer, with a terrific knowledge of Drupal. He promotes accessibility best practice within the Drupal community, and is always happy to share his knowledge with other people.
|
||||
|
||||
- name: James Chapman
|
||||
role: Director at [Development Done Right](http://www.developmentdoneright.co.uk)
|
||||
image: james-chapman.png
|
||||
text: |
|
||||
We used Oliver on a number of occasions throughout 2012 and I have to say we've been delighted with his work. His skills working with Drupal are excellent particularly with custom module development and we wouldn’t hesitate to recommend him others.
|
||||
|
||||
- name: Daniel Easterbrook
|
||||
role: Digital Strategy Consultant
|
||||
text: |
|
||||
Oliver is seasoned Drupal and all round highly skilled and experienced web developer. I have worked with Oliver on an important project where he was reliable, prompt and ensured strict client deadline delivery and confidentiality at all times.
|
||||
|
||||
- name: Brian Hartwell
|
||||
role: Interactive Creative Director
|
||||
text: |
|
||||
Oliver was great to work with. He has expert knowledge with Drupal and delivered exactly what we were looking for on time. He's understanding, friendly and easy to get along with. I would enjoy working with him again in the future.
|
||||
|
||||
- name: Marlon Duncanson
|
||||
role: Brand & Web Specialist
|
||||
text: |
|
||||
Oliver is a great guy and really easy to work with. He really goes the extra mile to make sure the project is done properly. I would recommend him and will not hesitate to use him again in future.
|
||||
|
||||
- name: Brian Healy
|
||||
image: brian-healy.png
|
||||
role: Director of Business Development at [Tincan](http://tincan.co.uk)
|
||||
text: |
|
||||
Oliver was fantastic to work with - pro-active and highly responsive, he worked well remotely and as part of a project team. His understanding of the project requirement(s) and ability to translate it into working code was essential and he delivered.
|
||||
|
||||
- name: Ed Welsby
|
||||
image: ed-welsby.png
|
||||
role: Senior Developer at [Proctor & Stevenson](http://www.proctors.co.uk)
|
||||
text: |
|
||||
Oliver was great to work with, he has a solid knowledge of the various aspects of web development and never minded helping me out with Linux commands!
|
||||
use: [posts]
|
||||
---
|
||||
{% block content %}
|
||||
<h1>Testimonials</h1>
|
||||
|
||||
{% for testimonial in page.testimonials %}
|
||||
{% set company = testimonial.company %}
|
||||
|
||||
<article class="testimonial">
|
||||
<h2 class="testimonial__name">{{ testimonial.name }}</h2>
|
||||
|
||||
{% if testimonial.image %}
|
||||
<img class="testimonial__image pull-right img-circle" src="{{ site.url }}/assets/images/testimonials/{{ testimonial.image }}" alt="{{ testimonial.name }}"/>
|
||||
{% endif %}
|
||||
|
||||
{% if testimonial.role %}
|
||||
<div class="testimonial__role">
|
||||
{{ testimonial.role|markdown}}
|
||||
</div>
|
||||
{% endif %}
|
||||
|
||||
{{ testimonial.text|markdown }}
|
||||
</article>
|
||||
{% endfor %}
|
||||
{% endblock %}
|
||||
|
||||
{% block body_classes 'page--testimonials' %}
|
||||
|
||||
{% block stylesheets %}
|
||||
<link rel="stylesheet" href="{{ site.url }}/assets/css/testimonials.css">
|
||||
{% endblock %}
|
Loading…
Reference in a new issue