@progress/kendo-ui
Version:
This package is part of the [Kendo UI for jQuery](http://www.telerik.com/kendo-ui) suite.
201 lines (178 loc) • 7.13 kB
JavaScript
;
const TABSTRIP_ITEM_RE_CSS = /(\.k-tabstrip(?!-|\w)[^{,]*?[\s>+~])\.k-item\b/g;
const TABSTRIP_ITEM_RE_JS = /(\.k-tabstrip(?!-|\w)[^'"]*?[\s>+~])\.k-item\b/g;
function applyTabstripItemReplacementCss(str) {
let result = str.replaceAll('.k-tabstrip-item.k-item', '.k-tabstrip-item');
TABSTRIP_ITEM_RE_CSS.lastIndex = 0;
result = result.replace(TABSTRIP_ITEM_RE_CSS, (_, prefix) => prefix + '.k-tabstrip-item');
TABSTRIP_ITEM_RE_CSS.lastIndex = 0;
return result;
}
function applyTabstripItemReplacementJs(str) {
let result = str.replaceAll('.k-tabstrip-item.k-item', '.k-tabstrip-item');
TABSTRIP_ITEM_RE_JS.lastIndex = 0;
result = result.replace(TABSTRIP_ITEM_RE_JS, (_, prefix) => prefix + '.k-tabstrip-item');
TABSTRIP_ITEM_RE_JS.lastIndex = 0;
return result;
}
function transformStringLiterals(root, j, fn) {
let changed = false;
const visit = path => {
if (typeof path.node.value !== 'string') {
return;
}
const updated = fn(path.node.value);
if (updated === path.node.value) {
return;
}
path.node.value = updated;
if (path.node.extra) {
path.node.extra.rawValue = updated;
if (path.node.extra.raw) {
path.node.extra.raw = fn(path.node.extra.raw);
}
}
changed = true;
};
root.find(j.StringLiteral).forEach(visit);
root.find(j.Literal, n => typeof n.value === 'string').forEach(visit);
return changed;
}
function transformTemplateLiterals(root, j, fn) {
let changed = false;
root.find(j.TemplateLiteral).forEach(path => {
path.node.quasis.forEach(quasi => {
const updatedRaw = fn(quasi.value.raw);
const updatedCooked = quasi.value.cooked != null ? fn(quasi.value.cooked) : null;
if (updatedRaw !== quasi.value.raw || updatedCooked !== quasi.value.cooked) {
quasi.value.raw = updatedRaw;
if (quasi.value.cooked != null) {
quasi.value.cooked = updatedCooked;
}
changed = true;
}
});
});
return changed;
}
function applyTreeViewClassRenames(str) {
let result = str;
result = result.replaceAll('k-treeview-top', 'k-treeview-item-content');
result = result.replaceAll('k-treeview-mid', 'k-treeview-item-content');
result = result.replaceAll('k-treeview-bot', 'k-treeview-item-content');
result = result.replace(
/\.k-treeview-leaf(\.k-(?:hover|focus|selected|disabled)\b)/g,
'.k-treeview-item-content$1'
);
return result;
}
function applyVirtualListClassRename(str) {
let result = str.replaceAll('k-virtual-content', 'k-list-ul');
result = result.replaceAll('.k-list-ul.k-list-ul', '.k-list-ul');
return result;
}
function applyMultiColumnComboBoxGroupHeaderRename(str) {
return str.replaceAll('k-list-group-sticky-header', 'k-table-group-sticky-header');
}
const CHAT_OPTION_RENAMES = new Map([
['suggestedActionsScrollable', 'suggestedActionsLayoutMode'],
['suggestionsScrollable', 'suggestionsLayoutMode'],
]);
function transformChatLayoutModeOptions(root, j) {
let changed = false;
const visitProp = (path) => {
const node = path.node;
if (node.computed) {
return;
}
const keyName =
node.key.type === 'Identifier' ? node.key.name :
(node.key.type === 'StringLiteral' || node.key.type === 'Literal') ? node.key.value :
null;
if (!keyName || !CHAT_OPTION_RENAMES.has(keyName)) {
return;
}
const newName = CHAT_OPTION_RENAMES.get(keyName);
if (node.key.type === 'Identifier') {
node.key.name = newName;
} else {
node.key.value = newName;
if (node.key.extra) {
node.key.extra.rawValue = newName;
if (node.key.extra.raw) {
node.key.extra.raw = node.key.extra.raw.replace(keyName, newName);
}
}
}
const val = node.value;
if (val.type === 'BooleanLiteral' || (val.type === 'Literal' && typeof val.value === 'boolean')) {
node.value = j.stringLiteral(val.value === false ? 'wrap' : 'scroll');
}
changed = true;
};
root.find(j.ObjectProperty).forEach(visitProp);
root.find(j.Property, n => !n.computed && !n.method && !n.shorthand).forEach(visitProp);
return changed;
}
function applyFillModeClassSplitsCss(str) {
let result = str;
result = result.replace(/\.k-button-solid-secondary\b/g, '.k-button-solid.k-button-secondary');
result = result.replace(/\.k-button-solid-primary\b/g, '.k-button-solid.k-button-primary');
result = result.replace(/\.k-button-solid-base\b/g, '.k-button-solid');
result = result.replace(/\.k-button-flat-secondary\b/g, '.k-button-flat.k-button-secondary');
result = result.replace(/\.k-button-flat-primary\b/g, '.k-button-flat.k-button-primary');
result = result.replace(/\.k-button-flat-base\b/g, '.k-button-flat');
result = result.replace(/\.k-chip-solid-primary\b/g, '.k-chip-solid.k-button-primary');
result = result.replace(/\.k-chip-solid-base\b/g, '.k-chip-solid');
return result;
}
function applyFillModeClassSplitsJs(str) {
let result = str;
result = result.replaceAll('k-button-solid-secondary', 'k-button-solid k-button-secondary');
result = result.replaceAll('k-button-solid-primary', 'k-button-solid k-button-primary');
result = result.replaceAll('k-button-solid-base', 'k-button-solid');
result = result.replaceAll('k-button-flat-secondary', 'k-button-flat k-button-secondary');
result = result.replaceAll('k-button-flat-primary', 'k-button-flat k-button-primary');
result = result.replaceAll('k-button-flat-base', 'k-button-flat');
result = result.replaceAll('k-chip-solid-primary', 'k-chip-solid k-button-primary');
result = result.replaceAll('k-chip-solid-base', 'k-chip-solid');
return result;
}
const APPEARANCE_DEFAULT_CLASSES = [
'k-button-sm', 'k-button-md', 'k-button-lg',
'k-input-sm', 'k-input-md', 'k-input-lg',
'k-picker-sm', 'k-picker-md', 'k-picker-lg',
'k-checkbox-sm', 'k-checkbox-md', 'k-checkbox-lg',
'k-chip-sm', 'k-chip-md', 'k-chip-lg',
'k-badge-sm', 'k-badge-md', 'k-badge-lg',
'k-avatar-sm', 'k-avatar-md', 'k-avatar-lg',
'k-loader-sm', 'k-loader-md', 'k-loader-lg',
'k-calendar-md', 'k-table-md', 'k-toolbar-md', 'k-form-md',
'k-rounded-sm', 'k-rounded-md', 'k-rounded-lg', 'k-rounded-full',
'k-button-solid', 'k-input-solid', 'k-picker-solid',
'k-chip-solid', 'k-badge-solid', 'k-avatar-solid',
];
function applyAppearanceDefaultStrips(str) {
let result = str;
for (const cls of APPEARANCE_DEFAULT_CLASSES) {
const escaped = cls.replace(/-/g, '\\-');
result = result.replace(new RegExp(`\\.${escaped}(?=\\.)`, 'g'), '');
result = result.replace(new RegExp(`(?<=[\\w-])\\.${escaped}(?=[\\s{,>+~.:#\\[)]|$)`, 'g'), '');
}
return result;
}
module.exports = {
TABSTRIP_ITEM_RE_CSS,
TABSTRIP_ITEM_RE_JS,
applyTabstripItemReplacementCss,
applyTabstripItemReplacementJs,
applyTreeViewClassRenames,
applyVirtualListClassRename,
applyMultiColumnComboBoxGroupHeaderRename,
applyFillModeClassSplitsCss,
applyFillModeClassSplitsJs,
applyAppearanceDefaultStrips,
transformChatLayoutModeOptions,
transformStringLiterals,
transformTemplateLiterals,
};