diff --git a/ui/lib/panels.js b/ui/lib/panels.js
index 0b70aa3a..9cd47bc3 100755
--- a/ui/lib/panels.js
+++ b/ui/lib/panels.js
@@ -15,8 +15,25 @@ var PANEL_HELPER_HIDE_DELAY = 50
var PANEL_HELPER_HIDE_DELAY_NO_ROOT = 100
-var PANELS = {
-}
+// Panel controller registry...
+//
+// Format:
+// {
+//
: ,
+// ...
+// }
+//
+// The controller is generated by makePanelController(...) and is called
+// automatically by openPanel(...)
+var PANELS = {}
+
+
+// XXX write real doc...
+// XXX see getPanelState(...)
+// XXX we should keep track of panel state while moving, opening, closing
+// and resizing panels...
+// XXX move this to config???
+var PANEL_STATE = {}
@@ -116,74 +133,10 @@ function getPanel(title){
}
-function openPanel(panel){
- var title = typeof(panel) == typeof('str') ? panel : null
- panel = typeof(panel) == typeof('str')
- ? getPanel(panel)
- : panel
- title = title == null ? panel.attr('id') : title
- var open = false
-
- // create a new panel...
- if(panel.length == 0){
- if(title in PANELS){
- var builder = PANELS[title]
- panel = builder({ open: true })
- }
- // show/open the panel and all it's parents...
- } else {
- open = isPanelVisible(panel)
- panel
- .prop('open', true)
- .parents('.panel')
- .prop('open', true)
- // XXX show side panels too...
- }
-
- // if the panel was not open trigger the event...
- if(!open){
- panel.trigger('panelOpening', panel)
- }
-
- return panel
-}
-
-
-// Close the panel...
-//
-// NOTE: this does not care if it's a panel or sub-panel...
-// XXX do we need a panelRemoved event???
-// ...and a symmetrical panelCreated??
-function closePanel(panel){
- panel = typeof(panel) == typeof('str')
- ? getPanel(panel)
- : panel
- panel.find('.sub-panel').each(function(){
- var p = $(this)
- if(p.prop('open')){
- p.trigger('panelClosing', p)
- }
- })
- return panel
- .prop('open', false)
- .trigger('panelClosing', panel)
-}
-
-
-// Remove the panel after firing close events on it and all sub-panels...
-//
-function removePanel(panel){
- panel = typeof(panel) == typeof('str')
- ? getPanel(panel)
- : panel
- return closePanel(panel)
- .remove()
-}
-
-
-
-/*********************************************************************/
+/**********************************************************************
+* Constructors...
+*/
// XXX dragging out, into another panel and back out behaves oddly:
// should:
@@ -457,6 +410,80 @@ function makeSubPanel(title, content, parent, open, content_resizable, close_but
+/**********************************************************************
+* Actions...
+*/
+
+// XXX this should take the state into consideration while opening panels
+// and open panels in specific parents and locations, maybe even with
+// other neighbor panels...
+function openPanel(panel){
+ var title = typeof(panel) == typeof('str') ? panel : null
+ panel = typeof(panel) == typeof('str')
+ ? getPanel(panel)
+ : panel
+ title = title == null ? panel.attr('id') : title
+ var open = false
+
+ // create a new panel...
+ if(panel.length == 0){
+ if(title in PANELS){
+ var builder = PANELS[title]
+ panel = builder({ open: true })
+ }
+
+ // show/open the panel and all it's parents...
+ } else {
+ open = isPanelVisible(panel)
+ panel
+ .prop('open', true)
+ .parents('.panel')
+ .prop('open', true)
+ // XXX show side panels too...
+ }
+
+ // if the panel was not open trigger the event...
+ if(!open){
+ panel.trigger('panelOpening', panel)
+ }
+
+ return panel
+}
+
+
+// Close the panel...
+//
+// NOTE: this does not care if it's a panel or sub-panel...
+// XXX do we need a panelRemoved event???
+// ...and a symmetrical panelCreated??
+function closePanel(panel){
+ panel = typeof(panel) == typeof('str')
+ ? getPanel(panel)
+ : panel
+ panel.find('.sub-panel').each(function(){
+ var p = $(this)
+ if(p.prop('open')){
+ p.trigger('panelClosing', p)
+ }
+ })
+ return panel
+ .prop('open', false)
+ .trigger('panelClosing', panel)
+}
+
+
+// Remove the panel after firing close events on it and all sub-panels...
+//
+function removePanel(panel){
+ panel = typeof(panel) == typeof('str')
+ ? getPanel(panel)
+ : panel
+ return closePanel(panel)
+ .remove()
+}
+
+
+
/**********************************************************************
* High level interface...
*/