星☆空 | 对生活要知足,学习要不知足,为人处事要知不足. 卍 ♂ | ♀ 卐 - 科技以人为本.

QQ:908202921, Msn:btbtd@live.com gI.2288.oRg:88 绿色学院 - GrEeN InsTiTutE, www.btbtd.org

原创 sqEditor HTML 编辑器 for .net v1.0 By shawl.qiu收藏

sqEditor HTML 编辑器 for .net v1.0 By shawl.qiu


目录:
1. 简介
2. 调用示例
3. 编辑示例
4. js 核心代码

内容:
1. 简介


  1. sqEditor HTML 编辑器 for .net By shawl.qiu

  2. ---/--------------------------------------------------------------------------------------

  3. version 1.0

  4. 下载:
  5. http://files.myopera.com/btbtd/csharp/class/sqEditor_for_dotNet_v1.0.7z

  6. sqEditor HTML 编辑器 for .net v1.0 是 从 sqEditor HTML 编辑器 v1.3 改写而来.

  7. sqEditor HTML 编辑器 v1.3 详细:
  8. http://blog.csdn.net/btbtd/archive/2007/01/16/1484070.aspx

  9. 基本上两者编辑功能无甚区别, 
  10. 不同的是两者的运行方式. 

  11. shawl.qiu
  12. 2007-3-2
  13. http://blog.csdn.net/btbtd

  14. © 2007-2008 shawl.qiu. All rights reserved.

