/// <summary>The optimize media query.</summary>
        /// <param name="mediaNode">The media node.</param>
        /// <param name="ruleSetMediaPageDictionary">The rule set media page dictionary.</param>
        private void OptimizeMediaQuery(MediaNode mediaNode, OrderedDictionary ruleSetMediaPageDictionary)
        {
            var mediaNodeHashKey = mediaNode.PrintSelector();
            var pageNodes        = mediaNode.PageNodes.ToList();
            var rulesetNodes     = mediaNode.Rulesets.ToList();

            if (ruleSetMediaPageDictionary.Contains(mediaNodeHashKey))
            {
                var previousNode = ruleSetMediaPageDictionary[mediaNodeHashKey] as MediaNode;
                if (previousNode != null)
                {
                    pageNodes    = previousNode.PageNodes.Concat(pageNodes).ToList();
                    rulesetNodes = previousNode.Rulesets.Concat(rulesetNodes).ToList();
                }

                ruleSetMediaPageDictionary.Remove(mediaNodeHashKey);
            }

            ruleSetMediaPageDictionary.Add(
                mediaNodeHashKey,
                new MediaNode(
                    mediaNode.MediaQueries,
                    this.GetMergedNodeDictionary(rulesetNodes).Values.Cast <RulesetNode>().ToList().AsSafeReadOnly(),
                    pageNodes.ToSafeReadOnlyCollection()));
        }
        /// <summary>The <see cref="MediaNode"/> visit implementation</summary>
        /// <param name="mediaNode">The media AST node</param>
        /// <returns>The modified AST node if modified otherwise the original node</returns>
        public override AstNode VisitMediaNode(MediaNode mediaNode)
        {
            if (mediaNode == null)
            {
                throw new ArgumentNullException("mediaNode");
            }

            var updatedRulesetNodes = new List <RulesetNode>();
            var updatePageNodes     = new List <PageNode>();

            mediaNode.Rulesets.ForEach(rulesetNode =>
            {
                var updatedRulesetNode = (RulesetNode)rulesetNode.Accept(this);

                if (updatedRulesetNode != null)
                {
                    updatedRulesetNodes.Add(updatedRulesetNode);
                }
            });

            mediaNode.PageNodes.ForEach(page =>
            {
                var updatedPageNode = (PageNode)page.Accept(this);
                if (updatedPageNode != null)
                {
                    updatePageNodes.Add(updatedPageNode);
                }
            }
                                        );

            return(new MediaNode(mediaNode.MediaQueries, updatedRulesetNodes.AsReadOnly(), updatePageNodes.AsReadOnly()));
        }
 /// <summary>The <see cref="MediaNode"/> visit implementation</summary>
 /// <param name="mediaNode">The media AST node</param>
 /// <returns>The modified AST node if modified otherwise the original node</returns>
 public override AstNode VisitMediaNode(MediaNode mediaNode)
 {
     return(new MediaNode(
                mediaNode.MediaQueries.Select(ruleset => (MediaQueryNode)ruleset.Accept(this)).ToSafeReadOnlyCollection(),
                mediaNode.Rulesets.Select(ruleset => (RulesetNode)ruleset.Accept(this)).ToSafeReadOnlyCollection(),
                mediaNode.PageNodes.Select(pages => (PageNode)pages.Accept(this)).ToSafeReadOnlyCollection()));
 }
Example #4
0
        /// <summary>The <see cref="MediaNode"/> visit implementation</summary>
        /// <param name="mediaNode">The media AST node</param>
        /// <returns>The modified AST node if modified otherwise the original node</returns>
        public override AstNode VisitMediaNode(MediaNode mediaNode)
        {
            var updatedRulesets  = new List <RulesetNode>();
            var updatedPageNodes = new List <PageNode>();

            mediaNode.Rulesets.ForEach(rulesetNode => updatedRulesets.Add((RulesetNode)rulesetNode.Accept(this)));
            mediaNode.PageNodes.ForEach(pageNode => updatedPageNodes.Add((PageNode)pageNode.Accept(this)));

            return(new MediaNode(mediaNode.MediaQueries, updatedRulesets.AsReadOnly(), updatedPageNodes.AsReadOnly()));
        }
Example #5
0
        public static TreeNode GetAllTypeNode()
        {
            TypeB16Node nodeType = new TypeB16Node();

            nodeType.Text = nodeType.KNXMainNumber + "." + nodeType.KNXSubNumber + " " + nodeType.Name;

            nodeType.Nodes.Add(StatusDHWCNode.GetTypeNode());
            nodeType.Nodes.Add(StatusRHCCNode.GetTypeNode());
            nodeType.Nodes.Add(MediaNode.GetTypeNode());
            nodeType.Nodes.Add(ChannelActivation16Node.GetTypeNode());

            return(nodeType);
        }
