188c88e8eSopenharmony_ciconst { DEVICE_LEVEL } = require('../../lite/lite-enum')
288c88e8eSopenharmony_ci
388c88e8eSopenharmony_ci/**
488c88e8eSopenharmony_ci * rules:
588c88e8eSopenharmony_ci * - abc-def -> abcDef
688c88e8eSopenharmony_ci * - -abc-def -> AbcDef
788c88e8eSopenharmony_ci *
888c88e8eSopenharmony_ci * @param  {string} value
988c88e8eSopenharmony_ci * @return {string}
1088c88e8eSopenharmony_ci */
1188c88e8eSopenharmony_ciexports.hyphenedToCamelCase = function hyphenedToCamelCase(value) {
1288c88e8eSopenharmony_ci  return value.replace(/(?<!-)-([a-z])/g, function(s, m) {
1388c88e8eSopenharmony_ci    return m.toUpperCase()
1488c88e8eSopenharmony_ci  })
1588c88e8eSopenharmony_ci}
1688c88e8eSopenharmony_ci
1788c88e8eSopenharmony_ci/**
1888c88e8eSopenharmony_ci * rules:
1988c88e8eSopenharmony_ci * - abcDef -> abc-def
2088c88e8eSopenharmony_ci * - AbcDef -> -abc-def
2188c88e8eSopenharmony_ci *
2288c88e8eSopenharmony_ci * @param  {string} value
2388c88e8eSopenharmony_ci * @return {string}
2488c88e8eSopenharmony_ci */
2588c88e8eSopenharmony_ciexports.camelCaseToHyphened = function camelCaseToHyphened(value) {
2688c88e8eSopenharmony_ci  return value.replace(/([A-Z])/g, function(s, m) {
2788c88e8eSopenharmony_ci    if (typeof m === 'string') {
2888c88e8eSopenharmony_ci      return '-' + m.toLowerCase()
2988c88e8eSopenharmony_ci    }
3088c88e8eSopenharmony_ci    return m
3188c88e8eSopenharmony_ci  })
3288c88e8eSopenharmony_ci}
3388c88e8eSopenharmony_ci
3488c88e8eSopenharmony_ciexports.isValidValue = function isValidValue(value) {
3588c88e8eSopenharmony_ci  return "number" == typeof value || "string" == typeof value
3688c88e8eSopenharmony_ci}
3788c88e8eSopenharmony_ci
3888c88e8eSopenharmony_ci/**
3988c88e8eSopenharmony_ci * rules:
4088c88e8eSopenharmony_ci * assign abbreviated values to expanded attributes
4188c88e8eSopenharmony_ci * margin:1px 2px -> marginTop:1px;marginRight:2px;marginBottom:1px;marginLeft:2px;
4288c88e8eSopenharmony_ci *
4388c88e8eSopenharmony_ci * @param  {obejct} object
4488c88e8eSopenharmony_ci * @param  {string} value
4588c88e8eSopenharmony_ci * @param  {obejct} spliceName
4688c88e8eSopenharmony_ci */
4788c88e8eSopenharmony_ciexports.splitAttr = function (object, value, spliceName) {
4888c88e8eSopenharmony_ci  const values = value.toString().trim().split(/(?<!\+|\-|\*|\/|\,)\s+(?!\+|\-|\*|\/|\,)/)
4988c88e8eSopenharmony_ci  if (values) {
5088c88e8eSopenharmony_ci    switch (values.length) {
5188c88e8eSopenharmony_ci      case 1:
5288c88e8eSopenharmony_ci        spliceName.forEach(function (item) {
5388c88e8eSopenharmony_ci          object[item] = values[0]
5488c88e8eSopenharmony_ci        })
5588c88e8eSopenharmony_ci        break
5688c88e8eSopenharmony_ci      case 2:
5788c88e8eSopenharmony_ci        spliceName.forEach(function (item, index) {
5888c88e8eSopenharmony_ci          object[item] = index % 2 ? values[1] : values[0]
5988c88e8eSopenharmony_ci        })
6088c88e8eSopenharmony_ci        break
6188c88e8eSopenharmony_ci      case 3:
6288c88e8eSopenharmony_ci        spliceName.forEach(function (item, index) {
6388c88e8eSopenharmony_ci          object[item] = index % 2 ? values[1] : values[index]
6488c88e8eSopenharmony_ci        })
6588c88e8eSopenharmony_ci        break
6688c88e8eSopenharmony_ci      default:
6788c88e8eSopenharmony_ci        spliceName.forEach(function (item, index) {
6888c88e8eSopenharmony_ci          object[item] = values[index]
6988c88e8eSopenharmony_ci        })
7088c88e8eSopenharmony_ci    }
7188c88e8eSopenharmony_ci  }
7288c88e8eSopenharmony_ci}
7388c88e8eSopenharmony_ci
7488c88e8eSopenharmony_ciconst RICH_SPLECIAL_ATTR = {
7588c88e8eSopenharmony_ci  MARGIN: 'margin',
7688c88e8eSopenharmony_ci  PADDING: 'padding',
7788c88e8eSopenharmony_ci  BORDER: 'border',
7888c88e8eSopenharmony_ci  BORDER_WIDTH: 'borderWidth',
7988c88e8eSopenharmony_ci  BORDER_COLOR: 'borderColor',
8088c88e8eSopenharmony_ci  BORDER_STYLE: 'borderStyle',
8188c88e8eSopenharmony_ci  BORDER_RADIUS: 'borderRadius',
8288c88e8eSopenharmony_ci  BORDER_BOTTOM: 'borderBottom',
8388c88e8eSopenharmony_ci  BORDER_RIGHT: 'borderRight',
8488c88e8eSopenharmony_ci  BORDER_LEFT: 'borderLeft',
8588c88e8eSopenharmony_ci  BORDER_TOP: 'borderTop',
8688c88e8eSopenharmony_ci  GRID_GAP: 'gridGap',
8788c88e8eSopenharmony_ci  BOX_SHADOW: 'boxShadow',
8888c88e8eSopenharmony_ci  ANIMATION: 'animation'
8988c88e8eSopenharmony_ci}
9088c88e8eSopenharmony_ci
9188c88e8eSopenharmony_ciconst LITE_SPLECIAL_ATTR = {
9288c88e8eSopenharmony_ci  MARGIN: 'margin',
9388c88e8eSopenharmony_ci  PADDING: 'padding',
9488c88e8eSopenharmony_ci  BORDER_WIDTH: 'borderWidth',
9588c88e8eSopenharmony_ci  BORDER_COLOR: 'borderColor'
9688c88e8eSopenharmony_ci}
9788c88e8eSopenharmony_ci
9888c88e8eSopenharmony_ci/**
9988c88e8eSopenharmony_ci * Special style attributes that need to be expanded
10088c88e8eSopenharmony_ci *
10188c88e8eSopenharmony_ci */
10288c88e8eSopenharmony_ciexports.SPLECIAL_ATTR = process.env.DEVICE_LEVEL === DEVICE_LEVEL.LITE ? LITE_SPLECIAL_ATTR : RICH_SPLECIAL_ATTR
103