mirror of
https://github.com/gorhill/uBlock.git
synced 2024-11-10 01:02:08 +01:00
Assets management refactored (#2314)
* refactoring assets management code * finalizing refactoring of assets management * various code review of new assets management code * fix #2281 * fix #1961 * fix #1293 * fix #1275 * fix update scheduler timing logic * forward compatibility (to be removed once 1.11+ is widespread) * more codereview; give admins ability to specify own assets.json * "assetKey" is more accurate than "path" * fix group count update when building dom incrementally * reorganize content (order, added URLs, etc.) * ability to customize updater through advanced settings * better spinner icon
This commit is contained in:
parent
69fc59305e
commit
3b9fd49c50
20 changed files with 2171 additions and 2525 deletions
585
assets/assets.json
Normal file
585
assets/assets.json
Normal file
|
@ -0,0 +1,585 @@
|
|||
{
|
||||
"assets.json": {
|
||||
"content": "internal",
|
||||
"updateAfter": 13,
|
||||
"contentURL": [
|
||||
"https://raw.githubusercontent.com/gorhill/uBlock/master/assets/assets.json",
|
||||
"assets/assets.json"
|
||||
]
|
||||
},
|
||||
"public_suffix_list.dat": {
|
||||
"content": "internal",
|
||||
"updateAfter": 19,
|
||||
"contentURL": [
|
||||
"https://publicsuffix.org/list/public_suffix_list.dat",
|
||||
"assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat"
|
||||
]
|
||||
},
|
||||
"ublock-resources": {
|
||||
"content": "internal",
|
||||
"updateAfter": 7,
|
||||
"contentURL": [
|
||||
"https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/resources.txt",
|
||||
"assets/ublock/resources.txt"
|
||||
]
|
||||
},
|
||||
"ublock-filters": {
|
||||
"content": "filters",
|
||||
"group": "default",
|
||||
"title": "uBlock filters",
|
||||
"contentURL": [
|
||||
"https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/filters.txt",
|
||||
"assets/ublock/filters.txt"
|
||||
]
|
||||
},
|
||||
"ublock-badware": {
|
||||
"content": "filters",
|
||||
"group": "default",
|
||||
"title": "uBlock filters – Badware risks",
|
||||
"contentURL": [
|
||||
"https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/badware.txt",
|
||||
"assets/ublock/badware.txt"
|
||||
],
|
||||
"supportURL": "https://github.com/gorhill/uBlock/wiki/Badware-risks",
|
||||
"instructionURL": "https://github.com/gorhill/uBlock/wiki/Badware-risks"
|
||||
},
|
||||
"ublock-experimental": {
|
||||
"content": "filters",
|
||||
"group": "default",
|
||||
"title": "uBlock filters – Experimental",
|
||||
"off": true,
|
||||
"contentURL": [
|
||||
"https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/experimental.txt",
|
||||
"assets/ublock/experimental.txt"
|
||||
],
|
||||
"supportURL": "https://github.com/gorhill/uBlock/wiki/Experimental-filters",
|
||||
"instructionURL": "https://github.com/gorhill/uBlock/wiki/Experimental-filters"
|
||||
},
|
||||
"ublock-privacy": {
|
||||
"content": "filters",
|
||||
"group": "default",
|
||||
"title": "uBlock filters – Privacy",
|
||||
"contentURL": [
|
||||
"https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/privacy.txt",
|
||||
"assets/ublock/privacy.txt"
|
||||
]
|
||||
},
|
||||
"ublock-unbreak": {
|
||||
"content": "filters",
|
||||
"group": "default",
|
||||
"title": "uBlock filters – Unbreak",
|
||||
"contentURL": [
|
||||
"https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/filters/unbreak.txt",
|
||||
"assets/ublock/unbreak.txt"
|
||||
]
|
||||
},
|
||||
"awrl-0": {
|
||||
"content": "filters",
|
||||
"group": "ads",
|
||||
"off": true,
|
||||
"title": "Adblock Warning Removal List",
|
||||
"contentURL": "https://easylist-downloads.adblockplus.org/antiadblockfilters.txt",
|
||||
"supportURL": "https://forums.lanik.us/"
|
||||
},
|
||||
"reek-0": {
|
||||
"content": "filters",
|
||||
"group": "ads",
|
||||
"off": true,
|
||||
"title": "Anti-Adblock Killer | Reek",
|
||||
"contentURL": "https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt",
|
||||
"supportURL": "https://github.com/reek/anti-adblock-killer",
|
||||
"instructionURL": "https://github.com/reek/anti-adblock-killer#instruction"
|
||||
},
|
||||
"easylist": {
|
||||
"content": "filters",
|
||||
"group": "ads",
|
||||
"title": "EasyList",
|
||||
"contentURL": [
|
||||
"https://easylist.to/easylist/easylist.txt",
|
||||
"https://easylist-downloads.adblockplus.org/easylist.txt",
|
||||
"https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/thirdparties/easylist-downloads.adblockplus.org/easylist.txt",
|
||||
"assets/thirdparties/easylist-downloads.adblockplus.org/easylist.txt"
|
||||
],
|
||||
"supportURL": "https://forums.lanik.us/"
|
||||
},
|
||||
"easylist-nocosmetic": {
|
||||
"content": "filters",
|
||||
"group": "ads",
|
||||
"off": true,
|
||||
"title": "EasyList without element hiding rules",
|
||||
"contentURL": "https://easylist-downloads.adblockplus.org/easylist_noelemhide.txt",
|
||||
"supportURL": "https://forums.lanik.us/"
|
||||
},
|
||||
"disconnect-tracking": {
|
||||
"content": "filters",
|
||||
"group": "privacy",
|
||||
"off": true,
|
||||
"title": "Basic tracking list by Disconnect",
|
||||
"contentURL": "https://s3.amazonaws.com/lists.disconnect.me/simple_tracking.txt"
|
||||
},
|
||||
"easyprivacy": {
|
||||
"content": "filters",
|
||||
"group": "privacy",
|
||||
"title": "EasyPrivacy",
|
||||
"contentURL": [
|
||||
"https://easylist.to/easylist/easyprivacy.txt",
|
||||
"https://easylist-downloads.adblockplus.org/easyprivacy.txt",
|
||||
"https://raw.githubusercontent.com/uBlockOrigin/uAssets/master/thirdparties/easylist-downloads.adblockplus.org/easyprivacy.txt",
|
||||
"assets/thirdparties/easylist-downloads.adblockplus.org/easyprivacy.txt"
|
||||
],
|
||||
"supportURL": "https://forums.lanik.us/"
|
||||
},
|
||||
"fanboy-enhanced": {
|
||||
"content": "filters",
|
||||
"group": "privacy",
|
||||
"off": true,
|
||||
"title": "Fanboy’s Enhanced Tracking List",
|
||||
"contentURL": "https://www.fanboy.co.nz/enhancedstats.txt",
|
||||
"supportURL": "https://forums.lanik.us/"
|
||||
},
|
||||
"disconnect-malvertising": {
|
||||
"content": "filters",
|
||||
"group": "malware",
|
||||
"off": true,
|
||||
"title": "Malvertising filter list by Disconnect",
|
||||
"contentURL": "https://s3.amazonaws.com/lists.disconnect.me/simple_malvertising.txt"
|
||||
},
|
||||
"malware-0": {
|
||||
"content": "filters",
|
||||
"group": "malware",
|
||||
"title": "Malware Domain List",
|
||||
"contentURL": [
|
||||
"https://www.malwaredomainlist.com/hostslist/hosts.txt",
|
||||
"assets/thirdparties/www.malwaredomainlist.com/hostslist/hosts.txt"
|
||||
]
|
||||
},
|
||||
"malware-1": {
|
||||
"content": "filters",
|
||||
"group": "malware",
|
||||
"title": "Malware domains",
|
||||
"contentURL": [
|
||||
"https://mirror.cedia.org.ec/malwaredomains/justdomains",
|
||||
"https://mirror1.malwaredomains.com/files/justdomains",
|
||||
"assets/thirdparties/mirror1.malwaredomains.com/files/justdomains",
|
||||
"assets/thirdparties/mirror1.malwaredomains.com/files/justdomains.txt"
|
||||
],
|
||||
"supportURL": "http://www.malwaredomains.com/"
|
||||
},
|
||||
"malware-2": {
|
||||
"content": "filters",
|
||||
"group": "malware",
|
||||
"off": true,
|
||||
"title": "Malware domains (long-lived)",
|
||||
"contentURL": [
|
||||
"https://mirror1.malwaredomains.com/files/immortal_domains.txt",
|
||||
"https://mirror.cedia.org.ec/malwaredomains/immortal_domains.txt"
|
||||
],
|
||||
"supportURL": "http://www.malwaredomains.com/"
|
||||
},
|
||||
"disconnect-malware": {
|
||||
"content": "filters",
|
||||
"group": "malware",
|
||||
"off": true,
|
||||
"title": "Malware filter list by Disconnect",
|
||||
"contentURL": "https://s3.amazonaws.com/lists.disconnect.me/simple_malware.txt"
|
||||
},
|
||||
"spam404-0": {
|
||||
"content": "filters",
|
||||
"group": "malware",
|
||||
"off": true,
|
||||
"title": "Spam404",
|
||||
"contentURL": "https://raw.githubusercontent.com/Dawsey21/Lists/master/adblock-list.txt",
|
||||
"supportURL": "http://www.spam404.com/"
|
||||
},
|
||||
"fanboy-thirdparty_social": {
|
||||
"content": "filters",
|
||||
"group": "social",
|
||||
"off": true,
|
||||
"title": "Anti-ThirdpartySocial (see warning inside list)",
|
||||
"contentURL": "https://www.fanboy.co.nz/fanboy-antifacebook.txt",
|
||||
"supportURL": "https://forums.lanik.us/"
|
||||
},
|
||||
"fanboy-annoyance": {
|
||||
"content": "filters",
|
||||
"group": "social",
|
||||
"off": true,
|
||||
"title": "Fanboy’s Annoyance List",
|
||||
"contentURL": [
|
||||
"https://easylist.to/easylist/fanboy-annoyance.txt",
|
||||
"https://easylist-downloads.adblockplus.org/fanboy-annoyance.txt"
|
||||
],
|
||||
"supportURL": "https://forums.lanik.us/"
|
||||
},
|
||||
"fanboy-social": {
|
||||
"content": "filters",
|
||||
"group": "social",
|
||||
"off": true,
|
||||
"title": "Fanboy’s Social Blocking List",
|
||||
"contentURL": [
|
||||
"https://easylist.to/easylist/fanboy-social.txt",
|
||||
"https://easylist-downloads.adblockplus.org/fanboy-social.txt"
|
||||
],
|
||||
"supportURL": "https://forums.lanik.us/"
|
||||
},
|
||||
"dpollock-0": {
|
||||
"content": "filters",
|
||||
"group": "multipurpose",
|
||||
"updateAfter": 11,
|
||||
"off": true,
|
||||
"title": "Dan Pollock’s hosts file",
|
||||
"contentURL": "http://someonewhocares.org/hosts/hosts",
|
||||
"supportURL": "http://someonewhocares.org/hosts/"
|
||||
},
|
||||
"fanboy-ultimate": {
|
||||
"content": "filters",
|
||||
"group": "multipurpose",
|
||||
"off": true,
|
||||
"title": "Fanboy+Easylist-Merged Ultimate List",
|
||||
"contentURL": "https://www.fanboy.co.nz/r/fanboy-ultimate.txt",
|
||||
"supportURL": "https://forums.lanik.us/"
|
||||
},
|
||||
"hphosts": {
|
||||
"content": "filters",
|
||||
"group": "multipurpose",
|
||||
"updateAfter": 11,
|
||||
"off": true,
|
||||
"title": "hpHosts’ Ad and tracking servers",
|
||||
"contentURL": "https://hosts-file.net/.%5Cad_servers.txt",
|
||||
"supportURL": "https://hosts-file.net/"
|
||||
},
|
||||
"mvps-0": {
|
||||
"content": "filters",
|
||||
"group": "multipurpose",
|
||||
"updateAfter": 11,
|
||||
"off": true,
|
||||
"title": "MVPS HOSTS",
|
||||
"contentURL": "http://winhelp2002.mvps.org/hosts.txt",
|
||||
"supportURL": "http://winhelp2002.mvps.org/"
|
||||
},
|
||||
"plowe-0": {
|
||||
"content": "filters",
|
||||
"group": "multipurpose",
|
||||
"updateAfter": 13,
|
||||
"title": "Peter Lowe’s Ad and tracking server list",
|
||||
"contentURL": [
|
||||
"https://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=1&mimetype=plaintext",
|
||||
"assets/thirdparties/pgl.yoyo.org/as/serverlist",
|
||||
"assets/thirdparties/pgl.yoyo.org/as/serverlist.txt"
|
||||
],
|
||||
"supportURL": "https://pgl.yoyo.org/adservers/"
|
||||
},
|
||||
"ara-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "ara: Liste AR",
|
||||
"lang": "ar",
|
||||
"contentURL": "https://easylist-downloads.adblockplus.org/Liste_AR.txt",
|
||||
"supportURL": "https://forums.lanik.us/viewforum.php?f=98"
|
||||
},
|
||||
"BGR-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "BGR: Bulgarian Adblock list",
|
||||
"lang": "bg",
|
||||
"contentURL": "https://stanev.org/abp/adblock_bg.txt",
|
||||
"supportURL": "https://stanev.org/abp/"
|
||||
},
|
||||
"CHN-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "CHN: EasyList China (中文)",
|
||||
"lang": "zh",
|
||||
"contentURL": "https://easylist-downloads.adblockplus.org/easylistchina.txt",
|
||||
"supportURL": "http://abpchina.org/forum/forum.php"
|
||||
},
|
||||
"CHN-1": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "CHN: CJX's EasyList Lite (main focus on Chinese sites)",
|
||||
"contentURL": "https://raw.githubusercontent.com/cjx82630/cjxlist/master/cjxlist.txt",
|
||||
"supportURL": "https://github.com/cjx82630/cjxlist"
|
||||
},
|
||||
"CHN-2": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "CHN: CJX's Annoyance List",
|
||||
"contentURL": "https://raw.githubusercontent.com/cjx82630/cjxlist/master/cjx-annoyance.txt",
|
||||
"supportURL": "https://github.com/cjx82630/cjxlist"
|
||||
},
|
||||
"CZE-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "CZE, SVK: EasyList Czech and Slovak",
|
||||
"lang": "cs",
|
||||
"contentURL": "https://raw.githubusercontent.com/tomasko126/easylistczechandslovak/master/filters.txt",
|
||||
"supportURL": "https://github.com/tomasko126/easylistczechandslovak"
|
||||
},
|
||||
"DEU-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "DEU: EasyList Germany",
|
||||
"lang": "de",
|
||||
"contentURL": [
|
||||
"https://easylist.to/easylistgermany/easylistgermany.txt",
|
||||
"https://easylist-downloads.adblockplus.org/easylistgermany.txt"
|
||||
],
|
||||
"supportURL": "https://forums.lanik.us/viewforum.php?f=90"
|
||||
},
|
||||
"DNK-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "DNK: Schacks Adblock Plus liste",
|
||||
"lang": "da",
|
||||
"contentURL": "https://adblock.dk/block.csv",
|
||||
"supportURL": "https://henrik.schack.dk/adblock/"
|
||||
},
|
||||
"EST-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "EST: Eesti saitidele kohandatud filter",
|
||||
"lang": "et",
|
||||
"contentURL": "http://adblock.ee/list.php",
|
||||
"supportURL": "http://adblock.ee/"
|
||||
},
|
||||
"EU-prebake": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "EU: Prebake - Filter Obtrusive Cookie Notices",
|
||||
"contentURL": "https://raw.githubusercontent.com/liamja/Prebake/master/obtrusive.txt",
|
||||
"supportURL": "https://github.com/liamja/Prebake"
|
||||
},
|
||||
"FIN-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "FIN: Finnish Addition to Easylist",
|
||||
"lang": "fi",
|
||||
"contentURL": "http://adb.juvander.net/Finland_adb.txt",
|
||||
"supportURL": "http://www.juvander.fi/AdblockFinland"
|
||||
},
|
||||
"FRA-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "FRA: EasyList Liste FR",
|
||||
"lang": "fr",
|
||||
"contentURL": "https://easylist-downloads.adblockplus.org/liste_fr.txt",
|
||||
"supportURL": "https://forums.lanik.us/viewforum.php?f=91"
|
||||
},
|
||||
"GRC-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "GRC: Greek AdBlock Filter",
|
||||
"lang": "el",
|
||||
"contentURL": "https://www.void.gr/kargig/void-gr-filters.txt",
|
||||
"supportURL": "https://github.com/kargig/greek-adblockplus-filter"
|
||||
},
|
||||
"HUN-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "HUN: hufilter",
|
||||
"lang": "hu",
|
||||
"contentURL": "https://raw.githubusercontent.com/szpeter80/hufilter/master/hufilter.txt",
|
||||
"supportURL": "https://github.com/szpeter80/hufilter"
|
||||
},
|
||||
"IDN-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "IDN: ABPindo",
|
||||
"lang": "id",
|
||||
"contentURL": [
|
||||
"https://raw.githubusercontent.com/ABPindo/indonesianadblockrules/master/subscriptions/abpindo.txt",
|
||||
"https://raw.githubusercontent.com/heradhis/indonesianadblockrules/master/subscriptions/abpindo.txt"
|
||||
],
|
||||
"supportURL": "https://github.com/ABPindo/indonesianadblockrules"
|
||||
},
|
||||
"ISL-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "ISL: Icelandic ABP List",
|
||||
"lang": "is",
|
||||
"contentURL": "http://adblock.gardar.net/is.abp.txt",
|
||||
"supportURL": "http://adblock.gardar.net/"
|
||||
},
|
||||
"ISR-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "ISR: EasyList Hebrew",
|
||||
"lang": "he",
|
||||
"contentURL": "https://raw.githubusercontent.com/easylist/EasyListHebrew/master/EasyListHebrew.txt",
|
||||
"supportURL": "https://github.com/easylist/EasyListHebrew"
|
||||
},
|
||||
"ITA-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "ITA: EasyList Italy",
|
||||
"lang": "it",
|
||||
"contentURL": "https://easylist-downloads.adblockplus.org/easylistitaly.txt",
|
||||
"supportURL": "https://forums.lanik.us/viewforum.php?f=96"
|
||||
},
|
||||
"ITA-1": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "ITA: ABP X Files",
|
||||
"contentURL": "https://raw.githubusercontent.com/gioxx/xfiles/master/filtri.txt",
|
||||
"supportURL": "http://noads.it/"
|
||||
},
|
||||
"JPN-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "JPN: ABP Japanese filters (日本用フィルタ)",
|
||||
"lang": "ja",
|
||||
"contentURL": "https://raw.githubusercontent.com/k2jp/abp-japanese-filters/master/abpjf.txt",
|
||||
"supportURL": "https://github.com/k2jp/abp-japanese-filters/wiki/Support_Policy"
|
||||
},
|
||||
"KOR-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "KOR: Korean Adblock List",
|
||||
"lang": "ko",
|
||||
"contentURL": "https://raw.githubusercontent.com/gfmaster/adblock-korea-contrib/master/filter.txt",
|
||||
"supportURL": "https://github.com/gfmaster/adblock-korea-contrib"
|
||||
},
|
||||
"KOR-1": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "KOR: YousList",
|
||||
"lang": "ko",
|
||||
"contentURL": "https://raw.githubusercontent.com/yous/YousList/master/youslist.txt",
|
||||
"supportURL": "https://github.com/yous/YousList"
|
||||
},
|
||||
"KOR-2": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "KOR: Fanboy's Korean",
|
||||
"contentURL": "https://www.fanboy.co.nz/fanboy-korean.txt",
|
||||
"supportURL": "https://forums.lanik.us/"
|
||||
},
|
||||
"LTU-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "LTU: Adblock Plus Lithuania",
|
||||
"lang": "lt",
|
||||
"contentURL": "http://margevicius.lt/easylistlithuania.txt",
|
||||
"supportURL": "http://margevicius.lt/easylist_lithuania/"
|
||||
},
|
||||
"LVA-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "LVA: Latvian List",
|
||||
"lang": "lv",
|
||||
"contentURL": "https://notabug.org/latvian-list/adblock-latvian/raw/master/lists/latvian-list.txt",
|
||||
"supportURL": "https://notabug.org/latvian-list/adblock-latvian"
|
||||
},
|
||||
"NLD-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "NLD: EasyList Dutch",
|
||||
"lang": "nl",
|
||||
"contentURL": "https://easylist-downloads.adblockplus.org/easylistdutch.txt",
|
||||
"supportURL": "https://forums.lanik.us/viewforum.php?f=100"
|
||||
},
|
||||
"POL-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "POL: polskie filtry do Adblocka i uBlocka",
|
||||
"lang": "pl",
|
||||
"contentURL": "https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-adblock-filters/adblock.txt",
|
||||
"supportURL": "https://www.certyficate.it/adblock-ublock-polish-filters/"
|
||||
},
|
||||
"RUS-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "RUS: RU AdList (Дополнительная региональная подписка)",
|
||||
"lang": "ru",
|
||||
"contentURL": "https://easylist-downloads.adblockplus.org/advblock.txt",
|
||||
"supportURL": "https://forums.lanik.us/viewforum.php?f=102"
|
||||
},
|
||||
"RUS-1": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "RUS: BitBlock List (Дополнительная подписка фильтров)",
|
||||
"contentURL": "https://easylist-downloads.adblockplus.org/bitblock.txt",
|
||||
"supportURL": "https://forums.lanik.us/viewforum.php?f=102"
|
||||
},
|
||||
"RUS-2": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "RUS: Adguard Russian Filter",
|
||||
"contentURL": "https://filters.adtidy.org/extension/chromium/filters/1.txt",
|
||||
"supportURL": "https://forum.adguard.com/forumdisplay.php?69-%D0%A4%D0%B8%D0%BB%D1%8C%D1%82%D1%80%D1%8B-Adguard"
|
||||
},
|
||||
"spa-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "spa: EasyList Spanish",
|
||||
"lang": "es",
|
||||
"contentURL": "https://easylist-downloads.adblockplus.org/easylistspanish.txt",
|
||||
"supportURL": "https://forums.lanik.us/viewforum.php?f=103"
|
||||
},
|
||||
"SVN-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "SVN: Slovenian List",
|
||||
"lang": "sl",
|
||||
"contentURL": "https://raw.githubusercontent.com/betterwebleon/slovenian-list/master/filters.txt",
|
||||
"supportURL": "https://github.com/betterwebleon/slovenian-list"
|
||||
},
|
||||
"SWE-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "SWE: Fanboy's Swedish",
|
||||
"lang": "sv",
|
||||
"contentURL": "https://www.fanboy.co.nz/fanboy-swedish.txt",
|
||||
"supportURL": "https://forums.lanik.us/"
|
||||
},
|
||||
"TUR-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "TUR: Adguard Turkish Filter",
|
||||
"lang": "tr",
|
||||
"contentURL": "https://filters.adtidy.org/extension/chromium/filters/13.txt",
|
||||
"supportURL": "https://forum.adguard.com/forumdisplay.php?51-Filter-Rules"
|
||||
},
|
||||
"VIE-0": {
|
||||
"content": "filters",
|
||||
"group": "regions",
|
||||
"off": true,
|
||||
"title": "VIE: Fanboy's Vietnamese",
|
||||
"lang": "vi",
|
||||
"contentURL": "https://www.fanboy.co.nz/fanboy-vietnam.txt",
|
||||
"supportURL": "https://forums.lanik.us/"
|
||||
}
|
||||
}
|
|
@ -40,16 +40,10 @@
|
|||
<button id="externalListsApply" class="custom important" disabled="true" data-i18n="3pExternalListsApply"></button></p>
|
||||
</div>
|
||||
|
||||
<div id="busyOverlay">
|
||||
<div></div>
|
||||
<!-- progress bar widget -->
|
||||
<div><div></div><div></div></div>
|
||||
</div>
|
||||
|
||||
<div id="templates" style="display: none;">
|
||||
<ul>
|
||||
<li class="groupEntry"><span class="geName"></span> <span class="geCount dim"></span>
|
||||
<ul></ul>
|
||||
<ul class="listEntries"></ul>
|
||||
</li>
|
||||
<li class="listEntry">
|
||||
<input type="checkbox">
|
||||
|
@ -57,10 +51,10 @@
|
|||
<a class="fa" style="display: none;" target="_blank"></a>
|
||||
<a href="" style="display: none;" target="_blank"></a>: <!--
|
||||
--><span class="counts dim"></span><!--
|
||||
--><span class="status unsecure" style="display: none;">http</span><!--
|
||||
--><span class="status new" style="display: none;" data-i18n="3pExternalListNew"></span><!--
|
||||
--><span class="status obsolete" style="display: none;" data-i18n="3pExternalListObsolete"></span><!--
|
||||
--><span class="status purge" style="display: none;" data-i18n="3pExternalListPurge"></span>
|
||||
--><span class="status unsecure">http</span><!--
|
||||
--><span class="status obsolete" data-i18n="3pExternalListObsolete"></span><!--
|
||||
--><span class="status purge" data-i18n="3pExternalListPurge"></span><!--
|
||||
--><span class="fa status updating"></span>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
|
|
@ -580,8 +580,8 @@
|
|||
"description": "Message asking user to confirm reset"
|
||||
},
|
||||
"errorCantConnectTo":{
|
||||
"message":"Unable to connect to {{url}}",
|
||||
"description":"English: Network error: unable to connect to {{url}}"
|
||||
"message":"Network error: {{msg}}",
|
||||
"description":"English: Network error: {{msg}}"
|
||||
},
|
||||
"subscriberConfirm":{
|
||||
"message":"uBlock₀: Add the following URL to your custom filter lists?\n\nTitle: \"{{title}}\"\nURL: {{url}}",
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
<script src="js/polyfill.js"></script>
|
||||
<script src="lib/punycode.js"></script>
|
||||
<script src="lib/publicsuffixlist.js"></script>
|
||||
<script src="lib/yamd5.js"></script>
|
||||
<script src="js/vapi-common.js"></script>
|
||||
<script src="js/vapi-background.js"></script>
|
||||
<script src="js/background.js"></script>
|
||||
|
|
|
@ -1,3 +1,7 @@
|
|||
@keyframes spin {
|
||||
100% { transform: rotate(360deg); -webkit-transform: rotate(360deg); }
|
||||
}
|
||||
|
||||
ul {
|
||||
padding: 0;
|
||||
list-style-type: none;
|
||||
|
@ -88,7 +92,7 @@ body[dir=rtl] #buttonApply {
|
|||
span.status {
|
||||
border: 1px solid transparent;
|
||||
color: #444;
|
||||
display: inline-block;
|
||||
display: none;
|
||||
font-size: smaller;
|
||||
line-height: 1;
|
||||
margin: 0 0 0 0.5em;
|
||||
|
@ -99,6 +103,16 @@ span.unsecure {
|
|||
background-color: hsl(0, 100%, 88%);
|
||||
border-color: hsl(0, 100%, 83%);
|
||||
}
|
||||
li.listEntry.unsecure span.unsecure {
|
||||
display: inline;
|
||||
}
|
||||
span.obsolete {
|
||||
background-color: hsl(36, 100%, 80%);
|
||||
border-color: hsl(36, 100%, 75%);
|
||||
}
|
||||
li.listEntry.obsolete > input[type="checkbox"]:checked ~ span.obsolete {
|
||||
display: inline;
|
||||
}
|
||||
span.purge {
|
||||
border-color: #ddd;
|
||||
background-color: #eee;
|
||||
|
@ -107,10 +121,16 @@ span.purge {
|
|||
span.purge:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
span.obsolete,
|
||||
span.new {
|
||||
background-color: hsl(36, 100%, 80%);
|
||||
border-color: hsl(36, 100%, 75%);
|
||||
li.listEntry.cached span.purge {
|
||||
display: inline;
|
||||
}
|
||||
span.updating {
|
||||
border: none;
|
||||
padding: 0;
|
||||
}
|
||||
li.listEntry.updating span.updating {
|
||||
animation: spin 2s linear infinite;
|
||||
display: inline-block;
|
||||
}
|
||||
#externalListsDiv {
|
||||
margin: 2em auto 0 2em;
|
||||
|
@ -125,64 +145,3 @@ body[dir=rtl] #externalListsDiv {
|
|||
width: 100%;
|
||||
word-wrap: normal;
|
||||
}
|
||||
body #busyOverlay {
|
||||
background-color: transparent;
|
||||
bottom: 0;
|
||||
cursor: wait;
|
||||
display: none;
|
||||
left: 0;
|
||||
position: fixed;
|
||||
right: 0;
|
||||
top: 0;
|
||||
z-index: 1000;
|
||||
}
|
||||
body.busy #busyOverlay {
|
||||
display: block;
|
||||
}
|
||||
#busyOverlay > div:nth-of-type(1) {
|
||||
background-color: white;
|
||||
bottom: 0;
|
||||
left: 0;
|
||||
opacity: 0.75;
|
||||
position: absolute;
|
||||
right: 0;
|
||||
top: 0;
|
||||
}
|
||||
#busyOverlay > div:nth-of-type(2) {
|
||||
background-color: #eee;
|
||||
border: 1px solid transparent;
|
||||
border-color: #80b3ff #80b3ff hsl(216, 100%, 75%);
|
||||
border-radius: 3px;
|
||||
box-sizing: border-box;
|
||||
height: 3em;
|
||||
left: 10%;
|
||||
position: absolute;
|
||||
bottom: 75%;
|
||||
width: 80%;
|
||||
}
|
||||
#busyOverlay > div:nth-of-type(2) > div:nth-of-type(1) {
|
||||
background-color: hsl(216, 100%, 75%);
|
||||
background-image: linear-gradient(#a8cbff, #80b3ff);
|
||||
background-repeat: repeat-x;
|
||||
border: 0;
|
||||
box-sizing: border-box;
|
||||
color: #222;
|
||||
height: 100%;
|
||||
left: 0;
|
||||
padding: 0;
|
||||
position: absolute;
|
||||
width: 25%;
|
||||
}
|
||||
#busyOverlay > div:nth-of-type(2) > div:nth-of-type(2) {
|
||||
background-color: transparent;
|
||||
border: 0;
|
||||
box-sizing: border-box;
|
||||
height: 100%;
|
||||
left: 0;
|
||||
line-height: 3em;
|
||||
overflow: hidden;
|
||||
position: absolute;
|
||||
text-align: center;
|
||||
top: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uBlock Origin - a browser extension to block requests.
|
||||
Copyright (C) 2014-2016 Raymond Hill
|
||||
Copyright (C) 2014-2017 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
|
||||
|
@ -21,38 +21,30 @@
|
|||
|
||||
/* global uDom */
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
(function() {
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var userListName = vAPI.i18n('1pPageName');
|
||||
(function() {
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var listDetails = {};
|
||||
var parseCosmeticFilters = true;
|
||||
var ignoreGenericCosmeticFilters = false;
|
||||
var selectedListsHashBefore = '';
|
||||
var externalLists = '';
|
||||
var cacheWasPurged = false;
|
||||
var needUpdate = false;
|
||||
var hasCachedContent = false;
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var onMessage = function(msg) {
|
||||
switch ( msg.what ) {
|
||||
case 'assetUpdated':
|
||||
updateAssetStatus(msg);
|
||||
break;
|
||||
case 'staticFilteringDataChanged':
|
||||
renderFilterLists();
|
||||
break;
|
||||
|
||||
case 'forceUpdateAssetsProgress':
|
||||
renderBusyOverlay(true, msg.progress);
|
||||
if ( msg.done ) {
|
||||
messaging.send('dashboard', { what: 'reloadAllFilters' });
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -69,20 +61,15 @@ var renderNumber = function(value) {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
// TODO: get rid of background page dependencies
|
||||
|
||||
var renderFilterLists = function() {
|
||||
var listGroupTemplate = uDom('#templates .groupEntry');
|
||||
var listEntryTemplate = uDom('#templates .listEntry');
|
||||
var listStatsTemplate = vAPI.i18n('3pListsOfBlockedHostsPerListStats');
|
||||
var renderElapsedTimeToString = vAPI.i18n.renderElapsedTimeToString;
|
||||
var lastUpdateString = vAPI.i18n('3pLastUpdate');
|
||||
var listGroupTemplate = uDom('#templates .groupEntry'),
|
||||
listEntryTemplate = uDom('#templates .listEntry'),
|
||||
listStatsTemplate = vAPI.i18n('3pListsOfBlockedHostsPerListStats'),
|
||||
renderElapsedTimeToString = vAPI.i18n.renderElapsedTimeToString,
|
||||
lastUpdateString = vAPI.i18n('3pLastUpdate');
|
||||
|
||||
// Assemble a pretty blacklist name if possible
|
||||
// Assemble a pretty list name if possible
|
||||
var listNameFromListKey = function(listKey) {
|
||||
if ( listKey === listDetails.userFiltersPath ) {
|
||||
return userListName;
|
||||
}
|
||||
var list = listDetails.current[listKey] || listDetails.available[listKey];
|
||||
var listTitle = list ? list.title : '';
|
||||
if ( listTitle === '' ) {
|
||||
|
@ -91,73 +78,68 @@ var renderFilterLists = function() {
|
|||
return listTitle;
|
||||
};
|
||||
|
||||
var liFromListEntry = function(listKey) {
|
||||
var liFromListEntry = function(listKey, li) {
|
||||
var entry = listDetails.available[listKey];
|
||||
var li = listEntryTemplate.clone();
|
||||
|
||||
li = li ? li : listEntryTemplate.clone().nodeAt(0);
|
||||
li.setAttribute('data-listkey', listKey);
|
||||
var elem = li.querySelector('input[type="checkbox"]');
|
||||
if ( entry.off !== true ) {
|
||||
li.descendants('input').attr('checked', '');
|
||||
elem.setAttribute('checked', '');
|
||||
} else {
|
||||
elem.removeAttribute('checked');
|
||||
}
|
||||
|
||||
var elem = li.descendants('a:nth-of-type(1)');
|
||||
elem.attr('href', 'asset-viewer.html?url=' + encodeURI(listKey));
|
||||
elem.attr('type', 'text/html');
|
||||
elem.attr('data-listkey', listKey);
|
||||
elem.text(listNameFromListKey(listKey) + '\u200E');
|
||||
|
||||
elem = li.querySelector('a:nth-of-type(1)');
|
||||
elem.setAttribute('href', 'asset-viewer.html?url=' + encodeURI(listKey));
|
||||
elem.setAttribute('type', 'text/html');
|
||||
elem.textContent = listNameFromListKey(listKey) + '\u200E';
|
||||
elem = li.querySelector('a:nth-of-type(2)');
|
||||
if ( entry.instructionURL ) {
|
||||
elem = li.descendants('a:nth-of-type(2)');
|
||||
elem.attr('href', entry.instructionURL);
|
||||
elem.css('display', '');
|
||||
elem.setAttribute('href', entry.instructionURL);
|
||||
elem.style.setProperty('display', '');
|
||||
} else {
|
||||
elem.style.setProperty('display', 'none');
|
||||
}
|
||||
|
||||
elem = li.querySelector('a:nth-of-type(3)');
|
||||
if ( entry.supportName ) {
|
||||
elem = li.descendants('a:nth-of-type(3)');
|
||||
elem.attr('href', entry.supportURL);
|
||||
elem.text('(' + entry.supportName + ')');
|
||||
elem.css('display', '');
|
||||
elem.setAttribute('href', entry.supportURL);
|
||||
elem.textContent = '(' + entry.supportName + ')';
|
||||
elem.style.setProperty('display', '');
|
||||
} else {
|
||||
elem.style.setProperty('display', 'none');
|
||||
}
|
||||
|
||||
elem = li.descendants('span.counts');
|
||||
elem = li.querySelector('span.counts');
|
||||
var text = listStatsTemplate
|
||||
.replace('{{used}}', renderNumber(!entry.off && !isNaN(+entry.entryUsedCount) ? entry.entryUsedCount : 0))
|
||||
.replace('{{total}}', !isNaN(+entry.entryCount) ? renderNumber(entry.entryCount) : '?');
|
||||
elem.text(text);
|
||||
|
||||
// https://github.com/gorhill/uBlock/issues/78
|
||||
// Badge for non-secure connection
|
||||
var remoteURL = listKey;
|
||||
if ( remoteURL.lastIndexOf('http:', 0) !== 0 ) {
|
||||
remoteURL = entry.homeURL || '';
|
||||
}
|
||||
if ( remoteURL.lastIndexOf('http:', 0) === 0 ) {
|
||||
li.descendants('span.status.unsecure').css('display', '');
|
||||
}
|
||||
elem.textContent = text;
|
||||
|
||||
// https://github.com/chrisaljoudi/uBlock/issues/104
|
||||
var asset = listDetails.cache[listKey] || {};
|
||||
|
||||
// https://github.com/gorhill/uBlock/issues/78
|
||||
// Badge for non-secure connection
|
||||
var remoteURL = asset.remoteURL;
|
||||
li.classList.toggle(
|
||||
'unsecure',
|
||||
typeof remoteURL === 'string' && remoteURL.lastIndexOf('http:', 0) === 0
|
||||
);
|
||||
// Badge for update status
|
||||
if ( entry.off !== true ) {
|
||||
if ( asset.repoObsolete ) {
|
||||
li.descendants('span.status.new').css('display', '');
|
||||
needUpdate = true;
|
||||
} else if ( asset.cacheObsolete ) {
|
||||
li.descendants('span.status.obsolete').css('display', '');
|
||||
needUpdate = true;
|
||||
} else if ( entry.external && !asset.cached ) {
|
||||
li.descendants('span.status.obsolete').css('display', '');
|
||||
needUpdate = true;
|
||||
}
|
||||
}
|
||||
|
||||
// In cache
|
||||
li.classList.toggle(
|
||||
'obsolete',
|
||||
entry.off !== true && asset.obsolete === true
|
||||
);
|
||||
// Badge for cache status
|
||||
li.classList.toggle(
|
||||
'cached',
|
||||
asset.cached === true && asset.writeTime > 0
|
||||
);
|
||||
if ( asset.cached ) {
|
||||
elem = li.descendants('span.status.purge');
|
||||
elem.css('display', '');
|
||||
elem.attr('title', lastUpdateString.replace('{{ago}}', renderElapsedTimeToString(asset.lastModified)));
|
||||
hasCachedContent = true;
|
||||
li.querySelector('.status.purge').setAttribute(
|
||||
'title',
|
||||
lastUpdateString.replace('{{ago}}', renderElapsedTimeToString(asset.writeTime))
|
||||
);
|
||||
}
|
||||
li.classList.remove('discard');
|
||||
return li;
|
||||
};
|
||||
|
||||
|
@ -176,27 +158,31 @@ var renderFilterLists = function() {
|
|||
};
|
||||
|
||||
var liFromListGroup = function(groupKey, listKeys) {
|
||||
var liGroup = listGroupTemplate.clone();
|
||||
var groupName = vAPI.i18n('3pGroup' + groupKey.charAt(0).toUpperCase() + groupKey.slice(1));
|
||||
if ( groupName !== '' ) {
|
||||
liGroup.descendants('span.geName').text(groupName);
|
||||
liGroup.descendants('span.geCount').text(listEntryCountFromGroup(listKeys));
|
||||
var liGroup = document.querySelector('#lists > .groupEntry[data-groupkey="' + groupKey + '"]');
|
||||
if ( liGroup === null ) {
|
||||
liGroup = listGroupTemplate.clone().nodeAt(0);
|
||||
var groupName = vAPI.i18n('3pGroup' + groupKey.charAt(0).toUpperCase() + groupKey.slice(1));
|
||||
if ( groupName !== '' ) {
|
||||
liGroup.querySelector('.geName').textContent = groupName;
|
||||
}
|
||||
}
|
||||
var ulGroup = liGroup.descendants('ul');
|
||||
if ( !listKeys ) {
|
||||
return liGroup;
|
||||
if ( liGroup.querySelector('.geName:empty') === null ) {
|
||||
liGroup.querySelector('.geCount').textContent = listEntryCountFromGroup(listKeys);
|
||||
}
|
||||
var ulGroup = liGroup.querySelector('.listEntries');
|
||||
if ( !listKeys ) { return liGroup; }
|
||||
listKeys.sort(function(a, b) {
|
||||
return (listDetails.available[a].title || '').localeCompare(listDetails.available[b].title || '');
|
||||
});
|
||||
for ( var i = 0; i < listKeys.length; i++ ) {
|
||||
ulGroup.append(liFromListEntry(listKeys[i]));
|
||||
var liEntry = liFromListEntry(listKeys[i], ulGroup.children[i]);
|
||||
if ( liEntry.parentElement === null ) {
|
||||
ulGroup.appendChild(liEntry);
|
||||
}
|
||||
}
|
||||
return liGroup;
|
||||
};
|
||||
|
||||
// https://www.youtube.com/watch?v=unCVi4hYRlY#t=30m18s
|
||||
|
||||
var groupsFromLists = function(lists) {
|
||||
var groups = {};
|
||||
var listKeys = Object.keys(lists);
|
||||
|
@ -219,14 +205,16 @@ var renderFilterLists = function() {
|
|||
listDetails = details;
|
||||
parseCosmeticFilters = details.parseCosmeticFilters;
|
||||
ignoreGenericCosmeticFilters = details.ignoreGenericCosmeticFilters;
|
||||
needUpdate = false;
|
||||
hasCachedContent = false;
|
||||
|
||||
// Incremental rendering: this will allow us to easily discard unused
|
||||
// DOM list entries.
|
||||
uDom('#lists .listEntries .listEntry').addClass('discard');
|
||||
|
||||
// Visually split the filter lists in purpose-based groups
|
||||
var ulLists = uDom('#lists').empty(), liGroup;
|
||||
var groups = groupsFromLists(details.available);
|
||||
var groupKey, i;
|
||||
var groupKeys = [
|
||||
var ulLists = document.querySelector('#lists'),
|
||||
groups = groupsFromLists(details.available),
|
||||
liGroup, i, groupKey,
|
||||
groupKeys = [
|
||||
'default',
|
||||
'ads',
|
||||
'privacy',
|
||||
|
@ -239,31 +227,44 @@ var renderFilterLists = function() {
|
|||
for ( i = 0; i < groupKeys.length; i++ ) {
|
||||
groupKey = groupKeys[i];
|
||||
liGroup = liFromListGroup(groupKey, groups[groupKey]);
|
||||
liGroup.toggleClass(
|
||||
liGroup.setAttribute('data-groupkey', groupKey);
|
||||
liGroup.classList.toggle(
|
||||
'collapsed',
|
||||
vAPI.localStorage.getItem('collapseGroup' + (i + 1)) === 'y'
|
||||
);
|
||||
ulLists.append(liGroup);
|
||||
if ( liGroup.parentElement === null ) {
|
||||
ulLists.appendChild(liGroup);
|
||||
}
|
||||
delete groups[groupKey];
|
||||
}
|
||||
// For all groups not covered above (if any left)
|
||||
groupKeys = Object.keys(groups);
|
||||
for ( i = 0; i < groupKeys.length; i++ ) {
|
||||
groupKey = groupKeys[i];
|
||||
ulLists.append(liFromListGroup(groupKey, groups[groupKey]));
|
||||
ulLists.appendChild(liFromListGroup(groupKey, groups[groupKey]));
|
||||
}
|
||||
|
||||
uDom('#lists .listEntries .listEntry.discard').remove();
|
||||
uDom('#buttonUpdate').toggleClass('disabled', document.querySelector('#lists .listEntry.obsolete') === null);
|
||||
uDom('#autoUpdate').prop('checked', listDetails.autoUpdate === true);
|
||||
uDom('#parseCosmeticFilters').prop('checked', listDetails.parseCosmeticFilters === true);
|
||||
uDom('#ignoreGenericCosmeticFilters').prop('checked', listDetails.ignoreGenericCosmeticFilters === true);
|
||||
uDom('#listsOfBlockedHostsPrompt').text(
|
||||
vAPI.i18n('3pListsOfBlockedHostsPrompt')
|
||||
.replace('{{netFilterCount}}', renderNumber(details.netFilterCount))
|
||||
.replace('{{cosmeticFilterCount}}', renderNumber(details.cosmeticFilterCount))
|
||||
);
|
||||
uDom('#autoUpdate').prop('checked', listDetails.autoUpdate === true);
|
||||
uDom('#parseCosmeticFilters').prop('checked', listDetails.parseCosmeticFilters === true);
|
||||
uDom('#ignoreGenericCosmeticFilters').prop('checked', listDetails.ignoreGenericCosmeticFilters === true);
|
||||
|
||||
// Compute a hash of the lists currently enabled in memory.
|
||||
var selectedListsBefore = [];
|
||||
for ( var key in listDetails.current ) {
|
||||
if ( listDetails.current[key].off !== true ) {
|
||||
selectedListsBefore.push(key);
|
||||
}
|
||||
}
|
||||
selectedListsHashBefore = selectedListsBefore.sort().join();
|
||||
|
||||
renderWidgets();
|
||||
renderBusyOverlay(details.manualUpdate, details.manualUpdateProgress);
|
||||
};
|
||||
|
||||
messaging.send('dashboard', { what: 'getLists' }, onListsReceived);
|
||||
|
@ -271,33 +272,22 @@ var renderFilterLists = function() {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
// Progress must be normalized to [0, 1], or can be undefined.
|
||||
|
||||
var renderBusyOverlay = function(state, progress) {
|
||||
progress = progress || {};
|
||||
var showProgress = typeof progress.value === 'number';
|
||||
if ( showProgress ) {
|
||||
uDom('#busyOverlay > div:nth-of-type(2) > div:first-child').css(
|
||||
'width',
|
||||
(progress.value * 100).toFixed(1) + '%'
|
||||
);
|
||||
var text = progress.text || '';
|
||||
if ( text !== '' ) {
|
||||
uDom('#busyOverlay > div:nth-of-type(2) > div:last-child').text(text);
|
||||
}
|
||||
}
|
||||
uDom('#busyOverlay > div:nth-of-type(2)').css('display', showProgress ? '' : 'none');
|
||||
uDom('body').toggleClass('busy', !!state);
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// This is to give a visual hint that the selection of blacklists has changed.
|
||||
|
||||
var renderWidgets = function() {
|
||||
uDom('#buttonApply').toggleClass('disabled', !listsSelectionChanged());
|
||||
uDom('#buttonUpdate').toggleClass('disabled', !listsContentChanged());
|
||||
uDom('#buttonPurgeAll').toggleClass('disabled', !hasCachedContent);
|
||||
uDom('#buttonPurgeAll').toggleClass('disabled', document.querySelector('#lists .listEntry.cached') === null);
|
||||
uDom('#buttonUpdate').toggleClass('disabled', document.querySelector('#lists .listEntry.obsolete') === null);
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var updateAssetStatus = function(details) {
|
||||
var li = uDom('#lists .listEntry[data-listkey="' + details.key + '"]');
|
||||
li.toggleClass('obsolete', !details.cached);
|
||||
li.toggleClass('cached', details.cached);
|
||||
li.removeClass('updating');
|
||||
renderWidgets();
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
@ -307,98 +297,49 @@ var renderWidgets = function() {
|
|||
var listsSelectionChanged = function() {
|
||||
if (
|
||||
listDetails.parseCosmeticFilters !== parseCosmeticFilters ||
|
||||
listDetails.parseCosmeticFilters && listDetails.ignoreGenericCosmeticFilters !== ignoreGenericCosmeticFilters
|
||||
listDetails.parseCosmeticFilters &&
|
||||
listDetails.ignoreGenericCosmeticFilters !== ignoreGenericCosmeticFilters
|
||||
) {
|
||||
return true;
|
||||
}
|
||||
|
||||
if ( cacheWasPurged ) {
|
||||
return true;
|
||||
var selectedListsAfter = [],
|
||||
listEntries = uDom('#lists .listEntry[data-listkey] > input[type="checkbox"]:checked');
|
||||
for ( var i = 0, n = listEntries.length; i < n; i++ ) {
|
||||
selectedListsAfter.push(listEntries.at(i).ancestors('.listEntry[data-listkey]').attr('data-listkey'));
|
||||
}
|
||||
|
||||
var availableLists = listDetails.available;
|
||||
var currentLists = listDetails.current;
|
||||
var location, availableOff, currentOff;
|
||||
|
||||
// This check existing entries
|
||||
for ( location in availableLists ) {
|
||||
if ( availableLists.hasOwnProperty(location) === false ) {
|
||||
continue;
|
||||
}
|
||||
availableOff = availableLists[location].off === true;
|
||||
currentOff = currentLists[location] === undefined || currentLists[location].off === true;
|
||||
if ( availableOff !== currentOff ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
// This check removed entries
|
||||
for ( location in currentLists ) {
|
||||
if ( currentLists.hasOwnProperty(location) === false ) {
|
||||
continue;
|
||||
}
|
||||
currentOff = currentLists[location].off === true;
|
||||
availableOff = availableLists[location] === undefined || availableLists[location].off === true;
|
||||
if ( availableOff !== currentOff ) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// Return whether content need update.
|
||||
|
||||
var listsContentChanged = function() {
|
||||
return needUpdate;
|
||||
return selectedListsHashBefore !== selectedListsAfter.sort().join();
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var onListCheckboxChanged = function() {
|
||||
var href = uDom(this).parent().descendants('a').first().attr('data-listkey');
|
||||
if ( typeof href !== 'string' ) {
|
||||
return;
|
||||
}
|
||||
if ( listDetails.available[href] === undefined ) {
|
||||
return;
|
||||
}
|
||||
listDetails.available[href].off = !this.checked;
|
||||
renderWidgets();
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var onPurgeClicked = function() {
|
||||
var button = uDom(this);
|
||||
var li = button.parent();
|
||||
var href = li.descendants('a').first().attr('data-listkey');
|
||||
if ( !href ) {
|
||||
return;
|
||||
}
|
||||
var button = uDom(this),
|
||||
liEntry = button.ancestors('[data-listkey]'),
|
||||
listKey = liEntry.attr('data-listkey');
|
||||
if ( !listKey ) { return; }
|
||||
|
||||
messaging.send('dashboard', { what: 'purgeCache', path: href });
|
||||
button.remove();
|
||||
messaging.send('dashboard', { what: 'purgeCache', assetKey: listKey });
|
||||
|
||||
// If the cached version is purged, the installed version must be assumed
|
||||
// to be obsolete.
|
||||
// https://github.com/gorhill/uBlock/issues/1733
|
||||
// An external filter list must not be marked as obsolete, they will always
|
||||
// be fetched anyways if there is no cached copy.
|
||||
var entry = listDetails.current && listDetails.current[href];
|
||||
if ( entry && entry.off !== true && /^[a-z]+:\/\//.test(href) === false ) {
|
||||
if ( typeof entry.homeURL !== 'string' || entry.homeURL === '' ) {
|
||||
li.descendants('span.status.new').css('display', '');
|
||||
} else {
|
||||
li.descendants('span.status.obsolete').css('display', '');
|
||||
}
|
||||
needUpdate = true;
|
||||
var entry = listDetails.current && listDetails.current[listKey];
|
||||
if ( entry && entry.off !== true ) {
|
||||
liEntry.addClass('obsolete');
|
||||
uDom('#buttonUpdate').removeClass('disabled');
|
||||
}
|
||||
liEntry.removeClass('cached');
|
||||
|
||||
if ( li.descendants('input').first().prop('checked') ) {
|
||||
cacheWasPurged = true;
|
||||
if ( liEntry.descendants('input').first().prop('checked') ) {
|
||||
renderWidgets();
|
||||
}
|
||||
};
|
||||
|
@ -419,22 +360,21 @@ var selectFilterLists = function(callback) {
|
|||
});
|
||||
|
||||
// Filter lists
|
||||
var switches = [];
|
||||
var lis = uDom('#lists .listEntry'), li;
|
||||
var i = lis.length;
|
||||
var listKeys = [],
|
||||
liEntries = uDom('#lists .listEntry'), liEntry,
|
||||
i = liEntries.length;
|
||||
while ( i-- ) {
|
||||
li = lis.at(i);
|
||||
switches.push({
|
||||
location: li.descendants('a').attr('data-listkey'),
|
||||
off: li.descendants('input').prop('checked') === false
|
||||
});
|
||||
liEntry = liEntries.at(i);
|
||||
if ( liEntry.descendants('input').first().prop('checked') ) {
|
||||
listKeys.push(liEntry.attr('data-listkey'));
|
||||
}
|
||||
}
|
||||
|
||||
messaging.send(
|
||||
'dashboard',
|
||||
{
|
||||
what: 'selectFilterLists',
|
||||
switches: switches
|
||||
keys: listKeys
|
||||
},
|
||||
callback
|
||||
);
|
||||
|
@ -444,49 +384,34 @@ var selectFilterLists = function(callback) {
|
|||
|
||||
var buttonApplyHandler = function() {
|
||||
uDom('#buttonApply').removeClass('enabled');
|
||||
|
||||
renderBusyOverlay(true);
|
||||
|
||||
var onSelectionDone = function() {
|
||||
messaging.send('dashboard', { what: 'reloadAllFilters' });
|
||||
};
|
||||
|
||||
selectFilterLists(onSelectionDone);
|
||||
|
||||
cacheWasPurged = false;
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var buttonUpdateHandler = function() {
|
||||
uDom('#buttonUpdate').removeClass('enabled');
|
||||
|
||||
if ( needUpdate ) {
|
||||
renderBusyOverlay(true);
|
||||
|
||||
var onSelectionDone = function() {
|
||||
messaging.send('dashboard', { what: 'forceUpdateAssets' });
|
||||
};
|
||||
|
||||
selectFilterLists(onSelectionDone);
|
||||
|
||||
cacheWasPurged = false;
|
||||
}
|
||||
var onSelectionDone = function() {
|
||||
uDom('#lists .listEntry.obsolete').addClass('updating');
|
||||
messaging.send('dashboard', { what: 'forceUpdateAssets' });
|
||||
};
|
||||
selectFilterLists(onSelectionDone);
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var buttonPurgeAllHandler = function() {
|
||||
var buttonPurgeAllHandler = function(ev) {
|
||||
uDom('#buttonPurgeAll').removeClass('enabled');
|
||||
|
||||
renderBusyOverlay(true);
|
||||
|
||||
var onCompleted = function() {
|
||||
cacheWasPurged = true;
|
||||
renderFilterLists();
|
||||
};
|
||||
|
||||
messaging.send('dashboard', { what: 'purgeAllCaches' }, onCompleted);
|
||||
messaging.send(
|
||||
'dashboard',
|
||||
{
|
||||
what: 'purgeAllCaches',
|
||||
hard: ev.ctrlKey && ev.shiftKey
|
||||
},
|
||||
renderFilterLists
|
||||
);
|
||||
};
|
||||
|
||||
/******************************************************************************/
|
||||
|
@ -562,7 +487,7 @@ var groupEntryClickHandler = function() {
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
var getCloudData = function() {
|
||||
var toCloudData = function() {
|
||||
var bin = {
|
||||
parseCosmeticFilters: uDom.nodeFromId('parseCosmeticFilters').checked,
|
||||
ignoreGenericCosmeticFilters: uDom.nodeFromId('ignoreGenericCosmeticFilters').checked,
|
||||
|
@ -570,24 +495,22 @@ var getCloudData = function() {
|
|||
externalLists: externalLists
|
||||
};
|
||||
|
||||
var lis = uDom('#lists .listEntry'), li;
|
||||
var i = lis.length;
|
||||
var liEntries = uDom('#lists .listEntry'), liEntry;
|
||||
var i = liEntries.length;
|
||||
while ( i-- ) {
|
||||
li = lis.at(i);
|
||||
if ( li.descendants('input').prop('checked') ) {
|
||||
bin.selectedLists.push(li.descendants('a').attr('data-listkey'));
|
||||
liEntry = liEntries.at(i);
|
||||
if ( liEntry.descendants('input').prop('checked') ) {
|
||||
bin.selectedLists.push(liEntry.attr('data-listkey'));
|
||||
}
|
||||
}
|
||||
|
||||
return bin;
|
||||
};
|
||||
|
||||
var setCloudData = function(data, append) {
|
||||
if ( typeof data !== 'object' || data === null ) {
|
||||
return;
|
||||
}
|
||||
var fromCloudData = function(data, append) {
|
||||
if ( typeof data !== 'object' || data === null ) { return; }
|
||||
|
||||
var elem, checked;
|
||||
var elem, checked, i, n;
|
||||
|
||||
elem = uDom.nodeFromId('parseCosmeticFilters');
|
||||
checked = data.parseCosmeticFilters === true || append && elem.checked;
|
||||
|
@ -597,30 +520,34 @@ var setCloudData = function(data, append) {
|
|||
checked = data.ignoreGenericCosmeticFilters === true || append && elem.checked;
|
||||
elem.checked = listDetails.ignoreGenericCosmeticFilters = checked;
|
||||
|
||||
var lis = uDom('#lists .listEntry'), li, listKey;
|
||||
var i = lis.length;
|
||||
while ( i-- ) {
|
||||
li = lis.at(i);
|
||||
elem = li.descendants('input');
|
||||
listKey = li.descendants('a').attr('data-listkey');
|
||||
checked = data.selectedLists.indexOf(listKey) !== -1 ||
|
||||
append && elem.prop('checked');
|
||||
elem.prop('checked', checked);
|
||||
listDetails.available[listKey].off = !checked;
|
||||
var listKey;
|
||||
for ( i = 0, n = data.selectedLists.length; i < n; i++ ) {
|
||||
listKey = data.selectedLists[i];
|
||||
if ( listDetails.aliases[listKey] ) {
|
||||
data.selectedLists[i] = listDetails.aliases[listKey];
|
||||
}
|
||||
}
|
||||
var selectedSet = new Set(data.selectedLists),
|
||||
listEntries = uDom('#lists .listEntry'),
|
||||
listEntry, input;
|
||||
for ( i = 0, n = listEntries.length; i < n; i++ ) {
|
||||
listEntry = listEntries.at(i);
|
||||
listKey = listEntry.attr('data-listkey');
|
||||
input = listEntry.descendants('input').first();
|
||||
if ( append && input.prop('checked') ) { continue; }
|
||||
input.prop('checked', selectedSet.has(listKey) );
|
||||
}
|
||||
|
||||
elem = uDom.nodeFromId('externalLists');
|
||||
if ( !append ) {
|
||||
elem.value = '';
|
||||
}
|
||||
if ( !append ) { elem.value = ''; }
|
||||
elem.value += data.externalLists || '';
|
||||
|
||||
renderWidgets();
|
||||
externalListsChangeHandler();
|
||||
};
|
||||
|
||||
self.cloud.onPush = getCloudData;
|
||||
self.cloud.onPull = setCloudData;
|
||||
self.cloud.onPush = toCloudData;
|
||||
self.cloud.onPull = fromCloudData;
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
|
2258
src/js/assets.js
2258
src/js/assets.js
File diff suppressed because it is too large
Load diff
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uBlock Origin - a browser extension to block requests.
|
||||
Copyright (C) 2014-2016 Raymond Hill
|
||||
Copyright (C) 2014-2017 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
|
||||
|
@ -19,20 +19,16 @@
|
|||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
/* exported µBlock */
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var µBlock = (function() {
|
||||
var µBlock = (function() { // jshint ignore:line
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var oneSecond = 1000;
|
||||
var oneMinute = 60 * oneSecond;
|
||||
var oneHour = 60 * oneMinute;
|
||||
// var oneDay = 24 * oneHour;
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
@ -71,8 +67,12 @@ return {
|
|||
},
|
||||
|
||||
hiddenSettingsDefault: {
|
||||
assetFetchTimeout: 30,
|
||||
autoUpdateAssetFetchPeriod: 120,
|
||||
autoUpdatePeriod: 7,
|
||||
ignoreRedirectFilters: false,
|
||||
ignoreScriptInjectFilters: false,
|
||||
manualUpdateAssetFetchPeriod: 2000,
|
||||
popupFontSize: 'unset',
|
||||
suspendTabsUntilReady: false
|
||||
},
|
||||
|
@ -119,92 +119,15 @@ return {
|
|||
lastBackupTime: 0
|
||||
},
|
||||
|
||||
// EasyList, EasyPrivacy and many others have an 4-day update period,
|
||||
// as per list headers.
|
||||
updateAssetsEvery: 97 * oneHour,
|
||||
projectServerRoot: 'https://raw.githubusercontent.com/gorhill/uBlock/master/',
|
||||
userFiltersPath: 'assets/user/filters.txt',
|
||||
pslPath: 'assets/thirdparties/publicsuffix.org/list/effective_tld_names.dat',
|
||||
// Allows to fully customize uBO's assets, typically set through admin
|
||||
// settings. The content of 'assets.json' will also tell which filter
|
||||
// lists to enable by default when uBO is first installed.
|
||||
assetsBootstrapLocation: 'assets/assets.json',
|
||||
|
||||
// permanent lists
|
||||
permanentLists: {
|
||||
// User
|
||||
'assets/user/filters.txt': {
|
||||
group: 'default'
|
||||
},
|
||||
// uBlock
|
||||
'assets/ublock/filters.txt': {
|
||||
title: 'uBlock filters',
|
||||
group: 'default'
|
||||
},
|
||||
'assets/ublock/privacy.txt': {
|
||||
title: 'uBlock filters – Privacy',
|
||||
group: 'default'
|
||||
},
|
||||
'assets/ublock/unbreak.txt': {
|
||||
title: 'uBlock filters – Unbreak',
|
||||
group: 'default'
|
||||
},
|
||||
'assets/ublock/badware.txt': {
|
||||
title: 'uBlock filters – Badware risks',
|
||||
group: 'default',
|
||||
supportURL: 'https://github.com/gorhill/uBlock/wiki/Badware-risks',
|
||||
instructionURL: 'https://github.com/gorhill/uBlock/wiki/Badware-risks'
|
||||
},
|
||||
'assets/ublock/experimental.txt': {
|
||||
title: 'uBlock filters – Experimental',
|
||||
group: 'default',
|
||||
off: true,
|
||||
supportURL: 'https://github.com/gorhill/uBlock/wiki/Experimental-filters',
|
||||
instructionURL: 'https://github.com/gorhill/uBlock/wiki/Experimental-filters'
|
||||
}
|
||||
},
|
||||
userFiltersPath: 'user-filters',
|
||||
pslAssetKey: 'public_suffix_list.dat',
|
||||
|
||||
// current lists
|
||||
remoteBlacklists: {},
|
||||
oldListToNewListMap: {
|
||||
"assets/thirdparties/adblock.gardar.net/is.abp.txt": "http://adblock.gardar.net/is.abp.txt",
|
||||
"assets/thirdparties/adblock.schack.dk/block.txt": "https://adblock.dk/block.csv",
|
||||
"https://adblock.schack.dk/block.txt": "https://adblock.dk/block.csv",
|
||||
"assets/thirdparties/dl.dropboxusercontent.com/u/1289327/abpxfiles/filtri.txt": "https://dl.dropboxusercontent.com/u/1289327/abpxfiles/filtri.txt",
|
||||
"assets/thirdparties/easylist-downloads.adblockplus.org/advblock.txt": "https://easylist-downloads.adblockplus.org/advblock.txt",
|
||||
"assets/thirdparties/easylist-downloads.adblockplus.org/bitblock.txt": "https://easylist-downloads.adblockplus.org/bitblock.txt",
|
||||
"assets/thirdparties/easylist-downloads.adblockplus.org/easylist_noelemhide.txt": "https://easylist-downloads.adblockplus.org/easylist_noelemhide.txt",
|
||||
"assets/thirdparties/easylist-downloads.adblockplus.org/easylistchina.txt": "https://easylist-downloads.adblockplus.org/easylistchina.txt",
|
||||
"assets/thirdparties/easylist-downloads.adblockplus.org/easylistdutch.txt": "https://easylist-downloads.adblockplus.org/easylistdutch.txt",
|
||||
"assets/thirdparties/easylist-downloads.adblockplus.org/easylistgermany.txt": "https://easylist-downloads.adblockplus.org/easylistgermany.txt",
|
||||
"assets/thirdparties/easylist-downloads.adblockplus.org/easylistitaly.txt": "https://easylist-downloads.adblockplus.org/easylistitaly.txt",
|
||||
"assets/thirdparties/easylist-downloads.adblockplus.org/fanboy-annoyance.txt": "https://easylist-downloads.adblockplus.org/fanboy-annoyance.txt",
|
||||
"assets/thirdparties/easylist-downloads.adblockplus.org/fanboy-social.txt": "https://easylist-downloads.adblockplus.org/fanboy-social.txt",
|
||||
"assets/thirdparties/easylist-downloads.adblockplus.org/liste_fr.txt": "https://easylist-downloads.adblockplus.org/liste_fr.txt",
|
||||
"assets/thirdparties/gitorious.org/adblock-latvian/adblock-latvian/raw/master_lists/latvian-list.txt": "https://notabug.org/latvian-list/adblock-latvian/raw/master/lists/latvian-list.txt",
|
||||
"assets/thirdparties/home.fredfiber.no/langsholt/adblock.txt": "http://home.fredfiber.no/langsholt/adblock.txt",
|
||||
"assets/thirdparties/hosts-file.net/ad-servers": "http://hosts-file.net/.%5Cad_servers.txt",
|
||||
"assets/thirdparties/http://www.certyficate.it/adblock/adblock.txt": "https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-adblock-filters/adblock.txt",
|
||||
"assets/thirdparties/liste-ar-adblock.googlecode.com/hg/Liste_AR.txt": "https://liste-ar-adblock.googlecode.com/hg/Liste_AR.txt",
|
||||
"assets/thirdparties/margevicius.lt/easylistlithuania.txt": "http://margevicius.lt/easylistlithuania.txt",
|
||||
"assets/thirdparties/mirror1.malwaredomains.com/files/immortal_domains.txt": "http://malwaredomains.lehigh.edu/files/immortal_domains.txt",
|
||||
"assets/thirdparties/raw.githubusercontent.com/AdBlockPlusIsrael/EasyListHebrew/master/EasyListHebrew.txt": "https://raw.githubusercontent.com/AdBlockPlusIsrael/EasyListHebrew/master/EasyListHebrew.txt",
|
||||
"assets/thirdparties/raw.githubusercontent.com/cjx82630/cjxlist/master/cjxlist.txt": "https://raw.githubusercontent.com/cjx82630/cjxlist/master/cjxlist.txt",
|
||||
"assets/thirdparties/raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt": "https://raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt",
|
||||
"assets/thirdparties/raw.githubusercontent.com/szpeter80/hufilter/master/hufilter.txt": "https://raw.githubusercontent.com/szpeter80/hufilter/master/hufilter.txt",
|
||||
"assets/thirdparties/raw.githubusercontent.com/tomasko126/easylistczechandslovak/master/filters.txt": "https://raw.githubusercontent.com/tomasko126/easylistczechandslovak/master/filters.txt",
|
||||
"assets/thirdparties/someonewhocares.org/hosts/hosts": "http://someonewhocares.org/hosts/hosts",
|
||||
"assets/thirdparties/spam404bl.com/spam404scamlist.txt": "https://spam404bl.com/spam404scamlist.txt",
|
||||
"assets/thirdparties/stanev.org/abp/adblock_bg.txt": "http://stanev.org/abp/adblock_bg.txt",
|
||||
"assets/thirdparties/winhelp2002.mvps.org/hosts.txt": "http://winhelp2002.mvps.org/hosts.txt",
|
||||
"assets/thirdparties/www.fanboy.co.nz/enhancedstats.txt": "https://www.fanboy.co.nz/enhancedstats.txt",
|
||||
"assets/thirdparties/www.fanboy.co.nz/fanboy-antifacebook.txt": "https://www.fanboy.co.nz/fanboy-antifacebook.txt",
|
||||
"assets/thirdparties/www.fanboy.co.nz/fanboy-korean.txt": "https://www.fanboy.co.nz/fanboy-korean.txt",
|
||||
"assets/thirdparties/www.fanboy.co.nz/fanboy-swedish.txt": "https://www.fanboy.co.nz/fanboy-swedish.txt",
|
||||
"assets/thirdparties/www.fanboy.co.nz/fanboy-ultimate.txt": "https://www.fanboy.co.nz/r/fanboy-ultimate.txt",
|
||||
"assets/thirdparties/www.fanboy.co.nz/fanboy-vietnam.txt": "https://www.fanboy.co.nz/fanboy-vietnam.txt",
|
||||
"assets/thirdparties/www.void.gr/kargig/void-gr-filters.txt": "https://www.void.gr/kargig/void-gr-filters.txt",
|
||||
"assets/thirdparties/www.zoso.ro/pages/rolist.txt": "",
|
||||
"https://iadb.azurewebsites.net/Finland_adb.txt": "http://adb.juvander.net/Finland_adb.txt",
|
||||
"https://www.certyficate.it/adblock/adblock.txt": "https://raw.githubusercontent.com/MajkiIT/polish-ads-filter/master/polish-adblock-filters/adblock.txt",
|
||||
"https://raw.githubusercontent.com/heradhis/indonesianadblockrules/master/subscriptions/abpindo.txt": "https://raw.githubusercontent.com/ABPindo/indonesianadblockrules/master/subscriptions/abpindo.txt"
|
||||
},
|
||||
availableFilterLists: {},
|
||||
|
||||
selfieAfter: 23 * oneMinute,
|
||||
|
||||
|
|
|
@ -19,15 +19,13 @@
|
|||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
/* global µBlock */
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
/******************************************************************************/
|
||||
|
||||
µBlock.logger = (function() {
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
/******************************************************************************/
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uBlock Origin - a browser extension to block requests.
|
||||
Copyright (C) 2014-2016 Raymond Hill
|
||||
Copyright (C) 2014-2017 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
|
||||
|
@ -77,7 +77,7 @@ var onMessage = function(request, sender, callback) {
|
|||
return;
|
||||
|
||||
case 'reloadAllFilters':
|
||||
µb.reloadAllFilters(callback);
|
||||
µb.loadFilterLists();
|
||||
return;
|
||||
|
||||
case 'scriptlet':
|
||||
|
@ -121,7 +121,8 @@ var onMessage = function(request, sender, callback) {
|
|||
break;
|
||||
|
||||
case 'forceUpdateAssets':
|
||||
µb.assetUpdater.force();
|
||||
µb.scheduleAssetUpdater(0);
|
||||
µb.assets.updateStart({ delay: µb.hiddenSettings.manualUpdateAssetFetchPeriod || 2000 });
|
||||
break;
|
||||
|
||||
case 'getAppData':
|
||||
|
@ -160,7 +161,7 @@ var onMessage = function(request, sender, callback) {
|
|||
break;
|
||||
|
||||
case 'selectFilterLists':
|
||||
µb.selectFilterLists(request.switches);
|
||||
µb.saveSelectedFilterLists(request.keys, request.append);
|
||||
break;
|
||||
|
||||
case 'setWhitelist':
|
||||
|
@ -753,7 +754,7 @@ var backupUserData = function(callback) {
|
|||
timeStamp: Date.now(),
|
||||
version: vAPI.app.version,
|
||||
userSettings: µb.userSettings,
|
||||
filterLists: {},
|
||||
selectedFilterLists: [],
|
||||
hiddenSettingsString: µb.stringFromHiddenSettings(),
|
||||
netWhitelist: µb.stringFromWhitelist(µb.netWhitelist),
|
||||
dynamicFilteringString: µb.permanentFirewall.toString(),
|
||||
|
@ -762,8 +763,17 @@ var backupUserData = function(callback) {
|
|||
userFilters: ''
|
||||
};
|
||||
|
||||
var onSelectedListsReady = function(filterLists) {
|
||||
userData.filterLists = filterLists;
|
||||
var onSelectedListsReady = function(selectedFilterLists) {
|
||||
userData.selectedFilterLists = selectedFilterLists;
|
||||
|
||||
// TODO(seamless migration):
|
||||
// The following is strictly for convenience, to be minimally
|
||||
// forward-compatible. This will definitely be removed in the
|
||||
// short term, as I do not expect the need to install an older
|
||||
// version of uBO to ever be needed beyond the short term.
|
||||
// >>>>>>>>
|
||||
userData.filterLists = µb.oldDataFromNewListKeys(selectedFilterLists);
|
||||
// <<<<<<<<
|
||||
|
||||
var filename = vAPI.i18n('aboutBackupFilename')
|
||||
.replace('{{datetime}}', µb.dateNowToSensibleString())
|
||||
|
@ -773,17 +783,15 @@ var backupUserData = function(callback) {
|
|||
'url': 'data:text/plain;charset=utf-8,' + encodeURIComponent(JSON.stringify(userData, null, ' ')),
|
||||
'filename': filename
|
||||
});
|
||||
|
||||
µb.restoreBackupSettings.lastBackupFile = filename;
|
||||
µb.restoreBackupSettings.lastBackupTime = Date.now();
|
||||
vAPI.storage.set(µb.restoreBackupSettings);
|
||||
|
||||
getLocalData(callback);
|
||||
};
|
||||
|
||||
var onUserFiltersReady = function(details) {
|
||||
userData.userFilters = details.content;
|
||||
µb.extractSelectedFilterLists(onSelectedListsReady);
|
||||
µb.loadSelectedFilterLists(onSelectedListsReady);
|
||||
};
|
||||
|
||||
µb.assets.get(µb.userFiltersPath, onUserFiltersReady);
|
||||
|
@ -791,32 +799,32 @@ var backupUserData = function(callback) {
|
|||
|
||||
var restoreUserData = function(request) {
|
||||
var userData = request.userData;
|
||||
var countdown = 8;
|
||||
var onCountdown = function() {
|
||||
countdown -= 1;
|
||||
if ( countdown === 0 ) {
|
||||
vAPI.app.restart();
|
||||
}
|
||||
};
|
||||
|
||||
var onAllRemoved = function() {
|
||||
// Be sure to adjust `countdown` if adding/removing anything below
|
||||
µb.keyvalSetOne('version', userData.version);
|
||||
µBlock.saveLocalSettings();
|
||||
vAPI.storage.set(userData.userSettings, onCountdown);
|
||||
µb.keyvalSetOne('remoteBlacklists', userData.filterLists, onCountdown);
|
||||
vAPI.storage.set(userData.userSettings);
|
||||
µb.hiddenSettingsFromString(userData.hiddenSettingsString || '');
|
||||
µb.keyvalSetOne('netWhitelist', userData.netWhitelist || '', onCountdown);
|
||||
µb.keyvalSetOne('dynamicFilteringString', userData.dynamicFilteringString || '', onCountdown);
|
||||
µb.keyvalSetOne('urlFilteringString', userData.urlFilteringString || '', onCountdown);
|
||||
µb.keyvalSetOne('hostnameSwitchesString', userData.hostnameSwitchesString || '', onCountdown);
|
||||
µb.assets.put(µb.userFiltersPath, userData.userFilters, onCountdown);
|
||||
vAPI.storage.set({
|
||||
netWhitelist: userData.netWhitelist || '',
|
||||
dynamicFilteringString: userData.dynamicFilteringString || '',
|
||||
urlFilteringString: userData.urlFilteringString || '',
|
||||
hostnameSwitchesString: userData.hostnameSwitchesString || '',
|
||||
lastRestoreFile: request.file || '',
|
||||
lastRestoreTime: Date.now(),
|
||||
lastBackupFile: '',
|
||||
lastBackupTime: 0
|
||||
}, onCountdown);
|
||||
});
|
||||
µb.assets.put(µb.userFiltersPath, userData.userFilters);
|
||||
|
||||
// 'filterLists' is available up to uBO v1.10.4, not beyond.
|
||||
// 'selectedFilterLists' is available from uBO v1.11 and beyond.
|
||||
if ( Array.isArray(userData.selectedFilterLists) ) {
|
||||
µb.saveSelectedFilterLists(userData.selectedFilterLists);
|
||||
} else if ( userData.filterLists instanceof Object ) {
|
||||
µb.saveSelectedFilterLists(µb.newListKeysFromOldData(userData.filterLists));
|
||||
}
|
||||
|
||||
vAPI.app.restart();
|
||||
};
|
||||
|
||||
// https://github.com/chrisaljoudi/uBlock/issues/1102
|
||||
|
@ -848,9 +856,7 @@ var prepListEntries = function(entries) {
|
|||
var µburi = µb.URI;
|
||||
var entry, hn;
|
||||
for ( var k in entries ) {
|
||||
if ( entries.hasOwnProperty(k) === false ) {
|
||||
continue;
|
||||
}
|
||||
if ( entries.hasOwnProperty(k) === false ) { continue; }
|
||||
entry = entries[k];
|
||||
if ( typeof entry.supportURL === 'string' && entry.supportURL !== '' ) {
|
||||
entry.supportName = µburi.hostnameFromURI(entry.supportURL);
|
||||
|
@ -869,16 +875,14 @@ var getLists = function(callback) {
|
|||
cache: null,
|
||||
parseCosmeticFilters: µb.userSettings.parseAllABPHideFilters,
|
||||
cosmeticFilterCount: µb.cosmeticFilteringEngine.getFilterCount(),
|
||||
current: µb.remoteBlacklists,
|
||||
current: µb.availableFilterLists,
|
||||
ignoreGenericCosmeticFilters: µb.userSettings.ignoreGenericCosmeticFilters,
|
||||
manualUpdate: false,
|
||||
netFilterCount: µb.staticNetFilteringEngine.getFilterCount(),
|
||||
userFiltersPath: µb.userFiltersPath
|
||||
userFiltersPath: µb.userFiltersPath,
|
||||
aliases: µb.assets.listKeyAliases
|
||||
};
|
||||
var onMetadataReady = function(entries) {
|
||||
r.cache = entries;
|
||||
r.manualUpdate = µb.assetUpdater.manualUpdate;
|
||||
r.manualUpdateProgress = µb.assetUpdater.manualUpdateProgress;
|
||||
prepListEntries(r.cache);
|
||||
callback(r);
|
||||
};
|
||||
|
@ -952,9 +956,6 @@ var onMessage = function(request, sender, callback) {
|
|||
case 'getLocalData':
|
||||
return getLocalData(callback);
|
||||
|
||||
case 'purgeAllCaches':
|
||||
return µb.assets.purgeAll(callback);
|
||||
|
||||
case 'readUserFilters':
|
||||
return µb.loadUserFilters(callback);
|
||||
|
||||
|
@ -973,8 +974,18 @@ var onMessage = function(request, sender, callback) {
|
|||
response = getRules();
|
||||
break;
|
||||
|
||||
case 'purgeAllCaches':
|
||||
if ( request.hard ) {
|
||||
µb.assets.remove(/./);
|
||||
} else {
|
||||
µb.assets.remove(/compiled\//);
|
||||
µb.assets.purge(/./);
|
||||
}
|
||||
break;
|
||||
|
||||
case 'purgeCache':
|
||||
µb.assets.purgeCacheableAsset(request.path);
|
||||
µb.assets.purge(request.assetKey);
|
||||
µb.assets.remove('compiled/' + request.assetKey);
|
||||
break;
|
||||
|
||||
case 'readHiddenSettings':
|
||||
|
|
|
@ -402,27 +402,15 @@ RedirectEngine.prototype.resourceContentFromName = function(name, mime) {
|
|||
// TODO: combine same key-redirect pairs into a single regex.
|
||||
|
||||
RedirectEngine.prototype.resourcesFromString = function(text) {
|
||||
var textEnd = text.length;
|
||||
var lineBeg = 0, lineEnd;
|
||||
var line, fields, encoded;
|
||||
var reNonEmptyLine = /\S/;
|
||||
var line, fields, encoded,
|
||||
reNonEmptyLine = /\S/,
|
||||
lineIter = new µBlock.LineIterator(text);
|
||||
|
||||
this.resources = new Map();
|
||||
|
||||
while ( lineBeg < textEnd ) {
|
||||
lineEnd = text.indexOf('\n', lineBeg);
|
||||
if ( lineEnd < 0 ) {
|
||||
lineEnd = text.indexOf('\r', lineBeg);
|
||||
if ( lineEnd < 0 ) {
|
||||
lineEnd = textEnd;
|
||||
}
|
||||
}
|
||||
line = text.slice(lineBeg, lineEnd);
|
||||
lineBeg = lineEnd + 1;
|
||||
|
||||
if ( line.startsWith('#') ) {
|
||||
continue;
|
||||
}
|
||||
while ( lineIter.eot() === false ) {
|
||||
line = lineIter.next();
|
||||
if ( line.startsWith('#') ) { continue; }
|
||||
|
||||
if ( fields === undefined ) {
|
||||
fields = line.trim().split(/\s+/);
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uBlock - a browser extension to block requests.
|
||||
Copyright (C) 2015 Raymond Hill
|
||||
uBlock Origin - a browser extension to block requests.
|
||||
Copyright (C) 2015-2017 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
|
||||
|
@ -43,8 +43,8 @@ var fromNetFilter = function(details) {
|
|||
var lists = [];
|
||||
var compiledFilter = details.compiledFilter;
|
||||
var entry, content, pos, c;
|
||||
for ( var path in listEntries ) {
|
||||
entry = listEntries[path];
|
||||
for ( var assetKey in listEntries ) {
|
||||
entry = listEntries[assetKey];
|
||||
if ( entry === undefined ) {
|
||||
continue;
|
||||
}
|
||||
|
@ -173,11 +173,11 @@ var fromCosmeticFilter = function(details) {
|
|||
);
|
||||
}
|
||||
|
||||
var re, path, entry;
|
||||
var re, assetKey, entry;
|
||||
for ( var candidate in candidates ) {
|
||||
re = candidates[candidate];
|
||||
for ( path in listEntries ) {
|
||||
entry = listEntries[path];
|
||||
for ( assetKey in listEntries ) {
|
||||
entry = listEntries[assetKey];
|
||||
if ( entry === undefined ) {
|
||||
continue;
|
||||
}
|
||||
|
@ -206,7 +206,7 @@ var reHighMedium = /^\[href\^="https?:\/\/([^"]{8})[^"]*"\]$/;
|
|||
|
||||
/******************************************************************************/
|
||||
|
||||
onmessage = function(e) {
|
||||
onmessage = function(e) { // jshint ignore:line
|
||||
var msg = e.data;
|
||||
|
||||
switch ( msg.what ) {
|
||||
|
@ -215,7 +215,7 @@ onmessage = function(e) {
|
|||
break;
|
||||
|
||||
case 'setList':
|
||||
listEntries[msg.details.path] = msg.details;
|
||||
listEntries[msg.details.assetKey] = msg.details;
|
||||
break;
|
||||
|
||||
case 'fromNetFilter':
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uBlock - a browser extension to block requests.
|
||||
Copyright (C) 2015 Raymond Hill
|
||||
uBlock Origin - a browser extension to block requests.
|
||||
Copyright (C) 2015-2017 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
|
||||
|
@ -19,14 +19,12 @@
|
|||
Home: https://github.com/gorhill/uBlock
|
||||
*/
|
||||
|
||||
/* global µBlock */
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
µBlock.staticFilteringReverseLookup = (function() {
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
var worker = null;
|
||||
|
@ -77,16 +75,16 @@ var initWorker = function(callback) {
|
|||
var countdown = 0;
|
||||
|
||||
var onListLoaded = function(details) {
|
||||
var entry = entries[details.path];
|
||||
var entry = entries[details.assetKey];
|
||||
|
||||
// https://github.com/gorhill/uBlock/issues/536
|
||||
// Use path string when there is no filter list title.
|
||||
// Use assetKey when there is no filter list title.
|
||||
|
||||
worker.postMessage({
|
||||
what: 'setList',
|
||||
details: {
|
||||
path: details.path,
|
||||
title: entry.title || details.path,
|
||||
assetKey: details.assetKey,
|
||||
title: entry.title || details.assetKey,
|
||||
supportURL: entry.supportURL,
|
||||
content: details.content
|
||||
}
|
||||
|
@ -99,18 +97,18 @@ var initWorker = function(callback) {
|
|||
};
|
||||
|
||||
var µb = µBlock;
|
||||
var path, entry;
|
||||
var listKey, entry;
|
||||
|
||||
for ( path in µb.remoteBlacklists ) {
|
||||
if ( µb.remoteBlacklists.hasOwnProperty(path) === false ) {
|
||||
for ( listKey in µb.availableFilterLists ) {
|
||||
if ( µb.availableFilterLists.hasOwnProperty(listKey) === false ) {
|
||||
continue;
|
||||
}
|
||||
entry = µb.remoteBlacklists[path];
|
||||
if ( entry.off === true ) {
|
||||
continue;
|
||||
}
|
||||
entries[path] = {
|
||||
title: path !== µb.userFiltersPath ? entry.title : vAPI.i18n('1pPageName'),
|
||||
entry = µb.availableFilterLists[listKey];
|
||||
if ( entry.off === true ) { continue; }
|
||||
entries[listKey] = {
|
||||
title: listKey !== µb.userFiltersPath ?
|
||||
entry.title :
|
||||
vAPI.i18n('1pPageName'),
|
||||
supportURL: entry.supportURL || ''
|
||||
};
|
||||
countdown += 1;
|
||||
|
@ -121,8 +119,8 @@ var initWorker = function(callback) {
|
|||
return;
|
||||
}
|
||||
|
||||
for ( path in entries ) {
|
||||
µb.getCompiledFilterList(path, onListLoaded);
|
||||
for ( listKey in entries ) {
|
||||
µb.getCompiledFilterList(listKey, onListLoaded);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uBlock Origin - a browser extension to block requests.
|
||||
Copyright (C) 2015-2016 Raymond Hill
|
||||
Copyright (C) 2015-2017 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
|
||||
|
@ -21,6 +21,8 @@
|
|||
|
||||
/* global vAPI, HTMLDocument */
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// Injected into specific web pages, those which have been pre-selected
|
||||
|
@ -30,8 +32,6 @@
|
|||
|
||||
(function() {
|
||||
|
||||
'use strict';
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
// https://github.com/chrisaljoudi/uBlock/issues/464
|
||||
|
@ -100,7 +100,8 @@ var onAbpLinkClicked = function(ev) {
|
|||
'scriptlets',
|
||||
{
|
||||
what: 'selectFilterLists',
|
||||
switches: [ { location: location, off: false } ]
|
||||
keys: [ location ],
|
||||
append: true
|
||||
},
|
||||
onListsSelectionDone
|
||||
);
|
||||
|
|
|
@ -56,7 +56,10 @@ var handleImportFilePicker = function() {
|
|||
if ( typeof userData.netWhitelist !== 'string' ) {
|
||||
throw 'Invalid';
|
||||
}
|
||||
if ( typeof userData.filterLists !== 'object' ) {
|
||||
if (
|
||||
typeof userData.filterLists !== 'object' &&
|
||||
Array.isArray(userData.selectedFilterLists) === false
|
||||
) {
|
||||
throw 'Invalid';
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uBlock Origin - a browser extension to block requests.
|
||||
Copyright (C) 2014-2016 Raymond Hill
|
||||
Copyright (C) 2014-2017 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
|
||||
|
@ -39,7 +39,7 @@ var µb = µBlock;
|
|||
|
||||
vAPI.app.onShutdown = function() {
|
||||
µb.staticFilteringReverseLookup.shutdown();
|
||||
µb.assetUpdater.shutdown();
|
||||
µb.assets.updateStop();
|
||||
µb.staticNetFilteringEngine.reset();
|
||||
µb.cosmeticFilteringEngine.reset();
|
||||
µb.sessionFirewall.reset();
|
||||
|
@ -58,14 +58,8 @@ vAPI.app.onShutdown = function() {
|
|||
var onAllReady = function() {
|
||||
// https://github.com/chrisaljoudi/uBlock/issues/184
|
||||
// Check for updates not too far in the future.
|
||||
µb.assetUpdater.onStart.addEventListener(µb.updateStartHandler.bind(µb));
|
||||
µb.assetUpdater.onCompleted.addEventListener(µb.updateCompleteHandler.bind(µb));
|
||||
µb.assetUpdater.onAssetUpdated.addEventListener(µb.assetUpdatedHandler.bind(µb));
|
||||
µb.assets.onAssetRemoved.addListener(µb.assetCacheRemovedHandler.bind(µb));
|
||||
|
||||
// Important: remove barrier to remote fetching, this was useful only
|
||||
// for launch time.
|
||||
µb.assets.remoteFetchBarrier -= 1;
|
||||
µb.assets.addObserver(µb.assetObserver.bind(µb));
|
||||
µb.scheduleAssetUpdater(µb.userSettings.autoUpdate ? 7 * 60 * 1000 : 0);
|
||||
|
||||
// vAPI.cloud is optional.
|
||||
if ( µb.cloudStorageSupported ) {
|
||||
|
@ -129,7 +123,7 @@ var onSelfieReady = function(selfie) {
|
|||
return false;
|
||||
}
|
||||
|
||||
µb.remoteBlacklists = selfie.filterLists;
|
||||
µb.availableFilterLists = selfie.availableFilterLists;
|
||||
µb.staticNetFilteringEngine.fromSelfie(selfie.staticNetFilteringEngine);
|
||||
µb.redirectEngine.fromSelfie(selfie.redirectEngine);
|
||||
µb.cosmeticFilteringEngine.fromSelfie(selfie.cosmeticFilteringEngine);
|
||||
|
@ -157,12 +151,6 @@ var onUserSettingsReady = function(fetched) {
|
|||
|
||||
fromFetch(userSettings, fetched);
|
||||
|
||||
// https://github.com/chrisaljoudi/uBlock/issues/426
|
||||
// Important: block remote fetching for when loading assets at launch
|
||||
// time.
|
||||
µb.assets.autoUpdate = userSettings.autoUpdate;
|
||||
µb.assets.autoUpdateDelay = µb.updateAssetsEvery;
|
||||
|
||||
if ( µb.privacySettingsSupported ) {
|
||||
vAPI.browserSettings.set({
|
||||
'hyperlinkAuditing': !userSettings.hyperlinkAuditingDisabled,
|
||||
|
@ -192,7 +180,7 @@ var onUserSettingsReady = function(fetched) {
|
|||
var onSystemSettingsReady = function(fetched) {
|
||||
var mustSaveSystemSettings = false;
|
||||
if ( fetched.compiledMagic !== µb.systemSettings.compiledMagic ) {
|
||||
µb.assets.purge(/^cache:\/\/compiled-/);
|
||||
µb.assets.remove(/^compiled\//);
|
||||
mustSaveSystemSettings = true;
|
||||
}
|
||||
if ( fetched.selfieMagic !== µb.systemSettings.selfieMagic ) {
|
||||
|
@ -254,9 +242,6 @@ var fromFetch = function(to, fetched) {
|
|||
/******************************************************************************/
|
||||
|
||||
var onAdminSettingsRestored = function() {
|
||||
// Forbid remote fetching of assets
|
||||
µb.assets.remoteFetchBarrier += 1;
|
||||
|
||||
var fetchableProps = {
|
||||
'compiledMagic': '',
|
||||
'dynamicFilteringString': 'behind-the-scene * 3p noop\nbehind-the-scene * 3p-frame noop',
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -1,7 +1,7 @@
|
|||
/*******************************************************************************
|
||||
|
||||
uBlock Origin - a browser extension to block requests.
|
||||
Copyright (C) 2014-2016 Raymond Hill
|
||||
Copyright (C) 2014-2017 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
|
||||
|
@ -317,6 +317,9 @@ var reInvalidHostname = /[^a-z0-9.\-\[\]:]/,
|
|||
|
||||
// Pre-change
|
||||
switch ( name ) {
|
||||
case 'externalLists':
|
||||
this.changeExternalFilterLists(us.externalLists, value);
|
||||
break;
|
||||
case 'largeMediaSize':
|
||||
if ( typeof value !== 'number' ) {
|
||||
value = parseInt(value, 10) || 0;
|
||||
|
@ -340,6 +343,9 @@ var reInvalidHostname = /[^a-z0-9.\-\[\]:]/,
|
|||
us.dynamicFilteringEnabled = true;
|
||||
}
|
||||
break;
|
||||
case 'autoUpdate':
|
||||
this.scheduleAssetUpdater(value ? 7 * 60 * 1000 : 0);
|
||||
break;
|
||||
case 'collapseBlocked':
|
||||
if ( value === false ) {
|
||||
this.cosmeticFilteringEngine.removeFromSelectorCache('*', 'net');
|
||||
|
|
|
@ -24,8 +24,6 @@ cp -R ../uAssets/thirdparties/www.malwaredomainlist.com $DES/thirdparti
|
|||
|
||||
mkdir $DES/ublock
|
||||
cp -R ../uAssets/filters/* $DES/ublock/
|
||||
cp -R ./assets/ublock/filter-lists.json $DES/ublock/
|
||||
|
||||
cp ../uAssets/checksums/ublock0.txt $DES/checksums.txt
|
||||
cp -R ./assets/assets.json $DES/
|
||||
|
||||
echo "done."
|
||||
|
|
|
@ -5,7 +5,11 @@
|
|||
echo "*** uBlock0.chromium: Creating web store package"
|
||||
echo "*** uBlock0.chromium: Copying files"
|
||||
|
||||
DES=dist/build/uBlock0.chromium
|
||||
if [ "$1" = experimental ]; then
|
||||
DES=dist/build/experimental/uBlock0.chromium
|
||||
else
|
||||
DES=dist/build/uBlock0.chromium
|
||||
fi
|
||||
rm -rf $DES
|
||||
mkdir -p $DES
|
||||
|
||||
|
|
Loading…
Reference in a new issue