From 5b79bf353647a4dad9d4968d0f246582744f07bc Mon Sep 17 00:00:00 2001 From: Deathamns Date: Fri, 17 Oct 2014 21:44:19 +0200 Subject: [PATCH] Work on vendor API abstraction, and near complete Safari support --- MANIFESTO.md | 6 +- README.md | 44 +- import-crowdin.sh | 67 -- js/messaging-client.js | 141 --- js/messaging.js | 252 ------ make-chrome.sh | 18 - make-noassets.sh | 15 - meta/config.json | 31 + meta/crx/manifest.json | 62 ++ meta/crx/update_crx.xml | 6 + meta/safariextz/Info.plist | 87 ++ meta/safariextz/update_safariextz.plist | 21 + 1p-filters.html => src/1p-filters.html | 13 +- 3p-filters.html => src/3p-filters.html | 17 +- src/Info.plist | 87 ++ {_locales => src/_locales}/ar/messages.json | 0 {_locales => src/_locales}/cs/messages.json | 0 {_locales => src/_locales}/da/messages.json | 0 {_locales => src/_locales}/de/messages.json | 0 {_locales => src/_locales}/el/messages.json | 0 {_locales => src/_locales}/en/messages.json | 0 {_locales => src/_locales}/es/messages.json | 0 {_locales => src/_locales}/et/messages.json | 0 {_locales => src/_locales}/fi/messages.json | 0 {_locales => src/_locales}/fr/messages.json | 0 {_locales => src/_locales}/he/messages.json | 0 {_locales => src/_locales}/hi/messages.json | 0 {_locales => src/_locales}/hr/messages.json | 0 {_locales => src/_locales}/hu/messages.json | 0 {_locales => src/_locales}/id/messages.json | 0 {_locales => src/_locales}/it/messages.json | 0 {_locales => src/_locales}/ja/messages.json | 0 {_locales => src/_locales}/mr/messages.json | 0 {_locales => src/_locales}/nb/messages.json | 0 {_locales => src/_locales}/nl/messages.json | 0 {_locales => src/_locales}/pl/messages.json | 0 .../_locales}/pt_BR/messages.json | 0 .../_locales}/pt_PT/messages.json | 0 {_locales => src/_locales}/ro/messages.json | 0 {_locales => src/_locales}/ru/messages.json | 0 {_locales => src/_locales}/sv/messages.json | 0 {_locales => src/_locales}/tr/messages.json | 0 {_locales => src/_locales}/uk/messages.json | 0 {_locales => src/_locales}/vi/messages.json | 0 .../_locales}/zh_CN/messages.json | 0 about.html => src/about.html | 15 +- asset-viewer.html => src/asset-viewer.html | 10 +- {assets => src/assets}/checksums.txt | 0 .../nauscopio/filtros.txt | 0 .../svn/trunk/adblock.txt | 0 .../svn/filters.txt | 0 .../hg/abp_jp.txt | 0 .../adblock.gardar.net/is.abp.txt | 0 .../thirdparties/adblock.schack.dk/block.txt | 0 .../cjxlist1.googlecode.com/svn/cjxlist.txt | 0 .../u/1289327/abpxfiles/filtri.txt | 0 .../advblock.txt | 0 .../bitblock.txt | 0 .../easylist.txt | 0 .../easylist_noelemhide.txt | 0 .../easylistchina.txt | 0 .../easylistdutch.txt | 0 .../easylistgermany.txt | 0 .../easylistitaly.txt | 0 .../easyprivacy.txt | 0 .../fanboy-annoyance.txt | 0 .../fanboy-social.txt | 0 .../liste_fr.txt | 0 .../raw/master_lists/latvian-list.txt | 0 .../home.fredfiber.no/langsholt/adblock.txt | 0 .../thirdparties/hosts-file.net/ad-servers | 0 .../hg/subscriptions/abpindo.txt | 0 .../hg/Liste_AR.txt | 0 .../margevicius.lt/easylistlithuania.txt | 0 .../files/README.md | 0 .../files/immortal_domains.txt | 0 .../files/justdomains | 0 .../thirdparties/pgl.yoyo.org/as/README.md | 0 .../thirdparties/pgl.yoyo.org/as/serverlist | 0 .../list/effective_tld_names.dat | 0 .../EasyListHebrew/master/EasyListHebrew.txt | 0 .../Adblock_PL_List/master/adblock_polska.txt | 0 .../master/anti-adblock-killer-filters.txt | 0 .../easylistczechandslovak/master/filters.txt | 0 .../wiltteri/wiltteri.txt/master/wiltteri.txt | 0 .../someonewhocares.org/hosts/hosts | 0 .../spam404bl.com/spam404scamlist.txt | 0 .../stanev.org/abp/adblock_bg.txt | 0 .../winhelp2002.mvps.org/hosts.txt | 0 .../www.fanboy.co.nz/enhancedstats.txt | 0 .../www.fanboy.co.nz/fanboy-antifacebook.txt | 0 .../www.fanboy.co.nz/fanboy-swedish.txt | 0 .../www.fanboy.co.nz/fanboy-ultimate.txt | 0 .../www.fanboy.co.nz/fanboy-vietnam.txt | 0 .../thirdparties/www.hufilter.hu/hufilter.txt | 0 .../hostslist/README.md | 0 .../hostslist/hosts.txt | 0 .../www.void.gr/kargig/void-gr-filters.txt | 0 .../assets}/ublock/filter-lists.json | 0 {assets => src/assets}/ublock/filters.txt | 0 .../assets}/ublock/mirror-candidates.txt | 0 {assets => src/assets}/ublock/privacy.txt | 0 {assets => src/assets}/update-3rdparties.sh | 0 {assets => src/assets}/update-checksums.sh | 0 {assets => src/assets}/update-git.sh | 0 background.html => src/background.html | 3 +- {css => src/css}/1p-filters.css | 0 {css => src/css}/3p-filters.css | 0 {css => src/css}/about.css | 0 {css => src/css}/common.css | 4 +- {css => src/css}/dashboard-common.css | 3 +- {css => src/css}/fonts/OFL.txt | 0 .../css}/fonts/fontawesome-webfont.ttf | Bin {css => src/css}/popup.css | 41 +- {css => src/css}/whitelist.css | 0 dashboard.html => src/dashboard.html | 27 +- img/icon_128.png => src/icon.png | Bin {img => src/img}/browsericons/icon19-off.png | Bin {img => src/img}/browsericons/icon19.png | Bin {img => src/img}/browsericons/icon38-off.png | Bin {img => src/img}/browsericons/icon38.png | Bin {img => src/img}/help16.png | Bin src/img/icon_128.png | Bin 0 -> 880 bytes {img => src/img}/icon_16.png | Bin {img => src/img}/ublock.svg | 0 {js => src/js}/1p-filters.js | 10 +- {js => src/js}/3p-filters.js | 58 +- {js => src/js}/about.js | 19 +- {js => src/js}/asset-viewer.js | 6 +- {js => src/js}/assets.js | 46 +- {js => src/js}/async.js | 4 +- {js => src/js}/background.js | 5 +- {js => src/js}/contentscript-end.js | 148 +-- {js => src/js}/contentscript-start.js | 111 +-- {js => src/js}/contextmenu.js | 46 +- {js => src/js}/cosmetic-filtering.js | 10 +- {js => src/js}/dashboard-common.js | 0 {js => src/js}/dashboard.js | 3 +- {js => src/js}/element-picker.js | 139 +-- {js => src/js}/i18n.js | 8 +- src/js/js-loader.js | 37 + {js => src/js}/liquid-dict.js | 2 +- .../js/messaging.js | 126 ++- {js => src/js}/mirrors.js | 28 +- {js => src/js}/net-filtering.js | 8 +- {js => src/js}/pagestore.js | 6 +- {js => src/js}/popup.js | 67 +- {js => src/js}/profiler.js | 2 +- {js => src/js}/settings.js | 8 +- {js => src/js}/start.js | 0 {js => src/js}/stats.js | 19 +- {js => src/js}/storage.js | 47 +- {js => src/js}/tab.js | 123 ++- {js => src/js}/traffic.js | 96 +- {js => src/js}/ublock.js | 2 +- {js => src/js}/udom.js | 0 {js => src/js}/uritools.js | 2 + {js => src/js}/utils.js | 15 +- src/js/vapi-background.js | 848 ++++++++++++++++++ src/js/vapi-client.js | 335 +++++++ src/js/vapi-common.js | 62 ++ {js => src/js}/whitelist.js | 10 +- {js => src/js}/xal.js | 37 +- {lib => src/lib}/publicsuffixlist.min.js | 0 {lib => src/lib}/punycode.min.js | 0 {lib => src/lib}/yamd5.js | 0 src/locales.json | 1 + manifest.json => src/manifest.json | 74 +- popup.html => src/popup.html | 12 +- settings.html => src/settings.html | 17 +- stats.html => src/stats.html | 13 +- whitelist.html => src/whitelist.html | 15 +- tools/build_meta.py | 87 ++ tools/import-crowdin.sh | 67 ++ tools/make-chrome.sh | 17 + make-clean.sh => tools/make-clean.sh | 2 +- tools/make-noassets.sh | 15 + make-opera.sh => tools/make-opera.sh | 6 +- 178 files changed, 2417 insertions(+), 1372 deletions(-) delete mode 100755 import-crowdin.sh delete mode 100644 js/messaging-client.js delete mode 100644 js/messaging.js delete mode 100755 make-chrome.sh delete mode 100755 make-noassets.sh create mode 100644 meta/config.json create mode 100644 meta/crx/manifest.json create mode 100644 meta/crx/update_crx.xml create mode 100644 meta/safariextz/Info.plist create mode 100644 meta/safariextz/update_safariextz.plist rename 1p-filters.html => src/1p-filters.html (80%) rename 3p-filters.html => src/3p-filters.html (84%) create mode 100644 src/Info.plist rename {_locales => src/_locales}/ar/messages.json (100%) rename {_locales => src/_locales}/cs/messages.json (100%) rename {_locales => src/_locales}/da/messages.json (100%) rename {_locales => src/_locales}/de/messages.json (100%) rename {_locales => src/_locales}/el/messages.json (100%) rename {_locales => src/_locales}/en/messages.json (100%) rename {_locales => src/_locales}/es/messages.json (100%) rename {_locales => src/_locales}/et/messages.json (100%) rename {_locales => src/_locales}/fi/messages.json (100%) rename {_locales => src/_locales}/fr/messages.json (100%) rename {_locales => src/_locales}/he/messages.json (100%) rename {_locales => src/_locales}/hi/messages.json (100%) rename {_locales => src/_locales}/hr/messages.json (100%) rename {_locales => src/_locales}/hu/messages.json (100%) rename {_locales => src/_locales}/id/messages.json (100%) rename {_locales => src/_locales}/it/messages.json (100%) rename {_locales => src/_locales}/ja/messages.json (100%) rename {_locales => src/_locales}/mr/messages.json (100%) rename {_locales => src/_locales}/nb/messages.json (100%) rename {_locales => src/_locales}/nl/messages.json (100%) rename {_locales => src/_locales}/pl/messages.json (100%) rename {_locales => src/_locales}/pt_BR/messages.json (100%) rename {_locales => src/_locales}/pt_PT/messages.json (100%) rename {_locales => src/_locales}/ro/messages.json (100%) rename {_locales => src/_locales}/ru/messages.json (100%) rename {_locales => src/_locales}/sv/messages.json (100%) rename {_locales => src/_locales}/tr/messages.json (100%) rename {_locales => src/_locales}/uk/messages.json (100%) rename {_locales => src/_locales}/vi/messages.json (100%) rename {_locales => src/_locales}/zh_CN/messages.json (100%) rename about.html => src/about.html (82%) rename asset-viewer.html => src/asset-viewer.html (68%) rename {assets => src/assets}/checksums.txt (100%) rename {assets => src/assets}/thirdparties/abp.mozilla-hispano.org/nauscopio/filtros.txt (100%) rename {assets => src/assets}/thirdparties/adblock-chinalist.googlecode.com/svn/trunk/adblock.txt (100%) rename {assets => src/assets}/thirdparties/adblock-czechoslovaklist.googlecode.com/svn/filters.txt (100%) rename {assets => src/assets}/thirdparties/adblock-plus-japanese-filter.googlecode.com/hg/abp_jp.txt (100%) rename {assets => src/assets}/thirdparties/adblock.gardar.net/is.abp.txt (100%) rename {assets => src/assets}/thirdparties/adblock.schack.dk/block.txt (100%) rename {assets => src/assets}/thirdparties/cjxlist1.googlecode.com/svn/cjxlist.txt (100%) rename {assets => src/assets}/thirdparties/dl.dropboxusercontent.com/u/1289327/abpxfiles/filtri.txt (100%) rename {assets => src/assets}/thirdparties/easylist-downloads.adblockplus.org/advblock.txt (100%) rename {assets => src/assets}/thirdparties/easylist-downloads.adblockplus.org/bitblock.txt (100%) rename {assets => src/assets}/thirdparties/easylist-downloads.adblockplus.org/easylist.txt (100%) rename {assets => src/assets}/thirdparties/easylist-downloads.adblockplus.org/easylist_noelemhide.txt (100%) rename {assets => src/assets}/thirdparties/easylist-downloads.adblockplus.org/easylistchina.txt (100%) rename {assets => src/assets}/thirdparties/easylist-downloads.adblockplus.org/easylistdutch.txt (100%) rename {assets => src/assets}/thirdparties/easylist-downloads.adblockplus.org/easylistgermany.txt (100%) rename {assets => src/assets}/thirdparties/easylist-downloads.adblockplus.org/easylistitaly.txt (100%) rename {assets => src/assets}/thirdparties/easylist-downloads.adblockplus.org/easyprivacy.txt (100%) rename {assets => src/assets}/thirdparties/easylist-downloads.adblockplus.org/fanboy-annoyance.txt (100%) rename {assets => src/assets}/thirdparties/easylist-downloads.adblockplus.org/fanboy-social.txt (100%) rename {assets => src/assets}/thirdparties/easylist-downloads.adblockplus.org/liste_fr.txt (100%) rename {assets => src/assets}/thirdparties/gitorious.org/adblock-latvian/adblock-latvian/raw/master_lists/latvian-list.txt (100%) rename {assets => src/assets}/thirdparties/home.fredfiber.no/langsholt/adblock.txt (100%) rename {assets => src/assets}/thirdparties/hosts-file.net/ad-servers (100%) rename {assets => src/assets}/thirdparties/indonesianadblockrules.googlecode.com/hg/subscriptions/abpindo.txt (100%) rename {assets => src/assets}/thirdparties/liste-ar-adblock.googlecode.com/hg/Liste_AR.txt (100%) rename {assets => src/assets}/thirdparties/margevicius.lt/easylistlithuania.txt (100%) rename {assets => src/assets}/thirdparties/mirror1.malwaredomains.com/files/README.md (100%) rename {assets => src/assets}/thirdparties/mirror1.malwaredomains.com/files/immortal_domains.txt (100%) rename {assets => src/assets}/thirdparties/mirror1.malwaredomains.com/files/justdomains (100%) rename {assets => src/assets}/thirdparties/pgl.yoyo.org/as/README.md (100%) rename {assets => src/assets}/thirdparties/pgl.yoyo.org/as/serverlist (100%) rename {assets => src/assets}/thirdparties/publicsuffix.org/list/effective_tld_names.dat (100%) rename {assets => src/assets}/thirdparties/raw.githubusercontent.com/AdBlockPlusIsrael/EasyListHebrew/master/EasyListHebrew.txt (100%) rename {assets => src/assets}/thirdparties/raw.githubusercontent.com/adblockpolska/Adblock_PL_List/master/adblock_polska.txt (100%) rename {assets => src/assets}/thirdparties/raw.githubusercontent.com/reek/anti-adblock-killer/master/anti-adblock-killer-filters.txt (100%) rename {assets => src/assets}/thirdparties/raw.githubusercontent.com/tomasko126/easylistczechandslovak/master/filters.txt (100%) rename {assets => src/assets}/thirdparties/raw.githubusercontent.com/wiltteri/wiltteri.txt/master/wiltteri.txt (100%) rename {assets => src/assets}/thirdparties/someonewhocares.org/hosts/hosts (100%) rename {assets => src/assets}/thirdparties/spam404bl.com/spam404scamlist.txt (100%) rename {assets => src/assets}/thirdparties/stanev.org/abp/adblock_bg.txt (100%) rename {assets => src/assets}/thirdparties/winhelp2002.mvps.org/hosts.txt (100%) rename {assets => src/assets}/thirdparties/www.fanboy.co.nz/enhancedstats.txt (100%) rename {assets => src/assets}/thirdparties/www.fanboy.co.nz/fanboy-antifacebook.txt (100%) rename {assets => src/assets}/thirdparties/www.fanboy.co.nz/fanboy-swedish.txt (100%) rename {assets => src/assets}/thirdparties/www.fanboy.co.nz/fanboy-ultimate.txt (100%) rename {assets => src/assets}/thirdparties/www.fanboy.co.nz/fanboy-vietnam.txt (100%) rename {assets => src/assets}/thirdparties/www.hufilter.hu/hufilter.txt (100%) rename {assets => src/assets}/thirdparties/www.malwaredomainlist.com/hostslist/README.md (100%) rename {assets => src/assets}/thirdparties/www.malwaredomainlist.com/hostslist/hosts.txt (100%) rename {assets => src/assets}/thirdparties/www.void.gr/kargig/void-gr-filters.txt (100%) rename {assets => src/assets}/ublock/filter-lists.json (100%) rename {assets => src/assets}/ublock/filters.txt (100%) rename {assets => src/assets}/ublock/mirror-candidates.txt (100%) rename {assets => src/assets}/ublock/privacy.txt (100%) rename {assets => src/assets}/update-3rdparties.sh (100%) mode change 100755 => 100644 rename {assets => src/assets}/update-checksums.sh (100%) mode change 100755 => 100644 rename {assets => src/assets}/update-git.sh (100%) mode change 100755 => 100644 rename background.html => src/background.html (92%) rename {css => src/css}/1p-filters.css (100%) rename {css => src/css}/3p-filters.css (100%) rename {css => src/css}/about.css (100%) rename {css => src/css}/common.css (95%) rename {css => src/css}/dashboard-common.css (94%) rename {css => src/css}/fonts/OFL.txt (100%) rename {css => src/css}/fonts/fontawesome-webfont.ttf (100%) rename {css => src/css}/popup.css (91%) rename {css => src/css}/whitelist.css (100%) rename dashboard.html => src/dashboard.html (88%) rename img/icon_128.png => src/icon.png (100%) rename {img => src/img}/browsericons/icon19-off.png (100%) rename {img => src/img}/browsericons/icon19.png (100%) rename {img => src/img}/browsericons/icon38-off.png (100%) rename {img => src/img}/browsericons/icon38.png (100%) rename {img => src/img}/help16.png (100%) create mode 100644 src/img/icon_128.png rename {img => src/img}/icon_16.png (100%) rename {img => src/img}/ublock.svg (100%) rename {js => src/js}/1p-filters.js (94%) rename {js => src/js}/3p-filters.js (91%) rename {js => src/js}/about.js (87%) rename {js => src/js}/asset-viewer.js (91%) rename {js => src/js}/assets.js (96%) rename {js => src/js}/async.js (99%) rename {js => src/js}/background.js (97%) rename {js => src/js}/contentscript-end.js (87%) rename {js => src/js}/contentscript-start.js (64%) rename {js => src/js}/contextmenu.js (71%) rename {js => src/js}/cosmetic-filtering.js (99%) rename {js => src/js}/dashboard-common.js (100%) rename {js => src/js}/dashboard.js (97%) rename {js => src/js}/element-picker.js (90%) rename {js => src/js}/i18n.js (83%) create mode 100644 src/js/js-loader.js rename {js => src/js}/liquid-dict.js (99%) rename js/messaging-handlers.js => src/js/messaging.js (87%) rename {js => src/js}/mirrors.js (96%) rename {js => src/js}/net-filtering.js (99%) rename {js => src/js}/pagestore.js (99%) rename {js => src/js}/popup.js (88%) rename {js => src/js}/profiler.js (96%) rename {js => src/js}/settings.js (93%) rename {js => src/js}/start.js (100%) rename {js => src/js}/stats.js (93%) rename {js => src/js}/storage.js (94%) rename {js => src/js}/tab.js (62%) rename {js => src/js}/traffic.js (90%) rename {js => src/js}/ublock.js (99%) rename {js => src/js}/udom.js (100%) rename {js => src/js}/uritools.js (99%) rename {js => src/js}/utils.js (90%) create mode 100644 src/js/vapi-background.js create mode 100644 src/js/vapi-client.js create mode 100644 src/js/vapi-common.js rename {js => src/js}/whitelist.js (95%) rename {js => src/js}/xal.js (68%) rename {lib => src/lib}/publicsuffixlist.min.js (100%) rename {lib => src/lib}/punycode.min.js (100%) rename {lib => src/lib}/yamd5.js (100%) create mode 100644 src/locales.json rename manifest.json => src/manifest.json (58%) rename popup.html => src/popup.html (92%) rename settings.html => src/settings.html (64%) rename stats.html => src/stats.html (92%) rename whitelist.html => src/whitelist.html (77%) create mode 100644 tools/build_meta.py create mode 100644 tools/import-crowdin.sh create mode 100644 tools/make-chrome.sh rename make-clean.sh => tools/make-clean.sh (83%) mode change 100755 => 100644 create mode 100644 tools/make-noassets.sh rename make-opera.sh => tools/make-opera.sh (62%) diff --git a/MANIFESTO.md b/MANIFESTO.md index 14ea11936..24f6155ea 100644 --- a/MANIFESTO.md +++ b/MANIFESTO.md @@ -2,9 +2,9 @@ 1. The **user decides** what web content is acceptable or not in their browser. -The µBlock project does not support Adblock Plus' _"Acceptable Ads Manifesto"_, -because the _"Acceptable Ads"_ marketing campaign is really the business +The µBlock project does not support Adblock Plus' _"Acceptable Ads Manifesto"_, +because the _"Acceptable Ads"_ marketing campaign is really the business plan of a for-profit entity. -Users are best placed to know what is or is not acceptable to them. µBlock's +Users are best placed to know what is or is not acceptable to them. µBlock's sole purpose is to give users the mean to enforce their own choices. diff --git a/README.md b/README.md index 7f4b796f6..f312218e7 100644 --- a/README.md +++ b/README.md @@ -2,10 +2,10 @@ **Foreword:** Using a blocker is **NOT** [theft](https://twitter.com/LeaVerou/status/518154828166725632). Do not fall for this creepy idea. The _ultimate_ logical consequence of "blocking = theft" is the criminalisation of the inalienable right to privacy. -See [releases page](https://github.com/gorhill/uBlock/releases) for recent changes. +See [releases page](https://github.com/gorhill/uBlock/releases) for recent changes. See [Wiki](https://github.com/gorhill/uBlock/wiki) for more information. -An efficient blocker for Chromium-based browsers. Fast and lean. Written from scratch. Development +An efficient blocker for Chromium-based browsers. Fast and lean. Written from scratch. Development through benchmarking. **µBlock is not an "ad blocker", it's a blocker in the broad sense**, which happens to block ads through its support of [Adblock Plus filter syntax](https://adblockplus.org/en/filters). µBlock [extends](https://github.com/gorhill/uBlock/wiki/Filter-syntax-extensions) the syntax. @@ -25,31 +25,31 @@ My main goal with µBlock is to help users neutralize as much as can be privacy-

Chromium on Linux 64-bit


-The screenshots above were taken after visiting links in -reference benchmark -plus a bit of random browsing. All blockers were active at the same time, -thus they had to deal with exactly the same workload. Before the screenshots were -taken, I left the browser idle for many minutes so as to let the browser's +The screenshots above were taken after visiting links in +reference benchmark +plus a bit of random browsing. All blockers were active at the same time, +thus they had to deal with exactly the same workload. Before the screenshots were +taken, I left the browser idle for many minutes so as to let the browser's garbage collector kicks in. Also, after a while idling, it's good to open the dev -console for each extension and force a garbage collection cycle by clicking a couple of times -the trashcan icon in the _Timeline_ tab (this caused a ~15MB drop for µBlock and Adguard in Opera) +console for each extension and force a garbage collection cycle by clicking a couple of times +the trashcan icon in the _Timeline_ tab (this caused a ~15MB drop for µBlock and Adguard in Opera) as garbage collectors sometimes work in a very lazy way, so I did this for each extension.

Being lean doesn't mean blocking less.

-For details of benchmark, see latest +For details of benchmark, see latest µBlock and others: Blocking ads, trackers, malwares.

## Installation -From the [Chrome store](https://chrome.google.com/webstore/detail/µblock/cjpalhdlnbpafiamejdnhcphjbkeiagm), +From the [Chrome store](https://chrome.google.com/webstore/detail/µblock/cjpalhdlnbpafiamejdnhcphjbkeiagm), the [Opera store](https://addons.opera.com/en-gb/extensions/details/ublock/), or [manually](https://github.com/gorhill/uBlock/tree/master/dist#install). -To benefit from the higher efficiency, it is of course not advised to use an -inefficient blocker at the same time. µBlock will do as well or better than the +To benefit from the higher efficiency, it is of course not advised to use an +inefficient blocker at the same time. µBlock will do as well or better than the popular blockers out there. Also of interest: [About the required permissions](https://github.com/gorhill/uBlock/wiki/About-the-required-permissions). @@ -61,8 +61,8 @@ I think it is pretty obvious, except for this I suppose: ![Popup](https://raw.githubusercontent.com/gorhill/uBlock/master/doc/img/popup-1.png)  ![Popup](https://raw.githubusercontent.com/gorhill/uBlock/master/doc/img/popup-2.png) The big power button is to disable/enable µBlock **for the specific hostname -which can be extracted from the URL address of the current page**. (It applies to -the current web site only, it is **not** a global power button.) The state of the power +which can be extracted from the URL address of the current page**. (It applies to +the current web site only, it is **not** a global power button.) The state of the power switch for a specific site will be remembered. The right-hand screenshot shows optional [dynamic filtering](https://github.com/gorhill/uBlock/wiki/Dynamic-filtering) at work. @@ -71,22 +71,22 @@ The right-hand screenshot shows optional [dynamic filtering](https://github.com/ µBlock is born out of [HTTP Switchboard](https://github.com/gorhill/httpswitchboard). All the niceties of HTTPSB have been removed, and what is left is a straightforward -blocker which support EasyList and the likes, and also support host files. +blocker which support EasyList and the likes, and also support host files. Cosmetic filters ("element hiding") are supported. There is nothing more to it. But it does what popular blockers out there do, at a -fraction of CPU and memory usage for the same blocking power. Also, no unique user id +fraction of CPU and memory usage for the same blocking power. Also, no unique user id and no home means no phoning home (some popular blockers do this, just be careful). Free. Open source. For users by users. No donations sought. -Without the preset lists of filters, this extension is nothing. So if ever you -really do want to contribute something, think about the people working hard -to maintain the filter lists you are using, which were made available to use by +Without the preset lists of filters, this extension is nothing. So if ever you +really do want to contribute something, think about the people working hard +to maintain the filter lists you are using, which were made available to use by all for free. -You may contribute by helping to translate this project. I created an -[entry on Crowdin](https://crowdin.net/project/ublock), where you may contribute +You may contribute by helping to translate this project. I created an +[entry on Crowdin](https://crowdin.net/project/ublock), where you may contribute to the translation work. ## License diff --git a/import-crowdin.sh b/import-crowdin.sh deleted file mode 100755 index abc4b3478..000000000 --- a/import-crowdin.sh +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/bash -# -# This script assumes a linux environment - -echo "*** uBlock: Importing from Crowdin archive" -rm -r ~/Downloads/crowdin -unzip -q ~/Downloads/ublock.zip -d ~/Downloads/crowdin -cp ~/Downloads/crowdin/ar/messages.json ./_locales/ar/messages.json -cp ~/Downloads/crowdin/cs/messages.json ./_locales/cs/messages.json -cp ~/Downloads/crowdin/da/messages.json ./_locales/da/messages.json -cp ~/Downloads/crowdin/el/messages.json ./_locales/el/messages.json -cp ~/Downloads/crowdin/es-ES/messages.json ./_locales/es/messages.json -cp ~/Downloads/crowdin/et/messages.json ./_locales/et/messages.json -cp ~/Downloads/crowdin/fi/messages.json ./_locales/fi/messages.json -cp ~/Downloads/crowdin/he/messages.json ./_locales/he/messages.json -cp ~/Downloads/crowdin/hi/messages.json ./_locales/hi/messages.json -cp ~/Downloads/crowdin/hr/messages.json ./_locales/hr/messages.json -cp ~/Downloads/crowdin/hu/messages.json ./_locales/hu/messages.json -cp ~/Downloads/crowdin/id/messages.json ./_locales/id/messages.json -cp ~/Downloads/crowdin/it/messages.json ./_locales/it/messages.json -cp ~/Downloads/crowdin/ja/messages.json ./_locales/ja/messages.json -cp ~/Downloads/crowdin/mr/messages.json ./_locales/mr/messages.json -cp ~/Downloads/crowdin/no/messages.json ./_locales/nb/messages.json -cp ~/Downloads/crowdin/nl/messages.json ./_locales/nl/messages.json -cp ~/Downloads/crowdin/pl/messages.json ./_locales/pl/messages.json -cp ~/Downloads/crowdin/pt-BR/messages.json ./_locales/pt_BR/messages.json -cp ~/Downloads/crowdin/pt-PT/messages.json ./_locales/pt_PT/messages.json -cp ~/Downloads/crowdin/ro/messages.json ./_locales/ro/messages.json -cp ~/Downloads/crowdin/ru/messages.json ./_locales/ru/messages.json -cp ~/Downloads/crowdin/sv-SE/messages.json ./_locales/sv/messages.json -cp ~/Downloads/crowdin/tr/messages.json ./_locales/tr/messages.json -cp ~/Downloads/crowdin/uk/messages.json ./_locales/uk/messages.json -cp ~/Downloads/crowdin/vi/messages.json ./_locales/vi/messages.json -cp ~/Downloads/crowdin/zh-CN/messages.json ./_locales/zh_CN/messages.json - -# - -cp ~/Downloads/crowdin/ar/description.txt ./dist/description/description-ar.txt -cp ~/Downloads/crowdin/cs/description.txt ./dist/description/description-cs.txt -cp ~/Downloads/crowdin/da/description.txt ./dist/description/description-da.txt -#cp ~/Downloads/crowdin/el/description.txt ./dist/description/description-el.txt -cp ~/Downloads/crowdin/es-ES/description.txt ./dist/description/description-es.txt -cp ~/Downloads/crowdin/et/description.txt ./dist/description/description-et.txt -cp ~/Downloads/crowdin/fi/description.txt ./dist/description/description-fi.txt -cp ~/Downloads/crowdin/he/description.txt ./dist/description/description-he.txt -cp ~/Downloads/crowdin/hr/description.txt ./dist/description/description-hr.txt -cp ~/Downloads/crowdin/hu/description.txt ./dist/description/description-hu.txt -cp ~/Downloads/crowdin/id/description.txt ./dist/description/description-id.txt -cp ~/Downloads/crowdin/it/description.txt ./dist/description/description-it.txt -#cp ~/Downloads/crowdin/ja/description.txt ./dist/description/description-ja.txt -cp ~/Downloads/crowdin/no/description.txt ./dist/description/description-no.txt -cp ~/Downloads/crowdin/nl/description.txt ./dist/description/description-nl.txt -cp ~/Downloads/crowdin/pl/description.txt ./dist/description/description-pl.txt -cp ~/Downloads/crowdin/pt-BR/description.txt ./dist/description/description-pt_BR.txt -cp ~/Downloads/crowdin/pt-PT/description.txt ./dist/description/description-pt_PT.txt -cp ~/Downloads/crowdin/ro/description.txt ./dist/description/description-ro.txt -cp ~/Downloads/crowdin/ru/description.txt ./dist/description/description-ru.txt -cp ~/Downloads/crowdin/sv-SE/description.txt ./dist/description/description-sv.txt -cp ~/Downloads/crowdin/tr/description.txt ./dist/description/description-tr.txt -cp ~/Downloads/crowdin/uk/description.txt ./dist/description/description-uk.txt -#cp ~/Downloads/crowdin/vi/description.txt ./dist/description/description-vi.txt -cp ~/Downloads/crowdin/zh-CN/description.txt ./dist/description/description-zh_CN.txt - -# - -rm -r ~/Downloads/crowdin -echo "*** uBlock: Import done." diff --git a/js/messaging-client.js b/js/messaging-client.js deleted file mode 100644 index 660fa1a92..000000000 --- a/js/messaging-client.js +++ /dev/null @@ -1,141 +0,0 @@ -/******************************************************************************* - - µBlock - a Chromium browser extension to block requests. - Copyright (C) 2014 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 -*/ - -// This is the reference client-side implementation of µBlock's messaging -// infrastructure. The "server"-side implementation is in messaging.js. - -// The client-side implementation creates a port in order to connect to -// µBlock's background page. With this port we can "ask", "tell" or "announce": -// -// "ask": send a request and expect an answer using a callback. -// "tell": send a request with no expectation of an answer. -// "announce": send a request to be relayed to all connections -- no answer -// expected. -// -// The tricky part in this implementation is to ensure all the requests are -// uniquely identified, so that the background-page can keep track of these -// until it is ready to send back an answer, which will be tagged with the -// same id. The uniqueness must be true for all ports which connect to the -// background page at any given time. -// -// Currently using Math.random() to generate this id... I don't know about the -// implementation of Math.random(), but as long as I have a good expectation -// of uniqueness, it's ok, we are not dealing with critical stuff here. - -/* global chrome */ - -var messaging = (function(name){ - var port = null; - var requestId = 1; - var requestIdToCallbackMap = {}; - var listenCallback = null; - - var onPortMessage = function(details) { - if ( typeof details.id !== 'number' ) { - return; - } - // Announcement? - if ( details.id < 0 ) { - if ( listenCallback ) { - listenCallback(details.msg); - } - return; - } - var callback = requestIdToCallbackMap[details.id]; - if ( !callback ) { - return; - } - // Must be removed before calling client to be sure to not execute - // callback again if the client stops the messaging service. - delete requestIdToCallbackMap[details.id]; - callback(details.msg); - }; - - var start = function(name) { - port = chrome.runtime.connect({ name: name }); - port.onMessage.addListener(onPortMessage); - - // https://github.com/gorhill/uBlock/issues/193 - port.onDisconnect.addListener(stop); - }; - - var stop = function() { - listenCallback = null; - port.disconnect(); - port = null; - flushCallbacks(); - }; - - if ( typeof name === 'string' && name !== '' ) { - start(name); - } - - var ask = function(msg, callback) { - if ( port === null ) { - if ( typeof callback === 'function' ) { - callback(); - } - return; - } - if ( callback === undefined ) { - tell(msg); - return; - } - var id = requestId++; - port.postMessage({ id: id, msg: msg }); - requestIdToCallbackMap[id] = callback; - }; - - var tell = function(msg) { - if ( port !== null ) { - port.postMessage({ id: 0, msg: msg }); - } - }; - - var listen = function(callback) { - listenCallback = callback; - }; - - var flushCallbacks = function() { - var callback; - for ( var id in requestIdToCallbackMap ) { - if ( requestIdToCallbackMap.hasOwnProperty(id) === false ) { - continue; - } - callback = requestIdToCallbackMap[id]; - if ( !callback ) { - continue; - } - // Must be removed before calling client to be sure to not execute - // callback again if the client stops the messaging service. - delete requestIdToCallbackMap[id]; - callback(); - } - }; - - return { - start: start, - stop: stop, - ask: ask, - tell: tell, - listen: listen - }; -})(); diff --git a/js/messaging.js b/js/messaging.js deleted file mode 100644 index a6a00c815..000000000 --- a/js/messaging.js +++ /dev/null @@ -1,252 +0,0 @@ -/******************************************************************************* - - µBlock - a Chromium browser extension to block requests. - Copyright (C) 2014 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 -*/ - -/* global chrome, µBlock */ - -// So there might be memory leaks related to the direct use of sendMessage(), -// as per https://code.google.com/p/chromium/issues/detail?id=320723. The issue -// is not marked as resolved, and the last message from chromium dev is: -// -// "You can construct Port objects (runtime.connect) and emulate sendMessage -// "behaviour. The bug is that sendMessage doesn't clean up its Ports." -// -// So the point here is to have an infrastructure which allows relying more on -// direct use of Port objects rather than going through sendMessage(). - -/******************************************************************************/ -/******************************************************************************* - -// Here this is the "server"-side implementation. -// -// Reference client-side implementation is found in: -// -// messaging-client.js -// -// For instance, it needs to be cut & pasted for content scripts since -// I can not include in a simple way js file content from another js file. - -*******************************************************************************/ -/******************************************************************************/ - -µBlock.messaging = (function() { - -/******************************************************************************/ - -var runtimeIdGenerator = 1; -var nameToPortMap = {}; -var nameToListenerMap = {}; -var nullFunc = function(){}; - -/******************************************************************************/ - -var listenerNameFromPortName = function(portName) { - var pos = portName.indexOf('/'); - if ( pos === -1 ) { - return ''; - } - return portName.slice(0, pos); -}; - -var listenerFromPortName = function(portName) { - return nameToListenerMap[listenerNameFromPortName(portName)]; -}; - -/******************************************************************************/ - -var listen = function(portName, callback) { - var listener = nameToListenerMap[portName]; - if ( listener && listener !== callback ) { - throw 'Only one listener allowed'; - } - nameToListenerMap[portName] = callback; -}; - -/******************************************************************************/ - -var tell = function(target, msg) { - target += '/'; - for ( var portName in nameToPortMap ) { - if ( nameToPortMap.hasOwnProperty(portName) === false ) { - continue; - } - if ( portName.indexOf(target) === 0 ) { - nameToPortMap[portName].postMessage({ id: -1, msg: msg }); - } - } -}; - -/******************************************************************************/ - -var announce = function(msg) { - // Background page handler - defaultHandler(msg, null, nullFunc); - - // Extension pages & content scripts handlers - for ( var portName in nameToPortMap ) { - if ( nameToPortMap.hasOwnProperty(portName) === false ) { - continue; - } - nameToPortMap[portName].postMessage({ id: -1, msg: msg }); - } -}; - -/******************************************************************************/ - -var onMessage = function(request, port) { - var reqId = request.id; - // Annoucement: dispatch everywhere. - if ( reqId < 0 ) { - announce(request.msg); - return; - } - var listener = listenerFromPortName(port.name) || defaultHandler; - // Being told - if ( reqId === 0 ) { - listener(request.msg, port.sender, nullFunc); - return; - } - // Being asked - listener(request.msg, port.sender, function(response) { - port.postMessage({ - id: reqId, - msg: response !== undefined ? response : null - }); - }); -}; - -/******************************************************************************/ - -// Default is for commonly used messages. - -function defaultHandler(request, sender, callback) { - var µb = µBlock; - - // Async - switch ( request.what ) { - case 'getAssetContent': - return µb.assets.getLocal(request.url, callback); - - case 'loadUbiquitousAllowRules': - return µb.loadUbiquitousWhitelists(); - - default: - break; - } - - // Sync - var response; - - switch ( request.what ) { - case 'contextMenuEvent': - µb.contextMenuClientX = request.clientX; - µb.contextMenuClientY = request.clientY; - break; - - case 'forceReloadTab': - µb.forceReload(request.pageURL); - break; - - case 'getUserSettings': - response = µb.userSettings; - break; - - case 'gotoExtensionURL': - µb.utils.gotoExtensionURL(request.url); - break; - - case 'gotoURL': - µb.utils.gotoURL(request); - break; - - case 'reloadAllFilters': - µb.reloadPresetBlacklists(request.switches, request.update); - break; - - case 'userSettings': - response = µb.changeUserSettings(request.name, request.value); - break; - - default: - // console.error('µBlock> messaging.js / defaultHandler > unknown request: %o', request); - break; - } - - callback(response); -} - -// https://www.youtube.com/watch?v=rrzRgUAHqc8 - -/******************************************************************************/ - -// Port disconnected, relay this information to apropriate listener. - -var onDisconnect = function(port) { - // Notify listener of the disconnection -- using a reserved message id. - var listener = listenerFromPortName(port.name) || defaultHandler; - var msg = { - 'what': 'disconnected', - 'which': listenerNameFromPortName(port.name) - }; - listener(msg, port.sender, nullFunc); - - // Cleanup port if no longer in use. - if ( nameToPortMap.hasOwnProperty(port.name) ) { - delete nameToPortMap[port.name]; - port.onMessage.removeListener(onMessage); - port.onDisconnect.removeListener(onDisconnect); - } -}; - -/******************************************************************************/ - -var onConnect = function(port) { - // We must have a port name. - if ( typeof port.name !== 'string' || port.name === '' ) { - console.error('µBlock> messaging.js / onConnectHandler(): no port name!'); - return; - } - - // Ensure port name is unique - port.name += '/' + runtimeIdGenerator++; - - nameToPortMap[port.name] = port; - port.onMessage.addListener(onMessage); - port.onDisconnect.addListener(onDisconnect); -}; - -/******************************************************************************/ - -chrome.runtime.onConnect.addListener(onConnect); - -/******************************************************************************/ - -return { - listen: listen, - tell: tell, - announce: announce, - defaultHandler: defaultHandler -}; - -/******************************************************************************/ - -})(); - -/******************************************************************************/ diff --git a/make-chrome.sh b/make-chrome.sh deleted file mode 100755 index 95f648c70..000000000 --- a/make-chrome.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash -# -# This script assumes a linux environment - -echo "*** uBlock: Creating web store package" -echo "*** uBlock: Copying files" -cp -R assets dist/ublock/ -rm dist/ublock/assets/*.sh -cp -R css dist/ublock/ -cp -R img dist/ublock/ -cp -R js dist/ublock/ -cp -R lib dist/ublock/ -cp -R _locales dist/ublock/ -cp *.html dist/ublock/ -cp *.txt dist/ublock/ -cp manifest.json dist/ublock/ -echo "*** uBlock: Package done." - diff --git a/make-noassets.sh b/make-noassets.sh deleted file mode 100755 index 43ee2c16d..000000000 --- a/make-noassets.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash -# -# This script assumes a linux environment - -echo "*** uBlock: Creating web store package" -echo "*** uBlock: Copying files" -cp -R css dist/ublock/ -cp -R img dist/ublock/ -cp -R js dist/ublock/ -cp -R lib dist/ublock/ -cp -R _locales dist/ublock/ -cp *.html dist/ublock/ -cp *.txt dist/ublock/ -cp manifest.json dist/ublock/ -echo "*** uBlock: Package done." diff --git a/meta/config.json b/meta/config.json new file mode 100644 index 000000000..f5b8010ac --- /dev/null +++ b/meta/config.json @@ -0,0 +1,31 @@ +{ + "name": "µBlock", + "clean_name": "ublock", + "url": "https://github.com/gorhill/uBlock", + "author": "Raymond Hill", + "author_email": "rhill@raymondhill.net", + "author_www": "http://raymondhill.net/", + "version": "0.7.0.7", + "def_lang": "en", + "vendors": { + "crx": { + "app_id": "cjpalhdlnbpafiamejdnhcphjbkeiagm", + "manifest": "manifest.json", + "locales": "_locales", + "file_ext": ".crx", + "cert_key": "../meta/crx/key.pem" + }, + "safariextz": { + "app_id": "net.gorhill.uBlock", + "dir": "uBlock.safariextension", + "manifest": { + "Info": "Info.plist", + "Settings": "Settings.plist" + }, + "file_ext": ".safariextz", + "developer_identifier": "T7HSFKB9M5", + "cert_dir": "../meta/safariextz/certs/", + "cert_key": "../meta/safariextz/certs/key.pem" + } + } +} \ No newline at end of file diff --git a/meta/crx/manifest.json b/meta/crx/manifest.json new file mode 100644 index 000000000..22641fa83 --- /dev/null +++ b/meta/crx/manifest.json @@ -0,0 +1,62 @@ +{ + "manifest_version": 2, + "minimum_chrome_version": "22.0", + "default_locale": "{def_lang}", + "update_url": "https://clients2.google.com/service/update2/crx", + + "version": "{version}", + "name": "__MSG_extName__", + "description": "__MSG_extShortDesc__", + "homepage_url": "{url}", + "author": "{author}", + "developer": { + "name": "{author}", + "email": "{author_email}" + }, + + "icons": { + "16": "img/icon_16.png", + "128": "img/icon_128.png" + }, + + "permissions": [ + "contextMenus", + "downloads", + "storage", + "tabs", + "unlimitedStorage", + "webNavigation", + "webRequest", + "webRequestBlocking", + "http://*/*", + "https://*/*" + ], + + "background": { + "page": "background.html" + }, + "options_page": "dashboard.html", + "content_scripts": [ + { + "matches": ["http://*/*", "https://*/*"], + "js": ["js/vapi-client.js", "js/contentscript-start.js"], + "run_at": "document_start", + "all_frames": true + }, + { + "matches": ["http://*/*", "https://*/*"], + "js": ["js/contentscript-end.js"], + "run_at": "document_end", + "all_frames": true + } + ], + + "browser_action": { + "default_icon": { + "19": "img/browsericons/icon19-off.png", + "38": "img/browsericons/icon38-off.png" + }, + "default_title": "{name}", + "default_popup": "popup.html" + } +} \ No newline at end of file diff --git a/meta/crx/update_crx.xml b/meta/crx/update_crx.xml new file mode 100644 index 000000000..74078e8c0 --- /dev/null +++ b/meta/crx/update_crx.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/meta/safariextz/Info.plist b/meta/safariextz/Info.plist new file mode 100644 index 000000000..125dc1be7 --- /dev/null +++ b/meta/safariextz/Info.plist @@ -0,0 +1,87 @@ + + + + + Author + {author} + Builder Version + 534.57.2 + CFBundleDisplayName + {name} + CFBundleIdentifier + {app_id} + CFBundleInfoDictionaryVersion + 6.0 + CFBundleShortVersionString + {version} + CFBundleVersion + {build_number} + Chrome + + Database Quota + 52428800 + Global Page + background.html + Popovers + + + Identifier + popover + Filename + popup.html + + + Toolbar Items + + + Identifier + toolbarItem + Image + img/icon_16.png + Label + {name} + Popover + popover + + + + Content + + Scripts + + Start + + js/vapi-client.js + js/contentscript-start.js + + End + + js/contentscript-end.js + + + Whitelist + + http://*/* + https://*/* + + + Description + {description} + ExtensionInfoDictionaryVersion + 1.0 + Permissions + + Website Access + + Include Secure Pages + + Level + All + + + + Website + {url} + + diff --git a/meta/safariextz/update_safariextz.plist b/meta/safariextz/update_safariextz.plist new file mode 100644 index 000000000..4c4f28b3f --- /dev/null +++ b/meta/safariextz/update_safariextz.plist @@ -0,0 +1,21 @@ + + + + + Extension Updates + + + CFBundleIdentifier + {app_id} + Developer Identifier + {developer_identifier} + CFBundleShortVersionString + {version} + CFBundleVersion + {build_number} + URL + {url}{name}.safariextz + + + + diff --git a/1p-filters.html b/src/1p-filters.html similarity index 80% rename from 1p-filters.html rename to src/1p-filters.html index 2b343211d..957b3d857 100644 --- a/1p-filters.html +++ b/src/1p-filters.html @@ -18,11 +18,14 @@

- - - - - + diff --git a/3p-filters.html b/src/3p-filters.html similarity index 84% rename from 3p-filters.html rename to src/3p-filters.html index a8c3d0253..9a424bab0 100644 --- a/3p-filters.html +++ b/src/3p-filters.html @@ -2,7 +2,7 @@ -HTTP Switchboard — Ubiquitous rules +µBlock — Ubiquitous rules @@ -31,11 +31,16 @@
- - - - - + diff --git a/src/Info.plist b/src/Info.plist new file mode 100644 index 000000000..4bf24ae20 --- /dev/null +++ b/src/Info.plist @@ -0,0 +1,87 @@ + + + + + Author + Raymond Hill + Builder Version + 534.57.2 + CFBundleDisplayName + µBlock + CFBundleIdentifier + net.gorhill.uBlock + CFBundleInfoDictionaryVersion + 6.0 + CFBundleShortVersionString + 0.7.0.7 + CFBundleVersion + 1452035 + Chrome + + Database Quota + 52428800 + Global Page + background.html + Popovers + + + Identifier + popover + Filename + popup.html + + + Toolbar Items + + + Identifier + toolbarItem + Image + img/icon_16.png + Label + µBlock + Popover + popover + + + + Content + + Scripts + + Start + + js/vapi-client.js + js/contentscript-start.js + + End + + js/contentscript-end.js + + + Whitelist + + http://*/* + https://*/* + + + Description + Finally, an efficient blocker for Chromium-based browsers. Easy on CPU and memory. + ExtensionInfoDictionaryVersion + 1.0 + Permissions + + Website Access + + Include Secure Pages + + Level + All + + + + Website + https://github.com/gorhill/uBlock + + diff --git a/_locales/ar/messages.json b/src/_locales/ar/messages.json similarity index 100% rename from _locales/ar/messages.json rename to src/_locales/ar/messages.json diff --git a/_locales/cs/messages.json b/src/_locales/cs/messages.json similarity index 100% rename from _locales/cs/messages.json rename to src/_locales/cs/messages.json diff --git a/_locales/da/messages.json b/src/_locales/da/messages.json similarity index 100% rename from _locales/da/messages.json rename to src/_locales/da/messages.json diff --git a/_locales/de/messages.json b/src/_locales/de/messages.json similarity index 100% rename from _locales/de/messages.json rename to src/_locales/de/messages.json diff --git a/_locales/el/messages.json b/src/_locales/el/messages.json similarity index 100% rename from _locales/el/messages.json rename to src/_locales/el/messages.json diff --git a/_locales/en/messages.json b/src/_locales/en/messages.json similarity index 100% rename from _locales/en/messages.json rename to src/_locales/en/messages.json diff --git a/_locales/es/messages.json b/src/_locales/es/messages.json similarity index 100% rename from _locales/es/messages.json rename to src/_locales/es/messages.json diff --git a/_locales/et/messages.json b/src/_locales/et/messages.json similarity index 100% rename from _locales/et/messages.json rename to src/_locales/et/messages.json diff --git a/_locales/fi/messages.json b/src/_locales/fi/messages.json similarity index 100% rename from _locales/fi/messages.json rename to src/_locales/fi/messages.json diff --git a/_locales/fr/messages.json b/src/_locales/fr/messages.json similarity index 100% rename from _locales/fr/messages.json rename to src/_locales/fr/messages.json diff --git a/_locales/he/messages.json b/src/_locales/he/messages.json similarity index 100% rename from _locales/he/messages.json rename to src/_locales/he/messages.json diff --git a/_locales/hi/messages.json b/src/_locales/hi/messages.json similarity index 100% rename from _locales/hi/messages.json rename to src/_locales/hi/messages.json diff --git a/_locales/hr/messages.json b/src/_locales/hr/messages.json similarity index 100% rename from _locales/hr/messages.json rename to src/_locales/hr/messages.json diff --git a/_locales/hu/messages.json b/src/_locales/hu/messages.json similarity index 100% rename from _locales/hu/messages.json rename to src/_locales/hu/messages.json diff --git a/_locales/id/messages.json b/src/_locales/id/messages.json similarity index 100% rename from _locales/id/messages.json rename to src/_locales/id/messages.json diff --git a/_locales/it/messages.json b/src/_locales/it/messages.json similarity index 100% rename from _locales/it/messages.json rename to src/_locales/it/messages.json diff --git a/_locales/ja/messages.json b/src/_locales/ja/messages.json similarity index 100% rename from _locales/ja/messages.json rename to src/_locales/ja/messages.json diff --git a/_locales/mr/messages.json b/src/_locales/mr/messages.json similarity index 100% rename from _locales/mr/messages.json rename to src/_locales/mr/messages.json diff --git a/_locales/nb/messages.json b/src/_locales/nb/messages.json similarity index 100% rename from _locales/nb/messages.json rename to src/_locales/nb/messages.json diff --git a/_locales/nl/messages.json b/src/_locales/nl/messages.json similarity index 100% rename from _locales/nl/messages.json rename to src/_locales/nl/messages.json diff --git a/_locales/pl/messages.json b/src/_locales/pl/messages.json similarity index 100% rename from _locales/pl/messages.json rename to src/_locales/pl/messages.json diff --git a/_locales/pt_BR/messages.json b/src/_locales/pt_BR/messages.json similarity index 100% rename from _locales/pt_BR/messages.json rename to src/_locales/pt_BR/messages.json diff --git a/_locales/pt_PT/messages.json b/src/_locales/pt_PT/messages.json similarity index 100% rename from _locales/pt_PT/messages.json rename to src/_locales/pt_PT/messages.json diff --git a/_locales/ro/messages.json b/src/_locales/ro/messages.json similarity index 100% rename from _locales/ro/messages.json rename to src/_locales/ro/messages.json diff --git a/_locales/ru/messages.json b/src/_locales/ru/messages.json similarity index 100% rename from _locales/ru/messages.json rename to src/_locales/ru/messages.json diff --git a/_locales/sv/messages.json b/src/_locales/sv/messages.json similarity index 100% rename from _locales/sv/messages.json rename to src/_locales/sv/messages.json diff --git a/_locales/tr/messages.json b/src/_locales/tr/messages.json similarity index 100% rename from _locales/tr/messages.json rename to src/_locales/tr/messages.json diff --git a/_locales/uk/messages.json b/src/_locales/uk/messages.json similarity index 100% rename from _locales/uk/messages.json rename to src/_locales/uk/messages.json diff --git a/_locales/vi/messages.json b/src/_locales/vi/messages.json similarity index 100% rename from _locales/vi/messages.json rename to src/_locales/vi/messages.json diff --git a/_locales/zh_CN/messages.json b/src/_locales/zh_CN/messages.json similarity index 100% rename from _locales/zh_CN/messages.json rename to src/_locales/zh_CN/messages.json diff --git a/about.html b/src/about.html similarity index 82% rename from about.html rename to src/about.html index f46fb0527..f6589be26 100644 --- a/about.html +++ b/src/about.html @@ -13,7 +13,7 @@

µBlock