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.
- data/.document +5 -0
- data/.gitignore +32 -0
- data/.travis.yml +4 -0
- data/CHANGELOG.rdoc +76 -0
- data/Gemfile +26 -0
- data/LICENSE +25 -0
- data/README.rdoc +450 -0
- data/Rakefile +100 -0
- data/activeadmin.gemspec +28 -0
- data/cucumber.yml +2 -0
- data/features/comments/commenting.feature +99 -0
- data/features/comments/viewing_index.feature +19 -0
- data/features/dashboard.feature +26 -0
- data/features/edit_page.feature +77 -0
- data/features/first_boot.feature +16 -0
- data/features/global_navigation.feature +30 -0
- data/features/index/format_as_csv.feature +45 -0
- data/features/index/formats.feature +10 -0
- data/features/index/index_as_block.feature +15 -0
- data/features/index/index_as_blog.feature +50 -0
- data/features/index/index_as_grid.feature +45 -0
- data/features/index/index_as_table.feature +79 -0
- data/features/index/index_scopes.feature +52 -0
- data/features/index/pagination.feature +23 -0
- data/features/menu.feature +26 -0
- data/features/new_page.feature +75 -0
- data/features/registering_assets.feature +35 -0
- data/features/registering_resources.feature +33 -0
- data/features/show/default_content.feature +43 -0
- data/features/show/page_title.feature +33 -0
- data/features/sidebar_sections.feature +127 -0
- data/features/specifying_actions.feature +60 -0
- data/features/step_definitions/action_item_steps.rb +7 -0
- data/features/step_definitions/additional_web_steps.rb +67 -0
- data/features/step_definitions/asset_steps.rb +7 -0
- data/features/step_definitions/attribute_steps.rb +15 -0
- data/features/step_definitions/comment_steps.rb +8 -0
- data/features/step_definitions/configuration_steps.rb +31 -0
- data/features/step_definitions/dashboard_steps.rb +11 -0
- data/features/step_definitions/factory_steps.rb +28 -0
- data/features/step_definitions/flash_steps.rb +3 -0
- data/features/step_definitions/format_steps.rb +34 -0
- data/features/step_definitions/index_scope_steps.rb +20 -0
- data/features/step_definitions/menu_steps.rb +7 -0
- data/features/step_definitions/pagination_steps.rb +8 -0
- data/features/step_definitions/sidebar_steps.rb +11 -0
- data/features/step_definitions/tab_steps.rb +3 -0
- data/features/step_definitions/user_steps.rb +20 -0
- data/features/step_definitions/web_steps.rb +219 -0
- data/features/sti_resource.feature +49 -0
- data/features/support/env.rb +92 -0
- data/features/support/paths.rb +48 -0
- data/features/users/logging_in.feature +34 -0
- data/features/users/logging_out.feature +13 -0
- data/lib/active_admin/abstract_view_factory.rb +95 -0
- data/lib/active_admin/action_items.rb +37 -0
- data/lib/active_admin/application.rb +204 -0
- data/lib/active_admin/arbre/attributes.rb +20 -0
- data/lib/active_admin/arbre/class_list.rb +28 -0
- data/lib/active_admin/arbre/collection.rb +27 -0
- data/lib/active_admin/arbre/context.rb +8 -0
- data/lib/active_admin/arbre/core_extensions.rb +5 -0
- data/lib/active_admin/arbre/document.rb +42 -0
- data/lib/active_admin/arbre/element.rb +151 -0
- data/lib/active_admin/arbre/html.rb +84 -0
- data/lib/active_admin/arbre/html5_elements.rb +47 -0
- data/lib/active_admin/arbre/tag.rb +137 -0
- data/lib/active_admin/arbre/text_node.rb +35 -0
- data/lib/active_admin/arbre.rb +23 -0
- data/lib/active_admin/asset_registration.rb +34 -0
- data/lib/active_admin/callbacks.rb +87 -0
- data/lib/active_admin/comments/comment.rb +21 -0
- data/lib/active_admin/comments/configuration.rb +18 -0
- data/lib/active_admin/comments/namespace_helper.rb +14 -0
- data/lib/active_admin/comments/resource_helper.rb +17 -0
- data/lib/active_admin/comments/show_page_helper.rb +23 -0
- data/lib/active_admin/comments/views/active_admin_comment.rb +0 -0
- data/lib/active_admin/comments/views/active_admin_comments.rb +82 -0
- data/lib/active_admin/comments/views.rb +3 -0
- data/lib/active_admin/comments.rb +88 -0
- data/lib/active_admin/component.rb +22 -0
- data/lib/active_admin/controller_action.rb +12 -0
- data/lib/active_admin/csv_builder.rb +45 -0
- data/lib/active_admin/dashboards/dashboard_controller.rb +47 -0
- data/lib/active_admin/dashboards/section.rb +34 -0
- data/lib/active_admin/dashboards.rb +48 -0
- data/lib/active_admin/devise.rb +43 -0
- data/lib/active_admin/dsl.rb +215 -0
- data/lib/active_admin/event.rb +31 -0
- data/lib/active_admin/form_builder.rb +109 -0
- data/lib/active_admin/helpers/optional_display.rb +34 -0
- data/lib/active_admin/iconic/icons.rb +142 -0
- data/lib/active_admin/iconic.rb +51 -0
- data/lib/active_admin/locales/da.yml +26 -0
- data/lib/active_admin/locales/en.yml +34 -0
- data/lib/active_admin/locales/es.yml +34 -0
- data/lib/active_admin/locales/pt.yml +34 -0
- data/lib/active_admin/menu.rb +42 -0
- data/lib/active_admin/menu_item.rb +73 -0
- data/lib/active_admin/namespace.rb +198 -0
- data/lib/active_admin/page_config.rb +15 -0
- data/lib/active_admin/renderer.rb +87 -0
- data/lib/active_admin/resource/belongs_to.rb +31 -0
- data/lib/active_admin/resource.rb +229 -0
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/actions.rb +79 -0
- data/lib/active_admin/resource_controller/callbacks.rb +47 -0
- data/lib/active_admin/resource_controller/collection.rb +144 -0
- data/lib/active_admin/resource_controller/filters.rb +58 -0
- data/lib/active_admin/resource_controller/form.rb +42 -0
- data/lib/active_admin/resource_controller/menu.rb +29 -0
- data/lib/active_admin/resource_controller/page_configurations.rb +53 -0
- data/lib/active_admin/resource_controller/scoping.rb +36 -0
- data/lib/active_admin/resource_controller/sidebars.rb +38 -0
- data/lib/active_admin/resource_controller.rb +119 -0
- data/lib/active_admin/router.rb +85 -0
- data/lib/active_admin/scope.rb +17 -0
- data/lib/active_admin/sidebar.rb +43 -0
- data/lib/active_admin/stylesheets/active_admin/_comments.scss +40 -0
- data/lib/active_admin/stylesheets/active_admin/_flash_messages.scss +13 -0
- data/lib/active_admin/stylesheets/active_admin/_forms.scss +168 -0
- data/lib/active_admin/stylesheets/active_admin/_header.scss +108 -0
- data/lib/active_admin/stylesheets/active_admin/_typography.scss +100 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_all.scss +8 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_buttons.scss +27 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_gradients.scss +21 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_icons.scss +20 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_reset.scss +165 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_rounded.scss +43 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_sections.scss +27 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_shadows.scss +21 -0
- data/lib/active_admin/stylesheets/active_admin/mixins/_variables.scss +12 -0
- data/lib/active_admin/stylesheets/active_admin.scss +429 -0
- data/lib/active_admin/version.rb +3 -0
- data/lib/active_admin/view_factory.rb +21 -0
- data/lib/active_admin/view_helpers/active_admin_application_helper.rb +12 -0
- data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +42 -0
- data/lib/active_admin/view_helpers/breadcrumb_helper.rb +29 -0
- data/lib/active_admin/view_helpers/display_helper.rb +38 -0
- data/lib/active_admin/view_helpers/filter_form_helper.rb +185 -0
- data/lib/active_admin/view_helpers/form_helper.rb +12 -0
- data/lib/active_admin/view_helpers/icon_helper.rb +12 -0
- data/lib/active_admin/view_helpers/method_or_proc_helper.rb +26 -0
- data/lib/active_admin/view_helpers/renderer_helper.rb +29 -0
- data/lib/active_admin/view_helpers/sidebar_helper.rb +15 -0
- data/lib/active_admin/view_helpers/table_helper.rb +12 -0
- data/lib/active_admin/view_helpers/title_helper.rb +11 -0
- data/lib/active_admin/view_helpers/view_factory_helper.rb +11 -0
- data/lib/active_admin/view_helpers.rb +23 -0
- data/lib/active_admin/views/action_items.rb +17 -0
- data/lib/active_admin/views/components/attributes_table.rb +66 -0
- data/lib/active_admin/views/components/columns.rb +47 -0
- data/lib/active_admin/views/components/paginated_collection.rb +92 -0
- data/lib/active_admin/views/components/panel.rb +26 -0
- data/lib/active_admin/views/components/scopes.rb +70 -0
- data/lib/active_admin/views/components/sidebar_section.rb +30 -0
- data/lib/active_admin/views/components/status_tag.rb +55 -0
- data/lib/active_admin/views/components/table_for.rb +193 -0
- data/lib/active_admin/views/dashboard_section_renderer.rb +19 -0
- data/lib/active_admin/views/header_renderer.rb +37 -0
- data/lib/active_admin/views/index_as_block.rb +24 -0
- data/lib/active_admin/views/index_as_blog.rb +89 -0
- data/lib/active_admin/views/index_as_grid.rb +49 -0
- data/lib/active_admin/views/index_as_table.rb +75 -0
- data/lib/active_admin/views/pages/base.rb +144 -0
- data/lib/active_admin/views/pages/dashboard.rb +59 -0
- data/lib/active_admin/views/pages/edit.rb +27 -0
- data/lib/active_admin/views/pages/index.rb +66 -0
- data/lib/active_admin/views/pages/new.rb +27 -0
- data/lib/active_admin/views/pages/show.rb +56 -0
- data/lib/active_admin/views/tabs_renderer.rb +58 -0
- data/lib/active_admin/views/templates/active_admin/dashboard/index.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/lib/active_admin/views/templates/active_admin/devise/mailer/unlock_instructions.html.erb +7 -0
- data/lib/active_admin/views/templates/active_admin/devise/passwords/edit.html.erb +16 -0
- data/lib/active_admin/views/templates/active_admin/devise/passwords/new.html.erb +14 -0
- data/lib/active_admin/views/templates/active_admin/devise/sessions/new.html.erb +18 -0
- data/lib/active_admin/views/templates/active_admin/devise/shared/_links.erb +20 -0
- data/lib/active_admin/views/templates/active_admin/devise/unlocks/new.html.erb +12 -0
- data/lib/active_admin/views/templates/active_admin/resource/edit.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin/resource/index.csv.erb +20 -0
- data/lib/active_admin/views/templates/active_admin/resource/index.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin/resource/new.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin/resource/show.html.arb +1 -0
- data/lib/active_admin/views/templates/layouts/active_admin.html.erb +39 -0
- data/lib/active_admin/views/templates/layouts/active_admin_logged_out.html.erb +31 -0
- data/lib/active_admin/views.rb +8 -0
- data/lib/active_admin.rb +71 -0
- data/lib/activeadmin.rb +1 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +49 -0
- data/lib/generators/active_admin/install/install_generator.rb +46 -0
- data/lib/generators/active_admin/install/templates/active_admin.js +51 -0
- data/lib/generators/active_admin/install/templates/active_admin.rb.erb +78 -0
- data/lib/generators/active_admin/install/templates/active_admin_vendor.js +382 -0
- data/lib/generators/active_admin/install/templates/dashboards.rb +38 -0
- data/lib/generators/active_admin/install/templates/images/admin_notes_icon.png +0 -0
- data/lib/generators/active_admin/install/templates/images/loading.gif +0 -0
- data/lib/generators/active_admin/install/templates/images/nested_menu_arrow.gif +0 -0
- data/lib/generators/active_admin/install/templates/images/nested_menu_arrow_dark.gif +0 -0
- data/lib/generators/active_admin/install/templates/images/orderable.png +0 -0
- data/lib/generators/active_admin/install/templates/migrations/1_create_admin_notes.rb +16 -0
- data/lib/generators/active_admin/install/templates/migrations/2_move_admin_notes_to_comments.rb +25 -0
- data/lib/generators/active_admin/resource/resource_generator.rb +16 -0
- data/lib/generators/active_admin/resource/templates/admin.rb +3 -0
- data/spec/integration/belongs_to_spec.rb +42 -0
- data/spec/spec_helper.rb +156 -0
- data/spec/support/integration_example_group.rb +33 -0
- data/spec/support/rails_template.rb +32 -0
- data/spec/support/rails_template_with_data.rb +32 -0
- data/spec/support/templates/cucumber.rb +24 -0
- data/spec/unit/abstract_view_factory_spec.rb +79 -0
- data/spec/unit/action_builder_spec.rb +88 -0
- data/spec/unit/action_items_spec.rb +27 -0
- data/spec/unit/application_spec.rb +67 -0
- data/spec/unit/arbre/html/element_finder_methods_spec.rb +54 -0
- data/spec/unit/arbre/html/element_spec.rb +224 -0
- data/spec/unit/arbre/html/tag_attributes_spec.rb +61 -0
- data/spec/unit/arbre/html/tag_spec.rb +63 -0
- data/spec/unit/arbre/html_spec.rb +210 -0
- data/spec/unit/asset_registration_spec.rb +37 -0
- data/spec/unit/auto_link_spec.rb +39 -0
- data/spec/unit/belongs_to_spec.rb +45 -0
- data/spec/unit/breadcrumbs_spec.rb +110 -0
- data/spec/unit/comments_spec.rb +57 -0
- data/spec/unit/component_spec.rb +18 -0
- data/spec/unit/components/attributes_table_spec.rb +100 -0
- data/spec/unit/components/columns_spec.rb +75 -0
- data/spec/unit/components/panel_spec.rb +31 -0
- data/spec/unit/components/sidebar_section_spec.rb +37 -0
- data/spec/unit/components/status_tag_spec.rb +81 -0
- data/spec/unit/components/table_for_spec.rb +130 -0
- data/spec/unit/controller_filters_spec.rb +27 -0
- data/spec/unit/csv_builder_spec.rb +83 -0
- data/spec/unit/dashboard_controller_spec.rb +26 -0
- data/spec/unit/dashboard_section_spec.rb +56 -0
- data/spec/unit/dashboards_spec.rb +59 -0
- data/spec/unit/display_name_spec.rb +29 -0
- data/spec/unit/event_spec.rb +41 -0
- data/spec/unit/filter_form_builder_spec.rb +179 -0
- data/spec/unit/form_builder_spec.rb +238 -0
- data/spec/unit/menu_item_spec.rb +143 -0
- data/spec/unit/menu_spec.rb +53 -0
- data/spec/unit/namespace_spec.rb +203 -0
- data/spec/unit/pretty_format_spec.rb +35 -0
- data/spec/unit/registration_spec.rb +76 -0
- data/spec/unit/renderer_spec.rb +108 -0
- data/spec/unit/resource_controller/collection_spec.rb +34 -0
- data/spec/unit/resource_controller_spec.rb +147 -0
- data/spec/unit/resource_spec.rb +290 -0
- data/spec/unit/routing_spec.rb +88 -0
- data/spec/unit/scope_spec.rb +31 -0
- data/spec/unit/tabs_renderer_spec.rb +85 -0
- data/spec/unit/view_factory_spec.rb +16 -0
- 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)
|