hyalite 0.2.0 → 0.2.1
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 +4 -4
- data/Gemfile.lock +7 -7
- data/Rakefile +1 -1
- data/lib/hyalite/component.rb +83 -8
- data/lib/hyalite/dom.rb +3 -0
- data/lib/hyalite/dom/event.rb +29 -1
- data/lib/hyalite/dom/event/data_transfer.rb +24 -0
- data/lib/hyalite/dom/event/drag_event.rb +31 -0
- data/lib/hyalite/dom/event/keyboard_event.rb +12 -1
- data/lib/hyalite/dom/event/mouse_event.rb +1 -0
- data/lib/hyalite/dom/event/mouse_event_interface.rb +84 -0
- data/lib/hyalite/main.rb +34 -1
- data/lib/hyalite/multi_children.rb +0 -1
- data/lib/hyalite/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d89b9e9e140202b8dadbe041cd0fd60eaf8a6df6
|
4
|
+
data.tar.gz: 4aa2d43c948f25716b9199184836b5aee1156293
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 45c0d50be1bf7a12aaf21c6c168ad66fb47a1e3053187dc030810a541e3821aa33715957c35ce431c56db906bf344f0d14cbb8377a730e40de4d08b54aaec23f
|
7
|
+
data.tar.gz: 509ba34af727a051ddede9b65c50f3fc1b2bc417029b98cd9f16adb63cf94984b1b300683f3be213bf6a1d54b0d674b3333ce2b497dbe8ef89a98ae6a38240a3
|
data/Gemfile.lock
CHANGED
@@ -7,22 +7,22 @@ PATH
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
concurrent-ruby (1.0.
|
10
|
+
concurrent-ruby (1.0.5)
|
11
11
|
hike (1.2.3)
|
12
|
-
opal (0.10.
|
12
|
+
opal (0.10.5)
|
13
13
|
hike (~> 1.2)
|
14
14
|
sourcemap (~> 0.1.0)
|
15
15
|
sprockets (~> 3.1)
|
16
16
|
tilt (>= 1.4)
|
17
|
-
opal-rspec (0.6.
|
18
|
-
opal (>= 0.10.0, < 0.
|
19
|
-
rack (2.0.
|
20
|
-
rake (
|
17
|
+
opal-rspec (0.6.1)
|
18
|
+
opal (>= 0.10.0, < 0.12)
|
19
|
+
rack (2.0.3)
|
20
|
+
rake (12.0.0)
|
21
21
|
sourcemap (0.1.1)
|
22
22
|
sprockets (3.7.1)
|
23
23
|
concurrent-ruby (~> 1.0)
|
24
24
|
rack (> 1, < 3)
|
25
|
-
tilt (2.0.
|
25
|
+
tilt (2.0.8)
|
26
26
|
|
27
27
|
PLATFORMS
|
28
28
|
ruby
|
data/Rakefile
CHANGED
@@ -6,7 +6,7 @@ Opal::Config.source_map_enabled = true
|
|
6
6
|
|
7
7
|
Opal::RSpec::RakeTask.new(:default) do |server, task|
|
8
8
|
task.files = [ENV['FILE']] if ENV['FILE']
|
9
|
-
server.append_path File.expand_path('../
|
9
|
+
server.append_path File.expand_path('../lib', __FILE__)
|
10
10
|
server.source_map = true
|
11
11
|
server.debug = true
|
12
12
|
end
|
data/lib/hyalite/component.rb
CHANGED
@@ -31,10 +31,49 @@ module Hyalite
|
|
31
31
|
end
|
32
32
|
|
33
33
|
define_singleton_method(:initial_state) { @initial_state || {} }
|
34
|
+
|
35
|
+
define_singleton_method(:before_mount) do |&block|
|
36
|
+
if block
|
37
|
+
@before_mount = block
|
38
|
+
else
|
39
|
+
@before_mount
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
define_singleton_method(:after_mount) do |&block|
|
44
|
+
if block
|
45
|
+
@after_mount = block
|
46
|
+
else
|
47
|
+
@after_mount
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
define_singleton_method(:before_update) do |&block|
|
52
|
+
if block
|
53
|
+
@before_update = block
|
54
|
+
else
|
55
|
+
@before_update
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
define_singleton_method(:after_update) do |&block|
|
60
|
+
if block
|
61
|
+
@after_update = block
|
62
|
+
else
|
63
|
+
@after_update
|
64
|
+
end
|
65
|
+
end
|
34
66
|
end
|
35
67
|
|
36
68
|
TAGS.each do |tag|
|
37
|
-
define_method(tag) do |props, *children|
|
69
|
+
define_method(tag) do |props, *children, &block|
|
70
|
+
if block
|
71
|
+
Hyalite.create_element_hook do |hook_setter|
|
72
|
+
renderer = ChildrenRenderer.new(self, hook_setter)
|
73
|
+
renderer.instance_eval(&block)
|
74
|
+
children << renderer.children
|
75
|
+
end
|
76
|
+
end
|
38
77
|
Hyalite.create_element(tag, props, *children)
|
39
78
|
end
|
40
79
|
end
|
@@ -42,8 +81,33 @@ module Hyalite
|
|
42
81
|
klass.extend ClassMethods
|
43
82
|
end
|
44
83
|
|
84
|
+
class ChildrenRenderer
|
85
|
+
attr_reader :children
|
86
|
+
|
87
|
+
def initialize(component, hook_setter)
|
88
|
+
@component = component
|
89
|
+
@children = []
|
90
|
+
hook_setter.hook do |el|
|
91
|
+
@children << el
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
def method_missing(method_name, *args, &block)
|
96
|
+
if @component.respond_to?(method_name, true)
|
97
|
+
@component.send(method_name, *args, &block)
|
98
|
+
else
|
99
|
+
super
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
def respond_to_missing?(method_name, include_private = false)
|
104
|
+
@component.respond_to?(method_name, include_private) || super
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
45
108
|
module ClassMethods
|
46
|
-
def el(props, *children)
|
109
|
+
def el(props, *children, &block)
|
110
|
+
children << ChildrenRenderer.new(self).instance_eval(&block) if block
|
47
111
|
Hyalite.create_element(self, props, *children)
|
48
112
|
end
|
49
113
|
end
|
@@ -64,22 +128,20 @@ module Hyalite
|
|
64
128
|
{}
|
65
129
|
end
|
66
130
|
|
67
|
-
def component_did_mount
|
68
|
-
end
|
69
|
-
|
70
131
|
def component_will_mount
|
132
|
+
self.instance_eval(&self.class.before_mount) if self.class.before_mount
|
71
133
|
end
|
72
134
|
|
73
135
|
def component_did_mount
|
74
|
-
|
75
|
-
|
76
|
-
def component_will_unmount
|
136
|
+
self.instance_eval(&self.class.after_mount) if self.class.after_mount
|
77
137
|
end
|
78
138
|
|
79
139
|
def component_will_update(props, state, context)
|
140
|
+
self.instance_eval(&self.class.before_update) if self.class.before_update
|
80
141
|
end
|
81
142
|
|
82
143
|
def component_did_update(props, state, context)
|
144
|
+
self.instance_eval(&self.class.after_update) if self.class.after_update
|
83
145
|
end
|
84
146
|
|
85
147
|
def should_component_update(props, state, context)
|
@@ -99,6 +161,19 @@ module Hyalite
|
|
99
161
|
@updator.enqueue_callback(self, &block)
|
100
162
|
end
|
101
163
|
end
|
164
|
+
alias :update_state :set_state
|
165
|
+
|
166
|
+
def method_missing(method_name, *args, &block)
|
167
|
+
if @props.has_key?(method_name)
|
168
|
+
@props[method_name]
|
169
|
+
else
|
170
|
+
super
|
171
|
+
end
|
172
|
+
end
|
173
|
+
|
174
|
+
def respond_to_missing?(method_name, include_private = false)
|
175
|
+
@props.has_key?(method_name) || super
|
176
|
+
end
|
102
177
|
|
103
178
|
def render
|
104
179
|
end
|
data/lib/hyalite/dom.rb
CHANGED
@@ -4,8 +4,11 @@ module Hyalite
|
|
4
4
|
end
|
5
5
|
|
6
6
|
require 'native'
|
7
|
+
require_relative 'dom/event/mouse_event_interface'
|
8
|
+
require_relative 'dom/event/data_transfer'
|
7
9
|
require_relative 'dom/event/keyboard_event'
|
8
10
|
require_relative 'dom/event/mouse_event'
|
11
|
+
require_relative 'dom/event/drag_event'
|
9
12
|
require_relative 'dom/event'
|
10
13
|
require_relative 'dom/node'
|
11
14
|
require_relative 'dom/collection'
|
data/lib/hyalite/dom/event.rb
CHANGED
@@ -2,8 +2,32 @@ module Hyalite
|
|
2
2
|
module DOM
|
3
3
|
module Event
|
4
4
|
EVENT_CLASSES = {
|
5
|
+
# MouseEvent
|
5
6
|
'click' => MouseEvent,
|
6
|
-
'
|
7
|
+
'dblclick' => MouseEvent,
|
8
|
+
'mousedown' => MouseEvent,
|
9
|
+
'mouseup' => MouseEvent,
|
10
|
+
'mousemove' => MouseEvent,
|
11
|
+
'mouseenter' => MouseEvent,
|
12
|
+
'mouseleave' => MouseEvent,
|
13
|
+
'mouseover' => MouseEvent,
|
14
|
+
'mouseout' => MouseEvent,
|
15
|
+
'contextmenu' => MouseEvent,
|
16
|
+
|
17
|
+
# DragEvent
|
18
|
+
'drag' => DragEvent,
|
19
|
+
'dragstart' => DragEvent,
|
20
|
+
'dragend' => DragEvent,
|
21
|
+
'dragenter' => DragEvent,
|
22
|
+
'dragexit' => DragEvent,
|
23
|
+
'dragleave' => DragEvent,
|
24
|
+
'dragover' => DragEvent,
|
25
|
+
'drop' => DragEvent,
|
26
|
+
|
27
|
+
# KeyboardEvent
|
28
|
+
'keydown' => KeyboardEvent,
|
29
|
+
'keyup' => KeyboardEvent,
|
30
|
+
'keypress' => KeyboardEvent,
|
7
31
|
}
|
8
32
|
|
9
33
|
def self.create(event)
|
@@ -17,6 +41,10 @@ module Hyalite
|
|
17
41
|
def target
|
18
42
|
Node.create(`self.native.target`)
|
19
43
|
end
|
44
|
+
|
45
|
+
def prevent_default
|
46
|
+
`self.native.preventDefault()`
|
47
|
+
end
|
20
48
|
end
|
21
49
|
end
|
22
50
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Hyalite
|
2
|
+
module DOM
|
3
|
+
module Event
|
4
|
+
class DataTransfer
|
5
|
+
include Native
|
6
|
+
|
7
|
+
alias_native :clear, :createData
|
8
|
+
alias_native :drag_image=, :setDragImage
|
9
|
+
|
10
|
+
native_reader :files
|
11
|
+
native_reader :items
|
12
|
+
native_reader :types
|
13
|
+
|
14
|
+
def []=(name, value)
|
15
|
+
`self.native.setData(name, value)`
|
16
|
+
end
|
17
|
+
|
18
|
+
def [](name)
|
19
|
+
`self.native.getData(name)`
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module Hyalite
|
2
|
+
module DOM
|
3
|
+
module Event
|
4
|
+
class DragEvent
|
5
|
+
include Native
|
6
|
+
include Event
|
7
|
+
include MouseEventInterface
|
8
|
+
|
9
|
+
def drop_effect
|
10
|
+
`self.native.dataTransfer.dropEffect`
|
11
|
+
end
|
12
|
+
|
13
|
+
def drop_effect=(effect)
|
14
|
+
`self.native.dataTransfer.dropEffect = effect`
|
15
|
+
end
|
16
|
+
|
17
|
+
def effect_allowed
|
18
|
+
`self.native.dataTransfer.effectAllowed`
|
19
|
+
end
|
20
|
+
|
21
|
+
def effect_allowed=(effect)
|
22
|
+
`self.native.dataTransfer.effectAllowed = effect`
|
23
|
+
end
|
24
|
+
|
25
|
+
def data
|
26
|
+
DataTransfer.new `self.native.dataTransfer`
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -6,7 +6,18 @@ module Hyalite
|
|
6
6
|
include Event
|
7
7
|
|
8
8
|
alias_native :code
|
9
|
-
alias_native :
|
9
|
+
alias_native :key
|
10
|
+
alias_native :shift_key, :shiftKey
|
11
|
+
alias_native :alt_key, :altKey
|
12
|
+
alias_native :ctrl_key, :ctrlKey
|
13
|
+
alias_native :meta_key, :metaKey
|
14
|
+
alias_native :locale
|
15
|
+
alias_native :location
|
16
|
+
alias_native :repeat
|
17
|
+
alias_native :composing?, :isComposing
|
18
|
+
alias_native :modifierState, :getModifierState
|
19
|
+
alias_native :init_key_event, :initKeyEventg
|
20
|
+
alias_native :init_keyboard_event, :initKeyboardEventg
|
10
21
|
end
|
11
22
|
end
|
12
23
|
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
module Hyalite
|
2
|
+
module DOM
|
3
|
+
module Event
|
4
|
+
class AliasPosition
|
5
|
+
def initialize(native, name)
|
6
|
+
@native = native
|
7
|
+
@name = name
|
8
|
+
end
|
9
|
+
|
10
|
+
def x
|
11
|
+
name = @name + 'X'
|
12
|
+
`#@native[name]`
|
13
|
+
end
|
14
|
+
|
15
|
+
def y
|
16
|
+
name = @name + 'Y'
|
17
|
+
`#@native[name]`
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
module MouseEventInterface
|
22
|
+
def client
|
23
|
+
@client ||= AliasPosition.new(@native, :client)
|
24
|
+
end
|
25
|
+
|
26
|
+
def movement
|
27
|
+
@movement ||= AliasPosition.new(@native, :movement)
|
28
|
+
end
|
29
|
+
|
30
|
+
def offset
|
31
|
+
@offset ||= AliasPosition.new(@native, :offset)
|
32
|
+
end
|
33
|
+
|
34
|
+
def page
|
35
|
+
@page ||= AliasPosition.new(@native, :page)
|
36
|
+
end
|
37
|
+
|
38
|
+
def screen
|
39
|
+
@screen ||= AliasPosition.new(@native, :screen)
|
40
|
+
end
|
41
|
+
|
42
|
+
def shift_key
|
43
|
+
`#@native.shiftKey`
|
44
|
+
end
|
45
|
+
|
46
|
+
def ctrl_key
|
47
|
+
`#@native.ctrlKey`
|
48
|
+
end
|
49
|
+
|
50
|
+
def alt_key
|
51
|
+
`#@native.altKey`
|
52
|
+
end
|
53
|
+
|
54
|
+
def meta_key
|
55
|
+
`#@native.metaKey`
|
56
|
+
end
|
57
|
+
|
58
|
+
def button
|
59
|
+
`#@native.button`
|
60
|
+
end
|
61
|
+
|
62
|
+
def buttons
|
63
|
+
`#@native.buttons`
|
64
|
+
end
|
65
|
+
|
66
|
+
def region
|
67
|
+
`#@native.region`
|
68
|
+
end
|
69
|
+
|
70
|
+
def related_target
|
71
|
+
`#@native.relatedTarget`
|
72
|
+
end
|
73
|
+
|
74
|
+
def modifire_state
|
75
|
+
`#@native.getModifierState()`
|
76
|
+
end
|
77
|
+
|
78
|
+
def init_mouse_event
|
79
|
+
`#@native.initMouseEvent()`
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
data/lib/hyalite/main.rb
CHANGED
@@ -38,7 +38,40 @@ module Hyalite
|
|
38
38
|
children
|
39
39
|
end
|
40
40
|
|
41
|
-
ElementObject.new(type, key, ref, Hyalite.current_owner, props)
|
41
|
+
ElementObject.new(type, key, ref, Hyalite.current_owner, props).tap {|el| element_created(el) }
|
42
|
+
end
|
43
|
+
|
44
|
+
def element_created(element)
|
45
|
+
return unless @hooks
|
46
|
+
@hooks.each do |hook|
|
47
|
+
hook.call(element)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def create_element_hook(&block)
|
52
|
+
@hooks ||= []
|
53
|
+
hook_setter = HookSetter.new(@hooks)
|
54
|
+
yield hook_setter
|
55
|
+
ensure
|
56
|
+
hook_setter.destroy
|
57
|
+
end
|
58
|
+
|
59
|
+
class HookSetter
|
60
|
+
def initialize(hooks)
|
61
|
+
@hooks = hooks
|
62
|
+
@memo = []
|
63
|
+
end
|
64
|
+
|
65
|
+
def hook(&block)
|
66
|
+
@memo << block
|
67
|
+
@hooks << block
|
68
|
+
end
|
69
|
+
|
70
|
+
def destroy
|
71
|
+
@memo.each do |m|
|
72
|
+
@hooks.delete(m)
|
73
|
+
end
|
74
|
+
end
|
42
75
|
end
|
43
76
|
|
44
77
|
def fn(&block)
|
data/lib/hyalite/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hyalite
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- youchan
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-08-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opal
|
@@ -85,8 +85,11 @@ files:
|
|
85
85
|
- lib/hyalite/dom/document.rb
|
86
86
|
- lib/hyalite/dom/element.rb
|
87
87
|
- lib/hyalite/dom/event.rb
|
88
|
+
- lib/hyalite/dom/event/data_transfer.rb
|
89
|
+
- lib/hyalite/dom/event/drag_event.rb
|
88
90
|
- lib/hyalite/dom/event/keyboard_event.rb
|
89
91
|
- lib/hyalite/dom/event/mouse_event.rb
|
92
|
+
- lib/hyalite/dom/event/mouse_event_interface.rb
|
90
93
|
- lib/hyalite/dom/node.rb
|
91
94
|
- lib/hyalite/dom/text.rb
|
92
95
|
- lib/hyalite/dom_component.rb
|