| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224 | <!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">/* * This is a derivative of the similarly named class in the YUI Library. * The original license: * Copyright (c) 2006, Yahoo! Inc. All rights reserved. * Code licensed under the BSD License: * http://developer.yahoo.net/yui/license.txt */<span id='Ext-dd-DDProxy'>/**</span> * A DragDrop implementation that inserts an empty, bordered div into * the document that follows the cursor during drag operations.  At the time of * the click, the frame div is resized to the dimensions of the linked html * element, and moved to the exact location of the linked element. * * References to the "frame" element refer to the single proxy element that * was created to be dragged in place of all DDProxy elements on the * page. */Ext.define('Ext.dd.DDProxy', {    extend: 'Ext.dd.DD',    statics: {<span id='Ext-dd-DDProxy-static-property-dragElId'>        /**</span>         * The default drag frame div id         * @static         */        dragElId: "ygddfdiv"    },<span id='Ext-dd-DDProxy-method-constructor'>    /**</span>     * Creates new DDProxy.     * @param {String} id the id of the linked html element     * @param {String} sGroup the group of related DragDrop objects     * @param {Object} config an object containing configurable attributes.     * Valid properties for DDProxy in addition to those in DragDrop:     *      * - resizeFrame     * - centerFrame     * - dragElId     */    constructor: function(id, sGroup, config) {        if (id) {            this.init(id, sGroup, config);            this.initFrame();        }    },<span id='Ext-dd-DDProxy-property-resizeFrame'>    /**</span>     * @property {Boolean} resizeFrame     * By default we resize the drag frame to be the same size as the element     * we want to drag (this is to get the frame effect).  We can turn it off     * if we want a different behavior.     */    resizeFrame: true,<span id='Ext-dd-DDProxy-property-centerFrame'>    /**</span>     * @property {Boolean} centerFrame     * By default the frame is positioned exactly where the drag element is, so     * we use the cursor offset provided by Ext.dd.DD.  Another option that works only if     * you do not have constraints on the obj is to have the drag frame centered     * around the cursor.  Set centerFrame to true for this effect.     */    centerFrame: false,<span id='Ext-dd-DDProxy-method-createFrame'>    /**</span>     * Creates the proxy element if it does not yet exist     */    createFrame: function() {        var self = this,            body = document.body,            div,            s;        if (!body || !body.firstChild) {            setTimeout( function() { self.createFrame(); }, 50 );            return;        }        div = this.getDragEl();        if (!div) {            div    = document.createElement("div");            div.id = this.dragElId;            s  = div.style;            s.position   = "absolute";            s.visibility = "hidden";            s.cursor     = "move";            s.border     = "2px solid #aaa";            s.zIndex     = 999;            // appendChild can blow up IE if invoked prior to the window load event            // while rendering a table.  It is possible there are other scenarios            // that would cause this to happen as well.            body.insertBefore(div, body.firstChild);        }    },<span id='Ext-dd-DDProxy-method-initFrame'>    /**</span>     * Initialization for the drag frame element.  Must be called in the     * constructor of all subclasses     */    initFrame: function() {        this.createFrame();    },    applyConfig: function() {        this.callParent();        this.resizeFrame = (this.config.resizeFrame !== false);        this.centerFrame = (this.config.centerFrame);        this.setDragElId(this.config.dragElId || Ext.dd.DDProxy.dragElId);    },<span id='Ext-dd-DDProxy-method-showFrame'>    /**</span>     * Resizes the drag frame to the dimensions of the clicked object, positions     * it over the object, and finally displays it     * @param {Number} iPageX X click position     * @param {Number} iPageY Y click position     * @private     */    showFrame: function(iPageX, iPageY) {        var el = this.getEl(),            dragEl = this.getDragEl(),            s = dragEl.style;        this._resizeProxy();        if (this.centerFrame) {            this.setDelta( Math.round(parseInt(s.width,  10)/2),                           Math.round(parseInt(s.height, 10)/2) );        }        this.setDragElPos(iPageX, iPageY);        Ext.fly(dragEl).show();    },<span id='Ext-dd-DDProxy-method-_resizeProxy'>    /**</span>     * The proxy is automatically resized to the dimensions of the linked     * element when a drag is initiated, unless resizeFrame is set to false     * @private     */    _resizeProxy: function() {        if (this.resizeFrame) {            var el = this.getEl();            Ext.fly(this.getDragEl()).setSize(el.offsetWidth, el.offsetHeight);        }    },    // overrides Ext.dd.DragDrop    b4MouseDown: function(e) {        var x = e.getPageX(),            y = e.getPageY();        this.autoOffset(x, y);        this.setDragElPos(x, y);    },    // overrides Ext.dd.DragDrop    b4StartDrag: function(x, y) {        // show the drag frame        this.showFrame(x, y);    },    // overrides Ext.dd.DragDrop    b4EndDrag: function(e) {        Ext.fly(this.getDragEl()).hide();    },    // overrides Ext.dd.DragDrop    // By default we try to move the element to the last location of the frame.    // This is so that the default behavior mirrors that of Ext.dd.DD.    endDrag: function(e) {        var lel = this.getEl(),            del = this.getDragEl();        // Show the drag frame briefly so we can get its position        del.style.visibility = "";        this.beforeMove();        // Hide the linked element before the move to get around a Safari        // rendering bug.        lel.style.visibility = "hidden";        Ext.dd.DDM.moveToEl(lel, del);        del.style.visibility = "hidden";        lel.style.visibility = "";        this.afterDrag();    },    beforeMove : function(){    },    afterDrag : function(){    },    toString: function() {        return ("DDProxy " + this.id);    }});</pre></body></html>
 |