diff --git a/app/lib/frontend/templates/package.dart b/app/lib/frontend/templates/package.dart index 170b55d147..daeb3efb7c 100644 --- a/app/lib/frontend/templates/package.dart +++ b/app/lib/frontend/templates/package.dart @@ -6,6 +6,7 @@ import 'dart:convert'; import 'package:client_data/page_data.dart'; import 'package:pana/pana.dart' show getRepositoryUrl, LicenseNames; +import 'package:pub_dev/frontend/templates/views/pkg/header.dart'; import 'package:pubspec_parse/pubspec_parse.dart' show HostedDependency; import '../../package/model_properties.dart'; @@ -217,41 +218,19 @@ String renderPkgHeader(PackagePageData data) { final package = data.package!; final showPrereleaseVersion = data.latestReleases!.showPrerelease; final showPreviewVersion = data.latestReleases!.showPreview; - final bool showUpdated = + final bool showReleases = !data.isLatestStable || showPrereleaseVersion || showPreviewVersion; final isNullSafe = data.toPackageView().tags.contains(PackageVersionTags.isNullSafe); - final nullSafeBadgeHtml = isNullSafe ? nullSafeBadgeNode().toString() : null; + final metadataHtml = packageHeaderNode( + packageName: package.name!, + publisherId: package.publisherId, + published: data.version!.created!, + isNullSafe: isNullSafe, + releases: showReleases ? data.latestReleases : null, + ).toString(); - final metadataHtml = templateCache.renderTemplate('pkg/header', { - 'publisher_id': package.publisherId, - 'publisher_url': package.publisherId == null - ? null - : urls.publisherUrl(package.publisherId!), - 'null_safe_badge_html': nullSafeBadgeHtml, - 'latest': { - 'show_updated': showUpdated, - 'show_prerelease_version': showPrereleaseVersion, - 'show_preview_version': showPreviewVersion, - 'stable_url': urls.pkgPageUrl(package.name!), - 'stable_version': data.latestReleases!.stable.version, - 'prerelease_url': showPrereleaseVersion - ? urls.pkgPageUrl(package.name!, - version: data.latestReleases!.prerelease!.version) - : null, - 'prerelease_version': showPrereleaseVersion - ? data.latestReleases!.prerelease!.version - : null, - 'preview_url': showPreviewVersion - ? urls.pkgPageUrl(package.name!, - version: data.latestReleases!.preview!.version) - : null, - 'preview_version': - showPreviewVersion ? data.latestReleases!.preview!.version : null, - }, - 'short_created': data.version!.shortCreated, - }); final pkgView = data.toPackageView(); return renderDetailHeader( titleHtml: titleContentNode( diff --git a/app/lib/frontend/templates/views/pkg/header.dart b/app/lib/frontend/templates/views/pkg/header.dart new file mode 100644 index 0000000000..e5d62738f0 --- /dev/null +++ b/app/lib/frontend/templates/views/pkg/header.dart @@ -0,0 +1,88 @@ +// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file +// for details. All rights reserved. Use of this source code is governed by a +// BSD-style license that can be found in the LICENSE file. + +import '../../../../package/models.dart'; +import '../../../../shared/urls.dart' as urls; +import '../../../../shared/utils.dart' show shortDateFormat; +import '../../../dom/dom.dart' as d; +import '../../../static_files.dart'; +import '../../package_misc.dart'; + +d.Node packageHeaderNode({ + required String packageName, + required String? publisherId, + required DateTime published, + required bool isNullSafe, + required LatestReleases? releases, +}) { + return d.fragment([ + d.text('Published '), + d.span(text: shortDateFormat.format(published)), + if (publisherId != null) ..._publisher(publisherId), + if (isNullSafe) nullSafeBadgeNode(), + if (releases != null) ..._releases(packageName, releases), + ]); +} + +Iterable _publisher(String publisherId) { + return [ + d.text('• '), + d.a( + classes: ['-pub-publisher'], + href: urls.publisherUrl(publisherId), + children: [ + d.img( + classes: ['-pub-publisher-shield'], + title: 'Published by a pub.dev verified publisher', + src: + staticUrls.getAssetUrl('/static/img/verified-publisher-blue.svg'), + ), + d.text(publisherId), + ], + ), + ]; +} + +List _releases(String package, LatestReleases releases) { + return [ + d.text('• Latest: '), + d.span( + child: d.a( + href: urls.pkgPageUrl(package), + text: releases.stable.version, + ), + ), + if (releases.showPreview) + ..._versionLink( + package: package, + version: releases.preview!.version, + label: 'Preview', + title: 'Preview is a stable version that depends on a prerelease SDK.', + ), + if (releases.showPrerelease) + ..._versionLink( + package: package, + version: releases.prerelease!.version, + label: 'Prerelease', + ), + ]; +} + +List _versionLink({ + required String package, + required String version, + required String label, + String? title, +}) { + return [ + d.text(' / '), + d.span( + attributes: title != null ? {'title': title} : null, + children: [ + d.text('$label: '), + d.a(href: urls.pkgPageUrl(package, version: version), text: version), + ], + ), + ]; +} diff --git a/app/lib/frontend/templates/views/pkg/header.mustache b/app/lib/frontend/templates/views/pkg/header.mustache deleted file mode 100644 index 13df68e9b2..0000000000 --- a/app/lib/frontend/templates/views/pkg/header.mustache +++ /dev/null @@ -1,29 +0,0 @@ -{{! Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file - for details. All rights reserved. Use of this source code is governed by a - BSD-style license that can be found in the LICENSE file. }} - -Published {{short_created}} -{{#publisher_id}} -• {{publisher_id}} -{{/publisher_id}} - -{{& null_safe_badge_html }} - -{{#latest.show_updated}} - • Latest: - {{latest.stable_version}} - {{#latest.show_preview_version}} - / - - Preview: - {{latest.preview_version}} - - {{/latest.show_preview_version}} - {{#latest.show_prerelease_version}} - / Prerelease: - {{latest.prerelease_version}} - {{/latest.show_prerelease_version}} -{{/latest.show_updated}} diff --git a/app/pubspec.lock b/app/pubspec.lock index eba25e1155..de842901e6 100644 --- a/app/pubspec.lock +++ b/app/pubspec.lock @@ -63,7 +63,7 @@ packages: name: async url: "https://pub.dartlang.org" source: hosted - version: "2.8.2" + version: "2.8.1" basics: dependency: "direct main" description: @@ -91,7 +91,7 @@ packages: name: build url: "https://pub.dartlang.org" source: hosted - version: "2.1.0" + version: "2.0.3" build_config: dependency: transitive description: @@ -119,14 +119,14 @@ packages: name: build_runner url: "https://pub.dartlang.org" source: hosted - version: "2.1.1" + version: "2.0.6" build_runner_core: dependency: transitive description: name: build_runner_core url: "https://pub.dartlang.org" source: hosted - version: "7.1.0" + version: "7.0.1" build_verify: dependency: "direct dev" description: @@ -147,7 +147,7 @@ packages: name: built_value url: "https://pub.dartlang.org" source: hosted - version: "8.1.2" + version: "8.1.1" charcode: dependency: transitive description: @@ -301,7 +301,7 @@ packages: name: grpc url: "https://pub.dartlang.org" source: hosted - version: "3.0.1" + version: "3.0.0" html: dependency: "direct main" description: @@ -623,7 +623,7 @@ packages: name: source_gen url: "https://pub.dartlang.org" source: hosted - version: "1.0.5" + version: "1.0.3" source_helper: dependency: transitive description: @@ -749,7 +749,7 @@ packages: name: vm_service url: "https://pub.dartlang.org" source: hosted - version: "7.2.0" + version: "7.1.1" watcher: dependency: "direct main" description: diff --git a/app/test/frontend/golden/pkg_activity_log_page.html b/app/test/frontend/golden/pkg_activity_log_page.html index d5e33eb8d5..e4381c8187 100644 --- a/app/test/frontend/golden/pkg_activity_log_page.html +++ b/app/test/frontend/golden/pkg_activity_log_page.html @@ -137,8 +137,9 @@

1.2.0 - / Prerelease: + / + Prerelease: 2.0.0-dev diff --git a/app/test/frontend/golden/pkg_admin_page.html b/app/test/frontend/golden/pkg_admin_page.html index d5e33eb8d5..e4381c8187 100644 --- a/app/test/frontend/golden/pkg_admin_page.html +++ b/app/test/frontend/golden/pkg_admin_page.html @@ -137,8 +137,9 @@

1.2.0 - / Prerelease: + / + Prerelease: 2.0.0-dev diff --git a/app/test/frontend/golden/pkg_changelog_page.html b/app/test/frontend/golden/pkg_changelog_page.html index 5ba3607f74..6efc197187 100644 --- a/app/test/frontend/golden/pkg_changelog_page.html +++ b/app/test/frontend/golden/pkg_changelog_page.html @@ -138,8 +138,9 @@

1.2.0 - / Prerelease: + / + Prerelease: 2.0.0-dev diff --git a/app/test/frontend/golden/pkg_example_page.html b/app/test/frontend/golden/pkg_example_page.html index 57c10c7e16..dc8355f4cf 100644 --- a/app/test/frontend/golden/pkg_example_page.html +++ b/app/test/frontend/golden/pkg_example_page.html @@ -138,8 +138,9 @@

1.2.0 - / Prerelease: + / + Prerelease: 2.0.0-dev diff --git a/app/test/frontend/golden/pkg_install_page.html b/app/test/frontend/golden/pkg_install_page.html index ad6a6dd974..d6742cd63b 100644 --- a/app/test/frontend/golden/pkg_install_page.html +++ b/app/test/frontend/golden/pkg_install_page.html @@ -138,8 +138,9 @@

1.2.0 - / Prerelease: + / + Prerelease: 2.0.0-dev diff --git a/app/test/frontend/golden/pkg_score_page.html b/app/test/frontend/golden/pkg_score_page.html index fdcf66d8ca..59e08d5eda 100644 --- a/app/test/frontend/golden/pkg_score_page.html +++ b/app/test/frontend/golden/pkg_score_page.html @@ -138,8 +138,9 @@

1.2.0 - / Prerelease: + / + Prerelease: 2.0.0-dev diff --git a/app/test/frontend/golden/pkg_show_page.html b/app/test/frontend/golden/pkg_show_page.html index c49939912c..7f167be6d8 100644 --- a/app/test/frontend/golden/pkg_show_page.html +++ b/app/test/frontend/golden/pkg_show_page.html @@ -138,8 +138,9 @@

1.2.0 - / Prerelease: + / + Prerelease: 2.0.0-dev diff --git a/app/test/frontend/golden/pkg_show_page_publisher.html b/app/test/frontend/golden/pkg_show_page_publisher.html index 4711171992..cb9436255b 100644 --- a/app/test/frontend/golden/pkg_show_page_publisher.html +++ b/app/test/frontend/golden/pkg_show_page_publisher.html @@ -136,7 +136,7 @@

%%published-date%% - + example.com diff --git a/app/test/frontend/golden/pkg_show_version_page.html b/app/test/frontend/golden/pkg_show_version_page.html index c49939912c..7f167be6d8 100644 --- a/app/test/frontend/golden/pkg_show_version_page.html +++ b/app/test/frontend/golden/pkg_show_version_page.html @@ -138,8 +138,9 @@

1.2.0 - / Prerelease: + / + Prerelease: 2.0.0-dev diff --git a/app/test/frontend/golden/pkg_versions_page.html b/app/test/frontend/golden/pkg_versions_page.html index f0071d5fe5..6729b90190 100644 --- a/app/test/frontend/golden/pkg_versions_page.html +++ b/app/test/frontend/golden/pkg_versions_page.html @@ -138,8 +138,9 @@

1.2.0 - / Prerelease: + / + Prerelease: 2.0.0-dev