Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Side by Side Diff: lib/ui.js

Issue 5309182173511680: Issue 2211 - Implemented subscribe.adblockplus.org subscription links (Closed)
Patch Set: Rebased to b7c6ed7c2137 Created July 20, 2015, 1:49 p.m.
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * This file is part of Adblock Plus <https://adblockplus.org/>, 2 * This file is part of Adblock Plus <https://adblockplus.org/>,
3 * Copyright (C) 2006-2015 Eyeo GmbH 3 * Copyright (C) 2006-2015 Eyeo GmbH
4 * 4 *
5 * Adblock Plus is free software: you can redistribute it and/or modify 5 * Adblock Plus is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License version 3 as 6 * it under the terms of the GNU General Public License version 3 as
7 * published by the Free Software Foundation. 7 * published by the Free Software Foundation.
8 * 8 *
9 * Adblock Plus is distributed in the hope that it will be useful, 9 * Adblock Plus is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
(...skipping 906 matching lines...) Expand 10 before | Expand all | Expand 10 after
917 } 917 }
918 }, false); 918 }, false);
919 request.send(); 919 request.send();
920 } 920 }
921 else 921 else
922 notifyUser(); 922 notifyUser();
923 }, 923 },
924 924
925 /** 925 /**
926 * Handles clicks inside the browser's content area, will intercept clicks on 926 * Handles clicks inside the browser's content area, will intercept clicks on
927 * abp: links. This can be called either with an event object or with the link 927 * abp: links as well as links to subscribe.adblockplus.org.
928 * target (if it is the former then link target will be retrieved from event
929 * target).
930 */ 928 */
931 onBrowserClick: function (/**Window*/ window, /**Event*/ event, /**String*/ li nkTarget) 929 onBrowserClick: function (/**Window*/ window, /**Event*/ event)
932 { 930 {
933 if (event) 931 // Ignore right-clicks
932 if (event.button == 2)
933 return;
934
935 // Search the link associated with the click
936 let link = event.target;
937 while (!(link instanceof Ci.nsIDOMHTMLAnchorElement))
934 { 938 {
935 // Ignore right-clicks 939 link = link.parentNode;
936 if (event.button == 2) 940
941 if (!link)
937 return; 942 return;
938
939 // Search the link associated with the click
940 let link = event.target;
941 while (link && !(link instanceof Ci.nsIDOMHTMLAnchorElement))
942 link = link.parentNode;
943
944 if (!link || link.protocol != "abp:")
945 return;
946
947 // This is our link - make sure the browser doesn't handle it
948 event.preventDefault();
949 event.stopPropagation();
950
951 linkTarget = link.href;
952 } 943 }
953 944
954 let match = /^abp:\/*subscribe\/*\?(.*)/i.exec(linkTarget); 945 let queryString = null;
955 if (!match) 946 if (link.protocol == "http:" || link.protocol == "https:")
947 {
948 if (link.host == "subscribe.adblockplus.org" && link.pathname == "/")
949 queryString = link.search.substr(1);
950 }
951 else
952 {
953 // Firefox doesn't populate the "search" property for links with
954 // non-standard URL schemes so we need to extract the query string
955 // manually
956 let match = /^abp:\/*subscribe\/*\?(.*)/i.exec(link.href);
957 if (match)
958 queryString = match[1];
959 }
960
961 if (!queryString)
956 return; 962 return;
957 963
964 // This is our link - make sure the browser doesn't handle it
965 event.preventDefault();
966 event.stopPropagation();
967
958 // Decode URL parameters 968 // Decode URL parameters
959 let title = null; 969 let title = null;
960 let url = null; 970 let url = null;
961 let mainSubscriptionTitle = null; 971 let mainSubscriptionTitle = null;
962 let mainSubscriptionURL = null; 972 let mainSubscriptionURL = null;
963 for (let param of match[1].split('&')) 973 for (let param of queryString.split("&"))
964 { 974 {
965 let parts = param.split("=", 2); 975 let parts = param.split("=", 2);
966 if (parts.length != 2 || !/\S/.test(parts[1])) 976 if (parts.length != 2 || !/\S/.test(parts[1]))
967 continue; 977 continue;
968 switch (parts[0]) 978 switch (parts[0])
969 { 979 {
970 case "title": 980 case "title":
971 title = decodeURIComponent(parts[1]); 981 title = decodeURIComponent(parts[1]);
972 break; 982 break;
973 case "location": 983 case "location":
(...skipping 1005 matching lines...) Expand 10 before | Expand all | Expand 10 after
1979 ["abp-command-contribute-hide", "command", UI.hideContributeButton.bind(UI)], 1989 ["abp-command-contribute-hide", "command", UI.hideContributeButton.bind(UI)],
1980 ["abp-command-toggleshownotifications", "command", Notification.toggleIgnoreCa tegory.bind(Notification, "*", null)] 1990 ["abp-command-toggleshownotifications", "command", Notification.toggleIgnoreCa tegory.bind(Notification, "*", null)]
1981 ]; 1991 ];
1982 1992
1983 onShutdown.add(function() 1993 onShutdown.add(function()
1984 { 1994 {
1985 for (let window of UI.applicationWindows) 1995 for (let window of UI.applicationWindows)
1986 if (UI.isBottombarOpen(window)) 1996 if (UI.isBottombarOpen(window))
1987 UI.toggleBottombar(window); 1997 UI.toggleBottombar(window);
1988 }); 1998 });
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld