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();


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
  屏蔽数据库间的差异,以统一的界面和操作方式来对数据进行处理,将程序员或数据管理员从繁琐的操作模式中解脱出来,使其更加专注的进行Sql语句的编写。   将查询分析器和企业管理器功能合二为一,并融入众多实用功能,并完美支持 sqlserver、oracle、mysql、access。是您编写sql语句和数据分析的绝佳帮手。   功能列表:   1、代码高亮:根据操作数据库的不同区分相应关键字,并高亮显示   2、自动完成:输入不同的表名等信息,将自动提示相关的字段信息等。   3、智能提示:输入相应关键字将出现类似VS中一样的说明提示。   4、跨库操作:可同时跨多个数据库间操作,互不影响。随时切换,随时运行。   5、随意运行:运行选择的代码、运行多个Sql操作代码。如果运行多个Select语句则显示多个结果集,用来对比查看。(快捷键F5)   6、数据库树中查找对象。   7、在Sql语句编辑器中快速查找功能。   8、查看数据库属*   9、查看表结构   10、自动生成Sql语句模板   11、删除表、视图等   12、查看数据库属*,并快速定到至物理文件。   13、生成脚本信息功能   14、结果集导出功能。   15、在结构集中查找   16、删除指定的行(快捷键 &lsquo;delete&rsquo;)   17、修改制定的数据   18、添加新数据   19、复制选择内容(快捷键&lsquo;ctrl+C&rsquo;)   20、将外部数据导入到结果集中(支持txt:以 '|'或tab符号为分割符 和execl: 指定Sheet页名称 和 默认Sheet页 )   21、支持将导入的数据更新至数据库。   22、编辑操作时自动错提示功能(如:自动递增字段自动屏蔽编辑功能。必填字段没有填写内   容则提示,数据类型不正确自动提示等。。。)   23、自动标识主键(主键字段标识为-*-字段名-*-)   24、冻结指定行、列功能。使查看操作更加方便   25、数据集更改后,在提交前可选查看所有更改的部分数据。并用颜**分。   26、自定义我的收藏功能。   27、详细数据单窗体查看功能(支持图片字段)   28、*在没有安装SqlServer 客户端及任何组件的情况下仍然可以连接至SqlServer*   29、*判断Oracle的常见错误,并尝试更改或给出提示*   30、增加历史记录功能。   31、增加自动保存用户状态功能。再次打开软件将会保留上次已连接的数据库信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值