@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
60 lines • 2.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.replaceAttrValues = void 0;
const add_import_to_closest_module_1 = require("../../../utils/add-import-to-closest-module");
const elements_1 = require("../../../utils/templates/elements");
const template_resource_1 = require("../../../utils/templates/template-resource");
function replaceAttrValues({ resource, recorder, fileSystem, data, }) {
const template = (0, template_resource_1.getTemplateFromTemplateResource)(resource, fileSystem);
const templateOffset = (0, template_resource_1.getTemplateOffset)(resource);
data.forEach(({ attrNames, valueReplacer, withTagNames, filterFn, newAttrName, directiveModule, }) => {
const elements = [
...(0, elements_1.findElementsWithAttributeOnTag)(template, attrNames, withTagNames, filterFn),
];
elements.forEach((element) => {
const { name, value } = element.attrs.find((attr) => attrNames.map((name) => name.toLowerCase()).includes(attr.name)) || {};
if (!name || !value) {
return;
}
const attributeName = attrNames.find((attrName) => attrName.toLowerCase() === name) || '';
if (Array.isArray(valueReplacer)) {
valueReplacer.forEach(({ from, to }) => {
if (value === from) {
replaceValue({
element,
recorder,
templateOffset,
attrName: name,
attrNewName: newAttrName || attributeName,
attrValue: to,
});
}
});
}
else {
replaceValue({
element,
recorder,
templateOffset,
attrName: name,
attrNewName: newAttrName || attributeName,
attrValue: valueReplacer(value),
});
}
if (directiveModule) {
(0, add_import_to_closest_module_1.addImportToClosestModule)(resource.componentPath, directiveModule.name, directiveModule.moduleSpecifier);
}
});
});
}
exports.replaceAttrValues = replaceAttrValues;
function replaceValue({ element, recorder, templateOffset, attrName, attrNewName, attrValue, }) {
var _a, _b;
const { startOffset, endOffset } = ((_b = (_a = element.sourceCodeLocation) === null || _a === void 0 ? void 0 : _a.attrs) === null || _b === void 0 ? void 0 : _b[attrName]) || {
startOffset: 0,
endOffset: 0,
};
recorder.remove(templateOffset + startOffset, endOffset - startOffset);
recorder.insertRight(templateOffset + startOffset, `${attrNewName}="${attrValue}"`);
}
//# sourceMappingURL=replace-attr-values.js.map