caniemail
Version:
HTML and CSS Feature Support for Email Clients from caniemail.com
60 lines • 2.14 kB
JavaScript
import { getFeatures } from './features.js';
const features = getFeatures().image;
const formatTitles = {
apng: 'Animated PNG image format',
avif: 'AVIF image format',
bmp: 'BMP image format',
gif: 'GIF image format',
heic: 'HEIF image format',
heif: 'HEIF image format',
ico: 'ICO image format',
jpeg: 'JPG image format',
jpg: 'JPG image format',
png: 'PNG image format',
svg: 'SVG image format',
tif: 'TIFF image format',
tiff: 'TIFF image format',
webp: 'webP image format'
};
const mimeTitles = {
'image/apng': 'Animated PNG image format',
'image/avif': 'AVIF image format',
'image/bmp': 'BMP image format',
'image/gif': 'GIF image format',
'image/heic': 'HEIF image format',
'image/heif': 'HEIF image format',
'image/jpeg': 'JPG image format',
'image/jpg': 'JPG image format',
'image/png': 'PNG image format',
'image/svg+xml': 'SVG image format',
'image/tiff': 'TIFF image format',
'image/vnd.microsoft.icon': 'ICO image format',
'image/webp': 'webP image format'
};
const getUrlFormatTitle = (url) => {
const dataUriMime = /^data:([^;,]+)/i.exec(url.trim())?.[1]?.toLowerCase();
if (dataUriMime)
return mimeTitles[dataUriMime];
const path = url.split(/[?#]/, 1)[0];
const extension = /\.([a-z0-9]+)$/i.exec(path)?.[1]?.toLowerCase();
if (!extension)
return undefined;
return formatTitles[extension];
};
export const getMatchingImageTitles = ({ urls }) => {
const titles = new Set();
for (const url of urls) {
const title = getUrlFormatTitle(url);
if (title && features.has(title))
titles.add(title);
}
return [...titles];
};
export const getUrlsFromSrcset = (srcset) => srcset
.split(',')
.map((candidate) => candidate.trim().split(/\s+/, 1)[0])
.filter((url) => url !== undefined && url !== '');
export const getUrlsFromCssValue = (value) => [...value.matchAll(/url\(\s*(['"]?)(.*?)\1\s*\)/gi)]
.map((match) => match[2]?.trim())
.filter((url) => url !== undefined && url !== '');
//# sourceMappingURL=image-titles.js.map