Example #1
0
        /// <summary>
        /// Appends the content of the required header.
        /// </summary>
        /// <param name="stringBuilder">The string builder.</param>
        /// <exception cref="System.InvalidOperationException">Invalid SiteMap node specified. Either the current group node doesn't have child nodes or the current user does not have rights to view any of the child nodes.</exception>
        private void AppendRequiredHeaderContent(StringBuilder stringBuilder, bool setTitle = true)
        {
            var pageData = MasterPageBuilder.GetRequestedPageData();

            if (pageData != null)
            {
                stringBuilder.Append(this.ResourceRegistrations());
                var robotsTag = this.GetRobotsMetaTag(pageData);

                if (!string.IsNullOrEmpty(robotsTag))
                {
                    stringBuilder.Append("\r\n\t" + robotsTag);
                }

                if (setTitle)
                {
                    stringBuilder.Append("\r\n\t<title>" + pageData.HtmlTitle.ToString() + "\r\n\t</title>");
                }

                var descriptionTag = this.GetDescriptionTag(pageData);

                if (!string.IsNullOrEmpty(descriptionTag))
                {
                    stringBuilder.Append("\r\n\t" + descriptionTag);
                }

                var keywordsTag = this.GetKeywordsTag(pageData);

                if (!string.IsNullOrEmpty(keywordsTag))
                {
                    stringBuilder.Append("\r\n\t" + keywordsTag);
                }
            }
        }
Example #2
0
        /// <summary>
        /// Appends the content of the required header.
        /// </summary>
        /// <param name="stringBuilder">The string builder.</param>
        /// <param name="setTitle">if set to <c>true</c> will set the title.</param>
        /// <exception cref="System.InvalidOperationException">Invalid SiteMap node specified. Either the current group node doesn't have child nodes or the current user does not have rights to view any of the child nodes.</exception>
        private void AppendRequiredHeaderContent(StringBuilder stringBuilder, bool setTitle = true)
        {
            var pageData = MasterPageBuilder.GetRequestedPageData();

            if (pageData != null && setTitle)
            {
                stringBuilder.Append("\r\n\t<title>" + pageData.HtmlTitle.ToString() + "\r\n\t</title>");
            }
        }
        public void AddMasterPageDirectives_CustomString_AppendsMasterDirective()
        {
            //Arrange
            var layoutTemplateHtmlProcessor = new MasterPageBuilder();
            var htmlString = "Some html string";

            //Act
            htmlString = layoutTemplateHtmlProcessor.AddMasterPageDirectives(htmlString);

            //Assert
            Assert.IsTrue(htmlString.StartsWith(MasterPageBuilderTests.masterPageDirective), "Master page doesn't start with" + MasterPageBuilderTests.masterPageDirective);
        }
Example #4
0
        /// <summary>
        /// Gets the layout template.
        /// </summary>
        /// <param name="templateName"></param>
        /// <param name="model">The model.</param>
        /// <param name="isPartial">if set to <c>true</c> requested view is partial.</param>
        /// <returns></returns>
        public virtual string GetLayoutTemplate(string templateName, object model = null, bool isPartial = false)
        {
            var genericController = this.CreateController();
            var layoutHtmlString  = this.RenderViewToString(genericController.ControllerContext, templateName, model, isPartial);

            if (!layoutHtmlString.IsNullOrEmpty())
            {
                var htmlProcessor = new MasterPageBuilder();
                layoutHtmlString = htmlProcessor.ProcessLayoutString(layoutHtmlString);
                layoutHtmlString = htmlProcessor.AddMasterPageDirectives(layoutHtmlString);
            }

            return(layoutHtmlString);
        }
Example #5
0
        /// <summary>
        /// Gets the layout template.
        /// </summary>
        /// <param name="templateName">The name of the layout template to render.</param>
        /// <param name="placeholdersOnly">When true the method returns a master page containing only content placeholders.</param>
        /// <returns></returns>
        public virtual string GetLayoutTemplate(string templateName, bool placeholdersOnly = false)
        {
            var genericController = this.CreateController();
            var layoutHtmlString  = this.RenderViewToString(genericController.ControllerContext, templateName, placeholdersOnly);

            if (!layoutHtmlString.IsNullOrEmpty() && !placeholdersOnly)
            {
                var htmlProcessor = new MasterPageBuilder();
                layoutHtmlString = htmlProcessor.ProcessLayoutString(layoutHtmlString);
                layoutHtmlString = htmlProcessor.AddMasterPageDirectives(layoutHtmlString);
            }

            return(layoutHtmlString);
        }
Example #6
0
        /// <summary>
        /// Gets the layout template.
        /// </summary>
        /// <param name="templateName"></param>
        /// <param name="model">The model.</param>
        /// <param name="partial">if set to <c>true</c> requested view is partial.</param>
        /// <returns></returns>
        public virtual string GetLayoutTemplate(string templateName, object model = null, bool partial = false)
        {
            var genericController = this.CreateController();
            var layoutHtmlString = this.RenderViewToString(genericController.ControllerContext, templateName, model, partial);

            if (!layoutHtmlString.IsNullOrEmpty())
            {
                var htmlProcessor = new MasterPageBuilder();
                layoutHtmlString = htmlProcessor.ProcessLayoutString(layoutHtmlString);
                layoutHtmlString = htmlProcessor.AddMasterPageDirectives(layoutHtmlString);
            }

            return layoutHtmlString;
        }
