203 lines
		
	
	
	
		
			6.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			203 lines
		
	
	
	
		
			6.8 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| let formInputs = {};
 | |
| 
 | |
| const OpenMenu = (data) => {
 | |
|     if (data == null || data == "") {
 | |
|         console.log("No data detected");
 | |
|         return null;
 | |
|     }
 | |
| 
 | |
|     $(`.main-wrapper`).fadeIn(0);
 | |
| 
 | |
|     let form = ["<form id='qb-input-form'>", `<div class="heading">${data.header != null ? data.header : "Form Title"}</div>`];
 | |
| 
 | |
|     data.inputs.forEach((item, index) => {
 | |
|         switch (item.type) {
 | |
|             case "text":
 | |
|                 form.push(renderTextInput(item));
 | |
|                 break;
 | |
|             case "password":
 | |
|                 form.push(renderPasswordInput(item));
 | |
|                 break;
 | |
|             case "number":
 | |
|                 form.push(renderNumberInput(item));
 | |
|                 break;
 | |
|             case "radio":
 | |
|                 form.push(renderRadioInput(item));
 | |
|                 break;
 | |
|             case "select":
 | |
|                 form.push(renderSelectInput(item));
 | |
|                 break;
 | |
|             case "checkbox":
 | |
|                 form.push(renderCheckboxInput(item));
 | |
|                 break;
 | |
|             case "color":
 | |
|                 form.push(renderColorInput(item));
 | |
|                 break;
 | |
|             default:
 | |
|                 form.push(`<div class="label">${item.text}</div>`);
 | |
|         }
 | |
|     });
 | |
|     form.push(`<div class="footer"><button type="submit" class="btn btn-success" id="submit">${data.submitText ? data.submitText : "Submit"}</button></div>`);
 | |
| 
 | |
|     form.push("</form>");
 | |
| 
 | |
|     $(".main-wrapper").html(form.join(" "));
 | |
| 
 | |
|     $("#qb-input-form").on("change", function (event) {
 | |
|         if ($(event.target).attr("type") == "checkbox") {
 | |
|             const value = $(event.target).is(":checked") ? "true" : "false";
 | |
|             formInputs[$(event.target).attr("value")] = value;
 | |
|         } else {
 | |
|             formInputs[$(event.target).attr("name")] = $(event.target).val();
 | |
|         }
 | |
|     });
 | |
| 
 | |
|     $("#qb-input-form").on("submit", async function (event) {
 | |
|         if (event != null) {
 | |
|             event.preventDefault();
 | |
|         }
 | |
|         await $.post(`https://${GetParentResourceName()}/buttonSubmit`, JSON.stringify({ data: formInputs }));
 | |
|         CloseMenu();
 | |
|     });
 | |
| };
 | |
| 
 | |
| const renderTextInput = (item) => {
 | |
|     const { text, name } = item;
 | |
|     formInputs[name] = item.default ? item.default : "";
 | |
|     const isRequired = item.isRequired == "true" || item.isRequired ? "required" : "";
 | |
|     const defaultValue = item.default ? `value="${item.default}"` : "";
 | |
| 
 | |
|     return ` <input placeholder="${text}" type="text" class="form-control" name="${name}" ${defaultValue} ${isRequired}/>`;
 | |
| };
 | |
| const renderPasswordInput = (item) => {
 | |
|     const { text, name } = item;
 | |
|     formInputs[name] = item.default ? item.default : "";
 | |
|     const isRequired = item.isRequired == "true" || item.isRequired ? "required" : "";
 | |
|     const defaultValue = item.default ? `value="${item.default}"` : "";
 | |
| 
 | |
|     return ` <input placeholder="${text}" type="password" class="form-control" name="${name}" ${defaultValue} ${isRequired}/>`;
 | |
| };
 | |
| const renderNumberInput = (item) => {
 | |
|     try {
 | |
|         const { text, name } = item;
 | |
|         formInputs[name] = item.default ? item.default : "";
 | |
|         const isRequired = item.isRequired == "true" || item.isRequired ? "required" : "";
 | |
|         const defaultValue = item.default ? `value="${item.default}"` : "";
 | |
| 
 | |
|         return `<input placeholder="${text}" type="number" class="form-control" name="${name}" ${defaultValue} ${isRequired}/>`;
 | |
|     } catch (err) {
 | |
|         console.log(err);
 | |
|         return "";
 | |
|     }
 | |
| };
 | |
| 
 | |
