UNPKG

react-mdlite

Version:

React wrappers for Material Design Lite (MDL) components

52 lines (37 loc) 1.37 kB
var React = require('react'); var mdlModifiable = function (spec, modifiers, misc) { var mdlPrefix = 'mdl-', displayName = spec.displayName, propTypes = { className: React.PropTypes.string }, defaultProps = { className: '' }; Object.keys(misc).concat(modifiers).forEach(function (key) { propTypes[key] = React.PropTypes.bool; defaultProps[key] = false; }); return React.createClass({ displayName: displayName, propTypes: propTypes, getDefaultProps: function() { return defaultProps; }, getModifierClassList: function() { var componentName = displayName.replace('Material', ''), baseClass = mdlPrefix + componentName.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase(); return Object.keys(misc).concat(modifiers) .filter(function (modifier) { return !!this.props[modifier]; }, this).map(function (key) { return misc[key] ? misc[key] : baseClass + '--' + key; }); }, render: function() { var element = React.createElement(spec, this.props), classList = this.props.className.split(' '), modifierClassList = this.getModifierClassList(); return React.cloneElement(element, { className: modifierClassList.concat(classList).join(' ') }); } }); }; module.exports = mdlModifiable;