class JekyllOpenSdgPlugins::CreateIndicators
Public Instance Methods
generate(site)
click to toggle source
# File lib/jekyll-open-sdg-plugins/create_indicators.rb, line 9 def generate(site) # Some references to clean up the code below. language_config = site.config['languages'] indicator_config = site.config['create_indicators'] form_settings_config = site.config['indicator_config_form'] form_settings_meta = site.config['indicator_metadata_form'] form_settings_data = site.config['indicator_data_form'] # Special treatment of repository_link settings: prefix them # with the repository_url_data site config if needed. repo_url = site.config['repository_url_data'] if repo_url && repo_url != '' && repo_url.start_with?('http') if form_settings_config != nil && form_settings_config && form_settings_config['enabled'] if form_settings_config['repository_link'] && form_settings_config['repository_link'] != '' unless form_settings_config['repository_link'].start_with?('http') form_settings_config['repository_link'] = repo_url + form_settings_config['repository_link'] end end end if form_settings_meta != nil && form_settings_meta && form_settings_meta['enabled'] if form_settings_meta['repository_link'] && form_settings_meta['repository_link'] != '' unless form_settings_meta['repository_link'].start_with?('http') form_settings_meta['repository_link'] = repo_url + form_settings_meta['repository_link'] end end end if form_settings_data != nil && form_settings_data && form_settings_data['enabled'] if form_settings_data['repository_link'] && form_settings_data['repository_link'] != '' unless form_settings_data['repository_link'].start_with?('http') form_settings_data['repository_link'] = repo_url + form_settings_data['repository_link'] end end end end translations = site.data['translations'] # If site.create_indicators is set, create indicators per the metadata. if (language_config and indicator_config and indicator_config.key?('layout') and indicator_config['layout'] != '') # Decide what layout to use for the indicator pages. layout = indicator_config['layout'] # See if we need to "map" any language codes. languages_public = Hash.new if site.config['languages_public'] languages_public = opensdg_languages_public(site) end # Loop through the languages. language_config.each_with_index do |language, index| # Get the "public language" (for URLs) which may be different. language_public = language if languages_public[language] language_public = languages_public[language] end metadata = {} if opensdg_translated_builds(site) # If we are using translated builds, the metadata is underneath a # language code. metadata = site.data[language]['meta'] else # Otherwise the 'meta' data is not underneath any language code. metadata = site.data['meta'] end # Loop through the indicators (using metadata as a list). metadata.each do |inid, meta| permalink = inid if (meta.has_key?('permalink') and meta['permalink'] != '') permalink = meta['permalink'] end # Add the language subfolder for all except the default (first) language. dir = index == 0 ? permalink : File.join(language_public, permalink) # Create the indicator page. site.collections['indicators'].docs << IndicatorPage.new(site, site.source, dir, inid, language, layout) end end # Create the indicator settings configuration/metadata/data pages. do_indicator_config_forms = form_settings_config && form_settings_config['enabled'] do_indicator_meta_forms = form_settings_meta && form_settings_meta['enabled'] do_indicator_data_forms = form_settings_data && form_settings_data['enabled'] use_translated_metadata = form_settings_meta && form_settings_meta['translated'] if do_indicator_config_forms || do_indicator_meta_forms || do_indicator_data_forms metadata = {} if opensdg_translated_builds(site) if site.data.has_key?('untranslated') metadata = site.data['untranslated']['meta'] else default_language = language_config[0] metadata = site.data[default_language]['meta'] end else metadata = site.data['meta'] end metadata_by_language = {} language_config.each do |language| if opensdg_translated_builds(site) metadata_by_language[language] = site.data[language]['meta'] else metadata_by_language[language] = site.data['meta'] end end # Because we have config forms for indicator config or meta/data, we # take over the meta/data_edit_url and configuration_edit_url settings # here with simple relative links. if do_indicator_config_forms site.config['configuration_edit_url'] = 'config' end if do_indicator_meta_forms site.config['metadata_edit_url'] = 'metadata' end if do_indicator_data_forms site.config['data_edit_url'] = 'data' end # Loop through the indicators (using metadata as a list). if !metadata.empty? # Loop through the languages. language_config.each_with_index do |language, index| # Get the "public language" (for URLs) which may be different. language_public = language if languages_public[language] language_public = languages_public[language] end metadata.each do |inid, meta| permalink = inid if (meta.has_key?('permalink') and meta['permalink'] != '') permalink = meta['permalink'] end dir_base = File.join(permalink) if index != 0 dir_base = File.join(language_public, permalink) end if do_indicator_config_forms dir = File.join(dir_base, 'config') title = opensdg_translate_key('indicator.edit_configuration', translations, language) config_type = 'indicator' site.collections['pages'].docs << IndicatorConfigPage.new(site, site.source, dir, inid, language, meta, title, config_type, form_settings_config) end if do_indicator_meta_forms metadata_to_use = meta if use_translated_metadata metadata_to_use = metadata_by_language[language][inid] end dir = File.join(dir_base, 'metadata') title = opensdg_translate_key('indicator.edit_metadata', translations, language) config_type = 'metadata' site.collections['pages'].docs << IndicatorConfigPage.new(site, site.source, dir, inid, language, metadata_to_use, title, config_type, form_settings_meta) end if do_indicator_data_forms dir = File.join(dir_base, 'data') title = opensdg_translate_key('indicator.edit_data', translations, language) site.collections['pages'].docs << IndicatorDataPage.new(site, site.source, dir, inid, language, title, form_settings_data) end end end end end end end