//= require modernizr // Browser support test for the HTML5 <ruby>, <rt> and <rp> elements // www.whatwg.org/specs/web-apps/current-work/multipage/text-level-semantics.html#the-ruby-element // // 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;
}

});