View difference between Paste ID: 6EYpnP2K and
SHOW: | | - or go back to the newest paste.
1-
1+
//   Opera UserJS - Countdown script for forumwarz.com
2
//   This will place the countdown timer into the title
3
//   Author: TT
4
//   v1.4.1
5
6
//set these variables for the 'options'
7
var useShort=true; //set to false if you prefer long string as title
8
var useExShort=false; //only uses biggest value (e.g. only days). trumps useShort.
9
var spacer=''; //default is a 'nothing' for the spacer. use ' ' for a space
10
var useZeros=false; //show 0 days/hours/minutes as '0' instead of excluding them
11
var trackIncit=true;
12
var trackDomination=true;
13
var trackAuctions=true;
14
var trackVisits=true; //track time until visits reload (also deliveries) on /character/me
15
var trackItemBuildr=true;
16
var trackForumBuildr=true;
17
var allowEnd=true; //stop the timer (don't loop past 0) and exit for FB,IB,Me. auctions always end.
18
var debug=false; //use with javascript:dbg() in address bar to find problems
19
var debugVerbose=false; //use with caution. can eat memory with lots of text
20
21
22
// !!! DO NOT EDIT BELOW THIS UNLESS YOU KNOW WHAT YOU ARE DOING !!!
23
var orgTitle = document.title;
24
var URL = document.location.href;
25
var isDom = URL.indexOf('forumwarz.com/domination') != -1;
26
var isIncit = URL.indexOf('forumwarz.com/incit') != -1;
27
var isAuc = URL.indexOf('forumwarz.com/auctions') != -1;
28
var isCharMe = URL.indexOf('forumwarz.com/characters/me') != -1;
29
var isIB = URL.indexOf('forumwarz.com/item_buildr') != -1;
30
var isFB = URL.indexOf('forumwarz.com/forum_buildr') != -1;
31
var fCD;
32
var type = ['day','hour','minute','second'];
33
34
if (debug) document.title = 'Script loaded...';
35
if (debug) var debugStr = 'Debug started.';
36
else var debugStr = 'Enable debugging, jackass';
37
38
if ( (isDom && trackDomination) || (isIncit && trackIncit) || (isAuc && trackAuctions) ||
39
	 (isCharMe && trackVisits) || (isIB && trackItemBuildr) || (isFB && trackForumBuildr) ){
40
		debugAdd('Page trackable. Loading CD check.',false);
41
		checkForCountdown();
42
}
43
44
45
46
function checkForCountdown(){
47
	if (document.getElementById('countdown') != null){
48
		debugAdd('Found CD element. Entering main',false);
49
		main(); //countdown element is not empty. enter main
50
	} else if (checkFinished()) {
51
		finished();
52
		return;
53
	} else {
54
		debugAdd('Element not ready. Looping...',true);
55
		setTimeout('checkForCountdown()', 1000); //else loop
56
	}
57
}
58
59
60
//our main function that calls itself (loop)
61
function main() {
62
	if (document.getElementById('countdown') == null){
63
		if (isAuc){ //only auctions lose their element
64
			debugAdd('Auction closed. Exiting.',false);
65
			finished();
66
			return; //just leave. don't loop
67
		}
68
		debugAdd('Element disappeared... Loop til found.',true);
69
		document.title=orgTitle;
70
		setTimeout('main()',1000); //keep retrying in a new thread
71
		return; //exit this thread
72
	} else if (document.getElementById('countdown').childNodes.length == 0) {
73
		debugAdd('No children. Having secks again...',true);
74
		setTimeout('main()',1000); //keep retrying in a new thread
75
		return; //exit this thread
76
	}
77
	debugAdd('Entered main successfully.',true);
78
	
79
	fCD = document.getElementById('countdown').firstChild.nodeValue; //full countdown
80
	debugAdd('Set fCD.',true);
81
	var newTitle = ''; //start out new title variable as empty
82
	
83
	if (isIncit){ //INCIT specific code for voting page notify!
84
		if (fCD.indexOf('ends') != -1) newTitle = 'VOTING!' + spacer;
85
	}
86
87
	var hasFinished = false;
88
	var t = getCdTextSplit();
89
	if ( (t[0]==0&&t[1]==0&&t[2]==0&&t[3]==1) )
90
		hasFinished = true;
91
	if ( (isAuc && hasFinished) ||
92
		 (isFB && hasFinished && allowEnd) ||
93
		 (isIB && hasFinished && allowEnd) ||
94
		 (isDom && hasFinished && allowEnd) ||
95
		 (isCharMe && hasFinished && allowEnd) ){
96
			finished(); //post our ending title
97
			return; //leave without looping
98
	}
99
	
100
	if (useShort || useExShort || useZeros){
101
		debugAdd('Running getCdTextSplit.',true);
102
		var cdTextSplit = getCdTextSplit();
103
		for (i=0;i<cdTextSplit.size();i++){
104
			if ( (cdTextSplit[i] > 0 || useZeros) && (cdTextSplit[i] > 0 || !useExShort) ||
105
				 (i==3 && cdTextSplit[3] == 0 && newTitle != '') ){ //add 0 seconds to non-empty title
106
				newTitle += cdTextSplit[i] + type[i].substr(0,1) + spacer;
107
			}
108
			if (cdTextSplit[i] > 0 && useExShort) break; //break loop after first non-zero
109
		}
110
	} else {
111
		debugAdd('Fallback. Failed to get times.',true);
112
		newTitle=fCD; //no match. use full countdown string
113
	}
114
115
	
116
	if (isIncit && trackIncit){ //INCIT specific code
117
		debugAdd('INCIT Shit...',true);
118
		var submissions = document.getElementById('submissions_received');
119
		if (submissions!=undefined){ //for when it's not loaded yet
120
			submissions = submissions.innerHTML.split(' ',1); //first chars (number)
121
			if (submissions[0] > 0){
122
				newTitle += submissions[0] + 'sub' + spacer; //append number + 'sub' to new title
123
			}
124
			debugAdd('Finished sub add code.',true);
125
		}
126
127
		var links = document.getElementsByTagName('a'); //grab all links
128
		var ass = '0'; //initialize 'ass'
129
		for(i=0;i<60;i++){ //should be the 47th link, but we will search this range if links change
130
			if (links[i].text.indexOf('Assholes Online') != -1){ //find 'Assholes Online' link text
131
				ass = links[i].text.split(' ',1); //grab first chars (number)
132
				newTitle += spacer + ass[0] + 'ass' + spacer; //append number + 'ass' to new title
133
				break; //exit loop. we only need one match. I got two for some reason...
134
			}
135
		}
136
		debugAdd('Finished ass add code.',true);
137
	}
138
139
	if (!newTitle) newTitle = '...'; //Opera defaults to URL if the title is empty... big nono there.
140
	document.title=newTitle; //finally, set the new title
141
	debugAdd('Title set. Looping...',true);
142
	setTimeout('main()', 1000); //loop main with delay
143
}
144
145
146
function getCdTextSplit(){
147
	var offset;
148
	var cdTextSplit = new Array(4);
149
	for (i=0;i<type.size();i++){
150
		offset = fCD.indexOf(type[i]);
151
		cdTextSplit[i] = offset != -1 ? fCD.substr(fCD.indexOf('',offset-3), 2).strip(' ') : 0;
152
	}
153
	return cdTextSplit;
154
}
155
156
function debugAdd(str,verbose){
157
	if (debug && (!verbose || debugVerbose)) debugStr += '\n' + str;
158
}
159
160
function dbg(){
161
	alert(debugStr);
162
}
163
164
function finished(){
165
	if (isAuc)
166
		document.title='Auction closed!';
167
	else if (isDom)
168
		document.title='Dom round over!';
169
	else if (isFB)
170
		document.title='FB ended!';	
171
	else if (isIB)
172
		document.title='IB ended!';
173
	else if (isIB)
174
		document.title='New visits & gifts!';
175
}
176
177
function checkFinished(){
178
	if (!isAuc) return false; //only auctions can "start" in finished state.
179
	if (document.getElementById('remaining') != null){
180
		var text = document.getElementById('remaining').firstChild.nodeValue;
181
		if (text.indexOf('This auction is closed.') != -1){
182
			debugAdd('Auction finished. Exit.',false);
183
			return true;
184
		} else {
185
			debugAdd('Auction NOT finished. Continue,',false);
186
			return false;
187
		}
188
	} else {
189
		debugAdd("ERROR: You shouldn't see this",false);
190
		return false;
191
	}
192
}