UNPKG

@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
"use strict"; 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