Class: Dommy::StyleDeclaration
- Inherits:
-
Object
- Object
- Dommy::StyleDeclaration
show all
- Includes:
- Enumerable
- Defined in:
- lib/dommy/element.rb
Constant Summary
collapse
- JS_METHOD_NAMES =
Methods routed through js_call (keep in sync with its when-arms).
%w[setProperty removeProperty getPropertyValue item].freeze
Instance Method Summary
collapse
Constructor Details
Returns a new instance of StyleDeclaration.
671
672
673
|
# File 'lib/dommy/element.rb', line 671
def initialize(element)
@element = element
end
|
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(name, *args) ⇒ Object
camelCase JS property accessors → kebab-case CSS property name. ‘style.backgroundColor = “red”` becomes `background-color: red`.
718
719
720
721
722
723
724
725
726
727
|
# File 'lib/dommy/element.rb', line 718
def method_missing(name, *args)
key = method_to_css_name(name)
if name.to_s.end_with?("=")
set_property(key, args.first)
elsif properties.key?(key)
properties[key]
else
""
end
end
|
Instance Method Details
#[](key) ⇒ Object
‘style` returns the property name at that index (matches `style.item(i)` in real DOM). String key form (`style`) is a convenience shortcut for `getPropertyValue`.
700
701
702
703
704
705
706
|
# File 'lib/dommy/element.rb', line 700
def [](key)
if key.is_a?(Integer)
properties.keys[key]
else
properties[key.to_s]
end
end
|
#[]=(name, value) ⇒ Object
708
709
710
|
# File 'lib/dommy/element.rb', line 708
def []=(name, value)
set_property(name, value)
end
|
#__js_call__(method, args) ⇒ Object
765
766
767
768
769
770
771
772
773
774
775
776
777
778
|
# File 'lib/dommy/element.rb', line 765
def __js_call__(method, args)
case method
when "setProperty"
set_property(args[0], args[1])
when "removeProperty"
remove_property(args[0])
when "getPropertyValue"
properties[args[0].to_s]
when "item"
properties.keys[args[0].to_i]
else
nil
end
end
|
#__js_get__(key) ⇒ Object
733
734
735
736
737
738
739
740
741
742
743
744
745
746
|
# File 'lib/dommy/element.rb', line 733
def __js_get__(key)
case key
when "cssText"
css_text
when "length"
length
else
if key.is_a?(Integer) || key.to_s.match?(/\A-?\d+\z/)
self[key.to_i]
else
properties[method_to_css_name(key)]
end
end
end
|
#__js_method_names__ ⇒ Object
761
762
763
|
# File 'lib/dommy/element.rb', line 761
def __js_method_names__
JS_METHOD_NAMES
end
|
#__js_set__(key, value) ⇒ Object
748
749
750
751
752
753
754
755
756
757
|
# File 'lib/dommy/element.rb', line 748
def __js_set__(key, value)
case key
when "cssText"
self.css_text = value
else
set_property(method_to_css_name(key), value)
end
nil
end
|
#css_text ⇒ Object
CSSStyleDeclaration interface: cssText round-trips the full ‘style` attribute. Setter parses semicolon-separated entries.
677
678
679
|
# File 'lib/dommy/element.rb', line 677
def css_text
properties.map { |k, v| "#{k}:#{v}" }.join(";")
end
|
#css_text=(value) ⇒ Object
681
682
683
684
685
686
687
688
689
690
691
|
# File 'lib/dommy/element.rb', line 681
def css_text=(value)
props = {}
value.to_s.split(";").each do |entry|
key, val = entry.split(":", 2)
next unless key && val
props[key.strip] = val.strip
end
write_properties(props)
end
|
#each(&blk) ⇒ Object
712
713
714
|
# File 'lib/dommy/element.rb', line 712
def each(&blk)
properties.keys.each(&blk)
end
|
#length ⇒ Object
693
694
695
|
# File 'lib/dommy/element.rb', line 693
def length
properties.size
end
|
#respond_to_missing?(_name, _include_private = false) ⇒ Boolean
729
730
731
|
# File 'lib/dommy/element.rb', line 729
def respond_to_missing?(_name, _include_private = false)
true
end
|