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.
Files changed (30) hide show
  1. checksums.yaml +4 -4
  2. data/.editorconfig +16 -16
  3. data/.github/workflows/test-pull-requests.yml +17 -17
  4. data/.gitignore +6 -6
  5. data/LICENSE +21 -21
  6. data/Makefile +33 -33
  7. data/README.md +7 -7
  8. data/jekyll-open-sdg-plugins.gemspec +18 -18
  9. data/lib/jekyll-open-sdg-plugins/backwards_compatibility.rb +97 -64
  10. data/lib/jekyll-open-sdg-plugins/create_goals.rb +88 -85
  11. data/lib/jekyll-open-sdg-plugins/create_indicators.rb +209 -206
  12. data/lib/jekyll-open-sdg-plugins/create_pages.rb +150 -135
  13. data/lib/jekyll-open-sdg-plugins/fetch_remote_data.rb +188 -188
  14. data/lib/jekyll-open-sdg-plugins/helpers.rb +132 -132
  15. data/lib/jekyll-open-sdg-plugins/metadata_schema_to_config.rb +72 -72
  16. data/lib/jekyll-open-sdg-plugins/schema-indicator-config.json +787 -709
  17. data/lib/jekyll-open-sdg-plugins/schema-site-config.json +1712 -1607
  18. data/lib/jekyll-open-sdg-plugins/sdg_variables.rb +614 -549
  19. data/lib/jekyll-open-sdg-plugins/search_index.rb +102 -102
  20. data/lib/jekyll-open-sdg-plugins/site_configuration.rb +87 -73
  21. data/lib/jekyll-open-sdg-plugins/translate_date.rb +122 -122
  22. data/lib/jekyll-open-sdg-plugins/translate_key.rb +20 -20
  23. data/lib/jekyll-open-sdg-plugins/translate_metadata_field.rb +111 -111
  24. data/lib/jekyll-open-sdg-plugins/validate_indicator_config.rb +52 -52
  25. data/lib/jekyll-open-sdg-plugins/validate_site_config.rb +34 -34
  26. data/lib/jekyll-open-sdg-plugins/version.rb +3 -3
  27. data/lib/jekyll-open-sdg-plugins.rb +18 -18
  28. data/tests/Gemfile +7 -7
  29. data/tests/_config.yml +168 -168
  30. metadata +5 -5
@@ -1,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
- # Clone pages so that we don't edit the original.
65
- pages = pages.clone
66
-
67
- # Hardcode the site configuration page if it's not already there.
68
- form_settings = site.config['site_config_form']
69
- config_page = pages.find { |page| page['layout'] == 'config-builder' }
70
- if config_page == nil
71
- if form_settings && form_settings['enabled']
72
- pages.push({
73
- 'folder' => '/config',
74
- 'layout' => 'config-builder',
75
- 'title' => 'Open SDG site configuration',
76
- 'config_type' => 'site',
77
- 'config_filename' => 'site_config.yml',
78
- })
79
- end
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
- config_page['form_settings'] = form_settings
85
- end
86
-
87
- # See if we need to "map" any language codes.
88
- languages_public = Hash.new
89
- if site.config['languages_public']
90
- languages_public = opensdg_languages_public(site)
91
- end
92
-
93
- # Loop through the languages.
94
- site.config['languages'].each_with_index do |language, index|
95
- # Get the "public language" (for URLs) which may be different.
96
- language_public = language
97
- if languages_public[language]
98
- language_public = languages_public[language]
99
- end
100
- # Loop through the pages.
101
- pages.each do |page|
102
- # Add the language subfolder for all except the default (first) language.
103
- dir = index == 0 ? page['folder'] : File.join(language_public, page['folder'])
104
- # Create the page.
105
- site.collections['pages'].docs << OpenSdgPage.new(site, site.source, dir, page, language)
106
- end
107
- end
108
- end
109
- end
110
- end
111
-
112
- # A Page subclass used in the `CreatePages` class.
113
- class OpenSdgPage < Jekyll::Page
114
- def initialize(site, base, dir, page, language)
115
- @site = site
116
- @base = base
117
-
118
- index_files = (!page.key?('filename') or page['filename'] == 'index.html' or page['filename'] == '')
119
- @dir = index_files ? File.join(dir, '/') : dir
120
- @name = index_files ? 'index.html' : page['filename']
121
-
122
- self.process(@name)
123
- self.data = {}
124
- self.data['language'] = language
125
-
126
- # Add anything else besides "folder" and "filename". This will catch
127
- # things like "layout" and "title", and anything else.
128
- page.each do |key, value|
129
- if key != 'folder' && key != 'filename'
130
- self.data[key] = value
131
- end
132
- end
133
- end
134
- end
135
- end
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