zen 0.1a → 0.2

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 (414) hide show
  1. data/CHANGELOG.md +17 -0
  2. data/MANIFEST +161 -264
  3. data/README.md +114 -0
  4. data/ROADMAP.md +31 -0
  5. data/Thorfile +8 -0
  6. data/lib/zen.rb +13 -10
  7. data/lib/zen/base/database.rb +34 -28
  8. data/lib/zen/base/language.rb +174 -92
  9. data/lib/zen/base/logger.rb +8 -6
  10. data/lib/zen/base/package.rb +36 -29
  11. data/lib/zen/base/version.rb +2 -1
  12. data/lib/zen/bin/zen_binary.rb +7 -71
  13. data/lib/zen/controller/admin_controller.rb +31 -11
  14. data/lib/zen/controller/base_controller.rb +13 -13
  15. data/lib/zen/controller/frontend_controller.rb +2 -0
  16. data/lib/zen/controller/main_controller.rb +9 -8
  17. data/lib/zen/helper/acl.rb +4 -1
  18. data/lib/zen/helper/asset.rb +5 -3
  19. data/lib/zen/helper/breadcrumb.rb +10 -8
  20. data/lib/zen/helper/common.rb +28 -13
  21. data/lib/zen/language/en/zen_general.yml +31 -0
  22. data/lib/zen/language/en/zen_models.yml +13 -0
  23. data/lib/zen/layout/admin.xhtml +76 -68
  24. data/lib/zen/layout/login.xhtml +48 -42
  25. data/lib/zen/liquid/controller_behavior.rb +2 -0
  26. data/lib/zen/liquid/general.rb +60 -9
  27. data/lib/zen/liquid/redirect.rb +29 -6
  28. data/lib/zen/liquid/strip.rb +3 -1
  29. data/lib/zen/model/methods.rb +7 -5
  30. data/lib/zen/model/settings.rb +69 -18
  31. data/lib/zen/package/all.rb +7 -0
  32. data/lib/zen/{packages → package}/categories/lib/categories.rb +3 -3
  33. data/lib/zen/package/categories/lib/categories/controller/categories.rb +250 -0
  34. data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +216 -0
  35. data/lib/zen/package/categories/lib/categories/language/en/categories.yml +35 -0
  36. data/lib/zen/package/categories/lib/categories/language/en/category_groups.yml +32 -0
  37. data/lib/zen/package/categories/lib/categories/liquid/categories.rb +16 -0
  38. data/lib/zen/{packages → package}/categories/lib/categories/model/category.rb +9 -9
  39. data/lib/zen/{packages → package}/categories/lib/categories/model/category_group.rb +6 -4
  40. data/lib/zen/package/categories/lib/categories/view/admin/categories/edit.xhtml +7 -0
  41. data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +59 -0
  42. data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +78 -0
  43. data/lib/zen/package/categories/lib/categories/view/admin/categories/new.xhtml +7 -0
  44. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/edit.xhtml +7 -0
  45. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/form.xhtml +31 -0
  46. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +85 -0
  47. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/new.xhtml +7 -0
  48. data/lib/zen/{packages → package}/categories/migrations/.gitkeep +0 -0
  49. data/lib/zen/{packages → package}/categories/migrations/1295282303_create_schema.rb +3 -2
  50. data/lib/zen/{packages → package}/comments/lib/comments.rb +1 -1
  51. data/lib/zen/{packages → package}/comments/lib/comments/controller/comments.rb +81 -41
  52. data/lib/zen/{packages → package}/comments/lib/comments/controller/comments_form.rb +15 -13
  53. data/lib/zen/package/comments/lib/comments/language/en/comments.yml +42 -0
  54. data/lib/zen/{packages → package}/comments/lib/comments/liquid/comment_form.rb +43 -13
  55. data/lib/zen/{packages → package}/comments/lib/comments/liquid/comments.rb +10 -12
  56. data/lib/zen/{packages → package}/comments/lib/comments/model/comment.rb +24 -0
  57. data/lib/zen/package/comments/lib/comments/view/admin/comments/edit.xhtml +7 -0
  58. data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +57 -0
  59. data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +79 -0
  60. data/lib/zen/{packages → package}/comments/migrations/.gitkeep +0 -0
  61. data/lib/zen/{packages → package}/comments/migrations/1295282202_create_schema.rb +6 -4
  62. data/lib/zen/{packages → package}/custom_fields/lib/custom_fields.rb +2 -2
  63. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +224 -0
  64. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +259 -0
  65. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_field_groups.yml +32 -0
  66. data/lib/zen/package/custom_fields/lib/custom_fields/language/en/custom_fields.yml +52 -0
  67. data/lib/zen/{packages → package}/custom_fields/lib/custom_fields/model/custom_field.rb +12 -7
  68. data/lib/zen/{packages → package}/custom_fields/lib/custom_fields/model/custom_field_group.rb +14 -4
  69. data/lib/zen/{packages → package}/custom_fields/lib/custom_fields/model/custom_field_value.rb +4 -2
  70. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/edit.xhtml +7 -0
  71. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/form.xhtml +30 -0
  72. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +100 -0
  73. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/new.xhtml +7 -0
  74. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/edit.xhtml +7 -0
  75. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +107 -0
  76. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +84 -0
  77. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/new.xhtml +7 -0
  78. data/lib/zen/{packages → package}/custom_fields/migrations/.gitkeep +0 -0
  79. data/lib/zen/{packages → package}/custom_fields/migrations/1295255665_create_schema.rb +8 -7
  80. data/lib/zen/package/menus/lib/menus.rb +59 -0
  81. data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +244 -0
  82. data/lib/zen/package/menus/lib/menus/controller/menus.rb +231 -0
  83. data/lib/zen/package/menus/lib/menus/helper/menu_item.rb +93 -0
  84. data/lib/zen/package/menus/lib/menus/language/en/menu_items.yml +41 -0
  85. data/lib/zen/package/menus/lib/menus/language/en/menus.yml +39 -0
  86. data/lib/zen/package/menus/lib/menus/liquid/menus.rb +152 -0
  87. data/lib/zen/package/menus/lib/menus/model/menu.rb +38 -0
  88. data/lib/zen/package/menus/lib/menus/model/menu_item.rb +33 -0
  89. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/edit.xhtml +7 -0
  90. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +64 -0
  91. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +84 -0
  92. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/new.xhtml +7 -0
  93. data/lib/zen/package/menus/lib/menus/view/admin/menus/edit.xhtml +7 -0
  94. data/lib/zen/package/menus/lib/menus/view/admin/menus/form.xhtml +42 -0
  95. data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +95 -0
  96. data/lib/zen/package/menus/lib/menus/view/admin/menus/new.xhtml +7 -0
  97. data/lib/zen/{packages/sections → package/menus}/migrations/.gitkeep +0 -0
  98. data/lib/zen/package/menus/migrations/1297184342_create_schema.rb +33 -0
  99. data/lib/zen/{packages → package}/sections/lib/sections.rb +0 -0
  100. data/lib/zen/{packages → package}/sections/lib/sections/controller/section_entries.rb +132 -68
  101. data/lib/zen/{packages → package}/sections/lib/sections/controller/sections.rb +96 -48
  102. data/lib/zen/package/sections/lib/sections/language/en/section_entries.yml +43 -0
  103. data/lib/zen/package/sections/lib/sections/language/en/sections.yml +48 -0
  104. data/lib/zen/{packages → package}/sections/lib/sections/liquid/section_entries.rb +55 -43
  105. data/lib/zen/{packages → package}/sections/lib/sections/liquid/sections.rb +9 -8
  106. data/lib/zen/package/sections/lib/sections/model/section.rb +62 -0
  107. data/lib/zen/package/sections/lib/sections/model/section_entry.rb +53 -0
  108. data/lib/zen/package/sections/lib/sections/view/admin/edit.xhtml +7 -0
  109. data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +107 -0
  110. data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +93 -0
  111. data/lib/zen/package/sections/lib/sections/view/admin/new.xhtml +7 -0
  112. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/edit.xhtml +7 -0
  113. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/form.xhtml +233 -0
  114. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +82 -0
  115. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/new.xhtml +7 -0
  116. data/lib/zen/{packages/settings → package/sections}/migrations/.gitkeep +0 -0
  117. data/lib/zen/{packages → package}/sections/migrations/1295251836_create_schema.rb +6 -6
  118. data/lib/zen/{packages → package}/settings/lib/settings.rb +0 -0
  119. data/lib/zen/{packages → package}/settings/lib/settings/controller/settings.rb +33 -24
  120. data/lib/zen/package/settings/lib/settings/language/en/settings.yml +26 -0
  121. data/lib/zen/{packages → package}/settings/lib/settings/liquid/setting.rb +5 -3
  122. data/lib/zen/package/settings/lib/settings/model/setting.rb +113 -0
  123. data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +111 -0
  124. data/lib/zen/{packages/users → package/settings}/migrations/.gitkeep +0 -0
  125. data/lib/zen/{packages → package}/settings/migrations/1295597111_create_schema.rb +2 -2
  126. data/lib/zen/package/settings/migrations/1299538742_add_language_key.rb +62 -0
  127. data/lib/zen/{packages → package}/users/lib/users.rb +6 -2
  128. data/lib/zen/package/users/lib/users/controller/access_rules.rb +238 -0
  129. data/lib/zen/package/users/lib/users/controller/user_groups.rb +217 -0
  130. data/lib/zen/{packages → package}/users/lib/users/controller/users.rb +115 -57
  131. data/lib/zen/package/users/lib/users/language/en/access_rules.yml +35 -0
  132. data/lib/zen/package/users/lib/users/language/en/user_groups.yml +31 -0
  133. data/lib/zen/package/users/lib/users/language/en/users.yml +50 -0
  134. data/lib/zen/{packages → package}/users/lib/users/liquid/user.rb +8 -6
  135. data/lib/zen/{packages → package}/users/lib/users/liquid/users.rb +5 -3
  136. data/lib/zen/{packages → package}/users/lib/users/model/access_rule.rb +11 -3
  137. data/lib/zen/{packages → package}/users/lib/users/model/user.rb +5 -1
  138. data/lib/zen/{packages → package}/users/lib/users/model/user_group.rb +6 -3
  139. data/lib/zen/package/users/lib/users/public/admin/js/users/access_rules.js +42 -0
  140. data/lib/zen/package/users/lib/users/view/admin/access-rules/edit.xhtml +7 -0
  141. data/lib/zen/package/users/lib/users/view/admin/access-rules/form.xhtml +108 -0
  142. data/lib/zen/package/users/lib/users/view/admin/access-rules/index.xhtml +93 -0
  143. data/lib/zen/package/users/lib/users/view/admin/access-rules/new.xhtml +7 -0
  144. data/lib/zen/package/users/lib/users/view/admin/user-groups/edit.xhtml +7 -0
  145. data/lib/zen/package/users/lib/users/view/admin/user-groups/form.xhtml +37 -0
  146. data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +76 -0
  147. data/lib/zen/package/users/lib/users/view/admin/user-groups/new.xhtml +7 -0
  148. data/lib/zen/package/users/lib/users/view/admin/users/edit.xhtml +7 -0
  149. data/lib/zen/package/users/lib/users/view/admin/users/form.xhtml +53 -0
  150. data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +81 -0
  151. data/lib/zen/package/users/lib/users/view/admin/users/login.xhtml +27 -0
  152. data/lib/zen/package/users/lib/users/view/admin/users/new.xhtml +7 -0
  153. data/{pkg → lib/zen/package/users/migrations}/.gitkeep +0 -0
  154. data/lib/zen/{packages → package}/users/migrations/1295281013_create_schema.rb +2 -2
  155. data/lib/zen/public/admin/css/boilerplate.css +62 -60
  156. data/lib/zen/public/admin/css/buttons.css +46 -0
  157. data/lib/zen/public/admin/css/datepicker.css +163 -0
  158. data/lib/zen/public/admin/css/editor.css +91 -0
  159. data/lib/zen/public/admin/css/forms.css +68 -0
  160. data/lib/zen/public/admin/css/general.css +34 -419
  161. data/lib/zen/public/admin/css/grid.css +26 -26
  162. data/lib/zen/public/admin/css/layout.css +73 -62
  163. data/lib/zen/public/admin/css/modals.css +63 -0
  164. data/lib/zen/public/admin/css/notifications.css +84 -0
  165. data/lib/zen/public/admin/css/tables.css +71 -0
  166. data/lib/zen/public/admin/css/tabs.css +53 -0
  167. data/lib/zen/public/admin/js/mootools/more.js +139 -51
  168. data/lib/zen/public/admin/js/vendor/datepicker/Picker.Attach.js +137 -0
  169. data/lib/zen/public/admin/js/vendor/datepicker/Picker.Date.js +576 -0
  170. data/lib/zen/public/admin/js/vendor/datepicker/Picker.js +291 -0
  171. data/lib/zen/public/admin/js/vendor/datepicker/README.md +325 -0
  172. data/lib/zen/public/admin/js/vendor/datepicker/locale.js +16 -0
  173. data/lib/zen/public/admin/js/zen/editor/base.js +173 -183
  174. data/lib/zen/public/admin/js/zen/editor/drivers/html.js +74 -89
  175. data/lib/zen/public/admin/js/zen/editor/drivers/markdown.js +72 -87
  176. data/lib/zen/public/admin/js/zen/editor/drivers/textile.js +72 -87
  177. data/lib/zen/public/admin/js/zen/init.js +65 -51
  178. data/lib/zen/public/admin/js/zen/modal.js +108 -121
  179. data/lib/zen/public/admin/js/zen/notification.js +163 -165
  180. data/lib/zen/public/admin/js/zen/tabs.js +203 -210
  181. data/lib/zen/task/build.rb +123 -0
  182. data/lib/zen/task/clean.rb +46 -0
  183. data/lib/zen/task/db.rb +120 -0
  184. data/lib/zen/task/package.rb +82 -0
  185. data/lib/zen/task/proto.rb +116 -0
  186. data/{LICENSE → license.txt} +2 -2
  187. data/proto/app/Thorfile +4 -0
  188. data/proto/app/config/middlewares.rb +3 -3
  189. data/proto/app/config/requires.rb +1 -6
  190. data/proto/app/start.rb +5 -10
  191. data/{lib/zen/packages/settings → proto/package}/LICENSE +0 -0
  192. data/{lib/zen/packages/categories → proto/package}/README.textile +0 -0
  193. data/proto/package/lib/package.rb +41 -0
  194. data/proto/{module/lib/module → package/lib/package}/controller/controllers.rb +3 -2
  195. data/proto/{module/lib/module → package/lib/package}/language/en/languages.rb +0 -0
  196. data/proto/{module/lib/module → package/lib/package}/model/model.rb +0 -0
  197. data/proto/{module/lib/module/view/admin → package/lib/package/view/admin/package}/edit.xhtml +0 -0
  198. data/proto/{module/lib/module/view/admin → package/lib/package/view/admin/package}/form.xhtml +0 -0
  199. data/proto/{module/lib/module/view/admin → package/lib/package/view/admin/package}/index.xhtml +0 -0
  200. data/proto/{module/lib/module/view/admin → package/lib/package/view/admin/package}/new.xhtml +0 -0
  201. data/proto/{module → package}/migrations/.gitkeep +0 -0
  202. metadata +199 -280
  203. data/README.textile +0 -42
  204. data/Rakefile +0 -6
  205. data/doc/Categories.html +0 -93
  206. data/doc/Categories/Controllers.html +0 -93
  207. data/doc/Categories/Controllers/Categories.html +0 -995
  208. data/doc/Categories/Controllers/CategoryGroups.html +0 -878
  209. data/doc/Categories/Models.html +0 -97
  210. data/doc/Categories/Models/Category.html +0 -269
  211. data/doc/Categories/Models/CategoryGroup.html +0 -231
  212. data/doc/Comments.html +0 -93
  213. data/doc/Comments/Controllers.html +0 -93
  214. data/doc/Comments/Controllers/Comments.html +0 -797
  215. data/doc/Comments/Controllers/CommentsForm.html +0 -487
  216. data/doc/Comments/Liquid.html +0 -93
  217. data/doc/Comments/Liquid/CommentForm.html +0 -522
  218. data/doc/Comments/Liquid/Comments.html +0 -543
  219. data/doc/Comments/Models.html +0 -95
  220. data/doc/Comments/Models/Comment.html +0 -260
  221. data/doc/CustomFields.html +0 -93
  222. data/doc/CustomFields/Controllers.html +0 -93
  223. data/doc/CustomFields/Controllers/CustomFieldGroups.html +0 -902
  224. data/doc/CustomFields/Controllers/CustomFields.html +0 -974
  225. data/doc/CustomFields/Models.html +0 -97
  226. data/doc/CustomFields/Models/CustomField.html +0 -272
  227. data/doc/CustomFields/Models/CustomFieldGroup.html +0 -259
  228. data/doc/CustomFields/Models/CustomFieldValue.html +0 -154
  229. data/doc/Ramaze.html +0 -93
  230. data/doc/Ramaze/Helper.html +0 -93
  231. data/doc/Ramaze/Helper/ACL.html +0 -531
  232. data/doc/Ramaze/Helper/Asset.html +0 -617
  233. data/doc/Ramaze/Helper/Breadcrumb.html +0 -411
  234. data/doc/Ramaze/Helper/Common.html +0 -738
  235. data/doc/Sections.html +0 -93
  236. data/doc/Sections/Controllers.html +0 -93
  237. data/doc/Sections/Controllers/SectionEntries.html +0 -1100
  238. data/doc/Sections/Controllers/Sections.html +0 -953
  239. data/doc/Sections/Liquid.html +0 -93
  240. data/doc/Sections/Liquid/SectionEntries.html +0 -674
  241. data/doc/Sections/Liquid/Sections.html +0 -494
  242. data/doc/Sections/Models.html +0 -97
  243. data/doc/Sections/Models/Section.html +0 -272
  244. data/doc/Sections/Models/SectionEntry.html +0 -264
  245. data/doc/Sequel.html +0 -91
  246. data/doc/Sequel/Model.html +0 -243
  247. data/doc/Settings.html +0 -93
  248. data/doc/Settings/Controllers.html +0 -91
  249. data/doc/Settings/Controllers/Settings.html +0 -565
  250. data/doc/Settings/Liquid.html +0 -91
  251. data/doc/Settings/Liquid/Setting.html +0 -426
  252. data/doc/Settings/Models.html +0 -95
  253. data/doc/Settings/Models/Setting.html +0 -293
  254. data/doc/Users.html +0 -93
  255. data/doc/Users/Controllers.html +0 -93
  256. data/doc/Users/Controllers/AccessRules.html +0 -904
  257. data/doc/Users/Controllers/UserGroups.html +0 -879
  258. data/doc/Users/Controllers/Users.html +0 -1124
  259. data/doc/Users/Liquid.html +0 -93
  260. data/doc/Users/Liquid/User.html +0 -480
  261. data/doc/Users/Liquid/Users.html +0 -495
  262. data/doc/Users/Models.html +0 -97
  263. data/doc/Users/Models/AccessRule.html +0 -257
  264. data/doc/Users/Models/User.html +0 -649
  265. data/doc/Users/Models/UserGroup.html +0 -267
  266. data/doc/Zen.html +0 -391
  267. data/doc/Zen/Bin.html +0 -113
  268. data/doc/Zen/Bin/Base.html +0 -727
  269. data/doc/Zen/Controllers.html +0 -115
  270. data/doc/Zen/Controllers/AdminController.html +0 -298
  271. data/doc/Zen/Controllers/BaseController.html +0 -272
  272. data/doc/Zen/Controllers/FrontendController.html +0 -164
  273. data/doc/Zen/Controllers/MainController.html +0 -421
  274. data/doc/Zen/Database.html +0 -498
  275. data/doc/Zen/Language.html +0 -660
  276. data/doc/Zen/Liquid.html +0 -117
  277. data/doc/Zen/Liquid/ControllerBehavior.html +0 -448
  278. data/doc/Zen/Liquid/General.html +0 -444
  279. data/doc/Zen/Liquid/Redirect.html +0 -435
  280. data/doc/Zen/Liquid/Strip.html +0 -447
  281. data/doc/Zen/Logger.html +0 -393
  282. data/doc/Zen/Package.html +0 -909
  283. data/doc/_index.html +0 -724
  284. data/doc/class_list.html +0 -36
  285. data/doc/css/common.css +0 -1
  286. data/doc/css/full_list.css +0 -53
  287. data/doc/css/style.css +0 -310
  288. data/doc/file.README.html +0 -86
  289. data/doc/file_list.html +0 -38
  290. data/doc/frames.html +0 -13
  291. data/doc/index.html +0 -86
  292. data/doc/js/app.js +0 -203
  293. data/doc/js/full_list.js +0 -149
  294. data/doc/js/jquery.js +0 -154
  295. data/doc/method_list.html +0 -1139
  296. data/doc/top-level-namespace.html +0 -88
  297. data/lib/zen/language/en/zen_general.rb +0 -21
  298. data/lib/zen/language/en/zen_models.rb +0 -39
  299. data/lib/zen/packages/categories/LICENSE +0 -19
  300. data/lib/zen/packages/categories/lib/categories/controller/categories.rb +0 -202
  301. data/lib/zen/packages/categories/lib/categories/controller/category_groups.rb +0 -173
  302. data/lib/zen/packages/categories/lib/categories/language/en/categories.rb +0 -38
  303. data/lib/zen/packages/categories/lib/categories/language/en/category_groups.rb +0 -37
  304. data/lib/zen/packages/categories/lib/categories/view/admin/categories/edit.xhtml +0 -7
  305. data/lib/zen/packages/categories/lib/categories/view/admin/categories/form.xhtml +0 -36
  306. data/lib/zen/packages/categories/lib/categories/view/admin/categories/index.xhtml +0 -70
  307. data/lib/zen/packages/categories/lib/categories/view/admin/categories/new.xhtml +0 -7
  308. data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/edit.xhtml +0 -7
  309. data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/form.xhtml +0 -18
  310. data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/index.xhtml +0 -72
  311. data/lib/zen/packages/categories/lib/categories/view/admin/category_groups/new.xhtml +0 -7
  312. data/lib/zen/packages/comments/LICENSE +0 -19
  313. data/lib/zen/packages/comments/README.textile +0 -0
  314. data/lib/zen/packages/comments/lib/comments/language/en/comments.rb +0 -52
  315. data/lib/zen/packages/comments/lib/comments/view/admin/comments/edit.xhtml +0 -7
  316. data/lib/zen/packages/comments/lib/comments/view/admin/comments/form.xhtml +0 -31
  317. data/lib/zen/packages/comments/lib/comments/view/admin/comments/index.xhtml +0 -74
  318. data/lib/zen/packages/comments/migrations/1296949631_add_defensio_signature.rb +0 -11
  319. data/lib/zen/packages/custom_fields/LICENSE +0 -19
  320. data/lib/zen/packages/custom_fields/README.textile +0 -0
  321. data/lib/zen/packages/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +0 -179
  322. data/lib/zen/packages/custom_fields/lib/custom_fields/controller/custom_fields.rb +0 -194
  323. data/lib/zen/packages/custom_fields/lib/custom_fields/language/en/custom_field_groups.rb +0 -45
  324. data/lib/zen/packages/custom_fields/lib/custom_fields/language/en/custom_fields.rb +0 -64
  325. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/edit.xhtml +0 -7
  326. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/form.xhtml +0 -18
  327. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/index.xhtml +0 -88
  328. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_field_groups/new.xhtml +0 -7
  329. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/edit.xhtml +0 -7
  330. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/form.xhtml +0 -50
  331. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/index.xhtml +0 -75
  332. data/lib/zen/packages/custom_fields/lib/custom_fields/view/admin/custom_fields/new.xhtml +0 -7
  333. data/lib/zen/packages/sections/LICENSE +0 -19
  334. data/lib/zen/packages/sections/README.textile +0 -43
  335. data/lib/zen/packages/sections/lib/sections/language/en/section_entries.rb +0 -58
  336. data/lib/zen/packages/sections/lib/sections/language/en/sections.rb +0 -63
  337. data/lib/zen/packages/sections/lib/sections/model/section.rb +0 -43
  338. data/lib/zen/packages/sections/lib/sections/model/section_entry.rb +0 -43
  339. data/lib/zen/packages/sections/lib/sections/view/admin/edit.xhtml +0 -7
  340. data/lib/zen/packages/sections/lib/sections/view/admin/form.xhtml +0 -54
  341. data/lib/zen/packages/sections/lib/sections/view/admin/index.xhtml +0 -77
  342. data/lib/zen/packages/sections/lib/sections/view/admin/new.xhtml +0 -7
  343. data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/edit.xhtml +0 -7
  344. data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/form.xhtml +0 -147
  345. data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/index.xhtml +0 -74
  346. data/lib/zen/packages/sections/lib/sections/view/admin/section_entries/new.xhtml +0 -7
  347. data/lib/zen/packages/sections/migrations/1296335671_userdata_section_entries.rb +0 -18
  348. data/lib/zen/packages/sections/migrations/1296936110_drop_comment_antispam.rb +0 -11
  349. data/lib/zen/packages/settings/README.textile +0 -0
  350. data/lib/zen/packages/settings/lib/settings/language/en/settings.rb +0 -56
  351. data/lib/zen/packages/settings/lib/settings/model/setting.rb +0 -38
  352. data/lib/zen/packages/settings/lib/settings/view/admin/settings/index.xhtml +0 -79
  353. data/lib/zen/packages/users/LICENSE +0 -19
  354. data/lib/zen/packages/users/README.textile +0 -0
  355. data/lib/zen/packages/users/lib/users/controller/access_rules.rb +0 -186
  356. data/lib/zen/packages/users/lib/users/controller/user_groups.rb +0 -171
  357. data/lib/zen/packages/users/lib/users/language/en/access_rules.rb +0 -49
  358. data/lib/zen/packages/users/lib/users/language/en/user_groups.rb +0 -42
  359. data/lib/zen/packages/users/lib/users/language/en/users.rb +0 -63
  360. data/lib/zen/packages/users/lib/users/public/admin/js/users/access_rules.js +0 -43
  361. data/lib/zen/packages/users/lib/users/view/admin/access_rules/edit.xhtml +0 -7
  362. data/lib/zen/packages/users/lib/users/view/admin/access_rules/form.xhtml +0 -68
  363. data/lib/zen/packages/users/lib/users/view/admin/access_rules/index.xhtml +0 -85
  364. data/lib/zen/packages/users/lib/users/view/admin/access_rules/new.xhtml +0 -7
  365. data/lib/zen/packages/users/lib/users/view/admin/user_groups/edit.xhtml +0 -7
  366. data/lib/zen/packages/users/lib/users/view/admin/user_groups/form.xhtml +0 -19
  367. data/lib/zen/packages/users/lib/users/view/admin/user_groups/index.xhtml +0 -69
  368. data/lib/zen/packages/users/lib/users/view/admin/user_groups/new.xhtml +0 -7
  369. data/lib/zen/packages/users/lib/users/view/admin/users/edit.xhtml +0 -7
  370. data/lib/zen/packages/users/lib/users/view/admin/users/form.xhtml +0 -25
  371. data/lib/zen/packages/users/lib/users/view/admin/users/index.xhtml +0 -73
  372. data/lib/zen/packages/users/lib/users/view/admin/users/login.xhtml +0 -22
  373. data/lib/zen/packages/users/lib/users/view/admin/users/new.xhtml +0 -7
  374. data/lib/zen/tasks.rb +0 -6
  375. data/proto/app/Rakefile +0 -2
  376. data/proto/module/LICENSE +0 -0
  377. data/proto/module/README.textile +0 -0
  378. data/proto/module/lib/module.rb +0 -15
  379. data/spec/javascript/css/base.css +0 -177
  380. data/spec/javascript/css/style.css +0 -204
  381. data/spec/javascript/css/typography.css +0 -70
  382. data/spec/javascript/editor/index.html +0 -65
  383. data/spec/javascript/images/close.png +0 -0
  384. data/spec/javascript/images/info.png +0 -0
  385. data/spec/javascript/js/editor.js +0 -16
  386. data/spec/javascript/js/modal.js +0 -12
  387. data/spec/javascript/js/namespace.js +0 -2
  388. data/spec/javascript/js/notification.js +0 -43
  389. data/spec/javascript/js/tabs.js +0 -8
  390. data/spec/javascript/modal/index.html +0 -45
  391. data/spec/javascript/notification/index.html +0 -48
  392. data/spec/javascript/tabs/index.html +0 -73
  393. data/spec/javascript/tabs/tab_1.html +0 -1
  394. data/spec/javascript/tabs/tab_2.html +0 -1
  395. data/spec/zen/base/language.rb +0 -31
  396. data/spec/zen/base/logger.rb +0 -34
  397. data/spec/zen/base/package.rb +0 -47
  398. data/spec/zen/config/database.rb +0 -8
  399. data/spec/zen/helper/asset.rb +0 -26
  400. data/spec/zen/helper/breadcrumb.rb +0 -24
  401. data/spec/zen/language/en/general.rb +0 -4
  402. data/spec/zen/language/nl/general.rb +0 -4
  403. data/spec/zen/liquid/general.rb +0 -42
  404. data/spec/zen/logs/.gitkeep +0 -0
  405. data/spec/zen/spec.rb +0 -9
  406. data/spec/zen/spec_database.db +0 -0
  407. data/tasks/bacon.rake +0 -99
  408. data/tasks/build.rake +0 -72
  409. data/tasks/clean.rake +0 -18
  410. data/tasks/db.rake +0 -81
  411. data/tasks/doc.rake +0 -5
  412. data/tasks/extension.rake +0 -65
  413. data/tasks/proto.rake +0 -37
  414. data/tasks/theme.rake +0 -63
