zena 1.1.3 → 1.2.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 (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