UNPKG

material-ui

Version:

React Components that Implement Google's Material Design.

97 lines (80 loc) 2.75 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _keys = require('babel-runtime/core-js/object/keys'); var _keys2 = _interopRequireDefault(_keys); exports.default = rtl; function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } var reTranslate = /((^|\s)translate(3d|X)?\()(\-?[\d]+)/; var reSkew = /((^|\s)skew(x|y)?\()\s*(\-?[\d]+)(deg|rad|grad)(,\s*(\-?[\d]+)(deg|rad|grad))?/; /** * This function ensures that `style` supports both ltr and rtl directions by * checking `styleConstants` in `muiTheme` and replacing attribute keys if * necessary. */ function rtl(muiTheme) { if (muiTheme.isRtl) { return function (style) { if (style.directionInvariant === true) { return style; } var flippedAttributes = { // Keys and their replacements. right: 'left', left: 'right', marginRight: 'marginLeft', marginLeft: 'marginRight', paddingRight: 'paddingLeft', paddingLeft: 'paddingRight', borderRight: 'borderLeft', borderLeft: 'borderRight' }; var newStyle = {}; (0, _keys2.default)(style).forEach(function (attribute) { var value = style[attribute]; var key = attribute; if (flippedAttributes.hasOwnProperty(attribute)) { key = flippedAttributes[attribute]; } switch (attribute) { case 'float': case 'textAlign': if (value === 'right') { value = 'left'; } else if (value === 'left') { value = 'right'; } break; case 'direction': if (value === 'ltr') { value = 'rtl'; } else if (value === 'rtl') { value = 'ltr'; } break; case 'transform': if (!value) break; var matches = void 0; if (matches = value.match(reTranslate)) { value = value.replace(matches[0], matches[1] + -parseFloat(matches[4])); } if (matches = value.match(reSkew)) { value = value.replace(matches[0], matches[1] + -parseFloat(matches[4]) + matches[5] + matches[6] ? ', ' + (-parseFloat(matches[7]) + matches[8]) : ''); } break; case 'transformOrigin': if (!value) break; if (value.indexOf('right') > -1) { value = value.replace('right', 'left'); } else if (value.indexOf('left') > -1) { value = value.replace('left', 'right'); } break; } newStyle[key] = value; }); return newStyle; }; } }