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,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.