1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- /*!
- {
- "name": "Webp",
- "async": true,
- "property": "webp",
- "tags": ["image"],
- "builderAliases": ["img_webp"],
- "authors": ["Krister Kari", "@amandeep", "Rich Bradshaw", "Ryan Seddon", "Paul Irish"],
- "notes": [{
- "name": "Webp Info",
- "href": "https://developers.google.com/speed/webp/"
- }, {
- "name": "Chromium blog - Chrome 32 Beta: Animated WebP images and faster Chrome for Android touch input",
- "href": "https://blog.chromium.org/2013/11/chrome-32-beta-animated-webp-images-and.html"
- }, {
- "name": "Webp Lossless Spec",
- "href": "https://developers.google.com/speed/webp/docs/webp_lossless_bitstream_specification"
- }, {
- "name": "Article about WebP support",
- "href": "https://optimus.keycdn.com/support/webp-support/"
- }, {
- "name": "Chromium WebP announcement",
- "href": "https://blog.chromium.org/2011/11/lossless-and-transparency-encoding-in.html?m=1"
- }]
- }
- !*/
- /* DOC
- Tests for lossy, non-alpha webp support.
- Tests for all forms of webp support (lossless, lossy, alpha, and animated)..
- Modernizr.webp // Basic support (lossy)
- Modernizr.webp.lossless // Lossless
- Modernizr.webp.alpha // Alpha (both lossy and lossless)
- Modernizr.webp.animation // Animated WebP
- */
- define(['Modernizr', 'addTest'], function(Modernizr, addTest) {
- Modernizr.addAsyncTest(function() {
- var webpTests = [{
- 'uri': 'data:image/webp;base64,UklGRiQAAABXRUJQVlA4IBgAAAAwAQCdASoBAAEAAwA0JaQAA3AA/vuUAAA=',
- 'name': 'webp'
- }, {
- 'uri': 'data:image/webp;base64,UklGRkoAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAwAAAABBxAR/Q9ERP8DAABWUDggGAAAADABAJ0BKgEAAQADADQlpAADcAD++/1QAA==',
- 'name': 'webp.alpha'
- }, {
- 'uri': 'data:image/webp;base64,UklGRlIAAABXRUJQVlA4WAoAAAASAAAAAAAAAAAAQU5JTQYAAAD/////AABBTk1GJgAAAAAAAAAAAAAAAAAAAGQAAABWUDhMDQAAAC8AAAAQBxAREYiI/gcA',
- 'name': 'webp.animation'
- }, {
- 'uri': 'data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAAAAAAfQ//73v/+BiOh/AAA=',
- 'name': 'webp.lossless'
- }];
- var webp = webpTests.shift();
- function test(name, uri, cb) {
- var image = new Image();
- function addResult(event) {
- // if the event is from 'onload', check the see if the image's width is
- // 1 pixel (which indicates support). otherwise, it fails
- var result = event && event.type === 'load' ? image.width === 1 : false;
- var baseTest = name === 'webp';
- // if it is the base test, and the result is false, just set a literal false
- // rather than use the Boolean constructor
- addTest(name, (baseTest && result) ? new Boolean(result) : result);
- if (cb) {
- cb(event);
- }
- }
- image.onerror = addResult;
- image.onload = addResult;
- image.src = uri;
- }
- // test for webp support in general
- test(webp.name, webp.uri, function(e) {
- // if the webp test loaded, test everything else.
- if (e && e.type === 'load') {
- for (var i = 0; i < webpTests.length; i++) {
- test(webpTests[i].name, webpTests[i].uri);
- }
- }
- });
- });
- });
|