|
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