vendor: 7,757 bytes, lines 1-308
1 2/* Modernizr 2.8.3 (Custom Build) | MIT & BSD 3 * Build: http://modernizr.com/download/#-cssclasses-addtest-prefixed-teststyles-testprop-testallprops-hasevent-prefixes-domprefixes-img_webp 4 */ 5window.Modernizr = (function(window, document, undefined) { 6 7 var version = '2.8.3', 8 9 Modernizr = {}, 10 enableClasses = true, 11 docElement = document.documentElement, 12 mod = 'modernizr', 13 modElem = document.createElement(mod), 14 mStyle = modElem.style, 15 inputElem, 16 toString = {}.toString, 17 prefixes = ' -webkit- -moz- -o- -ms- '.split(' '), 18 omPrefixes = 'Webkit Moz O ms', 19 cssomPrefixes = omPrefixes.split(' '), 20 domPrefixes = omPrefixes.toLowerCase().split(' '), 21 tests = {}, 22 inputs = {}, 23 attrs = {}, 24 classes = [], 25 slice = classes.slice, 26 featureName, 27 28 injectElementWithStyles = function(rule, callback, nodes, testnames) { 29 30 var style, ret, node, docOverflow, 31 div = document.createElement('div'), 32 body = document.body, 33 fakeBody = body || document.createElement('body'); 34 35 if (parseInt(nodes, 10)) { 36 while (nodes--) { 37 node = document.createElement('div'); 38 node.id = testnames ? testnames[nodes] : mod + (nodes + 1); 39 div.appendChild(node); 40 } 41 } 42 43 style = ['­', '<style id="s', mod, '">', rule, '</style>'].join(''); 44 div.id = mod; 45 (body ? div : fakeBody).innerHTML += style; 46 fakeBody.appendChild(div); 47 if (!body) { 48 fakeBody.style.background = ''; 49 fakeBody.style.overflow = 'hidden'; 50 docOverflow = docElement.style.overflow; 51 docElement.style.overflow = 'hidden'; 52 docElement.appendChild(fakeBody); 53 } 54 55 ret = callback(div, rule); 56 if (!body) { 57 fakeBody.parentNode.removeChild(fakeBody); 58 docElement.style.overflow = docOverflow; 59 } else { 60 div.parentNode.removeChild(div); 61 } 62 63 return !!ret; 64 65 }, 66 67 isEventSupported = (function() { 68 69 var TAGNAMES = { 70 'select': 'input', 71 'change': 'input', 72 'submit': 'form', 73 'reset': 'form', 74 'error': 'img', 75 'load': 'img', 76 'abort': 'img' 77 }; 78 79 function isEventSupported(eventName, element) { 80 81 element = element || document.createElement(TAGNAMES[eventName] || 'div'); 82 eventName = 'on' + eventName; 83 84 var isSupported = eventName in element; 85 86 if (!isSupported) { 87 if (!element.setAttribute) { 88 element = document.createElement('div'); 89 } 90 if (element.setAttribute && element.removeAttribute) { 91 element.setAttribute(eventName, ''); 92 isSupported = is(element[eventName], 'function'); 93 94 if (!is(element[eventName], 'undefined')) { 95 element[eventName] = undefined; 96 } 97 element.removeAttribute(eventName); 98 } 99 } 100 101 element = null; 102 return isSupported; 103 } 104 return isEventSupported; 105 })(), 106 107 108 _hasOwnProperty = ({}).hasOwnProperty, 109 hasOwnProp; 110 111 if (!is(_hasOwnProperty, 'undefined') && !is(_hasOwnProperty.call, 'undefined')) { 112 hasOwnProp = function(object, property) { 113 return _hasOwnProperty.call(object, property); 114 }; 115 } else { 116 hasOwnProp = function(object, property) { 117 return ((property in object) && is(object.constructor.prototype[property], 'undefined')); 118 }; 119 } 120 121 122 if (!Function.prototype.bind) { 123 Function.prototype.bind = function bind(that) { 124 125 var target = this; 126 127 if (typeof target != "function") { 128 throw new TypeError(); 129 } 130 131 var args = slice.call(arguments, 1), 132 bound = function() { 133 134 if (this instanceof bound) { 135 136 var F = function() {}; 137 F.prototype = target.prototype; 138 var self = new F(); 139 140 var result = target.apply( 141 self, 142 args.concat(slice.call(arguments)) 143 ); 144 if (Object(result) === result) { 145 return result; 146 } 147 return self; 148 149 } else { 150 151 return target.apply( 152 that, 153 args.concat(slice.call(arguments)) 154 ); 155 156 } 157 158 }; 159 160 return bound; 161 }; 162 } 163 164 function setCss(str) { 165 mStyle.cssText = str; 166 } 167 168 function setCssAll(str1, str2) { 169 return setCss(prefixes.join(str1 + ';') + (str2 || '')); 170 } 171 172 function is(obj, type) { 173 return typeof obj === type; 174 } 175 176 function contains(str, substr) { 177 return !!~('' + str).indexOf(substr); 178 } 179 180 function testProps(props, prefixed) { 181 for (var i in props) { 182 var prop = props[i]; 183 if (!contains(prop, "-") && mStyle[prop] !== undefined) { 184 return prefixed == 'pfx' ? prop : true; 185 } 186 } 187 return false; 188 } 189 190 function testDOMProps(props, obj, elem) { 191 for (var i in props) { 192 var item = obj[props[i]]; 193 if (item !== undefined) { 194 195 if (elem === false) return props[i]; 196 197 if (is(item, 'function')) { 198 return item.bind(elem || obj); 199 } 200 201 return item; 202 } 203 } 204 return false; 205 } 206 207 function testPropsAll(prop, prefixed, elem) { 208 209 var ucProp = prop.charAt(0).toUpperCase() + prop.slice(1), 210 props = (prop + ' ' + cssomPrefixes.join(ucProp + ' ') + ucProp).split(' '); 211 212 if (is(prefixed, "string") || is(prefixed, "undefined")) { 213 return testProps(props, prefixed); 214 215 } else { 216 props = (prop + ' ' + (domPrefixes).join(ucProp + ' ') + ucProp).split(' '); 217 return testDOMProps(props, prefixed, elem); 218 } 219 } 220 for (var feature in tests) { 221 if (hasOwnProp(tests, feature)) { 222 featureName = feature.toLowerCase(); 223 Modernizr[featureName] = tests[feature](); 224 225 classes.push((Modernizr[featureName] ? '' : 'no-') + featureName); 226 } 227 } 228 229 Modernizr.addTest = function(feature, test) { 230 if (typeof feature == 'object') { 231 for (var key in feature) { 232 if (hasOwnProp(feature, key)) { 233 Modernizr.addTest(key, feature[key]); 234 } 235 } 236 } else { 237 238 feature = feature.toLowerCase(); 239 240 if (Modernizr[feature] !== undefined) { 241 return Modernizr; 242 } 243 244 test = typeof test == 'function' ? test() : test; 245 246 if (typeof enableClasses !== "undefined" && enableClasses) { 247 docElement.className += ' ' + (test ? '' : 'no-') + feature; 248 } 249 Modernizr[feature] = test; 250 251 } 252 253 return Modernizr; 254 }; 255 256 setCss(''); 257 modElem = inputElem = null; 258 259 Modernizr._version = version; 260 261 Modernizr._prefixes = prefixes; 262 Modernizr._domPrefixes = domPrefixes; 263 Modernizr._cssomPrefixes = cssomPrefixes; 264 265 Modernizr.hasEvent = isEventSupported; 266 267 Modernizr.testProp = function(prop) { 268 return testProps([prop]); 269 }; 270 271 Modernizr.testAllProps = testPropsAll; 272 273 Modernizr.testStyles = injectElementWithStyles; 274 Modernizr.prefixed = function(prop, obj, elem) { 275 if (!obj) { 276 return testPropsAll(prop, 'pfx'); 277 } else { 278 return testPropsAll(prop, obj, elem); 279 } 280 }; 281 282 docElement.className = docElement.className.replace(/(^|\s)no-js(\s|$)/, '$1$2') + 283 284 (enableClasses ? ' js ' + classes.join(' ') : ''); 285 286 return Modernizr; 287 288})(this, this.document); 289// code.google.com/speed/webp/ 290// by rich bradshaw, ryan seddon, and paul irish 291// This test is asynchronous. Watch out. 292 293(function() { 294 295 var image = new Image(); 296 297 image.onerror = function() { 298 Modernizr.addTest('webp', false); 299 }; 300 image.onload = function() { 301 Modernizr.addTest('webp', function() { 302 return image.width == 1; 303 }); 304 }; 305 306 image.src = 'data:image/webp;base64,UklGRiwAAABXRUJQVlA4ICAAAAAUAgCdASoBAAEAL/3+/3+CAB/AAAFzrNsAAP5QAAAAAA=='; 307 308}());
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.