From 441db99d6a744178e82d502da42f100b6b801386 Mon Sep 17 00:00:00 2001 From: "Samuele E. Locatelli" Date: Mon, 19 Oct 2015 18:07:47 +0200 Subject: [PATCH] update modernizer --- .../Scripts/modernizr-2.8.3.js | 6 +- .../Modernizr.2.7.2/Modernizr.2.7.2.nupkg | Bin 21019 -> 0 bytes .../Content/Scripts/modernizr-2.8.3.js | 1406 +++++++++++++++++ .../Modernizr.2.8.3/Modernizr.2.8.3.nupkg | Bin 0 -> 21029 bytes .../Tools/common.ps1 | 0 .../Tools/install.ps1 | 0 .../Tools/uninstall.ps1 | 0 7 files changed, 1409 insertions(+), 3 deletions(-) rename packages/Modernizr.2.7.2/Content/Scripts/modernizr-2.7.2.js => C2P/Scripts/modernizr-2.8.3.js (99%) delete mode 100644 packages/Modernizr.2.7.2/Modernizr.2.7.2.nupkg create mode 100644 packages/Modernizr.2.8.3/Content/Scripts/modernizr-2.8.3.js create mode 100644 packages/Modernizr.2.8.3/Modernizr.2.8.3.nupkg rename packages/{Modernizr.2.7.2 => Modernizr.2.8.3}/Tools/common.ps1 (100%) rename packages/{Modernizr.2.7.2 => Modernizr.2.8.3}/Tools/install.ps1 (100%) rename packages/{Modernizr.2.7.2 => Modernizr.2.8.3}/Tools/uninstall.ps1 (100%) diff --git a/packages/Modernizr.2.7.2/Content/Scripts/modernizr-2.7.2.js b/C2P/Scripts/modernizr-2.8.3.js similarity index 99% rename from packages/Modernizr.2.7.2/Content/Scripts/modernizr-2.7.2.js rename to C2P/Scripts/modernizr-2.8.3.js index 6829dc3..3365339 100644 --- a/packages/Modernizr.2.7.2/Content/Scripts/modernizr-2.7.2.js +++ b/C2P/Scripts/modernizr-2.8.3.js @@ -1,5 +1,5 @@ /*! - * Modernizr v2.7.2 + * Modernizr v2.8.3 * www.modernizr.com * * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton @@ -24,7 +24,7 @@ window.Modernizr = (function( window, document, undefined ) { - var version = '2.7.2', + var version = '2.8.3', Modernizr = {}, @@ -156,7 +156,7 @@ window.Modernizr = (function( window, document, undefined ) { var matchMedia = window.matchMedia || window.msMatchMedia; if ( matchMedia ) { - return matchMedia(mq).matches; + return matchMedia(mq) && matchMedia(mq).matches || false; } var bool; diff --git a/packages/Modernizr.2.7.2/Modernizr.2.7.2.nupkg b/packages/Modernizr.2.7.2/Modernizr.2.7.2.nupkg deleted file mode 100644 index 8f97eda9d2097b97c8ce15e46c1e6e0cb21f6180..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21019 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 F{RPFQ-WmV^ diff --git a/packages/Modernizr.2.8.3/Content/Scripts/modernizr-2.8.3.js b/packages/Modernizr.2.8.3/Content/Scripts/modernizr-2.8.3.js new file mode 100644 index 0000000..3365339 --- /dev/null +++ b/packages/Modernizr.2.8.3/Content/Scripts/modernizr-2.8.3.js @@ -0,0 +1,1406 @@ +/*! + * Modernizr v2.8.3 + * www.modernizr.com + * + * Copyright (c) Faruk Ates, Paul Irish, Alex Sexton + * Available under the BSD and MIT licenses: www.modernizr.com/license/ + */ + +/* + * Modernizr tests which native CSS3 and HTML5 features are available in + * the current UA and makes the results available to you in two ways: + * as properties on a global Modernizr object, and as classes on the + * element. This information allows you to progressively enhance + * your pages with a granular level of control over the experience. + * + * Modernizr has an optional (not included) conditional resource loader + * called Modernizr.load(), based on Yepnope.js (yepnopejs.com). + * To get a build that includes Modernizr.load(), as well as choosing + * which tests to include, go to www.modernizr.com/download/ + * + * Authors Faruk Ates, Paul Irish, Alex Sexton + * Contributors Ryan Seddon, Ben Alman + */ + +window.Modernizr = (function( window, document, undefined ) { + + var version = '2.8.3', + + Modernizr = {}, + + /*>>cssclasses*/ + // option for enabling the HTML classes to be added + enableClasses = true, + /*>>cssclasses*/ + + docElement = document.documentElement, + + /** + * Create our "modernizr" element that we do most feature tests on. + */ + mod = 'modernizr', + modElem = document.createElement(mod), + mStyle = modElem.style, + + /** + * Create the input element for various Web Forms feature tests. + */ + inputElem /*>>inputelem*/ = document.createElement('input') /*>>inputelem*/ , + + /*>>smile*/ + smile = ':)', + /*>>smile*/ + + toString = {}.toString, + + // TODO :: make the prefixes more granular + /*>>prefixes*/ + // List of property values to set for css tests. See ticket #21 + prefixes = ' -webkit- -moz- -o- -ms- '.split(' '), + /*>>prefixes*/ + + /*>>domprefixes*/ + // Following spec is to expose vendor-specific style properties as: + // elem.style.WebkitBorderRadius + // and the following would be incorrect: + // elem.style.webkitBorderRadius + + // Webkit ghosts their properties in lowercase but Opera & Moz do not. + // Microsoft uses a lowercase `ms` instead of the correct `Ms` in IE8+ + // erik.eae.net/archives/2008/03/10/21.48.10/ + + // More here: github.com/Modernizr/Modernizr/issues/issue/21 + omPrefixes = 'Webkit Moz O ms', + + cssomPrefixes = omPrefixes.split(' '), + + domPrefixes = omPrefixes.toLowerCase().split(' '), + /*>>domprefixes*/ + + /*>>ns*/ + ns = {'svg': 'http://www.w3.org/2000/svg'}, + /*>>ns*/ + + tests = {}, + inputs = {}, + attrs = {}, + + classes = [], + + slice = classes.slice, + + featureName, // used in testing loop + + + /*>>teststyles*/ + // Inject element with style element and some CSS rules + injectElementWithStyles = function( rule, callback, nodes, testnames ) { + + var style, ret, node, docOverflow, + div = document.createElement('div'), + // After page load injecting a fake body doesn't work so check if body exists + body = document.body, + // IE6 and 7 won't return offsetWidth or offsetHeight unless it's in the body element, so we fake it. + fakeBody = body || document.createElement('body'); + + if ( parseInt(nodes, 10) ) { + // In order not to give false positives we create a node for each test + // This also allows the method to scale for unspecified uses + while ( nodes-- ) { + node = document.createElement('div'); + node.id = testnames ? testnames[nodes] : mod + (nodes + 1); + div.appendChild(node); + } + } + + // '].join(''); + div.id = mod; + // 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. + // Opera will act all quirky when injecting elements in documentElement when page is served as xml, needs fakebody too. #270 + (body ? div : fakeBody).innerHTML += style; + fakeBody.appendChild(div); + if ( !body ) { + //avoid crashing IE8, if background image is used + fakeBody.style.background = ''; + //Safari 5.13/5.1.4 OSX stops loading if ::-webkit-scrollbar is used and scrollbars are visible + fakeBody.style.overflow = 'hidden'; + docOverflow = docElement.style.overflow; + docElement.style.overflow = 'hidden'; + docElement.appendChild(fakeBody); + } + + ret = callback(div, rule); + // If this is done after page load we don't want to remove the body so check if body exists + if ( !body ) { + fakeBody.parentNode.removeChild(fakeBody); + docElement.style.overflow = docOverflow; + } else { + div.parentNode.removeChild(div); + } + + return !!ret; + + }, + /*>>teststyles*/ + + /*>>mq*/ + // adapted from matchMedia polyfill + // by Scott Jehl and Paul Irish + // gist.github.com/786768 + testMediaQuery = function( mq ) { + + var matchMedia = window.matchMedia || window.msMatchMedia; + if ( matchMedia ) { + return matchMedia(mq) && matchMedia(mq).matches || false; + } + + var bool; + + injectElementWithStyles('@media ' + mq + ' { #' + mod + ' { position: absolute; } }', function( node ) { + bool = (window.getComputedStyle ? + getComputedStyle(node, null) : + node.currentStyle)['position'] == 'absolute'; + }); + + return bool; + + }, + /*>>mq*/ + + + /*>>hasevent*/ + // + // isEventSupported determines if a given element supports the given event + // kangax.github.com/iseventsupported/ + // + // The following results are known incorrects: + // Modernizr.hasEvent("webkitTransitionEnd", elem) // false negative + // Modernizr.hasEvent("textInput") // in Webkit. github.com/Modernizr/Modernizr/issues/333 + // ... + isEventSupported = (function() { + + var TAGNAMES = { + 'select': 'input', 'change': 'input', + 'submit': 'form', 'reset': 'form', + 'error': 'img', 'load': 'img', 'abort': 'img' + }; + + function isEventSupported( eventName, element ) { + + element = element || document.createElement(TAGNAMES[eventName] || 'div'); + eventName = 'on' + eventName; + + // When using `setAttribute`, IE skips "unload", WebKit skips "unload" and "resize", whereas `in` "catches" those + var isSupported = eventName in element; + + if ( !isSupported ) { + // If it has no `setAttribute` (i.e. doesn't implement Node interface), try generic element + if ( !element.setAttribute ) { + element = document.createElement('div'); + } + if ( element.setAttribute && element.removeAttribute ) { + element.setAttribute(eventName, ''); + isSupported = is(element[eventName], 'function'); + + // If property was created, "remove it" (by setting value to `undefined`) + if ( !is(element[eventName], 'undefined') ) { + element[eventName] = undefined; + } + element.removeAttribute(eventName); + } + } + + element = null; + return isSupported; + } + return isEventSupported; + })(), + /*>>hasevent*/ + + // TODO :: Add flag for hasownprop ? didn't last time + + // hasOwnProperty shim by kangax needed for Safari 2.0 support + _hasOwnProperty = ({}).hasOwnProperty, hasOwnProp; + + if ( !is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined') ) { + hasOwnProp = function (object, property) { + return _hasOwnProperty.call(object, property); + }; + } + else { + hasOwnProp = function (object, property) { /* yes, this can give false positives/negatives, but most of the time we don't care about those */ + return ((property in object) && is(object.constructor.prototype[property], 'undefined')); + }; + } + + // Adapted from ES5-shim https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js + // es5.github.com/#x15.3.4.5 + + if (!Function.prototype.bind) { + Function.prototype.bind = function bind(that) { + + var target = this; + + if (typeof target != "function") { + throw new TypeError(); + } + + var args = slice.call(arguments, 1), + bound = function () { + + if (this instanceof bound) { + + var F = function(){}; + F.prototype = target.prototype; + var self = new F(); + + var result = target.apply( + self, + args.concat(slice.call(arguments)) + ); + if (Object(result) === result) { + return result; + } + return self; + + } else { + + return target.apply( + that, + args.concat(slice.call(arguments)) + ); + + } + + }; + + return bound; + }; + } + + /** + * setCss applies given styles to the Modernizr DOM node. + */ + function setCss( str ) { + mStyle.cssText = str; + } + + /** + * setCssAll extrapolates all vendor-specific css strings. + */ + function setCssAll( str1, str2 ) { + return setCss(prefixes.join(str1 + ';') + ( str2 || '' )); + } + + /** + * is returns a boolean for if typeof obj is exactly type. + */ + function is( obj, type ) { + return typeof obj === type; + } + + /** + * contains returns a boolean for if substr is found within str. + */ + function contains( str, substr ) { + return !!~('' + str).indexOf(substr); + } + + /*>>testprop*/ + + // testProps is a generic CSS / DOM property test. + + // In testing support for a given CSS property, it's legit to test: + // `elem.style[styleName] !== undefined` + // If the property is supported it will return an empty string, + // if unsupported it will return undefined. + + // We'll take advantage of this quick test and skip setting a style + // on our modernizr element, but instead just testing undefined vs + // empty string. + + // Because the testing of the CSS property names (with "-", as + // opposed to the camelCase DOM properties) is non-portable and + // non-standard but works in WebKit and IE (but not Gecko or Opera), + // we explicitly reject properties with dashes so that authors + // developing in WebKit or IE first don't end up with + // browser-specific content by accident. + + function testProps( props, prefixed ) { + for ( var i in props ) { + var prop = props[i]; + if ( !contains(prop, "-") && mStyle[prop] !== undefined ) { + return prefixed == 'pfx' ? prop : true; + } + } + return false; + } + /*>>testprop*/ + + // TODO :: add testDOMProps + /** + * testDOMProps is a generic DOM property test; if a browser supports + * a certain property, it won't return undefined for it. + */ + function testDOMProps( props, obj, elem ) { + for ( var i in props ) { + var item = obj[props[i]]; + if ( item !== undefined) { + + // return the property name as a string + if (elem === false) return props[i]; + + // let's bind a function + if (is(item, 'function')){ + // default to autobind unless override + return item.bind(elem || obj); + } + + // return the unbound function or obj or value + return item; + } + } + return false; + } + + /*>>testallprops*/ + /** + * testPropsAll tests a list of DOM properties we want to check against. + * We specify literally ALL possible (known and/or likely) properties on + * the element including the non-vendor prefixed one, for forward- + * compatibility. + */ + function testPropsAll( prop, prefixed, elem ) { + + var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1), + props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' '); + + // did they call .prefixed('boxSizing') or are we just testing a prop? + if(is(prefixed, "string") || is(prefixed, "undefined")) { + return testProps(props, prefixed); + + // otherwise, they called .prefixed('requestAnimationFrame', window[, elem]) + } else { + props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' '); + return testDOMProps(props, prefixed, elem); + } + } + /*>>testallprops*/ + + + /** + * Tests + * ----- + */ + + // The *new* flexbox + // dev.w3.org/csswg/css3-flexbox + + tests['flexbox'] = function() { + return testPropsAll('flexWrap'); + }; + + // The *old* flexbox + // www.w3.org/TR/2009/WD-css3-flexbox-20090723/ + + tests['flexboxlegacy'] = function() { + return testPropsAll('boxDirection'); + }; + + // On the S60 and BB Storm, getContext exists, but always returns undefined + // so we actually have to call getContext() to verify + // github.com/Modernizr/Modernizr/issues/issue/97/ + + tests['canvas'] = function() { + var elem = document.createElement('canvas'); + return !!(elem.getContext && elem.getContext('2d')); + }; + + tests['canvastext'] = function() { + return !!(Modernizr['canvas'] && is(document.createElement('canvas').getContext('2d').fillText, 'function')); + }; + + // webk.it/70117 is tracking a legit WebGL feature detect proposal + + // We do a soft detect which may false positive in order to avoid + // an expensive context creation: bugzil.la/732441 + + tests['webgl'] = function() { + return !!window.WebGLRenderingContext; + }; + + /* + * The Modernizr.touch test only indicates if the browser supports + * touch events, which does not necessarily reflect a touchscreen + * device, as evidenced by tablets running Windows 7 or, alas, + * the Palm Pre / WebOS (touch) phones. + * + * Additionally, Chrome (desktop) used to lie about its support on this, + * but that has since been rectified: crbug.com/36415 + * + * We also test for Firefox 4 Multitouch Support. + * + * For more info, see: modernizr.github.com/Modernizr/touch.html + */ + + tests['touch'] = function() { + var bool; + + if(('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) { + bool = true; + } else { + injectElementWithStyles(['@media (',prefixes.join('touch-enabled),('),mod,')','{#modernizr{top:9px;position:absolute}}'].join(''), function( node ) { + bool = node.offsetTop === 9; + }); + } + + return bool; + }; + + + // geolocation is often considered a trivial feature detect... + // Turns out, it's quite tricky to get right: + // + // Using !!navigator.geolocation does two things we don't want. It: + // 1. Leaks memory in IE9: github.com/Modernizr/Modernizr/issues/513 + // 2. Disables page caching in WebKit: webk.it/43956 + // + // Meanwhile, in Firefox < 8, an about:config setting could expose + // a false positive that would throw an exception: bugzil.la/688158 + + tests['geolocation'] = function() { + return 'geolocation' in navigator; + }; + + + tests['postmessage'] = function() { + return !!window.postMessage; + }; + + + // Chrome incognito mode used to throw an exception when using openDatabase + // It doesn't anymore. + tests['websqldatabase'] = function() { + return !!window.openDatabase; + }; + + // Vendors had inconsistent prefixing with the experimental Indexed DB: + // - Webkit's implementation is accessible through webkitIndexedDB + // - Firefox shipped moz_indexedDB before FF4b9, but since then has been mozIndexedDB + // For speed, we don't test the legacy (and beta-only) indexedDB + tests['indexedDB'] = function() { + return !!testPropsAll("indexedDB", window); + }; + + // documentMode logic from YUI to filter out IE8 Compat Mode + // which false positives. + tests['hashchange'] = function() { + return isEventSupported('hashchange', window) && (document.documentMode === undefined || document.documentMode > 7); + }; + + // Per 1.6: + // This used to be Modernizr.historymanagement but the longer + // name has been deprecated in favor of a shorter and property-matching one. + // The old API is still available in 1.6, but as of 2.0 will throw a warning, + // and in the first release thereafter disappear entirely. + tests['history'] = function() { + return !!(window.history && history.pushState); + }; + + tests['draganddrop'] = function() { + var div = document.createElement('div'); + return ('draggable' in div) || ('ondragstart' in div && 'ondrop' in div); + }; + + // FF3.6 was EOL'ed on 4/24/12, but the ESR version of FF10 + // will be supported until FF19 (2/12/13), at which time, ESR becomes FF17. + // FF10 still uses prefixes, so check for it until then. + // for more ESR info, see: mozilla.org/en-US/firefox/organizations/faq/ + tests['websockets'] = function() { + return 'WebSocket' in window || 'MozWebSocket' in window; + }; + + + // css-tricks.com/rgba-browser-support/ + tests['rgba'] = function() { + // Set an rgba() color and check the returned value + + setCss('background-color:rgba(150,255,150,.5)'); + + return contains(mStyle.backgroundColor, 'rgba'); + }; + + tests['hsla'] = function() { + // Same as rgba(), in fact, browsers re-map hsla() to rgba() internally, + // except IE9 who retains it as hsla + + setCss('background-color:hsla(120,40%,100%,.5)'); + + return contains(mStyle.backgroundColor, 'rgba') || contains(mStyle.backgroundColor, 'hsla'); + }; + + tests['multiplebgs'] = function() { + // Setting multiple images AND a color on the background shorthand property + // and then querying the style.background property value for the number of + // occurrences of "url(" is a reliable method for detecting ACTUAL support for this! + + setCss('background:url(https://),url(https://),red url(https://)'); + + // If the UA supports multiple backgrounds, there should be three occurrences + // of the string "url(" in the return value for elemStyle.background + + return (/(url\s*\(.*?){3}/).test(mStyle.background); + }; + + + + // this will false positive in Opera Mini + // github.com/Modernizr/Modernizr/issues/396 + + tests['backgroundsize'] = function() { + return testPropsAll('backgroundSize'); + }; + + tests['borderimage'] = function() { + return testPropsAll('borderImage'); + }; + + + // Super comprehensive table about all the unique implementations of + // border-radius: muddledramblings.com/table-of-css3-border-radius-compliance + + tests['borderradius'] = function() { + return testPropsAll('borderRadius'); + }; + + // WebOS unfortunately false positives on this test. + tests['boxshadow'] = function() { + return testPropsAll('boxShadow'); + }; + + // FF3.0 will false positive on this test + tests['textshadow'] = function() { + return document.createElement('div').style.textShadow === ''; + }; + + + tests['opacity'] = function() { + // Browsers that actually have CSS Opacity implemented have done so + // according to spec, which means their return values are within the + // range of [0.0,1.0] - including the leading zero. + + setCssAll('opacity:.55'); + + // The non-literal . in this regex is intentional: + // German Chrome returns this value as 0,55 + // github.com/Modernizr/Modernizr/issues/#issue/59/comment/516632 + return (/^0.55$/).test(mStyle.opacity); + }; + + + // Note, Android < 4 will pass this test, but can only animate + // a single property at a time + // goo.gl/v3V4Gp + tests['cssanimations'] = function() { + return testPropsAll('animationName'); + }; + + + tests['csscolumns'] = function() { + return testPropsAll('columnCount'); + }; + + + tests['cssgradients'] = function() { + /** + * For CSS Gradients syntax, please see: + * webkit.org/blog/175/introducing-css-gradients/ + * developer.mozilla.org/en/CSS/-moz-linear-gradient + * developer.mozilla.org/en/CSS/-moz-radial-gradient + * dev.w3.org/csswg/css3-images/#gradients- + */ + + var str1 = 'background-image:', + str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));', + str3 = 'linear-gradient(left top,#9f9, white);'; + + setCss( + // legacy webkit syntax (FIXME: remove when syntax not in use anymore) + (str1 + '-webkit- '.split(' ').join(str2 + str1) + + // standard syntax // trailing 'background-image:' + prefixes.join(str3 + str1)).slice(0, -str1.length) + ); + + return contains(mStyle.backgroundImage, 'gradient'); + }; + + + tests['cssreflections'] = function() { + return testPropsAll('boxReflect'); + }; + + + tests['csstransforms'] = function() { + return !!testPropsAll('transform'); + }; + + + tests['csstransforms3d'] = function() { + + var ret = !!testPropsAll('perspective'); + + // Webkit's 3D transforms are passed off to the browser's own graphics renderer. + // It works fine in Safari on Leopard and Snow Leopard, but not in Chrome in + // some conditions. As a result, Webkit typically recognizes the syntax but + // will sometimes throw a false positive, thus we must do a more thorough check: + if ( ret && 'webkitPerspective' in docElement.style ) { + + // Webkit allows this media query to succeed only if the feature is enabled. + // `@media (transform-3d),(-webkit-transform-3d){ ... }` + injectElementWithStyles('@media (transform-3d),(-webkit-transform-3d){#modernizr{left:9px;position:absolute;height:3px;}}', function( node, rule ) { + ret = node.offsetLeft === 9 && node.offsetHeight === 3; + }); + } + return ret; + }; + + + tests['csstransitions'] = function() { + return testPropsAll('transition'); + }; + + + /*>>fontface*/ + // @font-face detection routine by Diego Perini + // javascript.nwbox.com/CSSSupport/ + + // false positives: + // WebOS github.com/Modernizr/Modernizr/issues/342 + // WP7 github.com/Modernizr/Modernizr/issues/538 + tests['fontface'] = function() { + var bool; + + injectElementWithStyles('@font-face {font-family:"font";src:url("https://")}', function( node, rule ) { + var style = document.getElementById('smodernizr'), + sheet = style.sheet || style.styleSheet, + cssText = sheet ? (sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '') : ''; + + bool = /src/i.test(cssText) && cssText.indexOf(rule.split(' ')[0]) === 0; + }); + + return bool; + }; + /*>>fontface*/ + + // CSS generated content detection + tests['generatedcontent'] = function() { + var bool; + + injectElementWithStyles(['#',mod,'{font:0/0 a}#',mod,':after{content:"',smile,'";visibility:hidden;font:3px/1 a}'].join(''), function( node ) { + bool = node.offsetHeight >= 3; + }); + + return bool; + }; + + + + // These tests evaluate support of the video/audio elements, as well as + // testing what types of content they support. + // + // We're using the Boolean constructor here, so that we can extend the value + // e.g. Modernizr.video // true + // Modernizr.video.ogg // 'probably' + // + // Codec values from : github.com/NielsLeenheer/html5test/blob/9106a8/index.html#L845 + // thx to NielsLeenheer and zcorpan + + // Note: in some older browsers, "no" was a return value instead of empty string. + // It was live in FF3.5.0 and 3.5.1, but fixed in 3.5.2 + // It was also live in Safari 4.0.0 - 4.0.4, but fixed in 4.0.5 + + tests['video'] = function() { + var elem = document.createElement('video'), + bool = false; + + // IE9 Running on Windows Server SKU can cause an exception to be thrown, bug #224 + try { + if ( bool = !!elem.canPlayType ) { + bool = new Boolean(bool); + bool.ogg = elem.canPlayType('video/ogg; codecs="theora"') .replace(/^no$/,''); + + // Without QuickTime, this value will be `undefined`. github.com/Modernizr/Modernizr/issues/546 + bool.h264 = elem.canPlayType('video/mp4; codecs="avc1.42E01E"') .replace(/^no$/,''); + + bool.webm = elem.canPlayType('video/webm; codecs="vp8, vorbis"').replace(/^no$/,''); + } + + } catch(e) { } + + return bool; + }; + + tests['audio'] = function() { + var elem = document.createElement('audio'), + bool = false; + + try { + if ( bool = !!elem.canPlayType ) { + bool = new Boolean(bool); + bool.ogg = elem.canPlayType('audio/ogg; codecs="vorbis"').replace(/^no$/,''); + bool.mp3 = elem.canPlayType('audio/mpeg;') .replace(/^no$/,''); + + // Mimetypes accepted: + // developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements + // bit.ly/iphoneoscodecs + bool.wav = elem.canPlayType('audio/wav; codecs="1"') .replace(/^no$/,''); + bool.m4a = ( elem.canPlayType('audio/x-m4a;') || + elem.canPlayType('audio/aac;')) .replace(/^no$/,''); + } + } catch(e) { } + + return bool; + }; + + + // In FF4, if disabled, window.localStorage should === null. + + // Normally, we could not test that directly and need to do a + // `('localStorage' in window) && ` test first because otherwise Firefox will + // throw bugzil.la/365772 if cookies are disabled + + // Also in iOS5 Private Browsing mode, attempting to use localStorage.setItem + // will throw the exception: + // QUOTA_EXCEEDED_ERRROR DOM Exception 22. + // Peculiarly, getItem and removeItem calls do not throw. + + // Because we are forced to try/catch this, we'll go aggressive. + + // Just FWIW: IE8 Compat mode supports these features completely: + // www.quirksmode.org/dom/html5.html + // But IE8 doesn't support either with local files + + tests['localstorage'] = function() { + try { + localStorage.setItem(mod, mod); + localStorage.removeItem(mod); + return true; + } catch(e) { + return false; + } + }; + + tests['sessionstorage'] = function() { + try { + sessionStorage.setItem(mod, mod); + sessionStorage.removeItem(mod); + return true; + } catch(e) { + return false; + } + }; + + + tests['webworkers'] = function() { + return !!window.Worker; + }; + + + tests['applicationcache'] = function() { + return !!window.applicationCache; + }; + + + // Thanks to Erik Dahlstrom + tests['svg'] = function() { + return !!document.createElementNS && !!document.createElementNS(ns.svg, 'svg').createSVGRect; + }; + + // specifically for SVG inline in HTML, not within XHTML + // test page: paulirish.com/demo/inline-svg + tests['inlinesvg'] = function() { + var div = document.createElement('div'); + div.innerHTML = ''; + return (div.firstChild && div.firstChild.namespaceURI) == ns.svg; + }; + + // SVG SMIL animation + tests['smil'] = function() { + return !!document.createElementNS && /SVGAnimate/.test(toString.call(document.createElementNS(ns.svg, 'animate'))); + }; + + // This test is only for clip paths in SVG proper, not clip paths on HTML content + // demo: srufaculty.sru.edu/david.dailey/svg/newstuff/clipPath4.svg + + // However read the comments to dig into applying SVG clippaths to HTML content here: + // github.com/Modernizr/Modernizr/issues/213#issuecomment-1149491 + tests['svgclippaths'] = function() { + return !!document.createElementNS && /SVGClipPath/.test(toString.call(document.createElementNS(ns.svg, 'clipPath'))); + }; + + /*>>webforms*/ + // input features and input types go directly onto the ret object, bypassing the tests loop. + // Hold this guy to execute in a moment. + function webforms() { + /*>>input*/ + // Run through HTML5's new input attributes to see if the UA understands any. + // We're using f which is the element created early on + // Mike Taylr has created a comprehensive resource for testing these attributes + // when applied to all input types: + // miketaylr.com/code/input-type-attr.html + // spec: www.whatwg.org/specs/web-apps/current-work/multipage/the-input-element.html#input-type-attr-summary + + // Only input placeholder is tested while textarea's placeholder is not. + // Currently Safari 4 and Opera 11 have support only for the input placeholder + // Both tests are available in feature-detects/forms-placeholder.js + Modernizr['input'] = (function( props ) { + for ( var i = 0, len = props.length; i < len; i++ ) { + attrs[ props[i] ] = !!(props[i] in inputElem); + } + if (attrs.list){ + // safari false positive's on datalist: webk.it/74252 + // see also github.com/Modernizr/Modernizr/issues/146 + attrs.list = !!(document.createElement('datalist') && window.HTMLDataListElement); + } + return attrs; + })('autocomplete autofocus list placeholder max min multiple pattern required step'.split(' ')); + /*>>input*/ + + /*>>inputtypes*/ + // Run through HTML5's new input types to see if the UA understands any. + // This is put behind the tests runloop because it doesn't return a + // true/false like all the other tests; instead, it returns an object + // containing each input type with its corresponding true/false value + + // Big thanks to @miketaylr for the html5 forms expertise. miketaylr.com/ + Modernizr['inputtypes'] = (function(props) { + + for ( var i = 0, bool, inputElemType, defaultView, len = props.length; i < len; i++ ) { + + inputElem.setAttribute('type', inputElemType = props[i]); + bool = inputElem.type !== 'text'; + + // We first check to see if the type we give it sticks.. + // If the type does, we feed it a textual value, which shouldn't be valid. + // If the value doesn't stick, we know there's input sanitization which infers a custom UI + if ( bool ) { + + inputElem.value = smile; + inputElem.style.cssText = 'position:absolute;visibility:hidden;'; + + if ( /^range$/.test(inputElemType) && inputElem.style.WebkitAppearance !== undefined ) { + + docElement.appendChild(inputElem); + defaultView = document.defaultView; + + // Safari 2-4 allows the smiley as a value, despite making a slider + bool = defaultView.getComputedStyle && + defaultView.getComputedStyle(inputElem, null).WebkitAppearance !== 'textfield' && + // Mobile android web browser has false positive, so must + // check the height to see if the widget is actually there. + (inputElem.offsetHeight !== 0); + + docElement.removeChild(inputElem); + + } else if ( /^(search|tel)$/.test(inputElemType) ){ + // Spec doesn't define any special parsing or detectable UI + // behaviors so we pass these through as true + + // Interestingly, opera fails the earlier test, so it doesn't + // even make it here. + + } else if ( /^(url|email)$/.test(inputElemType) ) { + // Real url and email support comes with prebaked validation. + bool = inputElem.checkValidity && inputElem.checkValidity() === false; + + } else { + // If the upgraded input compontent rejects the :) text, we got a winner + bool = inputElem.value != smile; + } + } + + inputs[ props[i] ] = !!bool; + } + return inputs; + })('search tel url email datetime date month week time datetime-local number range color'.split(' ')); + /*>>inputtypes*/ + } + /*>>webforms*/ + + + // End of test definitions + // ----------------------- + + + + // Run through all tests and detect their support in the current UA. + // todo: hypothetically we could be doing an array of tests and use a basic loop here. + for ( var feature in tests ) { + if ( hasOwnProp(tests, feature) ) { + // run the test, throw the return value into the Modernizr, + // then based on that boolean, define an appropriate className + // and push it into an array of classes we'll join later. + featureName = feature.toLowerCase(); + Modernizr[featureName] = tests[feature](); + + classes.push((Modernizr[featureName] ? '' : 'no-') + featureName); + } + } + + /*>>webforms*/ + // input tests need to run. + Modernizr.input || webforms(); + /*>>webforms*/ + + + /** + * addTest allows the user to define their own feature tests + * the result will be added onto the Modernizr object, + * as well as an appropriate className set on the html element + * + * @param feature - String naming the feature + * @param test - Function returning true if feature is supported, false if not + */ + Modernizr.addTest = function ( feature, test ) { + if ( typeof feature == 'object' ) { + for ( var key in feature ) { + if ( hasOwnProp( feature, key ) ) { + Modernizr.addTest( key, feature[ key ] ); + } + } + } else { + + feature = feature.toLowerCase(); + + if ( Modernizr[feature] !== undefined ) { + // we're going to quit if you're trying to overwrite an existing test + // if we were to allow it, we'd do this: + // var re = new RegExp("\\b(no-)?" + feature + "\\b"); + // docElement.className = docElement.className.replace( re, '' ); + // but, no rly, stuff 'em. + return Modernizr; + } + + test = typeof test == 'function' ? test() : test; + + if (typeof enableClasses !== "undefined" && enableClasses) { + docElement.className += ' ' + (test ? '' : 'no-') + feature; + } + Modernizr[feature] = test; + + } + + return Modernizr; // allow chaining. + }; + + + // Reset modElem.cssText to nothing to reduce memory footprint. + setCss(''); + modElem = inputElem = null; + + /*>>shiv*/ + /** + * @preserve HTML5 Shiv prev3.7.1 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed + */ + ;(function(window, document) { + /*jshint evil:true */ + /** version */ + var version = '3.7.0'; + + /** Preset options */ + var options = window.html5 || {}; + + /** Used to skip problem elements */ + var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i; + + /** Not all elements can be cloned in IE **/ + 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; + + /** Detect whether the browser supports default html5 styles */ + var supportsHtml5Styles; + + /** Name of the expando, to work with multiple documents or to re-shiv one document */ + var expando = '_html5shiv'; + + /** The id for the the documents expando */ + var expanID = 0; + + /** Cached data for each document */ + var expandoData = {}; + + /** Detect whether the browser supports unknown elements */ + var supportsUnknownElements; + + (function() { + try { + var a = document.createElement('a'); + a.innerHTML = ''; + //if the hidden property is implemented we can assume, that the browser supports basic HTML5 Styles + supportsHtml5Styles = ('hidden' in a); + + supportsUnknownElements = a.childNodes.length == 1 || (function() { + // assign a false positive if unable to shiv + (document.createElement)('a'); + var frag = document.createDocumentFragment(); + return ( + typeof frag.cloneNode == 'undefined' || + typeof frag.createDocumentFragment == 'undefined' || + typeof frag.createElement == 'undefined' + ); + }()); + } catch(e) { + // assign a false positive if detection fails => unable to shiv + supportsHtml5Styles = true; + supportsUnknownElements = true; + } + + }()); + + /*--------------------------------------------------------------------------*/ + + /** + * Creates a style sheet with the given CSS text and adds it to the document. + * @private + * @param {Document} ownerDocument The document. + * @param {String} cssText The CSS text. + * @returns {StyleSheet} The style element. + */ + function addStyleSheet(ownerDocument, cssText) { + var p = ownerDocument.createElement('p'), + parent = ownerDocument.getElementsByTagName('head')[0] || ownerDocument.documentElement; + + p.innerHTML = 'x'; + return parent.insertBefore(p.lastChild, parent.firstChild); + } + + /** + * Returns the value of `html5.elements` as an array. + * @private + * @returns {Array} An array of shived element node names. + */ + function getElements() { + var elements = html5.elements; + return typeof elements == 'string' ? elements.split(' ') : elements; + } + + /** + * Returns the data associated to the given document + * @private + * @param {Document} ownerDocument The document. + * @returns {Object} An object of data. + */ + function getExpandoData(ownerDocument) { + var data = expandoData[ownerDocument[expando]]; + if (!data) { + data = {}; + expanID++; + ownerDocument[expando] = expanID; + expandoData[expanID] = data; + } + return data; + } + + /** + * returns a shived element for the given nodeName and document + * @memberOf html5 + * @param {String} nodeName name of the element + * @param {Document} ownerDocument The context document. + * @returns {Object} The shived element. + */ + function createElement(nodeName, ownerDocument, data){ + if (!ownerDocument) { + ownerDocument = document; + } + if(supportsUnknownElements){ + return ownerDocument.createElement(nodeName); + } + if (!data) { + data = getExpandoData(ownerDocument); + } + var node; + + if (data.cache[nodeName]) { + node = data.cache[nodeName].cloneNode(); + } else if (saveClones.test(nodeName)) { + node = (data.cache[nodeName] = data.createElem(nodeName)).cloneNode(); + } else { + node = data.createElem(nodeName); + } + + // Avoid adding some elements to fragments in IE < 9 because + // * Attributes like `name` or `type` cannot be set/changed once an element + // is inserted into a document/fragment + // * Link elements with `src` attributes that are inaccessible, as with + // a 403 response, will cause the tab/window to crash + // * Script elements appended to fragments will execute when their `src` + // or `text` property is set + return node.canHaveChildren && !reSkip.test(nodeName) && !node.tagUrn ? data.frag.appendChild(node) : node; + } + + /** + * returns a shived DocumentFragment for the given document + * @memberOf html5 + * @param {Document} ownerDocument The context document. + * @returns {Object} The shived DocumentFragment. + */ + function createDocumentFragment(ownerDocument, data){ + if (!ownerDocument) { + ownerDocument = document; + } + if(supportsUnknownElements){ + return ownerDocument.createDocumentFragment(); + } + data = data || getExpandoData(ownerDocument); + var clone = data.frag.cloneNode(), + i = 0, + elems = getElements(), + l = elems.length; + for(;i>shiv*/ + + // Assign private properties to the return object with prefix + Modernizr._version = version; + + // expose these for the plugin API. Look in the source for how to join() them against your input + /*>>prefixes*/ + Modernizr._prefixes = prefixes; + /*>>prefixes*/ + /*>>domprefixes*/ + Modernizr._domPrefixes = domPrefixes; + Modernizr._cssomPrefixes = cssomPrefixes; + /*>>domprefixes*/ + + /*>>mq*/ + // Modernizr.mq tests a given media query, live against the current state of the window + // A few important notes: + // * If a browser does not support media queries at all (eg. oldIE) the mq() will always return false + // * A max-width or orientation query will be evaluated against the current state, which may change later. + // * You must specify values. Eg. If you are testing support for the min-width media query use: + // Modernizr.mq('(min-width:0)') + // usage: + // Modernizr.mq('only screen and (max-width:768)') + Modernizr.mq = testMediaQuery; + /*>>mq*/ + + /*>>hasevent*/ + // Modernizr.hasEvent() detects support for a given event, with an optional element to test on + // Modernizr.hasEvent('gesturestart', elem) + Modernizr.hasEvent = isEventSupported; + /*>>hasevent*/ + + /*>>testprop*/ + // Modernizr.testProp() investigates whether a given style property is recognized + // Note that the property names must be provided in the camelCase variant. + // Modernizr.testProp('pointerEvents') + Modernizr.testProp = function(prop){ + return testProps([prop]); + }; + /*>>testprop*/ + + /*>>testallprops*/ + // Modernizr.testAllProps() investigates whether a given style property, + // or any of its vendor-prefixed variants, is recognized + // Note that the property names must be provided in the camelCase variant. + // Modernizr.testAllProps('boxSizing') + Modernizr.testAllProps = testPropsAll; + /*>>testallprops*/ + + + /*>>teststyles*/ + // Modernizr.testStyles() allows you to add custom styles to the document and test an element afterwards + // Modernizr.testStyles('#modernizr { position:absolute }', function(elem, rule){ ... }) + Modernizr.testStyles = injectElementWithStyles; + /*>>teststyles*/ + + + /*>>prefixed*/ + // Modernizr.prefixed() returns the prefixed or nonprefixed property name variant of your input + // Modernizr.prefixed('boxSizing') // 'MozBoxSizing' + + // Properties must be passed as dom-style camelcase, rather than `box-sizing` hypentated style. + // Return values will also be the camelCase variant, if you need to translate that to hypenated style use: + // + // str.replace(/([A-Z])/g, function(str,m1){ return '-' + m1.toLowerCase(); }).replace(/^ms-/,'-ms-'); + + // If you're trying to ascertain which transition end event to bind to, you might do something like... + // + // var transEndEventNames = { + // 'WebkitTransition' : 'webkitTransitionEnd', + // 'MozTransition' : 'transitionend', + // 'OTransition' : 'oTransitionEnd', + // 'msTransition' : 'MSTransitionEnd', + // 'transition' : 'transitionend' + // }, + // transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ]; + + Modernizr.prefixed = function(prop, obj, elem){ + if(!obj) { + return testPropsAll(prop, 'pfx'); + } else { + // Testing DOM property e.g. Modernizr.prefixed('requestAnimationFrame', window) // 'mozRequestAnimationFrame' + return testPropsAll(prop, obj, elem); + } + }; + /*>>prefixed*/ + + + /*>>cssclasses*/ + // Remove "no-js" class from element, if it exists: + docElement.className = docElement.className.replace(/(^|\s)no-js(\s|$)/, '$1$2') + + + // Add the new classes to the element. + (enableClasses ? ' js ' + classes.join(' ') : ''); + /*>>cssclasses*/ + + return Modernizr; + +})(this, this.document); diff --git a/packages/Modernizr.2.8.3/Modernizr.2.8.3.nupkg b/packages/Modernizr.2.8.3/Modernizr.2.8.3.nupkg new file mode 100644 index 0000000000000000000000000000000000000000..64fb86eb7578b21bc7a86a046949b41a9f2f741b GIT binary patch literal 21029 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 HJO1jwoFkSa literal 0 HcmV?d00001 diff --git a/packages/Modernizr.2.7.2/Tools/common.ps1 b/packages/Modernizr.2.8.3/Tools/common.ps1 similarity index 100% rename from packages/Modernizr.2.7.2/Tools/common.ps1 rename to packages/Modernizr.2.8.3/Tools/common.ps1 diff --git a/packages/Modernizr.2.7.2/Tools/install.ps1 b/packages/Modernizr.2.8.3/Tools/install.ps1 similarity index 100% rename from packages/Modernizr.2.7.2/Tools/install.ps1 rename to packages/Modernizr.2.8.3/Tools/install.ps1 diff --git a/packages/Modernizr.2.7.2/Tools/uninstall.ps1 b/packages/Modernizr.2.8.3/Tools/uninstall.ps1 similarity index 100% rename from packages/Modernizr.2.7.2/Tools/uninstall.ps1 rename to packages/Modernizr.2.8.3/Tools/uninstall.ps1