Class: Jekyll::ModularContent

Inherits:
Tags::IncludeTag
  • Object
show all
Defined in:
lib/modular-content.rb

Instance Method Summary collapse

Instance Method Details

#parse_module(modules_dir, module_name, page, context, site) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/modular-content.rb', line 3

def parse_module(modules_dir, module_name, page, context, site)
  include_data = Hash.new
  module_path = nil

  if module_name.is_a? String
    module_path = File.join(modules_dir, "#{module_name}.html")
  else
    module_name.select do |file_name, params|
      module_path = File.join(modules_dir, "#{file_name}.html")
      include_data = params
    end
  end

  context['include'] = include_data

  module_html = site.liquid_renderer
    .file(module_path)
    .parse(read_file(module_path, context))
    .render!(context)
  context['include'] = nil

  module_html
end

#render(context) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/modular-content.rb', line 27

def render(context)
  site = context.registers[:site]
  page_data = context.environments.first['page']
  page = site.pages.detect { |page| page.url == page_data['url']}
  renderer = Jekyll::Renderer.new(site, page, {})

  modules_dir = File.join(site.source, '_includes/modules')
  if site.config['modules']
    modules_dir = File.join(site.source, site.config['modules'])
  end

  return unless page.data['modules']

  html = ''
  page.data['modules'].each do |mod_name|
      html += parse_module(modules_dir, mod_name, page, context, site)
  end

  html
end