Skip to content

Loading…

Fix for #1122 #1125

Closed
wants to merge 14 commits into from

3 participants

@AlexVallat
Collaborator

Not sure why busyFlags can be undefined, but through testing it can be, and when it is, it causes #1122

AlexVallat added some commits
@AlexVallat AlexVallat Use a nsIWebProgressListener instead of a tabsProgressListener for lo…
…cation change monitoring
6123335
@AlexVallat AlexVallat More restrictive monitoring.
Probably doesn't make a difference, but at least theoretically more efficient.
7ec717d
@AlexVallat AlexVallat Fix for #1122 7f95821
@Deathamns

This doesn't seem to fix it. As @gorhill mentioned, the problem was that busyFlags had a value of 3, not undefined.
If this busyFlags was an issue for Fennec only, then could it be checked only for that?

@AlexVallat
Collaborator

It fixes it for me, tested with Firefox 37 and 39. If you are still reproducing the issue even with this change, perhaps you could investigate further?

I'm not entirely clear on why there has to be a special path for about:blank and about:newtab at all, to be honest - why do those two need to call onNavigation where everything else just calls setIcon?

@Deathamns

I tested with Firefox 29, and latest Nightly. I got 3 for busyFlags.

About about:blank and about:newtab.

@AlexVallat
Collaborator

It might be worth revisiting that about:blank code, then. When I remove any special case and just use:

onTabSelect: function({target}) {
        vAPI.setIcon(vAPI.tabs.getTabId(target), getOwnerWindow(target));
        return;
},

the popup works perfectly well when clicking the New Tab button.

@Deathamns

That is how it was before.
The popup shows up, yes, but onNavigation doesn't fire for those about pages when a tab is opened (you can see that the toolbar button stays gray).
I'm not sure if it's worth dealing with these cases, because I can't think any scenario which could cause trouble, but to keep this workaround and fix the issue at the same time, checking busyFlags only for Fennec would be enough.

@AlexVallat
Collaborator

Well, it's up to you, if you want to just stick in an if vAPI.fennec check in. I still think it would be better to have onTabSelect only call setIcon and never onNavigate, then if the grey icon needs fixing come up with a better workaround elsewhere...

@AlexVallat
Collaborator

Some further investigation: tabsProgressListener.onLocationChange doesn't seem to fire for about:blank, but interestingly, webProgressListener does. Which means the stuff we were discussing in #1084 might actually have some tangible benefit after all! Using that branch, together with the simplified onTabSelect function, it actually does the job and the icon goes red as expected.

@Deathamns

Alright, let's use webProgressListener.

@AlexVallat
Collaborator

Great. I've merged in the webProgressListener branch, and I'll create a new pull request for that one (as this one seems to think there are 58 changed files, which is not right!)

Edit: it is #1135

@AlexVallat AlexVallat closed this
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Mar 26, 2015
  1. @AlexVallat
  2. @AlexVallat

    More restrictive monitoring.

    AlexVallat committed
    Probably doesn't make a difference, but at least theoretically more efficient.
Commits on Mar 30, 2015
  1. @AlexVallat

    Fix for #1122

    AlexVallat committed
  2. @gorhill
  3. @gorhill

    fine tuning warning page

    gorhill committed
  4. @AlexVallat
  5. @gorhill

    updated screenshot

    gorhill committed
  6. @gorhill

    screenshot which matches text

    gorhill committed
  7. @gorhill

    this fixes #1128

    gorhill committed
  8. @gorhill
Commits on Mar 31, 2015
  1. @AlexVallat

    Fix for #1122

    AlexVallat committed
  2. @AlexVallat
  3. @AlexVallat

    Merge branch 'master' of https://github.com/AlexVallat/uBlock

    AlexVallat committed
    Conflicts:
    	platform/firefox/vapi-background.js
  4. @AlexVallat

    Merge branch 'webProgressListener'

    AlexVallat committed
    Conflicts:
    	platform/firefox/vapi-background.js
This page is out of date. Refresh to see the latest.
Showing with 713 additions and 247 deletions.
  1. +1 −1 dist/description/description-ar.txt
  2. +1 −1 dist/description/description-hu.txt
  3. +2 −2 dist/description/description-ru.txt
  4. BIN doc/img/page-block.png
  5. +0 −4 platform/chromium/vapi-background.js
  6. +35 −7 platform/firefox/frameModule.js
  7. +5 −1 platform/firefox/frameScript.js
  8. +39 −75 platform/firefox/vapi-background.js
  9. +18 −0 platform/safari/vapi-background.js
  10. +12 −4 src/_locales/ar/messages.json
  11. +15 −7 src/_locales/bg/messages.json
  12. +10 −2 src/_locales/ca/messages.json
  13. +10 −2 src/_locales/cs/messages.json
  14. +10 −2 src/_locales/da/messages.json
  15. +10 −2 src/_locales/de/messages.json
  16. +10 −2 src/_locales/el/messages.json
  17. +10 −2 src/_locales/en/messages.json
  18. +10 −2 src/_locales/es/messages.json
  19. +10 −2 src/_locales/et/messages.json
  20. +16 −8 src/_locales/fa/messages.json
  21. +10 −2 src/_locales/fi/messages.json
  22. +10 −2 src/_locales/fil/messages.json
  23. +10 −2 src/_locales/fr/messages.json
  24. +10 −2 src/_locales/he/messages.json
  25. +10 −2 src/_locales/hi/messages.json
  26. +10 −2 src/_locales/hr/messages.json
  27. +29 −21 src/_locales/hu/messages.json
  28. +12 −4 src/_locales/id/messages.json
  29. +10 −2 src/_locales/it/messages.json
  30. +10 −2 src/_locales/ja/messages.json
  31. +10 −2 src/_locales/ko/messages.json
  32. +12 −4 src/_locales/lt/messages.json
  33. +11 −3 src/_locales/lv/messages.json
  34. +10 −2 src/_locales/mr/messages.json
  35. +10 −2 src/_locales/nb/messages.json
  36. +10 −2 src/_locales/nl/messages.json
  37. +10 −2 src/_locales/pl/messages.json
  38. +10 −2 src/_locales/pt_BR/messages.json
  39. +10 −2 src/_locales/pt_PT/messages.json
  40. +10 −2 src/_locales/ro/messages.json
  41. +10 −2 src/_locales/ru/messages.json
  42. +10 −2 src/_locales/sk/messages.json
  43. +12 −4 src/_locales/sl/messages.json
  44. +10 −2 src/_locales/sq/messages.json
  45. +10 −2 src/_locales/sr/messages.json
  46. +10 −2 src/_locales/sv/messages.json
  47. +12 −4 src/_locales/te/messages.json
  48. +14 −6 src/_locales/tr/messages.json
  49. +11 −3 src/_locales/uk/messages.json
  50. +10 −2 src/_locales/vi/messages.json
  51. +11 −3 src/_locales/zh_CN/messages.json
  52. +10 −2 src/_locales/zh_TW/messages.json
  53. +9 −7 src/document-blocked.html
  54. +43 −13 src/js/document-blocked.js
  55. +1 −1 src/js/messaging.js
  56. +2 −2 src/js/static-net-filtering.js
  57. +20 −0 src/js/storage.js
  58. +60 −0 src/js/traffic.js
View
2 dist/description/description-ar.txt
@@ -2,7 +2,7 @@
توضيح عام لكفاءة الإضافة: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
-الإستخدام: زر التشغيل الكبير في النافذة المنبثقة هو لتعطيل أو تشغيل ميكروبلوك للموقع الحالي. هو ينطبق على الموقع الحالي فقط، و ليس زر تشغيل عام.
+الإستخدام: زر التشغيل الكبير في النافذة المنبثقة هو لتعطيل أو تشغيل uBlock للموقع الحالي. هو ينطبق على الموقع الحالي فقط، و ليس زر تشغيل عام.
***
View
2 dist/description/description-hu.txt
@@ -26,7 +26,7 @@ Egyéb listák is kiválaszthatók a felhasználó igénye szerint:
Természetesen, több szűrő használatával a memóriaigény is növekszik. Ennek ellenére Fanboy két extra listája és a hpHosts (reklám és követőszerverek) lista hozzáadásával a uBlock memóriafogyasztása még mindig alacsonyabb, mint a legnépszerűbb blokkolóké.
-Emellett, néhány extra lista kiválasztásával megnövekszik az esély arra, hogy a weboldalak használhatatlanná válnak -- főleg azon listákról van szó, melyek normál esetben hosts fájlként használatosak.
+Emellett, néhány extra lista kiválasztásával megnövekszik az esély arra, hogy a webhelyek használhatatlanná válnak -- főleg azon listákról van szó, melyek normál esetben hosts fájlként használatosak.
***
View
4 dist/description/description-ru.txt
@@ -2,7 +2,7 @@
Иллюстрированный обзор его эффективности: https://github.com/gorhill/uBlock/wiki/uBlock-vs.-ABP:-efficiency-compared
-Использование: Нажмите большую кнопку «Включение» в выпадающем окне, чтобы включить или отключить uBlock для текущего сайта. Эта кнопка применяется только на текущий веб-сайт, она не глобальна.
+Использование: нажмите большую кнопку «Включение» в выпадающем окне, чтобы включить или отключить uBlock для текущего сайта. Это действует только для текущего сайта, а не для всех.
***
@@ -24,7 +24,7 @@
- Spam404
- И т. д.
-Конечно, чем больше фильтров, тем выше использование памяти. Тем не менее, даже после добавления трёх дополнительных списков, uBlock всё ещё использует меньше памяти, чем другие популярные блокировщики.
+Конечно, чем больше фильтров, тем выше использование памяти. Тем не менее даже после добавления трёх дополнительных списков uBlock всё ещё потребляет меньше памяти, чем другие популярные блокировщики.
Также имейте в виду, что некоторые их этих списков имеют высокую вероятность поломать веб-сайт, особенно те, что созданы из хост-файлов.
View
BIN doc/img/page-block.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
4 platform/chromium/vapi-background.js
@@ -319,9 +319,6 @@ vAPI.tabs.open = function(details) {
vAPI.tabs.replace = function(tabId, url) {
var targetURL = url;
- if ( typeof targetURL !== 'string' || targetURL === '' ) {
- return;
- }
// extension pages
if ( /^[\w-]{2,}:/.test(targetURL) !== true ) {
@@ -340,7 +337,6 @@ vAPI.tabs.replace = function(tabId, url) {
if ( chrome.runtime.lastError ) {
return;
}
-
});
};
View
42 platform/firefox/frameModule.js
@@ -23,10 +23,12 @@
/******************************************************************************/
-this.EXPORTED_SYMBOLS = ['contentObserver'];
+this.EXPORTED_SYMBOLS = ['contentObserver', 'LocationChangeListener'];
const {interfaces: Ci, utils: Cu} = Components;
const {Services} = Cu.import('resource://gre/modules/Services.jsm', null);
+const {XPCOMUtils} = Cu.import('resource://gre/modules/XPCOMUtils.jsm', null);
+
const hostName = Services.io.newURI(Components.stack.filename, null, null).host;
// Cu.import('resource://gre/modules/devtools/Console.jsm');
@@ -65,16 +67,12 @@ const contentObserver = {
.getService(Ci.nsICategoryManager);
},
- QueryInterface: (function() {
- let {XPCOMUtils} = Cu.import('resource://gre/modules/XPCOMUtils.jsm', null);
-
- return XPCOMUtils.generateQI([
+ QueryInterface: XPCOMUtils.generateQI([
Ci.nsIFactory,
Ci.nsIObserver,
Ci.nsIContentPolicy,
Ci.nsISupportsWeakReference
- ]);
- })(),
+ ]),
createInstance: function(outer, iid) {
if ( outer ) {
@@ -312,6 +310,36 @@ const contentObserver = {
/******************************************************************************/
+const locationChangedMessageName = hostName + ':locationChanged';
+
+const LocationChangeListener = function(docShell) {
+ if (docShell) {
+ docShell.QueryInterface(Ci.nsIInterfaceRequestor);
+
+ this.docShell = docShell.getInterface(Ci.nsIWebProgress);
+ this.messageManager = docShell.getInterface(Ci.nsIContentFrameMessageManager);
+
+ if (this.messageManager && typeof this.messageManager.sendAsyncMessage === 'function') {
+ this.docShell.addProgressListener(this, Ci.nsIWebProgress.NOTIFY_LOCATION);
+ }
+ }
+}
+
+LocationChangeListener.prototype.QueryInterface = XPCOMUtils.generateQI(["nsIWebProgressListener", "nsISupportsWeakReference"]);
+
+LocationChangeListener.prototype.onLocationChange = function(webProgress, request, location, flags) {
+ if ( !webProgress.isTopLevel ) {
+ return;
+ }
+
+ this.messageManager.sendAsyncMessage(locationChangedMessageName, {
+ url: location.asciiSpec,
+ flags: flags,
+ });
+};
+
+/******************************************************************************/
+
contentObserver.register();
/******************************************************************************/
View
6 platform/firefox/frameScript.js
@@ -21,13 +21,15 @@
/******************************************************************************/
+var locationChangeListener; // Keep alive while frameScript is alive
+
(function() {
'use strict';
/******************************************************************************/
-let {contentObserver} = Components.utils.import(
+let {contentObserver, LocationChangeListener} = Components.utils.import(
Components.stack.filename.replace('Script', 'Module'),
null
);
@@ -54,6 +56,8 @@ let onLoadCompleted = function() {
addMessageListener('ublock-load-completed', onLoadCompleted);
+locationChangeListener = new LocationChangeListener(docShell);
+
/******************************************************************************/
})();
View
114 platform/firefox/vapi-background.js
@@ -295,11 +295,9 @@ var windowWatcher = {
if ( tabBrowser.deck ) {
// Fennec
tabContainer = tabBrowser.deck;
- tabContainer.addEventListener('DOMTitleChanged', tabWatcher.onFennecLocationChange);
} else if ( tabBrowser.tabContainer ) {
// desktop Firefox
tabContainer = tabBrowser.tabContainer;
- tabBrowser.addTabsProgressListener(tabWatcher);
vAPI.contextMenu.register(this.document);
} else {
return;
@@ -321,8 +319,6 @@ var windowWatcher = {
/******************************************************************************/
var tabWatcher = {
- SAME_DOCUMENT: Ci.nsIWebProgressListener.LOCATION_CHANGE_SAME_DOCUMENT,
-
onTabClose: function({target}) {
// target is tab in Firefox, browser in Fennec
var tabId = vAPI.tabs.getTabId(target);
@@ -331,68 +327,9 @@ var tabWatcher = {
},
onTabSelect: function({target}) {
- // target is tab in Firefox, browser in Fennec
- var browser = (target.linkedBrowser || target);
- var URI = browser.currentURI;
- var aboutPath = URI.schemeIs('about') && URI.path;
- var tabId = vAPI.tabs.getTabId(target);
-
- if ( !aboutPath || (aboutPath !== 'blank' && aboutPath !== 'newtab') ) {
- vAPI.setIcon(tabId, getOwnerWindow(target));
- return;
- }
-
- if ( browser.webNavigation.busyFlags === 0 /*BUSY_FLAGS_NONE*/ ) {
- vAPI.tabs.onNavigation({
- frameId: 0,
- tabId: tabId,
- url: URI.asciiSpec
- });
- }
- },
-
- onLocationChange: function(browser, webProgress, request, location, flags) {
- if ( !webProgress.isTopLevel ) {
- return;
- }
-
- var tabId = vAPI.tabs.getTabId(browser);
-
- // LOCATION_CHANGE_SAME_DOCUMENT = "did not load a new document"
- if ( flags & this.SAME_DOCUMENT ) {
- vAPI.tabs.onUpdated(tabId, {url: location.asciiSpec}, {
- frameId: 0,
- tabId: tabId,
- url: browser.currentURI.asciiSpec
- });
- return;
- }
-
- // https://github.com/gorhill/uBlock/issues/105
- // Allow any kind of pages
- vAPI.tabs.onNavigation({
- frameId: 0,
- tabId: tabId,
- url: location.asciiSpec
- });
+ vAPI.setIcon(vAPI.tabs.getTabId(target), getOwnerWindow(target));
+ return;
},
-
- onFennecLocationChange: function({target: doc}) {
- // Fennec "equivalent" to onLocationChange
- // note that DOMTitleChanged is selected as it fires very early
- // (before DOMContentLoaded), and it does fire even if there is no title
- var win = doc.defaultView;
- if ( win !== win.top ) {
- return;
- }
-
- vAPI.tabs.onNavigation({
- frameId: 0,
- tabId: vAPI.tabs.getTabId(getOwnerWindow(win).BrowserApp.getTabForWindow(win)),
- url: Services.io.newURI(win.location.href, null, null).asciiSpec
- });
- }
-
};
/******************************************************************************/
@@ -444,7 +381,6 @@ vAPI.tabs = {};
/******************************************************************************/
vAPI.tabs.registerListeners = function() {
- // onNavigation and onUpdated handled with tabWatcher.onLocationChange
// onClosed - handled in tabWatcher.onTabClose
// onPopup - handled in httpObserver.handlePopup
@@ -470,7 +406,6 @@ vAPI.tabs.registerListeners = function() {
if ( tabBrowser.deck ) {
// Fennec
tabContainer = tabBrowser.deck;
- tabContainer.removeEventListener('DOMTitleChanged', tabWatcher.onFennecLocationChange);
} else if ( tabBrowser.tabContainer ) {
tabContainer = tabBrowser.tabContainer;
tabBrowser.removeTabsProgressListener(tabWatcher);
@@ -1264,14 +1199,6 @@ var httpObserver = {
return;
}
- if ( vAPI.fennec && lastRequest.type === this.MAIN_FRAME ) {
- vAPI.tabs.onNavigation({
- frameId: 0,
- tabId: lastRequest.tabId,
- url: URI.asciiSpec
- });
- }
-
// If request is not handled we may use the data in on-modify-request
if ( channel instanceof Ci.nsIWritablePropertyBag ) {
channel.setProperty(this.REQDATAKEY, [
@@ -1396,6 +1323,38 @@ vAPI.net.registerListeners = function() {
shouldLoadListener
);
+ var locationChangedListenerMessageName = location.host + ':locationChanged';
+ var locationChangedListener = function(e) {
+ var details = e.data;
+ var browser = e.target;
+ var tabId = vAPI.tabs.getTabId(browser);
+
+ //console.debug("nsIWebProgressListener: onLocationChange: " + details.url + " (" + details.flags + ")");
+
+ // LOCATION_CHANGE_SAME_DOCUMENT = "did not load a new document"
+ if ( details.flags & Ci.nsIWebProgressListener.LOCATION_CHANGE_SAME_DOCUMENT ) {
+ vAPI.tabs.onUpdated(tabId, {url: details.url}, {
+ frameId: 0,
+ tabId: tabId,
+ url: browser.currentURI.asciiSpec
+ });
+ return;
+ }
+
+ // https://github.com/gorhill/uBlock/issues/105
+ // Allow any kind of pages
+ vAPI.tabs.onNavigation({
+ frameId: 0,
+ tabId: tabId,
+ url: details.url,
+ });
+ }
+
+ vAPI.messaging.globalMessageManager.addMessageListener(
+ locationChangedListenerMessageName,
+ locationChangedListener
+ );
+
httpObserver.register();
cleanupTasks.push(function() {
@@ -1404,6 +1363,11 @@ vAPI.net.registerListeners = function() {
shouldLoadListener
);
+ vAPI.messaging.globalMessageManager.removeMessageListener(
+ locationChangedListenerMessageName,
+ locationChangedListener
+ );
+
httpObserver.unregister();
});
};
View
18 platform/safari/vapi-background.js
@@ -377,6 +377,24 @@
/******************************************************************************/
+ // Replace the URL of a tab. Noop if the tab does not exist.
+
+ vAPI.tabs.replace = function(tabId, url) {
+ var targetURL = url;
+
+ // extension pages
+ if ( /^[\w-]{2,}:/.test(targetURL) !== true ) {
+ targetURL = vAPI.getURL(targetURL);
+ }
+
+ var tab = this.stack[tabId];
+ if ( tab ) {
+ tab.url = targetURL;
+ }
+ };
+
+ /******************************************************************************/
+
vAPI.tabs.remove = function(tabIds) {
if(tabIds instanceof SafariBrowserTab) {
tabIds = this.getTabId(tabIds);
View
16 src/_locales/ar/messages.json
@@ -112,7 +112,7 @@
"description":""
},
"popupHitDomainCountPrompt":{
- "message":"النطاقات المتصلة",
+ "message":"النطاقات متصلة",
"description":"appears in popup"
},
"popupHitDomainCount":{
@@ -204,7 +204,7 @@
"description":"English: Parse and enforce Adblock+ element hiding filters."
},
"3pParseAllABPHideFiltersInfo":{
- "message":"<p> هذا الخيار يمكن من تحليل و تطبيق <a href=\"https:\/\/adblockplus.org\/en\/faq_internal#elemhide\"> فلاتر<\/a> &ldquo;إخفاء العناصر&rdquo; المتوافقة مع Adblock Plus. هذه الفلاتر هي تجميلية أساسا، وظيفتها إخفاء العناصر في صفحة الويب التي تعبر مصدر إزعاج بصري، و التي لا يمكن حجبها بإستعمال محرك الفلاتر المبني على طلبات الشبكة. <\/p><p> تفعيل هذه الخاصية يزيد من أثر <i>µBlock<\/i> على الذاكرة.<\/p>",
+ "message":"هذا الخيار يفعل تحليل وتطبيق فلاتر <a href=\"https:\/\/adblockplus.org\/en\/faq_internal#elemhide\">Adblock Plus-compatible &ldquo;element hiding&rdquo; filters<\/a> هذي الفلاتر مخصصه للتجميل الصفحه. هذي الفلاتر تخفي بعض صناديق او اعلانات المزعجه التي لا يمنعها محرك الفلاتر تفعيل هذي الخاصيه سوف يجعل الاضافه تستعمل الذاكره اكثر",
"description":"English: see English messages.json"
},
"3pListsOfBlockedHostsHeader":{
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"واصل على مسؤوليتك الخاصة",
- "description":"English: Proceed at your own risk"
+ "message":"تعطيل الحجب الصارم على {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"مؤقتا",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"بشكل دائم",
+ "description":"English: Permanently"
},
"dummy":{
"message":"يجب أن يكون هذا الإدخال آخر واحد",
View
22 src/_locales/bg/messages.json
@@ -4,7 +4,7 @@
"description":"extension name."
},
"extShortDesc":{
- "message":"Най-накрая, ефективен рекламен блокер. С малки изисквания за процесор и памет.",
+ "message":"Най-накрая, ефективен рекламен блокер с малки изисквания за процесор и памет.",
"description":"this will be in the chrome web store: must be 132 characters or less"
},
"dashboardName":{
@@ -152,7 +152,7 @@
"description":"English: Hide placeholders of blocked elements"
},
"settingsIconBadgePrompt":{
- "message":"Показване брояч за блокираните заявки в иконката",
+ "message":"Показване на брояч в иконката за блокираните заявки",
"description":"English: Show the number of blocked requests on the icon"
},
"settingsContextMenuPrompt":{
@@ -244,7 +244,7 @@
"description":"English: Custom"
},
"3pExternalListsHint":{
- "message":"Един адрес на ред. Редове с представка &lsquo;!&rsquo; ще бъдат игнорирани. Невалидните адреси също ще бъдат игнорирани.",
+ "message":"Един адрес на ред. Редовете с представка &lsquo;!&rsquo; ще бъдат игнорирани. Невалидните адреси също ще бъдат игнорирани.",
"description":"English: One URL per line. Lines prefixed with &lsquo;!&rsquo; will be ignored. Invalid URLs will be silently ignored."
},
"3pExternalListsApply":{
@@ -268,7 +268,7 @@
"description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'"
},
"1pFormatHint":{
- "message":"Един филтър на ред. Това може да бъде обикновен хост или съвместим с Adblock Plus филтър. Редове с представка &lsquo;!&rsquo; ще бъдат игнорирани.",
+ "message":"Един филтър на ред. Това може да бъде обикновен адрес или съвместим с Adblock Plus филтър. Редовете с представка &lsquo;!&rsquo; ще бъдат игнорирани.",
"description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with &lsquo;!&rsquo; will be ignored."
},
"1pImport":{
@@ -336,7 +336,7 @@
"description":"English: dynamic rule syntax and full documentation."
},
"whitelistPrompt":{
- "message":"Вашият списък с хост имена, за които uBlock ще бъде изключен. Едно име на ред. Невалидните хост имена ще бъдат игнорирани.",
+ "message":"Списък на вашите адреси, за които uBlock ще бъде изключен. Един елемент на ред. Невалидните адреси ще бъдат игнорирани.",
"description":"English: Your list of host names for which uBlock will be disabled. One host name per line. Invalid host names will be silently ignored."
},
"whitelistImport":{
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Продължете на свой собствен риск",
- "description":"English: Proceed at your own risk"
+ "message":"Изключване на строгото блокиране за {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Временно",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Постоянно",
+ "description":"English: Permanently"
},
"dummy":{
"message":"Това поле трябва да бъде последното",
View
12 src/_locales/ca/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Continueu sota la vostra responsabilitat",
- "description":"English: Proceed at your own risk"
+ "message":"Inhabilita el blocatge estricte per {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Temporalment",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanentment",
+ "description":"English: Permanently"
},
"dummy":{
"message":"Aquesta entrada ha de ser l'última",
View
12 src/_locales/cs/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Pokračujte na vlastní nebezpečí",
- "description":"English: Proceed at your own risk"
+ "message":"Zakázat striktní blokování pro {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Dočasně",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Trvale",
+ "description":"English: Permanently"
},
"dummy":{
"message":"This entry must be the last one",
View
12 src/_locales/da/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Proceed at your own risk",
- "description":"English: Proceed at your own risk"
+ "message":"Disable strict blocking for {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Temporarily",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanently",
+ "description":"English: Permanently"
},
"dummy":{
"message":"Denne indskrivning må være den sidste",
View
12 src/_locales/de/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Mache auf eigene Gefahr weiter",
- "description":"English: Proceed at your own risk"
+ "message":"Deaktiviere striktes Blockieren für {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Temporär",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanent",
+ "description":"English: Permanently"
},
"dummy":{
"message":"Dieser Eintrag muss der letzte sein",
View
12 src/_locales/el/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Προχωρήστε με δική σας ευθύνη",
- "description":"English: Proceed at your own risk"
+ "message":"Disable strict blocking for {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Temporarily",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanently",
+ "description":"English: Permanently"
},
"dummy":{
"message":"Αυτή η καταχώρηση θα πρέπει να είναι τελευταία",
View
12 src/_locales/en/messages.json
@@ -512,8 +512,16 @@
"description": "English: Close this window"
},
"docblockedProceed": {
- "message": "Proceed at your own risk",
- "description": "English: Proceed at your own risk"
+ "message": "Disable strict blocking for {{hostname}}",
+ "description": "English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary": {
+ "message": "Temporarily",
+ "description": "English: Temporarily"
+ },
+ "docblockedDisablePermanent": {
+ "message": "Permanently",
+ "description": "English: Permanently"
},
"dummy":{
"message":"This entry must be the last one",
View
12 src/_locales/es/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Proceder, deseo arriesgarme",
- "description":"English: Proceed at your own risk"
+ "message":"Deshabilitar bloqueo estricto para {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Temporalmente",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanentemente",
+ "description":"English: Permanently"
},
"dummy":{
"message":"Esta entrada debe ser la última",
View
12 src/_locales/et/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Jätka omal vastutusel",
- "description":"English: Proceed at your own risk"
+ "message":"Disable strict blocking for {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Temporarily",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanently",
+ "description":"English: Permanently"
},
"dummy":{
"message":"See sisestus peab olema viimane",
View
24 src/_locales/fa/messages.json
@@ -76,11 +76,11 @@
"description":"English: Go to request log"
},
"popupTipNoPopups":{
- "message":"No popups for this site",
+ "message":"این سایت پاپ آپی ندارد",
"description":"English: No popups for this site"
},
"popupTipNoStrictBlocking":{
- "message":"No strict blocking for this site",
+ "message":"چیزی برای بلاک کردن در این سایت وجود ندارد",
"description":"English: No strict blocking for this site"
},
"popupAnyRulePrompt":{
@@ -496,24 +496,32 @@
"description":"Firefox-specific: appears as 'uBlock (off)'"
},
"docblockedPrompt1":{
- "message":"uBlock has prevented the following page from loading:",
+ "message":"ublock از بارگذاری این صفحات جلوگیری کرده:",
"description":"English: uBlock has prevented the following page from loading:"
},
"docblockedPrompt2":{
- "message":"Because of the following filter",
+ "message":"بخاطر فیلتر زیر",
"description":"English: Because of the following filter"
},
"docblockedBack":{
- "message":"Go back",
+ "message":"بازگشت به عقب",
"description":"English: Go back"
},
"docblockedClose":{
- "message":"Close this window",
+ "message":"بستن این پنجره",
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Proceed at your own risk",
- "description":"English: Proceed at your own risk"
+ "message":"غیر فعال کردن بلاک برای {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Temporarily",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanently",
+ "description":"English: Permanently"
},
"dummy":{
"message":"این باید آخرین مطلب باشد",
View
12 src/_locales/fi/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Jatka omalla vastuullasi",
- "description":"English: Proceed at your own risk"
+ "message":"Disable strict blocking for {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Temporarily",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanently",
+ "description":"English: Permanently"
},
"dummy":{
"message":"This entry must be the last one",
View
12 src/_locales/fil/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Proceed at your own risk",
- "description":"English: Proceed at your own risk"
+ "message":"Disable strict blocking for {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Temporarily",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanently",
+ "description":"English: Permanently"
},
"dummy":{
"message":"This entry must be the last one",
View
12 src/_locales/fr/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Visiter quand même le site (à vos risques et périls)",
- "description":"English: Proceed at your own risk"
+ "message":"Désactiver le blocage strict du domaine {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"De manière temporaire",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"De manière définitive",
+ "description":"English: Permanently"
},
"dummy":{
"message":"This entry must be the last one",
View
12 src/_locales/he/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"המשך על אחריותך בלבד",
- "description":"English: Proceed at your own risk"
+ "message":"בטל חסימה נוקשה עבור {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"זמנית",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"לצמיתות",
+ "description":"English: Permanently"
},
"dummy":{
"message":"ערך זה חייב להיות האחרון",
View
12 src/_locales/hi/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Proceed at your own risk",
- "description":"English: Proceed at your own risk"
+ "message":"Disable strict blocking for {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Temporarily",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanently",
+ "description":"English: Permanently"
},
"dummy":{
"message":"This entry must be the last one",
View
12 src/_locales/hr/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Nastavite na vlastiti rizik",
- "description":"English: Proceed at your own risk"
+ "message":"Isključi strogo blokiranje za {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Privremeno",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Trajno",
+ "description":"English: Permanently"
},
"dummy":{
"message":"This entry must be the last one",
View
50 src/_locales/hu/messages.json
@@ -44,7 +44,7 @@
"description":"English: Click: disable\/enable uBlock for this site.\n\nCtrl+click: disable uBlock only on this page."
},
"popupBlockedRequestPrompt":{
- "message":"blokkolt kérések",
+ "message":"blokkolt lekérések",
"description":"English: requests blocked"
},
"popupBlockedOnThisPagePrompt":{
@@ -72,7 +72,7 @@
"description":"English: Enter element picker mode"
},
"popupTipLog":{
- "message":"Naplózott lekéréséek megtekintése",
+ "message":"Naplózott lekérések megtekintése",
"description":"English: Go to request log"
},
"popupTipNoPopups":{
@@ -132,7 +132,7 @@
"description":"English: Quit"
},
"pickerNetFilters":{
- "message":"Net-szürők",
+ "message":"Hálózati szűrők",
"description":"English: Net filters"
},
"pickerCosmeticFilters":{
@@ -152,7 +152,7 @@
"description":"English: Hide placeholders of blocked elements"
},
"settingsIconBadgePrompt":{
- "message":"Jelenjen meg a blokkolt kérések száma az ikonon",
+ "message":"Jelenjen meg a blokkolt lekérések száma az ikonon",
"description":"English: Show the number of blocked requests on the icon"
},
"settingsContextMenuPrompt":{
@@ -164,7 +164,7 @@
"description":"English: "
},
"settingsExperimentalPrompt":{
- "message":"Kísérleti funkciók engedélyezése",
+ "message":"Kísérleti funkciók engedélyezése (<a href='https:\/\/github.com\/gorhill\/uBlock\/wiki\/Experimental-features'>Információk<\/a>)",
"description":"English: Enable experimental features"
},
"settingsStorageUsed":{
@@ -180,7 +180,7 @@
"description":"English: Last backup:"
},
"3pListsOfBlockedHostsPrompt":{
- "message":"{{netFilterCount}} net-szűrők + {{cosmeticFilterCount}} kozmetikai szűrők:",
+ "message":"{{netFilterCount}} hálózati szűrők + {{cosmeticFilterCount}} kozmetikai szűrők:",
"description":"English: {{netFilterCount}} network filters + {{cosmeticFilterCount}} cosmetic filters from:"
},
"3pListsOfBlockedHostsPerListStats":{
@@ -204,11 +204,11 @@
"description":"English: Parse and enforce Adblock+ element hiding filters."
},
"3pParseAllABPHideFiltersInfo":{
- "message":"<p>Ez a beállítás engedélyezi az <a href=\"https:\/\/adblockplus.org\/en\/faq_internal#elemhide\">Adblock Plus-típusú &ldquo;elemelrejtő&rdquo; szűrőket<\/a>. Ezek kizárólag kozmetikai célokat szolgálnak; elrejtik egy weboldal azon elemeit, amelyek vizuálisan zavaróak, de a hálózati lekérések alapján nem szűrhetők ki.<\/p><p>A beállítás engedélyezése megnöveli a <i>µBlock<\/i> memóriahasználatát.<\/p>",
+ "message":"<p>Ez a beállítás engedélyezi az <a href=\"https:\/\/adblockplus.org\/en\/faq_internal#elemhide\">Adblock Plus-típusú &ldquo;elemelrejtő&rdquo; szűrőket<\/a>. Ezek kizárólag kozmetikai célokat szolgálnak; elrejtik egy webhely azon elemeit, amelyek vizuálisan zavaróak, de a hálózati lekérések alapján nem szűrhetők ki.<\/p><p>A beállítás engedélyezése megnöveli a <i>uBlock<\/i> memóriahasználatát.<\/p>",
"description":"English: see English messages.json"
},
"3pListsOfBlockedHostsHeader":{
- "message":"Blokkolt hosztokat tartalmazó listák",
+ "message":"Blokkolt hostokat tartalmazó listák",
"description":"English: Lists of blocked hosts"
},
"3pApplyChanges":{
@@ -268,7 +268,7 @@
"description":"English: Last update: {{ago}}, where 'ago' will be replaced with something like '2 days ago'"
},
"1pFormatHint":{
- "message":"Egy sor egy szűrő. A szűrő lehet egy hosztnév, vagy Adblock Plus kompatibilis szűrő.\nA &lsquo;!&rsquo; kezdetű sorok figyelmen kívül maradnak.",
+ "message":"Soronként egy szűrő. A szűrő lehet egy hostnév, vagy egy Adblock Plus kompatibilis szűrő.\nA &lsquo;!&rsquo; kezdetű sorok figyelmen kívül maradnak.",
"description":"English: One filter per line. A filter can be a plain hostname, or an Adblock Plus-compatible filter. Lines prefixed with &lsquo;!&rsquo; will be ignored."
},
"1pImport":{
@@ -356,7 +356,7 @@
"description":"English: Apply changes"
},
"logNetRequestsPrompt":{
- "message":"Naplózza a hálózati kéréseket",
+ "message":"Naplózza a hálózati lekéréseket",
"description":"English: Enable the logging of network requests"
},
"logNetRequestsHelp":{
@@ -364,11 +364,11 @@
"description":"English: see _locales\/en\/messages.log"
},
"logBlockedRequestsHeader":{
- "message":"Blokkolt kérések",
+ "message":"Blokkolt lekérések",
"description":"English: Blocked requests"
},
"logAllowedRequestsHeader":{
- "message":"Engedélyezett kérések",
+ "message":"Engedélyezett lekérések",
"description":"English: Allowed requests"
},
"logRequestsHeaderType":{
@@ -388,15 +388,15 @@
"description":"English: Filter"
},
"logBlockedRequestsEmpty":{
- "message":"Nincs blokkolt kérés ezen a lapon",
+ "message":"Nincs blokkolt lekérés naplózva ezen a lapon",
"description":"English: No blocked requests logged for this page"
},
"logAllowedRequestsEmpty":{
- "message":"Nincs engedélyezett kérés ezen a lapon",
+ "message":"Nincs engedélyezett lekérés naplózva ezen a lapon",
"description":"English: No non-blocked requests logged for this page"
},
"logBehindTheScene":{
- "message":"Hálózati forgalom a háttérben",
+ "message":"Hálózati lekérések a háttérben",
"description":"Pretty name for behind-the-scene network requests"
},
"logFilterPrompt":{
@@ -436,11 +436,11 @@
"description":"English: Restore from file..."
},
"aboutResetDataButton":{
- "message":"Kezdj mindent előről...",
+ "message":"Alapértelmezett beállítások visszaállítása...",
"description":"English: Reset to default settings..."
},
"aboutRestoreDataConfirm":{
- "message":"A jelenlegi beállítások felülíródnak a mentett adatokkal (mentési idő: {{time}}), utána a µBlock újraindul.\n\nFelülírja a jelenlegi beállításokat a biztonsági mentéssel?",
+ "message":"A jelenlegi beállítások felülíródnak a mentett adatokkal (mentési idő: {{time}}), utána a uBlock újraindul.\n\nFelülírja a jelenlegi beállításokat a biztonsági mentéssel?",
"description":"Message asking user to confirm restore"
},
"aboutRestoreDataError":{
@@ -448,7 +448,7 @@
"description":"Message to display when an error occurred during restore"
},
"aboutResetDataConfirm":{
- "message":"Az összes beállítás törlődik, utána a µBlock újraindul.\n\nÁllítsa vissza a gyári beállításokat?",
+ "message":"Az összes beállítás törlődik, utána a uBlock újraindul.\n\nÁllítsa vissza a gyári beállításokat?",
"description":"Message asking user to confirm reset"
},
"errorCantConnectTo":{
@@ -456,7 +456,7 @@
"description":"English: Network error: unable to connect to {{url}}"
},
"subscriberConfirm":{
- "message":"µBlock: Hozzáadja a következő URL-t a saját szűrő listákhoz?\n\nNév: \"{{title}}\"\nURL: \"{{url}}\"",
+ "message":"uBlock: Hozzáadja a következő URL-t a saját szűrő listákhoz?\n\nNév: \"{{title}}\"\nURL: \"{{url}}\"",
"description":"English: The message seen by the user to confirm subscription to a ABP filter list"
},
"elapsedOneMinuteAgo":{
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Folytatás saját felelősségre",
- "description":"English: Proceed at your own risk"
+ "message":"Kapcsolja ki a szigorú tiltást a {{hostname}} részére",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Ideiglenesen",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Állandoan",
+ "description":"English: Permanently"
},
"dummy":{
"message":"Ez a bejegyzés utolsó kell hogy legyen",
View
16 src/_locales/id/messages.json
@@ -76,11 +76,11 @@
"description":"English: Go to request log"
},
"popupTipNoPopups":{
- "message":"No popups for this site",
+ "message":"Tidak ada popup untuk situs ini",
"description":"English: No popups for this site"
},
"popupTipNoStrictBlocking":{
- "message":"No strict blocking for this site",
+ "message":"Tidak ada pemblokiran ketat untuk situs ini",
"description":"English: No strict blocking for this site"
},
"popupAnyRulePrompt":{
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Lanjutkan dengan resiko Anda sendiri",
- "description":"English: Proceed at your own risk"
+ "message":"Nonaktifkan pemblokiran ketat untuk {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Sementara",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanen",
+ "description":"English: Permanently"
},
"dummy":{
"message":"Entri ini harus menjadi yang terakhir",
View
12 src/_locales/it/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Procedi a tuo rischio e pericolo",
- "description":"English: Proceed at your own risk"
+ "message":"Disabilita blocco assoluto per {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Temporaneamente",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanentemente",
+ "description":"English: Permanently"
},
"dummy":{
"message":"This entry must be the last one",
View
12 src/_locales/ja/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Proceed at your own risk",
- "description":"English: Proceed at your own risk"
+ "message":"Disable strict blocking for {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Temporarily",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanently",
+ "description":"English: Permanently"
},
"dummy":{
"message":"これは最後のエントリである必要があります",
View
12 src/_locales/ko/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"진행함에 따라 발생하는 책임은 사용자에게 있습니다",
- "description":"English: Proceed at your own risk"
+ "message":"Disable strict blocking for {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Temporarily",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanently",
+ "description":"English: Permanently"
},
"dummy":{
"message":"This entry must be the last one",
View
16 src/_locales/lt/messages.json
@@ -76,11 +76,11 @@
"description":"English: Go to request log"
},
"popupTipNoPopups":{
- "message":"No popups for this site",
+ "message":"Be iškylančiųjų langų šiame puslapyje",
"description":"English: No popups for this site"
},
"popupTipNoStrictBlocking":{
- "message":"No strict blocking for this site",
+ "message":"Be griežto blokavimo šiame puslapyje",
"description":"English: No strict blocking for this site"
},
"popupAnyRulePrompt":{
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Tęsti savo paties rizika",
- "description":"English: Proceed at your own risk"
+ "message":"Išjungti griežtą {{hostname}} blokavimą",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Laikinai",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Negrįžtamai",
+ "description":"English: Permanently"
},
"dummy":{
"message":"This entry must be the last one",
View
14 src/_locales/lv/messages.json
@@ -52,7 +52,7 @@
"description":"English: on this page"
},
"popupBlockedStats":{
- "message":"{{count}} no {{percent}}%",
+ "message":"{{count}} vai {{percent}}%",
"description":"Example: 15 or 13%"
},
"popupBlockedSinceInstallPrompt":{
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Turpināt uz savu risku",
- "description":"English: Proceed at your own risk"
+ "message":"Atslēgt satura bloķēšanu saitnei {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Pagaidu",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Paliekoši",
+ "description":"English: Permanently"
},
"dummy":{
"message":"Šim ierakstam ir jābūt pēdējam",
View
12 src/_locales/mr/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Proceed at your own risk",
- "description":"English: Proceed at your own risk"
+ "message":"Disable strict blocking for {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Temporarily",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanently",
+ "description":"English: Permanently"
},
"dummy":{
"message":"This entry must be the last one",
View
12 src/_locales/nb/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Fortsett på eget ansvar",
- "description":"English: Proceed at your own risk"
+ "message":"Skru av altomspennende blokkering for {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Midlertidig",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanent",
+ "description":"English: Permanently"
},
"dummy":{
"message":"Denne oppføringen må være den siste",
View
12 src/_locales/nl/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Doorgaan op eigen risico",
- "description":"English: Proceed at your own risk"
+ "message":"Zet strikte blokkering uit voor {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Tijdelijk",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanent",
+ "description":"English: Permanently"
},
"dummy":{
"message":"This entry must be the last one",
View
12 src/_locales/pl/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Kontynuuj na własne ryzyko",
- "description":"English: Proceed at your own risk"
+ "message":"Wyłącz rygorystyczne blokowanie dla {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Tymczasowo",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Na stałe",
+ "description":"English: Permanently"
},
"dummy":{
"message":"Ta pozycja musi być ostatnia",
View
12 src/_locales/pt_BR/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Prossiga por sua conta e risco",
- "description":"English: Proceed at your own risk"
+ "message":"Desativar bloqueio estrito para\n{{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Temporariamente",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanentemente",
+ "description":"English: Permanently"
},
"dummy":{
"message":"Esta entrada deve ser a última",
View
12 src/_locales/pt_PT/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Continue por sua conta e risco",
- "description":"English: Proceed at your own risk"
+ "message":"Desativar bloqueio estrito para {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Temporariamente",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanentemente",
+ "description":"English: Permanently"
},
"dummy":{
"message":"Esta entrada deve ser a última",
View
12 src/_locales/ro/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Continuă pe propriul risc",
- "description":"English: Proceed at your own risk"
+ "message":"Dezactivează blocarea strictă pentru {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Temporar",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanent",
+ "description":"English: Permanently"
},
"dummy":{
"message":"Aceasta intrare trebuie sa fie ultima",
View
12 src/_locales/ru/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Продолжайте по собственному усмотрению",
- "description":"English: Proceed at your own risk"
+ "message":"Отключить строгую блокировку для {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Временно",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Навсегда",
+ "description":"English: Permanently"
},
"dummy":{
"message":"Эта запись должна быть последней",
View
12 src/_locales/sk/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Pokračovať na vlastné riziko",
- "description":"English: Proceed at your own risk"
+ "message":"Disable strict blocking for {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Temporarily",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanently",
+ "description":"English: Permanently"
},
"dummy":{
"message":"This entry must be the last one",
View
16 src/_locales/sl/messages.json
@@ -144,7 +144,7 @@
"description":"English: Click, Ctrl-click"
},
"pickerContextMenuEntry":{
- "message":"Block element",
+ "message":"Blokiraj element",
"description":"English: Block element"
},
"settingsCollapseBlockedPrompt":{
@@ -212,7 +212,7 @@
"description":"English: Lists of blocked hosts"
},
"3pApplyChanges":{
- "message":"Apply changes",
+ "message":"Uporabi spremembe",
"description":"English: Apply changes"
},
"3pGroupAds":{
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Proceed at your own risk",
- "description":"English: Proceed at your own risk"
+ "message":"Disable strict blocking for {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Temporarily",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanently",
+ "description":"English: Permanently"
},
"dummy":{
"message":"This entry must be the last one",
View
12 src/_locales/sq/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Vijoni pavarësisht nga rreziqet",
- "description":"English: Proceed at your own risk"
+ "message":"Zhbllokoj mënyrën strikte për {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Përkohësisht",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Gjithmonë",
+ "description":"English: Permanently"
},
"dummy":{
"message":"This entry must be the last one",
View
12 src/_locales/sr/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Proceed at your own risk",
- "description":"English: Proceed at your own risk"
+ "message":"Disable strict blocking for {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Temporarily",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanently",
+ "description":"English: Permanently"
},
"dummy":{
"message":"This entry must be the last one",
View
12 src/_locales/sv/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Fortsätt på egen risk",
- "description":"English: Proceed at your own risk"
+ "message":"Avaktivera strikt blockering av {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Temporärt",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanent",
+ "description":"English: Permanently"
},
"dummy":{
"message":"This entry must be the last one",
View
16 src/_locales/te/messages.json
@@ -76,11 +76,11 @@
"description":"English: Go to request log"
},
"popupTipNoPopups":{
- "message":"No popups for this site",
+ "message":"ఈ వెబ్సైట్ లో పాప్అప్స్ రావు",
"description":"English: No popups for this site"
},
"popupTipNoStrictBlocking":{
- "message":"No strict blocking for this site",
+ "message":"ఈ వెబ్సైట్లో అన్ని ఖచ్చితంగా నిరోధించబడవు",
"description":"English: No strict blocking for this site"
},
"popupAnyRulePrompt":{
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"హెచ్చరిక: మీ సొంత బాధ్యతతో ముందుకు వెళ్ళండి",
- "description":"English: Proceed at your own risk"
+ "message":"{{hostname}} లొ నిరోధకాన్ని ఖచ్చితంగా అమలు చెయ్యొద్దు",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"తాత్కాలికంగా",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"శాశ్వతంగా",
+ "description":"English: Permanently"
},
"dummy":{
"message":"ఇది అంతిమంగా వుండాల్సిన నమోదు",
View
20 src/_locales/tr/messages.json
@@ -8,7 +8,7 @@
"description":"this will be in the chrome web store: must be 132 characters or less"
},
"dashboardName":{
- "message":"µBlock — Kontrol paneli",
+ "message":"uBlock — Kontrol paneli",
"description":"English: uBlock — Dashboard"
},
"settingsPageName":{
@@ -32,7 +32,7 @@
"description":"appears as tab name in dashboard"
},
"statsPageName":{
- "message":"µBlock — Ağ istek günlüğü",
+ "message":"uBlock — Ağ istek günlüğü",
"description":"Title for the network request log window"
},
"aboutPageName":{
@@ -76,11 +76,11 @@
"description":"English: Go to request log"
},
"popupTipNoPopups":{
- "message":"No popups for this site",
+ "message":"Bu site için açılır pencere yok",
"description":"English: No popups for this site"
},
"popupTipNoStrictBlocking":{
- "message":"No strict blocking for this site",
+ "message":"Bu site için sıkı engelleme yok",
"description":"English: No strict blocking for this site"
},
"popupAnyRulePrompt":{
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Riski göze alarak devam et",
- "description":"English: Proceed at your own risk"
+ "message":"{{hostname}} için sıkı engellemeyi devre dışı bırak",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Geçici olarak",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Kalıcı olarak",
+ "description":"English: Permanently"
},
"dummy":{
"message":"Bu giriş sonuncusu olmalıdır",
View
14 src/_locales/uk/messages.json
@@ -80,7 +80,7 @@
"description":"English: No popups for this site"
},
"popupTipNoStrictBlocking":{
- "message":"Заборонити повне блокування цього сайту",
+ "message":"Не виконувати повне блокування цього сайту",
"description":"English: No strict blocking for this site"
},
"popupAnyRulePrompt":{
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Продовжити на свій страх і ризик",
- "description":"English: Proceed at your own risk"
+ "message":"Вимкнути повне блокування для {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Тимчасово",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Завжди",
+ "description":"English: Permanently"
},
"dummy":{
"message":"Цей запис має бути останнім",
View
12 src/_locales/vi/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"Tiến hành với rủi ro thuộc về bạn",
- "description":"English: Proceed at your own risk"
+ "message":"Vô hiệu chặn nghiêm ngặt cho {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Tạm thời",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Vĩnh viễn",
+ "description":"English: Permanently"
},
"dummy":{
"message":"Đây là mục cuối",
View
14 src/_locales/zh_CN/messages.json
@@ -80,7 +80,7 @@
"description":"English: No popups for this site"
},
"popupTipNoStrictBlocking":{
- "message":"禁用对此网站进行严格屏蔽",
+ "message":"不对此网站进行严格屏蔽",
"description":"English: No strict blocking for this site"
},
"popupAnyRulePrompt":{
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"自担风险进行访问:",
- "description":"English: Proceed at your own risk"
+ "message":"Disable strict blocking for {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Temporarily",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanently",
+ "description":"English: Permanently"
},
"dummy":{
"message":"此条目必须是最后一个",
View
12 src/_locales/zh_TW/messages.json
@@ -512,8 +512,16 @@
"description":"English: Close this window"
},
"docblockedProceed":{
- "message":"自負風險並進行",
- "description":"English: Proceed at your own risk"
+ "message":"Disable strict blocking for {{hostname}}",
+ "description":"English: Disable strict blocking for {{hostname}} ..."
+ },
+ "docblockedDisableTemporary":{
+ "message":"Temporarily",
+ "description":"English: Temporarily"
+ },
+ "docblockedDisablePermanent":{
+ "message":"Permanently",
+ "description":"English: Permanently"
},
"dummy":{
"message":"This entry must be the last one",
View
16 src/document-blocked.html
@@ -13,14 +13,11 @@
margin: 1.5em 0;
}
body > div > p {
- margin: 2px 0;
+ margin: 4px 0;
}
body > div > p:first-child {
margin: 1.5em 0 0 0;
}
-body > div > p:last-child {
- margin: 0 0 1.5em 0;
- }
.code {
background-color: rgba(0, 0, 0, 0.1);
display: inline-block;
@@ -30,7 +27,7 @@
}
button {
cursor: pointer;
- margin: 0 1em;
+ margin: 0 1em 0.25em 1em;
padding: 0.25em 0.5em;
font-size: inherit;
}
@@ -66,8 +63,13 @@
</div>
<div>
- <p data-i18n="docblockedProceed"></p>
- <p><a id="yolo" class="what" href></a></p>
+ <p id="proceed"></p>
+ <p><button id="proceedTemporary" data-i18n="docblockedDisableTemporary" type="button"></button>
+ <button id="proceedPermanent" data-i18n="docblockedDisablePermanent" type="button"></button></p>
+ </div>
+
+<div style="display: none;">
+ <span id="proceedTemplate"><span></span><span class="code"></span><span></span></span>
</div>
<script src="js/vapi-common.js"></script>
View
56 src/js/document-blocked.js
@@ -30,30 +30,58 @@
/******************************************************************************/
var messager = vAPI.messaging.channel('document-blocked.js');
+var details = {};
-var matches = /details=([^&]+)/.exec(window.location.search);
-if ( matches === null ) {
- return;
-}
-var details = JSON.parse(atob(matches[1]));
+(function() {
+ var matches = /details=([^&]+)/.exec(window.location.search);
+ if ( matches === null ) {
+ return;
+ }
+ details = JSON.parse(atob(matches[1]));
+})();
/******************************************************************************/
-var yolo = function(ev) {
- var onReady = function() {
- window.location.replace(details.url);
- };
+var proceedToURL = function() {
+ window.location.replace(details.url);
+};
+/******************************************************************************/
+
+var proceedTemporary = function() {
messager.send({
what: 'temporarilyWhitelistDocument',
url: details.url
- }, onReady);
+ }, proceedToURL);
+};
+
+/******************************************************************************/
- ev.preventDefault();
+var proceedPermanent = function() {
+ messager.send({
+ what: 'toggleHostnameSwitch',
+ name: 'dontBlockDoc',
+ hostname: details.hn,
+ state: true
+ }, proceedToURL);
};
/******************************************************************************/
+(function() {
+ var matches = /^(.*)\{\{hostname\}\}(.*)$/.exec(vAPI.i18n('docblockedProceed'));
+ if ( matches === null ) {
+ return;
+ }
+ var proceed = uDom('#proceedTemplate').clone();
+ proceed.descendants('span:nth-of-type(1)').text(matches[1]);
+ proceed.descendants('span:nth-of-type(2)').text(details.hn);
+ proceed.descendants('span:nth-of-type(3)').text(matches[2]);
+ uDom('#proceed').append(proceed);
+})();
+
+/******************************************************************************/
+
uDom('.what').text(details.url);
uDom('#why').text(details.why.slice(3));
@@ -65,8 +93,10 @@ if ( window.history.length > 1 ) {
uDom('#back').css('display', 'none');
}
-uDom('#yolo').attr('href', details.url)
- .on('click', yolo);
+uDom('#proceedTemporary').attr('href', details.url).on('click', proceedTemporary);
+uDom('#proceedPermanent').attr('href', details.url).on('click', proceedPermanent);
+
+/******************************************************************************/
})();
View
2 src/js/messaging.js
@@ -980,7 +980,7 @@ var backupUserData = function(callback) {
timeStamp: Date.now(),
version: vAPI.app.version,
userSettings: µb.userSettings,
- filterLists: µb.remoteBlacklists,
+ filterLists: µb.extractSelectedFilterLists(),
netWhitelist: µb.stringFromWhitelist(µb.netWhitelist),
dynamicFilteringString: µb.permanentFirewall.toString(),
hostnameSwitchesString: µb.hnSwitches.toString(),
View
4 src/js/static-net-filtering.js
@@ -96,8 +96,8 @@ var reURLPostHostnameAnchors = /[\/?#]/;
var pageHostnameRegister = '';
var requestHostnameRegister = '';
-var filterRegister = null;
-var categoryRegister = '';
+//var filterRegister = null;
+//var categoryRegister = '';
/******************************************************************************/
View
20 src/js/storage.js
@@ -91,6 +91,26 @@
/******************************************************************************/
+// This will remove all unused filter list entries from
+// µBlock.remoteBlacklists`. This helps reduce the size of backup files.
+
+µBlock.extractSelectedFilterLists = function() {
+ var r = JSON.parse(JSON.stringify(this.remoteBlacklists));
+
+ for ( var path in r ) {
+ if ( r.hasOwnProperty(path) === false ) {
+ continue;
+ }
+ if ( r[path].off !== false ) {
+ delete r[path];
+ }
+ }
+
+ return r;
+};
+
+/******************************************************************************/
+
µBlock.saveUserFilters = function(content, callback) {
return this.assets.put(this.userFiltersPath, content, callback);
};
View
60 src/js/traffic.js
@@ -219,6 +219,11 @@ var onBeforeRootFrameRequest = function(details) {
// Filtering
if ( result === '' && µb.getNetFilteringSwitch(requestURL) ) {
result = µb.staticNetFilteringEngine.matchString(context);
+ // https://github.com/gorhill/uBlock/issues/1128
+ // Do not block if the match begins after the hostname.
+ if ( result !== '' ) {
+ result = toBlockDocResult(requestURL, requestHostname, result);
+ }
}
// Log
@@ -235,6 +240,7 @@ var onBeforeRootFrameRequest = function(details) {
// Blocked
var query = btoa(JSON.stringify({
url: requestURL,
+ hn: requestHostname,
why: result
}));
@@ -245,6 +251,60 @@ var onBeforeRootFrameRequest = function(details) {
/******************************************************************************/
+var toBlockDocResult = function(url, hostname, result) {
+ if ( result.charAt(1) !== 'b' ) {
+ return '';
+ }
+
+ // Quick test: if the result starts with `|` or `||`, then this means the
+ // match is before the path part of the URL for sure.
+ // Examples: sb:|http:// sb:||example.com^
+ if ( result.charAt(3) === '|' ) {
+ return result;
+ }
+
+ // Make a regex out of the result
+ var reText = result.slice(3);
+ var pos = reText.indexOf('$');
+ if ( pos > 0 ) {
+ reText = reText.slice(0, pos);
+ }
+
+ // Matches whole URL
+ if ( reText === '*' ) {
+ return result;
+ }
+
+ // We are going to have to take the long way to find out
+ if ( reText.charAt(0) === '/' && reText.slice(-1) === '/' ) {
+ reText = reText.slice(1, -1);
+ } else {
+ reText = reText
+ .replace(/\./g, '\\.')
+ .replace(/\?/g, '\\?')
+ .replace(/^\|\|/, '')
+ .replace(/\^/g, '.')
+ .replace(/^\|/g, '^')
+ .replace(/\|$/g, '$')
+ .replace(/\*/g, '.*');
+ }
+
+ var re = new RegExp(reText, 'gi');
+ var matches = re.exec(url);
+ if ( matches === null ) {
+ return '';
+ }
+
+ // verify that the match starts before the path
+ if ( matches.index < url.indexOf(hostname) + hostname.length ) {
+ return result;
+ }
+
+ return '';
+};
+
+/******************************************************************************/
+
// Intercept and filter behind-the-scene requests.
var onBeforeBehindTheSceneRequest = function(details) {
Something went wrong with that request. Please try again.