/// <summary> /// Parses the CSS. /// </summary> /// <param name="cssFileName"> /// Name of the CSS file. /// </param> /// <param name="selectorPrefix"> /// The selector prefix. /// </param> /// <param name="allowImports"> /// if set to <c>true</c> [allow imports]. /// </param> /// <param name="parseImports"> /// if set to <c>true</c> [parse imports]. /// </param> /// <param name="includeComments"> /// if set to <c>true</c> [include comments]. /// </param> /// <param name="sb"> /// The sb. /// </param> /// <returns> /// A string value... /// </returns> public string ParseCss( string cssFileName, string selectorPrefix, bool allowImports, bool parseImports, bool includeComments, StringBuilder sb) { using (var sr = new StreamReader(cssFileName)) { var st = new StringTokenizer(sr); if (sb == null) { sb = new StringBuilder(); } Token token; try { do { token = st.Next(); switch (token.Kind) { case TokenKind.Comment: if (includeComments) { sb.Append(token.Value); // sb.Append("\n"); } break; case TokenKind.Selector: if (selectorPrefix == string.Empty) { sb.Append(token.Value); } else { sb.Append(selectorPrefix); sb.Append(" "); sb.Append(token.Value); } break; case TokenKind.AtRule: case TokenKind.Block: sb.Append(token.Value); break; case TokenKind.ImportRule: if (allowImports && parseImports) { // temp // sb.Append(token.Value); var filename = token.Value.Replace("@import", string.Empty); filename = filename.Replace("url", string.Empty); filename = filename.Replace("(", string.Empty); filename = filename.Replace(")", string.Empty); filename = filename.Replace("'", string.Empty); filename = filename.Replace("\"", string.Empty); filename = filename.Replace(";", string.Empty).Trim(); filename = string.Concat( cssFileName.Substring(0, cssFileName.LastIndexOf(@"\")).Trim(), "\\", filename); var loop = new CssHelper(); loop.ParseCss( filename, selectorPrefix, allowImports, parseImports, includeComments, sb); } else if (allowImports && !parseImports) { sb.Append(token.Value); } break; default: sb.Append(token.Value); break; } }while (token.Kind != TokenKind.EOF); } catch (Exception ex) { ErrorHandler.Publish( LogLevel.Error, string.Format("Error in parsing CSS file: {0} Message was: {1}", cssFileName, ex.Message)); } finally { sr.Close(); } return(sb.ToString()); } }
/// <summary> /// Parses the CSS. /// </summary> /// <param name="cssFileName"> /// Name of the CSS file. /// </param> /// <param name="selectorPrefix"> /// The selector prefix. /// </param> /// <param name="allowImports"> /// if set to <c>true</c> [allow imports]. /// </param> /// <param name="parseImports"> /// if set to <c>true</c> [parse imports]. /// </param> /// <param name="includeComments"> /// if set to <c>true</c> [include comments]. /// </param> /// <param name="sb"> /// The sb. /// </param> /// <returns> /// A string value... /// </returns> public string ParseCss( string cssFileName, string selectorPrefix, bool allowImports, bool parseImports, bool includeComments, StringBuilder sb) { using (var sr = new StreamReader(cssFileName)) { var st = new StringTokenizer(sr); if (sb == null) { sb = new StringBuilder(); } Token token; try { do { token = st.Next(); switch (token.Kind) { case TokenKind.Comment: if (includeComments) { sb.Append(token.Value); // sb.Append("\n"); } break; case TokenKind.Selector: if (selectorPrefix == string.Empty) { sb.Append(token.Value); } else { sb.Append(selectorPrefix); sb.Append(" "); sb.Append(token.Value); } break; case TokenKind.AtRule: case TokenKind.Block: sb.Append(token.Value); break; case TokenKind.ImportRule: if (allowImports && parseImports) { // temp // sb.Append(token.Value); var filename = token.Value.Replace("@import", string.Empty); filename = filename.Replace("url", string.Empty); filename = filename.Replace("(", string.Empty); filename = filename.Replace(")", string.Empty); filename = filename.Replace("'", string.Empty); filename = filename.Replace("\"", string.Empty); filename = filename.Replace(";", string.Empty).Trim(); filename = string.Concat( cssFileName.Substring(0, cssFileName.LastIndexOf(@"\")).Trim(), "\\", filename); var loop = new CssHelper(); loop.ParseCss( filename, selectorPrefix, allowImports, parseImports, includeComments, sb); } else if (allowImports && !parseImports) { sb.Append(token.Value); } break; default: sb.Append(token.Value); break; } } while (token.Kind != TokenKind.EOF); } catch (Exception ex) { ErrorHandler.Publish( LogLevel.Error, string.Format("Error in parsing CSS file: {0} Message was: {1}", cssFileName, ex.Message)); } finally { sr.Close(); } return sb.ToString(); } }
/// <summary> /// Sets the CurrentTheme - allowing custom Theme per module /// </summary> protected virtual void SetupTheme() { // changed: Jes1111 - 2004-08-05 - supports custom theme per module // (better to do this in OnLoad than in RenderChildren, which is too late) var themeName = this.Settings.ContainsKey("MODULESETTINGS_THEME") && Int32.Parse(this.Settings["MODULESETTINGS_THEME"].ToString()) == (int)ThemeList.Alt ? "Alt" : "Default"; // end: Jes1111 // added: Jes1111 - 2004-08-05 - supports custom theme per module if (this.PortalSettings.CustomSettings.ContainsKey("SITESETTINGS_ALLOW_MODULE_CUSTOM_THEMES") && this.PortalSettings.CustomSettings["SITESETTINGS_ALLOW_MODULE_CUSTOM_THEMES"].ToString().Length != 0 && bool.Parse(this.PortalSettings.CustomSettings["SITESETTINGS_ALLOW_MODULE_CUSTOM_THEMES"].ToString()) && this.Settings.ContainsKey("MODULESETTINGS_MODULE_THEME") && this.Settings["MODULESETTINGS_MODULE_THEME"].ToString().Trim().Length > 0) { // substitute custom theme for this module var tm = new ThemeManager(this.PortalSettings.PortalPath); tm.Load(this.Settings["MODULESETTINGS_MODULE_THEME"].ToString()); this.CurrentTheme = tm.CurrentTheme; // get CSS file, add ModuleID to each line and add resulting string to CssImportList try { var cssHelper = new CssHelper(); var selectorPrefix = string.Concat("#mID", this.ModuleID); var cssFileName = this.Page.Server.MapPath(this.CurrentTheme.CssFile); this.Page.RegisterCssImport( this.ModuleID.ToString(), cssHelper.ParseCss(cssFileName, selectorPrefix)); } catch (Exception ex) { var error = string.Format( "Failed to load custom theme '{0}' for ModuleID {1}. Continuing with default tab theme. Message was: {2}", this.CurrentTheme.CssFile, this.ModuleID, ex.Message); ErrorHandler.Publish(LogLevel.Error, error); this.CurrentTheme = this.PortalSettings.GetCurrentTheme(themeName); } } else { // original behaviour unchanged this.CurrentTheme = this.PortalSettings.GetCurrentTheme(themeName); } // end change: Jes1111 }