Skip to content

Commit

Permalink
Escape relative path for dartdoc page urls. (dart-lang#7440)
Browse files Browse the repository at this point in the history
  • Loading branch information
isoos authored Jan 30, 2024
1 parent 4c0bfba commit 0ed66f1
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 21 deletions.
32 changes: 17 additions & 15 deletions app/lib/shared/urls.dart
Original file line number Diff line number Diff line change
Expand Up @@ -154,32 +154,34 @@ String pkgDocUrl(
String? version,
bool includeHost = false,
String? relativePath,
bool omitTrailingSlash = false,
bool isLatest = false,
}) {
final relativePathSegments = relativePath == null
? const <String>[]
: Uri.parse(relativePath)
.pathSegments
.where((e) => e.isNotEmpty)
.toList();

var forceEndingSlash = relativePathSegments.isEmpty;
if (relativePathSegments.isNotEmpty &&
relativePathSegments.last == 'index.html') {
relativePathSegments.removeLast();
forceEndingSlash = true;
}

if (isLatest || version == null) {
version = 'latest';
}
final segments = <String>[
'documentation',
package,
version,
...relativePathSegments,
if (forceEndingSlash) '',
];
final baseUri = includeHost ? _siteRootUri : _pathRootUri;
String url = baseUri.resolveUri(Uri(pathSegments: segments)).toString();

if (relativePath != null) {
url = p.join(url, relativePath);
} else if (!omitTrailingSlash) {
url = '$url/';
}
if (url.endsWith('/index.html')) {
url = url.substring(0, url.length - 'index.html'.length);
}
if (omitTrailingSlash && url.endsWith('/')) {
url = url.substring(0, url.length - 1);
}
return url;
return baseUri.resolveUri(Uri(pathSegments: segments)).toString();
}

String publisherUrl(String publisherId) => '/publishers/$publisherId';
Expand Down
11 changes: 5 additions & 6 deletions app/test/shared/urls_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,18 @@ void main() {
expect(pkgDocUrl('foo_bar'), '/documentation/foo_bar/latest/');
expect(pkgDocUrl('foo_bar', version: '1.0.0'),
'/documentation/foo_bar/1.0.0/');
expect(pkgDocUrl('foo_bar', version: '1.0.0', omitTrailingSlash: true),
'/documentation/foo_bar/1.0.0');
});

test('with host', () {
expect(pkgDocUrl('foo_bar', includeHost: true),
'https://pub.dev/documentation/foo_bar/latest/');
expect(pkgDocUrl('foo_bar', version: '1.0.0', includeHost: true),
'https://pub.dev/documentation/foo_bar/1.0.0/');
expect(
pkgDocUrl('foo_bar',
version: '1.0.0', includeHost: true, omitTrailingSlash: true),
'https://pub.dev/documentation/foo_bar/1.0.0');
});

test('escaped segments', () {
expect(pkgDocUrl('foo', relativePath: 'árvíztűrő.png'),
'/documentation/foo/latest/%C3%A1rv%C3%ADzt%C5%B1r%C5%91.png');
});
});

Expand Down

0 comments on commit 0ed66f1

Please sign in to comment.