Example #7
0
        /// <summary>
        /// Gets the requested page data.
        /// </summary>
        /// <returns></returns>
        /// <exception cref="System.InvalidOperationException">Invalid SiteMap node specified. Either the current group node doesn't have child nodes or the current user does not have rights to view any of the child nodes.</exception>
        internal static PageData GetRequestedPageData()
        {
            var node = MasterPageBuilder.GetRequestedPageNode();

            if (node != null)
            {
                var siteMap     = (SiteMapBase)node.Provider;
                var pageManager = PageManager.GetManager(siteMap.PageProviderName);
                var pageData    = pageManager.GetPageData(node.PageId);

                return(pageData);
            }
            else
            {
                return(null);
            }
        }
        /// <summary>
        /// Adds variable parameters to the virtual path to allow caching of multiple versions based on parameters.
        /// </summary>
        /// <param name="layoutVirtualPath">The layout virtual path.</param>
        /// <returns>The path with appended variables.</returns>
        protected virtual string AddVariablesToPath(string layoutVirtualPath)
        {
            var varies = new List <string>();

            var packagesManager = new PackageManager();
            var currentPackage  = packagesManager.GetCurrentPackage();

            if (!currentPackage.IsNullOrEmpty())
            {
                varies.Add(currentPackage);
            }

            if (SystemManager.CurrentContext.AppSettings.Multilingual)
            {
                varies.Add(CultureInfo.CurrentUICulture.Name);
            }

            if (MasterPageBuilder.IsFormTagRequired())
            {
                varies.Add("form");
            }
            else
            {
                varies.Add("noform");
            }

            var pageData = MasterPageBuilder.GetRequestedPageData();

            if (pageData != null)
            {
                varies.Add(pageData.Id.ToString());
                varies.Add(pageData.Version.ToString(CultureInfo.InvariantCulture));
            }

            layoutVirtualPath = (new VirtualPathBuilder()).AddParams(layoutVirtualPath, string.Join("_", varies));

            return(layoutVirtualPath);
        }
Example #9
0
        /// <summary>
        /// Gets the layout template.
        /// </summary>
        /// <param name="templateName">The name of the layout template to render.</param>
        /// <param name="placeholdersOnly">When true the method returns a master page containing only content placeholders.</param>
        /// <returns></returns>
        public virtual string GetLayoutTemplate(string templateName, bool placeholdersOnly = false)
        {
            var genericController = this.CreateController();
            var layoutHtmlString = this.RenderViewToString(genericController.ControllerContext, templateName, placeholdersOnly);

            if (!layoutHtmlString.IsNullOrEmpty() && !placeholdersOnly)
            {
                var htmlProcessor = new MasterPageBuilder();
                layoutHtmlString = htmlProcessor.ProcessLayoutString(layoutHtmlString);
                layoutHtmlString = htmlProcessor.AddMasterPageDirectives(layoutHtmlString);
            }

            return layoutHtmlString;
        }
Example #10
0
        /// <summary>
        /// Processes the layout string adding the required attributes to the head tag
        /// and also adding the required form tag.
        /// </summary>
        /// <param name="targetTemplate">The template.</param>
        /// <returns></returns>
        public virtual string ProcessLayoutString(string targetTemplate)
        {
            var           includeFormTag = MasterPageBuilder.IsFormTagRequired();
            StringBuilder outPut         = new StringBuilder();
            HtmlChunk     chunk          = null;

            using (HtmlParser parser = new HtmlParser(targetTemplate))
            {
                parser.SetChunkHashMode(false);
                parser.AutoExtractBetweenTagsOnly  = false;
                parser.CompressWhiteSpaceBeforeTag = false;
                parser.KeepRawHTML = true;
                bool setTitle = true;
                bool modified;
                bool isOpenBodyTag;
                bool isCloseBodyTag;
                bool isClosedHeadTag;

                while ((chunk = parser.ParseNext()) != null)
                {
                    modified        = false;
                    isOpenBodyTag   = false;
                    isCloseBodyTag  = false;
                    isClosedHeadTag = false;

                    if (chunk.Type == HtmlChunkType.OpenTag)
                    {
                        if (chunk.TagName.Equals("head", StringComparison.OrdinalIgnoreCase))
                        {
                            if (!chunk.HasAttribute("runat"))
                            {
                                chunk.SetAttribute("runat", "server");
                                modified = true;
                            }
                        }
                        else if (chunk.TagName.Equals("body", StringComparison.OrdinalIgnoreCase))
                        {
                            isOpenBodyTag = true;
                        }
                        else if (chunk.TagName.Equals("title", StringComparison.OrdinalIgnoreCase))
                        {
                            setTitle = false;
                        }
                    }
                    else if (chunk.Type == HtmlChunkType.CloseTag)
                    {
                        if (chunk.TagName.Equals("body", StringComparison.OrdinalIgnoreCase))
                        {
                            isCloseBodyTag = true;
                        }

                        if (chunk.TagName.Equals("head", StringComparison.OrdinalIgnoreCase))
                        {
                            isClosedHeadTag = true;
                        }
                    }

                    if (includeFormTag && isCloseBodyTag)
                    {
                        outPut.Append("</form>");
                    }
                    else if (!includeFormTag && isClosedHeadTag)
                    {
                        this.AppendRequiredHeaderContent(outPut, setTitle);
                    }

                    if (modified)
                    {
                        outPut.Append(chunk.GenerateHtml());
                    }
                    else
                    {
                        outPut.Append(chunk.Html);
                    }

                    if (includeFormTag && isOpenBodyTag)
                    {
                        outPut.Append("<form runat='server'>");
                    }
                }
            }

            return(outPut.ToString());
        }