Skip to content

Commit f02980a

Browse files
committed
Update to support domain and path restrictions
1 parent 4e2e67f commit f02980a

File tree

16 files changed

+190
-125
lines changed

16 files changed

+190
-125
lines changed

src/block.html

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@
88
<script src="scripts/storage.js"></script>
99
<script src="scripts/common.js"></script>
1010
<script src="scripts/block.js"></script>
11+
<script src="scripts/restriction.js"></script>
12+
<script src="scripts/url.js"></script>
1113
</head>
1214

1315
<body>

src/index.html

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,5 +119,8 @@
119119
<script src="scripts/chart/chart-core.js"></script>
120120
<script src="scripts/storage.js"></script>
121121
<script src="scripts/common.js"></script>
122+
<script src="scripts/timeInterval.js"></script>
123+
<script src="scripts/restriction.js"></script>
122124
<script src="scripts/ui.js"></script>
125+
<script src="scripts/url.js"></script>
123126
<script src="scripts/webact.js"></script>

src/manifest.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,8 @@
3838
"scripts/tab.js",
3939
"scripts/timeInterval.js",
4040
"scripts/background.js",
41-
"scripts/restriction.js"],
41+
"scripts/restriction.js",
42+
"scripts/url.js"],
4243
"persistent": false
4344
},
4445
"browser_action": {

src/options.html

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
<script src="scripts/storage.js"></script>
1212
<script src="scripts/settings.js"></script>
1313
<script src="scripts/restriction.js"></script>
14+
<script src="scripts/url.js"></script>
1415
<script src="scripts/picker/jquery-3.3.1.min.js"></script>
1516
<script src="scripts/picker/clockpicker.min.js"></script>
1617
</head>

src/scripts/activity.js

Lines changed: 26 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -5,27 +5,27 @@ class Activity {
55
if (this.isValidPage(tab) === true) {
66
if (tab.id && (tab.id != 0)) {
77
tabs = tabs || [];
8-
var domain = extractHostname(tab.url);
8+
var url = new Url(tab.url);
99
var isDifferentUrl = false;
10-
if (currentTab !== tab.url) {
10+
if (!url.isMatch(currentTab)) {
1111
isDifferentUrl = true;
1212
}
1313

14-
if (this.isNewUrl(domain) && !this.isInBlackList(domain)) {
14+
if (this.isNewUrl(url) && !this.isInBlackList(url)) {
1515
var favicon = tab.favIconUrl;
1616
if (favicon === undefined) {
17-
favicon = 'chrome://favicon/' + domain;
17+
favicon = 'chrome://favicon/' + url.host;
1818
}
19-
var newTab = new Tab(domain, favicon);
19+
var newTab = new Tab(url, favicon);
2020
tabs.push(newTab);
2121
}
2222

23-
if (isDifferentUrl && !this.isInBlackList(domain)) {
24-
this.setCurrentActiveTab(domain);
25-
var tabUrl = this.getTab(domain);
23+
if (isDifferentUrl && !this.isInBlackList(url)) {
24+
this.setCurrentActiveTab(url);
25+
var tabUrl = this.getTab(url);
2626
if (tabUrl !== undefined)
2727
tabUrl.incCounter();
28-
this.addTimeInterval(domain);
28+
this.addTimeInterval(url);
2929
}
3030
}
3131
} else this.closeIntervalForCurrentTab();
@@ -41,13 +41,13 @@ class Activity {
4141

4242
isInBlackList(domain) {
4343
if (setting_black_list !== undefined && setting_black_list.length > 0)
44-
return setting_black_list.find(o => isDomainEquals(extractHostname(o), extractHostname(domain))) !== undefined;
44+
return setting_black_list.find(o => o.isMatch(domain)) !== undefined;
4545
else return false;
4646
}
4747

4848
isLimitExceeded(domain, tab) {
4949
if (setting_restriction_list !== undefined && setting_restriction_list.length > 0) {
50-
var item = setting_restriction_list.find(o => isDomainEquals(extractHostname(o.domain), extractHostname(domain)));
50+
var item = setting_restriction_list.find(o => o.url.isMatch(domain));
5151
if (item !== undefined) {
5252
var data = tab.days.find(x => x.date == todayLocalDate());
5353
if (data !== undefined) {
@@ -63,7 +63,7 @@ class Activity {
6363

6464
wasDeferred(domain){
6565
if (deferredRestrictionsList != undefined){
66-
let defItem = deferredRestrictionsList.find(x => extractHostname(x.site) == extractHostname(domain));
66+
let defItem = deferredRestrictionsList.find(x => new Url(x.site).isMatch(domain));
6767
if (defItem != null){
6868
let time = defItem.dateOfDeferred;
6969
if (time + DEFERRED_TIMEOUT > new Date().getTime()){
@@ -84,19 +84,23 @@ class Activity {
8484

8585
isNewUrl(domain) {
8686
if (tabs.length > 0)
87-
return tabs.find(o => o.url === domain) === undefined;
87+
return tabs.find(o => o.url.isMatch(domain)) === undefined;
8888
else return true;
8989
}
9090

9191
getTab(domain) {
9292
if (tabs !== undefined)
93-
return tabs.find(o => o.url === domain);
93+
return tabs.find(o => o.url.isMatch(domain));
9494
}
9595

9696

9797
updateFavicon(tab) {
98-
var domain = extractHostname(tab.url);
99-
var currentTab = this.getTab(domain);
98+
if (!this.isValidPage(tab)){
99+
return;
100+
}
101+
102+
var url = new Url(tab.url);
103+
var currentTab = this.getTab(url);
100104
if (currentTab !== null && currentTab !== undefined) {
101105
if (tab.favIconUrl !== undefined && tab.favIconUrl !== currentTab.favicon) {
102106
currentTab.favicon = tab.favIconUrl;
@@ -112,11 +116,11 @@ class Activity {
112116

113117
clearCurrentActiveTab() {
114118
this.closeIntervalForCurrentTab();
115-
currentTab = '';
119+
currentTab = null;
116120
}
117121

118122
addTimeInterval(domain) {
119-
var item = timeIntervalList.find(o => o.domain === domain && o.day == todayLocalDate());
123+
var item = timeIntervalList.find(o => o.url.isMatch(domain) && o.day == todayLocalDate());
120124
if (item != undefined) {
121125
if (item.day == todayLocalDate())
122126
item.addInterval();
@@ -133,17 +137,17 @@ class Activity {
133137
}
134138

135139
closeIntervalForCurrentTab() {
136-
if (currentTab !== '' && timeIntervalList != undefined) {
137-
var item = timeIntervalList.find(o => o.domain === currentTab && o.day == todayLocalDate());
140+
if (currentTab && timeIntervalList != undefined) {
141+
var item = timeIntervalList.find(o => o.url.isMatch(currentTab) && o.day == todayLocalDate());
138142
if (item != undefined)
139143
item.closeInterval();
140144
}
141-
currentTab = '';
145+
currentTab = null;
142146
}
143147

144148
isNeedNotifyView(domain, tab){
145149
if (setting_notification_list !== undefined && setting_notification_list.length > 0) {
146-
var item = setting_notification_list.find(o => isDomainEquals(extractHostname(o.domain), extractHostname(domain)));
150+
var item = setting_notification_list.find(o => o.url.isMatch(domain));
147151
if (item !== undefined) {
148152
var today = todayLocalDate();
149153
var data = tab.days.find(x => x.date == today);

src/scripts/background.js

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ function backgroundCheck() {
3535
if (currentWindow.focused) {
3636
var activeTab = currentWindow.tabs.find(t => t.active === true);
3737
if (activeTab !== undefined && activity.isValidPage(activeTab)) {
38-
var activeUrl = extractHostname(activeTab.url);
38+
var activeUrl = new Url(activeTab.url);
3939
var tab = activity.getTab(activeUrl);
4040
if (tab === undefined) {
4141
activity.addTab(activeTab);
@@ -49,7 +49,7 @@ function backgroundCheck() {
4949
});
5050
} else {
5151
if (tab !== undefined) {
52-
if (currentTab !== tab.url) {
52+
if (!tab.url.isMatch(currentTab)) {
5353
activity.setCurrentActiveTab(tab.url);
5454
}
5555
chrome.idle.queryState(parseInt(setting_interval_inactivity), function(state) {
@@ -146,9 +146,9 @@ function isVideoPlayedOnPage() {
146146
}
147147

148148
function checkDOM(state, activeUrl, tab, activeTab) {
149-
if (state === 'idle' && isDomainEquals(activeUrl, "youtube.com")) {
149+
if (state === 'idle' && activeUrl.isMatch("youtube.com")) {
150150
trackForYT(mainTRacker, activeUrl, tab, activeTab);
151-
} else if (state === 'idle' && isDomainEquals(activeUrl, "netflix.com")) {
151+
} else if (state === 'idle' && activeUrl.isMatch("netflix.com")) {
152152
trackForNetflix(mainTRacker, activeUrl, tab, activeTab);
153153
} else activity.closeIntervalForCurrentTab();
154154
}
@@ -275,13 +275,13 @@ function addListener() {
275275
function loadTabs() {
276276
storage.loadTabs(STORAGE_TABS, function(items) {
277277
tabs = [];
278-
if (items != undefined) {
279-
for (var i = 0; i < items.length; i++) {
280-
tabs.push(new Tab(items[i].url, items[i].favicon, items[i].days, items[i].summaryTime, items[i].counter));
281-
}
282-
if (isNeedDeleteTimeIntervalFromTabs)
283-
deleteTimeIntervalFromTabs();
278+
items = items || [];
279+
280+
for (var i = 0; i < items.length; i++) {
281+
tabs.push(new Tab(items[i].url, items[i].favicon, items[i].days, items[i].summaryTime, items[i].counter));
284282
}
283+
if (isNeedDeleteTimeIntervalFromTabs)
284+
deleteTimeIntervalFromTabs();
285285
});
286286
}
287287

@@ -300,31 +300,46 @@ function deleteYesterdayTimeInterval() {
300300

301301
function loadBlackList() {
302302
storage.getValue(STORAGE_BLACK_LIST, function(items) {
303-
setting_black_list = items;
303+
setting_black_list = [];
304+
items = items || [];
305+
306+
for (var i = 0; i < items.length; i++) {
307+
setting_black_list.push(new Url(url));
308+
}
304309
})
305310
}
306311

307312
function loadTimeIntervals() {
308313
storage.getValue(STORAGE_TIMEINTERVAL_LIST, function(items) {
309314
timeIntervalList = [];
310-
if (items != undefined) {
311-
for (var i = 0; i < items.length; i++) {
312-
timeIntervalList.push(new TimeInterval(items[i].day, items[i].domain, items[i].intervals));
313-
}
314-
deleteYesterdayTimeInterval();
315+
items = items || [];
316+
317+
for (var i = 0; i < items.length; i++) {
318+
timeIntervalList.push(new TimeInterval(items[i].day, items[i].url || items[i].domain, items[i].intervals));
315319
}
320+
deleteYesterdayTimeInterval();
316321
});
317322
}
318323

319324
function loadRestrictionList() {
320325
storage.getValue(STORAGE_RESTRICTION_LIST, function(items) {
321-
setting_restriction_list = items;
322-
})
326+
setting_restriction_list = [];
327+
items = items || [];
328+
329+
for (var i = 0; i < items.length; i++) {
330+
setting_restriction_list.push(new Restriction(items[i].url || items[i].domain, items[i].time));
331+
}
332+
});
323333
}
324334

325335
function loadNotificationList() {
326336
storage.getValue(STORAGE_NOTIFICATION_LIST, function(items) {
327-
setting_notification_list = items;
337+
setting_notification_list = [];
338+
items = items || [];
339+
340+
for (var i = 0; i < items.length; i++) {
341+
setting_notification_list.push(new Notification(items[i].url || items[i].domain, items[i].time));
342+
}
328343
});
329344
}
330345

src/scripts/block.js

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,16 +6,15 @@ var restrictionList = [];
66

77
document.addEventListener("DOMContentLoaded", function () {
88
var url = new URL(document.URL);
9-
blockSiteUrl = url.searchParams.get("url");
10-
document.getElementById("site").innerText = extractHostname(blockSiteUrl);
9+
blockSiteUrl = new Url(url.searchParams.get("url"));
10+
document.getElementById("site").innerText = blockSiteUrl;
1111

1212
storage.getValue(STORAGE_RESTRICTION_LIST, function (items) {
13-
restrictionList = items;
13+
restrictionList = (items || []).map(item => new Restriction(item.url || item.domain, item.time));
1414
if (restrictionList === undefined) restrictionList = [];
15-
var currentItem = restrictionList.find((x) =>
16-
isDomainEquals(extractHostname(x.domain), extractHostname(blockSiteUrl))
17-
);
15+
var currentItem = restrictionList.find(x => x.url.isMatch(blockSiteUrl));
1816
if (currentItem !== undefined) {
17+
document.getElementById("site").innerText = currentItem.url.toString();
1918
document.getElementById("limit").innerText =
2019
convertShortSummaryTimeToString(currentItem.time);
2120
}
@@ -38,7 +37,7 @@ document.addEventListener("DOMContentLoaded", function () {
3837
chrome.tabs.query(
3938
{ currentWindow: true, active: true },
4039
function (tab) {
41-
chrome.tabs.update(tab.id, { url: blockSiteUrl });
40+
chrome.tabs.update(tab.id, { url: blockSiteUrl.href });
4241
}
4342
);
4443
});

src/scripts/chart/chart-core.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -475,7 +475,7 @@ function drawIntervalChart(data) {
475475
})
476476
.attr("height", function (d) {
477477
var offset = getMinutesTo(d.interval) - getMinutesFrom(d.interval);
478-
if (offset == 0) {
478+
if (offset <= 0) {
479479
var offsetSeconds = getSecondsTo(d.interval) - getSecondsFrom(d.interval);
480480
if (offsetSeconds <= 3)
481481
return 0;

src/scripts/common.js

Lines changed: 6 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -64,10 +64,15 @@ function isEmpty(obj) {
6464
}
6565

6666
function convertTimeToSummaryTime(time) {
67+
var resultTimeValue = Number(time);
68+
if (!isNaN(resultTimeValue)){
69+
return resultTimeValue;
70+
}
71+
6772
var timeValue = time.split(':');
6873
var hour = timeValue[0];
6974
var min = timeValue[1];
70-
var resultTimeValue = 0;
75+
resultTimeValue = 0;
7176
if (hour > 0)
7277
resultTimeValue = hour * 3600;
7378
resultTimeValue += min * 60;
@@ -189,38 +194,6 @@ function getDateFromRange(range) {
189194
}
190195
}
191196

192-
function isDomainEquals(first, second) {
193-
if (first === second)
194-
return true;
195-
else {
196-
var resultUrl = function(url) {
197-
if (url.indexOf('www.') > -1)
198-
return url.split('www.')[1];
199-
return url;
200-
};
201-
202-
if (resultUrl(first) === resultUrl(second))
203-
return true;
204-
else return false;
205-
}
206-
}
207-
208-
function extractHostname(url) {
209-
var hostname;
210-
211-
if (url.indexOf("//") > -1) {
212-
hostname = url.split('/')[2];
213-
}
214-
else {
215-
hostname = url.split('/')[0];
216-
}
217-
218-
hostname = hostname.split(':')[0];
219-
hostname = hostname.split('?')[0];
220-
221-
return hostname;
222-
}
223-
224197
function treatAsUTC(date) {
225198
var result = new Date(date);
226199
result.setMinutes(result.getMinutes() - result.getTimezoneOffset());

src/scripts/restriction.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
'use strict';
22

33
class Restriction {
4-
constructor(domain, time) {
5-
this.domain = domain;
4+
constructor(url, time) {
5+
this.url = new Url(url);
66
this.time = convertTimeToSummaryTime(time);
77
}
88
};
99

1010
class Notification{
11-
constructor(domain, time) {
12-
this.domain = domain;
11+
constructor(url, time) {
12+
this.url = new Url(url);
1313
this.time = convertTimeToSummaryTime(time);
1414
}
1515
};

0 commit comments

Comments
 (0)