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('CustomFields::Controller::CustomFieldTypes') do
3
+ describe 'CustomFields::Controller::CustomFieldTypes' do
4
4
  behaves_like :capybara
5
5
 
6
6
  index_url = CustomFields::Controller::CustomFieldTypes.r(:index).to_s
@@ -10,16 +10,7 @@ describe('CustomFields::Controller::CustomFieldTypes') do
10
10
  save_button = lang('custom_field_types.buttons.save')
11
11
  delete_button = lang('custom_field_types.buttons.delete')
12
12
 
13
- it('Submit a form without a CSRF token') do
14
- response = page.driver.post(
15
- CustomFields::Controller::CustomFieldTypes.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 a number of field types') do
13
+ it 'Find a number of field types' do
23
14
  message = lang('custom_field_types.messages.no_field_types')
24
15
  rows = CustomFields::Model::CustomFieldType.count
25
16
 
@@ -31,7 +22,18 @@ describe('CustomFields::Controller::CustomFieldTypes') do
31
22
  page.all('table tbody tr').count.should == rows
32
23
  end
33
24
 
34
- it('Create a new custom field type') do
25
+ it 'Try to create a new custom field type with a missing CSRF token' do
26
+ visit(new_url)
27
+
28
+ within '#custom_field_type_form' do
29
+ find('input[name="csrf_token"]').set('')
30
+ click_on(save_button)
31
+ end
32
+
33
+ page.has_content?(lang('zen_general.errors.csrf')).should == true
34
+ end
35
+
36
+ it 'Create a new custom field type' do
35
37
  method_id = CustomFields::Model::CustomFieldMethod[
36
38
  :name => 'input_text'
37
39
  ].id.to_s
@@ -42,7 +44,7 @@ describe('CustomFields::Controller::CustomFieldTypes') do
42
44
  current_path.should == new_url
43
45
 
44
46
  # Submit the form
45
- within('#custom_field_type_form') do
47
+ within '#custom_field_type_form' do
46
48
  # Fill in various text fields
47
49
  fill_in('form_name', :with => 'Spec type')
48
50
 
@@ -77,13 +79,13 @@ describe('CustomFields::Controller::CustomFieldTypes') do
77
79
  page.find_field('form_custom_field_method_id').value.should == method_id
78
80
  end
79
81
 
80
- it('Search for a custom field type') do
82
+ it 'Search for a custom field type' do
81
83
  search_button = lang('zen_general.buttons.search')
82
84
  error = lang('zen_general.errors.invalid_search')
83
85
 
84
86
  visit(index_url)
85
87
 
86
- within('#search_form') do
88
+ within '#search_form' do
87
89
  fill_in('query', :with => 'Spec type')
88
90
  click_on(search_button)
89
91
  end
@@ -91,7 +93,7 @@ describe('CustomFields::Controller::CustomFieldTypes') do
91
93
  page.has_content?(error).should == false
92
94
  page.has_content?('Spec type').should == true
93
95
 
94
- within('#search_form') do
96
+ within '#search_form' do
95
97
  fill_in('query', :with => 'does not exist')
96
98
  click_on(search_button)
97
99
  end
@@ -100,7 +102,7 @@ describe('CustomFields::Controller::CustomFieldTypes') do
100
102
  page.has_content?('Spec type').should == false
101
103
  end
102
104
 
103
- it('Edit a custom field type') do
105
+ it 'Edit a custom field type' do
104
106
  method_id = CustomFields::Model::CustomFieldMethod[
105
107
  :name => 'textarea'
106
108
  ].id.to_s
@@ -111,7 +113,7 @@ describe('CustomFields::Controller::CustomFieldTypes') do
111
113
  current_path.should =~ /#{edit_url}\/\d+/
112
114
 
113
115
  # Update the form
114
- within('#custom_field_type_form') do
116
+ within '#custom_field_type_form' do
115
117
  fill_in('form_name', :with => 'Spec type modified')
116
118
 
117
119
  fill_in(
@@ -137,13 +139,41 @@ describe('CustomFields::Controller::CustomFieldTypes') do
137
139
  page.find_field('custom_field_method_id').value.should == method_id
138
140
  end
139
141
 
140
- it('Edit a custom field type with invalid data') do
142
+ enable_javascript
143
+
144
+ it 'Automatically save a custom field type' do
145
+ visit(index_url)
146
+ click_link('Spec type modified')
147
+
148
+ within '#custom_field_type_form' do
149
+ fill_in('name', :with => 'Spec type autosave')
150
+ end
151
+
152
+ autosave_form('custom_field_type_form')
153
+
154
+ visit(index_url)
155
+
156
+ page.has_content?('Spec type autosave').should == true
157
+ click_link('Spec type autosave')
158
+
159
+ within '#custom_field_type_form' do
160
+ fill_in('name', :with => 'Spec type modified')
161
+ click_on(save_button)
162
+ end
163
+
164
+ page.has_selector?('span.error').should == false
165
+ page.find('input[name="name"]').value.should == 'Spec type modified'
166
+ end
167
+
168
+ disable_javascript
169
+
170
+ it 'Edit a custom field type with invalid data' do
141
171
  visit(index_url)
142
172
  click_link('Spec type')
143
173
 
144
174
  current_path.should =~ /#{edit_url}\/\d+/
145
175
 
146
- within('#custom_field_type_form') do
176
+ within '#custom_field_type_form' do
147
177
  fill_in('form_name', :with => '')
148
178
  click_on(save_button)
149
179
  end
@@ -151,7 +181,7 @@ describe('CustomFields::Controller::CustomFieldTypes') do
151
181
  page.has_selector?('span.error').should == true
152
182
  end
153
183
 
154
- it('Fail to delete a field type without an ID') do
184
+ it 'Fail to delete a field type without an ID' do
155
185
  type_id = CustomFields::Model::CustomFieldType[
156
186
  :name => 'Spec type modified'
157
187
  ].id
@@ -163,7 +193,7 @@ describe('CustomFields::Controller::CustomFieldTypes') do
163
193
  .should == true
164
194
  end
165
195
 
166
- it('Delete a custom field type') do
196
+ it 'Delete a custom field type' do
167
197
  rows = CustomFields::Model::CustomFieldType.count - 1
168
198
  type_id = CustomFields::Model::CustomFieldType[
169
199
  :name => 'Spec type modified'
@@ -180,7 +210,7 @@ describe('CustomFields::Controller::CustomFieldTypes') do
180
210
  page.all('table tbody tr').count.should == rows
181
211
  end
182
212
 
183
- it('Call the event new_custom_field_type (before and after)') do
213
+ it 'Call the event new_custom_field_type (before and after)' do
184
214
  event_name = nil
185
215
 
186
216
  Zen::Event.listen(:before_new_custom_field_type) do |type|
@@ -194,7 +224,7 @@ describe('CustomFields::Controller::CustomFieldTypes') do
194
224
  visit(index_url)
195
225
  click_on(new_button)
196
226
 
197
- within('#custom_field_type_form') do
227
+ within '#custom_field_type_form' do
198
228
  fill_in('form_name', :with => 'Field type')
199
229
 
200
230
  fill_in(
@@ -216,7 +246,7 @@ describe('CustomFields::Controller::CustomFieldTypes') do
216
246
  )
217
247
  end
218
248
 
219
- it('Call the event edit_custom_field_type (before and after)') do
249
+ it 'Call the event edit_custom_field_type (before and after)' do
220
250
  event_name = nil
221
251
 
222
252
  Zen::Event.listen(:before_edit_custom_field_type) do |type|
@@ -230,7 +260,7 @@ describe('CustomFields::Controller::CustomFieldTypes') do
230
260
  visit(index_url)
231
261
  click_on('Field type with event')
232
262
 
233
- within('#custom_field_type_form') do
263
+ within '#custom_field_type_form' do
234
264
  click_on(save_button)
235
265
  end
236
266
 
@@ -243,7 +273,7 @@ describe('CustomFields::Controller::CustomFieldTypes') do
243
273
  )
244
274
  end
245
275
 
246
- it('Call the event delete_custom_field_type (before and after)') do
276
+ it 'Call the event delete_custom_field_type (before and after)' do
247
277
  event_name = nil
248
278
  event_name2 = nil
249
279
  type_id = CustomFields::Model::CustomFieldType[
@@ -1,6 +1,6 @@
1
1
  require File.expand_path('../../../../../helper', __FILE__)
2
2
 
3
- describe('CustomFields::Controller::CustomFields') do
3
+ describe 'CustomFields::Controller::CustomFields' do
4
4
  behaves_like :capybara
5
5
 
6
6
  group = CustomFields::Model::CustomFieldGroup.create(
@@ -13,16 +13,7 @@ describe('CustomFields::Controller::CustomFields') do
13
13
  save_button = lang('custom_fields.buttons.save')
14
14
  delete_button = lang('custom_fields.buttons.delete')
15
15
 
16
- it('Submit a form without a CSRF token') do
17
- response = page.driver.post(
18
- CustomFields::Controller::CustomFields.r(:save).to_s
19
- )
20
-
21
- response.body.include?(lang('zen_general.errors.csrf')).should == true
22
- response.status.should == 403
23
- end
24
-
25
- it('Find no existing fields') do
16
+ it 'Find no existing fields' do
26
17
  message = lang('custom_fields.messages.no_fields')
27
18
 
28
19
  visit(index_url)
@@ -31,7 +22,19 @@ describe('CustomFields::Controller::CustomFields') do
31
22
  page.has_content?(message).should == true
32
23
  end
33
24
 
34
- it("Create a new custom field") do
25
+ it 'Try to create a new custom field with a missing CSRF token' do
26
+ visit(index_url)
27
+ click_link(new_button)
28
+
29
+ within '#custom_field_form' do
30
+ find('input[name="csrf_token"]').set('')
31
+ click_on(save_button)
32
+ end
33
+
34
+ page.has_content?(lang('zen_general.errors.csrf')).should == true
35
+ end
36
+
37
+ it "Create a new custom field" do
35
38
  type_select = lang('custom_fields.special.type_hash.textbox')
36
39
  format_select = lang('zen_general.markup.markdown')
37
40
  textbox_field = CustomFields::Model::CustomFieldType[:name => 'textbox']
@@ -39,7 +42,7 @@ describe('CustomFields::Controller::CustomFields') do
39
42
  visit(index_url)
40
43
  click_link(new_button)
41
44
 
42
- within('#custom_field_form') do
45
+ within '#custom_field_form' do
43
46
  fill_in('form_name', :with => 'Spec field')
44
47
 
45
48
  # Set the type to a textbox
@@ -72,13 +75,13 @@ describe('CustomFields::Controller::CustomFields') do
72
75
  page.find_field('form_sort_order').value.should == '2'
73
76
  end
74
77
 
75
- it('Search for a custom field') do
78
+ it 'Search for a custom field' do
76
79
  search_button = lang('zen_general.buttons.search')
77
80
  error = lang('zen_general.errors.invalid_search')
78
81
 
79
82
  visit(index_url)
80
83
 
81
- within('#search_form') do
84
+ within '#search_form' do
82
85
  fill_in('query', :with => 'Spec field')
83
86
  click_on(search_button)
84
87
  end
@@ -86,7 +89,7 @@ describe('CustomFields::Controller::CustomFields') do
86
89
  page.has_content?(error).should == false
87
90
  page.has_content?('Spec field').should == true
88
91
 
89
- within('#search_form') do
92
+ within '#search_form' do
90
93
  fill_in('query', :with => 'does not exist')
91
94
  click_on(search_button)
92
95
  end
@@ -95,7 +98,7 @@ describe('CustomFields::Controller::CustomFields') do
95
98
  page.has_content?('Spec field').should == false
96
99
  end
97
100
 
98
- it("Edit an existing custom field") do
101
+ it "Edit an existing custom field" do
99
102
  type_select = lang('custom_fields.special.type_hash.textarea')
100
103
  textarea_field = CustomFields::Model::CustomFieldType[:name => 'textarea']
101
104
 
@@ -103,7 +106,7 @@ describe('CustomFields::Controller::CustomFields') do
103
106
  click_link('Spec field')
104
107
 
105
108
  # Update the form
106
- within('#custom_field_form') do
109
+ within '#custom_field_form' do
107
110
  fill_in('form_name', :with => 'Spec field modified')
108
111
 
109
112
  # Change the field type to a textarea
@@ -126,11 +129,39 @@ describe('CustomFields::Controller::CustomFields') do
126
129
  .value.should == textarea_field.id.to_s
127
130
  end
128
131
 
129
- it("Edit an existing custom field with invalid data") do
132
+ enable_javascript
133
+
134
+ it 'Automatically save a custom field' do
135
+ visit(index_url)
136
+ click_link('Spec field modified')
137
+
138
+ within '#custom_field_form' do
139
+ fill_in('name', :with => 'Spec field autosave')
140
+ end
141
+
142
+ autosave_form('custom_field_form')
143
+
144
+ visit(index_url)
145
+
146
+ page.has_content?('Spec field autosave')
147
+ click_link('Spec field autosave')
148
+
149
+ within '#custom_field_form' do
150
+ fill_in('name', :with => 'Spec field modified')
151
+ click_on(save_button)
152
+ end
153
+
154
+ page.has_selector?('span.error').should == false
155
+ page.find('input[name="name"]').value.should == 'Spec field modified'
156
+ end
157
+
158
+ disable_javascript
159
+
160
+ it "Edit an existing custom field with invalid data" do
130
161
  visit(index_url)
131
162
  click_link('Spec field')
132
163
 
133
- within('#custom_field_form') do
164
+ within '#custom_field_form' do
134
165
  fill_in('form_name', :with => '')
135
166
  click_on(save_button)
136
167
  end
@@ -138,7 +169,7 @@ describe('CustomFields::Controller::CustomFields') do
138
169
  page.has_selector?('span.error').should == true
139
170
  end
140
171
 
141
- it('Fail to delete a field without an ID') do
172
+ it 'Fail to delete a field without an ID' do
142
173
  message = lang('custom_fields.messages.no_fields')
143
174
 
144
175
  visit(index_url)
@@ -147,7 +178,7 @@ describe('CustomFields::Controller::CustomFields') do
147
178
  page.has_selector?('input[name="custom_field_ids[]"]').should == true
148
179
  end
149
180
 
150
- it("Delete an existing custom field") do
181
+ it "Delete an existing custom field" do
151
182
  message = lang('custom_fields.messages.no_fields')
152
183
 
153
184
  visit(index_url)
@@ -158,7 +189,7 @@ describe('CustomFields::Controller::CustomFields') do
158
189
  page.has_content?(message).should == true
159
190
  end
160
191
 
161
- it('Call the event new_custom_field (before and after)') do
192
+ it 'Call the event new_custom_field (before and after)' do
162
193
  event_name = nil
163
194
  type_select = lang('custom_fields.special.type_hash.textarea')
164
195
 
@@ -173,7 +204,7 @@ describe('CustomFields::Controller::CustomFields') do
173
204
  visit(index_url)
174
205
  click_on(new_button)
175
206
 
176
- within('#custom_field_form') do
207
+ within '#custom_field_form' do
177
208
  fill_in('form_name', :with => 'Custom field')
178
209
  select(type_select, :from => 'form_custom_field_type_id')
179
210
  click_on(save_button)
@@ -186,7 +217,7 @@ describe('CustomFields::Controller::CustomFields') do
186
217
  Zen::Event.delete(:before_new_custom_field, :after_new_custom_field)
187
218
  end
188
219
 
189
- it('Call the event edit_custom_field (before and after)') do
220
+ it 'Call the event edit_custom_field (before and after)' do
190
221
  event_name = nil
191
222
 
192
223
  Zen::Event.listen(:before_edit_custom_field) do |field|
@@ -200,7 +231,7 @@ describe('CustomFields::Controller::CustomFields') do
200
231
  visit(index_url)
201
232
  click_on('Custom field with event')
202
233
 
203
- within('#custom_field_form') do
234
+ within '#custom_field_form' do
204
235
  click_on(save_button)
205
236
  end
206
237
 
@@ -210,7 +241,7 @@ describe('CustomFields::Controller::CustomFields') do
210
241
  Zen::Event.delete(:before_edit_custom_field, :after_edit_custom_field)
211
242
  end
212
243
 
213
- it('Call the event delete_custom_field (before and after)') do
244
+ it 'Call the event delete_custom_field (before and after)' do
214
245
  event_name = nil
215
246
  event_name2 = nil
216
247
 
@@ -1,6 +1,6 @@
1
1
  require File.expand_path('../../../../../helper', __FILE__)
2
2
 
3
- describe('Ramaze::Helper::CustomField') do
3
+ describe 'Ramaze::Helper::CustomField' do
4
4
  behaves_like :capybara
5
5
 
6
6
  type = CustomFields::Model::CustomFieldType[:name => 'textbox']
@@ -20,7 +20,7 @@ describe('Ramaze::Helper::CustomField') do
20
20
  @group.name.should == 'Spec group'
21
21
  @field.name.should == 'Spec field'
22
22
 
23
- it('Validate a valid custom field group') do
23
+ it 'Validate a valid custom field group' do
24
24
  url = CustomFields::Controller::CustomFieldGroups.r(:edit, @group.id).to_s
25
25
 
26
26
  visit(url)
@@ -28,7 +28,7 @@ describe('Ramaze::Helper::CustomField') do
28
28
  current_path.should == url
29
29
  end
30
30
 
31
- it('Validate an invalid custom field group') do
31
+ it 'Validate an invalid custom field group' do
32
32
  url = CustomFields::Controller::CustomFieldGroups \
33
33
  .r(:edit, @group.id + 1).to_s
34
34
 
@@ -40,7 +40,7 @@ describe('Ramaze::Helper::CustomField') do
40
40
  current_path.should == index
41
41
  end
42
42
 
43
- it('Validate a valid custom field') do
43
+ it 'Validate a valid custom field' do
44
44
  url = CustomFields::Controller::CustomFields \
45
45
  .r(:edit, @group.id, @field.id).to_s
46
46
 
@@ -49,7 +49,7 @@ describe('Ramaze::Helper::CustomField') do
49
49
  current_path.should == url
50
50
  end
51
51
 
52
- it('Validate an invalid custom field') do
52
+ it 'Validate an invalid custom field' do
53
53
  url = CustomFields::Controller::CustomFields \
54
54
  .r(:edit, @group.id, @field.id + 1).to_s
55
55
 
@@ -60,7 +60,7 @@ describe('Ramaze::Helper::CustomField') do
60
60
  current_path.should == index
61
61
  end
62
62
 
63
- it('Validate a valid custom field type') do
63
+ it 'Validate a valid custom field type' do
64
64
  type = CustomFields::Model::CustomFieldType[:name => 'textbox']
65
65
  url = CustomFields::Controller::CustomFieldTypes.r(:edit, type.id).to_s
66
66
 
@@ -69,7 +69,7 @@ describe('Ramaze::Helper::CustomField') do
69
69
  current_path.should == url
70
70
  end
71
71
 
72
- it('Validate an invalid custom field type') do
72
+ it 'Validate an invalid custom field type' do
73
73
  type = CustomFields::Model::CustomFieldType[:name => 'textbox']
74
74
 
75
75
  visit(