Class: Www::VideoCardComponent

Inherits:
Railsboot::Component
  • Object
show all
Includes:
ActionView::Helpers::SanitizeHelper, ActionView::Helpers::TagHelper, ActionView::Helpers::UrlHelper, ApplicationHelper, PresenterHelper, SeoHelper
Defined in:
app/components/www/video_card_component.rb

Overview

ViewComponent: renders the video card block.

Constant Summary collapse

LAYOUTS =

Layout options

%w[card thumbnail inline].freeze
DEFAULT_LAYOUT =

Default layout.

'card'
CARD_STYLES =

Card styling options

%w[default hover-raise shadow].freeze
DEFAULT_CARD_STYLE =

Default card style.

'default'

Constants included from SeoHelper

SeoHelper::AWARDS, SeoHelper::CA_ADDRESS, SeoHelper::CA_BUSINESS_HOURS, SeoHelper::CA_CONTACT_POINT, SeoHelper::CA_CURRENCIES, SeoHelper::CA_DESCRIPTION, SeoHelper::CA_FOUNDING_DATE, SeoHelper::CA_GLOBAL_LOCATION_NUMBER, SeoHelper::CA_LEGAL_NAME, SeoHelper::CA_LOCAL_BUSINESS, SeoHelper::CA_ONLINE_STORE, SeoHelper::CA_RETURN_POLICY, SeoHelper::CA_SALES_DEPARTMENT, SeoHelper::CA_SERVICE_AREA, SeoHelper::CA_URL, SeoHelper::CA_VAT_ID, SeoHelper::CA_WAREHOUSE_DEPARTMENT, SeoHelper::CA_WAREHOUSE_HOURS, SeoHelper::COMPANY_EMAIL, SeoHelper::COMPANY_LOGO, SeoHelper::COMPANY_NAME, SeoHelper::COMPANY_SLOGAN, SeoHelper::EXPERTISE, SeoHelper::FAX_NUMBER, SeoHelper::GS1_COMPANY_PREFIX, SeoHelper::ISO6523_CODE, SeoHelper::PAYMENT_METHODS, SeoHelper::PHONE_NUMBER, SeoHelper::PRIMARY_NAICS, SeoHelper::REFUND_TYPE, SeoHelper::RETURN_FEES, SeoHelper::RETURN_METHOD, SeoHelper::RETURN_POLICY_CATEGORY, SeoHelper::SECONDARY_NAICS, SeoHelper::SOCIAL_PROFILES, SeoHelper::US_ADDRESS, SeoHelper::US_BUSINESS_HOURS, SeoHelper::US_CONTACT_POINT, SeoHelper::US_CURRENCIES, SeoHelper::US_DESCRIPTION, SeoHelper::US_FOUNDING_DATE, SeoHelper::US_GLOBAL_LOCATION_NUMBER, SeoHelper::US_IMAGE, SeoHelper::US_LEGAL_NAME, SeoHelper::US_LOCAL_BUSINESS, SeoHelper::US_ONLINE_STORE, SeoHelper::US_RETURN_POLICY, SeoHelper::US_SALES_DEPARTMENT, SeoHelper::US_SERVICE_AREA, SeoHelper::US_TAX_ID, SeoHelper::US_URL, SeoHelper::US_WAREHOUSE_DEPARTMENT, SeoHelper::US_WAREHOUSE_HOURS

Constants included from ApplicationHelper

ApplicationHelper::CF_WEB_ANALYTICS_SKIP_PATHS, ApplicationHelper::MARKDOWN_ALLOWED_ATTRIBUTES, ApplicationHelper::MARKDOWN_ALLOWED_TAGS

Constants included from IconHelper

IconHelper::CUSTOM_ICON_MAP, IconHelper::CUSTOM_SVG_DIR, IconHelper::DEFAULT_FAMILY

Instance Method Summary collapse

Methods included from SeoHelper

#add_page_schema, #add_webpage_schema, #canada?, #collect_schema, #company_social_links, #ensure_context_json, #json_ld_script_tag, #local_business_schema, #online_store_id, #online_store_schema, #page_main_entity, #page_main_entity_json, #render_auto_collection_page_schema, #render_collection_page_schema, #render_local_business_schema, #render_online_store_schema, #render_page_schemas, #render_page_video_schemas, #render_webpage_schema, #render_webpage_schema_with_collections, #usa?

Methods included from PresenterHelper

#generic_present, #present

Methods included from ApplicationHelper

#better_number_to_currency, #cf_web_analytics?, #check_or_cross, #check_or_times, #embedded_tab_frame_id, #error_messages, #general_disclaimer_on_product_installation_and_local_codes, #markdown_to_html, #parent_layout, #pass_or_fail, #render_error_messages_list, #render_video_card, #resolved_auth_form_turbo_frame, #return_path_or, #safe_css_color, #set_return_path_if_present, #set_section_if_present, #tab_frame_id, #to_underscore, #turbo_section_wrapper, #turbo_tabs_request?, #url_on_same_domain_as_request, #working_hours?, #yes_or_no, #yes_or_no_highlighted, #yes_or_no_with_check_or_cross

