wee 0.8.0 → 0.9.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 +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)
|