forked from roshiro/TitleNotifier.js
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtitle_notifier.js
More file actions
129 lines (108 loc) · 2.84 KB
/
Copy pathtitle_notifier.js
File metadata and controls
129 lines (108 loc) · 2.84 KB
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
/* ===========================================================
* title_notifier.js
* ===========================================================
* Copyright 2014 Rafael Oshiro.
* http://www.frontendjournal.com
*
* Lightweight, dependency-free javascript library to dynamically
* show the number of unread notifications in your webpage title.
*
* https://github.com/roshiro/TitleNotifier.js
* ========================================================== */
;(function() {
var title = document.getElementsByTagName('title')[0],
notificationTotal = 0,
notificationMax = Number.MAX_VALUE,
patt = /^\(\d*\+?\) /;
function updateTitle() {
if(notificationTotal === 0) {
title.text = title.text.replace(patt, "");
return;
}
notificationTotalstr = notificationTotal;
if(notificationTotal > notificationMax) {
notificationTotalstr = notificationMax + '+';
}
if(patt.exec(title.text)) {
title.text = title.text.replace(patt, "("+ notificationTotalstr +") ");
} else {
title.text = "(" + notificationTotalstr + ") " + title.text;
}
};
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
};
/**
* TitleNotifier Namespace.
*/
window.titlenotifier = {
/**
* Adds 1 or {value} to total.
*
* @param {value} Number to be addeed to total. (Optional)
*/
add: function(value) {
if(typeof value === "undefined") {
value = 1;
}
notificationTotal += parseInt(value,10);
updateTitle();
},
/**
* Subtracts 1 or {value} from total.
*
* @param {value} Number to be subtracted from total. (Optional)
*/
sub: function(value) {
if(typeof value === "undefined") {
value = 1;
}
value = parseInt(value,10);
if(notificationTotal === 0) {
return;
} else if(value > notificationTotal) {
notificationTotal = 0;
} else {
notificationTotal -= parseInt(value,10);
}
updateTitle();
},
/**
* Sets {value} to total.
*
* @param {value} Number to be set as total.
*/
set: function(value) {
if(!isNumber(value) || value < 0) {
return;
}
notificationTotal = parseInt(value, 10);
updateTitle();
},
/**
* Resets total to zero and resets title to original version.
*/
reset: function() {
notificationTotal = 0;
updateTitle();
},
/**
* Returns the value of current notifications
*/
get: function() {
return notificationTotal;
},
/**
* Sets {value} to total.
*
* @param {value} Number to be set as total.
*/
max: function(value) {
if(!isNumber(value) || value <= 0) {
return;
}
notificationMax = parseInt(value, 10);
updateTitle();
},
}
})();