Bug Tracker

Ticket #2171: containment-window-fixed.patch

File containment-window-fixed.patch, 2.5 KB (added by scottgonzalez, 15 years ago)

with fixed position support

  • ui.draggable.ext.js

     
    9090                                        $(document).width(),
    9191                                        ($(document).height() || document.body.parentNode.scrollHeight)
    9292                                ];
     93                        } else if(o._containment == 'window' || o._containment == window) {
     94                                var leftAdjust = Math.max(document.documentElement.scrollLeft, document.body.scrollLeft);
     95                                var topAdjust = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
     96                                o.containment = [
     97                                        leftAdjust,
     98                                        topAdjust,
     99                                        $(window).width() + leftAdjust,
     100                                        $(window).height() + topAdjust
     101                                ];
    93102                        } else { //I'm a node, so compute top/left/right/bottom
    94103
    95104                                var ce = $(o._containment)[0];
     
    112121                        var self = ui.instance;
    113122                       
    114123                        if(c.constructor == Array) {
    115                                 if((ui.absolutePosition.left < c[0])) self.position.left = c[0] - (self.offset.left - self.clickOffset.left);
    116                                 if((ui.absolutePosition.top < c[1])) self.position.top = c[1] - (self.offset.top - self.clickOffset.top);
    117                                 if(ui.absolutePosition.left - c[2] + self.helperProportions.width >= 0) self.position.left = c[2] - (self.offset.left - self.clickOffset.left) - self.helperProportions.width;
    118                                 if(ui.absolutePosition.top - c[3] + self.helperProportions.height >= 0) self.position.top = c[3] - (self.offset.top - self.clickOffset.top) - self.helperProportions.height;
     124                                if((ui.absolutePosition.left < c[0])) self.position.left = c[0] - (self.offset.left - self.clickOffset.left) - ( self.helperFixed ? Math.max(document.documentElement.scrollLeft, document.body.scrollLeft) : 0 );
     125                                if((ui.absolutePosition.top < c[1])) self.position.top = c[1] - (self.offset.top - self.clickOffset.top) - ( self.helperFixed ? Math.max(document.documentElement.scrollTop, document.body.scrollTop) : 0 );
     126                                if(ui.absolutePosition.left - c[2] + self.helperProportions.width >= 0) self.position.left = c[2] - (self.offset.left - self.clickOffset.left) - self.helperProportions.width - ( self.helperFixed ? Math.max(document.documentElement.scrollLeft, document.body.scrollLeft) : 0 );
     127                                if(ui.absolutePosition.top - c[3] + self.helperProportions.height >= 0) self.position.top = c[3] - (self.offset.top - self.clickOffset.top) - self.helperProportions.height - ( self.helperFixed ? Math.max(document.documentElement.scrollTop, document.body.scrollTop) : 0 );
    119128                        } else {
    120129                                if((ui.position.left < c.left)) self.position.left = c.left;
    121130                                if((ui.position.top < c.top)) self.position.top = c.top;