You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
71 lines
1.9 KiB
71 lines
1.9 KiB
/**
|
|
* Copyright (c) Nicolas Gallagher
|
|
*
|
|
* This source code is licensed under the MIT license found in the
|
|
* LICENSE file in the root directory of this source tree.
|
|
*/
|
|
'use strict';
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.localizeStyle = localizeStyle;
|
|
var cache = new WeakMap();
|
|
var markerProp = '$$css$localize';
|
|
/**
|
|
* The compiler polyfills logical properties and values, generating a class
|
|
* name for both writing directions. The style objects are annotated by
|
|
* the compiler as needing this runtime transform. The results are memoized.
|
|
*
|
|
* { '$$css$localize': true, float: [ 'float-left', 'float-right' ] }
|
|
* => { float: 'float-left' }
|
|
*/
|
|
|
|
function compileStyle(style, isRTL) {
|
|
// Create a new compiled style for styleq
|
|
var compiledStyle = {};
|
|
|
|
for (var prop in style) {
|
|
if (prop !== markerProp) {
|
|
var value = style[prop];
|
|
|
|
if (Array.isArray(value)) {
|
|
compiledStyle[prop] = isRTL ? value[1] : value[0];
|
|
} else {
|
|
compiledStyle[prop] = value;
|
|
}
|
|
}
|
|
}
|
|
|
|
return compiledStyle;
|
|
}
|
|
|
|
function localizeStyle(style, isRTL) {
|
|
if (style[markerProp] != null) {
|
|
var compiledStyleIndex = isRTL ? 1 : 0; // Check the cache in case we've already seen this object
|
|
|
|
if (cache.has(style)) {
|
|
var _cachedStyles = cache.get(style);
|
|
|
|
var _compiledStyle = _cachedStyles[compiledStyleIndex];
|
|
|
|
if (_compiledStyle == null) {
|
|
// Update the missing cache entry
|
|
_compiledStyle = compileStyle(style, isRTL);
|
|
_cachedStyles[compiledStyleIndex] = _compiledStyle;
|
|
cache.set(style, _cachedStyles);
|
|
}
|
|
|
|
return _compiledStyle;
|
|
} // Create a new compiled style for styleq
|
|
|
|
|
|
var compiledStyle = compileStyle(style, isRTL);
|
|
var cachedStyles = new Array(2);
|
|
cachedStyles[compiledStyleIndex] = compiledStyle;
|
|
cache.set(style, cachedStyles);
|
|
return compiledStyle;
|
|
}
|
|
|
|
return style;
|
|
} |