summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/css/css-transitions/support/vendorPrefix.js
blob: 1e7eed04818a06e4723fb8d1f2df2e258ab5df8b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
//
// Vendor-Prefix Helper Functions For Testing CSS
//

(function(root) {
'use strict';

var prefixCache = {};

// convert "foo-bar" to "fooBar"
function camelCase(str) {
    return str.replace(/\-(\w)/g, function(match, letter){
        return letter.toUpperCase();
    });
}

// vendor-prefix a css property
root.addVendorPrefix = function (name) {
    var prefix = getVendorPrefix(name);
    if (prefix === false) {
        // property unknown to browser
        return name;
    }

    return prefix + name;
};

// vendor-prefix a css property value
root.addValueVendorPrefix = function (property, value) {
    var prefix = getValueVendorPrefix(property, value);
    if (prefix === false) {
        // property unknown to browser
        return name;
    }

    return prefix + value;
};

// identify vendor-prefix for css property
root.getVendorPrefix = function(name) {
    if (prefixCache[name] !== undefined) {
        return prefixCache[name];
    }

    var elem = document.createElement("div");
    name = camelCase(name);

    if (name in elem.style) {
        return prefixCache[name] = "";
    }

    var prefixes = ["Webkit", "Moz", "O", "ms"];
    var styles = ["-webkit-", "-moz-", "-o-", "-ms-"];
    var _name = name.substring(0, 1).toUpperCase() + name.substring(1);

    for (var i = 0, length = prefixes.length; i < length; i++) {
        if (prefixes[i] + _name in elem.style) {
            return prefixCache[name] = styles[i];
        }
    }

    return prefixCache[name] = name in elem.style ? "" : false;
};

// identify vendor-prefix for css property value
root.getValueVendorPrefix = function(property, value) {
    var elem = document.createElement("div");
    // note: webkit needs the element to be attached to the dom
    document.body.appendChild(elem);
    var styles = ["-webkit-", "-moz-", "-o-", "-ms-", ""];
    var _property = getVendorPrefix(property) + property;
    for (var i=0, length = styles.length; i < length; i++) {
        var _value = styles[i] + value;
        elem.setAttribute('style', _property + ": " + _value);
        var _computed = computedStyle(elem, _property);
        if (_computed && _computed !== 'none') {
            document.body.removeChild(elem);
            return styles[i];
        }
    }
    document.body.removeChild(elem);
    return false;
};


})(window);