@@ -0,0 +1,231 @@
1
+ #:nodoc:
2
+ module Menus
3
+ #:nodoc:
4
+ module Controllers
5
+ ##
6
+ # Controller for managing menu groups. Individual navigation items are managed using
7
+ # the menu items controller, simply named "menu_items".
8
+ #
9
+ # @author Yorick Peterse
10
+ # @since 0.2a
11
+ #
12
+ class Menus < Zen::Controllers::AdminController
13
+ include ::Menus::Models
14
+
15
+ map '/admin/menus'
16
+ trait :extension_identifier => 'com.zen.menus'
17
+
18
+ before_all do
19
+ csrf_protection(:save, :delete) do
20
+ respond(lang('zen_general.errors.csrf'), 403)
21
+ end
22
+ end
23
+
24
+ ##
25
+ # Initializes the class and loads all required language packs.
26
+ #
27
+ # This method loads the following language files:
28
+ #
29
+ # * menus
30
+ #
31
+ # @author Yorick Peterse
32
+ # @since 0.2a
33
+ #
34
+ def initialize
35
+ super
36
+
37
+ @form_save_url = Menus.r(:save)
38
+ @form_delete_url = Menus.r(:delete)
39
+
40
+ Zen::Language.load('menus')
41
+
42
+ # Set the page title
43
+ if !action.method.nil?
44
+ method = action.method.to_sym
45
+ @page_title = lang("menus.titles.#{method}") rescue nil
46
+ end
47
+ end
48
+
49
+ ##
50
+ # Shows an overview of all exisitng menus and a few properties of these
51
+ # groups such as the name, slug and the amount of items in that group.
52
+ #
53
+ # This method requires the following permissions:
54
+ #
55
+ # * read
56
+ #
57
+ # @author Yorick Peterse
58
+ # @since 0.2a
59
+ #
60
+ def index
61
+ if !user_authorized?([:read])
62
+ respond(lang('zen_general.errors.not_authorized'), 403)
63
+ end
64
+
65
+ # Set our breadcrumbs
66
+ set_breadcrumbs(lang('menus.titles.index'))
67
+
68
+ # Get all menus
69
+ @menus = Menu.all
70
+ end
71
+
72
+ ##
73
+ # Show a form that allows the user to edit the details (such as the name and slug)
74
+ # of a menu group. This method can not be used to manage all menu items for this
75
+ # group.
76
+ #
77
+ # This method requires the following permissions:
78
+ #
79
+ # * read
80
+ # * update
81
+ #
82
+ # @author Yorick Peterse
83
+ # @since 0.2a
84
+ #
85
+ def edit(id)
86
+ if !user_authorized?([:read, :update])
87
+ respond(lang('zen_general.errors.not_authorized'), 403)
88
+ end
89
+
90
+ set_breadcrumbs(
91
+ anchor_to(lang('menus.titles.index'), Menus.r(:index)),
92
+ @page_title
93
+ )
94
+
95
+ if flash[:form_data]
96
+ @menu = flash[:form_data]
97
+ else
98
+ @menu = Menu[id]
99
+ end
100
+ end
101
+
102
+ ##
103
+ # Show a form that can be used to create a new menu group. Once a menu group has
104
+ # been created users can start adding navigation items to the group.
105
+ #
106
+ # This method requires the following permissions:
107
+ #
108
+ # * create
109
+ # * read
110
+ #
111
+ # @author Yorick Peterse
112
+ # @since 0.2a
113
+ #
114
+ def new
115
+ if !user_authorized?([:create, :read])
116
+ respond(lang('zen_general.errors.not_authorized'), 403)
117
+ end
118
+
119
+ # Breadcrumbs, om nom nom!
120
+ set_breadcrumbs(
121
+ anchor_to(lang('menus.titles.index'), Menus.r(:index)),
122
+ @page_title
123
+ )
124
+
125
+ @menu = Menu.new
126
+ end
127
+
128
+ ##
129
+ # Saves the changes made to an existing menu group or creates a new group using the
130
+ # supplied POST data. In order to detect this forms that contain data of an existing
131
+ # group should have a hidden field named "id", the value of this field is the primary
132
+ # value of the menu group of which the changes should be saved.
133
+ #
134
+ # This method requires the following permissions:
135
+ #
136
+ # * create
137
+ # * update
138
+ #
139
+ # @author Yorick Peterse
140
+ # @since 0.2a
141
+ #
142
+ def save
143
+ if !user_authorized?([:create, :update])
144
+ respond(lang('zen_general.errors.not_authorized'), 403)
145
+ end
146
+
147
+ # Fetch the POST data and store it in a variable so it's a bit easier to work with
148
+ post = request.params.dup
149
+
150
+ # Determine if we're creating a new group or modifying an existing one.
151
+ if !post['id'].empty?
152
+ @menu = Menu[post['id'].to_i]
153
+ save_action = :save
154
+ else
155
+ @menu = Menu.new
156
+ save_action = :new
157
+ end
158
+
159
+ # Set our notifications
160
+ flash_success = lang("menus.success.#{save_action}")
161
+ flash_error = lang("menus.errors.#{save_action}")
162
+
163
+ # Let's see if we can insert/update the data
164
+ begin
165
+ @menu.update(post)
166
+ notification(:success, lang('menus.titles.index'), flash_success)
167
+ rescue
168
+ notification(:error, lang('menus.titles.index'), flash_error)
169
+
170
+ flash[:form_data] = @menu
171
+ flash[:form_errors] = @menu.errors
172
+ end
173
+
174
+ # Redrect the user to the proper page
175
+ if @menu.id
176
+ redirect(Menus.r(:edit, @menu.id))
177
+ else
178
+ redirect_referrer
179
+ end
180
+ end
181
+
182
+ ##
183
+ # Deletes a number of navigation menus based on the supplied primary values.
184
+ # These primary values should be stored in a POST array called "menu_ids".
185
+ #
186
+ # This method requires the following permissions:
187
+ #
188
+ # * delete
189
+ #
190
+ # @author Yorick Peterse
191
+ # @since 0.2a
192
+ #
193
+ def delete
194
+ if !user_authorized?([:delete])
195
+ respond(lang('zen_general.errors.not_authorized'), 403)
196
+ end
197
+
198
+ post = request.params.dup
199
+
200
+ # We always require a set of IDs
201
+ if !post['menu_ids'] or post['menu_ids'].empty?
202
+ notification(
203
+ :error,
204
+ lang('menus.titles.index'),
205
+ lang('menus.errors.no_delete')
206
+ )
207
+
208
+ redirect_referrer
209
+ end
210
+
211
+ # Time to delete all menus
212
+ post['menu_ids'].each do |id|
213
+ begin
214
+ Menu[id.to_i].destroy
215
+ rescue
216
+ notification(
217
+ :error,
218
+ lang('menus.titles.index'),
219
+ lang('menus.errors.delete') % id
220
+ )
221
+
222
+ redirect_referrer
223
+ end
224
+ end
225
+
226
+ notification(:success, lang('menus.titles.index'), lang('menus.success.delete'))
227
+ redirect_referrer
228
+ end
229
+ end
230
+ end
231
+ end
@@ -0,0 +1,93 @@
1
+ #:nodoc:
2
+ module Ramaze
3
+ #:nodoc:
4
+ module Helper
5
+ ##
6
+ # Small helper for the Menus package mainly used to reduce the amount of code
7
+ # in controllers.
8
+ #
9
+ # @author Yorick Peterse
10
+ # @since 0.2a
11
+ #
12
+ module MenuItem
13
+ ##
14
+ # Checks if there is a menu for the given ID. If this isn't the case the user
15
+ # will be redirected back to the index page of the menus controller.
16
+ #
17
+ # @author Yorick Peterse
18
+ # @since 0.2a
19
+ # @param [Integer] menu_id The ID of the menu to validate.
20
+ #
21
+ def validate_menu(menu_id = nil)
22
+ if !menu_id or ::Menus::Models::Menu[menu_id].nil?
23
+ notification(
24
+ :error,
25
+ @menu_items_lang.titles[:index],
26
+ @menu_items_lang.errors[:invalid_menu]
27
+ )
28
+
29
+ redirect(::Menus::Controllers::Menus.r(:index))
30
+ end
31
+ end
32
+
33
+ ##
34
+ # Builds a hierarchy of navigation items and all their sub items. The generated
35
+ # structure looks like the following:
36
+ #
37
+ # Root
38
+ # |
39
+ # |_ Sub
40
+ # | |
41
+ # | |_ Sub sub
42
+ # |
43
+ # |_ Sub 1
44
+ #
45
+ # @author Yorick Peterse
46
+ # @since 0.2a
47
+ # @param [Integer] menu_id The ID of the current menu group.
48
+ # @return [Hash]
49
+ #
50
+ def menu_item_tree(menu_id)
51
+ menu_items = ::Menus::Models::MenuItem.filter(
52
+ :menu_id => menu_id,
53
+ :parent_id => nil
54
+ )
55
+
56
+ @menu_items_hash = {nil => '--'}
57
+
58
+ menu_items.each do |item|
59
+ @menu_items_hash[item.id] = item.name
60
+
61
+ item.descendants.each do |i|
62
+ self.descendant_items(i, 2)
63
+ end
64
+ end
65
+
66
+ return @menu_items_hash
67
+ end
68
+
69
+ ##
70
+ # Helper method for retrieving descendant navigation items.
71
+ #
72
+ # @author Yorick Peterse
73
+ # @since 0.2a
74
+ # @param [Menus::Models::MenuItem] item A MenuItem instance
75
+ # @param [Integer] spaces The amount of unbreakable spaces to use.
76
+ #
77
+ def descendant_items(item, spaces)
78
+ return if @menu_items_hash.key?(item.id)
79
+
80
+ nbsps = ''
81
+ spaces.times { nbsps += "&nbsp;" }
82
+ @menu_items_hash[item.id] = nbsps + item.name
83
+ descendants = item.descendants
84
+
85
+ if !descendants.empty?
86
+ descendants.each do |i|
87
+ self.descendant_items(i, spaces + 2)
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
93
+ end
@@ -0,0 +1,41 @@
1
+ ---
2
+ titles:
3
+ index : 'Menu Items'
4
+ edit : 'Edit Menu Item'
5
+ new : 'Create Menu Item'
6
+
7
+ labels:
8
+ id : '#'
9
+ parent_id : 'Parent'
10
+ name : 'Name'
11
+ url : 'URL'
12
+ order : 'Order'
13
+ css_class : 'CSS class'
14
+ css_id : 'CSS ID'
15
+
16
+ placeholders:
17
+ name : 'The text that will be displayed in the link.'
18
+ url : 'The location to which the link will point.'
19
+ order : 'A number that indicates the sort order.'
20
+ css_class : 'Specify a class name to use for stylesheets.'
21
+ css_id : 'Specify an ID to use for stylesheets.'
22
+
23
+ messages:
24
+ no_items : 'No menu items have been added yet.'
25
+
26
+ buttons:
27
+ new : 'Add menu item'
28
+ save : 'Save menu item'
29
+ delete : 'Delete selected menu items'
30
+
31
+ success:
32
+ new : 'The menu item has been created.'
33
+ save : 'The menu item has been modified.'
34
+ delete : 'The selected menu items have been deleted.'
35
+
36
+ errors:
37
+ new : 'The menu item could not be created.'
38
+ save : 'The menu item could not be modified.'
39
+ delete : 'The menu item with ID #%s could not be deleted.'
40
+ no_delete : 'You need to specify at least one item to delete.'
41
+ invalid_menu : 'The specified menu was invalid or no longer exists.'
@@ -0,0 +1,39 @@
1
+ ---
2
+ titles:
3
+ index : 'Menus'
4
+ edit : 'Edit Menu'
5
+ new : 'Add Menu'
6
+
7
+ labels:
8
+ id : '#'
9
+ name : 'Name'
10
+ slug : 'Slug'
11
+ description : 'Description'
12
+ css_class : 'CSS class'
13
+ css_id : 'CSS ID'
14
+ manage_items : 'Manage menu items'
15
+
16
+ placeholders:
17
+ name : 'Specify the name of the menu.'
18
+ slug : 'Specify the URL friendly name of the menu.'
19
+ css_class : 'Specify a class to use in stylesheets.'
20
+ css_id : 'Specify an ID to use in stylesheets.'
21
+
22
+ messages:
23
+ no_menus: 'No menus have been added yet.'
24
+
25
+ buttons:
26
+ new : 'Add menu'
27
+ save : 'Save menu'
28
+ delete : 'Delete selected menus'
29
+
30
+ success:
31
+ new : 'The menu has been created.'
32
+ save : 'The menu has been modified.'
33
+ delete : 'The selected menus have been deleted.'
34
+
35
+ errors:
36
+ new : 'The menu could not be created.'
37
+ save : 'The menu could not be modified.'
38
+ delete : 'The menu with ID #%s could not be deleted.'
39
+ no_delete : 'You need to specify at least one menu to delete.'
@@ -0,0 +1,152 @@
1
+ require 'ramaze/gestalt'
2
+
3
+ #:nodoc:
4
+ module Menus
5
+ #:nodoc:
6
+ module Liquid
7
+ ##
8
+ # The menus tag can be used to display all menu items for a given menu slug or ID.
9
+ # Basic usage of this tag is as following:
10
+ #
11
+ # {% menus slug="main" %}
12
+ #
13
+ # Given we had a menu of which the slug is "main" the output would look like the this:
14
+ #
15
+ # <ul>
16
+ # <li>
17
+ # <a href="http://zen-cms.com/" title="Zen CMS">Zen CMS</a>
18
+ # </li>
19
+ # </ul>
20
+ #
21
+ # This tag takes the following arguments:
22
+ #
23
+ # * slug: the slug of the menu for which to retrieve all items.
24
+ # * id: the ID of the menu for which to retrieve all items.
25
+ # * order: string (either "asc" or "desc") that will be used to order the menu items.
26
+ #
27
+ # If both the slug and ID are specified the ID will be used instead of the slug.
28
+ #
29
+ # @example
30
+ # {% menus slug="main" order="asc" %}
31
+ #
32
+ # @author Yorick Peterse
33
+ # @since 0.2a
34
+ #
35
+ class Menus < ::Liquid::Tag
36
+ include ::Zen::Liquid::General
37
+
38
+ ##
39
+ # Initializes the tag class and converts the arguments string into a key/value
40
+ # hash.
41
+ #
42
+ # @author Yorick Peterse
43
+ # @since 0.2a
44
+ # @param [String] tag_name The name of the tag ("menus").
45
+ # @param [String] arguments All arguments passed as key="value" combinations.
46
+ # @param [String] tokens All tokens passed to the tag.
47
+ #
48
+ def initialize(tag_name = 'menus', arguments = '', tokens = '')
49
+ super
50
+
51
+ @arguments = {
52
+ 'order' => 'desc'
53
+ }.merge(parse_key_values(arguments))
54
+
55
+ @args_parsed = false
56
+ end
57
+
58
+ ##
59
+ # Retrieves the specified menu, generates the HTML and renders the Liquid template.
60
+ #
61
+ # @author Yorick Peterse
62
+ # @since 0.2a
63
+ # @param [Liquid::Context] context The current Liquid instance.
64
+ # @return [String] The HTML for the specified navigation menu.
65
+ #
66
+ def render(context)
67
+ if @args_parsed == false
68
+ @arguments = merge_context(@arguments, context)
69
+ end
70
+
71
+ @args_parsed = true
72
+ menu_items = []
73
+
74
+ if @arguments.key?('id')
75
+ menu = ::Menus::Models::Menu[@arguments['slug'].to_i]
76
+
77
+ elsif @arguments.key?('slug')
78
+ menu = ::Menus::Models::Menu[:slug => @arguments['slug']]
79
+
80
+ else
81
+ raise(
82
+ ArgumentError,
83
+ "You need to specify either the ID or the slug in order to retrieve a menu."
84
+ )
85
+ end
86
+
87
+ return if menu.nil?
88
+
89
+ menu_items = ::Menus::Models::MenuItem.filter(:menu_id => menu.id)
90
+ .order(:order.send(@arguments['order']))
91
+
92
+ # Build the navigation menu
93
+ @g = ::Ramaze::Gestalt.new
94
+ attributes = {}
95
+ attributes[:class] = menu.css_class if !menu.css_class.nil?
96
+ attributes[:id] = menu.css_id if !menu.css_id.nil?
97
+
98
+ # Organize all menu items in a parent/child hierachy
99
+ items_ordered = {}
100
+
101
+ @g.ul(attributes) do
102
+ menu_items.each do |item|
103
+ if item.parent_id.nil?
104
+ self.menu_item(item)
105
+ end
106
+ end
107
+ end
108
+
109
+ return @g.to_s
110
+ end
111
+
112
+ ##
113
+ # Helper method used for generating a <li> and <a> tag for the current navigation
114
+ # item. If the item has any sub items those will be generated as well.
115
+ #
116
+ # @author Yorick Peterse
117
+ # @since 0.2a
118
+ # @param [Object] item The current navigation item
119
+ #
120
+ def menu_item(item)
121
+ attributes = {}
122
+
123
+ if !item.css_class.nil? and !item.css_class.empty?
124
+ attributes[:class] = item.css_class
125
+ end
126
+
127
+ if !item.css_id.nil? and !item.css_id.empty?
128
+ attributes[:id] = item.css_id
129
+ end
130
+
131
+ children = item.children
132
+
133
+ @g.li(attributes) do
134
+ if !item.url.nil? and !item.url.empty?
135
+ @g.a(:href => item.url, :title => item.name) { item.name }
136
+ else
137
+ @g.span { item.name }
138
+ end
139
+
140
+ if !children.empty?
141
+ @g.ul(:class => :children) do
142
+ item.children.each do |i|
143
+ self.menu_item(i)
144
+ end
145
+ end
146
+ end
147
+ end # end of @g.li(attributes) do
148
+ end
149
+
150
+ end
151
+ end
152
+ end