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,83 @@
1
+ # Zen.Editor
2
+
3
+ Zen.Editor is the main class used for the markup editor that can be used to more
4
+ easily insert markup for all supported languages into a text area. By default
5
+ Zen will automatically use the markup editor for all ``textarea`` elements with
6
+ a class of ``visual_editor``. The format used for the markup is retrieved from
7
+ the column ``data-format`` (this column is required). The attribute
8
+ ``data-format`` should contain the name of the markup engine to use as defined
9
+ in ``Zen.Editor.drivers``. Currently the following are supported:
10
+
11
+ * markdown
12
+ * textile
13
+
14
+ If an unknown driver is specified the default driver (HTML) will be used
15
+ instead.
16
+
17
+ The markup required for Zen to automatically use the markup editor looks like
18
+ the example below.
19
+
20
+ <textarea class="visual_editor" data-format="markdown"></textarea>
21
+
22
+ If you want to manually create an instance of ``Zen.Editor`` you can still do so
23
+ but due to the way the system works you shouldn't directly create an instance of
24
+ the class as this will prevent the editor from automatically using the correct
25
+ driver class. You should use ``Zen.Editor.init`` instead. This method has the
26
+ following syntax:
27
+
28
+ var editor = Zen.Editor.init(driver, element[, options, buttons]);
29
+
30
+ The first parameter is a string containing the name of the driver to use. The
31
+ second parameter can either be a CSS selector, a collection of elements or a
32
+ single element. If the parameter is a CSS selector or a collection of elements
33
+ the **first** element will be used, all others will be ignored. The last two
34
+ parameters are used for customized options as well as adding custom buttons to
35
+ the editor. Currently the editor only supports the following two options:
36
+
37
+ * width: sets a minimum width on the textarea element.
38
+ * height: sets a minimum hight on the textarea element.
39
+
40
+ Buttons can be added by setting the last parameter to an array. Each button has
41
+ the same format as the buttons used in Zen.Window:
42
+
43
+ {
44
+ name: 'foobar',
45
+ label: 'Foobar',
46
+ onClick: function() {}
47
+ }
48
+
49
+ Note that unlike Zen.Window these buttons can't be set in the options object
50
+ under the key "buttons". This is because the Options class of Mootools doesn't
51
+ actually merge options but instead overwrites existing ones. This would mean
52
+ that it would be more difficult to add a default set of buttons as well as
53
+ custom ones. Most likely this will change in the future once I find out what the
54
+ best way of doing this would be.
55
+
56
+ Example:
57
+
58
+ var editor = Zen.Editor.init(
59
+ 'markdown',
60
+ 'div#text_editor',
61
+ {
62
+ width: 400
63
+ },
64
+ [
65
+ {
66
+ name: 'custom',
67
+ label: 'Custom',
68
+ onClick: function(editor)
69
+ {
70
+ console.log("This is a custom button!");
71
+ }
72
+ }
73
+ ]
74
+ );
75
+
76
+ Functions used for buttons take a single parameter which will contain an
77
+ instance of the editor the button belongs to. This makes it easy to insert text
78
+ into the textarea:
79
+
80
+ function(editor)
81
+ {
82
+ editor.insertAroundCursor({before: '<!--', after: '-->'});
83
+ }
@@ -0,0 +1,34 @@
1
+ # Zen.Hash
2
+
3
+ Zen.Hash is a class that can be used to parse and generate shebang/hash bang
4
+ URLs. Parsing is done using ``Zen.Hash#parse`` and generating URLs using
5
+ ``Zen.Hash#getHash``.
6
+
7
+ Parsing a URL is relatively simple and the end output is similar to how you'd
8
+ parse URLs with query string parameters. First create a new instance of this
9
+ class:
10
+
11
+ var hash = new Zen.Hash('#!/users/active?limit=10');
12
+
13
+ The supplied string will be parsed straight away and the result can be
14
+ retrieved from two attributes:
15
+
16
+ * segments
17
+ * params
18
+
19
+ The first attribute contains an array with all the URL segments, the second
20
+ one is an object containing all the query string parameters. In case of the
21
+ above example that would lead to the following data being stored in these
22
+ attributes:
23
+
24
+ console.log(hash.segments); // => ["users", "active"]
25
+ console.log(hash.params); // => {limit: '10'}
26
+
27
+ Keep in mind that calling ``Zen.Hash#parse`` will overwrite existing segments
28
+ and parameters.
29
+
30
+ Generating a full shebang URL is pretty straight forward as well and can be done
31
+ by calling ``getHash()``. This method returns a string containing the shebang
32
+ URL including the prefix:
33
+
34
+ hash.getHash(); // => "#!/users/active?limit=10"
@@ -0,0 +1,78 @@
1
+ # Zen.HtmlTable
2
+
3
+ The class Zen.HtmlTable was introduced in Zen 0.2.8 and makes it possible to
4
+ sort tables by their columns, check all checkboxes in the first column of a
5
+ table and it highlights odd rows. Generally you don't need to use this class
6
+ itself but instead you'll be using the markup it accepts in order to modify it's
7
+ behavior.
8
+
9
+ The basic markup for this class is very simple, in fact, it's nothing more than
10
+ a regular table with a ``<thead>`` element:
11
+
12
+ <table>
13
+ <thead>
14
+ <tr>
15
+ <th>#</th>
16
+ <th>Name</th>
17
+ </tr>
18
+ </thead>
19
+ <tbody>
20
+ <tr>
21
+ <td>2</td>
22
+ <td>Ruby</td>
23
+ </tr>
24
+ </tbody>
25
+ </table>
26
+
27
+ Zen will automatically detect and use the table and you're good to go. If you
28
+ want to modify the behavior you can use a few attributes on certain elements of
29
+ the table. The following attributes can be applied to the ``<table>`` element
30
+ itself:
31
+
32
+ * data-sort-index: the index of the ``<th>`` element to sort the table on by
33
+ default. By default this is set to 1 as all tables have a checkbox in the
34
+ first column of each row.
35
+
36
+ The following attributes can be set on each ``<th>`` element:
37
+
38
+ * data-sort-parser: the name of the parser to use for sorting the columns. This
39
+ option is directly passed to HtmlTable.Sort and can be any of the parsers
40
+ Mootools has to offer (or one you wrote yourself).
41
+
42
+ Example:
43
+
44
+ <table data-sort-index="1">
45
+ <thead>
46
+ <tr>
47
+ <th>#</th>
48
+ <th data-sort-parser="usernames">Name</th>
49
+ </tr>
50
+ </thead>
51
+ <tbody>
52
+ <tr>
53
+ <td>2</td>
54
+ <td>Ruby</td>
55
+ </tr>
56
+ </tbody>
57
+ </table>
58
+
59
+ If you want to create a table that should be ignored by Zen.HtmlTable simply
60
+ give the ``<table>`` element a class of ``no_sort``:
61
+
62
+ <table class="no_sort">
63
+ <thead>
64
+ <tr>
65
+ <th>#</th>
66
+ <th>Name</th>
67
+ </tr>
68
+ </thead>
69
+ <tbody>
70
+ <tr>
71
+ <td>2</td>
72
+ <td>Ruby</td>
73
+ </tr>
74
+ </tbody>
75
+ </table>
76
+
77
+ This class can also be applied to ``<th>`` elements to ignore just that column
78
+ rather than the entire table.
@@ -0,0 +1,44 @@
1
+ # Zen.Tabs
2
+
3
+ Zen.Tabs can be used to create a tab based navigation menu. Because Zen already
4
+ uses this class for all elements that match the selector ``div.tabs ul`` it's
5
+ usually not required to manually create an instance of this class.
6
+
7
+ The syntax of creating an instance of this class looks like the following:
8
+
9
+ var tabs = new Zen.Tabs(selector[, options]);
10
+
11
+ The first parameter is a CSS selector, the second parameter is an object
12
+ containing various options to customize the instance. Note that the selector
13
+ used should result in a number of ``ul`` elements, not ``div`` elements (or any
14
+ other elements).
15
+
16
+ A short example looks like the following:
17
+
18
+ var tabs = new Zen.Tabs('div.my_tabs ul');
19
+
20
+ The following options can be used to customize the tabs:
21
+
22
+ * default: a selector used to indicate what tab element should be selected by
23
+ default. Set to ``li:first-child`` by default.
24
+
25
+ For the tabs system to work properly you'll need to use the right markup for
26
+ your fields. Luckily this is as simple as creating a ``<div>`` (or another type
27
+ of element) and setting an ID for that element:
28
+
29
+ <!-- The markup for your tabs -->
30
+ <div class="tabs">
31
+ <ul>
32
+ <li>
33
+ <a href="#some_id">Some ID</a>
34
+ </li>
35
+ </ul>
36
+ </div>
37
+
38
+ <!-- The field to show/hide -->
39
+ <div id="some_id">
40
+
41
+ </div>
42
+
43
+ Keep in mind that for the tab system to work properly the URLs for each tab
44
+ should start with a hash sign.
@@ -0,0 +1,49 @@
1
+ # Zen.Window
2
+
3
+ The Window class can be used to display modal windows with (or without) a set of
4
+ custom buttons. These windows can be used for displaying pictures, confirmation
5
+ messages and so on. In order to display a window you'll need to create a new
6
+ instance of the class. The syntax of this looks like the following:
7
+
8
+ var some_window = new Zen.Window(content[, options]);
9
+
10
+ <div class="note deprecated">
11
+ <p>
12
+ <strong>Warning</strong>: When creating an instance of Zen.Window you
13
+ should never save it in a variable named "window" as this is a reserved
14
+ variable that refers to the browser window.
15
+ </p>
16
+ </div>
17
+
18
+ The first parameter is the content to display and can either be plain text or
19
+ HTML. The second parameter is an object containing various options that can be
20
+ used to customize the window. The following options can be set in this object:
21
+
22
+ * height: a number indicating a fixed height to use for the window.
23
+ * width: the same but for the width.
24
+ * title: the title to display in the title bar containing the close button.
25
+ * resize: boolean that when set to true allows the user to resize the window.
26
+ * move: boolean that when set to true allows the user to move the window around.
27
+ * buttons: an array of buttons to display at the bottom of the window.
28
+
29
+ Creating a new window with some of these options would look something like the
30
+ following:
31
+
32
+ var some_window = new Zen.Window('Hello, world!', {title: 'This is a window!'});
33
+
34
+ Note that you're not required to call any extra methods, the window will be
35
+ displayed whenever a new instance of the window is created.
36
+
37
+ Buttons can be added by setting the "buttons" option to an array of objects of
38
+ which each object has the following format:
39
+
40
+ {
41
+ name: 'foobar',
42
+ label: 'Foobar',
43
+ onClick: function() {}
44
+ }
45
+
46
+ * name: the name of the button, should be unique as it's used for the class of
47
+ the ``li`` element of the button.
48
+ * label: the text displayed in the button.
49
+ * onClick: a function that will be called whenever the button is clicked.
@@ -0,0 +1,201 @@
1
+ # Comparing Zen With Others
2
+
3
+ A common question people ask when looking into specific software is "How is this
4
+ different/better compared to X?". One might wonder what the differences are
5
+ between Zen and Wordpress or Zen and Radiant. This guide is meant to clear
6
+ things up a bit.
7
+
8
+ Do note that since I wrote Zen my opinion is more than likely biased.
9
+
10
+ ## Zen vs Wordpress
11
+
12
+ There are quite a few differences between Zen and Wordpress besides the language
13
+ that's being used for the two (PHP for Wordpress, Ruby for Zen). Wordpress at
14
+ its core is a blogging engine that was meant to handle blog articles and simple
15
+ static pages. Over the years people started writing plugins and it expanded from
16
+ a blogging engine into a more general purpose content management system.
17
+ However, at its core it still remains a blogging engine and this is something
18
+ you'll quickly notice when trying to use it for something other than a blog or a
19
+ very basic website.
20
+
21
+ Another issue with Wordpress is that it has a (in my opinion) horrible code base
22
+ as well as a badly designed plugin system that promote bad coding standards and
23
+ the mixing of logic and presentation. Wordpress doesn't take full advantage of
24
+ the good parts of PHP such as classes and namespaces and instead mostly relies
25
+ on the use of global functions.
26
+
27
+ A good example of this is the file ``wp-admin/media.php``. This file contains a
28
+ mixture of HTML for the presentation as well as plain PHP for the logic. There's
29
+ logic for enqueing certain actions, displaying error messages as well as
30
+ presentation code for various media files. Instead of separating this into
31
+ controllers, models and views the developers decided to just chuck it all in a
32
+ single file.
33
+
34
+ Sure, Wordpress is pretty easy to use and has a decent looking interface but
35
+ once you have to dive into the code base you'll most likely wish you never
36
+ touched it alltogether.
37
+
38
+ Zen doesn't aim to be a blogging engine or another specific type of content
39
+ management application, not does it aim to be N times faster (I've simply never
40
+ compared it with Wordpress in terms of performance). Instead Zen tries to be
41
+ more right by giving you greater flexibility (without the need for installing
42
+ third party plugins/hacks) as well as a solid code base that is far more
43
+ pleasant to work with.
44
+
45
+ ### Installation
46
+
47
+ Unlike Zen Wordpress isn't distributed using a package manager, instead you have
48
+ to manually download, extract and install a compressed archive. In its most
49
+ basic form you'd have to run the following commands to get a copy of Wordpress:
50
+
51
+ $ wget http://wordpress.org/latest.tar.gz
52
+ $ tar -xvf latest.tar.gz
53
+ $ cd wordpress/
54
+
55
+ This process is not only tiring but also makes it harder to upgrade existing
56
+ installations.
57
+
58
+ Zen is distributed using Rubygems and thus all you need to run in order to
59
+ install it is the following command:
60
+
61
+ $ gem install zen
62
+
63
+ If you want to update Zen you simply run ``gem update zen`` instead.
64
+
65
+ ## Zen vs Expression Engine
66
+
67
+ Zen was heavily inspired by Expression Engine and was initially written to be
68
+ "Expression Engine done right". The two have a lot of things in common such as
69
+ the ability to create custom fields and sections (called "channels" in EE). Zen
70
+ however takes it a step further and allows you to create custom field methods
71
+ and types (on top of just fields) as well as having a simpler database design
72
+ and a code base that's far more pleasant to work with.
73
+
74
+ Another big difference between the two is that Expression Engine costs money and
75
+ is not open source, Zen on the other hand is completely free and licensed under
76
+ the MIT license. This license gives you the freedom to use Zen for any project
77
+ (both open source and proprietary) without the drawbacks of licenses such as the
78
+ GPL.
79
+
80
+ ### Installation
81
+
82
+ Similar to Wordpress you'll have to download a copy of Expression Engine
83
+ yourself. However, EE comes with the requirement of having a user account as
84
+ well as a credit card since Expression Engine is not free nor open source.
85
+ Installing EE comes down to the following:
86
+
87
+ 1. Register for an account
88
+ 2. Buy a license using a credit card
89
+ 3. Download a .zip archive (I'm not sure if they offer Tarballs)
90
+ 3. Extract the archive
91
+
92
+ Again just like Wordpress this has to be done for every installation (except for
93
+ the registration part) though this depends on the license you've chosen.
94
+
95
+ ## Zen vs Radiant
96
+
97
+ While I have to admit that I'm not very familiar with Radiant it appears that
98
+ Radiant comes with a rather limited set of features out of the box and tries to
99
+ label everything as a page giving you some extra flexibility using so called
100
+ "snippets" and "layouts". I can imagine this being easier to use for some but it
101
+ also greatly limits the flexibility meaning that developers will often have to
102
+ resort to installing or developing (third party) extensions.
103
+
104
+ Another difference between the two is that Zen uses "Etanni" as a template
105
+ engine whereas Radiant uses "Radius". Radius is a template engine that uses HTML
106
+ like tags for its logic whereas Etanni uses plain Ruby. Both have their
107
+ advantages as well as their drawbacks.
108
+
109
+ Plain Ruby code is more flexible but it isn't something you want your users to
110
+ be able to execute (don't worry, Zen escapes the template tags for you).
111
+
112
+ Radius on the other hand is something you can use in your content as it can
113
+ only execute what you've explicitly defined. The downside of this is that
114
+ you'll often end up re-inventing things that can be easily done in plain Ruby.
115
+
116
+ One thing to keep in mind is that Zen doesn't limit you in terms of what engines
117
+ you can use, you can easily use other engines such as Radius or Liquid in
118
+ combination with Etanni.
119
+
120
+ ### Installation
121
+
122
+ Just like Zen Radiant can be installed using Rubygems by running the following
123
+ comamnd:
124
+
125
+ $ gem install radiant
126
+
127
+ Other than using a different gem name there are no differences between Zen and
128
+ Radiant when it comes down to installing the two.
129
+
130
+ ## Zen vs Refinery CMS
131
+
132
+ I have to admit that I have very little experience with Refinery CMS. What I
133
+ noticed from using the demo was that the interface it uses looks rather boring
134
+ and doesn't feel very pleasant to use. The settings overview is rather confusing
135
+ and managing settings happens in modal windows while managing other rows, such
136
+ as users, happens on an entirely new page.
137
+
138
+ Another thing I noticed is that Refinery CMS, just like Wordpress and Expression
139
+ Engine, assumes you'll only use two markup formats: plain text and HTML. A big
140
+ problem with common WYSIWYG editors such as CKEditor and TinyMCE is that the
141
+ markup they generate is either plain incorrect or otherwise disgusting. CKEditor
142
+ for example has a tendency to insert empty ``<p>`` or ``<div>`` elements in
143
+ your content for no apparent reason.
144
+
145
+ Out of the box Zen offers support for plain text, HTML, Markdown and Textile
146
+ with the ability to easily add your own markup formats. The text editor was
147
+ written with this in mind and produces very clean markup, the drawback being
148
+ that it does not (and most likely never will) support WYSIWYG features. The
149
+ closest thing to this feature is the "Preview" button which opens a modal window
150
+ with the HTML that was generated based on the used markup.
151
+
152
+ Probably the biggest difference of all is that Refinery CMS does not appear to
153
+ have a very flexible content model (out of the box at least). There are a few
154
+ content types such as "Pages", "Images" and "Inquiries" but it's not very clear
155
+ how flexible (or not) these content types are.
156
+
157
+ ### Installation
158
+
159
+ Similar to Zen and Radiant Refinery CMS is also installed using Rubygems, this
160
+ can be done by running the following command:
161
+
162
+ $ gem install refinerycms
163
+
164
+ Besides the Gem name there are no other differences in the installation process
165
+ that I know of.
166
+
167
+ ## Zen vs Locomotive CMS
168
+
169
+ Locomotive CMS is a rather new application that was released somewhere in the
170
+ end of 2011. It has a similar system like Zen allowing you to create custom
171
+ fields however based on the little experience that I have with Locomotive I'd
172
+ say it's far more limited. I couldn't figure out if there was the ability to add
173
+ your own field types or group them together. Locomotive also doesn't offer a
174
+ flexible way of defining rules for custom fields other than allowing users to
175
+ specify that a certain field is required.
176
+
177
+ The interface used by Locomotive was rather annoying to use and doesn't appear
178
+ to be very useful when presenting large amounts of content due to the fixed
179
+ width of the design. To be honest I'm quite amazed by this since the designer,
180
+ Sacha Grief, seems to be more than capable of designing good looking and useful
181
+ interfaces.
182
+
183
+ Unlike Zen Locomotive doesn't use a relational database but instead uses
184
+ MongoDB. Some might argue that this is better (or worse) but I'm personally not
185
+ too sure about it. I've heard great things about MongoDB but I've also heard and
186
+ read very bad things about it. When I tried it myself I wasn't too impressed
187
+ with it, it gives me the idea somebody wanted to write a relational database
188
+ engine that wasn't a relational database engine.
189
+
190
+ ### Installation
191
+
192
+ The installation process of Locomotive looks rather, well, stupid. Instead of
193
+ allowing you to install it using Rubygems and be done with it you have to go
194
+ through multiple steps, starting with setting up a bare Rails installation,
195
+ adding Locomotive to your Gemfile and so on. In total there's about 6 steps
196
+ needed to install it. See
197
+ <http://www.locomotivecms.com/support/installation/engine> for more information.
198
+
199
+ Compared with Zen, which only requires you to run ``gem install zen``, I wonder
200
+ why they ever thought it was a good idea to require so many steps when it can be
201
+ done so much easier.