Module: Ruwi::Dom::Attributes
- Defined in:
- lib/ruwi/runtime/dom/attributes.rb
Class Method Summary collapse
-
.parse_style(style) ⇒ Hash
Parse CSS style string into hash.
- .remove_attribute(element, name) ⇒ Object
- .remove_style(element, name) ⇒ Object
- .set_attribute(element, name, value) ⇒ Object
- .set_attributes(element, attrs) ⇒ Object
- .set_class(element, class_name) ⇒ Object
- .set_style(element, name, value) ⇒ Object
Class Method Details
.parse_style(style) ⇒ Hash
Parse CSS style string into hash
79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/ruwi/runtime/dom/attributes.rb', line 79 def parse_style(style) return {} if style.nil? if style.is_a?(Hash) return style end result = {} style.split(';').each do |style_rule| next if style_rule.strip.empty? property, value = style_rule.split(':', 2) next unless property && value property = property.strip value = value.strip # Convert kebab-case to camelCase for JavaScript style properties camel_case_property = property.gsub(/-([a-z])/) { $1.upcase } result[camel_case_property] = value end result end |
.remove_attribute(element, name) ⇒ Object
71 72 73 74 |
# File 'lib/ruwi/runtime/dom/attributes.rb', line 71 def remove_attribute(element, name) element[name] = nil element.removeAttribute(name) end |
.remove_style(element, name) ⇒ Object
50 51 52 |
# File 'lib/ruwi/runtime/dom/attributes.rb', line 50 def remove_style(element, name) element[:style][name] = nil end |
.set_attribute(element, name, value) ⇒ Object
57 58 59 60 61 62 63 64 65 66 67 |
# File 'lib/ruwi/runtime/dom/attributes.rb', line 57 def set_attribute(element, name, value) if value.nil? remove_attribute(element, name) elsif name.to_s.start_with?("data-") element.setAttribute(name, value) elsif name.to_s == "for" element[:htmlFor] = value else element[name] = value end end |
.set_attributes(element, attrs) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# File 'lib/ruwi/runtime/dom/attributes.rb', line 8 def set_attributes(element, attrs) class_name = attrs[:class] style = attrs[:style] other_attrs = attrs.reject { |key, _| [:class, :style].include?(key) } if class_name set_class(element, class_name) end if style parse_style(style).each do |name, value| set_style(element, name, value) end end other_attrs.each do |name, value| set_attribute(element, name, value) end end |
.set_class(element, class_name) ⇒ Object
30 31 32 33 34 35 36 37 38 39 |
# File 'lib/ruwi/runtime/dom/attributes.rb', line 30 def set_class(element, class_name) element[:className] = "" case class_name when String element[:className] = class_name when Array element[:classList].add(*class_name) end end |
.set_style(element, name, value) ⇒ Object
44 45 46 |
# File 'lib/ruwi/runtime/dom/attributes.rb', line 44 def set_style(element, name, value) element[:style][name] = value end |