source: extensions/EasyCaptcha/template/jquery.events/jquery.event.drag.live-2.2.js @ 30946

Last change on this file since 30946 was 24215, checked in by mistic100, 11 years ago

add extension EasyCaptcha

File size: 2.4 KB
Line 
1/*!
2 * jquery.event.drag.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
9
10;(function( $ ){
11       
12// local refs (increase compression)
13var $event = $.event,
14// ref the special event config
15drag = $event.special.drag,
16// old drag event add method
17origadd = drag.add,
18// old drag event teradown method
19origteardown = drag.teardown;
20
21// allow events to bubble for delegation
22drag.noBubble = false;
23
24// the namespace for internal live events
25drag.livekey = "livedrag";
26
27// new drop event add method
28drag.add = function( obj ){ 
29        // call the old method
30        origadd.apply( this, arguments );
31        // read the data
32        var data = $.data( this, drag.datakey );
33        // bind the live "draginit" delegator
34        if ( !data.live && obj.selector ){
35                data.live = true;
36                $event.add( this, "draginit."+ drag.livekey, drag.delegate );
37        }
38};
39
40// new drop event teardown method
41drag.teardown = function(){ 
42        // call the old method
43        origteardown.apply( this, arguments );
44        // read the data
45        var data = $.data( this, drag.datakey ) || {};
46        // bind the live "draginit" delegator
47        if ( data.live ){
48                // remove the "live" delegation
49                $event.remove( this, "draginit."+ drag.livekey, drag.delegate );
50                data.live = false;
51        }
52};
53
54// identify potential delegate elements
55drag.delegate = function( event ){
56        // local refs
57        var elems = [], target, 
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("drag") !== 0 )
64                        return;
65                $.each( arr || [], function( i, obj ){
66                        // locate the element to delegate
67                        target = $( event.target ).closest( obj.selector, event.currentTarget )[0];
68                        // no element found
69                        if ( !target ) 
70                                return;
71                        // add an event handler
72                        $event.add( target, obj.origType+'.'+drag.livekey, obj.origHandler || obj.handler, obj.data );
73                        // remember new elements
74                        if ( $.inArray( target, elems ) < 0 )
75                                elems.push( target );           
76                });
77        });
78        // if there are no elements, break
79        if ( !elems.length ) 
80                return false;
81        // return the matched results, and clenup when complete         
82        return $( elems ).bind("dragend."+ drag.livekey, function(){
83                $event.remove( this, "."+ drag.livekey ); // cleanup delegation
84        });
85};
86       
87})( jQuery );
Note: See TracBrowser for help on using the repository browser.