document.write('\n'); var userAgent1 = navigator.userAgent.toLowerCase(); var htmledit_ispaste = false; //判断浏览器是否为firefox,且非ie/chrome if(/mozilla/.test(userAgent1) && !/(compatible|webkit)/.test(userAgent1)) { HTMLElement.prototype.insertAdjacentHTML = function(where, html) { var e = this.ownerDocument.createRange(); e.setStartBefore(this); e = e.createContextualFragment(html); switch (where){ case 'beforeBegin' : this.parentNode.insertBefore(e, this); break; case 'afterBegin' : this.insertBefore(e, this.firstChild); break; case 'beforeEnd' : this.appendChild(e); break; case 'afterEnd' : if( ! this.nextSibling) this.parentNode.appendChild(e); else this.parentNode.insertBefore(e, this.nextSibling); break; } }; if(typeof(HTMLElement)!="undefined" && !window.opera){ HTMLElement.prototype.__defineGetter__("outerHTML",function() { var a=this.attributes, str="<"+this.tagName, i=0;for(;i"; return str+">"+this.innerHTML+""; }); HTMLElement.prototype.__defineSetter__("outerHTML",function(s) { var r = this.ownerDocument.createRange(); r.setStartBefore(this); var df = r.createContextualFragment(s); this.parentNode.replaceChild(df, this); return s; }); HTMLElement.prototype.__defineGetter__("canHaveChildren",function() { return !/^(area|base|basefont|col|frame|hr|img|br|input|isindex|link|meta|param)$/.test(this.tagName.toLowerCase()); }); } } //判断浏览器是否为firefox,且可为firefox/chrome (compatible 为ie) if(/mozilla/.test(userAgent1) && /(firefox|webkit)/.test(userAgent1)) { /* 会导致FF和chrome下出错,暂屏蔽 Object.prototype.attachEvent=function(method,func) { if(!this[method]) this[method]=func; else this[method]=this[method].attach(func); }; Function.prototype.attach=function(func){ var f=this; return function(){ f(); func(); }; };*/ } function CleanWord( html, bIgnoreFont, bRemoveStyles ){ //html = clipboardData.getData("Text"); //return html; //var html = oNode.innerHTML ; if(bIgnoreFont==undefined)bIgnoreFont=true; if(bRemoveStyles==undefined)bRemoveStyles=true; html = html.replace(/\s*<\/o:p>/g, '') ; html = html.replace(/[\s\S]*?<\/o:p>/g, ' ') ; // Remove mso-xxx styles. html = html.replace( /\s*mso-[^:]+:[^;"]+;?/gi, '' ) ; // Remove margin styles. html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*;/gi, '' ) ; html = html.replace( /\s*MARGIN: 0cm 0cm 0pt\s*"/gi, "\"" ) ; html = html.replace( /\s*TEXT-INDENT: 0cm\s*;/gi, '' ) ; html = html.replace( /\s*TEXT-INDENT: 0cm\s*"/gi, "\"" ) ; html = html.replace( /\s*TEXT-ALIGN: [^\s;]+;?"/gi, "\"" ) ; html = html.replace( /\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi, "\"" ) ; html = html.replace( /\s*FONT-VARIANT: [^\s;]+;?"/gi, "\"" ) ; html = html.replace( /\s*tab-stops:[^;"]*;?/gi, '' ) ; html = html.replace( /\s*tab-stops:[^"]*/gi, '' ) ; // Remove FONT face attributes. if ( bIgnoreFont ) { html = html.replace( /\s*face="[^"]*"/gi, '' ) ; html = html.replace( /\s*face=[^ >]*/gi, '' ) ; html = html.replace( /\s*FONT-FAMILY:[^;"]*;?/gi, '' ) ; } // Remove Class attributes html = html.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3") ; // Remove styles. if ( bRemoveStyles ) html = html.replace( /<(\w[^>]*) style="([^\"]*)"([^>]*)/gi, "<$1$3" ) ; // Remove style, meta and link tags html = html.replace( /]*>[\s\S]*?<\/STYLE[^>]*>/gi, '' ) ; html = html.replace( /<(?:META|LINK)[^>]*>\s*/gi, '' ) ; // Remove empty styles. html = html.replace( /\s*style="\s*"/gi, '' ) ; html = html.replace( /]*>\s* \s*<\/SPAN>/gi, ' ' ) ; html = html.replace( /]*><\/SPAN>/gi, '' ) ; // Remove Lang attributes html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ; html = html.replace( /([\s\S]*?)<\/SPAN>/gi, '$1' ) ; html = html.replace( /([\s\S]*?)<\/FONT>/gi, '$1' ) ; // Remove XML elements and declarations html = html.replace(/<\\?\?xml[^>]*>/gi, '' ) ; // Remove w: tags with contents. html = html.replace( /]*>[\s\S]*?<\/w:[^>]*>/gi, '' ) ; // Remove Tags with XML namespace declarations: <\/o:p> html = html.replace(/<\/?\w+:[^>]*>/gi, '' ) ; // Remove comments [SF BUG-1481861]. html = html.replace(/<\!--[\s\S]*?-->/g, '' ) ; html = html.replace( /<(U|I|STRIKE)> <\/\1>/g, ' ' ) ; html = html.replace( /\s*<\/H\d>/gi, '' ) ; // Remove "display:none" tags. html = html.replace( /<(\w+)[^>]*\sstyle="[^"]*DISPLAY\s?:\s?none[\s\S]*?<\/\1>/ig, '' ) ; // Remove language tags html = html.replace( /<(\w[^>]*) language=([^ |>]*)([^>]*)/gi, "<$1$3") ; // Remove onmouseover and onmouseout events (from MS Word comments effect) html = html.replace( /<(\w[^>]*) onmouseover="([^\"]*)"([^>]*)/gi, "<$1$3") ; html = html.replace( /<(\w[^>]*) onmouseout="([^\"]*)"([^>]*)/gi, "<$1$3") ; if ( false ) { // The original tag send from Word is something like this: html = html.replace( /]*)>/gi, '' ) ; // Word likes to insert extra tags, when using MSIE. (Wierd). html = html.replace( /<(H\d)>]*>([\s\S]*?)<\/FONT><\/\1>/gi, '<$1>$2<\/$1>' ); html = html.replace( /<(H\d)>([\s\S]*?)<\/EM><\/\1>/gi, '<$1>$2<\/$1>' ); } else { html = html.replace( /]*)>/gi, '' ) ; html = html.replace( /]*)>/gi, '' ) ; html = html.replace( /]*)>/gi, '' ) ; html = html.replace( /]*)>/gi, '' ) ; html = html.replace( /]*)>/gi, '' ) ; html = html.replace( /]*)>/gi, '' ) ; html = html.replace( /<\/H\d>/gi, '<\/font><\/b><\/div>' ) ; // Transform

