uzuuzu-core 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/VERSION +1 -1
- data/lib/uzuuzu/helper/controller.rb +32 -43
- data/lib/uzuuzu/helper/jquery.rb +9 -0
- data/lib/uzuuzu/helper/localize.rb +0 -4
- data/lib/uzuuzu/helper/renderer.rb +17 -10
- data/lib/uzuuzu/helper/route.rb +3 -4
- data/lib/uzuuzu/helper/xhtml.rb +17 -17
- data/lib/uzuuzu/wrapper/application.rb +75 -48
- data/lib/uzuuzu/wrapper/controller.rb +14 -4
- data/lib/uzuuzu/wrapper/environments.rb +1 -1
- data/lib/uzuuzu/wrapper/helper.rb +10 -1
- data/uzuuzu-core.gemspec +2 -3
- metadata +3 -4
- data/lib/uzuuzu/helper/fixture.rb +0 -10
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.8
|
@@ -13,77 +13,64 @@ module UzuUzu
|
|
13
13
|
#
|
14
14
|
#
|
15
15
|
def application
|
16
|
-
|
16
|
+
::UzuUzu.current
|
17
17
|
end
|
18
|
+
|
19
|
+
#
|
20
|
+
#
|
21
|
+
#
|
22
|
+
def controller
|
23
|
+
::UzuUzu::Controller.current
|
24
|
+
end
|
25
|
+
|
18
26
|
#
|
19
27
|
#
|
20
28
|
#
|
21
29
|
def request
|
22
|
-
|
30
|
+
::UzuUzu::Request.current
|
23
31
|
end
|
24
|
-
|
32
|
+
|
25
33
|
#
|
26
34
|
#
|
27
35
|
#
|
28
36
|
def response
|
29
|
-
|
37
|
+
::UzuUzu::Response.current
|
30
38
|
end
|
31
39
|
|
32
40
|
#
|
33
41
|
#
|
34
42
|
#
|
35
|
-
def
|
36
|
-
|
43
|
+
def helper
|
44
|
+
::UzuUzu::Helper.current
|
37
45
|
end
|
38
46
|
|
39
47
|
#
|
40
48
|
#
|
41
49
|
#
|
42
|
-
def
|
43
|
-
|
50
|
+
def action
|
51
|
+
Thread.current[:action]
|
44
52
|
end
|
45
53
|
|
46
54
|
#
|
47
55
|
#
|
48
56
|
#
|
49
|
-
def
|
50
|
-
|
57
|
+
def query
|
58
|
+
Thread.current[:query]
|
51
59
|
end
|
52
60
|
|
53
61
|
#
|
54
62
|
#
|
55
63
|
#
|
56
|
-
def
|
57
|
-
|
64
|
+
def route
|
65
|
+
Thread.current[:route]
|
58
66
|
end
|
59
|
-
|
67
|
+
|
60
68
|
#
|
61
69
|
#
|
62
70
|
#
|
63
71
|
def session
|
64
72
|
request.session
|
65
73
|
end
|
66
|
-
|
67
|
-
#
|
68
|
-
#
|
69
|
-
#
|
70
|
-
def logger
|
71
|
-
UzuUzu.logger
|
72
|
-
end
|
73
|
-
|
74
|
-
#
|
75
|
-
#
|
76
|
-
#
|
77
|
-
def memcache
|
78
|
-
UzuUzu.memcache
|
79
|
-
end
|
80
|
-
|
81
|
-
#
|
82
|
-
#
|
83
|
-
#
|
84
|
-
def remote_user
|
85
|
-
nil
|
86
|
-
end
|
87
74
|
|
88
75
|
#
|
89
76
|
#
|
@@ -99,15 +86,6 @@ module UzuUzu
|
|
99
86
|
Rack::Utils.unescape(s)
|
100
87
|
end
|
101
88
|
|
102
|
-
#
|
103
|
-
#
|
104
|
-
#
|
105
|
-
def admin?
|
106
|
-
if remote_user
|
107
|
-
remote_user.admin?
|
108
|
-
end
|
109
|
-
end
|
110
|
-
|
111
89
|
#
|
112
90
|
#
|
113
91
|
#
|
@@ -130,6 +108,17 @@ module UzuUzu
|
|
130
108
|
return "" if query_string.blank?
|
131
109
|
"?#{query_string.join('&')}"
|
132
110
|
end
|
111
|
+
|
112
|
+
#
|
113
|
+
#
|
114
|
+
#
|
115
|
+
def instance_variable_map(instance)
|
116
|
+
map = {}
|
117
|
+
instance.instance_variables.each do |variable_name|
|
118
|
+
map[variable_name] = instance.instance_variable_get(variable_name)
|
119
|
+
end
|
120
|
+
map
|
121
|
+
end
|
133
122
|
end # Controller
|
134
123
|
end # Helper
|
135
124
|
end # UzuUzu
|
data/lib/uzuuzu/helper/jquery.rb
CHANGED
@@ -3,17 +3,22 @@
|
|
3
3
|
module UzuUzu
|
4
4
|
module Helper
|
5
5
|
module Renderer
|
6
|
-
extend TiltWrapper
|
7
6
|
|
8
7
|
#
|
9
8
|
#
|
10
9
|
#
|
11
|
-
def render_full(
|
12
|
-
_request
|
10
|
+
def render_full(controller_clazz, action, options={})
|
11
|
+
_request = request
|
12
|
+
_response = response
|
13
|
+
_controller = controller
|
14
|
+
_helper = helper
|
15
|
+
_action = action
|
16
|
+
_query = query
|
17
|
+
_route = route
|
13
18
|
browser = ::Rack::MockRequest.new(::UzuUzu.current)
|
14
|
-
_render_response = browser.get
|
19
|
+
_render_response = browser.get(controller.rf(controller_clazz, action, options))
|
15
20
|
_render = _render_response.body.to_s
|
16
|
-
::UzuUzu.current.di_thread(_request, _response, _controller, _action, _query, _route)
|
21
|
+
::UzuUzu.current.di_thread(_request, _response, _controller, _helper, _action, _query, _route)
|
17
22
|
_render
|
18
23
|
end
|
19
24
|
|
@@ -44,8 +49,8 @@ module UzuUzu
|
|
44
49
|
view_path = nil
|
45
50
|
catch(:view_finded) do
|
46
51
|
::Tilt.mappings.each_key do |key|
|
47
|
-
|
48
|
-
_view_path = "#{view_route}#{
|
52
|
+
application.views.each do |view_route|
|
53
|
+
_view_path = "#{view_route}#{controller.route}/#{view}.#{key}"
|
49
54
|
if ::File.file?(_view_path)
|
50
55
|
view_path = _view_path
|
51
56
|
throw :view_finded
|
@@ -75,7 +80,9 @@ module UzuUzu
|
|
75
80
|
#
|
76
81
|
#
|
77
82
|
def render_engine(view_string, engine=::UzuUzu.engine, options={}, locals={}, &block)
|
78
|
-
|
83
|
+
locals ||= {}
|
84
|
+
locals = locals.merge(instance_variable_map(controller))
|
85
|
+
UzuUzu.render_engine(helper, view_string, engine, options, locals, &block)
|
79
86
|
end
|
80
87
|
|
81
88
|
def send_file()
|
@@ -108,14 +115,14 @@ module UzuUzu
|
|
108
115
|
#
|
109
116
|
#
|
110
117
|
def server_error(code=500, options={})
|
111
|
-
redirect
|
118
|
+
redirect controller.rf(UzuUzu::Controller::Index, :error, code)
|
112
119
|
end # error
|
113
120
|
|
114
121
|
#
|
115
122
|
#
|
116
123
|
#
|
117
124
|
def not_found(code=404, options={})
|
118
|
-
redirect
|
125
|
+
redirect controller.rf(UzuUzu::Controller::Index, :error, code)
|
119
126
|
end
|
120
127
|
|
121
128
|
#
|
data/lib/uzuuzu/helper/route.rb
CHANGED
@@ -4,9 +4,8 @@ module UzuUzu
|
|
4
4
|
module Helper
|
5
5
|
module Route
|
6
6
|
def url_for_controller(controller, *args)
|
7
|
-
|
8
|
-
|
9
|
-
app.controllers.each do |root_controller|
|
7
|
+
route_string = request.env['SCRIPT_NAME'].clone
|
8
|
+
application.controllers.each do |root_controller|
|
10
9
|
re = Regexp.compile("^#{root_controller.name}::")
|
11
10
|
if re =~ controller.name
|
12
11
|
path = controller.name.gsub(re, '').gsub(/Controller$/, '').to_const_path
|
@@ -28,7 +27,7 @@ module UzuUzu
|
|
28
27
|
alias :rf :url_for_controller
|
29
28
|
|
30
29
|
def url_for(*args)
|
31
|
-
route_string =
|
30
|
+
route_string = route.clone
|
32
31
|
if args[-1].kind_of?(Hash)
|
33
32
|
query = query_string(args.pop)
|
34
33
|
end
|
data/lib/uzuuzu/helper/xhtml.rb
CHANGED
@@ -3,40 +3,40 @@
|
|
3
3
|
module UzuUzu
|
4
4
|
module Helper
|
5
5
|
module XHtml
|
6
|
+
|
6
7
|
#
|
7
8
|
#
|
8
9
|
#
|
9
|
-
def
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
def meta(name, content)
|
11
|
+
"<meta name=\"#{name}\" content=\"#{content}\">"
|
12
|
+
end
|
13
|
+
#
|
14
|
+
#
|
15
|
+
#
|
16
|
+
def css(css_path, media='screen')
|
17
|
+
"<link href=\"#{css_path}\" media=\"#{media}\" rel=\"stylesheet\" type=\"text/css\" />"
|
15
18
|
end
|
16
|
-
|
17
19
|
#
|
18
20
|
#
|
19
21
|
#
|
20
22
|
def css_for(*args)
|
21
|
-
args.map
|
23
|
+
args.map do |css_path|
|
24
|
+
css(css_path)
|
25
|
+
end.join("\n")
|
22
26
|
end
|
23
|
-
|
24
27
|
#
|
25
28
|
#
|
26
29
|
#
|
27
|
-
def js(
|
28
|
-
|
29
|
-
"<script src=\"#{name}\" type=\"text/javascript\"></script>"
|
30
|
-
else
|
31
|
-
"<script src=\"/js/#{name}.js\" type=\"text/javascript\"></script>"
|
32
|
-
end
|
30
|
+
def js(js_path)
|
31
|
+
"<script src=\"#{js_path}\" type=\"text/javascript\"></script>"
|
33
32
|
end
|
34
|
-
|
35
33
|
#
|
36
34
|
#
|
37
35
|
#
|
38
36
|
def js_for(*args)
|
39
|
-
args.map
|
37
|
+
args.map do |js_path|
|
38
|
+
js(js_path)
|
39
|
+
end.join("\n")
|
40
40
|
end
|
41
41
|
|
42
42
|
end
|
@@ -5,7 +5,6 @@ module UzuUzu
|
|
5
5
|
#
|
6
6
|
#
|
7
7
|
class Application
|
8
|
-
|
9
8
|
#
|
10
9
|
attr_accessor :name
|
11
10
|
#
|
@@ -19,6 +18,8 @@ module UzuUzu
|
|
19
18
|
#
|
20
19
|
attr_accessor :after_filters
|
21
20
|
#
|
21
|
+
attr_accessor :dicons
|
22
|
+
#
|
22
23
|
attr_accessor :helpers
|
23
24
|
#
|
24
25
|
attr_accessor :views
|
@@ -27,14 +28,14 @@ module UzuUzu
|
|
27
28
|
#
|
28
29
|
#
|
29
30
|
def self.current
|
30
|
-
Thread.current[:application]
|
31
|
+
::Thread.current[:application]
|
31
32
|
end
|
32
33
|
|
33
34
|
#
|
34
35
|
#
|
35
36
|
#
|
36
37
|
def initialize(options={})
|
37
|
-
Thread.current[:application] = self
|
38
|
+
::Thread.current[:application] = self
|
38
39
|
options.each do |key, value|
|
39
40
|
case(key)
|
40
41
|
when :name, 'name'
|
@@ -45,36 +46,70 @@ module UzuUzu
|
|
45
46
|
end if options.kind_of?(Hash)
|
46
47
|
@name ||= :uzuuzu
|
47
48
|
@environments = Environments.new(@config_file)
|
48
|
-
UzuUzu.apps[@name] = self
|
49
|
+
::UzuUzu.apps[@name] = self
|
49
50
|
yield self if block_given?
|
50
51
|
end # initialize
|
51
52
|
|
53
|
+
def self.controllers
|
54
|
+
@@controllers ||= [Controller]
|
55
|
+
end
|
56
|
+
|
52
57
|
def controllers
|
53
|
-
@controllers ||=
|
58
|
+
@controllers ||= self.class.controllers.clone
|
59
|
+
end
|
60
|
+
|
61
|
+
def self.before_filters
|
62
|
+
@@before_filters ||= [Controller.method(:before_all)]
|
54
63
|
end
|
55
64
|
|
56
65
|
def before_filters
|
57
|
-
@before_filters ||=
|
66
|
+
@before_filters ||= self.class.before_filters.clone
|
58
67
|
end
|
59
68
|
|
69
|
+
def self.after_filters
|
70
|
+
@@after_filters ||= [Controller.method(:after_all)]
|
71
|
+
end
|
72
|
+
|
60
73
|
def after_filters
|
61
|
-
@after_filters ||=
|
74
|
+
@after_filters ||= self.class.after_filters.clone
|
75
|
+
end
|
76
|
+
|
77
|
+
def self.dicons
|
78
|
+
@@dicons ||= [
|
79
|
+
Controller,
|
80
|
+
Helper::Controller,
|
81
|
+
Helper::Renderer,
|
82
|
+
Helper::Localize,
|
83
|
+
Helper::Route,
|
84
|
+
]
|
62
85
|
end
|
63
86
|
|
64
|
-
def
|
65
|
-
@
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
87
|
+
def dicons
|
88
|
+
@dicons ||= self.class.dicons.clone
|
89
|
+
end
|
90
|
+
|
91
|
+
def self.helpers
|
92
|
+
@@helpers ||= [
|
93
|
+
Helper::Controller,
|
94
|
+
Helper::Form,
|
95
|
+
Helper::Jquery,
|
96
|
+
Helper::Localize,
|
97
|
+
Helper::Renderer,
|
98
|
+
Helper::Route,
|
99
|
+
Helper::XHtml
|
73
100
|
]
|
74
101
|
end
|
102
|
+
|
103
|
+
def helpers
|
104
|
+
@helpers ||= self.class.helpers.clone
|
105
|
+
end
|
75
106
|
|
107
|
+
def self.views
|
108
|
+
@@views ||= ['./view']
|
109
|
+
end
|
110
|
+
|
76
111
|
def views
|
77
|
-
@views ||=
|
112
|
+
@views ||= self.class.views.clone
|
78
113
|
end
|
79
114
|
|
80
115
|
#
|
@@ -97,13 +132,14 @@ module UzuUzu
|
|
97
132
|
query = map[:query]
|
98
133
|
route = map[:route]
|
99
134
|
controller = controller_class.new
|
100
|
-
|
135
|
+
include_dicon(controller)
|
136
|
+
helper = Helper::Helper.new
|
137
|
+
include_helper(helper)
|
101
138
|
|
102
139
|
action, query = find_action(controller, query)
|
103
140
|
next if action.blank?
|
104
141
|
is_send = true
|
105
|
-
di_thread(request, response, controller, action, query, route)
|
106
|
-
di_instance(request, response, controller, action, query, route)
|
142
|
+
di_thread(request, response, controller, helper, action, query, route)
|
107
143
|
action_return = send_action(request, response, controller, action, query)
|
108
144
|
if response.body.blank?
|
109
145
|
render = controller.render(action)
|
@@ -175,41 +211,32 @@ module UzuUzu
|
|
175
211
|
end
|
176
212
|
_c
|
177
213
|
end
|
214
|
+
|
178
215
|
#
|
179
216
|
#
|
180
217
|
#
|
181
|
-
def
|
182
|
-
|
183
|
-
controller.
|
218
|
+
def include_dicon(controller)
|
219
|
+
dicons.each do |dicon|
|
220
|
+
controller.extend(dicon)
|
184
221
|
end
|
185
|
-
end #
|
222
|
+
end # include_dicon
|
186
223
|
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
controller.instance_variable_set(:@_request, request)
|
193
|
-
controller.instance_variable_set(:@_response, response)
|
194
|
-
controller.instance_variable_set(:@_action, action)
|
195
|
-
controller.instance_variable_set(:@_query, query)
|
196
|
-
controller.instance_variable_set(:@_route, route)
|
197
|
-
end # di_instance
|
224
|
+
def include_helper(helper)
|
225
|
+
helpers.each do |h|
|
226
|
+
helper.extend(h)
|
227
|
+
end
|
228
|
+
end # include_helper
|
198
229
|
|
199
|
-
def di_thread(request, response, controller, action, query, route)
|
200
|
-
current = Thread.current
|
230
|
+
def di_thread(request, response, controller, helper, action, query, route)
|
231
|
+
current = ::Thread.current
|
201
232
|
current[:request] = request
|
202
233
|
current[:response] = response
|
203
234
|
current[:controller] = controller
|
235
|
+
current[:helper] = helper
|
204
236
|
current[:action] = action
|
205
237
|
current[:query] = query
|
206
238
|
current[:route] = route
|
207
|
-
end
|
208
|
-
|
209
|
-
def get_thread_by_di
|
210
|
-
current = Thread.current
|
211
|
-
[current[:request], current[:response], current[:controller], current[:action], current[:query], current[:route]]
|
212
|
-
end
|
239
|
+
end # di_thread
|
213
240
|
|
214
241
|
#
|
215
242
|
#
|
@@ -268,15 +295,15 @@ module UzuUzu
|
|
268
295
|
before_filters.each do |filter|
|
269
296
|
filter.call if filter.respond_to?(:call)
|
270
297
|
end
|
271
|
-
controller.send(:before
|
272
|
-
controller.send("before_#{action}"
|
298
|
+
controller.send(:before) if controller.respond_to?(:before)
|
299
|
+
controller.send("before_#{action}") if controller.respond_to?("before_#{action}")
|
273
300
|
value = controller.send(action, *query)
|
274
301
|
end
|
275
302
|
catch(:finish) do
|
276
|
-
controller.send("after_#{action}"
|
303
|
+
controller.send("after_#{action}") if controller.respond_to?("after_#{action}")
|
277
304
|
end
|
278
305
|
catch(:finish) do
|
279
|
-
controller.send(:after
|
306
|
+
controller.send(:after) if controller.respond_to?(:after)
|
280
307
|
end
|
281
308
|
after_filters.reverse.each do |filter|
|
282
309
|
catch(:finish) do
|
@@ -287,7 +314,7 @@ module UzuUzu
|
|
287
314
|
end # send_action
|
288
315
|
|
289
316
|
def error(code, request, response)
|
290
|
-
UzuUzu.logger.debug "error : #{code}"
|
317
|
+
::UzuUzu.logger.debug "error : #{code}"
|
291
318
|
uri = "#{request.scheme}://#{request.host}"
|
292
319
|
if (request.scheme == 'https' and request.port != 443) or
|
293
320
|
(request.scheme == 'http' and request.port != 80)
|
@@ -7,15 +7,25 @@ module UzuUzu
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def self.before_all
|
10
|
-
UzuUzu.datastore
|
11
|
-
|
10
|
+
::UzuUzu.datastore
|
11
|
+
::UzuUzu.logger.debug ::UzuUzu::Request.current.params
|
12
12
|
end
|
13
13
|
|
14
14
|
def self.after_all
|
15
15
|
end
|
16
16
|
|
17
|
-
|
18
|
-
|
17
|
+
#
|
18
|
+
#
|
19
|
+
#
|
20
|
+
def logger
|
21
|
+
UzuUzu.logger
|
22
|
+
end
|
23
|
+
|
24
|
+
#
|
25
|
+
#
|
26
|
+
#
|
27
|
+
def memcache
|
28
|
+
UzuUzu.memcache
|
19
29
|
end
|
20
30
|
end # Controller
|
21
31
|
end # UzuUzu
|
@@ -3,12 +3,21 @@
|
|
3
3
|
module UzuUzu
|
4
4
|
module Helper
|
5
5
|
autoload(:Controller, 'uzuuzu/helper/controller')
|
6
|
-
autoload(:Fixture, 'uzuuzu/helper/fixture')
|
7
6
|
autoload(:Form, 'uzuuzu/helper/form')
|
8
7
|
autoload(:Jquery, 'uzuuzu/helper/jquery')
|
9
8
|
autoload(:Localize, 'uzuuzu/helper/localize')
|
10
9
|
autoload(:Renderer, 'uzuuzu/helper/renderer')
|
11
10
|
autoload(:Route, 'uzuuzu/helper/route')
|
12
11
|
autoload(:XHtml, 'uzuuzu/helper/xhtml')
|
12
|
+
|
13
|
+
def self.current
|
14
|
+
Thread.current[:helper]
|
15
|
+
end
|
16
|
+
|
17
|
+
#
|
18
|
+
#
|
19
|
+
#
|
20
|
+
class Helper
|
21
|
+
end
|
13
22
|
end
|
14
23
|
end
|
data/uzuuzu-core.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{uzuuzu-core}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.8"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Takuya Kondo"]
|
12
|
-
s.date = %q{2011-08
|
12
|
+
s.date = %q{2011-09-08}
|
13
13
|
s.description = %q{uzuuzu core library}
|
14
14
|
s.email = %q{takuya.v3v@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -28,7 +28,6 @@ Gem::Specification.new do |s|
|
|
28
28
|
"VERSION",
|
29
29
|
"lib/uzuuzu-core.rb",
|
30
30
|
"lib/uzuuzu/helper/controller.rb",
|
31
|
-
"lib/uzuuzu/helper/fixture.rb",
|
32
31
|
"lib/uzuuzu/helper/form.rb",
|
33
32
|
"lib/uzuuzu/helper/jquery.rb",
|
34
33
|
"lib/uzuuzu/helper/localize.rb",
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: uzuuzu-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.8
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Takuya Kondo
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-08
|
13
|
+
date: 2011-09-08 00:00:00 +09:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -133,7 +133,6 @@ files:
|
|
133
133
|
- VERSION
|
134
134
|
- lib/uzuuzu-core.rb
|
135
135
|
- lib/uzuuzu/helper/controller.rb
|
136
|
-
- lib/uzuuzu/helper/fixture.rb
|
137
136
|
- lib/uzuuzu/helper/form.rb
|
138
137
|
- lib/uzuuzu/helper/jquery.rb
|
139
138
|
- lib/uzuuzu/helper/localize.rb
|
@@ -173,7 +172,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
173
172
|
requirements:
|
174
173
|
- - ">="
|
175
174
|
- !ruby/object:Gem::Version
|
176
|
-
hash: -
|
175
|
+
hash: -3233450064445015537
|
177
176
|
segments:
|
178
177
|
- 0
|
179
178
|
version: "0"
|