zen 0.3 → 0.4

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 (373) hide show
  1. data/.gems +3 -2
  2. data/.rvmrc +1 -1
  3. data/.travis.yml +5 -0
  4. data/.yardopts +2 -1
  5. data/LICENSE +1 -1
  6. data/README.md +28 -24
  7. data/Rakefile +5 -2
  8. data/guide/asset_management.md +6 -6
  9. data/guide/autosaving_forms.md +42 -0
  10. data/guide/changelog.md +41 -0
  11. data/guide/faq.md +49 -0
  12. data/guide/getting_started.md +24 -13
  13. data/guide/hacking.md +40 -9
  14. data/guide/images/categories/categories.png +0 -0
  15. data/guide/images/categories/category_groups.png +0 -0
  16. data/guide/images/categories/new_category.png +0 -0
  17. data/guide/images/categories/new_category_group.png +0 -0
  18. data/guide/images/comments/comments.png +0 -0
  19. data/guide/images/comments/edit_comment.png +0 -0
  20. data/guide/images/custom_fields/custom_field_groups.png +0 -0
  21. data/guide/images/custom_fields/custom_field_types.png +0 -0
  22. data/guide/images/custom_fields/custom_fields.png +0 -0
  23. data/guide/images/custom_fields/edit_custom_field_general.png +0 -0
  24. data/guide/images/custom_fields/edit_custom_field_group.png +0 -0
  25. data/guide/images/custom_fields/edit_custom_field_settings.png +0 -0
  26. data/guide/images/custom_fields/edit_custom_field_type.png +0 -0
  27. data/guide/images/dashboard/added.png +0 -0
  28. data/guide/images/dashboard/columns.png +0 -0
  29. data/guide/images/dashboard/dashboard.png +0 -0
  30. data/guide/images/dashboard/options.png +0 -0
  31. data/guide/images/menus/edit_menu.png +0 -0
  32. data/guide/images/menus/edit_menu_item.png +0 -0
  33. data/guide/images/menus/menu_item_hierarchy.png +0 -0
  34. data/guide/images/menus/menu_items.png +0 -0
  35. data/guide/images/menus/menus.png +0 -0
  36. data/guide/images/sections/edit_entry.png +0 -0
  37. data/guide/images/sections/edit_entry_categories.png +0 -0
  38. data/guide/images/sections/edit_entry_general.png +0 -0
  39. data/guide/images/sections/edit_entry_meta.png +0 -0
  40. data/guide/images/sections/edit_section_comments.png +0 -0
  41. data/guide/images/sections/edit_section_general.png +0 -0
  42. data/guide/images/sections/edit_section_groups.png +0 -0
  43. data/guide/images/sections/entries.png +0 -0
  44. data/guide/images/sections/sections.png +0 -0
  45. data/guide/images/settings/overview_general.png +0 -0
  46. data/guide/images/settings/overview_security.png +0 -0
  47. data/guide/images/settings/overview_user.png +0 -0
  48. data/guide/images/users/edit_user.png +0 -0
  49. data/guide/images/users/edit_user_group.png +0 -0
  50. data/guide/images/users/edit_user_group_permissions.png +0 -0
  51. data/guide/images/users/edit_user_permissions.png +0 -0
  52. data/guide/images/users/overview.png +0 -0
  53. data/guide/images/users/user_groups_overview.png +0 -0
  54. data/guide/installation.md +7 -1
  55. data/guide/javascript.md +36 -273
  56. data/guide/javascript/zen_autosave.md +26 -0
  57. data/guide/javascript/zen_editor.md +83 -0
  58. data/guide/javascript/zen_hash.md +34 -0
  59. data/guide/javascript/zen_htmltable.md +78 -0
  60. data/guide/javascript/zen_tabs.md +44 -0
  61. data/guide/javascript/zen_window.md +49 -0
  62. data/guide/zen_compared.md +201 -0
  63. data/lib/vendor/sequel_sluggable.rb +1 -1
  64. data/lib/zen.rb +64 -44
  65. data/lib/zen/asset_groups.rb +10 -10
  66. data/lib/zen/bin/create.rb +8 -1
  67. data/lib/zen/helper/breadcrumb.rb +4 -12
  68. data/lib/zen/helper/controller.rb +209 -6
  69. data/lib/zen/helper/locale.rb +19 -0
  70. data/lib/zen/helper/search.rb +1 -1
  71. data/lib/zen/helper/stacked_aspect.rb +7 -43
  72. data/lib/zen/helper/theme.rb +3 -3
  73. data/lib/zen/language.rb +5 -10
  74. data/lib/zen/language/translation.rb +1 -1
  75. data/lib/zen/layout/admin.xhtml +41 -25
  76. data/lib/zen/layout/login.xhtml +8 -3
  77. data/lib/zen/migrator.rb +54 -0
  78. data/lib/zen/model/helper.rb +20 -1
  79. data/lib/zen/model/init.rb +2 -0
  80. data/lib/zen/model/plugin/events.rb +158 -0
  81. data/lib/zen/package.rb +32 -6
  82. data/lib/zen/package/all.rb +1 -0
  83. data/lib/zen/package/categories/lib/categories.rb +6 -6
  84. data/lib/zen/package/categories/lib/categories/controller/categories.rb +20 -83
  85. data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +23 -74
  86. data/lib/zen/package/categories/lib/categories/model/category.rb +58 -1
  87. data/lib/zen/package/categories/lib/categories/model/category_group.rb +62 -2
  88. data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +46 -40
  89. data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +74 -75
  90. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/form.xhtml +27 -24
  91. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +83 -86
  92. data/lib/zen/package/comments/lib/comments.rb +5 -5
  93. data/lib/zen/package/comments/lib/comments/controller/comments.rb +12 -64
  94. data/lib/zen/package/comments/lib/comments/controller/comments_form.rb +4 -22
  95. data/lib/zen/package/comments/lib/comments/model/comment.rb +65 -16
  96. data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +52 -49
  97. data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +52 -60
  98. data/lib/zen/package/comments/migrations/1308774099_comment_status.rb +1 -1
  99. data/lib/zen/package/custom_fields/lib/custom_fields.rb +11 -13
  100. data/lib/zen/package/custom_fields/lib/custom_fields/blue_form_parameters.rb +29 -13
  101. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +21 -50
  102. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_types.rb +27 -71
  103. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +25 -78
  104. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field.rb +48 -1
  105. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_group.rb +35 -1
  106. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_method.rb +3 -0
  107. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_type.rb +40 -1
  108. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_value.rb +1 -0
  109. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/form.xhtml +29 -26
  110. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +96 -100
  111. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/form.xhtml +56 -53
  112. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/index.xhtml +82 -82
  113. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +88 -85
  114. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +83 -80
  115. data/lib/zen/package/dashboard/lib/dashboard.rb +28 -0
  116. data/lib/zen/package/dashboard/lib/dashboard/controller/dashboard.rb +154 -0
  117. data/lib/zen/package/dashboard/lib/dashboard/language/en/dashboard.rb +35 -0
  118. data/lib/zen/package/dashboard/lib/dashboard/language/nl/dashboard.rb +36 -0
  119. data/lib/zen/package/dashboard/lib/dashboard/model/widget.rb +45 -0
  120. data/lib/zen/package/dashboard/lib/dashboard/public/admin/dashboard/css/dashboard.css +74 -0
  121. data/lib/zen/package/dashboard/lib/dashboard/public/admin/dashboard/js/dashboard.js +102 -0
  122. data/lib/zen/package/dashboard/lib/dashboard/view/admin/index.xhtml +29 -0
  123. data/lib/zen/package/dashboard/lib/dashboard/view/admin/widget/welcome.xhtml +28 -0
  124. data/lib/zen/package/dashboard/lib/dashboard/widget.rb +292 -0
  125. data/lib/zen/package/dashboard/lib/dashboard/widget/welcome.rb +9 -0
  126. data/lib/zen/package/dashboard/migrations/1326411254_create_schema.rb +28 -0
  127. data/lib/zen/package/extensions/lib/extensions.rb +5 -5
  128. data/lib/zen/package/extensions/lib/extensions/view/admin/extensions/index.xhtml +72 -67
  129. data/lib/zen/package/menu.rb +6 -1
  130. data/lib/zen/package/menus/lib/menus.rb +6 -4
  131. data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +69 -104
  132. data/lib/zen/package/menus/lib/menus/controller/menus.rb +19 -76
  133. data/lib/zen/package/menus/lib/menus/helper/menu.rb +54 -38
  134. data/lib/zen/package/menus/lib/menus/helper/menu_frontend.rb +7 -13
  135. data/lib/zen/package/menus/lib/menus/model/menu.rb +158 -2
  136. data/lib/zen/package/menus/lib/menus/model/menu_item.rb +73 -10
  137. data/lib/zen/package/menus/lib/menus/public/admin/menus/css/menus.css +47 -0
  138. data/lib/zen/package/menus/lib/menus/public/admin/menus/js/lib/nested_sortables.js +549 -0
  139. data/lib/zen/package/menus/lib/menus/public/admin/menus/js/menu_items.js +38 -0
  140. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +51 -61
  141. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +18 -81
  142. data/lib/zen/package/menus/lib/menus/view/admin/menus/form.xhtml +49 -44
  143. data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +81 -83
  144. data/lib/zen/package/sections/lib/sections.rb +9 -4
  145. data/lib/zen/package/sections/lib/sections/controller/section_entries.rb +80 -132
  146. data/lib/zen/package/sections/lib/sections/controller/sections.rb +27 -73
  147. data/lib/zen/package/sections/lib/sections/helper/section.rb +44 -1
  148. data/lib/zen/package/sections/lib/sections/language/en/section_entries.rb +2 -0
  149. data/lib/zen/package/sections/lib/sections/language/nl/section_entries.rb +2 -0
  150. data/lib/zen/package/sections/lib/sections/model/section.rb +48 -1
  151. data/lib/zen/package/sections/lib/sections/model/section_entry.rb +55 -5
  152. data/lib/zen/package/sections/lib/sections/model/section_entry_status.rb +2 -0
  153. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/form.xhtml +76 -67
  154. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +74 -79
  155. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/recent_entries.xhtml +45 -0
  156. data/lib/zen/package/sections/lib/sections/view/admin/sections/form.xhtml +119 -0
  157. data/lib/zen/package/sections/lib/sections/view/admin/sections/index.xhtml +96 -0
  158. data/lib/zen/package/sections/lib/sections/widget/recent_entries.rb +14 -0
  159. data/lib/zen/package/sections/migrations/1308813320_section_entry_statuses.rb +1 -1
  160. data/lib/zen/package/settings/lib/settings.rb +14 -5
  161. data/lib/zen/package/settings/lib/settings/controller/settings.rb +4 -4
  162. data/lib/zen/package/settings/lib/settings/language/nl/settings.rb +1 -1
  163. data/lib/zen/package/settings/lib/settings/setting.rb +1 -1
  164. data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +21 -17
  165. data/lib/zen/package/users/lib/users.rb +18 -19
  166. data/lib/zen/package/users/lib/users/controller/user_groups.rb +23 -50
  167. data/lib/zen/package/users/lib/users/controller/users.rb +57 -89
  168. data/lib/zen/package/users/lib/users/helper/acl.rb +1 -0
  169. data/lib/zen/package/users/lib/users/language/en/user_groups.rb +1 -0
  170. data/lib/zen/package/users/lib/users/language/en/users.rb +2 -1
  171. data/lib/zen/package/users/lib/users/language/nl/user_groups.rb +1 -0
  172. data/lib/zen/package/users/lib/users/language/nl/users.rb +2 -1
  173. data/lib/zen/package/users/lib/users/model/permission.rb +13 -0
  174. data/lib/zen/package/users/lib/users/model/user.rb +57 -4
  175. data/lib/zen/package/users/lib/users/model/user_group.rb +37 -3
  176. data/lib/zen/package/users/lib/users/model/user_status.rb +4 -0
  177. data/lib/zen/package/users/lib/users/public/admin/{css/users/permissions.css → users/css/users.css} +0 -0
  178. data/lib/zen/package/users/lib/users/public/admin/{js/users/permissions.js → users/js/users.js} +4 -2
  179. data/lib/zen/package/users/lib/users/view/admin/user-groups/form.xhtml +51 -47
  180. data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +62 -69
  181. data/lib/zen/package/users/lib/users/view/admin/users/form.xhtml +92 -82
  182. data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +68 -66
  183. data/lib/zen/package/users/lib/users/view/admin/users/login.xhtml +36 -28
  184. data/lib/zen/package/users/lib/users/view/admin/users/permissions.xhtml +5 -7
  185. data/lib/zen/package/users/lib/users/view/admin/users/register.xhtml +47 -41
  186. data/lib/zen/package/users/migrations/1320272365_status_ids.rb +1 -1
  187. data/lib/zen/public/admin/{js/vendor/mootools → mootools/js}/core.js +113 -108
  188. data/lib/zen/public/admin/{js/vendor/mootools → mootools/js}/more.js +99 -6
  189. data/lib/zen/public/admin/zen/css/buttons.css +106 -0
  190. data/lib/zen/public/admin/{css/zen → zen/css}/datepicker.css +45 -30
  191. data/lib/zen/public/admin/zen/css/editor.css +69 -0
  192. data/lib/zen/public/admin/{css/zen → zen/css}/forms.css +28 -30
  193. data/lib/zen/public/admin/zen/css/general.css +183 -0
  194. data/lib/zen/public/admin/zen/css/layout.css +224 -0
  195. data/lib/zen/public/admin/zen/css/messages.css +34 -0
  196. data/lib/zen/public/admin/{css/zen → zen/css}/reset.css +4 -9
  197. data/lib/zen/public/admin/zen/css/tables.css +57 -0
  198. data/lib/zen/public/admin/zen/css/tabs.css +84 -0
  199. data/lib/zen/public/admin/zen/css/window.css +74 -0
  200. data/lib/zen/public/admin/{images/zen → zen/images}/icons/asc.png +0 -0
  201. data/lib/zen/public/admin/{images/zen → zen/images}/icons/bold.png +0 -0
  202. data/lib/zen/public/admin/zen/images/icons/box.png +0 -0
  203. data/lib/zen/public/admin/zen/images/icons/categories.png +0 -0
  204. data/lib/zen/public/admin/{images/zen → zen/images}/icons/close.png +0 -0
  205. data/lib/zen/public/admin/zen/images/icons/comment.png +0 -0
  206. data/lib/zen/public/admin/{images/zen → zen/images}/icons/desc.png +0 -0
  207. data/lib/zen/public/admin/{images/zen → zen/images}/icons/edit.png +0 -0
  208. data/lib/zen/public/admin/{images/zen → zen/images}/icons/error.png +0 -0
  209. data/lib/zen/public/admin/zen/images/icons/external.png +0 -0
  210. data/lib/zen/public/admin/zen/images/icons/globe.png +0 -0
  211. data/lib/zen/public/admin/{images/zen → zen/images}/icons/italic.png +0 -0
  212. data/lib/zen/public/admin/{images/zen → zen/images}/icons/link.png +0 -0
  213. data/lib/zen/public/admin/zen/images/icons/lock.png +0 -0
  214. data/lib/zen/public/admin/{images/zen → zen/images}/icons/ol.png +0 -0
  215. data/lib/zen/public/admin/zen/images/icons/pages.png +0 -0
  216. data/lib/zen/public/admin/{images/zen → zen/images}/icons/preview.png +0 -0
  217. data/lib/zen/public/admin/zen/images/icons/relation.png +0 -0
  218. data/lib/zen/public/admin/zen/images/icons/settings.png +0 -0
  219. data/lib/zen/public/admin/zen/images/icons/template.png +0 -0
  220. data/lib/zen/public/admin/{images/zen → zen/images}/icons/ul.png +0 -0
  221. data/lib/zen/public/admin/{images/zen → zen/images}/icons/user.png +0 -0
  222. data/lib/zen/public/admin/zen/images/icons/user_group.png +0 -0
  223. data/lib/zen/public/admin/{js/zen → zen/js}/index.js +21 -9
  224. data/lib/zen/public/admin/zen/js/lib/autosave.js +185 -0
  225. data/lib/zen/public/admin/zen/js/lib/base.js +60 -0
  226. data/lib/zen/public/admin/{js/vendor → zen/js/lib}/datepicker.js +52 -28
  227. data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor.js +23 -34
  228. data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor/markdown.js +5 -1
  229. data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor/textile.js +4 -0
  230. data/lib/zen/public/admin/zen/js/lib/hash.js +218 -0
  231. data/lib/zen/public/admin/{js/zen → zen/js}/lib/html_table.js +5 -0
  232. data/lib/zen/public/admin/zen/js/lib/tabs.js +194 -0
  233. data/lib/zen/public/admin/{js/zen → zen/js}/lib/window.js +54 -29
  234. data/lib/zen/security.rb +50 -0
  235. data/lib/zen/spec/helper.rb +5 -120
  236. data/lib/zen/spec/helper/capybara.rb +75 -0
  237. data/lib/zen/spec/helper/general.rb +75 -0
  238. data/lib/zen/spec/simplecov.rb +1 -0
  239. data/lib/zen/task/build.rake +2 -21
  240. data/lib/zen/task/clean.rake +1 -10
  241. data/lib/zen/task/db.rake +4 -10
  242. data/lib/zen/task/package.rake +2 -5
  243. data/lib/zen/task/setup.rake +1 -1
  244. data/lib/zen/task/test.rake +6 -6
  245. data/lib/zen/task/theme.rake +2 -5
  246. data/lib/zen/theme.rb +26 -22
  247. data/lib/zen/version.rb +1 -1
  248. data/lib/zen/view/bottom.xhtml +2 -3
  249. data/lib/zen/view/search.xhtml +3 -5
  250. data/proto/app/config/config.rb.erb +1 -1
  251. data/proto/app/theme/default/index.xhtml +116 -20
  252. data/proto/app/theme/partials/head.xhtml +9 -0
  253. data/proto/app/theme/partials/sidebar.xhtml +40 -0
  254. data/proto/app/theme/theme.rb +3 -0
  255. data/spec/Rakefile +1 -2
  256. data/spec/fixtures/zen/helper/stacked_aspect.rb +54 -0
  257. data/spec/fixtures/zen/package/dashboard/controller/widget.rb +15 -0
  258. data/spec/fixtures/zen/package/dashboard/widget.rb +5 -0
  259. data/spec/fixtures/zen/theme/theme.rb +2 -2
  260. data/spec/helper.rb +19 -10
  261. data/spec/zen/controller/admin_controller.rb +3 -3
  262. data/spec/zen/controller/main_controller.rb +7 -7
  263. data/spec/zen/controller/preview.rb +3 -3
  264. data/spec/zen/event.rb +4 -4
  265. data/spec/zen/helper/breadcrumb.rb +4 -8
  266. data/spec/zen/helper/controller.rb +47 -4
  267. data/spec/zen/helper/locale.rb +3 -3
  268. data/spec/zen/helper/message.rb +4 -4
  269. data/spec/zen/helper/stacked_aspect.rb +40 -0
  270. data/spec/zen/helper/theme.rb +9 -9
  271. data/spec/zen/language.rb +8 -8
  272. data/spec/zen/markup.rb +6 -6
  273. data/spec/zen/package.rb +11 -9
  274. data/spec/zen/package/categories/controller/categories.rb +56 -24
  275. data/spec/zen/package/categories/controller/category_groups.rb +55 -23
  276. data/spec/zen/package/categories/helper/category.rb +5 -5
  277. data/spec/zen/package/categories/helper/category_frontend.rb +5 -5
  278. data/spec/zen/package/comments/anti_spam.rb +4 -4
  279. data/spec/zen/package/comments/controller/comments.rb +95 -24
  280. data/spec/zen/package/comments/controller/comments_form.rb +31 -26
  281. data/spec/zen/package/comments/helper/comment.rb +3 -3
  282. data/spec/zen/package/comments/helper/comment_frontend.rb +6 -6
  283. data/spec/zen/package/custom_fields/blue_form_parameters.rb +8 -8
  284. data/spec/zen/package/custom_fields/controller/custom_field_groups.rb +58 -27
  285. data/spec/zen/package/custom_fields/controller/custom_field_types.rb +57 -27
  286. data/spec/zen/package/custom_fields/controller/custom_fields.rb +58 -27
  287. data/spec/zen/package/custom_fields/helper/custom_field.rb +7 -7
  288. data/spec/zen/package/dashboard/controller/dashboard.rb +147 -0
  289. data/spec/zen/package/dashboard/widget.rb +56 -0
  290. data/spec/zen/package/extensions/controller/extensions.rb +4 -4
  291. data/spec/zen/package/menus/controller/menu_items.rb +48 -39
  292. data/spec/zen/package/menus/controller/menus.rb +55 -24
  293. data/spec/zen/package/menus/helper/menu.rb +6 -14
  294. data/spec/zen/package/menus/helper/menu_frontend.rb +7 -7
  295. data/spec/zen/package/menus/model/menu.rb +121 -0
  296. data/spec/zen/package/menus/model/menu_item.rb +34 -0
  297. data/spec/zen/package/sections/controller/section_entries.rb +104 -39
  298. data/spec/zen/package/sections/controller/sections.rb +60 -27
  299. data/spec/zen/package/sections/helper/section.rb +5 -5
  300. data/spec/zen/package/sections/helper/section_frontend.rb +9 -9
  301. data/spec/zen/package/sections/widget.rb +44 -0
  302. data/spec/zen/package/settings/controller/settings.rb +18 -16
  303. data/spec/zen/package/settings/settings.rb +12 -12
  304. data/spec/zen/package/users/controller/user_groups.rb +61 -29
  305. data/spec/zen/package/users/controller/users.rb +118 -39
  306. data/spec/zen/package/users/helper/access.rb +3 -3
  307. data/spec/zen/package/users/helper/acl.rb +4 -4
  308. data/spec/zen/package/users/helper/users.rb +5 -5
  309. data/spec/zen/security.rb +25 -0
  310. data/spec/zen/theme.rb +20 -18
  311. data/spec/zen/validation.rb +5 -5
  312. data/spec/zen/vendor/sequel_sluggable.rb +12 -0
  313. data/zen.gemspec +27 -4
  314. metadata +182 -124
  315. data/AUTHORS +0 -4
  316. data/guide/_static/categories/categories.png +0 -0
  317. data/guide/_static/categories/category_groups.png +0 -0
  318. data/guide/_static/categories/new_category.png +0 -0
  319. data/guide/_static/categories/new_category_group.png +0 -0
  320. data/guide/_static/comments/comments.png +0 -0
  321. data/guide/_static/comments/edit_comment.png +0 -0
  322. data/guide/_static/custom_fields/custom_field_groups.png +0 -0
  323. data/guide/_static/custom_fields/custom_field_types.png +0 -0
  324. data/guide/_static/custom_fields/custom_fields.png +0 -0
  325. data/guide/_static/custom_fields/edit_custom_field_general.png +0 -0
  326. data/guide/_static/custom_fields/edit_custom_field_group.png +0 -0
  327. data/guide/_static/custom_fields/edit_custom_field_settings.png +0 -0
  328. data/guide/_static/custom_fields/edit_custom_field_type.png +0 -0
  329. data/guide/_static/menus/edit_menu.png +0 -0
  330. data/guide/_static/menus/edit_menu_item.png +0 -0
  331. data/guide/_static/menus/menu_items.png +0 -0
  332. data/guide/_static/menus/menus.png +0 -0
  333. data/guide/_static/sections/edit_entry.png +0 -0
  334. data/guide/_static/sections/edit_entry_categories.png +0 -0
  335. data/guide/_static/sections/edit_entry_general.png +0 -0
  336. data/guide/_static/sections/edit_entry_meta.png +0 -0
  337. data/guide/_static/sections/edit_section_comments.png +0 -0
  338. data/guide/_static/sections/edit_section_general.png +0 -0
  339. data/guide/_static/sections/edit_section_groups.png +0 -0
  340. data/guide/_static/sections/entries.png +0 -0
  341. data/guide/_static/sections/sections.png +0 -0
  342. data/guide/_static/settings/overview_general.png +0 -0
  343. data/guide/_static/settings/overview_security.png +0 -0
  344. data/guide/_static/settings/overview_user.png +0 -0
  345. data/guide/_static/users/edit_user.png +0 -0
  346. data/guide/_static/users/edit_user_group.png +0 -0
  347. data/guide/_static/users/edit_user_group_permissions.png +0 -0
  348. data/guide/_static/users/edit_user_permissions.png +0 -0
  349. data/guide/_static/users/overview.png +0 -0
  350. data/guide/_static/users/user_groups_overview.png +0 -0
  351. data/lib/zen/controller/translations.rb +0 -49
  352. data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +0 -113
  353. data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +0 -97
  354. data/lib/zen/public/admin/css/zen/buttons.css +0 -46
  355. data/lib/zen/public/admin/css/zen/editor.css +0 -88
  356. data/lib/zen/public/admin/css/zen/general.css +0 -109
  357. data/lib/zen/public/admin/css/zen/grid.css +0 -100
  358. data/lib/zen/public/admin/css/zen/layout.css +0 -184
  359. data/lib/zen/public/admin/css/zen/messages.css +0 -54
  360. data/lib/zen/public/admin/css/zen/tables.css +0 -97
  361. data/lib/zen/public/admin/css/zen/tabs.css +0 -47
  362. data/lib/zen/public/admin/css/zen/window.css +0 -73
  363. data/lib/zen/public/admin/images/zen/icons/accept.png +0 -0
  364. data/lib/zen/public/admin/images/zen/icons/add.png +0 -0
  365. data/lib/zen/public/admin/images/zen/icons/back.png +0 -0
  366. data/lib/zen/public/admin/images/zen/icons/delete.png +0 -0
  367. data/lib/zen/public/admin/images/zen/icons/help.png +0 -0
  368. data/lib/zen/public/admin/images/zen/icons/info.png +0 -0
  369. data/lib/zen/public/admin/images/zen/icons/logout.png +0 -0
  370. data/lib/zen/public/admin/images/zen/icons/pdf.png +0 -0
  371. data/lib/zen/public/admin/images/zen/icons/view.png +0 -0
  372. data/lib/zen/public/admin/js/zen/lib/tabs.js +0 -207
  373. data/lib/zen/view/main.xhtml +0 -19
@@ -0,0 +1,147 @@
1
+ require File.expand_path('../../../../../helper', __FILE__)
2
+ require File.join(Zen::FIXTURES, 'package/dashboard/widget')
3
+
4
+ ##
5
+ # The specifications in this block run using Selenium so make sure you have
6
+ # Selenium and Firefox installed.
7
+ #
8
+ # Various specifications in this file contain calls to sleep(N). These calls are
9
+ # used because Mootools' Fx.Slide class has a certain lag time that prevents
10
+ # people from rapidly clicking the "Options" button.
11
+ #
12
+ describe 'Dashboard::Controller::Dashboard' do
13
+ dashboard_url = Dashboard::Controller::Dashboard.r(:index).to_s
14
+
15
+ behaves_like :capybara
16
+ enable_javascript
17
+
18
+ before do
19
+ Dashboard::Model::Widget.filter(~{:name => 'welcome'}).destroy
20
+
21
+ unless current_path =~ /#{dashboard_url}/
22
+ Users::Model::User[:email => 'spec@domain.tld'] \
23
+ .update(:widget_columns => 1)
24
+
25
+ visit(dashboard_url)
26
+ end
27
+ end
28
+
29
+ it 'Users should see the Welcome widget by default' do
30
+ page.has_selector?('#widget_welcome').should == true
31
+ page.has_content?(lang('dashboard.widgets.titles.welcome')).should == true
32
+
33
+ page.has_content?(
34
+ lang('dashboard.widgets.welcome.content.paragraph_1').split("\n")[0] \
35
+ % Zen::VERSION
36
+ ).should == true
37
+ end
38
+
39
+ it 'Users should be able to toggle the widget options menu' do
40
+ script = "$('widget_options').getStyle('margin-top').toInt();"
41
+
42
+ page.evaluate_script(script).to_i.should == 0
43
+
44
+ # Show and hide the options container.
45
+ click_button('toggle_options')
46
+ sleep(1)
47
+
48
+ click_button('toggle_options')
49
+ sleep(1)
50
+
51
+ page.evaluate_script(script).to_i.should < 0
52
+ end
53
+
54
+ it 'Users should be able to change the amount of widget columns' do
55
+ script = "$('widget_welcome').getSize().x;"
56
+
57
+ click_button('toggle_options')
58
+ choose('widget_columns_1')
59
+
60
+ old_width = page.evaluate_script(script).to_i
61
+
62
+ # Switch to a 2 column based layout.
63
+ choose('widget_columns_2')
64
+
65
+ page.evaluate_script(script).to_i.should <= old_width / 2
66
+ Users::Model::User[:email => 'spec@domain.tld'].widget_columns.should == 2
67
+
68
+ # Switch to a 3 column based layout.
69
+ choose('widget_columns_3')
70
+
71
+ page.evaluate_script(script).to_i.should <= old_width / 3
72
+ Users::Model::User[:email => 'spec@domain.tld'].widget_columns.should == 3
73
+
74
+ # 4 column layout
75
+ choose('widget_columns_4')
76
+
77
+ page.evaluate_script(script).to_i.should <= old_width / 4
78
+ Users::Model::User[:email => 'spec@domain.tld'].widget_columns.should == 4
79
+ end
80
+
81
+ it 'Users should be able to toggle the active widgets' do
82
+ # When $() returns an existing element the type (as returned by typeOf()) is
83
+ # "element". If the element doesn't exist the type is "null".
84
+ script = "typeOf($('widget_welcome'));"
85
+ user = Users::Model::User[:email => 'spec@domain.tld']
86
+
87
+ page.evaluate_script(script).should == 'element'
88
+
89
+ Dashboard::Model::Widget[:name => 'welcome', :user_id => user.id].nil? \
90
+ .should == false
91
+
92
+ uncheck('toggle_widget_welcome')
93
+
94
+ page.evaluate_script(script).should == 'null'
95
+
96
+ Dashboard::Model::Widget[:name => 'welcome', :user_id => user.id].nil? \
97
+ .should == true
98
+
99
+ check('toggle_widget_welcome')
100
+
101
+ page.evaluate_script(script).should == 'element'
102
+
103
+ Dashboard::Model::Widget[:name => 'welcome', :user_id => user.id].nil? \
104
+ .should == false
105
+ end
106
+
107
+ it 'Users should be able to re-arrange widgets' do
108
+ script = "$$('.widget:first-child')[0].get('id');"
109
+ user = Users::Model::User[:email => 'spec@domain.tld']
110
+
111
+ click_button('toggle_options')
112
+ check('toggle_widget_spec')
113
+
114
+ # Check if the standard order and amount of widgets is correct.
115
+ page.evaluate_script(script).should == 'widget_welcome'
116
+
117
+ page.evaluate_script("$$('.widget').length;").to_i.should == 2
118
+
119
+ # Drag the second widget to the place of the first one.
120
+ page.find('#widget_spec header').drag_to(page.find('#widget_welcome header'))
121
+
122
+ sleep(1)
123
+
124
+ page.evaluate_script(script).should == 'widget_spec'
125
+
126
+ Dashboard::Model::Widget[:name => 'spec', :user_id => user.id] \
127
+ .order.should == 0
128
+
129
+ Dashboard::Model::Widget[:name => 'welcome', :user_id => user.id] \
130
+ .order.should == 1
131
+
132
+ # Put the widget order back in place.
133
+ page.find('#widget_welcome header').drag_to(page.find('#widget_spec header'))
134
+
135
+ sleep(1)
136
+
137
+ Dashboard::Model::Widget[:name => 'spec', :user_id => user.id] \
138
+ .order.should == 1
139
+
140
+ Dashboard::Model::Widget[:name => 'welcome', :user_id => user.id] \
141
+ .order.should == 0
142
+ end
143
+
144
+ Dashboard::Model::Widget.filter(:name => 'spec').destroy
145
+
146
+ disable_javascript
147
+ end
@@ -0,0 +1,56 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+ require File.join(Zen::FIXTURES, 'package/dashboard/widget')
3
+ require File.join(Zen::FIXTURES, 'package/dashboard/controller/widget')
4
+
5
+ describe 'Dashboard::Widget' do
6
+ behaves_like :capybara
7
+
8
+ widget = Dashboard::Model::Widget.create(
9
+ :name => 'spec',
10
+ :user_id => Users::Model::User[:email => 'spec@domain.tld'].id,
11
+ :order => 0
12
+ )
13
+
14
+ it 'Retrieve an existing widget' do
15
+ Dashboard::Widget[:spec].title.should == 'Spec'
16
+ Dashboard::Widget['spec'].title.should == 'Spec'
17
+ end
18
+
19
+ it 'Retrieve a non existing widget' do
20
+ should.raise?(Dashboard::WidgetError) do
21
+ Dashboard::Widget[:does_not_exist]
22
+ end
23
+
24
+ should.raise?(Dashboard::WidgetError) do
25
+ Dashboard::Widget['does_not_exist']
26
+ end
27
+ end
28
+
29
+ it 'Build the HTML for all widgets' do
30
+ visit('/admin/spec-widget')
31
+
32
+ page.body.should =~ /<section class="widget" id="widget_spec">/
33
+ page.body.should =~ /<div class="body">/
34
+ end
35
+
36
+ it 'Build the HTML for the column radio buttons' do
37
+ visit('/admin/spec-widget/columns')
38
+
39
+ str = '<input name="widget_columns" type="radio" value="%s" ' \
40
+ 'id="widget_columns_%s">'
41
+
42
+ page.has_selector?('input[id="widget_columns_1"]').should == true
43
+ page.has_selector?('input[id="widget_columns_2"]').should == true
44
+ page.has_selector?('input[id="widget_columns_3"]').should == true
45
+ page.has_selector?('input[id="widget_columns_4"]').should == true
46
+ end
47
+
48
+ it 'Build the HTML for the active widget checkboxes' do
49
+ visit('/admin/spec-widget/checkbox')
50
+
51
+ page.has_selector?('input[id="toggle_widget_spec"]').should == true
52
+ page.has_selector?('input[id="toggle_widget_welcome"]').should == true
53
+ end
54
+
55
+ widget.destroy
56
+ end
@@ -1,12 +1,12 @@
1
1
  require File.expand_path('../../../../../helper', __FILE__)
2
2
  require File.join(Zen::FIXTURES, 'theme', 'theme')
3
3
 
4
- describe('Extensions::Controller::Extensions') do
4
+ describe 'Extensions::Controller::Extensions' do
5
5
  behaves_like :capybara
6
6
 
7
7
  index_url = Extensions::Controller::Extensions.r(:index).to_s
8
8
 
9
- it('Show a list of all the installed packages') do
9
+ it 'Show a list of all the installed packages' do
10
10
  visit(index_url)
11
11
 
12
12
  Zen::Package::REGISTERED.each do |name, package|
@@ -15,7 +15,7 @@ describe('Extensions::Controller::Extensions') do
15
15
  end
16
16
  end
17
17
 
18
- it('Show a list of all the installed themes') do
18
+ it 'Show a list of all the installed themes' do
19
19
  visit(index_url)
20
20
 
21
21
  get_setting(:theme).value = 'spec_theme'
@@ -28,7 +28,7 @@ describe('Extensions::Controller::Extensions') do
28
28
  get_setting(:theme).value = ''
29
29
  end
30
30
 
31
- it('Show a list of all the installed languages') do
31
+ it 'Show a list of all the installed languages' do
32
32
  visit(index_url)
33
33
 
34
34
  Zen::Language::REGISTERED.each do |name, lang|
