mirror of
https://github.com/OrchardCMS/Orchard.git
synced 2025-10-14 10:54:50 +08:00
Continuing theme work...
--HG-- extra : convert_revision : svn%3A5ff7c347-ad56-4c35-b696-ccb81de16e03/trunk%4044191
This commit is contained in:
15
src/Orchard/Mvc/Html/ContainerExtensions.cs
Normal file
15
src/Orchard/Mvc/Html/ContainerExtensions.cs
Normal file
@@ -0,0 +1,15 @@
|
||||
using System;
|
||||
using System.Web.Mvc;
|
||||
using Autofac.Integration.Web;
|
||||
|
||||
namespace Orchard.Mvc.Html {
|
||||
public static class ContainerExtensions {
|
||||
public static TService Resolve<TService>(this HtmlHelper html) {
|
||||
var containerProvider = html.ViewContext.RouteData.DataTokens["IContainerProvider"] as IContainerProvider;
|
||||
if (containerProvider == null)
|
||||
throw new ApplicationException("Unable to resolve");
|
||||
|
||||
return containerProvider.RequestContainer.Resolve<TService>();
|
||||
}
|
||||
}
|
||||
}
|
@@ -2,6 +2,7 @@
|
||||
using System.Web.Mvc;
|
||||
using Orchard.Mvc.ViewEngines;
|
||||
using Orchard.Mvc.ViewModels;
|
||||
using Orchard.UI.Resources;
|
||||
using Orchard.UI.Zones;
|
||||
|
||||
namespace Orchard.Mvc.Html {
|
||||
@@ -46,8 +47,12 @@ namespace Orchard.Mvc.Html {
|
||||
html.Zone(zoneName, () => html.RenderBody());
|
||||
}
|
||||
|
||||
public static void RegisterStyle(this HtmlHelper html, string styleName) {
|
||||
//todo: register the style
|
||||
public static void RegisterStyle(this HtmlHelper html, string fileName) {
|
||||
html.Resolve<IResourceManager>().RegisterStyle(fileName);
|
||||
}
|
||||
|
||||
public static void RegisterScript(this HtmlHelper html, string fileName) {
|
||||
html.Resolve<IResourceManager>().RegisterHeadScript(fileName);
|
||||
}
|
||||
}
|
||||
}
|
@@ -197,6 +197,7 @@
|
||||
<Compile Include="Models\ViewModels\ItemDisplayModel.cs" />
|
||||
<Compile Include="Models\ViewModels\ItemEditorModel.cs" />
|
||||
<Compile Include="Mvc\Filters\AntiForgeryAuthorizationFilter.cs" />
|
||||
<Compile Include="Mvc\Html\ContainerExtensions.cs" />
|
||||
<Compile Include="Mvc\Html\ContentItemExtensions.cs" />
|
||||
<Compile Include="Mvc\Html\ItemDisplayExtensions.cs" />
|
||||
<Compile Include="Mvc\Html\ItemEditorExtensions.cs" />
|
||||
@@ -222,6 +223,9 @@
|
||||
<Compile Include="Mvc\ViewEngines\WebFormsViewEngineProvider.cs" />
|
||||
<Compile Include="Mvc\ViewModels\AdminViewModel.cs" />
|
||||
<Compile Include="Mvc\ViewModels\BaseViewModel.cs" />
|
||||
<Compile Include="UI\Resources\IResourceManager.cs" />
|
||||
<Compile Include="UI\Resources\ResourceFilter.cs" />
|
||||
<Compile Include="UI\Resources\ResourceManager.cs" />
|
||||
<Compile Include="UI\Zones\DelegateZoneItem.cs" />
|
||||
<Compile Include="UI\Zones\ItemDisplayZoneItem.cs" />
|
||||
<Compile Include="UI\Zones\RenderPartialZoneItem.cs" />
|
||||
|
12
src/Orchard/UI/Resources/IResourceManager.cs
Normal file
12
src/Orchard/UI/Resources/IResourceManager.cs
Normal file
@@ -0,0 +1,12 @@
|
||||
using System.Web.Mvc;
|
||||
|
||||
namespace Orchard.UI.Resources {
|
||||
public interface IResourceManager : IDependency {
|
||||
void RegisterStyle(string fileName);
|
||||
void RegisterHeadScript(string fileName);
|
||||
void RegisterFootScript(string fileName);
|
||||
MvcHtmlString GetStyles();
|
||||
MvcHtmlString GetHeadScripts();
|
||||
MvcHtmlString GetFootScripts();
|
||||
}
|
||||
}
|
26
src/Orchard/UI/Resources/ResourceFilter.cs
Normal file
26
src/Orchard/UI/Resources/ResourceFilter.cs
Normal file
@@ -0,0 +1,26 @@
|
||||
using System.Web.Mvc;
|
||||
using Orchard.Mvc.Filters;
|
||||
using Orchard.Mvc.ViewModels;
|
||||
|
||||
namespace Orchard.UI.Resources {
|
||||
public class ResourceFilter : FilterProvider, IResultFilter {
|
||||
private readonly IResourceManager _resourceManager;
|
||||
|
||||
public ResourceFilter(IResourceManager resourceManager) {
|
||||
_resourceManager = resourceManager;
|
||||
}
|
||||
|
||||
public void OnResultExecuting(ResultExecutingContext filterContext) {
|
||||
BaseViewModel model = filterContext.Controller.ViewData.Model as BaseViewModel;
|
||||
|
||||
if (model != null) {
|
||||
model.Zones.AddAction("head:styles", html => html.ViewContext.HttpContext.Response.Output.Write(_resourceManager.GetStyles()));
|
||||
model.Zones.AddAction("head:scripts", html => html.ViewContext.HttpContext.Response.Output.Write(_resourceManager.GetHeadScripts()));
|
||||
model.Zones.AddAction("body:after", html => html.ViewContext.HttpContext.Response.Output.Write(_resourceManager.GetFootScripts()));
|
||||
}
|
||||
}
|
||||
|
||||
public void OnResultExecuted(ResultExecutedContext filterContext) {
|
||||
}
|
||||
}
|
||||
}
|
55
src/Orchard/UI/Resources/ResourceManager.cs
Normal file
55
src/Orchard/UI/Resources/ResourceManager.cs
Normal file
@@ -0,0 +1,55 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Web.Mvc;
|
||||
|
||||
namespace Orchard.UI.Resources {
|
||||
public class ResourceManager : IResourceManager {
|
||||
private const string StyleFormat = "\r\n<link rel=\"stylesheet\" type=\"text/css\" href=\"{0}\" />";
|
||||
private const string ScriptFormat = "\r\n<script type=\"text/javascript\" src=\"{0}\"></script>";
|
||||
private readonly List<string> _styles;
|
||||
private readonly List<string> _headScripts;
|
||||
private readonly List<string> _footScripts;
|
||||
|
||||
public ResourceManager() {
|
||||
_styles = new List<string>();
|
||||
_headScripts = new List<string>();
|
||||
_footScripts = new List<string>();
|
||||
}
|
||||
|
||||
public void RegisterStyle(string fileName) {
|
||||
//TODO: (erikpo) Figure out best storage here
|
||||
if (!string.IsNullOrEmpty(fileName) && !_styles.Contains(fileName))
|
||||
_styles.Add(fileName);
|
||||
}
|
||||
|
||||
public void RegisterHeadScript(string fileName) {
|
||||
//TODO: (erikpo) Figure out best storage here
|
||||
if (!string.IsNullOrEmpty(fileName) && !_headScripts.Contains(fileName) && !_footScripts.Contains(fileName))
|
||||
_headScripts.Add(fileName);
|
||||
}
|
||||
|
||||
public void RegisterFootScript(string fileName) {
|
||||
//TODO: (erikpo) Figure out best storage here
|
||||
if (!string.IsNullOrEmpty(fileName) && !_headScripts.Contains(fileName) && !_footScripts.Contains(fileName))
|
||||
_footScripts.Add(fileName);
|
||||
}
|
||||
|
||||
public MvcHtmlString GetStyles() {
|
||||
return GetFiles(_styles, StyleFormat);
|
||||
}
|
||||
|
||||
public MvcHtmlString GetHeadScripts() {
|
||||
return GetFiles(_headScripts, ScriptFormat);
|
||||
}
|
||||
|
||||
public MvcHtmlString GetFootScripts() {
|
||||
return GetFiles(_footScripts, ScriptFormat);
|
||||
}
|
||||
|
||||
private static MvcHtmlString GetFiles(IEnumerable<string> files, string fileFormat) {
|
||||
return
|
||||
MvcHtmlString.Create(string.Join("\r\n",
|
||||
files.Select(s => string.Format(fileFormat, s)).ToArray()));
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user