Fix nth-of-type() not accepting identifier-based arguments

Related feedback:
- https://github.com/uBlockOrigin/uBlock-issues/issues/2284#issuecomment-1271552479
This commit is contained in:
Raymond Hill 2022-10-07 09:12:45 -04:00
parent 93953f9b21
commit 3f8e3fe0c6
No known key found for this signature in database
GPG Key ID: 25E1490B761470C2
1 changed files with 14 additions and 10 deletions

View File

@ -1613,18 +1613,22 @@ Parser.prototype.SelectorCompiler = class {
out.push(`#${data.name}`);
break;
case 'Nth': {
const a = parseInt(data.nth.a, 10) || null;
const b = parseInt(data.nth.b, 10) || null;
if ( a !== null ) {
out.push(`${a}n`);
if ( b === null ) { break; }
if ( b < 0 ) {
if ( data.nth.type === 'AnPlusB' ) {
const a = parseInt(data.nth.a, 10) || null;
const b = parseInt(data.nth.b, 10) || null;
if ( a !== null ) {
out.push(`${a}n`);
if ( b === null ) { break; }
if ( b < 0 ) {
out.push(`${b}`);
} else {
out.push(`+${b}`);
}
} else if ( b !== null ) {
out.push(`${b}`);
} else {
out.push(`+${b}`);
}
} else if ( b !== null ) {
out.push(`${b}`);
} else if ( data.nth.type === 'Identifier' ) {
out.push(data.nth.name);
}
break;
}