Skip to content

Commit 3dfb629

Browse files
committed
🚧 Json to HTML
- NodeType Enum added - MarkType Enum added - Node Model added - TextNode Model added - Node Converter added - Json to Node Parser Unit test class added
1 parent 98551e0 commit 3dfb629

6 files changed

Lines changed: 176 additions & 0 deletions

File tree

Contentstack.Utils/Contentstack.Utils.csproj

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,10 @@
3535
<Folder Include="Models\" />
3636
<Folder Include="Enums\" />
3737
<Folder Include="Extensions\" />
38+
<Folder Include="Converters\" />
3839
</ItemGroup>
3940
<ItemGroup>
4041
<PackageReference Include="HtmlAgilityPack" Version="1.11.28" />
42+
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
4143
</ItemGroup>
4244
</Project>
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
using System;
2+
using Newtonsoft.Json;
3+
using Newtonsoft.Json.Linq;
4+
using Contentstack.Utils.Models;
5+
6+
namespace Contentstack.Utils.Converters
7+
{
8+
public class NodeJsonConverter : JsonConverter<Node>
9+
{
10+
public override Node ReadJson(JsonReader reader, Type objectType, Node existingValue, bool hasExistingValue, JsonSerializer serializer)
11+
{
12+
Node node = null;
13+
JObject jObject = JObject.Load(reader);
14+
if (jObject["type"] == null)
15+
{
16+
node = new TextNode();
17+
node.type = Enums.NodeType.Text;
18+
}else
19+
{
20+
node = new Node();
21+
}
22+
serializer.Populate(jObject.CreateReader(), node);
23+
return node;
24+
}
25+
26+
public override void WriteJson(JsonWriter writer, Node value, JsonSerializer serializer)
27+
{
28+
29+
}
30+
}
31+
}
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
using System;
2+
namespace Contentstack.Utils.Enums
3+
{
4+
public enum MarkType
5+
{
6+
/// <summary>
7+
/// This will specify the Mark type of text node as Bold
8+
/// </summary>
9+
Bold,
10+
/// <summary>
11+
/// This will specify the Mark type of text node as Italic
12+
/// </summary>
13+
Italic,
14+
/// <summary>
15+
/// This will specify the Mark type of text node as Underline
16+
/// </summary>
17+
Underline,
18+
/// <summary>
19+
/// This will specify the Mark type of text node as Strikethrough
20+
/// </summary>
21+
Strikethrough,
22+
/// <summary>
23+
/// This will specify the Mark type of text node as InlineCode
24+
/// </summary>
25+
InlineCode,
26+
/// <summary>
27+
/// This will specify the Mark type of text node as Subscript
28+
/// </summary>
29+
Subscript,
30+
/// <summary>
31+
/// This will specify the Mark type of text node as Superscript
32+
/// </summary>
33+
Superscript
34+
}
35+
}
Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,74 @@
1+
using System;
2+
using System.ComponentModel;
3+
using System.Runtime.Serialization;
4+
using Newtonsoft.Json;
5+
using Newtonsoft.Json.Converters;
6+
7+
namespace Contentstack.Utils.Enums
8+
{
9+
[JsonConverter(typeof(StringEnumConverter))]
10+
public enum NodeType
11+
{
12+
[EnumMember(Value = "doc")]
13+
Document,
14+
[EnumMember(Value = "p")]
15+
Paragraph,
16+
17+
[EnumMember(Value = "a")]
18+
Link,
19+
[EnumMember(Value = "img")]
20+
Image,
21+
[EnumMember(Value = "embed")]
22+
Embed,
23+
24+
[EnumMember(Value = "h1")]
25+
Heading_1,
26+
[EnumMember(Value = "h2")]
27+
Heading_2,
28+
[EnumMember(Value = "h3")]
29+
Heading_3,
30+
[EnumMember(Value = "h4")]
31+
Heading_4,
32+
[EnumMember(Value = "h5")]
33+
Heading_5,
34+
[EnumMember(Value = "h6")]
35+
Heading_6,
36+
37+
[EnumMember(Value = "ol")]
38+
OrderList,
39+
[EnumMember(Value = "ul")]
40+
UnOrderList,
41+
[EnumMember(Value = "li")]
42+
ListItem,
43+
44+
[EnumMember(Value = "dhroc")]
45+
Hr,
46+
47+
[EnumMember(Value = "table")]
48+
Table,
49+
[EnumMember(Value = "thead")]
50+
TableHeader,
51+
[EnumMember(Value = "tbody")]
52+
TableBody,
53+
[EnumMember(Value = "tfoot")]
54+
TableFooter,
55+
[EnumMember(Value = "tr")]
56+
TableRow,
57+
[EnumMember(Value = "th")]
58+
TableHead,
59+
[EnumMember(Value = "td")]
60+
TableData,
61+
62+
[EnumMember(Value = "blockquote")]
63+
BlockQuote,
64+
[EnumMember(Value = "code")]
65+
Code,
66+
67+
[EnumMember(Value = "text")]
68+
Text,
69+
[EnumMember(Value = "reference")]
70+
Reference,
71+
72+
Unknown
73+
}
74+
}

Contentstack.Utils/Models/Node.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using Contentstack.Utils.Converters;
4+
using Contentstack.Utils.Enums;
5+
using Newtonsoft.Json;
6+
using Newtonsoft.Json.Linq;
7+
8+
namespace Contentstack.Utils.Models
9+
{
10+
[JsonConverter(typeof(NodeJsonConverter))]
11+
public class Node
12+
{
13+
public NodeType type { get; set; }
14+
15+
public IDictionary<string, object> attrs { get; set; }
16+
17+
public List<Node> children { get; set; }
18+
}
19+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System;
2+
namespace Contentstack.Utils.Models
3+
{
4+
public class TextNode: Node
5+
{
6+
public bool bold { get; set; }
7+
public bool italic { get; set; }
8+
public bool underline { get; set; }
9+
public bool strikethrough { get; set; }
10+
public bool inlineCode { get; set; }
11+
public bool subscript { get; set; }
12+
public bool superscript { get; set; }
13+
public string text { get; set; }
14+
}
15+
}

0 commit comments

Comments
 (0)