/// <summary>The <see cref="MediaQueryNode"/> visit implementation</summary>
 /// <param name="mediaQueryNode">The media expression node.</param>
 /// <returns>The modified AST node if modified otherwise the original node</returns>
 public override AstNode VisitMediaQueryNode(MediaQueryNode mediaQueryNode)
 {
     return(new MediaQueryNode(
                mediaQueryNode.OnlyText,
                mediaQueryNode.NotText,
                mediaQueryNode.MediaType,
                mediaQueryNode.MediaExpressions.Select(mediaExpressionNode => (MediaExpressionNode)mediaExpressionNode.Accept(this)).ToSafeReadOnlyCollection()));
 }
예제 #2
0
        /// <summary>The <see cref="MediaQueryNode"/> visit implementation</summary>
        /// <param name="mediaQueryNode">The media expression node.</param>
        /// <returns>The modified AST node if modified otherwise the original node</returns>
        public override AstNode VisitMediaQueryNode(MediaQueryNode mediaQueryNode)
        {
            // media_query
            // : [ONLY | NOT]? S* media_type S* [ AND S* expression ]*
            // | expression [ AND S* expression ]*
            // ;

            // Per W3C Spec:
            // The following is an malformed media query because having no space between ‘and’ and
            // the expression is not allowed. (That is reserved for the functional notation syntax.)
            // @media all and(color) { … }
            if (!string.IsNullOrWhiteSpace(mediaQueryNode.OnlyText))
            {
                _printerFormatter.Append(mediaQueryNode.OnlyText);
                _printerFormatter.Append(CssConstants.SingleSpace);
            }
            else if (!string.IsNullOrWhiteSpace(mediaQueryNode.NotText))
            {
                _printerFormatter.Append(mediaQueryNode.NotText);
                _printerFormatter.Append(CssConstants.SingleSpace);
            }

            if (!string.IsNullOrWhiteSpace(mediaQueryNode.MediaType))
            {
                _printerFormatter.Append(mediaQueryNode.MediaType);
                if (mediaQueryNode.MediaExpressions.Count > 0)
                {
                    mediaQueryNode.MediaExpressions.ForEach(mediaExpression =>
                    {
                        _printerFormatter.Append(CssConstants.SingleSpace);
                        _printerFormatter.Append(CssConstants.And);
                        _printerFormatter.Append(CssConstants.SingleSpace);
                        mediaExpression.Accept(this);
                    });
                }
            }
            else
            {
                mediaQueryNode.MediaExpressions.ForEach((mediaExpression, last) =>
                {
                    mediaExpression.Accept(this);
                    if (!last)
                    {
                        _printerFormatter.Append(CssConstants.SingleSpace);
                        _printerFormatter.Append(CssConstants.And);
                        _printerFormatter.Append(CssConstants.SingleSpace);
                    }
                });
            }

            return(mediaQueryNode);
        }
예제 #3
0
 /// <summary>The <see cref="MediaQueryNode"/> visit implementation</summary>
 /// <param name="mediaQueryNode">The media expression node.</param>
 /// <returns>The modified AST node if modified otherwise the original node</returns>
 public virtual AstNode VisitMediaQueryNode(MediaQueryNode mediaQueryNode)
 {
     return(mediaQueryNode);
 }