vigilem-dom 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/lib/vigilem/dom.rb +27 -0
- data/lib/vigilem/dom/keyboard_event.rb +187 -0
- data/lib/vigilem/dom/utils.rb +49 -0
- data/lib/vigilem/dom/version.rb +5 -0
- data/lib/w3c/dom.rb +16 -0
- data/lib/w3c/dom3/code_values.rb +33 -0
- data/lib/w3c/dom3/key_values.rb +56 -0
- data/lib/w3c/dom3/keyboard_event.rb +90 -0
- data/lib/w3c/dom3/ui_event.rb +31 -0
- data/lib/w3c/dom4/event.rb +35 -0
- data/spec/spec_helper.rb +5 -0
- data/spec/vigilem/dom/keyboard_event_spec.rb +61 -0
- data/spec/vigilem/dom/utils_spec.rb +37 -0
- data/spec/w3c/dom3/keyboard_event_spec.rb +54 -0
- data/spec/w3c/dom3/ui_event_spec.rb +21 -0
- data/spec/w3c/dom4/event_spec.rb +31 -0
- metadata +177 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: b56d55d2f86728b678f5e5fbe144190c18a9427f
|
4
|
+
data.tar.gz: cff68b533d8098ec170300c5110b6ef892b42165
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 4fc80e126ffa25143ed2bf06453a1f67793b332f33a24dbf55c1880db722fe50b4ca90ab6c6862b98f135c6ef408805408777289d7cbbf7cb3adaf7d6e8c7dd1
|
7
|
+
data.tar.gz: 312cd3a18461414d87f97c9b2e78d17818cc5d2122deb4905951f89e632f8817fc9d50dd6e68d33e09e577e2507b9bc6660dc92756882bde86dc42ff962dc079
|
data/lib/vigilem/dom.rb
ADDED
@@ -0,0 +1,27 @@
|
|
1
|
+
require 'w3c/dom'
|
2
|
+
|
3
|
+
module Vigilem
|
4
|
+
module DOM
|
5
|
+
|
6
|
+
class << self
|
7
|
+
attr_writer :strict
|
8
|
+
# controls checking of various values
|
9
|
+
# @return [TrueClass||FalseClass]
|
10
|
+
def strict
|
11
|
+
@strict ||= true
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
KeyValues = ::W3C::DOM3::KeyValues
|
16
|
+
CodeValues = ::W3C::DOM3::CodeValues
|
17
|
+
|
18
|
+
Event = ::W3C::DOM4::Event
|
19
|
+
|
20
|
+
UIEvent = ::W3C::DOM3::UIEvent
|
21
|
+
|
22
|
+
require 'vigilem/dom/keyboard_event'
|
23
|
+
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
require 'vigilem/dom/utils'
|
@@ -0,0 +1,187 @@
|
|
1
|
+
require 'vigilem/support/core_ext'
|
2
|
+
|
3
|
+
require 'vigilem/dom'
|
4
|
+
|
5
|
+
module Vigilem
|
6
|
+
module DOM
|
7
|
+
#
|
8
|
+
# @see W3C::DOM3::KeyboardEvent
|
9
|
+
class KeyboardEvent < ::W3C::DOM3::KeyboardEvent
|
10
|
+
|
11
|
+
attr_reader :os_specific, :modifier_state #@todo, :chr
|
12
|
+
|
13
|
+
#
|
14
|
+
# @see #SharedKeyboardAndMouseEventInit
|
15
|
+
# @param [String || Symbol] type
|
16
|
+
# @param [Hash] options
|
17
|
+
# @option [String] :key
|
18
|
+
# @option [String] :code
|
19
|
+
# @option [Hash] :location
|
20
|
+
# @option :location [Integer] 0x00 DOM_KEY_LOCATION_STANDARD
|
21
|
+
# @option :location [Integer] 0x01 DOM_KEY_LOCATION_LEFT
|
22
|
+
# @option :location [Integer] 0x02 DOM_KEY_LOCATION_RIGHT
|
23
|
+
# @option :location [Integer] 0x03 DOM_KEY_LOCATION_NUMPAD
|
24
|
+
# @option [TrueClass || FalseClass] repeat
|
25
|
+
# @option[Hash] :modifiers || :modifier_state
|
26
|
+
# @option modifiers [TrueClass || FalseClass || NilClass] :alt, :altKey
|
27
|
+
# @option modifiers [TrueClass || FalseClass || NilClass] :alt_graph, :AltGraph
|
28
|
+
# @option modifiers [TrueClass || FalseClass || NilClass] :caps_lock, :CapsLock
|
29
|
+
# @option modifiers [TrueClass || FalseClass || NilClass] :control, :ctrl, :ctrlKey
|
30
|
+
# @option modifiers [TrueClass || FalseClass || NilClass] :meta, :metaKey
|
31
|
+
# @option modifiers [TrueClass || FalseClass || NilClass] :num_lock, :NumLock
|
32
|
+
# @option modifiers [TrueClass || FalseClass || NilClass] :scroll, :scroll_lock
|
33
|
+
# @option modifiers [TrueClass || FalseClass || NilClass] :shift, :shiftKey
|
34
|
+
# @option modifiers [TrueClass || FalseClass || NilClass] :symbol, :symbol_lock
|
35
|
+
# @param [Hash] os_specific
|
36
|
+
def initialize(type, options={})
|
37
|
+
raise TypeError, "invalid type `#{type}'" if strict = Vigilem::DOM.strict and not self.class.types.include?(type)
|
38
|
+
@type = type
|
39
|
+
@key = options[:key] ||= ''
|
40
|
+
if options[:location] and strict and (kl = KeyLocations).constants.none? {|const| kl.const_get(const) == options[:location] }
|
41
|
+
raise ArgumentError, "invalid location `#{options[:location]}'"
|
42
|
+
end
|
43
|
+
@location = options[:location] ||= 0
|
44
|
+
@repeat = options[:repeat] ||= false
|
45
|
+
@os_specific = self.class.hash_frozen_clone(options[:os_specific] || {})
|
46
|
+
|
47
|
+
@modifier_state = self.class.hash_frozen_clone(options[:modifiers] || options[:modifier_state] || {})
|
48
|
+
|
49
|
+
mod_dict = self.class.shared_keyboard_and_mouse_event_init(@modifier_state)
|
50
|
+
|
51
|
+
super(type, mod_dict.merge(options))
|
52
|
+
end
|
53
|
+
|
54
|
+
#---
|
55
|
+
|
56
|
+
@modifier_attrs = ::W3C::DOM3::KeyboardEvent.instance_variable_get(:@modifer_attrs)
|
57
|
+
|
58
|
+
@modifier_attrs.each do |method_name|
|
59
|
+
|
60
|
+
snake_case = method_name.to_s.snakecase.to_sym
|
61
|
+
|
62
|
+
mod_state_name = "keyModifierState#{method_name}".to_sym
|
63
|
+
define_method(snake_case) do
|
64
|
+
modifier_state[mod_state_name]
|
65
|
+
end
|
66
|
+
end
|
67
|
+
|
68
|
+
#---
|
69
|
+
|
70
|
+
@dom_3_attrs = ::W3C::DOM3::KeyboardEvent.instance_variable_get(:@dom_3_attrs) + ::W3C::DOM4::Event.instance_variable_get(:@attrs)
|
71
|
+
|
72
|
+
@dom_3_attrs.each do |method_name|
|
73
|
+
|
74
|
+
snake_case = method_name.to_s.snakecase.to_sym
|
75
|
+
|
76
|
+
snake_case = "#{snake_case}?" if snake_case[0..1] == 'is'
|
77
|
+
|
78
|
+
alias_method snake_case, method_name
|
79
|
+
end
|
80
|
+
|
81
|
+
#
|
82
|
+
# @param [#to_s] key_type
|
83
|
+
# @return [KeyboardEvent]
|
84
|
+
def copy_to(key_type)
|
85
|
+
copy = Support::Utils.deep_dup(self)
|
86
|
+
copy.instance_variable_set(:@type, key_type.to_s)
|
87
|
+
copy
|
88
|
+
end
|
89
|
+
|
90
|
+
# has @type @key @location, so the object can be distinguised from other KeyboardEvents
|
91
|
+
# @return [String]
|
92
|
+
def to_s
|
93
|
+
"#{super().chop} @type=#{@type.inspect} @key=#{@key.inspect} @location=#{location.inspect}>"
|
94
|
+
end
|
95
|
+
|
96
|
+
#
|
97
|
+
# @return [String]
|
98
|
+
def inspect
|
99
|
+
"<#{self.class}:0x#{self.object_id} #{instance_variables.map {|var| "#{var}=#{instance_variable_get(var).inspect}" }.sort_by {|name| name[1..2]}.join(' ')}>"
|
100
|
+
end
|
101
|
+
|
102
|
+
class << self
|
103
|
+
|
104
|
+
#
|
105
|
+
# @return [Array<String>]
|
106
|
+
def types
|
107
|
+
@types ||= %w(keyup keypress keydown)
|
108
|
+
end
|
109
|
+
|
110
|
+
# this is not a hash so that the values can be #joined as a regex
|
111
|
+
# the last value of each group is the DOM value without the prefix
|
112
|
+
# @return [Array<Array<Symbol>>]
|
113
|
+
def alternative_key_names
|
114
|
+
@alternative_key_names ||= [[:alt, :menu, :altKey], [:alt_graph, :AltGraph], [:caps_lock, :CapsLock], [:ctrl, :control, :ctrlKey],
|
115
|
+
[:Fn], [:fn_lock, :FnLock], [:Hyper], [:meta, :metaKey], [:num_lock, :NumLock], [:OS],
|
116
|
+
[:scroll_lock, :ScrollLock], [:shift, :shiftKey], [:Super], [:Symbol], [:symbol_lock, :SymbolLock]]
|
117
|
+
end
|
118
|
+
|
119
|
+
# converts a common key to shared_keyboard_and_mouse_event_init_key
|
120
|
+
# dom_3 are not prefixed by keyModifierState
|
121
|
+
# @param [#to_s] key_name
|
122
|
+
# @return [Symbol || NilClass]
|
123
|
+
def shared_keyboard_and_mouse_event_init_key(key_name)
|
124
|
+
key_group = alternative_key_names.find {|key_grp| /^(#{key_grp.join('|')})$/i =~ key_name.to_s }
|
125
|
+
if key_group
|
126
|
+
if @dom_3_attrs.include?(correct_key = key_group.last)
|
127
|
+
correct_key
|
128
|
+
else
|
129
|
+
"keyModifierState#{correct_key}".to_sym
|
130
|
+
end
|
131
|
+
end
|
132
|
+
end
|
133
|
+
|
134
|
+
# gets the keys for SharedKeyboardAndMouseEventInit
|
135
|
+
#
|
136
|
+
# @return [Array<Symbol>]
|
137
|
+
def shared_keyboard_and_mouse_event_init_keys
|
138
|
+
shared_keyboard_and_mouse_event_init_keys ||= alternative_key_names.map do |key_grp|
|
139
|
+
if @dom_3_attrs.include?(correct_key = key_grp.last)
|
140
|
+
correct_key
|
141
|
+
else
|
142
|
+
"keyModifierState#{correct_key}".to_sym
|
143
|
+
end
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
# converts common names to SharedKeyboardAndMouseEventInit
|
148
|
+
# @param [Hash || Array] hsh_or_ary
|
149
|
+
# @return [Hash]
|
150
|
+
def SharedKeyboardAndMouseEventInit(hsh_or_ary)
|
151
|
+
|
152
|
+
hsh = if hsh_or_ary.is_a?(Hash)
|
153
|
+
hsh_or_ary
|
154
|
+
else
|
155
|
+
Hash[hsh_or_ary.zip([true] * hsh_or_ary.size)]
|
156
|
+
end
|
157
|
+
|
158
|
+
alternative_key_names.each_with_object({}) do |key_grp, out_hash|
|
159
|
+
skamei_name = shared_keyboard_and_mouse_event_init_key(key_grp.last)
|
160
|
+
matched_usr_key = hsh.keys.find {|usr_key| usr_key =~ /^(#{key_grp.join('|')})$/i }
|
161
|
+
out_hash[skamei_name] = !!hsh[matched_usr_key]
|
162
|
+
end
|
163
|
+
end
|
164
|
+
|
165
|
+
alias_method :shared_keyboard_and_mouse_event_init, :SharedKeyboardAndMouseEventInit
|
166
|
+
end
|
167
|
+
|
168
|
+
#
|
169
|
+
#
|
170
|
+
# @return [Hash]
|
171
|
+
def modifier_state
|
172
|
+
@modifier_state ||= Hash[DOM::KeyValues::ModifierKeys.zip([false])].tap {|hsh| hsh.default = false }.freeze
|
173
|
+
end
|
174
|
+
|
175
|
+
private
|
176
|
+
|
177
|
+
#
|
178
|
+
# @param [Hash] hsh_obj
|
179
|
+
# @return [Hash] cloned obj
|
180
|
+
def self.hash_frozen_clone(hsh_obj)
|
181
|
+
hsh_obj.map.with_object({}) do |(key, value), hsh|
|
182
|
+
hsh[key] = value.clone rescue value
|
183
|
+
end.freeze
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'vigilem/dom/keyboard_event'
|
2
|
+
|
3
|
+
module Vigilem
|
4
|
+
module DOM
|
5
|
+
# @author jtzero
|
6
|
+
#
|
7
|
+
# useful dom mapping methods
|
8
|
+
module Utils
|
9
|
+
|
10
|
+
#
|
11
|
+
# @return [Hash<String, Integer>]
|
12
|
+
def name_codes
|
13
|
+
@name_codes ||= Hash.new(KeyboardEvent::DOM_KEY_LOCATION_STANDARD).merge({
|
14
|
+
'L' => KeyboardEvent::DOM_KEY_LOCATION_LEFT,
|
15
|
+
'R' => KeyboardEvent::DOM_KEY_LOCATION_RIGHT,
|
16
|
+
'NUMPAD' => KeyboardEvent::DOM_KEY_LOCATION_NUMPAD,
|
17
|
+
'KP' => KeyboardEvent::DOM_KEY_LOCATION_NUMPAD
|
18
|
+
})
|
19
|
+
end
|
20
|
+
|
21
|
+
#
|
22
|
+
# @return [Hash<Integer, Regexp>
|
23
|
+
def codes_regex
|
24
|
+
@codes_regex ||= { KeyboardEvent::DOM_KEY_LOCATION_LEFT => /left/i,
|
25
|
+
KeyboardEvent::DOM_KEY_LOCATION_RIGHT => /right/i,
|
26
|
+
KeyboardEvent::DOM_KEY_LOCATION_NUMPAD => /numpad/i,
|
27
|
+
}
|
28
|
+
end
|
29
|
+
|
30
|
+
# @todo rename dom_location_to_common_str
|
31
|
+
# @param [Integer] dom_location_code
|
32
|
+
# @return [String]
|
33
|
+
def to_dom_location_common_str(dom_location_code)
|
34
|
+
(@code_names ||= name_codes.invert.tap {|obj| obj.default = '' })[dom_location_code]
|
35
|
+
end
|
36
|
+
|
37
|
+
#
|
38
|
+
# @param [String<'L', 'R', 'NUMPAD', 'KP', Object>] location
|
39
|
+
# @return [Integer]
|
40
|
+
def common_str_to_dom_location(location)
|
41
|
+
name_codes[location]
|
42
|
+
end
|
43
|
+
|
44
|
+
extend self
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
VDOM = ::Vigilem::DOM
|
data/lib/w3c/dom.rb
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
# http://www.w3.org/TR/DOM-Level-3-Events/
|
2
|
+
module W3C
|
3
|
+
module DOM3
|
4
|
+
end
|
5
|
+
module DOM4
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
require 'w3c/dom4/event'
|
10
|
+
|
11
|
+
require 'w3c/dom3/ui_event'
|
12
|
+
|
13
|
+
require 'w3c/dom3/key_values'
|
14
|
+
require 'w3c/dom3/code_values'
|
15
|
+
|
16
|
+
require 'w3c/dom3/keyboard_event'
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module W3C
|
2
|
+
module DOM3
|
3
|
+
# http://www.w3.org/TR/2014/WD-DOM-Level-3-Events-code-20140612/
|
4
|
+
module CodeValues
|
5
|
+
WritingSystemKeys = ['Backquote', 'Backslash', 'Backspace', 'BracketLeft', 'BracketRight', 'Comma', 'Digit0', 'Digit1', 'Digit2',
|
6
|
+
'Digit3', 'Digit4', 'Digit5', 'Digit6', 'Digit7', 'Digit8', 'Digit9', 'Equal', 'IntlBackslash', 'IntlHash', 'IntlRo',
|
7
|
+
'IntlYen', 'KeyA', 'KeyB', 'KeyC', 'KeyD', 'KeyE', 'KeyF', 'KeyG', 'KeyH', 'KeyI', 'KeyJ', 'KeyK', 'KeyL', 'KeyM', 'KeyN',
|
8
|
+
'KeyO', 'KeyP', 'KeyQ', 'KeyR', 'KeyS', 'KeyT', 'KeyU', 'KeyV', 'KeyW', 'KeyX', 'KeyY', 'KeyZ', 'Minus', 'Period', 'Quote',
|
9
|
+
'Semicolon', 'Slash']
|
10
|
+
|
11
|
+
FunctionalKeys = ['AltLeft', 'AltRight', 'CapsLock', 'ContextMenu', 'ControlLeft', 'ControlRight', 'Enter', 'OSLeft', 'OSRight',
|
12
|
+
'ShiftLeft', 'ShiftRight', 'Space', 'Tab', 'Convert', 'KanaMode', 'Lang1', 'Lang2', 'Lang3', 'Lang4', 'Lang5', 'NonConvert']
|
13
|
+
|
14
|
+
ControlPadSection = ['Delete', 'End', 'Help', 'Home', 'Insert', 'PageDown', 'PageUp']
|
15
|
+
|
16
|
+
ArrowPadSection = ['ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowUp']
|
17
|
+
|
18
|
+
NumpadSection = ['NumLock', 'Numpad0', 'Numpad1', 'Numpad2', 'Numpad3', 'Numpad4', 'Numpad5', 'Numpad6', 'Numpad7', 'Numpad8', 'Numpad9',
|
19
|
+
'NumpadAdd', 'NumpadBackspace', 'NumpadClear', 'NumpadClearEntry', 'NumpadComma', 'NumpadDecimal', 'NumpadDivide', 'NumpadEnter',
|
20
|
+
'NumpadEqual', 'NumpadMemoryAdd', 'NumpadMemoryClear', 'NumpadMemoryRecall', 'NumpadMemoryStore', 'NumpadMemorySubtract', 'NumpadMultiply',
|
21
|
+
'NumpadParenLeft', 'NumpadParenRight', 'NumpadSubtract']
|
22
|
+
|
23
|
+
FunctionSection = ['Escape', 'F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'F10', 'F11', 'F12', 'Fn', 'FLock', 'PrintScreen', 'ScrollLock', 'Pause']
|
24
|
+
|
25
|
+
MediaKeys = ['BrowserBack', 'BrowserFavorites', 'BrowserForward', 'BrowserHome', 'BrowserRefresh', 'BrowserSearch', 'BrowserStop', 'Eject',
|
26
|
+
'LaunchApp1', 'LaunchApp2', 'LaunchMail', 'MediaPlayPause', 'MediaSelect', 'MediaStop', 'MediaTrackNext', 'MediaTrackPrevious', 'Power',
|
27
|
+
'Sleep', 'VolumeDown', 'VolumeMute', 'VolumeUp', 'WakeUp']
|
28
|
+
|
29
|
+
LegacyKeysandNon_StandardKeys = ['Hyper', 'Super', 'Turbo', 'Abort', 'Resume', 'Suspend', 'Again', 'Copy', 'Cut', 'Find', 'Open', 'Paste', 'Props', 'Select',
|
30
|
+
'Undo', 'Hiragana', 'Katakana']
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module W3C
|
2
|
+
module DOM3
|
3
|
+
# @author jtzero
|
4
|
+
# http://www.w3.org/TR/2014/WD-DOM-Level-3-Events-key-20140612/
|
5
|
+
module KeyValues
|
6
|
+
SpecialKeyValues = 'Unidentified'
|
7
|
+
|
8
|
+
ModifierKeys = ['Accel', 'Alt', 'AltGraph', 'CapsLock', 'Control', 'Fn', 'FnLock', 'Hyper', 'Meta',
|
9
|
+
'NumLock', 'OS', 'ScrollLock', 'Shift', 'Super', 'Symbol', 'SymbolLock']
|
10
|
+
|
11
|
+
WhitespaceKeys = ['Enter', 'Separator', 'Tab']
|
12
|
+
|
13
|
+
NavigationKeys = ['ArrowDown', 'ArrowLeft', 'ArrowRight', 'ArrowUp', 'End', 'Home', 'PageDown', 'PageUp']
|
14
|
+
|
15
|
+
EditingKeys = ['Backspace', 'Clear', 'Copy', 'CrSel', 'Cut', 'Delete', 'EraseEof', 'ExSel', 'Insert', 'Paste', 'Redo', 'Undo' ]
|
16
|
+
|
17
|
+
UIKeys = ['Accept', 'Again', 'Attn', 'Cancel', 'ContextMenu', 'Escape', 'Execute', 'Find', 'Help', 'Pause',
|
18
|
+
'Play', 'Props', 'Select', 'ZoomIn', 'ZoomOut']
|
19
|
+
|
20
|
+
DeviceKeys = ['BrightnessDown', 'BrightnessUp', 'Camera', 'Eject', 'LogOff', 'Power', 'PowerOff', 'PrintScreen', 'Hibernate', 'Standby', 'WakeUp']
|
21
|
+
|
22
|
+
IMEandCompositionKeys = ['AllCandidates', 'Alphanumeric', 'CodeInput', 'Compose', 'Convert', 'Dead', 'FinalMode', 'GroupFirst', 'GroupLast',
|
23
|
+
'GroupNext', 'GroupPrevious', 'ModeChange', 'NextCandidate', 'NonConvert', 'PreviousCandidate',
|
24
|
+
'Process', 'SingleCandidate', 'HangulMode', 'HanjaMode', 'JunjaMode']
|
25
|
+
|
26
|
+
KeysspecifictoKoreankeyboards = ['Eisu', 'Hankaku', 'Hiragana', 'HiraganaKatakana', 'KanaMode', 'KanjiMode', 'Katakana', 'Romaji',
|
27
|
+
'Zenkaku', 'ZenkakuHankaku']
|
28
|
+
KeysspecifictoJapanesekeyboards = ['Eisu', 'Hankaku', 'Hiragana', 'HiraganaKatakana', 'KanaMode', 'KanjiMode', 'Katakana', 'Romaji',
|
29
|
+
'Zenkaku', 'ZenkakuHankaku']
|
30
|
+
|
31
|
+
General_PurposeFunctionKeys = ['F1', 'F2', 'F3', 'F4', 'F5', 'F6', 'F7', 'F8', 'F9', 'F10', 'F11', 'F12', 'Soft1', 'Soft2', 'Soft3', 'Soft4']
|
32
|
+
|
33
|
+
MultimediaKeys = ['Close', 'MailForward', 'MailReply', 'MailSend', 'MediaPlayPause', 'MediaSelect', 'MediaStop', 'MediaTrackNext',
|
34
|
+
'MediaTrackPrevious', 'New', 'Open', 'Print', 'Save', 'SpellCheck', 'VolumeDown', 'VolumeUp', 'VolumeMute']
|
35
|
+
|
36
|
+
ApplicationKeys = ['Launch', 'LaunchCalculator', 'LaunchCalendar', 'LaunchMail', 'LaunchMediaPlayer', 'LaunchMusicPlayer',
|
37
|
+
'LaunchMyComputer', 'LaunchScreenSaver', 'LaunchSpreadsheet', 'LaunchWebBrowser', 'LaunchWebCam', 'LaunchWordProcessor']
|
38
|
+
|
39
|
+
BrowserKeys = ['BrowserBack', 'BrowserFavorites', 'BrowserForward', 'BrowserHome', 'BrowserRefresh', 'BrowserSearch', 'BrowserStop']
|
40
|
+
|
41
|
+
MediaControllerKeys = ['AudioBalanceLeft', 'AudioBalanceRight', 'AudioBassBoostDown', 'AudioBassBoostUp', 'AudioFaderFront', 'AudioFaderRear',
|
42
|
+
'AudioSurroundModeNext', 'AVRInput', 'AVRPower', 'ChannelDown', 'ChannelUp', 'ColorF0Red', 'ColorF1Green',
|
43
|
+
'ColorF2Yellow', 'ColorF3Blue', 'ColorF4Grey', 'ColorF5Brown', 'ClosedCaptionToggle', 'Dimmer', 'DisplaySwap', 'Exit',
|
44
|
+
'FavoriteClear0', 'FavoriteClear1', 'FavoriteClear2', 'FavoriteClear3', 'FavoriteRecall0', 'FavoriteRecall1',
|
45
|
+
'FavoriteRecall2', 'FavoriteRecall3', 'FavoriteStore0', 'FavoriteStore1', 'FavoriteStore2', 'FavoriteStore3', 'Guide',
|
46
|
+
'GuideNextDay', 'GuidePreviousDay', 'Info', 'InstantReplay', 'Link', 'ListProgram', 'LiveContent', 'Lock', 'MediaApps',
|
47
|
+
'ContextMenu', 'MediaFastForward', 'MediaLast', 'MediaPause', 'MediaPlay', 'MediaRecord', 'MediaRewind', 'MediaSkip',
|
48
|
+
'NextFavoriteChannel', 'NextUserProfile', 'OnDemand', 'PinPDown', 'PinPMove', 'PinPToggle', 'PinPUp', 'PlaySpeedDown',
|
49
|
+
'PlaySpeedReset', 'PlaySpeedUp', 'RandomToggle', 'RcLowBattery', 'RecordSpeedNext', 'RfBypass', 'ScanChannelsToggle',
|
50
|
+
'ScreenModeNext', 'Settings', 'SplitScreenToggle', 'STBInput', 'STBPower', 'Subtitle', 'Teletext', 'TV', 'TVInput',
|
51
|
+
'TVPower', 'VideoModeNext', 'Wink', 'ZoomToggle','BrowserBack', 'BrowserForward', 'ContextMenu', 'Eject', 'End', 'Enter',
|
52
|
+
'Home', 'MediaPlayPause', 'MediaStop', 'MediaNextTrack', 'MediaPreviousTrack', 'Power', 'Unidentified', 'VolumeDown',
|
53
|
+
'VolumeUp', 'VolumeMute']
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
require 'vigilem/support/core_ext'
|
2
|
+
|
3
|
+
module W3C
|
4
|
+
module DOM3
|
5
|
+
#
|
6
|
+
# http://www.w3.org/TR/2014/WD-DOM-Level-3-Events-code-20140612/
|
7
|
+
# http://www.w3.org/TR/2014/WD-DOM-Level-3-Events-key-20140612/
|
8
|
+
#
|
9
|
+
# http://www.w3.org/TR/2014/WD-DOM-Level-3-Events-20140925/#idl-def-KeyboardEvent
|
10
|
+
#
|
11
|
+
# https://developer.mozilla.org/en-US/docs/Web/API/KeyboardEvent.code
|
12
|
+
class KeyboardEvent < UIEvent
|
13
|
+
|
14
|
+
module KeyLocations
|
15
|
+
DOM_KEY_LOCATION_STANDARD = 0x00
|
16
|
+
DOM_KEY_LOCATION_LEFT = 0x01
|
17
|
+
DOM_KEY_LOCATION_RIGHT = 0x02
|
18
|
+
DOM_KEY_LOCATION_NUMPAD = 0x03
|
19
|
+
end
|
20
|
+
|
21
|
+
include KeyLocations
|
22
|
+
|
23
|
+
#
|
24
|
+
# @param [String] typeArg
|
25
|
+
# @param [Hash] keyboardEventInitDict
|
26
|
+
# @option keyboardEventInitDict
|
27
|
+
def initialize(typeArg, keyboardEventInitDict={})
|
28
|
+
@key = keyboardEventInitDict[:key] || ''
|
29
|
+
|
30
|
+
if (not @key.empty?) and keyboardEventInitDict[:code].to_s.empty?
|
31
|
+
raise ArgumentError, "keyboardEventInitDict[:key] has a value while keyboardEventInitDict[:code] is nil"
|
32
|
+
end
|
33
|
+
|
34
|
+
@code = keyboardEventInitDict[:code] || ''
|
35
|
+
|
36
|
+
@location = keyboardEventInitDict[:location] || 0
|
37
|
+
@repeat = keyboardEventInitDict[:repeat] || false
|
38
|
+
@isComposing = keyboardEventInitDict[:isComposing] || false
|
39
|
+
|
40
|
+
@modifier_state = Hash[DOM3::KeyValues::ModifierKeys.zip([false,
|
41
|
+
!!keyboardEventInitDict[:altKey],
|
42
|
+
!!keyboardEventInitDict[:keyModifierStateAltGraph],
|
43
|
+
!!keyboardEventInitDict[:keyModifierStateCapsLock],
|
44
|
+
!!keyboardEventInitDict[:ctrlKey],
|
45
|
+
!!keyboardEventInitDict[:keyModifierStateFn],
|
46
|
+
!!keyboardEventInitDict[:keyModifierStateFnLock],
|
47
|
+
!!keyboardEventInitDict[:keyModifierStateHyper],
|
48
|
+
!!keyboardEventInitDict[:metaKey],
|
49
|
+
!!keyboardEventInitDict[:keyModifierStateNumLock],
|
50
|
+
!!keyboardEventInitDict[:keyModifierStateOS],
|
51
|
+
!!keyboardEventInitDict[:keyModifierStateScrollLock],
|
52
|
+
!!keyboardEventInitDict[:shiftKey],
|
53
|
+
!!keyboardEventInitDict[:keyModifierStateSuper],
|
54
|
+
!!keyboardEventInitDict[:keyModifierStateSymbol],
|
55
|
+
!!keyboardEventInitDict[:keyModifierStateSymbolLock]])]
|
56
|
+
@modifier_state.default = false
|
57
|
+
super(typeArg, keyboardEventInitDict)
|
58
|
+
end
|
59
|
+
|
60
|
+
private
|
61
|
+
|
62
|
+
# attrs and modifier_state
|
63
|
+
@modifer_attrs = [:ctrlKey, :shiftKey, :altKey, :metaKey]
|
64
|
+
|
65
|
+
@dom_3_attrs = [:key, :code, :location, :repeat, :isComposing] + @modifer_attrs
|
66
|
+
# Legacy, introduced in DOM Level 3:
|
67
|
+
@attrs = @dom_3_attrs + [:charCode, :keyCode, :which]
|
68
|
+
|
69
|
+
public
|
70
|
+
attr_reader *@attrs
|
71
|
+
|
72
|
+
# defines methods for the modifiers that are also
|
73
|
+
# attr's
|
74
|
+
@modifer_attrs.each do |attr|
|
75
|
+
define_method(attr) do
|
76
|
+
instance_variable_get(:@modifier_state)[attr.to_s.gsub(/key/i, '').titlecase]
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
# Queries the state of a modifier using a key value.
|
81
|
+
#
|
82
|
+
# @param [String] keyArg A modifier key value
|
83
|
+
# @return [TrueClass || FalseClass]
|
84
|
+
def getModifierState(keyArg)
|
85
|
+
!!@modifier_state[keyArg]
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'w3c/dom4/event'
|
2
|
+
|
3
|
+
#
|
4
|
+
# http://www.w3.org/TR/DOM-Level-3-Events/#idl-def-UIEvent
|
5
|
+
#
|
6
|
+
module W3C
|
7
|
+
module DOM3
|
8
|
+
class UIEvent < DOM4::Event
|
9
|
+
|
10
|
+
#
|
11
|
+
# @param [String] type
|
12
|
+
# @param [Hash] eventInitDict
|
13
|
+
# @option :view unused
|
14
|
+
# @option :detail unused
|
15
|
+
# @return self
|
16
|
+
def initialize(type, eventInitDict={})
|
17
|
+
@view = eventInitDict[:view] || nil
|
18
|
+
@detail = eventInitDict[:detail] || 0
|
19
|
+
super(type, eventInitDict)
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
@attrs = [:view, :detail]
|
24
|
+
attr_writer *@attrs
|
25
|
+
|
26
|
+
public
|
27
|
+
|
28
|
+
attr_reader *@attrs
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module W3C
|
2
|
+
module DOM4
|
3
|
+
#
|
4
|
+
# http://www.w3.org/TR/2014/WD-dom-20140710/#interface-event
|
5
|
+
class Event
|
6
|
+
NONE = 0;
|
7
|
+
CAPTURING_PHASE = 1;
|
8
|
+
AT_TARGET = 2;
|
9
|
+
BUBBLING_PHASE = 3;
|
10
|
+
|
11
|
+
#
|
12
|
+
# @param [String] type
|
13
|
+
# @param [Hash] eventInitDict
|
14
|
+
def initialize(type, eventInitDict={})
|
15
|
+
@type = type
|
16
|
+
@bubbles = eventInitDict[:bubbles] || false
|
17
|
+
@cancelable = eventInitDict[:cancelable] || false
|
18
|
+
@timeStamp = Time.now.to_i
|
19
|
+
@isTrusted = true
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
# Unforgeable
|
24
|
+
@attrs = [:type, :target, :currentTarget, :eventPhase, :bubbles, :cancelable, :defaultPrevented, :isTrusted, :timeStamp]
|
25
|
+
|
26
|
+
public
|
27
|
+
attr_reader *@attrs
|
28
|
+
|
29
|
+
def stopPropagation() end
|
30
|
+
def stopImmediatePropagation() end
|
31
|
+
def preventDefault() end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
require 'vigilem/dom'
|
4
|
+
|
5
|
+
describe Vigilem::DOM::KeyboardEvent do
|
6
|
+
|
7
|
+
subject { described_class.new('keyup', key: 'a', code: 'KeyA', location: 0, repeat: false) }
|
8
|
+
|
9
|
+
describe '::new/initialization' do
|
10
|
+
|
11
|
+
it 'sets the default modifier_state' do
|
12
|
+
|
13
|
+
expect(subject.send(:modifier_state)).to eql({ "Accel"=>false,
|
14
|
+
"Alt"=>false, "AltGraph"=>false, "CapsLock"=>false,
|
15
|
+
"Control"=>false, "Fn"=>false, "FnLock"=>false,
|
16
|
+
"Hyper"=>false, "Meta"=>false, "NumLock"=>false,
|
17
|
+
"OS"=>false, "ScrollLock"=>false, "Shift"=>false,
|
18
|
+
"Super"=>false, "Symbol"=>false, "SymbolLock"=>false})
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'sets up the key by the argument' do
|
22
|
+
expect(subject.key).to eql('a')
|
23
|
+
end
|
24
|
+
|
25
|
+
it 'sets up the code' do
|
26
|
+
expect(subject.code).to eql('KeyA')
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'sets up location by the argument' do
|
30
|
+
expect(subject.location).to eql(0)
|
31
|
+
end
|
32
|
+
|
33
|
+
it 'sets up ctrlKey by defaults' do
|
34
|
+
expect(subject.ctrlKey).to eql(false)
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'sets up shiftKey by defaults' do
|
38
|
+
expect(subject.shiftKey).to eql(false)
|
39
|
+
end
|
40
|
+
|
41
|
+
it 'sets up altKey by defaults' do
|
42
|
+
expect(subject.altKey).to eql(false)
|
43
|
+
end
|
44
|
+
|
45
|
+
it 'sets up metaKey by defaults' do
|
46
|
+
expect(subject.metaKey).to eql(false)
|
47
|
+
end
|
48
|
+
|
49
|
+
it 'sets up repeat by args' do
|
50
|
+
expect(subject.repeat).to eql(false)
|
51
|
+
end
|
52
|
+
|
53
|
+
end
|
54
|
+
|
55
|
+
describe '#copy_to' do
|
56
|
+
it 'copies the existing keyboard event and converts it the type passed in' do
|
57
|
+
expect(subject.copy_to('keydown').key).to eql('a')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'vigilem/dom/utils'
|
2
|
+
|
3
|
+
describe Vigilem::DOM::Utils do
|
4
|
+
describe '::name_codes' do
|
5
|
+
it 'is a map of common strings to DOM values' do
|
6
|
+
expect(described_class::name_codes.keys.map(&:class).uniq).to contain_exactly(String)
|
7
|
+
expect(described_class::name_codes.values.map(&:class).uniq).to contain_exactly(Fixnum)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
describe '::codes_regex' do
|
12
|
+
it 'it is a map of common patterns to DOM values' do
|
13
|
+
expect(described_class::codes_regex.keys.map(&:class).uniq).to contain_exactly(Fixnum)
|
14
|
+
expect(described_class::codes_regex.values.map(&:class).uniq).to contain_exactly(Regexp)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe '::common_str_to_dom_location' do
|
19
|
+
it 'converts some common strings to DOM Location Codes' do
|
20
|
+
expect(described_class::common_str_to_dom_location('L')).to eql(1)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '::to_dom_location_common_str' do
|
25
|
+
it 'converts some common strings to DOM Location Codes' do
|
26
|
+
expect(described_class::to_dom_location_common_str(1)).to eql('L')
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'defaults to empty String' do
|
30
|
+
expect(described_class::to_dom_location_common_str(nil)).to eql('')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
it 'creates a shortcut constant' do
|
35
|
+
expect(Object.const_get(:VDOM)).to eql(Vigilem.const_get(:DOM))
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
require 'w3c/dom4/event'
|
4
|
+
|
5
|
+
require 'w3c/dom3/ui_event'
|
6
|
+
|
7
|
+
require 'w3c/dom3/keyboard_event'
|
8
|
+
|
9
|
+
describe W3C::DOM3::KeyboardEvent do
|
10
|
+
|
11
|
+
|
12
|
+
describe described_class::KeyLocations do
|
13
|
+
it 'will match the w3c specs' do
|
14
|
+
expect(described_class::DOM_KEY_LOCATION_STANDARD).to eql(0x00)
|
15
|
+
expect(described_class::DOM_KEY_LOCATION_LEFT).to eql(0x01)
|
16
|
+
expect(described_class::DOM_KEY_LOCATION_RIGHT).to eql(0x02)
|
17
|
+
expect(described_class::DOM_KEY_LOCATION_NUMPAD).to eql(0x03)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
describe 'read only attributes' do
|
22
|
+
it %q(aren't allowed to be updated) do
|
23
|
+
event = described_class.new('str')
|
24
|
+
expect(
|
25
|
+
described_class.instance_variable_get(:@attrs).map do |attr|
|
26
|
+
begin
|
27
|
+
event.public_send(:"#{attr}=", 'anything')
|
28
|
+
rescue StandardError => e
|
29
|
+
e
|
30
|
+
end
|
31
|
+
end
|
32
|
+
).to all(be_a NoMethodError)
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
|
37
|
+
describe '#getModifierState' do
|
38
|
+
event = described_class.new('str', keyModifierStateNumLock: true)
|
39
|
+
|
40
|
+
it 'returns the status of passed in key name, at the time the event was fired' do
|
41
|
+
expect(event.getModifierState('NumLock')).to be_truthy
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
describe '::new/initialize' do
|
47
|
+
it 'errors if key have a value and code is empty' do
|
48
|
+
expect do
|
49
|
+
described_class.new('keyup', key: 'a', location: 0, repeat: false)
|
50
|
+
end.to raise_error(ArgumentError)
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'w3c/dom3/ui_event'
|
2
|
+
|
3
|
+
describe W3C::DOM3::UIEvent do
|
4
|
+
|
5
|
+
describe 'read only attributes' do
|
6
|
+
it %q(aren't allowed to be updated) do
|
7
|
+
host = described_class.new('str')
|
8
|
+
expect(
|
9
|
+
described_class.instance_variable_get(:@attrs).map do |attr|
|
10
|
+
begin
|
11
|
+
host.public_send(:"#{attr}=", 'anything')
|
12
|
+
rescue StandardError => e
|
13
|
+
e
|
14
|
+
end
|
15
|
+
end
|
16
|
+
).to all(be_a NoMethodError)
|
17
|
+
end
|
18
|
+
|
19
|
+
end
|
20
|
+
|
21
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
#http://www.w3.org/TR/DOM-Level-2-Events/idl/events.idl
|
2
|
+
require 'w3c/dom4/event'
|
3
|
+
|
4
|
+
describe W3C::DOM4::Event do
|
5
|
+
|
6
|
+
describe 'constants' do
|
7
|
+
it 'will equal the value given in the dom spec' do
|
8
|
+
expect(described_class::NONE).to eql(0)
|
9
|
+
expect(described_class::CAPTURING_PHASE).to eql(1)
|
10
|
+
expect(described_class::AT_TARGET).to eql(2)
|
11
|
+
expect(described_class::BUBBLING_PHASE).to eql(3)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'read only attributes' do
|
16
|
+
it %q(aren't allowed to be updated) do
|
17
|
+
host = described_class.new('str')
|
18
|
+
expect(
|
19
|
+
described_class.instance_variable_get(:@attrs).map do |attr|
|
20
|
+
begin
|
21
|
+
host.public_send(:"#{attr}=", 'anything')
|
22
|
+
rescue StandardError => e
|
23
|
+
e
|
24
|
+
end
|
25
|
+
end
|
26
|
+
).to all(be_a NoMethodError)
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
metadata
ADDED
@@ -0,0 +1,177 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: vigilem-dom
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- jtzero
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-03-04 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: vigilem-core
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: yard
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: bundler
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ~>
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '1.7'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ~>
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '1.7'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rake
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ~>
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '10.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ~>
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '10.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ~>
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '3.1'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ~>
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '3.1'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec-given
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - '>='
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - '>='
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: turnip
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - '>='
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - '>='
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: guard-rspec
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '>='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '>='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
description: DOM Structures for Vigilem
|
126
|
+
email: jtzero511@gmail
|
127
|
+
executables: []
|
128
|
+
extensions: []
|
129
|
+
extra_rdoc_files: []
|
130
|
+
files:
|
131
|
+
- lib/vigilem/dom.rb
|
132
|
+
- lib/vigilem/dom/keyboard_event.rb
|
133
|
+
- lib/vigilem/dom/utils.rb
|
134
|
+
- lib/vigilem/dom/version.rb
|
135
|
+
- lib/w3c/dom.rb
|
136
|
+
- lib/w3c/dom3/code_values.rb
|
137
|
+
- lib/w3c/dom3/key_values.rb
|
138
|
+
- lib/w3c/dom3/keyboard_event.rb
|
139
|
+
- lib/w3c/dom3/ui_event.rb
|
140
|
+
- lib/w3c/dom4/event.rb
|
141
|
+
- spec/spec_helper.rb
|
142
|
+
- spec/vigilem/dom/keyboard_event_spec.rb
|
143
|
+
- spec/vigilem/dom/utils_spec.rb
|
144
|
+
- spec/w3c/dom3/keyboard_event_spec.rb
|
145
|
+
- spec/w3c/dom3/ui_event_spec.rb
|
146
|
+
- spec/w3c/dom4/event_spec.rb
|
147
|
+
homepage: http://rubygems.org/gems/vigilem-dom
|
148
|
+
licenses:
|
149
|
+
- MIT
|
150
|
+
metadata: {}
|
151
|
+
post_install_message:
|
152
|
+
rdoc_options: []
|
153
|
+
require_paths:
|
154
|
+
- lib
|
155
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - '>='
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
161
|
+
requirements:
|
162
|
+
- - '>='
|
163
|
+
- !ruby/object:Gem::Version
|
164
|
+
version: '0'
|
165
|
+
requirements: []
|
166
|
+
rubyforge_project:
|
167
|
+
rubygems_version: 2.4.6
|
168
|
+
signing_key:
|
169
|
+
specification_version: 4
|
170
|
+
summary: DOM Structures for Vigilem
|
171
|
+
test_files:
|
172
|
+
- spec/spec_helper.rb
|
173
|
+
- spec/vigilem/dom/keyboard_event_spec.rb
|
174
|
+
- spec/vigilem/dom/utils_spec.rb
|
175
|
+
- spec/w3c/dom3/keyboard_event_spec.rb
|
176
|
+
- spec/w3c/dom3/ui_event_spec.rb
|
177
|
+
- spec/w3c/dom4/event_spec.rb
|