Ejemplo n.º 1
0
        public void CanGetMergeModeAttribute()
        {
            var pathProvider = new Mock <VirtualPathProvider>();

            pathProvider.SetupSkins();
            var skinEngine = new SkinEngine(pathProvider.Object);
            IDictionary <string, SkinTemplate> templates = skinEngine.GetSkinTemplates(false /* mobile */);

            SkinTemplate templateWithMergedFirstMergeMode = templates["Semagogy"];

            Assert.AreEqual(StyleMergeMode.MergedFirst, templateWithMergedFirstMergeMode.StyleMergeMode,
                            "MergeMode should be MergedFirst.");

            SkinTemplate templateWithMergedAfterMergeMode = templates["RedBook-Green.css"];

            Assert.AreEqual(StyleMergeMode.MergedAfter, templateWithMergedAfterMergeMode.StyleMergeMode,
                            "MergeMode should be MergedAfter.");

            SkinTemplate templateWithNoneMergeMode = templates["RedBook-Red.css"];

            Assert.AreEqual(StyleMergeMode.None, templateWithNoneMergeMode.StyleMergeMode, "MergeMode should be None.");

            Assert.AreNotEqual(StyleMergeMode.MergedAfter, templateWithNoneMergeMode.StyleMergeMode,
                               "MergeMode should not be MergedAfter.");

            SkinTemplate templateWithoutMergeMode = templates["RedBook-Blue.css"];

            Assert.AreEqual(StyleMergeMode.None, templateWithoutMergeMode.StyleMergeMode, "MergeMode should be None.");
        }
Ejemplo n.º 2
0
 public SkinViewModel(SkinTemplate skinTemplate, Func <SkinTemplate, string> getIconUrl, bool mobileOnly)
 {
     this.name    = System.Web.HttpUtility.HtmlEncode(skinTemplate.Name);
     this.icon    = System.Web.HttpUtility.HtmlEncode(getIconUrl(skinTemplate));
     this.skinKey = System.Web.HttpUtility.HtmlEncode(skinTemplate.SkinKey);
     this.mobile  = mobileOnly;
 }
