public/ConvertTo-Parameters.ps1
|
function ConvertTo-Parameters { <# .SYNOPSIS Renders the parameters for a command as a detailed HTML section. .DESCRIPTION Accepts a PlatyPS CommandHelp model object and returns an HTML PARAMETERS <section> containing a subsection for each parameter with required/position badges, type, default value, aliases, accepted values, and wildcard support. Returns an empty string if the command has no parameters. .PARAMETER Help The PlatyPS CommandHelp model object to extract parameter information from. .EXAMPLE ```powershell $importParams = @{ Path = '.\docs\MyModule\Get-Widget.md' } $help = Import-MarkdownCommandHelp @importParams ConvertTo-Parameters -Help $help ``` Returns an HTML parameters section for the Get-Widget command. #> [CmdletBinding(HelpUri = 'https://steviecoaster.github.io/PlatyPS.Hosting/PlatyPS.Hosting/ConvertTo-Parameters/')] param( [Parameter(Mandatory, Position = 0)] [Microsoft.PowerShell.PlatyPS.Model.CommandHelp] $Help ) if (-not $Help.Parameters -or $Help.Parameters.Count -eq 0) { return '' } $paramBlocks = foreach ($p in $Help.Parameters) { # ---- required / position badge ---- $badges = @() # Check all parameter sets for Required/Position info foreach ($ps in $p.ParameterSets) { if ($ps.IsRequired) { $badges += '<span class="badge required">Required</span>' } if ($ps.Position -ge 0) { $badges += "<span class='badge position'>Position: $($ps.Position)</span>" } } if ($p.DontShow) { $badges += '<span class="badge dontshow">Don''t Show</span>' } $badgeHtml = if ($badges) { "<div class='badges'>$($badges -join ' ')</div>" } else { '' } # ---- meta table ---- $metaRows = @( "<tr><th>Type</th><td><code>$(ConvertTo-HtmlEncoded $p.Type)</code></td></tr>" "<tr><th>Default Value</th><td>$(ConvertTo-HtmlEncoded $p.DefaultValue)</td></tr>" ) if ($p.Aliases -and $p.Aliases.Count -gt 0) { $aliasText = ($p.Aliases | ForEach-Object { "<code>$_</code>" }) -join ', ' $metaRows += "<tr><th>Aliases</th><td>$aliasText</td></tr>" } if ($p.AcceptedValues -and $p.AcceptedValues.Count -gt 0) { $vals = ($p.AcceptedValues | ForEach-Object { "<code>$(ConvertTo-HtmlEncoded $_)</code>" }) -join ', ' $metaRows += "<tr><th>Accepted Values</th><td>$vals</td></tr>" } if ($p.SupportsWildcards) { $metaRows += '<tr><th>Wildcards</th><td>Yes</td></tr>' } @" <section class="parameter" id="param-$($p.Name.ToLower())"> <h3>-$($p.Name)</h3> $badgeHtml <p>$(ConvertTo-HtmlEncoded $p.Description)</p> <table class="param-meta">$($metaRows -join '')</table> </section> "@ } Write-Section -Title 'PARAMETERS' -Content ($paramBlocks -join "`n") } |