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,186 @@
1
+ module ActiveAdmin
2
+
3
+ module ViewHelpers
4
+ module FilterFormHelper
5
+
6
+ # Helper method to render a filter form
7
+ def active_admin_filters_form_for(search, filters, options = {})
8
+ options[:builder] ||= ActiveAdmin::FilterFormBuilder
9
+ options[:url] ||= collection_path
10
+ options[:html] ||= {}
11
+ options[:html][:method] = :get
12
+ options[:html][:class] ||= "filter_form"
13
+ options[:as] = :q
14
+ clear_link = link_to(I18n.t('active_admin.clear_filters'), "#", :class => "clear_filters_btn")
15
+ form_for search, options do |f|
16
+ filters.each do |filter_options|
17
+ filter_options = filter_options.dup
18
+ attribute = filter_options.delete(:attribute)
19
+ f.filter attribute, filter_options
20
+ end
21
+
22
+ buttons = content_tag :div, :class => "buttons" do
23
+ f.submit(I18n.t('active_admin.filter')) +
24
+ clear_link +
25
+ hidden_field_tag("order", params[:order]) +
26
+ hidden_field_tag("scope", params[:scope])
27
+ end
28
+
29
+ f.form_buffers.last + buttons
30
+ end
31
+ end
32
+
33
+ end
34
+ end
35
+
36
+ # This form builder defines methods to build filter forms such
37
+ # as the one found in the sidebar of the index page of a standard resource.
38
+ class FilterFormBuilder < FormBuilder
39
+
40
+ def filter(method, options = {})
41
+ return "" if method.nil? || method == ""
42
+ options[:as] ||= default_filter_type(method)
43
+ return "" unless options[:as]
44
+ field_type = options.delete(:as)
45
+ options[:label] ||= default_filter_label(method)
46
+ content = with_new_form_buffer do
47
+ send("filter_#{field_type}_input", method, options)
48
+ end
49
+ @form_buffers.last << template.content_tag(:div, content, :class => "filter_form_field filter_#{field_type}")
50
+ end
51
+
52
+ protected
53
+
54
+ def filter_string_input(method, options = {})
55
+ field_name = "#{method}_contains"
56
+
57
+ [ label(field_name, I18n.t('active_admin.search_field', :field => options[:label])),
58
+ text_field(field_name)
59
+ ].join("\n").html_safe
60
+ end
61
+
62
+ def filter_date_range_input(method, options = {})
63
+ gt_field_name = "#{method}_gte"
64
+ lt_field_name = "#{method}_lte"
65
+
66
+ [ label(gt_field_name, options[:label]),
67
+ filter_date_text_field(gt_field_name),
68
+ template.content_tag(:span, "-", :class => "seperator"),
69
+ filter_date_text_field(lt_field_name)
70
+ ].join("\n").html_safe
71
+ end
72
+
73
+ def filter_date_text_field(method)
74
+ current_value = @object.send(method)
75
+ text_field(method, :size => 12, :class => "datepicker", :max => 10, :value => current_value.respond_to?(:strftime) ? current_value.strftime("%Y-%m-%d") : "")
76
+ end
77
+
78
+ def filter_numeric_input(method, options = {})
79
+ filters = numeric_filters_for_method(method, options.delete(:filters) || default_numeric_filters)
80
+ current_filter = current_numeric_scope(filters)
81
+ filter_select = @template.select_tag '', @template.options_for_select(filters, current_filter),
82
+ :onchange => "document.getElementById('#{method}_numeric').name = 'q[' + this.value + ']';"
83
+ filter_input = text_field current_filter, :size => 10, :id => "#{method}_numeric"
84
+
85
+ [ label(method),
86
+ filter_select,
87
+ " ",
88
+ filter_input
89
+ ].join("\n").html_safe
90
+ end
91
+
92
+ def numeric_filters_for_method(method, filters)
93
+ filters.collect{|scope| [scope[0], [method,scope[1]].join("_") ] }
94
+ end
95
+
96
+ # Returns the scope for which we are currently searching. If no search is available
97
+ # it returns the first scope
98
+ def current_numeric_scope(filters)
99
+ filters[1..-1].inject(filters.first){|a,b| object.send(b[1].to_sym) ? b : a }[1]
100
+ end
101
+
102
+ def default_numeric_filters
103
+ [[I18n.t('active_admin.equal_to'), 'eq'], [I18n.t('active_admin.greater_than'), 'gt'], [I18n.t('active_admin.less_than'), 'lt']]
104
+ end
105
+
106
+ def filter_select_input(method, options = {})
107
+ association_name = method.to_s.gsub(/_id$/, '').to_sym
108
+ input_name = (generate_association_input_name(method).to_s + "_eq").to_sym
109
+ collection = find_collection_for_column(association_name, options)
110
+
111
+ [ label(input_name, options[:label]),
112
+ select(input_name, collection, options.merge(:include_blank => I18n.t('active_admin.any')))
113
+ ].join("\n").html_safe
114
+ end
115
+
116
+ def filter_check_boxes_input(method, options = {})
117
+ input_name = (generate_association_input_name(method).to_s + "_in").to_sym
118
+ collection = find_collection_for_column(method, options)
119
+ selected_values = @object.send(input_name) || []
120
+ checkboxes = template.content_tag :div, :class => "check_boxes_wrapper" do
121
+ collection.map do |c|
122
+ label = c.is_a?(Array) ? c.first : c
123
+ value = c.is_a?(Array) ? c.last : c
124
+ "<label><input type=\"checkbox\" name=\"q[#{input_name}][]\" value=\"#{value}\" #{selected_values.include?(value) ? "checked" : ""}/> #{label}</label>"
125
+ end.join("\n").html_safe
126
+ end
127
+
128
+ [ label(input_name, options[:label]),
129
+ checkboxes
130
+ ].join("\n").html_safe
131
+ end
132
+
133
+ # Override the standard finder to accept a proc
134
+ def find_collection_for_column(method, options = {})
135
+ options = options.dup
136
+ case options[:collection]
137
+ when Proc
138
+ options[:collection] = options[:collection].call
139
+ end
140
+ super(method, options)
141
+ end
142
+
143
+ # Returns the default filter type for a given attribute
144
+ def default_filter_type(method)
145
+ if column = column_for(method)
146
+ case column.type
147
+ when :date, :datetime
148
+ return :date_range
149
+ when :string, :text
150
+ return :string
151
+ when :integer
152
+ return :select if reflection_for(method.to_s.gsub('_id','').to_sym)
153
+ return :numeric
154
+ when :float, :decimal
155
+ return :numeric
156
+ end
157
+ end
158
+
159
+ if reflection = reflection_for(method)
160
+ return :select if reflection.macro == :belongs_to && !reflection.options[:polymorphic]
161
+ end
162
+ end
163
+
164
+ # Returns the default label for a given attribute
165
+ # Will use ActiveModel I18n if possible
166
+ def default_filter_label(method)
167
+ if @object.base.respond_to?(:human_attribute_name)
168
+ @object.base.human_attribute_name(method)
169
+ else
170
+ method.to_s.titlecase
171
+ end
172
+ end
173
+
174
+ # Returns the column for an attribute on the object being searched
175
+ # if it exists. Otherwise returns nil
176
+ def column_for(method)
177
+ @object.base.columns_hash[method.to_s] if @object.base.respond_to?(:columns_hash)
178
+ end
179
+
180
+ # Returns the association reflection for the method if it exists
181
+ def reflection_for(method)
182
+ @object.base.reflect_on_association(method) if @object.base.respond_to?(:reflect_on_association)
183
+ end
184
+
185
+ end
186
+ end
@@ -0,0 +1,13 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module FormHelper
4
+
5
+ def active_admin_form_for(resource, options = {}, &block)
6
+ options = Marshal.load( Marshal.dump(options) )
7
+ options[:builder] ||= ActiveAdmin::FormBuilder
8
+ semantic_form_for resource, options, &block
9
+ end
10
+
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,12 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module IconHelper
4
+
5
+ # Render an icon from the Iconic icon set
6
+ def icon(*args)
7
+ ActiveAdmin::Iconic.icon(*args)
8
+ end
9
+
10
+ end
11
+ end
12
+ end
@@ -0,0 +1,26 @@
1
+ module MethodOrProcHelper
2
+
3
+ # Many times throughout the views we want to either call a method on an object
4
+ # or instance_exec a proc passing in the object as the first parameter. This
5
+ # method takes care of this functionality.
6
+ #
7
+ # call_method_or_proc_on(@my_obj, :size) same as @my_obj.size
8
+ # OR
9
+ # proc = Proc.new{|s| s.size }
10
+ # call_method_or_proc_on(@my_obj, proc)
11
+ #
12
+ def call_method_or_proc_on(obj, symbol_or_proc, options = {})
13
+ exec = options[:exec].nil? ? true : options[:exec]
14
+ case symbol_or_proc
15
+ when Symbol, String
16
+ obj.send(symbol_or_proc.to_sym)
17
+ when Proc
18
+ if exec
19
+ instance_exec(obj, &symbol_or_proc)
20
+ else
21
+ symbol_or_proc.call(obj)
22
+ end
23
+ end
24
+ end
25
+
26
+ end
@@ -0,0 +1,29 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module RendererHelper
4
+
5
+ # Adds the ability to render ActiveAdmin::Renderers using the
6
+ # standard render method.
7
+ #
8
+ # Example:
9
+ #
10
+ # render MyRendererClass, "Arg1", "Arg2"
11
+ #
12
+ # which is the same as doing
13
+ #
14
+ # MyRendererClass.new(self).to_html("Arg1", "Arg2")
15
+ def render(*args)
16
+ if args[0].is_a?(Class) && args[0].ancestors.include?(ActiveAdmin::Renderer)
17
+ renderer = args.shift
18
+ renderer.new(self).to_html(*args)
19
+ elsif args[0].is_a?(Class) && args[0].ancestors.include?(Arbre::HTML::Tag)
20
+ tag_class = args.shift
21
+ insert_tag tag_class, *args
22
+ else
23
+ super
24
+ end
25
+ end
26
+
27
+ end
28
+ end
29
+ end
@@ -0,0 +1,15 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module SidebarHelper
4
+
5
+ def skip_sidebar!
6
+ @skip_sidebar = true
7
+ end
8
+
9
+ def skip_sidebar?
10
+ @skip_sidebar == true
11
+ end
12
+
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,11 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module TitleHelper
4
+
5
+ def title(_title)
6
+ @page_title = _title
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,11 @@
1
+ module ActiveAdmin
2
+ module ViewHelpers
3
+ module ViewFactoryHelper
4
+
5
+ def view_factory
6
+ active_admin_application.view_factory
7
+ end
8
+
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,8 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ # Loads all the classes in views/*.rb
5
+ Dir[File.expand_path('../views', __FILE__) + "/**/*.rb"].sort.each{ |f| require f }
6
+
7
+ end
8
+ end
@@ -0,0 +1,17 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ class ActionItems < ActiveAdmin::Component
5
+
6
+ def build(action_items)
7
+ action_items.each do |action_item|
8
+ span :class => "action_item" do
9
+ instance_eval(&action_item.block)
10
+ end
11
+ end
12
+ end
13
+
14
+ end
15
+
16
+ end
17
+ end
@@ -0,0 +1,66 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ class AttributesTable < ActiveAdmin::Component
5
+ builder_method :attributes_table_for
6
+
7
+ attr_reader :resource
8
+
9
+ def build(record, *attrs)
10
+ @record = record
11
+ super(:for => @record)
12
+ @table = table
13
+ rows(*attrs)
14
+ end
15
+
16
+ def rows(*attrs)
17
+ attrs.each {|attr| row(attr) }
18
+ end
19
+
20
+ def row(attr, &block)
21
+ @table << tr do
22
+ th do
23
+ header_content_for(attr)
24
+ end
25
+ td do
26
+ content_for(block || attr)
27
+ end
28
+ end
29
+ end
30
+
31
+ protected
32
+
33
+ def default_id_for_prefix
34
+ 'attributes_table'
35
+ end
36
+
37
+ def header_content_for(attr)
38
+ @record.class.respond_to?(:human_attribute_name) ? @record.class.human_attribute_name(attr).titleize : attr.to_s.titleize
39
+ end
40
+
41
+ def empty_value
42
+ span I18n.t('active_admin.empty'), :class => "empty"
43
+ end
44
+
45
+ def content_for(attr_or_proc)
46
+ value = case attr_or_proc
47
+ when Proc
48
+ attr_or_proc.call
49
+ else
50
+ content_for_attribute(attr_or_proc)
51
+ end
52
+ value = pretty_format(value)
53
+ value == "" || value == nil ? empty_value : value
54
+ end
55
+
56
+ def content_for_attribute(attr)
57
+ if attr.to_s =~ /^([\w]+)_id$/ && @record.respond_to?($1.to_sym)
58
+ content_for_attribute($1)
59
+ else
60
+ @record.send(attr.to_sym)
61
+ end
62
+ end
63
+ end
64
+
65
+ end
66
+ end
@@ -0,0 +1,33 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ # Build a Blank Slate
4
+ class BlankSlate < ActiveAdmin::Component
5
+ builder_method :blank_slate
6
+
7
+ def default_class_name
8
+ 'blank_slate_container'
9
+ end
10
+
11
+ def build(name, url = nil)
12
+ if url
13
+ super(span(blank_slate_content_with_link(name, url), :class => "blank_slate"))
14
+ else
15
+ super(span(blank_slate_content_without_link(name), :class => "blank_slate"))
16
+ end
17
+ end
18
+
19
+ private
20
+
21
+ def blank_slate_content_with_link(name, url)
22
+ I18n.t('active_admin.blank_slate.content', :resource_name => name).html_safe +
23
+ " " +
24
+ link_to(I18n.t('active_admin.blank_slate.link').html_safe, url)
25
+ end
26
+
27
+ def blank_slate_content_without_link(name)
28
+ I18n.t('active_admin.blank_slate.content', :resource_name => name).html_safe
29
+ end
30
+
31
+ end
32
+ end
33
+ end