Skip to content

Commit 90e8212

Browse files
committed
[mv3] Fix various quirks when previewing custom filters at creation time
1 parent c218444 commit 90e8212

2 files changed

Lines changed: 25 additions & 5 deletions

File tree

platform/mv3/extension/js/scripting/css-procedural-api.js

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -756,6 +756,7 @@ class ProceduralFilterer {
756756

757757
self.ProceduralFiltererAPI = class {
758758
constructor() {
759+
this.cssSheets = new Set();
759760
this.proceduralFilterer = null;
760761
this.domObserver = null;
761762
}
@@ -766,10 +767,18 @@ self.ProceduralFiltererAPI = class {
766767
this.domObserver.disconnect();
767768
this.domObserver = null;
768769
}
770+
const promises = [];
769771
if ( this.proceduralFilterer ) {
770-
await this.proceduralFilterer.reset();
772+
promises.push(this.proceduralFilterer.reset());
771773
this.proceduralFilterer = null;
772774
}
775+
for ( const css of this.cssSheets ) {
776+
promises.push(
777+
chrome.runtime.sendMessage({ what: 'removeCSS', css }).catch(( ) => { })
778+
);
779+
}
780+
this.cssSheets.clear();
781+
await Promise.all(promises);
773782
}
774783

775784
addDeclaratives(selectors) {
@@ -806,9 +815,11 @@ self.ProceduralFiltererAPI = class {
806815
if ( ruleText === undefined ) { continue; }
807816
sheetText.push(ruleText);
808817
}
809-
if ( sheetText.length !== 0 ) {
810-
self.cssAPI.insert(sheetText.join('\n'));
811-
}
818+
if ( sheetText.length === 0 ) { return; }
819+
const cssSheet = sheetText.join('\n');
820+
if ( this.cssSheets.has(cssSheet) ) { return; }
821+
this.cssSheets.add(cssSheet);
822+
self.cssAPI.insert(cssSheet);
812823
}
813824

814825
addProcedurals(selectors) {
@@ -827,6 +838,10 @@ self.ProceduralFiltererAPI = class {
827838

828839
qsa(selector) {
829840
const o = JSON.parse(selector);
841+
if ( o.cssable ) {
842+
const selector = o.selector.replace(/::[a-z()-]+$/, '');
843+
return Array.from(document.querySelectorAll(selector));
844+
}
830845
const pselector = new PSelectorRoot(null, o);
831846
return pselector.exec();
832847
}

platform/mv3/extension/js/scripting/picker.js

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,12 @@ async function previewSelector(selector) {
257257
if ( self.pickerProceduralFilteringAPI === undefined ) {
258258
self.pickerProceduralFilteringAPI = new self.ProceduralFiltererAPI();
259259
}
260-
self.pickerProceduralFilteringAPI.addProcedurals([ JSON.parse(selector) ]);
260+
const pselector = JSON.parse(selector);
261+
if ( pselector.cssable ) {
262+
self.pickerProceduralFilteringAPI.addDeclaratives([ pselector ]);
263+
} else {
264+
self.pickerProceduralFilteringAPI.addProcedurals([ pselector ]);
265+
}
261266
return;
262267
}
263268
previewedCSS = `${selector}{display:none!important;}`;

0 commit comments

Comments
 (0)