コード例 #1
0
 public virtual ActionResult ChangeHeaderBackground(string themeName)
 {
     var theme = new Theme(Site, themeName);
     ViewBag.VirtualPath = ServiceFactory.HeaderBackgroundManager.GetVirutalPath(theme);
     ViewBag.ContainerSize = ServiceFactory.HeaderBackgroundManager.GetContainerSize(Site);
     return View();
 }
コード例 #2
0
ファイル: ThemeFile.cs プロジェクト: Godoy/CMS
        /// <summary>
        /// Parses the object.
        /// </summary>
        /// <param name="relativePaths">The relative paths. <example>{"site1","themes","default","style1.css"}</example></param>
        /// <returns>
        /// the remaining paths.<example>{"site1"}</example>
        /// </returns>
        public override IEnumerable<string> ParseObject(IEnumerable<string> relativePaths)
        {
            //call base return {"site1","themes","default"}
            relativePaths = base.ParseObject(relativePaths);

            this.Theme = new Theme();

            // return {"site1"}
            return this.Theme.ParseObject(relativePaths);
        }
コード例 #3
0
ファイル: ThemeTests.cs プロジェクト: Epitomy/CMS
        public void TestPhysicalPath()
        {
            string themeName = "theme1";
            var site = new Site("Site1");
            var theme = new Theme(site, themeName);

            string expected1 = Path.Combine(site.PhysicalPath, "themes", themeName);

            Assert.AreEqual(expected1, theme.PhysicalPath, true);
        }
コード例 #4
0
ファイル: ThemeProvider.cs プロジェクト: Epitomy/CMS
        public IEnumerable<StyleFile> AllStylesEnumerable(Site site, string themeName)
        {
            var theme = new Theme(site, themeName);

            var fileNames = EnumerateCssFilesWithPath(site, themeName);

            fileNames = FileOrderHelper.OrderFiles(GetOrderFile(site, themeName), fileNames);

            return fileNames.Select(it => new StyleFile(theme, it).LastVersion());
        }
コード例 #5
0
ファイル: ThemeTests.cs プロジェクト: Epitomy/CMS
        public void TestVirtualPath()
        {
            string themeName = "theme1";
            var site = new Site("Site1");
            var theme = new Theme(site, themeName);

            string expected1 = Kooboo.Web.Url.UrlUtility.Combine(site.VirtualPath, "themes", themeName);

            Assert.AreEqual(expected1, theme.VirtualPath, true);
        }
コード例 #6
0
ファイル: ThemeTests.cs プロジェクト: Godoy/CMS
        public void TestParseFromPhysicalPath()
        {
            string siteName = "site1";
            string themeName = "theme1";
            string physicalPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "sites", siteName, "themes", themeName);

            var theme = new Theme(physicalPath);

            Assert.AreEqual(themeName, theme.Name);
            
            Assert.IsTrue(theme.Site.IsDummy);
            Assert.AreEqual(siteName, theme.Site.Name);
        }
コード例 #7
0
        public override ActionResult Index(string directoryPath)
        {
            ViewData["Title"] = "Themes".Localize();

            var themeName = ControllerContext.RequestContext.GetRequestValue("ThemeName");

            if (!string.IsNullOrEmpty(themeName))
            {
                var theme = new Theme(Site, themeName);
                ViewBag.Theme = theme;
            }

            return base.Index(directoryPath);
        }
コード例 #8
0
ファイル: ThemeRuleParser.cs プロジェクト: Godoy/CMS
        public static IEnumerable<ThemeFile> Parse(Theme theme, out string themeRuleBody, string baseUri=null)
        {
            theme = theme.LastVersion();
            IEnumerable<ThemeFile> themeFiles = ServiceFactory.ThemeManager.AllStyles(theme);
            ThemeRuleFile cssHackFile = ServiceFactory.ThemeManager.GetCssHack(theme);
            if (cssHackFile == null || !cssHackFile.Exists())
            {
                themeRuleBody = "";
                return themeFiles;
            }

            var themeRuleFiles = Parser.Parse(cssHackFile.Read(), (fileVirtualPath) => UrlUtility.ToHttpAbsolute(baseUri, new ThemeFile(theme, fileVirtualPath).LastVersion().VirtualPath), out themeRuleBody);

            return themeFiles.Where(it => !themeRuleFiles.Any(cf => cf.EqualsOrNullEmpty(it.FileName, StringComparison.CurrentCultureIgnoreCase)));
        }
