diff -r 322d0feea350 -r 89ef5ed3c48b src/cm/media/js/lib/yui/yui_3.10.3/docs/dd/delegate-drop.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/cm/media/js/lib/yui/yui_3.10.3/docs/dd/delegate-drop.html Tue Jul 16 14:29:46 2013 +0200 @@ -0,0 +1,504 @@ + + + + + Example: Drag Delegation with a Drop Target + + + + + + + + + + +
+
+

+
+ + Jump to Table of Contents + + +

Example: Drag Delegation with a Drop Target

+
+
+
+
+

This example shows how to create multiple draggable items efficiently, still allowing for Drop Targets.

+
+ +
+ + +
+ +
+
    +
  • Item #1
  • +
  • Item #2
  • +
  • Item #3
  • +
  • Item #4
  • +
  • Item #5
  • +
  • Item #6
  • +
  • Item #7
  • +
  • Item #8
  • +
  • Item #9
  • +
  • Item #10
  • +
+
+ +
Drop on me
+
+ + + + + + +
+ +

Setting up the Delegate container and items

+

First we need to create an HTML Node to act as the delegate container and give it some nodes to make draggable.

+ +
<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>
+ + +

Now we give them some CSS to make them visible.

+ +
#demo {
+    width: 200px;
+}
+#demo ul li {
+    border: 1px solid black;
+    background-color: #8DD5E7;
+    cursor: move;
+    margin: 3px;
+    list-style-type: none;
+    z-index: 2;
+    zoom: 1;
+}
+#play {
+    position: relative;
+    zoom: 1;
+}
+#drop {
+    border: 1px solid black;
+    background-color: #eee;
+    height: 50px;
+    width: 200px;
+    position: absolute;
+    bottom: 5px;
+    right: 5px;
+    zoom: 1;
+}
+#drop strong {
+    font-weight: bold;
+}
+#drop.yui3-dd-drop-over {
+    background-color: #ccc;
+}
+ + +

Setting up the YUI Instance

+

Now we need to create our YUI instance and tell it to load the dd-delegate module.

+ +
YUI().use('dd-delegate', 'dd-drop-plugin');
+ + +

Making the Nodes draggable

+

Now that we have a YUI instance with the dd-delegate module, we need to instantiate the Delegate instance on this container and nodes.

+ +
YUI().use('dd-delegate', 'dd-drop-plugin', function(Y) {
+    var del = new Y.DD.Delegate({
+        container: '#demo',
+        nodes: 'li'
+    });
+});
+ + +

Listening to some events

+

The Delegate object is a bubble target for the DD.Drag instances. So you can listen on it for all drag related events.

+ +
YUI().use('dd-delegate', 'dd-drop-plugin', function(Y) {
+    var del = new Y.DD.Delegate({
+        container: '#demo',
+        nodes: 'li'
+    });
+
+    del.on('drag:end', function(e) {
+        del.get('currentNode').setStyles({
+            top: 0,
+            left: 0
+        });
+    });
+
+});
+ + +

Adding a Drop Target

+

Now we can add a normal Drop Target to the page.

+ +
var drop = Y.one('#drop').plug(Y.Plugin.Drop);
+ + +

Once that is created, we can add a drop:hit listener and manipulate the drag instance as we normally would.

+ +
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>');
+});
+ + +

Full Javascript Source

+ +
YUI().use('dd-delegate', 'dd-drop-plugin', function(Y) {
+    var del = new Y.DD.Delegate({
+        container: '#demo',
+        nodes: 'li'
+    });
+
+    del.on('drag:end', function(e) {
+        del.get('currentNode').setStyles({
+            top: 0,
+            left: 0
+        });
+    });
+
+    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>');
+    });
+    
+});
+ +
+
+
+ +
+ +
+
+
+ + + + + + + + + + +