|
4 | 4 |
|
5 | 5 | import 'package:dartdoc/src/model/language_feature.dart'; |
6 | 6 |
|
| 7 | +/// A renderer for a [LanguageFeature]. |
7 | 8 | abstract class FeatureRenderer { |
| 9 | + const FeatureRenderer(); |
| 10 | + |
| 11 | + /// Render the label of this [feature]. |
8 | 12 | String renderFeatureLabel(LanguageFeature feature); |
9 | 13 | } |
10 | 14 |
|
| 15 | +/// A HTML renderer for a [LanguageFeature]. |
11 | 16 | class FeatureRendererHtml extends FeatureRenderer { |
12 | | - static final FeatureRendererHtml _instance = FeatureRendererHtml._(); |
13 | | - |
14 | | - factory FeatureRendererHtml() { |
15 | | - return _instance; |
16 | | - } |
17 | | - |
18 | | - FeatureRendererHtml._(); |
| 17 | + const FeatureRendererHtml(); |
19 | 18 |
|
20 | 19 | @override |
21 | 20 | String renderFeatureLabel(LanguageFeature feature) { |
22 | | - final classesText = [ |
23 | | - 'feature', |
24 | | - 'feature-${feature.name.split(' ').join('-').toLowerCase()}' |
25 | | - ].join(' '); |
26 | | - |
27 | | - if (feature.featureUrl != null) { |
28 | | - return '<a href="${feature.featureUrl}" class="${classesText}"' |
29 | | - ' title="${feature.featureDescription}">${feature.name}</a>'; |
| 21 | + final buffer = StringBuffer(); |
| 22 | + final url = feature.featureUrl; |
| 23 | + |
| 24 | + if (url != null) { |
| 25 | + buffer.write('<a href="'); |
| 26 | + buffer.write(url); |
| 27 | + buffer.write('"'); |
| 28 | + } else { |
| 29 | + buffer.write('<span'); |
30 | 30 | } |
31 | 31 |
|
32 | | - return '<span class="${classesText}" ' |
33 | | - 'title="${feature.featureDescription}">${feature.name}</span>'; |
34 | | - } |
35 | | -} |
| 32 | + final name = feature.name; |
36 | 33 |
|
37 | | -class FeatureRendererMd extends FeatureRenderer { |
38 | | - static final FeatureRendererMd _instance = FeatureRendererMd._(); |
| 34 | + buffer.write(' class="feature feature-'); |
| 35 | + buffer.writeAll(name.toLowerCase().split(' '), '-'); |
| 36 | + buffer.write('" title="'); |
| 37 | + buffer.write(feature.featureDescription); |
| 38 | + buffer.write('">'); |
| 39 | + buffer.write(name); |
| 40 | + |
| 41 | + if (url != null) { |
| 42 | + buffer.write('</a>'); |
| 43 | + } else { |
| 44 | + buffer.write('</span>'); |
| 45 | + } |
39 | 46 |
|
40 | | - factory FeatureRendererMd() { |
41 | | - return _instance; |
| 47 | + return buffer.toString(); |
42 | 48 | } |
| 49 | +} |
43 | 50 |
|
44 | | - FeatureRendererMd._(); |
| 51 | +/// A markdown renderer for a [LanguageFeature]. |
| 52 | +class FeatureRendererMd extends FeatureRenderer { |
| 53 | + const FeatureRendererMd(); |
45 | 54 |
|
46 | 55 | @override |
47 | 56 | String renderFeatureLabel(LanguageFeature feature) { |
48 | | - if (feature.featureUrl != null) { |
49 | | - return '*[\<${feature.name}\>](${feature.featureUrl})*'; |
| 57 | + final featureUrl = feature.featureUrl; |
| 58 | + if (featureUrl != null) { |
| 59 | + return '*[\<${feature.name}\>]($featureUrl)*'; |
50 | 60 | } |
51 | 61 | return '*\<${feature.name}\>*'; |
52 | 62 | } |
|
0 commit comments