From 19558586d0d95581abf13ea0f3f63f24a46f82e0 Mon Sep 17 00:00:00 2001 From: Henrik Lau Eriksson Date: Sun, 10 Apr 2022 18:41:12 +0200 Subject: [PATCH] :sparkles: --- nuget-local.bat | 2 +- .../GEmojiSharp.Sample.Web.csproj | 5 +- .../Pages/Component.cshtml | 2 +- .../GEmojiSharp.Sample.Web/Pages/Index.cshtml | 5 ++ .../Pages/_ViewImports.cshtml | 3 +- .../{TagHelpers => }/EmojiExtensions.cs | 2 +- .../GEmojiSharp.AspNetCore.csproj | 5 +- .../HtmlHelpers/HtmlHelperExtensions.cs | 46 +++++++++++++++++++ .../TagHelpers/BodyTagHelperComponent.cs | 2 +- .../TagHelpers/EmojiAttributeTagHelper.cs | 2 +- .../TagHelpers/EmojiTagHelper.cs | 2 +- .../{TagHelpers => }/EmojiExtensionsTests.cs | 4 +- .../HtmlHelpers/EmojiExtensionsTests.cs | 25 ++++++++++ .../TagHelpers/BodyTagHelperComponentTests.cs | 2 +- .../EmojiAttributeTagHelperTests.cs | 2 +- .../TagHelpers/EmojiTagHelperTests.cs | 2 +- .../GEmojiSharp.Tests.csproj | 1 + 17 files changed, 97 insertions(+), 15 deletions(-) rename src/GEmojiSharp.AspNetCore/{TagHelpers => }/EmojiExtensions.cs (98%) create mode 100644 src/GEmojiSharp.AspNetCore/HtmlHelpers/HtmlHelperExtensions.cs rename tests/GEmojiSharp.Tests/AspNetCore/{TagHelpers => }/EmojiExtensionsTests.cs (95%) create mode 100644 tests/GEmojiSharp.Tests/AspNetCore/HtmlHelpers/EmojiExtensionsTests.cs 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("
:book: :pencil2:
").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