Sha256: 59c636b00c2a27f04a8ab0f8406e6166ca6556efb2145a588a42ccca858bb3be

Contents?: true

Size: 1 KB

Versions: 2

Compression:

Stored size: 1 KB

Contents

module Browser; module DOM; class Element < Node

class Data
  attr_reader :element

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

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

  include Enumerable

  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

  def assign(data)
    data.each {|name, value|
      `#@native.$data[name] = value`
    }

    self
  end

  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

  def []=(name, value)
    `#@native.$data[name] = value`
  end
end

end; end; end

Version data entries

2 entries across 2 versions & 2 rubygems

Version Path
diamonds-0.1.5 lib/diamonds/opal/browser/dom/element/data.rb
opal-browser-0.2.0 opal/browser/dom/element/data.rb