Skip to content

Commit 48027fe

Browse files
committed
Improve details sidebar on package info page with browsable repository URLs
1 parent c499b14 commit 48027fe

5 files changed

Lines changed: 61 additions & 34 deletions

File tree

assets/stylesheets/dashboard-theme.css

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,3 +64,8 @@
6464
.ea-dark-scheme .bg-body-secondary {
6565
--bs-secondary-bg-rgb: var(--dirigent-body-bg-subtle-rgb);
6666
}
67+
68+
.dirigent-package-sidebar div span {
69+
display: inline-block;
70+
width: 120px;
71+
}

src/Doctrine/Entity/Package.php

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,6 +343,38 @@ public function setDumpedAt(?\DateTimeInterface $dumpedAt): void
343343
$this->dumpedAt = $dumpedAt;
344344
}
345345

346+
public function getBrowsableRepositoryUrl(): ?string
347+
{
348+
if (!$this->repositoryUrl) {
349+
return null;
350+
}
351+
352+
if (Preg::isMatch('{(://|@)bitbucket.org[:/]}i', $this->repositoryUrl)) {
353+
return Preg::replace('{^(?:git@|https://|git://)bitbucket.org[:/](.+?)(?:\.git)?$}i', 'https://bitbucket.org/$1', $this->repositoryUrl);
354+
}
355+
356+
if (Preg::isMatch('{(://|@)github.com[:/]}i', $this->repositoryUrl)) {
357+
return Preg::replace('{^(git://github.com/|git@github.com:)}', 'https://github.com/', $this->repositoryUrl);
358+
}
359+
360+
if (Preg::isMatch('{(://|@)gitlab.com[:/]}i', $this->repositoryUrl)) {
361+
return Preg::replace('{^(git://gitlab.com/|git@gitlab.com:)}', 'https://gitlab.com/', $this->repositoryUrl);
362+
}
363+
364+
return $this->repositoryUrl;
365+
}
366+
367+
public function getPrettyBrowsableRepositoryUrl(): ?string
368+
{
369+
if (null === $url = $this->getBrowsableRepositoryUrl()) {
370+
return null;
371+
}
372+
373+
$url = preg_replace('#^https?://#', '', $url);
374+
375+
return $url;
376+
}
377+
346378
/**
347379
* Returns the default branch or latest version of the package.
348380
*/

src/Doctrine/Entity/Version.php

Lines changed: 5 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -512,6 +512,11 @@ public function setReleasedAt(?\DateTimeInterface $releasedAt): void
512512
$this->releasedAt = $releasedAt;
513513
}
514514

515+
public function getSourceUrl(): ?string
516+
{
517+
return $this->source['url'] ?? null;
518+
}
519+
515520
public function getDistReference(): ?string
516521
{
517522
return $this->dist['reference'] ?? null;
@@ -568,28 +573,6 @@ public function getFundingSorted(): ?array
568573
return $funding;
569574
}
570575

