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,44 +0,0 @@
1
- ---
2
- titles:
3
- index : 'Section Entries'
4
- edit : 'Edit Entry'
5
- new : 'Add Entry'
6
-
7
- labels:
8
- id : '#'
9
- title : 'Title'
10
- slug : 'Slug'
11
- status : 'Status'
12
- created_at : 'Created at'
13
- updated_at : 'Updated at'
14
- author : 'Author'
15
-
16
- special:
17
- status_hash:
18
- draft : 'Draft'
19
- published : 'Published'
20
-
21
- tabs:
22
- basic : 'Basic'
23
- categories : 'Categories'
24
-
25
- messages:
26
- no_entries : 'No section entries have been created.'
27
- no_categories : 'No categories have been assigned to the current section.'
28
-
29
- errors:
30
- new : 'Failed to create a new section entry.'
31
- save : 'Failed to save the section entry.'
32
- delete : 'Failed to delete the section entry with ID#%s'
33
- no_delete : "You haven't specified any section entries to delete."
34
- invalid_entry: 'The specified entry is invalid.'
35
-
36
- success:
37
- new : 'The new section entry has been created.'
38
- save : 'The section entry has been modified.'
39
- delete : 'All selected entries have been deleted.'
40
-
41
- buttons:
42
- new : 'Add section entry'
43
- delete : 'Delete selected entries'
44
- save : 'Save entry'
@@ -1,48 +0,0 @@
1
- ---
2
- titles:
3
- index : 'Sections'
4
- edit : 'Edit Section'
5
- new : 'Add Secton'
6
-
7
- labels:
8
- id : '#'
9
- name : 'Name'
10
- slug : 'Slug'
11
- description : 'Description'
12
- comment_allow : 'Allow comments'
13
- comment_require_account : 'Comments require an account'
14
- comment_moderate : 'Moderate comments'
15
- comment_format : 'Comment format'
16
- custom_field_groups : 'Custom field groups'
17
- category_groups : 'Category groups'
18
- manage_entries : 'Manage entries'
19
-
20
- special:
21
- boolean_hash:
22
- 'true' : 'Yes'
23
- 'false' : 'No'
24
-
25
- tabs:
26
- general : 'General'
27
- comment_settings : 'Comment Settings'
28
- group_assignments : 'Group Assignments'
29
-
30
- messages:
31
- no_sections: "No sections have been created yet."
32
-
33
- errors:
34
- new : 'Failed to create a new section.'
35
- save : 'Failed to modify the section.'
36
- delete : 'Failed to delete the section with ID #%s.'
37
- no_delete : 'You need to specify at least one section to delete.'
38
- invalid_section: 'The specified section is invalid.'
39
-
40
- success:
41
- new : 'The new section has been created.'
42
- save : 'The section has been modified.'
43
- delete : 'The selected sections have been deleted.'
44
-
45
- buttons:
46
- new : 'Add section'
47
- delete : 'Delete selected sections'
48
- save : 'Save section'
@@ -1,44 +0,0 @@
1
- ---
2
- titles:
3
- index: 'Sectie items'
4
- edit : 'Sectie item aanpassen'
5
- new : 'Sectie item aanmaken'
6
-
7
- labels:
8
- id : '#'
9
- title : 'Titel'
10
- slug : 'Slug'
11
- status : 'Status'
12
- created_at: 'Aanmaak datum'
13
- updated_at: 'Aanpas datum'
14
- author : 'Auteur'
15
-
16
- special:
17
- status_hash:
18
- draft : 'Voorbeeld'
19
- published: 'Gepubliceerd'
20
-
21
- tabs:
22
- basic : 'Algemeen'
23
- categories: 'Categoriën'
24
-
25
- messages:
26
- no_entries : 'Er zijn nog geen items aangemaakt.'
27
- no_categories: 'De huidige sectie bevat geen categoriën.'
28
-
29
- success:
30
- new : 'Het sectie item is aangemaakt.'
31
- save : 'Het sectie item is aangepast.'
32
- delete: 'Alle geselecteerde items zijn verwijderd.'
33
-
34
- errors:
35
- new : 'Het sectie item kon niet worden aangemaakt.'
36
- save : 'Het sectie item kon niet worden aangepast.'
37
- delete : 'Het sectie item met ID #%s kon niet worden verwijderd.'
38
- no_delete : 'U moet ten minste 1 item specificeren om te verwijderen.'
39
- invalid_entry: 'Het opgegeven item is ongeldig.'
40
-
41
- buttons:
42
- new : 'Sectie item toevoegen'
43
- save : 'Sectie item opslaan'
44
- delete: 'Geselecteerde items verwijderen'
@@ -1,48 +0,0 @@
1
- ---
2
- titles:
3
- index: 'Secties'
4
- edit : 'Sectie aanpassen'
5
- new : 'Sectie toevoegen'
6
-
7
- labels:
8
- id : '#'
9
- name : 'Naam'
10
- slug : 'Slug'
11
- description : 'Beschrijving'
12
- comment_allow : 'Reacties toegestaan'
13
- comment_require_account: 'Reacties vereisen een account'
14
- comment_moderate : 'Beheer reacties'
15
- comment_format : 'Text opmaak'
16
- custom_field_groups : 'Veld groepen'
17
- category_groups : 'Categorie groepen'
18
- manage_entries : 'Beheer items'
19
-
20
- special:
21
- boolean_hash:
22
- 'true' : 'Ja'
23
- 'false': 'Nee'
24
-
25
- tabs:
26
- general : 'Algemeen'
27
- comment_settings : 'Reactie instellingen'
28
- group_assignments: 'Groepen'
29
-
30
- messages:
31
- no_sections: 'Er zijn nog geen secties aangemaakt.'
32
-
33
- success:
34
- new : 'De sectie is aangemaakt.'
35
- save : 'De sectie is aangepast.'
36
- delete: 'Alle geselecteerde secties zijn verwijderd.'
37
-
38
- errors:
39
- new : 'De sectie kon niet worden aangemaakt.'
40
- save : 'De sectie kon niet worden aangepast.'
41
- delete : 'De sectie met ID #%s kon niet worden verwijderd.'
42
- no_delete : 'U moet ten minste 1 sectie specificeren om te verwijderen.'
43
- invalid_section: 'De opgegeven sectie is ongeldig.'
44
-
45
- buttons:
46
- new : 'Sectie toevoegen'
47
- save : 'Sectie opslaan'
48
- delete: 'Geselecteerde secties verwijderen'
@@ -1,244 +0,0 @@
1
- #:nodoc:
2
- module Sections
3
- #:nodoc:
4
- module Plugin
5
- ##
6
- # The SectionEntries plugin can be used to retrieve section entries as well
7
- # as the associated comments and user data. This allows you to relatively
8
- # easily build a list of entries (e.g. blog articles) without having to
9
- # retrieve and process the associated data manually.
10
- #
11
- # ## Usage
12
- #
13
- # Basic usage is as following:
14
- #
15
- # entries = plugin(:section_entries, :limit => 10, :section => 'blog')
16
- # entries.each do |e|
17
- # puts e[:title]
18
- # end
19
- #
20
- # The values of custom fields are stored under the key :fields. This key
21
- # contains a hash where the keys are the slugs of the custom fields and the
22
- # values the values for the current entry.
23
- #
24
- # entries.each do |e|
25
- # e[:fields][:thumbnail]
26
- # end
27
- #
28
- # User data can be found in the key :user:
29
- #
30
- # entries.each do |e|
31
- # e[:user][:name]
32
- # end
33
- #
34
- # Last but not least, comments can be found under the key :comments:
35
- #
36
- # entries.each do |e|
37
- # e[:comments].each do |c|
38
- # c[:comment]
39
- # end
40
- # end
41
- #
42
- # For a full list of available options see
43
- # Sections::Plugin::SectionEntries.initialize.
44
- #
45
- # @author Yorick Peterse
46
- # @since 0.2.5
47
- #
48
- class SectionEntries
49
- include ::Zen::Plugin::Helper
50
- include ::Sections::Model
51
-
52
- ##
53
- # Creates a new instance of the plugin and validates/stores the given
54
- # configuration options. Please note that you always need to either
55
- # specify a section from which to retrieve all entries or a single entry
56
- # in order to use this plugin. You can retrieve a list of entries (or just
57
- # a single one) by specifying the ID or the slug:
58
- #
59
- # plugin(:section_entries, :section => 'blog')
60
- # plugin(:section_entries, :section => 10)
61
- #
62
- # @author Yorick Peterse
63
- # @since 0.2.5
64
- # @param [Hash] options Hash with a collection of custom configuration
65
- # options that determine how and what entries should be retrieved.
66
- # @option options [Fixnum/Integer] :limit
67
- # @option options [Fixnum/Integer] :offset
68
- # @option options [NilClass/String/Integer/Fixnum] :section
69
- # @option options [NilClass/String/Integer/Fixnum] :entry
70
- # @option options [TrueClass] :markup When set to true the markup of all
71
- # entries will be converted to the desired output (usually this is HTML).
72
- # @option options [TrueClass] :comments When set to true all comments for
73
- # each entry will be retrieved. Set to false by default.
74
- # @option options [TrueClass] :comment_markup When set to true the markup
75
- # of comments will be converted to the desired output.
76
- # @option options [TrueClass] :categories When set to true all categories
77
- # for each entry will be retrieved as well. This is set to false by
78
- # default.
79
- #
80
- def initialize(options = {})
81
- @options = {
82
- :limit => 20,
83
- :offset => 0,
84
- :section => nil,
85
- :entry => nil,
86
- :markup => true,
87
- :comments => false,
88
- :comment_markup => true,
89
- :categories => false
90
- }.merge(options)
91
-
92
- validate_type(@options[:limit] , :limit , [Fixnum, Integer])
93
- validate_type(@options[:offset] , :limit , [Fixnum, Integer])
94
-
95
- validate_type(
96
- @options[:section], :section, [NilClass, String, Integer, Fixnum]
97
- )
98
-
99
- validate_type(
100
- @options[:entry], :entry, [NilClass, String, Integer, Fixnum]
101
- )
102
-
103
- validate_type(@options[:markup] , :markup , [TrueClass, FalseClass])
104
- validate_type(@options[:comments], :comments, [TrueClass, FalseClass])
105
-
106
- if @options[:section].nil? and @options[:entry].nil?
107
- raise(
108
- ArgumentError,
109
- "You need to specify either an entry or a section to retrieve."
110
- )
111
- end
112
- end
113
-
114
- ##
115
- # Fetches all the data and converts everything to a hash. Once this is
116
- # done either an array of entries or a single entry hash will be returned.
117
- #
118
- # @author Yorick Peterse
119
- # @since 0.2.5
120
- # @return [Array/Hash]
121
- #
122
- def call
123
- # Create the list with models to load using eager()
124
- eager_models = [:custom_field_values, :user]
125
- filter_hash = {}
126
-
127
- if @options[:comments] === true
128
- eager_models.push(:comments)
129
- end
130
-
131
- if @options[:categories] === true
132
- eager_models.push(:categories)
133
- end
134
-
135
- # Get the section ID based on either the slug or ID.
136
- if !@options[:section].nil?
137
- # Retrieve the section by it's slug
138
- if @options[:section].class == String
139
- section_id = Section[:slug => @options[:section]].id
140
- else
141
- section_id = @options[:section]
142
- end
143
-
144
- filter_hash[:section_id] = section_id
145
- end
146
-
147
- # Retrieve a specific entry
148
- if !@options[:entry].nil?
149
- # Retrieve it by it's slug
150
- if @options[:entry].class == String
151
- filter_hash[:slug] = @options[:entry]
152
- # Retrieve the entry by it's ID
153
- else
154
- filter_hash[:id] = @options[:entry]
155
- end
156
- end
157
-
158
- # Get the correct status to retrieve
159
- filter_hash[:section_entry_status_id] = \
160
- ::Sections::Model::SectionEntryStatus[:name => 'published'].id
161
-
162
- # Get the entries
163
- entries = SectionEntry.filter(filter_hash) \
164
- .eager(*eager_models) \
165
- .limit(@options[:limit], @options[:offset]) \
166
- .all
167
-
168
- comment_format = nil
169
-
170
- # Loop through all entries so we can process our custom field values
171
- entries.each_with_index do |entry, index|
172
- field_values = {}
173
- user = {}
174
- comments = []
175
- categories = []
176
-
177
- # Store all the custom field values
178
- entry.custom_field_values.each do |v|
179
- name = v.custom_field.slug.to_sym
180
- value = v.value
181
-
182
- # Convert the markup
183
- if @options[:markup] === true
184
- value = plugin(:markup, v.custom_field.format, value)
185
- end
186
-
187
- field_values[name] = value
188
- end
189
-
190
- # Get all the comments if the developer wants them
191
- if @options[:comments] === true
192
- if comment_format.nil?
193
- comment_format = entry.section.comment_format
194
- end
195
-
196
- entry.comments.each do |c|
197
- comment = c.values
198
-
199
- if c.user
200
- comment[:user] = c.user.values
201
- end
202
-
203
- # Convert the comment's markup
204
- if @options[:comment_markup]
205
- comment[:comment] = plugin(
206
- :markup, comment_format, comment[:comment]
207
- )
208
- end
209
-
210
- comments.push(comment)
211
- end
212
- end
213
-
214
- # Get the user data
215
- if !entry.user.nil?
216
- user = entry.user.values
217
- end
218
-
219
- # Get all categories
220
- if @options[:categories] === true
221
- categories = entry.categories.map do |cat|
222
- cat.values
223
- end
224
- end
225
-
226
- # Convert the entry to a hash and re-assign all data
227
- entry = entry.values
228
- entry[:fields] = field_values
229
- entry[:user] = user
230
- entry[:comments] = comments
231
- entry[:categories] = categories
232
- entries[index] = entry
233
- end
234
-
235
- # Do we only want a single entry?
236
- if !@options[:entry].nil?
237
- entries = entries[0]
238
- end
239
-
240
- return entries
241
- end
242
- end # SectionEntries
243
- end # Plugin
244
- end # Sections
@@ -1,87 +0,0 @@
1
- #:nodoc:
2
- module Sections
3
- #:nodoc:
4
- module Plugin
5
- ##
6
- # Plugin that can be used to display sections and their details. If you want
7
- # to display section entries instead you should use the plugin
8
- # Sections::Plugin::SectionEntries.
9
- #
10
- # ## Usage
11
- #
12
- # section = plugin(:sections, :section => 10)
13
- # section.name # => "My Section"
14
- #
15
- # @author Yorick Peterse
16
- # @since 0.2.5
17
- #
18
- class Sections
19
- include ::Zen::Plugin::Helper
20
- include ::Sections::Model
21
-
22
- ##
23
- # Creates a new instance of the plugin and saves/validates the given
24
- # configuration options.
25
- #
26
- # @example
27
- # plugin = Sections::Plugin::Sections.new(:section => 10)
28
- #
29
- # @author Yorick Peterse
30
- # @since 0.2.5
31
- # @param [Hash] options Hash with a set of configuration files to use.
32
- #
33
- def initialize(options = {})
34
- @options = {
35
- :limit => 20,
36
- :offset => 0,
37
- :section => nil
38
- }.merge(options)
39
-
40
- validate_type(@options[:limit] , :limit , [Fixnum, Integer])
41
- validate_type(@options[:offset] , :offset , [Fixnum, Integer])
42
-
43
- validate_type(
44
- @options[:section], :section, [NilClass, Integer, Fixnum, String]
45
- )
46
- end
47
-
48
- ##
49
- # Retrieves the section(s) based on the given configuration options. When
50
- # multiple sections are retrieved they're returned as an array, otherwise
51
- # a single instance of Sections::Model::Sections will be returned.
52
- #
53
- # @author Yorick Peterse
54
- # @since 0.2.5
55
- # @return [Array/Sections::Model::Section] List of all sections that were
56
- # retrieved or an instance of Sections::Model::Section in case a specific
57
- # section was retrieved from the database.
58
- #
59
- def call
60
- # Retrieve a single section
61
- if !@options[:section].nil?
62
- # Retrieve a section by it's slug
63
- if @options[:section].class == String
64
- sections = Section[:slug => @options[:section]]
65
- # Retrieve a section by it's ID
66
- else
67
- sections = Section[@options[:section]]
68
- end
69
- # Retrieve mutliple sections
70
- else
71
- sections = Section.limit(@options[:limit], @options[:offset]).all
72
- end
73
-
74
- # Convert every section to a hash
75
- if sections.class == Array
76
- sections.each_with_index do |section, index|
77
- sections[index] = section.values
78
- end
79
- else
80
- sections = sections.values
81
- end
82
-
83
- return sections
84
- end
85
- end # Sections
86
- end # Plugin
87
- end # Sections