diff --git a/nuget-local.bat b/nuget-local.bat
index 3d177c5..b9fbb84 100644
--- a/nuget-local.bat
+++ b/nuget-local.bat
@@ -1,3 +1,3 @@
nuget init .\src\GEmojiSharp\bin\Release\ .\packages
+nuget init .\src\GEmojiSharp.AspNetCore\bin\Release\ .\packages
nuget init .\src\GEmojiSharp.Blazor\bin\Release\ .\packages
-nuget init .\src\GEmojiSharp.TagHelpers\bin\Release\ .\packages
diff --git a/samples/GEmojiSharp.Sample.Web/GEmojiSharp.Sample.Web.csproj b/samples/GEmojiSharp.Sample.Web/GEmojiSharp.Sample.Web.csproj
index 758e24a..4d4a04f 100644
--- a/samples/GEmojiSharp.Sample.Web/GEmojiSharp.Sample.Web.csproj
+++ b/samples/GEmojiSharp.Sample.Web/GEmojiSharp.Sample.Web.csproj
@@ -8,7 +8,6 @@
-
all
runtime; build; native; contentfiles; analyzers; buildtransitive
@@ -16,4 +15,8 @@
+
+
+
+
diff --git a/samples/GEmojiSharp.Sample.Web/Pages/Component.cshtml b/samples/GEmojiSharp.Sample.Web/Pages/Component.cshtml
index 88e3740..1698303 100644
--- a/samples/GEmojiSharp.Sample.Web/Pages/Component.cshtml
+++ b/samples/GEmojiSharp.Sample.Web/Pages/Component.cshtml
@@ -1,5 +1,5 @@
@page
-@using GEmojiSharp.TagHelpers
+@using GEmojiSharp.AspNetCore
@using Microsoft.AspNetCore.Mvc.Razor.TagHelpers
@inject ITagHelperComponentManager manager;
@model GEmojiSharp.Sample.Web.Pages.ComponentModel
diff --git a/samples/GEmojiSharp.Sample.Web/Pages/Index.cshtml b/samples/GEmojiSharp.Sample.Web/Pages/Index.cshtml
index e230296..73cc1e8 100644
--- a/samples/GEmojiSharp.Sample.Web/Pages/Index.cshtml
+++ b/samples/GEmojiSharp.Sample.Web/Pages/Index.cshtml
@@ -33,4 +33,9 @@
@Model.Text
+
+
+ @Html.Emoji(":octopus: :heavy_plus_sign: :cat2: ⩵ :heart:")
+ @Html.Emoji(x => x.Text)
+
diff --git a/samples/GEmojiSharp.Sample.Web/Pages/_ViewImports.cshtml b/samples/GEmojiSharp.Sample.Web/Pages/_ViewImports.cshtml
index 8b881a6..0812e5d 100644
--- a/samples/GEmojiSharp.Sample.Web/Pages/_ViewImports.cshtml
+++ b/samples/GEmojiSharp.Sample.Web/Pages/_ViewImports.cshtml
@@ -1,4 +1,5 @@
@using GEmojiSharp.Sample.Web
@namespace GEmojiSharp.Sample.Web.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
-@addTagHelper *, GEmojiSharp.TagHelpers
+@addTagHelper *, GEmojiSharp.AspNetCore
+@using GEmojiSharp.AspNetCore
diff --git a/src/GEmojiSharp.AspNetCore/TagHelpers/EmojiExtensions.cs b/src/GEmojiSharp.AspNetCore/EmojiExtensions.cs
similarity index 98%
rename from src/GEmojiSharp.AspNetCore/TagHelpers/EmojiExtensions.cs
rename to src/GEmojiSharp.AspNetCore/EmojiExtensions.cs
index 683aeb1..2e61117 100644
--- a/src/GEmojiSharp.AspNetCore/TagHelpers/EmojiExtensions.cs
+++ b/src/GEmojiSharp.AspNetCore/EmojiExtensions.cs
@@ -2,7 +2,7 @@
using System.Linq;
using System.Text.RegularExpressions;
-namespace GEmojiSharp.AspNetCore.TagHelpers
+namespace GEmojiSharp.AspNetCore
{
///
/// Extension methods for working with emoji markup.
diff --git a/src/GEmojiSharp.AspNetCore/GEmojiSharp.AspNetCore.csproj b/src/GEmojiSharp.AspNetCore/GEmojiSharp.AspNetCore.csproj
index 83b091e..7a113f5 100644
--- a/src/GEmojiSharp.AspNetCore/GEmojiSharp.AspNetCore.csproj
+++ b/src/GEmojiSharp.AspNetCore/GEmojiSharp.AspNetCore.csproj
@@ -15,10 +15,10 @@
⩵
❤️ :heart:
- GEmojiSharp.TagHelpers
+ GEmojiSharp.AspNetCore
https://github.com/hlaueriksson/GEmojiSharp
icon.png
- emoji;gemoji;aspnetcore;aspnetcoremvc;taghelper;taghelpers
+ emoji;gemoji;aspnetcore;aspnetcoremvc;taghelper;taghelpers;htmlhelper;htmlhelpers
MIT
true
@@ -30,6 +30,7 @@
+
diff --git a/src/GEmojiSharp.AspNetCore/HtmlHelpers/HtmlHelperExtensions.cs b/src/GEmojiSharp.AspNetCore/HtmlHelpers/HtmlHelperExtensions.cs
new file mode 100644
index 0000000..520a393
--- /dev/null
+++ b/src/GEmojiSharp.AspNetCore/HtmlHelpers/HtmlHelperExtensions.cs
@@ -0,0 +1,46 @@
+using System;
+using System.Linq.Expressions;
+using Microsoft.AspNetCore.Html;
+using Microsoft.AspNetCore.Mvc.Rendering;
+
+namespace GEmojiSharp.AspNetCore
+{
+ ///
+ /// Emoji extensions for and .
+ ///
+ public static class HtmlHelperExtensions
+ {
+ ///
+ /// Returns emojified HTML markup for the content.
+ ///
+ /// The instance this method extends.
+ /// The content.
+ /// A new containing the created HTML.
+ public static IHtmlContent Emoji(this IHtmlHelper htmlHelper, string content) =>
+ new HtmlString(content.MarkupContent());
+
+ ///
+ /// Returns emojified HTML markup for the .
+ ///
+ /// The type of the model.
+ /// The instance this method extends.
+ /// An expression to be evaluated against the current model.
+ /// A new containing the created HTML.
+ public static IHtmlContent Emoji(this IHtmlHelper htmlHelper, Expression> expression)
+ {
+ if (htmlHelper == null)
+ {
+ throw new ArgumentNullException(nameof(htmlHelper));
+ }
+
+ if (expression == null)
+ {
+ throw new ArgumentNullException(nameof(expression));
+ }
+
+ Func func = expression.Compile();
+
+ return new HtmlString(func(htmlHelper.ViewData.Model).MarkupContent());
+ }
+ }
+}
diff --git a/src/GEmojiSharp.AspNetCore/TagHelpers/BodyTagHelperComponent.cs b/src/GEmojiSharp.AspNetCore/TagHelpers/BodyTagHelperComponent.cs
index f0846ca..f483c6b 100644
--- a/src/GEmojiSharp.AspNetCore/TagHelpers/BodyTagHelperComponent.cs
+++ b/src/GEmojiSharp.AspNetCore/TagHelpers/BodyTagHelperComponent.cs
@@ -2,7 +2,7 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.TagHelpers;
-namespace GEmojiSharp.AspNetCore.TagHelpers
+namespace GEmojiSharp.AspNetCore
{
///
/// implementation targeting ]]> elements.
diff --git a/src/GEmojiSharp.AspNetCore/TagHelpers/EmojiAttributeTagHelper.cs b/src/GEmojiSharp.AspNetCore/TagHelpers/EmojiAttributeTagHelper.cs
index 88ecf4a..ba390c5 100644
--- a/src/GEmojiSharp.AspNetCore/TagHelpers/EmojiAttributeTagHelper.cs
+++ b/src/GEmojiSharp.AspNetCore/TagHelpers/EmojiAttributeTagHelper.cs
@@ -1,7 +1,7 @@
using System;
using Microsoft.AspNetCore.Razor.TagHelpers;
-namespace GEmojiSharp.AspNetCore.TagHelpers
+namespace GEmojiSharp.AspNetCore
{
///
/// implementation targeting elements with an emoji attribute.
diff --git a/src/GEmojiSharp.AspNetCore/TagHelpers/EmojiTagHelper.cs b/src/GEmojiSharp.AspNetCore/TagHelpers/EmojiTagHelper.cs
index 310a1ae..4522961 100644
--- a/src/GEmojiSharp.AspNetCore/TagHelpers/EmojiTagHelper.cs
+++ b/src/GEmojiSharp.AspNetCore/TagHelpers/EmojiTagHelper.cs
@@ -2,7 +2,7 @@
using System.Threading.Tasks;
using Microsoft.AspNetCore.Razor.TagHelpers;
-namespace GEmojiSharp.AspNetCore.TagHelpers
+namespace GEmojiSharp.AspNetCore
{
///
/// implementation targeting ]]> elements.
diff --git a/tests/GEmojiSharp.Tests/AspNetCore/TagHelpers/EmojiExtensionsTests.cs b/tests/GEmojiSharp.Tests/AspNetCore/EmojiExtensionsTests.cs
similarity index 95%
rename from tests/GEmojiSharp.Tests/AspNetCore/TagHelpers/EmojiExtensionsTests.cs
rename to tests/GEmojiSharp.Tests/AspNetCore/EmojiExtensionsTests.cs
index 158ea2b..50467fb 100644
--- a/tests/GEmojiSharp.Tests/AspNetCore/TagHelpers/EmojiExtensionsTests.cs
+++ b/tests/GEmojiSharp.Tests/AspNetCore/EmojiExtensionsTests.cs
@@ -1,8 +1,8 @@
using FluentAssertions;
-using GEmojiSharp.AspNetCore.TagHelpers;
+using GEmojiSharp.AspNetCore;
using NUnit.Framework;
-namespace GEmojiSharp.Tests.AspNetCore.TagHelpers
+namespace GEmojiSharp.Tests.AspNetCore
{
public class EmojiExtensionsTests
{
diff --git a/tests/GEmojiSharp.Tests/AspNetCore/HtmlHelpers/EmojiExtensionsTests.cs b/tests/GEmojiSharp.Tests/AspNetCore/HtmlHelpers/EmojiExtensionsTests.cs
new file mode 100644
index 0000000..d4e1e94
--- /dev/null
+++ b/tests/GEmojiSharp.Tests/AspNetCore/HtmlHelpers/EmojiExtensionsTests.cs
@@ -0,0 +1,25 @@
+using FluentAssertions;
+using GEmojiSharp.AspNetCore;
+using Microsoft.AspNetCore.Mvc.Rendering;
+using NSubstitute;
+using NUnit.Framework;
+
+namespace GEmojiSharp.Tests.AspNetCore.HtmlHelpers
+{
+ public class HtmlHelperExtensionsTests
+ {
+ [Test]
+ public void Emoji()
+ {
+ var subject = Substitute.For();
+
+ subject.Emoji("Hello, :earth_africa:
").ToString().Should().Be(@"Hello, 🌍
");
+ subject.Emoji("Hello, :fail:
").ToString().Should().Be(@"Hello, :fail:
");
+
+ subject.Emoji("").ToString().Should().Be(@"");
+ subject.Emoji(@"").ToString().Should().Be(@"");
+
+ subject.Emoji("").ToString().Should().Be(@"");
+ }
+ }
+}
diff --git a/tests/GEmojiSharp.Tests/AspNetCore/TagHelpers/BodyTagHelperComponentTests.cs b/tests/GEmojiSharp.Tests/AspNetCore/TagHelpers/BodyTagHelperComponentTests.cs
index 7c9de2c..ee58ebe 100644
--- a/tests/GEmojiSharp.Tests/AspNetCore/TagHelpers/BodyTagHelperComponentTests.cs
+++ b/tests/GEmojiSharp.Tests/AspNetCore/TagHelpers/BodyTagHelperComponentTests.cs
@@ -1,6 +1,6 @@
using System.Threading.Tasks;
using FluentAssertions;
-using GEmojiSharp.AspNetCore.TagHelpers;
+using GEmojiSharp.AspNetCore;
using Microsoft.AspNetCore.Razor.TagHelpers;
using NUnit.Framework;
diff --git a/tests/GEmojiSharp.Tests/AspNetCore/TagHelpers/EmojiAttributeTagHelperTests.cs b/tests/GEmojiSharp.Tests/AspNetCore/TagHelpers/EmojiAttributeTagHelperTests.cs
index 4e4518b..ade4411 100644
--- a/tests/GEmojiSharp.Tests/AspNetCore/TagHelpers/EmojiAttributeTagHelperTests.cs
+++ b/tests/GEmojiSharp.Tests/AspNetCore/TagHelpers/EmojiAttributeTagHelperTests.cs
@@ -1,6 +1,6 @@
using System.Threading.Tasks;
using FluentAssertions;
-using GEmojiSharp.AspNetCore.TagHelpers;
+using GEmojiSharp.AspNetCore;
using Microsoft.AspNetCore.Razor.TagHelpers;
using NUnit.Framework;
diff --git a/tests/GEmojiSharp.Tests/AspNetCore/TagHelpers/EmojiTagHelperTests.cs b/tests/GEmojiSharp.Tests/AspNetCore/TagHelpers/EmojiTagHelperTests.cs
index af1f9ea..3d4ebc1 100644
--- a/tests/GEmojiSharp.Tests/AspNetCore/TagHelpers/EmojiTagHelperTests.cs
+++ b/tests/GEmojiSharp.Tests/AspNetCore/TagHelpers/EmojiTagHelperTests.cs
@@ -1,6 +1,6 @@
using System.Threading.Tasks;
using FluentAssertions;
-using GEmojiSharp.AspNetCore.TagHelpers;
+using GEmojiSharp.AspNetCore;
using Microsoft.AspNetCore.Razor.TagHelpers;
using NUnit.Framework;
diff --git a/tests/GEmojiSharp.Tests/GEmojiSharp.Tests.csproj b/tests/GEmojiSharp.Tests/GEmojiSharp.Tests.csproj
index d974712..d24b2fd 100644
--- a/tests/GEmojiSharp.Tests/GEmojiSharp.Tests.csproj
+++ b/tests/GEmojiSharp.Tests/GEmojiSharp.Tests.csproj
@@ -7,6 +7,7 @@
+
all