--- /dev/null
+<html><head><title>../roojs1/Roo/dd/DDProxy.js</title><link rel="stylesheet" type="text/css" href="../../../css/highlight-js.css"/></head><body class="highlightpage"><code class="jsdoc-pretty"><span class="jsdoc-comment">/*
+ * Based on:
+ * Ext JS Library 1.1.1
+ * Copyright(c) 2006-2007, Ext JS, LLC.
+ *
+ * Originally Released Under LGPL - original licence link has changed is not relivant.
+ *
+ * Fork - LGPL
+ * <script type="text/javascript">
+ */
+
+/**
+ * @class Roo.dd.DDProxy
+ * 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.
+ *
+ * @extends Roo.dd.DD
+ * @constructor
+ * @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
+ */
+</span><span class="jsdoc-var">Roo.dd.DDProxy </span><span class="jsdoc-syntax">= </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">id</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">sGroup</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">id</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-var">this.init</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">id</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">sGroup</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">config</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-var">this.initFrame</span><span class="jsdoc-syntax">();
+ }
+};
+
+</span><span class="jsdoc-comment">/**
+ * The default drag frame div id
+ * @property Roo.dd.DDProxy.dragElId
+ * @type String
+ * @static
+ */
+</span><span class="jsdoc-var">Roo.dd.DDProxy.dragElId </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">"ygddfdiv"</span><span class="jsdoc-syntax">;
+
+</span><span class="jsdoc-var">Roo.extend</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">Roo.dd.DDProxy</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">Roo.dd.DD</span><span class="jsdoc-syntax">, {
+
+ </span><span class="jsdoc-comment">/**
+ * 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.
+ * @property resizeFrame
+ * @type boolean
+ */
+ </span><span class="jsdoc-var">resizeFrame</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">true</span><span class="jsdoc-syntax">,
+
+ </span><span class="jsdoc-comment">/**
+ * By default the frame is positioned exactly where the drag element is, so
+ * we use the cursor offset provided by Roo.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.
+ * @property centerFrame
+ * @type boolean
+ */
+ </span><span class="jsdoc-var">centerFrame</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">,
+
+ </span><span class="jsdoc-comment">/**
+ * Creates the proxy element if it does not yet exist
+ * @method createFrame
+ */
+ </span><span class="jsdoc-var">createFrame</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">() {
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">self </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">;
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">body </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">document.body</span><span class="jsdoc-syntax">;
+
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">body </span><span class="jsdoc-syntax">|| !</span><span class="jsdoc-var">body.firstChild</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-var">setTimeout</span><span class="jsdoc-syntax">( </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">() { </span><span class="jsdoc-var">self.createFrame</span><span class="jsdoc-syntax">(); }, 50 );
+ </span><span class="jsdoc-keyword">return</span><span class="jsdoc-syntax">;
+ }
+
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">div </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getDragEl</span><span class="jsdoc-syntax">();
+
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(!</span><span class="jsdoc-var">div</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-var">div </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">document.createElement</span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"div"</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-var">div.id </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.dragElId</span><span class="jsdoc-syntax">;
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">s </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">div.style</span><span class="jsdoc-syntax">;
+
+ </span><span class="jsdoc-var">s.position </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">"absolute"</span><span class="jsdoc-syntax">;
+ </span><span class="jsdoc-var">s.visibility </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">"hidden"</span><span class="jsdoc-syntax">;
+ </span><span class="jsdoc-var">s.cursor </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">"move"</span><span class="jsdoc-syntax">;
+ </span><span class="jsdoc-var">s.border </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">"2px solid #aaa"</span><span class="jsdoc-syntax">;
+ </span><span class="jsdoc-var">s.zIndex </span><span class="jsdoc-syntax">= 999;
+
+ </span><span class="jsdoc-comment">// 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.
+ </span><span class="jsdoc-var">body.insertBefore</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">div</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">body.firstChild</span><span class="jsdoc-syntax">);
+ }
+ },
+
+ </span><span class="jsdoc-comment">/**
+ * Initialization for the drag frame element. Must be called in the
+ * constructor of all subclasses
+ * @method initFrame
+ */
+ </span><span class="jsdoc-var">initFrame</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">() {
+ </span><span class="jsdoc-var">this.createFrame</span><span class="jsdoc-syntax">();
+ },
+
+ </span><span class="jsdoc-var">applyConfig</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">() {
+ </span><span class="jsdoc-var">Roo.dd.DDProxy.superclass.applyConfig.call</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this</span><span class="jsdoc-syntax">);
+
+ </span><span class="jsdoc-var">this.resizeFrame </span><span class="jsdoc-syntax">= (</span><span class="jsdoc-var">this.config.resizeFrame </span><span class="jsdoc-syntax">!== </span><span class="jsdoc-keyword">false</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-var">this.centerFrame </span><span class="jsdoc-syntax">= (</span><span class="jsdoc-var">this.config.centerFrame</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-var">this.setDragElId</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.config.dragElId </span><span class="jsdoc-syntax">|| </span><span class="jsdoc-var">Roo.dd.DDProxy.dragElId</span><span class="jsdoc-syntax">);
+ },
+
+ </span><span class="jsdoc-comment">/**
+ * Resizes the drag frame to the dimensions of the clicked object, positions
+ * it over the object, and finally displays it
+ * @method showFrame
+ * @param {int} iPageX X click position
+ * @param {int} iPageY Y click position
+ * @private
+ */
+ </span><span class="jsdoc-var">showFrame</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">iPageX</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">iPageY</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getEl</span><span class="jsdoc-syntax">();
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">dragEl </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getDragEl</span><span class="jsdoc-syntax">();
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">s </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">dragEl.style</span><span class="jsdoc-syntax">;
+
+ </span><span class="jsdoc-var">this._resizeProxy</span><span class="jsdoc-syntax">();
+
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.centerFrame</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-var">this.setDelta</span><span class="jsdoc-syntax">( </span><span class="jsdoc-var">Math.round</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">parseInt</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.width</span><span class="jsdoc-syntax">, 10)/2),
+ </span><span class="jsdoc-var">Math.round</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">parseInt</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">s.height</span><span class="jsdoc-syntax">, 10)/2) );
+ }
+
+ </span><span class="jsdoc-var">this.setDragElPos</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">iPageX</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">iPageY</span><span class="jsdoc-syntax">);
+
+ </span><span class="jsdoc-var">Roo.fly</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">dragEl</span><span class="jsdoc-syntax">)</span><span class="jsdoc-var">.show</span><span class="jsdoc-syntax">();
+ },
+
+ </span><span class="jsdoc-comment">/**
+ * The proxy is automatically resized to the dimensions of the linked
+ * element when a drag is initiated, unless resizeFrame is set to false
+ * @method _resizeProxy
+ * @private
+ */
+ </span><span class="jsdoc-var">_resizeProxy</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">() {
+ </span><span class="jsdoc-keyword">if </span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.resizeFrame</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">el </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getEl</span><span class="jsdoc-syntax">();
+ </span><span class="jsdoc-var">Roo.fly</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.getDragEl</span><span class="jsdoc-syntax">())</span><span class="jsdoc-var">.setSize</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">el.offsetWidth</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">el.offsetHeight</span><span class="jsdoc-syntax">);
+ }
+ },
+
+ </span><span class="jsdoc-comment">// overrides Roo.dd.DragDrop
+ </span><span class="jsdoc-var">b4MouseDown</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">x </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">e.getPageX</span><span class="jsdoc-syntax">();
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">y </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">e.getPageY</span><span class="jsdoc-syntax">();
+ </span><span class="jsdoc-var">this.autoOffset</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">x</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">y</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-var">this.setDragElPos</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">x</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">y</span><span class="jsdoc-syntax">);
+ },
+
+ </span><span class="jsdoc-comment">// overrides Roo.dd.DragDrop
+ </span><span class="jsdoc-var">b4StartDrag</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">x</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">y</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-comment">// show the drag frame
+ </span><span class="jsdoc-var">this.showFrame</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">x</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">y</span><span class="jsdoc-syntax">);
+ },
+
+ </span><span class="jsdoc-comment">// overrides Roo.dd.DragDrop
+ </span><span class="jsdoc-var">b4EndDrag</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
+ </span><span class="jsdoc-var">Roo.fly</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">this.getDragEl</span><span class="jsdoc-syntax">())</span><span class="jsdoc-var">.hide</span><span class="jsdoc-syntax">();
+ },
+
+ </span><span class="jsdoc-comment">// overrides Roo.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 Roo.dd.DD.
+ </span><span class="jsdoc-var">endDrag</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">e</span><span class="jsdoc-syntax">) {
+
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">lel </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getEl</span><span class="jsdoc-syntax">();
+ </span><span class="jsdoc-keyword">var </span><span class="jsdoc-var">del </span><span class="jsdoc-syntax">= </span><span class="jsdoc-var">this.getDragEl</span><span class="jsdoc-syntax">();
+
+ </span><span class="jsdoc-comment">// Show the drag frame briefly so we can get its position
+ </span><span class="jsdoc-var">del.style.visibility </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">""</span><span class="jsdoc-syntax">;
+
+ </span><span class="jsdoc-var">this.beforeMove</span><span class="jsdoc-syntax">();
+ </span><span class="jsdoc-comment">// Hide the linked element before the move to get around a Safari
+ // rendering bug.
+ </span><span class="jsdoc-var">lel.style.visibility </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">"hidden"</span><span class="jsdoc-syntax">;
+ </span><span class="jsdoc-var">Roo.dd.DDM.moveToEl</span><span class="jsdoc-syntax">(</span><span class="jsdoc-var">lel</span><span class="jsdoc-syntax">, </span><span class="jsdoc-var">del</span><span class="jsdoc-syntax">);
+ </span><span class="jsdoc-var">del.style.visibility </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">"hidden"</span><span class="jsdoc-syntax">;
+ </span><span class="jsdoc-var">lel.style.visibility </span><span class="jsdoc-syntax">= </span><span class="jsdoc-string">""</span><span class="jsdoc-syntax">;
+
+ </span><span class="jsdoc-var">this.afterDrag</span><span class="jsdoc-syntax">();
+ },
+
+ </span><span class="jsdoc-var">beforeMove </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
+
+ },
+
+ </span><span class="jsdoc-var">afterDrag </span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">(){
+
+ },
+
+ </span><span class="jsdoc-var">toString</span><span class="jsdoc-syntax">: </span><span class="jsdoc-keyword">function</span><span class="jsdoc-syntax">() {
+ </span><span class="jsdoc-keyword">return </span><span class="jsdoc-syntax">(</span><span class="jsdoc-string">"DDProxy " </span><span class="jsdoc-syntax">+ </span><span class="jsdoc-var">this.id</span><span class="jsdoc-syntax">);
+ }
+
+});
+</span></code></body></html>
\ No newline at end of file