@taiga-ui/cdk
Version:
Base library for creating Angular components and applications using Taiga UI principles regarding of actual visual appearance
54 lines • 2.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.migrateFocusable = 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");
const LEGACY_ATTRIBUTE_NAME = 'tuiFocusable';
function migrateFocusable({ resource, recorder, fileSystem, }) {
const template = (0, template_resource_1.getTemplateFromTemplateResource)(resource, fileSystem);
const templateOffset = (0, template_resource_1.getTemplateOffset)(resource);
const elements = (0, elements_1.findElementsWithAttributeOnTag)(template, [
`[${LEGACY_ATTRIBUTE_NAME}]`,
]);
elements.forEach(({ attrs, sourceCodeLocation }) => {
var _a;
if (!sourceCodeLocation) {
return;
}
const focusableAttr = (0, inputs_1.findAttr)(attrs, LEGACY_ATTRIBUTE_NAME);
const attributeLocation = (_a = sourceCodeLocation.attrs) === null || _a === void 0 ? void 0 : _a[focusableAttr.name];
if (!focusableAttr || !attributeLocation) {
return;
}
replaceAttribute({
attr: focusableAttr,
templateOffset,
location: attributeLocation,
recorder,
});
});
}
exports.migrateFocusable = migrateFocusable;
function replaceAttribute({ attr, templateOffset, location, recorder, }) {
const startOffset = templateOffset + location.startOffset;
const length = location.endOffset - location.startOffset;
recorder.remove(startOffset, length);
const { value } = attr;
if (isBooleanLiteral(value)) {
recorder.insertRight(templateOffset + startOffset, `[tabIndex]="${value === 'true' ? '0' : '-1'}"`);
return;
}
if (isPropertyLike(value)) {
recorder.insertRight(templateOffset + startOffset, `[tabIndex]="${attr.value} ? 0 : -1"`);
return;
}
recorder.insertRight(templateOffset + startOffset, `[tabIndex]="(${attr.value}) ? 0 : -1"`);
}
function isPropertyLike(value) {
return !value.includes(' ');
}
function isBooleanLiteral(value) {
return value === 'false' || value === 'true';
}
//# sourceMappingURL=migrate-focusable.js.map