示例#1
0
        public override void Accept(ReactComponentVisitor visitor)
        {
            base.Accept(visitor);

            BeforePseudo?.Accept(visitor);
            foreach (var child in Children)
            {
                child.Accept(visitor);
            }
            AfterPseudo?.Accept(visitor);
        }
示例#2
0
        public override void ApplyLayoutStyles()
        {
            base.ApplyLayoutStyles();

            BeforePseudo?.ApplyLayoutStyles();
            foreach (var child in Children)
            {
                child.ApplyLayoutStyles();
            }
            AfterPseudo?.ApplyLayoutStyles();
        }
示例#3
0
        public override void ResolveStyle(bool recursive = false)
        {
            var inheritedChanges = Style.HasInheritedChanges;

            base.ResolveStyle(recursive);

            if (inheritedChanges || recursive)
            {
                BeforeRules = Context.StyleTree.GetMatchingBefore(this).ToList();
                if (BeforeRules.Count > 0)
                {
                    AddBefore();
                }
                else
                {
                    RemoveBefore();
                }
                BeforePseudo?.ResolveStyle();

                foreach (var child in Children)
                {
                    child.ResolveStyle(true);
                }

                AfterRules = Context.StyleTree.GetMatchingAfter(this).ToList();
                if (AfterRules.Count > 0)
                {
                    AddAfter();
                }
                else
                {
                    RemoveAfter();
                }
                AfterPseudo?.ResolveStyle();
            }
        }
示例#4
0
        public void ResolveStyle(bool recursive = false)
        {
            var inheritedChanges = Style.HasInheritedChanges;


            var inlineStyles  = RuleHelpers.GetRuleDic(Inline);
            var inlineLayouts = RuleHelpers.GetLayoutDic(Inline);

            if (inlineLayouts != null)
            {
                foreach (var l in inlineLayouts)
                {
                    inlineStyles[l.prop.name] = l.value;
                }
            }

            List <RuleTreeNode <StyleData> > matchingRules;

            if (Tag == "_before")
            {
                matchingRules = Parent.BeforeRules;
            }
            else if (Tag == "_after")
            {
                matchingRules = Parent.AfterRules;
            }
            else
            {
                matchingRules = Context.StyleTree.GetMatchingRules(this).ToList();
            }

            var importantIndex = Math.Max(0, matchingRules.FindIndex(x => x.Specifity <= RuleHelpers.ImportantSpecifity));
            var cssStyles      = new List <Dictionary <string, object> > {
            };

            for (int i = 0; i < importantIndex; i++)
            {
                cssStyles.AddRange(matchingRules[i].Data?.Rules);
            }
            cssStyles.Add(inlineStyles);
            for (int i = importantIndex; i < matchingRules.Count; i++)
            {
                cssStyles.AddRange(matchingRules[i].Data?.Rules);
            }

            Style.CssStyles = cssStyles;
            ApplyStyles();
            ApplyLayoutStyles();
            Style.MarkChangesSeen();


            if (inheritedChanges || recursive)
            {
                BeforeRules = Context.StyleTree.GetMatchingBefore(this).ToList();
                //if (BeforeRules.Count > 0) AddBefore();
                //else RemoveBefore();
                BeforePseudo?.ResolveStyle();

                foreach (var child in Children)
                {
                    child.ResolveStyle(true);
                }

                AfterRules = Context.StyleTree.GetMatchingAfter(this).ToList();
                //if (AfterRules.Count > 0) AddAfter();
                //else RemoveAfter();
                AfterPseudo?.ResolveStyle();
            }
        }
示例#5
0
 public void RemoveBefore()
 {
     BeforePseudo?.Destroy();
     BeforePseudo = null;
 }