jekyll-open-sdg-plugins 1.6.1 → 1.8.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/.editorconfig +16 -16
- data/.github/workflows/test-pull-requests.yml +17 -17
- data/.gitignore +6 -6
- data/LICENSE +21 -21
- data/Makefile +33 -33
- data/README.md +7 -7
- data/jekyll-open-sdg-plugins.gemspec +18 -18
- data/lib/jekyll-open-sdg-plugins/backwards_compatibility.rb +97 -64
- data/lib/jekyll-open-sdg-plugins/create_goals.rb +88 -85
- data/lib/jekyll-open-sdg-plugins/create_indicators.rb +209 -206
- data/lib/jekyll-open-sdg-plugins/create_pages.rb +150 -135
- data/lib/jekyll-open-sdg-plugins/fetch_remote_data.rb +188 -188
- data/lib/jekyll-open-sdg-plugins/helpers.rb +132 -132
- data/lib/jekyll-open-sdg-plugins/metadata_schema_to_config.rb +72 -72
- data/lib/jekyll-open-sdg-plugins/schema-indicator-config.json +787 -709
- data/lib/jekyll-open-sdg-plugins/schema-site-config.json +1712 -1607
- data/lib/jekyll-open-sdg-plugins/sdg_variables.rb +614 -549
- data/lib/jekyll-open-sdg-plugins/search_index.rb +102 -102
- data/lib/jekyll-open-sdg-plugins/site_configuration.rb +87 -73
- data/lib/jekyll-open-sdg-plugins/translate_date.rb +122 -122
- data/lib/jekyll-open-sdg-plugins/translate_key.rb +20 -20
- data/lib/jekyll-open-sdg-plugins/translate_metadata_field.rb +111 -111
- data/lib/jekyll-open-sdg-plugins/validate_indicator_config.rb +52 -52
- data/lib/jekyll-open-sdg-plugins/validate_site_config.rb +34 -34
- data/lib/jekyll-open-sdg-plugins/version.rb +3 -3
- data/lib/jekyll-open-sdg-plugins.rb +18 -18
- data/tests/Gemfile +7 -7
- data/tests/_config.yml +168 -168
- metadata +5 -5
@@ -1,135 +1,150 @@
|
|
1
|
-
require "jekyll"
|
2
|
-
require_relative "helpers"
|
3
|
-
|
4
|
-
module JekyllOpenSdgPlugins
|
5
|
-
class CreatePages < Jekyll::Generator
|
6
|
-
safe true
|
7
|
-
priority :normal
|
8
|
-
|
9
|
-
def generate(site)
|
10
|
-
# If site.create_pages is set, create the 4 required pages. These include:
|
11
|
-
# - the home page: /
|
12
|
-
# - the indicators json page: /indicators.json
|
13
|
-
# - the search results page: /search
|
14
|
-
# - the reporting status page: /reporting-status
|
15
|
-
#
|
16
|
-
# These can be overridden though, with a create_pages.pages setting in
|
17
|
-
# _config.yml, like so:
|
18
|
-
#
|
19
|
-
# create_pages:
|
20
|
-
# pages:
|
21
|
-
# - folder: ''
|
22
|
-
# layout: frontpage
|
23
|
-
# - filename: my-json-file.json
|
24
|
-
# folder: my-subfolder
|
25
|
-
# layout: indicator-json
|
26
|
-
#
|
27
|
-
# Note the optional "filename" setting for when the page needs a specific
|
28
|
-
# filename (as opposed to being "index.html" inside a named folder).
|
29
|
-
#
|
30
|
-
# To use the default 4 pages, simply put:
|
31
|
-
#
|
32
|
-
# create_pages: true
|
33
|
-
if (site.config['languages'] and site.config['create_pages'])
|
34
|
-
|
35
|
-
default_pages = [
|
36
|
-
{
|
37
|
-
'folder' => '/',
|
38
|
-
'layout' => 'frontpage'
|
39
|
-
},
|
40
|
-
{
|
41
|
-
'folder' => '/reporting-status',
|
42
|
-
'layout' => 'reportingstatus',
|
43
|
-
'title' => 'status.reporting_status',
|
44
|
-
},
|
45
|
-
{
|
46
|
-
'filename' => 'indicators.json',
|
47
|
-
'folder' => '/',
|
48
|
-
'layout' => 'indicator-json',
|
49
|
-
},
|
50
|
-
{
|
51
|
-
'folder' => '/search',
|
52
|
-
'layout' => 'search',
|
53
|
-
'title' => 'search.search',
|
54
|
-
}
|
55
|
-
]
|
56
|
-
pages = default_pages
|
57
|
-
if (site.config['create_pages'].is_a?(Hash) and site.config['create_pages'].key?('pages'))
|
58
|
-
# Backwards compatability to support the deprecated "pages" key.
|
59
|
-
pages = site.config['create_pages']['pages']
|
60
|
-
elsif site.config['create_pages'].is_a?(Array)
|
61
|
-
pages = site.config['create_pages']
|
62
|
-
end
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
#
|
88
|
-
|
89
|
-
if
|
90
|
-
|
91
|
-
end
|
92
|
-
|
93
|
-
#
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
1
|
+
require "jekyll"
|
2
|
+
require_relative "helpers"
|
3
|
+
|
4
|
+
module JekyllOpenSdgPlugins
|
5
|
+
class CreatePages < Jekyll::Generator
|
6
|
+
safe true
|
7
|
+
priority :normal
|
8
|
+
|
9
|
+
def generate(site)
|
10
|
+
# If site.create_pages is set, create the 4 required pages. These include:
|
11
|
+
# - the home page: /
|
12
|
+
# - the indicators json page: /indicators.json
|
13
|
+
# - the search results page: /search
|
14
|
+
# - the reporting status page: /reporting-status
|
15
|
+
#
|
16
|
+
# These can be overridden though, with a create_pages.pages setting in
|
17
|
+
# _config.yml, like so:
|
18
|
+
#
|
19
|
+
# create_pages:
|
20
|
+
# pages:
|
21
|
+
# - folder: ''
|
22
|
+
# layout: frontpage
|
23
|
+
# - filename: my-json-file.json
|
24
|
+
# folder: my-subfolder
|
25
|
+
# layout: indicator-json
|
26
|
+
#
|
27
|
+
# Note the optional "filename" setting for when the page needs a specific
|
28
|
+
# filename (as opposed to being "index.html" inside a named folder).
|
29
|
+
#
|
30
|
+
# To use the default 4 pages, simply put:
|
31
|
+
#
|
32
|
+
# create_pages: true
|
33
|
+
if (site.config['languages'] and site.config['create_pages'])
|
34
|
+
|
35
|
+
default_pages = [
|
36
|
+
{
|
37
|
+
'folder' => '/',
|
38
|
+
'layout' => 'frontpage'
|
39
|
+
},
|
40
|
+
{
|
41
|
+
'folder' => '/reporting-status',
|
42
|
+
'layout' => 'reportingstatus',
|
43
|
+
'title' => 'status.reporting_status',
|
44
|
+
},
|
45
|
+
{
|
46
|
+
'filename' => 'indicators.json',
|
47
|
+
'folder' => '/',
|
48
|
+
'layout' => 'indicator-json',
|
49
|
+
},
|
50
|
+
{
|
51
|
+
'folder' => '/search',
|
52
|
+
'layout' => 'search',
|
53
|
+
'title' => 'search.search',
|
54
|
+
}
|
55
|
+
]
|
56
|
+
pages = default_pages
|
57
|
+
if (site.config['create_pages'].is_a?(Hash) and site.config['create_pages'].key?('pages'))
|
58
|
+
# Backwards compatability to support the deprecated "pages" key.
|
59
|
+
pages = site.config['create_pages']['pages']
|
60
|
+
elsif site.config['create_pages'].is_a?(Array)
|
61
|
+
pages = site.config['create_pages']
|
62
|
+
end
|
63
|
+
|
64
|
+
pages.each do |page|
|
65
|
+
if page['layout'] == 'frontpage'
|
66
|
+
opensdg_notice('DEPRECATION NOTICE: In Open SDG 2.0.0, the "frontpage" layout will change. To see a preview, set "bootstrap_5" to "true".')
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
# Clone pages so that we don't edit the original.
|
71
|
+
pages = pages.clone
|
72
|
+
|
73
|
+
# Hardcode the site configuration page if it's not already there.
|
74
|
+
form_settings = site.config['site_config_form']
|
75
|
+
config_page = pages.find { |page| page['layout'] == 'config-builder' }
|
76
|
+
if config_page == nil
|
77
|
+
if form_settings && form_settings['enabled']
|
78
|
+
pages.push({
|
79
|
+
'folder' => '/config',
|
80
|
+
'layout' => 'config-builder',
|
81
|
+
'title' => 'Open SDG site configuration',
|
82
|
+
'config_type' => 'site',
|
83
|
+
'config_filename' => 'site_config.yml',
|
84
|
+
})
|
85
|
+
end
|
86
|
+
end
|
87
|
+
# Make sure the form settings are set.
|
88
|
+
config_page = pages.find { |page| page['layout'] == 'config-builder' }
|
89
|
+
if config_page != nil && form_settings && form_settings['enabled']
|
90
|
+
config_page['form_settings'] = form_settings
|
91
|
+
end
|
92
|
+
|
93
|
+
# See if we need to "map" any language codes.
|
94
|
+
languages_public = Hash.new
|
95
|
+
if site.config['languages_public']
|
96
|
+
languages_public = opensdg_languages_public(site)
|
97
|
+
end
|
98
|
+
|
99
|
+
# Loop through the languages.
|
100
|
+
site.config['languages'].each_with_index do |language, index|
|
101
|
+
# Get the "public language" (for URLs) which may be different.
|
102
|
+
language_public = language
|
103
|
+
if languages_public[language]
|
104
|
+
language_public = languages_public[language]
|
105
|
+
end
|
106
|
+
# Loop through the pages.
|
107
|
+
pages.each do |page|
|
108
|
+
# Add the language subfolder for all except the default (first) language.
|
109
|
+
dir = index == 0 ? page['folder'] : File.join(language_public, page['folder'])
|
110
|
+
# Create the page.
|
111
|
+
site.collections['pages'].docs << OpenSdgPage.new(site, site.source, dir, page, language)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
# A Page subclass used in the `CreatePages` class.
|
119
|
+
class OpenSdgPage < Jekyll::Page
|
120
|
+
def initialize(site, base, dir, page, language)
|
121
|
+
@site = site
|
122
|
+
@base = base
|
123
|
+
|
124
|
+
index_files = (!page.key?('filename') or page['filename'] == 'index.html' or page['filename'] == '')
|
125
|
+
@dir = index_files ? File.join(dir, '/') : dir
|
126
|
+
@name = index_files ? 'index.html' : page['filename']
|
127
|
+
|
128
|
+
self.process(@name)
|
129
|
+
self.data = {}
|
130
|
+
self.data['language'] = language
|
131
|
+
|
132
|
+
# Add anything else besides "folder" and "filename". This will catch
|
133
|
+
# things like "layout" and "title", and anything else.
|
134
|
+
page.each do |key, value|
|
135
|
+
if key != 'folder' && key != 'filename'
|
136
|
+
self.data[key] = value
|
137
|
+
end
|
138
|
+
end
|
139
|
+
|
140
|
+
if site.config['bootstrap_5']
|
141
|
+
if page.has_key?('layout') && page['layout'] == 'reportingstatus'
|
142
|
+
self.data['layout'] = 'reportingstatus-bootstrap5'
|
143
|
+
end
|
144
|
+
if page.has_key?('layout') && page['layout'] == 'frontpage'
|
145
|
+
self.data['layout'] = 'frontpage-alt'
|
146
|
+
end
|
147
|
+
end
|
148
|
+
end
|
149
|
+
end
|
150
|
+
end
|