clearwater 1.0.0.rc3 → 1.0.0.rc4
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/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
|