| const renderRadioInput = (item) => {
 | |
|     const { options, name, text } = item;
 | |
|     formInputs[name] = options[0].value;
 | |
| 
 | |
|     let div = `<div class="form-input-group"> <div class="form-group-title">${text}</div>`;
 | |
|     div += '<div class="input-group">';
 | |
|     options.forEach((option, index) => {
 | |
|         div += `<label for="radio_${name}_${index}"> <input type="radio" id="radio_${name}_${index}" name="${name}" value="${option.value}"
 | |
|                 ${(item.default ? item.default == option.value : index == 0) ? "checked" : ""}> ${option.text}</label>`;
 | |
|     });
 | |
| 
 | |
|     div += "</div>";
 | |
|     div += "</div>";
 | |
|     return div;
 | |
| };
 | |
| 
 | |
| const renderCheckboxInput = (item) => {
 | |
|     const { options, name, text } = item;
 | |
| 
 | |
|     let div = `<div class="form-input-group"> <div class="form-group-title">${text}</div>`;
 | |
|     div += '<div class="input-group-chk">';
 | |
| 
 | |
|     options.forEach((option, index) => {
 | |
|         div += `<label for="chk_${name}_${index}">${option.text} <input type="checkbox" id="chk_${name}_${index}" name="${name}" value="${option.value}" ${option.checked ? "checked" : ""}></label>`;
 | |
|         formInputs[option.value] = option.checked ? "true" : "false";
 | |
|     });
 | |
| 
 | |
|     div += "</div>";
 | |
|     div += "</div>";
 | |
|     return div;
 | |
| };
 | |
| 
 | |
| const renderSelectInput = (item) => {
 | |
|     const { options, name, text } = item;
 | |
|     let div = `<div class="select-title">${text}</div>`;
 | |
| 
 | |
|     div += `<select class="form-select" name="${name}" title="${text}">`;
 | |
|     formInputs[name] = options[0].value;
 | |
| 
 | |
|     options.forEach((option, index) => {
 | |
|         const isDefaultValue = item.default == option.value;
 | |
|         div += `<option value="${option.value}" ${isDefaultValue ? "selected" : ""}>${option.text}</option>`;
 | |
|         if (isDefaultValue) {
 | |
|             formInputs[name] = option.value;
 | |
|         }
 | |
|     });
 | |
|     div += "</select>";
 | |
|     return div;
 | |
| };
 | |
| 
 | |
| const renderColorInput = (item) => {
 | |
|     const { text, name } = item;
 | |
|     formInputs[name] = item.default ? item.default : "#ffffff";
 | |
|     const isRequired = item.isRequired == "true" || item.isRequired ? "required" : "";
 | |
|     const defaultValue = item.default ? `value="${item.default}"` : "";
 | |
|     return ` <input placeholder="${text}" type="color" class="form-control" name="${name}" ${defaultValue} ${isRequired}/>`;
 | |
| };
 | |
| 
 | |
| const CloseMenu = () => {
 | |
|     $(`.main-wrapper`).fadeOut(0);
 | |
|     $("#qb-input-form").remove();
 | |
|     formInputs = {};
 | |
| };
 | |
| 
 | |
| const SetStyle = (style) => {
 | |
|     var stylesheet = $("<link>", {
 | |
|         rel: "stylesheet",
 | |
|         type: "text/css",
 | |
|         href: `./styles/${style}.css`,
 | |
|     });
 | |
|     stylesheet.appendTo("head");
 | |
| };
 | |
| 
 | |
| const CancelMenu = () => {
 | |
|     $.post(`https://${GetParentResourceName()}/closeMenu`);
 | |
|     return CloseMenu();
 | |
| };
 | |
| 
 | |
| window.addEventListener("message", (event) => {
 | |
|     const data = event.data;
 | |
|     const info = data.data;
 | |
|     const action = data.action;
 | |
|     switch (action) {
 | |
|         case "SET_STYLE":
 | |
|             return SetStyle(info);
 | |
|         case "OPEN_MENU":
 | |
|             return OpenMenu(info);
 | |
|         case "CLOSE_MENU":
 | |
|             return CloseMenu();
 | |
|         default:
 | |
|             return;
 | |
|     }
 | |
| });
 | |
| 
 | |
| document.onkeyup = function (event) {
 | |
|     const charCode = event.key;
 | |
|     if (charCode == "Escape") {
 | |
|         CancelMenu();
 | |
|     } else if (charCode == "Enter") {
 | |
|         SubmitData();
 | |
|     }
 | |
| };
 | |
| 
 | |
| // IDK why this is a thing ? what if they misclick?
 | |
| $(document).click(function (event) {
 | |
|     var $target = $(event.target);
 | |
|     if (!$target.closest(".main-wrapper").length && $(".main-wrapper").is(":visible")) {
 | |
|         CancelMenu();
 | |
|     }
 | |
| });
 | 
