MDL-73470 core: Move toggle template to core

This commit is contained in:
Mikel Martín
2022-01-25 18:04:58 +01:00
parent e63604fb6d
commit 795087462f
8 changed files with 75 additions and 47 deletions
+2
View File
@@ -92,6 +92,7 @@ $string['deletereport'] = 'Delete report';
$string['deletereportconfirm'] = 'Are you sure you want to delete the report \'{$a}\' and all associated data?';
$string['deleteschedule'] = 'Delete schedule';
$string['deletescheduleconfirm'] = 'Are you sure you want to delete the schedule \'{$a}\'?';
$string['disableschedule'] = 'Disable schedule';
$string['editaudience'] = 'Edit audience \'{$a}\'';
$string['editdetails'] = 'Edit details';
$string['editor'] = 'Editor';
@@ -100,6 +101,7 @@ $string['editreportdetails'] = 'Edit report details';
$string['editreportname'] = 'Edit report name';
$string['editscheduledetails'] = 'Edit schedule details';
$string['editschedulename'] = 'Edit schedule name';
$string['enableschedule'] = 'Enable schedule';
$string['entitycourse'] = 'Course';
$string['entityuser'] = 'User';
$string['errorreportcreate'] = 'You cannot create a new report';
+48
View File
@@ -0,0 +1,48 @@
{{!
This file is part of Moodle - http://moodle.org/
Moodle is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Moodle is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Moodle. If not, see <http://www.gnu.org/licenses/>.
}}
{{!
@template core/toggle
Template for toggle element
Example context (json):
{
"id": "reality-toggle-3",
"checked": true,
"disabled": false,
"dataattributes": [{
"name": "action",
"value": "toggle-reality"
}],
"label": "Enable/disable reality",
"labelclasses": "sr-only"
}
}}
<div class="custom-control custom-switch {{$extraclasses}}{{extraclasses}}{{/extraclasses}}">
<input type="checkbox" class="custom-control-input" id="{{$id}}{{id}}{{/id}}"
{{$attributes}}
{{#dataattributes}}data-{{name}}="{{value}}" {{/dataattributes}}
{{#checked}}checked{{/checked}}
{{#disabled}}disabled{{/disabled}}
{{/attributes}}>
{{$labelmarkup}}
<label class="custom-control-label" for="{{$id}}{{id}}{{/id}}">
<span class="{{$labelclasses}}{{labelclasses}}{{/labelclasses}}">{{$label}}{{label}}{{/label}}</span>
</label>
{{/labelmarkup}}
</div>
+1 -1
View File
@@ -1,2 +1,2 @@
function _typeof(a){"@babel/helpers - typeof";if("function"==typeof Symbol&&"symbol"==typeof Symbol.iterator){_typeof=function(a){return typeof a}}else{_typeof=function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a}}return _typeof(a)}define ("core_reportbuilder/schedules",["exports","core/event_dispatcher","core/inplace_editable","core/notification","core/pending","core/prefetch","core/str","core/toast","core_reportbuilder/local/events","core_reportbuilder/local/selectors","core_reportbuilder/local/repository/modals","core_reportbuilder/local/repository/schedules"],function(a,b,c,d,e,f,g,h,i,j,k,l){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.init=void 0;d=o(d);e=o(e);i=n(i);j=n(j);function m(){if("function"!=typeof WeakMap)return null;var a=new WeakMap;m=function(){return a};return a}function n(a){if(a&&a.__esModule){return a}if(null===a||"object"!==_typeof(a)&&"function"!=typeof a){return{default:a}}var b=m();if(b&&b.has(a)){return b.get(a)}var c={},d=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var e in a){if(Object.prototype.hasOwnProperty.call(a,e)){var f=d?Object.getOwnPropertyDescriptor(a,e):null;if(f&&(f.get||f.set)){Object.defineProperty(c,e,f)}else{c[e]=a[e]}}}c.default=a;if(b){b.set(a,c)}return c}function o(a){return a&&a.__esModule?a:{default:a}}var p=!1,q=function(a){(0,f.prefetchStrings)("core_reportbuilder",["deleteschedule","deletescheduleconfirm","editscheduledetails","newschedule","schedulecreated","scheduledeleted","schedulesent","scheduleupdated","sendschedule","sendscheduleconfirm"]);(0,f.prefetchStrings)("core",["confirm","delete"]);if(p){return}document.addEventListener("click",function(c){var f=c.target.closest(j.actions.scheduleCreate);if(f){c.preventDefault();var s=(0,k.createScheduleModal)(c.target,(0,g.get_string)("newschedule","core_reportbuilder"),a);s.addEventListener(s.events.FORM_SUBMITTED,function(){(0,g.get_string)("schedulecreated","core_reportbuilder").then(h.add).then(function(){var a=document.querySelector(j.regions.report);(0,b.dispatchEvent)(i.tableReload,{},a)}).catch(d.default.exception)});s.show()}var m=c.target.closest(j.actions.scheduleToggle);if(m){var n=new e.default("core_reportbuilder/schedules:toggle"),o=+!+m.dataset.state;(0,l.toggleSchedule)(a,m.dataset.id,o).then(function(){var a=m.closest("tr");a.classList.toggle("dimmed_text");m.dataset.state=o;return n.resolve()}).catch(d.default.exception)}var p=c.target.closest(j.actions.scheduleEdit);if(p){c.preventDefault();var t=(0,k.createScheduleModal)(p,(0,g.get_string)("editscheduledetails","core_reportbuilder"),a,p.dataset.scheduleId);t.addEventListener(t.events.FORM_SUBMITTED,function(){(0,g.get_string)("scheduleupdated","core_reportbuilder").then(h.add).then(function(){var a=p.closest(j.regions.report);(0,b.dispatchEvent)(i.tableReload,{},a)}).catch(d.default.exception)});t.show()}var q=c.target.closest(j.actions.scheduleSend);if(q){c.preventDefault();d.default.saveCancelPromise((0,g.get_string)("sendschedule","core_reportbuilder"),(0,g.get_string)("sendscheduleconfirm","core_reportbuilder",q.dataset.scheduleName),(0,g.get_string)("confirm","core")).then(function(){var b=new e.default("core_reportbuilder/schedules:send");return(0,l.sendSchedule)(a,q.dataset.scheduleId).then((0,h.add)((0,g.get_string)("schedulesent","core_reportbuilder"))).then(function(){return b.resolve()}).catch(d.default.exception)}).catch(function(){})}var r=c.target.closest(j.actions.scheduleDelete);if(r){c.preventDefault();d.default.saveCancelPromise((0,g.get_string)("deleteschedule","core_reportbuilder"),(0,g.get_string)("deletescheduleconfirm","core_reportbuilder",r.dataset.scheduleName),(0,g.get_string)("delete","core")).then(function(){var c=new e.default("core_reportbuilder/schedules:delete");return(0,l.deleteSchedule)(a,r.dataset.scheduleId).then((0,h.add)((0,g.get_string)("scheduledeleted","core_reportbuilder"))).then(function(){var a=r.closest(j.regions.report);(0,b.dispatchEvent)(i.tableReload,{preservePagination:!0},a);return c.resolve()}).catch(d.default.exception)}).catch(function(){})}});p=!0};a.init=q});
function _typeof(a){"@babel/helpers - typeof";if("function"==typeof Symbol&&"symbol"==typeof Symbol.iterator){_typeof=function(a){return typeof a}}else{_typeof=function(a){return a&&"function"==typeof Symbol&&a.constructor===Symbol&&a!==Symbol.prototype?"symbol":typeof a}}return _typeof(a)}define ("core_reportbuilder/schedules",["exports","core/event_dispatcher","core/inplace_editable","core/notification","core/pending","core/prefetch","core/str","core/toast","core_reportbuilder/local/events","core_reportbuilder/local/selectors","core_reportbuilder/local/repository/modals","core_reportbuilder/local/repository/schedules"],function(a,b,c,d,e,f,g,h,i,j,k,l){"use strict";Object.defineProperty(a,"__esModule",{value:!0});a.init=void 0;d=o(d);e=o(e);i=n(i);j=n(j);function m(){if("function"!=typeof WeakMap)return null;var a=new WeakMap;m=function(){return a};return a}function n(a){if(a&&a.__esModule){return a}if(null===a||"object"!==_typeof(a)&&"function"!=typeof a){return{default:a}}var b=m();if(b&&b.has(a)){return b.get(a)}var c={},d=Object.defineProperty&&Object.getOwnPropertyDescriptor;for(var e in a){if(Object.prototype.hasOwnProperty.call(a,e)){var f=d?Object.getOwnPropertyDescriptor(a,e):null;if(f&&(f.get||f.set)){Object.defineProperty(c,e,f)}else{c[e]=a[e]}}}c.default=a;if(b){b.set(a,c)}return c}function o(a){return a&&a.__esModule?a:{default:a}}var p=!1,q=function(a){(0,f.prefetchStrings)("core_reportbuilder",["deleteschedule","deletescheduleconfirm","disableschedule","editscheduledetails","enableschedule","newschedule","schedulecreated","scheduledeleted","schedulesent","scheduleupdated","sendschedule","sendscheduleconfirm"]);(0,f.prefetchStrings)("core",["confirm","delete"]);if(p){return}document.addEventListener("click",function(c){var f=c.target.closest(j.actions.scheduleCreate);if(f){c.preventDefault();var s=(0,k.createScheduleModal)(c.target,(0,g.get_string)("newschedule","core_reportbuilder"),a);s.addEventListener(s.events.FORM_SUBMITTED,function(){(0,g.get_string)("schedulecreated","core_reportbuilder").then(h.add).then(function(){var a=document.querySelector(j.regions.report);(0,b.dispatchEvent)(i.tableReload,{},a)}).catch(d.default.exception)});s.show()}var m=c.target.closest(j.actions.scheduleToggle);if(m){var n=new e.default("core_reportbuilder/schedules:toggle"),o=+!+m.dataset.state;(0,l.toggleSchedule)(a,m.dataset.id,o).then(function(){var a=m.closest("tr");a.classList.toggle("dimmed_text");m.dataset.state=o;var b=o?"disableschedule":"enableschedule";return(0,g.get_string)(b,"core_reportbuilder")}).then(function(a){var b=m.parentElement.querySelector("label[for=\"".concat(m.id,"\"] > span"));b.innerHTML=a;return n.resolve()}).catch(d.default.exception)}var p=c.target.closest(j.actions.scheduleEdit);if(p){c.preventDefault();var t=(0,k.createScheduleModal)(p,(0,g.get_string)("editscheduledetails","core_reportbuilder"),a,p.dataset.scheduleId);t.addEventListener(t.events.FORM_SUBMITTED,function(){(0,g.get_string)("scheduleupdated","core_reportbuilder").then(h.add).then(function(){var a=p.closest(j.regions.report);(0,b.dispatchEvent)(i.tableReload,{},a)}).catch(d.default.exception)});t.show()}var q=c.target.closest(j.actions.scheduleSend);if(q){c.preventDefault();d.default.saveCancelPromise((0,g.get_string)("sendschedule","core_reportbuilder"),(0,g.get_string)("sendscheduleconfirm","core_reportbuilder",q.dataset.scheduleName),(0,g.get_string)("confirm","core")).then(function(){var b=new e.default("core_reportbuilder/schedules:send");return(0,l.sendSchedule)(a,q.dataset.scheduleId).then((0,h.add)((0,g.get_string)("schedulesent","core_reportbuilder"))).then(function(){return b.resolve()}).catch(d.default.exception)}).catch(function(){})}var r=c.target.closest(j.actions.scheduleDelete);if(r){c.preventDefault();d.default.saveCancelPromise((0,g.get_string)("deleteschedule","core_reportbuilder"),(0,g.get_string)("deletescheduleconfirm","core_reportbuilder",r.dataset.scheduleName),(0,g.get_string)("delete","core")).then(function(){var c=new e.default("core_reportbuilder/schedules:delete");return(0,l.deleteSchedule)(a,r.dataset.scheduleId).then((0,h.add)((0,g.get_string)("scheduledeleted","core_reportbuilder"))).then(function(){var a=r.closest(j.regions.report);(0,b.dispatchEvent)(i.tableReload,{preservePagination:!0},a);return c.resolve()}).catch(d.default.exception)}).catch(function(){})}});p=!0};a.init=q});
//# sourceMappingURL=schedules.min.js.map
File diff suppressed because one or more lines are too long
+8
View File
@@ -46,7 +46,9 @@ export const init = reportId => {
prefetchStrings('core_reportbuilder', [
'deleteschedule',
'deletescheduleconfirm',
'disableschedule',
'editscheduledetails',
'enableschedule',
'newschedule',
'schedulecreated',
'scheduledeleted',
@@ -101,6 +103,12 @@ export const init = reportId => {
scheduleToggle.dataset.state = scheduleStateToggle;
const stringKey = scheduleStateToggle ? 'disableschedule' : 'enableschedule';
return getString(stringKey, 'core_reportbuilder');
})
.then(toggleLabel => {
const labelContainer = scheduleToggle.parentElement.querySelector(`label[for="${scheduleToggle.id}"] > span`);
labelContainer.innerHTML = toggleLabel;
return pendingPromise.resolve();
})
.catch(Notification.exception);
@@ -121,11 +121,19 @@ class report_schedules extends system_report {
global $PAGE;
$renderer = $PAGE->get_renderer('core_reportbuilder');
return $renderer->render_from_template('core_reportbuilder/local/toggle', [
'action' => 'schedule-toggle',
'id' => $row->id,
'enabled' => $row->enabled,
$attributes = [
['name' => 'id', 'value' => $row->id],
['name' => 'action', 'value' => 'schedule-toggle'],
['name' => '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,
'label' => $label,
'labelclasses' => 'sr-only'
]);
})
);
@@ -1,39 +0,0 @@
{{!
This file is part of Moodle - http://moodle.org/
Moodle is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
Moodle is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with Moodle. If not, see <http://www.gnu.org/licenses/>.
}}
{{!
@template core_reportbuilder/local/toggle
Template for toggle element
Example context (json):
{
"action": "report-toggle",
"id": 3,
"enabled": true
}
}}
<div class="custom-control custom-switch">
<input type="checkbox" class="custom-control-input" id="toggle-{{id}}" data-action="{{action}}" data-id="{{id}}" data-state="{{enabled}}"
{{#enabled}}checked{{/enabled}}>
<label class="custom-control-label" for="toggle-{{id}}">
<span class="sr-only">
{{#enabled}} {{#str}} disable, moodle {{/str}} {{/enabled}}
{{^enabled}} {{#str}} enable, moodle {{/str}} {{/enabled}}
</span>
</label>
</div>
+2 -1
View File
@@ -58,8 +58,9 @@ Feature: Manage custom report schedules
| My report | My schedule |
And I am on the "My report" "reportbuilder > Editor" page logged in as "admin"
And I click on the "Schedules" dynamic tab
When I click on "Disable" "field" in the "My schedule" "table_row"
When I click on "Disable schedule" "field" in the "My schedule" "table_row"
Then the "class" attribute of "My schedule" "table_row" should contain "dimmed_text"
And I click on "Enable schedule" "field" in the "My schedule" "table_row"
Scenario: Edit report schedule
Given the following "core_reportbuilder > Schedules" exist: