clearwater 1.0.0.rc3 → 1.0.0.rc4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/clearwater/version.rb +1 -1
- data/opal/clearwater/virtual_dom.rb +91 -83
- data/shared/clearwater/router.rb +17 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 98660a461c2da1071bbc7a8f0cfd3db413ff2224
|
4
|
+
data.tar.gz: 53727157dec9793aafce8f6ec538099fc11c57d3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1016b8ce23f014f05d8aa14df5e7721c59b1950896b45e7f60e498ec4722ab24dde35c58fbc24c2ecac9171c216bb9966fc5a0ace8e510f77de571a8dca1f521
|
7
|
+
data.tar.gz: 38d578979f4aaed936e475d80c577e77a64dc76ce595a4c645eec7bf55d5688b15af2d5d05d604bc4c7d8986d4efd16073975253d0b7fbdcb68b159e45c743e6
|
data/lib/clearwater/version.rb
CHANGED
@@ -1,107 +1,115 @@
|
|
1
1
|
require 'clearwater/virtual_dom/js/virtual_dom.js'
|
2
2
|
|
3
|
-
module
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
def self.svg(tag_name, attributes=nil, content=nil)
|
15
|
-
%x{
|
16
|
-
return virtualDom.svg(
|
17
|
-
tag_name,
|
18
|
-
#{HashUtils.camelized_native(attributes)},
|
19
|
-
#{sanitize_content(content)}
|
20
|
-
);
|
21
|
-
}
|
22
|
-
end
|
3
|
+
module Clearwater
|
4
|
+
module VirtualDOM
|
5
|
+
def self.node(tag_name, attributes=nil, content=nil)
|
6
|
+
%x{
|
7
|
+
return virtualDom.h(
|
8
|
+
tag_name,
|
9
|
+
#{HashUtils.camelized_native(attributes)},
|
10
|
+
#{sanitize_content(content)}
|
11
|
+
);
|
12
|
+
}
|
13
|
+
end
|
23
14
|
|
24
|
-
|
25
|
-
|
26
|
-
|
15
|
+
def self.svg(tag_name, attributes=nil, content=nil)
|
16
|
+
%x{
|
17
|
+
return virtualDom.svg(
|
18
|
+
tag_name,
|
19
|
+
#{HashUtils.camelized_native(attributes)},
|
20
|
+
#{sanitize_content(content)}
|
21
|
+
);
|
22
|
+
}
|
23
|
+
end
|
27
24
|
|
28
|
-
|
29
|
-
|
30
|
-
|
25
|
+
def self.create_element(node)
|
26
|
+
`virtualDom.create(node)`
|
27
|
+
end
|
31
28
|
|
32
|
-
|
33
|
-
|
34
|
-
|
29
|
+
def self.diff first, second
|
30
|
+
`virtualDom.diff(first, second)`
|
31
|
+
end
|
35
32
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
if(content.$$is_array)
|
40
|
-
return #{content.map!{ |c| sanitize_content c }};
|
41
|
-
return content;
|
42
|
-
}
|
43
|
-
end
|
33
|
+
def self.patch node, diff
|
34
|
+
`virtualDom.patch(node, diff)`
|
35
|
+
end
|
44
36
|
|
45
|
-
|
46
|
-
|
47
|
-
|
37
|
+
def self.sanitize_content content
|
38
|
+
%x{
|
39
|
+
if(content === Opal.nil || content === undefined) return null;
|
40
|
+
if(content.$$is_array)
|
41
|
+
return #{content.map!{ |c| sanitize_content c }};
|
42
|
+
return content;
|
43
|
+
}
|
48
44
|
end
|
49
45
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
VirtualDOM.patch @tree, diff
|
54
|
-
@node = node
|
55
|
-
else
|
56
|
-
@node = node
|
57
|
-
@tree = create_element(node)
|
58
|
-
@root.inner_dom = @tree
|
59
|
-
@rendered = true
|
46
|
+
class Document
|
47
|
+
def initialize(root=Bowser.document.create_element('div'))
|
48
|
+
@root = root
|
60
49
|
end
|
61
|
-
end
|
62
50
|
|
63
|
-
|
64
|
-
|
65
|
-
|
51
|
+
def render node
|
52
|
+
if rendered?
|
53
|
+
diff = VirtualDOM.diff @node, node
|
54
|
+
VirtualDOM.patch @tree, diff
|
55
|
+
@node = node
|
56
|
+
else
|
57
|
+
@node = node
|
58
|
+
@tree = create_element(node)
|
59
|
+
@root.inner_dom = @tree
|
60
|
+
@rendered = true
|
61
|
+
end
|
62
|
+
end
|
66
63
|
|
67
|
-
|
68
|
-
|
64
|
+
def create_element node
|
65
|
+
`virtualDom.create(node)`
|
66
|
+
end
|
67
|
+
|
68
|
+
def rendered?
|
69
|
+
@rendered
|
70
|
+
end
|
69
71
|
end
|
70
|
-
end
|
71
72
|
|
72
|
-
|
73
|
-
|
74
|
-
|
73
|
+
module StringUtils
|
74
|
+
# Speed up camelization like whoa.
|
75
|
+
%x{ var camelized_cache = {}; }
|
75
76
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
77
|
+
def self.camelize string
|
78
|
+
%x{
|
79
|
+
if(camelized_cache.hasOwnProperty(string)) {
|
80
|
+
return camelized_cache[string];
|
81
|
+
} else {
|
82
|
+
camelized_cache[string] = string.replace(/_(\w)/g, self.$_camelize_handler);
|
83
|
+
return camelized_cache[string];
|
84
|
+
}
|
83
85
|
}
|
84
|
-
|
85
|
-
end
|
86
|
+
end
|
86
87
|
|
87
|
-
|
88
|
-
|
88
|
+
def self._camelize_handler _, character_match
|
89
|
+
`character_match.toUpperCase()`
|
90
|
+
end
|
89
91
|
end
|
90
|
-
end
|
91
92
|
|
92
|
-
|
93
|
-
|
94
|
-
|
93
|
+
module HashUtils
|
94
|
+
def self.camelized_native hash
|
95
|
+
return hash.to_n unless `!!hash.$$is_hash`
|
95
96
|
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
97
|
+
%x{
|
98
|
+
var v, keys = #{hash.keys}, key, js_obj = {};
|
99
|
+
for(var index = 0; index < keys.length; index++) {
|
100
|
+
key = keys[index];
|
101
|
+
v = #{hash[`key`]};
|
102
|
+
js_obj[#{StringUtils.camelize(`key`)}] = v.$$is_hash
|
103
|
+
? self.$camelized_native(v)
|
104
|
+
: (
|
105
|
+
(v && v.$$class) // If this is a Ruby object, nativize it
|
106
|
+
? #{`v`.to_n}
|
107
|
+
: v
|
108
|
+
);
|
109
|
+
}
|
110
|
+
return js_obj;
|
102
111
|
}
|
103
|
-
|
104
|
-
}
|
112
|
+
end
|
105
113
|
end
|
106
114
|
end
|
107
115
|
end
|
data/shared/clearwater/router.rb
CHANGED
@@ -100,6 +100,23 @@ module Clearwater
|
|
100
100
|
end
|
101
101
|
|
102
102
|
def set_outlets targets=targets_for_path(current_path)
|
103
|
+
@old_targets = @targets || []
|
104
|
+
@targets = targets
|
105
|
+
navigating_from = @old_targets - @targets
|
106
|
+
navigating_to = @targets - @old_targets
|
107
|
+
|
108
|
+
navigating_from.each do |target|
|
109
|
+
if target.respond_to? :on_route_from
|
110
|
+
target.on_route_from
|
111
|
+
end
|
112
|
+
end
|
113
|
+
|
114
|
+
navigating_to.each do |target|
|
115
|
+
if target.respond_to? :on_route_to
|
116
|
+
target.on_route_to
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
103
120
|
if targets.any?
|
104
121
|
(targets.count).times do |index|
|
105
122
|
targets[index].outlet = targets[index + 1]
|
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.
|
4
|
+
version: 1.0.0.rc4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jamie Gaskins
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-09-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: opal
|
@@ -164,7 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
164
164
|
version: 1.3.1
|
165
165
|
requirements: []
|
166
166
|
rubyforge_project:
|
167
|
-
rubygems_version: 2.
|
167
|
+
rubygems_version: 2.4.8
|
168
168
|
signing_key:
|
169
169
|
specification_version: 4
|
170
170
|
summary: Front-end Ruby web framework for fast, reasonable, and composable applications
|