zena 1.2.1 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +38 -1
- data/app/controllers/documents_controller.rb +7 -5
- data/app/controllers/nodes_controller.rb +47 -6
- data/app/controllers/user_sessions_controller.rb +12 -3
- data/app/controllers/virtual_classes_controller.rb +8 -2
- data/app/models/acl.rb +5 -2
- data/app/models/cached_page.rb +5 -5
- data/app/models/column.rb +27 -4
- data/app/models/group.rb +1 -1
- data/app/models/node.rb +106 -24
- data/app/models/note.rb +2 -1
- data/app/models/relation.rb +9 -4
- data/app/models/relation_proxy.rb +2 -2
- data/app/models/role.rb +12 -5
- data/app/models/site.rb +10 -9
- data/app/models/skin.rb +8 -0
- data/app/models/string_hash.rb +65 -0
- data/app/models/text_document.rb +1 -1
- data/app/models/user.rb +2 -0
- data/app/models/virtual_class.rb +43 -10
- data/app/views/comments/create.rjs +1 -32
- data/app/views/comments/edit.rjs +1 -1
- data/app/views/comments/update.rjs +1 -1
- data/app/views/documents/show.rhtml +1 -1
- data/app/views/groups/_form.rhtml +7 -0
- data/app/views/groups/_li.rhtml +1 -1
- data/app/views/nodes/500.html +2 -1
- data/app/views/nodes/destroy.rjs +2 -0
- data/app/views/sites/jobs.erb +2 -3
- data/app/views/templates/document_create_tabs/_file.rhtml +1 -1
- data/app/views/templates/document_create_tabs/_import.rhtml +4 -1
- data/app/views/templates/document_create_tabs/_template.rhtml +3 -0
- data/app/views/templates/document_create_tabs/_text_document.rhtml +3 -0
- data/app/views/versions/custom_tab.rhtml +1 -1
- data/app/views/versions/edit.rhtml +1 -1
- data/bricks/acls/lib/bricks/acls.rb +3 -3
- data/bricks/acls/zena/test/unit/acl_test.rb +15 -0
- data/bricks/fs_skin/lib/bricks/fs_skin.rb +190 -0
- data/bricks/fs_skin/zena/init.rb +1 -0
- data/bricks/fs_skin/zena/migrate/20110702010330_add_fs_skin_to_idx_templates.rb +12 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/Image-edit.zafu +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/Image.zafu +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/Node-+index.zafu +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/Node-+notFound.zafu +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/Node-+search.zafu +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/Node.zafu +1 -1
- data/bricks/{static → fs_skin}/zena/skins/blog/Post.zafu +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/Project--kml.zafu +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/Project.zafu +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/comments.zafu +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/dict.yml +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/img/dateBg.jpg +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/img/header.png +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/img/mapPin.png +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/img/menu.gif +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/img/menuover.gif +0 -0
- data/bricks/{static → fs_skin}/zena/skins/blog/img/style.css +0 -0
- data/bricks/fs_skin/zena/tasks.rb +26 -0
- data/bricks/{static/zena/test/integration/static_integration_test.rb → fs_skin/zena/test/integration/fs_skin_integration_test.rb} +6 -6
- data/bricks/fs_skin/zena/test/unit/fs_skin_test.rb +33 -0
- data/bricks/grid/lib/bricks/grid.rb +4 -3
- data/bricks/tags/lib/bricks/tags.rb +1 -7
- data/bricks/zena/zena/migrate/20120605091558_add_ssl_login_to_site.rb +7 -0
- data/bricks/zena/zena/migrate/20120630123551_add_auto_publish_to_group.rb +9 -0
- data/config/bricks.yml +3 -3
- data/config/gems.yml +2 -3
- data/lib/tasks/zena.rake +7 -3
- data/lib/zafu.rb +7 -0
- data/lib/zafu/all.rb +21 -0
- data/lib/zafu/compiler.rb +7 -0
- data/lib/zafu/controller_methods.rb +58 -0
- data/lib/zafu/handler.rb +57 -0
- data/lib/zafu/info.rb +4 -0
- data/lib/zafu/markup.rb +309 -0
- data/lib/zafu/mock_helper.rb +42 -0
- data/lib/zafu/node_context.rb +203 -0
- data/lib/zafu/ordered_hash.rb +53 -0
- data/lib/zafu/parser.rb +676 -0
- data/lib/zafu/parsing_rules.rb +382 -0
- data/lib/zafu/process/ajax.rb +530 -0
- data/lib/zafu/process/conditional.rb +92 -0
- data/lib/zafu/process/context.rb +186 -0
- data/lib/zafu/process/forms.rb +143 -0
- data/lib/zafu/process/html.rb +186 -0
- data/lib/zafu/process/ruby_less_processing.rb +321 -0
- data/lib/zafu/security.rb +15 -0
- data/lib/zafu/template.rb +25 -0
- data/lib/zafu/test_helper.rb +19 -0
- data/lib/zafu/view_methods.rb +6 -0
- data/lib/zena.rb +1 -1
- data/lib/zena/acts/enrollable.rb +1 -1
- data/lib/zena/app.rb +4 -17
- data/lib/zena/console.rb +18 -1
- data/lib/zena/core_ext/file_utils.rb +13 -1
- data/lib/zena/core_ext/fixnum.rb +4 -0
- data/lib/zena/core_ext/float.rb +7 -0
- data/lib/zena/deploy.rb +4 -2
- data/lib/zena/deploy/app_init.rhtml +2 -1
- data/lib/zena/deploy/database.rhtml +1 -1
- data/lib/zena/info.rb +1 -1
- data/lib/zena/parser/zazen_rules.rb +4 -4
- data/lib/zena/routes.rb +1 -1
- data/lib/zena/test_controller.rb +1 -1
- data/lib/zena/use.rb +14 -1
- data/lib/zena/use/action.rb +4 -2
- data/lib/zena/use/ajax.rb +86 -38
- data/lib/zena/use/authlogic.rb +16 -1
- data/lib/zena/use/calendar.rb +37 -17
- data/lib/zena/use/conditional.rb +2 -2
- data/lib/zena/use/context.rb +30 -9
- data/lib/zena/use/dates.rb +39 -3
- data/lib/zena/use/display.rb +6 -19
- data/lib/zena/use/forms.rb +100 -79
- data/lib/zena/use/i18n.rb +40 -16
- data/lib/zena/use/query_builder.rb +0 -6
- data/lib/zena/use/query_node.rb +17 -4
- data/lib/zena/use/relations.rb +1 -3
- data/lib/zena/use/rendering.rb +10 -8
- data/lib/zena/use/scope_index.rb +5 -1
- data/lib/zena/use/search.rb +2 -1
- data/lib/zena/use/urls.rb +82 -77
- data/lib/zena/use/workflow.rb +12 -4
- data/lib/zena/use/zafu_safe_definitions.rb +37 -9
- data/lib/zena/use/zafu_templates.rb +49 -20
- data/lib/zena/use/zazen.rb +6 -2
- data/locale/it/LC_MESSAGES/zena.mo +0 -0
- data/locale/it/zena.mo +0 -0
- data/locale/it/zena.po +1982 -0
- data/public/images/arrow_back.png +0 -0
- data/public/images/remove_tag.png +0 -0
- data/public/javascripts/grid.js +800 -199
- data/public/javascripts/window.js +1 -1
- data/public/javascripts/zena.js +130 -21
- data/public/stylesheets/grid.css +11 -2
- data/public/stylesheets/zena.css +2 -1
- data/test/custom_queries/complex.host.yml +5 -0
- data/test/fixtures/files/TestNode.zafu +36 -0
- data/test/functional/nodes_controller_test.rb +18 -1
- data/test/integration/zafu_compiler/action.yml +2 -2
- data/test/integration/zafu_compiler/ajax.yml +44 -26
- data/test/integration/zafu_compiler/asset.yml +12 -2
- data/test/integration/zafu_compiler/basic.yml +0 -16
- data/test/integration/zafu_compiler/calendar.yml +6 -6
- data/test/integration/zafu_compiler/complex_ok.yml +23 -1
- data/test/integration/zafu_compiler/conditional.yml +5 -5
- data/test/integration/zafu_compiler/context.yml +6 -5
- data/test/integration/zafu_compiler/dates.yml +23 -2
- data/test/integration/zafu_compiler/display.yml +46 -2
- data/test/integration/zafu_compiler/errors.yml +2 -2
- data/test/integration/zafu_compiler/eval.yml +35 -7
- data/test/integration/zafu_compiler/forms.yml +47 -13
- data/test/integration/zafu_compiler/i18n.yml +2 -2
- data/test/integration/zafu_compiler/meta.yml +35 -1
- data/test/integration/zafu_compiler/query.yml +23 -4
- data/test/integration/zafu_compiler/relations.yml +10 -6
- data/test/integration/zafu_compiler/roles.yml +4 -4
- data/test/integration/zafu_compiler/rubyless.yml +11 -1
- data/test/integration/zafu_compiler/safe_definitions.yml +23 -5
- data/test/integration/zafu_compiler/security.yml +10 -6
- data/test/integration/zafu_compiler/urls.yml +23 -6
- data/test/integration/zafu_compiler/zafu_attributes.yml +1 -1
- data/test/integration/zafu_compiler/zazen.yml +14 -0
- data/test/selenium/Add/add3.rsel +8 -8
- data/test/selenium/Destroy/0setup.rsel +12 -0
- data/test/selenium/Destroy/destroy1.rsel +16 -0
- data/test/selenium/Edit/edit2.rsel +9 -9
- data/test/selenium/Edit/edit5.rsel +9 -9
- data/test/selenium/Edit/edit6.rsel +9 -9
- data/test/selenium/Form/form4.rsel +17 -0
- data/test/selenium/Toggle/toggle1.rsel +2 -0
- data/test/selenium/Toggle/toggle2.rsel +18 -0
- data/test/sites/zena/columns.yml +3 -0
- data/test/sites/zena/versions.yml +7 -0
- data/test/unit/cached_page_test.rb +13 -13
- data/test/unit/column_test.rb +26 -0
- data/test/unit/node_test.rb +16 -1
- data/test/unit/project_test.rb +6 -1
- data/test/unit/relation_test.rb +1 -1
- data/test/unit/role_test.rb +1 -1
- data/test/unit/string_hash_test.rb +30 -0
- data/test/unit/virtual_class_test.rb +31 -17
- data/test/unit/zafu_markup_test.rb +414 -0
- data/test/unit/zafu_node_context_test.rb +375 -0
- data/test/unit/zafu_ordered_hash_test.rb +69 -0
- data/test/unit/zena/acts/enrollable_test.rb +1 -1
- data/test/unit/zena/parser/zafu_asset.yml +0 -10
- data/test/unit/zena/parser/zazen.yml +1 -1
- data/test/unit/zena/parser_test.rb +1 -72
- data/test/unit/zena/use/dates_test.rb +1 -1
- data/test/unit/zena/use/rendering_test.rb +24 -7
- data/test/unit/zena/use/scope_index_test.rb +17 -0
- data/test/unit/zena/use/zazen_test.rb +2 -1
- data/zena.gemspec +71 -37
- metadata +104 -83
- data/app/views/nodes/destroy.erb +0 -0
- data/bricks/static/lib/bricks/static.rb +0 -151
- data/bricks/static/zena/init.rb +0 -1
- data/bricks/static/zena/migrate/20110702010330_add_static_to_idx_templates.rb +0 -12
- data/bricks/static/zena/test/unit/static_test.rb +0 -33
- data/lib/zena/parser/zafu_rules.rb +0 -244
- data/lib/zena/parser/zafu_tags.rb +0 -198
- data/lib/zena/parser/zena_rules.rb +0 -23
@@ -115,8 +115,8 @@ complex_lang_list:
|
|
115
115
|
res: "/li class='on'>/oo/projects-list/Clean-Water-project/page22.html\?lang=en</"
|
116
116
|
|
117
117
|
html_lang_and_dict:
|
118
|
-
src: "<html xmlns='http://www.w3.org/1999/xhtml' lang='#{v.lang}' do='load' dictionary='/Default skin/translations'
|
119
|
-
res: "<html xmlns='http://www.w3.org/1999/xhtml' lang='en'></html>"
|
118
|
+
src: "<html xmlns='http://www.w3.org/1999/xhtml' lang='#{v.lang}' xml:lang='en' do='load' dictionary='/Default skin/translations'></html>"
|
119
|
+
res: "<html xmlns='http://www.w3.org/1999/xhtml' xml:lang='en' lang='en'></html>"
|
120
120
|
|
121
121
|
dictionary_fr:
|
122
122
|
context:
|
@@ -4,12 +4,38 @@ default:
|
|
4
4
|
visitor: 'ant'
|
5
5
|
node: 'status'
|
6
6
|
|
7
|
+
less_then_in_param:
|
8
|
+
src: "<a onclick='if (a < b) alert(a)'>xx</a>"
|
9
|
+
tem: "<a onclick='if (a < b) alert(a)'>xx</a>"
|
10
|
+
|
11
|
+
greater_then_in_param:
|
12
|
+
src: "<a onclick='if (a > b) alert(a)'>xx</a>"
|
13
|
+
tem: "<a onclick='if (a > b) alert(a)'>xx</a>"
|
14
|
+
|
15
|
+
less_then_in_dyn_param:
|
16
|
+
src: "<a onclick='if (a < b) alert(a)'>xx</a>"
|
17
|
+
tem: "<a onclick='if (a < b) alert(a)'>xx</a>"
|
18
|
+
|
19
|
+
greater_then_in_dyn_param:
|
20
|
+
src: "<a foo='#{created_at > now ? \'yes\' : \'no\'}'>xx</a>"
|
21
|
+
tem: "<a foo='<%= (@node.created_at ? (@node.created_at>Time.now) : nil) ? \"yes\" : \"no\" %>'>xx</a>"
|
22
|
+
|
23
|
+
greater_then_in_do:
|
24
|
+
src: "<a foo='bar' do='pages where created_at > 7'>xx</a>"
|
25
|
+
tem: "/<% if var1 = Node.do_find.*nodes.created_at > 7.*<a foo='bar'>xx</a>/"
|
26
|
+
|
27
|
+
greater_then_in_text:
|
28
|
+
src: "<r:js>if (a < 4) alert('ok');</r:js>"
|
29
|
+
res: ""
|
30
|
+
tem: "<% js_data << \"if (a < 4) alert('ok');\" %>"
|
31
|
+
js: "/if \(a < 4\) alert\('ok'\);/"
|
32
|
+
|
7
33
|
include_with:
|
8
34
|
src: "include_with: <r:include template='/basic/name/title'><h1 do='with' part='title' attr='id'/>"
|
9
35
|
res: "include_with: title: <h1 id='lala'>22</h1>"
|
10
36
|
|
11
37
|
include_with_empty:
|
12
|
-
src: "include_with: <r:include template='/meta/name/title'><r:with part='title'
|
38
|
+
src: "include_with: <r:include template='/meta/name/title'><r:with part='title'/></r:include>"
|
13
39
|
res: "include_with: title: "
|
14
40
|
|
15
41
|
name_title:
|
@@ -40,6 +66,14 @@ id_do_with:
|
|
40
66
|
src: "include_part: <r:include template='/meta/id/do' do='with' part='logo' do='t'>foo</r:include>"
|
41
67
|
res: "include_part: <h1 id='logo'>foo</h1>"
|
42
68
|
|
69
|
+
with_part_do_setup:
|
70
|
+
src: "<div id='content'>hello <div id='main'>main</div></div>"
|
71
|
+
tem: "<div id='content'>hello <div id='main'>main</div></div>"
|
72
|
+
|
73
|
+
with_part_do:
|
74
|
+
src: "with_part_do: <r:include template='/meta/with/part/do/setup'><r:with part='main' do='title'/></r:include>"
|
75
|
+
tem: "with_part_do: <div id='content'>hello <div id='main'><%= @node.prop['title'] %></div></div>"
|
76
|
+
|
43
77
|
# this test is a dummy used by include_context
|
44
78
|
context_dummy:
|
45
79
|
src: "CD: <r:pages in='site' where='title like \"s%\"' name='pages'><r:each join=', ' do='title'/></r:pages>"
|
@@ -200,6 +200,15 @@ query_with_parse_paginate:
|
|
200
200
|
tem: '/page_numbers/'
|
201
201
|
res: "/1.*2.*3.*4.*5/"
|
202
202
|
|
203
|
+
link_page_list:
|
204
|
+
src: |
|
205
|
+
<r:query default='pages in site limit 4 paginate p' select='pages where #{query_parse(params[:q])} in site limit 2 paginate p'>
|
206
|
+
: <r:link page='list' page_count='12' join=' | '/>
|
207
|
+
</r:query>
|
208
|
+
# should properly pass the query to sub-contexts.
|
209
|
+
res: "/: 1 \| <a.*>2</a> \| <a.*>3</a> \| <a/"
|
210
|
+
# res: "/1.*2.*3.*4.*5/"
|
211
|
+
|
203
212
|
query_can_be_nil_bad_argument_type:
|
204
213
|
context:
|
205
214
|
filter:
|
@@ -236,11 +245,21 @@ simple_select:
|
|
236
245
|
tem: '/<%= var1.attributes\["ti"\] %>/'
|
237
246
|
res: "<div>crocodiles</div>"
|
238
247
|
|
248
|
+
select_with_type:
|
249
|
+
src: "<div do='nodes select created_at as ti:time' find='first' do='ti' format='%d.%m.%Y'/>"
|
250
|
+
tem: '/format_date\(var1.rcast\("ti", :time\)/'
|
251
|
+
res: "<div>11.04.2006</div>"
|
252
|
+
|
239
253
|
select_in_from:
|
240
254
|
src: "<div do='images select title as it from projects select title as pt in site' do='each' join=', '><r:pt/>: <r:it/></div>"
|
241
255
|
tem: '/<%= var2.attributes\["pt"\] %>: <%= var2.attributes\["it"\] %>/'
|
242
256
|
res: "<div>a wiki with Zena: bird, a wiki with Zena: flower, Clean Water project: it's a lake</div>"
|
243
257
|
|
258
|
+
select_in_from_saved:
|
259
|
+
src: "<div do='images select title as it from projects select title as pt in site' do='set' list='this' do='list' do='each' join=', '><r:pt/>: <r:it/></div>"
|
260
|
+
tem: '/<%= var3.attributes\["pt"\] %>: <%= var3.attributes\["it"\] %>/'
|
261
|
+
res: "<div>a wiki with Zena: bird, a wiki with Zena: flower, Clean Water project: it's a lake</div>"
|
262
|
+
|
244
263
|
select_group:
|
245
264
|
src: "<div do='images select title as it from projects select title as pt in site' do='group' by='pt' do='each_group' join=' / '><r:pt/>: <r:each join=', ' do='it'/></div>"
|
246
265
|
res: "<div>a wiki with Zena: bird, flower / Clean Water project: it's a lake</div>"
|
@@ -260,8 +279,8 @@ query_errors:
|
|
260
279
|
res: "<span class='query'>nodes in badaboum</span> <span class='error'>Invalid scope 'badaboum'.</span>"
|
261
280
|
|
262
281
|
find_with_rubyless:
|
263
|
-
src: "<b do='find(\"images in site limit 2\")' do='each' join=',' do='title'/>"
|
264
|
-
res: "<b>Autumn Tree,bird</b>"
|
282
|
+
src: "<b do='find(\"images in site limit 2\")' do='each' join=', ' do='title'/>"
|
283
|
+
res: "<b>Autumn Tree, bird</b>"
|
265
284
|
|
266
285
|
find_loads_class:
|
267
286
|
src: "<div do='find(11)'><r:origin/></div>"
|
@@ -269,7 +288,7 @@ find_loads_class:
|
|
269
288
|
|
270
289
|
query_on_vclass:
|
271
290
|
# typical syntax error (should be Contact?)
|
272
|
-
src: "<r:Contact><div do='pages in site order by zip asc limit 2' do='each' join=',' do='title'/></r:Contact>"
|
291
|
+
src: "<r:Contact><div do='pages in site order by zip asc limit 2' do='each' join=', ' do='title'/></r:Contact>"
|
273
292
|
# does the query on last @node
|
274
293
|
tem: "/Node.do_find/"
|
275
|
-
res: '<div>Zena the wild CMS,people</div>'
|
294
|
+
res: '<div>Zena the wild CMS, people</div>'
|
@@ -371,7 +371,8 @@ where_two_attributes:
|
|
371
371
|
res: "parc opening, zena enhancements"
|
372
372
|
|
373
373
|
many_or:
|
374
|
-
|
374
|
+
# old: or='images in site' or='tags in site'
|
375
|
+
src: "<r:tagged in='site or images in site or tags in site' do='each' join=',' do='title'/>"
|
375
376
|
res: "Art,bird,Clean Water project,flower,it's a lake,News list,parc opening,Top menu"
|
376
377
|
|
377
378
|
hot_or_page:
|
@@ -403,13 +404,12 @@ group_by_project:
|
|
403
404
|
group_by_project_sort_zip:
|
404
405
|
context:
|
405
406
|
visitor: ant
|
406
|
-
|
407
|
-
|
408
|
-
res: "<b>Clean Water project</b>: it's a lake<b>a wiki with Zena</b>: bird,flower<b>Zena the wild CMS</b>: Autumn Tree"
|
407
|
+
src: "<r:images in='site' order='zip ASC' do='group' by='project' sort='id'><b do='project' do='title'/>: <r:each join=', ' do='title'/></r:images>"
|
408
|
+
res: "<b>Clean Water project</b>: it's a lake<b>a wiki with Zena</b>: bird, flower<b>Zena the wild CMS</b>: Autumn Tree"
|
409
409
|
|
410
410
|
group_by_parent_sort:
|
411
|
-
src: "<r:images in='site' order='title ASC' do='group' by='parent' sort='title'><b do='parent' do='title'/>: <r:each join=',' do='title'/></r:images>"
|
412
|
-
res: "<b>a wiki with Zena</b>: bird,flower<b>Clean Water project</b>: it's a lake"
|
411
|
+
src: "<r:images in='site' order='title ASC' do='group' by='parent' sort='title'><b do='parent' do='title'/>: <r:each join=', ' do='title'/></r:images>"
|
412
|
+
res: "<b>a wiki with Zena</b>: bird, flower<b>Clean Water project</b>: it's a lake"
|
413
413
|
|
414
414
|
nodes_in_site_group_by_year:
|
415
415
|
old_src: "<r:nodes in='site' group='log_at:year' order='log_at:year asc, title ASC' do='each' join=', '><r:show attr='log_at' format='%Y'/></r:nodes>"
|
@@ -490,3 +490,7 @@ core_context:
|
|
490
490
|
# Ensure that :project rubyless method uses enrollable.
|
491
491
|
src: "<r:project do='origin || title'/>"
|
492
492
|
tem: "/ar1.prop\['origin'\] or var1.prop\['title'\]/"
|
493
|
+
|
494
|
+
find_less_then:
|
495
|
+
src: <div do='projects where created_at < "2010-05-01" in site' do='each' do='title'/>
|
496
|
+
tem: "/nodes.created_at < '2010-05-01'/"
|
@@ -79,13 +79,13 @@ vclass_roles:
|
|
79
79
|
node: letter
|
80
80
|
src: "<r:vclass do='roles' do='each' join=', '><r:name/> (<r:columns do='each' join=',' do='name'/>)</r:vclass>"
|
81
81
|
tem: "/var1 = @node\.virtual_class .* var2 = var1.sorted_roles/"
|
82
|
-
res: "Node (summary,text,title), Original (origin,tz,weight), Task (assigned), Letter (paper,search,search_mono)"
|
82
|
+
res: "Node (summary,text,title), Original (origin,settings,tz,weight), Task (assigned), Letter (paper,search,search_mono)"
|
83
83
|
|
84
84
|
vclass_column_size:
|
85
85
|
context:
|
86
86
|
node: letter
|
87
87
|
src: "<r:vclass do='roles' do='each' join=', '><r:name/> (<r:columns do='size'/>)</r:vclass>"
|
88
|
-
res: "Node (3), Original (
|
88
|
+
res: "Node (3), Original (4), Task (1), Letter (3)"
|
89
89
|
|
90
90
|
vclass_context:
|
91
91
|
src: "<r:Image><r:name/></r:Image>"
|
@@ -111,7 +111,7 @@ grid_manual:
|
|
111
111
|
<tr do='Image' do='roles' do='each' do='columns'><th do='each' do='name'/></tr>
|
112
112
|
<tr do='each'><r:Image do='roles' do='each' do='columns'><td do='each' do='@node.send(name)'/></r:Image></tr>
|
113
113
|
</table>
|
114
|
-
res: "/<th colspan='3'>Node.*<th colspan='
|
114
|
+
res: "/<th colspan='3'>Node.*<th colspan='4'>Original.*<th>exif</th><th>height</th><th>width</th>.*<td>image/jpeg</td><td>jpg</td>/"
|
115
115
|
|
116
116
|
list_relations:
|
117
117
|
src: "<r:Contact do='relations' do='each' join=', ' do='name'/>"
|
@@ -122,7 +122,7 @@ list_relations_filter_group:
|
|
122
122
|
res: "reference, reference_for, set_tag"
|
123
123
|
|
124
124
|
input_relation_name:
|
125
|
-
src: "<r:select name='rel' eval='Contact.relations(\"doc\").map(
|
125
|
+
src: "<r:select name='rel' eval='Contact.relations(\"doc\").map(\"name\")'/>"
|
126
126
|
res: "<select name='node[rel]'><option value=\"reference\">reference</option>\n<option value=\"reference_for\">reference_for</option>\n<option value=\"set_tag\">set_tag</option></select>"
|
127
127
|
|
128
128
|
manual_select:
|
@@ -86,4 +86,14 @@ prop_in_list_context:
|
|
86
86
|
role_existing_class_name:
|
87
87
|
# Should understand 'Comment' as a Role.
|
88
88
|
src: "<r:Comment?>xx</r:Comment?>"
|
89
|
-
tem: "/<% if @node.has_role\?\(\d+\) %>xx<% end %>/"
|
89
|
+
tem: "/<% if @node.has_role\?\(\d+\) %>xx<% end %>/"
|
90
|
+
|
91
|
+
class_new:
|
92
|
+
src: "<div do='set' p='Post.new'><p do='p.klass'/>.<p do='p.title'/></div>"
|
93
|
+
tem: "/VirtualClass\[.Post.\].zafu_new.*_zp.klass.*_zp.prop\[.title.\]/"
|
94
|
+
res: "<div><p>Post</p>.<p></p></div>"
|
95
|
+
|
96
|
+
class_new_with_attr:
|
97
|
+
src: "<div do='set' p='Post.new(:title => \"yes\")'><p do='p.klass'/>.<p do='p.title'/></div>"
|
98
|
+
tem: "/VirtualClass\[.Post.\].zafu_new.*_zp.klass.*_zp.prop\[.title.\]/"
|
99
|
+
res: "<div><p>Post</p>.<p>yes</p></div>"
|
@@ -94,15 +94,22 @@ kind_of_role:
|
|
94
94
|
map_join:
|
95
95
|
context:
|
96
96
|
node: 'cleanWater'
|
97
|
-
src: "<r:children do='map(
|
97
|
+
src: "<r:children do='map(\"title\").join(\",\")'/>"
|
98
98
|
tem: "/var1.map\{\|_map_obj\| _map_obj.prop\['title'\]\}/"
|
99
99
|
res: "crocodiles,it's a lake,The lake we love,parc opening,status title,water"
|
100
100
|
|
101
|
+
sum:
|
102
|
+
context:
|
103
|
+
node: 'cleanWater'
|
104
|
+
src: "<r:children do='sum(\"created_at.to_i\")'/>"
|
105
|
+
tem: "/var1.map\{\|_sum_obj\| _sum_obj.created_at.to_i.to_f\}.reduce\(:\+\)/"
|
106
|
+
res: "6854457600.0"
|
107
|
+
|
101
108
|
map_on_can_be_nil:
|
102
109
|
context:
|
103
110
|
node: 'cleanWater'
|
104
|
-
eval: "Contact.relations.map(
|
105
|
-
tem: "/VirtualClass\[\"Contact\"\] \? VirtualClass\[\"Contact\"\].all_relations.map\
|
111
|
+
eval: "Contact.relations.map(\"name\").join('-')"
|
112
|
+
tem: "/VirtualClass\[\"Contact\"\] \? VirtualClass\[\"Contact\"\].all_relations.map\{\|_map_obj\| _map_obj.other_role\}.compact.join\(\"-\"\)/"
|
106
113
|
res: "/collaborator_for-favorite-favorite_for/"
|
107
114
|
|
108
115
|
min:
|
@@ -122,7 +129,7 @@ max:
|
|
122
129
|
time_advance:
|
123
130
|
context:
|
124
131
|
date: '2011-02-03'
|
125
|
-
src: "<b do='date.advance(:months
|
132
|
+
src: "<b do='date.advance(:months => 1).strftime(\"%Y-%m-%d\")'/>"
|
126
133
|
res: "<b>2011-03-03</b>"
|
127
134
|
|
128
135
|
time_blank:
|
@@ -138,6 +145,17 @@ hash_to_params:
|
|
138
145
|
q:
|
139
146
|
one: '1'
|
140
147
|
two: '2'
|
141
|
-
src: "<b do='{:q
|
148
|
+
src: "<b do='{:q => params[:q]}' do='to_param'/>"
|
142
149
|
tem: "<% var1 = {:q => params[:q]} %><b><%= var1.to_param %></b>"
|
143
150
|
res: '<b>q%5Bone%5D=1&q%5Btwo%5D=2</b>'
|
151
|
+
|
152
|
+
string_hash:
|
153
|
+
src: "<b do='set' a='string_hash'>AAA<r:eval>a['foo']</r:eval></b>"
|
154
|
+
res: "<b>AAA</b>"
|
155
|
+
tem: "/StringHash.new/"
|
156
|
+
|
157
|
+
string_hash_with_params:
|
158
|
+
src: "<b do='set' a='string_hash(:foo => \"men\")'>AAA<r:eval>a['foo']</r:eval></b>"
|
159
|
+
res: "<b>AAAmen</b>"
|
160
|
+
tem: "/StringHash.from_hash\(\{:foo => \"men\"\}\)/"
|
161
|
+
|
@@ -16,8 +16,8 @@ erb:
|
|
16
16
|
tem: "<% puts 'mean' %>"
|
17
17
|
|
18
18
|
forbidden_methods:
|
19
|
-
src: "<r:eval>
|
20
|
-
tem: "/unknown method '
|
19
|
+
src: "<r:eval>puts '\'bad\''</r:eval>"
|
20
|
+
tem: "/unknown method 'puts\(String\)'/"
|
21
21
|
|
22
22
|
syntax_error:
|
23
23
|
src: "<r:show eval='<% puts \"mean\" %>'/>"
|
@@ -43,8 +43,8 @@ build_erb_with_trans:
|
|
43
43
|
build_erb_with_void:
|
44
44
|
context:
|
45
45
|
lang: fr
|
46
|
-
src: "<r:void><</r:void><r:void>%= 5+8 %</r:void><r:void>></r:void></r:load>"
|
47
|
-
tem: "
|
46
|
+
src: "ABC: <r:void><</r:void><r:void>%= 5+8 %</r:void><r:void>></r:void></r:load>"
|
47
|
+
tem: "ABC: <span class='parser_error'>Invalid tag near '<</r:void><'</span>"
|
48
48
|
|
49
49
|
mean_inc:
|
50
50
|
src: '<'
|
@@ -56,7 +56,7 @@ build_erb_with_include:
|
|
56
56
|
|
57
57
|
mean_part:
|
58
58
|
src: "<<div id='foo'></div>"
|
59
|
-
res: "
|
59
|
+
res: "<span class='parser_error'>Invalid tag near '<<div id='f'</span>"
|
60
60
|
|
61
61
|
build_erb_with_include_remove_part:
|
62
62
|
src: "<r:include template='/security/mean/part'><r:with part='foo'/></r:include><r:void>%= 5+8 %</r:void><r:void>></r:void>"
|
@@ -64,4 +64,8 @@ build_erb_with_include_remove_part:
|
|
64
64
|
|
65
65
|
build_erb_with_rubyless:
|
66
66
|
src: "<r:void do='\"<\"'/><r:void>%= 5+8 %</r:void><r:void>></r:void>"
|
67
|
-
tem: "!/<%= 5/"
|
67
|
+
tem: "!/<%= 5/"
|
68
|
+
|
69
|
+
multiple_trans:
|
70
|
+
src: "<r:t text='<'/><r:t text='%'/>"
|
71
|
+
tem: "<%"
|
@@ -31,7 +31,7 @@ r_url_with_hash:
|
|
31
31
|
res: "/page22_back.html\?f=x/"
|
32
32
|
|
33
33
|
url_with_ssl:
|
34
|
-
src: "<a href='#{url(this, :host
|
34
|
+
src: "<a href='#{url(this, :host => \"some.host:445\", :ssl => true)}' do='title'/>"
|
35
35
|
res: "<a href='https://some.host:445/oo/projects-list/Clean-Water-project/page22.html'>status title</a>"
|
36
36
|
|
37
37
|
path:
|
@@ -39,7 +39,7 @@ path:
|
|
39
39
|
res: "<a href='/oo/projects-list/Clean-Water-project/page22.html'>blah</a>"
|
40
40
|
|
41
41
|
path_with_mode:
|
42
|
-
src: "<a href='#{path(this, :mode
|
42
|
+
src: "<a href='#{path(this, :mode => \"foo\")}'>blah</a>"
|
43
43
|
res: "<a href='/oo/projects-list/Clean-Water-project/page22_foo.html'>blah</a>"
|
44
44
|
|
45
45
|
link:
|
@@ -245,7 +245,7 @@ link_trans:
|
|
245
245
|
link_date_complex:
|
246
246
|
context:
|
247
247
|
ref_date: '2011-04-22 22:00'
|
248
|
-
src: "<r:link date='date.advance(:months
|
248
|
+
src: "<r:link date='date.advance(:months => -1).strftime(\"%Y-%m-%d\", \"Asia/Jakarta\")' text='PREV'/>"
|
249
249
|
# Date is in Asia/Jakarta timezone. Ref date is utc in tests.
|
250
250
|
res: "/\?date=2011-03-23'>PREV/"
|
251
251
|
|
@@ -255,7 +255,7 @@ target_blank:
|
|
255
255
|
|
256
256
|
action_destroy:
|
257
257
|
src: "<r:link action='destroy'/>"
|
258
|
-
res: "<a data-confirm='Destroy
|
258
|
+
res: "<a data-confirm='Destroy status title ?' href='/nodes/22' onclick='return Zena.m(this,\"delete\")'>status title</a>"
|
259
259
|
|
260
260
|
action_publish:
|
261
261
|
src: "<r:link action='publish'/>"
|
@@ -294,9 +294,26 @@ encode_blank_values:
|
|
294
294
|
|
295
295
|
cachestamp:
|
296
296
|
# 26 would be the template for rendering JS's id.
|
297
|
-
src: "<script src='#{path(project, :format
|
297
|
+
src: "<script src='#{path(project, :format => \"js\", :tstamp => find(26).updated_at.to_i)}'></script>"
|
298
298
|
res: "<script src='/oo/projects-list/Clean-Water-project.js?1144713600&tstamp=1176249600'></script>"
|
299
299
|
|
300
300
|
node_in_argument:
|
301
301
|
src: "<r:link node[done_by]='visitor_node'/>"
|
302
|
-
res: "/\?node\[done_by\]=13'>status title</a>/"
|
302
|
+
res: "/\?node\[done_by\]=13'>status title</a>/"
|
303
|
+
|
304
|
+
link_page_next:
|
305
|
+
context:
|
306
|
+
pak: 2
|
307
|
+
src: "<r:nodes in='site' limit='3' order='zip' paginate='pak'><r:link page='previous'/> | <r:pak/> | <r:link page='next'/> || <r:each join=',' do='title'/></r:nodes>"
|
308
|
+
res: "<a href='/oo/projects-list/Clean-Water-project/page22.html?pak=1'>1</a> | 2 | <a href='/oo/projects-list/Clean-Water-project/page22.html?pak=3'>3</a> || Panthera Tigris Sumatran,Panthera Leo Verneyi,My Life"
|
309
|
+
|
310
|
+
link_page_next_with_block:
|
311
|
+
src: "<r:nodes in='site' limit='3' order='zip' paginate='pak'><r:link page='next' do='t'>next</r:link></r:nodes>"
|
312
|
+
res: "<a href='/oo/projects-list/Clean-Water-project/page22.html?pak=2'>next</a>"
|
313
|
+
|
314
|
+
link_page_list:
|
315
|
+
context:
|
316
|
+
pak: 2
|
317
|
+
src: "<r:nodes in='site' limit='10' order='zip' paginate='pak' do='link' page='list' join=', '/>"
|
318
|
+
tem: "/_zpage != _zcurrent.*zen_path\(@node,.*:pak.*elsif true.*_zpage/"
|
319
|
+
res: "/<a href='.*page22.html\?pak=1'>1</a>, 2, .*pak=3'>3</a>.*pak=4'>4</a>.*pak=5'>5</a>/"
|
@@ -84,7 +84,7 @@ store_node:
|
|
84
84
|
|
85
85
|
store_in_block:
|
86
86
|
src: "<r:block><r:void set_found='this' do='node' where='id = 18 in site' do='page'><r:found do='title'/>: <r:show attr='title'/></r:void></r:block>"
|
87
|
-
res: "<div id='list1'>status title: a wiki with Zena</div>"
|
87
|
+
res: "<div id='list1' data-z='22'>status title: a wiki with Zena</div>"
|
88
88
|
'zafu_attributes/store/in/block/en/list1.erb': "/_zfound = @node.*<% var3 = _zfound %><%= var3.prop\['title'\] %>:/"
|
89
89
|
|
90
90
|
set_var_outside_block:
|
@@ -112,3 +112,17 @@ unknown_link:
|
|
112
112
|
host:
|
113
113
|
tem: "<%= zazen('this is a \"link\":12. !30!', :host => 'foo.com') %>"
|
114
114
|
res: "/http://foo.com/oo/section12.html\">link.*http://foo.com/en/image30_std.jpg/"
|
115
|
+
|
116
|
+
amp:
|
117
|
+
tem: "<%= zazen('this & that') %>"
|
118
|
+
res: "<p>this & that</p>"
|
119
|
+
|
120
|
+
pre:
|
121
|
+
tem: "<%= zazen(' Vin') %>"
|
122
|
+
res: "<pre>Vin</pre>"
|
123
|
+
|
124
|
+
target:
|
125
|
+
src: |
|
126
|
+
<r:zazen text='"":12' target="foobar"/>
|
127
|
+
tem: /:target => "foobar"/
|
128
|
+
res: /<div class='zazen'><p><a .* target=\"foobar\"/
|
data/test/selenium/Add/add3.rsel
CHANGED
@@ -1,22 +1,22 @@
|
|
1
1
|
# Add first element
|
2
2
|
open '/oo/testnode37.html?test=add3'
|
3
|
-
assert_not_visible '
|
3
|
+
assert_not_visible 'add31_title'
|
4
4
|
click 'css=img[alt=add]'
|
5
|
-
assert_visible '
|
6
|
-
type '
|
5
|
+
assert_visible 'add31_title'
|
6
|
+
type 'add31_title', 'add3'
|
7
7
|
click 'css=input[type=submit]'
|
8
|
-
wait_for_not_visible '
|
8
|
+
wait_for_not_visible 'add31_title'
|
9
9
|
verify_text 'css=.add3 a', 'add3'
|
10
10
|
# should have correct parent
|
11
11
|
verify_text 'css=.add3 span', 'Kill the bugs'
|
12
12
|
|
13
13
|
# Add a second element
|
14
|
-
assert_not_visible '
|
14
|
+
assert_not_visible 'add31_title'
|
15
15
|
click 'css=img[alt=add]'
|
16
|
-
assert_visible '
|
17
|
-
type '
|
16
|
+
assert_visible 'add31_title'
|
17
|
+
type 'add31_title', 'add3_2'
|
18
18
|
click 'css=input[type=submit]'
|
19
|
-
wait_for_not_visible '
|
19
|
+
wait_for_not_visible 'add31_title'
|
20
20
|
verify_text 'css=.add3_2 a', 'add3_2'
|
21
21
|
# should have correct parent
|
22
22
|
verify_text 'css=.add3_2 span', 'Kill the bugs'
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# See also the RDoc for SeleniumOnRails::TestBuilder.
|
2
|
+
# View result in browser: http://test.host:3000/selenium
|
3
|
+
|
4
|
+
setup :fixtures => :all
|
5
|
+
|
6
|
+
# Setup code
|
7
|
+
open '/login'
|
8
|
+
type 'user_login', 'lion'
|
9
|
+
type 'password', 'lion'
|
10
|
+
click_and_wait 'commit'
|
11
|
+
click_and_wait 'link=Kill the bugs'
|
12
|
+
verify_text '_title37', 'Kill the bugs'
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# Add first element
|
2
|
+
open '/oo/testnode37.html?test=destroy1'
|
3
|
+
verify_element_not_present 'destroy_destroy1'
|
4
|
+
|
5
|
+
click 'css=img[alt=add]'
|
6
|
+
type 'destroy_list1_title', 'destroy1'
|
7
|
+
click 'css=input[type=submit]'
|
8
|
+
wait_for_element_present 'destroy_destroy1'
|
9
|
+
|
10
|
+
click 'css=#destroy_destroy1 a'
|
11
|
+
assert_confirmation 'Destroy destroy1 ?'
|
12
|
+
wait_for_element_not_present 'destroy_destroy1'
|
13
|
+
|
14
|
+
# Reload
|
15
|
+
open '/oo/testnode37.html?test=destroy1'
|
16
|
+
verify_element_not_present 'destroy_destroy1'
|