@@ -1,6 +1,6 @@
1
1
  require File.expand_path('../../../../../helper', __FILE__)
2
2
 
3
- describe("Menus::Controller::MenuItems") do
3
+ describe "Menus::Controller::MenuItems" do
4
4
  behaves_like :capybara
5
5
 
6
6
  menu = Menus::Model::Menu.create(:name => 'Spec menu')
@@ -10,7 +10,7 @@ describe("Menus::Controller::MenuItems") do
10
10
  save_button = lang('menu_items.buttons.save')
11
11
  delete_button = lang('menu_items.buttons.delete')
12
12
 
13
- it('Find no existing menu items') do
13
+ it 'Find no existing menu items' do
14
14
  message = lang('menu_items.messages.no_items')
15
15
 
16
16
  visit(index_url)
@@ -19,22 +19,25 @@ describe("Menus::Controller::MenuItems") do
19
19
  page.has_selector?('table tbody tr').should == false
20
20
  end
21
21
 
22
- it('Submit a form without a CSRF token') do
23
- response = page.driver.post(
24
- Menus::Controller::MenuItems.r(:save).to_s
25
- )
22
+ it 'Try to create a new menu item with a missing CSRF token' do
23
+ visit(index_url)
24
+ click_link(new_button)
25
+
26
+ within '#menu_item_form' do
27
+ find('input[name="csrf_token"]').set('')
28
+ click_on(save_button)
29
+ end
26
30
 
