Skip to content

Commit fd5a359

Browse files
committed
Begin abstraction for template render helper
Adds a class used by TemplateData to help render template elements. Code that produces raw HTML will gradually migrate into this new class.
1 parent d5f90cf commit fd5a359

File tree

4 files changed

+124
-67
lines changed

4 files changed

+124
-67
lines changed

lib/src/html/html_generator_instance.dart

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import 'dart:io' show File;
88

99
import 'package:collection/collection.dart' show compareNatural;
1010
import 'package:dartdoc/src/html/html_generator.dart' show HtmlGeneratorOptions;
11+
import 'package:dartdoc/src/html/template_render_helper.dart';
1112
import 'package:dartdoc/src/html/resource_loader.dart' as loader;
1213
import 'package:dartdoc/src/html/resources.g.dart' as resources;
1314
import 'package:dartdoc/src/html/template_data.dart';
@@ -28,6 +29,7 @@ class HtmlGeneratorInstance {
2829
final PackageGraph _packageGraph;
2930
final List<Indexable> _indexedElements = <Indexable>[];
3031
final FileWriter _writer;
32+
final HtmlRenderHelper _templateHelper = HtmlRenderHelper();
3133

3234
HtmlGeneratorInstance(
3335
this._options, this._templates, this._packageGraph, this._writer);
@@ -273,7 +275,8 @@ class HtmlGeneratorInstance {
273275
}
274276

275277
void generatePackage(PackageGraph packageGraph, Package package) {
276-
TemplateData data = PackageTemplateData(_options, packageGraph, package);
278+
TemplateData data =
279+
PackageTemplateData(_options, packageGraph, _templateHelper, package);
277280
logInfo('documenting ${package.name}');
278281

279282
_build('index.html', _templates.indexTemplate, data);
@@ -283,7 +286,8 @@ class HtmlGeneratorInstance {
283286
void generateCategory(PackageGraph packageGraph, Category category) {
284287
logInfo(
285288
'Generating docs for category ${category.name} from ${category.package.fullyQualifiedName}...');
286-
TemplateData data = CategoryTemplateData(_options, packageGraph, category);
289+
TemplateData data =
290+
CategoryTemplateData(_options, packageGraph, _templateHelper, category);
287291

288292
_build(path.joinAll(category.href.split('/')), _templates.categoryTemplate,
289293
data);
@@ -295,102 +299,107 @@ class HtmlGeneratorInstance {
295299
if (!lib.isAnonymous && !lib.hasDocumentation) {
296300
packageGraph.warnOnElement(lib, PackageWarning.noLibraryLevelDocs);
297301
}
298-
TemplateData data = LibraryTemplateData(_options, packageGraph, lib);
302+
TemplateData data =
303+
LibraryTemplateData(_options, packageGraph, _templateHelper, lib);
299304

300305
_build(path.join(lib.dirName, '${lib.fileName}'),
301306
_templates.libraryTemplate, data);
302307
}
303308

304309
void generateClass(PackageGraph packageGraph, Library lib, Class clazz) {
305-
TemplateData data = ClassTemplateData(_options, packageGraph, lib, clazz);
310+
TemplateData data =
311+
ClassTemplateData(_options, packageGraph, _templateHelper, lib, clazz);
306312
_build(path.joinAll(clazz.href.split('/')), _templates.classTemplate, data);
307313
}
308314

309315
void generateExtension(
310316
PackageGraph packageGraph, Library lib, Extension ext) {
311-
TemplateData data = ExtensionTemplateData(_options, packageGraph, lib, ext);
317+
TemplateData data = ExtensionTemplateData(
318+
_options, packageGraph, _templateHelper, lib, ext);
312319
_build(
313320
path.joinAll(ext.href.split('/')), _templates.extensionTemplate, data);
314321
}
315322

316323
void generateMixins(PackageGraph packageGraph, Library lib, Mixin mixin) {
317-
TemplateData data = MixinTemplateData(_options, packageGraph, lib, mixin);
324+
TemplateData data =
325+
MixinTemplateData(_options, packageGraph, _templateHelper, lib, mixin);
318326
_build(path.joinAll(mixin.href.split('/')), _templates.mixinTemplate, data);
319327
}
320328

321329
void generateConstructor(PackageGraph packageGraph, Library lib, Class clazz,
322330
Constructor constructor) {
323331
TemplateData data = ConstructorTemplateData(
324-
_options, packageGraph, lib, clazz, constructor);
332+
_options, packageGraph, _templateHelper, lib, clazz, constructor);
325333

326334
_build(path.joinAll(constructor.href.split('/')),
327335
_templates.constructorTemplate, data);
328336
}
329337

330338
void generateEnum(PackageGraph packageGraph, Library lib, Enum eNum) {
331-
TemplateData data = EnumTemplateData(_options, packageGraph, lib, eNum);
339+
TemplateData data =
340+
EnumTemplateData(_options, packageGraph, _templateHelper, lib, eNum);
332341

333342
_build(path.joinAll(eNum.href.split('/')), _templates.enumTemplate, data);
334343
}
335344

336345
void generateFunction(
337346
PackageGraph packageGraph, Library lib, ModelFunction function) {
338-
TemplateData data =
339-
FunctionTemplateData(_options, packageGraph, lib, function);
347+
TemplateData data = FunctionTemplateData(
348+
_options, packageGraph, _templateHelper, lib, function);
340349

341350
_build(path.joinAll(function.href.split('/')), _templates.functionTemplate,
342351
data);
343352
}
344353

345354
void generateMethod(
346355
PackageGraph packageGraph, Library lib, Container clazz, Method method) {
347-
TemplateData data =
348-
MethodTemplateData(_options, packageGraph, lib, clazz, method);
356+
TemplateData data = MethodTemplateData(
357+
_options, packageGraph, _templateHelper, lib, clazz, method);
349358

350359
_build(
351360
path.joinAll(method.href.split('/')), _templates.methodTemplate, data);
352361
}
353362

354363
void generateConstant(
355364
PackageGraph packageGraph, Library lib, Container clazz, Field property) {
356-
TemplateData data =
357-
ConstantTemplateData(_options, packageGraph, lib, clazz, property);
365+
TemplateData data = ConstantTemplateData(
366+
_options, packageGraph, _templateHelper, lib, clazz, property);
358367

359368
_build(path.joinAll(property.href.split('/')), _templates.constantTemplate,
360369
data);
361370
}
362371

363372
void generateProperty(
364373
PackageGraph packageGraph, Library lib, Container clazz, Field property) {
365-
TemplateData data =
366-
PropertyTemplateData(_options, packageGraph, lib, clazz, property);
374+
TemplateData data = PropertyTemplateData(
375+
_options, packageGraph, _templateHelper, lib, clazz, property);
367376

368377
_build(path.joinAll(property.href.split('/')), _templates.propertyTemplate,
369378
data);
370379
}
371380

372381
void generateTopLevelProperty(
373382
PackageGraph packageGraph, Library lib, TopLevelVariable property) {
374-
TemplateData data =
375-
TopLevelPropertyTemplateData(_options, packageGraph, lib, property);
383+
TemplateData data = TopLevelPropertyTemplateData(
384+
_options, packageGraph, _templateHelper, lib, property);
376385

377386
_build(path.joinAll(property.href.split('/')),
378387
_templates.topLevelPropertyTemplate, data);
379388
}
380389

381390
void generateTopLevelConstant(
382391
PackageGraph packageGraph, Library lib, TopLevelVariable property) {
383-
TemplateData data =
384-
TopLevelConstTemplateData(_options, packageGraph, lib, property);
392+
TemplateData data = TopLevelConstTemplateData(
393+
_options, packageGraph, _templateHelper, lib, property);
385394

386395
_build(path.joinAll(property.href.split('/')),
387396
_templates.topLevelConstantTemplate, data);
388397
}
389398

390399
void generateTypeDef(
391400
PackageGraph packageGraph, Library lib, Typedef typeDef) {
392-
TemplateData data =
393-
TypedefTemplateData(_options, packageGraph, lib, typeDef);
401+
TemplateData data = TypedefTemplateData(
402+
_options, packageGraph, _templateHelper, lib, typeDef);
394403

395404
_build(path.joinAll(typeDef.href.split('/')), _templates.typeDefTemplate,
396405
data);

lib/src/html/template_data.dart

Lines changed: 47 additions & 45 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/html/template_render_helper.dart';
56
import 'package:dartdoc/src/model/model.dart';
67

78
abstract class HtmlOptions {
@@ -12,8 +13,9 @@ abstract class HtmlOptions {
1213
abstract class TemplateData<T extends Documentable> {
1314
final PackageGraph packageGraph;
1415
final HtmlOptions htmlOptions;
16+
final TemplateRenderHelper _templateHelper;
1517

16-
TemplateData(this.htmlOptions, this.packageGraph);
18+
TemplateData(this.htmlOptions, this.packageGraph, this._templateHelper);
1719

1820
String get title;
1921
String get layoutTitle;
@@ -37,20 +39,15 @@ abstract class TemplateData<T extends Documentable> {
3739
String get version => htmlOptions.toolVersion;
3840
String get relCanonicalPrefix => htmlOptions.relCanonicalPrefix;
3941

40-
String _layoutTitle(String name, String kind, bool isDeprecated) {
41-
if (isDeprecated) {
42-
return '<span class="deprecated">${name}</span> ${kind}';
43-
} else {
44-
return '${name} ${kind}';
45-
}
46-
}
42+
String _layoutTitle(String name, String kind, bool isDeprecated) =>
43+
_templateHelper.composeLayoutTitle(name, kind, isDeprecated);
4744
}
4845

4946
class PackageTemplateData extends TemplateData<Package> {
5047
final Package package;
51-
PackageTemplateData(
52-
HtmlOptions htmlOptions, PackageGraph packageGraph, this.package)
53-
: super(htmlOptions, packageGraph);
48+
PackageTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph,
49+
HtmlRenderHelper templateHelper, this.package)
50+
: super(htmlOptions, packageGraph, templateHelper);
5451

5552
@override
5653
bool get includeVersion => true;
@@ -78,9 +75,9 @@ class PackageTemplateData extends TemplateData<Package> {
7875
class CategoryTemplateData extends TemplateData<Category> {
7976
final Category category;
8077

81-
CategoryTemplateData(
82-
HtmlOptions htmlOptions, PackageGraph packageGraph, this.category)
83-
: super(htmlOptions, packageGraph);
78+
CategoryTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph,
79+
HtmlRenderHelper templateHelper, this.category)
80+
: super(htmlOptions, packageGraph, templateHelper);
8481

8582
@override
8683
String get title => '${category.name} ${category.kind} - Dart API';
@@ -105,9 +102,9 @@ class CategoryTemplateData extends TemplateData<Category> {
105102
class LibraryTemplateData extends TemplateData<Library> {
106103
final Library library;
107104

108-
LibraryTemplateData(
109-
HtmlOptions htmlOptions, PackageGraph packageGraph, this.library)
110-
: super(htmlOptions, packageGraph);
105+
LibraryTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph,
106+
HtmlRenderHelper templateHelper, this.library)
107+
: super(htmlOptions, packageGraph, templateHelper);
111108

112109
@override
113110
String get title => '${library.name} library - Dart API';
@@ -132,8 +129,8 @@ class MixinTemplateData extends ClassTemplateData<Mixin> {
132129
final Mixin mixin;
133130

134131
MixinTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph,
135-
Library library, this.mixin)
136-
: super(htmlOptions, packageGraph, library, mixin);
132+
HtmlRenderHelper templateHelper, Library library, this.mixin)
133+
: super(htmlOptions, packageGraph, templateHelper, library, mixin);
137134

138135
@override
139136
Mixin get self => mixin;
@@ -146,8 +143,8 @@ class ClassTemplateData<T extends Class> extends TemplateData<T> {
146143
Class _objectType;
147144

148145
ClassTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph,
149-
this.library, this.clazz)
150-
: super(htmlOptions, packageGraph);
146+
HtmlRenderHelper templateHelper, this.library, this.clazz)
147+
: super(htmlOptions, packageGraph, templateHelper);
151148

152149
@override
153150
T get self => clazz;
@@ -191,8 +188,8 @@ class ExtensionTemplateData<T extends Extension> extends TemplateData<T> {
191188
final Library library;
192189

193190
ExtensionTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph,
194-
this.library, this.extension)
195-
: super(htmlOptions, packageGraph);
191+
HtmlRenderHelper templateHelper, this.library, this.extension)
192+
: super(htmlOptions, packageGraph, templateHelper);
196193

197194
@override
198195
T get self => extension;
@@ -219,8 +216,8 @@ class ConstructorTemplateData extends TemplateData<Constructor> {
219216
final Constructor constructor;
220217

221218
ConstructorTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph,
222-
this.library, this.clazz, this.constructor)
223-
: super(htmlOptions, packageGraph);
219+
HtmlRenderHelper templateHelper, this.library, this.clazz,
220+
this.constructor) : super(htmlOptions, packageGraph, templateHelper);
224221

225222
@override
226223
Constructor get self => constructor;
@@ -246,8 +243,8 @@ class ConstructorTemplateData extends TemplateData<Constructor> {
246243

247244
class EnumTemplateData extends ClassTemplateData<Enum> {
248245
EnumTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph,
249-
Library library, Enum eNum)
250-
: super(htmlOptions, packageGraph, library, eNum);
246+
HtmlRenderHelper templateHelper, Library library, Enum eNum)
247+
: super(htmlOptions, packageGraph, templateHelper, library, eNum);
251248

252249
Enum get eNum => clazz;
253250
@override
@@ -259,8 +256,8 @@ class FunctionTemplateData extends TemplateData<ModelFunction> {
259256
final Library library;
260257

261258
FunctionTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph,
262-
this.library, this.function)
263-
: super(htmlOptions, packageGraph);
259+
HtmlRenderHelper templateHelper, this.library, this.function)
260+
: super(htmlOptions, packageGraph, templateHelper);
264261

265262
@override
266263
ModelFunction get self => function;
@@ -287,8 +284,9 @@ class MethodTemplateData extends TemplateData<Method> {
287284
String containerDesc;
288285

289286
MethodTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph,
290-
this.library, this.container, this.method)
291-
: super(htmlOptions, packageGraph) {
287+
HtmlRenderHelper templateHelper, this.library, this.container,
288+
this.method)
289+
: super(htmlOptions, packageGraph, templateHelper) {
292290
containerDesc = container.isClass ? 'class' : 'extension';
293291
}
294292

@@ -303,8 +301,8 @@ class MethodTemplateData extends TemplateData<Method> {
303301
method.nameWithGenerics, method.fullkind, method.isDeprecated);
304302
@override
305303
String get metaDescription =>
306-
'API docs for the ${method.name} method from the ${container.name} ${containerDesc}, '
307-
'for the Dart programming language.';
304+
'API docs for the ${method.name} method from the '
305+
'${container.name} ${containerDesc}, for the Dart programming language.';
308306
@override
309307
List get navLinks => [packageGraph.defaultPackage, library];
310308
@override
@@ -320,8 +318,9 @@ class PropertyTemplateData extends TemplateData<Field> {
320318
String containerDesc;
321319

322320
PropertyTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph,
323-
this.library, this.container, this.property)
324-
: super(htmlOptions, packageGraph) {
321+
HtmlRenderHelper templateHelper, this.library, this.container,
322+
this.property)
323+
: super(htmlOptions, packageGraph, templateHelper) {
325324
containerDesc = container.isClass ? 'class' : 'extension';
326325
}
327326

@@ -337,8 +336,8 @@ class PropertyTemplateData extends TemplateData<Field> {
337336
_layoutTitle(property.name, type, property.isDeprecated);
338337
@override
339338
String get metaDescription =>
340-
'API docs for the ${property.name} $type from the ${container.name} ${containerDesc}, '
341-
'for the Dart programming language.';
339+
'API docs for the ${property.name} $type from the '
340+
'${container.name} ${containerDesc}, for the Dart programming language.';
342341
@override
343342
List get navLinks => [packageGraph.defaultPackage, library];
344343
@override
@@ -351,8 +350,9 @@ class PropertyTemplateData extends TemplateData<Field> {
351350

352351
class ConstantTemplateData extends PropertyTemplateData {
353352
ConstantTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph,
354-
Library library, Container container, Field property)
355-
: super(htmlOptions, packageGraph, library, container, property);
353+
HtmlRenderHelper templateHelper, Library library, Container container,
354+
Field property)
355+
: super(htmlOptions, packageGraph, templateHelper, library, container, property);
356356

357357
@override
358358
String get type => 'constant';
@@ -363,8 +363,8 @@ class TypedefTemplateData extends TemplateData<Typedef> {
363363
final Typedef typeDef;
364364

365365
TypedefTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph,
366-
this.library, this.typeDef)
367-
: super(htmlOptions, packageGraph);
366+
HtmlRenderHelper templateHelper, this.library, this.typeDef)
367+
: super(htmlOptions, packageGraph, templateHelper);
368368

369369
@override
370370
Typedef get self => typeDef;
@@ -390,8 +390,9 @@ class TopLevelPropertyTemplateData extends TemplateData<TopLevelVariable> {
390390
final TopLevelVariable property;
391391

392392
TopLevelPropertyTemplateData(HtmlOptions htmlOptions,
393-
PackageGraph packageGraph, this.library, this.property)
394-
: super(htmlOptions, packageGraph);
393+
PackageGraph packageGraph, HtmlRenderHelper templateHelper,
394+
this.library, this.property)
395+
: super(htmlOptions, packageGraph, templateHelper);
395396

396397
@override
397398
TopLevelVariable get self => property;
@@ -416,8 +417,9 @@ class TopLevelPropertyTemplateData extends TemplateData<TopLevelVariable> {
416417

417418
class TopLevelConstTemplateData extends TopLevelPropertyTemplateData {
418419
TopLevelConstTemplateData(HtmlOptions htmlOptions, PackageGraph packageGraph,
419-
Library library, TopLevelVariable property)
420-
: super(htmlOptions, packageGraph, library, property);
420+
HtmlRenderHelper templateHelper, Library library,
421+
TopLevelVariable property)
422+
: super(htmlOptions, packageGraph, templateHelper, library, property);
421423

422424
@override
423425
String get _type => 'constant';

0 commit comments

Comments
 (0)