AutorÃa | Ultima modificación | Ver Log |
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);c.all('input[type="radio"]').removeAttribute('name');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 DDMY.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('<div></div>'),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));}, '3.18.1', {"requires": ["dd-drag"]});