Put samples on the web site
This commit is contained in:
		
							parent
							
								
									2e8a605d13
								
							
						
					
					
						commit
						de9102f38a
					
				| 
						 | 
				
			
			@ -18,5 +18,6 @@
 | 
			
		|||
  <ItemGroup>
 | 
			
		||||
    <ProjectReference Include="..\..\Ooui.AspNetCore\Ooui.AspNetCore.csproj" />
 | 
			
		||||
    <ProjectReference Include="..\..\Ooui\Ooui.csproj" />
 | 
			
		||||
    <ProjectReference Include="..\..\Samples\Samples.csproj" />
 | 
			
		||||
  </ItemGroup>
 | 
			
		||||
</Project>
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -29,5 +29,29 @@ namespace AspNetCoreMvc.Controllers
 | 
			
		|||
            div.AppendChild (btn);
 | 
			
		||||
            return new ElementResult (div);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        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);
 | 
			
		||||
                var samples = from t in sampleTypes let s = Activator.CreateInstance (t) as Samples.ISample where s != null select s;
 | 
			
		||||
                return samples.ToList ();
 | 
			
		||||
            }), true);
 | 
			
		||||
 | 
			
		||||
        public static List<Samples.ISample> Samples => lazySamples.Value;
 | 
			
		||||
 | 
			
		||||
        [Route("/Samples/Run/{name}")]
 | 
			
		||||
        public IActionResult Run (string name)
 | 
			
		||||
        {
 | 
			
		||||
            if (string.IsNullOrWhiteSpace (name) || name.Length > 32)
 | 
			
		||||
                return BadRequest ();
 | 
			
		||||
            
 | 
			
		||||
            var s = Samples.FirstOrDefault (x => x.Title == name);
 | 
			
		||||
            if (s == null)
 | 
			
		||||
                return NotFound ();
 | 
			
		||||
 | 
			
		||||
            return new ElementResult (s.CreateElement ());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,8 +16,9 @@
 | 
			
		|||
    <div class="col-md-3">
 | 
			
		||||
        <h3>Samples</h3>
 | 
			
		||||
        <ul>
 | 
			
		||||
            <li><a asp-area="" asp-controller="Samples" asp-action="Clicker">HTML Clicker</a></li>
 | 
			
		||||
            <li><a asp-area="" asp-controller="Samples" asp-action="XamarinFormsClicker">Xamarin Forms Clicker</a></li>
 | 
			
		||||
			@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>
 | 
			
		||||
			}
 | 
			
		||||
        </ul>
 | 
			
		||||
    </div>
 | 
			
		||||
    <div class="col-md-3">
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,3 +1,4 @@
 | 
			
		|||
@using AspNetCoreMvc
 | 
			
		||||
@using AspNetCoreMvc.Models
 | 
			
		||||
@using AspNetCoreMvc.Controllers
 | 
			
		||||
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,8 +3,10 @@ using Ooui;
 | 
			
		|||
 | 
			
		||||
