diff --git a/src/Orchard.Web/Modules/Orchard.Tokens/Filters/TokensFilter.cs b/src/Orchard.Web/Modules/Orchard.Tokens/Filters/TokensFilter.cs new file mode 100644 index 000000000..8fcc35024 --- /dev/null +++ b/src/Orchard.Web/Modules/Orchard.Tokens/Filters/TokensFilter.cs @@ -0,0 +1,52 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Web; +using Orchard.ContentManagement; +using Orchard.ContentManagement.Handlers; +using Orchard.Environment.Extensions; +using Orchard.Services; + +namespace Orchard.Tokens.Filters.Services { + + [OrchardFeature("Orchard.Tokens.HtmlFilter")] + public class TokensFilter : ContentHandler, IHtmlFilter { + + private readonly ITokenizer _tokenizer; + private ContentItem _displayed; + + public TokensFilter(ITokenizer tokenizer) { + _tokenizer = tokenizer; + } + + protected override void BuildDisplayShape(BuildDisplayContext context) { + _displayed = context.ContentItem; + } + + public string ProcessContent(string text, string flavor) { + return TokensReplace(text); + } + + private string TokensReplace(string text) { + if (_displayed == null) { + return text; + } + + if (string.IsNullOrEmpty(text)) + return string.Empty; + + // optimize code path if nothing to do + if (!text.Contains("#{")) { + return text; + } + + Dictionary data = new Dictionary() { { "Content", _displayed } }; + + text = _tokenizer.Replace(text, data); + + _displayed = null; + + return text; + } + } +} \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Tokens/Module.txt b/src/Orchard.Web/Modules/Orchard.Tokens/Module.txt index 28184b648..4affa257a 100644 --- a/src/Orchard.Web/Modules/Orchard.Tokens/Module.txt +++ b/src/Orchard.Web/Modules/Orchard.Tokens/Module.txt @@ -14,4 +14,9 @@ Features: Name: Feeds Tokens Description: Provides a content part to customize RSS fields based on tokens. Category: Content - Dependencies: Orchard.Tokens, Feeds \ No newline at end of file + Dependencies: Orchard.Tokens, Feeds + Orchard.Tokens.HtmlFilter: + Name: Tokens Html Filter + Description: Evaluates tokens in a body. + Category: Content + Dependencies: Orchard.Tokens \ No newline at end of file diff --git a/src/Orchard.Web/Modules/Orchard.Tokens/Orchard.Tokens.csproj b/src/Orchard.Web/Modules/Orchard.Tokens/Orchard.Tokens.csproj index 5be24e2ee..07d638c43 100644 --- a/src/Orchard.Web/Modules/Orchard.Tokens/Orchard.Tokens.csproj +++ b/src/Orchard.Web/Modules/Orchard.Tokens/Orchard.Tokens.csproj @@ -77,6 +77,7 @@ +