diff --git a/app/controllers/concerns/content_item_loader.rb b/app/controllers/concerns/content_item_loader.rb index f14cb40a1f..1432efa759 100644 --- a/app/controllers/concerns/content_item_loader.rb +++ b/app/controllers/concerns/content_item_loader.rb @@ -4,13 +4,15 @@ module ContentItemLoader included do before_action :load_content_item before_action :set_expiry + + helper_method :view_context end def load_content_item - content_item = GdsApi.content_store.content_item(request.path) - content_item["links"]["ordered_related_items"] = ordered_related_items(content_item["links"]) if content_item["links"] + response = GdsApi.content_store.content_item(request.path) + response["links"]["ordered_related_items"] = ordered_related_items(response["links"]) if response["links"] - @content_item = content_item + @content_item = model_type.new(response) end def ordered_related_items(links) @@ -23,8 +25,8 @@ def ordered_related_items(links) def set_expiry expires_in( - @content_item.cache_control.max_age, - public: @content_item.cache_control.public?, + @content_item.content_item.cache_control.max_age, + public: @content_item.content_item.cache_control.public?, ) end end diff --git a/app/controllers/take_part_controller.rb b/app/controllers/take_part_controller.rb index 4225c8085e..d2315e423e 100644 --- a/app/controllers/take_part_controller.rb +++ b/app/controllers/take_part_controller.rb @@ -1,3 +1,7 @@ class TakePartController < ApplicationController include ContentItemLoader + + def model_type + TakePart + end end diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 028003b108..194b3b0117 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -28,4 +28,18 @@ def wrapper_class(publication = nil) def current_path_without_query_string request.original_fullpath.split("?", 2).first end + + def t_locale_fallback(key, options = {}) + options[:locale] = I18n.locale + options[:fallback] = nil + translation = I18n.t(key, **options) + + if translation.nil? || translation.downcase.include?("translation missing") + I18n.default_locale + end + end + + def page_text_direction + I18n.t("i18n.direction", locale: I18n.locale, default: "ltr") + end end diff --git a/app/helpers/content_item_helper.rb b/app/helpers/content_item_helper.rb deleted file mode 100644 index df2fe2863d..0000000000 --- a/app/helpers/content_item_helper.rb +++ /dev/null @@ -1,52 +0,0 @@ -module ContentItemHelper - def title_and_context(content_item) - { - title: content_item["title"], - context: I18n.t("content_item.schema_name.#{content_item['document_type']}", count: 1), - # context_locale: view_context.t_locale_fallback("content_item.schema_name.#{content_item['document_type']}", count: 1), - average_title_length: "long", - } - end - - def body(content_item) - content_item.dig("details", "body") - end - - def image(content_item) - content_item.dig("details", "image") - end - - def available_translations(content_item) - translations = content_item["links"]["available_translations"] || [] - - mapped_locales(sorted_locales(translations)) - end - - def sorted_locales(translations) - translations.sort_by { |t| t["locale"] == I18n.default_locale.to_s ? "" : t["locale"] } - end - - def mapped_locales(translations) - translations.map do |translation| - { - locale: translation["locale"], - base_path: translation["base_path"], - text: native_language_name_for(translation["locale"]), - }.tap do |h| - h[:active] = true if h[:locale] == I18n.locale.to_s - end - end - end - - def text_direction - I18n.t("i18n.direction", locale: I18n.locale, default: "ltr") - end - - def native_language_name_for(locale) - I18n.t("language_names.#{locale}", locale:) - end - - def page_text_direction - I18n.t("i18n.direction", locale: I18n.locale, default: "ltr") - end -end diff --git a/app/helpers/govuk_chat_promo_helper.rb b/app/helpers/govuk_chat_promo_helper.rb new file mode 100644 index 0000000000..721054b274 --- /dev/null +++ b/app/helpers/govuk_chat_promo_helper.rb @@ -0,0 +1,5 @@ +module GovukChatPromoHelper + def show_govuk_chat_promo?(_base_path) + false + end +end diff --git a/app/helpers/machine_readable_metadata_helper.rb b/app/helpers/machine_readable_metadata_helper.rb index 67c3ffcdf7..10f534e68f 100644 --- a/app/helpers/machine_readable_metadata_helper.rb +++ b/app/helpers/machine_readable_metadata_helper.rb @@ -1,6 +1,6 @@ module MachineReadableMetadataHelper - def machine_readable_metadata(args) - locals = { content_item: @content_item }.merge(args) # rubocop:disable Rails/HelperInstanceVariable - # render("govuk_publishing_components/components/machine_readable_metadata", locals) + def machine_readable_metadata(content_item, args) + locals = { content_item: content_item.content_item }.merge(args) + render("govuk_publishing_components/components/machine_readable_metadata", locals) end end diff --git a/app/helpers/title_helper.rb b/app/helpers/title_helper.rb new file mode 100644 index 0000000000..5f2ebd9f34 --- /dev/null +++ b/app/helpers/title_helper.rb @@ -0,0 +1,10 @@ +module TitleHelper + def title_and_context(title, document_type, view_context) + { + title:, + context: I18n.t("content_item.schema_name.#{document_type}", count: 1), + context_locale: view_context.t_locale_fallback("content_item.schema_name.#{document_type}", count: 1), + average_title_length: "long", + } + end +end diff --git a/app/models/content_item.rb b/app/models/content_item.rb new file mode 100644 index 0000000000..3ca8086fc0 --- /dev/null +++ b/app/models/content_item.rb @@ -0,0 +1,41 @@ +class ContentItem + attr_reader :content_item, :body, :image, :description, :document_type, :title, :base_path + + def initialize(content_store_response) + @content_item = content_store_response + @body = content_item.dig("details", "body") + @image = content_item.dig("details", "image") + @description = content_item["description"] + @document_type = content_item["document_type"] + @title = content_item["title"] + @base_path = content_item["base_path"] + end + + def available_translations + translations = content_item["links"]["available_translations"] || [] + + mapped_locales(sorted_locales(translations)) + end + + def sorted_locales(translations) + translations.sort_by { |t| t["locale"] == I18n.default_locale.to_s ? "" : t["locale"] } + end + +private + + def mapped_locales(translations) + translations.map do |translation| + { + locale: translation["locale"], + base_path: translation["base_path"], + text: native_language_name_for(translation["locale"]), + }.tap do |h| + h[:active] = true if h[:locale] == I18n.locale.to_s + end + end + end + + def native_language_name_for(locale) + I18n.t("language_names.#{locale}", locale:) + end +end diff --git a/app/models/take_part.rb b/app/models/take_part.rb new file mode 100644 index 0000000000..c27e9d3b20 --- /dev/null +++ b/app/models/take_part.rb @@ -0,0 +1,2 @@ +class TakePart < ContentItem +end diff --git a/app/views/shared/_sidebar_navigation.html.erb b/app/views/shared/_sidebar_navigation.html.erb index 5b659eabbd..39883a8d54 100644 --- a/app/views/shared/_sidebar_navigation.html.erb +++ b/app/views/shared/_sidebar_navigation.html.erb @@ -5,5 +5,5 @@ <%= render "govuk_publishing_components/components/chat_entry", { border_top: true } %> <% end %> - <%= render 'govuk_publishing_components/components/contextual_sidebar', content_item: @content_item %> + <%= render 'govuk_publishing_components/components/contextual_sidebar', content_item: @content_item.content_item %> diff --git a/app/views/shared/_translations.html.erb b/app/views/shared/_translations.html.erb index 8f8cef7925..290560ab61 100644 --- a/app/views/shared/_translations.html.erb +++ b/app/views/shared/_translations.html.erb @@ -1,6 +1,6 @@ -<% if available_translations(@content_item).length > 1 %> +<% if @content_item.available_translations.any? %>