Ticket #6921: abs_wip.patch

File abs_wip.patch, 2.0 kB (added by haysmark, 6 months ago)

Possible fix for dojo._abs.

  • _base/html.js

     
    924924 
    925925                // targetBoxType == "border-box" 
    926926                var db = d.body(); 
    927                 if(d.isIE || (d.isFF >= 3)){ 
     927                if(d.isIE){ 
    928928                        var client = node.getBoundingClientRect(); 
    929929                        var offset = (d.isIE) ? d._getIeDocumentElementOffset() : { x: 0, y: 0}; 
    930930                        ret.x = client.left - offset.x; 
    931931                        ret.y = client.top - offset.y; 
    932                 }else if(ownerDocument["getBoxObjectFor"]){ 
    933                         // mozilla 
    934                         var bo = ownerDocument.getBoxObjectFor(node), 
    935                                 b = d._getBorderExtents(node); 
    936                         ret.x = bo.x - b.l - _sumAncestorProperties(node, "scrollLeft"); 
    937                         ret.y = bo.y - b.t - _sumAncestorProperties(node, "scrollTop"); 
    938932                }else{ 
    939933                        if(node["offsetParent"]){ 
    940934                                var endNode; 
     
    951945                                }else{ 
    952946                                        endNode = db.parentNode; 
    953947                                } 
    954                                 if(node.parentNode != db){ 
    955                                         var nd = node; 
    956                                         if(d.isOpera){ nd = db; } 
    957                                         ret.x -= _sumAncestorProperties(nd, "scrollLeft"); 
    958                                         ret.y -= _sumAncestorProperties(nd, "scrollTop"); 
    959                                 } 
     948                                // Opera seems to be double counting for some elements 
     949                                ret.x -= _sumAncestorProperties(node, "scrollLeft"); 
     950                                ret.y -= _sumAncestorProperties(node, "scrollTop"); 
    960951                                var curnode = node; 
    961952                                do{ 
    962953                                        var n = curnode.offsetLeft; 
     
    968959                                        } 
    969960                                        var t = curnode.offsetTop; 
    970961                                        ret.y += isNaN(t) ? 0 : t; 
    971                                         if(d.isSafari && curnode != node){ 
     962                                        if(curnode != node){ 
    972963                                                var cs = gcs(curnode); 
    973                                                 ret.x += px(curnode, cs.borderLeftWidth); 
    974                                                 ret.y += px(curnode, cs.borderTopWidth); 
     964                                                if(d.isSafari){ 
     965                                                        ret.x += px(curnode, cs.borderLeftWidth); 
     966                                                        ret.y += px(curnode, cs.borderTopWidth); 
     967                                                }else if(d.isMozilla && curnode != db){ 
     968                                                        ret.x += px(curnode, cs.paddingLeft)+px(curnode, cs.marginLeft); 
     969                                                        ret.y += px(curnode, cs.paddingTop)+px(curnode, cs.marginTop); 
     970                                                } 
    975971                                        } 
    976972                                        curnode = curnode.offsetParent; 
    977973                                }while((curnode != endNode) && curnode);