Skip to content

Commit e1d689d

Browse files
committed
Extract file extensions to a new renderer
1 parent d82ebd6 commit e1d689d

12 files changed

+48
-14
lines changed

lib/src/model/category.dart

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import 'package:dartdoc/src/dartdoc_options.dart';
99
import 'package:dartdoc/src/model/model.dart';
1010
import 'package:dartdoc/src/package_meta.dart';
1111
import 'package:dartdoc/src/render/category_renderer.dart';
12+
import 'package:dartdoc/src/render/filename_renderer.dart';
1213
import 'package:dartdoc/src/warnings.dart';
1314

1415
/// A category is a subcategory of a package, containing libraries tagged
@@ -120,14 +121,14 @@ class Category extends Nameable
120121
@override
121122
String get fullyQualifiedName => name;
122123

123-
String get filePath => 'topics/${name}-topic.html';
124+
String get filePath => _fileNameRenderer.renderFileName('topics/$name-topic');
124125

125126
@override
126127
String get href => isCanonical ? '${package.baseHref}$filePath' : null;
127128

128-
String get categorization => _renderer.renderCategoryLabel(this);
129+
String get categorization => _categoryRenderer.renderCategoryLabel(this);
129130

130-
String get linkedName => _renderer.renderLinkedName(this);
131+
String get linkedName => _categoryRenderer.renderLinkedName(this);
131132

132133
int _categoryIndex;
133134

@@ -199,6 +200,9 @@ class Category extends Nameable
199200
@override
200201
Iterable<Typedef> get typedefs => _typedefs;
201202

202-
CategoryRenderer get _renderer =>
203+
CategoryRenderer get _categoryRenderer =>
203204
packageGraph.rendererFactory.categoryRenderer;
205+
206+
FileNameRenderer get _fileNameRenderer =>
207+
packageGraph.rendererFactory.fileNameRenderer;
204208
}

lib/src/model/class.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ class Class extends Container
184184
ModelElement get enclosingElement => library;
185185

186186
@override
187-
String get fileName => "${name}-class.html";
187+
String get fileName => fileNameRenderer.renderFileName('$name-class');
188188

189189
@override
190190
String get filePath => '${library.dirName}/$fileName';

lib/src/model/field.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -156,7 +156,8 @@ class Field extends ModelElement
156156
FieldElement get field => (element as FieldElement);
157157

158158
@override
159-
String get fileName => isConst ? '$name-constant.html' : '$name.html';
159+
String get fileName =>
160+
fileNameRenderer.renderFileName(isConst ? '$name-constant' : '$name');
160161

161162
String _sourceCode;
162163

lib/src/model/library.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -375,7 +375,7 @@ class Library extends ModelElement with Categorization, TopLevelContainer {
375375
}
376376

377377
@override
378-
String get fileName => '$dirName-library.html';
378+
String get fileName => fileNameRenderer.renderFileName('$dirName-library');
379379

380380
@override
381381
String get filePath => '${library.dirName}/$fileName';

lib/src/model/mixin.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ class Mixin extends Class {
6464
bool get hasModifiers => super.hasModifiers || hasPublicSuperclassConstraints;
6565

6666
@override
67-
String get fileName => "${name}-mixin.html";
67+
String get fileName => fileNameRenderer.renderFileName('$name-mixin');
6868

6969
@override
7070
String get kind => 'mixin';

lib/src/model/model_element.dart

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import 'package:dartdoc/src/element_type.dart';
2525
import 'package:dartdoc/src/logging.dart';
2626
import 'package:dartdoc/src/model/model.dart';
2727
import 'package:dartdoc/src/model_utils.dart' as utils;
28+
import 'package:dartdoc/src/render/filename_renderer.dart';
2829
import 'package:dartdoc/src/render/model_element_renderer.dart';
2930
import 'package:dartdoc/src/render/parameter_renderer.dart';
3031
import 'package:dartdoc/src/source_linker.dart';
@@ -787,7 +788,7 @@ abstract class ModelElement extends Canonicalization
787788
return '';
788789
}
789790

790-
String get fileName => "${name}.html";
791+
String get fileName => fileNameRenderer.renderFileName(name);
791792

792793
String get filePath;
793794

