76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Provides the ability to drag multiple nodes under a container element using only one Y.DD.Drag instance as a delegate.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @module dd
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @submodule dd-delegate
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * Provides the ability to drag multiple nodes under a container element using only one Y.DD.Drag instance as a delegate.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @class Delegate
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @extends Base
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @constructor
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @namespace DD
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var Delegate = function(o) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass Delegate.superclass.constructor.apply(this, arguments);
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _bubbleTargets
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description The default bubbleTarget for this object. Default: Y.DD.DDM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property dd
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description A reference to the temporary dd instance used under the hood.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _shimState
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description The state of the Y.DD.DDM._noShim property to it can be reset.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _handles
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Array of event handles to be destroyed
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _onNodeChange
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Listens to the nodeChange event and sets the dragNode on the temp dd instance.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {Event} e The Event.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _onNodeChange: function(e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _afterDragEnd
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Listens for the drag:end event and updates the temp dd instance.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {Event} e The Event.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _afterDragEnd: function(e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.get('lastNode').removeClass(Y.DD.DDM.CSS_PREFIX + '-dragging');
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _delMouseDown
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description The callback for the Y.DD.Delegate instance used
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {Event} e The MouseDown Event.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _delMouseDown: function(e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (tar.test(this.get(NODES)) && !tar.test(this.get('invalid'))) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _onMouseEnter
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Sets the target shim state
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {Event} e The MouseEnter Event
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _onMouseEnter: function(e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method _onMouseLeave
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Resets the target shim state
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {Event} e The MouseLeave Event
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass _onMouseLeave: function(e) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //Create a tmp DD instance under the hood.
0c5957881cc9d40f624747499490ad2ffc6f069eDav Glass //var conf = Y.clone(this.get('dragConfig') || {}),
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //On end drag, detach the listeners
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.dd.after('drag:end', Y.bind(this._afterDragEnd, this));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this.dd.on('dragNodeChange', Y.bind(this._onNodeChange, this));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass //Attach the delegate to the container
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._handles.push(Y.delegate(Y.DD.Drag.START_EVENT, Y.bind(this._delMouseDown, this), cont, this.get(NODES)));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._handles.push(Y.on('mouseenter', Y.bind(this._onMouseEnter, this), cont));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass this._handles.push(Y.on('mouseleave', Y.bind(this._onMouseLeave, this), cont));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method syncTargets
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Applies the Y.Plugin.Drop to all nodes matching the cont + nodes selector query.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @return {Self}
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @chainable
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass syncTargets: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass items = Y.one(this.get(CONT)).all(this.get(NODES));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass return this;
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method createDrop
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Apply the Drop plugin to this node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {Node} node The Node to apply the plugin to
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @param {Array} groups The default groups to assign this target to.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @return Node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass destructor: function() {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass if (this.dd) {
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var targets = Y.one(this.get(CONT)).all(this.get(NODES));
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute container
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description A selector query to get the container to listen for mousedown events on. All "nodes" should be a child of this container.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute nodes
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description A selector query to get the children of the "container" to make draggable elements from.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute invalid
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description A selector query to test a node to see if it's an invalid item.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type String
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute lastNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Y.Node instance of the last item dragged.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute currentNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Y.Node instance of the dd node.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute dragNode
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Y.Node instance of the dd dragNode.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Node
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute over
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Is the mouse currently over the container
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Boolean
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute target
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Should the items also be a drop target.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Boolean
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute dragConfig
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description The default config to be used when creating the DD instance.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Object
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @attribute handles
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description The handles config option added to the temp DD instance.
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Array
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @property _delegates
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Holder for all Y.DD.Delegate instances
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @type Array
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method regDelegate
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Register a Delegate with the DDM
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @method getDelegate
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass * @description Get a delegate instance from a container node
8a6b21bbf4ce4b186b37c9f3623a198acd13b950Dav Glass * @return Y.DD.Delegate
76ca635d61eb3f9fb7c9d788a44fa8b1690aa138Dav Glass var del = null;
d60f68a8534f619bb0a3e59eea03a84a2f69021dDav Glass}, '@VERSION@' ,{skinnable:false, requires:['dd-drag', 'event-mouseenter', 'dd-drop-plugin']});