jekyll-open-sdg-plugins 1.3.1 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2b8207e00fee9b06651b035048a46ebf9c3feaa83c34a389411b11d9b1f5c859
4
- data.tar.gz: 6f36f1ce30f97de9228082af5aede9750b0155caace3c92dd44bd11f89107f1b
3
+ metadata.gz: e9b70242f00e6228710b67c6261811d51e3c0edba1c6f33161772d40773dcc7d
4
+ data.tar.gz: f4d8497479c9f63841f8a9d256422a2e22bce3fee2697550d180aa915cbbda9e
5
5
  SHA512:
6
- metadata.gz: 5857e831f608586fa54ddde293d6a127c6907361c2f758837c8cba7f78802fca1da1df9d7a5ab8ba69774cb8f242b0297a905db8bea8f4ca7a479c909492575a
7
- data.tar.gz: f5b4950adf873e5a1db34452430fc87b23ae5cf189748e17ea6a3e03a236a3292a6b7029b4a80267281017a7030e5e81085d2658d302bb07286c59af9e721b7f
6
+ metadata.gz: f979af1073ddf69197f32468b4ed9a9dbf1edf2e8df74f866e6484f6365cbd0da5ed592936556bd63233b96d8edd0a152a6e1b0d6223cd1380ffed0c62a16a93
7
+ data.tar.gz: 7bf6a399bc7e04e65924754a9fe4622a003ec33ec218aa7f16cea093f42550534cc2ad543464d410d5f07d16f69113f394f5cf2928aef8d2448e95659f6a73d4
@@ -26,7 +26,7 @@ module JekyllOpenSdgPlugins
26
26
  if indicator.has_key?('standalone') and indicator['standalone']
27
27
  next
28
28
  end
29
- goal = inid.split('-')[0].to_i
29
+ goal = inid.split('-')[0]
30
30
  goals[goal] = true
31
31
  end
32
32
  # Decide what layout to use for the goal pages.
@@ -44,11 +44,13 @@ module JekyllOpenSdgPlugins
44
44
  language_public = languages_public[language]
45
45
  end
46
46
  # Loop through the goals.
47
- goals.sort.each do |goal, value|
47
+ goal_index = 0
48
+ goals.keys.sort.each do |goal|
48
49
  # Add the language subfolder for all except the default (first) language.
49
50
  dir = index == 0 ? goal.to_s : File.join(language_public, goal.to_s)
50
51
  # Create the goal page.
51
- site.collections['goals'].docs << GoalPage.new(site, site.source, dir, goal, language, layout)
52
+ site.collections['goals'].docs << GoalPage.new(site, site.source, dir, goal, language, layout, goal_index)
53
+ goal_index += 1
52
54
  end
53
55
  end
54
56
  end
@@ -57,7 +59,7 @@ module JekyllOpenSdgPlugins
57
59
 
58
60
  # A Page subclass used in the `CreateGoals` class.
59
61
  class GoalPage < Jekyll::Page
60
- def initialize(site, base, dir, goal, language, layout)
62
+ def initialize(site, base, dir, goal, language, layout, goal_index)
61
63
  @site = site
62
64
  @base = base
63
65
  @dir = dir
@@ -65,8 +67,8 @@ module JekyllOpenSdgPlugins
65
67
 
66
68
  goal_content = ''
67
69
  if site.config['create_goals'].has_key?('goals')
68
- if !site.config['create_goals']['goals'][goal - 1].nil?
69
- goal_content = site.config['create_goals']['goals'][goal - 1]['content']
70
+ if !site.config['create_goals']['goals'][goal_index].nil?
71
+ goal_content = site.config['create_goals']['goals'][goal_index]['content']
70
72
  end
71
73
  end
72
74
  @content = goal_content
@@ -7,17 +7,52 @@ module JekyllOpenSdgPlugins
7
7
  priority :normal
8
8
 
9
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
+ # Special treatment of repository_link settings: prefix them
18
+ # with the repository_url_data site config if needed.
19
+ repo_url = site.config['repository_url_data']
20
+ if repo_url && repo_url != '' && repo_url.start_with?('http')
21
+ if form_settings_config != nil && form_settings_config && form_settings_config['enabled']
22
+ if form_settings_config['repository_link'] && form_settings_config['repository_link'] != ''
23
+ unless form_settings_config['repository_link'].start_with?('http')
24
+ form_settings_config['repository_link'] = repo_url + form_settings_config['repository_link']
25
+ end
26
+ end
27
+ end
28
+ if form_settings_meta != nil && form_settings_meta && form_settings_meta['enabled']
29
+ if form_settings_meta['repository_link'] && form_settings_meta['repository_link'] != ''
30
+ unless form_settings_meta['repository_link'].start_with?('http')
31
+ form_settings_meta['repository_link'] = repo_url + form_settings_meta['repository_link']
32
+ end
33
+ end
34
+ end
35
+ if form_settings_data != nil && form_settings_data && form_settings_data['enabled']
36
+ if form_settings_data['repository_link'] && form_settings_data['repository_link'] != ''
37
+ unless form_settings_data['repository_link'].start_with?('http')
38
+ form_settings_data['repository_link'] = repo_url + form_settings_data['repository_link']
39
+ end
40
+ end
41
+ end
42
+ end
43
+
44
+ translations = site.data['translations']
10
45
  # If site.create_indicators is set, create indicators per the metadata.
11
- if site.config['languages'] and site.config['create_indicators'] and site.config['create_indicators'].key?('layout') and site.config['create_indicators']['layout'] != ''
46
+ if (language_config and indicator_config and indicator_config.key?('layout') and indicator_config['layout'] != '')
12
47
  # Decide what layout to use for the indicator pages.
13
- layout = site.config['create_indicators']['layout']
48
+ layout = indicator_config['layout']
14
49
  # See if we need to "map" any language codes.
15
50
  languages_public = Hash.new
16
51
  if site.config['languages_public']
17
52
  languages_public = opensdg_languages_public(site)
18
53
  end
19
54
  # Loop through the languages.
20
- site.config['languages'].each_with_index do |language, index|
55
+ language_config.each_with_index do |language, index|
21
56
  # Get the "public language" (for URLs) which may be different.
22
57
  language_public = language
23
58
  if languages_public[language]
@@ -35,7 +70,7 @@ module JekyllOpenSdgPlugins
35
70
  # Loop through the indicators (using metadata as a list).
36
71
  metadata.each do |inid, meta|
37
72
  permalink = inid
38
- if meta.has_key?('permalink') and meta['permalink'] != ''
73
+ if (meta.has_key?('permalink') and meta['permalink'] != '')
39
74
  permalink = meta['permalink']
