author | Dan |
Tue, 13 Nov 2007 23:33:14 -0500 | |
changeset 9 | 6d9655e02026 |
parent 1 | 6f8b7c6fac02 |
permissions | -rw-r--r-- |
0 | 1 |
// Client detection from MediaWiki |
2 |
var clientPC = navigator.userAgent.toLowerCase(); // Get client info |
|
3 |
var is_gecko = ((clientPC.indexOf('gecko')!=-1) && (clientPC.indexOf('spoofer')==-1) |
|
4 |
&& (clientPC.indexOf('khtml') == -1) && (clientPC.indexOf('netscape/7.0')==-1)); |
|
5 |
var is_safari = ((clientPC.indexOf('applewebkit')!=-1) && (clientPC.indexOf('spoofer')==-1)); |
|
6 |
var is_khtml = (navigator.vendor == 'KDE' || ( document.childNodes && !document.all && !navigator.taintEnabled )); |
|
7 |
if (clientPC.indexOf('opera') != -1) { |
|
8 |
var is_opera = true; |
|
9 |
var is_opera_preseven = (window.opera && !document.childNodes); |
|
10 |
var is_opera_seven = (window.opera && document.childNodes); |
|
11 |
} |
|
12 |
||
13 |
// List of BBcode buttons |
|
14 |
||
15 |
var buttons = [ |
|
16 |
{ |
|
17 |
'start' : '[b]', |
|
18 |
'end' : '[/b]', |
|
19 |
'desc' : 'Bold', |
|
20 |
'style' : { 'fontWeight' : 'bold' } |
|
21 |
}, |
|
22 |
{ |
|
23 |
'start' : '[i]', |
|
24 |
'end' : '[/i]', |
|
25 |
'desc' : 'Italics', |
|
26 |
'style' : { 'fontStyle' : 'italic' } |
|
27 |
}, |
|
28 |
{ |
|
29 |
'start' : '[u]', |
|
30 |
'end' : '[/u]', |
|
31 |
'desc' : 'Underline', |
|
32 |
'style' : { 'textDecoration' : 'underline' } |
|
33 |
}, |
|
34 |
{ |
|
35 |
'start' : '[color=black]', |
|
36 |
'end' : '[/color]', |
|
37 |
'custom': true, |
|
38 |
'func' : function() { openColorPicker(this); }, |
|
39 |
'desc' : 'Color', |
|
40 |
'style' : { 'color' : 'red' } |
|
41 |
}, |
|
42 |
{ |
|
43 |
'start' : '[size=1]', |
|
44 |
'end' : '[/size]', |
|
45 |
'custom': true, |
|
46 |
'func' : function() { openSizePicker(this); }, |
|
47 |
'desc' : 'Size' |
|
48 |
}, |
|
49 |
{ |
|
50 |
'start' : '[code]', |
|
51 |
'end' : '[/code]', |
|
52 |
'desc' : 'Code', |
|
53 |
'style' : { 'fontFamily' : 'courier new, monospace' } |
|
54 |
}, |
|
55 |
{ |
|
56 |
'start' : '[quote]', |
|
57 |
'end' : '[/quote]', |
|
58 |
'desc' : 'Quote' |
|
1
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
59 |
}, |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
60 |
{ |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
61 |
'start' : '[url]', |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
62 |
'end' : '[/url]', |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
63 |
'custom':true, |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
64 |
'func' : function() { openUrlInput(this); }, |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
65 |
'desc' : 'URL' |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
66 |
}, |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
67 |
{ |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
68 |
'start' : '[[', |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
69 |
'end' : ']]', |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
70 |
'custom':true, |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
71 |
'func' : function() { openWikilinkInput(this); }, |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
72 |
'desc' : 'Wikilink' |
0 | 73 |
} |
74 |
]; |
|
75 |
||
76 |
// List of valid smilies |
|
77 |
var smilies = { |
|
78 |
'O:-)' : 'face-angel.png', |
|
79 |
'O:)' : 'face-angel.png', |
|
80 |
'O=)' : 'face-angel.png', |
|
81 |
':-)' : 'face-smile.png', |
|
82 |
':)' : 'face-smile.png', |
|
83 |
'=)' : 'face-smile-big.png', |
|
84 |
':-(' : 'face-sad.png', |
|
85 |
':(' : 'face-sad.png', |
|
86 |
';(' : 'face-sad.png', |
|
87 |
':-O' : 'face-surprise.png', |
|
88 |
';-)' : 'face-wink.png', |
|
89 |
';)' : 'face-wink.png', |
|
90 |
'8-)' : 'face-glasses.png', |
|
91 |
'8)' : 'face-glasses.png', |
|
92 |
':-D' : 'face-grin.png', |
|
93 |
':D' : 'face-grin.png', |
|
94 |
'=D' : 'face-grin.png', |
|
95 |
':-*' : 'face-kiss.png', |
|
96 |
':*' : 'face-kiss.png', |
|
97 |
'=*' : 'face-kiss.png', |
|
98 |
':\'(' : 'face-crying.png', |
|
99 |
':-|' : 'face-plain.png', |
|
100 |
':-\\' : 'face-plain.png', |
|
101 |
':-/' : 'face-plain.png', |
|
102 |
':joke:' : 'face-plain.png', |
|
103 |
']:->' : 'face-devil-grin.png', |
|
104 |
':kiss:' : 'face-kiss.png', |
|
105 |
':-P' : 'face-tongue-out.png', |
|
106 |
':P' : 'face-tongue-out.png', |
|
107 |
':-p' : 'face-tongue-out.png', |
|
108 |
':p' : 'face-tongue-out.png', |
|
109 |
':-X' : 'face-sick.png', |
|
110 |
':X' : 'face-sick.png', |
|
111 |
':sick:' : 'face-sick.png', |
|
112 |
':-]' : 'face-oops.png', |
|
113 |
':]' : 'face-oops.png', |
|
114 |
':oops:' : 'face-oops.png', |
|
115 |
':-[' : 'face-embarassed.png', |
|
116 |
':[' : 'face-embarassed.png' |
|
117 |
}; |
|
118 |
||
119 |
function initBBCodeControls() |
|
120 |
{ |
|
121 |
txtars = getElementsByClassName(document, 'textarea', 'bbcode'); |
|
122 |
for ( i = 0; i < txtars.length; i++ ) |
|
123 |
{ |
|
124 |
convertTextAreaToBBCode(txtars[i]); |
|
125 |
} |
|
126 |
} |
|
127 |
||
128 |
var smileycache = { 'td' : [], 'img' : [] }; |
|
129 |
||
130 |
function convertTextAreaToBBCode(txtarea) |
|
131 |
{ |
|
132 |
var pn = txtarea.parentNode; |
|
133 |
||
134 |
var loadingDiv = document.createElement('div'); |
|
135 |
loadingDiv.appendChild(document.createTextNode('Initializing editor...')); |
|
136 |
pn.appendChild(loadingDiv); |
|
137 |
||
138 |
if(!IE) |
|
139 |
{ |
|
140 |
||
141 |
var smileybox = document.createElement('div'); |
|
142 |
smileybox.style.cssFloat = 'left'; // Mozilla |
|
143 |
smileybox.style.styleFloat = 'left'; // IE |
|
144 |
smileybox.style.marginRight = '10px'; |
|
145 |
smileybox.style.maxWidth = '220px'; |
|
146 |
smileybox.style.maxHeight = '300px'; |
|
147 |
smileybox.style.clip = 'rect(0px,auto,auto,0px)'; |
|
148 |
smileybox.style.overflow = 'auto'; |
|
149 |
||
150 |
var fl = document.createElement('fieldset'); |
|
151 |
var lb = document.createElement('legend'); |
|
152 |
lb.appendChild(document.createTextNode('Smilies')); |
|
153 |
fl.appendChild(lb); |
|
154 |
var used = []; |
|
155 |
||
156 |
var frm = document.createElement('form'); |
|
157 |
frm.action='javascript:void(0)'; |
|
158 |
frm.onsubmit = function(){return false;}; |
|
159 |
||
160 |
var tbl = document.createElement('table'); |
|
161 |
tbl.border = '0'; |
|
162 |
tbl.cellspacing = '0'; |
|
163 |
tbl.cellpadding = '0'; |
|
164 |
tbl.width = '100%'; |
|
1
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
165 |
tbl.style.backgroundColor = 'transparent'; |
0 | 166 |
|
167 |
var tr = document.createElement('tr'); |
|
168 |
var tick = -1; |
|
169 |
var apd = false; |
|
170 |
||
171 |
for ( var i in smilies ) |
|
172 |
{ |
|
173 |
apd = false; |
|
174 |
if ( in_array(smilies[i], used) ) |
|
175 |
continue; |
|
176 |
used.push(smilies[i]); |
|
177 |
||
178 |
tick++; |
|
179 |
if ( tick == 3 ) |
|
180 |
{ |
|
181 |
tick = 0; |
|
182 |
tbl.appendChild(tr); |
|
183 |
tr = document.createElement('tr'); |
|
184 |
apd = true; |
|
185 |
} |
|
186 |
||
187 |
var smile = i.replace(/\\/g, '\\\\'); |
|
188 |
||
189 |
var td = document.createElement('td'); |
|
190 |
td.style.textAlign = 'center'; |
|
191 |
td.style.padding = '0'; |
|
192 |
||
193 |
var img = ( IE ) ? new Image() : document.createElement('input'); |
|
194 |
img.type = 'image'; |
|
195 |
img.className = 'clicksmiley'; |
|
196 |
img.src = scriptPath + '/images/smilies/' + smilies[i]; |
|
197 |
img.style.cursor = 'pointer'; |
|
198 |
img.style.margin = '2px'; |
|
199 |
img.onclick = insertSmiley; |
|
200 |
img.title = i; |
|
201 |
img.alt = i; |
|
202 |
if (IE) |
|
203 |
{ |
|
204 |
// This IE bug (yet another) is stupid BEYOND reason. |
|
205 |
setTimeout('smileycache.td['+smileycache.td.length+'].appendChild(smileycache.img['+smileycache.img.length+']);', 20); |
|
206 |
smileycache.img[smileycache.img.length] = img; |
|
207 |
smileycache.td[smileycache.td.length] = td; |
|
208 |
} |
|
209 |
else |
|
210 |
{ |
|
211 |
td.appendChild(img); |
|
212 |
} |
|
213 |
tr.appendChild(td); |
|
214 |
} |
|
215 |
||
216 |
if (!apd) |
|
217 |
tbl.appendChild(tr); |
|
218 |
||
219 |
frm.appendChild(tbl); |
|
220 |
fl.appendChild(frm); |
|
221 |
||
222 |
smileybox.appendChild(fl); |
|
223 |
pn.insertBefore(smileybox, txtarea); |
|
224 |
||
225 |
} |
|
226 |
else |
|
227 |
{ |
|
228 |
var div = document.createElement('div'); |
|
229 |
var html = '<fieldset style="padding: 10px; display: inline;"><legend>Available smilies:</legend>'; |
|
230 |
var c = 0; |
|
231 |
for ( var i in smilies ) |
|
232 |
{ |
|
233 |
c++; |
|
234 |
html += i + ' '; |
|
235 |
if ( c == 10 ) |
|
236 |
{ |
|
237 |
html += '<br />'; |
|
238 |
c = 0; |
|
239 |
} |
|
240 |
} |
|
241 |
html += '</fieldset>'; |
|
242 |
div.innerHTML = html; |
|
243 |
pn.appendChild(div, txtarea); |
|
244 |
} |
|
245 |
||
246 |
var toolbar = document.createElement('div'); |
|
247 |
for ( j = 0; j < buttons.length; j++ ) |
|
248 |
{ |
|
249 |
var btn = document.createElement('input'); |
|
250 |
btn.type='button'; |
|
251 |
btn.className = 'bbcbutton'; |
|
252 |
btn.value = buttons[j].desc; |
|
253 |
if ( buttons[j].custom ) |
|
254 |
btn.onclick = buttons[j].func; |
|
255 |
else |
|
256 |
btn.onclick = BBCodeClickHandler; |
|
257 |
if ( buttons[j].style ) |
|
258 |
{ |
|
259 |
for ( var k in buttons[j].style ) |
|
260 |
{ |
|
261 |
btn.style[k] = buttons[j].style[k]; |
|
262 |
} |
|
263 |
} |
|
264 |
toolbar.appendChild(btn); |
|
265 |
} |
|
266 |
||
267 |
pn.insertBefore(toolbar, txtarea); |
|
268 |
pn.removeChild(loadingDiv); |
|
269 |
} |
|
270 |
||
271 |
function insertSmiley() |
|
272 |
{ |
|
273 |
var imgid = this.src; |
|
274 |
imgid = imgid.split('/'); |
|
275 |
imgid = imgid[imgid.length-1]; |
|
276 |
emot = array_search(imgid, smilies) + ' '; |
|
277 |
var o = this.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.nextSibling.firstChild; |
|
278 |
formatBBCode(o, emot, "", ""); |
|
279 |
return false; |
|
280 |
} |
|
281 |
||
282 |
function BBCodeClickHandler() |
|
283 |
{ |
|
284 |
var obj = false; |
|
285 |
for ( i = 0; i < buttons.length; i++ ) |
|
286 |
{ |
|
287 |
if ( buttons[i]['desc'] == this.value ) |
|
288 |
{ |
|
289 |
obj = buttons[i]; |
|
290 |
break; |
|
291 |
} |
|
292 |
} |
|
293 |
if(!obj) |
|
294 |
return false; |
|
295 |
formatBBCode(this, obj['start'], obj['end'], obj['desc']); |
|
296 |
return true; |
|
297 |
} |
|
298 |
||
299 |
// |
|
300 |
// COLOR PICKER |
|
301 |
// |
|
302 |
||
303 |
function openColorPicker(parent) |
|
304 |
{ |
|
305 |
var off = fetch_offset(parent); |
|
306 |
var dim = fetch_dimensions(parent); |
|
307 |
var top = off['top'] + dim['h'] - 1; |
|
308 |
var left = off['left']; |
|
309 |
||
310 |
var div = document.createElement('div'); |
|
311 |
div.style.border = '1px solid #000000'; |
|
312 |
div.style.padding = '10px'; |
|
313 |
div.style.position = 'absolute'; |
|
314 |
div.style.top = top + 'px'; |
|
315 |
div.style.left = left + 'px'; |
|
316 |
div.style.backgroundColor = '#ffffff'; |
|
317 |
||
318 |
var cwheel = document.createElement('div'); |
|
319 |
cwheel.id = 'color_wheel'; |
|
320 |
||
321 |
var cinput = document.createElement('input'); |
|
322 |
cinput.size = '7'; |
|
323 |
cinput.id = 'color_val'; |
|
324 |
cinput.value = '#ff0000'; |
|
325 |
||
326 |
var btni = document.createElement('input'); |
|
327 |
btni.type = 'button'; |
|
328 |
btni.value = 'Insert'; |
|
329 |
btni.onclick = finishColorPicker; |
|
330 |
||
331 |
var btnc = document.createElement('input'); |
|
332 |
btnc.type = 'button'; |
|
333 |
btnc.value = 'Cancel'; |
|
334 |
btnc.onclick = closeColorPicker; |
|
335 |
||
336 |
div.appendChild(cwheel); |
|
337 |
div.appendChild(cinput); |
|
338 |
div.appendChild(btni); |
|
339 |
div.appendChild(btnc); |
|
340 |
||
341 |
parent.parentNode.appendChild(div); |
|
342 |
||
343 |
$jq('#color_wheel').farbtastic('#color_val'); |
|
344 |
} |
|
345 |
||
346 |
function finishColorPicker() |
|
347 |
{ |
|
348 |
parent = this.parentNode; |
|
349 |
input = parent.getElementsByTagName('input')[0]; |
|
350 |
color = input.value; |
|
351 |
formatBBCode(parent, '[color=' + color + ']', '[/color]', 'Colored text'); |
|
352 |
parent.parentNode.removeChild(parent); |
|
353 |
} |
|
354 |
||
355 |
function closeColorPicker() |
|
356 |
{ |
|
357 |
parent = this.parentNode; |
|
358 |
parent.parentNode.removeChild(parent); |
|
359 |
} |
|
360 |
||
361 |
// |
|
362 |
// SIZE PICKER |
|
363 |
// |
|
364 |
||
365 |
function openSizePicker(parent) |
|
366 |
{ |
|
367 |
||
368 |
var off = fetch_offset(parent); |
|
369 |
var dim = fetch_dimensions(parent); |
|
370 |
var top = off['top'] + dim['h'] - 1; |
|
371 |
var left = off['left']; |
|
372 |
||
373 |
var div = document.createElement('div'); |
|
374 |
div.style.border = '1px solid #000000'; |
|
375 |
div.style.padding = '3px'; |
|
376 |
div.style.position = 'absolute'; |
|
377 |
div.style.top = top + 'px'; |
|
378 |
div.style.left = left + 'px'; |
|
379 |
div.style.backgroundColor = '#ffffff'; |
|
380 |
div.style.width = '130px'; |
|
381 |
//div.style.maxHeight = '400px'; |
|
382 |
div.style.clip = 'rect(0px,auto,auto,0px)'; |
|
383 |
div.style.overflow = 'hidden'; |
|
384 |
||
385 |
var tbl = document.createElement('table'); |
|
386 |
tbl.border = '0'; |
|
387 |
tbl.cellspacing = '0'; |
|
388 |
tbl.cellpadding = '0'; |
|
389 |
tbl.style.maxWidth = '75px'; |
|
390 |
tbl.style.clip = 'rect(0px,75px,auto,0px)'; |
|
391 |
tbl.style.overflow = 'hidden'; |
|
392 |
||
393 |
var i = 0; |
|
394 |
||
395 |
for ( i = 0.5; i <= 4; i=i+0.5 ) |
|
396 |
{ |
|
397 |
var tr = document.createElement('tr'); |
|
398 |
var td = document.createElement('td'); |
|
399 |
td.innerHTML = i; |
|
400 |
tr.appendChild(td); |
|
401 |
var td = document.createElement('td'); |
|
402 |
td.className = 'sizepick_td'; |
|
403 |
td.style.fontSize = i + 'em'; |
|
404 |
td.innerHTML = 'The quick brown fox jumps over the lazy dog.'; |
|
405 |
td.onclick = function() { sizePickClickHandler(this); } |
|
406 |
tr.appendChild(td); |
|
407 |
tbl.appendChild(tr); |
|
408 |
} |
|
409 |
||
410 |
var a = document.createElement('a'); |
|
411 |
a.href='#'; |
|
412 |
a.onclick = function() { this.parentNode.parentNode.removeChild(this.parentNode); return false; }; |
|
413 |
a.appendChild(document.createTextNode('Close size picker')); |
|
414 |
||
415 |
div.appendChild(tbl); |
|
416 |
div.appendChild(a); |
|
417 |
parent.parentNode.appendChild(div); |
|
418 |
||
419 |
} |
|
420 |
||
421 |
function sizePickClickHandler(parent) |
|
422 |
{ |
|
423 |
size = parent.style.fontSize.substr(0, parent.style.fontSize.length - 2); |
|
424 |
formatBBCode(parent.parentNode.parentNode.parentNode, '[size=' + size + ']', '[/size]', 'Large/small text'); |
|
425 |
parent.parentNode.parentNode.parentNode.parentNode.removeChild(parent.parentNode.parentNode.parentNode); |
|
426 |
} |
|
427 |
||
428 |
// |
|
1
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
429 |
// URL INPUT |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
430 |
// |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
431 |
|
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
432 |
function openUrlInput(button) |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
433 |
{ |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
434 |
var url = prompt('Please enter the URL to the page you want to link to:', 'http://'); |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
435 |
if ( url == '' || url == 'http://' || !url ) |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
436 |
return false; |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
437 |
|
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
438 |
var start = '[url]'; |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
439 |
var inner = url; |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
440 |
var end = '[/url]'; |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
441 |
|
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
442 |
var text = prompt('Please enter some text to be displayed as the link (optional):'); |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
443 |
if ( text != '' && ! (!text) ) |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
444 |
{ |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
445 |
start = '[url=' + url + ']'; |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
446 |
inner = text; |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
447 |
end = '[/url]'; |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
448 |
} |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
449 |
|
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
450 |
formatBBCode(button, start, end, inner); |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
451 |
} |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
452 |
|
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
453 |
// |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
454 |
// WIKILINK INPUT |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
455 |
// |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
456 |
|
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
457 |
function openWikilinkInput(button) |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
458 |
{ |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
459 |
var url = prompt('Please enter the title of the page to link to:', ''); |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
460 |
if ( url == '' || !url ) |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
461 |
return false; |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
462 |
|
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
463 |
var start = '[['; |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
464 |
var inner = url; |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
465 |
var end = ']]'; |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
466 |
|
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
467 |
var text = prompt('Please enter some text to be displayed as the link (optional):'); |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
468 |
if ( text != '' && ! (!text) ) |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
469 |
{ |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
470 |
start = '[[' + url + '|'; |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
471 |
inner = text; |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
472 |
end = ']]'; |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
473 |
} |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
474 |
|
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
475 |
formatBBCode(button, start, end, inner); |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
476 |
} |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
477 |
|
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
478 |
// |
0 | 479 |
// HTML RENDERER |
480 |
// |
|
481 |
||
482 |
function htmlspecialchars(text) |
|
483 |
{ |
|
484 |
text = text.replace(/</g, '<'); |
|
485 |
text = text.replace(/>/g, '>'); |
|
486 |
return text; |
|
487 |
} |
|
488 |
||
489 |
function render_bbcode(text) |
|
490 |
{ |
|
491 |
// Smilies |
|
492 |
for(var i in smilies) |
|
493 |
{ |
|
494 |
if ( text.indexOf(i) > -1 ) |
|
495 |
{ |
|
496 |
while ( text.indexOf(i) > -1 ) |
|
497 |
{ |
|
498 |
text = text.replace(i, '<img alt="' + rawhtmlcode(i) + '" src="/images/smilies/' + smilies[i] + '" />'); |
|
499 |
} |
|
500 |
} |
|
501 |
} |
|
502 |
||
503 |
// Destroy (X|HT)ML tags |
|
504 |
text = htmlspecialchars(text); |
|
505 |
text = text.replace(/ /g, ' '); |
|
506 |
||
507 |
// Bold text |
|
508 |
text = text.replace(/\[b\]([\w\W]+?)\[\/b\]/g, '<span style="font-weight: bold;">$1</span>'); |
|
509 |
||
510 |
// Italicized text |
|
511 |
text = text.replace(/\[i\]([\w\W]+?)\[\/i\]/g, '<span style="font-style: italic;">$1</span>'); |
|
512 |
||
513 |
// Underlined text |
|
514 |
text = text.replace(/\[u\]([\w\W]+?)\[\/u\]/g, '<span style="text-decoration: underline;">$1</span>'); |
|
515 |
||
516 |
// Quotes |
|
517 |
text = text.replace(/\[quote\]([\w\W]+?)\[\/quote\]/g, '<blockquote>$1</blockquote>'); |
|
518 |
||
519 |
// Colored text |
|
520 |
text = text.replace(/\[color=#([0-9A-Fa-f]+?)\]([\w\W]*?)\[\/color\]/g, '<span style="color: #$1">$2</span>'); |
|
521 |
||
522 |
// Sized text |
|
523 |
text = text.replace(/\[size=([0-9\.]+?)\]([\w\W]*?)\[\/size\]/g, '<span style="font-size: $1em">$2</span>'); |
|
524 |
||
525 |
// Newlines |
|
526 |
var nlre = new RegExp(unescape('%0A'), 'g'); |
|
527 |
text = text.replace(nlre, '<br />' + unescape('%0A')); |
|
528 |
||
529 |
// Preformatted text |
|
530 |
text = text.replace(/\[code\]([\w\W]+?)\[\/code\]/gi, '<pre class="code">$1</pre>'); |
|
531 |
text = text.replace(/<pre class=\"code\">([\s]+)/gi, '<pre class="code">'); |
|
532 |
text = text.replace(/([\s]+)<\/pre>/gi, '</pre>'); |
|
533 |
||
534 |
return text; |
|
535 |
} |
|
536 |
||
537 |
function rawhtmlcode(text) |
|
538 |
{ |
|
539 |
var ret = ''; |
|
540 |
for ( var i = 0; i < text.length; i++ ) |
|
541 |
{ |
|
542 |
chr = text.charCodeAt(i); |
|
543 |
chr = '&#' + chr + ';'; |
|
544 |
ret += chr; |
|
545 |
} |
|
546 |
return ret; |
|
547 |
} |
|
548 |
||
549 |
// Preview function |
|
550 |
function makePreview(obj) |
|
551 |
{ |
|
552 |
obj = document.getElementById(obj); |
|
553 |
var bbcode = obj.value; |
|
554 |
var body = document.getElementsByTagName('body')[0]; |
|
555 |
var div = document.createElement('div'); |
|
556 |
div.style.border = '1px solid #000'; |
|
557 |
div.style.padding = '10px'; |
|
558 |
div.innerHTML = render_bbcode(bbcode); |
|
559 |
//body.insertBefore(div, body.firstChild); |
|
560 |
body.appendChild(div); |
|
561 |
} |
|
562 |
||
563 |
function fetch_offset(obj) { |
|
564 |
var left_offset = obj.offsetLeft; |
|
565 |
var top_offset = obj.offsetTop; |
|
566 |
while ((obj = obj.offsetParent) != null) { |
|
567 |
left_offset += obj.offsetLeft; |
|
568 |
top_offset += obj.offsetTop; |
|
569 |
} |
|
570 |
return { 'left' : left_offset, 'top' : top_offset }; |
|
571 |
} |
|
572 |
||
573 |
function fetch_dimensions(o) { |
|
574 |
var w = o.offsetWidth; |
|
575 |
var h = o.offsetHeight; |
|
576 |
return { 'w' : w, 'h' : h }; |
|
577 |
} |
|
578 |
||
579 |
function getElementsByClassName(parent, type, cls) { |
|
580 |
if(!type) |
|
581 |
type = '*'; |
|
582 |
if(!parent) |
|
583 |
parent = document; |
|
584 |
ret = new Array(); |
|
585 |
el = parent.getElementsByTagName(type); |
|
586 |
for ( var i in el ) |
|
587 |
{ |
|
1
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
588 |
if(el[i]) |
0 | 589 |
{ |
1
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
590 |
if(el[i].className) |
0 | 591 |
{ |
1
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
592 |
if(el[i].className.indexOf(' ') > 0) |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
593 |
{ |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
594 |
classes = el[i].className.split(' '); |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
595 |
} |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
596 |
else |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
597 |
{ |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
598 |
classes = new Array(); |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
599 |
classes.push(el[i].className); |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
600 |
} |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
601 |
if ( in_array(cls, classes) ) |
6f8b7c6fac02
Let's just say: major progress and still only 20% complete. So many changes I forgot to commit.
Dan
parents:
0
diff
changeset
|
602 |
ret.push(el[i]); |
0 | 603 |
} |
604 |
} |
|
605 |
} |
|
606 |
return ret; |
|
607 |
} |
|
608 |
||
609 |
function in_array(needle, haystack) |
|
610 |
{ |
|
611 |
for( var i in haystack ) |
|
612 |
{ |
|
613 |
if(haystack[i] == needle) |
|
614 |
return true; |
|
615 |
} |
|
616 |
return false; |
|
617 |
} |
|
618 |
||
619 |
function array_search(needle, haystack) |
|
620 |
{ |
|
621 |
for( var i in haystack ) |
|
622 |
{ |
|
623 |
if(haystack[i] == needle) |
|
624 |
return i; |
|
625 |
} |
|
626 |
return false; |
|
627 |
} |
|
628 |
||
629 |
document.getElementsByClassName = function(type, cls) { |
|
630 |
return getElementsByClassName(document, type, cls); |
|
631 |
} |
|
632 |
||
633 |
// Function adapted from MediaWiki/phpBB |
|
634 |
function formatBBCode(parent, tagOpen, tagClose, sampleText) |
|
635 |
{ |
|
636 |
var txtarea = parent.parentNode.nextSibling; |
|
637 |
||
638 |
// IE |
|
639 |
if (document.selection && !is_gecko) { |
|
640 |
var theSelection = document.selection.createRange().text; |
|
641 |
if (!theSelection) |
|
642 |
theSelection=sampleText; |
|
643 |
txtarea.focus(); |
|
644 |
if (theSelection.charAt(theSelection.length - 1) == " ") { // exclude ending space char, if any |
|
645 |
theSelection = theSelection.substring(0, theSelection.length - 1); |
|
646 |
document.selection.createRange().text = tagOpen + theSelection + tagClose + " "; |
|
647 |
} else { |
|
648 |
document.selection.createRange().text = tagOpen + theSelection + tagClose; |
|
649 |
} |
|
650 |
||
651 |
// Mozilla |
|
652 |
} else if(txtarea.selectionStart || txtarea.selectionStart == '0') { |
|
653 |
var replaced = false; |
|
654 |
var startPos = txtarea.selectionStart; |
|
655 |
var endPos = txtarea.selectionEnd; |
|
656 |
if (endPos-startPos) |
|
657 |
replaced = true; |
|
658 |
var scrollTop = txtarea.scrollTop; |
|
659 |
var myText = (txtarea.value).substring(startPos, endPos); |
|
660 |
if (!myText) |
|
661 |
myText=sampleText; |
|
662 |
if (myText.charAt(myText.length - 1) == " ") { // exclude ending space char, if any |
|
663 |
subst = tagOpen + myText.substring(0, (myText.length - 1)) + tagClose + " "; |
|
664 |
} else { |
|
665 |
subst = tagOpen + myText + tagClose; |
|
666 |
} |
|
667 |
txtarea.value = txtarea.value.substring(0, startPos) + subst + |
|
668 |
txtarea.value.substring(endPos, txtarea.value.length); |
|
669 |
txtarea.focus(); |
|
670 |
//set new selection |
|
671 |
if (replaced) { |
|
672 |
var cPos = startPos+(tagOpen.length+myText.length+tagClose.length); |
|
673 |
txtarea.selectionStart = cPos; |
|
674 |
txtarea.selectionEnd = cPos; |
|
675 |
} else { |
|
676 |
txtarea.selectionStart = startPos+tagOpen.length; |
|
677 |
txtarea.selectionEnd = startPos+tagOpen.length+myText.length; |
|
678 |
} |
|
679 |
txtarea.scrollTop = scrollTop; |
|
680 |
||
681 |
// All other browsers get no toolbar. |
|
682 |
} |
|
683 |
// reposition cursor if possible |
|
684 |
if (txtarea.createTextRange) |
|
685 |
txtarea.caretPos = document.selection.createRange().duplicate(); |
|
686 |
} |
|
687 |
||
688 |
addOnloadHook(initBBCodeControls); |
|
689 |