File: addformat.js

Recommend this page to a friend!
  Classes of MarPlo   Texarea with buttons to format text, colors and smiles   addformat.js   Download  
File: addformat.js
Role: Class source
Content type: text/plain
Description: JavaScript code
Class: Texarea with buttons to format text, colors and smiles
Format text in a textarea with BBCode tags
Author: By
Last change: Edited the code
Date: 11 years ago
Size: 7,881 bytes
 

Contents

Class file image Download
// Texarea with buttons for format text and smiles - http://coursesweb.net/javascript/ formatTxt = function() { // To add HTML tags instead of BbCode, replace "bbcode" with "html" var tagtype = 'bbcode'; // Here add the hex code of the colors (without #) var colors = [ 'bebebe', 'dadada', '0000da', '0101ff', 'ccccff', 'e8edfe', '00da00', '00fe00', 'ccffda', 'da0000', 'ff0000', 'ffcccc', 'eded00', 'fefe00', 'ffffda' ]; var id_txtfield = 'txtmsg'; // ID of the form field /textarea in which to add the tags /bbcode /** From Here no need to modify **/ // sets and add colors in #getcolor var setColors = function() { var nr_colors = colors.length; var addcolors = ''; // stores the <span> with code for colors for(var i=0; i<nr_colors; i++) { if(i != 0 && (i % 5) == 0) addcolors += '<br/>'; // add nel row to each five colors addcolors += '<span title="#'+ colors[i]+ '" style="width:8px;height:8px;margin:2px;cursor:pointer;background-color:#'+ colors[i]+ ';" onclick="obftxt.addTag(this, \'color\')">&nbsp; &nbsp;</span>'; } document.getElementById('getcolor').innerHTML = addcolors; document.getElementById('getcolor').style.display = 'none'; } setColors(); // calls the function to add the colors in webpage // check and pass the URL this.setUrl = function() { var url = window.prompt('Add URL address (with http://...)', 'http://'); // open Prompt to add URL var regx_www = /^http:\/\/[a-zA-z0-9_-]+[.]+/; // RegExp for URL // check if correct URL (with http://), send it to addTag(), else alert if (url.match(regx_www)) this.addTag(url, 'url'); else alert('Incorrect URL address'); } // determine the coords of select in textarea (zon), and the selected text, for IE var cursorPosition = function(star, en, zon){ var textarea = document.getElementById(zon); textarea.focus(); var selection_range = document.selection.createRange().duplicate(); if (selection_range.parentElement() == textarea) { // Check that the selection is actually in our textarea // Create three ranges, one containing all the text before the selection, // one containing all the text in the selection (this already exists), and one containing all // the text after the selection. var before_range = document.body.createTextRange(); before_range.moveToElementText(textarea); // Selects all the text before_range.setEndPoint("EndToStart", selection_range); // Moves the end where we need it var after_range = document.body.createTextRange(); after_range.moveToElementText(textarea); // Selects all the text after_range.setEndPoint("StartToEnd", selection_range); // Moves the start where we need it var before_finished = false, selection_finished = false, after_finished = false; var before_text, untrimmed_before_text, selection_text, untrimmed_selection_text, after_text, untrimmed_after_text; // Load the text values we need to compare before_text = untrimmed_before_text = before_range.text; selection_text = untrimmed_selection_text = selection_range.text; after_text = untrimmed_after_text = after_range.text; // Check each range for trimmed newlines by shrinking the range by 1 character and seeing // if the text property has changed. If it has not changed then we know that IE has trimmed // a \r\n from the end. do { if (!before_finished) { if (before_range.compareEndPoints("StartToEnd", before_range) == 0) { before_finished = true; } else { before_range.moveEnd("character", -1) if (before_range.text == before_text) { untrimmed_before_text += "\r\n"; } else { before_finished = true; } } } if (!selection_finished) { if (selection_range.compareEndPoints("StartToEnd", selection_range) == 0) { selection_finished = true; } else { selection_range.moveEnd("character", -1) if (selection_range.text == selection_text) { untrimmed_selection_text += "\r\n"; } else { selection_finished = true; } } } if (!after_finished) { if (after_range.compareEndPoints("StartToEnd", after_range) == 0) { after_finished = true; } else { after_range.moveEnd("character", -1) if (after_range.text == after_text) { untrimmed_after_text += "\r\n"; } else { after_finished = true; } } } } while ((!before_finished || !selection_finished || !after_finished)); // ** END Untrimmed success test // Define into an array the start, and end of selected text, and the final text var re = new Array(); re['startPos'] = untrimmed_before_text.length; re['endPos'] = re['startPos'] + untrimmed_selection_text.length; re['final_text'] = untrimmed_before_text +star+ untrimmed_selection_text +en+ untrimmed_after_text; return re; } } // position the cursor in the element with ID of "zona" to Xpos coord var set_xpos = function(zona, Xpos) { var txtarea = document.getElementById(zona); if(txtarea != null) { if(txtarea.createTextRange) { var range = txtarea.createTextRange(); range.move('character', Xpos); range.select(); } else { if(txtarea.selectionStart) { txtarea.focus(); txtarea.setSelectionRange(Xpos, Xpos); } else { txtarea.focus(); } } } } // Add tags: B, I, U, and URL in form (for IE uses cursorPosition(), and set_xpos) this.addTag = function(btn, type) { var tgop = (tagtype == 'html') ? '<' : '['; // character opening tag var tgen = (tagtype == 'html') ? '>' : ']'; // character ending tag if(type) { // For URL and Colors if(tagtype == 'html') { var start = (type == 'url') ? '<a target="_blank" href="'+btn+'">' : '<span style="color:'+btn.title+'">'; var end = (type == 'url') ? '</a>' : '</span>'; } else { var start = (type == 'url') ? '[url='+btn+']' : '[color='+btn.title+']'; var end = '[/'+type+']'; } } else { var start = tgop+btn.title+tgen; var end = tgop+'/'+btn.title+tgen; } var txtarea = document.getElementById(id_txtfield); if (txtarea.selectionStart || txtarea.selectionStart==0) { // Mozilla, Opera // Define into an array the start, and end of selected text, and the final text in textarea var rezult = new Array(); rezult['startPos'] = txtarea.selectionStart; rezult['endPos'] = txtarea.selectionEnd; rezult['final_text'] = txtarea.value.substring(0, rezult['startPos']) + start + txtarea.value.substring(rezult['startPos'], rezult['endPos']) + end + txtarea.value.substring(rezult['endPos'], txtarea.value.length); } else if (document.selection) { // IE var rezult = cursorPosition(start, end, id_txtfield); } // Add the new text in textarea, calls set_xpos() to position cursor to Xpos txtarea.value = rezult['final_text']; var Xpos = rezult['endPos']+start.length; set_xpos(id_txtfield, Xpos); } // Add code for clicked smile in element with ID passed in "id_txtfield" this.addSmile = function(smile) { // object with characters that represent the smiles, and the name of the GIF file for each one var smchr = {':)':0, ':(':1, ':P':2, ':D':3, ':S':4, ':O':5, ':=)':6, ':|H':7, ':X':8, ':-*':9} var txtarea = document.getElementById(id_txtfield); txtarea.value += (tagtype == 'html') ? '<img src="icos/'+smchr[smile.title.toUpperCase()]+'.gif" />' : smile.title; txtarea.focus(); } } // create an object of formatTxt class var obftxt = new formatTxt();