zen 0.3 → 0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (373) hide show
  1. data/.gems +3 -2
  2. data/.rvmrc +1 -1
  3. data/.travis.yml +5 -0
  4. data/.yardopts +2 -1
  5. data/LICENSE +1 -1
  6. data/README.md +28 -24
  7. data/Rakefile +5 -2
  8. data/guide/asset_management.md +6 -6
  9. data/guide/autosaving_forms.md +42 -0
  10. data/guide/changelog.md +41 -0
  11. data/guide/faq.md +49 -0
  12. data/guide/getting_started.md +24 -13
  13. data/guide/hacking.md +40 -9
  14. data/guide/images/categories/categories.png +0 -0
  15. data/guide/images/categories/category_groups.png +0 -0
  16. data/guide/images/categories/new_category.png +0 -0
  17. data/guide/images/categories/new_category_group.png +0 -0
  18. data/guide/images/comments/comments.png +0 -0
  19. data/guide/images/comments/edit_comment.png +0 -0
  20. data/guide/images/custom_fields/custom_field_groups.png +0 -0
  21. data/guide/images/custom_fields/custom_field_types.png +0 -0
  22. data/guide/images/custom_fields/custom_fields.png +0 -0
  23. data/guide/images/custom_fields/edit_custom_field_general.png +0 -0
  24. data/guide/images/custom_fields/edit_custom_field_group.png +0 -0
  25. data/guide/images/custom_fields/edit_custom_field_settings.png +0 -0
  26. data/guide/images/custom_fields/edit_custom_field_type.png +0 -0
  27. data/guide/images/dashboard/added.png +0 -0
  28. data/guide/images/dashboard/columns.png +0 -0
  29. data/guide/images/dashboard/dashboard.png +0 -0
  30. data/guide/images/dashboard/options.png +0 -0
  31. data/guide/images/menus/edit_menu.png +0 -0
  32. data/guide/images/menus/edit_menu_item.png +0 -0
  33. data/guide/images/menus/menu_item_hierarchy.png +0 -0
  34. data/guide/images/menus/menu_items.png +0 -0
  35. data/guide/images/menus/menus.png +0 -0
  36. data/guide/images/sections/edit_entry.png +0 -0
  37. data/guide/images/sections/edit_entry_categories.png +0 -0
  38. data/guide/images/sections/edit_entry_general.png +0 -0
  39. data/guide/images/sections/edit_entry_meta.png +0 -0
  40. data/guide/images/sections/edit_section_comments.png +0 -0
  41. data/guide/images/sections/edit_section_general.png +0 -0
  42. data/guide/images/sections/edit_section_groups.png +0 -0
  43. data/guide/images/sections/entries.png +0 -0
  44. data/guide/images/sections/sections.png +0 -0
  45. data/guide/images/settings/overview_general.png +0 -0
  46. data/guide/images/settings/overview_security.png +0 -0
  47. data/guide/images/settings/overview_user.png +0 -0
  48. data/guide/images/users/edit_user.png +0 -0
  49. data/guide/images/users/edit_user_group.png +0 -0
  50. data/guide/images/users/edit_user_group_permissions.png +0 -0
  51. data/guide/images/users/edit_user_permissions.png +0 -0
  52. data/guide/images/users/overview.png +0 -0
  53. data/guide/images/users/user_groups_overview.png +0 -0
  54. data/guide/installation.md +7 -1
  55. data/guide/javascript.md +36 -273
  56. data/guide/javascript/zen_autosave.md +26 -0
  57. data/guide/javascript/zen_editor.md +83 -0
  58. data/guide/javascript/zen_hash.md +34 -0
  59. data/guide/javascript/zen_htmltable.md +78 -0
  60. data/guide/javascript/zen_tabs.md +44 -0
  61. data/guide/javascript/zen_window.md +49 -0
  62. data/guide/zen_compared.md +201 -0
  63. data/lib/vendor/sequel_sluggable.rb +1 -1
  64. data/lib/zen.rb +64 -44
  65. data/lib/zen/asset_groups.rb +10 -10
  66. data/lib/zen/bin/create.rb +8 -1
  67. data/lib/zen/helper/breadcrumb.rb +4 -12
  68. data/lib/zen/helper/controller.rb +209 -6
  69. data/lib/zen/helper/locale.rb +19 -0
  70. data/lib/zen/helper/search.rb +1 -1
  71. data/lib/zen/helper/stacked_aspect.rb +7 -43
  72. data/lib/zen/helper/theme.rb +3 -3
  73. data/lib/zen/language.rb +5 -10
  74. data/lib/zen/language/translation.rb +1 -1
  75. data/lib/zen/layout/admin.xhtml +41 -25
  76. data/lib/zen/layout/login.xhtml +8 -3
  77. data/lib/zen/migrator.rb +54 -0
  78. data/lib/zen/model/helper.rb +20 -1
  79. data/lib/zen/model/init.rb +2 -0
  80. data/lib/zen/model/plugin/events.rb +158 -0
  81. data/lib/zen/package.rb +32 -6
  82. data/lib/zen/package/all.rb +1 -0
  83. data/lib/zen/package/categories/lib/categories.rb +6 -6
  84. data/lib/zen/package/categories/lib/categories/controller/categories.rb +20 -83
  85. data/lib/zen/package/categories/lib/categories/controller/category_groups.rb +23 -74
  86. data/lib/zen/package/categories/lib/categories/model/category.rb +58 -1
  87. data/lib/zen/package/categories/lib/categories/model/category_group.rb +62 -2
  88. data/lib/zen/package/categories/lib/categories/view/admin/categories/form.xhtml +46 -40
  89. data/lib/zen/package/categories/lib/categories/view/admin/categories/index.xhtml +74 -75
  90. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/form.xhtml +27 -24
  91. data/lib/zen/package/categories/lib/categories/view/admin/category-groups/index.xhtml +83 -86
  92. data/lib/zen/package/comments/lib/comments.rb +5 -5
  93. data/lib/zen/package/comments/lib/comments/controller/comments.rb +12 -64
  94. data/lib/zen/package/comments/lib/comments/controller/comments_form.rb +4 -22
  95. data/lib/zen/package/comments/lib/comments/model/comment.rb +65 -16
  96. data/lib/zen/package/comments/lib/comments/view/admin/comments/form.xhtml +52 -49
  97. data/lib/zen/package/comments/lib/comments/view/admin/comments/index.xhtml +52 -60
  98. data/lib/zen/package/comments/migrations/1308774099_comment_status.rb +1 -1
  99. data/lib/zen/package/custom_fields/lib/custom_fields.rb +11 -13
  100. data/lib/zen/package/custom_fields/lib/custom_fields/blue_form_parameters.rb +29 -13
  101. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_groups.rb +21 -50
  102. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_field_types.rb +27 -71
  103. data/lib/zen/package/custom_fields/lib/custom_fields/controller/custom_fields.rb +25 -78
  104. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field.rb +48 -1
  105. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_group.rb +35 -1
  106. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_method.rb +3 -0
  107. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_type.rb +40 -1
  108. data/lib/zen/package/custom_fields/lib/custom_fields/model/custom_field_value.rb +1 -0
  109. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/form.xhtml +29 -26
  110. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-groups/index.xhtml +96 -100
  111. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/form.xhtml +56 -53
  112. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-field-types/index.xhtml +82 -82
  113. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/form.xhtml +88 -85
  114. data/lib/zen/package/custom_fields/lib/custom_fields/view/admin/custom-fields/index.xhtml +83 -80
  115. data/lib/zen/package/dashboard/lib/dashboard.rb +28 -0
  116. data/lib/zen/package/dashboard/lib/dashboard/controller/dashboard.rb +154 -0
  117. data/lib/zen/package/dashboard/lib/dashboard/language/en/dashboard.rb +35 -0
  118. data/lib/zen/package/dashboard/lib/dashboard/language/nl/dashboard.rb +36 -0
  119. data/lib/zen/package/dashboard/lib/dashboard/model/widget.rb +45 -0
  120. data/lib/zen/package/dashboard/lib/dashboard/public/admin/dashboard/css/dashboard.css +74 -0
  121. data/lib/zen/package/dashboard/lib/dashboard/public/admin/dashboard/js/dashboard.js +102 -0
  122. data/lib/zen/package/dashboard/lib/dashboard/view/admin/index.xhtml +29 -0
  123. data/lib/zen/package/dashboard/lib/dashboard/view/admin/widget/welcome.xhtml +28 -0
  124. data/lib/zen/package/dashboard/lib/dashboard/widget.rb +292 -0
  125. data/lib/zen/package/dashboard/lib/dashboard/widget/welcome.rb +9 -0
  126. data/lib/zen/package/dashboard/migrations/1326411254_create_schema.rb +28 -0
  127. data/lib/zen/package/extensions/lib/extensions.rb +5 -5
  128. data/lib/zen/package/extensions/lib/extensions/view/admin/extensions/index.xhtml +72 -67
  129. data/lib/zen/package/menu.rb +6 -1
  130. data/lib/zen/package/menus/lib/menus.rb +6 -4
  131. data/lib/zen/package/menus/lib/menus/controller/menu_items.rb +69 -104
  132. data/lib/zen/package/menus/lib/menus/controller/menus.rb +19 -76
  133. data/lib/zen/package/menus/lib/menus/helper/menu.rb +54 -38
  134. data/lib/zen/package/menus/lib/menus/helper/menu_frontend.rb +7 -13
  135. data/lib/zen/package/menus/lib/menus/model/menu.rb +158 -2
  136. data/lib/zen/package/menus/lib/menus/model/menu_item.rb +73 -10
  137. data/lib/zen/package/menus/lib/menus/public/admin/menus/css/menus.css +47 -0
  138. data/lib/zen/package/menus/lib/menus/public/admin/menus/js/lib/nested_sortables.js +549 -0
  139. data/lib/zen/package/menus/lib/menus/public/admin/menus/js/menu_items.js +38 -0
  140. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/form.xhtml +51 -61
  141. data/lib/zen/package/menus/lib/menus/view/admin/menu-items/index.xhtml +18 -81
  142. data/lib/zen/package/menus/lib/menus/view/admin/menus/form.xhtml +49 -44
  143. data/lib/zen/package/menus/lib/menus/view/admin/menus/index.xhtml +81 -83
  144. data/lib/zen/package/sections/lib/sections.rb +9 -4
  145. data/lib/zen/package/sections/lib/sections/controller/section_entries.rb +80 -132
  146. data/lib/zen/package/sections/lib/sections/controller/sections.rb +27 -73
  147. data/lib/zen/package/sections/lib/sections/helper/section.rb +44 -1
  148. data/lib/zen/package/sections/lib/sections/language/en/section_entries.rb +2 -0
  149. data/lib/zen/package/sections/lib/sections/language/nl/section_entries.rb +2 -0
  150. data/lib/zen/package/sections/lib/sections/model/section.rb +48 -1
  151. data/lib/zen/package/sections/lib/sections/model/section_entry.rb +55 -5
  152. data/lib/zen/package/sections/lib/sections/model/section_entry_status.rb +2 -0
  153. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/form.xhtml +76 -67
  154. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/index.xhtml +74 -79
  155. data/lib/zen/package/sections/lib/sections/view/admin/section-entries/recent_entries.xhtml +45 -0
  156. data/lib/zen/package/sections/lib/sections/view/admin/sections/form.xhtml +119 -0
  157. data/lib/zen/package/sections/lib/sections/view/admin/sections/index.xhtml +96 -0
  158. data/lib/zen/package/sections/lib/sections/widget/recent_entries.rb +14 -0
  159. data/lib/zen/package/sections/migrations/1308813320_section_entry_statuses.rb +1 -1
  160. data/lib/zen/package/settings/lib/settings.rb +14 -5
  161. data/lib/zen/package/settings/lib/settings/controller/settings.rb +4 -4
  162. data/lib/zen/package/settings/lib/settings/language/nl/settings.rb +1 -1
  163. data/lib/zen/package/settings/lib/settings/setting.rb +1 -1
  164. data/lib/zen/package/settings/lib/settings/view/admin/settings/index.xhtml +21 -17
  165. data/lib/zen/package/users/lib/users.rb +18 -19
  166. data/lib/zen/package/users/lib/users/controller/user_groups.rb +23 -50
  167. data/lib/zen/package/users/lib/users/controller/users.rb +57 -89
  168. data/lib/zen/package/users/lib/users/helper/acl.rb +1 -0
  169. data/lib/zen/package/users/lib/users/language/en/user_groups.rb +1 -0
  170. data/lib/zen/package/users/lib/users/language/en/users.rb +2 -1
  171. data/lib/zen/package/users/lib/users/language/nl/user_groups.rb +1 -0
  172. data/lib/zen/package/users/lib/users/language/nl/users.rb +2 -1
  173. data/lib/zen/package/users/lib/users/model/permission.rb +13 -0
  174. data/lib/zen/package/users/lib/users/model/user.rb +57 -4
  175. data/lib/zen/package/users/lib/users/model/user_group.rb +37 -3
  176. data/lib/zen/package/users/lib/users/model/user_status.rb +4 -0
  177. data/lib/zen/package/users/lib/users/public/admin/{css/users/permissions.css → users/css/users.css} +0 -0
  178. data/lib/zen/package/users/lib/users/public/admin/{js/users/permissions.js → users/js/users.js} +4 -2
  179. data/lib/zen/package/users/lib/users/view/admin/user-groups/form.xhtml +51 -47
  180. data/lib/zen/package/users/lib/users/view/admin/user-groups/index.xhtml +62 -69
  181. data/lib/zen/package/users/lib/users/view/admin/users/form.xhtml +92 -82
  182. data/lib/zen/package/users/lib/users/view/admin/users/index.xhtml +68 -66
  183. data/lib/zen/package/users/lib/users/view/admin/users/login.xhtml +36 -28
  184. data/lib/zen/package/users/lib/users/view/admin/users/permissions.xhtml +5 -7
  185. data/lib/zen/package/users/lib/users/view/admin/users/register.xhtml +47 -41
  186. data/lib/zen/package/users/migrations/1320272365_status_ids.rb +1 -1
  187. data/lib/zen/public/admin/{js/vendor/mootools → mootools/js}/core.js +113 -108
  188. data/lib/zen/public/admin/{js/vendor/mootools → mootools/js}/more.js +99 -6
  189. data/lib/zen/public/admin/zen/css/buttons.css +106 -0
  190. data/lib/zen/public/admin/{css/zen → zen/css}/datepicker.css +45 -30
  191. data/lib/zen/public/admin/zen/css/editor.css +69 -0
  192. data/lib/zen/public/admin/{css/zen → zen/css}/forms.css +28 -30
  193. data/lib/zen/public/admin/zen/css/general.css +183 -0
  194. data/lib/zen/public/admin/zen/css/layout.css +224 -0
  195. data/lib/zen/public/admin/zen/css/messages.css +34 -0
  196. data/lib/zen/public/admin/{css/zen → zen/css}/reset.css +4 -9
  197. data/lib/zen/public/admin/zen/css/tables.css +57 -0
  198. data/lib/zen/public/admin/zen/css/tabs.css +84 -0
  199. data/lib/zen/public/admin/zen/css/window.css +74 -0
  200. data/lib/zen/public/admin/{images/zen → zen/images}/icons/asc.png +0 -0
  201. data/lib/zen/public/admin/{images/zen → zen/images}/icons/bold.png +0 -0
  202. data/lib/zen/public/admin/zen/images/icons/box.png +0 -0
  203. data/lib/zen/public/admin/zen/images/icons/categories.png +0 -0
  204. data/lib/zen/public/admin/{images/zen → zen/images}/icons/close.png +0 -0
  205. data/lib/zen/public/admin/zen/images/icons/comment.png +0 -0
  206. data/lib/zen/public/admin/{images/zen → zen/images}/icons/desc.png +0 -0
  207. data/lib/zen/public/admin/{images/zen → zen/images}/icons/edit.png +0 -0
  208. data/lib/zen/public/admin/{images/zen → zen/images}/icons/error.png +0 -0
  209. data/lib/zen/public/admin/zen/images/icons/external.png +0 -0
  210. data/lib/zen/public/admin/zen/images/icons/globe.png +0 -0
  211. data/lib/zen/public/admin/{images/zen → zen/images}/icons/italic.png +0 -0
  212. data/lib/zen/public/admin/{images/zen → zen/images}/icons/link.png +0 -0
  213. data/lib/zen/public/admin/zen/images/icons/lock.png +0 -0
  214. data/lib/zen/public/admin/{images/zen → zen/images}/icons/ol.png +0 -0
  215. data/lib/zen/public/admin/zen/images/icons/pages.png +0 -0
  216. data/lib/zen/public/admin/{images/zen → zen/images}/icons/preview.png +0 -0
  217. data/lib/zen/public/admin/zen/images/icons/relation.png +0 -0
  218. data/lib/zen/public/admin/zen/images/icons/settings.png +0 -0
  219. data/lib/zen/public/admin/zen/images/icons/template.png +0 -0
  220. data/lib/zen/public/admin/{images/zen → zen/images}/icons/ul.png +0 -0
  221. data/lib/zen/public/admin/{images/zen → zen/images}/icons/user.png +0 -0
  222. data/lib/zen/public/admin/zen/images/icons/user_group.png +0 -0
  223. data/lib/zen/public/admin/{js/zen → zen/js}/index.js +21 -9
  224. data/lib/zen/public/admin/zen/js/lib/autosave.js +185 -0
  225. data/lib/zen/public/admin/zen/js/lib/base.js +60 -0
  226. data/lib/zen/public/admin/{js/vendor → zen/js/lib}/datepicker.js +52 -28
  227. data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor.js +23 -34
  228. data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor/markdown.js +5 -1
  229. data/lib/zen/public/admin/{js/zen → zen/js}/lib/editor/textile.js +4 -0
  230. data/lib/zen/public/admin/zen/js/lib/hash.js +218 -0
  231. data/lib/zen/public/admin/{js/zen → zen/js}/lib/html_table.js +5 -0
  232. data/lib/zen/public/admin/zen/js/lib/tabs.js +194 -0
  233. data/lib/zen/public/admin/{js/zen → zen/js}/lib/window.js +54 -29
  234. data/lib/zen/security.rb +50 -0
  235. data/lib/zen/spec/helper.rb +5 -120
  236. data/lib/zen/spec/helper/capybara.rb +75 -0
  237. data/lib/zen/spec/helper/general.rb +75 -0
  238. data/lib/zen/spec/simplecov.rb +1 -0
  239. data/lib/zen/task/build.rake +2 -21
  240. data/lib/zen/task/clean.rake +1 -10
  241. data/lib/zen/task/db.rake +4 -10
  242. data/lib/zen/task/package.rake +2 -5
  243. data/lib/zen/task/setup.rake +1 -1
  244. data/lib/zen/task/test.rake +6 -6
  245. data/lib/zen/task/theme.rake +2 -5
  246. data/lib/zen/theme.rb +26 -22
  247. data/lib/zen/version.rb +1 -1
  248. data/lib/zen/view/bottom.xhtml +2 -3
  249. data/lib/zen/view/search.xhtml +3 -5
  250. data/proto/app/config/config.rb.erb +1 -1
  251. data/proto/app/theme/default/index.xhtml +116 -20
  252. data/proto/app/theme/partials/head.xhtml +9 -0
  253. data/proto/app/theme/partials/sidebar.xhtml +40 -0
  254. data/proto/app/theme/theme.rb +3 -0
  255. data/spec/Rakefile +1 -2
  256. data/spec/fixtures/zen/helper/stacked_aspect.rb +54 -0
  257. data/spec/fixtures/zen/package/dashboard/controller/widget.rb +15 -0
  258. data/spec/fixtures/zen/package/dashboard/widget.rb +5 -0
  259. data/spec/fixtures/zen/theme/theme.rb +2 -2
  260. data/spec/helper.rb +19 -10
  261. data/spec/zen/controller/admin_controller.rb +3 -3
  262. data/spec/zen/controller/main_controller.rb +7 -7
  263. data/spec/zen/controller/preview.rb +3 -3
  264. data/spec/zen/event.rb +4 -4
  265. data/spec/zen/helper/breadcrumb.rb +4 -8
  266. data/spec/zen/helper/controller.rb +47 -4
  267. data/spec/zen/helper/locale.rb +3 -3
  268. data/spec/zen/helper/message.rb +4 -4
  269. data/spec/zen/helper/stacked_aspect.rb +40 -0
  270. data/spec/zen/helper/theme.rb +9 -9
  271. data/spec/zen/language.rb +8 -8
  272. data/spec/zen/markup.rb +6 -6
  273. data/spec/zen/package.rb +11 -9
  274. data/spec/zen/package/categories/controller/categories.rb +56 -24
  275. data/spec/zen/package/categories/controller/category_groups.rb +55 -23
  276. data/spec/zen/package/categories/helper/category.rb +5 -5
  277. data/spec/zen/package/categories/helper/category_frontend.rb +5 -5
  278. data/spec/zen/package/comments/anti_spam.rb +4 -4
  279. data/spec/zen/package/comments/controller/comments.rb +95 -24
  280. data/spec/zen/package/comments/controller/comments_form.rb +31 -26
  281. data/spec/zen/package/comments/helper/comment.rb +3 -3
  282. data/spec/zen/package/comments/helper/comment_frontend.rb +6 -6
  283. data/spec/zen/package/custom_fields/blue_form_parameters.rb +8 -8
  284. data/spec/zen/package/custom_fields/controller/custom_field_groups.rb +58 -27
  285. data/spec/zen/package/custom_fields/controller/custom_field_types.rb +57 -27
  286. data/spec/zen/package/custom_fields/controller/custom_fields.rb +58 -27
  287. data/spec/zen/package/custom_fields/helper/custom_field.rb +7 -7
  288. data/spec/zen/package/dashboard/controller/dashboard.rb +147 -0
  289. data/spec/zen/package/dashboard/widget.rb +56 -0
  290. data/spec/zen/package/extensions/controller/extensions.rb +4 -4
  291. data/spec/zen/package/menus/controller/menu_items.rb +48 -39
  292. data/spec/zen/package/menus/controller/menus.rb +55 -24
  293. data/spec/zen/package/menus/helper/menu.rb +6 -14
  294. data/spec/zen/package/menus/helper/menu_frontend.rb +7 -7
  295. data/spec/zen/package/menus/model/menu.rb +121 -0
  296. data/spec/zen/package/menus/model/menu_item.rb +34 -0
  297. data/spec/zen/package/sections/controller/section_entries.rb +104 -39
  298. data/spec/zen/package/sections/controller/sections.rb +60 -27
  299. data/spec/zen/package/sections/helper/section.rb +5 -5
  300. data/spec/zen/package/sections/helper/section_frontend.rb +9 -9
  301. data/spec/zen/package/sections/widget.rb +44 -0
  302. data/spec/zen/package/settings/controller/settings.rb +18 -16
  303. data/spec/zen/package/settings/settings.rb +12 -12
  304. data/spec/zen/package/users/controller/user_groups.rb +61 -29
  305. data/spec/zen/package/users/controller/users.rb +118 -39
  306. data/spec/zen/package/users/helper/access.rb +3 -3
  307. data/spec/zen/package/users/helper/acl.rb +4 -4
  308. data/spec/zen/package/users/helper/users.rb +5 -5
  309. data/spec/zen/security.rb +25 -0
  310. data/spec/zen/theme.rb +20 -18
  311. data/spec/zen/validation.rb +5 -5
  312. data/spec/zen/vendor/sequel_sluggable.rb +12 -0
  313. data/zen.gemspec +27 -4
  314. metadata +182 -124
  315. data/AUTHORS +0 -4
  316. data/guide/_static/categories/categories.png +0 -0
  317. data/guide/_static/categories/category_groups.png +0 -0
  318. data/guide/_static/categories/new_category.png +0 -0
  319. data/guide/_static/categories/new_category_group.png +0 -0
  320. data/guide/_static/comments/comments.png +0 -0
  321. data/guide/_static/comments/edit_comment.png +0 -0
  322. data/guide/_static/custom_fields/custom_field_groups.png +0 -0
  323. data/guide/_static/custom_fields/custom_field_types.png +0 -0
  324. data/guide/_static/custom_fields/custom_fields.png +0 -0
  325. data/guide/_static/custom_fields/edit_custom_field_general.png +0 -0
  326. data/guide/_static/custom_fields/edit_custom_field_group.png +0 -0
  327. data/guide/_static/custom_fields/edit_custom_field_settings.png +0 -0
  328. data/guide/_static/custom_fields/edit_custom_field_type.png +0 -0
  329. data/guide/_static/menus/edit_menu.png +0 -0
  330. data/guide/_static/menus/edit_menu_item.png +0 -0
  331. data/guide/_static/menus/menu_items.png +0 -0
  332. data/guide/_static/menus/menus.png +0 -0
  333. data/guide/_static/sections/edit_entry.png +0 -0
  334. data/guide/_static/sections/edit_entry_categories.png +0 -0
  335. data/guide/_static/sections/edit_entry_general.png +0 -0
  336. data/guide/_static/sections/edit_entry_meta.png +0 -0
  337. data/guide/_static/sections/edit_section_comments.png +0 -0
  338. data/guide/_static/sections/edit_section_general.png +0 -0
  339. data/guide/_static/sections/edit_section_groups.png +0 -0
  340. data/guide/_static/sections/entries.png +0 -0
  341. data/guide/_static/sections/sections.png +0 -0
  342. data/guide/_static/settings/overview_general.png +0 -0
  343. data/guide/_static/settings/overview_security.png +0 -0
  344. data/guide/_static/settings/overview_user.png +0 -0
  345. data/guide/_static/users/edit_user.png +0 -0
  346. data/guide/_static/users/edit_user_group.png +0 -0
  347. data/guide/_static/users/edit_user_group_permissions.png +0 -0
  348. data/guide/_static/users/edit_user_permissions.png +0 -0
  349. data/guide/_static/users/overview.png +0 -0
  350. data/guide/_static/users/user_groups_overview.png +0 -0
  351. data/lib/zen/controller/translations.rb +0 -49
  352. data/lib/zen/package/sections/lib/sections/view/admin/form.xhtml +0 -113
  353. data/lib/zen/package/sections/lib/sections/view/admin/index.xhtml +0 -97
  354. data/lib/zen/public/admin/css/zen/buttons.css +0 -46
  355. data/lib/zen/public/admin/css/zen/editor.css +0 -88
  356. data/lib/zen/public/admin/css/zen/general.css +0 -109
  357. data/lib/zen/public/admin/css/zen/grid.css +0 -100
  358. data/lib/zen/public/admin/css/zen/layout.css +0 -184
  359. data/lib/zen/public/admin/css/zen/messages.css +0 -54
  360. data/lib/zen/public/admin/css/zen/tables.css +0 -97
  361. data/lib/zen/public/admin/css/zen/tabs.css +0 -47
  362. data/lib/zen/public/admin/css/zen/window.css +0 -73
  363. data/lib/zen/public/admin/images/zen/icons/accept.png +0 -0
  364. data/lib/zen/public/admin/images/zen/icons/add.png +0 -0
  365. data/lib/zen/public/admin/images/zen/icons/back.png +0 -0
  366. data/lib/zen/public/admin/images/zen/icons/delete.png +0 -0
  367. data/lib/zen/public/admin/images/zen/icons/help.png +0 -0
  368. data/lib/zen/public/admin/images/zen/icons/info.png +0 -0
  369. data/lib/zen/public/admin/images/zen/icons/logout.png +0 -0
  370. data/lib/zen/public/admin/images/zen/icons/pdf.png +0 -0
  371. data/lib/zen/public/admin/images/zen/icons/view.png +0 -0
  372. data/lib/zen/public/admin/js/zen/lib/tabs.js +0 -207
  373. data/lib/zen/view/main.xhtml +0 -19
