Files
node_task_1a/public/js/main.js
T

258 lines
9.5 KiB
JavaScript
Raw Normal View History

2022-04-12 08:57:07 -04:00
const mcqiImageDimensionBox = document.getElementById("demo-box");
const addQuestionForm = document.getElementById("add-question-form");
const editQuestionForm = document.getElementById("edit-question-form");
const extraOutputsContainer = document.getElementById("extra-outputs");
const sliderSelectContainer = document.getElementById("slider-select");
const typeSelect = document.getElementById("select_mapping_type");
const sliderRangeInput = document.getElementById("text_slider_range");
const minSlideRange = document.getElementById("min-slide-range");
const maxSlideRange = document.getElementById("max-slide-range");
const imageDimensions = document.getElementById("image-dimensions");
const imageWidth = document.getElementById("image-width");
const imageHeight = document.getElementById("image-height");
const dependsOnMainInput = document.getElementById("text_depends_on");
const dependsOnQuestionId = document.getElementById("depended_question_id");
const dependsOnAnswer = document.getElementById("depended_answer");
const outputVariableInput = document.getElementById("text_extra_output_variable");
if (addQuestionForm) {
addQuestionForm.addEventListener("submit", function (event) {
event.preventDefault();
if (dependsOnQuestionId.value && dependsOnAnswer.value) {
let joinedStr = `${dependsOnQuestionId.value}|${dependsOnAnswer.value}`;
dependsOnMainInput.value = joinedStr.trim();
} else {
dependsOnMainInput.value = "";
}
if (minSlideRange.value && maxSlideRange.value) {
sliderRangeInput.value = `${minSlideRange.value}-${maxSlideRange.value}`;
}
let arrayOfExtras = [];
const outputVariableExtrasContainer = document.querySelectorAll(".output-variable-container");
outputVariableExtrasContainer.forEach(function (extraContainer) {
//get names and weights
let currentExtraName = extraContainer.querySelector("select").value;
let currentExtraWeight = extraContainer.querySelector(".extra-output-weight").value;
if (currentExtraName && currentExtraWeight) {
arrayOfExtras.push({
name: currentExtraName,
weight: currentExtraWeight,
});
}
});
if (arrayOfExtras.length > 0) {
outputVariableInput.value = JSON.stringify(arrayOfExtras);
} else {
outputVariableInput.value = "[]";
}
this.submit();
});
}
if (editQuestionForm) {
editQuestionForm.addEventListener("submit", function (event) {
event.preventDefault();
console.log("stopped");
if (dependsOnQuestionId.value && dependsOnAnswer.value) {
let joinedStr = `${dependsOnQuestionId.value}|${dependsOnAnswer.value}`;
dependsOnMainInput.value = joinedStr.trim();
} else {
dependsOnMainInput.value = "";
}
if (minSlideRange.value && maxSlideRange.value) {
sliderRangeInput.value = `${minSlideRange.value}-${maxSlideRange.value}`;
}
let arrayOfExtras = [];
const outputVariableExtrasContainer = document.querySelectorAll(".output-variable-container");
outputVariableExtrasContainer.forEach(function (extraContainer) {
//get names and weights
let currentExtraName = extraContainer.querySelector("select").value;
let currentExtraWeight = extraContainer.querySelector(".extra-output-weight").value;
if (currentExtraName && currentExtraWeight) {
arrayOfExtras.push({
name: currentExtraName,
weight: currentExtraWeight,
});
}
});
if (arrayOfExtras.length > 0) {
outputVariableInput.value = JSON.stringify(arrayOfExtras);
} else {
outputVariableInput.value = "[]";
}
this.submit();
});
}
typeSelect.addEventListener("change", function () {
let type = this.value;
if (type == 6) {
sliderSelectContainer.removeAttribute("hidden");
if (!sliderSelectContainer.classList.contains("required")) sliderSelectContainer.classList.add("required");
minSlideRange.setAttribute("required", "required");
maxSlideRange.setAttribute("required", "required");
} else if (type == 5) {
imageDimensions.removeAttribute("hidden");
if (!imageDimensions.classList.contains("required")) imageDimensions.classList.add("required");
imageWidth.setAttribute("required", "required");
imageHeight.setAttribute("required", "required");
} else {
sliderSelectContainer.setAttribute("hidden", "true");
sliderSelectContainer.classList.remove("required");
minSlideRange.removeAttribute("required");
maxSlideRange.removeAttribute("required");
imageDimensions.setAttribute("hidden", "true");
imageDimensions.classList.remove("required");
imageWidth.removeAttribute("required");
imageHeight.removeAttribute("required");
}
});
function addExtraOutputVariable() {
let options = "";
outputVariables.forEach(function (oV) {
options += `<option value="${oV}">${oV}</option>`;
});
let htmlTemplate = `
<div class="output-variable-container mb-2 d-flex flex-lg-row flex-column flex-lg-wrap col-lg-12 px-0 ">
<div class="d-flex mr-2 flex-column px-0 col-lg col-12">
<label for="extra-output-var">Output variable</label>
<select class="custom-select extra-output-var custom-picker d-block w-100" id="extra-output-var" data-style="btn-light" data-live-search="true">
<option class="select_mapping_status_option" value=""></option>
${options}
</select>
</div>
<div class="d-flex mr-2 flex-column px-0 col-lg col-12">
<label for="extra-output-weight">Weight</label>
<input type="number" class="form-control data-input extra-output-weight"/>
</div>
</div>
`;
$(htmlTemplate).insertBefore(".add-another-extra");
}
function questionSelectionChanged(el, event) {
const shown_number_order = document.getElementById("shown_number_order");
const number_order = document.getElementById("number_order");
shown_number_order.value = parseInt(el.options[el.selectedIndex].dataset.lastOrder) + 1;
number_order.value = parseInt(el.options[el.selectedIndex].dataset.lastOrder) + 1;
}
const questionSelect = document.getElementById("select_mapping_type");
const hideAnswerSelect = $(".hide-answer-select");
const answerValueInput = $(".answer-value");
const imageInput = $(".answer-image");
if (questionSelect) {
questionSelect.addEventListener("change", function (e) {
const selectedIndex = this.selectedIndex;
const type = parseInt(this.options[selectedIndex].dataset.type);
if ([4, 5].includes(type)) {
if (!answerValueInput.hasClass("show")) answerValueInput.addClass("show");
} else {
answerValueInput.removeClass("show");
}
if ([5, 6].includes(type)) {
if (!imageInput.hasClass("show")) imageInput.addClass("show");
} else {
imageInput.removeClass("show");
}
if ([6].includes(type)) {
if (!hideAnswerSelect.hasClass("show")) hideAnswerSelect.addClass("show");
} else {
hideAnswerSelect.removeClass("show");
}
});
}
const successflashMessage = document.querySelector(".custom-flash-message.success");
const errorflashMessage = document.querySelector(".custom-flash-message.error");
const el = document.getElementById("sortable-list");
if (el) {
var sortable = new Sortable(el, {
group: "list-1",
ghostClass: "blue-background-class",
sort: true,
animation: 150,
dataIdAttr: "data-id",
draggable: ".accordion",
handle: ".accordion",
chosenClass: "active",
onChoose: function (evt) {},
onEnd: function (evt) {},
onChange: function (evt) {},
});
}
function showMessage(message, type, errorObj = {}) {
if (type == "error") {
if (Object.keys(errorObj).length > 0) {
let errors = ``;
Object.keys(errorObj).forEach(function (key) {
errors += errorObj[key];
errors += "</br>";
});
errorflashMessage.innerHTML = errors;
} else {
errorflashMessage.innerText = message;
}
errorflashMessage.classList.add("show");
setTimeout(() => {
errorflashMessage.classList.remove("show");
}, 5000);
} else if (type == "success") {
successflashMessage.classList.add("show");
successflashMessage.innerText = message;
setTimeout(() => {
successflashMessage.classList.remove("show");
}, 5000);
}
}
function submitAddAnswerForm() {
//check for required
const addAnswerForm = document.getElementById("add-answer-modal-form");
const questionType = addAnswerForm.querySelector("#add_form_question_type").value;
const answer = addAnswerForm.querySelector("#add_form_answer").value;
const answerValue = addAnswerForm.querySelector("#add_form_answer_value").value;
const image = addAnswerForm.querySelector("input[data-target='add_form_image']").value;
if (!answer) {
return showMessage("Answer field is missing", "error");
}
if (questionType == 5 || questionType == 4) {
if (!answerValue) {
return showMessage("Answer value field is missing", "error");
}
}
if (questionType == 5) {
if (!image) {
return showMessage("Image field is missing", "error");
}
}
addAnswerForm.submit();
}
function clearImage(el) {
el.parentElement.querySelector("#file_image_id").value = "";
el.parentElement.querySelector("#media_image_id").src = "/image/placeholder-image.png";
}
function confirmDelete(self) {
if (confirm("Are you sure you want to delete this answer?")) window.location.href = self.getAttribute("href");
}
function changeDimension(type, self) {
if (type == "width") {
mcqiImageDimensionBox.style.width = `${self.value ? self.value : 0}px`;
} else if (type == "height") {
mcqiImageDimensionBox.style.height = `${self.value ? self.value : 0}px`;
}
}