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,29 @@
1
+ <section>
2
+ <header class="with_search">
3
+ <h1>#{lang('dashboard.titles.index')}</h1>
4
+
5
+ <button class="button" id="toggle_options">
6
+ #{lang('dashboard.buttons.options')}
7
+ </button>
8
+ </header>
9
+
10
+ <div id="widget_options">
11
+ <div id="widget_columns">
12
+ <label>#{lang('dashboard.labels.columns')}</label>
13
+
14
+ #{Dashboard::Widget.columns_html}
15
+ </div>
16
+
17
+ <div id="active_widgets">
18
+ <label>#{lang('dashboard.labels.active_widgets')}</label>
19
+
20
+ #{Dashboard::Widget.checkbox_html}
21
+ </div>
22
+ </div>
23
+
24
+ <div class="body">
25
+ <div id="widgets" class="columns_#{user.widget_columns}">
26
+ #{Dashboard::Widget.html}
27
+ </div>
28
+ </div>
29
+ </section>
@@ -0,0 +1,28 @@
1
+ <p>#{lang('dashboard.widgets.welcome.content.paragraph_1' ) % Zen::VERSION}</p>
2
+
3
+ <p>#{lang('dashboard.widgets.welcome.content.paragraph_2')}</p>
4
+
5
+ <p>#{lang('dashboard.widgets.welcome.content.paragraph_3')}</p>
6
+
7
+ <ul>
8
+ <li>
9
+ <a href="http://zen-cms.com/documentation/index.html"
10
+ title="#{lang('dashboard.labels.documentation')}">
11
+ #{lang('dashboard.labels.documentation')}
12
+ </a>
13
+ </li>
14
+
15
+ <li>
16
+ <a href="http://github.com/zen-cms/zen-core"
17
+ title="#{lang('dashboard.labels.github')}">
18
+ #{lang('dashboard.labels.github')}
19
+ </a>
20
+ </li>
21
+
22
+ <li>
23
+ <a href="https://groups.google.com/forum/#!forum/zen-cms"
24
+ title="#{lang('dashboard.labels.mailing_list')}">
25
+ #{lang('dashboard.labels.mailing_list')}
26
+ </a>
27
+ </li>
28
+ </ul>
@@ -0,0 +1,292 @@
1
+ module Dashboard
2
+ # Error class for the widgets system.
3
+ class WidgetError < StandardError; end
4
+
5
+ ##
6
+ # Widgets are small blocks of content displayed on a user's dashboard. These
7
+ # widgets can contain data such as recent entries, a help message or a graph
8
+ # showing the website's traffic.
9
+ #
10
+ # In order to create a new widget you should call {Dashboard::Widget.add} and
11
+ # pass a block to it. In this block you can set the following attributes:
12
+ #
13
+ # * name: the unique name of the widget.
14
+ # * title: the title of the widget, can either be a language string or a
15
+ # regular one.
16
+ # * data: an object that responds to ``#call()`` and returns the content of
17
+ # the widget. This object is evaluated in the context of the current
18
+ # controller instance ({Dashboard::Controller::Dashboard}). If you're using
19
+ # a lambda you *have to* specify a first parameter as ``#instance_eval``
20
+ # will always pass the evaluated instance as a parameter. If you don't want
21
+ # to do this you can use ``Proc.new { }`` or simply ``proc { }`` as an
22
+ # alternative.
23
+ #
24
+ # An example of adding a widget is the following:
25
+ #
26
+ # Dashboard::Widget.add do |w|
27
+ # w.name = :example_widget
28
+ # w.title = 'dashboard.titles.example_widget'
29
+ # w.data = lambda do |instance|
30
+ # return render_view(:example_view)
31
+ # end
32
+ # end
33
+ #
34
+ # Once a widget has been registered it can be retrieved using
35
+ # {Dashboard::Widget#[]}:
36
+ #
37
+ # Dashboard::Widget[:example_widget] # => <Dashboard::Widget ...>
38
+ #
39
+ # @since 08-01-2012
40
+ #
41
+ class Widget
42
+ include Zen::Validation
43
+ include Ramaze::Trinity
44
+ include Ramaze::Helper::ACL
45
+
46
+ # Hash containing all the registered widgets.
47
+ REGISTERED = {}
48
+
49
+ # Array containing the amount of widget columns.
50
+ COLUMNS = [1, 2, 3, 4]
51
+
52
+ # The name of the widget as a symbol.
53
+ attr_reader :name
54
+
55
+ # The title of the widget (displayed on the dashboard).
56
+ attr_writer :title
57
+
58
+ # A permission required to view a widget.
59
+ attr_accessor :permission
60
+
61
+ # An object that responds to #call() and returns the content of the widget.
62
+ # When called the first parameter is set to ``Ramaze::Current.action``
63
+ # allowing you to use methods such as ``render_view``.
64
+ attr_accessor :data
65
+
66
+ class << self
67
+ ##
68
+ # Adds a new widget. Widgets are defined as following:
69
+ #
70
+ # Dashboard::Widget.add do |w|
71
+ # w.name = :recent_entries
72
+ # w.title = 'Recent Entries'
73
+ # w.data = lambda do |action|
74
+ # return action.node.render_view(:example)
75
+ # end
76
+ # end
77
+ #
78
+ # @since 08-01-2012
79
+ #
80
+ def add
81
+ widget = self.new
82
+
83
+ yield(widget)
84
+ widget.validate
85
+
86
+ REGISTERED[widget.name] = widget
87
+ end
88
+
89
+ ##
90
+ # Retrieves the widget for the given name.
91
+ #
92
+ # @example
93
+ # Dashboard::Widget[:recent_entries]
94
+ #
95
+ # @since 08-01-2012
96
+ #
97
+ def [](name)
98
+ name = name.to_sym
99
+
100
+ unless REGISTERED.key?(name)
101
+ raise(WidgetError, "The widget \"#{name}\" does not exist")
102
+ end
103
+
104
+ return REGISTERED[name]
105
+ end
106
+
107
+ ##
108
+ # Generates the HTML for all active widgets and sorts them by the user's
109
+ # sort order.
110
+ #
111
+ # @since 14-01-2012
112
+ # @return [String]
113
+ #
114
+ def html
115
+ html = ''
116
+ widgets = Dashboard::Model::Widget.select(:name) \
117
+ .filter(:user_id => user.id) \
118
+ .order(:order.asc)
119
+
120
+ widgets.each do |row|
121
+ name = row.name
122
+ html += Widget[name].html if Widget[name].allowed?
123
+ end
124
+
125
+ return html
126
+ end
127
+
128
+ ##
129
+ # Builds the HTML for the radio buttons that can be used to change the
130
+ # amount of widget columns.
131
+ #
132
+ # @since 15-01-2012
133
+ # @return [String]
134
+ #
135
+ def columns_html
136
+ g = Ramaze::Gestalt.new
137
+ current = user.widget_columns
138
+
139
+ COLUMNS.each do |c|
140
+ params = {
141
+ :name => 'widget_columns',
142
+ :type => 'radio',
143
+ :value => c,
144
+ :id => 'widget_columns_%s' % c
145
+ }
146
+
147
+ params[:checked] = 'checked' if c == current
148
+
149
+ g.span(:class => 'radio_wrap') do
150
+ g.input(params)
151
+
152
+ g.out << c
153
+ end
154
+ end
155
+
156
+ return g.to_s
157
+ end
158
+
159
+ ##
160
+ # Generates a chunk of HTML that contains various checkboxes to toggle the
161
+ # state of all widgets.
162
+ #
163
+ # @since 14-01-2012
164
+ # @return [String]
165
+ #
166
+ def checkbox_html
167
+ g = Ramaze::Gestalt.new
168
+ active = Dashboard::Model::Widget.select(:name) \
169
+ .filter(:user_id => user.id) \
170
+ .map { |r| r.name.to_sym }
171
+
172
+ REGISTERED.each do |name, widget|
173
+ next unless widget.allowed?
174
+
175
+ params = {
176
+ :type => 'checkbox',
177
+ :name => 'active_widgets[]',
178
+ :value => 'widget_%s' % name,
179
+ :id => 'toggle_widget_%s' % name
180
+ }
181
+
182
+ params[:checked] = 'checked' if active.include?(name)
183
+
184
+ g.span(:class => 'checkbox_wrap') do
185
+ g.input(params)
186
+
187
+ g.out << widget.title
188
+ end
189
+ end
190
+
191
+ return g.to_s
192
+ end
193
+
194
+ private
195
+
196
+ ##
197
+ # Returns the current user model.
198
+ #
199
+ # @since 15-01-2012
200
+ # @return [Users::Model::User]
201
+ def user
202
+ return Ramaze::Current.action.node.request.env[
203
+ Ramaze::Helper::UserHelper::RAMAZE_HELPER_USER
204
+ ]
205
+ end
206
+ end # class << self
207
+
208
+ ##
209
+ # Sets the name of the widget and converts it to a symbol.
210
+ #
211
+ # @since 11-01-2012
212
+ # @param [#to_sym] name The name of the widget.
213
+ #
214
+ def name=(name)
215
+ @name = name.to_sym
216
+ end
217
+
218
+ ##
219
+ # Returns the title of the widget. If the title is set to a valid language
220
+ # string the value of that string is returned, otherwise the raw title is
221
+ # returned.
222
+ #
223
+ # @since 11-01-2012
224
+ # @return [String]
225
+ #
226
+ def title
227
+ begin
228
+ return lang(@title)
229
+ rescue
230
+ return @title
231
+ end
232
+ end
233
+
234
+ ##
235
+ # Checks if the user is allowed to view the current widget.
236
+ #
237
+ # @since 16-01-2012
238
+ # @return [TrueClass|Falseclass]
239
+ #
240
+ def allowed?
241
+ return true if @permission.nil?
242
+ return user_authorized?(@permission)
243
+ end
244
+
245
+ ##
246
+ # Validates the instance of the widget.
247
+ #
248
+ # @since 11-01-2012
249
+ #
250
+ def validate
251
+ validates_presence([:name, :title, :data])
252
+
253
+ if REGISTERED.key?(name)
254
+ raise(Zen::ValidationError, "The widget \"#{name}\" already exists")
255
+ end
256
+ end
257
+
258
+ ##
259
+ # Returns a string containing the full HTML for the widget. The HTML of each
260
+ # widget looks like the following:
261
+ #
262
+ # <section class="widget" id="widget_example">
263
+ # <header>
264
+ # <h1>Example</h1>
265
+ # </header>
266
+ #
267
+ # <div class="body">
268
+ # Widget content
269
+ # </div>
270
+ # </section>
271
+ #
272
+ # @since 12-01-2012
273
+ # @return [String]
274
+ #
275
+ def html
276
+ g = Ramaze::Gestalt.new
277
+ action = Ramaze::Current.action
278
+
279
+ g.section(:class => 'widget', :id => 'widget_' + name.to_s) do
280
+ g.header do
281
+ g.h1(title)
282
+ end
283
+
284
+ g.div(:class => 'body') do
285
+ action.instance.instance_eval(&data)
286
+ end
287
+ end
288
+
289
+ return g.to_s
290
+ end
291
+ end # Widget
292
+ end # Dashboard
@@ -0,0 +1,9 @@
1
+ # The welcome widget shows a welcome message explaining a few things about Zen.
2
+ # It also shows a list of links to common resources such as the documentation.
3
+ Dashboard::Widget.add do |w|
4
+ w.name = :welcome
5
+ w.title = 'dashboard.widgets.titles.welcome'
6
+ w.data = lambda do |instance|
7
+ return render_file(__DIR__('../view/admin/widget/welcome.xhtml'))
8
+ end
9
+ end
@@ -0,0 +1,28 @@
1
+ Sequel.migration do
2
+ up do
3
+ create_table :widgets do
4
+ primary_key :id
5
+
6
+ String :name, :null => false
7
+ Integer :order, :null => false
8
+
9
+ foreign_key :user_id, :users, :on_delete => :cascade,
10
+ :on_update => :cascade, :key => :id
11
+ end
12
+
13
+ add_column :users, :widget_columns, Integer, :default => 1
14
+
15
+ rows = []
16
+
17
+ Zen.database[:users].select(:id).each do |user|
18
+ rows << {:user_id => user[:id], :order => 0, :name => 'welcome'}
19
+ end
20
+
21
+ Zen.database[:widgets].multi_insert(rows)
22
+ end
23
+
24
+ down do
25
+ drop_table :widgets
26
+ drop_column :users, :widget_columns
27
+ end
28
+ end
@@ -6,15 +6,15 @@ Zen::Package.add do |p|
6
6
  p.about = 'extensions.description'
