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,28 @@
1
+ Zen::Package.add do |p|
2
+ p.name = :dashboard
3
+ p.title = 'dashboard.titles.index'
4
+ p.author = 'Yorick Peterse'
5
+ p.url = 'http://zen-cms.com/'
6
+ p.about = 'dashboard.description'
7
+ p.root = __DIR__('dashboard')
8
+ p.migrations = __DIR__('../migrations')
9
+
10
+ p.menu 'dashboard.titles.index', '/admin'
11
+ end
12
+
13
+ require __DIR__('dashboard/model/widget')
14
+ require __DIR__('dashboard/controller/dashboard')
15
+ require __DIR__('dashboard/widget')
16
+ require __DIR__('dashboard/widget/welcome')
17
+
18
+ Zen::Event.listen :after_new_user do |user|
19
+ Dashboard::Model::Widget.create(
20
+ :user_id => user.id,
21
+ :name => 'welcome',
22
+ :order => 0
23
+ )
24
+ end
25
+
26
+ Zen::Event.listen :post_start do
27
+ Zen::Language.load('dashboard')
28
+ end
@@ -0,0 +1,154 @@
1
+ ##
2
+ # Package for the user's dashboard.
3
+ #
4
+ # ## Controllers
5
+ #
6
+ # * {Dashboard::Controller::Dashboard}
7
+ #
8
+ # ## Models
9
+ #
10
+ # * {Dashboard::Model::Widget}
11
+ #
12
+ # ## Generic Modules & Classes
13
+ #
14
+ # * {Dashboard::Widget}
15
+ # * {Dashboard::WidgetError}
16
+ #
17
+ # @since 16-01-2012
18
+ #
19
+ module Dashboard
20
+ module Controller
21
+ ##
22
+ # Shows the dashboard for the currently logged in user. The dashboard shows
23
+ # a list of user specific widgets. These widgets can be re-arranged,
24
+ # disabled/enabled and the columns for these widgets can also be customized.
25
+ #
26
+ # When you open up the dashboard for the first time only one widget will be
27
+ # displayed, the "Welcome" widget. This widget gives a very short
28
+ # introduction to how widgets work and how to navigate around the
29
+ # application.
30
+ #
31
+ # ![Default Dashboard](../../images/dashboard/dashboard.png)
32
+ #
33
+ # Of course the default widget isn't very useful after the first time you've
34
+ # read it so you might want to turn it off and enable some other widgets
35
+ # instead. This can be done by first opening the options menu by clicking on
36
+ # the "Options" button and then choosing which widgets you'd like to be
37
+ # displayed.
38
+ #
39
+ # ![Available Widgets](../../images/dashboard/options.png)
40
+ #
41
+ # In this image two widgets are available, "Welcome" (activated by default
42
+ # for each new user) and the "Recent Entries" widget. In order to activate
43
+ # the "Recent Entries" widget all you have to do is check the checkbox. Once
44
+ # done it will be added to your dashboard as shown in the image below.
45
+ #
46
+ # ![Added Widget](../../images/dashboard/added.png)
47
+ #
48
+ # The options menu also allows you to change the amount of columns for each
49
+ # row. You can choose between 1 and 4 columns.
50
+ #
51
+ # ![Widget Columns](../../images/dashboard/columns.png)
52
+ #
53
+ # ## Available Widgets
54
+ #
55
+ # Zen comes with the following widgets:
56
+ #
57
+ # * Welcome: gives a short introduction to widgets and how to navigate
58
+ # around the application.
59
+ # * Recent Entries: a widget that displays the 10 most recent entries.
60
+ #
61
+ # @since 08-01-2012
62
+ # @map /admin
63
+ #
64
+ class Dashboard < Zen::Controller::AdminController
65
+ map '/admin'
66
+ title 'dashboard.titles.%s'
67
+
68
+ serve :css, ['admin/dashboard/css/dashboard'], :name => 'dashboard'
69
+ serve :javascript, ['admin/dashboard/js/dashboard'], :name => 'dashboard'
70
+
71
+ set_layout nil => [:widget_state, :widget_order, :widget_columns],
72
+ :admin => [:index]
73
+
74
+ ##
75
+ # Shows all the active widgets and allows the user to manage these widgets
76
+ # or add new ones.
77
+ #
78
+ # @since 08-01-2012
79
+ #
80
+ def index; end
81
+
82
+ ##
83
+ # Updates the sort order of all the widgets for the currently logged in
84
+ # user.
85
+ #
86
+ # @since 15-01-2012
87
+ #
88
+ def widget_order
89
+ ::Dashboard::Widget::REGISTERED.each do |name, widget|
90
+ _name = name.to_s
91
+
92
+ if request.POST[_name] and request.POST[_name] =~ /\d+/
93
+ row = ::Dashboard::Model::Widget[
94
+ :name => _name,
95
+ :user_id => user.id
96
+ ]
97
+
98
+ unless row.nil?
99
+ row.update(:order => request.POST[_name])
100
+ end
101
+ end
102
+ end
103
+ end
104
+
105
+ ##
106
+ # Enables or disables a widget for the currently logged in user.
107
+ #
108
+ # @since 15-01-2012
109
+ #
110
+ def widget_state
111
+ widget = request.POST['widget']
112
+ enabled = request.POST['enabled'] == '1' ? true : false
113
+
114
+ if !widget.nil? and !widget.empty? \
115
+ and ::Dashboard::Widget::REGISTERED.key?(widget.to_sym)
116
+ row = ::Dashboard::Model::Widget[
117
+ :name => widget,
118
+ :user_id => user.id
119
+ ]
120
+
121
+ if enabled == true
122
+ if row.nil?
123
+ last_order = ::Dashboard::Model::Widget.last_order(user.id)
124
+
125
+ ::Dashboard::Model::Widget.create(
126
+ :name => widget,
127
+ :user_id => user.id,
128
+ :order => last_order + 1
129
+ )
130
+
131
+ respond(::Dashboard::Widget[widget].html, 201)
132
+ end
133
+ else
134
+ row.destroy
135
+ end
136
+ end
137
+ end
138
+
139
+ ##
140
+ # Updates the amount of widget columns to use for the currently logged in
141
+ # user.
142
+ #
143
+ # @since 15-01-2012
144
+ #
145
+ def widget_columns
146
+ columns = request.POST['columns']
147
+
148
+ if !columns.nil? and !columns.empty? and columns =~ /\d+/
149
+ user.update(:widget_columns => columns)
150
+ end
151
+ end
152
+ end # Dashboard
153
+ end # Controller
154
+ end # Zen
@@ -0,0 +1,35 @@
1
+ Zen::Language::Translation.add do |trans|
2
+ trans.language = 'en'
3
+ trans.name = 'dashboard'
4
+
5
+ trans.translate do |t|
6
+ t['titles.index'] = 'Dashboard'
7
+ t['buttons.options'] = 'Options'
8
+ t['labels.columns'] = 'Columns'
9
+ t['labels.active_widgets'] = 'Active Widgets'
10
+ t['labels.documentation'] = 'Documentation'
11
+ t['labels.github'] = 'Github Project'
12
+ t['labels.mailing_list'] = 'Mailing List'
13
+ t['widgets.titles.welcome'] = 'Welcome'
14
+
15
+ t['widgets.welcome.content.paragraph_1'] = <<TXT.strip
16
+ Welcome to Zen %s. What you are seeing here is the dashboard of your website.
17
+ This little box here is called a "widget". Widgets are displayed on the
18
+ dashboard and contain small amounts of data such as this help message or a list
19
+ of recent entries. Don't like a widget? You can customize the active widgets by
20
+ clicking the "Options" button at the top right.
21
+ TXT
22
+
23
+ t['widgets.welcome.content.paragraph_2'] = <<TXT.strip
24
+ To the left is the name of your website, a few user specific actions and the
25
+ main navigation menu. You can use this menu to navigate through the
26
+ administration panel of your website. Clicking on the name of your website (or
27
+ on the "Dashboard" link) will bring you back to this page.
28
+ TXT
29
+
30
+ t['widgets.welcome.content.paragraph_3'] = 'For more information see the ' \
31
+ 'following links:'
32
+
33
+ t['description'] = 'Dashboard with custom widgets for each user.'
34
+ end
35
+ end
@@ -0,0 +1,36 @@
1
+ Zen::Language::Translation.add do |trans|
2
+ trans.language = 'nl'
3
+ trans.name = 'dashboard'
4
+
5
+ trans.translate do |t|
6
+ t['titles.index'] = 'Dashboard'
7
+ t['buttons.options'] = 'Opties'
8
+ t['labels.columns'] = 'Kolommen'
9
+ t['labels.active_widgets'] = 'Actieve widgets'
10
+ t['labels.documentation'] = 'Documentatie'
11
+ t['labels.github'] = 'Github project'
12
+ t['labels.mailing_list'] = 'Discussie groep'
13
+ t['widgets.titles.welcome'] = 'Welkom'
14
+
15
+ t['widgets.welcome.content.paragraph_1'] = <<TXT.strip
16
+ Welkom bij Zen %s. Wat u nu voor u ziet is het dashboard van uw website. Dit
17
+ kleine blok heet een "widget". Widgets worden weergegeven op het dashboard en
18
+ bevatten kleine hoeveelheden aan data zoals dit help bericht of een lijst met
19
+ recente artikelen. Vind u een bepaalde widget maar niks? Geen probleem. Widgets
20
+ kunnen aan of uit worden gezet door op de knop "Opties" te klikken, deze knop
21
+ vind u in de rechter bovenhoek van deze pagina.
22
+ TXT
23
+
24
+ t['widgets.welcome.content.paragraph_2'] = <<TXT.strip
25
+ Aan de linker kant van deze pagina vind u de naam van uw website, een paar
26
+ gebruikers specifieke acties en het hoofd navigatie menu. Met dit menu kunt u
27
+ rond navigeren door het beheerders paneel van uw website. Door op de naam te
28
+ klikken (of op de "Dashboard" link) komt u weer terug op deze pagina.
29
+ TXT
30
+
31
+ t['widgets.welcome.content.paragraph_3'] = 'Zie de volgende links voor ' \
32
+ 'meer informatie:'
33
+
34
+ t['description'] = 'Dashboard met aanpasbare widgets voor elke gebruiker.'
35
+ end
36
+ end
@@ -0,0 +1,45 @@
1
+ module Dashboard
2
+ module Model
3
+ ##
4
+ # Model for the table that contains the active widgets for a user.
5
+ #
6
+ # @since 12-01-2012
7
+ #
8
+ class Widget < Sequel::Model
9
+ many_to_one :users, :class => 'Users::Model::User'
10
+
11
+ ##
12
+ # Returns an integer containing the order of the last widget. If no
13
+ # widgets were found 0 is returned.
14
+ #
15
+ # @since 15-01-2012
16
+ # @param [Fixnum] user_id The ID of the user for which to retrieve the
17
+ # widget order.
18
+ # @return [Fixnum]
19
+ #
20
+ def self.last_order(user_id)
21
+ rows = select(:order) \
22
+ .filter(:user_id => user_id) \
23
+ .order(:order.desc) \
24
+ .limit(1) \
25
+ .all
26
+
27
+ if rows.empty?
28
+ return 0
29
+ else
30
+ return rows[0].order
31
+ end
32
+ end
33
+
34
+ ##
35
+ # Validates the model instance before saving it in the database.
36
+ #
37
+ # @since 13-01-2012
38
+ #
39
+ def validate
40
+ validates_presence([:name, :order, :user_id])
41
+ validates_integer(:user_id)
42
+ end
43
+ end # Widget
44
+ end # Model
45
+ end # Dashboard
@@ -0,0 +1,74 @@
1
+ .widget
2
+ {
3
+ border: 1px solid #aaa;
4
+ background: #fff;
5
+ float: left;
6
+ margin-bottom: 30px;
7
+ min-height: 150px;
8
+ vertical-align: top;
9
+ width: 100%;
10
+ }
11
+
12
+ .widget header
13
+ {
14
+ cursor: move;
15
+ padding: 0px 15px!important;
16
+ }
17
+
18
+ .widget header h1
19
+ {
20
+ font-size: 20px;
21
+ }
22
+
23
+ /* Different styles for the various column widths. */
24
+ .columns_2 .widget, .columns_3 .widget, .columns_4 .widget
25
+ {
26
+ margin-right: 2%;
27
+ }
28
+
29
+ .columns_2 .widget
30
+ {
31
+ width: 47.9%;
32
+ }
33
+
34
+ .columns_3 .widget
35
+ {
36
+ width: 30.9%;
37
+ }
38
+
39
+ .columns_4 .widget
40
+ {
41
+ width: 22.9%;
42
+ }
43
+
44
+ /* Styles for the box that allows users to customize the dashboard layout. */
45
+ #widget_options
46
+ {
47
+ background: #f2f2f2;
48
+ border-left: 1px solid #ccc;
49
+ border-right: 1px solid #ccc;
50
+ border-bottom: 1px solid #ccc;
51
+ display: none;
52
+ margin: 0 15px;
53
+ padding: 15px;
54
+
55
+ box-shadow: 0px 0px 2px #ccc;
56
+ -webkit-box-shadow: 0px 0px 2px #ccc;
57
+ -moz-box-shadow: 0px 0px 2px #ccc;
58
+ }
59
+
60
+ #widget_options label
61
+ {
62
+ width: 200px;
63
+ }
64
+
65
+ #widget_options #widget_columns
66
+ {
67
+ margin-bottom: 15px;
68
+ }
69
+
70
+ #toggle_options
71
+ {
72
+ float: right;
73
+ margin: 3px 0px 0px 0px;
74
+ }
@@ -0,0 +1,102 @@
1
+ window.addEvent('domready', function()
2
+ {
3
+ var widgets = $('widgets');
4
+ var options_fx = new Fx.Slide('widget_options',
5
+ {
6
+ duration: 'normal',
7
+ transition: Fx.Transitions.Pow.easeOut
8
+ });
9
+
10
+ options_fx.hide();
11
+
12
+ // The options div is hidden by default, without doing this the div would be
13
+ // displayed for a split second before it's hidden using Fx.Slide. However,
14
+ // Fx.Slide doesn't use the "display" property so it has to be removed
15
+ // manually.
16
+ $('widget_options').setStyle('display', 'block');
17
+
18
+ $('toggle_options').addEvent('click', function()
19
+ {
20
+ options_fx.toggle();
21
+ });
22
+
23
+ // Allow users to sort the widgets.
24
+ var sortable_widgets = new Sortables('widgets',
25
+ {
26
+ handle: 'header',
27
+ opacity: 0.5,
28
+ revert: true,
29
+ clone: true,
30
+ onSort: function(el)
31
+ {
32
+ var order = {};
33
+
34
+ // Build the new order for all the widgets. The "widget_" prefix is
35
+ // removed before the values are being sent to the server.
36
+ sortable_widgets.serialize().clean().each(function(val, index)
37
+ {
38
+ order[val.replace(/widget_/, '')] = index;
39
+ });
40
+
41
+ new Request(
42
+ {
43
+ url: '/admin/widget_order',
44
+ method: 'POST',
45
+ data: order
46
+ }).send();
47
+ }
48
+ });
49
+
50
+ // Update the amount of columns based on the clicked radio button.
51
+ $$('#widget_columns input[type="radio"]').addEvent('click', function()
52
+ {
53
+ var columns = this.get('value');
54
+
55
+ widgets.set('class', 'widgets ' + 'columns_' + columns);
56
+
57
+ new Request(
58
+ {
59
+ url: '/admin/widget_columns',
60
+ method: 'POST',
61
+ data: {columns: columns}
62
+ }).send();
63
+ });
64
+
65
+ // Toggle the visibility of a widget and update its state in the database.
66
+ $$('#active_widgets input[type="checkbox"]').addEvent('click', function()
67
+ {
68
+ var el = $(this.get('value'));
69
+ var name = this.get('value').replace(/^widget_/, '');
70
+ var enabled = '0';
71
+
72
+ if ( this.get('checked') === true )
73
+ {
74
+ enabled = '1';
75
+ }
76
+ else
77
+ {
78
+ if ( el ) el.destroy();
79
+ }
80
+
81
+ // Request.HTML doesn't really offer any benefits in this case so using
82
+ // plain Request is fine.
83
+ var request = new Request(
84
+ {
85
+ url: '/admin/widget_state',
86
+ method: 'POST',
87
+ data: {widget: name, enabled: enabled},
88
+ onSuccess: function(response)
89
+ {
90
+ if ( response && request.status === 201 )
91
+ {
92
+ response = Elements.from(response);
93
+
94
+ widgets.adopt(response);
95
+ sortable_widgets.addItems(response);
96
+ }
97
+ }
98
+ });
99
+
100
+ request.send();
101
+ });
102
+ });