nexus site path corrected
[portal.git] / ecomp-portal-FE / client / bower_components / jquery.event.drag-new / event.drop / jquery.event.drop.live.js
1 /*! 
2  * jquery.event.drop.live - v 2.2
3  * Copyright (c) 2010 Three Dub Media - http://threedubmedia.com
4  * Open Source MIT License - http://threedubmedia.com/code/license
5  */
6 // Created: 2010-06-07
7 // Updated: 2012-05-21
8 // REQUIRES: jquery 1.7.x, event.drag 2.2, event.drop 2.2
9
10 ;(function($){ // secure $ jQuery alias
11
12 // local refs (increase compression)
13 var $event = $.event,
14 // ref the drop special event config
15 drop = $event.special.drop,
16 // old drop event add method
17 origadd = drop.add,
18 // old drop event teradown method
19 origteardown = drop.teardown;
20
21 // allow events to bubble for delegation
22 drop.noBubble = false;
23
24 // the namespace for internal live events
25 drop.livekey = "livedrop";
26
27 // new drop event add method
28 drop.add = function( obj ){ 
29         // call the old method
30         origadd.apply( this, arguments );
31         // read the data
32         var data = $.data( this, drop.datakey );
33         // bind the live "dropinit" delegator
34         if ( !data.live && obj.selector ){
35                 data.live = true;
36                 $event.add( this, "dropinit."+ drop.livekey, drop.delegate );
37         }
38 };
39
40 // new drop event teardown method
41 drop.teardown = function(){ 
42         // call the old method
43         origteardown.apply( this, arguments );
44         // read the data
45         var data = $.data( this, drop.datakey ) || {};
46         // remove the live "dropinit" delegator
47         if ( data.live ){
48                 // remove the "live" delegation
49                 $event.remove( this, "dropinit", drop.delegate );
50                 data.live = false;
51         }
52 };
53
54 // identify potential delegate elements
55 drop.delegate = function( event, dd ){
56         // local refs
57         var elems = [], $targets, 
58         // element event structure
59         events = $.data( this, "events" ) || {};
60         // query live events
61         $.each( events || [], function( key, arr ){
62                 // no event type matches
63                 if ( key.indexOf("drop") !== 0 )
64                         return;
65                 $.each( arr, function( i, obj ){
66                         // locate the elements to delegate
67                         $targets = $( event.currentTarget ).find( obj.selector );
68                         // no element found
69                         if ( !$targets.length ) 
70                                 return;
71                         // take each target...
72                         $targets.each(function(){
73                                 // add an event handler
74                                 $event.add( this, obj.origType +'.'+ drop.livekey, obj.origHandler || obj.handler, obj.data );
75                                 // remember new elements
76                                 if ( $.inArray( this, elems ) < 0 )
77                                         elems.push( this );     
78                         });     
79                 });
80         });
81         // may not exist when artifically triggering dropinit event
82         if ( dd )
83                 // clean-up after the interaction ends
84                 $event.add( dd.drag, "dragend."+drop.livekey, function(){
85                         $.each( elems.concat( this ), function(){
86                                 $event.remove( this, '.'+ drop.livekey );                                                       
87                         });
88                 });
89         //drop.delegates.push( elems );
90         return elems.length ? $( elems ) : false;
91 };
92
93 })( jQuery ); // confine scope