Skip to content

Commit

Permalink
Add alternate install command for global tools packages on the packag…
Browse files Browse the repository at this point in the history
…es page (#5684)

Don't display the tabs for managers that are not global tools compatible.
  • Loading branch information
nkolev92 authored Apr 11, 2018
1 parent b373d3d commit 3c5a43c
Show file tree
Hide file tree
Showing 4 changed files with 85 additions and 29 deletions.
17 changes: 17 additions & 0 deletions src/NuGetGallery/ViewModels/PackageManagerViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -27,5 +27,22 @@ public class PackageManagerViewModel
/// A string that represents the command used to install a specific package.
/// </summary>
public string InstallPackageCommand { get; set; }

/// <summary>
/// The alert message that contains clarifications about the command/scenario
/// </summary>
public string AlertMessage { get; set; }

/// <summary>
/// The level with which the above message will be displayed.
/// </summary>
public AlertLevel AlertLevel { get; set; }
}

public enum AlertLevel
{
None,
Info,
Warning
}
}
2 changes: 2 additions & 0 deletions src/NuGetGallery/ViewModels/PackageViewModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ public PackageViewModel(Package package)
LatestStableVersionSemVer2 = package.IsLatestStableSemVer2;
LastUpdated = package.Published;
Listed = package.Listed;
IsDotnetToolPackageType = package.PackageTypes.Any(e => e.Name.Equals("DotnetTool", StringComparison.OrdinalIgnoreCase));
_packageStatus = package.PackageStatusKey;
DownloadCount = package.DownloadCount;
Prerelease = package.IsPrerelease;
Expand Down Expand Up @@ -71,6 +72,7 @@ public PackageViewModel(Package package)
public bool Prerelease { get; set; }
public int DownloadCount { get; set; }
public bool Listed { get; set; }
public bool IsDotnetToolPackageType { get; set; }
public bool FailedValidation => _packageStatus == PackageStatus.FailedValidation;
public bool Available => _packageStatus == PackageStatus.Available;
public bool Validating => _packageStatus == PackageStatus.Validating;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,5 +14,12 @@ public class ThirdPartyPackageManagerViewModel : PackageManagerViewModel
/// for support.
/// </summary>
public string ContactUrl { get; set; }

public ThirdPartyPackageManagerViewModel(string contactUrl)
{
ContactUrl = contactUrl;
AlertLevel = AlertLevel.Warning;
AlertMessage = string.Format("The NuGet Team does not provide support for this client. Please contact its <a href=\"{0}\">maintainers</a> for support.", contactUrl);
}
}
}
88 changes: 59 additions & 29 deletions src/NuGetGallery/Views/Packages/DisplayPackage.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -6,34 +6,54 @@

var absolutePackageUrl = Url.Absolute(Url.Package(Model.Id));

var packageManagers = new PackageManagerViewModel[]
PackageManagerViewModel[] packageManagers;

if (Model.IsDotnetToolPackageType)
{
new PackageManagerViewModel()
packageManagers = new PackageManagerViewModel[]
{
Id = "package-manager",
Name = "Package Manager",
CommandPrefix = "PM> ",
InstallPackageCommand = string.Format("Install-Package {0} -Version {1}", Model.Id, Model.Version)
},

new PackageManagerViewModel()
new PackageManagerViewModel()
{
Id = "dotnet-cli",
Name = ".NET CLI",
CommandPrefix = "> ",
InstallPackageCommand = string.Format("dotnet tool install --global {0} --version {1}", Model.Id, Model.Version),
AlertLevel = AlertLevel.Info,
AlertMessage = string.Format("This package contains a <a href=\"{0}\">.NET Core Global Tool</a> you can call from the shell/command line.", "https://aka.ms/global-tools"),
}
};
}
else
{
packageManagers = new PackageManagerViewModel[]
{
Id = "dotnet-cli",
Name = ".NET CLI",
CommandPrefix = "> ",
InstallPackageCommand = string.Format("dotnet add package {0} --version {1}", Model.Id, Model.Version)
},
new PackageManagerViewModel()
{
Id = "package-manager",
Name = "Package Manager",
CommandPrefix = "PM> ",
InstallPackageCommand = string.Format("Install-Package {0} -Version {1}", Model.Id, Model.Version)
},

new ThirdPartyPackageManagerViewModel()
{
Id = "paket-cli",
Name = "Paket CLI",
CommandPrefix = "> ",
InstallPackageCommand = string.Format("paket add {0} --version {1}", Model.Id, Model.Version),
ContactUrl = "https://fsprojects.github.io/Paket/contact.html"
},
};
new PackageManagerViewModel()
{
Id = "dotnet-cli",
Name = ".NET CLI",
CommandPrefix = "> ",
InstallPackageCommand = string.Format("dotnet add package {0} --version {1}", Model.Id, Model.Version)
},

new ThirdPartyPackageManagerViewModel("https://fsprojects.github.io/Paket/contact.html")
{
Id = "paket-cli",
Name = "Paket CLI",
CommandPrefix = "> ",
InstallPackageCommand = string.Format("paket add {0} --version {1}", Model.Id, Model.Version),
}
};
}
}

@section SocialMeta {
@if (!String.IsNullOrWhiteSpace(ViewBag.FacebookAppID))
{
Expand Down Expand Up @@ -96,13 +116,23 @@
</button>
</div>
</div>
@if (thirdPartyPackageManager != null)

@switch (packageManager.AlertLevel)
{
@ViewHelpers.AlertWarning(
@<text>
The NuGet Team does not provide support for this client.
Please contact its <a href="@thirdPartyPackageManager.ContactUrl">maintainers</a> for support.
</text>)
case AlertLevel.Info:
@ViewHelpers.AlertInfo(
@<text>
@Html.Raw(packageManager.AlertMessage)
</text>);
break;
case AlertLevel.Warning:
@ViewHelpers.AlertWarning(
@<text>
@Html.Raw(packageManager.AlertMessage)
</text>);
break;
default:
break;
}
</div>
}
Expand Down

0 comments on commit 3c5a43c

Please sign in to comment.