zena 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. data/History.txt +28 -0
  2. data/README.rdoc +6 -6
  3. data/Rakefile +3 -0
  4. data/app/controllers/users_controller.rb +4 -2
  5. data/app/models/acl.rb +6 -0
  6. data/app/models/cached_page.rb +2 -1
  7. data/app/models/document.rb +3 -4
  8. data/app/models/node.rb +8 -5
  9. data/app/models/site.rb +1 -1
  10. data/app/models/template.rb +2 -2
  11. data/app/models/user.rb +5 -3
  12. data/app/views/acls/_add.rhtml +2 -1
  13. data/app/views/acls/_form.rhtml +15 -7
  14. data/app/views/acls/_li.rhtml +2 -0
  15. data/app/views/acls/index.rhtml +3 -1
  16. data/app/views/acls/show.html.erb +1 -1
  17. data/app/views/links/destroy.rjs +16 -2
  18. data/app/views/versions/destroy.rjs +1 -1
  19. data/app/views/zafu/default/Node-admin.zafu +1 -1
  20. data/bin/zena +5 -3
  21. data/bricks/acls/lib/bricks/acls.rb +11 -4
  22. data/bricks/acls/zena/migrate/20110627193757_add_allowed_mode_and_format_to_acl.rb +11 -0
  23. data/bricks/acls/zena/test/integration/acl_integration_test.rb +42 -0
  24. data/bricks/acls/zena/test/sites/erebus/acls.yml +8 -0
  25. data/bricks/mongrel/zena/deploy.rb +19 -0
  26. data/bricks/single/lib/bricks/single.rb +15 -0
  27. data/bricks/single/zena/init.rb +1 -0
  28. data/bricks/sphinx/zena/tasks.rb +1 -1
  29. data/bricks/static/lib/bricks/static.rb +151 -0
  30. data/bricks/static/zena/init.rb +1 -0
  31. data/bricks/static/zena/migrate/20110702010330_add_static_to_idx_templates.rb +12 -0
  32. data/bricks/static/zena/skins/blog/Image-edit.zafu +6 -0
  33. data/bricks/static/zena/skins/blog/Image.zafu +19 -0
  34. data/bricks/static/zena/skins/blog/Node-+index.zafu +1 -0
  35. data/bricks/static/zena/skins/blog/Node-+notFound.zafu +7 -0
  36. data/bricks/static/zena/skins/blog/Node-+search.zafu +19 -0
  37. data/bricks/static/zena/skins/blog/Node.zafu +66 -0
  38. data/bricks/static/zena/skins/blog/Post.zafu +12 -0
  39. data/bricks/static/zena/skins/blog/Project--kml.zafu +30 -0
  40. data/bricks/static/zena/skins/blog/Project.zafu +45 -0
  41. data/bricks/static/zena/skins/blog/comments.zafu +30 -0
  42. data/bricks/static/zena/skins/blog/dict.yml +11 -0
  43. data/bricks/static/zena/skins/blog/img/dateBg.jpg +0 -0
  44. data/bricks/static/zena/skins/blog/img/header.png +0 -0
  45. data/bricks/static/zena/skins/blog/img/mapPin.png +0 -0
  46. data/bricks/static/zena/skins/blog/img/menu.gif +0 -0
  47. data/bricks/static/zena/skins/blog/img/menuover.gif +0 -0
  48. data/bricks/static/zena/skins/blog/img/style.css +110 -0
  49. data/bricks/static/zena/test/integration/static_integration_test.rb +30 -0
  50. data/bricks/static/zena/test/unit/static_test.rb +33 -0
  51. data/bricks/zena/zena/migrate/01_base.rb +1 -2
  52. data/bricks/zena/zena/migrate/20110623072048_fix_cached_path_index.rb +10 -0
  53. data/bricks/zena/zena/migrate/20110710113731_remove_icon_field.rb +18 -0
  54. data/config/bricks.yml +4 -0
  55. data/config/deploy.rb +17 -2
  56. data/config/gems.yml +9 -7
  57. data/config/selenium.yml +38 -0
  58. data/lib/bricks/requirements_validation.rb +8 -2
  59. data/lib/gettext_strings.rb +2 -1
  60. data/lib/tasks/zena.rake +5 -0
  61. data/lib/zena/app.rb +12 -0
  62. data/lib/zena/console.rb +9 -1
  63. data/lib/zena/core_ext/string.rb +7 -2
  64. data/lib/zena/deploy.rb +60 -6
  65. data/lib/zena/deploy/app_init.rhtml +56 -0
  66. data/lib/zena/deploy/haproxy.cnf.rhtml +34 -0
  67. data/lib/zena/deploy/httpd.rhtml +6 -0
  68. data/lib/zena/deploy/start_stop.rhtml +35 -0
  69. data/lib/zena/info.rb +1 -1
  70. data/lib/zena/remote/connection.rb +1 -1
  71. data/lib/zena/site_worker.rb +9 -5
  72. data/lib/zena/use.rb +1 -1
  73. data/lib/zena/use/action.rb +2 -2
  74. data/lib/zena/use/ajax.rb +22 -9
  75. data/lib/zena/use/conditional.rb +5 -0
  76. data/lib/zena/use/context.rb +6 -1
  77. data/lib/zena/use/dates.rb +17 -2
  78. data/lib/zena/use/display.rb +14 -3
  79. data/lib/zena/use/forms.rb +37 -47
  80. data/lib/zena/use/html_tags.rb +3 -0
  81. data/lib/zena/use/node_context.rb +17 -17
  82. data/lib/zena/use/rendering.rb +1 -1
  83. data/lib/zena/use/urls.rb +11 -2
  84. data/lib/zena/use/zafu_attributes.rb +1 -0
  85. data/lib/zena/use/zafu_safe_definitions.rb +16 -1
  86. data/lib/zena/use/zafu_templates.rb +39 -24
  87. data/lib/zena/use/zazen.rb +1 -0
  88. data/locale/de/LC_MESSAGES/zena.mo +0 -0
  89. data/locale/de/zena.po +105 -89
  90. data/locale/en/LC_MESSAGES/zena.mo +0 -0
  91. data/locale/en/zena.mo +0 -0
  92. data/locale/en/zena.po +188 -253
  93. data/locale/fr/LC_MESSAGES/zena.mo +0 -0
  94. data/locale/fr/zena.mo +0 -0
  95. data/locale/fr/zena.po +200 -257
  96. data/locale/zena.pot +95 -85
  97. data/public/javascripts/zena.js +2 -2
  98. data/test/fixtures/files/{Node-test.zafu → TestNode.zafu} +206 -4
  99. data/test/functional/nodes_controller_test.rb +2 -2
  100. data/test/integration/navigation_test.rb +9 -3
  101. data/test/integration/query_node/basic.yml +4 -4
  102. data/test/integration/query_node/filters.yml +2 -2
  103. data/test/integration/zafu_compiler/ajax.yml +6 -6
  104. data/test/integration/zafu_compiler/basic.yml +1 -1
  105. data/test/integration/zafu_compiler/calendar.yml +4 -3
  106. data/test/integration/zafu_compiler/conditional.yml +3 -10
  107. data/test/integration/zafu_compiler/context.yml +1 -1
  108. data/test/integration/zafu_compiler/dates.yml +9 -1
  109. data/test/integration/zafu_compiler/display.yml +7 -1
  110. data/test/integration/zafu_compiler/eval.yml +12 -46
  111. data/test/integration/zafu_compiler/forms.yml +1 -1
  112. data/test/integration/zafu_compiler/query.yml +2 -2
  113. data/test/integration/zafu_compiler/relations.yml +19 -9
  114. data/test/integration/zafu_compiler/roles.yml +12 -0
  115. data/test/integration/zafu_compiler/safe_definitions.yml +1 -1
  116. data/test/integration/zafu_compiler/urls.yml +13 -5
  117. data/test/integration/zafu_compiler/version.yml +6 -0
  118. data/test/integration/zafu_compiler/zafu_attributes.yml +4 -4
  119. data/test/integration/zafu_compiler_test.rb +1 -1
  120. data/test/selenium.readme +8 -0
  121. data/test/selenium/Add/0setup.rsel +12 -0
  122. data/test/selenium/Add/add1.rsel +22 -0
  123. data/test/selenium/Add/add2.rsel +22 -0
  124. data/test/selenium/Add/add3.rsel +22 -0
  125. data/test/selenium/Drop/0setup.rsel +12 -0
  126. data/test/selenium/Drop/drop1.rsel +25 -0
  127. data/test/selenium/Drop/drop2.rsel +25 -0
  128. data/test/selenium/Drop/drop3.rsel +51 -0
  129. data/test/selenium/Drop/drop4.rsel +44 -0
  130. data/test/selenium/Drop/drop5.rsel +16 -0
  131. data/test/selenium/Edit/0setup.rsel +12 -0
  132. data/test/selenium/Edit/edit1.rsel +31 -0
  133. data/test/selenium/Edit/edit2.rsel +39 -0
  134. data/test/selenium/Edit/edit3.rsel +40 -0
  135. data/test/selenium/Form/0setup.rsel +12 -0
  136. data/test/selenium/Form/form1.rsel +9 -0
  137. data/test/selenium/Form/form2.rsel +9 -0
  138. data/test/selenium/Paginate/0setup.rsel +12 -0
  139. data/test/selenium/Paginate/paginate1.rsel +24 -0
  140. data/test/selenium/Toggle/0setup.rsel +12 -0
  141. data/test/selenium/Toggle/toggle1.rsel +21 -0
  142. data/test/sites/zena/nodes.yml +4 -4
  143. data/test/sites/zena/roles.yml +3 -2
  144. data/test/sites/zena/versions.yml +12 -11
  145. data/test/unit/core_ext_test.rb +23 -5
  146. data/test/unit/document_test.rb +6 -2
  147. data/test/unit/node_test.rb +2 -2
  148. data/test/unit/remote_test.rb +1 -2
  149. data/test/unit/role_test.rb +2 -2
  150. data/test/unit/user_test.rb +48 -1
  151. data/test/unit/virtual_class_test.rb +7 -7
  152. data/test/unit/zena/acts/secure_test.rb +1 -1
  153. data/test/unit/zena/use/rendering_test.rb +1 -1
  154. data/test/unit/zena/use/urls_test.rb +3 -3
  155. data/zena.gemspec +65 -101
  156. metadata +67 -103
  157. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run 2.tmCommand +0 -24
  158. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Context.tmCommand +0 -58
  159. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Focused Should.tmCommand +0 -88
  160. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run.tmCommand +0 -27
  161. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/YAML to Shoulda.tmCommand +0 -23
  162. data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Context.tmPreferences +0 -19
  163. data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Should.tmPreferences +0 -19
  164. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory attributes for.tmSnippet +0 -16
  165. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory build.tmSnippet +0 -16
  166. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory.tmSnippet +0 -16
  167. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define with class.tmSnippet +0 -18
  168. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define.tmSnippet +0 -18
  169. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_next.tmSnippet +0 -16
  170. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_sequence.tmSnippet +0 -18
  171. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_bad_value.tmSnippet +0 -16
  172. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_contains.tmSnippet +0 -16
  173. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_does_not_contain.tmSnippet +0 -16
  174. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_good_value.tmSnippet +0 -16
  175. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_same_elements.tmSnippet +0 -16
  176. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_save.tmSnippet +0 -16
  177. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_sent_email.tmSnippet +0 -18
  178. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_valid.tmSnippet +0 -16
  179. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/association.tmSnippet +0 -17
  180. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/attribute.tmSnippet +0 -17
  181. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/before_should block.tmSnippet +0 -18
  182. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block get.tmSnippet +0 -22
  183. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block post.tmSnippet +0 -23
  184. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block with setup.tmSnippet +0 -25
  185. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/setup.tmSnippet +0 -18
  186. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block with before proc.tmSnippet +0 -18
  187. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block.tmSnippet +0 -18
  188. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_allow_values_for.tmSnippet +0 -16
  189. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_assign_to.tmSnippet +0 -16
  190. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful denied.tmSnippet +0 -20
  191. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful.tmSnippet +0 -20
  192. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_belong_to.tmSnippet +0 -16
  193. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change by.tmSnippet +0 -16
  194. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change from to.tmSnippet +0 -16
  195. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_at_least.tmSnippet +0 -16
  196. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_in_range.tmSnippet +0 -16
  197. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_is.tmSnippet +0 -16
  198. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_value_in_range.tmSnippet +0 -16
  199. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_eventually.tmSnippet +0 -18
  200. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_filter_params.tmSnippet +0 -16
  201. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_and_belong_to_many.tmSnippet +0 -16
  202. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_class_methods.tmSnippet +0 -16
  203. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_column.tmSnippet +0 -16
  204. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_columns.tmSnippet +0 -16
  205. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_index.tmSnippet +0 -16
  206. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_indices.tmSnippet +0 -16
  207. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_instance_methods.tmSnippet +0 -16
  208. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_many.tmSnippet +0 -16
  209. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_named_scope.tmSnippet +0 -16
  210. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_one.tmSnippet +0 -16
  211. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_readonly_attributes.tmSnippet +0 -16
  212. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_mass_assignment_of.tmSnippet +0 -16
  213. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_values_for.tmSnippet +0 -16
  214. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_assign_to.tmSnippet +0 -16
  215. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_change.tmSnippet +0 -16
  216. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_set_the_flash.tmSnippet +0 -16
  217. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_redirect_to.tmSnippet +0 -16
  218. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_a_form.tmSnippet +0 -16
  219. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_template.tmSnippet +0 -16
  220. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_with_layout.tmSnippet +0 -16
  221. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_without_layout.tmSnippet +0 -16
  222. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with.tmSnippet +0 -16
  223. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with_content_type.tmSnippet +0 -16
  224. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_return_from_session.tmSnippet +0 -16
  225. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_route.tmSnippet +0 -16
  226. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_set_the_flash_to.tmSnippet +0 -16
  227. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_acceptance_of.tmSnippet +0 -16
  228. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_numericality_of.tmSnippet +0 -16
  229. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_presence_of.tmSnippet +0 -16
  230. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of with scope.tmSnippet +0 -16
  231. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of.tmSnippet +0 -16
  232. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/catch_exception.rb +0 -39
  233. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/run_script.rb +0 -104
  234. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/stdin_dialog.rb +0 -14
  235. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/test.rb +0 -17
  236. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/todo.txt +0 -13
  237. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/bin/yaml_to_shoulda.rb +0 -25
  238. data/vendor/TextMate/Ruby Shoulda.tmbundle/Syntaxes/Ruby on Rails (Shoulda).tmLanguage +0 -166
  239. data/vendor/TextMate/Ruby Shoulda.tmbundle/info.plist +0 -304
  240. data/vendor/TextMate/Zena.tmbundle/Commands/Run all yaml tests.tmCommand +0 -37
  241. data/vendor/TextMate/Zena.tmbundle/Commands/Run focused yaml test.tmCommand +0 -52
  242. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/catch_exception.rb +0 -39
  243. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/run_script.rb +0 -118
  244. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/stdin_dialog.rb +0 -14
  245. data/vendor/TextMate/Zena.tmbundle/info.plist +0 -17
