{"version":3,"sources":["supported.bundle.js"],"names":["e","t","n","r","s","o","u","a","require","i","f","Error","code","l","exports","call","length","1","module","window","SupportedBrowser","navigator","appVersion","indexOf","Modernizr","backgroundsize","borderradius","cors","cssanimations","csstransforms","csstransitions","fontface","hashchange","inlinesvg","json","opacity","rgba","svg","svgclippaths","document","onreadystatechange","ref","readyState","getElementById","style","display","body","removeChild","className","../vendor/modernizr/modernizr.js","2","undefined","is","obj","type","testRunner","featureNames","feature","aliasIdx","result","nameIdx","featureName","featureNameSplit","featureIdx","tests","hasOwnProperty","name","push","toLowerCase","options","aliases","fn","split","Boolean","classes","join","setClasses","docElement","classPrefix","_config","isSVG","baseVal","enableJSClass","reJS","RegExp","replace","enableClasses","createElement","arguments","createElementNS","apply","contains","str","substr","cssToDOM","m1","m2","toUpperCase","getBody","fake","injectElementWithStyles","rule","callback","nodes","testnames","ret","node","docOverflow","mod","div","parseInt","id","appendChild","styleSheet","cssText","createTextNode","background","overflow","parentNode","offsetHeight","fnBind","that","testDOMProps","props","elem","item","domToCSS","nativeTestProps","value","CSS","supports","conditionText","getComputedStyle","position","testProps","prefixed","skipValueTest","cleanElems","afterInit","mStyle","modElem","propsLength","prop","before","elems","shift","testPropsAll","ucProp","charAt","slice","cssomPrefixes","testAllProps","ModernizrProto","_version","usePrefixes","_q","on","test","cb","self","this","setTimeout","addTest","addAsyncTest","prototype","XMLHttpRequest","JSON","createSVGRect","prefixes","_prefixes","documentElement","nodeName","addStyleSheet","ownerDocument","p","parent","getElementsByTagName","innerHTML","insertBefore","lastChild","firstChild","getElements","elements","html5","addElements","newElements","shivDocument","getExpandoData","data","expandoData","expando","expanID","supportsUnknownElements","cache","cloneNode","saveClones","createElem","canHaveChildren","reSkip","tagUrn","frag","createDocumentFragment","clone","shivMethods","createFrag","Function","shivCSS","supportsHtml5Styles","hasCSS","version","childNodes","omPrefixes","domPrefixes","_domPrefixes","hasEvent","inner","eventName","element","isSupported","needsFallback","setAttribute","removeAttribute","documentMode","backgroundColor","SVGRect","namespaceURI","toStringFn","toString","_cssomPrefixes","testStyles","blacklist","ua","userAgent","wkvers","match","parseFloat","$1","webos","wppre8","oldandroid","sheet","cssRules","bool","unshift","testProp","useValue"],"mappings":"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","file":"supported.bundle.js","sourcesContent":["(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o` 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(window, document, undefined){\n var classes = [];\n \n\n var tests = [];\n \n\n /**\n *\n * ModernizrProto is the constructor for Modernizr\n *\n * @class\n * @access public\n */\n\n var ModernizrProto = {\n // The current version, dummy\n _version: '3.3.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{\n \"name\": \"Cross-Origin Resource Sharing\",\n \"property\": \"cors\",\n \"caniuse\": \"cors\",\n \"authors\": [\"Theodoor van Donge\"],\n \"notes\": [{\n \"name\": \"MDN documentation\",\n \"href\": \"https://developer.mozilla.org/en-US/docs/HTTP/Access_control_CORS\"\n }],\n \"polyfills\": [\"pmxdr\", \"ppx\", \"flxhr\"]\n}\n!*/\n/* DOC\nDetects support for Cross-Origin Resource Sharing: method of performing XMLHttpRequests across domains.\n*/\n\n Modernizr.addTest('cors', 'XMLHttpRequest' in window && 'withCredentials' in new XMLHttpRequest());\n\n/*!\n{\n \"name\": \"JSON\",\n \"property\": \"json\",\n \"caniuse\": \"json\",\n \"notes\": [{\n \"name\": \"MDN documentation\",\n \"href\": \"https://developer.mozilla.org/en-US/docs/Glossary/JSON\"\n }],\n \"polyfills\": [\"json2\"]\n}\n!*/\n/* DOC\nDetects native support for JSON handling functions.\n*/\n\n // this will also succeed if you've loaded the JSON2.js polyfill ahead of time\n // ... but that should be obvious. :)\n\n Modernizr.addTest('json', 'JSON' in window && 'parse' in JSON && 'stringify' in JSON);\n\n/*!\n{\n \"name\": \"SVG\",\n \"property\": \"svg\",\n \"caniuse\": \"svg\",\n \"tags\": [\"svg\"],\n \"authors\": [\"Erik Dahlstrom\"],\n \"polyfills\": [\n \"svgweb\",\n \"raphael\",\n \"amplesdk\",\n \"canvg\",\n \"svg-boilerplate\",\n \"sie\",\n \"dojogfx\",\n \"fabricjs\"\n ]\n}\n!*/\n/* DOC\nDetects support for SVG in `` or `` elements.\n*/\n\n Modernizr.addTest('svg', !!document.createElementNS && !!document.createElementNS('http://www.w3.org/2000/svg', 'svg').createSVGRect);\n\n\n /**\n * List of property values to set for css tests. See ticket #21\n * http://git.io/vUGl4\n *\n * @memberof Modernizr\n * @name Modernizr._prefixes\n * @optionName Modernizr._prefixes\n * @optionProp prefixes\n * @access public\n * @example\n *\n * Modernizr._prefixes is the internal list of prefixes that we test against\n * inside of things like [prefixed](#modernizr-prefixed) and [prefixedCSS](#-code-modernizr-prefixedcss). It is simply\n * an array of kebab-case vendor prefixes you can use within your code.\n *\n * Some common use cases include\n *\n * Generating all possible prefixed version of a CSS property\n * ```js\n * var rule = Modernizr._prefixes.join('transform: rotate(20deg); ');\n *\n * rule === 'transform: rotate(20deg); webkit-transform: rotate(20deg); moz-transform: rotate(20deg); o-transform: rotate(20deg); ms-transform: rotate(20deg);'\n * ```\n *\n * Generating all possible prefixed version of a CSS value\n * ```js\n * rule = 'display:' + Modernizr._prefixes.join('flex; display:') + 'flex';\n *\n * rule === 'display:flex; display:-webkit-flex; display:-moz-flex; display:-o-flex; display:-ms-flex; display:flex'\n * ```\n */\n\n // we use ['',''] rather than an empty array in order to allow a pattern of .`join()`ing prefixes to test\n // values in feature detects to continue to work\n var prefixes = (ModernizrProto._config.usePrefixes ? ' -webkit- -moz- -o- -ms- '.split(' ') : ['','']);\n\n // expose these for the plugin API. Look in the source for how to join() them against your input\n ModernizrProto._prefixes = prefixes;\n\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}\n */\n\n function is(obj, type) {\n return typeof obj === type;\n }\n ;\n\n /**\n * Run through all tests and detect their support in the current UA.\n *\n * @access private\n */\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\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\n /* jshint -W053 */\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]] = 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\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\n var isSVG = docElement.nodeName.toLowerCase() === 'svg';\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\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 className += ' ' + classPrefix + classes.join(' ' + classPrefix);\n isSVG ? docElement.className.baseVal = className : docElement.className = className;\n }\n\n }\n\n ;\n\n/**\n * @optionName html5shiv\n * @optionProp html5shiv\n */\n\n // Take the html5 variable out of the html5shiv scope so we can return it.\n var html5;\n if (!isSVG) {\n /**\n * @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed\n */\n ;(function(window, document) {\n /*jshint evil:true */\n /** version */\n var version = '3.7.3';\n\n /** Preset options */\n var options = window.html5 || {};\n\n /** Used to skip problem elements */\n var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i;\n\n /** Not all elements can be cloned in IE **/\n var saveClones = /^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i;\n\n /** Detect whether the browser supports default html5 styles */\n var supportsHtml5Styles;\n\n /** Name of the expando, to work with multiple documents or to re-shiv one document */\n var expando = '_html5shiv';\n\n /** The id for the the documents expando */\n var expanID = 0;\n\n /** Cached data for each document */\n var expandoData = {};\n\n /** Detect whether the browser supports unknown elements */\n var supportsUnknownElements;\n\n (function() {\n try {\n var a = document.createElement('a');\n a.innerHTML = '';\n //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles\n supportsHtml5Styles = ('hidden' in a);\n\n supportsUnknownElements = a.childNodes.length == 1 || (function() {\n // assign a false positive if unable to shiv\n (document.createElement)('a');\n var frag = document.createDocumentFragment();\n return (\n typeof frag.cloneNode == 'undefined' ||\n typeof frag.createDocumentFragment == 'undefined' ||\n typeof frag.createElement == 'undefined'\n );\n }());\n } catch(e) {\n // assign a false positive if detection fails => unable to shiv\n supportsHtml5Styles = true;\n supportsUnknownElements = true;\n }\n\n }());\n\n /*--------------------------------------------------------------------------*/\n\n /**\n * Creates a style sheet with the given CSS text and adds it to the document.\n * @private\n * @param {Document} ownerDocument The document.\n * @param {String} cssText The CSS text.\n * @returns {StyleSheet} The style element.\n */\n function addStyleSheet(ownerDocument, cssText) {\n var p = ownerDocument.createElement('p'),\n parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement;\n\n p.innerHTML = 'x';\n return parent.insertBefore(p.lastChild, parent.firstChild);\n }\n\n /**\n * Returns the value of `html5.elements` as an array.\n * @private\n * @returns {Array} An array of shived element node names.\n */\n function getElements() {\n var elements = html5.elements;\n return typeof elements == 'string' ? elements.split(' ') : elements;\n }\n\n /**\n * Extends the built-in list of html5 elements\n * @memberOf html5\n * @param {String|Array} newElements whitespace separated list or array of new element names to shiv\n * @param {Document} ownerDocument The context document.\n */\n function addElements(newElements, ownerDocument) {\n var elements = html5.elements;\n if(typeof elements != 'string'){\n elements = elements.join(' ');\n }\n if(typeof newElements != 'string'){\n newElements = newElements.join(' ');\n }\n html5.elements = elements +' '+ newElements;\n shivDocument(ownerDocument);\n }\n\n /**\n * Returns the data associated to the given document\n * @private\n * @param {Document} ownerDocument The document.\n * @returns {Object} An object of data.\n */\n function getExpandoData(ownerDocument) {\n var data = expandoData[ownerDocument[expando]];\n if (!data) {\n data = {};\n expanID++;\n ownerDocument[expando] = expanID;\n expandoData[expanID] = data;\n }\n return data;\n }\n\n /**\n * returns a shived element for the given nodeName and document\n * @memberOf html5\n * @param {String} nodeName name of the element\n * @param {Document|DocumentFragment} ownerDocument The context document.\n * @returns {Object} The shived element.\n */\n function createElement(nodeName, ownerDocument, data){\n if (!ownerDocument) {\n ownerDocument = document;\n }\n if(supportsUnknownElements){\n return ownerDocument.createElement(nodeName);\n }\n if (!data) {\n data = getExpandoData(ownerDocument);\n }\n var node;\n\n if (data.cache[nodeName]) {\n node = data.cache[nodeName].cloneNode();\n } else if (saveClones.test(nodeName)) {\n node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode();\n } else {\n node = data.createElem(nodeName);\n }\n\n // Avoid adding some elements to fragments in IE < 9 because\n // * Attributes like `name` or `type` cannot be set/changed once an element\n // is inserted into a document/fragment\n // * Link elements with `src` attributes that are inaccessible, as with\n // a 403 response, will cause the tab/window to crash\n // * Script elements appended to fragments will execute when their `src`\n // or `text` property is set\n return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node;\n }\n\n /**\n * returns a shived DocumentFragment for the given document\n * @memberOf html5\n * @param {Document} ownerDocument The context document.\n * @returns {Object} The shived DocumentFragment.\n */\n function createDocumentFragment(ownerDocument, data){\n if (!ownerDocument) {\n ownerDocument = document;\n }\n if(supportsUnknownElements){\n return ownerDocument.createDocumentFragment();\n }\n data = data || getExpandoData(ownerDocument);\n var clone = data.frag.cloneNode(),\n i = 0,\n elems = getElements(),\n l = elems.length;\n for(;i 7);\n });\n\n/*!\n{\n \"name\": \"CSS Opacity\",\n \"caniuse\": \"css-opacity\",\n \"property\": \"opacity\",\n \"tags\": [\"css\"]\n}\n!*/\n\n // Browsers that actually have CSS Opacity implemented have done so\n // according to spec, which means their return values are within the\n // range of [0.0,1.0] - including the leading zero.\n\n Modernizr.addTest('opacity', function() {\n var style = createElement('a').style;\n style.cssText = prefixes.join('opacity:.55;');\n\n // The non-literal . in this regex is intentional:\n // German Chrome returns this value as 0,55\n // github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632\n return (/^0.55$/).test(style.opacity);\n });\n\n/*!\n{\n \"name\": \"CSS rgba\",\n \"caniuse\": \"css3-colors\",\n \"property\": \"rgba\",\n \"tags\": [\"css\"],\n \"notes\": [{\n \"name\": \"CSSTricks Tutorial\",\n \"href\": \"https://css-tricks.com/rgba-browser-support/\"\n }]\n}\n!*/\n\n Modernizr.addTest('rgba', function() {\n var style = createElement('a').style;\n style.cssText = 'background-color:rgba(150,255,150,.5)';\n\n return ('' + style.backgroundColor).indexOf('rgba') > -1;\n });\n\n/*!\n{\n \"name\": \"iframe[seamless] Attribute\",\n \"property\": \"seamless\",\n \"tags\": [\"iframe\"],\n \"builderAliases\": [\"iframe_seamless\"],\n \"notes\": [{\n \"name\": \"WhatWG Spec\",\n \"href\": \"https://html.spec.whatwg.org/multipage/embedded-content.html#attr-iframe-seamless\"\n }]\n}\n!*/\n/* DOC\nTest for `seamless` attribute in iframes.\n*/\n\n Modernizr.addTest('seamless', 'seamless' in createElement('iframe'));\n\n/*!\n{\n \"name\": \"Inline SVG\",\n \"property\": \"inlinesvg\",\n \"caniuse\": \"svg-html5\",\n \"tags\": [\"svg\"],\n \"notes\": [{\n \"name\": \"Test page\",\n \"href\": \"https://paulirish.com/demo/inline-svg\"\n }, {\n \"name\": \"Test page and results\",\n \"href\": \"https://codepen.io/eltonmesquita/full/GgXbvo/\"\n }],\n \"polyfills\": [\"inline-svg-polyfill\"],\n \"knownBugs\": [\"False negative on some Chromia browsers.\"]\n}\n!*/\n/* DOC\nDetects support for inline SVG in HTML (not within XHTML).\n*/\n\n Modernizr.addTest('inlinesvg', function() {\n var div = createElement('div');\n div.innerHTML = '';\n return (typeof SVGRect != 'undefined' && div.firstChild && div.firstChild.namespaceURI) == 'http://www.w3.org/2000/svg';\n });\n\n\n /**\n * Object.prototype.toString can be used with every object and allows you to\n * get its class easily. Abstracting it off of an object prevents situations\n * where the toString property has been overridden\n *\n * @access private\n * @function toStringFn\n * @returns {function} An abstracted toString function\n */\n\n var toStringFn = ({}).toString;\n \n/*!\n{\n \"name\": \"SVG clip paths\",\n \"property\": \"svgclippaths\",\n \"tags\": [\"svg\"],\n \"notes\": [{\n \"name\": \"Demo\",\n \"href\": \"http://srufaculty.sru.edu/david.dailey/svg/newstuff/clipPath4.svg\"\n }]\n}\n!*/\n/* DOC\nDetects support for clip paths in SVG (only, not on HTML content).\n\nSee [this discussion](https://github.com/Modernizr/Modernizr/issues/213) regarding applying SVG clip paths to HTML content.\n*/\n\n Modernizr.addTest('svgclippaths', function() {\n return !!document.createElementNS &&\n /SVGClipPath/.test(toStringFn.call(document.createElementNS('http://www.w3.org/2000/svg', 'clipPath')));\n });\n\n\n var cssomPrefixes = (ModernizrProto._config.usePrefixes ? omPrefixes.split(' ') : []);\n ModernizrProto._cssomPrefixes = cssomPrefixes;\n \n\n\n /**\n * contains checks to see if a string contains another string\n *\n * @access private\n * @function contains\n * @param {string} str - The string we want to check for substrings\n * @param {string} substr - The substring we want to search the first string for\n * @returns {boolean}\n */\n\n function contains(str, substr) {\n return !!~('' + str).indexOf(substr);\n }\n\n ;\n\n /**\n * cssToDOM takes a kebab-case string and converts it to camelCase\n * e.g. box-sizing -> boxSizing\n *\n * @access private\n * @function cssToDOM\n * @param {string} name - String name of kebab-case prop we want to convert\n * @returns {string} The camelCase version of the supplied name\n */\n\n function cssToDOM(name) {\n return name.replace(/([a-z])-([a-z])/g, function(str, m1, m2) {\n return m1 + m2.toUpperCase();\n }).replace(/^-/, '');\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\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}\n */\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) {\n body.parentNode.removeChild(body);\n docElement.style.overflow = docOverflow;\n // Trigger layout so kinetic scrolling isn't disabled in iOS6+\n docElement.offsetHeight;\n } else {\n div.parentNode.removeChild(div);\n }\n\n return !!ret;\n\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 */\n\n var testStyles = ModernizrProto.testStyles = injectElementWithStyles;\n \n/*!\n{\n \"name\": \"@font-face\",\n \"property\": \"fontface\",\n \"authors\": [\"Diego Perini\", \"Mat Marquis\"],\n \"tags\": [\"css\"],\n \"knownBugs\": [\n \"False Positive: WebOS https://github.com/Modernizr/Modernizr/issues/342\",\n \"False Postive: WP7 https://github.com/Modernizr/Modernizr/issues/538\"\n ],\n \"notes\": [{\n \"name\": \"@font-face detection routine by Diego Perini\",\n \"href\": \"http://javascript.nwbox.com/CSSSupport/\"\n },{\n \"name\": \"Filament Group @font-face compatibility research\",\n \"href\": \"https://docs.google.com/presentation/d/1n4NyG4uPRjAA8zn_pSQ_Ket0RhcWC6QlZ6LMjKeECo0/edit#slide=id.p\"\n },{\n \"name\": \"Filament Grunticon/@font-face device testing results\",\n \"href\": \"https://docs.google.com/spreadsheet/ccc?key=0Ag5_yGvxpINRdHFYeUJPNnZMWUZKR2ItMEpRTXZPdUE#gid=0\"\n },{\n \"name\": \"CSS fonts on Android\",\n \"href\": \"https://stackoverflow.com/questions/3200069/css-fonts-on-android\"\n },{\n \"name\": \"@font-face and Android\",\n \"href\": \"http://archivist.incutio.com/viewlist/css-discuss/115960\"\n }]\n}\n!*/\n\n var blacklist = (function() {\n var ua = navigator.userAgent;\n var wkvers = ua.match(/applewebkit\\/([0-9]+)/gi) && parseFloat(RegExp.$1);\n var webos = ua.match(/w(eb)?osbrowser/gi);\n var wppre8 = ua.match(/windows phone/gi) && ua.match(/iemobile\\/([0-9])+/gi) && parseFloat(RegExp.$1) >= 9;\n var oldandroid = wkvers < 533 && ua.match(/android/gi);\n return webos || oldandroid || wppre8;\n }());\n if (blacklist) {\n Modernizr.addTest('fontface', false);\n } else {\n testStyles('@font-face {font-family:\"font\";src:url(\"https://\")}', function(node, rule) {\n var style = document.getElementById('smodernizr');\n var sheet = style.sheet || style.styleSheet;\n var cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : '';\n var bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0;\n Modernizr.addTest('fontface', bool);\n });\n }\n;\n\n /**\n * fnBind is a super small [bind](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/bind) polyfill.\n *\n * @access private\n * @function fnBind\n * @param {function} fn - a function you want to change `this` reference to\n * @param {object} that - the `this` you want to call the function with\n * @returns {function} The wrapped version of the supplied function\n */\n\n function fnBind(fn, that) {\n return function() {\n return fn.apply(that, arguments);\n };\n }\n\n ;\n\n /**\n * testDOMProps is a generic DOM property test; if a browser supports\n * a certain property, it won't return undefined for it.\n *\n * @access private\n * @function testDOMProps\n * @param {array.} props - An array of properties to test for\n * @param {object} obj - An object or Element you want to use to test the parameters again\n * @param {boolean|object} elem - An Element to bind the property lookup again. Use `false` to prevent the check\n */\n function testDOMProps(props, obj, elem) {\n var item;\n\n for (var i in props) {\n if (props[i] in obj) {\n\n // return the property name as a string\n if (elem === false) {\n return props[i];\n }\n\n item = obj[props[i]];\n\n // let's bind a function\n if (is(item, 'function')) {\n // bind to obj unless overriden\n return fnBind(item, elem || obj);\n }\n\n // return the unbound function or obj or value\n return item;\n }\n }\n return false;\n }\n\n ;\n\n /**\n * Create our \"modernizr\" element that we do most feature tests on.\n *\n * @access private\n */\n\n var modElem = {\n elem: createElement('modernizr')\n };\n\n // Clean up this element\n Modernizr._q.push(function() {\n delete modElem.elem;\n });\n\n \n\n var mStyle = {\n style: modElem.elem.style\n };\n\n // kill ref for gc, must happen before mod.elem is removed, so we unshift on to\n // the front of the queue.\n Modernizr._q.unshift(function() {\n delete mStyle.style;\n });\n\n \n\n /**\n * domToCSS takes a camelCase string and converts it to kebab-case\n * e.g. boxSizing -> box-sizing\n *\n * @access private\n * @function domToCSS\n * @param {string} name - String name of camelCase prop we want to convert\n * @returns {string} The kebab-case version of the supplied name\n */\n\n function domToCSS(name) {\n return name.replace(/([A-Z])/g, function(str, m1) {\n return '-' + m1.toLowerCase();\n }).replace(/^ms-/, '-ms-');\n }\n ;\n\n /**\n * nativeTestProps allows for us to use native feature detection functionality if available.\n * some prefixed form, or false, in the case of an unsupported rule\n *\n * @access private\n * @function nativeTestProps\n * @param {array} props - An array of property names\n * @param {string} value - A string representing the value we want to check via @supports\n * @returns {boolean|undefined} A boolean when @supports exists, undefined otherwise\n */\n\n // Accepts a list of property names and a single value\n // Returns `undefined` if native detection not available\n function nativeTestProps(props, value) {\n var i = props.length;\n // Start with the JS API: http://www.w3.org/TR/css3-conditional/#the-css-interface\n if ('CSS' in window && 'supports' in window.CSS) {\n // Try every prefixed variant of the property\n while (i--) {\n if (window.CSS.supports(domToCSS(props[i]), value)) {\n return true;\n }\n }\n return false;\n }\n // Otherwise fall back to at-rule (for Opera 12.x)\n else if ('CSSSupportsRule' in window) {\n // Build a condition string for every prefixed variant\n var conditionText = [];\n while (i--) {\n conditionText.push('(' + domToCSS(props[i]) + ':' + value + ')');\n }\n conditionText = conditionText.join(' or ');\n return injectElementWithStyles('@supports (' + conditionText + ') { #modernizr { position: absolute; } }', function(node) {\n return getComputedStyle(node, null).position == 'absolute';\n });\n }\n return undefined;\n }\n ;\n\n // testProps is a generic CSS / DOM property test.\n\n // In testing support for a given CSS property, it's legit to test:\n // `elem.style[styleName] !== undefined`\n // If the property is supported it will return an empty string,\n // if unsupported it will return undefined.\n\n // We'll take advantage of this quick test and skip setting a style\n // on our modernizr element, but instead just testing undefined vs\n // empty string.\n\n // Property names can be provided in either camelCase or kebab-case.\n\n function testProps(props, prefixed, value, skipValueTest) {\n skipValueTest = is(skipValueTest, 'undefined') ? false : skipValueTest;\n\n // Try native detect first\n if (!is(value, 'undefined')) {\n var result = nativeTestProps(props, value);\n if (!is(result, 'undefined')) {\n return result;\n }\n }\n\n // Otherwise do it properly\n var afterInit, i, propsLength, prop, before;\n\n // If we don't have a style element, that means we're running async or after\n // the core tests, so we'll need to create our own elements to use\n\n // inside of an SVG element, in certain browsers, the `style` element is only\n // defined for valid tags. Therefore, if `modernizr` does not have one, we\n // fall back to a less used element and hope for the best.\n var elems = ['modernizr', 'tspan'];\n while (!mStyle.style) {\n afterInit = true;\n mStyle.modElem = createElement(elems.shift());\n mStyle.style = mStyle.modElem.style;\n }\n\n // Delete the objects if we created them.\n function cleanElems() {\n if (afterInit) {\n delete mStyle.style;\n delete mStyle.modElem;\n }\n }\n\n propsLength = props.length;\n for (i = 0; i < propsLength; i++) {\n prop = props[i];\n before = mStyle.style[prop];\n\n if (contains(prop, '-')) {\n prop = cssToDOM(prop);\n }\n\n if (mStyle.style[prop] !== undefined) {\n\n // If value to test has been passed in, do a set-and-check test.\n // 0 (integer) is a valid property value, so check that `value` isn't\n // undefined, rather than just checking it's truthy.\n if (!skipValueTest && !is(value, 'undefined')) {\n\n // Needs a try catch block because of old IE. This is slow, but will\n // be avoided in most cases because `skipValueTest` will be used.\n try {\n mStyle.style[prop] = value;\n } catch (e) {}\n\n // If the property value has changed, we assume the value used is\n // supported. If `value` is empty string, it'll fail here (because\n // it hasn't changed), which matches how browsers have implemented\n // CSS.supports()\n if (mStyle.style[prop] != before) {\n cleanElems();\n return prefixed == 'pfx' ? prop : true;\n }\n }\n // Otherwise just return true, or the property name if this is a\n // `prefixed()` call\n else {\n cleanElems();\n return prefixed == 'pfx' ? prop : true;\n }\n }\n }\n cleanElems();\n return false;\n }\n\n ;\n\n /**\n * testProp() investigates whether a given style property is recognized\n * Property names can be provided in either camelCase or kebab-case.\n *\n * @memberof Modernizr\n * @name Modernizr.testProp\n * @access public\n * @optionName Modernizr.testProp()\n * @optionProp testProp\n * @function testProp\n * @param {string} prop - Name of the CSS property to check\n * @param {string} [value] - Name of the CSS value to check\n * @param {boolean} [useValue] - Whether or not to check the value if @supports isn't supported\n * @returns {boolean}\n * @example\n *\n * Just like [testAllProps](#modernizr-testallprops), only it does not check any vendor prefixed\n * version of the string.\n *\n * Note that the property name must be provided in camelCase (e.g. boxSizing not box-sizing)\n *\n * ```js\n * Modernizr.testProp('pointerEvents') // true\n * ```\n *\n * You can also provide a value as an optional second argument to check if a\n * specific value is supported\n *\n * ```js\n * Modernizr.testProp('pointerEvents', 'none') // true\n * Modernizr.testProp('pointerEvents', 'penguin') // false\n * ```\n */\n\n var testProp = ModernizrProto.testProp = function(prop, value, useValue) {\n return testProps([prop], undefined, value, useValue);\n };\n \n\n /**\n * testPropsAll tests a list of DOM properties we want to check against.\n * We specify literally ALL possible (known and/or likely) properties on\n * the element including the non-vendor prefixed one, for forward-\n * compatibility.\n *\n * @access private\n * @function testPropsAll\n * @param {string} prop - A string of the property to test for\n * @param {string|object} [prefixed] - An object to check the prefixed properties on. Use a string to skip\n * @param {HTMLElement|SVGElement} [elem] - An element used to test the property and value against\n * @param {string} [value] - A string of a css value\n * @param {boolean} [skipValueTest] - An boolean representing if you want to test if value sticks when set\n */\n function testPropsAll(prop, prefixed, elem, value, skipValueTest) {\n\n var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1),\n props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' ');\n\n // did they call .prefixed('boxSizing') or are we just testing a prop?\n if (is(prefixed, 'string') || is(prefixed, 'undefined')) {\n return testProps(props, prefixed, value, skipValueTest);\n\n // otherwise, they called .prefixed('requestAnimationFrame', window[, elem])\n } else {\n props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' ');\n return testDOMProps(props, prefixed, elem);\n }\n }\n\n // Modernizr.testAllProps() investigates whether a given style property,\n // or any of its vendor-prefixed variants, is recognized\n //\n // Note that the property names must be provided in the camelCase variant.\n // Modernizr.testAllProps('boxSizing')\n ModernizrProto.testAllProps = testPropsAll;\n\n \n\n /**\n * testAllProps determines whether a given CSS property is supported in the browser\n *\n * @memberof Modernizr\n * @name Modernizr.testAllProps\n * @optionName Modernizr.testAllProps()\n * @optionProp testAllProps\n * @access public\n * @function testAllProps\n * @param {string} prop - String naming the property to test (either camelCase or kebab-case)\n * @param {string} [value] - String of the value to test\n * @param {boolean} [skipValueTest=false] - Whether to skip testing that the value is supported when using non-native detection\n * @example\n *\n * testAllProps determines whether a given CSS property, in some prefixed form,\n * is supported by the browser.\n *\n * ```js\n * testAllProps('boxSizing') // true\n * ```\n *\n * It can optionally be given a CSS value in string form to test if a property\n * value is valid\n *\n * ```js\n * testAllProps('display', 'block') // true\n * testAllProps('display', 'penguin') // false\n * ```\n *\n * A boolean can be passed as a third parameter to skip the value check when\n * native detection (@supports) isn't available.\n *\n * ```js\n * testAllProps('shapeOutside', 'content-box', true);\n * ```\n */\n\n function testAllProps(prop, value, skipValueTest) {\n return testPropsAll(prop, undefined, undefined, value, skipValueTest);\n }\n ModernizrProto.testAllProps = testAllProps;\n \n/*!\n{\n \"name\": \"CSS Animations\",\n \"property\": \"cssanimations\",\n \"caniuse\": \"css-animation\",\n \"polyfills\": [\"transformie\", \"csssandpaper\"],\n \"tags\": [\"css\"],\n \"warnings\": [\"Android < 4 will pass this test, but can only animate a single property at a time\"],\n \"notes\": [{\n \"name\" : \"Article: 'Dispelling the Android CSS animation myths'\",\n \"href\": \"https://goo.gl/OGw5Gm\"\n }]\n}\n!*/\n/* DOC\nDetects whether or not elements can be animated using CSS\n*/\n\n Modernizr.addTest('cssanimations', testAllProps('animationName', 'a', true));\n\n/*!\n{\n \"name\": \"Background Size\",\n \"property\": \"backgroundsize\",\n \"tags\": [\"css\"],\n \"knownBugs\": [\"This will false positive in Opera Mini - https://github.com/Modernizr/Modernizr/issues/396\"],\n \"notes\": [{\n \"name\": \"Related Issue\",\n \"href\": \"https://github.com/Modernizr/Modernizr/issues/396\"\n }]\n}\n!*/\n\n Modernizr.addTest('backgroundsize', testAllProps('backgroundSize', '100%', true));\n\n/*!\n{\n \"name\": \"Border Radius\",\n \"property\": \"borderradius\",\n \"caniuse\": \"border-radius\",\n \"polyfills\": [\"css3pie\"],\n \"tags\": [\"css\"],\n \"notes\": [{\n \"name\": \"Comprehensive Compat Chart\",\n \"href\": \"https://muddledramblings.com/table-of-css3-border-radius-compliance\"\n }]\n}\n!*/\n\n Modernizr.addTest('borderradius', testAllProps('borderRadius', '0px', true));\n\n/*!\n{\n \"name\": \"CSS Transforms\",\n \"property\": \"csstransforms\",\n \"caniuse\": \"transforms2d\",\n \"tags\": [\"css\"]\n}\n!*/\n\n Modernizr.addTest('csstransforms', function() {\n // Android < 3.0 is buggy, so we sniff and blacklist\n // http://git.io/hHzL7w\n return navigator.userAgent.indexOf('Android 2.') === -1 &&\n testAllProps('transform', 'scale(1)', true);\n });\n\n/*!\n{\n \"name\": \"CSS Transitions\",\n \"property\": \"csstransitions\",\n \"caniuse\": \"css-transitions\",\n \"tags\": [\"css\"]\n}\n!*/\n\n Modernizr.addTest('csstransitions', testAllProps('transition', 'all', true));\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 window.Modernizr = Modernizr;\n\n\n;\n\n})(window, document);\n},{}]},{},[1]);\n"]}