mod/lti/amd/src/mod_form.js

// 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/>.

/**
 * Event handlers for the mod_lti mod_form.
 *
 * @module      mod_lti/mod_form
 * @copyright   2023 Jake Dallimore <jrhdallimore@gmail.com>
 * @license     http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
 */

"use strict";

import ContentItem from 'mod_lti/contentitem';

/**
 * Initialise module.
 *
 * @param {int} courseId the course id.
 */
const init = (courseId) => {
    const contentItemButton = document.querySelector('[name="selectcontent"]');

    if (!contentItemButton) {
        return;
    }

    contentItemButton.addEventListener('click', () => {
        const contentItemUrl = contentItemButton.getAttribute('data-contentitemurl');
        const contentItemId = document.querySelector('#hidden_typeid').value;
        if (contentItemId) {
            const title = document.querySelector('#id_name').value.trim();
            const text = document.querySelector('#id_introeditor').value.trim();
            const postData = {
                id: contentItemId,
                course: courseId,
                title: title,
                text: text
            };

            // The callback below is called after the content item has been returned and processed.
            ContentItem.init(contentItemUrl, postData, (returnData) => {
                if (!returnData.multiple) {
                    // The state of the grade checkbox has already been set by processContentItemReturnData() but that
                    // hasn't fired the click/change event required by formslib to show/hide the dependent grade fields.
                    // Fire it now.
                    const allowGrades = document.querySelector('#id_instructorchoiceacceptgrades');
                    let allowGradesChangeEvent = new Event('change');
                    allowGrades.dispatchEvent(allowGradesChangeEvent);

                    // If the tool is set to accept grades, make sure "Point" is selected.
                    if (allowGrades.checked) {
                        const gradeType = document.querySelector('#id_grade_modgrade_type');
                        gradeType.value = "point";
                        let gradeTypeChangeEvent = new Event('change');
                        gradeType.dispatchEvent(gradeTypeChangeEvent);
                    }
                }
            });
        }
    });
};

export default {
    init: init
};