testing/mochitest/tests/MochiKit-1.4.2/MochiKit/Style.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/testing/mochitest/tests/MochiKit-1.4.2/MochiKit/Style.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,594 @@
     1.4 +/***
     1.5 +
     1.6 +MochiKit.Style 1.4.2
     1.7 +
     1.8 +See <http://mochikit.com/> for documentation, downloads, license, etc.
     1.9 +
    1.10 +(c) 2005-2006 Bob Ippolito, Beau Hartshorne.  All rights Reserved.
    1.11 +
    1.12 +***/
    1.13 +
    1.14 +MochiKit.Base._deps('Style', ['Base', 'DOM']);
    1.15 +
    1.16 +MochiKit.Style.NAME = 'MochiKit.Style';
    1.17 +MochiKit.Style.VERSION = '1.4.2';
    1.18 +MochiKit.Style.__repr__ = function () {
    1.19 +    return '[' + this.NAME + ' ' + this.VERSION + ']';
    1.20 +};
    1.21 +MochiKit.Style.toString = function () {
    1.22 +    return this.__repr__();
    1.23 +};
    1.24 +
    1.25 +MochiKit.Style.EXPORT_OK = [];
    1.26 +
    1.27 +MochiKit.Style.EXPORT = [
    1.28 +    'setStyle',
    1.29 +    'setOpacity',
    1.30 +    'getStyle',
    1.31 +    'getElementDimensions',
    1.32 +    'elementDimensions', // deprecated
    1.33 +    'setElementDimensions',
    1.34 +    'getElementPosition',
    1.35 +    'elementPosition', // deprecated
    1.36 +    'setElementPosition',
    1.37 +    "makePositioned",
    1.38 +    "undoPositioned",
    1.39 +    "makeClipping",
    1.40 +    "undoClipping",
    1.41 +    'setDisplayForElement',
    1.42 +    'hideElement',
    1.43 +    'showElement',
    1.44 +    'getViewportDimensions',
    1.45 +    'getViewportPosition',
    1.46 +    'Dimensions',
    1.47 +    'Coordinates'
    1.48 +];
    1.49 +
    1.50 +
    1.51 +/*
    1.52 +
    1.53 +    Dimensions
    1.54 +
    1.55 +*/
    1.56 +/** @id MochiKit.Style.Dimensions */
    1.57 +MochiKit.Style.Dimensions = function (w, h) {
    1.58 +    this.w = w;
    1.59 +    this.h = h;
    1.60 +};
    1.61 +
    1.62 +MochiKit.Style.Dimensions.prototype.__repr__ = function () {
    1.63 +    var repr = MochiKit.Base.repr;
    1.64 +    return '{w: '  + repr(this.w) + ', h: ' + repr(this.h) + '}';
    1.65 +};
    1.66 +
    1.67 +MochiKit.Style.Dimensions.prototype.toString = function () {
    1.68 +    return this.__repr__();
    1.69 +};
    1.70 +
    1.71 +
    1.72 +/*
    1.73 +
    1.74 +    Coordinates
    1.75 +
    1.76 +*/
    1.77 +/** @id MochiKit.Style.Coordinates */
    1.78 +MochiKit.Style.Coordinates = function (x, y) {
    1.79 +    this.x = x;
    1.80 +    this.y = y;
    1.81 +};
    1.82 +
    1.83 +MochiKit.Style.Coordinates.prototype.__repr__ = function () {
    1.84 +    var repr = MochiKit.Base.repr;
    1.85 +    return '{x: '  + repr(this.x) + ', y: ' + repr(this.y) + '}';
    1.86 +};
    1.87 +
    1.88 +MochiKit.Style.Coordinates.prototype.toString = function () {
    1.89 +    return this.__repr__();
    1.90 +};
    1.91 +
    1.92 +
    1.93 +MochiKit.Base.update(MochiKit.Style, {
    1.94 +
    1.95 +    /** @id MochiKit.Style.getStyle */
    1.96 +    getStyle: function (elem, cssProperty) {
    1.97 +        var dom = MochiKit.DOM;
    1.98 +        var d = dom._document;
    1.99 +
   1.100 +        elem = dom.getElement(elem);
   1.101 +        cssProperty = MochiKit.Base.camelize(cssProperty);
   1.102 +
   1.103 +        if (!elem || elem == d) {
   1.104 +            return undefined;
   1.105 +        }
   1.106 +        if (cssProperty == 'opacity' && typeof(elem.filters) != 'undefined') {
   1.107 +            var opacity = (MochiKit.Style.getStyle(elem, 'filter') || '').match(/alpha\(opacity=(.*)\)/);
   1.108 +            if (opacity && opacity[1]) {
   1.109 +                return parseFloat(opacity[1]) / 100;
   1.110 +            }
   1.111 +            return 1.0;
   1.112 +        }
   1.113 +        if (cssProperty == 'float' || cssProperty == 'cssFloat' || cssProperty == 'styleFloat') {
   1.114 +            if (elem.style["float"]) {
   1.115 +                return elem.style["float"];
   1.116 +            } else if (elem.style.cssFloat) {
   1.117 +                return elem.style.cssFloat;
   1.118 +            } else if (elem.style.styleFloat) {
   1.119 +                return elem.style.styleFloat;
   1.120 +            } else {
   1.121 +                return "none";
   1.122 +            }
   1.123 +        }
   1.124 +        var value = elem.style ? elem.style[cssProperty] : null;
   1.125 +        if (!value) {
   1.126 +            if (d.defaultView && d.defaultView.getComputedStyle) {
   1.127 +                var css = d.defaultView.getComputedStyle(elem, null);
   1.128 +                cssProperty = cssProperty.replace(/([A-Z])/g, '-$1'
   1.129 +                    ).toLowerCase(); // from dojo.style.toSelectorCase
   1.130 +                value = css ? css.getPropertyValue(cssProperty) : null;
   1.131 +            } else if (elem.currentStyle) {
   1.132 +                value = elem.currentStyle[cssProperty];
   1.133 +                if (/^\d/.test(value) && !/px$/.test(value) && cssProperty != 'fontWeight') {
   1.134 +                    /* Convert to px using an hack from Dean Edwards */
   1.135 +                    var left = elem.style.left;
   1.136 +                    var rsLeft = elem.runtimeStyle.left;
   1.137 +                    elem.runtimeStyle.left = elem.currentStyle.left;
   1.138 +                    elem.style.left = value || 0;
   1.139 +                    value = elem.style.pixelLeft + "px";
   1.140 +                    elem.style.left = left;
   1.141 +                    elem.runtimeStyle.left = rsLeft;
   1.142 +                }
   1.143 +            }
   1.144 +        }
   1.145 +        if (cssProperty == 'opacity') {
   1.146 +            value = parseFloat(value);
   1.147 +        }
   1.148 +
   1.149 +        if (/Opera/.test(navigator.userAgent) && (MochiKit.Base.findValue(['left', 'top', 'right', 'bottom'], cssProperty) != -1)) {
   1.150 +            if (MochiKit.Style.getStyle(elem, 'position') == 'static') {
   1.151 +                value = 'auto';
   1.152 +            }
   1.153 +        }
   1.154 +
   1.155 +        return value == 'auto' ? null : value;
   1.156 +    },
   1.157 +
   1.158 +    /** @id MochiKit.Style.setStyle */
   1.159 +    setStyle: function (elem, style) {
   1.160 +        elem = MochiKit.DOM.getElement(elem);
   1.161 +        for (var name in style) {
   1.162 +            switch (name) {
   1.163 +            case 'opacity':
   1.164 +                MochiKit.Style.setOpacity(elem, style[name]);
   1.165 +                break;
   1.166 +            case 'float':
   1.167 +            case 'cssFloat':
   1.168 +            case 'styleFloat':
   1.169 +                if (typeof(elem.style["float"]) != "undefined") {
   1.170 +                    elem.style["float"] = style[name];
   1.171 +                } else if (typeof(elem.style.cssFloat) != "undefined") {
   1.172 +                    elem.style.cssFloat = style[name];
   1.173 +                } else {
   1.174 +                    elem.style.styleFloat = style[name];
   1.175 +                }
   1.176 +                break;
   1.177 +            default:
   1.178 +                elem.style[MochiKit.Base.camelize(name)] = style[name];
   1.179 +            }
   1.180 +        }
   1.181 +    },
   1.182 +
   1.183 +    /** @id MochiKit.Style.setOpacity */
   1.184 +    setOpacity: function (elem, o) {
   1.185 +        elem = MochiKit.DOM.getElement(elem);
   1.186 +        var self = MochiKit.Style;
   1.187 +        if (o == 1) {
   1.188 +            var toSet = /Gecko/.test(navigator.userAgent) && !(/Konqueror|AppleWebKit|KHTML/.test(navigator.userAgent));
   1.189 +            elem.style["opacity"] = toSet ? 0.999999 : 1.0;
   1.190 +            if (/MSIE/.test(navigator.userAgent)) {
   1.191 +                elem.style['filter'] =
   1.192 +                    self.getStyle(elem, 'filter').replace(/alpha\([^\)]*\)/gi, '');
   1.193 +            }
   1.194 +        } else {
   1.195 +            if (o < 0.00001) {
   1.196 +                o = 0;
   1.197 +            }
   1.198 +            elem.style["opacity"] = o;
   1.199 +            if (/MSIE/.test(navigator.userAgent)) {
   1.200 +                elem.style['filter'] =
   1.201 +                    self.getStyle(elem, 'filter').replace(/alpha\([^\)]*\)/gi, '') + 'alpha(opacity=' + o * 100 + ')';
   1.202 +            }
   1.203 +        }
   1.204 +    },
   1.205 +
   1.206 +    /*
   1.207 +
   1.208 +        getElementPosition is adapted from YAHOO.util.Dom.getXY v0.9.0.
   1.209 +        Copyright: Copyright (c) 2006, Yahoo! Inc. All rights reserved.
   1.210 +        License: BSD, http://developer.yahoo.net/yui/license.txt
   1.211 +
   1.212 +    */
   1.213 +
   1.214 +    /** @id MochiKit.Style.getElementPosition */
   1.215 +    getElementPosition: function (elem, /* optional */relativeTo) {
   1.216 +        var self = MochiKit.Style;
   1.217 +        var dom = MochiKit.DOM;
   1.218 +        elem = dom.getElement(elem);
   1.219 +
   1.220 +        if (!elem ||
   1.221 +            (!(elem.x && elem.y) &&
   1.222 +            (!elem.parentNode === null ||
   1.223 +            self.getStyle(elem, 'display') == 'none'))) {
   1.224 +            return undefined;
   1.225 +        }
   1.226 +
   1.227 +        var c = new self.Coordinates(0, 0);
   1.228 +        var box = null;
   1.229 +        var parent = null;
   1.230 +
   1.231 +        var d = MochiKit.DOM._document;
   1.232 +        var de = d.documentElement;
   1.233 +        var b = d.body;
   1.234 +
   1.235 +        if (!elem.parentNode && elem.x && elem.y) {
   1.236 +            /* it's just a MochiKit.Style.Coordinates object */
   1.237 +            c.x += elem.x || 0;
   1.238 +            c.y += elem.y || 0;
   1.239 +        } else if (elem.getBoundingClientRect) { // IE shortcut
   1.240 +            /*
   1.241 +
   1.242 +                The IE shortcut can be off by two. We fix it. See:
   1.243 +                http://msdn.microsoft.com/workshop/author/dhtml/reference/methods/getboundingclientrect.asp
   1.244 +
   1.245 +                This is similar to the method used in
   1.246 +                MochiKit.Signal.Event.mouse().
   1.247 +
   1.248 +            */
   1.249 +            box = elem.getBoundingClientRect();
   1.250 +
   1.251 +            c.x += box.left +
   1.252 +                (de.scrollLeft || b.scrollLeft) -
   1.253 +                (de.clientLeft || 0);
   1.254 +
   1.255 +            c.y += box.top +
   1.256 +                (de.scrollTop || b.scrollTop) -
   1.257 +                (de.clientTop || 0);
   1.258 +
   1.259 +        } else if (elem.offsetParent) {
   1.260 +            c.x += elem.offsetLeft;
   1.261 +            c.y += elem.offsetTop;
   1.262 +            parent = elem.offsetParent;
   1.263 +
   1.264 +            if (parent != elem) {
   1.265 +                while (parent) {
   1.266 +                    c.x += parseInt(parent.style.borderLeftWidth) || 0;
   1.267 +                    c.y += parseInt(parent.style.borderTopWidth) || 0;
   1.268 +                    c.x += parent.offsetLeft;
   1.269 +                    c.y += parent.offsetTop;
   1.270 +                    parent = parent.offsetParent;
   1.271 +                }
   1.272 +            }
   1.273 +
   1.274 +            /*
   1.275 +
   1.276 +                Opera < 9 and old Safari (absolute) incorrectly account for
   1.277 +                body offsetTop and offsetLeft.
   1.278 +
   1.279 +            */
   1.280 +            var ua = navigator.userAgent.toLowerCase();
   1.281 +            if ((typeof(opera) != 'undefined' &&
   1.282 +                parseFloat(opera.version()) < 9) ||
   1.283 +                (ua.indexOf('AppleWebKit') != -1 &&
   1.284 +                self.getStyle(elem, 'position') == 'absolute')) {
   1.285 +
   1.286 +                c.x -= b.offsetLeft;
   1.287 +                c.y -= b.offsetTop;
   1.288 +
   1.289 +            }
   1.290 +
   1.291 +            // Adjust position for strange Opera scroll bug
   1.292 +            if (elem.parentNode) {
   1.293 +                parent = elem.parentNode;
   1.294 +            } else {
   1.295 +                parent = null;
   1.296 +            }
   1.297 +            while (parent) {
   1.298 +                var tagName = parent.tagName.toUpperCase();
   1.299 +                if (tagName === 'BODY' || tagName === 'HTML') {
   1.300 +                    break;
   1.301 +                }
   1.302 +                var disp = self.getStyle(parent, 'display');
   1.303 +                // Handle strange Opera bug for some display
   1.304 +                if (disp.search(/^inline|table-row.*$/i)) {
   1.305 +                    c.x -= parent.scrollLeft;
   1.306 +                    c.y -= parent.scrollTop;
   1.307 +                }
   1.308 +                if (parent.parentNode) {
   1.309 +                    parent = parent.parentNode;
   1.310 +                } else {
   1.311 +                    parent = null;
   1.312 +                }
   1.313 +            }
   1.314 +        }
   1.315 +
   1.316 +        if (typeof(relativeTo) != 'undefined') {
   1.317 +            relativeTo = arguments.callee(relativeTo);
   1.318 +            if (relativeTo) {
   1.319 +                c.x -= (relativeTo.x || 0);
   1.320 +                c.y -= (relativeTo.y || 0);
   1.321 +            }
   1.322 +        }
   1.323 +
   1.324 +        return c;
   1.325 +    },
   1.326 +
   1.327 +    /** @id MochiKit.Style.setElementPosition */
   1.328 +    setElementPosition: function (elem, newPos/* optional */, units) {
   1.329 +        elem = MochiKit.DOM.getElement(elem);
   1.330 +        if (typeof(units) == 'undefined') {
   1.331 +            units = 'px';
   1.332 +        }
   1.333 +        var newStyle = {};
   1.334 +        var isUndefNull = MochiKit.Base.isUndefinedOrNull;
   1.335 +        if (!isUndefNull(newPos.x)) {
   1.336 +            newStyle['left'] = newPos.x + units;
   1.337 +        }
   1.338 +        if (!isUndefNull(newPos.y)) {
   1.339 +            newStyle['top'] = newPos.y + units;
   1.340 +        }
   1.341 +        MochiKit.DOM.updateNodeAttributes(elem, {'style': newStyle});
   1.342 +    },
   1.343 +
   1.344 +    /** @id MochiKit.Style.makePositioned */
   1.345 +    makePositioned: function (element) {
   1.346 +        element = MochiKit.DOM.getElement(element);
   1.347 +        var pos = MochiKit.Style.getStyle(element, 'position');
   1.348 +        if (pos == 'static' || !pos) {
   1.349 +            element.style.position = 'relative';
   1.350 +            // Opera returns the offset relative to the positioning context,
   1.351 +            // when an element is position relative but top and left have
   1.352 +            // not been defined
   1.353 +            if (/Opera/.test(navigator.userAgent)) {
   1.354 +                element.style.top = 0;
   1.355 +                element.style.left = 0;
   1.356 +            }
   1.357 +        }
   1.358 +    },
   1.359 +
   1.360 +    /** @id MochiKit.Style.undoPositioned */
   1.361 +    undoPositioned: function (element) {
   1.362 +        element = MochiKit.DOM.getElement(element);
   1.363 +        if (element.style.position == 'relative') {
   1.364 +            element.style.position = element.style.top = element.style.left = element.style.bottom = element.style.right = '';
   1.365 +        }
   1.366 +    },
   1.367 +
   1.368 +    /** @id MochiKit.Style.makeClipping */
   1.369 +    makeClipping: function (element) {
   1.370 +        element = MochiKit.DOM.getElement(element);
   1.371 +        var s = element.style;
   1.372 +        var oldOverflow = { 'overflow': s.overflow,
   1.373 +                            'overflow-x': s.overflowX,
   1.374 +                            'overflow-y': s.overflowY };
   1.375 +        if ((MochiKit.Style.getStyle(element, 'overflow') || 'visible') != 'hidden') {
   1.376 +            element.style.overflow = 'hidden';
   1.377 +            element.style.overflowX = 'hidden';
   1.378 +            element.style.overflowY = 'hidden';
   1.379 +        }
   1.380 +        return oldOverflow;
   1.381 +    },
   1.382 +
   1.383 +    /** @id MochiKit.Style.undoClipping */
   1.384 +    undoClipping: function (element, overflow) {
   1.385 +        element = MochiKit.DOM.getElement(element);
   1.386 +        if (typeof(overflow) == 'string') {
   1.387 +            element.style.overflow = overflow;
   1.388 +        } else if (overflow != null) {
   1.389 +            element.style.overflow = overflow['overflow'];
   1.390 +            element.style.overflowX = overflow['overflow-x'];
   1.391 +            element.style.overflowY = overflow['overflow-y'];
   1.392 +        }
   1.393 +    },
   1.394 +
   1.395 +    /** @id MochiKit.Style.getElementDimensions */
   1.396 +    getElementDimensions: function (elem, contentSize/*optional*/) {
   1.397 +        var self = MochiKit.Style;
   1.398 +        var dom = MochiKit.DOM;
   1.399 +        if (typeof(elem.w) == 'number' || typeof(elem.h) == 'number') {
   1.400 +            return new self.Dimensions(elem.w || 0, elem.h || 0);
   1.401 +        }
   1.402 +        elem = dom.getElement(elem);
   1.403 +        if (!elem) {
   1.404 +            return undefined;
   1.405 +        }
   1.406 +        var disp = self.getStyle(elem, 'display');
   1.407 +        // display can be empty/undefined on WebKit/KHTML
   1.408 +        if (disp == 'none' || disp == '' || typeof(disp) == 'undefined') {
   1.409 +            var s = elem.style;
   1.410 +            var originalVisibility = s.visibility;
   1.411 +            var originalPosition = s.position;
   1.412 +            var originalDisplay = s.display;
   1.413 +            s.visibility = 'hidden';
   1.414 +            s.position = 'absolute';
   1.415 +            s.display = self._getDefaultDisplay(elem);
   1.416 +            var originalWidth = elem.offsetWidth;
   1.417 +            var originalHeight = elem.offsetHeight;
   1.418 +            s.display = originalDisplay;
   1.419 +            s.position = originalPosition;
   1.420 +            s.visibility = originalVisibility;
   1.421 +        } else {
   1.422 +            originalWidth = elem.offsetWidth || 0;
   1.423 +            originalHeight = elem.offsetHeight || 0;
   1.424 +        }
   1.425 +        if (contentSize) {
   1.426 +            var tableCell = 'colSpan' in elem && 'rowSpan' in elem;
   1.427 +            var collapse = (tableCell && elem.parentNode && self.getStyle(
   1.428 +                    elem.parentNode, 'borderCollapse') == 'collapse')
   1.429 +            if (collapse) {
   1.430 +                if (/MSIE/.test(navigator.userAgent)) {
   1.431 +                    var borderLeftQuota = elem.previousSibling? 0.5 : 1;
   1.432 +                    var borderRightQuota = elem.nextSibling? 0.5 : 1;
   1.433 +                }
   1.434 +                else {
   1.435 +                    var borderLeftQuota = 0.5;
   1.436 +                    var borderRightQuota = 0.5;
   1.437 +                }
   1.438 +            } else {
   1.439 +                var borderLeftQuota = 1;
   1.440 +                var borderRightQuota = 1;
   1.441 +            }
   1.442 +            originalWidth -= Math.round(
   1.443 +                (parseFloat(self.getStyle(elem, 'paddingLeft')) || 0)
   1.444 +              + (parseFloat(self.getStyle(elem, 'paddingRight')) || 0)
   1.445 +              + borderLeftQuota *
   1.446 +                (parseFloat(self.getStyle(elem, 'borderLeftWidth')) || 0)
   1.447 +              + borderRightQuota *
   1.448 +                (parseFloat(self.getStyle(elem, 'borderRightWidth')) || 0)
   1.449 +            );
   1.450 +            if (tableCell) {
   1.451 +                if (/Opera/.test(navigator.userAgent)
   1.452 +                    && !/Konqueror|AppleWebKit|KHTML/.test(navigator.userAgent)) {
   1.453 +                    var borderHeightQuota = 0;
   1.454 +                } else if (/MSIE/.test(navigator.userAgent)) {
   1.455 +                    var borderHeightQuota = 1;
   1.456 +                } else {
   1.457 +                    var borderHeightQuota = collapse? 0.5 : 1;
   1.458 +                }
   1.459 +            } else {
   1.460 +                var borderHeightQuota = 1;
   1.461 +            }
   1.462 +            originalHeight -= Math.round(
   1.463 +                (parseFloat(self.getStyle(elem, 'paddingTop')) || 0)
   1.464 +              + (parseFloat(self.getStyle(elem, 'paddingBottom')) || 0)
   1.465 +              + borderHeightQuota * (
   1.466 +                (parseFloat(self.getStyle(elem, 'borderTopWidth')) || 0)
   1.467 +              + (parseFloat(self.getStyle(elem, 'borderBottomWidth')) || 0))
   1.468 +            );
   1.469 +        }
   1.470 +        return new self.Dimensions(originalWidth, originalHeight);
   1.471 +    },
   1.472 +
   1.473 +    /** @id MochiKit.Style.setElementDimensions */
   1.474 +    setElementDimensions: function (elem, newSize/* optional */, units) {
   1.475 +        elem = MochiKit.DOM.getElement(elem);
   1.476 +        if (typeof(units) == 'undefined') {
   1.477 +            units = 'px';
   1.478 +        }
   1.479 +        var newStyle = {};
   1.480 +        var isUndefNull = MochiKit.Base.isUndefinedOrNull;
   1.481 +        if (!isUndefNull(newSize.w)) {
   1.482 +            newStyle['width'] = newSize.w + units;
   1.483 +        }
   1.484 +        if (!isUndefNull(newSize.h)) {
   1.485 +            newStyle['height'] = newSize.h + units;
   1.486 +        }
   1.487 +        MochiKit.DOM.updateNodeAttributes(elem, {'style': newStyle});
   1.488 +    },
   1.489 +
   1.490 +    _getDefaultDisplay: function (elem) {
   1.491 +        var self = MochiKit.Style;
   1.492 +        var dom = MochiKit.DOM;
   1.493 +        elem = dom.getElement(elem);
   1.494 +        if (!elem) {
   1.495 +            return undefined;
   1.496 +        }
   1.497 +        var tagName = elem.tagName.toUpperCase();
   1.498 +        return self._defaultDisplay[tagName] || 'block';
   1.499 +    },
   1.500 +
   1.501 +    /** @id MochiKit.Style.setDisplayForElement */
   1.502 +    setDisplayForElement: function (display, element/*, ...*/) {
   1.503 +        var elements = MochiKit.Base.extend(null, arguments, 1);
   1.504 +        var getElement = MochiKit.DOM.getElement;
   1.505 +        for (var i = 0; i < elements.length; i++) {
   1.506 +            element = getElement(elements[i]);
   1.507 +            if (element) {
   1.508 +                element.style.display = display;
   1.509 +            }
   1.510 +        }
   1.511 +    },
   1.512 +
   1.513 +    /** @id MochiKit.Style.getViewportDimensions */
   1.514 +    getViewportDimensions: function () {
   1.515 +        var d = new MochiKit.Style.Dimensions();
   1.516 +        var w = MochiKit.DOM._window;
   1.517 +        var b = MochiKit.DOM._document.body;
   1.518 +        if (w.innerWidth) {
   1.519 +            d.w = w.innerWidth;
   1.520 +            d.h = w.innerHeight;
   1.521 +        } else if (b && b.parentElement && b.parentElement.clientWidth) {
   1.522 +            d.w = b.parentElement.clientWidth;
   1.523 +            d.h = b.parentElement.clientHeight;
   1.524 +        } else if (b && b.clientWidth) {
   1.525 +            d.w = b.clientWidth;
   1.526 +            d.h = b.clientHeight;
   1.527 +        }
   1.528 +        return d;
   1.529 +    },
   1.530 +
   1.531 +    /** @id MochiKit.Style.getViewportPosition */
   1.532 +    getViewportPosition: function () {
   1.533 +        var c = new MochiKit.Style.Coordinates(0, 0);
   1.534 +        var d = MochiKit.DOM._document;
   1.535 +        var de = d.documentElement;
   1.536 +        var db = d.body;
   1.537 +        if (de && (de.scrollTop || de.scrollLeft)) {
   1.538 +            c.x = de.scrollLeft;
   1.539 +            c.y = de.scrollTop;
   1.540 +        } else if (db) {
   1.541 +            c.x = db.scrollLeft;
   1.542 +            c.y = db.scrollTop;
   1.543 +        }
   1.544 +        return c;
   1.545 +    },
   1.546 +
   1.547 +    __new__: function () {
   1.548 +        var m = MochiKit.Base;
   1.549 +
   1.550 +        var inlines = ['A','ABBR','ACRONYM','B','BASEFONT','BDO','BIG','BR',
   1.551 +                       'CITE','CODE','DFN','EM','FONT','I','IMG','KBD','LABEL',
   1.552 +                       'Q','S','SAMP','SMALL','SPAN','STRIKE','STRONG','SUB',
   1.553 +                       'SUP','TEXTAREA','TT','U','VAR'];
   1.554 +        this._defaultDisplay = { 'TABLE': 'table',
   1.555 +                                 'THEAD': 'table-header-group',
   1.556 +                                 'TBODY': 'table-row-group',
   1.557 +                                 'TFOOT': 'table-footer-group',
   1.558 +                                 'COLGROUP': 'table-column-group',
   1.559 +                                 'COL': 'table-column',
   1.560 +                                 'TR': 'table-row',
   1.561 +                                 'TD': 'table-cell',
   1.562 +                                 'TH': 'table-cell',
   1.563 +                                 'CAPTION': 'table-caption',
   1.564 +                                 'LI': 'list-item',
   1.565 +                                 'INPUT': 'inline-block',
   1.566 +                                 'SELECT': 'inline-block' };
   1.567 +        // CSS 'display' support in IE6/7 is just broken...
   1.568 +        if (/MSIE/.test(navigator.userAgent)) {
   1.569 +            for (var k in this._defaultDisplay) {
   1.570 +                var v = this._defaultDisplay[k];
   1.571 +                if (v.indexOf('table') == 0) {
   1.572 +                    this._defaultDisplay[k] = 'block';
   1.573 +                }
   1.574 +            }
   1.575 +        }
   1.576 +        for (var i = 0; i < inlines.length; i++) {
   1.577 +            this._defaultDisplay[inlines[i]] = 'inline';
   1.578 +        }
   1.579 +
   1.580 +        this.elementPosition = this.getElementPosition;
   1.581 +        this.elementDimensions = this.getElementDimensions;
   1.582 +
   1.583 +        this.hideElement = m.partial(this.setDisplayForElement, 'none');
   1.584 +        // TODO: showElement could be improved by using getDefaultDisplay.
   1.585 +        this.showElement = m.partial(this.setDisplayForElement, 'block');
   1.586 +
   1.587 +        this.EXPORT_TAGS = {
   1.588 +            ':common': this.EXPORT,
   1.589 +            ':all': m.concat(this.EXPORT, this.EXPORT_OK)
   1.590 +        };
   1.591 +
   1.592 +        m.nameFunctions(this);
   1.593 +    }
   1.594 +});
   1.595 +
   1.596 +MochiKit.Style.__new__();
   1.597 +MochiKit.Base._exportSymbols(this, MochiKit.Style);

mercurial