Skip to content

Commit b3dd7d3

Browse files
authored
Add a link to the null safety documentation (#2455)
1 parent 55f83e1 commit b3dd7d3

File tree

3 files changed

+27
-9
lines changed

3 files changed

+27
-9
lines changed

lib/resources/styles.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -478,6 +478,10 @@ h1 .category {
478478
margin: 0 8px 0 0;
479479
}
480480

481+
a.feature:hover {
482+
border-color: #13B9FD;
483+
}
484+
481485
h1 .feature {
482486
vertical-align: middle;
483487
}

lib/src/model/language_feature.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,15 @@ const Map<String, String> _featureDescriptions = {
88
'Null safety': 'Supports the null safety language feature.',
99
};
1010

11+
const Map<String, String> _featureUrls = {
12+
'Null safety': 'https://dart.dev/null-safety',
13+
};
14+
1115
/// An abstraction for a language feature; used to render tags to notify
1216
/// the user that the documentation should be specially interpreted.
1317
class LanguageFeature {
1418
String get featureDescription => _featureDescriptions[name];
19+
String get featureUrl => _featureUrls[name];
1520
String get featureLabel => _featureRenderer.renderFeatureLabel(this);
1621

1722
final String name;

lib/src/render/feature_renderer.dart

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ abstract class FeatureRenderer {
1010

1111
class FeatureRendererHtml extends FeatureRenderer {
1212
static final FeatureRendererHtml _instance = FeatureRendererHtml._();
13+
1314
factory FeatureRendererHtml() {
1415
return _instance;
1516
}
@@ -18,27 +19,35 @@ class FeatureRendererHtml extends FeatureRenderer {
1819

1920
@override
2021
String renderFeatureLabel(LanguageFeature feature) {
21-
var spanClasses = <String>[];
22-
spanClasses.add('feature');
23-
spanClasses
24-
.add('feature-${feature.name.split(' ').join('-').toLowerCase()}');
25-
26-
var buf = StringBuffer();
27-
buf.write(
28-
'<span class="${spanClasses.join(' ')}" title="${feature.featureDescription}">${feature.name}</span>');
29-
return buf.toString();
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>';
30+
}
31+
32+
return '<span class="${classesText}" '
33+
'title="${feature.featureDescription}">${feature.name}</span>';
3034
}
3135
}
3236

3337
class FeatureRendererMd extends FeatureRenderer {
3438
static final FeatureRendererMd _instance = FeatureRendererMd._();
39+
3540
factory FeatureRendererMd() {
3641
return _instance;
3742
}
3843

3944
FeatureRendererMd._();
45+
4046
@override
4147
String renderFeatureLabel(LanguageFeature feature) {
48+
if (feature.featureUrl != null) {
49+
return '*[\<${feature.name}\>](${feature.featureUrl})*';
50+
}
4251
return '*\<${feature.name}\>*';
4352
}
4453
}

0 commit comments

Comments
 (0)