zen 0.3 → 0.4

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