From acadb2cf65a9faefb11e513f91c89c72f1d73abd Mon Sep 17 00:00:00 2001 From: Sebastian Date: Thu, 23 Feb 2017 22:35:18 +0100 Subject: [PATCH] Json Editor --- Squidex.sln.DotSettings | 1 + src/Squidex.Core/Schemas/Field.cs | 9 +- src/Squidex.Core/Schemas/FieldRegistry.cs | 3 + src/Squidex.Core/Schemas/JsonField.cs | 47 +++++++++ .../Schemas/JsonFieldProperties.cs | 28 +++++ src/Squidex.Core/Schemas/StringFieldEditor.cs | 2 +- .../Models/BooleanFieldPropertiesDto.cs | 2 +- .../Models/Converters/SchemaConverter.cs | 11 ++ .../Models/DateTimeFieldPropertiesDto.cs | 2 +- .../Api/Schemas/Models/FieldPropertiesDto.cs | 1 + .../Schemas/Models/JsonFieldPropertiesDto.cs | 23 +++++ .../Models/NumberFieldPropertiesDto.cs | 2 +- .../Models/StringFieldPropertiesDto.cs | 2 +- .../content/content-field.component.html | 16 +-- .../app/features/schemas/declarations.ts | 2 + src/Squidex/app/features/schemas/module.ts | 4 + .../schemas/pages/schema/field.component.html | 22 ++-- .../pages/schema/schema-page.component.ts | 9 +- .../schema/types/boolean-ui.component.html | 2 +- .../schema/types/date-time-ui.component.html | 4 +- .../pages/schema/types/json-ui.component.html | 3 + .../pages/schema/types/json-ui.component.scss | 2 + .../pages/schema/types/json-ui.component.ts | 24 +++++ .../types/json-validation.component.html | 9 ++ .../types/json-validation.component.scss | 10 ++ .../schema/types/json-validation.component.ts | 24 +++++ .../schema/types/number-ui.component.html | 6 +- .../schema/types/string-ui.component.html | 10 +- .../angular/json-editor.component.ts | 12 ++- .../shared/services/schemas.service.spec.ts | 11 +- .../app/shared/services/schemas.service.ts | 55 ++++++---- src/Squidex/app/theme/icomoon/demo.html | 96 ++++++++---------- .../app/theme/icomoon/fonts/icomoon.eot | Bin 14900 -> 14900 bytes .../app/theme/icomoon/fonts/icomoon.svg | 26 ++--- .../app/theme/icomoon/fonts/icomoon.ttf | Bin 14736 -> 14736 bytes .../app/theme/icomoon/fonts/icomoon.woff | Bin 14812 -> 14812 bytes src/Squidex/app/theme/icomoon/selection.json | 26 ++--- src/Squidex/app/theme/icomoon/style.css | 43 ++++---- .../Contents/ContentDataTests.cs | 12 +-- .../Schemas/BooleanFieldTests.cs | 4 +- .../Schemas/DateTimeFieldTests.cs | 2 +- .../Schemas/JsonFieldTests.cs | 63 ++++++++++++ .../Schemas/NumberFieldTests.cs | 2 +- .../Squidex.Core.Tests/Schemas/SchemaTests.cs | 2 + .../Schemas/SchemaValidationTests.cs | 18 ++-- .../Schemas/StringFieldTests.cs | 2 +- tools/GenerateLanguages/Program.cs | 2 +- 47 files changed, 470 insertions(+), 186 deletions(-) create mode 100644 src/Squidex.Core/Schemas/JsonField.cs create mode 100644 src/Squidex.Core/Schemas/JsonFieldProperties.cs create mode 100644 src/Squidex/Controllers/Api/Schemas/Models/JsonFieldPropertiesDto.cs create mode 100644 src/Squidex/app/features/schemas/pages/schema/types/json-ui.component.html create mode 100644 src/Squidex/app/features/schemas/pages/schema/types/json-ui.component.scss create mode 100644 src/Squidex/app/features/schemas/pages/schema/types/json-ui.component.ts create mode 100644 src/Squidex/app/features/schemas/pages/schema/types/json-validation.component.html create mode 100644 src/Squidex/app/features/schemas/pages/schema/types/json-validation.component.scss create mode 100644 src/Squidex/app/features/schemas/pages/schema/types/json-validation.component.ts create mode 100644 tests/Squidex.Core.Tests/Schemas/JsonFieldTests.cs diff --git a/Squidex.sln.DotSettings b/Squidex.sln.DotSettings index 5431400f5..2ba7d8d16 100644 --- a/Squidex.sln.DotSettings +++ b/Squidex.sln.DotSettings @@ -34,6 +34,7 @@ SUGGESTION SUGGESTION DO_NOT_SHOW + DO_NOT_SHOW TypeScript16 <?xml version="1.0" encoding="utf-16"?><Profile name="Header"><CSUpdateFileHeader>True</CSUpdateFileHeader></Profile> <?xml version="1.0" encoding="utf-16"?><Profile name="Namespaces"><CSOptimizeUsings><OptimizeUsings>True</OptimizeUsings><EmbraceInRegion>False</EmbraceInRegion><RegionName></RegionName></CSOptimizeUsings><CSUpdateFileHeader>True</CSUpdateFileHeader></Profile> diff --git a/src/Squidex.Core/Schemas/Field.cs b/src/Squidex.Core/Schemas/Field.cs index fc1eed634..a4f7cd4ed 100644 --- a/src/Squidex.Core/Schemas/Field.cs +++ b/src/Squidex.Core/Schemas/Field.cs @@ -157,11 +157,18 @@ namespace Squidex.Core.Schemas languages = new[] { Language.Invariant }; } + var edmValueType = CreateEdmType(); + + if (edmValueType == null) + { + return; + } + var languageType = typeResolver(new EdmComplexType("Squidex", $"{schemaName}_{Name}_Property")); foreach (var language in languages) { - languageType.AddStructuralProperty(language.Iso2Code, CreateEdmType()); + languageType.AddStructuralProperty(language.Iso2Code, edmValueType); } edmType.AddStructuralProperty(Name, new EdmComplexTypeReference(languageType, false)); diff --git a/src/Squidex.Core/Schemas/FieldRegistry.cs b/src/Squidex.Core/Schemas/FieldRegistry.cs index 0ffc8c7ba..51613499a 100644 --- a/src/Squidex.Core/Schemas/FieldRegistry.cs +++ b/src/Squidex.Core/Schemas/FieldRegistry.cs @@ -67,6 +67,9 @@ namespace Squidex.Core.Schemas Add( (id, name, p) => new DateTimeField(id, name, (DateTimeFieldProperties)p)); + + Add( + (id, name, p) => new JsonField(id, name, (JsonFieldProperties)p)); } public void Add(FactoryFunction fieldFactory) diff --git a/src/Squidex.Core/Schemas/JsonField.cs b/src/Squidex.Core/Schemas/JsonField.cs new file mode 100644 index 000000000..f12703c9b --- /dev/null +++ b/src/Squidex.Core/Schemas/JsonField.cs @@ -0,0 +1,47 @@ +// ========================================================================== +// JsonField.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +using System.Collections.Generic; +using Microsoft.OData.Edm; +using Newtonsoft.Json.Linq; +using NJsonSchema; +using Squidex.Core.Schemas.Validators; + +namespace Squidex.Core.Schemas +{ + public sealed class JsonField : Field + { + public JsonField(long id, string name, JsonFieldProperties properties) + : base(id, name, properties) + { + } + + protected override IEnumerable CreateValidators() + { + if (Properties.IsRequired) + { + yield return new RequiredValidator(); + } + } + + protected override object ConvertValue(JToken value) + { + return value; + } + + protected override void PrepareJsonSchema(JsonProperty jsonProperty) + { + jsonProperty.Type = JsonObjectType.Object; + } + + protected override IEdmTypeReference CreateEdmType() + { + return null; + } + } +} diff --git a/src/Squidex.Core/Schemas/JsonFieldProperties.cs b/src/Squidex.Core/Schemas/JsonFieldProperties.cs new file mode 100644 index 000000000..eafb06912 --- /dev/null +++ b/src/Squidex.Core/Schemas/JsonFieldProperties.cs @@ -0,0 +1,28 @@ +// ========================================================================== +// JsonFieldProperties.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +using System.Collections.Generic; +using Newtonsoft.Json.Linq; +using Squidex.Infrastructure; + +namespace Squidex.Core.Schemas +{ + [TypeName("JsonField")] + public sealed class JsonFieldProperties : FieldProperties + { + public override JToken GetDefaultValue() + { + return JValue.CreateNull(); + } + + protected override IEnumerable ValidateCore() + { + yield break; + } + } +} diff --git a/src/Squidex.Core/Schemas/StringFieldEditor.cs b/src/Squidex.Core/Schemas/StringFieldEditor.cs index eaf901d0a..0e0bb5120 100644 --- a/src/Squidex.Core/Schemas/StringFieldEditor.cs +++ b/src/Squidex.Core/Schemas/StringFieldEditor.cs @@ -11,7 +11,7 @@ namespace Squidex.Core.Schemas public enum StringFieldEditor { Input, - TextArea, + Textarea, Radio, Dropdown } diff --git a/src/Squidex/Controllers/Api/Schemas/Models/BooleanFieldPropertiesDto.cs b/src/Squidex/Controllers/Api/Schemas/Models/BooleanFieldPropertiesDto.cs index bb830876f..463841d57 100644 --- a/src/Squidex/Controllers/Api/Schemas/Models/BooleanFieldPropertiesDto.cs +++ b/src/Squidex/Controllers/Api/Schemas/Models/BooleanFieldPropertiesDto.cs @@ -14,7 +14,7 @@ using Squidex.Infrastructure.Reflection; namespace Squidex.Controllers.Api.Schemas.Models { - [JsonSchema("boolean")] + [JsonSchema("Boolean")] public sealed class BooleanFieldPropertiesDto : FieldPropertiesDto { /// diff --git a/src/Squidex/Controllers/Api/Schemas/Models/Converters/SchemaConverter.cs b/src/Squidex/Controllers/Api/Schemas/Models/Converters/SchemaConverter.cs index 11d8d71a2..98df82247 100644 --- a/src/Squidex/Controllers/Api/Schemas/Models/Converters/SchemaConverter.cs +++ b/src/Squidex/Controllers/Api/Schemas/Models/Converters/SchemaConverter.cs @@ -27,6 +27,10 @@ namespace Squidex.Controllers.Api.Schemas.Models.Converters typeof(DateTimeFieldProperties), p => Convert((DateTimeFieldProperties)p) }, + { + typeof(JsonFieldProperties), + p => Convert((JsonFieldProperties)p) + }, { typeof(StringFieldProperties), p => Convert((StringFieldProperties)p) @@ -74,6 +78,13 @@ namespace Squidex.Controllers.Api.Schemas.Models.Converters return result; } + private static FieldPropertiesDto Convert(JsonFieldProperties source) + { + var result = SimpleMapper.Map(source, new JsonFieldPropertiesDto()); + + return result; + } + private static FieldPropertiesDto Convert(StringFieldProperties source) { var result = SimpleMapper.Map(source, new StringFieldPropertiesDto()); diff --git a/src/Squidex/Controllers/Api/Schemas/Models/DateTimeFieldPropertiesDto.cs b/src/Squidex/Controllers/Api/Schemas/Models/DateTimeFieldPropertiesDto.cs index 88f62677c..b327fa5e8 100644 --- a/src/Squidex/Controllers/Api/Schemas/Models/DateTimeFieldPropertiesDto.cs +++ b/src/Squidex/Controllers/Api/Schemas/Models/DateTimeFieldPropertiesDto.cs @@ -15,7 +15,7 @@ using Squidex.Infrastructure.Reflection; namespace Squidex.Controllers.Api.Schemas.Models { - [JsonSchema("dateTime")] + [JsonSchema("DateTime")] public sealed class DateTimeFieldPropertiesDto : FieldPropertiesDto { /// diff --git a/src/Squidex/Controllers/Api/Schemas/Models/FieldPropertiesDto.cs b/src/Squidex/Controllers/Api/Schemas/Models/FieldPropertiesDto.cs index 1d27e260f..1bd51e93f 100644 --- a/src/Squidex/Controllers/Api/Schemas/Models/FieldPropertiesDto.cs +++ b/src/Squidex/Controllers/Api/Schemas/Models/FieldPropertiesDto.cs @@ -17,6 +17,7 @@ namespace Squidex.Controllers.Api.Schemas.Models [JsonConverter(typeof(JsonInheritanceConverter), "fieldType")] [KnownType(typeof(BooleanFieldPropertiesDto))] [KnownType(typeof(DateTimeFieldPropertiesDto))] + [KnownType(typeof(JsonFieldPropertiesDto))] [KnownType(typeof(NumberFieldPropertiesDto))] [KnownType(typeof(StringFieldPropertiesDto))] public abstract class FieldPropertiesDto diff --git a/src/Squidex/Controllers/Api/Schemas/Models/JsonFieldPropertiesDto.cs b/src/Squidex/Controllers/Api/Schemas/Models/JsonFieldPropertiesDto.cs new file mode 100644 index 000000000..2f96e7e45 --- /dev/null +++ b/src/Squidex/Controllers/Api/Schemas/Models/JsonFieldPropertiesDto.cs @@ -0,0 +1,23 @@ +// ========================================================================== +// JsonFieldPropertiesDto.cs +// Squidex Headless CMS +// ========================================================================== +// Copyright (c) Squidex Group +// All rights reserved. +// ========================================================================== + +using NJsonSchema.Annotations; +using Squidex.Core.Schemas; +using Squidex.Infrastructure.Reflection; + +namespace Squidex.Controllers.Api.Schemas.Models +{ + [JsonSchema("Json")] + public sealed class JsonFieldPropertiesDto : FieldPropertiesDto + { + public override FieldProperties ToProperties() + { + return SimpleMapper.Map(this, new JsonFieldProperties()); + } + } +} diff --git a/src/Squidex/Controllers/Api/Schemas/Models/NumberFieldPropertiesDto.cs b/src/Squidex/Controllers/Api/Schemas/Models/NumberFieldPropertiesDto.cs index d72fa070b..f63d8a1eb 100644 --- a/src/Squidex/Controllers/Api/Schemas/Models/NumberFieldPropertiesDto.cs +++ b/src/Squidex/Controllers/Api/Schemas/Models/NumberFieldPropertiesDto.cs @@ -15,7 +15,7 @@ using Squidex.Infrastructure.Reflection; namespace Squidex.Controllers.Api.Schemas.Models { - [JsonSchema("number")] + [JsonSchema("Number")] public sealed class NumberFieldPropertiesDto : FieldPropertiesDto { /// diff --git a/src/Squidex/Controllers/Api/Schemas/Models/StringFieldPropertiesDto.cs b/src/Squidex/Controllers/Api/Schemas/Models/StringFieldPropertiesDto.cs index 15c2c5a70..ab305eb0e 100644 --- a/src/Squidex/Controllers/Api/Schemas/Models/StringFieldPropertiesDto.cs +++ b/src/Squidex/Controllers/Api/Schemas/Models/StringFieldPropertiesDto.cs @@ -15,7 +15,7 @@ using Squidex.Infrastructure.Reflection; namespace Squidex.Controllers.Api.Schemas.Models { - [JsonSchema("string")] + [JsonSchema("String")] public sealed class StringFieldPropertiesDto : FieldPropertiesDto { /// diff --git a/src/Squidex/app/features/content/pages/content/content-field.component.html b/src/Squidex/app/features/content/pages/content/content-field.component.html index 0f880e2e6..6402c78f8 100644 --- a/src/Squidex/app/features/content/pages/content/content-field.component.html +++ b/src/Squidex/app/features/content/pages/content/content-field.component.html @@ -15,7 +15,7 @@
-
+
@@ -34,7 +34,7 @@
-
+
@@ -44,7 +44,7 @@
-
+
@@ -55,10 +55,8 @@
-
-
-
+
@@ -69,6 +67,12 @@
+
+ +
+
+ +
diff --git a/src/Squidex/app/features/schemas/declarations.ts b/src/Squidex/app/features/schemas/declarations.ts index 4c7419da6..bc742a5cd 100644 --- a/src/Squidex/app/features/schemas/declarations.ts +++ b/src/Squidex/app/features/schemas/declarations.ts @@ -9,6 +9,8 @@ export * from './pages/schema/types/boolean-ui.component'; export * from './pages/schema/types/boolean-validation.component'; export * from './pages/schema/types/date-time-ui.component'; export * from './pages/schema/types/date-time-validation.component'; +export * from './pages/schema/types/json-ui.component'; +export * from './pages/schema/types/json-validation.component'; export * from './pages/schema/types/number-ui.component'; export * from './pages/schema/types/number-validation.component'; export * from './pages/schema/types/string-ui.component'; diff --git a/src/Squidex/app/features/schemas/module.ts b/src/Squidex/app/features/schemas/module.ts index 32cfdc54e..2835b633c 100644 --- a/src/Squidex/app/features/schemas/module.ts +++ b/src/Squidex/app/features/schemas/module.ts @@ -22,6 +22,8 @@ import { BooleanValidationComponent, DateTimeUIComponent, DateTimeValidationComponent, + JsonUIComponent, + JsonValidationComponent, NumberUIComponent, NumberValidationComponent, SchemaEditFormComponent, @@ -78,6 +80,8 @@ const routes: Routes = [ BooleanValidationComponent, DateTimeUIComponent, DateTimeValidationComponent, + JsonUIComponent, + JsonValidationComponent, NumberUIComponent, NumberValidationComponent, SchemaEditFormComponent, diff --git a/src/Squidex/app/features/schemas/pages/schema/field.component.html b/src/Squidex/app/features/schemas/pages/schema/field.component.html index e7f967022..3a414d8be 100644 --- a/src/Squidex/app/features/schemas/pages/schema/field.component.html +++ b/src/Squidex/app/features/schemas/pages/schema/field.component.html @@ -129,35 +129,41 @@
-
+
-
+
-
+
-
+
+
+ +
-
+
-
+
-
+
-
+
+
+ +
diff --git a/src/Squidex/app/features/schemas/pages/schema/schema-page.component.ts b/src/Squidex/app/features/schemas/pages/schema/schema-page.component.ts index 62cf88081..a64df5f9b 100644 --- a/src/Squidex/app/features/schemas/pages/schema/schema-page.component.ts +++ b/src/Squidex/app/features/schemas/pages/schema/schema-page.component.ts @@ -41,10 +41,11 @@ import { SchemaUpdated } from './../messages'; }) export class SchemaPageComponent extends AppComponentBase implements OnInit { public fieldTypes: string[] = [ - 'string', - 'number', - 'boolean', - 'dateTime' + 'Boolean', + 'DateTime', + 'Json', + 'Number', + 'String' ]; public schemaName: string; diff --git a/src/Squidex/app/features/schemas/pages/schema/types/boolean-ui.component.html b/src/Squidex/app/features/schemas/pages/schema/types/boolean-ui.component.html index 67b60fbd8..f9ad35245 100644 --- a/src/Squidex/app/features/schemas/pages/schema/types/boolean-ui.component.html +++ b/src/Squidex/app/features/schemas/pages/schema/types/boolean-ui.component.html @@ -17,7 +17,7 @@ diff --git a/src/Squidex/app/features/schemas/pages/schema/types/date-time-ui.component.html b/src/Squidex/app/features/schemas/pages/schema/types/date-time-ui.component.html index ed868dabf..7b503c721 100644 --- a/src/Squidex/app/features/schemas/pages/schema/types/date-time-ui.component.html +++ b/src/Squidex/app/features/schemas/pages/schema/types/date-time-ui.component.html @@ -17,14 +17,14 @@ diff --git a/src/Squidex/app/features/schemas/pages/schema/types/json-ui.component.html b/src/Squidex/app/features/schemas/pages/schema/types/json-ui.component.html new file mode 100644 index 000000000..9a0e7afd1 --- /dev/null +++ b/src/Squidex/app/features/schemas/pages/schema/types/json-ui.component.html @@ -0,0 +1,3 @@ +
+ Nothing to setup +
\ No newline at end of file diff --git a/src/Squidex/app/features/schemas/pages/schema/types/json-ui.component.scss b/src/Squidex/app/features/schemas/pages/schema/types/json-ui.component.scss new file mode 100644 index 000000000..fbb752506 --- /dev/null +++ b/src/Squidex/app/features/schemas/pages/schema/types/json-ui.component.scss @@ -0,0 +1,2 @@ +@import '_vars'; +@import '_mixins'; \ No newline at end of file diff --git a/src/Squidex/app/features/schemas/pages/schema/types/json-ui.component.ts b/src/Squidex/app/features/schemas/pages/schema/types/json-ui.component.ts new file mode 100644 index 000000000..9feebc666 --- /dev/null +++ b/src/Squidex/app/features/schemas/pages/schema/types/json-ui.component.ts @@ -0,0 +1,24 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Sebastian Stehle. All rights reserved + */ + +import { Component, Input } from '@angular/core'; +import { FormGroup } from '@angular/forms'; + +import { JsonFieldPropertiesDto } from 'shared'; + +@Component({ + selector: 'sqx-json-ui', + styleUrls: ['json-ui.component.scss'], + templateUrl: 'json-ui.component.html' +}) +export class JsonUIComponent { + @Input() + public editForm: FormGroup; + + @Input() + public properties: JsonFieldPropertiesDto; +} \ No newline at end of file diff --git a/src/Squidex/app/features/schemas/pages/schema/types/json-validation.component.html b/src/Squidex/app/features/schemas/pages/schema/types/json-validation.component.html new file mode 100644 index 000000000..54887deda --- /dev/null +++ b/src/Squidex/app/features/schemas/pages/schema/types/json-validation.component.html @@ -0,0 +1,9 @@ +
+
+ + +
+ +
+
+
\ No newline at end of file diff --git a/src/Squidex/app/features/schemas/pages/schema/types/json-validation.component.scss b/src/Squidex/app/features/schemas/pages/schema/types/json-validation.component.scss new file mode 100644 index 000000000..f9405a205 --- /dev/null +++ b/src/Squidex/app/features/schemas/pages/schema/types/json-validation.component.scss @@ -0,0 +1,10 @@ +@import '_vars'; +@import '_mixins'; + +.form-check-input { + margin: 0; +} + +.form-group { + margin-top: .5rem; +} \ No newline at end of file diff --git a/src/Squidex/app/features/schemas/pages/schema/types/json-validation.component.ts b/src/Squidex/app/features/schemas/pages/schema/types/json-validation.component.ts new file mode 100644 index 000000000..dcdbae808 --- /dev/null +++ b/src/Squidex/app/features/schemas/pages/schema/types/json-validation.component.ts @@ -0,0 +1,24 @@ +/* + * Squidex Headless CMS + * + * @license + * Copyright (c) Sebastian Stehle. All rights reserved + */ + +import { Component, Input } from '@angular/core'; +import { FormGroup } from '@angular/forms'; + +import { JsonFieldPropertiesDto } from 'shared'; + +@Component({ + selector: 'sqx-json-validation', + styleUrls: ['json-validation.component.scss'], + templateUrl: 'json-validation.component.html' +}) +export class JsonValidationComponent { + @Input() + public editForm: FormGroup; + + @Input() + public properties: JsonFieldPropertiesDto; +} \ No newline at end of file diff --git a/src/Squidex/app/features/schemas/pages/schema/types/number-ui.component.html b/src/Squidex/app/features/schemas/pages/schema/types/number-ui.component.html index adbda39ea..ff5fd97ce 100644 --- a/src/Squidex/app/features/schemas/pages/schema/types/number-ui.component.html +++ b/src/Squidex/app/features/schemas/pages/schema/types/number-ui.component.html @@ -17,21 +17,21 @@ diff --git a/src/Squidex/app/features/schemas/pages/schema/types/string-ui.component.html b/src/Squidex/app/features/schemas/pages/schema/types/string-ui.component.html index 9233af64a..72473f3cd 100644 --- a/src/Squidex/app/features/schemas/pages/schema/types/string-ui.component.html +++ b/src/Squidex/app/features/schemas/pages/schema/types/string-ui.component.html @@ -17,28 +17,28 @@ -
+
+
+ + + + icon-type-Json +
+
+ + +
+
+ liga: + +
+
@@ -920,10 +936,10 @@
- + - icon-type-boolean + icon-type-Boolean
@@ -936,42 +952,10 @@
- - - - icon-type-datetime -
-
- - -
-
- liga: - -
-
-
-
- - - - icon-type-date-time -
-
- - -
-
- liga: - -
-
-
-
- + - icon-type-dateTime + icon-type-DateTime
@@ -984,10 +968,10 @@
- + - icon-type-number + icon-type-Number
@@ -1000,10 +984,10 @@
- + - icon-type-string + icon-type-String
diff --git a/src/Squidex/app/theme/icomoon/fonts/icomoon.eot b/src/Squidex/app/theme/icomoon/fonts/icomoon.eot index 19060baeb136545d8dc87070d1375cc09d34916a..8dc743898c1be27a935c311cbc463cfddbda5dd0 100644 GIT binary patch delta 54 zcmdl|vZZ8#4fE2Ry%X)XF>`n+Z2Ym+RC;gD(s+KGuMFHQ3?OjjD$_L>z4?S$4l@8x Cb`&)L delta 54 zcmdl|vZZ8#4fE8{!xQbdF|&rQ*!W|ssr2E{sqy?aUm3Vr7(n34<&Ie}dh-dh9A*Gv Ck`)sG diff --git a/src/Squidex/app/theme/icomoon/fonts/icomoon.svg b/src/Squidex/app/theme/icomoon/fonts/icomoon.svg index a05f0975a..d48e65c01 100644 --- a/src/Squidex/app/theme/icomoon/fonts/icomoon.svg +++ b/src/Squidex/app/theme/icomoon/fonts/icomoon.svg @@ -17,12 +17,12 @@ - - - - - - + + + + + + @@ -33,7 +33,7 @@ - + @@ -43,10 +43,10 @@ - - - - + + + + @@ -61,6 +61,6 @@ - - + + \ No newline at end of file diff --git a/src/Squidex/app/theme/icomoon/fonts/icomoon.ttf b/src/Squidex/app/theme/icomoon/fonts/icomoon.ttf index cb25cfb2c472d245b8c25f816d5baa4c9f811fcf..e02cd51d60f36204fdd9e9f02c00a2781207df36 100644 GIT binary patch delta 47 ucmbPGJfV0(ATx)T!p4xTrqX+Jmd5kjd}ZKfVE}`YY<=n diff --git a/src/Squidex/app/theme/icomoon/fonts/icomoon.woff b/src/Squidex/app/theme/icomoon/fonts/icomoon.woff index b3b3e88f8120335a31c396a89e9b523dcdefa827..9f4572c4ec3d309bf3e7b5eecc05e70306d0594a 100644 GIT binary patch delta 47 ucmcape5ZIqFEfXi!o~?lO{MqdERE;4`O3h}!T{g#iSvT<(|!qc<0r errors = new List(); + + [Fact] + public void Should_instantiate_field() + { + var sut = new JsonField(1, "my-json", new JsonFieldProperties()); + + Assert.Equal("my-json", sut.Name); + } + + [Fact] + public void Should_clone_object() + { + var sut = new JsonField(1, "my-json", new JsonFieldProperties()); + + Assert.NotEqual(sut, sut.Enable()); + } + + [Fact] + public async Task Should_not_add_error_if_json_is_valid() + { + var sut = new JsonField(1, "my-json", new JsonFieldProperties { Label = "My-Json" }); + + await sut.ValidateAsync(CreateValue(null), errors); + + Assert.Empty(errors); + } + + [Fact] + public async Task Should_add_errors_if_datetime_is_required() + { + var sut = new JsonField(1, "my-json", new JsonFieldProperties { Label = "My-Json", IsRequired = true }); + + await sut.ValidateAsync(CreateValue(null), errors); + + errors.ShouldBeEquivalentTo( + new[] { "My-Json is required" }); + } + + private static JValue CreateValue(JValue v) + { + return v; + } + } +} diff --git a/tests/Squidex.Core.Tests/Schemas/NumberFieldTests.cs b/tests/Squidex.Core.Tests/Schemas/NumberFieldTests.cs index e47f0d223..ab2250c88 100644 --- a/tests/Squidex.Core.Tests/Schemas/NumberFieldTests.cs +++ b/tests/Squidex.Core.Tests/Schemas/NumberFieldTests.cs @@ -36,7 +36,7 @@ namespace Squidex.Core.Schemas } [Fact] - public async Task Should_not_add_error_if_valid() + public async Task Should_not_add_error_if_number_is_valid() { var sut = new NumberField(1, "my-number", new NumberFieldProperties { Label = "My-Number" }); diff --git a/tests/Squidex.Core.Tests/Schemas/SchemaTests.cs b/tests/Squidex.Core.Tests/Schemas/SchemaTests.cs index 45032934b..c12608625 100644 --- a/tests/Squidex.Core.Tests/Schemas/SchemaTests.cs +++ b/tests/Squidex.Core.Tests/Schemas/SchemaTests.cs @@ -276,6 +276,8 @@ namespace Squidex.Core.Schemas var schema = Schema.Create("user", new SchemaProperties { Hints = "The User" }) + .AddOrUpdateField(new JsonField(0, "my-json", + new JsonFieldProperties())) .AddOrUpdateField(new StringField(1, "my-string1", new StringFieldProperties { Label = "My String1", IsLocalizable = true, IsRequired = true, AllowedValues = allowedValues })) .AddOrUpdateField(new StringField(2, "my-string2", diff --git a/tests/Squidex.Core.Tests/Schemas/SchemaValidationTests.cs b/tests/Squidex.Core.Tests/Schemas/SchemaValidationTests.cs index f3e929c96..8999e19a2 100644 --- a/tests/Squidex.Core.Tests/Schemas/SchemaValidationTests.cs +++ b/tests/Squidex.Core.Tests/Schemas/SchemaValidationTests.cs @@ -293,14 +293,16 @@ namespace Squidex.Core.Schemas var schema = Schema.Create("my-schema", new SchemaProperties()) - .AddOrUpdateField( - new StringField(1, "my-string", new StringFieldProperties { DefaultValue = "EN-String", IsLocalizable = true })) - .AddOrUpdateField( - new NumberField(2, "my-number", new NumberFieldProperties { DefaultValue = 123 })) - .AddOrUpdateField( - new BooleanField(3, "my-boolean", new BooleanFieldProperties { DefaultValue = true })) - .AddOrUpdateField( - new DateTimeField(4, "my-datetime", new DateTimeFieldProperties { DefaultValue = now })); + .AddOrUpdateField(new JsonField(0, "my-json", + new JsonFieldProperties())) + .AddOrUpdateField(new StringField(1, "my-string", + new StringFieldProperties { DefaultValue = "EN-String", IsLocalizable = true })) + .AddOrUpdateField(new NumberField(2, "my-number", + new NumberFieldProperties { DefaultValue = 123 })) + .AddOrUpdateField(new BooleanField(3, "my-boolean", + new BooleanFieldProperties { DefaultValue = true })) + .AddOrUpdateField(new DateTimeField(4, "my-datetime", + new DateTimeFieldProperties { DefaultValue = now })); var data = new ContentData() diff --git a/tests/Squidex.Core.Tests/Schemas/StringFieldTests.cs b/tests/Squidex.Core.Tests/Schemas/StringFieldTests.cs index 0dc3aa169..c487d6e39 100644 --- a/tests/Squidex.Core.Tests/Schemas/StringFieldTests.cs +++ b/tests/Squidex.Core.Tests/Schemas/StringFieldTests.cs @@ -36,7 +36,7 @@ namespace Squidex.Core.Schemas } [Fact] - public async Task Should_not_add_error_if_valid() + public async Task Should_not_add_error_if_string_is_valid() { var sut = new StringField(1, "my-string", new StringFieldProperties { Label = "My-String" }); diff --git a/tools/GenerateLanguages/Program.cs b/tools/GenerateLanguages/Program.cs index 2f4850679..59c75678b 100644 --- a/tools/GenerateLanguages/Program.cs +++ b/tools/GenerateLanguages/Program.cs @@ -15,7 +15,7 @@ namespace GenerateLanguages { public class Program { - public static void Main(string[] args) + public static void Main() { var languageCodesFile = new FileInfo("../../src/Squidex.Infrastructure/language-codes.csv"); var languageFile = Path.Combine(languageCodesFile.DirectoryName, "Languages.cs");