zena 1.1.3 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (392) hide show
  1. data/History.txt +23 -1
  2. data/MIT-LICENSE +2 -2
  3. data/README.rdoc +2 -15
  4. data/app/controllers/acls_controller.rb +1 -1
  5. data/app/controllers/documents_controller.rb +12 -3
  6. data/app/controllers/nodes_controller.rb +1 -3
  7. data/app/controllers/sites_controller.rb +7 -0
  8. data/app/controllers/versions_controller.rb +1 -1
  9. data/app/controllers/virtual_classes_controller.rb +7 -8
  10. data/app/models/acl.rb +3 -2
  11. data/app/models/relation_proxy.rb +2 -1
  12. data/app/models/role.rb +16 -0
  13. data/app/models/site.rb +48 -0
  14. data/app/models/text_document.rb +2 -1
  15. data/app/models/user.rb +2 -1
  16. data/app/models/zip.rb +2 -1
  17. data/app/views/acls/index.rhtml +11 -1
  18. data/app/views/documents/show.rhtml +1 -1
  19. data/app/views/relations/_add.erb +2 -2
  20. data/app/views/relations/_form.erb +5 -2
  21. data/app/views/relations/_li.erb +4 -1
  22. data/app/views/relations/index.erb +3 -3
  23. data/app/views/sites/_form.erb +1 -1
  24. data/app/views/sites/_job.erb +4 -0
  25. data/app/views/sites/index.erb +1 -1
  26. data/app/views/sites/jobs.erb +10 -0
  27. data/app/views/templates/document_create_tabs/_file.rhtml +3 -0
  28. data/app/views/zafu/default/Node-+search.zafu +2 -2
  29. data/bricks/acls/zena/init.rb +2 -1
  30. data/bricks/acls/zena/test/integration/acl_integration_test.rb +5 -5
  31. data/bricks/acls/zena/test/sites/erebus/acls.yml +2 -2
  32. data/bricks/acls/zena/test/unit/acl_test.rb +2 -2
  33. data/bricks/grid/lib/bricks/grid.rb +110 -0
  34. data/bricks/grid/zena/init.rb +4 -0
  35. data/bricks/math/lib/bricks/math.rb +1 -0
  36. data/bricks/pdf/lib/bricks/pdf.rb +10 -1
  37. data/bricks/sphinx/zena/tasks.rb +8 -40
  38. data/bricks/spreadsheet/README +31 -0
  39. data/bricks/spreadsheet/lib/bricks/spreadsheet.rb +293 -0
  40. data/bricks/spreadsheet/zena/init.rb +3 -0
  41. data/bricks/spreadsheet/zena/test/sites/zena/links.yml +11 -0
  42. data/bricks/spreadsheet/zena/test/unit/xlsx_test.rb +5 -0
  43. data/bricks/spreadsheet/zena/test/zafu/README +27 -0
  44. data/bricks/spreadsheet/zena/test/zafu/spreadsheet.yml +19 -0
  45. data/bricks/worker/lib/bricks/worker.rb +11 -5
  46. data/bricks/worker/zena/init.rb +8 -0
  47. data/bricks/worker/zena/migrate/20120501091514_add_site_id_to_jobs.rb +9 -0
  48. data/bricks/zena/zena/migrate/01_base.rb +0 -7
  49. data/bricks/zena/zena/migrate/20111214112233_add_comment_to_relations.rb +9 -0
  50. data/config/bricks.yml +15 -1
  51. data/config/environments/production.rb +2 -2
  52. data/config/gems.yml +6 -1
  53. data/doc/zafu_changes.yml +1 -1
  54. data/lib/tasks/zena.rake +6 -2
  55. data/lib/zena/app.rb +1 -1
  56. data/lib/zena/code/default_syntax.rb +5 -1
  57. data/lib/zena/db_helper/mysql.rb +5 -1
  58. data/lib/zena/deploy/app_init.rhtml +11 -7
  59. data/lib/zena/deploy/awstats.conf.rhtml +1 -1
  60. data/lib/zena/deploy/start_stop.rhtml +5 -5
  61. data/lib/zena/deploy/vhost.rhtml +16 -2
  62. data/lib/zena/deploy.rb +5 -3
  63. data/lib/zena/info.rb +1 -1
  64. data/lib/zena/parser/zazen_rules.rb +7 -7
  65. data/lib/zena/remote/node.rb +7 -0
  66. data/lib/zena/routes.rb +4 -5
  67. data/lib/zena/test_controller.rb +18 -1
  68. data/lib/zena/use/action.rb +13 -4
  69. data/lib/zena/use/ajax.rb +10 -4
  70. data/lib/zena/use/authlogic.rb +1 -1
  71. data/lib/zena/use/calendar.rb +4 -0
  72. data/lib/zena/use/conditional.rb +3 -0
  73. data/lib/zena/use/dates.rb +44 -4
  74. data/lib/zena/use/display.rb +45 -15
  75. data/lib/zena/use/forms.rb +59 -30
  76. data/lib/zena/use/query_builder.rb +12 -12
  77. data/lib/zena/use/recursion.rb +1 -1
  78. data/lib/zena/use/rendering.rb +18 -17
  79. data/lib/zena/use/urls.rb +2 -1
  80. data/lib/zena/use/zafu_safe_definitions.rb +0 -9
  81. data/lib/zena/use/zafu_templates.rb +2 -2
  82. data/lib/zena/use/zazen.rb +1 -3
  83. data/lib/zena/use.rb +13 -2
  84. data/lib/zena.rb +8 -2
  85. data/public/images/bullet_back.png +0 -0
  86. data/public/javascripts/grid.js +535 -0
  87. data/public/javascripts/tablekit.js +0 -0
  88. data/public/javascripts/window.js +0 -0
  89. data/public/javascripts/zena.js +17 -7
  90. data/public/stylesheets/admin.css +5 -1
  91. data/public/stylesheets/grid.css +19 -0
  92. data/test/fixtures/files/TestNode.zafu +123 -311
  93. data/test/fixtures/files/translations_fr.yml +6 -1
  94. data/test/functional/acls_controller_test.rb +2 -2
  95. data/test/functional/nodes_controller_test.rb +17 -11
  96. data/test/functional/virtual_classes_controller_test.rb +1 -1
  97. data/test/integration/query_node/basic.yml +9 -0
  98. data/test/integration/query_node/dates.yml +1 -1
  99. data/test/integration/zafu_compiler/ajax.yml +9 -9
  100. data/test/integration/zafu_compiler/basic.yml +0 -24
  101. data/test/integration/zafu_compiler/dates.yml +24 -7
  102. data/test/integration/zafu_compiler/display.yml +45 -2
  103. data/test/integration/zafu_compiler/errors.yml +0 -6
  104. data/test/integration/zafu_compiler/forms.yml +41 -3
  105. data/test/integration/zafu_compiler/query.yml +29 -3
  106. data/test/integration/zafu_compiler/roles.yml +0 -4
  107. data/test/integration/zafu_compiler/safe_definitions.yml +1 -1
  108. data/test/integration/zafu_compiler_test.rb +11 -3
  109. data/test/selenium/Add/add3.rsel +8 -8
  110. data/test/selenium/Drop/drop1.rsel +12 -12
  111. data/test/selenium/Drop/drop2.rsel +14 -14
  112. data/test/selenium/Drop/drop3.rsel +21 -21
  113. data/test/selenium/Drop/drop4.rsel +1 -1
  114. data/test/selenium/Edit/edit2.rsel +9 -9
  115. data/test/selenium/Edit/edit4.rsel +55 -0
  116. data/test/selenium/Edit/edit5.rsel +41 -0
  117. data/test/selenium/Edit/edit6.rsel +53 -0
  118. data/test/selenium/Filter/0setup.rsel +12 -0
  119. data/test/selenium/Filter/filter1.rsel +9 -0
  120. data/test/selenium/Filter/filter2.rsel +9 -0
  121. data/test/selenium/Form/form1.rsel +1 -1
  122. data/test/selenium/Form/form2.rsel +1 -1
  123. data/test/selenium/Form/form3.rsel +15 -0
  124. data/test/selenium/Grid/0setup.rsel +13 -0
  125. data/test/selenium/Grid/grid1.rsel +11 -0
  126. data/test/selenium/Swap/0setup.rsel +12 -0
  127. data/test/selenium/Swap/swap1.rsel +13 -0
  128. data/test/selenium/Swap/swap2.rsel +11 -0
  129. data/test/selenium/Toggle/toggle1.rsel +6 -6
  130. data/test/sites/zena/versions.yml +1 -1
  131. data/test/unit/relation_proxy_test.rb +36 -0
  132. data/test/unit/site_test.rb +10 -2
  133. data/test/unit/zena/use/rendering_test.rb +7 -6
  134. data/test/unit/zena/use/zazen_test.rb +1 -2
  135. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run 2.tmCommand +24 -0
  136. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Context.tmCommand +58 -0
  137. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Focused Should.tmCommand +88 -0
  138. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run.tmCommand +27 -0
  139. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/YAML to Shoulda.tmCommand +23 -0
  140. data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Context.tmPreferences +19 -0
  141. data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Should.tmPreferences +19 -0
  142. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory attributes for.tmSnippet +16 -0
  143. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory build.tmSnippet +16 -0
  144. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory.tmSnippet +16 -0
  145. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define with class.tmSnippet +18 -0
  146. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define.tmSnippet +18 -0
  147. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_next.tmSnippet +16 -0
  148. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_sequence.tmSnippet +18 -0
  149. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_bad_value.tmSnippet +16 -0
  150. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_contains.tmSnippet +16 -0
  151. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_does_not_contain.tmSnippet +16 -0
  152. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_good_value.tmSnippet +16 -0
  153. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_same_elements.tmSnippet +16 -0
  154. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_save.tmSnippet +16 -0
  155. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_sent_email.tmSnippet +18 -0
  156. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_valid.tmSnippet +16 -0
  157. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/association.tmSnippet +17 -0
  158. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/attribute.tmSnippet +17 -0
  159. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/before_should block.tmSnippet +18 -0
  160. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block get.tmSnippet +22 -0
  161. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block post.tmSnippet +23 -0
  162. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block with setup.tmSnippet +25 -0
  163. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/setup.tmSnippet +18 -0
  164. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block with before proc.tmSnippet +18 -0
  165. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block.tmSnippet +18 -0
  166. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_allow_values_for.tmSnippet +16 -0
  167. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_assign_to.tmSnippet +16 -0
  168. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful denied.tmSnippet +20 -0
  169. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful.tmSnippet +20 -0
  170. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_belong_to.tmSnippet +16 -0
  171. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change by.tmSnippet +16 -0
  172. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change from to.tmSnippet +16 -0
  173. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_at_least.tmSnippet +16 -0
  174. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_in_range.tmSnippet +16 -0
  175. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_is.tmSnippet +16 -0
  176. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_value_in_range.tmSnippet +16 -0
  177. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_eventually.tmSnippet +18 -0
  178. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_filter_params.tmSnippet +16 -0
  179. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_and_belong_to_many.tmSnippet +16 -0
  180. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_class_methods.tmSnippet +16 -0
  181. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_column.tmSnippet +16 -0
  182. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_columns.tmSnippet +16 -0
  183. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_index.tmSnippet +16 -0
  184. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_indices.tmSnippet +16 -0
  185. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_instance_methods.tmSnippet +16 -0
  186. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_many.tmSnippet +16 -0
  187. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_named_scope.tmSnippet +16 -0
  188. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_one.tmSnippet +16 -0
  189. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_readonly_attributes.tmSnippet +16 -0
  190. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_mass_assignment_of.tmSnippet +16 -0
  191. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_values_for.tmSnippet +16 -0
  192. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_assign_to.tmSnippet +16 -0
  193. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_change.tmSnippet +16 -0
  194. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_set_the_flash.tmSnippet +16 -0
  195. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_redirect_to.tmSnippet +16 -0
  196. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_a_form.tmSnippet +16 -0
  197. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_template.tmSnippet +16 -0
  198. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_with_layout.tmSnippet +16 -0
  199. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_without_layout.tmSnippet +16 -0
  200. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with.tmSnippet +16 -0
  201. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with_content_type.tmSnippet +16 -0
  202. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_return_from_session.tmSnippet +16 -0
  203. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_route.tmSnippet +16 -0
  204. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_set_the_flash_to.tmSnippet +16 -0
  205. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_acceptance_of.tmSnippet +16 -0
  206. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_numericality_of.tmSnippet +16 -0
  207. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_presence_of.tmSnippet +16 -0
  208. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of with scope.tmSnippet +16 -0
  209. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of.tmSnippet +16 -0
  210. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/catch_exception.rb +39 -0
  211. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/run_script.rb +104 -0
  212. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/stdin_dialog.rb +14 -0
  213. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/test.rb +17 -0
  214. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/todo.txt +13 -0
  215. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/bin/yaml_to_shoulda.rb +25 -0
  216. data/vendor/TextMate/Ruby Shoulda.tmbundle/Syntaxes/Ruby on Rails (Shoulda).tmLanguage +166 -0
  217. data/vendor/TextMate/Ruby Shoulda.tmbundle/info.plist +304 -0
  218. data/vendor/TextMate/Zena.tmbundle/Commands/Run all yaml tests.tmCommand +37 -0
  219. data/vendor/TextMate/Zena.tmbundle/Commands/Run focused yaml test.tmCommand +52 -0
  220. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/catch_exception.rb +39 -0
  221. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/run_script.rb +118 -0
  222. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/stdin_dialog.rb +14 -0
  223. data/vendor/TextMate/Zena.tmbundle/info.plist +17 -0
  224. data/vendor/plugins/selenium-on-rails/CHANGELOG +125 -0
  225. data/vendor/plugins/selenium-on-rails/LICENSE-2.0.txt +202 -0
  226. data/vendor/plugins/selenium-on-rails/README.md +202 -0
  227. data/vendor/plugins/selenium-on-rails/Rakefile +38 -0
  228. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumController.html +265 -0
  229. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumHelper.html +148 -0
  230. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/FixtureLoader.html +231 -0
  231. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/PartialsSupport.html +195 -0
  232. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Paths.html +295 -0
  233. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/RSelenese.html +219 -0
  234. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Renderer.html +156 -0
  235. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Selenese.html +179 -0
  236. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/SuiteRenderer.html +223 -0
  237. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilder.html +441 -0
  238. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderAccessors.html +3098 -0
  239. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderActions.html +2080 -0
  240. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderUserAccessors.html +116 -0
  241. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderUserActions.html +116 -0
  242. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails.html +126 -0
  243. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRailsConfig.html +150 -0
  244. data/vendor/plugins/selenium-on-rails/doc/files/CHANGELOG.html +422 -0
  245. data/vendor/plugins/selenium-on-rails/doc/files/README.html +321 -0
  246. data/vendor/plugins/selenium-on-rails/doc/files/lib/controllers/selenium_controller_rb.html +108 -0
  247. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_helper_rb.html +101 -0
  248. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/acceptance_test_runner_rb.html +222 -0
  249. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/fixture_loader_rb.html +109 -0
  250. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/partials_support_rb.html +111 -0
  251. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/paths_rb.html +101 -0
  252. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/renderer_rb.html +101 -0
  253. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/rselenese_rb.html +118 -0
  254. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/selenese_rb.html +101 -0
  255. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/suite_renderer_rb.html +101 -0
  256. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_accessors_rb.html +114 -0
  257. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_actions_rb.html +113 -0
  258. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_rb.html +120 -0
  259. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails_config_rb.html +108 -0
  260. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails_rb.html +115 -0
  261. data/vendor/plugins/selenium-on-rails/doc/fr_class_index.html +42 -0
  262. data/vendor/plugins/selenium-on-rails/doc/fr_file_index.html +43 -0
  263. data/vendor/plugins/selenium-on-rails/doc/fr_method_index.html +182 -0
  264. data/vendor/plugins/selenium-on-rails/doc/index.html +24 -0
  265. data/vendor/plugins/selenium-on-rails/doc/rdoc-style.css +208 -0
  266. data/vendor/plugins/selenium-on-rails/generators/selenium/USAGE +19 -0
  267. data/vendor/plugins/selenium-on-rails/generators/selenium/selenium_generator.rb +50 -0
  268. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/rhtml.rhtml +16 -0
  269. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/rselenese.rhtml +14 -0
  270. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/selenese.rhtml +11 -0
  271. data/vendor/plugins/selenium-on-rails/init.rb +15 -0
  272. data/vendor/plugins/selenium-on-rails/lib/controllers/selenium_controller.rb +122 -0
  273. data/vendor/plugins/selenium-on-rails/lib/controllers/switch_environment_controller.rb +16 -0
  274. data/vendor/plugins/selenium-on-rails/lib/selenium_helper.rb +8 -0
  275. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/acceptance_test_runner.rb +215 -0
  276. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/fixture_loader.rb +57 -0
  277. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/partials_support.rb +36 -0
  278. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/paths.rb +61 -0
  279. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/renderer.rb +20 -0
  280. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/rselenese.rb +44 -0
  281. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/selenese.rb +87 -0
  282. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/suite_renderer.rb +56 -0
  283. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder.rb +116 -0
  284. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_accessors.rb +1002 -0
  285. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_actions.rb +514 -0
  286. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_user_accessors.rb.example +91 -0
  287. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_user_actions.rb.example +24 -0
  288. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails.rb +11 -0
  289. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails_config.rb +30 -0
  290. data/vendor/plugins/selenium-on-rails/lib/views/layouts/layout.rhtml +18 -0
  291. data/vendor/plugins/selenium-on-rails/lib/views/record.rhtml +5 -0
  292. data/vendor/plugins/selenium-on-rails/lib/views/selenium_helper.rb +9 -0
  293. data/vendor/plugins/selenium-on-rails/lib/views/setup.rhtml +67 -0
  294. data/vendor/plugins/selenium-on-rails/lib/views/test_suite.rhtml +26 -0
  295. data/vendor/plugins/selenium-on-rails/routes.rb +24 -0
  296. data/vendor/plugins/selenium-on-rails/selenium-core/Blank.html +7 -0
  297. data/vendor/plugins/selenium-on-rails/selenium-core/InjectedRemoteRunner.html +8 -0
  298. data/vendor/plugins/selenium-on-rails/selenium-core/RemoteRunner.html +110 -0
  299. data/vendor/plugins/selenium-on-rails/selenium-core/SeleniumLog.html +109 -0
  300. data/vendor/plugins/selenium-on-rails/selenium-core/TestPrompt.html +145 -0
  301. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner-splash.html +55 -0
  302. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner.hta +177 -0
  303. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner.html +177 -0
  304. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/butmin.gif +0 -0
  305. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/butplus.gif +0 -0
  306. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/domviewer.css +298 -0
  307. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/domviewer.html +16 -0
  308. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/selenium-domviewer.js +205 -0
  309. data/vendor/plugins/selenium-on-rails/selenium-core/icons/all.png +0 -0
  310. data/vendor/plugins/selenium-on-rails/selenium-core/icons/continue.png +0 -0
  311. data/vendor/plugins/selenium-on-rails/selenium-core/icons/continue_disabled.png +0 -0
  312. data/vendor/plugins/selenium-on-rails/selenium-core/icons/pause.png +0 -0
  313. data/vendor/plugins/selenium-on-rails/selenium-core/icons/pause_disabled.png +0 -0
  314. data/vendor/plugins/selenium-on-rails/selenium-core/icons/selected.png +0 -0
  315. data/vendor/plugins/selenium-on-rails/selenium-core/icons/step.png +0 -0
  316. data/vendor/plugins/selenium-on-rails/selenium-core/icons/step_disabled.png +0 -0
  317. data/vendor/plugins/selenium-on-rails/selenium-core/iedoc-core.xml +1759 -0
  318. data/vendor/plugins/selenium-on-rails/selenium-core/iedoc.xml +1800 -0
  319. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/cssQuery-p.js +6 -0
  320. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-level2.js +142 -0
  321. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-level3.js +150 -0
  322. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-standard.js +53 -0
  323. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery.js +356 -0
  324. data/vendor/plugins/selenium-on-rails/selenium-core/lib/prototype.js +2006 -0
  325. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/builder.js +101 -0
  326. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/controls.js +815 -0
  327. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/dragdrop.js +915 -0
  328. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/effects.js +958 -0
  329. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/scriptaculous.js +47 -0
  330. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/slider.js +283 -0
  331. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/unittest.js +383 -0
  332. data/vendor/plugins/selenium-on-rails/selenium-core/lib/snapsie.js +91 -0
  333. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/find_matching_child.js +69 -0
  334. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/htmlutils.js +1616 -0
  335. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/injection.html +72 -0
  336. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-api.js +3184 -0
  337. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-browserbot.js +2300 -0
  338. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-browserdetect.js +153 -0
  339. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-commandhandlers.js +377 -0
  340. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-executionloop.js +175 -0
  341. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-logging.js +148 -0
  342. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-remoterunner.js +695 -0
  343. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-testrunner.js +1362 -0
  344. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-version.js +5 -0
  345. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-doc.html +803 -0
  346. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-element.js +1537 -0
  347. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-map-sample.js +979 -0
  348. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/user-extensions.js +3 -0
  349. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/user-extensions.js.sample +75 -0
  350. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/xmlextras.js +153 -0
  351. data/vendor/plugins/selenium-on-rails/selenium-core/selenium-logo.png +0 -0
  352. data/vendor/plugins/selenium-on-rails/selenium-core/selenium-test.css +43 -0
  353. data/vendor/plugins/selenium-on-rails/selenium-core/selenium.css +316 -0
  354. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/dom.js +566 -0
  355. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/javascript-xpath-0.1.11.js +2816 -0
  356. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/util.js +549 -0
  357. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/xmltoken.js +149 -0
  358. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/xpath.js +2450 -0
  359. data/vendor/plugins/selenium-on-rails/tasks/test_acceptance.rake +8 -0
  360. data/vendor/plugins/selenium-on-rails/test/fixtures/config.yml +37 -0
  361. data/vendor/plugins/selenium-on-rails/test/fixtures/selenium.yml +27 -0
  362. data/vendor/plugins/selenium-on-rails/test/paths_test.rb +72 -0
  363. data/vendor/plugins/selenium-on-rails/test/renderer_test.rb +157 -0
  364. data/vendor/plugins/selenium-on-rails/test/rselenese_test.rb +708 -0
  365. data/vendor/plugins/selenium-on-rails/test/selenese_test.rb +242 -0
  366. data/vendor/plugins/selenium-on-rails/test/selenium_controller_test.rb +67 -0
  367. data/vendor/plugins/selenium-on-rails/test/selenium_on_rails_config_test.rb +43 -0
  368. data/vendor/plugins/selenium-on-rails/test/selenium_support_test.rb +35 -0
  369. data/vendor/plugins/selenium-on-rails/test/setup_test.rb +31 -0
  370. data/vendor/plugins/selenium-on-rails/test/suite_renderer_test.rb +109 -0
  371. data/vendor/plugins/selenium-on-rails/test/switch_environment_controller_test.rb +17 -0
  372. data/vendor/plugins/selenium-on-rails/test/test_builder_functions_authortest.rb +51 -0
  373. data/vendor/plugins/selenium-on-rails/test/test_helper.rb +101 -0
  374. data/vendor/plugins/selenium-on-rails/test_data/_partial.rsel +1 -0
  375. data/vendor/plugins/selenium-on-rails/test_data/own_layout.html +12 -0
  376. data/vendor/plugins/selenium-on-rails/test_data/partials/_html.html +6 -0
  377. data/vendor/plugins/selenium-on-rails/test_data/partials/_nesting.rsel +2 -0
  378. data/vendor/plugins/selenium-on-rails/test_data/partials/_rhtml.rhtml +6 -0
  379. data/vendor/plugins/selenium-on-rails/test_data/partials/_rsel.rsel +1 -0
  380. data/vendor/plugins/selenium-on-rails/test_data/partials/_sel.sel +5 -0
  381. data/vendor/plugins/selenium-on-rails/test_data/partials/all_partials.rsel +5 -0
  382. data/vendor/plugins/selenium-on-rails/test_data/rhtml.rhtml +7 -0
  383. data/vendor/plugins/selenium-on-rails/test_data/rselenese.rsel +8 -0
  384. data/vendor/plugins/selenium-on-rails/test_data/selenese.sel +7 -0
  385. data/vendor/plugins/selenium-on-rails/test_data/suite_one/subsuite/suite_one_subsuite_testcase.sel +1 -0
  386. data/vendor/plugins/selenium-on-rails/test_data/suite_one/suite_one_testcase1.sel +1 -0
  387. data/vendor/plugins/selenium-on-rails/test_data/suite_one/suite_one_testcase2.sel +1 -0
  388. data/vendor/plugins/selenium-on-rails/test_data/suite_two/suite_two_testcase.sel +1 -0
  389. data/zena.gemspec +290 -7
  390. metadata +346 -52
  391. data/app/views/nodes/_table.rhtml +0 -14
  392. data/lib/zena/use/grid.rb +0 -154
@@ -232,7 +232,7 @@ module Zena
232
232
  def admin_links(opts = {})
233
233
  list = opts[:list] || 'all'
234
234
  if list == 'all'
235
- list = %w{home preferences comments users groups relations virtual_classes properties iformats sites acls dev}
235
+ list = %w{home preferences comments jobs users groups relations virtual_classes properties iformats sites acls dev}
236
236
  else
237
237
  list = list.split(',').map(&:strip)
238
238
  end
@@ -280,6 +280,9 @@ module Zena
280
280
  when 'acls'
281
281
  return nil unless visitor.is_admin?
282
282
  link_to_with_state(_('acls'), acls_path)
283
+ when 'jobs'
284
+ return nil unless visitor.is_admin? && Bricks::CONFIG['worker']
285
+ link_to_with_state(_('jobs'), jobs_site_path(current_site[:id]))
283
286
  when 'dev'
284
287
  return nil unless visitor.is_admin?
285
288
  if visitor.dev_skin_id
@@ -520,7 +523,7 @@ module Zena
520
523
  # Insert javascript asset tags
521
524
  def r_javascripts
522
525
  if @params[:list] == 'all' || @params[:list].nil?
523
- list = %w{ prototype effects dragdrop tablekit window zena }
526
+ list = %w{ prototype effects dragdrop window zena grid }
524
527
  else
525
528
  list = @params[:list].split(',').map{|e| e.strip}
526
529
  end
@@ -567,7 +570,7 @@ module Zena
567
570
  # Insert stylesheet asset tags
568
571
  def r_stylesheets
569
572
  if @params[:list] == 'all' || @params[:list].nil?
570
- list = %w{ reset window zena code }
573
+ list = %w{ reset window zena code grid }
571
574
  else
572
575
  list = @params[:list].split(',').map{|e| e.strip}
573
576
  end
@@ -596,8 +599,33 @@ module Zena
596
599
  return parser_error("only works with nodes (not with #{node.klass})") unless node.will_be?(Node)
597
600
  @markup.append_param(:class, 'btn_add')
598
601
  node = self.node.list_context? ? self.node.up : self.node
599
- res = node_action_link('add_doc', "<%= #{node}.zip %>", :text => text_for_link(''))
600
- "<% if #{node}.can_write? %>#{wrap(res)}<% end %>"
602
+
603
+ params = {}
604
+ @params.each do |k,v|
605
+ next if [:attr, :eval, :text, :t, :update].include?(k)
606
+ v = RubyLess.translate_string(self, v)
607
+ if v.literal
608
+ params[k] = CGI.escape(v.literal)
609
+ else
610
+ params[k] = "<%= CGI.escape(#{v}) %>"
611
+ end
612
+ end
613
+
614
+ if upd = @params[:update]
615
+ js = ""
616
+ with_context(:node => node(Node)) do
617
+ href = make_href(upd)
618
+ name = get_var_name('add_document', 'update')
619
+
620
+ txt = "%Q{#{name}\#{#{node}.zip} = function() {new Ajax.Request(\"\#{#{href}}\", {asynchronous:true, evalScripts:true, method:\"get\"})}}"
621
+ js = "<% js_data << #{txt} %>"
622
+ # Evaluated before the add_document page is opened.
623
+ params[:js] = "<%= CGI.escape(\"Zena.t().#{name}\#{#{node}.zip}();\") %>"
624
+ end
625
+ end
626
+
627
+ res = node_action_link('add_doc', "<%= #{node}.zip %>", :text => text_for_link(''), :params => params)
628
+ "<% if #{node}.can_write? %>#{js}#{wrap(res)}<% end %>"
601
629
  end
602
630
 
603
631
  # Find icon through a relation named 'icon' or use first image child
@@ -669,11 +697,11 @@ module Zena
669
697
  end
670
698
  end
671
699
 
672
- def r_grid
700
+ def r_prop_grid
673
701
  return parser_error("not in a list context") unless node.list_context?
674
702
  return parser_error("not a Node list") unless node.single_class <= Node
675
703
  klass = "#{node.single_class.name}"
676
- add_block %Q{<table class='grid'>
704
+ add_block %Q{<table class='prop_grid'>
677
705
  <tr do='#{klass}' do='roles'><th class='role' colspan='\#{columns.size}' do='each' do='name'/></tr>
678
706
  <tr do='#{klass}' do='roles' do='each' do='columns'><th do='each' do='name'/></tr>
679
707
  <tr do='each'><r:#{klass} do='roles' do='each' do='columns'><td do='each' do='@node.send(name)'/></r:#{klass}></tr>
@@ -681,6 +709,15 @@ module Zena
681
709
  expand_with
682
710
  end
683
711
 
712
+ # Also used by rubyless_expand
713
+ def show_string(method)
714
+ if param(:h) == 'false'
715
+ "<%= #{method} %>"
716
+ else
717
+ "<%= h #{method} %>"
718
+ end
719
+ end
720
+
684
721
  private
685
722
  def show_number(method)
686
723
  if fmt = param(:format)
@@ -709,16 +746,9 @@ module Zena
709
746
  end
710
747
  end
711
748
 
712
- def show_string(method)
713
- if param(:h) == 'false'
714
- "<%= #{method} %>"
715
- else
716
- "<%= h #{method} %>"
717
- end
718
- end
719
749
 
720
750
  # show_time is in Dates
721
751
  end
722
752
  end # Display
723
753
  end # Use
724
- end # Zena
754
+ end # Zena
@@ -200,10 +200,11 @@ module Zena
200
200
 
201
201
  if @context[:in_add]
202
202
  # Inline form used to create new elements: set values to '' and 'parent_id' from context
203
- opts[:id] = "#{node.dom_prefix}_form"
203
+ opts[:id] = "#{node.dom_prefix}_0"
204
204
  opts[:form_tag] = "<% remote_form_for(:#{node.form_name}, #{node}, :url => #{node.form_name.pluralize}_path, :html => {:id => \"#{dom_name}_form_t\"}) do |f| %>"
205
- opts[:form_cancel] = "#{cancel_pre}<a href='#' onclick='[\"#{dom_name}_add\", \"#{dom_name}_form\"].each(Element.toggle);return false;'>#{cancel_text}</a>#{cancel_post}\n"
205
+ opts[:form_cancel] = "#{cancel_pre}<a href='javascript:void(0)' onclick='[\"#{dom_name}_add\", \"#{dom_name}_0\"].each(Element.toggle);return false;'>#{cancel_text}</a>#{cancel_post}\n"
206
206
  else
207
+
207
208
  # Saved form
208
209
  if @markup.tag == 'table'
209
210
  # the normal id goes to the form wrapping the table
@@ -215,19 +216,18 @@ module Zena
215
216
  end
216
217
 
217
218
  form_id ||= "#{node.dom_prefix}_form_t"
218
- opts[:id] = "<%= ndom_id(#{node}) %>"
219
219
 
220
220
  opts[:form_tag] = %Q{
221
- <% remote_form_for(:#{node.form_name}, #{node}, :url => #{node}.new_record? ? #{node.form_name.pluralize}_path : #{node.form_name}_path(#{node}.zip), :html => {:method => #{node}.new_record? ? :post : :put, :id => \"#{str_form_id}\"}) do |f| %>
222
- }
221
+ <% remote_form_for(:#{node.form_name}, #{node}, :url => #{node}.new_record? ? #{node.form_name.pluralize}_path : #{node.form_name}_path(#{node}.zip), :html => {:method => #{node}.new_record? ? :post : :put, :id => \"#{str_form_id}\"}) do |f| %>
222
+ }
223
223
 
224
224
  opts[:form_cancel] = %Q{
225
- <% if #{node}.new_record? %>
226
- #{cancel_pre}<a href='#' onclick='[\"<%= params[:dom_id] %>_add\", \"<%= params[:dom_id] %>_form\"].each(Element.toggle);return false;'>#{cancel_text}</a>#{cancel_post}
227
- <% else %>
225
+ <% if #{node}.new_record? %>
226
+ #{cancel_pre}<a href='javascript:void(0)' onclick='[\"<%= params[:dom_id] %>_add\", \"<%= params[:dom_id] %>\"].each(Element.toggle);return false;'>#{cancel_text}</a>#{cancel_post}
227
+ <% else %>
228
228
  #{cancel_pre}<%= link_to_remote(#{cancel_text_ruby}, :url => #{node.form_name}_path(#{node}.zip) + \"/zafu?t_url=#{CGI.escape(template_url)}&dom_id=\#{params[:dom_id]}#{@context[:has_link_id] ? "&link_id=\#{#{node}.link_id}" : ''}\", :method => :get) %>#{cancel_post}
229
- <% end %>
230
- }
229
+ <% end %>
230
+ }
231
231
  end
232
232
  else
233
233
  # no ajax
@@ -283,7 +283,11 @@ module Zena
283
283
  # This is a hack to fix wrong dom_prefix in drop+add.
284
284
  #erb_dom_id = @context[:saved_template] ? "<%= ndom_id(#{node}, false) %>" : (@context[:dom_prefix] || node.dom_prefix)
285
285
 
286
- hidden_fields['dom_id'] = erb_dom_id = node.dom_prefix
286
+ if @context[:saved_template]
287
+ hidden_fields['dom_id'] = erb_dom_id = "<%= ndom_id(#{node}, false) %>"
288
+ else
289
+ hidden_fields['dom_id'] = erb_dom_id = node.dom_prefix
290
+ end
287
291
 
288
292
  if node.will_be?(Comment)
289
293
  # FIXME: the "... || '@node'" is a hack and I don't understand why it's needed...
@@ -303,7 +307,7 @@ module Zena
303
307
  if sym == :before
304
308
  hidden_fields['reference'] = "#{erb_dom_id}_add"
305
309
  else
306
- hidden_fields['reference'] = "#{erb_dom_id}_form"
310
+ hidden_fields['reference'] = "#{erb_dom_id}_0"
307
311
  end
308
312
  else
309
313
  hidden_fields['reference'] = value
@@ -318,11 +322,19 @@ module Zena
318
322
  hidden_fields['done'] = "'$(\"#{erb_dom_id}_form_t\").focusFirstElement();'"
319
323
  end
320
324
  elsif params[:done]
321
- hidden_fields['done'] = CGI.escape(params[:done])
325
+ done = RubyLess.translate_string(self, params[:done])
322
326
  end
323
327
  else
324
328
  # ajax form, not in 'add'
325
- hidden_fields['done'] = CGI.escape(@params[:done]) if @params[:done]
329
+ done = RubyLess.translate_string(self, @params[:done])
330
+ end
331
+ if done
332
+ if done.literal
333
+ done = done.literal
334
+ else
335
+ done = "<%= fquote #{done} %>"
336
+ end
337
+ hidden_fields['done'] = done
326
338
  end
327
339
  else
328
340
  # no ajax
@@ -368,7 +380,7 @@ module Zena
368
380
  # r_form params
369
381
  :klass, :done, :on, :update,
370
382
  # r_each params (make_form)
371
- :join].include?(key)
383
+ :join, :alt_class].include?(key)
372
384
  code = ::RubyLess.translate(self, value)
373
385
  if code.literal.kind_of?(String) || code.literal.kind_of?(Number)
374
386
  hidden_fields[key.to_s] = "#{code.literal}"
@@ -418,7 +430,7 @@ module Zena
418
430
  # TEMPORARY HACK UNTIL WE FIX get_input_params to return a single hash with
419
431
  # {:html => { prepared html attributes }, :raw => {:value => '..', :name => '..', :param => '..'}}
420
432
  if param = @params[:param]
421
- selected = "params[#{param.to_sym.inspect}].to_s"
433
+ selected = "param_value(#{param.inspect}).to_s"
422
434
  attribute = param
423
435
  else
424
436
  return parser_error("missing name") unless attribute
@@ -426,7 +438,7 @@ module Zena
426
438
  if value = @params[:selected]
427
439
  selected = ::RubyLess.translate_string(self, value)
428
440
  elsif @context[:in_filter]
429
- selected = "params[#{attribute.to_sym.inspect}].to_s"
441
+ selected = "param_value(#{attribute.inspect}).to_s"
430
442
  elsif %w{parent_id}.include?(attribute)
431
443
  selected = "#{node}.parent_zip.to_s"
432
444
  elsif attribute == 'copy_id'
@@ -517,6 +529,7 @@ module Zena
517
529
  @markup.set_param(:type, @params[:type])
