Upgrade to ExtJS 4.0.0 - Released 04/26/2011
[extjs.git] / src / dd / DragSource.js
index 19fe4c3..e3daf01 100644 (file)
@@ -1,9 +1,3 @@
-/*!
- * Ext JS Library 3.3.1
- * Copyright(c) 2006-2010 Sencha Inc.
- * licensing@sencha.com
- * http://www.sencha.com/license
- */
 /**
  * @class Ext.dd.DragSource
  * @extends Ext.dd.DDProxy
  * @param {Mixed} el The container element
  * @param {Object} config
  */
-Ext.dd.DragSource = function(el, config){
-    this.el = Ext.get(el);
-    if(!this.dragData){
-        this.dragData = {};
-    }
-    
-    Ext.apply(this, config);
-    
-    if(!this.proxy){
-        this.proxy = new Ext.dd.StatusProxy();
-    }
-    Ext.dd.DragSource.superclass.constructor.call(this, this.el.dom, this.ddGroup || this.group, 
-          {dragElId : this.proxy.id, resizeFrame: false, isTarget: false, scroll: this.scroll === true});
-    
-    this.dragging = false;
-};
+Ext.define('Ext.dd.DragSource', {
+    extend: 'Ext.dd.DDProxy',
+    requires: [
+        'Ext.dd.StatusProxy',
+        'Ext.dd.DragDropManager'
+    ],
 
-Ext.extend(Ext.dd.DragSource, Ext.dd.DDProxy, {
     /**
      * @cfg {String} ddGroup
      * A named drag drop group to which this object belongs.  If a group is specified, then this object will only
      * interact with other drag drop objects in the same group (defaults to undefined).
      */
+
     /**
      * @cfg {String} dropAllowed
      * The CSS class returned to the drag source when drop is allowed (defaults to "x-dd-drop-ok").
      */
-    dropAllowed : "x-dd-drop-ok",
+
+    dropAllowed : Ext.baseCSSPrefix + 'dd-drop-ok',
     /**
      * @cfg {String} dropNotAllowed
      * The CSS class returned to the drag source when drop is not allowed (defaults to "x-dd-drop-nodrop").
      */
-    dropNotAllowed : "x-dd-drop-nodrop",
+    dropNotAllowed : Ext.baseCSSPrefix + 'dd-drop-nodrop',
+
+    /**
+     * @cfg {Boolean} animRepair
+     * Defaults to true. If true, animates the proxy element back to the position of the handle element used to trigger the drag.
+     */
+    animRepair: true,
+
+    /**
+     * @cfg {String} repairHighlightColor The color to use when visually highlighting the drag source in the afterRepair
+     * method after a failed drop (defaults to 'c3daf9' - light blue). The color must be a 6 digit hex value, without
+     * a preceding '#'.
+     */
+    repairHighlightColor: 'c3daf9',
+
+    constructor: function(el, config) {
+        this.el = Ext.get(el);
+        if(!this.dragData){
+            this.dragData = {};
+        }
+
+        Ext.apply(this, config);
+
+        if(!this.proxy){
+            this.proxy = Ext.create('Ext.dd.StatusProxy', {
+                animRepair: this.animRepair
+            });
+        }
+        this.callParent([this.el.dom, this.ddGroup || this.group,
+              {dragElId : this.proxy.id, resizeFrame: false, isTarget: false, scroll: this.scroll === true}]);
+
+        this.dragging = false;
+    },
 
     /**
      * Returns the data object associated with this drag source
@@ -56,17 +73,17 @@ Ext.extend(Ext.dd.DragSource, Ext.dd.DDProxy, {
 
     // private
     onDragEnter : function(e, id){
-        var target = Ext.dd.DragDropMgr.getDDById(id);
+        var target = Ext.dd.DragDropManager.getDDById(id);
         this.cachedTarget = target;
-        if(this.beforeDragEnter(target, e, id) !== false){
-            if(target.isNotifyTarget){
+        if (this.beforeDragEnter(target, e, id) !== false) {
+            if (target.isNotifyTarget) {
                 var status = target.notifyEnter(this, e, this.dragData);
                 this.proxy.setStatus(status);
-            }else{
+            } else {
                 this.proxy.setStatus(this.dropAllowed);
             }
-            
-            if(this.afterDragEnter){
+
+            if (this.afterDragEnter) {
                 /**
                  * An empty function by default, but provided so that you can perform a custom action
                  * when the dragged item enters the drop target by providing an implementation.
@@ -88,26 +105,26 @@ Ext.extend(Ext.dd.DragSource, Ext.dd.DDProxy, {
      * @param {String} id The id of the dragged element
      * @return {Boolean} isValid True if the drag event is valid, else false to cancel
      */
-    beforeDragEnter : function(target, e, id){
+    beforeDragEnter: function(target, e, id) {
         return true;
     },
 
     // private
     alignElWithMouse: function() {
-        Ext.dd.DragSource.superclass.alignElWithMouse.apply(this, arguments);
+        this.callParent(arguments);
         this.proxy.sync();
     },
 
     // private
-    onDragOver : function(e, id){
-        var target = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(id);
-        if(this.beforeDragOver(target, e, id) !== false){
+    onDragOver: function(e, id) {
+        var target = this.cachedTarget || Ext.dd.DragDropManager.getDDById(id);
+        if (this.beforeDragOver(target, e, id) !== false) {
             if(target.isNotifyTarget){
                 var status = target.notifyOver(this, e, this.dragData);
                 this.proxy.setStatus(status);
             }
 
-            if(this.afterDragOver){
+            if (this.afterDragOver) {
                 /**
                  * An empty function by default, but provided so that you can perform a custom action
                  * while the dragged item is over the drop target by providing an implementation.
@@ -129,19 +146,19 @@ Ext.extend(Ext.dd.DragSource, Ext.dd.DDProxy, {
      * @param {String} id The id of the dragged element
      * @return {Boolean} isValid True if the drag event is valid, else false to cancel
      */
-    beforeDragOver : function(target, e, id){
+    beforeDragOver: function(target, e, id) {
         return true;
     },
 
     // private
-    onDragOut : function(e, id){
-        var target = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(id);
-        if(this.beforeDragOut(target, e, id) !== false){
-            if(target.isNotifyTarget){
+    onDragOut: function(e, id) {
+        var target = this.cachedTarget || Ext.dd.DragDropManager.getDDById(id);
+        if (this.beforeDragOut(target, e, id) !== false) {
+            if (target.isNotifyTarget) {
                 target.notifyOut(this, e, this.dragData);
             }
             this.proxy.reset();
-            if(this.afterDragOut){
+            if (this.afterDragOut) {
                 /**
                  * An empty function by default, but provided so that you can perform a custom action
                  * after the dragged item is dragged out of the target without dropping.
@@ -164,25 +181,25 @@ Ext.extend(Ext.dd.DragSource, Ext.dd.DDProxy, {
      * @param {String} id The id of the dragged element
      * @return {Boolean} isValid True if the drag event is valid, else false to cancel
      */
-    beforeDragOut : function(target, e, id){
+    beforeDragOut: function(target, e, id){
         return true;
     },
-    
+
     // private
-    onDragDrop : function(e, id){
-        var target = this.cachedTarget || Ext.dd.DragDropMgr.getDDById(id);
-        if(this.beforeDragDrop(target, e, id) !== false){
-            if(target.isNotifyTarget){
-                if(target.notifyDrop(this, e, this.dragData)){ // valid drop?
+    onDragDrop: function(e, id){
+        var target = this.cachedTarget || Ext.dd.DragDropManager.getDDById(id);
+        if (this.beforeDragDrop(target, e, id) !== false) {
+            if (target.isNotifyTarget) {
+                if (target.notifyDrop(this, e, this.dragData) !== false) { // valid drop?
                     this.onValidDrop(target, e, id);
-                }else{
+                } else {
                     this.onInvalidDrop(target, e, id);
                 }
-            }else{
+            } else {
                 this.onValidDrop(target, e, id);
             }
-            
-            if(this.afterDragDrop){
+
+            if (this.afterDragDrop) {
                 /**
                  * An empty function by default, but provided so that you can perform a custom action
                  * after a valid drag drop has occurred by providing an implementation.
@@ -205,18 +222,18 @@ Ext.extend(Ext.dd.DragSource, Ext.dd.DDProxy, {
      * @param {String} id The id of the dragged element
      * @return {Boolean} isValid True if the drag drop event is valid, else false to cancel
      */
-    beforeDragDrop : function(target, e, id){
+    beforeDragDrop: function(target, e, id){
         return true;
     },
 
     // private
-    onValidDrop : function(target, e, id){
+    onValidDrop: function(target, e, id){
         this.hideProxy();
         if(this.afterValidDrop){
             /**
              * An empty function by default, but provided so that you can perform a custom action
              * after a valid drop has occurred by providing an implementation.
-             * @param {Object} target The target DD 
+             * @param {Object} target The target DD
              * @param {Event} e The event object
              * @param {String} id The id of the dropped element
              * @method afterInvalidDrop
@@ -226,14 +243,14 @@ Ext.extend(Ext.dd.DragSource, Ext.dd.DDProxy, {
     },
 
     // private
-    getRepairXY : function(e, data){
-        return this.el.getXY();  
+    getRepairXY: function(e, data){
+        return this.el.getXY();
     },
 
     // private
-    onInvalidDrop : function(target, e, id){
+    onInvalidDrop: function(target, e, id) {
         this.beforeInvalidDrop(target, e, id);
-        if(this.cachedTarget){
+        if (this.cachedTarget) {
             if(this.cachedTarget.isNotifyTarget){
                 this.cachedTarget.notifyOut(this, e, this.dragData);
             }
@@ -241,7 +258,7 @@ Ext.extend(Ext.dd.DragSource, Ext.dd.DDProxy, {
         }
         this.proxy.repair(this.getRepairXY(e, this.dragData), this.afterRepair, this);
 
-        if(this.afterInvalidDrop){
+        if (this.afterInvalidDrop) {
             /**
              * An empty function by default, but provided so that you can perform a custom action
              * after an invalid drop has occurred by providing an implementation.
@@ -254,11 +271,12 @@ Ext.extend(Ext.dd.DragSource, Ext.dd.DDProxy, {
     },
 
     // private
-    afterRepair : function(){
-        if(Ext.enableFx){
-            this.el.highlight(this.hlColor || "c3daf9");
+    afterRepair: function() {
+        var me = this;
+        if (Ext.enableFx) {
+            me.el.highlight(me.repairHighlightColor);
         }
-        this.dragging = false;
+        me.dragging = false;
     },
 
     /**
@@ -269,21 +287,21 @@ Ext.extend(Ext.dd.DragSource, Ext.dd.DDProxy, {
      * @param {String} id The id of the dragged element
      * @return {Boolean} isValid True if the invalid drop should proceed, else false to cancel
      */
-    beforeInvalidDrop : function(target, e, id){
+    beforeInvalidDrop: function(target, e, id) {
         return true;
     },
 
     // private
-    handleMouseDown : function(e){
-        if(this.dragging) {
+    handleMouseDown: function(e) {
+        if (this.dragging) {
             return;
         }
         var data = this.getDragData(e);
-        if(data && this.onBeforeDrag(data, e) !== false){
+        if (data && this.onBeforeDrag(data, e) !== false) {
             this.dragData = data;
             this.proxy.stop();
-            Ext.dd.DragSource.superclass.handleMouseDown.apply(this, arguments);
-        } 
+            this.callParent(arguments);
+        }
     },
 
     /**
@@ -293,7 +311,7 @@ Ext.extend(Ext.dd.DragSource, Ext.dd.DDProxy, {
      * @param {Event} e The event object
      * @return {Boolean} isValid True if the drag event is valid, else false to cancel
      */
-    onBeforeDrag : function(data, e){
+    onBeforeDrag: function(data, e){
         return true;
     },
 
@@ -303,10 +321,10 @@ Ext.extend(Ext.dd.DragSource, Ext.dd.DDProxy, {
      * @param {Number} x The x position of the click on the dragged object
      * @param {Number} y The y position of the click on the dragged object
      */
-    onStartDrag : Ext.emptyFn,
+    onStartDrag: Ext.emptyFn,
 
     // private override
-    startDrag : function(x, y){
+    startDrag: function(x, y) {
         this.proxy.reset();
         this.dragging = true;
         this.proxy.update("");
@@ -315,7 +333,7 @@ Ext.extend(Ext.dd.DragSource, Ext.dd.DDProxy, {
     },
 
     // private
-    onInitDrag : function(x, y){
+    onInitDrag: function(x, y) {
         var clone = this.el.dom.cloneNode(true);
         clone.id = Ext.id(); // prevent duplicate ids
         this.proxy.update(clone);
@@ -327,21 +345,21 @@ Ext.extend(Ext.dd.DragSource, Ext.dd.DDProxy, {
      * Returns the drag source's underlying {@link Ext.dd.StatusProxy}
      * @return {Ext.dd.StatusProxy} proxy The StatusProxy
      */
-    getProxy : function(){
-        return this.proxy;  
+    getProxy: function() {
+        return this.proxy;
     },
 
     /**
      * Hides the drag source's {@link Ext.dd.StatusProxy}
      */
-    hideProxy : function(){
-        this.proxy.hide();  
+    hideProxy: function() {
+        this.proxy.hide();
         this.proxy.reset(true);
         this.dragging = false;
     },
 
     // private
-    triggerCacheRefresh : function(){
+    triggerCacheRefresh: function() {
         Ext.dd.DDM.refreshCache(this.groups);
     },
 
@@ -357,14 +375,14 @@ Ext.extend(Ext.dd.DragSource, Ext.dd.DDProxy, {
     // private
     onEndDrag : function(data, e){
     },
-    
+
     // private - pin to cursor
     autoOffset : function(x, y) {
         this.setDelta(-12, -20);
     },
-    
+
     destroy: function(){
-        Ext.dd.DragSource.superclass.destroy.call(this);
+        this.callParent();
         Ext.destroy(this.proxy);
     }
-});
\ No newline at end of file
+});