Example #1
0
        /// <summary>
        /// In HTML konvertieren
        /// </summary>
        /// <returns>Das Control als HTML</returns>
        public override IHtmlNode ToHtml()
        {
            var classes = new List <string>();

            classes.Add(Class);

            if (!Fluid)
            {
                classes.Add("container");
            }
            else
            {
                classes.Add("container-fluid");
            }

            var rows = Content.OrderBy(x => x.Key).Select(x => x.Value);

            var html = new HtmlElementDiv(from x in rows select new HtmlElementDiv(x.Select(y => y.ToHtml()))
            {
                Class = "row mt-5"
            })
            {
                ID    = ID,
                Class = string.Join(" ", classes.Where(x => !string.IsNullOrWhiteSpace(x))),
                Style = Style,
                Role  = Role
            };

            return(html);
        }
        /// <summary>
        /// In HTML konvertieren
        /// </summary>
        /// <returns>Das Control als HTML</returns>
        public override IHtmlNode ToHtml()
        {
            if (!string.IsNullOrWhiteSpace(Value))
            {
                Checked = Value == Option;
            }

            var classes = new List <string>();

            classes.Add(Class);

            var c = new List <string>();

            c.Add("radio");

            if (Inline)
            {
                c.Add("form-check-inline");
            }

            if (Disabled)
            {
                c.Add("disabled");
            }

            var html = new HtmlElementDiv
                       (
                new HtmlElementLabel
                (
                    new HtmlElementInput()
            {
                ID       = ID,
                Name     = Name,
                Pattern  = Pattern,
                Type     = "radio",
                Disabled = Disabled,
                Role     = Role,
                Checked  = Checked,
                Class    = string.Join(" ", classes.Where(x => !string.IsNullOrWhiteSpace(x))),
                Style    = Style,
                Value    = Option
            },
                    new HtmlText(string.IsNullOrWhiteSpace(Discription) ? string.Empty : "&nbsp;" + Discription)
                )
            {
            }
                       )
            {
                Class = string.Join(" ", c.Where(x => !string.IsNullOrWhiteSpace(x)))
            };

            return(html);
        }
Example #3
0
        /// <summary>
        /// In HTML konvertieren
        /// </summary>
        /// <returns>Das Control als HTML</returns>
        public override IHtmlNode ToHtml()
        {
            var classes = new List <string>();

            classes.Add(Class);
            classes.Add("profile");

            var img = null as HtmlElement;

            if (!string.IsNullOrWhiteSpace(Image))
            {
                img = new HtmlElementImg()
                {
                    Src = Image, Class = ""
                };
            }
            else if (!string.IsNullOrWhiteSpace(User))
            {
                var split = User.Split(' ');
                var i     = split[0].FirstOrDefault().ToString();
                i += split.Count() > 1 ? split[1].FirstOrDefault().ToString() : "";

                img = new HtmlElementB(new HtmlText(i))
                {
                    Class = "bg-info text-light"
                };
            }

            var html = new HtmlElementDiv(img, new HtmlText(User))
            {
                ID    = ID,
                Class = string.Join(" ", classes.Where(x => !string.IsNullOrWhiteSpace(x))),
                Style = Style,
                Role  = Role
            };

            if (Modal != null)
            {
                html.AddUserAttribute("data-toggle", "modal");
                html.AddUserAttribute("data-target", "#" + Modal.ID);

                return(new HtmlList(html, Modal.ToHtml()));
            }

            return(html);
        }