Ejemplo n.º 3
0
        public void StyleSheetElementCollectionRendererRendersLinkElementsInRightOrder(string skinKey,
                                                                                       bool expectedFirst)
        {
            UnitTestHelper.SetHttpContextWithBlogRequest("localhost", "blog", string.Empty);
            var pathProvider = new Mock <VirtualPathProvider>();

            pathProvider.SetupSkins();
            var skinEngine = new SkinEngine(pathProvider.Object);

            var renderer = new StyleSheetElementCollectionRenderer(skinEngine);

            string       styleElements = renderer.RenderStyleElementCollection(skinKey);
            SkinTemplate template      = skinEngine.GetSkinTemplates(false)[skinKey];

            styleElements = styleElements.Trim('\r', '\n');
            string mergedCss = @"<link type=""text/css"" rel=""stylesheet"" href=""/Skins/" + template.TemplateFolder +
                               "/css.axd?name=" + skinKey + @""" />";

            if (expectedFirst)
            {
                Assert.IsTrue(styleElements.StartsWith(mergedCss, StringComparison.OrdinalIgnoreCase),
                              "Merged CSS is not in first position");
            }
            else
            {
                Assert.IsTrue(styleElements.EndsWith(mergedCss, StringComparison.OrdinalIgnoreCase),
                              "Merged CSS is not in last position");
            }
        }
Ejemplo n.º 4
0
 protected virtual bool LoadSkinTemplate()
 {
     if (SkinTemplate != null)
     {
         SkinTemplate.InstantiateIn(this);
         return(true);
     }
     return(false);
 }
        public void ScriptsWithParametricSrcAreNotMerged()
        {
            var pathProvider = new Mock <VirtualPathProvider>();

            pathProvider.SetupSkins();
            var skinEngine = new SkinEngine(pathProvider.Object);
            IDictionary <string, SkinTemplate> templates = skinEngine.GetSkinTemplates(false /* mobile */);
            SkinTemplate template    = templates["Piyo"];
            bool         canBeMerged = ScriptElementCollectionRenderer.CanScriptsBeMerged(template);

            Assert.IsFalse(canBeMerged, "Skins with scripts that have query string parameters should not be mergeable.");
        }
        public void ScriptsWithNoneScriptMergeModeAreNotMerged()
        {
            var pathProvider = new Mock <VirtualPathProvider>();

            pathProvider.SetupSkins();
            var skinEngine = new SkinEngine(pathProvider.Object);
            IDictionary <string, SkinTemplate> templates = skinEngine.GetSkinTemplates(false /* mobile */);
            SkinTemplate template    = templates["Semagogy"];
            bool         canBeMerged = ScriptElementCollectionRenderer.CanScriptsBeMerged(template);

            Assert.IsFalse(canBeMerged, "Skins with ScriptMergeMode=\"DontMerge\" should not be mergeable.");
        }
Ejemplo n.º 7
0
        protected void OnSaveSkinClicked()
        {
            Blog         blog         = SubtextContext.Blog;
            var          skinEngine   = new SkinEngine();
            SkinTemplate skinTemplate =
                skinEngine.GetSkinTemplates(false /* mobile */).ItemOrNull(Request.Form["SkinKey"]);

            blog.Skin.TemplateFolder = skinTemplate.TemplateFolder;
            blog.Skin.SkinStyleSheet = skinTemplate.StyleSheet;
            Repository.UpdateConfigData(blog);

            BindLocalUI();
        }
Ejemplo n.º 8
0
        protected string GetSkinIconImage(SkinTemplate skin)
        {
            var imageUrls = new[]
            {
                string.Format(CultureInfo.InvariantCulture, "~/skins/{0}/SkinIcon.png", skin.TemplateFolder),
                string.Format(CultureInfo.InvariantCulture, "~/skins/{0}/{1}-SkinIcon.png", skin.TemplateFolder,
                              skin.Name),
                "~/skins/_System/SkinIcon.png"
            };

            string imageUrl = imageUrls.First(path => System.IO.File.Exists(Server.MapPath(path)));

            return(HttpHelper.ExpandTildePath(imageUrl));
        }
Ejemplo n.º 9
0
        public void GetSkinTemplates_WithSkinConfigInFolder_AppliesConfig()
        {
            //arrange
            var    virtualFile = new Mock <VirtualFile>("~/skins/skin1/skin.config");
            Stream stream      =
                @"<?xml version=""1.0""?>
<SkinTemplates xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
    <SkinTemplate Name=""Skinny"" StyleMergeMode=""MergedAfter"" ScriptMergeMode=""Merge"">
      <Styles>
        <Style href=""~/skins/_System/commonstyle.css"" />
      </Styles>
    </SkinTemplate>
</SkinTemplates>"
                .ToStream();

            virtualFile.Setup(vf => vf.Open()).Returns(stream);

            var directories = new List <VirtualDirectory>();
            var skinDir     = new Mock <VirtualDirectory>("~/skins/skin1");

            skinDir.Setup(d => d.Name).Returns("Skin1");
            directories.Add(skinDir.Object);
            var skinsDir = new Mock <VirtualDirectory>("~/skins");

            skinsDir.Setup(s => s.Directories).Returns(directories);
            var vpp = new Mock <VirtualPathProvider>();

            vpp.Setup(v => v.GetDirectory("~/skins")).Returns(skinsDir.Object);
            vpp.Setup(v => v.FileExists("~/skins/Skin1/skin.config")).Returns(true);
            vpp.Setup(v => v.GetFile("~/skins/Skin1/skin.config")).Returns(virtualFile.Object);
            var skins = new SkinEngine(vpp.Object);

            //act
            IDictionary <string, SkinTemplate> skinTemplates = skins.GetSkinTemplates(false /* mobile */);

            //assert
            Assert.AreEqual(1, skinTemplates.Count);
            SkinTemplate template = skinTemplates.Values.First();

            Assert.AreEqual("Skinny", template.Name);
            Assert.AreEqual("Skin1", template.TemplateFolder);
            Assert.AreEqual(StyleMergeMode.MergedAfter, template.StyleMergeMode);
            Assert.AreEqual(ScriptMergeMode.Merge, template.ScriptMergeMode);
            Assert.AreEqual(1, template.Styles.Count());
        }
Ejemplo n.º 10
0
        public void CallsToCssHandlerAreNotRepeated(string skinKey, string exptectedElements)
        {
            UnitTestHelper.SetHttpContextWithBlogRequest("localhost", "blog", string.Empty);
            var pathProvider = new Mock <VirtualPathProvider>();

            pathProvider.SetupSkins();
            var skinEngine = new SkinEngine(pathProvider.Object);

            var    renderer      = new StyleSheetElementCollectionRenderer(skinEngine);
            string styleElements = renderer.RenderStyleElementCollection(skinKey);
            IDictionary <string, SkinTemplate> templates = skinEngine.GetSkinTemplates(false);
            SkinTemplate template = templates[skinKey];

            string mergedCss = @"<link type=""text/css"" rel=""stylesheet"" href=""/Skins/" + template.TemplateFolder +
                               "/css.axd?name=" + skinKey + @""" />";

            styleElements = styleElements.Replace(mergedCss, string.Empty);
            Assert.IsTrue(styleElements.Trim('\r', '\n').Equals(exptectedElements), "Not the expected stylesheet links");
        }
