0
@@ -624,21 +624,32 @@ Object.extend(Element.Methods, (function() {
0
function cloneDimension(element, source, dimension) {
0
- var d = Element.getDimensions(source), style = { };
0
- style[dimension] = d[dimension] + 'px';
0
+ var style = { }, properties;
0
- var styles = $w('margin padding'),
0
- sides = (dimension === 'height') ? $w('top bottom') : $w('left right');
0
- // Avoiding helpers like $w for speed
0
- for (var i = 0; i < 2; i++) {
0
- for (var j = 0; j < 2; j++) {
0
- property = styles[i] + sides[j].capitalize();
0
- style[property] = (getNumericStyle(element, property) +
0
- getStyleDiff(element, source, property)) + 'px';
0
+ if (dimension === 'height') {
0
+ properties = $w('borderTopWidth marginTop paddingTop ' +
0
+ 'borderBottomWidth marginBottom paddingBottom');
0
+ properties = $w('borderLeftWidth marginLeft paddingLeft ' +
0
+ 'borderRightWidth marginRight paddingRight');
0
+ style[dimension] = Element.getDimensions(source)[dimension];
0
+ // Adjust element border and padding for accurate dimensions and
0
+ // margins for accurate position.
0
+ for (var i = 0, property, value; property = properties[i]; i++) {
0
+ if (property.include('margin')) {
0
+ value = getNumericStyle(element, property);
0
+ style[property] = value + (getNumericStyle(source, property) -
0
+ value = getNumericStyle(source, property);
0
+ style[property] = value + 'px';
0
+ style[dimension] -= value;
0
+ style[dimension] += 'px';
0
Element.setStyle(element, style);
0
@@ -732,30 +743,18 @@ Object.extend(Element.Methods, (function() {
0
delta[0] -= document.body.offsetLeft;
0
delta[1] -= document.body.offsetTop;
0
+ // find page position of source
0
+ var p = Element.viewportOffset(source);
0
+ // set dimensions
and position0
if (options.setWidth) cloneDimension(element, source, 'width');
0
if (options.setHeight) cloneDimension(element, source, 'height');
0
+ element.style.left = (p[0] - delta[0] + options.offsetLeft + 'px');
0
+ element.style.top = (p[1] - delta[1] + options.offsetTop + 'px');
0
- // find page position of source
0
- var p = Element.viewportOffset(source),
0
- borderOffset = ['borderLeftWidth', 'borderTopWidth'].map(
0
- function(style) { return getStyleDiff(element, source, style) });
0
- if (options.setLeft) {
0
- var left = p[0] - delta[0] + borderOffset[0];
0
- if (options.offsetLeft)
0
- left += options.offsetLeft + getNumericStyle(element, 'paddingLeft');
0
- element.style.left = left + 'px';
0
- var top = p[1] - delta[1] + borderOffset[1];
0
- if (options.offsetTop)
0
- top += options.offsetTop + getNumericStyle(element, 'paddingTop');
0
- element.style.top = top + 'px';
Comments
No one has commented yet.