Sha256: 96e0db2b6137f0714d64685d577f86da5f816a55f2c96863771206c80396dd52
Contents?: true
Size: 1.22 KB
Versions: 2
Compression:
Stored size: 1.22 KB
Contents
module HotwireCombobox::Component::Customizable CUSTOMIZABLE_ELEMENTS = %i[ fieldset label hidden_field main_wrapper input handle listbox dialog dialog_wrapper dialog_label dialog_input dialog_listbox ].freeze PROTECTED_ATTRS = %i[ id name value open role hidden for ].freeze CUSTOMIZABLE_ELEMENTS.each do |element| define_method "customize_#{element}" do |**attrs| customize element, **attrs end end private def custom_attrs @custom_attrs ||= Hash.new { |h, k| h[k] = {} } end def customize(element, **attrs) element = element.to_sym.presence_in(CUSTOMIZABLE_ELEMENTS) sanitized_attrs = attrs.deep_symbolize_keys.except(*PROTECTED_ATTRS) custom_attrs.store element, sanitized_attrs end def apply_customizations_to(element, base: {}) custom = custom_attrs[element] coalesce = ->(key, value) do if custom.has_key?(key) && (value.is_a?(String) || value.is_a?(Array)) view.token_list(value, custom.delete(key)) else value end end default = base.map { |k, v| [ k, coalesce.(k, v) ] }.to_h custom.deep_merge default end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
hotwire_combobox-0.3.2 | app/presenters/hotwire_combobox/component/customizable.rb |
hotwire_combobox-0.3.1 | app/presenters/hotwire_combobox/component/customizable.rb |