Methods included from UppyUploaderHelper

#file_uploader, #image_uploader, #large_file_uploader_s3, #lead_sketch_uploader, #public_warranty_card_uploader, #rma_image_uploader, #rma_image_uploader_s3, #uppy_uploader, #video_uploader, #warranty_card_uploader

Methods included from ImagesHelper

#image_asset_tag, #image_asset_url, #picture_asset_tag

Methods included from UrlsHelper

#catalog_breadcrumb_links, #catalog_link, #catalog_link_for_product_line, #catalog_link_for_sku, #cms_link, #delocalized_path, #path_to_sales_product_sku, #path_to_sales_product_sku_for_product_line, #path_to_sales_product_sku_for_product_line_slug, #product_line_from_catalog_link, #protocol_neutral_url, #sanitize_external_url, #valid_external_url?

Methods included from IconHelper

#account_nav_icon, #fa_icon, #star_rating_html

Constructor Details

#initialize(video:, layout: DEFAULT_LAYOUT, card_style: DEFAULT_CARD_STYLE, hide_title: false, hide_description: false, display_category_badge: false, display_duration: false, featured: false, title_heading_level: nil, styles: '', show_popup: true, show_direct_link: true, add_schema: true, **html_attributes) ⇒ VideoCardComponent

rubocop:disable Metrics/ParameterLists

Parameters:

  • video (Video, Www::VideoPresenter)

    video (or its presenter) to render

  • layout (String) (defaults to: DEFAULT_LAYOUT)

    card layout, one of LAYOUTS

  • card_style (String) (defaults to: DEFAULT_CARD_STYLE)

    card styling, one of CARD_STYLES

  • hide_title (Boolean) (defaults to: false)

    hide the video title

  • hide_description (Boolean) (defaults to: false)

    hide the video description

  • display_category_badge (Boolean) (defaults to: false)

    show the category badge

  • display_duration (Boolean) (defaults to: false)

    show the video duration

  • featured (Boolean) (defaults to: false)

    apply featured styling

  • title_heading_level (Symbol, nil) (defaults to: nil)

    opt-in semantic heading for the title (e.g. :h2)

  • styles (String) (defaults to: '')

    additional inline styles for the card

  • show_popup (Boolean) (defaults to: true)

    open the video in a popup

  • show_direct_link (Boolean) (defaults to: true)

    render a direct link to the video page

  • add_schema (Boolean) (defaults to: true)

    add video schema to the page collection

  • html_attributes (Hash)

    additional HTML attributes applied to the rendered element

Options Hash (**html_attributes):

  • :class (String)

    CSS classes applied to the rendered tag



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
# File 'app/components/www/video_card_component.rb', line 38

def initialize(
  video:,
  layout: DEFAULT_LAYOUT,
  card_style: DEFAULT_CARD_STYLE,
  hide_title: false,
  hide_description: false,
  display_category_badge: false,
  display_duration: false,
  featured: false,
  title_heading_level: nil,
  styles: '',
  show_popup: true,
  show_direct_link: true,
  add_schema: true,
  **html_attributes
)
  super()
  @video = video
  @layout = fetch_or_fallback(layout, LAYOUTS, DEFAULT_LAYOUT)
  @card_style = fetch_or_fallback(card_style, CARD_STYLES, DEFAULT_CARD_STYLE)
  @hide_title = hide_title
  @hide_description = hide_description
  @display_category_badge = display_category_badge
  @display_duration = display_duration
  @featured = featured
  # Opt-in semantic heading for the title (e.g. `:h2`). When nil the
  # title renders inside a plain <a>/<span> — appropriate for cards
  # that sit under their own section header. Pages where each video
  # card IS the heading-bearing block (e.g. the videos index) pass
  # `:h2` to surface the title to SEO / a11y heading hierarchy.
  @title_heading_level = title_heading_level
  @styles = styles
  @show_popup = show_popup
  @show_direct_link = show_direct_link
  @add_schema = add_schema
  @html_attributes = html_attributes
end

Instance Method Details

#before_renderObject



81
82
83
84
85
86
87
88
89
# File 'app/components/www/video_card_component.rb', line 81

def before_render
  # Add video schema to page collection
  return unless @add_schema

  # If @video is already a presenter, pass the underlying model to add_page_schema
  # Otherwise, pass the video object directly
  video_object = @video.is_a?(Www::VideoPresenter) ? @video.r : @video
  add_page_schema(:video, video_object)
end

#render?Boolean

rubocop:enable Metrics/ParameterLists

Returns:

  • (Boolean)


77
78
79
# File 'app/components/www/video_card_component.rb', line 77

def render?
  @video.present?
end