UNPKG

decca

Version:

Render interfaces using pure functions and virtual DOM, kinda

64 lines (63 loc) 1.98 kB
/* * Fixes props for virtual-dom's consumption */ "use strict"; var assign = require('object-assign'); // Taken from: https://github.com/wayfair/tungstenjs/blob/42535b17e4894e866abf5711be2266458bc4d508/src/template/template_to_vdom.js#L118-L140 var transforms = { // transformed name 'class': 'className', 'for': 'htmlFor', 'http-equiv': 'httpEquiv', // case specificity 'accesskey': 'accessKey', 'autocomplete': 'autoComplete', 'autoplay': 'autoPlay', 'colspan': 'colSpan', 'contenteditable': 'contentEditable', 'contextmenu': 'contextMenu', 'enctype': 'encType', 'formnovalidate': 'formNoValidate', 'hreflang': 'hrefLang', 'novalidate': 'noValidate', 'readonly': 'readOnly', 'rowspan': 'rowSpan', 'spellcheck ': 'spellCheck', 'srcdoc': 'srcDoc', 'srcset': 'srcSet', 'tabindex': 'tabIndex' }; function transformProperties(props) { var attrs = {}; for (var attr in props) { var transform = transforms[attr] || attr; attrs[transform] = props[attr]; } return attrs; } function fixProps(props) { if (props) { props = transformProperties(props); // See https://github.com/Matt-Esch/virtual-dom/blob/master/docs/vnode.md#propertiesstyle-vs-propertiesattributesstyle if (typeof props.style === 'string') { props = assign({}, props, { attributes: assign({}, props.attributes || {}, { style: props.style }) }); } // onClick => onclick Object.keys(props).forEach(function (key) { var m = key.match(/^on([A-Z][a-z]+)$/); if (m) { props = assign({}, props, (_a = {}, _a[key] = undefined, _a[key.toLowerCase()] = props[key], _a )); } var _a; }); } return props; } exports.__esModule = true; exports["default"] = fixProps;