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
@@ -1,6 +1,6 @@
1
1
  require File.expand_path('../../../../../helper', __FILE__)
2
2
 
3
- describe("Sections::Controller::Sections") do
3
+ describe "Sections::Controller::Sections" do
4
4
  behaves_like :capybara
5
5
 
6
6
  index_url = Sections::Controller::Sections.r(:index).to_s
@@ -10,16 +10,7 @@ describe("Sections::Controller::Sections") do
10
10
  save_button = lang('sections.buttons.save')
11
11
  delete_button = lang('sections.buttons.delete')
12
12
 
13
- it('Submit a form without a CSRF token') do
14
- response = page.driver.post(
15
- Sections::Controller::Sections.r(:save).to_s
16
- )
17
-
18
- response.body.include?(lang('zen_general.errors.csrf')).should == true
19
- response.status.should == 403
20
- end
21
-
22
- it('Find no existing sections') do
13
+ it 'Find no existing sections' do
23
14
  message = lang('sections.messages.no_sections')
24
15
 
25
16
  visit(index_url)
@@ -29,9 +20,22 @@ describe("Sections::Controller::Sections") do
29
20
  page.has_content?(message).should == true
30
21
  end
31
22
 
32
- it("Create a new section") do
23
+ it 'Try to create a new section with a missing CSRF token' do
24
+ visit(index_url)
25
+ click_link(new_button)
26
+
27
+ within '#section_form' do
28
+ find('input[name="csrf_token"]').set('')
29
+ click_on(save_button)
30
+ end
31
+
32
+ page.has_content?(lang('zen_general.errors.csrf')).should == true
33
+ end
34
+
35
+ it "Create a new section" do
33
36
  select_plain = lang('zen_general.markup.plain')
34
37
 
38
+ visit(index_url)
35
39
  click_link(new_button)
36
40
 
37
41
  current_path.should == new_url
@@ -40,7 +44,7 @@ describe("Sections::Controller::Sections") do
40
44
  page.has_selector?('.tabs ul').should == true
41
45
 
42
46
  # Fill in the form
43
- within('#section_form') do
47
+ within '#section_form' do
44
48
  fill_in('name' , :with => 'Spec section')
45
49
  fill_in('description', :with => 'Spec section description.')
46
50
 
@@ -57,13 +61,13 @@ describe("Sections::Controller::Sections") do
57
61
  page.find('input[name="name"]').value.should == 'Spec section'
58
62
  end
59
63
 
60
- it('Search for a section') do
64
+ it 'Search for a section' do
61
65
  search_button = lang('zen_general.buttons.search')
62
66
  error = lang('zen_general.errors.invalid_search')
63
67
 
64
68
  visit(index_url)
65
69
 
66
- within('#search_form') do
70
+ within '#search_form' do
67
71
  fill_in('query', :with => 'Spec section')
68
72
  click_on(search_button)
69
73
  end
@@ -71,7 +75,7 @@ describe("Sections::Controller::Sections") do
71
75
  page.has_content?(error).should == false
72
76
  page.has_content?('Spec section').should == true
73
77
 
74
- within('#search_form') do
78
+ within '#search_form' do
75
79
  fill_in('query', :with => 'does not exist')
76
80
  click_on(search_button)
77
81
  end
@@ -80,13 +84,13 @@ describe("Sections::Controller::Sections") do
80
84
  page.has_content?('Spec section').should == false
81
85
  end
82
86
 
83
- it("Edit an existing section") do
87
+ it "Edit an existing section" do
84
88
  visit(index_url)
85
89
  click_link('Spec section')
86
90
 
87
91
  current_path.should =~ /#{edit_url}\/[0-9]+/
88
92
 
89
- within('#section_form') do
93
+ within '#section_form' do
90
94
  fill_in('name', :with => 'Spec section modified')
91
95
  click_on(save_button)
92
96
  end
@@ -95,13 +99,42 @@ describe("Sections::Controller::Sections") do
95
99
  page.find('input[name="slug"]').value.should == 'spec-section'
96
100
  end
97
101
 
98
- it("Edit an existing section with invalid data") do
102
+ enable_javascript
103
+
104
+ it 'Automatically save a section' do
105
+ visit(index_url)
106
+ click_link('Spec section modified')
107
+
108
+ within '#section_form' do
109
+ fill_in('name', :with => 'Spec section autosave')
110
+ end
111
+
112
+ autosave_form('section_form')
113
+
114
+ visit(index_url)
115
+
116
+ page.has_content?('Spec section autosave').should == true
117
+
118
+ click_link('Spec section autosave')
119
+
120
+ within '#section_form' do
121
+ fill_in('name', :with => 'Spec section modified')
122
+ click_on(save_button)
123
+ end
124
+
125
+ page.has_selector?('span.error').should == false
126
+ page.find('input[name="name"]').value.should == 'Spec section modified'
127
+ end
128
+
129
+ disable_javascript
130
+
131
+ it "Edit an existing section with invalid data" do
99
132
  visit(index_url)
