188c88e8eSopenharmony_cifunction generateDeclaration (property, value, position) { 288c88e8eSopenharmony_ci return { 388c88e8eSopenharmony_ci type: 'declaration', 488c88e8eSopenharmony_ci property, 588c88e8eSopenharmony_ci value, 688c88e8eSopenharmony_ci position 788c88e8eSopenharmony_ci } 888c88e8eSopenharmony_ci} 988c88e8eSopenharmony_cifunction transition (declaration) { 1088c88e8eSopenharmony_ci var CHUNK_REGEXP = /^(\S*)?\s*(\d*\.?\d+(?:ms|s)?)?\s*(\S*)?\s*(\d*\.?\d+(?:ms|s)?)?$/ 1188c88e8eSopenharmony_ci var match = declaration.value.match(CHUNK_REGEXP) 1288c88e8eSopenharmony_ci var result = [] 1388c88e8eSopenharmony_ci var position = declaration.position 1488c88e8eSopenharmony_ci match[1] && result.push(generateDeclaration('transition-property', match[1], position)) 1588c88e8eSopenharmony_ci match[2] && result.push(generateDeclaration('transition-duration', match[2], position)) 1688c88e8eSopenharmony_ci match[3] && result.push(generateDeclaration('transition-timing-function', match[3], position)) 1788c88e8eSopenharmony_ci match[4] && result.push(generateDeclaration('transition-delay', match[4], position)) 1888c88e8eSopenharmony_ci return result 1988c88e8eSopenharmony_ci} 2088c88e8eSopenharmony_ci 2188c88e8eSopenharmony_cifunction margin (declaration) { 2288c88e8eSopenharmony_ci var position = declaration.position 2388c88e8eSopenharmony_ci var splitResult = declaration.value.split(/\s+/) 2488c88e8eSopenharmony_ci var result = [] 2588c88e8eSopenharmony_ci switch (splitResult.length) { 2688c88e8eSopenharmony_ci case 1: 2788c88e8eSopenharmony_ci splitResult.push(splitResult[0], splitResult[0], splitResult[0]) 2888c88e8eSopenharmony_ci break 2988c88e8eSopenharmony_ci case 2: 3088c88e8eSopenharmony_ci splitResult.push(splitResult[0], splitResult[1]) 3188c88e8eSopenharmony_ci break 3288c88e8eSopenharmony_ci case 3: 3388c88e8eSopenharmony_ci splitResult.push(splitResult[1]) 3488c88e8eSopenharmony_ci break 3588c88e8eSopenharmony_ci } 3688c88e8eSopenharmony_ci result.push( 3788c88e8eSopenharmony_ci generateDeclaration('margin-top', splitResult[0], position), 3888c88e8eSopenharmony_ci generateDeclaration('margin-right', splitResult[1], position), 3988c88e8eSopenharmony_ci generateDeclaration('margin-bottom', splitResult[2], position), 4088c88e8eSopenharmony_ci generateDeclaration('margin-left', splitResult[3], position) 4188c88e8eSopenharmony_ci ) 4288c88e8eSopenharmony_ci return result 4388c88e8eSopenharmony_ci} 4488c88e8eSopenharmony_ci 4588c88e8eSopenharmony_civar parserCollection = { 4688c88e8eSopenharmony_ci transition, 4788c88e8eSopenharmony_ci margin 4888c88e8eSopenharmony_ci} 4988c88e8eSopenharmony_ci 5088c88e8eSopenharmony_cimodule.exports = function (declarations) { 5188c88e8eSopenharmony_ci return declarations.reduce((result, declaration) => { 5288c88e8eSopenharmony_ci var parser = parserCollection[declaration.property] 5388c88e8eSopenharmony_ci if (parser) { 5488c88e8eSopenharmony_ci return result.concat(parser(declaration)) 5588c88e8eSopenharmony_ci } else { 5688c88e8eSopenharmony_ci result.push(declaration) 5788c88e8eSopenharmony_ci return result 5888c88e8eSopenharmony_ci } 5988c88e8eSopenharmony_ci }, []) 6088c88e8eSopenharmony_ci} 61