Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: update wasm banner nav items #1133

Merged
merged 1 commit into from
Jul 13, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
100 changes: 85 additions & 15 deletions Uno.Gallery/Uno.Gallery.Shared/Views/Shell.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -179,7 +179,11 @@
TargetType="MenuFlyoutItem">
Xiaoy312 marked this conversation as resolved.
Show resolved Hide resolved
<Setter Property="Foreground" Value="{ThemeResource OnSurfaceBrush}" />
<Setter Property="Background" Value="Transparent" />
<Setter Property="Padding" Value="10" />
<Setter Property="BorderBrush" Value="{ThemeResource OnSurfaceBrush}" />

<Setter Property="BorderThickness" Value="0" />
<Setter Property="Padding" Value="0,10" />
<Setter Property="Margin" Value="0" />

<Setter Property="FontSize" Value="14" />
<Setter Property="FontFamily" Value="{ThemeResource MaterialMediumFontFamily}" />
Expand All @@ -188,6 +192,8 @@
<Setter.Value>
<ControlTemplate TargetType="MenuFlyoutItem">
<Grid x:Name="RootGrid"
BorderBrush="{TemplateBinding BorderBrush}"
BorderThickness="{TemplateBinding BorderThickness}"
Padding="{TemplateBinding Padding}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
Expand All @@ -202,7 +208,11 @@
<Setter Target="TextBlock.Foreground" Value="{StaticResource UnoPurpleColorBrush}" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Disabled" />
<VisualState x:Name="Disabled">
<VisualState.Setters>
<Setter Target="TextBlock.Foreground" Value="#7D7D7D" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>

Expand All @@ -225,7 +235,10 @@
<Style x:Key="AppBarHeaderMenuFlyoutItemStyle"
BasedOn="{StaticResource AppBarMenuFlyoutItemStyle}"
TargetType="MenuFlyoutItem">
<Setter Property="FontWeight" Value="SemiBold" />
<Setter Property="BorderThickness" Value="0,0,0,1" />
<Setter Property="Margin" Value="0,0,0,6" />
<Setter Property="FontSize" Value="15" />
<Setter Property="FontWeight" Value="Bold" />
</Style>
</UserControl.Resources>

Expand Down Expand Up @@ -284,12 +297,14 @@
HorizontalAlignment="Right"
VerticalAlignment="Center">

