import {defaultNames} from './consts' const nodejieba = require('nodejieba'); /** * 根据设计及命名来生成className * @param layer */ function useFromUINamed(layer, translateList): boolean { const layerName = layer.name || layer.value; if (layer.type === 'Text') { return false; } // 如果不是中文,不走设计师命名转换 const isZh = /^[\u4e00-\u9fa5]+/; if (!isZh.test(layerName)) { return false; } // 如果设计师命名是sketch的随机命名,那也没意义了 if (defaultNames.filter(name => layerName.indexOf(name) >= 0).length !== 0) { return false; } // 分词,如果分词少于2个,则表示非常适合做转换 const keyWorlds = nodejieba.cut(layerName); if (keyWorlds.length <= 2) { translateList.push({ id: layer.id, name: layerName, result: '', }); return true; } // 提取关键词,对于长段文本来说,可以通过关键词来转换 const extracts = nodejieba.extract(layerName, 1); if (extracts[0]) { translateList.push({ id: layer.id, name: extracts[0].word, result: '', }); return true; } return false; } export function getFromFeature(layer, classNameIdList) { let className = ''; // 直接用有特征的 class_name // 包含 列表、左侧图片右侧文本、等等特征 // picasso-layout/src/calculateClassName.ts if (layer.class_name) { className = layer.class_name; // 防止重名 const classLen = classNameIdList.filter((item) => item.indexOf(className) === 0).length; if (!!classLen) { className = `${className}-${classLen}` } classNameIdList.push(className); } return className; } export default function generatorClassName(layer, translateList, classNameIdList) { let className: string = ''; if (useFromUINamed(layer, translateList)) { return className; } className = getFromFeature(layer, classNameIdList); return className; }