| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222 | 
							- <!DOCTYPE html>
 
- <html>
 
- <head>
 
-   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 
-   <title>The source code</title>
 
-   <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
 
-   <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
 
-   <style type="text/css">
 
-     .highlight { display: block; background-color: #ddd; }
 
-   </style>
 
-   <script type="text/javascript">
 
-     function highlight() {
 
-       document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
 
-     }
 
-   </script>
 
- </head>
 
- <body onload="prettyPrint(); highlight();">
 
-   <pre class="prettyprint lang-js"><span id='Ext-ux-DataView-Draggable'>/**
 
- </span> * @class Ext.ux.DataView.Draggable
 
-  * @extends Object
 
-  * @author Ed Spencer
 
-  *
 
- <pre><code>
 
- Ext.create('Ext.view.View', {
 
-     mixins: {
 
-         draggable: 'Ext.ux.DataView.Draggable'
 
-     },
 
-     initComponent: function() {
 
-         this.mixins.draggable.init(this, {
 
-             ddConfig: {
 
-                 ddGroup: 'someGroup'
 
-             }
 
-         });
 
-         this.callParent(arguments);
 
-     }
 
- });
 
- </code></pre>
 
-  *
 
-  */
 
- Ext.define('Ext.ux.DataView.Draggable', {
 
-     requires: 'Ext.dd.DragZone',
 
- <span id='Ext-ux-DataView-Draggable-cfg-ghostCls'>    /**
 
- </span>     * @cfg {String} ghostCls The CSS class added to the outermost element of the created ghost proxy
 
-      * (defaults to 'x-dataview-draggable-ghost')
 
-      */
 
-     ghostCls: 'x-dataview-draggable-ghost',
 
- <span id='Ext-ux-DataView-Draggable-cfg-ghostTpl'>    /**
 
- </span>     * @cfg {Ext.XTemplate/Array} ghostTpl The template used in the ghost DataView
 
-      */
 
-     ghostTpl: [
 
-         '<tpl for=".">',
 
-             '{title}',
 
-         '</tpl>'
 
-     ],
 
- <span id='Ext-ux-DataView-Draggable-cfg-ddConfig'>    /**
 
- </span>     * @cfg {Object} ddConfig Config object that is applied to the internally created DragZone
 
-      */
 
- <span id='Ext-ux-DataView-Draggable-cfg-ghostConfig'>    /**
 
- </span>     * @cfg {String} ghostConfig Config object that is used to configure the internally created DataView
 
-      */
 
-     init: function(dataview, config) {
 
- <span id='Ext-ux-DataView-Draggable-property-dataview'>        /**
 
- </span>         * @property dataview
 
-          * @type Ext.view.View
 
-          * The Ext.view.View instance that this DragZone is attached to
 
-          */
 
-         this.dataview = dataview;
 
-         dataview.on('render', this.onRender, this);
 
-         Ext.apply(this, {
 
-             itemSelector: dataview.itemSelector,
 
-             ghostConfig : {}
 
-         }, config || {});
 
-         Ext.applyIf(this.ghostConfig, {
 
-             itemSelector: 'img',
 
-             cls: this.ghostCls,
 
-             tpl: this.ghostTpl
 
-         });
 
-     },
 
- <span id='Ext-ux-DataView-Draggable-method-onRender'>    /**
 
- </span>     * @private
 
-      * Called when the attached DataView is rendered. Sets up the internal DragZone
 
-      */
 
-     onRender: function() {
 
-         var config = Ext.apply({}, this.ddConfig || {}, {
 
-             dvDraggable: this,
 
-             dataview   : this.dataview,
 
-             getDragData: this.getDragData,
 
-             getTreeNode: this.getTreeNode,
 
-             afterRepair: this.afterRepair,
 
-             getRepairXY: this.getRepairXY
 
-         });
 
- <span id='Ext-ux-DataView-Draggable-property-dragZone'>        /**
 
- </span>         * @property dragZone
 
-          * @type Ext.dd.DragZone
 
-          * The attached DragZone instane
 
-          */
 
-         this.dragZone = Ext.create('Ext.dd.DragZone', this.dataview.getEl(), config);
 
-     },
 
-     getDragData: function(e) {
 
-         var draggable = this.dvDraggable,
 
-             dataview  = this.dataview,
 
-             selModel  = dataview.getSelectionModel(),
 
-             target    = e.getTarget(draggable.itemSelector),
 
-             selected, dragData;
 
-         if (target) {
 
-             if (!dataview.isSelected(target)) {
 
-                 selModel.select(dataview.getRecord(target));
 
-             }
 
-             selected = dataview.getSelectedNodes();
 
-             dragData = {
 
-                 copy: true,
 
-                 nodes: selected,
 
-                 records: selModel.getSelection(),
 
-                 item: true
 
-             };
 
-             if (selected.length == 1) {
 
-                 dragData.single = true;
 
-                 dragData.ddel = target;
 
-             } else {
 
-                 dragData.multi = true;
 
-                 dragData.ddel = draggable.prepareGhost(selModel.getSelection()).dom;
 
-             }
 
-             return dragData;
 
-         }
 
-         return false;
 
-     },
 
-     getTreeNode: function() {
 
-         // console.log('test');
 
-     },
 
-     afterRepair: function() {
 
-         this.dragging = false;
 
-         var nodes  = this.dragData.nodes,
 
-             length = nodes.length,
 
-             i;
 
-         //FIXME: Ext.fly does not work here for some reason, only frames the last node
 
-         for (i = 0; i < length; i++) {
 
-             Ext.get(nodes[i]).frame('#8db2e3', 1);
 
-         }
 
-     },
 
- <span id='Ext-ux-DataView-Draggable-method-getRepairXY'>    /**
 
- </span>     * @private
 
-      * Returns the x and y co-ordinates that the dragged item should be animated back to if it was dropped on an
 
-      * invalid drop target. If we're dragging more than one item we don't animate back and just allow afterRepair
 
-      * to frame each dropped item.
 
-      */
 
-     getRepairXY: function(e) {
 
-         if (this.dragData.multi) {
 
-             return false;
 
-         } else {
 
-             var repairEl = Ext.get(this.dragData.ddel),
 
-                 repairXY = repairEl.getXY();
 
-             //take the item's margins and padding into account to make the repair animation line up perfectly
 
-             repairXY[0] += repairEl.getPadding('t') + repairEl.getMargin('t');
 
-             repairXY[1] += repairEl.getPadding('l') + repairEl.getMargin('l');
 
-             return repairXY;
 
-         }
 
-     },
 
- <span id='Ext-ux-DataView-Draggable-method-prepareGhost'>    /**
 
- </span>     * Updates the internal ghost DataView by ensuring it is rendered and contains the correct records
 
-      * @param {Array} records The set of records that is currently selected in the parent DataView
 
-      * @return {Ext.view.View} The Ghost DataView
 
-      */
 
-     prepareGhost: function(records) {
 
-         var ghost = this.createGhost(records),
 
-             store = ghost.store;
 
-         store.removeAll();
 
-         store.add(records);
 
-         return ghost.getEl();
 
-     },
 
- <span id='Ext-ux-DataView-Draggable-method-createGhost'>    /**
 
- </span>     * @private
 
-      * Creates the 'ghost' DataView that follows the mouse cursor during the drag operation. This div is usually a
 
-      * lighter-weight representation of just the nodes that are selected in the parent DataView.
 
-      */
 
-     createGhost: function(records) {
 
-         if (!this.ghost) {
 
-             var ghostConfig = Ext.apply({}, this.ghostConfig, {
 
-                 store: Ext.create('Ext.data.Store', {
 
-                     model: records[0].modelName
 
-                 })
 
-             });
 
-             this.ghost = Ext.create('Ext.view.View', ghostConfig);
 
-             this.ghost.render(document.createElement('div'));
 
-         }
 
-         return this.ghost;
 
-     }
 
- });
 
- </pre>
 
- </body>
 
- </html>
 
 
  |