<!--#region platform.uno nav mimic (ctrl+f: BANNER_SOURCE_GEN)-->
<!-- GENERATED CODE, see scripts\wasm banner source-gen.linq -->
<Button Content="PLATFORMS"
Style="{StaticResource AppBarDropdownButtonStyle}">
<Button.Flyout>
<MenuBarItemFlyout Placement="Bottom"
MenuFlyoutPresenterStyle="{StaticResource AppBarMenuFlyoutPresenterStyle}">
<MenuFlyoutItem Text="Overview"
<MenuFlyoutItem Text="Target Platforms"
Click="OnAppBarButtonClick"
Tag="https://platform.uno/platforms/"
Style="{StaticResource AppBarHeaderMenuFlyoutItemStyle}" />
Expand Down Expand Up @@ -317,14 +332,32 @@
Click="OnAppBarButtonClick"
Tag="https://platform.uno/uno-platform-for-macos/"
Style="{StaticResource AppBarMenuFlyoutItemStyle}" />
<MenuFlyoutItem Text="Migration"
IsEnabled="False"
Style="{StaticResource AppBarHeaderMenuFlyoutItemStyle}" />
<MenuFlyoutItem Text="WPF Developers"
Click="OnAppBarButtonClick"
Tag="https://platform.uno/wpf/"
Style="{StaticResource AppBarMenuFlyoutItemStyle}" />
<MenuFlyoutItem Text="Silverlight"
Click="OnAppBarButtonClick"
Tag="https://platform.uno/silverlight/"
Style="{StaticResource AppBarMenuFlyoutItemStyle}" />
<MenuFlyoutItem Text="Xamarin Forms"
Click="OnAppBarButtonClick"
Tag="https://platform.uno/xamarin-forms/"
Style="{StaticResource AppBarMenuFlyoutItemStyle}" />
</MenuBarItemFlyout>
</Button.Flyout>
</Button>
<Button Content="IDE &amp; TOOLS"
<Button Content="DEVELOP"
Style="{StaticResource AppBarDropdownButtonStyle}">
<Button.Flyout>
<MenuBarItemFlyout Placement="Bottom"
MenuFlyoutPresenterStyle="{StaticResource AppBarMenuFlyoutPresenterStyle}">
<MenuFlyoutItem Text="IDE"
IsEnabled="False"
Style="{StaticResource AppBarHeaderMenuFlyoutItemStyle}" />
<MenuFlyoutItem Text="Visual Studio"
Click="OnAppBarButtonClick"
Tag="https://platform.uno/visual-studio/"
Expand All @@ -335,9 +368,12 @@
Style="{StaticResource AppBarMenuFlyoutItemStyle}" />
<MenuFlyoutItem Text="Rider"
Click="OnAppBarButtonClick"
Tag="https://platform.uno/docs/articles/get-started-rider.html"
Tag="https://platform.uno/docs/articles/get-started-rider.html?tabs=windows"
Style="{StaticResource AppBarMenuFlyoutItemStyle}" />
<MenuFlyoutItem Text="Reative/MVUX"
<MenuFlyoutItem Text="TOOLS"
IsEnabled="False"
Style="{StaticResource AppBarHeaderMenuFlyoutItemStyle}" />
<MenuFlyoutItem Text="Reactive/MVUX"
Click="OnAppBarButtonClick"
Tag="https://platform.uno/reactive/"
Style="{StaticResource AppBarMenuFlyoutItemStyle}" />
Expand All @@ -361,17 +397,45 @@
Click="OnAppBarButtonClick"
Tag="https://platform.uno/uno-toolkit/"
Style="{StaticResource AppBarMenuFlyoutItemStyle}" />
<MenuFlyoutItem Text="Figma"
</MenuBarItemFlyout>
</Button.Flyout>
</Button>
<Button Content="DESIGN"
Style="{StaticResource AppBarDropdownButtonStyle}">
<Button.Flyout>
<MenuBarItemFlyout Placement="Bottom"
MenuFlyoutPresenterStyle="{StaticResource AppBarMenuFlyoutPresenterStyle}">
<MenuFlyoutItem Text="Uno Platform Figma Plugin"
Click="OnAppBarButtonClick"
Tag="https://platform.uno/unofigma/"
Style="{StaticResource AppBarMenuFlyoutItemStyle}" />
<MenuFlyoutItem Text="Uno Platform Material Toolkit"
Click="OnAppBarButtonClick"
Tag="https://platform.uno/uno-material-toolkit-for-figma/"
Style="{StaticResource AppBarMenuFlyoutItemStyle}" />
</MenuBarItemFlyout>
</Button.Flyout>
</Button>
<Button Content="COMMUNITY"
Style="{StaticResource AppBarDropdownButtonStyle}">
<Button.Flyout>
<MenuBarItemFlyout Placement="Bottom"
MenuFlyoutPresenterStyle="{StaticResource AppBarMenuFlyoutPresenterStyle}">
<MenuFlyoutItem Text="GitHub"
Click="OnAppBarButtonClick"
Tag="https://github.com/unoplatform/uno"
Style="{StaticResource AppBarMenuFlyoutItemStyle}" />
<MenuFlyoutItem Text="Discord"
Click="OnAppBarButtonClick"
Tag="https://platform.uno/discord"
Style="{StaticResource AppBarMenuFlyoutItemStyle}" />
<MenuFlyoutItem Text="Blog"
Click="OnAppBarButtonClick"
Tag="https://platform.uno/blog/"
Style="{StaticResource AppBarMenuFlyoutItemStyle}" />
</MenuBarItemFlyout>
</Button.Flyout>
</Button>
<Button Content="BLOG"
Click="OnAppBarButtonClick"
Tag="https://platform.uno/blog/"
Style="{StaticResource AppBarButtonStyle}" />
<Button Content="DOCS"
Click="OnAppBarButtonClick"
Tag="https://platform.uno/docs/articles/intro.html"
Expand All @@ -393,11 +457,15 @@
Click="OnAppBarButtonClick"
Tag="https://platform.uno/code-samples/"
Style="{StaticResource AppBarMenuFlyoutItemStyle}" />
<MenuFlyoutItem Text="Case Studies"
Click="OnAppBarButtonClick"
Tag="https://platform.uno/case-studies/"
Style="{StaticResource AppBarMenuFlyoutItemStyle}" />
<MenuFlyoutItem Text="Uno Gallery"
Click="OnAppBarButtonClick"
Tag="https://gallery.platform.uno/"
Style="{StaticResource AppBarMenuFlyoutItemStyle}" />
<MenuFlyoutItem Text="Uno Playgroud"
<MenuFlyoutItem Text="Uno Playground"
Click="OnAppBarButtonClick"
Tag="https://playground.platform.uno/#wasm-start"
Style="{StaticResource AppBarMenuFlyoutItemStyle}" />
Expand All @@ -412,10 +480,12 @@
</MenuBarItemFlyout>
</Button.Flyout>
</Button>
<Button Content="Get Started"
<Button Content="GET STARTED"
Click="OnAppBarButtonClick"
Tag="https://platform.uno/docs/articles/getting-started-tutorial-1.html"
Tag="https://marketplace.visualstudio.com/items?itemName=unoplatform.uno-platform-addin-2022"
Style="{StaticResource AppBarCtaButtonStyle}" />
<!--#endregion platform.uno nav mimic-->

