Module: Pulse::AttributesHelper
- Included in:
- Component
- Defined in:
- app/lib/pulse/attributes_helper.rb
Overview
:nodoc:
Constant Summary collapse
- PLURAL_ARIA_ATTRIBUTES =
[:describedby, :labelledby].freeze
- PLURAL_DATA_ATTRIBUTES =
[:target, :targets].freeze
Instance Method Summary collapse
- #aria(val, system_arguments) ⇒ Object
- #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 12 |
# File 'app/lib/pulse/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
14 15 16 17 |
# File 'app/lib/pulse/attributes_helper.rb', line 14 def data(val, system_arguments) system_arguments[:"data-#{val}"] || system_arguments.dig(:data, val.to_sym) 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 } } )
38 39 40 41 42 |
# File 'app/lib/pulse/attributes_helper.rb', line 38 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_aria( @system_arguments, { data: { foo: "bar" } } )
63 64 65 66 67 |
# File 'app/lib/pulse/attributes_helper.rb', line 63 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
69 70 71 72 73 74 75 76 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 |
# File 'app/lib/pulse/attributes_helper.rb', line 69 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 |