Extract MarkdownDocument functionality from MarkdownWidget
This commit is contained in:
parent
94abb85364
commit
71b9234b93
4 changed files with 32 additions and 58 deletions
|
|
@ -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),
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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>()
|
||||
};
|
||||
|
||||
|
|
|
|||
|
|
@ -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")));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue