zena 1.2.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (202) hide show
  1. data/History.txt +38 -1
  2. data/app/controllers/documents_controller.rb +7 -5
  3. data/app/controllers/nodes_controller.rb +47 -6
  4. data/app/controllers/user_sessions_controller.rb +12 -3
  5. data/app/controllers/virtual_classes_controller.rb +8 -2
  6. data/app/models/acl.rb +5 -2
  7. data/app/models/cached_page.rb +5 -5
  8. data/app/models/column.rb +27 -4
  9. data/app/models/group.rb +1 -1
  10. data/app/models/node.rb +106 -24
  11. data/app/models/note.rb +2 -1
  12. data/app/models/relation.rb +9 -4
  13. data/app/models/relation_proxy.rb +2 -2
  14. data/app/models/role.rb +12 -5
  15. data/app/models/site.rb +10 -9
  16. data/app/models/skin.rb +8 -0
  17. data/app/models/string_hash.rb +65 -0
  18. data/app/models/text_document.rb +1 -1
  19. data/app/models/user.rb +2 -0
  20. data/app/models/virtual_class.rb +43 -10
  21. data/app/views/comments/create.rjs +1 -32
  22. data/app/views/comments/edit.rjs +1 -1
  23. data/app/views/comments/update.rjs +1 -1
  24. data/app/views/documents/show.rhtml +1 -1
  25. data/app/views/groups/_form.rhtml +7 -0
  26. data/app/views/groups/_li.rhtml +1 -1
  27. data/app/views/nodes/500.html +2 -1
  28. data/app/views/nodes/destroy.rjs +2 -0
  29. data/app/views/sites/jobs.erb +2 -3
  30. data/app/views/templates/document_create_tabs/_file.rhtml +1 -1
  31. data/app/views/templates/document_create_tabs/_import.rhtml +4 -1
  32. data/app/views/templates/document_create_tabs/_template.rhtml +3 -0
  33. data/app/views/templates/document_create_tabs/_text_document.rhtml +3 -0
  34. data/app/views/versions/custom_tab.rhtml +1 -1
  35. data/app/views/versions/edit.rhtml +1 -1
  36. data/bricks/acls/lib/bricks/acls.rb +3 -3
  37. data/bricks/acls/zena/test/unit/acl_test.rb +15 -0
  38. data/bricks/fs_skin/lib/bricks/fs_skin.rb +190 -0
  39. data/bricks/fs_skin/zena/init.rb +1 -0
  40. data/bricks/fs_skin/zena/migrate/20110702010330_add_fs_skin_to_idx_templates.rb +12 -0
  41. data/bricks/{static → fs_skin}/zena/skins/blog/Image-edit.zafu +0 -0
  42. data/bricks/{static → fs_skin}/zena/skins/blog/Image.zafu +0 -0
  43. data/bricks/{static → fs_skin}/zena/skins/blog/Node-+index.zafu +0 -0
  44. data/bricks/{static → fs_skin}/zena/skins/blog/Node-+notFound.zafu +0 -0
  45. data/bricks/{static → fs_skin}/zena/skins/blog/Node-+search.zafu +0 -0
  46. data/bricks/{static → fs_skin}/zena/skins/blog/Node.zafu +1 -1
  47. data/bricks/{static → fs_skin}/zena/skins/blog/Post.zafu +0 -0
  48. data/bricks/{static → fs_skin}/zena/skins/blog/Project--kml.zafu +0 -0
  49. data/bricks/{static → fs_skin}/zena/skins/blog/Project.zafu +0 -0
  50. data/bricks/{static → fs_skin}/zena/skins/blog/comments.zafu +0 -0
  51. data/bricks/{static → fs_skin}/zena/skins/blog/dict.yml +0 -0
  52. data/bricks/{static → fs_skin}/zena/skins/blog/img/dateBg.jpg +0 -0
  53. data/bricks/{static → fs_skin}/zena/skins/blog/img/header.png +0 -0
  54. data/bricks/{static → fs_skin}/zena/skins/blog/img/mapPin.png +0 -0
  55. data/bricks/{static → fs_skin}/zena/skins/blog/img/menu.gif +0 -0
  56. data/bricks/{static → fs_skin}/zena/skins/blog/img/menuover.gif +0 -0
  57. data/bricks/{static → fs_skin}/zena/skins/blog/img/style.css +0 -0
  58. data/bricks/fs_skin/zena/tasks.rb +26 -0
  59. data/bricks/{static/zena/test/integration/static_integration_test.rb → fs_skin/zena/test/integration/fs_skin_integration_test.rb} +6 -6
  60. data/bricks/fs_skin/zena/test/unit/fs_skin_test.rb +33 -0
  61. data/bricks/grid/lib/bricks/grid.rb +4 -3
  62. data/bricks/tags/lib/bricks/tags.rb +1 -7
  63. data/bricks/zena/zena/migrate/20120605091558_add_ssl_login_to_site.rb +7 -0
  64. data/bricks/zena/zena/migrate/20120630123551_add_auto_publish_to_group.rb +9 -0
  65. data/config/bricks.yml +3 -3
  66. data/config/gems.yml +2 -3
  67. data/lib/tasks/zena.rake +7 -3
  68. data/lib/zafu.rb +7 -0
  69. data/lib/zafu/all.rb +21 -0
  70. data/lib/zafu/compiler.rb +7 -0
  71. data/lib/zafu/controller_methods.rb +58 -0
  72. data/lib/zafu/handler.rb +57 -0
  73. data/lib/zafu/info.rb +4 -0
  74. data/lib/zafu/markup.rb +309 -0
  75. data/lib/zafu/mock_helper.rb +42 -0
  76. data/lib/zafu/node_context.rb +203 -0
  77. data/lib/zafu/ordered_hash.rb +53 -0
  78. data/lib/zafu/parser.rb +676 -0
  79. data/lib/zafu/parsing_rules.rb +382 -0
  80. data/lib/zafu/process/ajax.rb +530 -0
  81. data/lib/zafu/process/conditional.rb +92 -0
  82. data/lib/zafu/process/context.rb +186 -0
  83. data/lib/zafu/process/forms.rb +143 -0
  84. data/lib/zafu/process/html.rb +186 -0
  85. data/lib/zafu/process/ruby_less_processing.rb +321 -0
  86. data/lib/zafu/security.rb +15 -0
  87. data/lib/zafu/template.rb +25 -0
  88. data/lib/zafu/test_helper.rb +19 -0
  89. data/lib/zafu/view_methods.rb +6 -0
  90. data/lib/zena.rb +1 -1
  91. data/lib/zena/acts/enrollable.rb +1 -1
  92. data/lib/zena/app.rb +4 -17
  93. data/lib/zena/console.rb +18 -1
  94. data/lib/zena/core_ext/file_utils.rb +13 -1
  95. data/lib/zena/core_ext/fixnum.rb +4 -0
  96. data/lib/zena/core_ext/float.rb +7 -0
  97. data/lib/zena/deploy.rb +4 -2
  98. data/lib/zena/deploy/app_init.rhtml +2 -1
  99. data/lib/zena/deploy/database.rhtml +1 -1
  100. data/lib/zena/info.rb +1 -1
  101. data/lib/zena/parser/zazen_rules.rb +4 -4
  102. data/lib/zena/routes.rb +1 -1
  103. data/lib/zena/test_controller.rb +1 -1
  104. data/lib/zena/use.rb +14 -1
  105. data/lib/zena/use/action.rb +4 -2
  106. data/lib/zena/use/ajax.rb +86 -38
  107. data/lib/zena/use/authlogic.rb +16 -1
  108. data/lib/zena/use/calendar.rb +37 -17
  109. data/lib/zena/use/conditional.rb +2 -2
  110. data/lib/zena/use/context.rb +30 -9
  111. data/lib/zena/use/dates.rb +39 -3
  112. data/lib/zena/use/display.rb +6 -19
  113. data/lib/zena/use/forms.rb +100 -79
  114. data/lib/zena/use/i18n.rb +40 -16
  115. data/lib/zena/use/query_builder.rb +0 -6
  116. data/lib/zena/use/query_node.rb +17 -4
  117. data/lib/zena/use/relations.rb +1 -3
  118. data/lib/zena/use/rendering.rb +10 -8
  119. data/lib/zena/use/scope_index.rb +5 -1
  120. data/lib/zena/use/search.rb +2 -1
  121. data/lib/zena/use/urls.rb +82 -77
  122. data/lib/zena/use/workflow.rb +12 -4
  123. data/lib/zena/use/zafu_safe_definitions.rb +37 -9
  124. data/lib/zena/use/zafu_templates.rb +49 -20
  125. data/lib/zena/use/zazen.rb +6 -2
  126. data/locale/it/LC_MESSAGES/zena.mo +0 -0
  127. data/locale/it/zena.mo +0 -0
  128. data/locale/it/zena.po +1982 -0
  129. data/public/images/arrow_back.png +0 -0
  130. data/public/images/remove_tag.png +0 -0
  131. data/public/javascripts/grid.js +800 -199
  132. data/public/javascripts/window.js +1 -1
  133. data/public/javascripts/zena.js +130 -21
  134. data/public/stylesheets/grid.css +11 -2
  135. data/public/stylesheets/zena.css +2 -1
  136. data/test/custom_queries/complex.host.yml +5 -0
  137. data/test/fixtures/files/TestNode.zafu +36 -0
  138. data/test/functional/nodes_controller_test.rb +18 -1
  139. data/test/integration/zafu_compiler/action.yml +2 -2
  140. data/test/integration/zafu_compiler/ajax.yml +44 -26
  141. data/test/integration/zafu_compiler/asset.yml +12 -2
  142. data/test/integration/zafu_compiler/basic.yml +0 -16
  143. data/test/integration/zafu_compiler/calendar.yml +6 -6
  144. data/test/integration/zafu_compiler/complex_ok.yml +23 -1
  145. data/test/integration/zafu_compiler/conditional.yml +5 -5
  146. data/test/integration/zafu_compiler/context.yml +6 -5
  147. data/test/integration/zafu_compiler/dates.yml +23 -2
  148. data/test/integration/zafu_compiler/display.yml +46 -2
  149. data/test/integration/zafu_compiler/errors.yml +2 -2
  150. data/test/integration/zafu_compiler/eval.yml +35 -7
  151. data/test/integration/zafu_compiler/forms.yml +47 -13
  152. data/test/integration/zafu_compiler/i18n.yml +2 -2
  153. data/test/integration/zafu_compiler/meta.yml +35 -1
  154. data/test/integration/zafu_compiler/query.yml +23 -4
  155. data/test/integration/zafu_compiler/relations.yml +10 -6
  156. data/test/integration/zafu_compiler/roles.yml +4 -4
  157. data/test/integration/zafu_compiler/rubyless.yml +11 -1
  158. data/test/integration/zafu_compiler/safe_definitions.yml +23 -5
  159. data/test/integration/zafu_compiler/security.yml +10 -6
  160. data/test/integration/zafu_compiler/urls.yml +23 -6
  161. data/test/integration/zafu_compiler/zafu_attributes.yml +1 -1
  162. data/test/integration/zafu_compiler/zazen.yml +14 -0
  163. data/test/selenium/Add/add3.rsel +8 -8
  164. data/test/selenium/Destroy/0setup.rsel +12 -0
  165. data/test/selenium/Destroy/destroy1.rsel +16 -0
  166. data/test/selenium/Edit/edit2.rsel +9 -9
  167. data/test/selenium/Edit/edit5.rsel +9 -9
  168. data/test/selenium/Edit/edit6.rsel +9 -9
  169. data/test/selenium/Form/form4.rsel +17 -0
  170. data/test/selenium/Toggle/toggle1.rsel +2 -0
  171. data/test/selenium/Toggle/toggle2.rsel +18 -0
  172. data/test/sites/zena/columns.yml +3 -0
  173. data/test/sites/zena/versions.yml +7 -0
  174. data/test/unit/cached_page_test.rb +13 -13
  175. data/test/unit/column_test.rb +26 -0
  176. data/test/unit/node_test.rb +16 -1
  177. data/test/unit/project_test.rb +6 -1
  178. data/test/unit/relation_test.rb +1 -1
  179. data/test/unit/role_test.rb +1 -1
  180. data/test/unit/string_hash_test.rb +30 -0
  181. data/test/unit/virtual_class_test.rb +31 -17
  182. data/test/unit/zafu_markup_test.rb +414 -0
  183. data/test/unit/zafu_node_context_test.rb +375 -0
  184. data/test/unit/zafu_ordered_hash_test.rb +69 -0
  185. data/test/unit/zena/acts/enrollable_test.rb +1 -1
  186. data/test/unit/zena/parser/zafu_asset.yml +0 -10
  187. data/test/unit/zena/parser/zazen.yml +1 -1
  188. data/test/unit/zena/parser_test.rb +1 -72
  189. data/test/unit/zena/use/dates_test.rb +1 -1
  190. data/test/unit/zena/use/rendering_test.rb +24 -7
  191. data/test/unit/zena/use/scope_index_test.rb +17 -0
  192. data/test/unit/zena/use/zazen_test.rb +2 -1
  193. data/zena.gemspec +71 -37
  194. metadata +104 -83
  195. data/app/views/nodes/destroy.erb +0 -0
  196. data/bricks/static/lib/bricks/static.rb +0 -151
  197. data/bricks/static/zena/init.rb +0 -1
  198. data/bricks/static/zena/migrate/20110702010330_add_static_to_idx_templates.rb +0 -12
  199. data/bricks/static/zena/test/unit/static_test.rb +0 -33
  200. data/lib/zena/parser/zafu_rules.rb +0 -244
  201. data/lib/zena/parser/zafu_tags.rb +0 -198
  202. 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' xml:lang='en'></html>"
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
- src: "<r:tagged in='site' or='images in site' or='tags in site' do='each' join=',' do='title'/>"
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
- old_src: "<r:images in='site' order='title ASC' do='group' by='project' sort='zip'><b do='project' do='title'/>: <r:each join=',' do='title'/></r:images>"
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"
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 (3), Task (1), Letter (3)"
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='3'>Original.*<th>exif</th><th>height</th><th>width</th>.*<td>image/jpeg</td><td>jpg</td>/"
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(:name)'/>"
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(:title).join(\",\")'/>"
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(:name).join('-')"
105
- tem: "/VirtualClass\[\"Contact\"\] \? VirtualClass\[\"Contact\"\].all_relations.map\(&:other_role\).compact.join\(\"-\"\)/"
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 =&gt; 1).strftime(\"%Y-%m-%d\")'/>"
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 =&gt; params[:q]}' do='to_param'/>"
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: "&lt;% puts 'mean' %&gt;"
17
17
 
