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

Sign up to get free protection for your applications and to get access to all the features.
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