Ejemplo n.º 1
0
        public TagBuilder Render(RenderContext context, TagRenderMode mode = TagRenderMode.Normal, Boolean addSpace = false)
        {
            switch (mode)
            {
            case TagRenderMode.SelfClosing:
                context.Writer.Write(CreateStartTag(context, true));
                break;

            case TagRenderMode.StartTag:
                context.Writer.Write(CreateStartTag(context, false));
                break;

            case TagRenderMode.Normal:
                context.Writer.Write(CreateStartTag(context, false));
                context.Writer.Write(context.Localize(InnerText));
                context.Writer.Write($"</{TagName}>");
                break;

            case TagRenderMode.EndTag:
                context.Writer.Write($"</{TagName}>");
                break;
            }
            if (addSpace)
            {
                context.Writer.WriteLine();
            }
            _bRender = true;
            return(this);
        }
Ejemplo n.º 2
0
        void RenderHeader(RenderContext context)
        {
            if (!HasHeader)
            {
                return;
            }
            var header = new TagBuilder("div", "panel-header-slot");

            header.MergeAttribute("slot", "header");
            header.RenderStart(context);

            RenderIcon(context, Icon);

            var hBind = GetBinding(nameof(Header));

            if (hBind != null)
            {
                var span = new TagBuilder("span");
                span.MergeAttribute("v-text", hBind.GetPathFormat(context));
                span.Render(context);
            }
            else if (Header is UIElementBase)
            {
                (Header as UIElementBase).RenderElement(context);
            }
            else if (Header != null)
            {
                context.Writer.Write(context.Localize(Header.ToString()));
            }
            header.RenderEnd(context);
        }
Ejemplo n.º 3
0
        internal override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (SkipRender(context))
            {
                return;
            }
            var option = new TagBuilder("option");

            MergeAttributes(option, context, MergeAttrMode.Visibility);
            if (Value != null)
            {
                if (Value is IJavaScriptSource)
                {
                    var jsValue = (Value as IJavaScriptSource).GetJsValue(context);
                    option.MergeAttribute(":value", jsValue);
                }
                else
                {
                    option.MergeAttribute("value", Value.ToString());
                }
            }
            else
            {
                option.MergeAttribute(":value", "null");                 // JS null value
            }
            option.RenderStart(context);
            if (Content != null)
            {
                context.Writer.Write(context.Localize(Content));
            }
            option.RenderEnd(context);
        }
Ejemplo n.º 4
0
        internal override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (SkipRender(context))
            {
                return;
            }
            var span = new TagBuilder("span", null, IsInGrid);

            onRender?.Invoke(span);
            MergeAttributes(span, context);

            var cbind = GetBinding(nameof(Content));

            if (cbind != null)
            {
                span.MergeAttribute("v-html", $"$sanitize({cbind.GetPathFormat(context)})");
            }

            span.RenderStart(context);
            if (Content != null && Content is String)
            {
                context.Writer.Write(context.Localize(Content.ToString()));
            }
            span.RenderEnd(context);
        }
Ejemplo n.º 5
0
        void RenderHeader(RenderContext context)
        {
            var header = new TagBuilder("div", "modal-header");

            header.MergeAttribute("v-drag-window", String.Empty);
            header.RenderStart(context);
            var hdr = GetBinding(nameof(Title));

            if ((hdr != null) || (Title != null))
            {
                var span = new TagBuilder("span");
                if (hdr != null)
                {
                    span.MergeAttribute("v-text", hdr.GetPathFormat(context));
                }
                else if (Title != null)
                {
                    span.SetInnerText(context.Localize(Title));
                }
                span.Render(context);
            }
            var close = new TagBuilder("button", "btnclose");

            close.MergeAttribute("@click.prevent", "$modalClose(false)");
            close.SetInnerText("&#x2715;");
            close.Render(context);

            header.RenderEnd(context);
        }
Ejemplo n.º 6
0
        protected virtual void RenderHelp(RenderContext context)
        {
            if (!HasHelp)
            {
                return;
            }
            //<a class="btn-help"><i class="ico ico-help"></i>Справка</a>
            var ha = new TagBuilder("a", "btn-help");
            // TODO: Help path
            var hbind = GetBinding(nameof(HelpUrl));

            if (hbind != null)
            {
                String hpath = hbind.GetPathFormat(context);
                ha.MergeAttribute("@click.prevent", $"$showHelp({hpath})");
                ha.MergeAttribute(":href", $"$helpHref({hpath})");
            }
            else if (!String.IsNullOrEmpty(HelpUrl))
            {
                ha.MergeAttribute("@click.prevent", $"$showHelp('{HelpUrl}')");
                ha.MergeAttribute(":href", $"$helpHref('{HelpUrl}')");
            }
            ha.RenderStart(context);
            new TagBuilder("i", "ico ico-help")
            .Render(context);
            context.Writer.Write(context.Localize("@[Help]"));
            ha.RenderEnd(context);
            new TagBuilder("div", "aligner").Render(context);
        }
