Example #1
0
        /// <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());
            }
        }
Example #2
0
        /// <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
        }