zen 0.2.8 → 0.3b

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 (422) hide show
  1. data/.gems +20 -0
  2. data/.mailmap +3 -2
  3. data/.rvmrc +1 -1
  4. data/.travis.yml +13 -2
  5. data/.yardopts +13 -0
  6. data/AUTHORS +1 -1
  7. data/README.md +115 -77
  8. data/Rakefile +6 -7
  9. data/bin/zen +12 -5
  10. data/guide/_static/categories/categories.png +0 -0
  11. data/guide/_static/categories/category_groups.png +0 -0
  12. data/guide/_static/categories/new_category.png +0 -0
  13. data/guide/_static/categories/new_category_group.png +0 -0
  14. data/guide/_static/comments/comments.png +0 -0
  15. data/guide/_static/comments/edit_comment.png +0 -0
  16. data/guide/_static/custom_fields/custom_field_groups.png +0 -0
  17. data/guide/_static/custom_fields/custom_field_types.png +0 -0
  18. data/guide/_static/custom_fields/custom_fields.png +0 -0
  19. data/guide/_static/custom_fields/edit_custom_field_general.png +0 -0
  20. data/guide/_static/custom_fields/edit_custom_field_group.png +0 -0
  21. data/guide/_static/custom_fields/edit_custom_field_settings.png +0 -0
  22. data/guide/_static/custom_fields/edit_custom_field_type.png +0 -0
  23. data/guide/_static/menus/edit_menu.png +0 -0
  24. data/guide/_static/menus/edit_menu_item.png +0 -0
  25. data/guide/_static/menus/menu_items.png +0 -0
  26. data/guide/_static/menus/menus.png +0 -0
  27. data/guide/_static/sections/edit_entry.png +0 -0
  28. data/guide/_static/sections/edit_entry_categories.png +0 -0
  29. data/guide/_static/sections/edit_entry_general.png +0 -0
  30. data/guide/_static/sections/edit_entry_meta.png +0 -0
  31. data/guide/_static/sections/edit_section_comments.png +0 -0
  32. data/guide/_static/sections/edit_section_general.png +0 -0
  33. data/guide/_static/sections/edit_section_groups.png +0 -0
  34. data/guide/_static/sections/entries.png +0 -0
  35. data/guide/_static/sections/sections.png +0 -0
  36. data/guide/_static/settings/overview_general.png +0 -0
  37. data/guide/_static/settings/overview_security.png +0 -0
  38. data/guide/_static/settings/overview_user.png +0 -0
  39. data/guide/_static/users/edit_user.png +0 -0
  40. data/guide/_static/users/edit_user_group.png +0 -0
  41. data/guide/_static/users/edit_user_group_permissions.png +0 -0
  42. data/guide/_static/users/edit_user_permissions.png +0 -0
  43. data/guide/_static/users/overview.png +0 -0
  44. data/guide/_static/users/user_groups_overview.png +0 -0
  45. data/guide/asset_management.md +117 -0
  46. data/{CHANGELOG.md → guide/changelog.md} +42 -0
  47. data/guide/css/common.css +20 -0
  48. data/guide/getting_started.md +61 -0
  49. data/guide/hacking.md +52 -0
  50. data/guide/installation.md +44 -0
  51. data/guide/javascript.md +352 -0
  52. data/lib/vendor/sequel_sluggable.rb +137 -0
  53. data/lib/yard/tags.rb +13 -0
  54. data/lib/zen.rb +148 -78
  55. data/lib/zen/asset_groups.rb +85 -0
  56. data/lib/zen/bin/create.rb +267 -56
  57. data/lib/zen/bin/default.rb +84 -0
  58. data/lib/zen/controller/admin_controller.rb +1 -82
  59. data/lib/zen/controller/base_controller.rb +9 -5
  60. data/lib/zen/controller/frontend_controller.rb +0 -1
  61. data/lib/zen/controller/main_controller.rb +30 -42
  62. data/lib/zen/controller/preview.rb +9 -8
  63. data/lib/zen/controller/translations.rb +49 -0
  64. data/lib/zen/error.rb +17 -0
  65. data/lib/zen/event.rb +118 -0
  66. data/lib/zen/helper/asset.rb +63 -0
  67. data/lib/zen/helper/breadcrumb.rb +1 -4
  68. data/lib/zen/helper/controller.rb +73 -0
  69. data/lib/zen/helper/locale.rb +42 -0
  70. data/lib/zen/helper/message.rb +0 -3
  71. data/lib/zen/helper/search.rb +54 -0
  72. data/lib/zen/helper/stacked_aspect.rb +249 -0
  73. data/lib/zen/helper/theme.rb +3 -10
  74. data/lib/zen/language.rb +356 -181
  75. data/lib/zen/language/en/zen_general.rb +52 -0
  76. data/lib/zen/language/en/zen_models.rb +19 -0
  77. data/lib/zen/language/nl/zen_general.rb +57 -0
  78. data/lib/zen/language/nl/zen_models.rb +22 -0
  79. data/lib/zen/language/translation.rb +132 -0
  80. data/lib/zen/languages.rb +9 -0
  81. data/lib/zen/layout/admin.xhtml +3 -3
  82. data/lib/zen/layout/login.xhtml +1 -1
  83. data/lib/zen/markup.rb +189 -0
  84. data/lib/zen/model/helper.rb +65 -0
  85. data/lib/zen/model/init.rb +62 -0
  86. data/lib/zen/model/methods.rb +6 -7
  87. data/lib/zen/package.rb +312 -201
  88. data/lib/zen/package/all.rb +4 -3
  89. data/lib/zen/package/categories/lib/categories.rb +29 -41
  90. data/lib/zen/package/categories/lib/categories/controller/categories.rb +185 -130
  91. data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +172 -102
  92. data/lib/zen/package/categories/lib/categories/helper/category.rb +4 -9
  93. data/lib/zen/package/categories/lib/categories/helper/category_frontend.rb +86 -0
  94. data/lib/zen/package/categories/lib/categories/language/en/categories.rb +40 -0
  95. data/lib/zen/package/categories/lib/categories/language/en/category_groups.rb +39 -0
  96. data/lib/zen/package/categories/lib/categories/language/nl/categories.rb +42 -0
  97. data/lib/zen/package/categories/lib/categories/language/nl/category_groups.rb +42 -0
  98. data/lib/zen/package/categories/lib/categories/model/category.rb +21 -25
  99. data/lib/zen/package/categories/lib/categories/model/category_group.rb +21 -15
  100. data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +25 -26
  101. data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +24 -24
  102. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/form.xhtml +18 -20
  103. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +21 -18
  104. data/lib/zen/package/comments/lib/comments.rb +30 -50
  105. data/lib/zen/package/comments/lib/comments/anti_spam.rb +138 -0
  106. data/lib/zen/package/comments/lib/comments/controller/comments.rb +159 -92
  107. data/lib/zen/package/comments/lib/comments/controller/comments_form.rb +122 -34
  108. data/lib/zen/package/comments/lib/comments/helper/comment.rb +0 -3
  109. data/lib/zen/package/comments/lib/comments/helper/comment_frontend.rb +90 -0
  110. data/lib/zen/package/comments/lib/comments/language/en/comments.rb +57 -0
  111. data/lib/zen/package/comments/lib/comments/language/nl/comments.rb +61 -0
  112. data/lib/zen/package/comments/lib/comments/model/comment.rb +147 -49
  113. data/lib/zen/package/comments/lib/comments/model/comment_status.rb +0 -2
  114. data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +37 -40
  115. data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +23 -42
  116. data/lib/zen/package/comments/migrations/1308774099_comment_status.rb +12 -4
  117. data/lib/zen/package/comments/migrations/1313851786_remove_defensio_signature.rb +11 -0
  118. data/lib/zen/package/custom_fields/lib/custom_fields.rb +40 -43
  119. data/lib/zen/package/custom_fields/lib/custom_fields/blue_form_parameters.rb +72 -17
  120. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +154 -118
  121. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_types.rb +147 -90
  122. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +161 -131
  123. data/lib/zen/package/custom_fields/lib/custom_fields/helper/custom_field.rb +4 -9
  124. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_groups.rb +42 -0
  125. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_types.rb +51 -0
  126. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_fields.rb +60 -0
  127. data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_groups.rb +41 -0
  128. data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_types.rb +49 -0
  129. data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_fields.rb +61 -0
  130. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field.rb +18 -23
  131. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_group.rb +20 -19
  132. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_method.rb +1 -3
  133. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_type.rb +19 -9
  134. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_value.rb +18 -15
  135. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/form.xhtml +18 -18
  136. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +30 -24
  137. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/form.xhtml +15 -10
  138. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/index.xhtml +24 -19
  139. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +18 -13
  140. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +30 -20
  141. data/lib/zen/package/extensions/lib/extensions.rb +20 -0
  142. data/lib/zen/package/extensions/lib/extensions/controller/extensions.rb +41 -0
  143. data/lib/zen/package/extensions/lib/extensions/language/en/extensions.rb +23 -0
  144. data/lib/zen/package/extensions/lib/extensions/language/nl/extensions.rb +25 -0
  145. data/lib/zen/package/extensions/lib/extensions/view/admin/extensions/index.xhtml +86 -0
  146. data/lib/zen/package/menu.rb +109 -0
  147. data/lib/zen/package/menus/lib/menus.rb +25 -34
  148. data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +143 -107
  149. data/lib/zen/package/menus/lib/menus/controller/menus.rb +166 -115
  150. data/lib/zen/package/menus/lib/menus/helper/menu.rb +2 -8
  151. data/lib/zen/package/menus/lib/menus/helper/menu_frontend.rb +114 -0
  152. data/lib/zen/package/menus/lib/menus/language/en/menu_items.rb +48 -0
  153. data/lib/zen/package/menus/lib/menus/language/en/menus.rb +48 -0
  154. data/lib/zen/package/menus/lib/menus/language/nl/menu_items.rb +48 -0
  155. data/lib/zen/package/menus/lib/menus/language/nl/menus.rb +50 -0
  156. data/lib/zen/package/menus/lib/menus/model/menu.rb +24 -17
  157. data/lib/zen/package/menus/lib/menus/model/menu_item.rb +37 -13
  158. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +32 -25
  159. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +23 -17
  160. data/lib/zen/package/menus/lib/menus/view/admin/menus/form.xhtml +31 -26
  161. data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +20 -22
  162. data/lib/zen/package/sections/lib/sections.rb +25 -68
  163. data/lib/zen/package/sections/lib/sections/controller/section_entries.rb +178 -138
  164. data/lib/zen/package/sections/lib/sections/controller/sections.rb +173 -140
  165. data/lib/zen/package/sections/lib/sections/helper/section.rb +3 -6
  166. data/lib/zen/package/sections/lib/sections/helper/section_frontend.rb +146 -0
  167. data/lib/zen/package/sections/lib/sections/language/en/section_entries.rb +50 -0
  168. data/lib/zen/package/sections/lib/sections/language/en/sections.rb +55 -0
  169. data/lib/zen/package/sections/lib/sections/language/nl/section_entries.rb +50 -0
  170. data/lib/zen/package/sections/lib/sections/language/nl/sections.rb +55 -0
  171. data/lib/zen/package/sections/lib/sections/model/section.rb +36 -36
  172. data/lib/zen/package/sections/lib/sections/model/section_entry.rb +52 -59
  173. data/lib/zen/package/sections/lib/sections/model/section_entry_status.rb +2 -2
  174. data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +24 -21
  175. data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +24 -26
  176. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/form.xhtml +33 -31
  177. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +24 -25
  178. data/lib/zen/package/sections/migrations/1308672298_use_id_for_default_section.rb +14 -10
  179. data/lib/zen/package/sections/migrations/1308813320_section_entry_statuses.rb +12 -6
  180. data/lib/zen/package/settings/lib/settings.rb +25 -120
  181. data/lib/zen/package/settings/lib/settings/blue_form_parameters.rb +157 -0
  182. data/lib/zen/package/settings/lib/settings/controller/settings.rb +94 -69
  183. data/lib/zen/package/settings/lib/settings/language/en/settings.rb +41 -0
  184. data/lib/zen/package/settings/lib/settings/language/nl/settings.rb +41 -0
  185. data/lib/zen/package/settings/lib/settings/model/setting.rb +0 -2
  186. data/lib/zen/package/settings/lib/settings/setting.rb +379 -0
  187. data/lib/zen/package/settings/lib/settings/setting_groups.rb +11 -0
  188. data/lib/zen/package/settings/lib/settings/settings.rb +83 -0
  189. data/lib/zen/package/settings/lib/settings/settings_group.rb +84 -0
  190. data/lib/zen/package/settings/lib/settings/singleton_methods.rb +35 -0
  191. data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +15 -57
  192. data/lib/zen/package/settings/migrations/1321197919_remove_unused_columns.rb +17 -0
  193. data/lib/zen/package/users/lib/users.rb +51 -36
  194. data/lib/zen/package/users/lib/users/controller/user_groups.rb +133 -98
  195. data/lib/zen/package/users/lib/users/controller/users.rb +253 -136
  196. data/lib/zen/package/users/lib/users/helper/access.rb +102 -0
  197. data/lib/zen/package/users/lib/users/helper/acl.rb +113 -0
  198. data/lib/zen/package/users/lib/users/helper/users.rb +41 -24
  199. data/lib/zen/package/users/lib/users/language/en/permissions.rb +16 -0
  200. data/lib/zen/package/users/lib/users/language/en/user_groups.rb +39 -0
  201. data/lib/zen/package/users/lib/users/language/en/users.rb +73 -0
  202. data/lib/zen/package/users/lib/users/language/nl/permissions.rb +16 -0
  203. data/lib/zen/package/users/lib/users/language/nl/user_groups.rb +41 -0
  204. data/lib/zen/package/users/lib/users/language/nl/users.rb +74 -0
  205. data/lib/zen/package/users/lib/users/model/permission.rb +28 -0
  206. data/lib/zen/package/users/lib/users/model/user.rb +104 -65
  207. data/lib/zen/package/users/lib/users/model/user_group.rb +28 -24
  208. data/lib/zen/package/users/lib/users/model/user_status.rb +27 -0
  209. data/lib/zen/package/users/lib/users/public/admin/css/users/permissions.css +22 -0
  210. data/lib/zen/package/users/lib/users/public/admin/js/users/permissions.js +33 -0
  211. data/lib/zen/package/users/lib/users/settings.rb +19 -0
  212. data/lib/zen/package/users/lib/users/view/admin/user-groups/form.xhtml +58 -28
  213. data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +19 -15
  214. data/lib/zen/package/users/lib/users/view/admin/users/form.xhtml +93 -62
  215. data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +23 -36
  216. data/lib/zen/package/users/lib/users/view/admin/users/login.xhtml +13 -6
  217. data/lib/zen/package/users/lib/users/view/admin/users/permissions.xhtml +33 -0
  218. data/lib/zen/package/users/lib/users/view/admin/users/register.xhtml +52 -0
  219. data/lib/zen/package/users/migrations/1313786058_update_default_date.rb +41 -0
  220. data/lib/zen/package/users/migrations/1316432327_permissions.rb +36 -0
  221. data/lib/zen/package/users/migrations/1320272365_status_ids.rb +67 -0
  222. data/lib/zen/public/admin/css/zen/buttons.css +3 -11
  223. data/lib/zen/public/admin/css/zen/datepicker.css +23 -13
  224. data/lib/zen/public/admin/css/zen/editor.css +6 -14
  225. data/lib/zen/public/admin/css/zen/forms.css +19 -12
  226. data/lib/zen/public/admin/css/zen/general.css +22 -18
  227. data/lib/zen/public/admin/css/zen/grid.css +1 -20
  228. data/lib/zen/public/admin/css/zen/layout.css +26 -11
  229. data/lib/zen/public/admin/css/zen/messages.css +3 -10
  230. data/lib/zen/public/admin/css/zen/reset.css +13 -15
  231. data/lib/zen/public/admin/css/zen/tables.css +8 -10
  232. data/lib/zen/public/admin/css/zen/tabs.css +2 -10
  233. data/lib/zen/public/admin/css/zen/window.css +2 -8
  234. data/lib/zen/public/admin/js/vendor/datepicker.js +540 -240
  235. data/lib/zen/public/admin/js/vendor/mootools/core.js +273 -283
  236. data/lib/zen/public/admin/js/vendor/mootools/more.js +131 -136
  237. data/lib/zen/public/admin/js/zen/index.js +8 -14
  238. data/lib/zen/public/admin/js/zen/lib/editor.js +36 -33
  239. data/lib/zen/public/admin/js/zen/lib/editor/markdown.js +0 -6
  240. data/lib/zen/public/admin/js/zen/lib/editor/textile.js +0 -6
  241. data/lib/zen/public/admin/js/zen/lib/html_table.js +0 -5
  242. data/lib/zen/public/admin/js/zen/lib/tabs.js +22 -79
  243. data/lib/zen/public/admin/js/zen/lib/window.js +12 -22
  244. data/lib/zen/spec/bacon/color_output.rb +1 -1
  245. data/lib/zen/spec/helper.rb +6 -11
  246. data/lib/zen/spec/simplecov.rb +3 -3
  247. data/lib/zen/task.rb +0 -1
  248. data/lib/zen/task/build.rake +46 -26
  249. data/lib/zen/task/clean.rake +14 -7
  250. data/lib/zen/task/db.rake +31 -29
  251. data/lib/zen/task/package.rake +19 -23
  252. data/lib/zen/task/proto.rake +3 -5
  253. data/lib/zen/task/setup.rake +4 -0
  254. data/lib/zen/task/test.rake +31 -6
  255. data/lib/zen/task/theme.rake +13 -19
  256. data/lib/zen/theme.rb +377 -52
  257. data/lib/zen/validation.rb +22 -30
  258. data/lib/zen/version.rb +1 -2
  259. data/lib/zen/view/bottom.xhtml +9 -1
  260. data/lib/zen/view/head.xhtml +1 -1
  261. data/lib/zen/view/main.xhtml +1 -1
  262. data/lib/zen/view/search.xhtml +9 -0
  263. data/proto/app/Rakefile +0 -1
  264. data/proto/app/app.rb +21 -16
  265. data/proto/app/config/config.rb.erb +41 -0
  266. data/proto/app/config/{database.rb → database.rb.erb} +17 -14
  267. data/proto/app/config/middlewares.rb +1 -1
  268. data/proto/app/theme/default/index.xhtml +25 -0
  269. data/proto/app/theme/theme.rb +19 -0
  270. data/proto/app/{log/database/dev → tmp}/.gitkeep +0 -0
  271. data/proto/migration.rb +3 -5
  272. data/proto/rack/thin.yml +41 -0
  273. data/proto/rack/unicorn.rb +38 -0
  274. data/spec/Rakefile +15 -11
  275. data/spec/fixtures/zen/helper/controller.rb +13 -0
  276. data/spec/fixtures/zen/helper/locale.rb +7 -0
  277. data/spec/fixtures/zen/helper/message.rb +0 -4
  278. data/spec/fixtures/zen/language.rb +31 -0
  279. data/spec/fixtures/zen/language/en/spec.rb +11 -0
  280. data/spec/fixtures/zen/language/nl/spec.rb +11 -0
  281. data/spec/fixtures/zen/package.rb +0 -10
  282. data/spec/fixtures/zen/package/categories/helper/category_frontend.rb +16 -0
  283. data/spec/fixtures/zen/package/comments/helper/comment_frontend.rb +16 -0
  284. data/spec/fixtures/zen/package/sections/helper/section_frontend.rb +16 -0
  285. data/spec/fixtures/zen/package/settings/controller/settings.rb +17 -0
  286. data/spec/fixtures/zen/package/users/helper/access.rb +18 -0
  287. data/spec/fixtures/zen/package/users/helper/acl.rb +23 -0
  288. data/spec/fixtures/zen/theme/{default-section → default}/index.xhtml +0 -0
  289. data/spec/helper.rb +12 -27
  290. data/{proto/app/log/database/live → spec/public}/.gitkeep +0 -0
  291. data/spec/zen/controller/admin_controller.rb +5 -6
  292. data/spec/zen/controller/main_controller.rb +29 -35
  293. data/spec/zen/controller/preview.rb +9 -10
  294. data/spec/zen/event.rb +44 -0
  295. data/spec/zen/helper/breadcrumb.rb +4 -5
  296. data/spec/zen/helper/controller.rb +21 -0
  297. data/spec/zen/helper/locale.rb +25 -0
  298. data/spec/zen/helper/message.rb +4 -11
  299. data/spec/zen/helper/theme.rb +11 -14
  300. data/spec/zen/language.rb +48 -22
  301. data/spec/zen/markup.rb +39 -0
  302. data/spec/zen/package.rb +48 -11
  303. data/spec/zen/package/categories/controller/categories.rb +99 -45
  304. data/spec/zen/package/categories/controller/category_groups.rb +109 -33
  305. data/spec/zen/package/categories/helper/category.rb +19 -32
  306. data/spec/zen/package/categories/helper/category_frontend.rb +61 -0
  307. data/spec/zen/package/comments/anti_spam.rb +50 -0
  308. data/spec/zen/package/comments/controller/comments.rb +121 -61
  309. data/spec/zen/package/comments/controller/comments_form.rb +120 -94
  310. data/spec/zen/package/comments/helper/comment.rb +13 -13
  311. data/spec/zen/package/comments/helper/comment_frontend.rb +92 -0
  312. data/spec/zen/package/custom_fields/blue_form_parameters.rb +50 -50
  313. data/spec/zen/package/custom_fields/controller/custom_field_groups.rb +135 -43
  314. data/spec/zen/package/custom_fields/controller/custom_field_types.rb +153 -48
  315. data/spec/zen/package/custom_fields/controller/custom_fields.rb +130 -51
  316. data/spec/zen/package/custom_fields/helper/custom_field.rb +8 -8
  317. data/spec/zen/package/extensions/controller/extensions.rb +38 -0
  318. data/spec/zen/package/menus/controller/menu_items.rb +121 -42
  319. data/spec/zen/package/menus/controller/menus.rb +125 -38
  320. data/spec/zen/package/menus/helper/menu.rb +26 -26
  321. data/spec/zen/package/menus/helper/menu_frontend.rb +104 -0
  322. data/spec/zen/package/sections/controller/section_entries.rb +145 -89
  323. data/spec/zen/package/sections/controller/sections.rb +130 -35
  324. data/spec/zen/package/sections/helper/section.rb +27 -38
  325. data/spec/zen/package/sections/helper/section_frontend.rb +160 -0
  326. data/spec/zen/package/settings/controller/settings.rb +73 -8
  327. data/spec/zen/package/settings/settings.rb +119 -0
  328. data/spec/zen/package/users/controller/user_groups.rb +134 -34
  329. data/spec/zen/package/users/controller/users.rb +189 -44
  330. data/spec/zen/package/users/helper/access.rb +29 -0
  331. data/spec/zen/package/users/helper/acl.rb +46 -0
  332. data/spec/zen/package/users/helper/users.rb +20 -64
  333. data/spec/zen/theme.rb +7 -9
  334. data/spec/zen/validation.rb +1 -2
  335. data/zen.gemspec +25 -22
  336. metadata +303 -222
  337. data/lib/zen/asset.rb +0 -292
  338. data/lib/zen/bin/runner.rb +0 -118
  339. data/lib/zen/error/language_error.rb +0 -10
  340. data/lib/zen/error/package_error.rb +0 -10
  341. data/lib/zen/error/plugin_error.rb +0 -10
  342. data/lib/zen/error/theme_error.rb +0 -10
  343. data/lib/zen/error/validation_error.rb +0 -10
  344. data/lib/zen/helper/acl.rb +0 -182
  345. data/lib/zen/helper/blue_form_vendor.rb +0 -689
  346. data/lib/zen/language/en/zen_general.yml +0 -25
  347. data/lib/zen/language/en/zen_models.yml +0 -13
  348. data/lib/zen/language/nl/zen_general.yml +0 -25
  349. data/lib/zen/language/nl/zen_models.yml +0 -13
  350. data/lib/zen/model/settings.rb +0 -78
  351. data/lib/zen/package/base.rb +0 -62
  352. data/lib/zen/package/categories/lib/categories/language/en/categories.yml +0 -36
  353. data/lib/zen/package/categories/lib/categories/language/en/category_groups.yml +0 -34
  354. data/lib/zen/package/categories/lib/categories/language/nl/categories.yml +0 -40
  355. data/lib/zen/package/categories/lib/categories/language/nl/category_groups.yml +0 -34
  356. data/lib/zen/package/categories/lib/categories/plugin/categories.rb +0 -141
  357. data/lib/zen/package/comments/lib/comments/language/en/comments.yml +0 -48
  358. data/lib/zen/package/comments/lib/comments/language/nl/comments.yml +0 -50
  359. data/lib/zen/package/comments/lib/comments/plugin/anti_spam.rb +0 -156
  360. data/lib/zen/package/comments/lib/comments/plugin/comments.rb +0 -115
  361. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_groups.yml +0 -33
  362. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_types.yml +0 -40
  363. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_fields.yml +0 -54
  364. data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_groups.yml +0 -33
  365. data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_field_types.yml +0 -40
  366. data/lib/zen/package/custom_fields/lib/custom_fields/language/nl/custom_fields.yml +0 -54
  367. data/lib/zen/package/menus/lib/menus/language/en/menu_items.yml +0 -41
  368. data/lib/zen/package/menus/lib/menus/language/en/menus.yml +0 -40
  369. data/lib/zen/package/menus/lib/menus/language/nl/menu_items.yml +0 -41
  370. data/lib/zen/package/menus/lib/menus/language/nl/menus.yml +0 -40
  371. data/lib/zen/package/menus/lib/menus/plugin/menus.rb +0 -152
  372. data/lib/zen/package/sections/lib/sections/language/en/section_entries.yml +0 -44
  373. data/lib/zen/package/sections/lib/sections/language/en/sections.yml +0 -48
  374. data/lib/zen/package/sections/lib/sections/language/nl/section_entries.yml +0 -44
  375. data/lib/zen/package/sections/lib/sections/language/nl/sections.yml +0 -48
  376. data/lib/zen/package/sections/lib/sections/plugin/section_entries.rb +0 -244
  377. data/lib/zen/package/sections/lib/sections/plugin/sections.rb +0 -87
  378. data/lib/zen/package/settings/lib/settings/language/en/settings.yml +0 -36
  379. data/lib/zen/package/settings/lib/settings/language/nl/settings.yml +0 -37
  380. data/lib/zen/package/settings/lib/settings/plugin/group_base.rb +0 -39
  381. data/lib/zen/package/settings/lib/settings/plugin/setting_base.rb +0 -133
  382. data/lib/zen/package/settings/lib/settings/plugin/settings.rb +0 -251
  383. data/lib/zen/package/users/lib/users/controller/access_rules.rb +0 -284
  384. data/lib/zen/package/users/lib/users/language/en/access_rules.yml +0 -38
  385. data/lib/zen/package/users/lib/users/language/en/user_groups.yml +0 -32
  386. data/lib/zen/package/users/lib/users/language/en/users.yml +0 -57
  387. data/lib/zen/package/users/lib/users/language/nl/access_rules.yml +0 -38
  388. data/lib/zen/package/users/lib/users/language/nl/user_groups.yml +0 -32
  389. data/lib/zen/package/users/lib/users/language/nl/users.yml +0 -57
  390. data/lib/zen/package/users/lib/users/model/access_rule.rb +0 -42
  391. data/lib/zen/package/users/lib/users/public/admin/js/users/access_rules.js +0 -65
  392. data/lib/zen/package/users/lib/users/public/admin/js/users/lib/access_rules.js +0 -49
  393. data/lib/zen/package/users/lib/users/view/admin/access-rules/form.xhtml +0 -120
  394. data/lib/zen/package/users/lib/users/view/admin/access-rules/index.xhtml +0 -102
  395. data/lib/zen/plugin.rb +0 -182
  396. data/lib/zen/plugin/base.rb +0 -46
  397. data/lib/zen/plugin/helper.rb +0 -47
  398. data/lib/zen/plugin/markup/lib/markup.rb +0 -14
  399. data/lib/zen/plugin/markup/lib/markup/language/en/markup.yml +0 -6
  400. data/lib/zen/plugin/markup/lib/markup/markup.rb +0 -165
  401. data/lib/zen/public/admin/js/zen/lib/asset.js +0 -111
  402. data/lib/zen/task/plugin.rake +0 -18
  403. data/lib/zen/theme/base.rb +0 -65
  404. data/proto/app/config/config.rb +0 -18
  405. data/spec/fixtures/zen/language/en/spec.yml +0 -10
  406. data/spec/fixtures/zen/language/nl/spec.yml +0 -7
  407. data/spec/fixtures/zen/package/settings/plugin/settings.rb +0 -20
  408. data/spec/zen/asset.rb +0 -97
  409. data/spec/zen/bin/create.rb +0 -89
  410. data/spec/zen/bin/runner.rb +0 -47
  411. data/spec/zen/helper/acl.rb +0 -149
  412. data/spec/zen/package/categories/plugin/categories.rb +0 -92
  413. data/spec/zen/package/comments/plugin/anti_spam.rb +0 -59
  414. data/spec/zen/package/comments/plugin/comments.rb +0 -107
  415. data/spec/zen/package/menus/plugin/menus.rb +0 -120
  416. data/spec/zen/package/sections/plugin/section_entries.rb +0 -161
  417. data/spec/zen/package/sections/plugin/sections.rb +0 -75
  418. data/spec/zen/package/settings/plugin/settings.rb +0 -33
  419. data/spec/zen/package/users/controller/access_rules.rb +0 -90
  420. data/spec/zen/plugin.rb +0 -64
  421. data/spec/zen/plugin/helper.rb +0 -11
  422. data/spec/zen/plugin/markup.rb +0 -44