Ejemplo n.º 11
0
        public void RenderStyleElementCollection_WithNoStyles_RendersDefaultStyle()
        {
            // arrange
            UnitTestHelper.SetHttpContextWithBlogRequest("localhost", string.Empty, "/");
            var pathProvider = new Mock <VirtualPathProvider>();
            var skinEngine   = new SkinEngine(pathProvider.Object);
            var renderer     = new StyleSheetElementCollectionRenderer(skinEngine);
            var skinTemplate = new SkinTemplate {
                ExcludeDefaultStyle = false, Styles = null, TemplateFolder = "TestSkin"
            };

            // act
            string styleElements = renderer.RenderStyleElementCollection("TestSkin", skinTemplate);

            // assert
            const string defaultStyle = @"<link type=""text/css"" rel=""stylesheet"" href=""/Skins/TestSkin/style.css"" />";

            Assert.AreEqual(defaultStyle, styleElements.Trim());
        }
        public void CanGetScriptMergeModeAttribute()
        {
            var pathProvider = new Mock <VirtualPathProvider>();

            pathProvider.SetupSkins();
            var skinEngine = new SkinEngine(pathProvider.Object);
            IDictionary <string, SkinTemplate> templates = skinEngine.GetSkinTemplates(false /* mobile */);

            SkinTemplate templateWithMergeScriptMergeMode = templates["Piyo"];

            Assert.IsTrue(templateWithMergeScriptMergeMode.MergeScripts, "ScriptMergeMode should be Merge.");

            SkinTemplate templateWithDontMergeScriptMergeMode = templates["Semagogy"];

            Assert.IsFalse(templateWithDontMergeScriptMergeMode.MergeScripts, "ScriptMergeMode should be DontMerge.");

            SkinTemplate templateWithoutScriptMergeMode = templates["RedBook-Green.css"];

            Assert.IsFalse(templateWithoutScriptMergeMode.MergeScripts, "ScriptMergeMode should be None.");
        }
