Esempio n. 1
0
        public ActionResult Install(string id)
        {
            if (String.IsNullOrEmpty(id))
            {
                throw new ArgumentNullException("id");
            }
            var projectManager = GetProjectManager();
            var packages = projectManager.SourceRepository.FindPackagesById(id).OrderByDescending(p => p.Version);
            if (packages == null)
            {
                throw new InvalidOperationException("Package does not exist");
            }
            var package = packages.FirstOrDefault();
            if (package == null)
            {
                throw new InvalidOperationException("Package does not exist");
            }
            projectManager.InstallPackage(package);

            // Get the skin.
            var skinEngine = new SkinEngine();
            var skinsWithoutMobileOnly = skinEngine.GetSkinTemplatesGroupedByFolder(mobileOnly: false);

            var packageViewModel = new PackageViewModel(package, skinsWithoutMobileOnly, GetSkinIconImage, mobileOnly: false);

            if (Request.IsAjaxRequest())
            {
                return Json(packageViewModel, JsonRequestBehavior.AllowGet);
            }

            return View(package);
        }
Esempio n. 2
0
        public void ScriptElementCollectionRendererRendersJSHandlerScript()
        {
            UnitTestHelper.SetHttpContextWithBlogRequest("localhost", "blog", string.Empty);

            var pathProvider = new Mock<VirtualPathProvider>();
            pathProvider.SetupSkins();
            var skinEngine = new SkinEngine(pathProvider.Object);

            var renderer = new ScriptElementCollectionRenderer(skinEngine);
            string scriptElements = renderer.RenderScriptElementCollection("RedBook-Blue.css");

            string script =
                @"<script type=""text/javascript"" src=""/Skins/RedBook/js.axd?name=RedBook-Blue.css""></script>";
            Assert.IsTrue(scriptElements.Contains(script), "Rendered the script improperly.");
        }
Esempio n. 3
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.");
        }
Esempio n. 4
0
        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.");
        }
Esempio n. 5
0
        public void ScriptElementCollectionRendererRendersScriptElements()
        {
            UnitTestHelper.SetHttpContextWithBlogRequest("localhost", "blog", string.Empty);

            var pathProvider = new Mock<VirtualPathProvider>();
            pathProvider.SetupSkins();
            var skinEngine = new SkinEngine(pathProvider.Object);
            var renderer = new ScriptElementCollectionRenderer(skinEngine);
            string scriptElements = renderer.RenderScriptElementCollection("RedBook-Green.css");

            string script = @"<script type=""text/javascript"" src=""/Skins/RedBook/blah.js""></script>";
            Assert.IsTrue(scriptElements.Contains(script), "Rendered the script improperly.");

            scriptElements = renderer.RenderScriptElementCollection("Nature-Leafy.css");
            script = @"<script type=""text/javascript"" src=""/scripts/XFNHighlighter.js""></script>";
            Assert.IsTrue(scriptElements.Contains(script), "Rendered the script improperly. We got: " + scriptElements);
        }
Esempio n. 6
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");
        }
Esempio n. 7
0
        public void GetSkinTemplates_WithFolders_ReturnsSkinPerFolder()
        {
            //arrange
            var directories = new List<VirtualDirectory>();
            for(int i = 0; i < 3; i++)
            {
                var skinDir = new Mock<VirtualDirectory>("~/skins/skin" + i);
                skinDir.Setup(d => d.Name).Returns("Skin" + i);
                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);
            var skins = new SkinEngine(vpp.Object);

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

            //assert
            Assert.AreEqual(3, skinTemplates.Count);
            Assert.AreEqual("Skin0", skinTemplates.Values.First().Name);
            Assert.AreEqual("Skin0", skinTemplates.Values.First().TemplateFolder);
        }
Esempio n. 8
0
        public void GetSkinTemplates_WithMobileNotSpecified_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(false /* mobile */);

            //assert
            Assert.AreEqual(1, skinTemplates.Count);
            SkinTemplate template = skinTemplates.Values.First();
            Assert.AreEqual("Mobile", template.Name);
        }