@@ -648,7 +648,7 @@ Zena.popup_keydown = function(evt) {
648
648
  //if (e.keyCode) code = e.keyCode;
649
649
  //else if (e.which) code = e.which;
650
650
  var character = String.fromCharCode(code);
651
- alert('Character was ' + character);
651
+ //alert('Character was ' + character);
652
652
 
653
653
  if (code == Event.KEY_LEFT) {
654
654
  if (gallery.prev) {
@@ -903,7 +903,7 @@ Zena.plus_minus = function(elem, start, plus, minus) {
903
903
  var show = start == 'on' ? 'display:none;' : '';
904
904
  var hide = start == 'on' ? '' : 'display:none;';
905
905
  var trigger_tag = " <a id='off_"+id+"' style='"+show+"' onclick='Zena.m_toggle(\"" + id +"\")' class='plus_btn'>"+plus+"</a><a id='on_"+id+"' style='"+hide+"' onclick='Zena.m_toggle(\"" + id +"\")' class='minus_btn'>"+minus+"</a>";
906
- var new_tag = "<"+tag+" style='"+hide+"' id='txt_"+id+"' class='txt'>" + elem.innerHTML + "</"+tag+">";
906
+ var new_tag = "<"+tag+" style='"+hide+"' id='txt_"+id+"' class='txt" + ' ' + elem.className + "'>" + elem.innerHTML + "</"+tag+">";
907
907
  if (tag.toUpperCase() == 'SPAN' || !elem.previous()) {
908
908
  Element.replace(elem, trigger_tag + ' ' + new_tag);
909
909
  } else {
@@ -6,15 +6,216 @@
6
6
  <r:stylesheets media='all' list='reset,zena,code,calendar'/>
7
7
  </r:void>
8
8
  <link href="style.css" rel="Stylesheet" type="text/css"/>
9
-
9
+ <style>
10
+ .test { float:left; width:200px; padding:10px; background:#eee; border:1px solid #333; margin:0 10px 10px 0}
11
+ .test h3 {background:#333; color:white; text-align:center; margin:-10px -10px 10px -10px;}
12
+ .test a { color:#0067C6}
13
+ .test input {width:10em; height:1.2em; padding:2px;}
14
+ .test input[type="checkbox"] {width:1.2em;}
15
+ .test p { font-size:10px; font-style:italic; margin:-10px -10px 10px -10px; padding:5px; background:#ccc; border-bottom:1px solid #333; line-height:15px;}
16
+ .test td, .test th { border:1px solid #666; padding:2px;}
17
+ .test th { color:white; background-color:#666;}
18
+ .test .btn_x {padding:0; background:none; border:none; float:left; margin:5px 5px 5px 0;}
19
+ .test li.form {list-style-type:none; padding:0;}
20
+ .test .drop, .test .box {border:1px solid #888; margin:1em 0}
21
+ .test .drop {background:#ccc;}
22
+ .test .drop_hover { background:#ace; border:2px dashed #99f;}
23
+ </style>
10
24
  <r:javascripts list='prototype,effects,zena,dragdrop'/>
11
25
  <r:uses_datebox/>
12
26
  </r:with>
13
27
 
14
-
15
28
  <r:with part='context'/>
16
29
 
17
30
  <r:with part='content' class='project'>
31
+
32
+ <div class='test' id='add1' do='selenium'>
33
+ <h3>add1</h3>
34
+ <p>Using "add" to create new elements. The parent is guessed from context.</p>
35
+ <ul do='projects in site'>
36
+ <li do='add' klass='Project' after='self'/>
37
+ <li class='#{title}' do='each'><r:link/> <span do='parent' do='title'/></li>
38
+ </ul>
39
+ </div>
40
+
41
+ <div class='test' id='add2' do='selenium'>
42
+ <h3>add2</h3>
43
+ <p>Using "add" to create new elements. The parent is set witn node[parent_id]='root.id'.</p>
44
+ <ul do='projects in site'>
45
+ <li do='add' klass='Project' node[parent_id]='root.id' after='self'/>
46
+ <li class='#{title}' do='each'><r:link/> <span do='parent' do='title'/></li>
47
+ </ul>
48
+ </div>
49
+
50
+ <div class='test' id='add3' do='selenium'>
51
+ <h3>add3</h3>
52
+ <p>Create new elements with [add_btn] and [form_tag] (in table).</p>
53
+ <table do='projects in site'>
54
+ <tr do='add' klass='Project' after='self'>
55
+ <td do='add_btn'/>
56
+ </tr>
57
+ <tr class='#{title}' do='each'>
58
+ <td><r:link/> <span do='parent' do='title'/></td>
59
+ </tr>
60
+ <tr do='form'>
61
+ <td do='form_tag'><r:input name='title'/><r:input type='submit'/></td>
62
+ </tr>
63
+ </table>
64
+ </div>
65
+
66
+ <div class='test' id='edit1' do='selenium'>
67
+ <h3>edit1</h3>
68
+ <p>Edit in place, form built from block.</p>
69
+ <ul do='block'>
70
+ <li do='edit'/>
71
+ <li class='title' do='title'/>
72
+ <li do='if' in='form'><r:input type='submit'/></li>
73
+ </ul>
74
+ </div>
75
+
76
+ <div class='test' id='edit2' do='selenium'>
77
+ <h3>edit2</h3>
78
+ <p>Edit in place with custom from.</p>
79
+ <ul do='block'>
80
+ <li do='edit'/>
81
+ <li class='title' do='title'/>
82
+ <li do='form' on='edit'>
83
+ <r:input name='title'/> <r:input type='checkbox' name='v_status' value='50'/>
84
+ </li>
85
+ </ul>
86
+ </div>
87
+
88
+ <div class='test' id='edit3' do='selenium'>
89
+ <h3>edit3</h3>
90
+ <p>Edit table place (makes form from block). This should not break html (the form should be outside of the "table" tag).</p>
91
+ <table do='block'>
92
+ <tr><td colspan='2' do='edit'/></tr>
93
+ <tr><td>title</td><td class='title' do='title'/></tr>
94
+ </table>
95
+ </div>
96
+
97
+ <div class='test' id='toggle1' do='selenium'>
98
+ <h3>toggle1</h3>
99
+ <p>Toggle relation in list.</p>
100
+ <ul class='references' do='references'>
101
+ <li do='each' do='title'/>
102
+ </ul>
103
+ <ul do='projects in site'>
104
+ <li do='each' toggle='reference' for='start' do='title'/>
105
+ </ul>
106
+ </div>
107
+
108
+ <div class='test' id='paginate1' do='selenium'>
109
+ <h3>paginate1</h3>
110
+ <p>Ajax pagination.</p>
111
+ <table id='paginate1_tbl' do='block' do='nodes in site limit 3 paginate p'>
112
+ <tr>
113
+ <th style='width:4em'>klass</th>
114
+ <th>title</th>
115
+ </tr>
116
+ <tr>
117
+ <td colspan='2'>
118
+ <span do='link' page='list' update='paginate1_tbl'/>
119
+ </td>
120
+ </tr>
121
+ <tr id='node#{id}' do='each'>
122
+ <td do='klass'/>
123
+ <td do='title'/>
124
+ </tr>
125
+ </table>
126
+ </div>
127
+
128
+ <div class='test' id='form1' do='selenium'>
129
+ <h3>form1</h3>
130
+ <p>Form in [new] to create objects.</p>
131
+ <r:new klass='Page' title='%{hello}'>
132
+ <r:form node[v_status]='50'>
133
+ <r:input label='t' name='title'/>
134
+ </r:form>
135
+ </r:new>
136
+ </div>
137
+
138
+ <div class='test' id='form2' do='selenium'>
139
+ <h3>form2</h3>
140
+ <p>Form to update object.</p>
141
+ <r:form node[v_status]='50'>
142
+ <r:input label='t' name='title'/>
143
+ </r:form>
144
+ </div>
145
+
146
+ <div class='test' id='drop1' do='selenium'>
147
+ <h3>drop1</h3>
148
+ <p>Create a relation by drag and dropping.</p>
149
+
150
+ <ul do='pages in site limit 3'>
151
+ <li do='each' draggable='true' do='title'/>
152
+ </ul>
153
+ <ul do='drop' set='reference' change='receiver' do='references'>
154
+ <li class='#{id}' do='each'><r:unlink/> <r:title/></li>
155
+ </ul>
156
+ </div>
157
+
158
+ <div class='test' id='drop2' do='selenium'>
159
+ <h3>drop2</h3>
160
+ <p>Drop in each loop.</p>
161
+
162
+ <ul do='pages in site limit 3'>
163
+ <li do='each' draggable='true' do='title'/>
164
+ </ul>
165
+
166
+ <r:projects in='site' do='each'>
167
+ <ul class='drop drop_#{id}' do='drop' set='reference' change='receiver' do='references'>
168
+ <li class='#{id}' do='each'><r:unlink/> <r:title/></li>
169
+ </ul>
170
+ </r:projects>
171
+ </div>
172
+
173
+ <div class='test' id='drop3' do='selenium'>
174
+ <h3>drop3</h3>
175
+ <p>Drag from list in each loop.</p>
176
+ <r:projects in='site' do='each'>
177
+ <ul class='box' do='pages'>
178
+ <li class='#{id}' do='each' draggable='true' do='title'/>
179
+ </ul>
180
+ </r:projects>
181
+
182
+ <ul do='drop' set='reference' change='receiver' do='references'>
183
+ <li class='#{id}' do='each'><r:unlink/> <r:title/></li>
184
+ </ul>
185
+ </div>
186
+
187
+ <div class='test' id='drop4' do='selenium'>
188
+ <h3>drop4</h3>
189
+ <p>Drag duplicate elements in source.</p>
190
+
191
+ <ul class='box' do='pages in project limit 3'>
192
+ <li class='#{id}' do='each' draggable='true' do='title'/>
193
+ </ul>
194
+
195
+ <ul class='box' do='pages in project limit 3'>
196
+ <li class='#{id}' do='each' draggable='true' do='title'/>
197
+ </ul>
198
+
199
+ <ul do='drop' set='reference' change='receiver' do='references'>
200
+ <li class='#{id}' do='each'><r:unlink/> <r:title/></li>
201
+ </ul>
202
+ </div>
203
+
204
+ <div class='test' id='drop5' do='selenium'>
205
+ <h3>drop5</h3>
206
+ <p>Drag from drop loop.</p>
207
+
208
+ <ul class='box' do='pages in project limit 3'>
209
+ <li class='#{id}' do='each' draggable='true' do='title'/>
210
+ </ul>
211
+
212
+ <r:projects in='site' do='each'>
213
+ <ul class='drop drop_#{id}' do='drop' set='reference' change='receiver' do='references'>
214
+ <li class='#{id}' do='each' draggable='true'><r:unlink/> <r:title/></li>
215
+ </ul>
216
+ </r:projects>
217
+ </div>
218
+ <!-- OLD TESTS
18
219
  <div id='related'>
19
220
  <ul do='pages'>
20
221
  <li do='each'><p><b do='show' attr='title' edit='true' publish='true'/> <r:edit/></p>
@@ -188,7 +389,7 @@ This filter updates the "distant filter block test"
188
389
  <h3>drop set relation (drop in each)</h3>
189
390
 
190
391
  <ul do='tags in site'>
191
- <!-- drop in each -->
392
+ //! drop in each
192
393
  <li style='border:1px solid #400; min_width:100px; min_height:100px;' do='each' do='drop' set='set_tag'>
193
394
  <b do='title'/>
194
395
  <ul do='context' select='tagged'><li do='each' do='unlink' do='img' mode='tiny'/></ul>
@@ -199,7 +400,7 @@ This filter updates the "distant filter block test"
199
400
 
200
401
 
201
402
  <ul do='tags in site'>
202
- <!-- drop in each -->
403
+ //! drop in each
203
404
  <li style='border:1px solid #400; min_width:100px; min_height:100px;' do='each' do='drop' set='set_tag'>
204
405
  <b do='title'/>
205
406
  <ul do='context' select='tagged'><li do='each' do='unlink' do='img' mode='tiny'/></ul>
@@ -325,5 +526,6 @@ This filter updates the "distant filter block test"
325
526
 
326
527
 
327
528
  <hr/>
529
+ -->
328
530
  </r:with>
329
531
  </r:include>
@@ -874,7 +874,7 @@ END:VCALENDAR
874
874
  get 'edit', :id => nodes_zip(:zena)
875
875
  assert_response :success
876
876
  assert_template 'nodes/edit'
877
- assert_match %r{/Default skin/Node-%2BpopupLayout/en/_main$}, @response.layout
877
+ assert_match %r{/Default skin/Node-\+popupLayout/en/_main$}, @response.layout
878
878
  end
879
879
 
880
880
  def test_crop_image
@@ -904,7 +904,7 @@ END:VCALENDAR
904
904
  def test_should_get_test_page_without_errors
905
905
  without_files('test.host/zafu') do
906
906
  login(:tiger)
907
- get 'show', 'prefix'=>'oo', 'path'=>["page#{nodes_zip(:projects)}_test.html"]
907
+ get 'show', 'prefix'=>'oo', 'path'=>["testnode#{nodes_zip(:test)}.html"]
908
908
  assert_response :success
909
909
  end
910
910
  end
@@ -326,18 +326,24 @@ class NavigationTest < Zena::Integration::TestCase
326
326
  assert_response :success
327
327
  end
328
328
  end # in the wrong language
329
-
329
+
330
330
  context 'with a mode' do
331
+ setup do
332
+ login(:lion)
333
+ secure(Template) { Template.create(:parent_id => nodes_id(:default), :title => 'Project-changes.zafu', :v_status => Zena::Status::Pub, :text => 'nothing ever changes in "<r:title/>"') }
334
+ end
335
+
331
336
  subject do
332
- 'http://test.host/en/projects-list/Clean-Water-project_test'
337
+ 'http://test.host/en/projects-list/Clean-Water-project_changes'
333
338
  end
334
339
 
335
340
  should 'get response' do
336
341
  get subject
337
342
  assert_response :success
343
+ assert_equal 'nothing ever changes in "Clean Water project"', response.body
338
344
  end
339
345
  end # with a mode
340
-
346
+
341
347
  end # On a page with custom base
342
348
 
343
349
  def test_url_with_custom_base
@@ -5,7 +5,7 @@ default:
5
5
  visitor: 'ant'
6
6
  src: ""
7
7
  sql: "[%Q{SELECT nodes.* FROM nodes WHERE #{secure_scope('nodes')} AND nodes.parent_id = ? ORDER BY nodes.zip ASC}, @node.id]"
8
- res: "Etat des travaux, The lake we love, it's a lake, water, crocodiles, super ouverture, Keeping things clean !"
8
+ res: "Etat des travaux, The lake we love, it's a lake, water, crocodiles, super ouverture"
9
9
 
10
10
  nodes:
11
11
  src: "nodes"
@@ -14,7 +14,7 @@ nodes:
14
14
  pages:
15
15
  src: "pages"
16
16
  sql: "[%Q{SELECT nodes.* FROM nodes WHERE #{secure_scope('nodes')} AND nodes.kpath LIKE 'NP%' AND nodes.parent_id = ? ORDER BY nodes.zip ASC}, @node.id]"
17
- res: "Etat des travaux, crocodiles, Keeping things clean !"
17
+ res: "Etat des travaux, crocodiles"
18
18
 
19
19
  letters:
20
20
  src: "letters"
@@ -45,7 +45,7 @@ pages_or_letters:
45
45
  node: zena
46
46
  src: pages or letters
47
47
  sql: "[%Q{SELECT nodes.* FROM nodes WHERE #{secure_scope('nodes')} AND ((nodes.kpath LIKE 'NP%' AND nodes.parent_id = ?) OR (nodes.kpath LIKE 'NNL%' AND nodes.parent_id = ?)) GROUP BY id ORDER BY nodes.zip ASC}, @node.id, @node.id]"
48
- res: "people, projects list, Collections, Nature, zena enhancements, Skins (layout themes)"
48
+ res: "people, projects list, Collections, Kill the bugs, Nature, zena enhancements, Skins (layout themes)"
49
49
 
50
50
  project:
51
51
  sql: "[%Q{SELECT nodes.* FROM nodes WHERE #{secure_scope('nodes')} AND nodes.id = ? ORDER BY nodes.zip ASC}, @node.get_project_id]"
@@ -78,7 +78,7 @@ vclass_in_project:
78
78
 
79
79
  vlcass_or_pages:
80
80
  src: "(posts in project) or pages"
81
- res: "Etat des travaux, crocodiles, super ouverture, Keeping things clean !"
81
+ res: "Etat des travaux, crocodiles, super ouverture"
82
82
 
83
83
  find_relation:
84
84
  context:
@@ -87,7 +87,7 @@ filter_with_fullpath:
87
87
  # Get all objects under a given node (node the '/' to avoid self)
88
88
  src: "nodes where fullpath like \"#{fullpath}/%\" in site order by fullpath"
89
89
  sql: "[%Q{SELECT nodes.* FROM nodes WHERE #{secure_scope('nodes')} AND nodes.fullpath LIKE ? ORDER BY nodes.fullpath}, \"#{@node.fullpath}/%\"]"
90
- res: "Etat des travaux, The lake we love, it's a lake, water, crocodiles, super ouverture, Keeping things clean !"
90
+ res: "Etat des travaux, The lake we love, it's a lake, water, crocodiles, super ouverture"
91
91
 
92
92
  class_filter:
93
93
  src: "nodes where class like Image or class = Project in site"
@@ -120,7 +120,7 @@ filter_by_parent:
120
120
  src: "nodes where parent_id = 11 in site"
121
121
  # nodes where parent.zip = ...
122
122
  sql: "%Q{SELECT nodes.* FROM nodes,nodes AS jn1 WHERE #{secure_scope('nodes')} AND jn1.zip = 11 AND jn1.id = nodes.parent_id AND jn1.site_id = nodes.site_id ORDER BY nodes.zip ASC}"
123
- res: 'people, projects list, Collections, Nature, zena enhancements, Skins (layout themes)'
123
+ res: 'people, projects list, Collections, Kill the bugs, Nature, zena enhancements, Skins (layout themes)'
124
124
  #many_role_filter:
125
125
  # This is not working (or clause on 'indexed' fields is not supported right now)
126
126
  # src: "nodes where role = Original or role = Task in site"
@@ -12,7 +12,7 @@ block:
12
12
  add:
13
13
  src: "<ul id='children' do='nodes'><li do='each' do='link'/><li do='add'/></ul>"
14
14
  tem: "/\[\"children_add\", \"children_form\"\].each\(Element.toggle\)/"
15
- 'ajax/add/en/children_form.erb': "/class='form' id='<%= ndom_id\(@node\) %>_form'/"
15
+ 'ajax/add/en/children_form.erb': "/class='form' id='<%= ndom_id\(@node\) %>'/"
16
16
  'ajax/add/en/children.erb': "<li id='<%= ndom_id(@node) %>'><a href='<%= zen_path(@node) %>'><%= @node.prop['title'] %></a></li>"
17
17
 
18
18
  edit_not_each:
@@ -51,7 +51,7 @@ form_update:
51
51
  src: "<div id='foo' do='block'><r:form update='foo'></r:form></div>"
52
52
  res: "/t_url=ajax%2Fform%2Fupdate%2Ffoo/"
53
53
  'ajax/form/update/en/foo.erb': '/t_url=ajax%2Fform%2Fupdate%2Ffoo'
54
-
54
+
55
55
  add_each_no_form:
56
56
  src: "<ul do='children' id='things'><li do='each'>I <p do='title'>blah</p></li><li do='add'/></ul>"
57
57
  tem: "!/</ul><ul></ul>/" # bug in closing group with [add].
@@ -128,7 +128,7 @@ make_form:
128
128
  src: "<ul do='children'><li do='each' do='title'/><li do='add'/></ul>"
129
129
  tem: "/<li style='display:none;' class='form' id='list1_form'>.*remote_form_for\(:node, var2_new"
130
130
  'ajax/make/form/en/list1.erb': "<li id='<%= ndom_id(@node) %>'><%= @node.prop['title'] %></li>"
131
- 'ajax/make/form/en/list1_form.erb': "/<li class='form' id='<%= ndom_id\(@node\) %>_form'>/"
131
+ 'ajax/make/form/en/list1_form.erb': "/<li class='form' id='<%= ndom_id\(@node\) %>'>/"
132
132
 
133
133
  each_edit_cannot_write:
134
134
  context:
@@ -178,7 +178,7 @@ live_filter:
178
178
  # Make sure a unique_name is set for the given block
179
179
  tem: "/name='t_url' value='ajax/live/filter/list1'.*<% filter_form\(@node.*ml1.value LIKE \?.*, \"#\{params\[:f\]\}%\"/"
180
180
  'ajax/live/filter/en/list1.erb': "/<div id='<%= ndom_id\(@node\).*, \"#\{params\[:f\]\}%\".*var2.prop\['title'\]/"
181
- res: "/<input type='text' name='f'.*<div id='list1'><ol><li>crocodiles</li><li>Keeping things clean !</li><li>status title</li></ol></div>/"
181
+ res: "/<input type='text' name='f'.*<div id='list1'><ol><li>crocodiles</li><li>status title</li></ol></div>/"
182
182
 
183
183
  live_filter_single_element:
184
184
  context:
@@ -194,7 +194,7 @@ live_filter_select_options:
194
194
  src: "<r:filter live='true' do='select' param='f' values='1,2'/><r:block><ol do='pages where title like \"#{params[:f]}%\"'><li do='each' do='title'/></ol></r:block>"
195
195
  tem: "/select name=.f.><%= options_for_select\(\[.1., .2.\], params\[:f\].to_s/"
196
196
  'ajax/live/filter/select/options/en/list1.erb': "/<div id='<%= ndom_id\(@node\) %>'.*params\[:f\]/"
197
- res: "/<select name='f'.*<div id='list1'><ol><li>crocodiles</li><li>Keeping things clean !</li><li>status title</li></ol></div>/"
197
+ res: "/<select name='f'.*<div id='list1'><ol><li>crocodiles</li><li>status title</li></ol></div>/"
198
198
 
199
199
  draggable_do_syntax:
200
200
  src: "<r:images in='site' do='each' draggable='all' do='img' mode='pv'/>"
@@ -299,7 +299,7 @@ drop_add_link:
299
299
  src: "<div do='drop' add='favorite'></div>"
300
300
  # without the ugly inspect, this would be '#{id}' or "\#{id}"
301
301
  tem: "/drop_node_path.*\"node\[favorite_id\]\" => \"\\\\#\{id\}\"/"
302
- res: "<div class='drop' id='list1'>drop</div>"
302
+ res: "<div class='drop' id='list1'></div>"
303
303
  js: "/Droppables.add\('list1'.*/nodes/22/drop.*node\[favorite_id\]=%23%7Bid%7D"
304
304
 
305
305
  drop_var_scope:
@@ -36,7 +36,7 @@ each_alternate_class:
36
36
  context:
37
37
  node: 'cleanWater'
38
38
  src: "<ol do='pages'><li do='each' alt_class='blue' do='title'/></ol>"
39
- res: "<ol><li class=''>crocodiles</li><li class='blue'>status title</li><li class=''>Keeping things clean !</li></ol>"
39
+ res: "<ol><li class=''>crocodiles</li><li class='blue'>status title</li><li class=''>Kill the bugs</li></ol>"
40
40
 
41
41
  each_alternate_class_reverse:
42
42
  context:
@@ -15,7 +15,8 @@ calendar_tz:
15
15
  context:
16
16
  date: "2006-03-18"
17
17
  src: "<div do='calendar' attr='date' tz='America/New_York' select='posts where #{cal_start} <= date and date < #{cal_end} in project'/>"
18
- res: "/<td><p>14</p><ol><li><a href='/oo/projects-list/Clean-Water-project/post27.html'>parc openi…</a></li></ol><\/td>.*<td class='sat ref'>18</td>/"
18
+ # previous date 00:00 = uses tz in link.
19
+ res: "/date=2006-02-18\+00%3A00.*<td><p>14</p><ol><li><a href='/oo/projects-list/Clean-Water-project/post27.html'>parc openi…</a></li></ol><\/td>.*<td class='sat ref'>18</td>/"
19
20
 
20
21
  calendar_with_blocks:
21
22
  context:
@@ -32,8 +33,8 @@ calendar_with_blocks:
32
33
  calendar_node_attr:
33
34
  context:
34
35
  date: '2006-03-10'
35
- src: "<div do='calendar' attr='created_at' select='nodes where #{cal_start} <= created_at and created_at < #{cal_end} in project'/>"
36
- res: "/p>10</p>.*Keeping th…/"
36
+ src: "<div do='calendar' attr='created_at' select='pages where #{cal_start} <= created_at and created_at < #{cal_end} in site'/>"
37
+ res: "/p>10</p>.*Kill the b…/"
37
38
 
38
39
  calendar_bad_query:
39
40
  src: "<div do='calendar' attr='date' select='posts where #{cal_start} <= starsky and hutch < #{cal_end} in project'/>"
@@ -98,13 +98,13 @@ if_has_discussion:
98
98
 
99
99
  case_ancestor:
100
100
  src: "<r:root><r:pages><r:each join=', '><r:case><r:when eval='is_ancestor?(main)'><b><r:show attr='title'/></b></r:when><r:else><r:show attr='title'/></r:else></r:case></r:each></r:pages></r:root>"
101
- res: "Collections, Nature, people, <b>projects list</b>, Skins (layout themes)"
101
+ res: "Collections, Kill the bugs, Nature, people, <b>projects list</b>, Skins (layout themes)"
102
102
 
103
103
  on_if_ancestor_no_class:
104
104
  old_src: "<r:root><r:pages><li do='each' on_if_node='ancestor' join=', '><r:show attr='title'/></li></r:pages></r:root>"
105
105
  src: "<r:root><r:pages><li do='each' on_if='is_ancestor?(main)' join=', '><r:show attr='title'/></li></r:pages></r:root>"
106
106
  tem: '/var3.is_ancestor\?\(@node\)/'
107
- res: "<li class=''>Collections</li>, <li class=''>Nature</li>, <li class=''>people</li>, <li class=' on'>projects list</li>, <li class=''>Skins (layout themes)</li>"
107
+ res: "<li class=''>Collections</li>, <li class=''>Kill the bugs</li>, <li class=''>Nature</li>, <li class=''>people</li>, <li class=' on'>projects list</li>, <li class=''>Skins (layout themes)</li>"
108
108
 
109
109
  multiple_class_conditions:
110
110
  src: "<li class='unknown' do='void' one_if='custom_a == 1' two_if='custom_a == 2'>Agrippina</li>"
@@ -138,7 +138,7 @@ on_if_attribute_with_edit:
138
138
 
139
139
  on_if_node_main:
140
140
  src: "<r:parent><r:pages><div do='each' on_if='id == main.id' do='title'>hello</div></r:pages></r:parent>"
141
- res: "<div class=''>crocodiles</div><div class=''>Keeping things clean !</div><div class=' on'>status title</div>"
141
+ res: "<div class=''>crocodiles</div><div class=' on'>status title</div>"
142
142
 
143
143
  if_in_tag:
144
144
  src: "<r:form><p do='if' in='form' do='title'/></r:form><i do='if' in='form' do='title'/>done."
@@ -174,13 +174,6 @@ visitor_is_anon:
174
174
  src: "<r:if test='visitor.is_anon?'>anonymous<r:else>logged in</r:else></r:if>"
175
175
  res: "anonymous"
176
176
 
177
- test_in_each:
178
- context:
179
- node: 'cleanWater'
180
- src: "<ul do='pages'><li do='each' on_if='this.title == \"Keeping things clean !\"' do='title'/></ul>"
181
- tem: "/var2.prop\['title'\]==\"Keeping things clean !\"/"
182
- res: "<ul><li class=''>crocodiles</li><li class=' on'>Keeping things clean !</li><li class=''>status title</li></ul>"
183
-
184
177
  render_test:
185
178
  src: "<r:can_write?>hello</r:can_write?>"
186
179
  tem: "<% if @node.can_write? %>hello<% end %>"