Module: Browser::DOM::Element::Custom::ClassMethods

Defined in:
opal/browser/dom/element/custom.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#custom_classObject (readonly)

Returns the value of attribute custom_class.



125
126
127
# File 'opal/browser/dom/element/custom.rb', line 125

def custom_class
  @custom_class
end

#observed_attributesObject

This must be defined before def_custom is called!



123
124
125
# File 'opal/browser/dom/element/custom.rb', line 123

def observed_attributes
  @observed_attributes
end

Instance Method Details

#def_custom(tag_name, base_class: nil, extends: nil) ⇒ Object

The polyfilled implementation. Define the selector and then try to upgrade the elements that are already in the document.



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'opal/browser/dom/element/custom.rb', line 58

def def_custom(tag_name, base_class: nil, extends: nil)
  if `base_class !== nil`
  elsif self.superclass == Custom
    base_class = `HTMLElement`
  elsif self.ancestors.include? Custom
    base_class = `#{self.superclass}.custom_class`
  else
    raise ArgumentError, "You must define base_class"
  end

  @custom_class = `make_custom_class(self, #{base_class})`
  @observed_attributes ||= []

  def_selector tag_name

  %x{
    if ($truthy(#{extends})) customElements.define(#{tag_name}, #{@custom_class}, {extends: #{extends}});
    else customElements.define(#{tag_name}, #{@custom_class});
  }
end