{"version":3,"file":"ready-Qto7R-hV.js","sources":["../../../app/assets/javascripts/plugins/modernizr/modernizr-custom.ts","../../../node_modules/domready/ready.js"],"sourcesContent":["/*!\n * modernizr v3.13.1\n * Build https://modernizr.com/download?-formvalidation-input-addtest-setclasses-dontmin\n *\n * Copyright (c)\n * Faruk Ates\n * Paul Irish\n * Alex Sexton\n * Ryan Seddon\n * Patrick Kettner\n * Stu Cox\n * Richard Herrera\n * Veeck\n\n * MIT License\n */\n\n/*\n * Modernizr tests which native CSS3 and HTML5 features are available in the\n * current UA and makes the results available to you in two ways: as properties on\n * a global `Modernizr` object, and as classes on the `<html>` element. This\n * information allows you to progressively enhance your pages with a granular level\n * of control over the experience.\n*/\n\n;(function(scriptGlobalObject, window, document, undefined){\n\n var tests = [];\n\n\n /**\n * ModernizrProto is the constructor for Modernizr\n *\n * @class\n * @access public\n */\n var ModernizrProto = {\n _version: '3.13.1',\n\n // Any settings that don't work as separate modules\n // can go in here as configuration.\n _config: {\n 'classPrefix': '',\n 'enableClasses': true,\n 'enableJSClass': true,\n 'usePrefixes': true\n },\n\n // Queue of tests\n _q: [],\n\n // Stub these for people who are listening\n on: function(test, cb) {\n // I don't really think people should do this, but we can\n // safe guard it a bit.\n // -- NOTE:: this gets WAY overridden in src/addTest for actual async tests.\n // This is in case people listen to synchronous tests. I would leave it out,\n // but the code to *disallow* sync tests in the real version of this\n // function is actually larger than this.\n var self = this;\n setTimeout(function() {\n cb(self[test]);\n }, 0);\n },\n\n addTest: function(name, fn, options) {\n tests.push({name: name, fn: fn, options: options});\n },\n\n addAsyncTest: function(fn) {\n tests.push({name: null, fn: fn});\n }\n };\n\n\n\n // Fake some of Object.create so we can force non test results to be non \"own\" properties.\n var Modernizr = function() {};\n Modernizr.prototype = ModernizrProto;\n\n // Leak modernizr globally when you `require` it rather than force it here.\n // Overwrite name so constructor name is nicer :D\n Modernizr = new Modernizr();\n\n\n\n var classes = [];\n\n\n /**\n * is returns a boolean if the typeof an obj is exactly type.\n *\n * @access private\n * @function is\n * @param {*} obj - A thing we want to check the type of\n * @param {string} type - A string to compare the typeof against\n * @returns {boolean} true if the typeof the first parameter is exactly the specified type, false otherwise\n */\n function is(obj, type) {\n return typeof obj === type;\n }\n\n ;\n\n /**\n * Run through all tests and detect their support in the current UA.\n *\n * @access private\n * @returns {void}\n */\n function testRunner() {\n var featureNames;\n var feature;\n var aliasIdx;\n var result;\n var nameIdx;\n var featureName;\n var featureNameSplit;\n\n for (var featureIdx in tests) {\n if (tests.hasOwnProperty(featureIdx)) {\n featureNames = [];\n feature = tests[featureIdx];\n // run the test, throw the return value into the Modernizr,\n // then based on that boolean, define an appropriate className\n // and push it into an array of classes we'll join later.\n //\n // If there is no name, it's an 'async' test that is run,\n // but not directly added to the object. That should\n // be done with a post-run addTest call.\n if (feature.name) {\n featureNames.push(feature.name.toLowerCase());\n\n if (feature.options && feature.options.aliases && feature.options.aliases.length) {\n // Add all the aliases into the names list\n for (aliasIdx = 0; aliasIdx < feature.options.aliases.length; aliasIdx++) {\n featureNames.push(feature.options.aliases[aliasIdx].toLowerCase());\n }\n }\n }\n\n // Run the test, or use the raw value if it's not a function\n result = is(feature.fn, 'function') ? feature.fn() : feature.fn;\n\n // Set each of the names on the Modernizr object\n for (nameIdx = 0; nameIdx < featureNames.length; nameIdx++) {\n featureName = featureNames[nameIdx];\n // Support dot properties as sub tests. We don't do checking to make sure\n // that the implied parent tests have been added. You must call them in\n // order (either in the test, or make the parent test a dependency).\n //\n // Cap it to TWO to make the logic simple and because who needs that kind of subtesting\n // hashtag famous last words\n featureNameSplit = featureName.split('.');\n\n if (featureNameSplit.length === 1) {\n Modernizr[featureNameSplit[0]] = result;\n } else {\n // cast to a Boolean, if not one already or if it doesnt exist yet (like inputtypes)\n if (!Modernizr[featureNameSplit[0]] || Modernizr[featureNameSplit[0]] && !(Modernizr[featureNameSplit[0]] instanceof Boolean)) {\n Modernizr[featureNameSplit[0]] = new Boolean(Modernizr[featureNameSplit[0]]);\n }\n\n Modernizr[featureNameSplit[0]][featureNameSplit[1]] = result;\n }\n\n classes.push((result ? '' : 'no-') + featureNameSplit.join('-'));\n }\n }\n }\n }\n ;\n\n /**\n * docElement is a convenience wrapper to grab the root element of the document\n *\n * @access private\n * @returns {HTMLElement|SVGElement} The root element of the document\n */\n var docElement = document.documentElement;\n\n\n /**\n * A convenience helper to check if the document we are running in is an SVG document\n *\n * @access private\n * @returns {boolean}\n */\n var isSVG = docElement.nodeName.toLowerCase() === 'svg';\n\n\n\n /**\n * setClasses takes an array of class names and adds them to the root element\n *\n * @access private\n * @function setClasses\n * @param {string[]} classes - Array of class names\n */\n // Pass in an and array of class names, e.g.:\n // ['no-webp', 'borderradius', ...]\n function setClasses(classes) {\n var className = docElement.className;\n var classPrefix = Modernizr._config.classPrefix || '';\n\n if (isSVG) {\n className = className.baseVal;\n }\n\n // Change `no-js` to `js` (independently of the `enableClasses` option)\n // Handle classPrefix on this too\n if (Modernizr._config.enableJSClass) {\n var reJS = new RegExp('(^|\\\\s)' + classPrefix + 'no-js(\\\\s|$)');\n className = className.replace(reJS, '$1' + classPrefix + 'js$2');\n }\n\n if (Modernizr._config.enableClasses) {\n // Add the new classes\n if (classes.length > 0) {\n className += ' ' + classPrefix + classes.join(' ' + classPrefix);\n }\n if (isSVG) {\n docElement.className.baseVal = className;\n } else {\n docElement.className = className;\n }\n }\n }\n\n ;\n\n /**\n * hasOwnProp is a shim for hasOwnProperty that is needed for Safari 2.0 support\n *\n * @author kangax\n * @access private\n * @function hasOwnProp\n * @param {object} object - The object to check for a property\n * @param {string} property - The property to check for\n * @returns {boolean}\n */\n\n // hasOwnProperty shim by kangax needed for Safari 2.0 support\n var hasOwnProp;\n\n (function() {\n var _hasOwnProperty = ({}).hasOwnProperty;\n /* istanbul ignore else */\n /* we have no way of testing IE 5.5 or safari 2,\n * so just assume the else gets hit */\n if (!is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined')) {\n hasOwnProp = function(object, property) {\n return _hasOwnProperty.call(object, property);\n };\n }\n else {\n hasOwnProp = function(object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */\n return ((property in object) && is(object.constructor.prototype[property], 'undefined'));\n };\n }\n })();\n\n\n\n\n // _l tracks listeners for async tests, as well as tests that execute after the initial run\n ModernizrProto._l = {};\n\n /**\n * Modernizr.on is a way to listen for the completion of async tests. Being\n * asynchronous, they may not finish before your scripts run. As a result you\n * will get a possibly false negative `undefined` value.\n *\n * @memberOf Modernizr\n * @name Modernizr.on\n * @access public\n * @function on\n * @param {string} feature - String name of the feature detect\n * @param {Function} cb - Callback function returning a Boolean - true if feature is supported, false if not\n * @returns {void}\n * @example\n *\n * ```js\n * Modernizr.on('flash', function( result ) {\n * if (result) {\n * // the browser has flash\n * } else {\n * // the browser does not have flash\n * }\n * });\n * ```\n */\n ModernizrProto.on = function(feature, cb) {\n // Create the list of listeners if it doesn't exist\n if (!this._l[feature]) {\n this._l[feature] = [];\n }\n\n // Push this test on to the listener list\n this._l[feature].push(cb);\n\n // If it's already been resolved, trigger it on next tick\n if (Modernizr.hasOwnProperty(feature)) {\n // Next Tick\n setTimeout(function() {\n Modernizr._trigger(feature, Modernizr[feature]);\n }, 0);\n }\n };\n\n /**\n * _trigger is the private function used to signal test completion and run any\n * callbacks registered through [Modernizr.on](#modernizr-on)\n *\n * @memberOf Modernizr\n * @name Modernizr._trigger\n * @access private\n * @function _trigger\n * @param {string} feature - string name of the feature detect\n * @param {Function|boolean} [res] - A feature detection function, or the boolean =\n * result of a feature detection function\n * @returns {void}\n */\n ModernizrProto._trigger = function(feature, res) {\n if (!this._l[feature]) {\n return;\n }\n\n var cbs = this._l[feature];\n\n // Force async\n setTimeout(function() {\n var i, cb;\n for (i = 0; i < cbs.length; i++) {\n cb = cbs[i];\n cb(res);\n }\n }, 0);\n\n // Don't trigger these again\n delete this._l[feature];\n };\n\n /**\n * addTest allows you to define your own feature detects that are not currently\n * included in Modernizr (under the covers it's the exact same code Modernizr\n * uses for its own [feature detections](https://github.com/Modernizr/Modernizr/tree/master/feature-detects)).\n * Just like the official detects, the result\n * will be added onto the Modernizr object, as well as an appropriate className set on\n * the html element when configured to do so\n *\n * @memberOf Modernizr\n * @name Modernizr.addTest\n * @optionName Modernizr.addTest()\n * @optionProp addTest\n * @access public\n * @function addTest\n * @param {string|object} feature - The string name of the feature detect, or an\n * object of feature detect names and test\n * @param {Function|boolean} test - Function returning true if feature is supported,\n * false if not. Otherwise a boolean representing the results of a feature detection\n * @returns {object} the Modernizr object to allow chaining\n * @example\n *\n * The most common way of creating your own feature detects is by calling\n * `Modernizr.addTest` with a string (preferably just lowercase, without any\n * punctuation), and a function you want executed that will return a boolean result\n *\n * ```js\n * Modernizr.addTest('itsTuesday', function() {\n * var d = new Date();\n * return d.getDay() === 2;\n * });\n * ```\n *\n * When the above is run, it will set Modernizr.itstuesday to `true` when it is tuesday,\n * and to `false` every other day of the week. One thing to notice is that the names of\n * feature detect functions are always lowercased when added to the Modernizr object. That\n * means that `Modernizr.itsTuesday` will not exist, but `Modernizr.itstuesday` will.\n *\n *\n * Since we only look at the returned value from any feature detection function,\n * you do not need to actually use a function. For simple detections, just passing\n * in a statement that will return a boolean value works just fine.\n *\n * ```js\n * Modernizr.addTest('hasjquery', 'jQuery' in window);\n * ```\n *\n * Just like before, when the above runs `Modernizr.hasjquery` will be true if\n * jQuery has been included on the page. Not using a function saves a small amount\n * of overhead for the browser, as well as making your code much more readable.\n *\n * Finally, you also have the ability to pass in an object of feature names and\n * their tests. This is handy if you want to add multiple detections in one go.\n * The keys should always be a string, and the value can be either a boolean or\n * function that returns a boolean.\n *\n * ```js\n * var detects = {\n * 'hasjquery': 'jQuery' in window,\n * 'itstuesday': function() {\n * var d = new Date();\n * return d.getDay() === 2;\n * }\n * }\n *\n * Modernizr.addTest(detects);\n * ```\n *\n * There is really no difference between the first methods and this one, it is\n * just a convenience to let you write more readable code.\n */\n function addTest(feature, test) {\n\n if (typeof feature === 'object') {\n for (var key in feature) {\n if (hasOwnProp(feature, key)) {\n addTest(key, feature[ key ]);\n }\n }\n } else {\n\n feature = feature.toLowerCase();\n var featureNameSplit = feature.split('.');\n var last = Modernizr[featureNameSplit[0]];\n\n // Again, we don't check for parent test existence. Get that right, though.\n if (featureNameSplit.length === 2) {\n last = last[featureNameSplit[1]];\n }\n\n if (typeof last !== 'undefined') {\n // we're going to quit if you're trying to overwrite an existing test\n // if we were to allow it, we'd do this:\n // var re = new RegExp(\"\\\\b(no-)?\" + feature + \"\\\\b\");\n // docElement.className = docElement.className.replace( re, '' );\n // but, no rly, stuff 'em.\n return Modernizr;\n }\n\n test = typeof test === 'function' ? test() : test;\n\n // Set the value (this is the magic, right here).\n if (featureNameSplit.length === 1) {\n Modernizr[featureNameSplit[0]] = test;\n } else {\n // cast to a Boolean, if not one already\n if (Modernizr[featureNameSplit[0]] && !(Modernizr[featureNameSplit[0]] instanceof Boolean)) {\n Modernizr[featureNameSplit[0]] = new Boolean(Modernizr[featureNameSplit[0]]);\n }\n\n Modernizr[featureNameSplit[0]][featureNameSplit[1]] = test;\n }\n\n // Set a single class (either `feature` or `no-feature`)\n setClasses([(!!test && test !== false ? '' : 'no-') + featureNameSplit.join('-')]);\n\n // Trigger the event\n Modernizr._trigger(feature, test);\n }\n\n return Modernizr; // allow chaining.\n }\n\n // After all the tests are run, add self to the Modernizr prototype\n Modernizr._q.push(function() {\n ModernizrProto.addTest = addTest;\n });\n\n\n\n\n /**\n * createElement is a convenience wrapper around document.createElement. Since we\n * use createElement all over the place, this allows for (slightly) smaller code\n * as well as abstracting away issues with creating elements in contexts other than\n * HTML documents (e.g. SVG documents).\n *\n * @access private\n * @function createElement\n * @returns {HTMLElement|SVGElement} An HTML or SVG element\n */\n function createElement() {\n if (typeof document.createElement !== 'function') {\n // This is the case in IE7, where the type of createElement is \"object\".\n // For this reason, we cannot call apply() as Object is not a Function.\n return document.createElement(arguments[0]);\n } else if (isSVG) {\n return document.createElementNS.call(document, 'http://www.w3.org/2000/svg', arguments[0]);\n } else {\n return document.createElement.apply(document, arguments);\n }\n }\n\n ;\n\n /**\n * getBody returns the body of a document, or an element that can stand in for\n * the body if a real body does not exist\n *\n * @access private\n * @function getBody\n * @returns {HTMLElement|SVGElement} Returns the real body of a document, or an\n * artificially created element that stands in for the body\n */\n function getBody() {\n // After page load injecting a fake body doesn't work so check if body exists\n var body = document.body;\n\n if (!body) {\n // Can't use the real body create a fake one.\n body = createElement(isSVG ? 'svg' : 'body');\n body.fake = true;\n }\n\n return body;\n }\n\n ;\n\n /**\n * injectElementWithStyles injects an element with style element and some CSS rules\n *\n * @access private\n * @function injectElementWithStyles\n * @param {string} rule - String representing a css rule\n * @param {Function} callback - A function that is used to test the injected element\n * @param {number} [nodes] - An integer representing the number of additional nodes you want injected\n * @param {string[]} [testnames] - An array of strings that are used as ids for the additional nodes\n * @returns {boolean} the result of the specified callback test\n */\n function injectElementWithStyles(rule, callback, nodes, testnames) {\n var mod = 'modernizr';\n var style;\n var ret;\n var node;\n var docOverflow;\n var div = createElement('div');\n var body = getBody();\n\n if (parseInt(nodes, 10)) {\n // In order not to give false positives we create a node for each test\n // This also allows the method to scale for unspecified uses\n while (nodes--) {\n node = createElement('div');\n node.id = testnames ? testnames[nodes] : mod + (nodes + 1);\n div.appendChild(node);\n }\n }\n\n style = createElement('style');\n style.type = 'text/css';\n style.id = 's' + mod;\n\n // IE6 will false positive on some tests due to the style element inside the test div somehow interfering offsetHeight, so insert it into body or fakebody.\n // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270\n (!body.fake ? div : body).appendChild(style);\n body.appendChild(div);\n\n if (style.styleSheet) {\n style.styleSheet.cssText = rule;\n } else {\n style.appendChild(document.createTextNode(rule));\n }\n div.id = mod;\n\n if (body.fake) {\n //avoid crashing IE8, if background image is used\n body.style.background = '';\n //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible\n body.style.overflow = 'hidden';\n docOverflow = docElement.style.overflow;\n docElement.style.overflow = 'hidden';\n docElement.appendChild(body);\n }\n\n ret = callback(div, rule);\n // If this is done after page load we don't want to remove the body so check if body exists\n if (body.fake && body.parentNode) {\n body.parentNode.removeChild(body);\n docElement.style.overflow = docOverflow;\n // Trigger layout so kinetic scrolling isn't disabled in iOS6+\n // eslint-disable-next-line\n docElement.offsetHeight;\n } else {\n div.parentNode.removeChild(div);\n }\n\n return !!ret;\n }\n\n ;\n\n /**\n * testStyles injects an element with style element and some CSS rules\n *\n * @memberOf Modernizr\n * @name Modernizr.testStyles\n * @optionName Modernizr.testStyles()\n * @optionProp testStyles\n * @access public\n * @function testStyles\n * @param {string} rule - String representing a css rule\n * @param {Function} callback - A function that is used to test the injected element\n * @param {number} [nodes] - An integer representing the number of additional nodes you want injected\n * @param {string[]} [testnames] - An array of strings that are used as ids for the additional nodes\n * @returns {boolean}\n * @example\n *\n * `Modernizr.testStyles` takes a CSS rule and injects it onto the current page\n * along with (possibly multiple) DOM elements. This lets you check for features\n * that can not be detected by simply checking the [IDL](https://developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/Interface_development_guide/IDL_interface_rules).\n *\n * ```js\n * Modernizr.testStyles('#modernizr { width: 9px; color: papayawhip; }', function(elem, rule) {\n * // elem is the first DOM node in the page (by default #modernizr)\n * // rule is the first argument you supplied - the CSS rule in string form\n *\n * addTest('widthworks', elem.style.width === '9px')\n * });\n * ```\n *\n * If your test requires multiple nodes, you can include a third argument\n * indicating how many additional div elements to include on the page. The\n * additional nodes are injected as children of the `elem` that is returned as\n * the first argument to the callback.\n *\n * ```js\n * Modernizr.testStyles('#modernizr {width: 1px}; #modernizr2 {width: 2px}', function(elem) {\n * document.getElementById('modernizr').style.width === '1px'; // true\n * document.getElementById('modernizr2').style.width === '2px'; // true\n * elem.firstChild === document.getElementById('modernizr2'); // true\n * }, 1);\n * ```\n *\n * By default, all of the additional elements have an ID of `modernizr[n]`, where\n * `n` is its index (e.g. the first additional, second overall is `#modernizr2`,\n * the second additional is `#modernizr3`, etc.).\n * If you want to have more meaningful IDs for your function, you can provide\n * them as the fourth argument, as an array of strings\n *\n * ```js\n * Modernizr.testStyles('#foo {width: 10px}; #bar {height: 20px}', function(elem) {\n * elem.firstChild === document.getElementById('foo'); // true\n * elem.lastChild === document.getElementById('bar'); // true\n * }, 2, ['foo', 'bar']);\n * ```\n */\n var testStyles = ModernizrProto.testStyles = injectElementWithStyles;\n\n /*!\n {\n \"name\": \"Form Validation\",\n \"property\": \"formvalidation\",\n \"tags\": [\"forms\", \"validation\", \"attribute\"],\n \"builderAliases\": [\"forms_validation\"]\n }\n !*/\n /* DOC\n This implementation only tests support for interactive form validation.\n To check validation for a specific type or a specific other constraint,\n the test can be combined:\n\n - `Modernizr.inputtypes.number && Modernizr.formvalidation` (browser supports rangeOverflow, typeMismatch etc. for type=number)\n - `Modernizr.input.required && Modernizr.formvalidation` (browser supports valueMissing)\n */\n\n Modernizr.addTest('formvalidation', function() {\n var form = createElement('form');\n if (!('checkValidity' in form) || !('addEventListener' in form)) {\n return false;\n }\n if ('reportValidity' in form) {\n return true;\n }\n var invalidFired = false;\n var input;\n\n Modernizr.formvalidationapi = true;\n\n // Prevent form from being submitted\n form.addEventListener('submit', function(e) {\n // Old Presto based Opera does not validate form, if submit is prevented\n // although Opera Mini servers use newer Presto.\n if (!window.opera || window.operamini) {\n e.preventDefault();\n }\n e.stopPropagation();\n }, false);\n\n // Calling form.submit() doesn't trigger interactive validation,\n // use a submit button instead\n //older opera browsers need a name attribute\n form.innerHTML = '<input name=\"modTest\" required=\"required\" /><button></button>';\n\n testStyles('#modernizr form{position:absolute;top:-99999em}', function(node) {\n node.appendChild(form);\n\n input = form.getElementsByTagName('input')[0];\n\n // Record whether \"invalid\" event is fired\n input.addEventListener('invalid', function(e) {\n invalidFired = true;\n e.preventDefault();\n e.stopPropagation();\n }, false);\n\n //Opera does not fully support the validationMessage property\n Modernizr.formvalidationmessage = !!input.validationMessage;\n\n // Submit form by clicking submit button\n form.getElementsByTagName('button')[0].click();\n });\n\n return invalidFired;\n });\n\n\n /**\n * since we have a fairly large number of input tests that don't mutate the input\n * we create a single element that can be shared with all of those tests for a\n * minor perf boost\n *\n * @access private\n * @returns {HTMLInputElement}\n */\n var inputElem = createElement('input');\n\n /*!\n {\n \"name\": \"Input attributes\",\n \"property\": \"input\",\n \"tags\": [\"forms\"],\n \"authors\": [\"Mike Taylor\"],\n \"notes\": [{\n \"name\": \"WHATWG Spec\",\n \"href\": \"https://html.spec.whatwg.org/multipage/input.html#input-type-attr-summary\"\n }],\n \"knownBugs\": [\"Some blackberry devices report false positive for input.multiple\"]\n }\n !*/\n /* DOC\n Detects support for HTML5 `<input>` element attributes and exposes Boolean subproperties with the results:\n\n ```javascript\n Modernizr.input.autocomplete\n Modernizr.input.autofocus\n Modernizr.input.list\n Modernizr.input.max\n Modernizr.input.min\n Modernizr.input.multiple\n Modernizr.input.pattern\n Modernizr.input.placeholder\n Modernizr.input.required\n Modernizr.input.step\n ```\n */\n\n // Run through HTML5's new input attributes to see if the UA understands any.\n // Mike Taylr has created a comprehensive resource for testing these attributes\n // when applied to all input types:\n // miketaylr.com/code/input-type-attr.html\n\n // Only input placeholder is tested while textarea's placeholder is not.\n // Currently Safari 4 and Opera 11 have support only for the input placeholder\n // Both tests are available in feature-detects/forms-placeholder.js\n\n var inputattrs = 'autocomplete autofocus list placeholder max min multiple pattern required step'.split(' ');\n var attrs = {};\n\n Modernizr.input = (function(props) {\n for (var i = 0, len = props.length; i < len; i++) {\n attrs[ props[i] ] = !!(props[i] in inputElem);\n }\n if (attrs.list) {\n // safari false positive's on datalist: webk.it/74252\n // see also github.com/Modernizr/Modernizr/issues/146\n attrs.list = !!(createElement('datalist') && window.HTMLDataListElement);\n }\n return attrs;\n })(inputattrs);\n\n\n // Run each test\n testRunner();\n\n // Remove the \"no-js\" class if it exists\n setClasses(classes);\n\n delete ModernizrProto.addTest;\n delete ModernizrProto.addAsyncTest;\n\n // Run the things that are supposed to run after the tests\n for (var i = 0; i < Modernizr._q.length; i++) {\n Modernizr._q[i]();\n }\n\n // Leak Modernizr namespace\n scriptGlobalObject.Modernizr = Modernizr;\n\n\n ;\n\n})(window, window, document);\n","/*!\n * domready (c) Dustin Diaz 2014 - License MIT\n */\n!function (name, definition) {\n\n if (typeof module != 'undefined') module.exports = definition()\n else if (typeof define == 'function' && typeof define.amd == 'object') define(definition)\n else this[name] = definition()\n\n}('domready', function () {\n\n var fns = [], listener\n , doc = document\n , hack = doc.documentElement.doScroll\n , domContentLoaded = 'DOMContentLoaded'\n , loaded = (hack ? /^loaded|^c/ : /^loaded|^i|^c/).test(doc.readyState)\n\n\n if (!loaded)\n doc.addEventListener(domContentLoaded, listener = function () {\n doc.removeEventListener(domContentLoaded, listener)\n loaded = 1\n while (listener = fns.shift()) listener()\n })\n\n return function (fn) {\n loaded ? setTimeout(fn, 0) : fns.push(fn)\n }\n\n});\n"],"names":["scriptGlobalObject","window","document","undefined","tests","ModernizrProto","test","cb","self","name","fn","options","Modernizr","classes","is","obj","type","testRunner","featureNames","feature","aliasIdx","result","nameIdx","featureName","featureNameSplit","featureIdx","docElement","isSVG","setClasses","className","classPrefix","reJS","hasOwnProp","_hasOwnProperty","object","property","res","cbs","i","addTest","key","last","createElement","getBody","body","injectElementWithStyles","rule","callback","nodes","testnames","mod","style","ret","node","docOverflow","div","testStyles","form","invalidFired","input","e","inputElem","inputattrs","attrs","props","len","definition","module","fns","listener","doc","hack","domContentLoaded","loaded"],"mappings":"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","x_google_ignoreList":[1]}