Skip to content

Commit 032a55e

Browse files
committed
Built action list popover on top of popover
1 parent 355a207 commit 032a55e

File tree

7 files changed

+89
-32
lines changed

7 files changed

+89
-32
lines changed

app/assets/stylesheets/active_admin/components/_popovers.css.scss

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@
1818
box-shadow: rgba(0,0,0,0.3) 0 1px 5px;
1919
background-color: $primary-color;
2020
border-radius: 3px;
21-
width: 120px;
2221

2322
&::after {
2423
content: "";
@@ -57,8 +56,9 @@
5756
display: block;
5857
font-size: 0.9em;
5958
font-weight: bold;
60-
padding: 6px 8px;
59+
padding: 6px 15px;
6160
text-decoration: none;
61+
text-align: center;
6262

6363
&:hover {
6464
@include gradient(#75a1c2, #608cb4);

lib/active_admin/view_factory.rb

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,23 @@ module ActiveAdmin
44
class ViewFactory < AbstractViewFactory
55

66
# Register Helper Renderers
7-
register :global_navigation => ActiveAdmin::Views::TabbedNavigation,
8-
:action_items => ActiveAdmin::Views::ActionItems,
9-
:header => ActiveAdmin::Views::HeaderRenderer,
10-
:dashboard_section => ActiveAdmin::Views::DashboardSection,
11-
:index_scopes => ActiveAdmin::Views::Scopes,
12-
:blank_slate => ActiveAdmin::Views::BlankSlate,
13-
:popover => ActiveAdmin::Views::Popover
7+
register :global_navigation => ActiveAdmin::Views::TabbedNavigation,
8+
:action_items => ActiveAdmin::Views::ActionItems,
9+
:header => ActiveAdmin::Views::HeaderRenderer,
10+
:dashboard_section => ActiveAdmin::Views::DashboardSection,
11+
:index_scopes => ActiveAdmin::Views::Scopes,
12+
:blank_slate => ActiveAdmin::Views::BlankSlate,
13+
:popover => ActiveAdmin::Views::Popover,
14+
:action_list_popover => ActiveAdmin::Views::ActionListPopover
1415

1516

1617
# Register All The Pages
17-
register :dashboard_page => ActiveAdmin::Views::Pages::Dashboard,
18-
:index_page => ActiveAdmin::Views::Pages::Index,
19-
:show_page => ActiveAdmin::Views::Pages::Show,
20-
:new_page => ActiveAdmin::Views::Pages::New,
21-
:edit_page => ActiveAdmin::Views::Pages::Edit,
22-
:layout => ActiveAdmin::Views::Pages::Layout
18+
register :dashboard_page => ActiveAdmin::Views::Pages::Dashboard,
19+
:index_page => ActiveAdmin::Views::Pages::Index,
20+
:show_page => ActiveAdmin::Views::Pages::Show,
21+
:new_page => ActiveAdmin::Views::Pages::New,
22+
:edit_page => ActiveAdmin::Views::Pages::Edit,
23+
:layout => ActiveAdmin::Views::Pages::Layout
2324

2425
end
2526
end
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
require 'active_admin/views/components/popover'
2+
3+
module ActiveAdmin
4+
module Views
5+
# Build an ActionListPopover
6+
class ActionListPopover < ActiveAdmin::Views::Popover
7+
builder_method :action_list_popover
8+
9+
10+
def build(*args, &block)
11+
@contents = ul :class => "popover_contents"
12+
13+
super(args)
14+
end
15+
16+
def action(title, url, *args)
17+
options = args.extract_options!
18+
19+
within @contents do
20+
li do
21+
text_node link_to(title, url, options)
22+
end
23+
end
24+
end
25+
26+
end
27+
end
28+
end

lib/active_admin/views/components/popover.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ def build(*args, &block)
1616

1717
self.id = options[:id]
1818

19-
@contents = div(:class => "popover_contents")
19+
@contents ||= div(:class => "popover_contents")
2020

2121
end
2222

lib/active_admin/views/pages/index.rb

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -49,16 +49,15 @@ def build_download_format_links(formats = [:csv, :xml, :json])
4949
end
5050

5151
def build_batch_action_popover
52-
insert_tag view_factory.popover do
53-
"Popover contents"
54-
end
55-
56-
#
57-
#view_factory.action_list_popover do
58-
# action "Delete Selected", "#"
59-
# action "Flag Selected", "#"
60-
# action "Export Selected", "#"
52+
#insert_tag view_factory.popover do
53+
# "Popover contents"
6154
#end
55+
56+
insert_tag view_factory.action_list_popover do
57+
action "Delete Selected", "#"
58+
action "Flag Selected", "#"
59+
action "Export Selected", "#"
60+
end
6261
end
6362

6463
def build_scopes

spec/unit/view_factory_spec.rb

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,13 +8,14 @@ def it_should_have_view(key, value)
88

99
describe ActiveAdmin::ViewFactory do
1010

11-
it_should_have_view :global_navigation, ActiveAdmin::Views::TabbedNavigation
12-
it_should_have_view :action_items, ActiveAdmin::Views::ActionItems
13-
it_should_have_view :header, ActiveAdmin::Views::HeaderRenderer
14-
it_should_have_view :blank_slate, ActiveAdmin::Views::BlankSlate
15-
it_should_have_view :popover, ActiveAdmin::Views::Popover
11+
it_should_have_view :global_navigation, ActiveAdmin::Views::TabbedNavigation
12+
it_should_have_view :action_items, ActiveAdmin::Views::ActionItems
13+
it_should_have_view :header, ActiveAdmin::Views::HeaderRenderer
14+
it_should_have_view :blank_slate, ActiveAdmin::Views::BlankSlate
15+
it_should_have_view :popover, ActiveAdmin::Views::Popover
16+
it_should_have_view :action_list_popover, ActiveAdmin::Views::ActionListPopover
1617

17-
it_should_have_view :dashboard_page, ActiveAdmin::Views::Pages::Dashboard
18-
it_should_have_view :layout, ActiveAdmin::Views::Pages::Layout
18+
it_should_have_view :dashboard_page, ActiveAdmin::Views::Pages::Dashboard
19+
it_should_have_view :layout, ActiveAdmin::Views::Pages::Layout
1920

2021
end
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
require 'spec_helper'
2+
3+
describe ActiveAdmin::Views::ActionListPopover do
4+
5+
setup_arbre_context!
6+
7+
let(:the_popover) do
8+
action_list_popover :id => "my_awesome_action_list_popover" do
9+
action "Action 1", "#"
10+
action "Action 2", "#"
11+
action "Action 3", "#"
12+
end
13+
end
14+
15+
describe "the action list" do
16+
subject do
17+
the_popover.find_by_class("popover_contents").first
18+
end
19+
20+
its(:tag_name) { should eql("ul") }
21+
22+
its(:content){ should include("<li><a href=\"#\">Action 1</a></li>") }
23+
its(:content){ should include("<li><a href=\"#\">Action 2</a></li>") }
24+
its(:content){ should include("<li><a href=\"#\">Action 3</a></li>") }
25+
26+
end
27+
28+
end

0 commit comments

Comments
 (0)