Add shared (collaborative) samples
This commit is contained in:
parent
a43508253e
commit
813b48bbdb
|
@ -8,6 +8,8 @@ using Microsoft.AspNetCore.Mvc;
|
||||||
using AspNetCoreMvc.Models;
|
using AspNetCoreMvc.Models;
|
||||||
using Ooui;
|
using Ooui;
|
||||||
using Ooui.AspNetCore;
|
using Ooui.AspNetCore;
|
||||||
|
using Samples;
|
||||||
|
using System.Collections.Concurrent;
|
||||||
|
|
||||||
namespace AspNetCoreMvc.Controllers
|
namespace AspNetCoreMvc.Controllers
|
||||||
{
|
{
|
||||||
|
@ -43,10 +45,13 @@ namespace AspNetCoreMvc.Controllers
|
||||||
return samples.ToList ();
|
return samples.ToList ();
|
||||||
}), true);
|
}), true);
|
||||||
|
|
||||||
|
static readonly ConcurrentDictionary<string, Element> sharedSamples =
|
||||||
|
new ConcurrentDictionary<string, Element> ();
|
||||||
|
|
||||||
public static List<Samples.ISample> Samples => lazySamples.Value;
|
public static List<Samples.ISample> Samples => lazySamples.Value;
|
||||||
|
|
||||||
[Route("/Samples/Run/{name}")]
|
[Route("/Samples/Run/{name}")]
|
||||||
public IActionResult Run (string name)
|
public IActionResult Run (string name, bool shared)
|
||||||
{
|
{
|
||||||
if (string.IsNullOrWhiteSpace (name) || name.Length > 32)
|
if (string.IsNullOrWhiteSpace (name) || name.Length > 32)
|
||||||
return BadRequest ();
|
return BadRequest ();
|
||||||
|
@ -55,7 +60,18 @@ namespace AspNetCoreMvc.Controllers
|
||||||
if (s == null)
|
if (s == null)
|
||||||
return NotFound ();
|
return NotFound ();
|
||||||
|
|
||||||
return new ElementResult (s.CreateElement (), title: s.Title + " - Ooui Samples");
|
var element = shared ? GetSharedSample (s) : s.CreateElement ();
|
||||||
|
|
||||||
|
return new ElementResult (element, title: s.Title + " - Ooui Samples");
|
||||||
|
}
|
||||||
|
|
||||||
|
private Element GetSharedSample (ISample s)
|
||||||
|
{
|
||||||
|
if (sharedSamples.TryGetValue (s.Title, out var e))
|
||||||
|
return e;
|
||||||
|
e = s.CreateElement ();
|
||||||
|
sharedSamples[s.Title] = e;
|
||||||
|
return e;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,10 @@
|
||||||
<h3>Samples</h3>
|
<h3>Samples</h3>
|
||||||
<ul>
|
<ul>
|
||||||
@foreach (var s in SamplesController.Samples) {
|
@foreach (var s in SamplesController.Samples) {
|
||||||
<li><a asp-area="" asp-controller="Samples" asp-action="Run" asp-route-name="@s.Title">@s.Title</a></li>
|
<li>
|
||||||
|
<a asp-area="" asp-controller="Samples" asp-action="Run" asp-route-name="@s.Title">@s.Title</a>
|
||||||
|
(<a asp-area="" asp-controller="Samples" asp-action="Run" asp-route-name="@s.Title" asp-route-shared="@true">Shared</a>)
|
||||||
|
</li>
|
||||||
}
|
}
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -17,7 +17,7 @@ namespace Samples
|
||||||
public Element CreateElement ()
|
public Element CreateElement ()
|
||||||
{
|
{
|
||||||
var heading = new Heading ("Draw");
|
var heading = new Heading ("Draw");
|
||||||
var subtitle = new Paragraph ("Click to draw a collaborative masterpiece");
|
var subtitle = new Paragraph ("Click to draw a masterpiece");
|
||||||
var canvas = new Canvas {
|
var canvas = new Canvas {
|
||||||
Width = 320,
|
Width = 320,
|
||||||
Height = 240,
|
Height = 240,
|
||||||
|
|
Loading…
Reference in New Issue