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,216 @@
1
+ module Categories
2
+ module Controllers
3
+ ##
4
+ # Category groups can be used to group a number of categories into a single container.
5
+ # These groups are assigned to a section (rather than individual categories). It's
6
+ # important to remember that a section entry can't use a category group until it has
7
+ # been added to a section.
8
+ #
9
+ # @author Yorick Peterse
10
+ # @since 0.1
11
+ #
12
+ class CategoryGroups < Zen::Controllers::AdminController
13
+ include ::Categories::Models
14
+
15
+ map '/admin/category-groups'
16
+ trait :extension_identifier => 'com.zen.categories'
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
+ # The constructor is used to set various options such as the form URLs and load
26
+ # the language pack for the categories module.
27
+ #
28
+ # The following language files are loaded:
29
+ #
30
+ # * category_groups
31
+ #
32
+ # @author Yorick Peterse
33
+ # @since 0.1
34
+ #
35
+ def initialize
36
+ super
37
+
38
+ @form_save_url = CategoryGroups.r(:save)
39
+ @form_delete_url = CategoryGroups.r(:delete)
40
+
41
+ Zen::Language.load('category_groups')
42
+
43
+ # Set the page title
44
+ if !action.method.nil?
45
+ method = action.method.to_s
46
+ @page_title = lang("category_groups.titles.#{method}") rescue nil
47
+ end
48
+ end
49
+
50
+ ##
51
+ # Show an overview of all existing category groups and allow the user
52
+ # to create new category groups or manage individual categories.
53
+ #
54
+ # This method requires the following permissions:
55
+ #
56
+ # * read
57
+ #
58
+ # @author Yorick Peterse
59
+ # @since 0.1
60
+ #
61
+ def index
62
+ if !user_authorized?([:read])
63
+ respond(lang('zen_general.errors.not_authorized'), 403)
64
+ end
65
+
66
+ set_breadcrumbs(lang('category_groups.titles.index'))
67
+
68
+ @category_groups = CategoryGroup.all
69
+ end
70
+
71
+ ##
72
+ # Edit an existing category group based on the ID specified in the URL.
73
+ # This method requires the following permissions:
74
+ #
75
+ # * read
76
+ # * update
77
+ #
78
+ # @author Yorick Peterse
79
+ # @since 0.1
80
+ #
81
+ def edit id
82
+ if !user_authorized?([:read, :update])
83
+ respond(lang('zen_general.errors.not_authorized'), 403)
84
+ end
85
+
86
+ set_breadcrumbs(
87
+ anchor_to(lang('category_groups.titles.index'), CategoryGroups.r(:index)),
88
+ lang('category_groups.titles.edit')
89
+ )
90
+
91
+ if flash[:form_data]
92
+ @category_group = flash[:form_data]
93
+ else
94
+ @category_group = CategoryGroup[id]
95
+ end
96
+ end
97
+
98
+ ##
99
+ # Create a new category group. This method requires the following permissions:
100
+ #
101
+ # * create
102
+ # * read
103
+ #
104
+ # @author Yorick Peterse
105
+ # @since 0.1
106
+ #
107
+ def new
108
+ if !user_authorized?([:create, :read])
109
+ respond(lang('zen_general.errors.not_authorized'), 403)
110
+ end
111
+
112
+ set_breadcrumbs(
113
+ anchor_to(lang('category_groups.titles.index'), CategoryGroups.r(:index)),
114
+ lang('category_groups.titles.new')
115
+ )
116
+
117
+ @category_group = CategoryGroup.new
118
+ end
119
+
120
+ ##
121
+ # Save or create a new category group based on the current POST data.
122
+ # This method requires the following permissions:
123
+ #
124
+ # * create
125
+ # * update
126
+ #
127
+ # @author Yorick Peterse
128
+ # @since 0.1
129
+ #
130
+ def save
131
+ if !user_authorized?([:create, :update])
132
+ respond(lang('zen_general.errors.not_authorized'), 403)
133
+ end
134
+
135
+ post = request.params.dup
136
+
137
+ if post['id'] and !post['id'].empty?
138
+ @category_group = CategoryGroup[post['id'].to_i]
139
+ save_action = :save
140
+ else
141
+ @category_group = CategoryGroup.new
142
+ save_action = :new
143
+ end
144
+
145
+ flash_success = lang("category_groups.success.#{save_action}")
146
+ flash_error = lang("category_groups.errors.#{save_action}")
147
+
148
+ begin
149
+ @category_group.update(post)
150
+ notification(:success, lang('category_groups.titles.index'), flash_success)
151
+ rescue
152
+ notification(:error, lang('category_groups.titles.index'), flash_error)
153
+
154
+ flash[:form_data] = @category_group
155
+ flash[:form_errors] = @category_group.errors
156
+ end
157
+
158
+ if !@category_group.nil? and @category_group.id
159
+ redirect(CategoryGroups.r(:edit, @category_group.id))
160
+ else
161
+ redirect(CategoryGroups.r(:new))
162
+ end
163
+ end
164
+
165
+ ##
166
+ # Delete all specified category groups and their categories. In
167
+ # order to delete a number of groups an array of fields, named "category_group_ids"
168
+ # is required. This array will contain all the primary values of each group that
169
+ # has to be deleted.
170
+ #
171
+ # This method requires the following permissions:
172
+ #
173
+ # * delete
174
+ #
175
+ # @author Yorick Peterse
176
+ # @since 0.1
177
+ #
178
+ def delete
179
+ if !user_authorized?([:delete])
180
+ respond(lang('zen_general.errors.not_authorized'), 403)
181
+ end
182
+
183
+ post = request.params.dup
184
+
185
+ if !post['category_group_ids'] or post['category_group_ids'].empty?
186
+ notification(
187
+ :error,
188
+ lang('category_groups.titles.index'),
189
+ lang('category_groups.errors.no_delete')
190
+ )
191
+
192
+ redirect(CategoryGroups.r(:index))
193
+ end
194
+
195
+ post['category_group_ids'].each do |id|
196
+ begin
197
+ CategoryGroup[id.to_i].destroy
198
+ notification(
199
+ :success,
200
+ lang('category_groups.titles.index'),
201
+ lang('category_groups.success.delete')
202
+ )
203
+ rescue
204
+ notification(
205
+ :error,
206
+ lang('category_groups.titles.index'),
207
+ lang('category_groups.errors.delete') % id
208
+ )
209
+ end
210
+ end
211
+
212
+ redirect(CategoryGroups.r(:index))
213
+ end
214
+ end
215
+ end
216
+ end
@@ -0,0 +1,35 @@
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
+
32
+ buttons:
33
+ new : 'Add Category'
34
+ save : 'Save Category'
35
+ delete : 'Delete selected categories'
@@ -0,0 +1,32 @@
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
+
29
+ buttons:
30
+ new : 'Add group'
31
+ save : 'Save group'
32
+ delete : 'Delete selected groups'
@@ -0,0 +1,16 @@
1
+ #:nodoc:
2
+ module Categories
3
+ #:nodoc:
4
+ module Liquid
5
+ ##
6
+ #
7
+ #
8
+ # @author Yorick Peterse
9
+ # @since 0.2
10
+ # @todo Create this tag you lazy bum!
11
+ #
12
+ class Categories < ::Liquid::Block
13
+
14
+ end
15
+ end
16
+ end
@@ -1,8 +1,9 @@
1
+ #:nodoc:
1
2
  module Categories
