]>
Commit | Line | Data |
---|---|---|
9e769c12 CP |
1 | Array.prototype.indexFromEnd = function(d) { |
2 | var p = this; | |
3 | ||
4 | if(d < 0) | |
5 | return p[p.length + d]; | |
6 | ||
7 | return p[d]; | |
8 | } | |
9 | ||
96f28062 CP |
10 | qwebirc.util.dictCopy = function(d) { |
11 | var n = {}; | |
12 | for(var k in d) | |
13 | n[k] = d[k]; | |
14 | ||
15 | return n; | |
16 | } | |
17 | ||
9e769c12 CP |
18 | /* how horribly inefficient */ |
19 | String.prototype.replaceAll = function(f, t) { | |
20 | var i = this.indexOf(f); | |
21 | var c = this; | |
22 | ||
23 | while(i > -1) { | |
24 | c = c.replace(f, t); | |
25 | i = c.indexOf(f); | |
26 | } | |
27 | return c; | |
28 | } | |
29 | ||
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); | |
34 | ||
35 | if(items.length >= max) | |
36 | newitems.push(items.slice(max-1).join(by)); | |
37 | ||
38 | return newitems; | |
39 | } | |
9b63b053 | 40 | |
66de775f | 41 | /* returns the arguments */ |
e20e5a6b | 42 | qwebirc.util.parseURI = function(uri) { |
66de775f CP |
43 | var result = {} |
44 | ||
45 | var start = uri.indexOf('?'); | |
46 | if(start == -1) | |
47 | return result; | |
48 | ||
49 | var querystring = uri.substring(start + 1); | |
50 | ||
51 | var args = querystring.split("&"); | |
52 | ||
53 | for(i=0;i<args.length;i++) { | |
54 | var r = args[i].splitMax("=", 2); | |
55 | if(r.length < 2) | |
56 | continue; | |
57 | ||
58 | result[unescape(r[0])] = unescape(r[1]); | |
59 | } | |
60 | ||
61 | return result; | |
62 | } | |
35155ba7 | 63 | |
e20e5a6b CP |
64 | qwebirc.util.DaysOfWeek = { |
65 | 0: "Sun", | |
66 | 1: "Mon", | |
67 | 2: "Tue", | |
68 | 3: "Wed", | |
69 | 4: "Thu", | |
70 | 5: "Fri", | |
71 | 6: "Sat" | |
72 | }; | |
73 | ||
74 | qwebirc.util.MonthsOfYear = { | |
75 | 0: "Jan", | |
76 | 1: "Feb", | |
77 | 2: "Mar", | |
78 | 3: "Apr", | |
79 | 4: "May", | |
80 | 5: "Jun", | |
81 | 6: "Jul", | |
82 | 7: "Aug", | |
83 | 8: "Sep", | |
84 | 9: "Oct", | |
85 | 10: "Nov", | |
86 | 11: "Dec" | |
87 | }; | |
1d6756bc CP |
88 | |
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); | |
94 | ||
95 | if(i != e.length - 1) { | |
96 | var e2 = new Element("span"); | |
97 | e2.set("html", " "); | |
98 | element.appendChild(e2); | |
99 | } | |
100 | } | |
101 | }; | |
102 | ||
103 | qwebirc.util.longtoduration = function(l) { | |
104 | var seconds = l % 60; | |
4ad3011a CP |
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)); | |
1d6756bc CP |
108 | |
109 | return days + " days " + hours + " hours " + minutes + " minutes " + seconds + " seconds"; | |
110 | } | |
8408e834 CP |
111 | |
112 | qwebirc.util.pad = function(x) { | |
113 | x = "" + x; | |
114 | if(x.length == 1) | |
115 | return "0" + x; | |
116 | return x | |
117 | } | |
96f28062 CP |
118 | |
119 | RegExp.escape = function(text) { | |
120 | if(!arguments.callee.sRE) { | |
121 | var specials = [ | |
122 | '/', '.', '*', '+', '?', '|', | |
123 | '(', ')', '[', ']', '{', '}', '\\' | |
124 | ]; | |
125 | arguments.callee.sRE = new RegExp('(\\' + specials.join('|\\') + ')', 'g'); | |
126 | } | |
127 | ||
128 | return text.replace(arguments.callee.sRE, '\\$1'); | |
52090a1f CP |
129 | } |
130 | ||
131 | qwebirc.ui.insertAt = function(position, parent, element) { | |
132 | if(!parent.childNodes || (position >= parent.childNodes.length)) { | |
133 | parent.appendChild(element); | |
134 | } else { | |
135 | parent.insertBefore(element, parent.childNodes[position]); | |
136 | } | |
3c3ddb14 CP |
137 | } |
138 | ||
3184781b | 139 | qwebirc.util.setCaretPos = function(obj, pos) { |
3c3ddb14 CP |
140 | if($defined(obj.selectionStart)) { |
141 | obj.focus(); | |
142 | obj.setSelectionRange(pos, pos); | |
143 | } else if(obj.createTextRange) { | |
144 | var range = obj.createTextRange(); | |
145 | range.move("character", pos); | |
146 | range.select(); | |
147 | } | |
148 | } | |
149 | ||
150 | qwebirc.util.setAtEnd = function(obj) { | |
3184781b | 151 | qwebirc.util.setCaretPos(obj.value.length); |
3c3ddb14 CP |
152 | } |
153 | ||
154 | qwebirc.util.getCaretPos = function(element) { | |
155 | if($defined(element.selectionStart)) | |
156 | return element.selectionStart; | |
157 | ||
158 | if(document.selection) { | |
159 | element.focus(); | |
160 | var sel = document.selection.createRange(); | |
161 | sel.moveStart("character", -element.value.length); | |
162 | return sel.text.length; | |
163 | } | |
164 | } | |
165 | ||
166 | qwebirc.util.browserVersion = function() { | |
167 | //return "engine: " + Browser.Engine.name + " platform: " + Browser.Platform.name + " user agent: " + navigator.userAgent; | |
168 | return navigator.userAgent; | |
169 | } | |
3184781b CP |
170 | |
171 | qwebirc.util.getEnclosedWord = function(text, position) { | |
172 | var l = text.split(""); | |
173 | var buf = []; | |
174 | ||
175 | if(text == "") | |
176 | return; | |
177 | ||
178 | var start = position - 1; | |
179 | if(start < 0) { | |
180 | /* special case: starting with space */ | |
181 | start = 0; | |
182 | } else { | |
183 | /* work back until we find the first space */ | |
184 | for(;start>=0;start--) { | |
185 | if(l[start] == ' ') { | |
186 | start = start + 1; | |
187 | break; | |
188 | } | |
189 | } | |
190 | } | |
191 | ||
192 | if(start < 0) | |
193 | start = 0; | |
194 | ||
195 | var s = text.substring(start); | |
196 | var pos = s.indexOf(" "); | |
197 | if(pos != -1) | |
198 | s = s.substring(0, pos); | |
199 | ||
200 | return [start, s]; | |
201 | } | |
202 | ||
203 | String.prototype.startsWith = function(what) { | |
204 | return this.substring(0, what.length) == what; | |
205 | } | |
f59585a7 CP |
206 | |
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); | |
211 | }; | |
212 | ||
213 | var l = []; | |
214 | for(var i=0;i<numBytes;i++) | |
215 | l.push(getByte()); | |
216 | ||
217 | return l.join(""); | |
218 | } |