7
7
  p.root = __DIR__('extensions')
8
8
 
9
- p.menu(
10
- 'extensions.titles.index',
9
+ p.menu 'extensions.titles.index',
11
10
  '/admin/extensions',
12
11
  :permission => :show_extension
13
- )
14
12
 
15
13
  p.permission :show_extension, 'extensions.permissions.show'
16
14
  end
17
15
 
18
- Zen::Language.load('extensions')
19
-
20
16
  require __DIR__('extensions/controller/extensions')
17
+
18
+ Zen::Event.listen :post_start do
19
+ Zen::Language.load('extensions')
20
+ end
@@ -6,81 +6,86 @@
6
6
  <div class="tabs">
7
7
  <ul>
8
8
  <li>
9
- <a href="#packages">#{lang('extensions.labels.packages')}</a>
9
+ <a class="icon box"
10
+ href="#packages">#{lang('extensions.labels.packages')}</a>
10
11
  </li>
11
12
  <li>
12
- <a href="#themes">#{lang('extensions.labels.themes')}</a>
13
+ <a class="icon template"
14
+ href="#themes">#{lang('extensions.labels.themes')}</a>
13
15
  </li>
14
16
  <li>
15
- <a href="#languages">#{lang('extensions.labels.languages')}</a>
17
+ <a class="icon globe"
18
+ href="#languages">#{lang('extensions.labels.languages')}</a>
16
19
  </li>
