diff --git a/docs/content/en/content-management/shortcodes.md b/docs/content/en/content-management/shortcodes.md
index 7a589a340..47e4f94ed 100644
--- a/docs/content/en/content-management/shortcodes.md
+++ b/docs/content/en/content-management/shortcodes.md
@@ -101,32 +101,42 @@ Although you can call this shortcode using the `{{* */>}}` notation, computati
{{% note %}}
To override Hugo's embedded `details` shortcode, copy the [source code] to a file with the same name in the layouts/shortcodes directory.
-This may be useful if you are wanting access to more global HTML attributes.
-
[source code]: {{% eturl details %}}
{{% /note %}}
-Use the `details` shortcode to generate a collapsible details HTML element. For example:
+Use the `details` shortcode to create a `details` HTML element. For example:
```text
-{{* details summary="Custom Summary Text" */>}}
-Showing custom `summary` text.
+{{* details summary="See the details" */>}}
+This is a **bold** word.
{{* /details */>}}
```
-Additional examples can be found in the source code. The `details` shortcode can use the following named arguments:
+Hugo renders this to:
+
+```html
+
+ See the details
+ This is a bold word.
+
+```
+
+The details shortcode accepts these named arguments:
summary
-: (`string`) Optional. Specifies the content of the child summary element. Default is "Details"
+: (`string`) The content of the child `summary` element rendered from Markdown to HTML. Default is `Details`.
open
-: (`bool`) Optional. Whether to initially display the contents of the details element. Default is `false`.
-
-name
-: (`string`) Optional. The value of the element's name attribute.
+: (`bool`) Whether to initially display the content of the `details` element. Default is `false`.
class
-: (`string`) Optional. The value of the element's class attribute.
+: (`string`) The value of the element's `class` attribute.
+
+name
+: (`string`) The value of the element's `name` attribute.
+
+title
+: (`string`) The value of the element's `title` attribute.
### figure
diff --git a/tpl/tplimpl/embedded/templates/shortcodes/details.html b/tpl/tplimpl/embedded/templates/shortcodes/details.html
index 932289517..c19d78c3e 100644
--- a/tpl/tplimpl/embedded/templates/shortcodes/details.html
+++ b/tpl/tplimpl/embedded/templates/shortcodes/details.html
@@ -1,68 +1,75 @@
{{- /*
Renders an HTML details element.
-@param {string} [summary] The content of the child summary element.
-@param {bool} [open=false] Whether to initially display the contents of the details element.
@param {string} [class] The value of the element's class attribute.
@param {string} [name] The value of the element's name attribute.
+@param {string} [summary] The content of the child summary element.
+@param {string} [title] The value of the element's title attribute.
+@param {bool} [open=false] Whether to initially display the content of the details element.
@reference https://developer.mozilla.org/en-US/docs/Web/HTML/Element/details
@examples
- {{< details >}}
- A basic collapsible section.
- {{< /details >}}
+ {{< details >}}
+ A basic collapsible section.
+ {{< /details >}}
- {{< details summary="Custom Summary Text" >}}
- Showing custom `summary` text.
- {{< /details >}}
+ {{< details summary="Custom Summary Text" >}}
+ Showing custom `summary` text.
+ {{< /details >}}
- {{< details summary="Open Details" open=true >}}
- Contents displayed initially by using `open`.
- {{< /details >}}
+ {{< details summary="Open Details" open=true >}}
+ Contents displayed initially by using `open`.
+ {{< /details >}}
- {{< details summary="Styled Content" class="my-custom-class" >}}
- Content can be styled with CSS by specifying a `class`.
+ {{< details summary="Styled Content" class="my-custom-class" >}}
+ Content can be styled with CSS by specifying a `class`.
- Target details element:
+ Target details element:
- ```css
- details.my-custom-class { }
- ```
+ ```css
+ details.my-custom-class { }
+ ```
- Target summary element:
+ Target summary element:
- ```css
- details.my-custom-class > summary > * { }
- ```
+ ```css
+ details.my-custom-class > summary > * { }
+ ```
- Target inner content:
+ Target inner content:
- ```css
- details.my-custom-class > :not(summary) { }
- ```
- {{< /details >}}
+ ```css
+ details.my-custom-class > :not(summary) { }
+ ```
+ {{< /details >}}
- {{< details summary="Grouped Details" name="my-details" >}}
- Specifying a `name` allows elements to be connected, with only one able to be open at a time.
- {{< /details >}}
+ {{< details summary="Grouped Details" name="my-details" >}}
+ Specifying a `name` allows elements to be connected, with only one able to be open at a time.
+ {{< /details >}}
*/}}
{{- /* Get arguments. */}}
-{{- $summary := or (.Get "summary") (T "shortcodes.details") "Details" }}
{{- $class := or (.Get "class") "" }}
{{- $name := or (.Get "name") "" }}
+{{- $summary := or (.Get "summary") "Details" }}
+{{- $title := or (.Get "title") "" }}
{{- $open := false }}
{{- if in (slice "false" false 0) (.Get "open") }}
- {{- $open = false }}
-{{- else if in (slice "true" true 1) (.Get "open")}}
- {{- $open = true }}
+ {{- $open = false }}
+{{- else if in (slice "true" true 1) (.Get "open") }}
+ {{- $open = true }}
{{- end }}
{{- /* Render. */}}
-
- {{ $summary | .Page.RenderString }}
- {{ .Inner | .Page.RenderString (dict "display" "block") -}}
-
\ No newline at end of file
+
+ {{ $summary | .Page.RenderString }}
+ {{ .Inner | .Page.RenderString (dict "display" "block") -}}
+
diff --git a/tpl/tplimpl/tplimpl_integration_test.go b/tpl/tplimpl/tplimpl_integration_test.go
index 36355598d..445316a0a 100644
--- a/tpl/tplimpl/tplimpl_integration_test.go
+++ b/tpl/tplimpl/tplimpl_integration_test.go
@@ -606,112 +606,46 @@ func TestDetailsShortcode(t *testing.T) {
files := `
-- hugo.toml --
-disableKinds = ['rss','section','sitemap','taxonomy','term']
-defaultContentLanguage = "en"
-[languages]
- [languages.en]
- weight = 1
- [languages.es]
- weight = 2
--- i18n/en.toml --
-[shortcodes.details]
-other = "Details"
--- i18n/es.toml --
-[shortcodes.details]
-other = "Detalles"
--- layouts/_default/single.html --
+disableKinds = ['page','rss','section','sitemap','taxonomy','term']
+-- layouts/index.html --
{{ .Content }}
--- content/d1.md --
+-- content/_index.md --
---
-title: Default State Test
+title: home
---
{{< details >}}
-Basic example without summary
+A: An _emphasized_ word.
{{< /details >}}
--- content/d2.md --
----
-title: Custom Summary Test
----
-{{< details summary="Custom Summary" >}}
-Example with custom summary text
+
+{{< details
+ class="my-class"
+ name="my-name"
+ open=true
+ summary="A **bold** word"
+ title="my-title"
+>}}
+B: An _emphasized_ word.
{{< /details >}}
--- content/d3.md --
----
-title: Open State Test
----
-{{< details summary="Test Open State" open="true" >}}
-Example with open state
+
+{{< details open=false >}}
+C: An _emphasized_ word.
{{< /details >}}
--- content/d4.md --
----
-title: Attributes Test
----
-{{< details summary="Test Attribute sanitization" style="color: red; font-weight: bold; background-color: #eee" onclick="alert('test')" >}}
-Example testing attribute sanitization
+
+{{< details open="false" >}}
+D: An _emphasized_ word.
{{< /details >}}
--- content/d5.md --
----
-title: Class Test
----
-{{< details class="custom-class" >}}
-Example with allowed class attribute
-{{< /details >}}
--- content/d6.md --
----
-title: Name Test
----
-{{< details name="custom-name" >}}
-Example with allowed name attribute
-{{< /details >}}
--- content/d7.es.md --
----
-title: Localization Test
----
-{{< details >}}
-Localization example without summary
+
+{{< details open=0 >}}
+E: An _emphasized_ word.
{{< /details >}}
`
b := hugolib.Test(t, files)
- // Test1: default state (closed by default)
- b.AssertFileContentEquals("public/d1/index.html",
- "\n\n Details
\n Basic example without summary
\n \n",
- )
- content1 := b.FileContent("public/d1/index.html")
- c := qt.New(t)
- c.Assert(content1, qt.Not(qt.Contains), "open")
-
- // Test2: custom summary
- b.AssertFileContentEquals("public/d2/index.html",
- "\n\n Custom Summary
\n Example with custom summary text
\n \n",
- )
-
- // Test3: open state
- b.AssertFileContentEquals("public/d3/index.html",
- "\n\n Test Open State
\n Example with open state
\n \n",
- )
-
- // Test4: Test sanitization
- b.AssertFileContentEquals("public/d4/index.html",
- "\n\n Test Attribute sanitization
\n Example testing attribute sanitization
\n \n",
- )
- content4 := b.FileContent("public/d4/index.html")
- c.Assert(content4, qt.Not(qt.Contains), "style")
- c.Assert(content4, qt.Not(qt.Contains), "onclick")
- c.Assert(content4, qt.Not(qt.Contains), "alert")
-
- // Test5: class attribute
- b.AssertFileContentEquals("public/d5/index.html",
- "\n\n Details
\n Example with allowed class attribute
\n \n",
- )
-
- // Test6: name attribute
- b.AssertFileContentEquals("public/d6/index.html",
- "\n\n Details
\n Example with allowed name attribute
\n \n",
- )
-
- // Test7: localization
- b.AssertFileContentEquals("public/es/d7/index.html",
- "\n\n Detalles
\n Localization example without summary
\n \n",
+ b.AssertFileContent("public/index.html",
+ "\n Details
\n A: An emphasized word.
\n ",
+ "\n A bold word
\n B: An emphasized word.
\n ",
+ "\n Details
\n C: An emphasized word.
\n ",
+ "\n Details
\n D: An emphasized word.
\n ",
+ "\n Details
\n D: An emphasized word.
\n ",
)
}