27
- response.body.include?(lang('zen_general.errors.csrf')).should == true
28
- response.status.should == 403
31
+ page.has_content?(lang('zen_general.errors.csrf')).should == true
29
32
  end
30
33
 
31
- it("Create a new menu item") do
34
+ it "Create a new menu item" do
32
35
  visit(index_url)
33
36
  click_link(new_button)
34
37
 
35
- within('#menu_item_form') do
36
- fill_in('name' , :with => 'Spec menu item')
37
- fill_in('url' , :with => '/spec')
38
+ within '#menu_item_form' do
39
+ fill_in('name' , :with => 'Spec menu item')
40
+ fill_in('url' , :with => '/spec')
38
41
  fill_in('html_class', :with => 'spec_class')
39
42
  click_on(save_button)
40
43
  end
@@ -42,46 +45,52 @@ describe("Menus::Controller::MenuItems") do
42
45
  current_path.should =~ /#{edit_url}\/[0-9]+/
43
46
  end
44
47
 
45
- it('Search for a menu item') do
46
- search_button = lang('zen_general.buttons.search')
47
- error = lang('zen_general.errors.invalid_search')
48
-
48
+ it "Edit an existing menu item" do
49
49
  visit(index_url)
50
+ click_link('Spec menu item')
50
51
 
