hyalite 0.0.6 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 313aef2818fca410f8a5e8c2444ff9adb4e181f4
4
- data.tar.gz: 96ed10c69f561a4a25bbb492fdd58208a0ecc683
3
+ metadata.gz: 7727408125169943f9effd8021f8d06202219b08
4
+ data.tar.gz: ae82044f900d23b12ae3d0889b0b349caa711629
5
5
  SHA512:
6
- metadata.gz: 39495ec8dbf9169247f34e7e94bdd86675a9d2e9c4c3b28d66e2219dac66a54054b12fd6f9c002392423511d3425093443254bd2134c42f3eca323c01e037b9d
7
- data.tar.gz: 397bd664105d77c4fbbd4cb29b36abfb1abbd8f499b39d255638a9dff075ec91af5040bceb1fe02e3858b56fa1f8392b07b59424d8ea7596a47d920f5ad9e74e
6
+ metadata.gz: f4a4e5c3c35ce98a381d64a6565a00ea923d07a78085f2a8251d4e907cfdebbb3784d94b6365f44b42e4c76021bcfbcd3d490483a2c60dee0888f0f948961bcb
7
+ data.tar.gz: 6f0a78e78b053f182e2ad3c961cb93df72df65de0f7ecd3a5be9f2dee3acefaa82799a1290f1615f8a6b22c56f29f440c4b68b194bb964a961204769e3f3e1c2
@@ -0,0 +1 @@
1
+ 2.3.3
@@ -1,3 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
- 2.3.1
3
+ 2.3.3
4
+ before_script:
5
+ - mkdir travis-phantomjs
6
+ - wget https://assets.membergetmember.co/software/phantomjs-2.1.1-linux-x86_64.tar.bz2 -O $PWD/travis-phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2
7
+ - tar -xvf $PWD/travis-phantomjs/phantomjs-2.1.1-linux-x86_64.tar.bz2 -C $PWD/travis-phantomjs
8
+ - export PATH=$PWD/travis-phantomjs/phantomjs-2.1.1-linux-x86_64/bin:$PATH
data/Gemfile CHANGED
@@ -2,4 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'opal-rspec', '0.5.0'
5
+ gem 'rake'
6
+ gem 'opal-rspec'
@@ -3,28 +3,23 @@ PATH
3
3
  specs:
4
4
  hyalite (0.0.6)
5
5
  opal
6
- opal-browser
7
6
 
8
7
  GEM
9
8
  remote: https://rubygems.org/
10
9
  specs:
11
- concurrent-ruby (1.0.2)
10
+ concurrent-ruby (1.0.4)
12
11
  hike (1.2.3)
13
- opal (0.9.4)
12
+ opal (0.10.3)
14
13
  hike (~> 1.2)
15
14
  sourcemap (~> 0.1.0)
16
15
  sprockets (~> 3.1)
17
16
  tilt (>= 1.4)
18
- opal-browser (0.2.0)
19
- opal
20
- paggio
21
- opal-rspec (0.5.0)
22
- opal (>= 0.8.0, < 0.10)
23
- paggio (0.2.6)
17
+ opal-rspec (0.6.0)
18
+ opal (>= 0.10.0, < 0.11)
24
19
  rack (2.0.1)
25
20
  rake (10.5.0)
26
21
  sourcemap (0.1.1)
27
- sprockets (3.7.0)
22
+ sprockets (3.7.1)
28
23
  concurrent-ruby (~> 1.0)
29
24
  rack (> 1, < 3)
30
25
  tilt (2.0.5)
@@ -35,8 +30,8 @@ PLATFORMS
35
30
  DEPENDENCIES
36
31
  bundler (~> 1.8)
37
32
  hyalite!
38
- opal-rspec (= 0.5.0)
39
- rake (~> 10.0)
33
+ opal-rspec
34
+ rake
40
35
 
41
36
  BUNDLED WITH
42
37
  1.13.6
data/Rakefile CHANGED
@@ -1,11 +1,11 @@
1
1
  require 'opal'
2
- require 'opal-browser'
3
2
  require 'opal/rspec/rake_task'
4
3
  require "bundler/gem_tasks"
