| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122 |
- "use strict";
- var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
- };
- Object.defineProperty(exports, "__esModule", { value: true });
- exports.transformSrcset = exports.createSrcsetTransformWithOptions = void 0;
- const path_1 = __importDefault(require("path"));
- const compiler_core_1 = require("@vue/compiler-core");
- const templateUtils_1 = require("./templateUtils");
- const templateTransformAssetUrl_1 = require("./templateTransformAssetUrl");
- const srcsetTags = ['img', 'source'];
- // http://w3c.github.io/html/semantics-embedded-content.html#ref-for-image-candidate-string-5
- const escapedSpaceCharacters = /( |\\t|\\n|\\f|\\r)+/g;
- const createSrcsetTransformWithOptions = (options) => {
- return (node, context) => exports.transformSrcset(node, context, options);
- };
- exports.createSrcsetTransformWithOptions = createSrcsetTransformWithOptions;
- const transformSrcset = (node, context, options = templateTransformAssetUrl_1.defaultAssetUrlOptions) => {
- if (node.type === 1 /* NodeTypes.ELEMENT */) {
- if (srcsetTags.includes(node.tag) && node.props.length) {
- node.props.forEach((attr, index) => {
- if (attr.name === 'srcset' && attr.type === 6 /* NodeTypes.ATTRIBUTE */) {
- if (!attr.value)
- return;
- const value = attr.value.content;
- if (!value)
- return;
- const imageCandidates = value
- .split(',')
- .map((s) => {
- // The attribute value arrives here with all whitespace, except
- // normal spaces, represented by escape sequences
- const [url, descriptor] = s
- .replace(escapedSpaceCharacters, ' ')
- .trim()
- .split(' ', 2);
- return { url, descriptor };
- });
- // data urls contains comma after the ecoding so we need to re-merge
- // them
- for (let i = 0; i < imageCandidates.length; i++) {
- const { url } = imageCandidates[i];
- if ((0, templateUtils_1.isDataUrl)(url)) {
- imageCandidates[i + 1].url =
- url + ',' + imageCandidates[i + 1].url;
- imageCandidates.splice(i, 1);
- }
- }
- const hasQualifiedUrl = imageCandidates.some(({ url }) => {
- return (!(0, templateUtils_1.isExternalUrl)(url) &&
- !(0, templateUtils_1.isDataUrl)(url) &&
- (options.includeAbsolute || (0, templateUtils_1.isRelativeUrl)(url)));
- });
- // When srcset does not contain any qualified URLs, skip transforming
- if (!hasQualifiedUrl) {
- return;
- }
- if (options.base) {
- const base = options.base;
- const set = [];
- imageCandidates.forEach(({ url, descriptor }) => {
- descriptor = descriptor ? ` ${descriptor}` : ``;
- if ((0, templateUtils_1.isRelativeUrl)(url)) {
- set.push((path_1.default.posix || path_1.default).join(base, url) + descriptor);
- }
- else {
- set.push(url + descriptor);
- }
- });
- attr.value.content = set.join(', ');
- return;
- }
- const compoundExpression = (0, compiler_core_1.createCompoundExpression)([], attr.loc);
- imageCandidates.forEach(({ url, descriptor }, index) => {
- if (!(0, templateUtils_1.isExternalUrl)(url) &&
- !(0, templateUtils_1.isDataUrl)(url) &&
- (options.includeAbsolute || (0, templateUtils_1.isRelativeUrl)(url))) {
- const { path } = (0, templateUtils_1.parseUrl)(url);
- let exp;
- if (path) {
- const existingImportsIndex = context.imports.findIndex((i) => i.path === path);
- if (existingImportsIndex > -1) {
- exp = (0, compiler_core_1.createSimpleExpression)(`_imports_${existingImportsIndex}`, false, attr.loc, 2 /* ConstantTypes.CAN_HOIST */);
- }
- else {
- exp = (0, compiler_core_1.createSimpleExpression)(`_imports_${context.imports.length}`, false, attr.loc, 2 /* ConstantTypes.CAN_HOIST */);
- context.imports.push({ exp, path });
- }
- compoundExpression.children.push(exp);
- }
- }
- else {
- const exp = (0, compiler_core_1.createSimpleExpression)(`"${url}"`, false, attr.loc, 2 /* ConstantTypes.CAN_HOIST */);
- compoundExpression.children.push(exp);
- }
- const isNotLast = imageCandidates.length - 1 > index;
- if (descriptor && isNotLast) {
- compoundExpression.children.push(` + ' ${descriptor}, ' + `);
- }
- else if (descriptor) {
- compoundExpression.children.push(` + ' ${descriptor}'`);
- }
- else if (isNotLast) {
- compoundExpression.children.push(` + ', ' + `);
- }
- });
- const hoisted = context.hoist(compoundExpression);
- hoisted.constType = 2 /* ConstantTypes.CAN_HOIST */;
- node.props[index] = {
- type: 7 /* NodeTypes.DIRECTIVE */,
- name: 'bind',
- arg: (0, compiler_core_1.createSimpleExpression)('srcset', true, attr.loc),
- exp: hoisted,
- modifiers: [],
- loc: attr.loc,
- };
- }
- });
- }
- }
- };
- exports.transformSrcset = transformSrcset;
|