Skip to content

Commit 8b7df7d

Browse files
author
Daniel Jacinto
authored
[TFM Display] Badges and Table UI. (#8885)
* Partials for badges and table added, along with styles. * NuGetFrameworkExtensions tests added. * nit. * refactor compatibilityFactory. * nit. * Update factory to create an ordered dictionary. * Fixed GetBadgeVersion bug. * Accessibility changes. * table information icons added. * Fix PackagesControllerFacts. * Added more tests. * a11y fix for screenreader, no supported frameworks. * Address comments for ux phrases and color. * Added learn more link. * nit. * Deprecated and unused frameworks removed. * removed unofficial frameworks from supported frameworks list. * learn more about link added if no TFM. * Added margin top to learn more link.
1 parent dcbcb45 commit 8b7df7d

22 files changed

Lines changed: 716 additions & 53 deletions

src/Bootstrap/dist/css/bootstrap-theme.css

Lines changed: 112 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/Bootstrap/less/theme/all.less

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
@import "common-list-packages.less";
77
@import "common-multi-select-dropdown.less";
88
@import "common-readme.less";
9+
@import "common-supported-frameworks.less";
910
@import "common-user-package-list.less";
1011
@import "page-about.less";
1112
@import "page-account-settings.less";
Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,94 @@
1+
@badge-dark: #0078d4;
2+
@badge-dark-opaque: rgba(0, 183, 195, 0.1);
3+
@table-product-width: 232px;
4+
5+
.framework {
6+
font-family: Segoe UI;
7+
font-size: 14px;
8+
line-height: 20px;
9+
}
10+
11+
.framework-badges {
12+
.framework;
13+
margin-bottom: 14px;
14+
}
15+
16+
.framework-badge {
17+
padding: 1px 8px;
18+
border-radius: 2px;
19+
justify-content: center;
20+
display: inline-block;
21+
}
22+
23+
.framework-badge:not(:last-child) {
24+
margin-right: 8px;
25+
}
26+
27+
.framework-badge-asset {
28+
.framework-badge;
29+
background: @badge-dark;
30+
color: white;
31+
}
32+
33+
.framework-badge-computed {
34+
.framework-badge;
35+
border: 1px solid @badge-dark;
36+
background: @badge-dark-opaque
37+
}
38+
39+
.framework-table {
40+
margin-bottom: 30px;
41+
42+
.framework;
43+
width: 100%;
44+
45+
tr {
46+
min-height: 43px;
47+
}
48+
49+
.framework-table-title {
50+
padding: 11px 0px 12px 12px;
51+
}
52+
53+
.framework-table-product {
54+
width: @table-product-width;
55+
padding: 11px 0px 12px 12px;
56+
}
57+
58+
.framework-table-margin {
59+
margin: 0px 8px 8px 0px;
60+
}
61+
62+
.framework-table-frameworks {
63+
width: calc(100% - @table-product-width);
64+
padding: 11px 0px 4px 12px;
65+
}
66+
}
67+
68+
.frameworktableinfo {
69+
padding: 3px 8px 5px;
70+
width: 35px;
71+
height: 10px;
72+
box-sizing: border-box;
73+
border-radius: 2px;
74+
margin-right: 10px;
75+
}
76+
.frameworktableinfo-computed-icon{
77+
.frameworktableinfo;
78+
border: 1px solid @badge-dark;
79+
}
80+
81+
.frameworktableinfo-asset-icon{
82+
.frameworktableinfo;
83+
background-color: @badge-dark;
84+
}
85+
86+
.frameworktableinfo-text {
87+
font-size: 14px;
88+
line-height: 16px;
89+
}
90+
91+
p.frameworktableinfo-text {
92+
.frameworktableinfo-text;
93+
margin-top: 10px;
94+
}

src/Bootstrap/less/theme/page-display-package-v2.less

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
}
1717