to

var re = new RegExp( '(]*>[\\s\\S]*?)(<\/P>)', 'gi' ) ; // Different because of a IE 5.0 error html = html.replace( re, '' ) ; // Remove empty tags (three times, just to be sure). // This also removes any empty anchor html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ; html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ; html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ; } return html ; } function editor_defaultConfig(objname) { this.version = "1.02"; this.width = "auto"; this.height = "auto"; this.bodyStyle = 'background-color: #FFFFFF; font-family: "宋体"; font-size: x-small;'; this.imgURL = _editor_url + 'images/'; this.debug = 0; this.replaceNextlines = 0; // replace nextlines from spaces (on output) this.plaintextInput = 0; // replace nextlines with breaks (on input) this.toolbar = [ ['fontname'], ['fontsize'], // ['fontstyle'], // ['linebreak'], ['bold','italic','underline','separator','insertimage'], // ['strikethrough','subscript','superscript','separator'], ['justifyleft','justifycenter','justifyright','separator'], // ['OrderedList','UnOrderedList','Outdent','Indent','separator'], ['forecolor','backcolor','separator'], // ['HorizontalRule','Createlink','InsertImage','InsertTable','htmlmode','separator'], // ['InsertImage','separator'], // ['custom1','custom2','custom3','separator'], // ['popupeditor'], ['about'] ]; this.fontnames = { "宋体": "宋体,sans-serif, arial, helvetica", "黑体": "黑体,sans-serif, arial, helvetica", "楷体_GB2312": "楷体_GB2312, sans-serif, arial, helvetica", "Arial": "arial, helvetica, sans-serif", "Courier New": "courier new, courier, mono", "Georgia": "Georgia, Times New Roman, Times, Serif", "Tahoma": "Tahoma, Arial, Helvetica, sans-serif", "Times New Roman": "times new roman, times, serif", "Verdana": "Verdana, Arial, Helvetica, sans-serif", "impact": "impact", "WingDings": "WingDings" }; this.fontsizes = { "1 (8 pt)": "1", "2 (10 pt)": "2", "3 (12 pt)": "3", "4 (14 pt)": "4", "5 (18 pt)": "5", "6 (24 pt)": "6", "7 (36 pt)": "7" }; //this.stylesheet = "http://www.???.com/sample.css"; // full URL to stylesheet this.fontstyles = [ // make sure these exist in the header of page the content is being display as well in or they won't work! // { name: "headline", className: "headline", classStyle: "font-family: arial black, arial; font-size: 28px; letter-spacing: -2px;" }, // { name: "arial red", className: "headline2", classStyle: "font-family: arial black, arial; font-size: 12px; letter-spacing: -2px; color:red" }, // { name: "verdana blue", className: "headline4", classStyle: "font-family: verdana; font-size: 18px; letter-spacing: -2px; color:blue" }, ]; this.btnList = { // buttonName: commandID, title, onclick, image, "bold": ['Bold', '加粗', 'editor_action(this.id)', 'ed_format_bold.gif'], "italic": ['Italic', '倾斜', 'editor_action(this.id)', 'ed_format_italic.gif'], "underline": ['Underline', '下划线', 'editor_action(this.id)', 'ed_format_underline.gif'], "strikethrough": ['StrikeThrough', 'Strikethrough', 'editor_action(this.id)', 'ed_format_strike.gif'], "subscript": ['SubScript', 'Subscript', 'editor_action(this.id)', 'ed_format_sub.gif'], "superscript": ['SuperScript', 'Superscript', 'editor_action(this.id)', 'ed_format_sup.gif'], "justifyleft": ['JustifyLeft', 'Justify Left', 'editor_action(this.id)', 'ed_align_left.gif'], "justifycenter": ['JustifyCenter', 'Justify Center', 'editor_action(this.id)', 'ed_align_center.gif'], "justifyright": ['JustifyRight', 'Justify Right', 'editor_action(this.id)', 'ed_align_right.gif'], "orderedlist": ['InsertOrderedList', 'Ordered List', 'editor_action(this.id)', 'ed_list_num.gif'], "unorderedlist": ['InsertUnorderedList', 'Bulleted List', 'editor_action(this.id)', 'ed_list_bullet.gif'], "outdent": ['Outdent', 'Decrease Indent', 'editor_action(this.id)', 'ed_indent_less.gif'], "indent": ['Indent', 'Increase Indent', 'editor_action(this.id)', 'ed_indent_more.gif'], "forecolor": ['ForeColor', '字体颜色', 'editor_action(this.id)', 'ed_color_fg.gif'], "backcolor": ['BackColor', '背景颜色', 'editor_action(this.id)', 'ed_color_bg.gif'], "horizontalrule": ['InsertHorizontalRule', 'Horizontal Rule', 'editor_action(this.id)', 'ed_hr.gif'], "createlink": ['CreateLink', 'Insert Web Link', 'editor_action(this.id)', 'ed_link.gif'], "insertimage": ['InsertImage', '插入图片', 'editor_action(this.id)', 'ed_image.gif'], "inserttable": ['InsertTable', 'Insert Table', 'editor_action(this.id)', 'insert_table.gif'], "htmlmode": ['HtmlMode', 'View HTML Source', 'editor_setmode(\''+objname+'\')', 'ed_html.gif'], "popupeditor": ['popupeditor', '放大编辑', 'editor_action(this.id)', 'fullscreen_maximize.gif'], "about": ['about', '帮助', 'editor_about(\''+objname+'\')', 'ed_about.gif'], // Add custom buttons here: "custom1": ['custom1', 'Purpose of button 1', 'editor_action(this.id)', 'ed_custom.gif'], "custom2": ['custom2', 'Purpose of button 2', 'editor_action(this.id)', 'ed_custom.gif'], "custom3": ['custom3', 'Purpose of button 3', 'editor_action(this.id)', 'ed_custom.gif'], // end: custom buttons "help": ['showhelp', 'Help using editor', 'editor_action(this.id)', 'ed_help.gif']}; } function editor_generate(objname,userConfig) { // Default Settings //begin 关于格式化调查报告提示保存与自动保存 bEditHtml = true; bEditHtmlChange = false; //end var config = new editor_defaultConfig(objname); var obj = document.getElementsByName(objname)[0]; if (userConfig) { for (var thisName in userConfig) { if (userConfig[thisName]) { config[thisName] = userConfig[thisName]; } } } //modify in 2011 for chrome //document.all[objname].config = config; // store config settings //$("#"+objname).attr("config",JSON.stringify(config)); // store config settings obj.setAttribute("config",JSON.stringify(config)); // set size to specified size or size of original object if (!config.width || config.width == "auto") { if (obj.style.width) { config.width = obj.style.width; } // use css style else if (obj.cols) { config.width = (obj.cols * 8) + 22; } // col width + toolbar else { config.width = '100%'; } // default } if (!config.height || config.height == "auto") { if (obj.style.height) { config.height = obj.style.height; } // use css style else if (obj.rows) { config.height = obj.rows * 17; } // row height else { config.height = '200'; } // default } var tblOpen = '
'; var tblClose = '
\n'; // build button toolbar var toolbar = ''; var btnGroup, btnItem, aboutEditor; //for (var btnGroup in config.toolbar) { for (var iBtnGroup = 0; iBtnGroup < config.toolbar.length; iBtnGroup++ ) { // linebreak if (config.toolbar[iBtnGroup].length == 1 && config.toolbar[iBtnGroup][0].toLowerCase() == "linebreak") { toolbar += '
'; continue; } toolbar += tblOpen; //for (var btnItem in config.toolbar[btnGroup]) { // var btnName = config.toolbar[btnGroup][btnItem].toLowerCase(); for (var iBtnItem = 0 ; iBtnItem < config.toolbar[iBtnGroup].length ; iBtnItem++ ) { var btnName = config.toolbar[iBtnGroup][iBtnItem].toLowerCase(); // fontname if (btnName == "fontname") { toolbar += ''; continue; } // fontsize if (btnName == "fontsize") { toolbar += '\n'; continue; } // font style if (btnName == "fontstyle") { toolbar += ''; continue; } // separator if (btnName == "separator") { toolbar += ''; continue; } // buttons var btnObj = config.btnList[btnName]; if (btnName == 'linebreak') { alert("htmlArea error: 'linebreak' must be in a subgroup by itself, not with other buttons.\n\nhtmlArea wysiwyg editor not created."); return; } if (!btnObj) { alert("htmlArea error: button '" +btnName+ "' not found in button list when creating the wysiwyg editor for '"+objname+"'.\nPlease make sure you entered the button name correctly.\n\nhtmlArea wysiwyg editor not created."); return; } var btnCmdID = btnObj[0]; var btnTitle = btnObj[1]; var btnOnClick = btnObj[2]; var btnImage = btnObj[3]; toolbar += ''; } // end of button sub-group toolbar += tblClose; } // end of entire button set // build editor var editor = '
\n' + toolbar + '
\n' + '
\n' + ''; // add context menu editor += ''; // hide original textarea and insert htmlarea after it if (!config.debug) { obj.style.display = "none"; } if (config.plaintextInput) { // replace nextlines with breaks var contents = obj.value; contents = contents.replace(/\r\n/g, '
'); contents = contents.replace(/\n/g, '
'); contents = contents.replace(/\r/g, '
'); obj.value = contents; } // insert wysiwyg obj.insertAdjacentHTML('afterEnd', editor); // convert htmlarea from textarea to wysiwyg editor editor_setmode(objname, 'init'); // call filterOutput when user submits form for (var idx=0; idx < document.forms.length; idx++) { var r = document.forms[idx].attachEvent('onsubmit', function() { editor_filterOutput(objname); }); //modify in 2011 for chrome //if (!r) { alert("Error attaching event to form!"); } } return true; } var myObjName = ""; //add by hxd in 2005/02/21 function editor_action(button_id) { // split up button name into "editorID" and "cmdID" var BtnParts = Array(); BtnParts = button_id.split("_"); var objname = button_id.replace(/^_(.*)_[^_]*$/, '$1'); var cmdID = BtnParts[ BtnParts.length-1 ]; var button_obj = document.all[button_id]; var editor_obj = document.all["_" +objname + "_editor"]; //modify in 2011 for chrome //var config = document.all[objname].config; //var config = JSON.parse($("#"+objname).attr("config")); var config = JSON.parse(document.all[objname].getAttribute("config")); // help popup if (cmdID == 'showhelp') { window.open(_editor_url + "popups/editor_help.html", 'EditorHelp'); return; } // popup editor if (cmdID == 'popupeditor') { //modify by hxd in 2005/02/21 //window.open(_editor_url + "popups/fullscreen.html?"+objname,'FullScreen', // 'toolbar=no,location=no,directories=no,status=yes,menubar=no,scrollbars=yes,resizable=yes,width=640,height=480'); myObjName = objname; var sScreenWidth = screen.availWidth; var sScreenHeight = screen.availHeight; var sDefaultModelessDialogStyle = "dialogLeft="+(sScreenWidth*0.2)+";dialogWidth="+(sScreenWidth*0.6)+"px;dialogHeight="+(sScreenHeight*3/4)+"px;resizable=yes;status:no;maximize:yes;help:no;"; window.showModalDialog(_editor_url + "popups/fullscreen.html?"+objname,window.self,sDefaultModelessDialogStyle); return; } // check editor mode (don't perform actions in textedit mode) if (editor_obj.tagName.toLowerCase() == 'textarea') { return; } var editdoc = editor_obj.contentWindow.document; editor_focus(editor_obj); // get index and value for pulldowns var idx = button_obj.selectedIndex; var val = (idx != null) ? button_obj[ idx ].value : null; if (0) {} // use else if for easy cutting and pasting // // CUSTOM BUTTONS START HERE // // Custom1 else if (cmdID == 'custom1') { alert("Hello, I am custom button 1!"); } // Custom2 else if (cmdID == 'custom2') { // insert some text from a popup window var myTitle = "This is a custom title"; var myText = showModalDialog(_editor_url + "popups/custom2.html", myTitle, // str or obj specified here can be read from dialog as "window.dialogArguments" "resizable: yes; help: no; status: no; scroll: no; "); if (myText) { editor_insertHTML(objname, myText); } } // Custom3 else if (cmdID == 'custom3') { // insert some text editor_insertHTML(objname, "It's easy to add buttons that insert text!"); } // // END OF CUSTOM BUTTONS // // FontName else if (cmdID == 'FontName' && val) { editdoc.execCommand(cmdID,0,val); } // FontSize else if (cmdID == 'FontSize' && val) { editdoc.execCommand(cmdID,0,val); } // FontStyle (change CSS className) else if (cmdID == 'FontStyle' && val) { editdoc.execCommand('RemoveFormat'); editdoc.execCommand('FontName',0,'636c6173734e616d6520706c616365686f6c646572'); var fontArray = editdoc.all.tags("FONT"); for (i=0; i instead // if (ord == 13 && editEvent.type == 'keypress') { // editEvent.returnValue = false; // editor_insertHTML(objname, "
"); // return; // } if (ctrlKey && (ord == 122 || ord == 90)) { // catch ctrl-z (UNDO) // TODO: Add our own undo/redo functionality // editEvent.cancelBubble = true; return; } if ((ctrlKey && (ord == 121 || ord == 89)) || ctrlKey && shiftKey && (ord == 122 || ord == 90)) { // catch ctrl-y, ctrl-shift-z (REDO) // TODO: Add our own undo/redo functionality return; } } // setup timer for delayed updates (some events take time to complete) if (runDelay > 0) { return setTimeout(function(){ editor_event(objname); }, runDelay); } // don't execute more than 3 times a second (eg: too soon after last execution) if (this.tooSoon == 1 && runDelay >= 0) { this.queue = 1; if(htmledit_ispaste){ editor_setHTML(objname,CleanWord(editor_getHTML(objname))); htmledit_ispaste = false; } return; } // queue all but urgent events this.tooSoon = 1; setTimeout(function(){ this.tooSoon = 0; if (this.queue) { editor_event(objname,-1); }; this.queue = 0; }, 333); // 1/3 second editor_updateOutput(objname); editor_updateToolbar(objname); } function editor_updateToolbar(objname,action) { //modify in 2011 for chrome //var config = document.all[objname].config; //var config = JSON.parse($("#"+objname).attr("config")); var config = JSON.parse(document.all[objname].getAttribute("config")); var editor_obj = document.all["_" +objname+ "_editor"]; // disable or enable toolbar if (action == "enable" || action == "disable") { var tbItems = new Array('FontName','FontSize','FontStyle'); // add pulldowns //modify in 2011 for chrome for (var btnName in config.btnList) { if(btnName!=undefined) tbItems.push(config.btnList[btnName][0]); } // add buttons //for (var iBtn = 0; iBtn < config.btnList.length; iBtn++ ) { tbItems.push(config.btnList[iBtn][0]); } // add buttons //for (var idxN in tbItems) { for (var idxN = 0; idxN < tbItems.length; idxN++ ) { if(tbItems[idxN]==undefined) continue; //add in 2011 var cmdID = tbItems[idxN].toLowerCase(); var tbObj = document.all["_" +objname+ "_" +tbItems[idxN]]; if (cmdID == "htmlmode" || cmdID == "about" || cmdID == "showhelp" || cmdID == "popupeditor") { continue; } // don't change these buttons if (tbObj == null) { continue; } var isBtn = (tbObj.tagName.toLowerCase() == "button") ? true : false; if (action == "enable") { tbObj.disabled = false; if (isBtn) { tbObj.className = 'btn'; }} if (action == "disable") { tbObj.disabled = true; if (isBtn) { tbObj.className = 'btnNA'; }} } return; } // update toolbar state if (editor_obj.tagName.toLowerCase() == 'textarea') { return; } // don't update state in textedit mode var editdoc = editor_obj.contentWindow.document; // Set FontName pulldown var fontname_obj = document.all["_" +objname+ "_FontName"]; if (fontname_obj) { var fontname = editdoc.queryCommandValue('FontName'); if (fontname == null) { fontname_obj.value = null; } else { var found = 0; for (i=0; i