zena 1.2.7 → 1.2.8

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 (407) hide show
  1. data/History.txt +80 -25
  2. data/Rakefile +2 -2
  3. data/app/controllers/columns_controller.rb +2 -2
  4. data/app/controllers/nodes_controller.rb +22 -29
  5. data/app/controllers/user_sessions_controller.rb +35 -10
  6. data/app/controllers/users_controller.rb +2 -2
  7. data/app/controllers/versions_controller.rb +2 -2
  8. data/app/models/group.rb +15 -1
  9. data/app/models/node.rb +109 -8
  10. data/app/models/role.rb +4 -0
  11. data/app/models/site.rb +64 -58
  12. data/app/models/template.rb +1 -1
  13. data/app/models/user.rb +135 -29
  14. data/app/models/user_session.rb +0 -1
  15. data/app/models/virtual_class.rb +11 -6
  16. data/app/views/columns/_form.html.erb +3 -1
  17. data/app/views/columns/_li.html.erb +1 -1
  18. data/app/views/columns/create.rjs +1 -1
  19. data/app/views/groups/_form.rhtml +16 -13
  20. data/app/views/relations/_form.erb +18 -6
  21. data/app/views/sites/_form.erb +12 -6
  22. data/app/views/users/_form.rhtml +23 -8
  23. data/app/views/users/_li.rhtml +14 -3
  24. data/app/views/users/index.rhtml +1 -1
  25. data/app/views/virtual_classes/_form.erb +12 -2
  26. data/app/views/zafu/default/Node-+login.zafu +8 -1
  27. data/app/views/zafu/default/Node-+search.zafu +1 -1
  28. data/bricks/acls/lib/bricks/acls.rb +1 -0
  29. data/bricks/acls/zena/migrate/20130903150356_longer_names_for_acl.rb +9 -0
  30. data/bricks/acls/zena/test/integration/acl_integration_test.rb +2 -2
  31. data/bricks/currency/lib/bricks/currency.rb +120 -0
  32. data/bricks/currency/zena/test/unit/currency_test.rb +43 -0
  33. data/bricks/fs_skin/lib/bricks/fs_skin.rb +1 -1
  34. data/bricks/fs_skin/zena/skins/blog/Node-+search.zafu +1 -1
  35. data/bricks/fs_skin/zena/skins/blog/Node.zafu +1 -1
  36. data/bricks/fs_skin/zena/test/unit/fs_skin_view_test.rb +35 -0
  37. data/bricks/pdf/lib/bricks/pdf.rb +1 -1
  38. data/bricks/sphinx/lib/bricks/sphinx.rb +2 -0
  39. data/bricks/sphinx/zena/init.rb +14 -0
  40. data/bricks/tags/zena/test/zafu/tags.yml +5 -1
  41. data/bricks/worker/lib/bricks/worker.rb +3 -2
  42. data/bricks/zena/zena/migrate/20130829093753_add_versioned_flag_to_column.rb +10 -0
  43. data/bricks/zena/zena/migrate/20130903084909_count_login_attempts.rb +11 -0
  44. data/bricks/zena/zena/migrate/20131104153126_index_fullpath.rb +10 -0
  45. data/bricks/zena/zena/migrate/20131104210011_rebuild_fullpath_after_change.rb +10 -0
  46. data/bricks/zena/zena/migrate/20131105160420_add_skin_id_to_sites.rb +9 -0
  47. data/bricks/zena/zena/migrate/20131105175822_add_profile_to_users.rb +11 -0
  48. data/bricks/zena/zena/migrate/20140213120038_fix_idx_scope.rb +13 -0
  49. data/bricks/zena/zena/migrate/20140628140247_add_site_readonly.rb +9 -0
  50. data/config/bricks.yml +8 -4
  51. data/config/gems.yml +5 -3
  52. data/db/init/base/skins/default/Node-+login.zafu +8 -1
  53. data/db/init/base/skins/default/Node-+search.zafu +1 -1
  54. data/lib/bricks/loader.rb +5 -5
  55. data/lib/gettext_strings.rb +3 -0
  56. data/lib/tasks/zena.rake +25 -22
  57. data/lib/zafu/process/context.rb +4 -0
  58. data/lib/zena/acts/secure_node.rb +3 -3
  59. data/lib/zena/app.rb +1 -0
  60. data/lib/zena/deploy.rb +1 -1
  61. data/lib/zena/deploy/template.rb +1 -1
  62. data/lib/zena/foxy_parser.rb +5 -2
  63. data/lib/zena/info.rb +1 -1
  64. data/lib/zena/site_worker.rb +2 -2
  65. data/lib/zena/test_controller.rb +5 -2
  66. data/lib/zena/use/action.rb +9 -2
  67. data/lib/zena/use/ajax.rb +20 -4
  68. data/lib/zena/use/ancestry.rb +89 -15
  69. data/lib/zena/use/authlogic.rb +8 -2
  70. data/lib/zena/use/context.rb +1 -0
  71. data/lib/zena/use/display.rb +1 -97
  72. data/lib/zena/use/forms.rb +28 -8
  73. data/lib/zena/use/html_tags.rb +16 -7
  74. data/lib/zena/use/i18n.rb +1 -1
  75. data/lib/zena/use/prop_eval.rb +6 -1
  76. data/lib/zena/use/query_node.rb +69 -4
  77. data/lib/zena/use/recursion.rb +1 -1
  78. data/lib/zena/use/refactor.rb +5 -2
  79. data/lib/zena/use/relations.rb +1 -0
  80. data/lib/zena/use/rendering.rb +7 -4
  81. data/lib/zena/use/test_helper.rb +8 -4
  82. data/lib/zena/use/upload.rb +14 -0
  83. data/lib/zena/use/urls.rb +39 -23
  84. data/lib/zena/use/version_hash.rb +5 -2
  85. data/lib/zena/use/workflow.rb +116 -70
  86. data/lib/zena/use/zafu_eval.rb +41 -0
  87. data/lib/zena/use/zafu_safe_definitions.rb +1 -0
  88. data/lib/zena/use/zafu_templates.rb +32 -26
  89. data/lib/zena/use/zazen.rb +8 -7
  90. data/locale/app.pot +5 -1
  91. data/locale/de/LC_MESSAGES/zena.mo +0 -0
  92. data/locale/de/zena.po +385 -281
  93. data/locale/en/LC_MESSAGES/zena.mo +0 -0
  94. data/locale/en/zena.po +378 -271
  95. data/locale/fr/LC_MESSAGES/zena.mo +0 -0
  96. data/locale/fr/zena.po +387 -272
  97. data/locale/it/LC_MESSAGES/zena.mo +0 -0
  98. data/locale/it/zena.po +433 -404
  99. data/locale/zena.pot +362 -268
  100. data/public/javascripts/grid.js +280 -104
  101. data/public/javascripts/zena.js +43 -15
  102. data/public/stylesheets/admin.css +8 -2
  103. data/public/stylesheets/grid.css +5 -2
  104. data/public/stylesheets/popup.css +1 -1
  105. data/test/fixtures/files/TestNode.zafu +51 -0
  106. data/test/functional/nodes_controller_test.rb +20 -5
  107. data/test/functional/user_sessions_controller_test.rb +41 -6
  108. data/test/functional/users_controller_test.rb +1 -2
  109. data/test/integration/navigation_test.rb +22 -4
  110. data/test/integration/query_node/basic.yml +7 -0
  111. data/test/integration/query_node/complex.yml +1 -1
  112. data/test/integration/query_node/errors.yml +1 -1
  113. data/test/integration/query_node/filters.yml +34 -1
  114. data/test/integration/query_node/relations.yml +6 -13
  115. data/test/integration/query_node_test.rb +22 -3
  116. data/test/integration/zafu_compiler/action.yml +1 -1
  117. data/test/integration/zafu_compiler/alias_site.yml +52 -0
  118. data/test/integration/zafu_compiler/complex.yml +1 -1
  119. data/test/integration/zafu_compiler/complex_ok.yml +5 -5
  120. data/test/integration/zafu_compiler/context.yml +1 -1
  121. data/test/integration/zafu_compiler/display.yml +56 -5
  122. data/test/integration/zafu_compiler/forms.yml +35 -2
  123. data/test/integration/zafu_compiler/meta.yml +4 -0
  124. data/test/integration/zafu_compiler/rubyless.yml +1 -1
  125. data/test/integration/zafu_compiler/safe_definitions.yml +4 -0
  126. data/test/integration/zafu_compiler/security.yml +10 -0
  127. data/test/integration/zafu_compiler/site.yml +5 -1
  128. data/test/integration/zafu_compiler/urls.yml +8 -2
  129. data/test/integration/zafu_compiler/zafu_attributes.yml +2 -1
  130. data/test/integration/zafu_compiler/zazen.yml +4 -0
  131. data/test/integration/zafu_compiler_test.rb +47 -4
  132. data/test/selenium/Grid/grid1.rsel +8 -8
  133. data/test/sites/complex/sites.yml +2 -2
  134. data/test/sites/complex/users.yml +1 -0
  135. data/test/sites/zena/columns.yml +4 -0
  136. data/test/sites/zena/sites.yml +1 -0
  137. data/test/sites/zena/users.yml +1 -0
  138. data/test/unit/node_test.rb +53 -5
  139. data/test/unit/note_test.rb +1 -1
  140. data/test/unit/relation_proxy_test.rb +20 -0
  141. data/test/unit/role_test.rb +2 -0
  142. data/test/unit/site_test.rb +28 -6
  143. data/test/unit/user_test.rb +332 -1
  144. data/test/unit/virtual_class_test.rb +55 -0
  145. data/test/unit/workflow_test.rb +175 -0
  146. data/test/unit/zena/use/ancestry_test.rb +52 -10
  147. data/test/unit/zena/use/prop_eval_test.rb +44 -0
  148. data/test/unit/zena/use/rendering_test.rb +48 -2
  149. data/test/unit/zena/use/upload_test.rb +15 -13
  150. data/test/unit/zena/use/urls_test.rb +1 -0
  151. data/vendor/plugins/ar_mysql_full_text/lib/ar_mysql_full_text.rb +39 -25
  152. data/zena.gemspec +69 -307
  153. metadata +143 -368
  154. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run 2.tmCommand +0 -24
  155. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Context.tmCommand +0 -58
  156. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run Focused Should.tmCommand +0 -88
  157. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/Run.tmCommand +0 -27
  158. data/vendor/TextMate/Ruby Shoulda.tmbundle/Commands/YAML to Shoulda.tmCommand +0 -23
  159. data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Context.tmPreferences +0 -19
  160. data/vendor/TextMate/Ruby Shoulda.tmbundle/Preferences/Symbol List: Should.tmPreferences +0 -19
  161. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory attributes for.tmSnippet +0 -16
  162. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory build.tmSnippet +0 -16
  163. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory.tmSnippet +0 -16
  164. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define with class.tmSnippet +0 -18
  165. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_define.tmSnippet +0 -18
  166. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_next.tmSnippet +0 -16
  167. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/Factory_sequence.tmSnippet +0 -18
  168. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_bad_value.tmSnippet +0 -16
  169. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_contains.tmSnippet +0 -16
  170. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_does_not_contain.tmSnippet +0 -16
  171. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_good_value.tmSnippet +0 -16
  172. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_same_elements.tmSnippet +0 -16
  173. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_save.tmSnippet +0 -16
  174. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_sent_email.tmSnippet +0 -18
  175. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/assert_valid.tmSnippet +0 -16
  176. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/association.tmSnippet +0 -17
  177. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/attribute.tmSnippet +0 -17
  178. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/before_should block.tmSnippet +0 -18
  179. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block get.tmSnippet +0 -22
  180. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block post.tmSnippet +0 -23
  181. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/context block with setup.tmSnippet +0 -25
  182. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/setup.tmSnippet +0 -18
  183. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block with before proc.tmSnippet +0 -18
  184. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should block.tmSnippet +0 -18
  185. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_allow_values_for.tmSnippet +0 -16
  186. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_assign_to.tmSnippet +0 -16
  187. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful denied.tmSnippet +0 -20
  188. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_be_restful.tmSnippet +0 -20
  189. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_belong_to.tmSnippet +0 -16
  190. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change by.tmSnippet +0 -16
  191. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_change from to.tmSnippet +0 -16
  192. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_at_least.tmSnippet +0 -16
  193. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_in_range.tmSnippet +0 -16
  194. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_length_is.tmSnippet +0 -16
  195. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_ensure_value_in_range.tmSnippet +0 -16
  196. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_eventually.tmSnippet +0 -18
  197. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_filter_params.tmSnippet +0 -16
  198. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_and_belong_to_many.tmSnippet +0 -16
  199. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_class_methods.tmSnippet +0 -16
  200. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_column.tmSnippet +0 -16
  201. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_db_columns.tmSnippet +0 -16
  202. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_index.tmSnippet +0 -16
  203. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_indices.tmSnippet +0 -16
  204. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_instance_methods.tmSnippet +0 -16
  205. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_many.tmSnippet +0 -16
  206. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_named_scope.tmSnippet +0 -16
  207. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_one.tmSnippet +0 -16
  208. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_have_readonly_attributes.tmSnippet +0 -16
  209. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_mass_assignment_of.tmSnippet +0 -16
  210. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_allow_values_for.tmSnippet +0 -16
  211. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_assign_to.tmSnippet +0 -16
  212. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_change.tmSnippet +0 -16
  213. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_not_set_the_flash.tmSnippet +0 -16
  214. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_redirect_to.tmSnippet +0 -16
  215. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_a_form.tmSnippet +0 -16
  216. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_template.tmSnippet +0 -16
  217. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_with_layout.tmSnippet +0 -16
  218. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_render_without_layout.tmSnippet +0 -16
  219. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with.tmSnippet +0 -16
  220. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_respond_with_content_type.tmSnippet +0 -16
  221. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_return_from_session.tmSnippet +0 -16
  222. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_route.tmSnippet +0 -16
  223. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_set_the_flash_to.tmSnippet +0 -16
  224. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_acceptance_of.tmSnippet +0 -16
  225. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_numericality_of.tmSnippet +0 -16
  226. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_presence_of.tmSnippet +0 -16
  227. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of with scope.tmSnippet +0 -16
  228. data/vendor/TextMate/Ruby Shoulda.tmbundle/Snippets/should_validate_uniqueness_of.tmSnippet +0 -16
  229. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/catch_exception.rb +0 -39
  230. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/run_script.rb +0 -104
  231. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/stdin_dialog.rb +0 -14
  232. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/test.rb +0 -17
  233. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/RubyMate/todo.txt +0 -13
  234. data/vendor/TextMate/Ruby Shoulda.tmbundle/Support/bin/yaml_to_shoulda.rb +0 -25
  235. data/vendor/TextMate/Ruby Shoulda.tmbundle/Syntaxes/Ruby on Rails (Shoulda).tmLanguage +0 -166
  236. data/vendor/TextMate/Ruby Shoulda.tmbundle/info.plist +0 -304
  237. data/vendor/TextMate/Zena.tmbundle/Commands/Run all yaml tests.tmCommand +0 -37
  238. data/vendor/TextMate/Zena.tmbundle/Commands/Run focused yaml test.tmCommand +0 -52
  239. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/catch_exception.rb +0 -39
  240. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/run_script.rb +0 -118
  241. data/vendor/TextMate/Zena.tmbundle/Support/RubyMate/stdin_dialog.rb +0 -14
  242. data/vendor/TextMate/Zena.tmbundle/info.plist +0 -17
  243. data/vendor/plugins/selenium-on-rails/CHANGELOG +0 -125
  244. data/vendor/plugins/selenium-on-rails/LICENSE-2.0.txt +0 -202
  245. data/vendor/plugins/selenium-on-rails/README.md +0 -202
  246. data/vendor/plugins/selenium-on-rails/Rakefile +0 -38
  247. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumController.html +0 -265
  248. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumHelper.html +0 -148
  249. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails.html +0 -126
  250. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/FixtureLoader.html +0 -231
  251. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/PartialsSupport.html +0 -195
  252. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Paths.html +0 -295
  253. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/RSelenese.html +0 -219
  254. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Renderer.html +0 -156
  255. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/Selenese.html +0 -179
  256. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/SuiteRenderer.html +0 -223
  257. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilder.html +0 -441
  258. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderAccessors.html +0 -3098
  259. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderActions.html +0 -2080
  260. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderUserAccessors.html +0 -116
  261. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRails/TestBuilderUserActions.html +0 -116
  262. data/vendor/plugins/selenium-on-rails/doc/classes/SeleniumOnRailsConfig.html +0 -150
  263. data/vendor/plugins/selenium-on-rails/doc/files/CHANGELOG.html +0 -422
  264. data/vendor/plugins/selenium-on-rails/doc/files/README.html +0 -321
  265. data/vendor/plugins/selenium-on-rails/doc/files/lib/controllers/selenium_controller_rb.html +0 -108
  266. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_helper_rb.html +0 -101
  267. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/acceptance_test_runner_rb.html +0 -222
  268. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/fixture_loader_rb.html +0 -109
  269. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/partials_support_rb.html +0 -111
  270. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/paths_rb.html +0 -101
  271. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/renderer_rb.html +0 -101
  272. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/rselenese_rb.html +0 -118
  273. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/selenese_rb.html +0 -101
  274. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/suite_renderer_rb.html +0 -101
  275. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_accessors_rb.html +0 -114
  276. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_actions_rb.html +0 -113
  277. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails/test_builder_rb.html +0 -120
  278. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails_config_rb.html +0 -108
  279. data/vendor/plugins/selenium-on-rails/doc/files/lib/selenium_on_rails_rb.html +0 -115
  280. data/vendor/plugins/selenium-on-rails/doc/fr_class_index.html +0 -42
  281. data/vendor/plugins/selenium-on-rails/doc/fr_file_index.html +0 -43
  282. data/vendor/plugins/selenium-on-rails/doc/fr_method_index.html +0 -182
  283. data/vendor/plugins/selenium-on-rails/doc/index.html +0 -24
  284. data/vendor/plugins/selenium-on-rails/doc/rdoc-style.css +0 -208
  285. data/vendor/plugins/selenium-on-rails/generators/selenium/USAGE +0 -19
  286. data/vendor/plugins/selenium-on-rails/generators/selenium/selenium_generator.rb +0 -50
  287. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/rhtml.rhtml +0 -16
  288. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/rselenese.rhtml +0 -14
  289. data/vendor/plugins/selenium-on-rails/generators/selenium/templates/selenese.rhtml +0 -11
  290. data/vendor/plugins/selenium-on-rails/init.rb +0 -15
  291. data/vendor/plugins/selenium-on-rails/lib/controllers/selenium_controller.rb +0 -122
  292. data/vendor/plugins/selenium-on-rails/lib/controllers/switch_environment_controller.rb +0 -16
  293. data/vendor/plugins/selenium-on-rails/lib/selenium_helper.rb +0 -8
  294. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails.rb +0 -11
  295. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/acceptance_test_runner.rb +0 -215
  296. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/fixture_loader.rb +0 -57
  297. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/partials_support.rb +0 -36
  298. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/paths.rb +0 -61
  299. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/renderer.rb +0 -20
  300. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/rselenese.rb +0 -44
  301. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/selenese.rb +0 -87
  302. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/suite_renderer.rb +0 -56
  303. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder.rb +0 -116
  304. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_accessors.rb +0 -1002
  305. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_actions.rb +0 -514
  306. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_user_accessors.rb.example +0 -91
  307. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails/test_builder_user_actions.rb.example +0 -24
  308. data/vendor/plugins/selenium-on-rails/lib/selenium_on_rails_config.rb +0 -30
  309. data/vendor/plugins/selenium-on-rails/lib/views/layouts/layout.rhtml +0 -18
  310. data/vendor/plugins/selenium-on-rails/lib/views/record.rhtml +0 -5
  311. data/vendor/plugins/selenium-on-rails/lib/views/selenium_helper.rb +0 -9
  312. data/vendor/plugins/selenium-on-rails/lib/views/setup.rhtml +0 -67
  313. data/vendor/plugins/selenium-on-rails/lib/views/test_suite.rhtml +0 -26
  314. data/vendor/plugins/selenium-on-rails/routes.rb +0 -24
  315. data/vendor/plugins/selenium-on-rails/selenium-core/Blank.html +0 -7
  316. data/vendor/plugins/selenium-on-rails/selenium-core/InjectedRemoteRunner.html +0 -8
  317. data/vendor/plugins/selenium-on-rails/selenium-core/RemoteRunner.html +0 -110
  318. data/vendor/plugins/selenium-on-rails/selenium-core/SeleniumLog.html +0 -109
  319. data/vendor/plugins/selenium-on-rails/selenium-core/TestPrompt.html +0 -145
  320. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner-splash.html +0 -55
  321. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner.hta +0 -177
  322. data/vendor/plugins/selenium-on-rails/selenium-core/TestRunner.html +0 -177
  323. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/butmin.gif +0 -0
  324. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/butplus.gif +0 -0
  325. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/domviewer.css +0 -298
  326. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/domviewer.html +0 -16
  327. data/vendor/plugins/selenium-on-rails/selenium-core/domviewer/selenium-domviewer.js +0 -205
  328. data/vendor/plugins/selenium-on-rails/selenium-core/icons/all.png +0 -0
  329. data/vendor/plugins/selenium-on-rails/selenium-core/icons/continue.png +0 -0
  330. data/vendor/plugins/selenium-on-rails/selenium-core/icons/continue_disabled.png +0 -0
  331. data/vendor/plugins/selenium-on-rails/selenium-core/icons/pause.png +0 -0
  332. data/vendor/plugins/selenium-on-rails/selenium-core/icons/pause_disabled.png +0 -0
  333. data/vendor/plugins/selenium-on-rails/selenium-core/icons/selected.png +0 -0
  334. data/vendor/plugins/selenium-on-rails/selenium-core/icons/step.png +0 -0
  335. data/vendor/plugins/selenium-on-rails/selenium-core/icons/step_disabled.png +0 -0
  336. data/vendor/plugins/selenium-on-rails/selenium-core/iedoc-core.xml +0 -1759
  337. data/vendor/plugins/selenium-on-rails/selenium-core/iedoc.xml +0 -1800
  338. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/cssQuery-p.js +0 -6
  339. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-level2.js +0 -142
  340. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-level3.js +0 -150
  341. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery-standard.js +0 -53
  342. data/vendor/plugins/selenium-on-rails/selenium-core/lib/cssQuery/src/cssQuery.js +0 -356
  343. data/vendor/plugins/selenium-on-rails/selenium-core/lib/prototype.js +0 -2006
  344. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/builder.js +0 -101
  345. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/controls.js +0 -815
  346. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/dragdrop.js +0 -915
  347. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/effects.js +0 -958
  348. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/scriptaculous.js +0 -47
  349. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/slider.js +0 -283
  350. data/vendor/plugins/selenium-on-rails/selenium-core/lib/scriptaculous/unittest.js +0 -383
  351. data/vendor/plugins/selenium-on-rails/selenium-core/lib/snapsie.js +0 -91
  352. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/find_matching_child.js +0 -69
  353. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/htmlutils.js +0 -1616
  354. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/injection.html +0 -72
  355. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-api.js +0 -3184
  356. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-browserbot.js +0 -2300
  357. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-browserdetect.js +0 -153
  358. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-commandhandlers.js +0 -377
  359. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-executionloop.js +0 -175
  360. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-logging.js +0 -148
  361. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-remoterunner.js +0 -695
  362. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-testrunner.js +0 -1362
  363. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/selenium-version.js +0 -5
  364. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-doc.html +0 -803
  365. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-element.js +0 -1537
  366. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/ui-map-sample.js +0 -979
  367. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/user-extensions.js +0 -3
  368. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/user-extensions.js.sample +0 -75
  369. data/vendor/plugins/selenium-on-rails/selenium-core/scripts/xmlextras.js +0 -153
  370. data/vendor/plugins/selenium-on-rails/selenium-core/selenium-logo.png +0 -0
  371. data/vendor/plugins/selenium-on-rails/selenium-core/selenium-test.css +0 -43
  372. data/vendor/plugins/selenium-on-rails/selenium-core/selenium.css +0 -316
  373. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/dom.js +0 -566
  374. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/javascript-xpath-0.1.11.js +0 -2816
  375. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/util.js +0 -549
  376. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/xmltoken.js +0 -149
  377. data/vendor/plugins/selenium-on-rails/selenium-core/xpath/xpath.js +0 -2450
  378. data/vendor/plugins/selenium-on-rails/tasks/test_acceptance.rake +0 -8
  379. data/vendor/plugins/selenium-on-rails/test/fixtures/config.yml +0 -37
  380. data/vendor/plugins/selenium-on-rails/test/fixtures/selenium.yml +0 -27
  381. data/vendor/plugins/selenium-on-rails/test/paths_test.rb +0 -72
  382. data/vendor/plugins/selenium-on-rails/test/renderer_test.rb +0 -157
  383. data/vendor/plugins/selenium-on-rails/test/rselenese_test.rb +0 -708
  384. data/vendor/plugins/selenium-on-rails/test/selenese_test.rb +0 -242
  385. data/vendor/plugins/selenium-on-rails/test/selenium_controller_test.rb +0 -67
  386. data/vendor/plugins/selenium-on-rails/test/selenium_on_rails_config_test.rb +0 -43
  387. data/vendor/plugins/selenium-on-rails/test/selenium_support_test.rb +0 -35
  388. data/vendor/plugins/selenium-on-rails/test/setup_test.rb +0 -31
  389. data/vendor/plugins/selenium-on-rails/test/suite_renderer_test.rb +0 -109
  390. data/vendor/plugins/selenium-on-rails/test/switch_environment_controller_test.rb +0 -17
  391. data/vendor/plugins/selenium-on-rails/test/test_builder_functions_authortest.rb +0 -51
  392. data/vendor/plugins/selenium-on-rails/test/test_helper.rb +0 -101
  393. data/vendor/plugins/selenium-on-rails/test_data/_partial.rsel +0 -1
  394. data/vendor/plugins/selenium-on-rails/test_data/own_layout.html +0 -12
  395. data/vendor/plugins/selenium-on-rails/test_data/partials/_html.html +0 -6
  396. data/vendor/plugins/selenium-on-rails/test_data/partials/_nesting.rsel +0 -2
  397. data/vendor/plugins/selenium-on-rails/test_data/partials/_rhtml.rhtml +0 -6
  398. data/vendor/plugins/selenium-on-rails/test_data/partials/_rsel.rsel +0 -1
  399. data/vendor/plugins/selenium-on-rails/test_data/partials/_sel.sel +0 -5
  400. data/vendor/plugins/selenium-on-rails/test_data/partials/all_partials.rsel +0 -5
  401. data/vendor/plugins/selenium-on-rails/test_data/rhtml.rhtml +0 -7
  402. data/vendor/plugins/selenium-on-rails/test_data/rselenese.rsel +0 -8
  403. data/vendor/plugins/selenium-on-rails/test_data/selenese.sel +0 -7
  404. data/vendor/plugins/selenium-on-rails/test_data/suite_one/subsuite/suite_one_subsuite_testcase.sel +0 -1
  405. data/vendor/plugins/selenium-on-rails/test_data/suite_one/suite_one_testcase1.sel +0 -1
  406. data/vendor/plugins/selenium-on-rails/test_data/suite_one/suite_one_testcase2.sel +0 -1
  407. data/vendor/plugins/selenium-on-rails/test_data/suite_two/suite_two_testcase.sel +0 -1
@@ -226,8 +226,8 @@ Zena.resizeElement = function(name) {
226
226
  }
227
227
  var hMargin = obj.offsetLeft;
228
228
  var vMargin = obj.offsetTop;
229
- obj.style.width = (myWidth - hMargin - 5) + 'px';
230
- obj.style.height = (myHeight - vMargin - 5) + 'px';
229
+ // obj.style.width = (myWidth - hMargin - 5) + 'px';
230
+ obj.style.height = (myHeight - vMargin - 12) + 'px';
231
231
  }
232
232
 
233
233
  // transfer html from src tag to trgt tag
@@ -839,10 +839,10 @@ Zena.set_toggle = function(dom_id, definition) {
839
839
  if (elem.tagName == 'TR') {
840
840
  target = elem.select('td')[0];
841
841
  }
842
- var input_type = 'checkbox'
843
- if (definition['arity'] == 'one') {
844
- input_type = 'radio'
845
- }
842
+ var input_type = 'checkbox'
843
+ if (definition['arity'] == 'one') {
844
+ input_type = 'radio'
845
+ }
846
846
  target.insert({top:"<input type='"+input_type+"' class='cb'/>"});
847
847
  }
848
848
 
@@ -1018,6 +1018,7 @@ Zena.do = function(method, dom, query, opts) {
1018
1018
  var todo = list.length
1019
1019
  for (var i=0; i < list.length; i++) {
1020
1020
  var q = list[i]
1021
+ q.zs = Zena.stamp(dom.id)
1021
1022
  new Ajax.Request(makeUrl(method, dom, q), {
1022
1023
  method:method,
1023
1024
  parameters:Zena.prepare_query(q),
@@ -1041,6 +1042,7 @@ Zena.do = function(method, dom, query, opts) {
1041
1042
  query.dom_id = dom.id
1042
1043
  if (!query.s) query.s = $(document.body).getAttribute('data-z')
1043
1044
  if (!query.t_url) query.t_url = $(document.body).getAttribute('data-t') + '/' + (dom.getAttribute('data-t') || dom.id)
1045
+ query.zs = Zena.stamp(dom.id)
1044
1046
  new Ajax.Request(makeUrl(method, dom, query), {
1045
1047
  method:method,
1046
1048
  parameters:Zena.prepare_query(query),
@@ -1067,18 +1069,25 @@ Zena.post = function(dom_name, query) {
1067
1069
  }
1068
1070
 
1069
1071
  Zena.loading = function(e) {
1070
- e.addClassName('zloading')
1072
+ var id = e.id
1073
+ e.addClassName('zloading_s')
1074
+ setTimeout(function() {
1075
+ e = $(id)
1076
+ if (e.hasClassName('zloading_s')) {
1077
+ e.addClassName('zloading')
1078
+ }
1079
+ }, 300)
1071
1080
  }
1072
1081
 
1073
- Zena._add_sort = function(dom, upd, elem, val) {
1082
+ Zena._add_sort = function(upd, elem, val) {
1074
1083
  var query
1075
1084
  elem.setAttribute('data-p',val)
1076
1085
  var link_id = elem.getAttribute('data-l')
1077
1086
  if (link_id) {
1078
1087
  query = {
1079
- id:elem.id.gsub(/^[^0-9]+/,''),
1088
+ id:elem.id.gsub(/^.*?_/,''),
1080
1089
  node: {
1081
- link_id:elem.getAttribute('data-l'),
1090
+ link_id:link_id,
1082
1091
  l_status:val
1083
1092
  }
1084
1093
  }
@@ -1087,7 +1096,7 @@ Zena._add_sort = function(dom, upd, elem, val) {
1087
1096
  id:elem.id.gsub(/^.*?_/,''),
1088
1097
  node: {}
1089
1098
  }
1090
- query.node[dom.getAttribute('data-a') || 'position'] = val
1099
+ query.node[elem.getAttribute('data-a') || 'position'] = val
1091
1100
  }
1092
1101
  upd.push(query)
1093
1102
  }
@@ -1107,7 +1116,7 @@ Zena._sortable_upd = function(dom) {
1107
1116
 
1108
1117
  if (p_s == 0) {
1109
1118
  p_s = 1
1110
- Zena._add_sort(dom, upd, prev, p_s)
1119
+ Zena._add_sort(upd, prev, p_s)
1111
1120
  }
1112
1121
 
1113
1122
  var list_len = list.length
@@ -1118,7 +1127,7 @@ Zena._sortable_upd = function(dom) {
1118
1127
  var n_s = next ? parseFloat(next.getAttribute('data-p')) || 0 : false
1119
1128
  if (i == 1 && p_s > c_s) {
1120
1129
  p_s = c_s > 0.01 ? c_s / 2 : 1
1121
- Zena._add_sort(dom, upd, prev, p_s)
1130
+ Zena._add_sort(upd, prev, p_s)
1122
1131
  }
1123
1132
 
1124
1133
  if(p_s < c_s) {
@@ -1129,7 +1138,7 @@ Zena._sortable_upd = function(dom) {
1129
1138
  } else {
1130
1139
  c_s = p_s + 1
1131
1140
  }
1132
- Zena._add_sort(dom, upd, curr, c_s)
1141
+ Zena._add_sort(upd, curr, c_s)
1133
1142
  }
1134
1143
  prev = curr
1135
1144
  p_s = c_s
@@ -1191,4 +1200,23 @@ Zena.resetSort = function(ref) {
1191
1200
  Zena.reload(dom)
1192
1201
  }
1193
1202
  })
1194
- }
1203
+ }
1204
+
1205
+ var stamps = {}
1206
+ Zena.stamp = function (dom) {
1207
+ var s = (stamps[dom] || 0) + 1
1208
+ stamps[dom] = s
1209
+ return s
1210
+ }
1211
+
1212
+ // Used to make sure requests are served in chronological order. Stores stamp by dom_id.
1213
+ Zena.stampOk = function(dom, stamp) {
1214
+ var c = stamps[dom]
1215
+ if (
1216
+ !c || // this happens if Zena.stamp was not called prior to the ajax query (old templates)
1217
+ (stamp == c) || // this is normal behavior
1218
+ stamp == 0) { // this happens with pagination (Zena.stamp is called for query but not for pagination so the stamp is always 0)
1219
+ return true
1220
+ }
1221
+ return false
1222
+ }
@@ -15,7 +15,7 @@
15
15
 
16
16
 
17
17
  table.admin, table.admin table { border-collapse:separate; border-width:0; margin:auto; border-color:#999; border-style:solid; }
18
- table.admin { width:500px; }
18
+ table.admin { width:650px; }
19
19
  .admin_group { display:table; margin:1em auto; width:500px; border:1px solid grey; padding:5px; background:#eee;}
20
20
  .admin_group .btn_validate { float:right;}
21
21
  table.admin table { width:90%; }
@@ -27,6 +27,7 @@ table.admin td:first-child { border-left: 1px solid #999; }
27
27
  #add_user td { border: 0;}
28
28
  #add_group td { border: 0;}
29
29
  #virtual_class_list td, #virtual_class_list, #virtual_class_list th {border-color:#ccc;}
30
+ .admin .profile {font-weight: bold;}
30
31
  .admin td { padding: 3px; height:18px; border-right:1px solid #999; border-bottom:1px solid #999; }
31
32
  .admin th { border-bottom:1px solid #999; padding:4px;}
32
33
  .admin .adm_icon, .admin .adm_add, .admin .action { width:22px; text-align:center; margin:0;}
@@ -43,6 +44,8 @@ table.admin td:first-child { border-left: 1px solid #999; }
43
44
  .admin th { background:#999; color:#222; font-weight:bold;}
44
45
  .admin .Role { color:#eee;}
45
46
  .admin .name { font-weight:bold;}
47
+ .admin .name.versioned { color:#1F8A1F}
48
+ .admin .name.not-versioned { color:#5699B9}
46
49
  .admin .blank { text-align:center; background:none; padding-top:2em;}
47
50
  .admin th .kpath {font-weight:normal; font-family:Monaco, monospace; color:#ccc;}
48
51
  .admin .light { background:#eee;}
@@ -94,7 +97,7 @@ ul.actions select { width:186px; }
94
97
  .actions .errors li { margin-left:0.4em; background:inherit; line-height:1.2em;}
95
98
 
96
99
  /* forms */
97
- label { font-size:0.9em; font-weight:bold; display:block; color:#5C1515; margin:10px 0 5px; clear:left;}
100
+ .nform label { font-size:0.9em; font-weight:bold; display:block; color:#5C1515; margin:10px 0 5px; clear:left;}
98
101
 
99
102
  .comment { font-style:italic; color:#777}
100
103
  .comment strong {font-weight:bold; font-style:italic;}
@@ -107,3 +110,6 @@ label { font-size:0.9em; font-weight:bold; display:block; color:#5C1515; margin:
107
110
  .virtual_class .nav.constant {color: #003F9D;}
108
111
  .role .constant {color:#0C9616;}
109
112
  .role .nav.constant {color:#05540B;}
113
+ .boxes p {margin:2px 0}
114
+ .boxes input {}
115
+ .boxes label {padding-left:8px; }
@@ -1,3 +1,4 @@
1
+ .grid td {white-space:pre-line}
1
2
  .grid td.action {border-width:0 0 0 1px; font-size:70%}
2
3
  .grid tr.action td {border-width:0 0 1px 0; font-size:70%}
3
4
  .grid tr.action td.action {border:0}
@@ -15,14 +16,16 @@
15
16
  .grid .action .del {background:url('/images/bullet_delete.png') no-repeat; padding:5px;}
16
17
  .grid .action .copy {background:url('/images/table_go.png') no-repeat; padding:8px;}
17
18
 
18
- .grid_btn a {text-decoration:none; border:1px solid #333; border-radius:4px; padding:2px 5px; color:white;}
19
+ .grid_btn a {text-decoration:none; border:1px solid #333; border-radius:4px; padding:2px 5px; color:#333;}
19
20
  .grid_btn {margin:1em 0}
20
21
  .grid_btn a.save {background:#80B62D}
21
22
  .grid_btn a.undo {background:#AAB76D}
23
+ .grid_btn a.save:active {position:relative; top:1px; background:#97D13E}
24
+ .grid_btn a.undo:active {position:relative; top:1px; background:#D8E69B}
22
25
  .grid_msg {border:1px solid #888; background:#eee; border-radius:4px; padding:5px; display:table}
23
26
 
24
27
  .tags li {border-radius:2px; background:#ccc url('/images/remove_tag.png') no-repeat; padding:2px 5px 2px 15px; margin:3px; display:inline; background-position:2px 4px}
25
28
  .tags li.add {background:#8c8 url('/images/add.png') no-repeat;background-position:1px 2px}
26
29
 
27
30
  .grid .asc {background:#7b7}
28
- .grid .desc {background:#fa0}
31
+ .grid .desc {background:#fa0}
@@ -48,7 +48,7 @@ form .infos li { clear:none;}
48
48
  .tab_content { font-size:0.9em; padding:30px 0 2px 8px; }
49
49
  /* text */
50
50
  #text_tab { padding:0;}
51
- #node_text { width:95%; height:75%; margin:30px 5px 5px 5px; font:inherit; padding:5px;}
51
+ #node_text { width:97%; height:75%; margin:30px 0px 5px 0px; font:inherit; padding:5px;}
52
52
 
53
53
  /* title */
54
54
  .full_width { width:96%; font:inherit; font-size:0.9em; padding:2px;}
@@ -408,8 +408,59 @@
408
408
  <r:js>
409
409
  $$('.grid').each(function(e) {
410
410
  Grid.make(e);
411
+ $('grid1').insert({bottom:'grid setup done'})
411
412
  });
412
413
  </r:js>
413
414
  </div>
415
+
416
+ //! grid table edit
417
+ <div class='test' id='grid2' do='selenium'>
418
+ <h3>grid table</h3>
419
+ <p>Batch create and edit objects</h3>
420
+ <table class='grid' id='grid2_table' do='posts in site'>
421
+ <tr>
422
+ <th data-a='date' do='t'>date</th>
423
+ <th data-a='parent_id' do='t'>parent</th>
424
+ <th data-a='title' do='t'>title</th>
425
+ <th data-a='summary' do='t'>summary</th>
426
+ </tr>
427
+
428
+ <r:each>
429
+ <tr id='id_#{id}'>
430
+ <td class='date' do='this.date' format='%d.%m.%Y %H:%M'/>
431
+ <r:parent>
432
+ <td data-v='#{id}' do='title'/>
433
+ </r:parent>
434
+ <td class='title' do='title'/>
435
+ <td class='summary' do='summary'/>
436
+ </tr>
437
+ </r:each>
438
+ </table>
439
+
440
+ <div id='h_grid' style='display:none'>
441
+ <select name='parent_id' do='projects in site'>
442
+ <option value='#{id}' do='each' do='title'/>
443
+ </select>
444
+ <r:input data-d='true' type='hidden' param='klass' value='Post'/>
445
+ </div>
446
+
447
+ <table style='display:none'>
448
+ <tr id='new_row'>
449
+ <td class='date'></td>
450
+ <td></td>
451
+ <td class='title'></td>
452
+ <td class='summary'></td>
453
+ </tr>
454
+ </table>
455
+
456
+ <r:js>
457
+ Grid.make('grid2_table', {
458
+ newRow: 'new_row',
459
+ helper: 'h_grid',
460
+ fdate: '%d.%m.%Y %H:%M',
461
+ contenteditable: true,
462
+ })
463
+ </r:js>
464
+ </div>
414
465
  </r:with>
415
466
  </r:include>
@@ -359,7 +359,7 @@ class NodesControllerTest < Zena::Controller::TestCase
359
359
  assert_redirected_to '/foo/bar/baz'
360
360
  end
361
361
  end # with a redir param
362
-
362
+
363
363
  context 'by changing a link comment' do
364
364
  subject do
365
365
  {:action => 'update', :controller => 'nodes', :id => nodes_zip(:opening), :node => {:link_id => links_id(:opening_in_art), :l_comment => 'To be removed'}}
@@ -409,8 +409,9 @@ class NodesControllerTest < Zena::Controller::TestCase
409
409
 
410
410
  should 'set error message on skin_id' do
411
411
  put_subject
412
- assert_response :success
412
+ assert_response :redirect
413
413
  assert_equal 'type mismatch (Page is not a Skin)', assigns(:node).errors[:skin_id]
414
+ assert_equal %Q{<table class='errors'>\n<tr><td><b>skin_id</b></td><td>type mismatch (Page is not a Skin)</td></tr>\n</table>}, flash[:error]
414
415
  end
415
416
  end # with a bad value
416
417
 
@@ -538,6 +539,18 @@ class NodesControllerTest < Zena::Controller::TestCase
538
539
  assert_redirected_to '/foo/bar/baz'
539
540
  end
540
541
  end # with a redir param
542
+
543
+
544
+ context 'with a redir param with NODE_ID' do
545
+ subject do
546
+ {:action => 'create', :controller => 'nodes', :node => {:parent_id => nodes_zip(:zena), :title => 'hello'}, :redir => '/foo/bar/baz/NODE_ID'}
547
+ end
548
+
549
+ should 'replace NODE_ID in redirect' do
550
+ post_subject
551
+ assert_redirected_to "/foo/bar/baz/66"
552
+ end
553
+ end # with a redir param
541
554
 
542
555
  context 'with a mode param' do
543
556
  subject do
@@ -727,8 +740,9 @@ class NodesControllerTest < Zena::Controller::TestCase
727
740
  test_site(:zena)
728
741
  without_files('/test.host/public') do
729
742
  name = "section#{nodes_zip(:people)}.xml"
743
+ cache_path = "#{SITES_ROOT}/test.host/public/en/#{name}"
730
744
  with_caching do
731
- assert !File.exist?("#{SITES_ROOT}/test.host/public/fr/#{name}")
745
+ assert !File.exist?(cache_path)
732
746
  login(:lion)
733
747
  doc = secure!(Template) { Template.create('title'=>'Node', 'format'=>'xml', 'text' => '<?xml version="1.0" encoding="utf-8"?><node><title do="title"/></node>', 'parent_id'=>nodes_id(:default))}
734
748
  assert !doc.new_record?, "Not a new record"
@@ -736,8 +750,9 @@ class NodesControllerTest < Zena::Controller::TestCase
736
750
  login(:anon)
737
751
  get 'show', :prefix => 'en', :path => [name]
738
752
  assert_response :success
739
- assert_equal "<?xml version=\"1.0\" encoding=\"utf-8\"?><node><title>people</title></node>", @response.body
740
- assert File.exist?("#{SITES_ROOT}/test.host/public/en/#{name}")
753
+ assert_equal '<?xml version="1.0" encoding="utf-8"?><node><title>people</title></node>', @response.body
754
+ assert File.exist?(cache_path)
755
+ assert_equal '<?xml version="1.0" encoding="utf-8"?><node><title>people</title></node>', File.read(cache_path)
741
756
  end
742
757
  end
743
758
  end
@@ -14,11 +14,41 @@ class UserSessionsControllerTest < Zena::Controller::TestCase
14
14
  assert assigns(:user_session).persisting?
15
15
  assert_response 302
16
16
  end
17
-
18
- should "redirect to login page if login failed" do
19
- post 'create', :login=>'ant', :password=>'boom'
20
- assert !assigns(:user_session).persisting?
21
- assert_redirected_to login_path
17
+
18
+ context 'on failure' do
19
+ should "redirect to login page" do
20
+ post 'create', :login=>'ant', :password=>'boom'
21
+ assert !assigns(:user_session).persisting?
22
+ assert_redirected_to login_path
23
+ end
24
+
25
+ should 'increment user login_attempt_count' do
26
+ assert_nil users(:ant).login_attempt_count
27
+ post 'create', :login=>'ant', :password=>'boom'
28
+ assert_equal 1, users(:ant).login_attempt_count
29
+ end
30
+
31
+ should 'set attempt datetime' do
32
+ a = Time.now.utc.to_i
33
+ assert_nil users(:ant).login_attempted_at
34
+ post 'create', :login=>'ant', :password=>'boom'
35
+ b = Time.now.utc.to_i
36
+ assert a <= users(:ant).login_attempted_at.to_i
37
+ assert b >= users(:ant).login_attempted_at.to_i
38
+ end
39
+ end
40
+
41
+ context 'with a large attempt count' do
42
+ setup do
43
+ Zena::Db.set_attribute(users(:ant), 'login_attempt_count', 10)
44
+ Zena::Db.set_attribute(users(:ant), 'login_attempted_at', Time.now.utc)
45
+ end
46
+
47
+ should 'refuse login' do
48
+ post 'create', :login => 'ant', :password => 'ant'
49
+ assert_redirected_to login_path
50
+ assert_equal 'You need to wait 0h 17m 4s before any new attempt (10 failed attempts).', flash[:error]
51
+ end
22
52
  end
23
53
 
24
54
  end
@@ -40,6 +70,11 @@ class UserSessionsControllerTest < Zena::Controller::TestCase
40
70
  should "check if visitor is admin" do
41
71
  assert visitor.is_admin?
42
72
  end
73
+
74
+ should 'redirect to home on login' do
75
+ get :new
76
+ assert_redirected_to 'oo'
77
+ end
43
78
 
44
79
  end
45
80
 
@@ -50,7 +85,7 @@ class UserSessionsControllerTest < Zena::Controller::TestCase
50
85
 
51
86
  should 'not be allowed to login' do
52
87
  post 'create', :login => 'ant', :password => 'ant'
53
- assert !assigns(:user_session).persisting?
88
+ assert !assigns(:user_session)
54
89
  assert_redirected_to login_path
55
90
  end
56
91
  end
@@ -29,9 +29,8 @@ class UsersControllerTest < Zena::Controller::TestCase
29
29
  setup do
30
30
  login(:lion)
31
31
  # Make a bad admin layout
32
- Version.connection.execute "UPDATE #{Version.table_name} SET properties = '{\"data\":{\"title\":\"foo\",\"text\":\"empty\"},\"json_class\":\"Property::Properties\"}' WHERE id = #{versions_id(:Node_admin_layout_zafu_en)}"
32
+ Version.connection.execute "UPDATE #{Version.table_name} SET properties = '{\"data\":{\"title\":\"foo\",\"text\":\"empty\",\"tkpath\":\"N\"},\"json_class\":\"Property::Properties\"}' WHERE id = #{versions_id(:Node_admin_layout_zafu_en)}"
33
33
  without_files('test.host/zafu') do
34
- get 'index'
35
34
  get 'index'
36
35
  end
37
36
  end
@@ -11,7 +11,7 @@ class NavigationTest < Zena::Integration::TestCase
11
11
  # 1. site forces authentication
12
12
  Site.connection.execute "UPDATE sites SET authentication = 1 WHERE id = #{sites_id(:zena)}"
13
13
  get 'http://test.host/'
14
- assert_redirected_to 'http://test.host/login'
14
+ assert_redirected_to 'http://test.host/login?lang=en'
15
15
 
16
16
  post 'http://test.host/session', :login=>'tiger', :password=>'tiger'
17
17
  assert_redirected_to "http://test.host/"
@@ -31,7 +31,7 @@ class NavigationTest < Zena::Integration::TestCase
31
31
  # 1. site forces authentication
32
32
  Site.connection.execute "UPDATE sites SET authentication = 1 WHERE id = #{sites_id(:zena)}"
33
33
  get 'http://test.host/en/textdocument53.css' # style_css
34
- assert_redirected_to 'http://test.host/login'
34
+ assert_redirected_to 'http://test.host/login?lang=en'
35
35
 
36
36
  post 'http://test.host/session', :login=>'tiger', :password=>'tiger'
37
37
  assert_redirected_to "http://test.host/oo"
@@ -81,7 +81,7 @@ class NavigationTest < Zena::Integration::TestCase
81
81
  reset!
82
82
  get *subject
83
83
  assert_response :redirect
84
- assert_redirected_to 'http://ocean.host/login'
84
+ assert_redirected_to 'http://ocean.host/login?lang=en'
85
85
  assert_equal users_id(:incognito), visitor.id
86
86
  end
87
87
  end # but invalid host
@@ -339,6 +339,24 @@ class NavigationTest < Zena::Integration::TestCase
339
339
  end # with a mode
340
340
 
341
341
  end # On a page with custom base
342
+
343
+ context 'on a site alias with custom base' do
344
+ setup do
345
+ login(:lion, 'alias.host')
346
+ # home = wiki
347
+ # create 'foo' with custom_base and 'bar' inside wiki
348
+ @foo = secure(Page) { Page.create(:parent_id => nodes_id(:wiki), :title => 'foo', :custom_base => true, :v_status => Zena::Status::Pub)}
349
+ @bar = secure(Page) { Page.create(:parent_id => @foo.id, :title => 'bar') }
350
+ end
351
+
352
+ should 'render page' do
353
+ get 'http://alias.host/fr/foo'
354
+ assert_response :success
355
+ get "http://alias.host/fr/foo/page#{@bar.zip}.html"
356
+ assert_response :success
357
+ end
358
+ end
359
+
342
360
 
343
361
  def test_url_with_custom_base
344
362
  get 'http://test.host/en/projects-list/Clean-Water-project'
@@ -516,7 +534,7 @@ class NavigationTest < Zena::Integration::TestCase
516
534
  assert_redirected_to 'http://test.host/en'
517
535
  assert_equal 'en', session[:lang]
518
536
  get 'http://test.host/oo'
519
- assert_redirected_to 'http://test.host/login'
537
+ assert_redirected_to 'http://test.host/login?lang=en'
520
538
  post 'http://test.host/session', :login => 'ant', :password => 'ant'
521
539
  assert_redirected_to 'http://test.host/oo'
522
540
  # should not change session lang