]>
jfr.im git - irc/quakenet/qwebirc.git/blob - js/jslib.js
1 Array
.prototype.indexFromEnd = function(d
) {
5 return p
[p
.length
+ d
];
10 qwebirc
.util
.dictCopy = function(d
) {
18 /* how horribly inefficient */
19 String
.prototype.replaceAll = function(f
, t
) {
20 var i
= this.indexOf(f
);
30 /* how horribly inefficient (again) */
31 String
.prototype.splitMax = function(by
, max
) {
32 var items
= this.split(by
);
33 var newitems
= items
.slice(0, max
-1);
35 if(items
.length
>= max
)
36 newitems
.push(items
.slice(max
-1).join(by
));
41 /* returns the arguments */
42 qwebirc
.util
.parseURI = function(uri
) {
45 var start
= uri
.indexOf('?');
49 var querystring
= uri
.substring(start
+ 1);
51 var args
= querystring
.split("&");
53 for(i
=0;i
<args
.length
;i
++) {
54 var r
= args
[i
].splitMax("=", 2);
58 result
[unescape(r
[0])] = unescape(r
[1]);
64 qwebirc
.util
.DaysOfWeek
= {
74 qwebirc
.util
.MonthsOfYear
= {
89 qwebirc
.util
.NBSPCreate = function(text
, element
) {
90 var e
= text
.split(" ");
91 for(var i
=0;i
<e
.length
;i
++) {
92 var tn
= document
.createTextNode(e
[i
]);
93 element
.appendChild(tn
);
95 if(i
!= e
.length
- 1) {
96 var e2
= new Element("span");
97 e2
.set("html", " ");
98 element
.appendChild(e2
);
103 qwebirc
.util
.longtoduration = function(l
) {
104 var seconds
= l
% 60;
105 var minutes
= Math
.round((l
% 3600) / 60);
106 var hours
= Math
.round((l
% (3600 * 24)) / 3600);
107 var days
= Math
.round(l
/ (24*3600));
109 return days
+ " days " + hours
+ " hours " + minutes
+ " minutes " + seconds
+ " seconds";
112 qwebirc
.util
.pad = function(x
) {
119 RegExp
.escape = function(text
) {
120 if(!arguments
.callee
.sRE
) {
122 '/', '.', '*', '+', '?', '|',
123 '(', ')', '[', ']', '{', '}', '\\'
125 arguments
.callee
.sRE
= new RegExp('(\\' + specials
.join('|\\') + ')', 'g');
128 return text
.replace(arguments
.callee
.sRE
, '\\$1');
131 qwebirc
.ui
.insertAt = function(position
, parent
, element
) {
132 if(!parent
.childNodes
|| (position
>= parent
.childNodes
.length
)) {
133 parent
.appendChild(element
);
135 parent
.insertBefore(element
, parent
.childNodes
[position
]);
139 qwebirc
.util
.setCaretPos = function(obj
, pos
) {
140 if($defined(obj
.selectionStart
)) {
142 obj
.setSelectionRange(pos
, pos
);
143 } else if(obj
.createTextRange
) {
144 var range
= obj
.createTextRange();
145 range
.move("character", pos
);
150 qwebirc
.util
.setAtEnd = function(obj
) {
151 qwebirc
.util
.setCaretPos(obj
.value
.length
);
154 qwebirc
.util
.getCaretPos = function(element
) {
155 if($defined(element
.selectionStart
))
156 return element
.selectionStart
;
158 if(document
.selection
) {
160 var sel
= document
.selection
.createRange();
161 sel
.moveStart("character", -element
.value
.length
);
162 return sel
.text
.length
;
166 qwebirc
.util
.browserVersion = function() {
167 //return "engine: " + Browser.Engine.name + " platform: " + Browser.Platform.name + " user agent: " + navigator.userAgent;
168 return navigator
.userAgent
;
171 qwebirc
.util
.getEnclosedWord = function(text
, position
) {
172 var l
= text
.split("");
178 var start
= position
- 1;
180 /* special case: starting with space */
183 /* work back until we find the first space */
184 for(;start
>=0;start
--) {
185 if(l
[start
] == ' ') {
195 var s
= text
.substring(start
);
196 var pos
= s
.indexOf(" ");
198 s
= s
.substring(0, pos
);
203 String
.prototype.startsWith = function(what
) {
204 return this.substring(0, what
.length
) == what
;
207 /* NOT cryptographically secure! */
208 qwebirc
.util
.randHexString = function(numBytes
) {
209 var getByte = function() {
210 return (((1+Math
.random())*0x100)|0).toString(16).substring(1);
214 for(var i
=0;i
<numBytes
;i
++)
220 qwebirc
.util
.importJS = function(name
, watchFor
, onload
) {
221 var script
= document
.createElement("script");
222 script
.type
= "text/javascript";
225 if(Browser
.Engine
.trident
) {
227 var checkFn = function() {
228 if(eval("typeof " + watchFor
) != "undefined") {
236 script
.onload
= onload
;
238 document
.getElementsByTagName("head")[0].appendChild(script
);
241 qwebirc
.util
.createInput = function(type
, parent
, name
, selected
) {
243 if(Browser
.Engine
.trident
) {
245 name
= " name=\"" + escape(name
) + "\"";
249 r
= $(document
.createElement("<input type=\"" + type
+ "\"" + name
+ " " + (selected
?" checked":"") + "/>"));
251 r
= new Element("input");
260 parent
.appendChild(r
);
264 /* From: www.webtoolkit.info */
265 qwebirc
.util
.b64Table
= "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
266 qwebirc
.util
.b64Encode = function(data
) {
268 var table
= qwebirc
.util
.b64Table
;
269 for(i
=0;i
<data
.length
;) {
270 var chr1
= data
.charCodeAt(i
++);
271 var chr2
= data
.charCodeAt(i
++);
272 var chr3
= data
.charCodeAt(i
++);
274 var enc1
= chr1
>> 2;
275 var enc2
= ((chr1
& 3) << 4) | (chr2
>> 4);
276 var enc3
= ((chr2
& 15) << 2) | (chr3
>> 6);
277 var enc4
= chr3
& 63;
281 } else if(isNaN(chr3
)) {
285 output
.push(table
.charAt(enc1
) + table
.charAt(enc2
) + table
.charAt(enc3
) + table
.charAt(enc4
));
287 return output
.join("");
290 /* From: www.webtoolkit.info */
291 qwebirc
.util
.b64Decode = function(data
) {
292 data
= data
.replace(/[^A-Za-z0-9\+\/\=]/g, "");
295 var table
= qwebirc
.util
.b64Table
;
296 for(var i
=0;i
<data
.length
;) {
297 var enc1
= table
.indexOf(data
.charAt(i
++));
298 var enc2
= table
.indexOf(data
.charAt(i
++));
299 var enc3
= table
.indexOf(data
.charAt(i
++));
300 var enc4
= table
.indexOf(data
.charAt(i
++));
302 var chr1
= (enc1
<< 2) | (enc2
>> 4);
303 var chr2
= ((enc2
& 15) << 4) | (enc3
>> 2);
304 var chr3
= ((enc3
& 3) << 6) | enc4
;
306 output
.push(String
.fromCharCode(chr1
));
308 output
.push(String
.fromCharCode(chr2
));
310 output
.push(String
.fromCharCode(chr3
));
313 return output
.join("");