wee 0.8.0 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- data/ChangeLog +286 -0
- data/Features +185 -0
- data/doc/rdoc/classes/ActionView.html +107 -0
- data/doc/rdoc/classes/ActionView/Base.html +133 -0
- data/doc/rdoc/classes/Array.html +7 -59
- 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/Hash.html +120 -0
- data/doc/rdoc/classes/Main.html +58 -34
- data/doc/rdoc/classes/Object.html +12 -12
- data/doc/rdoc/classes/OgScaffolder.html +165 -166
- data/doc/rdoc/classes/OgScaffolder/Editor.html +112 -112
- data/doc/rdoc/classes/String.html +7 -59
- data/doc/rdoc/classes/Struct.html +14 -14
- data/doc/rdoc/classes/Wee.html +70 -6
- data/doc/rdoc/classes/Wee/AbstractSession.html +502 -0
- data/doc/rdoc/classes/Wee/AnswerDecoration.html +11 -11
- data/doc/rdoc/classes/Wee/Application.html +139 -84
- data/doc/rdoc/classes/Wee/Brush.html +21 -18
- data/doc/rdoc/classes/Wee/Brush/AnchorTag.html +90 -17
- data/doc/rdoc/classes/Wee/Brush/CheckboxTag.html +162 -0
- data/doc/rdoc/classes/Wee/Brush/FileUploadTag.html +7 -7
- data/doc/rdoc/classes/Wee/Brush/FormTag.html +41 -17
- 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 +112 -86
- data/doc/rdoc/classes/Wee/Brush/GenericTextBrush.html +12 -12
- data/doc/rdoc/classes/Wee/Brush/HiddenInputTag.html +160 -0
- data/doc/rdoc/classes/Wee/Brush/ImageButtonTag.html +15 -15
- data/doc/rdoc/classes/Wee/Brush/ImageTag.html +21 -21
- 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/RadioButtonTag.html +234 -0
- data/doc/rdoc/classes/Wee/Brush/RadioButtonTag/RadioGroup.html +207 -0
- data/doc/rdoc/classes/Wee/Brush/SelectListTag.html +124 -28
- data/doc/rdoc/classes/Wee/Brush/SelectListTag/SelectListCallback.html +7 -7
- data/doc/rdoc/classes/Wee/Brush/SelectOptionTag.html +7 -7
- data/doc/rdoc/classes/Wee/Brush/SubmitButtonTag.html +7 -7
- 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 +48 -15
- data/doc/rdoc/classes/Wee/Brush/TextInputTag.html +7 -7
- data/doc/rdoc/classes/Wee/CallbackRegistry.html +38 -38
- data/doc/rdoc/classes/Wee/CallbackStream.html +18 -18
- data/doc/rdoc/classes/Wee/CanvasMixin.html +225 -0
- data/doc/rdoc/classes/Wee/Component.html +202 -201
- data/doc/rdoc/classes/Wee/Component/OnAnswer.html +7 -7
- data/doc/rdoc/classes/Wee/ComponentDispatcher.html +289 -0
- data/doc/rdoc/classes/Wee/ComponentRunner.html +321 -0
- data/doc/rdoc/classes/Wee/Context.html +63 -3
- data/doc/rdoc/classes/Wee/Decoration.html +45 -45
- data/doc/rdoc/classes/Wee/Delegate.html +30 -30
- data/doc/rdoc/classes/Wee/DupReplaceSnapshotMixin.html +164 -0
- data/doc/rdoc/classes/Wee/ErrorResponse.html +16 -16
- data/doc/rdoc/classes/Wee/Examples.html +114 -0
- data/doc/rdoc/classes/Wee/Examples/Calculator.html +319 -0
- data/doc/rdoc/classes/Wee/Examples/Counter.html +289 -0
- data/doc/rdoc/classes/Wee/Examples/EditableCounter.html +210 -0
- data/doc/rdoc/classes/Wee/Examples/Window.html +346 -0
- data/doc/rdoc/classes/Wee/FastCGIAdaptor.html +227 -0
- data/doc/rdoc/classes/Wee/FormDecoration.html +6 -6
- data/doc/rdoc/classes/Wee/GenericResponse.html +7 -7
- data/doc/rdoc/classes/Wee/HtmlCanvasRenderer.html +1230 -0
- data/doc/rdoc/classes/Wee/HtmlWriter.html +40 -40
- data/doc/rdoc/classes/Wee/IdGenerator.html +148 -0
- data/doc/rdoc/classes/Wee/LiteralMethodCallback.html +27 -14
- data/doc/rdoc/classes/Wee/LoginDecoration.html +261 -0
- data/doc/rdoc/classes/Wee/Md5IdGenerator.html +14 -14
- data/doc/rdoc/classes/Wee/MessageBox.html +14 -14
- data/doc/rdoc/classes/Wee/Nitro.html +114 -0
- data/doc/rdoc/classes/Wee/Nitro/ControllerClassMixin.html +192 -0
- data/doc/rdoc/classes/Wee/Nitro/ControllerMixin.html +345 -0
- data/doc/rdoc/classes/Wee/Nitro/FormTag.html +155 -0
- data/doc/rdoc/classes/Wee/Nitro/HtmlCanvasRenderer.html +178 -0
- data/doc/rdoc/classes/Wee/Page.html +4 -0
- data/doc/rdoc/classes/Wee/PageDecoration.html +18 -18
- data/doc/rdoc/classes/Wee/PagelessApplication.html +13 -11
- data/doc/rdoc/classes/Wee/PagelessComponentDriver.html +296 -0
- data/doc/rdoc/classes/Wee/PagelessRequest.html +52 -21
- data/doc/rdoc/classes/Wee/PagelessSession.html +130 -91
- data/doc/rdoc/classes/Wee/Pager.html +534 -0
- data/doc/rdoc/classes/Wee/Presenter.html +482 -298
- data/doc/rdoc/classes/Wee/Rails.html +114 -0
- data/doc/rdoc/classes/Wee/Rails/ControllerClassMixin.html +192 -0
- data/doc/rdoc/classes/Wee/Rails/ControllerMixin.html +342 -0
- data/doc/rdoc/classes/Wee/Rails/FormTag.html +155 -0
- data/doc/rdoc/classes/Wee/Rails/HtmlCanvasRenderer.html +177 -0
- data/doc/rdoc/classes/Wee/RedirectResponse.html +7 -7
- data/doc/rdoc/classes/Wee/RefreshResponse.html +7 -7
- data/doc/rdoc/classes/Wee/Renderer.html +208 -0
- data/doc/rdoc/classes/Wee/RenderingContext.html +175 -3
- data/doc/rdoc/classes/Wee/Request.html +197 -46
- data/doc/rdoc/classes/Wee/RequestHandler.html +31 -31
- data/doc/rdoc/classes/Wee/Response.html +44 -43
- data/doc/rdoc/classes/Wee/Session.html +296 -402
- data/doc/rdoc/classes/Wee/SimpleIdGenerator.html +14 -14
- data/doc/rdoc/classes/Wee/Snapshot.html +19 -19
- data/doc/rdoc/classes/Wee/Utils.html +22 -22
- data/doc/rdoc/classes/Wee/Utils/LRUCache.html +6 -6
- data/doc/rdoc/classes/Wee/ValueHolder.html +19 -19
- data/doc/rdoc/classes/Wee/WEBrickAdaptor.html +72 -46
- data/doc/rdoc/classes/Wee/WrapperDecoration.html +6 -6
- data/doc/rdoc/created.rid +1 -1
- data/doc/rdoc/files/INSTALL.html +1 -1
- data/doc/rdoc/files/README.html +8 -12
- data/doc/rdoc/files/lib/cache/cache_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/abstractsession_rb.html +108 -0
- data/doc/rdoc/files/lib/wee/adaptors/fastcgi_rb.html +108 -0
- data/doc/rdoc/files/lib/wee/adaptors/nitro_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/adaptors/rails_rb.html +101 -0
- 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/component_dispatcher_rb.html +108 -0
- data/doc/rdoc/files/lib/wee/components/form_decoration_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/components/login_decoration_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/components/messagebox_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/components/page_decoration_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/components/pager_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/components/wrapper_decoration_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/components_rb.html +4 -1
- data/doc/rdoc/files/lib/wee/continuation/core/component_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/continuation/session_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/continuation_rb.html +1 -1
- 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/componentrunner_rb.html +110 -0
- data/doc/rdoc/files/lib/wee/core/context_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/core/decoration_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/core/idgen_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/core/page_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/core/presenter_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/core/renderer_rb.html +107 -0
- data/doc/rdoc/files/lib/wee/core/snapshot_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/core/valueholder_rb.html +2 -2
- data/doc/rdoc/files/lib/wee/core_ext_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/core_rb.html +7 -14
- data/doc/rdoc/files/lib/wee/databases/og/application_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/databases/og/old_scaffolder_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/databases/og/scaffolder_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/databases/og/session_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/databases/og_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/examples/calculator_rb.html +107 -0
- data/doc/rdoc/files/lib/wee/examples/counter_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/examples/editable_counter_rb.html +114 -0
- data/doc/rdoc/files/lib/wee/examples/window_rb.html +101 -0
- data/doc/rdoc/files/lib/wee/idgen/md5_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/idgen/simple_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/page_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/pageless/application_rb.html +8 -1
- data/doc/rdoc/files/lib/wee/pageless/request_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/pageless/session_rb.html +2 -1
- data/doc/rdoc/files/lib/wee/pageless_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/renderer/html/brushes_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/renderer/html/canvas_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/renderer/html/writer_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/request_rb.html +5 -4
- data/doc/rdoc/files/lib/wee/requesthandler_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/response_rb.html +2 -1
- data/doc/rdoc/files/lib/wee/session_rb.html +2 -3
- data/doc/rdoc/files/lib/wee/skeleton/og/components/main_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/skeleton/og/conf/db_rb.html +2 -2
- data/doc/rdoc/files/lib/wee/skeleton/og/models/recipe_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/skeleton/og/run_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/skeleton/simple/components/main_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/skeleton/simple/run_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/snapshot_ext_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/template_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/utils/autoreload_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/utils/cache_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/utils/helper_rb.html +1 -1
- data/doc/rdoc/files/lib/wee/utils_rb.html +1 -1
- data/doc/rdoc/files/lib/wee_rb.html +5 -3
- data/doc/rdoc/fr_class_index.html +34 -2
- data/doc/rdoc/fr_file_index.html +17 -1
- data/doc/rdoc/fr_method_index.html +464 -314
- data/examples/ajax/ajax.rb +1 -1
- data/examples/demo.rb +47 -0
- data/examples/{calendar.rb → demo/calendar.rb} +89 -97
- data/examples/{example.rb → demo/example.rb} +17 -97
- data/examples/dispatcher.rb +37 -0
- data/examples/draw.rb +14 -11
- data/examples/nitro/run.rb +42 -0
- data/examples/radio.rb +44 -0
- data/examples/test.rb +3 -27
- data/lib/wee.rb +15 -3
- data/lib/wee/adaptors/nitro.rb +154 -0
- data/lib/wee/adaptors/rails.rb +154 -0
- data/lib/wee/application.rb +22 -20
- data/lib/wee/components.rb +3 -0
- data/lib/wee/components/component_dispatcher.rb +46 -0
- data/lib/wee/components/login_decoration.rb +35 -0
- data/lib/wee/components/messagebox.rb +2 -2
- data/lib/wee/components/pager.rb +102 -0
- data/lib/wee/continuation/core/component.rb +13 -12
- data/lib/wee/continuation/session.rb +11 -19
- data/lib/wee/core.rb +8 -7
- data/lib/wee/core/component.rb +8 -28
- data/lib/wee/core/componentrunner.rb +73 -0
- data/lib/wee/core/context.rb +27 -0
- data/lib/wee/core/idgen.rb +5 -0
- data/lib/wee/core/page.rb +1 -0
- data/lib/wee/core/presenter.rb +10 -126
- data/lib/wee/core/renderer.rb +23 -0
- data/lib/wee/core_ext.rb +122 -0
- data/lib/wee/databases/og/scaffolder.rb +0 -1
- data/lib/wee/examples/calculator.rb +70 -0
- data/lib/wee/examples/counter.rb +33 -0
- data/lib/wee/examples/editable_counter.rb +31 -0
- data/{examples → lib/wee/examples}/window.rb +29 -23
- data/lib/wee/idgen/md5.rb +1 -1
- data/lib/wee/idgen/simple.rb +1 -1
- data/lib/wee/pageless/session.rb +2 -3
- data/lib/wee/renderer/html/brushes.rb +142 -22
- data/lib/wee/renderer/html/canvas.rb +57 -19
- data/lib/wee/response.rb +3 -2
- data/lib/wee/session.rb +10 -54
- data/lib/wee/skeleton/og/components/main.rb +5 -1
- data/lib/wee/skeleton/og/conf/db.rb +1 -1
- data/lib/wee/snapshot_ext.rb +4 -10
- data/lib/wee/template.rb +19 -5
- data/lib/wee/utils/helper.rb +2 -2
- metadata +90 -13
- data/examples/calculator.rb +0 -67
- data/lib/wee/context.rb +0 -2
@@ -0,0 +1,33 @@
|
|
1
|
+
class Wee::Examples::Counter < Wee::Component
|
2
|
+
attr_accessor :count
|
3
|
+
|
4
|
+
def initialize(initial_count=0)
|
5
|
+
super()
|
6
|
+
@count = initial_count
|
7
|
+
end
|
8
|
+
|
9
|
+
def backtrack_state(snap)
|
10
|
+
super
|
11
|
+
snap.add(self)
|
12
|
+
end
|
13
|
+
|
14
|
+
def dec
|
15
|
+
@count -= 1
|
16
|
+
end
|
17
|
+
|
18
|
+
def inc
|
19
|
+
@count += 1
|
20
|
+
end
|
21
|
+
|
22
|
+
def render
|
23
|
+
r.anchor.callback(:dec).with("--")
|
24
|
+
r.space
|
25
|
+
render_count
|
26
|
+
r.space
|
27
|
+
r.anchor.callback(:inc).with("++")
|
28
|
+
end
|
29
|
+
|
30
|
+
def render_count
|
31
|
+
r.text @count.to_s
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
# NEEDS: FormDecoration
|
2
|
+
|
3
|
+
require 'wee/examples/counter'
|
4
|
+
|
5
|
+
class Wee::Examples::EditableCounter < Wee::Examples::Counter
|
6
|
+
|
7
|
+
def initialize(initial_count=0)
|
8
|
+
super
|
9
|
+
@show_edit_field = false
|
10
|
+
end
|
11
|
+
|
12
|
+
def render_count
|
13
|
+
if @show_edit_field
|
14
|
+
r.text_input.callback(:count=).value(@count).size(6)
|
15
|
+
r.submit_button.callback(:submit).value('S')
|
16
|
+
else
|
17
|
+
r.anchor.callback(:submit).with(@count)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
def submit
|
22
|
+
if @count.to_s !~ /^\d+$/
|
23
|
+
call Wee::MessageBox.new("You entered an invalid counter! Please try again!")
|
24
|
+
@count = 0
|
25
|
+
else
|
26
|
+
@show_edit_field = !@show_edit_field
|
27
|
+
end
|
28
|
+
@count = @count.to_i
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -1,12 +1,16 @@
|
|
1
|
-
class Wee::Window < Wee::Component
|
1
|
+
class Wee::Examples::Window < Wee::Component
|
2
2
|
|
3
|
-
|
3
|
+
attr_accessor :title, :pos_x, :pos_y, :child
|
4
|
+
|
5
|
+
def initialize(&block)
|
4
6
|
super()
|
5
|
-
@title = title
|
6
|
-
@child = child
|
7
7
|
@status = :normal
|
8
|
-
|
9
|
-
|
8
|
+
@pos_x, @pos_y = "0px", "0px"
|
9
|
+
block.call(self) if block
|
10
|
+
end
|
11
|
+
|
12
|
+
def children
|
13
|
+
[@child].uniq
|
10
14
|
end
|
11
15
|
|
12
16
|
def process_callbacks(&block)
|
@@ -14,40 +18,42 @@ class Wee::Window < Wee::Component
|
|
14
18
|
super
|
15
19
|
end
|
16
20
|
|
17
|
-
def minimize
|
18
|
-
@status = :minimized
|
19
|
-
end
|
20
|
-
|
21
|
-
def maximize
|
22
|
-
@status = :normal
|
23
|
-
end
|
24
|
-
|
25
|
-
def close
|
26
|
-
@status = :closed
|
27
|
-
end
|
28
|
-
|
29
21
|
def render
|
30
22
|
return if @status == :closed
|
31
23
|
|
32
|
-
r.table.cellspacing(0).style("border:solid 1px grey; position:
|
24
|
+
r.table.cellspacing(0).style("border:solid 1px grey; position: absolute; left: #{@pos_x}; top: #{@pos_y};").with do
|
33
25
|
r.table_row.style("background-color: lightblue; width: 100%").with do
|
34
26
|
r.table_data.style("text-align: left; width: 66%").with(@title)
|
35
27
|
r.table_data.style("text-align: right").with do
|
36
28
|
if @status == :minimized
|
37
|
-
r.anchor.callback
|
29
|
+
r.anchor.callback(:maximize).with("^")
|
38
30
|
else
|
39
|
-
r.anchor.callback
|
31
|
+
r.anchor.callback(:minimize).with("_")
|
40
32
|
end
|
41
33
|
r.space
|
42
|
-
r.anchor.callback
|
34
|
+
r.anchor.callback(:close).with("x")
|
43
35
|
end
|
44
36
|
end
|
45
37
|
r.table_row do
|
46
38
|
r.table_data.colspan(2).with do
|
47
|
-
r.render(@child) if @status == :normal
|
39
|
+
r.render(@child) if @child and @status == :normal
|
48
40
|
end
|
49
41
|
end
|
50
42
|
end
|
51
43
|
end
|
52
44
|
|
45
|
+
public
|
46
|
+
|
47
|
+
def minimize
|
48
|
+
@status = :minimized
|
49
|
+
end
|
50
|
+
|
51
|
+
def maximize
|
52
|
+
@status = :normal
|
53
|
+
end
|
54
|
+
|
55
|
+
def close
|
56
|
+
@status = :closed
|
57
|
+
end
|
58
|
+
|
53
59
|
end
|
data/lib/wee/idgen/md5.rb
CHANGED
data/lib/wee/idgen/simple.rb
CHANGED
data/lib/wee/pageless/session.rb
CHANGED
@@ -5,7 +5,6 @@ require 'cgi'
|
|
5
5
|
# backtrack.
|
6
6
|
|
7
7
|
class Wee::PagelessSession < Wee::Session
|
8
|
-
attr_accessor :root_component
|
9
8
|
undef page_store
|
10
9
|
|
11
10
|
attr_accessor :callbacks
|
@@ -14,7 +13,7 @@ class Wee::PagelessSession < Wee::Session
|
|
14
13
|
def setup(&block)
|
15
14
|
with_session do
|
16
15
|
block.call(self) if block
|
17
|
-
raise ArgumentError, "No
|
16
|
+
raise ArgumentError, "No component runner specified" if @component_runner.nil?
|
18
17
|
end
|
19
18
|
end
|
20
19
|
|
@@ -47,7 +46,7 @@ class Wee::PagelessSession < Wee::Session
|
|
47
46
|
# new page view.
|
48
47
|
|
49
48
|
callback_stream = Wee::CallbackStream.new(self.callbacks, @context.request.fields)
|
50
|
-
send_response =
|
49
|
+
send_response = @component_runner.process_callbacks(callback_stream)
|
51
50
|
|
52
51
|
post_callbacks_hook()
|
53
52
|
|
@@ -154,7 +154,7 @@ class Brush::GenericTagBrush < Brush
|
|
154
154
|
def onclick_update(update_id, symbol=nil, *args, &block)
|
155
155
|
raise ArgumentError if symbol and block
|
156
156
|
url = @canvas.url_for_callback(to_callback(symbol, args, block))
|
157
|
-
onclick("javascript: new Ajax.Updater('#{ update_id }', '#{ url }', {method:'get'});")
|
157
|
+
onclick("javascript: new Ajax.Updater('#{ update_id }', '#{ url }', {method:'get'}); return false;")
|
158
158
|
end
|
159
159
|
|
160
160
|
# This method construct the css-class attribute by looking up the property
|
@@ -301,8 +301,21 @@ class Brush::TextAreaTag < Brush::GenericTagBrush
|
|
301
301
|
html_attr :name, :rows, :cols, :tabindex, :accesskey, :onfocus, :onblur, :onselect, :onchange
|
302
302
|
bool_attr :disabled, :readonly
|
303
303
|
|
304
|
+
def value(val)
|
305
|
+
@value = val
|
306
|
+
self
|
307
|
+
end
|
308
|
+
|
304
309
|
def with(*args, &block)
|
305
|
-
|
310
|
+
if @value
|
311
|
+
if block or !args.empty?
|
312
|
+
raise "please use either method 'value' or 'with'"
|
313
|
+
else
|
314
|
+
super(@value)
|
315
|
+
end
|
316
|
+
else
|
317
|
+
super
|
318
|
+
end
|
306
319
|
end
|
307
320
|
end
|
308
321
|
|
@@ -315,21 +328,36 @@ class Brush::SelectOptionTag < Brush::GenericTagBrush
|
|
315
328
|
end
|
316
329
|
|
317
330
|
class Brush::SelectListTag < Brush::GenericTagBrush
|
331
|
+
|
332
|
+
bool_attr :disabled, :readonly, :multiple
|
333
|
+
alias multi multiple
|
334
|
+
|
318
335
|
def initialize(items)
|
319
336
|
super('select')
|
320
337
|
@items = items
|
321
338
|
end
|
322
339
|
|
323
|
-
|
324
|
-
|
325
|
-
|
326
|
-
@#{ meth } = arg
|
327
|
-
self
|
328
|
-
end
|
329
|
-
]
|
340
|
+
def items(arg)
|
341
|
+
@items = arg
|
342
|
+
self
|
330
343
|
end
|
331
344
|
|
332
|
-
|
345
|
+
def selected(arg=nil, &block)
|
346
|
+
raise if arg and block
|
347
|
+
@selected = arg || block
|
348
|
+
self
|
349
|
+
end
|
350
|
+
|
351
|
+
def labels(arg=nil, &block)
|
352
|
+
raise if arg and block
|
353
|
+
|
354
|
+
if block
|
355
|
+
@labels = proc{|i| block.call(@items[i])}
|
356
|
+
else
|
357
|
+
@labels = arg
|
358
|
+
end
|
359
|
+
self
|
360
|
+
end
|
333
361
|
|
334
362
|
def callback(symbol=nil, *args, &block)
|
335
363
|
@callback = to_callback(symbol, args, block)
|
@@ -367,20 +395,30 @@ class Brush::SelectListTag < Brush::GenericTagBrush
|
|
367
395
|
end
|
368
396
|
|
369
397
|
super do
|
370
|
-
|
398
|
+
meth =
|
399
|
+
if is_multiple
|
371
400
|
@selected ||= Array.new
|
372
|
-
@
|
373
|
-
@canvas.option.value(i).selected(@selected.include?(@items[i])).with(@labels[i])
|
374
|
-
}
|
401
|
+
@selected.kind_of?(Proc) ? (:call) : (:include?)
|
375
402
|
else
|
376
|
-
@
|
377
|
-
@canvas.option.value(i).selected(@selected == @items[i]).with(@labels[i])
|
378
|
-
}
|
403
|
+
@selected.kind_of?(Proc) ? (:call) : (:==)
|
379
404
|
end
|
405
|
+
|
406
|
+
@items.each_index {|i|
|
407
|
+
@canvas.option.value(i).selected(@selected.send(meth, @items[i])).with(@labels[i])
|
408
|
+
}
|
380
409
|
end
|
381
410
|
end
|
382
411
|
end
|
383
412
|
|
413
|
+
class Brush::HiddenInputTag < Brush::InputTag
|
414
|
+
def initialize
|
415
|
+
super
|
416
|
+
type('hidden')
|
417
|
+
end
|
418
|
+
|
419
|
+
alias callback __input_callback
|
420
|
+
end
|
421
|
+
|
384
422
|
class Brush::TextInputTag < Brush::InputTag
|
385
423
|
def initialize
|
386
424
|
super
|
@@ -390,6 +428,64 @@ class Brush::TextInputTag < Brush::InputTag
|
|
390
428
|
alias callback __input_callback
|
391
429
|
end
|
392
430
|
|
431
|
+
class Brush::RadioButtonTag < Brush::InputTag
|
432
|
+
def initialize
|
433
|
+
super
|
434
|
+
type('radio')
|
435
|
+
end
|
436
|
+
|
437
|
+
class RadioGroup
|
438
|
+
def initialize(canvas)
|
439
|
+
@name = canvas.register_callback(:input, self)
|
440
|
+
@callbacks = {}
|
441
|
+
@ids = Wee::SimpleIdGenerator.new
|
442
|
+
end
|
443
|
+
|
444
|
+
def add_callback(callback)
|
445
|
+
value = @ids.next.to_s
|
446
|
+
@callbacks[value] = callback
|
447
|
+
return [@name, value]
|
448
|
+
end
|
449
|
+
|
450
|
+
def call(value)
|
451
|
+
if @callbacks.has_key?(value)
|
452
|
+
cb = @callbacks[value]
|
453
|
+
cb.call(value) if cb
|
454
|
+
else
|
455
|
+
raise "invalid radio button/group value"
|
456
|
+
end
|
457
|
+
end
|
458
|
+
end
|
459
|
+
|
460
|
+
def group(radio_group)
|
461
|
+
@group = radio_group
|
462
|
+
self
|
463
|
+
end
|
464
|
+
|
465
|
+
def callback(symbol=nil, *args, &block)
|
466
|
+
@callback = to_callback(symbol, args, block)
|
467
|
+
self
|
468
|
+
end
|
469
|
+
|
470
|
+
def with
|
471
|
+
if @group
|
472
|
+
n, v = @group.add_callback(@callback)
|
473
|
+
name(n)
|
474
|
+
value(v)
|
475
|
+
end
|
476
|
+
super
|
477
|
+
end
|
478
|
+
|
479
|
+
end
|
480
|
+
|
481
|
+
class Brush::CheckboxTag < Wee::Brush::InputTag
|
482
|
+
def initialize
|
483
|
+
super
|
484
|
+
type('checkbox')
|
485
|
+
end
|
486
|
+
alias callback __input_callback
|
487
|
+
end
|
488
|
+
|
393
489
|
class Brush::FileUploadTag < Brush::InputTag
|
394
490
|
def initialize
|
395
491
|
super
|
@@ -456,12 +552,16 @@ class Brush::FormTag < Brush::GenericTagBrush
|
|
456
552
|
alias callback __actionurl_callback
|
457
553
|
alias named_callback __actionurl_named_callback
|
458
554
|
|
555
|
+
def onsubmit_update(update_id, symbol=nil, *args, &block)
|
556
|
+
raise ArgumentError if symbol and block
|
557
|
+
url = @canvas.url_for_callback(to_callback(symbol, args, block), :live_update)
|
558
|
+
onsubmit("javascript: new Ajax.Updater('#{ update_id }', '#{ url }', {method:'get', parameters: Form.serialize(this)}); return false;")
|
559
|
+
end
|
560
|
+
|
459
561
|
def with(*args, &block)
|
460
562
|
# If no action was specified, use a dummy one.
|
461
563
|
unless @attributes.has_key?('action')
|
462
|
-
|
463
|
-
# TODO?
|
464
|
-
@attributes['action'] = req.build_url
|
564
|
+
@attributes['action'] = @canvas.build_url
|
465
565
|
end
|
466
566
|
super
|
467
567
|
end
|
@@ -477,8 +577,28 @@ class Brush::AnchorTag < Brush::GenericTagBrush
|
|
477
577
|
alias tooltip title
|
478
578
|
|
479
579
|
alias __set_url url
|
480
|
-
|
481
|
-
|
580
|
+
|
581
|
+
def info(info=nil)
|
582
|
+
@info = info
|
583
|
+
self
|
584
|
+
end
|
585
|
+
|
586
|
+
def callback(symbol=nil, *args, &block)
|
587
|
+
if @info
|
588
|
+
__set_url(@canvas.url_for_callback(to_callback(symbol, args, block), :action, :info => @info))
|
589
|
+
else
|
590
|
+
__set_url(@canvas.url_for_callback(to_callback(symbol, args, block)))
|
591
|
+
end
|
592
|
+
end
|
593
|
+
|
594
|
+
def named_callback(name, symbol=nil, *args, &block)
|
595
|
+
if @info
|
596
|
+
__set_url(@canvas.url_for_named_callback(name, to_callback(symbol, args, block), :info => @info))
|
597
|
+
else
|
598
|
+
__set_url(@canvas.url_for_named_callback(name, to_callback(symbol, args, block)))
|
599
|
+
end
|
600
|
+
end
|
601
|
+
|
482
602
|
end
|
483
603
|
|
484
604
|
class Brush::Page < Brush
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module Wee
|
2
2
|
|
3
|
-
|
4
|
-
def
|
3
|
+
module CanvasMixin
|
4
|
+
def initialize_canvas
|
5
5
|
@parent_brush = nil
|
6
6
|
@current_brush = nil
|
7
7
|
end
|
@@ -31,10 +31,10 @@ class Canvas
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
-
class
|
35
|
-
|
34
|
+
class HtmlCanvasRenderer < Renderer
|
35
|
+
include CanvasMixin
|
36
|
+
|
36
37
|
attr_reader :document
|
37
|
-
attr_accessor :current_component
|
38
38
|
|
39
39
|
def self.generic_tag(*attrs)
|
40
40
|
attrs.each { |a|
|
@@ -56,28 +56,36 @@ class HtmlCanvas < Canvas
|
|
56
56
|
}
|
57
57
|
end
|
58
58
|
|
59
|
-
def initialize(rendering_context)
|
60
|
-
|
61
|
-
@
|
62
|
-
|
59
|
+
def initialize(rendering_context, current_component=nil, &block)
|
60
|
+
# cache the document, to reduce method calls
|
61
|
+
@document = rendering_context.document
|
62
|
+
|
63
|
+
initialize_canvas
|
64
|
+
super
|
63
65
|
end
|
64
66
|
|
65
67
|
generic_tag :html, :head, :body, :title, :style, :h1, :h2, :h3, :h4, :h5, :div
|
66
68
|
generic_tag :div, :span, :ul, :ol, :li
|
67
69
|
generic_single_tag :link, :hr
|
68
70
|
|
69
|
-
def url_for_callback(callback)
|
70
|
-
url_for_callback_id(register_callback(
|
71
|
+
def url_for_callback(callback, type=:action, hash=nil)
|
72
|
+
url_for_callback_id(register_callback(type, callback), hash)
|
71
73
|
end
|
72
74
|
|
73
|
-
def url_for_named_callback(name, callback)
|
74
|
-
url_for_callback_id(register_named_callback(name, :action, callback))
|
75
|
+
def url_for_named_callback(name, callback, hash=nil)
|
76
|
+
url_for_callback_id(register_named_callback(name, :action, callback), hash)
|
77
|
+
end
|
78
|
+
|
79
|
+
def url_for_callback_id(callback_id, hash=nil)
|
80
|
+
if hash
|
81
|
+
build_url(hash.update(:callback_id => callback_id))
|
82
|
+
else
|
83
|
+
build_url(:callback_id => callback_id)
|
84
|
+
end
|
75
85
|
end
|
76
86
|
|
77
|
-
def
|
78
|
-
|
79
|
-
url = req.build_url(:callback_id => callback_id)
|
80
|
-
return url
|
87
|
+
def build_url(*args)
|
88
|
+
rendering_context.request.build_url(*args)
|
81
89
|
end
|
82
90
|
|
83
91
|
def register_callback(type, callback)
|
@@ -112,10 +120,28 @@ class HtmlCanvas < Canvas
|
|
112
120
|
handle(Brush::InputTag.new, *args, &block)
|
113
121
|
end
|
114
122
|
|
123
|
+
def hidden_input(*args, &block)
|
124
|
+
handle(Brush::HiddenInputTag.new, *args, &block)
|
125
|
+
end
|
126
|
+
|
115
127
|
def text_input(*args, &block)
|
116
128
|
handle(Brush::TextInputTag.new, *args, &block)
|
117
129
|
end
|
118
130
|
|
131
|
+
def new_radio_group
|
132
|
+
Wee::Brush::RadioButtonTag::RadioGroup.new(self)
|
133
|
+
end
|
134
|
+
|
135
|
+
def radio_button(*args, &block)
|
136
|
+
handle(Brush::RadioButtonTag.new, *args, &block)
|
137
|
+
end
|
138
|
+
|
139
|
+
def check_box(*args, &block)
|
140
|
+
handle(Wee::Brush::CheckboxTag.new, *args, &block)
|
141
|
+
end
|
142
|
+
|
143
|
+
alias checkbox check_box
|
144
|
+
|
119
145
|
def text_area(*args, &block)
|
120
146
|
handle(Brush::TextAreaTag.new, *args, &block)
|
121
147
|
end
|
@@ -160,8 +186,12 @@ class HtmlCanvas < Canvas
|
|
160
186
|
handle(Brush::JavascriptTag.new, *args, &block)
|
161
187
|
end
|
162
188
|
|
163
|
-
def paragraph
|
164
|
-
|
189
|
+
def paragraph(*args, &block)
|
190
|
+
handle(Brush::GenericTagBrush.new("p"), *args, &block)
|
191
|
+
end
|
192
|
+
|
193
|
+
def label(*args, &block)
|
194
|
+
handle(Brush::GenericTagBrush.new("label"), *args, &block)
|
165
195
|
end
|
166
196
|
|
167
197
|
def break
|
@@ -185,6 +215,14 @@ class HtmlCanvas < Canvas
|
|
185
215
|
set_brush(Brush::GenericEncodedTextBrush.new(str))
|
186
216
|
end
|
187
217
|
|
218
|
+
# converts \n into <br/>
|
219
|
+
def multiline_text(text, encode=true)
|
220
|
+
meth = encode ? :encode_text : :text
|
221
|
+
lines = text.split("\n")
|
222
|
+
send(meth, lines.first)
|
223
|
+
lines[1..-1].each { |l| self.break; send(meth, l) }
|
224
|
+
end
|
225
|
+
|
188
226
|
def render(obj)
|
189
227
|
self.close
|
190
228
|
obj.do_render_chain(@rendering_context)
|