zena 1.2.1 → 1.2.2

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.
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'