44
55import 'package:dartdoc/src/model/category.dart' ;
66
7+ /// A renderer for a [Category] .
78abstract class CategoryRenderer {
9+ const CategoryRenderer ();
10+
11+ /// Render the label of this [category] .
812 String renderCategoryLabel (Category category);
13+
14+ /// Render the name of this [category] with a link to its specified
15+ /// [Category.href] if it is documented.
916 String renderLinkedName (Category category);
1017}
1118
19+ /// A HTML renderer for a [Category] .
1220class CategoryRendererHtml extends CategoryRenderer {
13- static final CategoryRendererHtml _instance = CategoryRendererHtml ._();
14-
15- factory CategoryRendererHtml () {
16- return _instance;
17- }
18-
19- CategoryRendererHtml ._();
21+ const CategoryRendererHtml ();
2022
2123 @override
2224 String renderCategoryLabel (Category category) {
23- var spanClasses = < String > [];
24- spanClasses.add ('category' );
25- spanClasses.add (category.name.split (' ' ).join ('-' ).toLowerCase ());
26- spanClasses.add ('cp-${category .categoryIndex }' );
25+ final buffer = StringBuffer ('<span class="category ' );
26+ final name = category.name;
27+ buffer.writeAll (name.toLowerCase ().split (' ' ), '-' );
28+ buffer.write (' cp-' );
29+ buffer.write (category.categoryIndex);
30+
2731 if (category.isDocumented) {
28- spanClasses. add ( ' linked' );
32+ buffer. write ( ' linked' );
2933 }
30- var spanTitle = 'This is part of the ${category .name } ${category .kind }.' ;
3134
32- var buf = StringBuffer ();
33- buf.write ('<span class="${spanClasses .join (' ' )}" title="$spanTitle ">' );
34- buf.write (renderLinkedName (category));
35- buf.write ('</span>' );
36- return buf.toString ();
35+ buffer.write ('"' ); // Wrap up the class list and begin title
36+ buffer.write (' title="This is part of the ' );
37+ buffer.write (name);
38+ buffer.write (' ' );
39+ buffer.write (category.kind);
40+ buffer.write ('.">' ); // Wrap up the title
41+
42+ buffer.write (renderLinkedName (category));
43+ buffer.write ('</span>' );
44+
45+ return buffer.toString ();
3746 }
3847
3948 @override
4049 String renderLinkedName (Category category) {
41- var unbrokenName = category.name.replaceAll (' ' , ' ' );
50+ final unbrokenName = category.name.replaceAll (' ' , ' ' );
4251 if (category.isDocumented) {
4352 return '<a href="${category .href }">$unbrokenName </a>' ;
4453 } else {
@@ -47,13 +56,16 @@ class CategoryRendererHtml extends CategoryRenderer {
4756 }
4857}
4958
59+ /// A markdown renderer for a [Category] .
5060class CategoryRendererMd extends CategoryRenderer {
61+ const CategoryRendererMd ();
62+
5163 @override
5264 String renderCategoryLabel (Category category) => renderLinkedName (category);
5365
5466 @override
5567 String renderLinkedName (Category category) {
56- var name = category.name;
68+ final name = category.name;
5769 if (category.isDocumented) {
5870 return '[$name ](${category .href })' ;
5971 }
0 commit comments