shineout
Version:
Shein 前端组件库
132 lines (106 loc) • 3.41 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
exports.__esModule = true;
exports.cleanCache = cleanCache;
exports.default = void 0;
var _objectSpread3 = _interopRequireDefault(require("@babel/runtime/helpers/objectSpread"));
var _varsInject = _interopRequireDefault(require("./vars-inject"));
var _strings = require("./strings");
var _objects = require("./objects");
function setOptions(options, setter) {
if (!options) return;
for (var _iterator = (0, _objects.entries)(options), _isArray = Array.isArray(_iterator), _i = 0, _iterator = _isArray ? _iterator : _iterator[Symbol.iterator]();;) {
var _ref;
if (_isArray) {
if (_i >= _iterator.length) break;
_ref = _iterator[_i++];
} else {
_i = _iterator.next();
if (_i.done) break;
_ref = _i.value;
}
var _ref2 = _ref,
key = _ref2[0],
value = _ref2[1];
if (key === setter) continue;
this[key] = value;
}
}
function getDOMStyle(dom) {
document.body.appendChild(dom);
var style = window.getComputedStyle(dom);
Promise.resolve().then(function () {
if (dom.parentElement) dom.parentElement.removeChild(dom);
});
return style;
}
function getStyleAttr(className, key) {
if (key === void 0) {
key = 'color';
}
var div = document.createElement('div');
div.className = className;
return getDOMStyle(div)[key];
}
var cache = {};
function genAccessors(obj, data) {
data.conf.forEach(function (item) {
var name = item.name,
className = item.className,
attr = item.attr,
_item$parser = item.parser,
parser = _item$parser === void 0 ? function (v) {
return v;
} : _item$parser;
var info = data.info;
var cacheKey = info.name + "-" + name;
Object.defineProperty(obj, name, {
enumerable: true,
get: function get() {
if (cache[cacheKey]) return cache[cacheKey];
if (item.value) return item.value;
var res = getStyleAttr(className, attr);
cache[cacheKey] = parser(res);
return cache[cacheKey];
},
// eslint-disable-next-line no-return-assign
set: function set(v) {
delete cache[cacheKey];
if (item.value) item.value = v;
data[name] = v;
}
});
});
}
var accessors = Object.keys(_varsInject.default).reduce(function (obj, key) {
var _objectSpread2;
return (0, _objectSpread3.default)({}, obj, (_objectSpread2 = {}, _objectSpread2[key] = {}, _objectSpread2));
}, {});
var _loop = function _loop() {
if (_isArray2) {
if (_i2 >= _iterator2.length) return "break";
_ref3 = _iterator2[_i2++];
} else {
_i2 = _iterator2.next();
if (_i2.done) return "break";
_ref3 = _i2.value;
}
var _ref4 = _ref3,
key = _ref4[0],
value = _ref4[1];
var setterName = "set" + (0, _strings.capitalize)(key);
value[setterName] = function (options) {
return setOptions.call(value, options, setterName);
};
genAccessors(value, _varsInject.default[key]);
};
for (var _iterator2 = (0, _objects.entries)(accessors), _isArray2 = Array.isArray(_iterator2), _i2 = 0, _iterator2 = _isArray2 ? _iterator2 : _iterator2[Symbol.iterator]();;) {
var _ref3;
var _ret = _loop();
if (_ret === "break") break;
}
function cleanCache() {
cache = {};
}
var _default = accessors;
exports.default = _default;