')
.addClass('v-block list'))
+ // XXX make this part of the framework...
+ if(obj){
+ browser.data('widget-controller', obj)
+ }
+
return browser
},
}
diff --git a/ui (gen4)/lib/widget/drawer.js b/ui (gen4)/lib/widget/drawer.js
index 9374317f..faf8860d 100755
--- a/ui (gen4)/lib/widget/drawer.js
+++ b/ui (gen4)/lib/widget/drawer.js
@@ -17,7 +17,7 @@ var widget = require('./widget')
/*********************************************************************/
var DrawerClassPrototype = {
- make: function(client, options){
+ make: function(obj, client, options){
var that = this
var overlay = $('
')
.addClass('drawer-widget')
@@ -35,6 +35,11 @@ var DrawerClassPrototype = {
overlay.attr('tabindex', 0)
}
+ // XXX make this part of the framework...
+ if(obj){
+ overlay.data('widget-controller', obj)
+ }
+
return overlay
},
}
diff --git a/ui (gen4)/lib/widget/overlay.js b/ui (gen4)/lib/widget/overlay.js
index 193d46b9..b43fc425 100755
--- a/ui (gen4)/lib/widget/overlay.js
+++ b/ui (gen4)/lib/widget/overlay.js
@@ -17,7 +17,7 @@ var widget = require('./widget')
/*********************************************************************/
var OverlayClassPrototype = {
- make: function(client, options){
+ make: function(obj, client, options){
var that = this
var overlay = $('
')
.addClass('overlay-widget')
@@ -35,6 +35,11 @@ var OverlayClassPrototype = {
overlay.attr('tabindex', 0)
}
+ // XXX make this part of the framework...
+ if(obj){
+ overlay.data('widget-controller', obj)
+ }
+
return overlay
},
}
@@ -120,6 +125,23 @@ Overlay.prototype.__proto__ = widget.Container.prototype
+// XXX this should return a proxy with a set of extension API...
+var getOverlay =
+module.getOverlay = function(obj){
+ var overlay = $(obj || 'body')
+ .find('.overlay-widget')
+ .last()
+
+ if(overlay.length == 0){
+ return null
+ }
+
+ // get the controller...
+ return overlay.data('widget-controller')
+}
+
+
+
/**********************************************************************
* vim:set ts=4 sw=4 : */
return module })
diff --git a/ui (gen4)/lib/widget/widget.js b/ui (gen4)/lib/widget/widget.js
index 23cb774b..48740c35 100755
--- a/ui (gen4)/lib/widget/widget.js
+++ b/ui (gen4)/lib/widget/widget.js
@@ -52,7 +52,7 @@ function(){
/*********************************************************************/
var WidgetClassPrototype = {
- make: function(client, options){
+ make: function(obj, client, options){
console.error('Widget must define a .make method.')
},
}
@@ -102,7 +102,7 @@ var WidgetPrototype = {
// build the dom...
if(this.constructor.make){
- this.dom = this.constructor.make(options)
+ this.dom = this.constructor.make(this, options)
}
// XXX do we do this here???
@@ -172,7 +172,7 @@ var ContainerPrototype = {
// build the dom...
if(this.constructor.make){
this.dom = this.constructor
- .make(client.dom || client, options)
+ .make(this, client.dom || client, options)
}
// add keyboard handler...
diff --git a/ui (gen4)/viewer.js b/ui (gen4)/viewer.js
index 1edfc069..3d8f19f4 100755
--- a/ui (gen4)/viewer.js
+++ b/ui (gen4)/viewer.js
@@ -2314,6 +2314,36 @@ var drawer = require('lib/widget/drawer')
// scenario:
// - an action is run while a menu runs a state changing action
// - state restoration will overwrite the effects fo the BG action
+// XXX .preventClosing(..) mechanism needs revision...
+// ...might be a better idea to add a permanent action to work with
+// modal overlays and to define strict rules under which such overlays
+// operate, like:
+// - only the top overlay is active and can receive events
+// - an overlay is closed on open event
+// - an overlay can be prevented from closing only while handling
+// an open event
+// - an overlay can close itself or the previous overlay during
+// its open event
+//
+// Proposed API:
+// getOverlay(context)
+// -> overlay object
+// -> null
+// returns an overlay controller for a given container
+// NOTE: if no overlay is open this returns null
+// NOTE: this might be implemented as an action.
+// NOTE: this returns an object that represents only
+// the top overlay
+// NOTE: this should either extend the overlay client
+// or encapsulate it (preferred), providing a method to access
+// it (something like: .client prop or
+// .getCleint() method)...
+// .preventClosing()
+// prevent closing of an overlay after this open event is
+// handled
+// .close()
+//
+//
var makeActionLister = function(list, filter, pre_order){
pre_order = typeof(filter) == typeof(true) ? filter : pre_order
filter = typeof(filter) == typeof(true) ? null : filter
@@ -2341,6 +2371,9 @@ var makeActionLister = function(list, filter, pre_order){
if(k.slice(-1) == '*'){
actions[k] = function(){
+ // XXX this may cause race conditions as we are
+ // splitting the state in two and then
+ // overwriting one...
var a = Object.create(that)
a.preventClosing = function(){
closingPrevented = true
@@ -2364,6 +2397,9 @@ var makeActionLister = function(list, filter, pre_order){
} else {
actions[k] = function(){
+ // XXX this may cause race conditions as we are
+ // splitting the state in two and then
+ // overwriting one...
var a = Object.create(that)
a.preventClosing = function(){
closingPrevented = true
@@ -2403,6 +2439,11 @@ var makeActionLister = function(list, filter, pre_order){
}
var ActionTreeActions = actions.Actions({
+ // XXX move this to a generic modal overlay feature...
+ getOverlay: ['Interface/Get overlay object',
+ function(){
+ }],
+
browseActions: ['Interface/Browse actions',
makeActionLister(browse.makePathList, true)],