fastlion-amis
Version:
一种MIS页面生成工具
57 lines (48 loc) • 1.48 kB
text/typescript
/**
* 处理样式相关的工具方法,不放 helper 里是为了避免循环依赖
*/
import {resolveVariableAndFilter} from './tpl-builtin';
import mapValues from 'lodash/mapValues';
import camelCase from 'lodash/camelCase';
function autoAddImageURL(image: string) {
// 只支持单个的情况,并简单滤掉 linear-gradient 等情况
if (
typeof image === 'string' &&
image.indexOf(',') === -1 &&
image.indexOf('(') === -1
) {
return `url("${image}")`;
}
return image;
}
/**
* 处理配置中的 style,主要做三件事:
* 1. 变量解析
* 2. 将 font-size 之类的错误写法转成 fontSize
* 3. 针对 image 自动加 url
*/
export function buildStyle(style: any, data: any) {
if (!style) {
return style;
}
let styleVar =
typeof style === 'string'
? resolveVariableAndFilter(style, data, '| raw') || {}
: mapValues(style, s => resolveVariableAndFilter(s, data, '| raw') || s);
Object.keys(styleVar).forEach((key: string) => {
if (key.indexOf('-') !== -1) {
styleVar[camelCase(key)] = styleVar[key];
delete styleVar[key];
}
});
if (styleVar.backgroundImage) {
styleVar.backgroundImage = autoAddImageURL(styleVar.backgroundImage);
}
if (styleVar.borderImage) {
styleVar.borderImage = autoAddImageURL(styleVar.borderImage);
}
if (styleVar.listStyleImage) {
styleVar.listStyleImage = autoAddImageURL(styleVar.listStyleImage);
}
return styleVar;
}