Exemple #1
0
        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);
            }
        }
Exemple #2
0
        /// <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());
        }
Exemple #3
0
        /// <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);
            }
        }
Exemple #4
0
    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;
    }
Exemple #5
0
 /// <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;
        }
Exemple #8
0
        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);
        }
Exemple #9
0
 /// <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 ) );
    }