MDL-85990 core: Improve core/toggle to accept any attribute

Improve the core/toggle template, so it can accept any attribute
and not only starting with "data-". This will allow to add attributes
like "aria-label", for example.
This commit is contained in:
Mikel Martín
2025-09-15 10:27:40 +02:00
parent bbf404a1bc
commit e4c5c64087
6 changed files with 36 additions and 27 deletions
@@ -0,0 +1,7 @@
issueNumber: MDL-86990
notes:
core:
- message: >-
In toggle.mustache `dataattributes` parameter is deprecated. Use
`extraattributes` instead
type: deprecated
@@ -18,7 +18,7 @@ The parameters for the template context are:
* extraclasses: Any extra classes added to the toggle input outer container.
* checked: If the initial status is checked.
* disabled: If toggle input is disabled.
* dataattributes: Array of name/value elements added as data-attributes.
* extraattributes: Array of name/value elements added as attributes.
* title: Title text.
* label: Label text.
* labelclasses: Any extra classes added to the label container.
@@ -32,8 +32,8 @@ Checked toggle and with "visually-hidden" label.
{
"id": "example-toggle-1",
"checked": true,
"dataattributes": [{
"name": "action",
"extraattributes": [{
"name": "data-action",
"value": "toggle-status"
}],
"title": "Toggle Enabled",
@@ -50,8 +50,8 @@ Disabled toggle with extra classes.
"id": "example-toggle-2",
"disabled": true,
"extraclasses": "mt-2 ms-2",
"dataattributes": [{
"name": "action",
"extraattributes": [{
"name": "data-action",
"value": "toggle-status"
}],
"title": "Toggle Disabled",
+5 -3
View File
@@ -24,8 +24,8 @@
"id": "reality-toggle-3",
"checked": true,
"disabled": false,
"dataattributes": [{
"name": "action",
"extraattributes": [{
"name": "data-action",
"value": "toggle-reality"
}],
"title": "Title example",
@@ -37,9 +37,11 @@
<div class="form-check form-switch {{$extraclasses}}{{extraclasses}}{{/extraclasses}}">
<input type="checkbox" class="form-check-input" id="{{$id}}{{id}}{{/id}}"
{{$attributes}}
{{#dataattributes}}data-{{name}}="{{value}}" {{/dataattributes}}
{{#extraattributes}}{{name}}="{{value}}" {{/extraattributes}}
{{#checked}}checked{{/checked}}
{{#disabled}}disabled{{/disabled}}
{{! TODO MDL-86619: dataattributes will be removed in 6.0. Use extraattributes instead. }}
{{#dataattributes}}data-{{name}}="{{value}}" {{/dataattributes}}
{{/attributes}}>
{{$labelmarkup}}
<label class="form-check-label" for="{{$id}}{{id}}{{/id}}" {{#title}}data-bs-toggle="tooltip" data-bs-placement="top" title="{{title}}"{{/title}}>
@@ -203,10 +203,10 @@ class overview extends \core_courseformat\activityoverviewbase {
$renderer = $this->rendererhelper->get_renderer('mod_forum');
$dataattributes = [
['name' => 'type', 'value' => 'forum-track-toggle'],
['name' => 'action', 'value' => 'toggle'],
['name' => 'forumid', 'value' => $this->forum->id],
['name' => 'targetstate', 'value' => !$tracked],
['name' => 'data-type', 'value' => 'forum-track-toggle'],
['name' => 'data-action', 'value' => 'toggle'],
['name' => 'data-forumid', 'value' => $this->forum->id],
['name' => 'data-targetstate', 'value' => !$tracked],
];
$content = $renderer->render_from_template(
'core/toggle',
@@ -214,7 +214,7 @@ class overview extends \core_courseformat\activityoverviewbase {
'id' => 'forum-track-toggle-' . $this->forum->id,
'checked' => $tracked,
'disabled' => $disabled,
'dataattributes' => $dataattributes,
'extraattributes' => $dataattributes,
'label' => $label,
'labelclasses' => 'visually-hidden',
],
@@ -267,10 +267,10 @@ class overview extends \core_courseformat\activityoverviewbase {
$renderer = $this->rendererhelper->get_renderer('mod_forum');
$dataattributes = [
['name' => 'type', 'value' => 'forum-subscription-toggle'],
['name' => 'action', 'value' => 'toggle'],
['name' => 'forumid', 'value' => $this->forum->id],
['name' => 'targetstate', 'value' => !$subscribed],
['name' => 'data-type', 'value' => 'forum-subscription-toggle'],
['name' => 'data-action', 'value' => 'toggle'],
['name' => 'data-forumid', 'value' => $this->forum->id],
['name' => 'data-targetstate', 'value' => !$subscribed],
];
$content = $renderer->render_from_template(
'core/toggle',
@@ -278,7 +278,7 @@ class overview extends \core_courseformat\activityoverviewbase {
'id' => 'forum-subscription-toggle-' . $this->forum->id,
'checked' => $subscribed,
'disabled' => $disabled,
'dataattributes' => $dataattributes,
'extraattributes' => $dataattributes,
'label' => $label,
'labelclasses' => 'visually-hidden',
],
@@ -166,10 +166,10 @@ class course_external_tools_list extends system_report {
$renderer = $PAGE->get_renderer('core_reportbuilder');
$attributes = [
['name' => 'id', 'value' => $row->id],
['name' => 'courseid', 'value' => $courseid],
['name' => 'action', 'value' => 'showinactivitychooser-toggle'],
['name' => 'state', 'value' => $coursevisible],
['name' => 'data-id', 'value' => $row->id],
['name' => 'data-courseid', 'value' => $courseid],
['name' => 'data-action', 'value' => 'showinactivitychooser-toggle'],
['name' => 'data-state', 'value' => $coursevisible],
];
$label = $coursevisible ? get_string('dontshowinactivitychooser', 'mod_lti')
: get_string('showinactivitychooser', 'mod_lti');
@@ -180,7 +180,7 @@ class course_external_tools_list extends system_report {
'id' => 'showinactivitychooser-toggle-' . $row->id,
'checked' => $coursevisible,
'disabled' => $disabled,
'dataattributes' => $attributes,
'extraattributes' => $attributes,
'label' => $label,
'labelclasses' => 'visually-hidden',
]);
@@ -124,16 +124,16 @@ class report_schedules extends system_report {
$renderer = $PAGE->get_renderer('core_reportbuilder');
$attributes = [
['name' => 'id', 'value' => $row->id],
['name' => 'action', 'value' => 'schedule-toggle'],
['name' => 'state', 'value' => $row->enabled],
['name' => 'data-id', 'value' => $row->id],
['name' => 'data-action', 'value' => 'schedule-toggle'],
['name' => 'data-state', 'value' => $row->enabled],
];
$label = $row->enabled ? get_string('disableschedule', 'core_reportbuilder')
: get_string('enableschedule', 'core_reportbuilder');
return $renderer->render_from_template('core/toggle', [
'id' => 'schedule-toggle-' . $row->id,
'checked' => $row->enabled,
'dataattributes' => $attributes,
'extraattributes' => $attributes,
'label' => $label,
'labelclasses' => 'visually-hidden',
]);