app/assets/javascripts/admin/index_utils/services/panels.js.coffee
angular.module("admin.indexUtils").factory 'Panels', ->
new class Panels
all: []
register: (ctrl, object, selected=null) ->
if ctrl? && object?
existing = @panelFor(object)
newPanel = { ctrl: ctrl, object: object, selected: selected }
if existing then angular.extend(existing, newPanel) else @all.push(newPanel)
ctrl.select(selected) if selected?
toggle: (object, name, state=null) ->
panel = @panelFor(object)
if panel.selected == name
@select(panel, null) unless state == "open"
else
@select(panel, name) unless state == "closed"
select: (panel, name) ->
panel.selected = name
panel.ctrl.select(name)
panelFor: (object) ->
(@all.filter (panel) -> panel.object == object)[0]