diff --git a/Ooui/UI.cs b/Ooui/UI.cs index 50bf1a8..d351b1f 100644 --- a/Ooui/UI.cs +++ b/Ooui/UI.cs @@ -193,7 +193,7 @@ namespace Ooui public static string GetUrl (string path) { var localhost = host == "*" ? "localhost" : host; - var url = $"http://{localhost}:{port}{path}"; + var url = Path.Combine($"http://{localhost}:{port}{path}"); return url; } diff --git a/Samples/BoxViewClockSample.cs b/Samples/BoxViewClockSample.cs index f576061..ef96405 100644 --- a/Samples/BoxViewClockSample.cs +++ b/Samples/BoxViewClockSample.cs @@ -1,11 +1,14 @@ using System; +using Ooui; using Xamarin.Forms; +using Color = Xamarin.Forms.Color; namespace Samples { public class BoxViewClockSample : ISample { public string Title => "Xamarin.Forms BoxViewClock"; + public string Path => "/box-view-clock"; BoxViewClockPage page; @@ -20,6 +23,11 @@ namespace Samples return page.GetOouiElement (); } + public void Publish() + { + UI.Publish(Path, CreateElement); + } + class BoxViewClockPage : ContentPage { // Structure for storing information about the three hands. diff --git a/Samples/BugSweeperSample.cs b/Samples/BugSweeperSample.cs index a6bb529..337e246 100644 --- a/Samples/BugSweeperSample.cs +++ b/Samples/BugSweeperSample.cs @@ -6,11 +6,17 @@ namespace Samples public class BugSweeperSample : ISample { public string Title => "Xamarin.Forms BugSweeper"; + public string Path => "/bugsweeper"; public Ooui.Element CreateElement () { var page = new BugSweeper.BugSweeperPage (); return page.GetOouiElement (); } + + public void Publish() + { + UI.Publish(Path, CreateElement); + } } } diff --git a/Samples/ButtonSample.cs b/Samples/ButtonSample.cs index 44d99d2..871f671 100644 --- a/Samples/ButtonSample.cs +++ b/Samples/ButtonSample.cs @@ -6,6 +6,7 @@ namespace Samples public class ButtonSample : ISample { public string Title => "Button Counter"; + public string Path => "/shared-button"; Button MakeButton () { @@ -25,7 +26,7 @@ namespace Samples { var b = MakeButton (); - UI.Publish ("/shared-button", b); + UI.Publish (Path, b); UI.Publish ("/button", MakeButton); } diff --git a/Samples/ButtonXamlSample.cs b/Samples/ButtonXamlSample.cs index cc82b4a..c60ee8b 100644 --- a/Samples/ButtonXamlSample.cs +++ b/Samples/ButtonXamlSample.cs @@ -1,16 +1,22 @@ using Ooui; -using Xamarin.Forms; - -namespace Samples -{ - public class ButtonXamlSample : ISample - { - public string Title => "Xamarin.Forms Button XAML"; - - public Ooui.Element CreateElement () - { +using Xamarin.Forms; + +namespace Samples +{ + public class ButtonXamlSample : ISample + { + public string Title => "Xamarin.Forms Button XAML"; + public string Path => "buttons"; + + public Ooui.Element CreateElement () + { var page = new ButtonXaml.ButtonXamlPage (); - return page.GetOouiElement (); - } - } -} + return page.GetOouiElement (); + } + + public void Publish() + { + UI.Publish(Path, CreateElement); + } + } +} diff --git a/Samples/DisplayAlertSample.cs b/Samples/DisplayAlertSample.cs index 783f0f6..7d7ac43 100644 --- a/Samples/DisplayAlertSample.cs +++ b/Samples/DisplayAlertSample.cs @@ -7,6 +7,7 @@ namespace Samples public class DisplayAlertSample : ISample { public string Title => "Xamarin.Forms DisplayAlert"; + public string Path => "/display-alert"; public Ooui.Element CreateElement () { @@ -16,7 +17,7 @@ namespace Samples public void Publish () { - UI.Publish ("/display-alert", CreateElement); + UI.Publish (Path, CreateElement); } } } diff --git a/Samples/DotMatrixClockSample.cs b/Samples/DotMatrixClockSample.cs index b901e86..a6f4e04 100644 --- a/Samples/DotMatrixClockSample.cs +++ b/Samples/DotMatrixClockSample.cs @@ -6,6 +6,7 @@ namespace Samples public class DotMatrixClockSample : ISample { public string Title => "Xamarin.Forms DoMatrixClock"; + public string Path => "/dotmatrixclock"; public Ooui.Element CreateElement() { @@ -15,7 +16,7 @@ namespace Samples public void Publish() { - UI.Publish("/dotmatrixclock", CreateElement); + UI.Publish(Path, CreateElement); } } } diff --git a/Samples/DrawSample.cs b/Samples/DrawSample.cs index 776e30f..305d0ea 100644 --- a/Samples/DrawSample.cs +++ b/Samples/DrawSample.cs @@ -8,10 +8,11 @@ namespace Samples public class DrawSample : ISample { public string Title => "Drawing"; + public string Path => "/draw"; public void Publish () { - UI.Publish ("/draw", CreateElement ()); + UI.Publish (Path, CreateElement ()); } public Element CreateElement () diff --git a/Samples/EditorSample.cs b/Samples/EditorSample.cs index ef0464e..9c67dc4 100644 --- a/Samples/EditorSample.cs +++ b/Samples/EditorSample.cs @@ -6,6 +6,7 @@ namespace Samples public class EditorSample : ISample { public string Title => "Xamarin.Forms Editor Sample"; + public string Path => "/editor"; public Ooui.Element CreateElement() { @@ -40,7 +41,7 @@ namespace Samples public void Publish() { - UI.Publish("/editor", CreateElement); + UI.Publish(Path, CreateElement); } } } diff --git a/Samples/FilesSample.cs b/Samples/FilesSample.cs index fbb05d5..b3ea323 100644 --- a/Samples/FilesSample.cs +++ b/Samples/FilesSample.cs @@ -6,15 +6,16 @@ using Ooui; namespace Samples { - public class FilesSample //: ISample + public class FilesSample : ISample { public string Title => "Upload files"; + public string Path => "/files"; - public void Publish () + public void Publish () { var app = CreateElement (); - UI.Publish ("/files", app); + UI.Publish (Path, app); UI.PublishCustomResponse ("/files/upload", HandleUpload); } diff --git a/Samples/ISample.cs b/Samples/ISample.cs index 5f6e6ab..81e32db 100644 --- a/Samples/ISample.cs +++ b/Samples/ISample.cs @@ -6,6 +6,8 @@ namespace Samples public interface ISample { string Title { get; } + string Path { get; } Element CreateElement (); + void Publish(); } } diff --git a/Samples/ListViewSample.cs b/Samples/ListViewSample.cs index e76b4e4..1764484 100644 --- a/Samples/ListViewSample.cs +++ b/Samples/ListViewSample.cs @@ -59,6 +59,7 @@ namespace Samples class EntryListViewSample : ISample { public string Title => "Xamarin.Forms Basic Entry ListView Sample"; + public string Path => "/entry-listview"; public Ooui.Element CreateElement() { @@ -91,13 +92,14 @@ namespace Samples public void Publish() { - UI.Publish("/entry-listview", CreateElement); + UI.Publish(Path, CreateElement); } } class SwitchListViewSample : ISample { public string Title => "Xamarin.Forms Basic Switch ListView Sample"; + public string Path => "/switch-listview"; public Ooui.Element CreateElement() { @@ -130,7 +132,7 @@ namespace Samples public void Publish() { - UI.Publish("/switch-listview", CreateElement); + UI.Publish(Path, CreateElement); } } } diff --git a/Samples/MonkeysSample.cs b/Samples/MonkeysSample.cs index ea7b23a..c04adcd 100644 --- a/Samples/MonkeysSample.cs +++ b/Samples/MonkeysSample.cs @@ -9,6 +9,7 @@ namespace Samples public class MonkeysSample : ISample { public string Title => "Xamarin.Forms Monkeys"; + public string Path => "/monkeys"; public Ooui.Element CreateElement() { @@ -18,7 +19,7 @@ namespace Samples public void Publish() { - UI.Publish("/monkeys", CreateElement); + UI.Publish(Path, CreateElement); } } } diff --git a/Samples/NavigationSample.cs b/Samples/NavigationSample.cs index d920ebf..66affb6 100644 --- a/Samples/NavigationSample.cs +++ b/Samples/NavigationSample.cs @@ -7,6 +7,7 @@ namespace Samples.Navigation public class NavigationSample : ISample { public string Title => "Xamarin.Forms Navigation XAML"; + public string Path => "navigation-sample"; public Ooui.Element CreateElement() { @@ -14,5 +15,10 @@ namespace Samples.Navigation var root = new NavigationPage(page); return root.GetOouiElement(); } + + public void Publish() + { + UI.Publish(Path, CreateElement); + } } } diff --git a/Samples/PickerSample.cs b/Samples/PickerSample.cs index d804d68..493698c 100644 --- a/Samples/PickerSample.cs +++ b/Samples/PickerSample.cs @@ -11,8 +11,9 @@ namespace Samples private Xamarin.Forms.Picker _picker; public string Title => "Xamarin.Forms Picker Sample"; + public string Path => "/picker"; - List myItems = new List + List myItems = new List { "red", "green", @@ -69,7 +70,7 @@ namespace Samples public void Publish() { - UI.Publish("/picker", CreateElement); + UI.Publish(Path, CreateElement); } } } diff --git a/Samples/Program.cs b/Samples/Program.cs index a80416b..59320c5 100644 --- a/Samples/Program.cs +++ b/Samples/Program.cs @@ -1,4 +1,5 @@ using System; +using System.Collections.Generic; using Ooui; namespace Samples @@ -25,27 +26,39 @@ namespace Samples } } - new EntryListViewSample().Publish(); - new ButtonSample ().Publish (); - new TodoSample ().Publish (); - new DrawSample ().Publish (); - new FilesSample ().Publish (); - new DisplayAlertSample ().Publish (); - new DotMatrixClockSample().Publish(); - new EditorSample().Publish(); - new MonkeysSample().Publish(); - new RefreshListViewSample ().Publish (); - new SearchBarSample().Publish(); - new SliderSample().Publish(); - new SwitchListViewSample().Publish(); - new TimePickerSample().Publish(); - new TipCalcSample().Publish(); - new WeatherAppSample().Publish(); - new XuzzleSample().Publish(); - new WebViewSample().Publish(); - new PickerSample().Publish(); + var samples = new List + { + new EntryListViewSample(), + new ButtonSample (), + new TodoSample (), + new DrawSample (), + new FilesSample(), + new DisplayAlertSample (), + new DotMatrixClockSample(), + new EditorSample(), + new MonkeysSample(), + new BugSweeperSample(), + new RefreshListViewSample (), + new SearchBarSample(), + new SliderSample(), + new SwitchListViewSample(), + new TimePickerSample(), + new TipCalcSample(), + new WeatherAppSample(), + new XuzzleSample(), + new WebViewSample(), + new PickerSample(), + }; - UI.Present ("/display-alert"); + foreach (var sample in samples) + { + sample.Publish(); + } + + var samplePage = new SamplePickerSample(samples); + samplePage.Publish(); + + UI.Present (samplePage.Path); Console.ReadLine (); } diff --git a/Samples/RefreshListViewSample.cs b/Samples/RefreshListViewSample.cs index 8a52f6c..f7a2de6 100644 --- a/Samples/RefreshListViewSample.cs +++ b/Samples/RefreshListViewSample.cs @@ -6,6 +6,7 @@ namespace Samples public class RefreshListViewSample : ISample { public string Title => "Xamarin.Forms RefreshListView"; + public string Path => "/refreshlistview"; public Ooui.Element CreateElement () { @@ -15,7 +16,7 @@ namespace Samples public void Publish () { - UI.Publish ("/refreshlistview", CreateElement); + UI.Publish (Path, CreateElement); } } } diff --git a/Samples/SamplePickerSample.cs b/Samples/SamplePickerSample.cs new file mode 100644 index 0000000..53d9fc8 --- /dev/null +++ b/Samples/SamplePickerSample.cs @@ -0,0 +1,53 @@ +using System.Collections.Generic; +using System.Linq; +using Ooui; +using Ooui.Forms; +using Xamarin.Forms; +using Element = Ooui.Element; + +namespace Samples +{ + public class SamplePickerSample : ISample + { + private readonly IEnumerable _samplePages; + + public SamplePickerSample(IEnumerable samplePages) + { + _samplePages = samplePages.OrderBy(s => s.Title); + } + + public string Title => "Ooui samples - choose your demo"; + public string Path => "/sample-picker"; + public Element CreateElement() + { + var panel = new StackLayout(); + + var titleLabel = new Xamarin.Forms.Label + { + Text = "Choose a sample", + FontSize = 24, + FontAttributes = FontAttributes.Bold, + }; + panel.Children.Add(titleLabel); + + foreach (var samplePage in _samplePages) + { + panel.Children.Add(new LinkLabel {Text = samplePage.Title.Replace("Xamarin.Forms ", ""), HRef = samplePage.Path}); + } + + var page = new ContentPage + { + Title = Title, + Padding = new Thickness(16), + Content = panel + }; + + return page.GetOouiElement(); + } + + public void Publish() + { + UI.Publish(Path, CreateElement); + } + } +} diff --git a/Samples/SearchBarSample.cs b/Samples/SearchBarSample.cs index ffbf7c9..8a0e130 100644 --- a/Samples/SearchBarSample.cs +++ b/Samples/SearchBarSample.cs @@ -12,6 +12,7 @@ namespace Samples private Xamarin.Forms.Label _resultsLabel; public string Title => "Xamarin.Forms SearchBar"; + public string Path => "/searchbar"; public Ooui.Element CreateElement() { @@ -108,7 +109,7 @@ namespace Samples public void Publish() { - UI.Publish("/searchbar", CreateElement); + UI.Publish(Path, CreateElement); } } } diff --git a/Samples/SliderSample.cs b/Samples/SliderSample.cs index 8b858d0..ed5a486 100644 --- a/Samples/SliderSample.cs +++ b/Samples/SliderSample.cs @@ -9,6 +9,7 @@ namespace Samples private Xamarin.Forms.Label _label; public string Title => "Xamarin.Forms Slider Sample"; + public string Path => "/slider"; public Ooui.Element CreateElement() { @@ -53,7 +54,7 @@ namespace Samples public void Publish() { - UI.Publish("/slider", CreateElement); + UI.Publish(Path, CreateElement); } } } diff --git a/Samples/SwitchErrorSample.cs b/Samples/SwitchErrorSample.cs index 98ba63c..4cc31b8 100644 --- a/Samples/SwitchErrorSample.cs +++ b/Samples/SwitchErrorSample.cs @@ -7,6 +7,7 @@ namespace Samples public class SwitchErrorSample : ISample { public string Title => "Xamarin.Forms Switch Error"; + public string Path => "/switch"; public Ooui.Element CreateElement () { @@ -34,7 +35,7 @@ namespace Samples public void Publish() { - UI.Publish ("/switch", CreateElement); + UI.Publish (Path, CreateElement); } } } diff --git a/Samples/TimePickerSample.cs b/Samples/TimePickerSample.cs index e4b487b..e7190cf 100644 --- a/Samples/TimePickerSample.cs +++ b/Samples/TimePickerSample.cs @@ -6,6 +6,7 @@ namespace Samples public class TimePickerSample : ISample { public string Title => "Xamarin.Forms TimePicker Sample"; + public string Path => "/timepicker"; public Ooui.Element CreateElement() { @@ -33,7 +34,7 @@ namespace Samples public void Publish() { - UI.Publish("/timepicker", CreateElement); + UI.Publish(Path, CreateElement); } } } diff --git a/Samples/TipCalcSample.cs b/Samples/TipCalcSample.cs index a3440d7..f0e9a4b 100644 --- a/Samples/TipCalcSample.cs +++ b/Samples/TipCalcSample.cs @@ -6,6 +6,7 @@ namespace Samples public class TipCalcSample : ISample { public string Title => "Xamarin.Forms TipCalc"; + public string Path => "/tipcalc"; public Ooui.Element CreateElement() { @@ -15,7 +16,7 @@ namespace Samples public void Publish() { - UI.Publish("/tipcalc", CreateElement); + UI.Publish(Path, CreateElement); } } } diff --git a/Samples/TodoSample.cs b/Samples/TodoSample.cs index f6a9a0b..4ed29c8 100644 --- a/Samples/TodoSample.cs +++ b/Samples/TodoSample.cs @@ -8,6 +8,7 @@ namespace Samples public class TodoSample : ISample { public string Title => "Todo List"; + public string Path => "/todo"; class Item : ListItem { @@ -112,7 +113,7 @@ namespace Samples { var b = MakeTodo (); - UI.Publish ("/todo", MakeTodo); + UI.Publish (Path, MakeTodo); } public Element CreateElement () diff --git a/Samples/WeatherAppSample.cs b/Samples/WeatherAppSample.cs index 3119138..3b28dae 100644 --- a/Samples/WeatherAppSample.cs +++ b/Samples/WeatherAppSample.cs @@ -6,6 +6,7 @@ namespace Samples public class WeatherAppSample : ISample { public string Title => "Xamarin.Forms WeatherApp"; + public string Path => "/weatherapp"; public Ooui.Element CreateElement() { @@ -15,7 +16,7 @@ namespace Samples public void Publish() { - UI.Publish("/weatherapp", CreateElement); + UI.Publish(Path, CreateElement); } } } diff --git a/Samples/WebViewSample.cs b/Samples/WebViewSample.cs index 2c0593e..98ac65f 100644 --- a/Samples/WebViewSample.cs +++ b/Samples/WebViewSample.cs @@ -6,6 +6,7 @@ namespace Samples public class WebViewSample : ISample { public string Title => "Xamarin.Forms WebView Sample"; + public string Path => "/webview"; public Ooui.Element CreateElement() { @@ -35,7 +36,7 @@ namespace Samples public void Publish() { - UI.Publish("/webview", CreateElement); + UI.Publish(Path, CreateElement); } } } diff --git a/Samples/WrappingTextSample.cs b/Samples/WrappingTextSample.cs index 9305d4f..5eb5c42 100644 --- a/Samples/WrappingTextSample.cs +++ b/Samples/WrappingTextSample.cs @@ -6,6 +6,7 @@ namespace Samples public class WrappingTextSample : ISample { public string Title => "Xamarin.Forms Wrapping Text"; + public string Path => "/wrapping"; public Ooui.Element CreateElement() { @@ -82,7 +83,7 @@ namespace Samples public void Publish() { - Ooui.UI.Publish("/wrapping", CreateElement); + Ooui.UI.Publish(Path, CreateElement); } const string shortText = "Lorem ipsum dolor sit amet."; diff --git a/Samples/XamlPreviewPageSample.cs b/Samples/XamlPreviewPageSample.cs index 8f4bc2d..363eaa2 100644 --- a/Samples/XamlPreviewPageSample.cs +++ b/Samples/XamlPreviewPageSample.cs @@ -1,19 +1,28 @@ -using System; +using Ooui; +using System; using System.Threading; using Xamarin.Forms; using Xamarin.Forms.Xaml; +using Color = Xamarin.Forms.Color; +using Label = Xamarin.Forms.Label; namespace Samples { public class XamlPreviewPageSample : ISample { public string Title => "Xamarin.Forms XAML Editor"; + public string Path => "/xaml-editor"; public Ooui.Element CreateElement () { var page = new XamlEditorPage (); return page.GetOouiElement (); } + + public void Publish() + { + UI.Publish(Path, CreateElement); + } } public partial class XamlEditorPage : ContentPage @@ -107,7 +116,8 @@ namespace Samples catch (OperationCanceledException) { } catch (Exception ex) { - results.Content = new Label { + results.Content = new Label + { TextColor = Color.DarkRed, FontSize = 12, Text = ex.ToString (), diff --git a/Samples/XuzzleSample.cs b/Samples/XuzzleSample.cs index 10f1d2f..fdd83d2 100644 --- a/Samples/XuzzleSample.cs +++ b/Samples/XuzzleSample.cs @@ -6,6 +6,7 @@ namespace Samples public class XuzzleSample : ISample { public string Title => "Xamarin.Forms Xuzzle"; + public string Path => "/xuzzle"; public Ooui.Element CreateElement() { @@ -15,7 +16,7 @@ namespace Samples public void Publish() { - UI.Publish("/xuzzle", CreateElement); + UI.Publish(Path, CreateElement); } } }