@@ -1,3 +1,7 @@
1
+ "use strict";
2
+
3
+ namespace('Zen');
4
+
1
5
  /**
2
6
  * The Window class can be used to create basic windows with a title and a set
3
7
  * of buttons. These windows can be used for a preview of an article, showing an
@@ -78,17 +82,33 @@ Zen.Window = new Class(
78
82
  move: false,
79
83
 
80
84
  // A collection of buttons to display inside the window
81
- buttons: []
85
+ buttons:
86
+ [
87
+ {
88
+ name: 'close',
89
+ label: lang('zen_general.buttons.close'),
90
+ onClick: function(instance)
91
+ {
92
+ instance.destroy();
93
+ }
94
+ }
95
+ ]
82
96
  },
83
97
 
84
98
  /**
85
99
  * DOM element for the current window instance.
86
100
  *
87
101
  * @since 0.2.6
88
- * @var {element}
89
102
  */
90
103
  element: null,
91
104
 
105
+ /**
106
+ * The background overlay for the current window.
107
+ *
108
+ * @since 18-12-2011
109
+ */
110
+ overlay: null,
111
+
92
112
  /**
93
113
  * Creates a new instance of the class and displays the window.
94
114
  *
@@ -106,60 +126,53 @@ Zen.Window = new Class(
106
126
 
107
127
  this.setOptions(options);
108
128
 
109
- // Create the HTML for the window
110
- var container = new Element(
111
- 'article',
129
+ var container = new Element('div',
130
+ {
131
+ 'class': 'window',
132
+ styles:
112
133
  {
113
- 'class': 'window',
114
- styles:
115
- {
116
- width: this.options.width,
117
- height: this.options.height
118
- }
134
+ width: this.options.width,
135
+ height: this.options.height
119
136
  }
120
- );
137
+ });
121
138
 
122
- var header = new Element('header', {'class': 'clearfix'});
123
- var close = new Element('div' , {'class': 'close'});
124
- var body = new Element('div' , {'class': 'body', html: content});
139
+ var body = new Element('div', {'class': 'body', html: content});
125
140
  var current = this;
126
141
 
127
142
  // Do we have a title?
128
143
  if ( this.options.title !== null )
129
144
  {
130
- var title = new Element('h1', {html: this.options.title});
145
+ var header = new Element('div', {'class': 'header'});
146
+ var title = new Element('h2', {html: this.options.title});
147
+
131
148
  title.inject(header);
149
+ header.inject(container);
132
150
  }
133
151
 
134
- close.addEvent('click', function()
135
- {
136
- current.destroy();
137
- });
138
-
139
- // Inject the base elements
140
- close.inject(header);
141
- header.inject(container);
142
152
  body.inject(container);
143
153
 
144
154
  // Add all the buttons
145
155
  if ( this.options.buttons.length > 0 )
146
156
  {
147
157
  var buttons_container = new Element(
148
- 'div', {'class': 'buttons clearfix'}
158
+ 'div',
159
+ {'class': 'buttons'}
149
160
  );
150
161
 
151
162
  this.options.buttons.each(function(button)
152
163
  {
153
- var div = new Element('div', {'class': 'button ' + button.name});
154
- var btn = new Element('button', {text: button.label});
164
+ var btn = new Element('button',
165
+ {
166
+ text: button.label,
167
+ 'class': 'button ' + button.name
168
+ });
155
169
 
156
170
  btn.addEvent('click', function()
157
171
  {
158
172
  button.onClick(current);
159
173
  });
160
174
 
161
- btn.inject(div);
162
- div.inject(buttons_container);
175
+ btn.inject(buttons_container);
163
176
  });
164
177
 
165
178
  buttons_container.inject(container);
@@ -183,9 +196,16 @@ Zen.Window = new Class(
183
196
  var margin = this.options.width - ( this.options.width * 1.5 );
184
197
  container.setStyle('margin-left', margin);
185
198
 
199
+ if ( $$('.window_overlay').length <= 0 )
200
+ {
201
+ this.overlay = new Element('div', {'class': 'window_overlay'});
202
+ this.overlay.inject(document.body);
203
+ }
204
+
186
205
  // Last step: inject the HTML into the DOM
187
206
  this.element = container;
188
207
  this.element.inject(document.body);
208
+
189
209
  },
190
210
 
191
211
  /**
@@ -196,5 +216,10 @@ Zen.Window = new Class(
196
216
  destroy: function()
197
217
  {
198
218
  this.element.destroy();
219
+
220
+ if ( this.overlay )
221
+ {
222
+ this.overlay.destroy();
223
+ }
199
224
  }
200
225
  });
@@ -0,0 +1,50 @@
1
+ module Zen
2
+ ##
3
+ # Module for dealing with various security related actions such as sanitizing
4
+ # user input/output.
5
+ #
6
+ # @since 07-01-2012
7
+ #
8
+ module Security
9
+ class << self
10
+ ##
11
+ # Sanitizes the string by escaping all Etanni template tags in it so that
12
+ # they aren't executed. Optionally this method can also remove all
13
+ # dangerous HTML using Loofah.
14
+ #
15
+ # It is recommended to use this method whenever your code accepts used
16
+ # input. Since removing HTML isn't always needed (sometimes you actually
17
+ # want to allow certain HTML tags) this is turned off by default.
18
+ #
19
+ # @example
20
+ # input = 'Hello #{puts 10}'
21
+ #
22
+ # Zen::Input.sanitize(input) # => "Hello \#\{puts 10\}"
23
+ #
24
+ # @since 03-01-2012
25
+ # @param [String] input The input string to sanitize.
26
+ # @param [TrueClass|FalseClass] clean_html When set to true certain HTML
27
+ # elements will be removed using Loofah.
28
+ # @return [String] The sanitized string.
29
+ #
30
+ def sanitize(input, clean_html = false)
31
+ return input unless input.is_a?(String)
32
+
33
+ # Cheap way of escaping the template tags.
34
+ input = input.gsub('<?r', '\<\?r') \
35
+ .gsub('?>', '\?\>') \
36
+ .gsub('#{', '\#\{') \
37
+ .gsub('}', '\}')
38
+
39
+ if clean_html == true
40
+ input = Loofah.fragment(input) \
41
+ .scrub!(:whitewash) \
42
+ .scrub!(:nofollow) \
43
+ .to_s
44
+ end
45
+
46
+ return input
47
+ end
48
+ end # class << self
49
+ end # Input
50
+ end # Zen
@@ -10,6 +10,9 @@ end
10
10
  require 'capybara/dsl'
11
11
  require 'ramaze/spec/bacon'
12
12
 
13
+ require __DIR__('helper/general')
14
+ require __DIR__('helper/capybara')
15
+
13
16
  Bacon.extend(Bacon::TapOutput)
14
17
 
15
18
  # Configure Capybara
@@ -18,130 +21,12 @@ Capybara.configure do |config|
18
21
  config.app = Ramaze.middleware
19
22
  end
20
23
 
21
- ##
22
- # Logs the user in using the spec user.
23
- #
24
- # @since 0.2.8
25
- #
26
- def capybara_login
27
- # Log the user in
28
- login_url = ::Users::Controller::Users.r(:login).to_s
29
- dashboard_url = ::Sections::Controller::Sections.r(:index).to_s
30
-
31
- visit(login_url)
32
- ::Ramaze::Log.loggers.clear
33
-
34
- within('#login_form') do
35
- fill_in('Email' , :with => 'spec@domain.tld')
36
- fill_in('Password', :with => 'spec')
37
- click_button('Login')
38
- end
39
- end
40
-
41
- ##
42
- # Runs the block in a new thread and redirects $stdout and $stderr. The output
43
- # normally stored in these variables is stored in an instance of StringIO which
44
- # is returned as a hash.
45
- #
46
- # @example
47
- # out = catch_output do
48
- # puts 'hello'
49
- # end
50
- #
51
- # puts out # => {:stdout => "hello\n", :stderr => ""}
52
- #
53
- # @since 0.2.8
54
- # @return [Hash]
55
- #
56
- def catch_output
57
- data = {
58
- :stdout => nil,
59
- :stderr => nil
60
- }
61
-
62
- Thread.new do
63
- $stdout, $stderr = StringIO.new, StringIO.new
64
-
65
- yield
66
-
67
- $stdout.rewind
68
- $stderr.rewind
69
-
70
- data[:stdout], data[:stderr] = $stdout.read, $stderr.read
71
-
72
- $stdout, $stderr = STDOUT, STDERR
73
- end.join
74
-
75
- return data
76
- end
77
-
78
- ##
79
- # Allows developers to create stubbed objects similar to Mocha's stub() method.
80
- #
81
- # @example
82
- # obj = stub(:language => 'Ruby')
83
- # puts obj.language # => "Ruby"
84
- #
85
- # @since 0.2.8
86
- # @param [Hash] attributes A hash containing all the attributes to set and
87
- # their values.
88
- # @return [Class]
89
- #
90
- def stub(attributes)
91
- obj = Struct.new(*attributes.keys).new
92
-
93
- attributes.each do |k, v|
94
- obj.send("#{k}=", v)
95
- end
96
-
97
- return obj
98
- end
99
-
100
- ##
101
- # Returns a hash with a stubbed custom field and a stubbed custom field value.
102
- #
103
- # @since 0.2.8
104
- # @param [String] field_type_name The name of the field type.
105
- # @param [Hash] options Additional options to pass to the stub() call for the
106
- # custom field.
107
- # @return [Hash]
108
- #
109
- def stub_custom_field(field_type_name, options = {})
110
- custom_field_type = CustomFields::Model::CustomFieldType[
111
- :name => field_type_name
112
- ]
113
-
114
- options = {
115
- :id => 1,
116
- :name => 'Field',
117
- :slug => 'field',
118
- :description => 'A stubbed field',
119
- :sort_order => 0,
120
- :format => 'markdown',
121
- :required => false,
122
- :text_editor => false,
123
- :textarea_rows => nil,
124
- :text_limit => 100,
125
- :custom_field_group_id => 1,
126
- :custom_field_type_id => custom_field_type.id,
127
- :custom_field_type => custom_field_type
128
- }.merge(options)
129
-
130
- return {
131
- :custom_field => stub(options),
132
- :custom_field_value => stub(
133
- :id => 1,
134
- :value => 'Ruby',
135
- :custom_field_id => 1,
136
- :section_entry_id => 1
137
- )
138
- }
139
- end
140
-
141
24
  shared :capybara do
142
25
  Ramaze.setup_dependencies
143
26
  extend Capybara::DSL
144
27
  extend WebMock::API
28
+ extend Zen::Spec::Helper::Capybara
29
+ extend Zen::Spec::Helper::General
145
30
 
146
31
  capybara_login
147
32
  end
@@ -0,0 +1,75 @@
1
+ module Zen
2
+ module Spec
3
+ module Helper
4
+ ##
5
+ # Module providing various helper methods for Capybara based tests.
6
+ #
7
+ # @since 18-02-2012
8
+ #
9
+ module Capybara
10
+ ##
11
+ # Logs the user in using the spec user.
12
+ #
13
+ # @since 0.2.8
14
+ #
15
+ def capybara_login
16
+ # Log the user in
17
+ login_url = ::Users::Controller::Users.r(:login).to_s
18
+ dashboard_url = ::Sections::Controller::Sections.r(:index).to_s
19
+
20
+ visit(login_url)
21
+ ::Ramaze::Log.loggers.clear
22
+
23
+ within('#login_form') do
24
+ fill_in('Email' , :with => 'spec@domain.tld')
25
+ fill_in('Password', :with => 'spec')
26
+ click_button('Login')
27
+ end
28
+ end
29
+
30
+ ##
31
+ # Automatically saves a form with the given ID.
32
+ #
33
+ # @since 18-02-2012
34
+ # @param [String] id The ID of the form.
35
+ #
36
+ def autosave_form(id)
37
+ page.evaluate_script(
38
+ "new Zen.Autosave(
39
+ $('#{id}'),
40
+ $('#{id}').get('data-autosave-url'),
41
+ {interval: 1000}
42
+ );"
43
+ )
44
+
45
+ sleep(2.5)
46
+
47
+ page.has_selector?('span.error').should == false
48
+ end
49
+
50
+ ##
51
+ # Switches Capybara's driver to the default Javascript driver.
52
+ #
53
+ # @since 18-02-2012
54
+ #
55
+ def enable_javascript
56
+ WebMock.disable!
57
+
58
+ ::Capybara.current_driver = ::Capybara.javascript_driver
59
+
60
+ capybara_login
61
+ end
62
+
63
+ ##
64
+ # Switches Capybara's driver back to the default driver.
65
+ #
66
+ # @since 18-02-2012
67
+ #
68
+ def disable_javascript
69
+ ::Capybara.use_default_driver
70
+ WebMock.enable!
71
+ end
72
+ end # Capybara
73
+ end # Helper
74
+ end # Spec
75
+ end # Zen
@@ -0,0 +1,75 @@
1
+ module Zen
2
+ module Spec
3
+ module Helper
4
+ ##
5
+ # Module providing general spec helpers.
6
+ #
7
+ # @since 18-02-2012
8
+ #
9
+ module General
10
+ ##
11
+ # Allows developers to create stubbed objects similar to Mocha's stub() method.
12
+ #
13
+ # @example
14
+ # obj = stub(:language => 'Ruby')
15
+ # puts obj.language # => "Ruby"
16
+ #
17
+ # @since 0.2.8
18
+ # @param [Hash] attributes A hash containing all the attributes to set and
19
+ # their values.
20
+ # @return [Class]
21
+ #
22
+ def stub(attributes)
23
+ obj = Struct.new(*attributes.keys).new
24
+
25
+ attributes.each do |k, v|
26
+ obj.send("#{k}=", v)
27
+ end
28
+
29
+ return obj
30
+ end
31
+
32
+ ##
33
+ # Returns a hash with a stubbed custom field and a stubbed custom field value.
34
+ #
35
+ # @since 0.2.8
36
+ # @param [String] field_type_name The name of the field type.
37
+ # @param [Hash] options Additional options to pass to the stub() call for the
38
+ # custom field.
39
+ # @return [Hash]
40
+ #
41
+ def stub_custom_field(field_type_name, options = {})
42
+ custom_field_type = CustomFields::Model::CustomFieldType[
43
+ :name => field_type_name
44
+ ]
45
+
46
+ options = {
47
+ :id => 1,
48
+ :name => 'Field',
49
+ :slug => 'field',
50
+ :description => 'A stubbed field',
51
+ :sort_order => 0,
52
+ :format => 'markdown',
53
+ :required => false,
54
+ :text_editor => false,
55
+ :textarea_rows => nil,
56
+ :text_limit => 100,
57
+ :custom_field_group_id => 1,
58
+ :custom_field_type_id => custom_field_type.id,
59
+ :custom_field_type => custom_field_type
60
+ }.merge(options)
61
+
62
+ return {
63
+ :custom_field => stub(options),
64
+ :custom_field_value => stub(
65
+ :id => 1,
66
+ :value => 'Ruby',
67
+ :custom_field_id => 1,
68
+ :section_entry_id => 1
69
+ )
70
+ }
71
+ end
72
+ end # General
73
+ end # Helper
74
+ end # Spec
75
+ end # Zen