</StackPanel>
</wasm:Grid>

Expand Down
63 changes: 63 additions & 0 deletions scripts/wasm banner source-gen.linq
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
<Query Kind="Statements">
<NuGetReference Version="1.1.2">AngleSharp</NuGetReference>
<Namespace>System.Net.Http</Namespace>
<Namespace>AngleSharp.Html.Parser</Namespace>
<Namespace>AngleSharp.Dom</Namespace>
<Namespace>AngleSharp.Html.Dom</Namespace>
</Query>

// source generator for "platform.uno nav mimic" section (ctrl+f: BANNER_SOURCE_GEN)
#nullable enable

var source = Util.Cache<string>(() => new HttpClient().GetStringAsync("https://platform.uno/").Result, "https://platform.uno/");
var document = new HtmlParser().ParseDocument(source);

var rootMenuItems = document.QuerySelectorAll("nav.elementor-nav-menu--main > ul > li")
.Select(ParseNavItem)
.Dump("data", 0);
var root = new XElement("nav-root", rootMenuItems.Select(x => x switch
{
{ Href: { }, Items: { Length: > 0 } } => new XComment("todo@xy: link with child items is not supported") as XNode,
{ Href: { } } => new XElement("Button",
new XAttribute("Content", x.Header?.ToUpper() ?? string.Empty),
new XAttribute("Click", "OnAppBarButtonClick"),
new XAttribute("Tag", x.Href),
new XAttribute("Style", $"{{StaticResource {(x.Type == NavItemType.CTA ? "AppBarCtaButtonStyle" : "AppBarButtonStyle")}}}")
),
_ => new XElement("Button",
new XAttribute("Content", x.Header?.ToUpper() ?? string.Empty),
new XAttribute("Style", "{StaticResource AppBarDropdownButtonStyle}"),
new XElement("Button.Flyout",
new XElement("MenuBarItemFlyout", new XObject[]
{
new XAttribute("Placement", "Bottom"),
new XAttribute("MenuFlyoutPresenterStyle", "{StaticResource AppBarMenuFlyoutPresenterStyle}"),
}.Concat((x.Items ?? Enumerable.Empty<NavigationItem>()).Select(y => new XElement("MenuFlyoutItem",
new XAttribute("Text", y.Header?.ToString() ?? string.Empty),
y.Href is { } ? new XAttribute("Click", "OnAppBarButtonClick") : null,
y.Href is { } ? new XAttribute("Tag", y.Href) : null,
y.Href is not { } ? new XAttribute("IsEnabled", "False") : null,
new XAttribute("Style", $"{{StaticResource {(y.Type == NavItemType.SectionHeader ? "AppBarHeaderMenuFlyoutItemStyle" : "AppBarMenuFlyoutItemStyle")}}}")
))))
)
),
})).Dump("xaml");

NavigationItem ParseNavItem(IElement x) => new
(
Type: ParseNavItemType(x),
Header: SanitizeText(x.FirstElementChild?.TextContent),
Href: (x.FirstElementChild as IHtmlAnchorElement)?.Href is { } href && href != "about:///#" ? href : null,
Items: x.Children.ElementAtOrDefault(1)?.Children.Select(ParseNavItem).ToArray()
);
string? SanitizeText(string? text) => text?.Replace("\u2013", "-");
NavItemType ParseNavItemType(IElement x)
{
if (x.ClassName?.Contains("header-menu-category") == true) return NavItemType.SectionHeader; // loose match header-menu-category and header-menu-category--stuff
if (x.ClassList?.Contains("get-started-btn") == true) return NavItemType.CTA; // exact match

return default;
}

public record class NavigationItem(NavItemType Type, string? Header, string? Href, NavigationItem[]? Items = null);
public enum NavItemType { Default = 0, SectionHeader, CTA }
Loading