Skip to content

Commit 3166716

Browse files
Mpdreamzreakaleek
andauthored
Add support for plain admonitions (#275)
* Add support for plain admonitions Updated the `AdmonitionBlock` to differentiate plain admonitions with minimal styling and adjusted related tests and documentation. Simplifies styling options while expanding customization for callouts. * fix failing test --------- Co-authored-by: Jan Calanog <[email protected]>
1 parent bfa8b3b commit 3166716

File tree

6 files changed

+66
-13
lines changed

6 files changed

+66
-13
lines changed

docs/source/syntax/admonitions.md

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,27 @@ Available admonition types include:
1111
- Warning
1212
- Tip
1313
- Important
14+
- Plain
15+
16+
### Plain
17+
18+
A plain admonition is a callout with no further styling. Useful to create a callout that does not quite fit the mold of the stylized admonitions
19+
20+
```markdown
21+
:::{admonition} This is my callout
22+
23+
It can *span* multiple lines and supports inline formatting.
24+
25+
:::
26+
```
27+
28+
:::{admonition} This is my callout
29+
30+
It can *span* multiple lines and supports inline formatting.
31+
32+
:::
33+
34+
1435

1536
### Note
1637

src/Elastic.Markdown/Myst/Directives/AdmonitionBlock.cs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,20 @@
33
// See the LICENSE file in the project root for more information
44
namespace Elastic.Markdown.Myst.Directives;
55

6-
public class DropdownBlock(DirectiveBlockParser parser, ParserContext context) : AdmonitionBlock(parser, "admonition", context);
6+
public class DropdownBlock(DirectiveBlockParser parser, ParserContext context) : AdmonitionBlock(parser, "dropdown", context);
77

8-
public class AdmonitionBlock(DirectiveBlockParser parser, string admonition, ParserContext context)
9-
: DirectiveBlock(parser, context)
8+
public class AdmonitionBlock : DirectiveBlock
109
{
11-
public string Admonition => admonition == "admonition" ? Classes?.Trim() ?? "note" : admonition;
10+
private readonly string _admonition;
11+
12+
public AdmonitionBlock(DirectiveBlockParser parser, string admonition, ParserContext context) : base(parser, context)
13+
{
14+
_admonition = admonition;
15+
if (_admonition is "admonition")
16+
Classes = "plain";
17+
}
18+
19+
public string Admonition => _admonition;
1220

1321
public override string Directive => Admonition;
1422

@@ -21,7 +29,7 @@ public string Title
2129
{
2230
var t = Admonition;
2331
var title = Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(t);
24-
if (admonition is "admonition" && !string.IsNullOrEmpty(Arguments))
32+
if (_admonition is "admonition" or "dropdown" && !string.IsNullOrEmpty(Arguments))
2533
title = Arguments;
2634
else if (!string.IsNullOrEmpty(Arguments))
2735
title += $" {Arguments}";

src/Elastic.Markdown/Myst/Directives/DirectiveBlockParser.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public DirectiveBlockParser()
2828
InfoPrefix = null;
2929
}
3030

31-
private readonly string[] _admonitions = ["important", "warning", "note", "tip"];
31+
private readonly string[] _admonitions = ["important", "warning", "note", "tip", "admonition"];
3232

3333
private readonly string[] _versionBlocks = ["versionadded", "versionchanged", "versionremoved", "deprecated"];
3434

@@ -54,7 +54,6 @@ public DirectiveBlockParser()
5454
{ "margin", 4 },
5555
{ "sidebar", 4 },
5656
{ "code-cell", 8 },
57-
{ "admonition", 3 },
5857
{ "attention", 3 },
5958
{ "caution", 3 },
6059
{ "danger", 3 },

src/Elastic.Markdown/_static/custom.css

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -125,4 +125,13 @@ See https://github.com/elastic/docs-builder/issues/219 for further details
125125
padding-right: 0 !important;
126126
border-bottom-right-radius: 0 !important;
127127
border-top-right-radius: 0 !important;
128+
}
129+
130+
131+
.admonition.plain {
132+
--icon-url: var(--lucide-chevron-right-url);
133+
--color-4: var(--gray-12);
134+
--color-1: var(--gray-2);
135+
--color-2: var(--gray-a4);
136+
--color-3: var(--gray-10);
128137
}

tests/Elastic.Markdown.Tests/Directives/AdmonitionTests.cs

Lines changed: 22 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
namespace Elastic.Markdown.Tests.Directives;
99

10-
public abstract class AdmonitionTests(ITestOutputHelper output, string directive) : DirectiveTest<AdmonitionBlock>(output,
10+
public abstract class AdmonitionBaseTests(ITestOutputHelper output, string directive) : DirectiveTest<AdmonitionBlock>(output,
1111
$$"""
1212
:::{{{directive}}}
1313
This is an attention block
@@ -23,25 +23,25 @@ A regular paragraph.
2323
public void SetsCorrectAdmonitionType() => Block!.Admonition.Should().Be(directive);
2424
}
2525

26-
public class WarningTests(ITestOutputHelper output) : AdmonitionTests(output, "warning")
26+
public class WarningTests(ITestOutputHelper output) : AdmonitionBaseTests(output, "warning")
2727
{
2828
[Fact]
2929
public void SetsTitle() => Block!.Title.Should().Be("Warning");
3030
}
3131

32-
public class NoteTests(ITestOutputHelper output) : AdmonitionTests(output, "note")
32+
public class NoteTests(ITestOutputHelper output) : AdmonitionBaseTests(output, "note")
3333
{
3434
[Fact]
3535
public void SetsTitle() => Block!.Title.Should().Be("Note");
3636
}
3737

38-
public class TipTests(ITestOutputHelper output) : AdmonitionTests(output, "tip")
38+
public class TipTests(ITestOutputHelper output) : AdmonitionBaseTests(output, "tip")
3939
{
4040
[Fact]
4141
public void SetsTitle() => Block!.Title.Should().Be("Tip");
4242
}
4343

44-
public class ImportantTests(ITestOutputHelper output) : AdmonitionTests(output, "important")
44+
public class ImportantTests(ITestOutputHelper output) : AdmonitionBaseTests(output, "important")
4545
{
4646
[Fact]
4747
public void SetsTitle() => Block!.Title.Should().Be("Important");
@@ -63,6 +63,23 @@ A regular paragraph.
6363
public void SetsCustomTitle() => Block!.Title.Should().Be("Note This is my custom note");
6464
}
6565

66+
67+
public class AdmonitionTitleTests(ITestOutputHelper output) : DirectiveTest<AdmonitionBlock>(output,
68+
"""
69+
```{admonition} This is my custom title
70+
This is an attention block
71+
```
72+
A regular paragraph.
73+
"""
74+
)
75+
{
76+
[Fact]
77+
public void SetsCorrectAdmonitionType() => Block!.Admonition.Should().Be("admonition");
78+
79+
[Fact]
80+
public void SetsCustomTitle() => Block!.Title.Should().Be("This is my custom title");
81+
}
82+
6683
public class DropdownTitleTests(ITestOutputHelper output) : DirectiveTest<AdmonitionBlock>(output,
6784
"""
6885
:::{dropdown} This is my custom dropdown

tests/Elastic.Markdown.Tests/Directives/AdmonitionUnsupportedTests.cs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,5 +32,4 @@ public class HintTests(ITestOutputHelper output) : AdmonitionUnsupportedTests(ou
3232
public class AttentionTests(ITestOutputHelper output) : AdmonitionUnsupportedTests(output, "attention");
3333
public class CautionTests(ITestOutputHelper output) : AdmonitionUnsupportedTests(output, "caution");
3434
public class SeeAlsoTests(ITestOutputHelper output) : AdmonitionUnsupportedTests(output, "seealso");
35-
public class AdmonitionTitleTests(ITestOutputHelper output) : AdmonitionUnsupportedTests(output, "admonition");
3635
// ReSharper restore UnusedType.Global

0 commit comments

Comments
 (0)