Esempio n. 9
0
        public void StyleSheetElementCollectionRendererRendersMergedCssLinkElements(string subFolder,
            string applicationPath,
            string expectedPrintCssPath)
        {
            UnitTestHelper.SetHttpContextWithBlogRequest("localhost", subFolder, applicationPath);
            var pathProvider = new Mock<VirtualPathProvider>();
            pathProvider.SetupSkins();
            var skinEngine = new SkinEngine(pathProvider.Object);

            var renderer = new StyleSheetElementCollectionRenderer(skinEngine);
            string styleElements = renderer.RenderStyleElementCollection("Piyo");

            string printCss =
                string.Format(
                    @"<link media=""screen"" type=""text/css"" rel=""stylesheet"" title=""fixed"" href=""{0}"" />",
                    expectedPrintCssPath);
            Assert.IsTrue(styleElements.Contains(printCss, StringComparison.OrdinalIgnoreCase),
                          "Expected the fixed screen css to be there.");
        }
Esempio n. 10
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");
            }
        }
Esempio 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());
        }
Esempio n. 12
0
        public void MergedCssDoesntContainStyleWithMediaAndTitle()
        {
            UnitTestHelper.SetHttpContextWithBlogRequest("localhost", "blog", string.Empty);
            var pathProvider = new Mock<VirtualPathProvider>();
            pathProvider.SetupSkins();
            var skinEngine = new SkinEngine(pathProvider.Object);

            var renderer = new StyleSheetElementCollectionRenderer(skinEngine);
            var mergedStyles = (List<StyleDefinition>)renderer.GetStylesToBeMerged("Piyo");

            Assert.IsFalse(mergedStyles.Contains(new StyleDefinition("/Skins/Piyo/piyo-fixed.css", "screen")),
                           "Skin Piyo should not have the fixed screen css in the merged CSS");
        }
Esempio n. 13
0
        public void MergedCssDoesntContainDefaultIfExcluded()
        {
            UnitTestHelper.SetHttpContextWithBlogRequest("localhost", "blog", string.Empty);
            var pathProvider = new Mock<VirtualPathProvider>();
            pathProvider.SetupSkins();
            var skinEngine = new SkinEngine(pathProvider.Object);

            var renderer = new StyleSheetElementCollectionRenderer(skinEngine);
            var mergedStyles = (List<StyleDefinition>)renderer.GetStylesToBeMerged("WPSkin");

            Assert.IsFalse(mergedStyles.Contains(new StyleDefinition("/Skins/WPSkin/style.css")),
                           "Skin WPSkin should not have the default style.css");
        }
Esempio n. 14
0
        public void MergedCssContainsStyleWithMedia()
        {
            UnitTestHelper.SetHttpContextWithBlogRequest("localhost", "blog", string.Empty);
            var pathProvider = new Mock<VirtualPathProvider>();
            pathProvider.SetupSkins();
            var skinEngine = new SkinEngine(pathProvider.Object);

            var renderer = new StyleSheetElementCollectionRenderer(skinEngine);
            var mergedStyles = (List<StyleDefinition>)renderer.GetStylesToBeMerged("Piyo");

            Assert.IsTrue(mergedStyles.Contains(new StyleDefinition("/Skins/Piyo/print.css", "print")),
                          "Skin Piyo should have the print css in the merged css");
        }
Esempio n. 15
0
        public void ScriptsWithRemoteSrcAreNotMerged()
        {
            var pathProvider = new Mock<VirtualPathProvider>();
            pathProvider.SetupSkins();
            var skinEngine = new SkinEngine(pathProvider.Object);

            IDictionary<string, SkinTemplate> templates = skinEngine.GetSkinTemplates(false /* mobile */);
            SkinTemplate template = templates["RedBook-Red.css"];
            bool canBeMerged = ScriptElementCollectionRenderer.CanScriptsBeMerged(template);

            Assert.IsFalse(canBeMerged, "Skins with remote scripts should not be mergeable.");
        }
 public ScriptElementCollectionRenderer(SkinEngine skinEngine)
 {
     _skinEngine = skinEngine;
 }
 public ScriptElementCollectionRenderer(SkinEngine skinEngine)
 {
     _skinEngine = skinEngine;
 }
Esempio n. 18
0
        protected void OnSaveSkinClicked()
        {
            Blog blog = SubtextContext.Blog;
            var skinEngine = new SkinEngine();
            SkinTemplate skinTemplate =
                skinEngine.GetSkinTemplates(false /* mobile */).GetValueOrDefault(Request.Form["SkinKey"]);
            blog.Skin.TemplateFolder = skinTemplate.TemplateFolder;
            blog.Skin.SkinStyleSheet = skinTemplate.StyleSheet;
            Repository.UpdateConfigData(blog);

            BindLocalUI();
        }