51
- within('#search_form') do
52
- fill_in('query', :with => 'Spec menu item')
53
- click_on(search_button)
52
+ within '#menu_item_form' do
53
+ fill_in('name', :with => 'Spec menu item modified')
54
+ click_on(save_button)
54
55
  end
55
56
 
56
- page.has_content?(error).should == false
57
- page.has_content?('Spec menu item').should == true
57
+ page.find('input[name="name"]').value.should == 'Spec menu item modified'
58
+ end
59
+
60
+ enable_javascript
58
61
 
59
- within('#search_form') do
60
- fill_in('query', :with => 'does not exist')
61
- click_on(search_button)
62
+ it 'Automatically save a menu item' do
63
+ visit(index_url)
64
+ click_link('Spec menu item modified')
65
+
66
+ within '#menu_item_form' do
67
+ fill_in('name', :with => 'Spec menu item autosave')
62
68
  end
63
69
 
64
- page.has_content?(error).should == false
65
- page.has_content?('Spec menu item').should == false
66
- end
70
+ autosave_form('menu_item_form')
67
71
 
68
- it("Edit an existing menu item") do
69
72
  visit(index_url)
70
- click_link('Spec menu item')
71
73
 
72
- within('#menu_item_form') do
74
+ page.has_content?('Spec menu item autosave').should == true
75
+
76
+ click_link('Spec menu item autosave')
77
+
78
+ within '#menu_item_form' do
73
79
  fill_in('name', :with => 'Spec menu item modified')
