Class: Playbook::PbIcon::Icon
- 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
Instance Method Summary collapse
- #asset_path ⇒ Object
- #classname ⇒ Object
- #custom_icon_classname ⇒ Object
- #icon_alias_map ⇒ Object
- #is_svg? ⇒ Boolean
- #render_svg ⇒ Object
- #valid_emoji? ⇒ Boolean
Methods inherited from KitBase
#combined_html_options, #global_inline_props, #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
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
Methods included from Playbook::PbKitHelper
Methods included from Playbook::PbFormsHelper
Instance Method Details
#asset_path ⇒ Object
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 |
#classname ⇒ Object
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_classname ⇒ Object
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_map ⇒ Object
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
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_svg ⇒ Object
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
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 |