📄 htmleditor.cs
字号:
using System;
using System.Collections;
using System.Web;
using System.IO;
using Lion.Data.Library.HtmlEditor;
namespace Lion.Data.Library.HtmlEditor.Core
{
/// <summary>
/// HtmlEditor 的摘要说明。
/// </summary>
internal class HtmlEditor:IHttpHandler
{
private string sStyleName, sStyleDir, sStyleCSS, sStyleUploadDir, nStateFlag, sDetectFromWord, sInitMode, sBaseUrl, sBaseHref, sAutoRemote, sShowBorder ,sButtonImgPath;
private string sVersion,sReleaseDate,sLicense;
private string sContentID,sFullScreen,originalfilename,savepathfilename,savefilename;
private string Argument;
private Hashtable aButton;
#region IHttpHandler interface
/// <summary>
/// 通过实现 IHttpHandler 接口的自定义 HttpHandler 启用 HTTP Web 请求的处理。
/// </summary>
/// <param name="context">HttpContext 对象,它提供对用于为 HTTP 请求提供服务的内部服务器对象(如 Request、Response、Session 和 Server)的引用</param>
public void ProcessRequest(HttpContext context)
{
Argument = context.Request.QueryString["configfile"];
string filename = context.Request.FilePath;
filename = filename.Substring(filename.LastIndexOf("/")+1).ToUpper();
bool flag = false;
if(filename=="HTMLEDITOR.ASPX")
initSystem();
else if(filename=="HTMLHANDLER.ASPX")
HtmlHandler.HtmlDialogContent(context);
else if(filename=="IMAGEHANDLER.ASPX")
ImageHandler.ImageContent(context);
else if(filename=="SCRIPTHANDLER.ASPX")
ScriptHandler.ScriptContent(context);
else if(filename=="UPLOAD.ASPX")
{
UpLoadHandler upload = new UpLoadHandler();
upload.initSystem(context);
}
else
flag = true;
if(flag)
throw(new HttpException(500,"unknown request"));
}
/// <summary>
/// 获取一个值,该值指示其他请求是否可以使用 IHttpHandler 实例。
/// </summary>
public bool IsReusable
{
get { return true; }
}
#endregion
#region Function Custom
/// <summary>
/// 初始化系统信息
/// </summary>
internal void initSystem()
{
HttpContext context = Helper.Context;
InitPara();
InitButtonArray();
System.Text.StringBuilder Sb = Helper.GetHtml("/Htmleditor.txt");
Sb.Replace("{sContentID}",sContentID);
Sb.Replace("{sStyleName}",sStyleName);
Sb.Replace("{originalfilename}",originalfilename);
Sb.Replace("{savepathfilename}",savepathfilename);
Sb.Replace("{savefilename}",savefilename);
Sb.Replace("{configfile}",Argument);
Sb.Replace("{sVersion}",sVersion);
Sb.Replace("{sReleaseDate}",sReleaseDate);
Sb.Replace("{sLicense}",sLicense);
Sb.Replace("{sStyleName}",sStyleName);
Sb.Replace("{sStyleCSS}",sStyleCSS);
Sb.Replace("{sStyleDir}",sStyleDir);
Sb.Replace("{sStyleUploadDir}",sStyleUploadDir);
Sb.Replace("{sInitMode}",sInitMode);
Sb.Replace("{sDetectFromWord}",sDetectFromWord);
Sb.Replace("{sBaseUrl}",sBaseUrl);
Sb.Replace("{sBaseHref}",sBaseHref);
Sb.Replace("{sToolBar}",GetToolBar().ToString());
Sb.Replace("{sAutoRemote}",sAutoRemote);
Sb.Replace("{sShowBorder}",sShowBorder);
Sb.Replace("{sButtonImgPath}",sButtonImgPath);
context.Response.ContentType = "text/html";
context.Response.Output.Write(Sb.ToString());
Sb.Remove(0,Sb.Length);
}
/// <summary>
/// 初始化输入参数
/// </summary>
private void InitPara()
{
HttpContext context = Helper.Context;
//取全屏标志
sFullScreen = ((context.Request.QueryString["fullscreen"]!=null)?context.Request.QueryString["fullscreen"]:"0");
//取对应的内容ID
if(context.Request.QueryString["ID"]!=null)
{
sContentID = context.Request.QueryString["ID"];
}
else
{
context.Response.Clear();
context.Response.Output.WriteLine("请传入调用参数ID,即隐藏的内容表单项ID!");
context.Response.End();
return;
}
originalfilename = context.Request.QueryString["originalfilename"];
savepathfilename = context.Request.QueryString["savepathfilename"];
savefilename = context.Request.QueryString["savefilename"];
//取样式初始值
sStyleName = ((context.Request.QueryString["style"]!=null)?Helper.Context.Server.UrlDecode(context.Request.QueryString["style"]):"standard");
System.Xml.XmlNode node = Helper.GetStyleNode(sStyleName);
if(node!=null)
{
sStyleName = node.SelectSingleNode("S_Name").InnerText;
sStyleDir = node.SelectSingleNode("S_Dir").InnerText;
sStyleCSS = node.SelectSingleNode("S_CSS").InnerText;
sStyleUploadDir = node.SelectSingleNode("S_UploadDir").InnerText;
sStyleUploadDir = (sStyleUploadDir.EndsWith("/")?sStyleUploadDir:sStyleUploadDir+"/");
nStateFlag = node.SelectSingleNode("S_StateFlag").InnerText;
sDetectFromWord = node.SelectSingleNode("S_DetectFromWord").InnerText;
sInitMode = node.SelectSingleNode("S_InitMode").InnerText;
sBaseUrl = node.SelectSingleNode("S_BaseUrl").InnerText;
sBaseHref = node.SelectSingleNode("S_BaseHref").InnerText;
sAutoRemote = node.SelectSingleNode("S_AutoRemote").InnerText;
sShowBorder = node.SelectSingleNode("S_ShowBorder").InnerText;
sButtonImgPath = node.SelectSingleNode("S_ButtonImagesPath").InnerText;
}
else
{
context.Response.Clear();
context.Response.Output.WriteLine("无效的样式Style参数传入,如果要使用默认值,请留空!");
context.Response.End();
return;
}
sVersion = "2.0.0";
sReleaseDate = "2004-06-08";
sLicense = "";
}
/// <summary>
/// 初始化按钮数组
/// </summary>
private void InitButtonArray()
{
HttpContext context = Helper.Context;
aButton = new Hashtable();
System.Collections.Hashtable hs = (Hashtable)context.Application[Argument];
System.Xml.XmlDocument doc = (System.Xml.XmlDocument)hs["Button"];
System.Xml.XmlNodeList nodelist = doc.SelectNodes("/Root/Button");
foreach(System.Xml.XmlNode node in nodelist)
{
switch(node["B_Type"].InnerText)
{
case "0":
aButton.Add(node["B_Code"].InnerText,"<DIV CLASS=\"" + node["B_Class"].InnerText + "\" TITLE=\"" + node["B_Title"].InnerText + "\" onclick=\"" + node["B_Event"].InnerText + "\"><IMG CLASS=\"Ico\" SRC=\"{sButtonImgPath}"+ node["B_Image"].InnerText +"\"></DIV>");
break;
case "1":
aButton.Add(node["B_Code"].InnerText,"<SELECT CLASS=\"" + node["B_Class"].InnerText + "\" onchange=\"" + node["B_Event"].InnerText + "\">" + node["B_HTML"].InnerText + "</SELECT>");
break;
case "2":
aButton.Add(node["B_Code"].InnerText,"<DIV CLASS=\"" + node["B_Class"].InnerText + "\">" + node["B_HTML"].InnerText + "</DIV>");
break;
}
}
}
/// <summary>
/// 初始化工具栏
/// </summary>
private System.Text.StringBuilder GetToolBar()
{
HttpContext context = Helper.Context;
System.Xml.XmlNodeList nodelist = Helper.GetToolBarNodeList(sStyleName);
if(nodelist.Count==0)
{
context.Response.Clear();
context.Response.Output.WriteLine("对应样式没有设置工具栏!");
context.Response.End();
return null;
}
System.Text.StringBuilder Sb = new System.Text.StringBuilder();
Sb.Append("<table border=0 cellpadding=0 cellspacing=0 width='100%' class='Toolbar' id='LionSky_Editor_Toolbar'>");
foreach(System.Xml.XmlNode node in nodelist)
{
Sb.Append("<tr><td><div class=yToolbar>");
string[] _buttonname = node.ParentNode["T_Button"].InnerText.Split('|');
foreach(string name in _buttonname)
{
if(sFullScreen == "1" && name.ToUpper() == "MAXIMIZE")
Sb.Append(aButton["Minimize"].ToString().Trim());
Sb.Append(aButton[name].ToString().Trim());
}
Sb.Append("</div></td></tr>");
}
Sb.Append("</table>");
return Sb;
}
#endregion
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -