refactor: simplify script loading and enhance quiz modal
Removed jQuery and Bootstrap loading logic in favor of directly waiting for Bootstrap, reducing complexity and potential errors. Introduced a flag to manage sequential opening of quiz modals, improving UX by ensuring transitions to subsequent quizzes occur seamlessly.
This commit is contained in:
parent
33f55824d8
commit
85d50e19b8
2 changed files with 19 additions and 30 deletions
27
global.js
27
global.js
|
@ -48,30 +48,7 @@ document.addEventListener("DOMContentLoaded", function () {
|
||||||
`;
|
`;
|
||||||
document.head.appendChild(style);
|
document.head.appendChild(style);
|
||||||
|
|
||||||
// Load jQuery if not already defined
|
waitForGlobalVariable("bootstrap")
|
||||||
const jQueryPromise = window.jQuery
|
|
||||||
? Promise.resolve()
|
|
||||||
: loadScript(
|
|
||||||
"https://code.jquery.com/jquery-3.7.1.min.js",
|
|
||||||
"sha256-/JqT3SQfawRcv/BIHPThkBvs0OEvtFFmqPF/lYI/Cxo=",
|
|
||||||
"anonymous"
|
|
||||||
).then(() => waitForGlobalVariable("$"));
|
|
||||||
|
|
||||||
jQueryPromise
|
|
||||||
.then(() => {
|
|
||||||
console.log("jQuery loaded successfully");
|
|
||||||
|
|
||||||
// Load Bootstrap if not already defined
|
|
||||||
const bootstrapPromise = window.bootstrap
|
|
||||||
? Promise.resolve()
|
|
||||||
: loadScript(
|
|
||||||
"https://stackpath.bootstrapcdn.com/bootstrap/5.3.3/js/bootstrap.bundle.min.js",
|
|
||||||
"sha384-YvpcrYf0tY3lHB60NNkmXc5s9fDVZLESaAA55NDzOxhy9GkcIdslK1eN7N6jIeHz",
|
|
||||||
"anonymous"
|
|
||||||
).then(() => waitForGlobalVariable("bootstrap"));
|
|
||||||
|
|
||||||
return bootstrapPromise;
|
|
||||||
})
|
|
||||||
.then(() => {
|
.then(() => {
|
||||||
console.log("Bootstrap loaded successfully");
|
console.log("Bootstrap loaded successfully");
|
||||||
|
|
||||||
|
@ -203,4 +180,4 @@ document.addEventListener("DOMContentLoaded", function () {
|
||||||
console.error(error.message);
|
console.error(error.message);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
22
script.js
22
script.js
|
@ -29,6 +29,8 @@
|
||||||
|
|
||||||
var currentScript = document.currentScript;
|
var currentScript = document.currentScript;
|
||||||
|
|
||||||
|
let openNextFlag = false;
|
||||||
|
|
||||||
function waitForGlobalVariable(variableName) {
|
function waitForGlobalVariable(variableName) {
|
||||||
return new Promise((resolve) => {
|
return new Promise((resolve) => {
|
||||||
const checkVariable = setInterval(() => {
|
const checkVariable = setInterval(() => {
|
||||||
|
@ -128,32 +130,42 @@
|
||||||
$("#regularModal").modal("show");
|
$("#regularModal").modal("show");
|
||||||
}
|
}
|
||||||
|
|
||||||
async function openQuizModal(number) {
|
// Function to open a quiz modal
|
||||||
|
async function openQuizModal(number, openNext = true) {
|
||||||
|
openNextFlag = openNext; // Store the flag in the global variable
|
||||||
|
|
||||||
let href = getFeedbackLinks()[number - 1];
|
let href = getFeedbackLinks()[number - 1];
|
||||||
|
const quizLink = $(`a.stretched-link[href="${href}"]`).closest("li.section");
|
||||||
|
|
||||||
if (href.includes("/feedback/")) {
|
if (href.includes("/feedback/")) {
|
||||||
href = href.replace("view", "complete");
|
href = href.replace("view", "complete");
|
||||||
} else if (href.includes("/quiz/")) {
|
} else if (href.includes("/quiz/")) {
|
||||||
href = href.replace("view", "attempt");
|
href = href.replace("view", "attempt");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const response = await fetch(href);
|
const response = await fetch(href);
|
||||||
href = response.url;
|
href = response.url;
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error('Error fetching the URL:', error);
|
console.error('Error fetching the URL:', error);
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log(href);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
href = href + "&embed=1&modal=1";
|
href = href + "&embed=1&modal=1";
|
||||||
|
|
||||||
openUrlInQuizModal(href);
|
openUrlInQuizModal(href);
|
||||||
|
|
||||||
|
if (openNext) {
|
||||||
|
// Set the data-block attribute to the block containing the current quiz
|
||||||
|
$("#fullScreenModal").attr("data-block", quizLink.attr("id"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Function to close the quiz modal
|
||||||
function closeQuizModal() {
|
function closeQuizModal() {
|
||||||
$("#regularModal").modal("hide");
|
$("#regularModal").modal("hide");
|
||||||
$("#regular-modal-iframe").attr("src", "about:blank");
|
$("#regular-modal-iframe").attr("src", "about:blank");
|
||||||
|
|
||||||
|
if (openNextFlag) {
|
||||||
|
nextContent(); // Open the next activity
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Attach global functions to window.top
|
// Attach global functions to window.top
|
||||||
|
|
Loading…
Reference in a new issue