-
Notifications
You must be signed in to change notification settings - Fork 0
/
background.html
161 lines (138 loc) · 4.04 KB
/
background.html
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
<html>
<head>
<script>
//Global Variables
var tabIds = new Array;
var tabScores = new Array;
var tabLives = new Array;
var deathRow = new Array;
var killZone = 0; //To indicate when changing the selected tab saves the tab.
var clicked = 0; //To prevent repetitive SmartKill clicks;
//Part One: Unimportant tab identification
function kill() {
if (clicked == 1) return;
clicked = 1;
//getting user settings
var setting = localStorage["setting"], config;
if (!setting) setting = 1;
if (setting == 0) config = 10;
else if (setting == 2) config = 0;
else config = 5;
chrome.tabs.getAllInWindow(null, function (tabs) {
for (var i = tabs.length -1; i >= 0; i--) {
var tab = tabs[i];
if (tab.selected || tab.pinned) continue;
var index = tabIds.indexOf(tab.id);
//Remove less-important pages
if (tabScores[index] < 0 && timeDiff(tabLives[index]) > config && tab.url.indexOf('chrome://') == -1) deathRow[deathRow.length] = tab;
}
if (deathRow.length > 0) attemptKill();
else clicked = 0;
});
}
//Part Two: Marking for deletion
function attemptKill(){
for (var i = 0; i < deathRow.length; i++){
var tab = deathRow[i];
chrome.tabs.executeScript(tab.id, {code:"document.title = '**' + document.title + '**'"});
}
killZone = 1; //changes the "mode" to let the user rescue tabs
setTimeout("end();", 7000); //7 minutes(?)
}
//Part Three: deletion of unwanted tabs
function end() {
for (var i = deathRow.length-1; i >= 0; i--){
chrome.tabs.remove(deathRow[i].id);
}
deathRow = [];
killZone = 0;
clicked = 0;
}
//updates the "score" of a tab in the database
function resetVals(index) {
//getting user settings
var setting = localStorage["setting"], fullScore;
if (!setting) setting = 1;
if (setting == 0) fullScore = 50;
else if (setting == 2) fullScore = 10;
else fullScore = 25;
tabScores[index] = fullScore;
var time = new Date();
tabLives[index] = time;
}
//finds the difference (in minutes) between a given time and now
function timeDiff(then) {
var now = new Date();
var diff = now.getTime() - then.getTime();
return diff/60000;
}
//comparing database to actual tab situation
function update(){
chrome.tabs.getAllInWindow(null, function (tabs){
for (var i = 0; i < tabs.length; i++){
if (tabIds.indexOf(tabs[i].id) == -1) add(tabs[i].id);
}
});
}
//adding new tab to database
function add(tabId) {
var index = tabIds.length;
tabIds[index] = tabId;
resetVals(index);
}
//removing a tab from database
function remove(tabId) {
var index = tabIds.indexOf(tabId);
if (index == -1) return;
var length = tabIds.length;
while (index < length) { //length-1
tabIds[index]=tabIds[index+1];
tabScores[index]=tabScores[index+1];
tabLives[index]=tabLives[index+1];
index++;
}
tabIds.pop();
tabScores.pop();
tabLives.pop();
}
//browser clicked
chrome.browserAction.onClicked.addListener(kill);
//tab created
chrome.tabs.onCreated.addListener(function (tab){
add(tab.id);
});
//tab removed
chrome.tabs.onRemoved.addListener(function (tabId){
remove(tabId);
});
//selecion changed
chrome.tabs.onSelectionChanged.addListener(function (tabId,selectInfo) {
var index = -1;
for (var i = 0; i < tabIds.length; i++) {
if (tabIds[i] == tabId) {
tabScores[i]++;
index = i;
}
else tabScores[i]--;
}
//tab rescue mode
if (killZone == 1) {
for (var i = 0; i < deathRow.length; i++) {
if (deathRow[i].id == tabId) {
var tab = deathRow[i];
while (i < deathRow.length) {//length-1
deathRow[i] = deathRow[i+1];
i++;
}
deathRow.pop();
resetVals(index);
chrome.tabs.executeScript(tab.id, {code:"setTimeout('document.title = document.title.substring(2,document.title.length-2)',100);"}); //WHY SETTIMEOUT
break;
}
}
}
});
window.onload=update; //for adding the first tab to the database
</script>
</head>
</html>