-
Notifications
You must be signed in to change notification settings - Fork 123
/
Copy pathlanguage_feature_renderer.dart
49 lines (39 loc) · 1.32 KB
/
language_feature_renderer.dart
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// Copyright (c) 2021, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:dartdoc/src/model/language_feature.dart';
/// A renderer for a [LanguageFeature].
abstract class LanguageFeatureRenderer {
const LanguageFeatureRenderer();
/// Render the label of this [feature].
String renderLanguageFeatureLabel(LanguageFeature feature);
}
/// A HTML renderer for a [LanguageFeature].
class LanguageFeatureRendererHtml extends LanguageFeatureRenderer {
const LanguageFeatureRendererHtml();
@override
String renderLanguageFeatureLabel(LanguageFeature feature) {
final buffer = StringBuffer();
final url = feature.featureUrl;
if (url != null) {
buffer.write('<a href="');
buffer.write(url);
buffer.write('"');
} else {
buffer.write('<span');
}
final name = feature.name;
buffer.write(' class="feature feature-');
buffer.writeAll(name.toLowerCase().split(' '), '-');
buffer.write('" title="');
buffer.write(feature.featureDescription);
buffer.write('">');
buffer.write(name);
if (url != null) {
buffer.write('</a>');
} else {
buffer.write('</span>');
}
return buffer.toString();
}
}