This example is the same as the "Drag Delegation with Drop Target" example except we add some plugins.
DD.Delegate
provides a reference to the dd
instance so you can plug into the underlying dd
with del.dd.plug()
.
This allows you to use DD plugins on a Delegate instance, as well as provides the ability to write plugins for Delegate itself.
Here is how you would add the constrain plugin to a DD.Delegate
instance.
YUI().use('dd-delegate', 'dd-constrain', function(Y) { var del = new Y.DD.Delegate({ container: '#demo', nodes: 'li' }); del.dd.plug(Y.Plugin.DDConstrained, { constrain2node: '#play' }); });
Here is how you would add the dd-proxy plugin to a DD.Delegate
instance.
YUI().use('dd-delegate', 'dd-proxy', function(Y) { var del = new Y.DD.Delegate({ container: '#demo', nodes: 'li' }); del.dd.plug(Y.Plugin.DDProxy, { moveOnEnd: false, cloneNode: true }); });
<div id="play"> <div id="demo"> <ul> <li>Item #1</li> <li>Item #2</li> <li>Item #3</li> <li>Item #4</li> <li>Item #5</li> <li>Item #6</li> <li>Item #7</li> <li>Item #8</li> <li>Item #9</li> <li>Item #10</li> </ul> </div> <div id="drop">Drop on me</div> </div>
#demo { } #demo ul li { border: 1px solid black; background-color: #8DD5E7; cursor: move; margin: 3px; list-style-type: none; z-index: 2; width: 200px; height: 20px; padding: 2px; zoom: 1; } #play { border: 1px solid black; zoom: 1; padding: 2em; } #drop { border: 1px solid black; background-color: #eee; height: 50px; width: 200px; float: right; bottom: 50px; position: relative; } #drop strong { font-weight: bold; } #drop.yui3-dd-drop-over { background-color: #ccc; } #example-canvas { position: static; }
YUI().use('dd-delegate', 'dd-drop-plugin', 'dd-constrain', 'dd-proxy', function(Y) { var del = new Y.DD.Delegate({ container: '#demo', nodes: 'li' }); del.on('drag:start', function(e) { e.target.get('node').setStyle('opacity', '.5'); }); del.on('drag:end', function(e) { e.target.get('node').setStyle('opacity', '1'); }); del.dd.plug(Y.Plugin.DDConstrained, { constrain2node: '#play' }); del.dd.plug(Y.Plugin.DDProxy, { moveOnEnd: false, cloneNode: true }); var drop = Y.one('#drop').plug(Y.Plugin.Drop); drop.drop.on('drop:hit', function(e) { drop.set('innerHTML', 'You dropped: <strong>' + e.drag.get('node').get('innerHTML') + '</strong>'); }); });