74
80
  click_on(save_button)
75
81
  end
76
82
 
83
+ page.has_selector?('span.error').should == false
77
84
  page.find('input[name="name"]').value.should == 'Spec menu item modified'
78
85
  end
79
86
 
80
- it('Edit an existing menu item with invalid data') do
87
+ disable_javascript
88
+
89
+ it 'Edit an existing menu item with invalid data' do
81
90
  visit(index_url)
82
91
  click_link('Spec menu item')
83
92
 
84
- within('#menu_item_form') do
93
+ within '#menu_item_form' do
85
94
  fill_in('name', :with => 'xxx')
86
95
  fill_in('url' , :with => '')
87
96
  click_on(save_button)
@@ -91,14 +100,14 @@ describe("Menus::Controller::MenuItems") do
91
100
  page.has_selector?('span.error').should == true
92
101
  end
93
102
 
94
- it('Fail to delete a set of items without an ID') do
103
+ it 'Fail to delete a set of items without an ID' do
95
104
  visit(index_url)
96
105
  click_on(delete_button)
97
106
 
98
107
  page.has_selector?('input[name="menu_item_ids[]"]').should == true
99
108
  end
100
109
 
101
- it("Delete an existing menu item") do
110
+ it "Delete an existing menu item" do
102
111
  message = lang('menu_items.messages.no_items')
103
112
 
104
113
  visit(index_url)
@@ -109,7 +118,7 @@ describe("Menus::Controller::MenuItems") do
109
118
  page.has_content?(message).should == true
110
119
  end
111
120
 
112
- it('Call the event new_menu_item (before and after)') do
121
+ it 'Call the event new_menu_item (before and after)' do
113
122
  event_name = nil
114
123
 
115
124
  Zen::Event.listen(:before_new_menu_item) do |menu|
@@ -123,7 +132,7 @@ describe("Menus::Controller::MenuItems") do
123
132
  visit(index_url)
124
133
  click_on(new_button)
125
134
 
126
- within('#menu_item_form') do
135
+ within '#menu_item_form' do
127
136
  fill_in('name', :with => 'Menu item')
128
137
  fill_in('url' , :with => '/')
129
138
  click_on(save_button)
@@ -135,7 +144,7 @@ describe("Menus::Controller::MenuItems") do
135
144
  Zen::Event.delete(:before_new_menu_item, :after_new_menu_item)
136
145
  end
137
146
 
138
- it('Call the event edit_menu_item (before and after)') do
147
+ it 'Call the event edit_menu_item (before and after)' do
139
148
  event_name = nil
140
149
 
141
150
  Zen::Event.listen(:before_edit_menu_item) do |menu|
@@ -149,7 +158,7 @@ describe("Menus::Controller::MenuItems") do
149
158
  visit(index_url)
150
159
  click_on('Menu item with event')
151
160
 
152
- within('#menu_item_form') do
161
+ within '#menu_item_form' do
153
162
  click_on(save_button)
154
163
  end
155
164
 
@@ -160,7 +169,7 @@ describe("Menus::Controller::MenuItems") do
160
169
  Zen::Event.delete(:before_edit_menu_item, :after_edit_menu_item)
161
170
  end
162
171
 
163
- it('Call the event delete_menu_item (before and after)') do
172
+ it 'Call the event delete_menu_item (before and after)' do
164
173
  event_name = nil
165
174
  event_name2 = nil
166
175
  message = lang('menu_items.messages.no_items')
@@ -2,7 +2,7 @@ require File.expand_path('../../../../../helper', __FILE__)
2
2
 
3
3
  Zen::Language.load('menus')
4
4
 
5
- describe("Menus::Controller::Menus") do
5
+ describe "Menus::Controller::Menus" do
6
6
  behaves_like :capybara
7
7
 
8
8
  index_url = Menus::Controller::Menus.r(:index).to_s
@@ -12,7 +12,7 @@ describe("Menus::Controller::Menus") do
12
12
  save_button = lang('menus.buttons.save')
13
13
  delete_button = lang('menus.buttons.delete')
14
14
 
15
- it('Find no existing menus') do
15
+ it 'Find no existing menus' do
16
16
  message = lang('menus.messages.no_menus')
17
17
 
18
18
  visit(index_url)
@@ -21,22 +21,25 @@ describe("Menus::Controller::Menus") do
21
21
  page.has_selector?('table tbody tr').should == false
22
22
  end
23
23
 
24
- it('Submit a form without a CSRF token') do
25
- response = page.driver.post(
26
- Menus::Controller::Menus.r(:save).to_s
27
- )
24
+ it 'Try to create a new menu with a missing CSRF token' do
25
+ visit(index_url)
26
+ click_link(new_button)
27
+
28
+ within '#menu_form' do
29
+ find('input[name="csrf_token"]').set('')
30
+ click_on(save_button)
31
+ end
28
32
 
