UNPKG

less

Version:
65 lines 2.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var node_1 = tslib_1.__importDefault(require("./node")); var variable_1 = tslib_1.__importDefault(require("./variable")); var property_1 = tslib_1.__importDefault(require("./property")); var Quoted = function (str, content, escaped, index, currentFileInfo) { this.escaped = (escaped === undefined) ? true : escaped; this.value = content || ''; this.quote = str.charAt(0); this._index = index; this._fileInfo = currentFileInfo; this.variableRegex = /@\{([\w-]+)\}/g; this.propRegex = /\$\{([\w-]+)\}/g; this.allowRoot = escaped; }; Quoted.prototype = Object.assign(new node_1.default(), { type: 'Quoted', genCSS: function (context, output) { if (!this.escaped) { output.add(this.quote, this.fileInfo(), this.getIndex()); } output.add(this.value); if (!this.escaped) { output.add(this.quote); } }, containsVariables: function () { return this.value.match(this.variableRegex); }, eval: function (context) { var that = this; var value = this.value; var variableReplacement = function (_, name1, name2) { var v = new variable_1.default("@".concat(name1 !== null && name1 !== void 0 ? name1 : name2), that.getIndex(), that.fileInfo()).eval(context, true); return (v instanceof Quoted) ? v.value : v.toCSS(); }; var propertyReplacement = function (_, name1, name2) { var v = new property_1.default("$".concat(name1 !== null && name1 !== void 0 ? name1 : name2), that.getIndex(), that.fileInfo()).eval(context, true); return (v instanceof Quoted) ? v.value : v.toCSS(); }; function iterativeReplace(value, regexp, replacementFnc) { var evaluatedValue = value; do { value = evaluatedValue.toString(); evaluatedValue = value.replace(regexp, replacementFnc); } while (value !== evaluatedValue); return evaluatedValue; } value = iterativeReplace(value, this.variableRegex, variableReplacement); value = iterativeReplace(value, this.propRegex, propertyReplacement); return new Quoted(this.quote + value + this.quote, value, this.escaped, this.getIndex(), this.fileInfo()); }, compare: function (other) { // when comparing quoted strings allow the quote to differ if (other.type === 'Quoted' && !this.escaped && !other.escaped) { return node_1.default.numericCompare(this.value, other.value); } else { return other.toCSS && this.toCSS() === other.toCSS() ? 0 : undefined; } } }); exports.default = Quoted; //# sourceMappingURL=quoted.js.map