Ejemplo n.º 7
0
        internal override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (SkipRender(context))
            {
                return;
            }
            var label = new TagBuilder("div", "a2-label", IsInGrid);

            onRender?.Invoke(label);

            var contBind = GetBinding(nameof(Content));

            if (contBind != null)
            {
                label.MergeAttribute("v-text", contBind.GetPathFormat(context));
            }

            MergeAttributes(label, context);
            if (Align != TextAlign.Left)
            {
                label.AddCssClass("text-" + Align.ToString().ToLowerInvariant());
            }
            label.AddCssClassBool(Required, "required");

            label.RenderStart(context);

            if (Content != null)
            {
                context.Writer.Write(context.Localize(Content.ToString()));
            }

            label.RenderEnd(context);
        }
Ejemplo n.º 8
0
        protected virtual void RenderHelp(RenderContext context)
        {
            if (!HasHelp)
            {
                return;
            }
            var ha = new TagBuilder("a", "btn-help");

            ha.MergeAttribute("rel", "help");
            ha.MergeAttribute("title", context.Localize("@[Help]"));

            var hbind = GetBinding(nameof(HelpUrl));

            if (hbind != null)
            {
                String hpath = hbind.GetPathFormat(context);
                ha.MergeAttribute("@click.stop.prevent", $"$showHelp({hpath})");
                ha.MergeAttribute(":href", $"$helpHref({hpath})");
            }
            else if (!String.IsNullOrEmpty(HelpUrl))
            {
                ha.MergeAttribute("@click.stop.prevent", $"$showHelp('{HelpUrl}')");
                ha.MergeAttribute(":href", $"$helpHref('{HelpUrl}')");
            }
            ha.RenderStart(context);
            new TagBuilder("i", "ico ico-help")
            .Render(context);
            //context.Writer.Write(context.Localize("@[Help]"));
            ha.RenderEnd(context);
        }
Ejemplo n.º 9
0
        internal override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (SkipRender(context))
            {
                return;
            }
            var span = new TagBuilder("span", "a2-badge", IsInGrid);

            onRender?.Invoke(span);
            MergeAttributes(span, context);

            var cbind = GetBinding(nameof(Content));

            if (cbind != null)
            {
                span.MergeAttribute("v-text", cbind.GetPathFormat(context));
                if (cbind.NegativeRed)
                {
                    span.MergeAttribute(":class", $"$getNegativeRedClass({cbind.GetPath(context)})");
                }
            }
            span.AddCssClassBool(Small, "small");

            span.RenderStart(context);
            if (Content is String)
            {
                context.Writer.Write(context.Localize(Content.ToString()));
            }
            span.RenderEnd(context);
        }
Ejemplo n.º 10
0
        internal override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (SkipRender(context))
            {
                return;
            }
            var po = new TagBuilder("popover", "a2-inline", IsInGrid);

            MergeAttributes(po, context, MergeAttrMode.All);
            po.AddCssClass("po-" + Placement.ToString().ToKebabCase());
            if (Background != PopoverBackgroundStyle.Default)
            {
                po.AddCssClass("po-" + Background.ToString().ToKebabCase());
            }
            if (Icon != Icon.NoIcon)
            {
                po.MergeAttribute("icon", Icon.ToString().ToKebabCase());
            }
            MergeBindingAttributeString(po, context, "content", nameof(Text), Text);

            var urlBind = GetBinding(nameof(Url));

            if (urlBind != null)
            {
                po.MergeAttribute(":url", urlBind.GetPathFormat(context));
            }
            else if (!String.IsNullOrEmpty(Url))
            {
                po.MergeAttribute("url", Url);
            }

            if (Width != null)
            {
                po.MergeAttribute("width", Width.Value);
            }

            if (Top != null)
            {
                po.MergeAttribute("top", Top.Value);
            }

            po.RenderStart(context);
            var cntBind = GetBinding(nameof(Content));

            if (cntBind != null)
            {
                var cont = new TagBuilder("span");
                cont.MergeAttribute("v-text", cntBind.GetPathFormat(context));
                cont.Render(context);
            }
            else if (Content is UIElementBase)
            {
                (Content as UIElementBase).RenderElement(context);
            }
            else if (Content != null)
            {
                context.Writer.Write(context.Localize(Content.ToString()));
            }
            po.RenderEnd(context);
        }
