nsm-activeadmin 0.2.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 (321) hide show
  1. data/.document +5 -0
  2. data/.gitignore +34 -0
  3. data/.travis.yml +4 -0
  4. data/.yardopts +8 -0
  5. data/CHANGELOG.rdoc +76 -0
  6. data/Gemfile +39 -0
  7. data/LICENSE +25 -0
  8. data/README.rdoc +487 -0
  9. data/Rakefile +27 -0
  10. data/activeadmin.gemspec +28 -0
  11. data/app/assets/images/active_admin/admin_notes_icon.png +0 -0
  12. data/app/assets/images/active_admin/datepicker/datepicker-header-bg.png +0 -0
  13. data/app/assets/images/active_admin/datepicker/datepicker-input-icon.png +0 -0
  14. data/app/assets/images/active_admin/datepicker/datepicker-next-link-icon.png +0 -0
  15. data/app/assets/images/active_admin/datepicker/datepicker-nipple.png +0 -0
  16. data/app/assets/images/active_admin/datepicker/datepicker-prev-link-icon.png +0 -0
  17. data/app/assets/images/active_admin/loading.gif +0 -0
  18. data/app/assets/images/active_admin/nested_menu_arrow.gif +0 -0
  19. data/app/assets/images/active_admin/nested_menu_arrow_dark.gif +0 -0
  20. data/app/assets/images/active_admin/orderable.png +0 -0
  21. data/app/assets/javascripts/active_admin/base.js +12 -0
  22. data/app/assets/javascripts/active_admin/vendor.js +382 -0
  23. data/app/assets/stylesheets/active_admin/_base.css.scss +400 -0
  24. data/app/assets/stylesheets/active_admin/_forms.css.scss +256 -0
  25. data/app/assets/stylesheets/active_admin/_header.css.scss +110 -0
  26. data/app/assets/stylesheets/active_admin/_mixins.css.scss +1 -0
  27. data/app/assets/stylesheets/active_admin/_typography.css.scss +100 -0
  28. data/app/assets/stylesheets/active_admin/components/_comments.css.scss +40 -0
  29. data/app/assets/stylesheets/active_admin/components/_date_picker.css.scss +123 -0
  30. data/app/assets/stylesheets/active_admin/components/_flash_messages.css.scss +38 -0
  31. data/app/assets/stylesheets/active_admin/mixins/_all.css.scss +8 -0
  32. data/app/assets/stylesheets/active_admin/mixins/_buttons.css.scss +27 -0
  33. data/app/assets/stylesheets/active_admin/mixins/_gradients.css.scss +29 -0
  34. data/app/assets/stylesheets/active_admin/mixins/_icons.css.scss +20 -0
  35. data/app/assets/stylesheets/active_admin/mixins/_reset.css.scss +165 -0
  36. data/app/assets/stylesheets/active_admin/mixins/_rounded.css.scss +43 -0
  37. data/app/assets/stylesheets/active_admin/mixins/_sections.css.scss +34 -0
  38. data/app/assets/stylesheets/active_admin/mixins/_shadows.css.scss +21 -0
  39. data/app/assets/stylesheets/active_admin/mixins/_variables.css.scss +21 -0
  40. data/app/views/active_admin/dashboard/index.html.arb +1 -0
  41. data/app/views/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  42. data/app/views/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  43. data/app/views/active_admin/devise/passwords/edit.html.erb +16 -0
  44. data/app/views/active_admin/devise/passwords/new.html.erb +14 -0
  45. data/app/views/active_admin/devise/sessions/new.html.erb +18 -0
  46. data/app/views/active_admin/devise/shared/_links.erb +20 -0
  47. data/app/views/active_admin/devise/unlocks/new.html.erb +12 -0
  48. data/app/views/active_admin/resource/edit.html.arb +1 -0
  49. data/app/views/active_admin/resource/index.csv.erb +20 -0
  50. data/app/views/active_admin/resource/index.html.arb +1 -0
  51. data/app/views/active_admin/resource/new.html.arb +1 -0
  52. data/app/views/active_admin/resource/show.html.arb +1 -0
  53. data/app/views/layouts/active_admin.html.arb +1 -0
  54. data/app/views/layouts/active_admin_logged_out.html.erb +35 -0
  55. data/cucumber.yml +2 -0
  56. data/docs/1-general-configuration.md +52 -0
  57. data/docs/2-resource-customization.md +35 -0
  58. data/docs/3-index-pages.md +55 -0
  59. data/docs/3-index-pages/index-as-block.md +16 -0
  60. data/docs/3-index-pages/index-as-blog.md +61 -0
  61. data/docs/3-index-pages/index-as-grid.md +21 -0
  62. data/docs/3-index-pages/index-as-table.md +74 -0
  63. data/docs/4-csv-format.md +14 -0
  64. data/docs/5-forms.md +39 -0
  65. data/docs/6-show-screens.md +22 -0
  66. data/docs/7-sidebars.md +35 -0
  67. data/docs/8-custom-actions.md +123 -0
  68. data/features/comments/commenting.feature +112 -0
  69. data/features/comments/viewing_index.feature +19 -0
  70. data/features/dashboard.feature +26 -0
  71. data/features/edit_page.feature +106 -0
  72. data/features/first_boot.feature +16 -0
  73. data/features/global_navigation.feature +30 -0
  74. data/features/index/format_as_csv.feature +46 -0
  75. data/features/index/formats.feature +12 -0
  76. data/features/index/index_as_block.feature +15 -0
  77. data/features/index/index_as_blog.feature +50 -0
  78. data/features/index/index_as_grid.feature +45 -0
  79. data/features/index/index_as_table.feature +81 -0
  80. data/features/index/index_blank_slate.feature +55 -0
  81. data/features/index/index_scopes.feature +52 -0
  82. data/features/index/pagination.feature +17 -0
  83. data/features/menu.feature +26 -0
  84. data/features/new_page.feature +75 -0
  85. data/features/registering_assets.feature +35 -0
  86. data/features/registering_resources.feature +33 -0
  87. data/features/show/default_content.feature +43 -0
  88. data/features/show/page_title.feature +33 -0
  89. data/features/sidebar_sections.feature +127 -0
  90. data/features/specifying_actions.feature +87 -0
  91. data/features/step_definitions/action_item_steps.rb +7 -0
  92. data/features/step_definitions/additional_web_steps.rb +77 -0
  93. data/features/step_definitions/asset_steps.rb +7 -0
  94. data/features/step_definitions/attribute_steps.rb +13 -0
  95. data/features/step_definitions/comment_steps.rb +8 -0
  96. data/features/step_definitions/configuration_steps.rb +31 -0
  97. data/features/step_definitions/dashboard_steps.rb +11 -0
  98. data/features/step_definitions/factory_steps.rb +29 -0
  99. data/features/step_definitions/flash_steps.rb +3 -0
  100. data/features/step_definitions/format_steps.rb +35 -0
  101. data/features/step_definitions/index_scope_steps.rb +20 -0
  102. data/features/step_definitions/layout_steps.rb +3 -0
  103. data/features/step_definitions/menu_steps.rb +7 -0
  104. data/features/step_definitions/pagination_steps.rb +8 -0
  105. data/features/step_definitions/sidebar_steps.rb +7 -0
  106. data/features/step_definitions/tab_steps.rb +3 -0
  107. data/features/step_definitions/user_steps.rb +26 -0
  108. data/features/step_definitions/web_steps.rb +211 -0
  109. data/features/sti_resource.feature +61 -0
  110. data/features/support/env.rb +90 -0
  111. data/features/support/paths.rb +50 -0
  112. data/features/support/selectors.rb +45 -0
  113. data/features/users/logging_in.feature +34 -0
  114. data/features/users/logging_out.feature +13 -0
  115. data/lib/active_admin.rb +74 -0
  116. data/lib/active_admin/abstract_view_factory.rb +95 -0
  117. data/lib/active_admin/application.rb +228 -0
  118. data/lib/active_admin/arbre.rb +23 -0
  119. data/lib/active_admin/arbre/attributes.rb +20 -0
  120. data/lib/active_admin/arbre/class_list.rb +28 -0
  121. data/lib/active_admin/arbre/collection.rb +27 -0
  122. data/lib/active_admin/arbre/context.rb +14 -0
  123. data/lib/active_admin/arbre/core_extensions.rb +5 -0
  124. data/lib/active_admin/arbre/document.rb +42 -0
  125. data/lib/active_admin/arbre/element.rb +151 -0
  126. data/lib/active_admin/arbre/html.rb +84 -0
  127. data/lib/active_admin/arbre/html5_elements.rb +47 -0
  128. data/lib/active_admin/arbre/tag.rb +137 -0
  129. data/lib/active_admin/arbre/text_node.rb +35 -0
  130. data/lib/active_admin/asset_registration.rb +34 -0
  131. data/lib/active_admin/callbacks.rb +89 -0
  132. data/lib/active_admin/comments.rb +88 -0
  133. data/lib/active_admin/comments/comment.rb +21 -0
  134. data/lib/active_admin/comments/configuration.rb +18 -0
  135. data/lib/active_admin/comments/namespace_helper.rb +14 -0
  136. data/lib/active_admin/comments/resource_helper.rb +17 -0
  137. data/lib/active_admin/comments/show_page_helper.rb +23 -0
  138. data/lib/active_admin/comments/views.rb +3 -0
  139. data/lib/active_admin/comments/views/active_admin_comment.rb +0 -0
  140. data/lib/active_admin/comments/views/active_admin_comments.rb +82 -0
  141. data/lib/active_admin/component.rb +22 -0
  142. data/lib/active_admin/controller_action.rb +12 -0
  143. data/lib/active_admin/csv_builder.rb +45 -0
  144. data/lib/active_admin/dashboards.rb +48 -0
  145. data/lib/active_admin/dashboards/dashboard_controller.rb +38 -0
  146. data/lib/active_admin/dashboards/section.rb +34 -0
  147. data/lib/active_admin/deprecation.rb +36 -0
  148. data/lib/active_admin/devise.rb +43 -0
  149. data/lib/active_admin/dsl.rb +224 -0
  150. data/lib/active_admin/engine.rb +4 -0
  151. data/lib/active_admin/event.rb +31 -0
  152. data/lib/active_admin/form_builder.rb +109 -0
  153. data/lib/active_admin/helpers/optional_display.rb +34 -0
  154. data/lib/active_admin/helpers/settings.rb +63 -0
  155. data/lib/active_admin/iconic.rb +51 -0
  156. data/lib/active_admin/iconic/icons.rb +142 -0
  157. data/lib/active_admin/locales/da.yml +28 -0
  158. data/lib/active_admin/locales/en.yml +40 -0
  159. data/lib/active_admin/locales/es.yml +39 -0
  160. data/lib/active_admin/locales/it.yml +39 -0
  161. data/lib/active_admin/locales/pt-BR.yml +36 -0
  162. data/lib/active_admin/locales/ru.yml +40 -0
  163. data/lib/active_admin/locales/zh_cn.yml +40 -0
  164. data/lib/active_admin/menu.rb +42 -0
  165. data/lib/active_admin/menu_item.rb +73 -0
  166. data/lib/active_admin/namespace.rb +206 -0
  167. data/lib/active_admin/page_config.rb +15 -0
  168. data/lib/active_admin/reloader.rb +30 -0
  169. data/lib/active_admin/renderer.rb +87 -0
  170. data/lib/active_admin/resource.rb +151 -0
  171. data/lib/active_admin/resource/action_items.rb +88 -0
  172. data/lib/active_admin/resource/belongs_to.rb +31 -0
  173. data/lib/active_admin/resource/menu.rb +45 -0
  174. data/lib/active_admin/resource/naming.rb +36 -0
  175. data/lib/active_admin/resource/scopes.rb +33 -0
  176. data/lib/active_admin/resource/sidebars.rb +36 -0
  177. data/lib/active_admin/resource_controller.rb +103 -0
  178. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  179. data/lib/active_admin/resource_controller/actions.rb +79 -0
  180. data/lib/active_admin/resource_controller/callbacks.rb +47 -0
  181. data/lib/active_admin/resource_controller/collection.rb +144 -0
  182. data/lib/active_admin/resource_controller/filters.rb +58 -0
  183. data/lib/active_admin/resource_controller/form.rb +42 -0
  184. data/lib/active_admin/resource_controller/menu.rb +29 -0
  185. data/lib/active_admin/resource_controller/page_configurations.rb +53 -0
  186. data/lib/active_admin/resource_controller/scoping.rb +36 -0
  187. data/lib/active_admin/resource_controller/sidebars.rb +18 -0
  188. data/lib/active_admin/router.rb +85 -0
  189. data/lib/active_admin/sass/active_admin.scss +3 -0
  190. data/lib/active_admin/sass/css_loader.rb +16 -0
  191. data/lib/active_admin/sass/helpers.rb +40 -0
  192. data/lib/active_admin/scope.rb +17 -0
  193. data/lib/active_admin/sidebar_section.rb +41 -0
  194. data/lib/active_admin/stylesheets/active_admin/mixins/_utilities.scss +0 -0
  195. data/lib/active_admin/version.rb +3 -0
  196. data/lib/active_admin/view_factory.rb +23 -0
  197. data/lib/active_admin/view_helpers.rb +22 -0
  198. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  199. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
  200. data/lib/active_admin/view_helpers/auto_link_helper.rb +42 -0
  201. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +29 -0
  202. data/lib/active_admin/view_helpers/display_helper.rb +38 -0
  203. data/lib/active_admin/view_helpers/filter_form_helper.rb +186 -0
  204. data/lib/active_admin/view_helpers/form_helper.rb +13 -0
  205. data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
  206. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +26 -0
  207. data/lib/active_admin/view_helpers/renderer_helper.rb +29 -0
  208. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  209. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  210. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  211. data/lib/active_admin/views.rb +8 -0
  212. data/lib/active_admin/views/action_items.rb +17 -0
  213. data/lib/active_admin/views/components/attributes_table.rb +66 -0
  214. data/lib/active_admin/views/components/blank_slate.rb +33 -0
  215. data/lib/active_admin/views/components/columns.rb +47 -0
  216. data/lib/active_admin/views/components/paginated_collection.rb +92 -0
  217. data/lib/active_admin/views/components/panel.rb +26 -0
  218. data/lib/active_admin/views/components/scopes.rb +70 -0
  219. data/lib/active_admin/views/components/sidebar_section.rb +28 -0
  220. data/lib/active_admin/views/components/status_tag.rb +55 -0
  221. data/lib/active_admin/views/components/table_for.rb +193 -0
  222. data/lib/active_admin/views/dashboard_section_renderer.rb +19 -0
  223. data/lib/active_admin/views/header_renderer.rb +53 -0
  224. data/lib/active_admin/views/index_as_block.rb +29 -0
  225. data/lib/active_admin/views/index_as_blog.rb +129 -0
  226. data/lib/active_admin/views/index_as_grid.rb +70 -0
  227. data/lib/active_admin/views/index_as_table.rb +148 -0
  228. data/lib/active_admin/views/pages/base.rb +155 -0
  229. data/lib/active_admin/views/pages/dashboard.rb +62 -0
  230. data/lib/active_admin/views/pages/edit.rb +28 -0
  231. data/lib/active_admin/views/pages/index.rb +74 -0
  232. data/lib/active_admin/views/pages/layout.rb +26 -0
  233. data/lib/active_admin/views/pages/new.rb +28 -0
  234. data/lib/active_admin/views/pages/show.rb +56 -0
  235. data/lib/active_admin/views/tabs_renderer.rb +58 -0
  236. data/lib/activeadmin.rb +1 -0
  237. data/lib/generators/active_admin/assets/assets_generator.rb +21 -0
  238. data/lib/generators/active_admin/assets/templates/3.0/active_admin.js +427 -0
  239. data/lib/generators/active_admin/assets/templates/3.1/active_admin.css.scss +6 -0
  240. data/lib/generators/active_admin/assets/templates/3.1/active_admin.js +1 -0
  241. data/lib/generators/active_admin/assets/templates/dashboards.rb +36 -0
  242. data/lib/generators/active_admin/devise/devise_generator.rb +49 -0
  243. data/lib/generators/active_admin/install/install_generator.rb +44 -0
  244. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +93 -0
  245. data/lib/generators/active_admin/install/templates/dashboards.rb +38 -0
  246. data/lib/generators/active_admin/install/templates/migrations/1_create_admin_notes.rb +16 -0
  247. data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +25 -0
  248. data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
  249. data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
  250. data/script/local +44 -0
  251. data/script/use_rails +45 -0
  252. data/spec/integration/belongs_to_spec.rb +42 -0
  253. data/spec/integration/default_namespace.rb +77 -0
  254. data/spec/integration/javascript_spec.rb +20 -0
  255. data/spec/integration/stylesheets_spec.rb +41 -0
  256. data/spec/spec_helper.rb +157 -0
  257. data/spec/support/detect_rails_version.rb +11 -0
  258. data/spec/support/integration_example_group.rb +33 -0
  259. data/spec/support/jslint.yml +80 -0
  260. data/spec/support/rails_template.rb +32 -0
  261. data/spec/support/rails_template_with_data.rb +33 -0
  262. data/spec/support/templates/cucumber.rb +24 -0
  263. data/spec/unit/abstract_view_factory_spec.rb +79 -0
  264. data/spec/unit/action_builder_spec.rb +88 -0
  265. data/spec/unit/application_spec.rb +78 -0
  266. data/spec/unit/arbre/html/context_spec.rb +22 -0
  267. data/spec/unit/arbre/html/element_finder_methods_spec.rb +54 -0
  268. data/spec/unit/arbre/html/element_spec.rb +224 -0
  269. data/spec/unit/arbre/html/tag_attributes_spec.rb +61 -0
  270. data/spec/unit/arbre/html/tag_spec.rb +63 -0
  271. data/spec/unit/arbre/html_spec.rb +210 -0
  272. data/spec/unit/asset_registration_spec.rb +37 -0
  273. data/spec/unit/auto_link_spec.rb +39 -0
  274. data/spec/unit/belongs_to_spec.rb +45 -0
  275. data/spec/unit/breadcrumbs_spec.rb +110 -0
  276. data/spec/unit/comments_spec.rb +57 -0
  277. data/spec/unit/component_spec.rb +18 -0
  278. data/spec/unit/controller_filters_spec.rb +34 -0
  279. data/spec/unit/csv_builder_spec.rb +83 -0
  280. data/spec/unit/dashboard_controller_spec.rb +26 -0
  281. data/spec/unit/dashboard_section_spec.rb +56 -0
  282. data/spec/unit/dashboards_spec.rb +59 -0
  283. data/spec/unit/display_name_spec.rb +29 -0
  284. data/spec/unit/event_spec.rb +41 -0
  285. data/spec/unit/filter_form_builder_spec.rb +182 -0
  286. data/spec/unit/form_builder_spec.rb +239 -0
  287. data/spec/unit/generators/install_rails_3_1_spec.rb +16 -0
  288. data/spec/unit/helpers/settings_spec.rb +30 -0
  289. data/spec/unit/menu_item_spec.rb +143 -0
  290. data/spec/unit/menu_spec.rb +53 -0
  291. data/spec/unit/namespace_spec.rb +214 -0
  292. data/spec/unit/pretty_format_spec.rb +35 -0
  293. data/spec/unit/rails_spec.rb +43 -0
  294. data/spec/unit/registration_spec.rb +76 -0
  295. data/spec/unit/reloader_spec.rb +28 -0
  296. data/spec/unit/renderer_spec.rb +108 -0
  297. data/spec/unit/resource/action_items_spec.rb +62 -0
  298. data/spec/unit/resource/menu_spec.rb +80 -0
  299. data/spec/unit/resource/naming_spec.rb +56 -0
  300. data/spec/unit/resource/scopes_spec.rb +30 -0
  301. data/spec/unit/resource/sidebars_spec.rb +50 -0
  302. data/spec/unit/resource_controller/collection_spec.rb +34 -0
  303. data/spec/unit/resource_controller_spec.rb +152 -0
  304. data/spec/unit/resource_spec.rb +260 -0
  305. data/spec/unit/routing_spec.rb +88 -0
  306. data/spec/unit/sass/helpers_spec.rb +47 -0
  307. data/spec/unit/scope_spec.rb +31 -0
  308. data/spec/unit/tabs_renderer_spec.rb +85 -0
  309. data/spec/unit/view_factory_spec.rb +19 -0
  310. data/spec/unit/views/components/attributes_table_spec.rb +100 -0
  311. data/spec/unit/views/components/blank_slate_spec.rb +31 -0
  312. data/spec/unit/views/components/columns_spec.rb +75 -0
  313. data/spec/unit/views/components/panel_spec.rb +31 -0
  314. data/spec/unit/views/components/sidebar_section_spec.rb +37 -0
  315. data/spec/unit/views/components/status_tag_spec.rb +81 -0
  316. data/spec/unit/views/components/table_for_spec.rb +130 -0
  317. data/spec/unit/views/pages/layout_spec.rb +22 -0
  318. data/tasks/docs.rake +39 -0
  319. data/tasks/test.rake +49 -0
  320. data/tasks/yard.rake +6 -0
  321. metadata +510 -0
@@ -0,0 +1,84 @@
1
+ module Arbre
2
+ module HTML
3
+ def current_dom_context
4
+ @__current_dom_element__ ||= Arbre::Context.new(assigns, helpers)
5
+ @__current_dom_element__.current_dom_context
6
+ end
7
+
8
+ def helpers
9
+ @_helpers
10
+ end
11
+
12
+ def method_missing(name, *args, &block)
13
+ if current_dom_context.respond_to?(name)
14
+ current_dom_context.send name, *args, &block
15
+ elsif assigns && assigns.has_key?(name)
16
+ assigns[name]
17
+ elsif helpers.respond_to?(name)
18
+ helpers.send(name, *args, &block)
19
+ else
20
+ super
21
+ end
22
+ end
23
+
24
+ module BuilderMethods
25
+ def build_tag(klass, *args, &block)
26
+ tag = klass.new(assigns, helpers)
27
+
28
+ # If you passed in a block and want the object
29
+ if block_given? && block.arity > 0
30
+ # Set out context to the tag, and pass responsibility to the tag
31
+ with_current_dom_context tag do
32
+ tag.build(*args, &block)
33
+ end
34
+ else
35
+ # Build the tag
36
+ tag.build(*args)
37
+
38
+ # Render the blocks contents
39
+ if block_given?
40
+ with_current_dom_context tag do
41
+ insert_text_node_if_string(yield)
42
+ end
43
+ end
44
+ end
45
+
46
+ tag
47
+ end
48
+
49
+ def insert_tag(klass, *args, &block)
50
+ tag = build_tag(klass, *args, &block)
51
+ current_dom_context.add_child(tag)
52
+ tag
53
+ end
54
+
55
+ def current_dom_context
56
+ @__current_dom_element_buffer__ ||= [self]
57
+ current_element = @__current_dom_element_buffer__.last
58
+ if current_element == self
59
+ self
60
+ else
61
+ current_element.current_dom_context
62
+ end
63
+ end
64
+
65
+ def with_current_dom_context(tag)
66
+ raise ArgumentError, "Can't be in the context of nil. #{@__current_dom_element_buffer__.inspect}" unless tag
67
+ current_dom_context # Ensure a context is setup
68
+ @__current_dom_element_buffer__.push tag
69
+ yield
70
+ @__current_dom_element_buffer__.pop
71
+ end
72
+ alias_method :within, :with_current_dom_context
73
+
74
+ # Inserts a text node if the tag is a string
75
+ def insert_text_node_if_string(tag)
76
+ if tag.is_a?(String)
77
+ current_dom_context << TextNode.from_string(tag)
78
+ end
79
+ end
80
+ end
81
+
82
+ end
83
+ end
84
+
@@ -0,0 +1,47 @@
1
+ module Arbre
2
+ module HTML
3
+
4
+ AUTO_BUILD_ELEMENTS = [ :a, :abbr, :address, :area, :article, :aside, :audio, :b, :base,
5
+ :bdo, :blockquote, :body, :br, :button, :canvas, :caption, :cite,
6
+ :code, :col, :colgroup, :command, :datalist, :dd, :del, :details,
7
+ :dfn, :div, :dl, :dt, :em, :embed, :fieldset, :figcaption, :figure,
8
+ :footer, :form, :h1, :h2, :h3, :h4, :h5, :h6, :head, :header, :hgroup,
9
+ :hr, :html, :i, :iframe, :img, :input, :ins, :keygen, :kbd, :label,
10
+ :legend, :li, :link, :map, :mark, :menu, :meta, :meter, :nav, :noscript,
11
+ :object, :ol, :optgroup, :option, :output, :pre, :progress, :q,
12
+ :s, :samp, :script, :section, :select, :small, :source, :span,
13
+ :strong, :style, :sub, :summary, :sup, :table, :tbody, :td,
14
+ :textarea, :tfoot, :th, :thead, :time, :title, :tr, :ul, :var, :video ]
15
+
16
+ HTML5_ELEMENTS = [ :p ] + AUTO_BUILD_ELEMENTS
17
+
18
+ AUTO_BUILD_ELEMENTS.each do |name|
19
+ class_eval <<-EOF
20
+ class #{name.to_s.capitalize} < Tag
21
+ builder_method :#{name}
22
+ end
23
+ EOF
24
+ end
25
+
26
+ class P < Tag
27
+ builder_method :para
28
+ end
29
+
30
+ class Table < Tag
31
+ def initialize(*)
32
+ super
33
+ set_table_tag_defaults
34
+ end
35
+
36
+ protected
37
+
38
+ # Set some good defaults for tables
39
+ def set_table_tag_defaults
40
+ set_attribute :border, 0
41
+ set_attribute :cellspacing, 0
42
+ set_attribute :cellpadding, 0
43
+ end
44
+ end
45
+
46
+ end
47
+ end
@@ -0,0 +1,137 @@
1
+ require 'erb'
2
+
3
+ module Arbre
4
+ module HTML
5
+
6
+ class Tag < Element
7
+ attr_reader :attributes
8
+
9
+ def initialize(*)
10
+ super
11
+ @attributes = Attributes.new
12
+ end
13
+
14
+ def build(*args)
15
+ super
16
+ attributes = args.extract_options!
17
+ self.content = args.first if args.first
18
+
19
+ set_for_attribute(attributes.delete(:for))
20
+
21
+ attributes.each do |key, value|
22
+ set_attribute(key, value)
23
+ end
24
+ end
25
+
26
+ def set_attribute(name, value)
27
+ @attributes[name.to_sym] = value
28
+ end
29
+
30
+ def get_attribute(name)
31
+ @attributes[name.to_sym]
32
+ end
33
+ alias :attr :get_attribute
34
+
35
+ def has_attribute?(name)
36
+ @attributes.has_key?(name.to_sym)
37
+ end
38
+
39
+ def remove_attribute(name)
40
+ @attributes.delete(name.to_sym)
41
+ end
42
+
43
+ def id
44
+ get_attribute(:id)
45
+ end
46
+
47
+ # Generates and id for the object if it doesn't exist already
48
+ def id!
49
+ return id if id
50
+ self.id = object_id.to_s
51
+ id
52
+ end
53
+
54
+ def id=(id)
55
+ set_attribute(:id, id)
56
+ end
57
+
58
+ def add_class(class_names)
59
+ class_list.add class_names
60
+ end
61
+
62
+ def remove_class(class_names)
63
+ class_list.delete(class_names)
64
+ end
65
+
66
+ # Returns a string of classes
67
+ def class_names
68
+ class_list.to_html
69
+ end
70
+
71
+ def class_list
72
+ get_attribute(:class) || set_attribute(:class, ClassList.new)
73
+ end
74
+
75
+ def to_html
76
+ indent("<#{tag_name}#{attributes_html}>", content, "</#{tag_name}>").html_safe
77
+ end
78
+
79
+ private
80
+
81
+ INDENT_SIZE = 2
82
+
83
+ def indent(open_tag, child_content, close_tag)
84
+ spaces = ' ' * indent_level * INDENT_SIZE
85
+
86
+ html = ""
87
+
88
+ if no_child? || child_is_text?
89
+ if self_closing_tag?
90
+ html << spaces << open_tag.sub( />$/, '/>' )
91
+ else
92
+ # one line
93
+ html << spaces << open_tag << child_content << close_tag
94
+ end
95
+ else
96
+ # multiple lines
97
+ html << spaces << open_tag << "\n"
98
+ html << child_content # the child takes care of its own spaces
99
+ html << spaces << close_tag
100
+ end
101
+
102
+ html << "\n"
103
+
104
+ html
105
+ end
106
+
107
+ def self_closing_tag?
108
+ %w|meta link|.include?(tag_name)
109
+ end
110
+
111
+ def no_child?
112
+ children.empty?
113
+ end
114
+
115
+ def child_is_text?
116
+ children.size == 1 && children.first.is_a?(TextNode)
117
+ end
118
+
119
+
120
+ def attributes_html
121
+ attributes.any? ? " " + attributes.to_html : nil
122
+ end
123
+
124
+ def set_for_attribute(record)
125
+ return unless record
126
+ set_attribute :id, ActionController::RecordIdentifier.dom_id(record, default_id_for_prefix)
127
+ add_class ActionController::RecordIdentifier.dom_class(record)
128
+ end
129
+
130
+ def default_id_for_prefix
131
+ nil
132
+ end
133
+
134
+ end
135
+
136
+ end
137
+ end
@@ -0,0 +1,35 @@
1
+ require 'erb'
2
+
3
+ module Arbre
4
+ module HTML
5
+
6
+ class TextNode < Element
7
+
8
+ builder_method :text_node
9
+
10
+ # Builds a text node from a string
11
+ def self.from_string(string)
12
+ node = new
13
+ node.build(string)
14
+ node
15
+ end
16
+
17
+ def add_child(*args)
18
+ raise "TextNodes do not have children"
19
+ end
20
+
21
+ def build(string)
22
+ @content = string
23
+ end
24
+
25
+ def tag_name
26
+ nil
27
+ end
28
+
29
+ def to_html
30
+ ERB::Util.html_escape(@content.to_html)
31
+ end
32
+ end
33
+
34
+ end
35
+ end
@@ -0,0 +1,34 @@
1
+ module ActiveAdmin
2
+ module AssetRegistration
3
+
4
+ # Stylesheets
5
+
6
+ def register_stylesheet(name)
7
+ stylesheets << name
8
+ end
9
+
10
+ def stylesheets
11
+ @stylesheets ||= []
12
+ end
13
+
14
+ def clear_stylesheets!
15
+ @stylesheets = []
16
+ end
17
+
18
+
19
+ # Javascripts
20
+
21
+ def register_javascript(name)
22
+ javascripts << name
23
+ end
24
+
25
+ def javascripts
26
+ @javascripts ||= []
27
+ end
28
+
29
+ def clear_javascripts!
30
+ @javascripts = []
31
+ end
32
+
33
+ end
34
+ end
@@ -0,0 +1,89 @@
1
+ module ActiveAdmin
2
+ module Callbacks
3
+ extend ActiveSupport::Concern
4
+
5
+ module InstanceMethods
6
+ protected
7
+
8
+ # Simple callback system. Implements before and after callbacks for
9
+ # use within the controllers.
10
+ #
11
+ # We didn't use the ActiveSupport callbacks becuase they do not support
12
+ # passing in any arbitrary object into the callback method (which we
13
+ # need to do)
14
+
15
+ def call_callback_with(method, *args)
16
+ case method
17
+ when Symbol
18
+ send(method, *args)
19
+ when Proc
20
+ instance_exec(*args, &method)
21
+ else
22
+ raise "Please register with callbacks using a symbol or a block/proc."
23
+ end
24
+ end
25
+ end
26
+
27
+ module ClassMethods
28
+
29
+ # Define a new callback.
30
+ #
31
+ # Example:
32
+ #
33
+ # class MyClassWithCallbacks
34
+ # include ActiveAdmin::Callbacks
35
+ #
36
+ # define_active_admin_callbacks :save
37
+ #
38
+ # before_save do |arg1, arg2|
39
+ # # runs before save
40
+ # end
41
+ #
42
+ # after_save :call_after_save
43
+ #
44
+ # def save
45
+ # # Will run before, yield, then after
46
+ # run_save_callbacks :arg1, :arg2 do
47
+ # save!
48
+ # end
49
+ # end
50
+ #
51
+ # protected
52
+ #
53
+ # def call_after_save(arg1, arg2)
54
+ # # runs after save
55
+ # end
56
+ # end
57
+ #
58
+ def define_active_admin_callbacks(*names)
59
+ names.each do |name|
60
+ [:before, :after].each do |type|
61
+
62
+ # Define a method to set the callback
63
+ class_eval(<<-EOS, __FILE__, __LINE__ + 1)
64
+ # def self.before_create_callbacks
65
+ def self.#{type}_#{name}_callbacks
66
+ @#{type}_#{name}_callbacks ||= []
67
+ end
68
+
69
+ # def self.before_create
70
+ def self.#{type}_#{name}(method = nil, &block)
71
+ #{type}_#{name}_callbacks << (method || block)
72
+ end
73
+ EOS
74
+ end
75
+
76
+ # Define a method to run the callbacks
77
+ class_eval(<<-EOS, __FILE__, __LINE__ + 1)
78
+ def run_#{name}_callbacks(*args)
79
+ self.class.before_#{name}_callbacks.each{|callback| call_callback_with(callback, *args)}
80
+ value = yield if block_given?
81
+ self.class.after_#{name}_callbacks.each{|callback| call_callback_with(callback, *args)}
82
+ return value
83
+ end
84
+ EOS
85
+ end
86
+ end
87
+ end
88
+ end
89
+ end
@@ -0,0 +1,88 @@
1
+ require 'active_admin/comments/configuration'
2
+ require 'active_admin/comments/comment'
3
+ require 'active_admin/comments/views'
4
+ require 'active_admin/comments/show_page_helper'
5
+ require 'active_admin/comments/namespace_helper'
6
+ require 'active_admin/comments/resource_helper'
7
+
8
+ # Add the comments configuration
9
+ ActiveAdmin::Application.send :include, ActiveAdmin::Comments::Configuration
10
+
11
+ # Add the comments module to ActiveAdmin::Namespace
12
+ ActiveAdmin::Namespace.send :include, ActiveAdmin::Comments::NamespaceHelper
13
+
14
+ # Add the comments module to ActiveAdmin::Resource
15
+ ActiveAdmin::Resource.send :include, ActiveAdmin::Comments::ResourceHelper
16
+
17
+ # Add the module to the show page
18
+ ActiveAdmin.application.view_factory.show_page.send :include, ActiveAdmin::Comments::ShowPageHelper
19
+
20
+ # Generate a Comment resource when namespaces are registered
21
+ ActiveAdmin::Event.subscribe ActiveAdmin::Namespace::RegisterEvent do |namespace|
22
+ if namespace.comments?
23
+ namespace.register ActiveAdmin::Comment, :as => 'Comment' do
24
+ actions :index, :show, :create
25
+
26
+ # Don't display in the menu
27
+ menu false
28
+
29
+ # Don't allow comments on comments
30
+ config.comments = false
31
+
32
+ # Filter Comments by date
33
+ filter :resource_type
34
+ filter :body
35
+ filter :created_at
36
+
37
+ # Only view comments in this namespace
38
+ scope :all, :default => true do |comments|
39
+ comments.where(:namespace => active_admin_config.namespace.name)
40
+ end
41
+
42
+ # Always redirect to the resource on show
43
+ before_filter :only => :show do
44
+ flash[:notice] = flash[:notice].dup if flash[:notice]
45
+ comment = ActiveAdmin::Comment.find(params[:id])
46
+ resource_config = active_admin_config.namespace.resource_for(comment.resource.class)
47
+ redirect_to send(resource_config.route_instance_path, comment.resource)
48
+ end
49
+
50
+ # Store the author and namespace
51
+ before_save do |comment|
52
+ comment.namespace = active_admin_config.namespace.name
53
+ comment.author = current_active_admin_user
54
+ end
55
+
56
+ # Redirect to the resource show page when failing to add a comment
57
+ # TODO: Provide helpers to make such kind of customization much simpler
58
+ controller do
59
+ def create
60
+ create! do |success, failure|
61
+ failure.html do
62
+ resource_config = active_admin_config.namespace.resource_for(@comment.resource.class)
63
+ flash[:error] = "Comment wasn't saved, text was empty."
64
+ redirect_to send(resource_config.route_instance_path, @comment.resource)
65
+ end
66
+ end
67
+ end
68
+ end
69
+
70
+
71
+ # Display as a table
72
+ index do
73
+ column("Resource"){|comment| auto_link(comment.resource) }
74
+ column("Author"){|comment| auto_link(comment.author) }
75
+ column :body
76
+ end
77
+ end
78
+ end
79
+ end
80
+
81
+ # Register for comments when new resources are registered
82
+ ActiveAdmin::Event.subscribe ActiveAdmin::Resource::RegisterEvent do |resource|
83
+ if resource.comments?
84
+ resource.resource.has_many :active_admin_comments, :class_name => "ActiveAdmin::Comment",
85
+ :as => :resource,
86
+ :dependent => :destroy
87
+ end
88
+ end