Esempio n. 19
0
        private IEnumerable<PackageViewModel> GetPackagesFromSkinTemplates(bool mobileOnly)
        {
            var packages = NuGetService.LocalRepository.GetPackages();

            var skinEngine = new SkinEngine();
            var skins = skinEngine.GetSkinTemplatesGroupedByFolder(mobileOnly: mobileOnly);

            return from p in packages
                   where skins.ContainsKey(p.Id)
                   select new PackageViewModel(p, skins, GetSkinIconImage, mobileOnly);
        }
Esempio n. 20
0
 private SkinViewModel GetSkinFromSkinKey(string skinKey, bool mobileOnly)
 {
     var skinEngine = new SkinEngine();
     var skins = skinEngine.GetSkinTemplates(mobileOnly: mobileOnly);
     var skinTemplate = skins.GetValueOrDefault(skinKey ?? "Naked");
     if (skinTemplate == null)
     {
         skinTemplate = skins.First().Value;
     }
     return new SkinViewModel { name = skinTemplate.Name, icon = GetSkinIconImage(skinTemplate), skinKey = skinTemplate.SkinKey, mobile = mobileOnly };
 }
Esempio n. 21
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 { });
        }
Esempio n. 22
0
        public void StyleSheetElementCollectionRenderer_WithNoneMergeModeAndSecondaryStyle_RendersPlainCssLinkElements(
            string subFolder, string applicationPath, string expectedPrintCssPath, string expectedDefaultCssPath,
            string expectedSecondaryCssPath)
        {
            UnitTestHelper.SetHttpContextWithBlogRequest("localhost", subFolder, applicationPath);
            var pathProvider = new Mock<VirtualPathProvider>();
            pathProvider.SetupSkins();
            var skinEngine = new SkinEngine(pathProvider.Object);

            var renderer = new StyleSheetElementCollectionRenderer(skinEngine);
            string styleElements = renderer.RenderStyleElementCollection("Lightz-light.css");

            string printCss =
                string.Format(@"<link media=""print"" type=""text/css"" rel=""stylesheet"" href=""{0}"" />",
                              expectedPrintCssPath);
            Assert.IsTrue(styleElements.Contains(printCss, StringComparison.OrdinalIgnoreCase),
                          "Expected the printcss to be there.");

            string defaultCss = string.Format(@"<link type=""text/css"" rel=""stylesheet"" href=""{0}"" />",
                                              expectedDefaultCssPath);
            Assert.IsTrue(styleElements.Contains(defaultCss, StringComparison.OrdinalIgnoreCase),
                          "Expected the default css to be there.");

            string secondaryCss = string.Format(@"<link type=""text/css"" rel=""stylesheet"" href=""{0}"" />",
                                                expectedSecondaryCssPath);
            Assert.IsTrue(styleElements.Contains(secondaryCss, StringComparison.OrdinalIgnoreCase),
                          "Expected the secondary css to be there.");
        }
Esempio n. 23
0
        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.");
        }
 public StyleSheetElementCollectionRenderer(SkinEngine skinEngine)
 {
     _skinEngine = skinEngine;
 }
Esempio n. 25
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.");
        }
Esempio n. 26
0
        public void GetSkinTemplates_WithSpecialFolders_IgnoresSpecialFolders()
        {
            //arrange
            var directories = new List<VirtualDirectory>();
            var nonSkinDir = new Mock<VirtualDirectory>("~/skins/_system");
            nonSkinDir.Setup(d => d.Name).Returns("_system");
            directories.Add(nonSkinDir.Object);
            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);
            var skins = new SkinEngine(vpp.Object);

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

            //assert
            Assert.AreEqual(1, skinTemplates.Count);
            Assert.AreEqual("Skin1", skinTemplates.Values.First().Name);
        }
 public StyleSheetElementCollectionRenderer(SkinEngine skinEngine)
 {
     _skinEngine = skinEngine;
 }
Esempio n. 28
0
</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);
        }

        [Test]
        public void GetSkinTemplates_WithMobileOnlyTrue_DoesNotReturnSkinThatDoesNotSupportMobile()
        {
            //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"" MobileSupported=""None"">
          <Styles>
            <Style href=""~/skins/_System/commonstyle.css"" />
          </Styles>
        </SkinTemplate>
    </SkinTemplates>"
                    .ToStream();