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
… altered indexedDB test to use prefix method.
  • Loading branch information
ryanseddon committed Jan 3, 2012
1 parent 0f7885b commit 84735ab
Show file tree
Hide file tree
Showing 2 changed files with 59 additions and 17 deletions.
42 changes: 32 additions & 10 deletions modernizr.js
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 @@ -400,12 +422,7 @@ window.Modernizr = (function( window, document, undefined ) {
// - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB
// For speed, we don't test the legacy (and beta-only) indexedDB
tests['indexedDB'] = function() {
for ( var i = -1, len = cssomPrefixes.length; ++i < len; ){
if ( window[cssomPrefixes[i].toLowerCase() + 'IndexedDB'] ){
return true;
}
}
return !!window.indexedDB;
return !!testPropsAll("indexedDB",window);
};

// documentMode logic from YUI to filter out IE8 Compat Mode
Expand Down Expand Up @@ -1107,8 +1124,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
34 changes: 27 additions & 7 deletions test/js/unit.js
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,20 @@ 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];
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 84735ab

Please sign in to comment.