Class: Browser::DOM::Element::Data

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
opal/browser/dom/element/data.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(element) ⇒ Data

Returns a new instance of Data.


6
7
8
9
10
11
12
13
# File 'opal/browser/dom/element/data.rb', line 6

def initialize(element)
  @element = element
  @native  = element.to_n

  unless defined?(`#@native.$data`)
    `#@native.$data = {}`
  end
end

Instance Attribute Details

#elementObject (readonly)

Returns the value of attribute element


4
5
6
# File 'opal/browser/dom/element/data.rb', line 4

def element
  @element
end

Instance Method Details

#[](name) ⇒ Object


45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'opal/browser/dom/element/data.rb', line 45

def [](name)
  if data = @element["data-#{name}"]
    return data
  end

  %x{
    var value = #@native.$data[name];

    if (value === undefined) {
      return nil;
    }
    else {
      return value;
    }
  }
end

#[]=(name, value) ⇒ Object


62
63
64
65
66
67
68
69
70
71
72
73
# File 'opal/browser/dom/element/data.rb', line 62

def []=(name, value)
  `delete #@native.$data[name]`
  if [true, false, nil].include?(value)
    @element["data-#{name}"] = value
  elsif value.respond_to? :to_str
    @element["data-#{name}"] = value.to_str
  elsif value.respond_to? :to_int
    @element["data-#{name}"] = value.to_int.to_s
  else
    `#@native.$data[name] = value`
  end
end

#assign(data) ⇒ Object


37
38
39
40
41
42
43
# File 'opal/browser/dom/element/data.rb', line 37

def assign(data)
  data.each {|name, value|
    self[name] = value
  }

  self
end

#delete(name) ⇒ Object


75
76
77
78
79
# File 'opal/browser/dom/element/data.rb', line 75

def delete(name)
  data = self[name]
  self[name] = nil
  data
end

#each(&block) ⇒ Object


17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# File 'opal/browser/dom/element/data.rb', line 17

def each(&block)
  return enum_for :each unless block

  %x{
    var data = #@native.$data;

    for (var key in data) {
      #{block.call `key`, `data[key]`};
    }
  }

  @element.attributes.each {|name, value|
    if name =~ /^data-(.*)$/
      block.call $1, value
    end
  }

  self
end