zena 1.2.7 → 1.2.8

Sign up to get free protection for your applications and to get access to all the features.
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