3
+ #:nodoc:
2
4
  module Models
3
5
  ##
4
- # Model that represents a single category. This model has
5
- # the following relations:
6
+ # Model that represents a single category. This model has the following relations:
6
7
  #
7
8
  # * category groups (one to one)
8
9
  # * self (many to one)
@@ -20,10 +21,10 @@ module Categories
20
21
  # @since 0.1
21
22
  #
22
23
  class Category < Sequel::Model
23
- one_to_one :category_groups
24
- many_to_one :parent, :class => self
24
+ many_to_one :category_group , :class => "Categories::Models::CategoryGroup"
25
+ many_to_one :parent , :class => self
25
26
 
26
- plugin :sluggable, :source => :name, :freeze => false
27
+ plugin :sluggable, :source => :name, :frozen => false
27
28
 
28
29
  ##
29
30
  # Validation rules for our model.
@@ -32,10 +33,9 @@ module Categories
32
33
  # @since 0.1
33
34
  #
34
35
  def validate
35
- validates_presence [:name]
36
- validates_presence [:slug] unless new?
37
- validates_max_length 255, [:name, :slug]
38
- validates_unique [:slug]
36
+ validates_presence :name
37
+ validates_max_length 255, [:name, :slug]
38
+ validates_unique :slug
39
39
  end
40
40
  end
41
41
  end
@@ -1,4 +1,6 @@
1
+ #:nodoc:
1
2
  module Categories
3
+ #:nodoc:
2
4
  module Models
3
5
  ##
4
6
  # Model that represents a single category group. Each category group
@@ -11,8 +13,8 @@ module Categories
11
13
  # and should be no longer than 255 characters.
12
14
  #
13
15
  class CategoryGroup < Sequel::Model
14
- one_to_many :categories
15
- many_to_many :sections
16
+ one_to_many :categories, :class => "Categories::Models::Category"
17
+ many_to_many :sections , :class => "Sections::Models::Section"
16
18
 
17
19
  ##
18
20
  # Validation rules for our model.
@@ -21,8 +23,8 @@ module Categories
21
23
  # @since 0.1
22
24
  #
23
25
  def validate
24
- validates_presence [:name]
25
- validates_max_length 255, [:name]
26
+ validates_presence :name
27
+ validates_max_length 255, :name
26
28
  end
27
29
  end
28
30
  end