40
75
  end
41
76
  # Add the language subfolder for all except the default (first) language.
@@ -45,24 +80,53 @@ module JekyllOpenSdgPlugins
45
80
  site.collections['indicators'].docs << IndicatorPage.new(site, site.source, dir, inid, language, layout)
46
81
  end
47
82
  end
48
- # Create the indicator configuration pages.
49
- if site.config['create_config_forms'] && site.config['create_config_forms'].key?('layout') && site.config['create_config_forms']['layout'] != ''
83
+ # Create the indicator settings configuration/metadata/data pages.
84
+ do_indicator_config_forms = form_settings_config && form_settings_config['enabled']
85
+ do_indicator_meta_forms = form_settings_meta && form_settings_meta['enabled']
86
+ do_indicator_data_forms = form_settings_data && form_settings_data['enabled']
87
+ use_translated_metadata = form_settings_meta && form_settings_meta['translated']
88
+ if do_indicator_config_forms || do_indicator_meta_forms || do_indicator_data_forms
89
+
50
90
  metadata = {}
51
- layout = site.config['create_config_forms']['layout']
52
91
  if opensdg_translated_builds(site)
53
92
  if site.data.has_key?('untranslated')
54
93
  metadata = site.data['untranslated']['meta']
55
94
  else
56
- default_language = site.config['languages'][0]
95
+ default_language = language_config[0]
57
96
  metadata = site.data[default_language]['meta']
58
97
  end
59
98
  else
60
99
  metadata = site.data['meta']
61
100
  end
101
+
102
+ metadata_by_language = {}
103
+ language_config.each do |language|
104
+ if opensdg_translated_builds(site)
105
+ metadata_by_language[language] = site.data[language]['meta']
106
+ else
107
+ metadata_by_language[language] = site.data['meta']
108
+ end
109
+ end
110
+
111
+ # Because we have config forms for indicator config or meta/data, we
112
+ # take over the meta/data_edit_url and configuration_edit_url settings
113
+ # here with simple relative links.
114
+ if do_indicator_config_forms
115
+ site.config['configuration_edit_url'] = 'config'
116
+ end
117
+
118
+ if do_indicator_meta_forms
119
+ site.config['metadata_edit_url'] = 'metadata'
120
+ end
121
+
122
+ if do_indicator_data_forms
123
+ site.config['data_edit_url'] = 'data'
124
+ end
125
+
62
126
  # Loop through the indicators (using metadata as a list).
63
127
  if !metadata.empty?
64
128
  # Loop through the languages.
65
- site.config['languages'].each_with_index do |language, index|
129
+ language_config.each_with_index do |language, index|
66
130
  # Get the "public language" (for URLs) which may be different.
67
131
  language_public = language
68
132
  if languages_public[language]
@@ -70,14 +134,37 @@ module JekyllOpenSdgPlugins
70
134
  end
71
135
  metadata.each do |inid, meta|
72
136
  permalink = inid
73
- if meta.has_key?('permalink') and meta['permalink'] != ''
137
+ if (meta.has_key?('permalink') and meta['permalink'] != '')
74
138
  permalink = meta['permalink']
75
139
  end
76
- dir = File.join('config', permalink)
140
+ dir_base = File.join(permalink)
77
141
  if index != 0
78
- dir = File.join(language_public, 'config', permalink)
142
+ dir_base = File.join(language_public, permalink)
143
+ end
144
+
145
+ if do_indicator_config_forms
146
+ dir = File.join(dir_base, 'config')
147
+ title = opensdg_translate_key('indicator.edit_configuration', translations, language)
148
+ config_type = 'indicator'
149
+ site.collections['pages'].docs << IndicatorConfigPage.new(site, site.source, dir, inid, language, meta, title, config_type, form_settings_config)
150
+ end
151
+
152
+ if do_indicator_meta_forms
153
+ metadata_to_use = meta
154
+ if use_translated_metadata
155
+ metadata_to_use = metadata_by_language[language][inid]
156
+ end
157
+ dir = File.join(dir_base, 'metadata')
158
+ title = opensdg_translate_key('indicator.edit_metadata', translations, language)
159
+ config_type = 'metadata'
160
+ site.collections['pages'].docs << IndicatorConfigPage.new(site, site.source, dir, inid, language, metadata_to_use, title, config_type, form_settings_meta)
161
+ end
162
+
163
+ if do_indicator_data_forms
164
+ dir = File.join(dir_base, 'data')
165
+ title = opensdg_translate_key('indicator.edit_data', translations, language)
166
+ site.collections['pages'].docs << IndicatorDataPage.new(site, site.source, dir, inid, language, title, form_settings_data)
79
167
  end
80
- site.collections['pages'].docs << IndicatorConfigPage.new(site, site.source, dir, inid, language, meta, layout)
81
168
  end
82
169
  end
83
170
  end
@@ -86,7 +173,7 @@ module JekyllOpenSdgPlugins
86
173
  end
87
174
  end
88
175
 
89
- # A Page subclass used in the `CreateIndicators` class.
176
+ # A Page subclass used in the `CreateIndicators` class for the indicators.
90
177
  class IndicatorPage < Jekyll::Page
91
178
  def initialize(site, base, dir, inid, language, layout)
92
179
  @site = site
@@ -104,9 +191,9 @@ module JekyllOpenSdgPlugins
104
191
  end
105
192
  end
106
193
 
107
- # A Page subclass used in the `CreateIndicators` class.
194
+ # A Page subclass used in the `CreateIndicators` class for the indicator config forms.
108
195
  class IndicatorConfigPage < Jekyll::Page
109
- def initialize(site, base, dir, inid, language, meta, layout)
196
+ def initialize(site, base, dir, inid, language, meta, title, config_type, form_settings)
110
197
  @site = site
111
198
  @base = base
112
199
  @dir = dir
@@ -115,12 +202,32 @@ module JekyllOpenSdgPlugins
115
202
  self.process(@name)
116
203
  self.data = {}
117
204
  self.data['language'] = language
118
- self.data['indicator_number'] = inid.gsub('-', '.')
119
- self.data['config_type'] = 'indicator'
120
- self.data['layout'] = layout
205
+ self.data['indicator_number'] = inid
206
+ self.data['config_type'] = config_type
207
+ self.data['layout'] = 'config-builder'
121
208
  self.data['meta'] = meta
122
- self.data['title'] = 'Open SDG indicator configuration: ' + self.data['indicator_number']
209
+ self.data['title'] = title + ': ' + inid.gsub('-', '.')
123
210
  self.data['config_filename'] = inid + '.yml'
