Skip to content

Instantly share code, notes, and snippets.

@grenade
Last active August 29, 2015 14:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save grenade/b4f11aa5080f9f5209f4 to your computer and use it in GitHub Desktop.
Save grenade/b4f11aa5080f9f5209f4 to your computer and use it in GitHub Desktop.
  • put all package versions in a folder named with the package id (or find a mechanism for extracting distinct package names in bash)
  • update manifest generator to only parse latest versions of packages
  • create a transform that generates the package html description
  • create a transform that generates a package index html page
<Directory /data/repos/nuget/>
AllowOverride All
RedirectMatch 302 ^package/([^/]+)/([^/]+)/?$ packages/$1.$2.nupkg
</Directory>
curl -L http://chocolatey.org/api/v2/package/hg/3.4.2 -o packages/hg.3.4.2.nupkg
curl -L http://chocolatey.org/api/v2/package/hg/3.4.1/ -o packages/hg.3.4.1.nupkg
curl -L http://chocolatey.org/api/v2/package/hg/3.4 -o packages/hg.3.4.nupkg
curl -L http://chocolatey.org/api/v2/package/hg/2.7.0.20130816/ -o packages/hg.2.7.0.nupkg
curl -L http://chocolatey.org/api/v2/package/git.install/1.9.5.20150320 -o packages/git.install.1.9.5.20150320.nupkg
curl -L http://chocolatey.org/api/v2/package/git.install/1.9.5/ -o packages/git.install.1.9.5.nupkg
curl -L http://chocolatey.org/api/v2/package/git.install/1.9.0.20140303 -o packages/git.install.1.9.0.20140303.nupkg
curl -L http://chocolatey.org/api/v2/package/git.install/1.7.10 -o packages/git.install.1.7.10.nupkg
curl -L http://chocolatey.org/api/v2/package/nxlog/2.8.1248 -o packages/nxlog.2.8.1248.nupkg
curl -L http://chocolatey.org/api/v2/package/nxlog/2.7.1191 -o packages/nxlog.2.7.1191.nupkg
curl -L http://chocolatey.org/api/v2/package/nxlog/2.6.1131 -o packages/nxlog.2.6.1131.nupkg
curl -L http://chocolatey.org/api/v2/package/nxlog/2.5.1089 -o packages/nxlog.2.5.1089nupkg
#!/bin/bash
inArray () {
local e
for e in "${@:2}"; do [[ "$e" == "$1" ]] && return 0; done
return 1
}
package_ids=()
mkdir -p nuspec latest html
rm -f nuspec/*.nuspec latest/*.nuspec html/*.html
for path in nupkg/*.nupkg; do
file=${path##*/}
package=${file%.nupkg}
package_id=$(echo "$package" | sed 's/\.[0-9].*//')
package_version=$(echo "$package" | sed "s/^$package_id\.//")
unzip $path "*.nuspec"
mv "$package_id.nuspec" "nuspec/$package_id.$package_version.nuspec"
xsltproc package-html.xslt "nuspec/$package_id.$package_version.nuspec" > html/$package.html
if ! inArray $package_id "${package_ids[@]}"; then
package_ids+=($package_id)
fi
done
xsltproc packages-manifest.xslt nuspec/*.nuspec | sed ':a;N;$!ba;s/<\/feed>\n<feed[^>]*>\n//g' > Packages
echo > .htaccess
for package_id in "${package_ids[@]}"; do
latest=$(ls nupkg/$package_id.*.nupkg | sort --version-sort -r | head -1)
echo RedirectMatch 302 ^package/$package_id/?$ $latest >> .htaccess
file=${latest##*/}
package=${file%.nupkg}
package_version=$(echo "$package" | sed "s/^$package_id\.//")
cp nuspec/$package_id.$package_version.nuspec latest/
done
xsltproc packages-manifest.xslt latest/*.nuspec | sed ':a;N;$!ba;s/<\/feed>\n<feed[^>]*>\n//g' | xsltproc packages-html.xslt - > html/index.html
rm -f nuspec/*.nuspec latest/*.nuspec
<?xml version="1.0" ?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
<xsl:template match="/">
<html lang="en" class="static">
<head>
<link href="style.css" rel="stylesheet" />
<xsl:for-each select="p:package/p:metadata" xmlns:p="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<title>
<xsl:value-of select="p:title"/>
<xsl:value-of select="p:version"/>
</title>
</xsl:for-each>
<xsl:for-each select="p:package/p:metadata" xmlns:p="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<title>
<xsl:value-of select="p:title"/>
<xsl:value-of select="p:version"/>
</title>
</xsl:for-each>
</head>
<body>
<div id="content-wrapper">
<header class="main">
<!--
<div id="logo"></div>
-->
</header>
<nav class="main"></nav>
<div id="body" role="main">
<xsl:for-each select="p:package/p:metadata" xmlns:p="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<div id="sideColumn">
<xsl:element name="img">
<xsl:attribute name="class">logo</xsl:attribute>
<xsl:attribute name="src"><xsl:value-of select="p:iconUrl"/></xsl:attribute>
<xsl:attribute name="alt"><xsl:value-of select="p:title"/> icon</xsl:attribute>
</xsl:element>
<nav>
<ul class="links">
<li>
<xsl:element name="a">
<xsl:attribute name="href"><xsl:value-of select="p:projectUrl"/></xsl:attribute>
<xsl:attribute name="title">
Visit the software site to learn more about the software this package installs. Nuspec reference: <projectUrl><xsl:value-of select="p:projectUrl"/></projectUrl>
</xsl:attribute>
Software Site
</xsl:element>
</li>
<li><span>Package Specific</span></li>
<li>
<xsl:element name="a">
<xsl:attribute name="href">../package/<xsl:value-of select="p:id"/>/<xsl:value-of select="p:version"/></xsl:attribute>
<xsl:attribute name="title">Download the raw nupkg file.</xsl:attribute>
Download
</xsl:element>
</li>
</ul>
</nav>
</div>
<div id="mainColumn" role="main">
<div class="package-page">
<div class="hgroup page-heading">
<xsl:element name="h1">
<xsl:attribute name="title">Nuspec reference: <title><xsl:value-of select="p:title"/></title></xsl:attribute>
<xsl:value-of select="p:title"/>
</xsl:element>
<xsl:element name="h2">
<xsl:attribute name="title">Nuspec reference: <version><xsl:value-of select="p:version"/></version></xsl:attribute>
<xsl:value-of select="p:version"/>
</xsl:element>
</div>
<!--
<a name="description" id="description" title="Nuspec reference: description"></a>
-->
<p><xsl:value-of select="p:description"/></p>
<p>To install <xsl:value-of select="p:id"/>, run the following command from the command line or from PowerShell: </p>
<div class="nuget-badge">
<p><code><span>C:\&gt; </span>choco install <xsl:value-of select="p:id"/></code></p>
</div>
<p>To upgrade <xsl:value-of select="p:id"/>, run the following command from the command line or from PowerShell: </p>
<div class="nuget-badge">
<p><code><span>C:\&gt; </span>choco upgrade <xsl:value-of select="p:id"/></code></p>
</div>
<!--
<a name="authors" id="authors"></a>
-->
<h3 title="Software authors. Nuspec reference: authors | Specified as comma-separated">Sofware Author(s)</h3>
<ul class="authors">
<li><xsl:value-of select="p:authors"/></li>
</ul>
<div class="clear-fix"><!--Sad Panda--></div>
<!--
<a name="tags" id="tags"></a>
-->
<h3 title="Nuspec reference: tags | Specified as space-separated">Tags</h3>
<ul class="tags">
<li><xsl:value-of select="p:tags"/></li>
</ul>
<div class="clear-fix"><!--Sad Panda--></div>
<!--
<a name="releasenotes" id="releasenotes"></a>
-->
<h3 title="Nuspec reference: releaseNotes">Release Notes</h3>
<p><xsl:value-of select="p:releaseNotes"/></p>
<div class="clear-fix"><!--Sad Panda--></div>
</div>
</div>
</xsl:for-each>
<xsl:for-each select="p:package/p:metadata" xmlns:p="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<div id="sideColumn">
<xsl:element name="img">
<xsl:attribute name="class">logo</xsl:attribute>
<xsl:attribute name="src"><xsl:value-of select="p:iconUrl"/></xsl:attribute>
<xsl:attribute name="alt"><xsl:value-of select="p:title"/> icon</xsl:attribute>
</xsl:element>
<nav>
<ul class="links">
<li>
<xsl:element name="a">
<xsl:attribute name="href"><xsl:value-of select="p:projectUrl"/></xsl:attribute>
<xsl:attribute name="title">
Visit the software site to learn more about the software this package installs. Nuspec reference: <projectUrl><xsl:value-of select="p:projectUrl"/></projectUrl>
</xsl:attribute>
Software Site
</xsl:element>
</li>
<li><span>Package Specific</span></li>
<li>
<xsl:element name="a">
<xsl:attribute name="href">../package/<xsl:value-of select="p:id"/>/<xsl:value-of select="p:version"/></xsl:attribute>
<xsl:attribute name="title">Download the raw nupkg file.</xsl:attribute>
Download
</xsl:element>
</li>
</ul>
</nav>
</div>
<div id="mainColumn" role="main">
<div class="package-page">
<div class="hgroup page-heading">
<xsl:element name="h1">
<xsl:attribute name="title">Nuspec reference: <title><xsl:value-of select="p:title"/></title></xsl:attribute>
<xsl:value-of select="p:title"/>
</xsl:element>
<xsl:element name="h2">
<xsl:attribute name="title">Nuspec reference: <version><xsl:value-of select="p:version"/></version></xsl:attribute>
<xsl:value-of select="p:version"/>
</xsl:element>
</div>
<!--
<a name="description" id="description" title="Nuspec reference: description"></a>
-->
<p><xsl:value-of select="p:description"/></p>
<p>To install <xsl:value-of select="p:id"/>, run the following command from the command line or from PowerShell: </p>
<div class="nuget-badge">
<p><code><span>C:\&gt; </span>choco install <xsl:value-of select="p:id"/></code></p>
</div>
<p>To upgrade <xsl:value-of select="p:id"/>, run the following command from the command line or from PowerShell: </p>
<div class="nuget-badge">
<p><code><span>C:\&gt; </span>choco upgrade <xsl:value-of select="p:id"/></code></p>
</div>
<!--
<a name="authors" id="authors"></a>
-->
<h3 title="Software authors. Nuspec reference: authors | Specified as comma-separated">Sofware Author(s)</h3>
<ul class="authors">
<li><xsl:value-of select="p:authors"/></li>
</ul>
<div class="clear-fix"><!--Sad Panda--></div>
<!--
<a name="tags" id="tags"></a>
-->
<h3 title="Nuspec reference: tags | Specified as space-separated">Tags</h3>
<ul class="tags">
<li><xsl:value-of select="p:tags"/></li>
</ul>
<div class="clear-fix"><!--Sad Panda--></div>
<!--
<a name="releasenotes" id="releasenotes"></a>
-->
<h3 title="Nuspec reference: releaseNotes">Release Notes</h3>
<p><xsl:value-of select="p:releaseNotes"/></p>
<div class="clear-fix"><!--Sad Panda--></div>
</div>
</div>
</xsl:for-each>
<div class="clear-fix"><!--Sad Panda--></div>
</div>
</div>
<!--
<div id="layout-footer" class="group">
<footer id="footer"></footer>
</div>
-->
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" ?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
<xsl:template match="/">
<html lang="en" class="static">
<head>
<link href="style.css" rel="stylesheet" />
</head>
<body>
<div id="content-wrapper">
<header class="main">
<!--
<div id="logo"></div>
-->
</header>
<nav class="main"></nav>
<div id="body" role="main">
<xsl:for-each select="//a:entry" xmlns:a="http://www.w3.org/2005/Atom" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices" xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata">
<ol id="searchResults">
<li>
<section class="package ">
<div class="side">
<xsl:element name="a">
<xsl:attribute name="href"><xsl:value-of select="a:id"/>.<xsl:value-of select="m:properties/d:Version"/>.html</xsl:attribute>
<xsl:attribute name="title">View more about <xsl:value-of select="a:id"/></xsl:attribute>
<xsl:element name="img">
<xsl:attribute name="src"><xsl:value-of select="m:properties/d:IconUrl"/></xsl:attribute>
<xsl:attribute name="alt"><xsl:value-of select="a:id"/> icon</xsl:attribute>
<xsl:attribute name="style">width: 50px; height: 50px;</xsl:attribute>
</xsl:element>
</xsl:element>
</div>
<div class="main">
<header>
<div class="nuget-badge-small">
<code><span>C:\&gt; </span>choco install <xsl:value-of select="a:id"/></code>
</div>
<h1>
<xsl:element name="a">
<xsl:attribute name="href"><xsl:value-of select="a:id"/>.<xsl:value-of select="m:properties/d:Version"/>.html</xsl:attribute>
<xsl:value-of select="a:title"/>
<xsl:text disable-output-escaping="yes"><![CDATA[&nbsp;]]></xsl:text>
<xsl:value-of select="m:properties/d:Version"/>
</xsl:element>
</h1>
<h2>By:</h2>
<ul class="owners">
<!--
<li><a href="/profiles/ferventcoder" title="ferventcoder">ferventcoder</a></li>
-->
</ul>
</header>
<p><xsl:value-of select="a:summary"/></p>
<footer>
<div class="tags">
<h2>Tags</h2>
<ul class="tags">
<!--<li><a href="/packages?q=nuget" title="Search for nuget">nuget</a></li>-->
</ul>
</div>
</footer>
</div>
</section>
</li>
</ol>
</xsl:for-each>
<div class="clear-fix"><!--Sad Panda--></div>
</div>
</div>
<!--
<div id="layout-footer" class="group">
<footer id="footer"></footer>
</div>
-->
</body>
</html>
</xsl:template>
</xsl:stylesheet>
<?xml version="1.0" ?>
<xsl:stylesheet
version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices"
xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata"
xmlns="http://www.w3.org/2005/Atom">
<xsl:output method="xml" indent="yes" omit-xml-declaration="yes" />
<xsl:template match="/">
<feed>
<xsl:for-each select="p:package/p:metadata" xmlns:p="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd">
<xsl:element name="entry">
<xsl:element name="id"><xsl:value-of select="p:id"/></xsl:element>
<xsl:element name="title">
<xsl:attribute name="type">text</xsl:attribute>
<xsl:value-of select="p:title"/>
</xsl:element>
<xsl:element name="summary">
<xsl:attribute name="type">text</xsl:attribute>
<xsl:value-of select="p:summary"/>
</xsl:element>
<xsl:element name="author">
<xsl:element name="name"><xsl:value-of select="p:authors"/></xsl:element>
</xsl:element>
<xsl:element name="link">
<xsl:attribute name="rel">edit-media</xsl:attribute>
<xsl:attribute name="title">V2FeedPackage</xsl:attribute>
<xsl:attribute name="href">Packages(Id='<xsl:value-of select="p:id"/>',Version='<xsl:value-of select="p:version"/>')/$value</xsl:attribute>
</xsl:element>
<xsl:element name="link">
<xsl:attribute name="rel">edit</xsl:attribute>
<xsl:attribute name="title">V2FeedPackage</xsl:attribute>
<xsl:attribute name="href">Packages(Id='<xsl:value-of select="p:id"/>',Version='<xsl:value-of select="p:version"/>')</xsl:attribute>
</xsl:element>
<xsl:element name="category">
<xsl:attribute name="term">NuGetGallery.V2FeedPackage</xsl:attribute>
<xsl:attribute name="scheme">http://schemas.microsoft.com/ado/2007/08/dataservices/scheme</xsl:attribute>
</xsl:element>
<xsl:element name="content">
<xsl:attribute name="type">application/zip</xsl:attribute>
<xsl:attribute name="src">http://chocolatey.org/api/v2/package/<xsl:value-of select="p:id"/>/<xsl:value-of select="p:version"/></xsl:attribute>
</xsl:element>
<m:properties xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices">
<d:Version><xsl:value-of select="p:version"/></d:Version>
<d:Copyright><xsl:value-of select="p:copyright"/></d:Copyright>
<!--
<d:Created m:type="Edm.DateTime"></d:Created>
<d:Dependencies></d:Dependencies>
-->
<d:Description><xsl:value-of select="p:description"/></d:Description>
<!--
<d:DownloadCount m:type="Edm.Int32"></d:DownloadCount>
-->
<d:GalleryDetailsUrl>http://gallery-host/packages/<xsl:value-of select="p:id"/>/<xsl:value-of select="p:version"/></d:GalleryDetailsUrl>
<d:IconUrl><xsl:value-of select="p:iconUrl"/></d:IconUrl>
<!--
<d:IsLatestVersion m:type="Edm.Boolean"></d:IsLatestVersion>
<d:IsAbsoluteLatestVersion m:type="Edm.Boolean"></d:IsAbsoluteLatestVersion>
<d:IsPrerelease m:type="Edm.Boolean"></d:IsPrerelease>
<d:Language m:null="true"></d:Language>
<d:Published m:type="Edm.DateTime"></d:Published>
-->
<d:LicenseUrl><xsl:value-of select="p:licenseUrl"/></d:LicenseUrl>
<!--
<d:PackageHash></d:PackageHash>
<d:PackageHashAlgorithm></d:PackageHashAlgorithm>
<d:PackageSize m:type="Edm.Int64"></d:PackageSize>
-->
<d:ProjectUrl><xsl:value-of select="p:projectUrl"/></d:ProjectUrl>
<!--
<d:ProjectSourceUrl m:null="true"></d:ProjectSourceUrl>
<d:PackageSourceUrl m:null="true"></d:PackageSourceUrl>
<d:DocsUrl m:null="true"></d:DocsUrl>
<d:MailingListUrl m:null="true"></d:MailingListUrl>
<d:BugTrackerUrl m:null="true"></d:BugTrackerUrl>
-->
<d:ReportAbuseUrl>http://gallery-host/package/ReportAbuse/<xsl:value-of select="p:id"/>/<xsl:value-of select="p:version"/></d:ReportAbuseUrl>
<d:ReleaseNotes><xsl:value-of select="p:releaseNotes"/></d:ReleaseNotes>
<!--
<d:PackageStatus></d:PackageStatus>
<d:PackageSubmittedStatus m:null="true"></d:PackageSubmittedStatus>
<d:RequireLicenseAcceptance m:type="Edm.Boolean"></d:RequireLicenseAcceptance>
-->
<d:Tags xml:space="preserve"><xsl:value-of select="p:tags"/></d:Tags>
<d:Title><xsl:value-of select="p:title"/></d:Title>
<!--
<d:VersionDownloadCount m:type="Edm.Int32"></d:VersionDownloadCount>
-->
</m:properties>
</xsl:element>
</xsl:for-each>
<xsl:for-each select="p:package/p:metadata" xmlns:p="http://schemas.microsoft.com/packaging/2011/08/nuspec.xsd">
<xsl:element name="entry">
<xsl:element name="id"><xsl:value-of select="p:id"/></xsl:element>
<xsl:element name="title">
<xsl:attribute name="type">text</xsl:attribute>
<xsl:value-of select="p:title"/>
</xsl:element>
<xsl:element name="summary">
<xsl:attribute name="type">text</xsl:attribute>
<xsl:value-of select="p:summary"/></xsl:element>
<xsl:element name="author">
<xsl:element name="name"><xsl:value-of select="p:authors"/></xsl:element>
</xsl:element>
<xsl:element name="link">
<xsl:attribute name="rel">edit-media</xsl:attribute>
<xsl:attribute name="title">V2FeedPackage</xsl:attribute>
<xsl:attribute name="href">Packages(Id='<xsl:value-of select="p:id"/>',Version='<xsl:value-of select="p:version"/>')/$value</xsl:attribute>
</xsl:element>
<xsl:element name="link">
<xsl:attribute name="rel">edit</xsl:attribute>
<xsl:attribute name="title">V2FeedPackage</xsl:attribute>
<xsl:attribute name="href">Packages(Id='<xsl:value-of select="p:id"/>',Version='<xsl:value-of select="p:version"/>')</xsl:attribute>
</xsl:element>
<xsl:element name="category">
<xsl:attribute name="term">NuGetGallery.V2FeedPackage</xsl:attribute>
<xsl:attribute name="scheme">http://schemas.microsoft.com/ado/2007/08/dataservices/scheme</xsl:attribute>
</xsl:element>
<xsl:element name="content">
<xsl:attribute name="type">application/zip</xsl:attribute>
<xsl:attribute name="src">http://chocolatey.org/api/v2/package/<xsl:value-of select="p:id"/>/<xsl:value-of select="p:version"/></xsl:attribute>
</xsl:element>
<m:properties xmlns:m="http://schemas.microsoft.com/ado/2007/08/dataservices/metadata" xmlns:d="http://schemas.microsoft.com/ado/2007/08/dataservices">
<d:Version><xsl:value-of select="p:version"/></d:Version>
<d:Copyright><xsl:value-of select="p:copyright"/></d:Copyright>
<!--
<d:Created m:type="Edm.DateTime"></d:Created>
<d:Dependencies></d:Dependencies>
-->
<d:Description><xsl:value-of select="p:description"/></d:Description>
<!--
<d:DownloadCount m:type="Edm.Int32"></d:DownloadCount>
-->
<d:GalleryDetailsUrl>http://gallery-host/packages/<xsl:value-of select="p:id"/>/<xsl:value-of select="p:version"/></d:GalleryDetailsUrl>
<d:IconUrl><xsl:value-of select="p:iconUrl"/></d:IconUrl>
<!--
<d:IsLatestVersion m:type="Edm.Boolean"></d:IsLatestVersion>
<d:IsAbsoluteLatestVersion m:type="Edm.Boolean"></d:IsAbsoluteLatestVersion>
<d:IsPrerelease m:type="Edm.Boolean"></d:IsPrerelease>
<d:Language m:null="true"></d:Language>
<d:Published m:type="Edm.DateTime"></d:Published>
-->
<d:LicenseUrl><xsl:value-of select="p:licenseUrl"/></d:LicenseUrl>
<!--
<d:PackageHash></d:PackageHash>
<d:PackageHashAlgorithm></d:PackageHashAlgorithm>
<d:PackageSize m:type="Edm.Int64"></d:PackageSize>
-->
<d:ProjectUrl><xsl:value-of select="p:projectUrl"/></d:ProjectUrl>
<!--
<d:ProjectSourceUrl m:null="true"></d:ProjectSourceUrl>
<d:PackageSourceUrl m:null="true"></d:PackageSourceUrl>
<d:DocsUrl m:null="true"></d:DocsUrl>
<d:MailingListUrl m:null="true"></d:MailingListUrl>
<d:BugTrackerUrl m:null="true"></d:BugTrackerUrl>
-->
<d:ReportAbuseUrl>http://gallery-host/package/ReportAbuse/<xsl:value-of select="p:id"/>/<xsl:value-of select="p:version"/></d:ReportAbuseUrl>
<d:ReleaseNotes><xsl:value-of select="p:releaseNotes"/></d:ReleaseNotes>
<!--
<d:PackageStatus></d:PackageStatus>
<d:PackageSubmittedStatus m:null="true"></d:PackageSubmittedStatus>
<d:RequireLicenseAcceptance m:type="Edm.Boolean"></d:RequireLicenseAcceptance>
-->
<d:Tags xml:space="preserve"><xsl:value-of select="p:tags"/></d:Tags>
<d:Title><xsl:value-of select="p:title"/></d:Title>
<!--
<d:VersionDownloadCount m:type="Edm.Int32"></d:VersionDownloadCount>
-->
</m:properties>
</xsl:element>
</xsl:for-each>
</feed>
</xsl:template>
</xsl:stylesheet>
/* Color Palette
**************************************************************
Background: #fff
Borders: #ccc
Text: #666
Main Accent: #39922C
Links: #0071BC
*************************************************************/
/* Resets
***************************************************************/
html, body { height: 100%; margin: 0; padding: 0;}
body {
font-size: .85em;
color: #333;
background:url('../Content/Images/headerbackground.png') repeat-x top left #fff;
font-family:"Segoe UI", "Trebuchet MS", Verdana, Helvetica, Sans-Serif;
}
section { margin-bottom: 20px; }
/* Headings */
h1,h2,h3,h4,h5,h6 { font-weight: normal; margin:.6em 0;}
h1 { font-size: 2.6em; }
section h1 { font-size: 2.1em; margin-bottom: 2px;}
h2 { font-size: 2em; margin-bottom: 2px;}
h3 { font-size: 1.6em; margin-bottom: 0; }
h4 { font-size: 1.4em; }
h5 { font-size: 1.1em; }
h6 { font-size: 1em; }
h1 img, h2 img, h3 img,
h4 img, h5 img, h6 img {
margin: 0;
}
.hgroup h1,
.hgroup h2 {
margin: 0;
padding: 0;
}
/* Aside Headings */
aside h1 { font-size: 1.154em; }
aside h2 { font-size: 1.077em; }
aside h3, aside h4, aside h5, aside h6 { font-size: 1em; }
/* Lists */
li ul, li ol { margin:0 }
dl { margin: 0 0 1.5em 0; }
dl dt { font-weight: bold; }
dd { margin-left: 1.5em;}
/* Text elements */
p { margin: 0 0 1em; line-height: 1.538em; }
p img.left { float: left; margin: 0.923em 0.923em 0.923em 0; padding: 0; }
p img.right { float: right; margin: 0.923em 0 0.923em 0.923em; }
a { color:#bc7100; text-decoration: none; outline: none; }
a:hover { text-decoration: underline; }
a img { border: none; }
blockquote { margin: 0.923em; color: #666; font-style: italic; }
strong { font-weight: bold; }
em,dfn { font-style: italic; }
dfn { font-weight: bold; }
sup, sub { line-height: 0; }
abbr,
acronym { border-bottom: 1px dotted #666; }
address { margin: 0 0 0.923em; font-style: italic; }
del { color:#666; }
pre { margin: 0.923em 0; }
pre,code,tt { font: 1em 'andale mono', 'lucida console', monospace; line-height: 1.462em; }
header, footer,
nav, section { display: block; }
#content-wrapper {
width: 960px;
min-width: 960px;
margin: 0 auto;
min-height: 100%;
}
/* General */
.message {
background-color: #eff7fa;
border: solid 1px;
color: #caa452;
font-size: 1.3em;
padding: 10px;
}
.error {
background-color: #fbe3e4;
color: #c13a3f;
font-weight: 600;
}
.warning {
background-color: #fff7c4;
color: #ff9600;
}
.prerelease-message,
.not-latest-message,
.app-or-tool-message {
border-radius: 0 0 5px 5px;
-moz-border-radius: 0 0 5px 5px;
-webkit-border-radius: 0 0 5px 5px;
border: 1px solid;
border-top: none;
font-size: 1.5em;
margin-top: -20px;
padding: 10px;
text-align: center;
}
.prerelease-message {
background-color: #fff7c4;
border-color: #ff9600;
color: #ff9600;
}
.not-latest-message {
background-color: #eff7fa;
border-color: #caa452;
color: #caa452;
}
.app-or-tool-message
{
background-color: #eeeeee;
color: #474334;
border-top: 1px solid;
border-color: #bbb9b6;
margin-top: -10px;
border-radius: 5px 5px 5px 5px;
-moz-border-radius: 5px 5px 5px 5px;
-webkit-border-radius: 5px 5px 5px 5px;
font-size: 1.1em;
}
/* Header */
header.main {
height: 95px;
}
/* Navigation */
nav.main {
clear:both;
height: 42px;
margin-top: 10px;
margin-bottom: 1px;
}
nav.main ul {
padding: 0px;
margin: 0px;
}
nav.main ul li {
display: block;
float: left;
height: 42px;
}
nav.main ul li.current a {
background-color: #f7f1e4;
border: 1px solid #f5f2eb;
border-top: 1px solid #fff;
border-bottom: none;
color: #195670;
height: 46px;
line-height: 44px;
position: relative;
text-decoration: none;
top: -4px;
}
nav.main ul a {
/*color: #fff;*/
display: block;
font-size: 1.2em;
height: 42px;
line-height: 44px;
margin: 0 5px;
padding: 0 10px;
text-decoration: none;
/*CSS3 properties*/
border-radius: 4px 4px 0 0;
-moz-border-radius: 4px 4px 0 0;
-webkit-border-radius: 4px 4px 0 0;
}
nav.main ul a:hover {
background-color: #3c3d44;
color: #fff;
text-decoration: none;
}
/* Search */
#searchBox {
background-color: #fff;
border: 0px;
float: right;
margin-top: 7px;
height: 32px;
padding-left: 5px;
padding-right: 4px;
vertical-align: top;
/*CSS3 properties*/
border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
}
#searchBoxInput {
border: 0px;
color: #333;
font-size: 20px;
height: 30px;
line-height: 30px;
outline: none;
padding: 0;
width: 160px;
}
#searchBoxSubmit {
border: none;
background-color: #fff;
background-image: url("../Content/Images/searchbutton.png");
cursor: pointer;
height: 27px;
margin-left: 0;
text-indent: -9999px;
vertical-align:bottom;
width: 27px;
/*CSS3 properties*/
border-radius: 0 4px 4px 0;
-moz-border-radius: 0 4px 4px 0;
-webkit-border-radius: 0 4px 4px 0;
}
/* On Page Search */
#pageSearchBox {
background-color: #fff;
border: 1px solid #333;
margin-top: 7px;
height: 32px;
padding-left: 5px;
padding-right: 4px;
vertical-align: top;
width: 300px;
/*CSS3 properties*/
border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
}
#pageSearchBox #searchBoxInput {
width: 265px;
}
/* Logo */
#logo {
float:left;
padding: 20px 20px 0 0;
}
#logo a {
background: url(../Content/Images/nugetlogo.png) no-repeat;
display: block;
height: 75px;
padding: 0;
margin: 0;
text-indent: -9999px;
width: 360px;
}
/* User Info */
.user-display {
background: url(../Content/Images/usericonwhite.png) no-repeat;
float:right;
font-weight: 600;
margin-top: 30px;
padding-left: 15px;
padding-right: 7px;
}
.user-display a {
color: #fff;
margin-left: 10px;
}
.user-display a:hover {
text-decoration: underline;
}
/* Body */
#body {
padding-bottom: 175px;
padding-top: 20px;
}
#sideColumn {
float: left;
width: 20%;
}
#mainColumn {
float: right;
margin-bottom: 20px;
width: 77%;
}
#mainColumn > h1,
.page-heading {
border-bottom: solid 1px #ccc;
margin: 0 0 20px 0;
padding-bottom: 10px;
}
div.page-heading h1,
div.page-heading h2 {
display: inline;
}
div.page-heading h2 {
padding-left: 7px;
}
/* Featured */
.featured {
background-color: rgb(246, 246, 246);
border: solid 1px #dedede;
border-radius: 3px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
margin: 10px auto;
padding: 20px 10px 60px 10px;
}
.featured div {
float: left;
margin-right: 5px;
width: 410px;
}
.featured div h1 {
font-size: 1.85em;
margin-top: 0;
padding-top: 0;
}
.featured div p {
font-size: 1.5em;
line-height: 1.4em;
}
.featured div p.sub {
font-size: 1.4em;
line-height: 1.3em;
}
.featured div a.install {
background-color: #aa8545;
background-image: -ms-linear-gradient(top, #aa8545 0%, #836737 100%);
background-image: -o-linear-gradient(top, #aa8545 0%, #836737 100%);
background-image: -webkit-linear-gradient(top, #aa8545 0%, #836737 100%);
background-image: linear-gradient(top, #aa8545 0%, #836737 100%);
border: solid 1px #836737;
border-radius: 4px;
-moz-border-radius: 4px;
-webkit-border-radius: 4px;
box-shadow: inset 0px 0px 1px rgba(255,255,255,1), 1px 1px 1px rgba(0,0,0,0.3);
color: #fff;
display: block;
font-size: 2em;
line-height: 2em;
margin-top: 25px;
text-align: center;
width: 95%;
}
.featured div a.install:hover {
background-color: #836737;
background-image: -ms-linear-gradient(top, #c8a364 0%, #60471d 100%);
background-image: -o-linear-gradient(top, #c8a364 0%, #60471d 100%);
background-image: -webkit-linear-gradient(top, #c8a364 0%, #60471d 100%);
background-image: linear-gradient(top, #c8a364 0%, #60471d 100%);
border-color: #aa8545;
text-decoration: none;
}
/* Aggregate Stats */
.aggstats {
background: #555;
display: none;
}
.aggstats .stat {
display: inline-block;
*zoom: 1;
color: #bbb;
font-weight: bold;
text-align: center;
padding: 0.5em 0;
width: 33%;
margin: 0;
}
.aggstats .num {
font-size: 4em;
color: #f9f9f9;
font-family: monospace;
display: block;
line-height: 0.9em;
}
.aggstats .num > span {
position: relative;
}
/* Account/Actions */
#actions h1 {
font-size:2em;
}
#actions ul {
margin: 0;
padding: 0;
}
#actions li {
list-style: none;
}
#actions li h2 {
font-size: 1.5em;
}
#actions li#uploadPackage h2 {
background: url("Images/uploadPackage.png") no-repeat 0 50%;
font-size: 1.7em;
padding-left: 20px;
}
#actions li#changePassword h2 {
background: url("Images/changePassword.png") no-repeat 0 50%;
padding-left: 20px;
}
#actions li#managePackages h2 {
background: url("Images/managePackages.png") no-repeat 0 50%;
padding-left: 20px;
}
#actions li#editProfile h2 {
background: url("Images/editProfile.png") no-repeat 0 50%;
padding-left: 20px;
}
/* Account/API Key */
#apiKey h1 {
font-size:2em;
}
#apiKey pre {
display:block;
color: #c0c0c0;
border: 2px solid #c0c0c0;
padding: 15px;
margin: 15px 0 0;
background-color: #202020;
overflow: auto;
font: 1.2em 'andale mono', 'lucida console', monospace;
line-height: 1.5em;
}
#generateKey {
position: relative;
}
#generateKey h2 {
font-size: 1.7em;
}
#generateKey #key {
font-size: 1.7em;
margin-bottom: 0;
}
#overlayWrapper {
background-color: #eff7fa;
border: solid 1px;
color: #caa452;
cursor: pointer;
font-size: 2em;
height: 240px;
left: 0;
line-height: 220px;
position: absolute;
text-align: center;
top: 0;
width: 100%;
}
#generateKey .form input[type="submit"] {
width: auto;
}
/* Sequence Steps */
.sequence {
list-style-position: inside;
letter-spacing: 1px;
margin: 0;
padding: 0;
}
.sequence li {
border: solid 1px #333;
box-shadow: inset 0px 0px 1px rgba(255,255,255,1), 1px 1px 1px rgba(0,0,0,0.3);
color: #333;
float: left;
height: 35px;
line-height: 35px;
margin: 0 30px 20px 0;
padding: 0 20px;
width: auto;
}
.sequence li.past,
.sequence li.current {
background-color: #aa8545;
background-image: -ms-linear-gradient(top, #aa8545 0%, #836737 100%);
background-image: -o-linear-gradient(top, #aa8545 0%, #836737 100%);
background-image: -webkit-linear-gradient(top, #aa8545 0%, #836737 100%);
background-image: linear-gradient(top, #aa8545 0%, #836737 100%);
border-color: #836737;
color: #fff;
}
.sequence li.current {
height: 41px;
font-weight: 600;
line-height: 41px;
margin-top: -3px;
text-decoration: underline;
}
/* Tags & Authors */
ul.tags,
ul.authors {
list-style: none;
margin: 0;
padding: 0;
}
ul.tags li,
ul.authors li {
display: inline;
padding-right: 6px;
}
/* DependencySets */
#dependencySets {
list-style: none;
margin: 0;
padding: 0;
}
#dependencySets > li > h4
{
border-bottom: solid 1px #333;
display: inline;
margin: 2px 0;
}
ul.dependencySet {
list-style: none;
margin: 5px 0 10px 0;
padding: 0;
}
ul.dependencySet li {
font-size: 1.25em;
padding-right: 6px;
}
/* Owners (maintainers) */
.owners {
list-style: none;
margin: 0;
padding: 0;
}
.owner:hover {
text-decoration: none;
}
.owner-image {
margin-right: 5px;
}
/* Package Details */
#packageDetails {
list-style: none;
padding: 0;
margin: 0;
}
#packageDetails h3 {
color: #52a4ca;
}
#packageDetails p {
margin-left: 10px;
}
/* Package Page */
.package-page h3 {
font-size: 1.75em;
margin-bottom: 6px;
margin-top: 25px;
margin: 20px 0 6px -6px;
}
/* Package page owners (maintainers) */
.package-page .owners li {
margin-bottom: 12px;
}
.package-page a.owner {
/*color: #333;*/
font-size: 1.4em;
}
/* Tags & Authors */
.package-page ul.tags li a,
.package-page ul.authors li a {
font-size: 1.25em;
}
/* Icon */
#sideColumn .logo {
display: block;
max-height: 128px;
margin: 0 0 20px 0;
max-width: 128px;
}
/* Stats */
.stat {
margin-bottom: 20px;
}
.stat-number {
font: 2.3em 'andale mono', 'lucida console', monospace;
margin: 0;
line-height: 1.4em;
letter-spacing: 1px;
}
.stat-label {
font-size: 1.25em;
line-height: 1em;
margin: -7px 0 0 5px;
}
/* Side Column Navigation */
#sideColumn nav ul {
font-size: 1.25em;
list-style: none;
margin: 0;
padding: 0;
}
#sideColumn nav ul li {
margin: 0;
padding: 0;
}
/* List Packages Page */
div.search h1 {
font-size: 2.3em;
}
div.search h2 {
font-size: 1.5em;
margin-left: 5px;
}
fieldset.search {
margin: 0;
text-align: right;
}
fieldset.search label {
display: inline;
margin-left: 10px;
}
#searchResults {
list-style: none;
margin: 0;
padding: 0;
}
/* List Package */
section.package {
border-top: 1px solid #ccc;
padding-top: 10px;
}
section.package.my-package {
background: url("Images/yourpackage.png") no-repeat 100% 0;
}
section.package.unknown-status {
background-color: #fff0f0;
}
section.package.ready {
background-color: #ddfcdd;
}
section.package.updated {
background-color: #a2c1a2;
}
section.package.waiting {
background-color: #ffead2;
}
section.package .main {
margin-left: 70px;
}
section.package header {
margin-bottom: 5px;
}
section.package h1 {
font-size: 1.75em;
margin: 0;
}
section.package h2 {
display: inline;
font-size: 1.25em;
}
section.package ul,
section.package li {
display: inline;
}
section.package ol li {
display: list-item;
}
section.package p {
line-height: 1.25em;
margin-bottom: 5px;
}
section.package .downloads {
display: inline;
font-size: 1.25em;
font-weight: 600;
}
section.package div.tags {
border-left: 1px solid #ccc;
display: inline;
margin-left: 10px;
padding-left: 10px;
}
section.package div.tags h2 {
margin-right: 5px;
}
section.package .side {
float: left;
width: 70px;
}
section.package .side img {
display: block;
margin:0 auto;
max-width: 48px;
max-height:48px;
}
section.package .moderator-side {
position: relative;
float: right;
left: -1050px;
text-align: right;
font-weight: bold;
font-size: 1.0em;
margin: 0px;
padding: 0px;
width: 0px;
}
section.package .moderator-side .ready {
color: #02a602;
}
section.package .moderator-side .updated {
color: #044604;
}
section.package .moderator-side .waiting {
color: #ffb662;
}
/* Pager */
ul.pager {
list-style: none;
font-size: 1.5em;
margin: 0;
padding:0;
text-align: center;
}
ul.pager li {
display: inline;
}
ul.pager li.previous {
border-right: solid 1px #ccc;
padding-right: 7px;
}
ul.pager li.next {
padding-left: 10px;
}
/* Sexy Table */
.sexy-table {
border-collapse: collapse;
font-size: 1.1em;
}
/* header */
.sexy-table thead tr {
border-bottom: solid 1px #333;
}
.sexy-table th {
font-size: 1.25em;
font-weight: normal;
padding: 5px 15px 0px 0px;
text-align:left;
}
/* actions */
.sexy-table th.actions {
text-indent: -9999px;
}
.sexy-table td.actions {
width: 30px;
}
/* body */
.sexy-table tbody tr {
margin-bottom: 10px;
}
.sexy-table tbody tr:hover {
background-color: #f4f5f6;
}
.sexy-table tbody tr.recommended {
font-weight: 800;
}
.sexy-table tbody td {
padding: 5px 25px 5px 0;
}
.sexy-table tbody td.actions {
padding: 2px 5px;
}
/* footer */
.sexy-table tfoot {
border-bottom: solid 1px #333;
font-weight: 600;
}
.sexy-table tfoot td {
padding: 3px 0;
}
.sexy-table tfoot tr {
border-top: 2px solid #333;
}
/* NuGet Badge */
.nuget-badge code {
background-color: #202020;
border: 4px solid #c0c0c0;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
box-shadow: 2px 2px 3px #6e6e6e;
color: #e2e2e2;
display:block;
font: 1.5em 'andale mono', 'lucida console', monospace;
line-height: 1.5em;
overflow: auto;
padding: 15px;
}
.nuget-badge code span {
-webkit-touch-callout: none;
-webkit-user-select: none;
-khtml-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
.nuget-badge-small code {
background-color: #202020;
border: 4px solid #c0c0c0;
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
box-shadow: 2px 2px 3px #6e6e6e;
color: #e2e2e2;
display: inline-block;
font: 1.25em consolas, 'andale mono', 'lucida console', monospace;
line-height: 0.90em;
overflow: auto;
padding: 15px;
float:right;
width: 450px;
}
/* Forms */
#unlist-form {
margin: 20px;
padding: 10px;
border: solid 1px #ccc;
}
fieldset.form {
border: none;
clear: both;
padding: 0;
}
fieldset.form legend {
display: none;
}
.form-field {
margin-bottom: 10px;
position: relative;
}
.form-field label {
color: #52a4ca;
display: block;
font-size: 1.25em;
margin-bottom: 5px;
}
.form-field label.checkbox {
display: inline;
}
.form-field select {
color: #7f8c7d;
font-size: 1.25em;
padding: 2px;
}
.form-field textarea,
.form-field input[type="text"],
.form-field input[type="file"],
.form-field input[type="password"] {
background: #fff url("../content/images/inputBackground.png") repeat-x;
border: solid 1px #ccc;
color: #7f8c7d;
font-size: 1.25em;
padding: 5px 0 5px 10px;
width: 300px;
vertical-align: middle;
}
.form-field textarea {
font-size: 1em;
height: 200px;
padding-top: 5px;
}
.form-field input[data-val-required],
.form-field textarea[data-val-required] {
border-left: solid 5px #caa452;
}
.form-field input[type="checkbox"]
{
border-left: none;
}
.form-field input.input-validation-error,
.form-field textarea.input-validation-error {
border-left: solid 5px #ca5252;
}
/* flyout Text */
.field-hint-message,
.field-validation-error {
font-size: 1em;
left: 330px;
line-height: 1.2em;
padding: 5px;
position: absolute;
top: 30px;
width: 400px;
z-index: 550;
}
.field-hint-message {
display: none;
background-color: #eff7fa;
border: solid 1px #52a4ca;
}
.field-validation-error {
display: block;
background-color: #fbe3e4;
border: solid 1px #c13a3f;
}
.form-field input:focus ~ .field-hint-message {
display: block;
}
input:focus ~ .field-validation-error ~ .field-hint-message {
display: none;
}
.form input[type="submit"] {
background-color: #aa8545;
background-image: -ms-linear-gradient(top, #aa8545 0%, #836737 100%);
background-image: -o-linear-gradient(top, #aa8545 0%, #836737 100%);
background-image: -webkit-linear-gradient(top, #aa8545 0%, #836737 100%);
background-image: linear-gradient(top, #aa8545 0%, #836737 100%);
border: solid 1px #836737;
box-shadow: inset 0px 0px 1px rgba(255,255,255,1), 1px 1px 1px rgba(0,0,0,0.3);
color: #fff;
cursor: pointer;
font-size: 1.25em;
font-weight: 500;
text-decoration: none;
width: 100px;
margin: 0 10px 0 0;
}
.form input[type="submit"]:hover {
background-color: #307A25;
background-image: -ms-linear-gradient(top, #307A25 0%, #2C9E1B 100%);
background-image: -o-linear-gradient(top, #307A25 0%, #2C9E1B 100%);
background-image: -webkit-linear-gradient(top, #307A25 0%, #2C9E1B 100%);
background-image: linear-gradient(top, #307A25 0%, #2C9E1B 100%);
border-color: #307A25;
}
.form a.cancel {
font-size: 1.25em;
}
.form input:focus {
outline: none;
}
.form img {
margin: 15px 0;
display: block;
}
.validation-summary-errors,
.field-validation-error {
color: #c13a3f;
}
.validation-summary-errors {
font-size: 1.25em;
font-weight: 600;
}
.PoliteCaptcha.editor-field .field-validation-error {
position: static;
width: 300px;
}
/* To fix alignment of generated reCAPTCHA table */
.PoliteCaptcha.editor-field table {
margin-left: -3px !important;
}
/* Errors */
.error-content {
margin-top: 80px;
}
.error-show-code {
background-image: url("../Content/Images/errorPage.png");
background-repeat: no-repeat;
height: 125px;
left: 0;
position:fixed;
top: 0;
text-indent: -9999px;
width: 220px;
}
/* Footer */
.clear-fix {
clear: both;
}
#layout-footer {
background:#f7f1e4;
color: #3e483c;
clear: both;
border-top: 1px solid #fee7d3;
padding-top: 0px;
padding-bottom: 0px;
position: relative;
margin-top: -161px;
height: 160px;
}
footer#footer {
margin: 0 auto;
width: 80%;
text-align: center;
}
footer#footer p {
padding: 0;
margin: 0;
}
footer#footer p#releaseTag {
margin: 10px 0 0 0;
}
footer#footer p#releaseTag a {
color: #3e483c;
}
footer#footer p#releaseTag a:hover {
color: #bc7100;
text-decoration: underline;
}
footer#footer ul.recommended {
width: 760px;
list-style: none;
margin: 0 auto;
padding: 0;
}
footer#footer ul.recommended li {
margin-left: 0;
float: left;
text-align: left;
padding: 10px;
width: 170px;
}
footer#footer ul.recommended li a {
display: block;
font-size: 1.3em;
}
footer#footer ul.recommended li p {
font-size: .9em;
}
footer#footer div.license {
clear: both;
font-size: .7em;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment