@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
50 lines • 2.63 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.migrateLabel = void 0;
const elements_1 = require("../../../../utils/templates/elements");
const inputs_1 = require("../../../../utils/templates/inputs");
const template_resource_1 = require("../../../../utils/templates/template-resource");
function migrateLabel({ resource, recorder, fileSystem, }) {
const template = (0, template_resource_1.getTemplateFromTemplateResource)(resource, fileSystem);
const templateOffset = (0, template_resource_1.getTemplateOffset)(resource);
const labelElements = (0, elements_1.findElementsByTagName)(template, 'label', ({ attrs }) => attrs.some(({ name }) => name === 'tuilabel' || name === '[tuilabel]'));
labelElements.forEach(({ attrs, sourceCodeLocation, childNodes }) => {
const labelAttr = (0, inputs_1.findAttr)(attrs, 'tuilabel');
if (!labelAttr || !sourceCodeLocation) {
return;
}
migrateValue({
valueAttr: labelAttr,
sourceCodeLocation,
recorder,
templateOffset,
childNodes,
});
});
}
exports.migrateLabel = migrateLabel;
function migrateValue({ valueAttr, sourceCodeLocation, recorder, templateOffset, childNodes, }) {
var _a;
const attrValue = valueAttr === null || valueAttr === void 0 ? void 0 : valueAttr.value;
const { startTag, endTag } = sourceCodeLocation;
const insertTo = startTag === null || startTag === void 0 ? void 0 : startTag.endOffset;
if (!attrValue || !insertTo) {
return;
}
const onlyTextContent = childNodes.length && childNodes.every((node) => node.nodeName === '#text');
if (onlyTextContent && startTag && endTag) {
const content = `<span tuiTitle><span tuiSubtitle>${valueAttr.name === 'tuilabel' ? attrValue : `{{ ${attrValue} }}`}</span>`;
recorder.insertRight(templateOffset + insertTo, content);
recorder.insertLeft(templateOffset + endTag.startOffset, '</span>');
}
else {
recorder.insertRight(insertTo + templateOffset, valueAttr.name === 'tuilabel' ? attrValue : `{{ ${attrValue} }}`);
}
const attrOffset = (_a = sourceCodeLocation === null || sourceCodeLocation === void 0 ? void 0 : sourceCodeLocation.attrs) === null || _a === void 0 ? void 0 : _a[valueAttr.name];
if (attrOffset) {
const { startOffset, endOffset } = attrOffset;
recorder.remove(templateOffset + startOffset, endOffset - startOffset);
recorder.insertRight(templateOffset + startOffset, 'tuiLabel');
}
}
//# sourceMappingURL=migrate-label.js.map