Module: Primer::AttributesHelper
- Included in:
- Component
- Defined in:
- app/lib/primer/attributes_helper.rb
Overview
:nodoc:
Constant Summary collapse
- PLURAL_ARIA_ATTRIBUTES =
%i[describedby labelledby].freeze
- PLURAL_DATA_ATTRIBUTES =
%i[target targets action].freeze
Instance Method Summary collapse
- #aria(val, system_arguments) ⇒ Object
- #data(val, system_arguments) ⇒ Object
- #extract_data(val, system_arguments) ⇒ Object
-
#merge_aria(*hashes) ⇒ Object
Merges hashes that contain “aria-*” keys and nested aria: hashes.
-
#merge_data(*hashes) ⇒ Object
Merges hashes that contain “data-*” keys and nested data: hashes.
- #merge_prefixed_attribute_hashes(*hashes, prefix:, plural_keys:) ⇒ Object
Instance Method Details
#aria(val, system_arguments) ⇒ Object
9 10 11 |
# File 'app/lib/primer/attributes_helper.rb', line 9 def aria(val, system_arguments) system_arguments[:"aria-#{val}"] || system_arguments.dig(:aria, val.to_sym) end |
#data(val, system_arguments) ⇒ Object
13 14 15 |
# File 'app/lib/primer/attributes_helper.rb', line 13 def data(val, system_arguments) system_arguments[:"data-#{val}"] || system_arguments.dig(:data, val.to_sym) end |
#extract_data(val, system_arguments) ⇒ Object
17 18 19 20 21 22 23 24 25 |
# File 'app/lib/primer/attributes_helper.rb', line 17 def extract_data(val, system_arguments) if system_arguments.include?(:"data-#{val}") system_arguments.delete(:"data-#{val}") else if system_arguments.include?(:data) && system_arguments[:data][val.to_sym] system_arguments[:data].delete(val.to_sym) end end end |
#merge_aria(*hashes) ⇒ Object
Merges hashes that contain “aria-*” keys and nested aria: hashes. Removes keys from each hash and returns them in the new hash.
Eg. merge_aria({ “aria-disabled”: “true” }, { aria: { invalid: “true” } })
=> { disabled: "true", invalid: "true" }
Certain aria attributes can contain multiple values separated by spaces. merge_aria will combine these plural attributes into a composite string.
Eg. merge_aria({ “aria-labelledby”: “foo” }, { aria: { labelledby: “bar” } })
=> { labelledby: "foo bar" }
It’s designed to be used to normalize and merge aria information from system_arguments hashes. Consider using this pattern in component initializers:
@system_arguments = merge_aria(
@system_arguments,
{ aria: { labelled_by: id } }
)
46 47 48 49 50 |
# File 'app/lib/primer/attributes_helper.rb', line 46 def merge_aria(*hashes) merge_prefixed_attribute_hashes( *hashes, prefix: :aria, plural_keys: PLURAL_ARIA_ATTRIBUTES ) end |
#merge_data(*hashes) ⇒ Object
Merges hashes that contain “data-*” keys and nested data: hashes. Removes keys from each hash and returns them in the new hash.
Eg. merge_data({ “data-foo”: “true” }, { data: { bar: “true” } })
=> { foo: "true", bar: "true" }
Certain data attributes can contain multiple values separated by spaces. merge_data will combine these plural attributes into a composite string.
Eg. merge_data({ “data-target”: “foo” }, { data: { target: “bar” } })
=> { target: "foo bar" }
It’s designed to be used to normalize and merge data information from system_arguments hashes. Consider using this pattern in component initializers:
@system_arguments = merge_data(
@system_arguments,
{ data: { foo: "bar" } }
)
71 72 73 74 75 |
# File 'app/lib/primer/attributes_helper.rb', line 71 def merge_data(*hashes) merge_prefixed_attribute_hashes( *hashes, prefix: :data, plural_keys: PLURAL_DATA_ATTRIBUTES ) end |
#merge_prefixed_attribute_hashes(*hashes, prefix:, plural_keys:) ⇒ Object
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'app/lib/primer/attributes_helper.rb', line 77 def merge_prefixed_attribute_hashes(*hashes, prefix:, plural_keys:) {}.tap do |result| hashes.each do |hash| next unless hash prefix_hash = hash.delete(prefix) || {} prefix_hash.each_pair do |key, val| result[key] = if plural_keys.include?(key) [*(result[key] || "").split, val].join(" ").strip else val end end hash.delete_if do |key, val| key_s = key.to_s if key.start_with?("#{prefix}-") = key_s.sub("#{prefix}-", "").to_sym result[] = if plural_keys.include?() [*(result[] || "").split, val].join(" ").strip else val end true else false end end end end end |