Ooui-tws-port/PlatformSamples/AspNetCoreMvc/Controllers/SamplesController.cs

84 lines
2.7 KiB
C#
Raw Normal View History

2017-11-10 06:02:36 +00:00
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using AspNetCoreMvc.Models;
using Ooui;
using Ooui.AspNetCore;
2017-11-16 05:03:36 +00:00
using Samples;
using System.Collections.Concurrent;
2017-11-10 06:02:36 +00:00
namespace AspNetCoreMvc.Controllers
{
public class SamplesController : Controller
{
public IActionResult Clicker ()
{
var count = 0;
var head = new Heading { Text = "Click away!" };
var label = new Label { Text = "0" };
var btn = new Button { Text = "Increase" };
btn.Click += (sender, e) => {
2017-11-10 06:02:36 +00:00
count++;
label.Text = count.ToString ();
};
var div = new Div ();
div.AppendChild (head);
div.AppendChild (label);
div.AppendChild (btn);
return new ElementResult (div);
}
2017-11-10 06:35:47 +00:00
static readonly Lazy<List<Samples.ISample>> lazySamples =
new Lazy<List<Samples.ISample>> ((() => {
var sampleType = typeof (Samples.ISample);
var asm = sampleType.Assembly;
var sampleTypes = asm.GetTypes ().Where (x => x.Name.EndsWith ("Sample", StringComparison.Ordinal) && x != sampleType);
2017-11-16 04:32:17 +00:00
var samples = from t in sampleTypes
let s = Activator.CreateInstance (t) as Samples.ISample
where s != null
orderby s.Title
select s;
2017-11-10 06:35:47 +00:00
return samples.ToList ();
}), true);
2017-11-16 05:03:36 +00:00
static readonly ConcurrentDictionary<string, Element> sharedSamples =
new ConcurrentDictionary<string, Element> ();
2017-11-10 06:35:47 +00:00
public static List<Samples.ISample> Samples => lazySamples.Value;
2017-11-16 05:48:12 +00:00
[Route ("/Samples/Run/{name}")]
2017-11-16 05:03:36 +00:00
public IActionResult Run (string name, bool shared)
2017-11-10 06:35:47 +00:00
{
if (string.IsNullOrWhiteSpace (name) || name.Length > 32)
return BadRequest ();
2017-11-16 05:48:12 +00:00
2017-11-10 06:35:47 +00:00
var s = Samples.FirstOrDefault (x => x.Title == name);
if (s == null)
return NotFound ();
2017-11-16 05:03:36 +00:00
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;
2017-11-10 06:35:47 +00:00
}
2017-11-16 05:48:12 +00:00
[Route ("/shared-button")]
public IActionResult SharedButton ()
{
return Run ("Button Counter", true);
}
2017-11-10 06:02:36 +00:00
}
}