1818
.package-title {
19-
margin-bottom: 30px;
19+
margin-bottom: 16px;
2020

2121
h1 {
2222

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using NuGet.Services.Entities;
5+
using System.Collections.Generic;
6+
7+
namespace NuGetGallery.Frameworks
8+
{
9+
public interface IPackageFrameworkCompatibilityFactory
10+
{
11+
PackageFrameworkCompatibility Create(ICollection<PackageFramework> packageFrameworks);
12+
}
13+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
// Copyright (c) .NET Foundation. All rights reserved.
2+
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
3+
4+
using NuGet.Frameworks;
5+
using System.Runtime.CompilerServices;
6+
using System.Text;
7+
8+
namespace NuGetGallery.Frameworks
9+
{
10+
public static class NuGetFrameworkExtensions
11+
{
12+
public static string GetBadgeVersion(this NuGetFramework framework)
13+
{
14+
var builder = new StringBuilder();
15+
builder.Append(framework.Version.Major);
16+
builder.Append(".");
17+
builder.Append(framework.Version.Minor);
18+
19+
if (framework.Version.Build != 0)
20+
{
21+
builder.Append(".");
22+
builder.Append(framework.Version.Build);
23+
24+
if (framework.Version.Revision != 0)
25+
{
26+
builder.Append(".");
27+
builder.Append(framework.Version.Revision);
28+
}
29+
}
30+
else if (framework.Version.Revision != 0)
31+
{
32+
builder.Append(".0.");
33+
builder.Append(framework.Version.Revision);
34+
}
35+
36+
return builder.ToString();
37+
}
38+
}
39+
}

src/NuGetGallery.Core/Frameworks/PackageFrameworkCompatibility.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,6 @@ public class PackageFrameworkCompatibility
2020
/// Key: Is the <see cref="FrameworkProductNames"/> if resolved on (<seealso cref="PackageFrameworkCompatibilityFactory.ResolveFrameworkProductName(NuGetFramework)"/>) or the <see cref="NuGetFramework.Framework"/>.<br></br>
2121
/// Value: Is an ordered collection containing all the compatible frameworks.
2222
/// </remarks>
23-
public IReadOnlyDictionary<string, ICollection<PackageFrameworkCompatibilityTableData>> Table { get; set; }
23+
public IReadOnlyDictionary<string, IReadOnlyCollection<PackageFrameworkCompatibilityTableData>> Table { get; set; }
2424
}
2525
}

src/NuGetGallery.Core/Frameworks/PackageFrameworkCompatibilityFactory.cs

Lines changed: 41 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,16 @@
99

1010
namespace NuGetGallery.Frameworks
1111
{
12-
public class PackageFrameworkCompatibilityFactory
12+
public class PackageFrameworkCompatibilityFactory : IPackageFrameworkCompatibilityFactory
1313
{
1414
private readonly ISet<Version> WindowsStoreNetCoreVersions = new HashSet<Version> { FrameworkConstants.EmptyVersion, Version.Parse("4.5.0.0"), Version.Parse("4.5.1.0") };
1515
private readonly ISet<Version> WindowsStoreWindowsVersions = new HashSet<Version> { FrameworkConstants.EmptyVersion, Version.Parse("8.0.0.0"), Version.Parse("8.1.0.0") };
16+
private readonly ISet<string> TableFirstFrameworks = new HashSet<string> {
17+
FrameworkProductNames.Net,
18+
FrameworkProductNames.NetCore,
19+
FrameworkProductNames.NetStandard,
20+
FrameworkProductNames.NetFramework
21+
};
1622
private readonly NuGetFrameworkSorter Sorter = new NuGetFrameworkSorter();
1723
private readonly int NetStartingMajorVersion = 5;
1824

@@ -45,11 +51,11 @@ public PackageFrameworkCompatibility Create(ICollection<PackageFramework> packag
4551
};
4652
}
4753

48-
private IReadOnlyDictionary<string, ICollection<PackageFrameworkCompatibilityTableData>> CreateFrameworkCompatibilityTable(ICollection<NuGetFramework> filteredPackageFrameworks)
54+
private IReadOnlyDictionary<string, IReadOnlyCollection<PackageFrameworkCompatibilityTableData>> CreateFrameworkCompatibilityTable(ICollection<NuGetFramework> filteredPackageFrameworks)
4955
{
5056
var compatibleFrameworks = _compatibilityService.GetCompatibleFrameworks(filteredPackageFrameworks);
5157

52-
var table = new Dictionary<string, ICollection<PackageFrameworkCompatibilityTableData>>();
58+
var table = new Dictionary<string, SortedSet<PackageFrameworkCompatibilityTableData>>();
5359

5460
foreach (var compatibleFramework in compatibleFrameworks)
5561
{
@@ -74,7 +80,7 @@ private IReadOnlyDictionary<string, ICollection<PackageFrameworkCompatibilityTab
7480
}
7581
}
7682

77-
return table;
83+
return OrderDictionaryKeys(table);
7884
}
7985

8086
private string ResolveFrameworkProductName(NuGetFramework framework)
@@ -119,7 +125,36 @@ private string ResolveFrameworkProductName(NuGetFramework framework)
119125
return framework.Framework;
120126
}
121127

