188c88e8eSopenharmony_ci 288c88e8eSopenharmony_civar util = require('./util') 388c88e8eSopenharmony_civar OHOS_THEME_PROP_GROUPS = require('../../theme/ohosStyles'); 488c88e8eSopenharmony_ci 588c88e8eSopenharmony_ci// http://www.w3.org/TR/css3-color/#html4 688c88e8eSopenharmony_civar BASIC_COLOR_KEYWORDS = { 788c88e8eSopenharmony_ci black: '#000000', 888c88e8eSopenharmony_ci silver: '#C0C0C0', 988c88e8eSopenharmony_ci gray: '#808080', 1088c88e8eSopenharmony_ci white: '#FFFFFF', 1188c88e8eSopenharmony_ci maroon: '#800000', 1288c88e8eSopenharmony_ci red: '#FF0000', 1388c88e8eSopenharmony_ci purple: '#800080', 1488c88e8eSopenharmony_ci fuchsia: '#FF00FF', 1588c88e8eSopenharmony_ci green: '#008000', 1688c88e8eSopenharmony_ci lime: '#00FF00', 1788c88e8eSopenharmony_ci olive: '#808000', 1888c88e8eSopenharmony_ci yellow: '#FFFF00', 1988c88e8eSopenharmony_ci navy: '#000080', 2088c88e8eSopenharmony_ci blue: '#0000FF', 2188c88e8eSopenharmony_ci teal: '#008080', 2288c88e8eSopenharmony_ci aqua: '#00FFFF' 2388c88e8eSopenharmony_ci} 2488c88e8eSopenharmony_ci 2588c88e8eSopenharmony_ci// http://www.w3.org/TR/css3-color/#svg-color 2688c88e8eSopenharmony_civar EXTENDED_COLOR_KEYWORDS = { 2788c88e8eSopenharmony_ci aliceblue: '#F0F8FF', 2888c88e8eSopenharmony_ci antiquewhite: '#FAEBD7', 2988c88e8eSopenharmony_ci aqua: '#00FFFF', 3088c88e8eSopenharmony_ci aquamarine: '#7FFFD4', 3188c88e8eSopenharmony_ci azure: '#F0FFFF', 3288c88e8eSopenharmony_ci beige: '#F5F5DC', 3388c88e8eSopenharmony_ci bisque: '#FFE4C4', 3488c88e8eSopenharmony_ci black: '#000000', 3588c88e8eSopenharmony_ci blanchedalmond: '#FFEBCD', 3688c88e8eSopenharmony_ci blue: '#0000FF', 3788c88e8eSopenharmony_ci blueviolet: '#8A2BE2', 3888c88e8eSopenharmony_ci brown: '#A52A2A', 3988c88e8eSopenharmony_ci burlywood: '#DEB887', 4088c88e8eSopenharmony_ci cadetblue: '#5F9EA0', 4188c88e8eSopenharmony_ci chartreuse: '#7FFF00', 4288c88e8eSopenharmony_ci chocolate: '#D2691E', 4388c88e8eSopenharmony_ci coral: '#FF7F50', 4488c88e8eSopenharmony_ci cornflowerblue: '#6495ED', 4588c88e8eSopenharmony_ci cornsilk: '#FFF8DC', 4688c88e8eSopenharmony_ci crimson: '#DC143C', 4788c88e8eSopenharmony_ci cyan: '#00FFFF', 4888c88e8eSopenharmony_ci darkblue: '#00008B', 4988c88e8eSopenharmony_ci darkcyan: '#008B8B', 5088c88e8eSopenharmony_ci darkgoldenrod: '#B8860B', 5188c88e8eSopenharmony_ci darkgray: '#A9A9A9', 5288c88e8eSopenharmony_ci darkgreen: '#006400', 5388c88e8eSopenharmony_ci darkgrey: '#A9A9A9', 5488c88e8eSopenharmony_ci darkkhaki: '#BDB76B', 5588c88e8eSopenharmony_ci darkmagenta: '#8B008B', 5688c88e8eSopenharmony_ci darkolivegreen: '#556B2F', 5788c88e8eSopenharmony_ci darkorange: '#FF8C00', 5888c88e8eSopenharmony_ci darkorchid: '#9932CC', 5988c88e8eSopenharmony_ci darkred: '#8B0000', 6088c88e8eSopenharmony_ci darksalmon: '#E9967A', 6188c88e8eSopenharmony_ci darkseagreen: '#8FBC8F', 6288c88e8eSopenharmony_ci darkslateblue: '#483D8B', 6388c88e8eSopenharmony_ci darkslategray: '#2F4F4F', 6488c88e8eSopenharmony_ci darkslategrey: '#2F4F4F', 6588c88e8eSopenharmony_ci darkturquoise: '#00CED1', 6688c88e8eSopenharmony_ci darkviolet: '#9400D3', 6788c88e8eSopenharmony_ci deeppink: '#FF1493', 6888c88e8eSopenharmony_ci deepskyblue: '#00BFFF', 6988c88e8eSopenharmony_ci dimgray: '#696969', 7088c88e8eSopenharmony_ci dimgrey: '#696969', 7188c88e8eSopenharmony_ci dodgerblue: '#1E90FF', 7288c88e8eSopenharmony_ci firebrick: '#B22222', 7388c88e8eSopenharmony_ci floralwhite: '#FFFAF0', 7488c88e8eSopenharmony_ci forestgreen: '#228B22', 7588c88e8eSopenharmony_ci fuchsia: '#FF00FF', 7688c88e8eSopenharmony_ci gainsboro: '#DCDCDC', 7788c88e8eSopenharmony_ci ghostwhite: '#F8F8FF', 7888c88e8eSopenharmony_ci gold: '#FFD700', 7988c88e8eSopenharmony_ci goldenrod: '#DAA520', 8088c88e8eSopenharmony_ci gray: '#808080', 8188c88e8eSopenharmony_ci green: '#008000', 8288c88e8eSopenharmony_ci greenyellow: '#ADFF2F', 8388c88e8eSopenharmony_ci grey: '#808080', 8488c88e8eSopenharmony_ci honeydew: '#F0FFF0', 8588c88e8eSopenharmony_ci hotpink: '#FF69B4', 8688c88e8eSopenharmony_ci indianred: '#CD5C5C', 8788c88e8eSopenharmony_ci indigo: '#4B0082', 8888c88e8eSopenharmony_ci ivory: '#FFFFF0', 8988c88e8eSopenharmony_ci khaki: '#F0E68C', 9088c88e8eSopenharmony_ci lavender: '#E6E6FA', 9188c88e8eSopenharmony_ci lavenderblush: '#FFF0F5', 9288c88e8eSopenharmony_ci lawngreen: '#7CFC00', 9388c88e8eSopenharmony_ci lemonchiffon: '#FFFACD', 9488c88e8eSopenharmony_ci lightblue: '#ADD8E6', 9588c88e8eSopenharmony_ci lightcoral: '#F08080', 9688c88e8eSopenharmony_ci lightcyan: '#E0FFFF', 9788c88e8eSopenharmony_ci lightgoldenrodyellow: '#FAFAD2', 9888c88e8eSopenharmony_ci lightgray: '#D3D3D3', 9988c88e8eSopenharmony_ci lightgreen: '#90EE90', 10088c88e8eSopenharmony_ci lightgrey: '#D3D3D3', 10188c88e8eSopenharmony_ci lightpink: '#FFB6C1', 10288c88e8eSopenharmony_ci lightsalmon: '#FFA07A', 10388c88e8eSopenharmony_ci lightseagreen: '#20B2AA', 10488c88e8eSopenharmony_ci lightskyblue: '#87CEFA', 10588c88e8eSopenharmony_ci lightslategray: '#778899', 10688c88e8eSopenharmony_ci lightslategrey: '#778899', 10788c88e8eSopenharmony_ci lightsteelblue: '#B0C4DE', 10888c88e8eSopenharmony_ci lightyellow: '#FFFFE0', 10988c88e8eSopenharmony_ci lime: '#00FF00', 11088c88e8eSopenharmony_ci limegreen: '#32CD32', 11188c88e8eSopenharmony_ci linen: '#FAF0E6', 11288c88e8eSopenharmony_ci magenta: '#FF00FF', 11388c88e8eSopenharmony_ci maroon: '#800000', 11488c88e8eSopenharmony_ci mediumaquamarine: '#66CDAA', 11588c88e8eSopenharmony_ci mediumblue: '#0000CD', 11688c88e8eSopenharmony_ci mediumorchid: '#BA55D3', 11788c88e8eSopenharmony_ci mediumpurple: '#9370DB', 11888c88e8eSopenharmony_ci mediumseagreen: '#3CB371', 11988c88e8eSopenharmony_ci mediumslateblue: '#7B68EE', 12088c88e8eSopenharmony_ci mediumspringgreen: '#00FA9A', 12188c88e8eSopenharmony_ci mediumturquoise: '#48D1CC', 12288c88e8eSopenharmony_ci mediumvioletred: '#C71585', 12388c88e8eSopenharmony_ci midnightblue: '#191970', 12488c88e8eSopenharmony_ci mintcream: '#F5FFFA', 12588c88e8eSopenharmony_ci mistyrose: '#FFE4E1', 12688c88e8eSopenharmony_ci moccasin: '#FFE4B5', 12788c88e8eSopenharmony_ci navajowhite: '#FFDEAD', 12888c88e8eSopenharmony_ci navy: '#000080', 12988c88e8eSopenharmony_ci oldlace: '#FDF5E6', 13088c88e8eSopenharmony_ci olive: '#808000', 13188c88e8eSopenharmony_ci olivedrab: '#6B8E23', 13288c88e8eSopenharmony_ci orange: '#FFA500', 13388c88e8eSopenharmony_ci orangered: '#FF4500', 13488c88e8eSopenharmony_ci orchid: '#DA70D6', 13588c88e8eSopenharmony_ci palegoldenrod: '#EEE8AA', 13688c88e8eSopenharmony_ci palegreen: '#98FB98', 13788c88e8eSopenharmony_ci paleturquoise: '#AFEEEE', 13888c88e8eSopenharmony_ci palevioletred: '#DB7093', 13988c88e8eSopenharmony_ci papayawhip: '#FFEFD5', 14088c88e8eSopenharmony_ci peachpuff: '#FFDAB9', 14188c88e8eSopenharmony_ci peru: '#CD853F', 14288c88e8eSopenharmony_ci pink: '#FFC0CB', 14388c88e8eSopenharmony_ci plum: '#DDA0DD', 14488c88e8eSopenharmony_ci powderblue: '#B0E0E6', 14588c88e8eSopenharmony_ci purple: '#800080', 14688c88e8eSopenharmony_ci red: '#FF0000', 14788c88e8eSopenharmony_ci rosybrown: '#BC8F8F', 14888c88e8eSopenharmony_ci royalblue: '#4169E1', 14988c88e8eSopenharmony_ci rebeccapurple: '#663399', 15088c88e8eSopenharmony_ci saddlebrown: '#8B4513', 15188c88e8eSopenharmony_ci salmon: '#FA8072', 15288c88e8eSopenharmony_ci sandybrown: '#F4A460', 15388c88e8eSopenharmony_ci seagreen: '#2E8B57', 15488c88e8eSopenharmony_ci seashell: '#FFF5EE', 15588c88e8eSopenharmony_ci sienna: '#A0522D', 15688c88e8eSopenharmony_ci silver: '#C0C0C0', 15788c88e8eSopenharmony_ci skyblue: '#87CEEB', 15888c88e8eSopenharmony_ci slateblue: '#6A5ACD', 15988c88e8eSopenharmony_ci slategray: '#708090', 16088c88e8eSopenharmony_ci slategrey: '#708090', 16188c88e8eSopenharmony_ci snow: '#FFFAFA', 16288c88e8eSopenharmony_ci springgreen: '#00FF7F', 16388c88e8eSopenharmony_ci steelblue: '#4682B4', 16488c88e8eSopenharmony_ci tan: '#D2B48C', 16588c88e8eSopenharmony_ci teal: '#008080', 16688c88e8eSopenharmony_ci thistle: '#D8BFD8', 16788c88e8eSopenharmony_ci tomato: '#FF6347', 16888c88e8eSopenharmony_ci turquoise: '#40E0D0', 16988c88e8eSopenharmony_ci violet: '#EE82EE', 17088c88e8eSopenharmony_ci wheat: '#F5DEB3', 17188c88e8eSopenharmony_ci white: '#FFFFFF', 17288c88e8eSopenharmony_ci whitesmoke: '#F5F5F5', 17388c88e8eSopenharmony_ci yellow: '#FFFF00', 17488c88e8eSopenharmony_ci yellowgreen: '#9ACD32' 17588c88e8eSopenharmony_ci} 17688c88e8eSopenharmony_ci 17788c88e8eSopenharmony_civar DEFAULT_ANIMATION = { 17888c88e8eSopenharmony_ci animationDuration : "0ms", 17988c88e8eSopenharmony_ci animationDelay : "0ms", 18088c88e8eSopenharmony_ci animationDirection : 'normal', 18188c88e8eSopenharmony_ci animationTimingFunction : 'ease', 18288c88e8eSopenharmony_ci animationPlayState : 'running', 18388c88e8eSopenharmony_ci animationIterationCount : 1, 18488c88e8eSopenharmony_ci animationFillMode : 'none' 18588c88e8eSopenharmony_ci} 18688c88e8eSopenharmony_ci 18788c88e8eSopenharmony_civar LENGTH_REGEXP = /^[-+]?\d*\.?\d+(\S*)$/ 18888c88e8eSopenharmony_civar LINE_GRADIENT_ITEM_REGEXP = /^([0-9a-zA-Z-]+)\((.*)\)/ 18988c88e8eSopenharmony_civar LINE_GRADIENT_DIRECTION_REGEXP = /^\s*(to|bottom|right|left|top)|[-+]?[0-9]*\.?[0-9]+(.*)/ 19088c88e8eSopenharmony_civar LINE_GRADIENT_TO_DIRECTION_REGEXP = /(to|bottom|right|left|top)/ 19188c88e8eSopenharmony_civar ANGLE_REGEXP = /^[-+]?[0-9]*\.?[0-9]+(.*)/ 19288c88e8eSopenharmony_civar ARRAY_COLOR_STOP_REGEXP = /(rgba|rgb)\([0-9,.\spx%vpfp]+\)\s?[0-9-+px%vpfp]*|[#]?\w+\s?[0-9+-\spx%vpfp]*/gi 19388c88e8eSopenharmony_civar URL_REGEXP = /^url\(\s*['"]?\s*([^()]+?)\s*['"]?\s*\)$/ 19488c88e8eSopenharmony_civar NAME_REGEXP = /^[a-zA-Z_]+[a-zA-Z0-9-]*$/ 19588c88e8eSopenharmony_civar INT_REGEXP = /^[-+]?[0-9]+$/ 19688c88e8eSopenharmony_civar ID_REGEXP = /^\"@id\d+\"$/ 19788c88e8eSopenharmony_civar NORMAL_REGEXP = /^normal$/ 19888c88e8eSopenharmony_civar AUTO_REGEXP = /^auto$/ 19988c88e8eSopenharmony_civar DATE_REGEXP = /(^([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((1[02]|0?[13578])-([12][0-9]|3[01]|0?[1-9]))|((11|0?[469])-(30|[12][0-9]|0?[1-9]))|(0?2-(1[0-9]|2[0-8]|0?[1-9])))$)|(^(([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[13579][26])00))-(0?)2-29$)/ 20088c88e8eSopenharmony_civar TRANSFORM_REGEXP = /[0-9a-zA-Z]+\s*\(\s*[0-9(a-zA-Z-|%)\.]+\s*(,\s*[0-9(a-zA-Z-|%)\.]+)*\)/g 20188c88e8eSopenharmony_civar TRANSFORM_ITEM_REGEXP = /^([0-9a-zA-Z]+)\s*\((.*)\)$/ 20288c88e8eSopenharmony_civar FILTER_REGEXP = /^blur\(([1-9]\d*|0)(px|fp|vp)\)$/ 20388c88e8eSopenharmony_civar FILTER_PERCENTAGE_REGEXP = /^blur\(([1-9]?\d|100)%\)$/ 20488c88e8eSopenharmony_civar FILTER_STYLE_REGEXP = /^blur\(([1-9]?\d|100)%\)\s+[A-Za-z_]+$/ 20588c88e8eSopenharmony_civar SUPPORT_CSS_EXPRESSION = /calc\(|var\(\-\-/ 20688c88e8eSopenharmony_civar SUPPORT_VAR_EXPRESSION = /var\(\-\-/ 20788c88e8eSopenharmony_civar SUPPORT_CSS_UNIT = ['px', 'pt', 'wx', 'vp', 'fp'] 20888c88e8eSopenharmony_civar SUPPORT_CSS_TIME_UNIT = ['ms', 's'] 20988c88e8eSopenharmony_civar SUPPORT_CSS_PERCENTAGE_UNIT = ['px', '%', 'vp', 'fp'] 21088c88e8eSopenharmony_civar SUPPORT_CSS_GRID_UNIT = ['px', '%', 'fr', 'vp', 'fp'] 21188c88e8eSopenharmony_civar SUPPORT_CSS_TEXT_INDENT_UNIT = ['px', 'cm', '%', 'em', 'vp', 'fp'] 21288c88e8eSopenharmony_civar SUPPORT_CSS_ANGLE_UNIT = ["deg", "rad", "grad", "turn"] 21388c88e8eSopenharmony_civar logTypes = ["NOTE", "WARNING", "ERROR"] 21488c88e8eSopenharmony_ci 21588c88e8eSopenharmony_civar ANYTHING_VALIDATOR = function ANYTHING_VALIDATOR(v) { 21688c88e8eSopenharmony_ci v = (v || '').toString().trim() 21788c88e8eSopenharmony_ci return { value: v } 21888c88e8eSopenharmony_ci} 21988c88e8eSopenharmony_ci 22088c88e8eSopenharmony_ci/** 22188c88e8eSopenharmony_ci * the values below is valid 22288c88e8eSopenharmony_ci * - auto 22388c88e8eSopenharmony_ci * - number 22488c88e8eSopenharmony_ci * - number + 'px'|'%'|'vp'| 'fp' 22588c88e8eSopenharmony_ci * 22688c88e8eSopenharmony_ci * @param {string} v 22788c88e8eSopenharmony_ci * @return {function} a function to return 22888c88e8eSopenharmony_ci * - value: number|null 22988c88e8eSopenharmony_ci * - reason(k, v, result) 23088c88e8eSopenharmony_ci */ 23188c88e8eSopenharmony_civar AUTO_PERCENTAGE_LENGTH_VALIDATOR = function AUTO_PERCENTAGE_LENGTH_VALIDATOR(v) { 23288c88e8eSopenharmony_ci v = (v || '').toString().trim() 23388c88e8eSopenharmony_ci if (v.match(AUTO_REGEXP)) { 23488c88e8eSopenharmony_ci return { value: v } 23588c88e8eSopenharmony_ci } else if (v.match(ID_REGEXP)) { 23688c88e8eSopenharmony_ci return { value: v } 23788c88e8eSopenharmony_ci } else if (v.match(SUPPORT_CSS_EXPRESSION)) { 23888c88e8eSopenharmony_ci return { value: v } 23988c88e8eSopenharmony_ci } else { 24088c88e8eSopenharmony_ci return LENGTH(v, SUPPORT_CSS_PERCENTAGE_UNIT) 24188c88e8eSopenharmony_ci } 24288c88e8eSopenharmony_ci} 24388c88e8eSopenharmony_ci 24488c88e8eSopenharmony_ci/** 24588c88e8eSopenharmony_ci * the values below is valid 24688c88e8eSopenharmony_ci * - number 24788c88e8eSopenharmony_ci * - number + 'px'|'%'|'vp'| 'fp' 24888c88e8eSopenharmony_ci * 24988c88e8eSopenharmony_ci * @param {string} v 25088c88e8eSopenharmony_ci * @return {function} a function to return 25188c88e8eSopenharmony_ci * - value: number|null 25288c88e8eSopenharmony_ci * - reason(k, v, result) 25388c88e8eSopenharmony_ci */ 25488c88e8eSopenharmony_civar PERCENTAGE_LENGTH_VALIDATOR = function PERCENTAGE_LENGTH_VALIDATOR(v) { 25588c88e8eSopenharmony_ci v = (v || '').toString().trim() 25688c88e8eSopenharmony_ci if (v.match(ID_REGEXP)) { 25788c88e8eSopenharmony_ci return { value: v } 25888c88e8eSopenharmony_ci } else if (v.match(SUPPORT_CSS_EXPRESSION)) { 25988c88e8eSopenharmony_ci return { value: v } 26088c88e8eSopenharmony_ci } else { 26188c88e8eSopenharmony_ci return LENGTH(v, SUPPORT_CSS_PERCENTAGE_UNIT) 26288c88e8eSopenharmony_ci } 26388c88e8eSopenharmony_ci} 26488c88e8eSopenharmony_ci 26588c88e8eSopenharmony_ci/** 26688c88e8eSopenharmony_ci * the values below is valid 26788c88e8eSopenharmony_ci * - number 26888c88e8eSopenharmony_ci * - number + 'px' 26988c88e8eSopenharmony_ci * 27088c88e8eSopenharmony_ci * @param {string} v 27188c88e8eSopenharmony_ci * @return {function} a function to return 27288c88e8eSopenharmony_ci * - value: number|null 27388c88e8eSopenharmony_ci * - reason(k, v, result) 27488c88e8eSopenharmony_ci */ 27588c88e8eSopenharmony_civar LENGTH_VALIDATOR = function LENGTH_VALIDATOR(v) { 27688c88e8eSopenharmony_ci v = (v || '').toString().trim() 27788c88e8eSopenharmony_ci if (v.match(SUPPORT_CSS_EXPRESSION)) { 27888c88e8eSopenharmony_ci return { value: v } 27988c88e8eSopenharmony_ci } else if (v.match(ID_REGEXP)) { 28088c88e8eSopenharmony_ci return { value: v } 28188c88e8eSopenharmony_ci } else { 28288c88e8eSopenharmony_ci return LENGTH(v, SUPPORT_CSS_UNIT) 28388c88e8eSopenharmony_ci } 28488c88e8eSopenharmony_ci} 28588c88e8eSopenharmony_ci 28688c88e8eSopenharmony_civar LENGTH = function LENGTH(v, SUPPORT_UNIT) { 28788c88e8eSopenharmony_ci v = (v || '').toString().trim() 28888c88e8eSopenharmony_ci var match = v.match(LENGTH_REGEXP) 28988c88e8eSopenharmony_ci 29088c88e8eSopenharmony_ci if (match) { 29188c88e8eSopenharmony_ci var unit = match[1] 29288c88e8eSopenharmony_ci if (!unit) { 29388c88e8eSopenharmony_ci return v === '0' ? { value: parseFloat(v) + SUPPORT_UNIT[0] } : 29488c88e8eSopenharmony_ci { 29588c88e8eSopenharmony_ci value: parseFloat(v) + SUPPORT_UNIT[0], 29688c88e8eSopenharmony_ci reason: function(k, v) { 29788c88e8eSopenharmony_ci return 'WARNING: No unit is specified for the `' + util.camelCaseToHyphened(k) + 29888c88e8eSopenharmony_ci '` attribute. The default unit is ' + SUPPORT_UNIT[0] 29988c88e8eSopenharmony_ci } 30088c88e8eSopenharmony_ci } 30188c88e8eSopenharmony_ci } else if (SUPPORT_UNIT.indexOf(unit) > -1) { 30288c88e8eSopenharmony_ci return { value: v } 30388c88e8eSopenharmony_ci } else { 30488c88e8eSopenharmony_ci return { 30588c88e8eSopenharmony_ci value: parseFloat(v) + SUPPORT_UNIT[0], 30688c88e8eSopenharmony_ci reason: function reason(k, v, result) { 30788c88e8eSopenharmony_ci return 'ERROR: The `' + k + '` attribute does not support `' + unit + 30888c88e8eSopenharmony_ci '`. The default unit is ' + SUPPORT_UNIT[0] 30988c88e8eSopenharmony_ci } 31088c88e8eSopenharmony_ci } 31188c88e8eSopenharmony_ci } 31288c88e8eSopenharmony_ci } 31388c88e8eSopenharmony_ci 31488c88e8eSopenharmony_ci if (v.indexOf('@') >= 0) { 31588c88e8eSopenharmony_ci let result 31688c88e8eSopenharmony_ci // target format "@sys.float.id_sys_length" or '@sys.float.id_sys_length' 31788c88e8eSopenharmony_ci let SysResourceTypeRefReg = /['"]\s*@sys\.float\.(?<resName>\w+)\s*['"]/ 31888c88e8eSopenharmony_ci result = SysResourceTypeRefReg.exec(v) 31988c88e8eSopenharmony_ci if (result) { 32088c88e8eSopenharmony_ci const resourceName = result.groups['resName'] 32188c88e8eSopenharmony_ci if (resourceName && OHOS_THEME_PROP_GROUPS[resourceName]) { 32288c88e8eSopenharmony_ci return { value: "@sys.float." + OHOS_THEME_PROP_GROUPS[resourceName] } 32388c88e8eSopenharmony_ci } 32488c88e8eSopenharmony_ci } 32588c88e8eSopenharmony_ci // target format "@app.float.developer_defined_length" or '@app.float.developer_defined_length' 32688c88e8eSopenharmony_ci let AppResourceTypeRefReg = /['"]\s*@app\.float\.(?<resName>\w+)\s*['"]/ 32788c88e8eSopenharmony_ci result = AppResourceTypeRefReg.exec(v) 32888c88e8eSopenharmony_ci if (result) { 32988c88e8eSopenharmony_ci const resourceName = result.groups['resName'] 33088c88e8eSopenharmony_ci if (resourceName) { 33188c88e8eSopenharmony_ci return { value: "@app.float." + resourceName} 33288c88e8eSopenharmony_ci } 33388c88e8eSopenharmony_ci } 33488c88e8eSopenharmony_ci // target format "@id_sys_length" or '@id_sys_length' or @id_sys_length 33588c88e8eSopenharmony_ci let ResourceRefReg = /['"]?\s*@(?<resName>\w+)\s*['"]?/ 33688c88e8eSopenharmony_ci result = ResourceRefReg.exec(v) 33788c88e8eSopenharmony_ci if (result) { 33888c88e8eSopenharmony_ci const resourceName = result.groups['resName'] 33988c88e8eSopenharmony_ci if (resourceName && OHOS_THEME_PROP_GROUPS[resourceName]) { 34088c88e8eSopenharmony_ci return { value: "@ohos_id_" + OHOS_THEME_PROP_GROUPS[resourceName] } 34188c88e8eSopenharmony_ci } 34288c88e8eSopenharmony_ci } 34388c88e8eSopenharmony_ci } 34488c88e8eSopenharmony_ci 34588c88e8eSopenharmony_ci return { 34688c88e8eSopenharmony_ci value: null, 34788c88e8eSopenharmony_ci reason: function reason(k, v, result) { 34888c88e8eSopenharmony_ci return 'ERROR: The `' + util.camelCaseToHyphened(k) + '` attribute does not support the `' + 34988c88e8eSopenharmony_ci v + '` value (only numbers are supported).' 35088c88e8eSopenharmony_ci } 35188c88e8eSopenharmony_ci } 35288c88e8eSopenharmony_ci} 35388c88e8eSopenharmony_ci 35488c88e8eSopenharmony_civar TEXT_INDENT_VALIDATOR = function TEXT_INDENT_VALIDATOR(v) { 35588c88e8eSopenharmony_ci return LENGTH(v, SUPPORT_CSS_TEXT_INDENT_UNIT) 35688c88e8eSopenharmony_ci} 35788c88e8eSopenharmony_ci 35888c88e8eSopenharmony_civar TEXT_LINE_HEIGHT_VALIDATOR = function TEXT_LINE_HEIGHT_VALIDATOR(v) { 35988c88e8eSopenharmony_ci v = (v || '').toString().trim() 36088c88e8eSopenharmony_ci 36188c88e8eSopenharmony_ci if (v.match(NORMAL_REGEXP)) { 36288c88e8eSopenharmony_ci return { value: v } 36388c88e8eSopenharmony_ci } else { 36488c88e8eSopenharmony_ci return LENGTH_VALIDATOR(v) 36588c88e8eSopenharmony_ci } 36688c88e8eSopenharmony_ci} 36788c88e8eSopenharmony_ci 36888c88e8eSopenharmony_ci/** 36988c88e8eSopenharmony_ci * the values below is valid 37088c88e8eSopenharmony_ci * - number 37188c88e8eSopenharmony_ci * - number + 'ms'|'s' 37288c88e8eSopenharmony_ci * 37388c88e8eSopenharmony_ci * @param {string} v 37488c88e8eSopenharmony_ci * @return {function} a function to return 37588c88e8eSopenharmony_ci * - value: number|null 37688c88e8eSopenharmony_ci * - reason(k, v, result) 37788c88e8eSopenharmony_ci */ 37888c88e8eSopenharmony_civar TIME_VALIDATOR = function TIME_VALIDATOR(v) { 37988c88e8eSopenharmony_ci return LENGTH(v, SUPPORT_CSS_TIME_UNIT) 38088c88e8eSopenharmony_ci} 38188c88e8eSopenharmony_ci 38288c88e8eSopenharmony_ci/** 38388c88e8eSopenharmony_ci * the values below is valid 38488c88e8eSopenharmony_ci * - number {1,4} 38588c88e8eSopenharmony_ci * - number + 'px' {1,4} 38688c88e8eSopenharmony_ci * 38788c88e8eSopenharmony_ci * @param {string} v 38888c88e8eSopenharmony_ci * @return {function} a function to return 38988c88e8eSopenharmony_ci * - value: number|null 39088c88e8eSopenharmony_ci * - reason(k, v, result) 39188c88e8eSopenharmony_ci */ 39288c88e8eSopenharmony_civar SHORTHAND_PERCENTAGE_LENGTH_VALIDATOR = function SHORTHAND_PERCENTAGE_LENGTH_VALIDATOR(v) { 39388c88e8eSopenharmony_ci v = (v || '').toString().trim() 39488c88e8eSopenharmony_ci let rule = PERCENTAGE_LENGTH_VALIDATOR 39588c88e8eSopenharmony_ci return SHORTHAND_VALIDATOR(v, rule) 39688c88e8eSopenharmony_ci} 39788c88e8eSopenharmony_ci 39888c88e8eSopenharmony_civar SHORTHAND_AUTO_PERCENTAGE_LENGTH_VALIDATOR = function SHORTHAND_AUTO_PERCENTAGE_LENGTH_VALIDATOR(v) { 39988c88e8eSopenharmony_ci v = (v || '').toString().trim() 40088c88e8eSopenharmony_ci let rule = AUTO_PERCENTAGE_LENGTH_VALIDATOR 40188c88e8eSopenharmony_ci return SHORTHAND_VALIDATOR(v, rule) 40288c88e8eSopenharmony_ci} 40388c88e8eSopenharmony_ci 40488c88e8eSopenharmony_civar SHORTHAND_LENGTH_VALIDATOR = function SHORTHAND_LENGTH_VALIDATOR(v) { 40588c88e8eSopenharmony_ci v = (v || '').toString().trim() 40688c88e8eSopenharmony_ci let rule = LENGTH_VALIDATOR 40788c88e8eSopenharmony_ci return SHORTHAND_VALIDATOR(v, rule) 40888c88e8eSopenharmony_ci} 40988c88e8eSopenharmony_ci 41088c88e8eSopenharmony_civar ARRAY_LENGTH_VALIDATOR = function ARRAY_LENGTH_VALIDATOR(v) { 41188c88e8eSopenharmony_ci v = (v || '').toString().trim().replace(/,/g, ' ') 41288c88e8eSopenharmony_ci var isArray = true 41388c88e8eSopenharmony_ci return SHORTHAND_VALIDATOR(v, LENGTH_VALIDATOR, isArray) 41488c88e8eSopenharmony_ci} 41588c88e8eSopenharmony_ci 41688c88e8eSopenharmony_ci/** 41788c88e8eSopenharmony_ci * the values below is valid 41888c88e8eSopenharmony_ci * - hex color value (#xxxxxx or #xxx) 41988c88e8eSopenharmony_ci * - basic and extended color keywords in CSS spec 42088c88e8eSopenharmony_ci * - expression 42188c88e8eSopenharmony_ci * 42288c88e8eSopenharmony_ci * @param {string} v 42388c88e8eSopenharmony_ci * @return {function} a function to return 42488c88e8eSopenharmony_ci * - value: string|null 42588c88e8eSopenharmony_ci * - reason(k, v, result) 42688c88e8eSopenharmony_ci */ 42788c88e8eSopenharmony_civar COLOR_VAR_VALIDATOR = function COLOR_VAR_VALIDATOR(v) { 42888c88e8eSopenharmony_ci v = (v || '').toString().trim() 42988c88e8eSopenharmony_ci if (v.match(SUPPORT_VAR_EXPRESSION)) { 43088c88e8eSopenharmony_ci return { value: v } 43188c88e8eSopenharmony_ci } else { 43288c88e8eSopenharmony_ci return COLOR_VALIDATOR(v) 43388c88e8eSopenharmony_ci } 43488c88e8eSopenharmony_ci} 43588c88e8eSopenharmony_ci 43688c88e8eSopenharmony_ci/** 43788c88e8eSopenharmony_ci * the values below is valid 43888c88e8eSopenharmony_ci * - hex color value (#xxxxxx or #xxx) 43988c88e8eSopenharmony_ci * - basic and extended color keywords in CSS spec 44088c88e8eSopenharmony_ci * 44188c88e8eSopenharmony_ci * @param {string} v 44288c88e8eSopenharmony_ci * @return {function} a function to return 44388c88e8eSopenharmony_ci * - value: string|null 44488c88e8eSopenharmony_ci * - reason(k, v, result) 44588c88e8eSopenharmony_ci */ 44688c88e8eSopenharmony_civar COLOR_VALIDATOR = function COLOR_VALIDATOR(v) { 44788c88e8eSopenharmony_ci v = (v || '').toString().trim() 44888c88e8eSopenharmony_ci 44988c88e8eSopenharmony_ci if (v.indexOf('linear-gradient') >= 0) { 45088c88e8eSopenharmony_ci let result = { 45188c88e8eSopenharmony_ci values: [] 45288c88e8eSopenharmony_ci } 45388c88e8eSopenharmony_ci let temp = LINEAR_GRADIENT_VALIDATOR(v) 45488c88e8eSopenharmony_ci if (util.isValidValue(temp.value)) { 45588c88e8eSopenharmony_ci let tempValue = JSON.parse(temp.value) 45688c88e8eSopenharmony_ci result.values.push(tempValue) 45788c88e8eSopenharmony_ci return { value: JSON.stringify(result) } 45888c88e8eSopenharmony_ci } else { 45988c88e8eSopenharmony_ci return temp 46088c88e8eSopenharmony_ci } 46188c88e8eSopenharmony_ci } 46288c88e8eSopenharmony_ci 46388c88e8eSopenharmony_ci if (v.match(ID_REGEXP)) { 46488c88e8eSopenharmony_ci return { value: v } 46588c88e8eSopenharmony_ci } 46688c88e8eSopenharmony_ci 46788c88e8eSopenharmony_ci if (v.indexOf('@') >= 0) { 46888c88e8eSopenharmony_ci let result 46988c88e8eSopenharmony_ci // target format "@sys.color.id_color_background" or '@sys.color.id_color_background' 47088c88e8eSopenharmony_ci let SysResourceTypeRefReg = /['"]\s*@sys\.color\.(?<resName>\w+)\s*['"]/ 47188c88e8eSopenharmony_ci result = SysResourceTypeRefReg.exec(v) 47288c88e8eSopenharmony_ci if (result) { 47388c88e8eSopenharmony_ci const resourceName = result.groups['resName'] 47488c88e8eSopenharmony_ci if (resourceName && OHOS_THEME_PROP_GROUPS[resourceName]) { 47588c88e8eSopenharmony_ci return { value: "@sys.color." + OHOS_THEME_PROP_GROUPS[resourceName] } 47688c88e8eSopenharmony_ci } 47788c88e8eSopenharmony_ci } 47888c88e8eSopenharmony_ci // target format "@app.color.developer_defined_color" or '@app.color.developer_defined_color' 47988c88e8eSopenharmony_ci let AppResourceTypeRefReg = /['"]\s*@app\.color\.(?<resName>\w+)\s*['"]/ 48088c88e8eSopenharmony_ci result = AppResourceTypeRefReg.exec(v) 48188c88e8eSopenharmony_ci if (result) { 48288c88e8eSopenharmony_ci const resourceName = result.groups['resName'] 48388c88e8eSopenharmony_ci if (resourceName) { 48488c88e8eSopenharmony_ci return { value: "@app.color." + resourceName} 48588c88e8eSopenharmony_ci } 48688c88e8eSopenharmony_ci } 48788c88e8eSopenharmony_ci // target format "@id_color_background" or '@id_color_background' or @id_color_background 48888c88e8eSopenharmony_ci let ResourceRefReg = /['"]?\s*@(?<resName>\w+)\s*['"]?/ 48988c88e8eSopenharmony_ci result = ResourceRefReg.exec(v) 49088c88e8eSopenharmony_ci if (result) { 49188c88e8eSopenharmony_ci const resourceName = result.groups['resName'] 49288c88e8eSopenharmony_ci if (resourceName && OHOS_THEME_PROP_GROUPS[resourceName]) { 49388c88e8eSopenharmony_ci return { value: "@ohos_id_" + OHOS_THEME_PROP_GROUPS[resourceName] } 49488c88e8eSopenharmony_ci } 49588c88e8eSopenharmony_ci } 49688c88e8eSopenharmony_ci } 49788c88e8eSopenharmony_ci 49888c88e8eSopenharmony_ci if (v.match(/^#([0-9a-fA-F]{6}|[0-9a-fA-F]{8})$/)) { 49988c88e8eSopenharmony_ci return { value: v } 50088c88e8eSopenharmony_ci } 50188c88e8eSopenharmony_ci 50288c88e8eSopenharmony_ci if (v.match(/^#[0-9a-fA-F]{3}$/)) { 50388c88e8eSopenharmony_ci return { 50488c88e8eSopenharmony_ci value: '#' + v[1] + v[1] + v[2] + v[2] + v[3] + v[3], 50588c88e8eSopenharmony_ci reason: function reason(k, v, result) { 50688c88e8eSopenharmony_ci return 'NOTE: Attribute value `' + v + '` is automatically fixed to `' + result + '`.' 50788c88e8eSopenharmony_ci } 50888c88e8eSopenharmony_ci } 50988c88e8eSopenharmony_ci } 51088c88e8eSopenharmony_ci 51188c88e8eSopenharmony_ci if (EXTENDED_COLOR_KEYWORDS[v]) { 51288c88e8eSopenharmony_ci return { 51388c88e8eSopenharmony_ci value: EXTENDED_COLOR_KEYWORDS[v], 51488c88e8eSopenharmony_ci reason: function reason(k, v, result) { 51588c88e8eSopenharmony_ci return 'NOTE: Attribute value `' + v + '` is automatically fixed to `' + result + '`.' 51688c88e8eSopenharmony_ci } 51788c88e8eSopenharmony_ci } 51888c88e8eSopenharmony_ci } 51988c88e8eSopenharmony_ci 52088c88e8eSopenharmony_ci if (v === 'transparent' || v === 'none') { 52188c88e8eSopenharmony_ci return { value: 'rgba(0,0,0,0)' } 52288c88e8eSopenharmony_ci } 52388c88e8eSopenharmony_ci 52488c88e8eSopenharmony_ci const returnColorReg = COLOR_REG(v) 52588c88e8eSopenharmony_ci if (returnColorReg.value !== null) { 52688c88e8eSopenharmony_ci return returnColorReg 52788c88e8eSopenharmony_ci } 52888c88e8eSopenharmony_ci 52988c88e8eSopenharmony_ci return { 53088c88e8eSopenharmony_ci value: null, 53188c88e8eSopenharmony_ci reason: function reason(k, v, result) { 53288c88e8eSopenharmony_ci return 'ERROR: Value `' + v + '` is invalid for the `' + util.camelCaseToHyphened(k) + '` attribute.' 53388c88e8eSopenharmony_ci } 53488c88e8eSopenharmony_ci } 53588c88e8eSopenharmony_ci} 53688c88e8eSopenharmony_ci 53788c88e8eSopenharmony_civar COLOR_REG = function COLOR_REG(v) { 53888c88e8eSopenharmony_ci let arrColor, r, g, b, a 53988c88e8eSopenharmony_ci const RGB_REGEXP = /^rgb\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*\)$/gi 54088c88e8eSopenharmony_ci const RGBA_REGEXP = /^rgba\(\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d*\.?\d+)\s*\)$/gi 54188c88e8eSopenharmony_ci const HSL_REGEXP = /^hsl\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*\)$/gi 54288c88e8eSopenharmony_ci const HSLA_REGEXP = /^hsla\(\s*(\d+)\s*,\s*(\d+)%\s*,\s*(\d+)%\s*,\s*(\d*\.?\d+)\s*\)$/gi 54388c88e8eSopenharmony_ci if (arrColor = RGB_REGEXP.exec(v)) { 54488c88e8eSopenharmony_ci r = parseInt(arrColor[1]) 54588c88e8eSopenharmony_ci g = parseInt(arrColor[2]) 54688c88e8eSopenharmony_ci b = parseInt(arrColor[3]) 54788c88e8eSopenharmony_ci if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255) { 54888c88e8eSopenharmony_ci return { value: 'rgb(' + [r, g, b].join(',') + ')' } 54988c88e8eSopenharmony_ci } 55088c88e8eSopenharmony_ci } 55188c88e8eSopenharmony_ci if (arrColor = RGBA_REGEXP.exec(v)) { 55288c88e8eSopenharmony_ci r = parseInt(arrColor[1]) 55388c88e8eSopenharmony_ci g = parseInt(arrColor[2]) 55488c88e8eSopenharmony_ci b = parseInt(arrColor[3]) 55588c88e8eSopenharmony_ci a = parseFloat(arrColor[4]) 55688c88e8eSopenharmony_ci if (r >= 0 && r <= 255 && g >= 0 && g <= 255 && b >= 0 && b <= 255 && a >= 0 && a <= 1) { 55788c88e8eSopenharmony_ci return { value: 'rgba(' + [r, g, b, a].join(',') + ')' } 55888c88e8eSopenharmony_ci } 55988c88e8eSopenharmony_ci } 56088c88e8eSopenharmony_ci if (arrColor = HSL_REGEXP.exec(v)) { 56188c88e8eSopenharmony_ci r = arrColor[1] 56288c88e8eSopenharmony_ci g = arrColor[2] 56388c88e8eSopenharmony_ci b = arrColor[3] 56488c88e8eSopenharmony_ci if (r >= 0 && r <= 360 && g >= 0 && g <= 100 && b >= 0 && b <= 100) { 56588c88e8eSopenharmony_ci return { value: 'hsl(' + [r, g+'%', b+'%'].join(',') + ')' } 56688c88e8eSopenharmony_ci } 56788c88e8eSopenharmony_ci } 56888c88e8eSopenharmony_ci if (arrColor = HSLA_REGEXP.exec(v)) { 56988c88e8eSopenharmony_ci r = arrColor[1] 57088c88e8eSopenharmony_ci g = arrColor[2] 57188c88e8eSopenharmony_ci b = arrColor[3] 57288c88e8eSopenharmony_ci a = arrColor[4] 57388c88e8eSopenharmony_ci if (r >= 0 && r <= 360 && g >= 0 && g <= 100 && b >= 0 && b <= 100 && a >= 0 && a <= 1) { 57488c88e8eSopenharmony_ci return { value: 'hsla(' + [r, g+'%', b+'%', a].join(',') + ')' } 57588c88e8eSopenharmony_ci } 57688c88e8eSopenharmony_ci } 57788c88e8eSopenharmony_ci 57888c88e8eSopenharmony_ci return { value: null } 57988c88e8eSopenharmony_ci} 58088c88e8eSopenharmony_ci 58188c88e8eSopenharmony_ci/** 58288c88e8eSopenharmony_ci * the values below is valid 58388c88e8eSopenharmony_ci * - color {1,4} 58488c88e8eSopenharmony_ci * 58588c88e8eSopenharmony_ci * @param {string} v 58688c88e8eSopenharmony_ci * @return {function} a function to return 58788c88e8eSopenharmony_ci * - value: color|null 58888c88e8eSopenharmony_ci * - reason(k, v, result) 58988c88e8eSopenharmony_ci */ 59088c88e8eSopenharmony_civar SHORTHAND_COLOR_VALIDATOR = function SHORTHAND_COLOR_VALIDATOR(v) { 59188c88e8eSopenharmony_ci v = (v || '').toString().trim() 59288c88e8eSopenharmony_ci v = v.replace(/\s*,\s+/g, ',') 59388c88e8eSopenharmony_ci return SHORTHAND_VALIDATOR(v, COLOR_VAR_VALIDATOR) 59488c88e8eSopenharmony_ci} 59588c88e8eSopenharmony_ci 59688c88e8eSopenharmony_civar ARRAY_COLOR_VALIDATOR = function ARRAY_COLOR_VALIDATOR(v) { 59788c88e8eSopenharmony_ci v = (v || '').toString().trim() 59888c88e8eSopenharmony_ci var isArray = true 59988c88e8eSopenharmony_ci return SHORTHAND_VALIDATOR(v.replace(/,/g, ' '), COLOR_VAR_VALIDATOR, isArray) 60088c88e8eSopenharmony_ci} 60188c88e8eSopenharmony_ci 60288c88e8eSopenharmony_civar SHORTHAND_STYLE_VALIDATOR = function SHORTHAND_STYLE_VALIDATOR(v) { 60388c88e8eSopenharmony_ci v = (v || '').toString().trim() 60488c88e8eSopenharmony_ci return SHORTHAND_VALIDATOR(v, STYLE_VALIDATOR) 60588c88e8eSopenharmony_ci} 60688c88e8eSopenharmony_ci 60788c88e8eSopenharmony_civar STYLE_VALIDATOR = function STYLE_VALIDATOR(v) { 60888c88e8eSopenharmony_ci const styleList = ["solid", "dashed", "dotted"] 60988c88e8eSopenharmony_ci v = (v || '').toString().trim() 61088c88e8eSopenharmony_ci if (styleList.includes(v)) { 61188c88e8eSopenharmony_ci return { value:v } 61288c88e8eSopenharmony_ci } else { 61388c88e8eSopenharmony_ci return { 61488c88e8eSopenharmony_ci value: null, 61588c88e8eSopenharmony_ci reason: function (k,v) { 61688c88e8eSopenharmony_ci return 'ERROR: The `' + util.camelCaseToHyphened(k) + '` attribute does not support value `' + 61788c88e8eSopenharmony_ci v + '` (the support value is `' + styleList.join('`|`') + '`).' 61888c88e8eSopenharmony_ci } 61988c88e8eSopenharmony_ci } 62088c88e8eSopenharmony_ci } 62188c88e8eSopenharmony_ci} 62288c88e8eSopenharmony_ci 62388c88e8eSopenharmony_civar SHORTHAND_VALIDATOR = function SHORTHAND_VALIDATOR(v, validateFunction, isArray) { 62488c88e8eSopenharmony_ci v = (v || '').toString().trim() 62588c88e8eSopenharmony_ci let value = [] 62688c88e8eSopenharmony_ci let reason = [] 62788c88e8eSopenharmony_ci let results = v.split(/(?<!\+|\-|\*|\/|\,)\s+(?!\+|\-|\*|\/|\,)/).map(validateFunction) 62888c88e8eSopenharmony_ci for (let i = 0; i < results.length; ++i) { 62988c88e8eSopenharmony_ci let res = results[i] 63088c88e8eSopenharmony_ci if (!res.value) { 63188c88e8eSopenharmony_ci value = null 63288c88e8eSopenharmony_ci reason = res.reason 63388c88e8eSopenharmony_ci break 63488c88e8eSopenharmony_ci } 63588c88e8eSopenharmony_ci value.push(res.value) 63688c88e8eSopenharmony_ci if (res.reason) { 63788c88e8eSopenharmony_ci reason.push(res.reason) 63888c88e8eSopenharmony_ci } 63988c88e8eSopenharmony_ci } 64088c88e8eSopenharmony_ci 64188c88e8eSopenharmony_ci if (!value) { 64288c88e8eSopenharmony_ci return { 64388c88e8eSopenharmony_ci value: value, 64488c88e8eSopenharmony_ci reason: reason 64588c88e8eSopenharmony_ci } 64688c88e8eSopenharmony_ci } 64788c88e8eSopenharmony_ci else { 64888c88e8eSopenharmony_ci return { 64988c88e8eSopenharmony_ci value: isArray ? value.join(',') : value.join(' '), 65088c88e8eSopenharmony_ci reason: reason.length > 0 ? function (k, v, result) { 65188c88e8eSopenharmony_ci return reason.map(function (res) { 65288c88e8eSopenharmony_ci if (typeof res === 'function') { 65388c88e8eSopenharmony_ci return res(k, v, result) 65488c88e8eSopenharmony_ci } 65588c88e8eSopenharmony_ci }).join('\n') 65688c88e8eSopenharmony_ci } : null 65788c88e8eSopenharmony_ci } 65888c88e8eSopenharmony_ci } 65988c88e8eSopenharmony_ci} 66088c88e8eSopenharmony_ci 66188c88e8eSopenharmony_civar BORDER_VALIDATOR = function BORDER_VALIDATOR (value, name) { 66288c88e8eSopenharmony_ci value = (value || '').toString().trim(); 66388c88e8eSopenharmony_ci let values = ''; 66488c88e8eSopenharmony_ci const colorAttribute = value.match(/\(.*?\)/g); 66588c88e8eSopenharmony_ci if (colorAttribute && colorAttribute.length === 1) { 66688c88e8eSopenharmony_ci values = value.replace(colorAttribute[0], colorAttribute[0].replace(/\s+/g, '')).split(/\s+/); 66788c88e8eSopenharmony_ci } else { 66888c88e8eSopenharmony_ci values = value.split(/\s+/); 66988c88e8eSopenharmony_ci } 67088c88e8eSopenharmony_ci const res = [] 67188c88e8eSopenharmony_ci let hasError = false 67288c88e8eSopenharmony_ci const reasons = [] 67388c88e8eSopenharmony_ci let index = 0 67488c88e8eSopenharmony_ci const order = [] 67588c88e8eSopenharmony_ci let validatorResult 67688c88e8eSopenharmony_ci const rules = [ 67788c88e8eSopenharmony_ci { 67888c88e8eSopenharmony_ci match (item) { return LENGTH_VALIDATOR(item).value }, 67988c88e8eSopenharmony_ci action (item) { 68088c88e8eSopenharmony_ci validatorResult = LENGTH_VALIDATOR(item) 68188c88e8eSopenharmony_ci order.push(0) 68288c88e8eSopenharmony_ci res.push({ 68388c88e8eSopenharmony_ci value: validatorResult.value, 68488c88e8eSopenharmony_ci type: 'Width' 68588c88e8eSopenharmony_ci }) 68688c88e8eSopenharmony_ci } 68788c88e8eSopenharmony_ci }, 68888c88e8eSopenharmony_ci { 68988c88e8eSopenharmony_ci match (item) { return validate('borderStyle', item).value }, 69088c88e8eSopenharmony_ci action (item) { 69188c88e8eSopenharmony_ci validatorResult = validate('borderStyle', item) 69288c88e8eSopenharmony_ci order.push(1) 69388c88e8eSopenharmony_ci res.push({ 69488c88e8eSopenharmony_ci value: validatorResult.value, 69588c88e8eSopenharmony_ci type: 'Style' 69688c88e8eSopenharmony_ci }) 69788c88e8eSopenharmony_ci } 69888c88e8eSopenharmony_ci }, 69988c88e8eSopenharmony_ci { 70088c88e8eSopenharmony_ci match (item) { return COLOR_VAR_VALIDATOR(item).value }, 70188c88e8eSopenharmony_ci action (item) { 70288c88e8eSopenharmony_ci validatorResult = COLOR_VAR_VALIDATOR(item) 70388c88e8eSopenharmony_ci order.push(2) 70488c88e8eSopenharmony_ci res.push({ 70588c88e8eSopenharmony_ci value: validatorResult.value, 70688c88e8eSopenharmony_ci type: 'Color' 70788c88e8eSopenharmony_ci }) 70888c88e8eSopenharmony_ci } 70988c88e8eSopenharmony_ci }, 71088c88e8eSopenharmony_ci { 71188c88e8eSopenharmony_ci match () { return true }, 71288c88e8eSopenharmony_ci action () { 71388c88e8eSopenharmony_ci hasError = true 71488c88e8eSopenharmony_ci } 71588c88e8eSopenharmony_ci } 71688c88e8eSopenharmony_ci ] 71788c88e8eSopenharmony_ci if (values && values.length <= 3) { 71888c88e8eSopenharmony_ci for (let i = 0; i < values.length; i++) { 71988c88e8eSopenharmony_ci const item = values[i] 72088c88e8eSopenharmony_ci for (let i = 0; i < rules.length; i++) { 72188c88e8eSopenharmony_ci if (rules[i].match(item)) { 72288c88e8eSopenharmony_ci rules[i].action(item) 72388c88e8eSopenharmony_ci break; 72488c88e8eSopenharmony_ci } 72588c88e8eSopenharmony_ci } 72688c88e8eSopenharmony_ci // style width color pass verification, but did not write in order, such as "1px red solid", should be error 72788c88e8eSopenharmony_ci let orderIndex = -1 72888c88e8eSopenharmony_ci order.forEach((item) => { 72988c88e8eSopenharmony_ci orderIndex < item ? orderIndex = item : hasError = true 73088c88e8eSopenharmony_ci }) 73188c88e8eSopenharmony_ci // get all warning and note log 73288c88e8eSopenharmony_ci logUtil(validatorResult, name, item, reasons, index) 73388c88e8eSopenharmony_ci } 73488c88e8eSopenharmony_ci // print warning and note 73588c88e8eSopenharmony_ci if (!hasError) { 73688c88e8eSopenharmony_ci return { 73788c88e8eSopenharmony_ci value: res, 73888c88e8eSopenharmony_ci reason: reasons.length > 0 ? function (k, v) { 73988c88e8eSopenharmony_ci return ( 74088c88e8eSopenharmony_ci logTypes[index] + ': There are some problems with value `' + v + '` of the `' + 74188c88e8eSopenharmony_ci util.camelCaseToHyphened(k) + '` attribute. \n ' + reasons.join(' \n')) 74288c88e8eSopenharmony_ci } : null 74388c88e8eSopenharmony_ci } 74488c88e8eSopenharmony_ci } 74588c88e8eSopenharmony_ci } 74688c88e8eSopenharmony_ci // print error 74788c88e8eSopenharmony_ci return { 74888c88e8eSopenharmony_ci value: null, 74988c88e8eSopenharmony_ci reason: function reason (k, v, result) { 75088c88e8eSopenharmony_ci return 'ERROR: The `' + util.camelCaseToHyphened(k) + 75188c88e8eSopenharmony_ci '` attribute does not support value `' + v + 75288c88e8eSopenharmony_ci '` (this value does not meet the inspection standards for the width, style, and color).' 75388c88e8eSopenharmony_ci } 75488c88e8eSopenharmony_ci } 75588c88e8eSopenharmony_ci} 75688c88e8eSopenharmony_ci 75788c88e8eSopenharmony_cifunction logUtil (validatorResult, name, item, reasons, index) { 75888c88e8eSopenharmony_ci if (validatorResult.reason) { 75988c88e8eSopenharmony_ci let str = validatorResult.reason(name, item, validatorResult.value) 76088c88e8eSopenharmony_ci const mesg = str.match(/^([A-Z]+):/) 76188c88e8eSopenharmony_ci // When both warning and note information are included, a high severity sign is output 76288c88e8eSopenharmony_ci const num = logTypes.indexOf(mesg[1]) 76388c88e8eSopenharmony_ci if (index < num) { 76488c88e8eSopenharmony_ci index = num 76588c88e8eSopenharmony_ci } 76688c88e8eSopenharmony_ci str = str.replace(mesg[0], '') 76788c88e8eSopenharmony_ci reasons.push(str) 76888c88e8eSopenharmony_ci } 76988c88e8eSopenharmony_ci} 77088c88e8eSopenharmony_ci 77188c88e8eSopenharmony_civar BOX_SHADOW_VALIDATOR = function BOX_SHADOW_VALIDATOR(value, name) { 77288c88e8eSopenharmony_ci value = (value || '').toString().trim() 77388c88e8eSopenharmony_ci const values = value.split(/\s+/) 77488c88e8eSopenharmony_ci let validatorResult 77588c88e8eSopenharmony_ci const res = [] 77688c88e8eSopenharmony_ci const order = [] 77788c88e8eSopenharmony_ci const reasons = [] 77888c88e8eSopenharmony_ci let index = 0 77988c88e8eSopenharmony_ci let ruleIndex = 0 78088c88e8eSopenharmony_ci let hasError = false 78188c88e8eSopenharmony_ci const rules = [ 78288c88e8eSopenharmony_ci { 78388c88e8eSopenharmony_ci match (item) { return validate('boxShadowH', item).value }, 78488c88e8eSopenharmony_ci action (item) { 78588c88e8eSopenharmony_ci validatorResult = validate('boxShadowH', item) 78688c88e8eSopenharmony_ci order.push(0) 78788c88e8eSopenharmony_ci res.push({ 78888c88e8eSopenharmony_ci value: validatorResult.value, 78988c88e8eSopenharmony_ci type: 'H' 79088c88e8eSopenharmony_ci }) 79188c88e8eSopenharmony_ci } 79288c88e8eSopenharmony_ci }, 79388c88e8eSopenharmony_ci { 79488c88e8eSopenharmony_ci match (item) { return validate('boxShadowV', item).value }, 79588c88e8eSopenharmony_ci action (item) { 79688c88e8eSopenharmony_ci validatorResult = validate('boxShadowV', item) 79788c88e8eSopenharmony_ci order.push(1) 79888c88e8eSopenharmony_ci res.push({ 79988c88e8eSopenharmony_ci value: validatorResult.value, 80088c88e8eSopenharmony_ci type: 'V' 80188c88e8eSopenharmony_ci }) 80288c88e8eSopenharmony_ci } 80388c88e8eSopenharmony_ci }, 80488c88e8eSopenharmony_ci { 80588c88e8eSopenharmony_ci match (item) { return validate('boxShadowBlur', item).value }, 80688c88e8eSopenharmony_ci action (item) { 80788c88e8eSopenharmony_ci validatorResult = validate('boxShadowBlur', item) 80888c88e8eSopenharmony_ci order.push(2) 80988c88e8eSopenharmony_ci res.push({ 81088c88e8eSopenharmony_ci value: validatorResult.value, 81188c88e8eSopenharmony_ci type: 'Blur' 81288c88e8eSopenharmony_ci }) 81388c88e8eSopenharmony_ci } 81488c88e8eSopenharmony_ci }, 81588c88e8eSopenharmony_ci { 81688c88e8eSopenharmony_ci match (item) { return validate('boxShadowSpread', item).value }, 81788c88e8eSopenharmony_ci action (item) { 81888c88e8eSopenharmony_ci validatorResult = validate('boxShadowSpread', item) 81988c88e8eSopenharmony_ci order.push(3) 82088c88e8eSopenharmony_ci res.push({ 82188c88e8eSopenharmony_ci value: validatorResult.value, 82288c88e8eSopenharmony_ci type: 'Spread' 82388c88e8eSopenharmony_ci }) 82488c88e8eSopenharmony_ci } 82588c88e8eSopenharmony_ci }, 82688c88e8eSopenharmony_ci { 82788c88e8eSopenharmony_ci match (item) { return COLOR_VAR_VALIDATOR(item).value }, 82888c88e8eSopenharmony_ci action (item) { 82988c88e8eSopenharmony_ci validatorResult = COLOR_VAR_VALIDATOR(item) 83088c88e8eSopenharmony_ci order.push(4) 83188c88e8eSopenharmony_ci res.push({ 83288c88e8eSopenharmony_ci value: validatorResult.value, 83388c88e8eSopenharmony_ci type: 'Color' 83488c88e8eSopenharmony_ci }) 83588c88e8eSopenharmony_ci } 83688c88e8eSopenharmony_ci } 83788c88e8eSopenharmony_ci ] 83888c88e8eSopenharmony_ci const length = values.length 83988c88e8eSopenharmony_ci const flag = (length <= 6 && length >= 2) && values[0].match(LENGTH_REGEXP) && values[1].match(LENGTH_REGEXP) 84088c88e8eSopenharmony_ci if (values && flag) { 84188c88e8eSopenharmony_ci for (let i = 0; i < values.length; i++) { 84288c88e8eSopenharmony_ci const item = values[i] 84388c88e8eSopenharmony_ci for (let j = ruleIndex; j < rules.length; j++) { 84488c88e8eSopenharmony_ci if (rules[j].match(item)) { 84588c88e8eSopenharmony_ci ruleIndex++ 84688c88e8eSopenharmony_ci rules[j].action(item) 84788c88e8eSopenharmony_ci break 84888c88e8eSopenharmony_ci } 84988c88e8eSopenharmony_ci } 85088c88e8eSopenharmony_ci let orderIndex = -1 85188c88e8eSopenharmony_ci order.forEach((item) => { 85288c88e8eSopenharmony_ci orderIndex < item ? orderIndex = item : hasError = true 85388c88e8eSopenharmony_ci }) 85488c88e8eSopenharmony_ci // get all warning and note log 85588c88e8eSopenharmony_ci logUtil(validatorResult, name, item, reasons, index) 85688c88e8eSopenharmony_ci } 85788c88e8eSopenharmony_ci if (!hasError) { 85888c88e8eSopenharmony_ci return { 85988c88e8eSopenharmony_ci value: res, 86088c88e8eSopenharmony_ci reason: reasons.length > 0 ? function (k, v) { 86188c88e8eSopenharmony_ci return ( 86288c88e8eSopenharmony_ci logTypes[index] + ': There are some problems with value `' + v + 86388c88e8eSopenharmony_ci '` of the `' + util.camelCaseToHyphened(k) + '` attribute. \n ' + reasons.join(' \n')) 86488c88e8eSopenharmony_ci } : null 86588c88e8eSopenharmony_ci } 86688c88e8eSopenharmony_ci } 86788c88e8eSopenharmony_ci } 86888c88e8eSopenharmony_ci return { 86988c88e8eSopenharmony_ci value: null, 87088c88e8eSopenharmony_ci reason: function reason (k, v, result) { 87188c88e8eSopenharmony_ci return 'ERROR: The `' + util.camelCaseToHyphened(k) + 87288c88e8eSopenharmony_ci '` attribute does not support value `' + v + 87388c88e8eSopenharmony_ci '` (this value does not meet the inspection standards).' 87488c88e8eSopenharmony_ci } 87588c88e8eSopenharmony_ci } 87688c88e8eSopenharmony_ci} 87788c88e8eSopenharmony_ci 87888c88e8eSopenharmony_ci/** 87988c88e8eSopenharmony_ci * only integer or float value is valid 88088c88e8eSopenharmony_ci * 88188c88e8eSopenharmony_ci * @param {string} v 88288c88e8eSopenharmony_ci * @return {function} a function to return 88388c88e8eSopenharmony_ci * - value: number|null 88488c88e8eSopenharmony_ci * - reason(k, v, result) 88588c88e8eSopenharmony_ci */ 88688c88e8eSopenharmony_civar NUMBER_VALIDATOR = function NUMBER_VALIDATOR(v, isInt) { 88788c88e8eSopenharmony_ci v = (v || '').toString().trim() 88888c88e8eSopenharmony_ci 88988c88e8eSopenharmony_ci if (v.match(ID_REGEXP)) { 89088c88e8eSopenharmony_ci return { value: v } 89188c88e8eSopenharmony_ci } 89288c88e8eSopenharmony_ci 89388c88e8eSopenharmony_ci var match = v.match(LENGTH_REGEXP) 89488c88e8eSopenharmony_ci 89588c88e8eSopenharmony_ci if (match && !match[1]) { 89688c88e8eSopenharmony_ci return { value: isInt === true ? parseInt(v, 10) : parseFloat(v) } 89788c88e8eSopenharmony_ci } 89888c88e8eSopenharmony_ci 89988c88e8eSopenharmony_ci if (v.indexOf('@') >= 0) { 90088c88e8eSopenharmony_ci let result 90188c88e8eSopenharmony_ci // target format "@sys.float.id_sys_number" or '@sys.float.id_sys_number' 90288c88e8eSopenharmony_ci let SysResourceTypeRefReg = /['"]\s*@sys\.float\.(?<resName>\w+)\s*['"]/ 90388c88e8eSopenharmony_ci result = SysResourceTypeRefReg.exec(v) 90488c88e8eSopenharmony_ci if (result) { 90588c88e8eSopenharmony_ci const resourceName = result.groups['resName'] 90688c88e8eSopenharmony_ci if (resourceName && OHOS_THEME_PROP_GROUPS[resourceName]) { 90788c88e8eSopenharmony_ci return { value: "@sys.float." + OHOS_THEME_PROP_GROUPS[resourceName] } 90888c88e8eSopenharmony_ci } 90988c88e8eSopenharmony_ci } 91088c88e8eSopenharmony_ci // target format "@app.float.developer_defined_number" or '@app.float.developer_defined_number' 91188c88e8eSopenharmony_ci let AppResourceTypeRefReg = /['"]\s*@app\.float\.(?<resName>\w+)\s*['"]/ 91288c88e8eSopenharmony_ci result = AppResourceTypeRefReg.exec(v) 91388c88e8eSopenharmony_ci if (result) { 91488c88e8eSopenharmony_ci const resourceName = result.groups['resName'] 91588c88e8eSopenharmony_ci if (resourceName) { 91688c88e8eSopenharmony_ci return { value: "@app.float." + resourceName} 91788c88e8eSopenharmony_ci } 91888c88e8eSopenharmony_ci } 91988c88e8eSopenharmony_ci // target format "@id_sys_number" or '@id_sys_number' or @id_sys_number 92088c88e8eSopenharmony_ci let ResourceRefReg = /['"]?\s*@(?<resName>\w+)\s*['"]?/ 92188c88e8eSopenharmony_ci result = ResourceRefReg.exec(v) 92288c88e8eSopenharmony_ci if (result) { 92388c88e8eSopenharmony_ci const resourceName = result.groups['resName'] 92488c88e8eSopenharmony_ci if (resourceName && OHOS_THEME_PROP_GROUPS[resourceName]) { 92588c88e8eSopenharmony_ci return { value: "@ohos_id_" + OHOS_THEME_PROP_GROUPS[resourceName] } 92688c88e8eSopenharmony_ci } 92788c88e8eSopenharmony_ci } 92888c88e8eSopenharmony_ci } 92988c88e8eSopenharmony_ci 93088c88e8eSopenharmony_ci return { 93188c88e8eSopenharmony_ci value: null, 93288c88e8eSopenharmony_ci reason: function reason(k, v, result) { 93388c88e8eSopenharmony_ci return 'ERROR: The `' + util.camelCaseToHyphened(k) + 93488c88e8eSopenharmony_ci '` attribute does not support value `' + v + '` (only numbers are supported).' 93588c88e8eSopenharmony_ci } 93688c88e8eSopenharmony_ci } 93788c88e8eSopenharmony_ci} 93888c88e8eSopenharmony_ci 93988c88e8eSopenharmony_civar ARRAY_NUMBER_VALIDATOR = function ARRAY_NUMBER_VALIDATOR(v) { 94088c88e8eSopenharmony_ci v = (v || '').toString().trim().replace(/,/g, ' ') 94188c88e8eSopenharmony_ci var isArray = true 94288c88e8eSopenharmony_ci return SHORTHAND_VALIDATOR(v, NUMBER_VALIDATOR, isArray) 94388c88e8eSopenharmony_ci} 94488c88e8eSopenharmony_ci 94588c88e8eSopenharmony_ci/** 94688c88e8eSopenharmony_ci * only integer value is valid 94788c88e8eSopenharmony_ci * 94888c88e8eSopenharmony_ci * @param {string} v 94988c88e8eSopenharmony_ci * @return {function} a function to return 95088c88e8eSopenharmony_ci * - value: number|null 95188c88e8eSopenharmony_ci * - reason(k, v, result) 95288c88e8eSopenharmony_ci */ 95388c88e8eSopenharmony_civar INTEGER_VALIDATOR = function INTEGER_VALIDATOR(v) { 95488c88e8eSopenharmony_ci return NUMBER_VALIDATOR(v, true) 95588c88e8eSopenharmony_ci} 95688c88e8eSopenharmony_ci 95788c88e8eSopenharmony_ci/** 95888c88e8eSopenharmony_ci * transition-property: only css property is valid 95988c88e8eSopenharmony_ci * 96088c88e8eSopenharmony_ci * @param {string} v 96188c88e8eSopenharmony_ci * @return {function} a function to return 96288c88e8eSopenharmony_ci * - value: string|null 96388c88e8eSopenharmony_ci * - reason(k, v, result) 96488c88e8eSopenharmony_ci */ 96588c88e8eSopenharmony_civar TRANSITION_PROPERTY_VALIDATOR = function TRANSITION_PROPERTY_VALIDATOR(v) { 96688c88e8eSopenharmony_ci v = (v || '').toString() 96788c88e8eSopenharmony_ci v = v.split(/\s*,\s*/).map(util.hyphenedToCamelCase).join(',') 96888c88e8eSopenharmony_ci 96988c88e8eSopenharmony_ci if (v.split(/\s*,\s*/).every(p => !!validatorMap[p])) { 97088c88e8eSopenharmony_ci return {value: v} 97188c88e8eSopenharmony_ci } 97288c88e8eSopenharmony_ci 97388c88e8eSopenharmony_ci return { 97488c88e8eSopenharmony_ci value: null, 97588c88e8eSopenharmony_ci reason: function reason(k, v, result) { 97688c88e8eSopenharmony_ci return 'ERROR: The `' + util.camelCaseToHyphened(k) + '` attribute does not support value `' + 97788c88e8eSopenharmony_ci v + '` (only CSS attributes support this value).' 97888c88e8eSopenharmony_ci } 97988c88e8eSopenharmony_ci } 98088c88e8eSopenharmony_ci} 98188c88e8eSopenharmony_ci 98288c88e8eSopenharmony_ci/** 98388c88e8eSopenharmony_ci * transition-duration & transition-delay: only number of seconds or milliseconds is valid 98488c88e8eSopenharmony_ci * 98588c88e8eSopenharmony_ci * @param {string} v 98688c88e8eSopenharmony_ci * @return {function} a function to return 98788c88e8eSopenharmony_ci * - value: number|null 98888c88e8eSopenharmony_ci * - reason(k, v, result) 98988c88e8eSopenharmony_ci */ 99088c88e8eSopenharmony_civar TRANSITION_INTERVAL_VALIDATOR = function TRANSITION_INTERVAL_VALIDATOR(v) { 99188c88e8eSopenharmony_ci v = (v || 0).toString() 99288c88e8eSopenharmony_ci var match, num, ret 99388c88e8eSopenharmony_ci 99488c88e8eSopenharmony_ci if (match = v.match(/^\d*\.?\d+(ms|s)?$/)) { 99588c88e8eSopenharmony_ci num = parseFloat(match[0]) 99688c88e8eSopenharmony_ci if (!match[1]) { 99788c88e8eSopenharmony_ci ret = {value: parseInt(num)} 99888c88e8eSopenharmony_ci } 99988c88e8eSopenharmony_ci else { 100088c88e8eSopenharmony_ci if (match[1] === 's') { 100188c88e8eSopenharmony_ci num *= 1000 100288c88e8eSopenharmony_ci } 100388c88e8eSopenharmony_ci ret = { 100488c88e8eSopenharmony_ci value: parseInt(num), 100588c88e8eSopenharmony_ci reason: function reason(k, v, result) { 100688c88e8eSopenharmony_ci return 'NOTE: Attribute value `' + v + '` is automatically fixed to `' + result + '`.' 100788c88e8eSopenharmony_ci } 100888c88e8eSopenharmony_ci } 100988c88e8eSopenharmony_ci } 101088c88e8eSopenharmony_ci return ret 101188c88e8eSopenharmony_ci } 101288c88e8eSopenharmony_ci 101388c88e8eSopenharmony_ci return { 101488c88e8eSopenharmony_ci value: null, 101588c88e8eSopenharmony_ci reason: function reason(k, v, result) { 101688c88e8eSopenharmony_ci return 'ERROR: The `' + util.camelCaseToHyphened(k) + '` attribute does not support value `' + 101788c88e8eSopenharmony_ci v + '` (only seconds and milliseconds are supported).' 101888c88e8eSopenharmony_ci } 101988c88e8eSopenharmony_ci } 102088c88e8eSopenharmony_ci} 102188c88e8eSopenharmony_ci 102288c88e8eSopenharmony_ci/** 102388c88e8eSopenharmony_ci * transition-timing-function: only linear|ease|ease-in|ease-out|ease-in-out|cubic-bezier(n,n,n,n) is valid 102488c88e8eSopenharmony_ci * 102588c88e8eSopenharmony_ci * @param {string} v 102688c88e8eSopenharmony_ci * @return {function} a function to return 102788c88e8eSopenharmony_ci * - value: linear|ease|ease-in|ease-out|ease-in-out|cubic-bezier(n,n,n,n)|null 102888c88e8eSopenharmony_ci * - reason(k, v, result) 102988c88e8eSopenharmony_ci */ 103088c88e8eSopenharmony_civar TRANSITION_TIMING_FUNCTION_VALIDATOR = function TRANSITION_TIMING_FUNCTION_VALIDATOR(v) { 103188c88e8eSopenharmony_ci v = (v || '').toString() 103288c88e8eSopenharmony_ci 103388c88e8eSopenharmony_ci if (v.match(/^linear|ease|ease-in|ease-out|ease-in-out|fast-out-slow-in|linear-out-slow-in$/) || 103488c88e8eSopenharmony_ci v.match(/^fast-out-linear-in|friction|extreme-deceleration|sharp|rhythm|smooth$/)) { 103588c88e8eSopenharmony_ci return {value: v} 103688c88e8eSopenharmony_ci } 103788c88e8eSopenharmony_ci 103888c88e8eSopenharmony_ci let match, ret 103988c88e8eSopenharmony_ci let NUM_REGEXP = /^[-]?\d*\.?\d+$/ 104088c88e8eSopenharmony_ci if (match = v.match(/^cubic-bezier\(\s*(.*)\s*,\s*(.*)\s*,\s*(.*)\s*,\s*(.*)\s*\)$/)) { 104188c88e8eSopenharmony_ci /* istanbul ignore else */ 104288c88e8eSopenharmony_ci if (match[1].match(NUM_REGEXP) && match[2].match(NUM_REGEXP) && 104388c88e8eSopenharmony_ci match[3].match(NUM_REGEXP) && match[4].match(NUM_REGEXP)) { 104488c88e8eSopenharmony_ci ret = [parseFloat(match[1]), parseFloat(match[2]), parseFloat(match[3]), parseFloat(match[4])].join(',') 104588c88e8eSopenharmony_ci return {value: 'cubic-bezier(' + ret + ')'} 104688c88e8eSopenharmony_ci } 104788c88e8eSopenharmony_ci } 104888c88e8eSopenharmony_ci 104988c88e8eSopenharmony_ci // check steps 105088c88e8eSopenharmony_ci if (match = v.match(/^steps\(\s*([\d]*)\s*(,\s*(start|end)\s*){0,1}\)$/)) { 105188c88e8eSopenharmony_ci var stepCnt = parseFloat(match[1]); 105288c88e8eSopenharmony_ci if (stepCnt > 0) { 105388c88e8eSopenharmony_ci if (match[3] === undefined) { 105488c88e8eSopenharmony_ci ret = stepCnt; 105588c88e8eSopenharmony_ci } else { 105688c88e8eSopenharmony_ci ret = [stepCnt, match[3]].join(',') 105788c88e8eSopenharmony_ci } 105888c88e8eSopenharmony_ci return {value: 'steps(' + ret + ')'} 105988c88e8eSopenharmony_ci } 106088c88e8eSopenharmony_ci } 106188c88e8eSopenharmony_ci 106288c88e8eSopenharmony_ci return { 106388c88e8eSopenharmony_ci value: null, 106488c88e8eSopenharmony_ci reason: function reason(k, v, result) { 106588c88e8eSopenharmony_ci return 'ERROR: The `' + util.camelCaseToHyphened(k) + '` attribute does not support value `' + v + 106688c88e8eSopenharmony_ci '` (supported values include `linear`, `ease`, `ease-in`, `ease-out`, `ease-in-out`,' + 106788c88e8eSopenharmony_ci ' `cubic-bezier(n,n,n,n)` and `steps(n[, start|end])`).' 106888c88e8eSopenharmony_ci } 106988c88e8eSopenharmony_ci } 107088c88e8eSopenharmony_ci} 107188c88e8eSopenharmony_ci 107288c88e8eSopenharmony_cifunction parseAnimationOption(key, option, style) 107388c88e8eSopenharmony_ci{ 107488c88e8eSopenharmony_ci var subResult = validate(key, option) 107588c88e8eSopenharmony_ci if (subResult.value) { 107688c88e8eSopenharmony_ci style[key] = subResult.value 107788c88e8eSopenharmony_ci return true 107888c88e8eSopenharmony_ci } 107988c88e8eSopenharmony_ci return false 108088c88e8eSopenharmony_ci} 108188c88e8eSopenharmony_ci 108288c88e8eSopenharmony_cifunction parseSimpleAnimation(style, animation) { 108388c88e8eSopenharmony_ci // init default animation brief value 108488c88e8eSopenharmony_ci Object.assign(style, DEFAULT_ANIMATION) 108588c88e8eSopenharmony_ci let options = animation.trim().replace(/,\s+/g, ",").split(/\s+/) 108688c88e8eSopenharmony_ci let durationIdx = NaN 108788c88e8eSopenharmony_ci let delayIdx = NaN 108888c88e8eSopenharmony_ci let directionIdx = NaN 108988c88e8eSopenharmony_ci let timingIdx = NaN 109088c88e8eSopenharmony_ci let playStateIdx = NaN 109188c88e8eSopenharmony_ci let iterationIdx = NaN 109288c88e8eSopenharmony_ci let fillModeIdx = NaN 109388c88e8eSopenharmony_ci for (let idx in options) { 109488c88e8eSopenharmony_ci const option = options[idx] 109588c88e8eSopenharmony_ci if (isNaN(timingIdx) && parseAnimationOption('animationTimingFunction', option, style)) { 109688c88e8eSopenharmony_ci timingIdx = idx 109788c88e8eSopenharmony_ci continue 109888c88e8eSopenharmony_ci } 109988c88e8eSopenharmony_ci if (isNaN(directionIdx) && parseAnimationOption('animationDirection', option, style)) { 110088c88e8eSopenharmony_ci directionIdx = idx 110188c88e8eSopenharmony_ci continue 110288c88e8eSopenharmony_ci } 110388c88e8eSopenharmony_ci if (isNaN(playStateIdx) && parseAnimationOption('animationPlayState', option, style)) { 110488c88e8eSopenharmony_ci playStateIdx = idx 110588c88e8eSopenharmony_ci continue 110688c88e8eSopenharmony_ci } 110788c88e8eSopenharmony_ci if (isNaN(iterationIdx) && parseAnimationOption('animationIterationCount', option, style)) { 110888c88e8eSopenharmony_ci iterationIdx = idx 110988c88e8eSopenharmony_ci continue 111088c88e8eSopenharmony_ci } 111188c88e8eSopenharmony_ci if (isNaN(fillModeIdx) && parseAnimationOption('animationFillMode', option, style)) { 111288c88e8eSopenharmony_ci fillModeIdx = idx 111388c88e8eSopenharmony_ci continue 111488c88e8eSopenharmony_ci } 111588c88e8eSopenharmony_ci if (isNaN(durationIdx) && parseAnimationOption('animationDuration', option, style)) { 111688c88e8eSopenharmony_ci durationIdx = idx 111788c88e8eSopenharmony_ci continue 111888c88e8eSopenharmony_ci } 111988c88e8eSopenharmony_ci if (isNaN(delayIdx) && parseAnimationOption('animationDelay', option, style)) { 112088c88e8eSopenharmony_ci delayIdx = idx 112188c88e8eSopenharmony_ci continue 112288c88e8eSopenharmony_ci } 112388c88e8eSopenharmony_ci } 112488c88e8eSopenharmony_ci delete options[durationIdx] 112588c88e8eSopenharmony_ci delete options[delayIdx] 112688c88e8eSopenharmony_ci delete options[directionIdx] 112788c88e8eSopenharmony_ci delete options[timingIdx] 112888c88e8eSopenharmony_ci delete options[playStateIdx] 112988c88e8eSopenharmony_ci delete options[iterationIdx] 113088c88e8eSopenharmony_ci delete options[fillModeIdx] 113188c88e8eSopenharmony_ci options = options.filter(res => { return !(res === 'undefined') }) 113288c88e8eSopenharmony_ci if (options.length === 1) { 113388c88e8eSopenharmony_ci if (!parseAnimationOption('animationName', options[0], style)) { 113488c88e8eSopenharmony_ci return false 113588c88e8eSopenharmony_ci } 113688c88e8eSopenharmony_ci return true 113788c88e8eSopenharmony_ci } else if (options.length > 1) { 113888c88e8eSopenharmony_ci return false 113988c88e8eSopenharmony_ci } else { 114088c88e8eSopenharmony_ci // use default. 114188c88e8eSopenharmony_ci return true 114288c88e8eSopenharmony_ci } 114388c88e8eSopenharmony_ci} 114488c88e8eSopenharmony_ci 114588c88e8eSopenharmony_civar ANIMATION_VALIDATOR = function ANIMATION_VALIDATOR(v) { 114688c88e8eSopenharmony_ci var style = {} 114788c88e8eSopenharmony_ci if (parseSimpleAnimation(style, v)) { 114888c88e8eSopenharmony_ci return {value: style} 114988c88e8eSopenharmony_ci } else { 115088c88e8eSopenharmony_ci return { 115188c88e8eSopenharmony_ci value: null, 115288c88e8eSopenharmony_ci reason: function reason(k, v, result) { 115388c88e8eSopenharmony_ci return 'ERROR: animation is invalid' 115488c88e8eSopenharmony_ci } 115588c88e8eSopenharmony_ci } 115688c88e8eSopenharmony_ci } 115788c88e8eSopenharmony_ci} 115888c88e8eSopenharmony_ci 115988c88e8eSopenharmony_civar TRANSFORM_VALIDATOR = function TRANSFORM_VALIDATOR(v) { 116088c88e8eSopenharmony_ci v = (v || '').toString().trim() 116188c88e8eSopenharmony_ci if (v.match(/^none$/)) { 116288c88e8eSopenharmony_ci return { value: JSON.stringify({}) } 116388c88e8eSopenharmony_ci } 116488c88e8eSopenharmony_ci const values = [] 116588c88e8eSopenharmony_ci TRANSFORM_REGEXP.lastIndex = 0 116688c88e8eSopenharmony_ci while (true) { 116788c88e8eSopenharmony_ci let matchValue = TRANSFORM_REGEXP.exec(v) 116888c88e8eSopenharmony_ci if (!matchValue) { 116988c88e8eSopenharmony_ci break 117088c88e8eSopenharmony_ci } 117188c88e8eSopenharmony_ci values.push(v.slice(matchValue.index, TRANSFORM_REGEXP.lastIndex)) 117288c88e8eSopenharmony_ci } 117388c88e8eSopenharmony_ci if (!values.length) { 117488c88e8eSopenharmony_ci return { 117588c88e8eSopenharmony_ci value: null, 117688c88e8eSopenharmony_ci reason: function reason(k, v) { 117788c88e8eSopenharmony_ci return 'ERROR: The `' + util.camelCaseToHyphened(k) + '` attribute does not support value `' + v + '`.' 117888c88e8eSopenharmony_ci } 117988c88e8eSopenharmony_ci } 118088c88e8eSopenharmony_ci } 118188c88e8eSopenharmony_ci let result = {} 118288c88e8eSopenharmony_ci let reasonMaps = [] 118388c88e8eSopenharmony_ci let allLength = 0 118488c88e8eSopenharmony_ci values.forEach(function(v) { 118588c88e8eSopenharmony_ci let length = 0 118688c88e8eSopenharmony_ci let match = v.match(TRANSFORM_ITEM_REGEXP) 118788c88e8eSopenharmony_ci if (match) { 118888c88e8eSopenharmony_ci let firstValue = match[1] 118988c88e8eSopenharmony_ci let secondValue = match[2] 119088c88e8eSopenharmony_ci let checkFuntion = transformValidatorMap[firstValue] 119188c88e8eSopenharmony_ci if (typeof checkFuntion == 'function') { 119288c88e8eSopenharmony_ci var checkResult = checkFuntion(secondValue) 119388c88e8eSopenharmony_ci if (typeof checkResult.value == 'number' || typeof checkResult.value == 'string') { 119488c88e8eSopenharmony_ci result[firstValue] = checkResult.value 119588c88e8eSopenharmony_ci } 119688c88e8eSopenharmony_ci let check = checkReason(checkResult, firstValue, secondValue, length) 119788c88e8eSopenharmony_ci length = check.length 119888c88e8eSopenharmony_ci if (check.realReason) { 119988c88e8eSopenharmony_ci reasonMaps.push(check.realReason) 120088c88e8eSopenharmony_ci } 120188c88e8eSopenharmony_ci } else { 120288c88e8eSopenharmony_ci length = 2 120388c88e8eSopenharmony_ci reasonMaps.push('property `' + firstValue + '` is invalid.') 120488c88e8eSopenharmony_ci } 120588c88e8eSopenharmony_ci } else { 120688c88e8eSopenharmony_ci length = 2 120788c88e8eSopenharmony_ci reasonMaps.push('property value `' + v + '` is invalid.') 120888c88e8eSopenharmony_ci } 120988c88e8eSopenharmony_ci if (allLength < length) { 121088c88e8eSopenharmony_ci allLength = length 121188c88e8eSopenharmony_ci } 121288c88e8eSopenharmony_ci }) 121388c88e8eSopenharmony_ci return { 121488c88e8eSopenharmony_ci value: result ? JSON.stringify(result) : null, 121588c88e8eSopenharmony_ci reason: reasonMaps.length > 0 ? 121688c88e8eSopenharmony_ci function(k, v) { 121788c88e8eSopenharmony_ci return logTypes[allLength] + ': Value `' + v + '` of the `' + 121888c88e8eSopenharmony_ci util.camelCaseToHyphened(k) + '` attribute is incorrect. \n ' + reasonMaps.join(' \n ') 121988c88e8eSopenharmony_ci } : null 122088c88e8eSopenharmony_ci } 122188c88e8eSopenharmony_ci} 122288c88e8eSopenharmony_ci 122388c88e8eSopenharmony_civar MULTIPLE_PERCENTAGE_LENGTH_VALIDATOR = function MULTIPLE_PERCENTAGE_LENGTH_VALIDATOR(v) { 122488c88e8eSopenharmony_ci v = (v || '').toString().trim() 122588c88e8eSopenharmony_ci return MULTIPLE_POSITION_VALIDATOR(v, PERCENTAGE_LENGTH_VALIDATOR) 122688c88e8eSopenharmony_ci} 122788c88e8eSopenharmony_ci 122888c88e8eSopenharmony_civar MULTIPLE_NUMBER_VALIDATOR = function MULTIPLE_NUMBER_VALIDATOR(v) { 122988c88e8eSopenharmony_ci v = (v || '').toString().trim() 123088c88e8eSopenharmony_ci return MULTIPLE_POSITION_VALIDATOR(v, NUMBER_VALIDATOR) 123188c88e8eSopenharmony_ci} 123288c88e8eSopenharmony_ci 123388c88e8eSopenharmony_civar MUTIPLE_ANGLE_VALIDATOR = function MUTIPLE_ANGLE_VALIDATOR(v) { 123488c88e8eSopenharmony_ci v = (v || '').toString().trim() 123588c88e8eSopenharmony_ci return MULTIPLE_POSITION_VALIDATOR(v, ANGLE_VALIDATOR) 123688c88e8eSopenharmony_ci} 123788c88e8eSopenharmony_ci 123888c88e8eSopenharmony_civar ROTATE3D_VALIDATOR = function ROTATE3D_VALIDATOR(v) { 123988c88e8eSopenharmony_ci v = (v || '').toString().trim() 124088c88e8eSopenharmony_ci let values = v.split(/,/g) 124188c88e8eSopenharmony_ci if (values && values.length > 0) { 124288c88e8eSopenharmony_ci let resultValues = [] 124388c88e8eSopenharmony_ci let childResult = void 0 124488c88e8eSopenharmony_ci let reasonMaps = [] 124588c88e8eSopenharmony_ci let length = 0 124688c88e8eSopenharmony_ci if (values.length != 4) { 124788c88e8eSopenharmony_ci length = 2 124888c88e8eSopenharmony_ci reasonMaps.push('The number of properties is 4, value ' + values + ' is incorrect.') 124988c88e8eSopenharmony_ci } else { 125088c88e8eSopenharmony_ci values.forEach(function (value, index) { 125188c88e8eSopenharmony_ci if (index < 3) { 125288c88e8eSopenharmony_ci childResult = NUMBER_VALIDATOR(value) 125388c88e8eSopenharmony_ci } else { 125488c88e8eSopenharmony_ci childResult = ANGLE_VALIDATOR(value) 125588c88e8eSopenharmony_ci } 125688c88e8eSopenharmony_ci if (typeof childResult.value == 'number' || typeof childResult.value == 'string') { 125788c88e8eSopenharmony_ci resultValues.push(childResult.value) 125888c88e8eSopenharmony_ci } 125988c88e8eSopenharmony_ci let check = checkReason(childResult, index.toString(), value, length) 126088c88e8eSopenharmony_ci length = check.length 126188c88e8eSopenharmony_ci if (check.realReason !== null) { 126288c88e8eSopenharmony_ci reasonMaps.push(check.realReason) 126388c88e8eSopenharmony_ci } 126488c88e8eSopenharmony_ci }) 126588c88e8eSopenharmony_ci } 126688c88e8eSopenharmony_ci 126788c88e8eSopenharmony_ci return { 126888c88e8eSopenharmony_ci value: length < 2 ? resultValues.join(' ') : null, 126988c88e8eSopenharmony_ci reason: reasonMaps.length > 0 ? 127088c88e8eSopenharmony_ci function (k, v) { 127188c88e8eSopenharmony_ci return logTypes[length] + ': Value `' + v + '` of the `' + util.camelCaseToHyphened(k) + 127288c88e8eSopenharmony_ci '` attribute is incorrect. \n ' + reasonMaps.join(' \n ') 127388c88e8eSopenharmony_ci } : null 127488c88e8eSopenharmony_ci } 127588c88e8eSopenharmony_ci } 127688c88e8eSopenharmony_ci} 127788c88e8eSopenharmony_ci 127888c88e8eSopenharmony_civar MULTIPLE_POSITION_VALIDATOR = function MULTIPLE_POSITION_VALIDATOR(v, validateFunction) { 127988c88e8eSopenharmony_ci v = (v || '').toString().trim() 128088c88e8eSopenharmony_ci let values = v.split(/,/g) 128188c88e8eSopenharmony_ci if (values && values.length > 0) { 128288c88e8eSopenharmony_ci let resultValues = [] 128388c88e8eSopenharmony_ci let childResult = void 0 128488c88e8eSopenharmony_ci let reasonMaps = [] 128588c88e8eSopenharmony_ci let length = 0 128688c88e8eSopenharmony_ci if (values.length > 16) { 128788c88e8eSopenharmony_ci length = 2 128888c88e8eSopenharmony_ci reasonMaps.push('The maximum number of properties is 16, value ' + values + ' is incorrect.') 128988c88e8eSopenharmony_ci } 129088c88e8eSopenharmony_ci values.forEach(function (value, index) { 129188c88e8eSopenharmony_ci childResult = validateFunction(value) 129288c88e8eSopenharmony_ci if (typeof childResult.value == 'number' || typeof childResult.value == 'string') { 129388c88e8eSopenharmony_ci resultValues.push(childResult.value) 129488c88e8eSopenharmony_ci } 129588c88e8eSopenharmony_ci let check = checkReason(childResult, index.toString(), value, length) 129688c88e8eSopenharmony_ci length = check.length 129788c88e8eSopenharmony_ci if (check.realReason !== null) { 129888c88e8eSopenharmony_ci reasonMaps.push(check.realReason) 129988c88e8eSopenharmony_ci } 130088c88e8eSopenharmony_ci }) 130188c88e8eSopenharmony_ci return { 130288c88e8eSopenharmony_ci value: length < 2 ? resultValues.join(' ') : null, 130388c88e8eSopenharmony_ci reason: reasonMaps.length > 0 ? 130488c88e8eSopenharmony_ci function (k, v) { 130588c88e8eSopenharmony_ci return logTypes[length] + ': Value `' + v + '` of the `' + util.camelCaseToHyphened(k) + 130688c88e8eSopenharmony_ci '` attribute is incorrect. \n ' + reasonMaps.join(' \n ') 130788c88e8eSopenharmony_ci } : null 130888c88e8eSopenharmony_ci } 130988c88e8eSopenharmony_ci } 131088c88e8eSopenharmony_ci} 131188c88e8eSopenharmony_ci 131288c88e8eSopenharmony_ci/** 131388c88e8eSopenharmony_ci * generate a function to check whether a value is in `list` 131488c88e8eSopenharmony_ci * - first value: default, could be removed 131588c88e8eSopenharmony_ci * - not in `list`: incorrect 131688c88e8eSopenharmony_ci * 131788c88e8eSopenharmony_ci * @param {Array} list 131888c88e8eSopenharmony_ci * @return {function} a function(v) which returns a function to return 131988c88e8eSopenharmony_ci * - value: string|null 132088c88e8eSopenharmony_ci * - reason(k, v, result) 132188c88e8eSopenharmony_ci */ 132288c88e8eSopenharmony_cifunction genEnumValidator(list) { 132388c88e8eSopenharmony_ci return function ENUM_VALIDATOR(v, name) { 132488c88e8eSopenharmony_ci v = (v || '').toString().trim() 132588c88e8eSopenharmony_ci if (v.match(ID_REGEXP)) { 132688c88e8eSopenharmony_ci return {value: v} 132788c88e8eSopenharmony_ci } 132888c88e8eSopenharmony_ci 132988c88e8eSopenharmony_ci var index = list.indexOf(v) 133088c88e8eSopenharmony_ci if (index > 0) { 133188c88e8eSopenharmony_ci return {value: v} 133288c88e8eSopenharmony_ci } 133388c88e8eSopenharmony_ci if (index === 0) { 133488c88e8eSopenharmony_ci return { 133588c88e8eSopenharmony_ci value: v, 133688c88e8eSopenharmony_ci reason: name !== 'objectFit' ? 133788c88e8eSopenharmony_ci function reason(k, v, result) { 133888c88e8eSopenharmony_ci return 'NOTE: Value `' + v + '` is the default value of the `' + util.camelCaseToHyphened(k) + 133988c88e8eSopenharmony_ci '` attribute (the value can be removed).' 134088c88e8eSopenharmony_ci } : null 134188c88e8eSopenharmony_ci } 134288c88e8eSopenharmony_ci } 134388c88e8eSopenharmony_ci else { 134488c88e8eSopenharmony_ci return { 134588c88e8eSopenharmony_ci value: null, 134688c88e8eSopenharmony_ci reason: function reason(k, v, result) { 134788c88e8eSopenharmony_ci return 'ERROR: The `' + util.camelCaseToHyphened(k) + '` attribute does not support value `' + v + 134888c88e8eSopenharmony_ci '` (the supported value is `' + list.join('`|`') + '`).' 134988c88e8eSopenharmony_ci } 135088c88e8eSopenharmony_ci } 135188c88e8eSopenharmony_ci } 135288c88e8eSopenharmony_ci } 135388c88e8eSopenharmony_ci} 135488c88e8eSopenharmony_ci 135588c88e8eSopenharmony_civar MASK_VALIDATOR = function MASK_VALIDATOR(v) { 135688c88e8eSopenharmony_ci if (v.indexOf('url') >= 0) { 135788c88e8eSopenharmony_ci return URL_VALIDATOR(v) 135888c88e8eSopenharmony_ci } else { 135988c88e8eSopenharmony_ci return BACKGROUND_VALIDATOR(v) 136088c88e8eSopenharmony_ci } 136188c88e8eSopenharmony_ci} 136288c88e8eSopenharmony_ci 136388c88e8eSopenharmony_civar BACKGROUND_VALIDATOR = function BACKGROUND_VALIDATOR(v) { 136488c88e8eSopenharmony_ci v = (v || '').toString().trim() 136588c88e8eSopenharmony_ci if (v.indexOf('-gradient') > 0) { 136688c88e8eSopenharmony_ci let valueMatch = v.match(/(repeating-linear|linear).*?(?=\s*(repeating|linear)|$)/g) 136788c88e8eSopenharmony_ci let resultValues = { 136888c88e8eSopenharmony_ci values: [] 136988c88e8eSopenharmony_ci } 137088c88e8eSopenharmony_ci if (valueMatch && valueMatch.length) { 137188c88e8eSopenharmony_ci let reasonMaps = [] 137288c88e8eSopenharmony_ci let length = 0 137388c88e8eSopenharmony_ci valueMatch.forEach(function (realValue) { 137488c88e8eSopenharmony_ci let temp, gradientValidator 137588c88e8eSopenharmony_ci if(realValue.indexOf("-gradient") >= 0){ 137688c88e8eSopenharmony_ci temp = realValue.indexOf("repeating") >= 0 ? "repeatingLinearGradient": "linearGradient" 137788c88e8eSopenharmony_ci gradientValidator = backgroundValidatorMap[temp] 137888c88e8eSopenharmony_ci } 137988c88e8eSopenharmony_ci if (typeof gradientValidator == 'function') { 138088c88e8eSopenharmony_ci let validateResult = gradientValidator(realValue) 138188c88e8eSopenharmony_ci if (util.isValidValue(validateResult.value)) { 138288c88e8eSopenharmony_ci let jsonValue = JSON.parse(validateResult.value) 138388c88e8eSopenharmony_ci resultValues.values.push(jsonValue) 138488c88e8eSopenharmony_ci } 138588c88e8eSopenharmony_ci let check = checkReason(validateResult, temp, realValue, length) 138688c88e8eSopenharmony_ci length = check.length 138788c88e8eSopenharmony_ci if (check.realReason !== null) { 138888c88e8eSopenharmony_ci reasonMaps.push(check.realReason) 138988c88e8eSopenharmony_ci } 139088c88e8eSopenharmony_ci } else { 139188c88e8eSopenharmony_ci length = 2 139288c88e8eSopenharmony_ci reasonMaps.push("background type '" + realValue + "' is not supported.") 139388c88e8eSopenharmony_ci } 139488c88e8eSopenharmony_ci }) 139588c88e8eSopenharmony_ci return { 139688c88e8eSopenharmony_ci value: length < 2 ? JSON.stringify(resultValues) : null, 139788c88e8eSopenharmony_ci reason: reasonMaps.length > 0 ? 139888c88e8eSopenharmony_ci function (k, v) { 139988c88e8eSopenharmony_ci return logTypes[length] + ': Value `' + v + '` of the `' + util.camelCaseToHyphened(k) + 140088c88e8eSopenharmony_ci '` attribute is incorrect. \n ' + reasonMaps.join(' \n ') 140188c88e8eSopenharmony_ci } : null 140288c88e8eSopenharmony_ci } 140388c88e8eSopenharmony_ci } 140488c88e8eSopenharmony_ci } 140588c88e8eSopenharmony_ci return { 140688c88e8eSopenharmony_ci value: null, 140788c88e8eSopenharmony_ci reason: function (k, v) { 140888c88e8eSopenharmony_ci return 'ERROR: The format of value `' + v + '` of the `' + util.camelCaseToHyphened(k) + 140988c88e8eSopenharmony_ci '` attribute is incorrect.' 141088c88e8eSopenharmony_ci } 141188c88e8eSopenharmony_ci } 141288c88e8eSopenharmony_ci} 141388c88e8eSopenharmony_ci 141488c88e8eSopenharmony_civar LINEAR_GRADIENT_VALIDATOR = function LINEAR_GRADIENT_VALIDATOR(v) { 141588c88e8eSopenharmony_ci v = (v || "").toString().trim() 141688c88e8eSopenharmony_ci let result = { 141788c88e8eSopenharmony_ci type: "", 141888c88e8eSopenharmony_ci directions: ["to", "bottom"], 141988c88e8eSopenharmony_ci values: [] 142088c88e8eSopenharmony_ci } 142188c88e8eSopenharmony_ci let valueMatch = v.match(LINE_GRADIENT_ITEM_REGEXP) 142288c88e8eSopenharmony_ci if (valueMatch) { 142388c88e8eSopenharmony_ci let tempResult = {} 142488c88e8eSopenharmony_ci let reasonMaps = [] 142588c88e8eSopenharmony_ci let length = 0 142688c88e8eSopenharmony_ci let typeName = util.hyphenedToCamelCase(valueMatch[1]) 142788c88e8eSopenharmony_ci result.type = typeName 142888c88e8eSopenharmony_ci let matchValues = valueMatch[2].split(/,/) 142988c88e8eSopenharmony_ci if (LINE_GRADIENT_DIRECTION_REGEXP.test(matchValues[0])) { 143088c88e8eSopenharmony_ci let directionValidator 143188c88e8eSopenharmony_ci if (LINE_GRADIENT_TO_DIRECTION_REGEXP.test(matchValues[0])) { 143288c88e8eSopenharmony_ci directionValidator = backgroundValidatorMap.linearGradientDirection 143388c88e8eSopenharmony_ci } else if (matchValues[0].match(ANGLE_REGEXP)) { 143488c88e8eSopenharmony_ci directionValidator = backgroundValidatorMap.linearGradientAngle 143588c88e8eSopenharmony_ci } 143688c88e8eSopenharmony_ci if (typeof directionValidator == "function") { 143788c88e8eSopenharmony_ci tempResult = directionValidator(matchValues[0]) 143888c88e8eSopenharmony_ci if (util.isValidValue(tempResult.value)) { 143988c88e8eSopenharmony_ci result.directions = tempResult.value.split(/\s+/) 144088c88e8eSopenharmony_ci } 144188c88e8eSopenharmony_ci let check = checkReason(tempResult, typeName, matchValues[0], length) 144288c88e8eSopenharmony_ci length = check.length 144388c88e8eSopenharmony_ci if (check.realReason !== null) { 144488c88e8eSopenharmony_ci reasonMaps.push(check.realReason) 144588c88e8eSopenharmony_ci } 144688c88e8eSopenharmony_ci matchValues.splice(0, 1) 144788c88e8eSopenharmony_ci } 144888c88e8eSopenharmony_ci } 144988c88e8eSopenharmony_ci if (matchValues.length > 0) { 145088c88e8eSopenharmony_ci let colorStopResult = {} 145188c88e8eSopenharmony_ci colorStopResult = backgroundValidatorMap.linearGradientColor(matchValues) 145288c88e8eSopenharmony_ci if (util.isValidValue(colorStopResult.value)) { 145388c88e8eSopenharmony_ci result.values = JSON.parse(colorStopResult.value) 145488c88e8eSopenharmony_ci } 145588c88e8eSopenharmony_ci let check = checkReason(colorStopResult, typeName, matchValues, length) 145688c88e8eSopenharmony_ci length = check.length 145788c88e8eSopenharmony_ci if (check.realReason !== null) { 145888c88e8eSopenharmony_ci reasonMaps.push(check.realReason) 145988c88e8eSopenharmony_ci } 146088c88e8eSopenharmony_ci } else { 146188c88e8eSopenharmony_ci length = 2 146288c88e8eSopenharmony_ci reasonMaps.push("parameter '" + v + "' missing transition colors.") 146388c88e8eSopenharmony_ci } 146488c88e8eSopenharmony_ci return { 146588c88e8eSopenharmony_ci value: length < 2 ? JSON.stringify(result) : null, 146688c88e8eSopenharmony_ci reason: reasonMaps.length > 0 ? 146788c88e8eSopenharmony_ci function (k, v) { 146888c88e8eSopenharmony_ci return logTypes[length] + ': Value `' + v + '` of the `' + util.camelCaseToHyphened(k) + 146988c88e8eSopenharmony_ci '` attribute is incorrect. \n ' + reasonMaps.join('\n ') 147088c88e8eSopenharmony_ci }: null 147188c88e8eSopenharmony_ci } 147288c88e8eSopenharmony_ci } 147388c88e8eSopenharmony_ci return { 147488c88e8eSopenharmony_ci value: null, 147588c88e8eSopenharmony_ci reason: function (k, v) { 147688c88e8eSopenharmony_ci return 'ERROR: The format of value `' + v + '` of the `' + util.camelCaseToHyphened(k) + 147788c88e8eSopenharmony_ci '` attribute is incorrect.' 147888c88e8eSopenharmony_ci } 147988c88e8eSopenharmony_ci } 148088c88e8eSopenharmony_ci} 148188c88e8eSopenharmony_ci 148288c88e8eSopenharmony_civar ARRAY_COLOR_STOP_VALIDATOR = function ARRAY_COLOR_STOP_VALIDATOR(v) { 148388c88e8eSopenharmony_ci v = (v || '').toString().trim() 148488c88e8eSopenharmony_ci let values = v.match(ARRAY_COLOR_STOP_REGEXP) 148588c88e8eSopenharmony_ci if (values && values.length > 1) { 148688c88e8eSopenharmony_ci let resultValues = [] 148788c88e8eSopenharmony_ci let reasonMaps = [] 148888c88e8eSopenharmony_ci let length = 0 148988c88e8eSopenharmony_ci processValueItem(v, values, resultValues, reasonMaps, length) 149088c88e8eSopenharmony_ci return { 149188c88e8eSopenharmony_ci value: length < 2 ? JSON.stringify(resultValues) : null, 149288c88e8eSopenharmony_ci reason: reasonMaps.length > 0 ? 149388c88e8eSopenharmony_ci function (k, v) { 149488c88e8eSopenharmony_ci return logTypes[length] + ': Value `' + v + '` of the `' + 149588c88e8eSopenharmony_ci util.camelCaseToHyphened(k) + '` attribute is incorrect. \n ' + reasonMaps.join('\n ') 149688c88e8eSopenharmony_ci } : null 149788c88e8eSopenharmony_ci } 149888c88e8eSopenharmony_ci } 149988c88e8eSopenharmony_ci return { 150088c88e8eSopenharmony_ci value: null, 150188c88e8eSopenharmony_ci reason: function (k, v) { 150288c88e8eSopenharmony_ci return 'ERROR: The format of value `' + v + '` of the `'+ util.camelCaseToHyphened(k) + 150388c88e8eSopenharmony_ci '` attribute is incorrect. Please specify at least two colors.' 150488c88e8eSopenharmony_ci } 150588c88e8eSopenharmony_ci } 150688c88e8eSopenharmony_ci} 150788c88e8eSopenharmony_ci 150888c88e8eSopenharmony_cifunction processValueItem(v, values, resultValues, reasonMaps, length) { 150988c88e8eSopenharmony_ci values.forEach(function (value, n) { 151088c88e8eSopenharmony_ci let widthMatch = value.match(/[\s]+[-+0-9]+(px|%|vp|fp)?$/) 151188c88e8eSopenharmony_ci let tempValues = [] 151288c88e8eSopenharmony_ci if (widthMatch) { 151388c88e8eSopenharmony_ci let matchResult = PERCENTAGE_LENGTH_VALIDATOR(widthMatch[0]) 151488c88e8eSopenharmony_ci let index = value.indexOf(widthMatch[0]) 151588c88e8eSopenharmony_ci value = value.substring(0, index) 151688c88e8eSopenharmony_ci if (util.isValidValue(matchResult.value)) { 151788c88e8eSopenharmony_ci tempValues.push(matchResult.value) 151888c88e8eSopenharmony_ci } 151988c88e8eSopenharmony_ci let check = checkReason(matchResult, n.toString(), widthMatch[0], length) 152088c88e8eSopenharmony_ci length = check.length 152188c88e8eSopenharmony_ci if (check.realReason !== null) { 152288c88e8eSopenharmony_ci reasonMaps.push(check.realReason) 152388c88e8eSopenharmony_ci } 152488c88e8eSopenharmony_ci } 152588c88e8eSopenharmony_ci if (value) { 152688c88e8eSopenharmony_ci let colorResult = COLOR_VAR_VALIDATOR(value) 152788c88e8eSopenharmony_ci if (util.isValidValue(colorResult.value)) { 152888c88e8eSopenharmony_ci tempValues.unshift(colorResult.value) 152988c88e8eSopenharmony_ci } 153088c88e8eSopenharmony_ci resultValues.push(tempValues.join(' ')) 153188c88e8eSopenharmony_ci let check = checkReason(colorResult, n.toString(), value, length) 153288c88e8eSopenharmony_ci length = check.length 153388c88e8eSopenharmony_ci if (check.realReason !== null) { 153488c88e8eSopenharmony_ci reasonMaps.push(check.realReason) 153588c88e8eSopenharmony_ci } 153688c88e8eSopenharmony_ci } else { 153788c88e8eSopenharmony_ci length = 2 153888c88e8eSopenharmony_ci reasonMaps.push("parameter '" + v + "' is incorrect format.") 153988c88e8eSopenharmony_ci } 154088c88e8eSopenharmony_ci }) 154188c88e8eSopenharmony_ci} 154288c88e8eSopenharmony_ci 154388c88e8eSopenharmony_cifunction checkReason(result, k, v, length) { 154488c88e8eSopenharmony_ci let reason 154588c88e8eSopenharmony_ci if (result.reason) { 154688c88e8eSopenharmony_ci reason = result.reason(k, v, result.value) 154788c88e8eSopenharmony_ci if (reason) { 154888c88e8eSopenharmony_ci let reasonType = reason.match(/^([A-Z]+):/) 154988c88e8eSopenharmony_ci let index 155088c88e8eSopenharmony_ci if (reasonType) { 155188c88e8eSopenharmony_ci index = logTypes.indexOf(reasonType[1]) 155288c88e8eSopenharmony_ci if (logTypes.indexOf(reasonType[1]) > length) { 155388c88e8eSopenharmony_ci length = index 155488c88e8eSopenharmony_ci } 155588c88e8eSopenharmony_ci reason = reason.replace(reasonType[0], '').trim() 155688c88e8eSopenharmony_ci } 155788c88e8eSopenharmony_ci } 155888c88e8eSopenharmony_ci } 155988c88e8eSopenharmony_ci return { 156088c88e8eSopenharmony_ci length: length, 156188c88e8eSopenharmony_ci realReason: reason ? reason : null 156288c88e8eSopenharmony_ci } 156388c88e8eSopenharmony_ci} 156488c88e8eSopenharmony_ci 156588c88e8eSopenharmony_civar ANGLE_VALIDATOR = function ANGLE_VALIDATOR(v) { 156688c88e8eSopenharmony_ci v = (v || '').toString().trim() 156788c88e8eSopenharmony_ci let match = v.match(ANGLE_REGEXP) 156888c88e8eSopenharmony_ci if (match) { 156988c88e8eSopenharmony_ci let unit = match[1] 157088c88e8eSopenharmony_ci if (unit) { 157188c88e8eSopenharmony_ci let angle = parseFloat(v) 157288c88e8eSopenharmony_ci if (unit.toLowerCase() === 'rad') { 157388c88e8eSopenharmony_ci return { 157488c88e8eSopenharmony_ci value: Math.round(180 * angle / Math.PI) + SUPPORT_CSS_ANGLE_UNIT[0] 157588c88e8eSopenharmony_ci } 157688c88e8eSopenharmony_ci } else { 157788c88e8eSopenharmony_ci if (SUPPORT_CSS_ANGLE_UNIT.indexOf(unit.toLowerCase()) >= 0) { 157888c88e8eSopenharmony_ci return { value: v } 157988c88e8eSopenharmony_ci } else { 158088c88e8eSopenharmony_ci return { 158188c88e8eSopenharmony_ci value: angle + SUPPORT_CSS_ANGLE_UNIT[0], 158288c88e8eSopenharmony_ci reason: function(k, v) { 158388c88e8eSopenharmony_ci return 'ERROR: The `' + util.camelCaseToHyphened(k) + 158488c88e8eSopenharmony_ci '` attribute does not support `' + unit + '`. It only supports `' + 158588c88e8eSopenharmony_ci JSON.stringify(SUPPORT_CSS_ANGLE_UNIT) + '`.' 158688c88e8eSopenharmony_ci } 158788c88e8eSopenharmony_ci } 158888c88e8eSopenharmony_ci } 158988c88e8eSopenharmony_ci } 159088c88e8eSopenharmony_ci } else { 159188c88e8eSopenharmony_ci return { 159288c88e8eSopenharmony_ci value: parseFloat(v) + SUPPORT_CSS_ANGLE_UNIT[0], 159388c88e8eSopenharmony_ci reason: function(k, v) { 159488c88e8eSopenharmony_ci return 'WARNING: No unit is specified for the value `' + v + 159588c88e8eSopenharmony_ci '` of the `' + util.camelCaseToHyphened(k) + '` attribute. The default unit is `' + 159688c88e8eSopenharmony_ci SUPPORT_CSS_ANGLE_UNIT[0] + '`.' 159788c88e8eSopenharmony_ci } 159888c88e8eSopenharmony_ci } 159988c88e8eSopenharmony_ci } 160088c88e8eSopenharmony_ci } 160188c88e8eSopenharmony_ci return { 160288c88e8eSopenharmony_ci value: null, 160388c88e8eSopenharmony_ci reason: function(k, v) { 160488c88e8eSopenharmony_ci return 'ERROR: The `' + util.camelCaseToHyphened(k) + '` attribute does not support value `' 160588c88e8eSopenharmony_ci + v + '` (only numbers are supported).' 160688c88e8eSopenharmony_ci } 160788c88e8eSopenharmony_ci } 160888c88e8eSopenharmony_ci} 160988c88e8eSopenharmony_ci 161088c88e8eSopenharmony_civar GRADIENT_DIRECTION_VALIDATOR = function GRADIENT_DIRECTION_VALIDATOR(v) { 161188c88e8eSopenharmony_ci v = (v || "").toString().trim() 161288c88e8eSopenharmony_ci let values = v.split(/\s+/) 161388c88e8eSopenharmony_ci let invalid = false 161488c88e8eSopenharmony_ci let scaleY = ['top','bottom'] 161588c88e8eSopenharmony_ci let scaleX = ['left','right'] 161688c88e8eSopenharmony_ci let valueOrder = [] 161788c88e8eSopenharmony_ci 161888c88e8eSopenharmony_ci values.forEach(function (value) { 161988c88e8eSopenharmony_ci if (value === 'to') { 162088c88e8eSopenharmony_ci valueOrder.push(0) 162188c88e8eSopenharmony_ci } else if (scaleY.includes(value)) { 162288c88e8eSopenharmony_ci valueOrder.push(1) 162388c88e8eSopenharmony_ci } else if (scaleX.includes(value)) { 162488c88e8eSopenharmony_ci valueOrder.push(2) 162588c88e8eSopenharmony_ci } else { 162688c88e8eSopenharmony_ci invalid = true 162788c88e8eSopenharmony_ci } 162888c88e8eSopenharmony_ci }) 162988c88e8eSopenharmony_ci if (!invalid) { 163088c88e8eSopenharmony_ci if (valueOrder[0] === 0 && valueOrder.length > 1 && valueOrder.length < 4 && valueOrder[1] !== 0) { 163188c88e8eSopenharmony_ci if (valueOrder[2] && valueOrder[1] + valueOrder[2] !== 3) { 163288c88e8eSopenharmony_ci invalid = true 163388c88e8eSopenharmony_ci } 163488c88e8eSopenharmony_ci } 163588c88e8eSopenharmony_ci } 163688c88e8eSopenharmony_ci 163788c88e8eSopenharmony_ci return { 163888c88e8eSopenharmony_ci value: invalid ? null : v, 163988c88e8eSopenharmony_ci reason: invalid ? 164088c88e8eSopenharmony_ci function (k, v) { 164188c88e8eSopenharmony_ci return 'ERROR: The format of value `' + v + '` of the `' + util.camelCaseToHyphened(k) + 164288c88e8eSopenharmony_ci '` attribute is incorrect.' 164388c88e8eSopenharmony_ci } : null 164488c88e8eSopenharmony_ci } 164588c88e8eSopenharmony_ci} 164688c88e8eSopenharmony_ci 164788c88e8eSopenharmony_civar URL_VALIDATOR = function URL_VALIDATOR(v) { 164888c88e8eSopenharmony_ci v = (v || "").toString().trim() 164988c88e8eSopenharmony_ci if (v.match(/^none$/i)) { 165088c88e8eSopenharmony_ci return { value: "none" } 165188c88e8eSopenharmony_ci } 165288c88e8eSopenharmony_ci if (v.indexOf('@') >= 0) { 165388c88e8eSopenharmony_ci let result 165488c88e8eSopenharmony_ci // target format "@sys.media.sys_background_image" or '@sys.media.sys_background_image' 165588c88e8eSopenharmony_ci let SysResourceTypeRefReg = /['"]\s*@sys\.media\.(?<resName>\w+)\s*['"]/ 165688c88e8eSopenharmony_ci result = SysResourceTypeRefReg.exec(v) 165788c88e8eSopenharmony_ci if (result) { 165888c88e8eSopenharmony_ci const resourceName = result.groups['resName'] 165988c88e8eSopenharmony_ci if (resourceName && OHOS_THEME_PROP_GROUPS[resourceName]) { 166088c88e8eSopenharmony_ci return { value: "@sys.media." + OHOS_THEME_PROP_GROUPS[resourceName] } 166188c88e8eSopenharmony_ci } 166288c88e8eSopenharmony_ci } 166388c88e8eSopenharmony_ci // target format "@app.media.customized_background_image" or '@app.media.customized_background_image' 166488c88e8eSopenharmony_ci let AppResourceTypeRefReg = /['"]\s*@app\.media\.(?<resName>\w+)\s*['"]/ 166588c88e8eSopenharmony_ci result = AppResourceTypeRefReg.exec(v) 166688c88e8eSopenharmony_ci if (result) { 166788c88e8eSopenharmony_ci const resourceName = result.groups['resName'] 166888c88e8eSopenharmony_ci if (resourceName) { 166988c88e8eSopenharmony_ci return { value: "@app.media." + resourceName} 167088c88e8eSopenharmony_ci } 167188c88e8eSopenharmony_ci } 167288c88e8eSopenharmony_ci } 167388c88e8eSopenharmony_ci 167488c88e8eSopenharmony_ci let matchValues = URL_REGEXP.exec(v) 167588c88e8eSopenharmony_ci if (matchValues) { 167688c88e8eSopenharmony_ci if(isLiteDevice){ 167788c88e8eSopenharmony_ci return { value: matchValues[0] } 167888c88e8eSopenharmony_ci }else{ 167988c88e8eSopenharmony_ci if (matchValues[1].match(/^\.\.\/|^\.\//)) { 168088c88e8eSopenharmony_ci return { 168188c88e8eSopenharmony_ci value: matchValues[1], 168288c88e8eSopenharmony_ci isRelative: true 168388c88e8eSopenharmony_ci } 168488c88e8eSopenharmony_ci } 168588c88e8eSopenharmony_ci else { 168688c88e8eSopenharmony_ci return { value: matchValues[1] } 168788c88e8eSopenharmony_ci } 168888c88e8eSopenharmony_ci } 168988c88e8eSopenharmony_ci } 169088c88e8eSopenharmony_ci else { 169188c88e8eSopenharmony_ci return { 169288c88e8eSopenharmony_ci value: null, 169388c88e8eSopenharmony_ci reason: function (k, v) { 169488c88e8eSopenharmony_ci return 'ERROR: Value `' + v + '` of the `' + util.camelCaseToHyphened(k) + 169588c88e8eSopenharmony_ci '` attribute must be none or url(...).' 169688c88e8eSopenharmony_ci } 169788c88e8eSopenharmony_ci } 169888c88e8eSopenharmony_ci } 169988c88e8eSopenharmony_ci} 170088c88e8eSopenharmony_ci 170188c88e8eSopenharmony_civar NAME_VALIDATOR = function NAME_VALIDATOR(v) { 170288c88e8eSopenharmony_ci v = (v || "").toString().trim() 170388c88e8eSopenharmony_ci if (v.match(NAME_REGEXP)) { 170488c88e8eSopenharmony_ci return { value: v } 170588c88e8eSopenharmony_ci } else { 170688c88e8eSopenharmony_ci return { 170788c88e8eSopenharmony_ci value: null, 170888c88e8eSopenharmony_ci reason: function(k, v) { 170988c88e8eSopenharmony_ci return 'ERROR: The format of value `' + v + '` of the `' + util.camelCaseToHyphened(k) + 171088c88e8eSopenharmony_ci '` attribute is incorrect.' 171188c88e8eSopenharmony_ci } 171288c88e8eSopenharmony_ci } 171388c88e8eSopenharmony_ci } 171488c88e8eSopenharmony_ci} 171588c88e8eSopenharmony_ci 171688c88e8eSopenharmony_civar ITERATIONCOUNT_VALIDATOR = function ITERATIONCOUNT_VALIDATOR(v) { 171788c88e8eSopenharmony_ci v = (v || "").toString().trim() 171888c88e8eSopenharmony_ci if (v.match(INT_REGEXP)) { 171988c88e8eSopenharmony_ci return { 172088c88e8eSopenharmony_ci value: parseInt(v, 10) 172188c88e8eSopenharmony_ci } 172288c88e8eSopenharmony_ci } else if (v.match(/^infinite$/)) { 172388c88e8eSopenharmony_ci return { value: -1 } 172488c88e8eSopenharmony_ci } else { 172588c88e8eSopenharmony_ci return { 172688c88e8eSopenharmony_ci value: null, 172788c88e8eSopenharmony_ci reason: function(k, v) { 172888c88e8eSopenharmony_ci return 'ERROR: The format of value `' + v + '` of the `' + util.camelCaseToHyphened(k) + 172988c88e8eSopenharmony_ci '` attribute is incorrect (only integers and infinity are supported).' 173088c88e8eSopenharmony_ci } 173188c88e8eSopenharmony_ci } 173288c88e8eSopenharmony_ci } 173388c88e8eSopenharmony_ci} 173488c88e8eSopenharmony_ci 173588c88e8eSopenharmony_civar BACKGROUND_SIZE_VALIDATOR = function BACKGROUND_SIZE_VALIDATOR(v) { 173688c88e8eSopenharmony_ci v = (v || "").toString().trim() 173788c88e8eSopenharmony_ci let values = v.split(/\s+/) 173888c88e8eSopenharmony_ci const sizeReg = /auto|contain|cover/g 173988c88e8eSopenharmony_ci if (values.length === 1) { 174088c88e8eSopenharmony_ci if (/^(auto|contain|cover)$/.test(v)) { 174188c88e8eSopenharmony_ci return { value: v } 174288c88e8eSopenharmony_ci } else { 174388c88e8eSopenharmony_ci return PERCENTAGE_LENGTH_VALIDATOR(v) 174488c88e8eSopenharmony_ci } 174588c88e8eSopenharmony_ci } 174688c88e8eSopenharmony_ci if (values.length === 2 && !sizeReg.test(v)) { 174788c88e8eSopenharmony_ci return SHORTHAND_VALIDATOR(v, PERCENTAGE_LENGTH_VALIDATOR) 174888c88e8eSopenharmony_ci } 174988c88e8eSopenharmony_ci return { 175088c88e8eSopenharmony_ci value: null, 175188c88e8eSopenharmony_ci reason: function(k, v) { 175288c88e8eSopenharmony_ci return 'ERROR: Value `' + v + '` of the `' + util.camelCaseToHyphened(k) + '` attribute is incorrect.' 175388c88e8eSopenharmony_ci } 175488c88e8eSopenharmony_ci } 175588c88e8eSopenharmony_ci} 175688c88e8eSopenharmony_ci 175788c88e8eSopenharmony_civar BACKGROUND_POSITION_VALIDATOR = function BACKGROUND_POSITION_VALIDATOR(v) { 175888c88e8eSopenharmony_ci v = (v || '').toString().trim() 175988c88e8eSopenharmony_ci let values = v.split(/\s+/) 176088c88e8eSopenharmony_ci const positionReg = /left|right|top|bottom|center/g 176188c88e8eSopenharmony_ci if (values.length === 1) { 176288c88e8eSopenharmony_ci if (/^(left|right|top|bottom|center)$/.test(v)) { 176388c88e8eSopenharmony_ci return { value: v } 176488c88e8eSopenharmony_ci } else { 176588c88e8eSopenharmony_ci return PERCENTAGE_LENGTH_VALIDATOR(v) 176688c88e8eSopenharmony_ci } 176788c88e8eSopenharmony_ci } 176888c88e8eSopenharmony_ci if (values.length === 2) { 176988c88e8eSopenharmony_ci if (!positionReg.test(v)) { 177088c88e8eSopenharmony_ci return SHORTHAND_VALIDATOR(v, PERCENTAGE_LENGTH_VALIDATOR) 177188c88e8eSopenharmony_ci } else { 177288c88e8eSopenharmony_ci return CHECK_BACKGROUND_POSITION(v) 177388c88e8eSopenharmony_ci } 177488c88e8eSopenharmony_ci } 177588c88e8eSopenharmony_ci return { 177688c88e8eSopenharmony_ci value: null, 177788c88e8eSopenharmony_ci reason: function(k, v) { 177888c88e8eSopenharmony_ci return 'ERROR: Value `' + v + '` of the `' + util.camelCaseToHyphened(k) + '` attribute is incorrect.' 177988c88e8eSopenharmony_ci } 178088c88e8eSopenharmony_ci } 178188c88e8eSopenharmony_ci} 178288c88e8eSopenharmony_ci 178388c88e8eSopenharmony_civar CHECK_BACKGROUND_POSITION = function CHECK_BACKGROUND_POSITION(v) { 178488c88e8eSopenharmony_ci let values = v.split(/\s+/) 178588c88e8eSopenharmony_ci let result = [] 178688c88e8eSopenharmony_ci let reasons = [] 178788c88e8eSopenharmony_ci let directions = [] 178888c88e8eSopenharmony_ci values.forEach(function(value, index) { 178988c88e8eSopenharmony_ci if (/^(left|right|top|bottom|center)$/.test(value)) { 179088c88e8eSopenharmony_ci result.push(value) 179188c88e8eSopenharmony_ci if (checkDirection(value)) { 179288c88e8eSopenharmony_ci directions.push(checkDirection(value)) 179388c88e8eSopenharmony_ci } 179488c88e8eSopenharmony_ci } else { 179588c88e8eSopenharmony_ci let tempResult = PERCENTAGE_LENGTH_VALIDATOR(value) 179688c88e8eSopenharmony_ci if (tempResult.value) { 179788c88e8eSopenharmony_ci result.push(value) 179888c88e8eSopenharmony_ci if(index === 0){ 179988c88e8eSopenharmony_ci directions.push('horizon') 180088c88e8eSopenharmony_ci } else { 180188c88e8eSopenharmony_ci directions.push('vertical') 180288c88e8eSopenharmony_ci } 180388c88e8eSopenharmony_ci } 180488c88e8eSopenharmony_ci if (tempResult.reason) { 180588c88e8eSopenharmony_ci reasons.push(tempResult.reason) 180688c88e8eSopenharmony_ci } 180788c88e8eSopenharmony_ci } 180888c88e8eSopenharmony_ci }) 180988c88e8eSopenharmony_ci if (directions.length === 2 && directions[0] === directions[1]) { 181088c88e8eSopenharmony_ci reasons.push(function(k, v) { 181188c88e8eSopenharmony_ci return 'ERROR: Value `' + v + '` of the `' + util.camelCaseToHyphened(k) + '` attribute is incorrect.' 181288c88e8eSopenharmony_ci }) 181388c88e8eSopenharmony_ci } 181488c88e8eSopenharmony_ci return { 181588c88e8eSopenharmony_ci value: result.length > 0 ? result.join(' ') : null, 181688c88e8eSopenharmony_ci reason: reasons.length > 0 ? 181788c88e8eSopenharmony_ci function(k, v) { 181888c88e8eSopenharmony_ci return reasons.map(function(res) { 181988c88e8eSopenharmony_ci if (typeof res === 'function') { 182088c88e8eSopenharmony_ci return res(k, v) 182188c88e8eSopenharmony_ci } 182288c88e8eSopenharmony_ci }).join('\n') 182388c88e8eSopenharmony_ci }: null 182488c88e8eSopenharmony_ci } 182588c88e8eSopenharmony_ci} 182688c88e8eSopenharmony_ci 182788c88e8eSopenharmony_cifunction checkDirection(v) { 182888c88e8eSopenharmony_ci const scaleXReg = /^(left|right)$/ 182988c88e8eSopenharmony_ci const scaleYReg = /^(top|bottom)$/ 183088c88e8eSopenharmony_ci if (scaleXReg.test(v)) { 183188c88e8eSopenharmony_ci return 'horizon' 183288c88e8eSopenharmony_ci } 183388c88e8eSopenharmony_ci if (scaleYReg.test(v)) { 183488c88e8eSopenharmony_ci return 'vertical' 183588c88e8eSopenharmony_ci } 183688c88e8eSopenharmony_ci return null 183788c88e8eSopenharmony_ci} 183888c88e8eSopenharmony_ci 183988c88e8eSopenharmony_civar MYLOCATION_VALIDATOR = function MYLOCATION_VALIDATOR(v) { 184088c88e8eSopenharmony_ci v = (v || "").toString().trim() 184188c88e8eSopenharmony_ci let values = v.match(/\((.+?)\)/g) || [] 184288c88e8eSopenharmony_ci let replaceValue = null 184388c88e8eSopenharmony_ci if (values.length) { 184488c88e8eSopenharmony_ci for (let index = 0; index < values.length; index++) { 184588c88e8eSopenharmony_ci replaceValue = values[index].replace(/\s*/g, "") 184688c88e8eSopenharmony_ci v = v.replace(values[index], replaceValue); 184788c88e8eSopenharmony_ci } 184888c88e8eSopenharmony_ci } 184988c88e8eSopenharmony_ci let realValues = v.split(/\s+/) 185088c88e8eSopenharmony_ci let resultValues = [] 185188c88e8eSopenharmony_ci let valuesOrder = [] 185288c88e8eSopenharmony_ci let reason = null 185388c88e8eSopenharmony_ci if (realValues && realValues.length <= 3) { 185488c88e8eSopenharmony_ci realValues.forEach(function(realValue) { 185588c88e8eSopenharmony_ci if (typeof COLOR_VAR_VALIDATOR(realValue).value == 'string') { 185688c88e8eSopenharmony_ci resultValues.push(COLOR_VAR_VALIDATOR(realValue).value) 185788c88e8eSopenharmony_ci valuesOrder.push(0) 185888c88e8eSopenharmony_ci } else if (typeof URL_VALIDATOR(realValue).value == 'string') { 185988c88e8eSopenharmony_ci resultValues.push(URL_VALIDATOR(realValue).value) 186088c88e8eSopenharmony_ci valuesOrder.push(1) 186188c88e8eSopenharmony_ci } else { 186288c88e8eSopenharmony_ci reason = 'value' 186388c88e8eSopenharmony_ci } 186488c88e8eSopenharmony_ci }) 186588c88e8eSopenharmony_ci let n = -1 186688c88e8eSopenharmony_ci valuesOrder.forEach(function(order) { 186788c88e8eSopenharmony_ci if (order >= n) { 186888c88e8eSopenharmony_ci n = order 186988c88e8eSopenharmony_ci } else { 187088c88e8eSopenharmony_ci if (!reason) { 187188c88e8eSopenharmony_ci reason = 'order' 187288c88e8eSopenharmony_ci } 187388c88e8eSopenharmony_ci } 187488c88e8eSopenharmony_ci }) 187588c88e8eSopenharmony_ci if (reason) { 187688c88e8eSopenharmony_ci return { 187788c88e8eSopenharmony_ci value : null, 187888c88e8eSopenharmony_ci reason: function(k, v) { 187988c88e8eSopenharmony_ci return reason == 'value' ? 188088c88e8eSopenharmony_ci 'ERROR: Value `' + v + '` of the `' + util.camelCaseToHyphened(k) + 188188c88e8eSopenharmony_ci '` attribute does not meet the inspection standards for the color or url.' : 188288c88e8eSopenharmony_ci 'ERROR: Value `' + v + '` of the `' + util.camelCaseToHyphened(k) + 188388c88e8eSopenharmony_ci '` attribute must be set in order(color color url).' 188488c88e8eSopenharmony_ci } 188588c88e8eSopenharmony_ci } 188688c88e8eSopenharmony_ci } 188788c88e8eSopenharmony_ci return { 188888c88e8eSopenharmony_ci value: resultValues.join(" ") 188988c88e8eSopenharmony_ci } 189088c88e8eSopenharmony_ci } 189188c88e8eSopenharmony_ci return { 189288c88e8eSopenharmony_ci value: null, 189388c88e8eSopenharmony_ci reason: function(k, v) { 189488c88e8eSopenharmony_ci return 'ERROR: Value `' + v + '` of the `' + util.camelCaseToHyphened(k) + '` attribute is invalid.' 189588c88e8eSopenharmony_ci } 189688c88e8eSopenharmony_ci } 189788c88e8eSopenharmony_ci} 189888c88e8eSopenharmony_ci 189988c88e8eSopenharmony_civar TRANSFORM_ORIGIN_VALIDATOR = function TRANSFORM_ORIGIN_VALIDATOR(v) { 190088c88e8eSopenharmony_ci v = (v || "").toString().trim() 190188c88e8eSopenharmony_ci let values = v.split(/\s+/) 190288c88e8eSopenharmony_ci const positionReg = /left|right|top|bottom|center/g 190388c88e8eSopenharmony_ci if (values.length == 1) { 190488c88e8eSopenharmony_ci if (/^(left|right|top|bottom|center)$/.test(v)) { 190588c88e8eSopenharmony_ci return { value: v } 190688c88e8eSopenharmony_ci } else { 190788c88e8eSopenharmony_ci return PERCENTAGE_LENGTH_VALIDATOR(v); 190888c88e8eSopenharmony_ci } 190988c88e8eSopenharmony_ci } 191088c88e8eSopenharmony_ci if (values.length == 2) { 191188c88e8eSopenharmony_ci if (!positionReg.test(v)) { 191288c88e8eSopenharmony_ci return SHORTHAND_VALIDATOR(v, PERCENTAGE_LENGTH_VALIDATOR) 191388c88e8eSopenharmony_ci } else { 191488c88e8eSopenharmony_ci return CHECK_TRANSFORM_ORIGIN(values) 191588c88e8eSopenharmony_ci } 191688c88e8eSopenharmony_ci } 191788c88e8eSopenharmony_ci return { 191888c88e8eSopenharmony_ci value: null, 191988c88e8eSopenharmony_ci reason: function (k, v) { 192088c88e8eSopenharmony_ci return 'ERROR: Value `' + v + '` of the `' + util.camelCaseToHyphened(k) + 192188c88e8eSopenharmony_ci '` attribute is invalid. such as left 100px or 50% bottom.' 192288c88e8eSopenharmony_ci } 192388c88e8eSopenharmony_ci } 192488c88e8eSopenharmony_ci} 192588c88e8eSopenharmony_ci 192688c88e8eSopenharmony_civar CHECK_TRANSFORM_ORIGIN = function CHECK_TRANSFORM_ORIGIN(values) { 192788c88e8eSopenharmony_ci let result = [] 192888c88e8eSopenharmony_ci let reasons = [] 192988c88e8eSopenharmony_ci let directions = [] 193088c88e8eSopenharmony_ci values.forEach(function (value, index) { 193188c88e8eSopenharmony_ci if (/^(left|right|top|bottom|center)$/.test(value)) { 193288c88e8eSopenharmony_ci result.push(value) 193388c88e8eSopenharmony_ci directions.push(checkDirection(value)) 193488c88e8eSopenharmony_ci } else { 193588c88e8eSopenharmony_ci let tempResult = PERCENTAGE_LENGTH_VALIDATOR(value) 193688c88e8eSopenharmony_ci if (tempResult.value) { 193788c88e8eSopenharmony_ci result.push(value) 193888c88e8eSopenharmony_ci if (index === 0) { 193988c88e8eSopenharmony_ci directions.push('horizon') 194088c88e8eSopenharmony_ci } else { 194188c88e8eSopenharmony_ci directions.push('vertical') 194288c88e8eSopenharmony_ci } 194388c88e8eSopenharmony_ci } 194488c88e8eSopenharmony_ci if (tempResult.reason) { 194588c88e8eSopenharmony_ci reasons.push(tempResult.reason) 194688c88e8eSopenharmony_ci } 194788c88e8eSopenharmony_ci } 194888c88e8eSopenharmony_ci }) 194988c88e8eSopenharmony_ci if (directions.length != 2 || directions.length === 2 && 195088c88e8eSopenharmony_ci (directions[0] === 'vertical' || directions[1] === 'horizon')) { 195188c88e8eSopenharmony_ci reasons.push(function (k, v) { 195288c88e8eSopenharmony_ci return 'ERROR: Value `' + v + '` of the `' + util.camelCaseToHyphened(k) + '` attribute is incorrect.' 195388c88e8eSopenharmony_ci }) 195488c88e8eSopenharmony_ci } 195588c88e8eSopenharmony_ci return { 195688c88e8eSopenharmony_ci value: result.length > 0 ? result.join(' ') : null, 195788c88e8eSopenharmony_ci reason: reasons.length > 0 ? 195888c88e8eSopenharmony_ci function (k, v) { 195988c88e8eSopenharmony_ci return reasons.map(function (res) { 196088c88e8eSopenharmony_ci if (typeof res === 'function') { 196188c88e8eSopenharmony_ci return res(k, v) 196288c88e8eSopenharmony_ci } 196388c88e8eSopenharmony_ci }).join('\n') 196488c88e8eSopenharmony_ci } : null 196588c88e8eSopenharmony_ci } 196688c88e8eSopenharmony_ci} 196788c88e8eSopenharmony_ci 196888c88e8eSopenharmony_civar GRID_VALIDATOR = function GRID_VALIDATOR(v) { 196988c88e8eSopenharmony_ci v = (v || '').toString().trim() 197088c88e8eSopenharmony_ci if (v == 'auto' || v == 'auto-fill') { 197188c88e8eSopenharmony_ci return { value: v } 197288c88e8eSopenharmony_ci } else { 197388c88e8eSopenharmony_ci return LENGTH(v, SUPPORT_CSS_GRID_UNIT) 197488c88e8eSopenharmony_ci } 197588c88e8eSopenharmony_ci} 197688c88e8eSopenharmony_ci 197788c88e8eSopenharmony_civar GRID_TEMPLATE_VALIDATOR = function GRID_TEMPLATE_VALIDATOR(v) { 197888c88e8eSopenharmony_ci v = (v || '').toString().trim() 197988c88e8eSopenharmony_ci if (v.match(/^repeat/)) { 198088c88e8eSopenharmony_ci let str = [] 198188c88e8eSopenharmony_ci if (v.match(/auto-fill/)) { 198288c88e8eSopenharmony_ci let match = v.match(/^repeat\((.+),(.+)\)/) 198388c88e8eSopenharmony_ci str.push(match[1].trim(), match[2].trim()) 198488c88e8eSopenharmony_ci return GRID_TEMPLATE_VALIDATOR(str.join(' ')) 198588c88e8eSopenharmony_ci } else { 198688c88e8eSopenharmony_ci let match = v.match(/^repeat\((\d+),(.+)\)/) 198788c88e8eSopenharmony_ci if (match[1] && match[2]) { 198888c88e8eSopenharmony_ci let n = match[1] 198988c88e8eSopenharmony_ci while (n > 0) { 199088c88e8eSopenharmony_ci str.push(match[2].trim()) 199188c88e8eSopenharmony_ci n-- 199288c88e8eSopenharmony_ci } 199388c88e8eSopenharmony_ci return GRID_TEMPLATE_VALIDATOR(str.join(' ')) 199488c88e8eSopenharmony_ci } 199588c88e8eSopenharmony_ci else { 199688c88e8eSopenharmony_ci return { 199788c88e8eSopenharmony_ci value: null, 199888c88e8eSopenharmony_ci reason: function reason(k, v, result) { 199988c88e8eSopenharmony_ci return 'ERROR: The `' + util.camelCaseToHyphened(k) + '` attribute does not support value `' + v + '`.' 200088c88e8eSopenharmony_ci } 200188c88e8eSopenharmony_ci } 200288c88e8eSopenharmony_ci } 200388c88e8eSopenharmony_ci } 200488c88e8eSopenharmony_ci } 200588c88e8eSopenharmony_ci else { 200688c88e8eSopenharmony_ci let value = [] 200788c88e8eSopenharmony_ci let reason = [] 200888c88e8eSopenharmony_ci let results = v.split(/\s+/).map(GRID_VALIDATOR) 200988c88e8eSopenharmony_ci for (let i = 0; i < results.length; ++i) { 201088c88e8eSopenharmony_ci let res = results[i] 201188c88e8eSopenharmony_ci if (!res.value) { 201288c88e8eSopenharmony_ci value = null 201388c88e8eSopenharmony_ci reason = res.reason 201488c88e8eSopenharmony_ci break 201588c88e8eSopenharmony_ci } 201688c88e8eSopenharmony_ci value.push(res.value) 201788c88e8eSopenharmony_ci if (res.reason) { 201888c88e8eSopenharmony_ci reason.push(res.reason) 201988c88e8eSopenharmony_ci } 202088c88e8eSopenharmony_ci } 202188c88e8eSopenharmony_ci 202288c88e8eSopenharmony_ci if (!value) { 202388c88e8eSopenharmony_ci return { 202488c88e8eSopenharmony_ci value: value, 202588c88e8eSopenharmony_ci reason: reason 202688c88e8eSopenharmony_ci } 202788c88e8eSopenharmony_ci } else { 202888c88e8eSopenharmony_ci return { 202988c88e8eSopenharmony_ci value: value.join(' '), 203088c88e8eSopenharmony_ci reason: reason.length > 0 ? function(k, v, result) { 203188c88e8eSopenharmony_ci return reason.map(function (res) { 203288c88e8eSopenharmony_ci if (typeof res === 'function') { 203388c88e8eSopenharmony_ci return res(k, v, result) 203488c88e8eSopenharmony_ci } 203588c88e8eSopenharmony_ci }).join('\n') 203688c88e8eSopenharmony_ci } : null 203788c88e8eSopenharmony_ci } 203888c88e8eSopenharmony_ci } 203988c88e8eSopenharmony_ci } 204088c88e8eSopenharmony_ci} 204188c88e8eSopenharmony_ci 204288c88e8eSopenharmony_civar DATE_VALIDATOR = function DATE_VALIDATOR(v) { 204388c88e8eSopenharmony_ci v = (v || '').toString().trim() 204488c88e8eSopenharmony_ci if (DATE_REGEXP.test(v)) { 204588c88e8eSopenharmony_ci return { value: v } 204688c88e8eSopenharmony_ci } else { 204788c88e8eSopenharmony_ci return { 204888c88e8eSopenharmony_ci value: null, 204988c88e8eSopenharmony_ci reason:function (k, v, result) { 205088c88e8eSopenharmony_ci return 'ERROR: The format of value `' + v + '` of the `' + 205188c88e8eSopenharmony_ci util.camelCaseToHyphened(k) + '` attribute is incorrect.' 205288c88e8eSopenharmony_ci } 205388c88e8eSopenharmony_ci } 205488c88e8eSopenharmony_ci } 205588c88e8eSopenharmony_ci} 205688c88e8eSopenharmony_ci 205788c88e8eSopenharmony_civar FILTER_VALIDATOR = function FILTER_VALIDATOR(v) { 205888c88e8eSopenharmony_ci v = (v || '').toString().trim().replace(/\s*/g, '') 205988c88e8eSopenharmony_ci if (FILTER_REGEXP.test(v)) { 206088c88e8eSopenharmony_ci return { value: v } 206188c88e8eSopenharmony_ci } else { 206288c88e8eSopenharmony_ci return { 206388c88e8eSopenharmony_ci value: null, 206488c88e8eSopenharmony_ci reason:function (k, v, result) { 206588c88e8eSopenharmony_ci return 'ERROR: The format of value `' + v + '` of the `' + 206688c88e8eSopenharmony_ci util.camelCaseToHyphened(k) + '` attribute is incorrect.' 206788c88e8eSopenharmony_ci } 206888c88e8eSopenharmony_ci } 206988c88e8eSopenharmony_ci } 207088c88e8eSopenharmony_ci} 207188c88e8eSopenharmony_ci 207288c88e8eSopenharmony_civar FILTER_PERCENTAGE_VALIDATOR = function FILTER_PERCENTAGE_VALIDATOR(v) { 207388c88e8eSopenharmony_ci v = (v || '').toString().trim().replace(/\s*,\s*/g, " ") 207488c88e8eSopenharmony_ci if (FILTER_PERCENTAGE_REGEXP.test(v)) { 207588c88e8eSopenharmony_ci return { value: v } 207688c88e8eSopenharmony_ci } 207788c88e8eSopenharmony_ci if (FILTER_STYLE_REGEXP.test(v)) { 207888c88e8eSopenharmony_ci const values = v.trim().split(/\s+/) 207988c88e8eSopenharmony_ci if(values[1] && values.length === 2){ 208088c88e8eSopenharmony_ci const blurStyleValidator = genEnumValidator(['small_light', 'medium_light', 'large_light', 208188c88e8eSopenharmony_ci 'xlarge_light', 'small_dark', 'medium_dark', 'large_dark', 'xlarge_dark']) 208288c88e8eSopenharmony_ci const blurStyleResult = blurStyleValidator(values[1]) 208388c88e8eSopenharmony_ci if(util.isValidValue(blurStyleResult.value)){ 208488c88e8eSopenharmony_ci return { value: v } 208588c88e8eSopenharmony_ci } 208688c88e8eSopenharmony_ci let reasonMaps = []; 208788c88e8eSopenharmony_ci let length = 0; 208888c88e8eSopenharmony_ci let check = checkReason(blurStyleResult, 'window-filter', values[1], length) 208988c88e8eSopenharmony_ci if(check.realReason !== null) { 209088c88e8eSopenharmony_ci reasonMaps.push(check.realReason) 209188c88e8eSopenharmony_ci } 209288c88e8eSopenharmony_ci return { 209388c88e8eSopenharmony_ci value: check.length < 2 ? JSON.stringify(blurStyleResult.value) : null, 209488c88e8eSopenharmony_ci reason: function(k, v) { 209588c88e8eSopenharmony_ci return 'ERROR: ' + reasonMaps 209688c88e8eSopenharmony_ci } 209788c88e8eSopenharmony_ci } 209888c88e8eSopenharmony_ci } 209988c88e8eSopenharmony_ci } 210088c88e8eSopenharmony_ci return { 210188c88e8eSopenharmony_ci value: null, 210288c88e8eSopenharmony_ci reason:function (k, v, result) { 210388c88e8eSopenharmony_ci return 'ERROR: The format of value `' + v + '` of the `' + util.camelCaseToHyphened(k) + 210488c88e8eSopenharmony_ci '` attribute is incorrect.' 210588c88e8eSopenharmony_ci } 210688c88e8eSopenharmony_ci } 210788c88e8eSopenharmony_ci} 210888c88e8eSopenharmony_ci 210988c88e8eSopenharmony_civar BORDER_IMAGE_VALIDATOR = function BORDER_IMAGE_VALIDATOR(v) { 211088c88e8eSopenharmony_ci var regexp = /(repeating-linear|linear).*?(?=\s*(repeating|linear)|$)/g; 211188c88e8eSopenharmony_ci if (regexp.test(v)) { 211288c88e8eSopenharmony_ci return BORDER_IMAGE_GRADIENT_VALIDATOR(v); 211388c88e8eSopenharmony_ci } else { 211488c88e8eSopenharmony_ci return BORDER_IMAGE_URL_VALIDATOR(v); 211588c88e8eSopenharmony_ci } 211688c88e8eSopenharmony_ci} 211788c88e8eSopenharmony_ci 211888c88e8eSopenharmony_civar BORDER_IMAGE_URL_VALIDATOR = function BORDER_IMAGE_URL_VALIDATOR(v) { 211988c88e8eSopenharmony_ci let base = { 212088c88e8eSopenharmony_ci values: [] 212188c88e8eSopenharmony_ci }; 212288c88e8eSopenharmony_ci let value = { 212388c88e8eSopenharmony_ci url: "", 212488c88e8eSopenharmony_ci repeat: "" 212588c88e8eSopenharmony_ci }; 212688c88e8eSopenharmony_ci var URL_REGEXP_FIRST = /^url\(\s*['"]?\s*([^()]+?)\s*['"]?\s*\)(.*)/; 212788c88e8eSopenharmony_ci var regexpFirst = /(stretch|round|repeat|space)$/; 212888c88e8eSopenharmony_ci var URL_REGEXP_SECOND = /^(.*)(stretch|round|repeat|space)$/; 212988c88e8eSopenharmony_ci let result; 213088c88e8eSopenharmony_ci result = URL_REGEXP_FIRST.exec(v); 213188c88e8eSopenharmony_ci if (regexpFirst.test(result[2])) { 213288c88e8eSopenharmony_ci let res = URL_REGEXP_SECOND.exec(result[2]); 213388c88e8eSopenharmony_ci value = BORDER_IMAGE_NOL(res[1]); 213488c88e8eSopenharmony_ci value.repeat = res[2]; 213588c88e8eSopenharmony_ci } else { 213688c88e8eSopenharmony_ci var reg = /px|%/; 213788c88e8eSopenharmony_ci if (reg.test(result[2])) { 213888c88e8eSopenharmony_ci value = BORDER_IMAGE_NOL(result[2]); 213988c88e8eSopenharmony_ci } 214088c88e8eSopenharmony_ci } 214188c88e8eSopenharmony_ci value.url = result[1]; 214288c88e8eSopenharmony_ci base.values.push(value); 214388c88e8eSopenharmony_ci return { 214488c88e8eSopenharmony_ci value: JSON.stringify(base) 214588c88e8eSopenharmony_ci }; 214688c88e8eSopenharmony_ci} 214788c88e8eSopenharmony_ci 214888c88e8eSopenharmony_civar BORDER_IMAGE_NOL = function BORDER_IMAGE_NOL(v) { 214988c88e8eSopenharmony_ci let value = { 215088c88e8eSopenharmony_ci url: "", 215188c88e8eSopenharmony_ci repeat: "" 215288c88e8eSopenharmony_ci }; 215388c88e8eSopenharmony_ci var reg = /px|%/; 215488c88e8eSopenharmony_ci if (!reg.test(v)) { 215588c88e8eSopenharmony_ci return value; 215688c88e8eSopenharmony_ci } 215788c88e8eSopenharmony_ci let num = v.split(/\//); 215888c88e8eSopenharmony_ci switch (num.length) { 215988c88e8eSopenharmony_ci case 1: 216088c88e8eSopenharmony_ci value.slice = BORDER_IMAGE_SPLIT(num[0]); 216188c88e8eSopenharmony_ci break; 216288c88e8eSopenharmony_ci case 2: 216388c88e8eSopenharmony_ci value.slice = BORDER_IMAGE_SPLIT(num[0]); 216488c88e8eSopenharmony_ci value.width = BORDER_IMAGE_SPLIT(num[1]); 216588c88e8eSopenharmony_ci break; 216688c88e8eSopenharmony_ci case 3: 216788c88e8eSopenharmony_ci value.slice = BORDER_IMAGE_SPLIT(num[0]); 216888c88e8eSopenharmony_ci value.width = BORDER_IMAGE_SPLIT(num[1]); 216988c88e8eSopenharmony_ci value.outset = BORDER_IMAGE_SPLIT(num[2]); 217088c88e8eSopenharmony_ci break; 217188c88e8eSopenharmony_ci } 217288c88e8eSopenharmony_ci return value; 217388c88e8eSopenharmony_ci} 217488c88e8eSopenharmony_ci 217588c88e8eSopenharmony_civar BORDER_IMAGE_SPLIT = function BORDER_IMAGE_SPLIT(v) { 217688c88e8eSopenharmony_ci const NUM_REGEXP = SHORTHAND_PERCENTAGE_LENGTH_VALIDATOR(v); 217788c88e8eSopenharmony_ci let result = []; 217888c88e8eSopenharmony_ci const value = NUM_REGEXP.value.split(/\s/); 217988c88e8eSopenharmony_ci value.forEach(element => { 218088c88e8eSopenharmony_ci result.push(element); 218188c88e8eSopenharmony_ci }); 218288c88e8eSopenharmony_ci return result; 218388c88e8eSopenharmony_ci} 218488c88e8eSopenharmony_ci 218588c88e8eSopenharmony_civar BORDER_IMAGE_GRADIENT_VALIDATOR = function BORDER_IMAGE_GRADIENT_VALIDATOR(v) { 218688c88e8eSopenharmony_ci v = (v || "").toString().trim() 218788c88e8eSopenharmony_ci var BORDER_IMAGE_GRADIENT_ITEM_REGEXP = /^([0-9a-zA-Z-]+)\((.*)\)(.*)/; 218888c88e8eSopenharmony_ci let base = { 218988c88e8eSopenharmony_ci values: [] 219088c88e8eSopenharmony_ci } 219188c88e8eSopenharmony_ci let valueMatch = v.match(BORDER_IMAGE_GRADIENT_ITEM_REGEXP) 219288c88e8eSopenharmony_ci if (valueMatch) { 219388c88e8eSopenharmony_ci const gradientStr = valueMatch[1].toString() + '(' + valueMatch[2].toString() + ')'; 219488c88e8eSopenharmony_ci const gradient = LINEAR_GRADIENT_VALIDATOR(gradientStr); 219588c88e8eSopenharmony_ci let value = {}; 219688c88e8eSopenharmony_ci if (util.isValidValue(gradient.value)) { 219788c88e8eSopenharmony_ci value = JSON.parse(gradient.value) 219888c88e8eSopenharmony_ci } 219988c88e8eSopenharmony_ci var reg = /px|%/; 220088c88e8eSopenharmony_ci if (valueMatch[3].match(reg)) { 220188c88e8eSopenharmony_ci value.slice = BORDER_IMAGE_SPLIT(valueMatch[3]); 220288c88e8eSopenharmony_ci } 220388c88e8eSopenharmony_ci base.values.push(value); 220488c88e8eSopenharmony_ci return { 220588c88e8eSopenharmony_ci value: JSON.stringify(base), 220688c88e8eSopenharmony_ci reason: gradient.reason 220788c88e8eSopenharmony_ci } 220888c88e8eSopenharmony_ci } 220988c88e8eSopenharmony_ci return { 221088c88e8eSopenharmony_ci value: null, 221188c88e8eSopenharmony_ci reason: function(k, v) { 221288c88e8eSopenharmony_ci return 'ERROR: The format of value `' + v + '` of the `' + util.camelCaseToHyphened(k) 221388c88e8eSopenharmony_ci + '` attribute is incorrect.' 221488c88e8eSopenharmony_ci } 221588c88e8eSopenharmony_ci } 221688c88e8eSopenharmony_ci} 221788c88e8eSopenharmony_ci 221888c88e8eSopenharmony_civar Color_Picker_VALIDATOR = function Color_Picker_VALIDATOR(v) { 221988c88e8eSopenharmony_ci v = (v || "").toString().trim() 222088c88e8eSopenharmony_ci let num = v.split(/\//); 222188c88e8eSopenharmony_ci let base = { 222288c88e8eSopenharmony_ci cValues: [] 222388c88e8eSopenharmony_ci } 222488c88e8eSopenharmony_ci num.forEach(element => { 222588c88e8eSopenharmony_ci base.cValues.push(COLOR_VAR_VALIDATOR(element).value); 222688c88e8eSopenharmony_ci }); 222788c88e8eSopenharmony_ci return { 222888c88e8eSopenharmony_ci value: JSON.stringify(base) 222988c88e8eSopenharmony_ci } 223088c88e8eSopenharmony_ci} 223188c88e8eSopenharmony_ci 223288c88e8eSopenharmony_civar RICH_PROP_NAME_GROUPS = { 223388c88e8eSopenharmony_ci boxModel: { 223488c88e8eSopenharmony_ci width: PERCENTAGE_LENGTH_VALIDATOR, 223588c88e8eSopenharmony_ci height: PERCENTAGE_LENGTH_VALIDATOR, 223688c88e8eSopenharmony_ci overflow: genEnumValidator(['auto', 'hidden','scroll','visible']), 223788c88e8eSopenharmony_ci padding: SHORTHAND_PERCENTAGE_LENGTH_VALIDATOR, 223888c88e8eSopenharmony_ci paddingLeft: PERCENTAGE_LENGTH_VALIDATOR, 223988c88e8eSopenharmony_ci paddingRight: PERCENTAGE_LENGTH_VALIDATOR, 224088c88e8eSopenharmony_ci paddingTop: PERCENTAGE_LENGTH_VALIDATOR, 224188c88e8eSopenharmony_ci paddingBottom: PERCENTAGE_LENGTH_VALIDATOR, 224288c88e8eSopenharmony_ci paddingStart: PERCENTAGE_LENGTH_VALIDATOR, 224388c88e8eSopenharmony_ci paddingEnd: PERCENTAGE_LENGTH_VALIDATOR, 224488c88e8eSopenharmony_ci margin: SHORTHAND_AUTO_PERCENTAGE_LENGTH_VALIDATOR, 224588c88e8eSopenharmony_ci marginLeft: AUTO_PERCENTAGE_LENGTH_VALIDATOR, 224688c88e8eSopenharmony_ci marginRight: AUTO_PERCENTAGE_LENGTH_VALIDATOR, 224788c88e8eSopenharmony_ci marginTop: AUTO_PERCENTAGE_LENGTH_VALIDATOR, 224888c88e8eSopenharmony_ci marginBottom: AUTO_PERCENTAGE_LENGTH_VALIDATOR, 224988c88e8eSopenharmony_ci marginStart: PERCENTAGE_LENGTH_VALIDATOR, 225088c88e8eSopenharmony_ci marginEnd: PERCENTAGE_LENGTH_VALIDATOR, 225188c88e8eSopenharmony_ci placeholderColor: COLOR_VAR_VALIDATOR, 225288c88e8eSopenharmony_ci selectedColor: COLOR_VAR_VALIDATOR, 225388c88e8eSopenharmony_ci caretColor: COLOR_VAR_VALIDATOR, 225488c88e8eSopenharmony_ci strokeWidth: LENGTH_VALIDATOR, 225588c88e8eSopenharmony_ci progressColor: COLOR_VAR_VALIDATOR, 225688c88e8eSopenharmony_ci slideWidth: LENGTH_VALIDATOR, 225788c88e8eSopenharmony_ci slideMargin: LENGTH_VALIDATOR, 225888c88e8eSopenharmony_ci resizeMode: genEnumValidator(['cover', 'contain', 'stretch', 'center']), 225988c88e8eSopenharmony_ci columns: NUMBER_VALIDATOR, 226088c88e8eSopenharmony_ci columnSpan: NUMBER_VALIDATOR, 226188c88e8eSopenharmony_ci maskColor: COLOR_VAR_VALIDATOR, 226288c88e8eSopenharmony_ci mylocation: MYLOCATION_VALIDATOR, 226388c88e8eSopenharmony_ci mylocationFillColor: COLOR_VAR_VALIDATOR, 226488c88e8eSopenharmony_ci mylocationStrokeColor: COLOR_VAR_VALIDATOR, 226588c88e8eSopenharmony_ci mylocationIconPath: URL_VALIDATOR, 226688c88e8eSopenharmony_ci displayIndex: NUMBER_VALIDATOR, 226788c88e8eSopenharmony_ci aspectRatio: NUMBER_VALIDATOR, 226888c88e8eSopenharmony_ci minWidth: PERCENTAGE_LENGTH_VALIDATOR, 226988c88e8eSopenharmony_ci minHeight: PERCENTAGE_LENGTH_VALIDATOR, 227088c88e8eSopenharmony_ci maxWidth: PERCENTAGE_LENGTH_VALIDATOR, 227188c88e8eSopenharmony_ci maxHeight: PERCENTAGE_LENGTH_VALIDATOR, 227288c88e8eSopenharmony_ci flexWeight: NUMBER_VALIDATOR, 227388c88e8eSopenharmony_ci boxShadow: BOX_SHADOW_VALIDATOR, 227488c88e8eSopenharmony_ci boxShadowH: LENGTH_VALIDATOR, 227588c88e8eSopenharmony_ci boxShadowV: LENGTH_VALIDATOR, 227688c88e8eSopenharmony_ci boxShadowBlur: LENGTH_VALIDATOR, 227788c88e8eSopenharmony_ci boxShadowSpread: LENGTH_VALIDATOR, 227888c88e8eSopenharmony_ci boxShadowColor: COLOR_VAR_VALIDATOR, 227988c88e8eSopenharmony_ci filter: FILTER_VALIDATOR, 228088c88e8eSopenharmony_ci backdropFilter: FILTER_VALIDATOR, 228188c88e8eSopenharmony_ci windowFilter: FILTER_PERCENTAGE_VALIDATOR, 228288c88e8eSopenharmony_ci transitionEffect: genEnumValidator(['unfold', 'none']) 228388c88e8eSopenharmony_ci }, 228488c88e8eSopenharmony_ci div: { 228588c88e8eSopenharmony_ci gridTemplateColumns: GRID_TEMPLATE_VALIDATOR, 228688c88e8eSopenharmony_ci gridTemplateRows: GRID_TEMPLATE_VALIDATOR, 228788c88e8eSopenharmony_ci gridGap: LENGTH_VALIDATOR, 228888c88e8eSopenharmony_ci gridColumnsGap: LENGTH_VALIDATOR, 228988c88e8eSopenharmony_ci gridRowsGap: LENGTH_VALIDATOR, 229088c88e8eSopenharmony_ci gridRowStart: NUMBER_VALIDATOR, 229188c88e8eSopenharmony_ci gridRowEnd: NUMBER_VALIDATOR, 229288c88e8eSopenharmony_ci gridColumnStart: NUMBER_VALIDATOR, 229388c88e8eSopenharmony_ci gridColumnEnd: NUMBER_VALIDATOR, 229488c88e8eSopenharmony_ci gridAutoFlow: genEnumValidator(['row', 'column']) 229588c88e8eSopenharmony_ci }, 229688c88e8eSopenharmony_ci border: { 229788c88e8eSopenharmony_ci border: BORDER_VALIDATOR, 229888c88e8eSopenharmony_ci borderWidth: SHORTHAND_LENGTH_VALIDATOR, 229988c88e8eSopenharmony_ci borderLeftWidth: LENGTH_VALIDATOR, 230088c88e8eSopenharmony_ci borderTopWidth: LENGTH_VALIDATOR, 230188c88e8eSopenharmony_ci borderRightWidth: LENGTH_VALIDATOR, 230288c88e8eSopenharmony_ci borderBottomWidth: LENGTH_VALIDATOR, 230388c88e8eSopenharmony_ci borderColor: SHORTHAND_COLOR_VALIDATOR, 230488c88e8eSopenharmony_ci borderLeftColor: COLOR_VAR_VALIDATOR, 230588c88e8eSopenharmony_ci borderTopColor: COLOR_VAR_VALIDATOR, 230688c88e8eSopenharmony_ci borderRightColor: COLOR_VAR_VALIDATOR, 230788c88e8eSopenharmony_ci borderBottomColor: COLOR_VAR_VALIDATOR, 230888c88e8eSopenharmony_ci borderStyle: SHORTHAND_STYLE_VALIDATOR, 230988c88e8eSopenharmony_ci borderTopStyle: STYLE_VALIDATOR, 231088c88e8eSopenharmony_ci borderRightStyle: STYLE_VALIDATOR, 231188c88e8eSopenharmony_ci borderBottomStyle: STYLE_VALIDATOR, 231288c88e8eSopenharmony_ci borderLeftStyle: STYLE_VALIDATOR, 231388c88e8eSopenharmony_ci borderRadius: PERCENTAGE_LENGTH_VALIDATOR, 231488c88e8eSopenharmony_ci borderBottomLeftRadius: PERCENTAGE_LENGTH_VALIDATOR, 231588c88e8eSopenharmony_ci borderBottomRightRadius: PERCENTAGE_LENGTH_VALIDATOR, 231688c88e8eSopenharmony_ci borderTopLeftRadius: PERCENTAGE_LENGTH_VALIDATOR, 231788c88e8eSopenharmony_ci borderTopRightRadius: PERCENTAGE_LENGTH_VALIDATOR, 231888c88e8eSopenharmony_ci borderLeft: BORDER_VALIDATOR, 231988c88e8eSopenharmony_ci borderRight: BORDER_VALIDATOR, 232088c88e8eSopenharmony_ci borderTop: BORDER_VALIDATOR, 232188c88e8eSopenharmony_ci borderBottom: BORDER_VALIDATOR, 232288c88e8eSopenharmony_ci borderImage: BORDER_IMAGE_VALIDATOR, 232388c88e8eSopenharmony_ci borderImageSource: URL_VALIDATOR, 232488c88e8eSopenharmony_ci borderImageOutset: SHORTHAND_PERCENTAGE_LENGTH_VALIDATOR, 232588c88e8eSopenharmony_ci borderImageSlice: SHORTHAND_PERCENTAGE_LENGTH_VALIDATOR, 232688c88e8eSopenharmony_ci borderImageWidth: SHORTHAND_PERCENTAGE_LENGTH_VALIDATOR, 232788c88e8eSopenharmony_ci borderImageRepeat: genEnumValidator(['stretch', 'round', 'repeat', 'space']) 232888c88e8eSopenharmony_ci }, 232988c88e8eSopenharmony_ci indicator: { 233088c88e8eSopenharmony_ci indicatorSize: LENGTH_VALIDATOR, 233188c88e8eSopenharmony_ci indicatorTop: PERCENTAGE_LENGTH_VALIDATOR, 233288c88e8eSopenharmony_ci indicatorRight: PERCENTAGE_LENGTH_VALIDATOR, 233388c88e8eSopenharmony_ci indicatorBottom: PERCENTAGE_LENGTH_VALIDATOR, 233488c88e8eSopenharmony_ci indicatorLeft: PERCENTAGE_LENGTH_VALIDATOR, 233588c88e8eSopenharmony_ci indicatorColor: COLOR_VAR_VALIDATOR, 233688c88e8eSopenharmony_ci indicatorSelectedColor: COLOR_VAR_VALIDATOR 233788c88e8eSopenharmony_ci }, 233888c88e8eSopenharmony_ci animation: { 233988c88e8eSopenharmony_ci animationDuration: TIME_VALIDATOR, 234088c88e8eSopenharmony_ci animationDelay: TIME_VALIDATOR, 234188c88e8eSopenharmony_ci animationName: NAME_VALIDATOR, 234288c88e8eSopenharmony_ci animationTimingFunction: TRANSITION_TIMING_FUNCTION_VALIDATOR, 234388c88e8eSopenharmony_ci animationIterationCount: ITERATIONCOUNT_VALIDATOR, 234488c88e8eSopenharmony_ci animationFillMode: genEnumValidator(['none', 'forwards', 'backwards', 'both']), 234588c88e8eSopenharmony_ci animationPlayState: genEnumValidator(['running', 'paused']), 234688c88e8eSopenharmony_ci animationDirection: genEnumValidator(['normal', 'reverse', 'alternate', 'alternate-reverse']), 234788c88e8eSopenharmony_ci animation: ANIMATION_VALIDATOR, 234888c88e8eSopenharmony_ci }, 234988c88e8eSopenharmony_ci flexbox: { 235088c88e8eSopenharmony_ci flex: genEnumValidator(['none', 'auto', 'initial']), 235188c88e8eSopenharmony_ci flexWrap: genEnumValidator(['nowrap', 'wrap']), 235288c88e8eSopenharmony_ci flexGrow: NUMBER_VALIDATOR, 235388c88e8eSopenharmony_ci flexShrink: NUMBER_VALIDATOR, 235488c88e8eSopenharmony_ci flexBasis: LENGTH_VALIDATOR, 235588c88e8eSopenharmony_ci flexDirection: genEnumValidator(['row', 'column']), 235688c88e8eSopenharmony_ci justifyContent: genEnumValidator(['flex-start', 'flex-end', 'center', 'space-between', 235788c88e8eSopenharmony_ci 'space-around', 'space-evenly']), 235888c88e8eSopenharmony_ci alignItems: genEnumValidator(['stretch', 'flex-start', 'flex-end', 'center', 'baseline']), 235988c88e8eSopenharmony_ci alignContent: genEnumValidator(['stretch', 'flex-start', 'flex-end', 'center', 'space-between', 'space-around']), 236088c88e8eSopenharmony_ci alignSelf: genEnumValidator(["auto", "flex-start", "flex-end", "center", "baseline", "stretch"]) 236188c88e8eSopenharmony_ci }, 236288c88e8eSopenharmony_ci position: { 236388c88e8eSopenharmony_ci position: genEnumValidator(['relative', 'fixed', 'absolute']), 236488c88e8eSopenharmony_ci top: PERCENTAGE_LENGTH_VALIDATOR, 236588c88e8eSopenharmony_ci bottom: PERCENTAGE_LENGTH_VALIDATOR, 236688c88e8eSopenharmony_ci left: PERCENTAGE_LENGTH_VALIDATOR, 236788c88e8eSopenharmony_ci right: PERCENTAGE_LENGTH_VALIDATOR, 236888c88e8eSopenharmony_ci zIndex: INTEGER_VALIDATOR 236988c88e8eSopenharmony_ci }, 237088c88e8eSopenharmony_ci common: { 237188c88e8eSopenharmony_ci opacity: NUMBER_VALIDATOR, 237288c88e8eSopenharmony_ci background: BACKGROUND_VALIDATOR, 237388c88e8eSopenharmony_ci backgroundColor: COLOR_VAR_VALIDATOR, 237488c88e8eSopenharmony_ci backgroundImage: URL_VALIDATOR, 237588c88e8eSopenharmony_ci backgroundRepeat: genEnumValidator(['repeat', 'no-repeat', 'repeat-x', 'repeat-y']), 237688c88e8eSopenharmony_ci visibility: genEnumValidator(['visible', 'hidden']), 237788c88e8eSopenharmony_ci objectFit: genEnumValidator(['cover', 'fill', 'contain', 'none', 'scale-down']), 237888c88e8eSopenharmony_ci backgroundSize: BACKGROUND_SIZE_VALIDATOR, 237988c88e8eSopenharmony_ci backgroundPosition: BACKGROUND_POSITION_VALIDATOR, 238088c88e8eSopenharmony_ci display: genEnumValidator(['flex', 'none', 'grid']), 238188c88e8eSopenharmony_ci imageFill: COLOR_VAR_VALIDATOR, 238288c88e8eSopenharmony_ci maskImage: MASK_VALIDATOR, 238388c88e8eSopenharmony_ci maskPosition: BACKGROUND_POSITION_VALIDATOR, 238488c88e8eSopenharmony_ci maskSize: BACKGROUND_SIZE_VALIDATOR 238588c88e8eSopenharmony_ci }, 238688c88e8eSopenharmony_ci text: { 238788c88e8eSopenharmony_ci lines: INTEGER_VALIDATOR, 238888c88e8eSopenharmony_ci color: COLOR_VAR_VALIDATOR, 238988c88e8eSopenharmony_ci fontSize: LENGTH_VALIDATOR, 239088c88e8eSopenharmony_ci fontStyle: genEnumValidator(['normal', 'italic']), 239188c88e8eSopenharmony_ci fontFamily: ANYTHING_VALIDATOR, 239288c88e8eSopenharmony_ci fontWeight: genEnumValidator(['normal', 'lighter', 'bold', 'bolder', "medium", "regular", 239388c88e8eSopenharmony_ci '100', '200', '300', '400', '500', '600', '700', '800', '900']), 239488c88e8eSopenharmony_ci textDecoration: genEnumValidator(['none', 'underline', 'line-through']), 239588c88e8eSopenharmony_ci textAlign: genEnumValidator(['start', 'end', 'left', 'center', 'right']), 239688c88e8eSopenharmony_ci textOverflow: genEnumValidator(['clip', 'ellipsis']), 239788c88e8eSopenharmony_ci textIndent: TEXT_INDENT_VALIDATOR, 239888c88e8eSopenharmony_ci lineHeight: TEXT_LINE_HEIGHT_VALIDATOR, 239988c88e8eSopenharmony_ci letterSpacing: LENGTH_VALIDATOR, 240088c88e8eSopenharmony_ci minLines: NUMBER_VALIDATOR, 240188c88e8eSopenharmony_ci maxLines: ANYTHING_VALIDATOR, 240288c88e8eSopenharmony_ci minFontSize: LENGTH_VALIDATOR, 240388c88e8eSopenharmony_ci maxFontSize: LENGTH_VALIDATOR, 240488c88e8eSopenharmony_ci fontSizeStep: LENGTH_VALIDATOR, 240588c88e8eSopenharmony_ci preferFontSizes: ARRAY_LENGTH_VALIDATOR, 240688c88e8eSopenharmony_ci adaptHeight: genEnumValidator(['true', 'false']), 240788c88e8eSopenharmony_ci allowScale: genEnumValidator(['true', 'false']), 240888c88e8eSopenharmony_ci fontVariant: ANYTHING_VALIDATOR, 240988c88e8eSopenharmony_ci id: ANYTHING_VALIDATOR, 241088c88e8eSopenharmony_ci x: PERCENTAGE_LENGTH_VALIDATOR, 241188c88e8eSopenharmony_ci y: PERCENTAGE_LENGTH_VALIDATOR, 241288c88e8eSopenharmony_ci dx: PERCENTAGE_LENGTH_VALIDATOR, 241388c88e8eSopenharmony_ci dy: PERCENTAGE_LENGTH_VALIDATOR, 241488c88e8eSopenharmony_ci rotate: NUMBER_VALIDATOR, 241588c88e8eSopenharmony_ci fill: COLOR_VAR_VALIDATOR, 241688c88e8eSopenharmony_ci fillOpacity: NUMBER_VALIDATOR, 241788c88e8eSopenharmony_ci stroke: COLOR_VAR_VALIDATOR, 241888c88e8eSopenharmony_ci strokeOpacity: NUMBER_VALIDATOR, 241988c88e8eSopenharmony_ci strokeWidth: LENGTH_VALIDATOR, 242088c88e8eSopenharmony_ci fontFeatureSettings: ANYTHING_VALIDATOR, 242188c88e8eSopenharmony_ci textDecorationColor: COLOR_VAR_VALIDATOR 242288c88e8eSopenharmony_ci }, 242388c88e8eSopenharmony_ci calendar: { 242488c88e8eSopenharmony_ci boundaryColOffset: LENGTH_VALIDATOR, 242588c88e8eSopenharmony_ci boundaryRowOffset: LENGTH_VALIDATOR, 242688c88e8eSopenharmony_ci colSpace: LENGTH_VALIDATOR, 242788c88e8eSopenharmony_ci dailyFiveRowSpace: LENGTH_VALIDATOR, 242888c88e8eSopenharmony_ci dayColor: COLOR_VAR_VALIDATOR, 242988c88e8eSopenharmony_ci dayFontSize: LENGTH_VALIDATOR, 243088c88e8eSopenharmony_ci dayHeight: LENGTH_VALIDATOR, 243188c88e8eSopenharmony_ci dayWidth: LENGTH_VALIDATOR, 243288c88e8eSopenharmony_ci focusedAreaBackgroundColor: COLOR_VAR_VALIDATOR, 243388c88e8eSopenharmony_ci focusedAreaRadius: LENGTH_VALIDATOR, 243488c88e8eSopenharmony_ci focusedDayColor: COLOR_VAR_VALIDATOR, 243588c88e8eSopenharmony_ci focusedLunarColor: COLOR_VAR_VALIDATOR, 243688c88e8eSopenharmony_ci gregorianCalendarHeight: LENGTH_VALIDATOR, 243788c88e8eSopenharmony_ci lunarColor: COLOR_VAR_VALIDATOR, 243888c88e8eSopenharmony_ci lunarDayFontSize: LENGTH_VALIDATOR, 243988c88e8eSopenharmony_ci lunarDayYAxisOffset: LENGTH_VALIDATOR, 244088c88e8eSopenharmony_ci lunarHeight: LENGTH_VALIDATOR, 244188c88e8eSopenharmony_ci markLunarColor: COLOR_VAR_VALIDATOR, 244288c88e8eSopenharmony_ci nonCurrentMonthDayColor: COLOR_VAR_VALIDATOR, 244388c88e8eSopenharmony_ci nonCurrentMonthLunarColor: COLOR_VAR_VALIDATOR, 244488c88e8eSopenharmony_ci nonCurrentMonthOffDayMarkColor: COLOR_VAR_VALIDATOR, 244588c88e8eSopenharmony_ci nonCurrentMonthWorkDayMarkColor: COLOR_VAR_VALIDATOR, 244688c88e8eSopenharmony_ci offDayMarkColor: COLOR_VAR_VALIDATOR, 244788c88e8eSopenharmony_ci offDayMarkSize: LENGTH_VALIDATOR, 244888c88e8eSopenharmony_ci scheduleMarkerRadius: LENGTH_VALIDATOR, 244988c88e8eSopenharmony_ci scheduleMarkerXAxisOffset: LENGTH_VALIDATOR, 245088c88e8eSopenharmony_ci scheduleMarkerYAxisOffset: LENGTH_VALIDATOR, 245188c88e8eSopenharmony_ci underscoreLength: LENGTH_VALIDATOR, 245288c88e8eSopenharmony_ci underscoreWidth: LENGTH_VALIDATOR, 245388c88e8eSopenharmony_ci underscoreXAxisOffset: LENGTH_VALIDATOR, 245488c88e8eSopenharmony_ci underscoreYAxisOffset: LENGTH_VALIDATOR, 245588c88e8eSopenharmony_ci weekAndDayRowSpace: LENGTH_VALIDATOR, 245688c88e8eSopenharmony_ci weekColor: COLOR_VAR_VALIDATOR, 245788c88e8eSopenharmony_ci weekFontSize: LENGTH_VALIDATOR, 245888c88e8eSopenharmony_ci weekHeight: LENGTH_VALIDATOR, 245988c88e8eSopenharmony_ci weekWidth: LENGTH_VALIDATOR, 246088c88e8eSopenharmony_ci weekendDayColor: COLOR_VAR_VALIDATOR, 246188c88e8eSopenharmony_ci weekendLunarColor: COLOR_VAR_VALIDATOR, 246288c88e8eSopenharmony_ci workDayMarkColor: COLOR_VAR_VALIDATOR, 246388c88e8eSopenharmony_ci workDayMarkSize: LENGTH_VALIDATOR, 246488c88e8eSopenharmony_ci workStateHorizontalMovingDistance: LENGTH_VALIDATOR, 246588c88e8eSopenharmony_ci workStateVerticalMovingDistance: LENGTH_VALIDATOR, 246688c88e8eSopenharmony_ci workStateWidth: LENGTH_VALIDATOR 246788c88e8eSopenharmony_ci }, 246888c88e8eSopenharmony_ci rating: { 246988c88e8eSopenharmony_ci starBackground: URL_VALIDATOR, 247088c88e8eSopenharmony_ci starForeground: URL_VALIDATOR, 247188c88e8eSopenharmony_ci starSecondary: URL_VALIDATOR, 247288c88e8eSopenharmony_ci rtlFlip: genEnumValidator(['true', 'false']) 247388c88e8eSopenharmony_ci }, 247488c88e8eSopenharmony_ci transition: { 247588c88e8eSopenharmony_ci transitionProperty: TRANSITION_PROPERTY_VALIDATOR, 247688c88e8eSopenharmony_ci transitionDuration: TRANSITION_INTERVAL_VALIDATOR, 247788c88e8eSopenharmony_ci transitionDelay: TRANSITION_INTERVAL_VALIDATOR, 247888c88e8eSopenharmony_ci transitionEnter: NAME_VALIDATOR, 247988c88e8eSopenharmony_ci transitionExit: NAME_VALIDATOR, 248088c88e8eSopenharmony_ci transitionDuration: TIME_VALIDATOR, 248188c88e8eSopenharmony_ci transitionTimingFunction: TRANSITION_TIMING_FUNCTION_VALIDATOR 248288c88e8eSopenharmony_ci }, 248388c88e8eSopenharmony_ci transform: { 248488c88e8eSopenharmony_ci transform: TRANSFORM_VALIDATOR, 248588c88e8eSopenharmony_ci transformOrigin: TRANSFORM_ORIGIN_VALIDATOR 248688c88e8eSopenharmony_ci }, 248788c88e8eSopenharmony_ci customized: { 248888c88e8eSopenharmony_ci itemSize: LENGTH_VALIDATOR, 248988c88e8eSopenharmony_ci itemColor: COLOR_VAR_VALIDATOR, 249088c88e8eSopenharmony_ci itemSelectedColor: COLOR_VAR_VALIDATOR, 249188c88e8eSopenharmony_ci textColor: COLOR_VAR_VALIDATOR, 249288c88e8eSopenharmony_ci timeColor: COLOR_VAR_VALIDATOR, 249388c88e8eSopenharmony_ci textHighlightColor: COLOR_VAR_VALIDATOR 249488c88e8eSopenharmony_ci }, 249588c88e8eSopenharmony_ci list: { 249688c88e8eSopenharmony_ci itemExtent: PERCENTAGE_LENGTH_VALIDATOR, 249788c88e8eSopenharmony_ci fadeColor: COLOR_VAR_VALIDATOR, 249888c88e8eSopenharmony_ci dividerColor: COLOR_VAR_VALIDATOR, 249988c88e8eSopenharmony_ci dividerHeight: LENGTH_VALIDATOR, 250088c88e8eSopenharmony_ci dividerLength: LENGTH_VALIDATOR, 250188c88e8eSopenharmony_ci dividerOrigin: LENGTH_VALIDATOR, 250288c88e8eSopenharmony_ci scrollbarColor: COLOR_VALIDATOR, 250388c88e8eSopenharmony_ci scrollbarWidth: LENGTH_VALIDATOR, 250488c88e8eSopenharmony_ci scrollbarOffset: ARRAY_LENGTH_VALIDATOR 250588c88e8eSopenharmony_ci }, 250688c88e8eSopenharmony_ci progress: { 250788c88e8eSopenharmony_ci secondaryColor: COLOR_VAR_VALIDATOR, 250888c88e8eSopenharmony_ci scaleWidth: LENGTH_VALIDATOR, 250988c88e8eSopenharmony_ci scaleNumber: NUMBER_VALIDATOR, 251088c88e8eSopenharmony_ci startAngle: ANGLE_VALIDATOR, 251188c88e8eSopenharmony_ci totalAngle: ANGLE_VALIDATOR, 251288c88e8eSopenharmony_ci centerX: LENGTH_VALIDATOR, 251388c88e8eSopenharmony_ci centerY: LENGTH_VALIDATOR, 251488c88e8eSopenharmony_ci radius: LENGTH_VALIDATOR, 251588c88e8eSopenharmony_ci direction: genEnumValidator(['start-to-end', 'end-to-start']), 251688c88e8eSopenharmony_ci sections: NAME_VALIDATOR, 251788c88e8eSopenharmony_ci colors: ARRAY_COLOR_VALIDATOR, 251888c88e8eSopenharmony_ci weights: ARRAY_NUMBER_VALIDATOR 251988c88e8eSopenharmony_ci }, 252088c88e8eSopenharmony_ci navigation: { 252188c88e8eSopenharmony_ci titleColor: COLOR_VAR_VALIDATOR, 252288c88e8eSopenharmony_ci subtitleColor: COLOR_VAR_VALIDATOR 252388c88e8eSopenharmony_ci }, 252488c88e8eSopenharmony_ci button: { 252588c88e8eSopenharmony_ci iconWidth: LENGTH_VALIDATOR, 252688c88e8eSopenharmony_ci iconHeight: LENGTH_VALIDATOR 252788c88e8eSopenharmony_ci }, 252888c88e8eSopenharmony_ci switch: { 252988c88e8eSopenharmony_ci textonColor: COLOR_VAR_VALIDATOR, 253088c88e8eSopenharmony_ci textoffColor: COLOR_VAR_VALIDATOR, 253188c88e8eSopenharmony_ci textPadding: LENGTH_VALIDATOR 253288c88e8eSopenharmony_ci }, 253388c88e8eSopenharmony_ci share: { 253488c88e8eSopenharmony_ci sharedTransitionEffect: genEnumValidator(['exchange', 'static']), 253588c88e8eSopenharmony_ci sharedTransitionName: NAME_VALIDATOR, 253688c88e8eSopenharmony_ci sharedTransitionTimingFunction: TRANSITION_TIMING_FUNCTION_VALIDATOR 253788c88e8eSopenharmony_ci }, 253888c88e8eSopenharmony_ci image: { 253988c88e8eSopenharmony_ci matchTextDirection: genEnumValidator(['false', 'true']), 254088c88e8eSopenharmony_ci fitOriginalSize: genEnumValidator(['false', 'true']), 254188c88e8eSopenharmony_ci }, 254288c88e8eSopenharmony_ci divider: { 254388c88e8eSopenharmony_ci lineCap: genEnumValidator(['butt', 'square', 'round']) 254488c88e8eSopenharmony_ci }, 254588c88e8eSopenharmony_ci picker: { 254688c88e8eSopenharmony_ci columnHeight: LENGTH_VALIDATOR 254788c88e8eSopenharmony_ci }, 254888c88e8eSopenharmony_ci pickerView: { 254988c88e8eSopenharmony_ci selectedFontSize: LENGTH_VALIDATOR, 255088c88e8eSopenharmony_ci selectedFontFamily: ANYTHING_VALIDATOR, 255188c88e8eSopenharmony_ci focusColor: COLOR_VAR_VALIDATOR, 255288c88e8eSopenharmony_ci focusFontSize: LENGTH_VALIDATOR, 255388c88e8eSopenharmony_ci focusFontFamily: ANYTHING_VALIDATOR, 255488c88e8eSopenharmony_ci disappearFontSize: LENGTH_VALIDATOR, 255588c88e8eSopenharmony_ci disappearColor: COLOR_VAR_VALIDATOR 255688c88e8eSopenharmony_ci }, 255788c88e8eSopenharmony_ci colorpicker: { 255888c88e8eSopenharmony_ci colorPickerColor: Color_Picker_VALIDATOR 255988c88e8eSopenharmony_ci }, 256088c88e8eSopenharmony_ci colorpickerView: { 256188c88e8eSopenharmony_ci colorPickerColor: Color_Picker_VALIDATOR 256288c88e8eSopenharmony_ci }, 256388c88e8eSopenharmony_ci slider: { 256488c88e8eSopenharmony_ci blockColor: COLOR_VAR_VALIDATOR, 256588c88e8eSopenharmony_ci }, 256688c88e8eSopenharmony_ci badge: { 256788c88e8eSopenharmony_ci badgeColor: COLOR_VAR_VALIDATOR, 256888c88e8eSopenharmony_ci badgeSize: LENGTH_VALIDATOR 256988c88e8eSopenharmony_ci }, 257088c88e8eSopenharmony_ci ellipse: { 257188c88e8eSopenharmony_ci fill: COLOR_VAR_VALIDATOR, 257288c88e8eSopenharmony_ci fillOpacity: NUMBER_VALIDATOR, 257388c88e8eSopenharmony_ci fillRule: genEnumValidator(['nonzero', 'evenodd']), 257488c88e8eSopenharmony_ci opacity: NUMBER_VALIDATOR, 257588c88e8eSopenharmony_ci stroke: COLOR_VAR_VALIDATOR, 257688c88e8eSopenharmony_ci strokeDasharray: ANYTHING_VALIDATOR, 257788c88e8eSopenharmony_ci strokeDashoffset: LENGTH_VALIDATOR, 257888c88e8eSopenharmony_ci strokeLinejoin: genEnumValidator(['bevel', 'miter', 'round']), 257988c88e8eSopenharmony_ci strokeLinecap: genEnumValidator(['butt', 'round', 'square']), 258088c88e8eSopenharmony_ci strokeMiterlimit: NUMBER_VALIDATOR, 258188c88e8eSopenharmony_ci strokeOpacity: NUMBER_VALIDATOR, 258288c88e8eSopenharmony_ci strokeWidth: LENGTH_VALIDATOR, 258388c88e8eSopenharmony_ci transform: TRANSFORM_VALIDATOR, 258488c88e8eSopenharmony_ci id: ANYTHING_VALIDATOR, 258588c88e8eSopenharmony_ci cx: PERCENTAGE_LENGTH_VALIDATOR, 258688c88e8eSopenharmony_ci cy: PERCENTAGE_LENGTH_VALIDATOR, 258788c88e8eSopenharmony_ci rx: PERCENTAGE_LENGTH_VALIDATOR, 258888c88e8eSopenharmony_ci ry: PERCENTAGE_LENGTH_VALIDATOR 258988c88e8eSopenharmony_ci }, 259088c88e8eSopenharmony_ci rect: { 259188c88e8eSopenharmony_ci id: ANYTHING_VALIDATOR, 259288c88e8eSopenharmony_ci fill: COLOR_VAR_VALIDATOR, 259388c88e8eSopenharmony_ci fillOpacity: NUMBER_VALIDATOR, 259488c88e8eSopenharmony_ci fillRule: genEnumValidator(['nonzero', 'evenodd']), 259588c88e8eSopenharmony_ci opacity: NUMBER_VALIDATOR, 259688c88e8eSopenharmony_ci strokeDasharray: ANYTHING_VALIDATOR, 259788c88e8eSopenharmony_ci strokeLinejoin: genEnumValidator(['bevel', 'miter', 'round']), 259888c88e8eSopenharmony_ci strokeLinecap: genEnumValidator(['butt', 'round', 'square']), 259988c88e8eSopenharmony_ci strokeMiterlimit: NUMBER_VALIDATOR, 260088c88e8eSopenharmony_ci strokeOpacity: NUMBER_VALIDATOR, 260188c88e8eSopenharmony_ci strokeWidth: LENGTH_VALIDATOR, 260288c88e8eSopenharmony_ci transform: TRANSFORM_VALIDATOR, 260388c88e8eSopenharmony_ci width: PERCENTAGE_LENGTH_VALIDATOR, 260488c88e8eSopenharmony_ci height: PERCENTAGE_LENGTH_VALIDATOR, 260588c88e8eSopenharmony_ci x: PERCENTAGE_LENGTH_VALIDATOR, 260688c88e8eSopenharmony_ci y: PERCENTAGE_LENGTH_VALIDATOR, 260788c88e8eSopenharmony_ci rx: PERCENTAGE_LENGTH_VALIDATOR, 260888c88e8eSopenharmony_ci ry: PERCENTAGE_LENGTH_VALIDATOR, 260988c88e8eSopenharmony_ci stroke: COLOR_VAR_VALIDATOR, 261088c88e8eSopenharmony_ci strokeDashoffset: LENGTH_VALIDATOR 261188c88e8eSopenharmony_ci }, 261288c88e8eSopenharmony_ci circle: { 261388c88e8eSopenharmony_ci fill: COLOR_VAR_VALIDATOR, 261488c88e8eSopenharmony_ci fillOpacity: NUMBER_VALIDATOR, 261588c88e8eSopenharmony_ci fillRule: genEnumValidator(['nonzero', 'evenodd']), 261688c88e8eSopenharmony_ci opacity: NUMBER_VALIDATOR, 261788c88e8eSopenharmony_ci stroke: COLOR_VAR_VALIDATOR, 261888c88e8eSopenharmony_ci strokeDasharray: ANYTHING_VALIDATOR, 261988c88e8eSopenharmony_ci strokeDashoffset: LENGTH_VALIDATOR, 262088c88e8eSopenharmony_ci strokeLinejoin: genEnumValidator(['bevel', 'miter', 'round']), 262188c88e8eSopenharmony_ci strokeLinecap: genEnumValidator(['butt', 'round', 'square']), 262288c88e8eSopenharmony_ci strokeMiterlimit: NUMBER_VALIDATOR, 262388c88e8eSopenharmony_ci strokeOpacity: NUMBER_VALIDATOR, 262488c88e8eSopenharmony_ci strokeWidth: LENGTH_VALIDATOR, 262588c88e8eSopenharmony_ci transform: TRANSFORM_VALIDATOR, 262688c88e8eSopenharmony_ci id: ANYTHING_VALIDATOR, 262788c88e8eSopenharmony_ci cx: PERCENTAGE_LENGTH_VALIDATOR, 262888c88e8eSopenharmony_ci cy: PERCENTAGE_LENGTH_VALIDATOR, 262988c88e8eSopenharmony_ci r: PERCENTAGE_LENGTH_VALIDATOR 263088c88e8eSopenharmony_ci }, 263188c88e8eSopenharmony_ci path: { 263288c88e8eSopenharmony_ci fillOpacity: NUMBER_VALIDATOR, 263388c88e8eSopenharmony_ci fillRule: genEnumValidator(['nonzero', 'evenodd']), 263488c88e8eSopenharmony_ci opacity: NUMBER_VALIDATOR, 263588c88e8eSopenharmony_ci strokeDashoffset: LENGTH_VALIDATOR, 263688c88e8eSopenharmony_ci strokeLinejoin: genEnumValidator(['bevel', 'miter', 'round']), 263788c88e8eSopenharmony_ci strokeLinecap: genEnumValidator(['butt', 'round', 'square']), 263888c88e8eSopenharmony_ci strokeMiterlimit: NUMBER_VALIDATOR, 263988c88e8eSopenharmony_ci strokeOpacity: NUMBER_VALIDATOR, 264088c88e8eSopenharmony_ci strokeWidth: LENGTH_VALIDATOR, 264188c88e8eSopenharmony_ci transform: TRANSFORM_VALIDATOR, 264288c88e8eSopenharmony_ci id: ANYTHING_VALIDATOR, 264388c88e8eSopenharmony_ci d: ANYTHING_VALIDATOR, 264488c88e8eSopenharmony_ci fill: COLOR_VAR_VALIDATOR, 264588c88e8eSopenharmony_ci strokeDasharray: ANYTHING_VALIDATOR, 264688c88e8eSopenharmony_ci stroke: COLOR_VAR_VALIDATOR 264788c88e8eSopenharmony_ci }, 264888c88e8eSopenharmony_ci svg: { 264988c88e8eSopenharmony_ci fill: COLOR_VAR_VALIDATOR, 265088c88e8eSopenharmony_ci fillOpacity: NUMBER_VALIDATOR, 265188c88e8eSopenharmony_ci fillRule: genEnumValidator(['nonzero', 'evenodd']), 265288c88e8eSopenharmony_ci opacity: NUMBER_VALIDATOR, 265388c88e8eSopenharmony_ci stroke: COLOR_VAR_VALIDATOR, 265488c88e8eSopenharmony_ci strokeDasharray: ANYTHING_VALIDATOR, 265588c88e8eSopenharmony_ci strokeDashoffset: LENGTH_VALIDATOR, 265688c88e8eSopenharmony_ci strokeLinejoin: genEnumValidator(['bevel', 'miter', 'round']), 265788c88e8eSopenharmony_ci strokeLinecap: genEnumValidator(['butt', 'round', 'square']), 265888c88e8eSopenharmony_ci strokeMiterlimit: NUMBER_VALIDATOR, 265988c88e8eSopenharmony_ci strokeOpacity: NUMBER_VALIDATOR, 266088c88e8eSopenharmony_ci strokeWidth: LENGTH_VALIDATOR, 266188c88e8eSopenharmony_ci transform: TRANSFORM_VALIDATOR, 266288c88e8eSopenharmony_ci id: ANYTHING_VALIDATOR, 266388c88e8eSopenharmony_ci width: PERCENTAGE_LENGTH_VALIDATOR, 266488c88e8eSopenharmony_ci height: PERCENTAGE_LENGTH_VALIDATOR, 266588c88e8eSopenharmony_ci x: PERCENTAGE_LENGTH_VALIDATOR, 266688c88e8eSopenharmony_ci y: PERCENTAGE_LENGTH_VALIDATOR, 266788c88e8eSopenharmony_ci viewbox: ANYTHING_VALIDATOR 266888c88e8eSopenharmony_ci }, 266988c88e8eSopenharmony_ci polygon: { 267088c88e8eSopenharmony_ci fill: COLOR_VAR_VALIDATOR, 267188c88e8eSopenharmony_ci fillOpacity: NUMBER_VALIDATOR, 267288c88e8eSopenharmony_ci opacity: NUMBER_VALIDATOR, 267388c88e8eSopenharmony_ci stroke: COLOR_VAR_VALIDATOR, 267488c88e8eSopenharmony_ci strokeDasharray: ANYTHING_VALIDATOR, 267588c88e8eSopenharmony_ci strokeDashoffset: LENGTH_VALIDATOR, 267688c88e8eSopenharmony_ci strokeLinejoin: genEnumValidator(['bevel', 'miter', 'round']), 267788c88e8eSopenharmony_ci strokeLinecap: genEnumValidator(['butt', 'round', 'square']), 267888c88e8eSopenharmony_ci strokeMiterlimit: NUMBER_VALIDATOR, 267988c88e8eSopenharmony_ci strokeOpacity: NUMBER_VALIDATOR, 268088c88e8eSopenharmony_ci strokeWidth: LENGTH_VALIDATOR, 268188c88e8eSopenharmony_ci transform: TRANSFORM_VALIDATOR, 268288c88e8eSopenharmony_ci id: ANYTHING_VALIDATOR, 268388c88e8eSopenharmony_ci points: ANYTHING_VALIDATOR, 268488c88e8eSopenharmony_ci fillRule: genEnumValidator(['nonzero', 'evenodd']) 268588c88e8eSopenharmony_ci }, 268688c88e8eSopenharmony_ci polyline: { 268788c88e8eSopenharmony_ci fill: COLOR_VAR_VALIDATOR, 268888c88e8eSopenharmony_ci fillOpacity: NUMBER_VALIDATOR, 268988c88e8eSopenharmony_ci opacity: NUMBER_VALIDATOR, 269088c88e8eSopenharmony_ci stroke: COLOR_VAR_VALIDATOR, 269188c88e8eSopenharmony_ci strokeDasharray: ANYTHING_VALIDATOR, 269288c88e8eSopenharmony_ci strokeDashoffset: LENGTH_VALIDATOR, 269388c88e8eSopenharmony_ci strokeLinejoin: genEnumValidator(['bevel', 'miter', 'round']), 269488c88e8eSopenharmony_ci strokeLinecap: genEnumValidator(['butt', 'round', 'square']), 269588c88e8eSopenharmony_ci strokeMiterlimit: NUMBER_VALIDATOR, 269688c88e8eSopenharmony_ci strokeOpacity: NUMBER_VALIDATOR, 269788c88e8eSopenharmony_ci strokeWidth: LENGTH_VALIDATOR, 269888c88e8eSopenharmony_ci transform: TRANSFORM_VALIDATOR, 269988c88e8eSopenharmony_ci id: ANYTHING_VALIDATOR, 270088c88e8eSopenharmony_ci points: ANYTHING_VALIDATOR, 270188c88e8eSopenharmony_ci fillRule: genEnumValidator(['nonzero', 'evenodd']) 270288c88e8eSopenharmony_ci }, 270388c88e8eSopenharmony_ci tspan: { 270488c88e8eSopenharmony_ci id: ANYTHING_VALIDATOR, 270588c88e8eSopenharmony_ci x: PERCENTAGE_LENGTH_VALIDATOR, 270688c88e8eSopenharmony_ci y: PERCENTAGE_LENGTH_VALIDATOR, 270788c88e8eSopenharmony_ci dx: PERCENTAGE_LENGTH_VALIDATOR, 270888c88e8eSopenharmony_ci dy: PERCENTAGE_LENGTH_VALIDATOR, 270988c88e8eSopenharmony_ci rotate: NUMBER_VALIDATOR, 271088c88e8eSopenharmony_ci fontSize: LENGTH_VALIDATOR, 271188c88e8eSopenharmony_ci fill: COLOR_VAR_VALIDATOR, 271288c88e8eSopenharmony_ci fillOpacity: NUMBER_VALIDATOR, 271388c88e8eSopenharmony_ci stroke: COLOR_VAR_VALIDATOR, 271488c88e8eSopenharmony_ci strokeOpacity: NUMBER_VALIDATOR, 271588c88e8eSopenharmony_ci strokeWidth: LENGTH_VALIDATOR 271688c88e8eSopenharmony_ci }, 271788c88e8eSopenharmony_ci textPath: { 271888c88e8eSopenharmony_ci id: ANYTHING_VALIDATOR, 271988c88e8eSopenharmony_ci path: ANYTHING_VALIDATOR, 272088c88e8eSopenharmony_ci startOffset: PERCENTAGE_LENGTH_VALIDATOR, 272188c88e8eSopenharmony_ci fontSize: LENGTH_VALIDATOR, 272288c88e8eSopenharmony_ci fill: COLOR_VAR_VALIDATOR, 272388c88e8eSopenharmony_ci fillOpacity: NUMBER_VALIDATOR, 272488c88e8eSopenharmony_ci stroke: COLOR_VAR_VALIDATOR, 272588c88e8eSopenharmony_ci strokeOpacity: NUMBER_VALIDATOR, 272688c88e8eSopenharmony_ci strokeWidth: LENGTH_VALIDATOR 272788c88e8eSopenharmony_ci }, 272888c88e8eSopenharmony_ci animate: { 272988c88e8eSopenharmony_ci id: ANYTHING_VALIDATOR, 273088c88e8eSopenharmony_ci attributeName: ANYTHING_VALIDATOR, 273188c88e8eSopenharmony_ci begin: ANYTHING_VALIDATOR, 273288c88e8eSopenharmony_ci dur: ANYTHING_VALIDATOR, 273388c88e8eSopenharmony_ci end: ANYTHING_VALIDATOR, 273488c88e8eSopenharmony_ci repeatCount: ANYTHING_VALIDATOR, 273588c88e8eSopenharmony_ci fill: genEnumValidator(['freeze', 'remove']), 273688c88e8eSopenharmony_ci calcMode: genEnumValidator(['discrete', 'linear', 'paced', 'spline']), 273788c88e8eSopenharmony_ci keyTimes: ANYTHING_VALIDATOR, 273888c88e8eSopenharmony_ci keySplines: ANYTHING_VALIDATOR, 273988c88e8eSopenharmony_ci from: ANYTHING_VALIDATOR, 274088c88e8eSopenharmony_ci to: ANYTHING_VALIDATOR, 274188c88e8eSopenharmony_ci values: ANYTHING_VALIDATOR 274288c88e8eSopenharmony_ci }, 274388c88e8eSopenharmony_ci animateMotion: { 274488c88e8eSopenharmony_ci id: ANYTHING_VALIDATOR, 274588c88e8eSopenharmony_ci attributeName: ANYTHING_VALIDATOR, 274688c88e8eSopenharmony_ci begin: ANYTHING_VALIDATOR, 274788c88e8eSopenharmony_ci dur: ANYTHING_VALIDATOR, 274888c88e8eSopenharmony_ci end: ANYTHING_VALIDATOR, 274988c88e8eSopenharmony_ci repeatCount: ANYTHING_VALIDATOR, 275088c88e8eSopenharmony_ci fill: genEnumValidator(['freeze', 'remove']), 275188c88e8eSopenharmony_ci calcMode: genEnumValidator(['discrete', 'linear', 'paced', 'spline']), 275288c88e8eSopenharmony_ci keyTimes: ANYTHING_VALIDATOR, 275388c88e8eSopenharmony_ci keySplines: ANYTHING_VALIDATOR, 275488c88e8eSopenharmony_ci from: ANYTHING_VALIDATOR, 275588c88e8eSopenharmony_ci to: ANYTHING_VALIDATOR, 275688c88e8eSopenharmony_ci keyPoints: ANYTHING_VALIDATOR, 275788c88e8eSopenharmony_ci path: ANYTHING_VALIDATOR, 275888c88e8eSopenharmony_ci rotate: ANYTHING_VALIDATOR 275988c88e8eSopenharmony_ci }, 276088c88e8eSopenharmony_ci animateTransform: { 276188c88e8eSopenharmony_ci id: ANYTHING_VALIDATOR, 276288c88e8eSopenharmony_ci attributeName: ANYTHING_VALIDATOR, 276388c88e8eSopenharmony_ci begin: ANYTHING_VALIDATOR, 276488c88e8eSopenharmony_ci dur: ANYTHING_VALIDATOR, 276588c88e8eSopenharmony_ci end: ANYTHING_VALIDATOR, 276688c88e8eSopenharmony_ci repeatCount: ANYTHING_VALIDATOR, 276788c88e8eSopenharmony_ci fill: genEnumValidator(['freeze', 'remove']), 276888c88e8eSopenharmony_ci calcMode: genEnumValidator(['discrete', 'linear', 'paced', 'spline']), 276988c88e8eSopenharmony_ci from: ANYTHING_VALIDATOR, 277088c88e8eSopenharmony_ci to: ANYTHING_VALIDATOR, 277188c88e8eSopenharmony_ci type: genEnumValidator(['translate', 'scale', 'skewX', 'skewY']) 277288c88e8eSopenharmony_ci }, 277388c88e8eSopenharmony_ci line: { 277488c88e8eSopenharmony_ci fill: COLOR_VAR_VALIDATOR, 277588c88e8eSopenharmony_ci fillOpacity: NUMBER_VALIDATOR, 277688c88e8eSopenharmony_ci opacity: NUMBER_VALIDATOR, 277788c88e8eSopenharmony_ci stroke: COLOR_VAR_VALIDATOR, 277888c88e8eSopenharmony_ci strokeDasharray: ANYTHING_VALIDATOR, 277988c88e8eSopenharmony_ci strokeDashoffset: LENGTH_VALIDATOR, 278088c88e8eSopenharmony_ci strokeLinejoin: genEnumValidator(['bevel', 'miter', 'round']), 278188c88e8eSopenharmony_ci strokeLinecap: genEnumValidator(['butt', 'round', 'square']), 278288c88e8eSopenharmony_ci strokeMiterlimit: NUMBER_VALIDATOR, 278388c88e8eSopenharmony_ci strokeOpacity: NUMBER_VALIDATOR, 278488c88e8eSopenharmony_ci strokeWidth: LENGTH_VALIDATOR, 278588c88e8eSopenharmony_ci fillRule: genEnumValidator(['nonzero', 'evenodd']), 278688c88e8eSopenharmony_ci transform: TRANSFORM_VALIDATOR, 278788c88e8eSopenharmony_ci id: ANYTHING_VALIDATOR, 278888c88e8eSopenharmony_ci x1: PERCENTAGE_LENGTH_VALIDATOR, 278988c88e8eSopenharmony_ci y1: PERCENTAGE_LENGTH_VALIDATOR, 279088c88e8eSopenharmony_ci x2: PERCENTAGE_LENGTH_VALIDATOR, 279188c88e8eSopenharmony_ci y2: PERCENTAGE_LENGTH_VALIDATOR 279288c88e8eSopenharmony_ci } 279388c88e8eSopenharmony_ci} 279488c88e8eSopenharmony_ci 279588c88e8eSopenharmony_civar LITE_PROP_NAME_GROUPS = { 279688c88e8eSopenharmony_ci boxModel: { 279788c88e8eSopenharmony_ci width: PERCENTAGE_LENGTH_VALIDATOR, 279888c88e8eSopenharmony_ci height: PERCENTAGE_LENGTH_VALIDATOR, 279988c88e8eSopenharmony_ci padding: SHORTHAND_LENGTH_VALIDATOR, 280088c88e8eSopenharmony_ci paddingLeft: LENGTH_VALIDATOR, 280188c88e8eSopenharmony_ci paddingRight: LENGTH_VALIDATOR, 280288c88e8eSopenharmony_ci paddingTop: LENGTH_VALIDATOR, 280388c88e8eSopenharmony_ci paddingBottom: LENGTH_VALIDATOR, 280488c88e8eSopenharmony_ci margin:SHORTHAND_AUTO_PERCENTAGE_LENGTH_VALIDATOR, 280588c88e8eSopenharmony_ci marginLeft: AUTO_PERCENTAGE_LENGTH_VALIDATOR, 280688c88e8eSopenharmony_ci marginRight: AUTO_PERCENTAGE_LENGTH_VALIDATOR, 280788c88e8eSopenharmony_ci marginTop: AUTO_PERCENTAGE_LENGTH_VALIDATOR, 280888c88e8eSopenharmony_ci marginBottom: AUTO_PERCENTAGE_LENGTH_VALIDATOR, 280988c88e8eSopenharmony_ci strokeWidth: LENGTH_VALIDATOR, 281088c88e8eSopenharmony_ci }, 281188c88e8eSopenharmony_ci border:{ 281288c88e8eSopenharmony_ci borderWidth: SHORTHAND_LENGTH_VALIDATOR, 281388c88e8eSopenharmony_ci borderColor: SHORTHAND_COLOR_VALIDATOR, 281488c88e8eSopenharmony_ci borderRadius: LENGTH_VALIDATOR, 281588c88e8eSopenharmony_ci }, 281688c88e8eSopenharmony_ci animation:{ 281788c88e8eSopenharmony_ci animationDuration: TIME_VALIDATOR, 281888c88e8eSopenharmony_ci animationDelay: TIME_VALIDATOR, 281988c88e8eSopenharmony_ci animationName: NAME_VALIDATOR, 282088c88e8eSopenharmony_ci animationTimingFunction: genEnumValidator(['linear', 'ease-in', 'ease-out', 'ease-in-out']), 282188c88e8eSopenharmony_ci animationIterationCount: ITERATIONCOUNT_VALIDATOR, 282288c88e8eSopenharmony_ci animationFillMode: genEnumValidator(['none', 'forwards']) 282388c88e8eSopenharmony_ci }, 282488c88e8eSopenharmony_ci flexbox: { 282588c88e8eSopenharmony_ci flexDirection: genEnumValidator(['row', 'column']), 282688c88e8eSopenharmony_ci flexWrap: genEnumValidator(['nowrap', 'wrap']), 282788c88e8eSopenharmony_ci justifyContent: genEnumValidator(['flex-start', 'flex-end', 'center', 'space-between', 282888c88e8eSopenharmony_ci 'space-around', 'space-evenly']), 282988c88e8eSopenharmony_ci alignItems: genEnumValidator(['stretch', 'flex-start', 'flex-end', 'center']), 283088c88e8eSopenharmony_ci }, 283188c88e8eSopenharmony_ci position: { 283288c88e8eSopenharmony_ci top: PERCENTAGE_LENGTH_VALIDATOR, 283388c88e8eSopenharmony_ci left: PERCENTAGE_LENGTH_VALIDATOR, 283488c88e8eSopenharmony_ci }, 283588c88e8eSopenharmony_ci common: { 283688c88e8eSopenharmony_ci opacity: NUMBER_VALIDATOR, 283788c88e8eSopenharmony_ci backgroundColor: COLOR_VAR_VALIDATOR, 283888c88e8eSopenharmony_ci backgroundImage: URL_VALIDATOR, 283988c88e8eSopenharmony_ci placeholderColor: COLOR_VAR_VALIDATOR, 284088c88e8eSopenharmony_ci display: genEnumValidator(['flex', 'none']), 284188c88e8eSopenharmony_ci }, 284288c88e8eSopenharmony_ci text: { 284388c88e8eSopenharmony_ci color: COLOR_VAR_VALIDATOR, 284488c88e8eSopenharmony_ci fontSize: LENGTH_VALIDATOR, 284588c88e8eSopenharmony_ci fontFamily: genEnumValidator(['HYQiHei-65S']), 284688c88e8eSopenharmony_ci letterSpacing: LENGTH_VALIDATOR, 284788c88e8eSopenharmony_ci textAlign: genEnumValidator(['left', 'center', 'right']), 284888c88e8eSopenharmony_ci textOverflow: genEnumValidator(['clip', 'ellipsis']), 284988c88e8eSopenharmony_ci }, 285088c88e8eSopenharmony_ci slider: { 285188c88e8eSopenharmony_ci selectedColor: COLOR_VAR_VALIDATOR, 285288c88e8eSopenharmony_ci selectedFontSize: LENGTH_VALIDATOR, 285388c88e8eSopenharmony_ci selectedFontFamily: genEnumValidator(['HYQiHei-65S']), 285488c88e8eSopenharmony_ci blockColor: COLOR_VAR_VALIDATOR, 285588c88e8eSopenharmony_ci }, 285688c88e8eSopenharmony_ci transform: { 285788c88e8eSopenharmony_ci transform: TRANSFORM_VALIDATOR, 285888c88e8eSopenharmony_ci }, 285988c88e8eSopenharmony_ci progress: { 286088c88e8eSopenharmony_ci centerX: LENGTH_VALIDATOR, 286188c88e8eSopenharmony_ci centerY: LENGTH_VALIDATOR, 286288c88e8eSopenharmony_ci radius: LENGTH_VALIDATOR, 286388c88e8eSopenharmony_ci startAngle: ANGLE_VALIDATOR, 286488c88e8eSopenharmony_ci totalAngle: ANGLE_VALIDATOR 286588c88e8eSopenharmony_ci } 286688c88e8eSopenharmony_ci} 286788c88e8eSopenharmony_ci 286888c88e8eSopenharmony_civar CARD_PROP_NAME_GROUPS = { 286988c88e8eSopenharmony_ci boxModel: { 287088c88e8eSopenharmony_ci width: PERCENTAGE_LENGTH_VALIDATOR, 287188c88e8eSopenharmony_ci height: PERCENTAGE_LENGTH_VALIDATOR, 287288c88e8eSopenharmony_ci overflow: genEnumValidator(['auto', 'hidden','scroll','visible']), 287388c88e8eSopenharmony_ci padding: SHORTHAND_PERCENTAGE_LENGTH_VALIDATOR, 287488c88e8eSopenharmony_ci paddingLeft: PERCENTAGE_LENGTH_VALIDATOR, 287588c88e8eSopenharmony_ci paddingRight: PERCENTAGE_LENGTH_VALIDATOR, 287688c88e8eSopenharmony_ci paddingTop: PERCENTAGE_LENGTH_VALIDATOR, 287788c88e8eSopenharmony_ci paddingBottom: PERCENTAGE_LENGTH_VALIDATOR, 287888c88e8eSopenharmony_ci paddingStart: PERCENTAGE_LENGTH_VALIDATOR, 287988c88e8eSopenharmony_ci paddingEnd: PERCENTAGE_LENGTH_VALIDATOR, 288088c88e8eSopenharmony_ci margin: SHORTHAND_AUTO_PERCENTAGE_LENGTH_VALIDATOR, 288188c88e8eSopenharmony_ci marginLeft: AUTO_PERCENTAGE_LENGTH_VALIDATOR, 288288c88e8eSopenharmony_ci marginRight: AUTO_PERCENTAGE_LENGTH_VALIDATOR, 288388c88e8eSopenharmony_ci marginTop: AUTO_PERCENTAGE_LENGTH_VALIDATOR, 288488c88e8eSopenharmony_ci marginBottom: AUTO_PERCENTAGE_LENGTH_VALIDATOR, 288588c88e8eSopenharmony_ci marginStart: PERCENTAGE_LENGTH_VALIDATOR, 288688c88e8eSopenharmony_ci marginEnd: PERCENTAGE_LENGTH_VALIDATOR, 288788c88e8eSopenharmony_ci columns: NUMBER_VALIDATOR, 288888c88e8eSopenharmony_ci displayIndex: NUMBER_VALIDATOR, 288988c88e8eSopenharmony_ci aspectRatio: NUMBER_VALIDATOR, 289088c88e8eSopenharmony_ci minWidth: PERCENTAGE_LENGTH_VALIDATOR, 289188c88e8eSopenharmony_ci minHeight: PERCENTAGE_LENGTH_VALIDATOR, 289288c88e8eSopenharmony_ci maxWidth: PERCENTAGE_LENGTH_VALIDATOR, 289388c88e8eSopenharmony_ci maxHeight: PERCENTAGE_LENGTH_VALIDATOR, 289488c88e8eSopenharmony_ci flexWeight: NUMBER_VALIDATOR, 289588c88e8eSopenharmony_ci boxShadow: BOX_SHADOW_VALIDATOR, 289688c88e8eSopenharmony_ci boxShadowH: LENGTH_VALIDATOR, 289788c88e8eSopenharmony_ci boxShadowV: LENGTH_VALIDATOR, 289888c88e8eSopenharmony_ci boxShadowBlur: LENGTH_VALIDATOR, 289988c88e8eSopenharmony_ci boxShadowSpread: LENGTH_VALIDATOR, 290088c88e8eSopenharmony_ci boxShadowColor: COLOR_VAR_VALIDATOR, 290188c88e8eSopenharmony_ci filter: FILTER_VALIDATOR, 290288c88e8eSopenharmony_ci backdropFilter: FILTER_VALIDATOR, 290388c88e8eSopenharmony_ci windowFilter: FILTER_PERCENTAGE_VALIDATOR 290488c88e8eSopenharmony_ci }, 290588c88e8eSopenharmony_ci div: { 290688c88e8eSopenharmony_ci gridTemplateColumns: GRID_TEMPLATE_VALIDATOR, 290788c88e8eSopenharmony_ci gridTemplateRows: GRID_TEMPLATE_VALIDATOR, 290888c88e8eSopenharmony_ci gridGap: LENGTH_VALIDATOR, 290988c88e8eSopenharmony_ci gridColumnsGap: LENGTH_VALIDATOR, 291088c88e8eSopenharmony_ci gridRowsGap: LENGTH_VALIDATOR, 291188c88e8eSopenharmony_ci gridRowStart: NUMBER_VALIDATOR, 291288c88e8eSopenharmony_ci gridRowEnd: NUMBER_VALIDATOR, 291388c88e8eSopenharmony_ci gridColumnStart: NUMBER_VALIDATOR, 291488c88e8eSopenharmony_ci gridColumnEnd: NUMBER_VALIDATOR 291588c88e8eSopenharmony_ci }, 291688c88e8eSopenharmony_ci border: { 291788c88e8eSopenharmony_ci border: BORDER_VALIDATOR, 291888c88e8eSopenharmony_ci borderWidth: SHORTHAND_LENGTH_VALIDATOR, 291988c88e8eSopenharmony_ci borderLeftWidth: LENGTH_VALIDATOR, 292088c88e8eSopenharmony_ci borderTopWidth: LENGTH_VALIDATOR, 292188c88e8eSopenharmony_ci borderRightWidth: LENGTH_VALIDATOR, 292288c88e8eSopenharmony_ci borderBottomWidth: LENGTH_VALIDATOR, 292388c88e8eSopenharmony_ci borderColor: SHORTHAND_COLOR_VALIDATOR, 292488c88e8eSopenharmony_ci borderLeftColor: COLOR_VAR_VALIDATOR, 292588c88e8eSopenharmony_ci borderTopColor: COLOR_VAR_VALIDATOR, 292688c88e8eSopenharmony_ci borderRightColor: COLOR_VAR_VALIDATOR, 292788c88e8eSopenharmony_ci borderBottomColor: COLOR_VAR_VALIDATOR, 292888c88e8eSopenharmony_ci borderStyle: genEnumValidator(['solid', 'dashed', 'dotted']), 292988c88e8eSopenharmony_ci borderTopStyle: genEnumValidator(['solid', 'dashed', 'dotted']), 293088c88e8eSopenharmony_ci borderRightStyle: genEnumValidator(['solid', 'dashed', 'dotted']), 293188c88e8eSopenharmony_ci borderBottomStyle: genEnumValidator(['solid', 'dashed', 'dotted']), 293288c88e8eSopenharmony_ci borderLeftStyle: genEnumValidator(['solid', 'dashed', 'dotted']), 293388c88e8eSopenharmony_ci borderRadius: LENGTH_VALIDATOR, 293488c88e8eSopenharmony_ci borderBottomLeftRadius: LENGTH_VALIDATOR, 293588c88e8eSopenharmony_ci borderBottomRightRadius: LENGTH_VALIDATOR, 293688c88e8eSopenharmony_ci borderTopLeftRadius: LENGTH_VALIDATOR, 293788c88e8eSopenharmony_ci borderTopRightRadius: LENGTH_VALIDATOR, 293888c88e8eSopenharmony_ci borderLeft: BORDER_VALIDATOR, 293988c88e8eSopenharmony_ci borderRight: BORDER_VALIDATOR, 294088c88e8eSopenharmony_ci borderTop: BORDER_VALIDATOR, 294188c88e8eSopenharmony_ci borderBottom: BORDER_VALIDATOR 294288c88e8eSopenharmony_ci }, 294388c88e8eSopenharmony_ci flexbox: { 294488c88e8eSopenharmony_ci flex: genEnumValidator(['none', 'auto', 'initial']), 294588c88e8eSopenharmony_ci flexWrap: genEnumValidator(['nowrap', 'wrap']), 294688c88e8eSopenharmony_ci flexGrow: NUMBER_VALIDATOR, 294788c88e8eSopenharmony_ci flexShrink: NUMBER_VALIDATOR, 294888c88e8eSopenharmony_ci flexBasis: LENGTH_VALIDATOR, 294988c88e8eSopenharmony_ci flexDirection: genEnumValidator(['row', 'column']), 295088c88e8eSopenharmony_ci justifyContent: genEnumValidator(['flex-start', 'flex-end', 'center', 'space-between', 295188c88e8eSopenharmony_ci 'space-around', 'space-evenly']), 295288c88e8eSopenharmony_ci alignItems: genEnumValidator(['stretch', 'flex-start', 'flex-end', 'center', 'baseline']), 295388c88e8eSopenharmony_ci alignContent: genEnumValidator(['stretch', 'flex-start', 'flex-end', 'center', 'space-between', 'space-around']), 295488c88e8eSopenharmony_ci }, 295588c88e8eSopenharmony_ci position: { 295688c88e8eSopenharmony_ci position: genEnumValidator(['relative', 'fixed', 'absolute']), 295788c88e8eSopenharmony_ci top: PERCENTAGE_LENGTH_VALIDATOR, 295888c88e8eSopenharmony_ci bottom: PERCENTAGE_LENGTH_VALIDATOR, 295988c88e8eSopenharmony_ci left: PERCENTAGE_LENGTH_VALIDATOR, 296088c88e8eSopenharmony_ci right: PERCENTAGE_LENGTH_VALIDATOR, 296188c88e8eSopenharmony_ci zIndex: INTEGER_VALIDATOR 296288c88e8eSopenharmony_ci }, 296388c88e8eSopenharmony_ci common: { 296488c88e8eSopenharmony_ci background: BACKGROUND_VALIDATOR, 296588c88e8eSopenharmony_ci backgroundColor: COLOR_VAR_VALIDATOR, 296688c88e8eSopenharmony_ci backgroundImage: URL_VALIDATOR, 296788c88e8eSopenharmony_ci backgroundSize: BACKGROUND_SIZE_VALIDATOR, 296888c88e8eSopenharmony_ci backgroundRepeat: genEnumValidator(['repeat', 'no-repeat', 'repeat-x', 'repeat-y']), 296988c88e8eSopenharmony_ci backgroundPosition: BACKGROUND_POSITION_VALIDATOR, 297088c88e8eSopenharmony_ci opacity: NUMBER_VALIDATOR, 297188c88e8eSopenharmony_ci appearingDuration: NUMBER_VALIDATOR, 297288c88e8eSopenharmony_ci visibility: genEnumValidator(['visible', 'hidden']), 297388c88e8eSopenharmony_ci display: genEnumValidator(['flex', 'none', 'grid']), 297488c88e8eSopenharmony_ci imageFill: COLOR_VAR_VALIDATOR, 297588c88e8eSopenharmony_ci maskImage: MASK_VALIDATOR, 297688c88e8eSopenharmony_ci maskPosition: BACKGROUND_POSITION_VALIDATOR, 297788c88e8eSopenharmony_ci maskSize: BACKGROUND_SIZE_VALIDATOR 297888c88e8eSopenharmony_ci }, 297988c88e8eSopenharmony_ci text: { 298088c88e8eSopenharmony_ci color: COLOR_VAR_VALIDATOR, 298188c88e8eSopenharmony_ci fontSize: LENGTH_VALIDATOR, 298288c88e8eSopenharmony_ci allowScale: genEnumValidator(['true', 'false']), 298388c88e8eSopenharmony_ci letterSpacing: LENGTH_VALIDATOR, 298488c88e8eSopenharmony_ci fontStyle: genEnumValidator(['normal', 'italic']), 298588c88e8eSopenharmony_ci fontFamily: ANYTHING_VALIDATOR, 298688c88e8eSopenharmony_ci fontWeight: genEnumValidator(['normal', 'lighter', 'bold', 'bolder', "medium", "regular", 298788c88e8eSopenharmony_ci '100', '200', '300', '400', '500', '600', '700', '800', '900']), 298888c88e8eSopenharmony_ci textDecoration: genEnumValidator(['none', 'underline', 'line-through']), 298988c88e8eSopenharmony_ci textAlign: genEnumValidator(['start', 'end', 'left', 'center', 'right']), 299088c88e8eSopenharmony_ci textOverflow: genEnumValidator(['clip', 'ellipsis']), 299188c88e8eSopenharmony_ci textIndent: TEXT_INDENT_VALIDATOR, 299288c88e8eSopenharmony_ci lineHeight: LENGTH_VALIDATOR, 299388c88e8eSopenharmony_ci maxLines: ANYTHING_VALIDATOR, 299488c88e8eSopenharmony_ci minFontSize: LENGTH_VALIDATOR, 299588c88e8eSopenharmony_ci maxFontSize: LENGTH_VALIDATOR, 299688c88e8eSopenharmony_ci fontSizeStep: LENGTH_VALIDATOR, 299788c88e8eSopenharmony_ci preferFontSizes: ARRAY_LENGTH_VALIDATOR, 299888c88e8eSopenharmony_ci adaptHeight: genEnumValidator(['true', 'false']) 299988c88e8eSopenharmony_ci }, 300088c88e8eSopenharmony_ci progress: { 300188c88e8eSopenharmony_ci secondaryColor: COLOR_VAR_VALIDATOR, 300288c88e8eSopenharmony_ci scaleWidth: LENGTH_VALIDATOR, 300388c88e8eSopenharmony_ci scaleNumber: NUMBER_VALIDATOR, 300488c88e8eSopenharmony_ci startAngle: ANGLE_VALIDATOR, 300588c88e8eSopenharmony_ci totalAngle: ANGLE_VALIDATOR, 300688c88e8eSopenharmony_ci centerX: LENGTH_VALIDATOR, 300788c88e8eSopenharmony_ci centerY: LENGTH_VALIDATOR, 300888c88e8eSopenharmony_ci radius: LENGTH_VALIDATOR, 300988c88e8eSopenharmony_ci direction: genEnumValidator(['start-to-end', 'end-to-start']), 301088c88e8eSopenharmony_ci sections: NAME_VALIDATOR, 301188c88e8eSopenharmony_ci colors: ARRAY_COLOR_VALIDATOR, 301288c88e8eSopenharmony_ci weights: ARRAY_NUMBER_VALIDATOR 301388c88e8eSopenharmony_ci }, 301488c88e8eSopenharmony_ci chart: { 301588c88e8eSopenharmony_ci strokeWidth: LENGTH_VALIDATOR, 301688c88e8eSopenharmony_ci }, 301788c88e8eSopenharmony_ci button: { 301888c88e8eSopenharmony_ci textColor: COLOR_VAR_VALIDATOR, 301988c88e8eSopenharmony_ci iconWidth: LENGTH_VALIDATOR, 302088c88e8eSopenharmony_ci iconHeight: LENGTH_VALIDATOR 302188c88e8eSopenharmony_ci }, 302288c88e8eSopenharmony_ci image: { 302388c88e8eSopenharmony_ci objectFit: genEnumValidator(['cover', 'fill', 'contain', 'none', 'scale-down']), 302488c88e8eSopenharmony_ci matchTextDirection: genEnumValidator(['false', 'true']), 302588c88e8eSopenharmony_ci fitOriginalSize: genEnumValidator(['false', 'true']), 302688c88e8eSopenharmony_ci }, 302788c88e8eSopenharmony_ci list: { 302888c88e8eSopenharmony_ci itemExtent: PERCENTAGE_LENGTH_VALIDATOR, 302988c88e8eSopenharmony_ci fadeColor: COLOR_VAR_VALIDATOR, 303088c88e8eSopenharmony_ci dividerColor: COLOR_VAR_VALIDATOR, 303188c88e8eSopenharmony_ci dividerHeight: LENGTH_VALIDATOR, 303288c88e8eSopenharmony_ci dividerLength: LENGTH_VALIDATOR, 303388c88e8eSopenharmony_ci dividerOrigin: LENGTH_VALIDATOR, 303488c88e8eSopenharmony_ci scrollbarColor: COLOR_VALIDATOR, 303588c88e8eSopenharmony_ci scrollbarWidth: LENGTH_VALIDATOR, 303688c88e8eSopenharmony_ci scrollbarOffset: ARRAY_LENGTH_VALIDATOR 303788c88e8eSopenharmony_ci } 303888c88e8eSopenharmony_ci} 303988c88e8eSopenharmony_ci 304088c88e8eSopenharmony_civar backgroundValidatorMap = { 304188c88e8eSopenharmony_ci linearGradient: LINEAR_GRADIENT_VALIDATOR, 304288c88e8eSopenharmony_ci repeatingLinearGradient: LINEAR_GRADIENT_VALIDATOR, 304388c88e8eSopenharmony_ci linearGradientColor: ARRAY_COLOR_STOP_VALIDATOR, 304488c88e8eSopenharmony_ci linearGradientAngle: ANGLE_VALIDATOR, 304588c88e8eSopenharmony_ci linearGradientDirection: GRADIENT_DIRECTION_VALIDATOR 304688c88e8eSopenharmony_ci} 304788c88e8eSopenharmony_ci 304888c88e8eSopenharmony_civar transformValidatorMap = { 304988c88e8eSopenharmony_ci translate: MULTIPLE_PERCENTAGE_LENGTH_VALIDATOR, 305088c88e8eSopenharmony_ci translate3d: MULTIPLE_PERCENTAGE_LENGTH_VALIDATOR, 305188c88e8eSopenharmony_ci translateX: PERCENTAGE_LENGTH_VALIDATOR, 305288c88e8eSopenharmony_ci translateY: PERCENTAGE_LENGTH_VALIDATOR, 305388c88e8eSopenharmony_ci translateZ: PERCENTAGE_LENGTH_VALIDATOR, 305488c88e8eSopenharmony_ci scale: MULTIPLE_NUMBER_VALIDATOR, 305588c88e8eSopenharmony_ci scale3d: MULTIPLE_NUMBER_VALIDATOR, 305688c88e8eSopenharmony_ci scaleX: NUMBER_VALIDATOR, 305788c88e8eSopenharmony_ci scaleY: NUMBER_VALIDATOR, 305888c88e8eSopenharmony_ci scaleZ: NUMBER_VALIDATOR, 305988c88e8eSopenharmony_ci rotate: MUTIPLE_ANGLE_VALIDATOR, 306088c88e8eSopenharmony_ci rotate3d: ROTATE3D_VALIDATOR, 306188c88e8eSopenharmony_ci rotateX: ANGLE_VALIDATOR, 306288c88e8eSopenharmony_ci rotateY: ANGLE_VALIDATOR, 306388c88e8eSopenharmony_ci rotateZ: ANGLE_VALIDATOR, 306488c88e8eSopenharmony_ci skew: MUTIPLE_ANGLE_VALIDATOR, 306588c88e8eSopenharmony_ci skewX: ANGLE_VALIDATOR, 306688c88e8eSopenharmony_ci skewY: ANGLE_VALIDATOR, 306788c88e8eSopenharmony_ci matrix: MULTIPLE_NUMBER_VALIDATOR, 306888c88e8eSopenharmony_ci matrix3d: MULTIPLE_NUMBER_VALIDATOR, 306988c88e8eSopenharmony_ci perspective: PERCENTAGE_LENGTH_VALIDATOR, 307088c88e8eSopenharmony_ci} 307188c88e8eSopenharmony_ci 307288c88e8eSopenharmony_civar SUGGESTED_PROP_NAME_GROUP = {} 307388c88e8eSopenharmony_ci 307488c88e8eSopenharmony_civar validatorMap = {} 307588c88e8eSopenharmony_ci 307688c88e8eSopenharmony_ciconst card = process.env.DEVICE_LEVEL === 'card' 307788c88e8eSopenharmony_civar isLiteDevice = process.env.DEVICE_LEVEL === 'lite' 307888c88e8eSopenharmony_ci 307988c88e8eSopenharmony_civar PROP_NAME_GROUPS = process.env.DEVICE_LEVEL === 'lite' ? LITE_PROP_NAME_GROUPS : 308088c88e8eSopenharmony_ci card ? CARD_PROP_NAME_GROUPS : RICH_PROP_NAME_GROUPS 308188c88e8eSopenharmony_ci 308288c88e8eSopenharmony_ci/** 308388c88e8eSopenharmony_ci * flatten `PROP_NAME_GROUPS` to `validatorMap` 308488c88e8eSopenharmony_ci */ 308588c88e8eSopenharmony_cifunction genValidatorMap() { 308688c88e8eSopenharmony_ci var groupName, group, name 308788c88e8eSopenharmony_ci for (groupName in PROP_NAME_GROUPS) { 308888c88e8eSopenharmony_ci group = PROP_NAME_GROUPS[groupName] 308988c88e8eSopenharmony_ci for (name in group) { 309088c88e8eSopenharmony_ci validatorMap[name] = group[name] 309188c88e8eSopenharmony_ci } 309288c88e8eSopenharmony_ci } 309388c88e8eSopenharmony_ci} 309488c88e8eSopenharmony_ci 309588c88e8eSopenharmony_cigenValidatorMap() 309688c88e8eSopenharmony_ci 309788c88e8eSopenharmony_cifunction getValueUnit(dem) { 309888c88e8eSopenharmony_ci var str = dem.toString() 309988c88e8eSopenharmony_ci var getValue = str.match(/[-]{0,1}[1-9][0-9]*/) 310088c88e8eSopenharmony_ci var getUnit = str.match(/px|cm|%|em|vp|fp/) 310188c88e8eSopenharmony_ci var result = {value: getValue, unit: getUnit} 310288c88e8eSopenharmony_ci return result 310388c88e8eSopenharmony_ci} 310488c88e8eSopenharmony_ci 310588c88e8eSopenharmony_cifunction isOperator(value) { 310688c88e8eSopenharmony_ci var operatorString = "+-*/()" 310788c88e8eSopenharmony_ci return operatorString.indexOf(value) > -1 310888c88e8eSopenharmony_ci} 310988c88e8eSopenharmony_ci 311088c88e8eSopenharmony_cifunction getPrioraty(value) { 311188c88e8eSopenharmony_ci switch(value) { 311288c88e8eSopenharmony_ci case '+': 311388c88e8eSopenharmony_ci case '-': 311488c88e8eSopenharmony_ci return 1 311588c88e8eSopenharmony_ci case '*': 311688c88e8eSopenharmony_ci case '/': 311788c88e8eSopenharmony_ci return 2 311888c88e8eSopenharmony_ci default: 311988c88e8eSopenharmony_ci return 0 312088c88e8eSopenharmony_ci } 312188c88e8eSopenharmony_ci} 312288c88e8eSopenharmony_ci 312388c88e8eSopenharmony_cifunction prioraty(o1, o2) { 312488c88e8eSopenharmony_ci return getPrioraty(o1) <= getPrioraty(o2) 312588c88e8eSopenharmony_ci} 312688c88e8eSopenharmony_ci 312788c88e8eSopenharmony_cifunction dal2Rpn(exp) { 312888c88e8eSopenharmony_ci var inputStack = [] 312988c88e8eSopenharmony_ci var outputStack = [] 313088c88e8eSopenharmony_ci var outputQueue = [] 313188c88e8eSopenharmony_ci var str = 313288c88e8eSopenharmony_ci exp.replace(/calc/g, "").replace(/(?<!var\(\-\-\w+|var\(\-\-\w+\,\s*\w+)\)/g, " )").replace(/(?<!var)\(/g, "( ") 313388c88e8eSopenharmony_ci var inputStack=str.split(/(?<!\,)\s+/) 313488c88e8eSopenharmony_ci var value, log 313588c88e8eSopenharmony_ci while(inputStack.length > 0) { 313688c88e8eSopenharmony_ci var cur = inputStack.shift() 313788c88e8eSopenharmony_ci if(isOperator(cur)) { 313888c88e8eSopenharmony_ci if(cur == '(') { 313988c88e8eSopenharmony_ci outputStack.push(cur) 314088c88e8eSopenharmony_ci } else if(cur == ')') { 314188c88e8eSopenharmony_ci var po = outputStack.pop() 314288c88e8eSopenharmony_ci while(po != '(' && outputStack.length > 0) { 314388c88e8eSopenharmony_ci outputQueue.push(po) 314488c88e8eSopenharmony_ci po = outputStack.pop() 314588c88e8eSopenharmony_ci } 314688c88e8eSopenharmony_ci if(po != '(') { 314788c88e8eSopenharmony_ci log = {reason: 'ERROR: Expression unmatched ()'} 314888c88e8eSopenharmony_ci } 314988c88e8eSopenharmony_ci } else { 315088c88e8eSopenharmony_ci while(prioraty(cur, outputStack[outputStack.length - 1]) && outputStack.length > 0) { 315188c88e8eSopenharmony_ci outputQueue.push(outputStack.pop()) 315288c88e8eSopenharmony_ci } 315388c88e8eSopenharmony_ci outputStack.push(cur) 315488c88e8eSopenharmony_ci } 315588c88e8eSopenharmony_ci } else { 315688c88e8eSopenharmony_ci outputQueue.push(cur) 315788c88e8eSopenharmony_ci } 315888c88e8eSopenharmony_ci } 315988c88e8eSopenharmony_ci return { 316088c88e8eSopenharmony_ci value: outputQueue, 316188c88e8eSopenharmony_ci log: log 316288c88e8eSopenharmony_ci } 316388c88e8eSopenharmony_ci} 316488c88e8eSopenharmony_ci 316588c88e8eSopenharmony_cifunction checkComputation(left, right, operator) { 316688c88e8eSopenharmony_ci var value, log 316788c88e8eSopenharmony_ci if (operator == '*') { 316888c88e8eSopenharmony_ci if ((right.match(/[a-zA-Z]/) && left.match(/[a-zA-Z]/)) || (!right.match(/[a-zA-Z]/) && !left.match(/[a-zA-Z]/))) { 316988c88e8eSopenharmony_ci log = {reason: 'ERROR: The multiplier must contain and contain only one integer'} 317088c88e8eSopenharmony_ci } 317188c88e8eSopenharmony_ci } 317288c88e8eSopenharmony_ci if (operator == '/') { 317388c88e8eSopenharmony_ci if (right.match(/[a-zA-Z]|(?<![1-9])[0]/)) { 317488c88e8eSopenharmony_ci log = {reason: 'ERROR: Divisor must be an integer and cannot be zero'} 317588c88e8eSopenharmony_ci } 317688c88e8eSopenharmony_ci } 317788c88e8eSopenharmony_ci if (operator == '+') { 317888c88e8eSopenharmony_ci if (!(right.match(/[a-zA-Z%]/) && left.match(/[a-zA-Z%]/))) { 317988c88e8eSopenharmony_ci log = {reason: 'ERROR: Addition cannot contain integers'} 318088c88e8eSopenharmony_ci } 318188c88e8eSopenharmony_ci } 318288c88e8eSopenharmony_ci if (operator == '-') { 318388c88e8eSopenharmony_ci if (!(right.match(/[a-zA-Z%]/) && left.match(/[a-zA-Z%]/))) { 318488c88e8eSopenharmony_ci log = {reason: 'ERROR: Subtraction cannot contain integers'} 318588c88e8eSopenharmony_ci } 318688c88e8eSopenharmony_ci } 318788c88e8eSopenharmony_ci return log 318888c88e8eSopenharmony_ci} 318988c88e8eSopenharmony_ci 319088c88e8eSopenharmony_cifunction getResult(left, right, operator) { 319188c88e8eSopenharmony_ci var value, log, errLog 319288c88e8eSopenharmony_ci if (left.match(/var/)) { 319388c88e8eSopenharmony_ci left = cssVarFun(left) 319488c88e8eSopenharmony_ci } 319588c88e8eSopenharmony_ci if (right.match(/var/)) { 319688c88e8eSopenharmony_ci right = cssVarFun(right) 319788c88e8eSopenharmony_ci } 319888c88e8eSopenharmony_ci errLog = checkComputation(left, right, operator) 319988c88e8eSopenharmony_ci if (errLog) { 320088c88e8eSopenharmony_ci return { value: null, log: errLog } 320188c88e8eSopenharmony_ci } 320288c88e8eSopenharmony_ci var result, value, unit 320388c88e8eSopenharmony_ci var leftValue = getValueUnit(left) 320488c88e8eSopenharmony_ci var rightValue = getValueUnit(right) 320588c88e8eSopenharmony_ci if (left.match(/\(/) | right.match(/\(/)) { 320688c88e8eSopenharmony_ci result = left + ' ' + operator + ' ' + right 320788c88e8eSopenharmony_ci } else { 320888c88e8eSopenharmony_ci if (operator == '*') { 320988c88e8eSopenharmony_ci value = leftValue.value * rightValue.value 321088c88e8eSopenharmony_ci if (leftValue.unit == null) { 321188c88e8eSopenharmony_ci unit = rightValue.unit 321288c88e8eSopenharmony_ci } else { unit = leftValue.unit} 321388c88e8eSopenharmony_ci result = value + unit 321488c88e8eSopenharmony_ci } else if (operator == '/') { 321588c88e8eSopenharmony_ci if (parseInt(rightValue.value) != 0) { 321688c88e8eSopenharmony_ci value = leftValue.value / rightValue.value 321788c88e8eSopenharmony_ci unit = leftValue.unit 321888c88e8eSopenharmony_ci result = value + unit 321988c88e8eSopenharmony_ci } 322088c88e8eSopenharmony_ci } else if (operator == '+') { 322188c88e8eSopenharmony_ci if (JSON.stringify(leftValue.unit) == JSON.stringify(rightValue.unit)) { 322288c88e8eSopenharmony_ci value = parseInt(leftValue.value) + parseInt(rightValue.value) 322388c88e8eSopenharmony_ci unit = leftValue.unit 322488c88e8eSopenharmony_ci result = value + unit 322588c88e8eSopenharmony_ci } else result = '(' + left + ' ' + operator + ' ' + right + ')' 322688c88e8eSopenharmony_ci } else if (operator == '-') { 322788c88e8eSopenharmony_ci if (JSON.stringify(leftValue.unit) == JSON.stringify(rightValue.unit)) { 322888c88e8eSopenharmony_ci value = parseInt(leftValue.value) - parseInt(rightValue.value) 322988c88e8eSopenharmony_ci unit = leftValue.unit 323088c88e8eSopenharmony_ci result = value + unit 323188c88e8eSopenharmony_ci } else result = '(' + left + ' ' + operator + ' ' + right + ')' 323288c88e8eSopenharmony_ci } 323388c88e8eSopenharmony_ci } 323488c88e8eSopenharmony_ci return { value: result, log: null } 323588c88e8eSopenharmony_ci} 323688c88e8eSopenharmony_ci 323788c88e8eSopenharmony_cifunction evalRpn(rpnQueue) { 323888c88e8eSopenharmony_ci var outputStack = [] 323988c88e8eSopenharmony_ci var value, res, log 324088c88e8eSopenharmony_ci while(rpnQueue.length > 0) { 324188c88e8eSopenharmony_ci var cur = rpnQueue.shift() 324288c88e8eSopenharmony_ci if(!isOperator(cur)) { 324388c88e8eSopenharmony_ci outputStack.push(cur) 324488c88e8eSopenharmony_ci } else { 324588c88e8eSopenharmony_ci if(outputStack.length < 2) { 324688c88e8eSopenharmony_ci log = {reason: 'ERROR: Expression does not conform to specification'} 324788c88e8eSopenharmony_ci } 324888c88e8eSopenharmony_ci var sec = outputStack.pop() 324988c88e8eSopenharmony_ci var fir = outputStack.pop() 325088c88e8eSopenharmony_ci res = getResult(fir, sec, cur) 325188c88e8eSopenharmony_ci log = res.log 325288c88e8eSopenharmony_ci if (log) { 325388c88e8eSopenharmony_ci return { 325488c88e8eSopenharmony_ci value: null, 325588c88e8eSopenharmony_ci log: log 325688c88e8eSopenharmony_ci } 325788c88e8eSopenharmony_ci } else { 325888c88e8eSopenharmony_ci outputStack.push(res.value) 325988c88e8eSopenharmony_ci } 326088c88e8eSopenharmony_ci } 326188c88e8eSopenharmony_ci } 326288c88e8eSopenharmony_ci if(outputStack.length != 1) { 326388c88e8eSopenharmony_ci log = {reason: 'ERROR: Expression does not conform to specification'} 326488c88e8eSopenharmony_ci } else { 326588c88e8eSopenharmony_ci if (outputStack[0].match(/[+-]/)) { 326688c88e8eSopenharmony_ci value = 'calc' + outputStack[0] 326788c88e8eSopenharmony_ci } else { 326888c88e8eSopenharmony_ci value = outputStack[0] 326988c88e8eSopenharmony_ci } 327088c88e8eSopenharmony_ci } 327188c88e8eSopenharmony_ci return { 327288c88e8eSopenharmony_ci value: value, 327388c88e8eSopenharmony_ci log: log 327488c88e8eSopenharmony_ci } 327588c88e8eSopenharmony_ci} 327688c88e8eSopenharmony_ci 327788c88e8eSopenharmony_civar cssPropData = [] 327888c88e8eSopenharmony_ci 327988c88e8eSopenharmony_cifunction saveCssProp(name, value) { 328088c88e8eSopenharmony_ci if (name.match(/\-\-/)) { 328188c88e8eSopenharmony_ci while (value.match(/var/)) { 328288c88e8eSopenharmony_ci var value = cssVarFun(value) 328388c88e8eSopenharmony_ci } 328488c88e8eSopenharmony_ci cssPropData.push({name: name,value: value}) 328588c88e8eSopenharmony_ci } 328688c88e8eSopenharmony_ci} 328788c88e8eSopenharmony_ci 328888c88e8eSopenharmony_cifunction cssVarFun(value) { 328988c88e8eSopenharmony_ci if (value.match(/calc/)) { 329088c88e8eSopenharmony_ci return value 329188c88e8eSopenharmony_ci } else { 329288c88e8eSopenharmony_ci if (value.match(/var/)) { 329388c88e8eSopenharmony_ci if (value.match(/\,/)) { 329488c88e8eSopenharmony_ci var cssVarFir = value.substring(0,value.indexOf(",")).replace("var(","").trim() 329588c88e8eSopenharmony_ci var cssVarSec = value.substring(value.indexOf(",")+1,value.length).replace(")","").trim() 329688c88e8eSopenharmony_ci } else { 329788c88e8eSopenharmony_ci var cssVarFir = value.replace("var(","").replace(")","").trim() 329888c88e8eSopenharmony_ci var cssVarSec = "" 329988c88e8eSopenharmony_ci } 330088c88e8eSopenharmony_ci let varValue = cssVarSec 330188c88e8eSopenharmony_ci for(var i=0, len=cssPropData.length; i<len; i++) { 330288c88e8eSopenharmony_ci var cPDName = cssPropData[i].name.trim() 330388c88e8eSopenharmony_ci cssVarFir = util.hyphenedToCamelCase(cssVarFir) 330488c88e8eSopenharmony_ci if (cssVarFir == cPDName) { 330588c88e8eSopenharmony_ci varValue = cssPropData[i].value 330688c88e8eSopenharmony_ci } 330788c88e8eSopenharmony_ci } 330888c88e8eSopenharmony_ci return varValue 330988c88e8eSopenharmony_ci } else { 331088c88e8eSopenharmony_ci return value 331188c88e8eSopenharmony_ci } 331288c88e8eSopenharmony_ci } 331388c88e8eSopenharmony_ci} 331488c88e8eSopenharmony_ci 331588c88e8eSopenharmony_cifunction expValidate(name, value) { 331688c88e8eSopenharmony_ci var res, log 331788c88e8eSopenharmony_ci saveCssProp(name, value) 331888c88e8eSopenharmony_ci if (typeof value === 'string' && name != 'border') { 331988c88e8eSopenharmony_ci if (value.match(/var/)) { 332088c88e8eSopenharmony_ci value = cssVarFun(value) 332188c88e8eSopenharmony_ci } 332288c88e8eSopenharmony_ci if (value.match(/calc/)) { 332388c88e8eSopenharmony_ci var checkOp = 332488c88e8eSopenharmony_ci /[a-zA-Z0-9()]\+|\+[a-zA-Z0-9()]|[a-zA-Z0-9()](?<!\-)\-(?!\-)|(?<!\-)\-(?!\-)[a-zA-Z0-9()]|[a-zA-Z0-9()]\*|\*[a-zA-Z0-9()]|[a-zA-Z0-9()]\/|\/[a-zA-Z0-9()]/ 332588c88e8eSopenharmony_ci if (value.match(checkOp) && value.match(/calc\(|var\(\-\-/)) { 332688c88e8eSopenharmony_ci log = {reason: 'ERROR: Expression error, A space is required before and after the operator'} 332788c88e8eSopenharmony_ci return { 332888c88e8eSopenharmony_ci log: log 332988c88e8eSopenharmony_ci } 333088c88e8eSopenharmony_ci } 333188c88e8eSopenharmony_ci res = dal2Rpn(value) 333288c88e8eSopenharmony_ci res = evalRpn(res.value) 333388c88e8eSopenharmony_ci log = res.log 333488c88e8eSopenharmony_ci value = res.value 333588c88e8eSopenharmony_ci } 333688c88e8eSopenharmony_ci } 333788c88e8eSopenharmony_ci return { 333888c88e8eSopenharmony_ci value: value, 333988c88e8eSopenharmony_ci log: log 334088c88e8eSopenharmony_ci } 334188c88e8eSopenharmony_ci} 334288c88e8eSopenharmony_ci 334388c88e8eSopenharmony_ci/** 334488c88e8eSopenharmony_ci * validate a CSS name/value pair 334588c88e8eSopenharmony_ci * 334688c88e8eSopenharmony_ci * @param {string} name camel cased 334788c88e8eSopenharmony_ci * @param {string} value 334888c88e8eSopenharmony_ci * @return {object} 334988c88e8eSopenharmony_ci * - value:string or null 335088c88e8eSopenharmony_ci * - log:{reason:string} or undefined 335188c88e8eSopenharmony_ci */ 335288c88e8eSopenharmony_cifunction validate(name, value) { 335388c88e8eSopenharmony_ci var log, expRes 335488c88e8eSopenharmony_ci expRes = expValidate(name, value) 335588c88e8eSopenharmony_ci if (expRes.log) { 335688c88e8eSopenharmony_ci return { 335788c88e8eSopenharmony_ci value: null, 335888c88e8eSopenharmony_ci log: expRes.log 335988c88e8eSopenharmony_ci } 336088c88e8eSopenharmony_ci } else { 336188c88e8eSopenharmony_ci value = expRes.value 336288c88e8eSopenharmony_ci } 336388c88e8eSopenharmony_ci 336488c88e8eSopenharmony_ci var result 336588c88e8eSopenharmony_ci var validator = validatorMap[name] 336688c88e8eSopenharmony_ci if (typeof validator === 'function') { 336788c88e8eSopenharmony_ci const flag = /{{{(.+?)}}}|{{(.+?)}}/.test(value) && card 336888c88e8eSopenharmony_ci if (typeof value !== 'function' && !flag) { 336988c88e8eSopenharmony_ci result = validator(value, name) 337088c88e8eSopenharmony_ci } 337188c88e8eSopenharmony_ci /* istanbul ignore else */ 337288c88e8eSopenharmony_ci else { 337388c88e8eSopenharmony_ci result = {value: value} 337488c88e8eSopenharmony_ci } 337588c88e8eSopenharmony_ci if (result.reason) { 337688c88e8eSopenharmony_ci log = {reason: result.reason(name, value, result.value)} 337788c88e8eSopenharmony_ci } 337888c88e8eSopenharmony_ci } 337988c88e8eSopenharmony_ci else { 338088c88e8eSopenharmony_ci // ensure number type, no `px` 338188c88e8eSopenharmony_ci /* istanbul ignore else */ 338288c88e8eSopenharmony_ci if (typeof value !== 'function') { 338388c88e8eSopenharmony_ci var match = value.match(LENGTH_REGEXP) 338488c88e8eSopenharmony_ci if (match && (!match[1] || SUPPORT_CSS_UNIT.indexOf(match[1]) === -1)) { 338588c88e8eSopenharmony_ci value = parseFloat(value) 338688c88e8eSopenharmony_ci } 338788c88e8eSopenharmony_ci } 338888c88e8eSopenharmony_ci result = {value: value} 338988c88e8eSopenharmony_ci var suggestedName = SUGGESTED_PROP_NAME_GROUP[name] 339088c88e8eSopenharmony_ci var suggested = suggestedName ? ', suggest `' + util.camelCaseToHyphened(suggestedName) + '`' : '' 339188c88e8eSopenharmony_ci log = {reason: 'WARNING: `' + util.camelCaseToHyphened(name) + 339288c88e8eSopenharmony_ci '` is not a standard attribute name and may not be supported' + suggested} 339388c88e8eSopenharmony_ci } 339488c88e8eSopenharmony_ci return { 339588c88e8eSopenharmony_ci value: result.value, 339688c88e8eSopenharmony_ci log: log 339788c88e8eSopenharmony_ci } 339888c88e8eSopenharmony_ci} 339988c88e8eSopenharmony_ci 340088c88e8eSopenharmony_civar validateFuncMap = { 340188c88e8eSopenharmony_ci length: LENGTH_VALIDATOR, 340288c88e8eSopenharmony_ci number: NUMBER_VALIDATOR, 340388c88e8eSopenharmony_ci date: DATE_VALIDATOR 340488c88e8eSopenharmony_ci} 340588c88e8eSopenharmony_ci 340688c88e8eSopenharmony_cimodule.exports = { 340788c88e8eSopenharmony_ci BASIC_COLOR_KEYWORDS: BASIC_COLOR_KEYWORDS, 340888c88e8eSopenharmony_ci EXTENDED_COLOR_KEYWORDS: EXTENDED_COLOR_KEYWORDS, 340988c88e8eSopenharmony_ci 341088c88e8eSopenharmony_ci LENGTH_VALIDATOR: LENGTH_VALIDATOR, 341188c88e8eSopenharmony_ci COLOR_VALIDATOR: COLOR_VALIDATOR, 341288c88e8eSopenharmony_ci COLOR_VAR_VALIDATOR: COLOR_VAR_VALIDATOR, 341388c88e8eSopenharmony_ci NUMBER_VALIDATOR: NUMBER_VALIDATOR, 341488c88e8eSopenharmony_ci INTEGER_VALIDATOR: INTEGER_VALIDATOR, 341588c88e8eSopenharmony_ci genEnumValidator: genEnumValidator, 341688c88e8eSopenharmony_ci 341788c88e8eSopenharmony_ci TRANSITION_PROPERTY_VALIDATOR: TRANSITION_PROPERTY_VALIDATOR, 341888c88e8eSopenharmony_ci TRANSITION_DURATION_VALIDATOR: TRANSITION_INTERVAL_VALIDATOR, 341988c88e8eSopenharmony_ci TRANSITION_DELAY_VALIDATOR: TRANSITION_INTERVAL_VALIDATOR, 342088c88e8eSopenharmony_ci TRANSITION_TIMING_FUNCTION_VALIDATOR: TRANSITION_TIMING_FUNCTION_VALIDATOR, 342188c88e8eSopenharmony_ci 342288c88e8eSopenharmony_ci PROP_NAME_GROUPS: PROP_NAME_GROUPS, 342388c88e8eSopenharmony_ci validateFuncMap: validateFuncMap, 342488c88e8eSopenharmony_ci 342588c88e8eSopenharmony_ci map: validatorMap, 342688c88e8eSopenharmony_ci validate: validate 342788c88e8eSopenharmony_ci} 3428