From 2212034404a1c563a1496968722a8ab835ebe7f1 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 18 May 2017 00:29:09 +0100 Subject: [PATCH 1/5] Update index.md --- source/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/index.md b/source/index.md index 98c68802..4d4e9a47 100644 --- a/source/index.md +++ b/source/index.md @@ -22,7 +22,7 @@ use: [posts, testimonials] Picture of Oliver -My name is Oliver Davies (aka [opdavies][1]) - a Web Developer and System Administrator based in Wales, UK. I’m a PHP specialist, a {{ site.work.role }} at [{{ site.companies[site.work.company].name }}][20], former Developer at the [{{ site.companies.drupal_association.name }}][39], part-time freelancer, open source contributor, mentor and conference speaker. +My name is Oliver Davies (aka [opdavies][1]) - a Web Developer and System Administrator based in Wales, UK. I’m a PHP specialist, a {{ site.work.role }} at [{{ site.companies[site.work.company].name }}][20], former Developer at the [{{ site.companies.drupal_association.name }}][39], part-time freelancer, open source contributor and advocate, mentor and conference speaker. I’m a provisional member of the [Drupal Security team][14] and a webmaster and documentation maintainer for Drupal.org. [I speak at various user groups and conferences][40], and co-organise the [Drupal Bristol user group][15], [PHPSW][17] and [DrupalCamp Bristol][18]. From b32dacee0e51ea8a87e657c705e8f9981cbb80c1 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Sat, 20 May 2017 08:06:24 +0100 Subject: [PATCH 2/5] Add post --- ...our-custom-drupal-module-into-a-feature.md | 36 ++++++++++++++++++ .../blog/custom-module-as-a-feature.png | Bin 0 -> 31869 bytes 2 files changed, 36 insertions(+) create mode 100644 source/_posts/2017-05-20-turning-your-custom-drupal-module-into-a-feature.md create mode 100644 source/assets/images/blog/custom-module-as-a-feature.png diff --git a/source/_posts/2017-05-20-turning-your-custom-drupal-module-into-a-feature.md b/source/_posts/2017-05-20-turning-your-custom-drupal-module-into-a-feature.md new file mode 100644 index 00000000..51f7c1f4 --- /dev/null +++ b/source/_posts/2017-05-20-turning-your-custom-drupal-module-into-a-feature.md @@ -0,0 +1,36 @@ +--- +title: Turning Your Custom Drupal Module into a Feature +tags: + - drupal + - drupal-7 + - drupal-planet + - features +slug: turning-drupal-module-into-feature +--- +{% block excerpt %} +Yesterday I was fixing a bug in an inherited Drupal 7 custom module, and I decided that I was going to add some tests to ensure that the bug was fixed and doesn’t get accidentially re-introduced in the future. The test though required me to have a particular content type and fields which are specific to this site, so aren't present within the standard installation profile used to run tests. + +I decided to convert the custom module into a [Feature][0] so that the content type and it’s fields could be added to it, and present on the testing site once the module is installed. + +To do this, I needed to expose the module to the Features API. +{% endblock %} + +{% block content %} +Yesterday I was fixing a bug in an inherited Drupal 7 custom module, and I decided that I was going to add some tests to ensure that the bug was fixed and doesn’t get accidentially re-introduced in the future. The test though required me to have a particular content type and fields which are specific to this site, so aren't present within the standard installation profile used to run tests. + +I decided to convert the custom module into a [Feature][0] so that the content type and it’s fields could be added to it, and present on the testing site once the module is installed. + +To do this, I needed to expose the module to the Features API. + +All that’s needed is to add this line to the `mymodule.info` file: + +```language-ini +features[features_api][] = api:2 +``` + +After clearing the cache, the module is now visible in the Features list - and ready to have the appropriate configuration added to it. + +!['The features list showing the custom module'](/assets/images/blog/custom-module-as-a-feature.png) +{% endblock %} + +[0]: https://www.drupal.org/project/features diff --git a/source/assets/images/blog/custom-module-as-a-feature.png b/source/assets/images/blog/custom-module-as-a-feature.png new file mode 100644 index 0000000000000000000000000000000000000000..726691737199c1c1cc54e58ae0168ab3ea352d85 GIT binary patch literal 31869 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 Date: Sat, 20 May 2017 08:07:25 +0100 Subject: [PATCH 3/5] Adjust code and image margin --- assets/sass/_base.sass | 3 +++ assets/sass/base/_code.sass | 1 + 2 files changed, 4 insertions(+) diff --git a/assets/sass/_base.sass b/assets/sass/_base.sass index e4cb3ad9..2fc67244 100644 --- a/assets/sass/_base.sass +++ b/assets/sass/_base.sass @@ -10,6 +10,9 @@ main img @extend .img-responsive + p img + margin: 1.5em 0 + .embed-container padding: 56.25% 0 0 position: relative diff --git a/assets/sass/base/_code.sass b/assets/sass/base/_code.sass index b673dc10..c347ee0f 100644 --- a/assets/sass/base/_code.sass +++ b/assets/sass/base/_code.sass @@ -7,6 +7,7 @@ pre pre[class*="language-"] border: 0 border-radius: 0 + margin: 1.5em 0 pre code white-space: pre From a89c270c845a63efdcd359d32d541cb64d860f8d Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Sun, 21 May 2017 12:26:45 +0100 Subject: [PATCH 4/5] Update 2017-05-20-turning-your-custom-drupal-module-into-a-feature.md --- ...20-turning-your-custom-drupal-module-into-a-feature.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/source/_posts/2017-05-20-turning-your-custom-drupal-module-into-a-feature.md b/source/_posts/2017-05-20-turning-your-custom-drupal-module-into-a-feature.md index 51f7c1f4..45741e64 100644 --- a/source/_posts/2017-05-20-turning-your-custom-drupal-module-into-a-feature.md +++ b/source/_posts/2017-05-20-turning-your-custom-drupal-module-into-a-feature.md @@ -8,17 +8,17 @@ tags: slug: turning-drupal-module-into-feature --- {% block excerpt %} -Yesterday I was fixing a bug in an inherited Drupal 7 custom module, and I decided that I was going to add some tests to ensure that the bug was fixed and doesn’t get accidentially re-introduced in the future. The test though required me to have a particular content type and fields which are specific to this site, so aren't present within the standard installation profile used to run tests. +Yesterday I was fixing a bug in an inherited Drupal 7 custom module, and I decided that I was going to add some tests to ensure that the bug was fixed and doesn’t get accidentially re-introduced in the future. The test though required me to have a particular content type and fields which are specific to this site, so weren’t present within the standard installation profile used to run tests. -I decided to convert the custom module into a [Feature][0] so that the content type and it’s fields could be added to it, and present on the testing site once the module is installed. +I decided to convert the custom module into a [Feature][0] so that the content type and it’s fields could be added to it, and therefore present on the testing site once the module is installed. To do this, I needed to expose the module to the Features API. {% endblock %} {% block content %} -Yesterday I was fixing a bug in an inherited Drupal 7 custom module, and I decided that I was going to add some tests to ensure that the bug was fixed and doesn’t get accidentially re-introduced in the future. The test though required me to have a particular content type and fields which are specific to this site, so aren't present within the standard installation profile used to run tests. +Yesterday I was fixing a bug in an inherited Drupal 7 custom module, and I decided that I was going to add some tests to ensure that the bug was fixed and doesn’t get accidentially re-introduced in the future. The test though required me to have a particular content type and fields which are specific to this site, so weren’t present within the standard installation profile used to run tests. -I decided to convert the custom module into a [Feature][0] so that the content type and it’s fields could be added to it, and present on the testing site once the module is installed. +I decided to convert the custom module into a [Feature][0] so that the content type and it’s fields could be added to it, and therefore present on the testing site once the module is installed. To do this, I needed to expose the module to the Features API. From 12aae7557872dd6db3f718c6303803a58f7358c2 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Sun, 21 May 2017 22:04:57 +0100 Subject: [PATCH 5/5] Split stylesheets. Fixes #32 --- .../_page-about.sass => about.sass} | 0 assets/sass/base/_code.sass | 18 ------ assets/sass/blog-post.sass | 39 +++++++++++++ .../{components/_blog-list.sass => blog.sass} | 2 + assets/sass/components/_about-author.sass | 7 --- .../_page-experience.sass => experience.sass} | 4 ++ assets/sass/main.sass | 12 ++++ .../_project-company.sass => project.sass} | 3 + assets/sass/site.sass | 21 ------- assets/sass/talk.sass | 14 +++++ .../_page-talk.sass => talks-table.sass} | 12 ---- .../_testimonials.sass => testimonials.sass} | 4 ++ gulpfile.js | 31 +++++++--- source/_partials/head.twig | 24 -------- source/_views/default.twig | 31 ++++++++-- source/_views/post.twig | 4 ++ source/_views/project.twig | 4 ++ source/_views/talk.twig | 5 ++ source/blog.html | 4 ++ source/experience.twig | 20 ++++--- source/index.md | 6 ++ source/talks.twig | 56 ++++++++++--------- source/testimonials.twig | 4 ++ 23 files changed, 199 insertions(+), 126 deletions(-) rename assets/sass/{components/_page-about.sass => about.sass} (100%) delete mode 100644 assets/sass/base/_code.sass create mode 100644 assets/sass/blog-post.sass rename assets/sass/{components/_blog-list.sass => blog.sass} (69%) rename assets/sass/{components/_page-experience.sass => experience.sass} (70%) create mode 100644 assets/sass/main.sass rename assets/sass/{components/_project-company.sass => project.sass} (70%) delete mode 100644 assets/sass/site.sass create mode 100644 assets/sass/talk.sass rename assets/sass/{components/_page-talk.sass => talks-table.sass} (57%) rename assets/sass/{components/_testimonials.sass => testimonials.sass} (53%) diff --git a/assets/sass/components/_page-about.sass b/assets/sass/about.sass similarity index 100% rename from assets/sass/components/_page-about.sass rename to assets/sass/about.sass diff --git a/assets/sass/base/_code.sass b/assets/sass/base/_code.sass deleted file mode 100644 index c347ee0f..00000000 --- a/assets/sass/base/_code.sass +++ /dev/null @@ -1,18 +0,0 @@ -pre - display: block - overflow: auto - word-break: normal - word-wrap: no-wrap - -pre[class*="language-"] - border: 0 - border-radius: 0 - margin: 1.5em 0 - -pre code - white-space: pre - word-break: normal - -code.hljs - background-color: inherit - padding: 0 diff --git a/assets/sass/blog-post.sass b/assets/sass/blog-post.sass new file mode 100644 index 00000000..8ceb2bd1 --- /dev/null +++ b/assets/sass/blog-post.sass @@ -0,0 +1,39 @@ +@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/clearfix' + +.post-pager + clear: both + margin-top: 2em + +.post-pager div + flex: 1 + +pre + display: block + overflow: auto + word-break: normal + word-wrap: no-wrap + +pre[class*="language-"] + border: 0 + border-radius: 0 + margin: 1.5em 0 + +pre code + white-space: pre + word-break: normal + +code.hljs + background-color: inherit + padding: 0 + +code[data-gist-id] + background: transparent + padding: 0 + +.about-author + +clearfix + + img + float: left + margin: 0 1em 1em 0 + width: 50px diff --git a/assets/sass/components/_blog-list.sass b/assets/sass/blog.sass similarity index 69% rename from assets/sass/components/_blog-list.sass rename to assets/sass/blog.sass index 765521a1..674bdfc6 100644 --- a/assets/sass/components/_blog-list.sass +++ b/assets/sass/blog.sass @@ -1,3 +1,5 @@ +@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/clearfix' + .page--blog__list ul.posts list-style: none diff --git a/assets/sass/components/_about-author.sass b/assets/sass/components/_about-author.sass index 1c6eeeef..e69de29b 100644 --- a/assets/sass/components/_about-author.sass +++ b/assets/sass/components/_about-author.sass @@ -1,7 +0,0 @@ -.about-author - +clearfix - - img - float: left - margin: 0 1em 1em 0 - width: 50px diff --git a/assets/sass/components/_page-experience.sass b/assets/sass/experience.sass similarity index 70% rename from assets/sass/components/_page-experience.sass rename to assets/sass/experience.sass index f278674e..202ba3d6 100644 --- a/assets/sass/components/_page-experience.sass +++ b/assets/sass/experience.sass @@ -1,3 +1,7 @@ +@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/clearfix' +@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/variables' +@import 'mixins' + .experience-item margin-bottom: $padding-large-vertical * 3 +clearfix diff --git a/assets/sass/main.sass b/assets/sass/main.sass new file mode 100644 index 00000000..7d476575 --- /dev/null +++ b/assets/sass/main.sass @@ -0,0 +1,12 @@ +@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap' + +@import 'base' +@import 'mixins' + +@import 'base/layout' +@import 'base/typography' + +@import 'components/availability' +@import 'components/badges' +@import 'components/footer' +@import 'components/meetups' diff --git a/assets/sass/components/_project-company.sass b/assets/sass/project.sass similarity index 70% rename from assets/sass/components/_project-company.sass rename to assets/sass/project.sass index 523b1f9d..516cfd9c 100644 --- a/assets/sass/components/_project-company.sass +++ b/assets/sass/project.sass @@ -1,3 +1,6 @@ +@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/variables' +@import 'mixins' + .project-company &.has-logo a:link, diff --git a/assets/sass/site.sass b/assets/sass/site.sass deleted file mode 100644 index ad5f732d..00000000 --- a/assets/sass/site.sass +++ /dev/null @@ -1,21 +0,0 @@ -@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap' - -@import 'base' -@import 'mixins' - -@import 'base/layout' -@import 'base/typography' -@import 'base/code' - -@import 'components/about-author' -@import 'components/availability' -@import 'components/badges' -@import 'components/blog-list' -@import 'components/footer' -@import 'components/meetups' -@import 'components/page-about' -@import 'components/page-post' -@import 'components/page-experience' -@import 'components/page-talk' -@import 'components/project-company' -@import 'components/testimonials' diff --git a/assets/sass/talk.sass b/assets/sass/talk.sass new file mode 100644 index 00000000..3c048396 --- /dev/null +++ b/assets/sass/talk.sass @@ -0,0 +1,14 @@ +@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/variables' +@import 'mixins' + +.talk-full h1 + margin-bottom: 25px + +.presentation + background: url('../images/loading.gif') no-repeat center + min-height: 275px + width: 100% + +tablet + min-height: 460px + +desktop + min-height: 540px diff --git a/assets/sass/components/_page-talk.sass b/assets/sass/talks-table.sass similarity index 57% rename from assets/sass/components/_page-talk.sass rename to assets/sass/talks-table.sass index d11b6f7d..5bdfe99c 100644 --- a/assets/sass/components/_page-talk.sass +++ b/assets/sass/talks-table.sass @@ -1,15 +1,3 @@ -.talk-full h1 - margin-bottom: 25px - -.presentation - background: url('../images/loading.gif') no-repeat center - min-height: 275px - width: 100% - +tablet - min-height: 460px - +desktop - min-height: 540px - .talk-event-table & > thead > tr > th, & > tbody > tr > td diff --git a/assets/sass/components/_testimonials.sass b/assets/sass/testimonials.sass similarity index 53% rename from assets/sass/components/_testimonials.sass rename to assets/sass/testimonials.sass index eaca8768..1cbaff0a 100644 --- a/assets/sass/components/_testimonials.sass +++ b/assets/sass/testimonials.sass @@ -1,3 +1,7 @@ +@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/mixins/clearfix' +@import '../../vendor/bower_components/bootstrap-sass/assets/stylesheets/bootstrap/variables' +@import 'mixins' + .testimonial +clearfix margin-bottom: 10px diff --git a/gulpfile.js b/gulpfile.js index 024d8fb5..b92db22b 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -20,12 +20,10 @@ var config = { } }; -gulp.task('styles', function () { - return gulp.src([ - config.bowerDir + '/font-awesome/css/font-awesome.css', - config.bowerDir + '/prism/themes/prism-twilight.css', - config.sass.sourceDir + config.sass.pattern - ]) +var app = {}; + +app.sass = function (sourceFiles, filename) { + return gulp.src(sourceFiles) .pipe(plugins.plumber()) .pipe(plugins.if(!config.production, plugins.sourcemaps.init())) .pipe(plugins.sassGlob()) @@ -34,7 +32,7 @@ gulp.task('styles', function () { browsers: ["last 2 versions", "> 5%"], cascade: false })) - .pipe(plugins.concat('site.css')) + .pipe(plugins.concat(filename)) .pipe(plugins.if(config.production, plugins.purifycss([ 'source/**/*.html', 'source/**/*.md', @@ -44,6 +42,25 @@ gulp.task('styles', function () { .pipe(plugins.if(!config.production, plugins.sourcemaps.write('.'))) .pipe(plugins.if(!config.production, plugins.refresh())) .pipe(gulp.dest(config.sass.outputDir)); +} + +gulp.task('styles', function () { + app.sass([ + config.bowerDir + '/font-awesome/css/font-awesome.css', + config.sass.sourceDir + '/main.sass' + ], 'main.css'); + + app.sass(config.sass.sourceDir + '/about.sass', 'about.css'); + app.sass(config.sass.sourceDir + '/blog.sass', 'blog.css'); + app.sass([ + config.bowerDir + '/prism/themes/prism-twilight.css', + config.sass.sourceDir + '/blog-post.sass' + ], 'blog-post.css'); + app.sass(config.sass.sourceDir + '/experience.sass', 'experience.css'); + app.sass(config.sass.sourceDir + '/project.sass', 'project.css'); + app.sass(config.sass.sourceDir + '/talk.sass', 'talk.css'); + app.sass(config.sass.sourceDir + '/talks-table.sass', 'talks-table.css'); + app.sass(config.sass.sourceDir + '/testimonials.sass', 'testimonials.css'); }); gulp.task('scripts', function () { diff --git a/source/_partials/head.twig b/source/_partials/head.twig index 6a947642..e69de29b 100644 --- a/source/_partials/head.twig +++ b/source/_partials/head.twig @@ -1,24 +0,0 @@ - - {% include 'title' %} - - - - - - {% if page.meta.description %} - - {% endif %} - - {% include 'og' with { og: page.meta.og } %} - - - {% block styles %}{% endblock %} - - {% for size in site.apple_touch_icon_sizes %} - - {% endfor %} - - {% for size in site.favicon_sizes %} - - {% endfor %} - diff --git a/source/_views/default.twig b/source/_views/default.twig index 82c9307c..9a5deaf7 100644 --- a/source/_views/default.twig +++ b/source/_views/default.twig @@ -1,6 +1,29 @@ - {% include 'head' %} + + {% include 'title' %} + + + + + + {% if page.meta.description %} + + {% endif %} + + {% include 'og' with { og: page.meta.og } %} + + + {% block stylesheets '' %} + + {% for size in site.apple_touch_icon_sizes %} + + {% endfor %} + + {% for size in site.favicon_sizes %} + + {% endfor %} + {% include 'nav' %} @@ -9,9 +32,7 @@
{% block content_top %}{% endblock %} - {% block content_wrapper %} - {% block content %}{% endblock %} - {% endblock %} + {% block content_wrapper %}{% block content %}{% endblock %}{% endblock %} {% block content_bottom %}{% endblock %}
@@ -21,6 +42,6 @@ {% include 'footer' %} - {% block scripts %}{% endblock %} + {% block scripts '' %} diff --git a/source/_views/post.twig b/source/_views/post.twig index c1e5a9a4..57c98f8f 100644 --- a/source/_views/post.twig +++ b/source/_views/post.twig @@ -11,3 +11,7 @@ {% include 'post/pager' %} {% include 'post/about-author' %} {% endblock %} + +{% block stylesheets %} + +{% endblock %} diff --git a/source/_views/project.twig b/source/_views/project.twig index 87e6a135..c7c424ff 100644 --- a/source/_views/project.twig +++ b/source/_views/project.twig @@ -11,3 +11,7 @@ {% include 'project/skills' %} {% include 'project/company' %} {% endblock %} + +{% block stylesheets %} + +{% endblock %} diff --git a/source/_views/talk.twig b/source/_views/talk.twig index 6d92206e..17cd2fec 100644 --- a/source/_views/talk.twig +++ b/source/_views/talk.twig @@ -15,3 +15,8 @@ {% include 'talk/video' %} {% include 'talk/events' %} {% endblock %} + +{% block stylesheets %} + + +{% endblock %} diff --git a/source/blog.html b/source/blog.html index 04f980d2..48799cbf 100644 --- a/source/blog.html +++ b/source/blog.html @@ -41,3 +41,7 @@ use: [posts] {% endblock %} {% block body_classes 'page--blog page--blog__list' %} + +{% block stylesheets %} + +{% endblock %} diff --git a/source/experience.twig b/source/experience.twig index 8e1b2353..43c859c0 100644 --- a/source/experience.twig +++ b/source/experience.twig @@ -99,11 +99,17 @@ experiences: Maintaining and adding new features to the Horse & Country TV website (Drupal 6). use: [posts] --- -

