sqEditor HTML 编辑器 for .net v1.0 By shawl.qiu
目录:
1. 简介
2. 调用示例
3. 编辑示例
4. js 核心代码
内容:
1. 简介
- sqEditor HTML 编辑器 for .net By shawl.qiu
- ---/--------------------------------------------------------------------------------------
- version 1.0
- 下载:
- http://files.myopera.com/btbtd/csharp/class/sqEditor_for_dotNet_v1.0.7z
- sqEditor HTML 编辑器 for .net v1.0 是 从 sqEditor HTML 编辑器 v1.3 改写而来.
- sqEditor HTML 编辑器 v1.3 详细:
- http://blog.csdn.net/btbtd/archive/2007/01/16/1484070.aspx
- 基本上两者编辑功能无甚区别,
- 不同的是两者的运行方式.
- shawl.qiu
- 2007-3-2
- http://blog.csdn.net/btbtd
- © 2007-2008 shawl.qiu. All rights reserved.
2. 调用示例
- <%@ Page Language="C#" AutoEventWireup="True" validateRequest="false" %>
- <%@ import Namespace="System.Web.UI.WebControls" %>
- <%@ Reference Control="ac/sqEditor.ascx" %>
- <script runat="server">
- public string EdRoot = "/sqEditor_DotNet/";
- void Page_Load(Object s, EventArgs e)
- {
- GetEditor("<b>hello</b>, test this.", edPlaceHolder, EdRoot+"ac/sqEditor.ascx",
- new EventHandler(Submit));
- } // end Page_Load
- public void GetEditor(string inti, PlaceHolder edPlaceHolder, string edPath, EventHandler eh)
- {
- sqEditor ed = (sqEditor)LoadControl(edPath);
- ed.EdRoot = EdRoot;
- ed.EdIntiText = inti;
- ed.SubmitEventHandler = eh;
- edPlaceHolder.Controls.Add(ed);
- }
- public void Submit(Object s, EventArgs e)
- {
- TextBox edTextBox =
- (TextBox)((Button)s).Parent.FindControl("edTextBox");
- HtmlGenericControl edIntiDiv =
- (HtmlGenericControl)((Button)s).Parent.FindControl("edIntiDiv");
- edIntiDiv.InnerHtml = edTextBox.Text;
- if(edTextBox == null) return;
- debugLabel.Text = edTextBox.Text;
- }
- </script>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>shawl.qiu template</title>
- <style type="text/css">
- /*<![CDATA[*/
- @import "<% Response.Write(EdRoot); %>style/style.css";
- /*]]>*/
- </style>
- </head>
- <body>
- <form runat="server">
- <asp:Label id=debugLabel runat=server
- />
- <div class="sqEditorDiv">
- <asp:PlaceHolder id=edPlaceHolder runat=server
- />
- </div>
- </form>
- <p/><a href="?">--back--</a>
- </body>
- </html>
3. 编辑示例
- <%@ Page Language="C#" AutoEventWireup="True" validateRequest="false" %>
- <%@ import Namespace="System.Data" %>
- <%@ import Namespace="System.Data.OleDb" %>
- <%@ import Namespace="System.IO" %>
- <%@ import Namespace="System.Text" %>
- <%@ import Namespace="System.Web.UI.WebControls" %>
- <%@ Assembly src="cs/Pagination.cs" %>
- <%@ Assembly src="cs/SQ.cs" %>
- <%@ import Namespace="SQ" %>
- <%@ Reference Control="ac/sqEditor.ascx" %>
- <script runat="server">
- public bool Debug = false;
- public string EdRoot = "/sqEditor_DotNet/";
- public string ReqIdStr = HttpContext.Current.Request.QueryString["id"]+"";
- public string ReqAidStr = HttpContext.Current.Request.QueryString["aid"]+"";
- void Page_Load(Object s, EventArgs e)
- {
- string SqlCnnStr;
- SqlCnnStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+
- @MapPath(EdRoot+"/data/shawlqiu.mdb");
- string SqlQuery;
- SqlQuery = "select * from shawlqiu_";
- acDebugLabel.Text = "";
- acInfoLabel.Text = "";
- switch(ReqIdStr)
- {
- case "addnew":
- AddNewBox();
- break;
- case "edit":
- SqlQuery+=" where articleid = "+ReqAidStr;
- EditBox(SqlQuery, SqlCnnStr, acInfoLabel);
- break;
- case "display":
- SqlQuery+=" where articleid = "+ReqAidStr;
- acDisplayAtDataList.DataSource = Datum.GetDataTable(SqlQuery, SqlCnnStr);
- acDisplayAtDataList.DataBind();
- break;
- default:
- SqlQuery+=" order by articleid desc";
- DisplayList(Datum.GetDataTable(SqlQuery, SqlCnnStr, "hello"), acDataList);
- break;
- }
- } // end Page_Load
- private void EditBox(string qry, string cnn, Label InfoLabel)
- {
- DataTable dt = Datum.GetDataTable(qry, cnn);
- string cnt = "";
- if(dt.Rows.Count==0)
- {
- Utility.GoBack("查询出错, 3 秒后返回, 还有 ", 3, true, InfoLabel);
- return;
- }
- Literal ltl = new Literal();
- ltl.Text = "<h3 class='fltr algr'>编辑数据 <a href='?id=display&aid="+
- HttpContext.Current.Request.QueryString["aid"]+"'>Go Article</a></h3>title: ";
- edPlaceHolder.Controls.Add(ltl);
- TextBox tbx = new TextBox();
- tbx.ID = "acTitle";
- tbx.Columns = 80;
- tbx.Text = dt.Rows[0]["title"]+"";
- edPlaceHolder.Controls.Add(tbx);
- GetEditor(
- System.Text.Encoding.Unicode.GetString((byte[])dt.Rows[0]["content"]),
- edPlaceHolder, EdRoot+"ac/sqEditor.ascx",
- new EventHandler(SubmitEdit));
- }
- public void SubmitEdit(Object s, EventArgs e)
- {
- bool debug = false;
- TextBox edTextBox =
- (TextBox)((Button)s).Parent.FindControl("edTextBox");
- TextBox titleTextBox =
- (TextBox)edPlaceHolder.FindControl("acTitle");
- HtmlGenericControl edIntiDiv =
- (HtmlGenericControl)((Button)s).Parent.FindControl("edIntiDiv");
- edIntiDiv.InnerHtml = edTextBox.Text;
- if(edTextBox == null) return;
- if((debug|Debug)&acDebugLabel!=null)
- {
- acDebugLabel.Text += "<li/>titleTextBox.Text: "+titleTextBox.Text;
- acDebugLabel.Text += "<li/>titleTextBox.Text==/"/": "+(titleTextBox.Text=="");
- acDebugLabel.Text += "<li/>edTextBox.Text: "+edTextBox.Text;
- acDebugLabel.Text += "<li/>edTextBox.Text==/"/": "+(edTextBox.Text=="");
- }
- if(titleTextBox.Text=="")
- {
- acInfoLabel.Text += "<li/>标题不能为空! 操作被取消.";
- return;
- }
- if(edTextBox.Text=="")
- {
- edTextBox.Text += "<li/>内容不能为空! 操作被取消.";
- return;
- }
- string SqlCnnStr;
- SqlCnnStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+
- @MapPath(EdRoot+"/data/shawlqiu.mdb");
- OleDbConnection oCnn = new OleDbConnection(SqlCnnStr);
- OleDbCommand oCmd = new OleDbCommand("update shawlqiu_ set title="+
- "@title, content=@content where articleid="+ReqAidStr, oCnn);
- OleDbParameter oParamTitle = new OleDbParameter("@title", "OleDbType.Varchar");
- oParamTitle.Value = titleTextBox.Text+"";
- oCmd.Parameters.Add(oParamTitle);
- OleDbParameter oParamContent = new OleDbParameter("@content", "OleDbType.Binary");
- oParamContent.Value = edTextBox.Text+"";
- oCmd.Parameters.Add(oParamContent);
- oCnn.Open();
- oCmd.ExecuteNonQuery();
- oCnn.Close();
- Utility.GoBack("数据已更新, 3 秒后返回, 还有 ", 3, true, acInfoLabel);
- }
- private void AddNewBox()
- {
- Literal ltl = new Literal();
- ltl.Text = "<h3 class='fltr algr'>添加数据</h3>title: ";
- edPlaceHolder.Controls.Add(ltl);
- TextBox tbx = new TextBox();
- tbx.ID = "acTitle";
- tbx.Columns = 80;
- edPlaceHolder.Controls.Add(tbx);
- GetEditor("add new article", edPlaceHolder, EdRoot+"ac/sqEditor.ascx",
- new EventHandler(SubmitNew));
- }
- public void SubmitNew(Object s, EventArgs e)
- {
- bool debug = false;
- TextBox edTextBox =
- (TextBox)((Button)s).Parent.FindControl("edTextBox");
- TextBox titleTextBox =
- (TextBox)edPlaceHolder.FindControl("acTitle");
- HtmlGenericControl edIntiDiv =
- (HtmlGenericControl)((Button)s).Parent.FindControl("edIntiDiv");
- edIntiDiv.InnerHtml = edTextBox.Text;
- if(edTextBox == null) return;
- if((debug|Debug)&acDebugLabel!=null)
- {
- acDebugLabel.Text += "<li/>titleTextBox.Text: "+titleTextBox.Text;
- acDebugLabel.Text += "<li/>titleTextBox.Text==/"/": "+(titleTextBox.Text=="");
- acDebugLabel.Text += "<li/>edTextBox.Text: "+edTextBox.Text;
- acDebugLabel.Text += "<li/>edTextBox.Text==/"/": "+(edTextBox.Text=="");
- }
- if(titleTextBox.Text=="")
- {
- acInfoLabel.Text += "<li/>标题不能为空! 操作被取消.";
- return;
- }
- if(edTextBox.Text=="")
- {
- edTextBox.Text += "<li/>内容不能为空! 操作被取消.";
- return;
- }
- string SqlCnnStr;
- SqlCnnStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+
- @MapPath(EdRoot+"/data/shawlqiu.mdb");
- OleDbConnection oCnn = new OleDbConnection(SqlCnnStr);
- OleDbCommand oCmd = new OleDbCommand("insert into shawlqiu_(title, content) "+
- "values(@title, @content)", oCnn);
- OleDbParameter oParamTitle = new OleDbParameter("@title", "OleDbType.Varchar");
- oParamTitle.Value = titleTextBox.Text+"";
- oCmd.Parameters.Add(oParamTitle);
- OleDbParameter oParamContent = new OleDbParameter("@content", "OleDbType.Binary");
- oParamContent.Value = edTextBox.Text+"";
- oCmd.Parameters.Add(oParamContent);
- oCnn.Open();
- oCmd.ExecuteNonQuery();
- oCnn.Close();
- Utility.GoBack("数据已添加, 3 秒后返回, 还有 ", 3, "?", acInfoLabel);
- }
- private void DisplayList(DataTable dt, DataList acDataList)
- {
- Pagination Paged=new Pagination();
- Paged.Debug=false; // 是否为调试模式
- Paged.DebugLabel=acDebugLabel; // 显示调试信息的 Label
- Paged.NavigatorLabel=acPagedLabel; // 显示主导航条的 Label
- Paged.DetailsLabel=acPagedDetailsLabel;// 显示分页明细的 Label
- Paged.PageSize=20; // 每页大小
- Paged.Go(dt, acDataList); // 执行分页
- Paged=null;
- }
- public void GetEditor(string inti, PlaceHolder edPlaceHolder, string edPath, EventHandler eh)
- {
- sqEditor ed = (sqEditor)LoadControl(edPath);
- ed.Debug = Debug;
- ed.EdRoot = EdRoot;
- ed.EdIntiText = inti;
- ed.SubmitEventHandler = eh;
- edPlaceHolder.Controls.Add(ed);
- }
- </script>
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml">
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>shawl.qiu template</title>
- <style type="text/css">
- /*<![CDATA[*/
- @import "<% Response.Write(EdRoot); %>style/style.css";
- /*]]>*/
- </style>
- </head>
- <body>
- <div class="Main">
- <form runat="server">
- <asp:Label id=acDebugLabel runat=server
- />
- <div class="info corRed">
- <asp:Label id=acInfoLabel runat=server
- />
- </div>
- <div class="navigator">
- <span class="fltr algr">
- <a href="?id=addnew">addnew</a>
- </span>
- <h2><a href="?">sqEditor HTML 编辑器 for .net</a></h2>
- </div>
- <div class="algc">
- <div class="pagedList">
- <asp:Label id=acPagedLabel runat=server
- />
- </div>
- <div class="pagedDetails">
- <asp:Label id=acPagedDetailsLabel runat=server
- />
- </div>
- </div>
- <div class="acMain">
- <asp:DataList id="acDisplayAtDataList"
- BorderColor="black"
- CellPadding="5"
- CellSpacing="5"
- RepeatDirection="Horizontal"
- RepeatLayout="Flow"
- RepeatColumns="10"
- ShowBorder="True"
- runat="server">
- <HeaderTemplate>
- <ol class="acOlList">
- </HeaderTemplate>
- <HeaderStyle BackColor="#aaaadd">
- </HeaderStyle>
- <AlternatingItemStyle>
- </AlternatingItemStyle>
- <ItemTemplate>
- <li>
- <span class="algr fltr">
- <a href="?id=edit&aid=<%# DataBinder.Eval(Container.DataItem, "articleid") %>">
- edit
- </a>
- </span>
- <a href="?id=display&aid=<%# DataBinder.Eval(Container.DataItem, "articleid") %>">
- <%# DataBinder.Eval(Container.DataItem, "title") %>
- </a>
- <div class="text">
- <%#
- System.Text.Encoding.Unicode.GetString(
- (byte[])DataBinder.Eval(Container.DataItem, "content")
- )
- %>
- </div>
- </li>
- </ItemTemplate>
- <%--
- <SeparatorTemplate>
- </SeparatorTemplate>
- --%>
- <FooterTemplate>
- </ol>
- </FooterTemplate>
- </asp:DataList>
- <asp:DataList id="acDataList"
- BorderColor="black"
- CellPadding="5"
- CellSpacing="5"
- RepeatDirection="Horizontal"
- RepeatLayout="Flow"
- RepeatColumns="10"
- ShowBorder="True"
- runat="server">
- <HeaderTemplate>
- <ol class="acOlList">
- </HeaderTemplate>
- <HeaderStyle BackColor="#aaaadd">
- </HeaderStyle>
- <AlternatingItemStyle>
- </AlternatingItemStyle>
- <ItemTemplate>
- <li>
- <span class="algr fltr">
- <a href="?id=edit&aid=<%# DataBinder.Eval(Container.DataItem, "articleid") %>">
- edit
- </a>
- </span>
- <a href="?id=display&aid=<%# DataBinder.Eval(Container.DataItem, "articleid") %>">
- <%# DataBinder.Eval(Container.DataItem, "title") %>
- </a>
- </li>
- </ItemTemplate>
- <%--
- <SeparatorTemplate>
- </SeparatorTemplate>
- --%>
- <FooterTemplate>
- </ol>
- </FooterTemplate>
- </asp:DataList>
- </div>
- <div class="sqEditorDiv">
- <asp:PlaceHolder id=edPlaceHolder runat=server
- />
- </div>
- </form>
- </div>
- <p/><a href="?">--back--</a>
- </body>
- </html>
4. js 核心代码
- // sqEditor -- shawl.qiu script : shawl.qiu@gmail.com
- /*-----------------------------------------------------------------------------------*/
- * sqEditor HTML 编辑器 for .net v1.0
- /*-----------------------------------------------------------------------------------*/
- //---------------------------------begin class sqEditor()-------------------------------//
- function sqEditor()
- { // shawl.qiu code
- //------------------------------------begin public variable
- //---------------begin about
- this.auSubject='sqEditor HTML 编辑器 for .net';
- this.auVersion='v1.0';
- this.au='shawl.qiu';
- this.auEmail='shawl.qiu@gmail.com';
- this.auBlog='http://blog.csdn.net/btbtd';
- this.auCreateDate='2007-2-29';
- //---------------end about
- this.Debug = false;
- this.Root = "/sqEditor_DotNet/";
- this.Iframe = function(){}
- this.Iframe.Id = "ifm";
- this.Iframe.Window = "";
- this.Iframe.Document = "";
- this.SubmitId = "submId";
- this.ContentTextBoxId = "ctbId";
- this.IntiTextDivId = "itdId";
- this.ReloadString = "";
- this.MaxLength = 200000;
- this.MinLength = 13;
- this.Word = function(){}
- this.Word.ModeTrue = "Go Design Mode";
- this.Word.ModeFalse = "Go Source Mode";
- this.Word.Submit = "现在提交数据?";
- this.Word.Reset = "现在重置?";
- this.Word.Submitting = "正在提交数据, 请稍候...";
- this.Word.Upsize = "数据过长, 请重新编辑. 最多为: "+this.MaxLength+" 字.";
- this.Word.ShortSize = "数据过短, 请重新编辑. 最小长度为: "+this.MinLength+" 字.";
- //------------------------------------end public variable
- //------------------------------------begin private variable
- var Tl = this;
- var IntiTextDivObj;
- var ContentTextBoxObj;
- var EdMode = true;
- var ReloadMode = false;
- //------------------------------------end private variable
- //------------------------------------begin public method
- this.Inti = fInti;
- this.Submit = fSubmit;
- this.SubmitHandler = fSubmitHandler;
- this.Mode = fMode;
- this.Cmd = fCmd;
- this.XmlHttp = fXmlHttp;
- this.Select = fSelect;
- this.Popup= fPopup;
- this.Reload = fReload;
- this.Preview = fPreview;
- this.Source = fSource;
- //------------------------------------end public method
- //------------------------------------begin private method
- function fSource(){
- Tl.Popup('about:blank');
- oPopup.document.write('<meta http-equiv="Content-Type" content="text/html;'+
- ' charset=utf-8" />');
- var str=Tl.Iframe.Document.body.innerHTML;
- switch(navigator.appName)
- {
- case 'Opera':
- str=str.replace(/<br(//|)>/gi,'<br/>/r/n');
- str=fStrEncode(str);
- oPopup.document.write('<xmp><div id="sqEditorMain" class="sqEditorMain">/n',
- fStdCase(str),'</div></xmp>'); break;
- case 'Netscape':
- str=str.replace(/<br(//|)>/gi,'<br/>/r/n');
- str='<div id="sqEditorMain" class="sqEditorMain">/n'+str+'</div>';
- str=fStrEncode(str);
- oPopup.document.write('<pre>'+fStdCase(str)+'</pre>'); break;
- default: str=str.replace(/(<br(//|)>)/gi,'<br/>/n');
- oPopup.document.write('<xmp><div id="sqEditorMain" class="sqEditorMain">/n',
- fStdCase(str),'</div></xmp>');
- }
- oPopup.document.close();
- } // end function fSource
- function fPreview()
- {
- Tl.Popup('about:blank');
- oPopup.document.write(Tl.Iframe.Document.body.innerHTML);
- oPopup.document.close();
- return false;
- }
- function fSubmitHandler()
- {
- var btn = document.getElementById(Tl.SubmitId);
- if(btn==null)return false;
- btn.click();
- return false;
- }
- function fReload()
- {
- if(ReloadMode)Tl.ReloadString='?id='+fRandomLetter(10);
- location.replace(document.URL);
- ReloadMode=true;
- return false;
- }
- function fSelect(obj, e)
- {
- if(!e)var e=window.event;
- var ele=e.target||e.srcElement
- var iPsti = fGetEleOffsetPsti(ele);
- fHidEle(obj); //--
- obj.style.width=ele.offsetWidth+'px';
- obj.style.left=iPsti+'px';
- obj.style.top=ele.offsetTop+ele.offsetHeight+'px';
- if(obj.childNodes[0].className=='sqEditorCssBorder')return true;
- for(var i=0; i<obj.childNodes.length; i++)
- {
- if(obj.childNodes[i].nodeType==1)
- {
- obj.childNodes[i].className='sqEditorCssBorder';
- obj.childNodes[i].style.width=obj.style.width;
- switch(obj.id)
- {
- case 'sqDdFontsize':
- obj.childNodes[i].onclick=function()
- {
- Tl.Cmd('formatBlock', false, this.childNodes[0].nodeName.toLowerCase());
- fHidEle(this.parentNode); //--
- ele.innerHTML=this.childNodes[0].nodeName;
- return false;
- }
- break;
- case 'sqDdBgColor':
- obj.childNodes[i].onclick=function()
- {
- ele.style.backgroundColor=this.innerHTML;
- ele.style.color=this.style.color;
- Tl.Cmd('hiliteColor', false, this.innerHTML);
- fHidEle(this.parentNode); //--
- return false;
- }
- break;
- case 'sqDdFgColor':
- obj.childNodes[i].onclick=function()
- {
- ele.style.backgroundColor=this.innerHTML;
- ele.style.color=this.style.color;
- Tl.Cmd('ForeColor', false, this.innerHTML);
- fHidEle(this.parentNode); //--
- return false;
- }
- break;
- case 'sqDdFormatBlock':
- obj.childNodes[i].onclick=function()
- {
- Tl.Cmd('formatBlock', false, this.innerHTML);
- fHidEle(this.parentNode); //--
- ele.innerHTML=this.innerHTML;
- return false;
- }
- break;
- } // end switch
- } // end if
- } // end for
- return false;
- function fHidEle(obj){
- obj.style.display=='none'?obj.style.display='block':obj.style.display='none';
- } // end function fHidEle
- } // end function fSimulation
- function fCmd(sCmd, bOpt, sVal)
- {
- if(!sCmd)return false;
- if(!bOpt)var bOpt=false;
- if(!sVal)var sVal=null;
- switch(sCmd){
- case 'pre':
- fPre();
- return false;
- case 'formatBlock':
- if(sVal!='h1'&&sVal!='h2'&&sVal!='h3'&&sVal!='h5'&&sVal!='h5'&&sVal!='h6')
- {
- fPadTag(sVal);
- return false;
- }
- break;
- case 'emptyAll':
- if(sVal==null)sVal='确实要清空内容吗?'
- if(confirm(sVal))
- Tl.Iframe.Document.body.innerHTML=' '
- return false;
- case 'email':
- fEmail();
- return false;
- case 'anchor':
- fAnchor();
- return false;
- case 'emotion':
- fEmotion();
- return false;
- case 'eraserAll':
- fEraserAll();
- return false;
- } // end switch
- if(fCkBrs()!=1)
- {
- switch(sCmd)
- {
- case 'createLink':
- fLink();
- return false;
- case 'insertImage':
- fImg();
- return false;
- }
- } // end if
- if(fCkBrs()==1){
- switch(sCmd)
- {
- case 'insertOrderedList':
- fOrderListForIe('ol');
- return false;
- case 'insertUnorderedList':
- fOrderListForIe('ul');
- return false;
- case 'hiliteColor':
- sCmd='BackColor';
- break;
- case 'insertHTML':
- fIeInsertHtml(sVal);
- return false;
- case 'InsertImage':
- Tl.Cmd('insertHTML', false,
- '<img src="'+sVal+'" class="sqImg" />');
- return false;
- case 'formatBlock':
- if(sVal=='h1'||sVal=='h2'||sVal=='h3'||sVal=='h4'||sVal=='h5'||sVal=='h6')
- sVal='<'+sVal+'>';
- break;
- } // end switch
- } // end if
- Tl.Iframe.Document.execCommand(sCmd, bOpt, sVal);
- return false;
- }
- function fMode(){
- var debug = false;
- var dbs = "";
- var EdBtn = document.getElementById('sqBtnMode');
- if(EdMode)
- {
- EdBtn.innerHTML = Tl.Word.ModeTrue;
- if(navigator.appName == "Netscape")
- {
- Tl.Iframe.Document.body.innerHTML=Tl.Iframe.Document.body.innerHTML.
- replace(/<pre>[/s/S]*?<//pre>/gi,
- function(match)
- {
- return match.replace(//r/gi,'<br>');
- });
- var TempTextNode=document.createTextNode(Tl.Iframe.Document.body.innerHTML.
- replace(/(<br(?://|)>)/gi,'$1/r'));
- Tl.Iframe.Document.body.innerHTML='';
- Tl.Iframe.Document.body.appendChild(TempTextNode); TempTextNode=null;
- Tl.Iframe.Document.body.innerHTML=Tl.Iframe.Document.body.innerHTML.
- replace(//r/gi,'<br/>/r');
- }
- else
- {
- Tl.Iframe.Document.body.innerText=Tl.Iframe.Document.body.innerHTML.replace(//n|/r/g,'').
- replace(/<pre>[/s/S]*?<//pre>/gi,
- function(match){ return match.replace(/<br(//|)>/gi,'/n'); });
- Tl.Iframe.Document.body.innerHTML=Tl.Iframe.Document.body.innerHTML.
- replace(/(/</;BR(?://|)/>/;)/gi,'$1<br/>');
- } // end if 1
- EdMode = false;
- }
- else
- {
- EdBtn.innerHTML = Tl.Word.ModeFalse;
- if(navigator.appName == "Netscape")
- {
- Tl.Iframe.Document.body.innerHTML=Tl.Iframe.Document.body.innerHTML.replace(//n|/r/g,'');
- Tl.Iframe.Document.body.innerHTML=Tl.Iframe.Document.body.innerHTML.
- replace(//</;pre/>/;[/s/S]+/</;//pre>/;/gi,
- function(match){ return match.replace(/<br>/gi,'/r'); });
- var html = Tl.Iframe.Document.body.ownerDocument.createRange();
- html.selectNodeContents(Tl.Iframe.Document.body);
- Tl.Iframe.Document.body.innerHTML=html.toString();
- html=null;
- }
- else
- {
- Tl.Iframe.Document.body.innerHTML=Tl.Iframe.Document.body.innerText.
- replace(/<pre.*?>[/s/S]*?<//pre>/gi,function(match)
- {
- return match.replace(//n/g,'<br/>');
- });
- } // end if 1
- EdMode = true;
- } // end if
- if(debug||Tl.Debug)
- {
- dbs += "/nEdMode: "+EdMode;
- alert(dbs);
- }
- return false;
- } // end function fMode
- function fSubmit()
- {
- var debug = false;
- var dbs = "";
- var oEd=document.getElementById(Tl.Iframe.Id);
- var oTemp=document.createElement('div');
- oTemp.id='sqPosting';
- oTemp.style.backgroundColor='yellow';
- oTemp.style.color='black';
- oTemp.innerHTML= Tl.Word.Submitting;
- oEd.parentNode.insertBefore(oTemp, oEd);
- oEd=null;
- oTemp=null;
- if(!EdMode)
- {
- Tl.Mode();
- EdMode=true;
- }
- fAtcLink(Tl.Iframe.Document.body, Tl.Iframe.Document);
- if(!confirm(Tl.Word.Submit))
- {
- fCancel("sqPosting");
- return false;
- }
- if(Tl.Iframe.Window == null) return false;
- if(ContentTextBoxObj == null) return false;
- var ifmHtml = Tl.Iframe.Document.body.innerHTML;
- if(Tl.Debug||debug)
- {
- dbs += "/ndebug submit:";
- //dbs += "/nifmHtml: "+ifmHtml;
- dbs += "/n ifmHtml.length: "+ifmHtml.length;
- dbs += "/n typeof(ifmHtml.length): "+typeof(ifmHtml.length);
- dbs += "/n ifmHtml.length: "+ifmHtml.length;
- dbs += "/n typeof(Tl.MinLength): "+typeof(Tl.MinLength);
- dbs += "/n Tl.MinLength: "+Tl.MinLength;
- alert(dbs);
- }
- if(ifmHtml.length>Tl.MaxLength)
- {
- alert(Tl.Word.Upsize);
- fCancel("sqPosting");
- return false;
- }
- if(ifmHtml.length<Tl.MinLength)
- {
- alert(Tl.Word.ShortSize);
- fCancel("sqPosting");
- return false;
- }
- ContentTextBoxObj.value = ifmHtml;
- return true;
- } // end function fSubmit
- function fCancel(sId)
- {
- try
- {
- var oEd=document.getElementById(sId);
- oEd.parentNode.removeChild(oEd);
- oEd=null;
- }
- catch(e){}
- } // end function fCancel
- function fAtcLink(obj, dcu)
- {
- if(!EdMode) return false;
- var temp, str='', span;
- for(var i=0, j=obj.childNodes.length; i<j; i++)
- {
- temp=obj.childNodes[i];
- if(temp.nodeType==3)
- {
- if(temp.parentNode.nodeName=='A')return false;
- if(temp.data.indexOf('http')<0&&temp.data.indexOf('ftp')<0&&
- temp.data.indexOf('@')<0)continue;
- span=dcu.createElement('span');
- //str=temp.data.replace(/</g,'<').replace(/>/g,'>');
- str=fStrEncode(temp.data);
- str=str.replace(/(ht|f)tp(s|)/:[/-/w.:]+(//[^ /n/r/'/"]+|)/gi,function(match)
- {
- return '<a href="'+match+'" class="sqUrl">'+match+'</a>'; } );
- str=str.replace(/[/w.]+@[/w/-.]+(//[^ /n/r/'/"]+|)/gi,function(match)
- {
- return '<a href="mailto:'+match+'" class="sqMail">'+match+'</a>';
- });
- span.innerHTML=str;
- obj.replaceChild(span, temp);
- }
- if(temp.nodeType==1)arguments.callee(obj.childNodes[i], dcu);
- } temp=span=null;
- } // end function fAtcLink
- function fInti()
- {
- try
- {
- var sbmBtn = document.getElementById(Tl.SubmitId);
- if(sbmBtn==null)return false;
- var clkTemp = sbmBtn.onclick;
- sbmBtn.onclick=function()
- {
- try{clkTemp();}catch(e){}
- return Tl.Submit();
- }
- Tl.Iframe.Window=document.getElementById(Tl.Iframe.Id).contentWindow;
- Tl.Iframe.Document=Tl.Iframe.Window.document;
- ContentTextBoxObj = document.getElementById(Tl.ContentTextBoxId)
- Tl.IntiTextDivObj=document.getElementById(Tl.IntiTextDivId)
- if(Tl.IntiTextDivObj!=null) Tl.IntiTextDivObj=Tl.IntiTextDivObj.innerHTML;
- Tl.Iframe.Document.designMode="on";
- Tl.Iframe.Document.contentEditable=true;
- Tl.Iframe.Document.open();
- if(!Tl.IntiTextDivObj) Tl.Iframe.Document.write('-------- ');
- else Tl.Iframe.Document.write(Tl.IntiTextDivObj);
- Tl.Iframe.Document.close();
- try
- {
- var oTemp=onunload;
- onunload=function()
- {
- try{oTemp();}catch(e){}
- fFixMl();
- } // end onunload
- }
- catch(e) {}
- }
- catch(e)
- {
- }
- } // end function fInti
- function fCkBrs()
- {
- switch (navigator.appName)
- {
- case 'Opera': return 2;
- case 'Netscape': return 3;
- default: return 1;
- }
- } // end function fCkBrs
- function fOrderListForIe(sMarkup)
- {
- var sAr = [];
- var sTemp = "";
- var oRange = Tl.Iframe.Document.selection.createRange();
- if(oRange.text != '')
- {
- sAr = oRange.text.split('/n');
- for(var i=0; i<sAr.length; i++)
- sTemp += '<li>'+sAr[i].replace(/</g,'<').replace(/>/g,'>')+'</li>';
- sTemp = '<'+sMarkup+' class="sqList">'+sTemp+'</'+sMarkup+'>';
- oRange.pasteHTML(sTemp);
- }
- } // end function fOrderListForIe
- function fPre()
- {
- if(fCkBrs()==1)
- {
- var range=Tl.Iframe.Document.selection.createRange();
- var str=range.text;
- if(str!='')
- {
- range.pasteHTML('<pre class="sqPre">'+str+'</pre>');
- }
- else
- {
- fPopup(Tl.Root+'html/popup_pre.htm'+Tl.ReloadString); // end if 1
- }
- }
- else
- {
- var range = Tl.Iframe.Window.getSelection().getRangeAt(0); // 返回 当前 range 中的内容
- var selt = Tl.Iframe.Window.getSelection();
- var str = selt.toString();
- if(str.length>10)
- {
- if(fCkBrs()==3)
- {
- str=str.replace(/<br>/g,'');
- str=str.replace(//n/g,'');
- Tl.Iframe.Document.execCommand('insertHTML', false, '<pre class="sqPre">'+str+'</pre>');
- return false;
- }
- Tl.Iframe.Document.execCommand('formatBlock', false, 'pre');
- }
- else
- {
- fPopup(Tl.Root+'html/popup_pre.htm'+Tl.ReloadString); // end if 1
- }
- } // end if
- return false;
- } // end function fPre
- function fPopup(sUrl, iWidth, iHeight, sAddition)
- {
- try{oPopup.close()}catch(e){}
- if(!sUrl)return false;
- if(!iWidth)iWidth=screen.availWidth-200;
- if(!iHeight)iHeight=screen.availHeight-150;
- if(!sAddition)sAddition='';
- var iMrgHor=(screen.availWidth-iWidth)/2;
- var iMrgVtc=(screen.availHeight-iHeight)/2;
- oPopup=open('about:blank','sqPopup','width='+iWidth+',height='+iHeight+',left='+iMrgHor
- +',top='+iMrgVtc+',scrollbars'+sAddition);
- oPopup.location.href=sUrl;
- oPopup.focus();
- oPopup.document.ondblclick=function(){oPopup.close();}
- oPopup.document.onkeydown=function(){ if(oPopup.event.keyCode==27)oPopup.close(); }
- return false;
- } // shawl.qiu script
- function fXmlHttp(sMethod, sUrl, oFunc)
- {
- var xh;
- try
- {
- xh=new XMLHttpRequest();
- }
- catch(e)
- {
- try
- {
- xh=new ActiveXObject('microsoft.xmlhttp');
- }
- catch(e)
- {
- try{ xh=new ActiveXObject("Msxml2.XMLHTTP"); } catch(e){} // end try 2
- } // end try 1
- } // end try
- xh.open(sMethod, sUrl);
- xh.onreadystatechange=function()
- {
- if(xh.readyState==4&&xh.status==200)
- {
- if(oFunc) oFunc(xh.responseText);
- else alert(xh.responseText);
- }
- }
- xh.send(null);
- } // end function fXh
- function fIeInsertHtml(sStr)
- {
- Tl.Iframe.Window.focus();
- if(fCkBrs()==1){
- var range=Tl.Iframe.Document.selection.createRange();
- range.pasteHTML(sStr);
- }
- } // end function fIeInsertHtml
- function fGetEleOffsetPsti(oEle, iPsti)
- {
- if(fCkBrs()!=1) return oEle.offsetLeft;
- var debug = false;
- if(debug)
- {
- alert(
- "oEle.tagName: "+oEle.tagName+
- "/noEle.offsetLeft: "+oEle.offsetLeft
- );
- }
- iPsti = oEle.offsetLeft;
- if(oEle!=null && oEle.tagName!="BODY")
- {
- iPsti+=arguments.callee(oEle.parentNode, iPsti);
- }
- return iPsti;
- function fCkBrs()
- {
- switch (navigator.appName)
- {
- case 'Opera': return 2;
- case 'Netscape': return 3;
- default: return 1;
- }
- } // end function fCkBrs
- } // end function fGetEleOffsetPsti
- function fPadTag(sTag)
- {
- Tl.Iframe.Window.focus();
- if(fCkBrs()==1)
- {
- var range=Tl.Iframe.Document.selection.createRange();
- range.pasteHTML('<'+sTag+' class="sqGeneral">'+range.htmlText+'</'+sTag+'>');
- }
- else
- {
- var range=Tl.Iframe.Window.getSelection().getRangeAt(0); // 返回 当前 range 中的内容
- var oTemp=Tl.Iframe.Document.createElement(sTag);
- range.surroundContents(oTemp);
- } // end if
- } // end function fPadTag
- function fRandomLetter(nLen, sCase)
- {
- var ar='';
- var arUp=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S',
- 'T','U','V','W','X','Y','Z'];
- var arLw=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t',
- 'u','v','w','x','y','z'];
- var arDgt=[0,1,2,3,4,5,6,7,8,9];
- switch(sCase)
- {
- case 'upper': ar=arUp; break;
- case 'lower': ar=arLw; break;
- case 'letter': ar=arUp.concat(arLw); break;
- default:ar=arUp.concat(arLw, arDgt);
- }
- if(nLen&&nLen>0)
- {
- if(!isFinite(nLen))return false;
- if(nLen<0)return false;
- var iLetter='';
- nLen=parseInt(nLen);
- for(var i=0; i<nLen; i++)
- {
- iLetter+=ar[fRandomBy(0,ar.length-1)];
- }
- return iLetter;
- }
- return ar[fRandomBy(0,ar.length-1)];
- } // shawl.qiu code
- function fEmail()
- {
- if(fCkBrs()==1)
- {
- var range=Tl.Iframe.Document.selection.createRange();
- if(range.text!='')
- {
- var url=prompt('please enter a e-mail address', 'shawl.qiu@gmail.com');
- if(!url)return false;
- range.pasteHTML('<a href="mailto:'+url+'" class="sqMail">'+range.htmlText+'</a>');
- }
- else
- {
- Tl.Popup(Tl.Root+'html/popup_email.htm'+Tl.ReloadString, 500, 120);
- }
- }
- else
- {
- var url='';
- var temp=Tl.Iframe.Document.createElement('a');
- var range=Tl.Iframe.Window.getSelection().getRangeAt(0); // 返回 当前 range 中的内容
- var selt=Tl.Iframe.Window.getSelection();
- if(selt.toString()!='')
- {
- url=prompt('please enter an e-mail address', 'shawl.qiu@gmail.com');
- if(url)
- {
- temp.href='mailto:'+url; temp.className="sqMail";
- range.surroundContents(temp);
- }
- }
- else
- {
- Tl.Popup(Tl.Root+'html/popup_email.htm'+Tl.ReloadString, 500, 120);
- }
- } // end if
- return false;
- } // end function fEmail()
- function fLink()
- {
- var temp=Tl.Iframe.Document.createElement('a');
- var range=Tl.Iframe.Window.getSelection().getRangeAt(0); // 返回 当前 range 中的内容
- var selt=Tl.Iframe.Window.getSelection();
- if(selt.toString()!='')
- {
- var url=prompt('please enter a url', 'http://');
- if(!url)return false;
- temp.href=url; temp.className='sqUrl';
- range.surroundContents(temp);
- }
- else
- {
- Tl.Popup(Tl.Root+'html/popup_url.htm'+Tl.ReloadString, 500, 120);
- }
- }
- function fAnchor()
- {
- if(fCkBrs()==1)
- {
- var range=Tl.Iframe.Document.selection.createRange();
- var text
- if(range.text!='')
- {
- text=prompt('please enter a name for anchor', 'anchor name');
- if(!text)return false;
- range.pasteHTML('<a name="'+text+'" class="sqAnchor">'+
- range.htmlText+'</a>');
- } else Tl.Popup(Tl.Root+'html/popup_anchor.htm'+Tl.ReloadString, 500, 120);
- }
- else
- {
- var text='';
- var temp=Tl.Iframe.Document.createElement('a');
- var range=Tl.Iframe.Window.getSelection().getRangeAt(0); // 返回 当前 range 中的内容
- var selt=Tl.Iframe.Window.getSelection();
- if(selt.toString()!='')
- {
- text=prompt('please enter a name for anchor', 'anchor');
- if(text){ temp.name=text; temp.className="sqAnchor"; } else return false;
- range.surroundContents(temp);
- } else Tl.Popup(Tl.Root+'html/popup_anchor.htm'+Tl.ReloadString, 500, 120);
- } // end if
- } // end function fEmail()
- function fImg()
- {
- Tl.Popup(Tl.Root+'html/popup_image.htm'+Tl.ReloadString, 400, 200);
- }
- function fEmotion()
- {
- Tl.Popup('about:blank', 500,500);
- Tl.XmlHttp('GET', Tl.Root+'html/popup_emotion.htm'+Tl.ReloadString, fGetEmo);
- function fGetEmo(sSrc)
- {
- sSrc=sSrc.replace(/src/="/gi,'src="'+Tl.Root);
- if(oPopup)
- {
- oPopup.document.write(sSrc);
- oPopup.document.close();
- } // end if
- } // end function fGetEmo
- } // end function fEmotion
- function fStrDecode(sStr){
- if(!str)return false;
- return sStr.replace(//</;/gi,'<').
- replace(//>/;/gi,'>').
- replace(//&/;/gi,'&');
- }
- function fStrEncode(sStr){
- if(!sStr)return false;
- return sStr.replace(/[&]/g,'&').
- replace(/</g,'<').
- replace(/>/g,'>');
- }
- function fStdCase(sStr)
- {
- if(!sStr||sStr.length==0)return false;
- return sStr=sStr.replace(/<[^>]+>/g, function(match)
- {
- return match.replace(/^<[a-z0-9]+( |)|[a-z0-9]+>$|[a-z]+/=/gi,function(sub)
- {
- return sub.toLowerCase();
- } );
- }
- ) // shawl.qiu script
- } // end function fStdCase
- function fEraserAll()
- {
- if(fCkBrs()==1)
- {
- var range=Tl.Iframe.Document.selection.createRange();
- range.text=range.text;
- }
- else
- {
- var range=Tl.Iframe.Window.getSelection().getRangeAt(0); // 返回 当前 range 中的内容
- var selt=Tl.Iframe.Window.getSelection();
- if(fCkBrs()==2) selt=Tl.Iframe.Document.selection.createRange().text;
- else selt=selt.toString();
- if(selt=='')return false;
- Tl.Cmd('insertHTML', false, selt.replace(//r/n/g,'<br/>').replace(//r/g,'<br/>'));
- }
- } // end function fEraserAll
- function fFixMl(oEle)
- {
- if(!oEle)oEle=document.body;
- var atr=oEle.attributes;
- if(atr)
- for(var i=0, j=atr.length; i<j; i++)
- if(typeof oEle[atr[i].name]=='function')oEle[atr[i].name]=null;
- if(oEle.childNodes)
- for(var i=0, j=oEle.childNodes.length; i<j; i++)
- arguments.callee(oEle.childNodes[i]);
- }
- //------------------------------------end private method
- } // shawl.qiu code
- //---------------------------------end class sqEditor()---------------------------------//
- var ed = new sqEditor();