370 lines
9.3 KiB
JavaScript
370 lines
9.3 KiB
JavaScript
'use strict';
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.__RewireAPI__ = exports.__ResetDependency__ = exports.__set__ = exports.__Rewire__ = exports.__GetDependency__ = exports.__get__ = undefined;
|
|
|
|
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
|
|
|
exports['default'] = jssExtend;
|
|
|
|
var _warning = require('warning');
|
|
|
|
var _warning2 = _interopRequireDefault(_warning);
|
|
|
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { 'default': obj }; }
|
|
|
|
var isObject = function isObject(obj) {
|
|
return obj && (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) === 'object' && !Array.isArray(obj);
|
|
};
|
|
var valueNs = 'extendCurrValue' + Date.now();
|
|
|
|
function mergeExtend(style, rule, sheet, newStyle) {
|
|
var extendType = _typeof(style.extend);
|
|
// Extend using a rule name.
|
|
if (extendType === 'string') {
|
|
if (!sheet) return;
|
|
var refRule = sheet.getRule(style.extend);
|
|
if (!refRule) return;
|
|
if (refRule === rule) {
|
|
_get__('warning')(false, '[JSS] A rule tries to extend itself \r\n%s', rule);
|
|
return;
|
|
}
|
|
var parent = refRule.options.parent;
|
|
|
|
if (parent) {
|
|
var originalStyle = parent.rules.raw[style.extend];
|
|
_get__('extend')(originalStyle, rule, sheet, newStyle);
|
|
}
|
|
return;
|
|
}
|
|
|
|
// Extend using an array of objects.
|
|
if (Array.isArray(style.extend)) {
|
|
for (var index = 0; index < style.extend.length; index++) {
|
|
_get__('extend')(style.extend[index], rule, sheet, newStyle);
|
|
}
|
|
return;
|
|
}
|
|
|
|
// Extend is a style object.
|
|
for (var prop in style.extend) {
|
|
if (prop === 'extend') {
|
|
_get__('extend')(style.extend.extend, rule, sheet, newStyle);
|
|
continue;
|
|
}
|
|
if (_get__('isObject')(style.extend[prop])) {
|
|
if (!(prop in newStyle)) newStyle[prop] = {};
|
|
_get__('extend')(style.extend[prop], rule, sheet, newStyle[prop]);
|
|
continue;
|
|
}
|
|
newStyle[prop] = style.extend[prop];
|
|
}
|
|
}
|
|
|
|
function mergeRest(style, rule, sheet, newStyle) {
|
|
// Copy base style.
|
|
for (var prop in style) {
|
|
if (prop === 'extend') continue;
|
|
if (_get__('isObject')(newStyle[prop]) && _get__('isObject')(style[prop])) {
|
|
_get__('extend')(style[prop], rule, sheet, newStyle[prop]);
|
|
continue;
|
|
}
|
|
|
|
if (_get__('isObject')(style[prop])) {
|
|
newStyle[prop] = _get__('extend')(style[prop], rule, sheet);
|
|
continue;
|
|
}
|
|
|
|
newStyle[prop] = style[prop];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Recursively extend styles.
|
|
*/
|
|
function extend(style, rule, sheet) {
|
|
var newStyle = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : {};
|
|
|
|
_get__('mergeExtend')(style, rule, sheet, newStyle);
|
|
_get__('mergeRest')(style, rule, sheet, newStyle);
|
|
return newStyle;
|
|
}
|
|
|
|
/**
|
|
* Handle `extend` property.
|
|
*
|
|
* @param {Rule} rule
|
|
* @api public
|
|
*/
|
|
function jssExtend() {
|
|
function onProcessStyle(style, rule, sheet) {
|
|
if ('extend' in style) return _get__('extend')(style, rule, sheet);
|
|
return style;
|
|
}
|
|
|
|
function onChangeValue(value, prop, rule) {
|
|
if (prop !== 'extend') return value;
|
|
|
|
// Value is empty, remove properties set previously.
|
|
if (value == null || value === false) {
|
|
for (var key in rule[valueNs]) {
|
|
rule.prop(key, null);
|
|
}
|
|
rule[valueNs] = null;
|
|
return null;
|
|
}
|
|
|
|
for (var _key in value) {
|
|
rule.prop(_key, value[_key]);
|
|
}
|
|
rule[valueNs] = value;
|
|
|
|
// Make sure we don't set the value in the core.
|
|
return null;
|
|
}
|
|
|
|
return { onProcessStyle: onProcessStyle, onChangeValue: onChangeValue };
|
|
}
|
|
|
|
function _getGlobalObject() {
|
|
try {
|
|
if (!!global) {
|
|
return global;
|
|
}
|
|
} catch (e) {
|
|
try {
|
|
if (!!window) {
|
|
return window;
|
|
}
|
|
} catch (e) {
|
|
return this;
|
|
}
|
|
}
|
|
}
|
|
|
|
;
|
|
var _RewireModuleId__ = null;
|
|
|
|
function _getRewireModuleId__() {
|
|
if (_RewireModuleId__ === null) {
|
|
var globalVariable = _getGlobalObject();
|
|
|
|
if (!globalVariable.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__) {
|
|
globalVariable.__$$GLOBAL_REWIRE_NEXT_MODULE_ID__ = 0;
|
|
}
|
|
|
|
_RewireModuleId__ = __$$GLOBAL_REWIRE_NEXT_MODULE_ID__++;
|
|
}
|
|
|
|
return _RewireModuleId__;
|
|
}
|
|
|
|
function _getRewireRegistry__() {
|
|
var theGlobalVariable = _getGlobalObject();
|
|
|
|
if (!theGlobalVariable.__$$GLOBAL_REWIRE_REGISTRY__) {
|
|
theGlobalVariable.__$$GLOBAL_REWIRE_REGISTRY__ = Object.create(null);
|
|
}
|
|
|
|
return __$$GLOBAL_REWIRE_REGISTRY__;
|
|
}
|
|
|
|
function _getRewiredData__() {
|
|
var moduleId = _getRewireModuleId__();
|
|
|
|
var registry = _getRewireRegistry__();
|
|
|
|
var rewireData = registry[moduleId];
|
|
|
|
if (!rewireData) {
|
|
registry[moduleId] = Object.create(null);
|
|
rewireData = registry[moduleId];
|
|
}
|
|
|
|
return rewireData;
|
|
}
|
|
|
|
(function registerResetAll() {
|
|
var theGlobalVariable = _getGlobalObject();
|
|
|
|
if (!theGlobalVariable['__rewire_reset_all__']) {
|
|
theGlobalVariable['__rewire_reset_all__'] = function () {
|
|
theGlobalVariable.__$$GLOBAL_REWIRE_REGISTRY__ = Object.create(null);
|
|
};
|
|
}
|
|
})();
|
|
|
|
var INTENTIONAL_UNDEFINED = '__INTENTIONAL_UNDEFINED__';
|
|
var _RewireAPI__ = {};
|
|
|
|
(function () {
|
|
function addPropertyToAPIObject(name, value) {
|
|
Object.defineProperty(_RewireAPI__, name, {
|
|
value: value,
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
|
|
addPropertyToAPIObject('__get__', _get__);
|
|
addPropertyToAPIObject('__GetDependency__', _get__);
|
|
addPropertyToAPIObject('__Rewire__', _set__);
|
|
addPropertyToAPIObject('__set__', _set__);
|
|
addPropertyToAPIObject('__reset__', _reset__);
|
|
addPropertyToAPIObject('__ResetDependency__', _reset__);
|
|
addPropertyToAPIObject('__with__', _with__);
|
|
})();
|
|
|
|
function _get__(variableName) {
|
|
var rewireData = _getRewiredData__();
|
|
|
|
if (rewireData[variableName] === undefined) {
|
|
return _get_original__(variableName);
|
|
} else {
|
|
var value = rewireData[variableName];
|
|
|
|
if (value === INTENTIONAL_UNDEFINED) {
|
|
return undefined;
|
|
} else {
|
|
return value;
|
|
}
|
|
}
|
|
}
|
|
|
|
function _get_original__(variableName) {
|
|
switch (variableName) {
|
|
case 'warning':
|
|
return _warning2['default'];
|
|
|
|
case 'extend':
|
|
return extend;
|
|
|
|
case 'isObject':
|
|
return isObject;
|
|
|
|
case 'mergeExtend':
|
|
return mergeExtend;
|
|
|
|
case 'mergeRest':
|
|
return mergeRest;
|
|
}
|
|
|
|
return undefined;
|
|
}
|
|
|
|
function _assign__(variableName, value) {
|
|
var rewireData = _getRewiredData__();
|
|
|
|
if (rewireData[variableName] === undefined) {
|
|
return _set_original__(variableName, value);
|
|
} else {
|
|
return rewireData[variableName] = value;
|
|
}
|
|
}
|
|
|
|
function _set_original__(variableName, _value) {
|
|
switch (variableName) {}
|
|
|
|
return undefined;
|
|
}
|
|
|
|
function _update_operation__(operation, variableName, prefix) {
|
|
var oldValue = _get__(variableName);
|
|
|
|
var newValue = operation === '++' ? oldValue + 1 : oldValue - 1;
|
|
|
|
_assign__(variableName, newValue);
|
|
|
|
return prefix ? newValue : oldValue;
|
|
}
|
|
|
|
function _set__(variableName, value) {
|
|
var rewireData = _getRewiredData__();
|
|
|
|
if ((typeof variableName === 'undefined' ? 'undefined' : _typeof(variableName)) === 'object') {
|
|
Object.keys(variableName).forEach(function (name) {
|
|
rewireData[name] = variableName[name];
|
|
});
|
|
} else {
|
|
if (value === undefined) {
|
|
rewireData[variableName] = INTENTIONAL_UNDEFINED;
|
|
} else {
|
|
rewireData[variableName] = value;
|
|
}
|
|
|
|
return function () {
|
|
_reset__(variableName);
|
|
};
|
|
}
|
|
}
|
|
|
|
function _reset__(variableName) {
|
|
var rewireData = _getRewiredData__();
|
|
|
|
delete rewireData[variableName];
|
|
|
|
if (Object.keys(rewireData).length == 0) {
|
|
delete _getRewireRegistry__()[_getRewireModuleId__];
|
|
}
|
|
|
|
;
|
|
}
|
|
|
|
function _with__(object) {
|
|
var rewireData = _getRewiredData__();
|
|
|
|
var rewiredVariableNames = Object.keys(object);
|
|
var previousValues = {};
|
|
|
|
function reset() {
|
|
rewiredVariableNames.forEach(function (variableName) {
|
|
rewireData[variableName] = previousValues[variableName];
|
|
});
|
|
}
|
|
|
|
return function (callback) {
|
|
rewiredVariableNames.forEach(function (variableName) {
|
|
previousValues[variableName] = rewireData[variableName];
|
|
rewireData[variableName] = object[variableName];
|
|
});
|
|
var result = callback();
|
|
|
|
if (!!result && typeof result.then == 'function') {
|
|
result.then(reset)['catch'](reset);
|
|
} else {
|
|
reset();
|
|
}
|
|
|
|
return result;
|
|
};
|
|
}
|
|
|
|
var _typeOfOriginalExport = typeof jssExtend === 'undefined' ? 'undefined' : _typeof(jssExtend);
|
|
|
|
function addNonEnumerableProperty(name, value) {
|
|
Object.defineProperty(jssExtend, name, {
|
|
value: value,
|
|
enumerable: false,
|
|
configurable: true
|
|
});
|
|
}
|
|
|
|
if ((_typeOfOriginalExport === 'object' || _typeOfOriginalExport === 'function') && Object.isExtensible(jssExtend)) {
|
|
addNonEnumerableProperty('__get__', _get__);
|
|
addNonEnumerableProperty('__GetDependency__', _get__);
|
|
addNonEnumerableProperty('__Rewire__', _set__);
|
|
addNonEnumerableProperty('__set__', _set__);
|
|
addNonEnumerableProperty('__reset__', _reset__);
|
|
addNonEnumerableProperty('__ResetDependency__', _reset__);
|
|
addNonEnumerableProperty('__with__', _with__);
|
|
addNonEnumerableProperty('__RewireAPI__', _RewireAPI__);
|
|
}
|
|
|
|
exports.__get__ = _get__;
|
|
exports.__GetDependency__ = _get__;
|
|
exports.__Rewire__ = _set__;
|
|
exports.__set__ = _set__;
|
|
exports.__ResetDependency__ = _reset__;
|
|
exports.__RewireAPI__ = _RewireAPI__; |