From 07fae6a0d1305977c1990d0ea5ca8dcb80d66313 Mon Sep 17 00:00:00 2001 From: Raymond Hill Date: Fri, 16 Jun 2023 09:34:35 -0400 Subject: [PATCH] Fix procedural to declarative conversion --- src/js/cosmetic-filtering.js | 19 ++++++++++++------- src/js/static-filtering-parser.js | 8 +++++--- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/js/cosmetic-filtering.js b/src/js/cosmetic-filtering.js index 9509833cc..62d7fd4b5 100644 --- a/src/js/cosmetic-filtering.js +++ b/src/js/cosmetic-filtering.js @@ -671,25 +671,30 @@ FilterContainer.prototype.disableSurveyor = function(details) { FilterContainer.prototype.cssRuleFromProcedural = function(pfilter) { if ( pfilter.cssable !== true ) { return; } const { tasks, action } = pfilter; - let mq; - if ( tasks !== undefined ) { - if ( tasks.length > 1 ) { return; } + let mq, selector; + if ( Array.isArray(tasks) ) { if ( tasks[0][0] !== 'matches-media' ) { return; } mq = tasks[0][1]; + if ( tasks.length > 2 ) { return; } + if ( tasks.length === 2 ) { + if ( tasks[1][0] !== 'spath' ) { return; } + selector = tasks[1][1]; + } } let style; if ( Array.isArray(action) ) { if ( action[0] !== 'style' ) { return; } + selector = selector || pfilter.selector; style = action[1]; } - if ( mq === undefined && style === undefined ) { return; } + if ( mq === undefined && style === undefined && selector === undefined ) { return; } if ( mq === undefined ) { - return `${pfilter.selector}\n{${style}}`; + return `${selector}\n{${style}}`; } if ( style === undefined ) { - return `@media ${mq} {\n${pfilter.selector}\n{display:none!important;}\n}`; + return `@media ${mq} {\n${selector}\n{display:none!important;}\n}`; } - return `@media ${mq} {\n${pfilter.selector}\n{${style}}\n}`; + return `@media ${mq} {\n${selector}\n{${style}}\n}`; }; /******************************************************************************/ diff --git a/src/js/static-filtering-parser.js b/src/js/static-filtering-parser.js index ac9f50738..65ec52288 100644 --- a/src/js/static-filtering-parser.js +++ b/src/js/static-filtering-parser.js @@ -3112,9 +3112,11 @@ class ExtSelectorCompiler { isCssable(r) { if ( r instanceof Object === false ) { return false; } if ( Array.isArray(r.action) && r.action[0] !== 'style' ) { return false; } - if ( r.tasks === undefined ) { return true; } - if ( r.tasks.length > 1 ) { return false; } - if ( r.tasks[0][0] === 'matches-media' ) { return true; } + if ( Array.isArray(r.tasks) === false ) { return true; } + if ( r.tasks[0][0] === 'matches-media' ) { + if ( r.tasks.length === 1 ) { return true; } + if ( r.tasks.length === 2 && r.tasks[1][0] === 'spath' ) { return true; } + } return false; }