Example #4
0
        /// <summary>
        /// In HTML konvertieren
        /// </summary>
        /// <returns>Das Control als HTML</returns>
        public override IHtmlNode ToHtml()
        {
            var classes = new List <string>();

            classes.Add(Class);
            classes.Add("card");

            switch (Layout)
            {
            case TypesLayoutCard.Primary:
                classes.Add("bg-primary");
                break;

            case TypesLayoutCard.Secondary:
                classes.Add("bg-secondary");
                break;

            case TypesLayoutCard.Success:
                classes.Add("bg-success");
                break;

            case TypesLayoutCard.Info:
                classes.Add("bg-info");
                break;

            case TypesLayoutCard.Warning:
                classes.Add("bg-warning");
                break;

            case TypesLayoutCard.Danger:
                classes.Add("bg-danger");
                break;

            case TypesLayoutCard.Light:
                classes.Add("bg-light");
                break;

            case TypesLayoutCard.Dark:
                classes.Add("bg-dark");
                break;
            }

            switch (HorizontalAlignment)
            {
            case TypesHorizontalAlignment.Left:
                classes.Add("float-left");
                break;

            case TypesHorizontalAlignment.Right:
                classes.Add("float-right");
                break;
            }

            if (!ShowBorder)
            {
                classes.Add("border-0");
            }

            var html = new HtmlElementDiv()
            {
                ID    = ID,
                Class = string.Join(" ", classes.Where(x => !string.IsNullOrWhiteSpace(x))),
                Style = Style,
                Role  = Role
            };

            if (!string.IsNullOrWhiteSpace(Header))
            {
                html.Elements.Add(new HtmlElementDiv(new HtmlText(Header))
                {
                    Class = "card-header"
                });
            }

            if (!string.IsNullOrWhiteSpace(HeaderImage))
            {
                html.Elements.Add(new HtmlElementImg()
                {
                    Src = HeaderImage, Class = "card-img-top"
                });
            }

            if (!string.IsNullOrWhiteSpace(Headline))
            {
                Content.Insert(0, new ControlText(Page)
                {
                    Text = Headline, Class = "card-title", Format = TypesTextFormat.H4
                });
            }

            html.Elements.Add(new HtmlElementDiv(Content.Select(x => x.ToHtml()))
            {
                Class = "card-body"
            });

            if (!string.IsNullOrWhiteSpace(FooterImage))
            {
                html.Elements.Add(new HtmlElementImg()
                {
                    Src = FooterImage, Class = "card-img-top"
                });
            }

            if (!string.IsNullOrWhiteSpace(Footer))
            {
                html.Elements.Add(new HtmlElementDiv(new HtmlText(Footer))
                {
                    Class = "card-footer"
                });
            }

            return(html);
        }
        /// <summary>
        /// In HTML konvertieren
        /// </summary>
        /// <returns>Das Control als HTML</returns>
        public override IHtmlNode ToHtml()
        {
            var classes = new List <string>();

            classes.Add(Class);
            classes.Add("modal");

            if (Fade)
            {
                classes.Add("fade");
            }

            var headerText = new HtmlElementH4(Header)
            {
                Class = "modal-title"
            };

            var headerButtonLabel = new HtmlElementSpan(new HtmlText("&times;"))
            {
            };

            headerButtonLabel.AddUserAttribute("aria-hidden", "true");

            var headerButton = new HtmlElementButton(headerButtonLabel)
            {
                Class = "close"
            };

            headerButton.AddUserAttribute("aria-label", "close");
            headerButton.AddUserAttribute("data-dismiss", "modal");

            var header = new HtmlElementDiv(headerText, headerButton)
            {
                Class = "modal-header"
            };

            var body = new HtmlElementDiv(from x in Content select x.ToHtml())
            {
                Class = "modal-body"
            };

            var footerButtonOK = new HtmlElementButton(new HtmlText("OK"))
            {
                Type  = "submit",
                Class = "btn btn-success"
            };
            //footerButtonOK.AddUserAttribute("data-dismiss", "modal");

            var footerButtonCancel = new HtmlElementButton(new HtmlText("Abbrechen"))
            {
                Type  = "button",
                Class = "btn btn-danger"
            };

            footerButtonCancel.AddUserAttribute("data-dismiss", "modal");

            var footer = new HtmlElementDiv(footerButtonOK, footerButtonCancel)
            {
                Class = "modal-footer"
            };

            var form = new HtmlElementForm(header, body, footer)
            {
                Action = "#" + ID,
                Method = "post",
                Name   = "form_" + ID
            };

            var content = new HtmlElementDiv(form)
            {
                Class = "modal-content"
            };

            var dialog = new HtmlElementDiv(content)
            {
                Class = "modal-dialog",
                Role  = "document"
            };

            var html = new HtmlElementDiv(dialog)
            {
                ID    = ID,
                Class = string.Join(" ", classes.Where(x => !string.IsNullOrWhiteSpace(x))),
                Style = Style,
                Role  = "dialog"
            };

            if (!string.IsNullOrWhiteSpace(OnShownCode))
            {
                var shown = "$('#" + ID + "').on('shown.bs.modal', function(e) { " + OnShownCode + " });";
                Page.AddScript(ID + "_shown", shown);
            }

            if (!string.IsNullOrWhiteSpace(OnHiddenCode))
            {
                var hidden = "$('#" + ID + "').on('hidden.bs.modal', function() { " + OnHiddenCode + " });";
                Page.AddScript(ID + "_hidden", hidden);
            }

            return(html);
        }
        /// <summary>
        /// In HTML konvertieren
        /// </summary>
        /// <returns>Das Control als HTML</returns>
        public override IHtmlNode ToHtml()
        {
            var classes = new List <string>();

            classes.Add(Class);
            classes.Add("dropdown");

            var buttonClasses = new List <string>();

            buttonClasses.Add(ClassButton);
            buttonClasses.Add("btn");

            if (Outline)
            {
                switch (Layout)
                {
                case TypesLayoutButton.Primary:
                    buttonClasses.Add("btn-outline-primary");
                    break;

                case TypesLayoutButton.Success:
                    buttonClasses.Add("btn-outline-success");
                    break;

                case TypesLayoutButton.Info:
                    buttonClasses.Add("btn-outline-info");
                    break;

                case TypesLayoutButton.Warning:
                    buttonClasses.Add("btn-outline-warning");
                    break;

                case TypesLayoutButton.Danger:
                    buttonClasses.Add("btn-outline-danger");
                    break;

                case TypesLayoutButton.Light:
                    buttonClasses.Add("btn-outline-light");
                    break;

                case TypesLayoutButton.Dark:
                    buttonClasses.Add("btn-outline-dark");
                    break;
                }
            }
            else
            {
                switch (Layout)
                {
                case TypesLayoutButton.Primary:
                    buttonClasses.Add("btn-primary");
                    break;

                case TypesLayoutButton.Success:
                    buttonClasses.Add("btn-success");
                    break;

                case TypesLayoutButton.Info:
                    buttonClasses.Add("btn-info");
                    break;

                case TypesLayoutButton.Warning:
                    buttonClasses.Add("btn-warning");
                    break;

                case TypesLayoutButton.Danger:
                    buttonClasses.Add("btn-danger");
                    break;

                case TypesLayoutButton.Light:
                    buttonClasses.Add("btn-light");
                    break;

                case TypesLayoutButton.Dark:
                    buttonClasses.Add("btn-dark");
                    break;
                }
            }

            switch (Size)
            {
            case TypesSize.Large:
                buttonClasses.Add("btn-lg");
                break;

            case TypesSize.Small:
                buttonClasses.Add("btn-sm");
                break;
            }

            switch (HorizontalAlignment)
            {
            case TypesHorizontalAlignment.Left:
                classes.Add("float-left");
                break;

            case TypesHorizontalAlignment.Right:
                classes.Add("float-right");
                break;
            }

            if (Block)
            {
                buttonClasses.Add("btn-block");
            }

            var html = new HtmlElementDiv()
            {
                ID    = ID,
                Class = string.Join(" ", classes.Where(x => !string.IsNullOrWhiteSpace(x))),
                Style = Style
            };

            var button = new HtmlElementButton()
            {
                ID         = string.IsNullOrWhiteSpace(ID) ? "" : ID + "_btn",
                Class      = string.Join(" ", buttonClasses.Where(x => !string.IsNullOrWhiteSpace(x))),
                Style      = StyleButton,
                DataToggle = "dropdown"
            };

            if (!string.IsNullOrWhiteSpace(Icon) && !string.IsNullOrWhiteSpace(Text))
            {
                button.Elements.Add(new HtmlElementSpan()
                {
                    Class = Icon
                });

                button.Elements.Add(new HtmlNbsp());
                button.Elements.Add(new HtmlNbsp());
                button.Elements.Add(new HtmlNbsp());
            }
            else if (!string.IsNullOrWhiteSpace(Icon) && string.IsNullOrWhiteSpace(Text))
            {
                button.AddClass(Icon);
            }

            if (!string.IsNullOrWhiteSpace(Text))
            {
                button.Elements.Add(new HtmlText(Text));
            }

            html.Elements.Add(button);
            html.Elements.Add
            (
                new HtmlElementUl
                (
                    Items.Select
                    (
                        x =>
                        x == null ?
                        new HtmlElementLi()
            {
                Class = "dropdown-divider", Inline = true
            } :
                        x is ControlDropdownMenuHeader ?
                        x.ToHtml() :
                        new HtmlElementLi(x.ToHtml().AddClass("dropdown-item"))
            {
            }
                    )
                )
            {
                Class = HorizontalAlignment == TypesHorizontalAlignment.Right ? "dropdown-menu dropdown-menu-right" : "dropdown-menu"
            }
            );

            return(html);
        }
Example #7
0
        /// <summary>
        /// In HTML konvertieren
        /// </summary>
        /// <returns>Das Control als HTML</returns>
        public override IHtmlNode ToHtml()
        {
            var classes = new List <string>();

            classes.Add(Class);
            classes.Add("post");

            var profile = new ControlAvatar(Page)
            {
                User  = User,
                Image = Image
            };

            var timespan = string.Empty;
            var days     = (DateTime.Now - Timestamp).Days;

            if (days == 1)
            {
                timespan = "vor ein Tag";
            }
            else if (days < 1)
            {
                var hours = (DateTime.Now - Timestamp).Hours;
                if (hours == 1)
                {
                    timespan = "vor einer Stunde";
                }
                else if (hours < 1)
                {
                    var minutes = (DateTime.Now - Timestamp).Minutes;

                    if (minutes == 1)
                    {
                        timespan = "vor einer Minute";
                    }
                    else if (minutes < 1)
                    {
                        timespan = "gerade ebend";
                    }
                    else
                    {
                        timespan = "vor " + minutes + " Minuten";
                    }
                }
                else
                {
                    timespan = "vor " + hours + " Stunden";
                }
            }
            else
            {
                timespan = "vor " + days + " Tagen";
            }

            var date = new ControlText(Page)
            {
                Text    = timespan,
                Tooltip = "Am " + Timestamp.ToShortDateString() + " um " + Timestamp.ToShortTimeString() + " Uhr",
                Format  = TypesTextFormat.Span,
                Color   = TypesTextColor.Muted
            };

            var headerText = new HtmlElementP
                             (
                new ControlText(Page)
            {
                Text = Action, Color = TypesTextColor.Info, Format = TypesTextFormat.Span
            }.ToHtml(),
                date.ToHtml()
                             );

            var setting = new ControlDropdownMenu(Page)
            {
                Icon   = "fas fa-cog",
                Layout = TypesLayoutButton.Light,
                HorizontalAlignment = TypesHorizontalAlignment.Right,
                Size = TypesSize.Small
            };

            setting.Add(new ControlLink(Page)
            {
                Text = "Löschen", Icon = "fas fa-trash-alt", Color = TypesTextColor.Danger, Url = Page.GetUrl()
            });

            var header = new HtmlElementDiv(setting.ToHtml(), profile.ToHtml(), headerText)
            {
                Class = "header"
            };

            var body = new HtmlElementDiv(new HtmlText(Post))
            {
                Class = string.Join(" ", classes.Where(x => !string.IsNullOrWhiteSpace(x)))
            };

            var likeText = "Gefällt mir" + (Likes > 0 ? " (" + Likes + ")" : string.Empty);
            var like     = new ControlButtonLink(Page)
            {
                Icon = "fas fa-thumbs-up", Text = likeText, Url = Page.GetUrl(), Size = TypesSize.Small, Layout = TypesLayoutButton.Light, Outline = true, Color = TypesTextColor.Primary
            };
            //var comment = new ControlButtonLink(Page) { Icon = "fas fa-comment", Text = "Antworten", Url = Page.GetUrl(), Size = TypesSize.Small, Layout = TypesLayoutButton.Light, Color = TypesTextColor.Primary };

            var option = new HtmlElementDiv(like.ToHtml())
            {
                Class = "options"
            };

            var html = new HtmlList(header, body, option);

            //if (Comments.Count > 0)
            //{
            //    html.Elements.Add(new HtmlElementHr());
            //}
            html.Elements.AddRange(from x in Comments select x.ToHtml());

            var form = new ControlPanelFormular(Page)
            {
                Name = !string.IsNullOrWhiteSpace(Name)? Name : "form",
                EnableCancelButton = false
            };

            form.SubmitButton.Icon                = "fas fa-paper-plane";
            form.SubmitButton.Text                = "Antworten";
            form.SubmitButton.Outline             = true;
            form.SubmitButton.Size                = TypesSize.Small;
            form.SubmitButton.HorizontalAlignment = TypesHorizontalAlignment.Default;

            form.Add(new ControlFormularItemTextBox(form)
            {
                Format = TypesEditTextFormat.Multiline, Placeholder = "Kommentieren..."
            });

            html.Elements.Add(form.ToHtml());

            return(html);
        }
