[ Index ] |
PHP Cross Reference of Unnamed Project |
[Summary view] [Print] [Text view]
1 /** 2 * bbCode control by subBlue design [ www.subBlue.com ] 3 * Includes unixsafe colour palette selector by SHS` 4 */ 5 6 // Startup variables 7 var imageTag = false; 8 var theSelection = false; 9 var bbcodeEnabled = true; 10 11 // Check for Browser & Platform for PC & IE specific bits 12 // More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html 13 var clientPC = navigator.userAgent.toLowerCase(); // Get client info 14 var clientVer = parseInt(navigator.appVersion); // Get browser version 15 16 var is_ie = ((clientPC.indexOf('msie') != -1) && (clientPC.indexOf('opera') == -1)); 17 var is_win = ((clientPC.indexOf('win') != -1) || (clientPC.indexOf('16bit') != -1)); 18 19 var baseHeight; 20 21 /** 22 * Shows the help messages in the helpline window 23 */ 24 function helpline(help) 25 { 26 document.forms[form_name].helpbox.value = help_line[help]; 27 } 28 29 /** 30 * Fix a bug involving the TextRange object. From 31 * http://www.frostjedi.com/terra/scripts/demo/caretBug.html 32 */ 33 function initInsertions() 34 { 35 var doc; 36 37 if (document.forms[form_name]) 38 { 39 doc = document; 40 } 41 else 42 { 43 doc = opener.document; 44 } 45 46 var textarea = doc.forms[form_name].elements[text_name]; 47 if (is_ie && typeof(baseHeight) != 'number') 48 { 49 textarea.focus(); 50 baseHeight = doc.selection.createRange().duplicate().boundingHeight; 51 52 if (!document.forms[form_name]) 53 { 54 document.body.focus(); 55 } 56 } 57 } 58 59 /** 60 * bbstyle 61 */ 62 function bbstyle(bbnumber) 63 { 64 if (bbnumber != -1) 65 { 66 bbfontstyle(bbtags[bbnumber], bbtags[bbnumber+1]); 67 } 68 else 69 { 70 insert_text('[*]'); 71 document.forms[form_name].elements[text_name].focus(); 72 } 73 } 74 75 /** 76 * Apply bbcodes 77 */ 78 function bbfontstyle(bbopen, bbclose) 79 { 80 theSelection = false; 81 82 var textarea = document.forms[form_name].elements[text_name]; 83 84 textarea.focus(); 85 86 if ((clientVer >= 4) && is_ie && is_win) 87 { 88 // Get text selection 89 theSelection = document.selection.createRange().text; 90 91 if (theSelection) 92 { 93 // Add tags around selection 94 document.selection.createRange().text = bbopen + theSelection + bbclose; 95 document.forms[form_name].elements[text_name].focus(); 96 theSelection = ''; 97 return; 98 } 99 } 100 else if (document.forms[form_name].elements[text_name].selectionEnd && (document.forms[form_name].elements[text_name].selectionEnd - document.forms[form_name].elements[text_name].selectionStart > 0)) 101 { 102 mozWrap(document.forms[form_name].elements[text_name], bbopen, bbclose); 103 document.forms[form_name].elements[text_name].focus(); 104 theSelection = ''; 105 return; 106 } 107 108 //The new position for the cursor after adding the bbcode 109 var caret_pos = getCaretPosition(textarea).start; 110 var new_pos = caret_pos + bbopen.length; 111 112 // Open tag 113 insert_text(bbopen + bbclose); 114 115 // Center the cursor when we don't have a selection 116 // Gecko and proper browsers 117 if (!isNaN(textarea.selectionStart)) 118 { 119 textarea.selectionStart = new_pos; 120 textarea.selectionEnd = new_pos; 121 } 122 // IE 123 else if (document.selection) 124 { 125 var range = textarea.createTextRange(); 126 range.move("character", new_pos); 127 range.select(); 128 storeCaret(textarea); 129 } 130 131 textarea.focus(); 132 return; 133 } 134 135 /** 136 * Insert text at position 137 */ 138 function insert_text(text, spaces, popup) 139 { 140 var textarea; 141 142 if (!popup) 143 { 144 textarea = document.forms[form_name].elements[text_name]; 145 } 146 else 147 { 148 textarea = opener.document.forms[form_name].elements[text_name]; 149 } 150 if (spaces) 151 { 152 text = ' ' + text + ' '; 153 } 154 155 // Since IE9, IE also has textarea.selectionStart, but it still needs to be treated the old way. 156 // Therefore we simply add a !is_ie here until IE fixes the text-selection completely. 157 if (!isNaN(textarea.selectionStart) && !is_ie) 158 { 159 var sel_start = textarea.selectionStart; 160 var sel_end = textarea.selectionEnd; 161 162 mozWrap(textarea, text, ''); 163 textarea.selectionStart = sel_start + text.length; 164 textarea.selectionEnd = sel_end + text.length; 165 } 166 167 else if (textarea.createTextRange && textarea.caretPos) 168 { 169 if (baseHeight != textarea.caretPos.boundingHeight) 170 { 171 textarea.focus(); 172 storeCaret(textarea); 173 } 174 var caret_pos = textarea.caretPos; 175 caret_pos.text = caret_pos.text.charAt(caret_pos.text.length - 1) == ' ' ? caret_pos.text + text + ' ' : caret_pos.text + text; 176 177 } 178 else 179 { 180 textarea.value = textarea.value + text; 181 } 182 if (!popup) 183 { 184 textarea.focus(); 185 } 186 187 } 188 189 /** 190 * Add inline attachment at position 191 */ 192 function attach_inline(index, filename) 193 { 194 insert_text('[attachment=' + index + ']' + filename + '[/attachment]'); 195 document.forms[form_name].elements[text_name].focus(); 196 } 197 198 /** 199 * Add quote text to message 200 */ 201 function addquote(post_id, username, l_wrote) 202 { 203 var message_name = 'message_' + post_id; 204 var theSelection = ''; 205 var divarea = false; 206 207 if (l_wrote === undefined) 208 { 209 // Backwards compatibility 210 l_wrote = 'wrote'; 211 } 212 213 if (document.all) 214 { 215 divarea = document.all[message_name]; 216 } 217 else 218 { 219 divarea = document.getElementById(message_name); 220 } 221 222 // Get text selection - not only the post content :( 223 // IE9 must use the document.selection method but has the *.getSelection so we just force no IE 224 if (window.getSelection && !is_ie && !window.opera) 225 { 226 theSelection = window.getSelection().toString(); 227 } 228 else if (document.getSelection && !is_ie) 229 { 230 theSelection = document.getSelection(); 231 } 232 else if (document.selection) 233 { 234 theSelection = document.selection.createRange().text; 235 } 236 237 if (theSelection == '' || typeof theSelection == 'undefined' || theSelection == null) 238 { 239 if (divarea.innerHTML) 240 { 241 theSelection = divarea.innerHTML.replace(/<br>/ig, '\n'); 242 theSelection = theSelection.replace(/<br\/>/ig, '\n'); 243 theSelection = theSelection.replace(/<\;/ig, '<'); 244 theSelection = theSelection.replace(/>\;/ig, '>'); 245 theSelection = theSelection.replace(/&\;/ig, '&'); 246 theSelection = theSelection.replace(/ \;/ig, ' '); 247 } 248 else if (document.all) 249 { 250 theSelection = divarea.innerText; 251 } 252 else if (divarea.textContent) 253 { 254 theSelection = divarea.textContent; 255 } 256 else if (divarea.firstChild.nodeValue) 257 { 258 theSelection = divarea.firstChild.nodeValue; 259 } 260 } 261 262 if (theSelection) 263 { 264 if (bbcodeEnabled) 265 { 266 insert_text('[quote="' + username + '"]' + theSelection + '[/quote]'); 267 } 268 else 269 { 270 insert_text(username + ' ' + l_wrote + ':' + '\n'); 271 var lines = split_lines(theSelection); 272 for (i = 0; i < lines.length; i++) 273 { 274 insert_text('> ' + lines[i] + '\n'); 275 } 276 } 277 } 278 279 return; 280 } 281 282 283 function split_lines(text) 284 { 285 var lines = text.split('\n'); 286 var splitLines = new Array(); 287 var j = 0; 288 for(i = 0; i < lines.length; i++) 289 { 290 if (lines[i].length <= 80) 291 { 292 splitLines[j] = lines[i]; 293 j++; 294 } 295 else 296 { 297 var line = lines[i]; 298 do 299 { 300 var splitAt = line.indexOf(' ', 80); 301 302 if (splitAt == -1) 303 { 304 splitLines[j] = line; 305 j++; 306 } 307 else 308 { 309 splitLines[j] = line.substring(0, splitAt); 310 line = line.substring(splitAt); 311 j++; 312 } 313 } 314 while(splitAt != -1); 315 } 316 } 317 return splitLines; 318 } 319 320 /** 321 * From http://www.massless.org/mozedit/ 322 */ 323 function mozWrap(txtarea, open, close) 324 { 325 var selLength = (typeof(txtarea.textLength) == 'undefined') ? txtarea.value.length : txtarea.textLength; 326 var selStart = txtarea.selectionStart; 327 var selEnd = txtarea.selectionEnd; 328 var scrollTop = txtarea.scrollTop; 329 330 if (selEnd == 1 || selEnd == 2) 331 { 332 selEnd = selLength; 333 } 334 335 var s1 = (txtarea.value).substring(0,selStart); 336 var s2 = (txtarea.value).substring(selStart, selEnd); 337 var s3 = (txtarea.value).substring(selEnd, selLength); 338 339 txtarea.value = s1 + open + s2 + close + s3; 340 txtarea.selectionStart = selStart + open.length; 341 txtarea.selectionEnd = selEnd + open.length; 342 txtarea.focus(); 343 txtarea.scrollTop = scrollTop; 344 345 return; 346 } 347 348 /** 349 * Insert at Caret position. Code from 350 * http://www.faqts.com/knowledge_base/view.phtml/aid/1052/fid/130 351 */ 352 function storeCaret(textEl) 353 { 354 if (textEl.createTextRange) 355 { 356 textEl.caretPos = document.selection.createRange().duplicate(); 357 } 358 } 359 360 /** 361 * Color pallette 362 */ 363 function colorPalette(dir, width, height) 364 { 365 var r = 0, g = 0, b = 0; 366 var numberList = new Array(6); 367 var color = ''; 368 369 numberList[0] = '00'; 370 numberList[1] = '40'; 371 numberList[2] = '80'; 372 numberList[3] = 'BF'; 373 numberList[4] = 'FF'; 374 375 document.writeln('<table cellspacing="1" cellpadding="0" border="0">'); 376 377 for (r = 0; r < 5; r++) 378 { 379 if (dir == 'h') 380 { 381 document.writeln('<tr>'); 382 } 383 384 for (g = 0; g < 5; g++) 385 { 386 if (dir == 'v') 387 { 388 document.writeln('<tr>'); 389 } 390 391 for (b = 0; b < 5; b++) 392 { 393 color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]); 394 document.write('<td bgcolor="#' + color + '" style="width: ' + width + 'px; height: ' + height + 'px;">'); 395 document.write('<a href="#" onclick="bbfontstyle(\'[color=#' + color + ']\', \'[/color]\'); return false;"><img src="images/spacer.gif" width="' + width + '" height="' + height + '" alt="#' + color + '" title="#' + color + '" /></a>'); 396 document.writeln('</td>'); 397 } 398 399 if (dir == 'v') 400 { 401 document.writeln('</tr>'); 402 } 403 } 404 405 if (dir == 'h') 406 { 407 document.writeln('</tr>'); 408 } 409 } 410 document.writeln('</table>'); 411 } 412 413 414 /** 415 * Caret Position object 416 */ 417 function caretPosition() 418 { 419 var start = null; 420 var end = null; 421 } 422 423 424 /** 425 * Get the caret position in an textarea 426 */ 427 function getCaretPosition(txtarea) 428 { 429 var caretPos = new caretPosition(); 430 431 // simple Gecko/Opera way 432 if(txtarea.selectionStart || txtarea.selectionStart == 0) 433 { 434 caretPos.start = txtarea.selectionStart; 435 caretPos.end = txtarea.selectionEnd; 436 } 437 // dirty and slow IE way 438 else if(document.selection) 439 { 440 // get current selection 441 var range = document.selection.createRange(); 442 443 // a new selection of the whole textarea 444 var range_all = document.body.createTextRange(); 445 range_all.moveToElementText(txtarea); 446 447 // calculate selection start point by moving beginning of range_all to beginning of range 448 var sel_start; 449 for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++) 450 { 451 range_all.moveStart('character', 1); 452 } 453 454 txtarea.sel_start = sel_start; 455 456 // we ignore the end value for IE, this is already dirty enough and we don't need it 457 caretPos.start = txtarea.sel_start; 458 caretPos.end = txtarea.sel_start; 459 } 460 461 return caretPos; 462 }
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Oct 2 15:03:47 2013 | Cross-referenced by PHPXref 0.7.1 |