Skip to content

Commit 4113b33

Browse files
committed
Remove <base> tag, use hrefs prepended with base
1 parent 11af0bd commit 4113b33

File tree

7 files changed

+186
-137
lines changed

7 files changed

+186
-137
lines changed

lib/src/html/html_generator_instance.dart

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ class HtmlGeneratorInstance {
7676
});
7777

7878
String json = encoder.convert(indexItems);
79+
json = json.replaceAll(HTMLBASE_PLACEHOLDER, '');
7980
_writer(path.join('categories.json'), '${json}\n');
8081
}
8182

@@ -118,6 +119,7 @@ class HtmlGeneratorInstance {
118119
});
119120

120121
String json = encoder.convert(indexItems);
122+
json = json.replaceAll(HTMLBASE_PLACEHOLDER, '');
121123
_writer(path.join('index.json'), '${json}\n');
122124
}
123125

@@ -413,6 +415,7 @@ class HtmlGeneratorInstance {
413415
String outFile = path.joinAll(filename.split('/'));
414416
String content = template.renderString(data);
415417

418+
content = content.replaceAll(HTMLBASE_PLACEHOLDER, data.htmlBase);
416419
_writer(outFile, content);
417420
if (data.self is Indexable) _indexedElements.add(data.self as Indexable);
418421
}

lib/src/html/template_data.dart

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -67,9 +67,9 @@ class PackageTemplateData extends TemplateData<Package> {
6767
bool get hasHomepage => package.hasHomepage;
6868
String get homepage => package.homepage;
6969

70-
/// `null` for packages because they are at the root – not needed
70+
/// empty for packages because they are at the root – not needed
7171
@override
72-
String get htmlBase => null;
72+
String get htmlBase => '';
7373
}
7474