@@ -1,25 +0,0 @@
1
- ---
2
- labels:
3
- powered_by : 'Powered by'
4
- view_website : 'View Website'
5
- logout : 'Logout'
6
- profile : 'Profile'
7
-
8
- errors:
9
- csrf : 'The specified request can not be executed without a valid CSRF token.'
10
- not_authorized : 'You are not authorized to access the current page.'
11
- no_templates : 'No templates were found for the given action.'
12
- no_theme : 'No theme has been specified.'
13
- invalid_request : 'The request could not be executed as the specified data is incorrect.'
14
- require_login : 'You need to be logged in in order to view this page.'
15
-
16
- special:
17
- format_hash:
18
- html : 'HTML'
19
- textile : 'Textile'
20
- markdown : 'Markdown'
21
- plain : 'Plain'
22
-
23
- boolean_hash:
24
- 'true' : 'Yes'
25
- 'false' : 'No'
@@ -1,13 +0,0 @@
1
- ---
2
- exact_length : 'This field is not exactly %s characters long.'
3
- format : "This field's format is invalid."
4
- includes : "This field's value is not in the range or set of %s."
5
- integer : "This field's value is not an integer."
6
- length_range : "This field's value is either too long or too short."
7
- max_length : "This field's value may not be longer than %s characters."
8
- min_length : "This field's value may not be shorter than %s characters."
9
- not_string : "This field's value is not a string."
10
- numeric : "This field's value is not numeric."
11
- type : "This field's value is not a %s."
12
- presence : "This field's value is required."
13
- unique : "This field's value is already taken."
@@ -1,25 +0,0 @@
1
- ---
2
- labels:
3
- powered_by : 'Aangedreven door'
4
- view_website: 'Bekijk website'
5
- logout : 'Uitloggen'
6
- profile : 'Profiel'
7
-
8
- errors:
9
- csrf : 'De actie kan niet worden uitgevoerd zonder een geldige CSRF token.'
10
- not_authorized : 'U bent niet toegestaan om de huidige pagina te bekijken.'
11
- no_templates : 'Er konden geen sjablonen worden gevonden voor de huidige actie.'
12
- no_theme : 'Er is geen thema ingesteld.'
13
- invalid_request: 'De actie kon niet worden uitgevoerd omdat de data onjuist is.'
14
- require_login : 'U moet ingelogd zijn om deze pagina te kunnen bekijken.'
15
-
16
- special:
17
- format_hash:
18
- html : 'HTML'
19
- textile : 'Textile'
20
- markdown: 'Markdown'
21
- plain : 'Platte tekst'
22
-
23
- boolean_hash:
24
- 'true' : 'Ja'
25
- 'false': 'Nee'
@@ -1,13 +0,0 @@
1
- ---
2
- exact_length: 'Dit veld bevat niet exact %s karakters.'
3
- format : 'Het formaat van de waarde van dit veld is onjuist.'
4
- includes : 'De waarde van dit veld is niet binnen het bereik van %s.'
5
- integer : 'De waarde van dit veld is niet numeriek.'
6
- length_range: 'De waarde van dit veld is te lang of te kort.'
7
- max_length : 'De waarde van dit veld mag niet langer zijn dan %s karakters.'
8
- min_length : 'De waarde van dit veld mag niet korter zijn dan %s karakters.'
9
- not_string : 'De waarde van dit veld is geen tekst.'
10
- numeric : 'De waarde van dit veld is niet numeriek.'
11
- type : 'De waarde van dit veld is niet het type %s.'
12
- presence : 'Dit veld is vereist.'
13
- unique : 'De waarde van dit veld is al in gebruik.'
@@ -1,78 +0,0 @@
1
- Zen::Language.load('zen_models')
2
-
3
- # When passing a hash to update() or create() we'll ignore any keys that don't
4
- # belong in the table. This allows you to directly pass request.params to these
5
- # methods without having to filter the hash yourself.
6
- Sequel::Model.strict_param_setting = false
7
-
8
- # Load all the required plugins
9
- Sequel::Model.plugin :validation_helpers
10
- Sequel::Model.plugin :association_pks
11
-
12
- Sequel.extension :migration
13
- Sequel.extension :pagination
14
-
15
- Sequel::Plugins::ValidationHelpers::DEFAULT_OPTIONS.merge!(
16
- {
17
- :exact_length => {
18
- :message => lambda do |length|
19
- lang('zen_models.exact_length') & length
20
- end
21
- },
22
-
23
- :format => {
24
- :message => lang('zen_models.format')
25
- },
26
-
27
- :includes => {
28
- :message => lambda do |arg|
29
- lang('zen_models.includes') % arg.inspect
30
- end,
31
- :allow_nil => false
32
- },
33
-
34
- :integer => {
35
- :message => lang('zen_models.integer'),
36
- :allow_nil => true
37
- },
38
-
39
- :length_range =>
40
- {
41
- :message => lang('zen_models.length_range')
42
- },
43
-
44
- :max_length => {
45
- :message => lambda do |length|
46
- lang('zen_models.max_length') % length
47
- end,
48
- :allow_nil => true
49
- },
50
-
51
- :min_length => {
52
- :message => lambda do |length|
53
- lang('zen_models.min_length') % length
54
- end
55
- },
56
-
57
- :not_string => {
58
- :message => lang('zen_models.not_string')
59
- },
60
-
61
- :numeric => {
62
- :message => lang('zen_models.numeric')
63
- },
64
-
65
- :type => {
66
- :message => lambda do |type|
67
- lang('zen_models.type') % type
68
- end
69
- },
70
-
71
- :presence => {
72
- :message => lang('zen_models.presence')
73
- },
74
-
75
- :unique => {
76
- :message => lang('zen_models.unique')
77
- }
78
- })
@@ -1,62 +0,0 @@
1
- #:nodoc:
2
- module Zen
3
- #:nodoc:
4
- module Package
5
- ##
6
- # Base class used to store the data about packages such as the name,
7
- # directory, etc.
8
- #
9
- # @author Yorick Peterse
10
- # @since 0.2.5
11
- #
12
- class Base
13
- include ::Zen::Validation
14
-
15
- # The name of the package
16
- attr_accessor :name
17
-
18
- # The author of the package
19
- attr_accessor :author
20
-
21
- # A small description about the package
22
- attr_accessor :about
23
-
24
- # The URL to the website of the package
25
- attr_accessor :url
26
-
27
- # The root directory of the package
28
- attr_accessor :directory
29
-
30
- # Array containing the navigation items for the package
31
- attr_accessor :menu
32
-
33
- # Path to the directory containing all migrations
34
- attr_accessor :migration_dir
35
-
36
- # Array containing all controllers for the package. These classes will be
37
- # used by the ACL system.
38
- attr_accessor :controllers
39
-
40
- ##
41
- # Validates all the attributes.
42
- #
43
- # @author Yorick Peterse
44
- # @since 0.2.5
45
- #
46
- def validate
47
- validates_presence([:name, :author, :about, :directory, :controllers])
48
- validates_format(:name, /[a-z0-9_\-]+/)
49
- validates_filepath(:directory)
50
-
51
- if !migration_dir.nil?
52
- validates_filepath(:migration_dir)
53
- end
54
-
55
- # Check if the package hasn't been registered yet
56
- if ::Zen::Package::Registered.key?(name.to_sym)
57
- raise(::Zen::ValidationError, "The package #{name} already exists.")
58
- end
59
- end
60
- end # Base
61
- end # Package
62
- end # Zen
@@ -1,36 +0,0 @@
1
- ---
2
- titles:
3
- index : 'Categories'
4
- edit : 'Edit Category'
5
- new : 'Add Category'
6
-
7
- labels:
8
- id : '#'
9
- name : 'Name'
10
- description : 'Description'
11
- parent : 'Parent'
12
- slug : 'Slug'
13
-
14
- placeholders:
15
- name : 'The name of the category.'
16
- slug : 'A URL friendly name of the category.'
17
-
18
- messages:
19
- no_categories : 'No categories have been created yet.'
20
-
21
- success:
22
- new : 'The category has been created.'
23
- save : 'The category has been modified.'
24
- delete : 'The selected categories have been deleted.'
25
-
26
- errors:
27
- new : 'Failed to add a new category.'
28
- save : 'Failed to save the category.'
29
- delete : 'Failed to delete the category with ID #%s.'
30
- no_delete : "You haven't specified any categories to delete."
31
- invalid_category: 'The specified category is invalid.'
32
-
33
- buttons:
34
- new : 'Add Category'
35
- save : 'Save Category'
36
- delete : 'Delete selected categories'
@@ -1,34 +0,0 @@
1
- ---
2
- titles:
3
- index : 'Category Groups'
4
- edit : 'Edit Category Group'
5
- new : 'Add Category Group'
6
-
7
- labels:
8
- id : '#'
9
- name : 'Name'
10
- description : 'Description'
11
- manage : 'Manage Categories'
12
-
13
- placeholders:
14
- name : 'The name of the category group'
15
-
16
- messages:
17
- no_groups : 'No category groups have been created yet.'
18
-
19
- success:
20
- new : 'The category group has been created.'
21
- save : 'The category group has been modified.'
22
- delete : 'The category group has been deleted.'
23
-
24
- errors:
25
- new : 'Failed to add a new category group.'
26
- save : 'Failed to modify the category group.'
27
- delete : 'Failed to delete the category group with ID #%s.'
28
- no_delete : 'You need to specify at least one group to delete.'
29
- invalid_group: 'The specified category group is invalid.'
30
-
31
- buttons:
32
- new : 'Add group'
33
- save : 'Save group'
34
- delete : 'Delete selected groups'
@@ -1,40 +0,0 @@
1
- ---
2
- titles:
3
- index: 'Categoriën'
4
- edit : 'Categorie aanpassen'
5
- new : 'Categorie aanmaken'
6
-
7
- labels:
8
- id : '#'
9
- name : 'Naam'
10
- description: 'Beschrijving'
11
-
12
- # TODO: "Ouder" is a rather uncommon translation of the word "parent" when dealing with
13
- # a hierarchy. It should be replaced with a better word once I find out which one to
14
- # use.
15
- parent: 'Ouder'
16
- slug : 'Slug'
17
-
18
- placeholders:
19
- name: 'De naam van de categorie.'
20
- slug: 'Een URL vriendelijke versie van de naam van de categorie.'
21
-
22
- messages:
23
- no_categories: 'Er zijn nog geen categoriën aangemaakt.'
24
-
25
- success:
26
- new : 'De categorie is aangemaakt.'
27
- save : 'De categorie is aangepast.'
28
- delete: 'De categorie is verwijderd.'
29
-
30
- errors:
31
- new : 'De categorie kon niet worden aangemaakt.'
32
- save : 'De categorie kon niet worden aangepast.'
33
- delete : 'De categorie met ID #%s kon niet worden verwijderd.'
34
- no_delete : 'U moet ten minste 1 categorie specificeren om te verwijderen.'
35
- invalid_category: 'De opgegeven categorie is ongeldig.'
36
-
37
- buttons:
38
- new : 'Categorie aanmaken'
39
- save : 'Categorie opslaan'
40
- delete: 'Geselecteerde categoriën verwijderen'
@@ -1,34 +0,0 @@
1
- ---
2
- titles:
3
- index: 'Categorie groepen'
4
- edit : 'Categorie groep aanpassen'
5
- new : 'Categorie groep aanmaken'
6
-
7
- labels:
8
- id : '#'
9
- name : 'Naam'
10
- description: 'Beschrijving'
11
- manage : 'Categoriën beheren'
12
-
13
- placeholders:
14
- name: 'De naam van de groep.'
15
-
16
- messages:
17
- no_groups: 'Er zijn nog geen groepen aangemaakt.'
18
-
19
- success:
20
- new : 'De categorie groep is aangemaakt.'
21
- save : 'De categorie groep is aangepast.'
22
- delete: 'De categorie groep is verwijderd.'
23
-
24
- errors:
25
- new : 'De categorie groep kon niet worden aangemaakt.'
26
- save : 'De categorie groep kon niet worden aangepast.'
27
- delete : 'De categorie groep met ID #%s kon niet worden verwijderd.'
28
- no_delete : 'U moet ten minste 1 groep specificeren om te verwijderen.'
29
- invalid_group: 'De opgegeven categorie groep is ongeldig.'
30
-
31
- buttons:
32
- new : 'Groep aanmaken'
33
- save : 'Groep opslaan'
34
- delete: 'Geselecteerde groepen verwijderen'
@@ -1,141 +0,0 @@
1
- #:nodoc
2
- module Categories
3
- #:nodoc
4
- module Plugin
5
- ##
6
- # The Categories plugin can be used to display a list of categories
7
- #
8
- # ## Usage
9
- #
10
- # A basic example of how to use this plugin looks like the following:
11
- #
12
- # plugin(:categories, :group => 'blog').each do |category|
13
- # puts category[:name]
14
- # end
15
- #
16
- # For more information about the available options see
17
- # Zen::Plugin::Categories#initialize().
18
- #
19
- # @author Yorick Peterse
20
- # @since 0.2.5
21
- #
22
- class Categories
23
- include ::Categories::Model
24
- include ::Zen::Plugin::Helper
25
-
26
- ##
27
- # Creates a new instance of the plugin and stores the configuration
28
- # options.
29
- #
30
- # @author Yorick Peterse
31
- # @since 0.2.5
32
- # @param [Hash] options Hash containing a set of options used to
33
- # determine how the categories should be retrieved and which one should
34
- # be retrieved.
35
- # @option options [Integer] :limit The maximum amount of categories to
36
- # retrieve.
37
- # @option options [Integer] :offset The row offset, useful for pagination
38
- # systems.
39
- # @option options [String/Integer] :group The name or ID of the category
40
- # group for which to retrieve all categories.
41
- # @option options [String/Integer] :category The slug or ID of the
42
- # category to retrieve. Setting this option will cause the plugin to
43
- # ignore the offset and limit options.
44
- #
45
- def initialize(options = {})
46
- @options = {
47
- :limit => 20,
48
- :offset => 0,
49
- :group => nil,
50
- :category => nil
51
- }.merge(options)
52
-
53
- # Validate the specified options
54
- if @options[:group].nil? and @options[:category].nil?
55
- raise(
56
- ArgumentError,
57
- "You need to specify either a category or category group."
58
- )
59
- end
60
-
61
- if !@options[:group].nil? and !@options[:category].nil?
62
- raise(
63
- ArgumentError,
64
- "You can't specify both a category and a category group."
65
- )
66
- end
67
-
68
- group_class = @options[:group].class
69
- cat_class = @options[:category].class
70
- allowed = [Integer, String, Fixnum]
71
-
72
- # Validate the types
73
- if !@options[:group].nil?
74
- validate_type(@options[:group], :group, allowed)
75
- end
76
-
77
- if !@options[:category].nil?
78
- validate_type(@options[:category], :category, allowed)
79
- end
80
-
81
- validate_type(@options[:limit] , :limit , [Fixnum, Integer])
82
- validate_type(@options[:offset], :offset, [Fixnum, Integer])
83
- end
84
-
85
- ##
86
- # Retrieves all categories based on the given configuration options.
87
- #
88
- # @author Yorick Peterse
89
- # @since 0.2.5
90
- # @return [Array] A list of all categories.
91
- #
92
- def call
93
- categories = []
94
-
95
- # Retrieve the categories for a given group]]
96
- if !@options[:group].nil?
97
- # Get the group for an ID or a name
98
- if @options[:group].class == Integer \
99
- or @options[:group].class == Fixnum
100
- category_group = CategoryGroup[@options[:group]]
101
- else
102
- category_group = CategoryGroup[:name => @options[:group]]
103
- end
104
-
105
- # Since we require a group in this case we'll raise an error if the
106
- # group doesn't exist. If we were to return an empty value this may
107
- # confuse the developer.
108
- if category_group.nil?
109
- raise("No category group could be found for \"#{@options[:group]}\"")
110
- end
111
-
112
- # Get all the categories according to our specified configuration
113
- # options and the category group that was retrieved earlier on.
114
- categories = Category.filter(:category_group_id => category_group.id) \
115
- .limit(@options[:limit], @options[:offset]) \
116
- .all
117
-
118
- # Retrieve the category for the specified ID or slug
119
- else
120
- if @options[:category].class == Integer \
121
- or @options[:category].class == Fixnum
122
- categories = Category[@options[:category]]
123
- else
124
- categories = Category[:slug => @options[:category]]
125
- end
126
- end
127
-
128
- # Convert all categories to a hash
129
- if categories.class == Array
130
- categories.each_with_index do |cat, index|
131
- categories[index] = cat.values
132
- end
133
- else
134
- categories = categories.values
135
- end
136
-
137
- return categories
138
- end
139
- end # Categories
140
- end # Plugin
141
- end # Categories