5
4
 
6
- Opal::Processor.source_map_enabled = true
5
+ Opal::Config.source_map_enabled = true
7
6
 
8
7
  Opal::RSpec::RakeTask.new(:default) do |server, task|
8
+ task.files = [ENV['FILE']] if ENV['FILE']
9
9
  server.append_path File.expand_path('../client', __FILE__)
10
10
  server.source_map = true
11
11
  server.debug = true
@@ -1,5 +1,4 @@
1
1
  require 'opal'
2
- require 'browser'
3
2
  require 'hyalite/logger'
4
3
  require 'hyalite/transaction'
5
4
  require 'hyalite/adler32'
@@ -7,6 +6,7 @@ require 'hyalite/mount'
7
6
  require 'hyalite/element'
8
7
  require 'hyalite/dom_component'
9
8
  require 'hyalite/text_component'
9
+ require 'hyalite/dom'
10
10
 
11
11
  module Hyalite
12
12
  class << self
@@ -87,7 +87,7 @@ module Hyalite
87
87
  end
88
88
 
89
89
  def render(next_element, container, &block)
90
- Mount.render_subtree_into_container(nil, next_element, container, &block);
90
+ Mount.render_subtree_into_container(next_element, container, &block);
91
91
  end
92
92
 
93
93
  def instance_map
@@ -108,7 +108,7 @@ module Hyalite
108
108
  end
109
109
 
110
110
  def find_dom_node(component_or_element)
111
- return component_or_element if component_or_element.respond_to?(:node_type) && component_or_element.node_type == Browser::DOM::Node::ELEMENT_NODE
111
+ return component_or_element if component_or_element.respond_to?(:node_type) && component_or_element.element?
112
112
 
113
113
  if instance_map.has_key?(component_or_element)
114
114
  return Mount.node(instance_map[component_or_element].root_node_id)
@@ -60,10 +60,6 @@ module Hyalite
60
60
  @state.set(state)
61
61
  end
62
62
 
63
- def context_types
64
- {}
65
- end
66
-
67
63
  def child_context
68
64
  {}
69
65
  end
@@ -25,9 +25,8 @@ module Hyalite
25
25
  @mount_order = CompositeComponent.next_mount_id
26
26
  @root_node_id = root_id
27
27
 
28
- public_context = mask_context(@context)
29
28
  @instance = @current_element.type.new
30
- @instance.init_component(@current_element.props, public_context, UpdateQueue)
29
+ @instance.init_component(@current_element.props, @context, UpdateQueue)
31
30
 
32
31
  Hyalite.instance_map[@instance] = self
33
32
 
@@ -111,12 +110,8 @@ module Hyalite
111
110
  end
112
111
  end
113
112
 
114
- def mask_context(context)
115
- context.select {|k, v| @current_element.type.context_types.has_key? k }
116
- end
117
-
118
113
  def update_component(mount_ready, prev_parent_element, next_parent_element, prev_unmasked_context, next_unmasked_context)
119
- next_context = (@context == next_unmasked_context ? @instance.context : mask_context(next_unmasked_context))
114
+ next_context = @context == next_unmasked_context ? @instance.context : next_unmasked_context
120
115
 
121
116
  next_props = next_parent_element.props
122
117
  next_state = process_pending_state(next_props, next_context)
