bool IHtmlRenderAdapter.Render(IHtmlNode node, IHtmlRenderContext context) { var element = node as IHtmlElement; if (element == null) { return(false); } if (element.Name.EqualsIgnoreCase("content")) { GetContentBody(element).RenderChilds(context.Writer, RenderAdapters); return(true); } else if (element.Name.EqualsIgnoreCase("head")) { View.ViewContext.HttpContext.Trace.Write("ContentView", "Begin Merge Head"); var head = MergeHead(element, Document.FindSingle("head")); View.ViewContext.HttpContext.Trace.Write("ContentView", "End Merge Head"); head.Render(context.Writer, RenderAdapters); return(true); } else { return(false); } }
/// <summary> /// 将节点呈现为 HTML /// </summary> /// <param name="node">要呈现的节点</param> /// <param name="context">渲染上下文</param> public static void Render(this IHtmlNode node, IHtmlRenderContext context) { if (node == null) { throw new ArgumentNullException("node"); } foreach (var a in context.RenderAdapters) { if (a.Render(node, context)) { return; } } var renderable = node as IHtmlRenderableNode; if (renderable != null) { renderable.Render(context); return; } var element = node as IHtmlElement; if (element != null) { RenderElementAndChilds(element, context); return; } context.Writer.Write(node.OuterHtml()); }
/// <summary> /// 渲染元素和其子节点 /// </summary> /// <param name="element">要渲染的元素</param> /// <param name="context">渲染上下文</param> private static void RenderElementAndChilds(IHtmlElement element, IHtmlRenderContext context) { var writer = context.Writer; var specification = element.Document.HtmlSpecification; if (specification.IsForbiddenEndTag(element.Name)) { var builder = new StringBuilder(); builder.Append(GenerateTagHtml(element, true)); if (element.Nodes().Any()) { throw new FormatException(string.Format(CultureInfo.InvariantCulture, "HTML元素 {0} 不能有任何内容", element.Name)); } writer.Write(builder); } else { writer.Write(GenerateTagHtml(element, false)); RenderChilds(element, context); writer.Write("</{0}>", element.Name); } }
bool IHtmlRenderAdapter.Render( IHtmlNode node, IHtmlRenderContext context ) { var element = node as IHtmlElement; if ( element == null ) return false; if ( element.Name.EqualsIgnoreCase( "content" ) ) { GetContentBody( element ).RenderChilds( context.Writer, RenderAdapters ); return true; } else if ( element.Name.EqualsIgnoreCase( "head" ) ) { View.ViewContext.HttpContext.Trace.Write( "ContentView", "Begin Merge Head" ); var head = MergeHead( element, Document.FindSingle( "head" ) ); View.ViewContext.HttpContext.Trace.Write( "ContentView", "End Merge Head" ); head.Render( context.Writer, RenderAdapters ); return true; } else return false; }
/// <summary> /// 渲染所有的子节点 /// </summary> /// <param name="container">要渲染子节点的容器</param> /// <param name="context">渲染上下文</param> public static void RenderChilds(this IHtmlContainer container, IHtmlRenderContext context) { foreach (var node in container.Nodes()) { Render(node, context); } }
/// <summary> /// 渲染 partial 标签 /// </summary> /// <param name="element">partial 标签</param> /// <param name="context">渲染上下文</param> protected override void Render(IHtmlElement element, IHtmlRenderContext context) { var partialTag = ContentExtensions.GenerateTagHtml(element, true); Trace(string.Format("Begin Render Partial: {0}", partialTag)); RenderPartial(element, context.Writer); Trace(string.Format("End Render Partial: {0}", partialTag)); }
bool IHtmlRenderAdapter.Render( IHtmlNode node, IHtmlRenderContext context ) { var element = node as IHtmlElement; if ( element == null ) return false; if ( !IsEligible( element ) ) return false; Render( element, context ); return true; }
bool IHtmlRenderAdapter.Render(IHtmlNode node, IHtmlRenderContext context) { var element = node as IHtmlElement; if (element == null) { return(false); } if (!IsEligible(element)) { return(false); } Render(element, context); return(true); }
/// <summary> /// 派生类实现此方法提供自定义的渲染规则。 /// </summary> /// <param name="element">要渲染的元素</param> /// <param name="context">渲染上下文</param> protected abstract void Render(IHtmlElement element, IHtmlRenderContext context);
/// <summary> /// 派生类实现此方法提供自定义的渲染规则。 /// </summary> /// <param name="element">要渲染的元素</param> /// <param name="context">渲染上下文</param> protected abstract void Render( IHtmlElement element, IHtmlRenderContext context );
/// <summary> /// 渲染元素和其子节点 /// </summary> /// <param name="element">要渲染的元素</param> /// <param name="context">渲染上下文</param> private static void RenderElementAndChilds( IHtmlElement element, IHtmlRenderContext context ) { var writer = context.Writer; var specification = element.Document.HtmlSpecification; if ( specification.IsForbiddenEndTag( element.Name ) ) { var builder = new StringBuilder(); builder.Append( GenerateTagHtml( element, true ) ); if ( element.Nodes().Any() ) throw new FormatException( string.Format( CultureInfo.InvariantCulture, "HTML元素 {0} 不能有任何内容", element.Name ) ); writer.Write( builder ); } else { writer.Write( GenerateTagHtml( element, false ) ); RenderChilds( element, context ); writer.Write( "</{0}>", element.Name ); } }
/// <summary> /// 渲染所有的子节点 /// </summary> /// <param name="container">要渲染子节点的容器</param> /// <param name="context">渲染上下文</param> public static void RenderChilds( this IHtmlContainer container, IHtmlRenderContext context ) { foreach ( var node in container.Nodes() ) { Render( node, context ); } }
/// <summary> /// 将节点呈现为 HTML /// </summary> /// <param name="node">要呈现的节点</param> /// <param name="context">渲染上下文</param> public static void Render( this IHtmlNode node, IHtmlRenderContext context ) { if ( node == null ) throw new ArgumentNullException( "node" ); foreach ( var a in context.RenderAdapters ) { if ( a.Render( node, context ) ) return; } var renderable = node as IHtmlRenderableNode; if ( renderable != null ) { renderable.Render( context ); return; } var element = node as IHtmlElement; if ( element != null ) { RenderElementAndChilds( element, context ); return; } context.Writer.Write( node.OuterHtml() ); }
/// <summary> /// 渲染 partial 标签 /// </summary> /// <param name="element">partial 标签</param> /// <param name="context">渲染上下文</param> protected override void Render( IHtmlElement element, IHtmlRenderContext context ) { var partialTag = ContentExtensions.GenerateTagHtml( element, true ); Trace( string.Format( "Begin Render Partial: {0}", partialTag ) ); RenderPartial( element, context.Writer ); Trace( string.Format( "End Render Partial: {0}", partialTag ) ); }