Class: Primer::Beta::Link

Inherits:
Component
  • Object
show all
Defined in:
app/components/primer/beta/link.rb

Overview

Use ‘Link` for navigating from one page to another. `Link` styles anchor tags with default blue styling and hover text-decoration.

Constant Summary collapse

DEFAULT_SCHEME =
:default
SCHEME_MAPPINGS =
{
  DEFAULT_SCHEME => "",
  :primary => "Link--primary",
  :secondary => "Link--secondary"
}.freeze

Constants inherited from Component

Component::INVALID_ARIA_LABEL_TAGS

Constants included from Status::Dsl

Status::Dsl::STATUSES

Constants included from ViewHelper

ViewHelper::HELPERS

Constants included from TestSelectorHelper

TestSelectorHelper::TEST_SELECTOR_TAG

Constants included from FetchOrFallbackHelper

FetchOrFallbackHelper::InvalidValueError

Constants included from AttributesHelper

AttributesHelper::PLURAL_ARIA_ATTRIBUTES, AttributesHelper::PLURAL_DATA_ATTRIBUTES

Instance Method Summary collapse

Methods inherited from Component

deprecated?, generate_id

Methods included from JoinStyleArgumentsHelper

#join_style_arguments

Methods included from TestSelectorHelper

#add_test_selector

Methods included from FetchOrFallbackHelper

#fetch_or_fallback, #fetch_or_fallback_boolean, #silence_deprecations?

Methods included from ClassNameHelper

#class_names

Methods included from AttributesHelper

#aria, #data, #merge_aria, #merge_data, #merge_prefixed_attribute_hashes

Constructor Details

#initialize(href: nil, scheme: DEFAULT_SCHEME, muted: false, underline: false, **system_arguments) ⇒ Link

Returns a new instance of Link.

Parameters:

  • href (String) (defaults to: nil)

    URL to be used for the Link. Required. If the requirements are not met an error will be raised in non production environments. In production, an empty link element will be rendered.

  • scheme (Symbol) (defaults to: DEFAULT_SCHEME)

    <%= one_of(Primer::Beta::Link::SCHEME_MAPPINGS.keys) %>

  • muted (Boolean) (defaults to: false)

    Uses light gray for Link color, and blue on hover.

  • underline (Boolean) (defaults to: false)

    Whether or not to underline the link.

  • system_arguments (Hash)

    <%= link_to_system_arguments_docs %>



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'app/components/primer/beta/link.rb', line 38

def initialize(href: nil, scheme: DEFAULT_SCHEME, muted: false, underline: false, **system_arguments)
  @system_arguments = deny_tag_argument(**system_arguments)

  @id = @system_arguments[:id]

  @system_arguments[:tag] = :a
  @system_arguments[:href] = href
  @system_arguments[:classes] = class_names(
    @system_arguments[:classes],
    SCHEME_MAPPINGS[fetch_or_fallback(SCHEME_MAPPINGS.keys, scheme, DEFAULT_SCHEME)],
    "Link",
    "Link--muted" => muted,
    "Link--underline" => underline
  )
end

Instance Method Details

#before_renderObject

Raises:

  • (ArgumentError)


54
55
56
# File 'app/components/primer/beta/link.rb', line 54

def before_render
  raise ArgumentError, "href is required" if @system_arguments[:href].nil? && !Rails.env.production?
end

#callObject



58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'app/components/primer/beta/link.rb', line 58

def call
  if tooltip.present?
    render Primer::BaseComponent.new(tag: :span, position: :relative) do
      render(Primer::BaseComponent.new(**@system_arguments)) do
        content
      end.to_s + tooltip.to_s
    end
  else
    render(Primer::BaseComponent.new(**@system_arguments)) do
      content
    end
  end
end