vendor: 15,728 bytes, lines 1-567
1/* Modernizr 2.7.1 (Custom Build) | MIT & BSD 2* Build: http://modernizr.com/download/#-fontface-backgroundsize-borderimage-borderradius-boxshadow-multiplebgs-opacity-rgba-textshadow-cssgradients-hashchange-history-input-shiv-cssclasses-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-cssclassprefix:has! 3*/ 4; 5 6window.Modernizr = ( function ( window, document, undefined ) { 7 8 var version = '2.7.1', 9 10 Modernizr = {}, 11 12 enableClasses = true, 13 14 docElement = document.documentElement, 15 16 mod = 'modernizr', 17 modElem = document.createElement( mod ), 18 mStyle = modElem.style, 19 20 inputElem = document.createElement( 'input' ), 21 22 23 toString = {}.toString, 24 25 prefixes = ' -webkit- -moz- -o- -ms- '.split( ' ' ), 26 27 28 29 omPrefixes = 'Webkit Moz O ms', 30 31 cssomPrefixes = omPrefixes.split( ' ' ), 32 33 domPrefixes = omPrefixes.toLowerCase().split( ' ' ), 34 35 36 tests = {}, 37 inputs = {}, 38 attrs = {}, 39 40 classes = [], 41 42 slice = classes.slice, 43 44 featureName, 45 46 47 injectElementWithStyles = function ( rule, callback, nodes, testnames ) { 48 49 var style, ret, node, docOverflow, 50 div = document.createElement( 'div' ), 51 body = document.body, 52 fakeBody = body || document.createElement( 'body' ); 53 54 if ( parseInt( nodes, 10 ) ) { 55 while ( nodes-- ) { 56 node = document.createElement( 'div' ); 57 node.id = testnames ? testnames[nodes] : mod + ( nodes + 1 ); 58 div.appendChild( node ); 59 } 60 } 61 62 style = ['­', '<style id="s', mod, '">', rule, '</style>'].join( '' ); 63 div.id = mod; 64 (body ? div : fakeBody ).innerHTML += style; 65 fakeBody.appendChild( div ); 66 if ( !body ) { 67 fakeBody.style.background = ''; 68 fakeBody.style.overflow = 'hidden'; 69 docOverflow = docElement.style.overflow; 70 docElement.style.overflow = 'hidden'; 71 docElement.appendChild( fakeBody ); 72 } 73 74 ret = callback( div, rule ); 75 if ( !body ) { 76 fakeBody.parentNode.removeChild( fakeBody ); 77 docElement.style.overflow = docOverflow; 78 } else { 79 div.parentNode.removeChild( div ); 80 } 81 82 return !!ret; 83 84 }, 85 86 87 88 isEventSupported = ( function () { 89 90 var TAGNAMES = { 91 'select': 'input', 'change': 'input', 92 'submit': 'form', 'reset': 'form', 93 'error': 'img', 'load': 'img', 'abort': 'img' 94 }; 95 96 function isEventSupported( eventName, element ) { 97 98 element = element || document.createElement( TAGNAMES[eventName] || 'div' ); 99 eventName = 'on' + eventName; 100 101 var isSupported = eventName in element; 102 103 if ( !isSupported ) { 104 if ( !element.setAttribute ) { 105 element = document.createElement( 'div' ); 106 } 107 if ( element.setAttribute && element.removeAttribute ) { 108 element.setAttribute( eventName, '' ); 109 isSupported = is( element[eventName], 'function' ); 110 111 if ( !is( element[eventName], 'undefined' ) ) { 112 element[eventName] = undefined; 113 } 114 element.removeAttribute( eventName ); 115 } 116 } 117 118 element = null; 119 return isSupported; 120 } 121 return isEventSupported; 122 } )(), 123 124 125 _hasOwnProperty = ( {} ).hasOwnProperty, hasOwnProp; 126 127 if ( !is( _hasOwnProperty, 'undefined' ) && !is( _hasOwnProperty.call, 'undefined' ) ) { 128 hasOwnProp = function ( object, property ) { 129 return _hasOwnProperty.call( object, property ); 130 }; 131 } 132 else { 133 hasOwnProp = function ( object, property ) { 134 return ( ( property in object ) && is( object.constructor.prototype[property], 'undefined' ) ); 135 }; 136 } 137 138 139 if ( !Function.prototype.bind ) { 140 Function.prototype.bind = function bind( that ) { 141 142 var target = this; 143 144 if ( typeof target != "function" ) { 145 throw new TypeError(); 146 } 147 148 var args = slice.call( arguments, 1 ), 149 bound = function () { 150 151 if ( this instanceof bound ) { 152 153 var F = function () { }; 154 F.prototype = target.prototype; 155 var self = new F(); 156 157 var result = target.apply( 158 self, 159 args.concat( slice.call( arguments ) ) 160 ); 161 if ( Object( result ) === result ) { 162 return result; 163 } 164 return self; 165 166 } else { 167 168 return target.apply( 169 that, 170 args.concat( slice.call( arguments ) ) 171 ); 172 173 } 174 175 }; 176 177 return bound; 178 }; 179 } 180 181 function setCss( str ) { 182 mStyle.cssText = str; 183 } 184 185 function setCssAll( str1, str2 ) { 186 return setCss( prefixes.join( str1 + ';' ) + ( str2 || '' ) ); 187 } 188 189 function is( obj, type ) { 190 return typeof obj === type; 191 } 192 193 function contains( str, substr ) { 194 return !! ~( '' + str ).indexOf( substr ); 195 } 196 197 function testProps( props, prefixed ) { 198 for ( var i in props ) { 199 var prop = props[i]; 200 if ( !contains( prop, "-" ) && mStyle[prop] !== undefined ) { 201 return prefixed == 'pfx' ? prop : true; 202 } 203 } 204 return false; 205 } 206 207 function testDOMProps( props, obj, elem ) { 208 for ( var i in props ) { 209 var item = obj[props[i]]; 210 if ( item !== undefined ) { 211 212 if ( elem === false ) return props[i]; 213 214 if ( is( item, 'function' ) ) { 215 return item.bind( elem || obj ); 216 } 217 218 return item; 219 } 220 } 221 return false; 222 } 223 224 function testPropsAll( prop, prefixed, elem ) { 225 226 var ucProp = prop.charAt( 0 ).toUpperCase() + prop.slice( 1 ), 227 props = ( prop + ' ' + cssomPrefixes.join( ucProp + ' ' ) + ucProp ).split( ' ' ); 228 229 if ( is( prefixed, "string" ) || is( prefixed, "undefined" ) ) { 230 return testProps( props, prefixed ); 231 232 } else { 233 props = ( prop + ' ' + ( domPrefixes ).join( ucProp + ' ' ) + ucProp ).split( ' ' ); 234 return testDOMProps( props, prefixed, elem ); 235 } 236 } 237 238 239 240 tests['hashchange'] = function () { 241 return isEventSupported( 'hashchange', window ) && ( document.documentMode === undefined || document.documentMode > 7 ); 242 }; 243 244 tests['history'] = function () { 245 return !!( window.history && history.pushState ); 246 }; tests['rgba'] = function () { 247 setCss( 'background-color:rgba(150,255,150,.5)' ); 248 249 return contains( mStyle.backgroundColor, 'rgba' ); 250 }; 251 252 253 tests['multiplebgs'] = function () { 254 setCss( 'background:url(https://),url(https://),red url(https://)' ); 255 256 return ( /(url\s*\(.*?){3}/ ).test( mStyle.background ); 257 }; tests['backgroundsize'] = function () { 258 return testPropsAll( 'backgroundSize' ); 259 }; 260 261 tests['borderimage'] = function () { 262 return testPropsAll( 'borderImage' ); 263 }; 264 265 266 267 tests['borderradius'] = function () { 268 return testPropsAll( 'borderRadius' ); 269 }; 270 271 tests['boxshadow'] = function () { 272 return testPropsAll( 'boxShadow' ); 273 }; 274 275 tests['textshadow'] = function () { 276 return document.createElement( 'div' ).style.textShadow === ''; 277 }; 278 279 280 tests['opacity'] = function () { 281 setCssAll( 'opacity:.55' ); 282 283 return ( /^0.55$/ ).test( mStyle.opacity ); 284 }; 285 286 tests['cssgradients'] = function () { 287 var str1 = 'background-image:', 288 str2 = 'gradient(linear,left top,right bottom,from(#9f9),to(white));', 289 str3 = 'linear-gradient(left top,#9f9, white);'; 290 291 setCss( 292 ( str1 + '-webkit- '.split( ' ' ).join( str2 + str1 ) + 293 prefixes.join( str3 + str1 ) ).slice( 0, -str1.length ) 294 ); 295 296 return contains( mStyle.backgroundImage, 'gradient' ); 297 }; 298 299 tests['fontface'] = function () { 300 var bool; 301 302 injectElementWithStyles( '@font-face {font-family:"font";src:url("https://")}', function ( node, rule ) { 303 var style = document.getElementById( 'smodernizr' ), 304 sheet = style.sheet || style.styleSheet, 305 cssText = sheet ? ( sheet.cssRules && sheet.cssRules[0] ? sheet.cssRules[0].cssText : sheet.cssText || '' ) : ''; 306 307 bool = /src/i.test( cssText ) && cssText.indexOf( rule.split( ' ' )[0] ) === 0; 308 } ); 309 310 return bool; 311 }; 312 313 function webforms() { 314 Modernizr['input'] = ( function ( props ) { 315 for ( var i = 0, len = props.length; i < len; i++ ) { 316 attrs[props[i]] = !!( props[i] in inputElem ); 317 } 318 if ( attrs.list ) { 319 attrs.list = !!( document.createElement( 'datalist' ) && window.HTMLDataListElement ); 320 } 321 return attrs; 322 } )( 'autocomplete autofocus list placeholder max min multiple pattern required step'.split( ' ' ) ); 323 } 324 for ( var feature in tests ) { 325 if ( hasOwnProp( tests, feature ) ) { 326 featureName = feature.toLowerCase(); 327 Modernizr[featureName] = tests[feature](); 328 329 classes.push( ( Modernizr[featureName] ? '' : 'no-' ) + featureName ); 330 } 331 } 332 333 Modernizr.input || webforms(); 334 335 336 Modernizr.addTest = function ( feature, test ) { 337 if ( typeof feature == 'object' ) { 338 for ( var key in feature ) { 339 if ( hasOwnProp( feature, key ) ) { 340 Modernizr.addTest( key, feature[key] ); 341 } 342 } 343 } else { 344 345 feature = feature.toLowerCase(); 346 347 if ( Modernizr[feature] !== undefined ) { 348 return Modernizr; 349 } 350 351 test = typeof test == 'function' ? test() : test; 352 353 if ( typeof enableClasses !== "undefined" && enableClasses ) { 354 docElement.className += " has-" + ( test ? '' : 'no-' ) + feature; 355 } 356 Modernizr[feature] = test; 357 358 } 359 360 return Modernizr; 361 }; 362 363 364 setCss( '' ); 365 modElem = inputElem = null; 366 367 ; ( function ( window, document ) { 368 var version = '3.7.0'; 369 370 var options = window.html5 || {}; 371 372 var reSkip = /^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i; 373 374 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; 375 376 var supportsHtml5Styles; 377 378 var expando = '_html5shiv'; 379 380 var expanID = 0; 381 382 var expandoData = {}; 383 384 var supportsUnknownElements; 385 386 (function () { 387 try { 388 var a = document.createElement( 'a' ); 389 a.innerHTML = '<xyz></xyz>'; 390 supportsHtml5Styles = ( 'hidden' in a ); 391 392 supportsUnknownElements = a.childNodes.length == 1 || ( function () { 393 (document.createElement )( 'a' ); 394 var frag = document.createDocumentFragment(); 395 return ( 396 typeof frag.cloneNode == 'undefined' || 397 typeof frag.createDocumentFragment == 'undefined' || 398 typeof frag.createElement == 'undefined' 399 ); 400 } () ); 401 } catch ( e ) { 402 supportsHtml5Styles = true; 403 supportsUnknownElements = true; 404 } 405 406 } () ); 407 408 function addStyleSheet( ownerDocument, cssText ) { 409 var p = ownerDocument.createElement( 'p' ), 410 parent = ownerDocument.getElementsByTagName( 'head' )[0] || ownerDocument.documentElement; 411 412 p.innerHTML = 'x<style>' + cssText + '</style>'; 413 return parent.insertBefore( p.lastChild, parent.firstChild ); 414 } 415 416 function getElements() { 417 var elements = html5.elements; 418 return typeof elements == 'string' ? elements.split( ' ' ) : elements; 419 } 420 421 function getExpandoData( ownerDocument ) { 422 var data = expandoData[ownerDocument[expando]]; 423 if ( !data ) { 424 data = {}; 425 expanID++; 426 ownerDocument[expando] = expanID; 427 expandoData[expanID] = data; 428 } 429 return data; 430 } 431 432 function createElement( nodeName, ownerDocument, data ) { 433 if ( !ownerDocument ) { 434 ownerDocument = document; 435 } 436 if ( supportsUnknownElements ) { 437 return ownerDocument.createElement( nodeName ); 438 } 439 if ( !data ) { 440 data = getExpandoData( ownerDocument ); 441 } 442 var node; 443 444 if ( data.cache[nodeName] ) { 445 node = data.cache[nodeName].cloneNode(); 446 } else if ( saveClones.test( nodeName ) ) { 447 node = ( data.cache[nodeName] = data.createElem( nodeName ) ).cloneNode(); 448 } else { 449 node = data.createElem( nodeName ); 450 } 451 452 return node.canHaveChildren && !reSkip.test( nodeName ) && !node.tagUrn ? data.frag.appendChild( node ) : node; 453 } 454 455 function createDocumentFragment( ownerDocument, data ) { 456 if ( !ownerDocument ) { 457 ownerDocument = document; 458 } 459 if ( supportsUnknownElements ) { 460 return ownerDocument.createDocumentFragment(); 461 } 462 data = data || getExpandoData( ownerDocument ); 463 var clone = data.frag.cloneNode(), 464 i = 0, 465 elems = getElements(), 466 l = elems.length; 467 for ( ; i < l; i++ ) { 468 clone.createElement( elems[i] ); 469 } 470 return clone; 471 } 472 473 function shivMethods( ownerDocument, data ) { 474 if ( !data.cache ) { 475 data.cache = {}; 476 data.createElem = ownerDocument.createElement; 477 data.createFrag = ownerDocument.createDocumentFragment; 478 data.frag = data.createFrag(); 479 } 480 481 482 ownerDocument.createElement = function ( nodeName ) { 483 if ( !html5.shivMethods ) { 484 return data.createElem( nodeName ); 485 } 486 return createElement( nodeName, ownerDocument, data ); 487 }; 488 489 ownerDocument.createDocumentFragment = Function( 490 'h,f', 491 'return function(){' + 492 'var n=f.cloneNode(),c=n.createElement;' + 493 'h.shivMethods&&(' + 494 getElements().join().replace( /[\w\-]+/g, function ( nodeName ) { 495 data.createElem( nodeName ); 496 data.frag.createElement( nodeName ); 497 return 'c("' + nodeName + '")'; 498 } ) + 499 ');return n}' 500 )( html5, data.frag ); 501 } 502 503 function shivDocument( ownerDocument ) { 504 if ( !ownerDocument ) { 505 ownerDocument = document; 506 } 507 var data = getExpandoData( ownerDocument ); 508 509 if ( html5.shivCSS && !supportsHtml5Styles && !data.hasCSS ) { 510 data.hasCSS = !!addStyleSheet( ownerDocument, 511 'article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}' + 512 'mark{background:#FF0;color:#000}' + 513 'template{display:none}' 514 ); 515 } 516 if ( !supportsUnknownElements ) { 517 shivMethods( ownerDocument, data ); 518 } 519 return ownerDocument; 520 } 521 522 var html5 = { 523 'elements': options.elements || 'abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output progress section summary template time video', 524 525 'version': version, 526 527 'shivCSS': ( options.shivCSS !== false ), 528 529 'supportsUnknownElements': supportsUnknownElements, 530 531 'shivMethods': ( options.shivMethods !== false ), 532 533 'type': 'default', 534 535 'shivDocument': shivDocument, 536 537 createElement: createElement, 538 539 createDocumentFragment: createDocumentFragment 540 }; 541 542 window.html5 = html5; 543 544 shivDocument( document ); 545 546 } ( this, document ) ); 547 548 Modernizr._version = version; 549 550 Modernizr._prefixes = prefixes; 551 Modernizr._domPrefixes = domPrefixes; 552 Modernizr._cssomPrefixes = cssomPrefixes; 553 554 Modernizr.hasEvent = isEventSupported; 555 556 Modernizr.testProp = function ( prop ) { 557 return testProps( [prop] ); 558 }; 559 560 Modernizr.testAllProps = testPropsAll; 561 562 Modernizr.testStyles = injectElementWithStyles; docElement.className = docElement.className.replace( /(^|\s)no-js(\s|$)/, '$1$2' ) + ( enableClasses ? " has-js has-" + classes.join( " has-" ) : '' ); 563 564 return Modernizr; 565 566} )( this, this.document ); 567;
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.