AutorÃa | Ultima modificación | Ver Log |
// 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/>./*** Javascript module for displaying feedback in a modal window** @module gradereport_grader/feedback_modal* @copyright 2023 Kevin Percy <kevin.percy@moodle.com>* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/import Modal from 'core/modal';import Notification from 'core/notification';import ajax from 'core/ajax';import Templates from 'core/templates';const Selectors = {showFeedback: '[data-action="feedback"]'};/*** Create the modal to display the feedback.** @param {int} courseid* @param {int} userid* @param {int} itemid* @returns {Promise}*/const getModal = async(courseid, userid, itemid) => {let feedbackData;try {feedbackData = await fetchFeedback(courseid, userid, itemid);} catch (e) {return Promise.reject(e);}return Modal.create({removeOnClose: true,large: true,verticallyCentered: true,}).then(modal => {const body = Templates.render('core_grades/feedback_modal', {feedbacktext: feedbackData.feedbacktext,user: {picture: feedbackData.picture,fullname: feedbackData.fullname,additionalfield: feedbackData.additionalfield,},});modal.setBody(body);modal.setTitle(feedbackData.title);modal.show();return modal;});};/*** Fetch the feedback data.** @param {int} courseid* @param {int} userid* @param {int} itemid* @returns {Promise}*/const fetchFeedback = (courseid, userid, itemid) => {const request = {methodname: 'core_grades_get_feedback',args: {courseid: courseid,userid: userid,itemid: itemid,},};return ajax.call([request])[0];};/*** Register event listeners for the View Feedback links.*/const registerEventListeners = () => {document.addEventListener('click', e => {const showFeedbackTrigger = e.target.closest(Selectors.showFeedback);if (showFeedbackTrigger) {e.preventDefault();const courseid = showFeedbackTrigger.dataset.courseid;const userid = e.target.closest('tr').dataset.uid;const itemid = e.target.closest('td').dataset.itemid;getModal(courseid, userid, itemid).catch(Notification.exception);}});};/*** Initialize module*/export const init = () => {registerEventListeners();};