namespace Samples
 | 
			
		||||
{
 | 
			
		||||
    public class ButtonSample
 | 
			
		||||
    public class ButtonSample : ISample
 | 
			
		||||
    {
 | 
			
		||||
        public string Title => "Button that count clicks";
 | 
			
		||||
 | 
			
		||||
        Button MakeButton ()
 | 
			
		||||
        {
 | 
			
		||||
            var button = new Button ("Click me!");
 | 
			
		||||
| 
						 | 
				
			
			@ -23,6 +25,11 @@ namespace Samples
 | 
			
		|||
            UI.Publish ("/shared-button", b);
 | 
			
		||||
            UI.Publish ("/button", MakeButton);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Element CreateElement ()
 | 
			
		||||
        {
 | 
			
		||||
            return MakeButton ();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,9 +5,16 @@ using Ooui;
 | 
			
		|||
 | 
			
		||||
namespace Samples
 | 
			
		||||
{
 | 
			
		||||
    public class DrawSample
 | 
			
		||||
    public class DrawSample : ISample
 | 
			
		||||
    {
 | 
			
		||||
        public string Title => "Collaborative Drawing";
 | 
			
		||||
 | 
			
		||||
        public void Publish ()
 | 
			
		||||
        {
 | 
			
		||||
            UI.Publish ("/draw", CreateElement ());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Element CreateElement ()
 | 
			
		||||
        {
 | 
			
		||||
            var heading = new Heading ("Draw");
 | 
			
		||||
            var subtitle = new Paragraph ("Click to draw a collaborative masterpiece");
 | 
			
		||||
| 
						 | 
				
			
			@ -41,9 +48,7 @@ namespace Samples
 | 
			
		|||
            app.AppendChild (subtitle);
 | 
			
		||||
            app.AppendChild (canvas);
 | 
			
		||||
            app.AppendChild (clearbtn);
 | 
			
		||||
            UI.Publish ("/draw", app);
 | 
			
		||||
            return app;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -6,24 +6,13 @@ using Ooui;
 | 
			
		|||
 | 
			
		||||
namespace Samples
 | 
			
		||||
{
 | 
			
		||||
	public class FilesSample
 | 
			
		||||
    public class FilesSample : ISample
 | 
			
		||||
	{
 | 
			
		||||
        public string Title => "Upload files";
 | 
			
		||||
 | 
			
		||||
		public void Publish ()
 | 
			
		||||
		{
 | 
			
		||||
			var heading = new Heading ("Upload Files");
 | 
			
		||||
			var subtitle = new Paragraph ("Upload files to the app");
 | 
			
		||||
 | 
			
		||||
			var uploadForm = new Form ();
 | 
			
		||||
			uploadForm.Action = "/files/upload";
 | 
			
		||||
			uploadForm.Method = "POST";
 | 
			
		||||
			uploadForm.EncodingType = "multipart/form-data";
 | 
			
		||||
			uploadForm.AppendChild (new Input (InputType.File) { Name = "file" });
 | 
			
		||||
			uploadForm.AppendChild (new Input (InputType.Submit) { Value = "Upload" });
 | 
			
		||||
 | 
			
		||||
			var app = new Div ();
 | 
			
		||||
			app.AppendChild (heading);
 | 
			
		||||
			app.AppendChild (subtitle);
 | 
			
		||||
			app.AppendChild (uploadForm);
 | 
			
		||||
            var app = CreateElement ();
 | 
			
		||||
 | 
			
		||||
			UI.Publish ("/files", app);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -133,5 +122,25 @@ namespace Samples
 | 
			
		|||
			}
 | 
			
		||||
			return -1;
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
        public Element CreateElement ()
 | 
			
		||||
        {
 | 
			
		||||
            var heading = new Heading ("Upload Files");
 | 
			
		||||
            var subtitle = new Paragraph ("Upload files to the app");
 | 
			
		||||
 | 
			
		||||
            var uploadForm = new Form ();
 | 
			
		||||
            uploadForm.Action = "/files/upload";
 | 
			
		||||
            uploadForm.Method = "POST";
 | 
			
		||||
            uploadForm.EncodingType = "multipart/form-data";
 | 
			
		||||
            uploadForm.AppendChild (new Input (InputType.File) { Name = "file" });
 | 
			
		||||
            uploadForm.AppendChild (new Input (InputType.Submit) { Value = "Upload" });
 | 
			
		||||
 | 
			
		||||
            var app = new Div ();
 | 
			
		||||
            app.AppendChild (heading);
 | 
			
		||||
            app.AppendChild (subtitle);
 | 
			
		||||
            app.AppendChild (uploadForm);
 | 
			
		||||
 | 
			
		||||
            return app;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -0,0 +1,11 @@
 | 
			
		|||
using System;
 | 
			
		||||
using Ooui;
 | 
			
		||||
 | 
			
		||||
namespace Samples
 | 
			
		||||
{
 | 
			
		||||
    public interface ISample
 | 
			
		||||
    {
 | 
			
		||||
        string Title { get; }
 | 
			
		||||
        Element CreateElement ();
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -5,8 +5,10 @@ using Ooui;
 | 
			
		|||
 | 
			
		||||
namespace Samples
 | 
			
		||||
{
 | 
			
		||||
    public class TodoSample
 | 
			
		||||
    public class TodoSample : ISample
 | 
			
		||||
    {
 | 
			
		||||
        public string Title => "Global TODO list";
 | 
			
		||||
 | 
			
		||||
        List items = new List () {
 | 
			
		||||
            ClassName = "list-group",
 | 
			
		||||
        };
 | 
			
		||||
| 
						 | 
				
			
			@ -106,6 +108,11 @@ namespace Samples
 | 
			
		|||
 | 
			
		||||
            UI.Publish ("/todo", MakeTodo);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Element CreateElement ()
 | 
			
		||||
        {
 | 
			
		||||
            return MakeTodo ();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,8 +4,10 @@ using Ooui.Forms;
 | 
			
		|||
 | 
			
		||||
namespace Samples
 | 
			
		||||
{
 | 
			
		||||
	public class XamarinFormsSample
 | 
			
		||||
    public class XamarinFormsSample : ISample
 | 
			
		||||
	{
 | 
			
		||||
        public string Title => "Xamarin.Forms Button Counter";
 | 
			
		||||
 | 
			
		||||
		Page MakePage ()
 | 
			
		||||
		{
 | 
			
		||||
			Forms.Init ();
 | 
			
		||||
| 
						 | 
				
			
			@ -46,5 +48,10 @@ namespace Samples
 | 
			
		|||
 | 
			
		||||
            Ooui.UI.Publish ("/xamarin-forms", () => MakePage ().CreateElement ());
 | 
			
		||||
        }
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
        public Ooui.Element CreateElement ()
 | 
			
		||||
        {
 | 
			
		||||
            return MakePage ().CreateElement ();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue