jekyll-open-sdg-plugins 1.3.1 → 1.4.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.
- checksums.yaml +4 -4
- data/lib/jekyll-open-sdg-plugins.rb +1 -0
- data/lib/jekyll-open-sdg-plugins/create_indicators.rb +127 -20
- data/lib/jekyll-open-sdg-plugins/create_pages.rb +20 -5
- data/lib/jekyll-open-sdg-plugins/fetch_remote_data.rb +3 -2
- data/lib/jekyll-open-sdg-plugins/metadata_schema_to_config.rb +72 -0
- data/lib/jekyll-open-sdg-plugins/schema-indicator-config.json +11 -0
- data/lib/jekyll-open-sdg-plugins/schema-site-config.json +171 -31
- data/lib/jekyll-open-sdg-plugins/sdg_variables.rb +35 -3
- data/lib/jekyll-open-sdg-plugins/site_configuration.rb +9 -0
- data/lib/jekyll-open-sdg-plugins/translate_date.rb +25 -1
- data/lib/jekyll-open-sdg-plugins/version.rb +1 -1
- data/tests/_config.yml +10 -0
- metadata +5 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6ba22fd994d04edb16b31b864db8b6538e2a996cfbf98c16f0eaee128fa8117c
|
4
|
+
data.tar.gz: 70d64a4098ecc895aac3f8690617bf34c019b743cff279734cf81b71c015d5de
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f9440c732b7ecb4ea1cbe223abd96288ffbbc647c4e4ab102009a3887643dfa6f0270c6171cbb7636e816385865ceebee7f840dfb09e454c0d38968779b9d720
|
7
|
+
data.tar.gz: 920503070bad04e792f6ec01815236a50edc5a5556f611da5640d867416eb0dd5bbcb52dfde684db521af5156f59490ce84ff64b234c2d6b0103b5b9ef038858
|
@@ -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
|
@@ -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
|
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 =
|
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
|
-
|
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
|
-
|
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 =
|
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
|
-
|
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
|
-
|
140
|
+
dir_base = File.join(permalink)
|
77
141
|
if index != 0
|
78
|
-
|
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,
|
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
|
119
|
-
self.data['config_type'] =
|
120
|
-
self.data['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'] =
|
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
|
71
|
+
if form_settings && form_settings['enabled']
|
71
72
|
pages.push({
|
72
73
|
'folder' => '/config',
|
73
|
-
'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
|
@@ -443,6 +443,17 @@
|
|
443
443
|
}
|
444
444
|
]
|
445
445
|
},
|
446
|
+
"indicator_available": {
|
447
|
+
"type": "string",
|
448
|
+
"title": "Indicator available",
|
449
|
+
"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.",
|
450
|
+
"links": [
|
451
|
+
{
|
452
|
+
"rel": "More information on the indicator available setting",
|
453
|
+
"href": "https://open-sdg.readthedocs.io/en/latest/metadata-format/#recommended-special-fields"
|
454
|
+
}
|
455
|
+
]
|
456
|
+
},
|
446
457
|
"indicator_name": {
|
447
458
|
"type": "string",
|
448
459
|
"title": "Indicator name",
|
@@ -87,6 +87,25 @@
|
|
87
87
|
}
|
88
88
|
]
|
89
89
|
},
|
90
|
+
"contrast_type": {
|
91
|
+
"type": "string",
|
92
|
+
"title": "Contrast type",
|
93
|
+
"description": "The type of high-contrast toggle to use.",
|
94
|
+
"enum": ["default", "single", "long"],
|
95
|
+
"options": {
|
96
|
+
"enum_titles": [
|
97
|
+
"Default - two 'A' buttons side-by-side",
|
98
|
+
"Single - one 'A' button which toggles on/off",
|
99
|
+
"Long - text toggling between 'High contrast' and 'Default contrast'"
|
100
|
+
]
|
101
|
+
},
|
102
|
+
"links": [
|
103
|
+
{
|
104
|
+
"rel": "More information on the contrast type setting",
|
105
|
+
"href": "https://open-sdg.readthedocs.io/en/latest/configuration/#contrast_type"
|
106
|
+
}
|
107
|
+
]
|
108
|
+
},
|
90
109
|
"country": {
|
91
110
|
"options": {"collapsed": true},
|
92
111
|
"type": "object",
|
@@ -113,35 +132,6 @@
|
|
113
132
|
}
|
114
133
|
]
|
115
134
|
},
|
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
135
|
"create_goals": {
|
146
136
|
"options": {"collapsed": true},
|
147
137
|
"type": "object",
|
@@ -615,6 +605,7 @@
|
|
615
605
|
"type": "string",
|
616
606
|
"format": "color",
|
617
607
|
"title": "Graph color for headline",
|
608
|
+
"default": "#004466",
|
618
609
|
"description": "This setting can be used to customize the color used in the chart 'headlines'.",
|
619
610
|
"examples": [],
|
620
611
|
"links": [
|
@@ -628,6 +619,7 @@
|
|
628
619
|
"type": "string",
|
629
620
|
"format": "color",
|
630
621
|
"title": "Graph color for headline - high-contrast",
|
622
|
+
"default": "#55a6e5",
|
631
623
|
"description": "This setting can be used to customize the color used in the chart 'headlines' in high-contrast mode.",
|
632
624
|
"examples": [],
|
633
625
|
"links": [
|
@@ -679,6 +671,18 @@
|
|
679
671
|
}
|
680
672
|
]
|
681
673
|
},
|
674
|
+
"graph_title_from_series": {
|
675
|
+
"title": "Graph title from series",
|
676
|
+
"type": "boolean",
|
677
|
+
"description": "This setting can be set to `true` to use the selected series for the graph title, whenever possible.",
|
678
|
+
"format": "checkbox",
|
679
|
+
"links": [
|
680
|
+
{
|
681
|
+
"rel": "More information on the graph title from series setting",
|
682
|
+
"href": "https://open-sdg.readthedocs.io/en/latest/configuration/#graph_title_from_series"
|
683
|
+
}
|
684
|
+
]
|
685
|
+
},
|
682
686
|
"header": {
|
683
687
|
"options": {"collapsed": true},
|
684
688
|
"type": "object",
|
@@ -739,6 +743,69 @@
|
|
739
743
|
"description": "Configuration of the indicator configuration form.",
|
740
744
|
"$ref": "#/definitions/config_form_options"
|
741
745
|
},
|
746
|
+
"indicator_data_form": {
|
747
|
+
"options": {"collapsed": true},
|
748
|
+
"type": "object",
|
749
|
+
"title": "Indicator data form",
|
750
|
+
"description": "Configuration of the indicator data form.",
|
751
|
+
"properties": {
|
752
|
+
"enabled": {
|
753
|
+
"type": "boolean",
|
754
|
+
"title": "Enable this type of form",
|
755
|
+
"description": "If enabled, the indicator data form will be available.",
|
756
|
+
"format": "checkbox"
|
757
|
+
},
|
758
|
+
"repository_link": {
|
759
|
+
"type": "string",
|
760
|
+
"title": "Repository link",
|
761
|
+
"description": "The URL pattern of the 'Go to repository' link on the configuration page."
|
762
|
+
}
|
763
|
+
}
|
764
|
+
},
|
765
|
+
"indicator_metadata_form": {
|
766
|
+
"options": {"collapsed": true},
|
767
|
+
"type": "object",
|
768
|
+
"title": "Indicator metadata form",
|
769
|
+
"description": "Configuration of the indicator metadata form.",
|
770
|
+
"allOf": [
|
771
|
+
{ "$ref": "#/definitions/config_form_options" },
|
772
|
+
{
|
773
|
+
"properties": {
|
774
|
+
"language": {
|
775
|
+
"type": "string",
|
776
|
+
"title": "Language for editing",
|
777
|
+
"description": "Choose the language you prefer when editing metadata. This is used to translate the labels of the metadata fields."
|
778
|
+
},
|
779
|
+
"scopes": {
|
780
|
+
"options": {"collapsed": true},
|
781
|
+
"type": "array",
|
782
|
+
"title": "Metadata scopes",
|
783
|
+
"description": "Specify the 'scopes' of metadata to include on the form. Eg: 'national' or 'global'.",
|
784
|
+
"items": {
|
785
|
+
"type": "string",
|
786
|
+
"title": "Scope"
|
787
|
+
}
|
788
|
+
},
|
789
|
+
"exclude_fields": {
|
790
|
+
"options": {"collapsed": true},
|
791
|
+
"type": "array",
|
792
|
+
"title": "Exclude fields",
|
793
|
+
"description": "Specify any fields you would like to exclude from the form.",
|
794
|
+
"items": {
|
795
|
+
"type": "string",
|
796
|
+
"title": "Field"
|
797
|
+
}
|
798
|
+
},
|
799
|
+
"translated": {
|
800
|
+
"type": "boolean",
|
801
|
+
"title": "Display translated contents in the form",
|
802
|
+
"description": "This should only be enabled if you are using the 'subfolder' approach for your metadata.",
|
803
|
+
"format": "checkbox"
|
804
|
+
}
|
805
|
+
}
|
806
|
+
}
|
807
|
+
]
|
808
|
+
},
|
742
809
|
"languages": {
|
743
810
|
"options": {"collapsed": true},
|
744
811
|
"type": "array",
|
@@ -787,6 +854,41 @@
|
|
787
854
|
}
|
788
855
|
]
|
789
856
|
},
|
857
|
+
"logos": {
|
858
|
+
"options": {"collapsed": true},
|
859
|
+
"type": "array",
|
860
|
+
"title": "Logos",
|
861
|
+
"description": "This setting can be used to control the main logo (or logos).",
|
862
|
+
"items": {
|
863
|
+
"type": "object",
|
864
|
+
"title": "Logo",
|
865
|
+
"properties": {
|
866
|
+
"language": {
|
867
|
+
"type": "string",
|
868
|
+
"title": "Language",
|
869
|
+
"description": "The language on which this logo displays. Leave blank to show on all."
|
870
|
+
},
|
871
|
+
"src": {
|
872
|
+
"type": "string",
|
873
|
+
"minLength": 1,
|
874
|
+
"title": "Image file",
|
875
|
+
"description": "The image file (path or URL) for this logo"
|
876
|
+
},
|
877
|
+
"alt": {
|
878
|
+
"type": "string",
|
879
|
+
"minLength": 1,
|
880
|
+
"title": "Alt text",
|
881
|
+
"description": "The alt text for this logo"
|
882
|
+
}
|
883
|
+
}
|
884
|
+
},
|
885
|
+
"links": [
|
886
|
+
{
|
887
|
+
"rel": "More information on the logos setting",
|
888
|
+
"href": "https://open-sdg.readthedocs.io/en/latest/configuration/#logos"
|
889
|
+
}
|
890
|
+
]
|
891
|
+
},
|
790
892
|
"map_layers": {
|
791
893
|
"options": {"collapsed": true},
|
792
894
|
"type": "array",
|
@@ -1053,8 +1155,8 @@
|
|
1053
1155
|
"remote_data_prefix": {
|
1054
1156
|
"type": "string",
|
1055
1157
|
"minLength": 1,
|
1056
|
-
"title": "Remote data
|
1057
|
-
"description": "Specify the URL of your
|
1158
|
+
"title": "Remote data prefix",
|
1159
|
+
"description": "Specify the URL of the 'data service' that is generated from your data repository.",
|
1058
1160
|
"links": [
|
1059
1161
|
{
|
1060
1162
|
"rel": "More information on the remote data prefix setting",
|
@@ -1087,6 +1189,28 @@
|
|
1087
1189
|
}
|
1088
1190
|
]
|
1089
1191
|
},
|
1192
|
+
"repository_url_data": {
|
1193
|
+
"type": "string",
|
1194
|
+
"title": "Repository URL - Data",
|
1195
|
+
"description": "The URL of your data repository, eg: https://github.com/my-github-org/data",
|
1196
|
+
"links": [
|
1197
|
+
{
|
1198
|
+
"rel": "More information on the data repository URL setting",
|
1199
|
+
"href": "https://open-sdg.readthedocs.io/en/latest/configuration/#repository_url_data"
|
1200
|
+
}
|
1201
|
+
]
|
1202
|
+
},
|
1203
|
+
"repository_url_site": {
|
1204
|
+
"type": "string",
|
1205
|
+
"title": "Repository URL - Site",
|
1206
|
+
"description": "The URL of your site repository, eg: https://github.com/my-github-org/site",
|
1207
|
+
"links": [
|
1208
|
+
{
|
1209
|
+
"rel": "More information on the site repository URL setting",
|
1210
|
+
"href": "https://open-sdg.readthedocs.io/en/latest/configuration/#repository_url_site"
|
1211
|
+
}
|
1212
|
+
]
|
1213
|
+
},
|
1090
1214
|
"search_index_boost": {
|
1091
1215
|
"options": {"collapsed": true},
|
1092
1216
|
"type": "array",
|
@@ -1273,6 +1397,12 @@
|
|
1273
1397
|
"config_form_options": {
|
1274
1398
|
"type": "object",
|
1275
1399
|
"properties": {
|
1400
|
+
"enabled": {
|
1401
|
+
"type": "boolean",
|
1402
|
+
"title": "Enable this type of form",
|
1403
|
+
"description": "If enabled, this type of configuration form will be available.",
|
1404
|
+
"format": "checkbox"
|
1405
|
+
},
|
1276
1406
|
"dropdowns": {
|
1277
1407
|
"type": "array",
|
1278
1408
|
"title": "Dropdown lists",
|
@@ -1306,6 +1436,16 @@
|
|
1306
1436
|
}
|
1307
1437
|
}
|
1308
1438
|
}
|
1439
|
+
},
|
1440
|
+
"repository_link": {
|
1441
|
+
"type": "string",
|
1442
|
+
"title": "Repository link",
|
1443
|
+
"description": "The URL pattern of the 'Go to repository' link on the configuration page."
|
1444
|
+
},
|
1445
|
+
"translation_link": {
|
1446
|
+
"type": "string",
|
1447
|
+
"title": "Translation link",
|
1448
|
+
"description": "The URL pattern for all 'Go to translation' links on the configuration page."
|
1309
1449
|
}
|
1310
1450
|
}
|
1311
1451
|
}
|
@@ -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
|
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?
|
@@ -64,7 +68,7 @@ module JekyllOpenSdgPlugins
|
|
64
68
|
# The Jekyll baseurl is user-configured, and can be inconsistent. This
|
65
69
|
# ensure it is consistent in whether it starts/ends with a slash.
|
66
70
|
def normalize_baseurl(baseurl)
|
67
|
-
if baseurl == ''
|
71
|
+
if baseurl == '' || baseurl.nil?
|
68
72
|
baseurl = '/'
|
69
73
|
end
|
70
74
|
if !baseurl.start_with? '/'
|
@@ -272,7 +276,7 @@ module JekyllOpenSdgPlugins
|
|
272
276
|
end
|
273
277
|
end
|
274
278
|
|
275
|
-
is_standalone = meta.has_key?('standalone') and meta['standalone']
|
279
|
+
is_standalone = (meta.has_key?('standalone') and meta['standalone'])
|
276
280
|
|
277
281
|
# Set the goal for this language, once only.
|
278
282
|
if !is_standalone && already_added[language].index(goal_number) == nil
|
@@ -383,8 +387,36 @@ module JekyllOpenSdgPlugins
|
|
383
387
|
doc.data['remote_data_prefix'] = normalize_baseurl(baseurl)
|
384
388
|
end
|
385
389
|
if opensdg_translated_builds(site)
|
390
|
+
doc.data['remote_data_prefix_untranslated'] = File.join(doc.data['remote_data_prefix'], 'untranslated')
|
386
391
|
doc.data['remote_data_prefix'] = File.join(doc.data['remote_data_prefix'], language)
|
392
|
+
else
|
393
|
+
doc.data['remote_data_prefix_untranslated'] = doc.data['remote_data_prefix']
|
394
|
+
end
|
395
|
+
|
396
|
+
# Set the logo for this page.
|
397
|
+
logo = {}
|
398
|
+
match = false
|
399
|
+
if site.config.has_key?('logos') && site.config['logos'].length > 0
|
400
|
+
match = site.config['logos'].find{ |item| item['language'] == language }
|
401
|
+
unless match
|
402
|
+
match = site.config['logos'].find{ |item| item.fetch('language', '') == '' }
|
403
|
+
end
|
404
|
+
end
|
405
|
+
if match
|
406
|
+
src = match['src']
|
407
|
+
unless src.start_with?('http')
|
408
|
+
src = normalize_baseurl(baseurl) + src
|
409
|
+
end
|
410
|
+
logo['src'] = src
|
411
|
+
logo['alt'] = opensdg_translate_key(match['alt'], translations, language)
|
412
|
+
else
|
413
|
+
logo['src'] = normalize_baseurl(baseurl) + 'assets/img/SDG_logo.png'
|
414
|
+
alt_text = opensdg_translate_key('general.sdg', translations, language)
|
415
|
+
alt_text += ' - '
|
416
|
+
alt_text += opensdg_translate_key('header.tag_line', translations, language)
|
417
|
+
logo['alt'] = alt_text
|
387
418
|
end
|
419
|
+
doc.data['logo'] = logo
|
388
420
|
|
389
421
|
if collection == 'indicators'
|
390
422
|
# For indicators we also set the current indicator/target/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
|
-
|
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.
|
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.
|
4
|
+
version: 1.4.0.pre.beta1
|
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-
|
11
|
+
date: 2021-06-11 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
|
@@ -100,9 +101,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
100
101
|
version: '0'
|
101
102
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
102
103
|
requirements:
|
103
|
-
- - "
|
104
|
+
- - ">"
|
104
105
|
- !ruby/object:Gem::Version
|
105
|
-
version:
|
106
|
+
version: 1.3.1
|
106
107
|
requirements: []
|
107
108
|
rubygems_version: 3.1.4
|
108
109
|
signing_key:
|