@@ -0,0 +1,17 @@
1
+ module Hyalite
2
+ module DOM
3
+ end
4
+ end
5
+
6
+ require 'native'
7
+ require_relative 'dom/event/keyboard_event'
8
+ require_relative 'dom/event/mouse_event'
9
+ require_relative 'dom/event'
10
+ require_relative 'dom/node'
11
+ require_relative 'dom/collection'
12
+ require_relative 'dom/text'
13
+ require_relative 'dom/element'
14
+ require_relative 'dom/body'
15
+ require_relative 'dom/document'
16
+
17
+ $document = Hyalite::DOM::Document.singleton
@@ -0,0 +1,6 @@
1
+ module Hyalite::DOM
2
+ class Body
3
+ include Native
4
+ include Node
5
+ end
6
+ end
@@ -0,0 +1,24 @@
1
+ require_relative 'element'
2
+
3
+ module Hyalite::DOM
4
+ class Collection
5
+ include Native
6
+ include Enumerable
7
+
8
+ def each(&block)
9
+ `self.native.length`.times do |i|
10
+ block.call Element.new(`self.native.item(i)`)
11
+ end
12
+
13
+ nil
14
+ end
15
+
16
+ def [](index)
17
+ Element.new(`self.native.item(index)`)
18
+ end
19
+
20
+ def length
21
+ `self.native.length`
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,41 @@
1
+ module Hyalite::DOM
2
+ class Document
3
+ include Native
4
+ include Node
5
+
6
+ def create_element(tag)
7
+ Element.new `self.native.createElement(tag)`
8
+ end
9
+
10
+ def create_text(text)
11
+ Text.new `self.native.createTextNode(text)`
12
+ end
13
+
14
+ def body
15
+ Body.new `self.native.body`
16
+ end
17
+
18
+ def ready(&block)
19
+ `self.native.addEventListener('DOMContentLoaded', block)`
20
+ end
21
+
22
+ def self.singleton
23
+ @singleton ||= self.new(`window.document`)
24
+ end
25
+
26
+ def document?
27
+ true
28
+ end
29
+
30
+ def [](q)
31
+ elements = []
32
+ %x(
33
+ var nodeList = self.native.querySelectorAll(#{q});
34
+ for (var i = 0; i < nodeList.length; i++) {
35
+ elements.$push(nodeList.item(i));
36
+ }
37
+ )
38
+ elements.map!{|el| Element.new(el) }
39
+ end
40
+ end
41
+ end
@@ -0,0 +1,101 @@
1
+ module Hyalite::DOM
2
+ class Element
3
+ include Native
4
+ include Node
5
+
6
+ alias_native :set_attribute, :setAttribute
7
+ alias_native :get_attribute, :getAttribute
8
+ alias_native :remove_attribute, :removeAttribute
9
+ alias_native :tag_name, :tagName
10
+
11
+ def element?
12
+ true
13
+ end
14
+
15
+ def input_type
16
+ `self.native.type`
17
+ end
18
+
19
+ def [](prop_name)
20
+ `self.native[#{prop_name}]`
21
+ end
22
+
23
+ def add_class(name)
24
+ `self.native.classList.add(name)`
25
+ self
26
+ end
27
+
28
+ def class_names
29
+ Array.new(`self.native.classList`).to_a
30
+ end
31
+
32
+ def attributes
33
+ @attributes ||= Attributes.new(self)
34
+ end
35
+
36
+ def text
37
+ `self.native.textContent`
38
+ end
39
+
40
+ def text=(text)
41
+ `self.native.textContent = text`
42
+ end
43
+
44
+ def value
45
+ `self.native.value`
46
+ end
47
+
48
+ def style(hash)
49
+ hash.each do |key, value|
50
+ `self.native.style[key] = value`
51
+ end
52
+ end
53
+
54
+ def add_child(child)
55
+ `self.native.appendChild(child.native)`
56
+ end
57
+
58
+ def inner_html
59
+ `self.native.innerHTML`
60
+ end
61
+
62
+ def inner_html=(html)
63
+ `self.native.innerHTML = html`
64
+ end
65
+
66
+ def inner_dom=(dom)
67
+ clear
68
+ self << dom
69
+ end
70
+
71
+ def document
72
+ $document
73
+ end
74
+
75
+ def to_s
76
+ "<#{`self.native.tagName`} class='#{self.class_names.join(' ')}' id='#{self['id']}'/>"
77
+ end
78
+
79
+ def self.create(tag)
80
+ $document.create_element(tag)
81
+ end
82
+
83
+ class Attributes
84
+ def initialize(element)
85
+ @element = element
86
+ end
87
+
88
+ def [](name)
89
+ @element.get_attribute(name)
90
+ end
91
+
92
+ def []=(name, value)
93
+ @element.set_attribute(name, value)
94
+ end
95
+
96
+ def remove(name)
97
+ @element.remove_attribute(name)
98
+ end
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,22 @@
1
+ module Hyalite
2
+ module DOM
3
+ module Event
4
+ EVENT_CLASSES = {
5
+ 'click' => MouseEvent,
6
+ 'keydown' => KeyboardEvent
7
+ }
8
+
9
+ def self.create(event)
10
+ type = `event.type`
11
+ event_class = EVENT_CLASSES[type]
12
+ if event_class
13
+ event_class.new(event)
14
+ end
15
+ end
16
+
17
+ def target
18
+ Node.create(`self.native.target`)
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,13 @@
1
+ module Hyalite
2
+ module DOM
3
+ module Event
4
+ class KeyboardEvent
5
+ include Native
6
+ include Event
7
+
8
+ alias_native :code
9
+ alias_native :key_code, :keyCode
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,10 @@
1
+ module Hyalite
2
+ module DOM
3
+ module Event
4
+ class MouseEvent
5
+ include Native
6
+ include Event
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,71 @@
1
+ module Hyalite::DOM
2
+ module Node
3
+
4
+ def self.create(node)
5
+ @classes ||= [nil, Element, nil, Text, nil, nil, nil, nil, nil, Document, nil, nil]
6
+
7
+ if klass = @classes[`node.nodeType`]
8
+ klass.new(node)
9
+ else
10
+ raise ArgumentError, 'cannot instantiate a non derived Node object'
11
+ end
12
+ end
13
+
14
+ def document?
15
+ false
16
+ end
17
+
18
+ def element?
19
+ false
20
+ end
21
+
22
+ def text?
23
+ false
24
+ end
25
+
26
+ def node_name
27
+ `self.native.tagName`
28
+ end
29
+
30
+ def <<(child)
31
+ `self.native.appendChild(child.native)`
32
+ end
33
+
34
+ def clear
35
+ %x(
36
+ var len = self.native.childNodes.length;
37
+ for (var i = 0; i < len; i++) {
38
+ self.native.childNodes[0].remove();
39
+ }
40
+ )
41
+ end
42
+
43
+ def parent
44
+ if parent = `self.native.parentNode`
45
+ Node.create(parent)
46
+ end
47
+ end
48
+
49
+ def children
50
+ Collection.new `self.native.childNodes`
51
+ end
52
+
53
+ def remove
54
+ `self.native.remove()`
55
+ end
56
+
57
+ def next_sibling
58
+ sib = `self.native.nextSibling`
59
+ Node.create(sib) if sib
60
+ end
61
+
62
+ def on(name, &block)
63
+ callback = Proc.new{|event| block.call(Event.create(event))}
64
+ `self.native.addEventListener(name, callback)`
65
+ end
66
+
67
+ def ==(other)
68
+ `self.native === other.native`
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,14 @@
1
+ module Hyalite::DOM
2
+ class Text
3
+ include Native
4
+ include Node
5
+
6
+ def self.create(text)
7
+ $document.create_text(text)
8
+ end
9
+
10
+ def text?
11
+ true
12
+ end
13
+ end
14
+ end
@@ -1,7 +1,6 @@
1
1
  require 'hyalite/multi_children'
2
2
  require 'hyalite/dom_property_operations'
3
3
  require 'hyalite/internal_component'
4
- require 'hyalite/browser_event'
5
4
  require 'hyalite/input_wrapper'
6
5
 
7
6
  module Hyalite
@@ -51,8 +50,8 @@ module Hyalite
51
50
  # transaction.getReactMountReady().enqueue(trapBubbledEventsLocal, this);
52
51
  end
53
52
 
54
- element = create_open_tag_markup_and_put_listeners(mount_ready, @element.props)
55
- create_content_markup(mount_ready, element, context)
53
+ markup = create_open_tag_markup_and_put_listeners(mount_ready, @element.props)
54
+ create_content_markup(mount_ready, markup, context)
56
55
  end
57
56
 
58
57
  def unmount_component
@@ -274,38 +273,37 @@ module Hyalite
274
273
 
275
274
  #return element if mount_ready.render_to_static_markup
276
275
 
277
- element[Mount::ID_ATTR_NAME] = @root_node_id
276
+ element.attributes[Mount::ID_ATTR_NAME] = @root_node_id
278
277
  element
279
278
  end
280
279
 
281
- def create_content_markup(mount_ready, element, context)
280
+ def create_content_markup(mount_ready, markup, context)
282
281
  children = @element.props[:children]
283
282
 
284
283
  inner_html = @element.props[:dangerouslySetInnerHTML]
285
284
  if inner_html
286
- if inner_html[:__html]
287
- html = inner_html[:__html]
288
- `element.native.innerHTML = html`
285
+ if inner_html.has_key?(:__html)
286
+ markup.inner_html = inner_html[:__html]
289
287
  end
290
288
  elsif is_text_content(children)
291
- element.inner_dom = Browser::DOM::Text.create(@element.props[:children])
289
+ markup.text = children.to_s
292
290
  else
293
- mount_images = mount_children(@element.props[:children], mount_ready, context)
294
- mount_images.each do |image|
295
- if image.is_a?(String)
296
- element.text = image
291
+ mount_images = mount_children(children, mount_ready, context)
292
+ mount_images.compact.each do |image|
293
+ if is_text_content(image)
294
+ markup << Hyalite::DOM::Text.new(image.to_s)
297
295
  else
298
- image.append_to(element) if image
296
+ markup << image
299
297
  end
300
298
  end
301
299
  end
302
- element
300
+ markup
303
301
  end
304
302
 
305
303
  def enqueue_put_listener(id, event_name, listener, mount_ready)
306
304
  container = Mount.container_for_id(id)
307
305
  if container
308
- doc = container.node_type == Browser::DOM::Node::ELEMENT_NODE ? container.document : container
306
+ doc = container.element? ? container.document : container
309
307
  BrowserEvent.listen_to(event_name, doc)
310
308
  end
311
309
  mount_ready.enqueue do
@@ -13,15 +13,15 @@ module Hyalite
13
13
 
14
14
  attribute_name = property_info[:attribute_name]
15
15
  if property_info[:has_boolean_value] || property_info[:has_overloaded_boolean_value] && value == true
16
- element[attribute_name] = ""
16
+ element.attributes[attribute_name] = ""
17
17
  return
18
18
  end
19
19
 
20
- element[attribute_name]=Hyalite.escape_text_content_for_browser(value)
20
+ element.attributes[attribute_name]=Hyalite.escape_text_content_for_browser(value)
21
21
  elsif DOMProperty.is_custom_attribute(name)
22
22
  return if value.nil?
23
23
 
24
- element[name]=Hyalite.escape_text_content_for_browser(value)
24
+ element.attributes[name]=Hyalite.escape_text_content_for_browser(value)
25
25
  end
26
26
  end
27
27
 
@@ -32,7 +32,7 @@ module Hyalite
32
32
  def create_markup_for_custom_attribute(element, name, value)
33
33
  return if (!is_attribute_name_safe(name) || value == null)
34
34
 
35
- element[name]=Hyalite.escape_text_content_for_browser(value)
35
+ element.attributes[name]=Hyalite.escape_text_content_for_browser(value)
36
36
  end
37
37
 
38
38
  def is_attribute_name_safe(attribute_name)
@@ -63,12 +63,12 @@ module Hyalite
63
63
  attribute_name = property_info[:attribute_name]
64
64
  namespace = property_info[:attribute_namespace]
65
65
  if namespace
66
- node[attribute_name, {namespace: namespace}] = value.to_s
66
+ node.attributes[attribute_name, {namespace: namespace}] = value.to_s
67
67
  elsif property_info[:has_boolean_value] ||
68
68
  (property_info[:has_overloaded_boolean_value] && value == true)
69
- node[attribute_name] = ''
69
+ node.attributes[attribute_name] = ''
70
70
  else
71
- node[attribute_name] = value.to_s
71
+ node.attributes[attribute_name] = value.to_s
72
72
  end
73
73
  else
74
74
  prop_name = property_info[:property_name]
@@ -102,7 +102,7 @@ module Hyalite
102
102
  end
103
103
 
104
104
  def set_attribute_for_id(node, id)
105
- node[DOMProperty::ID_ATTRIBUTE_NAME] = id
105
+ node.attributes[DOMProperty::ID_ATTRIBUTE_NAME] = id
106
106
  end
107
107
 
108
108
  def should_ignore_value(property_info, value)
@@ -1,9 +1,3 @@
1
- class Browser::DOM::Element
2
- def input_type
3
- `self.native.type`
4
- end
5
- end
6
-
7
1
  module Hyalite
8
2
  class ChangeEventPlugin
9
3
  EVENT_TYPES = {
@@ -22,7 +22,7 @@ module Hyalite
22
22
  @instances_by_root_id[root_id]
23
23
  end
24
24
 
25
- def render_subtree_into_container(parent_component, next_element, container, &block)
25
+ def render_subtree_into_container(next_element, container, &block)
26
26
  next_wrapped_element = ElementObject.new(TopLevelWrapper, nil, nil, nil, next_element)
27
27
  prev_component = @instances_by_root_id[root_id(container)]
28
28
  if prev_component
@@ -32,7 +32,6 @@ module Hyalite
32
32
  return update_root_component(
33
33
  prev_component,
34
34
  next_wrapped_element,
35
- container,
36
35
  &block
37
36
  ).rendered_component.public_instance
38
37
  else
@@ -47,10 +46,7 @@ module Hyalite
47
46
  component = render_new_root_component(
48
47
  next_wrapped_element,
49
48
  container,
50
- should_reuse_markup,
51
- parent_component ?
52
- parent_component.internal_instance.process_child_context(parent_component.internal_instance.context) :
53
- {}
49
+ should_reuse_markup
54
50
  ).rendered_component.public_instance
55
51
 
56
52
  if block_given?
@@ -61,18 +57,18 @@ module Hyalite
61
57
  end
62
58
 
63
59
  def is_rendered(node)
64
- return false if node.node_type != Browser::DOM::Node::ELEMENT_NODE
60
+ return false unless node.element?
65
61
 
66
62
  id = node_id(node)
67
63
  id ? id[0] == SEPARATOR : false
68
64
  end
69
65
 
70
- def render_new_root_component(next_element, container, should_reuse_markup, context)
71
- component_instance = Hyalite.instantiate_component(next_element, nil)
66
+ def render_new_root_component(next_element, container, should_reuse_markup)
67
+ component_instance = Hyalite.instantiate_component(next_element)
72
68
  root_id = register_component(component_instance, container)
73
69
 
74
70
  Hyalite.updates.batched_updates do
75
- mount_component_into_node(component_instance, root_id, container, should_reuse_markup, context)
71
+ mount_component_into_node(component_instance, root_id, container, should_reuse_markup)
76
72
  end
77
73
 
78
74
  component_instance
@@ -100,9 +96,9 @@ module Hyalite
100
96
  root_id
101
97
  end
102
98
 
103
- def mount_component_into_node(component_instance, root_id, container, should_reuse_markup, context)
99
+ def mount_component_into_node(component_instance, root_id, container, should_reuse_markup)
104
100
  Hyalite.updates.reconcile_transaction.perform do |transaction|
105
- markup = Reconciler.mount_component(component_instance, root_id, transaction.mount_ready, context)
101
+ markup = Reconciler.mount_component(component_instance, root_id, transaction.mount_ready, {})
106
102
  component_instance.rendered_component.top_level_wrapper = component_instance
107
103
  mount_image_into_node(markup, container, should_reuse_markup)
108
104
  end
@@ -112,23 +108,23 @@ module Hyalite
112
108
  if should_reuse_markup
113
109
  root_element = root_element_in_container(container)
114
110
  checksum = Adler32.checksum markup
115
- checksum_attr = root_element.attr(CHECKSUM_ATTR_NAME)
111
+ checksum_attr = root_element.attributes[CHECKSUM_ATTR_NAME]
116
112
  if checksum == checksum_attr
117
113
  return
118
114
  end
119
115
 
120
- root_element.remove_attr(CHECKSUM_ATTR_NAME)
121
- root_element.attr(CHECKSUM_ATTR_NAME, checksum)
116
+ root_element.attributes.remove(CHECKSUM_ATTR_NAME)
117
+ root_element.attributes[CHECKSUM_ATTR_NAME] = checksum
122
118
  end
123
119
 
124
120
  container.inner_dom = markup
125
121
  end
126
122
 
127
123
  def root_element_in_container(container)
128
- if container.node_type == Browser::DOM::Node::DOCUMENT_NODE
124
+ if container.document?
129
125
  $document
130
126
  else
131
- container.child
127
+ container.children.first
132
128
  end
133
129
  end
134
130
 
@@ -163,8 +159,8 @@ module Hyalite
163
159
  end
164
160
 
165
161
  def internal_id(node)
166
- if node.node_type == Browser::DOM::Node::ELEMENT_NODE
167
- node.attr(ID_ATTR_NAME)
162
+ if node.element?
163
+ node.attributes[ID_ATTR_NAME]
168
164
  end
169
165
  end
170
166
 
@@ -197,7 +193,7 @@ module Hyalite
197
193
  def find_component_root(ancestor_node, target_id)
198
194
  deepest_ancestor = find_deepest_cached_ancestor(target_id) || ancestor_node
199
195
 
200
- first_children = [ deepest_ancestor.child ]
196
+ first_children = [ deepest_ancestor.children.first ]
201
197
 
202
198
  while first_children.length > 0
203
199
  child = first_children.shift
@@ -208,10 +204,10 @@ module Hyalite
208
204
  if target_id == child_id
209
205
  return child
210
206
  elsif InstanceHandles.is_ancestor_id_of(child_id, target_id)
211
- first_children = [ child.child ]
207
+ first_children = [ child.children.first ]
212
208
  end
213
209
  else
214
- first_children.push(child.child)
210
+ first_children.push(child.children.first)
215
211
  end
216
212
 
217
213
  child = child.next_sibling
@@ -241,7 +237,7 @@ module Hyalite
241
237
  false
242
238
  when outer_node == inner_node
243
239
  true
244
- when outer_node.node_type == Browser::DOM::Node::TEXT_NODE
240
+ when outer_node.text?
245
241
  false
246
242
  else
247
243
  contains_node(outer_node, inner_node.parent)
@@ -249,8 +245,8 @@ module Hyalite
249
245
  end
250
246
 
251
247
  def find_first_hyalite_dom(node)
252
- while node && node.parent != node
253
- unless node.node_type == Browser::DOM::Node::ELEMENT_NODE && node_id = internal_id(node)
248
+ while node && node.parent
249
+ unless node.element? && node_id = internal_id(node)
254
250
  node = node.parent
255
251
  next
256
252
  end
@@ -272,7 +268,7 @@ module Hyalite
272
268
  nil
273
269
  end
274
270
 
275
- def update_root_component(prev_component, next_element, container, &callback)
271
+ def update_root_component(prev_component, next_element, &callback)
276
272
  UpdateQueue.enqueue_element_internal(prev_component, next_element)
277
273
  if block_given?
278
274
  UpdateQueue.enqueue_callback_internal(prev_component, &callback)
@@ -1,7 +1,7 @@
1
1
  module Hyalite
2
2
  module MultiChildren
3
3
  def mount_children(nested_children, mount_ready, context)
4
- children = instantiate_children(nested_children, mount_ready, context)
4
+ children = instantiate_children(nested_children, context)
5
5
  @rendered_children = children
6
6
  index = 0
7
7
  children.keys.map do |name|
@@ -86,7 +86,7 @@ module Hyalite
86
86
 
87
87
  def instantiate_children(nested_child_nodes, context)
88
88
  Reconciler.flatten_children(nested_child_nodes).map {|name, child|
89
- child_instance = Hyalite.instantiate_component(child, nil)
89
+ child_instance = Hyalite.instantiate_component(child)
90
90
  [name, child_instance]
91
91
  }.to_h
92
92
  end
@@ -152,7 +152,7 @@ module Hyalite
152
152
  updates.each_with_index do |update, updated_index|
153
153
  if update[:type] == :move_existing || update[:type] == :remove_node
154
154
  updated_index = update[:fromIndex]
155
- updated_child = update[:parentNode].elements[updated_index]
155
+ updated_child = update[:parentNode].children[updated_index]
156
156
  parent_id = update[:parentID]
157
157
 
158
158
  initial_children[parent_id] ||= []
@@ -188,19 +188,18 @@ module Hyalite
188
188
  when :set_markup
189
189
  update[:parentNode].inner_html = update[:textContent]
190
190
  when :text_content
191
- update[:parentNode].content = update[:textContent]
191
+ update[:parentNode].text = update[:textContent]
192
192
  when :remove_node
193
193
  # Already removed above.
194
194
  end
195
195
  end
196
196
  end
197
197
 
198
-
199
198
  def insert_child_at(parent_node, child_node, index)
200
- if index >= parent_node.children.to_ary.length
199
+ if index >= parent_node.children.length
201
200
  parent_node.add_child(child_node)
202
201
  else
203
- parent_node.children.to_ary[index].add_previous_sibling(child_node)
202
+ parent_node.children[index].add_previous_sibling(child_node)
204
203
  end
205
204
  end
206
205
  end
@@ -1,4 +1,5 @@
1
1
  require 'hyalite/transaction'
2
+ require 'hyalite/browser_event'
2
3
 
3
4
  module Hyalite
4
5
  class ReconcileTransaction < Transaction
@@ -53,7 +53,7 @@ module Hyalite
53
53
  unmount_component(prev_child, name)
54
54
  end
55
55
 
56
- next_children[name] = Hyalite.instantiate_component(next_element, nil)
56
+ next_children[name] = Hyalite.instantiate_component(next_element)
57
57
  end
58
58
  end
59
59
 
@@ -20,7 +20,6 @@ Gem::Specification.new do |spec|
20
20
  spec.require_paths = ["lib"]
21
21
 
22
22
  spec.add_dependency 'opal'
23
- spec.add_dependency 'opal-browser'
24
23
 
25
24
  spec.add_development_dependency "bundler", "~> 1.8"
26
25
  spec.add_development_dependency "rake", "~> 10.0"
@@ -1,5 +1,4 @@
1
1
  require 'opal'
2
- require 'opal-browser'
3
2
 
4
3
  Opal.append_path File.expand_path('../../../client', __FILE__)
5
4
 
@@ -1,3 +1,3 @@
1
1
  module Hyalite
2
- VERSION = "0.0.6"
2
+ VERSION = "0.1.0"
3
3
  end
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.0.6
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - youchan
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-12-03 00:00:00.000000000 Z
11
+ date: 2017-07-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opal
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: opal-browser
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
27
  - !ruby/object:Gem::Dependency
42
28
  name: bundler
43
29
  requirement: !ruby/object:Gem::Requirement
@@ -74,6 +60,7 @@ extensions: []
74
60
  extra_rdoc_files: []
75
61
  files:
76
62
  - ".gitignore"
63
+ - ".ruby-version"
77
64
  - ".travis.yml"
78
65
  - Gemfile
79
66
  - Gemfile.lock
@@ -86,6 +73,16 @@ files:
86
73
  - client/hyalite/callback_queue.rb
87
74
  - client/hyalite/component.rb
88
75
  - client/hyalite/composite_component.rb
76
+ - client/hyalite/dom.rb
77
+ - client/hyalite/dom/body.rb
78
+ - client/hyalite/dom/collection.rb
79
+ - client/hyalite/dom/document.rb
80
+ - client/hyalite/dom/element.rb
81
+ - client/hyalite/dom/event.rb
82
+ - client/hyalite/dom/event/keyboard_event.rb
83
+ - client/hyalite/dom/event/mouse_event.rb
84
+ - client/hyalite/dom/node.rb
85
+ - client/hyalite/dom/text.rb
89
86
  - client/hyalite/dom_component.rb
90
87
  - client/hyalite/dom_operations.rb
91
88
  - client/hyalite/dom_property.rb
@@ -142,7 +139,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
142
139
  version: '0'
143
140
  requirements: []
144
141
  rubyforge_project:
145
- rubygems_version: 2.5.1
142
+ rubygems_version: 2.5.2
146
143
  signing_key:
147
144
  specification_version: 4
148
145
  summary: Virtual DOM implimentation in Ruby