wee 0.5.0 → 0.6.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.
- data/ChangeLog +132 -0
- data/INSTALL +13 -3
- data/README +3 -3
- data/Rakefile +5 -1
- data/bin/wee +100 -0
- data/doc/rdoc/classes/Array.html +12 -12
- data/doc/rdoc/classes/Cache/StorageCache.html +38 -38
- data/doc/rdoc/classes/Cache/Strategy/CapacityBounded.html +30 -30
- data/doc/rdoc/classes/Cache/Strategy/LFU.html +24 -24
- data/doc/rdoc/classes/Cache/Strategy/LRU.html +24 -24
- data/doc/rdoc/classes/Cache/Strategy/Unbounded.html +24 -24
- data/doc/rdoc/classes/Enumerable.html +6 -6
- data/doc/rdoc/classes/Main.html +265 -0
- data/doc/rdoc/classes/Object.html +12 -12
- data/doc/rdoc/classes/OgApplication.html +2 -2
- data/doc/rdoc/classes/OgScaffolder.html +444 -64
- data/doc/rdoc/classes/OgScaffolder/Editor.html +490 -0
- data/doc/rdoc/classes/OgSession.html +4 -4
- data/doc/rdoc/classes/Recipe.html +113 -0
- data/doc/rdoc/classes/String.html +12 -12
- data/doc/rdoc/classes/Struct.html +12 -12
- data/doc/rdoc/classes/Wee.html +10 -1
- data/doc/rdoc/classes/Wee/AnswerDecoration.html +9 -9
- data/doc/rdoc/classes/Wee/Application.html +48 -47
- data/doc/rdoc/classes/Wee/Brush.html +19 -23
- data/doc/rdoc/classes/Wee/Brush/AnchorTag.html +17 -14
- data/doc/rdoc/classes/Wee/Brush/FileUploadTag.html +20 -14
- data/doc/rdoc/classes/Wee/Brush/FormTag.html +25 -21
- data/doc/rdoc/classes/Wee/Brush/GenericEncodedTextBrush.html +12 -12
- data/doc/rdoc/classes/Wee/Brush/GenericSingleTagBrush.html +7 -7
- data/doc/rdoc/classes/Wee/Brush/GenericTagBrush.html +234 -100
- data/doc/rdoc/classes/Wee/Brush/GenericTextBrush.html +12 -12
- data/doc/rdoc/classes/Wee/Brush/ImageButtonTag.html +28 -22
- data/doc/rdoc/classes/Wee/Brush/ImageTag.html +23 -24
- data/doc/rdoc/classes/Wee/Brush/InputTag.html +14 -14
- data/doc/rdoc/classes/Wee/Brush/JavascriptTag.html +7 -7
- data/doc/rdoc/classes/Wee/Brush/Page.html +14 -14
- data/doc/rdoc/classes/Wee/Brush/SelectListTag.html +33 -57
- data/doc/rdoc/classes/Wee/Brush/SelectListTag/SelectListCallback.html +154 -0
- data/doc/rdoc/classes/Wee/Brush/SelectOptionTag.html +7 -7
- data/doc/rdoc/classes/Wee/Brush/SubmitButtonTag.html +20 -14
- data/doc/rdoc/classes/Wee/Brush/TableDataTag.html +14 -14
- data/doc/rdoc/classes/Wee/Brush/TableHeaderTag.html +7 -7
- data/doc/rdoc/classes/Wee/Brush/TableRowTag.html +42 -42
- data/doc/rdoc/classes/Wee/Brush/TableTag.html +7 -7
- data/doc/rdoc/classes/Wee/Brush/TextAreaTag.html +27 -21
- data/doc/rdoc/classes/Wee/Brush/TextInputTag.html +20 -14
- data/doc/rdoc/classes/Wee/CallbackRegistry.html +64 -36
- data/doc/rdoc/classes/Wee/CallbackStream.html +21 -21
- data/doc/rdoc/classes/Wee/Canvas.html +24 -24
- data/doc/rdoc/classes/Wee/Component.html +179 -151
- data/doc/rdoc/classes/Wee/Component/OnAnswer.html +12 -12
- data/doc/rdoc/classes/Wee/Decoration.html +42 -42
- data/doc/rdoc/classes/Wee/Delegate.html +27 -27
- data/doc/rdoc/classes/Wee/ErrorResponse.html +14 -14
- data/doc/rdoc/classes/Wee/FormDecoration.html +6 -6
- data/doc/rdoc/classes/Wee/GenericResponse.html +7 -7
- data/doc/rdoc/classes/Wee/HtmlCanvas.html +326 -219
- data/doc/rdoc/classes/Wee/HtmlWriter.html +40 -40
- data/doc/rdoc/classes/Wee/LiteralMethodCallback.html +19 -19
- data/doc/rdoc/classes/Wee/Md5IdGenerator.html +181 -0
- data/doc/rdoc/classes/Wee/MessageBox.html +12 -12
- data/doc/rdoc/classes/Wee/PageDecoration.html +18 -18
- data/doc/rdoc/classes/Wee/PagelessApplication.html +152 -0
- data/doc/rdoc/classes/Wee/PagelessRequest.html +177 -0
- data/doc/rdoc/classes/Wee/PagelessSession.html +320 -0
- data/doc/rdoc/classes/Wee/Presenter.html +145 -89
- data/doc/rdoc/classes/Wee/RedirectResponse.html +7 -7
- data/doc/rdoc/classes/Wee/RefreshResponse.html +7 -7
- data/doc/rdoc/classes/Wee/Request.html +116 -50
- data/doc/rdoc/classes/Wee/RequestHandler.html +31 -31
- data/doc/rdoc/classes/Wee/Response.html +76 -28
- data/doc/rdoc/classes/Wee/Session.html +129 -506
- data/doc/rdoc/classes/Wee/SimpleIdGenerator.html +22 -40
- data/doc/rdoc/classes/Wee/Snapshot.html +19 -19
- data/doc/rdoc/classes/Wee/Utils.html +70 -17
- data/doc/rdoc/classes/Wee/Utils/LRUCache.html +6 -6
- data/doc/rdoc/classes/Wee/ValueHolder.html +18 -18
- data/doc/rdoc/classes/Wee/WEBrickAdaptor.html +82 -49
- data/doc/rdoc/classes/Wee/WrapperDecoration.html +6 -6
- data/doc/rdoc/created.rid +1 -1
- data/doc/rdoc/files/INSTALL.html +17 -5
- data/doc/rdoc/files/README.html +9 -11
- data/doc/rdoc/files/lib/wee/adaptors/webrick_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/application_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/components/page_decoration_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/continuation/session_rb.html +1 -3
- data/doc/rdoc/files/lib/wee/core/callback_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/core/component_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/core_rb.html +3 -3
- data/doc/rdoc/files/lib/wee/databases/og/application_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/databases/og/old_scaffolder_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/databases/og/scaffolder_rb.html +108 -0
- data/doc/rdoc/files/lib/wee/databases/og/session_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/databases/og_rb.html +4 -1
- data/doc/rdoc/files/lib/wee/idgen/md5_rb.html +115 -0
- data/doc/rdoc/files/lib/wee/idgen/simple_rb.html +107 -0
- data/doc/rdoc/files/lib/wee/pageless/application_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/pageless/request_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/pageless/session_rb.html +108 -0
- data/doc/rdoc/files/lib/wee/pageless_rb.html +110 -0
- data/doc/rdoc/files/lib/wee/renderer/html/brushes_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/renderer/html/canvas_rb.html +8 -1
- data/doc/rdoc/files/lib/wee/request_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/response_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/session_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/skeleton/og/components/main_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/skeleton/og/conf/db_rb.html +114 -0
- data/doc/rdoc/files/lib/wee/skeleton/og/models/recipe_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/skeleton/og/run_rb.html +115 -0
- data/doc/rdoc/files/lib/wee/skeleton/simple/components/main_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/skeleton/simple/run_rb.html +111 -0
- data/doc/rdoc/files/lib/wee/template_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/utils/autoreload_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/utils/helper_rb.html +1 -1
- data/doc/rdoc/files/lib/wee_rb.html +4 -2
- data/doc/rdoc/fr_class_index.html +8 -4
- data/doc/rdoc/fr_file_index.html +17 -1
- data/doc/rdoc/fr_method_index.html +312 -267
- data/examples/live-update.rb +1 -1
- data/install.rb +14 -0
- data/lib/wee.rb +6 -2
- data/lib/wee/adaptors/webrick.rb +17 -5
- data/lib/wee/application.rb +2 -1
- data/lib/wee/continuation/session.rb +1 -146
- data/lib/wee/core/callback.rb +11 -5
- data/lib/wee/core/component.rb +14 -10
- data/lib/wee/databases/og.rb +3 -113
- data/lib/wee/databases/og/application.rb +3 -0
- data/lib/wee/databases/og/old_scaffolder.rb +98 -0
- data/lib/wee/databases/og/scaffolder.rb +174 -0
- data/lib/wee/databases/og/session.rb +9 -0
- data/lib/wee/idgen/md5.rb +21 -0
- data/lib/wee/{idgen.rb → idgen/simple.rb} +2 -4
- data/lib/wee/pageless.rb +3 -0
- data/lib/wee/pageless/application.rb +9 -0
- data/lib/wee/pageless/request.rb +15 -0
- data/lib/wee/pageless/session.rb +89 -0
- data/lib/wee/renderer/html/brushes.rb +100 -115
- data/lib/wee/renderer/html/canvas.rb +32 -2
- data/lib/wee/request.rb +36 -24
- data/lib/wee/response.rb +8 -1
- data/lib/wee/session.rb +13 -7
- data/lib/wee/skeleton/og/README +38 -0
- data/lib/wee/skeleton/og/components/main.rb +16 -0
- data/lib/wee/skeleton/og/conf/db.rb +8 -0
- data/lib/wee/skeleton/og/models/recipe.rb +5 -0
- data/lib/wee/skeleton/og/run.rb +23 -0
- data/lib/wee/skeleton/simple/README +32 -0
- data/lib/wee/skeleton/simple/components/main.rb +25 -0
- data/lib/wee/skeleton/simple/run.rb +12 -0
- data/lib/wee/template.rb +28 -0
- data/lib/wee/utils/autoreload.rb +29 -0
- data/lib/wee/utils/helper.rb +9 -5
- data/test/test_request.rb +4 -3
- data/wee.gemspec +3 -1
- metadata +91 -22
|
@@ -47,45 +47,36 @@ class Brush::GenericEncodedTextBrush < Brush
|
|
|
47
47
|
end
|
|
48
48
|
end
|
|
49
49
|
|
|
50
|
-
|
|
51
|
-
private
|
|
50
|
+
class Brush::GenericTagBrush < Brush
|
|
52
51
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
52
|
+
class << self
|
|
53
|
+
private
|
|
54
|
+
|
|
55
|
+
def bool_attr(*attrs)
|
|
56
|
+
attrs.each { |a|
|
|
57
|
+
class_eval "
|
|
58
|
+
def #{ a }(bool=true)
|
|
59
|
+
if bool
|
|
60
|
+
@attributes['#{ a }'] = nil
|
|
61
|
+
else
|
|
62
|
+
@attributes.delete('#{ a }')
|
|
63
|
+
end
|
|
64
|
+
self
|
|
65
|
+
end
|
|
66
|
+
"
|
|
67
|
+
}
|
|
60
68
|
end
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
class Brush::GenericTagBrush < Brush
|
|
65
69
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
@attributes['#{ a }'] = nil
|
|
72
|
-
else
|
|
73
|
-
@attributes.delete('#{ a }')
|
|
70
|
+
def html_attr(*attrs)
|
|
71
|
+
attrs.each { |a|
|
|
72
|
+
class_eval "
|
|
73
|
+
def #{ a }(value)
|
|
74
|
+
html_attr('#{ a }', value)
|
|
74
75
|
end
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
}
|
|
79
|
-
end
|
|
76
|
+
"
|
|
77
|
+
}
|
|
78
|
+
end
|
|
80
79
|
|
|
81
|
-
def self.html_attr(*attrs)
|
|
82
|
-
attrs.each { |a|
|
|
83
|
-
class_eval "
|
|
84
|
-
def #{ a }(value)
|
|
85
|
-
html_attr('#{ a }', value)
|
|
86
|
-
end
|
|
87
|
-
"
|
|
88
|
-
}
|
|
89
80
|
end
|
|
90
81
|
|
|
91
82
|
private
|
|
@@ -99,8 +90,45 @@ class Brush::GenericTagBrush < Brush
|
|
|
99
90
|
self
|
|
100
91
|
end
|
|
101
92
|
|
|
93
|
+
# Converts the arguments into a callable object.
|
|
94
|
+
#
|
|
95
|
+
def to_callback(symbol, args, block)
|
|
96
|
+
raise ArgumentError if symbol and block
|
|
97
|
+
if symbol.nil?
|
|
98
|
+
raise ArgumentError if not args.empty?
|
|
99
|
+
block
|
|
100
|
+
else
|
|
101
|
+
if symbol.is_a?(Symbol) or symbol.is_a?(String)
|
|
102
|
+
Wee::LiteralMethodCallback.new(@canvas.current_component, symbol, *args)
|
|
103
|
+
else
|
|
104
|
+
raise ArgumentError if not args.empty?
|
|
105
|
+
symbol
|
|
106
|
+
end
|
|
107
|
+
end
|
|
108
|
+
end
|
|
109
|
+
|
|
102
110
|
public
|
|
103
111
|
|
|
112
|
+
def __input_callback(symbol=nil, *args, &block)
|
|
113
|
+
name(@canvas.register_callback(:input, to_callback(symbol, args, block)))
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
def __action_callback(symbol=nil, *args, &block)
|
|
117
|
+
name(@canvas.register_callback(:action, to_callback(symbol, args, block)))
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
# The callback id is listed in the URL (not as a form-data field)
|
|
121
|
+
|
|
122
|
+
def __actionurl_callback(symbol=nil, *args, &block)
|
|
123
|
+
__set_url(@canvas.url_for_callback(to_callback(symbol, args, block)))
|
|
124
|
+
end
|
|
125
|
+
|
|
126
|
+
# The callback id is listed in the URL (not as a form-data field)
|
|
127
|
+
|
|
128
|
+
def __actionurl_named_callback(name, symbol=nil, *args, &block)
|
|
129
|
+
__set_url(@canvas.url_for_named_callback(name, to_callback(symbol, args, block)))
|
|
130
|
+
end
|
|
131
|
+
|
|
104
132
|
def method_missing(id, attr)
|
|
105
133
|
html_attr(id.to_s, attr)
|
|
106
134
|
end
|
|
@@ -117,8 +145,6 @@ class Brush::GenericTagBrush < Brush
|
|
|
117
145
|
html_attr("class", c)
|
|
118
146
|
end
|
|
119
147
|
|
|
120
|
-
include Brush::ToCallback
|
|
121
|
-
|
|
122
148
|
def onclick_callback(symbol=nil, *args, &block)
|
|
123
149
|
raise ArgumentError if symbol and block
|
|
124
150
|
url = @canvas.url_for_callback(to_callback(symbol, args, block))
|
|
@@ -128,8 +154,7 @@ class Brush::GenericTagBrush < Brush
|
|
|
128
154
|
# This method construct the css-class attribute by looking up the property
|
|
129
155
|
# from the current component.
|
|
130
156
|
|
|
131
|
-
def css_class_for(
|
|
132
|
-
prop = 'css.' + c
|
|
157
|
+
def css_class_for(prop)
|
|
133
158
|
val = @canvas.current_component.lookup_property(prop)
|
|
134
159
|
raise "no property found for: <#{ prop }>" if val.nil?
|
|
135
160
|
css_class(val)
|
|
@@ -167,8 +192,7 @@ class Brush::ImageTag < Brush::GenericSingleTagBrush
|
|
|
167
192
|
# This method construct the src attribute by looking up the property from the
|
|
168
193
|
# current component.
|
|
169
194
|
|
|
170
|
-
def src_for(
|
|
171
|
-
prop = "img." + s
|
|
195
|
+
def src_for(prop)
|
|
172
196
|
val = @canvas.current_component.lookup_property(prop)
|
|
173
197
|
raise "no property found for: <#{ prop }>" if val.nil?
|
|
174
198
|
src(val)
|
|
@@ -248,7 +272,6 @@ class Brush::TableRowTag < Brush::GenericTagBrush
|
|
|
248
272
|
end
|
|
249
273
|
end
|
|
250
274
|
|
|
251
|
-
|
|
252
275
|
class Brush::InputTag < Brush::GenericSingleTagBrush
|
|
253
276
|
def initialize
|
|
254
277
|
super('input')
|
|
@@ -262,48 +285,13 @@ class Brush::InputTag < Brush::GenericSingleTagBrush
|
|
|
262
285
|
end
|
|
263
286
|
end
|
|
264
287
|
|
|
265
|
-
|
|
266
|
-
module Brush::InputCallbackMixin
|
|
267
|
-
public
|
|
268
|
-
|
|
269
|
-
def callback(symbol=nil, *args, &block)
|
|
270
|
-
raise ArgumentError if symbol and block
|
|
271
|
-
name(@canvas.register_callback(:input, to_callback(symbol, args, block)))
|
|
272
|
-
end
|
|
273
|
-
|
|
274
|
-
include Brush::ToCallback
|
|
275
|
-
end
|
|
276
|
-
|
|
277
|
-
module Brush::ActionCallbackMixin
|
|
278
|
-
public
|
|
279
|
-
|
|
280
|
-
def callback(symbol=nil, *args, &block)
|
|
281
|
-
raise ArgumentError if symbol and block
|
|
282
|
-
name(@canvas.register_callback(:action, to_callback(symbol, args, block)))
|
|
283
|
-
end
|
|
284
|
-
|
|
285
|
-
include Brush::ToCallback
|
|
286
|
-
end
|
|
287
|
-
|
|
288
|
-
# The callback id is listed in the URL (not as a form-data field)
|
|
289
|
-
module Brush::ActionURLCallbackMixin
|
|
290
|
-
public
|
|
291
|
-
|
|
292
|
-
def callback(symbol=nil, *args, &block)
|
|
293
|
-
raise ArgumentError if symbol and block
|
|
294
|
-
__set_url(@canvas.url_for_callback(to_callback(symbol, args, block)))
|
|
295
|
-
end
|
|
296
|
-
|
|
297
|
-
include Brush::ToCallback
|
|
298
|
-
end
|
|
299
|
-
|
|
300
288
|
class Brush::TextAreaTag < Brush::GenericTagBrush
|
|
301
|
-
include Brush::InputCallbackMixin
|
|
302
|
-
|
|
303
289
|
def initialize
|
|
304
290
|
super('textarea')
|
|
305
291
|
end
|
|
306
292
|
|
|
293
|
+
alias callback __input_callback
|
|
294
|
+
|
|
307
295
|
html_attr :name, :rows, :cols, :tabindex, :accesskey, :onfocus, :onblur, :onselect, :onchange
|
|
308
296
|
bool_attr :disabled, :readonly
|
|
309
297
|
|
|
@@ -321,8 +309,6 @@ class Brush::SelectOptionTag < Brush::GenericTagBrush
|
|
|
321
309
|
end
|
|
322
310
|
|
|
323
311
|
class Brush::SelectListTag < Brush::GenericTagBrush
|
|
324
|
-
include Brush::InputCallbackMixin
|
|
325
|
-
|
|
326
312
|
def initialize(items)
|
|
327
313
|
super('select')
|
|
328
314
|
@items = items
|
|
@@ -339,32 +325,34 @@ class Brush::SelectListTag < Brush::GenericTagBrush
|
|
|
339
325
|
|
|
340
326
|
bool_attr :multiple
|
|
341
327
|
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
def callback(symbol=nil, &block)
|
|
345
|
-
raise ArgumentError if symbol and block
|
|
346
|
-
block = Wee::LiteralMethodCallback.new(@canvas.current_component, symbol) unless block
|
|
347
|
-
|
|
348
|
-
@callback = block
|
|
328
|
+
def callback(symbol=nil, *args, &block)
|
|
329
|
+
@callback = to_callback(symbol, args, block)
|
|
349
330
|
self
|
|
350
331
|
end
|
|
351
332
|
|
|
333
|
+
class SelectListCallback < Struct.new(:callback, :items, :is_multiple)
|
|
334
|
+
def call(input)
|
|
335
|
+
choosen = input.list.map {|idx|
|
|
336
|
+
idx = Integer(idx)
|
|
337
|
+
raise "invalid index in select list" if idx < 0 or idx > items.size
|
|
338
|
+
items[idx]
|
|
339
|
+
}
|
|
340
|
+
if choosen.size > 1 and not is_multiple
|
|
341
|
+
raise "choosen more than one element from a non-multiple select list"
|
|
342
|
+
end
|
|
343
|
+
callback.call(choosen)
|
|
344
|
+
end
|
|
345
|
+
end
|
|
346
|
+
|
|
352
347
|
def with
|
|
353
348
|
@labels ||= @items.collect { |i| i.to_s }
|
|
354
349
|
@selected ||= Array.new
|
|
355
350
|
|
|
356
351
|
if @callback
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
@items[idx]
|
|
362
|
-
}
|
|
363
|
-
if choosen.size > 1 and not @attributes.has_key?('multiple')
|
|
364
|
-
raise "choosen more than one element from a non-multiple select list"
|
|
365
|
-
end
|
|
366
|
-
@callback.call(choosen)
|
|
367
|
-
}
|
|
352
|
+
# A callback was specified. We have to wrap it inside a
|
|
353
|
+
# SelectListCallback object as we want to perform some
|
|
354
|
+
# additional actions.
|
|
355
|
+
__input_callback(SelectListCallback.new(@callback, @items, @attributes.has_key?('multiple')))
|
|
368
356
|
end
|
|
369
357
|
|
|
370
358
|
super do
|
|
@@ -376,32 +364,30 @@ class Brush::SelectListTag < Brush::GenericTagBrush
|
|
|
376
364
|
end
|
|
377
365
|
|
|
378
366
|
class Brush::TextInputTag < Brush::InputTag
|
|
379
|
-
include Brush::InputCallbackMixin
|
|
380
|
-
|
|
381
367
|
def initialize
|
|
382
368
|
super
|
|
383
369
|
type('text')
|
|
384
370
|
end
|
|
371
|
+
|
|
372
|
+
alias callback __input_callback
|
|
385
373
|
end
|
|
386
374
|
|
|
387
375
|
class Brush::FileUploadTag < Brush::InputTag
|
|
388
|
-
include Brush::InputCallbackMixin
|
|
389
|
-
|
|
390
376
|
def initialize
|
|
391
377
|
super
|
|
392
378
|
type('file')
|
|
393
379
|
end
|
|
394
|
-
end
|
|
395
|
-
|
|
396
380
|
|
|
381
|
+
alias callback __input_callback
|
|
382
|
+
end
|
|
397
383
|
|
|
398
384
|
class Brush::SubmitButtonTag < Brush::InputTag
|
|
399
|
-
include Brush::ActionCallbackMixin
|
|
400
|
-
|
|
401
385
|
def initialize
|
|
402
386
|
super
|
|
403
387
|
type('submit')
|
|
404
388
|
end
|
|
389
|
+
|
|
390
|
+
alias callback __action_callback
|
|
405
391
|
end
|
|
406
392
|
|
|
407
393
|
# NOTE: The form-fields returned by a image-button-tag is browser-specific.
|
|
@@ -412,19 +398,18 @@ end
|
|
|
412
398
|
# generate a "name" fields in the request, to make this image-button work.
|
|
413
399
|
|
|
414
400
|
class Brush::ImageButtonTag < Brush::InputTag
|
|
415
|
-
include Brush::ActionCallbackMixin
|
|
416
|
-
|
|
417
401
|
def initialize
|
|
418
402
|
super
|
|
419
403
|
type('image')
|
|
420
404
|
end
|
|
421
405
|
|
|
406
|
+
alias callback __action_callback
|
|
407
|
+
|
|
422
408
|
def value(v)
|
|
423
409
|
raise "specified value will not be used in the request"
|
|
424
410
|
end
|
|
425
411
|
end
|
|
426
412
|
|
|
427
|
-
|
|
428
413
|
class Brush::TableDataTag < Brush::GenericTagBrush
|
|
429
414
|
def initialize
|
|
430
415
|
super('td')
|
|
@@ -441,10 +426,7 @@ class Brush::TableHeaderTag < Brush::GenericTagBrush
|
|
|
441
426
|
end
|
|
442
427
|
end
|
|
443
428
|
|
|
444
|
-
|
|
445
429
|
class Brush::FormTag < Brush::GenericTagBrush
|
|
446
|
-
include Brush::ActionURLCallbackMixin
|
|
447
|
-
|
|
448
430
|
def initialize
|
|
449
431
|
super('form')
|
|
450
432
|
@attributes['method'] = 'POST'
|
|
@@ -453,11 +435,14 @@ class Brush::FormTag < Brush::GenericTagBrush
|
|
|
453
435
|
html_attr :action, :enctype
|
|
454
436
|
|
|
455
437
|
alias __set_url action
|
|
438
|
+
alias callback __actionurl_callback
|
|
439
|
+
alias named_callback __actionurl_named_callback
|
|
456
440
|
|
|
457
441
|
def with(*args, &block)
|
|
458
442
|
# If no action was specified, use a dummy one.
|
|
459
443
|
unless @attributes.has_key?('action')
|
|
460
444
|
req = @canvas.rendering_context.request
|
|
445
|
+
# TODO?
|
|
461
446
|
@attributes['action'] = req.build_url(req.request_handler_id, req.page_id)
|
|
462
447
|
end
|
|
463
448
|
super
|
|
@@ -465,8 +450,6 @@ class Brush::FormTag < Brush::GenericTagBrush
|
|
|
465
450
|
end
|
|
466
451
|
|
|
467
452
|
class Brush::AnchorTag < Brush::GenericTagBrush
|
|
468
|
-
include Brush::ActionURLCallbackMixin
|
|
469
|
-
|
|
470
453
|
def initialize
|
|
471
454
|
super('a')
|
|
472
455
|
end
|
|
@@ -474,10 +457,12 @@ class Brush::AnchorTag < Brush::GenericTagBrush
|
|
|
474
457
|
html_attr :href, :title
|
|
475
458
|
alias url href
|
|
476
459
|
alias tooltip title
|
|
460
|
+
|
|
477
461
|
alias __set_url url
|
|
462
|
+
alias callback __actionurl_callback
|
|
463
|
+
alias named_callback __actionurl_named_callback
|
|
478
464
|
end
|
|
479
465
|
|
|
480
|
-
|
|
481
466
|
class Brush::Page < Brush
|
|
482
467
|
def title(t)
|
|
483
468
|
@title = t
|
|
@@ -63,11 +63,20 @@ class HtmlCanvas < Canvas
|
|
|
63
63
|
end
|
|
64
64
|
|
|
65
65
|
generic_tag :html, :head, :body, :title, :style, :h1, :h2, :h3, :h4, :h5, :div
|
|
66
|
-
|
|
66
|
+
generic_tag :div, :span, :ul, :ol, :li
|
|
67
|
+
generic_single_tag :link, :hr
|
|
67
68
|
|
|
68
69
|
def url_for_callback(callback)
|
|
70
|
+
url_for_callback_id(register_callback(:action, callback))
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def url_for_named_callback(name, callback)
|
|
74
|
+
url_for_callback_id(register_named_callback(name, :action, callback))
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def url_for_callback_id(callback_id)
|
|
69
78
|
req = self.rendering_context.request
|
|
70
|
-
url = req.build_url(req.request_handler_id, req.page_id,
|
|
79
|
+
url = req.build_url(req.request_handler_id, req.page_id, callback_id)
|
|
71
80
|
return url
|
|
72
81
|
end
|
|
73
82
|
|
|
@@ -75,6 +84,10 @@ class HtmlCanvas < Canvas
|
|
|
75
84
|
self.rendering_context.callbacks.register_for(self.current_component, type, callback)
|
|
76
85
|
end
|
|
77
86
|
|
|
87
|
+
def register_named_callback(name, type, callback)
|
|
88
|
+
self.rendering_context.callbacks.register_named_for(self.current_component, type, callback, name)
|
|
89
|
+
end
|
|
90
|
+
|
|
78
91
|
def table(*args, &block)
|
|
79
92
|
handle(Brush::TableTag.new, *args, &block)
|
|
80
93
|
end
|
|
@@ -178,6 +191,23 @@ class HtmlCanvas < Canvas
|
|
|
178
191
|
nil
|
|
179
192
|
end
|
|
180
193
|
|
|
194
|
+
require 'erb'
|
|
195
|
+
|
|
196
|
+
def template(filename)
|
|
197
|
+
raise "Template file #{ filename } not found!" unless File.exists?(filename)
|
|
198
|
+
self.close
|
|
199
|
+
compiler = ERB::Compiler.new(nil)
|
|
200
|
+
compiler.put_cmd = 'r << '
|
|
201
|
+
src = compiler.compile(File.read(filename))
|
|
202
|
+
if $DEBUG
|
|
203
|
+
puts "-------------------------"
|
|
204
|
+
puts src
|
|
205
|
+
puts "-------------------------"
|
|
206
|
+
end
|
|
207
|
+
@current_component.instance_eval(src, '(erb)', 1)
|
|
208
|
+
return nil
|
|
209
|
+
end
|
|
210
|
+
|
|
181
211
|
private
|
|
182
212
|
|
|
183
213
|
def handle(brush, *args, &block)
|
data/lib/wee/request.rb
CHANGED
|
@@ -6,11 +6,40 @@
|
|
|
6
6
|
|
|
7
7
|
class Wee::Request
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
DELIM = '=/'
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
11
|
+
attr_accessor :request_handler_id
|
|
12
|
+
attr_reader :page_id, :fields, :cookies
|
|
13
13
|
|
|
14
|
+
def initialize(app_path, path, headers, fields, cookies)
|
|
15
|
+
@app_path, @path, @headers, @cookies = app_path, path, headers, cookies
|
|
16
|
+
parse_fields(fields)
|
|
17
|
+
parse_path
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def application_path
|
|
21
|
+
@app_path
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def build_url(request_handler_id=nil, page_id=nil, callback_id=nil)
|
|
25
|
+
raise ArgumentError if request_handler_id.nil? and not page_id.nil?
|
|
26
|
+
|
|
27
|
+
arr = [request_handler_id, page_id].compact
|
|
28
|
+
|
|
29
|
+
url = ""
|
|
30
|
+
url << @app_path
|
|
31
|
+
unless arr.empty?
|
|
32
|
+
url << '/' if url[-1,1] != '/' # /appXXX -> /app/XXX
|
|
33
|
+
url << (DELIM + arr.join('/'))
|
|
34
|
+
end
|
|
35
|
+
url << ('?' + callback_id) if callback_id
|
|
36
|
+
|
|
37
|
+
return url
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
private
|
|
41
|
+
|
|
42
|
+
def parse_fields(fields)
|
|
14
43
|
fields ||= Hash.new
|
|
15
44
|
@fields = Hash.new
|
|
16
45
|
|
|
@@ -29,29 +58,12 @@ class Wee::Request
|
|
|
29
58
|
end
|
|
30
59
|
end
|
|
31
60
|
end
|
|
32
|
-
|
|
33
|
-
full_app_path, req_path = @path.split('@', 2)
|
|
34
|
-
@request_handler_id = @page_id = nil
|
|
35
|
-
@request_handler_id, @page_id = req_path.split('/', 2) if req_path
|
|
36
61
|
end
|
|
37
62
|
|
|
38
|
-
def
|
|
39
|
-
@
|
|
63
|
+
def parse_path
|
|
64
|
+
full_app_path, req_path = @path.split(DELIM, 2)
|
|
65
|
+
@request_handler_id = @page_id = nil
|
|
66
|
+
@request_handler_id, @page_id = req_path.split('/', 2) if req_path
|
|
40
67
|
end
|
|
41
68
|
|
|
42
|
-
def build_url(request_handler_id=nil, page_id=nil, callback_id=nil)
|
|
43
|
-
raise ArgumentError if request_handler_id.nil? and not page_id.nil?
|
|
44
|
-
|
|
45
|
-
arr = [request_handler_id, page_id].compact
|
|
46
|
-
|
|
47
|
-
url = ""
|
|
48
|
-
url << @app_path
|
|
49
|
-
unless arr.empty?
|
|
50
|
-
url << '/' if url[-1,1] != '/' # /app@ -> /app/@
|
|
51
|
-
url << ('@' + arr.join('/'))
|
|
52
|
-
end
|
|
53
|
-
url << ('?' + callback_id) if callback_id
|
|
54
|
-
|
|
55
|
-
return url
|
|
56
|
-
end
|
|
57
69
|
end
|