From 5b41902ec60750ddfea925cb86857b2ea72133cc Mon Sep 17 00:00:00 2001 From: Oliver Davies <oliver@oliverdavies.dev> Date: Fri, 6 Sep 2024 01:41:02 +0100 Subject: [PATCH] Add snippets for demo --- .../snippets.lua | 148 ++++++++++++++++++ 1 file changed, 148 insertions(+) create mode 100644 src/building-static-websites-sculpin/snippets.lua diff --git a/src/building-static-websites-sculpin/snippets.lua b/src/building-static-websites-sculpin/snippets.lua new file mode 100644 index 0000000..1471352 --- /dev/null +++ b/src/building-static-websites-sculpin/snippets.lua @@ -0,0 +1,148 @@ +local fmt = require("luasnip.extras.fmt").fmt +local ls = require "luasnip" + +local s = ls.snippet +local t = ls.text_node + +ls.add_snippets("twig", { + s( + "sortdate", + fmt( + [[ + {{% set speakersAndDates = [] %}} + + {{% for speaker in speakers %}} + {{% set talksForSpeaker = talks|default([])|filter(talk =>> talk.speaker == speaker.name) %}} + + {{% set mostRecentTalk = talksForSpeaker|first %}} + + {{% set speakersAndDates = speakersAndDates|merge([{{ + date: mostRecentTalk.date, + speaker, + }}]) %}} + {{% endfor %}} + + {{% set sortedSpeakers = speakersAndDates|sort((a, b) => b.date <=> a.date) %}} + + {{% for speaker in sortedSpeakers|column('speaker') %}} + ]], + {} + ) + ), + + s("sortname", { t "{% for speaker in site.speakers|sort((a, b) => a.name <=> b.name) %}" }), + + s( + "speakerpage", + fmt( + [[ + {{% block content_wrapper %}} + <h1 class="text-3xl font-bold text-center md:text-left">{{{{ page.name }}}}</h1> + + <div class="mt-6"> + <img + alt="Photo of {{{{ page.name }}}}" + class="object-cover flex-shrink-0 rounded-full shadow-lg size-40" + src="{{{{ page.imageUrl }}}}" + /> + </div> + + <div class="mt-10"> + <em>{{{{ block('content') }}}}</em> + </div> + {{% endblock %}} + ]], + {} + ) + ), + + s( + "speaker", + fmt( + [[ + <div> + <a href="#" class="flex flex-col-reverse gap-3 items-center group"> + <div class="text-center"> + <p class="text-base group-hover:underline">{{{{ speaker.name }}}}</p> + </div> + + <div> + <img + alt="Photo of {{{{ speaker.name }}}}" + class="object-cover flex-shrink-0 rounded-full shadow-lg size-20 lg:size-32 xl:size-24" + src="{{{{ speaker.imageUrl }}}}" /> </div> + </a> + </div> + ]], + {} + ) + ), + + s( + "speakers", + fmt( + [[ + <section> + <h2 class="text-3xl font-bold text-center">Speakers</h2> + + <div class="mt-8"> + <div class="grid grid-cols-2 gap-10 px-4 mx-auto max-w-sm md:grid-cols-3 md:max-w-md lg:grid-cols-4 lg:gap-8 lg:max-w-full xl:grid-cols-6"> + {{% for speaker in site.speakers %}} + + {{% endfor %}} + </div> + </div> + </section> + ]], + {} + ) + ), +}) + +ls.add_snippets("yaml", { + s( + "talks", + fmt( + [[ + talks: + - title: Building Static Websites with PHP and Sculpin + speaker: Oliver Davies + date: 2024-02-14 + - title: 'FPGA^2: An open-source FPGA' + speaker: Robin Hodson + date: 2024-02-14 + - title: Introducing Domain Driven Design + speaker: Rob Allen + date: 2024-01-10 + - title: Building Better TUIs (with PHP) + speaker: Dan Leech + date: 2023-11-08 + - title: Thoughts on Ubiquitous Language + speaker: Rob Allen + date: 2023-11-08 + - title: Testing Legacy + speaker: Mike Karthauser + date: 2023-11-08 + - title: Building "Build Configs" + speaker: Oliver Davies + date: 2023-11-08 + - title: Terraform from a dev’s perspective + speaker: Nigel Dunn + date: 2023-10-11 + - title: What is TDD and why should I care? + speaker: Naomi Gotts + date: 2023-07-12 + - title: Go for PHP + speaker: Dan Leech + date: 2023-02-08 + - title: What's new in PHP 8.* + speaker: Derick Rethans + date: 2023-02-11 + - title: Behaviour Driven Development (BDD) in Practice + speaker: Ciaran McNulty + date: 2022-09-14 + ]], + {} + ) + ), +})