97 lines
2.7 KiB
JavaScript
97 lines
2.7 KiB
JavaScript
'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;
|
|
};
|
|
}
|
|
} |