filestack-adaptive
Version:
HTML5 picture elements powered by Filestack
114 lines (112 loc) • 14.8 kB
JavaScript
import { makePictureTree } from '../tree';
import { makePicture } from './DOM';
var validator = require('html-validator');
var handle = 'seW1thvcR1aQBfOCF8bX';
var makeHTML = function (el) {
return "\n <!DOCTYPE html>\n <html>\n <head>\n <title>Test</title>\n </head>\n <body>\n " + el.toString() + "\n </body>\n </html>\n ";
};
var isInvalid = function (json) {
var data = JSON.parse(json);
var types = data.messages.map(function (m) { return m.type; });
return types.indexOf('error') !== -1;
};
describe('DOM adapter', function () {
it('sanity - should invalidate an img without alt', function (done) {
var options = {};
var picture = makePicture(makePictureTree(handle, options));
validator({ data: makeHTML(picture) }).then(function (data) {
done(!isInvalid(data));
});
});
it('should generate a valid picture element with width and pixel density', function (done) {
var options = {
alt: 'downtown',
width: '768px'
};
var picture = makePicture(makePictureTree(handle, options));
validator({ data: makeHTML(picture) }).then(function (data) {
done(isInvalid(data));
});
});
it('should generate a valid picture element with 1 size and width descriptors', function (done) {
var options = {
alt: 'downtown',
sizes: {
'(min-width: 640px)': '80vw',
fallback: '100vw'
},
resolutions: [540, 670, 1080]
};
var picture = makePicture(makePictureTree(handle, options));
validator({ data: makeHTML(picture) }).then(function (data) {
console.log(data, isInvalid(data));
done(isInvalid(data));
});
});
it('should generate a valid picture element with 2 formats and 2 sizes', function (done) {
var options = {
alt: 'downtown',
sizes: {
'(min-width: 640px)': '80vw',
'(min-width: 320px)': '700px',
fallback: '100vw'
},
formats: ['webp', 'jpg']
};
var picture = makePicture(makePictureTree(handle, options));
validator({ data: makeHTML(picture) }).then(function (data) {
done(isInvalid(data));
});
});
it('should generate a valid picture element with 1 format and fallback', function (done) {
var options = {
alt: 'downtown',
sizes: {
fallback: '100vw'
},
formats: ['webp', 'jpg']
};
var picture = makePicture(makePictureTree(handle, options));
validator({ data: makeHTML(picture) }).then(function (data) {
done(isInvalid(data));
});
});
it('should generate a valid picture element with 1 format', function (done) {
var options = {
alt: 'downtown',
formats: ['webp']
};
var picture = makePicture(makePictureTree(handle, options));
validator({ data: makeHTML(picture) }).then(function (data) {
done(isInvalid(data));
});
});
it('should generate a valid picture element with img fallback size and 2 width descriptors', function (done) {
var options = {
alt: 'downtown',
sizes: {
fallback: '100vw'
},
resolutions: ['320w', '640w']
};
var picture = makePicture(makePictureTree(handle, options));
validator({ data: makeHTML(picture) }).then(function (data) {
done(isInvalid(data));
});
});
it('should generate a valid picture element with 1 fallback size and 1 format', function (done) {
var options = {
alt: 'downtown',
formats: ['webp'],
resolutions: [640],
sizes: {
fallback: '700px'
}
};
var picture = makePicture(makePictureTree(handle, options));
validator({ data: makeHTML(picture) }).then(function (data) {
done(isInvalid(data));
});
});
});
//# sourceMappingURL=data:application/json;charset=utf8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9hZGFwdGVycy9ET00uc3BlYy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQzFDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxPQUFPLENBQUM7QUFFcEMsSUFBTSxTQUFTLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFDNUMsSUFBTSxNQUFNLEdBQUcsc0JBQXNCLENBQUM7QUFFdEMsSUFBTSxRQUFRLEdBQUcsVUFBQyxFQUFPO0lBQ3ZCLE9BQU8sc0hBT0MsRUFBRSxDQUFDLFFBQVEsRUFBRSxxQ0FHcEIsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLElBQU0sU0FBUyxHQUFHLFVBQUMsSUFBUztJQUMxQixJQUFNLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzlCLElBQU0sS0FBSyxHQUFhLElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLFVBQUMsQ0FBTSxJQUFLLE9BQUEsQ0FBQyxDQUFDLElBQUksRUFBTixDQUFNLENBQUMsQ0FBQztJQUM5RCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdkMsQ0FBQyxDQUFDO0FBRUYsUUFBUSxDQUFDLGFBQWEsRUFBRTtJQUN0QixFQUFFLENBQUMsK0NBQStDLEVBQUUsVUFBQSxJQUFJO1FBQ3RELElBQU0sT0FBTyxHQUFHLEVBQUUsQ0FBQztRQUNuQixJQUFNLE9BQU8sR0FBRyxXQUFXLENBQ3pCLGVBQWUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQ2pDLENBQUM7UUFDRixTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQyxJQUFTO1lBQ3BELElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMs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QUMsR0FBRyxDQUFDO1lBQ2xCLEtBQUssRUFBRTtnQkFDTCxRQUFRLEVBQUUsT0FBTzthQUNsQjtTQUNGLENBQUM7UUFDRixJQUFNLE9BQU8sR0FBRyxXQUFXLENBQ3pCLGVBQWUsQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLENBQ2pDLENBQUM7UUFDRixTQUFTLENBQUMsRUFBRSxJQUFJLEVBQUUsUUFBUSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBQyxJQUFTO1lBQ3BELElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyxDQUFDLENBQUMiLCJmaWxlIjoiYWRhcHRlcnMvRE9NLnNwZWMuanMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBtYWtlUGljdHVyZVRyZWUgfSBmcm9tICcuLi90cmVlJztcbmltcG9ydCB7IG1ha2VQaWN0dXJlIH0gZnJvbSAnLi9ET00nO1xuXG5jb25zdCB2YWxpZGF0b3IgPSByZXF1aXJlKCdodG1sLXZhbGlkYXRvcicpO1xuY29uc3QgaGFuZGxlID0gJ3NlVzF0aHZjUjFhUUJmT0NGOGJYJztcblxuY29uc3QgbWFrZUhUTUwgPSAoZWw6IGFueSkgPT4ge1xuICByZXR1cm4gYFxuICA8IURPQ1RZUEUgaHRtbD5cbiAgICA8aHRtbD5cbiAgICAgIDxoZWFkPlxuICAgICAgICA8dGl0bGU+VGVzdDwvdGl0bGU+XG4gICAgICA8L2hlYWQ+XG4gICAgICA8Ym9keT5cbiAgICAgICAgJHtlbC50b1N0cmluZygpfVxuICAgICAgPC9ib2R5PlxuICAgIDwvaHRtbD5cbiAgYDtcbn07XG5cbmNvbnN0IGlzSW52YWxpZCA9IChqc29uOiBhbnkpID0+IHtcbiAgY29uc3QgZGF0YSA9IEpTT04ucGFyc2UoanNvbik7XG4gIGNvbnN0IHR5cGVzOiBzdHJpbmdbXSA9IGRhdGEubWVzc2FnZXMubWFwKChtOiBhbnkpID0+IG0udHlwZSk7XG4gIHJldHVybiB0eXBlcy5pbmRleE9mKCdlcnJvcicpICE9PSAtMTtcbn07XG5cbmRlc2NyaWJlKCdET00gYWRhcHRlcicsICgpID0+IHtcbiAgaXQoJ3Nhbml0eSAtIHNob3VsZCBpbnZhbGlkYXRlIGFuIGltZyB3aXRob3V0IGFsdCcsIGRvbmUgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICBjb25zdCBwaWN0dXJlID0gbWFrZVBpY3R1cmUoXG4gICAgICBtYWtlUGljdHVyZVRyZWUoaGFuZGxlLCBvcHRpb25zKVxuICAgICk7XG4gICAgdmFsaWRhdG9yKHsgZGF0YTogbWFrZUhUTUwocGljdHVyZSkgfSkudGhlbigoZGF0YTogYW55KSA9PiB7XG4gICAgICBkb25lKCFpc0ludmFsaWQoZGF0YSkpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEgdmFsaWQgcGljdHVyZSBlbGVtZW50IHdpdGggd2lkdGggYW5kIHBpeGVsIGRlbnNpdHknLCBkb25lID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgYWx0OiAnZG93bnRvd24nLFxuICAgICAgd2lkdGg6ICc3NjhweCdcbiAgICB9O1xuICAgIGNvbnN0IHBpY3R1cmUgPSBtYWtlUGljdHVyZShcbiAgICAgIG1ha2VQaWN0dXJlVHJlZShoYW5kbGUsIG9wdGlvbnMpXG4gICAgKTtcblxuICAgIHZhbGlkYXRvcih7IGRhdGE6IG1ha2VIVE1MKHBpY3R1cmUpIH0pLnRoZW4oKGRhdGE6IGFueSkgPT4ge1xuICAgICAgZG9uZShpc0ludmFsaWQoZGF0YSkpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEgdmFsaWQgcGljdHVyZSBlbGVtZW50IHdpdGggMSBzaXplIGFuZCB3aWR0aCBkZXNjcmlwdG9ycycsIGRvbmUgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBhbHQ6ICdkb3dudG93bicsXG4gICAgICBzaXplczoge1xuICAgICAgICAnKG1pbi13aWR0aDogNjQwcHgpJzogJzgwdncnLFxuICAgICAgICBmYWxsYmFjazogJzEwMHZ3J1xuICAgICAgfSxcbiAgICAgIHJlc29sdXRpb25zOiBbNTQwLCA2NzAsIDEwODBdXG4gICAgfTtcbiAgICBjb25zdCBwaWN0dXJlID0gbWFrZVBpY3R1cmUoXG4gICAgICBtYWtlUGljdHVyZVRyZWUoaGFuZGxlLCBvcHRpb25zKVxuICAgICk7XG4gICAgdmFsaWRhdG9yKHsgZGF0YTogbWFrZUhUTUwocGljdHVyZSkgfSkudGhlbigoZGF0YTogYW55KSA9PiB7XG4gICAgICBjb25zb2xlLmxvZyhkYXRhLCBpc0ludmFsaWQoZGF0YSkpO1xuICAgICAgZG9uZShpc0ludmFsaWQoZGF0YSkpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEgdmFsaWQgcGljdHVyZSBlbGVtZW50IHdpdGggMiBmb3JtYXRzIGFuZCAyIHNpemVzJywgZG9uZSA9PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIGFsdDogJ2Rvd250b3duJyxcbiAgICAgIHNpemVzOiB7XG4gICAgICAgICcobWluLXdpZHRoOiA2NDBweCknOiAnODB2dycsXG4gICAgICAgICcobWluLXdpZHRoOiAzMjBweCknOiAnNzAwcHgnLFxuICAgICAgICBmYWxsYmFjazogJzEwMHZ3J1xuICAgICAgfSxcbiAgICAgIGZvcm1hdHM6IFsnd2VicCcsICdqcGcnXVxuICAgIH07XG4gICAgY29uc3QgcGljdHVyZSA9IG1ha2VQaWN0dXJlKFxuICAgICAgbWFrZVBpY3R1cmVUcmVlKGhhbmRsZSwgb3B0aW9ucylcbiAgICApO1xuICAgIHZhbGlkYXRvcih7IGRhdGE6IG1ha2VIVE1MKHBpY3R1cmUpIH0pLnRoZW4oKGRhdGE6IGFueSkgPT4ge1xuICAgICAgZG9uZShpc0ludmFsaWQoZGF0YSkpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEgdmFsaWQgcGljdHVyZSBlbGVtZW50IHdpdGggMSBmb3JtYXQgYW5kIGZhbGxiYWNrJywgZG9uZSA9PiB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IHtcbiAgICAgIGFsdDogJ2Rvd250b3duJyxcbiAgICAgIHNpemVzOiB7XG4gICAgICAgIGZhbGxiYWNrOiAnMTAwdncnXG4gICAgICB9LFxuICAgICAgZm9ybWF0czogWyd3ZWJwJywgJ2pwZyddXG4gICAgfTtcbiAgICBjb25zdCBwaWN0dXJlID0gbWFrZVBpY3R1cmUoXG4gICAgICBtYWtlUGljdHVyZVRyZWUoaGFuZGxlLCBvcHRpb25zKVxuICAgICk7XG4gICAgdmFsaWRhdG9yKHsgZGF0YTogbWFrZUhUTUwocGljdHVyZSkgfSkudGhlbigoZGF0YTogYW55KSA9PiB7XG4gICAgICBkb25lKGlzSW52YWxpZChkYXRhKSk7XG4gICAgfSk7XG4gIH0pO1xuXG4gIGl0KCdzaG91bGQgZ2VuZXJhdGUgYSB2YWxpZCBwaWN0dXJlIGVsZW1lbnQgd2l0aCAxIGZvcm1hdCcsIGRvbmUgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBhbHQ6ICdkb3dudG93bicsXG4gICAgICBmb3JtYXRzOiBbJ3dlYnAnXVxuICAgIH07XG4gICAgY29uc3QgcGljdHVyZSA9IG1ha2VQaWN0dXJlKFxuICAgICAgbWFrZVBpY3R1cmVUcmVlKGhhbmRsZSwgb3B0aW9ucylcbiAgICApO1xuICAgIHZhbGlkYXRvcih7IGRhdGE6IG1ha2VIVE1MKHBpY3R1cmUpIH0pLnRoZW4oKGRhdGE6IGFueSkgPT4ge1xuICAgICAgZG9uZShpc0ludmFsaWQoZGF0YSkpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEgdmFsaWQgcGljdHVyZSBlbGVtZW50IHdpdGggaW1nIGZhbGxiYWNrIHNpemUgYW5kIDIgd2lkdGggZGVzY3JpcHRvcnMnLCBkb25lID0+IHtcbiAgICBjb25zdCBvcHRpb25zID0ge1xuICAgICAgYWx0OiAnZG93bnRvd24nLFxuICAgICAgc2l6ZXM6IHtcbiAgICAgICAgZmFsbGJhY2s6ICcxMDB2dydcbiAgICAgIH0sXG4gICAgICByZXNvbHV0aW9uczogWyczMjB3JywgJzY0MHcnXVxuICAgIH07XG4gICAgY29uc3QgcGljdHVyZSA9IG1ha2VQaWN0dXJlKFxuICAgICAgbWFrZVBpY3R1cmVUcmVlKGhhbmRsZSwgb3B0aW9ucylcbiAgICApO1xuICAgIHZhbGlkYXRvcih7IGRhdGE6IG1ha2VIVE1MKHBpY3R1cmUpIH0pLnRoZW4oKGRhdGE6IGFueSkgPT4ge1xuICAgICAgZG9uZShpc0ludmFsaWQoZGF0YSkpO1xuICAgIH0pO1xuICB9KTtcblxuICBpdCgnc2hvdWxkIGdlbmVyYXRlIGEgdmFsaWQgcGljdHVyZSBlbGVtZW50IHdpdGggMSBmYWxsYmFjayBzaXplIGFuZCAxIGZvcm1hdCcsIGRvbmUgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSB7XG4gICAgICBhbHQ6ICdkb3dudG93bicsXG4gICAgICBmb3JtYXRzOiBbJ3dlYnAnXSxcbiAgICAgIHJlc29sdXRpb25zOiBbNjQwXSxcbiAgICAgIHNpemVzOiB7XG4gICAgICAgIGZhbGxiYWNrOiAnNzAwcHgnXG4gICAgICB9XG4gICAgfTtcbiAgICBjb25zdCBwaWN0dXJlID0gbWFrZVBpY3R1cmUoXG4gICAgICBtYWtlUGljdHVyZVRyZWUoaGFuZGxlLCBvcHRpb25zKVxuICAgICk7XG4gICAgdmFsaWRhdG9yKHsgZGF0YTogbWFrZUhUTUwocGljdHVyZSkgfSkudGhlbigoZGF0YTogYW55KSA9PiB7XG4gICAgICBkb25lKGlzSW52YWxpZChkYXRhKSk7XG4gICAgfSk7XG4gIH0pO1xufSk7XG4iXX0=