Class Sealed
public sealed class StepsRenderer : HtmlObjectRenderer<Moka.Docs.Parsing.Markdown.StepsBlock>

Namespace: Moka.Docs.Parsing.Markdown

Renders a steps block as numbered step-by-step HTML.

Inheritance

Inherits from: HtmlObjectRenderer<Moka.Docs.Parsing.Markdown.StepsBlock>

Methods

Type Relationships
classDiagram
                    style StepsRenderer fill:#f9f,stroke:#333,stroke-width:2px
                    StepsRenderer --|> StepsBlock~ : inherits
                
View Source
/// <summary>
///     Renders a steps block as numbered step-by-step HTML.
/// </summary>
public sealed class StepsRenderer : HtmlObjectRenderer<StepsBlock>
{
    /// <inheritdoc/>
    protected override void Write(HtmlRenderer renderer, StepsBlock block)
    {
        renderer.EnsureLine();
        renderer.Write("<div class=\"component-steps\">");
        renderer.WriteLine();
        int stepNumber = 0;
        foreach (Block child in block)
        {
            if (child is HeadingBlock heading && heading.Level == 3)
            {
                // Close previous step if not the first
                if (stepNumber > 0)
                {
                    renderer.Write("</div>"); // close step-content
                    renderer.WriteLine();
                    renderer.Write("</div>"); // close step
                    renderer.WriteLine();
                }

                stepNumber++;
                renderer.Write("<div class=\"component-step\">");
                renderer.WriteLine();
                renderer.Write($"<div class=\"component-step-indicator\"><span class=\"component-step-number\">{stepNumber}</span></div>");
                renderer.WriteLine();
                renderer.Write("<div class=\"component-step-content\">");
                renderer.WriteLine();
                // Render heading text as step title
                renderer.Write("<h3 class=\"component-step-title\">");
                if (heading.Inline != null)
                {
                    renderer.WriteChildren(heading.Inline);
                }

                renderer.Write("</h3>");
                renderer.WriteLine();
            }
            else
            {
                // If we haven't started a step yet but have content, start an implicit step
                if (stepNumber == 0)
                {
                    stepNumber++;
                    renderer.Write("<div class=\"component-step\">");
                    renderer.WriteLine();
                    renderer.Write($"<div class=\"component-step-indicator\"><span class=\"component-step-number\">{stepNumber}</span></div>");
                    renderer.WriteLine();
                    renderer.Write("<div class=\"component-step-content\">");
                    renderer.WriteLine();
                }

                // Render the child block using its registered renderer
                renderer.Write(child);
            }
        }

        // Close last step
        if (stepNumber > 0)
        {
            renderer.Write("</div>"); // close step-content
            renderer.WriteLine();
            renderer.Write("</div>"); // close step
            renderer.WriteLine();
        }

        renderer.Write("</div>");
        renderer.WriteLine();
    }
}
Was this page helpful?