Skip to content

Commit 1228c82

Browse files
committed
IPv6 support, performance tweak, add bitcoin address
1 parent 1faa06c commit 1228c82

File tree

6 files changed

+64
-52
lines changed

6 files changed

+64
-52
lines changed

js/background.js

Lines changed: 54 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// Icon by dunedhel: http://dunedhel.deviantart.com/
33
// Supporting functions by AdThwart - T. Joseph
44

5+
//'use strict'; - enable after testing
56
var version = (function () {
67
var xhr = new XMLHttpRequest();
78
xhr.open('GET', chrome.extension.getURL('manifest.json'), false);
@@ -24,36 +25,60 @@ function enabled(tab, dpcloakindex) {
2425
}
2526
function domainCheck(domain) {
2627
if (!domain) return '-1';
27-
for (var i in whiteList) {
28-
if (domain == whiteList[i]) {
29-
return '0';
30-
break;
31-
}
32-
if (new RegExp('(?:www\\.|^)(?:'+whiteList[i].replace(/^www\./, '').replace(/\./g, '\\.').replace(/\*/g, '[^.]+').replace(/\?/g, '.')+')').test(domain)) {
33-
return '0';
34-
break;
35-
}
28+
if (in_array(domain, whiteList) == '1') return '0';
29+
if (in_array(domain, blackList) == '1') return '1';
30+
return '-1';
31+
}
32+
function in_array(needle, haystack) {
33+
if (!haystack || !needle) return false;
34+
if (binarySearch(haystack, needle) != -1) return '1';
35+
if (needle.indexOf('www.') == 0) {
36+
needle = needle.substring(4);
37+
if (binarySearch(haystack, needle) != -1) return '1';
3638
}
37-
for (var i in blackList) {
38-
if (domain == blackList[i]) {
39-
return '1';
40-
break;
39+
for (var i in haystack) {
40+
if (haystack[i].indexOf("*") == -1 && haystack[i].indexOf("?") == -1) continue;
41+
if (new RegExp('^(?:www\\.|^)(?:'+haystack[i].replace(/\./g, '\\.').replace(/^\[/, '\\[').replace(/\]$/, '\\]').replace(/\?/g, '.').replace(/\*/g, '[^.]+')+')').test(needle)) return '1';
42+
}
43+
return false;
44+
}
45+
function binarySearch(list, item) {
46+
var min = 0;
47+
var max = list.length - 1;
48+
var guess;
49+
var bitwise = (max <= 2147483647) ? true : false;
50+
if (bitwise) {
51+
while (min <= max) {
52+
guess = (min + max) >> 1;
53+
if (list[guess] === item) { return guess; }
54+
else {
55+
if (list[guess] < item) { min = guess + 1; }
56+
else { max = guess - 1; }
57+
}
4158
}
42-
if (new RegExp('(?:www\\.|^)(?:'+blackList[i].replace(/^www\./, '').replace(/\./g, '\\.').replace(/\*/g, '[^.]+').replace(/\?/g, '.')+')').test(domain)) {
43-
return '1';
44-
break;
59+
} else {
60+
while (min <= max) {
61+
guess = Math.floor((min + max) / 2);
62+
if (list[guess] === item) { return guess; }
63+
else {
64+
if (list[guess] < item) { min = guess + 1; }
65+
else { max = guess - 1; }
66+
}
4567
}
4668
}
47-
return '-1';
69+
return -1;
4870
}
4971
function extractDomainFromURL(url) {
5072
if (!url) return "";
51-
var z = url.substr(url.indexOf("://") + 3);
52-
z = z.substr(0, z.indexOf("/"));
53-
z = z.substr(z.indexOf("@") + 1);
54-
var colPos = z.indexOf(":");
55-
if (colPos >= 0) z = z.substr(0, colPos);
56-
return z;
73+
if (url.indexOf("://") != -1) url = url.substr(url.indexOf("://") + 3);
74+
if (url.indexOf("/") != -1) url = url.substr(0, url.indexOf("/"));
75+
if (url.indexOf("@") != -1) url = url.substr(url.indexOf("@") + 1);
76+
if (url.match(/^(?:\[[A-Fa-f0-9:.]+\])(:[0-9]+)?$/g)) {
77+
if (url.indexOf("]:") != -1) return url.substr(0, url.indexOf("]:")+1);
78+
return url;
79+
}
80+
if (url.indexOf(":") > 0) url = url.substr(0, url.indexOf(":"));
81+
return url;
5782
}
5883
function domainHandler(domain,action) {
5984
// Initialize local storage
@@ -81,8 +106,8 @@ function domainHandler(domain,action) {
81106

82107
localStorage['blackList'] = JSON.stringify(tempBlacklist);
83108
localStorage['whiteList'] = JSON.stringify(tempWhitelist);
84-
blackList = tempBlacklist;
85-
whiteList = tempWhitelist;
109+
blackList = tempBlacklist.sort();
110+
whiteList = tempWhitelist.sort();
86111
return false;
87112
}
88113
// ----- Options
@@ -350,7 +375,7 @@ chrome.tabs.onRemoved.addListener(function(tabid, windowInfo) {
350375
if (dpcloakindex != -1) cloakedTabs.splice(dpcloakindex, 1);
351376
if (dpuncloakindex != -1) uncloakedTabs.splice(dpuncloakindex, 1);
352377
});
353-
requestDispatchTable = {
378+
var requestDispatchTable = {
354379
"get-enabled": function(request, sender, sendResponse) {
355380
var dpTabId = sender.tab.windowId+"|"+sender.tab.id;
356381
var dpcloakindex = cloakedTabs.indexOf(dpTabId);
@@ -416,12 +441,12 @@ chrome.pageAction.onClicked.addListener(function(tab) {
416441
// Execute
417442
setDefaultOptions();
418443
// save blacklist and whitelist in global variable for faster lookups
419-
blackList = JSON.parse(localStorage['blackList']);
420-
whiteList = JSON.parse(localStorage['whiteList']);
444+
blackList = JSON.parse(localStorage['blackList']).sort();
445+
whiteList = JSON.parse(localStorage['whiteList']).sort();
421446
setDPIcon();
422447
dpContext();
423448
if ((!optionExists("version") || localStorage["version"] != version) && localStorage["showUpdateNotifications"] == 'true') {
424-
// chrome.tabs.create({ url: chrome.extension.getURL('updated.html'), selected: false }); // very minor update
449+
chrome.tabs.create({ url: chrome.extension.getURL('updated.html'), selected: false });
425450
localStorage["version"] = version;
426451
}
427452
chrome.runtime.onUpdateAvailable.addListener(function (details) {

js/options.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -471,10 +471,9 @@ function stylePreset(s) {
471471
// <!-- modified from KB SSL Enforcer: https://code.google.com/p/kbsslenforcer/
472472
function addList(type) {
473473
var domain = $('#url').val();
474-
var domainValidator = new RegExp('^[\\-\\w\\*\\?]+(\\.[\\-\\w\\*\\?]+)*(:[0-9]+)?$'); // https://stackoverflow.com/posts/18696953/revisions
475474
domain = domain.toLowerCase();
476475

477-
if (!(domainValidator.test(domain))) {
476+
if (!domain.match(/^(?:[\-\w\*\?]+(\.[\-\w\*\?]+)*|((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){3}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})|\[[A-Fa-f0-9:.]+\])?$/g)) {
478477
$('#listMsg').html(chrome.i18n.getMessage("invaliddomain")).stop().fadeIn("slow").delay(2000).fadeOut("slow");
479478
} else {
480479
bkg.domainHandler(domain, type);

manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,5 +27,5 @@
2727
},
2828
"permissions": [ "http://*/*", "https://*/*", "contextMenus", "tabs" ],
2929
"update_url": "http://clients2.google.com/service/update2/crx",
30-
"version": "0.46.56.4"
30+
"version": "0.46.56.5"
3131
}

options.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,7 @@ <h1>Page Title</h1>
239239
<input type="hidden" name="cmd" value="_s-xclick">
240240
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----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-----END PKCS7-----">
241241
<input type="image" src="./img/icon48.png" border="0" name="submit" class="i18_supportimg" alt="Support Andrew!" title="Support Andrew!">
242-
</form> <span class="i18_support">Support Andrew!</span><br /><br />
242+
</form> <span class="i18_support">Support Andrew!</span><br /><br />Bitcoin: <strong>39VJ5L9Yd6WocG6r88uE7ZZnM5J2M5bW92</strong><br /><br />
243243
<i style="width:937px; display:block;"><span class="i18_people">People who bought Andrew coffee</span>: Leonardo C., 朱之灏, Donald D., John B., Patrick H., Luke C., Eric G., Brian B., Daniel C., Joel D., Joseph W., David M., Rafal W., Ip L., Caillin P., Simon B., Keith T., Peter C., Gordon M., James M., Ranjan S., Philipp B., Rommel G., Todd A., Jason T., Vineet W., Adam C., Jim M., Alex U., Stanislav S., George T., Genere S., Kevin S., Jérémy P., Carlos S., Miguel L., Adrian H., Scott B., Daniel C., Mark M., Timothy D., Alexis B., Peter C., Christiaan E., Matthew L., Russell H., David D., Keith S., Elena G., Rafael V., Scott F., Paul M., Danielle F., 曾 信夫, Jon T., Barry D., Andrew H., Ma X., Frank E., Alex W., Roger S., Artem S., Wassim N., Rajat N., Vadim P., Celia D., Mikyas W., Reann M., Gabriel J., Anthony Z., Kai Cheong W., Jason T., Michael L., Maximilian B., Anton C., Koen de W., Juan de Dios Egido A., Harry P., Jaiganesh R., Mark Rafael R., Adam B.</i><br />
244244
<i style="width:937px; display:block;"><span class="i18_translators">People who helped translate</span>: Christoph (Deutsch), Luciano (Español), Yamaji (Japanese), Jérémy (Français), VeryFriend (Russian), Lorenzo (Italian)</i><br />
245245
<i><span class="i18_help">If you can help translate or improve, please contact me</span>: <a href="mailto:[email protected]">[email protected]</a></i><br /><br />

readme.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,4 +29,5 @@ Featured on Lifehacker: http://lifehacker.com/5666312/decreased-productivity-for
2929
2. (optional) Allow in Incognito Mode (Incognito Mode and this extension complement each other!)
3030

3131
## Showing Thanks
32-
* Click on the coffee-cup icon in the Options page to support me :)
32+
* Click on the coffee-cup icon in the Options page to support me via PayPal :)
33+
* Bitcoin: **39VJ5L9Yd6WocG6r88uE7ZZnM5J2M5bW92**

updated.html

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -7,27 +7,14 @@
77
<body id="updatepage">
88
<span id="title">Decreased Productivity</span> by Andrew Y.<br /><br />
99
<div id="main">
10-
<h1>Updated to v0.46.56.4! (Sunday, June 5, 2016)</h1>
10+
<h1>Updated to v0.46.56.5! (Monday, June 20, 2016)</h1>
1111
<ul>
12-
<li>v0.46.56.4:<ul>
13-
<li><strong>Proudly presenting a long-awaited feature</strong>: wildcards and single character matching support:<ul>
14-
<li>Domain Matching: <strong>domain.com</strong> matches domain.com and www.domain.com</li>
15-
<li>Wildcard Matching: <strong>*.domain.com</strong> matches anything.domain.com (but <u>not</u> domain.com (no subdomain))</li>
16-
<li>Single Character Matching: <strong>?.abc.com</strong> matches a.abc.com, b.abc.com, 2.abc.com, etc.</li>
17-
<li><strong>Note 1:</strong> the * and ? can be placed anywhere and/or combined (e.g. ab?.com, cat*.c?)</li>
18-
<li><strong>Note 2:</strong> if there are any duplicates, the whitelist always takes precedence over the blacklist</li>
19-
<li><strong>Note 3:</strong> .4 update = improved performance if you have a very large whitelist/blacklist</li>
20-
</ul></li>
21-
<li>the above update should also result in further improved performance</li>
22-
<li>added cloaking support for &lt;picture&gt; elements</li>
23-
<li>updated list of people who've donated coffee money to me (thank you!)</li>
12+
<li>v0.46.56.5:<ul>
13+
<li>Added support for IPv6 addresses</li>
14+
<li>Improved performance for users with large lists</li>
2415
<li><strong>if you do not want this page appearing every time DP auto-updates, you can disable them by unticking "Show Update Popup" in the <a href="options.html">Options page</a>.</strong></li>
2516
</ul>
2617
</li>
27-
<li>v0.46.55.1:<ul>
28-
<li>further significant foundation code optimization, resulting in (probably noticeably) faster and more efficient logic and processing</li>
29-
</ul>
30-
</li>
3118
<li>If you like my work, want to interact with me, or see what I'm up to, you can <a href="https://twitter.com/andryou" target="_blank">follow me (@andryou) on Twitter!</a> :)</li>
3219
</ul>
3320
<h2>Tips:</h2>
@@ -44,7 +31,7 @@ <h2>Tips:</h2>
4431
<input type="hidden" name="cmd" value="_s-xclick">
4532
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----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-----END PKCS7-----">
4633
<input type="image" src="./img/icon48.png" border="0" name="submit" class="i18_supportimg" alt="Support Andrew!" title="Support Andrew!">
47-
</form> <span class="i18_support">Support Andrew!</span><br /><br />
34+
</form> <span class="i18_support">Support Andrew!</span><br /><br />Bitcoin: <strong>39VJ5L9Yd6WocG6r88uE7ZZnM5J2M5bW92</strong><br /><br />
4835
<i style="width:937px; display:block;"><span class="i18_people">People who bought Andrew coffee</span>: Leonardo C., 朱之灏, Donald D., John B., Patrick H., Luke C., Eric G., Brian B., Daniel C., Joel D., Joseph W., David M., Rafal W., Ip L., Caillin P., Simon B., Keith T., Peter C., Gordon M., James M., Ranjan S., Philipp B., Rommel G., Todd A., Jason T., Vineet W., Adam C., Jim M., Alex U., Stanislav S., George T., Genere S., Kevin S., Jérémy P., Carlos S., Miguel L., Adrian H., Scott B., Daniel C., Mark M., Timothy D., Alexis B., Peter C., Christiaan E., Matthew L., Russell H., David D., Keith S., Elena G., Rafael V., Scott F., Paul M., Danielle F., 曾 信夫, Jon T., Barry D., Andrew H., Ma X., Frank E., Alex W., Roger S., Artem S., Wassim N., Rajat N., Vadim P., Celia D., Mikyas W., Reann M., Gabriel J., Anthony Z., Kai Cheong W., Jason T., Michael L., Maximilian B., Anton C., Koen de W., Juan de Dios Egido A., Harry P., Jaiganesh R., Mark Rafael R., Adam B.</i><br />
4936
<i style="width:937px; display:block;"><span class="i18_translators">People who helped translate</span>: Christoph (Deutsch), Luciano (Español), Yamaji (Japanese), Jérémy (Français), VeryFriend (Russian), Lorenzo (Italian)</i><br />
5037
<i><span class="i18_help">If you can help translate or improve, please contact me</span>: <a href="mailto:[email protected]">[email protected]</a></i><br /><br />

0 commit comments

Comments
 (0)