activeadmin 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of activeadmin might be problematic. Click here for more details.
- data/CHANGELOG.rdoc +15 -1
- data/Gemfile +41 -11
- data/LICENSE +5 -0
- data/README.rdoc +202 -87
- data/Rakefile +51 -15
- data/activeadmin.gemspec +310 -131
- data/cucumber.yml +1 -0
- data/features/comments/commenting.feature +81 -0
- data/features/comments/viewing_index.feature +19 -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/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/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 +128 -0
- data/features/specifying_actions.feature +16 -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/factory_steps.rb +28 -0
- data/features/step_definitions/flash_steps.rb +3 -0
- data/features/step_definitions/format_steps.rb +7 -0
- data/features/step_definitions/index_scope_steps.rb +20 -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/support/env.rb +88 -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.rb +155 -79
- data/lib/active_admin/abstract_view_factory.rb +95 -0
- data/lib/active_admin/action_items.rb +4 -15
- data/lib/active_admin/arbre.rb +23 -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 +129 -0
- data/lib/active_admin/arbre/text_node.rb +35 -0
- data/lib/active_admin/callbacks.rb +87 -0
- data/lib/active_admin/comments.rb +73 -0
- data/lib/active_admin/comments/comment.rb +15 -0
- data/lib/active_admin/comments/configuration.rb +16 -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.rb +3 -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/component.rb +22 -0
- data/lib/active_admin/controller_action.rb +12 -0
- data/lib/active_admin/dashboards.rb +0 -2
- data/lib/active_admin/dashboards/dashboard_controller.rb +10 -5
- data/lib/active_admin/dashboards/section.rb +5 -14
- data/lib/active_admin/devise.rb +43 -0
- data/lib/active_admin/dsl.rb +202 -0
- data/lib/active_admin/event.rb +31 -0
- data/lib/active_admin/form_builder.rb +68 -50
- data/lib/active_admin/iconic.rb +51 -0
- data/lib/active_admin/iconic/icons.rb +142 -0
- data/lib/active_admin/namespace.rb +102 -16
- data/lib/active_admin/renderer.rb +18 -3
- data/lib/active_admin/resource.rb +110 -9
- data/lib/active_admin/resource/belongs_to.rb +31 -0
- data/lib/active_admin/resource_controller.rb +45 -260
- data/lib/active_admin/resource_controller/action_builder.rb +21 -0
- data/lib/active_admin/resource_controller/actions.rb +53 -0
- data/lib/active_admin/resource_controller/callbacks.rb +47 -0
- data/lib/active_admin/resource_controller/collection.rb +142 -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/scope.rb +17 -0
- data/lib/active_admin/sidebar.rb +8 -47
- data/lib/active_admin/stylesheets/active_admin.scss +418 -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/version.rb +1 -1
- data/lib/active_admin/view_factory.rb +21 -0
- data/lib/active_admin/view_helpers.rb +17 -100
- data/lib/active_admin/view_helpers/assigns_with_indifferent_access_helper.rb +7 -0
- data/lib/active_admin/view_helpers/auto_link_helper.rb +41 -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 +174 -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/status_tag_helper.rb +13 -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/views.rb +8 -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 +49 -0
- data/lib/active_admin/views/components/paginated_collection.rb +74 -0
- data/lib/active_admin/views/components/panel.rb +26 -0
- data/lib/active_admin/views/components/scopes.rb +64 -0
- data/lib/active_admin/views/components/sidebar_section.rb +30 -0
- data/lib/active_admin/views/components/table_for.rb +174 -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 +73 -0
- data/lib/active_admin/views/pages/base.rb +138 -0
- data/lib/active_admin/views/pages/dashboard.rb +61 -0
- data/lib/active_admin/views/pages/edit.rb +27 -0
- data/lib/active_admin/views/pages/index.rb +64 -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 +52 -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_dashboard/index.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin_default/edit.html.arb +1 -0
- data/lib/active_admin/views/{active_admin_default → templates/active_admin_default}/index.csv.erb +0 -0
- data/lib/active_admin/views/templates/active_admin_default/index.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin_default/new.html.arb +1 -0
- data/lib/active_admin/views/templates/active_admin_default/show.html.arb +1 -0
- data/lib/active_admin/views/{layouts → templates/layouts}/active_admin.html.erb +3 -4
- data/lib/active_admin/views/templates/layouts/active_admin_logged_out.html.erb +31 -0
- data/lib/generators/active_admin/devise/devise_generator.rb +45 -0
- data/lib/generators/active_admin/install/install_generator.rb +18 -3
- data/lib/generators/active_admin/install/templates/active_admin.js +41 -0
- data/lib/generators/active_admin/install/templates/{active_admin.rb → active_admin.rb.erb} +33 -3
- data/lib/generators/active_admin/install/templates/active_admin_vendor.js +1 -1
- data/lib/generators/active_admin/install/templates/dashboards.rb +3 -4
- 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/spec/integration/belongs_to_spec.rb +42 -0
- data/spec/integration/index_as_table_spec.rb +0 -119
- data/spec/integration/layout_spec.rb +3 -37
- data/spec/spec_helper.rb +89 -50
- data/spec/support/integration_example_group.rb +37 -0
- data/spec/support/rails_template.rb +21 -9
- data/spec/support/rails_template_with_data.rb +32 -0
- data/spec/support/templates/cucumber.rb +28 -0
- data/spec/unit/abstract_view_factory_spec.rb +79 -0
- data/spec/unit/action_builder_spec.rb +19 -7
- data/spec/unit/action_items_spec.rb +16 -30
- data/spec/unit/active_admin_spec.rb +10 -22
- 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 +185 -0
- data/spec/unit/auto_link_spec.rb +38 -0
- data/spec/unit/belongs_to_spec.rb +44 -0
- data/spec/unit/breadcrumbs_spec.rb +110 -0
- data/spec/unit/comments_spec.rb +53 -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/table_for_spec.rb +130 -0
- data/spec/unit/dashboard_controller_spec.rb +26 -0
- data/spec/unit/dashboard_section_spec.rb +10 -17
- 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 +99 -77
- data/spec/unit/form_builder_spec.rb +69 -69
- data/spec/unit/namespace_spec.rb +61 -3
- data/spec/unit/pretty_format_spec.rb +35 -0
- data/spec/unit/registration_spec.rb +40 -1
- data/spec/unit/renderer_spec.rb +8 -0
- data/spec/unit/resource_controller_spec.rb +105 -6
- data/spec/unit/resource_spec.rb +78 -11
- data/spec/unit/routing_spec.rb +82 -6
- data/spec/unit/scope_spec.rb +31 -0
- data/spec/unit/tabs_renderer_spec.rb +24 -2
- data/spec/unit/view_factory_spec.rb +16 -0
- metadata +268 -82
- data/.gitignore +0 -25
- data/active_admin.gemspec +0 -22
- data/lib/active_admin/action_builder.rb +0 -60
- data/lib/active_admin/breadcrumbs.rb +0 -26
- data/lib/active_admin/dashboards/renderer.rb +0 -45
- data/lib/active_admin/dashboards/section_renderer.rb +0 -28
- data/lib/active_admin/filters.rb +0 -189
- data/lib/active_admin/pages.rb +0 -11
- data/lib/active_admin/pages/base.rb +0 -92
- data/lib/active_admin/pages/edit.rb +0 -21
- data/lib/active_admin/pages/index.rb +0 -58
- data/lib/active_admin/pages/index/blog.rb +0 -65
- data/lib/active_admin/pages/index/table.rb +0 -48
- data/lib/active_admin/pages/index/thumbnails.rb +0 -40
- data/lib/active_admin/pages/new.rb +0 -21
- data/lib/active_admin/pages/show.rb +0 -54
- data/lib/active_admin/table_builder.rb +0 -162
- data/lib/active_admin/tabs_renderer.rb +0 -39
- data/lib/active_admin/views/active_admin_dashboard/index.html.erb +0 -1
- data/lib/active_admin/views/active_admin_default/edit.html.erb +0 -1
- data/lib/active_admin/views/active_admin_default/index.html.erb +0 -1
- data/lib/active_admin/views/active_admin_default/new.html.erb +0 -1
- data/lib/active_admin/views/active_admin_default/show.html.erb +0 -1
- data/lib/generators/active_admin/install/templates/active_admin.css +0 -325
- data/lib/generators/active_admin/install/templates/images/orderable.gif +0 -0
- data/spec/integration/index_as_blog_spec.rb +0 -65
- data/spec/integration/index_as_thumbnails_spec.rb +0 -43
- data/spec/integration/new_view_spec.rb +0 -52
- data/spec/integration/show_view_spec.rb +0 -91
- data/spec/unit/sidebar_spec.rb +0 -96
- data/spec/unit/table_builder_spec.rb +0 -162
@@ -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
|
+
attr.to_s.titleize
|
39
|
+
end
|
40
|
+
|
41
|
+
def empty_value
|
42
|
+
span "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,49 @@
|
|
1
|
+
module ActiveAdmin
|
2
|
+
module Views
|
3
|
+
|
4
|
+
class Columns < ActiveAdmin::Component
|
5
|
+
builder_method :columns
|
6
|
+
|
7
|
+
def column(*args, &block)
|
8
|
+
insert_tag Column, *args, &block
|
9
|
+
end
|
10
|
+
|
11
|
+
# Override add child to set widths
|
12
|
+
def add_child(*)
|
13
|
+
super
|
14
|
+
calculate_columns!
|
15
|
+
end
|
16
|
+
|
17
|
+
protected
|
18
|
+
|
19
|
+
def margin_size
|
20
|
+
2
|
21
|
+
end
|
22
|
+
|
23
|
+
def calculate_columns!
|
24
|
+
# Calculate our columns sizes and margins
|
25
|
+
count = children.size
|
26
|
+
margins_width = margin_size * (count - 1)
|
27
|
+
column_width = (100.00 - margins_width) / count
|
28
|
+
|
29
|
+
# Convert to an integer if its not a float
|
30
|
+
column_width = column_width.to_i == column_width ? column_width.to_i : column_width
|
31
|
+
|
32
|
+
children.each_with_index do |col, i|
|
33
|
+
col.set_attribute :style, "width: #{column_width}%;"
|
34
|
+
col.attr(:style) << " margin-right: #{margin_size}%;" unless i == (count - 1)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def to_html
|
39
|
+
html = super
|
40
|
+
p html
|
41
|
+
html.to_s + "<div style=\"clear:both;\"></div>".html_safe
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
|
46
|
+
class Column < ActiveAdmin::Component
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
module ActiveAdmin
|
2
|
+
module Views
|
3
|
+
|
4
|
+
# Wraps the content with pagination and available formats.
|
5
|
+
#
|
6
|
+
# *Example:*
|
7
|
+
#
|
8
|
+
# paginated_collection collection, :entry_name => "Post" do
|
9
|
+
# div do
|
10
|
+
# h2 "Inside the
|
11
|
+
# end
|
12
|
+
# end
|
13
|
+
#
|
14
|
+
# This will create a div with a sentence describing the number of
|
15
|
+
# posts in one of the following formats:
|
16
|
+
#
|
17
|
+
# * "No Posts found"
|
18
|
+
# * "Displaying all 10 Posts"
|
19
|
+
# * "Displaying Posts 1 - 30 of 31 in total"
|
20
|
+
#
|
21
|
+
# It will also generate pagination links.
|
22
|
+
#
|
23
|
+
class PaginatedCollection < ActiveAdmin::Component
|
24
|
+
builder_method :paginated_collection
|
25
|
+
|
26
|
+
|
27
|
+
# Builds a new paginated collection component
|
28
|
+
#
|
29
|
+
# @param [Array] collection A "paginated" collection from will_paginate
|
30
|
+
# @param [Hash] options These options will be passed on to the page_entries_info
|
31
|
+
# method supplied in will_paginate.
|
32
|
+
# Useful keys:
|
33
|
+
# :entry_name - The name to dislpay for this resource collection
|
34
|
+
def build(collection, options = {})
|
35
|
+
@collection = collection
|
36
|
+
div(page_entries_info(@collection, options), :class => "pagination_information")
|
37
|
+
@contents = div(:class => "paginated_collection_contents")
|
38
|
+
build_pagination_with_formats
|
39
|
+
@built = true
|
40
|
+
end
|
41
|
+
|
42
|
+
# Override add_child to insert all children into the @contents div
|
43
|
+
def add_child(*args, &block)
|
44
|
+
if @built
|
45
|
+
@contents.add_child(*args, &block)
|
46
|
+
else
|
47
|
+
super
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
protected
|
52
|
+
|
53
|
+
def build_pagination_with_formats
|
54
|
+
div :id => "index_footer" do
|
55
|
+
build_download_format_links
|
56
|
+
build_pagination
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def build_pagination
|
61
|
+
text_node will_paginate(collection, :previous_label => "Previous", :next_label => "Next")
|
62
|
+
end
|
63
|
+
|
64
|
+
# TODO: Refactor to new HTML DSL
|
65
|
+
def build_download_format_links(formats = [:csv, :xml, :json])
|
66
|
+
links = formats.collect do |format|
|
67
|
+
link_to format.to_s.upcase, { :format => format}.merge(request.query_parameters.except(:commit, :format))
|
68
|
+
end
|
69
|
+
text_node ["Download:", links].flatten.join(" ").html_safe
|
70
|
+
end
|
71
|
+
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
module ActiveAdmin
|
2
|
+
module Views
|
3
|
+
|
4
|
+
class Panel < ActiveAdmin::Component
|
5
|
+
builder_method :panel
|
6
|
+
|
7
|
+
def build(title, attributes = {})
|
8
|
+
icon_name = attributes.delete(:icon)
|
9
|
+
icn = icon_name ? icon(icon_name) : ""
|
10
|
+
super(attributes)
|
11
|
+
add_class "panel"
|
12
|
+
@title = h3(icn + title.to_s)
|
13
|
+
@contents = div(:class => "panel_contents")
|
14
|
+
end
|
15
|
+
|
16
|
+
def add_child(child)
|
17
|
+
if @contents
|
18
|
+
@contents << child
|
19
|
+
else
|
20
|
+
super
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module ActiveAdmin
|
2
|
+
module Views
|
3
|
+
|
4
|
+
# Renders a collection of ActiveAdmin::Scope objects as a
|
5
|
+
# simple list with a seperator
|
6
|
+
class Scopes < ActiveAdmin::Component
|
7
|
+
builder_method :scopes_renderer
|
8
|
+
|
9
|
+
def build(scopes)
|
10
|
+
scopes.each do |scope|
|
11
|
+
build_scope(scope)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
16
|
+
|
17
|
+
def build_scope(scope)
|
18
|
+
span :class => classes_for_scope(scope) do
|
19
|
+
if current_scope?(scope)
|
20
|
+
em(scope.name)
|
21
|
+
else
|
22
|
+
a(scope.name, :href => url_for(params.merge(:scope => scope.id, :page => 1)))
|
23
|
+
end
|
24
|
+
text_node(" ")
|
25
|
+
scope_count(scope)
|
26
|
+
text_node(" ")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def classes_for_scope(scope)
|
31
|
+
classes = ["scope", scope.id]
|
32
|
+
classes << "selected" if current_scope?(scope)
|
33
|
+
classes.join(" ")
|
34
|
+
end
|
35
|
+
|
36
|
+
def current_scope?(scope)
|
37
|
+
if params[:scope]
|
38
|
+
params[:scope] == scope.id
|
39
|
+
else
|
40
|
+
active_admin_config.default_scope == scope
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def scope_count(scope)
|
45
|
+
span :class => 'count' do
|
46
|
+
"(" + get_scope_count(scope).to_s + ")"
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
def get_scope_count(scope)
|
51
|
+
if scope.scope_method
|
52
|
+
scoping_class.send(scope.scope_method).count
|
53
|
+
else
|
54
|
+
instance_exec(scoping_class, &scope.scope_block).count
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def scoping_class
|
59
|
+
assigns["before_scope_collection"] || active_admin_config.resource
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module ActiveAdmin
|
2
|
+
module Views
|
3
|
+
|
4
|
+
class SidebarSection < Panel
|
5
|
+
builder_method :sidebar_section
|
6
|
+
|
7
|
+
# Takes a ActiveAdmin::Sidebar::Section instance
|
8
|
+
def build(section)
|
9
|
+
@section = section
|
10
|
+
super(@section.title, :icon => @section.icon)
|
11
|
+
self.id = @section.id
|
12
|
+
build_sidebar_content
|
13
|
+
end
|
14
|
+
|
15
|
+
protected
|
16
|
+
|
17
|
+
def build_sidebar_content
|
18
|
+
if @section.block
|
19
|
+
rvalue = instance_eval(&@section.block)
|
20
|
+
self << rvalue if rvalue.is_a?(String)
|
21
|
+
else
|
22
|
+
self << capture do
|
23
|
+
render @section.partial_name
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,174 @@
|
|
1
|
+
module ActiveAdmin
|
2
|
+
module Views
|
3
|
+
class TableFor < Arbre::HTML::Table
|
4
|
+
builder_method :table_for
|
5
|
+
|
6
|
+
def tag_name
|
7
|
+
'table'
|
8
|
+
end
|
9
|
+
|
10
|
+
def build(collection, options = {})
|
11
|
+
@sortable = options.delete(:sortable)
|
12
|
+
@collection = collection
|
13
|
+
@columns = []
|
14
|
+
build_table
|
15
|
+
super(options)
|
16
|
+
end
|
17
|
+
|
18
|
+
def column(*args, &block)
|
19
|
+
col = Column.new(*args, &block)
|
20
|
+
@columns << col
|
21
|
+
|
22
|
+
# Build our header item
|
23
|
+
within @header_row do
|
24
|
+
build_table_header(col)
|
25
|
+
end
|
26
|
+
|
27
|
+
# Add a table cell for each item
|
28
|
+
@collection.each_with_index do |item, i|
|
29
|
+
within @tbody.children[i] do
|
30
|
+
build_table_cell(col, item)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
def sortable?
|
36
|
+
@sortable
|
37
|
+
end
|
38
|
+
|
39
|
+
# Returns the columns to display based on the conditional block
|
40
|
+
def visible_columns
|
41
|
+
@visible_columns ||= @columns.select{|col| col.display_column? }
|
42
|
+
end
|
43
|
+
|
44
|
+
protected
|
45
|
+
|
46
|
+
def build_table
|
47
|
+
build_table_head
|
48
|
+
build_table_body
|
49
|
+
end
|
50
|
+
|
51
|
+
def build_table_head
|
52
|
+
@thead = thead do
|
53
|
+
@header_row = tr
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def build_table_header(col)
|
58
|
+
if sortable? && col.sortable?
|
59
|
+
build_sortable_header_for(col.title, col.sort_key)
|
60
|
+
else
|
61
|
+
th(col.title)
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
def build_sortable_header_for(title, sort_key)
|
66
|
+
classes = Arbre::HTML::ClassList.new(["sortable"])
|
67
|
+
if current_sort[0] == sort_key
|
68
|
+
classes << "sorted-#{current_sort[1]}"
|
69
|
+
end
|
70
|
+
|
71
|
+
th :class => classes do
|
72
|
+
link_to(title, request.query_parameters.merge(:order => "#{sort_key}_#{order_for_sort_key(sort_key)}").except(:page))
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
76
|
+
def build_table_body
|
77
|
+
@tbody = tbody do
|
78
|
+
# Build enough rows for our collection
|
79
|
+
@collection.each{|_| tr(:class => cycle('odd', 'event')) }
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
def build_table_cell(col, item)
|
84
|
+
td do
|
85
|
+
rvalue = call_method_or_proc_on(item, col.data, :exec => false)
|
86
|
+
if col.data.is_a?(Symbol)
|
87
|
+
rvalue = pretty_format(rvalue)
|
88
|
+
end
|
89
|
+
rvalue
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
# Returns an array for the current sort order
|
94
|
+
# current_sort[0] #=> sort_key
|
95
|
+
# current_sort[1] #=> asc | desc
|
96
|
+
def current_sort
|
97
|
+
@current_sort ||= if params[:order] && params[:order] =~ /^([\w\_\.]+)_(desc|asc)$/
|
98
|
+
[$1,$2]
|
99
|
+
else
|
100
|
+
[]
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
# Returns the order to use for a given sort key
|
105
|
+
#
|
106
|
+
# Default is to use 'desc'. If the current sort key is
|
107
|
+
# 'desc' it will return 'asc'
|
108
|
+
def order_for_sort_key(sort_key)
|
109
|
+
current_key, current_order = current_sort
|
110
|
+
return 'desc' unless current_key == sort_key
|
111
|
+
current_order == 'desc' ? 'asc' : 'desc'
|
112
|
+
end
|
113
|
+
|
114
|
+
class Column
|
115
|
+
|
116
|
+
attr_accessor :title, :data
|
117
|
+
|
118
|
+
def initialize(*args, &block)
|
119
|
+
@options = default_options.merge(args.last.is_a?(::Hash) ? args.pop : {})
|
120
|
+
@title = pretty_title args[0]
|
121
|
+
@data = args[1] || args[0]
|
122
|
+
@data = block if block
|
123
|
+
end
|
124
|
+
|
125
|
+
def sortable?
|
126
|
+
if @data.is_a?(Proc)
|
127
|
+
[String, Symbol].include?(@options[:sortable].class)
|
128
|
+
else
|
129
|
+
@options[:sortable]
|
130
|
+
end
|
131
|
+
end
|
132
|
+
|
133
|
+
#
|
134
|
+
# Returns the key to be used for sorting this column
|
135
|
+
#
|
136
|
+
# Defaults to the column's method if its a symbol
|
137
|
+
# column :username
|
138
|
+
# # => Sort key will be set to 'username'
|
139
|
+
#
|
140
|
+
# You can set the sort key by passing a string or symbol
|
141
|
+
# to the sortable option:
|
142
|
+
# column :username, :sortable => 'other_column_to_sort_on'
|
143
|
+
#
|
144
|
+
# If you pass a block to be rendered for this column, the column
|
145
|
+
# will not be sortable unless you pass a string to sortable to
|
146
|
+
# sort the column on:
|
147
|
+
#
|
148
|
+
# column('Username', :sortable => 'login'){ @user.pretty_name }
|
149
|
+
# # => Sort key will be 'login'
|
150
|
+
#
|
151
|
+
def sort_key
|
152
|
+
if @options[:sortable] == true || @options[:sortable] == false
|
153
|
+
@data.to_s
|
154
|
+
else
|
155
|
+
@options[:sortable].to_s
|
156
|
+
end
|
157
|
+
end
|
158
|
+
|
159
|
+
private
|
160
|
+
|
161
|
+
def pretty_title(raw)
|
162
|
+
raw.is_a?(Symbol) ? raw.to_s.titleize : raw
|
163
|
+
end
|
164
|
+
|
165
|
+
def default_options
|
166
|
+
{
|
167
|
+
:sortable => true
|
168
|
+
}
|
169
|
+
end
|
170
|
+
|
171
|
+
end
|
172
|
+
end
|
173
|
+
end
|
174
|
+
end
|