예제 #1
0
        public List <CssRuleViewModel> GetCssRuleList(List <CmsCssRule> cssRules, Data.Models.WebSite website)
        {
            List <CssRuleViewModel> rules = new List <CssRuleViewModel>();

            foreach (var item in cssRules)
            {
                var ruleType = item.ruleType;
                if (item.ruleType == RuleType.ImportRule)
                {
                    CssRuleViewModel rule = new CssRuleViewModel();
                    rule.Selector = item.CssText;
                    rule.RuleType = ruleType;
                    rule.Id       = item.Id;
                    rules.Add(rule);
                }
                else if (item.ruleType == RuleType.MediaRule)
                {
                    CssRuleViewModel rule = new CssRuleViewModel();
                    rule.Selector = item.SelectorText;
                    rule.RuleType = ruleType;
                    List <CmsCssRule> subrules = website.SiteDb().CssRules.Query.Where(o => o.ParentCssRuleId == item.Id).SelectAll();

                    rule.Rules = this.GetCssRuleList(subrules, website);
                    rule.Id    = item.Id;
                    rules.Add(rule);
                }
                else
                {
                    // style rule or font face rule.

                    CssRuleViewModel rule = new CssRuleViewModel();
                    rule.RuleType = ruleType;
                    List <DeclarationViewModel> subdeclarations = new List <DeclarationViewModel>();

                    var cssdecls = Kooboo.Dom.CSS.CSSSerializer.deserializeDeclarationBlock(item.RuleText);

                    foreach (var jitem in cssdecls.item)
                    {
                        subdeclarations.Add(new DeclarationViewModel()
                        {
                            Name = jitem.propertyname, Value = jitem.value, Important = jitem.important
                        });
                    }

                    rule.Declarations = subdeclarations;
                    rule.Selector     = item.SelectorText;
                    rule.Id           = item.Id;
                    rules.Add(rule);
                }
            }

            return(rules);
        }
예제 #2
0
        private List <CssRuleViewModel> SetGetCssRule(List <CmsCssRule> allrules, List <CmsCssRule> currentrules)
        {
            List <CssRuleViewModel> result = new List <CssRuleViewModel>();

            foreach (var item in currentrules)
            {
                var ruleType = item.ruleType;
                if (item.ruleType == RuleType.ImportRule)
                {
                    CssRuleViewModel rule = new CssRuleViewModel();
                    rule.Selector = item.CssText;
                    rule.RuleType = ruleType;
                    rule.Id       = item.Id;
                    result.Add(rule);
                }
                else if (item.ruleType == RuleType.MediaRule)
                {
                    CssRuleViewModel rule = new CssRuleViewModel();
                    rule.Selector = item.SelectorText;
                    rule.RuleType = ruleType;
                    List <CmsCssRule> subrules = allrules.Where(o => o.ParentCssRuleId == item.Id).ToList();
                    rule.Rules = SetGetCssRule(allrules, subrules);
                    rule.Id    = item.Id;
                    result.Add(rule);
                }
                else
                {
                    // style rule or font face rule.
                    CssRuleViewModel rule = new CssRuleViewModel();
                    rule.RuleType = ruleType;
                    List <DeclarationViewModel> subdeclarations = new List <DeclarationViewModel>();

                    var cssdecls = Kooboo.Dom.CSS.CSSSerializer.deserializeDeclarationBlock(item.RuleText);

                    foreach (var jitem in cssdecls.item)
                    {
                        subdeclarations.Add(new DeclarationViewModel()
                        {
                            Name = jitem.propertyname, Value = jitem.value, Important = jitem.important
                        });
                    }

                    rule.Declarations = subdeclarations;
                    rule.Selector     = item.SelectorText;
                    rule.Id           = item.Id;
                    result.Add(rule);
                }
            }

            return(result);
        }
예제 #3
0
        private static CmsCssRuleChanges GetStyleRuleChangeItem(CssRuleViewModel rule)
        {
            List <CmsCssDeclaration> declarations = new List <CmsCssDeclaration>();

            if (rule.Declarations != null)
            {
                foreach (var item in rule.Declarations)
                {
                    declarations.Add(new CmsCssDeclaration()
                    {
                        PropertyName = item.Name, Value = item.Value, Important = item.Important
                    });
                }
            }
            var changeitem = new CmsCssRuleChanges()
            {
                ChangeType = ChangeType.Add, CssRuleId = rule.Id, selectorText = rule.Selector, Declarations = declarations
            };

            return(changeitem);
        }
예제 #4
0
        private static CmsCssRuleChanges GetMediaRuleAdded(CssRuleViewModel rule)
        {
            CmsCssRuleChanges change = new CmsCssRuleChanges();

            if (rule.Selector.IndexOf("@media", StringComparison.OrdinalIgnoreCase) == -1)
            {
                change.selectorText = "@media " + rule.Selector;
            }
            else
            {
                change.selectorText = rule.Selector;
            }

            string ruletext = string.Empty;

            foreach (var item in rule.Rules)
            {
                ruletext += "\r\n" + item.Selector + "\r\n{\r\n";
                List <CmsCssDeclaration> declarations = new List <CmsCssDeclaration>();
                if (item.Declarations != null)
                {
                    foreach (var decl in item.Declarations)
                    {
                        declarations.Add(new CmsCssDeclaration()
                        {
                            PropertyName = decl.Name, Value = decl.Value, Important = decl.Important
                        });
                    }
                    ruletext += CssService.SerializeCmsCssDeclaration(declarations);
                }
                ruletext += "\r\n}";
            }

            change.DeclarationText = ruletext;

            return(change);
        }