211
+ self.data['form_settings'] = form_settings
212
+ end
213
+ end
214
+
215
+ # A Page subclass used in the `CreateIndicators` class for the indicator data forms.
216
+ class IndicatorDataPage < Jekyll::Page
217
+ def initialize(site, base, dir, inid, language, title, form_settings)
218
+ @site = site
219
+ @base = base
220
+ @dir = dir
221
+ @name = 'index.html'
222
+
223
+ self.process(@name)
224
+ self.data = {}
225
+ self.data['language'] = language
226
+ self.data['indicator_number'] = inid
227
+ self.data['layout'] = 'data-editor'
228
+ self.data['title'] = title + ': ' + inid.gsub('-', '.')
229
+ self.data['config_filename'] = 'indicator_' + inid
230
+ self.data['form_settings'] = form_settings
124
231
  end
125
232
  end
126
233
  end
@@ -30,7 +30,7 @@ module JekyllOpenSdgPlugins
30
30
  # To use the default 4 pages, simply put:
31
31
  #
32
32
  # create_pages: true
33
- if site.config['languages'] and site.config['create_pages']
33
+ if (site.config['languages'] and site.config['create_pages'])
34
34
 
35
35
  default_pages = [
36
36
  {
@@ -54,7 +54,7 @@ module JekyllOpenSdgPlugins
54
54
  }
55
55
  ]
56
56
  pages = default_pages
57
- if site.config['create_pages'].is_a?(Hash) and site.config['create_pages'].key?('pages')
57
+ if (site.config['create_pages'].is_a?(Hash) and site.config['create_pages'].key?('pages'))
58
58
  # Backwards compatability to support the deprecated "pages" key.
59
59
  pages = site.config['create_pages']['pages']
60
60
  elsif site.config['create_pages'].is_a?(Array)
@@ -65,18 +65,33 @@ module JekyllOpenSdgPlugins
65
65
  pages = pages.clone
66
66
 
67
67
  # Hardcode the site configuration page if it's not already there.
68
+ form_settings = site.config['site_config_form']
68
69
  config_page = pages.find { |page| page['layout'] == 'config-builder' }
69
70
  if config_page == nil
70
- if site.config['create_config_forms'] && site.config['create_config_forms'].key?('layout') && site.config['create_config_forms']['layout'] != ''
71
+ if form_settings && form_settings['enabled']
71
72
  pages.push({
72
73
  'folder' => '/config',
73
- 'layout' => site.config['create_config_forms']['layout'],
74
+ 'layout' => 'config-builder',
74
75
  'title' => 'Open SDG site configuration',
75
76
  'config_type' => 'site',
76
- 'config_filename' => 'site_config.yml'
77
+ 'config_filename' => 'site_config.yml',
77
78
  })
78
79
  end
79
80
  end
81
+ # Make sure the form settings are set.
82
+ config_page = pages.find { |page| page['layout'] == 'config-builder' }
83
+ if config_page != nil && form_settings && form_settings['enabled']
84
+ # Special treatment of repository_link.
85
+ if form_settings['repository_link'] && form_settings['repository_link'] != ''
86
+ unless form_settings['repository_link'].start_with?('http')
87
+ repo_url = site.config['repository_url_site']
88
+ if repo_url && repo_url != '' && repo_url.start_with?('http')
89
+ form_settings['repository_link'] = repo_url + form_settings['repository_link']
90
+ end
91
+ end
92
+ end
93
+ config_page['form_settings'] = form_settings
94
+ end
80
95
 
81
96
  # See if we need to "map" any language codes.
82
97
  languages_public = Hash.new
@@ -25,7 +25,8 @@ module JekyllOpenSdgPlugins
25
25
  'disaggregation' => 'stats/disaggregation.json',
26
26
  'translations' => 'translations/translations.json',
27
27
  'zip' => 'zip/all_indicators.json',
28
- 'indicator_downloads' => 'downloads/indicator-downloads.json'
28
+ 'indicator_downloads' => 'downloads/indicator-downloads.json',
29
+ 'data_packages' => 'data-packages/all.json',
29
30
  }
30
31
  end
31
32
 
@@ -43,7 +44,7 @@ module JekyllOpenSdgPlugins
43
44
  rescue StandardError => e
44
45
  # For backwards compatibility, forego the exception in some cases.
45
46
  abort_build = true
46
- if ['translations', 'indicator_downloads', 'disaggregation'].include? key
47
+ if ['translations', 'indicator_downloads', 'disaggregation', 'data_packages'].include? key
47
48
  abort_build = false
48
49
  elsif endpoint.include? '/untranslated/'
49
50
  abort_build = false
@@ -0,0 +1,72 @@
1
+ require "jekyll"
2
+ require_relative "helpers"
3
+
4
+ module JekyllOpenSdgPlugins
5
+ class MetadataSchemaToConfig < Jekyll::Generator
6
+ safe true
7
+ priority :lowest
8
+
9
+ def generate(site)
10
+
11
+ # Convert the metadata schema from the internal format into JSONSchema so
12
+ # it can be used to create config forms.
13
+
14
+ language_config = site.config['languages']
15
+ form_settings = site.config['indicator_metadata_form']
16
+ t = site.data['translations']
17
+ lang = language_config[0]
18
+
19
+ if form_settings && form_settings['enabled']
20
+ scopes = ['national', 'global']
21
+ if form_settings && form_settings.has_key?('scopes')
22
+ if form_settings['scopes'].kind_of?(Array) && form_settings['scopes'].length() > 0
23
+ scopes = form_settings['scopes']
24
+ end
25
+ end
26
+ exclude_fields = []
27
+ if form_settings && form_settings.has_key?('exclude_fields')
28
+ if form_settings['exclude_fields'].kind_of?(Array) && form_settings['exclude_fields'].length() > 0
29
+ exclude_fields = form_settings['exclude_fields']
30
+ end
31
+ end
32
+ if form_settings && form_settings.has_key?('language') && form_settings['language'] != ''
33
+ lang = form_settings['language']
34
+ end
35
+
36
+ schema = {
37
+ "type" => "object",
38
+ "title" => opensdg_translate_key('indicator.edit_metadata', t, lang),
39
+ "properties" => {},
40
+ }
41
+
42
+ site.data['schema'].each do |field|
43
+ field_name = field['name']
44
+ field_scope = field['field']['scope']
45
+ next unless scopes.include?(field_scope)
46
+ next if exclude_fields.include?(field_name)
47
+
48
+ to_translate = field_name
49
+ if field['field'].has_key?('translation_key')
50
+ to_translate = field['field']['translation_key']
51
+ elsif t[lang].has_key?('metadata_fields') && t[lang]['metadata_fields'].has_key?(field_name)
52
+ to_translate = 'metadata_fields.' + field_name
53
+ elsif field['field'].has_key?('label')
54
+ to_translate = field['field']['label']
55
+ end
56
+ field_label = opensdg_translate_key(to_translate, t, lang)
57
+
58
+ schema['properties'][field_name] = {
59
+ "type" => "string",
60
+ "format" => "markdown",
61
+ "title" => field_label,
62
+ "description" => 'Scope: ' + field_scope + ', Field: ' + field_name,
63
+ }
64
+ schema['additionalProperties'] = true
65
+ end
66
+
67
+ # Regardless place the schema in site data so it can be used in Jekyll templates.
68
+ site.data['schema-indicator-metadata'] = schema
69
+ end
70
+ end
71
+ end
72
+ end
@@ -248,6 +248,7 @@
248
248
  "type": "string",
249
249
  "format": "color",
250
250
  "title": "Line color",
251
+ "default": "#949494",
251
252
  "description": "The color of the line.",
252
253
  "links": [
253
254
  {
@@ -257,9 +258,14 @@
257
258
  ]
258
259
  },
259
260
  "borderDash": {
260
- "type": "string",
261
+ "type": "array",
261
262
  "title": "Line dash type",
262
263
  "description": "The type of line dash.",
264
+ "default": [10, 5],
265
+ "items": {
266
+ "type": "number"
267
+ },
268
+ "minItems": 2,
263
269
  "links": [
264
270
  {
265
271
  "rel": "More information on the line dash setting",
@@ -294,12 +300,13 @@
294
300
  "type": "string",
295
301
  "format": "color",
296
302
  "title": "Label color",
297
- "description": "Color for the label text."
303
+ "description": "Color for the label text.",
304
+ "default": "#000000"
298
305
  },
299
306
  "backgroundColor": {
300
307
  "type": "string",
301
308
  "format": "color",
302
- "default": "#FFFFFFF",
309
+ "default": "#ffffff",
303
310
  "title": "Background color",
304
311
  "description": "Background color for the label text."
305
312
  }
@@ -313,7 +320,7 @@
313
320
  "borderColor": {
314
321
  "type": "string",
315
322
  "format": "color",
316
- "default": "#FFFFFF",
323
+ "default": "#ffffff",
317
324
  "title": "High-contrast line color",
318
325
  "description": "The color of the line in high-contrast mode."
319
326
  },
@@ -325,7 +332,7 @@
325
332
  "fontColor": {
326
333
  "type": "string",
327
334
  "format": "color",
328
- "default": "#FFFFFF",
335
+ "default": "#ffffff",
329
336
  "title": "High-contrast label color",
330
337
  "description": "Color for the label text in high-contrast mode."
331
338
  },
@@ -386,6 +393,40 @@
386
393
  }
387
394
  ]
388
395
  },
396
+ "graph_series_breaks": {
397
+ "options": {"collapsed": true},
398
+ "type": "array",
399
+ "title": "Graph series breaks",
400
+ "description": "A list of series break (ie, a gap among the years) lines to display on the graph.",
401
+ "items": {
402
+ "type": "object",
403
+ "title": "Series break",
404
+ "allOf": [
405
+ { "$ref": "#/definitions/series_unit_constraint" },
406
+ {
407
+ "properties": {
408
+ "label_content": {
409
+ "type": "string",
410
+ "title": "Label content",
411
+ "default": "indicator.annotation_series_break",
412
+ "description": "The text to display for this series break."
413
+ },
414
+ "value": {
415
+ "type": "number",
416
+ "title": "Value",
417
+ "description": "The numeric value at which to place the series break. This number should be between 0 (the left side of the chart) and the number of years minus 1 (the right side of the chart)."
418
+ }
419
+ }
420
+ }
421
+ ]
422
+ },
423
+ "links": [
424
+ {
425
+ "rel": "More information on the graph target lines setting",
426
+ "href": "https://open-sdg.readthedocs.io/en/latest/indicator-configuration/#graph_series_breaks"
427
+ }
428
+ ]
429
+ },
389
430
  "graph_stacked_disaggregation": {
390
431
  "type": "string",
391
432
  "title": "Stacked disaggregation",
@@ -397,6 +438,40 @@
397
438
  }
398
439
  ]
399
440
  },
441
+ "graph_target_lines": {
442
+ "options": {"collapsed": true},
443
+ "type": "array",
444
+ "title": "Graph target lines",
445
+ "description": "A list of target lines to display on the graph.",
446
+ "items": {
447
+ "type": "object",
448
+ "title": "Target line",
449
+ "allOf": [
450
+ { "$ref": "#/definitions/series_unit_constraint" },
451
+ {
452
+ "properties": {
453
+ "label_content": {
454
+ "type": "string",
455
+ "title": "Label content",
456
+ "default": "indicator.annotation_2030_target",
457
+ "description": "The text to display for this target line."
458
+ },
459
+ "value": {
460
+ "type": "number",
461
+ "title": "Value",
462
+ "description": "The numeric value at which to place the target line."
463
+ }
464
+ }
465
+ }
466
+ ]
467
+ },
468
+ "links": [
469
+ {
470
+ "rel": "More information on the graph target lines setting",
471
+ "href": "https://open-sdg.readthedocs.io/en/latest/indicator-configuration/#graph_target_lines"
472
+ }
473
+ ]
474
+ },
400
475
  "graph_title": {
401
476
  "type": "string",
402
477
  "title": "Graph title",
@@ -443,6 +518,17 @@
443
518
  }
444
519
  ]
445
520
  },
521
+ "indicator_available": {
522
+ "type": "string",
523
+ "title": "Indicator available",
524
+ "description": "An optional sub-title for the indicator, which displays below the indicator name. Intended for cases where the available data is slightly different than the indicator name.",
525
+ "links": [
526
+ {
527
+ "rel": "More information on the indicator available setting",
528
+ "href": "https://open-sdg.readthedocs.io/en/latest/metadata-format/#recommended-special-fields"
529
+ }
530
+ ]
531
+ },
446
532
  "indicator_name": {
447
533
  "type": "string",
448
534
  "title": "Indicator name",
@@ -493,6 +579,18 @@
493
579
  }
494
580
  ]
495
581
  },
582
+ "placeholder": {
583
+ "title": "Placeholder indicator",
584
+ "type": "string",
585
+ "description": "Entering text here identifies this as a 'placeholder' indicator. The text will be displayed on the goal page, in place of a link to the indicator page.",
586
+ "format": "textarea",
587
+ "links": [
588
+ {
589
+ "rel": "More information the placeholder setting",
590
+ "href": "https://open-sdg.readthedocs.io/en/latest/indicator-configuration/#placeholder"
591
+ }
592
+ ]
593
+ },
496
594
  "precision": {
497
595
  "options": {"collapsed": true},
498
596
  "type": "array",
@@ -565,6 +663,17 @@
565
663
  "href": "https://open-sdg.readthedocs.io/en/latest/metadata-format/#recommended-special-fields"
566
664
  }
567
665
  ]
666
+ },
667
+ "x_axis_label": {
668
+ "type": "string",
669
+ "title": "X axis label",
670
+ "description": "A label beneath the X axis on charts. This overrides the same site configuration setting.",
671
+ "links": [
672
+ {
673
+ "rel": "More information on the X axis label setting",
674
+ "href": "https://open-sdg.readthedocs.io/en/latest/indicator-configuration/#x_axis_label"
675
+ }
676
+ ]
568
677
  }
569
678
  },
570
679
  "additionalProperties": true,
@@ -31,12 +31,22 @@
31
31
  "options": {"collapsed": true},
32
32
  "type": "object",
33
33
  "title": "Analytics",
34
- "description": "If these settings are used, usage statistics will be sent to Google Analytics.",
34
+ "description": "If these settings are used, usage statistics will be sent to Google Analytics. These are optional, and you don't have to use all of them. Typically you would just use one, such as the 'ua' option.",
35
35
  "properties": {
36
- "ga_prod": {
36
+ "ua": {
37
37
  "type": "string",
38
- "title": "Google Analytics tracking ID",
39
- "description": "The tracking ID (UA code) for your property on Google Analytics."
38
+ "title": "Universal Analytics (ua) tracking ID",
39
+ "description": "The tracking ID for the analytics.js approach, for your property on Google Analytics. Typically starts with 'UA-'."
40
+ },
41
+ "gtag": {
42
+ "type": "string",
43
+ "title": "gtag.js (gtag) tracking ID",
44
+ "description": "The tracking ID for the gtag.js approach, for your property on Google Analytics. Typically starts with 'G-'."
45
+ },
46
+ "gtm": {
47
+ "type": "string",
48
+ "title": "Google Tag Manager (gtm) tracking ID",
49
+ "description": "Your tracking ID for Google Tag Manager. Typically starts with 'GTM-'. Though this is included as an analytics approach, it requires additional configuration within Google Tag Manager in order to capture analytics."
40
50
  }
41
51
  },
42
52
  "links": [
@@ -87,6 +97,45 @@
87
97
  }
88
98
  ]
89
99
  },
100
+ "contrast_type": {
101
+ "type": "string",
102
+ "title": "Contrast type",
103
+ "description": "The type of high-contrast toggle to use.",
104
+ "enum": ["default", "single", "long"],
105
+ "options": {
106
+ "enum_titles": [
107
+ "Default - two 'A' buttons side-by-side",
108
+ "Single - one 'A' button which toggles on/off",
109
+ "Long - text toggling between 'High contrast' and 'Default contrast'"
110
+ ]
111
+ },
112
+ "links": [
113
+ {
114
+ "rel": "More information on the contrast type setting",
115
+ "href": "https://open-sdg.readthedocs.io/en/latest/configuration/#contrast_type"
116
+ }
117
+ ]
118
+ },
119
+ "cookie_consent_form": {
120
+ "options": {"collapsed": true},
121
+ "type": "object",
122
+ "title": "Cookie consent form",
123
+ "description": "A cookie consent form for users",
124
+ "properties": {
125
+ "enabled": {
126
+ "type": "boolean",
127
+ "title": "Enabled",
128
+ "description": "Whether the cookie consent form will be enabled",
129
+ "format": "checkbox"
130
+ }
131
+ },
132
+ "links": [
133
+ {
134
+ "rel": "More information on the cookie_consent_form setting",
135
+ "href": "https://open-sdg.readthedocs.io/en/latest/configuration/#cookie_consent_form"
136
+ }
137
+ ]
138
+ },
90
139
  "country": {
91
140
  "options": {"collapsed": true},
92
141
  "type": "object",
@@ -113,35 +162,6 @@
113
162
  }
114
163
  ]
115
164
  },
116
- "create_config_forms": {
117
- "options": {"collapsed": true},
118
- "type": "object",
119
- "title": "Create configuration forms",
120
- "description": "This setting can be used to automatically create the configuration form pages.",
121
- "properties": {
122
- "layout": {
123
- "type": "string",
124
- "title": "Layout",
125
- "enum": [
126
- "",
127
- "config-builder"
128
- ],
129
- "options": {
130
- "enum_titles": [
131
- "Do not automatically create config forms",
132
- "config-builder"
133
- ]
134
- },
135
- "description": "The layout to use for the configuration form pages."
136
- }
137
- },
138
- "links": [
139
- {
140
- "rel": "More information on the create config forms setting",
141
- "href": "https://open-sdg.readthedocs.io/en/latest/configuration/#create_config_forms"
142
- }
143
- ]
144
- },
145
165
  "create_goals": {
146
166
  "options": {"collapsed": true},
147
167
  "type": "object",
@@ -450,6 +470,24 @@
450
470
  }
451
471
  ]
452
472
  },
473
+ "favicons": {
474
+ "type": "string",
475
+ "title": "Favicons",
476
+ "description": "The type of favicons to use.",
477
+ "enum": ["legacy", "favicon.io"],
478
+ "options": {
479
+ "enum_titles": [
480
+ "Legacy",
481
+ "Favicon.io (recommended)"
482
+ ]
483
+ },
484
+ "links": [
485
+ {
486
+ "rel": "More information on the favicons setting",
487
+ "href": "https://open-sdg.readthedocs.io/en/latest/configuration/#favicons"
488
+ }
489
+ ]
490
+ },
453
491
  "footer_language_toggle": {
454
492
  "type": "string",
455
493
  "title": "Footer language toggle",
@@ -615,6 +653,7 @@
615
653
  "type": "string",
616
654
  "format": "color",
617
655
  "title": "Graph color for headline",
656
+ "default": "#004466",
618
657
  "description": "This setting can be used to customize the color used in the chart 'headlines'.",
619
658
  "examples": [],
620
659
  "links": [
@@ -628,6 +667,7 @@
628
667
  "type": "string",
629
668
  "format": "color",
630
669
  "title": "Graph color for headline - high-contrast",
670
+ "default": "#55a6e5",
631
671
  "description": "This setting can be used to customize the color used in the chart 'headlines' in high-contrast mode.",
632
672
  "examples": [],
633
673
  "links": [
@@ -679,6 +719,18 @@
679
719
  }
680
720
  ]
681
721
  },
722
+ "graph_title_from_series": {
723
+ "title": "Graph title from series",
724
+ "type": "boolean",
725
+ "description": "This setting can be set to `true` to use the selected series for the graph title, whenever possible.",
726
+ "format": "checkbox",
727
+ "links": [
728
+ {
729
+ "rel": "More information on the graph title from series setting",
730
+ "href": "https://open-sdg.readthedocs.io/en/latest/configuration/#graph_title_from_series"
731
+ }
732
+ ]
733
+ },
682
734
  "header": {
683
735
  "options": {"collapsed": true},
684
736
  "type": "object",
@@ -732,6 +784,30 @@
732
784
  }
733
785
  ]
734
786
  },
787
+ "hide_single_series": {
788
+ "title": "Hide single series",
789
+ "type": "boolean",
790
+ "description": "This setting can be used to hide the 'Series' toggle on indicators where there is only one choice.",
791
+ "format": "checkbox",
792
+ "links": [
793
+ {
794
+ "rel": "More information on the hide single series setting",
795
+ "href": "https://open-sdg.readthedocs.io/en/latest/configuration/#hide_single_series"
796
+ }
797
+ ]
798
+ },
799
+ "hide_single_unit": {
800
+ "title": "Hide single unit",
801
+ "type": "boolean",
802
+ "description": "This setting can be used to hide the 'Unit' toggle on indicators where there is only one choice.",
803
+ "format": "checkbox",
804
+ "links": [
805
+ {
806
+ "rel": "More information on the hide single unit setting",
807
+ "href": "https://open-sdg.readthedocs.io/en/latest/configuration/#hide_single_unit"
808
+ }
809
+ ]
810
+ },
735
811
  "indicator_config_form": {
736
812
  "options": {"collapsed": true},
737
813
  "type": "object",
@@ -739,6 +815,69 @@
739
815
  "description": "Configuration of the indicator configuration form.",
740
816
  "$ref": "#/definitions/config_form_options"
741
817
  },
818
+ "indicator_data_form": {
819
+ "options": {"collapsed": true},
820
+ "type": "object",
821
+ "title": "Indicator data form",
822
+ "description": "Configuration of the indicator data form.",
823
+ "properties": {
824
+ "enabled": {
825
+ "type": "boolean",
826
+ "title": "Enable this type of form",
827
+ "description": "If enabled, the indicator data form will be available.",
828
+ "format": "checkbox"
829
+ },
830
+ "repository_link": {
831
+ "type": "string",
832
+ "title": "Repository link",
833
+ "description": "The URL pattern of the 'Go to repository' link on the configuration page."
834
+ }
835
+ }
836
+ },
837
+ "indicator_metadata_form": {
838
+ "options": {"collapsed": true},
839
+ "type": "object",
840
+ "title": "Indicator metadata form",
841
+ "description": "Configuration of the indicator metadata form.",
842
+ "allOf": [
843
+ { "$ref": "#/definitions/config_form_options" },
844
+ {
845
+ "properties": {
846
+ "language": {
847
+ "type": "string",
848
+ "title": "Language for editing",
849
+ "description": "Choose the language you prefer when editing metadata. This is used to translate the labels of the metadata fields."
850
+ },
851
+ "scopes": {
852
+ "options": {"collapsed": true},
853
+ "type": "array",
854
+ "title": "Metadata scopes",
855
+ "description": "Specify the 'scopes' of metadata to include on the form. Eg: 'national' or 'global'.",
856
+ "items": {
857
+ "type": "string",
858
+ "title": "Scope"
859
+ }
860
+ },
861
+ "exclude_fields": {
862
+ "options": {"collapsed": true},
863
+ "type": "array",
864
+ "title": "Exclude fields",
865
+ "description": "Specify any fields you would like to exclude from the form.",
866
+ "items": {
867
+ "type": "string",
868
+ "title": "Field"
869
+ }
870
+ },
871
+ "translated": {
872
+ "type": "boolean",
873
+ "title": "Display translated contents in the form",
874
+ "description": "This should only be enabled if you are using the 'subfolder' approach for your metadata.",
875
+ "format": "checkbox"
876
+ }
877
+ }
878
+ }
879
+ ]
880
+ },
742
881
  "languages": {
743
882
  "options": {"collapsed": true},
744
883
  "type": "array",
@@ -787,6 +926,41 @@
787
926
  }
788
927
  ]
789
928
  },
929
+ "logos": {
930
+ "options": {"collapsed": true},
931
+ "type": "array",
932
+ "title": "Logos",
933
+ "description": "This setting can be used to control the main logo (or logos).",
934
+ "items": {
935
+ "type": "object",
936
+ "title": "Logo",
937
+ "properties": {
938
+ "language": {
939
+ "type": "string",
940
+ "title": "Language",
941
+ "description": "The language on which this logo displays. Leave blank to show on all."
942
+ },
943
+ "src": {
944
+ "type": "string",
945
+ "minLength": 1,
946
+ "title": "Image file",
947
+ "description": "The image file (path or URL) for this logo"
948
+ },
949
+ "alt": {
950
+ "type": "string",
951
+ "minLength": 1,
952
+ "title": "Alt text",
953
+ "description": "The alt text for this logo"
954
+ }
955
+ }
956
+ },
957
+ "links": [
958
+ {
959
+ "rel": "More information on the logos setting",
960
+ "href": "https://open-sdg.readthedocs.io/en/latest/configuration/#logos"
961
+ }
962
+ ]
963
+ },
790
964
  "map_layers": {
791
965
  "options": {"collapsed": true},
792
966
  "type": "array",
@@ -1053,8 +1227,8 @@
1053
1227
  "remote_data_prefix": {
1054
1228
  "type": "string",
1055
1229
  "minLength": 1,
1056
- "title": "Remote data repository URL",
1057
- "description": "Specify the URL of your published data repository.",
1230
+ "title": "Remote data prefix",
1231
+ "description": "Specify the URL of the 'data service' that is generated from your data repository.",
1058
1232
  "links": [
1059
1233
  {
1060
1234
  "rel": "More information on the remote data prefix setting",
@@ -1087,6 +1261,28 @@
1087
1261
  }
1088
1262
  ]
1089
1263
  },
1264
+ "repository_url_data": {
1265
+ "type": "string",
1266
+ "title": "Repository URL - Data",
1267
+ "description": "The URL of your data repository, eg: https://github.com/my-github-org/data",
1268
+ "links": [
1269
+ {
1270
+ "rel": "More information on the data repository URL setting",
1271
+ "href": "https://open-sdg.readthedocs.io/en/latest/configuration/#repository_url_data"
1272
+ }
1273
+ ]
1274
+ },
1275
+ "repository_url_site": {
1276
+ "type": "string",
1277
+ "title": "Repository URL - Site",
1278
+ "description": "The URL of your site repository, eg: https://github.com/my-github-org/site",
1279
+ "links": [
1280
+ {
1281
+ "rel": "More information on the site repository URL setting",
1282
+ "href": "https://open-sdg.readthedocs.io/en/latest/configuration/#repository_url_site"
1283
+ }
1284
+ ]
1285
+ },
1090
1286
  "search_index_boost": {
1091
1287
  "options": {"collapsed": true},
1092
1288
  "type": "array",
@@ -1186,6 +1382,17 @@
1186
1382
  "href": "https://open-sdg.readthedocs.io/en/latest/configuration/#validate_site_config"
1187
1383
  }
1188
1384
  ]
