This gem adds a tree and a list view to your ActiveAdmin resource index, both sortable via drag'n'drop.
Add SortableTree to your Gemfile; then
bundle installgem"active_admin-sortable_tree","~> 2.0.0"
Add a require to your JavaScript manifest
app/assets/javascripts/active_admin.js//= require active_admin/sortableAdd an import in your stylesheet manifest
app/assets/stylesheets/active_admin.scss@import"active_admin/sortable";
Admin:
# app/admin/page.rbActiveAdmin.registerPagedosortabletree: trueindex:as=>:sortabledolabel:title# item contentactionsendendModel: ActiveAdmin::SortableTree is agnostic to the tree implementation. All
you have to do is expose a sorting attribute and a few tree methods (:parent,
:children and :roots). Let's say you use
Ancestry:
classPage < ActiveRecord::Baseattr_accessible:title,:body,:positionhas_ancestry:orphan_strategy=>:rootifyendYou can configure these methods if you need:
ActiveAdmin.registerPagedosortabletree: true,sorting_attribute: :position,parent_method: :parent,children_method: :children,roots_method: :roots,roots_collection: proc{current_user.pages.roots}# …endThe option roots_collection provides full control on how to find the root
nodes of your sortable tree and is evaluated within the context of the
controller. Please note that roots_collection will override what is specified
in roots_method.
Admin:
# app/admin/page.rbActiveAdmin.registerPagedosortableindex:as=>:sortabledolabel:title# item contentactionsendendModel: Sortable list assumes you have a :position field in your resource.
Of course it's configurable:
ActiveAdmin.registerPagedosortabletree: false,# defaultsorting_attribute: :my_position_field# …endNote: If you are using the acts_as_list gem to manage a :position field (not required, but allows for other nice programmatic manipulation of ordered model lists), you must ensure a zero-based index for your list using the top_of_list option:
classPage < ActiveRecord::Base# Make this list act like a zero-indexed array to avoid off-by-one errors in your sortingacts_as_listtop_of_list: 0endCurrently supports only IndexAsBlock, more to come!
Admin:
# app/admin/page.rbActiveAdmin.registerPagedosortableindex:as=>:blockdo |page|
# item contentendendModel: Same as list view (see above)
ActiveAdmin.registerPagedosortabletree: true,max_levels: 0,# infinite indent levelsprotect_root: false,# allow root items to be draggedsorting_attribute: :position,parent_method: :parent,children_method: :children,roots_method: :roots,roots_collection: nil,# proc to specifiy retrieval of rootssortable: true,# Disable sorting (use only 'tree' functionality)collapsible: false,# show +/- buttons to collapse childrenstart_collapsed: false,# when collapsible, start with all roots collapsedendIn IndexAsSortable you can add custom actions (with or without the defaults):
index:as=>:sortabledoactionsdefaults: falsedo |page|
link_to"Custom action",my_custom_path(page)endendIt exposes three Ajax Events: ajaxDone, ajaxFail and ajaxAlways, which correspond to jQuery ajax callbacks: done, fail and always.
To subscribe Ajax callback:
ActiveAdminSortableEvent.add('ajaxDone',function(){// do what you want})Upgrading from SortableTree 1.x requires manually specifying assets in your
app/assets/javascripts/active_admin.js and app/assets/stylesheets/active_admin.scss
files.
ActiveAdmin::SortableTree 2.0 supports ActiveAdmin 1.0.0+. For previous versions of ActiveAdmin use older SortableTree versions from the 1.x branch.
Note: If you experience issues with drag and drop capability, you may need to specify the version for your ActiveAdmin installation. It is reported working using v0.6.6, or if you are using v1.0.0.pre, it is reported working on this commit b3a9f4b or later.
# Gemfilegem'activeadmin',github: 'activeadmin',ref: 'b3a9f4b'ActiveAdmin::SortableTree follows semantic versioning.
Copyright © 2013 Francesco Disperati, Cantiere Creativo. See the file MIT-LICENSE for details. See the full list list of contributors.
