Kumi
762edec903
Cleanup of obsolete event observer functions and modal HTML code. This streamlines the codebase by eliminating unused PHP event observer definitions and redundant embedded modal HTML in JS file. Enhances maintainability and reduces potential overhead. No functionality should be directly impacted.
153 lines
5.4 KiB
JavaScript
153 lines
5.4 KiB
JavaScript
document.addEventListener("DOMContentLoaded", function () {
|
|
// Function to load a script into the DOM
|
|
function loadScript(url, integrity, crossorigin) {
|
|
return new Promise((resolve, reject) => {
|
|
const script = document.createElement("script");
|
|
script.src = url;
|
|
script.integrity = integrity;
|
|
script.crossOrigin = crossorigin;
|
|
script.onload = () => resolve(script);
|
|
script.onerror = () => reject(new Error(`Failed to load script: ${url}`));
|
|
document.head.appendChild(script);
|
|
});
|
|
}
|
|
|
|
// Function to get URL parameters
|
|
function getUrlParameter(name) {
|
|
url = document.location.href;
|
|
urlobj = new URL(url);
|
|
return urlobj.searchParams.get(name);
|
|
}
|
|
|
|
// Check if the 'embed' parameter is set to '1'
|
|
if (getUrlParameter("embed") === "1") {
|
|
// Apply custom CSS to hide Moodle interface elements
|
|
var style = document.createElement("style");
|
|
style.innerHTML = `
|
|
body.path-mod {
|
|
#header, #footer, .breadcrumb, .navbar, .side-pre, .side-post, .drawer, .drawer-toggler, .footer-popover, .navigation {
|
|
display: none !important;
|
|
}
|
|
#region-main {
|
|
margin: 0;
|
|
padding: 0;
|
|
}
|
|
}
|
|
`;
|
|
document.head.appendChild(style);
|
|
|
|
loadScript(
|
|
"https://code.jquery.com/jquery-3.7.1.min.js",
|
|
"sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=",
|
|
"anonymous"
|
|
)
|
|
.then(() => {
|
|
console.log("jQuery loaded successfully");
|
|
// Load Bootstrap after jQuery is loaded
|
|
return loadScript(
|
|
"https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/js/bootstrap.bundle.min.js",
|
|
"sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz",
|
|
"anonymous"
|
|
);
|
|
})
|
|
.then(() => {
|
|
console.log("Bootstrap loaded successfully");
|
|
$(document).ready(function () {
|
|
$(".btn-secondary:contains('Back')").hide()
|
|
|
|
var embedded = getUrlParameter("embed");
|
|
var inModal = getUrlParameter("modal");
|
|
|
|
// Set required attribute on inputs associated with labels containing <i title="Required field">
|
|
$('label:has(i[title="Required field"])').each(function () {
|
|
var inputId = $(this).attr("for");
|
|
$("#" + inputId).attr("required", "required");
|
|
});
|
|
|
|
// Hide the modal if the 'cancel' button is clicked
|
|
$("[name=cancel]").click(function () {
|
|
hideContent();
|
|
});
|
|
|
|
$("form").each(function () {
|
|
var form = $(this);
|
|
|
|
form.submit(function (event) {
|
|
event.preventDefault(); // Prevent the default form submission
|
|
|
|
// Check if the form is valid
|
|
if (!form[0].checkValidity()) {
|
|
form[0].reportValidity();
|
|
return;
|
|
}
|
|
|
|
// Serialize the form data
|
|
var formData = form.serialize();
|
|
|
|
// Add the submit button's data to formData
|
|
var submitButton = form.find(
|
|
'input[type="submit"][name="savevalues"]'
|
|
);
|
|
if (submitButton.length) {
|
|
formData +=
|
|
"&" +
|
|
encodeURIComponent(submitButton.attr("name")) +
|
|
"=" +
|
|
encodeURIComponent(submitButton.val());
|
|
}
|
|
|
|
var sesskey = form.find('input[name=sesskey]').val();
|
|
var attempt = form.find('input[name=attempt]').val();
|
|
|
|
console.log(sesskey);
|
|
console.log(attempt);
|
|
|
|
// Perform the AJAX request
|
|
$.ajax({
|
|
url: form.attr("action"), // Use the form's action attribute
|
|
type: form.attr("method"), // Use the form's method attribute
|
|
data: formData,
|
|
success: function (response) {
|
|
if (form.attr("action").includes("/quiz/")) {
|
|
var finalize = "/mod/quiz/processattempt.php";
|
|
var data = {
|
|
attempt: attempt,
|
|
finishattempt: 1,
|
|
sesskey: sesskey,
|
|
};
|
|
$.post(finalize, data, function (response) {
|
|
console.log(response);
|
|
// Close the modal if `modal=1` is set
|
|
if (inModal === "1") {
|
|
window.top.closeQuizModal();
|
|
} else {
|
|
// Else call the nextContent function
|
|
window.top.nextContent();
|
|
}
|
|
});
|
|
} else {
|
|
// Close the modal if `modal=1` is set
|
|
if (inModal === "1") {
|
|
window.top.closeQuizModal();
|
|
} else {
|
|
// Else call the nextContent function
|
|
window.top.nextContent();
|
|
}
|
|
}
|
|
},
|
|
error: function (xhr, status, error) {
|
|
// Handle any errors that occur during the AJAX request
|
|
console.error(
|
|
"Form submission failed: " + status + " - " + error
|
|
);
|
|
},
|
|
});
|
|
});
|
|
});
|
|
});
|
|
})
|
|
.catch((error) => {
|
|
console.error(error);
|
|
});
|
|
}
|
|
});
|