Class: NfgUi::Components::Patterns::PageHeader

Inherits:
Base show all
Includes:
Traits::PageHeader, Utilities::BrowserDetectable, Utilities::Renderable, Utilities::Titleable
Defined in:
lib/nfg_ui/components/patterns/page_header.rb

Overview

PageHeader doc coming soon

Constant Summary

Constants included from Traits::PageHeader

Traits::PageHeader::TRAITS

Constants included from Traits

Traits::REGISTERED_TRAITS, Traits::TRAIT_MODULES

Instance Attribute Summary

Attributes inherited from Bootstrap::Components::Base

#body, #options, #view_context

Instance Method Summary collapse

Methods included from Traits::PageHeader

#sticky_trait

Methods included from Utilities::Renderable

#render_if, #render_unless

Methods included from Utilities::BrowserDetectable

#browser

Methods included from Utilities::Titleable

#title

Methods included from Utilities::Traitable

#traits, #utility_initialize

Methods included from Utilities::Describable

#describe

Methods inherited from Bootstrap::Components::Base

#component_family, #href, #html_options, #id, #initialize, #style

Constructor Details

This class inherits a constructor from NfgUi::Bootstrap::Components::Base

Instance Method Details

#dataObject



14
15
16
# File 'lib/nfg_ui/components/patterns/page_header.rb', line 14

def data
  sticky ? super.merge!(toggle: 'sticky-div') : super
end

#renderObject



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/nfg_ui/components/patterns/page_header.rb', line 37

def render
  html_options[:class] ||= ''
  html_options[:class] << ' container-fluid'

  (:div, html_options) do
    (:div, class: 'row') do
      (:div, class: 'col col-xl-11 mx-auto') do
        (:div, class: 'row align-items-center') do
          concat((:div, class: 'col py-2') {
            NfgUi::Components::Patterns::Media.new({}, view_context).render do
              capture do
                concat(NfgUi::Components::Elements::MediaObject.new({}, view_context).render {
                  (:div, class: 'mr-2 h2') do
                    NfgUi::Components::Foundations::Icon.new({ traits: [resource_theme_icon], class: "text-#{resource_theme_color} mr-0" }, view_context).render
                  end
                })
                concat(NfgUi::Components::Elements::MediaBody.new({}, view_context).render {
                  (:h2) do
                    concat(title)
                    if subtitle
                      concat((:small, subtitle, class: 'text-muted'))
                    end
                  end
                })
              end
            end
          })
          if body
            concat((:div, class: 'col-12 col-md-auto py-2') {
              NfgUi::Components::Patterns::ButtonToolbar.new({ class: 'align-items-center' }, view_context).render do
                (block_given? ? yield : body)
              end
            })
          end
        end
      end
    end
  end
end

#resource_theme_colorObject



33
34
35
# File 'lib/nfg_ui/components/patterns/page_header.rb', line 33

def resource_theme_color
  'primary'
end

#resource_theme_iconObject

TODO: These resource_theme methods are just temporary placeholders. They need to come from ResourceThemeable somehow.



29
30
31
# File 'lib/nfg_ui/components/patterns/page_header.rb', line 29

def resource_theme_icon
  'heart-o'
end

#stickyObject



18
19
20
21
# File 'lib/nfg_ui/components/patterns/page_header.rb', line 18

def sticky
  return if Rails.env.test? || browser.mobile?
  options.fetch(:sticky, true)
end

#subtitleObject



23
24
25
# File 'lib/nfg_ui/components/patterns/page_header.rb', line 23

def subtitle
  options.fetch(:subtitle, nil)
end