Skip to content

Commit

Permalink
Added extended support of prefixed method to test DOM properties too
Browse files Browse the repository at this point in the history
  • Loading branch information
ryanseddon committed Dec 15, 2011
1 parent 0f7885b commit 537a762
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 12 deletions.
35 changes: 31 additions & 4 deletions modernizr.js
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,11 @@ window.Modernizr = (function( window, document, undefined ) {
// erik.eae.net/archives/2008/03/10/21.48.10/

// More here: github.com/Modernizr/Modernizr/issues/issue/21
cssomPrefixes = 'Webkit Moz O ms Khtml'.split(' '),
omPrefixes = 'Webkit Moz O ms Khtml',

cssomPrefixes = omPrefixes.split(' '),

domPrefixes = omPrefixes.toLowerCase().split(' '),

ns = {'svg': 'http://www.w3.org/2000/svg'},

Expand Down Expand Up @@ -239,6 +243,19 @@ window.Modernizr = (function( window, document, undefined ) {
return false;
}

/**
* testDOMProps is a generic DOM property test; if a browser supports
* a certain property, it won't return undefined for it.
*/
function testDOMProps( props, obj ) {
for ( var i in props ) {
if ( obj[ props[i] ] !== undefined) {
return props[i];
}
}
return false;
}

/**
* testPropsAll tests a list of DOM properties we want to check against.
* We specify literally ALL possible (known and/or likely) properties on
Expand All @@ -250,7 +267,12 @@ window.Modernizr = (function( window, document, undefined ) {
var ucProp = prop.charAt(0).toUpperCase() + prop.substr(1),
props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');

return testProps(props, prefixed);
if(!is(prefixed, "object")) {
return testProps(props, prefixed);
} else {
props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');
return testDOMProps(props, prefixed);
}
}

/**
Expand Down Expand Up @@ -1107,8 +1129,13 @@ window.Modernizr = (function( window, document, undefined ) {
// },
// transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];

Modernizr.prefixed = function(prop){
return testPropsAll(prop, 'pfx');
Modernizr.prefixed = function(prop, obj){
if(!obj) {
return testPropsAll(prop, 'pfx');
} else {
// Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame', window) // 'mozRequestAnimationFrame'
return testPropsAll(prop, obj);
}
};


Expand Down
2 changes: 1 addition & 1 deletion test/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
#caniusetrigger { font-size: 38px; font-family: monospace; display:block; }
</style>

<script src="https://raw.github.com/Modernizr/Modernizr/master/modernizr.js"></script>
<script src="https://xraw.github.com/Modernizr/Modernizr/master/modernizr.js"></script>

This comment has been minimized.

Copy link
@paulirish

paulirish Dec 15, 2011

Member

btw. you checked this in ;)

This comment has been minimized.

Copy link
@ryanseddon

ryanseddon Dec 15, 2011

Author Member

oops o_0, i'll fix that

<script>window.Modernizr || document.write('<script src="../modernizr.js"><\/script>')</script>

<script src="js/lib/polyfills.js"></script>
Expand Down
35 changes: 28 additions & 7 deletions test/js/unit.js
Original file line number Diff line number Diff line change
Expand Up @@ -436,17 +436,28 @@ test('Modernizr.testAllProps()',function(){
test('Modernizr.prefixed()', function(){
// https://gist.github.com/523692

function gimmePrefix(prop){
function gimmePrefix(prop, obj){
var prefixes = ['Moz','Khtml','Webkit','O','ms'],
domPrefixes = ['moz','khtml','webkit','o','ms'],
elem = document.createElement('div'),
upper = prop.charAt(0).toUpperCase() + prop.slice(1);

if (prop in elem.style)
return prop;
if(!obj) {
if (prop in elem.style)
return prop;

for (var len = prefixes.length; len--; ){
if ((prefixes[len] + upper) in elem.style)
return (prefixes[len] + upper);
for (var len = prefixes.length; len--; ){
if ((prefixes[len] + upper) in elem.style)
return (prefixes[len] + upper);
}
} else {
if (prop in obj)
return prop;

for (var len = domPrefixes.length; len--; ){
if ((domPrefixes[len] + upper) in obj)
return (domPrefixes[len] + upper);
}
}


Expand All @@ -456,11 +467,21 @@ test('Modernizr.prefixed()', function(){
var propArr = ['transition', 'backgroundSize', 'boxSizing', 'borderImage',
'borderRadius', 'boxShadow', 'columnCount'];


var domPropArr = [{ 'prop': 'requestAnimationFrame', 'obj': window },
{ 'prop': 'querySelectorAll', 'obj': document },
{ 'prop': 'matchesSelector', 'obj': document.createElement('div') }];

for (var i = -1, len = propArr.length; ++i < len; ){
var prop = propArr[i];
equals( Modernizr.prefixed(prop), gimmePrefix(prop), 'results for ' + prop + ' match the homebaked prefix finder');
}

for (var i = -1, len = domPropArr.length; ++i < len; ){
var prop = domPropArr[i];
console.log(Modernizr.prefixed(prop.prop, prop.obj),gimmePrefix(prop.prop, prop.obj));

This comment has been minimized.

Copy link
@aFarkas

aFarkas Dec 15, 2011

Member

I think, you want to remove this line. Not sure.

I like the new feature, thanks!

equals( Modernizr.prefixed(prop.prop, prop.obj), gimmePrefix(prop.prop, prop.obj), 'results for ' + prop.prop + ' match the homebaked prefix finder');
}




Expand Down

0 comments on commit 537a762

Please sign in to comment.