Ejemplo n.º 1
0
        private string RenderStatic(TextModel node)
        {
            var builder = new StringBuilder();

            switch (node)
            {
            case TextModel.Spans spans:
                foreach (var span in spans.Children)
                {
                    builder.Append(RenderStatic(span));
                }
                break;

            case TextModel.Lines lines:
                for (var i = 0; i < lines.Children.Length; i++)
                {
                    builder.Append(RenderStatic(lines.Children[i]));
                    if (i < lines.Children.Length - 1)
                    {
                        builder.Append("<br>");
                    }
                }
                break;

            case TextModel.Paras paras:
                builder.Append("<div class=\"rich-text__paras\">");
                foreach (var para in paras.Children)
                {
                    builder.Append("<p>");
                    builder.Append(RenderStatic(para));
                    builder.Append("</p>");
                }
                builder.Append("</div>");
                break;

            case TextModel.Split split:
                var compactClass = split.IsCompact ? " rich-text__bar--compact" : "";
                for (var i = 0; i < split.Children.Length; i++)
                {
                    builder.Append(RenderStatic(split.Children[i]));
                    if (i < split.Children.Length - 1)
                    {
                        builder.Append($"<div class=\"rich-text__bar{compactClass}\"></div>");
                    }
                }
                break;

            case TextModel.Bold bold:
                builder.Append("<span class=\"rich-text__bold\">");
                builder.Append(RenderStatic(bold.Child));
                builder.Append("</span>");
                break;

            case TextModel.Small small:
                builder.Append("<span class=\"rich-text__small\">");
                builder.Append(RenderStatic(small.Child));
                builder.Append("</span>");
                break;

            case TextModel.Error error:
                builder.Append("<span class=\"rich-text__error\">");
                builder.Append(RenderStatic(error.Child));
                builder.Append("</span>");
                break;

            case TextModel.Private @private:
                var isOwner = Session.Username == @private.Owner ||
                              (Game != null && Game.ActivePlayer == @private.Owner && Game.ControllingPlayer == Session.Username) ||
                              (Game != null && !Game.Players.Contains(Session.Username));
                if (isOwner)
                {
                    builder.Append(RenderStatic(@private.Child));
                }
                else
                {
                    builder.Append($" {@private.AltText} ");
                }
                break;

            case TextModel.Run run:
                builder.Append($" {run.Text} ");
                break;

            case TextModel.Indent indent:
                for (var i = 0; i < indent.Level; i++)
                {
                    builder.Append("... ");
                }
                break;

            case TextModel.Symbol symbol:
                var largeSpanClass = symbol.IsLarge ? " rich-text__no-break--large" : "";
                var largeImgClass  = symbol.IsLarge ? " rich-text__symbol--large" : "";
                builder.Append($"<span class=\"rich-text__no-break{largeSpanClass}\">{symbol.Prefix}<img class=\"rich-text__symbol{largeImgClass}\" src=\"/_content/Cardgame.UI/symbols/{symbol.Name}.png\">{symbol.Suffix}</span>");
                break;

            case TextModel.Pronominal pro:
                if (Session.Username.Equals(pro.Name))
                {
                    builder.Append($" {pro.Prefix}{pro.IfYou}{pro.Suffix} ");
                }
                else
                {
                    builder.Append($" {pro.Prefix}{pro.IfThem}{pro.Suffix} ");
                }
                break;

            case TextModel.Player _:
            case TextModel.Card _:
            default:
                builder.Append($" unsupported static node {node.GetType().Name} ");
                break;
            }

            return(builder.ToString());
        }