コード例 #1
0
        public override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (SkipRender(context))
            {
                return;
            }
            var td = new TagBuilder("td");

            onRender?.Invoke(td);

            Bind isBind = GetBinding(nameof(ItemsSource));

            if (isBind != null)
            {
                td.MergeAttribute("v-for", $"(cell, cellIndex) in {isBind.GetPath(context)}");
                td.MergeAttribute(":key", "cellIndex");
                using (var scope = new ScopeContext(context, "cell"))
                {
                    RenderCell(td, context);
                }
            }
            else
            {
                RenderCell(td, context);
            }
        }
コード例 #2
0
        internal void RenderStart(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (context.IsDialog && RunAt == RunMode.ServerUrl)
            {
                throw new XamlException("RunAt='ServerUrl' is not allowed in dialogs");
            }
            String cwTag = "collection-view";

            if (RunAt == RunMode.Server)
            {
                cwTag = "collection-view-server";
            }
            else if (RunAt == RunMode.ServerUrl)
            {
                cwTag = "collection-view-server-url";
            }
            _outer = new TagBuilder(cwTag, "cw", IsInGrid);
            onRender?.Invoke(_outer);
            if (Parent is Page)
            {
                _outer.AddCssClass("cw-absolute");
            }
            MergeAttributes(_outer, context);
            Bind itemsSource = GetBinding(nameof(ItemsSource));

            if (itemsSource != null)
            {
                _outer.MergeAttribute(":items-source", itemsSource.GetPath(context));
            }

            if (Sort != null)
            {
                _outer.MergeAttribute(":initial-sort", Sort.GetJsValue(context));
            }
            if (Filter != null)
            {
                _outer.MergeAttribute(":initial-filter", Filter.GetJsValue(context));
                _outer.MergeAttribute(":persistent-filter", Filter.GetPersistentValue(context));
                if (RunAt == RunMode.Client)
                {
                    if (String.IsNullOrEmpty(FilterDelegate))
                    {
                        throw new XamlException("To filter on the client, a FilterDelegate is required");
                    }
                    _outer.MergeAttribute(":filter-delegate", $"$delegate('{FilterDelegate}')");
                }
            }

            if (PageSize != null)
            {
                _outer.MergeAttribute(":initial-page-size", PageSize.Value.ToString());
            }

            _outer.RenderStart(context);
            _inner = new TagBuilder("template");
            _inner.MergeAttribute("slot-scope", "Parent");
            _inner.RenderStart(context);
        }
コード例 #3
0
        internal override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (SkipRender(context))
            {
                return;
            }
            var table = new TagBuilder("table", "a2-table", IsInGrid);

            onRender?.Invoke(table);
            MergeAttributes(table, context);
            if (Background != TableBackgroundStyle.None)
            {
                table.AddCssClass("bk-" + Background.ToString().ToKebabCase());
            }
            if (CellSpacing != CellSpacingMode.None)
            {
                table.AddCssClass("table-separate-border");
                table.AddCssClass("table-cell-spacing-" + CellSpacing.ToString().ToLowerInvariant());
            }
            if (GridLines != GridLinesVisibility.None)
            {
                table.AddCssClass($"grid-{GridLines.ToString().ToLowerInvariant()}");
            }

            table.AddCssClassBool(Border, "bordered");
            table.AddCssClassBool(Compact, "compact");
            table.AddCssClassBool(Hover, "hover");
            table.AddCssClassBool(Striped, "striped");

            Bind isBind = GetBinding(nameof(ItemsSource));

            if (isBind != null)
            {
                table.MergeAttribute("v-lazy", isBind.GetPath(context));
            }

            table.RenderStart(context);

            if (_columns != null)
            {
                Columns.Render(context);
            }

            RenderHeader(context);

            RenderBody(context);
            RenderFooter(context);

            table.RenderEnd(context);
        }
コード例 #4
0
        void RenderBody(RenderContext context)
        {
            if (Rows.Count == 0)
            {
                return;
            }
            var  tbody  = new TagBuilder("tbody").RenderStart(context);
            Bind isBind = GetBinding(nameof(ItemsSource));

            if (isBind != null)
            {
                var repeatAttr = $"(row, rowIndex) in {isBind.GetPath(context)}";
                using (new ScopeContext(context, "row"))
                {
                    if (Rows.Count == 1)
                    {
                        Rows[0].RenderElement(context, (tag) =>
                        {
                            tag.MergeAttribute("v-for", repeatAttr);
                        });
                    }
                    else
                    {
                        var tml = new TagBuilder("template");
                        tml.MergeAttribute("v-for", repeatAttr);
                        tml.RenderStart(context);
                        using (var cts = new ScopeContext(context, "row"))
                        {
                            var rNo = 0;
                            foreach (var row in Rows)
                            {
                                row.RenderElement(context, (tag) => tag.MergeAttribute(":key", $"'r{rNo}:' + rowIndex"));
                                rNo += 1;
                            }
                        }
                        tml.RenderEnd(context);
                    }
                }
            }
            else
            {
                foreach (var row in Rows)
                {
                    row.RenderElement(context);
                }
            }
            tbody.RenderEnd(context);
        }
コード例 #5
0
ファイル: TableCell.cs プロジェクト: Illya-Lykhachov/A2v10
        internal override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (SkipRender(context))
            {
                return;
            }
            var td = new TagBuilder("td");

            onRender?.Invoke(td);

            MergeAttributes(td, context);

            var boldBind   = GetBinding(nameof(Bold));
            var italicBind = GetBinding(nameof(Italic));

            if (boldBind != null || italicBind != null)
            {
                var sb = new StringBuilder("{");
                if (boldBind != null)
                {
                    sb.Append($"bold: {boldBind.GetPath(context)}, ");
                }
                if (italicBind != null)
                {
                    sb.Append($"italic: {italicBind.GetPath(context)}, ");
                }
                sb.RemoveTailComma();
                sb.Append("}");
                td.MergeAttribute(":class", sb.ToString());
            }
            td.AddCssClassBoolNo(Bold, "bold");
            td.AddCssClassBoolNo(Italic, "italic");
            td.AddCssClassBool(Gray, "gray");

            MergeContent(td, context);

            if (Align != TextAlign.Left)
            {
                td.AddCssClass("text-" + Align.ToString().ToLowerInvariant());
            }

            if (VAlign != VerticalAlign.Default)
            {
                td.AddCssClass($"valign-{VAlign.ToString().ToLowerInvariant()}");
            }

            if (Content is ITableControl)
            {
                td.AddCssClass("ctrl");
            }

            Bind isBind = GetBinding(nameof(ItemsSource));

            if (isBind != null)
            {
                td.MergeAttribute("v-for", $"(cell, cellIndex) in {isBind.GetPath(context)}");
                td.MergeAttribute(":key", "cellIndex");
            }
            MergeAttributeInt32(td, context, nameof(ColSpan), "colspan", ColSpan);
            MergeAttributeInt32(td, context, nameof(RowSpan), "rowspan", RowSpan);
            td.RenderStart(context);
            RenderContent(context);

            /*
             * Никакого толку, содержимое в атрибуте
             * if (Validate)
             * {
             * var val = new TagBuilder("validator-control");
             * val.MergeAttribute(":item", "row");
             * val.MergeAttribute("prop", "Sum");
             * val.Render(context);
             * }*/
            td.RenderEnd(context);
        }