Taiizor.Starterkit by Taiizor

<PackageReference Include="Taiizor.Starterkit" Version="1.1.2.4" />

 Theme

public class Theme : ITheme
using Microsoft.AspNetCore.Http.Features; using System; using System.Collections.Generic; using System.Globalization; using System.IO; using System.IO.Compression; using System.Linq; using System.Reflection; using System.Runtime.CompilerServices; using Taiizor.Starterkit.Enum; using Taiizor.Starterkit.Interface; namespace Taiizor.Starterkit.Extension { public class Theme : ITheme { private string _modeDefault = "system"; private string _localeDefault = "en-GB"; private bool _modeSwitchEnabled = true; private bool _localeSwitchEnabled = true; private DirectionEnum _direction; private readonly SortedDictionary<string, string[]> _htmlClasses = new SortedDictionary<string, string[]>(); private readonly SortedDictionary<string, SortedDictionary<string, string>> _htmlAttributes = new SortedDictionary<string, SortedDictionary<string, string>>(); private readonly List<string> _jsFiles = new List<string>(); private readonly List<string> _cssFiles = new List<string>(); private readonly List<string> _fontFiles = new List<string>(); private readonly List<string> _vendorFiles = new List<string>(); public void AddHtmlAttribute(string scope, string attributeName, string attributeValue) { SortedDictionary<string, string> sortedDictionary = new SortedDictionary<string, string>(); if (_htmlAttributes.ContainsKey(scope)) sortedDictionary = _htmlAttributes[scope]; sortedDictionary[attributeName] = attributeValue; _htmlAttributes[scope] = sortedDictionary; } public void AddHtmlClass(string scope, string className) { List<string> list = new List<string>(); if (_htmlClasses.TryGetValue(scope, out string[] value)) list = value.ToList(); list.Add(className); _htmlClasses[scope] = list.ToArray(); } public string PrintHtmlAttributes(string scope) { List<string> list = new List<string>(); if (_htmlAttributes.TryGetValue(scope, out SortedDictionary<string, string> value)) { foreach (KeyValuePair<string, string> item2 in value) { string item = item2.Key + "=\"" + item2.Value + "\""; list.Add(item); } return string.Join(" ", list); } return null; } public string PrintHtmlClasses(string scope) { if (_htmlClasses.TryGetValue(scope, out string[] value)) return string.Join(" ", value); return null; } public string GetSvgIcon(string path, string classNames) { DefaultInterpolatedStringHandler val = default(DefaultInterpolatedStringHandler); val..ctor(11, 3); val.AppendLiteral("./wwwroot/"); val.AppendFormatted(ThemeSettings.Config.AssetsDir); val.AppendLiteral("/"); val.AppendFormatted(ThemeSettings.Config.SvgDir); val.AppendFormatted(path); string text = val.ToStringAndClear(); string text2 = "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" viewBox=\"0 0 100 100\"><rect width=\"100\" height=\"100\" fill=\"#FF9900\" rx=\"4\" ry=\"4\"/><rect width=\"50\" height=\"50\" fill=\"#FFB13B\" rx=\"4\" ry=\"4\"/><rect width=\"50\" height=\"50\" x=\"50\" y=\"50\" fill=\"#de8500\" rx=\"4\" ry=\"4\"/><g fill=\"#ff9900\"><circle cx=\"50\" cy=\"18.4\" r=\"18.4\"/><circle cx=\"72.4\" cy=\"27.6\" r=\"18.4\"/><circle cx=\"81.6\" cy=\"50\" r=\"18.4\"/><circle cx=\"72.4\" cy=\"72.4\" r=\"18.4\"/><circle cx=\"50\" cy=\"81.6\" r=\"18.4\"/><circle cx=\"27.6\" cy=\"72.4\" r=\"18.4\"/><circle cx=\"18.4\" cy=\"50\" r=\"18.4\"/><circle cx=\"27.6\" cy=\"27.6\" r=\"18.4\"/></g><path d=\"M63.086 18.385c0-7.227-5.859-13.086-13.1-13.086-7.235 0-13.096 5.859-13.096 13.086-5.1-5.11-13.395-5.11-18.497 0-5.119 5.12-5.119 13.408 0 18.524-7.234 0-13.103 5.859-13.103 13.085 0 7.23 5.87 13.098 13.103 13.098-5.119 5.11-5.119 13.395 0 18.515 5.102 5.104 13.397 5.104 18.497 0 0 7.228 5.86 13.083 13.096 13.083 7.24 0 13.1-5.855 13.1-13.083 5.118 5.104 13.416 5.104 18.513 0 5.101-5.12 5.101-13.41 0-18.515 7.216 0 13.081-5.869 13.081-13.098 0-7.227-5.865-13.085-13.081-13.085 5.101-5.119 5.101-13.406 0-18.524-5.097-5.11-13.393-5.11-18.513 0z\"/><path fill=\"#ffffff\" d=\"M55.003 23.405v14.488L65.26 27.64c0-1.812.691-3.618 2.066-5.005 2.78-2.771 7.275-2.771 10.024 0 2.771 2.766 2.771 7.255 0 10.027-1.377 1.375-3.195 2.072-5.015 2.072L62.101 44.982H76.59c1.29-1.28 3.054-2.076 5.011-2.076 3.9 0 7.078 3.179 7.078 7.087 0 3.906-3.178 7.088-7.078 7.088-1.957 0-3.721-.798-5.011-2.072H62.1l10.229 10.244c1.824 0 3.642.694 5.015 2.086 2.774 2.759 2.774 7.25 0 10.01-2.75 2.774-7.239 2.774-10.025 0-1.372-1.372-2.064-3.192-2.064-5.003L55 62.094v14.499c1.271 1.276 2.084 3.054 2.084 5.013 0 3.906-3.177 7.077-7.098 7.077-3.919 0-7.094-3.167-7.094-7.077 0-1.959.811-3.732 2.081-5.013V62.094L34.738 72.346c0 1.812-.705 3.627-2.084 5.003-2.769 2.772-7.251 2.772-10.024 0-2.775-2.764-2.775-7.253 0-10.012 1.377-1.39 3.214-2.086 5.012-2.086l10.257-10.242H23.414c-1.289 1.276-3.072 2.072-5.015 2.072-3.917 0-7.096-3.18-7.096-7.088s3.177-7.087 7.096-7.087c1.94 0 3.725.796 5.015 2.076h14.488L27.646 34.736c-1.797 0-3.632-.697-5.012-2.071-2.775-2.772-2.775-7.26 0-10.027 2.773-2.771 7.256-2.771 10.027 0 1.375 1.386 2.083 3.195 2.083 5.005l10.235 10.252V23.407c-1.27-1.287-2.082-3.053-2.082-5.023 0-3.908 3.175-7.079 7.096-7.079 3.919 0 7.097 3.168 7.097 7.079-.002 1.972-.816 3.735-2.087 5.021z\"/><g><path fill=\"#000000\" d=\"M5.3 50h89.38v40q0 5-5 5H10.3q-5 0-5-5Z\"/><path fill=\"#3f3f3f\" d=\"M14.657 54.211h71.394c2.908 0 5.312 2.385 5.312 5.315v17.91c-27.584-3.403-54.926-8.125-82.011-7.683V59.526c.001-2.93 2.391-5.315 5.305-5.315z\"/><path fill=\"#ffffff\" stroke=\"#000000\" stroke-width=\".5035\" d=\"M18.312 72.927c-2.103-2.107-3.407-5.028-3.407-8.253 0-6.445 5.223-11.672 11.666-11.672 6.446 0 11.667 5.225 11.667 11.672h-6.832c0-2.674-2.168-4.837-4.835-4.837-2.663 0-4.838 2.163-4.838 4.837 0 1.338.549 2.536 1.415 3.42.883.874 2.101 1.405 3.423 1.405v.012c3.232 0 6.145 1.309 8.243 3.416 2.118 2.111 3.424 5.034 3.424 8.248 0 6.454-5.221 11.68-11.667 11.68-6.442 0-11.666-5.222-11.666-11.68h6.828c0 2.679 2.175 4.835 4.838 4.835 2.667 0 4.835-2.156 4.835-4.835 0-1.329-.545-2.527-1.429-3.407-.864-.88-2.082-1.418-3.406-1.418-3.23 0-6.142-1.314-8.259-3.423zM61.588 53.005l-8.244 39.849h-6.85l-8.258-39.849h6.846l4.838 23.337 4.835-23.337zM73.255 69.513h11.683v11.664c0 6.452-5.226 11.678-11.669 11.678-6.441 0-11.666-5.226-11.666-11.678V64.676h-.017C61.586 58.229 66.827 53 73.253 53c6.459 0 11.683 5.225 11.683 11.676h-6.849c0-2.674-2.152-4.837-4.834-4.837-2.647 0-4.82 2.163-4.82 4.837v16.501c0 2.675 2.173 4.837 4.82 4.837 2.682 0 4.834-2.162 4.834-4.827V76.348h-4.834l.002-6.835z\"/></g></svg>"; if (File.Exists(text)) text2 = File.ReadAllText(text); val..ctor(22, 2); val.AppendLiteral("<span class=\""); val.AppendFormatted(classNames); val.AppendLiteral("\">"); val.AppendFormatted(text2); val.AppendLiteral("</span>"); return val.ToStringAndClear(); } public void SetDomain(string flag) { ThemeSettings.Config.Domain = flag; } public string GetDomain() { return ThemeSettings.Config.Domain; } public void SetExceptionHandler(string flag) { ThemeSettings.Config.ExceptionHandler = flag; } public string GetExceptionHandler() { return ThemeSettings.Config.ExceptionHandler; } public void SetMapFallbackPage(string flag) { ThemeSettings.Config.MapFallbackPage = flag; } public string GetMapFallbackPage() { return ThemeSettings.Config.MapFallbackPage; } public void SetVersion(string flag) { ThemeSettings.Config.Version = flag; } public string GetVersion() { return ThemeSettings.Config.Version; } public void SetAssetVersion(bool flag) { ThemeSettings.Config.Assets.Version = flag; } public bool GetAssetVersion() { return ThemeSettings.Config.Assets.Version; } public void SetUri(string flag) { ThemeSettings.Config.Uri = flag; } public string GetUri() { return ThemeSettings.Config.Uri; } public void SetLocaleSwitch(bool flag) { _localeSwitchEnabled = flag; } public bool IsLocaleSwitchEnabled() { return _localeSwitchEnabled; } public void SetLocale(string flag) { if (GetLocale() != flag) { CultureInfo.CurrentCulture = new CultureInfo(flag); CultureInfo.CurrentUICulture = new CultureInfo(flag); CultureInfo.DefaultThreadCurrentCulture = new CultureInfo(flag); CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo(flag); } } public string GetLocale() { return CultureInfo.CurrentCulture.Name; } public string GetLocaleLower() { return GetLocale().ToLowerInvariant(); } public string GetLocaleReplace() { return GetLocale().Replace("-", "_"); } public void SetLocaleDefault(string flag) { _localeDefault = flag; } public string GetLocaleDefault() { return _localeDefault; } public string GetLocaleDefaultLower() { return _localeDefault.ToLowerInvariant(); } public string GetLocaleDefaultReplace() { return _localeDefault.Replace("-", "_"); } public void SetModeSwitch(bool flag) { _modeSwitchEnabled = flag; } public bool IsModeSwitchEnabled() { return _modeSwitchEnabled; } public void SetModeDefault(string flag) { _modeDefault = flag; } public string GetModeDefault() { return _modeDefault; } public void SetDirection(DirectionEnum direction) { _direction = direction; } public DirectionEnum GetDirection() { return _direction; } public bool IsRtlDirection() { return _direction == DirectionEnum.RTL; } public string GetAssetPath(string path) { return "/" + ThemeSettings.Config.AssetsDir + path; } public string GetPartials(string path) { return ThemeSettings.Config.PartialsDir + "/" + path; } public string GetLayout(string path) { return ThemeSettings.Config.LayoutDir + "/" + path; } public string GetPages(string path) { return ThemeSettings.Config.PagesDir + "/" + path; } public string ExtendCssFilename(string path) { if (IsRtlDirection()) path = path.Replace(".css", ".rtl.css"); return path; } public Dictionary<string, Dictionary<string, string>> GetSocialMedias() { Dictionary<string, Dictionary<string, string>> dictionary = new Dictionary<string, Dictionary<string, string>>(); PropertyInfo[] properties = ThemeSettings.Config.SocialMedia.GetType().GetProperties(); foreach (PropertyInfo propertyInfo in properties) { if (!dictionary.ContainsKey(propertyInfo.Name)) { object value = propertyInfo.GetValue(ThemeSettings.Config.SocialMedia); if (value != null) { Dictionary<string, string> obj = value as Dictionary<string, string>; obj.TryGetValue("Url", out string value2); obj.TryGetValue("Alt", out string value3); obj.TryGetValue("Icon", out string value4); obj.TryGetValue("Line", out string value5); dictionary.Add(propertyInfo.Name, new Dictionary<string, string> { { "Url", value2 }, { "Alt", value3 }, { "Icon", value4 }, { "Line", value5 } }); } } } return dictionary; } public string GetSocialMedia(string name, MediaEnum type) { if (GetSocialMedias().TryGetValue(name, out Dictionary<string, string> value) && value.TryGetValue(type.ToString(), out string value2)) return value2; return ""; } public ThemeCompression GetCompression() { return ThemeSettings.Config.Compression; } public ThemeCompressionLevel GetCompressionLevel() { return ThemeSettings.Config.Compression.Level; } public string GetCompressionLevelGzip() { return ThemeSettings.Config.Compression.Level.Gzip; } public CompressionLevel GetCompressionLevelGzipType() { return ThemeSettings.Config.Compression.Level.GzipType; } public string GetCompressionLevelBrotli() { return ThemeSettings.Config.Compression.Level.Brotli; } public CompressionLevel GetCompressionLevelBrotliType() { return ThemeSettings.Config.Compression.Level.BrotliType; } public string GetCompressionLevelDeflate() { return ThemeSettings.Config.Compression.Level.Deflate; } public CompressionLevel GetCompressionLevelDeflateType() { return ThemeSettings.Config.Compression.Level.DeflateType; } public ThemeCompressionResponse GetCompressionResponse() { return ThemeSettings.Config.Compression.Response; } public bool GetCompressionResponseEnableHttps() { return ThemeSettings.Config.Compression.Response.EnableHttps; } public string[] GetCompressionResponseMimeTypes() { return ThemeSettings.Config.Compression.Response.MimeTypes; } public ThemeCompressionStaticFile GetCompressionStaticFile() { return ThemeSettings.Config.Compression.StaticFile; } public string GetCompressionStaticFileMode() { return ThemeSettings.Config.Compression.StaticFile.Mode; } public HttpsCompressionMode GetCompressionStaticFileModeType() { return ThemeSettings.Config.Compression.StaticFile.ModeType; } public bool GetCompressionStaticFileChange() { return ThemeSettings.Config.Compression.StaticFile.Change; } public string GetCompressionStaticFileMaxAge() { return ThemeSettings.Config.Compression.StaticFile.MaxAge; } public TimeSpan GetCompressionStaticFileMaxAgeSpan() { return ThemeSettings.Config.Compression.StaticFile.MaxAgeSpan; } public int GetCompressionStaticFileMaxAgeSecond() { return ThemeSettings.Config.Compression.StaticFile.MaxAgeSecond; } public Dictionary<string, string> GetCompressionStaticFileHeaders() { return ThemeSettings.Config.Compression.StaticFile.Headers; } public string[] GetCompressionStaticFileExtensions() { return ThemeSettings.Config.Compression.StaticFile.Extensions; } public string GetCompressionStaticFileCacheControl() { return ThemeSettings.Config.Compression.StaticFile.CacheControl; } public string GetCompressionStaticFileCacheControlFormat() { return ThemeSettings.Config.Compression.StaticFile.CacheControlFormat; } public Dictionary<string, Dictionary<string, string>> GetLanguages() { return ThemeSettings.Config.Languages.List; } public KeyValuePair<string, string> GetLanguages(string lang) { if (GetLanguages().TryGetValue(lang, out Dictionary<string, string> value)) return value.First(); return new KeyValuePair<string, string>(ThemeSettings.Config.Languages.UnknownName, ThemeSettings.Config.Languages.DefaultFlag); } public List<string> GetLangActiveLang() { return ThemeSettings.Config.Languages.ActiveLang; } public string GetLangUnknownName() { return ThemeSettings.Config.Languages.UnknownName; } public string GetLangUnknownLang() { return ThemeSettings.Config.Languages.UnknownLang; } public string GetLangDefaultFlag() { return ThemeSettings.Config.Languages.DefaultFlag; } public string GetLangCookieName() { return ThemeSettings.Config.Languages.CookieName; } public bool IsLangLocale(string lang) { if (GetLanguages(lang).Key == GetLocale()) return true; return false; } public bool IsLangLocaleDefault(string lang) { if (GetLanguages(lang).Key == GetLocaleDefault()) return true; return false; } public bool IsLangActiveLang(string lang) { if (GetLanguages().ContainsKey(lang)) { KeyValuePair<string, string> languages = GetLanguages(lang); if (GetLangActiveLang().Contains(languages.Key)) return true; } return false; } public string GetManifest() { return GetAssetPath(ThemeSettings.Config.Assets.Manifest); } public string GetFavicon() { return GetAssetPath(ThemeSettings.Config.Assets.Favicon); } public string[] GetJavascripts() { return ThemeSettings.Config.Assets.Js.ToArray(); } public string[] GetFonts() { return ThemeSettings.Config.Assets.Font.ToArray(); } public string[] GetCss() { return ThemeSettings.Config.Assets.Css.ToArray(); } public string[] GetGlobalAssets(TypeEnum type) { List<string> list = new List<string>(); List<string> list2 = new List<string>(); switch (type) { case TypeEnum.Js: list = ThemeSettings.Config.Assets.Js; break; case TypeEnum.Css: list = ThemeSettings.Config.Assets.Css; break; case TypeEnum.Font: list = ThemeSettings.Config.Assets.Font; break; } if (list.Any()) { foreach (string item in list) { switch (type) { case TypeEnum.Js: list2.Add(GetAssetPath(item)); break; case TypeEnum.Css: list2.Add(GetAssetPath(ExtendCssFilename(item))); break; case TypeEnum.Font: list2.Add((item.Contains("https://") || item.Contains("http://")) ? item : GetAssetPath(item)); break; } } } return list2.ToArray(); } public void AddVendors(string[] vendors) { foreach (string item in vendors) { if (!_vendorFiles.Contains(item)) _vendorFiles.Add(item); } } public void AddVendor(string vendor) { if (!_vendorFiles.Contains(vendor)) _vendorFiles.Add(vendor); } public void AddJavascriptFile(string file) { if (!_jsFiles.Contains(file)) _jsFiles.Add(file); } public void AddFontFile(string file) { if (!_fontFiles.Contains(file)) _fontFiles.Add(file); } public void AddCssFile(string file) { if (!_cssFiles.Contains(file)) _cssFiles.Add(file); } public string[] GetJavascriptFiles() { return _jsFiles.ToArray(); } public string[] GetFontFiles() { return _fontFiles.ToArray(); } public string[] GetCssFiles() { return _cssFiles.ToArray(); } public void ClearJavascriptFiles() { _jsFiles.Clear(); } public void ClearFontFiles() { _fontFiles.Clear(); } public void ClearCssFiles() { _cssFiles.Clear(); } public string[] GetVendors(TypeEnum type) { Dictionary<string, ThemeVendors> vendors = ThemeSettings.Config.Vendors; List<string> list = new List<string>(); if (_vendorFiles.Any()) { foreach (string vendorFile in _vendorFiles) { if (vendors.TryGetValue(vendorFile, out ThemeVendors value)) { List<string> list2 = new List<string>(); switch (type) { case TypeEnum.Js: if (value.Js != null && value.Js.Any()) list2.AddRange(value.Js); break; case TypeEnum.Css: if (value.Css != null && value.Css.Any()) list2.AddRange(value.Css); break; case TypeEnum.Font: if (value.Font != null && value.Font.Any()) list2.AddRange(value.Font); break; } if (list2.Any()) { foreach (string item2 in list2) { string item = (item2.Contains("https://") || item2.Contains("http://")) ? item2 : GetAssetPath(item2); list.Add(item); } } } } } return list.ToArray(); } public string GetAttributeValue(string scope, string attributeName) { if (_htmlAttributes.TryGetValue(scope, out SortedDictionary<string, string> value)) { if (value.TryGetValue(attributeName, out string value2)) return value2; return ""; } return ""; } } }