518
530
  @markup.set_param(:text, @params[:text]) if @params[:text]
519
531
  @markup.set_params(html_attributes)
532
+ @markup.done = false
520
533
  wrap('')
521
534
  else
522
535
  # 'text', 'hidden', ...
@@ -527,6 +540,7 @@ module Zena
527
540
  checked = html_attributes.delete(:checked)
528
541
  @markup.set_dyn_params(html_attributes)
529
542
  @markup.append_attribute checked if checked
543
+ @markup.done = false
530
544
  wrap('')
531
545
  end
532
546
 
@@ -609,7 +623,13 @@ module Zena
609
623
  res = Zafu::OrderedHash.new
610
624
  if name = (params[:param] || params[:name] || params[:date])
611
625
  res[:name] = name
612
- unless params[:param]
626
+ if params[:param]
627
+ if name =~ /^[a-z_]+$/
628
+ sub_attr_ruby = "params[:#{name}]"
629
+ else
630
+ sub_attr_ruby = "param_value(#{name.inspect})"
631
+ end
632
+ else
613
633
  # build name
614
634
  if res[:name] =~ /\A([\w_]+)\[(.*?)\]/
615
635
  # Sub attributes are used with tags or might be used for other features. It
@@ -625,7 +645,7 @@ module Zena
625
645
  res[:name] = "#{node.form_name}[#{attribute}]"
626
646
  end
627
647
  end
628
-
648
+
629
649
  if sub_attr
630
650
  type = node.klass.safe_method_type([attribute])
