New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement cosmetic filtering #3303
Changes from 1 commit
1715046
0b93419
7512da5
c45be3c
3aca80f
5640c42
6a9fa30
e7af497
ec80ce7
File filter...
Jump to…
use cosmetic filtering api
- Loading branch information
Verified
| @@ -49,6 +49,16 @@ chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => { | ||
| rule.host = msg.baseURI | ||
| break | ||
| } | ||
| case 'classIdStylesheet': { | ||
| chrome.braveShields.classIdStylesheet(msg.classes, msg.ids, msg.exceptions, stylesheet => { | ||
| chrome.tabs.insertCSS({ | ||
| code: stylesheet, | ||
| cssOrigin: 'user', | ||
| runAt: 'document_start' | ||
| }) | ||
| }) | ||
antonok-edm
Author
Collaborator
|
||
| break | ||
| } | ||
| } | ||
| }) | ||
|
|
||
| @@ -1,24 +1,79 @@ | ||
| const unique = require('unique-selector').default | ||
|
|
||
| let target: EventTarget | null | ||
| let genericExceptions: Array<string> | undefined = undefined | ||
|
|
||
| const queriedIds = new Set() | ||
| const queriedClasses = new Set() | ||
| const regexWhitespace = /\s/ | ||
|
|
||
| function getCurrentURL () { | ||
| return window.location.hostname | ||
| } | ||
|
|
||
| /*function applyCosmeticFilterMutationObserver (filterList: any) { | ||
| const getClassesAndIds = function (addedNodes: Element[]) { | ||
bbondy
Member
|
||
| const ids = [] | ||
| const classes = [] | ||
|
|
||
| for (const node of addedNodes) { | ||
| let nodeId = node.id | ||
| if (nodeId && nodeId.length !== 0) { | ||
| nodeId = nodeId.trim() | ||
| if (!queriedIds.has(nodeId) && nodeId.length !== 0) { | ||
| ids.push(nodeId) | ||
| queriedIds.add(nodeId) | ||
| } | ||
| } | ||
| let nodeClass = node.className | ||
| if (nodeClass && nodeClass.length !== 0 && !regexWhitespace.test(nodeClass)) { | ||
| if (!queriedClasses.has(nodeClass)) { | ||
| classes.push(nodeClass) | ||
| queriedClasses.add(nodeClass) | ||
| } | ||
| } else { | ||
| let nodeClasses = node.classList | ||
| if (nodeClasses) { | ||
| let j = nodeClasses.length | ||
| while (j--) { | ||
| const nodeClassJ = nodeClasses[j] | ||
| if (queriedClasses.has(nodeClassJ) === false) { | ||
| classes.push(nodeClassJ) | ||
| queriedClasses.add(nodeClassJ) | ||
| } | ||
| } | ||
| } | ||
| } | ||
| } | ||
| return { classes, ids } | ||
| } | ||
|
|
||
| const handleNewNodes = (newNodes: Element[]) => { | ||
| const { classes, ids } = getClassesAndIds(newNodes) | ||
| chrome.runtime.sendMessage({ | ||
| type: 'classIdStylesheet', | ||
| classes, | ||
| ids, | ||
| exceptions: genericExceptions | ||
| }) | ||
| } | ||
|
|
||
| function applyCosmeticFilterMutationObserver () { | ||
| let targetNode = document.documentElement | ||
| let observer = new MutationObserver(function (mutations) { | ||
| console.log('mutation observed') | ||
| injectIncrementalStyles(mutations) | ||
| let observer = new MutationObserver(mutations => { | ||
| const nodeList: Element[] = [] | ||
| for (const mutation of mutations) { | ||
| for (let nodeIndex = 0; nodeIndex < mutation.addedNodes.length; nodeIndex++) { | ||
| nodeList.push(mutation.addedNodes[nodeIndex] as Element) | ||
| } | ||
| } | ||
| handleNewNodes(nodeList) | ||
| }) | ||
| let observerConfig = { | ||
| childList: true, | ||
| subtree: true | ||
| // characterData: true | ||
| } | ||
| observer.observe(targetNode, observerConfig) | ||
| }*/ | ||
| } | ||
|
|
||
| document.addEventListener('contextmenu', (event) => { | ||
| // send host and store target | ||
| @@ -35,6 +90,17 @@ chrome.runtime.onMessage.addListener((msg, sender, sendResponse) => { | ||
| switch (action) { | ||
| case 'getTargetSelector': { | ||
| sendResponse(unique(target)) | ||
| break | ||
| } | ||
| case 'cosmeticFilterGenericExceptions': { | ||
| genericExceptions = msg.exceptions | ||
|
|
||
| let allNodes = Array.from(document.querySelectorAll('[id],[class]')) | ||
| handleNewNodes(allNodes) | ||
| applyCosmeticFilterMutationObserver() | ||
|
|
||
| sendResponse(null) | ||
| break | ||
| } | ||
| } | ||
| }) | ||
)should be on separate line since{is separate line to(