Class: Dommy::DataTransfer

Inherits:
Object
  • Object
show all
Defined in:
lib/dommy/data_transfer.rb

Overview

‘DataTransfer` — the payload object on a DragEvent. Holds the files being dragged plus arbitrary string-keyed data per MIME format. Tests build one explicitly to simulate drag-and-drop:

dt = Dommy::DataTransfer.new(files: [file])
ev = Dommy::DragEvent.new("drop", "dataTransfer" => dt, "bubbles" => true)
target.dispatch_event(ev)

Spec: html.spec.whatwg.org/multipage/dnd.html#datatransfer

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(files: [], data: {}) ⇒ DataTransfer

Returns a new instance of DataTransfer.



16
17
18
19
20
21
# File 'lib/dommy/data_transfer.rb', line 16

def initialize(files: [], data: {})
  @files = files.is_a?(FileList) ? files : FileList.new(Array(files))
  @data = data.transform_keys { |k| normalize_format(k) }
  @drop_effect = "none"
  @effect_allowed = "uninitialized"
end

Instance Attribute Details

#drop_effectObject

Returns the value of attribute drop_effect.



46
47
48
# File 'lib/dommy/data_transfer.rb', line 46

def drop_effect
  @drop_effect
end

#effect_allowedObject

Returns the value of attribute effect_allowed.



46
47
48
# File 'lib/dommy/data_transfer.rb', line 46

def effect_allowed
  @effect_allowed
end

#filesObject (readonly)

Returns the value of attribute files.



14
15
16
# File 'lib/dommy/data_transfer.rb', line 14

def files
  @files
end

Instance Method Details

#__js_call__(method, args) ⇒ Object



72
73
74
75
76
77
78
79
80
81
# File 'lib/dommy/data_transfer.rb', line 72

def __js_call__(method, args)
  case method
  when "getData"
    get_data(args[0])
  when "setData"
    set_data(args[0], args[1])
  when "clearData"
    clear_data(args[0])
  end
end

#__js_get__(key) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/dommy/data_transfer.rb', line 48

def __js_get__(key)
  case key
  when "files"
    @files
  when "types"
    types
  when "dropEffect"
    @drop_effect
  when "effectAllowed"
    @effect_allowed
  end
end

#__js_set__(key, value) ⇒ Object



61
62
63
64
65
66
67
68
69
70
# File 'lib/dommy/data_transfer.rb', line 61

def __js_set__(key, value)
  case key
  when "dropEffect"
    @drop_effect = value.to_s
  when "effectAllowed"
    @effect_allowed = value.to_s
  end

  nil
end

#clear_data(format = nil) ⇒ Object



36
37
38
39
40
41
42
43
44
# File 'lib/dommy/data_transfer.rb', line 36

def clear_data(format = nil)
  if format
    @data.delete(normalize_format(format))
  else
    @data.clear
  end

  nil
end

#get_data(format) ⇒ Object



27
28
29
# File 'lib/dommy/data_transfer.rb', line 27

def get_data(format)
  @data[normalize_format(format)].to_s
end

#set_data(format, data) ⇒ Object



31
32
33
34
# File 'lib/dommy/data_transfer.rb', line 31

def set_data(format, data)
  @data[normalize_format(format)] = data.to_s
  nil
end

#typesObject



23
24
25
# File 'lib/dommy/data_transfer.rb', line 23

def types
  @data.keys
end