29
- response.body.include?(lang('zen_general.errors.csrf')).should == true
30
- response.status.should == 403
33
+ page.has_content?(lang('zen_general.errors.csrf')).should == true
31
34
  end
32
35
 
33
- it("Create a new menu") do
36
+ it "Create a new menu" do
34
37
  visit(index_url)
35
38
  click_link(new_button)
36
39
 
37
40
  current_path.should == new_url
38
41
 
39
- within('#menu_form') do
42
+ within '#menu_form' do
40
43
  fill_in('name' , :with => 'Spec menu')
41
44
  fill_in('html_class', :with => 'spec_class')
42
45
  fill_in('html_id' , :with => 'spec_id')
@@ -49,13 +52,13 @@ describe("Menus::Controller::Menus") do
49
52
  page.find('input[name="html_id"]').value.should == 'spec_id'
50
53
  end
51
54
 
52
- it('Search for a menu') do
55
+ it 'Search for a menu' do
53
56
  search_button = lang('zen_general.buttons.search')
54
57
  error = lang('zen_general.errors.invalid_search')
55
58
 
56
59
  visit(index_url)
57
60
 
58
- within('#search_form') do
61
+ within '#search_form' do
59
62
  fill_in('query', :with => 'Spec menu')
60
63
  click_on(search_button)
61
64
  end
@@ -63,7 +66,7 @@ describe("Menus::Controller::Menus") do
63
66
  page.has_content?(error).should == false
64
67
  page.has_content?('Spec menu').should == true
65
68
 
66
- within('#search_form') do
69
+ within '#search_form' do
67
70
  fill_in('query', :with => 'does not exist')
68
71
  click_on(search_button)
69
72
  end
@@ -72,13 +75,13 @@ describe("Menus::Controller::Menus") do
72
75
  page.has_content?('Spec menu').should == false
73
76
  end
74
77
 
75
- it("Edit an existing menu") do
78
+ it "Edit an existing menu" do
76
79
  visit(index_url)
77
80
  click_link('Spec menu')
78
81
 
79
82
  current_path.should =~ /#{edit_url}\/[0-9]+/
80
83
 
81
- within('#menu_form') do
84
+ within '#menu_form' do
82
85
  fill_in('name', :with => 'Spec menu modified')
83
86
  click_on(save_button)
84
87
  end
@@ -86,13 +89,41 @@ describe("Menus::Controller::Menus") do
86
89
  page.find('input[name="name"]').value.should == 'Spec menu modified'
87
90
  end
88
91
 
89
- it("Edit an existing menu with invalid data") do
92
+ enable_javascript
93
+
94
+ it 'Automatically save a menu' do
95
+ visit(index_url)
96
+ click_link('Spec menu modified')
97
+
98
+ within '#menu_form' do
99
+ fill_in('name', :with => 'Spec menu autosave')
100
+ end
101
+
102
+ autosave_form('menu_form')
103
+
104
+ visit(index_url)
105
+
106
+ page.has_content?('Spec menu autosave').should == true
107
+ click_link('Spec menu autosave')
108
+
109
+ within '#menu_form' do
110
+ fill_in('name', :with => 'Spec menu modified')
111
+ click_on(save_button)
112
+ end
113
+
114
+ page.has_selector?('span.error').should == false
115
+ page.find('input[name="name"]').value.should == 'Spec menu modified'
116
+ end
117
+
118
+ disable_javascript
119
+
120
+ it "Edit an existing menu with invalid data" do
90
121
  visit(index_url)
91
122
  click_link('Spec menu')
92
123
 
93
124
  current_path.should =~ /#{edit_url}\/[0-9]+/
94
125
 
95
- within('#menu_form') do
126
+ within '#menu_form' do
96
127
  fill_in('name', :with => '')
97
128
  click_on(save_button)
98
129
  end
@@ -101,14 +132,14 @@ describe("Menus::Controller::Menus") do
101
132
  page.has_selector?('span.error').should == true
102
133
  end
103
134
 
104
- it('Fail to delete a set of menus without IDs') do
135
+ it 'Fail to delete a set of menus without IDs' do
105
136
  visit(index_url)
106
137
  click_on(delete_button)
107
138
 
108
139
  page.has_selector?('input[name="menu_ids[]"]').should == true
109
140
  end
110
141
 
111
- it("Delete an existing menu") do
142
+ it "Delete an existing menu" do
112
143
  message = lang('menus.messages.no_menus')
113
144
 
114
145
  visit(index_url)
@@ -119,7 +150,7 @@ describe("Menus::Controller::Menus") do
119
150
  page.has_selector?('table tbody tr').should == false
120
151
  end
121
152
 
122
- it('Call the event new_menu (before and after)') do
153
+ it 'Call the event new_menu (before and after)' do
123
154
  event_name = nil
124
155
 
125
156
  Zen::Event.listen(:before_new_menu) do |menu|
@@ -133,7 +164,7 @@ describe("Menus::Controller::Menus") do
133
164
  visit(index_url)
134
165
  click_on(new_button)
135
166
 
136
- within('#menu_form') do
167
+ within '#menu_form' do
137
168
  fill_in('name', :with => 'Menu')
138
169
  click_on(save_button)
139
170
  end
@@ -145,7 +176,7 @@ describe("Menus::Controller::Menus") do
145
176
  Zen::Event.delete(:before_new_menu, :after_new_menu)
146
177
  end
147
178
 
148
- it('Call the event edit_menu (before and after)') do
179
+ it 'Call the event edit_menu (before and after)' do
149
180
  event_name = nil
150
181
 
151
182
  Zen::Event.listen(:before_edit_menu) do |menu|
@@ -159,7 +190,7 @@ describe("Menus::Controller::Menus") do
159
190
  visit(index_url)
160
191
  click_on('Menu with event')
161
192
 
162
- within('#menu_form') do
193
+ within '#menu_form' do
163
194
  click_on(save_button)
164
195
  end
165
196
 
@@ -170,7 +201,7 @@ describe("Menus::Controller::Menus") do
170
201
  Zen::Event.delete(:before_edit_menu, :after_edit_menu)
171
202
  end
172
203
 
173
- it('Call the event delete_menu (before and after)') do
204
+ it 'Call the event delete_menu (before and after)' do
174
205
  event_name = nil
175
206
  event_name2 = nil
176
207
  message = lang('menus.messages.no_menus')