Public/Add-TerminalSlide.ps1
|
function Add-TerminalSlide { [CmdletBinding()] [OutputType([object])] param( [Parameter(Mandatory, ValueFromPipeline)] [TerminalSlides.Schema.V1.TerminalPresentation]$Presentation, [Parameter(Mandatory)] [string]$Title, [scriptblock]$Content, [string]$Layout, [string]$Background, [hashtable]$Metadata = @{}, [switch]$Hidden, [switch]$SafeMode ) process { $resolvedLayout = if ($Layout) { $Layout } else { $Presentation.DefaultLayout } Assert-TerminalSlideLayout -Layout $resolvedLayout $slide = [TerminalSlides.Schema.V1.Slide]::new() $slide.Title = $Title $slide.Layout = $resolvedLayout $slide.Background = $Background $slide.Hidden = $Hidden.IsPresent $slide.Metadata.Custom = $Metadata $context = Push-TerminalSlidesBuildContext -Kind Slide try { $contentResults = if ($Content) { @(Invoke-SafeScriptBlock -ScriptBlock $Content -SafeMode:$SafeMode) } else { @() } foreach ($item in $contentResults) { if ($item -is [TerminalSlides.Schema.V1.SlideElement] -and -not $context.Elements.Contains($item)) { Add-CurrentSlideElement -Element $item } elseif ($item -and $item.PSObject.Properties.Name -contains '__TerminalSlidesNote') { $context.Notes = [string]$item.Text } } foreach ($element in $context.Elements) { $slide.Elements.Add($element) } $slide.Notes = $context.Notes $slide.MaxRevealStep = Get-TerminalSlideMaximumRevealStep -Slide $slide $Presentation.Slides.Add($slide) Update-SlideIndices -Presentation $Presentation $Presentation } finally { Pop-TerminalSlidesBuildContext -Context $context } } } |