2015-04-03 01:46:57 +02:00
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
|
using System.Linq;
|
|
|
|
|
|
using Orchard.Layouts.Elements;
|
|
|
|
|
|
using Orchard.Layouts.Framework.Display;
|
2014-10-14 16:07:00 -07:00
|
|
|
|
using Orchard.Layouts.Framework.Drivers;
|
|
|
|
|
|
using Orchard.Layouts.ViewModels;
|
2015-04-03 01:46:57 +02:00
|
|
|
|
using Orchard.Services;
|
2014-10-14 16:07:00 -07:00
|
|
|
|
|
|
|
|
|
|
namespace Orchard.Layouts.Drivers {
|
2015-02-19 22:14:55 +01:00
|
|
|
|
public class HtmlElementDriver : ElementDriver<Html> {
|
2015-04-03 01:46:57 +02:00
|
|
|
|
private readonly IEnumerable<IHtmlFilter> _htmlFilters;
|
|
|
|
|
|
public HtmlElementDriver(IEnumerable<IHtmlFilter> htmlFilters) {
|
|
|
|
|
|
_htmlFilters = htmlFilters;
|
|
|
|
|
|
}
|
2014-10-14 16:07:00 -07:00
|
|
|
|
|
|
|
|
|
|
protected override EditorResult OnBuildEditor(Html element, ElementEditorContext context) {
|
|
|
|
|
|
var viewModel = new HtmlEditorViewModel {
|
|
|
|
|
|
Text = element.Content
|
|
|
|
|
|
};
|
|
|
|
|
|
var editor = context.ShapeFactory.EditorTemplate(TemplateName: "Elements.Html", Model: viewModel);
|
|
|
|
|
|
|
|
|
|
|
|
if (context.Updater != null) {
|
|
|
|
|
|
context.Updater.TryUpdateModel(viewModel, context.Prefix, null, null);
|
|
|
|
|
|
element.Content = viewModel.Text;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return Editor(context, editor);
|
|
|
|
|
|
}
|
2015-04-03 01:46:57 +02:00
|
|
|
|
|
2015-04-04 17:22:17 +02:00
|
|
|
|
protected override void OnDisplaying(Html element, ElementDisplayingContext context) {
|
2015-04-03 01:46:57 +02:00
|
|
|
|
var text = element.Content;
|
|
|
|
|
|
var flavor = "html";
|
|
|
|
|
|
var processedText = ApplyHtmlFilters(text, flavor);
|
|
|
|
|
|
|
|
|
|
|
|
context.ElementShape.ProcessedText = processedText;
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
private string ApplyHtmlFilters(string content, string flavor) {
|
|
|
|
|
|
return _htmlFilters.Aggregate(content, (t, filter) => filter.ProcessContent(t, flavor));
|
|
|
|
|
|
}
|
2014-10-14 16:07:00 -07:00
|
|
|
|
}
|
|
|
|
|
|
}
|