17
20
  </ul>
18
21
  </div>
19
22
 
20
- <div id="packages">
21
- <table class="no_sort">
22
- <thead>
23
- <tr>
24
- <th>#{lang('extensions.labels.package')}</th>
25
- <th>#{lang('extensions.labels.author')}</th>
26
- <th>#{lang('extensions.labels.description')}</th>
27
- </tr>
28
- </thead>
29
- <tbody>
30
- <?r Zen::Package::REGISTERED.each do |name, package| ?>
31
- <tr>
32
- <td>#{package.formatted_title}</td>
33
- <td>#{package.author}</td>
34
- <td>#{package.about}</td>
35
- </tr>
36
- <?r end ?>
37
- </tbody>
38
- </table>
39
- </div>
23
+ <div class="body">
24
+ <div id="packages">
25
+ <table class="no_sort">
26
+ <thead>
27
+ <tr>
28
+ <th>#{lang('extensions.labels.package')}</th>
29
+ <th>#{lang('extensions.labels.author')}</th>
30
+ <th>#{lang('extensions.labels.description')}</th>
31
+ </tr>
32
+ </thead>
33
+ <tbody>
34
+ <?r Zen::Package::REGISTERED.each do |name, package| ?>
35
+ <tr>
36
+ <td>#{package.formatted_title}</td>
37
+ <td>#{package.author}</td>
38
+ <td>#{package.about}</td>
39
+ </tr>
40
+ <?r end ?>
41
+ </tbody>
42
+ </table>
43
+ </div>
40
44
 
