SitePoint Sponsor

User Tag List

Results 1 to 15 of 15
  1. #1
    SitePoint Member
    Join Date
    Mar 2009
    Posts
    11
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Rich text editor not displaying PHP variable

    I have a javascript rich text editor:

    Code:
    <script language="JavaScript" type="text/javascript">
    <!--
    //Usage: writeRichText(fieldname, html, width, height, buttons, readOnly)
    writeRichText('rte1', 'THIS IS THE INITIAL TEXT INSIDE', 400, 200, true, false);
    //-->
    </script>
    My problem is that I have PHP error message system and if someone has written in the rich text editor a message but has forgotten the title, a message pops up and the message is deleted.

    Usually this works within a text box using php

    Code:
    <script language="JavaScript" type="text/javascript">
    <!--
    //Usage: writeRichText(fieldname, html, width, height, buttons, readOnly)
    writeRichText('rte1', '<?php echo $Message; ?>', 400, 200, true, false);
    //-->
    </script>
    If I set $Message = 'hello' then it works and the message is inputed onto the rich text editor and appears. But when I try to retrieve the variable via $Message = $_SESSION['Message'] or from a database $Message = $INFO['Message'] ... the whole text editor disappears! How do I keep the data in the rich text editor from disappearing after a refresh by storing the variable with javascript or something else. Im a javascript newbie so please help me out. Thanks

  2. #2
    We're from teh basements.
    Join Date
    Apr 2007
    Posts
    1,205
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Welcome to the forums, maciek.

    Look for unescaped single or double quotes in the error message. These will break JavaScript strings.

  3. #3
    SitePoint Member
    Join Date
    Mar 2009
    Posts
    11
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    thanks =] I searched those things and didn't find anything concrete. Could you give me an example please

  4. #4
    We're from teh basements.
    Join Date
    Apr 2007
    Posts
    1,205
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    If your message contains an apostrophe and you insert it between single quotes in a JavaScript, you get an unescaped quote:

    PHP Code:
    $msg "The apostrophe in this string won't be escaped."
    Code JavaScript:
    var str = 'This string is about to be broken. <?=$msg; ?> The apostrophe broke it.';

    The resulting JavaScript will read:

    Code JavaScript:
    var str = 'This string is about to be broken. The apostrophe in this string won't be escaped. The apostrophe broke it.';

    It should read:

    Code JavaScript:
    var str = 'This string is about to be broken. The apostrophe in this string won\'t be escaped. The apostrophe broke it.';

    Why? Apostrophes within a single-quoted string need to be escaped with a backslash. Double quotes should similarly be escaped in double-quoted strings. So your original PHP string should be:

    PHP Code:
    $msg "The apostrophe in this string won\\'t be escaped."

  5. #5
    SitePoint Member
    Join Date
    Mar 2009
    Posts
    11
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Ohh yes, AMAZING. I never thought of the edited message quotes effecting the javascript... I THINK I KNOW THE PROBLEM NOW. thanks alot

  6. #6
    We're from teh basements.
    Join Date
    Apr 2007
    Posts
    1,205
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    You're welcome.

    Just remember that any text you insert into a page with PHP becomes part of the page's HTML, JavaScript, or CSS from the browser's point of view. If you start getting JavaScript errors and you know the JavaScript is correct, view source to see if the PHP is messing it up.

  7. #7
    SitePoint Member
    Join Date
    Mar 2009
    Posts
    11
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    wait. I still need help!

  8. #8
    SitePoint Member
    Join Date
    Mar 2009
    Posts
    11
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    This is really annoying. I thought the quotes were the problem but I found out that when the Javascript adds code to modify the font, it used double quotes " within all the code it adds. This shouldn't effect single quotes. I believe I'm a pretty smart web designer, and I've tested everything! I think if found a gap in the coding possibilities!!!

    It just won't let me make it work!

    Code:
    <script language="JavaScript" type="text/javascript">
    <!--
    //Usage: writeRichText(fieldname, html, width, height, buttons, readOnly)
    writeRichText('rte1', 'INITIAL TEXT', 400, 200, true, false);
    //-->
    </script>
    This is an example of the code that would go into the INITIAL TEXT place

    HTML Code:
    <span class="style3"><span class="style3">The title says it all... <span style="font-weight: bold;">How much would insurance cost for a 2004 lamborghini gallardo?</span> <br><br>It is relatively new and no modifications. I Added a picture, im not sure if the color has anything to do with the quote?</span>
    If I put the above code directly into the INITIAL TEXT place, it will output in the text editor perfectly.

    But when it is processed like so:

    writeRichText('rte1', '<?php $_POST["Msg"]; ?>', 400, 200, true, false);

    I outputted $_POST["Msg"] somewhere else to see if it was working properly and even tried using $MESS = $_POST["Msg"];

    writeRichText('rte1', '<?php $MESS; ?>', 400, 200, true, false);

    The whole text editor disappears.

    Another thing I tried was to take information directly from a database.

    writeRichText('rte1', '<?php $_DATABASE["Msg"]; ?>', 400, 200, true, false);

    IT WORKED. It outputted data. But then when I had code to change the data, the whole text editor disappeared again!

    I used the database because I thought that when there was an error and there was a message in the text editor, it would store the message in the database and output it in the text editor. But for some data it disappeared.

    What is going on?

  9. #9
    SitePoint Member
    Join Date
    Mar 2009
    Posts
    11
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Sorry i need 10 post to post my full source code

  10. #10
    SitePoint Member
    Join Date
    Mar 2009
    Posts
    11
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    7

  11. #11
    SitePoint Member
    Join Date
    Mar 2009
    Posts
    11
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    8

  12. #12
    SitePoint Member
    Join Date
    Mar 2009
    Posts
    11
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    9

  13. #13
    SitePoint Member
    Join Date
    Mar 2009
    Posts
    11
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    10

  14. #14
    SitePoint Member
    Join Date
    Mar 2009
    Posts
    11
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I have also found out that... This is only a problem with iframe. The textarea works fine. I need to use textarea and iframe because not all browsers allow both or something like that?

    Here is my total source code for the editor

    Code:
    //init variables
    var isRichText = false;
    var rng;
    var currentRTE;
    var allRTEs = "";
    
    var isIE;
    var isGecko;
    var isSafari;
    var isKonqueror;
    
    var imagesPath;
    var includesPath;
    var cssFile;
    
    
    
    function initRTE(imgPath, incPath, css) {
    	//set browser vars
    	var ua = navigator.userAgent.toLowerCase();
    	isIE = ((ua.indexOf("msie") != -1) && (ua.indexOf("opera") == -1) && (ua.indexOf("webtv") == -1)); 
    	isGecko = (ua.indexOf("gecko") != -1);
    	isSafari = (ua.indexOf("safari") != -1);
    	isKonqueror = (ua.indexOf("konqueror") != -1);
    	
    	//check to see if designMode mode is available
    	if (document.getElementById && document.designMode && !isSafari && !isKonqueror) {
    		isRichText = true;
    	}
    	
    	if (isIE) {
    		document.onmouseover = raiseButton;
    		document.onmouseout  = normalButton;
    		document.onmousedown = lowerButton;
    		document.onmouseup   = raiseButton;
    	}
    	
    	//set paths vars
    	imagesPath = imgPath;
    	includesPath = incPath;
    	cssFile = css;
    	
    	if (isRichText) document.writeln('<style type="text/css">@import "' + includesPath + 'http://www.petrosexuals.com/Rich_Text/rte.css";</style>');
    	
    	//for testing standard textarea, uncomment the following line
    	//isRichText = false;
    }
    
    function writeRichText(rte, html, width, height, buttons, readOnly) {
    	if (isRichText) {
    		if (allRTEs.length > 0) allRTEs += ";";
    		allRTEs += rte;
    		
    		if (readOnly) buttons = false;
    		
    		//adjust minimum table widths
    		if (isIE) {
    			if (buttons && (width < 570)) width = 570;
    			var tablewidth = width;
    		} else {
    			if (buttons && (width < 570)) width = 570;
    			var tablewidth = width + 4;
    		}
    		
    		document.writeln('<div class="rteDiv">');
    		if (buttons == true) {
    			document.writeln('<table class="rteBack" cellpadding="0" cellspacing="0" id="Buttons2_' + rte + '" width="' + tablewidth + '">');
    			document.writeln('	<tr>');
    			document.writeln('		<td><img id="bold" class="rteImage" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'bold.gif" width="30" height="30" alt="Bold" title="Bold" onClick="rteCommand(\'' + rte + '\', \'bold\', \'\')"></td>');
    			document.writeln('		<td><img class="rteImage" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'italic.gif" width="30" height="30" alt="Italic" title="Italic" onClick="rteCommand(\'' + rte + '\', \'italic\', \'\')"></td>');
    			document.writeln('		<td><img class="rteImage" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'underline.gif" width="30" height="30" alt="Underline" title="Underline" onClick="rteCommand(\'' + rte + '\', \'underline\', \'\')"></td>');
    			document.writeln('		<td><img class="rteVertSep" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'blackdot.gif" width="1" height="20" border="0" alt=""></td>');
    			document.writeln('		<td><img class="rteImage" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'left_just.gif" width="30" height="30" alt="Align Left" title="Align Left" onClick="rteCommand(\'' + rte + '\', \'justifyleft\', \'\')"></td>');
    			document.writeln('		<td><img class="rteImage" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'centre.gif" width="30" height="30" alt="Center" title="Center" onClick="rteCommand(\'' + rte + '\', \'justifycenter\', \'\')"></td>');
    			document.writeln('		<td><img class="rteImage" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'right_just.gif" width="30" height="30" alt="Align Right" title="Align Right" onClick="rteCommand(\'' + rte + '\', \'justifyright\', \'\')"></td>');
    			document.writeln('		<td><img class="rteImage" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'justifyfull.gif" width="30" height="30" alt="Justify Full" title="Justify Full" onclick="rteCommand(\'' + rte + '\', \'justifyfull\', \'\')"></td>');
    			document.writeln('		<td><img class="rteVertSep" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'blackdot.gif" width="1" height="20" border="0" alt=""></td>');
    			document.writeln('		<td><img class="rteImage" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'hr.gif" width="30" height="30" alt="Horizontal Rule" title="Horizontal Rule" onClick="rteCommand(\'' + rte + '\', \'inserthorizontalrule\', \'\')"></td>');
    			document.writeln('		<td><img class="rteVertSep" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'blackdot.gif" width="1" height="20" border="0" alt=""></td>');
    			document.writeln('		<td><img class="rteImage" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'numbered_list.gif" width="30" height="30" alt="Ordered List" title="Ordered List" onClick="rteCommand(\'' + rte + '\', \'insertorderedlist\', \'\')"></td>');
    			document.writeln('		<td><img class="rteImage" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'list.gif" width="30" height="30" alt="Unordered List" title="Unordered List" onClick="rteCommand(\'' + rte + '\', \'insertunorderedlist\', \'\')"></td>');
    			document.writeln('		<td><img class="rteVertSep" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'blackdot.gif" width="1" height="20" border="0" alt=""></td>');
    			document.writeln('		<td><img class="rteImage" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'outdent.gif" width="30" height="30" alt="Outdent" title="Outdent" onClick="rteCommand(\'' + rte + '\', \'outdent\', \'\')"></td>');
    			document.writeln('		<td><img class="rteImage" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'indent.gif" width="30" height="30" alt="Indent" title="Indent" onClick="rteCommand(\'' + rte + '\', \'indent\', \'\')"></td>');
    			document.writeln('		<td><div id="forecolor_' + rte + '"><img class="rteImage" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'textcolor.gif" width="30" height="30" alt="Text Color" title="Text Color" onClick="dlgColorPalette(\'' + rte + '\', \'forecolor\', \'\')"></div></td>');
    			document.writeln('		<td><div id="hilitecolor_' + rte + '"><img class="rteImage" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'bgcolor.gif" width="30" height="30" alt="Background Color" title="Background Color" onClick="dlgColorPalette(\'' + rte + '\', \'hilitecolor\', \'\')"></div></td>');
    			document.writeln('		<td><img class="rteVertSep" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'blackdot.gif" width="1" height="20" border="0" alt=""></td>');
    			document.writeln('		<td><img class="rteImage" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'hyperlink.gif" width="30" height="30" alt="Insert Link" title="Insert Link" onClick="insertLink(\'' + rte + '\')"></td>');
    			if (isIE) {
    				document.writeln('		<td><img class="rteImage" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'spellcheck.gif" width="30" height="30" alt="Spell Check" title="Spell Check" onClick="checkspell()"></td>');
    			}
    	//		document.writeln('		<td><img class="rteVertSep" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'blackdot.gif" width="1" height="20" border="0" alt=""></td>');
    	//		document.writeln('		<td><img class="rteImage" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'cut.gif" width="30" height="30" alt="Cut" title="Cut" onClick="rteCommand(\'' + rte + '\', \'cut\')"></td>');
    	//		document.writeln('		<td><img class="rteImage" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'copy.gif" width="30" height="30" alt="Copy" title="Copy" onClick="rteCommand(\'' + rte + '\', \'copy\')"></td>');
    	//		document.writeln('		<td><img class="rteImage" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'paste.gif" width="30" height="30" alt="Paste" title="Paste" onClick="rteCommand(\'' + rte + '\', \'paste\')"></td>');
    	//		document.writeln('		<td><img class="rteVertSep" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'blackdot.gif" width="1" height="20" border="0" alt=""></td>');
    	//		document.writeln('		<td><img class="rteImage" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'undo.gif" width="30" height="30" alt="Undo" title="Undo" onClick="rteCommand(\'' + rte + '\', \'undo\')"></td>');
    	//		document.writeln('		<td><img class="rteImage" src="http://www.petrosexuals.com/Rich_Text/' + imagesPath + 'redo.gif" width="30" height="30" alt="Redo" title="Redo" onClick="rteCommand(\'' + rte + '\', \'redo\')"></td>');
    			document.writeln('		<td width="100%"></td>');
    			document.writeln('	</tr>');
    			document.writeln('</table>');
    		}
    		document.writeln('<iframe id="' + rte + '" name="' + rte + '" width="' + width + 'px" height="' + height + 'px" src="http://www.petrosexuals.com/Rich_Text/' + includesPath + 'blank.htm"></iframe>');
    		if (!readOnly) document.writeln('<br /><input style="visibility:hidden; position:absolute;" type="checkbox" id="chkSrc' + rte + '" onclick="toggleHTMLSrc(\'' + rte + '\');" />');
    		document.writeln('<iframe width="154" height="104" id="cp' + rte + '" src="http://www.petrosexuals.com/Rich_Text/' + includesPath + 'palette.htm" marginwidth="0" marginheight="0" scrolling="no" style="visibility:hidden; position: absolute;"></iframe>');
    		document.writeln('<input type="hidden" id="hdn' + rte + '" name="' + rte + '" value="">');
    		document.writeln('</div>');
    		
    		document.getElementById('hdn' + rte).value = html;
    		enableDesignMode(rte, html, readOnly);
    	} else {
    		if (!readOnly) {
    			document.writeln('<textarea name="' + rte + '" id="' + rte + '" style="width: ' + width + 'px; height: ' + height + 'px;"><?php echo $Message; ?></textarea>');
    		} else {
    			document.writeln('<textarea name="' + rte + '" id="' + rte + '" style="width: ' + width + 'px; height: ' + height + 'px;" readonly><?php echo $Message; ?></textarea>');
    		}
    	}
    }
    
    function enableDesignMode(rte, html, readOnly) {
    	var frameHtml = "<html id=\"" + rte + "\">\n";
    	frameHtml += "<head>\n";
    	//to reference your stylesheet, set href property below to your stylesheet path and uncomment
    	if (cssFile.length > 0) {
    		frameHtml += "<link media=\"all\" type=\"text/css\" href=\"" + cssFile + "\" rel=\"stylesheet\">\n";
    	} else {
    		frameHtml += "<style>\n";
    		frameHtml += "body {\n";
    		frameHtml += "	color: #222222; font: 12px Tahoma; letter-spacing: 1px; line-height: 20px; background: #FFFFFF;\n";
    		frameHtml += "	margin: 0px;\n";
    		frameHtml += "	padding: 0px;\n";
    		frameHtml += "}\n";
    		frameHtml += "</style>\n";
    	}
    	frameHtml += "</head>\n";
    	frameHtml += "<body>\n";
    	frameHtml += html + "\n";
    	frameHtml += "</body>\n";
    	frameHtml += "</html>";
    	
    	if (document.all) {
    		var oRTE = frames[rte].document;
    		oRTE.open();
    		oRTE.write(frameHtml);
    		oRTE.close();
    		if (!readOnly) oRTE.designMode = "On";
    	} else {
    		try {
    			if (!readOnly) document.getElementById(rte).contentDocument.designMode = "on";
    			try {
    				var oRTE = document.getElementById(rte).contentWindow.document;
    				oRTE.open();
    				oRTE.write(frameHtml);
    				oRTE.close();
    				if (isGecko && !readOnly) {
    					//attach a keyboard handler for gecko browsers to make keyboard shortcuts work
    					oRTE.addEventListener("keypress", kb_handler, true);
    				}
    			} catch (e) {
    				alert("Error preloading content.");
    			}
    		} catch (e) {
    			//gecko may take some time to enable design mode.
    			//Keep looping until able to set.
    			if (isGecko) {
    				setTimeout("enableDesignMode('" + rte + "', '" + html + "', " + readOnly + ");", 10);
    			} else {
    				return false;
    			}
    		}
    	}
    }
    
    function updateRTEs() {
    	var vRTEs = allRTEs.split(";");
    	for (var i = 0; i < vRTEs.length; i++) {
    		updateRTE(vRTEs[i]);
    	}
    }
    
    function updateRTE(rte) {
    	if (!isRichText) return;
    	
    	//set message value
    	var oHdnMessage = document.getElementById('hdn' + rte);
    	var oRTE = document.getElementById(rte);
    	var readOnly = false;
    	
    	//check for readOnly mode
    	if (document.all) {
    		if (frames[rte].document.designMode != "On") readOnly = true;
    	} else {
    		if (document.getElementById(rte).contentDocument.designMode != "on") readOnly = true;
    	}
    	
    	if (isRichText && !readOnly) {
    		//if viewing source, switch back to design view
    		if (document.getElementById("chkSrc" + rte).checked) {
    			document.getElementById("chkSrc" + rte).checked = false;
    			toggleHTMLSrc(rte);
    		}
    		
    		if (oHdnMessage.value == null) oHdnMessage.value = "";
    		if (document.all) {
    			oHdnMessage.value = frames[rte].document.body.innerHTML;
    		} else {
    			oHdnMessage.value = oRTE.contentWindow.document.body.innerHTML;
    		}
    		
    		//if there is no content (other than formatting) set value to nothing
    		if (stripHTML(oHdnMessage.value.replace("&nbsp;", " ")) == "" 
    			&& oHdnMessage.value.toLowerCase().search("<hr") == -1
    			&& oHdnMessage.value.toLowerCase().search("<img") == -1) oHdnMessage.value = "";
    		//fix for gecko
    		if (escape(oHdnMessage.value) == "%3Cbr%3E%0D%0A%0D%0A%0D%0A") oHdnMessage.value = "";
    	}
    }
    
    function rteCommand(rte, command, option) {
    	//function to perform command
    	var oRTE;
    	if (document.all) {
    		oRTE = frames[rte];
    	} else {
    		oRTE = document.getElementById(rte).contentWindow;
    	}
    	
    	try {
    		oRTE.focus();
    	  	oRTE.document.execCommand(command, false, option);
    		oRTE.focus();
    	} catch (e) {
    //		alert(e);
    //		setTimeout("rteCommand('" + rte + "', '" + command + "', '" + option + "');", 10);
    	}
    }
    
    function toggleHTMLSrc(rte) {
    	//contributed by Bob Hutzel (thanks Bob!)
    	var oRTE;
    	if (document.all) {
    		oRTE = frames[rte].document;
    	} else {
    		oRTE = document.getElementById(rte).contentWindow.document;
    	}
    	
    	if (document.getElementById("chkSrc" + rte).checked) {
    		showHideElement("Buttons1_" + rte, "hide");
    		showHideElement("Buttons2_" + rte, "hide");
    		if (document.all) {
    			oRTE.body.innerText = oRTE.body.innerHTML;
    		} else {
    			var htmlSrc = oRTE.createTextNode(oRTE.body.innerHTML);
    			oRTE.body.innerHTML = "";
    			oRTE.body.appendChild(htmlSrc);
    		}
    	} else {
    		showHideElement("Buttons1_" + rte, "show");
    		showHideElement("Buttons2_" + rte, "show");
    		if (document.all) {
    			//fix for IE
    			var output = escape(oRTE.body.innerText);
    			output = output.replace("%3CP%3E%0D%0A%3CHR%3E", "%3CHR%3E");
    			output = output.replace("%3CHR%3E%0D%0A%3C/P%3E", "%3CHR%3E");
    			
    			oRTE.body.innerHTML = unescape(output);
    		} else {
    			var htmlSrc = oRTE.body.ownerDocument.createRange();
    			htmlSrc.selectNodeContents(oRTE.body);
    			oRTE.body.innerHTML = htmlSrc.toString();
    		}
    	}
    }
    
    function dlgColorPalette(rte, command) {
    	//function to display or hide color palettes
    	setRange(rte);
    	
    	//get dialog position
    	var oDialog = document.getElementById('cp' + rte);
    	var buttonElement = document.getElementById(command + '_' + rte);
    	var iLeftPos = getOffsetLeft(buttonElement);
    	var iTopPos = getOffsetTop(buttonElement) + (buttonElement.offsetHeight + 4);
    	oDialog.style.left = (iLeftPos) + "px";
    	oDialog.style.top = (iTopPos) + "px";
    	
    	if ((command == parent.command) && (rte == currentRTE)) {
    		//if current command dialog is currently open, close it
    		if (oDialog.style.visibility == "hidden") {
    			showHideElement(oDialog, 'show');
    		} else {
    			showHideElement(oDialog, 'hide');
    		}
    	} else {
    		//if opening a new dialog, close all others
    		var vRTEs = allRTEs.split(";");
    		for (var i = 0; i < vRTEs.length; i++) {
    			showHideElement('cp' + vRTEs[i], 'hide');
    		}
    		showHideElement(oDialog, 'show');
    	}
    	
    	//save current values
    	parent.command = command;
    	currentRTE = rte;
    }
    
    function dlgInsertTable(rte, command) {
    	//function to open/close insert table dialog
    	//save current values
    	setRange(rte);
    	parent.command = command;
    	currentRTE = rte;
    	var windowOptions = 'history=no,toolbar=0,location=0,directories=0,status=0,menubar=0,scrollbars=no,resizable=no,width=360,height=200';
    	window.open(includesPath + 'insert_table.htm', 'InsertTable', windowOptions);
    }
    
    function insertLink(rte) {
    	//function to insert link
    	var szURL = prompt("Enter a URL:", "");
    	try {
    		//ignore error for blank urls
    		rteCommand(rte, "Unlink", null);
    		rteCommand(rte, "CreateLink", szURL);
    	} catch (e) {
    		//do nothing
    	}
    }
    
    function setColor(color) {
    	//function to set color
    	var rte = currentRTE;
    	var parentCommand = parent.command;
    	
    	if (document.all) {
    		//retrieve selected range
    		var sel = frames[rte].document.selection; 
    		if (parentCommand == "hilitecolor") parentCommand = "backcolor";
    		if (sel != null) {
    			var newRng = sel.createRange();
    			newRng = rng;
    			newRng.select();
    		}
    	}
    	
    	rteCommand(rte, parentCommand, color);
    	showHideElement('cp' + rte, "hide");
    }
    
    function addImage(rte) {
    	//function to add image
    	imagePath = prompt('Enter Image URL:', 'http://');				
    	if ((imagePath != null) && (imagePath != "")) {
    		rteCommand(rte, 'InsertImage', imagePath);
    	}
    }
    
    // Ernst de Moor: Fix the amount of digging parents up, in case the RTE editor itself is displayed in a div.
    // KJR 11/12/2004 Changed to position palette based on parent div, so palette will always appear in proper location regardless of nested divs
    function getOffsetTop(elm) {
    	var mOffsetTop = elm.offsetTop;
    	var mOffsetParent = elm.offsetParent;
    	var parents_up = 2; //the positioning div is 2 elements up the tree
    	
    	while(parents_up > 0) {
    		mOffsetTop += mOffsetParent.offsetTop;
    		mOffsetParent = mOffsetParent.offsetParent;
    		parents_up--;
    	}
    	
    	return mOffsetTop;
    }
    
    // Ernst de Moor: Fix the amount of digging parents up, in case the RTE editor itself is displayed in a div.
    // KJR 11/12/2004 Changed to position palette based on parent div, so palette will always appear in proper location regardless of nested divs
    function getOffsetLeft(elm) {
    	var mOffsetLeft = elm.offsetLeft;
    	var mOffsetParent = elm.offsetParent;
    	var parents_up = 2;
    	
    	while(parents_up > 0) {
    		mOffsetLeft += mOffsetParent.offsetLeft;
    		mOffsetParent = mOffsetParent.offsetParent;
    		parents_up--;
    	}
    	
    	return mOffsetLeft;
    }
    
    function selectFont(rte, selectname) {
    	//function to handle font changes
    	var idx = document.getElementById(Tahoma).selectedIndex;
    	// First one is always a label
    	if (idx != 0) {
    		var selected = document.getElementById(selectname).options[idx].value;
    		var cmd = selectname.replace('_' + rte, '');
    		rteCommand(rte, cmd, selected);
    		document.getElementById(selectname).selectedIndex = 0;
    	}
    }
    
    function kb_handler(evt) {
    	var rte = evt.target.id;
    	
    	//contributed by Anti Veeranna (thanks Anti!)
    	if (evt.ctrlKey) {
    		var key = String.fromCharCode(evt.charCode).toLowerCase();
    		var cmd = '';
    		switch (key) {
    			case 'b': cmd = "bold"; break;
    			case 'i': cmd = "italic"; break;
    			case 'u': cmd = "underline"; break;
    		};
    
    		if (cmd) {
    			rteCommand(rte, cmd, null);
    			
    			// stop the event bubble
    			evt.preventDefault();
    			evt.stopPropagation();
    		}
     	}
    }
    
    function insertHTML(html) {
    	//function to add HTML -- thanks dannyuk1982
    	var rte = currentRTE;
    	
    	var oRTE;
    	if (document.all) {
    		oRTE = frames[rte];
    	} else {
    		oRTE = document.getElementById(rte).contentWindow;
    	}
    	
    	oRTE.focus();
    	if (document.all) {
    		oRTE.document.selection.createRange().pasteHTML(html);
    	} else {
    		oRTE.document.execCommand('insertHTML', false, html);
    	}
    }
    
    function showHideElement(element, showHide) {
    	//function to show or hide elements
    	//element variable can be string or object
    	if (document.getElementById(element)) {
    		element = document.getElementById(element);
    	}
    	
    	if (showHide == "show") {
    		element.style.visibility = "visible";
    	} else if (showHide == "hide") {
    		element.style.visibility = "hidden";
    	}
    }
    
    function setRange(rte) {
    	//function to store range of current selection
    	var oRTE;
    	if (document.all) {
    		oRTE = frames[rte];
    		var selection = oRTE.document.selection; 
    		if (selection != null) rng = selection.createRange();
    	} else {
    		oRTE = document.getElementById(rte).contentWindow;
    		var selection = oRTE.getSelection();
    		rng = selection.getRangeAt(selection.rangeCount - 1).cloneRange();
    	}
    }
    
    function stripHTML(oldString) {
    	//function to strip all html
    	var newString = oldString.replace(/(<([^>]+)>)/ig,"");
    	
    	//replace carriage returns and line feeds
       newString = newString.replace(/\r\n/g," ");
       newString = newString.replace(/\n/g," ");
       newString = newString.replace(/\r/g," ");
    	
    	//trim string
    	newString = trim(newString);
    	
    	return newString;
    }
    
    function trim(inputString) {
       // Removes leading and trailing spaces from the passed string. Also removes
       // consecutive spaces and replaces it with one space. If something besides
       // a string is passed in (null, custom object, etc.) then return the input.
       if (typeof inputString != "string") return inputString;
       var retValue = inputString;
       var ch = retValue.substring(0, 1);
    	
       while (ch == " ") { // Check for spaces at the beginning of the string
          retValue = retValue.substring(1, retValue.length);
          ch = retValue.substring(0, 1);
       }
       ch = retValue.substring(retValue.length - 1, retValue.length);
    	
       while (ch == " ") { // Check for spaces at the end of the string
          retValue = retValue.substring(0, retValue.length - 1);
          ch = retValue.substring(retValue.length - 1, retValue.length);
       }
    	
    	// Note that there are two spaces in the string - look for multiple spaces within the string
       while (retValue.indexOf("  ") != -1) {
    		// Again, there are two spaces in each of the strings
          retValue = retValue.substring(0, retValue.indexOf("  ")) + retValue.substring(retValue.indexOf("  ") + 1, retValue.length);
       }
       return retValue; // Return the trimmed string back to the user
    }
    
    //*****************
    //IE-Only Functions
    //*****************
    function checkspell() {
    	//function to perform spell check
    	try {
    		var tmpis = new ActiveXObject("ieSpell.ieSpellExtension");
    		tmpis.CheckAllLinkedDocuments(document);
    	}
    	catch(exception) {
    		if(exception.number==-2146827859) {
    			if (confirm("ieSpell not detected.  Click Ok to go to download page."))
    				window.open("http://www.iespell.com/download.php","DownLoad");
    		} else {
    			alert("Error Loading ieSpell: Exception " + exception.number);
    		}
    	}
    }
    
    function raiseButton(e) {
    	//IE-Only Function
    	var el = window.event.srcElement;
    	
    	className = el.className;
    	if (className == 'rteImage' || className == 'rteImageLowered') {
    		el.className = 'rteImageRaised';
    	}
    }
    
    function normalButton(e) {
    	//IE-Only Function
    	var el = window.event.srcElement;
    	
    	className = el.className;
    	if (className == 'rteImageRaised' || className == 'rteImageLowered') {
    		el.className = 'rteImage';
    	}
    }
    
    function lowerButton(e) {
    	//IE-Only Function
    	var el = window.event.srcElement;
    	
    	className = el.className;
    	if (className == 'rteImage' || className == 'rteImageRaised') {
    		el.className = 'rteImageLowered';
    	}
    }

  15. #15
    We're from teh basements.
    Join Date
    Apr 2007
    Posts
    1,205
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I've used that particular RTE myself, and I can tell you that Internet Explorer changes all of the HTML. Choosing a different free editor script probably won't help, as it's Microsoft's second-guessing everything (as usual) that causes it. I've had to develop some extremely elaborate workarounds to get those editors to do what I want them to do. My advice is to keep the editing features to a bare minimum if you're not experienced at hacking other people's code. Either that or pay for an editor that has been painstakingly kludged to overcome most of the major IE code tampering issues.


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •