|
23 | 23 |
|
24 | 24 | /******************************************************************************/ |
25 | 25 |
|
26 | | -const docURL = new URL(document.baseURI); |
27 | | -const details = await chrome.runtime.sendMessage({ |
28 | | - what: 'injectCustomFilters', |
29 | | - hostname: docURL.hostname, |
30 | | -}).catch(( ) => { |
31 | | -}); |
32 | | - |
33 | | -if ( details?.proceduralSelectors?.length ) { |
34 | | - if ( self.ProceduralFiltererAPI === undefined ) { |
35 | | - self.ProceduralFiltererAPI = chrome.runtime.sendMessage({ |
36 | | - what: 'injectCSSProceduralAPI' |
37 | | - }).catch(( ) => { |
38 | | - }); |
39 | | - } |
40 | | - await self.ProceduralFiltererAPI; |
41 | | - self.customProceduralFiltererAPI = new self.ProceduralFiltererAPI(); |
42 | | - const selectors = details.proceduralSelectors.map(a => JSON.parse(a)); |
43 | | - const declaratives = selectors.filter(a => a.cssable); |
44 | | - if ( declaratives.length !== 0 ) { |
45 | | - self.customProceduralFiltererAPI.addDeclaratives(declaratives); |
| 26 | +async function uBOL_cssUserActivate() { |
| 27 | + if ( self.customFilters ) { return; } |
| 28 | + |
| 29 | + const docURL = new URL(document.baseURI); |
| 30 | + |
| 31 | + const details = await chrome.runtime.sendMessage({ |
| 32 | + what: 'injectCustomFilters', |
| 33 | + hostname: docURL.hostname, |
| 34 | + }).catch(( ) => { |
| 35 | + }); |
| 36 | + self.customFilters = details; |
| 37 | + if ( Boolean(details) === false ) { return; } |
| 38 | + |
| 39 | + if ( details?.proceduralSelectors?.length ) { |
| 40 | + if ( self.ProceduralFiltererAPI === undefined ) { |
| 41 | + self.ProceduralFiltererAPI = chrome.runtime.sendMessage({ |
| 42 | + what: 'injectCSSProceduralAPI' |
| 43 | + }).catch(( ) => { |
| 44 | + }); |
| 45 | + } |
| 46 | + await self.ProceduralFiltererAPI; |
| 47 | + self.customProceduralFiltererAPI = new self.ProceduralFiltererAPI(); |
| 48 | + const selectors = details.proceduralSelectors.map(a => JSON.parse(a)); |
| 49 | + const declaratives = selectors.filter(a => a.cssable); |
| 50 | + if ( declaratives.length !== 0 ) { |
| 51 | + self.customProceduralFiltererAPI.addDeclaratives(declaratives); |
| 52 | + } |
| 53 | + const procedurals = selectors.filter(a => !a.cssable); |
| 54 | + if ( procedurals.length !== 0 ) { |
| 55 | + self.customProceduralFiltererAPI.addProcedurals(procedurals); |
| 56 | + } |
46 | 57 | } |
47 | | - const procedurals = selectors.filter(a => !a.cssable); |
48 | | - if ( procedurals.length !== 0 ) { |
49 | | - self.customProceduralFiltererAPI.addProcedurals(procedurals); |
| 58 | + |
| 59 | + if ( details?.plainSelectors?.length ) { |
| 60 | + const selectors = details.plainSelectors; |
| 61 | + self.cssAPI.insert(`${selectors.join(',\n')}{display:none!important;}`); |
50 | 62 | } |
51 | 63 | } |
52 | 64 |
|
53 | | -if ( details?.plainSelectors?.length ) { |
54 | | - const selectors = details.plainSelectors; |
55 | | - self.addEventListener('pagereveal', ( ) => { |
56 | | - chrome.runtime.sendMessage({ |
57 | | - what: 'insertCSS', |
58 | | - css: `${selectors.join(',\n')}{display:none!important;}`, |
59 | | - }).catch(( ) => { |
60 | | - }); |
61 | | - }); |
| 65 | +async function uBOL_cssUserStart() { |
| 66 | + if ( self.cssUserPendingOp === undefined ) { |
| 67 | + self.cssUserPendingOp = Promise.resolve(); |
| 68 | + } |
| 69 | + self.cssUserPendingOp = self.cssUserPendingOp.then(uBOL_cssUserActivate); |
| 70 | + await self.cssUserPendingOp; |
| 71 | + if ( Boolean(self.customFilters) === false ) { return; } |
| 72 | + self.removeEventListener('pagereveal', uBOL_cssUserStart); |
62 | 73 | } |
63 | 74 |
|
64 | | -self.customFilters = details; |
| 75 | +await uBOL_cssUserStart(); |
| 76 | + |
| 77 | +if ( self.customFilters ) { return; } |
| 78 | +self.addEventListener('pagereveal', uBOL_cssUserStart); |
65 | 79 |
|
66 | 80 | /******************************************************************************/ |
67 | 81 |
|
|
0 commit comments