{"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]}