diff --git a/src/main/js/add-item.js b/src/main/js/add-item.js index e648ecf8f3ff..a80fcc64533d 100644 --- a/src/main/js/add-item.js +++ b/src/main/js/add-item.js @@ -1,25 +1,28 @@ -import $ from "jquery"; +import { createElementFromHtml } from "@/util/dom"; -var getItems = function () { - var d = $.Deferred(); - $.get("itemCategories?depth=3&iconStyle=icon-xlg").done(function (data) { - d.resolve(data); - }); - return d.promise(); +const nameInput = document.querySelector(`#createItem input[name="name"]`); +const copyFromInput = document.querySelector(`#createItem input[name="from"]`); +const copyRadio = document.querySelector(`#createItem input[value="copy"]`); + +const getItems = function () { + return fetch("itemCategories?depth=3&iconStyle=icon-xlg").then((response) => + response.json(), + ); }; -var jRoot = $("head").attr("data-rooturl"); +const jRoot = document.querySelector("head").getAttribute("data-rooturl"); -$.when(getItems()).done(function (data) { - $(function () { +document.addEventListener("DOMContentLoaded", () => { + getItems().then((data) => { ////////////////////////// // helper functions... function parseResponseFromCheckJobName(data) { - var html = $.parseHTML(data); - var element = html[0]; - if (element !== undefined) { - return $(element).text(); + var parser = new DOMParser(); + var html = parser.parseFromString(data, "text/html"); + var element = html.body.firstChild; + if (element) { + return element.textContent; } return undefined; } @@ -38,50 +41,48 @@ $.when(getItems()).done(function (data) { } function getCopyFromValue() { - return $('input[type="text"][name="from"]', "#createItem").val(); + return copyFromInput.value; } function isItemNameEmpty() { - var itemName = $('input[name="name"]', "#createItem").val(); - return itemName === "" ? true : false; + var itemName = nameInput.value; + return itemName.trim() === ""; } function getFieldValidationStatus(fieldId) { - return $("#" + fieldId).data("valid"); + return document.querySelector("#" + fieldId)?.dataset.valid === "true"; } function setFieldValidationStatus(fieldId, status) { - $("#" + fieldId).data("valid", status); + const element = document.querySelector("#" + fieldId); + if (element) { + element.dataset.valid = status; + } } function activateValidationMessage(messageId, context, message) { if (message !== undefined && message !== "") { - $(messageId, context).text("» " + message); + document.querySelector(context + " " + messageId).textContent = + "» " + message; } cleanValidationMessages(context); - $(messageId).removeClass("input-message-disabled"); - enableSubmit(false); + document + .querySelector(messageId) + .classList.remove("input-message-disabled"); + refreshSubmitButtonState(); } function cleanValidationMessages(context) { - $(context) - .find(".input-validation-message") - .addClass("input-message-disabled"); + document + .querySelectorAll(context + " .input-validation-message") + .forEach((element) => element.classList.add("input-message-disabled")); } - function enableSubmit(status) { - var btn = $(".bottom-sticker-inner button[type=submit]"); - if (status === true) { - if (btn.hasClass("disabled")) { - btn.removeClass("disabled"); - btn.prop("disabled", false); - } - } else { - if (!btn.hasClass("disabled")) { - btn.addClass("disabled"); - btn.prop("disabled", true); - } - } + function refreshSubmitButtonState() { + const submitButton = document.querySelector( + ".bottom-sticker-inner button[type=submit]", + ); + submitButton.disabled = !getFormValidationStatus(); } function getFormValidationStatus() { @@ -95,19 +96,23 @@ $.when(getItems()).done(function (data) { } function cleanItemSelection() { - $(".categories").find('li[role="radio"]').attr("aria-checked", "false"); - $("#createItem") - .find('input[type="radio"][name="mode"]') - .removeAttr("checked"); - $(".categories").find(".active").removeClass("active"); + document + .querySelector('.categories li[role="radio"]') + .setAttribute("aria-checked", "false"); + document + .querySelector('#createItem input[type="radio"][name="mode"]') + .removeAttribute("checked"); + document.querySelectorAll(".categories .active").forEach((item) => { + item.classList.remove("active"); + }); setFieldValidationStatus("items", false); } function cleanCopyFromOption() { - $("#createItem") - .find('input[type="radio"][value="copy"]') - .removeAttr("checked"); - $('input[type="text"][name="from"]', "#createItem").val(""); + copyRadio?.removeAttribute("checked"); + if (copyFromInput) { + copyFromInput.value = ""; + } setFieldValidationStatus("from", false); } @@ -115,16 +120,18 @@ $.when(getItems()).done(function (data) { // Draw functions function drawCategory(category) { - var $category = $("
") - .addClass("category") - .attr("id", "j-add-item-type-" + cleanClassName(category.id)); - var $items = $("