@@ -0,0 +1,7 @@
1
+ <article>
2
+ <header>
3
+ <h1>#{get_breadcrumbs}</h1>
4
+ </header>
5
+
6
+ #{render_partial :form}
7
+ </article>
@@ -0,0 +1,59 @@
1
+ #{
2
+ form_for(
3
+ @category, :method => :post, :action => @form_save_url, :id => :category_form
4
+ ) do |f|
5
+
6
+ f.input_hidden(:category_group_id, @category_group_id)
7
+ f.input_hidden(:id , @category.id)
8
+ f.input_hidden(:csrf_token , get_csrf_token)
9
+
10
+ f.g.div(:id => 'general') do
11
+ f.input_text(
12
+ lang('categories.labels.name'),
13
+ :name,
14
+ :placeholder => lang('categories.placeholders.name'),
15
+ :required => :required,
16
+ :maxlength => 255
17
+ )
18
+
19
+ f.input_text(
20
+ lang('categories.labels.slug'),
21
+ :slug,
22
+ :placeholder => lang('categories.placeholders.slug')
23
+ )
24
+
25
+ # Generate the dropdown that contains all possible parent categories
26
+ parent_categories = {}
27
+ Categories::Models::CategoryGroup[@category_group_id].categories.each do |c|
28
+ if c.id != @category.id
29
+ parent_categories[c.id] = c.name
30
+ end
31
+ end
32
+
33
+ parent_categories[nil] = '--'
34
+
35
+ if !parent_categories.empty?
36
+ f.select(
37
+ lang('categories.labels.parent'),
38
+ :parent_id,
39
+ :values => parent_categories,
40
+ :size => 1,
41
+ :selected => @category.parent_id
42
+ )
43
+ end
44
+
45
+ f.textarea(
46
+ lang('categories.labels.description'),
47
+ :description,
48
+ :rows => 8
49
+ )
50
+ end
51
+
52
+ f.g.div(:class => "clearfix") do
53
+ f.g.div(:class => "button") do
54
+ f.g.input(:type => 'submit', :value => lang('categories.buttons.save'))
55
+ end
56
+ end
57
+
58
+ end
59
+ }
@@ -0,0 +1,78 @@
1
+ <article>
2
+ <header>
3
+ <h1>#{get_breadcrumbs}</h1>
4
+ </header>
5
+
6
+ <form method="post" action="#{@form_delete_url}">
7
+ <input type="hidden" name="csrf_token" value="#{get_csrf_token}" />
8
+ <input type="hidden" name="category_group_id" value="#{@category_group_id}" />
9
+
10
+ <?r if @categories and !@categories.empty? ?>
11
+
12
+ <table class="table">
13
+ <thead>
14
+ <tr>
15
+ <?r if user_authorized?([:delete]) ?>
16
+ <th>
17
+ <input type="checkbox" />
18
+ </th>
19
+ <?r end ?>
20
+
21
+ <th>#{lang('categories.labels.id')}</th>
22
+ <th>#{lang('categories.labels.name')}</th>
23
+ <th>#{lang('categories.labels.slug')}</th>
24
+ <th>#{lang('categories.labels.parent')}</th>
25
+ </tr>
26
+ </thead>
27
+ <tbody>
28
+ <?r @categories.each do |category| ?>
29
+ <tr>
30
+ <?r if user_authorized?([:delete]) ?>
31
+ <td>
32
+ <input type="checkbox" name="category_ids[]" value="#{category.id}" />
33
+ </td>
34
+ <?r end ?>
35
+
36
+ <td>#{category.id}</td>
37
+
38
+ <?r if user_authorized?([:update]) ?>
39
+ <td>
40
+ #{anchor_to(
41
+ category.name,
42
+ Categories::Controllers::Categories.r(:edit, @category_group_id, category.id)
43
+ )}
44
+ </td>
45
+ <?r else ?>
46
+ <td>#{category.name}</td>
47
+ <?r end ?>
48
+
49
+ <td>#{category.slug}</td>
50
+ <td>#{category.parent.name if category.parent.respond_to?(:name)}</td>
51
+ </tr>
52
+ <?r end ?>
53
+ </tbody>
54
+ </table>
55
+
56
+ <?r else ?>
57
+ <p>#{lang('categories.messages.no_categories')}</p>
58
+ <?r end ?>
59
+
60
+ <div class="clearfix">
61
+ <?r if user_authorized?([:create]) ?>
62
+ <div class="button">
63
+ #{anchor_to(
64
+ lang('categories.buttons.new'),
65
+ Categories::Controllers::Categories.r(:new, @category_group_id)
66
+ )}
67
+ </div>
68
+ <?r end ?>
69
+
70
+ <?r if user_authorized?([:delete]) and @categories and !@categories.empty? ?>
71
+ <div class="button">
72
+ <input type="submit" value="#{lang('categories.buttons.delete')}" />
73
+ </div>
74
+ <?r end ?>
75
+
76
+ </div>
77
+ </form>
78
+ </article>