less
Version:
Leaner CSS
65 lines • 2.38 kB
JavaScript
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var node_1 = tslib_1.__importDefault(require("./node"));
var declaration_1 = tslib_1.__importDefault(require("./declaration"));
var Property = function (name, index, currentFileInfo) {
this.name = name;
this._index = index;
this._fileInfo = currentFileInfo;
};
Property.prototype = Object.assign(new node_1.default(), {
type: 'Property',
eval: function (context) {
var property;
var name = this.name;
// TODO: shorten this reference
var mergeRules = context.pluginManager.less.visitors.ToCSSVisitor.prototype._mergeRules;
if (this.evaluating) {
throw { type: 'Name',
message: "Recursive property reference for ".concat(name),
filename: this.fileInfo().filename,
index: this.getIndex() };
}
this.evaluating = true;
property = this.find(context.frames, function (frame) {
var v;
var vArr = frame.property(name);
if (vArr) {
for (var i = 0; i < vArr.length; i++) {
v = vArr[i];
vArr[i] = new declaration_1.default(v.name, v.value, v.important, v.merge, v.index, v.currentFileInfo, v.inline, v.variable);
}
mergeRules(vArr);
v = vArr[vArr.length - 1];
if (v.important) {
var importantScope = context.importantScope[context.importantScope.length - 1];
importantScope.important = v.important;
}
v = v.value.eval(context);
return v;
}
});
if (property) {
this.evaluating = false;
return property;
}
else {
throw { type: 'Name',
message: "Property '".concat(name, "' is undefined"),
filename: this.currentFileInfo.filename,
index: this.index };
}
},
find: function (obj, fun) {
for (var i = 0, r = void 0; i < obj.length; i++) {
r = fun.call(obj, obj[i]);
if (r) {
return r;
}
}
return null;
}
});
exports.default = Property;
//# sourceMappingURL=property.js.map
;