Experience

+{% block content %} +

Experience

-{% for experience in page.experiences %} - {% include "experience/item" with { - experience: experience, - company: site.companies[experience.company] - } %} -{% endfor %} + {% for experience in page.experiences %} + {% include "experience/item" with { + experience: experience, + company: site.companies[experience.company] + } %} + {% endfor %} +{% endblock %} + +{% block stylesheets %} + +{% endblock %} diff --git a/source/index.md b/source/index.md index 4d4e9a47..849dc780 100644 --- a/source/index.md +++ b/source/index.md @@ -18,6 +18,7 @@ tools: - { title: Ansible, website: http://www.ansible.com } use: [posts, testimonials] --- +{% block content %} # About Me Picture of Oliver @@ -47,6 +48,11 @@ I’m a provisional member of the [Drupal Security team][14] and a webmaster and - [Stack Overflow][37] - [Disqus][38] - IRC (freenode) - {{ site.irc.name }} +{% endblock %} + +{% block stylesheets %} + +{% endblock %} [1]: https://www.google.com/#q=opdavies [2]: https://www.drupal.org diff --git a/source/talks.twig b/source/talks.twig index 879a401e..8b3aa44d 100644 --- a/source/talks.twig +++ b/source/talks.twig @@ -5,40 +5,46 @@ meta: description: 'Information about previous and upcoming talks that Oliver has presented at conferences and user groups' use: [talks, posts] --- -

Talks

+{% block content %} +

Talks

-

I regularly speak at conferences and user groups about a range of subjects including Drupal, Sculpin and Git. If you would like to me to speak at your group or conference, please get in touch.

+

I regularly speak at conferences and user groups about a range of subjects including Drupal, Sculpin and Git. If you would like to me to speak at your group or conference, please get in touch.

-

There is also information about events that I’ve attended and spoken at on my Lanyrd and Joind.in profiles.

+

There is also information about events that I’ve attended and spoken at on my Lanyrd and Joind.in profiles.

-{% set upcoming_events = [] %} -{% set past_events = [] %} + {% set upcoming_events = [] %} + {% set past_events = [] %} -{% for talk in data.talks %} - {% for event in talk.events if event.date >= 'today'|date('Y-m-d') %} - {% set event = event|merge({ talk: talk })|merge(site.events[event.id]) %} - {% set upcoming_events = upcoming_events|merge([event]) %} + {% for talk in data.talks %} + {% for event in talk.events if event.date >= 'today'|date('Y-m-d') %} + {% set event = event|merge({ talk: talk })|merge(site.events[event.id]) %} + {% set upcoming_events = upcoming_events|merge([event]) %} + {% endfor %} + + {% for event in talk.events if event.date < 'today'|date('Y-m-d') %} + {% set event = event|merge({ talk: talk })|merge(site.events[event.id]) %} + {% set past_events = past_events|merge([event]) %} + {% endfor %} {% endfor %} - {% for event in talk.events if event.date < 'today'|date('Y-m-d') %} - {% set event = event|merge({ talk: talk })|merge(site.events[event.id]) %} - {% set past_events = past_events|merge([event]) %} - {% endfor %} -{% endfor %} + {% if upcoming_events is not empty %} +

Upcoming Talks

-{% if upcoming_events is not empty %} -

Upcoming Talks

+ {% include "talks-table" with { + events: upcoming_events|sortbyfield('date'), + hide_feedback: true, + } %} + {% endif %} + +

Last 5 Talks

{% include "talks-table" with { - events: upcoming_events|sortbyfield('date'), - hide_feedback: true, + events: past_events|sortbyfield('date')|reverse[:5] } %} -{% endif %} -

Last 5 Talks

+

You can view more talks in the talks archive.

+{% endblock %} -{% include "talks-table" with { - events: past_events|sortbyfield('date')|reverse[:5] -} %} - -

You can view more talks in the talks archive.

+{% block stylesheets %} + +{% endblock %} diff --git a/source/testimonials.twig b/source/testimonials.twig index 20f51dab..3b975041 100644 --- a/source/testimonials.twig +++ b/source/testimonials.twig @@ -89,3 +89,7 @@ use: [posts] {% endblock %} {% block body_classes 'page--testimonials' %} + +{% block stylesheets %} + +{% endblock %}