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

Side by Side Diff: lib/typoAppIntegration.js

Issue 8948027: Ported changes from Adblock Plus integration back into URL Fixer (Closed)
Patch Set: Created Jan. 14, 2013, 10:03 a.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 | « lib/main.js ('k') | lib/typoCollector.js » ('j') | 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 the URL Fixer, 2 * This file is part of the URL Fixer,
3 * Copyright (C) 2006-2012 Eyeo GmbH 3 * Copyright (C) 2006-2012 Eyeo GmbH
4 * 4 *
5 * URL Fixer is free software: you can redistribute it and/or modify 5 * URL Fixer 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 * URL Fixer is distributed in the hope that it will be useful, 9 * URL Fixer 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
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details. 12 * GNU General Public License for more details.
13 * 13 *
14 * You should have received a copy of the GNU General Public License 14 * You should have received a copy of the GNU General Public License
15 * along with URL Fixer. If not, see <http://www.gnu.org/licenses/>. 15 * along with URL Fixer. If not, see <http://www.gnu.org/licenses/>.
16 */ 16 */
17 17
18 let {hook} = require("hooks"); 18 let {hook} = require("hooks");
19 let {application, addonName} = require("info");
20
19 let functionHooks = new WeakMap(); 21 let functionHooks = new WeakMap();
20 22
21 exports.removeFromWindow = function(window) 23 exports.removeFromWindow = function(window)
22 { 24 {
23 if (functionHooks.has(window)) 25 if (functionHooks.has(window))
24 { 26 {
25 let unhook = functionHooks.get(window); 27 let unhook = functionHooks.get(window);
26 unhook(); 28 unhook();
27 functionHooks.delete(window); 29 functionHooks.delete(window);
28 } 30 }
29 }; 31 };
30 32
31 let {application} = require("info"); 33 switch (addonName)
34 {
35 case "url-fixer":
36 {
37 // URL Fixer
38 exports.isTypoCorrectionEnabled = function(window, prefix, domain, suffix) t rue;
39
40 break;
41 }
42 case "adblockplus":
43 {
44 // Adblock Plus
45 let {Prefs} = require("prefs");
46
47 // Do not ask to opt-in if user found setting
48 if (!Prefs.correctTyposAsked)
49 {
50 let onPrefChange = function(name)
51 {
52 if (name == "correctTypos")
53 {
54 Prefs.correctTyposAsked = true;
55 Prefs.removeListener(onPrefChange);
56 }
57 }
58
59 Prefs.addListener(onPrefChange);
60 }
61
62 exports.isTypoCorrectionEnabled = function(window, prefix, domain, suffix)
63 {
64 if (!Prefs.correctTyposAsked && !Prefs.correctTypos)
65 {
66 let {Utils} = require("utils");
67 let message = Utils.getString("typo_optin_message").replace(/\?1\?/, dom ain);
68 let yes = Utils.getString("typo_optin_yes");
69 let no = Utils.getString("typo_optin_no");
70 let buttons = [
71 {
72 label: yes,
73 accessKey: null,
74 callback: function()
75 {
76 // Yes: Enable typo correction
77 Prefs.correctTypos = true;
78 exports.loadURI(window, prefix + domain + suffix);
79 Prefs.correctTyposAsked = true;
80 }
81 },
82 {
83 label: no,
84 accessKey: null,
85 callback: function()
86 {
87 // No: Do nothing
88 Prefs.correctTyposAsked = true;
89 }
90 }
91 ];
92 // We need to have persistence being set to 1 due to redirect which happ ens afterwards
93 exports.openInfobar(window, "adblockplus-infobar-correct-typos-ask", mes sage, buttons, 1);
94 }
95
96 return Prefs.correctTypos;
97 };
98
99 break;
100 }
101 }
102
32 switch (application) 103 switch (application)
33 { 104 {
34 case "firefox": 105 case "firefox":
35 { 106 {
36 // Firefox 107 // Firefox
37 exports.isKnownWindow = function(window) window.document.documentElement.get Attribute("windowtype") == "navigator:browser"; 108 exports.isKnownWindow = function(window) window.document.documentElement.get Attribute("windowtype") == "navigator:browser";
38 109
39 exports.getURLBar = function(window) "gURLBar" in window ? window.gURLBar : null; 110 exports.getURLBar = function(window) "gURLBar" in window ? window.gURLBar : null;
40 111
41 exports.getBrowser = function(window) "gBrowser" in window ? window.gBrowser : null; 112 exports.getBrowser = function(window) "gBrowser" in window ? window.gBrowser : null;
(...skipping 17 matching lines...) Expand all
59 exports.openInfobar = function(window, id, message, buttons, persistence) 130 exports.openInfobar = function(window, id, message, buttons, persistence)
60 { 131 {
61 let browser = exports.getBrowser(window); 132 let browser = exports.getBrowser(window);
62 let infobar = browser.getNotificationBox(); 133 let infobar = browser.getNotificationBox();
63 let notification = infobar.getNotificationWithValue(id); 134 let notification = infobar.getNotificationWithValue(id);
64 135
65 if (notification) 136 if (notification)
66 { 137 {
67 infobar.removeNotification(notification); 138 infobar.removeNotification(notification);
68 } 139 }
69
70 notification = infobar.appendNotification( 140 notification = infobar.appendNotification(
71 message, 141 message,
72 id, 142 id,
73 require("info").addonRoot + "icon64.png", 143 "chrome://" + addonName + "/skin/icon16.png",
74 infobar.PRIORITY_INFO_HIGH, 144 infobar.PRIORITY_INFO_HIGH,
75 buttons 145 buttons
76 ); 146 );
77 notification.persistence = persistence; 147 notification.persistence = persistence;
78 }; 148 };
79 149
80 exports.loadURI = function(window, uri) 150 exports.loadURI = function(window, uri)
81 { 151 {
82 exports.getBrowser(window).loadURI(uri); 152 exports.getBrowser(window).loadURI(uri);
83 }; 153 };
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
149 let notification = infobar.getNotificationWithValue(id); 219 let notification = infobar.getNotificationWithValue(id);
150 220
151 if (notification) 221 if (notification)
152 { 222 {
153 infobar.removeNotification(notification); 223 infobar.removeNotification(notification);
154 } 224 }
155 225
156 notification = infobar.appendNotification( 226 notification = infobar.appendNotification(
157 message, 227 message,
158 id, 228 id,
159 require("info").addonRoot + "icon64.png", 229 "chrome://" + addonName + "/skin/icon16.png",
160 infobar.PRIORITY_INFO_HIGH, 230 infobar.PRIORITY_INFO_HIGH,
161 buttons 231 buttons
162 ); 232 );
163 notification.persistence = persistence; 233 notification.persistence = persistence;
164 }; 234 };
165 235
166 exports.loadURI = function(window, uri) 236 exports.loadURI = function(window, uri)
167 { 237 {
168 exports.getBrowser(window).loadURI(uri); 238 exports.getBrowser(window).loadURI(uri);
169 }; 239 };
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 let notification = infobar.getNotificationWithValue(id); 276 let notification = infobar.getNotificationWithValue(id);
207 277
208 if (notification) 278 if (notification)
209 { 279 {
210 infobar.removeNotification(notification); 280 infobar.removeNotification(notification);
211 } 281 }
212 282
213 notification = infobar.appendNotification( 283 notification = infobar.appendNotification(
214 message, 284 message,
215 id, 285 id,
216 require("info").addonRoot + "icon64.png", 286 "chrome://" + addonName + "/skin/icon16.png",
217 infobar.PRIORITY_INFO_HIGH, 287 infobar.PRIORITY_INFO_HIGH,
218 buttons 288 buttons
219 ); 289 );
220 notification.persistence = persistence; 290 notification.persistence = persistence;
221 } 291 }
222 }; 292 };
223 293
224 exports.loadURI = function(window, uri) 294 exports.loadURI = function(window, uri)
225 { 295 {
226 if ("BrowserUI" in window && "goToURI" in window.BrowserUI) 296 if ("BrowserUI" in window && "goToURI" in window.BrowserUI)
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 functionHooks.set(window, unhook); 349 functionHooks.set(window, unhook);
280 } 350 }
281 }; 351 };
282 352
283 exports.openInfobar = function(window, id, message, buttons, persistence) 353 exports.openInfobar = function(window, id, message, buttons, persistence)
284 { 354 {
285 if ("BrowserApp" in window && "selectedTab" in window.BrowserApp) 355 if ("BrowserApp" in window && "selectedTab" in window.BrowserApp)
286 { 356 {
287 window.NativeWindow.doorhanger.show(message, id, buttons, window.Browser App.selectedTab.id, 357 window.NativeWindow.doorhanger.show(message, id, buttons, window.Browser App.selectedTab.id,
288 { 358 {
289 // No navigation is happening after doorhanger is shown 359 persistence: persistence
290 // so persistence needs to be reduced by one
291 persistence: persistence - 1
292 } 360 }
293 ); 361 );
294 } 362 }
295 }; 363 };
296 364
297 exports.loadURI = function(window, uri) 365 exports.loadURI = function(window, uri)
298 { 366 {
299 if ("BrowserApp" in window && "loadURI" in window.BrowserApp) 367 if ("BrowserApp" in window && "loadURI" in window.BrowserApp)
300 window.BrowserApp.loadURI(uri); 368 window.BrowserApp.loadURI(uri);
301 }; 369 };
302 370
303 break; 371 break;
304 } 372 }
305 default: 373 default:
306 { 374 {
307 exports.isKnownWindow = function(window) false; 375 exports.isKnownWindow = function(window) false;
308 break; 376 break;
309 } 377 }
310 } 378 }
OLDNEW
« no previous file with comments | « lib/main.js ('k') | lib/typoCollector.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld