{"version":3,"file":"head.js","sources":["../../sources/javascripts/vendors/modernizr.js"],"sourcesContent":["/*!\n * modernizr v3.6.0\n * Build https://modernizr.com/download?-touchevents-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\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 `` 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.6.0',\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 * 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 * 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 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 * 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 * 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 if (isSVG) {\n docElement.className.baseVal = className;\n } else {\n docElement.className = className;\n }\n }\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\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\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 // 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 /**\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\": \"Touch Events\",\n \"property\": \"touchevents\",\n \"caniuse\" : \"touch\",\n \"tags\": [\"media\", \"attribute\"],\n \"notes\": [{\n \"name\": \"Touch Events spec\",\n \"href\": \"https://www.w3.org/TR/2013/WD-touch-events-20130124/\"\n }],\n \"warnings\": [\n \"Indicates if the browser supports the Touch Events spec, and does not necessarily reflect a touchscreen device\"\n ],\n \"knownBugs\": [\n \"False-positive on some configurations of Nokia N900\",\n \"False-positive on some BlackBerry 6.0 builds – https://github.com/Modernizr/Modernizr/issues/372#issuecomment-3112695\"\n ]\n}\n!*/\n/* DOC\nIndicates if the browser supports the W3C Touch Events API.\n\nThis *does not* necessarily reflect a touchscreen device:\n\n* Older touchscreen devices only emulate mouse events\n* Modern IE touch devices implement the Pointer Events API instead: use `Modernizr.pointerevents` to detect support for that\n* Some browsers & OS setups may enable touch APIs when no touchscreen is connected\n* Future browsers may implement other event models for touch interactions\n\nSee this article: [You Can't Detect A Touchscreen](http://www.stucox.com/blog/you-cant-detect-a-touchscreen/).\n\nIt's recommended to bind both mouse and touch/pointer events simultaneously – see [this HTML5 Rocks tutorial](http://www.html5rocks.com/en/mobile/touchandmouse/).\n\nThis test will also return `true` for Firefox 4 Multitouch support.\n*/\n\n // Chrome (desktop) used to lie about its support on this, but that has since been rectified: http://crbug.com/36415\n Modernizr.addTest('touchevents', function() {\n var bool;\n if (('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {\n bool = true;\n } else {\n // include the 'heartz' as a way to have a non matching MQ to help terminate the join\n // https://git.io/vznFH\n var query = ['@media (', prefixes.join('touch-enabled),('), 'heartz', ')', '{#modernizr{top:9px;position:absolute}}'].join('');\n testStyles(query, function(node) {\n bool = node.offsetTop === 9;\n });\n }\n return bool;\n });\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);"],"names":["window","document","undefined","classes","tests","ModernizrProto","_version","_config","classPrefix","enableClasses","enableJSClass","usePrefixes","_q","on","test","cb","self","this","setTimeout","addTest","name","fn","options","push","addAsyncTest","Modernizr","prototype","docElement","documentElement","prefixes","split","_prefixes","isSVG","nodeName","toLowerCase","createElement","arguments","createElementNS","call","apply","testStyles","rule","callback","nodes","testnames","style","ret","node","docOverflow","mod","div","body","fake","getBody","parseInt","id","appendChild","type","styleSheet","cssText","createTextNode","background","overflow","parentNode","removeChild","offsetHeight","bool","DocumentTouch","query","join","offsetTop","featureNames","feature","aliasIdx","result","nameIdx","featureNameSplit","obj","featureIdx","hasOwnProperty","aliases","length","_typeof","Boolean","testRunner","className","baseVal","reJS","RegExp","replace","setClasses","i"],"mappings":"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"}