|
1 | 1 | /**
|
2 |
| - * Less - Leaner CSS v4.2.1 |
| 2 | + * Less - Leaner CSS v4.2.2 |
3 | 3 | * http://lesscss.org
|
4 | 4 | *
|
5 |
| - * Copyright (c) 2009-2024, Alexis Sellier <[email protected]> |
| 5 | + * Copyright (c) 2009-2025, Alexis Sellier <[email protected]> |
6 | 6 | * Licensed under the Apache-2.0 License.
|
7 | 7 | *
|
8 | 8 | * @license Apache-2.0
|
|
3238 | 3238 | queryInParens: true
|
3239 | 3239 | };
|
3240 | 3240 |
|
| 3241 | + var Anonymous = function (value, index, currentFileInfo, mapLines, rulesetLike, visibilityInfo) { |
| 3242 | + this.value = value; |
| 3243 | + this._index = index; |
| 3244 | + this._fileInfo = currentFileInfo; |
| 3245 | + this.mapLines = mapLines; |
| 3246 | + this.rulesetLike = (typeof rulesetLike === 'undefined') ? false : rulesetLike; |
| 3247 | + this.allowRoot = true; |
| 3248 | + this.copyVisibilityInfo(visibilityInfo); |
| 3249 | + }; |
| 3250 | + Anonymous.prototype = Object.assign(new Node(), { |
| 3251 | + type: 'Anonymous', |
| 3252 | + eval: function () { |
| 3253 | + return new Anonymous(this.value, this._index, this._fileInfo, this.mapLines, this.rulesetLike, this.visibilityInfo()); |
| 3254 | + }, |
| 3255 | + compare: function (other) { |
| 3256 | + return other.toCSS && this.toCSS() === other.toCSS() ? 0 : undefined; |
| 3257 | + }, |
| 3258 | + isRulesetLike: function () { |
| 3259 | + return this.rulesetLike; |
| 3260 | + }, |
| 3261 | + genCSS: function (context, output) { |
| 3262 | + this.nodeVisible = Boolean(this.value); |
| 3263 | + if (this.nodeVisible) { |
| 3264 | + output.add(this.value, this._fileInfo, this._index, this.mapLines); |
| 3265 | + } |
| 3266 | + } |
| 3267 | + }); |
| 3268 | + |
3241 | 3269 | //
|
3242 | 3270 | // less.js - parser
|
3243 | 3271 | //
|
|
4402 | 4430 | if (!e) {
|
4403 | 4431 | parserInput.save();
|
4404 | 4432 | if (parserInput.$char('(')) {
|
4405 |
| - if ((v = this.selector(false)) && parserInput.$char(')')) { |
4406 |
| - e = new (tree.Paren)(v); |
4407 |
| - parserInput.forget(); |
| 4433 | + if ((v = this.selector(false))) { |
| 4434 | + var selectors = []; |
| 4435 | + while (parserInput.$char(',')) { |
| 4436 | + selectors.push(v); |
| 4437 | + selectors.push(new Anonymous(',')); |
| 4438 | + v = this.selector(false); |
| 4439 | + } |
| 4440 | + selectors.push(v); |
| 4441 | + if (parserInput.$char(')')) { |
| 4442 | + if (selectors.length > 1) { |
| 4443 | + e = new (tree.Paren)(new Selector(selectors)); |
| 4444 | + } |
| 4445 | + else { |
| 4446 | + e = new (tree.Paren)(v); |
| 4447 | + } |
| 4448 | + parserInput.forget(); |
| 4449 | + } |
| 4450 | + else { |
| 4451 | + parserInput.restore('Missing closing \')\''); |
| 4452 | + } |
4408 | 4453 | }
|
4409 | 4454 | else {
|
4410 | 4455 | parserInput.restore('Missing closing \')\'');
|
|
4495 | 4540 | error('Extend can only be used at the end of selector');
|
4496 | 4541 | }
|
4497 | 4542 | c = parserInput.currentChar();
|
| 4543 | + if (Array.isArray(e)) { |
| 4544 | + e.forEach(function (ele) { return elements.push(ele); }); |
| 4545 | + } |
4498 | 4546 | if (elements) {
|
4499 | 4547 | elements.push(e);
|
4500 | 4548 | }
|
|
4669 | 4717 | merge = !isVariable && name.length > 1 && name.pop().value;
|
4670 | 4718 | // Custom property values get permissive parsing
|
4671 | 4719 | if (name[0].value && name[0].value.slice(0, 2) === '--') {
|
4672 |
| - value = this.permissiveValue(/[;}]/); |
| 4720 | + if (parserInput.$char(';')) { |
| 4721 | + value = new Anonymous(''); |
| 4722 | + } |
| 4723 | + else { |
| 4724 | + value = this.permissiveValue(/[;}]/); |
| 4725 | + } |
4673 | 4726 | }
|
4674 | 4727 | // Try to store values as anonymous
|
4675 | 4728 | // If we need the value later we'll re-parse it in ruleset.parseValue
|
|
4793 | 4846 | }
|
4794 | 4847 | // Treat like quoted values, but replace vars like unquoted expressions
|
4795 | 4848 | var quote = new tree.Quoted('\'', item, true, index, fileInfo);
|
4796 |
| - quote.variableRegex = /@([\w-]+)/g; |
| 4849 | + if (!item.startsWith('@{')) { |
| 4850 | + quote.variableRegex = /@([\w-]+)/g; |
| 4851 | + } |
4797 | 4852 | quote.propRegex = /\$([\w-]+)/g;
|
4798 | 4853 | result.push(quote);
|
4799 | 4854 | }
|
|
5443 | 5498 | var index = parserInput.i;
|
5444 | 5499 | do {
|
5445 | 5500 | e = this.comment();
|
5446 |
| - if (e) { |
| 5501 | + if (e && !e.isLineComment) { |
5447 | 5502 | entities.push(e);
|
5448 | 5503 | continue;
|
5449 | 5504 | }
|
|
5704 | 5759 | Keyword.True = new Keyword('true');
|
5705 | 5760 | Keyword.False = new Keyword('false');
|
5706 | 5761 |
|
5707 |
| - var Anonymous = function (value, index, currentFileInfo, mapLines, rulesetLike, visibilityInfo) { |
5708 |
| - this.value = value; |
5709 |
| - this._index = index; |
5710 |
| - this._fileInfo = currentFileInfo; |
5711 |
| - this.mapLines = mapLines; |
5712 |
| - this.rulesetLike = (typeof rulesetLike === 'undefined') ? false : rulesetLike; |
5713 |
| - this.allowRoot = true; |
5714 |
| - this.copyVisibilityInfo(visibilityInfo); |
5715 |
| - }; |
5716 |
| - Anonymous.prototype = Object.assign(new Node(), { |
5717 |
| - type: 'Anonymous', |
5718 |
| - eval: function () { |
5719 |
| - return new Anonymous(this.value, this._index, this._fileInfo, this.mapLines, this.rulesetLike, this.visibilityInfo()); |
5720 |
| - }, |
5721 |
| - compare: function (other) { |
5722 |
| - return other.toCSS && this.toCSS() === other.toCSS() ? 0 : undefined; |
5723 |
| - }, |
5724 |
| - isRulesetLike: function () { |
5725 |
| - return this.rulesetLike; |
5726 |
| - }, |
5727 |
| - genCSS: function (context, output) { |
5728 |
| - this.nodeVisible = Boolean(this.value); |
5729 |
| - if (this.nodeVisible) { |
5730 |
| - output.add(this.value, this._fileInfo, this._index, this.mapLines); |
5731 |
| - } |
5732 |
| - } |
5733 |
| - }); |
5734 |
| - |
5735 | 5762 | var MATH$1 = Math$1;
|
5736 | 5763 | function evalName(context, name) {
|
5737 | 5764 | var value = '';
|
|
7583 | 7610 | var path = context.mediaPath.concat([this]);
|
7584 | 7611 | // Extract the media-query conditions separated with `,` (OR).
|
7585 | 7612 | for (i = 0; i < path.length; i++) {
|
| 7613 | + if (path[i].type !== this.type) { |
| 7614 | + context.mediaBlocks.splice(i, 1); |
| 7615 | + return this; |
| 7616 | + } |
7586 | 7617 | value = path[i].features instanceof Value ?
|
7587 | 7618 | path[i].features.value : path[i].features;
|
7588 | 7619 | path[i] = Array.isArray(value) ? value : [value];
|
|
7978 | 8009 | this.op2 = op2 ? op2.trim() : null;
|
7979 | 8010 | this.rvalue = r;
|
7980 | 8011 | this._index = i;
|
| 8012 | + this.mvalues = []; |
7981 | 8013 | };
|
7982 | 8014 | QueryInParens.prototype = Object.assign(new Node(), {
|
7983 | 8015 | type: 'QueryInParens',
|
|
7990 | 8022 | },
|
7991 | 8023 | eval: function (context) {
|
7992 | 8024 | this.lvalue = this.lvalue.eval(context);
|
7993 |
| - this.mvalue = this.mvalue.eval(context); |
| 8025 | + var variableDeclaration; |
| 8026 | + var rule; |
| 8027 | + for (var i_1 = 0; (rule = context.frames[i_1]); i_1++) { |
| 8028 | + if (rule.type === 'Ruleset') { |
| 8029 | + variableDeclaration = rule.rules.find(function (r) { |
| 8030 | + if ((r instanceof Declaration) && r.variable) { |
| 8031 | + return true; |
| 8032 | + } |
| 8033 | + return false; |
| 8034 | + }); |
| 8035 | + if (variableDeclaration) { |
| 8036 | + break; |
| 8037 | + } |
| 8038 | + } |
| 8039 | + } |
| 8040 | + if (!this.mvalueCopy) { |
| 8041 | + this.mvalueCopy = copy(this.mvalue); |
| 8042 | + } |
| 8043 | + if (variableDeclaration) { |
| 8044 | + this.mvalue = this.mvalueCopy; |
| 8045 | + this.mvalue = this.mvalue.eval(context); |
| 8046 | + this.mvalues.push(this.mvalue); |
| 8047 | + } |
| 8048 | + else { |
| 8049 | + this.mvalue = this.mvalue.eval(context); |
| 8050 | + } |
7994 | 8051 | if (this.rvalue) {
|
7995 | 8052 | this.rvalue = this.rvalue.eval(context);
|
7996 | 8053 | }
|
|
7999 | 8056 | genCSS: function (context, output) {
|
8000 | 8057 | this.lvalue.genCSS(context, output);
|
8001 | 8058 | output.add(' ' + this.op + ' ');
|
| 8059 | + if (this.mvalues.length > 0) { |
| 8060 | + this.mvalue = this.mvalues.shift(); |
| 8061 | + } |
8002 | 8062 | this.mvalue.genCSS(context, output);
|
8003 | 8063 | if (this.rvalue) {
|
8004 | 8064 | output.add(' ' + this.op2 + ' ');
|
|
10792 | 10852 | return render;
|
10793 | 10853 | }
|
10794 | 10854 |
|
10795 |
| - var version = "4.2.1"; |
| 10855 | + var version = "4.2.2"; |
10796 | 10856 |
|
10797 | 10857 | function parseNodeVersion(version) {
|
10798 | 10858 | var match = version.match(/^v(\d{1,2})\.(\d{1,2})\.(\d{1,2})(?:-([0-9A-Za-z-.]+))?(?:\+([0-9A-Za-z-.]+))?$/); // eslint-disable-line max-len
|
|
0 commit comments