summaryrefslogtreecommitdiffstats
path: root/script.js
blob: b27ed80017ee461abc4736bb4c9c189ddd1ea024 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
window.onload = function() {
	chrome.proxy.settings.get({ incognito: false }, function(config) {
		var googleList = ["*.google.com", "google.com", "googleusercontent.com", "*.googleusercontent.com", "*.gstatic.com", "gstatic.com"];
		var bypassList = [];
		var lastSetFunction = function() { };
		var inputs = document.getElementsByTagName("input");
		var setPreset = false;
		var parseUrl = function(url) {
			return { scheme: url.substring(0, url.indexOf(":")), host: url.substring(url.lastIndexOf("/") + 1, url.lastIndexOf(":")), port: parseInt(url.substring(url.lastIndexOf(":") + 1)) };
		};
		var parseObject = function(obj) {
			return obj.scheme + "://" + obj.host + ":" + obj.port;
		};
		var closePopup = function() {
			window.close();
		};
		for (var i = 0; i < inputs.length; ++i) {
			if (inputs[i].name == "google") (function(self) {
				self.onclick = function() {
					bypassList = self.checked ? googleList : [];
					lastSetFunction.call(self);
				};
				
				if (config.value.rules.bypassList.length > 0) {
					self.checked = true;
					bypassList = googleList;
				}
			})(inputs[i]);
			else if (inputs[i].value == "system") (function(self) {
				var setIt = function() {
					chrome.proxy.settings.set({ value: { mode: "system" }, scope: "regular" }, closePopup);
					lastSetFunction = setIt;
				};
				self.onclick = setIt;

				if (config.value.mode == "system") {
					self.checked = true;
					lastSetFunction = setIt;
				}
			})(inputs[i]);
			else if (inputs[i].value == "direct") (function(self) {
				var setIt = function() {
					chrome.proxy.settings.set({ value: { mode: "direct" }, scope: "regular" }, closePopup);
					lastSetFunction = setIt;
				};
				self.onclick = setIt;

				if (config.value.mode == "direct") {
					self.checked = true;
					lastSetFunction = setIt;
				}
			})(inputs[i]);
			else if (inputs[i].value == "other") (function(self) {
				var other = document.getElementById("other");
				var setIt =  function() {
					chrome.proxy.settings.set({ value: { mode: "fixed_servers", rules:
						{ singleProxy: parseUrl(other.value), bypassList: bypassList } },
					scope: "regular" }, closePopup);
					lastSetFunction = setIt;
				};
				other.onblur = setIt;
				window.onunload = function() {
					if (self.checked)
						setIt.call(self);
				};
				other.onkeypress = function() {
					self.checked = true;
				};
				if (!setPreset && config.value.mode == "fixed_servers" && typeof config.value.rules.singleProxy != "undefined") {
					other.value = parseObject(config.value.rules.singleProxy);
					self.checked = true;
					lastSetFunction = setIt;
				}
			})(inputs[i]);
			else (function(self) {
				var setIt = function() {
					chrome.proxy.settings.set({ value: { mode: "fixed_servers", rules:
						{ singleProxy: parseUrl(self.value), bypassList: bypassList } },
					scope: "regular" }, closePopup);
					lastSetFunction = setIt;
				};
				self.onclick = setIt;
				if (config.value.mode == "fixed_servers" && typeof config.value.rules.singleProxy != "undefined" && self.value == parseObject(config.value.rules.singleProxy)) {
					self.checked = true;
					setPreset = true;
					lastSetFunction = setIt;
				}
			})(inputs[i]);
		}
	});
};