mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-09-23 21:13:35 +08:00
Adding page classification (aka class names for the body tag).
--HG-- extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4045161
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
Html.Zone("head", ":metas :styles :scripts"); %>
|
||||
<script type="text/javascript">window.document.documentElement.className="dyn"</script>
|
||||
</head>
|
||||
<body><%
|
||||
<body class="<%=Html.ClassForPage() %>"><%
|
||||
Html.ZoneBody("body"); %>
|
||||
</body>
|
||||
</html>
|
||||
|
@@ -1,4 +1,5 @@
|
||||
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
|
||||
<% Html.AddPageClassNames("home"); %>
|
||||
<h1><%=Html.Encode(Html.SiteName()) %></h1>
|
||||
<h2><%=Html.Encode(ViewData["Message"]) %></h2>
|
||||
<p>To learn more about Orchard visit <a href="http://orchardproject.net" title="Orchard Project">http://orchardproject.net</a>.</p>
|
@@ -3,6 +3,7 @@ using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Linq.Expressions;
|
||||
using System.Text;
|
||||
using System.Text.RegularExpressions;
|
||||
using System.Web.Mvc;
|
||||
using System.Web.Mvc.Html;
|
||||
using System.Web.Routing;
|
||||
|
@@ -4,6 +4,7 @@ using System.Web.Mvc;
|
||||
using System.Web.UI;
|
||||
using Orchard.Mvc.ViewEngines;
|
||||
using Orchard.Mvc.ViewModels;
|
||||
using Orchard.UI.PageClass;
|
||||
using Orchard.UI.PageTitle;
|
||||
using Orchard.UI.Resources;
|
||||
using Orchard.UI.Zones;
|
||||
@@ -46,6 +47,20 @@ namespace Orchard.Mvc.Html {
|
||||
return MvcHtmlString.Create(html.Encode(titleParts[0]));
|
||||
}
|
||||
|
||||
public static void AddPageClassNames(this HtmlHelper html, params object[] classNames) {
|
||||
html.Resolve<IPageClassBuilder>().AddClassNames(classNames);
|
||||
}
|
||||
|
||||
public static MvcHtmlString ClassForPage(this HtmlHelper html, params object[] classNames) {
|
||||
IPageClassBuilder pageClassBuilder = html.Resolve<IPageClassBuilder>();
|
||||
|
||||
html.AddPageClassNames(classNames);
|
||||
//todo: (heskew) need ContentItem.ContentType
|
||||
html.AddPageClassNames(html.ViewContext.RouteData.Values["area"]);
|
||||
|
||||
return MvcHtmlString.Create(html.Encode(pageClassBuilder.ToString()));
|
||||
}
|
||||
|
||||
public static void Zone<TModel>(this HtmlHelper<TModel> html, string zoneName, string partitions) where TModel : IZoneContainer {
|
||||
var manager = html.Resolve<IZoneManager>();
|
||||
|
||||
|
@@ -248,6 +248,8 @@
|
||||
<Compile Include="Mvc\ViewEngines\WebFormsViewEngineProvider.cs" />
|
||||
<Compile Include="Mvc\ViewModels\AdminViewModel.cs" />
|
||||
<Compile Include="Mvc\ViewModels\BaseViewModel.cs" />
|
||||
<Compile Include="UI\PageClass\IPageClassBuilder.cs" />
|
||||
<Compile Include="UI\PageClass\PageClassBuilder.cs" />
|
||||
<Compile Include="UI\PageTitle\IPageTitleBuilder.cs" />
|
||||
<Compile Include="UI\PageTitle\PageTitleBuilder.cs" />
|
||||
<Compile Include="UI\Resources\IResourceManager.cs" />
|
||||
|
5
src/Orchard/UI/PageClass/IPageClassBuilder.cs
Normal file
5
src/Orchard/UI/PageClass/IPageClassBuilder.cs
Normal file
@@ -0,0 +1,5 @@
|
||||
namespace Orchard.UI.PageClass {
|
||||
public interface IPageClassBuilder : IDependency {
|
||||
void AddClassNames(params object[] titleParts);
|
||||
}
|
||||
}
|
30
src/Orchard/UI/PageClass/PageClassBuilder.cs
Normal file
30
src/Orchard/UI/PageClass/PageClassBuilder.cs
Normal file
@@ -0,0 +1,30 @@
|
||||
using System.Text;
|
||||
|
||||
namespace Orchard.UI.PageClass {
|
||||
public class PageClassBuilder : IPageClassBuilder {
|
||||
private readonly StringBuilder _classNameBuilder;
|
||||
|
||||
public PageClassBuilder() {
|
||||
_classNameBuilder = new StringBuilder();
|
||||
}
|
||||
|
||||
public void AddClassNames(params object[] classNames) {
|
||||
if (classNames == null)
|
||||
return;
|
||||
|
||||
foreach (var className in classNames) {
|
||||
if (className == null)
|
||||
continue;
|
||||
|
||||
if (_classNameBuilder.Length > 0)
|
||||
_classNameBuilder.AppendFormat(" {0}", className);
|
||||
else
|
||||
_classNameBuilder.Append(className);
|
||||
}
|
||||
}
|
||||
|
||||
public override string ToString() {
|
||||
return _classNameBuilder.ToString().ToLower().Replace('.', '-'); // <- just keeping it simple for now, assuming what was passed is is pretty good with '.'s to be the only invalid class name chars in module/area names
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user