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;