diff -r d334a616c023 -r e16a97fb364a src/cm/media/js/lib/yui/yui3-3.15.0/build/dd-proxy/dd-proxy.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cm/media/js/lib/yui/yui3-3.15.0/build/dd-proxy/dd-proxy.js Mon Mar 10 15:19:48 2014 +0100 @@ -0,0 +1,249 @@ +YUI.add('dd-proxy', function (Y, NAME) { + + + /** + * Plugin for dd-drag for creating a proxy drag node, instead of dragging the original node. + * @module dd + * @submodule dd-proxy + */ + /** + * Plugin for dd-drag for creating a proxy drag node, instead of dragging the original node. + * @class DDProxy + * @extends Base + * @constructor + * @namespace Plugin + */ + var DDM = Y.DD.DDM, + NODE = 'node', + DRAG_NODE = 'dragNode', + HOST = 'host', + TRUE = true, proto, + P = function() { + P.superclass.constructor.apply(this, arguments); + }; + + P.NAME = 'DDProxy'; + /** + * The Proxy instance will be placed on the Drag instance under the proxy namespace. + * @property NS + * @default con + * @readonly + * @protected + * @static + * @type {String} + */ + P.NS = 'proxy'; + + P.ATTRS = { + host: { + }, + /** + * Move the original node at the end of the drag. Default: true + * @attribute moveOnEnd + * @type Boolean + */ + moveOnEnd: { + value: TRUE + }, + /** + * Hide the drag node at the end of the drag. Default: true + * @attribute hideOnEnd + * @type Boolean + */ + hideOnEnd: { + value: TRUE + }, + /** + * Make the Proxy node assume the size of the original node. Default: true + * @attribute resizeFrame + * @type Boolean + */ + resizeFrame: { + value: TRUE + }, + /** + * Make the Proxy node appear in the same place as the original node. Default: true + * @attribute positionProxy + * @type Boolean + */ + positionProxy: { + value: TRUE + }, + /** + * The default border style for the border of the proxy. Default: 1px solid #808080 + * @attribute borderStyle + * @type Boolean + */ + borderStyle: { + value: '1px solid #808080' + }, + /** + * Should the node be cloned into the proxy for you. Default: false + * @attribute cloneNode + * @type Boolean + */ + cloneNode: { + value: false + } + }; + + proto = { + /** + * Holds the event handles for setting the proxy + * @private + * @property _hands + */ + _hands: null, + /** + * Handler for the proxy config attribute + * @private + * @method _init + */ + _init: function() { + if (!DDM._proxy) { + DDM._createFrame(); + Y.on('domready', Y.bind(this._init, this)); + return; + } + if (!this._hands) { + this._hands = []; + } + var h, h1, host = this.get(HOST), dnode = host.get(DRAG_NODE); + if (dnode.compareTo(host.get(NODE))) { + if (DDM._proxy) { + host.set(DRAG_NODE, DDM._proxy); + } + } + Y.Array.each(this._hands, function(v) { + v.detach(); + }); + h = DDM.on('ddm:start', Y.bind(function() { + if (DDM.activeDrag === host) { + DDM._setFrame(host); + } + }, this)); + h1 = DDM.on('ddm:end', Y.bind(function() { + if (host.get('dragging')) { + if (this.get('moveOnEnd')) { + host.get(NODE).setXY(host.lastXY); + } + if (this.get('hideOnEnd')) { + host.get(DRAG_NODE).setStyle('display', 'none'); + } + if (this.get('cloneNode')) { + host.get(DRAG_NODE).remove(); + host.set(DRAG_NODE, DDM._proxy); + } + } + }, this)); + this._hands = [h, h1]; + }, + initializer: function() { + this._init(); + }, + destructor: function() { + var host = this.get(HOST); + Y.Array.each(this._hands, function(v) { + v.detach(); + }); + host.set(DRAG_NODE, host.get(NODE)); + }, + clone: function() { + var host = this.get(HOST), + n = host.get(NODE), + c = n.cloneNode(true); + + delete c._yuid; + c.setAttribute('id', Y.guid()); + c.setStyle('position', 'absolute'); + n.get('parentNode').appendChild(c); + host.set(DRAG_NODE, c); + return c; + } + }; + + Y.namespace('Plugin'); + Y.extend(P, Y.Base, proto); + Y.Plugin.DDProxy = P; + + //Add a couple of methods to the DDM + Y.mix(DDM, { + /** + * Create the proxy element if it doesn't already exist and set the DD.DDM._proxy value + * @private + * @for DDM + * @namespace DD + * @method _createFrame + */ + _createFrame: function() { + if (!DDM._proxy) { + DDM._proxy = TRUE; + + var p = Y.Node.create('
'), + b = Y.one('body'); + + p.setStyles({ + position: 'absolute', + display: 'none', + zIndex: '999', + top: '-999px', + left: '-999px' + }); + + b.prepend(p); + p.set('id', Y.guid()); + p.addClass(DDM.CSS_PREFIX + '-proxy'); + DDM._proxy = p; + } + }, + /** + * If resizeProxy is set to true (default) it will resize the proxy element to match the size of the Drag Element. + * If positionProxy is set to true (default) it will position the proxy element in the same location as the Drag Element. + * @private + * @for DDM + * @namespace DD + * @method _setFrame + */ + _setFrame: function(drag) { + var n = drag.get(NODE), d = drag.get(DRAG_NODE), ah, cur = 'auto'; + + ah = DDM.activeDrag.get('activeHandle'); + if (ah) { + cur = ah.getStyle('cursor'); + } + if (cur === 'auto') { + cur = DDM.get('dragCursor'); + } + + d.setStyles({ + visibility: 'hidden', + display: 'block', + cursor: cur, + border: drag.proxy.get('borderStyle') + }); + + if (drag.proxy.get('cloneNode')) { + d = drag.proxy.clone(); + } + + if (drag.proxy.get('resizeFrame')) { + d.setStyles({ + height: n.get('offsetHeight') + 'px', + width: n.get('offsetWidth') + 'px' + }); + } + + if (drag.proxy.get('positionProxy')) { + d.setXY(drag.nodeXY); + } + d.setStyle('visibility', 'visible'); + } + }); + + //Create the frame when DOM is ready + //Y.on('domready', Y.bind(DDM._createFrame, DDM)); + + + + +}, '@VERSION@', {"requires": ["dd-drag"]});