diff --git a/Gemfile b/Gemfile index 8aee5657d..81b6a7c9b 100644 --- a/Gemfile +++ b/Gemfile @@ -6,7 +6,6 @@ gem "jekyll", "~> 4.3.4" gem "minima", "~> 2.5" group :jekyll_plugins do - gem "jekyll-feed", "~> 0.12" gem "jekyll-redirect-from", "~> 0.16" gem "jekyll-sitemap" gem 'jekyll_picture_tag', '~> 2.0' diff --git a/Gemfile.lock b/Gemfile.lock index b4c7a7a34..f83cd08b7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -165,7 +165,6 @@ PLATFORMS DEPENDENCIES http_parser.rb (~> 0.6.0) jekyll (~> 4.3.4) - jekyll-feed (~> 0.12) jekyll-loading-lazy jekyll-redirect-from (~> 0.16) jekyll-sitemap diff --git a/_config.yml b/_config.yml index 69e7c2070..ac84dbb78 100644 --- a/_config.yml +++ b/_config.yml @@ -10,6 +10,7 @@ description: >- feedback_token: "" +url: "https://civictech.ca" baseurl: "" github_username: civictechto @@ -113,6 +114,13 @@ plugins: - jekyll_picture_tag - jekyll-loading-lazy +# Atom feed of meetups, hand-rolled in feed.xml. +# Meetups keep their substance in front matter rather than the document body, +# so jekyll-feed produced entries with an empty ; feed.xml assembles +# the entry body the same way _layouts/meetup.html does. +feed: + limit: 25 + # jekyll_picture_tag settings picture: source: "archives/images" diff --git a/_layouts/base.html b/_layouts/base.html index 6d4156496..6247815f5 100644 --- a/_layouts/base.html +++ b/_layouts/base.html @@ -22,7 +22,8 @@ {% endif %} - {% include jsonld.html %} + {% include jsonld.html %} + diff --git a/feed.xml b/feed.xml new file mode 100644 index 000000000..fbdb982b2 --- /dev/null +++ b/feed.xml @@ -0,0 +1,83 @@ +--- +layout: null +sitemap: false +--- +{%- assign meetups = site.meetups | sort: "date" | reverse -%} +{%- if site.feed.limit -%}{%- assign meetups = meetups | slice: 0, site.feed.limit -%}{%- endif -%} + + + {{ site.title | xml_escape }} | Meetups + {{ site.description | strip_html | strip_newlines | strip | xml_escape }} + {{ '/feed.xml' | absolute_url }} + + + {{ site.time | date_to_xmlschema }} + {{ site.author.name | xml_escape }}{{ site.author.email | xml_escape }} + {{ '/assets/images/favicon.ico' | absolute_url }} + © {{ site.time | date: "%Y" }} {{ site.title | xml_escape }} + Jekyll +{%- for meetup in meetups %} + {%- comment -%} + Resolve [[Wikilink]] references the same way _layouts/meetup.html does, so + feed readers get real names and URLs instead of raw Obsidian syntax. + {%- endcomment -%} + {%- assign speakers = "" | split: "" -%} + {%- for ref in meetup.speakers -%} + {%- assign name = ref | remove: '[[' | remove: ']]' -%} + {%- assign path = '_people/' | append: name | append: '.md' -%} + {%- assign person = site.people | where: "relative_path", path | first -%} + {%- if person -%}{%- assign speakers = speakers | push: person -%}{%- endif -%} + {%- endfor -%} + {%- assign venues = "" | split: "" -%} + {%- for ref in meetup.venue -%} + {%- assign name = ref | remove: '[[' | remove: ']]' -%} + {%- assign path = '_venues/' | append: name | append: '.md' -%} + {%- assign loc = site.venues | where: "relative_path", path | first -%} + {%- if loc -%}{%- assign venues = venues | push: loc -%}{%- endif -%} + {%- endfor -%} + {%- assign description = meetup.description | remove: '[[' | remove: ']]' -%} + {%- if meetup.image contains '://' -%} + {%- assign image_url = meetup.image -%} + {%- elsif meetup.image -%} + {%- assign image_url = '/archives/images/events/' | append: meetup.image | absolute_url -%} + {%- endif -%} + + {{ meetup.title | default: meetup.topic | xml_escape }} + + {{ meetup.url | absolute_url }} + {{ meetup.date | date_to_xmlschema }} + {{ meetup.last_modified_at | default: meetup.date | date_to_xmlschema }} + {%- for speaker in speakers %} + {{ speaker.title | xml_escape }}{{ speaker.url | absolute_url }} + {%- endfor %} + {%- if speakers.size == 0 %} + {{ site.author.name | xml_escape }} + {%- endif %} + {%- for tag in meetup.tags %} + + {%- endfor %} + {%- if description %} + {{ description | markdownify | strip_html | strip_newlines | strip | xml_escape }} + {%- endif %} + {%- if image_url %} + + + {%- endif %} + {% capture body %} + {%- if image_url %}

{{ meetup.topic | escape }}

{% endif -%} + {%- if description %}{{ description | markdownify }}{% endif -%} + {%- if speakers.size > 0 %}

Speakers

+ {%- for speaker in speakers %} +

{{ speaker.title }}{% if speaker.description %} — {{ speaker.description | remove: '[[' | remove: ']]' | markdownify | strip_html | strip_newlines | strip }}{% endif %}

+ {%- endfor %} + {%- endif -%} +

Details

+

Date: {{ meetup.date | date: "%B %-d, %Y" }}

+ {%- for venue in venues %}

Location: {{ venue.title }}

{% endfor -%} + {%- if meetup.eventUrl %}

{% if meetup.date > site.time %}Register for this meetup{% else %}Event page{% endif %}

{% endif -%} + {%- if meetup.youtubeID %}

Watch the recording

{% endif -%} + {{- meetup.content -}} + {% endcapture %}{{ body | strip | xml_escape }}
+
+{%- endfor %} +