mirror of
https://github.com/gnh1201/welsonjs.git
synced 2025-05-24 18:41:03 +00:00
97 lines
3.1 KiB
JavaScript
97 lines
3.1 KiB
JavaScript
/*!
|
|
{
|
|
"name": "Webp",
|
|
"async": true,
|
|
"property": "webp",
|
|
"caniuse": "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);
|
|
}
|
|
}
|
|
});
|
|
|
|
});
|
|
|
|
});
|