Class: Playbook::PbIcon::Icon

Inherits:
KitBase
  • Object
show all
Defined in:
app/pb_kits/playbook/pb_icon/icon.rb

Constant Summary

Constants included from Playbook::PositionPropsCss

Playbook::PositionPropsCss::POSITION_VALUES

Instance Attribute Summary

Attributes included from Playbook::Props

#values

Instance Method Summary collapse

Methods inherited from KitBase

#combined_html_options, #object, #pb_content_tag

Methods included from VerticalAlign

included, #vertical_align_options, #vertical_align_props, #vertical_align_values

Methods included from Bottom

#bottom_options, #bottom_values, included

Methods included from Playbook::PositionPropsCss

#positioning_css

Methods included from Right

included, #right_options, #right_values

Methods included from Top

included, #top_options, #top_values

Methods included from Left

included, #left_options, #left_values

Methods included from Truncate

included, #truncate_options, #truncate_props, #truncate_values

Methods included from Overflow

included, #overflow_options, #overflow_props, #overflow_values

Methods included from TextAlign

included, #text_align_options, #text_align_props, #text_align_values

Methods included from BorderRadius

#border_radius_options, #border_radius_props, #border_radius_values, included

Methods included from Hover

#hover_attributes, #hover_background_values, #hover_color_values, #hover_options, #hover_props, #hover_scale_values, #hover_shadow_values, #hover_values, included

Methods included from Playbook::Position

included, #position_options, #position_values

Methods included from Order

included, #order_options, #order_props, #order_values

Methods included from FlexShrink

#flex_shrink_options, #flex_shrink_props, #flex_shrink_values, included

Methods included from FlexGrow

#flex_grow_options, #flex_grow_props, #flex_grow_values, included

Methods included from Flex

#flex_options, #flex_props, #flex_values, included

Methods included from AlignSelf

#align_self_options, #align_self_props, #align_self_values, included

Methods included from AlignContent

#align_content_options, #align_content_props, #align_content_values, included

Methods included from AlignItems

#align_items_options, #align_items_props, #align_items_values, included

Methods included from JustifySelf

included, #justify_self_options, #justify_self_props, #justify_self_values

Methods included from JustifyContent

included, #justify_content_options, #justify_content_props, #justify_content_values

Methods included from FlexWrap

#flex_wrap_options, #flex_wrap_props, #flex_wrap_values, included

Methods included from FlexDirection

#flex_direction_options, #flex_direction_props, #flex_direction_values, included

Methods included from Cursor

#cursor_options, #cursor_props, #cursor_values, included

Methods included from Display

#display_options, #display_props, #display_size_values, #display_values, included

Methods included from LineHeight

included, #line_height_options, #line_height_props, #line_height_values

Methods included from Shadow

included, #shadow_options, #shadow_props, #shadow_values

Methods included from NumberSpacing

included, #number_spacing_options, #number_spacing_values

Methods included from ZIndex

included, #screen_size_values, #z_index_options, #z_index_props, #z_index_values

Methods included from Spacing

#break_method_values, #filter_classname, included, #max_width_options, #max_width_props, #max_width_values, #min_width_options, #min_width_props, #min_width_values, #screen_size_values, #spacing_options, #spacing_props, #spacing_values

Methods included from Classnames

#generate_classname, #generate_classname_without_spacing, included

Methods included from Playbook::Props

#initialize, #prop

Methods included from Playbook::PbKitHelper

#pb_rails

Methods included from Playbook::PbFormsHelper

#pb_form_with

Instance Method Details

#asset_pathObject



93
94
95
96
97
98
99
100
# File 'app/pb_kits/playbook/pb_icon/icon.rb', line 93

def asset_path
  return unless Rails.application.config.respond_to?(:icon_path)

  base_path = Rails.application.config.icon_path
  resolved_icon = resolve_alias(icon)
  icon_path = Dir.glob(Rails.root.join(base_path, "**", "#{resolved_icon}.svg")).first
  icon_path if icon_path && File.exist?(icon_path)
end

#classnameObject



47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
# File 'app/pb_kits/playbook/pb_icon/icon.rb', line 47

def classname
  generate_classname(
    "pb_icon_kit",
    color_class,
    font_style_class,
    icon_class,
    border_class,
    fixed_width_class,
    flip_class,
    inverse_class,
    list_item_class,
    pull_class,
    pulse_class,
    rotation_class,
    size_class,
    spin_class,
    separator: " "
  )
end

#custom_icon_classnameObject



67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'app/pb_kits/playbook/pb_icon/icon.rb', line 67

def custom_icon_classname
  generate_classname(
    "pb_icon_kit",
    border_class,
    color_class,
    fixed_width_class,
    flip_class,
    inverse_class,
    list_item_class,
    pull_class,
    pulse_class,
    rotation_class,
    size_class,
    spin_class,
    separator: " "
  )
end

#icon_alias_mapObject



85
86
87
88
89
90
91
# File 'app/pb_kits/playbook/pb_icon/icon.rb', line 85

def icon_alias_map
  return unless Rails.application.config.respond_to?(:icon_alias_path)

  base_path = Rails.application.config.icon_alias_path
  json = File.read(Rails.root.join(base_path))
  JSON.parse(json)["aliases"].freeze
end

#is_svg?Boolean

Returns:



125
126
127
# File 'app/pb_kits/playbook/pb_icon/icon.rb', line 125

def is_svg?
  (icon || custom_icon.to_s).include?(".svg") || asset_path.present?
end

#render_svgObject



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'app/pb_kits/playbook/pb_icon/icon.rb', line 102

def render_svg
  doc = Nokogiri::XML(URI.open(asset_path || icon || custom_icon)) # rubocop:disable Security/Open
  svg = doc.at_css "svg"

  unless svg
    return "" # Return an empty string if SVG element is not found
  end

  svg["class"] = %w[pb_custom_icon svg-inline--fa].concat([object.custom_icon_classname]).join(" ")
  svg["id"] = object.id
  svg["data"] = object.data
  svg["aria"] = object.aria
  svg["height"] = "auto"
  svg["width"] = "auto"
  svg["tabindex"] = object.tabindex
  fill_color = object.color || "currentColor"
  doc.at_css("path")["fill"] = fill_color
  raw doc
rescue OpenURI::HTTPError, StandardError
  # Handle any exceptions and return an empty string
  ""
end

#valid_emoji?Boolean

Returns:



42
43
44
45
# File 'app/pb_kits/playbook/pb_icon/icon.rb', line 42

def valid_emoji?
  emoji_regex = /\p{Emoji}/
  emoji_regex.match?(icon)
end