1385
+ },
1386
+ "x_axis_label": {
1387
+ "type": "string",
1388
+ "title": "X axis label",
1389
+ "description": "A label beneath the X axis on charts. This is overridden by the same indicator configuration setting.",
1390
+ "links": [
1391
+ {
1392
+ "rel": "More information on the X axis label setting",
1393
+ "href": "https://open-sdg.readthedocs.io/en/latest/configuration/#x_axis_label"
1394
+ }
1395
+ ]
1189
1396
  }
1190
1397
  },
1191
1398
  "additionalProperties": true,
@@ -1273,6 +1480,12 @@
1273
1480
  "config_form_options": {
1274
1481
  "type": "object",
1275
1482
  "properties": {
1483
+ "enabled": {
1484
+ "type": "boolean",
1485
+ "title": "Enable this type of form",
1486
+ "description": "If enabled, this type of configuration form will be available.",
1487
+ "format": "checkbox"
1488
+ },
1276
1489
  "dropdowns": {
1277
1490
  "type": "array",
1278
1491
  "title": "Dropdown lists",
@@ -1306,6 +1519,16 @@
1306
1519
  }
1307
1520
  }
1308
1521
  }
1522
+ },
1523
+ "repository_link": {
1524
+ "type": "string",
1525
+ "title": "Repository link",
1526
+ "description": "The URL pattern of the 'Go to repository' link on the configuration page."
1527
+ },
1528
+ "translation_link": {
1529
+ "type": "string",
1530
+ "title": "Translation link",
1531
+ "description": "The URL pattern for all 'Go to translation' links on the configuration page."
1309
1532
  }
1310
1533
  }
1311
1534
  }
@@ -15,7 +15,11 @@ module JekyllOpenSdgPlugins
15
15
  # Get a target number from an indicator number.
16
16
  def get_target_number(indicator_number)
17
17
  parts = indicator_number.split('.')
18
- parts[0] + '.' + parts[1]
18
+ if parts.length() < 2
19
+ indicator_number
20
+ else
21
+ parts[0] + '.' + parts[1]
22
+ end
19
23
  end
20
24
 
21
25
  # Is this string numeric?
@@ -61,10 +65,42 @@ module JekyllOpenSdgPlugins
61
65
  list[incremented]
62
66
  end
63
67
 
68
+ # Wrapper of get_previous_item specifically for indicators.
69
+ def get_previous_indicator(list, index)
70
+ indicator = get_previous_item(list, index)
71
+ # Skip placeholder indicators.
72
+ is_placeholder = (indicator.has_key?('placeholder') and indicator['placeholder'] != '')
73
+ while (is_placeholder)
74
+ index -= 1
75
+ if index < 0
76
+ index = list.length() - 1
77
+ end
78
+ indicator = get_previous_item(list, index)
79
+ is_placeholder = (indicator.has_key?('placeholder') and indicator['placeholder'] != '')
80
+ end
81
+ return indicator
82
+ end
83
+
84
+ # Wrapper of get_next_item specifically for indicators.
85
+ def get_next_indicator(list, index)
86
+ indicator = get_next_item(list, index)
87
+ # Skip placeholder indicators.
88
+ is_placeholder = (indicator.has_key?('placeholder') and indicator['placeholder'] != '')
89
+ while (is_placeholder)
90
+ index += 1
91
+ if index >= list.length()
92
+ index = 0
93
+ end
94
+ indicator = get_next_item(list, index)
95
+ is_placeholder = (indicator.has_key?('placeholder') and indicator['placeholder'] != '')
96
+ end
97
+ return indicator
98
+ end
99
+
64
100
  # The Jekyll baseurl is user-configured, and can be inconsistent. This
65
101
  # ensure it is consistent in whether it starts/ends with a slash.
66
102
  def normalize_baseurl(baseurl)
67
- if baseurl == ''
103
+ if baseurl == '' || baseurl.nil?
68
104
  baseurl = '/'
69
105
  end
70
106
  if !baseurl.start_with? '/'
@@ -272,7 +308,8 @@ module JekyllOpenSdgPlugins
272
308
  end
273
309
  end
274
310
 
275
- is_standalone = meta.has_key?('standalone') and meta['standalone']
311
+ is_standalone = (meta.has_key?('standalone') and meta['standalone'])
312
+ is_placeholder = (meta.has_key?('placeholder') and meta['placeholder'] != '')
276
313
 
277
314
  # Set the goal for this language, once only.
278
315
  if !is_standalone && already_added[language].index(goal_number) == nil
@@ -323,6 +360,14 @@ module JekyllOpenSdgPlugins
323
360
  # Allow metadata 'sort' field to override the default sort.
324
361
  indicator_sort = meta['sort']
325
362
  end