Ejemplo n.º 11
0
        void RenderFooter(RenderContext context)
        {
            if (!HasFooter)
            {
                return;
            }
            var f = new TagBuilder("div", "card-footer");

            f.RenderStart(context);
            var fb = GetBinding(nameof(Footer));

            if (fb != null)
            {
                var s = new TagBuilder("span");
                s.MergeAttribute(":text", fb.GetPathFormat(context));
                s.Render(context);
            }
            else if (Footer is UIElement fUiElem)
            {
                fUiElem.RenderElement(context);
            }
            else if (Footer is String fStr)
            {
                context.Writer.Write(context.Localize(fStr));
            }
            f.RenderEnd(context);
        }
Ejemplo n.º 12
0
        void RenderHeader(RenderContext context)
        {
            if (!HasHeader)
            {
                return;
            }
            var h = new TagBuilder("div", "card-header");

            h.RenderStart(context);
            var hb = GetBinding(nameof(Header));

            if (hb != null)
            {
                var s = new TagBuilder("span");
                s.MergeAttribute(":text", hb.GetPathFormat(context));
                s.Render(context);
            }
            else if (Header is UIElement hUiElem)
            {
                hUiElem.RenderElement(context);
            }
            else if (Header is String hStr)
            {
                context.Writer.Write(context.Localize(hStr));
            }
            h.RenderEnd(context);
        }
Ejemplo n.º 13
0
        // for text bindings only
        public String GetPathFormat(RenderContext context)
        {
            if (Path == null)
            {
                return(context.GetEmptyPath());                // may be scoped
            }
            String realPath = context.GetNormalizedPath(Path, _wrapped);
            var    maskBind = GetBinding(nameof(Mask));

            if (String.IsNullOrEmpty(Format) &&
                DataType == DataType.String &&
                String.IsNullOrEmpty(Mask) &&
                maskBind == null &&
                !HideZeros)
            {
                return(realPath);
            }
            var opts = new StringBuilder("{");

            if (DataType != DataType.String)
            {
                opts.Append($"dataType: '{DataType.ToString()}',");
            }
            if (!String.IsNullOrEmpty(Format))
            {
                opts.Append($"format: '{context.Localize(Format.Replace("'", "\\'"))}',");
            }
            if (maskBind != null)
            {
                opts.Append($"mask: {maskBind.GetPathFormat(context)},");
            }
            else if (!String.IsNullOrEmpty(Mask))
            {
                opts.Append($"mask: '{context.Localize(Mask.Replace("'", "\\'"))}',");
            }
            if (HideZeros)
            {
                opts.Append("hideZeros: true,");
            }
            opts.RemoveTailComma();
            opts.Append("}");
            return($"$format({realPath}, {opts})");
        }
Ejemplo n.º 14
0
        internal void MergeBindingAttributeString(TagBuilder tag, RenderContext context, String attrName, String propName, String propValue)
        {
            var attrBind = GetBinding(propName);

            if (attrBind != null)
            {
                tag.MergeAttribute($":{attrName}", attrBind.GetPathFormat(context));
            }
            else
            {
                tag.MergeAttribute(attrName, context.Localize(propValue));
            }
        }
Ejemplo n.º 15
0
        void MergeBindingAttribute(RenderContext context, TagBuilder tag, String attr, String propName, Object propValue)
        {
            var bindProp = GetBinding(propName);

            if (bindProp != null)
            {
                tag.MergeAttribute(":" + attr, bindProp.GetPath(context));
            }
            else if (propValue != null)
            {
                tag.MergeAttribute(attr, context.Localize(propValue.ToString()));
            }
        }
Ejemplo n.º 16
0
        String CommandFileName(RenderContext context, Boolean decorate = false)
        {
            var fnBind = GetBinding(nameof(FileName));

            if (fnBind != null)
            {
                if (decorate)
                {
                    return($"'{{{fnBind.Path}}}'");
                }
                return(fnBind.GetPath(context));
            }
            return($"'{context.Localize(FileName)}'");
        }
Ejemplo n.º 17
0
        internal String GetBindingString(RenderContext context, String propertyName, String propValue)
        {
            String resVal     = null;
            var    bindString = GetBinding(propertyName);

            if (bindString != null)
            {
                resVal = bindString.GetPathFormat(context);
            }
            else if (propValue != null)
            {
                resVal = $"'{context.Localize(propValue)}'";
            }
            return(resVal);
        }