41
- <div id="themes">
42
- <table class="no_sort">
43
- <thead>
44
- <tr>
45
- <th>#{lang('extensions.labels.theme')}</th>
46
- <th>#{lang('extensions.labels.author')}</th>
47
- <th>#{lang('extensions.labels.description')}</th>
48
- </tr>
49
- </thead>
50
- <tbody>
51
- <?r Zen::Theme::REGISTERED.each do |name, theme| ?>
52
- <tr>
53
- <td>#{theme.formatted_name}</td>
54
- <td>#{theme.author}</td>
55
- <td>#{theme.about}</td>
56
- </tr>
57
- <?r end ?>
58
- </tbody>
59
- </table>
60
- </div>
45
+ <div id="themes">
46
+ <table class="no_sort">
47
+ <thead>
48
+ <tr>
49
+ <th>#{lang('extensions.labels.theme')}</th>
50
+ <th>#{lang('extensions.labels.author')}</th>
51
+ <th>#{lang('extensions.labels.description')}</th>
52
+ </tr>
53
+ </thead>
54
+ <tbody>
55
+ <?r Zen::Theme::REGISTERED.each do |name, theme| ?>
56
+ <tr>
57
+ <td>#{theme.formatted_name}</td>
58
+ <td>#{theme.author}</td>
59
+ <td>#{theme.about}</td>
60
+ </tr>
61
+ <?r end ?>
62
+ </tbody>
63
+ </table>
64
+ </div>
61
65
 
62
- <div id="languages">
63
- <table class="no_sort">
64
- <thead>
65
- <tr>
66
- <th>#{lang('extensions.labels.language')}</th>
67
- <th>#{lang('extensions.labels.rtl')}</th>
68
- <th>#{lang('extensions.labels.loaded_translations')}</th>
69
- </tr>
70
- </thead>
71
- <tbody>
72
- <?r Zen::Language::REGISTERED.each do |name, lang| ?>
73
- <tr>
74
- <td>#{lang.title}</td>
75
- <td>
76
- #{lang(
77
- "zen_general.special.boolean_hash.#{lang.rtl}"
78
- )}
79
- </td>
80
- <td>#{lang.collections.keys.length}</td>
81
- </tr>
82
- <?r end ?>
83
- </tbody>
84
- </table>
85
- </div>
66
+ <div id="languages">
67
+ <table class="no_sort">
68
+ <thead>
69
+ <tr>
70
+ <th>#{lang('extensions.labels.language')}</th>
71
+ <th>#{lang('extensions.labels.rtl')}</th>
72
+ <th>#{lang('extensions.labels.loaded_translations')}</th>
73
+ </tr>
74
+ </thead>
75
+ <tbody>
76
+ <?r Zen::Language::REGISTERED.each do |name, lang| ?>
77
+ <tr>
78
+ <td>#{lang.title}</td>
79
+ <td>
80
+ #{lang(
81
+ "zen_general.special.boolean_hash.#{lang.rtl}"
82
+ )}
83
+ </td>
84
+ <td>#{lang.collections.keys.length}</td>
85
+ </tr>
86
+ <?r end ?>
87
+ </tbody>
88
+ </table>
89
+ </div>
90
+ </div>
86
91
  </section>