Skip to content

Commit

Permalink
Merge pull request Modernizr#438 from alrra/master
Browse files Browse the repository at this point in the history
Browser support test for the HTML5 <ruby>, <rt> and <rp> elements. fixes Modernizr#81
  • Loading branch information
paulirish committed Dec 12, 2011
2 parents 6d6d14e + 0fdd2f4 commit 5ffa3f9
Showing 1 changed file with 56 additions and 0 deletions.
56 changes: 56 additions & 0 deletions feature-detects/ruby.js
@@ -0,0 +1,56 @@
/*
* Browser support test for the HTML5 <ruby>, <rt> and <rp> elements
*
* by @alrra
*
*/

Modernizr.addTest('ruby', function() {

var ruby = document.createElement('ruby'),
rt = document.createElement('rt'),
rp = document.createElement('rp'),
docElement = document.documentElement,
displayStyleProperty = 'display',
fontSizeStyleProperty = 'fontSize'; // 'fontSize' - because it`s only used for IE6 and IE7

ruby.appendChild(rp);
ruby.appendChild(rt);
docElement.appendChild(ruby);

// browsers that support <ruby> hide the <rp> via "display:none"
if((getStyle(rp,displayStyleProperty) == 'none') // for non-IE browsers
// but in IE browsers <rp> has "display:inline" so, the test needs other conditions:
|| (getStyle(ruby,displayStyleProperty) == 'ruby' && getStyle(rt,displayStyleProperty) == 'ruby-text') // for IE8 & IE9
|| (getStyle(rp,fontSizeStyleProperty) == '6pt' && getStyle(rt,fontSizeStyleProperty) == '6pt')) { // for IE6 & IE7

cleanUp();
return true;

} else {

cleanUp();
return false;

}

function getStyle(element, styleProperty) {
var result;

if (window.getComputedStyle) { // for non-IE browsers
result = document.defaultView.getComputedStyle(element,null).getPropertyValue(styleProperty);
} else if (element.currentStyle) { // for IE
result = element.currentStyle[styleProperty];
}

return result;
}

function cleanUp() {
docElement.removeChild(ruby); // the removed child node still exists in memory so ...
ruby = null;
rt = null;
rp = null;
}

});

0 comments on commit 5ffa3f9

Please sign in to comment.