2015-09-07 18:44:10 +03:00
|
|
|
/**********************************************************************
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
*
|
|
|
|
|
**********************************************************************/
|
|
|
|
|
|
|
|
|
|
define(function(require){ var module = {}
|
|
|
|
|
|
|
|
|
|
//var DEBUG = DEBUG != null ? DEBUG : true
|
|
|
|
|
|
2015-09-12 03:10:42 +03:00
|
|
|
var keyboard = require('../keyboard')
|
2015-12-08 07:42:07 +03:00
|
|
|
var object = require('../object')
|
2015-09-07 18:44:10 +03:00
|
|
|
var widget = require('./widget')
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/*********************************************************************/
|
|
|
|
|
|
|
|
|
|
var OverlayClassPrototype = {
|
2015-11-09 22:48:13 +03:00
|
|
|
make: function(obj, client, options){
|
2015-09-07 18:44:10 +03:00
|
|
|
var that = this
|
|
|
|
|
var overlay = $('<div>')
|
2015-09-07 18:51:42 +03:00
|
|
|
.addClass('overlay-widget')
|
2015-09-08 01:01:06 +03:00
|
|
|
.on(options.nonPropagatedEvents.join(' '), function(){
|
2015-09-07 18:44:10 +03:00
|
|
|
event.stopPropagation()
|
|
|
|
|
})
|
|
|
|
|
.append($('<div>')
|
|
|
|
|
.addClass('content')
|
|
|
|
|
.click(function(){
|
|
|
|
|
event.stopPropagation()
|
|
|
|
|
})
|
|
|
|
|
.append(client))
|
|
|
|
|
|
2015-09-22 23:55:49 +03:00
|
|
|
if(options.focusable){
|
|
|
|
|
overlay.attr('tabindex', 0)
|
|
|
|
|
}
|
|
|
|
|
|
2015-11-09 22:48:13 +03:00
|
|
|
// XXX make this part of the framework...
|
|
|
|
|
if(obj){
|
|
|
|
|
overlay.data('widget-controller', obj)
|
|
|
|
|
}
|
|
|
|
|
|
2015-09-07 18:44:10 +03:00
|
|
|
return overlay
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var OverlayPrototype = {
|
|
|
|
|
dom: null,
|
2015-09-12 03:10:42 +03:00
|
|
|
client: null,
|
|
|
|
|
|
2015-09-08 01:01:06 +03:00
|
|
|
options: {
|
2015-09-22 23:55:49 +03:00
|
|
|
focusable: false,
|
|
|
|
|
|
2015-09-08 01:01:06 +03:00
|
|
|
nonPropagatedEvents: [
|
2015-09-12 03:10:42 +03:00
|
|
|
'click',
|
|
|
|
|
'keydown',
|
2015-09-08 01:01:06 +03:00
|
|
|
],
|
|
|
|
|
},
|
2015-09-07 18:44:10 +03:00
|
|
|
|
2015-09-22 23:55:49 +03:00
|
|
|
// XXX for some reason this does not work...
|
2015-09-12 03:10:42 +03:00
|
|
|
keyboard: {
|
|
|
|
|
General: {
|
2015-09-22 23:55:49 +03:00
|
|
|
//pattern: '.overlay-widget',
|
|
|
|
|
pattern: '*',
|
2015-09-12 03:10:42 +03:00
|
|
|
|
|
|
|
|
Esc: 'close',
|
|
|
|
|
},
|
|
|
|
|
},
|
|
|
|
|
|
2015-09-07 18:44:10 +03:00
|
|
|
// custom events...
|
|
|
|
|
close: function(handler){
|
|
|
|
|
// trigger the event...
|
|
|
|
|
if(handler == null){
|
|
|
|
|
this.dom.detach()
|
2015-09-07 18:51:42 +03:00
|
|
|
if(this.parent.children('.overlay-widget').length == 0){
|
2015-09-07 18:44:10 +03:00
|
|
|
this.parent.removeClass('blur')
|
|
|
|
|
}
|
|
|
|
|
this.trigger('close')
|
|
|
|
|
|
|
|
|
|
// register a handler...
|
|
|
|
|
} else {
|
|
|
|
|
this.on('close', handler)
|
|
|
|
|
}
|
2015-09-22 23:55:49 +03:00
|
|
|
return this
|
2015-09-07 18:44:10 +03:00
|
|
|
},
|
|
|
|
|
|
|
|
|
|
__init__: function(parent, client, options){
|
|
|
|
|
var that = this
|
2015-09-12 03:10:42 +03:00
|
|
|
|
2015-09-20 21:54:28 +03:00
|
|
|
object.superMethod(Overlay, '__init__').call(this, parent, client, options)
|
2015-09-07 18:44:10 +03:00
|
|
|
|
2015-09-20 21:54:28 +03:00
|
|
|
this.dom
|
2015-09-07 18:44:10 +03:00
|
|
|
.click(function(){
|
|
|
|
|
that.close()
|
|
|
|
|
})
|
|
|
|
|
|
2015-09-20 21:54:28 +03:00
|
|
|
this.parent
|
2015-09-07 18:44:10 +03:00
|
|
|
.addClass('blur')
|
2015-09-20 21:54:28 +03:00
|
|
|
.append(this.dom)
|
2015-09-12 03:10:42 +03:00
|
|
|
|
|
|
|
|
// focus the client...
|
2015-09-22 23:55:49 +03:00
|
|
|
if(client.dom && client.focus){
|
2015-09-12 03:10:42 +03:00
|
|
|
client.focus()
|
2015-09-22 23:55:49 +03:00
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
this.focus()
|
2015-09-12 03:10:42 +03:00
|
|
|
}
|
|
|
|
|
|
2015-09-07 18:44:10 +03:00
|
|
|
return this
|
|
|
|
|
},
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2015-09-20 21:54:28 +03:00
|
|
|
|
2015-09-07 18:44:10 +03:00
|
|
|
var Overlay =
|
|
|
|
|
module.Overlay =
|
|
|
|
|
object.makeConstructor('Overlay',
|
|
|
|
|
OverlayClassPrototype,
|
|
|
|
|
OverlayPrototype)
|
|
|
|
|
|
|
|
|
|
|
2015-09-20 21:54:28 +03:00
|
|
|
// inherit from widget...
|
|
|
|
|
Overlay.prototype.__proto__ = widget.Container.prototype
|
|
|
|
|
|
|
|
|
|
|
2015-09-07 18:44:10 +03:00
|
|
|
|
2015-11-09 22:48:13 +03:00
|
|
|
// 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')
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2015-09-07 18:44:10 +03:00
|
|
|
/**********************************************************************
|
|
|
|
|
* vim:set ts=4 sw=4 : */
|
|
|
|
|
return module })
|