Ruby on Rails | Screencasts | Download | Documentation | Weblog | Community | Source

Ticket #3583: drop_notification_and_new_hovering.diff

File drop_notification_and_new_hovering.diff, 3.1 kB (added by rob.mayhew@gmail.com, 2 years ago)

PATCH Draggable Event notification. OnHoverStart, onHoverEnd, onDrop

  • src/dragdrop.js

    old new  
    6767  }, 
    6868 
    6969  show: function(point, element) { 
    70     if(!this.drops.length) return
    71      
     70    if(!this.drops.length) return 0
     71    var affectedDrop = null; 
    7272    if(this.last_active) this.deactivate(this.last_active); 
    7373    this.drops.each( function(drop) { 
    74       if(Droppables.isAffected(point, element, drop)) { 
     74      if(Droppables.isAffected(point, element, drop)) { 
     75        affectedDrop = drop; 
    7576        if(drop.onHover) 
    7677           drop.onHover(element, drop.element, Position.overlap(drop.overlap, drop.element)); 
    7778        if(drop.greedy) {  
     
    7980          throw $break; 
    8081        } 
    8182      } 
    82     }); 
     83    } 
     84    ); 
     85    if(affectedDrop) 
     86        return affectedDrop.element; 
     87    return null; 
    8388  }, 
    8489 
    8590  fire: function(event, element) { 
     
    172177  }, 
    173178   
    174179  _cacheObserverCallbacks: function() { 
    175     ['onStart','onEnd','onDrag'].each( function(eventName) { 
     180    ['onStart','onEnd','onDrag','onNothing'].each( function(eventName) { 
    176181      Draggables[eventName+'Count'] = Draggables.observers.select( 
    177182        function(o) { return o[eventName]; } 
    178183      ).length; 
     
    185190var Draggable = Class.create(); 
    186191Draggable.prototype = { 
    187192  initialize: function(element) { 
    188     var options = Object.extend({ 
     193    var options = Object.extend({ 
     194      hoveringEle: null, 
    189195      handle: false, 
    190196      starteffect: function(element) {  
    191197        new Effect.Opacity(element, {duration:0.2, from:1.0, to:0.7});  
     
    288294  updateDrag: function(event, pointer) { 
    289295    if(!this.dragging) this.startDrag(event); 
    290296    Position.prepare(); 
    291     Droppables.show(pointer, this.element); 
     297    var result = Droppables.show(pointer, this.element); 
     298    if(this.hoveringEle && !result){         
     299        if(this.options.onHoverEnd) 
     300            this.options.onHoverEnd(this.element);         
     301    } 
     302    if(result && (!this.hoveringEle || this.hoveringEle.id != result.id)){         
     303        if(this.options.onHoverStart) 
     304            this.options.onHoverStart(this.element, result); 
     305    }     
     306    this.hoveringEle=(result!=null)?result:null; 
    292307    Draggables.notify('onDrag', this, event); 
    293308    this.draw(pointer); 
    294309    if(this.options.change) this.options.change(this); 
     
    326341 
    327342    if(success) Droppables.fire(event, this.element); 
    328343    Draggables.notify('onEnd', this, event); 
    329  
     344    if(this.options.onDrop)this.options.onDrop(this.element, this.hoveringEle); 
    330345    var revert = this.options.revert; 
    331346    if(revert && typeof revert == 'function') revert = revert(this.element); 
    332347     
     
    423438     
    424439    if(this.options.change) this.options.change(this); 
    425440  } 
    426 
     441
     442 
    427443 
     444 
    428445/*--------------------------------------------------------------------------*/ 
    429446 
    430447var SortableObserver = Class.create(); 
     
    550567    this.sortables.push(options); 
    551568 
    552569    // for onupdate 
    553     Draggables.addObserver(new SortableObserver(element, options.onUpdate)); 
     570    Draggables.addObserver(new SortableObserver(element, options.onUpdate)); 
     571     
    554572 
    555573  }, 
    556574