363
+ if meta.has_key?('graph_annotations') && meta['graph_annotations'].length > 0
364
+ meta['graph_annotations'].each do |annotation|
365
+ if annotation.has_key?('borderDash') && annotation['borderDash'].is_a?(String)
366
+ annotation['borderDash'] = [2, 2]
367
+ opensdg_notice('The "borderDash" property in graph annotations must be an array. Using [2, 2].')
368
+ end
369
+ end
370
+ end
326
371
  available_indicator = {
327
372
  'number' => indicator_number,
328
373
  'slug' => indicator_number.gsub('.', '-'),
@@ -383,8 +428,36 @@ module JekyllOpenSdgPlugins
383
428
  doc.data['remote_data_prefix'] = normalize_baseurl(baseurl)
384
429
  end
385
430
  if opensdg_translated_builds(site)
431
+ doc.data['remote_data_prefix_untranslated'] = File.join(doc.data['remote_data_prefix'], 'untranslated')
386
432
  doc.data['remote_data_prefix'] = File.join(doc.data['remote_data_prefix'], language)
433
+ else
434
+ doc.data['remote_data_prefix_untranslated'] = doc.data['remote_data_prefix']
435
+ end
436
+
437
+ # Set the logo for this page.
438
+ logo = {}
439
+ match = false
440
+ if site.config.has_key?('logos') && site.config['logos'].length > 0
441
+ match = site.config['logos'].find{ |item| item['language'] == language }
442
+ unless match
443
+ match = site.config['logos'].find{ |item| item.fetch('language', '') == '' }
444
+ end
445
+ end
446
+ if match
447
+ src = match['src']
448
+ unless src.start_with?('http')
449
+ src = normalize_baseurl(baseurl) + src
450
+ end
451
+ logo['src'] = src
452
+ logo['alt'] = opensdg_translate_key(match['alt'], translations, language)
453
+ else
454
+ logo['src'] = normalize_baseurl(baseurl) + 'assets/img/SDG_logo.png'
455
+ alt_text = opensdg_translate_key('general.sdg', translations, language)
456
+ alt_text += ' - '
457
+ alt_text += opensdg_translate_key('header.tag_line', translations, language)
458
+ logo['alt'] = alt_text
387
459
  end
460
+ doc.data['logo'] = logo
388
461
 
389
462
  if collection == 'indicators'
390
463
  # For indicators we also set the current indicator/target/goal.
@@ -406,8 +479,8 @@ module JekyllOpenSdgPlugins
406
479
  doc.data['target'] = available_targets[language].find {|x| x['number'] == target_number}
407
480
  indicator_index = available_indicators[language].find_index {|x| x['number'] == indicator_number}
408
481
  doc.data['indicator'] = available_indicators[language][indicator_index]
409
- doc.data['next'] = get_next_item(available_indicators[language], indicator_index)
410
- doc.data['previous'] = get_previous_item(available_indicators[language], indicator_index)
482
+ doc.data['next'] = get_next_indicator(available_indicators[language], indicator_index)
483
+ doc.data['previous'] = get_previous_indicator(available_indicators[language], indicator_index)
411
484
 
412
485
  elsif collection == 'goals'
413
486
  # For goals we also set the current goal.
@@ -31,6 +31,15 @@ module JekyllOpenSdgPlugins
31
31
  hash_to_hash(site.data['site_config_prod'], site.config)
32
32
  end
33
33
 
34
+ # Look for environment variables for some settings.
35
+ env_settings = [
36
+ 'REPOSITORY_URL_SITE',
37
+ ]
38
+ env_settings.each do |setting|
39
+ if ENV.has_key?(setting)
40
+ site.config[setting.downcase] = ENV[setting]
41
+ end
42
+ end
34
43
  end
35
44
 
36
45
  # Copy properties from a hash onto another hash.
@@ -8,6 +8,8 @@ module Jekyll
8
8
  # language of the current page and a date format given.
9
9
  def t_date(date, format_type)
10
10
 
11
+ original = date
12
+
11
13
  # Determine the language of the current page.
12
14
  config = @context.registers[:site].config
13
15
  translations = @context.registers[:site].data['translations']
@@ -57,7 +59,29 @@ module Jekyll
57
59
 
58
60
  # Support timestamps.
59
61
  if date.is_a? Integer
60
- date = Time.at(date)
62
+ # Convert milliseconds to seconds if necessary.
63
+ if date > 9000000000
64
+ date = date / 1000
65
+ end
66
+ begin
67
+ date = Time.at(date).utc
68
+ rescue => err
69
+ return original
70
+ end
71
+ end
72
+
73
+ # Support other strings.
74
+ if date.is_a? String
75
+ begin
76
+ date = Time.parse(date).utc
77
+ rescue => err
78
+ return original
79
+ end
80
+ end
81
+
82
+ # Avoid nil errors.
83
+ unless date.is_a? Time
84
+ return original
61
85
  end
62
86
 
63
87
  # Convert the date into English.
@@ -1,3 +1,3 @@
1
1
  module JekyllOpenSdgPlugins
2
- VERSION = "1.3.1".freeze
2
+ VERSION = "1.5.0".freeze
3
3
  end
@@ -11,6 +11,7 @@ require_relative "jekyll-open-sdg-plugins/create_pages"
11
11
  require_relative "jekyll-open-sdg-plugins/sdg_variables"
12
12
  require_relative "jekyll-open-sdg-plugins/search_index"
13
13
  require_relative "jekyll-open-sdg-plugins/validate_indicator_config"
14
+ require_relative "jekyll-open-sdg-plugins/metadata_schema_to_config"
14
15
 
15
16
  module JekyllOpenSdgPlugins
16
17
  end
data/tests/_config.yml CHANGED
@@ -9,6 +9,7 @@ data_edit_url: http://prose.io/#open-sdg/open-sdg-data-starter/edit/develop/data
9
9
  metadata_edit_url: http://prose.io/#open-sdg/open-sdg-data-starter/edit/develop/meta/[id].md
10
10
  languages:
11
11
  - en
12
+ - es
12
13
 
13
14
  title: Indicators For The Sustainable Development Goals
14
15
  url: ""
@@ -145,3 +146,12 @@ exclude:
145
146
  # max_zoom: 10
146
147
  # subfolder: my-geojson-subfolder
147
148
  # label: My map layer label (can be a translation key)
149
+
150
+ site_config_form:
151
+ repository_link: https://github.com/open-sdg/open-sdg-site-starter
152
+ indicator_config_form:
153
+ repository_link: https://github.com/open-sdg/open-sdg-data-starter/tree/develop/meta
154
+ indicator_metadata_form:
155
+ repository_link: https://github.com/open-sdg/open-sdg-data-starter/tree/develop/meta
156
+ scopes:
157
+ - national
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jekyll-open-sdg-plugins
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.1
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brock Fanning
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-03-18 00:00:00.000000000 Z
11
+ date: 2021-09-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jekyll
@@ -72,6 +72,7 @@ files:
72
72
  - lib/jekyll-open-sdg-plugins/create_pages.rb
73
73
  - lib/jekyll-open-sdg-plugins/fetch_remote_data.rb
74
74
  - lib/jekyll-open-sdg-plugins/helpers.rb
75
+ - lib/jekyll-open-sdg-plugins/metadata_schema_to_config.rb
75
76
  - lib/jekyll-open-sdg-plugins/schema-indicator-config.json
76
77
  - lib/jekyll-open-sdg-plugins/schema-site-config.json
77
78
  - lib/jekyll-open-sdg-plugins/sdg_variables.rb