diff --git a/umbraco/cms/businesslogic/skinning/CssVariable.cs b/umbraco/cms/businesslogic/skinning/CssVariable.cs index 1044ddc116..5287855102 100644 --- a/umbraco/cms/businesslogic/skinning/CssVariable.cs +++ b/umbraco/cms/businesslogic/skinning/CssVariable.cs @@ -8,11 +8,20 @@ namespace umbraco.cms.businesslogic.skinning public class CssVariable { public string Name { get; set; } + public string DefaultValue { get; set; } public List Properties { get; set; } - public CssVariable(string Name) + public CssVariable(string name) { - this.Name = Name; + this.Name = name; + Properties = new List(); + } + + public CssVariable(string name, string defaultValue) + { + this.Name = name; + this.DefaultValue = defaultValue; + Properties = new List(); } } diff --git a/umbraco/cms/businesslogic/skinning/CssVariableProperty.cs b/umbraco/cms/businesslogic/skinning/CssVariableProperty.cs index 001d440556..5730a00b85 100644 --- a/umbraco/cms/businesslogic/skinning/CssVariableProperty.cs +++ b/umbraco/cms/businesslogic/skinning/CssVariableProperty.cs @@ -10,9 +10,9 @@ namespace umbraco.cms.businesslogic.skinning public string Name { get; set; } public List Selectors { get; set; } - public CssVariableProperty(string Name) + public CssVariableProperty(string name) { - this.Name = Name; + this.Name = name; Selectors = new List(); } } diff --git a/umbraco/cms/businesslogic/skinning/utils/SkinManifestParser.cs b/umbraco/cms/businesslogic/skinning/utils/SkinManifestParser.cs new file mode 100644 index 0000000000..089261dcc2 --- /dev/null +++ b/umbraco/cms/businesslogic/skinning/utils/SkinManifestParser.cs @@ -0,0 +1,83 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; + +namespace umbraco.cms.businesslogic.skinning.utils +{ + //will be used to parse a skin manifest during installation + //in case the skin is using css variables + public class SkinManifestParser + { + public string SkinFilePath; + + public SkinManifestParser() + { + + } + + public void ProcessSkinFile(string path) + { + SkinFilePath = path; + + List cssVariables = new List(); + //get all variables + + + CssParser parser = new CssParser(); + //add stylesheet contents + //parser.AddStyleSheet(@"C:\www\contour.local\1.0.3825.19924\build\css\runway.css"); + + + //build collection of properties and selectors for each variable + // - Var 1 - Property - Selector + // - Selector + // - Selector + // - Property - Selector + // - Selector + foreach (var ruleSet in parser.Styles) + { + string Selectors = ruleSet.Key; + + foreach (var declaration in ruleSet.Value.Attributes) + { + var property = declaration.Key; + var value = declaration.Value; + + foreach (CssVariable cssvar in cssVariables) + { + if (value.Contains(cssvar.Name)) + { + //add property + CssVariableProperty prop = + cssvar.Properties.Find(delegate(CssVariableProperty p) { return p.Name == property; }); + + if (prop == null) + prop = new CssVariableProperty(property); + + //add selector + //maybe split up the Selectors, since they can contain multiple + //also + String sel = prop.Selectors.Find(delegate(string s) { return s == Selectors; }); + + if (string.IsNullOrEmpty(sel)) + prop.Selectors.Add(Selectors); + + + if (!cssvar.Properties.Contains(prop)) + cssvar.Properties.Add(prop); + } + } + + } + + } + + //modify tasks that are using a variable + + //create default version of css (replace variables with default value) + + //save skin manifest + } + } +} diff --git a/umbraco/cms/umbraco.cms.csproj b/umbraco/cms/umbraco.cms.csproj index 54fd6fbb16..02843721b6 100644 --- a/umbraco/cms/umbraco.cms.csproj +++ b/umbraco/cms/umbraco.cms.csproj @@ -236,6 +236,7 @@ +