18
18
  forbidden_methods:
19
- src: "<r:eval>eval '\'bad\''</r:eval>"
20
- tem: "/unknown method 'eval\(String\)'/"
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: "/>%= 5\+8 %>/"
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 '&lt;&lt;/r:void&gt;&lt;'</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: "<<div id='foo'></div>"
59
+ res: "<span class='parser_error'>Invalid tag near '&lt;&lt;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: "&lt;%"
@@ -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 =&gt; \"some.host:445\", :ssl =&gt; true)}' do='title'/>"
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 =&gt; \"foo\")}'>blah</a>"
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 =&gt; -1).strftime(\"%Y-%m-%d\", \"Asia/Jakarta\")' text='PREV'/>"
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 ? \"status title\"' href='/nodes/22' onclick='return Zena.m(this,\"delete\")'>status title</a>"
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 =&gt; \"js\", :tstamp =&gt; find(26).updated_at.to_i)}'></script>"
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 &#38; 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\"/
@@ -1,22 +1,22 @@
1
1
  # Add first element
2
2
  open '/oo/testnode37.html?test=add3'
3
- assert_not_visible 'add33_title'
3
+ assert_not_visible 'add31_title'
4
4
  click 'css=img[alt=add]'
5
- assert_visible 'add33_title'
6
- type 'add33_title', 'add3'
5
+ assert_visible 'add31_title'
6
+ type 'add31_title', 'add3'
7
7
  click 'css=input[type=submit]'
8
- wait_for_not_visible 'add33_title'
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 'add33_title'
14
+ assert_not_visible 'add31_title'
15
15
  click 'css=img[alt=add]'
16
- assert_visible 'add33_title'
17
- type 'add33_title', 'add3_2'
16
+ assert_visible 'add31_title'
17
+ type 'add31_title', 'add3_2'
18
18
  click 'css=input[type=submit]'
19
- wait_for_not_visible 'add33_title'
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'