Browse Source

Single char slug.

pull/312/head
Sebastian Stehle 8 years ago
parent
commit
302bf02a3b
  1. 25
      src/Squidex.Domain.Apps.Core.Operations/Scripting/JintScriptEngine.cs
  2. 36
      tests/Squidex.Domain.Apps.Core.Tests/Operations/Scripting/JintScriptEngineTests.cs

25
src/Squidex.Domain.Apps.Core.Operations/Scripting/JintScriptEngine.cs

@ -7,9 +7,11 @@
using System;
using Jint;
using Jint.Native;
using Jint.Native.Object;
using Jint.Parser;
using Jint.Runtime;
using Jint.Runtime.Interop;
using Squidex.Domain.Apps.Core.Contents;
using Squidex.Domain.Apps.Core.Scripting.ContentWrapper;
using Squidex.Infrastructure;
@ -150,11 +152,32 @@ namespace Squidex.Domain.Apps.Core.Scripting
}
engine.SetValue("ctx", contextInstance);
engine.SetValue("slugify", new Func<string, string>(x => x.Slugify()));
engine.SetValue("slugify", new ClrFunctionInstance(engine, Slugify));
return engine;
}
private static JsValue Slugify(JsValue thisObject, JsValue[] arguments)
{
try
{
var stringInput = TypeConverter.ToString(arguments.At(0));
var single = false;
if (arguments.Length > 1)
{
single = TypeConverter.ToBoolean(arguments.At(1));
}
return stringInput.Slugify(null, single);
}
catch
{
return JsValue.Undefined;
}
}
private static void EnableDisallow(Engine engine)
{
engine.SetValue("disallow", new Action<string>(message =>

36
tests/Squidex.Domain.Apps.Core.Tests/Operations/Scripting/JintScriptEngineTests.cs

@ -147,16 +147,16 @@ namespace Squidex.Domain.Apps.Core.Operations.Scripting
new NamedContentData()
.AddField("title",
new ContentFieldData()
.AddValue("iv", "Hello World"));
.AddValue("iv", "4 Häuser"));
var expected =
new NamedContentData()
.AddField("title",
new ContentFieldData()
.AddValue("iv", "Hello World"))
.AddValue("iv", "4 Häuser"))
.AddField("slug",
new ContentFieldData()
.AddValue("iv", "hello-world"));
.AddValue("iv", "4-haeuser"));
var context = new ScriptContext { Data = content };
@ -170,6 +170,36 @@ namespace Squidex.Domain.Apps.Core.Operations.Scripting
Assert.Equal(expected, result);
}
[Fact]
public void Should_slugify_value_with_single_char()
{
var content =
new NamedContentData()
.AddField("title",
new ContentFieldData()
.AddValue("iv", "4 Häuser"));
var expected =
new NamedContentData()
.AddField("title",
new ContentFieldData()
.AddValue("iv", "4 Häuser"))
.AddField("slug",
new ContentFieldData()
.AddValue("iv", "4-hauser"));
var context = new ScriptContext { Data = content };
var result = scriptEngine.Transform(context, @"
var data = ctx.data;
data.slug = { iv: slugify(data.title.iv, true) };
replace(data);");
Assert.Equal(expected, result);
}
[Fact]
public void Should_transform_content_and_return_with_execute_transform()
{

Loading…
Cancel
Save