Ejemplo n.º 13
0
        public void CanGetExcludeDefaultStyleAttribute()
        {
            var pathProvider = new Mock <VirtualPathProvider>();

            pathProvider.SetupSkins();
            var skinEngine = new SkinEngine(pathProvider.Object);
            IDictionary <string, SkinTemplate> templates = skinEngine.GetSkinTemplates(false /* mobile */);

            SkinTemplate templateWithTrueExcludedDefault = templates["RedBook-Blue.css"];

            Assert.IsTrue(templateWithTrueExcludedDefault.ExcludeDefaultStyle, "ExcludeDefaultStyle should be True.");

            SkinTemplate templateWithFalseExcludedDefault = templates["Gradient"];

            Assert.IsFalse(templateWithFalseExcludedDefault.ExcludeDefaultStyle, "ExcludeDefaultStyle should be false.");

            SkinTemplate templateWithoutExcludedDefault = templates["Piyo"];

            Assert.IsFalse(templateWithoutExcludedDefault.ExcludeDefaultStyle, "ExcludeDefaultStyle should be false.");
        }
Ejemplo n.º 14
0
        public void GetSkinTemplates_WithMobileOnlyFalse_ReturnsSkinWithMobileSupportSetToSupported()
        {
            //arrange
            var    virtualFile = new Mock <VirtualFile>("~/skins/skin1/skin.config");
            Stream stream      =
                @"<?xml version=""1.0""?>
<SkinTemplates xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"">
    <SkinTemplate Name=""Mobile"" MobileSupport=""Supported"">
      <Styles>
        <Style href=""~/skins/_System/commonstyle.css"" />
      </Styles>
    </SkinTemplate>
</SkinTemplates>"
                .ToStream();

            virtualFile.Setup(vf => vf.Open()).Returns(stream);

            var directories = new List <VirtualDirectory>();
            var skinDir     = new Mock <VirtualDirectory>("~/skins/skin1");

            skinDir.Setup(d => d.Name).Returns("Skin1");
            directories.Add(skinDir.Object);
            var skinsDir = new Mock <VirtualDirectory>("~/skins");

            skinsDir.Setup(s => s.Directories).Returns(directories);
            var vpp = new Mock <VirtualPathProvider>();

            vpp.Setup(v => v.GetDirectory("~/skins")).Returns(skinsDir.Object);
            vpp.Setup(v => v.FileExists("~/skins/Skin1/skin.config")).Returns(true);
            vpp.Setup(v => v.GetFile("~/skins/Skin1/skin.config")).Returns(virtualFile.Object);
            var skins = new SkinEngine(vpp.Object);

            //act
            IDictionary <string, SkinTemplate> skinTemplates = skins.GetSkinTemplates(mobileOnly: false);

            //assert
            Assert.AreEqual(1, skinTemplates.Count);
            SkinTemplate template = skinTemplates.Values.First();

            Assert.AreEqual("Mobile", template.Name);
        }
Ejemplo n.º 15
0
        public ActionResult Save(string skinKey, bool mobile)
        {
            Blog         blog         = SubtextContext.Blog;
            var          skinEngine   = new SkinEngine();
            SkinTemplate skinTemplate =
                skinEngine.GetSkinTemplates(mobile).GetValueOrDefault(skinKey);

            if (!mobile)
            {
                blog.Skin.TemplateFolder = skinTemplate.TemplateFolder;
                blog.Skin.SkinStyleSheet = skinTemplate.StyleSheet;
            }
            else
            {
                blog.MobileSkin.TemplateFolder = skinTemplate.TemplateFolder;
                blog.MobileSkin.SkinStyleSheet = skinTemplate.StyleSheet;
            }
            SubtextContext.Repository.UpdateConfigData(blog);

            return(Json(new { }));
        }
Ejemplo n.º 16
0
 public BindKeyExample()
 {
     SavedSkin = Player.Skin;
     BindKey(Keys.F7, new KeyPressDelegate(SpawnCar));
     BindKey(Keys.F8, new KeyPressDelegate(ChangeSkin));
 }