Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
galaxyproject
GitHub Repository: galaxyproject/training-material
Path: blob/main/_plugins/plaintext-slides.rb
1677 views
1
# frozen_string_literal: true
2
3
module Jekyll
4
module Generators
5
# Convert our slides to plaintext
6
# It's not a great convesion, the CSS classes are retained which are ugly
7
# But there's no good way to parse those out since they use a wildly nonstandard syntax
8
class PlaintextSlidesGenerator < Generator
9
SLIDE_LAYOUTS = %w[
10
tutorial_slides
11
base_slides
12
introduction_slides
13
tutorial_slides_ai4life
14
].freeze
15
16
##
17
# Generate a plaintext version of the slides
18
# Params:
19
# +site+:: The +Jekyll::Site+ object
20
def generate(site)
21
# layout: tutorial_slides
22
# layout: base_slides
23
24
site.pages.select { |page| SLIDE_LAYOUTS.include? page.data['layout'] }.each do |page|
25
dir = File.dirname(File.join('.', page.url))
26
page2 = Jekyll::Page.new(site, site.source, dir, page.name)
27
page2.data['layout'] = 'slides-plain'
28
page2.basename = if page2.data.key?('lang')
29
"slides-plain_#{page2.data['lang'].upcase}"
30
else
31
'slides-plain'
32
end
33
page2.content = page2.content.gsub(/^name:\s*([^ ]+)\s*$/) do
34
anchor = ::Regexp.last_match(1)
35
36
"<span id=\"#{anchor.strip}\"><i class=\"fas fa-link\" aria-hidden=\"true\"></i> #{anchor}</span>"
37
end
38
if page2.data.key?('redirect_from')
39
page2.data['redirect_from'].map { |x| x.gsub!(%r{/slides}, '/slides-plain') }
40
end
41
42
site.pages << page2
43
end
44
end
45
end
46
end
47
end
48
49