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
@@ -1,3 +1,7 @@
1
+ "use strict";
2
+
3
+ namespace('Zen');
4
+
1
5
  /**
2
6
  * Base class for all drivers that provides several common methods and allows
3
7
  * developers to use the same syntax for all editor drivers.
@@ -117,32 +121,32 @@ Zen.Editor = new Class(
117
121
  [
118
122
  {
119
123
  name: 'bold',
120
- label: Zen.translations['zen_general.buttons.bold'],
124
+ label: lang('zen_general.buttons.bold'),
121
125
  onClick: 'bold'
122
126
  },
123
127
  {
124
128
  name: 'italic',
125
- label: Zen.translations['zen_general.buttons.italic'],
129
+ label: lang('zen_general.buttons.italic'),
126
130
  onClick: 'italic'
127
131
  },
128
132
  {
129
133
  name: 'link',
130
- label: Zen.translations['zen_general.buttons.link'],
134
+ label: lang('zen_general.buttons.link'),
131
135
  onClick: 'link'
132
136
  },
133
137
  {
134
138
  name: 'ul',
135
- label: Zen.translations['zen_general.buttons.ul'],
139
+ label: lang('zen_general.buttons.ul'),
136
140
  onClick: 'ul'
137
141
  },
138
142
  {
139
143
  name: 'ol',
140
- label: Zen.translations['zen_general.buttons.ol'],
144
+ label: lang('zen_general.buttons.ol'),
141
145
  onClick: 'ol'
142
146
  },
143
147
  {
144
148
  name: 'preview',
145
- label: Zen.translations['zen_general.buttons.preview'],
149
+ label: lang('zen_general.buttons.preview'),
146
150
  onClick: 'preview'
147
151
  }
148
152
  ],
@@ -188,7 +192,6 @@ Zen.Editor = new Class(
188
192
  // Create the HTML for the editor
189
193
  var toolbar = new Element('div', {'class': 'editor_toolbar'});
190
194
  var container = new Element('div', {'class': 'editor_container'});
191
- var ul = new Element('ul');
192
195
  var current_class = this;
193
196
 
194
197
  // Push the custom buttons
@@ -200,11 +203,11 @@ Zen.Editor = new Class(
200
203
  // Create the HTML for all the buttons
201
204
  this.buttons.each(function(button)
202
205
  {
203
- var li = new Element(
204
- 'li',
206
+ var btn = new Element(
207
+ 'button',
205
208
  {
206
- 'class': button.name,
207
- html: button.label,
209
+ 'class': 'button ' + button.name,
210
+ html: '<span class="button_icon"></span>' + button.label,
208
211
  title: button.label
209
212
  }
210
213
  );
@@ -212,8 +215,10 @@ Zen.Editor = new Class(
212
215
  // Add the onClick event, when clicked the current editor's instance
213
216
  // is passed to the event allowing developers to work with it's
214
217
  // content.
215
- li.addEvent('click', function()
218
+ btn.addEvent('click', function(e)
216
219
  {
220
+ e.preventDefault();
221
+
217
222
  var current_editor = this.getParent('.editor_container')
218
223
  .getElement('textarea');
219
224
 
@@ -227,11 +232,10 @@ Zen.Editor = new Class(
227
232
  }
228
233
  });
229
234
 
230
- li.inject(ul);
235
+ btn.inject(toolbar);
231
236
  });
232
237
 
233
238
  // Inject the HTML into the DOM
234
- ul.inject(toolbar);
235
239
  toolbar.inject(container);
236
240
  container.inject(this.element, 'before');
237
241
 
@@ -363,26 +367,11 @@ Zen.Editor = new Class(
363
367
  data: {engine: engine, markup: markup},
364
368
  onSuccess: function(response)
365
369
  {
366
- new Zen.Window(
367
- response,
368
- {
369
- title: Zen.translations['zen_general.buttons.preview'],
370
- width: 700,
371
- buttons:
372
- [
373
- {
374
- name: 'close',
375
- label: Zen.translations[
376
- 'zen_general.buttons.close'
377
- ],
378
- onClick: function(instance)
379
- {
380
- instance.destroy();
381
- }
382
- }
383
- ]
384
- }
385
- );
370
+ new Zen.Window(response,
371
+ {
372
+ title: lang('zen_general.buttons.preview'),
373
+ width: 700
374
+ });
386
375
  }
387
376
  }).send();
388
377
  }
@@ -1,3 +1,7 @@
1
+ "use strict";
2
+
3
+ namespace('Zen.Editor');
4
+
1
5
  /**
2
6
  * Markdown driver for the text editor that ships with Zen.
3
7
  *
@@ -61,7 +65,7 @@ Zen.Editor.Markdown = new Class(
61
65
  },
62
66
 
63
67
  /**
64
- * Overrides Zen.Editor.ol.
68
+ * Overrides Zen.Editor.ol.
65
69
  *
66
70
  * @since 0.2.6
67
71
  * @param {element} editor The textarea to insert the tags into.
@@ -1,3 +1,7 @@
1
+ "use strict";
2
+
3
+ namespace('Zen.Editor');
4
+
1
5
  /**
2
6
  * Textile driver for the text editor that ships with Zen.
3
7
  *
@@ -0,0 +1,218 @@
1
+ "use strict";
2
+
3
+ namespace('Zen');
4
+
5
+ /**
6
+ * Adds support for the onhashchange event when using ``window.addEvent()``.
7
+ *
8
+ * Basic usage is as following:
9
+ *
10
+ * window.addEvent('hashchange', function(e, hash)
11
+ * {
12
+ * console.log(hash);
13
+ * });
14
+ *
15
+ * Do note that this implementation does not offer any backwards compatibility
16
+ * with browsers that don't natively support ``window.onhashchange``.
17
+ *
18
+ * @since 21-12-2011
19
+ */
20
+ Element.Events.hashchange = {
21
+ onAdd: function()
22
+ {
23
+ var _this = this;
24
+
25
+ this.onhashchange = function()
26
+ {
27
+ this.fireEvent('hashchange');
28
+ };
29
+ }
30
+ };
31
+
32
+ /**
33
+ * Zen.Hash is a class that can be used to parse and generate shebang/hash bang
34
+ * URLs. Parsing is done using ``Zen.Hash#parse`` and generating URLs using
35
+ * ``Zen.Hash#getHash``.
36
+ *
37
+ * ## Parsing
38
+ *
39
+ * Parsing a URL is relatively simple and the end output is similar to how you'd
40
+ * parse URLs with query string parameters. First create a new instance of this
41
+ * class:
42
+ *
43
+ * var hash = new Zen.Hash('#!/users/active?limit=10');
44
+ *
45
+ * The supplied string will be parsed straight away and the result can be
46
+ * retrieved from two attributes:
47
+ *
48
+ * * segments
49
+ * * params
50
+ *
51
+ * The first attribute contains an array with all the URL segments, the second
52
+ * one is an object containing all the query string parameters. In case of the
53
+ * above example that would lead to the following data being stored in these
54
+ * attributes:
55
+ *
56
+ * console.log(hash.segments); // => ["users", "active"]
57
+ * console.log(hash.params); // => {limit: '10'}
58
+ *
59
+ * Keep in mind that calling ``Zen.Hash#parse`` will overwrite existing segments
60
+ * and parameters.
61
+ *
62
+ * ## Generating
63
+ *
64
+ * Generating a full shebang URL is pretty straight forward and can be done by
65
+ * calling ``getHash()``. This method returns a string containing the shebang
66
+ * URL including the prefix:
67
+ *
68
+ * hash.getHash(); // => "#!/users/active?limit=10"
69
+ *
70
+ * @since 19-12-2011
71
+ */
72
+ Zen.Hash = new Class(
73
+ {
74
+ /**
75
+ * String containing the raw URL hash before it was parsed.
76
+ *
77
+ * @since 19-12-2011
78
+ */
79
+ raw_hash: '',
80
+
81
+ /**
82
+ * Object containing all the parsed hash parameters.
83
+ *
84
+ * @since 19-12-2011
85
+ */
86
+ params: {},
87
+
88
+ /**
89
+ * Array containing all the hash segments.
90
+ *
91
+ * @since 19-12-2011
92
+ */
93
+ segments: [],
94
+
95
+ /**
96
+ * Creates a new instance of the class, sets the raw hash and parses it.
97
+ *
98
+ * @since 19-12-2011
99
+ * @param {string} hash The URL hash to parse.
100
+ */
101
+ initialize: function(hash)
102
+ {
103
+ if ( hash && hash.length > 0 ) this.parse(hash);
104
+ },
105
+
106
+ /**
107
+ * Parses the supplied hash and stores the results in ``this.params``.
108
+ *
109
+ * @since 19-12-2011
110
+ * @param {string} hash The hash to parse.
111
+ */
112
+ parse: function(hash)
113
+ {
114
+ if ( typeOf(hash) !== 'string' )
115
+ {
116
+ throw new Error(
117
+ 'Expected a string to parse but got ' + typeOf(hash) + ' instead'
118
+ );
119
+ }
120
+
121
+ this.raw_hash = hash;
122
+ this.params = {};
123
+ this.segments = [];
124
+
125
+ hash = hash.replace(/^#/, '').split('?');
126
+
127
+ // Index 0 always contains the path, index 1 the parameters.
128
+ if ( hash[0] && hash[0].length > 0 )
129
+ {
130
+ this.segments = hash[0].split('/');
131
+ }
132
+
133
+ if ( hash[1] && hash[1].length > 0 )
134
+ {
135
+ var _this = this;
136
+ hash[1] = hash[1].split('&');
137
+
138
+ hash[1].each(function(key_value)
139
+ {
140
+ key_value = key_value.split('=');
141
+
142
+ // Assign the key and value. If the key already exists it should
143
+ // be turned into an array.
144
+ if ( _this.params[key_value[0]] )
145
+ {
146
+ if ( typeOf(_this.params[key_value[0]]) !== 'array' )
147
+ {
148
+ _this.params[key_value[0]] = [
149
+ _this.params[key_value[0]],
150
+ key_value[1]
151
+ ];
152
+ }
153
+ else
154
+ {
155
+ _this.params[key_value[0]].push(key_value[1]);
156
+ }
157
+ }
158
+ else
159
+ {
160
+ _this.params[key_value[0]] = key_value[1];
161
+ }
162
+ });
163
+ }
164
+ },
165
+
166
+ /**
167
+ * Returns a string containing the hash URL for the current segments and
168
+ * parameters.
169
+ *
170
+ * @since 19-12-2011
171
+ * @return {string}
172
+ */
173
+ getHash: function()
174
+ {
175
+ if ( typeOf(this.segments) !== 'array' )
176
+ {
177
+ throw new Error(
178
+ 'Expected an array for the URL segments but got '
179
+ + typeOf(this.segments)
180
+ + ' instead'
181
+ );
182
+ }
183
+
184
+ if ( typeOf(this.params) !== 'object' )
185
+ {
186
+ throw new Error(
187
+ 'Expected an object for the hash parameters but got '
188
+ + typeOf(this.params)
189
+ + ' instead'
190
+ );
191
+ }
192
+
193
+ var hash = '#' + this.segments.join('/');
194
+ var groups = [];
195
+
196
+ Object.each(this.params, function(value, key)
197
+ {
198
+ if ( typeOf(value) === 'array' )
199
+ {
200
+ value.each(function(val)
201
+ {
202
+ groups.push(key + '=' + val);
203
+ });
204
+ }
205
+ else
206
+ {
207
+ groups.push(key + '=' + value);
208
+ }
209
+ });
210
+
211
+ if ( groups.length > 0 )
212
+ {
213
+ hash += '?' + groups.join('&');
214
+ }
215
+
216
+ return hash;
217
+ }
218
+ });
@@ -1,3 +1,7 @@
1
+ "use strict";
2
+
3
+ namespace('Zen');
4
+
1
5
  /**
2
6
  * Zen.HtmlTable is an extension to the HtmlTable class provided by Mootools
3
7
  * More. This extension makes it possible to sort tables, check all checkboxes
@@ -80,6 +84,7 @@ Zen.HtmlTable = new Class(
80
84
  classHeadSort : 'asc',
81
85
  classHeadSortRev: 'desc',
82
86
  classNoSort : 'no_sort',
87
+ classCellSort : 'sorted',
83
88
  sortable : true,
84
89
  parsers : []
85
90
  };
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+
3
+ namespace('Zen');
4
+
5
+ /**
6
+ * Zen.Tabs is a Mootools class for rendering tab based navigation menus. Tabs
7
+ * managed by this class can be activated by both clicking on the various tabs
8
+ * or by changing the URL hash (clicking a tab actually does the latter).
9
+ *
10
+ * The use of URL hashes (stored in ``window.location.hash``) also make it
11
+ * possible for non default tabs to be set as the active tab whenever a page is
12
+ * reloaded. If no URL hash is set then a CSS selector will be used to
13
+ * determine the default tab field to activate. If there is a URL hash present
14
+ * that will be used instead.
15
+ *
16
+ * For example, take the following URL:
17
+ *
18
+ * * http://hello.com/admin/extensions/
19
+ *
20
+ * and the following tab fields (where each item is the ID of the field):
21
+ *
22
+ * * packages
23
+ * * themes
24
+ * * languages
25
+ *
26
+ * These fields could be activated by navigating to one of the following URLs
27
+ * (or just by clicking the corresponding tab which will then do this for you):
28
+ *
29
+ * * http://hello.com/admin/extensions#packages
30
+ * * http://hello.com/admin/extensions#themes
31
+ * * http://hello.com/admin/extensions#languages
32
+ *
33
+ * ## General Usage
34
+ *
35
+ * Using this class is pretty straight forward, just create a new instance of it
36
+ * and pass a CSS selector to the constructor:
37
+ *
38
+ * new Zen.Tabs('.tabs ul');
39
+ *
40
+ * If you want to change any options you can set these as the second parameter:
41
+ *
42
+ * new Zen.Tabs('.tabs ul', {'default': 'li:last-child'});
43
+ *
44
+ * ## Options
45
+ *
46
+ * * default: a CSS selector that should result in a ``<li>`` element to
47
+ * activate by default if no ID is specified in the URL hash.
48
+ */
49
+ Zen.Tabs = new Class(
50
+ {
51
+ Implements: Options,
52
+
53
+ /**
54
+ * Object containing all options for each tab instance.
55
+ *
56
+ * @since 0.1
57
+ */
58
+ options:
59
+ {
60
+ // The default tab/field to display
61
+ 'default': 'li:first-child',
62
+ },
63
+
64
+ /**
65
+ * Contains the element that contains all the tab items.
66
+ *
67
+ * @since 0.1
68
+ */
69
+ element: null,
70
+
71
+ /**
72
+ * Constructor method called upon initialization. Options can be
73
+ * set as a JSON object in the first argument.
74
+ *
75
+ * @since 0.1
76
+ * @param {string} selector A CSS selector that should result in a ``<ul>``
77
+ * element containing various tabs.
78
+ * @param {object} options Custom options used when creating the tabs
79
+ */
80
+ initialize: function(selector, options)
81
+ {
82
+ this.setOptions(options);
83
+
84
+ var found = $$(selector);
85
+
86
+ if ( found.length <= 0 )
87
+ {
88
+ throw new Error(
89
+ 'No elements could be found for the selector ' + selector
90
+ );
91
+ }
92
+
93
+ this.element = found[0];
94
+
95
+ this.displayDefault();
96
+ this.addEvents();
97
+ },
98
+
99
+ /**
100
+ * Binds various events to show the right tab fields when a tab is clicked
101
+ * or when the URL hash is changed.
102
+ *
103
+ * @since 21-12-2011
104
+ */
105
+ addEvents: function()
106
+ {
107
+ var _this = this;
108
+
109
+ // Only bind the event if the browser doesn't support the onhashchange
110
+ // event.
111
+ if ( !"onhashchange" in window )
112
+ {
113
+ this.element.getElements('a').addEvent('click', function(e)
114
+ {
115
+ e.stop();
116
+
117
+ window.location.hash = this.get('href');
118
+ window.fireEvent('hashchange');
119
+ });
120
+ }
121
+
122
+ window.addEvent('hashchange', function()
123
+ {
124
+ var id = new Zen.Hash(window.location.hash).segments[0];
125
+
126
+ if ( id && $(id) )
127
+ {
128
+ _this.toggleTab(id);
129
+ }
130
+ });
131
+ },
132
+
133
+ /**
134
+ * Determines the default tab field to display based on the option
135
+ * ``this.options.default`` or the current hash URL.
136
+ *
137
+ * @since 21-12-2011
138
+ */
139
+ displayDefault: function()
140
+ {
141
+ var id = null;
142
+
143
+ // Don't bother parsing the URL hash if there is none to begin with.
144
+ if ( window.location.hash && window.location.hash.length > 0 )
145
+ {
146
+ id = new Zen.Hash(window.location.hash).segments[0];
147
+ }
148
+
149
+ if ( !id || id.length <= 0 )
150
+ {
151
+ var active = this.element.getElements(this.options['default']);
152
+
153
+ if ( active.length > 0 )
154
+ {
155
+ active[0].addClass('active');
156
+
157
+ id = active[0].getElement('a').get('href').replace(/^#/, '');
158
+ }
159
+ }
160
+
161
+ this.toggleTab(id);
162
+ },
163
+
164
+ /**
165
+ * Activates the tab field for the given ID.
166
+ *
167
+ * @since 21-12-2011
168
+ * @param {string} id The ID of the tab field to show.
169
+ */
170
+ toggleTab: function(id)
171
+ {
172
+ this.element.getElements('a').each(function(el)
173
+ {
174
+ var el_id = el.get('href').replace(/^#/, '');
175
+
176
+ if ( el_id === id )
177
+ {
178
+ el.getParent().addClass('active');
179
+
180
+ var found = $(id);
181
+
182
+ if ( found ) found.show();
183
+ }
184
+ else
185
+ {
186
+ el.getParent().removeClass('active');
187
+
188
+ var found = $(el_id);
189
+
190
+ if ( found ) found.hide();
191
+ }
192
+ });
193
+ },
194
+ });