diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 05:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-17 05:47:55 +0000 |
commit | 31d6ff6f931696850c348007241195ab3b2eddc7 (patch) | |
tree | 615cb1c57ce9f6611bad93326b9105098f379609 /platform/mv3/scriptlets | |
parent | Initial commit. (diff) | |
download | ublock-origin-31d6ff6f931696850c348007241195ab3b2eddc7.tar.xz ublock-origin-31d6ff6f931696850c348007241195ab3b2eddc7.zip |
Adding upstream version 1.55.0+dfsg.upstream/1.55.0+dfsg
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'platform/mv3/scriptlets')
-rw-r--r-- | platform/mv3/scriptlets/css-declarative.template.js | 51 | ||||
-rw-r--r-- | platform/mv3/scriptlets/css-generic.template.js | 61 | ||||
-rw-r--r-- | platform/mv3/scriptlets/css-generichigh.template.css | 26 | ||||
-rw-r--r-- | platform/mv3/scriptlets/css-procedural.template.js | 51 | ||||
-rw-r--r-- | platform/mv3/scriptlets/css-specific.template.js | 51 | ||||
-rw-r--r-- | platform/mv3/scriptlets/scriptlet.template.js | 175 |
6 files changed, 415 insertions, 0 deletions
diff --git a/platform/mv3/scriptlets/css-declarative.template.js b/platform/mv3/scriptlets/css-declarative.template.js new file mode 100644 index 0000000..c1f480f --- /dev/null +++ b/platform/mv3/scriptlets/css-declarative.template.js @@ -0,0 +1,51 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +/* jshint esversion:11 */ + +'use strict'; + +// ruleset: $rulesetId$ + +/******************************************************************************/ + +// Important! +// Isolate from global scope +(function uBOL_cssDeclarativeImport() { + +/******************************************************************************/ + +const argsList = self.$argsList$; + +const hostnamesMap = new Map(self.$hostnamesMap$); + +const entitiesMap = new Map(self.$entitiesMap$); + +const exceptionsMap = new Map(self.$exceptionsMap$); + +self.declarativeImports = self.declarativeImports || []; +self.declarativeImports.push({ argsList, hostnamesMap, entitiesMap, exceptionsMap }); + +/******************************************************************************/ + +})(); + +/******************************************************************************/ diff --git a/platform/mv3/scriptlets/css-generic.template.js b/platform/mv3/scriptlets/css-generic.template.js new file mode 100644 index 0000000..a1f1d6c --- /dev/null +++ b/platform/mv3/scriptlets/css-generic.template.js @@ -0,0 +1,61 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +/* jshint esversion:11 */ + +'use strict'; + +/******************************************************************************/ + +// Important! +// Isolate from global scope +(function uBOL_cssGenericImport() { + +/******************************************************************************/ + +// $rulesetId$ + +const toImport = self.$genericSelectorMap$; + +const genericSelectorMap = self.genericSelectorMap || new Map(); + +if ( genericSelectorMap.size === 0 ) { + self.genericSelectorMap = new Map(toImport); + return; +} + +for ( const toImportEntry of toImport ) { + const existing = genericSelectorMap.get(toImportEntry[0]); + genericSelectorMap.set( + toImportEntry[0], + existing === undefined + ? toImportEntry[1] + : `${existing},${toImportEntry[1]}` + ); +} + +self.genericSelectorMap = genericSelectorMap; + +/******************************************************************************/ + +})(); + +/******************************************************************************/ diff --git a/platform/mv3/scriptlets/css-generichigh.template.css b/platform/mv3/scriptlets/css-generichigh.template.css new file mode 100644 index 0000000..370bc4c --- /dev/null +++ b/platform/mv3/scriptlets/css-generichigh.template.css @@ -0,0 +1,26 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +/* $rulesetId$ */ + +$selectorList$ { + display: none !important; +} diff --git a/platform/mv3/scriptlets/css-procedural.template.js b/platform/mv3/scriptlets/css-procedural.template.js new file mode 100644 index 0000000..61c95e6 --- /dev/null +++ b/platform/mv3/scriptlets/css-procedural.template.js @@ -0,0 +1,51 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +/* jshint esversion:11 */ + +'use strict'; + +// ruleset: $rulesetId$ + +/******************************************************************************/ + +// Important! +// Isolate from global scope +(function uBOL_cssProceduralImport() { + +/******************************************************************************/ + +const argsList = self.$argsList$; + +const hostnamesMap = new Map(self.$hostnamesMap$); + +const entitiesMap = new Map(self.$entitiesMap$); + +const exceptionsMap = new Map(self.$exceptionsMap$); + +self.proceduralImports = self.proceduralImports || []; +self.proceduralImports.push({ argsList, hostnamesMap, entitiesMap, exceptionsMap }); + +/******************************************************************************/ + +})(); + +/******************************************************************************/ diff --git a/platform/mv3/scriptlets/css-specific.template.js b/platform/mv3/scriptlets/css-specific.template.js new file mode 100644 index 0000000..6858931 --- /dev/null +++ b/platform/mv3/scriptlets/css-specific.template.js @@ -0,0 +1,51 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2019-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock +*/ + +/* jshint esversion:11 */ + +'use strict'; + +// ruleset: $rulesetId$ + +/******************************************************************************/ + +// Important! +// Isolate from global scope +(function uBOL_cssSpecificImports() { + +/******************************************************************************/ + +const argsList = self.$argsList$; + +const hostnamesMap = new Map(self.$hostnamesMap$); + +const entitiesMap = new Map(self.$entitiesMap$); + +const exceptionsMap = new Map(self.$exceptionsMap$); + +self.specificImports = self.specificImports || []; +self.specificImports.push({ argsList, hostnamesMap, entitiesMap, exceptionsMap }); + +/******************************************************************************/ + +})(); + +/******************************************************************************/ diff --git a/platform/mv3/scriptlets/scriptlet.template.js b/platform/mv3/scriptlets/scriptlet.template.js new file mode 100644 index 0000000..b2c4ada --- /dev/null +++ b/platform/mv3/scriptlets/scriptlet.template.js @@ -0,0 +1,175 @@ +/******************************************************************************* + + uBlock Origin Lite - a comprehensive, MV3-compliant content blocker + Copyright (C) 2014-present Raymond Hill + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see {http://www.gnu.org/licenses/}. + + Home: https://github.com/gorhill/uBlock + +*/ + +/* jshint esversion:11 */ +/* global cloneInto */ + +'use strict'; + +// ruleset: $rulesetId$ + +/******************************************************************************/ + +// Important! +// Isolate from global scope + +// Start of local scope +(( ) => { + +/******************************************************************************/ + +// Start of code to inject +const uBOL_$scriptletName$ = function() { + +const scriptletGlobals = new Map(); // jshint ignore: line + +const argsList = self.$argsList$; + +const hostnamesMap = new Map(self.$hostnamesMap$); + +const entitiesMap = new Map(self.$entitiesMap$); + +const exceptionsMap = new Map(self.$exceptionsMap$); + +/******************************************************************************/ + +function $scriptletName$(){} + +/******************************************************************************/ + +const hnParts = []; +try { hnParts.push(...document.location.hostname.split('.')); } +catch(ex) { } +const hnpartslen = hnParts.length; +if ( hnpartslen === 0 ) { return; } + +const todoIndices = new Set(); +const tonotdoIndices = []; + +// Exceptions +if ( exceptionsMap.size !== 0 ) { + for ( let i = 0; i < hnpartslen; i++ ) { + const hn = hnParts.slice(i).join('.'); + const excepted = exceptionsMap.get(hn); + if ( excepted ) { tonotdoIndices.push(...excepted); } + } + exceptionsMap.clear(); +} + +// Hostname-based +if ( hostnamesMap.size !== 0 ) { + const collectArgIndices = hn => { + let argsIndices = hostnamesMap.get(hn); + if ( argsIndices === undefined ) { return; } + if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } + for ( const argsIndex of argsIndices ) { + if ( tonotdoIndices.includes(argsIndex) ) { continue; } + todoIndices.add(argsIndex); + } + }; + for ( let i = 0; i < hnpartslen; i++ ) { + const hn = hnParts.slice(i).join('.'); + collectArgIndices(hn); + } + collectArgIndices('*'); + hostnamesMap.clear(); +} + +// Entity-based +if ( entitiesMap.size !== 0 ) { + const n = hnpartslen - 1; + for ( let i = 0; i < n; i++ ) { + for ( let j = n; j > i; j-- ) { + const en = hnParts.slice(i,j).join('.'); + let argsIndices = entitiesMap.get(en); + if ( argsIndices === undefined ) { continue; } + if ( typeof argsIndices === 'number' ) { argsIndices = [ argsIndices ]; } + for ( const argsIndex of argsIndices ) { + if ( tonotdoIndices.includes(argsIndex) ) { continue; } + todoIndices.add(argsIndex); + } + } + } + entitiesMap.clear(); +} + +// Apply scriplets +for ( const i of todoIndices ) { + try { $scriptletName$(...argsList[i]); } + catch(ex) {} +} +argsList.length = 0; + +/******************************************************************************/ + +}; +// End of code to inject + +/******************************************************************************/ + +// Inject code + +// https://bugzilla.mozilla.org/show_bug.cgi?id=1736575 +// 'MAIN' world not yet supported in Firefox, so we inject the code into +// 'MAIN' ourself when environment in Firefox. + +const targetWorld = '$world$'; + +// Not Firefox +if ( typeof wrappedJSObject !== 'object' || targetWorld === 'ISOLATED' ) { + return uBOL_$scriptletName$(); +} + +// Firefox +{ + const page = self.wrappedJSObject; + let script, url; + try { + page.uBOL_$scriptletName$ = cloneInto([ + [ '(', uBOL_$scriptletName$.toString(), ')();' ], + { type: 'text/javascript; charset=utf-8' }, + ], self); + const blob = new page.Blob(...page.uBOL_$scriptletName$); + url = page.URL.createObjectURL(blob); + const doc = page.document; + script = doc.createElement('script'); + script.async = false; + script.src = url; + (doc.head || doc.documentElement || doc).append(script); + } catch (ex) { + console.error(ex); + } + if ( url ) { + if ( script ) { script.remove(); } + page.URL.revokeObjectURL(url); + } + delete page.uBOL_$scriptletName$; +} + +/******************************************************************************/ + +// End of local scope +})(); + +/******************************************************************************/ + +void 0; |