1/* 2 modernizr v3.13.0 3 Build https://modernizr.com/download?-applicationcache-audio-backgroundsize-borderimage-borderradius-boxshadow-canvas-canvastext-cssanimations-csscolumns-cssgradients-cssreflections-csstransforms-csstransforms3d-csstransitions-flexbox-flexboxlegacy-fontface-forcetouch-generatedcontent-geolocation-hashchange-history-hsla-indexeddb-inlinesvg-localstorage-multiplebgs-opacity-postmessage-rgba-sessionstorage-smil-svg-svgclippaths-textshadow-touchevents-video-webgl-websockets-websqldatabase-webworkers-setclasses-dontmin 4 5 Copyright (c) 6 Faruk Ates 7 Paul Irish 8 Alex Sexton 9 Ryan Seddon 10 Patrick Kettner 11 Stu Cox 12 Richard Herrera 13 Veeck 14 15 MIT License 16 { 17 "name": "Application Cache", 18 "property": "applicationcache", 19 "caniuse": "offline-apps", 20 "tags": ["storage", "offline"], 21 "notes": [{ 22 "name": "MDN Docs", 23 "href": "https://developer.mozilla.org/en/docs/HTML/Using_the_application_cache" 24 }], 25 "polyfills": ["html5gears"] 26 } 27 ! { 28 "name": "HTML5 Audio Element", 29 "property": "audio", 30 "caniuse": "audio", 31 "tags": ["html5", "audio", "media"], 32 "notes": [{ 33 "name": "MDN Docs", 34 "href": "https://developer.mozilla.org/En/Media_formats_supported_by_the_audio_and_video_elements" 35 }] 36 } 37 ! { 38 "name": "Canvas", 39 "property": "canvas", 40 "caniuse": "canvas", 41 "tags": ["canvas", "graphics"], 42 "polyfills": ["flashcanvas", "excanvas", "slcanvas", "fxcanvas"] 43 } 44 ! { 45 "name": "Canvas text", 46 "property": "canvastext", 47 "caniuse": "canvas-text", 48 "tags": ["canvas", "graphics"], 49 "polyfills": ["canvastext"] 50 } 51 ! { 52 "name": "Force Touch Events", 53 "property": "forcetouch", 54 "authors": ["Kraig Walker"], 55 "notes": [{ 56 "name": "Responding to Force Touch Events from JavaScript", 57 "href": "https://developer.apple.com/library/archive/documentation/AppleApplications/Conceptual/SafariJSProgTopics/RespondingtoForceTouchEventsfromJavaScript.html" 58 }] 59 } 60 ! { 61 "name": "Geolocation API", 62 "property": "geolocation", 63 "caniuse": "geolocation", 64 "tags": ["media"], 65 "notes": [{ 66 "name": "MDN Docs", 67 "href": "https://developer.mozilla.org/en-US/docs/WebAPI/Using_geolocation" 68 }], 69 "polyfills": [ 70 "joshuabell-polyfill", 71 "webshims", 72 "geo-location-javascript", 73 "geolocation-api-polyfill" 74 ] 75 } 76 ! { 77 "name": "Hashchange event", 78 "property": "hashchange", 79 "caniuse": "hashchange", 80 "tags": ["history"], 81 "notes": [{ 82 "name": "MDN Docs", 83 "href": "https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onhashchange" 84 }], 85 "polyfills": [ 86 "jquery-hashchange", 87 "moo-historymanager", 88 "jquery-ajaxy", 89 "hasher", 90 "shistory" 91 ] 92 } 93 ! { 94 "name": "History API", 95 "property": "history", 96 "caniuse": "history", 97 "tags": ["history"], 98 "authors": ["Hay Kranen", "Alexander Farkas"], 99 "notes": [{ 100 "name": "W3C Spec", 101 "href": "https://www.w3.org/TR/html51/browsers.html#the-history-interface" 102 }, { 103 "name": "MDN Docs", 104 "href": "https://developer.mozilla.org/en-US/docs/Web/API/window.history" 105 }], 106 "polyfills": ["historyjs", "html5historyapi"] 107 } 108 ! { 109 "name": "IndexedDB", 110 "property": "indexeddb", 111 "caniuse": "indexeddb", 112 "tags": ["storage"], 113 "polyfills": ["indexeddb"], 114 "async": true 115 } 116 ! { 117 "name": "postMessage", 118 "property": "postmessage", 119 "caniuse": "x-doc-messaging", 120 "notes": [{ 121 "name": "W3C Spec", 122 "href": "https://www.w3.org/TR/webmessaging/#crossDocumentMessages" 123 }], 124 "polyfills": ["easyxdm", "postmessage-jquery"], 125 "knownBugs": ["structuredclones - Android 2&3 can not send a structured clone of dates, filelists or regexps"], 126 "warnings": ["Some old WebKit versions have bugs. Stick with object, array, number and pixeldata to be safe."] 127 } 128 ! { 129 "name": "SVG", 130 "property": "svg", 131 "caniuse": "svg", 132 "tags": ["svg"], 133 "authors": ["Erik Dahlstrom"], 134 "polyfills": [ 135 "svgweb", 136 "raphael", 137 "amplesdk", 138 "canvg", 139 "svg-boilerplate", 140 "sie", 141 "dojogfx", 142 "fabricjs" 143 ] 144 } 145 ! { 146 "name": "Touch Events", 147 "property": "touchevents", 148 "caniuse": "touch", 149 "tags": ["media", "attribute"], 150 "notes": [{ 151 "name": "Touch Events spec", 152 "href": "https://www.w3.org/TR/2013/WD-touch-events-20130124/" 153 }], 154 "warnings": [ 155 "** DEPRECATED see https://github.com/Modernizr/Modernizr/pull/2432 **", 156 "Indicates if the browser supports the Touch Events spec, and does not necessarily reflect a touchscreen device" 157 ], 158 "knownBugs": [ 159 "False-positive on some configurations of Nokia N900", 160 "False-positive on some BlackBerry 6.0 builds â https://github.com/Modernizr/Modernizr/issues/372#issuecomment-3112695" 161 ] 162 } 163 ! { 164 "name": "HTML5 Video", 165 "property": "video", 166 "caniuse": "video", 167 "tags": ["html5", "video", "media"], 168 "knownBugs": ["Without QuickTime, `Modernizr.video.h264` will be `undefined`; https://github.com/Modernizr/Modernizr/issues/546"], 169 "polyfills": [ 170 "html5media", 171 "mediaelementjs", 172 "sublimevideo", 173 "videojs", 174 "leanbackplayer", 175 "videoforeverybody" 176 ] 177 } 178 ! { 179 "name": "WebGL", 180 "property": "webgl", 181 "caniuse": "webgl", 182 "tags": ["webgl", "graphics"], 183 "polyfills": ["jebgl", "cwebgl", "iewebgl"] 184 } 185 ! { 186 "name": "WebSockets Support", 187 "property": "websockets",
188 "authors": ["Phread (@fearphage)", "Mike Sherov (@mikesherov)", "Burak Yigit Kaya (@BYK)"], 189 "caniuse": "websockets", 190 "tags": ["html5"], 191 "warnings": [ 192 "This test will reject any old version of WebSockets even if it is not prefixed such as in Safari 5.1" 193 ], 194 "notes": [{ 195 "name": "CLOSING State and Spec", 196 "href": "https://www.w3.org/TR/websockets/#the-websocket-interface" 197 }], 198 "polyfills": [ 199 "sockjs", 200 "socketio", 201 "kaazing-websocket-gateway", 202 "websocketjs", 203 "atmosphere", 204 "graceful-websocket", 205 "portal", 206 "datachannel" 207 ] 208 } 209 ! { 210 "name": "CSS Animations", 211 "property": "cssanimations", 212 "caniuse": "css-animation", 213 "polyfills": ["transformie", "csssandpaper"], 214 "tags": ["css"], 215 "warnings": ["Android < 4 will pass this test, but can only animate a single property at a time"], 216 "notes": [{ 217 "name": "Article: 'Dispelling the Android CSS animation myths'", 218 "href": "https://web.archive.org/web/20180602074607/https://daneden.me/2011/12/14/putting-up-with-androids-bullshit/" 219 }] 220 } 221 ! { 222 "name": "Background Size", 223 "property": "backgroundsize", 224 "tags": ["css"], 225 "knownBugs": ["This will false positive in Opera Mini - https://github.com/Modernizr/Modernizr/issues/396"], 226 "notes": [{ 227 "name": "Related Issue", 228 "href": "https://github.com/Modernizr/Modernizr/issues/396" 229 }] 230 } 231 ! { 232 "name": "Border Image", 233 "property": "borderimage", 234 "caniuse": "border-image", 235 "polyfills": ["css3pie"], 236 "knownBugs": ["Android < 2.0 is true, but has a broken implementation"], 237 "tags": ["css"] 238 } 239 ! { 240 "name": "Border Radius",
241 "property": "borderradius", 242 "caniuse": "border-radius", 243 "polyfills": ["css3pie"], 244 "tags": ["css"], 245 "notes": [{ 246 "name": "Comprehensive Compat Chart", 247 "href": "https://muddledramblings.com/table-of-css3-border-radius-compliance" 248 }] 249 } 250 ! { 251 "name": "Box Shadow", 252 "property": "boxshadow", 253 "caniuse": "css-boxshadow", 254 "tags": ["css"], 255 "knownBugs": [ 256 "WebOS false positives on this test.", 257 "The Kindle Silk browser false positives" 258 ] 259 } 260 ! { 261 "name": "CSS Columns", 262 "property": "csscolumns", 263 "caniuse": "multicolumn", 264 "polyfills": ["css3multicolumnjs"], 265 "tags": ["css"] 266 } 267 ! { 268 "name": "Flexbox", 269 "property": "flexbox", 270 "caniuse": "flexbox", 271 "tags": ["css"], 272 "notes": [{ 273 "name": "The _new_ flexbox", 274 "href": "https://www.w3.org/TR/css-flexbox-1/" 275 }], 276 "warnings": [ 277 "A `true` result for this detect does not imply that the `flex-wrap` property is supported; see the `flexwrap` detect." 278 ] 279 } 280 ! { 281 "name": "Flexbox (legacy)", 282 "property": "flexboxlegacy", 283 "tags": ["css"], 284 "polyfills": ["flexie"], 285 "notes": [{ 286 "name": "The _old_ flexbox", 287 "href": "https://www.w3.org/TR/2009/WD-css3-flexbox-20090723/" 288 }] 289 } 290 ! { 291 "name": "@font-face", 292 "property": "fontface", 293 "authors": ["Diego Perini", "Mat Marquis"], 294 "tags": ["css"], 295 "knownBugs": [ 296 "False Positive: WebOS https://github.com/Modernizr/Modernizr/issues/342", 297 "False Positive: WP7 https://github.com/Modernizr/Modernizr/issues/538" 298 ], 299 "notes": [{ 300 "name": "@font-face detection routine by Diego Perini", 301 "href": "http://javascript.nwbox.com/CSSSupport/" 302 }, { 303 "name": "Filament Group @font-face compatibility research", 304 "href": "https://docs.google.com/presentation/d/1n4NyG4uPRjAA8zn_pSQ_Ket0RhcWC6QlZ6LMjKeECo0/edit#slide=id.p" 305 }, { 306 "name": "Filament Grunticon/@font-face device testing results", 307 "href": "https://docs.google.com/spreadsheet/ccc?key=0Ag5_yGvxpINRdHFYeUJPNnZMWUZKR2ItMEpRTXZPdUE#gid=0" 308 }, { 309 "name": "CSS fonts on Android", 310 "href": "https://stackoverflow.com/questions/3200069/css-fonts-on-android" 311 }, { 312 "name": "@font-face and Android", 313 "href": "http://archivist.incutio.com/viewlist/css-discuss/115960" 314 }] 315 } 316 ! { 317 "name": "CSS Generated Content", 318 "property": "generatedcontent", 319 "tags": ["css"], 320 "warnings": ["Android won't return correct height for anything below 7px #738"], 321 "notes": [{ 322 "name": "W3C Spec", 323 "href": "https://www.w3.org/TR/css3-selectors/#gen-content" 324 }, { 325 "name": "MDN Docs on :before", 326 "href": "https://developer.mozilla.org/en-US/docs/Web/CSS/::before" 327 }, { 328 "name": "MDN Docs on :after", 329 "href": "https://developer.mozilla.org/en-US/docs/Web/CSS/::after" 330 }] 331 } 332 ! { 333 "name": "CSS Gradients", 334 "caniuse": "css-gradients", 335 "property": "cssgradients", 336 "tags": ["css"], 337 "knownBugs": ["False-positives on webOS (https://github.com/Modernizr/Modernizr/issues/202)"], 338 "notes": [{ 339 "name": "Webkit Gradient Syntax", 340 "href": "https://webkit.org/blog/175/introducing-css-gradients/" 341 }, { 342 "name": "Linear Gradient Syntax", 343 "href": "https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient" 344 }, { 345 "name": "W3C Spec", 346 "href": "https://drafts.csswg.org/css-images-3/#gradients" 347 }] 348 } 349 ! { 350 "name": "CSS HSLA Colors", 351 "caniuse": "css3-colors", 352 "property": "hsla", 353 "tags": ["css"] 354 } 355 ! {
356 "name": "CSS Multiple Backgrounds", 357 "caniuse": "multibackgrounds", 358 "property": "multiplebgs", 359 "tags": ["css"] 360 } 361 ! { 362 "name": "CSS Opacity", 363 "caniuse": "css-opacity", 364 "property": "opacity", 365 "tags": ["css"] 366 } 367 ! { 368 "name": "CSS Reflections", 369 "caniuse": "css-reflections", 370 "property": "cssreflections", 371 "tags": ["css"] 372 } 373 ! { 374 "name": "CSS rgba", 375 "caniuse": "css3-colors", 376 "property": "rgba", 377 "tags": ["css"], 378 "notes": [{ 379 "name": "CSSTricks Tutorial", 380 "href": "https://css-tricks.com/rgba-browser-support/" 381 }] 382 } 383 ! { 384 "name": "CSS textshadow", 385 "property": "textshadow", 386 "caniuse": "css-textshadow", 387 "tags": ["css"], 388 "knownBugs": ["FF3.0 will false positive on this test"] 389 } 390 ! { 391 "name": "CSS Transforms", 392 "property": "csstransforms", 393 "caniuse": "transforms2d", 394 "tags": ["css"] 395 } 396 ! { 397 "name": "CSS Supports", 398 "property": "supports", 399 "caniuse": "css-featurequeries", 400 "tags": ["css"], 401 "builderAliases": ["css_supports"], 402 "notes": [{ 403 "name": "W3C Spec (The @supports rule)", 404 "href": "https://dev.w3.org/csswg/css3-conditional/#at-supports" 405 }, { 406 "name": "Related Github Issue", 407 "href": "https://github.com/Modernizr/Modernizr/issues/648" 408 }, { 409 "name": "W3C Spec (The CSSSupportsRule interface)", 410 "href": "https://dev.w3.org/csswg/css3-conditional/#the-csssupportsrule-interface" 411 }] 412 } 413 ! { 414 "name": "CSS Transforms 3D", 415 "property": "csstransforms3d", 416 "caniuse": "transforms3d", 417 "tags": ["css"], 418 "warnings": [ 419 "Chrome may occasionally fail this test on some systems; more info: https://bugs.chromium.org/p/chromium/issues/detail?id=129004" 420 ] 421 } 422 ! { 423 "name": "CSS Transitions", 424 "property": "csstransitions", 425 "caniuse": "css-transitions", 426 "tags": ["css"] 427 } 428 ! { 429 "name": "Local Storage", 430 "property": "localstorage", 431 "caniuse": "namevalue-storage", 432 "tags": ["storage"], 433 "polyfills": [ 434 "joshuabell-polyfill", 435 "cupcake", 436 "storagepolyfill", 437 "amplifyjs", 438 "yui-cacheoffline" 439 ] 440 } 441 ! { 442 "name": "Session Storage", 443 "property": "sessionstorage", 444 "tags": ["storage"], 445 "polyfills": ["joshuabell-polyfill", "cupcake", "sessionstorage"] 446 } 447 ! { 448 "name": "Web SQL Database", 449 "property": "websqldatabase", 450 "caniuse": "sql-storage", 451 "tags": ["storage"] 452 } 453 ! { 454 "name": "SVG clip paths", 455 "property": "svgclippaths", 456 "tags": ["svg"], 457 "notes": [{ 458 "name": "Demo", 459 "href": "http://srufaculty.sru.edu/david.dailey/svg/newstuff/clipPath4.svg" 460 }] 461 } 462 ! { 463 "name": "Inline SVG", 464 "property": "inlinesvg", 465 "caniuse": "svg-html5", 466 "tags": ["svg"], 467 "notes": [{ 468 "name": "Test page", 469 "href": "https://paulirish.com/demo/inline-svg" 470 }, { 471 "name": "Test page and results", 472 "href": "https://codepen.io/eltonmesquita/full/GgXbvo/" 473 }], 474 "polyfills": ["inline-svg-polyfill"], 475 "knownBugs": ["False negative on some Chromia browsers."] 476 } 477 ! { 478 "name": "SVG SMIL animation", 479 "property": "smil", 480 "caniuse": "svg-smil", 481 "tags": ["svg"], 482 "notes": [{ 483 "name": "W3C Spec", 484 "href": "https://www.w3.org/AudioVideo/" 485 }] 486 } 487 ! { 488 "name": "Web Workers", 489 "property": "webworkers", 490 "caniuse": "webworkers", 491 "tags": ["performance", "workers"], 492 "notes": [{ 493 "name": "W3C Spec", 494 "href": "https://www.w3.org/TR/workers/" 495 }, { 496 "name": "HTML5 Rocks Tutorial", 497 "href": "https://www.html5rocks.com/en/tutorials/workers/basics/" 498 }, { 499 "name": "MDN Docs", 500 "href": "https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers" 501 }], 502 "polyfills": ["fakeworker", "html5shims"] 503 } 504 !*/ 505(function(V,h,l,v){function p(a,b){return typeof a===b}function F(a){var b=u.className,c=d._config.classPrefix||"";B&&(b=b.baseVal);d._config.enableJSClass&&(b=b.replace(new RegExp("(^|\\s)"+c+"no-js(\\s|$)"),"$1"+c+"js$2"));d._config.enableClasses&&(0<a.length&&(b+=" "+c+a.join(" "+c)),B?u.className.baseVal=b:u.className=b)}function m(){return"function"!==typeof l.createElement?l.createElement(arguments[0]):B?l.createElementNS.call(l,"http://www.w3.org/2000/svg",arguments[0]):l.createElement.apply(l, 506arguments)}function D(a,b,c,e){var f=m("div");var g=l.body;g||(g=m(B?"svg":"body"),g.fake=!0);if(parseInt(c,10))for(;c--;){var w=m("div");w.id=e?e[c]:"modernizr"+(c+1);f.appendChild(w)}c=m("style");c.type="text/css";c.id="smodernizr";(g.fake?g:f).appendChild(c);g.appendChild(f);c.styleSheet?c.styleSheet.cssText=a:c.appendChild(l.createTextNode(a));f.id="modernizr";if(g.fake){g.style.background="";g.style.overflow="hidden";var q=u.style.overflow;u.style.overflow="hidden";u.appendChild(g)}a=b(f,a); 507g.fake&&g.parentNode?(g.parentNode.removeChild(g),u.style.overflow=q,u.offsetHeight):f.parentNode.removeChild(f);return!!a}function G(a){return a.replace(/([A-Z])/g,function(b,c){return"-"+c.toLowerCase()}).replace(/^ms-/,"-ms-")}function H(a,b,c){"getComputedStyle"in h?(a=getComputedStyle.call(h,a,b),b=h.c
507onsole,null!==a?c&&(a=a.getPropertyValue(c)):b&&b[b.error?"error":"log"].call(b,"getComputedStyle returning null, its possible modernizr test results are inaccurate")):a=!b&&a.currentStyle&&a.currentStyle[c]; 508return a}function W(a,b){var c=a.length;if("CSS"in h&&"supports"in h.CSS){for(;c--;)if(h.CSS.supports(G(a[c]),b))return!0;return!1}if("CSSSupportsRule"in h){for(var e=[];c--;)e.push("("+G(a[c])+":"+b+")");e=e.join(" or ");return D("@supports ("+e+") { #modernizr { position: absolute; } }",function(f){return"absolute"===H(f,null,"position")})}return v}function I(a){return a.replace(/([a-z])-([a-z])/g,function(b,c,e){return c+e.toUpperCase()}).replace(/^-/,"")}function J(a,b,c,e){function f(){w&&(delete r.style, 509delete r.modElem)}e=p(e,"undefined")?!1:e;if(!p(c,"undefined")){var g=W(a,c);if(!p(g,"undefined"))return g}for(g=["modernizr","tspan","samp"];!r.style&&g.length;){var w=!0;r.modElem=m(g.shift());r.style=r.modElem.style}var q=a.length;for(g=0;g<q;g++){var x=a[g];var X=r.style[x];~(""+x).indexOf("-")&&(x=I(x));if(r.style[x]!==v){if(e||p(c,"undefined"))return f(),"pfx"===b?x:!0;try{r.style[x]=c}catch(Z){}if(r.style[x]!==X)return f(),"pfx"===b?x:!0}}f();return!1}function Y(a,b){return function(){return a.apply(b, 510arguments)}}function C(a,b,c,e,f){var g=a.charAt(0).toUpperCase()+a.slice(1),w=(a+" "+K.join(g+" ")+g).split(" ");if(p(b,"string")||p(b,"undefined"))return J(w,b,e,f);w=(a+" "+L.join(g+" ")+g).split(" ");a:{a=w;for(var q in a)if(a[q]in b){if(!1===c){b=a[q];break a}q=b[a[q]];if(p(q,"function")){b=Y(q,c||b);break a}b=q;break a}b=!1}return b}function y(a,b){if("object"===typeof a)for(var c in a)M(a,c)&&y(c,a[c]);else{a=a.toLowerCase();c=a.split(".");var e=d[c[0]];2===c.length&&(e=e[c[1]]);if("undefined"!== 511typeof e)return d;b="function"===typeof b?b():b;1===c.length?d[c[0]]=b:(!d[c[0]]||d[c[0]]instanceof Boolean||(d[c[0]]=new Boolean(d[c[0]])),d[c[0]][c[1]]=b);F([(b&&!1!==b?"":"no-")+c.join("-")]);d._trigger(a,b)}return d}function N(a,b){a=a.deleteDatabase(b);a.onsuccess=function(){y("indexeddb.deletedatabase",!0)};a.onerror=function(){y("indexeddb.deletedatabase",!1)}}function n(a,b,c){return C(a,v,v,b,c)}var A=[],k={_version:"3.13.0",_config:{classPrefix:"",enableClasses:!0,enableJSClass:!0,usePrefixes:!0}, 512_q:[],on:function(a,b){var c=this;setTimeout(function(){b(c[a])},0)},addTest:function(a,b,c){A.push({name:a,fn:b,options:c})},addAsyncTest:function(a){A.push({name:null,fn:a})}},d=function(){};d.prototype=k;d=new d;var O=[],u=l.documentElement,B="svg"===u.nodeName.toLowerCase();d.addTest("applicationcache","applicationCache"in h);(function(){var a=m("audio");d.addTest("audio",function(){var b=!1;try{(b=!!a.canPlayType)&&(b=new Boolean(b))}catch(c){}return b});try{a.canPlayType&&(d.addTest("audio.ogg", 513a.canPlayType('audio/ogg; codecs\x3d"vorbis"').replace(/^no$/,"")),d.addTest("audio.mp3",a.canPlayType('audio/mpeg; codecs\x3d"mp3"').replace(/^no$/,"")),d.addTest("audio.opus",a.canPlayType('audio/ogg; codecs\x3d"opus"')||a.canPlayType('audio/webm; codecs\x3d"opus"').replace(/^no$/,"")),d.addTest("audio.wav",a.canPlayType('audio/wav; codecs\x3d"1"').replace(/^no$/,"")),d.addTest("audio.m4a",(a.canPlayType("audio/x-m4a;")||a.canPlayType("audio/aac;")).replace(/^no$/,"")))}catch(b){}})();d.addTest("canvas", 514function(){var a=m("canvas");return!(!a.getContext||!a.getContext("2d"))});d.addTest("canvastext",function(){return!1===d.canvas?!1:"function"===typeof m("canvas").getContext("2d").fillText});var E=function(){var a=!("onblur"in u);return function(b,c){if(!b)return!1;c&&"string"!==typeof c||(c=m(c||"div"));b="on"+b;var e=b in c;!e&&a&&(c.setAttribute||(c=m("div")),c.setAttribute(b,""),e="function"===typeof c[b],c[b]!==v&&(c[b]=v),c.removeAttribute(b));return e}}();k.hasEvent=E;var K=k._config.usePrefixes? 515["Moz","O","ms","Webkit"]:[];k._cssomPrefixes=K;var P={elem:m("modernizr")};d._q.push(function(){delete P.elem});var r={style:P.elem.style};d._q.unshift(function(){delete r.style});var L=k._config.usePrefixes?["moz","o","ms","webkit"]:[];k._domPrefixes=L;k.testAllProps=C;var Q=function(a){var b=z.length,c=h.CSSRule;if("undefined"===typeof c)return v;if(!a)return!1;a=a.replace(/^@/,"");var e=a.replace(/-/g,"_").toUpperCase()+"_RULE";if(e in c)return"@"+a;for(var f=0;f<b;f++){var g=z[f];if(g.toUpperCase()+ 516"_"+e in c)return"@-"+g.toLowerCase()+"-"+a}return!1};k.atRule=Q;var R=k.prefixed=function(a,b,c){if(0===a.indexOf("@"))return Q(a);-1!==a.indexOf("-")&&(a=I(a));return b?C(a,b,c):C(a,"pfx")};d.addTest("forcetouch",function(){return E(R("mouseforcewillbegin",h,!1),h)?MouseEvent.WEBKIT_FORCE_AT_MOUSE_DOWN&&MouseEvent.WEBKIT_FORCE_AT_FORCE_MOUSE_DOWN:!1});d.addTest("geolocation","geolocation"in navigator);d.addTest("hashchange",function(){return!1===E("hashchange",h)?!1:l.documentMode===v||7<l.documentMode}); 517d.addTest("history",function(){var a=navigator.userAgent;return a&&(-1===a.indexOf("Android 2.")&&-1===a.indexOf("Android 4.0")||-1===a.indexOf("Mobile Safari")||-1!==a.indexOf("Chrome")||-1!==a.indexOf("Windows Phone")||"file:"===location.protocol)?h.history&&"pushState"in h.history:!1});var M;(function(){var a={}.hasOwnProperty;M=p(a,"undefined")||p(a.call,"undefined")?function(b,c){return c in b&&p(b.constructor.prototype[c],"undefined")}:function(b,c){return a.call(b,c)}})();k._l={};k.on=function(a, 518b){this._l[a]||(this._l[a]=[]);this._l[a].push(b);d.hasOwnProperty(a)&&setTimeout(function(){d._trigger(a,d[a])},0)};k._trigger=function(a,b){if(this._l[a]){var c=this._l[a];setTimeout(function(){var e;
518for(e=0;e<c.length;e++){var f=c[e];f(b)}},0);delete this._l[a]}};d._q.push(function(){k.addTest=y});d.addAsyncTest(function(){try{var a=R("indexedDB",h)}catch(e){}if(a){var b="modernizr-"+Math.random();try{var c=a.open(b)}catch(e){y("indexeddb",!1);return}c.onerror=function(e){!c.error||"InvalidStateError"!== 519c.error.name&&"UnknownError"!==c.error.name?(y("indexeddb",!0),N(a,b)):(y("indexeddb",!1),e.preventDefault())};c.onsuccess=function(){y("indexeddb",!0);N(a,b)}}else y("indexeddb",!1)});var S=!0;try{h.postMessage({toString:function(){S=!1}},"*")}catch(a){}d.addTest("postmessage",new Boolean("postMessage"in h));d.addTest("postmessage.structuredclones",S);d.addTest("svg",!!l.createElementNS&&!!l.createElementNS("http://www.w3.org/2000/svg","svg").createSVGRect);var z=k._config.usePrefixes?" -webkit- -moz- -o- -ms- ".split(" "): 520["",""];k._prefixes=z;var T=function(){var a=h.matchMedia||h.msMatchMedia;return a?function(b){return(b=a(b))&&b.matches||!1}:function(b){var c=!1;D("@media "+b+" { #modernizr { position: absolute; } }",function(e){c="absolute"===H(e,null,"position")});return c}}();k.mq=T;d.addTest("touchevents",function(){if("ontouchstart"in h||h.TouchEvent||h.DocumentTouch&&l instanceof DocumentTouch)return!0;var a=["(",z.join("touch-enabled),("),"heartz)"].join("");return T(a)});(function(){var a=m("video");d.addTest("video", 521function(){var b=!1;try{(b=!!a.canPlayType)&&(b=new Boolean(b))}catch(c){}return b});try{a.canPlayType&&(d.addTest("video.ogg",a.canPlayType('video/ogg; codecs\x3d"theora"').replace(/^no$/,"")),d.addTest("video.h264",a.canPlayType('video/mp4; codecs\x3d"avc1.42E01E"').replace(/^no$/,"")),d.addTest("video.h265",a.canPlayType('video/mp4; codecs\x3d"hev1"').replace(/^no$/,"")),d.addTest("video.webm",a.canPlayType('video/webm; codecs\x3d"vp8, vorbis"').replace(/^no$/,"")),d.addTest("video.vp9",a.canPlayType('video/webm; codecs\x3d"vp9"').replace(/^no$/, 522"")),d.addTest("video.hls",a.canPlayType('application/x-mpegURL; codecs\x3d"avc1.42E01E"').replace(/^no$/,"")),d.addTest("video.av1",a.canPlayType('video/mp4; codecs\x3d"av01"').replace(/^no$/,"")))}catch(b){}})();d.addTest("webgl",function(){return"WebGLRenderingContext"in h});var t=!1;try{t="WebSocket"in h&&2===h.WebSocket.CLOSING}catch(a){}d.addTest("websockets",t);k.testAllProps=n;d.addTest("cssanimations",n("animationName","a",!0));d.addTest("backgroundsize",n("backgroundSize","100%",!0));d.addTest("borderimage", 523n("borderImage","url() 1",!0));d.addTest("borderradius",n("borderRadius","0px",!0));d.addTest("boxshadow",n("boxShadow","1px 1px",!0));(function(){d.addTest("csscolumns",function(){var f=!1,g=n("columnCount");try{(f=!!g)&&(f=new Boolean(f))}catch(w){}return f});for(var a="Width Span Fill Gap Rule RuleColor RuleStyle RuleWidth BreakBefore BreakAfter BreakInside".split(" "),b,c,e=0;e<a.length;e++){b=a[e].toLowerCase();c=n("column"+a[e]);if("breakbefore"===b||"breakafter"===b||"breakinside"===b)c=c|| 524n(a[e]);d.addTest("csscolumns."+b,c)}})();d.addTest("flexbox",n("flexBasis","1px",!0));d.addTest("flexboxlegacy",n("boxDirection","reverse",!0));t=k.testStyles=D;(function(){var a=navigator.userAgent,b=a.match(/w(eb)?osbrowser/gi);a=a.match(/windows phone/gi)&&a.match(/iemobile\/([0-9])+/gi)&&9<=parseFloat(RegExp.$1);return b||a})()?d.addTest("fontface",!1):t('@font-face {font-family:"font";src:url("https://")}',function(a,b){a=l.getElementById("smodernizr");a=(a=a.sheet||a.styleSheet)?a.cssRules&& 525a.cssRules[0]?a.cssRules[0].cssText:a.cssText||"":"";b=/src/i.test(a)&&0===a.indexOf(b.split(" ")[0]);d.addTest("fontface",b)});t('#modernizr{font:0/0 a}#modernizr:after{content:":)";visibility:hidden;font:7px/1 a}',function(a){d.addTest("generatedcontent",6<=a.offsetHeight)});d.addTest("cssgradients",function(){for(var a="",b,c=0,e=z.length-1;c<e;c++)b=0===c?"to ":"",a+="background-image:"+z[c]+"linear-gradient("+b+"left top, #9f9, white);";d._config.usePrefixes&&(a+="background-image:-webkit-gradient(linear,left top,right bottom,from(#9f9),to(white));"); 526b=m("a").style;b.cssText=a;return-1<(""+b.backgroundImage).indexOf("gradient")});d.addTest("hsla",function(){var a=m("a").style;a.cssText="background-color:hsla(120,40%,100%,.5)";return!!~(""+a.backgroundColor).indexOf("rgba")||!!~(""+a.backgroundColor).indexOf("hsla")});d.addTest("multiplebgs",function(){var a=m("a").style;a.cssText="background:url(https://),url(https://),red url(https://)";return/(url\s*\(.*?){3}/.test(a.background)});d.addTest("opacity",function(){var a=m("a").style;a.cssText= 527z.join("opacity:.55;");return/^0.55$/.test(a.opacity)});d.addTest("cssreflections",n("boxReflect","above",!0));d.addTest("rgba",function(){var a=m("a").style;a.cssText="background-color:rgba(150,255,150,.5)";return-1<(""+a.backgroundColor).indexOf("rgba")});t=k.testProp=function(a,b,c){return J([a],v,b,c)};d.addTest("textshadow",t("textShadow","1px 1px"));d.addTest("csstransforms",function(){return-1===navigator.userAgent.indexOf("Android 2.")&&n("transform","scale(1)",!0)});d.addTest("supports", 528"CSS"in h&&"supports"in h.CSS||"supportsCSS"in h);d.addTest("csstransforms3d",function(){return!!n("perspective","1px",!0)});d.addTest("csstransitions",n("transition","all",!0));d.addTest("localstorage",function(){try{return localStorage.setItem("modernizr","modernizr"),localStorage.removeItem("modernizr"),!0}catch(a){return!1}});d.addTest("sessionstorage",function(){try{return sessionStorage.setItem("modernizr","modernizr"),sessionStorage.removeItem("modernizr"),!0}catch(a){return!1}});d.addTest("websqldatabase", 529"openDatabase"in h);var U={}.toString;d.addTest("svgclippaths",function(){return!!l.createElementNS&&/SVGClipPath/.test(U.call(l.createElementNS("http://www.w3.org/2000/svg","clipPath")))});d.addTest("inlinesvg",function(){var a=m("div");a.innerHTML="\x3csvg/\x3e";return"http://www.w3.org/2000/svg"===("undefined"!==typeof SVGRect&&a.firstChild&&a.firstChild.namespaceURI)});d.addTest("smil",function(){return!!l.createElementNS&&/SVGAnimate/.test(U.call(l.createElementNS("http://www.w3.org/2000/svg", 530"animate")))});
530d.addTest("webworkers","Worker"in h);(function(){var a,b;for(b in A)if(A.hasOwnProperty(b)){var c=[];var e=A[b];if(e.name&&(c.push(e.name.toLowerCase()),e.options&&e.options.aliases&&e.options.aliases.length))for(a=0;a<e.options.aliases.length;a++)c.push(e.options.aliases[a].toLowerCase());e=p(e.fn,"function")?e.fn():e.fn;for(a=0;a<c.length;a++){var f=c[a];f=f.split(".");1===f.length?d[f[0]]=e:(d[f[0]]&&(!d[f[0]]||d[f[0]]instanceof Boolean)||(d[f[0]]=new Boolean(d[f[0]])),d[f[0]][f[1]]= 531e);O.push((e?"":"no-")+f.join("-"))}}})();F(O);delete k.addTest;delete k.addAsyncTest;for(t=0;t<d._q.length;t++)d._q[t]();V.Modernizr=d})(window,window,document);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.