Browse Source

Changed the widget structure

pull/13082/head
malik masis 4 years ago
parent
commit
57ec03370a
  1. 2
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Polls/WidgetContentFragment.cs
  2. 43
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Polls/ContentParser.cs
  3. 17
      modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Polls/PollViewComponentManager_Test.cs

2
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Polls/WidgetContentFragment.cs

@ -7,7 +7,7 @@ public class WidgetContentFragment : ContentFragment
public string ViewComponentName { get; set; }
public IDictionary<string, object> Properties { get; }
public IDictionary<string, object> Properties { get; set; }
public WidgetContentFragment(string name)
{

43
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Polls/ContentParser.cs

@ -62,8 +62,9 @@ public class ContentParser : IContentParser, ITransientDependency
}
}
var pollNames = Regex.Matches(content, @"(?<=PollName\s*=\s*"")(.*?)(?="")").Cast<Match>().Select(p => p.Value).ToList();
var polls = Regex.Matches(content, @"(?<=Widget Type\s*=\s*"")(.*?)(?="")").Cast<Match>().Select(p => p.Value).ToList();
Dictionary<string, List<KeyValuePair<string, string>>> parsedWidgets = new();
ParseWidgets(content, parsedWidgets);
var contentFragments = new List<ContentFragment>();
@ -71,17 +72,23 @@ public class ContentParser : IContentParser, ITransientDependency
{
if (parsedList[i] == delimeter)
{
if (polls.Count > k)
var values = parsedWidgets.GetOrDefault($"{k}.Widget").Select(p => p.Value).ToList();
var keys = parsedWidgets.GetOrDefault($"{k}.Widget").Select(p => p.Key).ToList();
if (parsedWidgets.Count > k)
{
var name = _options.WidgetConfigs.Where(p => p.Key == polls[k]).Select(p => p.Value.Name).FirstOrDefault();
if (name is not null && pollNames.Count > k)
var name = _options.WidgetConfigs.Where(p => p.Key == values[0]).Select(p => p.Value.Name).FirstOrDefault();
if (name is not null && parsedWidgets.Count > k)
{
var properties = new Dictionary<string, object>();
for (int kv = 0; kv < values.Count; kv++)
{
properties.Add(keys[kv], values[kv]);
}
contentFragments.Add(new WidgetContentFragment(name)
{
Properties =
{
{ "Name", pollNames[k]}
}
Properties = properties
});
}
}
@ -95,4 +102,22 @@ public class ContentParser : IContentParser, ITransientDependency
return contentFragments;
}
private void ParseWidgets(string content, Dictionary<string, List<KeyValuePair<string, string>>> parsedWidgets)
{
var widgets = Regex.Matches(content, @"(?<=\[Widget)(.*?)(?=\])").Cast<Match>().Select(p => p.Value).ToList();
for (int p = 0; p < widgets.Count; p++)
{
var preparedContent = string.Join("", widgets[p]);
var keys = Regex.Matches(preparedContent, @"(?<=[\[Widget]?\s)(.*?)(?=="")").Cast<Match>().Select(p => p.Value).Where(p => p != string.Empty).ToList();
var values = Regex.Matches(preparedContent, @"(?<=\s*[a-zA-Z]*=\s*"")(.*?)(?="")").Cast<Match>().Select(p => p.Value).ToList();
var list = new List<KeyValuePair<string, string>>();
for (int kv = 0; kv < keys.Count; kv++)
{
list.Add(new KeyValuePair<string, string>(keys[kv], values[kv]));
}
parsedWidgets.Add($"{p}.Widget", list);
}
}
}

17
modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Polls/PollViewComponentManager_Test.cs

@ -19,6 +19,23 @@ public class PollViewComponentManager_Test : CmsKitDomainTestBase
_options = GetRequiredService<IOptions<CmsKitContentWidgetOptions>>();
}
[Fact]
public async Task AA_ParseAsync_ShouldWorkMoreDynamically()
{
_options.Value.AddWidgetConfig(testData.PollName, new ContentWidgetConfig(testData.WidgetName));
_options.Value.AddWidgetConfig("ImageGallery", new ContentWidgetConfig("ImageGallery"));//test
var content = @"**ABP Framework** is completely open source and developed in a community-driven manner.
[Widget Type=""Poll"" PollName =""poll-name""]
Thanks _for_ *your * feedback.
[Widget Type=""ImageGallery"" GalleryName=""Xyz"" Source=""GoogleDrive""]";
var poll = await pollManager.ParseAsync(content);
poll.ShouldNotBeNull();
poll.Count.ShouldBe(4);
}
[Fact]
public async Task ParseAsync_ShouldWorkWithoutConfigOptions()
{

Loading…
Cancel
Save