Example #8
0
        /// <summary>
        /// In HTML konvertieren
        /// </summary>
        /// <returns>Das Control als HTML</returns>
        public override IHtmlNode ToHtml()
        {
            var classes = new List <string>();

            classes.Add(Class);

            switch (Color)
            {
            case TypesTextColor.Muted:
                classes.Add("text-muted");
                break;

            case TypesTextColor.Primary:
                classes.Add("text-primary");
                break;

            case TypesTextColor.Success:
                classes.Add("text-success");
                break;

            case TypesTextColor.Info:
                classes.Add("text-info");
                break;

            case TypesTextColor.Warning:
                classes.Add("text-warning");
                break;

            case TypesTextColor.Danger:
                classes.Add("text-danger");
                break;

            case TypesTextColor.Light:
                classes.Add("text-light");
                break;

            case TypesTextColor.Dark:
                classes.Add("text-dark");
                break;

            case TypesTextColor.White:
                classes.Add("text-white");
                break;
            }

            switch (BackgroundColor)
            {
            case TypesBackgroundColor.Primary:
                classes.Add("bg-primary");
                break;

            case TypesBackgroundColor.Secondary:
                classes.Add("bg-secondary");
                break;

            case TypesBackgroundColor.Success:
                classes.Add("bg-success");
                break;

            case TypesBackgroundColor.Info:
                classes.Add("bg-info");
                break;

            case TypesBackgroundColor.Warning:
                classes.Add("bg-warning");
                break;

            case TypesBackgroundColor.Danger:
                classes.Add("bg-danger");
                break;

            case TypesBackgroundColor.Light:
                classes.Add("bg-light");
                break;

            case TypesBackgroundColor.Dark:
                classes.Add("bg-dark");
                break;

            case TypesBackgroundColor.White:
                classes.Add("bg-white");
                break;

            case TypesBackgroundColor.Transparent:
                classes.Add("bg-transparent");
                break;
            }

            switch (HorizontalAlignment)
            {
            case TypesHorizontalAlignment.Left:
                classes.Add("float-left");
                break;

            case TypesHorizontalAlignment.Right:
                classes.Add("float-right");
                break;
            }

            var html = null as HtmlElement;

            switch (Format)
            {
            case TypesTextFormat.Paragraph:
                html = new HtmlElementP(Text)
                {
                    ID    = ID,
                    Class = string.Join(" ", classes.Where(x => !string.IsNullOrWhiteSpace(x))),
                    Style = Style,
                    Role  = Role
                };
                break;

            case TypesTextFormat.Italic:
                html = new HtmlElementI(Text)
                {
                    ID    = ID,
                    Class = string.Join(" ", classes.Where(x => !string.IsNullOrWhiteSpace(x))),
                    Style = Style,
                    Role  = Role
                };
                break;

            case TypesTextFormat.Bold:
                html = new HtmlElementB(Text)
                {
                    ID    = ID,
                    Class = string.Join(" ", classes.Where(x => !string.IsNullOrWhiteSpace(x))),
                    Style = Style,
                    Role  = Role
                };
                break;

            case TypesTextFormat.H1:
                html = new HtmlElementH1(Text)
                {
                    ID    = ID,
                    Class = string.Join(" ", classes.Where(x => !string.IsNullOrWhiteSpace(x))),
                    Style = Style,
                    Role  = Role
                };
                break;

            case TypesTextFormat.H4:
                html = new HtmlElementH4(Text)
                {
                    ID    = ID,
                    Class = string.Join(" ", classes.Where(x => !string.IsNullOrWhiteSpace(x))),
                    Style = Style,
                    Role  = Role
                };
                break;

            case TypesTextFormat.Span:
                html = new HtmlElementSpan(new HtmlText(Text))
                {
                    ID    = ID,
                    Class = string.Join(" ", classes.Where(x => !string.IsNullOrWhiteSpace(x))),
                    Style = Style,
                    Role  = Role
                };
                break;

            default:
                html = new HtmlElementDiv(new HtmlText(Text))
                {
                    ID    = ID,
                    Class = string.Join(" ", classes.Where(x => !string.IsNullOrWhiteSpace(x))),
                    Style = Style,
                    Role  = Role
                };
                break;
            }

            if (!string.IsNullOrWhiteSpace(Tooltip))
            {
                html.AddUserAttribute("data-toggle", "tooltip");
                html.AddUserAttribute("title", Tooltip);
            }

            return(html);
        }
        /// <summary>
        /// In HTML konvertieren
        /// </summary>
        /// <returns>Das Control als HTML</returns>
        public override IHtmlNode ToHtml()
        {
            var classes = new List <string>();

            classes.Add(Class);

            var barClass = new List <string>();

            switch (Format)
            {
            case TypesProgressBarFormat.Colored:
                barClass.Add("progress-bar");
                break;

            case TypesProgressBarFormat.Striped:
                barClass.Add("progress-bar");
                barClass.Add("progress-bar-striped");
                break;

            case TypesProgressBarFormat.Animated:
                barClass.Add("progress-bar");
                barClass.Add("progress-bar-striped");
                barClass.Add("progress-bar-animated");
                break;

            default:
                return(new HtmlElementProgress(Value + "%")
                {
                    ID = ID,
                    Class = Class,
                    Style = Style,
                    Role = Role,
                    Min = Min.ToString(),
                    Max = Max.ToString(),
                    Value = Value.ToString()
                });
            }

            classes.Add("progress");

            var styles = new List <string>();

            styles.Add(Style);

            var barStyles = new List <string>();

            barStyles.Add("width: " + Value + "%;");

            switch (Layout)
            {
            case TypesLayoutProgressBar.Primary:
                barClass.Add("bg-primary");
                break;

            case TypesLayoutProgressBar.Success:
                barClass.Add("bg-success");
                break;

            case TypesLayoutProgressBar.Info:
                barClass.Add("bg-info");
                break;

            case TypesLayoutProgressBar.Warning:
                barClass.Add("bg-warning");
                break;

            case TypesLayoutProgressBar.Danger:
                barClass.Add("bg-danger");
                break;

            case TypesLayoutProgressBar.Light:
                barClass.Add("bg-light");
                break;

            case TypesLayoutProgressBar.Dark:
                barClass.Add("bg-dark");
                break;

            case TypesLayoutProgressBar.Color:
                barStyles.Add("background-color: " + BackgroundColor + ";");
                break;
            }

            switch (Color)
            {
            case TypesTextColor.Muted:
                barClass.Add("text-muted");
                break;

            case TypesTextColor.Primary:
                barClass.Add("text-primary");
                break;

            case TypesTextColor.Success:
                barClass.Add("text-success");
                break;

            case TypesTextColor.Info:
                barClass.Add("text-info");
                break;

            case TypesTextColor.Warning:
                barClass.Add("text-warning");
                break;

            case TypesTextColor.Danger:
                barClass.Add("text-danger");
                break;

            case TypesTextColor.Light:
                barClass.Add("text-light");
                break;

            case TypesTextColor.Dark:
                barClass.Add("text-dark");
                break;

            case TypesTextColor.White:
                barClass.Add("text-white");
                break;
            }

            switch (Size)
            {
            case TypesSize.Large:
                styles.Add("height: 30px;");
                break;

            case TypesSize.Small:
                styles.Add("height: 10px;");
                break;
            }

            var bar = new HtmlElementDiv(new HtmlText(Text))
            {
                ID    = ID,
                Class = string.Join(" ", barClass.Where(x => !string.IsNullOrWhiteSpace(x))),
                Style = string.Join(" ", barStyles.Where(x => !string.IsNullOrWhiteSpace(x))),
                Role  = Role
            };

            return(new HtmlElementDiv(bar)
            {
                ID = ID,
                Class = string.Join(" ", classes.Where(x => !string.IsNullOrWhiteSpace(x))),
                Style = string.Join(" ", styles.Where(x => !string.IsNullOrWhiteSpace(x))),
                Role = Role
            });
        }