コード例 #9
0
ファイル: ThemeProvider.cs プロジェクト: Epitomy/CMS
 public IEnumerable<ThemeImageFile> AllImagesEnumerable(Theme theme)
 {
     List<ThemeImageFile> list = new List<ThemeImageFile>();
     theme = theme.LastVersion();
     if (theme.Exists())
     {
         ThemeImageFile dummy = new ThemeImageFile(theme, "dummy");
         var baseDir = dummy.BasePhysicalPath;
         if (Directory.Exists(baseDir))
         {
             foreach (var file in Directory.EnumerateFiles(baseDir))
             {
                 list.Add(new ThemeImageFile(theme, Path.GetFileName(file)));
             }
         }
     }
     return list;
 }
コード例 #10
0
ファイル: HeaderBackgroundManager.cs プロジェクト: Godoy/CMS
 public virtual bool IsEanbled(Theme theme)
 {
     return false;
 }
コード例 #11
0
ファイル: HeaderBackgroundManager.cs プロジェクト: Godoy/CMS
 public virtual string GetVirutalPath(Theme theme)
 {
     return "";
 }
コード例 #12
0
ファイル: HeaderBackgroundManager.cs プロジェクト: Godoy/CMS
 public virtual void Change(Theme theme, string originalFile, int x, int y)
 {
 }
コード例 #13
0
ファイル: StyleFile.cs プロジェクト: Epitomy/CMS
 public StyleFile(Theme theme, string fileName)
     : base(theme, fileName)
 {
 }
コード例 #14
0
ファイル: ThemeProvider.cs プロジェクト: Epitomy/CMS
 public void Add(Theme item)
 {
     IOUtility.EnsureDirectoryExists(item.PhysicalPath);
 }
コード例 #15
0
        /// <summary>
        /// The appointed theme file url of site
        /// </summary>
        /// <param name="frontUrlHelper">The front url helper</param>
        /// <param name="themeName">the theme</param>
        /// <param name="relativeUrl">The relative theme file path of site</param>
        /// <returns></returns>
        public static IHtmlString ThemeFileUrl(this FrontUrlHelper frontUrlHelper, string baseUri, string themeName, string relativeUrl)
        {
            var site = Site.Current;
            string resourceDomain = site.ResourceDomain;
            IHtmlString url = new HtmlString("");
            if (!string.IsNullOrEmpty(themeName))
            {
                var fileExists = false;
                var themeFileUrl = "";
                do
                {
                    site = site.AsActual();
                    Theme theme = new Theme(site, themeName).LastVersion();
                    themeFileUrl = Kooboo.Web.Url.UrlUtility.Combine(theme.VirtualPath, relativeUrl);
                    var physicalPath = HttpContext.Current.Server.MapPath(themeFileUrl);
                    fileExists = File.Exists(physicalPath);

                    site = theme.Site.Parent;
                } while (site != null && !fileExists);
                if (!string.IsNullOrEmpty(resourceDomain))
                {
                    baseUri = resourceDomain;
                }
                return new HtmlString(UrlUtility.ToHttpAbsolute(baseUri, themeFileUrl));
            }
            return frontUrlHelper.ThemeFileUrl(baseUri, relativeUrl);
        }
コード例 #16
0
        /// <summary>
        /// The theme file url of site
        /// </summary>
        /// <param name="frontUrlHelper">The front url helper</param>
        /// <param name="site">The site</param>
        /// <param name="baseUri">Base uri</param>
        /// <param name="relativeThemeFilePath">The relative theme file path of site</param>
        /// <returns></returns>
        public static IHtmlString ThemeFileUrl(this FrontUrlHelper frontUrlHelper, Site site, string baseUri, string relativeThemeFilePath)
        {
            string resourceDomain = site.ResourceDomain;

            bool themeFileExists = false;
            string themeFileUrl = String.Empty;
            string themeFilePhysicalPath = String.Empty;

            do
            {
                site = site.AsActual();

                Theme theme = new Theme(site, site.Theme).LastVersion();
                themeFileUrl = UrlUtility.Combine(theme.VirtualPath, relativeThemeFilePath);
                themeFilePhysicalPath = HttpContext.Current.Server.MapPath(themeFileUrl);
                themeFileExists = File.Exists(themeFilePhysicalPath);

                site = theme.Site.Parent;
            } while (site != null && !themeFileExists);

            if (!String.IsNullOrEmpty(resourceDomain))
            {
                baseUri = resourceDomain; // CDN have high priority
            }
            return new HtmlString(UrlUtility.ToHttpAbsolute(baseUri, themeFileUrl));
        }
コード例 #17
0
ファイル: ThemeProvider.cs プロジェクト: Epitomy/CMS
 public void Update(Theme @new, Theme old)
 {
 }
コード例 #18
0
ファイル: ThemeImageFile.cs プロジェクト: Epitomy/CMS
 public ThemeImageFile(Theme theme, string fileName)
     : base(theme, fileName)
 {
 }
コード例 #19
0
ファイル: ThemeManager.cs プロジェクト: jason1234/CMS
 private ThemeRuleFile GetCssHack(Site site, string themeName)
 {
     while (site != null)
     {
         var theme = new Theme(site, themeName);
         var themeRuleFile = new ThemeRuleFile(theme);
         if (themeRuleFile.Exists())
         {
             return themeRuleFile;
         }
         site = site.Parent;
     }
     return null;
 }
コード例 #20
0
ファイル: ThemeManager.cs プロジェクト: jason1234/CMS
 public virtual ThemeRuleFile GetCssHack(Theme theme)
 {
     return GetCssHack(theme.Site, theme.Name);
 }
コード例 #21
0
ファイル: ThemeProvider.cs プロジェクト: Epitomy/CMS
 public IQueryable<ThemeImageFile> AllImages(Theme theme)
 {
     return AllImagesEnumerable(theme).AsQueryable();
 }
コード例 #22
0
ファイル: ThemeProvider.cs プロジェクト: Epitomy/CMS
 public void Remove(Theme item)
 {
     System.IO.DirectoryInfo di = new DirectoryInfo(item.PhysicalPath);
     di.Delete(true);
 }
コード例 #23
0
ファイル: ThemeProvider.cs プロジェクト: Epitomy/CMS
 public Theme Get(Theme dummy)
 {
     throw new NotImplementedException();
 }
コード例 #24
0
ファイル: ThemeManager.cs プロジェクト: jason1234/CMS
        private IEnumerable<string> EnumerateCssFilesWithPath(Site site, string themeName)
        {
            List<string> results = new List<string>();

            while (site != null)
            {
                Theme theme = new Theme(site, themeName);
                var baseDir = theme.PhysicalPath;
                if (Directory.Exists(baseDir))
                {
                    var tempResults = EnumerateCssFiles(baseDir);
                    if (results.Count == 0)
                    {
                        results.AddRange(tempResults);
                    }
                    else
                    {
                        foreach (var item in tempResults)
                        {
                            if (!results.Any(it => Path.GetFileName(it).Equals(Path.GetFileName(item), StringComparison.InvariantCultureIgnoreCase)))
                            {
                                results.Add(item);
                            }
                        }
                    }
                }
                site = site.Parent;
            }
            return results;
        }
コード例 #25
0
ファイル: ThemeFile.cs プロジェクト: Godoy/CMS
 public ThemeFile(Theme theme, string fileName)
     : base(theme.Site, fileName)
 {
     this.Theme = theme;
 }
コード例 #26
0
ファイル: ThemeManager.cs プロジェクト: jason1234/CMS
 public virtual IEnumerable<StyleFile> AllStyles(Theme theme)
 {
     return AllStylesEnumerable(theme.Site, theme.Name).AsQueryable();
 }
コード例 #27
0
ファイル: ThemeRuleFile.cs プロジェクト: Epitomy/CMS
 public ThemeRuleFile(Theme theme)
     : base(theme, "Theme.rule")
 {
 }
コード例 #28
0
ファイル: FrontUrlHelper.cs プロジェクト: hrvoje-grabusic/CMS
        /// <summary>
        /// the file URL under the theme of current site.
        /// </summary>
        /// <param name="relativeUrl">The relative URL.<example>images/logo.png</example></param>
        /// <returns></returns>
        public virtual IHtmlString ThemeFileUrl(string relativeUrl)
        {
            var site = this.Site;
            IHtmlString url = new HtmlString("");
            if (!string.IsNullOrEmpty(site.Name))
            {
                var fileExists = false;
                var themeFileUrl = "";
                do
                {
                    site = site.AsActual();

                    Theme theme = new Theme(site, site.Theme).LastVersion();
                    themeFileUrl = Kooboo.Web.Url.UrlUtility.Combine(theme.VirtualPath, relativeUrl);
                    var physicalPath = UrlUtility.MapPath(themeFileUrl);
                    fileExists = File.Exists(physicalPath);

                    site = theme.Site.Parent;
                } while (site != null && !fileExists);

                url = ResourceCDNUrl(themeFileUrl);
            }

            return url;
        }
コード例 #29
0
 public virtual ActionResult SaveBackground(string themeName, string Url, int Width, int Height, int x, int y)
 {
     var theme = new Theme(Site, themeName);
     ServiceFactory.HeaderBackgroundManager.Change(theme, Url, x, y);
     var filePath = Server.MapPath(Url);
     if (System.IO.File.Exists(filePath))
     {
         System.IO.File.Delete(filePath);
     }
     return Json(true);
 }