saulolso-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 (255) hide show
  1. data/.document +5 -0
  2. data/.gitignore +32 -0
  3. data/.travis.yml +4 -0
  4. data/CHANGELOG.rdoc +76 -0
  5. data/Gemfile +26 -0
  6. data/LICENSE +25 -0
  7. data/README.rdoc +450 -0
  8. data/Rakefile +100 -0
  9. data/activeadmin.gemspec +28 -0
  10. data/cucumber.yml +2 -0
  11. data/features/comments/commenting.feature +99 -0
  12. data/features/comments/viewing_index.feature +19 -0
  13. data/features/dashboard.feature +26 -0
  14. data/features/edit_page.feature +77 -0
  15. data/features/first_boot.feature +16 -0
  16. data/features/global_navigation.feature +30 -0
  17. data/features/index/format_as_csv.feature +45 -0
  18. data/features/index/formats.feature +10 -0
  19. data/features/index/index_as_block.feature +15 -0
  20. data/features/index/index_as_blog.feature +50 -0
  21. data/features/index/index_as_grid.feature +45 -0
  22. data/features/index/index_as_table.feature +79 -0
  23. data/features/index/index_scopes.feature +52 -0
  24. data/features/index/pagination.feature +23 -0
  25. data/features/menu.feature +26 -0
  26. data/features/new_page.feature +75 -0
  27. data/features/registering_assets.feature +35 -0
  28. data/features/registering_resources.feature +33 -0
  29. data/features/show/default_content.feature +43 -0
  30. data/features/show/page_title.feature +33 -0
  31. data/features/sidebar_sections.feature +127 -0
  32. data/features/specifying_actions.feature +60 -0
  33. data/features/step_definitions/action_item_steps.rb +7 -0
  34. data/features/step_definitions/additional_web_steps.rb +67 -0
  35. data/features/step_definitions/asset_steps.rb +7 -0
  36. data/features/step_definitions/attribute_steps.rb +15 -0
  37. data/features/step_definitions/comment_steps.rb +8 -0
  38. data/features/step_definitions/configuration_steps.rb +31 -0
  39. data/features/step_definitions/dashboard_steps.rb +11 -0
  40. data/features/step_definitions/factory_steps.rb +28 -0
  41. data/features/step_definitions/flash_steps.rb +3 -0
  42. data/features/step_definitions/format_steps.rb +34 -0
  43. data/features/step_definitions/index_scope_steps.rb +20 -0
  44. data/features/step_definitions/menu_steps.rb +7 -0
  45. data/features/step_definitions/pagination_steps.rb +8 -0
  46. data/features/step_definitions/sidebar_steps.rb +11 -0
  47. data/features/step_definitions/tab_steps.rb +3 -0
  48. data/features/step_definitions/user_steps.rb +20 -0
  49. data/features/step_definitions/web_steps.rb +219 -0
  50. data/features/sti_resource.feature +49 -0
  51. data/features/support/env.rb +92 -0
  52. data/features/support/paths.rb +48 -0
  53. data/features/users/logging_in.feature +34 -0
  54. data/features/users/logging_out.feature +13 -0
  55. data/lib/active_admin/abstract_view_factory.rb +95 -0
  56. data/lib/active_admin/action_items.rb +37 -0
  57. data/lib/active_admin/application.rb +204 -0
  58. data/lib/active_admin/arbre/attributes.rb +20 -0
  59. data/lib/active_admin/arbre/class_list.rb +28 -0
  60. data/lib/active_admin/arbre/collection.rb +27 -0
  61. data/lib/active_admin/arbre/context.rb +8 -0
  62. data/lib/active_admin/arbre/core_extensions.rb +5 -0
  63. data/lib/active_admin/arbre/document.rb +42 -0
  64. data/lib/active_admin/arbre/element.rb +151 -0
  65. data/lib/active_admin/arbre/html.rb +84 -0
  66. data/lib/active_admin/arbre/html5_elements.rb +47 -0
  67. data/lib/active_admin/arbre/tag.rb +137 -0
  68. data/lib/active_admin/arbre/text_node.rb +35 -0
  69. data/lib/active_admin/arbre.rb +23 -0
  70. data/lib/active_admin/asset_registration.rb +34 -0
  71. data/lib/active_admin/callbacks.rb +87 -0
  72. data/lib/active_admin/comments/comment.rb +21 -0
  73. data/lib/active_admin/comments/configuration.rb +18 -0
  74. data/lib/active_admin/comments/namespace_helper.rb +14 -0
  75. data/lib/active_admin/comments/resource_helper.rb +17 -0
  76. data/lib/active_admin/comments/show_page_helper.rb +23 -0
  77. data/lib/active_admin/comments/views/active_admin_comment.rb +0 -0
  78. data/lib/active_admin/comments/views/active_admin_comments.rb +82 -0
  79. data/lib/active_admin/comments/views.rb +3 -0
  80. data/lib/active_admin/comments.rb +88 -0
  81. data/lib/active_admin/component.rb +22 -0
  82. data/lib/active_admin/controller_action.rb +12 -0
  83. data/lib/active_admin/csv_builder.rb +45 -0
  84. data/lib/active_admin/dashboards/dashboard_controller.rb +47 -0
  85. data/lib/active_admin/dashboards/section.rb +34 -0
  86. data/lib/active_admin/dashboards.rb +48 -0
  87. data/lib/active_admin/devise.rb +43 -0
  88. data/lib/active_admin/dsl.rb +215 -0
  89. data/lib/active_admin/event.rb +31 -0
  90. data/lib/active_admin/form_builder.rb +109 -0
  91. data/lib/active_admin/helpers/optional_display.rb +34 -0
  92. data/lib/active_admin/iconic/icons.rb +142 -0
  93. data/lib/active_admin/iconic.rb +51 -0
  94. data/lib/active_admin/locales/da.yml +26 -0
  95. data/lib/active_admin/locales/en.yml +34 -0
  96. data/lib/active_admin/locales/es.yml +34 -0
  97. data/lib/active_admin/locales/pt.yml +34 -0
  98. data/lib/active_admin/menu.rb +42 -0
  99. data/lib/active_admin/menu_item.rb +73 -0
  100. data/lib/active_admin/namespace.rb +198 -0
  101. data/lib/active_admin/page_config.rb +15 -0
  102. data/lib/active_admin/renderer.rb +87 -0
  103. data/lib/active_admin/resource/belongs_to.rb +31 -0
  104. data/lib/active_admin/resource.rb +229 -0
  105. data/lib/active_admin/resource_controller/action_builder.rb +21 -0
  106. data/lib/active_admin/resource_controller/actions.rb +79 -0
  107. data/lib/active_admin/resource_controller/callbacks.rb +47 -0
  108. data/lib/active_admin/resource_controller/collection.rb +144 -0
  109. data/lib/active_admin/resource_controller/filters.rb +58 -0
  110. data/lib/active_admin/resource_controller/form.rb +42 -0
  111. data/lib/active_admin/resource_controller/menu.rb +29 -0
  112. data/lib/active_admin/resource_controller/page_configurations.rb +53 -0
  113. data/lib/active_admin/resource_controller/scoping.rb +36 -0
  114. data/lib/active_admin/resource_controller/sidebars.rb +38 -0
  115. data/lib/active_admin/resource_controller.rb +119 -0
  116. data/lib/active_admin/router.rb +85 -0
  117. data/lib/active_admin/scope.rb +17 -0
  118. data/lib/active_admin/sidebar.rb +43 -0
  119. data/lib/active_admin/stylesheets/active_admin/_comments.scss +40 -0
  120. data/lib/active_admin/stylesheets/active_admin/_flash_messages.scss +13 -0
  121. data/lib/active_admin/stylesheets/active_admin/_forms.scss +168 -0
  122. data/lib/active_admin/stylesheets/active_admin/_header.scss +108 -0
  123. data/lib/active_admin/stylesheets/active_admin/_typography.scss +100 -0
  124. data/lib/active_admin/stylesheets/active_admin/mixins/_all.scss +8 -0
  125. data/lib/active_admin/stylesheets/active_admin/mixins/_buttons.scss +27 -0
  126. data/lib/active_admin/stylesheets/active_admin/mixins/_gradients.scss +21 -0
  127. data/lib/active_admin/stylesheets/active_admin/mixins/_icons.scss +20 -0
  128. data/lib/active_admin/stylesheets/active_admin/mixins/_reset.scss +165 -0
  129. data/lib/active_admin/stylesheets/active_admin/mixins/_rounded.scss +43 -0
  130. data/lib/active_admin/stylesheets/active_admin/mixins/_sections.scss +27 -0
  131. data/lib/active_admin/stylesheets/active_admin/mixins/_shadows.scss +21 -0
  132. data/lib/active_admin/stylesheets/active_admin/mixins/_variables.scss +12 -0
  133. data/lib/active_admin/stylesheets/active_admin.scss +429 -0
  134. data/lib/active_admin/version.rb +3 -0
  135. data/lib/active_admin/view_factory.rb +21 -0
  136. data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
  137. data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
  138. data/lib/active_admin/view_helpers/auto_link_helper.rb +42 -0
  139. data/lib/active_admin/view_helpers/breadcrumb_helper.rb +29 -0
  140. data/lib/active_admin/view_helpers/display_helper.rb +38 -0
  141. data/lib/active_admin/view_helpers/filter_form_helper.rb +185 -0
  142. data/lib/active_admin/view_helpers/form_helper.rb +12 -0
  143. data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
  144. data/lib/active_admin/view_helpers/method_or_proc_helper.rb +26 -0
  145. data/lib/active_admin/view_helpers/renderer_helper.rb +29 -0
  146. data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
  147. data/lib/active_admin/view_helpers/table_helper.rb +12 -0
  148. data/lib/active_admin/view_helpers/title_helper.rb +11 -0
  149. data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
  150. data/lib/active_admin/view_helpers.rb +23 -0
  151. data/lib/active_admin/views/action_items.rb +17 -0
  152. data/lib/active_admin/views/components/attributes_table.rb +66 -0
  153. data/lib/active_admin/views/components/columns.rb +47 -0
  154. data/lib/active_admin/views/components/paginated_collection.rb +92 -0
  155. data/lib/active_admin/views/components/panel.rb +26 -0
  156. data/lib/active_admin/views/components/scopes.rb +70 -0
  157. data/lib/active_admin/views/components/sidebar_section.rb +30 -0
  158. data/lib/active_admin/views/components/status_tag.rb +55 -0
  159. data/lib/active_admin/views/components/table_for.rb +193 -0
  160. data/lib/active_admin/views/dashboard_section_renderer.rb +19 -0
  161. data/lib/active_admin/views/header_renderer.rb +37 -0
  162. data/lib/active_admin/views/index_as_block.rb +24 -0
  163. data/lib/active_admin/views/index_as_blog.rb +89 -0
  164. data/lib/active_admin/views/index_as_grid.rb +49 -0
  165. data/lib/active_admin/views/index_as_table.rb +75 -0
  166. data/lib/active_admin/views/pages/base.rb +144 -0
  167. data/lib/active_admin/views/pages/dashboard.rb +59 -0
  168. data/lib/active_admin/views/pages/edit.rb +27 -0
  169. data/lib/active_admin/views/pages/index.rb +66 -0
  170. data/lib/active_admin/views/pages/new.rb +27 -0
  171. data/lib/active_admin/views/pages/show.rb +56 -0
  172. data/lib/active_admin/views/tabs_renderer.rb +58 -0
  173. data/lib/active_admin/views/templates/active_admin/dashboard/index.html.arb +1 -0
  174. data/lib/active_admin/views/templates/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
  175. data/lib/active_admin/views/templates/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
  176. data/lib/active_admin/views/templates/active_admin/devise/passwords/edit.html.erb +16 -0
  177. data/lib/active_admin/views/templates/active_admin/devise/passwords/new.html.erb +14 -0
  178. data/lib/active_admin/views/templates/active_admin/devise/sessions/new.html.erb +18 -0
  179. data/lib/active_admin/views/templates/active_admin/devise/shared/_links.erb +20 -0
  180. data/lib/active_admin/views/templates/active_admin/devise/unlocks/new.html.erb +12 -0
  181. data/lib/active_admin/views/templates/active_admin/resource/edit.html.arb +1 -0
  182. data/lib/active_admin/views/templates/active_admin/resource/index.csv.erb +20 -0
  183. data/lib/active_admin/views/templates/active_admin/resource/index.html.arb +1 -0
  184. data/lib/active_admin/views/templates/active_admin/resource/new.html.arb +1 -0
  185. data/lib/active_admin/views/templates/active_admin/resource/show.html.arb +1 -0
  186. data/lib/active_admin/views/templates/layouts/active_admin.html.erb +39 -0
  187. data/lib/active_admin/views/templates/layouts/active_admin_logged_out.html.erb +31 -0
  188. data/lib/active_admin/views.rb +8 -0
  189. data/lib/active_admin.rb +71 -0
  190. data/lib/activeadmin.rb +1 -0
  191. data/lib/generators/active_admin/devise/devise_generator.rb +49 -0
  192. data/lib/generators/active_admin/install/install_generator.rb +46 -0
  193. data/lib/generators/active_admin/install/templates/active_admin.js +51 -0
  194. data/lib/generators/active_admin/install/templates/active_admin.rb.erb +78 -0
  195. data/lib/generators/active_admin/install/templates/active_admin_vendor.js +382 -0
  196. data/lib/generators/active_admin/install/templates/dashboards.rb +38 -0
  197. data/lib/generators/active_admin/install/templates/images/admin_notes_icon.png +0 -0
  198. data/lib/generators/active_admin/install/templates/images/loading.gif +0 -0
  199. data/lib/generators/active_admin/install/templates/images/nested_menu_arrow.gif +0 -0
  200. data/lib/generators/active_admin/install/templates/images/nested_menu_arrow_dark.gif +0 -0
  201. data/lib/generators/active_admin/install/templates/images/orderable.png +0 -0
  202. data/lib/generators/active_admin/install/templates/migrations/1_create_admin_notes.rb +16 -0
  203. data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +25 -0
  204. data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
  205. data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
  206. data/spec/integration/belongs_to_spec.rb +42 -0
  207. data/spec/spec_helper.rb +156 -0
  208. data/spec/support/integration_example_group.rb +33 -0
  209. data/spec/support/rails_template.rb +32 -0
  210. data/spec/support/rails_template_with_data.rb +32 -0
  211. data/spec/support/templates/cucumber.rb +24 -0
  212. data/spec/unit/abstract_view_factory_spec.rb +79 -0
  213. data/spec/unit/action_builder_spec.rb +88 -0
  214. data/spec/unit/action_items_spec.rb +27 -0
  215. data/spec/unit/application_spec.rb +67 -0
  216. data/spec/unit/arbre/html/element_finder_methods_spec.rb +54 -0
  217. data/spec/unit/arbre/html/element_spec.rb +224 -0
  218. data/spec/unit/arbre/html/tag_attributes_spec.rb +61 -0
  219. data/spec/unit/arbre/html/tag_spec.rb +63 -0
  220. data/spec/unit/arbre/html_spec.rb +210 -0
  221. data/spec/unit/asset_registration_spec.rb +37 -0
  222. data/spec/unit/auto_link_spec.rb +39 -0
  223. data/spec/unit/belongs_to_spec.rb +45 -0
  224. data/spec/unit/breadcrumbs_spec.rb +110 -0
  225. data/spec/unit/comments_spec.rb +57 -0
  226. data/spec/unit/component_spec.rb +18 -0
  227. data/spec/unit/components/attributes_table_spec.rb +100 -0
  228. data/spec/unit/components/columns_spec.rb +75 -0
  229. data/spec/unit/components/panel_spec.rb +31 -0
  230. data/spec/unit/components/sidebar_section_spec.rb +37 -0
  231. data/spec/unit/components/status_tag_spec.rb +81 -0
  232. data/spec/unit/components/table_for_spec.rb +130 -0
  233. data/spec/unit/controller_filters_spec.rb +27 -0
  234. data/spec/unit/csv_builder_spec.rb +83 -0
  235. data/spec/unit/dashboard_controller_spec.rb +26 -0
  236. data/spec/unit/dashboard_section_spec.rb +56 -0
  237. data/spec/unit/dashboards_spec.rb +59 -0
  238. data/spec/unit/display_name_spec.rb +29 -0
  239. data/spec/unit/event_spec.rb +41 -0
  240. data/spec/unit/filter_form_builder_spec.rb +179 -0
  241. data/spec/unit/form_builder_spec.rb +238 -0
  242. data/spec/unit/menu_item_spec.rb +143 -0
  243. data/spec/unit/menu_spec.rb +53 -0
  244. data/spec/unit/namespace_spec.rb +203 -0
  245. data/spec/unit/pretty_format_spec.rb +35 -0
  246. data/spec/unit/registration_spec.rb +76 -0
  247. data/spec/unit/renderer_spec.rb +108 -0
  248. data/spec/unit/resource_controller/collection_spec.rb +34 -0
  249. data/spec/unit/resource_controller_spec.rb +147 -0
  250. data/spec/unit/resource_spec.rb +290 -0
  251. data/spec/unit/routing_spec.rb +88 -0
  252. data/spec/unit/scope_spec.rb +31 -0
  253. data/spec/unit/tabs_renderer_spec.rb +85 -0
  254. data/spec/unit/view_factory_spec.rb +16 -0
  255. metadata +482 -0
@@ -0,0 +1,75 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ class IndexAsTable < ActiveAdmin::Component
5
+
6
+ def build(page_config, collection)
7
+ table_options = {
8
+ :id => active_admin_config.plural_resource_name.underscore,
9
+ :sortable => true,
10
+ :class => "index_table",
11
+ :i18n => active_admin_config.resource
12
+ }
13
+
14
+ table_for collection, table_options do |t|
15
+ instance_exec(t, &page_config.block)
16
+ end
17
+ end
18
+
19
+ def table_for(*args, &block)
20
+ insert_tag IndexTableFor, *args, &block
21
+ end
22
+
23
+ #
24
+ # Extend the default ActiveAdmin::Views::TableFor with some
25
+ # methods for quickly displaying items on the index page
26
+ #
27
+ class IndexTableFor < ::ActiveAdmin::Views::TableFor
28
+
29
+ # Display a column for the id
30
+ def id_column
31
+ column('ID', :sortable => :id){|resource| link_to resource.id, resource_path(resource), :class => "resource_id_link"}
32
+ end
33
+
34
+ # Adds links to View, Edit and Delete
35
+ def default_actions(options = {})
36
+ options = {
37
+ :name => ""
38
+ }.merge(options)
39
+ column options[:name] do |resource|
40
+ links = link_to I18n.t('active_admin.view'), resource_path(resource), :class => "member_link view_link"
41
+ links += link_to I18n.t('active_admin.edit'), edit_resource_path(resource), :class => "member_link edit_link"
42
+ links += link_to I18n.t('active_admin.delete'), resource_path(resource), :method => :delete, :confirm => I18n.t('active_admin.delete_confirmation'), :class => "member_link delete_link"
43
+ links
44
+ end
45
+ end
46
+
47
+ # Display A Status Tag Column
48
+ #
49
+ # index do |i|
50
+ # i.status_tag :state
51
+ # end
52
+ #
53
+ # index do |i|
54
+ # i.status_tag "State", :status_name
55
+ # end
56
+ #
57
+ # index do |i|
58
+ # i.status_tag do |post|
59
+ # post.published? ? 'published' : 'draft'
60
+ # end
61
+ # end
62
+ #
63
+ def status_tag(*args, &block)
64
+ col = Column.new(*args, &block)
65
+ data = col.data
66
+ col.data = proc do |resource|
67
+ status_tag call_method_or_proc_on(resource, data)
68
+ end
69
+ add_column col
70
+ end
71
+ end # TableBuilder
72
+
73
+ end # Table
74
+ end
75
+ end
@@ -0,0 +1,144 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ module Pages
4
+ class Base < Arbre::HTML::Document
5
+
6
+ def build(*args)
7
+ super
8
+ add_classes_to_body
9
+ build_active_admin_head
10
+ build_page
11
+ end
12
+
13
+ private
14
+
15
+
16
+ def add_classes_to_body
17
+ @body.add_class(params[:action])
18
+ @body.add_class(params[:controller].gsub('/', '_'))
19
+ end
20
+
21
+ def build_active_admin_head
22
+ within @head do
23
+ meta :"http-equiv" => "Content-type", :content => "text/html; charset=utf-8"
24
+ insert_tag Arbre::HTML::Title, [title, active_admin_application.site_title].join(" | ")
25
+ active_admin_application.stylesheets.each do |path|
26
+ link :href => stylesheet_path(path), :media => "screen", :rel => "stylesheet", :type => "text/css"
27
+ end
28
+ active_admin_application.javascripts.each do |path|
29
+ script :src => javascript_path(path), :type => "text/javascript"
30
+ end
31
+ text_node csrf_meta_tag
32
+ end
33
+ end
34
+
35
+ def build_page
36
+ within @body do
37
+ div :id => "wrapper" do
38
+ build_header
39
+ build_title_bar
40
+ build_page_content
41
+ build_footer
42
+ end
43
+ end
44
+ end
45
+
46
+ def build_header
47
+ div :id => "header" do
48
+ render view_factory.header
49
+ end
50
+ end
51
+
52
+ def build_title_bar
53
+ div :id => "title_bar" do
54
+ build_breadcrumb
55
+ build_title_tag
56
+ build_action_items
57
+ end
58
+ end
59
+
60
+ def build_breadcrumb(separator = "/")
61
+ links = breadcrumb_links
62
+ return if links.empty?
63
+ span :class => "breadcrumb" do
64
+ links.each do |link|
65
+ text_node link
66
+ span(separator, :class => "breadcrumb_sep")
67
+ end
68
+ end
69
+ end
70
+
71
+ def build_title_tag
72
+ h2(title, :id => 'page_title')
73
+ end
74
+
75
+ def build_action_items
76
+ items = controller.class.action_items_for(params[:action])
77
+ insert_tag view_factory.action_items, items
78
+ end
79
+
80
+ def build_page_content
81
+ div :id => "active_admin_content", :class => (skip_sidebar? ? "without_sidebar" : "with_sidebar") do
82
+ build_flash_messages
83
+ build_main_content_wrapper
84
+ build_sidebar
85
+ end
86
+ end
87
+
88
+ def build_flash_messages
89
+ if flash.keys.any?
90
+ div :class => 'flashes' do
91
+ flash.each do |type, message|
92
+ div message, :class => "flash flash_#{type}"
93
+ end
94
+ end
95
+ end
96
+ end
97
+
98
+ def build_main_content_wrapper
99
+ div :id => "main_content_wrapper" do
100
+ div :id => "main_content" do
101
+ main_content
102
+ end
103
+ end
104
+ end
105
+
106
+ def main_content
107
+ I18n.t('active_admin.main_content', :model => self.class.name).html_safe
108
+ end
109
+
110
+ def title
111
+ self.class.name
112
+ end
113
+
114
+ # Set's the page title for the layout to render
115
+ def set_page_title
116
+ set_ivar_on_view "@page_title", title
117
+ end
118
+
119
+
120
+ # Returns the sidebar sections to render for the current action
121
+ def sidebar_sections_for_action
122
+ controller.class.sidebar_sections_for(params[:action])
123
+ end
124
+
125
+ # Renders the sidebar
126
+ def build_sidebar
127
+ div :id => "sidebar" do
128
+ sidebar_sections_for_action.collect do |section|
129
+ sidebar_section(section)
130
+ end
131
+ end
132
+ end
133
+
134
+ # Renders the content for the footer
135
+ def build_footer
136
+ div :id => "footer" do
137
+ para "Powered by #{link_to("Active Admin", "http://www.activeadmin.info")} #{ActiveAdmin::VERSION}".html_safe
138
+ end
139
+ end
140
+
141
+ end
142
+ end
143
+ end
144
+ end
@@ -0,0 +1,59 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ module Pages
4
+ class Dashboard < Base
5
+
6
+ def main_content
7
+ if assigns[:dashboard_sections] && assigns[:dashboard_sections].any?
8
+ render_sections(assigns[:dashboard_sections])
9
+ else
10
+ default_welcome_section
11
+ end
12
+ end
13
+
14
+ protected
15
+
16
+ # Dashboards don't have a sidebar
17
+ def build_sidebar; end
18
+
19
+ def title
20
+ "Dashboard"
21
+ end
22
+
23
+ def render_sections(sections)
24
+ table :class => "dashboard" do
25
+ sections.in_groups_of(3, false).each do |row|
26
+ tr do
27
+ row.each do |section|
28
+ td do
29
+ render_section(section)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+
37
+ # Renders each section using their renderer
38
+ def render_section(section)
39
+ insert_tag section_renderer(section), section
40
+ end
41
+
42
+ def section_renderer(section)
43
+ if section.options[:as]
44
+ view_factory["dashboard_section_as_#{section.options[:as]}"]
45
+ else
46
+ view_factory.dashboard_section
47
+ end
48
+ end
49
+
50
+ def default_welcome_section
51
+ para :id => "dashboard_default_message" do
52
+ I18n.t('active_admin.dashboard_welcome')
53
+ end
54
+ end
55
+
56
+ end
57
+ end
58
+ end
59
+ end
@@ -0,0 +1,27 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ module Pages
4
+ class Edit < Base
5
+
6
+ def title
7
+ I18n.t('active_admin.edit_model', :model => active_admin_config.resource_name)
8
+ end
9
+
10
+ def main_content
11
+ config = self.form_config.dup
12
+ config.delete(:block)
13
+ config.reverse_merge!({
14
+ :url => resource_path(resource)
15
+ })
16
+
17
+ if form_config[:partial]
18
+ render form_config[:partial]
19
+ else
20
+ active_admin_form_for resource, config, &form_config[:block]
21
+ end
22
+ end
23
+
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,66 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ module Pages
4
+
5
+ class Index < Base
6
+
7
+ def title
8
+ active_admin_config.plural_resource_name
9
+ end
10
+
11
+ def config
12
+ index_config || default_index_config
13
+ end
14
+
15
+
16
+ # Render's the index configuration that was set in the
17
+ # controller. Defaults to rendering the ActiveAdmin::Pages::Index::Table
18
+ def main_content
19
+ build_scopes
20
+ renderer_class = find_index_renderer_class(config[:as])
21
+
22
+ paginated_collection(collection, :entry_name => active_admin_config.resource_name) do
23
+ div :class => 'index_content' do
24
+ insert_tag(renderer_class, config, collection)
25
+ end
26
+ end
27
+ end
28
+
29
+ protected
30
+
31
+ def build_scopes
32
+ if active_admin_config.scopes.any?
33
+ scopes_renderer active_admin_config.scopes
34
+ end
35
+ end
36
+
37
+ # Creates a default configuration for the resource class. This is a table
38
+ # with each column displayed as well as all the default actions
39
+ def default_index_config
40
+ @default_index_config ||= ::ActiveAdmin::PageConfig.new(:as => :table) do |display|
41
+ id_column
42
+ resource_class.content_columns.each do |col|
43
+ column col.name.to_sym
44
+ end
45
+ default_actions
46
+ end
47
+ end
48
+
49
+ # Returns the actual class for renderering the main content on the index
50
+ # page. To set this, use the :as option in the page_config block.
51
+ def find_index_renderer_class(symbol_or_class)
52
+ case symbol_or_class
53
+ when Symbol
54
+ ::ActiveAdmin::Views.const_get("IndexAs" + symbol_or_class.to_s.camelcase)
55
+ when Class
56
+ symbol_or_class
57
+ else
58
+ raise ArgumentError, "'as' requires a class or a symbol"
59
+ end
60
+ end
61
+
62
+ end
63
+ end
64
+ end
65
+ end
66
+
@@ -0,0 +1,27 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ module Pages
4
+ class New < Base
5
+
6
+ def title
7
+ I18n.t('active_admin.new_model', :model => active_admin_config.resource_name)
8
+ end
9
+
10
+ def main_content
11
+ config = self.form_config.dup
12
+ config.delete(:block)
13
+ config.reverse_merge!({
14
+ :url => collection_path
15
+ })
16
+
17
+ if form_config[:partial]
18
+ render(form_config[:partial])
19
+ else
20
+ active_admin_form_for(resource, config, &form_config[:block])
21
+ end
22
+ end
23
+ end
24
+ end
25
+
26
+ end
27
+ end
@@ -0,0 +1,56 @@
1
+ module ActiveAdmin
2
+ module Views
3
+ module Pages
4
+ class Show < Base
5
+
6
+ def config
7
+ active_admin_config.page_configs[:show] || ::ActiveAdmin::PageConfig.new
8
+ end
9
+
10
+ def title
11
+ case config[:title]
12
+ when Symbol, Proc
13
+ call_method_or_proc_on(resource, config[:title])
14
+ when String
15
+ config[:title]
16
+ else
17
+ default_title
18
+ end
19
+ end
20
+
21
+ def main_content
22
+ if config.block
23
+ # Eval the show config from the controller
24
+ instance_exec resource, &config.block
25
+ else
26
+ default_main_content
27
+ end
28
+ end
29
+
30
+ def attributes_table(*args, &block)
31
+ panel(I18n.t('active_admin.details', :model => active_admin_config.resource_name)) do
32
+ attributes_table_for resource, *args, &block
33
+ end
34
+ end
35
+
36
+ protected
37
+
38
+ def default_title
39
+ "#{active_admin_config.resource_name} ##{resource.id}"
40
+ end
41
+
42
+ module DefaultMainContent
43
+ def default_main_content
44
+ attributes_table *default_attribute_table_rows
45
+ end
46
+
47
+ def default_attribute_table_rows
48
+ resource.class.columns.collect{|column| column.name.to_sym }
49
+ end
50
+ end
51
+
52
+ include DefaultMainContent
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,58 @@
1
+ module ActiveAdmin
2
+ module Views
3
+
4
+ # Renders out a horizontal list of tabs.
5
+ class TabsRenderer < Renderer
6
+
7
+ # Pass in an ActiveAdmin::Menu and it will display the first level
8
+ # of navigation as a horizontal list of tabs
9
+ def to_html(menu, options = {})
10
+ @options = default_options.merge(options)
11
+ render_menu(menu)
12
+ end
13
+
14
+ protected
15
+
16
+ def render_menu(menu)
17
+ content_tag :ul, :id => @options[:id] do
18
+ menu.items.collect do |item|
19
+ render_item(item)
20
+ end.join.html_safe
21
+ end
22
+ end
23
+
24
+ def render_item(item)
25
+ if !call_method_or_proc_on(self, item.display_if_block)
26
+ return
27
+ elsif (!item.url or item.url == '#') and item.children.any? and (item.children.detect {|child| call_method_or_proc_on(self, child.display_if_block)}).nil?
28
+ return
29
+ end
30
+
31
+ content_tag :li, :id => item.dom_id, :class => [("current" if current?(item)), ("has_nested" unless item.children.blank?)].compact.join(" ") do
32
+ unless item.children.blank?
33
+ link_to(item.name, item.url || "#") + render_nested_menu(item)
34
+ else
35
+ link_to item.name, item.url
36
+ end
37
+ end
38
+ end
39
+
40
+ def render_nested_menu(item)
41
+ content_tag :ul do
42
+ item.children.collect {|child| render_item(child)}.join.html_safe
43
+ end
44
+ end
45
+
46
+ # Returns true if the menu item name is @current_tab
47
+ def current?(menu_item)
48
+ @current_tab.split("/").include?(menu_item.name) unless @current_tab.blank?
49
+ end
50
+
51
+ def default_options
52
+ { :id => "tabs" }
53
+ end
54
+
55
+ end
56
+
57
+ end
58
+ end
@@ -0,0 +1 @@
1
+ render view_factory.dashboard_page
@@ -0,0 +1,8 @@
1
+ <p>Hello <%= @resource.email %>!</p>
2
+
3
+ <p>Someone has requested a link to change your password, and you can do this through the link below.</p>
4
+
5
+ <p><%= link_to 'Change my password', edit_password_url(@resource, :reset_password_token => @resource.reset_password_token) %></p>
6
+
7
+ <p>If you didn't request this, please ignore this email.</p>
8
+ <p>Your password won't change until you access the link above and create a new one.</p>
@@ -0,0 +1,7 @@
1
+ <p>Hello <%= @resource.email %>!</p>
2
+
3
+ <p>Your account has been locked due to an excessive amount of unsuccessful sign in attempts.</p>
4
+
5
+ <p>Click the link below to unlock your account:</p>
6
+
7
+ <p><%= link_to 'Unlock my account', unlock_url(@resource, :unlock_token => @resource.unlock_token) %></p>
@@ -0,0 +1,16 @@
1
+ <h2>Change your password</h2>
2
+
3
+ <%= form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :put }) do |f| %>
4
+ <%= devise_error_messages! %>
5
+ <%= f.hidden_field :reset_password_token %>
6
+
7
+ <p><%= f.label :password %><br />
8
+ <%= f.password_field :password %></p>
9
+
10
+ <p><%= f.label :password_confirmation %><br />
11
+ <%= f.password_field :password_confirmation %></p>
12
+
13
+ <p><%= f.submit "Change my password" %></p>
14
+ <% end %>
15
+
16
+ <%= render :partial => "devise/shared/links" %>
@@ -0,0 +1,14 @@
1
+ <div id="login">
2
+ <h2>Forgot your password?</h2>
3
+
4
+ <%= active_admin_form_for(resource, :as => resource_name, :url => password_path(resource_name), :html => { :method => :post }) do |f|
5
+ f.inputs do
6
+ f.input :email
7
+ end
8
+ f.buttons do
9
+ f.commit_button "Reset My Password"
10
+ end
11
+ end %>
12
+
13
+ <%= render :partial => "devise/shared/links" %>
14
+ </div>
@@ -0,0 +1,18 @@
1
+ <div id="login">
2
+ <h2><%= title "#{active_admin_application.site_title} Login" %></h2>
3
+
4
+ <% scope = Devise::Mapping.find_scope!(resource_name) %>
5
+ <%= active_admin_form_for(resource, :as => resource_name, :url => send(:"#{scope}_session_path"), :html => { :id => "session_new" }) do |f|
6
+ f.inputs do
7
+ Devise.authentication_keys.each { |key| f.input key }
8
+ f.input :password
9
+ f.input :remember_me, :as => :boolean, :if => false #devise_mapping.rememberable? }
10
+ end
11
+ f.buttons do
12
+ f.commit_button "Login"
13
+ end
14
+ end
15
+ %>
16
+
17
+ <%= render :partial => "devise/shared/links" %>
18
+ </div>
@@ -0,0 +1,20 @@
1
+ <%- if controller_name != 'sessions' %>
2
+ <% scope = Devise::Mapping.find_scope!(resource_name) %>
3
+ <%= link_to "Sign in", send(:"new_#{scope}_session_path") }")br />
4
+ <% end -%>
5
+
6
+ <%- if devise_mapping.registerable? && controller_name != 'registrations' %>
7
+ <%= link_to "Sign up", new_registration_path(resource_name) %><br />
8
+ <% end -%>
9
+
10
+ <%- if devise_mapping.recoverable? && controller_name != 'passwords' %>
11
+ <%= link_to "Forgot your password?", new_password_path(resource_name) %><br />
12
+ <% end -%>
13
+
14
+ <%- if devise_mapping.confirmable? && controller_name != 'confirmations' %>
15
+ <%= link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name) %><br />
16
+ <% end -%>
17
+
18
+ <%- if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' %>
19
+ <%= link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) %><br />
20
+ <% end -%>
@@ -0,0 +1,12 @@
1
+ <h2>Resend unlock instructions</h2>
2
+
3
+ <%= form_for(resource, :as => resource_name, :url => unlock_path(resource_name), :html => { :method => :post }) do |f| %>
4
+ <%= devise_error_messages! %>
5
+
6
+ <p><%= f.label :email %><br />
7
+ <%= f.text_field :email %></p>
8
+
9
+ <p><%= f.submit "Resend unlock instructions" %></p>
10
+ <% end %>
11
+
12
+ <%= render :partial => "devise/shared/links" %>
@@ -0,0 +1 @@
1
+ render renderer_for(:edit)
@@ -0,0 +1,20 @@
1
+ <%-
2
+ csv_lib = if RUBY_VERSION =~ /^1.8/
3
+ require 'fastercsv'
4
+ FasterCSV
5
+ else
6
+ CSV
7
+ end
8
+
9
+
10
+ csv_output = csv_lib.generate do |csv|
11
+ columns = active_admin_config.csv_builder.columns
12
+ csv << columns.map(&:name)
13
+ collection.each do |resource|
14
+ csv << columns.map do |column|
15
+ call_method_or_proc_on resource, column.data
16
+ end
17
+ end
18
+ end
19
+ %>
20
+ <%= csv_output.html_safe %>
@@ -0,0 +1 @@
1
+ render renderer_for(:index)
@@ -0,0 +1 @@
1
+ render renderer_for(:new)
@@ -0,0 +1 @@
1
+ render renderer_for(:show)