コード例 #1
0
ファイル: AutocompletePage.cs プロジェクト: rChavz/lara
        public Task OnGet()
        {
            var builder = new LaraBuilder(LaraUI.Document.Body);

            builder.Push("div")
            .Push(_auto)
            .Pop()
            .Pop()
            .Push("div")
            .Push("button")
            .InnerText("Read")
            .On("click", () =>
            {
                _span.InnerText = _auto.Value;
                return(Task.CompletedTask);
            })
            .Pop()
            .Pop()
            .Push("div")
            .AddNode(_span)
            .Pop();
            _auto.Start(new AutocompleteOptions
            {
                AutoFocus = true,
                MinLength = 0,
                Strict    = true,
                Provider  = this
            });
            return(Task.CompletedTask);
        }
コード例 #2
0
ファイル: ComponentTesting.cs プロジェクト: rChavz/lara
        public void GetSlotElementFinds()
        {
            var x       = new MySlotter();
            var builder = new LaraBuilder(x);

            builder.Push("div", "", "slot1")
            .Pop()
            .Push("div", "", "slot2")
            .Push("div", "", "slot2a")
            .Pop()
            .Pop()
            .Push("div", "", "slot3")
            .Attribute("slot", "a")
            .Pop();
            var set = new HashSet <string?>();

            foreach (var item in x.GetSlottedElements(""))
            {
                if (item is Element element)
                {
                    set.Add(element.Id);
                }
            }
            Assert.Contains("slot1", set);
            Assert.Contains("slot2", set);
            Assert.DoesNotContain("slot2a", set);
            Assert.DoesNotContain("slot3", set);
            var list = new List <Node>(x.GetSlottedElements("a"));

            Assert.Single(list);
            var child = list[0] as Element;

            Assert.NotNull(child);
            Assert.Equal("slot3", child !.Id);
        }
コード例 #3
0
ファイル: EvalFilterPage.cs プロジェクト: rChavz/lara
        public Task OnGet()
        {
            var builder = new LaraBuilder(LaraUI.Page.Document.Body);

            builder.Push("div")
            .Push("input")
            .Pop()
            .Pop()
            .Push("div")
            .Push(_span)
            .Pop()
            .Pop();
            LaraUI.Page.Document.On(new EventSettings
            {
                EventName  = "keyup",
                EvalFilter = "event.keyCode === 13",
                Handler    = () =>
                {
                    _counter++;
                    _span.InnerText = _counter.ToString();
                    return(Task.CompletedTask);
                }
            });
            return(Task.CompletedTask);
        }
コード例 #4
0
        public Task OnGet()
        {
            var document = LaraUI.Page.Document;

            SampleAppBootstrap.AppendTo(document.Head);
            var builder = new LaraBuilder(document.Body);

            builder.Push("div", "container")
            .Push("table", "table table-hover")
            .Push("thead", "thead-light")
            .Push("tr")
            .Push("th")
            .Attribute("scope", "col")
            .AppendText("First name")
            .Pop()
            .Push("th")
            .Attribute("scope", "col")
            .AppendText("Last name")
            .Pop()
            .Pop()
            .Push("tbody")
            .Push("tr")
            .Push("td").AppendText("John").Pop()
            .Push("td").AppendText("Jones").Pop()
            .Pop()
            .Push("tr")
            .Push("td").AppendText("Amy").Pop()
            .Push("td").AppendText("Smith").Pop()
            .Pop()
            .Pop()
            .Pop()
            .Pop()
            .Pop();
            return(Task.CompletedTask);
        }
コード例 #5
0
ファイル: BuilderTesting.cs プロジェクト: rChavz/lara
        public async void OnEvent()
        {
            var executed = false;
            var root     = Element.Create("div");
            var builder  = new LaraBuilder(root);

            builder.On(new EventSettings
            {
                EventName = "click",
                Handler   = () =>
                {
                    executed = true;
                    return(Task.CompletedTask);
                }
            });

            /*var connection = new Connection(Guid.NewGuid(), IPAddress.Loopback);
             * var http = new Mock<HttpContext>();
             * var mock = new Mock<IPage>();
             * var context = new PageContext(_context.Application,
             *  http.Object, connection);*/
            await root.NotifyEvent("click");

            Assert.True(executed);
        }
コード例 #6
0
        public Element Build()
        {
            var row = Element.Create("div");

            row.Class = "form-row";

            var builder = new LaraBuilder(row);

            builder.Push("div", "form-group my-1")
            .Push("div", "form-check")
            .Push(_checkbox)
            .Pop()
            .Push("label", "form-check-label")
            .Attribute("for", _checkbox.Id)
            .AddTextNode("Check me out")
            .Pop()
            .Pop()
            .Pop()
            .Push("div", "form-group")
            .Push(_toggle)
            .AddTextNode("Toggle")
            .Pop()
            .Pop();

            return(row);
        }
コード例 #7
0
ファイル: PropagationPage.cs プロジェクト: rChavz/lara
        public Task OnGet()
        {
            var builder = new LaraBuilder(LaraUI.Page.Document.Body);

            builder.Push("div")
            .InnerText("Clicking on 'parent' or 'AllowPropagation' increases counter.")
            .Pop()
            .Push(_divCounter)
            .InnerText("0")
            .Pop()
            .Push("div")
            .Push("span")
            .InnerText("parent")
            .Pop()
            .On("click", ParentClick)
            .Push("div")
            .InnerText("StopPropagation")
            .On(new EventSettings
            {
                EventName = "click",
                Handler   = () => Task.CompletedTask
            })
            .Pop()
            .Push("div")
            .InnerText("AllowPropagation")
            .On(new EventSettings
            {
                EventName   = "click",
                Propagation = PropagationType.AllowAll,
                Handler     = () => Task.CompletedTask
            })
            .Pop()
            .Pop();
            return(Task.CompletedTask);
        }
コード例 #8
0
        public void SetFlag()
        {
            var root    = Element.Create("div");
            var builder = new LaraBuilder(root);

            builder.FlagAttribute("hidden", true);
            Assert.True(root.Hidden);
        }
コード例 #9
0
        public void SetAttribute()
        {
            var root    = Element.Create("div");
            var builder = new LaraBuilder(root);

            builder.Attribute("class", "red");
            Assert.Equal("red", root.Class);
        }
コード例 #10
0
        public void AddAction()
        {
            var root    = Element.Create("div");
            var builder = new LaraBuilder(root);

            builder.Add(MyAddAction);
            Assert.Equal(1, root.ChildCount);
        }
コード例 #11
0
        public void TooManyPops()
        {
            var root    = Element.Create("div");
            var builder = new LaraBuilder(root);

            builder.Push("button", "red").Pop();
            DomOperationsTesting.Throws <InvalidOperationException>(() => builder.Pop());
        }
コード例 #12
0
        public void PushElementClass()
        {
            var root    = Element.Create("root");
            var div     = Element.Create("div");
            var builder = new LaraBuilder(root);

            builder.Push(div, "red");
            Assert.Equal("red", div.Class);
        }
コード例 #13
0
        public void AddSiblings()
        {
            var root    = Element.Create("div");
            var builder = new LaraBuilder(root);

            builder.Push("button", "red").Pop();
            builder.Push("button", "red").Pop();
            Assert.Equal(2, root.ChildCount);
        }
コード例 #14
0
ファイル: ToolsTesting.cs プロジェクト: rChavz/lara
        public void LaraFlushEvent()
        {
            var x       = new InputElement();
            var builder = new LaraBuilder(x);

            builder.FlushEvent("click");
            x.NotifyEvent("click");
            Assert.True(x.Events.TryGetValue("click", out var ev));
            Assert.Equal("click", ev !.EventName);
        }
コード例 #15
0
        public void AddTextNodeEncodes()
        {
            var root    = Element.Create("div");
            var builder = new LaraBuilder(root);

            builder.AppendText("&lt;");
            var node = root.Children.FirstOrDefault() as TextNode;

            Assert.NotNull(node);
            Assert.Equal("&amp;lt;", node !.Data);
        }
コード例 #16
0
        public void PushClassName()
        {
            var root    = Element.Create("div");
            var builder = new LaraBuilder(root);

            builder.Push("div", "red").Pop();
            Assert.NotEmpty(root.Children);
            var child = root.Children.FirstOrDefault() as Element;

            Assert.NotNull(child);
            Assert.Equal("red", child !.Class);
        }
コード例 #17
0
ファイル: ComponentTesting.cs プロジェクト: rChavz/lara
        public Xcom() : base("x-com")
        {
            var builder = new LaraBuilder(ShadowRoot);

            builder.Push("div", "", "div1")
            .Push("div", "", "div1a")
            .Pop()
            .Pop()
            .Push("div", "", "div2")
            .Pop()
            .AppendText("lalas");
        }
コード例 #18
0
        // ReSharper disable once InconsistentNaming
        public void PushNS()
        {
            var root    = Element.Create("div");
            var builder = new LaraBuilder(root);

            builder.PushNS("abc", "svg").Pop();
            Assert.NotEmpty(root.Children);
            var child = root.Children.FirstOrDefault() as Element;

            Assert.NotNull(child);
            Assert.Equal("abc", child !.GetAttribute("xlmns"));
        }
コード例 #19
0
        public Task OnGet()
        {
            var document = LaraUI.Page.Document;

            SampleAppBootstrap.AppendTo(document.Head);
            var builder = new LaraBuilder(document.Body);

            builder.Push("my-checkbox", "m-3")
            .Attribute("label", "check me out")
            .Pop();
            return(Task.CompletedTask);
        }
コード例 #20
0
ファイル: ComponentTesting.cs プロジェクト: rChavz/lara
        public void OrphanSlotPrintsItself()
        {
            var document = new Document(new MyPage(), BaseModeController.DefaultKeepAliveInterval);
            var builder  = new LaraBuilder(document.Body);

            builder.Push("slot", "lalala").Pop();
            var writer = new DocumentWriter(document);

            writer.Print();
            var html = writer.ToString();

            Assert.Contains("lalala", html);
        }