571-
public function getPublicUrl(): ?string
572-
{
573-
$url = $this->getHomepage() ?? $this->getSource()['url'] ?? null;
574-
575-
if (!$url || (!str_starts_with($url, 'http://') && !str_starts_with($url, 'https://'))) {
576-
return null;
577-
}
578-
579-
return $url;
580-
}
581-
582-
public function getPrettyPublicUrl(): ?string
583-
{
584-
if (null === $url = $this->getPublicUrl()) {
585-
return null;
586-
}
587-
588-
$url = preg_replace('#^https?://#', '', $url);
589-
590-
return $url;
591-
}
592-
593576
public function getMajorVersion(): int
594577
{
595578
$split = explode('.', $this->version);

src/Package/PackageMetadataResolver.php

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -154,6 +154,7 @@ private function resolveVcsRepository(Package $package): void
154154
foreach ($composerPackages as $composerPackage) {
155155
if ($composerPackage->isDefaultBranch()) {
156156
$package->setRepositoryUrl($composerPackage->getSourceUrl());
157+
return;
157158
}
158159
}
159160
}
@@ -198,6 +199,11 @@ private function updatePackage(Package $package, array $composerPackages, ?VcsDr
198199
if ($primaryVersionName) {
199200
$primaryVersion = $processedVersions[$primaryVersionName];
200201

202+
// Only update the repository URL if the package is mirrored
203+
if ($package->getMirrorRegistry()) {
204+
$package->setRepositoryUrl($primaryVersion->getSourceUrl());
205+
}
206+
201207
$this->packageRepository->updatePackageLinks($package->getId(), $primaryVersion->getId());
202208
}
203209

templates/dashboard/packages/package_info.html.twig

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -26,35 +26,36 @@
2626
<p class="mb-0">Last updated at {{ package.updatedAt|date }}</p>
2727
</div>
2828
<div class="col-md-4">
29-
<div class="bg-body-secondary px-3 py-2 rounded">
30-
{% if version.publicUrl %}
29+
<div class="dirigent-package-sidebar bg-body-secondary px-3 py-2 rounded">
30+
{% if package.browsableRepositoryUrl %}
3131
<div>
32-
<a href="{{ version.publicUrl }}">{{ version.prettyPublicUrl }}</a>
32+
<a href="{{ package.browsableRepositoryUrl }}">{{ package.prettyBrowsableRepositoryUrl }}</a>
3333
</div>
3434
{% endif %}
3535
{% if package.mirrorRegistry %}
3636
<div>Mirrored from {{ package.mirrorRegistry.name }}</div>
3737
{% endif %}
38-
{% if version.publicUrl or package.mirrorRegistry %}
38+
{% if package.browsableRepositoryUrl or package.mirrorRegistry %}
3939
<hr class="my-1">
4040
{% endif %}
4141
{% if version.homepage %}
4242
<div><a href="{{ version.homepage }}">Homepage</a></div>
4343
{% endif %}
44-
{% if version.source %}
45-
<div><a href="{{ version.source.url }}">Source</a></div>
44+
{% if version.sourceUrl %}
45+
<div><a href="{{ version.sourceUrl }}">Source</a></div>
4646
{% endif %}
47-
<div>Installs: {{ package.installations.total }}</div>
47+
{% set packageStatisticsUrl = path('dashboard_packages_statistics', {packageName: package.name}) %}
48+
<div><span><a href="{{ packageStatisticsUrl }}">Installations</a></span> {{ package.installations.total }}</div>
4849
{% set packageDependentsUrl = path('dashboard_packages_dependents', {packageName: package.name}) %}
49-
<div><a href="{{ packageDependentsUrl }}">{{ 'Dependents'|trans }}</a>: {{ dependentCount }}</div>
50+
<div><span><a href="{{ packageDependentsUrl }}">{{ 'Dependents'|trans }}</a></span> {{ dependentCount }}</div>
5051
{% set packageSuggestersUrl = path('dashboard_packages_suggesters', {packageName: package.name}) %}
51-
<div><a href="{{ packageSuggestersUrl }}">{{ 'Suggesters'|trans }}</a>: {{ suggesterCount }}</div>
52+
<div><span><a href="{{ packageSuggestersUrl }}">{{ 'Suggesters'|trans }}</a></span> {{ suggesterCount }}</div>
5253
{% set packageImplementationsUrl = path('dashboard_packages_implementations', {packageName: package.name}) %}
53-
<div><a href="{{ packageImplementationsUrl }}">{{ 'Implementations'|trans }}</a>: {{ implementationCount }}</div>
54+
<div><span><a href="{{ packageImplementationsUrl }}">{{ 'Implementations'|trans }}</a></span> {{ implementationCount }}</div>
5455
{% set packageProvidersUrl = path('dashboard_packages_providers', {packageName: package.name}) %}
55-
<div><a href="{{ packageProvidersUrl }}">{{ 'Providers'|trans }}</a>: {{ providerCount }}</div>
56+
<div><span><a href="{{ packageProvidersUrl }}">{{ 'Providers'|trans }}</a></span> {{ providerCount }}</div>
5657
{% if version.license %}
57-
<div>License: {{ version.license|join(', ') }}</div>
58+
<div><span>License</span> {{ version.license|join(', ') }}</div>
5859
{% else %}
5960
<div>No license specified</div>
6061
{% endif %}

0 commit comments

Comments
 (0)