Files
test-repo/src/language-html/syntax-attribute.js
T

70 lines
1.8 KiB
JavaScript

"use strict";
const parseSrcset = require("parse-srcset");
const {
builders: { concat, ifBreak, join, line },
} = require("../document");
function printImgSrcset(value) {
const srcset = parseSrcset(value, {
logger: {
error(message) {
throw new Error(message);
},
},
});
const hasW = srcset.some(({ w }) => w);
const hasH = srcset.some(({ h }) => h);
const hasX = srcset.some(({ d }) => d);
if (hasW + hasH + hasX > 1) {
throw new Error("Mixed descriptor in srcset is not supported");
}
const key = hasW ? "w" : hasH ? "h" : "d";
const unit = hasW ? "w" : hasH ? "h" : "x";
const getMax = (values) => Math.max(...values);
const urls = srcset.map((src) => src.url);
const maxUrlLength = getMax(urls.map((url) => url.length));
const descriptors = srcset
.map((src) => src[key])
.map((descriptor) => (descriptor ? descriptor.toString() : ""));
const descriptorLeftLengths = descriptors.map((descriptor) => {
const index = descriptor.indexOf(".");
return index === -1 ? descriptor.length : index;
});
const maxDescriptorLeftLength = getMax(descriptorLeftLengths);
return join(
concat([",", line]),
urls.map((url, index) => {
const parts = [url];
const descriptor = descriptors[index];
if (descriptor) {
const urlPadding = maxUrlLength - url.length + 1;
const descriptorPadding =
maxDescriptorLeftLength - descriptorLeftLengths[index];
const alignment = " ".repeat(urlPadding + descriptorPadding);
parts.push(ifBreak(alignment, " "), descriptor + unit);
}
return concat(parts);
})
);
}
function printClassNames(value) {
return value.trim().split(/\s+/).join(" ");
}
module.exports = {
printImgSrcset,
printClassNames,
};