Extract MarkdownDocument functionality from MarkdownWidget

This commit is contained in:
John Lewin 2018-06-27 18:31:35 -07:00
parent 94abb85364
commit 71b9234b93
4 changed files with 32 additions and 58 deletions

View file

@ -251,7 +251,7 @@ namespace MatterHackers.MatterControl
#if __ANDROID__
var description = new GuiWidget();
#else
var description = new MarkdownWidget(new Uri("https://raw.githubusercontent.com/lunet-io/markdig/master/"))
var description = new MarkdownWidget()
{
Margin = new BorderDouble(10, 4, 10, 10),
};

View file

@ -36,7 +36,6 @@ using MatterHackers.Agg.UI;
namespace Markdig.Agg
{
public class MarkdownDocumentLink
{
public Uri Uri { get; internal set; }
@ -48,14 +47,19 @@ namespace Markdig.Agg
{
private string _markDownText = null;
private MarkdownPipeline _pipeLine = null;
private Uri baseUri;
private static readonly MarkdownPipeline DefaultPipeline = new MarkdownPipelineBuilder().UseSupportedExtensions().Build();
public MarkdownDocument()
{
}
public MarkdownDocument(Uri baseUri)
{
this.baseUri = baseUri;
this.BaseUri = baseUri;
}
public Uri BaseUri { get; set; }
public List<MarkdownDocumentLink> Children { get; private set; } = new List<MarkdownDocumentLink>();
public static MarkdownDocument Load(Uri uri)
@ -100,7 +104,7 @@ namespace Markdig.Agg
}
}
public void Parse()
public void Parse(GuiWidget guiWidget = null)
{
if (!string.IsNullOrEmpty(this.Markdown))
{
@ -109,11 +113,11 @@ namespace Markdig.Agg
// why do we check the pipeline here?
pipeline = pipeline ?? new MarkdownPipelineBuilder().Build();
var rootWidget = new GuiWidget();
var rootWidget = guiWidget ?? new GuiWidget();
var renderer = new AggRenderer(rootWidget)
{
BaseUri = baseUri,
BaseUri = this.BaseUri,
ChildLinks = new List<MarkdownDocumentLink>()
};

View file

@ -39,7 +39,6 @@ namespace Markdig.Agg
this.WindowTitle = this.HeaderText = "Markdown Tests";
contentRow.AddChild(
new MarkdownWidget(
new Uri("https://raw.githubusercontent.com/lunet-io/markdig/master/"),
new Uri("https://raw.githubusercontent.com/lunet-io/markdig/master/readme.md")));
}
}

View file

@ -40,14 +40,23 @@ namespace Markdig.Agg
private static readonly MarkdownPipeline DefaultPipeline = new MarkdownPipelineBuilder().UseSupportedExtensions().Build();
private string _markDownText = null;
private MarkdownPipeline _pipeLine = null;
private Uri baseUri;
private FlowLayoutWidget contentPanel;
public MarkdownWidget(Uri baseUri, bool scrollContent = true)
private MarkdownDocument markdownDocument;
public MarkdownWidget(Uri contentUri, bool scrollContent = true)
: this(scrollContent)
{
markdownDocument.BaseUri = contentUri;
var webClient = new WebClient();
this.Markdown = webClient.DownloadString(contentUri);
}
public MarkdownWidget(bool scrollContent = true)
: base(scrollContent)
{
this.baseUri = baseUri;
markdownDocument = new MarkdownDocument();
this.HAnchor = HAnchor.Stretch;
this.ScrollArea.HAnchor = HAnchor.Stretch;
@ -84,13 +93,6 @@ namespace Markdig.Agg
this.AddChild(contentPanel);
}
public MarkdownWidget(Uri baseUri, Uri contentUri, bool scrollContent = true)
: this(baseUri, scrollContent)
{
var webClient = new WebClient();
this.Markdown = webClient.DownloadString(contentUri);
}
/// <summary>
/// Gets or sets the markdown to display.
/// </summary>
@ -102,49 +104,18 @@ namespace Markdig.Agg
if (_markDownText != value)
{
_markDownText = value;
this.RefreshDocument();
// Empty self
contentPanel.CloseAllChildren();
this.Width = 10;
this.ScrollPositionFromTop = Vector2.Zero;
// Parse and reconstruct
markdownDocument.Markdown = value;
markdownDocument.Parse(contentPanel);
}
}
}
/// <summary>
/// Gets or sets the markdown pipeline to use.
/// </summary>
public MarkdownPipeline Pipeline
{
get => _pipeLine ?? DefaultPipeline;
set
{
if (_pipeLine != value)
{
_pipeLine = value;
}
}
}
private void RefreshDocument()
{
if (!string.IsNullOrEmpty(this.Markdown))
{
var pipeline = Pipeline;
contentPanel.CloseAllChildren();
// why do we check the pipeline here?
pipeline = pipeline ?? new MarkdownPipelineBuilder().Build();
var renderer = new AggRenderer(contentPanel)
{
BaseUri = baseUri
};
pipeline.Setup(renderer);
var document = Markdig.Markdown.Parse(this.Markdown, pipeline);
renderer.Render(document);
}
}
}
}