Index: subscriptionLink.postload.js |
diff --git a/subscriptionLink.postload.js b/subscriptionLink.postload.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..ea13de1bf321a074fc419256427b7c11d4fdadf4 |
--- /dev/null |
+++ b/subscriptionLink.postload.js |
@@ -0,0 +1,92 @@ |
+/* |
+ * This file is part of Adblock Plus <https://adblockplus.org/>, |
+ * Copyright (C) 2006-2016 Eyeo GmbH |
+ * |
+ * Adblock Plus is free software: you can redistribute it and/or modify |
+ * it under the terms of the GNU General Public License version 3 as |
+ * published by the Free Software Foundation. |
+ * |
+ * Adblock Plus 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 Adblock Plus. If not, see <http://www.gnu.org/licenses/>. |
+ */ |
+ |
+"use strict"; |
+ |
+// In Chrome 37-40, the document_end content script (this one) runs properly, |
+// while the document_start content scripts (that defines ext) might not. Check |
+// whether variable ext exists before continuing to avoid |
+// "Uncaught ReferenceError: ext is not defined". See https://crbug.com/416907 |
+if ("ext" in window && document instanceof HTMLDocument) |
+{ |
+ document.addEventListener("click", function(event) |
+ { |
+ // Ignore right-clicks |
+ if (event.button == 2) |
+ return; |
+ |
+ // Search the link associated with the click |
+ var link = event.target; |
+ while (!(link instanceof HTMLAnchorElement)) |
+ { |
+ link = link.parentNode; |
+ |
+ if (!link) |
+ return; |
+ } |
+ |
+ if (link.protocol == "http:" || link.protocol == "https:") |
+ { |
+ if (link.host != "subscribe.adblockplus.org" || link.pathname != "/") |
+ return; |
+ } |
+ else if (!/^abp:\/*subscribe\/*\?/i.test(link.href)) |
+ return; |
+ |
+ // This is our link - make sure the browser doesn't handle it |
+ event.preventDefault(); |
+ event.stopPropagation(); |
+ |
+ // Decode URL parameters |
+ var params = link.search.substr(1).split("&"); |
+ var title = null; |
+ var url = null; |
+ for (var i = 0; i < params.length; i++) |
+ { |
+ var parts = params[i].split("=", 2); |
+ if (parts.length != 2 || !/\S/.test(parts[1])) |
+ continue; |
+ switch (parts[0]) |
+ { |
+ case "title": |
+ title = decodeURIComponent(parts[1]); |
+ break; |
+ case "location": |
+ url = decodeURIComponent(parts[1]); |
+ break; |
+ } |
+ } |
+ if (!url) |
+ return; |
+ |
+ // Default title to the URL |
+ if (!title) |
+ title = url; |
+ |
+ // Trim spaces in title and URL |
+ title = title.trim(); |
+ url = url.trim(); |
+ if (!/^(https?|ftp):/.test(url)) |
+ return; |
+ |
+ ext.backgroundPage.sendMessage({ |
+ type: "add-subscription", |
+ title: title, |
+ url: url |
+ }); |
+ }, true); |
+} |