//------------------------------------------------------- // Set up browser detection //------------------------------------------------------- function BrowserDetectLite() { var ua = navigator.userAgent.toLowerCase(); var is_major = parseInt(navigator.appVersion); var is_ie = ((ua.indexOf("msie") != -1) && (ua.indexOf("opera") == -1)); // Certain browser names/versions we're interested in this.isGecko = (ua.indexOf('gecko') != -1 && ua.indexOf('safari') == -1); this.isIE = ( (ua.indexOf('msie') != -1) && (ua.indexOf('opera') == -1) && (ua.indexOf('webtv') == -1) ); this.isIE4to5 = (is_ie && (is_major >= 4) && (is_major <= 5) ); } //------------------------------------------------------- // Apply design mode formatting to editor content //------------------------------------------------------- function doFormat(formlabel,fieldlabel,what) { formlabel2=formlabel.replace(/[\[\]]/g, "\_"); // store a copy of the markup in a form's hidden field docform = eval('document.'+formlabel+'.backup'+fieldlabel); preedit = eval('WinPre.'+formlabel2); var browser = new BrowserDetectLite(); // provide support for old IE method (new versions of IE don't need this): if (browser.isIE4to5) { Edframe = eval('WinPre.frames.'+formlabel2); docform.value = Edframe.document.body.innerHTML; var tr = Edframe.document.selection.createRange() tr.select() } else { var tr=WinPre.document.getElementById(formlabel2).contentWindow.document; Edframe=eval('WinPre.document.getElementById(formlabel2).contentWindow.document'); EdframeHTML=Edframe.body.innerHTML; // allow for use of CSS, which needs offsets if (csslink) { offset=EdframeHTML.indexOf(csslink); docform.value=EdframeHTML.substring(csslink.length+offset); if (offset != 0){docform.value=EdframeHTML.substring(0,offset)+docform.value;} } else { docform.value=EdframeHTML; } } WinPre.focus(); // apply formatting - for IE, capture functions with extra bells and whistles if ((arguments[3]==null) || ((what == "Createlink") && browser.isIE) ) { tr.execCommand(what) } else // apply formatting - syntax for all others (Midas-based): { // Non-IE's createlink option works differently from others // so we have to trap this special case if (what == "Createlink") { var userURL = WinPre.prompt("Enter a URL:", ""); tr.execCommand("Unlink",false,null) tr.execCommand("CreateLink",false,userURL) } else if (what == "insertimage") { if (eval('document.'+formlabel+'.imgprefix'+fieldlabel)) { imgprefix=eval('document.'+formlabel+'.imgprefix'+fieldlabel).value } else { imgprefix=""; } var imgURL = WinPre.prompt("Enter Image location:", imgprefix); tr.execCommand("Unlink",false,null) tr.execCommand("insertimage",false,imgURL) } else { tr.execCommand(what, false, arguments[3]) } } WinPre.focus() if (browser.isIE) { tr.select() } copyValue(formlabel,fieldlabel) if (browser.isIE) {Edframe.focus() } } //------------------------------------------------------- // Copy editor contents into textarea box //------------------------------------------------------- function copyValue(formlabel,fieldlabel) { formlabel2=formlabel.replace(/[\[\]]/g, "\_"); field=eval('document.'+formlabel+'.'+fieldlabel); form =eval('WinPre.'+formlabel2); var browser = new BrowserDetectLite(); if (browser.isGecko) { WinPreDoc=WinPre.document.getElementById(formlabel2).contentWindow.document; HTMLcontent=WinPreDoc.body.innerHTML; WinHTMLcontent=HTMLcontent; // check if editor has been inserting markup before stylesheet and correct accordingly // (another messy solution :-( ) if (csslink) { offset=WinHTMLcontent.indexOf(csslink) if (offset != 0) { HTMLcontent=csslink+WinHTMLcontent.substring(0,offset); // add a tail if need be taillength=(WinHTMLcontent.length)-(csslink.length)-offset; if (taillength >0) { tailcontent=WinHTMLcontent.substring(offset+(csslink.length)); HTMLcontent+=tailcontent } } } field.value = HTMLcontent.substring(csslink.length); } else { field.value= form.document.body.innerHTML; } // where found, replace physical with semantic markup field.value=field.value.replace(/\<(\/?)B\>/ig,"<$1strong>"); field.value=field.value.replace(/\<(\/?)I\>/ig,"<$1em>"); // XHTML - convert tags to lower case field.value=field.value.replace(/\<(\/?)STRONG\>/g,"<$1strong>"); field.value=field.value.replace(/\<(\/?)P\>/g,"<$1p>"); field.value=field.value.replace(/\<(\/?)U\>/g,"<$1u>"); field.value=field.value.replace(/\<(\/?)EM\>/g,"<$1em>"); field.value=field.value.replace(/\<(\/?)H([0-9])\>/g,"<$1h$2>"); field.value=field.value.replace(/\<(\/?)A/g,"<$1a"); field.value=field.value.replace(/\/g,"<$1href=\"$2>"); field.value=field.value.replace(/\<(.*)IMG=\"(.*)\>/g,"<$1img=\"$2>"); field.value=field.value.replace(/\<(.*)SRC=\"(.*)\>/g,"<$1src=\"$2>"); field.value=field.value.replace(/\<(\/?)UL\>/g,"<$1ul>"); field.value=field.value.replace(/\<(\/?)OL\>/g,"<$1ol>"); field.value=field.value.replace(/\<(\/?)LI\>/g,"<$1li>"); field.value=field.value.replace(/\<(\/?)BR\>/g,"<$1br>"); // XHTML - close tags field.value=field.value.replace(/\<([bh]r)\>/g,"<$1 />"); } //------------------------------------------------------- // Undo last change //------------------------------------------------------- function undo(formlabel,fieldlabel) { formlabel2=formlabel.replace(/[\[\]]/g, "\_"); form=eval('document.'+formlabel); field=eval('document.'+formlabel+'.'+fieldlabel); fieldbakstring = 'document.'+formlabel+'.backup'+fieldlabel; fieldbak=eval(fieldbakstring); // allow undo to non-empty values only if (fieldbak.value != '') { field.value= fieldbak.value; var browser = new BrowserDetectLite(); if (browser.isGecko) { WinPre.document.getElementById(formlabel2).contentWindow.document.body.innerHTML=csslink+fieldbak.value; } else { framedoc=eval('WinPre.'+formlabel2+'.document'); frameform=eval('WinPre.frames.'+formlabel2); framedoc.body.innerHTML=fieldbak.value; } } WinPre.focus() } //------------------------------------------------------- // Initialise and generate pop-up editing widget //------------------------------------------------------- function preview(formlabel,fieldlabel,WinPre_width,WinPre_height) { // Both form objects and form labels can be passed // First, test to see if object is passed if (/object/.test(formlabel)) { alert('no formlabel passed'); // work out index of current form so that we can write // to the appropriate form fields in the calling document var formIndex; var numberForms = document.forms.length; for(formIndex = 0; formIndex < numberForms; formIndex++) { if(document.forms[formIndex] == formlabel) { break; } } // if we have an object then just reassign as form name // with appropriate reference to correct form using index formlabel='forms['+formIndex+']'; // following label is for popup form, and it cannot have [] chars formlabel2= formlabel.replace(/[\[\]]/g, "\_"); formstring = 'document.forms['+formIndex+']'; } else // a label has been passed { alert('formlabel is '+formlabel); formstring = 'document.'+formlabel; formlabel2=formlabel; } // defaults for popup window dimensions // (for a useful article on element dimensions, see: // http://msdn.microsoft.com/workshop/author/om/measuring.asp ) var browser = new BrowserDetectLite(); if (!WinPre_width || !WinPre_height) { WinPre_width=600; WinPre_height=350; } // offsets for the inline frame Win_xoffset=30; Win_yoffset=60; //----------------------------------------------------------------------- // extract information //----------------------------------------------------------------------- field = eval(formstring+'\.'+fieldlabel); previewstatus = eval(formstring+'\.prev'+fieldlabel); // check to see if there are any paragraph tags. // if not, for the first preview, insert line breaks thetext=field.value; if (previewstatus.value == '' &! (/\<[Pp]\>/.test(thetext))) { if (thetext!="") { thetext="
"+thetext; // insert line breaks (catering for different platforms) thetext = thetext.replace(/(\n\n)/g, "
$1"); thetext = thetext.replace(/\<*(\r\n\r\n)/g, "
$1"); thetext = thetext+"
"; } field.value=thetext; previewstatus.value='done'; } // determine whether or not to link to user-defined css file cssstring = eval('document.'+formlabel+'.css'+fieldlabel); if (cssstring) { csslink=''; } else { csslink=''; } contentstring=field.value; var WinPreName = fieldlabel; // Launch pop-up window. 'about:blank' parameter to prevent 'access denied' errors in IE WinPre = window.open('about:blank',WinPreName.value,'scrollbars=yes,resizable=1,width='+WinPre_width+',height='+WinPre_height); var WinPreDoc = WinPre.document; var i; if (!WinPreDoc.designMode) { WinPreDoc.writeln(''); WinPreDoc.writeln(''); WinPreDoc.writeln('