Roo.dd.DropTarget = function(el, config){
this.el = Roo.get(el);
+ var listeners = false; ;
+ if (config && config.listeners) {
+ listeners= config.listeners;
+ delete config.listeners;
+ }
Roo.apply(this, config);
if(this.containerScroll){
* target. This default implementation adds the CSS class specified by overClass (if any) to the drop element
* and returns the dropAllowed config value. This method should be overridden if drop validation is required.
*
- * IMPORTANT : it should set this.overClass and this.dropAllowed
+ * IMPORTANT : it should set this.valid to true|false
*
* @param {Roo.dd.DragSource} source The drag source that was dragged over this drop target
* @param {Event} e The event
* This method will be called on every mouse movement while the drag source is over the drop target.
* This default implementation simply returns the dropAllowed config value.
*
- * IMPORTANT : it should set this.dropAllowed
+ * IMPORTANT : it should set this.valid to true|false
*
* @param {Roo.dd.DragSource} source The drag source that was dragged over this drop target
* @param {Event} e The event
* The function a {@link Roo.dd.DragSource} calls once to notify this drop target that the source has been dragged
* out of the target without dropping. This default implementation simply removes the CSS class specified by
* overClass (if any) from the drop element.
+ *
+ *
* @param {Roo.dd.DragSource} source The drag source that was dragged over this drop target
* @param {Event} e The event
* @param {Object} data An object containing arbitrary data supplied by the drag source
this.ddGroup || this.group,
{
isTarget: true,
- listeners : config.listeners || {}
+ listeners : listeners || {}
}
*/
success : false,
/**
- * @cfg {boolean} valid
+ * @cfg {boolean|String} valid true/false or string (ok-add/ok-sub/ok/nodrop)
* if the drop point is valid for over/enter..
*/
valid : false,
/**
* @hide
*/
- notifyEnter : function(dd, e, data){
+ notifyEnter : function(dd, e, data)
+ {
this.valid = true;
- this.fireEvent('enter', this, dd, e, data);
+ this.fireEvent('enter', dd, e, data);
if(this.overClass){
this.el.addClass(this.overClass);
}
- return this.valid ? this.dropAllowed : this.dropNotAllowed;
+ return typeof(this.valid) == 'string' ? 'x-dd-drop-' + this.valid : (
+ this.valid ? this.dropAllowed : this.dropNotAllowed
+ );
},
/**
* @hide
*/
- notifyOver : function(dd, e, data){
+ notifyOver : function(dd, e, data)
+ {
this.valid = true;
- this.fireEvent('over', this, dd, e, data);
- return this.valid ? this.dropAllowed : this.dropNotAllowed;
+ this.fireEvent('over', dd, e, data);
+ return typeof(this.valid) == 'string' ? 'x-dd-drop-' + this.valid : (
+ this.valid ? this.dropAllowed : this.dropNotAllowed
+ );
},
/**
* @hide
*/
- notifyOut : function(dd, e, data){
- this.fireEvent('out', this, dd, e, data);
+ notifyOut : function(dd, e, data)
+ {
+ this.fireEvent('out', dd, e, data);
if(this.overClass){
this.el.removeClass(this.overClass);
}
/**
* @hide
*/
- notifyDrop : function(dd, e, data){
+ notifyDrop : function(dd, e, data)
+ {
this.success = false;
- this.fireEvent('drop', this, dd, e, data);
+ this.fireEvent('drop', dd, e, data);
return this.success;
}
});
\ No newline at end of file