7575
class CategoryTemplateData extends TemplateData<Category> {
@@ -83,7 +83,7 @@ class CategoryTemplateData extends TemplateData<Category> {
8383
String get title => '${category.name} ${category.kind} - Dart API';
8484

8585
@override
86-
String get htmlBase => '..';
86+
String get htmlBase => '../';
8787

8888
@override
8989
String get layoutTitle => _layoutTitle(category.name, category.kind, false);
@@ -109,7 +109,7 @@ class LibraryTemplateData extends TemplateData<Library> {
109109
@override
110110
String get title => '${library.name} library - Dart API';
111111
@override
112-
String get htmlBase => '..';
112+
String get htmlBase => '../';
113113
@override
114114
String get metaDescription =>
115115
'${library.name} library API docs, for the Dart programming language.';
@@ -164,7 +164,7 @@ class ClassTemplateData<T extends Class> extends TemplateData<T> {
164164
@override
165165
List get navLinks => [packageGraph.defaultPackage, library];
166166
@override
167-
String get htmlBase => '..';
167+
String get htmlBase => '../';
168168

169169
Class get objectType {
170170
if (_objectType != null) {
@@ -207,7 +207,7 @@ class ExtensionTemplateData<T extends Extension> extends TemplateData<T> {
207207
@override
208208
List get navLinks => [packageGraph.defaultPackage, library];
209209
@override
210-
String get htmlBase => '..';
210+
String get htmlBase => '../';
211211
}
212212

213213
class ConstructorTemplateData extends TemplateData<Constructor> {
@@ -235,7 +235,7 @@ class ConstructorTemplateData extends TemplateData<Constructor> {
235235
List get navLinksWithGenerics => [clazz];
236236
@override
237237
@override
238-
String get htmlBase => '../..';
238+
String get htmlBase => '../../';
239239
@override
240240
String get title => '${constructor.name} constructor - ${clazz.name} class - '
241241
'${library.name} library - Dart API';
@@ -279,7 +279,7 @@ class FunctionTemplateData extends TemplateData<ModelFunction> {
279279
@override
280280
List get navLinks => [packageGraph.defaultPackage, library];
281281
@override
282-
String get htmlBase => '..';
282+
String get htmlBase => '../';
283283
}
284284

285285
class MethodTemplateData extends TemplateData<Method> {
@@ -317,7 +317,7 @@ class MethodTemplateData extends TemplateData<Method> {
317317
@override
318318
List get navLinksWithGenerics => [container];
319319
@override
320-
String get htmlBase => '../..';
320+
String get htmlBase => '../../';
321321
}
322322

323323
class PropertyTemplateData extends TemplateData<Field> {
@@ -356,7 +356,7 @@ class PropertyTemplateData extends TemplateData<Field> {
356356
@override
357357
List get navLinksWithGenerics => [container];
358358
@override
359-
String get htmlBase => '../..';
359+
String get htmlBase => '../../';
360360

361361
String get type => 'property';
362362
}
@@ -400,7 +400,7 @@ class TypedefTemplateData extends TemplateData<Typedef> {
400400
@override
401401
List get navLinks => [packageGraph.defaultPackage, library];
402402
@override
403-
String get htmlBase => '..';
403+
String get htmlBase => '../';
404404
}
405405

406406
class TopLevelPropertyTemplateData extends TemplateData<TopLevelVariable> {
@@ -431,7 +431,7 @@ class TopLevelPropertyTemplateData extends TemplateData<TopLevelVariable> {
431431
@override
432432
List get navLinks => [packageGraph.defaultPackage, library];
433433
@override
434-
String get htmlBase => '..';
434+
String get htmlBase => '../';
435435

436436
String get _type => 'property';
437437
}

lib/src/model/package.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,10 @@ import 'package:pub_semver/pub_semver.dart';
1414

1515
final RegExp substituteNameVersion = RegExp(r'%([bnv])%');
1616

17+
// Unlikely to be mistaken for an identifier, html tag, or something else that
18+
// might reasonably exist normally.
19+
final String HTMLBASE_PLACEHOLDER = '\%\%HTMLBASE\%\%';
20+
1721
/// A [LibraryContainer] that contains [Library] objects related to a particular
1822
/// package.
1923
class Package extends LibraryContainer
@@ -206,7 +210,7 @@ class Package extends LibraryContainer
206210
});
207211
if (!_baseHref.endsWith('/')) _baseHref = '${_baseHref}/';
208212
} else {
209-
_baseHref = '';
213+
_baseHref = HTMLBASE_PLACEHOLDER;
210214
}
211215
}
212216
return _baseHref;

lib/templates/_footer.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -12,10 +12,10 @@
1212
</footer>
1313

1414
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
15-
<script src="static-assets/typeahead.bundle.min.js"></script>
16-
<script src="static-assets/highlight.pack.js"></script>
17-
<script src="static-assets/URI.js"></script>
18-
<script src="static-assets/script.js"></script>
15+
<script src="%%HTMLBASE%%static-assets/typeahead.bundle.min.js"></script>
16+
<script src="%%HTMLBASE%%static-assets/highlight.pack.js"></script>
17+
<script src="%%HTMLBASE%%static-assets/URI.js"></script>
18+
<script src="%%HTMLBASE%%static-assets/script.js"></script>
1919
<!-- footer placeholder -->
2020

2121
</body>

lib/templates/_head.html

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,12 @@
1212
{{ #relCanonicalPrefix }}
1313
<link rel="canonical" href="{{{relCanonicalPrefix}}}/{{{self.href}}}">
1414
{{ /relCanonicalPrefix}}
15-
{{#htmlBase}}
16-
<!-- required because all the links are pseudo-absolute -->
17-
<base href="{{{htmlBase}}}">
18-
{{/htmlBase}}
1915

2016
<link href="https://fonts.googleapis.com/css?family=Source+Code+Pro:500,400i,400,300|Source+Sans+Pro:400,300,700" rel="stylesheet">
2117
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
22-
<link rel="stylesheet" href="static-assets/github.css">
23-
<link rel="stylesheet" href="static-assets/styles.css">
24-
<link rel="icon" href="static-assets/favicon.png">
18+
<link rel="stylesheet" href="%%HTMLBASE%%static-assets/github.css">
19+
<link rel="stylesheet" href="%%HTMLBASE%%static-assets/styles.css">
20+
<link rel="icon" href="%%HTMLBASE%%static-assets/favicon.png">
2521
<!-- header placeholder -->
2622
</head>
2723

test/model_special_cases_test.dart

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -356,7 +356,8 @@ void main() {
356356
hashCode.inheritance.any((c) => c.name == 'Interceptor'), isTrue);
357357
// If EventTarget really does start implementing hashCode, this will
358358
// fail.
359-
expect(hashCode.href, equals('dart-core/Object/hashCode.html'));
359+
expect(hashCode.href,
360+
equals('${HTMLBASE_PLACEHOLDER}dart-core/Object/hashCode.html'));
360361
expect(
361362
hashCode.canonicalEnclosingContainer, equals(objectModelElement));
362363
expect(
@@ -387,7 +388,8 @@ void main() {
387388
test('sdk library have formatted names', () {
388389
expect(dartAsyncLib.name, 'dart:async');
389390
expect(dartAsyncLib.dirName, 'dart-async');
390-
expect(dartAsyncLib.href, 'dart-async/dart-async-library.html');
391+
expect(dartAsyncLib.href,
392+
'${HTMLBASE_PLACEHOLDER}dart-async/dart-async-library.html');
391393
});
392394
});
393395

0 commit comments

Comments
 (0)