Example #10
0
        /// <summary>
        /// In HTML konvertieren
        /// </summary>
        /// <returns>Das Control als HTML</returns>
        public override IHtmlNode ToHtml()
        {
            var classes = new List <string>();

            classes.Add(Class);

            var barClass = new List <string>();

            switch (Format)
            {
            case TypesProgressBarFormat.Colored:
                barClass.Add("progress-bar");
                break;

            case TypesProgressBarFormat.Striped:
                barClass.Add("progress-bar");
                barClass.Add("progress-bar-striped");
                break;

            case TypesProgressBarFormat.Animated:
                barClass.Add("progress-bar");
                barClass.Add("progress-bar-striped");
                barClass.Add("progress-bar-animated");
                break;

            default:
                return(new HtmlElementProgress(Items.Select(x => x.Value).Sum() + "%")
                {
                    ID = ID,
                    Class = Class,
                    Style = Style,
                    Role = Role,
                    Min = "0",
                    Max = "100",
                    Value = Items.Select(x => x.Value).Sum().ToString()
                });
            }

            classes.Add("progress");

            var html = new HtmlElementDiv()
            {
                ID    = ID,
                Class = string.Join(" ", classes.Where(x => !string.IsNullOrWhiteSpace(x))),
                Style = Style,
                Role  = Role
            };

            foreach (var v in Items)
            {
                var styles = new List <string>();
                styles.Add("width: " + v.Value + "%;");

                var c = new List <string>(barClass);

                switch (v.Layout)
                {
                case TypesLayoutProgressBar.Primary:
                    c.Add("bg-primary");
                    break;

                case TypesLayoutProgressBar.Success:
                    c.Add("bg-success");
                    break;

                case TypesLayoutProgressBar.Info:
                    c.Add("bg-info");
                    break;

                case TypesLayoutProgressBar.Warning:
                    c.Add("bg-warning");
                    break;

                case TypesLayoutProgressBar.Danger:
                    c.Add("bg-danger");
                    break;

                case TypesLayoutProgressBar.Light:
                    c.Add("bg-light");
                    break;

                case TypesLayoutProgressBar.Dark:
                    c.Add("bg-dark");
                    break;

                case TypesLayoutProgressBar.Color:
                    c.Add("background-color: " + v.BackgroundColor + ";");
                    break;
                }

                switch (v.Color)
                {
                case TypesTextColor.Muted:
                    barClass.Add("text-muted");
                    break;

                case TypesTextColor.Primary:
                    barClass.Add("text-primary");
                    break;

                case TypesTextColor.Success:
                    barClass.Add("text-success");
                    break;

                case TypesTextColor.Info:
                    barClass.Add("text-info");
                    break;

                case TypesTextColor.Warning:
                    barClass.Add("text-warning");
                    break;

                case TypesTextColor.Danger:
                    barClass.Add("text-danger");
                    break;

                case TypesTextColor.Light:
                    barClass.Add("text-light");
                    break;

                case TypesTextColor.Dark:
                    barClass.Add("text-dark");
                    break;

                case TypesTextColor.White:
                    barClass.Add("text-white");
                    break;
                }

                var bar = new HtmlElementDiv(new HtmlText(v.Text))
                {
                    ID    = ID,
                    Class = string.Join(" ", c.Where(x => !string.IsNullOrWhiteSpace(x))),
                    Style = string.Join(" ", styles.Where(x => !string.IsNullOrWhiteSpace(x))),
                    Role  = Role
                };

                html.Elements.Add(bar);
            }

            return(html);
        }
        /// <summary>
        /// In HTML konvertieren
        /// </summary>
        /// <returns>Das Control als HTML</returns>
        public override IHtmlNode ToHtml()
        {
            var classes = new List <string>();

            classes.Add(Class);
            classes.Add("comment");

            var profile = new ControlAvatar(Page)
            {
                User  = User,
                Image = Image
            };

            var timespan = string.Empty;
            var days     = (DateTime.Now - Timestamp).Days;

            if (days == 1)
            {
                timespan = "vor ein Tag";
            }
            else if (days < 1)
            {
                var hours = (DateTime.Now - Timestamp).Hours;
                if (hours == 1)
                {
                    timespan = "vor einer Stunde";
                }
                else if (hours < 1)
                {
                    var minutes = (DateTime.Now - Timestamp).Minutes;

                    if (minutes == 1)
                    {
                        timespan = "vor einer Minute";
                    }
                    else if (minutes < 1)
                    {
                        timespan = "gerade ebend";
                    }
                    else
                    {
                        timespan = "vor " + minutes + " Minuten";
                    }
                }
                else
                {
                    timespan = "vor " + hours + " Stunden";
                }
            }
            else
            {
                timespan = "vor " + days + " Tagen";
            }

            var date = new ControlText(Page)
            {
                Text    = timespan,
                Tooltip = "Am " + Timestamp.ToShortDateString() + " um " + Timestamp.ToShortTimeString() + " Uhr",
                Format  = TypesTextFormat.Span,
                Color   = TypesTextColor.Muted
            };

            var header = new HtmlElementDiv(profile.ToHtml(), date.ToHtml())
            {
                Class = "header"
            };

            var body = new HtmlElementDiv(new HtmlText(Post))
            {
                Class = "post"
            };

            var likeText = "Gefällt mir" + (Likes > 0 ? " (" + Likes + ")" : string.Empty);

            var like = new ControlButtonLink(Page)
            {
                Icon = "fas fa-thumbs-up", Text = likeText, Url = Page.GetUrl(), Size = TypesSize.Small, Layout = TypesLayoutButton.Light, Outline = true, Color = TypesTextColor.Primary
            };

            var option = new HtmlElementDiv(like.ToHtml())
            {
                Class = "options"
            };

            var html = new HtmlElementDiv(header, body, option)
            {
                Class = string.Join(" ", classes.Where(x => !string.IsNullOrWhiteSpace(x)))
            };

            return(html);
        }