/* YUI 3.9.1 (build 5852) Copyright 2013 Yahoo! Inc. http://yuilibrary.com/license/ */
if (typeof _yuitest_coverage == "undefined"){
    _yuitest_coverage = {};
    _yuitest_coverline = function(src, line){
        var coverage = _yuitest_coverage[src];
        if (!coverage.lines[line]){
            coverage.calledLines++;
        }
        coverage.lines[line]++;
    };
    _yuitest_coverfunc = function(src, name, line){
        var coverage = _yuitest_coverage[src],
            funcId = name + ":" + line;
        if (!coverage.functions[funcId]){
            coverage.calledFunctions++;
        }
        coverage.functions[funcId]++;
    };
}
_yuitest_coverage["build/features/features.js"] = {
    lines: {},
    functions: {},
    coveredLines: 0,
    calledLines: 0,
    coveredFunctions: 0,
    calledFunctions: 0,
    path: "build/features/features.js",
    code: []
};
_yuitest_coverage["build/features/features.js"].code=["YUI.add('features', function (Y, NAME) {","","var feature_tests = {};","","/**","Contains the core of YUI's feature test architecture.","@module features","*/","","/**","* Feature detection","* @class Features","* @static","*/","","Y.mix(Y.namespace('Features'), {","","    /**","    * Object hash of all registered feature tests","    * @property tests","    * @type Object","    */","    tests: feature_tests,","","    /**","    * Add a test to the system","    *","    *   ```","    *   Y.Features.add(\"load\", \"1\", {});","    *   ```","    *","    * @method add","    * @param {String} cat The category, right now only 'load' is supported","    * @param {String} name The number sequence of the test, how it's reported in the URL or config: 1, 2, 3","    * @param {Object} o Object containing test properties","    * @param {String} o.name The name of the test","    * @param {Function} o.test The test function to execute, the only argument to the function is the `Y` instance","    * @param {String} o.trigger The module that triggers this test.","    */","    add: function(cat, name, o) {","        feature_tests[cat] = feature_tests[cat] || {};","        feature_tests[cat][name] = o;","    },","    /**","    * Execute all tests of a given category and return the serialized results","    *","    *   ```","    *   caps=1:1;2:1;3:0","    *   ```","    * @method all","    * @param {String} cat The category to execute","    * @param {Array} args The arguments to pass to the test function","    * @return {String} A semi-colon separated string of tests and their success/failure: 1:1;2:1;3:0","    */","    all: function(cat, args) {","        var cat_o = feature_tests[cat],","            // results = {};","            result = [];","        if (cat_o) {","            Y.Object.each(cat_o, function(v, k) {","                result.push(k + ':' + (Y.Features.test(cat, k, args) ? 1 : 0));","            });","        }","","        return (result.length) ? result.join(';') : '';","    },","    /**","    * Run a sepecific test and return a Boolean response.","    *","    *   ```","    *   Y.Features.test(\"load\", \"1\");","    *   ```","    *","    * @method test","    * @param {String} cat The category of the test to run","    * @param {String} name The name of the test to run","    * @param {Array} args The arguments to pass to the test function","    * @return {Boolean} True or false if the test passed/failed.","    */","    test: function(cat, name, args) {","        args = args || [];","        var result, ua, test,","            cat_o = feature_tests[cat],","            feature = cat_o && cat_o[name];","","        if (!feature) {","        } else {","","            result = feature.result;","","            if (Y.Lang.isUndefined(result)) {","","                ua = feature.ua;","                if (ua) {","                    result = (Y.UA[ua]);","                }","","                test = feature.test;","                if (test && ((!ua) || result)) {","                    result = test.apply(Y, args);","                }","","                feature.result = result;","            }","        }","","        return result;","    }","});","","// Y.Features.add(\"load\", \"1\", {});","// Y.Features.test(\"load\", \"1\");","// caps=1:1;2:0;3:1;","","/* This file is auto-generated by (yogi loader --yes --mix --start ../) */","/*jshint maxlen:900, eqeqeq: false */","var add = Y.Features.add;","// app-transitions-native","add('load', '0', {","    \"name\": \"app-transitions-native\",","    \"test\": function (Y) {","    var doc  = Y.config.doc,","        node = doc ? doc.documentElement : null;","","    if (node && node.style) {","        return ('MozTransition' in node.style || 'WebkitTransition' in node.style || 'transition' in node.style);","    }","","    return false;","},","    \"trigger\": \"app-transitions\"","});","// autocomplete-list-keys","add('load', '1', {","    \"name\": \"autocomplete-list-keys\",","    \"test\": function (Y) {","    // Only add keyboard support to autocomplete-list if this doesn't appear to","    // be an iOS or Android-based mobile device.","    //","    // There's currently no feasible way to actually detect whether a device has","    // a hardware keyboard, so this sniff will have to do. It can easily be","    // overridden by manually loading the autocomplete-list-keys module.","    //","    // Worth noting: even though iOS supports bluetooth keyboards, Mobile Safari","    // doesn't fire the keyboard events used by AutoCompleteList, so there's","    // no point loading the -keys module even when a bluetooth keyboard may be","    // available.","    return !(Y.UA.ios || Y.UA.android);","},","    \"trigger\": \"autocomplete-list\"","});","// dd-gestures","add('load', '2', {","    \"name\": \"dd-gestures\",","    \"trigger\": \"dd-drag\",","    \"ua\": \"touchEnabled\"","});","// dom-style-ie","add('load', '3', {","    \"name\": \"dom-style-ie\",","    \"test\": function (Y) {","","    var testFeature = Y.Features.test,","        addFeature = Y.Features.add,","        WINDOW = Y.config.win,","        DOCUMENT = Y.config.doc,","        DOCUMENT_ELEMENT = 'documentElement',","        ret = false;","","    addFeature('style', 'computedStyle', {","        test: function() {","            return WINDOW && 'getComputedStyle' in WINDOW;","        }","    });","","    addFeature('style', 'opacity', {","        test: function() {","            return DOCUMENT && 'opacity' in DOCUMENT[DOCUMENT_ELEMENT].style;","        }","    });","","    ret =  (!testFeature('style', 'opacity') &&","            !testFeature('style', 'computedStyle'));","","    return ret;","},","    \"trigger\": \"dom-style\"","});","// editor-para-ie","add('load', '4', {","    \"name\": \"editor-para-ie\",","    \"trigger\": \"editor-para\",","    \"ua\": \"ie\",","    \"when\": \"instead\"","});","// event-base-ie","add('load', '5', {","    \"name\": \"event-base-ie\",","    \"test\": function(Y) {","    var imp = Y.config.doc && Y.config.doc.implementation;","    return (imp && (!imp.hasFeature('Events', '2.0')));","},","    \"trigger\": \"node-base\"","});","// graphics-canvas","add('load', '6', {","    \"name\": \"graphics-canvas\",","    \"test\": function(Y) {","    var DOCUMENT = Y.config.doc,","        useCanvas = Y.config.defaultGraphicEngine && Y.config.defaultGraphicEngine == \"canvas\",","		canvas = DOCUMENT && DOCUMENT.createElement(\"canvas\"),","        svg = (DOCUMENT && DOCUMENT.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\", \"1.1\"));","    return (!svg || useCanvas) && (canvas && canvas.getContext && canvas.getContext(\"2d\"));","},","    \"trigger\": \"graphics\"","});","// graphics-canvas-default","add('load', '7', {","    \"name\": \"graphics-canvas-default\",","    \"test\": function(Y) {","    var DOCUMENT = Y.config.doc,","        useCanvas = Y.config.defaultGraphicEngine && Y.config.defaultGraphicEngine == \"canvas\",","		canvas = DOCUMENT && DOCUMENT.createElement(\"canvas\"),","        svg = (DOCUMENT && DOCUMENT.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\", \"1.1\"));","    return (!svg || useCanvas) && (canvas && canvas.getContext && canvas.getContext(\"2d\"));","},","    \"trigger\": \"graphics\"","});","// graphics-svg","add('load', '8', {","    \"name\": \"graphics-svg\",","    \"test\": function(Y) {","    var DOCUMENT = Y.config.doc,","        useSVG = !Y.config.defaultGraphicEngine || Y.config.defaultGraphicEngine != \"canvas\",","		canvas = DOCUMENT && DOCUMENT.createElement(\"canvas\"),","        svg = (DOCUMENT && DOCUMENT.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\", \"1.1\"));","    ","    return svg && (useSVG || !canvas);","},","    \"trigger\": \"graphics\"","});","// graphics-svg-default","add('load', '9', {","    \"name\": \"graphics-svg-default\",","    \"test\": function(Y) {","    var DOCUMENT = Y.config.doc,","        useSVG = !Y.config.defaultGraphicEngine || Y.config.defaultGraphicEngine != \"canvas\",","		canvas = DOCUMENT && DOCUMENT.createElement(\"canvas\"),","        svg = (DOCUMENT && DOCUMENT.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\", \"1.1\"));","    ","    return svg && (useSVG || !canvas);","},","    \"trigger\": \"graphics\"","});","// graphics-vml","add('load', '10', {","    \"name\": \"graphics-vml\",","    \"test\": function(Y) {","    var DOCUMENT = Y.config.doc,","		canvas = DOCUMENT && DOCUMENT.createElement(\"canvas\");","    return (DOCUMENT && !DOCUMENT.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\", \"1.1\") && (!canvas || !canvas.getContext || !canvas.getContext(\"2d\")));","},","    \"trigger\": \"graphics\"","});","// graphics-vml-default","add('load', '11', {","    \"name\": \"graphics-vml-default\",","    \"test\": function(Y) {","    var DOCUMENT = Y.config.doc,","		canvas = DOCUMENT && DOCUMENT.createElement(\"canvas\");","    return (DOCUMENT && !DOCUMENT.implementation.hasFeature(\"http://www.w3.org/TR/SVG11/feature#BasicStructure\", \"1.1\") && (!canvas || !canvas.getContext || !canvas.getContext(\"2d\")));","},","    \"trigger\": \"graphics\"","});","// history-hash-ie","add('load', '12', {","    \"name\": \"history-hash-ie\",","    \"test\": function (Y) {","    var docMode = Y.config.doc && Y.config.doc.documentMode;","","    return Y.UA.ie && (!('onhashchange' in Y.config.win) ||","            !docMode || docMode < 8);","},","    \"trigger\": \"history-hash\"","});","// io-nodejs","add('load', '13', {","    \"name\": \"io-nodejs\",","    \"trigger\": \"io-base\",","    \"ua\": \"nodejs\"","});","// json-parse-shim","add('load', '14', {","    \"name\": \"json-parse-shim\",","    \"test\": function (Y) {","    var _JSON = Y.config.global.JSON,","        Native = Object.prototype.toString.call(_JSON) === '[object JSON]' && _JSON,","        nativeSupport = Y.config.useNativeJSONParse !== false && !!Native;","","    function workingNative( k, v ) {","        return k === \"ok\" ? true : v;","    }","    ","    // Double check basic functionality.  This is mainly to catch early broken","    // implementations of the JSON API in Firefox 3.1 beta1 and beta2","    if ( nativeSupport ) {","        try {","            nativeSupport = ( Native.parse( '{\"ok\":false}', workingNative ) ).ok;","        }","        catch ( e ) {","            nativeSupport = false;","        }","    }","","    return !nativeSupport;","},","    \"trigger\": \"json-parse\"","});","// json-stringify-shim","add('load', '15', {","    \"name\": \"json-stringify-shim\",","    \"test\": function (Y) {","    var _JSON = Y.config.global.JSON,","        Native = Object.prototype.toString.call(_JSON) === '[object JSON]' && _JSON,","        nativeSupport = Y.config.useNativeJSONStringify !== false && !!Native;","","    // Double check basic native functionality.  This is primarily to catch broken","    // early JSON API implementations in Firefox 3.1 beta1 and beta2.","    if ( nativeSupport ) {","        try {","            nativeSupport = ( '0' === Native.stringify(0) );","        } catch ( e ) {","            nativeSupport = false;","        }","    }","","","    return !nativeSupport;","},","    \"trigger\": \"json-stringify\"","});","// scrollview-base-ie","add('load', '16', {","    \"name\": \"scrollview-base-ie\",","    \"trigger\": \"scrollview-base\",","    \"ua\": \"ie\"","});","// selector-css2","add('load', '17', {","    \"name\": \"selector-css2\",","    \"test\": function (Y) {","    var DOCUMENT = Y.config.doc,","        ret = DOCUMENT && !('querySelectorAll' in DOCUMENT);","","    return ret;","},","    \"trigger\": \"selector\"","});","// transition-timer","add('load', '18', {","    \"name\": \"transition-timer\",","    \"test\": function (Y) {","    var DOCUMENT = Y.config.doc,","        node = (DOCUMENT) ? DOCUMENT.documentElement: null,","        ret = true;","","    if (node && node.style) {","        ret = !('MozTransition' in node.style || 'WebkitTransition' in node.style || 'transition' in node.style);","    }","","    return ret;","},","    \"trigger\": \"transition\"","});","// widget-base-ie","add('load', '19', {","    \"name\": \"widget-base-ie\",","    \"trigger\": \"widget-base\",","    \"ua\": \"ie\"","});","// yql-jsonp","add('load', '20', {","    \"name\": \"yql-jsonp\",","    \"test\": function (Y) {","    /* Only load the JSONP module when not in nodejs or winjs","    TODO Make the winjs module a CORS module","    */","    return (!Y.UA.nodejs && !Y.UA.winjs);","},","    \"trigger\": \"yql\",","    \"when\": \"after\"","});","// yql-nodejs","add('load', '21', {","    \"name\": \"yql-nodejs\",","    \"trigger\": \"yql\",","    \"ua\": \"nodejs\",","    \"when\": \"after\"","});","// yql-winjs","add('load', '22', {","    \"name\": \"yql-winjs\",","    \"trigger\": \"yql\",","    \"ua\": \"winjs\",","    \"when\": \"after\"","});","","}, '3.9.1', {\"requires\": [\"yui-base\"]});"];
_yuitest_coverage["build/features/features.js"].lines = {"1":0,"3":0,"16":0,"41":0,"42":0,"56":0,"59":0,"60":0,"61":0,"65":0,"81":0,"82":0,"86":0,"89":0,"91":0,"93":0,"94":0,"95":0,"98":0,"99":0,"100":0,"103":0,"107":0,"117":0,"119":0,"122":0,"125":0,"126":0,"129":0,"134":0,"148":0,"153":0,"159":0,"163":0,"170":0,"172":0,"176":0,"178":0,"182":0,"185":0,"190":0,"197":0,"200":0,"201":0,"206":0,"209":0,"213":0,"218":0,"221":0,"225":0,"230":0,"233":0,"238":0,"243":0,"246":0,"251":0,"256":0,"259":0,"261":0,"266":0,"269":0,"271":0,"276":0,"279":0,"281":0,"287":0,"293":0,"296":0,"300":0,"301":0,"306":0,"307":0,"308":0,"311":0,"315":0,"320":0,"323":0,"329":0,"330":0,"331":0,"333":0,"338":0,"343":0,"349":0,"352":0,"355":0,"360":0,"363":0,"367":0,"368":0,"371":0,"376":0,"382":0,"388":0,"394":0,"401":0};
_yuitest_coverage["build/features/features.js"].functions = {"add:40":0,"(anonymous 2):60":0,"all:55":0,"test:80":0,"\"test\":121":0,"\"test\":136":0,"test:171":0,"test:177":0,"\"test\":161":0,"\"test\":199":0,"\"test\":208":0,"\"test\":220":0,"\"test\":232":0,"\"test\":245":0,"\"test\":258":0,"\"test\":268":0,"\"test\":278":0,"workingNative:300":0,"\"test\":295":0,"\"test\":322":0,"\"test\":351":0,"\"test\":362":0,"\"test\":384":0,"(anonymous 1):1":0};
_yuitest_coverage["build/features/features.js"].coveredLines = 96;
_yuitest_coverage["build/features/features.js"].coveredFunctions = 24;
_yuitest_coverline("build/features/features.js", 1);
YUI.add('features', function (Y, NAME) {

_yuitest_coverfunc("build/features/features.js", "(anonymous 1)", 1);
_yuitest_coverline("build/features/features.js", 3);
var feature_tests = {};

/**
Contains the core of YUI's feature test architecture.
@module features
*/

/**
* Feature detection
* @class Features
* @static
*/

_yuitest_coverline("build/features/features.js", 16);
Y.mix(Y.namespace('Features'), {

    /**
    * Object hash of all registered feature tests
    * @property tests
    * @type Object
    */
    tests: feature_tests,

    /**
    * Add a test to the system
    *
    *   ```
    *   Y.Features.add("load", "1", {});
    *   ```
    *
    * @method add
    * @param {String} cat The category, right now only 'load' is supported
    * @param {String} name The number sequence of the test, how it's reported in the URL or config: 1, 2, 3
    * @param {Object} o Object containing test properties
    * @param {String} o.name The name of the test
    * @param {Function} o.test The test function to execute, the only argument to the function is the `Y` instance
    * @param {String} o.trigger The module that triggers this test.
    */
    add: function(cat, name, o) {
        _yuitest_coverfunc("build/features/features.js", "add", 40);
_yuitest_coverline("build/features/features.js", 41);
feature_tests[cat] = feature_tests[cat] || {};
        _yuitest_coverline("build/features/features.js", 42);
feature_tests[cat][name] = o;
    },
    /**
    * Execute all tests of a given category and return the serialized results
    *
    *   ```
    *   caps=1:1;2:1;3:0
    *   ```
    * @method all
    * @param {String} cat The category to execute
    * @param {Array} args The arguments to pass to the test function
    * @return {String} A semi-colon separated string of tests and their success/failure: 1:1;2:1;3:0
    */
    all: function(cat, args) {
        _yuitest_coverfunc("build/features/features.js", "all", 55);
_yuitest_coverline("build/features/features.js", 56);
var cat_o = feature_tests[cat],
            // results = {};
            result = [];
        _yuitest_coverline("build/features/features.js", 59);
if (cat_o) {
            _yuitest_coverline("build/features/features.js", 60);
Y.Object.each(cat_o, function(v, k) {
                _yuitest_coverfunc("build/features/features.js", "(anonymous 2)", 60);
_yuitest_coverline("build/features/features.js", 61);
result.push(k + ':' + (Y.Features.test(cat, k, args) ? 1 : 0));
            });
        }

        _yuitest_coverline("build/features/features.js", 65);
return (result.length) ? result.join(';') : '';
    },
    /**
    * Run a sepecific test and return a Boolean response.
    *
    *   ```
    *   Y.Features.test("load", "1");
    *   ```
    *
    * @method test
    * @param {String} cat The category of the test to run
    * @param {String} name The name of the test to run
    * @param {Array} args The arguments to pass to the test function
    * @return {Boolean} True or false if the test passed/failed.
    */
    test: function(cat, name, args) {
        _yuitest_coverfunc("build/features/features.js", "test", 80);
_yuitest_coverline("build/features/features.js", 81);
args = args || [];
        _yuitest_coverline("build/features/features.js", 82);
var result, ua, test,
            cat_o = feature_tests[cat],
            feature = cat_o && cat_o[name];

        _yuitest_coverline("build/features/features.js", 86);
if (!feature) {
        } else {

            _yuitest_coverline("build/features/features.js", 89);
result = feature.result;

            _yuitest_coverline("build/features/features.js", 91);
if (Y.Lang.isUndefined(result)) {

                _yuitest_coverline("build/features/features.js", 93);
ua = feature.ua;
                _yuitest_coverline("build/features/features.js", 94);
if (ua) {
                    _yuitest_coverline("build/features/features.js", 95);
result = (Y.UA[ua]);
                }

                _yuitest_coverline("build/features/features.js", 98);
test = feature.test;
                _yuitest_coverline("build/features/features.js", 99);
if (test && ((!ua) || result)) {
                    _yuitest_coverline("build/features/features.js", 100);
result = test.apply(Y, args);
                }

                _yuitest_coverline("build/features/features.js", 103);
feature.result = result;
            }
        }

        _yuitest_coverline("build/features/features.js", 107);
return result;
    }
});

// Y.Features.add("load", "1", {});
// Y.Features.test("load", "1");
// caps=1:1;2:0;3:1;

/* This file is auto-generated by (yogi loader --yes --mix --start ../) */
/*jshint maxlen:900, eqeqeq: false */
_yuitest_coverline("build/features/features.js", 117);
var add = Y.Features.add;
// app-transitions-native
_yuitest_coverline("build/features/features.js", 119);
add('load', '0', {
    "name": "app-transitions-native",
    "test": function (Y) {
    _yuitest_coverfunc("build/features/features.js", "\"test\"", 121);
_yuitest_coverline("build/features/features.js", 122);
var doc  = Y.config.doc,
        node = doc ? doc.documentElement : null;

    _yuitest_coverline("build/features/features.js", 125);
if (node && node.style) {
        _yuitest_coverline("build/features/features.js", 126);
return ('MozTransition' in node.style || 'WebkitTransition' in node.style || 'transition' in node.style);
    }

    _yuitest_coverline("build/features/features.js", 129);
return false;
},
    "trigger": "app-transitions"
});
// autocomplete-list-keys
_yuitest_coverline("build/features/features.js", 134);
add('load', '1', {
    "name": "autocomplete-list-keys",
    "test": function (Y) {
    // Only add keyboard support to autocomplete-list if this doesn't appear to
    // be an iOS or Android-based mobile device.
    //
    // There's currently no feasible way to actually detect whether a device has
    // a hardware keyboard, so this sniff will have to do. It can easily be
    // overridden by manually loading the autocomplete-list-keys module.
    //
    // Worth noting: even though iOS supports bluetooth keyboards, Mobile Safari
    // doesn't fire the keyboard events used by AutoCompleteList, so there's
    // no point loading the -keys module even when a bluetooth keyboard may be
    // available.
    _yuitest_coverfunc("build/features/features.js", "\"test\"", 136);
_yuitest_coverline("build/features/features.js", 148);
return !(Y.UA.ios || Y.UA.android);
},
    "trigger": "autocomplete-list"
});
// dd-gestures
_yuitest_coverline("build/features/features.js", 153);
add('load', '2', {
    "name": "dd-gestures",
    "trigger": "dd-drag",
    "ua": "touchEnabled"
});
// dom-style-ie
_yuitest_coverline("build/features/features.js", 159);
add('load', '3', {
    "name": "dom-style-ie",
    "test": function (Y) {

    _yuitest_coverfunc("build/features/features.js", "\"test\"", 161);
_yuitest_coverline("build/features/features.js", 163);
var testFeature = Y.Features.test,
        addFeature = Y.Features.add,
        WINDOW = Y.config.win,
        DOCUMENT = Y.config.doc,
        DOCUMENT_ELEMENT = 'documentElement',
        ret = false;

    _yuitest_coverline("build/features/features.js", 170);
addFeature('style', 'computedStyle', {
        test: function() {
            _yuitest_coverfunc("build/features/features.js", "test", 171);
_yuitest_coverline("build/features/features.js", 172);
return WINDOW && 'getComputedStyle' in WINDOW;
        }
    });

    _yuitest_coverline("build/features/features.js", 176);
addFeature('style', 'opacity', {
        test: function() {
            _yuitest_coverfunc("build/features/features.js", "test", 177);
_yuitest_coverline("build/features/features.js", 178);
return DOCUMENT && 'opacity' in DOCUMENT[DOCUMENT_ELEMENT].style;
        }
    });

    _yuitest_coverline("build/features/features.js", 182);
ret =  (!testFeature('style', 'opacity') &&
            !testFeature('style', 'computedStyle'));

    _yuitest_coverline("build/features/features.js", 185);
return ret;
},
    "trigger": "dom-style"
});
// editor-para-ie
_yuitest_coverline("build/features/features.js", 190);
add('load', '4', {
    "name": "editor-para-ie",
    "trigger": "editor-para",
    "ua": "ie",
    "when": "instead"
});
// event-base-ie
_yuitest_coverline("build/features/features.js", 197);
add('load', '5', {
    "name": "event-base-ie",
    "test": function(Y) {
    _yuitest_coverfunc("build/features/features.js", "\"test\"", 199);
_yuitest_coverline("build/features/features.js", 200);
var imp = Y.config.doc && Y.config.doc.implementation;
    _yuitest_coverline("build/features/features.js", 201);
return (imp && (!imp.hasFeature('Events', '2.0')));
},
    "trigger": "node-base"
});
// graphics-canvas
_yuitest_coverline("build/features/features.js", 206);
add('load', '6', {
    "name": "graphics-canvas",
    "test": function(Y) {
    _yuitest_coverfunc("build/features/features.js", "\"test\"", 208);
_yuitest_coverline("build/features/features.js", 209);
var DOCUMENT = Y.config.doc,
        useCanvas = Y.config.defaultGraphicEngine && Y.config.defaultGraphicEngine == "canvas",
		canvas = DOCUMENT && DOCUMENT.createElement("canvas"),
        svg = (DOCUMENT && DOCUMENT.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1"));
    _yuitest_coverline("build/features/features.js", 213);
return (!svg || useCanvas) && (canvas && canvas.getContext && canvas.getContext("2d"));
},
    "trigger": "graphics"
});
// graphics-canvas-default
_yuitest_coverline("build/features/features.js", 218);
add('load', '7', {
    "name": "graphics-canvas-default",
    "test": function(Y) {
    _yuitest_coverfunc("build/features/features.js", "\"test\"", 220);
_yuitest_coverline("build/features/features.js", 221);
var DOCUMENT = Y.config.doc,
        useCanvas = Y.config.defaultGraphicEngine && Y.config.defaultGraphicEngine == "canvas",
		canvas = DOCUMENT && DOCUMENT.createElement("canvas"),
        svg = (DOCUMENT && DOCUMENT.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1"));
    _yuitest_coverline("build/features/features.js", 225);
return (!svg || useCanvas) && (canvas && canvas.getContext && canvas.getContext("2d"));
},
    "trigger": "graphics"
});
// graphics-svg
_yuitest_coverline("build/features/features.js", 230);
add('load', '8', {
    "name": "graphics-svg",
    "test": function(Y) {
    _yuitest_coverfunc("build/features/features.js", "\"test\"", 232);
_yuitest_coverline("build/features/features.js", 233);
var DOCUMENT = Y.config.doc,
        useSVG = !Y.config.defaultGraphicEngine || Y.config.defaultGraphicEngine != "canvas",
		canvas = DOCUMENT && DOCUMENT.createElement("canvas"),
        svg = (DOCUMENT && DOCUMENT.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1"));
    
    _yuitest_coverline("build/features/features.js", 238);
return svg && (useSVG || !canvas);
},
    "trigger": "graphics"
});
// graphics-svg-default
_yuitest_coverline("build/features/features.js", 243);
add('load', '9', {
    "name": "graphics-svg-default",
    "test": function(Y) {
    _yuitest_coverfunc("build/features/features.js", "\"test\"", 245);
_yuitest_coverline("build/features/features.js", 246);
var DOCUMENT = Y.config.doc,
        useSVG = !Y.config.defaultGraphicEngine || Y.config.defaultGraphicEngine != "canvas",
		canvas = DOCUMENT && DOCUMENT.createElement("canvas"),
        svg = (DOCUMENT && DOCUMENT.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1"));
    
    _yuitest_coverline("build/features/features.js", 251);
return svg && (useSVG || !canvas);
},
    "trigger": "graphics"
});
// graphics-vml
_yuitest_coverline("build/features/features.js", 256);
add('load', '10', {
    "name": "graphics-vml",
    "test": function(Y) {
    _yuitest_coverfunc("build/features/features.js", "\"test\"", 258);
_yuitest_coverline("build/features/features.js", 259);
var DOCUMENT = Y.config.doc,
		canvas = DOCUMENT && DOCUMENT.createElement("canvas");
    _yuitest_coverline("build/features/features.js", 261);
return (DOCUMENT && !DOCUMENT.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") && (!canvas || !canvas.getContext || !canvas.getContext("2d")));
},
    "trigger": "graphics"
});
// graphics-vml-default
_yuitest_coverline("build/features/features.js", 266);
add('load', '11', {
    "name": "graphics-vml-default",
    "test": function(Y) {
    _yuitest_coverfunc("build/features/features.js", "\"test\"", 268);
_yuitest_coverline("build/features/features.js", 269);
var DOCUMENT = Y.config.doc,
		canvas = DOCUMENT && DOCUMENT.createElement("canvas");
    _yuitest_coverline("build/features/features.js", 271);
return (DOCUMENT && !DOCUMENT.implementation.hasFeature("http://www.w3.org/TR/SVG11/feature#BasicStructure", "1.1") && (!canvas || !canvas.getContext || !canvas.getContext("2d")));
},
    "trigger": "graphics"
});
// history-hash-ie
_yuitest_coverline("build/features/features.js", 276);
add('load', '12', {
    "name": "history-hash-ie",
    "test": function (Y) {
    _yuitest_coverfunc("build/features/features.js", "\"test\"", 278);
_yuitest_coverline("build/features/features.js", 279);
var docMode = Y.config.doc && Y.config.doc.documentMode;

    _yuitest_coverline("build/features/features.js", 281);
return Y.UA.ie && (!('onhashchange' in Y.config.win) ||
            !docMode || docMode < 8);
},
    "trigger": "history-hash"
});
// io-nodejs
_yuitest_coverline("build/features/features.js", 287);
add('load', '13', {
    "name": "io-nodejs",
    "trigger": "io-base",
    "ua": "nodejs"
});
// json-parse-shim
_yuitest_coverline("build/features/features.js", 293);
add('load', '14', {
    "name": "json-parse-shim",
    "test": function (Y) {
    _yuitest_coverfunc("build/features/features.js", "\"test\"", 295);
_yuitest_coverline("build/features/features.js", 296);
var _JSON = Y.config.global.JSON,
        Native = Object.prototype.toString.call(_JSON) === '[object JSON]' && _JSON,
        nativeSupport = Y.config.useNativeJSONParse !== false && !!Native;

    _yuitest_coverline("build/features/features.js", 300);
function workingNative( k, v ) {
        _yuitest_coverfunc("build/features/features.js", "workingNative", 300);
_yuitest_coverline("build/features/features.js", 301);
return k === "ok" ? true : v;
    }
    
    // Double check basic functionality.  This is mainly to catch early broken
    // implementations of the JSON API in Firefox 3.1 beta1 and beta2
    _yuitest_coverline("build/features/features.js", 306);
if ( nativeSupport ) {
        _yuitest_coverline("build/features/features.js", 307);
try {
            _yuitest_coverline("build/features/features.js", 308);
nativeSupport = ( Native.parse( '{"ok":false}', workingNative ) ).ok;
        }
        catch ( e ) {
            _yuitest_coverline("build/features/features.js", 311);
nativeSupport = false;
        }
    }

    _yuitest_coverline("build/features/features.js", 315);
return !nativeSupport;
},
    "trigger": "json-parse"
});
// json-stringify-shim
_yuitest_coverline("build/features/features.js", 320);
add('load', '15', {
    "name": "json-stringify-shim",
    "test": function (Y) {
    _yuitest_coverfunc("build/features/features.js", "\"test\"", 322);
_yuitest_coverline("build/features/features.js", 323);
var _JSON = Y.config.global.JSON,
        Native = Object.prototype.toString.call(_JSON) === '[object JSON]' && _JSON,
        nativeSupport = Y.config.useNativeJSONStringify !== false && !!Native;

    // Double check basic native functionality.  This is primarily to catch broken
    // early JSON API implementations in Firefox 3.1 beta1 and beta2.
    _yuitest_coverline("build/features/features.js", 329);
if ( nativeSupport ) {
        _yuitest_coverline("build/features/features.js", 330);
try {
            _yuitest_coverline("build/features/features.js", 331);
nativeSupport = ( '0' === Native.stringify(0) );
        } catch ( e ) {
            _yuitest_coverline("build/features/features.js", 333);
nativeSupport = false;
        }
    }


    _yuitest_coverline("build/features/features.js", 338);
return !nativeSupport;
},
    "trigger": "json-stringify"
});
// scrollview-base-ie
_yuitest_coverline("build/features/features.js", 343);
add('load', '16', {
    "name": "scrollview-base-ie",
    "trigger": "scrollview-base",
    "ua": "ie"
});
// selector-css2
_yuitest_coverline("build/features/features.js", 349);
add('load', '17', {
    "name": "selector-css2",
    "test": function (Y) {
    _yuitest_coverfunc("build/features/features.js", "\"test\"", 351);
_yuitest_coverline("build/features/features.js", 352);
var DOCUMENT = Y.config.doc,
        ret = DOCUMENT && !('querySelectorAll' in DOCUMENT);

    _yuitest_coverline("build/features/features.js", 355);
return ret;
},
    "trigger": "selector"
});
// transition-timer
_yuitest_coverline("build/features/features.js", 360);
add('load', '18', {
    "name": "transition-timer",
    "test": function (Y) {
    _yuitest_coverfunc("build/features/features.js", "\"test\"", 362);
_yuitest_coverline("build/features/features.js", 363);
var DOCUMENT = Y.config.doc,
        node = (DOCUMENT) ? DOCUMENT.documentElement: null,
        ret = true;

    _yuitest_coverline("build/features/features.js", 367);
if (node && node.style) {
        _yuitest_coverline("build/features/features.js", 368);
ret = !('MozTransition' in node.style || 'WebkitTransition' in node.style || 'transition' in node.style);
    }

    _yuitest_coverline("build/features/features.js", 371);
return ret;
},
    "trigger": "transition"
});
// widget-base-ie
_yuitest_coverline("build/features/features.js", 376);
add('load', '19', {
    "name": "widget-base-ie",
    "trigger": "widget-base",
    "ua": "ie"
});
// yql-jsonp
_yuitest_coverline("build/features/features.js", 382);
add('load', '20', {
    "name": "yql-jsonp",
    "test": function (Y) {
    /* Only load the JSONP module when not in nodejs or winjs
    TODO Make the winjs module a CORS module
    */
    _yuitest_coverfunc("build/features/features.js", "\"test\"", 384);
_yuitest_coverline("build/features/features.js", 388);
return (!Y.UA.nodejs && !Y.UA.winjs);
},
    "trigger": "yql",
    "when": "after"
});
// yql-nodejs
_yuitest_coverline("build/features/features.js", 394);
add('load', '21', {
    "name": "yql-nodejs",
    "trigger": "yql",
    "ua": "nodejs",
    "when": "after"
});
// yql-winjs
_yuitest_coverline("build/features/features.js", 401);
add('load', '22', {
    "name": "yql-winjs",
    "trigger": "yql",
    "ua": "winjs",
    "when": "after"
});

}, '3.9.1', {"requires": ["yui-base"]});
