Sha256: ee9da719fdf5f19511ec0cadd76005424a25c1fe94115fbcbbc7fb93cfd1ebf6

Contents?: true

Size: 1.87 KB

Versions: 28

Compression:

Stored size: 1.87 KB

Contents

module GovukPublishingComponents
  module Presenters
    class Breadcrumbs
      def initialize(breadcrumbs)
        @breadcrumbs = breadcrumbs
      end

      def structured_data
        {
          "@context" => "http://schema.org",
          "@type" => "BreadcrumbList",
          "itemListElement" => item_list_element,
        }
      end

    private

      attr_reader :breadcrumbs

      def item_list_element
        breadcrumbs.each_with_index.map { |crumb, index| Breadcrumb.new(crumb, index) }.
          select(&:is_link?).
          map(&:item_list_element)
      end
    end

    class Breadcrumb
      extend Forwardable
      def_delegators :@crumb, :[]

      def initialize(crumb, index)
        @crumb = crumb
        @index = index + 1
      end

      def item_list_element
        {
          "@type" => "ListItem",
          "position" => index,
          "item" => list_item_item,
        }
      end

      def is_link?
        crumb[:url].present?
      end

      def path
        crumb[:url]
      end

      def aria_current
        "false"
      end

      def tracking_data(breadcrumbs_length)
        data = {
          track_category: "breadcrumbClicked",
          track_action: index,
          track_label: path,
          track_options: {
              dimension28: breadcrumbs_length.to_s,
              dimension29: crumb[:title],
          },
        }

        is_homepage = crumb[:url] == "/"

        if is_homepage
          data[:track_category] = "homeLinkClicked"
          data[:track_action] = "homeBreadcrumb"
          data[:track_label] = ""
          data[:track_options] = "{}"
        end

        data
      end

    private

      attr_reader :crumb, :index

      def list_item_item
        path = crumb[:url]
        item = { "name" => crumb[:title] }
        item["@id"] = Plek.new.website_root + path if path
        item
      end
    end
  end
end

Version data entries

28 entries across 28 versions & 1 rubygems

Version Path
govuk_publishing_components-21.42.0 lib/govuk_publishing_components/presenters/breadcrumbs.rb
govuk_publishing_components-21.41.4 lib/govuk_publishing_components/presenters/breadcrumbs.rb
govuk_publishing_components-21.41.3 lib/govuk_publishing_components/presenters/breadcrumbs.rb
govuk_publishing_components-21.41.2 lib/govuk_publishing_components/presenters/breadcrumbs.rb
govuk_publishing_components-21.41.1 lib/govuk_publishing_components/presenters/breadcrumbs.rb
govuk_publishing_components-21.41.0 lib/govuk_publishing_components/presenters/breadcrumbs.rb
govuk_publishing_components-21.40.0 lib/govuk_publishing_components/presenters/breadcrumbs.rb
govuk_publishing_components-21.39.0 lib/govuk_publishing_components/presenters/breadcrumbs.rb
govuk_publishing_components-21.38.5 lib/govuk_publishing_components/presenters/breadcrumbs.rb
govuk_publishing_components-21.38.4 lib/govuk_publishing_components/presenters/breadcrumbs.rb
govuk_publishing_components-21.38.3 lib/govuk_publishing_components/presenters/breadcrumbs.rb
govuk_publishing_components-21.38.2 lib/govuk_publishing_components/presenters/breadcrumbs.rb
govuk_publishing_components-21.38.1 lib/govuk_publishing_components/presenters/breadcrumbs.rb
govuk_publishing_components-21.38.0 lib/govuk_publishing_components/presenters/breadcrumbs.rb
govuk_publishing_components-21.37.0 lib/govuk_publishing_components/presenters/breadcrumbs.rb
govuk_publishing_components-21.36.1 lib/govuk_publishing_components/presenters/breadcrumbs.rb
govuk_publishing_components-21.36.0 lib/govuk_publishing_components/presenters/breadcrumbs.rb
govuk_publishing_components-21.35.0 lib/govuk_publishing_components/presenters/breadcrumbs.rb
govuk_publishing_components-21.34.1 lib/govuk_publishing_components/presenters/breadcrumbs.rb
govuk_publishing_components-21.34.0 lib/govuk_publishing_components/presenters/breadcrumbs.rb