188c88e8eSopenharmony_ci# Weex `<style>` Transformer 288c88e8eSopenharmony_ci 388c88e8eSopenharmony_ci[![NPM version][npm-image]][npm-url] 488c88e8eSopenharmony_ci[![Build status][circle-image]][circle-url] 588c88e8eSopenharmony_ci[![Downloads][downloads-image]][downloads-url] 688c88e8eSopenharmony_ci 788c88e8eSopenharmony_ci[npm-image]: https://img.shields.io/npm/v/weex-styler.svg?style=flat-square 888c88e8eSopenharmony_ci[npm-url]: https://npmjs.org/package/weex-styler 988c88e8eSopenharmony_ci[circle-image]: https://circleci.com/gh/alibaba/weex_toolchain.svg?style=svg 1088c88e8eSopenharmony_ci[circle-url]: https://circleci.com/gh/alibaba/weex_toolchain/tree/master 1188c88e8eSopenharmony_ci[downloads-image]: https://img.shields.io/npm/dm/weex-styler.svg?style=flat-square 1288c88e8eSopenharmony_ci[downloads-url]: https://npmjs.org/package/weex-styler 1388c88e8eSopenharmony_ci 1488c88e8eSopenharmony_ci## Features 1588c88e8eSopenharmony_ci 1688c88e8eSopenharmony_ci- convert a `<style>` element to JSON format 1788c88e8eSopenharmony_ci- autofix common mistakes 1888c88e8eSopenharmony_ci- friendly warnings 1988c88e8eSopenharmony_ci 2088c88e8eSopenharmony_ci## API 2188c88e8eSopenharmony_ci 2288c88e8eSopenharmony_ci- `parse(code, done)` 2388c88e8eSopenharmony_ci- `validate(json, done)` 2488c88e8eSopenharmony_ci- `validateItem(name, value)` 2588c88e8eSopenharmony_ci 2688c88e8eSopenharmony_ci### util api 2788c88e8eSopenharmony_ci 2888c88e8eSopenharmony_ci- `util.hyphenedToCamelCase(value)` 2988c88e8eSopenharmony_ci- `util.camelCaseToHyphened(value)` 3088c88e8eSopenharmony_ci 3188c88e8eSopenharmony_ci```javascript 3288c88e8eSopenharmony_ci/** 3388c88e8eSopenharmony_ci * Parse `<style>` code to a JSON Object and log errors & warnings 3488c88e8eSopenharmony_ci * 3588c88e8eSopenharmony_ci * @param {string} code 3688c88e8eSopenharmony_ci * @param {function} done 3788c88e8eSopenharmony_ci */ 3888c88e8eSopenharmony_cifunction parse(code, done) {} 3988c88e8eSopenharmony_ci 4088c88e8eSopenharmony_ci/** 4188c88e8eSopenharmony_ci * Validate a JSON Object and log errors & warnings 4288c88e8eSopenharmony_ci * 4388c88e8eSopenharmony_ci * @param {object} json 4488c88e8eSopenharmony_ci * @param {function} done 4588c88e8eSopenharmony_ci */ 4688c88e8eSopenharmony_cifunction validate(json, done) {} 4788c88e8eSopenharmony_ci 4888c88e8eSopenharmony_ci/** 4988c88e8eSopenharmony_ci * Result callback 5088c88e8eSopenharmony_ci * 5188c88e8eSopenharmony_ci * data 5288c88e8eSopenharmony_ci * - jsonStyle{}: `classname.propname.value`-like object 5388c88e8eSopenharmony_ci * - log[{line, column, reason}] 5488c88e8eSopenharmony_ci * 5588c88e8eSopenharmony_ci * @param {Error} err 5688c88e8eSopenharmony_ci * @param {object} data 5788c88e8eSopenharmony_ci */ 5888c88e8eSopenharmony_cifunction done(err, data) {} 5988c88e8eSopenharmony_ci 6088c88e8eSopenharmony_ci/** 6188c88e8eSopenharmony_ci * Validate a single name-value pair 6288c88e8eSopenharmony_ci * 6388c88e8eSopenharmony_ci * @param {string} name camel cased 6488c88e8eSopenharmony_ci * @param {string} value 6588c88e8eSopenharmony_ci * @return {object} 6688c88e8eSopenharmony_ci * - value 6788c88e8eSopenharmony_ci * - log{reason} 6888c88e8eSopenharmony_ci */ 6988c88e8eSopenharmony_cifunction validateItem(name, value) {} 7088c88e8eSopenharmony_ci``` 7188c88e8eSopenharmony_ci 7288c88e8eSopenharmony_ci## Validation 7388c88e8eSopenharmony_ci 7488c88e8eSopenharmony_ci- rule check: only common rule type supported, othres will be ignored 7588c88e8eSopenharmony_ci- selector check: only single-classname selector is supported, others will be ignored 7688c88e8eSopenharmony_ci- prop name check: out-of-defined prop name will be warned but preserved 7788c88e8eSopenharmony_ci- prop value check: common prop value mistakes will be autofixed or ignored 7888c88e8eSopenharmony_ci + color type: keywords, `#xxx` -> warning: `#xxxxxx` 7988c88e8eSopenharmony_ci + color type: `transparent` -> error: not supported 8088c88e8eSopenharmony_ci + length type: `100px` -> warning: `100` 8188c88e8eSopenharmony_ci 8288c88e8eSopenharmony_ci## Demo 8388c88e8eSopenharmony_ci 8488c88e8eSopenharmony_ci```javascript 8588c88e8eSopenharmony_civar styler = require('weex-styler') 8688c88e8eSopenharmony_ci 8788c88e8eSopenharmony_civar code = 'html {color: #000000;} .foo {color: red; -webkit-transform: rotate(90deg); width: 200px;}' 8888c88e8eSopenharmony_ci 8988c88e8eSopenharmony_cistyler.parse(code, function (err, data) { 9088c88e8eSopenharmony_ci // syntax error 9188c88e8eSopenharmony_ci // format: {line, column, reason, ...} 9288c88e8eSopenharmony_ci err 9388c88e8eSopenharmony_ci // result 9488c88e8eSopenharmony_ci // {foo: {color: '#ff0000', webkitTransform: 'rotate(90deg)', width: 200}} 9588c88e8eSopenharmony_ci data.jsonStyle 9688c88e8eSopenharmony_ci // format: {line, column, reason} 9788c88e8eSopenharmony_ci // - Error: Selector `html` is not supported. Weex only support single-classname selector 9888c88e8eSopenharmony_ci // - Warning: prop value `red` is autofixed to `#ff0000` 9988c88e8eSopenharmony_ci // - Warning: prop name `-webkit-transform` is not supported 10088c88e8eSopenharmony_ci // - Warning: prop value `200px` is autofixed to `200` 10188c88e8eSopenharmony_ci data.log[] 10288c88e8eSopenharmony_ci}) 10388c88e8eSopenharmony_ci 10488c88e8eSopenharmony_civar jsonStyle = { 10588c88e8eSopenharmony_ci foo: { 10688c88e8eSopenharmony_ci color: 'red', 10788c88e8eSopenharmony_ci webkitTransform: 'rotate(90deg)', 10888c88e8eSopenharmony_ci width: '200px' 10988c88e8eSopenharmony_ci } 11088c88e8eSopenharmony_ci} 11188c88e8eSopenharmony_ci 11288c88e8eSopenharmony_cistyler.validate(json, function (err, data) { 11388c88e8eSopenharmony_ci // syntax error 11488c88e8eSopenharmony_ci err 11588c88e8eSopenharmony_ci // result 11688c88e8eSopenharmony_ci // {foo: {color: '#ff0000', webkitTransform: 'rotate(90deg)', width: 200}} 11788c88e8eSopenharmony_ci data.jsonStyle 11888c88e8eSopenharmony_ci // format: {reason} 11988c88e8eSopenharmony_ci // - Warning: prop value `red` is autofixed to `#ff0000` 12088c88e8eSopenharmony_ci // - Warning: prop name `-webkit-transform` is not supported 12188c88e8eSopenharmony_ci // - Warning: prop value `200px` is autofixed to `200` 12288c88e8eSopenharmony_ci data.log[] 12388c88e8eSopenharmony_ci}) 12488c88e8eSopenharmony_ci``` 125