Module: Ruwi::Dom::Attributes

Defined in:
lib/ruwi/runtime/dom/attributes.rb

Class Method Summary collapse

Class Method Details

.parse_style(style) ⇒ Hash

Parse CSS style string into hash

Parameters:

  • style_string (String)

    CSS style string like “color: red; margin: 10px;”

Returns:

  • (Hash)

    Hash with camelCase property names as keys



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

Parameters:

  • element (JS::Object)
  • name (String, Symbol)


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

Parameters:

  • element (JS::Object)
  • name (String, Symbol)


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

Parameters:

  • element (JS::Object)
  • name (String, Symbol)
  • value (String, nil)


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

Parameters:

  • element (JS::Object)
  • attrs (Hash)


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

Parameters:

  • element (JS::Object)
  • class_name (String, Array)


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

Parameters:

  • element (JS::Object)
  • name (String, Symbol)
  • value (String)


44
45
46
# File 'lib/ruwi/runtime/dom/attributes.rb', line 44

def set_style(element, name, value)
  element[:style][name] = value
end