clearwater 1.0.0.rc5 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 36c47513423cf3f1e0a6b3705f3e07d59bbbed31
4
- data.tar.gz: 9040af257c8ce168472c92d4ff4dff608bf1da67
2
+ SHA256:
3
+ metadata.gz: f356e81cd74a9ac0752440a96ed8ea9fe8bfec0a3a46bdb3e048d221b07a549c
4
+ data.tar.gz: 8ccc1733f324d2d447078348cfa91044028825cabab89c7e6aa6a26687f91e31
5
5
  SHA512:
6
- metadata.gz: 553ce8493b33aa68602b4d4b792083e1ab7c5bb957183e3a5474f9103ac97a3ffa5bfad03f5a1eb6e3075db9e0d04fa8309c8ebe110edc7006a36dacac587faa
7
- data.tar.gz: 4341d6edfe0eef28e0a20b1e405a2ad6d93a675bf96471f69268aab0e9088670788da5a1f915128f91a9882fb2c8ee3cda78d267573dae22f05c8a412d6431a0
6
+ metadata.gz: 86d989057b70581df9173d58cd78810211dffa47f9190c0afd87d15b90c89a4e002166aa55aa5eb32199e6dccb4456b1509f0645f375c36235f649431070eac5
7
+ data.tar.gz: 7cf37024b21c8f339d32e56ec6abd8cd565776f6f28d0e02c2c6a28caf1da5640d300b90876b11cff94986d2725ba7f2533ad99df02a8596747dbdcdfbe15bc8
@@ -1,5 +1,6 @@
1
1
  require 'clearwater/component/html_tags'
2
2
  require 'clearwater/dom_reference'
3
+ require 'clearwater/cached_render'
3
4
 
4
5
  module Clearwater
5
6
  module Component
@@ -1,3 +1,3 @@
1
1
  module Clearwater
2
- VERSION = "1.0.0.rc5"
2
+ VERSION = "1.0.0"
3
3
  end
@@ -0,0 +1,47 @@
1
+ require 'clearwater/virtual_dom'
2
+ require 'clearwater/black_box_node'
3
+
4
+ module Clearwater
5
+ class AsyncRender
6
+ include Clearwater::BlackBoxNode
7
+
8
+ attr_reader :vnode
9
+
10
+ def initialize &content
11
+ if content.is_a? Array
12
+ warn "#{self.class} cannot operate on an Array, so it will use the first element. If you need to use an array, you can wrap it inside another element."
13
+ content = content.first
14
+ end
15
+
16
+ @content = content
17
+ end
18
+
19
+ # Specify a temporary node to use. It will be replaced with the content
20
+ # passed in.
21
+ def node
22
+ Component.span
23
+ end
24
+
25
+ def mount element
26
+ delayed_update nil, element
27
+ end
28
+
29
+ def update previous, element
30
+ delayed_update previous.vnode, element
31
+ end
32
+
33
+ def delayed_update from, element
34
+ Bowser.window.animation_frame do
35
+ @vnode = Component.sanitize_content(@content.call)
36
+ diff = VirtualDOM.diff from, @vnode
37
+ VirtualDOM.patch element.to_n, diff
38
+ end
39
+ end
40
+ end
41
+
42
+ module Component
43
+ def async_render &block
44
+ AsyncRender.new &block
45
+ end
46
+ end
47
+ end
@@ -50,7 +50,7 @@ module Clearwater
50
50
  var self = this;
51
51
  var node = #{create_element};
52
52
  #{@delegate.mount(`node`)};
53
- return node.native;
53
+ return node['native'];
54
54
  });
55
55
 
56
56
  // virtual-dom update hook
@@ -58,13 +58,18 @@ module Clearwater
58
58
  // node: a Bowser-wrapped version of the DOM node
59
59
  Opal.defn(self, 'update', function(previous, node) {
60
60
  var self = this;
61
+
61
62
  if(self.delegate.$$class === previous.delegate.$$class) {
62
- #{@delegate.update(`previous.delegate`, wrap(`node`))};
63
+ var result = #{@delegate.update(`previous.delegate`, wrap(`node`))};
64
+
65
+ if(result && result.$$class && #{Bowser::Element === `result`}) {
66
+ return #{`result`.to_n};
67
+ }
63
68
  } else {
64
69
  previous.destroy(#{wrap(`node`)});
65
70
  var new_node = #{create_element};
66
71
  #{@delegate.mount(`new_node`)};
67
- return new_node.native;
72
+ return new_node['native'];
68
73
  }
69
74
  });
70
75
 
@@ -23,6 +23,10 @@ module Clearwater
23
23
  def destroy
24
24
  end
25
25
 
26
+ def render
27
+ div
28
+ end
29
+
26
30
  class Placeholder
27
31
  include Clearwater::BlackBoxNode
28
32
 
@@ -61,13 +65,22 @@ module Clearwater
61
65
  `#@vdom.rendered = true`
62
66
  end
63
67
 
64
- def update previous
65
- @vdom = previous.vdom
66
- @component = previous.component
67
-
68
- if component.should_update?(*@args, &@block)
69
- component.update(*@args, &@block)
70
- @vdom.render component.render
68
+ def update previous, element
69
+ # if we're looking at different classes, we need to start from scratch
70
+ if klass != previous.klass
71
+ previous.unmount element
72
+
73
+ new_element = render.create_element
74
+ mount new_element
75
+ new_element
76
+ else
77
+ @vdom = previous.vdom
78
+ @component = previous.component
79
+
80
+ if component.should_update?(*@args, &@block)
81
+ component.update(*@args, &@block)
82
+ @vdom.render component.render
83
+ end
71
84
  end
72
85
  end
73
86
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: clearwater
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0.rc5
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jamie Gaskins
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-23 00:00:00.000000000 Z
11
+ date: 2018-01-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: opal
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '0.1'
33
+ version: 0.5.1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '0.1'
40
+ version: 0.5.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -126,6 +126,7 @@ files:
126
126
  - opal/clearwater.rb
127
127
  - opal/clearwater/application.rb
128
128
  - opal/clearwater/application_registry.rb
129
+ - opal/clearwater/async_render.rb
129
130
  - opal/clearwater/black_box_node.rb
130
131
  - opal/clearwater/cached_render.rb
131
132
  - opal/clearwater/cached_render/wrapper.rb
@@ -160,12 +161,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
160
161
  version: '0'
161
162
  required_rubygems_version: !ruby/object:Gem::Requirement
162
163
  requirements:
163
- - - ">"
164
+ - - ">="
164
165
  - !ruby/object:Gem::Version
165
- version: 1.3.1
166
+ version: '0'
166
167
  requirements: []
167
168
  rubyforge_project:
168
- rubygems_version: 2.6.12
169
+ rubygems_version: 2.7.3
169
170
  signing_key:
170
171
  specification_version: 4
171
172
  summary: Front-end Ruby web framework for fast, reasonable, and composable applications