UniversalDashboard.Controls.psm1
function New-UDGridLayout { param( [Parameter()] [string]$Id = (New-Guid).ToString(), [Parameter()] [int]$RowHeight = 30, [Parameter()] [scriptblock]$Content, [Parameter()] [Hashtable[]]$Layout, [Parameter()] [string]$LayoutJson, [Parameter()] [int]$LargeColumns = 12, [Parameter()] [int]$MediumColumns = 10, [Parameter()] [int]$SmallColumns = 6, [Parameter()] [int]$ExtraSmallColumns = 4, [Parameter()] [int]$ExtraExtraSmallColumns = 2, [Parameter()] [int]$LargeBreakpoint = 1200, [Parameter()] [int]$MediumBreakpoint = 996, [Parameter()] [int]$SmallBreakpoint = 768, [Parameter()] [int]$ExtraSmallBreakpoint = 480, [Parameter()] [int]$ExtraExtraSmallBreakpoint = 0, [Parameter()] [switch]$Draggable, [Parameter()] [switch]$Resizable, [Parameter()] [switch]$Persist ) End { $Breakpoints = @{ lg = $LargeBreakpoint md = $MediumBreakpoint sm = $SmallBreakpoint xs = $ExtraSmallBreakpoint xxs = $ExtraExtraSmallBreakpoint } $Columns = @{ lg = $LargeColumns md = $MediumColumns sm = $SmallColumns xs = $ExtraSmallColumns xxs = $ExtraExtraSmallColumns } @{ type = "grid-layout" id = $Id className = "layout" rowHeight = $RowHeight content = $Content.Invoke() layout = $Layout layoutJson = $LayoutJson cols = $Columns breakpoints = $Breakpoints isDraggable = $Draggable.IsPresent isResizable = $Resizable.IsPresent persist = $Persist.IsPresent } } } function New-UDHeading { param( [Parameter()] [String]$Id = (New-Guid), [Parameter(ParameterSetName = "Content")] [ScriptBlock]$Content, [Parameter(ParameterSetName = "Text")] [string]$Text, [Parameter()] [ValidateSet("1", "2", "3", "4", "5", "6")] $Size, [Parameter()] [UniversalDashboard.Models.DashboardColor]$Color = 'black' ) if ($PSCmdlet.ParameterSetName -eq "Text") { $Content = { $Text } } New-UDElement -Id $Id -Tag "h$size" -Content $Content -Attributes @{ style = @{ color = $Color.HtmlColor } } } function New-UDIcon { param( [Parameter()] [String]$Id = (New-Guid), [Parameter(Mandatory = $true)] [UniversalDashboard.Models.FontAwesomeIcons]$Icon, [Parameter()] [ValidateSet('ExtraSmall', 'Small', 'Large', '2x', '3x', '4x', '5x')] [string]$Size, [Parameter()] [Switch]$FixedWidth, [Parameter()] [UniversalDashboard.Models.DashboardColor]$Color ) $sizeClass = '' if ($PSBoundParameters.ContainsKey("Size")) { switch ($Size) { "ExtraSmall" { $sizeClass = 'fa-xs' } "Small" { $sizeClass = 'fa-sm' } "Large" { $sizeClass = 'fa-lg' } "2x" { $sizeClass = 'fa-2x' } "3x" { $sizeClass = 'fa-3x' } "4x" { $sizeClass = 'fa-4x' } "5x" { $sizeClass = 'fa-5x' } } } $fixedWidthClass = '' if ($FixedWidth) { $fixedWidthClass = 'fa-fw' } $IconClass = $Icon.ToString().Replace('_', '-') $Attributes = @{ className = "fa fa-$IconClass $sizeClass $fixedWidthClass" } if ($PSBoundParameters.ContainsKey('Color')) { $Attributes.style = @{ color = $Color.HtmlColor } } New-UDElement -Tag 'i' -Attributes $Attributes -Id $id } function New-UDIFrame { param( [Parameter()] [String]$Id = (New-Guid), [Parameter()] $Uri ) New-UDElement -Id $Id -Tag "iframe" -Attributes @{ src = $Uri } } function New-UDImage { [CmdletBinding(DefaultParameterSetName = 'url')] param( [Parameter()] [String]$Id = (New-Guid), [Parameter(ParameterSetName = 'url')] [String]$Url, [Parameter(ParameterSetName = 'path')] [String]$Path, [Parameter()] [int]$Height, [Parameter()] [int]$Width, [Parameter()] [Hashtable]$Attributes = @{} ) switch ($PSCmdlet.ParameterSetName) { 'path' { if (-not [String]::IsNullOrEmpty($Path)) { if (-not (Test-Path $Path)) { throw "$Path does not exist." } $mimeType = 'data:image/png;base64, ' if ($Path.EndsWith('jpg') -or $Path.EndsWith('jpeg')) { $mimeType = 'data:image/jpg;base64, ' } $base64String = [Convert]::ToBase64String([System.IO.File]::ReadAllBytes($Path)) $Attributes.'src' = "$mimeType $base64String" } } 'url' { $Attributes.'src' = $Url } } if ($PSBoundParameters.ContainsKey('Height')) { $Attributes.'height' = $Height } if ($PSBoundParameters.ContainsKey('Width')) { $Attributes.'width' = $Width } New-UDElement -Tag 'img' -Attributes $Attributes } function New-UDParagraph { param( [Parameter(ParameterSetName = 'content')] [ScriptBlock]$Content, [Parameter(ParameterSetName = 'text')] [string]$Text, [Parameter()] [UniversalDashboard.Models.DashboardColor]$Color = 'black' ) if ($PSCmdlet.ParameterSetName -eq 'content') { New-UDElement -Tag 'p' -Content $Content -Attributes @{ style = @{ color = $Color.HtmlColor } } } else { New-UDElement -Tag 'p' -Content { $Text } -Attributes @{ style = @{ color = $Color.HtmlColor } } } } function New-UDSpan { param( [Parameter()] [String]$Id = (New-Guid), [Parameter()] $Content ) New-UDElement -Id $Id -Tag "span" -Content { $Content } } function New-UDTextbox { param( [Parameter()] [String]$Id = (New-Guid), [Parameter()] [string]$Label, [Parameter()] [string]$Placeholder, [Parameter()] $Value, [Parameter()] [ValidateSet('text', 'password', 'email')] [String]$Type = 'text', [Parameter()] [Switch]$Disabled, [Parameter()] [UniversalDashboard.Models.FontAwesomeIcons]$Icon ) $Attributes = @{ type = $type value = $Value placeholder = $Placeholder } if ($Disabled) { $Attributes.disabled = $true } New-UDElement -Tag "div" -Attributes @{ className = 'input-field'} -Content { if ($PSBoundParameters.ContainsKey('Icon')) { New-UDElement -Tag "i" -Attributes @{ className = "fa fa-$($Icon.ToString().Replace('_', '-')) prefix" } } New-UDElement -Id $Id -Tag "input" -Attributes $Attributes if ($PSBoundParameters.ContainsKey('Label')) { New-UDElement -Tag "label" -Attributes @{ 'for' = $Id } -Content { $Label } } } } |