100
133
  click_link('Spec section')
101
134
 
102
135
  current_path.should =~ /#{edit_url}\/[0-9]+/
103
136
 
104
- within('#section_form') do
137
+ within '#section_form' do
105
138
  fill_in('name', :with => '')
106
139
  click_on(save_button)
107
140
  end
@@ -109,14 +142,14 @@ describe("Sections::Controller::Sections") do
109
142
  page.has_selector?('span.error').should == true
110
143
  end
111
144
 
112
- it('Delete a section without an ID specified') do
145
+ it 'Delete a section without an ID specified' do
113
146
  visit(index_url)
114
147
  click_on(delete_button)
115
148
 
116
149
  page.has_selector?('input[name="section_ids[]"]').should == true
117
150
  end
118
151
 
119
- it("Delete an existing section") do
152
+ it "Delete an existing section" do
120
153
  visit(index_url)
121
154
 
122
155
  check('section_ids[]')
@@ -125,7 +158,7 @@ describe("Sections::Controller::Sections") do
125
158
  page.has_selector?('table tbody tr').should == false
126
159
  end
127
160
 
128
- it('Call the event new_section (before and after)') do
161
+ it 'Call the event new_section (before and after)' do
129
162
  event_name = nil
130
163
 
131
164
  Zen::Event.listen(:before_new_section) do |section|
@@ -139,7 +172,7 @@ describe("Sections::Controller::Sections") do
139
172
  visit(index_url)
140
173
  click_on(new_button)
141
174
 
142
- within('#section_form') do
175
+ within '#section_form' do
143
176
  fill_in('name', :with => 'Section')
144
177
 
145
178
  choose('form_comment_allow_0')
@@ -161,7 +194,7 @@ describe("Sections::Controller::Sections") do
161
194
  Zen::Event.delete(:before_new_section, :after_new_section)
162
195
  end
163
196
 
164
- it('Call the event edit_section (before and after)') do
197
+ it 'Call the event edit_section (before and after)' do
165
198
  event_name = nil
166
199
 
167
200
  Zen::Event.listen(:before_edit_section) do |section|
@@ -175,7 +208,7 @@ describe("Sections::Controller::Sections") do
175
208
  visit(index_url)
176
209
  click_on('Section with event')
177
210
 
178
- within('#section_form') do
211
+ within '#section_form' do
179
212
  click_on(save_button)
180
213
  end
181
214
 
@@ -186,7 +219,7 @@ describe("Sections::Controller::Sections") do
186
219
  Zen::Event.delete(:before_edit_section, :after_edit_section)
187
220
  end
188
221
 
189
- it('Call the event delete_section (before and after)') do
222
+ it 'Call the event delete_section (before and after)' do
190
223
  event_name = nil
191
224
  event_name2 = nil
192
225
  message = lang('sections.messages.no_sections')
@@ -1,6 +1,6 @@
1
1
  require File.expand_path('../../../../../helper', __FILE__)
2
2
 
3
- describe('Ramaze::Helper::Section') do
3
+ describe 'Ramaze::Helper::Section' do
4
4
  behaves_like :capybara
5
5
 
6
6
  status_id = Sections::Model::SectionEntryStatus[:name => 'published'].id
@@ -20,7 +20,7 @@ describe('Ramaze::Helper::Section') do
20
20
  :section_id => section.id
21
21
  )
22
22
 
23
- it('Validate a valid section') do
23
+ it 'Validate a valid section' do
24
24
  url = Sections::Controller::Sections.r(:edit, section.id).to_s
25
25
 
26
26
  visit(url)
@@ -28,7 +28,7 @@ describe('Ramaze::Helper::Section') do
28
28
  current_path.should == url
29
29
  end
30
30
 
31
- it('Validate an invalid section') do
31
+ it 'Validate an invalid section' do
32
32
  url = Sections::Controller::Sections.r(:edit, section.id + 1).to_s
33
33
  index = Sections::Controller::Sections.r(:index).to_s
34
34
 
@@ -37,7 +37,7 @@ describe('Ramaze::Helper::Section') do
37
37
  current_path.should == index
38
38
  end
39
39
 
40
- it('Validate a valid section entry') do
40
+ it 'Validate a valid section entry' do
41
41
  url = Sections::Controller::SectionEntries.r(
42
42
  :edit, section.id, entry.id
43
43
  ).to_s
@@ -47,7 +47,7 @@ describe('Ramaze::Helper::Section') do
47
47
  current_path.should == url