Example #6
0
        /// <summary>The <see cref="MediaNode"/> visit implementation</summary>
        /// <param name="mediaNode">The media AST node</param>
        /// <returns>The modified AST node if modified otherwise the original node</returns>
        public override AstNode VisitMediaNode(MediaNode mediaNode)
        {
            // media
            // : MEDIA_SYM S* media_list LBRACE S* ruleset* CloseCurlyBracket S*
            // ;

            // append for: MEDIA_SYM S*
            _printerFormatter.Append(CssConstants.Media);

            mediaNode.MediaQueries.ForEach((mediaQuery, last) =>
            {
                mediaQuery.Accept(this);
                if (!last)
                {
                    _printerFormatter.Append(CssConstants.Comma);
                }
            });

            // append for: LBRACE S* ruleset* CloseCurlyBracket S*
            _printerFormatter.AppendLine();
            _printerFormatter.AppendLine(CssConstants.OpenCurlyBracket);
            _printerFormatter.IncrementIndentLevel();
            foreach (var ruleset in mediaNode.Rulesets)
            {
                ruleset.Accept(this);
            }

            // add and indent any nested Page nodes.
            foreach (var page in mediaNode.PageNodes)
            {
                _printerFormatter.WriteIndent();
                page.Accept(this);
            }

            _printerFormatter.DecrementIndentLevel();
            _printerFormatter.AppendLine(CssConstants.CloseCurlyBracket);

            return(mediaNode);
        }
        /// <summary>The <see cref="MediaNode"/> visit implementation</summary>
        /// <param name="mediaNode">The media AST node</param>
        /// <returns>The modified AST node if modified otherwise the original node</returns>
        public override AstNode VisitMediaNode(MediaNode mediaNode)
        {
            if (mediaNode == null)
            {
                throw new ArgumentNullException("mediaNode");
            }

            // Note - "@media" string cannot be verified here as it is analyzed during the parsing.
            // The print visitors convert it to lower case "@media" after printing.
            try
            {
                // Validate the mediums for lower case
                mediaNode.MediaQueries.ForEach(mediaQuery => ValidateForLowerCase(mediaQuery.MinifyPrint()));

                // Visit rulesets
                mediaNode.Rulesets.ForEach(rulesetNode => rulesetNode.Accept(this));
            }
            catch (BuildWorkflowException exception)
            {
                throw new WorkflowException(string.Format(CultureInfo.CurrentUICulture, CssStrings.CssLowercaseValidationParentNodeError, mediaNode.PrettyPrint()), exception);
            }

            return(mediaNode);
        }
 /// <summary>The <see cref="MediaNode"/> visit implementation</summary>
 /// <param name="mediaNode">The media AST node</param>
 /// <returns>The modified AST node if modified otherwise the original node</returns>
 public override AstNode VisitMediaNode(MediaNode mediaNode)
 {
     mediaNode.Rulesets.ForEach(rulesetNode => rulesetNode.Accept(this));
     mediaNode.PageNodes.ForEach(pageNode => pageNode.Accept(this));
     return(mediaNode);
 }
Example #9
0
 public override void VisitMedia(MediaNode node)
 {
     VisitMediaBase(node, false);
 }
Example #10
0
 /// <summary>The <see cref="MediaNode"/> visit implementation</summary>
 /// <param name="mediaNode">The media AST node</param>
 /// <returns>The modified AST node if modified otherwise the original node</returns>
 public virtual AstNode VisitMediaNode(MediaNode mediaNode)
 {
     return(mediaNode);
 }
Example #11
0
        private static void EnsureDeclarationNode(DeclarationNode declarationNode, RulesetNode ruleSetNode, MediaNode mediaQueryNode, StyleSheetNode actualCss)
        {
            var rules = actualCss.StyleSheetRules.ToArray();
            var expectedMediaQuery = string.Empty;

            if (mediaQueryNode != null)
            {
                expectedMediaQuery = mediaQueryNode.PrintSelector();
                rules = rules.OfType <MediaNode>().Where(r => r.PrintSelector().Equals(expectedMediaQuery)).SelectMany(mq => mq.Rulesets).ToArray();
            }

            var expectedRule = ruleSetNode.PrintSelector();
            var declarations = rules
                               .OfType <RulesetNode>()
                               .Where(rsn => rsn.PrintSelector().Equals(expectedRule))
                               .SelectMany(r => r.Declarations).ToArray();

            var expectedproperty  = declarationNode.Property;
            var declarationValues = declarations.Where(d => d.Property.Equals(expectedproperty)).ToArray();

            var expectedValue = declarationNode.ExprNode.TermNode.MinifyPrint();

            if (!declarationValues.Any(d => d.ExprNode.TermNode.MinifyPrint().Equals(expectedValue)))
            {
                Assert.Fail("Could not find [{0}] --> [{1}] --> {2}: {3}; ".InvariantFormat(expectedMediaQuery, expectedRule, expectedproperty, expectedValue));
            }
        }
Example #12
0
 private static void EnsureExpectedCssResult(IEnumerable <StyleSheetRuleNode> styleSheetRuleNodes, StyleSheetNode actualCss, MediaNode mediaQueryNode = null)
 {
     foreach (var styleSheetRuleNode in styleSheetRuleNodes)
     {
         if (styleSheetRuleNode is MediaNode)
         {
             var mediaNode = styleSheetRuleNode as MediaNode;
             EnsureExpectedCssResult(mediaNode.Rulesets, actualCss, mediaNode);
         }
         else if (styleSheetRuleNode is RulesetNode)
         {
             var ruleSetNode = styleSheetRuleNode as RulesetNode;
             foreach (var declarationNode in ruleSetNode.Declarations)
             {
                 EnsureDeclarationNode(declarationNode, ruleSetNode, mediaQueryNode, actualCss);
             }
         }
     }
 }
Example #13
0
 public abstract void VisitMedia(MediaNode node);
Example #14
0
 /// <summary>
 /// Prints the @media selector for the media node.
 /// </summary>
 /// <param name="node">The media node</param>
 /// <returns>The @media .... string.</returns>
 public static string PrintSelector(this MediaNode node)
 {
     return(CssConstants.Media + string.Join(",", node.MediaQueries.Select(mq => mq.MinifyPrint())));
 }