jekyll-open-sdg-plugins 1.6.1 → 1.7.0.pre.beta1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +16 -16
  3. data/.github/workflows/test-pull-requests.yml +17 -17
  4. data/.gitignore +6 -6
  5. data/LICENSE +21 -21
  6. data/Makefile +33 -33
  7. data/README.md +7 -7
  8. data/jekyll-open-sdg-plugins.gemspec +18 -18
  9. data/lib/jekyll-open-sdg-plugins/backwards_compatibility.rb +64 -64
  10. data/lib/jekyll-open-sdg-plugins/create_goals.rb +85 -85
  11. data/lib/jekyll-open-sdg-plugins/create_indicators.rb +206 -206
  12. data/lib/jekyll-open-sdg-plugins/create_pages.rb +135 -135
  13. data/lib/jekyll-open-sdg-plugins/fetch_remote_data.rb +188 -188
  14. data/lib/jekyll-open-sdg-plugins/helpers.rb +132 -132
  15. data/lib/jekyll-open-sdg-plugins/metadata_schema_to_config.rb +72 -72
  16. data/lib/jekyll-open-sdg-plugins/schema-indicator-config.json +787 -709
  17. data/lib/jekyll-open-sdg-plugins/schema-site-config.json +1652 -1607
  18. data/lib/jekyll-open-sdg-plugins/sdg_variables.rb +614 -549
  19. data/lib/jekyll-open-sdg-plugins/search_index.rb +102 -102
  20. data/lib/jekyll-open-sdg-plugins/site_configuration.rb +73 -73
  21. data/lib/jekyll-open-sdg-plugins/translate_date.rb +122 -122
  22. data/lib/jekyll-open-sdg-plugins/translate_key.rb +20 -20
  23. data/lib/jekyll-open-sdg-plugins/translate_metadata_field.rb +111 -111
  24. data/lib/jekyll-open-sdg-plugins/validate_indicator_config.rb +52 -52
  25. data/lib/jekyll-open-sdg-plugins/validate_site_config.rb +34 -34
  26. data/lib/jekyll-open-sdg-plugins/version.rb +3 -3
  27. data/lib/jekyll-open-sdg-plugins.rb +18 -18
  28. data/tests/Gemfile +7 -7
  29. data/tests/_config.yml +168 -168
  30. metadata +5 -5
@@ -1,206 +1,206 @@
1
- require "jekyll"
2
- require_relative "helpers"
3
-
4
- module JekyllOpenSdgPlugins
5
- class CreateIndicators < Jekyll::Generator
6
- safe true
7
- priority :normal
8
-
9
- def generate(site)
10
- # Some references to clean up the code below.
11
- language_config = site.config['languages']
12
- indicator_config = site.config['create_indicators']
13
- form_settings_config = site.config['indicator_config_form']
14
- form_settings_meta = site.config['indicator_metadata_form']
15
- form_settings_data = site.config['indicator_data_form']
16
-
17
- translations = site.data['translations']
18
- # If site.create_indicators is set, create indicators per the metadata.
19
- if (language_config and indicator_config and indicator_config.key?('layout') and indicator_config['layout'] != '')
20
- # Decide what layout to use for the indicator pages.
21
- layout = indicator_config['layout']
22
- # See if we need to "map" any language codes.
23
- languages_public = Hash.new
24
- if site.config['languages_public']
25
- languages_public = opensdg_languages_public(site)
26
- end
27
- # Loop through the languages.
28
- language_config.each_with_index do |language, index|
29
- # Get the "public language" (for URLs) which may be different.
30
- language_public = language
31
- if languages_public[language]
32
- language_public = languages_public[language]
33
- end
34
- metadata = {}
35
- if opensdg_translated_builds(site)
36
- # If we are using translated builds, the metadata is underneath a
37
- # language code.
38
- metadata = site.data[language]['meta']
39
- else
40
- # Otherwise the 'meta' data is not underneath any language code.
41
- metadata = site.data['meta']
42
- end
43
- # Loop through the indicators (using metadata as a list).
44
- metadata.each do |inid, meta|
45
- permalink = inid
46
- if (meta.has_key?('permalink') and meta['permalink'] != '')
47
- permalink = meta['permalink']
48
- end
49
- # Add the language subfolder for all except the default (first) language.
50
- dir = index == 0 ? permalink : File.join(language_public, permalink)
51
-
52
- # Create the indicator page.
53
- site.collections['indicators'].docs << IndicatorPage.new(site, site.source, dir, inid, language, layout)
54
- end
55
- end
56
- # Create the indicator settings configuration/metadata/data pages.
57
- do_indicator_config_forms = form_settings_config && form_settings_config['enabled']
58
- do_indicator_meta_forms = form_settings_meta && form_settings_meta['enabled']
59
- do_indicator_data_forms = form_settings_data && form_settings_data['enabled']
60
- use_translated_metadata = form_settings_meta && form_settings_meta['translated']
61
- if do_indicator_config_forms || do_indicator_meta_forms || do_indicator_data_forms
62
-
63
- metadata = {}
64
- if opensdg_translated_builds(site)
65
- if site.data.has_key?('untranslated')
66
- metadata = site.data['untranslated']['meta']
67
- else
68
- default_language = language_config[0]
69
- metadata = site.data[default_language]['meta']
70
- end
71
- else
72
- metadata = site.data['meta']
73
- end
74
-
75
- metadata_by_language = {}
76
- language_config.each do |language|
77
- if opensdg_translated_builds(site)
78
- metadata_by_language[language] = site.data[language]['meta']
79
- else
80
- metadata_by_language[language] = site.data['meta']
81
- end
82
- end
83
-
84
- # Because we have config forms for indicator config or meta/data, we
85
- # take over the meta/data_edit_url and configuration_edit_url settings
86
- # here with simple relative links.
87
- if do_indicator_config_forms
88
- site.config['configuration_edit_url'] = 'config'
89
- end
90
-
91
- if do_indicator_meta_forms
92
- site.config['metadata_edit_url'] = 'metadata'
93
- end
94
-
95
- if do_indicator_data_forms
96
- site.config['data_edit_url'] = 'data'
97
- end
98
-
99
- # Loop through the indicators (using metadata as a list).
100
- if !metadata.empty?
101
- # Loop through the languages.
102
- language_config.each_with_index do |language, index|
103
- # Get the "public language" (for URLs) which may be different.
104
- language_public = language
105
- if languages_public[language]
106
- language_public = languages_public[language]
107
- end
108
- metadata.each do |inid, meta|
109
- permalink = inid
110
- if (meta.has_key?('permalink') and meta['permalink'] != '')
111
- permalink = meta['permalink']
112
- end
113
- dir_base = File.join(permalink)
114
- if index != 0
115
- dir_base = File.join(language_public, permalink)
116
- end
117
-
118
- if do_indicator_config_forms
119
- dir = File.join(dir_base, 'config')
120
- title = opensdg_translate_key('indicator.edit_configuration', translations, language)
121
- config_type = 'indicator'
122
- site.collections['pages'].docs << IndicatorConfigPage.new(site, site.source, dir, inid, language, meta, title, config_type, form_settings_config)
123
- end
124
-
125
- if do_indicator_meta_forms
126
- metadata_to_use = meta
127
- if use_translated_metadata
128
- metadata_to_use = metadata_by_language[language][inid]
129
- end
130
- dir = File.join(dir_base, 'metadata')
131
- title = opensdg_translate_key('indicator.edit_metadata', translations, language)
132
- config_type = 'metadata'
133
- site.collections['pages'].docs << IndicatorConfigPage.new(site, site.source, dir, inid, language, metadata_to_use, title, config_type, form_settings_meta)
134
- end
135
-
136
- if do_indicator_data_forms
137
- dir = File.join(dir_base, 'data')
138
- title = opensdg_translate_key('indicator.edit_data', translations, language)
139
- site.collections['pages'].docs << IndicatorDataPage.new(site, site.source, dir, inid, language, title, form_settings_data)
140
- end
141
- end
142
- end
143
- end
144
- end
145
- end
146
- end
147
- end
148
-
149
- # A Page subclass used in the `CreateIndicators` class for the indicators.
150
- class IndicatorPage < Jekyll::Page
151
- def initialize(site, base, dir, inid, language, layout)
152
- @site = site
153
- @base = base
154
- @dir = dir
155
- @name = 'index.html'
156
-
157
- self.process(@name)
158
- self.data = {}
159
- self.data['indicator_number'] = inid.gsub('-', '.')
160
- self.data['layout'] = layout
161
- self.data['language'] = language
162
- # Backwards compatibility:
163
- self.data['indicator'] = self.data['indicator_number']
164
- end
165
- end
166
-
167
- # A Page subclass used in the `CreateIndicators` class for the indicator config forms.
168
- class IndicatorConfigPage < Jekyll::Page
169
- def initialize(site, base, dir, inid, language, meta, title, config_type, form_settings)
170
- @site = site
171
- @base = base
172
- @dir = dir
173
- @name = 'index.html'
174
-
175
- self.process(@name)
176
- self.data = {}
177
- self.data['language'] = language
178
- self.data['indicator_number'] = inid
179
- self.data['config_type'] = config_type
180
- self.data['layout'] = 'config-builder'
181
- self.data['meta'] = meta
182
- self.data['title'] = title + ': ' + inid.gsub('-', '.')
183
- self.data['config_filename'] = inid + '.yml'
184
- self.data['form_settings'] = form_settings
185
- end
186
- end
187
-
188
- # A Page subclass used in the `CreateIndicators` class for the indicator data forms.
189
- class IndicatorDataPage < Jekyll::Page
190
- def initialize(site, base, dir, inid, language, title, form_settings)
191
- @site = site
192
- @base = base
193
- @dir = dir
194
- @name = 'index.html'
195
-
196
- self.process(@name)
197
- self.data = {}
198
- self.data['language'] = language
199
- self.data['indicator_number'] = inid
200
- self.data['layout'] = 'data-editor'
201
- self.data['title'] = title + ': ' + inid.gsub('-', '.')
202
- self.data['config_filename'] = 'indicator_' + inid
203
- self.data['form_settings'] = form_settings
204
- end
205
- end
206
- end
1
+ require "jekyll"
2
+ require_relative "helpers"
3
+
4
+ module JekyllOpenSdgPlugins
5
+ class CreateIndicators < Jekyll::Generator
6
+ safe true
7
+ priority :normal
8
+
9
+ def generate(site)
10
+ # Some references to clean up the code below.
11
+ language_config = site.config['languages']
12
+ indicator_config = site.config['create_indicators']
13
+ form_settings_config = site.config['indicator_config_form']
14
+ form_settings_meta = site.config['indicator_metadata_form']
15
+ form_settings_data = site.config['indicator_data_form']
16
+
17
+ translations = site.data['translations']
18
+ # If site.create_indicators is set, create indicators per the metadata.
19
+ if (language_config and indicator_config and indicator_config.key?('layout') and indicator_config['layout'] != '')
20
+ # Decide what layout to use for the indicator pages.
21
+ layout = indicator_config['layout']
22
+ # See if we need to "map" any language codes.
23
+ languages_public = Hash.new
24
+ if site.config['languages_public']
25
+ languages_public = opensdg_languages_public(site)
26
+ end
27
+ # Loop through the languages.
28
+ language_config.each_with_index do |language, index|
29
+ # Get the "public language" (for URLs) which may be different.
30
+ language_public = language
31
+ if languages_public[language]
32
+ language_public = languages_public[language]
33
+ end
34
+ metadata = {}
35
+ if opensdg_translated_builds(site)
36
+ # If we are using translated builds, the metadata is underneath a
37
+ # language code.
38
+ metadata = site.data[language]['meta']
39
+ else
40
+ # Otherwise the 'meta' data is not underneath any language code.
41
+ metadata = site.data['meta']
42
+ end
43
+ # Loop through the indicators (using metadata as a list).
44
+ metadata.each do |inid, meta|
45
+ permalink = inid
46
+ if (meta.has_key?('permalink') and meta['permalink'] != '')
47
+ permalink = meta['permalink']
48
+ end
49
+ # Add the language subfolder for all except the default (first) language.
50
+ dir = index == 0 ? permalink : File.join(language_public, permalink)
51
+
52
+ # Create the indicator page.
53
+ site.collections['indicators'].docs << IndicatorPage.new(site, site.source, dir, inid, language, layout)
54
+ end
55
+ end
56
+ # Create the indicator settings configuration/metadata/data pages.
57
+ do_indicator_config_forms = form_settings_config && form_settings_config['enabled']
58
+ do_indicator_meta_forms = form_settings_meta && form_settings_meta['enabled']
59
+ do_indicator_data_forms = form_settings_data && form_settings_data['enabled']
60
+ use_translated_metadata = form_settings_meta && form_settings_meta['translated']
61
+ if do_indicator_config_forms || do_indicator_meta_forms || do_indicator_data_forms
62
+
63
+ metadata = {}
64
+ if opensdg_translated_builds(site)
65
+ if site.data.has_key?('untranslated')
66
+ metadata = site.data['untranslated']['meta']
67
+ else
68
+ default_language = language_config[0]
69
+ metadata = site.data[default_language]['meta']
70
+ end
71
+ else
72
+ metadata = site.data['meta']
73
+ end
74
+
75
+ metadata_by_language = {}
76
+ language_config.each do |language|
77
+ if opensdg_translated_builds(site)
78
+ metadata_by_language[language] = site.data[language]['meta']
79
+ else
80
+ metadata_by_language[language] = site.data['meta']
81
+ end
82
+ end
83
+
84
+ # Because we have config forms for indicator config or meta/data, we
85
+ # take over the meta/data_edit_url and configuration_edit_url settings
86
+ # here with simple relative links.
87
+ if do_indicator_config_forms
88
+ site.config['configuration_edit_url'] = 'config'
89
+ end
90
+
91
+ if do_indicator_meta_forms
92
+ site.config['metadata_edit_url'] = 'metadata'
93
+ end
94
+
95
+ if do_indicator_data_forms
96
+ site.config['data_edit_url'] = 'data'
97
+ end
98
+
99
+ # Loop through the indicators (using metadata as a list).
100
+ if !metadata.empty?
101
+ # Loop through the languages.
102
+ language_config.each_with_index do |language, index|
103
+ # Get the "public language" (for URLs) which may be different.
104
+ language_public = language
105
+ if languages_public[language]
106
+ language_public = languages_public[language]
107
+ end
108
+ metadata.each do |inid, meta|
109
+ permalink = inid
110
+ if (meta.has_key?('permalink') and meta['permalink'] != '')
111
+ permalink = meta['permalink']
112
+ end
113
+ dir_base = File.join(permalink)
114
+ if index != 0
115
+ dir_base = File.join(language_public, permalink)
116
+ end
117
+
118
+ if do_indicator_config_forms
119
+ dir = File.join(dir_base, 'config')
120
+ title = opensdg_translate_key('indicator.edit_configuration', translations, language)
121
+ config_type = 'indicator'
122
+ site.collections['pages'].docs << IndicatorConfigPage.new(site, site.source, dir, inid, language, meta, title, config_type, form_settings_config)
123
+ end
124
+
125
+ if do_indicator_meta_forms
126
+ metadata_to_use = meta
127
+ if use_translated_metadata
128
+ metadata_to_use = metadata_by_language[language][inid]
129
+ end
130
+ dir = File.join(dir_base, 'metadata')
131
+ title = opensdg_translate_key('indicator.edit_metadata', translations, language)
132
+ config_type = 'metadata'
133
+ site.collections['pages'].docs << IndicatorConfigPage.new(site, site.source, dir, inid, language, metadata_to_use, title, config_type, form_settings_meta)
134
+ end
135
+
136
+ if do_indicator_data_forms
137
+ dir = File.join(dir_base, 'data')
138
+ title = opensdg_translate_key('indicator.edit_data', translations, language)
139
+ site.collections['pages'].docs << IndicatorDataPage.new(site, site.source, dir, inid, language, title, form_settings_data)
140
+ end
141
+ end
142
+ end
143
+ end
144
+ end
145
+ end
146
+ end
147
+ end
148
+
149
+ # A Page subclass used in the `CreateIndicators` class for the indicators.
150
+ class IndicatorPage < Jekyll::Page
151
+ def initialize(site, base, dir, inid, language, layout)
152
+ @site = site
153
+ @base = base
154
+ @dir = dir
155
+ @name = 'index.html'
156
+
157
+ self.process(@name)
158
+ self.data = {}
159
+ self.data['indicator_number'] = inid.gsub('-', '.')
160
+ self.data['layout'] = layout
161
+ self.data['language'] = language
162
+ # Backwards compatibility:
163
+ self.data['indicator'] = self.data['indicator_number']
164
+ end
165
+ end
166
+
167
+ # A Page subclass used in the `CreateIndicators` class for the indicator config forms.
168
+ class IndicatorConfigPage < Jekyll::Page
169
+ def initialize(site, base, dir, inid, language, meta, title, config_type, form_settings)
170
+ @site = site
171
+ @base = base
172
+ @dir = dir
173
+ @name = 'index.html'
174
+
175
+ self.process(@name)
176
+ self.data = {}
177
+ self.data['language'] = language
178
+ self.data['indicator_number'] = inid
179
+ self.data['config_type'] = config_type
180
+ self.data['layout'] = 'config-builder'
181
+ self.data['meta'] = meta
182
+ self.data['title'] = title + ': ' + inid.gsub('-', '.')
183
+ self.data['config_filename'] = inid + '.yml'
184
+ self.data['form_settings'] = form_settings
185
+ end
186
+ end
187
+
188
+ # A Page subclass used in the `CreateIndicators` class for the indicator data forms.
189
+ class IndicatorDataPage < Jekyll::Page
190
+ def initialize(site, base, dir, inid, language, title, form_settings)
191
+ @site = site
192
+ @base = base
193
+ @dir = dir
194
+ @name = 'index.html'
195
+
196
+ self.process(@name)
197
+ self.data = {}
198
+ self.data['language'] = language
199
+ self.data['indicator_number'] = inid
200
+ self.data['layout'] = 'data-editor'
201
+ self.data['title'] = title + ': ' + inid.gsub('-', '.')
202
+ self.data['config_filename'] = 'indicator_' + inid
203
+ self.data['form_settings'] = form_settings
204
+ end
205
+ end
206
+ end