@@ -916,6 +917,9 @@ abstract class ModelElement extends Canonicalization
916917
return _linkedName;
917918
}
918919

920+
FileNameRenderer get fileNameRenderer =>
921+
packageGraph.rendererFactory.fileNameRenderer;
922+
919923
ModelElementRenderer get _modelElementRenderer =>
920924
packageGraph.rendererFactory.modelElementRenderer;
921925

lib/src/model/operator.dart

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,10 +42,9 @@ class Operator extends Method {
4242
String get fileName {
4343
var actualName = super.name;
4444
if (friendlyNames.containsKey(actualName)) {
45-
return "operator_${friendlyNames[actualName]}.html";
46-
} else {
47-
return '$actualName.html';
45+
actualName = "operator_${friendlyNames[actualName]}";
4846
}
47+
return fileNameRenderer.renderFileName(actualName);
4948
}
5049

5150
@override

lib/src/model/package.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,8 @@ class Package extends LibraryContainer
181181
@override
182182
String get enclosingName => packageGraph.defaultPackageName;
183183

184-
String get filePath => 'index.html';
184+
String get filePath =>
185+
packageGraph.rendererFactory.fileNameRenderer.renderFileName('index');
185186

186187
@override
187188
String get fullyQualifiedName => 'package:$name';

lib/src/model/top_level_variable.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,8 @@ class TopLevelVariable extends ModelElement
8585
}
8686

8787
@override
88-
String get fileName => isConst ? '$name-constant.html' : '$name.html';
88+
String get fileName =>
89+
fileNameRenderer.renderFileName(isConst ? '$name-constant' : '$name');
8990

9091
@override
9192
DefinedElementType get modelType => super.modelType;

lib/src/render/filename_renderer.dart

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
2+
// for details. All rights reserved. Use of this source code is governed by a
3+
// BSD-style license that can be found in the LICENSE file.
4+
5+
abstract class FileNameRenderer {
6+
String renderFileName(String name);
7+
}
8+
9+
class HtmlFileNameRenderer extends FileNameRenderer {
10+
@override
11+
String renderFileName(String name) => '$name.html';
12+
}

lib/src/render/renderer_factory.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,16 @@ import 'package:dartdoc/src/render/category_renderer.dart';
77
import 'package:dartdoc/src/render/documentation_renderer.dart';
88
import 'package:dartdoc/src/render/element_type_renderer.dart';
99
import 'package:dartdoc/src/render/enum_field_renderer.dart';
10+
import 'package:dartdoc/src/render/filename_renderer.dart';
1011
import 'package:dartdoc/src/render/model_element_renderer.dart';
1112
import 'package:dartdoc/src/render/parameter_renderer.dart';
1213
import 'package:dartdoc/src/render/template_renderer.dart';
1314
import 'package:dartdoc/src/render/type_parameters_renderer.dart';
1415
import 'package:dartdoc/src/render/typedef_renderer.dart';
1516

1617
abstract class RendererFactory {
18+
FileNameRenderer get fileNameRenderer;
19+
1720
TemplateRenderer get templateRenderer;
1821

1922
CategoryRenderer get categoryRenderer;
@@ -42,6 +45,9 @@ abstract class RendererFactory {
4245
}
4346

4447
class HtmlRenderFactory extends RendererFactory {
48+
@override
49+
FileNameRenderer get fileNameRenderer => HtmlFileNameRenderer();
50+
4551
@override
4652
TemplateRenderer get templateRenderer => HtmlTemplateRenderer();
4753

test/html/html_template_renderer_test.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
// for details. All rights reserved. Use of this source code is governed by a
33
// BSD-style license that can be found in the LICENSE file.
44

5+
import 'package:dartdoc/src/render/filename_renderer.dart';
56
import 'package:dartdoc/src/render/template_renderer.dart';
67
import 'package:test/test.dart';
78

@@ -23,4 +24,9 @@ void main() {
2324
expect(test, equals('<span class="deprecated">Banana</span> Fruit'));
2425
});
2526
});
27+
28+
test('HtmlFileNameRenderer adds html extension', () {
29+
HtmlFileNameRenderer renderer = HtmlFileNameRenderer();
30+
expect(renderer.renderFileName('MyFile'), equals('MyFile.html'));
31+
});
2632
}

0 commit comments

Comments
 (0)