Kanban
Creating a new website

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore

25 Aug 2024
Creating a new website

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore

25 Aug 2024
Creating a new website

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore

25 Aug 2024
Creating a new website

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore

25 Aug 2024
Creating a new website

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore

25 Aug 2024
Creating a new website

Lorem ipsum dolor sit amet, consectetur

25 Aug 2024
Creating a new website

Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore

25 Aug 2024

© 2024 WowDash. All Rights Reserved.

Made by wowtheme7

<script> $(function() { $("#sortable-wrapper").sortable(); }); $(function() { $("#sortable1, #sortable2, #sortable3").sortable({ connectWith: ".connectedSortable" }).disableSelection(); }); </script> <!--=========================== Delete & Duplicate js code start ==============================--> <script> // Duplicate Item js document.addEventListener("DOMContentLoaded", function() { document.querySelectorAll(".duplicate-button").forEach(button => { button.addEventListener("click", function() { // Find the closest card to the clicked button const card = this.closest(".kanban-item"); // Clone the card const clone = card.cloneNode(true); // Append the cloned card to the parent container card.parentNode.appendChild(clone); // Add event listener to delete button of the cloned card clone.querySelector(".delete-button").addEventListener("click", function() { clone.remove(); }); }); }); $(document).on("click", ".delete-button", function() { $(this).closest(".kanban-item").addClass("d-none"); }); }); </script> <!--=========================== Delete & Duplicate js code End ==============================--> <!--=========================== Add new Task & Edit Task js code Start ==============================--> <script> document.addEventListener("DOMContentLoaded", function() { // Show the modal to add a new task document.querySelectorAll(".add-kanban, .add-task-button").forEach(button => { button.addEventListener("click", function() { var addTaskModal = new bootstrap.Modal(document.getElementById("addTaskModal")); document.getElementById("editTaskId").value = ""; // Clear edit ID document.getElementById("taskTitle").value = ""; // Clear title document.getElementById("taskDescription").value = ""; // Clear description document.getElementById("taskTag").value = ""; // Clear Tag document.getElementById("startDate").value = ""; // Clear Date document.getElementById("taskImage").value = ""; // Clear file input document.getElementById("taskImagePreview").style.display = "none"; // Hide image preview document.getElementById("taskImagePreview").src = ""; // Clear image preview addTaskModal.show(); }); }); // Preview the image when a file is selected document.getElementById("taskImage").addEventListener("change", function() { var file = this.files[0]; var reader = new FileReader(); reader.onload = function(e) { document.getElementById("taskImagePreview").src = e.target.result; document.getElementById("taskImagePreview").style.display = "block"; }; if (file) { reader.readAsDataURL(file); } }); // Save task button click handler document.getElementById("saveTaskButton").addEventListener("click", function() { var title = document.getElementById("taskTitle").value; var description = document.getElementById("taskDescription").value; var tag = document.getElementById("taskTag").value; var date = document.getElementById("startDate").value; var editTaskId = document.getElementById("editTaskId").value; var imageSrc = document.getElementById("taskImagePreview").src; if (title === "" || description === "") { alert("Title and Description cannot be empty"); return; } var kanbanCardHTML = ` <div class="kanban-card bg-neutral-50 p-16 radius-8 mb-24" id="${editTaskId ? editTaskId : "kanban-" + new Date().getTime()}"> ${imageSrc ? `<div class="radius-8 mb-12 max-h-350-px overflow-hidden"><img src="${imageSrc}" alt="" class="w-100 h-100 object-fit-cover"></div>` : ""} <h6 class="kanban-title text-lg fw-semibold mb-8">${title}</h6> <p class="kanban-desc text-secondary-light">${description}</p> <button type="button" class="start-date btn text-primary-600 border rounded border-primary-600 bg-hover-primary-600 text-hover-white d-flex align-items-center gap-2"> <iconify-icon icon="lucide:tag" class="icon"></iconify-icon> <span class="kanban-tag fw-semibold">${tag}</span> </button> <div class="mt-12 d-flex align-items-center justify-content-between gap-10"> <div class="d-flex align-items-center justify-content-between gap-10"> <iconify-icon icon="solar:calendar-outline" class="text-primary-light"></iconify-icon> <span class="start-date text-secondary-light">${date}</span> </div> <div class="d-flex align-items-center justify-content-between gap-10"> <button type="button" class="card-edit-button text-success-600"><iconify-icon icon="lucide:edit" class="icon text-lg line-height-1"></iconify-icon></button> <button type="button" class="card-delete-button text-danger-600"><iconify-icon icon="fluent:delete-24-regular" class="icon text-lg line-height-1"></iconify-icon></button> </div> </div> </div> `; if (editTaskId) { // Edit existing card var editCard = document.getElementById(editTaskId); if (editCard) { editCard.outerHTML = kanbanCardHTML; } } else { // Add new card var targetKanbanItem = document.querySelector(".kanban-item"); if (targetKanbanItem) { var firstKanbanCard = targetKanbanItem.querySelector(".card-body .kanban-card"); if (firstKanbanCard) { firstKanbanCard.insertAdjacentHTML("beforebegin", kanbanCardHTML); } else { targetKanbanItem.querySelector(".card-body").insertAdjacentHTML("afterbegin", kanbanCardHTML); } } } var addTaskModal = bootstrap.Modal.getInstance(document.getElementById("addTaskModal")); addTaskModal.hide(); }); // Delegate edit and delete button events to dynamically added kanban cards document.addEventListener("click", function(e) { if (e.target.closest(".card-edit-button")) { var card = e.target.closest(".kanban-card"); document.getElementById("taskTitle").value = card.querySelector(".kanban-title").textContent; document.getElementById("taskDescription").value = card.querySelector(".kanban-desc").textContent; document.getElementById("taskTag").value = card.querySelector(".kanban-tag").textContent; document.getElementById("startDate").value = card.querySelector(".start-date").textContent; document.getElementById("editTaskId").value = card.id; var img = card.querySelector("img"); if (img) { document.getElementById("taskImagePreview").src = img.src; document.getElementById("taskImagePreview").style.display = "block"; } else { document.getElementById("taskImagePreview").style.display = "none"; document.getElementById("taskImagePreview").src = ""; } var addTaskModal = new bootstrap.Modal(document.getElementById("addTaskModal")); addTaskModal.show(); } if (e.target.closest(".card-delete-button")) { var card = e.target.closest(".kanban-card"); if (card) { card.remove(); } } }); }); </script>