コード例 #21
0
        public void AddNodes()
        {
            var root    = Element.Create("div");
            var builder = new LaraBuilder(root);
            var list    = new List <Node>()
            {
                new HtmlButtonElement(),
                new HtmlOptionElement()
            };

            builder.AddNodes(list);
            Assert.Equal(2, root.ChildCount);
        }
コード例 #22
0
        public void PushAdds()
        {
            var root    = Element.Create("div");
            var builder = new LaraBuilder(root);

            builder.Push("button", "red", "mybutton").Pop();
            Assert.NotEmpty(root.Children);
            var first = root.Children.FirstOrDefault() as HtmlButtonElement;

            Assert.NotNull(first);
            Assert.Equal("red", first !.Class);
            Assert.Equal("mybutton", first.Id);
        }
コード例 #23
0
ファイル: ConcurrentEventPage.cs プロジェクト: rChavz/lara
        public Task OnGet()
        {
            var builder = new LaraBuilder(LaraUI.Page.Document.Body);

            builder.Push("div")
            .Push("button")
            .InnerText("append line")
            .On("click", AppendHandler)
            .Pop()
            .Pop()
            .Push(_lines)
            .Pop();
            return(Task.CompletedTask);
        }
コード例 #24
0
        public static string GetSpinnerHtml(string message)
        {
            var div = Element.Create("div");

            div.Class = "d-flex justify-content-center";
            var builder = new LaraBuilder(div);

            builder.Push("div", "spinner-border")
            .Attribute("role", "status")
            .Pop()
            .Push("div", "ml-2")
            .AppendText(message)
            .Pop();
            return(div.GetHtml());
        }
コード例 #25
0
        public async void OnEventSimple()
        {
            var executed = false;
            var root     = Element.Create("div");
            var builder  = new LaraBuilder(root);

            builder.On("click", () =>
            {
                executed = true;
                return(Task.CompletedTask);
            });
            await root.NotifyEvent("click");

            Assert.True(executed);
        }
コード例 #26
0
        public CounterComponent() : base(MyCounter)
        {
            _div = Create("div");
            var data    = new CounterData();
            var builder = new LaraBuilder(ShadowRoot);

            builder.Push(_div, Class)
            .Push("span")
            .BindInnerText(data, x => x.Counter.ToString())
            .Pop()
            .Push("button", "btn btn-primary ml-2")
            .On("click", () => data.Counter++)
            .AppendText("increase")
            .Pop()
            .Pop();
        }
コード例 #27
0
ファイル: CheckboxComponent.cs プロジェクト: rChavz/lara
        public CheckboxComponent() : base(MyCheckbox)
        {
            _checkbox = new InputElement();
            _label    = Create("label");
            var builder = new LaraBuilder(ShadowRoot);

            builder.Push("div", "form-group form-check")
            .Push(_checkbox, "form-check-input")
            .Attribute("type", "checkbox")
            .On("click", () => UpdateLabel())
            .Pop()
            .Push(_label)
            .Attribute("for", _checkbox.EnsureElementId())
            .Pop()
            .Pop();
        }
コード例 #28
0
ファイル: ComponentTesting.cs プロジェクト: rChavz/lara
        public void SlotsPrintHostElements()
        {
            var document = new Document(new MyPage(), BaseModeController.DefaultKeepAliveInterval);
            var builder  = new LaraBuilder(document.Body);

            builder.Push("x-slotter")
            .Push("div", "lalala")
            .AppendText("hello")
            .Pop()
            .Pop();
            var writer = new DocumentWriter(document);

            writer.Print();
            var html = writer.ToString();

            Assert.Contains("lalala", html);
            Assert.Contains("hello", html);
            Assert.DoesNotContain("x-slotter", html);
        }
コード例 #29
0
ファイル: MultiselectSample.cs プロジェクト: rChavz/lara
        public MultiselectSample()
        {
            var @select = new SelectElement
            {
                Id       = "mymulti",
                Class    = "form-control",
                Multiple = true
            };
            var toggle = new Button
            {
                Class = "btn btn-primary"
            };

            toggle.AppendChild(new TextNode("Toggle"));
            @select.AddOption("N", "North");
            @select.AddOption("E", "East");
            @select.AddOption("S", "South");
            @select.AddOption("W", "West");
            toggle.On("click", () =>
            {
                foreach (var child in @select.Children)
                {
                    if (child is OptionElement option)
                    {
                        option.Selected = !option.Selected;
                    }
                }
                return(Task.CompletedTask);
            });
            Root       = Element.Create("div");
            Root.Class = "form-row";
            var builder = new LaraBuilder(Root);

            builder
            .Push("div", "form-group col-md-2")
            .Push(@select)
            .Pop()
            .Pop()
            .Push("div", "form-group col-md-1")
            .Push(toggle)
            .Pop()
            .Pop();
        }
コード例 #30
0
        public Element Build()
        {
            var row = Element.Create("div");

            row.Class = "form-row";

            var builder = new LaraBuilder(row);

            builder
            .Push("div", "form-group")
            .Push(_select)
            .Pop()
            .Pop()
            .Push("div", "form-group")
            .Push(_toggle)
            .Pop()
            .Pop();

            return(row);
        }