diff --git a/src/Orchard.Web/Core/Themes/Views/Shared/document.aspx b/src/Orchard.Web/Core/Themes/Views/Shared/document.aspx index e70bbeba0..0c5b2eb4f 100644 --- a/src/Orchard.Web/Core/Themes/Views/Shared/document.aspx +++ b/src/Orchard.Web/Core/Themes/Views/Shared/document.aspx @@ -5,7 +5,7 @@ - <%=Html.Title() %> - !!Safe Mode!!<% + <%=Html.Title("!!Safe Mode!!")%><% Html.Zone("head", ":metas :styles :scripts"); %> <% diff --git a/src/Orchard/Mvc/Html/LayoutExtensions.cs b/src/Orchard/Mvc/Html/LayoutExtensions.cs index adaa64208..a341a18da 100644 --- a/src/Orchard/Mvc/Html/LayoutExtensions.cs +++ b/src/Orchard/Mvc/Html/LayoutExtensions.cs @@ -2,6 +2,7 @@ using System.Web.Mvc; using Orchard.Mvc.ViewEngines; using Orchard.Mvc.ViewModels; +using Orchard.UI.PageTitle; using Orchard.UI.Resources; using Orchard.UI.Zones; @@ -14,33 +15,36 @@ namespace Orchard.Mvc.Html { public static MvcHtmlString Body(this HtmlHelper html) { OrchardLayoutContext layoutContext = OrchardLayoutContext.From(html.ViewContext); + return MvcHtmlString.Create(layoutContext.BodyContent); } - public static void RenderTitle(this HtmlHelper html) { - OrchardLayoutContext layoutContext = OrchardLayoutContext.From(html.ViewContext); - html.ViewContext.HttpContext.Response.Output.Write(layoutContext.Title); + public static void AddTitleParts(this HtmlHelper html, params string[] titleParts) { + html.Resolve().AddTitleParts(titleParts); } - public static MvcHtmlString Title(this HtmlHelper html) { - OrchardLayoutContext layoutContext = OrchardLayoutContext.From(html.ViewContext); - return MvcHtmlString.Create(html.Encode(layoutContext.Title)); + public static MvcHtmlString Title(this HtmlHelper html, params string[] titleParts) { + IPageTitleBuilder pageTitleBuilder = html.Resolve(); + + pageTitleBuilder.AddTitleParts(titleParts); + + return MvcHtmlString.Create(pageTitleBuilder.GenerateTitle()); } public static void Zone(this HtmlHelper html, string zoneName, string partitions) where TModel : BaseViewModel { - //TODO: is IoC necessary for this to work properly? - var manager = new ZoneManager(); + IZoneManager manager = html.Resolve(); + manager.Render(html, html.ViewData.Model.Zones, zoneName, partitions); } public static void Zone(this HtmlHelper html, string zoneName) where TModel : BaseViewModel { - Zone(html, zoneName, string.Empty); + html.Zone(zoneName, string.Empty); } public static void Zone(this HtmlHelper html, string zoneName, Action action) where TModel : BaseViewModel { //TODO: again, IoC could move this AddAction (or similar) method out of the data-bearing object html.ViewData.Model.Zones.AddAction(zoneName, x => action()); - Zone(html, zoneName, string.Empty); + html.Zone(zoneName, string.Empty); } public static void ZoneBody(this HtmlHelper html, string zoneName) where TModel : BaseViewModel { diff --git a/src/Orchard/Mvc/ViewEngines/OrchardLayoutContext.cs b/src/Orchard/Mvc/ViewEngines/OrchardLayoutContext.cs index 23ef272ed..c7b458456 100644 --- a/src/Orchard/Mvc/ViewEngines/OrchardLayoutContext.cs +++ b/src/Orchard/Mvc/ViewEngines/OrchardLayoutContext.cs @@ -5,7 +5,6 @@ namespace Orchard.Mvc.ViewEngines { public class OrchardLayoutContext { private static readonly object _key = typeof(OrchardLayoutContext); - public string Title { get; set; } public string BodyContent { get; set; } public static OrchardLayoutContext From(ControllerContext context) { diff --git a/src/Orchard/Orchard.csproj b/src/Orchard/Orchard.csproj index 492609677..71c142c16 100644 --- a/src/Orchard/Orchard.csproj +++ b/src/Orchard/Orchard.csproj @@ -224,11 +224,14 @@ + + + diff --git a/src/Orchard/UI/PageTitle/IPageTitleBuilder.cs b/src/Orchard/UI/PageTitle/IPageTitleBuilder.cs new file mode 100644 index 000000000..3767c18d8 --- /dev/null +++ b/src/Orchard/UI/PageTitle/IPageTitleBuilder.cs @@ -0,0 +1,6 @@ +namespace Orchard.UI.PageTitle { + public interface IPageTitleBuilder : IDependency { + void AddTitleParts(params string[] titleParts); + string GenerateTitle(); + } +} \ No newline at end of file diff --git a/src/Orchard/UI/PageTitle/PageTitleBuilder.cs b/src/Orchard/UI/PageTitle/PageTitleBuilder.cs new file mode 100644 index 000000000..8f4fbda1b --- /dev/null +++ b/src/Orchard/UI/PageTitle/PageTitleBuilder.cs @@ -0,0 +1,25 @@ +using System.Collections.Generic; +using System.Linq; + +namespace Orchard.UI.PageTitle { + public class PageTitleBuilder : IPageTitleBuilder { + private readonly List _titleParts; + private readonly string _titleSeparator; + + public PageTitleBuilder() { + _titleParts = new List(5); + //TODO: (erikpo) Get this from a site setting + _titleSeparator = " - "; + } + + public void AddTitleParts(params string[] titleParts) { + if (titleParts != null) + foreach (string titlePart in titleParts) + _titleParts.Add(titlePart); + } + + public string GenerateTitle() { + return string.Join(_titleSeparator, _titleParts.AsEnumerable().Reverse().ToArray()); + } + } +} \ No newline at end of file diff --git a/src/Orchard/UI/Zones/IZoneManager.cs b/src/Orchard/UI/Zones/IZoneManager.cs new file mode 100644 index 000000000..a93a10258 --- /dev/null +++ b/src/Orchard/UI/Zones/IZoneManager.cs @@ -0,0 +1,7 @@ +using System.Web.Mvc; + +namespace Orchard.UI.Zones { + public interface IZoneManager : IDependency { + void Render(HtmlHelper html, ZoneCollection zones, string zoneName, string partitions); + } +} \ No newline at end of file diff --git a/src/Orchard/UI/Zones/ZoneManager.cs b/src/Orchard/UI/Zones/ZoneManager.cs index 42528ceb7..42701fa8b 100644 --- a/src/Orchard/UI/Zones/ZoneManager.cs +++ b/src/Orchard/UI/Zones/ZoneManager.cs @@ -1,11 +1,10 @@ using System; using System.Collections.Generic; using System.Linq; -using System.Text; using System.Web.Mvc; namespace Orchard.UI.Zones { - public class ZoneManager { + public class ZoneManager : IZoneManager { public void Render(HtmlHelper html, ZoneCollection zones, string zoneName, string partitions) { ZoneEntry zone;