Ejemplo n.º 18
0
        internal override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (SkipRender(context))
            {
                return;
            }
            var tab = new TagBuilder("a2-tab-item");

            onRender?.Invoke(tab);
            // tab.MergeAttribute("tab-style", "yellow");
            tab.AddCssClassBool(FullHeight, "full-height");
            MergeAttributes(tab, context, MergeAttrMode.SpecialTab);
            var headerBind = GetBinding(nameof(Header));

            if (headerBind != null)
            {
                tab.MergeAttribute(":header", headerBind.GetPathFormat(context));
            }
            else if (Header is String)
            {
                tab.MergeAttribute("header", context.Localize(Header?.ToString()));
            }
            var badgeBind = GetBinding(nameof(Badge));

            if (badgeBind != null)
            {
                tab.MergeAttribute(":badge", badgeBind.GetPathFormat(context));
            }
            else if (Badge != null)
            {
                tab.MergeAttribute("badge", Badge);
            }
            if (Height != null)
            {
                tab.MergeStyle("height", Height.Value);
            }

            // show/hide support
            MergeBindingAttributeBool(tab, context, ":show", nameof(Show), Show);
            // emulate v-hide
            MergeBindingAttributeBool(tab, context, ":show", nameof(Hide), Hide, bInvert: true);

            tab.RenderStart(context);

            RenderChildren(context);

            tab.RenderEnd(context);
        }
Ejemplo n.º 19
0
 internal void RenderContent(RenderContext context, Object content)
 {
     // if it's a binding, it will be added via MergeAttribute
     if (content == null)
     {
         return;
     }
     if (content is UIElementBase)
     {
         (content as UIElementBase).RenderElement(context);
     }
     else if (content != null)
     {
         context.Writer.Write(context.Localize(content.ToString()));
     }
 }
Ejemplo n.º 20
0
        internal void RenderBadge(RenderContext context, String badge)
        {
            var badgeBind = GetBinding("Badge");

            if (badgeBind != null)
            {
                new TagBuilder("span", "badge")
                .MergeAttribute("v-text", badgeBind.GetPathFormat(context))
                .Render(context);
            }
            else if (!String.IsNullOrEmpty(badge))
            {
                new TagBuilder("span", "badge")
                .SetInnerText(context.Localize(badge))
                .Render(context);
            }
        }
Ejemplo n.º 21
0
        internal override void RenderElement(RenderContext context, Action <TagBuilder> onRender = null)
        {
            if (SkipRender(context))
            {
                return;
            }
            if (Space == SpaceMode.Before)
            {
                context.Writer.Write("&#160;");
            }
            var span = new TagBuilder("span", null, IsInGrid);

            onRender?.Invoke(span);
            MergeAttributes(span, context);

            var cbind = GetBinding(nameof(Content));

            if (cbind != null)
            {
                span.MergeAttribute("v-text", cbind.GetPathFormat(context));
                if (cbind.NegativeRed)
                {
                    if (GetBinding(nameof(Color)) != null)
                    {
                        throw new XamlException("NegativeRed property is not compatible with Color binding");
                    }
                    span.MergeAttribute(":class", $"$getNegativeRedClass({cbind.GetPath(context)})");
                }
            }
            span.AddCssClassBool(Small, "small");
            span.AddCssClassBool(Big, "text-big");

            span.RenderStart(context);
            if (Content is String)
            {
                context.Writer.Write(context.Localize(Content.ToString()));
            }
            span.RenderEnd(context);
            if (Space == SpaceMode.After)
            {
                context.Writer.Write("&#160;");
            }
        }
Ejemplo n.º 22
0
        void RenderTitle(RenderContext context)
        {
            var titleBind = GetBinding(nameof(Title));

            if (titleBind != null || Title != null)
            {
                var title = new TagBuilder("legend");
                if (titleBind != null)
                {
                    title.MergeAttribute("v-text", titleBind.GetPathFormat(context));
                }
                title.RenderStart(context);
                if (Title != null)
                {
                    context.Writer.Write(context.Localize(Title));
                }
                title.RenderEnd(context);
            }
        }
Ejemplo n.º 23
0
 internal void Render(RenderContext context)
 {
     foreach (var x in this)
     {
         if (x == null)
         {
             continue;
         }
         if (x is String)
         {
             context.Writer.Write(context.Localize(x.ToString()));
         }
         else if (x is Inline)
         {
             (x as Inline).RenderElement(context);
         }
         else
         {
             throw new XamlException($"Invalid inline element '{x.GetType().ToString()}'");
         }
     }
 }
Ejemplo n.º 24
0
        void RenderDesription(RenderContext context)
        {
            new Separator().RenderElement(context);
            var dBind = GetBinding(nameof(Description));
            var wrap  = new TagBuilder(null, "a2-tab-description");

            wrap.RenderStart(context);
            if (dBind != null)
            {
                var span = new TagBuilder("span");
                span.MergeAttribute("v-text", dBind.GetPathFormat(context));
                span.Render(context);
            }
            else if (Description is UIElementBase uiDescr)
            {
                uiDescr.RenderElement(context);
            }
            else if (Description != null)
            {
                context.Writer.Write(context.Localize(Description.ToString()));
            }
            wrap.RenderEnd(context);
        }
Ejemplo n.º 25
0
 void RenderBody(RenderContext context)
 {
     if (HasHeader)
     {
         var hTag  = new TagBuilder("div", "list-item-header");
         var bHead = GetBinding(nameof(Header));
         if (bHead != null)
         {
             hTag.MergeAttribute("v-text", bHead.GetPathFormat(context));
         }
         hTag.RenderStart(context);
         if (Header != null)
         {
             if (Header is UIElementBase)
             {
                 (Header as UIElementBase).RenderElement(context);
             }
             else
             {
                 context.Writer.Write(context.Localize(Header.ToString()));
             }
         }
         hTag.RenderEnd(context);
     }
     if (HasBody)
     {
         var hBody = new TagBuilder("div", "list-item-body");
         var bBody = GetBinding(nameof(Content));
         if (bBody != null)
         {
             hBody.MergeAttribute("v-text", bBody.GetPathFormat(context));
         }
         hBody.RenderStart(context);
         if (Content is UIElementBase)
         {
             (Content as UIElementBase).RenderElement(context);
         }
         else if (Content != null)
         {
             context.Writer.Write(context.Localize(Content.ToString()));
         }
         hBody.RenderEnd(context);
     }
     if (HasFooter)
     {
         var fTag  = new TagBuilder("div", "list-item-footer");
         var bFoot = GetBinding(nameof(Footer));
         if (bFoot != null)
         {
             fTag.MergeAttribute("v-text", bFoot.GetPathFormat(context));
         }
         fTag.RenderStart(context);
         if (Footer != null)
         {
             if (Footer is UIElementBase)
             {
                 (Footer as UIElementBase).RenderElement(context);
             }
             else
             {
                 context.Writer.Write(context.Localize(Footer.ToString()));
             }
         }
         fTag.RenderEnd(context);
     }
     if (CommandBar != null)
     {
         CommandBar.RenderElement(context, tag =>
         {
             tag.AddCssClass("list-item-commands");
         });
     }
 }
Ejemplo n.º 26
0
        void RenderHyperlink(RenderContext context, Boolean inGrid, Action <TagBuilder> onRender = null, Boolean inside = false)
        {
            Boolean bHasDropDown = DropDown != null;

            var tag = new TagBuilder("a", "a2-hyperlink", inGrid);

            onRender?.Invoke(tag);
            var attrMode = MergeAttrMode.All;

            if (inside)
            {
                attrMode &= ~MergeAttrMode.Visibility;
            }
            MergeAttributes(tag, context, attrMode);
            MergeCommandAttribute(tag, context);
            tag.AddCssClassBool(Block, "block");
            if (!Block)
            {
                tag.AddCssClass("a2-inline");
            }

            if (Size != ControlSize.Default)
            {
                switch (Size)
                {
                case ControlSize.Small:
                    tag.AddCssClass("small");
                    break;

                default:
                    throw new XamlException("Only ControlSize.Small is supported for the Hyperlink");
                }
            }

            if (bHasDropDown)
            {
                tag.MergeAttribute("toggle", String.Empty);
            }

            tag.RenderStart(context);

            RenderIcon(context, Icon);
            var cbind = GetBinding(nameof(Content));

            if (cbind != null)
            {
                new TagBuilder("span")
                .MergeAttribute("v-text", cbind.GetPathFormat(context))
                .Render(context);
            }
            else if (Content is UIElementBase)
            {
                (Content as UIElementBase).RenderElement(context);
            }
            else if (Content != null)
            {
                context.Writer.Write(context.Localize(Content.ToString()));
            }


            tag.RenderEnd(context);
        }