Class: JekyllOpenSdgPlugins::CreateIndicators

Inherits:
Jekyll::Generator
  • Object
show all
Defined in:
lib/jekyll-open-sdg-plugins/create_indicators.rb

Instance Method Summary collapse

Instance Method Details

#generate(site) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# File 'lib/jekyll-open-sdg-plugins/create_indicators.rb', line 9

def generate(site)
  # If site.create_indicators is set, create indicators per the metadata.

  if site.config['languages'] and site.config['create_indicators'] and site.config['create_indicators'].key?('layout') and site.config['create_indicators']['layout'] != ''
    # Decide what layout to use for the indicator pages.

    layout = site.config['create_indicators']['layout']
    # See if we need to "map" any language codes.

    languages_public = Hash.new
    if site.config['languages_public']
      languages_public = opensdg_languages_public(site)
    end
    # Loop through the languages.

    site.config['languages'].each_with_index do |language, index|
      # Get the "public language" (for URLs) which may be different.

      language_public = language
      if languages_public[language]
        language_public = languages_public[language]
      end
       = {}
      if opensdg_translated_builds(site)
        # If we are using translated builds, the metadata is underneath a

        # language code.

         = site.data[language]['meta']
      else
        # Otherwise the 'meta' data is not underneath any language code.

         = site.data['meta']
      end
      # Loop through the indicators (using metadata as a list).

      .each do |inid, meta|
        permalink = inid
        if meta.has_key?('permalink') and meta['permalink'] != ''
          permalink = meta['permalink']
        end
        # Add the language subfolder for all except the default (first) language.

        dir = index == 0 ? permalink : File.join(language_public, permalink)

        # Create the indicator page.

        site.collections['indicators'].docs << IndicatorPage.new(site, site.source, dir, inid, language, layout)
      end
    end
    # Create the indicator configuration pages.

    if site.config['create_config_forms'] && site.config['create_config_forms'].key?('layout') && site.config['create_config_forms']['layout'] != ''
       = {}
      layout = site.config['create_config_forms']['layout']
      if opensdg_translated_builds(site)
        if site.data.has_key?('untranslated')
           = site.data['untranslated']['meta']
        else
          default_language = site.config['languages'][0]
           = site.data[default_language]['meta']
        end
      else
         = site.data['meta']
      end
      # Loop through the indicators (using metadata as a list).

      if !.empty?
        # Loop through the languages.

        site.config['languages'].each_with_index do |language, index|
          # Get the "public language" (for URLs) which may be different.

          language_public = language
          if languages_public[language]
            language_public = languages_public[language]
          end
          .each do |inid, meta|
            permalink = inid
            if meta.has_key?('permalink') and meta['permalink'] != ''
              permalink = meta['permalink']
            end
            dir = File.join('config', permalink)
            if index != 0
              dir = File.join(language_public, 'config', permalink)
            end
            site.collections['pages'].docs << IndicatorConfigPage.new(site, site.source, dir, inid, language, meta, layout)
          end
        end
      end
    end
  end
end