48
48
  end
49
49
 
50
- it('Validate an invalid section entry') do
50
+ it 'Validate an invalid section entry' do
51
51
  index = Sections::Controller::SectionEntries.r(:index, section.id).to_s
52
52
  url = Sections::Controller::SectionEntries.r(
53
53
  :edit, section.id, entry.id + 1
@@ -7,7 +7,7 @@ require File.join(
7
7
  'section_frontend'
8
8
  )
9
9
 
10
- describe('Ramaze::Helper::SectionFrontend') do
10
+ describe 'Ramaze::Helper::SectionFrontend' do
11
11
  extend Ramaze::Helper::SectionFrontend
12
12
  behaves_like :capybara
13
13
 
@@ -78,7 +78,7 @@ describe('Ramaze::Helper::SectionFrontend') do
78
78
  :value => 'hello'
79
79
  )
80
80
 
81
- it('Retrieve all section entries') do
81
+ it 'Retrieve all section entries' do
82
82
  entries = get_entries(
83
83
  section.slug,
84
84
  :comments => true,
@@ -100,14 +100,14 @@ describe('Ramaze::Helper::SectionFrontend') do
100
100
  entries[0].fields[:'spec-field'].strip.should == '<p>hello</p>'
101
101
  end
102
102
 
103
- it('Retrieve all section entries but sort descending') do
103
+ it 'Retrieve all section entries but sort descending' do
104
104
  entries = get_entries(section.slug, :comments => true, :categories => true)
105
105
 
106
106
  entries[0].title.should == 'Spec 1'
107
107
  entries[1].title.should == 'Spec'
108
108
  end
109
109
 
110
- it('Retrieve all section entries for an ID') do
110
+ it 'Retrieve all section entries for an ID' do
111
111
  entries = get_entries(section.id, :order => :asc)
112
112
 
113
113
  entries.length.should == 2
@@ -115,21 +115,21 @@ describe('Ramaze::Helper::SectionFrontend') do
115
115
  entries[1].title.should == 'Spec 1'
116
116
  end
117
117
 
118
- it('Retrieve a single entry by it\'s slug') do
118
+ it 'Retrieve a single entry by it\'s slug' do
119
119
  entry = get_entry(entry_1.slug)
120
120
 
121
121
  entry.title.should == 'Spec'
122
122
  entry.id.should == entry_1.id
123
123
  end
124
124
 
125
- it('Retrieve a single entry by it\'s ID') do
125
+ it 'Retrieve a single entry by it\'s ID' do
126
126
  entry = get_entry(entry_1.id)
127
127
 
128
128
  entry.title.should == 'Spec'
129
129
  entry.id.should == entry_1.id
130
130
  end
131
131
 
132
- it('Paginate a set of entries') do
132
+ it 'Paginate a set of entries' do
133
133
  visit('/spec-section-frontend')
134
134
 
135
135
  page.has_selector?('p').should == true
@@ -145,13 +145,13 @@ describe('Ramaze::Helper::SectionFrontend') do
145
145
  page.find('p:first-child').text.should == entry_1.title
146
146
  end
147
147
 
148
- it('Retrieve a number of entries without their markup converted') do
148
+ it 'Retrieve a number of entries without their markup converted' do
149
149
  entries = get_entries(section.slug, :markup => false)
150
150
 
151
151
  entries[1].fields[:'spec-field'].should == 'hello'
152
152
  end
153
153
 
154
- it('Retrieve a single entry without processing the markup') do
154
+ it 'Retrieve a single entry without processing the markup' do
155
155
  entry = get_entry(entry_1.id, :markup => false)
156
156
 
157
157
  entry.fields[:'spec-field'].should == 'hello'
@@ -0,0 +1,44 @@
1
+ require File.expand_path('../../../../helper', __FILE__)
2
+
3
+ describe 'Recent Entries widget' do
4
+ behaves_like :capybara
5
+ enable_javascript
6
+
7
+ status_id = Sections::Model::SectionEntryStatus[:name => 'published'].id
8
+ user_id = Users::Model::User[:email => 'spec@domain.tld'].id
9
+ entries = []
10
+ section = Sections::Model::Section.create(
11
+ :name => 'Spec section',
12
+ :comment_allow => false,
13
+ :comment_require_account => false,
14
+ :comment_moderate => false,
15
+ :comment_format => 'markdown'
16
+ )
17
+
18
+ 10.times do |t|
19
+ entries << Sections::Model::SectionEntry.create(
20
+ :title => "Spec entry #{t}",
21
+ :user_id => user_id,
22
+ :section_entry_status_id => status_id,
23
+ :section_id => section.id
24
+ )
25
+ end
26
+
27
+ it 'Show a widget containing the 10 most recent entries' do
28
+ visit(Dashboard::Controller::Dashboard.r(:index).to_s)
29
+
30
+ check('toggle_widget_recent_entries')
31
+
32
+ page.has_content?(lang('section_entries.widgets.titles.recent_entries')) \
33
+ .should == true
34
+
35
+ page.has_selector?('#widget_recent_entries').should == true
36
+ page.has_content?('Spec entry 1').should == true
37
+ page.all('#widget_recent_entries tbody tr').count.should == 10
38
+ end
39
+
40
+ entries.reverse.each { |e| e.destroy }
41
+ section.destroy
42
+
43
+ disable_javascript
44
+ end
@@ -1,25 +1,27 @@
1
1
  require File.expand_path('../../../../../helper', __FILE__)
2
2
  require File.join(Zen::FIXTURES, 'package', 'settings', 'controller', 'settings')
3
3
 
4
- describe("Settings::Controller::Settings") do
4
+ describe "Settings::Controller::Settings" do
5
5
  behaves_like :capybara
6
6
 
7
7
  index_url = Settings::Controller::Settings.r(:index).to_s
8
8
  save_button = lang('settings.buttons.save')
9
9
 
10
- it('Submit a form without a CSRF token') do
11
- response = page.driver.post(
12
- Settings::Controller::Settings.r(:save).to_s
13
- )
10
+ it 'Try to change settings without a valid CSRF token' do
11
+ visit(index_url)
12
+
13
+ within '#setting_form' do
14
+ find('input[name="csrf_token"]').set('')
15
+ click_on(save_button)
16
+ end
14
17
 
15
- response.body.include?(lang('zen_general.errors.csrf')).should == true
16
- response.status.should == 403
18
+ page.has_content?(lang('zen_general.errors.csrf')).should == true
17
19
  end
18
20
 
19
- it('Update a set of settings') do
21
+ it 'Update a set of settings' do
20
22
  visit(index_url)
21
23
 
22
- within('#setting_form') do
24
+ within '#setting_form' do
23
25
  fill_in('website_name', :with => 'Zen spec')
24
26
 
25
27
  click_on(save_button)
@@ -27,7 +29,7 @@ describe("Settings::Controller::Settings") do
27
29
 
28
30
  page.find('input[name="website_name"]').value.should == 'Zen spec'
29
31
 
30
- within('#setting_form') do
32
+ within '#setting_form' do
31
33
  fill_in('website_name', :with => 'Zen')
32
34
  click_on(save_button)
33
35
  end
@@ -35,14 +37,14 @@ describe("Settings::Controller::Settings") do
35
37
  page.find('input[name="website_name"]').value.should == 'Zen'
36
38
  end
37
39
 
38
- it('Update a setting using checkboxes') do
40
+ it 'Update a setting using checkboxes' do
39
41
  visit(index_url)
40
42
 
41
43
  page.has_selector?('input[type="checkbox"]').should == true
42
44
  page.has_selector?('input[type="checkbox"][value="value"]').should == true
43
45
  page.has_selector?('input[type="checkbox"][value="value1"]').should == true
44
46
 
45
- within('#setting_form') do
47
+ within '#setting_form' do
46
48
  check('form_checkbox_0')
47
49
  check('form_checkbox_1')
48
50
  click_on(save_button)
@@ -58,14 +60,14 @@ describe("Settings::Controller::Settings") do
58
60
  value.include?('value1').should == true
59
61
  end
60
62
 
61
- it('Update a setting using a select box with multiple values') do
63
+ it 'Update a setting using a select box with multiple values' do
62
64
  visit(index_url)
63
65
 
64
66
  page.has_selector?('select[multiple="multiple"]').should == true
65
67
  page.has_selector?('option[value="value"]').should == true
66
68
  page.has_selector?('option[value="value1"]').should == true
67
69
 
68
- within('#setting_form') do
70
+ within '#setting_form' do
69
71
  select('Label', :from => 'form_select_multiple')
70
72
  select('Label 1', :from => 'form_select_multiple')
71
73
  click_on(save_button)
@@ -80,7 +82,7 @@ describe("Settings::Controller::Settings") do
80
82
  value.include?('value1').should == true
81
83
  end
82
84
 
83
- it('Call the event after_edit_setting') do
85
+ it 'Call the event after_edit_setting' do
84
86
  event_name = nil
85
87
 
86
88
  Zen::Event.listen(:after_edit_setting) do |setting|
@@ -89,7 +91,7 @@ describe("Settings::Controller::Settings") do
89
91
 
90
92
  visit(index_url)
91
93
 
92
- within('#setting_form') do
94
+ within '#setting_form' do
93
95
  click_on(save_button)
94
96
  end
95
97