631
651
  if sub_attr_ruby = RubyLess.translate(self, %Q{this.#{attribute}[#{sub_attr.inspect}]})
@@ -642,11 +662,7 @@ module Zena
642
662
  res[:value] = "<%= fquote #{value} %>"
643
663
  end
644
664
  elsif params[:param]
645
- if name =~ /^[a-z_]+$/
646
- res[:value] = "<%= fquote params[:#{name}] %>"
647
- else
648
- res[:value] = "<%= fquote param_value(#{name.inspect}) %>"
649
- end
665
+ res[:value] = "<%= fquote #{sub_attr_ruby} %>"
650
666
  elsif attribute && type = node.klass.safe_method_type([attribute])
651
667
  res[:value] = "<%= fquote #{node}.#{type[:method]} %>"
652
668
  end
@@ -677,11 +693,11 @@ module Zena
677
693
  end
678
694
 
679
695
  if node.dom_prefix && !params[:param]
680
- res[:id] = "#{node.dom_prefix}_#{attribute}"
696
+ res[:id] = params[:id] || "#{@context[:form_prefix]}_#{attribute}"
681
697
  else
682
- res[:id] = params[:id] if params[:id]
698
+ res[:id] = params[:id] if params[:id]
683
699
  end
684
-
700
+
685
701
  if params[:type] == 'checkbox' && sub_attr_ruby
686
702
  if value = params[:value]
687
703
  res[:checked] = "<%= #{sub_attr_ruby} == #{value.inspect} ? \" checked='checked'\" : '' %>"
@@ -770,10 +786,13 @@ module Zena
770
786
  nodes = finder[:method]
771
787
  end
772
788
 
773
- set_attr = ::RubyLess.translate(klass, @params[:attr] || 'id')
774
- show_attr = ::RubyLess.translate(klass, @params[:show] || 'title')
789
+ set_attr, show_attr = nil
790
+ with_context(:node => node.move_to('r', klass)) do
791
+ set_attr = ::RubyLess.translate(self, @params[:attr] || 'id')
792
+ show_attr = ::RubyLess.translate(self, @params[:show] || 'title')
793
+ end
775
794
 
776
- options_list = "[['','']] + (#{nodes} || []).map{|r| [r.#{show_attr}, r.#{set_attr}.to_s]}"
795
+ options_list = "[['','']] + (#{nodes} || []).map{|r| [#{show_attr}, #{set_attr}.to_s]}"
777
796
  elsif values = @params[:values]
778
797
  options_list = values.split(',').map(&:strip)
779
798
 
@@ -781,6 +800,16 @@ module Zena
781
800
  show_values = show.split(',').map(&:strip)
782
801
  elsif show = @params[:tshow]
783
802
  show_values = translate_list(show)
803
+ else
804
+ tprefix = @params[:tprefix] || @params[:name]
805
+ show_values = options_list.map do |v|
806
+ t = trans("#{tprefix}_#{v}")
807
+ if t == "#{tprefix}_"
808
+ ''
809
+ else
810
+ t
811
+ end
812
+ end
784
813
  end
785
814
 
786
815
  if show_values
@@ -29,9 +29,9 @@ module Zena
29
29
  :rubyless_helper => zafu_helper.helpers
30
30
  )
31
31
  if type == :count
32
- return klass.do_find(:count, eval(query.to_s(:count)))
32
+ return klass.do_find(:count, eval(query.to_s(:count), opts[:binding] || binding))
33
33
  else
34
- return klass.do_find(:all, eval(query.to_s))
34
+ return klass.do_find(opts[:find] || :all, eval(query.to_s, opts[:binding] || binding))
35
35
  end
36
36
  rescue ::QueryBuilder::Error => err
37
37
  @query_errors = "<span class='query'>#{pseudo_sql}</span> <span class='error'>#{err}</span>"
@@ -151,12 +151,12 @@ module Zena
151
151
 
152
152
  # Dynamic query mocks the QueryBuilder::Query
153
153
  class DynamicQuery
154
- def initialize(default, node, sql)
155
- @default, @node, @sql = default, node, sql
154
+ def initialize(default, node, sql, count)
155
+ @default, @node, @sql, @count = default, node, sql, count
156
156
  end
157
157
 
158
158
  def to_s(type = :find)
159
- base = "'#{@node.klass}', #{@node.to_s.inspect}, #{@sql}"
159
+ base = "'#{@node.klass}', #{@node.to_s.inspect}, #{@sql}, :find => #{@count.inspect}, :binding => binding"
160
160
  case type
161
161
  when :find
162
162
  return "query(#{base})"
@@ -177,14 +177,15 @@ module Zena
177
177
  return parser_error("Cannot be used in list context (#{node.class_name})") if node.list_context?
178
178
  return parser_error("Missing 'default' query") unless default_psql = @params[:default]
179
179
 
180
+ count = get_count(default_psql, {:find => @params[:find]})
180
181
  begin
181
- default = build_finder(:all, default_psql, {})
182
+ default = build_finder(count, default_psql, {})
182
183
  default_query = default[:query]
183
184
  rescue ::QueryBuilder::Error => err
184
185
  return parser_error(err.message)
185
186
  end
186
187
 
187
- klass = [default_query.main_class]
188
+ klass = count == :all ? [default_query.main_class] : default_query.main_class
188
189
 
189
190
  can_be_nil = true
190
191
  if sql = @params[:eval]
@@ -204,8 +205,8 @@ module Zena
204
205
  sql = "#{sql} || #{default_psql.inspect}"
205
206
  end
206
207
 
207
- query = DynamicQuery.new(default_query, node, sql)
208
- expand_with_finder(:method => query.to_s, :class => [query.main_class], :nil => true, :query => query)
208
+ query = DynamicQuery.new(default_query, node, sql, count)
209
+ expand_with_finder(:method => query.to_s, :class => klass, :nil => true, :query => query)
209
210
  end
210
211
 
211
212
  # Pre-processing of the 'find("...")' method.
@@ -225,8 +226,6 @@ module Zena
225
226
 
226
227
  # Resolve unknown methods by trying to build a pseudo-sql query with QueryBuilder.
227
228
  def querybuilder_eval(method = @method)
228
- node = single_node
229
-
230
229
  if method =~ /^\d+$/
231
230
  finder = {:method => "find_node_by_zip(#{method})", :class => VirtualClass['Node'], :nil => true}
232
231
  else
@@ -307,7 +306,8 @@ module Zena
307
306
  node = single_node
308
307
 
309
308
  if !node.klass.respond_to?(:build_query)
310
- raise ::QueryBuilder::Error.new("No query builder for class #{node.klass}")
309
+ # Fallback to Node
310
+ node = node.up(Node)
311
311
  end
312
312
 
313
313
  query_opts = {
@@ -12,7 +12,7 @@ module Zena
12
12
  return '' if @context[:saved_template]
13
13
  return super if @params[:template] || !@params[:part]
14
14
  recursion = get_context_var('recursion', @params[:part])
15
- return parser_error("no parent named '#{part}'") unless recursion
15
+ return parser_error("no parent named '#{@params[:part]}'") unless recursion
16
16
  klass = recursion[:klass]
17
17
  if klass.kind_of?(Array)
18
18
  return parser_error("node context '#{node.klass}' incompatible with '[#{klass}]'") unless node.list_context?
@@ -74,7 +74,8 @@ module Zena
74
74
  zafu_node('@node', Project)
75
75
 
76
76
  respond_to do |format|
77
- format.html do
77
+ format.xml { render :nothing => true, :status => "404 Not Found" }
78
+ format.all do
78
79
  not_found = "#{SITES_ROOT}/#{current_site.host}/public/#{prefix}/404.html"
79
80
  if File.exists?(not_found)
80
81
  render :text => File.read(not_found), :status => '404 Not Found'
@@ -82,7 +83,6 @@ module Zena
82
83
  render_and_cache :mode => '+notFound', :format => 'html', :cache_url => "/#{prefix}/404.html", :status => '404 Not Found'
83
84
  end
84
85
  end
85
- format.all { render :nothing => true, :status => "404 Not Found" }
86
86
  end
87
87
  else
88
88
  # site not found
@@ -128,14 +128,11 @@ module Zena
128
128
 
129
129
  method = "render_to_#{opts[:format]}"
130
130
  if params.keys.include?('debug')
131
- template_path = template_url(opts)
132
- result = {
133
- :data => render_to_string(:file => template_path, :layout=>false),
134
- :disposition => params['disposition'] || 'inline',
135
- :type => 'text/html',
136
- }
137
131
  opts[:cache] = false
138
- elsif respond_to?(method)
132
+ opts[:debug] = true
133
+ end
134
+
135
+ if respond_to?(method)
139
136
  # Call custom rendering engine 'render_to_pdf' for example.
140
137
  result = send(method, opts)
141
138
  else
@@ -199,6 +196,8 @@ module Zena
199
196
  # else
200
197
  # raise err
201
198
  # end
199
+ rescue ActiveRecord::RecordNotFound => err
200
+ return render_404(err)
202
201
  end
203
202
 
204
203
  # Cache page content into a static file in the current sites directory : SITES_ROOT/test.host/public
@@ -221,6 +220,8 @@ module Zena
221
220
  # Return true if we can cache the current page
222
221
  def caching_allowed(opts = {})
223
222
  return false if current_site.authentication? || query_params != {}
223
+ # Cache even if authenticated (public content).
224
+ # Content viewed by anonymous user should be cached anyway.
224
225
  opts[:authenticated] || visitor.is_anon?
225
226
  end
226
227
 
@@ -231,12 +232,11 @@ module Zena
231
232
  ext = params[:format].blank? ? 'html' : params[:format]
232
233
  path << ".#{ext}" unless path =~ /\.#{ext}(\?\d+|)$/
233
234
  #
234
- # QUERY_STRING in cached page ?
235
- #
236
- # Do not cache filename with query or apache will not see it !
237
- # if cachestamp_format?(params['format'])
238
- # path << "?" << make_cachestamp(@node, params['mode'])
239
- # end
235
+ # FULL QUERY_STRING in cached page ?
236
+ if cachestamp_format?(params['format'])
237
+ # We have to use a '.' because apache cannot serve static files with '?'.
238
+ path << "." << make_cachestamp(@node, params['mode'])
239
+ end
240
240
  path
241
241
  end
242
242
 
@@ -274,7 +274,7 @@ module Zena
274
274
  if Zena::ASSET_PORT == request.port
275
275
  raise Exception.new("Custom rendering not allowed on this process (port == asset_port).")
276
276
  else
277
- "http://localhost:#{Zena::ASSET_PORT}"
277
+ "http://127.0.0.1:#{Zena::ASSET_PORT}"
278
278
  end
279
279
  else
280
280
  raise Exception.new("Using custom rendering without an asset host ('asset_port' setting in bricks.yml).")
@@ -305,6 +305,7 @@ module Zena
305
305
 
306
306
  def r_style
307
307
  @markup.tag = 'style'
308
+ @markup.set_param(:type, 'text/css')
308
309
  expand_with
309
310
  end
310
311
 
@@ -321,4 +322,4 @@ module Zena
321
322
  end # ZafuMethods
322
323
  end # Rendering
323
324
  end # Use
324
- end # Zena
325
+ end # Zena
data/lib/zena/use/urls.rb CHANGED
@@ -14,6 +14,7 @@ module Zena
14
14
  'propose' => {:url => '/nodes/#{node_zip}/versions/0/propose', :method => 'put'},
15
15
  'refuse' => {:url => '/nodes/#{node_zip}/versions/0/refuse', :method => 'put'},
16
16
  'edit' => {:url => '/nodes/#{node_zip}/versions/0/edit'},
17
+ 'create' => {:url => '/nodes', :method => 'post', :query => {:parent_id => 'node_zip'}},
17
18
  }
18
19
 
19
20
 
@@ -842,4 +843,4 @@ module Zena
842
843
  end # ZafuMethods
843
844
  end # Urls
844
845
  end # Use
845
- end # Zena
846
+ end # Zena
@@ -108,15 +108,6 @@ module Zena
108
108
 
109
109
  safe_method_for Object, :blank? => Boolean
110
110
 
111
- safe_method_for Time, [:advance, {
112
- :years => Number,
113
- :months => Number,
114
- :weeks => Number,
115
- :days => Number,
116
- :hours => Number,
117
- :minutes => Number,
118
- :seconds => Number}] => Time
119
- safe_method_for Time, :to_i => {:class => Number, :pre_processor => true}
120
111
 
121
112
  safe_method_for Node, [:kind_of?, VirtualClass] =>
122
113
  {:method => 'nil', :nil => true, :pre_processor => kind_of_proc}
@@ -475,7 +475,7 @@ module Zena
475
475
  end
476
476
  end
477
477
  next if nodes.empty?
478
- res << " <li><a class='group' onclick='$(\"dev_#{name}\").toggle();' href='#'>#{name}</a>\n"
478
+ res << " <li><a class='group' onclick='$(\"dev_#{name}\").toggle();' href='javascript:void(0)'>#{name}</a>\n"
479
479
  res << " <table class='dev_pop' id='dev_#{name}'#{name == 'images' ? " style='display:none;'" : ''}>\n"
480
480
  if template && name == 'zafu'
481
481
  # Create specialized template on the fly for current page
@@ -502,7 +502,7 @@ module Zena
502
502
  res << " </li>\n"
503
503
  end
504
504
 
505
- res << " <li><a class='group' onclick='$(\"dev_tools\").toggle();' href='#'>tools</a>\n"
505
+ res << " <li><a class='group' onclick='$(\"dev_tools\").toggle();' href='javascript:void(0)'>tools</a>\n"
506
506
  res << " <ul class='dev_pop' id='dev_tools'><li>\n"
507
507
  res << %Q{ <div style='float:right'><% form_for(:user, visitor, :url => user_path(visitor), :html => { :method => :put }) do |f| %>
508
508
  <p><%= f.select(:dev_skin_id, dev_skin_options, {}, {:onchange => 'this.form.submit()'}) %> <input style='display:none;' type='submit' value='<%= _('validate') %>'/></p>
@@ -5,8 +5,6 @@ module Zena
5
5
  ZAZEN_TIMEOUT = 5
6
6
  module ViewMethods
7
7
 
8
- include Zena::Use::Grid::ViewMethods
9
-
10
8
  @@_asset_methods = {}
11
9
 
12
10
  # define an asset method ('key' => method_name).
@@ -272,4 +270,4 @@ module Zena
272
270
  end
273
271
  end # ViewMethods
274
272
  end # Use
275
- end # Zena
273
+ end # Zena
data/lib/zena/use.rb CHANGED
@@ -2,12 +2,12 @@ module Zena
2
2
  # This module is used to declare and manage the list of features used by Zena.
3
3
  module Use
4
4
  SUFFIX_NAME = 'Methods'
5
- MODULE_NAMES = %w{Controller View Zafu User Site Skin}
5
+ MODULE_NAMES = %w{Controller View Zafu User Site Skin Routes}
6
6
  # "Controller" => "ControllerMethods"
7
7
  MODULE_NAME = Hash[*MODULE_NAMES.map {|n| [n, "#{n}#{SUFFIX_NAME}"]}.flatten]
8
8
 
9
9
  class << self
10
- attr_accessor :modules
10
+ attr_accessor :modules, :extra_routes
11
11
 
12
12
  # Declare a module (or list of modules) that should be used in Zena. The module should implement
13
13
  # sub-modules named ControllerMethods, ViewMethods or ZafuMethods in order to add features to
@@ -38,6 +38,17 @@ module Zena
38
38
  self.modules[name] || []
39
39
  end
40
40
 
41
+ def routes(rez)
42
+ if self.extra_routes.nil?
43
+ hash = {}
44
+ each_module_for('Routes') do |mod|
45
+ hash.merge!(mod)
46
+ end
47
+ self.extra_routes = hash
48
+ end
49
+ (self.extra_routes[rez] || {})[rez] || {}
50
+ end
51
+
41
52
  private
42
53
  def create_module_hash
43
54
  if self.modules.nil?
data/lib/zena.rb CHANGED
@@ -138,7 +138,9 @@ module Zena
138
138
  gem_configuration.each do |gem_name, gem_config|
139
139
  if gem_config
140
140
  conf = gem_config.symbolize_keys
141
- conf[:version].gsub!(/\A=\s*/,'')
141
+ if conf[:version]
142
+ conf[:version].gsub!(/\A=\s*/,'')
143
+ end
142
144
  if conf[:optional]
143
145
  if brick = conf[:brick]
144
146
  if Bricks::CONFIG[brick]
@@ -263,6 +265,7 @@ end
263
265
  end
264
266
  end
265
267
 
268
+ # FIXME: use another mime types library...
266
269
  # this list is taken from http://www.duke.edu/websrv/file-extensions.html
267
270
  EXT_TYPE = [
268
271
  [ "ai" , "application/postscript" ],
@@ -284,6 +287,7 @@ EXT_TYPE = [
284
287
  [ "dir" , "application/x-director" ],
285
288
  [ "dms" , "application/octet-stream" ],
286
289
  [ "doc" , "application/msword" ],
290
+ [ "docx" , "application/vnd.openxmlformats-officedocument.wordprocessingml.document" ],
287
291
  [ "drw" , "application/drafting" ],
288
292
  [ "dvi" , "application/x-dvi" ],
289
293
  [ "dwg" , "application/acad" ],
@@ -346,6 +350,7 @@ EXT_TYPE = [
346
350
  [ "ppm" , "image/x-portable-pixmap" ],
347
351
  [ "pps" , "application/mspowerpoint" ],
348
352
  [ "ppt" , "application/mspowerpoint" ],
353
+ [ "pptx" , "application/vnd.openxmlformats-officedocument.presentationml.presentation" ],
349
354
  [ "ppz" , "application/mspowerpoint" ],
350
355
  [ "pre" , "application/x-freelance" ],
351
356
  [ "prt" , "application/pro_eng" ],
@@ -425,6 +430,7 @@ EXT_TYPE = [
425
430
  [ "xll" , "application/vnd.ms-excel" ],
426
431
  [ "xlm" , "application/vnd.ms-excel" ],
427
432
  [ "xls" , "application/vnd.ms-excel" ],
433
+ [ "xlsx" , "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" ],
428
434
  [ "xlw" , "application/vnd.ms-excel" ],
429
435
  [ "xml" , "text/xml" ],
430
436
  [ "xsl" , "text/xml" ],
@@ -462,4 +468,4 @@ Zena::EXT_TO_TYPE, Zena::TYPE_TO_EXT = make_hashes(EXT_TYPE)
462
468
  Zena.add_load_paths
463
469
  Zena.gems_setup
464
470
  Zena.load_custom_extensions
465
- require 'rubyless'
471
+ require 'rubyless'
Binary file