122-
private PackageFrameworkCompatibilityBadges CreateFrameworkCompatibilityBadges(IReadOnlyDictionary<string, ICollection<PackageFrameworkCompatibilityTableData>> table)
128+
private IReadOnlyDictionary<string, IReadOnlyCollection<PackageFrameworkCompatibilityTableData>> OrderDictionaryKeys(Dictionary<string, SortedSet<PackageFrameworkCompatibilityTableData>> table)
129+
{
130+
var orderedTable = new Dictionary<string, IReadOnlyCollection<PackageFrameworkCompatibilityTableData>>();
131+
132+
AddOrderedKey(table, orderedTable, FrameworkProductNames.Net);
133+
AddOrderedKey(table, orderedTable, FrameworkProductNames.NetCore);
134+
AddOrderedKey(table, orderedTable, FrameworkProductNames.NetStandard);
135+
AddOrderedKey(table, orderedTable, FrameworkProductNames.NetFramework);
136+
137+
foreach (var orderedKey in table.Keys.OrderBy(k => k))
138+
{
139+
if (!TableFirstFrameworks.Contains(orderedKey))
140+
{
141+
table.TryGetValue(orderedKey, out var compatibleFrameworks);
142+
orderedTable.Add(orderedKey, compatibleFrameworks);
143+
}
144+
}
145+
146+
return orderedTable;
147+
}
148+
149+
private void AddOrderedKey(Dictionary<string, SortedSet<PackageFrameworkCompatibilityTableData>> table, Dictionary<string, IReadOnlyCollection<PackageFrameworkCompatibilityTableData>> orderedTable, string framework)
150+
{
151+
if (table.TryGetValue(framework, out var compatibleFrameworks))
152+
{
153+
orderedTable.Add(framework, compatibleFrameworks);
154+
}
155+
}
156+
157+
private PackageFrameworkCompatibilityBadges CreateFrameworkCompatibilityBadges(IReadOnlyDictionary<string, IReadOnlyCollection<PackageFrameworkCompatibilityTableData>> table)
123158
{
124159
var net = GetBadgeFramework(table, FrameworkProductNames.Net);
125160
var netCore = GetBadgeFramework(table, FrameworkProductNames.NetCore);
@@ -135,7 +170,7 @@ private PackageFrameworkCompatibilityBadges CreateFrameworkCompatibilityBadges(I
135170
};
136171
}
137172

138-
private NuGetFramework GetBadgeFramework(IReadOnlyDictionary<string, ICollection<PackageFrameworkCompatibilityTableData>> table, string productName)
173+
private NuGetFramework GetBadgeFramework(IReadOnlyDictionary<string, IReadOnlyCollection<PackageFrameworkCompatibilityTableData>> table, string productName)
139174
{
140175
if (table.TryGetValue(productName, out var data))
141176
{

0 commit comments

Comments
 (0)