2. 调用示例

  1. <%@ Page Language="C#AutoEventWireup="TruevalidateRequest="false" %>
  2. <%@ import Namespace="System.Web.UI.WebControls" %>
  3. <%@ Reference Control="ac/sqEditor.ascx" %>
  4. <script runat="server">

  5.  public string EdRoot = "/sqEditor_DotNet/"; 
  6.  
  7.  void Page_Load(Object s, EventArgs e)
  8.  {
  9.   GetEditor("<b>hello</b>, test this.", edPlaceHolder, EdRoot+"ac/sqEditor.ascx",
  10.    new EventHandler(Submit));
  11.  } // end Page_Load
  12.  
  13.  public void GetEditor(string inti, PlaceHolder edPlaceHolder, string edPath, EventHandler eh)
  14.  {
  15.   sqEditor ed = (sqEditor)LoadControl(edPath); 
  16.    ed.EdRoot = EdRoot;
  17.    ed.EdIntiText = inti;
  18.    ed.SubmitEventHandler = eh;
  19.    
  20.    edPlaceHolder.Controls.Add(ed);
  21.  }
  22.  
  23.  public void Submit(Object s, EventArgs e)
  24.  {
  25.   TextBox edTextBox =
  26.    (TextBox)((Button)s).Parent.FindControl("edTextBox");
  27.    
  28.   HtmlGenericControl edIntiDiv =
  29.    (HtmlGenericControl)((Button)s).Parent.FindControl("edIntiDiv");
  30.  
  31.   edIntiDiv.InnerHtml = edTextBox.Text;
  32.   
  33.   if(edTextBox == nullreturn;
  34.   
  35.   debugLabel.Text = edTextBox.Text;
  36.  }
  37. </script>
  38. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  39. <html xmlns="http://www.w3.org/1999/xhtml">
  40. <head>
  41. <meta http-equiv="Content-Typecontent="text/html; charset=utf-8" />
  42. <title>shawl.qiu template</title>
  43. <style type="text/css">
  44. /*<![CDATA[*/
  45.  @import "<% Response.Write(EdRoot); %>style/style.css";
  46.  /*]]>*/
  47. </style>
  48. </head>
  49. <body>
  50.  <form runat="server">
  51.   <asp:Label id=debugLabel runat=server
  52.    />
  53.   <div class="sqEditorDiv">
  54.    <asp:PlaceHolder id=edPlaceHolder runat=server 
  55.     />
  56.   </div>
  57.  </form>
  58.   <p/><href="?">--back--</a>
  59. </body>
  60. </html>


3. 编辑示例

  1. <%@ Page Language="C#AutoEventWireup="TruevalidateRequest="false" %>
  2. <%@ import Namespace="System.Data" %>
  3. <%@ import Namespace="System.Data.OleDb" %>
  4. <%@ import Namespace="System.IO" %>
  5. <%@ import Namespace="System.Text" %>
  6. <%@ import Namespace="System.Web.UI.WebControls" %>
  7. <%@ Assembly src="cs/Pagination.cs" %>
  8. <%@ Assembly src="cs/SQ.cs" %>
  9. <%@ import Namespace="SQ" %>
  10. <%@ Reference Control="ac/sqEditor.ascx" %>
  11. <script runat="server">

  12.  public bool Debug = false;
  13.  
  14.  public string EdRoot = "/sqEditor_DotNet/"; 
  15.  public string ReqIdStr = HttpContext.Current.Request.QueryString["id"]+"";
  16.  public string ReqAidStr = HttpContext.Current.Request.QueryString["aid"]+"";
  17.  
  18.  void Page_Load(Object s, EventArgs e)
  19.  {
  20.   string SqlCnnStr;
  21.    SqlCnnStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+
  22.    @MapPath(EdRoot+"/data/shawlqiu.mdb");
  23.    
  24.   string SqlQuery;
  25.    SqlQuery = "select * from shawlqiu_";
  26.  
  27.   acDebugLabel.Text = "";
  28.   acInfoLabel.Text = "";
  29.  
  30.   switch(ReqIdStr)
  31.   {
  32.    case "addnew":
  33.     AddNewBox();
  34.     break;
  35.     
  36.    case "edit":
  37.     SqlQuery+=" where articleid = "+ReqAidStr;
  38.     EditBox(SqlQuery, SqlCnnStr, acInfoLabel);
  39.     break;
  40.     
  41.    case "display":
  42.     SqlQuery+=" where articleid = "+ReqAidStr;
  43.     acDisplayAtDataList.DataSource = Datum.GetDataTable(SqlQuery, SqlCnnStr);
  44.     acDisplayAtDataList.DataBind();
  45.     break;
  46.     
  47.    default:
  48.     SqlQuery+=" order by articleid desc";
  49.     DisplayList(Datum.GetDataTable(SqlQuery, SqlCnnStr, "hello"), acDataList);
  50.     break;
  51.   }
  52.   
  53.  } // end Page_Load
  54.  
  55.  private void EditBox(string qry, string cnn, Label InfoLabel)
  56.  {
  57.   DataTable dt = Datum.GetDataTable(qry, cnn);
  58.   
  59.   string cnt = "";
  60.   
  61.   if(dt.Rows.Count==0)
  62.   {
  63.    Utility.GoBack("查询出错, 3 秒后返回, 还有 ", 3, true, InfoLabel);
  64.    return;
  65.   }
  66.   Literal ltl = new Literal();
  67.    ltl.Text = "<h3 class='fltr algr'>编辑数据 <a href='?id=display&aid="+
  68.     HttpContext.Current.Request.QueryString["aid"]+"'>Go Article</a></h3>title: ";
  69.    edPlaceHolder.Controls.Add(ltl);
  70.    
  71.   TextBox tbx = new TextBox();
  72.    tbx.ID = "acTitle";
  73.    tbx.Columns = 80;
  74.    tbx.Text = dt.Rows[0]["title"]+"";
  75.    edPlaceHolder.Controls.Add(tbx);
  76.   
  77.   GetEditor(
  78.    System.Text.Encoding.Unicode.GetString((byte[])dt.Rows[0]["content"])
  79.     edPlaceHolder, EdRoot+"ac/sqEditor.ascx",
  80.    new EventHandler(SubmitEdit));
  81.  } 
  82.  
  83.  public void SubmitEdit(Object s, EventArgs e)
  84.  {
  85.   bool debug = false;
  86.   
  87.   TextBox edTextBox =
  88.    (TextBox)((Button)s).Parent.FindControl("edTextBox");
  89.    
  90.   TextBox titleTextBox =
  91.    (TextBox)edPlaceHolder.FindControl("acTitle");
  92.    
  93.   HtmlGenericControl edIntiDiv =
  94.    (HtmlGenericControl)((Button)s).Parent.FindControl("edIntiDiv");
  95.  
  96.   edIntiDiv.InnerHtml = edTextBox.Text;
  97.   
  98.   if(edTextBox == nullreturn;
  99.   
  100.   if((debug|Debug)&acDebugLabel!=null)
  101.   {
  102.    acDebugLabel.Text += "<li/>titleTextBox.Text: "+titleTextBox.Text;
  103.    acDebugLabel.Text += "<li/>titleTextBox.Text==\"\": "+(titleTextBox.Text=="");
  104.    
  105.    acDebugLabel.Text += "<li/>edTextBox.Text: "+edTextBox.Text;
  106.    acDebugLabel.Text += "<li/>edTextBox.Text==\"\": "+(edTextBox.Text=="");
  107.   }
  108.   
  109.   if(titleTextBox.Text=="")
  110.   {
  111.    acInfoLabel.Text += "<li/>标题不能为空! 操作被取消.";
  112.    return;
  113.   }
  114.   
  115.   if(edTextBox.Text=="")
  116.   {
  117.    edTextBox.Text += "<li/>内容不能为空! 操作被取消.";
  118.    return;
  119.   }
  120.   
  121.   string SqlCnnStr;
  122.    SqlCnnStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+
  123.    @MapPath(EdRoot+"/data/shawlqiu.mdb");

  124.   OleDbConnection oCnn = new OleDbConnection(SqlCnnStr);
  125.   OleDbCommand oCmd = new OleDbCommand("update shawlqiu_ set title="+
  126.    "@title, content=@content where articleid="+ReqAidStr, oCnn);
  127.   
  128.   OleDbParameter oParamTitle = new OleDbParameter("@title", "OleDbType.Varchar");
  129.   oParamTitle.Value = titleTextBox.Text+"";
  130.   oCmd.Parameters.Add(oParamTitle);
  131.   
  132.   OleDbParameter oParamContent = new OleDbParameter("@content", "OleDbType.Binary");
  133.   oParamContent.Value = edTextBox.Text+"";
  134.   oCmd.Parameters.Add(oParamContent)
  135.    
  136.   oCnn.Open();
  137.   oCmd.ExecuteNonQuery();
  138.   oCnn.Close();
  139.    
  140.   Utility.GoBack("数据已更新, 3 秒后返回, 还有 ", 3, true, acInfoLabel);
  141.  }

  142.  private void AddNewBox()
  143.  {
  144.   Literal ltl = new Literal();
  145.    ltl.Text = "<h3 class='fltr algr'>添加数据</h3>title: ";
  146.    edPlaceHolder.Controls.Add(ltl);
  147.    
  148.   TextBox tbx = new TextBox();
  149.    tbx.ID = "acTitle";
  150.    tbx.Columns = 80;
  151.    edPlaceHolder.Controls.Add(tbx);
  152.   
  153.   GetEditor("add new article", edPlaceHolder, EdRoot+"ac/sqEditor.ascx",
  154.    new EventHandler(SubmitNew));
  155.  }
  156.  
  157.  public void SubmitNew(Object s, EventArgs e)
  158.  {
  159.   bool debug = false;
  160.   
  161.   TextBox edTextBox =
  162.    (TextBox)((Button)s).Parent.FindControl("edTextBox");
  163.    
  164.   TextBox titleTextBox =
  165.    (TextBox)edPlaceHolder.FindControl("acTitle");
  166.    
  167.   HtmlGenericControl edIntiDiv =
  168.    (HtmlGenericControl)((Button)s).Parent.FindControl("edIntiDiv");
  169.  
  170.   edIntiDiv.InnerHtml = edTextBox.Text;
  171.   
  172.   if(edTextBox == nullreturn;
  173.   
  174.   if((debug|Debug)&acDebugLabel!=null)
  175.   {
  176.    acDebugLabel.Text += "<li/>titleTextBox.Text: "+titleTextBox.Text;
  177.    acDebugLabel.Text += "<li/>titleTextBox.Text==\"\": "+(titleTextBox.Text=="");
  178.    
  179.    acDebugLabel.Text += "<li/>edTextBox.Text: "+edTextBox.Text;
  180.    acDebugLabel.Text += "<li/>edTextBox.Text==\"\": "+(edTextBox.Text=="");
  181.   }
  182.   
  183.   if(titleTextBox.Text=="")
  184.   {
  185.    acInfoLabel.Text += "<li/>标题不能为空! 操作被取消.";
  186.    return;
  187.   }
  188.   
  189.   if(edTextBox.Text=="")
  190.   {
  191.    edTextBox.Text += "<li/>内容不能为空! 操作被取消.";
  192.    return;
  193.   }
  194.   string SqlCnnStr;
  195.    SqlCnnStr = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+
  196.    @MapPath(EdRoot+"/data/shawlqiu.mdb");

  197.   OleDbConnection oCnn = new OleDbConnection(SqlCnnStr);
  198.   OleDbCommand oCmd = new OleDbCommand("insert into shawlqiu_(title, content) "+
  199.    "values(@title, @content)", oCnn);
  200.   
  201.   OleDbParameter oParamTitle = new OleDbParameter("@title", "OleDbType.Varchar");
  202.   oParamTitle.Value = titleTextBox.Text+"";
  203.   oCmd.Parameters.Add(oParamTitle);
  204.   
  205.   OleDbParameter oParamContent = new OleDbParameter("@content", "OleDbType.Binary");
  206.   oParamContent.Value = edTextBox.Text+"";
  207.   oCmd.Parameters.Add(oParamContent)
  208.    
  209.   oCnn.Open();
  210.   oCmd.ExecuteNonQuery();
  211.   oCnn.Close();
  212.   
  213.   Utility.GoBack("数据已添加, 3 秒后返回, 还有 ", 3, "?", acInfoLabel);
  214.  }
  215.  
  216.  private void DisplayList(DataTable dt, DataList acDataList)
  217.  {
  218.   Pagination Paged=new Pagination();
  219.    Paged.Debug=false;                      // 是否为调试模式
  220.    Paged.DebugLabel=acDebugLabel;         // 显示调试信息的 Label
  221.    Paged.NavigatorLabel=acPagedLabel;     // 显示主导航条的 Label
  222.    Paged.DetailsLabel=acPagedDetailsLabel;// 显示分页明细的 Label
  223.    Paged.PageSize=20;                      // 每页大小 
  224.    Paged.Go(dt, acDataList);              // 执行分页
  225.    Paged=null;
  226.  }
  227.  
  228.  public void GetEditor(string inti, PlaceHolder edPlaceHolder, string edPath, EventHandler eh)
  229.  {
  230.   sqEditor ed = (sqEditor)LoadControl(edPath);
  231.    
  232.    ed.Debug = Debug;
  233.    
  234.    ed.EdRoot = EdRoot;
  235.    ed.EdIntiText = inti;
  236.    ed.SubmitEventHandler = eh;
  237.    
  238.    edPlaceHolder.Controls.Add(ed);
  239.  }
  240. </script>
  241. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  242. <html xmlns="http://www.w3.org/1999/xhtml">
  243. <head>
  244. <meta http-equiv="Content-Typecontent="text/html; charset=utf-8" />
  245. <title>shawl.qiu template</title>
  246. <style type="text/css">
  247. /*<![CDATA[*/
  248.  @import "<% Response.Write(EdRoot); %>style/style.css";
  249.  /*]]>*/
  250. </style>
  251. </head>
  252. <body>
  253. <div class="Main">
  254.  <form runat="server">
  255.   <asp:Label id=acDebugLabel runat=server
  256.    />
  257.   <div class="info corRed">
  258.    <asp:Label id=acInfoLabel runat=server
  259.     />
  260.   </div>
  261.   <div class="navigator">
  262.    <span class="fltr algr">
  263.     <href="?id=addnew">addnew</a>
  264.    </span>
  265.    <h2><href="?">sqEditor HTML 编辑器 for .net</a></h2>
  266.   </div
  267.   <div class="algc">
  268.    <div class="pagedList">
  269.     <asp:Label id=acPagedLabel runat=server 
  270.      />
  271.    </div>
  272.    <div class="pagedDetails">
  273.     <asp:Label id=acPagedDetailsLabel runat=server 
  274.      />
  275.    </div>
  276.   </div>
  277.   <div class="acMain">
  278.    <asp:DataList id="acDisplayAtDataList"
  279.     BorderColor="black"
  280.     CellPadding="5"
  281.     CellSpacing="5"
  282.     RepeatDirection="Horizontal"
  283.     RepeatLayout="Flow"
  284.     RepeatColumns="10"
  285.     ShowBorder="True"
  286.     runat="server">
  287.   
  288.     <HeaderTemplate>
  289.      <ol class="acOlList">
  290.     </HeaderTemplate>
  291.     
  292.     <HeaderStyle BackColor="#aaaadd">
  293.     </HeaderStyle>
  294.    
  295.     <AlternatingItemStyle>
  296.     </AlternatingItemStyle>
  297.      
  298.     <ItemTemplate
  299.      <li>
  300.       <span class="algr fltr">
  301.        <href="?id=edit&aid=<%# DataBinder.Eval(Container.DataItem, "articleid") %>">
  302.         edit
  303.        </a>
  304.        </span>
  305.       <href="?id=display&aid=<%# DataBinder.Eval(Container.DataItem, "articleid") %>">
  306.        <%# DataBinder.Eval(Container.DataItem, "title") %>
  307.       </a>
  308.       <div class="text">
  309.        <%# 
  310.         System.Text.Encoding.Unicode.GetString(
  311.          (byte[])DataBinder.Eval(Container.DataItem, "content")
  312.         ) 
  313.        %>
  314.       </div>
  315.      </li
  316.     </ItemTemplate>
  317.  <%--
  318.     <SeparatorTemplate
  319.     </SeparatorTemplate>
  320.  --%>
  321.     <FooterTemplate>
  322.      </ol>
  323.     </FooterTemplate>
  324.    </asp:DataList>
  325.    
  326.    <asp:DataList id="acDataList"
  327.     BorderColor="black"
  328.     CellPadding="5"
  329.     CellSpacing="5"
  330.     RepeatDirection="Horizontal"
  331.     RepeatLayout="Flow"
  332.     RepeatColumns="10"
  333.     ShowBorder="True"
  334.     runat="server">
  335.   
  336.     <HeaderTemplate>
  337.      <ol class="acOlList">
  338.     </HeaderTemplate>
  339.     
  340.     <HeaderStyle BackColor="#aaaadd">
  341.     </HeaderStyle>
  342.    
  343.     <AlternatingItemStyle>
  344.     </AlternatingItemStyle>
  345.      
  346.     <ItemTemplate
  347.      <li>
  348.       <span class="algr fltr">
  349.        <href="?id=edit&aid=<%# DataBinder.Eval(Container.DataItem, "articleid") %>">
  350.         edit
  351.        </a>
  352.        </span>
  353.       <href="?id=display&aid=<%# DataBinder.Eval(Container.DataItem, "articleid") %>">
  354.        <%# DataBinder.Eval(Container.DataItem, "title") %>
  355.       </a>
  356.      </li
  357.     </ItemTemplate>
  358.  <%--
  359.     <SeparatorTemplate
  360.     </SeparatorTemplate>
  361.  --%>
  362.     <FooterTemplate>
  363.      </ol>
  364.     </FooterTemplate>
  365.    </asp:DataList>
  366.   </div
  367.    
  368.   <div class="sqEditorDiv">
  369.    <asp:PlaceHolder id=edPlaceHolder runat=server 
  370.     />
  371.   </div>
  372.  </form>
  373. </div>
  374.   <p/><href="?">--back--</a>
  375. </body>
  376. </html>


4. js 核心代码

  1.  // sqEditor -- shawl.qiu script : shawl.qiu@gmail.com 
  2.  
  3.  /*-----------------------------------------------------------------------------------*\
  4.   * sqEditor HTML 编辑器 for .net v1.0
  5.  \*-----------------------------------------------------------------------------------*/
  6.     //---------------------------------begin class sqEditor()-------------------------------//
  7.  function sqEditor()
  8.  { // shawl.qiu code
  9.   //------------------------------------begin public variable
  10.   //---------------begin about
  11.   this.auSubject='sqEditor HTML 编辑器 for .net';
  12.   this.auVersion='v1.0';
  13.   this.au='shawl.qiu';
  14.   this.auEmail='shawl.qiu@gmail.com';
  15.   this.auBlog='http://blog.csdn.net/btbtd';
  16.   this.auCreateDate='2007-2-29';
  17.   //---------------end about
  18.   
  19.   this.Debug = false;
  20.   
  21.   this.Root = "/sqEditor_DotNet/";
  22.   
  23.   this.Iframe = function(){}
  24.   this.Iframe.Id = "ifm";
  25.   this.Iframe.Window = "";
  26.   this.Iframe.Document = "";
  27.   
  28.   this.SubmitId = "submId";
  29.   
  30.   this.ContentTextBoxId = "ctbId";
  31.   this.IntiTextDivId = "itdId";
  32.   
  33.   this.ReloadString = "";
  34.   
  35.   this.MaxLength = 200000;
  36.   this.MinLength = 13;
  37.   
  38.   this.Word = function(){}
  39.   
  40.   this.Word.ModeTrue = "Go Design Mode";
  41.   this.Word.ModeFalse = "Go Source Mode";
  42.   
  43.   this.Word.Submit = "现在提交数据?";
  44.   this.Word.Reset = "现在重置?";
  45.   
  46.   this.Word.Submitting = "正在提交数据, 请稍候...";
  47.   this.Word.Upsize = "数据过长, 请重新编辑. 最多为: "+this.MaxLength+" 字.";
  48.   this.Word.ShortSize = "数据过短, 请重新编辑. 最小长度为: "+this.MinLength+" 字.";
  49.   //------------------------------------end public variable
  50.   
  51.   //------------------------------------begin private variable
  52.   var Tl = this;
  53.   
  54.   var IntiTextDivObj;
  55.   var ContentTextBoxObj;
  56.   
  57.   var EdMode = true;
  58.   var ReloadMode = false;
  59.   //------------------------------------end private variable
  60.   
  61.   //------------------------------------begin public method
  62.   this.Inti = fInti;  
  63.   this.Submit = fSubmit;
  64.   this.SubmitHandler = fSubmitHandler; 
  65.   this.Mode = fMode;
  66.   this.Cmd = fCmd;
  67.   this.XmlHttp = fXmlHttp;
  68.   this.Select = fSelect;
  69.   this.Popup= fPopup;
  70.   this.Reload = fReload;
  71.   this.Preview = fPreview;
  72.   this.Source = fSource;
  73.   //------------------------------------end public method
  74.  
  75.   //------------------------------------begin private method
  76.   
  77.   function fSource(){
  78.    Tl.Popup('about:blank');
  79.    oPopup.document.write('<meta http-equiv="Content-Type" content="text/html;'+
  80.    ' charset=utf-8" />');
  81.    var str=Tl.Iframe.Document.body.innerHTML;
  82.    switch(navigator.appName)
  83.    {
  84.     case 'Opera': 
  85.      str=str.replace(/<br(\/|)>/gi,'<br/>\r\n');
  86.      str=fStrEncode(str);
  87.      oPopup.document.write('<xmp><div id="sqEditorMain" class="sqEditorMain">\n',
  88.      fStdCase(str),'</div></xmp>'); break
  89.     case 'Netscape':
  90.      str=str.replace(/<br(\/|)>/gi,'<br/>\r\n');
  91.      str='<div id="sqEditorMain" class="sqEditorMain">\n'+str+'</div>';
  92.      str=fStrEncode(str);
  93.      oPopup.document.write('<pre>'+fStdCase(str)+'</pre>')break
  94.     defaultstr=str.replace(/(<br(\/|)>)/gi,'<br/>\n');
  95.      oPopup.document.write('<xmp><div id="sqEditorMain" class="sqEditorMain">\n',
  96.      fStdCase(str),'</div></xmp>');
  97.    }
  98.    oPopup.document.close();
  99.   } // end function fSource
  100.   
  101.   function fPreview()
  102.   {
  103.    Tl.Popup('about:blank');
  104.    oPopup.document.write(Tl.Iframe.Document.body.innerHTML);
  105.    oPopup.document.close();
  106.    return false;
  107.   }
  108.   
  109.   function fSubmitHandler()
  110.   {
  111.    var btn = document.getElementById(Tl.SubmitId);
  112.    if(btn==null)return false;
  113.     
  114.    btn.click();
  115.    return false;
  116.   }
  117.   
  118.   function fReload()
  119.   {
  120.    if(ReloadMode)Tl.ReloadString='?id='+fRandomLetter(10);
  121.    location.replace(document.URL);
  122.    ReloadMode=true;
  123.    return false;
  124.   }
  125.   
  126.   function fSelect(obj, e)
  127.   {
  128.    if(!e)var e=window.event;
  129.    var ele=e.target||e.srcElement
  130.    
  131.    var iPsti = fGetEleOffsetPsti(ele);
  132.    
  133.     fHidEle(obj); //--
  134.     
  135.     obj.style.width=ele.offsetWidth+'px';
  136.     obj.style.left=iPsti+'px';
  137.     obj.style.top=ele.offsetTop+ele.offsetHeight+'px';
  138.     
  139.    if(obj.childNodes[0].className=='sqEditorCssBorder')return true;
  140.    
  141.    for(var i=0; i<obj.childNodes.length; i++)
  142.    {
  143.     if(obj.childNodes[i].nodeType==1)
  144.     {
  145.      obj.childNodes[i].className='sqEditorCssBorder';
  146.      obj.childNodes[i].style.width=obj.style.width;
  147.      switch(obj.id)
  148.      {
  149.       case 'sqDdFontsize':
  150.        obj.childNodes[i].onclick=function()
  151.        {
  152.         Tl.Cmd('formatBlock', false, this.childNodes[0].nodeName.toLowerCase());
  153.         fHidEle(this.parentNode); //--
  154.         ele.innerHTML=this.childNodes[0].nodeName;
  155.         return false;
  156.        }
  157.        break;
  158.        
  159.        case 'sqDdBgColor':
  160.        obj.childNodes[i].onclick=function()
  161.        {
  162.         ele.style.backgroundColor=this.innerHTML;
  163.         ele.style.color=this.style.color;
  164.         Tl.Cmd('hiliteColor', false, this.innerHTML);
  165.         fHidEle(this.parentNode); //--
  166.         return false;
  167.        }
  168.        break;
  169.         
  170.        case 'sqDdFgColor':
  171.        obj.childNodes[i].onclick=function()
  172.        {
  173.         ele.style.backgroundColor=this.innerHTML;
  174.         ele.style.color=this.style.color;
  175.         Tl.Cmd('ForeColor', false, this.innerHTML);
  176.         fHidEle(this.parentNode); //--
  177.         return false;
  178.        }
  179.        break;
  180.         
  181.        case 'sqDdFormatBlock':
  182.        obj.childNodes[i].onclick=function()
  183.        {
  184.         Tl.Cmd('formatBlock', false, this.innerHTML);
  185.         fHidEle(this.parentNode); //--
  186.         ele.innerHTML=this.innerHTML;
  187.         return false;
  188.        }
  189.        break
  190.      } // end switch
  191.     } // end if
  192.    } // end for
  193.    
  194.    return false;
  195.    
  196.    function fHidEle(obj){
  197.     obj.style.display=='none'?obj.style.display='block':obj.style.display='none';
  198.    } // end function fHidEle
  199.    
  200.   } // end function fSimulation
  201.   
  202.   function fCmd(sCmd, bOpt, sVal)
  203.   {
  204.    if(!sCmd)return false;
  205.    if(!bOpt)var bOpt=false;
  206.    if(!sVal)var sVal=null;
  207.    
  208.    switch(sCmd){
  209.     case 'pre': 
  210.      fPre();
  211.      return false;
  212.     case 'formatBlock':
  213.      if(sVal!='h1'&&sVal!='h2'&&sVal!='h3'&&sVal!='h5'&&sVal!='h5'&&sVal!='h6')
  214.      {
  215.       fPadTag(sVal);
  216.       return false;
  217.      }
  218.      break;
  219.     case 'emptyAll':
  220.      if(sVal==null)sVal='确实要清空内容吗?'
  221.      if(confirm(sVal))
  222.       Tl.Iframe.Document.body.innerHTML='&nbsp;'
  223.      return false;
  224.     case 'email':
  225.      fEmail();
  226.      return false;
  227.     case 'anchor': 
  228.      fAnchor();
  229.      return false;
  230.     case 'emotion': 
  231.      fEmotion();
  232.      return false;
  233.     case 'eraserAll':
  234.      fEraserAll();
  235.      return false;
  236.    } // end switch 
  237.    
  238.    if(fCkBrs()!=1)
  239.    {
  240.     switch(sCmd)
  241.     {
  242.       case 'createLink':
  243.        fLink();
  244.        return false;
  245.       case 'insertImage':
  246.        fImg();
  247.        return false;
  248.      }
  249.    } // end if
  250.    
  251.    if(fCkBrs()==1){
  252.     switch(sCmd)
  253.     {
  254.      case 'insertOrderedList': 
  255.       fOrderListForIe('ol');
  256.       return false;
  257.      case 'insertUnorderedList':
  258.       fOrderListForIe('ul');
  259.       return false;
  260.      case 'hiliteColor':
  261.       sCmd='BackColor'; 
  262.       break;
  263.      case 'insertHTML': 
  264.       fIeInsertHtml(sVal);
  265.       return false;
  266.      case 'InsertImage': 
  267.       Tl.Cmd('insertHTML', false
  268.        '<img src="'+sVal+'" class="sqImg" />');
  269.       return false;
  270.      case 'formatBlock':
  271.       if(sVal=='h1'||sVal=='h2'||sVal=='h3'||sVal=='h4'||sVal=='h5'||sVal=='h6')
  272.        sVal='<'+sVal+'>';
  273.       break;
  274.     } // end switch
  275.    } // end if
  276.    
  277.    Tl.Iframe.Document.execCommand(sCmd, bOpt, sVal);
  278.    return false;
  279.   }
  280.   
  281.   function fMode(){
  282.    var debug = false;
  283.    var dbs = "";
  284.    var EdBtn = document.getElementById('sqBtnMode');
  285.    
  286.    if(EdMode)
  287.    {
  288.     EdBtn.innerHTML = Tl.Word.ModeTrue;
  289.     
  290.     if(navigator.appName == "Netscape")
  291.     {
  292.      Tl.Iframe.Document.body.innerHTML=Tl.Iframe.Document.body.innerHTML.
  293.       replace(/<pre>[\s\S]*?<\/pre>/gi,
  294.       function(match)
  295.       {
  296.        return match.replace(/\r/gi,'<br>')
  297.       });
  298.       
  299.      var TempTextNode=document.createTextNode(Tl.Iframe.Document.body.innerHTML.
  300.       replace(/(<br(?:\/|)>)/gi,'$1\r'));
  301.       Tl.Iframe.Document.body.innerHTML='';
  302.       Tl.Iframe.Document.body.appendChild(TempTextNode)TempTextNode=null;
  303.       Tl.Iframe.Document.body.innerHTML=Tl.Iframe.Document.body.innerHTML.
  304.        replace(/\r/gi,'<br/>\r');
  305.     }
  306.     else
  307.     {
  308.      Tl.Iframe.Document.body.innerText=Tl.Iframe.Document.body.innerHTML.replace(/\n|\r/g,'').
  309.       replace(/<pre>[\s\S]*?<\/pre>/gi,
  310.       function(match){ return match.replace(/<br(\/|)>/gi,'\n'); });
  311.     
  312.      Tl.Iframe.Document.body.innerHTML=Tl.Iframe.Document.body.innerHTML.
  313.      replace(/(\&lt\;BR(?:\/|)\&gt\;)/gi,'$1<br/>'); 
  314.     } // end if 1
  315.     
  316.     EdMode = false;
  317.    }
  318.    else
  319.    {
  320.     EdBtn.innerHTML = Tl.Word.ModeFalse;
  321.     
  322.     if(navigator.appName == "Netscape")
  323.     {
  324.      Tl.Iframe.Document.body.innerHTML=Tl.Iframe.Document.body.innerHTML.replace(/\n|\r/g,'');
  325.       Tl.Iframe.Document.body.innerHTML=Tl.Iframe.Document.body.innerHTML.
  326.       replace(/\&lt\;pre\&gt\;[\s\S]+\&lt\;\/pre&gt\;/gi,
  327.        function(match){ return match.replace(/<br>/gi,'\r'); })
  328.      var html = Tl.Iframe.Document.body.ownerDocument.createRange();
  329.       html.selectNodeContents(Tl.Iframe.Document.body);
  330.       Tl.Iframe.Document.body.innerHTML=html.toString();
  331.       html=null;
  332.     }
  333.     else
  334.     {
  335.      Tl.Iframe.Document.body.innerHTML=Tl.Iframe.Document.body.innerText.
  336.       replace(/<pre.*?>[\s\S]*?<\/pre>/gi,function(match)
  337.       {
  338.        return match.replace(/\n/g,'<br/>')
  339.       }); 
  340.     } // end if 1
  341.     
  342.     EdMode = true;
  343.    } // end if
  344.    if(debug||Tl.Debug)
  345.    {
  346.     dbs += "\nEdMode: "+EdMode;
  347.     alert(dbs);
  348.    }
  349.    return false;
  350.   } // end function fMode 
  351.   
  352.   function fSubmit()
  353.   {
  354.    var debug = false;
  355.    var dbs = "";
  356.    
  357.    var oEd=document.getElementById(Tl.Iframe.Id);
  358.    var oTemp=document.createElement('div');
  359.     oTemp.id='sqPosting';
  360.     oTemp.style.backgroundColor='yellow';
  361.     oTemp.style.color='black';
  362.     oTemp.innerHTML= Tl.Word.Submitting;
  363.     oEd.parentNode.insertBefore(oTemp, oEd);
  364.     oEd=null;
  365.     oTemp=null;

  366.    if(!EdMode)
  367.    {
  368.     Tl.Mode();
  369.     EdMode=true;
  370.    }
  371.    
  372.    fAtcLink(Tl.Iframe.Document.body, Tl.Iframe.Document);
  373.    
  374.    if(!confirm(Tl.Word.Submit))
  375.    {
  376.     fCancel("sqPosting");
  377.     return false;
  378.    }
  379.    
  380.    if(Tl.Iframe.Window == nullreturn false;
  381.    if(ContentTextBoxObj == nullreturn false;
  382.    
  383.    var ifmHtml = Tl.Iframe.Document.body.innerHTML;
  384.       
  385.    if(Tl.Debug||debug)
  386.    {
  387.     dbs += "\ndebug submit:";
  388.     //dbs += "\nifmHtml: "+ifmHtml;
  389.     dbs += "\n ifmHtml.length: "+ifmHtml.length;
  390.     dbs += "\n typeof(ifmHtml.length): "+typeof(ifmHtml.length);
  391.     dbs += "\n ifmHtml.length: "+ifmHtml.length;
  392.     dbs += "\n typeof(Tl.MinLength): "+typeof(Tl.MinLength);
  393.     dbs += "\n Tl.MinLength: "+Tl.MinLength;
  394.      
  395.     alert(dbs);
  396.    }
  397.    
  398.    if(ifmHtml.length>Tl.MaxLength)
  399.    {
  400.     alert(Tl.Word.Upsize);
  401.     fCancel("sqPosting");
  402.     return false;
  403.    }
  404.       
  405.    if(ifmHtml.length<Tl.MinLength)
  406.    {
  407.     alert(Tl.Word.ShortSize);
  408.     fCancel("sqPosting");
  409.     return false;
  410.    }
  411.    
  412.    ContentTextBoxObj.value = ifmHtml;
  413.    return true;
  414.   } // end function fSubmit
  415.   
  416.   function fCancel(sId)
  417.   {
  418.    try
  419.    {
  420.     var oEd=document.getElementById(sId);
  421.     oEd.parentNode.removeChild(oEd);
  422.     oEd=null;     
  423.    } 
  424.    catch(e){}
  425.   } // end function fCancel
  426.   
  427.   function fAtcLink(obj, dcu)
  428.   {
  429.    if(!EdMode) return false;
  430.    var temp, str='', span;
  431.    for(var i=0, j=obj.childNodes.length; i<j; i++)
  432.    {
  433.     temp=obj.childNodes[i];
  434.     if(temp.nodeType==3)
  435.     {
  436.      if(temp.parentNode.nodeName=='A')return false;
  437.      if(temp.data.indexOf('http')<0&&temp.data.indexOf('ftp')<0&&
  438.       temp.data.indexOf('@')<0)continue;
  439.       
  440.      span=dcu.createElement('span');
  441.      //str=temp.data.replace(/</g,'&lt;').replace(/>/g,'&gt;');
  442.      str=fStrEncode(temp.data);
  443.      str=str.replace(/(ht|f)tp(s|)\:\/\/[\-\w.:]+(\/[^ \n\r\'\"]+|)/gi,function(match)
  444.      {
  445.       return '<a href="'+match+'" class="sqUrl">'+match+'</a>'; } );
  446.        
  447.      str=str.replace(/[\w.]+@[\w\-.]+(\/[^ \n\r\'\"]+|)/gi,function(match)
  448.      {
  449.       return '<a href="mailto:'+match+'" class="sqMail">'+match+'</a>'; 
  450.      });
  451.       
  452.      span.innerHTML=str;
  453.      obj.replaceChild(span, temp);
  454.     } 
  455.     if(temp.nodeType==1)arguments.callee(obj.childNodes[i], dcu);
  456.    } temp=span=null;
  457.   } // end function fAtcLink
  458.   
  459.   function fInti()
  460.   {
  461.    try
  462.    {
  463.     var sbmBtn = document.getElementById(Tl.SubmitId);
  464.     if(sbmBtn==null)return false;
  465.     var clkTemp = sbmBtn.onclick;
  466.     
  467.     sbmBtn.onclick=function()
  468.     {
  469.      try{clkTemp();}catch(e){}
  470.      return Tl.Submit();
  471.     }
  472.     
  473.     Tl.Iframe.Window=document.getElementById(Tl.Iframe.Id).contentWindow;
  474.     Tl.Iframe.Document=Tl.Iframe.Window.document;
  475.     
  476.     ContentTextBoxObj = document.getElementById(Tl.ContentTextBoxId)
  477.   
  478.     Tl.IntiTextDivObj=document.getElementById(Tl.IntiTextDivId)
  479.     if(Tl.IntiTextDivObj!=nullTl.IntiTextDivObj=Tl.IntiTextDivObj.innerHTML;
  480.     
  481.     Tl.Iframe.Document.designMode="on";
  482.     Tl.Iframe.Document.contentEditable=true;
  483.     Tl.Iframe.Document.open();
  484.     
  485.     if(!Tl.IntiTextDivObj) Tl.Iframe.Document.write('--------&nbsp;');
  486.     else Tl.Iframe.Document.write(Tl.IntiTextDivObj);
  487.     
  488.     Tl.Iframe.Document.close();
  489.     
  490.     try
  491.     {
  492.      var oTemp=onunload;
  493.      
  494.      onunload=function()
  495.      {
  496.       try{oTemp();}catch(e){} 
  497.       fFixMl(); 
  498.      } // end onunload
  499.     } 
  500.     catch(e) {}
  501.    } 
  502.    catch(e)
  503.    {
  504.    }
  505.   } // end function fInti
  506.   
  507.   function fCkBrs()
  508.   {
  509.    switch (navigator.appName)
  510.    {
  511.     case 'Opera': return 2;
  512.     case 'Netscape': return 3;
  513.     defaultreturn 1;
  514.    }
  515.   } // end function fCkBrs
  516.   
  517.   function fOrderListForIe(sMarkup)
  518.   {
  519.    var sAr = [];
  520.    var sTemp = "";
  521.    
  522.    var oRange = Tl.Iframe.Document.selection.createRange();
  523.    if(oRange.text != '')
  524.    {
  525.     sAr = oRange.text.split('\n');
  526.     for(var i=0; i<sAr.length; i++)
  527.      sTemp += '<li>'+sAr[i].replace(/</g,'&lt;').replace(/>/g,'&gt;')+'</li>';
  528.      sTemp = '<'+sMarkup+' class="sqList">'+sTemp+'</'+sMarkup+'>';
  529.     oRange.pasteHTML(sTemp);
  530.    }
  531.   } // end function fOrderListForIe
  532.   
  533.   function fPre()
  534.   { 
  535.    if(fCkBrs()==1)
  536.    {
  537.     var range=Tl.Iframe.Document.selection.createRange();
  538.     var str=range.text;
  539.     if(str!='')
  540.     {
  541.      range.pasteHTML('<pre class="sqPre">'+str+'</pre>');
  542.     } 
  543.     else 
  544.     {
  545.      fPopup(Tl.Root+'html/popup_pre.htm'+Tl.ReloadString); // end if 1
  546.     }
  547.    } 
  548.    else 
  549.    {
  550.     var range = Tl.Iframe.Window.getSelection().getRangeAt(0); // 返回 当前 range 中的内容
  551.     var selt = Tl.Iframe.Window.getSelection();
  552.     var str = selt.toString();
  553.     if(str.length>10)
  554.     {
  555.      if(fCkBrs()==3)
  556.      {
  557.       str=str.replace(/<br>/g,'');
  558.       str=str.replace(/\n/g,'');
  559.       Tl.Iframe.Document.execCommand('insertHTML', false, '<pre class="sqPre">'+str+'</pre>');
  560.       return false;
  561.      } 
  562.      Tl.Iframe.Document.execCommand('formatBlock', false, 'pre');
  563.     }
  564.     else 
  565.     {
  566.      fPopup(Tl.Root+'html/popup_pre.htm'+Tl.ReloadString); // end if 1
  567.     }
  568.    } // end if
  569.    return false;
  570.   } // end function fPre
  571.   
  572.   function fPopup(sUrl, iWidth, iHeight, sAddition)
  573.   {
  574.    try{oPopup.close()}catch(e){}
  575.    if(!sUrl)return false;
  576.    if(!iWidth)iWidth=screen.availWidth-200;
  577.    if(!iHeight)iHeight=screen.availHeight-150;
  578.    if(!sAddition)sAddition='';
  579.    var iMrgHor=(screen.availWidth-iWidth)/2;
  580.    var iMrgVtc=(screen.availHeight-iHeight)/2;
  581.    
  582.    oPopup=open('about:blank','sqPopup','width='+iWidth+',height='+iHeight+',left='+iMrgHor
  583.     +',top='+iMrgVtc+',scrollbars'+sAddition);

  584.    oPopup.location.href=sUrl;
  585.    oPopup.focus();
  586.    oPopup.document.ondblclick=function(){oPopup.close();}
  587.    oPopup.document.onkeydown=function(){ if(oPopup.event.keyCode==27)oPopup.close(); }
  588.    return false;
  589.   } // shawl.qiu script 
  590.   
  591.   function fXmlHttp(sMethod, sUrl, oFunc)
  592.   {
  593.    var xh;
  594.    try
  595.    {
  596.     xh=new XMLHttpRequest();
  597.    } 
  598.    catch(e)
  599.    {
  600.     try
  601.     {
  602.      xh=new ActiveXObject('microsoft.xmlhttp');
  603.     } 
  604.     catch(e)
  605.     {
  606.      tryxh=new ActiveXObject("Msxml2.XMLHTTP"); } catch(e){} // end try 2
  607.     } // end try 1
  608.    } // end try
  609.    xh.open(sMethod, sUrl);
  610.    xh.onreadystatechange=function()
  611.    {
  612.     if(xh.readyState==4&&xh.status==200)
  613.     {
  614.      if(oFunc) oFunc(xh.responseText);
  615.      else alert(xh.responseText);
  616.     }
  617.    }
  618.    xh.send(null);
  619.   } // end function fXh
  620.   
  621.   function fIeInsertHtml(sStr)
  622.   {
  623.    Tl.Iframe.Window.focus();
  624.    if(fCkBrs()==1){
  625.     var range=Tl.Iframe.Document.selection.createRange();
  626.     range.pasteHTML(sStr);
  627.    }
  628.   } // end function fIeInsertHtml
  629.   
  630.   function fGetEleOffsetPsti(oEle, iPsti)
  631.   {
  632.    if(fCkBrs()!=1) return oEle.offsetLeft;
  633.    var debug = false;
  634.    if(debug)
  635.    {
  636.     alert(
  637.      "oEle.tagName: "+oEle.tagName+
  638.      "\noEle.offsetLeft: "+oEle.offsetLeft
  639.     );
  640.    }
  641.    
  642.    iPsti = oEle.offsetLeft;
  643.    
  644.    if(oEle!=null && oEle.tagName!="BODY")
  645.    {
  646.     iPsti+=arguments.callee(oEle.parentNode, iPsti);
  647.    }
  648.    return iPsti;
  649.    
  650.    function fCkBrs()
  651.    {
  652.     switch (navigator.appName)
  653.     {
  654.      case 'Opera': return 2;
  655.      case 'Netscape': return 3;
  656.      defaultreturn 1;
  657.     }
  658.    } // end function fCkBrs
  659.   } // end function fGetEleOffsetPsti
  660.   
  661.   function fPadTag(sTag)
  662.   {
  663.    Tl.Iframe.Window.focus();
  664.    if(fCkBrs()==1)
  665.    {
  666.     var range=Tl.Iframe.Document.selection.createRange();
  667.     range.pasteHTML('<'+sTag+' class="sqGeneral">'+range.htmlText+'</'+sTag+'>');
  668.    } 
  669.    else 
  670.    {
  671.     var range=Tl.Iframe.Window.getSelection().getRangeAt(0); // 返回 当前 range 中的内容
  672.     var oTemp=Tl.Iframe.Document.createElement(sTag)
  673.      range.surroundContents(oTemp);
  674.    } // end if
  675.   } // end function fPadTag
  676.   
  677.   function fRandomLetter(nLen, sCase)
  678.   {
  679.    var ar='';
  680.    var arUp=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S',
  681.     'T','U','V','W','X','Y','Z'];
  682.    var arLw=['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t',
  683.     'u','v','w','x','y','z'];
  684.    var arDgt=[0,1,2,3,4,5,6,7,8,9];
  685.    
  686.    switch(sCase)
  687.    {
  688.     case 'upper': ar=arUp; break;
  689.     case 'lower': ar=arLw; break;
  690.     case 'letter': ar=arUp.concat(arLw)break;
  691.     default:ar=arUp.concat(arLw, arDgt);
  692.    }
  693.    if(nLen&&nLen>0)
  694.    {
  695.     if(!isFinite(nLen))return false;
  696.     if(nLen<0)return false;
  697.     var iLetter='';
  698.      nLen=parseInt(nLen);
  699.      for(var i=0; i<nLen; i++)
  700.      {
  701.       iLetter+=ar[fRandomBy(0,ar.length-1)];
  702.      }
  703.      return iLetter;
  704.    }
  705.    return ar[fRandomBy(0,ar.length-1)];
  706.   } // shawl.qiu code
  707.   
  708.   function fEmail()
  709.   {
  710.    if(fCkBrs()==1)
  711.    {
  712.     var range=Tl.Iframe.Document.selection.createRange();
  713.     if(range.text!='')
  714.     {
  715.      var url=prompt('please enter a e-mail address', 'shawl.qiu@gmail.com');
  716.      if(!url)return false;
  717.      range.pasteHTML('<a href="mailto:'+url+'" class="sqMail">'+range.htmlText+'</a>');
  718.     } 
  719.     else 
  720.     {
  721.      Tl.Popup(Tl.Root+'html/popup_email.htm'+Tl.ReloadString, 500, 120);
  722.     }
  723.    } 
  724.    else 
  725.    {
  726.     var url='';
  727.     var temp=Tl.Iframe.Document.createElement('a');
  728.     var range=Tl.Iframe.Window.getSelection().getRangeAt(0); // 返回 当前 range 中的内容
  729.     var selt=Tl.Iframe.Window.getSelection();
  730.     if(selt.toString()!='')
  731.     {
  732.      url=prompt('please enter an e-mail address', 'shawl.qiu@gmail.com');
  733.      if(url)
  734.      {
  735.       temp.href='mailto:'+url; temp.className="sqMail";
  736.       range.surroundContents(temp);
  737.      }
  738.     } 
  739.     else 
  740.     {
  741.      Tl.Popup(Tl.Root+'html/popup_email.htm'+Tl.ReloadString, 500, 120);
  742.     } 
  743.    } // end if
  744.    return false;
  745.   } // end function fEmail()
  746.   
  747.   function fLink()
  748.   {
  749.    var temp=Tl.Iframe.Document.createElement('a');
  750.    var range=Tl.Iframe.Window.getSelection().getRangeAt(0); // 返回 当前 range 中的内容
  751.    var selt=Tl.Iframe.Window.getSelection();
  752.    if(selt.toString()!='')
  753.    {
  754.     var url=prompt('please enter a url', 'http://');
  755.     if(!url)return false;
  756.     temp.href=url; temp.className='sqUrl';
  757.     range.surroundContents(temp);
  758.    } 
  759.    else 
  760.    {
  761.     Tl.Popup(Tl.Root+'html/popup_url.htm'+Tl.ReloadString, 500, 120);
  762.    }
  763.   }
  764.   
  765.   function fAnchor()
  766.   {
  767.    if(fCkBrs()==1)
  768.    {
  769.     var range=Tl.Iframe.Document.selection.createRange();
  770.     var text
  771.     if(range.text!='')
  772.     {
  773.      text=prompt('please enter a name for anchor', 'anchor name');
  774.      if(!text)return false;
  775.      range.pasteHTML('<a name="'+text+'" class="sqAnchor">'+
  776.          range.htmlText+'</a>');
  777.     } else Tl.Popup(Tl.Root+'html/popup_anchor.htm'+Tl.ReloadString, 500, 120)
  778.    } 
  779.    else 
  780.    {
  781.     var text='';
  782.     var temp=Tl.Iframe.Document.createElement('a');
  783.     var range=Tl.Iframe.Window.getSelection().getRangeAt(0); // 返回 当前 range 中的内容
  784.     var selt=Tl.Iframe.Window.getSelection();
  785.     if(selt.toString()!='')
  786.     {
  787.      text=prompt('please enter a name for anchor', 'anchor');
  788.      if(text){ temp.name=text; temp.className="sqAnchor"; } else return false;
  789.      range.surroundContents(temp)
  790.     }  else Tl.Popup(Tl.Root+'html/popup_anchor.htm'+Tl.ReloadString, 500, 120)
  791.    } // end if
  792.   } // end function fEmail()
  793.   
  794.   function fImg()
  795.   {
  796.    Tl.Popup(Tl.Root+'html/popup_image.htm'+Tl.ReloadString, 400, 200);
  797.   }
  798.   
  799.   function fEmotion()
  800.   {
  801.    Tl.Popup('about:blank', 500,500);
  802.    Tl.XmlHttp('GET', Tl.Root+'html/popup_emotion.htm'+Tl.ReloadString, fGetEmo);
  803.    function fGetEmo(sSrc)
  804.    {
  805.     sSrc=sSrc.replace(/src\="/gi,'src="'+Tl.Root);
  806.     if(oPopup)
  807.     {
  808.      oPopup.document.write(sSrc);
  809.      oPopup.document.close();
  810.     } // end if
  811.    } // end function fGetEmo
  812.   } // end function fEmotion
  813.   
  814.   function fStrDecode(sStr){
  815.     if(!str)return false;
  816.    return sStr.replace(/\&lt\;/gi,'<').
  817.     replace(/\&gt\;/gi,'>').
  818.     replace(/\&amp\;/gi,'&');
  819.   }
  820.   
  821.   function fStrEncode(sStr){
  822.    if(!sStr)return false;
  823.    return sStr.replace(/[&]/g,'&amp;').
  824.     replace(/</g,'&lt;').
  825.     replace(/>/g,'&gt;');
  826.   }
  827.   
  828.   function fStdCase(sStr)
  829.   {
  830.    if(!sStr||sStr.length==0)return false;
  831.    return sStr=sStr.replace(/<[^>]+>/g, function(match)
  832.    {
  833.     return match.replace(/^<[a-z0-9]+( |)|[a-z0-9]+>$|[a-z]+\=/gi,function(sub)
  834.     {
  835.      return sub.toLowerCase();
  836.     } );
  837.     }
  838.    ) // shawl.qiu script
  839.   } // end function fStdCase
  840.   
  841.   function fEraserAll()
  842.   {
  843.    if(fCkBrs()==1)
  844.    {
  845.     var range=Tl.Iframe.Document.selection.createRange();
  846.     range.text=range.text;
  847.    } 
  848.    else 
  849.    {
  850.     var range=Tl.Iframe.Window.getSelection().getRangeAt(0); // 返回 当前 range 中的内容
  851.     var selt=Tl.Iframe.Window.getSelection();
  852.     if(fCkBrs()==2) selt=Tl.Iframe.Document.selection.createRange().text;
  853.      else selt=selt.toString();
  854.     if(selt=='')return false;
  855.     Tl.Cmd('insertHTML', false, selt.replace(/\r\n/g,'<br/>').replace(/\r/g,'<br/>'));
  856.    }
  857.   } // end function fEraserAll
  858.   
  859.   function fFixMl(oEle)
  860.   {
  861.    if(!oEle)oEle=document.body;
  862.    var atr=oEle.attributes;
  863.    if(atr)
  864.     for(var i=0, j=atr.length; i<j; i++)
  865.      if(typeof oEle[atr[i].name]=='function')oEle[atr[i].name]=null;
  866.    if(oEle.childNodes)
  867.     for(var i=0, j=oEle.childNodes.length; i<j; i++)
  868.      arguments.callee(oEle.childNodes[i]);
  869.   }
  870.   //------------------------------------end private method
  871.  } // shawl.qiu code
  872.     //---------------------------------end class sqEditor()---------------------------------//
  873.  
  874.  var ed = new sqEditor();


发表于 @ 2007年03月03日 00:03:00|评论(loading...)

新一篇: asp.net 中 使用 ado 的 Recordset GetString 函数 By shawl.qiu | 旧一篇: c# .net 编写 HTML 编辑器的核心技巧 by shawl.qiu

用户操作
[即时聊天] [发私信] [加为好友]
邱少伟
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
邱少伟的公告
www.btbtd.org
gi.2288.org
文章分类
收藏
#1. Algorithm
Bit Twiddling Hacks - By Sean Eron Anderson
Paj's Home
XySSL
高度な JavaScript 技集
0. ASP
aspfaq.com
codeproject.com
motobit.com
0. ASP.NET(C#)
ASP .NET FAQ
C# Frequently Asked Questions
C# General FAQ
C# MVP Bloggers
0. CSS
Comparison of layout engines (CSS)
0. Javascript
Comparison of layout engines (DOM)
Comparison of layout engines (ECMAScript)
crockford.com
faqts.com/javascript
Pat's Place: A technology demonstrator project.
0. SQL
Comparison of different SQL implementations
Comparison of SQL syntax
What are reserved Access, ODBC and SQL Server keywords?
What are the main differences between Access and SQL Server?
0. Tool Kits
ECMA Standards
faqts.com
Mozilla docs
RFC's
W3C TR
1. Search Engines
Alexa Web Search
All the web
AltaVista Search
AOL Web Search
Baidu
CrazySearch!
CSDN Blog Search
Excite
FeedsS's Blog
Google
Kingsoft
Lycos Search
Lyric Search
Mpeg Search
MSN Search
Search.com
SoGua
Soudu
xx-hacker
Yahoo [cn]
Yahoo [en]
Yisou
2. English Forum
#旺旺英语论坛
#英语写作论坛
Learners english club
3. Linux Forum
#三峡大学 LINUX联盟(RSS)
#中国 Linux 公社(RSS)
#黄嘴企鹅论坛(RSS)
Fedora 1.0 问题(RSS)
LINUX 1000 Q(RSS)
Linux 伊甸园(RSS)
4. PHP Forum
#中文PHP俱乐部(RSS)
#超越 PHP(RSS)
5. Other Site
#中国网络研究与搜索论坛
#在线翻译(RSS)
#常用书籍打包
#电子图书下载(RSS)
#科迈网(RSS)
#蓝色理想(RSS)
#西安信息资源网
CSDN.NET(RSS)
Google Hacker Database
Web Design Group
Webmaster world
6. Enjoy Site
#新华网论坛(RSS)
#极点视觉绘画站(RSS)
#涂鸦王国(RSS)
#牧文财经(RSS)
#猫扑大杂烩(RSS)
7. Resource
Active Perl
Apache
j2sdk-1_4_2-windows-i586
mm.mysql-2.0.4-bin.jar
mod_jk_1.2.5_2.0.47.dll
mod_rewrite
MySql
PHP
phpMailer
Source Forge Xoops
Tomcat
Web Server Resource
Win2k3
Zend
8. My Blog
#搜索引擎优化 Seo-GI
#绿色学院 - Green Institute
Blogcn(RSS)
GI Technology
GI-BB Developer Team
Green Institute
MSN Blog
Wallop Flash
Wallop HTML (RSS)
卐-_卍 信仰,理想,追求,博爱,自强,厚德.(RSS)
9. Music & Album
GaeAhit
USTC
VeryCD-MTV
A. Manual
Apache Manual
CSS Level 2 Manual
HTML 4.01 Manual
Javascript Manual
MySql Manual (cn) 2
MySql Manual (en) 1
PEAR Manual
PHP Manual
PHP-GTK Manual
Regular Expression Library
Smarty Manual
W3C Technical Reports and Publications
XHTML 1.0 Manual
XML 1.0 Manual
B. Google Cheat
Blog.com
ChinaUnix
cnblogs
donews
Google Groups
Teeta
Tom blog
Yahoo Groups
Yculblog
C. Friend's Blog
#我爱生命中存在的那一切(RSS)
#老贼在干嘛?(RSS)
#鸣乐谷
Color_Se SeSe 颜色(RSS)
Drink Drank Drunk
PLANTUNT的珍贵资源
D. SEO
Keywords 1 (Google)
Keywords 2 (Baidu)
Keywords 3 (Yisou)
Marketleap.com
Pagerank 1
Pagerank 2
Pagerank 3
Trafficzap.com
Uptimebot.com
Webconfs
E. Technology
http://bt.it.to/
http://bt.qq.to/
http://bt.zz.to/
http://du.u.to/
http://gi.dd.to/
http://gi.if.to/
http://gi.kk.to/
http://gi.pc.to
http://gi.xx.to/
http://mail.it.to/
http://nba.it.to
http://se.u.to/
F. Literature
#逐浪文学
KK 书库
G. Math/Geometry
台湾一个不错的数学站
H. Works
宝莱迪
I. SEO Link
paolid
shawl.qiu CSharp DotNet 个人资料管理系统
shawl.qiu CSharp DotNet 个人资料管理系统
shawl.qiu CSharp DotNet 个人资料管理系统
依梦卫浴-依梦洁具(北京)厂家直销店
卫浴生活坊
满意洁具馆
热弯玻璃
热熔玻璃
热熔玻璃
玻璃
玻璃制品
艺术玻璃
存档
软件项目交易
Csdn Blog version 3.1a
Copyright © 邱少伟