weex-styler

Weex <style> transformer


Keywords
weex
License
MIT
Install
npm install weex-styler@0.3.0

Documentation

Weex <style> Transformer

NPM version Build status Downloads

Features

  • convert a <style> element to JSON format
  • autofix common mistakes
  • friendly warnings

API

  • parse(code, done)
  • validate(json, done)
  • validateItem(name, value)

util api

  • util.hyphenedToCamelCase(value)
  • util.camelCaseToHyphened(value)
/**
 * Parse `<style>` code to a JSON Object and log errors & warnings
 * 
 * @param {string} code
 * @param {function} done
 */
function parse(code, done) {}

/**
 * Validate a JSON Object and log errors & warnings
 * 
 * @param {object} json
 * @param {function} done
 */
function validate(json, done) {}

/**
 * Result callback
 *
 * data
 * - jsonStyle{}: `classname.propname.value`-like object
 * - log[{line, column, reason}]
 * 
 * @param {Error} err
 * @param {object} data
 */
function done(err, data) {}

/**
 * Validate a single name-value pair
 * 
 * @param  {string} name  camel cased
 * @param  {string} value
 * @return {object}
 * - value
 * - log{reason}
 */
function validateItem(name, value) {}

Validation

  • rule check: only common rule type supported, othres will be ignored
  • selector check: only single-classname selector is supported, others will be ignored
  • prop name check: out-of-defined prop name will be warned but preserved
  • prop value check: common prop value mistakes will be autofixed or ignored
    • color type: keywords, #xxx -> warning: #xxxxxx
    • color type: transparent -> error: not supported
    • length type: 100px -> warning: 100

Demo

var styler = require('weex-styler')

var code = 'html {color: #000000;} .foo {color: red; -webkit-transform: rotate(90deg); width: 200px;}'

styler.parse(code, function (err, data) {
  // syntax error
  // format: {line, column, reason, ...}
  err
  // result
  // {foo: {color: '#ff0000', webkitTransform: 'rotate(90deg)', width: 200}}
  data.jsonStyle
  // format: {line, column, reason}
  // - Error: Selector `html` is not supported. Weex only support single-classname selector
  // - Warning: prop value `red` is autofixed to `#ff0000`
  // - Warning: prop name `-webkit-transform` is not supported
  // - Warning: prop value `200px` is autofixed to `200`
  data.log[]
})

var jsonStyle = {
  foo: {
    color: 'red',
    webkitTransform: 'rotate(90deg)',
    width: '200px'
  }
}

styler.validate(json, function (err, data) {
  // syntax error
  err
  // result
  // {foo: {color: '#ff0000', webkitTransform: 'rotate(90deg)', width: 200}}
  data.jsonStyle
  // format: {reason}
  // - Warning: prop value `red` is autofixed to `#ff0000`
  // - Warning: prop name `-webkit-transform` is not supported
  // - Warning: prop value `200px` is autofixed to `200`
  data.log[]
})